/***********************************************
* Retrieving of xml data 
***********************************************/
var xmlhttp;
var pausecontent=new Array();
var trafficMessage=new Array();
var trafficMessageTemp=new Array()
var messageGroup = 0;
var configUrl;
var rslt="";

function init(url){
   loadXMLDoc(url);
   readConfig();
   loadXMLDoc(configUrl);		
   readTrafficMessages();
   new pausescroller(trafficMessage, "content", "someclass", 5000);
}
function initHor(url){
	loadXMLDoc(url);
	readConfig_Hor();
	loadXMLDoc(configUrl);		
	readTrafficMessages();   
	composeHorMsg();
	return rslt;
}
function composeHorMsg(){	
	try{
		for(i = 0; i < trafficMessage.length; i++)
		{
			rslt+=trafficMessage[i]+"      ";
			rslt=rslt.replace("<br><br>", "");
			rslt=rslt.replace("<br>","");
		}
				
	}catch(er){
		alert('Error Parsing Traffic Message XML : ' + er);
	}
	//alert("rslt="+rslt);
}
function loadXMLDoc(url) {
	
	xmlhttp=null;
	if (window.XMLHttpRequest){// code for IE7, Firefox, Mozilla, etc.
		xmlhttp=new XMLHttpRequest();
	}else if (window.ActiveXObject){// code for IE5, IE6
		xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
	}
	if (xmlhttp!=null){
		xmlhttp.onreadystatechange=onResponse;
		xmlhttp.open("GET", url, false);
		xmlhttp.send(null);		
	 }else {
		alert("Your browser does not support XMLHTTP.");
	  }
}

function readConfig()
{
   x=xmlhttp.responseXML.documentElement.getElementsByTagName("TrafficNews");

   messageGroup = x[0].getElementsByTagName("MessageGroup")[0].childNodes[0].nodeValue;
   configUrl = x[0].getElementsByTagName("URL")[0].childNodes[0].nodeValue;
}
function readConfig_Hor()
{
   x=xmlhttp.responseXML.documentElement.getElementsByTagName("TrafficNews");

   messageGroup = x[0].getElementsByTagName("MessageGroup")[0].childNodes[0].nodeValue;
   configUrl = x[0].getElementsByTagName("URL_Hor")[0].childNodes[0].nodeValue;
}
function readTrafficMessages() {
   	
   incidentTag = xmlhttp.responseXML.documentElement.getElementsByTagName("Incident");
	try {
		intTotalNews = incidentTag.length;
		//1 row = 30 char, current T.N. has 8 rows, 2 message group will have 1 line break
		intTotalRows = 9-messageGroup+1;
		intRow = 35;
		if(intTotalNews>0){
			for(i = 0; i < intTotalNews; i++)
				trafficMessageTemp[i] = (incidentTag[i].getElementsByTagName("Message"))[0].childNodes[0].nodeValue;
			
			for(i = 0, j=0; i < intTotalNews;){
				msgTemp1 = trafficMessageTemp[i];
				if(i+1<intTotalNews){
					msgTemp2 = trafficMessageTemp[i+1];
					//alert((Math.ceil(msgTemp1.length/intRow) + Math.ceil((msgTemp2.length)/intRow) ));
					if((Math.ceil(msgTemp1.length/intRow) + Math.ceil((msgTemp2.length)/intRow) ) <= intTotalRows){
						trafficMessage[j] = msgTemp1 + "<br><br>" + msgTemp2;
						j++;
						i+=2;
					}else{
						trafficMessage[j] = msgTemp1;
						j++;
						i++;
					}
				}
				else{
					trafficMessage[j] = msgTemp1;
					j++;
					i++;
				}
			}
		}else
		{
			trafficMessage[0]="Currently there is no traffic news update.";
			trafficMessage[1]="Currently there is no traffic news update.";
		}
		

     } catch (er) {
			alert('Error Parsing Traffic Message XML : ' + er);
	 }
}

function onResponse()  {
	if(xmlhttp.readyState!=4) return;
	if(xmlhttp.status!=200){
	  alert("Problem retrieving XML data");
	  return;
	}		
}

/***********************************************
* End of retrieving xml data 
***********************************************/


/***********************************************
* Pausing up-down scroller- © Dynamic Drive (www.dynamicdrive.com)
* This notice MUST stay intact for legal use
* Visit http://www.dynamicdrive.com/ for this script and 100s more.
***********************************************/

