/*******************************************************************************
*Title			:	Ticker Scroller with Memory cookies & MouseOver function
*Author			:	Wong Zi Wei
*contributors	:	-
*Date			:	01/07/05
********************************************************************************/
//===================================
//---Customize Global Variable---
//===================================
var m_iIntervalScrollerID;
var m_iIntervalRefreshTimerKO = new Number(1000);		//auto refresh, <KO>routine hit (2s / 3s will be good, 5s wait too long)
//$var m_iIntervalRefreshTimerOK = new Number(5000);	//auto refresh, <OK>hit 
var m_iRefreshID;
//var m_iRefreshContentID;
//var m_iRefreshContentTimer = new Number(500);	//auto-refresh in refresh content(). execute when still no content("");
var m_sLeftTime;
var m_sReloadTime;
//===============================
//From JSP or ASP (param pass in)
//===============================
try{	
	sFontSize += "px";	
	var iWidth = new Number(parseInt(sWidth));
	var iSpeed = new Number(parseInt(sSpeed));   //Scoller speed (larger is faster 1-10)
	sImgUrl = sImgUrl;
}catch(e){
	var sFontSize = "11px";
	var iWidth = new Number(800);
	var iSpeed = 1;	
	var sImgUrl = new String("img/tickerConnect/");
	//alert("pass in param:e=["+e+"]");	
}

//var sImgUrl = new String("img/tickerConnect/");
//alert("sFontSize=["+sFontSize+"], iWidth=["+iWidth+"], iSpeed=["+iSpeed+"], iSpeed+1=["+(iSpeed+1)+"]");
//sFontSize = "11px";
//iWidth = "740";
//iSpeed = 1;
//-----------------------------
//var sFontSize = "11px";
//var iWidth = 745;	   //scroller width, 760
var sHeight = "15px";	   //scroller height, 20px, 15px
var sBgColor = "#000000";  //scroller background, DEFDD9
var sFgColor = "#FFFFFF";
var sPadding = "2px";	   //padding for scoller.(0 for non)
var sBorderCSS = "border:1px solid #CCCCCC";
//var sBorderCSS = "border: 1px solid black;"; //Border CSS, for scoller to give border.

//var iSpeed = 1;	 	 //Scoller speed (larger is faster 1-10)
var iPauseIt = 1;	 //Pause Scoller onMouseOver (0-no, 1-yes)
var iPersistLastViewedMsg = 1;	//should scoller's position persist after users navigate away (1-yes, 0-no) 	
var sPersistMsgBehaviour = "onload"; //set to "onload" or "onclick"

var m_sContentData = new String("");
var m_sContentDataTemp = new String("");

var sNBSP = '&nbsp;&nbsp;&nbsp;';
//var sAllContent  = 'Powered By N2N CONNECT' + sNBSP +'Time:2005-7-1 11:39:19' + sNBSP + 'EMAS <font color=#00FF00>204.32</font> <font color=#00FF00>0.59</font>' + sNBSP + 'COMPOSITE <font color=#00FF00>892.40</font> <font color=#00FF00>4.08</font>'+ sNBSP +'2ND-BOARD <font color=#FF0000>87.50</font> <font color=#FF0000>-0.21</font>' + sNBSP + 'MESDAQ <font color=#FF0000>93.22</font> <font color=#FF0000>-0.6</font>' + sNBSP +'INDUSTRIAL <font color=#00FF00>1996.71</font> <font color=#00FF00>17.73</font>';
var sAllContent = new String("");
//var sAllContent = new String(getContentData()).valueOf();
//var sContentSetStart = '<nobr><span style="font: bold 11px Verdana">';	//'<nobr><span style="font: bold 13px Verdana">';
var sContentSetStart = "<nobr><span style='FONT-WEIGHT: bold;FONT-SIZE: "+ sFontSize +";FONT-FAMILY: Verdana'>";	//'<nobr><span style="font: bold 13px Verdana">';
//alert("sContentSetStart=["+sContentSetStart+"]");
var sContentSetClose = '</span></nobr>';
//var sContent = sContentSetStart + sAllContent + sContentSetClose;
var sContent = new String("");
//alert("sContent=["+sContent+"]");


//===================================
//---Non-customize Global Variable---
//===================================
//$var sCombinedCSSTable = "width:"+(iWidth+6)+"px;background-color:"+sBgColor+";color:"+sFgColor+";padding:"+sPadding+";"+sBorderCSS+";";
var sCombinedCSSTable = "width:"+iWidth+"px;background-color:"+sBgColor+";color:"+sFgColor+";padding:"+sPadding+";"+sBorderCSS+";";
var sCombinedCSS = "width:"+iWidth+";height:"+sHeight+";";
var sDivonClick = (iPersistLastViewedMsg && sPersistMsgBehaviour=="onclick")? 'onclick="savelastmsg()" ' : ''
//$iSpeed=(document.all)? iSpeed : Math.max(1, iSpeed-1) //slow speed down by 1 for NS
iSpeed = Math.max(1, iSpeed-1); //for IE & NS family (document.all -IE(true), -NS(false)
var iCopySpeed = new Number(iSpeed);
//var iPauseSpeed = new Number(0);
iPauseSpeed = (iPauseIt==0)? iCopyspeed: 0;
//alert("(iSpeed+1)=["+(iSpeed+1)+"], (iCopySpeed+1)=["+(iCopySpeed+1)+"], (iPauseSpeed+1)=["+(iPauseSpeed+1)+"]");
var sIeDom = document.all||document.getElementById;

