 var gmarkers = [];
    var baseIcon;  
    var bounds;
    var map;
    
    window.onunload = unload;
    
    function unload()
    {
      GUnload();
    }
  
    function loadMap(mapElementId, xmlSourceUrl, visitorPostalCode)
    {    
      if (GBrowserIsCompatible()) 
      {
        // ===== Start with an empty GLatLngBounds object =====     
        bounds = new GLatLngBounds();       
      
        map = new GMap2(document.getElementById(mapElementId));
        map.addControl(new GSmallMapControl());
        map.addControl(new GMapTypeControl());
        // ==== It is necessary to make a setCenter call of some description before adding markers ====
        // ==== At this point we dont know the real values ====
        map.setCenter(new GLatLng(0,0),4);
        
        baseIcon = new GIcon();
        baseIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
        baseIcon.iconSize = new GSize(20, 34);
        baseIcon.shadowSize = new GSize(37, 34);
        baseIcon.iconAnchor = new GPoint(9, 34);
        baseIcon.infoWindowAnchor = new GPoint(9, 2);
        baseIcon.infoShadowAnchor = new GPoint(18, 25);
        
        findVisitorLocation(visitorPostalCode);
        loadDealerLocations(xmlSourceUrl);
       }//if
     }//function
     
     function findVisitorLocation(visitorPostalCode)
     {
        var geocoder = new GClientGeocoder();
        geocoder.getLatLng(visitorPostalCode,
          function(point)
          {
            if(point)
            {
              map.addOverlay(createVisitorLocationMarker(point));
              bounds.extend(point);
            }
          }
        );
      }
      
      function loadDealerLocations(xmlSourceUrl)
      {
        GDownloadUrl(xmlSourceUrl, 
          function(data) 
          {
            var xml = GXml.parse(data);
            var dealers = xml.documentElement.getElementsByTagName("DealerLocation");
            for (var i = 0; i < dealers.length; i++) {
              var latitude = GXml.value(dealers[i].getElementsByTagName("Latitude")[0]);
              var longitude = GXml.value(dealers[i].getElementsByTagName("Longitude")[0]);
              if((latitude != '') && (longitude != ''))
              {
                var point = new GLatLng(latitude, longitude);
                var name = GXml.value(dealers[i].getElementsByTagName("Name")[0]);
                var address1 = GXml.value(dealers[i].getElementsByTagName("Address1")[0]);
                var address2 = GXml.value(dealers[i].getElementsByTagName("Address2")[0]);
                var city = GXml.value(dealers[i].getElementsByTagName("City")[0]);
                var state = GXml.value(dealers[i].getElementsByTagName("Region")[0]);
                var zipcode = GXml.value(dealers[i].getElementsByTagName("PostalCode")[0]);
                var phone = GXml.value(dealers[i].getElementsByTagName("Phone")[0]);
                map.addOverlay(createMarker(point,i+1,name,address1,address2,city,state,zipcode,phone));
                // ==== Each time a point is found, extent the bounds to include it =====
                bounds.extend(point);
              }//if
            }//for
            // ===== determine the zoom level from the bounds =====
            var zoomLevel = map.getBoundsZoomLevel(bounds);
            map.setZoom(zoomLevel);
            // ===== determine the centre from the bounds ======
            map.setCenter(bounds.getCenter());       
          }
        );
      }
 
     
      // This function picks up the click and opens the corresponding info window
      function openMapInfoWindow(markerId) {
        GEvent.trigger(gmarkers[markerId], "click");
      }
 
      // Creates a marker at the given point with the given number label
      function createVisitorLocationMarker(point) {
        //var icon = new GIcon(baseIcon);
        //icon.image = "../DealerLocator/Images/MapIcons/PinPoint.png";
        var marker = new GMarker(point, G_DEFAULT_ICON);
        return marker;      
      }   
 
      // Creates a marker at the given point with the given number label
      function createMarker(point, number, name, address1, address2, city, state, zipCode, phone) {
        var icon = new GIcon(baseIcon);
        if(number < 51)
        {
          icon.image = "../DealerLocator/Images/MapIcons/Pinpoint_" + number + ".png";
        }
        else
        {
          icon.image = "../DealerLocator/Images/MapIcons/Pinpoint_+.png";
        }
        var marker = new GMarker(point, icon);
        gmarkers[number] = marker;
        GEvent.addListener(marker, "click", function() {
          var dealerAddress = address1;
          if(address2 != '')
          {
            dealerAddress+= "<br>" + address2;
          }
          dealerAddress+= "<br>" + city + ", " + state + "  " + zipCode;
   		    marker.openInfoWindowHtml('<div class="mapInfoWindow"><h3>'+ number + ') ' + name + '</h3><p>' + dealerAddress + '</p></div>');
		    });
        return marker;      
      }
