	//MapEmbed-002.js - minimised and added incidents
	var showCongestion=true;var showTrafficCameras=true;var showCarParks=true;var showSpeedCameras=false;var showRailNet=true;var showPOI=true;var showMobileCameras=false;var showHighwaysAgency=true;var showVmsNotts=false;var showJourneyTimes=false;var showElginRoadworks=true;var showStreetView=true;var showSearchBox=false;showTicker=false;
	//Page timing variables
	var mapWait=8000;var mapInitialTimeout=1500;var pageReloadTimeout=240;var tm=pageReloadTimeout; //Counter variable
	//Map variables
	var map;var svc;var map2=[];var gMarkers=[];var gLines=[];var mArray=[];var sArray=[];var mIndex=0;var lIndex=0;var sIndex=0;var mapLocationStart;var isIE=true;var TickerPresentMapControlY=50;var TickerPresentMapTypeY=28;var MapControlY=28;var MapTypeY=7;
	//ajax loader...
	var globalLoadBox='<img src="/images/ajaxload/355b8f-on-transparent.gif" alt="Loading" />';
	//elements
	var mapElement;var infoElement;
	//Function called from page body/JQuery	
	function onLoad(lat,lng,z) {
		mapElement=document.getElementById('map');
		infoElement=document.createElement('div');
		debugElement=document.getElementById('debug');
		setTimeout(function(){initialise(mapInitialLat,mapInitialLng,mapInitialZoom)},mapInitialTimeout);
	} 
	//Setup function
	function initialise(lt,ln,z) {
		setupNgIcon(28,36,"/images/googlemap_icons/blank.gif",document.all);
		infoElement.id="infopane";
		if(GBrowserIsCompatible()){
			map=new GMap2(mapElement, {draggingCursor: 'pointer'});
			map.setCenter(new GLatLng(lt,ln),z,G_NORMAL_MAP);
			//Map controls: set up standard Google controls first
			if(showTicker){MapControlY=TickerPresentMapControlY;MapTypeY=TickerPresentMapTypeY;}
			map.addControl(new GSmallMapControl(),new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(7,MapControlY)));
			map.addControl(new GMenuMapTypeControl(),new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(7,MapTypeY)));
			map.removeMapType(G_SATELLITE_MAP);
			map.enableContinuousZoom();
			map.enableDoubleClickZoom();
			map.enableScrollWheelZoom();
			//Custom controls: provided by...
			map.addControl(new twInfoBox(map,'provider',300,17,'','','#fff'),new GControlPosition(G_ANCHOR_TOP_LEFT, new
GSize(86,MapTypeY)));document.getElementById('provider').innerHTML='<a href="http://www.nottinghamtravelwise.org.uk/map/" style="display:block;margin-left:5px;margin-top:1px;" target="_blank" id="providera">Powered by Nottingham Travelwise (click to visit)</a>';
			//Custom controls: key...
			map.addControl(new twInfoBox(map,'key',41,17,'','','#fff'),new GControlPosition(G_ANCHOR_TOP_LEFT, new
GSize(391,MapTypeY)));document.getElementById('key').innerHTML='<a href="#" onclick="javascript:openKey()" style="display:block;margin-left:5px;margin-top:1px;">Key...</a>';
			//Custom controls: News ticker
			if(showTicker){map.addControl(new twInfoBox(map,'tickerbox',475,17,'','','#fff'),new GControlPosition(G_ANCHOR_TOP_LEFT, new
GSize(7,7)));document.getElementById('tickerbox').innerHTML='<a href="#" style="display:block;padding-top:1px;padding-left:2px;" id="ticker"></a>';setTimeout(tickergate, 500);}
			//Set up the autoreload
			xtimer=setInterval(countdown,1000);
			//Set up listeners
			GEvent.addListener(map,'infowindowclose',function(){reset();}); 
			GEvent.addListener(map,'dragend',function(){mapLocationStart=map.getCenter();});
			//Go!
			setTimeout(Reload, 1);
		}else{	
			document.location.href='/access/index/'; //needs work. Maps Static API
		}
    }
	function countdown(){
		if(tm>0){var timeStr=60%tm;var r=tm % 60;if(r<10){var fr="0"+r}else{fr=r};tm--;}else{tm=pageReloadTimeout;Reload();}
	}
	//createMarker-embed
    function createMarker(point,info,type,label,subtype,switchvalue,d,lineId) {
		//debugElement.innerHTML+=info;
		switch(type)
		{
			case 'RWks':var marker=new GMarker(point, {icon:iconRWks,title:label});break; 
			case 'CCTV':var marker=new ngIcon(point,label,"/images/googlemap_icons/cc.png");break; 
			case 'carpark':switch(parseInt(switchvalue)){
					case 1:var marker=new ngIcon(point,label,"/images/googlemap_icons/p.png");break;
					case 2:var marker=new ngIcon(point,label,"/images/googlemap_icons/pa.png");break;
					case 3:var marker=new ngIcon(point,label,"/images/googlemap_icons/pf.png");break;
					case 4:var marker=new ngIcon(point,label,"/images/googlemap_icons/pc.png");break;
					case 10:var marker=new ngIcon(point,label,"/images/googlemap_icons/pnd.png");break;
					default:var marker=new ngIcon(point,label,"/images/googlemap_icons/p.png");}
			break;
			case 'Incs':var marker=new GMarker(point, {icon:iconRWks,title:label});break;
			case 'Speed':switch(subtype){
					case 'SPECS':var marker=new ngIcon(point,label,"/images/googlemap_icons/sc-g.png");break;
					case 'Fixed':var marker=new ngIcon(point,label,"/images/googlemap_icons/sc-y.png");break;
					case 'Mobile':var marker=new ngIcon(point,label,"/images/googlemap_icons/sc-b.png");break;
					case 'Redlight':var marker=new ngIcon(point,label,"/images/googlemap_icons/sc-r.png");break;
					default:alert('oops!');}
			break;
			case 'netstops':var marker=new ngIcon(point,label,"/images/googlemap_icons/nt.png");break;
			case 'nr':var marker=new ngIcon(point,label,"/images/googlemap_icons/nr.png");break;		
			case 'Landmark':switch(subtype){
					case 'sports':var marker=new ngIcon(point,label,"/images/googlemap_icons/lm-r.png");break;
					case 'hospital':var marker=new ngIcon(point,label,"/images/googlemap_icons/lm-p.png");break;			
					case 'heritage':var marker=new ngIcon(point,label,"/images/googlemap_icons/lm-y.png");break;
					case 'park':var marker=new ngIcon(point,label,"/images/googlemap_icons/lm-y.png");break;
					case 'transport':var marker=new ngIcon(point,label,"/images/googlemap_icons/lm-g.png");break;
					default:var marker=new GMarker(point);}
			break;
			case 'matrix':var marker=new ngIcon(point,label,"/images/googlemap_icons/mIcon.gif",10,10);break;
			case 'vms':var marker=new ngIcon(point,label,"/images/googlemap_icons/mIconPink.gif",10,10);break;
			case 'cr':var marker=new ngIcon(point,label,"/images/googlemap_icons/mIconTriRed.gif",10,10);break;
			case 'fr':var marker=new ngIcon(point,label,"/images/googlemap_icons/mIconRed.gif",10,10);break;
			case 'ue':var marker=new ngIcon(point,label,"/images/googlemap_icons/mIconTri.png",10,10);break;
			case 'cp':var marker=new ngIcon(point,label,"/images/googlemap_icons/mIconGreen.gif",10,10);break;
			case 'ts':var marker=new numberIcon(point, label, info, subtype, lineId);break;
			case 'vmsnotts':var marker=new ngIcon(point,label,"/images/googlemap_icons/vms.png");break;
			case 'works':switch(subtype){
					case '0':var marker=new ngIcon(point, label,"/images/googlemap_icons/rw-g.png");break;
					case '1':var marker=new ngIcon(point, label,"/images/googlemap_icons/rw-g.png");break;
					case '2':var marker=new ngIcon(point, label,"/images/googlemap_icons/rw-y.png");break;
					case '3':var marker=new ngIcon(point, label,"/images/googlemap_icons/rw-r.png");break;
					default:}
			break;
			case 'incident':var marker=new ngIcon(point,label,"/images/googlemap_icons/inc.png");break;
			default:var marker=new GMarker(point, {icon:G_DEFAULT_ICON,title:label});break;
		}
		GEvent.addListener(marker, 'click', function(){marker.openInfoWindowHtml(info);});	
		mArray[type].push(marker);       
		gMarkers[mIndex]=marker;
		mIndex++;
		return marker;
	}
	function arrowHead(points,density,width,label,html,type,op) {
		var colour;var image;var p0=points[0];var p1=points[1];var dir=bearing(p1,p0);dir=Math.round(dir/3) * 3;while (dir >= 120){dir-=120;}
		switch(density){
			case '3':image="/arrows/red/dirred_"+dir+".png";colour="red";break;
			case '2':image="/arrows/blue/dir_"+dir+".png";colour="blue";break;
			case '1':image="/arrows/green/dirgren_"+dir+".png";colour="green";break;
			default:image="/arrows/red/dirred_"+dir+".png";colour="red";
		}
		var marker=new ngIcon(p0,label,image,24,24,12,12);
		mArray[type].push(marker);       
		gMarkers[mIndex]=marker;
		mIndex++;
		map.addOverlay(marker);
		if(!op){op=0.4};
		//polyline trail
		var polyLine=new GPolyline(points,colour,width,op);
		mArray[type].push(polyLine);       
		gLines[lIndex]=polyLine;
		lIndex++;
		map.addOverlay(polyLine);
		var onClick=function(){marker.openInfoWindowHtml(html);};
		GEvent.addListener(marker,"click",onClick);
		GEvent.addListener(polyLine,"click",onClick);
    }
	function createPolyline(pts,epts,elvls,colour,width,opacity,infos,ztype,show){
		if(epts){
			var polyLine=new GPolyline.fromEncoded({
			color: colour,
			weight: width,
			opacity: opacity,
			points: epts,
			zoomFactor: 2,
			levels: elvls,
			numLevels: 18
			});
		}else{
			var polyLine=new GPolyline(pts,colour,width,opacity);
		}
		var f=formatPolyline(infos,ztype);
		GEvent.addListener(polyLine, "click", function(pts) {
			mapLocationStart=map.getCenter();
			map.openInfoWindowHtml(pts,f);
		});
		mArray[ztype].push(polyLine);       
		gLines[lIndex]=polyLine;
		lIndex++;
		if(show){map.addOverlay(polyLine)};
	}
	function formatPolyline(i,t){
		var f='';
		f+='<div style="width:250px;height:120px;">';
		f+='<div class="infobox-content">';
		switch(t){
			case 'net':
				f+= '<img src="/images/links.gif" /><br />'
			break;
			case 'cycle':
				f+='<div class="embolden" style="padding:4px;">The Big Track</div><div style="margin-top:4px;text-align:center;"><a href="http://www.thebigwheel.org.uk/" target="_blank"><img src="/images/infoWindow/bigwheel.gif" /></a></div>';
			default:
			}
		f+=i+'</div></div>';
		return f;
	}
	function createPolygon(epts,elvls,colour,infobox){
		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.2,outline:true
		});
		return polygon;
	}
    function load(object,xmldb) {    
		var request=GXmlHttp.create();
		var r=getRandoms(999);
		var nocacheXML=xmldb + "?" + r;
		request.open("GET", nocacheXML, true);
		request.onreadystatechange=function(){
			if (request.readyState == 4) {
				var xmlDoc=request.responseXML;
				//polygons
				var shapes=xmlDoc.documentElement.getElementsByTagName("shape");
				//read each shape
				for (var i=0;i<shapes.length;i++) {
					var ztype=shapes[i].getAttribute("type");
					if (ztype==object) {         
						//line attributes
						var colour=shapes[i].getAttribute("colour");
						var width=parseFloat(shapes[i].getAttribute("width"));
						var epts=GXml.value(shapes[i].getElementsByTagName("epoints")[0]);
						var elvls=GXml.value(shapes[i].getElementsByTagName("elevels")[0]);
						var infobox=GXml.value(shapes[i].getElementsByTagName("infobox")[0]);
						var polygon=createPolygon(epts,elvls,colour,infobox);
						mArray[ztype].push(polygon);
						map.addOverlay(polygon);
						sIndex++;
					}  
				}
				var markers=xmlDoc.documentElement.getElementsByTagName("marker");
				for (var i=0; i < markers.length; i++){
					var ztype=markers[i].getAttribute("type");
					if (ztype==object) {  
						var lat=parseFloat(markers[i].getAttribute("lat"));
						var lng=parseFloat(markers[i].getAttribute("lng"));
						var point=new GLatLng(lat,lng);
						var label=markers[i].getAttribute("label"); 
						var subtype=markers[i].getAttribute("subtype");
						var switchvalue=markers[i].getAttribute("switchvalue");
						var d;//variable to show/hide directions tab
						switch(ztype){
							case 'incident':
								var rdnum=markers[i].getAttribute("roadnumber");
								var rdname=markers[i].getAttribute("roadname");
								var start=markers[i].getAttribute("start");
								var finish=markers[i].getAttribute("finish");
								var description=markers[i].getAttribute("description");
								var advice=markers[i].getAttribute("advice");
								var locale=markers[i].getAttribute("locale");
								d=false;
								var content=rdnum+": "+rdname+", "+locale+"<br />"+advice+"<br />"+description;
								label="Incident: "+rdnum+": "+rdname;
							break;
							case 'CCTV':
								var locations=markers[i].getElementsByTagName("location");
								var lox=[];
								for(var n=0;n<locations.length;n++){
									lox[n]=GXml.value(locations[n]);
								}
								var camimage=markers[i].getAttribute("image");
								var id=markers[i].getAttribute("id");
								d=true;
								switchvalue=false;
								var content=formatCCTV(id,lox,camimage,lat,lng,i);
							break;
							case 'Speed':
								var dat=markers[i].getAttribute("startdate");
								var subtype=markers[i].getAttribute("camtype");
								var spd=markers[i].getAttribute("limit");
								var mfr=markers[i].getAttribute("mfr");
								var dir=markers[i].getAttribute("direction");
								var ref=markers[i].getAttribute("ref");
								var content=formatSpeed(label,dat,subtype,spd,mfr,dir,ref,lat,lng,i);
								d=false;
							break;
							case 'netstops':
								var sh=markers[i].getAttribute("linkname");
								var content=formatNetstops(label,sh);
							break;
							case 'nr':
								var id=markers[i].getAttribute("id");
								var content=formatRail(label,id);
							break;
							case 'Landmark':
								var link=markers[i].getAttribute("link");
								var content=formatLandmarks(label,i,subtype,link);
							break;
							case 'vms':
								var aspect=markers[i].getAttribute("legend");
								var key=markers[i].getAttribute("key");
								var name=markers[i].getAttribute("name");
								var carriageway=markers[i].getAttribute("carriageway");
								var cols=markers[i].getAttribute("cols");
								var rows=markers[i].getAttribute("rows");
								var label=name;
								var content=formatMatrices(aspect,key,name,carriageway,cols,rows);
								d=false;
							break;
							case 'matrix':
								var carriageway=markers[i].getAttribute("carriageway");
								var aspect=markers[i].getAttribute("aspect");
								var key=markers[i].getAttribute("key");
								var name=markers[i].getAttribute("name");
								var label=name;
								var content=formatMatrices(aspect,key,name,carriageway,4,1);
								d=false;
							break;
							case 'cr':
								var ld=markers[i].getElementsByTagName("location");
								var com=GXml.value(markers[i].getElementsByTagName("comment")[0]);
								var st=GXml.value(markers[i].getElementsByTagName("startTime")[0]);
								var ft=GXml.value(markers[i].getElementsByTagName("endTime")[0]);
								var loc=ld[0].getAttribute("loc");
								lat=ld[0].getAttribute("lat");
								lng=ld[0].getAttribute("lng");
								var pn=new GLatLng(lat,lng);
								var label=subtype + ": " + loc;
								var content=formatNTCC(loc,false,st,com,"",i,ft,"");
								d=false;
							break;
							case 'fr':
								var ld=markers[i].getElementsByTagName("location");
								var com=GXml.value(markers[i].getElementsByTagName("comment")[0]);
								var st=GXml.value(markers[i].getElementsByTagName("startTime")[0]);
								var ft=GXml.value(markers[i].getElementsByTagName("endTime")[0]);
								var loc=ld[0].getAttribute("loc");
								lat=ld[0].getAttribute("lat");
								lng=ld[0].getAttribute("lng");
								var pn=new GLatLng(lat,lng);
								var label=subtype + ": " + loc;
								var content=formatNTCC(loc,false,st,com,"",i,ft,"");
								d=false;
							break;
							case 'ue':
								var ld=markers[i].getElementsByTagName("location");
								var com=GXml.value(markers[i].getElementsByTagName("comment")[0]);
								var st=GXml.value(markers[i].getElementsByTagName("startTime")[0]);
								var ft=GXml.value(markers[i].getElementsByTagName("endTime")[0]);
								var loc=ld[0].getAttribute("loc");
								var dir=ld[0].getAttribute("dir");
								lat=ld[0].getAttribute("lat");
								lng=ld[0].getAttribute("lng");
								var pn=new GLatLng(lat,lng);
								var label=subtype + ": " + loc;
								var content=formatNTCC(loc,dir,st,com,"",i,ft,"");
								d=false;
							break;
							case 'cp':
								var ld=markers[i].getElementsByTagName("location");
								var com=GXml.value(markers[i].getElementsByTagName("comment")[0]);
								var st=GXml.value(markers[i].getElementsByTagName("startTime")[0]);
								var ft=GXml.value(markers[i].getElementsByTagName("endTime")[0]);
								var loc=ld[0].getAttribute("loc");
								var dir=ld[0].getAttribute("dir");
								lat=ld[0].getAttribute("lat");
								lng=ld[0].getAttribute("lng");
								var pn=new GLatLng(lat,lng);
								var label=subtype + ": " + loc;
								var content=formatNTCC(loc,dir,st,com,"",i,ft,"");
								d=false;
							break;
							case 'works':
								var dat=markers[i].getAttribute("startdate");
								subtype=markers[i].getAttribute("severity");
								label=markers[i].getAttribute("location") + ": " + markers[i].getAttribute("auth");
								content=markers[i].getAttribute("description") + "<br />" + markers[i].getAttribute("location");
								content+="<br />Start: "+markers[i].getAttribute("startTime") + "<br />End: " + markers[i].getAttribute("endTime") + '<br />Name:' + markers[i].getAttribute("streetname") + '<br />Type:' + markers[i].getAttribute("streettype")+ '<br />Type:' + markers[i].getAttribute("consequence");
								d=false;
							break;
							default:
						}
					}else{};
					if(isNaN(lat)==false){
						if(pn){
							var marker=createMarker(pn,content,ztype,label,subtype,switchvalue,d);
							map.addOverlay(marker);	
						}else{
							if(ztype!='Speed'||(showMobileCameras||subtype!='Mobile')){
								var marker=createMarker(point,content,ztype,label,subtype,switchvalue,d);
								map.addOverlay(marker);	
							}
						}
					}
				}
				//Polylines
				var lines=xmlDoc.documentElement.getElementsByTagName("line");
				for (var a=0; a < lines.length; a++) {
					var ztype=lines[a].getAttribute("type");
					if (ztype==object) {         
						
						var sta=lines[a].getAttribute("status");
						var nam=lines[a].getAttribute("name");
						var epts=GXml.value(lines[a].getElementsByTagName("epoints")[0]);
						var elvls=GXml.value(lines[a].getElementsByTagName("elevels")[0]);
						var phase=lines[a].getAttribute("phase");
						if(phase){
							var inf='NET phase ' + phase + ': '+ nam;
							inf+= '<br />Status: ' + sta;
							var colour='#11635c'; //hard-wired to the NET colours
						}else{
							//this is the Big Track - fudge
							var colour='#9973a6';//big wheel colour
							var inf='Car-free cycle loop';
						}
						var opacity=0.8;
						if(sta=='proposed'){opacity=0.4;};
						var width =4;
						if(!epts){//if there aren't any encoded points values then load, otherwise save some memory...
							var points=lines[a].getElementsByTagName("point");
							var pts=[];
							for (i=0; i < points.length; i++) {
								pts[i]=new GLatLng(parseFloat(points[i].getAttribute("lat")),parseFloat(points[i].getAttribute("lng")));
							}
						}
						createPolyline(pts,epts,elvls,colour,width,opacity,inf,ztype,true);
					}  
				}
				// Snakes
				var snakes=xmlDoc.documentElement.getElementsByTagName("snake");
				for (a=0; a < snakes.length; a++) {
					ztype=snakes[a].getAttribute("type");
					if (ztype==object) {         
         
						colour=snakes[a].getAttribute("colour");
						width =parseFloat(snakes[a].getAttribute("width"));
						label=snakes[a].getAttribute("label");
						points=snakes[a].getElementsByTagName("point");
						var density="";
						switch (colour){
						case '3':
							density="above average";
							break;
						case '2':
						density="average";
							break;
						default:
							density="Error...";
						}
						var xmls=formatCong(GXml.value(snakes[a].getElementsByTagName("location")[0]),GXml.value(snakes[a].getElementsByTagName("trend")[0]),density,parseFloat(points[0].getAttribute("lat")),parseFloat(points[0].getAttribute("lng")),mIndex,a);
						var pts=[];
						var nq=false;
						//hack to fix issues with A609 detector loop
						for (i=0; i < points.length; i++) {
							if(points[i].getAttribute("lat")!=""){
								nq=true;
								pts[i]=new GLatLng(parseFloat(points[i].getAttribute("lat")),parseFloat(points[i].getAttribute("lng")));
							}
						}
						if(nq){arrowHead(pts,colour,width,label,xmls,ztype)};
						
					} 
				} // end of snakes loop
				//NTCC time sections
				var time=xmlDoc.documentElement.getElementsByTagName("timesection");
				for (a=0; a < time.length; a++) {
					var width ='6';
					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");
					var carriageway=time[a].getAttribute("carriageway");
					var wn=new Date(s2d(actual).getTime()-s2d(expected).getTime());
					var wt=wn.getTime();
					od="+"+s2t(wt/1000)
					var pts=[];
					pts[1]=to;
					pts[0]=from;
					createPolyline(pts,false,false,'#FFFF00',4,0.8,name+' '+actual,'ts',false);
					var llb=gLines[lIndex-1].getBounds();
					var marker=createMarker(llb.getCenter(),formatNTCC(name,carriageway,valid,'','DELAY: '+od+'<br />Average time '+s2t(actual)+'<br />Expected '+s2t(expected)+'',0,'','',''),"ts",name+' - Journey time '+s2t(actual),od,false,false,lIndex-1);
					map.addOverlay(marker);
				} // end of NTCC Timesection loop
				//Siespace VMS signs
				var vmsnotts=xmlDoc.documentElement.getElementsByTagName("sign");
				for (var a=0; a < vmsnotts.length; a++) {
					var ztype=vmsnotts[a].getAttribute("type");
					if (ztype==object) {         
						var point=new GLatLng(parseFloat(vmsnotts[a].getAttribute("f3")),parseFloat(vmsnotts[a].getAttribute("f4")));
						var content='';
						var vmsfront='';
						var vid=vmsnotts[a].getAttribute('f1');
						var loc=vmsnotts[a].getAttribute('f2');
						var vmsbanks = vmsnotts[a].getElementsByTagName("bank");
						var cf='';
						for(var v=0;v<vmsbanks.length;v++){
							var bankname=vmsbanks[v].getAttribute('f2');
							var bankoverride=vmsbanks[v].getAttribute('f7');
							var banktimetable=vmsbanks[v].getAttribute('f8');
							var bankstd=vmsbanks[v].getAttribute('f5');
							var bankset=vmsbanks[v].getAttribute('f6');
							var bankid=vmsbanks[v].getAttribute('f0');
							var bankorder=vmsbanks[v].getAttribute('f1');
							var bankrows=vmsbanks[v].getAttribute('f3');
							var bankcols=vmsbanks[v].getAttribute('f4');
							var bankstatus=parseInt(vmsbanks[v].getAttribute('f9'));
							var signtext='';
							switch(bankstatus){
								case 162:
									signtext+=bankoverride;
								break;
								case 128:
									signtext+=banktimetable;
								break;
								default:
									signtext+=bankstd;
							}
							debugElement.innerHTML+="bankcols="+bankcols+"<br />";
								debugElement.innerHTML+="bankrows="+bankrows+"<br />";
							if(bankrows>1){
								for(var t=0;t<bankrows;t++){
									var bct=bankcols*t;

									var tmq=signtext.substring(bct,(parseInt(bct)+parseInt(bankcols)));
									if(t>0){cf+='<br />'};
									cf+=tmq;
									vmsfront+=tmq;
								}
								cf+="<br />Last update: "+bankset;
							}else{
								var tmq=signtext.substring((bankorder-1)*bankcols,(bankorder-1)*bankcols+parseInt(bankcols));
								cf+=bankname+" - ";
								cf+=tmq+"<br />Last update: "+bankset+"<br />";
								vmsfront+=tmq+"<br />";
							}
						}
						content = formatNTCC("Variable Message Sign "+vid,'','','',cf,0,'','',"Location:<br />"+loc)
						var marker=createMarker(point,content,ztype,vmsfront,loc,false,false);
						map.addOverlay(marker);
					}  
				}
				//Parksmart & zones
				var zone=xmlDoc.documentElement.getElementsByTagName("zone");

				for(var a=0;a<zone.length;a++){
					var zonename=zone[a].getAttribute("name");
					var carparks=zone[a].getElementsByTagName("carpark");
					for(var b=0;b<carparks.length;b++){
						var latlng=new GLatLng(parseFloat(carparks[b].getAttribute("lat")),parseFloat(carparks[b].getAttribute("lng")));var carparkname=carparks[b].getAttribute("name");var capacity=carparks[b].getAttribute("capacity");var occupancy=carparks[b].getAttribute("occupancy");var fillrate=carparks[b].getAttribute("fillrate");var nodata=carparks[b].getAttribute("nodata");var state=carparks[b].getAttribute("state");var stateid=carparks[b].getAttribute("stateid");var data=true;if(nodata>0){data=false;state='No live data available';stateid=10;};var lastupdated=carparks[b].getAttribute("lastupdated");var detailobj=carparks[b].getElementsByTagName("carparkdetails")[0];
						if(detailobj){
							var carparktype=detailobj.getAttribute("type");var tel=detailobj.getAttribute("tel");var address=detailobj.getAttribute("address");var operator=detailobj.getAttribute("operator");var specialclosures=detailobj.getAttribute("specialclosures");var url=detailobj.getAttribute("url");var openingweekdays=sb(detailobj.getAttribute("openingweekdays"));var closingweekdays=sb(detailobj.getAttribute("closingweekdays"));var openingsaturdays=sb(detailobj.getAttribute("openingsaturdays"));var closingsaturdays=sb(detailobj.getAttribute("closingsaturdays"));var openingsundays=sb(detailobj.getAttribute("openingsundays"));var closingsundays=sb(detailobj.getAttribute("closingsundays"));var prices=detailobj.getAttribute("prices");var marker=createMarker(latlng,formatParksmart(zonename,carparkname,capacity,occupancy,fillrate,data,state,lastupdated,carparktype,tel,address,operator,specialclosures,url,openingweekdays,closingweekdays,openingsaturdays,closingsaturdays,openingsundays,closingsundays,prices),"carpark",carparkname+": "+state+" ("+zonename+")","",stateid,"",d);
						}else{
							var marker=createMarker(latlng,formatParksmart(zonename,carparkname,capacity,occupancy,fillrate,nodata,state,lastupdated,carparktype,"","","","unknown","","unknown","","unknown","","unknown","","unknown"),"carpark",carparkname+": "+state+" ("+zonename+")","",stateid,"",d);
						}
						map.addOverlay(marker);
					}
				}// end of Parksmart loop
			}
		};
		request.send(null); 
	}// end of load function...
    function Reload(){
		map.clearOverlays();gMarkers=null;gLines=null;mArray=null;gMarkers=[];gLines=[];mArray=[];mIndex=0;
		for (var c=0;c<elementsToShow.length;c++){var item=elementsToShow[c];var xmldb=popArray[item][0];mArray[item]=[];load(item,xmldb);}
		//load('incident','/xml/roadworks/incidents/');
	}
	//Format: trivial(ie non-size related attributes) need to be classed.
	function formatCong(loc,tre,den,lat,lng,id,a){
		var out=loc+'<br />';
		out+='Trend [last 5 minutes]: '+tre+'<br />';
		out+='Traffic density is '+den+' for the current time period.';
		return out;
	}
	function formatCCTV(id,str,camimage,lat,lng,i){
		//This fits in the whole window, not the minimap text container
		var out='';var pass='';
		for(var n=0;n<str.length;n++){
			if(n>0){out+=' / ';pass+=' / ';};
			out+=str[n];
			pass+=str[n];
		}
		out+= '<br />';
		out+='<img style="width:320px;height:240px;" id="cam'+id+'" src="../' + camimage + '?rnd='+getRandoms(9999)+'"></img>';
		out+='<br /><a href="#" onclick="javascript:refreshImage(\''+id+'\',\''+camimage+'\');">Reload</a>&nbsp;&nbsp;&nbsp;<a href="#" onclick="javascript:openWindow(\''+camimage+'\',\''+pass+'\')">Open in separate window</a>'
		return out;
	}
	function formatParksmart(zone,carparkname,capacity,occupancy,fillrate,data,state,lastupdated,type,tel,address,operator,specialclosures,url,openingweekdays,closingweekdays,openingsaturdays,closingsaturdays,openingsundays,closingsundays,prices){
		var tmpstr='';var out='<div>';
		if(fillrate>0){tmpstr='Filling at the rate of ';}else{tmpstr='Emptying at the rate of ';fillrate *= (-1);}
		out+='<b>'+carparkname+' - '+zone+'</b><br />';
		out+=address+'<br />';
		out+=tel+'<br />';
		out+='<b>Status: '+state+'</b><br />';
		out+='Last updated: '+lastupdated+'<br />';
		if(data){out+='Vehicles parked: '+occupancy+'<br />';out+= 'Spaces remaining: '+(parseInt(capacity)-parseInt(occupancy))+'<br />';out+=tmpstr+fillrate+' vehicles/hour.<br />';};
		out+='Operated by: '+operator+'</div>';
		out+='<b>Opening times</b><br /><ul>';
		out+='<li>Weekdays: '+openingweekdays+'-'+closingweekdays+'</li>';
		out+='<li>Saturdays: '+openingsaturdays+'-'+closingsaturdays+'</li>';
		out+='<li>Sundays: '+openingsundays+'-'+closingsundays+'</li>';
		out+='<li>Special closures: '+specialclosures+'</li></ul>';
		out+='<b>Prices</b><br />';
		out+=prices+'<br />';
		out+='</div>';
		return out;
	}
	function sb(time){
		if(time.charAt(8)=="."){return time.substr(0,5)}else{return time};
	}
	function formatNetstops(label,stop){
		var info='NET (Phase 1) stop: '+label+'<br />';
		info+='<a href="http://www.thetram.net/times/timetable_stops_full.asp?FromStop='+stop+'" target="_blank">Get tram times from this stop...</a>';
		return info;
	}
	function formatRail(label,id){
		var info='National Rail network<br />';
		info+=label+'<br />';
		info+='<a href="http://www.livedepartureboards.co.uk/ldb/station.aspx?T='+id+'" target="_blank">View live departure board</a> (opens in external window)';
		return info;
	}
	function formatLandmarks(label,index,subtype,link){
		var info=label+'</br />';
		info+= 'Note that this marker has been chosen to represent the road entrance and/or car parking facility for directional purposes.<br />';
		if(link){info+='<a href="'+link+'" target="_blank">Open link to official website</a>'};
		return info;
	}
	function formatMatrices(legend,key,name,carriageway,cols,rows){
		var info=name+'<br />';
		cols-=1;
		for(var a=0;a<rows;a++){info+=legend.substr(a*cols,cols)+'<br />';}
		info+= carriageway + ' carriageway.';
		info+= '<br />Reason: ' + key;
		info+= '<br />Rows, cols: ' + rows + "," + cols;
		return info;
	}
	function formatNTCC(location,carriageway,valid,reason,aspect,index,until,description,addenda){
		var info='<div style="width:300px;height:auto;">'+location+'<br />';
		if(aspect){info+=aspect+'<br />'};
		if(reason){info+=reason+'<br />'};
		if(description){info+=description+'<br />'};
		if(carriageway){info+=carriageway + ' carriageway.<br />'};
		if(valid){info+='Valid from: '+valid+'<br />'};
		if(until){info+= 'Expected finish: '+until+'<br />'};
		if(addenda){info+=addenda};info+='</div>';
		return info;
	}
