/*******************************************************************************
*Title			:	AJAX Connect Status (JavaScript Remote to Server-side Java)
*					General Ticker Scroller Engine with set, get, interval, ...
*Author			:	Wong Zi Wei
*contributors	:	-
*Date			:	Version 1.0.0	18/08/05
*				:	Version 1.0.1	19/08/05
********************************************************************************/
var m_iX = new Number(0);
//---Connect to remote server---
var m_nOpt = 0
var m_sUrlSgt = "/WRT/be/sgtConnectWR.xml";
//var m_sUrlSgt2 = m_sUrlSgt;
var m_sUrlSgt2 = "/WRT/be/sgtConnect.xml";
var m_iFeedbackWaitTimeSgt = new Number(3000); //10s
var m_iReloadTimeSgt = new Number(1000);	//5s			
var m_iErrorWaitTimeSgt = new Number(2000);	//5s	
var m_sXmlObjSgt = new String("");
var m_iTimerSgt = new Number(0);
var m_xXmlHttpSgt;
var m_asSSD_P = new String("D");	//Prefix of SSD (representation), exp: D8,DA,DB,DC,...
var m_asSSD = new Array("8","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"); //stock start digit  	
//---Param pass from sgtConnect or Java Applet---
//---StkCodeName---
//|Code|Name|
//|0   |1   |
var m_iStockCodeCol = new Number(0);
var m_iStockNameCol = new Number(1);

//---Global Variable---
var m_sQuoteDate = new String("");
var m_sQuoteTime = new String("");
var m_sStkCodeName = new String("");
var m_iTotRowCnt = new Number(0);
var m_iTotColCnt = new Number(0);
var m_asStkCodeNameC = new Array();		//combination/crop (convert from string to array)
var m_asStkCodeNameD = new Array();		//Decomposition, decompose to 27 part, Digit(1/all) && alphabet(A-Z)
//-------------------------------------
function initSgt(){	
	bReq = loadXmlSgt();	
	if(bReq){
		m_nOpt = 1;
		loadDataSgt();
	}else{
		//alert("---Critical Error:xXmlHttp not exist---");
	}
}

function loadXmlSgt(){
	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]+"]");
				}				
			}
		}	
	
	// Netscape,FireFox,Mozilla,Opera 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+"]");
			}			
		}		

	return bReq;
}

function loadDataSgt(){
	var sURL

	if (m_nOpt == 1)
		sURL = m_sUrlSgt
	else
		sURL = m_sUrlSgt2

	//if(m_iTimerSgt != 0){ clearTimeout(m_iTimerSgt); }
	var xXmlHttp = new getXmlHttp();
	
	//xXmlHttp.onreadystatechange = stateChangeSgt;	//without ()
	
	// *** To avoid error 412(Precondition Failed), 'xXmlHttp.onreadystatechange = stateChange;' 
	// must located before 'xXmlHttp.open("GET", sURL, true);'
	
	//-Random Timer 'x' to avoid cache
	var dtDate = new Date();
	var sCTimer = new String("");
	sCTimer = dtDate.getTime();	
	//alert("sCTimer=["+sCTimer+"]");
	var sCURL = new String(sURL+ "?time=" +m_iTimerSgt +"&x="+sCTimer+m_iX); //CURL-Combined URL
	m_iX++;
	//alert("sCURL=["+sCURL+"]");

	//xXmlHttp.open("POST", sURL, true);	//Works well in Tomcat, but return 405 in IIS.
	xXmlHttp.open("GET", sCURL, true);		//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 	
	xXmlHttp.setRequestHeader("content-type", "application/x-www-form-urlencoded");	//used when using POST
	xXmlHttp.setRequestHeader("cache-control", "no-cache");
	// ***(Exception::)->xXmlHttp.send(null); //hence still suspend
	// Error 412(Precondition Failed) occurs when using this line with POST, please send something;
	xXmlHttp.send("sId="+m_iTimerSgt);	//sId currently no used(no meaning), to avoid sending null, exist error 412.
	//xXmlHttp.onreadystatechange = stateChange;	//without ()

	
	xXmlHttp.onreadystatechange = stateChangeSgt;	//without ()
	//alert("send!!sURL=["+sURL+"]");
}

