// LOAD MAPS API......
	google.load("maps", "2",{"other_params":"sensor=false"});
	 
 // DECLARATIONS
	HEDLOC.markers = [];
	HEDLOC.markerCount = 0;
	HEDLOC.markerOpts = {};
	HEDLOC.createIcon = function ()
	{
		var icon = new GIcon(G_DEFAULT_ICON);
		icon.image = "./imgs/hedloc_map_icon.png";
		icon.shadow = "./imgs/hedloc_map_icon_shadow.png";
		//icon.transparent = "./imgs/hedloc_map_icon_trans.png";
		icon.imageMap = [9 ,8 ,
						 34,8 ,
						 34,33,
						 9 ,33 ];
		//icon.iconSize = new GSize(54.0, 64.0);
		icon.iconSize = new GSize(40.5, 48.0);
		//icon.shadowSize = new GSize(88.0, 64.0);
		icon.shadowSize = new GSize(66.0, 48.0);
		//icon.iconAnchor = new GPoint(27.0, 64.0);
		icon.iconAnchor = new GPoint(20.25, 48.0);
		//icon.infoWindowAnchor = new GPoint(27.0, 32.0);
		icon.infoWindowAnchor = new GPoint(20.25, 24.0);
		HEDLOC.markerOpts = { "icon" : icon };
	}
	
	HEDLOC.initialise = function ()
	{
		HEDLOC.createIcon();
		var c = HEDLOC.config;
		map = new GMap2(document.getElementById(c["MAP_DIV_ID"]));

        map.enableScrollWheelZoom();
		
		var uiOptions = map.getDefaultUI();
		uiOptions.controls.scalecontrol = c["SHOW_SCALE"];
		
		if (c["DROP_DOWN_CONTROL"]) {
			uiOptions.controls.maptypecontrol = false;
			map.addControl(new GMenuMapTypeControl());
		} else {
			uiOptions.controls.maptypecontrol = true;
		}
		
		map.setUI(uiOptions);
		
		if (!c["SHOW_HYBRID"])
			map.removeMapType(G_HYBRID_MAP);
			
		if (!c["SHOW_SATELLITE"])
			map.removeMapType(G_SATELLITE_MAP);
			
		if (!c["SHOW_TERRAIN"])
			map.removeMapType(G_PHYSICAL_MAP);
		
		var mapTypes = map.getMapTypes(); 

		for (var i=0; i<mapTypes.length; i++) { 
	 // Set the minimum and maximum zoom levels
			mapTypes[i].getMinimumResolution = function() {return c["MIN_ZOOM"];} 
			mapTypes[i].getMaximumResolution = function() {return c["MAX_ZOOM"];} 
			
		}
		
		map.setCenter(new GLatLng(c["CENTRE_LAT"],c["CENTRE_LNG"]),c["DEFAULT_ZOOM"]);
		HEDLOC.addMarkers();
	}
	
	HEDLOC.centreMap = function (mArray) {
		var	c = HEDLOC.config;
		var bounds = new GLatLngBounds();
		for (var i = 0; i < mArray.length; i++)
			bounds.extend(mArray[i].getLatLng());

		var zoom = map.getBoundsZoomLevel(bounds);
		//zoom = zoom - 1;
		zoom = (zoom > c["MAX_ZOOM"]) ? c["MAX_ZOOM"] : zoom;
		zoom = (zoom < c["MIN_ZOOM"]) ? c["MIN_ZOOM"] : zoom;
		map.setCenter(bounds.getCenter(), zoom);
    }
	
	HEDLOC.addMarkers = function ()
	{
		for (i=0 ; i<HEDLOC.markerData.length ; i++)
		{
			var curr = HEDLOC.markerData[i];
			HEDLOC.markers[HEDLOC.markerCount] = HEDLOC.getMarker(curr)
			map.addOverlay(HEDLOC.markers[HEDLOC.markerCount]);
			HEDLOC.markerCount++;
		}
		if (HEDLOC.config["FIT_WINDOW"])
			HEDLOC.centreMap(HEDLOC.markers);
	}
	
	HEDLOC.getMarker = function (obj)
	{
		var marker = new GMarker(new GLatLng(obj["lat"],obj["lng"]),HEDLOC.markerOpts);
		var info = "<div class=\"maps_info_window\">";
		   info += "<div class=\"maps_info_window_title\">" + obj["title"] + "</div>";
		   info += "<div class=\"maps_info_window_address\">" + obj["address"] + "</div>";
		   info += "</div>";
		
		var func = function (m,i) {
				return function () {
					//moving it off centre to fit it better on the page
					var cent = new GLatLng(m.getLatLng().lat()+1,m.getLatLng().lng());
					map.setCenter(cent,HEDLOC.config["CLICK_ZOOM_LEVEL"]);
					m.openInfoWindowHtml(i);
				};
			} (marker,info);
		
		GEvent.addListener(marker, "click",func);
		return marker;
	}
	
	HEDLOC.setFocus = function (i)
	{
		GEvent.trigger(HEDLOC.markers[i],"click");
	}
	
 // SET ONLOAD CALLBACK.....
	google.setOnLoadCallback(HEDLOC.initialise);
