//<!--
//Page functions
$(document).ready(function() {
	//setTimeout(function(){
		tickergate();
		onLoad();
	//},4000);//just so the IE 'Operation aborted' error ruins load times for everyone.
});

$(window).unload(function(){
	GUnload();
});
//Map functions
var globalLoadBox='<div style="padding:15px;text-align:center;"><img src="/images/ajaxload/355b8f-on-transparent.gif" /></div>';
var map;
var debugElement;
var mapElement;
var gMarkers=[];
var mIndex = 0;
var gLines=[];
var lIndex=0;
var sIndex=0;
var routeHeaderElement;
var routeDetailElement;
var cameraTitleElement;
var carParkDataElement;
var firstRun=true;
var refreshTime=180;

function onLoad(){
	debugElement = document.getElementById('debug');
	mapElement = document.getElementById('map');
	cameraNumberElement = document.getElementById('camNumber');
	cameraTitleElement = document.getElementById('camLocation');
	routeDetailElement = document.getElementById('routeDetail');
	routeHeaderElement = document.getElementById('routeHeader');
	carParkDataElement = document.getElementById('carParkData');
	imageElement = document.getElementById('camImage');
	map = new GMap2(document.getElementById('map'));
	map.setCenter(new GLatLng(52.96466675804344, -1.1566543579101562),14,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();
	//setTimeout(function(){
		//readXml('/xml/parking/nottingham.xml');
		readXml('/xml/parking/nottingham.xml');
		readXml('/xml/parksmart/zones.xml');
	//},2000);
	setTimeout(refreshData,refreshTime*1000);
}

function refreshData(){
	routeDetailElement.innerHTML = globalLoadBox;
	firstRun=true;
	map.clearOverlays();
	//readXml('/xml/parking/nottingham.xml');
	readXml('/xml/parking/nottingham.xml');
	readXml('/xml/parksmart/zones.xml');
	setTimeout(refreshData,refreshTime*1000);
}

function readXml(xmldb) {
	//debugElement.innerHTML = "LoadData was called: " + type + "," + xmldb + "<br />";
	var tmpHtml = '';
	var request = GXmlHttp.create();
	var now = new Date();
	var r = now.toUTCString();
	var lox = new Array();
	var nocacheXML = xmldb + "?r=" + r;
	request.open("GET", nocacheXML, true);
	request.onreadystatechange = function() {
		if (request.readyState == 4) {
			var xmlDoc = request.responseXML;
			var markers = xmlDoc.documentElement.getElementsByTagName("marker");
			for (var i = 0; i < markers.length; i++) {
				var carpark=markers[i].getAttribute("name");
				var parked=markers[i].getAttribute("occupancy");
				var spaces=markers[i].getAttribute("spaces");
				var filling=markers[i].getAttribute("fillrate");
				var lastmod=markers[i].getAttribute("lastupdated");
				var override=parseInt(markers[i].getAttribute("override"));
				var state=markers[i].getAttribute("state");
				var stateid=markers[i].getAttribute("stateid");switchvalue=stateid;
				var zone=markers[i].getAttribute("zone");
				var nodata=markers[i].getAttribute("nodata");
				var data=true;
				//uncomment to remove the non-data car parks
				if(nodata>0){data=false;state='No live data';switchvalue=10;};
				var label=carpark+': '+state;
				var lat=parseFloat(markers[i].getAttribute("lat"));
				
				var lng=parseFloat(markers[i].getAttribute("lng"));
				//alert(lat+","+lng);
				//alert(i+","+state+","+carpark+","+spaces+","+parked+","+filling+","+lastmod+","+point+","+data+","+switchvalue);
				if(isNaN(lat)==false){
					var point=new GLatLng(lat,lng);
					var marker=createMarker(i,state,carpark,spaces,parked,filling,lastmod,point,data,switchvalue);
					//if(point){
						//alert(point);
						map.addOverlay(marker);
						//i,status,carpark,spaces,parked,filling,lastmod
						if(!data){
							tmpHtml += '<div class="link-arrow-bg"><a onclick="javascript:handleSelect('+i+",'"+state+"','"+carpark+"','"+spaces+"','"+parked+"','"+filling+"','"+lastmod+"','"+data+"',"+switchvalue+');" href="#">' + carpark + ': ' + state + '</a></div>';
						}else{
							if(state=="Spaces"){
								tmpHtml += '<div class="link-arrow-bg"><a onclick="javascript:handleSelect('+i+",'"+state+"','"+carpark+"','"+spaces+"','"+parked+"','"+filling+"','"+lastmod+"','"+data+"',"+switchvalue+');" href="#">' + carpark + ': ' + spaces + ' spaces</a></div>';
							}else{
								tmpHtml += '<div class="link-arrow-bg"><a onclick="javascript:handleSelect('+i+",'"+state+"','"+carpark+"','"+spaces+"','"+parked+"','"+filling+"','"+lastmod+"','"+data+"',"+switchvalue+');" href="#">' + carpark + ': ' + state + '</a></div>';
							}
							if(firstRun){
								handleSelect(i,state,carpark,spaces,parked,filling,lastmod,data,switchvalue);
								firstRun=false;
							}
						}
					//}
				}
				
				 //+ lox + camimage + i;
			}
			//polygons
			var shapes=xmlDoc.documentElement.getElementsByTagName("shape");
			//read each shape
			for (var a=0; a < shapes.length; a++) {
				//line attributes
				var colour=shapes[a].getAttribute("colour");
				var width=parseFloat(shapes[a].getAttribute("width"));
				var epts=GXml.value(shapes[a].getElementsByTagName("epoints")[0]);
				var elvls=GXml.value(shapes[a].getElementsByTagName("elevels")[0]);
				//where[a]=shapes[a].getAttribute("scn");
				
				var polygon = new GPolygon.fromEncoded({
					polylines: [{points:epts,levels:elvls,color:colour,opacity:0.5,weight:1,numLevels:18,zoomFactor: 2}],
					fill:true,color:colour,opacity:0.3,outline:true
				});
				map.addOverlay(polygon);
			}
			if(tmpHtml){routeDetailElement.innerHTML = tmpHtml};
		}
	};
	request.send(null);
	//alert(gMarkers);
}

function handleSelect(i,state,carpark,spaces,parked,filling,lastmod,data,switchvalue){
	var fillStr;
	map.panTo(gMarkers[i].getPoint());
	if(filling>0){fillStr='Filling at the rate of ';}else{fillStr = 'Emptying at the rate of ';	filling *= (-1);}
	if(lastmod){
		var str='<h6>'+carpark+'</h6>';
		str+='<div class="matrix" style="margin-left:0px;margin-bottom:5px;">'+state+'</div>';
		str+='Car park with '+parseInt(parseInt(spaces)+parseInt(parked))+' vehicle capacity.';
		if(switchvalue<4){
			str+='<br /><b>'+spaces+'</b> spaces remaining.';
			str+='<br /><b>'+parked+'</b> vehicles are currently parked.';
			str+='<br />'+fillStr+'<b>'+filling+'</b> vehicles/hour.';
		}
		str+='<span>Last updated at '+lastmod+'.</span>';
		carParkDataElement.innerHTML = str;
	}else{
		carParkDataElement.innerHTML = '<h5>'+carpark+'</h5>'
				+'<h6>No live data available.</h6>';
	}
}

function createMarker(i,status,carpark,spaces,parked,filling,lastmod,point,data,switchvalue){
	
	//var marker=new ngIcon(point,carpark+": "+spaces+" spaces","/images/googlemap_icons/p.png",28,36);
	
	switch(parseInt(switchvalue)){
		case 1:
			var marker=new ngIcon(point,carpark+": "+spaces+" spaces","/images/googlemap_icons/p.png",28,36);
		break;
		case 2:
			var marker=new ngIcon(point,carpark+": "+spaces+" spaces","/images/googlemap_icons/pa.png",28,36);
		break;
		case 3:
			var marker=new ngIcon(point,carpark+": "+spaces+" spaces","/images/googlemap_icons/pf.png",28,36);
		break;
		case 4:
			var marker=new ngIcon(point,carpark+": "+spaces+" spaces","/images/googlemap_icons/pc.png",28,36);
		break;
		case 10:
			var marker=new ngIcon(point,carpark+": "+spaces+" spaces","/images/googlemap_icons/pnd.png",28,36);
		break;
		default:
			var marker=new ngIcon(point,carpark+": "+spaces+" spaces","/images/googlemap_icons/p.png",28,36);
	}	
	GEvent.addListener(marker, "click", function() {
		map.panTo(point);
		handleSelect(i,status,carpark,spaces,parked,filling,lastmod,data);
		//marker.openInfoWindowHtml(info);
	});
	gMarkers[i]=marker;
	//mIndex++;
	return marker;
}
//-->