function stateChangeSgt(){	
	var asStkCodeNameR = new Array();	//Raw stock code name
	var sStkCodeNameMerge = new String("");
	var bFlag = new Boolean(false);
	var sVal = new String("");
	var iCnt = new Number(0);
	//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("");
	//---StkCodeName---
	var xStkCodeNameNode;
	var xStkCodeNameTextNode;
	var xStkCodeName;
	var sStkCodeName = 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_iTimerSgt=["+m_iTimerSgt+"],xXmlHttp.readyState=["+xXmlHttp.readyState+"]");
	//Set only when timeout had initialize (!=0).
	if(m_iTimerSgt != 0){ clearTimeout(m_iTimerSgt); }
	try{
	  switch(xXmlHttp.readyState){
		
		case 1:
			m_iTimerSgt = setTimeout("errorHandling()",m_iFeedbackWaitTimeSgt);
			break;
		case 4:
			m_iTimerSgt = setTimeout("loadDataSgt()",m_iReloadTimeSgt);
			//alert("@@m_iTimerSgt=["+m_iTimerSgt+"], xXmlHttp.status=["+xXmlHttp.status+"]");
			//alert("xXmlHttp.responseText=["+xXmlHttp.responseText+"]");
			if(xXmlHttp.status == 200){
				//Changing to connected status image
				//idTickerBlink.src = sImgUrl+ "blinkStatusG.gif";
				//---Currently unused, because only hit once, no need status---
				//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---
					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();						
					//---StkCodeName---(Old version, limitation of netscape family browser(>255))
					//$xStkCodeNameNode = xXmlHttp.responseXML.getElementsByTagName("StkCodeName")[0]; //StkCodeName
					//$xStkCodeNameTextNode = xStkCodeNameNode.childNodes[0];
					//$xStkCodeName = xStkCodeNameTextNode.nodeValue;
					//$sStkCodeName = new String(xStkCodeName).valueOf();
					//---StkCodeNameD---(New version, decompose to small part, Digit(1) && Alphabet(26))
					for(var i=0; i<m_asSSD.length; i++){
						sStkCodeNameMerge = m_asSSD_P + m_asSSD[i];	//combination or merge string to become stk name						
						xStkCodeNameNode = xXmlHttp.responseXML.getElementsByTagName(sStkCodeNameMerge)[0]; //StkCodeName
						xStkCodeNameTextNode = xStkCodeNameNode.childNodes[0];
						//alert(xStkCodeNameNode+","+xStkCodeNameTextNode);
						if(xStkCodeNameTextNode!=null){
							//alert("iCnt=["+iCnt+"],m_asSSD.length=["+m_asSSD.length+"]");
							xStkCodeName = xStkCodeNameTextNode.nodeValue;
							sStkCodeName = new String(xStkCodeName).valueOf();
							asStkCodeNameR[iCnt] = sStkCodeName;
							iCnt++;
						}else{
							//alert("=");
						}
					}
					//alert("XLn=["+xXmlHttp.responseXML.getElementsByTagName("StkCodeName")[0].childNodes[0].length+"],XS=["+xStkCodeNameTextNode.length+"],X=["+xStkCodeName.length+"],S=["+sStkCodeName.length+"]");
					//---Indices---
					//xIndicesNode = xXmlHttp.responseXML.getElementsByTagName("Indices")[0]; 
					//xIndicesTextNode = xIndicesNode.childNodes[0];
					//xIndices = xIndicesTextNode.nodeValue;
					//sIndices = new String(xIndices).valueOf();
					//alert("!!!");
					//---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(sQuoteDate+","+sQuoteTime+","+iTotRowCnt+","+iTotColCnt);
					//alert(asStkCodeNameR.length);
				
					setQuoteDate(sQuoteDate);
					setQuoteTime(sQuoteTime);
					//setStkCodeName(sStkCodeName);	 //old version, limitation of netscape family(>255char)
					//setIndices(sIndices);
					setTotRowCnt(iTotRowCnt);
					setTotColCnt(iTotColCnt);
					
					//@@ Xml to array for Stock Code Name(24/10/05)
					stkCodeNameXml2Array(iTotRowCnt, asStkCodeNameR);	//new version, straight away convert to array from decomposed XML
					
					//setIndicesTrackerUrl(sIndicesTrackerUrl);
					//setColor(sColor);
					//setAnnouncementText(sAnnouncementText);
					//setSetting(sSetting);
					//===============================				
					//---*** (Old Version)After Complete, set then run the data formatting engine
					//$refreshThread();
					//===============================
					//---*** New Input to call autoSuggestControl java script for sgtMain.js ---
					//var oStockCodeName = new AutoSuggestControl(document.getElementById('txtFastQuote'), new ControlSuggest(getStkCodeNameC()), 10); //Old type
					
					if(document.getElementById('StockA') != null)
					  var oStockCodeName  = new AutoSuggestControl(document.getElementById('StockA'), new ControlSuggest(getStkCodeNameC()), 8); //new type
					if(document.getElementById('StockB') != null)
					  var oStockCodeName2 = new AutoSuggestControl(document.getElementById('StockB'), new ControlSuggest(getStkCodeNameD()), 8); //new type
					if(document.getElementById('StockC') != null)
					  var oStockCodeName3 = new AutoSuggestControl(document.getElementById('StockC'), new ControlSuggest(getStkCodeNameD()), 8); //new type
					if(document.getElementById('StockD') != null)
					  var oStockCodeName4 = new AutoSuggestControl(document.getElementById('StockD'), new ControlSuggest(getStkCodeNameD()), 8); //new type
					//-Calc-
					if(document.getElementById('StockCalcA') != null)
					  var oStockCodeName5 = new AutoSuggestControl(document.getElementById('StockCalcA'), new ControlSuggest(getStkCodeNameD()), 8); //new type
					//-Comp-
					if(document.getElementById('StockCompA') != null)
					  var oStockCodeName6 = new AutoSuggestControl(document.getElementById('StockCompA'), new ControlSuggest(getStkCodeNameD()), 8); //new type
					if(document.getElementById('StockCompB') != null)
					  var oStockCodeName6 = new AutoSuggestControl(document.getElementById('StockCompB'), new ControlSuggest(getStkCodeNameD()), 8); //new type

					if(document.getElementById('txtCounter') != null)
					  var oStockCodeName7 = new AutoSuggestControl(document.getElementById('txtCounter'), new ControlSuggest(getStkCodeNameD()), 8); //new type

					if(document.getElementById('Stock_0') != null)
					  var oStockCodeName  = new AutoSuggestControl(document.getElementById('Stock_0'), new ControlSuggest(getStkCodeNameC()), 8); //new type
					if(document.getElementById('Stock_1') != null)
					  var oStockCodeName2 = new AutoSuggestControl(document.getElementById('Stock_1'), new ControlSuggest(getStkCodeNameD()), 8); //new type
					if(document.getElementById('Stock_2') != null)
					  var oStockCodeName3 = new AutoSuggestControl(document.getElementById('Stock_2'), new ControlSuggest(getStkCodeNameD()), 8); //new type
					if(document.getElementById('Stock_3') != null)
					  var oStockCodeName4 = new AutoSuggestControl(document.getElementById('Stock_3'), new ControlSuggest(getStkCodeNameD()), 8); //new type
					if(document.getElementById('Stock_4') != null)
					  var oStockCodeName4 = new AutoSuggestControl(document.getElementById('Stock_4'), new ControlSuggest(getStkCodeNameD()), 8); //new type

					//===============================					
					//---*** Specially for sgtConnect.js, because it only hit once(when success, no need to hit XML).
					//-Located before refreshThread() as afraid of refreshThread() takes time to avoid never stop looping timer. 
					//-Located after to avoid unexpected error in refreshThread as program will still hit after the timer(catch)
					clearTimeout(m_iTimerSgt);
					//===============================
					
					//alert("sIndices=["+sIndices+"],getIndices()=["+getIndices()+"]");
					//******---never alert sStkCodeName (program will hang)---
					//alert("sStkCodeName=["+sStkCodeName+"]");
					//alert("iTotRowCnt=["+iTotRowCnt+"],getTotRowCnt()=["+getTotRowCnt()+"]");
					//alert("iTotColCnt=["+iTotColCnt+"],getTotColCnt()=["+getTotColCnt()+"]");
					//alert("sIndicesTrackerUrl=["+sIndicesTrackerUrl+"]");
					bFlag = true;	
				}catch(e){
					///alert("SGT:stateChange::xXmlHttp:e=["+e+"]");
					//EXIT when exception occurs:
					clearTimeout(m_iTimerSgt);
					errorHandling();
				}
						
			}else{
				//alert("SGT:stateChange::xXmlHttp.status=["+xXmlHttp.status+"]");
				errorHandling();
			}
			break;
		default:	
	  }	  
	}catch(e){
		//alert("SGT:stateChange::e=["+e+"]");
	}
	//---Specially for sgtConnect, never loop back, but I think this line will never run---
	//loadData;	
}

