var MAP;
var CARPARKS = new Array();
var USERPOSTCODE="Your Postcode";
var DIRECTIONS;
var DIRECTIONSCLICK;

function addDirections() {
		MAP.getDirections = 1;

    DIRECTIONS = new GDirections(MAP, document.getElementById("directions"));
    var reasons = [];
    reasons[G_GEO_SUCCESS] = "Success";
    reasons[G_GEO_MISSING_ADDRESS] = "Missing Address: The address was either missing or had no value.";
    reasons[G_GEO_UNKNOWN_ADDRESS] = "Unknown Address:  No corresponding geographic location could be found for the specified address.";
    reasons[G_GEO_UNAVAILABLE_ADDRESS] = "Unavailable Address:  The geocode for the given address cannot be returned due to legal or contractual reasons.";
    reasons[G_GEO_BAD_KEY] = "Bad Key: The API key is either invalid or does not match the domain for which it was given";
    reasons[G_GEO_TOO_MANY_QUERIES] = "Too Many Queries: The daily geocoding quota for this site has been exceeded.";
    reasons[G_GEO_SERVER_ERROR] = "Server error: The geocoding request could not be successfully processed.";
    reasons[G_GEO_BAD_REQUEST] = "A directions request could not be successfully parsed.";
    reasons[G_GEO_MISSING_QUERY] = "No query was specified in the input.";
    reasons[G_GEO_UNKNOWN_DIRECTIONS] = "The GDirections object could not compute directions between the points.";
    GEvent.addListener(DIRECTIONS, "error", function () {
			var code = DIRECTIONS.getStatus().code;
			var reason = "Code " + code;
			if (reasons[code]) {reason = reasons[code];}
			alert("Failed to obtain directions, " + reason);}
		);
		GEvent.addListener(DIRECTIONS, "load", function () {
				addContent(document.getElementById('directions'),document.getElementById('directions').innerHTML + DIRECTIONSCLICK);
																										 }
		);
}
function loadData(isOnLoad){
	var bnds = MAP.getBounds();
	sw = bnds.getSouthWest();
	ne = bnds.getNorthEast();
	q="sw_lat="+sw.lat() +"&sw_lon="+sw.lng()+"&ne_lat="+ne.lat() +"&ne_lon="+ ne.lng();
																																																																																		
	if(isOnLoad){q+="&isOnLoad=1"}
	var request = GXmlHttp.create();
	request.onreadystatechange = function() {
		if (request.readyState == 4) {
			//temp = request.responseText.substr(0,250);
			//GLog.write(temp)
			//alert(eval("(" + request.responseText + ")"));
			if(request.responseText)
			{
			  unserialize(eval("(" + request.responseText + ")"));
			}
		}
	};
	request.open("GET", "get_map_car_parks.php?"+q, true);
	request.send(null);
}
function unserialize(rawData){
	start = CARPARKS.length;
	if(rawData.carparks){
		for(var i=0; i<rawData.carparks.length; i++){
			CARPARKS[start+i]=toCarparkObject(rawData.carparks[i],start+i);
		}
		
	}
}


function addContent(el,elContent){
	el = elContent;
}

function getDirections(ref) {
	USERPOSTCODE = document.getElementById("saddr").value;
	if(/^[A-Z]{1,2}[\d]{1,2}([A-Z])?\s?[\d][A-Z]{2}$/i.test(USERPOSTCODE))
	{
		/^[A-Z]{1,2}[\d]{1,2}([A-Z])?\s?[\d][A-Z]{2}$/i.exec(USERPOSTCODE);
		DIRECTIONSCLICK= "<b>" + CARPARKS[ref].name  + "</b> ("+CARPARKS[ref].airport+") <A HREF='http://www.cheap-parking.net/pricechecker.php?ap="+ CARPARKS[ref].airport + "&noinst=1' target=_top>Click for the <B>LATEST PRICES</B></A>"
		var lookup = new GClientGeocoder;
		lookup.setBaseCountryCode("uk");
		MAP.isDrawingRoute = 1;
		MAP.closeInfoWindow();
		addContent(document.getElementById('directions'),DIRECTIONSCLICK)
		lookup.getLatLng(USERPOSTCODE, function (point) {DIRECTIONS.load("from: @" + point.lat() + "," + point.lng() + " to: @" + CARPARKS[ref].marker.getPoint().lat() + "," + CARPARKS[ref].marker.getPoint().lng());}, {getPolyline:true});
		document.getElementById("directions").style.height = "256px";
		addContent(document.getElementById('directions'),DIRECTIONSCLICK);
		
	}
	else
	{
		alert("Unknown Postcode\n\nNo corresponding geographic location could be found for the specified address.");
	}

}
function toCarparkObject(carpark,ref){
	
//$row['id'],$row['Name'], $row['Town'], $row['County'], $row['Lat'], $row['Long']
	carpark.ref = ref;
	carpark.id = carpark[0];
	carpark.name = carpark[1];
	carpark.town = carpark[2];
	carpark.county = carpark[3];
	carpark.latLng=new GLatLng(carpark[4],carpark[5]);
	carpark.airport=carpark[6]
	carpark.marker = new GMarker(carpark.latLng, MAP.defaultIcon); 
	carpark.marker.dir_to = carpark.marker.dir_std = "";
	if(MAP.getDirections){
		carpark.marker.dir_to = "<br>Car Park Directions <form action=\"javascript:getDirections("+carpark.ref +")\" style=\"padding:0;margin:0;\">";
  
 		carpark.marker.dir_std = "<br><a href=\"javascript:toD(" + carpark.ref + ")\">Car Park Directions </a>";
	}
	carpark.marker.html = "<b>" + carpark.name + "</b><BR>"+carpark.town+", "+carpark.county+"<BR><A HREF='http://www.cheap-parking.net/pricechecker.php?ap="+carpark.airport + "&noinst=1' target=_top>Check Latest Prices</A>";
	
	//carpark.marker = new GMarker(carpark.latLng, MAP.defaultIcon);
	GEvent.addListener(carpark.marker, "click", function() {
			carpark.marker.openInfoWindowHtml(carpark.marker.html+carpark.marker.dir_std);  
			
	}); 
	MAP.addOverlay(carpark.marker);
	
	return carpark;
}
 
