/*******************************************************************************
*Title			:	AJAX Connect Status (JavaScript Remote to Server-side Java)
*Author			:	Wong Zi Wei
*contributors	:	-
*Date			:	18/07/05
********************************************************************************/
//Parent URL;
//var m_sUrl = "http://192.168.0.68:8080/N2NTicker/tickerConnect.jsp";
//var m_sUrl = "tickerConnect.xml";
//$var m_sUrl = "http://www.ebrokerconnect.com/ebcServlet/ebcForwarder?Site=TickerXml";
//$var m_sUrl = "http://bursa.n2nconnect.com/xml/TickerConnect/tickerConnect.xml";
//var m_sUrl = "http://bursa.n2nconnect.com/xml/TickerConnect/tickerConnect.xml";
//var m_sUrl = "http://nss.n2nmsc.com/TickerConnect/xml/tickerConnect.xml";
var m_iFeedbackWaitTime = new Number(10000);
var m_iReloadTime = new Number(5000);			//5s,2s,5s
var m_iErrorWaitTime = new Number(5000);		//2s,5s
var m_xXmlHttp;
var m_sXmlObj = new String("");
var m_iTimer = new Number(0);

//===================================
//---Global Set Get Method---
//===================================		
//---XML---
function setXmlHttp(vs_xXmlHttp){ m_xXmlHttp = vs_xXmlHttp; }
function getXmlHttp(){ return m_xXmlHttp; }

function setXmlObj(vs_sXmlObj){	m_sXmlObj = vs_sXmlObj; }
function getXmlObj(){ return m_sXmlObj; }		

//-------------------------------------

function init(){		
	bReq = loadXml();	
	if(bReq){	
		loadData();
	}else{
		//alert("---Critical Error:xXmlHttp not exist---");
	}
}

function loadXml(){
	var xXmlHttp;
	var bReq = new Boolean(false);
	var msXml = new Array("MSXML2.XMLHTTP.5.0",
			"MSXML2.XMLHTTP.4.0",
			"MSXML2.XMLHTTP.3.0",
			"MSXML2.XMLHTTP",
			"Microsoft.XMLHTTP");
		
	// Microsoft MSXML ActiveX (branch for IE/Window ActiveX version)
		if(window.ActiveXObject){
			for(var i=0; i<msXml.length; i++){
				try{
					xXmlHttp = new ActiveXObject(msXml[i]);	
					//alert("Exist & Used:msXml["+i+"]=["+msXml[i]+"]");				
					setXmlObj(new String(msXml[i]));
					setXmlHttp(xXmlHttp);
					return true;
				}catch(e){
					//alert("Not exsist:msXml["+i+"]=["+msXml[i]+"]");
				}				
			}
		}	
	
	// Mozilla XMLHttpRequest (branch for native XMLHttpRequest)
		if(window.XMLHttpRequest){
			try{
				xXmlHttp = new XMLHttpRequest();
				setXmlObj(new String("XMLHttpRequest()"));
				setXmlHttp(xXmlHttp);
				return true;
			}catch(e){ 
				//alert("e2=["+e+"]");
			}			
		}		
	
	//setXmlHttp(xXmlHttp);
	//alert("xXmlHttp=["+xXmlHttp+"]");	
	//alert("bReq=["+bReq+"]");		
	return bReq;
}

function loadData(){	
	//if(m_iTimer != 0){ clearTimeout(m_iTimer); }
	var xXmlHttp = new getXmlHttp();
	var sParam = "";
	
	xXmlHttp.onreadystatechange = stateChange;	//without ()
	
	// *** To avoid error 412(Precondition Failed), 'xXmlHttp.onreadystatechange = stateChange;' 
	// must located before 'xXmlHttp.open("GET", m_sUrl, true);'
	
	//xXmlHttp.open("POST", m_sUrl, true);	//Works well in Tomcat, but return 405 in IIS.
	
	if (m_sUrl.indexOf("?") > 0) {
		sParam = "&time=";
	} else {
		sParam = "?time=";
	}
	//alert("sParam=["+sParam+"]");

	try{
		xXmlHttp.open("GET", m_sUrl+ sParam +m_iTimer, true);	
		xXmlHttp.setRequestHeader("content-type", "application/x-www-form-urlencoded");	//used when using POST
		xXmlHttp.setRequestHeader("cache-control", "no-cache");
		xXmlHttp.send("sId=28");	//sId currently no used, to avoid sending null, exist error 412.
		
	} catch(e) {}

	//Pass different query string to avoid cache.

//***   "POST" works well in tomcat for xml, txt but return 405 in IIS, but works well in asp. (So, get is used)
//*** 	"POST" error, return Error 405(Method Not Allowed):, solution use "GET", 
//		then Error 412 exist, solution place 'xXmlHttp.onreadystatechange = stateChange;' at first line 	
	
	// ***(Exception::)->xXmlHttp.send(null);
	// Error 412(Precondition Failed) occurs when using this line with POST, please send something;
	
	//xXmlHttp.onreadystatechange = stateChange;	//without ()
	//alert("send!!m_sUrl=["+m_sUrl+"]");
}

