DashBoard.jsp

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ page import="java.io.InputStream"%>
<%@ page import="java.io.InputStreamReader"%>
<%@ page import="java.io.BufferedReader"%>
<%@ page import="java.util.ArrayList"%>
<%@ page import="java.util.List"%>
<%@ page import="java.util.Map"%>
<%@ page import="com.citi.dashboard.InitConf"%>
<%@ page import="com.citi.dashboard.InitConst"%>
<%@ page import="com.citi.dashboard.FindImageFile"%>

<%
	Map<String, String> map = InitConf.getProperties("conf/elementConf.properties");
	String leftElementCyclePeriod = map.get(InitConst.LEFT_ELEMENT_CYCLE_PERIOD);
	String rightElementCyclePeriod = map.get(InitConst.RIGHT_ELEMENT_CYCLE_PERIOD);
	String imageCyclePeriod = map.get(InitConst.IMAGE_CYCLE_PERIOD);
	String excelCyclePeriod = map.get(InitConst.EXCEL_CYCLE_PERIOD);
	String webRefreshPeriod = map.get(InitConst.WEB_REFRESH_PERIOD);
	String bulletinSpeed = map.get(InitConst.BULLETIN_SPEED);

	List<String> leftElements = InitConf.getConf(request.getContextPath() + "conf/leftElements.conf");
	List<String> rightElements = InitConf.getConf(request.getContextPath() + "conf/rightElements.conf");
	List<String> bulletinContent = InitConf.getConf(request.getContextPath() + "conf/bulletinContent.conf");
	List<String> leftElementShowTime = InitConf.getConf(request.getContextPath() + "conf/leftElementShowTime.conf");
	List<String> rightElementShowTime = InitConf.getConf(request.getContextPath() + "conf/rightElementShowTime.conf");
	List<String> imageShowTime = InitConf.getConf(request.getContextPath() + "conf/imageShowTime.conf");
	List<String> excelShowTime = InitConf.getConf(request.getContextPath() + "conf/excelShowTime.conf");
	List<String> bulletinShowTime = InitConf.getConf(request.getContextPath() + "conf/bulletinShowTime.conf");
	//long start = System.currentTimeMillis();
	List<String> allImages = FindImageFile.getAllImageName(request.getContextPath(), "/html/", "image/");
	//for(String name: allImages) {
    	//System.out.println(name);
    //}
	//System.out.println(System.currentTimeMillis() - start);
%>

<html>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<head>
<title>DashBoard</title>
    <link rel="stylesheet" href="css/web-style.css" type="text/css" media="screen"/>
    <link rel="stylesheet" href="css/bulletin-style.css" type="text/css" media="screen" />

</head>

<body οnlοad="init()">
	<div id="mainDiv" class="div-web">
		<div id="leftMainDiv" class="div-left">
		</div>

		<div id="rightMainDiv" class="div-right">
		</div>
	</div>
  <div id="bulletinDiv" class="bulletin">
        <div id="inMar" class="inMar">
            <div id="Mar1">
            </div>
            <div id="Mar2">
            </div>
        </div>
  </div>

</body>

<script type="text/javascript" src="scripts/bulletin.js"></script>
<script type="text/javascript" src="scripts/web.js"></script>
<script type="text/javascript" src="scripts/ajax.js"></script>
<script type="text/javascript" src="scripts/globalObject.js"></script>
<script type="text/javascript" src="scripts/webObject.js"></script>