function errorHandling(){
	var xXmlHttp = getXmlHttp();				
	//Never infinite loop, put a error Handling reload timer
	if(m_iTimerSgt != undefined){
		clearTimeout(m_iTimerSgt);
	}
	m_iTimerSgt = setTimeout("loadDataSgt()",m_iErrorWaitTimeSgt);
}

function stkCodeNameXml2Array(vs_iTotRowCnt, vs_asStkCodeNameR){
	var asStkCodeNameD = new Array();
	//---data formating, >0 at least have 1 stock---
	var bTurnFlag = new Boolean(true); 
	var iIndex = new Number(0);
	var iNextIndex2 = new Number(0); //index after the delimeter
	var iDelimIndex2 = new Number(0);//Delimiter position
	var iNextIndex = new Number(0); //index after the delimeter
	var iDelimIndex = new Number(0);//Delimiter position
	var sDelim = new String("|");	//Delimiter
	///***Specially dedicated for netscape family(mozilla, firefox, ...)
	//-from internet, we observe that due to line length limit for HTML parser bug, the program had
	//limit length to <254 characters long. For those who more than the limit will be automatic truncated to
	//avoid complains of "Unterminated string literal". 
	//-Solution: Seperate string to many small piece, and straight away bind to array.
	var sStkCodeName = new String("");
	var iTotRowCnt = new Number(vs_iTotRowCnt);
	var asStkCodeNameR = vs_asStkCodeNameR;
	var asStkCodeName = new Array();
	var sStkCode = new String("");
	var sStkName = new String("");
	var sRemove = new String("&amp;");	
	var sReplace = new String("&");	
	//sStkCodeName = new String("0012|3A|5959|A&amp;M|5959WA|A&amp;M-WA|7054|AASIA|0800EA|ABFMY1|7061|ABRIC|7061WA|ABRIC-WA|");
	if(iTotRowCnt > 0){
		for(var i=0; i<asStkCodeNameR.length; i++){
			//---*** Special algorithm to convert &amp; to & symbol, as the XML had change & to &amp;		
			iDelimIndex = 0;	//reset on every start loop
			sStkCodeName = asStkCodeNameR[i];
			replace(sStkCodeName, sRemove, sReplace);
			//execute until no more delim detected, then break out
			while(iDelimIndex >= 0){							
				//---Stock Code---
				iDelimIndex = sStkCodeName.indexOf(sDelim,iNextIndex);			
				sStkCode = sStkCodeName.substring(iNextIndex,iDelimIndex);
				iNextIndex = iDelimIndex + 1; 
				//---** Specially exit when iDelimIndex == -1, means no more delim detected
				if(iDelimIndex == -1){ continue; }			
				//---Stock Name---
				iDelimIndex = sStkCodeName.indexOf(sDelim,iNextIndex);
				sStkName = sStkCodeName.substring(iNextIndex,iDelimIndex);
				iNextIndex = iDelimIndex + 1; 
				//---Binding into array---
				asStkCodeName[iIndex] = sStkName +"("+ sStkCode +")";			
				//$alert('iDelimIndex=['+iDelimIndex+'],asStkCodeName['+iIndex+']=['+asStkCodeName[iIndex]+'],sStkCode=['+sStkCode+'],sStkName=['+sStkName+']');
				iIndex++;
			}	
		}
		if (m_nOpt == 1) {
			setStkCodeNameD(asStkCodeName);

			m_nOpt = 2;
			loadDataSgt();

		} else
			setStkCodeNameC(asStkCodeName);
	}
}

