// Define Globals
var g_map;
var g_Bounds;
var g_oGeocoder;
var g_oOpenWindow;
var g_aryPins = new Array();
var g_iTimeout = 0;

google.load("maps", "2");
google.setOnLoadCallback(initMap);

function Trim(sString)
{
	return sString.replace(/^\s+/g, '').replace(/\s+$/g, '');
}

function initMap() 
{
	// Initialise a map
	g_map = new google.maps.Map2(document.getElementById("map"));
	
	// Center the map to show the UK
	g_map.setCenter(new google.maps.LatLng(55,-3.4), 5);
	
	// Style the map
	g_map.addControl(new google.maps.LargeMapControl());
	g_map.addControl(new google.maps.MapTypeControl(true));
	g_map.addControl(new google.maps.ScaleControl(300));
	g_map.enableContinuousZoom();
	g_map.enableDoubleClickZoom();
	//g_map.enableScrollWheelZoom();
	
	g_map.hideControls();
	google.maps.Event.addListener(g_map, "mouseover", function(){ g_map.showControls(); });
	google.maps.Event.addListener(g_map, "mouseout", function(){ g_map.hideControls(); });
	google.maps.Event.addListener(g_map, "moveend", function() { loadMarkers(); });
	
	google.maps.Event.addListener(g_map, "infowindowclose", closeInfo);
	
	g_Bounds = new google.maps.LatLngBounds();
	g_oGeocoder = new google.maps.ClientGeocoder();
	g_oGeocoder.setBaseCountryCode('GB');
	
	window.onunload = google.maps.Unload;
	document.getElementById("searchTerm").value="";
	
	return;
}

function addMarkers(oFrm)
{
	if (Trim(oFrm.postCode.value).length == 0 && Trim(oFrm.searchTerm.value).length == 0)
	{
		alert("Please enter either a postcode or school name to search for.");
		return false;
	}
	else if (Trim(oFrm.postCode.value).length > 0)
		g_oGeocoder.getLatLng(oFrm.postCode.value + ", UK", getLngLat);
	else if (Trim(oFrm.searchTerm.value).length > 0)
	{
		var sURL = "maps/getmaps.cfm?school=" + escape(oFrm.searchTerm.value);
		google.maps.DownloadUrl(sURL, getSchoolNameSearch);		
	}
		
	return;
}

function getLngLat(oLocation)
{
	if (!oLocation)
        alert(document.getElementById("postCode").value + " not found");
	else
        g_map.setCenter(oLocation, 13);
	
	return;
}

function loadMarkers()
{
	var oBounds = g_map.getBounds();
	var oSouthWest = oBounds.getSouthWest();
	var oNorthEast = oBounds.getNorthEast();
	var sURL = "maps/getmaps.cfm?span=" + oSouthWest.lng() + "," + oNorthEast.lng() + "," + oSouthWest.lat() + "," + oNorthEast.lat();
	// Now get what's around it
	google.maps.DownloadUrl(sURL, getMarkers);
	
	return;
}

function getMarkers(sFile, sResponse)
{
	var aryRecords = Trim(sFile).split("\n");
	var aryLocation = new Array();
	var point;
	var oPin;
	var bHTC = false;
	var oIcon = new google.maps.Icon(G_DEFAULT_ICON);
	oIcon.image = "http://www.google.com/intl/en_us/mapfiles/ms/micons/blue-dot.png";
	oIcon.iconSize = new google.maps.Size(32, 32);
	
	// We should drop all current pins from the map
	if (g_oOpenWindow == null)
		g_map.clearOverlays();
	
	// Now include other pins around it
	for (var i=0; i<aryRecords.length; i++)
	{
		aryLocation = Trim(aryRecords[i]).split(String.fromCharCode(7));
		if (aryLocation.length > 1)
		{
			if (aryLocation[4] == 1)
				markerOptions = {title:aryLocation[3]};
			else
				markerOptions = {title:aryLocation[3], icon:oIcon};
			
			oPin = new google.maps.Marker(new google.maps.LatLng(aryLocation[1],aryLocation[0]), markerOptions);
			g_map.addOverlay(oPin);
			oPin.html = aryLocation[5];
			google.maps.Event.addListener(oPin, "click", openInfo);
		}
	}
	
	return;
}

function openInfo()
{
	//var myHtml = "<b>" + this.getTitle() + "</b><br />";
	var myHtml = this.html; 
	g_oOpenWindow = this;
	g_map.openInfoWindowHtml(this.getLatLng(), myHtml);
	return;
}

function closeInfo()
{
	g_oOpenWindow = null;
	
	return;
}

function getSchoolNameSearch(sFile, sResponse)
{
	var aryData = sFile.split(",");
	g_map.setCenter(new google.maps.LatLng(aryData[0],aryData[1]), 13);
	
	return;
}

