//<![CDATA[
if (GBrowserIsCompatible()) {
	// this variable will collect the html which will eventualkly be placed in the sidebar
	var sidebar_html = "";

	// arrays to hold copies of the markers and html used by the sidebar
	// because the function closure trick doesnt work there
	var gmarkers = [];
	var htmls = [];
	var markerCounter = 0;

	function urlDecode(txt) {
		var re = /\&lt\;/g;
		txt = txt.replace(re, '<');
		var re = /\&gt\;/g;
		txt = txt.replace(re, '>');
		var re = /\&quot\;/g;
		txt = txt.replace(re, '"');
		var re = /\&amp\;/g;
		txt = txt.replace(re, '&');
		return txt;
	}

	function clearMap(){
		map.clearOverlays();
		gmarkers.length=0;
		htmls.length=0;
		markerCounter=0;
	}

	// A function to create the marker and set up the event window
	function createMarker(point,markerID,html,icon) {
		if(icon){
			var marker = new GMarker(point,icon);
		}
		else{
			var marker = new GMarker(point);
		}
		marker.html=html;
		GEvent.addListener(marker, "click", function() {
			//marker.openInfoWindowHtml(urlDecode(html));
			marker.openInfoWindowHtml(urlDecode(marker.html));
		});
		marker.markerID=markerID;
		// save the info we need to use later for the sidebar
		gmarkers[markerCounter] = marker;
		htmls[markerCounter] = html;
		markerCounter++;
		return marker;
	}


	// This function picks up the click and opens the corresponding info window
	function markerClick(markerID) {
		for(var i=0;i<gmarkers.length;i++){
			if(gmarkers[i].markerID==markerID){
				gmarkers[i].openInfoWindowHtml(urlDecode(htmls[i]));
				break;
			}
		}
	}
	
	function createIcon(){
			var icon = new GIcon();
			icon.image = "http://labs.google.com/ridefinder/images/mm_20_red.png";
			icon.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
			icon.iconSize = new GSize(12, 20);
			icon.shadowSize = new GSize(22, 20);
			icon.iconAnchor = new GPoint(6, 20);
			icon.infoWindowAnchor = new GPoint(5, 1);
			return icon;
            /*
			var icon = new GIcon();
			icon.image = "../images/marker_briefcase.png";
			icon.shadow = "../images/marker_man_shadow.png";
			icon.iconSize = new GSize(17, 30);
			icon.shadowSize = new GSize(30, 30);
			icon.iconAnchor = new GPoint(6, 30);
			icon.infoWindowAnchor = new GPoint(5, 1);
			return icon;
			*/

			/*
			var icon = new GIcon();
			icon.image = "marker_flag.png";
			icon.shadow = "marker_flag_shadow.png";
			icon.iconSize = new GSize(30, 36);
			icon.shadowSize = new GSize(30, 36);
			icon.iconAnchor = new GPoint(6, 36);
			icon.infoWindowAnchor = new GPoint(5, 1);
			return icon;
			*/
		}

	function centerMap(minLat,maxLat,minLon,maxLon){
		if(minLat==180){
			maxLat=50;
			minLat=30;
			minLon=-110;
			maxLon=-80
		}
		var latSpan=parseFloat(maxLat)-parseFloat(minLat);
		var lonSpan=parseFloat(maxLon)-parseFloat(minLon);
		var span=Math.max(latSpan,lonSpan);

		var mapZoom;
		if(span<0.1){
			mapZoom=12;
		}
		else if(span<0.2){
			mapZoom=11;
		}
		else if(span<0.5){
			mapZoom=10;
		}
		else if(span<1){
			mapZoom=9;
		}
		else if(span<2){
			mapZoom=8;
		}
		else if(span<5){
			mapZoom=7;
		}
		else if(span<10){
			mapZoom=6;
		}
		else if(span<20){
			mapZoom=5;
		}
		else if(span<50){
			mapZoom=4;
		}
		else if(span<100){
			mapZoom=3;
		}

		var avgLat=(parseFloat(minLat)+parseFloat(maxLat))/2;
		var avgLon=(parseFloat(minLon)+parseFloat(maxLon))/2;
		map.setCenter(new GLatLng(avgLat,avgLon), mapZoom);
	}

	// create the map
	var map;

	function truncatePrefix(respText){
		var xmlStart=respText.indexOf('<?xml');
		return (xmlStart==0)?respText:respText.substr(xmlStart,respText.length);
	}

	// Read the markers data from server
	function getMarkersXml(ids){
		var request = GXmlHttp.create();
		var re = /\|/g;
		ids = ids.replace(re, ',');
		var rndm = Math.random()*999999999;
		request.open("GET", "getJobMarkers.cfm?rndm="+rndm+"&ids="+ids, true);
		request.onreadystatechange = function(){
			if (request.readyState == 4){
				var xmlDoc = request.responseXML;
				//alert(request.responseText);
				//window.clipboardData.setData("Text", request.responseText);
				// obtain the array of markers and loop through it
				var markers = xmlDoc.documentElement.getElementsByTagName("marker");

				var minLat=180;
				var minLon=180;
				var maxLat=-180;
				var maxLon=-180;

				for (var i = 0; i < markers.length; i++) {
					// obtain the attribues of each marker
					var lat = parseFloat(markers[i].getAttribute("lat"));
					var lon = parseFloat(markers[i].getAttribute("lon"));
					maxLat=Math.max(maxLat,lat);
					maxLon=Math.max(maxLon,lon);
					minLat=Math.min(minLat,lat);
					minLon=Math.min(minLon,lon);
				}

				if(!map){
					map = new GMap2(document.getElementById("map"));
					map.addControl(new GSmallMapControl());
					//map.addControl(new GMapTypeControl());
				}
				centerMap(minLat,maxLat,minLon,maxLon);
				
				var icon=createIcon();
				
				for (var i = 0; i < markers.length; i++) {
					// obtain the attribues of each marker
					var lat = parseFloat(markers[i].getAttribute("lat"));
					var lon = parseFloat(markers[i].getAttribute("lon"));
					var point = new GLatLng(lat,lon);
					var html = markers[i].getAttribute("html");
					var markerID = markers[i].getAttribute("id");
					// create the marker
					var marker = createMarker(point,markerID,html,icon);
					//use this notation if you need a default google map marker
					//var marker = createMarker(point,markerID,html);
					map.addOverlay(marker);
				}
			}
		}
		request.send(null);
	}
}
else{
	alert("Sorry, the Google Maps API is not compatible with this browser");
}
//]]>