function replace(vs_sOri, vs_sRemove, vs_sReplace){
	var sOri = new String(vs_sOri);
	var sRemove = new String(vs_sRemove);
	var sReplace = new String(vs_sReplace);
	var iRemoveIndex = sRemove.length;
	var iReplaceIndex = sReplace.length;
	var iNextIndex = new Number(0);
	var iDelimIndex = new Number(0);
	var sNew = new String("");
	if(sOri.length > 0){
		sNew = sOri;
		while(iDelimIndex >= 0){
			iDelimIndex = sNew.indexOf(sRemove,iNextIndex);
			if(iDelimIndex == -1){ break; }
			sNew = sNew.substring(0,iDelimIndex) +sReplace+ sNew.substring((iDelimIndex+iRemoveIndex),sNew.length) 
			iNextIndex = iDelimIndex+1;
			//$alert("sNew=["+sNew+"],sRemove=["+sRemove+"]@+=["+(iDelimIndex+iRemoveIndex)+"],iDelimIndex=["+iDelimIndex+"],iRemoveIndex=["+iRemoveIndex+"],sNew.length=["+sNew.length+"]");
		}
	}	
}

//-----------------------------------------------------------------------------------
//===================================
//---Global Set Get Method---
//===================================		
//---XML---
function setXmlHttp(vs_xXmlHttp){ m_xXmlHttpSgt = vs_xXmlHttp; }
function getXmlHttp(){ return m_xXmlHttpSgt; }