function formatRoadworks(id,dClass,dType,rNumber,rName,locale,ntwAreas,lDescription,aDescription,starts,finishes,wHours,dWeek,lat,lng,sev,source,cName,cPhone,j){
		var out=aDescription;
		out+=rName+', '+locale+'<br />Severity: '+sev+'<br />';
		out+=dType;
		out+='Starting:'+formatDate(returnDates(starts))+' Finishing: '+formatDate(returnDates(finishes))+'<br />';
		out+='Works untertaken by: '+source+'<br />';
		out+='Long description: ' + lDescription + '<br />Working hours: ' + wHours;
		return out;
	}
	function reset(){
		if(mapLocationStart){
			map.panTo(mapLocationStart);
		}
	}
	function showPolyLine(i){
		map.addOverlay(gLines[i]);
	}
	function hidePolyline(i){
		map.removeOverlay(gLines[i]);
	}
	function refreshImage(id,camimage){
		document.getElementById('cam'+id).src='/images/ajaxload/loaderlarge.gif';
		document.getElementById('cam'+id).src='../'+camimage+'?rnd='+getRandoms(999);
	}
	function openWindow(camimage,locations){
		var nw=window.open('/cam/?image='+camimage+'&locations='+locations,'_blank','height=300,width=300,location=no');//+camimage
	}
	function openKey(){
		var nw=window.open('/mapkey/?'+qs,'_blank','height=450,width=300,location=no,scrollbars=1');//+camimage
	}
