﻿	function showIndex(index, change, volume, value, oIndex, oChange, oVolume, oValue, oImage) {
		if (volume > 0) {
			var percent = 0;
			if (index!=change)
				percent = change*100/(index-change);
			var colorindex;
			var imageIndex = document.getElementById(oImage);
			if (change == 0) {
				imageIndex.innerHTML = "";
				colorindex = refColorvn;
			} else if (change < 0) {
				imageIndex.innerHTML = imgDown;
				colorindex = downColorvn;
			} else if (change > 0) {
				imageIndex.innerHTML = imgUp;
				colorindex = upColorvn;
			}
			var nf = new NumberFormat(index);
			nf.setPlaces(2);
			document.getElementById(oIndex).innerHTML = "<font color='" + colorindex + "'>" + nf.toFormatted() + "</font>";
			document.getElementById(oChange).innerHTML = "<font color='" + colorindex + "'>" + change.toFixed(2) + " (" + percent.toFixed(2) + "%)</font>";
			var nf = new NumberFormat(volume);
			nf.setPlaces(0);
			document.getElementById(oVolume).innerHTML = nf.toFormatted();

			nf = new NumberFormat(value*1000000);
			nf.setPlaces(0);
			document.getElementById(oValue).innerHTML = nf.toFormatted();
		} else {
			document.getElementById(oImage).innerHTML = "";
			document.getElementById(oIndex).innerHTML = "";
			document.getElementById(oChange).innerHTML = "";
			document.getElementById(oVolume).innerHTML = "";
			document.getElementById(oValue).innerHTML = "";
		}
	}

	function changePage() {
		var groupString = "";
		for (var st = 0; st < page1.length; st++)
			groupString += "item" + page1[st] + " ";
		actGroup = page1;
		var newTable = new OverwriteTable(groupString, schema, "MERGE");
		newTable.setSnapshotRequired(true);
		newTable.setRequestedMaxFrequency(0.5);
		newTable.setClearOnDisconnected(false);
		newTable.setClearOnRemove(false);
		newTable.onItemUpdate = updateItem;
		newTable.onChangingValues = formatValues;
		newTable.setPushedHtmlEnabled(true);
		lsPage.addTable(newTable, "1");
	}

	/////////////////////////////////additional features

	function openPopup(row) {
		var item = actGroup[row-1];
		var fadeStr = "";
		if (doFade) {
			fadeStr = "&fade=ON";
		}
		wdt=window.open("popup2.html?item=" + item + fadeStr, "SLDpopup" + item, "width=535,height=238,history=0,resizable,status=1,menubar=1");
		wdt.focus();
		return false;
	}

	//////////////////////////Event handlers

	var matchedColor;
	var marketstat;
	var marketindex, changeindex, totalvalue, totalvolume;

	function updateItem(item, updateInfo) {
		if (updateInfo == null) {
			return;
		}
		if (item == 1) {
			var time = document.getElementById("time");
			time.innerHTML = updateInfo.getNewValue(1).substring(11,19);

			var today = document.getElementById("today");
			today.innerHTML = updateInfo.getNewValue(1).substring(0,10);

			marketstat = updateInfo.getNewValue(2);

			var oI1 = document.getElementById("phiengd1");
			var oI2 = document.getElementById("phiengd2");
			var m = document.getElementById("marketstatus");
			if (marketstat == "P") {
				oI1.innerHTML = eval('aString.DK1');
				oI2.innerHTML = eval('aString.DK1');
				m.innerHTML = eval('aStat.P');
			} else if (marketstat == "O") {
				oI1.innerHTML = eval('aString.LT');
				oI2.innerHTML = eval('aString.LT');
				m.innerHTML = eval('aStat.O');
			} else if (marketstat == "A") {
				oI1.innerHTML = eval('aString.DK2');
				oI2.innerHTML = eval('aString.DK2');
				m.innerHTML = eval('aStat.A');
			} else if (marketstat == "C") {
				oI1.innerHTML = eval('aString.DC');
				oI2.innerHTML = eval('aString.DC');
				m.innerHTML = eval('aStat.C');
			} else {
				oI1.innerHTML = eval('aString.DC');
				oI2.innerHTML = eval('aString.DC');
				m.innerHTML = eval('aStat.K');
			}
			// Phien 1
			marketindex = updateInfo.getNewValue(13);
			changeindex = new Number(updateInfo.getNewValue(16));
			totalvalue = updateInfo.getNewValue(19);
			totalvolume = new Number(updateInfo.getNewValue(22));
			showIndex(marketindex, changeindex, totalvolume, totalvalue, "vnindex1", "vnchangeindex1", "totalshares1", "totalvalues1", "imgVNIndex1");
			// Phien 2
			marketindex = updateInfo.getNewValue(14);
			changeindex = new Number(updateInfo.getNewValue(17));
			totalvalue = updateInfo.getNewValue(20);
			totalvolume = new Number(updateInfo.getNewValue(23));
			showIndex(marketindex, changeindex, totalvolume, totalvalue, "vnindex2", "vnchangeindex2", "totalshares2", "totalvalues2", "imgVNIndex2");
			// Phien 3
			marketindex = updateInfo.getNewValue(15);
			changeindex = new Number(updateInfo.getNewValue(18));
			totalvalue = updateInfo.getNewValue(21);
			totalvolume = new Number(updateInfo.getNewValue(24));
			showIndex(marketindex, changeindex, totalvolume, totalvalue, "vnindex3", "vnchangeindex3", "totalshares3", "totalvalues3", "imgVNIndex3");
			// Tong cong
			marketindex = updateInfo.getNewValue(11);
			changeindex = new Number(updateInfo.getNewValue(12));
			totalvalue = updateInfo.getNewValue(26);
			totalvolume = new Number(updateInfo.getNewValue(28));
			showIndex(marketindex, changeindex, totalvolume, totalvalue, "vnindex", "vnchangeindex", "totalshares", "totalvalues", "imgVNIndex");

			//Phat Edit: add advances,declines,noChange
			var advances = updateInfo.getNewValue(3);
			var declines = updateInfo.getNewValue(4);
			var noChange = updateInfo.getNewValue(5);

			var advancesCeiling = updateInfo.getNewValue(6);
			var declinesFloor = updateInfo.getNewValue(7);
			var noChangeColse = updateInfo.getNewValue(8);
			document.getElementById("Advances").innerHTML = advances;
			document.getElementById("Declines").innerHTML = declines;
			document.getElementById("NoChange").innerHTML = noChange;

			if (advancesCeiling != null && advancesCeiling != "") {
				document.getElementById("AdvancesCeiling").innerHTML = "[" + advancesCeiling + "]";
			}
			if (declinesFloor != null && declinesFloor != "") {
				document.getElementById("DeclinesFloor").innerHTML = "[" + declinesFloor + "]";
			}
			if (noChangeColse != null && noChangeColse != "") {
				document.getElementById("NoChangeClose").innerHTML = "[" + noChangeColse + "]";
			}

			return;
		}
		//10 = change
		if (updateInfo.isValueChanged(10)) {
			var newValue9 = parseFloat(updateInfo.getNewValue(9));
			var arrowpicture;
			if (newValue9 == updateInfo.getNewValue(3)) {
				arrowpicture = imgCeiling;
			} else if (newValue9 == updateInfo.getNewValue(4)) {
				arrowpicture = imgFloor;
			} else if (newValue9 == updateInfo.getNewValue(5)) {
				arrowpicture = imgRef;
			} else if (newValue9 > updateInfo.getNewValue(5)) {
				arrowpicture = imgUp;
			} else if ((newValue9 < updateInfo.getNewValue(5)) && (newValue9 > 0)) {
				arrowpicture = imgDown;
			} else {
				arrowpicture = imgNone;
			}
			updateInfo.addField(35,arrowpicture);
			updateInfo.addField(36,arrowpicture);
		}

		if (updateInfo.isValueChanged(31))
		{
			aTickers.hashtable[updateInfo.getNewValue(2)].room = parseFloat(updateInfo.getOldValue(31));
		}
		aTickers.hashtable[updateInfo.getNewValue(2)].status = updateInfo.getNewValue(33);

		//9 = matchedprice
		var oldLast = updateInfo.getOldValue(9);
		var newColor;
		if (oldLast == null) { //first update for this item
			//37 = color
			//38 = ON-OFF
			if (doFade) {
				updateInfo.addField(38,"OFF",true);
			}
		} else if (updateInfo.isValueChanged(9)) {
			aTickers.hashtable[updateInfo.getNewValue(2)].price = parseFloat(oldLast);
			if (aTickers.hashtable[updateInfo.getNewValue(2)].price > updateInfo.getNewValue(9)) {
				updateInfo.addField(37,greenColor,true);
			} else {
				updateInfo.addField(37,redColor,true);
			}
			if (doFade) {
				updateInfo.addField(38,"ON",true);
			}
		}
		for (var j=3; j<=31; j++) {
			updateInfo.addField(j+colorBegin,updateInfo.isValueChanged(j),true);
		}
	}

	function formatValues(item, itemUpdate) {
	 	if (itemUpdate == null) {
	 		return;
	 	}
	 	if (doFade) {
		 	if (itemUpdate.getServerValue(38) == "ON") {
				itemUpdate.setHotToColdTime(500);
			}
		}
	 	itemUpdate.setHotTime(2000);
	 	var backH = itemUpdate.getServerValue(37);

	 	// Set CK thuc hien quyen
	 	var l = itemUpdate.getServerValue(33);
	 	if ((l == 'A')||(l == 'R')||(l == 'D')||(l == '*')) {
	 		itemUpdate.setFormattedValue(2,itemUpdate.getServerValue(2)+" *");
	 	}
	 	/////////////////////////////

		//format the "number" fields
		matchedColor=null;
		for (var i = 3; i <= 31; i++) {
			if (!itemUpdate.getServerValue(i+colorBegin)) continue;
			var newValue = itemUpdate.getServerValue(i);
			if (newValue == null) continue;
			if (newValue == 0){
				itemUpdate.setFormattedValue(i,"");
				continue;
			}
			itemUpdate.setAttribute(i,backH,null,"backgroundColor");
			if (isNaN(newValue)) {
				// ATO, ATC
				itemUpdate.setAttribute(i,atColor,atColor,"color");
				itemUpdate.setAttribute(i+6,atColor,atColor,"color");
				continue;
			}
			if (i >= 19 && i <= 31) {
				// Mau sac se do gia quyet dinh
				continue; //"vol" fields
			}
			var formattedVal = parseFloat(newValue);

			// format prices
			if (i == 9) {
				if (formattedVal == itemUpdate.getServerValue(3)) {
					matchedColor=ceColor;
				} else if (formattedVal == itemUpdate.getServerValue(4)) {
					matchedColor=flColor;
				} else if (formattedVal == itemUpdate.getServerValue(5)) {
					matchedColor=refColor;
				} else if (formattedVal > itemUpdate.getServerValue(5)) {
					matchedColor=upColor;
				} else if (formattedVal < itemUpdate.getServerValue(5)) {
					matchedColor=downColor;
				}
				itemUpdate.setAttribute(9,matchedColor,matchedColor,"color");
				itemUpdate.setAttribute(10,matchedColor,matchedColor,"color");
			}

			if (i == 10) {
				if (formattedVal > 0) {
					formattedVal = "+" + formattedVal;
				}
				if (parseFloat(itemUpdate.getServerValue(9)) == itemUpdate.getServerValue(3)) {
					formattedVal = "C" + formattedVal;
				} else if (parseFloat(itemUpdate.getServerValue(9)) == itemUpdate.getServerValue(4)) {
					formattedVal = "F" + formattedVal;
				}
			}

			var mycolor;
			if ((i >= 6) && (i <= 12) && (i != 10) && (i != 9)){
				if (formattedVal == itemUpdate.getServerValue(3)) {
					mycolor=ceColor;
				} else if (formattedVal == itemUpdate.getServerValue(4)) {
					mycolor=flColor;
				} else if (formattedVal == itemUpdate.getServerValue(5)) {
					mycolor=refColor;
				} else if (formattedVal > itemUpdate.getServerValue(5)) {
					mycolor=upColor;
				} else if (formattedVal < itemUpdate.getServerValue(5)) {
					mycolor=downColor;
				} else {
					mycolor=null;
				}
				itemUpdate.setAttribute(i,mycolor,mycolor,"color");
			}

			if ((i >= 13) && (i <= 18)){
				if (formattedVal == itemUpdate.getServerValue(3)) {
					mycolor=ceColor2;
				} else if (formattedVal == itemUpdate.getServerValue(4)) {
					mycolor=flColor2;
				} else if (formattedVal == itemUpdate.getServerValue(5)) {
					mycolor=refColor2;
				} else if (formattedVal > itemUpdate.getServerValue(5)) {
					mycolor=upColor2;
				} else if (formattedVal < itemUpdate.getServerValue(5)) {
					mycolor=downColor2;
				} else {
					mycolor=null;
				}
				itemUpdate.setAttribute(i,mycolor,mycolor,"color");
				itemUpdate.setAttribute(i+6,mycolor,mycolor,"color");
			}
			itemUpdate.setFormattedValue(i,formattedVal);
	 	}
	}
