var returnGuid;
var initial;
var canUpdate;
var timer1;
var interval;
var interval2;
var fastBarInt;
var redArrow;
var greenArrow;
var c; // counter
var limit;
var currentElements;
var hibernateMode;
var STARTTIMEGMT;
var ENDTIMEGMT;
var firstTime;
var generalIndex;
var generalIndexChange;
var checkRefreshTimer;


function renderSector(xml, guid, returnCode) {

//    try {
		
		if (xml != '') {
			if ( hibernateMode ) {
				window.location.reload();
			}
/*			var fastBar = document.getElementById('fastBar');
			var fastBarRows = fastBar.rows;
			var fastBarCols=fastBarRows[0].cells;
			currentElements = 5 * c;
			fastBarCols[0].innerHTML = '&nbsp;';
			for (var i=1; i < currentElements; i++) {
				fastBarCols[i].innerHTML = '';
			}
			c = 0;*/
			var dataTable = document.getElementById('dataTable');
			var parts = xml.split("]");
			var timers = parts[1].split("#");
			minorFlip = timers[0];
			majorFlip = timers[1];
			var rows = parts[0].split("|");
			var x = dataTable.rows;
			var tableRowsNo = x.length;
			var dataRowsNo = rows.length;
			var colNo = rows[0].split("[")[1].split("#").length;
			var diff = dataRowsNo - tableRowsNo + 1; // the 1 is to skip the header
			if (diff < 0) {
				for (i=1; i < Math.abs(diff)+1; i++) {
					dataTable.deleteRow(tableRowsNo-i);
				}
			} else if ( diff > 0 ) {
				var row;
				for (i=0; i < diff; i++) {
					row = dataTable.insertRow(tableRowsNo+i);
					for (j=0; j < colNo-1; j++) {
						row.insertCell(j);
					}
				}
			}
			 var indicesTable = document.getElementById('indices');
			 var head = indicesTable.rows[0].cells;
			 var sectorIndex = sector%4+1;
			 for (var i=1; i < 5; i++) {
			    if (sectorIndex == i) continue;
			    head[i].id='';
			 }
			 head[sectorIndex].id = 'on';
			for (var i=0; i < dataRowsNo; i++) {
				var portions = rows[i].split("[");
				var metaData = portions[0].split("#");
				var columns = portions[1].split("#");
	    			x[i+1].id = i%2==0?'even':'odd';
				var y=x[i+1].cells;
				y[0].innerHTML = "<span onclick=companyEngMenu('" + columns[2] + "." + metaData[1] 
										+ "') onmouseover=this.style.fontWeight=\'bold\';this.parentNode.style.borderStyle=\'solid\';this.parentNode.style.borderWidth=\'1px\';this.parentNode.style.borderColor=\'black\' " 
			      + "onmouseout=delayhidemenu();this.style.fontWeight=\'normal\';this.style.borderColor=\'black\';this.parentNode.style.borderStyle=\'none\';>" 
			      + columns[0] + "</span>";
				y[1].innerHTML = columns[2];
	    			y[2].id = 'tick';
	    			y[3].id = 'tick';
				y[2].innerHTML = columns[3] == 0 ? '<img src="/scamw/images/down.gif" height="12" width="10">'
						: columns[3] == 1 ? '<img src="/scamw/images/up.gif" height="12" width="10">' 
						: "&nbsp;" +'<img src="/scamw/images/unchanged-en.gif" height="10" width="12">';
				for (var j=3; j < columns.length-1; j++) {
					if (j == 8 || j == 7) {
						if (x[i+1].id == 'even') {
							y[j].style.background="FFF4E1";
						}else {
							y[j].style.background="FFD7C0";
						}
						//y[j].id = 'BidPrice';
					}else if (j == 9 || j == 10) {
						if (x[i+1].id == 'even') {
							y[j].style.background="E5E6FB";
						}else {
							y[j].style.background="C0CEFF";
						}
						//y[j].id = 'AskPrice';
					}
					y[j].innerHTML = columns[j+1];
				}
				processMeta(y, metaData);
			}
			canUpdate = true;
			fastBarInt = majorFlip * 0.33;
			
			interval=setInterval("updateSectorData()", minorFlip);
			interval2=setInterval("getUpperPanelData()", fastBarInt);
		} else {
			hibernateMode = true;
         		majorFlip = 60 * 1000;
		}
		clearTimeout(timer1);
		timer1=setTimeout("getSectorData()", majorFlip);
//      }

}  //end function renderSector

