function dumpObj(obj, name, indent, depth) {
              if (depth > 8) {
                     return indent + name + ": <Maximum Depth Reached>\n";
              }
              if (typeof obj == "object") {
                     var child = null;
                     var output = indent + name + "\n";
                     indent += "\t";
                     for (var item in obj)
                     {
                           try {
                                  child = obj[item];
                           } catch (e) {
                                  child = "<Unable to Evaluate>";
                           }
                           if (typeof child == "object") {
                                  output += dumpObj(child, item, indent, depth + 1);
                           } else {
                                  output += indent + item + ": " + child + "\n";
                           }
                     }
                     return output;
              } else {
                     return obj;
              }
       }

	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() {
	$("#resultsContainer").html('There was an error. Please check your input and enter a valid address or location.');
}
	
	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, div) {
	
    var marker;
    var letter = String.fromCharCode("A".charCodeAt(0) + index);

    var iconOptions = {};
            
    switch (iconColor) {
        case 'maroon': // Nice Maroon marker with shadows for Nocona using the MapIconMaker 
            iconOptions.width = 32;
            iconOptions.height = 32;
            iconOptions.primaryColor = "#840000";
            iconOptions.cornerColor = "#FFFFFF";
            iconOptions.strokeColor = "#000000";
            iconOptions.label = letter;
            iconOptions.labelColor = "#FFFFFF";
            break;
        default: // For a nice looking white marker with shadows using the MapIconMaker
            iconOptions.width = 32;
            iconOptions.height = 32;
            iconOptions.primaryColor = "#FFFFFF";
            iconOptions.cornerColor = "#978E84";
            iconOptions.strokeColor = "#000000";
            iconOptions.label = letter;
            iconOptions.labelColor = "#000000";
            break;
    }
    
    var newIcon = MapIconMaker.createLabeledMarkerIcon(iconOptions);

    marker = new GMarker(point, {icon: newIcon});
/*    }
    else {
    
        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 letteredIcon = new GIcon(baseIcon);
        var iconImage = "/imgD/" + color + "_Marker" + letter + ".png";
        letteredIcon.image = iconImage;
        // Set up our GMarkerOptions object
        markerOptions = {
            icon: letteredIcon
        };
        
        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){
              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 ? 'maroon' : false;
                  
				  Y =  data[i].Flag?'Y':'';
				  
                  $("#results").append('<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, data[i].divNo);
				  
                  map.addOverlay(marker);  
				         
			  }
			$(".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); 

		$("#searchBtn").click(function(){
			$("#results").empty();
			var address = jQuery("#address").val() + ' ' + jQuery("#state").val() + ' ' + jQuery('#zip').val();
			var maxResults = jQuery("#mr").val();
			
			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()
	});

    
    