///////////////////block escape key
	document.onkeydown = checkEscape;
	document.onkeypress = checkEscape;
	function checkEscape(e) {
		if(!e) e = event;
		if(e.keyCode == 27) return false;
	}

///////////////Global var declaration
//1.time 2.ticker
//3.ceiling 4.floor 5.ref 6.max 7.min 8.ave 9.matched 10.change 11.open 12.close
//13.bid1 14.bid2 15.bid3 16.ask1 17.ask2 18.ask3
//19.bid1vol 20.bid2vol 21.bid3vol 22.ask1vol 23.ask2vol 24.ask3vol 25.matchedvol 26.openvol 27.vol2 28.closevol 29.totalvol
//30.priorroom
//31.room 32.ticker 33.status 34.item_status 35.arrowpicture 36.arrowpicture2 37.color 38.ON-OFF 39.{more};
	var schema = "time ticker ceiling floor ref max min ave matched change open close bid1 bid2 bid3 ask1 ask2 ask3 bid1vol bid2vol bid3vol ask1vol ask2vol ask3vol matchedvol openvol vol2 closevol totalvol priorroom room ticker status item_status";
	var colorBegin=39;
	var actGroup = null;
	var imgString = '<img src="images/popup.gif" alt="Graphic Chart" width="16" height="16" align="left" border="0" hspace="1">';
	var imgUp = '<img src="images/quotes_up.gif" alt="up" width="16" height="8" border="0">';
	var imgDown = '<img src="images/quotes_down.gif" alt="down" width="16" height="8" border="0">';
	var imgFloor = '<img src="images/quotes_fl2.gif" alt="floor" width="16" height="8" border="0">';
	var imgCeiling = '<img src="images/quotes_ce2.gif" alt="ceiling" width="16" height="8" border="0">';
	var imgRef = '<img src="images/quotes_ref.gif" alt="base" width="16" height="8" border="0">';
	var imgNone = '<img src="images/spacer_4px.gif" width="16" height="8" border="0">';
	var doFade = true;

	if (location.search.indexOf("fade=ON") > -1) {
		doFade = true;
	}

/////////////////////////////////PushPage Configuration
	var lsPage = new PushPage();
	lsPage.context.setDebugAlertsOnClientError(false);
	lsPage.context.setDomain(lsdomain);
	lsPage.onEngineCreation = startEngine;
	lsPage.bind();
	lsPage.createEngine("SLEngine", "ls/");
	//starting stocks
	changePage();

function startEngine(eng) {
	eng.onClientAlert = null;
	eng.context.setDebugAlertsOnClientError(false);
	//eng.policy.setMaxBandwidth(30);
	eng.policy.setIdleTimeout(30000);
	eng.policy.setPollingInterval(10000);
	eng.connection.setLSHost(lshost);
	eng.connection.setLSPort(lsport);
	eng.connection.setAdapterName("HOSE");
	eng.changeStatus("STREAMING");
}
function myalert(str){
	document.getElementById("canhbao").innerHTML = document.getElementById("canhbao").innerHTML + "<p>" + str ;
}
