//loads up my google apis
google.load("maps", "2");
var map = "";
var bounds = "";
var gdir = "";
var side_bar_html = "<ul class='products'>";
var gmarkers = [];
var htmls = [];
var i = 0;
// arrays to hold variants of the info window html with get direction forms open
var to_htmls = [];
var from_htmls = [];


// A function to create the marker and set up the event window
function createMarker(point,name,html) {
	//extend the bounds
	bounds.extend(point);
	
	var marker = new GMarker(point,bIcon);
	//fix html
	html = '<center><b>Pendleton Safes</b></center><center>' + html + '</center>';

	// The info window version with the "to here" form open
	to_htmls[i] = html + '<br>Directions: <b>To here</b> - <a href="javascript:fromhere(' + i + ')">From here</a>' +
	   '<br>Start address:<form action="javascript:getDirections()">' +
	   '<input type="text" SIZE=40 MAXLENGTH=40 name="saddr" id="saddr" value="" /><br>' +
	   '<INPUT value="Get Directions" TYPE="SUBMIT">' +
	   '<input type="hidden" id="daddr" value="'+name+"@"+ point.lat() + ',' + point.lng() + 
	   '"/>';
	// The info window version with the "to here" form open
	from_htmls[i] = html + '<br>Directions: <a href="javascript:tohere(' + i + ')">To here</a> - <b>From here</b>' +
	   '<br>End address:<form action="javascript:getDirections()">' +
	   '<input type="text" SIZE=40 MAXLENGTH=40 name="daddr" id="daddr" value="" /><br>' +
	   '<INPUT value="Get Directions" TYPE="SUBMIT">' +
	   '<input type="hidden" id="saddr" value="'+name+"@"+ point.lat() + ',' + point.lng() +
	   '"/>';
	// The inactive version of the direction info
	html = html + '<br>Directions: <a href="javascript:tohere('+i+')">To here</a> - <a href="javascript:fromhere('+i+')">From here</a>';

	GEvent.addListener(marker, "click", function() {
	  marker.openInfoWindowHtml(html);
	});
	// save the info we need to use later for the side_bar
	gmarkers[i] = marker;
	htmls[i] = html;
	// add a line to the side_bar html
	side_bar_html += '<li><a href="javascript:myclick(' + i + ')" onclick="scrollToAnchor(\'topnav\');">' + name + '</a></li>';
	i++;
	return marker;
}

// ===== request the directions =====
function getDirections() {
	//show my print link
	document.getElementById("printItLink").style.visibility = 'visible';
	document.getElementById("directions").style.display = ''; /*show the directions*/
	
	var saddr = document.getElementById("saddr").value
	var daddr = document.getElementById("daddr").value
	gdir.load("from: "+saddr+" to: "+daddr);
}


// This function picks up the click and opens the corresponding info window
function myclick(i) {
	gmarkers[i].openInfoWindowHtml(htmls[i]);
}

// functions that open the directions forms
function tohere(i) {
	gmarkers[i].openInfoWindowHtml(to_htmls[i]);
}
function fromhere(i) {
	gmarkers[i].openInfoWindowHtml(from_htmls[i]);
}

//Call this function when the page has been loaded
	function initialize() {
	if (GBrowserIsCompatible()) {
		//set my apis to unload which prevents memory leaks

		window.onunload=google.maps.Unload;
		
		// my custom icon
		bIcon = new GIcon();
			bIcon.image = "/contact/images/icon21.png";
			bIcon.shadow = "/contact/images/icon21s.png";
			bIcon.iconSize = new GSize(32.0, 32.0);
			bIcon.shadowSize = new GSize(59.0, 32.0);
			bIcon.iconAnchor = new GPoint(28.0, 15.0);
			bIcon.infoWindowAnchor = new GPoint(28.0, 15.0);
			bIcon.printImage = "/contact/images/icon21_print.gif";
			bIcon.mozPrintImage = "/contact/images/icon21_mozPrint.gif";

		//here is the map
		map = new google.maps.Map2(document.getElementById("map"));
		// === create a GDirections Object ===
		gdir = new GDirections(map, document.getElementById("directions"));
			//setCenter
			//map.setCenter(new GLatLng(33.960996, -80.370893),9);
			//setCenter
			map.setCenter(new GLatLng(0,0),0);/*initially set center to zero*/
			
			//create bounds
			bounds = new GLatLngBounds();

			
			//add controls
			map.addControl(new google.maps.SmallZoomControl());
			/*map.addControl(new google.maps.MapTypeControl());
			
			//remove satellite view (unnecessary clutter)
			map.removeMapType(G_SATELLITE_MAP);
			map.removeMapType(G_HYBRID_MAP);*/
			
			//map.addControl(new google.maps.ScaleControl());
			//map.addControl(new google.maps.OverviewMapControl());

			
			
			// === Array for decoding the failure codes ===
			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.";
			reasons[G_GEO_BAD_REQUEST]        = "A directions request could not be successfully parsed.";
			reasons[G_GEO_MISSING_QUERY]      = "No query was specified in the input.";
			reasons[G_GEO_UNKNOWN_DIRECTIONS] = "The GDirections object could not compute directions between the points.";

			// === catch Directions errors ===
			GEvent.addListener(gdir, "error", function() {
				var code = gdir.getStatus().code;
				var reason="Code "+code;
				if (reasons[code]) {
					reason = reasons[code]
				}
				/*hide my print link*/
				document.getElementById("printItLink").style.visibility = 'hidden';
				document.getElementById("directions").style.display = 'none'; /*hide the directions*/
				alert("Failed to obtain directions, "+reason);
			});
			
		//create xml url
		var xml_url = "contactus.xml";
		if(contactus_xml_mtime)
		{
			xml_url += "?" + contactus_xml_mtime;
		}
		
		// Read the data from xml_url
		var request = GXmlHttp.create();
		request.open("GET", xml_url, true);
		request.onreadystatechange = function() {
			if (request.readyState == 4) {
				var xmlDoc = GXml.parse(request.responseText);
				// obtain the array of markers and loop through it
				var markers = xmlDoc.documentElement.getElementsByTagName("marker");
				
				for (var i = 0; i < markers.length; i++) {
					// obtain the attribues of each marker
					var lat = parseFloat(markers[i].getAttribute("lat"));
					var lng = parseFloat(markers[i].getAttribute("lng"));
					var point = new GLatLng(lat,lng);
					var html = markers[i].getAttribute("html");
					var label = markers[i].getAttribute("label");
					// create the marker
					var marker = createMarker(point,label,html);
					map.addOverlay(marker);
				}
				// put the assembled side_bar_html contents into the side_bar div
				document.getElementById("side_bar").innerHTML = side_bar_html + '</ul>';

				//fit the zoom to the data
				map.setZoom(map.getBoundsZoomLevel(bounds));
				map.setCenter(bounds.getCenter());
			}
		}
		request.send(null);
	// This Javascript is based on code provided by the
	// Blackpool Community Church Javascript Team
	// http://www.commchurch.freeserve.co.uk/   
	// http://econym.googlepages.com/index.htm
		
// the next two } closes initialize function and GBrowserIsCompatible()
	}
   }
	//loads founction initialize()
	google.setOnLoadCallback(initialize);