var iActualWidth = new Number(0);
var idScroller;

function refreshThread(){
	if(m_iIntervalScrollerID != undefined){ clearInterval(m_iIntervalScrollerID); }	
	m_iIntervalScrollerID = setInterval("refreshContent()",m_iIntervalRefreshTimerKO);		
}

//===================================
//---Initialize process---
//===================================

function init(){

//*** Please ensure the init won't run twice, cause it mainly is the initialize process---
//*** This 2 lines can't call here, as sIeDom component have'n't initialize for mozilla.
//	refreshThread();
//	refreshContent();
//--------------------
	//sAllContent = new String(getContentData()).valueOf();
	//sContent = sContentSetStart + sAllContent + sContentSetClose;
	//alert("sAllContent=["+sAllContent+"], getContentData()=["+getContentData()+"]");
	
	//$$$Window Event$$$
	if(window.addEventListener)
		window.addEventListener("load",populateScroller,false);
	else if (window.attachEvent)
		window.attachEvent("onload", populateScroller);
	else if(document.all || document.getElementById)
		window.onload=populateScroller;
	
	//$$$IE Document(set Content)$$$
	if (sIeDom)
		document.write('<span id="idContent"  style="visibility:hidden;position:absolute;top:-100px;left:-10000px">'+sContent+'</span>')
		
	//$$$Save Msg in Cookies$$$
	if(iPersistLastViewedMsg && sPersistMsgBehaviour=="onload"){
		window.onunload=saveLastMsg;
	}

	//$$$IE Documentation(Bind div for mouse actionevent)---IE ++ NS family$$$
	if (sIeDom){
		with (document){
			document.write('<table border="0" cellspacing="0" cellpadding="0" style="'+sCombinedCSSTable+'"><td>');
			document.write('<div style="position:relative;overflow:hidden;'+sCombinedCSS+'" onMouseover="iCopySpeed=iPauseSpeed" onMouseout="iCopySpeed=iSpeed">');
			document.write('<div id="idScroller" style="position:absolute;left:0px;top:0px;" '+sDivonClick+'></div>');
			document.write('</div>');			
			document.write('</td>');
			//document.write('<td>');
			//---Adding Blinking Status for Connected / Disconnected
		//$	write('<img id="idTickerBlink" src=\"' +sImgUrl+ 'blinkStatusG.gif\" width="15" height="15">');
			//document.write('</td>');
			document.write('</table>');
		}
	}
	//---Start RefreshContent after complete initialize all component---	
	refreshThread();
	refreshContent();
}

//===================================
//---Function/Method---
//===================================
	
function populateScroller(){
	idScroller = document.getElementById? document.getElementById('idScroller') : document.all.idScroller;
	//alert("document.getElementById=["+document.getElementById+"]");
	//alert("document.getElementById('idScroller')=["+document.getElementById('idScroller')+"], document.all.idScroller=["+document.all.idScroller+"]");
	//idScroller.style.left=iWidth+8+"px";
	idScroller.style.left=iWidth+"px";
	
	if(iPersistLastViewedMsg && get_Cookie("sLastScrollerPos")!="")
		reviveLastMsg();

	idScroller.innerHTML = sContent;
//	iActualWidth = document.all? idContent.offsetWidth : document.getElementById('idContent').offsetwidth;
//	alert("iActualWidth=["+iActualWidth+"]");
//	alert("idContent.offsetWidth=["+idContent.offsetWidth+"], !=["+document.getElementById('idContent').offsetwidth+"]");
	
	runScrollMarquee();
}

function runScrollMarquee(){
	if(m_sLeftTime != undefined){ clearInterval(m_sLeftTime); }
	if(getContentData() != ""){
		m_sLeftTime = setInterval("scrollMarquee()",40);	//30,20
	}else{
		m_sLeftTime = setInterval("runScrollMarquee()",2000);
	}
	//alert("idScroller=["+idScroller+"],get_Cookie('sLastScrollerPos')=["+get_Cookie('sLastScrollerPos')+"]");
}

