var GMap,                       // holds google map object
    GMapBounds,                 // reference to boundry object
    MarkerArray = new Array(),  // list of map markers
    WindowArray = new Array(),  // window content array corresponding to marker array
    MarkerCount = 0,            // number of markers on map
    LastMarker = 0;             // last marker added to map

// Default setting values
var settings = {
    MapContainer: "map_canvas", 
    CenterLat: 54.136696,       // starting map center lat, default is uk
    CenterLong: -3.647461,      // starting map center long, default is uk
    CenterZoom: 15,              // starting map zoom level
    ShowLargeMapControl: true,  // show/hide large map control
    ShowMapTypeControl: true    // show/hide map type control
};

// Initialise google map
function InitMap(options){

    // Merge options into settings
    jQuery.extend(settings, options);

    // Make sure browser is able to handle google maps
	if (GBrowserIsCompatible()){
		
		// Call unload to make sure we start fresh
		GUnload();
		
		// Instantiate google map
		GMap = new GMap2(document.getElementById(settings.MapContainer));
		if (settings.ShowLargeMapControl) GMap.addControl(new GLargeMapControl());
        if (settings.ShowMapTypeControl)  GMap.addControl(new GMapTypeControl());
		
		// Set map center
		var point = new GLatLng(settings.CenterLat, settings.CenterLong); 
		GMap.setCenter(point, settings.CenterZoom);
		
		// Prepare zoom boundry
		GMapBounds = new GLatLngBounds;
		
		// Bind google map unload function
		$(window).unload(function(){ GUnload(); });
	}
}


function AddMarker(Id, Name, Content, Lat, Long){

    // Make sure map boundry includes new marker
	ExtendBound(Lat, Long);

    // Setup marker
	var MarkerPoint = new GLatLng(Lat, Long);
	var MarkerOptions = { title:Name };
	var NewMarker = new GMarker(MarkerPoint, MarkerOptions);
	
	// Add marker to map
	GMap.addOverlay(NewMarker);
	
	
	// Setup marker info window
    /*
	var MapLink = document.getElementById("MapLink" + Id);
	
	if (MapLink){
		var Header = '<a href="' + MapLink.href + '">' + Name + '</a>';
	}else{
    	var Header = "<strong>" + Name + "</strong>";
	}
    */
    var Header = "<strong>" + Name + "</strong>";
    
	var InfoWindowContent = "<div class='InfoWindow'><h4>" + Header + "</h4><div class='body'>" + Content + "</div></div>";

	// Bind marker window to show to click event
	GEvent.addListener(NewMarker, "click", function() {
		NewMarker.openInfoWindowHtml(InfoWindowContent);
    });
	
	// Store marker for later use
	MarkerArray[Id] = NewMarker;
	WindowArray[Id] = InfoWindowContent;
	MarkerCount++;
	LastMarker = NewMarker; // Store last marker, if only 1 marker present map will centre on this point
}

// Activate InfoWindow for given marker
function ActivateInfoWindow(Id){
	MarkerArray[Id].openInfoWindowHtml(WindowArray[Id]);
}

// Extend map boundry, giving all points a little breathing space
function ExtendBound(Lat, Long){
	GMapBounds.extend(new GLatLng(Lat-0.01, Long-0.01));
	GMapBounds.extend(new GLatLng(Lat+0.01, Long+0.01));
}

function ShowMarkerWindow(Id)
{
    if (undefined != MarkerArray[Id])
    {
        MarkerArray[Id].openInfoWindowHtml(WindowArray[Id]);
    }
}