function stateChange(){	
	var sVal = new String("");
	//readyState:
	//0 = uninitialized
	//1 = loading
	//2 = loaded
	//3 = interactive
	//4 = complete
	var xXmlHttp = getXmlHttp();
	//---QuoteDate---
	var xQuoteDateNode;
	var xQuoteDateTextNode;
	var xQuoteDate;
	var sQuoteDate = new String("");
	//---QuoteTime---
	var xQuoteTimeNode;
	var xQuoteTimeTextNode;
	var xQuoteTime;
	var sQuoteTime = new String("");
	//---Inidices---
	var xIndicesNode;
	var xIndicesTextNode;
	var xIndices;
	var sIndices = new String("");
	//---TotRowCnt---
	var xTotRowCnt;
	var xTotRowCntTextNode;
	var xTotRowCnt;	
	var iTotRowCnt = new Number(0);			
	//---TotColCnt---
	var xTotColCntNode;
	var xTotColCntTextNode;
	var xTotColCnt;
	var iTotColCnt = new Number(0);		
	//---IndicesTrackerUrl---
//	var xIndicesTrackerUrlNode;
//	var xIndicesTrackerUrlTextNode;
//	var xIndicesTrackerUrl;
//$	var sIndicesTrackerUrl = new String("");
	//---Color---
	var xColorNode;
	var xColorTextNode;
	var xColor;
	var sColor = new String("");
	//---AnnouncementText---
	var xAnnouncementTextNode;
	var xAnnouncementTextTextNode;
	var xAnnouncementText;
	var sAnnouncementText = new String("");
	//---Setting---
	var xSettingNode;
	var xSettingTextNode;
	var xSetting;
	var sSetting = new String("");
		
	//alert("m_iTimer=["+m_iTimer+"],xXmlHttp.readyState=["+xXmlHttp.readyState+"]");
	//Set only when timeout had initialize (!=0).
	if(m_iTimer != 0){ clearTimeout(m_iTimer); }
	try{
	  switch(xXmlHttp.readyState){
		
		case 1:
			m_iTimer = setTimeout("errorHandling()",m_iFeedbackWaitTime);
			break;
		case 4:			
			m_iTimer = setTimeout("loadData()",m_iReloadTime);
			//alert("m_iTimer=["+m_iTimer+"], xXmlHttp.status=["+xXmlHttp.status+"]");
			//alert("xXmlHttp.responseText=["+xXmlHttp.responseText+"]");
			if(xXmlHttp.status == 200){
				//@@ After 1st time succes, Change the hit time to 30 seconds.
				//m_iReloadTime = 30000;
				//Changing to connected status image
				//idTickerBlink.src = sImgUrl+ "blinkStatusG.gif";
				sVal = sImgUrl+ "blinkStatusG.gif";
			//$	document.getElementById? document.getElementById('idTickerBlink').src = sVal : idTickerBlink.src = sVal;
				
				//divLoadSts.innerText = "Connected";
				//divLoadSts.style.backgroundColor = "#000000";
				//divLoadSts.style.color = "#00FF00";
				//alert("xXmlHttp.responseText=["+xXmlHttp.responseText+"]");
				//** use next time, all tag copied **
				//divErrorMsg.innerHTML = xXmlHttp.responseText;

				try{
					//---QuoteDate---
					//alert("xml: "  + xXmlHttp.responseXML.xml);
					xQuoteDateNode = xXmlHttp.responseXML.getElementsByTagName("QuoteDate")[0]; 
					xQuoteDateTextNode = xQuoteDateNode.childNodes[0];
					xQuoteDate = xQuoteDateTextNode.nodeValue;
					sQuoteDate = new String(xQuoteDate).valueOf();
					//---QuoteTime---
					xQuoteTimeNode = xXmlHttp.responseXML.getElementsByTagName("QuoteTime")[0]; 
					xQuoteTimeTextNode = xQuoteTimeNode.childNodes[0];
					xQuoteTime = xQuoteTimeTextNode.nodeValue;
					sQuoteTime = new String(xQuoteTime).valueOf();
					//---Indices---
					xIndicesNode = xXmlHttp.responseXML.getElementsByTagName("Indices")[0]; 
					xIndicesTextNode = xIndicesNode.childNodes[0];
					xIndices = xIndicesTextNode.nodeValue;
					sIndices = new String(xIndices).valueOf();
					//---TotRowCnt---
					xTotRowCntNode = xXmlHttp.responseXML.getElementsByTagName("TotRowCnt")[0]; 
					xTotRowCntTextNode = xTotRowCntNode.childNodes[0];
					xTotRowCnt = xTotRowCntTextNode.nodeValue;	
					iTotRowCnt = xTotRowCnt;				
					//---TotColCnt---
					xTotColCntNode = xXmlHttp.responseXML.getElementsByTagName("TotColCnt")[0]; 
					xTotColCntTextNode = xTotColCntNode.childNodes[0];
					xTotColCnt = xTotColCntTextNode.nodeValue;
					iTotColCnt = xTotColCnt;					
					//---IndicesTrackerUrl---
					//xIndicesTrackerUrlNode = xXmlHttp.responseXML.getElementsByTagName("IndicesTrackerUrl")[0]; 
					//xIndicesTrackerUrlTextNode = xIndicesTrackerUrlNode.childNodes[0];
					//xIndicesTrackerUrl = xIndicesTrackerUrlTextNode.nodeValue;
					//sIndicesTrackerUrl = new String(xIndicesTrackerUrl).valueOf();
					//---Color---
					xColorNode = xXmlHttp.responseXML.getElementsByTagName("Color")[0]; 
					xColorTextNode = xColorNode.childNodes[0];
					xColor = xColorTextNode.nodeValue;
					sColor = new String(xColor).valueOf();
					//---AnnouncementText---
					xAnnouncementTextNode = xXmlHttp.responseXML.getElementsByTagName("AnnouncementText")[0]; 
					xAnnouncementTextTextNode = xAnnouncementTextNode.childNodes[0];
					xAnnouncementText = xAnnouncementTextTextNode.nodeValue;
					sAnnouncementText = new String(xAnnouncementText).valueOf();
					//---Setting---
					xSettingNode = xXmlHttp.responseXML.getElementsByTagName("Setting")[0]; 
					xSettingTextNode = xSettingNode.childNodes[0];
					xSetting = xSettingTextNode.nodeValue;
					sSetting = new String(xSetting).valueOf();
					
					//alert(sSetting + "a");
										
					setQuoteDate(sQuoteDate);
					setQuoteTime(sQuoteTime);
					setIndices(sIndices);
					setTotRowCnt(iTotRowCnt);
					setTotColCnt(iTotColCnt);
					setIndicesTrackerUrl(sIndicesTrackerUrl);
					setColor(sColor);
					setAnnouncementText(sAnnouncementText);
					setSetting(sSetting);
					
					//---After Complete, set then run the data formatting engine
					refreshThread();
					//alert("sIndices=["+sIndices+"],getIndices()=["+getIndices()+"]");
					//alert("iTotRowCnt=["+iTotRowCnt+"],getTotRowCnt()=["+getTotRowCnt()+"]");
					//alert("iTotColCnt=["+iTotColCnt+"],getTotColCnt()=["+getTotColCnt()+"]");
					//alert("sIndicesTrackerUrl=["+sIndicesTrackerUrl+"]");
					m_iReloadTime = 30000;
				}catch(e){
					//alert("stateChange::xXmlHttp:e=["+e+"]");
					//alert("error description [" + e.description() + "]");
				}
						
			}else{
				//alert("stateChange::xXmlHttp.status=["+xXmlHttp.status+"]");
				errorHandling();
			}
			break;
		default:	
	  }	  
	}catch(e){
		//alert("stateChange::e=["+e+"]");
		//alert("123");
		//alert("error description [" + e.description + "]");
	}
	loadData;	
}

function errorHandling(){
	//alert("errorHandling");
	var xXmlHttp = getXmlHttp();
	//divLoadSts.innerText = "Disconnected";
	//divLoadSts.style.backgroundColor = "#000000";
	//divLoadSts.style.color = "#FF0000";
	//divErrorMsg.innerText = xXmlHttp.statusText;
	//divErrorMsg.style.backgroundColor = "#000000";
	//divErrorMsg.style.color = "#FFFF00";
	//alert("xXmlHttp.statusText=["+xXmlHttp.statusText+"]");
	
	//Changing to error status image
	//idTickerBlink.src = sImgUrl+ "blinkStatusR.gif";
	sVal = sImgUrl+ "blinkStatusR.gif";
//$	document.getElementById? document.getElementById('idTickerBlink').src = sVal : idTickerBlink.src = sVal;
						
	//Never infinite loop, put a error Handling reload timer
	if(m_iTimer != undefined){
		clearTimeout(m_iTimer);
	}
	m_iTimer = setTimeout("loadData()",m_iErrorWaitTime);
}

init();	