// JavaScript Document - Dealer Locator
   var map = null;
    var geocoder = null;
	var dealerarray = Array();
	var page = 1;
	function loadMapData(state,product){
	 	//XML LOAD
		if(typeof(product) == 'undefined' || typeof(state) == 'undefined'){
			alert("Please select a product and state");
			return false;
		} else {
			GDownloadUrl("/gmap/state2.php?state=" + state + "&product=" + product + "&page=" + page, function(data, responseCode) {
				if(responseCode == 200){
					var xml = GXml.parse(data);
					//MARKERS=======================================================
					//var container = xml.documentElement.getElementsByTagName("dealers");
					//var total = container[0].getAttribute("total");
					//alert(total);
					var dealers = xml.documentElement.getElementsByTagName("dealer");
					for (var i = 0; i < dealers.length; i++) {
						if(i == 0)	addPrev();
						//for each dealer get address lat/lon
						thisAddress = dealers[i].getAttribute("address");
						thisCity = dealers[i].getAttribute("city");
						thisState = dealers[i].getAttribute("state");
						thisZip = dealers[i].getAttribute("zip");
						//get additional bubble info
						thisName = dealers[i].getAttribute("name");
						thisPhone = dealers[i].getAttribute("phone");
						thisURL = dealers[i].getAttribute("url");
						address = thisAddress + "," + thisCity + "," + thisState;
						CreateMarker(address,thisName,thisPhone,thisURL);
						if(i == 9) addNext();//add next
					} //end for (var i = 0; i < dealers.length; i++) {
				notFound(); //timed 5 sec deal
				} //end if response Code
			 }); //end callback function GDownloadUrl
		//snap center of map
		if (geocoder) {
			//alert(state.substr(3,state.length - 3));
			 geocoder.getLatLng(state.substr(3,state.length - 3), 
					function(point) {//callback function gets the point data
						if (point) { map.setCenter(point, 7); }
					}
			 );
      	} //end if
		}
 }
    function load() {
      if (GBrowserIsCompatible()) {
        map = new GMap2(document.getElementById("map"));
		map.addControl(new GLargeMapControl());
	  	map.addControl(new GMapTypeControl());
	  	map.addControl(new GOverviewMapControl());
	  	map.enableDoubleClickZoom();  //double click zoom
	  	map.enableContinuousZoom(); //smooth zooming
        map.setCenter(new GLatLng(39.1167, -94.5833), 4);
        geocoder = new GClientGeocoder();
		}
    }
// A function to create the marker and set up the event window
	function subCreateMarker(point,html,i) {
		var letter = String.fromCharCode("A".charCodeAt(0) + i);
		var graphic = "http://www.google.com/mapfiles/marker" + letter + ".png";
		var icon = new GIcon(G_DEFAULT_ICON);
		icon.image = graphic
		var marker = new GMarker(point, icon);
		marker.html = html;

		GEvent.addListener(marker, "click", function() {
			map.panTo(point);
			marker.openInfoWindowHtml(html);
		});
		
		return marker;
	}
	//Create the popup html
	function subCreateHTMLBubble(point,address,name,phone,url){
			var fixedhtml = '<div class=\'bubble\'>';
			fixedhtml += "<b><a href='javascript:mapPanAndZoomTo(" + point + ")\' title=\'zoom\'>" + name + "</a>";
			fixedhtml += '<br>' + address + '<br>' + phone + '<br>';
			fixedhtml += '<a href=\'' + url + '\'>' + url + '</a>' + '<br>';
			fixedhtml += '<a href=\'http://maps.google.com/maps?saddr=&daddr='+ address + '\'>Get Directions</a><br>';
			fixedhtml += '</div>';
			return fixedhtml;
	}
	
    function CreateMarker(address,name,phone,url){
	//get coords
		if (geocoder) {
			 geocoder.getLatLng(address, 
				function(point) {//callback function gets the point data
					if (point) {
							var i = dealerarray.length;
							var html = subCreateHTMLBubble(point,address,name,phone,url);
							var marker = subCreateMarker(point,html,i);
							map.addOverlay(marker);
							dealerarray.push(marker);
							writeLocation(name, phone, i);
					}
				});
		} //end if
	}
	
	function clearPage(){
		page = 1;
	}
	function writeLocation(name, addr, i) {
		var letter = String.fromCharCode("A".charCodeAt(0) + i);
  		var graphic = "http://www.google.com/mapfiles/marker" + letter + ".png";
		var list = document.getElementById("locations");
		var s = list.innerHTML;
		s += '<div class="thislocation"><div class="marker"><a href="javascript:mapOpenInfo(' + i + ')"><img src="' + graphic + '" border="0" /></a></div>';
		s += '<div class="address"><a href="javascript:mapOpenInfo(' + i + ')" class="storename">' + name + '</a><br>';
		s += addr + '</div>';
		s += '</div>';
		list.innerHTML = s;
		
	}
	function nextPage(){
		page++;
		refreshMap();
	}
	
	function prevPage(){
		page--;
		refreshMap();
	}
	//add next button or no results found
	function addNext(){
		var list = document.getElementById("locations");
		var s = list.innerHTML;
		list.innerHTML += '<div class="next"><a href="javascript:nextPage()">Next</a></div>';
	}
	
	function addPrev(){
		var list = document.getElementById("locations");
		var s = list.innerHTML;
		if(page > 1){ //throw in a back button (top)
			list.innerHTML = '<div class="back"><a href="javascript:prevPage()">Back</a></div>';
			list.innerHTML += s;
		}
	}
	function mapOpenInfo(index){
		if (map != null) {
			var marker = dealerarray[index];
			map.setZoom(8);
			map.panTo(marker.getPoint());
			marker.openInfoWindowHtml(marker.html);
		}
	}	
	
	function mapPanAndZoomTo() {
		if (map != null) {
			map.setZoom(16);
		}
	}
	
	function refreshMap(){
		map.clearOverlays();
		//clear side
		var list = document.getElementById("locations");
		list.innerHTML = "";
		//cleare dealerarray
		dealerarray = [];
		var thisProduct = document.getElementById("prod").value;
		var thisState = document.getElementById("state").value;
		//hide helper message
		var startMsg = document.getElementById("startmessage");
		loadMapData(thisState,thisProduct);
		if(startMsg.style.display != 'none'){
			startMsg.style.display = 'none';
		}
	}
	
	function notFound(){
		var st = setTimeout(function(){
		if(dealerarray.length == 0){
			var list = document.getElementById("locations");
			var s = list.innerHTML;
			list.innerHTML = '<div style=\"text-align: center; width: 140px; padding-left: 5px;\">No dealerships could be found that matched your criteria. <br/><br/> <a href=\"/additional_sources.htm"\>Click here</a> for more retailers or try a different location or product</div>';
		}
		},3000);
	}
