google.load("maps", "2");
	
    var locations = {};
	var markers = {};
	var i = 0;
    function GMapLoad(map){
		var l = new Array('lat','lon');
		var cName = "Mapcenter=";
		var myLocation = (getCookie("mapCenter")?getCookie("mapCenter"):"39,-98");
		var loc=myLocation.split(',');
	
		center = new GLatLng(loc[0],loc[1]);
		if (center) {
			map.setCenter(center, 3);
		}		
		
		map.setUIToDefault();
		
	}
	
	function gotoLocation(el,map){

		var p = markers[el.id].getLatLng();
		map.panTo(p);
		map.setCenter(p,12);

		markers[el.id].openInfoWindowHtml(markers[el.id].html,p);
		$(".marker").removeClass('selected');
		$(el).addClass('selected');
       }
	
	function getCookie(cName)
	{
  		if ( r = document.cookie.match ( '(^|;) ?' + cName + '=([^;]*)(;|$)') )
    		return ( unescape ( r[2] ) ); else return null;
  	}
	function errorMsg(msg) {
		if (!msg) {
			var msg = 'There was an error. Please check your input and enter a valid address or location.';
		}
	$("#resultsContainer").html(msg);
}
	
	function homeIcon(point, address){
		var baseIcon = new GIcon(G_DEFAULT_ICON);
		baseIcon.iconSize = new GSize(25, 28);
		baseIcon.iconAnchor = new GPoint(1,3);
		baseIcon.infoWindowAnchor = new GPoint(9, 2);
		baseIcon.image = "/templates/default/images/icons/homeIconOrange.gif";
		markerOptions = { icon:baseIcon };
        var marker = new GMarker(point, markerOptions);
		GEvent.addListener(marker, "click", function() {
            marker.openInfoWindowHtml('<strong>My Location</strong><br />'+address);
         });
		return marker;

	}
	 function createMarker(point, contents, index, iconColor) {
	 	
	 	var color = iconColor?iconColor:'red';
	 	var baseIcon = new GIcon(G_DEFAULT_ICON);
		baseIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
		baseIcon.image = "/imgD/blank.gif";
		baseIcon.iconSize = new GSize(20, 34);
		baseIcon.shadowSize = new GSize(37, 34);
		baseIcon.iconAnchor = new GPoint(9, 34);
		baseIcon.infoWindowAnchor = new GPoint(9, 2);
          // Create a lettered icon for this point using our icon class
          var letter = String.fromCharCode("A".charCodeAt(0) + index);
          var letteredIcon = new GIcon(baseIcon);
		  var iconImage = "/imgD/"+color+"_Marker" + letter + ".png";
          letteredIcon.image = iconImage;
          // Set up our GMarkerOptions object
          markerOptions = { icon:letteredIcon };
		  
          var marker = new GMarker(point, markerOptions);
			marker.html = contents;
          GEvent.addListener(marker, "click", function() {
            marker.openInfoWindowHtml(contents);
          });
		  markers[index] = marker;
          return marker;
        }
		   
		   
 function GoogleGeocode(map) {

	 	this.apiKey=mapKey;
	    this.geocode = function(address, callbackFunction){
			this.address=address;
			jQuery.ajax({
				dataType: 'jsonp',
				url: 'http://maps.google.com/maps/geo?output=json&oe=utf8&sensor=false' +
				'&key=' +
				this.apiKey +
				'&q=' +
				address,
				cache: true,
				success: function(data){

					if (data.Status.code == 200) {
						var result = {};
						var ad = data.Placemark[0];
						
						if (ad.Point) {
							result.longitude = ad.Point.coordinates[0];
							result.latitude = ad.Point.coordinates[1];
						}
						else 
							if (ad.ExtendedData.LatLonBox) {
								result.longitude = (ad.ExtendedData.LatLonBox[north] + ad.ExtendedData.LatLonBox[south]) / 2;
							}
							else {
								callbackFunction(null);
							}
						callbackFunction(result);
					}
					else {
						errorMsg();
					}
				}
			});
		}	  
		  this.centerMap = function(data) {
		  	    if(data.latitude == 0 || data.longitude == 0) {
					return false;
				}
				var center = new GLatLng(data.latitude, data.longitude);
				document.cookie = "mapCenter="+data.latitude+","+data.longitude;
				map.clearOverlays();
				map.setCenter(center,8);
				map.addOverlay(homeIcon(center, this.address));	
		  }
		  
          this.addMarker = function(marker){
              map.addOverlay(marker);
          }
          
          this.moveToLocation = function(lat, lon){
              var location = new GLatLng(lat, lon);
              map.setCenter(location, 7);
          }
          
          this.addMarkers = function(data, range){
			  var output='';
              if (!data) {
                  $("#results").append('No locations found.');
                  return false;
              }
              
			  $(".instructions").remove();
              var points=Array();
	
              $("#resultsContainer").css('visibility','visible');
			  if(data.length == 0) {
			  	errorMsg();
				return false;
			  }
              for (var i = 0; i < data.length; i++) {
			  	  lat = data[i].Latitude;
				  lon = data[i].Longitude;
				  iconColor = data[i].Flag?'yellow':false;
				  Y =  data[i].Flag?'Y':'';
				  
                  output = output+'<li><div class="marker '+Y+'" id="'+i+'">' + String.fromCharCode("A".charCodeAt(0) + i) + '</div>' + data[i].info + '</li>';
				  
                  points[i] = new GLatLng(data[i].Latitude, data[i].Longitude);
				  marker = createMarker(points[i], data[i].info, i, iconColor);
				  
                  map.addOverlay(marker);  
				         
			  }
			  $("#results").html(output);
			  $("#scrollpane").jScrollPane({showArrows:false, scrollbarWidth: 38}); 
			$(".marker").click(function(){
				gotoLocation(this, map);
			 }); 
		 	
          }
	  }
	

$(document).ready(function(){

		var map = new google.maps.Map2(document.getElementById("map"));
		GMapLoad(map);	
		var g = new GoogleGeocode(map); 
		var hello = "Enter an address, city, state, or zip code";
		$("#address").val(hello);
		$("#address").click(function(){
			if ($("#address").val()==hello) {
				$("#address").val('');
			}
		});
		
		$("#searchMap").click(function(){
			$("#results").empty();
			if ($("#address").val()==hello) $("#address").val('');
			var address = jQuery("#address").val() + ' ' + jQuery("#state").val() + ' ' + jQuery('#zip').val();
			var maxResults = jQuery("#mr").val();
			address = address.trim();
			jQuery.ajax({
				dataType: 'json',
				url: '/ajax/dealerLocations&address='+address+'&maxResults='+maxResults,
				success: function(data){
	
					var myLocation = false;
					if (data.status == 1) {
						g.centerMap(data.myLocation);
						g.addMarkers(data.locations, data.rangeBox);

					} else {
						g.geocode(address, function(data) {  
						
							var maxResults = jQuery("#mr").val();
							 jQuery.ajax({
						         dataType: 'json',
						         url: '/ajax/dealerLocations/r&lat='+data.latitude+'&lon='+data.longitude+'&address='+address+'&maxResults='+maxResults,
						         success: function(data){
								
									g.centerMap(data.myLocation);
			 						g.addMarkers(data.locations, data.rangeBox);
									
								}
							 });	
						});
					}
					
				}
			});
			
		
		});

	});
	
	$(document).unload(function(){
		GUnload()
	});

