window.onload = function () {
	map();
};

function map() {

	// If Google Maps is incompatiable, stop executing function
	if (!GBrowserIsCompatible()) return;

	// Instantiate new map in #map_map div
	var map = new GMap2(document.getElementById('map_canvas'));

	// Define map controls and set centre point and zoom level
	map.addControl(new GLargeMapControl());
	map.addControl(new GMapTypeControl());
	map.setCenter(new GLatLng(51.58016937758778, 0.183400000089617), 16);

	// Determine z-index of markers
	function importanceOrder(marker, b) {
		return GOverlay.getZIndex(marker.getPoint().lat()) + (marker.importance * 1000000);
	}

	// Grove & Dean Logo icon
	var logoIcon = new GIcon();
	logoIcon.image = '../images/map/marker-logo.png';
	logoIcon.iconSize = new GSize(57, 39);
	logoIcon.shadowSize = new GSize(0, 0);
	logoIcon.iconAnchor = new GPoint(0, 0);
	logoIcon.infoWindowAnchor = new GPoint(0, 0);
	logoIcon.infoShadowAnchor = new GPoint(0, 0);

	// Car Park Icon
	var carParkIcon = new GIcon(logoIcon);
	carParkIcon.image = '../images/map/marker-parking.gif';
	carParkIcon.iconSize = new GSize(18, 18);

	// Train Station Icon
	var trainStationIcon = new GIcon(carParkIcon);
	trainStationIcon.image = '../images/map/marker-train-station.gif';

	logoMarkerOptions					= { icon:logoIcon,					zIndexProcess:importanceOrder };
	carParkMarkerOptions			= { icon:carParkIcon,				zIndexProcess:importanceOrder };
	trainStationMarkerOptions	= { icon:trainStationIcon,	zIndexProcess:importanceOrder };

	// Process JSON data
	function ProcessJson(jsonStr) {
		var jsonData = eval('(' + jsonStr + ')');

		// Configure, position and plot the markers based on JSON data
		for (var j = 0; j < jsonData.markers.length; j++) {
			var markerJson	= jsonData.markers[j];
			var point				= new GLatLng(markerJson.latitude, markerJson.longitude);
			var markerObj		= eval('new GMarker(point, ' + markerJson.marker + 'MarkerOptions)');

			// Assign zIndex, layering the marker above all others if it's the G&D logo
			markerObj.importance = (markerJson.marker === 'logo') ? 2 : 1;

			// Plot marker
			map.addOverlay(markerObj);
		}
	}

	// Fetch JSON data and process
	GDownloadUrl("../js/markers.json.js", ProcessJson);
}