window.addEvent('domready', function() {
	if($$(".gmap").length > 0){
		$$(".gmap").each(function(gmap, i) {
			if(i == 0){
				var props = gmap.getProperty("data").split("~");
				var gmkey = props[4];
				var gscr = new Element("script", {"type":"text/javascript", "src":"http://www.google.com/jsapi?key="+gmkey+"&callback=LoadMaps"});
				gscr.injectAfter($E("head"));
			}			
		});
	}
});

function LoadMaps()
{	
	google.load("maps", "2", {"callback" : InitMaps});
}
function InitMaps()
{
	$$(".gmap").each(function(gmap,i){
		//grab all the map properties from the data property
		var props = gmap.getProperty("data").split("~");
		var address = props[0];
		var postcode = props[1];
		var zoom = parseInt(props[2]);
		var driving = props[3];
		var ll = props[5];
		var title  = gmap.getProperty("title");

		var apoint;
		var geocoder = new GClientGeocoder();
		geocoder.getLatLng(address+","+postcode,function(point){
			if(!point)
			{
				var lls = ll.split(",")
				point = new GLatLng(lls[0], lls[1])
			}
			if(point){
				SetMap(gmap, point, title, zoom, driving, address+","+postcode);
			}else{
				gmap.remove();
			}
		});		
	});
}
function SetMap(gmap, point, title, zoom, driving, address){

	var map = new google.maps.Map2(gmap);
	var mapTypes = map.getMapTypes();

	map.setCenter(point, zoom, mapTypes[0]);
    map.addControl(new GLargeMapControl());
    map.addControl(new GMapTypeControl());

	if(driving == "1" && (address.length > 3)){
		var bubble = document.createElement("p");
		bubble.setAttribute("align", "left");
		bubble.setAttribute("style", "font-family:arial");
		bubble.innerHTML = "<b>"+title+"</b><br />Get directions from:<br /><input type=\"text\" id=\"from_location\" /><input type=\"button\" value=\"Go\" onclick=\"window.open('http://maps.google.co.uk/maps?f=d&hl=en&saddr=' + document.getElementById('from_location').value + '&daddr="+escape(address)+"');\"/>";          		
		map.openInfoWindow(map.getCenter(), bubble);
	}
	else{
		map.addOverlay(new GMarker(point));
	}
}