function renderUpdate(xml, guid, returnCode) {


    //try {
		if (xml != '') {
			if ( canUpdate ) {
				var dataTable = document.getElementById('dataTable');
				var rows = xml.split("|");
				var x = dataTable.rows;
				for (var i=0; i < rows.length; i++) {
					var portions = rows[i].split("[");
					var metaData = portions[0].split("#");
					var columns = portions[1].split("#");
					var y=x[i+1].cells;
					y[2].innerHTML = columns[3] == 0 ? '<img src="/scamw/images/down.gif" height="12" width="10">'
							: columns[3] == 1 ? '<img src="/scamw/images/up.gif" height="12" width="10">' 
							: "&nbsp;" + '<img src="/scamw/images/unchanged-en.gif" height="10" width="12">';
					y[2].id = 'tick';                  
					y[3].id = 'tick';
					for (var j=3; j < columns.length-1; j++) {
						y[j].innerHTML = columns[j+1];
					}
					processMeta(y, metaData);
				}
			}
	        }
	//}

}  //end function renderUpdate

function renderFastBar(xml, guid, returnCode) {
//    try {
		
		var sharedData = xml.split("]");
		
		var fastBarData = sharedData[0];
		renderIndices(sharedData[1]);
      		updateStatus(sharedData[2]);
      		renderMarketSummary(sharedData[3]);
      		
      		var temp = parseInt(sharedData[4]);
		curDate = new Date(temp);
		//alert(curDate);
		outputTime="dayNames[timeSource().getDay()]+' '+leadingZero(timeSource().getDate())+' '+monthNames[timeSource().getMonth()]+' '+fixYear4(timeSource().getYear())+' '+' '+'-'+' '+' '+leadingZero(twelveHour(timeSource().getUTCHours()+4))+':'+leadingZero(timeSource().getMinutes())+':'+leadingZero(timeSource().getSeconds())+' '+amPMsymbol(timeSource().getHours())";      		
		
		
		if (fastBarData == '') return;
		var fastBar = document.getElementById('fastBar');
		var x = fastBar.rows;
		var y=x[0].cells;
		var elements = fastBarData.split("|");
		var elementsNo = elements.length;
		currentElements = 5 * c;
		var startPoint;
/*		if ( c + elementsNo > limit ) { // make sure that elementsNo is itself not > limit
			for (var i=0; i < currentElements; i++) {
				y[i].innerHTML = '';
			}
			c = 0;
		}*/
		if ( c < limit ) {
			if ( c+elementsNo <= limit ) {
				startPoint = c;
				c += elementsNo;
			} else {
				shiftElements((c+elementsNo-limit)*5,currentElements,y);
				startPoint = limit-elementsNo;
				c = limit;
			}
		} else {
			shiftElements(elementsNo*5,currentElements,y);
			startPoint = limit-elementsNo;
		}
		var sum;
		for (var i=0; i < elementsNo; i++) {
			 sum = i+startPoint;					
			 var parts = elements[i].split("#");
			 
			 
			if (parts[0] == 0) {
				y[5*sum].innerHTML = '<img src="/scamw/images/down.gif" height="12" width="10">';
				y[5*sum].vAlign = 'bottom' ;
			}else if (parts[0] == 1) {
				y[5*sum].innerHTML = '<img src="/scamw/images/up.gif" height="12" width="10">';
				y[5*sum].vAlign = 'top' ;
			}else if (parts[0] == 2) {
				y[5*sum].innerHTML = '<img src="/scamw/images/unchanged-en.gif" height="10" width="12">';
				y[5*sum].vAlign = 'middle' ;
			} 
			 //y[5*sum].vAlign = parts[0] == 0 ? 'bottom' : 'top';											 
			 var myColor = parts[5];
			 for (var j=1; j < 5; j++) {						 
				 if (j == 3) {
					y[j+5*sum].innerHTML = parts[j]+"<br>"+parts[j+1];
					y[j+5*sum].style.color=myColor;
				 }else {
					y[j+5*sum].innerHTML = parts[j];
					y[j+5*sum].style.color=myColor;
				 }
			 }
			 y[3+5*sum].style.fontSize='xx-small'; 
			 //y[3+5*sum].vAlign='top';
			 y[4+5*sum].innerHTML = '&nbsp';
		}
            
  //      }

}  //end function renderFastBar