function toD(ref){
CARPARKS[ref].marker.openInfoWindowHtml(CARPARKS[ref].marker.html+CARPARKS[ref].marker.dir_to+ "<input type=\"text\" SIZE=12 MAXLENGTH=40 name=\"saddr\" id=\"saddr\" value=\"" + USERPOSTCODE+" \" /><INPUT value=\"Get Directions\" TYPE=\"SUBMIT\"></FORM>");
}

function buildIcon(image,w,h){
	var icon = new GIcon();
	var midPt =	new GPoint(w/2, h/2);
	icon.image = image;
	icon.iconSize = new GSize(w, h);
	icon.iconAnchor = midPt;
	icon.infoWindowAnchor = midPt;
	icon.infoShadowAnchor = midPt;
	return icon;
}
function getCookie(name){
	var prefix = name+"=";
	var begin = document.cookie.indexOf(prefix);
	var end = document.cookie.indexOf("~", begin);
	if (begin == -1 || end == -1 ) {
			return 0;
	}
	return (document.cookie.substring(begin + prefix.length, end)).split("$");

}
function setCookie(v1,v2){
	document.cookie = "mapInfo="+MAP.getCenter().lat()+"$"+MAP.getCenter().lng()+"$"+MAP.getZoom()+"~; path=/";
}
function GdoLoad(){ 
	if (GBrowserIsCompatible() && location.protocol == "http:" && document.getElementById("parking"))
	{	
		document.getElementById("parking").style.backgroundImage = "none";

		MAP = new GMap2(document.getElementById("parking"));
		MAP.defaultIcon = buildIcon("../i/maps/parking.png",11,11);
		MAP.defaultCenter = new GLatLng(51.1371015, -0.157585144);
		MAP.addControl(new GSmallMapControl(),new GControlPosition(G_ANCHOR_BOTTOM_RIGHT)); //GLargeMapControl
		MAP.enableDoubleClickZoom()

		MAP.setCenter(MAP.defaultCenter,11,G_NORMAL_MAP);
		MAP.isDrawingRoute = 0;
		MAP.getDirections = 0;
		if(MAP.getDirections){
			addDirections();
		}
		//loadData(true);	
		
		GEvent.addListener(MAP, 'dragend', function(){																				
			if(MAP.zoomed){
				MAP.zoomed = 0;
			}
			else{
				loadData();
			}
    });
		GEvent.addListener(MAP, 'zoomend', function(oldLevel, newLevel){
			MAP.zoomed =1;
			if(!MAP.isDrawingRoute){
				if(oldLevel>newLevel){
				 loadData();
				}
			}
			else{
				MAP.isDrawingRoute = 0;
			}
		});
		
		unserialize({"carparks":[[13,"APH Gatwick","Copthorne","West Sussex",51.1421,-0.0754,"LGW"],[17,"BCP Gatwick Parking","Crawley","West Sussex",51.1427,-0.2111,"LGW"],[18,"BCP Meet and greet","Crawley","West Sussex",51.1427,-0.211151,"LGW"],[33,"Cophall Farm Parking","Copthorne","West Sussex",51.1496,-0.101112,"LGW"],[36,"Courtlands Parking","Horley","Surrey",51.1565,-0.1504,"LGW"],[52,"Gatwick Holiday Parking","Horley","Surrey",51.1558,-0.2123,"LGW"],[53,"Gatwick Parking PAS","Crawley","West Sussex",51.1387,-0.166989,"LGW"],[67,"Maple Manor Parking","Stansted","Surrey",51.1608,-0.1903,"MAN"],[73,"NCP Flightpath Gatwick","Crawley","West Sussex",51.1608,-0.1903,"LGW"],[84,"Parking Express Gatwick","Horley","West Sussex",51.1608,-0.1903,"LGW"],[85,"Parking Express Summer Special","Gatwick","West Sussex",51.1608,-0.1903,"LGW"],[86,"Parking unlimited","Crawley","West Sussex",51.1548,-0.179317,"LGW"],[100,"Russ Hill Budget Parking","Charlwood","Surrey",51.1489,-0.2412,"LGW"],[108,"Silver Lady Parking","Crawley","West Sussex",51.1333,-0.1769,"LGW"]]})
	}
}

function anotherLoad(){
	
	
	setTimeout("GdoLoad()",500);
}