function pausescroller(content, divId, divClass, delay){
this.content=content //message array content
this.tickerid=divId //ID of ticker div to display information
this.delay=delay //Delay between msg change, in miliseconds.
this.mouseoverBol=0 //Boolean to indicate whether mouse is currently over scroller (and pause it if it is)
this.hiddendivpointer=1 //index of message array for hidden div
document.write('<div id="'+divId+'" class="'+divClass+'" style="position: relative; overflow: hidden"><div class="innerDiv" style="position: absolute; width: 100%" id="'+divId+'1">'+content[0]+'</div><div class="innerDiv" style="position: absolute; width: 100%; visibility: hidden" id="'+divId+'2">'+content[1]+'</div></div>')
var scrollerinstance=this
if (window.addEventListener) //run onload in DOM2 browsers
window.addEventListener("load", function(){scrollerinstance.initialize()}, false)
else if (window.attachEvent) //run onload in IE5.5+
window.attachEvent("onload", function(){scrollerinstance.initialize()})
else if (document.getElementById) //if legacy DOM browsers, just start scroller after 0.5 sec
setTimeout(function(){scrollerinstance.initialize()}, 500)
}

// -------------------------------------------------------------------
// initialize()- Initialize scroller method.
// -Get div objects, set initial positions, start up down animation
// -------------------------------------------------------------------

pausescroller.prototype.initialize=function(){
this.tickerdiv=document.getElementById(this.tickerid)
this.visiblediv=document.getElementById(this.tickerid+"1")
this.hiddendiv=document.getElementById(this.tickerid+"2")
this.visibledivtop=parseInt(pausescroller.getCSSpadding(this.tickerdiv))
//set width of inner DIVs to outer DIV's width minus padding (padding assumed to be top padding x 2)
this.visiblediv.style.width=this.hiddendiv.style.width=this.tickerdiv.offsetWidth-(this.visibledivtop*2)+"px"
this.getinline(this.visiblediv, this.hiddendiv)
this.hiddendiv.style.visibility="visible"
var scrollerinstance=this
document.getElementById(this.tickerid).onmouseover=function(){scrollerinstance.mouseoverBol=1}
document.getElementById(this.tickerid).onmouseout=function(){scrollerinstance.mouseoverBol=0}
if (window.attachEvent) //Clean up loose references in IE
window.attachEvent("onunload", function(){scrollerinstance.tickerdiv.onmouseover=scrollerinstance.tickerdiv.onmouseout=null})
setTimeout(function(){scrollerinstance.animateup()}, this.delay)
}


// -------------------------------------------------------------------
// animateup()- Move the two inner divs of the scroller up and in sync
// -------------------------------------------------------------------

pausescroller.prototype.animateup=function(){
var scrollerinstance=this
if (parseInt(this.hiddendiv.style.top)>(this.visibledivtop+5)){
this.visiblediv.style.top=parseInt(this.visiblediv.style.top)-5+"px"
this.hiddendiv.style.top=parseInt(this.hiddendiv.style.top)-5+"px"
setTimeout(function(){scrollerinstance.animateup()}, 50)
}
else{
this.getinline(this.hiddendiv, this.visiblediv)
this.swapdivs()
setTimeout(function(){scrollerinstance.setmessage()}, this.delay)
}
}

// -------------------------------------------------------------------
// swapdivs()- Swap between which is the visible and which is the hidden div
// -------------------------------------------------------------------

pausescroller.prototype.swapdivs=function(){
var tempcontainer=this.visiblediv
this.visiblediv=this.hiddendiv
this.hiddendiv=tempcontainer
}

pausescroller.prototype.getinline=function(div1, div2){
div1.style.top=this.visibledivtop+"px"
div2.style.top=Math.max(div1.parentNode.offsetHeight, div1.offsetHeight)+"px"
}

// -------------------------------------------------------------------
// setmessage()- Populate the hidden div with the next message before it's visible
// -------------------------------------------------------------------

pausescroller.prototype.setmessage=function(){
var scrollerinstance=this
if (this.mouseoverBol==1) //if mouse is currently over scoller, do nothing (pause it)
setTimeout(function(){scrollerinstance.setmessage()}, 100)
else{
var i=this.hiddendivpointer
var ceiling=this.content.length
this.hiddendivpointer=(i+1>ceiling-1)? 0 : i+1
this.hiddendiv.innerHTML=this.content[this.hiddendivpointer]
this.animateup()
}
}

pausescroller.getCSSpadding=function(tickerobj){ //get CSS padding value, if any
if (tickerobj.currentStyle)
return tickerobj.currentStyle["paddingTop"]
else if (window.getComputedStyle) //if DOM2
return window.getComputedStyle(tickerobj, "").getPropertyValue("padding-top")
else
return 0
}