function removeCommas(aNum) {

//remove any commas

aNum=aNum.replace(/,/g,"");

//remove any spaces

aNum=aNum.replace(/\s/g,"");

return aNum;

}


function renderIndices(data) {
	if (data == '') return;
	var indicesTable = document.getElementById('indices');
	//data = "2964.86#2708.15#2256.37#299.93#2572.42|2.15#0.30#2.55#1.92#2.22|157486195813.54#18392256521.86#169012693617.64#31091554570.97#375982700524.01";
	var rows = data.split("|");
	var x = indicesTable.rows;
	//for (var i=0; i < rows.length; i++) {
	for (var i=0; i < rows.length; i++) {
		 var columns = rows[i].split("#");
		 var y=x[i+1].cells;
		 for (var j=0; j < columns.length; j++) {
			 if (i == 2) {
				//y[j+1].innerHTML = "-";
				y[j+1].innerHTML = (removeCommas(columns[j])/1000000000).numberFormat("#,##.##");
				
				//new Number((removeCommas(columns[j])/1000000)).numberFormat(#,0)
			 }else {
				y[j+1].innerHTML = columns[j];
				if ((i == 0) && (j == 4)) {
					generalIndex = columns[j];
				}
				
				if ((i == 1) && (j == 4)) {
					generalIndexChange = columns[j];
				}
				
				


			 }
		 }
	}
}  //end function renderIndices

function renderMarketSummary(data) {
	
	if (data == '') return;
	var summaryTable = document.getElementById('mktSummary');
	
	//data = "96447054.98#65291453#1,374#32#11#12#9#2,529.82#0.10|196930999.56#145037971#3,059#29#7#20#2#1352.24#-1.61|293378054.54#210329424#4,433#61#18#32#11#2416.47#-0.37";
	var rows = data.split("|");
	var x = summaryTable.rows;
	//for (var i=0; i < rows.length; i++) {
	for (var i=0; i < rows.length; i++) {
		 var columns = rows[i].split("#");
		 var y=x[i+1].cells;
		 for (var j=0; j < columns.length; j++) {
			 //y[j+1].innerHTML = columns[j];
			 
			 if (j == 0 || j == 1) {
				y[j+1].innerHTML = (removeCommas(columns[j])/1000000).numberFormat("#,##.##");
				
					
					/*
					
					if ((i == 0) && (j == 7)) {
						y[j+1].innerHTML = 2572.42;
					}
					if ((i == 0) && (j == 8)) {
						y[j+1].innerHTML = 2.22;
					}
					*/
				
			 }else {
			 	y[j+1].innerHTML = columns[j];
			 	
				/*
				if ((i == 0) && (j == 0)) {
					y[j+1].innerHTML = 132.33 ;
				}

				if ((i == 0) && (j == 1)) {
					y[j+1].innerHTML = 59.66;
				}
				if ((i == 0) && (j == 2)) {
					y[j+1].innerHTML = 1491 ;
				}

				if ((i == 0) && (j == 3)) {
					y[j+1].innerHTML = 31;
				}
				if ((i == 0) && (j == 4)) {
					y[j+1].innerHTML = 23 ;
				}

				if ((i == 0) && (j == 5)) {
					y[j+1].innerHTML = 2;
				}
				if ((i == 0) && (j == 6)) {
					y[j+1].innerHTML = 6 ;
				}

				if ((i == 0) && (j == 7)) {
					y[j+1].innerHTML = 2857.40;
				}
				if ((i == 0) && (j == 8)) {
					y[j+1].innerHTML = 0.91;
				}*/
				
				/*
				if ((i == 2) && (j == 7)) {
					y[j+1].innerHTML = 2572.42;
				}
				if ((i == 2) && (j == 8)) {
					y[j+1].innerHTML = 2.22;
				}
				*/
				
				/*
				if ((i == 1) && (j == 0)) {
					y[j+1].innerHTML = 120.11 ;
				}
				
				if ((i == 1) && (j == 1)) {
					y[j+1].innerHTML = 81.11;
				}
				if ((i == 1) && (j == 2)) {
					y[j+1].innerHTML = 1490 ;
				}

				if ((i == 1) && (j == 3)) {
					y[j+1].innerHTML = 25;
				}
				if ((i == 1) && (j == 4)) {
					y[j+1].innerHTML = 7 ;
				}

				if ((i == 1) && (j == 5)) {
					y[j+1].innerHTML = 17;
				}
				if ((i == 1) && (j == 6)) {
					y[j+1].innerHTML = 1 ;
				}
				*/
			 }
			 
		 }
	}
}  