<script type="text/javascript" language="javascript">
	
	var go = new GlobalObject();
	
	if(typeof Elements == "undefined"){
    	var Elements = {
	      	LeftWeb: 0x1,
	      	RightWeb: 0x2,
	      	Image: 0x4,
	      	Excel: 0x10
    	};
    }

	// global number of webs shown per page
	// global current index of the web
	var g_leftElementIndex = 0;
	var g_rightElementIndex = 0;
	var g_imageIndex = 0;
	
	var g_leftWebDivId = "left_web_div";
	var g_leftImageDivId = "left_image_div";
	var g_leftExcelDivId = "left_excel_div";
	var g_leftExcelFrameId = "left_excel_frame";
	
	var g_rightWebDivId = "right_web_div";
	var g_rightImageDivId = "right_image_div";
	var g_rightExcelDivId = "right_excel_div";
	var g_rightExcelFrameId = "right_excel_frame";

	function S(element) {
		return document.getElementById(element);
	}

	function showElement(id) {
		var element = S(id);
		if(element && element.style) {
				element.style.display = "block";
		}
	}

	function hideElement(id) {
		var element = S(id);
		if(element && element.style) {
				element.style.display = "none";
		}
	}
	
	// Get the specified digit floating-point number
	if(!Number.prototype.toFixed) {
		Number.prototype.toFixed = function(n) {
			with(Math)
				return round(Number(this)*pow(10,n))/pow(10,n);
		};
	}
	
	function regExpTest(regExp, testString) {
		var pattern = new RegExp(regExp);
		return pattern.test(testString);
	}

	// init left elements. Element format is web@@margin-top, margin-right, margin-bottom, margin-left
	function initLeftElements() {
  		var leftElements = [];
  		var index = 0;
  		<% 	String element = "";
			for(int i=0;i<leftElements.size();++i) {
				element = leftElements.get(i);
		%>
				var str = "<%=element%>";
				if(!regExpTest("^\#+", str)) {
					var elementObject = new WebObject();
					elementObject.hasResized = false;
					var array = str.split("@@");
					if(checkArray(array)) {
						if(array.length == 2) {
							//format is web url@@margin-top, margin-right, margin-bottom, margin-left
							elementObject.src = array[0];
							var margins = array[1].split(",");
							if(checkArray(margins) && margins.length == 4) {
								elementObject.marginTop = parseInt(margins[0]);
								elementObject.marginRight = parseInt(margins[1]);
								elementObject.marginBottom = parseInt(margins[2]);
								elementObject.marginLeft = parseInt(margins[3]);
							}
						} else if(array.length == 1) {
							//format is: web url
							elementObject.src = array[0];
						}
						leftElements[index] = elementObject;
						index++;
					}
				}
		<% }
		%>
		return leftElements;
  	}
  	
  	function initRightElements() {
  		var rightElements = [];
  		index = 0;
		<% 	element = "";
			for(int i=0;i<rightElements.size();++i) {
				element = rightElements.get(i);
		%>
				var str = "<%=element%>";
				if(!regExpTest("^\#+", str)) {
					var elementObject = new WebObject();
					elementObject.hasResized = false;
					var array = str.split("@@");
					if(checkArray(array)) {
						if(array.length == 2) {
							//format is web url@@margin-top, margin-right, margin-bottom, margin-left
							elementObject.src = array[0];
							var margins = array[1].split(",");
							if(checkArray(margins) && margins.length == 4) {
								elementObject.marginTop = parseInt(margins[0]);
								elementObject.marginRight = parseInt(margins[1]);
								elementObject.marginBottom = parseInt(margins[2]);
								elementObject.marginLeft = parseInt(margins[3]);
							}
						} else if(array.length == 1) {
							//format is: web url
							elementObject.src = array[0];
						}
						rightElements[index] = elementObject;
						index++;
					}
				}
		<% }
		%>
		return rightElements;
  	}
  	
  	function initAllImages() {
  		var allImages = [];
  		index = 0;
		<% 	element = "";
			for(int i=0;i<allImages.size();++i) {
				element = allImages.get(i);
		%>
				var str = "<%=element%>";
				if(!regExpTest("^\#+", str)) {
					allImages[index] = str;
					index++;
				}
		<% }
		%>
		return allImages;
  	}
  	
  	function initLeftWebCyclePeriod() {
  		var periodArray = [];
		var element = "<%=leftElementCyclePeriod%>";
		periodArray[0] = element;
		return periodArray;
  	}
  	
  	function initRightWebCyclePeriod() {
  		var periodArray = [];
		var element = "<%=rightElementCyclePeriod%>";
		periodArray[0] = element;
		return periodArray;
  	}
  	
  	function initImageCyclePeriod() {
  		var periodArray = [];
		var element = "<%=imageCyclePeriod%>";
		periodArray[0] = element;
		return periodArray;
  	}
  	
  	function initExcelCyclePeriod() {
  		var periodArray = [];
		var element = "<%=excelCyclePeriod%>";
		periodArray[0] = element;
		return periodArray;
  	}
  	
  	function initWebRefreshPeriod() {
  		var periodArray = [];
		var element = "<%=webRefreshPeriod%>";
		periodArray[0] = element;
		return periodArray;
  	}
  	
  	function initBulletinSpeed() {
  		var bulletinSpeedArray = [];
		var element = "<%=bulletinSpeed%>";
		bulletinSpeedArray[0] = element;
		return bulletinSpeedArray;
  	}
  	
  	function initBulletinContent() {
  		var bulletinContent = [];
  		var index = 0;
		<% 	element = "";
			for(int i=0;i<bulletinContent.size();++i) {
				element = bulletinContent.get(i);
		%>
				var str = "<%=element%>";
				if(!regExpTest("^\#+", str)) {
					bulletinContent[index] = str;
					index++;
				}
		<% }
		%>
		return bulletinContent;
  	}
  	
  	function initImageShowTime() {
  		var timeIntervals = [];
  		index = 0;
		<% 	element = "";
			for(int i=0;i<imageShowTime.size();++i) {
				element = imageShowTime.get(i);
		%>
				var str = "<%=element%>";
				if(!regExpTest("^\#+", str)) {
					timeIntervals[index] = str;
					index++;
				}
		<% }
		%>
		return timeIntervals;
  	}
  	
  	function initLeftWebShowTime() {
  		var timeIntervals = [];
  		index = 0;
		<% 	element = "";
			for(int i=0;i<leftElementShowTime.size();++i) {
				element = leftElementShowTime.get(i);
		%>
				var str = "<%=element%>";
				if(!regExpTest("^\#+", str)) {
					timeIntervals[index] = str;
					index++;
				}
		<% }
		%>
		return timeIntervals;
  	}
  	
  	function initRightWebShowTime() {
  		var timeIntervals = [];
  		index = 0;
		<% 	element = "";
			for(int i=0;i<rightElementShowTime.size();++i) {
				element = rightElementShowTime.get(i);
		%>
				var str = "<%=element%>";
				if(!regExpTest("^\#+", str)) {
					timeIntervals[index] = str;
					index++;
				}
		<% }
		%>
		return timeIntervals;
  	}
  	
  	function initExcelShowTime() {
  		var timeIntervals = [];
  		index = 0;
		<% 	element = "";
			for(int i=0;i<excelShowTime.size();++i) {
				element = excelShowTime.get(i);
		%>
				var str = "<%=element%>";
				if(!regExpTest("^\#+", str)) {
					timeIntervals[index] = str;
					index++;
				}
		<% }
		%>
		return timeIntervals;
  	}
  	
  	function initBulletinShowTime() {
  		var timeIntervals = [];
  		index = 0;
		<% 	element = "";
			for(int i=0;i<bulletinShowTime.size();++i) {
				element = bulletinShowTime.get(i);
		%>
				var str = "<%=element%>";
				if(!regExpTest("^\#+", str)) {
					timeIntervals[index] = str;
					index++;
				}
		<% }
		%>
		return timeIntervals;
  	}
  	
  	function checkLeftElements(leftElementShowTime) {
  		if(!checkArray(leftElementShowTime))
  			return null;

  		if(checkTime(leftElementShowTime)) {
  			// get left elements from cache
  			if(checkArray(go.getLeftElements()))
  				return go.getLeftElements();
  			// get the elements from configuration, unit is ms
  			var leftElements = initLeftElements();
  			if(!leftElements) {
  				//alert("exception occurs when initial left elements");
  				return null;
  			}
  			// get the cycle period of left webs from configuration, unit is ms
  			var webPeriodArray = initLeftWebCyclePeriod();
  			// default web cycle period is 2 minutes: 120 000ms
  			var period = 120000;
  			if(webPeriodArray != null && (webPeriodArray instanceof Array) && webPeriodArray.length == 1) {
  				period = webPeriodArray[0];
  			}

  			leftElements.name = Elements.LeftWeb;
  			leftElements.period = period;
  			go.setLeftElelments(leftElements);
  			return leftElements;
  		}
  		return null;
  	}
  	
  	function checkRightElements(rightElementShowTime) {
  		if(!checkArray(rightElementShowTime))
  			return null;

  		if(checkTime(rightElementShowTime)) {
  			// get right elements from cache
  			if(checkArray(go.getRightElements()))
  				return go.getRightElements();
  			// initial right elements
  			var rightElements = initRightElements();
  			if(!rightElements) {
  				//alert("exception occurs when initial right elements");
  				return null;
  			}
  			// get the cycle period of right webs from configuration, unit is ms
  			var webPeriodArray = initRightWebCyclePeriod();
  			// default web cycle period is 2 minutes: 120 000ms
  			var period = 120000;
  			if(webPeriodArray != null && (webPeriodArray instanceof Array) && webPeriodArray.length == 1) {
  				period = webPeriodArray[0];
  			}
  			rightElements.name = Elements.RightWeb;
  			rightElements.period = period;
  			go.setRightElements(rightElements);
  			return rightElements;
  		}
  		return null;
  	}
  	
  	function checkImage(imageShowTime) {
  		if(!checkArray(imageShowTime)) 
  			return null;
  		
  		if(checkTime(imageShowTime)) {
  		// get images from cache
  			if(checkArray(go.getImages()))
  				return go.getImages();
  			// initial all images
  			var allImages = initAllImages();
  			if(!allImages) {
  				alert("exception occurs when initial images");
  				return;
  			}
  			// get the cycle period of images from configuration, unit is ms
  			var imagePeriodArray = initImageCyclePeriod();
  			// default image cycle period is 2 minutes: 120 000ms
  			var period = 120000;
  			if(imagePeriodArray != null && (imagePeriodArray instanceof Array) && imagePeriodArray.length == 1) {
  				period = imagePeriodArray[0];
  			}
  			allImages.period = period;
  			allImages.name = Elements.Image;
  			go.setImages(allImages);
  			return allImages;
  		}
  		return null;
  	}
  	
  	function checkExcel(excelShowTime) {
  		if(!checkArray(excelShowTime))
  			return;
		
  		if(checkTime(excelShowTime)) {
  			// get excel images from cache
  			if(checkArray(go.getExcelImages()))
  				return go.getExcelImages();
	  		var url = "/excelimage/action";
	  		doRequestUsingGET(url, checkExcelCallBack);
  		}
  	}
  	
  	function checkExcelCallBack() {
  		if(xmlHttp.readyState == 4) {
          if(xmlHttp.status == 200) {
        	  var respText = xmlHttp.responseText;
        	  if(respText) {
        		  excelImageArray = respText.split("@@");
        		  if(checkArray(excelImageArray)) {
        			  	for(var i=0;i<excelImageArray.length;++i) {
        			  		//alert("excelImageArray ====== " + excelImageArray[i] );
        			  	}
        			  
        				// get the cycle period of excel images from configuration, unit is ms
        			  	var excelPeriodArray = initExcelCyclePeriod();
			  			// default image cycle period is 2 minutes: 120 000ms
			  			var period = 120000;
			  			if(excelPeriodArray != null && (excelPeriodArray instanceof Array) && excelPeriodArray.length == 1) {
			  				period = excelPeriodArray[0];
			  			}
        			    excelImageArray.name = Elements.Excel;
        			    excelImageArray.period = period;
        			    go.setExcelImages(excelImageArray);
        		  } else {
        			  alert("Exception occurs of the excel image array");
        		  }
        	  }
          }
      }
  	}
  	
  	function checkBulletin(bulletinShowTime) {
  		if(!checkArray(bulletinShowTime))
  			return;

  		if(checkTime(bulletinShowTime)) {
  			// get bulletin from cache
  			if(go.getBulletinSpeed() && checkArray(go.getBulletinContents())) {
  				initBulletin(go.getBulletinSpeed(), go.getBulletinContents());
  				return;
  			}

	  		var bulletinSpeed = initBulletinSpeed();
			if(checkArray(bulletinSpeed)) {
				bulletinSpeed = g_defaultSpeed;
			} 
			
			var bulletinArray = initBulletinContent();
			initBulletin(bulletinSpeed, bulletinArray);
			go.setBulletinContents(bulletinArray);
			go.setBulletinSpeed(bulletinSpeed);
  		}
  	}
  	
	function init() {
		var leftElementShowTime = initLeftWebShowTime();
  		go.setLeftElementShowTime(leftElementShowTime);
		var leftElements = checkLeftElements(leftElementShowTime);
		
		var rightElementShowTime = initRightWebShowTime();
  		go.setRightElementShowTime(rightElementShowTime);
		var rightElements = checkRightElements(rightElementShowTime);
		
		var imageShowTime = initImageShowTime();
  		go.setImageShowTime(imageShowTime);
		var images = checkImage(imageShowTime);
		
		var excelShowTime = initExcelShowTime();
  		go.setExcelShowTime(excelShowTime);
		var excelImages = checkExcel(excelShowTime);
		
		var bulletinShowTime = initBulletinShowTime();
		go.setBulletinShowTime(bulletinShowTime);
		checkBulletin(bulletinShowTime);
		
		//get next elements(webs, images, excels etc)
		var allElements = new Array();
		allElements[0] = leftElements;
		allElements[1] = rightElements;
		allElements[2] = images	;
		allElements[3] = excelImages;
		if(!go) {
			go = new GlobalObject();
		}
		go.setLeftElelments(leftElements);
		go.setRightElements(rightElements);
		go.setAllElements(allElements);
		
		initMainHtml("leftMainDiv", leftElements);
		initMainHtml("rightMainDiv", rightElements);
		
		changeElement(leftElements);
		changeElement(rightElements);
		
		changeElementCyclically();
		
		// get web refresh period, default period is 1 hour, equals 3600000ms
		var webRefreshPeriod = 3600000;
		var webRefreshArray = initWebRefreshPeriod();
		if(webRefreshArray && (webRefreshArray instanceof Array) && webRefreshArray.length == 1) {
			webRefreshPeriod = webRefreshArray[0];
		}
		setInterval(refreshWebs(leftElements, rightElements), webRefreshPeriod);
	}
	
	function initImageHtml(imageDivId, visibleFlag) {
		var html = "<div id='";
		html += imageDivId;
		html += "' style='display:";
		if(visibleFlag == true) {
			html += "block'></div>";
		} else {
			html += "none'></div>";
		}
		return html;
	}

	function changeImageHtml(parentDivId, imageDivId, src, visibleFlag) {
		//debugger;
		var div = S(parentDivId);
		if(!div) {
			alert("The div contains the image doesn't exists!");
			return;
		}
		var divWidth = div.offsetWidth;
		var divHeight = div.offsetHeight;
		
		// get the original width and height of image
		var img = new Image();
		img.src = src;
		var imgWidth = img.width;
		var imgHeight = img.height;
		img.onload = function() {
			//debugger;
			imgWidth = this.width;
			imgHeight = this.height;
			// get the ratio of image
			var widthRatio = (divWidth/imgWidth).toFixed(3);
			var heightRatio = (divHeight/imgHeight).toFixed(3);
			var min = widthRatio < heightRatio ? widthRatio : heightRatio;
			
			var newImgWidth = Math.floor(imgWidth * min);
			var newImgHeight = Math.floor(imgHeight * min);
			
			var marginTop = Math.floor((divHeight - newImgHeight)/2);
			
			var imageDiv = S(imageDivId);
			if(!imageDiv) {
				alert("Elements " + imageDivId + " doesn't exists!");
				return;
			}

			var html = "<img src='";
			html += src;
			html += "' width='";
			html += newImgWidth;
			html += "' height='";
			html += newImgHeight;
			html += "'>";
			
			imageDiv.style.margin = marginTop + "px auto";
			imageDiv.innerHTML = "";
			imageDiv.innerHTML = html;
			if(visibleFlag == true) {
				imageDiv.style.display = "block";
			} else if (visibleFlag == false) {
				imageDiv.style.display = "none";
			}
			img = null;
		};
		img = null;
	}

	function initExcelHtml(excelDivId, divClass, frameId, frameClass, visibleFlag) {
		var html = "<div id='";
		html += excelDivId;
		html += "' class='";
		html += divClass;
		if(visibleFlag == true) {
			html += "' style='display:block'>";
		} else if(visibleFlag == false) {
			html += "' style='display:none'>";
		}
		html += "<iframe id='";
		html += frameId;
		html += "' class='";
		html += frameClass;
		html += "' scrolling='no'></iframe></div>";
		
		//debugger;
		
		return html;
	}
	
	function changeExcelHtml(excelDivId, frameId, frameClass, visibleFlag, src) {
		var excelDiv = S(excelDivId);
		if(!excelDiv) {
			alert("Elements " + excelDivId + " doesn't exists!");
			return;
		}
		var frame = S(frameId);
		if(!frame) {
			alert("Elements " + frameId + " doesn't exists!");
			return;
		}
		
		var html = "<iframe id='";
		html += frameId;
		html += "' class='";
		html += frameClass;
		html += "' scrolling='no' src='";
		html += src;
		html += "'></iframe>";
		
		//debugger;
		
		excelDiv.innerHTML = "";
		excelDiv.innerHTML = html;
		
		if(visibleFlag == true) {
			excelDiv.style.display = "block";
		} else if (visibleFlag == false) {
			excelDiv.style.display = "none";
		}
	}	
	
	function isWeb(file) {
		var regExp = /^(http\:\/\/)|(https\:\/\/)|(HTTP\:\/\/)|(HTTPS\:\/\/)/;
		if((file instanceof WebObject) && file.src){
			file = file.src;
		}
		file = file.toLowerCase();
		if(regExp.test(file)) 
			return true;
		else
			return false;
	}
	
	function isImage(file) {
		var regExp = /\.(gif|jpg|jpeg|png|GIF|JPG|JPEG|PNG)$/;
		//file = file.toLowerCase();
		if(regExp.test(file))
			return true;
		else
			return false;
	}
	
	function isExcel(file) {
		var regExp = /\.(xls)|(xlsx)|(XLS)|(XLSX)$/;
		file = file.toLowerCase();
		if(regExp.test(file)) 
			return true;
		else
			return false;
	}
	
	function clearCycle() {
		var timeId = go.getElementCycleTimeId();
		if(timeId != null) {
			clearInterval(timeId);
			go.setElementCycleTimeId(null);
		}
	}

	function refreshWebs(leftElements, rightElements) {
		return function() {
			//debugger;
			clearCycle();
			// function refreshWebHtml(webDivId, framePrefix, frameClass, elements)
			refreshWebHtml("leftMainDiv", g_leftFramePrefix, "frame-web-left", leftElements);
			refreshWebHtml("rightMainDiv", g_rightFramePrefix, "frame-web-right", rightElements);

			changeElementCyclically();
		};
	}
	
	
	function initMainHtml(divId, elements) {
		var div = S(divId);
		if(!div) {
			alert("Div element: " + divId + " doesn't exists!");
			return;
		}
		if(!elements.name) {
			alert("unknown element name : " + elements.name);
			return;
		}
		var html = "";
		switch(elements.name) {
			case Elements.LeftWeb:
			  // function initWebHtml(webDivId, framePrefix, frameClass, elements)
				html += initWebHtml(g_leftWebDivId, g_leftFramePrefix, "frame-web-left", elements);
				// initImageHtml(imageDivId, visibleFlag)
				html += initImageHtml(g_leftImageDivId, false);
				// function initExcelHtml(excelDivId, divClass, frameId, frameClass, visibleFlag)
				html += initExcelHtml(g_leftExcelDivId, "div-excel-left", g_leftExcelFrameId, "frame-excel-left", false);
				// alert("div.innerHTML ============= " + html);
				div.innerHTML = "";
				div.innerHTML = html;
				
				//resizeAllIframeWhenInit(g_leftFramePrefix, elements);
				break;
			
			case Elements.RightWeb:
			  // function initWebHtml(webDivId, framePrefix, frameClass, elements)
				html += initWebHtml(g_rightWebDivId, g_rightFramePrefix, "frame-web-right", elements);
				// initImageHtml(imageDivId, visibleFlag)
				html += initImageHtml(g_rightImageDivId, false);
				// function initExcelHtml(excelDivId, divClass, frameId, frameClass, visibleFlag)
				html += initExcelHtml(g_rightExcelDivId, "div-excel-right", g_rightExcelFrameId, "frame-excel-right", false);
				// alert("div.innerHTML ============= " + html);
				div.innerHTML = "";
				div.innerHTML = html;
				
				//resizeAllIframeWhenInit(g_rightFramePrefix, elements);
				break;
			
			default:
				return;
		}
	}
	
	function changeElement(nextElementsArray) {
			if(!checkArray(nextElementsArray)) {
				alert("Parameter 'nextElementsArray' should be an non empty array");
				return;
			}
			var nextElemName = nextElementsArray.name;
			switch(nextElemName) {
				case Elements.LeftWeb:
					if(!nextElementsArray[g_leftElementIndex].src) {
						alert("left element should contains src attribute");
						return;
					}
						
					if(isWeb(nextElementsArray[g_leftElementIndex].src)) {
						showWebFrame(nextElemName);
						showElement(g_leftWebDivId);
						hideElement(g_leftImageDivId);
						hideElement(g_leftExcelDivId);
					} else if(isImage(nextElementsArray[g_leftElementIndex].src)) {
						//function changeImageHtml(parentDivId, imageDivId, src, visibleFlag)
						changeImageHtml("leftMainDiv", g_leftImageDivId, nextElementsArray[g_leftElementIndex].src, true);
						hideElement(g_leftWebDivId);
						hideElement(g_leftExcelDivId);
					} else if(isExcel(nextElementsArray[g_leftElementIndex].src)) {
						// function changeExcelHtml(excelDivId, frameId, frameClass, visibleFlag, src)
						changeExcelHtml(g_leftExcelDivId, g_leftExcelFrameId, "frame-excel-left", true, nextElementsArray[g_leftElementIndex].src);
						hideElement(g_leftWebDivId);
						hideElement(g_leftImageDivId);
					} else {
						return;
					}
					g_leftElementIndex++;
					if(g_leftElementIndex >= nextElementsArray.length) {
						g_leftElementIndex = 0;
					}
					break;
				
				case Elements.RightWeb:
					if(!nextElementsArray[g_rightElementIndex].src) {
						alert("right element should contains src attribute");
						return;
					}
					if(isWeb(nextElementsArray[g_rightElementIndex].src)) {
						showWebFrame(nextElemName);
						showElement(g_rightWebDivId);
						hideElement(g_rightImageDivId);
						hideElement(g_rightExcelDivId);
					} else if(isImage(nextElementsArray[g_rightElementIndex].src)) {
						//function changeImageHtml(parentDivId, imageDivId, src, visibleFlag)
						changeImageHtml("rightMainDiv", g_rightImageDivId, nextElementsArray[g_rightElementIndex].src, true);
						hideElement(g_rightWebDivId);
						hideElement(g_rightExcelDivId);
					} else if(isExcel(nextElementsArray[g_rightElementIndex].src)) {
						// function changeExcelHtml(excelDivId, frameId, frameClass, visibleFlag, src)
						changeExcelHtml(g_rightExcelDivId, g_rightExcelFrameId, "frame-excel-right", true, nextElementsArray[g_rightElementIndex].src);
						hideElement(g_rightWebDivId);
						hideElement(g_rightImageDivId);
					} else {
						return;
					}
					g_rightElementIndex++;
					if(g_rightElementIndex >= nextElementsArray.length) {
						g_rightElementIndex = 0;
					}
					break;
					
				case Elements.Image:
					//debugger;
					var randomAlternativeSide = Math.floor(Math.random()*2);
					// show image in left iframe
					if(randomAlternativeSide == 0) {
						if(isImage(nextElementsArray[g_imageIndex])) {
							//function changeImageHtml(parentDivId, imageDivId, src, visibleFlag)
							changeImageHtml("leftMainDiv", g_leftImageDivId, nextElementsArray[g_imageIndex], true);
							hideElement(g_leftWebDivId);
							hideElement(g_leftExcelDivId);
						}
						g_imageIndex++;
						if(g_imageIndex >= nextElementsArray.length) {
							g_imageIndex = 0;
						}
					} else if(randomAlternativeSide == 1) {
						if(isImage(nextElementsArray[g_imageIndex])) {
							//function changeImageHtml(parentDivId, imageDivId, src, visibleFlag)
							changeImageHtml("rightMainDiv", g_rightImageDivId, nextElementsArray[g_imageIndex], true);
							hideElement(g_rightWebDivId);
							hideElement(g_rightExcelDivId);
						}
						g_imageIndex++;
						if(g_imageIndex >= nextElementsArray.length) {
							g_imageIndex = 0;
						}
					}
					break;
				
				case Elements.Excel:
					var randomAlternativeSide = Math.floor(Math.random()*2);
					// show image in left iframe
					var currentIndex = go.getExcelIndex();
					if(randomAlternativeSide == 0) {
						if(isImage(go.excelImages[currentIndex])) {
							//function changeImageHtml(parentDivId, imageDivId, src, visibleFlag)
							changeImageHtml("leftMainDiv", g_leftImageDivId, go.excelImages[currentIndex], true);
							hideElement(g_leftWebDivId);
							hideElement(g_leftExcelDivId);
						}
						var nextIndex = currentIndex + 1;
						if(nextIndex >= go.getExcelImages().length) {
							go.setExcelIndex(0);
						} else {
							go.setExcelIndex(nextIndex);
						}
					} else if(randomAlternativeSide == 1) {
						if(isImage(go.excelImages[go.getExcelIndex()])) {
							//function changeImageHtml(parentDivId, imageDivId, src, visibleFlag)
							changeImageHtml("rightMainDiv", g_rightImageDivId, go.excelImages[go.getExcelIndex()], true);
							hideElement(g_rightWebDivId);
							hideElement(g_rightExcelDivId);
						}
						var nextIndex = currentIndex + 1;
						if(nextIndex >= go.getExcelImages().length) {
							go.setExcelIndex(0);
						} else {
							go.setExcelIndex(nextIndex);
						}
					}
					break;
				
				default:
					alert("haven't support this kind of element yet");
					return;
			}
	}
	
	function changeElementCyclically() {
		var nextElementsArray = [];
			try {
				var leftElements = checkLeftElements(go.getLeftElementShowTime());
				var rightElements = checkRightElements(go.getRightElementShowTime());
				var images = checkImage(go.getImageShowTime());
				var excelImages = checkExcel(go.getExcelShowTime());
				
				var allElements = [leftElements, rightElements, images, excelImages];
				go.setAllElements(allElements);
				
				nextElementsArray = nextShownElement(allElements);
				if(!nextElementsArray.period) {
					alert("element period is unknown");
					return;
				}
				clearCycle();
				changeElement(nextElementsArray);
			} catch (e) {
				alert("Exception occurs when elements cycles");
			} finally {
				var period = 10000;
				if(nextElementsArray.period)
					period = nextElementsArray.period;
				var timeId = setInterval(changeElementCyclically, parseInt(period));
				go.setElementCycleTimeId(timeId);
			}
	}

	// return the ARRAY of the elements, which will be shown next period
	// elements contains [left-elements, right-elements]
	// the array has a name attribure, which spedify the element
	function nextShownElement(allElements) {
		if(!checkArray(allElements)) {
			alert("The parameters of allElements should be valid array");
			return;
		}
		var length = allElements.length;
		var totalElementNum = 0;
		for(var i=0;i<length;++i) {
			if(checkArray(allElements[i])) {
				totalElementNum += allElements[i].length;
			}
		}
		nextIndex = Math.floor(Math.random()*totalElementNum);
		var sum = 0;
		for(var i=0;i<length;++i) {
			if(!checkArray(allElements[i]))
				continue;
			if(nextIndex >= sum-1 && nextIndex< sum+allElements[i].length) {
				return allElements[i];
			}
			sum += allElements[i].length;
		}
	}
	
	function checkArray(array) {
		if(array == undefined || array == null || !(array instanceof Array) || array.length == 0)
			return false;
		return true;
	}
	
	// time interval format["8:30-12:00", "15:00-16:00"]
	function checkTime(times) {
		if(!checkArray(times)) {
			alert("Exception of time interval configuration");
			return false;
		}
		try {
			for(var i=0;i<times.length;++i) {
			    var now = new Date();
			    var current = parseInt(now.getHours()) * 60 + parseInt(now.getMinutes());
			    var beginEnd = times[i].split('-');
			    var begin = beginEnd[0].split(":");
			    var end = beginEnd[1].split(":");
			    var b = parseInt(begin[0]) * 60 + parseInt(begin[1]);
			    var e = parseInt(end[0]) * 60 + parseInt(end[1]);
			    if (current >= b && current <= e) {
			    	return true;
			    }
			    else 
			    	continue;
			}
			return false;
		} catch (e) {
			alert(e.message);
		}
	}
	
	

</script>
</html>



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值