	/* --------------------------------------------------------
	* MMG Interactive - developed for John Holland Group.
	* John Holland CMS.
	* Copyright (C) 2004-2006 MMG interactive
	* 
	* MMG interactive versioning:
	* ---------------
	* $Revision: 1471 $
	* $Author: michael $
	* $Date: 2009-06-03 11:37:56 +1000 (Wed, 03 Jun 2009) $ 
	* 
	*/
	
	// Map code
	
	var map;
	var mappoint;
	var searchpoint;
	var markers;
	var markersArray = [];
	var nLocationID;
	var nProjectID;
	var nOfficeID;
	var bounds;
	
	function addressSearch(address,state) {
	
		if(map){
		
			var geocoder = new GClientGeocoder();
			var fullAddress = address + ',' + state + ', Australia';
			geocoder.getLatLng(
				fullAddress,
				function(searchpoint) {
				
					alert(searchpoint);
				
					if (!searchpoint) {
						document.getElementById('SearchResult').innerHTML = 'Address not found';
					} else {
						document.getElementById('SearchResult').innerHTML = '';
						map.setCenter(searchpoint, 15);
		
						var zoomLevel = map.getZoom();
						
						for(zoomLevel; zoomLevel >= 0; zoomLevel--){
							map.setZoom(zoomLevel);
		                    if(getCount() >= 3){
		                        break;
		                    }
		                }
					}
				}
			);
		}else{
			alert('no map');
		}

	}	
	
	function initProjectLocationsMap(t) {
	
		var fLatitude = -26.431228064506424;
		var fLongitude = 134.560546875;
		var nZoomLevel = 2;
		var marker;
		var markerTitle;
		var sIcon; 
		if (GBrowserIsCompatible()) {
			map = new GMap2(document.getElementById("map"));
			
			map.addControl(new GLargeMapControl());
			map.addControl(new GOverviewMapControl());	
			map.addControl(new GMapTypeControl());	
			map.setCenter(new GLatLng(fLatitude, fLongitude), nZoomLevel);
	
			var mgr = new GMarkerManager(map);
	
			GDownloadUrl('GeoMapXML.asp?Action=All&t=' + t, function(data, responseCode)	{	
			var xml = GXml.parse(data);
			markers = xml.documentElement.getElementsByTagName("marker");
			for (var i = 0; i < markers.length; i++) {
	
				nLocationID = markers[i].getAttribute("locid");	
				nProjectID = markers[i].getAttribute("projid");	
				sIcon = markers[i].getAttribute("icon");	
				mappoint = new GLatLng(parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("lng")));
				addMarker(mappoint, markers[i].getAttribute("title"), map, nLocationID, nProjectID, 0, 0, sIcon, 0,"");	
				markerTitle = markers[i].getAttribute("title");	
			}		
			
			mappoint = new GLatLng(fLatitude, fLongitude);
			map.setCenter(mappoint, 4);					
			var mapTypes = map.getMapTypes();
			map.setMapType(mapTypes[2]);		
		})				
	
		}
	};		
	
	function initOfficeLocationMap(t, nLID, d, nOID) {
	
		var fLatitude = -26.431228064506424;
		var fLongitude = 134.560546875;
		var nZoomLevel = 2;
		var marker;
		var markerTitle;
		var sIcon; 
		var sLocType;
		var sDisplay;
		
		if (GBrowserIsCompatible()) {
			map = new GMap2(document.getElementById("map"));
		
			map.addControl(new GLargeMapControl());
			map.addControl(new GOverviewMapControl());	
			map.addControl(new GMapTypeControl());	
			map.setCenter(new GLatLng(fLatitude, fLongitude), nZoomLevel);
	
			var mgr = new GMarkerManager(map);
	
			GDownloadUrl('GeoMapXML.asp?Action=OfficeLocation&OID='+nOID+'&LID='+nLID+'&t=' + t + '&D=' + d, function(data, responseCode)	{	
			var xml = GXml.parse(data);
			
			markers = xml.documentElement.getElementsByTagName("marker");
			for (var i = 0; i < markers.length; i++) {
			
				nProjectID = 0
				nLocationID = markers[i].getAttribute("locid");	
				nOfficeID = markers[i].getAttribute("offid");	
				sIcon = markers[i].getAttribute("icon");	
				sLocType = markers[i].getAttribute("loctype");	
				sDisplay = markers[i].getAttribute("disp");	
				
				mappoint = new GLatLng(parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("lng")));
				map.setCenter(mappoint, parseFloat(markers[i].getAttribute("zoom")));
				addMarker(mappoint, markers[i].getAttribute("title"), map, nLocationID, nProjectID, 1, nOfficeID, sIcon, sLocType, sDisplay);	
				markerTitle = markers[i].getAttribute("title");	
			}		
			
			if(d==1){
				map.setCenter(mappoint,15);
			}else{
				map.setCenter(mappoint,6);
			}
			var mapTypes = map.getMapTypes();
			map.setMapType(mapTypes[2]);	

		})				
	
		}
		
	};		
		
	function initOfficeMap(t) {

		var fLatitude = -26.431228064506424;
		var fLongitude = 134.560546875;
		var nZoomLevel = 2;
		var marker;
		var markerTitle;
		var sIcon;
		var sLocType;
		
		if (GBrowserIsCompatible()) {
			map = new GMap2(document.getElementById("map"));
		
			map.addControl(new GLargeMapControl());
			map.addControl(new GOverviewMapControl());	
			map.addControl(new GMapTypeControl());	
			map.setCenter(new GLatLng(fLatitude, fLongitude), nZoomLevel);
	
			var mgr = new GMarkerManager(map);
	
			GDownloadUrl('GeoMapXML.asp?Action=Office&t=' + t, function(data, responseCode)	{	
			var xml = GXml.parse(data);
			markers = xml.documentElement.getElementsByTagName("marker");
			for (var i = 0; i < markers.length; i++) {
	
				nLocationID = markers[i].getAttribute("locid");	
				nProjectID = 0
				nOfficeID = markers[i].getAttribute("offid");	
				sIcon = markers[i].getAttribute("icon");	
				sLocType = markers[i].getAttribute("loctype");	
				mappoint = new GLatLng(parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("lng")));
				addMarker(mappoint, markers[i].getAttribute("title"), map, nLocationID, nProjectID, 1, nOfficeID, sIcon, sLocType,"");	
				markerTitle = markers[i].getAttribute("title");	
			}		
			
			mappoint = new GLatLng(fLatitude, fLongitude);
			map.setCenter(mappoint, 4);					
			var mapTypes = map.getMapTypes();
			map.setMapType(mapTypes[2]);		
		})				
	
		}
	};		
			
	
	function initProjectLocationsSearchMap(t,sStates,sCapabilities,sKeywords) {
	
		var fLatitude = -26.431228064506424;
		var fLongitude = 134.560546875;
		var nZoomLevel = 2;
		var marker;
		var markerTitle;
		var sIcon = '';
		if (GBrowserIsCompatible()) {
			map = new GMap2(document.getElementById("map"));
		
			map.addControl(new GLargeMapControl());
			map.addControl(new GOverviewMapControl());	
			map.addControl(new GMapTypeControl());	
			map.setCenter(new GLatLng(fLatitude, fLongitude), nZoomLevel);
	
			var mgr = new GMarkerManager(map);
			
			GDownloadUrl('GeoMapXML.asp?Action=Search&t=' + t + '&States=' + sStates + '&Capabilities=' + sCapabilities + '&Keywords=' + sKeywords, function(data, responseCode)	{	
			var xml = GXml.parse(data);
			markers = xml.documentElement.getElementsByTagName("marker");
			
			for (var i = 0; i < markers.length; i++) {
	
				nLocationID = markers[i].getAttribute("locid");	
				nProjectID = markers[i].getAttribute("projid");	
				sIcon = markers[i].getAttribute("icon");	
				mappoint = new GLatLng(parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("lng")));
				addMarker(mappoint, markers[i].getAttribute("title"), map, nLocationID, nProjectID , 0, 0, sIcon, 0,"");	
				markerTitle = markers[i].getAttribute("title");	

			}		
			
			if(sStates == '' || sStates.lastIndexOf(",") != -1 || sIcon == ''){
				mappoint = new GLatLng(fLatitude, fLongitude);
				map.setCenter(mappoint, 4);		
			}else{
				map.setCenter(mappoint, 5);		
			}
			var mapTypes = map.getMapTypes();
			map.setMapType(mapTypes[2]);				
		})				
	
		}
	};		
	
	function initLocationsMap(t, nLID) {
	
		var fLatitude = -26.431228064506424;
		var fLongitude = 134.560546875;
		var nZoomLevel = 4;
		var marker;
		var markerTitle;
		var sIcon;
		var sDisplay;
		
		if (GBrowserIsCompatible()) {
			map = new GMap2(document.getElementById("map"));
		
			map.addControl(new GLargeMapControl());
			map.addControl(new GOverviewMapControl());		
			map.addControl(new GMapTypeControl());
			map.setCenter(new GLatLng(fLatitude, fLongitude), nZoomLevel);
	
			var mgr = new GMarkerManager(map);
			
			GDownloadUrl('GeoMapXML.asp?Action=Location&LID=' + nLID + '&t=' + t, function(data, responseCode)	{	
			var xml = GXml.parse(data);
			markers = xml.documentElement.getElementsByTagName("marker");
			for (var i = 0; i < markers.length; i++) {
	
				mappoint = new GLatLng(parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("lng")));
				sIcon = markers[i].getAttribute("icon");	
				sDisplay = markers[i].getAttribute("disp");	
				map.setCenter(mappoint, parseFloat(markers[i].getAttribute("zoom")));
				addMarker(mappoint, markers[i].getAttribute("title"), map,0,0,0, sIcon, 0, sDisplay);	
				markerTitle = markers[i].getAttribute("title");	
			}		
			var mapTypes = map.getMapTypes();
			map.setMapType(mapTypes[2]);				
	
		})				
	
		}
	};
	
	function initProjectMap(t, nPID, nMode) {
	
		var fLatitude = -26.431228064506424;
		var fLongitude = 134.560546875;
		var nZoomLevel = 4;
		var marker;
		var markerTitle;
	  var sIcon;
	  var sDisplay;
	  
		if (GBrowserIsCompatible()) {
			map = new GMap2(document.getElementById("map"));
		
			map.addControl(new GLargeMapControl());
			map.addControl(new GOverviewMapControl());		
			map.addControl(new GMapTypeControl());
			map.setCenter(new GLatLng(fLatitude, fLongitude), nZoomLevel);
	
			var mgr = new GMarkerManager(map);
			
			bounds = new GLatLngBounds();	
			
			GDownloadUrl('GeoMapXML.asp?Action=Project&PID=' + nPID + '&t=' + t, function(data, responseCode)	{	
			var xml = GXml.parse(data);
			markers = xml.documentElement.getElementsByTagName("marker");
			for (var i = 0; i < markers.length; i++) {
	
				nLocationID = markers[i].getAttribute("locid");	
				nProjectID = markers[i].getAttribute("projid");	
				sIcon = markers[i].getAttribute("icon");	
				sDisplay = markers[i].getAttribute("disp");	
				mappoint = new GLatLng(parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("lng")));
				addMarker(mappoint, markers[i].getAttribute("title"), map, nLocationID, nProjectID, nMode, 0, sIcon, 0, sDisplay);	
				markerTitle = markers[i].getAttribute("title");	
				
				bounds.extend(mappoint);		
				if(i > 0){
					map.setCenter(bounds.getCenter(),map.getBoundsZoomLevel(bounds)-1);	
				}else{
					map.setCenter(mappoint,parseFloat(markers[i].getAttribute("zoom")));	
				}					
			}
			var mapTypes = map.getMapTypes();
			map.setMapType(mapTypes[2]);	
		})				
		}
	};	
	
	function addMarker(mappoint,markerTitle,map,nLocationID,nProjectID,nMode,nOfficeID,sIcon,sLocType,sDisplay){
	
		var icon = new GIcon();
		if(sIcon == 'Project'){
			icon.image = "images/GeoMap/UserPin_R.png";	
			icon.shadow = "images/GeoMap/UserPin_Shad.png";
			icon.iconSize = new GSize(34, 40);
			icon.shadowSize = new GSize(34, 40);
			icon.iconAnchor = new GPoint(15, 38);
			icon.infoWindowAnchor = new GPoint(18, 1);				
		}
		else{
			if(sLocType == 1) {
				icon.image = "images/GeoMap/JH_LogoPin.png";	
				icon.shadow = "images/GeoMap/JH_LogoPinShad.png";
				icon.iconSize = new GSize(60, 32);
				icon.shadowSize = new GSize(60, 32);
				icon.iconAnchor = new GPoint(30, 24);
				icon.infoWindowAnchor = new GPoint(30, 1);
			}
			else if(sLocType == 2) {
					icon.image = "images/GeoMap/UserPin_R2.png";	
					icon.shadow = "images/GeoMap/UserPin_Shad.png";
					icon.iconSize = new GSize(16, 40);
					icon.shadowSize = new GSize(34, 40);
					icon.iconAnchor = new GPoint(15, 36);
					icon.infoWindowAnchor = new GPoint(14, 10);			
			}		
			else {
					icon.image = "images/GeoMap/UserPin_Y.png";	
					icon.shadow = "images/GeoMap/UserPin_Shad.png";
					icon.iconSize = new GSize(16, 40);
					icon.shadowSize = new GSize(34, 40);
					icon.iconAnchor = new GPoint(15, 36);
					icon.infoWindowAnchor = new GPoint(5, 10);			
			}
		}
		// create new marker
		var marker = new GMarker(mappoint,icon);
	
		var latitude = mappoint.lat();
		var longitude = mappoint.lng();

		map.addOverlay(marker); 
		var markerClass = new Marker(marker,markerTitle);
		markersArray.push(markerClass);
		
		GEvent.addListener(marker, 'click', function(overlay, mappoint) {
		if(sDisplay != "" && sDisplay != null)
		{
			var htmlString = "<span style=\"color:#C80024; font-size:11px; font-family: Arial, Verdana, Helvetica, sans-serif;\"><br/>" + markerTitle + "</span><style=\"color:#666666; font-size:8px; font-family: Arial, Verdana, Helvetica, sans-serif;\"><br/><br/>" + sDisplay + "</span><br/><br/><a href='Offices.asp?Action=OfficeLocation&LID=" + nLocationID + "&PID=" + nProjectID + "&D=1'>View details</a></span>";
			marker.openInfoWindowHtml(htmlString);
		}
		else if(nLocationID == 0 && nProjectID == 0)
		{
			var htmlString = "<span style=\"color: #6387A5; font-size:11px; font-family: Arial, Verdana, Helvetica, sans-serif;\"><br/>" + markerTitle + "<br/><br/>" + "Latitude: " + latitude + "<br/>Longitude: " + longitude + "</span>";
			marker.openInfoWindowHtml(htmlString);
		}
		else
		{
			if(nMode == 0)
			{
				var htmlString = "<span style=\"color: #6387A5; font-size:11px; font-family: Arial, Verdana, Helvetica, sans-serif;\"><br/>" + markerTitle + "<br/><br/><a href='Project.asp?Action=Project&LID=" + nLocationID + "&PID=" + nProjectID + "'>View Project</a></span>";
			}
			else
			{					
				if(markers.length == 1)
				{
					var htmlString = "<span style=\"color: #6387A5; font-size:11px; font-family: Arial, Verdana, Helvetica, sans-serif;\"><br/>" + markerTitle + "<br/><br/>" + "Latitude: " + latitude + "<br/>Longitude: " + longitude + "</span>";						
				}
				else if(nOfficeID > 0)
				{
					var htmlString = "<span style=\"color: #6387A5; font-size:11px; font-family: Arial, Verdana, Helvetica, sans-serif;\"><br/>" + markerTitle + "<br/><br/><a href='Offices.asp?Action=OfficeLocation&LID=" + nLocationID + "&OID=" + nOfficeID + "'>View all locations</a></span>";
				}
				else
				{
					var htmlString = "<span style=\"color: #6387A5; font-size:11px; font-family: Arial, Verdana, Helvetica, sans-serif;\"><br/>" + markerTitle + "<br/><br/><a href='Project.asp?Action=Location&LID=" + nLocationID + "&PID=" + nProjectID + "'>View this location</a></span>";
				}
			}
			marker.openInfoWindowHtml(htmlString);			
		}
		}
		);

	}
	
	function Marker(marker,markerTitle) {
		this.marker = marker;
		this.description = markerTitle;
	}
	
	function goToMarker(idx){
		if( idx >= 0 && idx < markersArray.length ){
			var location = markersArray[idx].marker.getLatLng();
			map.panTo(location, map.getZoom());
		}
	}
	
	function removeMarker(idx){
		if( idx >= 0 && idx < markersArray.length ){

			map.removeOverlay(markersArray[idx].marker);
			markersArray.splice(idx,1);	
		}
	}
	
	function removeAllMarkers(){
		for (var i = 0; i < markersArray.length; i++) {
			map.removeOverlay(markersArray[i].marker);
		}
	
		markersArray = new Array();
	}
	
	
	// function to trim string
	function trim(word){
		while (word.substring(0,1) == ' ')
			word = word.substring(1, word.length);
	
		while (word.substring(word.length-1, word.length) == ' ')
			word = word.substring(0,word.length-1);
	
		return word;
	}
	
	function getCount() {
	
		var bounds = map.getBounds();
		var maxX = bounds.getNorthEast().lng();
		var minX = bounds.getSouthWest().lng();
		var maxY = bounds.getNorthEast().lat();
		var minY = bounds.getSouthWest().lat();
		var count = 0;
		
		for (var x = 0; x < markersArray.length; x++) {
		
			if (markersArray[x].getPoint().lng() <= maxX && markersArray[x].getPoint().lng() >= minX) {
				if (markersArray[x].getPoint().lat() <= maxY && markersArray[x].getPoint().lat() >= minY) {
					count++;
				}
			}
		}
		
		return count;
	}
	
	
	function handleErrors(){
		if (gdir.getStatus().code == G_GEO_UNKNOWN_ADDRESS)
			alert("No corresponding geographic location could be found for one of the specified addresses. This may be due to the fact that the address is relatively new, or it may be incorrect.\nError code: " + gdir.getStatus().code);
		else if (gdir.getStatus().code == G_GEO_SERVER_ERROR)
			alert("A geocoding or directions request could not be successfully processed, yet the exact reason for the failure is not known.\n Error code: " + gdir.getStatus().code);	   
		else if (gdir.getStatus().code == G_GEO_MISSING_QUERY)
			alert("The HTTP q parameter was either missing or had no value. For geocoder requests, this means that an empty address was specified as input. For directions requests, this means that no query was specified in the input.\n Error code: " + gdir.getStatus().code);
	//  else if (gdir.getStatus().code == G_UNAVAILABLE_ADDRESS)  <--- Doc bug... this is either not defined, or Doc is wrong
	//  alert("The geocode for the given address or the route for the given directions query cannot be returned due to legal or contractual reasons.\n Error code: " + gdir.getStatus().code);	     
		else if (gdir.getStatus().code == G_GEO_BAD_KEY)
			alert("The given key is either invalid or does not match the domain for which it was given. \n Error code: " + gdir.getStatus().code);
		else if (gdir.getStatus().code == G_GEO_BAD_REQUEST)
			alert("A directions request could not be successfully parsed.\n Error code: " + gdir.getStatus().code);	    
		else alert("An unknown error occurred.");	   
	};
	
	function onGDirectionsLoad(){ 
		// Use this function to access information about the latest load()
		// results.
		// e.g.
		// document.getElementById("getStatus").innerHTML = gdir.getStatus().code;
		// and yada yada yada...
	};
	
	function addressSearch(address,state) {
	
		var geocoder = new GClientGeocoder();
		
		var reasons=[];
		reasons[G_GEO_SUCCESS]            = "Success";
		reasons[G_GEO_MISSING_ADDRESS]    = "Missing Address: The address was either missing or had no value.";
		reasons[G_GEO_UNKNOWN_ADDRESS]    = "Unknown Address:  No corresponding geographic location could be found for the specified address.";
		reasons[G_GEO_UNAVAILABLE_ADDRESS]= "Unavailable Address:  The geocode for the given address cannot be returned due to legal or contractual reasons.";
		reasons[G_GEO_BAD_KEY]            = "Bad Key: The API key is either invalid or does not match the domain for which it was given";
		reasons[G_GEO_TOO_MANY_QUERIES]   = "Too Many Queries: The daily geocoding quota for this site has been exceeded.";
		reasons[G_GEO_SERVER_ERROR]       = "Server error: The geocoding request could not be successfully processed.";		
		
		if(state != 'All'){
			address += ',' + state + ', Australia';
		}else{
			address += ',,';
		}
		geocoder.getLatLng(address, function(searchpoint) {
		
				if (!searchpoint) {
           alert('No location found matching your search criteria, please search again');
				} else {
					document.getElementById('SearchResult').innerHTML = '';
					map.setCenter(searchpoint, 15);
				}
			}
		);
	}		