function updateStatus(mStatus) {
var rightNow = formatDate(curDate,"HH:mm:ss")+ " 1/1/1970 GMT"+curDate.getTimezoneOffset()/60;
			var nowGMT = Date.parse(rightNow)/1000;
			   
   			if (nowGMT > STARTTIMEGMT && nowGMT < ENDTIMEGMT) {
				//alert("trading time");
				
			}else {
				//alert("outside trading time");
			}

		var statusCell = document.getElementById('mStatus');
		statusCell.innerHTML = mStatus == 'P' ? 'PRE-OPEN' : mStatus == 'O' ? 'OPEN' : 'CLOSED';
		//document.getElementById('mStatusIcon').innerHTML = (mStatus == 'P' || mStatus == 'O') ? &nbsp;&nbsp;'<img src="/scamw/images/openicon.gif" width="8" height="8" >' : &nbsp;&nbsp;'<img src="/scamw/images/closeicon.gif" width="8" height="8" >';
		document.getElementById('mStatusIcon').innerHTML = (mStatus == 'P' || mStatus == 'O') ?  '&nbsp; <img src="/scamw/images/openicon.gif" width="8" height="8" >&nbsp;' : '&nbsp; <img src="/scamw/images/closeicon.gif" width="8" height="8" >&nbsp;';
		
		//statusCell.innerHTML = 'OPEN';//Un-comment this in case the market is showing pre-open while it should be open
		
}  //end function updateStatus



function runxmlIOProxyLoadDataTests() {
  
      fastBarInt = majorFlip * 0.33;
      c = 0;
      limit = 6;
      canUpdate = true;
      hibernateMode = false;
      firstTime = true;
      
      /*
      var startTime = "09:00:00";
      var endTime = "13:00:00";
     
      var ConstantsServer = new XmlRpcClient("/scamw/staticDataSource");
      var sOpenClose = ConstantsServer.execute("HeadersServlet.getStockExTradingTime");
	var aOpenClose = sOpenClose.split("#");
	startTime = aOpenClose[0];
	endTime = aOpenClose[1];

      STARTTIMEGMT = Date.parse(startTime+" 1/1/1970 GMT-4")/1000;
      ENDTIMEGMT = Date.parse(endTime+" 1/1/1970 GMT-4")/1000;
      
         var rightNow = formatDate(curDate,"HH:mm:ss")+ " 1/1/1970 GMT"+curDate.getTimezoneOffset()/60;
         	var nowGMT = Date.parse(rightNow)/1000;
       	//alert(nowGMT+"--"+STARTTIMEGMT+"--"+ENDTIMEGMT);
         	if (nowGMT > STARTTIMEGMT && nowGMT < ENDTIMEGMT) {
         		//alert("trading time");
         		//returnGuid = xmlIOProxyLoadData("/scamw/dataSource", "renderSector", "getSectorData", ++sector, false);
	}
	*/
      
      checkRefreshTimer=setTimeout("checkRefresh()", 20000);
      setTimeout("getUpperPanelData()",500);
      //setTimeout("getUpperPanelData()",4000);
      getSectorData();
  
} 

