//<!--
//Incidents-005.js - fixed for when HA feed breaks!
//Page functions
$(document).ready(function() {
	setTimeout(function(){
		tickergate();
		onLoad();
	},500);//just so the IE 'Operation aborted' error ruins load times for everyone.
});
$(window).unload(function(){
	GUnload();
});

//Map functions
var globalLoadBox='<div style="margin:15px;text-align:center;"><img src="/images/ajaxload/355b8f-on-transparent.gif" /></div>';

var map;var debugElement;var mapElement;var highwaysIncidentElement;var delaySidebarElement;var gMarkers=[];var mIndex = 0;var gLines=[];var mArray=[];var lIndex=0;var textContainerElement;var timeObj;var showHighwaysAgency=true;

function onLoad(){
	debugElement = document.getElementById('debug');
	mapElement = document.getElementById('map');
	highwaysIncidentElement = document.getElementById('highwaysIncidents');
	delaySidebarElement=document.getElementById('delaySidebar');
	textContainerElement = document.getElementById('textContainer');
	map = new GMap2(mapElement);
	map.setCenter(new GLatLng(52.96466675804344, -1.1566543579101562),9,G_NORMAL_MAP);
	map.addControl(new GMapTypeControl(true),new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(7,7)));
	map.addControl(new GSmallMapControl(true),new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(7,7)));
	map.removeMapType(G_SATELLITE_MAP);
	map.enableScrollWheelZoom();
	reload();
}
function clearAll(){
	map.clearOverlays();
	debugElement.innerHTML='';
	highwaysIncidentElement.innerHTML='';
	delaySidebarElement.innerHTML='';
}
function reload(){
	$("#textContainer").load("/ajax-asp/works.asp?r=I");
	clearTimeout(timeObj);
	timeObj=setTimeout(reload,180000);
	clearAll();
	if(showHighwaysAgency){load('ue','/xml/highwaysAgency/unplanned.xml');load('ts','/xml/highwaysAgency/journeytimes.xml');}else{highwaysIncidentElement.innerHTML="There's a problem with the Highways Agency feed, so it's unavailable. Sorry!";}
}
function load(object,xmldb) {    
		//debugElement.innerHTML+= "<br />load was called: " + object + "," + xmldb + "<br>";
		var request=GXmlHttp.create();
		var r=getRandoms(999);
		var nocacheXML=xmldb + "?" + r;
		var countDelays=0;var countIncidents=0;
		request.open("GET", nocacheXML, true);
		request.onreadystatechange=function() {
			if (request.readyState == 4) {
				var xmlDoc=request.responseXML;
				var markers=xmlDoc.documentElement.getElementsByTagName("marker");
				//debugElement.innerHTML+='Request ready for xml file: ' + xmldb+ ', markers returns: '+markers+'<br />';
				//debugElement.innerHTML+=markers[0].getAttribute('type') + '<br />';
				//alert('inline');
				for (var i=0; i < markers.length; i++){
					var ztype=markers[i].getAttribute("type");
					//debugElement.innerHTML+='ztype=' + ztype + ', '+' object='+object+'<br />';
					if (ztype==object) {  
						switch(ztype){
							case 'ue':
								countIncidents++;
								var ld=markers[i].getElementsByTagName("location");
								var comment=GXml.value(markers[i].getElementsByTagName("comment")[0]);
								var startTime=GXml.value(markers[i].getElementsByTagName("startTime")[0]);
								var endTime=GXml.value(markers[i].getElementsByTagName("endTime")[0]);
								var location=ld[0].getAttribute("loc");
								var direction=ld[0].getAttribute("dir");
								lat=ld[0].getAttribute("lat");
								lng=ld[0].getAttribute("lng");
								var pn=new GLatLng(lat,lng);
								//var label=subtype + ": " + location;
								//debugElement.innerHTML += ld + "," + com + "," + st + "," + ft + "," + loc + "," + dir + "," + lat + "," + lng + "<br />";
								highwaysIncidentElement.innerHTML+=formatWorks(comment,location,startTime,endTime,direction);
								//alert('formatworks called for '+ location+ ' with mIndex'+mIndex);
								var marker=createMarker(pn,'',ztype,location,false,false,false);
								map.addOverlay(marker);
							break;
						}
					}
				}
									
				var time=xmlDoc.documentElement.getElementsByTagName("timesection");
				for (a=0; a < time.length; a++) {
					countDelays++;
					var width ='6';
					//points=time[a].getElementsByTagName("point");
					var to=new GLatLng(parseFloat(time[a].getElementsByTagName("to")[0].getAttribute("lat")),parseFloat(time[a].getElementsByTagName("to")[0].getAttribute("lng")));
					var from=new GLatLng(parseFloat(time[a].getElementsByTagName("from")[0].getAttribute("lat")),parseFloat(time[a].getElementsByTagName("from")[0].getAttribute("lng")));
					var valid=time[a].getAttribute("valid");
					var actual=time[a].getAttribute("actual");
					var expected=time[a].getAttribute("expected");
					var name=time[a].getAttribute("name");
					//.replace(/Journey Time Section for /,'').replace(/bound from/,', ').replace(/bound to /,', ').replace(/and/,'&amp; ');
					var carriageway=time[a].getAttribute("carriageway");
					//var st=time[a].getAttribute("st");//sampleTime
					var wn=new Date(s2d(actual).getTime()-s2d(expected).getTime());
					var wt=wn.getTime();
					if(wt<0){od="-"+s2t((wt*-1)/1000)}else{
						od="+"+s2t(wt/1000)
						//if(wt>120000){//2 minutes = 120000
						var pts=[];
						pts[0]=to;
						pts[1]=from;
						//for (var i=0; i < points.length; i++) {
						//	var j=(points.length-1)-i;
						//	pts[i]=new GLatLng(parseFloat(points[j].getAttribute("lat")),parseFloat(points[j].getAttribute("lng")));
						//

						//function createPolyline(pts,epts,elvls,colour,width,opacity,infos,ztype)
						delaySidebarElement.innerHTML+=formatDelays(od,name);
						
						createPolyline(pts,false,false,'#FFFF00',4,0.8,name+' '+actual,'ts',false);
						
					
						var llb=gLines[lIndex-1].getBounds();
						var marker=createMarker(llb.getCenter(),'',"ts",name,od,false,false,lIndex-1);
						
						map.addOverlay(marker);
						//
					};
					
					
				}
				// end of NTCC Timesection loop
			}
			
        };
		request.send(null);
		//if(object=='ts'){delaySidebarElement.innerHTML+='<br />'+countDelays+' delay(s) found.'};
		//if(object=='ue'){highwaysIncidentElement.innerHTML+='<br />'+countIncidents+' incident(s) found.'};
	} // end of load function...
	function findAnchor(id){
		//$('#item'+id+' span').animate({backgroundColor:"#dfebfc"},500,'',function(){
			//$('#item'+id+' span').animate({backgroundColor:"#fafafa"},6000);
		//});
		$('#item'+id+' span').css({backgroundColor:'#f1f6fd'});
		window.location='#item'+id;
		handleClick(id);
	}
	function createMarker(point,info,type,label,subtype,switchvalue,d,lineId) {		
		switch(type)
		{		
			case 'ue':
			//alert('tried to add a marker');
				var mi=mIndex;
				var marker=new ngIcon(point,label,"/images/googlemap_icons/mIconTri.png",10,10);
				GEvent.addListener(marker,'click',function(){
					findAnchor(mi);
				});
			break;
			case 'ts':
				var marker=new numberIcon(point, label, false, subtype, lineId);
			break;
		}
		//mArray[type].push(marker);       
		gMarkers[mIndex]=marker;
		mIndex++;
		return marker;
	}
	function createPolyline(pts,epts,elvls,colour,width,opacity,infos,ztype,show){
		var polyLine=new GPolyline(pts,colour,width,opacity);
		//add variable to show on create... mouseover show/hide from journey times.
		//mArray[ztype].push(polyLine);       
		gLines[lIndex]=polyLine;
		lIndex++;
		if(show){map.addOverlay(polyLine)};
	}
	
	function formatWorks(comment,location,startTime,endTime,direction){
		var outputString='';
		outputString+='<div class="works" id="item'+mIndex+'"><h6>'+location+'</h6><div style="margin-left:10px;margin-right:60px;margin-bottom:10px;background-color:#fafafa;padding:3px;">';
		outputString+='<span class="rwHeader"></span>';
		outputString+='<span>'+comment+'</span>';
		outputString+='<span><a href="#" onclick="javascript:handleClick(\''+mIndex+'\')">Show on map</a></span>';
		return outputString;
	}
	function formatDelays(time,location){
		if(location.length>30){location=location.substring(0,28) + "...";}
		return '<a href="#" onclick="javascript:handleClick(\''+mIndex+'\');">'+time+': '+location+'</a>';
	}
	function handleClick(id){
		map.panTo(gMarkers[id].getPoint());
	}

//-->