function setXmlObj(vs_sXmlObj){	m_sXmlObjSgt = vs_sXmlObj; }
function getXmlObj(){ return m_sXmlObjSgt; }		

//---Indices---
function setQuoteDate(vs_sQuoteDate) { m_sQuoteDate = vs_sQuoteDate; }
function getQuoteDate(){ return m_sQuoteDate; }

function setQuoteTime(vs_sQuoteTime) { m_sQuoteTime = vs_sQuoteTime; }
function getQuoteTime(){ return m_sQuoteTime; }

//function setStkCodeName(vs_sStkCodeName) { m_sStkCodeName = vs_sStkCodeName; }
//function getStkCodeName(){ return m_sStkCodeName; }

function setTotRowCnt(vs_iTotRowCnt){ m_iTotRowCnt = vs_iTotRowCnt; }
function getTotRowCnt(){ return m_iTotRowCnt; }

function setTotColCnt(vs_iTotColCnt){ m_iTotColCnt = vs_iTotColCnt; }
function getTotColCnt(){ return m_iTotColCnt; }

function setStkCodeNameC(vs_asStkCodeNameC){ m_asStkCodeNameC = vs_asStkCodeNameC; }
function getStkCodeNameC(){ return m_asStkCodeNameC; }

function setStkCodeNameD(vs_asStkCodeNameD){ m_asStkCodeNameD = vs_asStkCodeNameD; }
function getStkCodeNameD(){ return m_asStkCodeNameD; }

//-----------------------------------------------------------------------------------
//initSgt();	