function checkRefresh() {
	//alert("checking refresh" +"--CanUpdate:"+canUpdate);
	clearTimeout(checkRefreshTimer);
	checkRefreshTimer=setTimeout("checkRefresh()", 60000);
	if (!canUpdate) {
		//alert("Not Working");
		getSectorData();
	}
}


function getSectorData() {
   if (status != null && status) {
   	
      clearTimeout(timer1);
      timer1=setTimeout("getSectorData()", majorFlip);
      return;
   }  
   
   canUpdate = false;
   clearInterval(interval);
   clearInterval(interval2);
   clearTimeout(timer1);
   
   //if (((sector+1) > 3) || ((sector+1) < 0)) {
   //      	sector = -1;
   //}
   //alert(curDate);
   //var rightNow = formatDate(curDate,"HH:mm:ss")+ " 1/1/1970 GMT"+curDate.getTimezoneOffset()/60;
   //var nowGMT = Date.parse(rightNow)/1000;
   
   //if (nowGMT > STARTTIMEGMT && nowGMT < ENDTIMEGMT) {
   	
   	returnGuid = xmlIOProxyLoadData("/scamw/dataSource", "renderSector", "getSectorData", ++sector, false,false);
   //}
} 


function updateSectorData() {
   if (canUpdate) {
      /*
	       var tempSector;
		if (sector < 0) {
			tempSector = 0;
		}else {
			tempSector = sector;
		}
	*/
	var rightNow = formatDate(curDate,"HH:mm:ss")+ " 1/1/1970 GMT"+curDate.getTimezoneOffset()/60;
	var nowGMT = Date.parse(rightNow)/1000;
	
   	
   	try {
   		returnGuid = xmlIOProxyLoadData("/scamw/dataSource", "renderUpdate", "getSectorData", sector, true,false);
   	}catch (e) {
   	 //catch and just suppress error

   	}
   	
   		
   	
   	/*
   	if (nowGMT > STARTTIMEGMT && nowGMT < ENDTIMEGMT) {
	      //alert("trading time");
	      returnGuid = xmlIOProxyLoadData("/scamw/dataSource", "renderUpdate", "getSectorData", sector, true);
	
   	}
   	*/
   }
} 

function getUpperPanelData() {
	//var rightNow = formatDate(curDate,"HH:mm:ss")+ " 1/1/1970 GMT"+curDate.getTimezoneOffset()/60;
	//var nowGMT = Date.parse(rightNow)/1000;

	try {

		returnGuid = fastBarProxyLoad("/scamw/dataSource", "renderFastBar", "getUpperPanelData", sector );
	}catch (e) {
		 //catch and just suppress error
	}
	
	/*
	if (nowGMT > STARTTIMEGMT && nowGMT < ENDTIMEGMT) {
		//alert("trading time");
		returnGuid = fastBarProxyLoad("/scamw/dataSource", "renderFastBar", "getUpperPanelData", sector );
	}else {
		if (firstTime) {
			returnGuid = fastBarProxyLoad("/scamw/dataSource", "renderFastBar", "getUpperPanelData", sector );
			firstTime = false;
		}
		//alert("outside trading time");
	}
	*/
	
} 

function processMeta(row, metaData) {
	var toColor = locator.split("#");
	for (var j=0; j < toColor.length; j++) {
		 current = toColor[j];
		 row[current].style.color = metaData[0];
	}
	// This is to render the background for any changing security
	/*if (metaData[2]=='' || metaData[3]=='')
		return
	loxn = metaData[2];
	row[loxn].bgColor = metaData[3];*/
}

function shiftElements(shiftValue,elements,y) {
	for (var i=0; i < elements-shiftValue; i++) {
		y[i].innerHTML = y[shiftValue+i].innerHTML;
      y[i].style.cssText = y[shiftValue+i].style.cssText;
      y[i].vAlign = y[shiftValue+i].vAlign;      
	}
   y[0].style.paddingLeft = "5px";	
}