////alert("idScroller.style.left=["+idScroller.style.left+"] (iActualWidth + 1)=["+(iActualWidth + 1)+"]");	
//if(parseInt(idScroller.style.left) > (iActualWidth*(-1)+8)){
/*
function scrollMarquee(){
	if(parseInt(idScroller.style.left) > (iActualWidth*(-1)+8)){
		idScroller.style.left = parseInt(idScroller.style.left)-iCopySpeed+"px";
	}else{	
		//idScroller.style.left = iWidth+8+"px"; //(String delay >10% CPU processors
		idScroller.style.left = iWidth+"px"; //+"px";
		refreshContent();	//reload the latest the content after a finish loop.		
	}
}
*/
var iLoc = new Number(0);
var iWidthLimit = new Number(0);
var sLoc = new String("");
function scrollMarquee(){
	iLoc = parseInt(idScroller.style.left);
	iWidthLimit = iActualWidth*(-1)+8;
	if(iLoc > iWidthLimit){
		iLoc = iLoc-iCopySpeed;
		sLoc = new String(iLoc).valueOf()+"px";
		idScroller.style.left = sLoc;
	}else{	
		idScroller.style.left = iWidth+"px";
		refreshContent();		
	}
}

function get_Cookie(vs_sName) {
	var sSearch =  vs_sName + "=";
	var sReturnValue = "";
	if(document.cookie.length > 0){
		offset = document.cookie.indexOf(sSearch);
		if(offset != -1){
			offset += sSearch.length;
			end = document.cookie.indexOf(";", offset);
			if(end == -1)
			end = document.cookie.length;
			sReturnValue = unescape(document.cookie.substring(offset, end))
		}
	}
	return sReturnValue;
}

function saveLastMsg(){
	document.cookie = "sLastScrollerPos="+idScroller.style.left;
}

function reviveLastMsg(){
	sLastScrollerPos = parseInt(get_Cookie("sLastScrollerPos"));
	idScroller.style.left = parseInt(sLastScrollerPos) +"px";	
}

function refreshContent(){
	//---clearInterval & m_iRefreshId to refresh-on-demand---//
	//clearInterval(m_iRefreshID); 	
	//if(m_iRefreshID != undefined){
	//var bFlag = new Boolean(false);	//'B' capital letter, not boolean	
	//alert("^0^");
	//alert("m_sLeftTime=["+m_sLeftTime+"], getContentData()=["+getContentData()+"]");
	//---Clear the interval once the getContentData initialize
	
	if(getContentData() != ""){ clearInterval(m_iIntervalScrollerID); }
	//if(getContentData() != ""){ clearInterval(m_iRefreshContentID); }
				
	//if(m_sLeftTime != undefined){
	if(getContentData() != ""){
		try{	
			sAllContent = new String(getContentData()).valueOf();
			sContent = sContentSetStart + sAllContent + sContentSetClose;
			//sContent = sContentSetStart + "!!!" + sContentSetClose;
			//alert("sContent.offsetWidth=["+sContent.length+"], sAllContent=["+sAllContent+"],idContent.innerText=["+idContent.innerText+"]");
			//idContent.innerHTML = sContent;
			//idScroller.innerHTML = sContent;

			document.getElementById? document.getElementById('idContent').innerHTML = sContent : idContent.innerHTML = sContent;
			document.getElementById? document.getElementById('idScroller').innerHTML = sContent : idContent.innerHTML = sContent;
			//alert("document.getElementById('idScroller').innerHTML=["+document.getElementById('idScroller').innerHTML+"]");
			
			//*** Bug for Mozilla, while mozilla not support document.all, but it return idContent.offsetWidth (true) &  getElementById (false)
			//iActualWidth = document.all? idContent.offsetWidth : document.getElementById('idContent').offsetWidth;
			iActualWidth = document.getElementById? document.getElementById('idContent').offsetWidth : idContent.offsetWidth;
			//alert("document.getElementById('idContent').offsetWidth=["+document.getElementById('idContent').offsetWidth+"]");
			//alert("iActualWidth=["+iActualWidth+"],(idContent.offsetWidth + 1)=["+(idContent.offsetWidth + 1)+"], document.getElementById('idContent').offsetwidth=["+document.getElementById('idContent').offsetwidth+"]");
			//alert("idContent.offsetWidth=["+idContent.offsetWidth+"], document.getElementById('idContent').offsetwidth=["+document.getElementById('idContent').offsetwidth+"]");
		}catch(e){
			//alert("e=["+e+"]");
		}		
	}else{		
		try{				
			sAllContent = new String(getContentData()).valueOf();
			sContent = sContentSetStart + sAllContent + sContentSetClose;			
			//alert("sAllContent=["+sAllContent+"], getContentData()=["+getContentData()+"]");
			//m_iRefreshContentID = setInterval("populateScroller()",m_iRefreshContentTimer);
		}catch(e){
			//alert("e=["+e+"]");
		}		
	}
	//m_iRefreshID = setInterval("refreshContent()", m_iIntervalRefreshTimer );	
}

//==========================================
//---Set Get method(must place at bottom)---
//==========================================

function setContentData(vs_sContentData){
	m_sContentData = vs_sContentData;
}
function getContentData(){
	return m_sContentData;
}

function setContentDataTemp(vs_sContentDataTemp){
	m_sContentDataTemp = vs_sContentDataTemp;
}
function getContentDataTemp(){
	return m_sContentDataTemp;
}

//-------------------------------------------
init();
