<!-- Hide from browsers without JavaScript support
  var xmlHttp;
  var map;
  var addrId = 0;
  var iMap = 0;
  var comments;
  var commentIndex = 0;
  var enableRescan = 1;
  var infoHtml;

  // *********************************************************************** //
  function initializeGMap(lat, lng, id, businessType, imap) {
    iMap = imap;

    if (GBrowserIsCompatible()) {
      map = new google.maps.Map2(document.getElementById("map_canvas"));
      map.addControl(new GMapTypeControl());

      if (iMap == 0) {
        map.addControl(new GLargeMapControl());
        map.setMapType(G_HYBRID_MAP);
      } else {
        map.addControl(new GLargeMapControl());
        map.setMapType(G_NORMAL_MAP);
      }

      if (lat != null && lng != null && id != null && lat != 0 && lng != 0) {
        if (id != -1) {
          map.setCenter(new GLatLng(lat, lng), 15);
          addrId = id;
        } else {
          map.setCenter(new GLatLng(lat, lng), 2);
        }
      } else {
        document.getElementById("message").innerHTML = "Detecting location...";
        
        if (navigator.userAgent.toString().indexOf("GFRegistry for Android 2.1") != -1) {
          // Our Android app (added 9/14/2011)
          //alert("Coord: " + window.Android.getLatitude() + ", " + window.Android.getLongitude());
          map.setCenter(new GLatLng(window.Android.getLatitude(), window.Android.getLongitude()), 11);


        } else if (google.loader.ClientLocation) {
          // Center on the users location and zoom in
          map.setCenter(new GLatLng(google.loader.ClientLocation.latitude, google.loader.ClientLocation.longitude), 11);

        } else {
          // Default to the United States
          if (iMap == 0) {
            map.setCenter(new GLatLng(37.4419, -50), 2);
          } else {
            map.setCenter(new GLatLng(30, -100), 2);
          }
        }
      }

      if (businessType != null) {
        document.getElementById("businessType").value = businessType;
      }

      // Add the DragZoom control
      if (iMap == 0) {
        var otherOptions = { buttonHTML:"<img src='./images/zoom-control-inactive.png' alt='Selection Tool' title='Click to activate selection tool' />", 
                             buttonZoomingHTML:"<img src='./images/zoom-control-active.png'  alt='Selection Tool' title='Click to de-activate selection tool'/>",
                             buttonStartingStyle: {width: '17px', height: '17px'}
                           };
        var controlPosition = new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(27, 285));
        map.addControl(new DragZoomControl({}, otherOptions, {}), controlPosition);
      }

      // Create the map move/zoom event listener
      GEvent.addListener(map, "moveend", function() {ajaxMapMoveEventHandler();});

      // Show some ads (now causes JavaScript error)
      //if (iMap == 0) {
      //  var adsMgr = new GAdsManager(map, "pub-4089315465129069");
      //  adsMgr.enable();
      //}

      // Populate the initial markers
      ajaxMapMoveEventHandler();
      
    }
  }

  // *********************************************************************** //
  function ajaxMapMoveEventHandler() {
    if (enableRescan == 0) {
      // Re-enable
      enableRescan = 1;
    
    } else {
      // Update the message
      document.getElementById("message").innerHTML = "Getting map info...";
      //map.disableDragging();
      //map.clearOverlays();

      // Get the map info
      var bounds = map.getBounds();
      var x1 = bounds.getSouthWest().lng();
      var y1 = bounds.getSouthWest().lat();
      var x2 = bounds.getNorthEast().lng();
      var y2 = bounds.getNorthEast().lat();
      var zoom = map.getZoom();
      var mapParams = "x1=" + x1 + "&y1=" + y1 + "&x2=" + x2 + "&y2=" + y2 + "&zoom=" + zoom;
      var businessType = document.getElementById("businessType").value;
      mapParams = mapParams + "&type=" + businessType + 
                  "&multipleLoc=" + document.getElementById("multipleLocations").value;
                  //"&inclAccommodates=" + document.getElementById("inclAccommodates").value

      // Initialize the XMLHttpRequest
      document.getElementById("message").innerHTML = "Initializing request...";
      xmlHttp = ajaxInit();

      // Add the results handler
      xmlHttp.onreadystatechange=function() {ajaxResultsHandler()};

      // Query the database
      document.getElementById("message").innerHTML = "<font color='red'>Scanning. Please wait...</font>";
      var url = "ajax-map-query.do?" + mapParams + "&appId=1&appKey=H3f6Q32F8v4V9q45"; // Also update ilist.js
      //document.getElementById("message").innerHTML = url;
      xmlHttp.open("GET", url, true);
      xmlHttp.send(null); 
    }
  }

  // *********************************************************************** //
  function ajaxResultsHandler() {
    if(xmlHttp.readyState==4) {

      if (xmlHttp.status == 200) {
        // Get the XML document
        document.getElementById("message").innerHTML = "Receiving results...";
        var xmlDoc;
        try {
          xmlDoc = xmlHttp.responseXML.documentElement;
        } catch (e) {
          //document.getElementById("message").innerHTML = xmlHttp.responseText;
        }

        var userAgent = navigator.userAgent;

        if (xmlDoc == null) {
          document.getElementById("message").innerHTML = "Could not load results. Please try again.";
          //document.getElementById("message").innerHTML = xmlHttp.responseText;
          return false;              
        }

        // Get the registries
        var registries = xmlDoc.getElementsByTagName("registry");
        if (registries == null) {
          alert("No registries found");
          return false;
        }

        // Update the message
        document.getElementById("message").innerHTML = "Adding " + registries.length + " markers (200 max)";

        // Clear the previous markers
        map.clearOverlays();

        // Update the map
        for (var i = 0; i < registries.length; i++) {
          // Get the registry information
          var registry = registries[i];

          if (ajaxGetXmlNodeValue(registry, 0, userAgent) != "0") {
            addRegistryMarker(registry, userAgent);
          } else {
            addSummaryMarker(registry, userAgent);
          } 
        }

        var statusText = registries.length + " markers displayed (200 max). ";
        if (registries.length == 200) {
          statusText = statusText + '<font color="red">Zoom in more.</font>';
        }
        document.getElementById("message").innerHTML = statusText;
        //alert(xmlHttp.responseText);

      } else {
        alert ( "Not able to retrieve data: status = " + xmlHttp.status );
      }

      map.enableDragging();
    }
  }

  // *********************************************************************** //
  function addRegistryMarker(registry, userAgent) {
    // Get the registry info
    var businessName = ajaxGetXmlNodeValue(registry, 1, userAgent);
    var businessType = ajaxGetXmlNodeValue(registry, 2, userAgent);
    var addressId = ajaxGetXmlNodeValue(registry, 5, userAgent);
    var longitude = ajaxGetXmlNodeValue(registry, 6, userAgent);
    var latitude = ajaxGetXmlNodeValue(registry, 7, userAgent);

    // Add the marker
    var markerIcon = getMarkerIcon(businessType);
    var markerOptions = { title:businessName, icon:markerIcon };
    var marker = new GMarker(new GLatLng(latitude, longitude), markerOptions); 
    var infoWindowOptions = { maxWidth:230 };
    marker.bindInfoWindowHtml(getInfoHTML(registry, userAgent), infoWindowOptions);
    GEvent.addListener(marker, "infowindowopen", function() {infoWindowOpenHandler(businessName);});
    GEvent.addListener(marker, "infowindowclose", function() {infoWindowCloseHandler();});
    map.addOverlay(marker);

    if (addrId != 0 && addrId == addressId) {
      addrId = 0; // Only do this the first time
      marker.openInfoWindowHtml(infoHtml);
    }
  }

  // *********************************************************************** //
  function addSummaryMarker(registry, userAgent) {
    // Get the registry information
    var longitude = ajaxGetXmlNodeValue(registry, 6, userAgent);
    var latitude = ajaxGetXmlNodeValue(registry, 7, userAgent);
    var count = ajaxGetXmlNodeValue(registry, 14, userAgent);

    // Determine the new zoom
    var zoom = map.getZoom();
    if (zoom < 5) {
      zoom = 7;
    } else {
      zoom = 9;
    }

    // Create the icon
    var markerIcon = new GIcon(G_DEFAULT_ICON);
    markerIcon.image = "./images/marker-yellow-smile.png";

    // Add the marker
    var markerTitle = count + " businesses!";
    var markerOptions = { title:markerTitle, icon:markerIcon };
    var marker = new GMarker(new GLatLng(latitude, longitude), markerOptions); 
    GEvent.addListener(marker, "click", function() {map.setCenter(new GLatLng(latitude, longitude), zoom);});
    GEvent.addListener(marker, "infowindowopen", function() {infoWindowOpenHandler();});
    GEvent.addListener(marker, "infowindowclose", function() {infoWindowCloseHandler();});
    map.addOverlay(marker);
  }

  // *********************************************************************** //
  function infoWindowOpenHandler(businessName) {
    sBusinessName = businessName;
    enableRescan = 0;
  }

  // *********************************************************************** //
  function infoWindowCloseHandler() {
    enableRescan = 1;
    ajaxMapMoveEventHandler();
  }

  // *********************************************************************** //
  function getMarkerIcon(businessType) {
    // Create the icon
    var markerIcon = new GIcon(G_DEFAULT_ICON);
    if (businessType == "REST") {
      markerIcon.image = "./images/marker-red.png";
    } else if (businessType == "BAKE") {
      markerIcon.image = "./images/marker-blue.png";
    } else if (businessType == "GROC") {
      markerIcon.image = "./images/marker-green.png";
    } else {
      markerIcon.image = "./images/marker-orange.png";
    }

    // Return the results
    return markerIcon;
  }

  // *********************************************************************** //
  function getInfoHTML(registry, userAgent) {
    // Get the registry information
    var registryId = ajaxGetXmlNodeValue(registry, 0, userAgent);
    var businessName = ajaxGetXmlNodeValue(registry, 1, userAgent);
    var businessType = ajaxGetXmlNodeValue(registry, 2, userAgent);
    var website = ajaxGetXmlNodeValue(registry, 3, userAgent);
    var feedbackCount = ajaxGetXmlNodeValue(registry, 4, userAgent);
    var addressId = ajaxGetXmlNodeValue(registry, 5, userAgent);
    var longitude = ajaxGetXmlNodeValue(registry, 6, userAgent);
    var latitude = ajaxGetXmlNodeValue(registry, 7, userAgent);
    var street1 = ajaxGetXmlNodeValue(registry, 8, userAgent);
    var city = ajaxGetXmlNodeValue(registry, 9, userAgent);
    var state = ajaxGetXmlNodeValue(registry, 10, userAgent);
    var zip = ajaxGetXmlNodeValue(registry, 11, userAgent);
    var localPhone = ajaxGetXmlNodeValue(registry, 12, userAgent);
    var registryDisplayNote = ajaxGetXmlNodeValue(registry, 13, userAgent);
    var addressDisplayNote = ajaxGetXmlNodeValue(registry, 14, userAgent);
    var registryType = ajaxGetXmlNodeValue(registry, 15, userAgent);
    var hasGFPizza  = ajaxGetXmlNodeValue(registry, 18, userAgent); // Added 9/13/2011
    var hasGFPasta  = ajaxGetXmlNodeValue(registry, 19, userAgent); // Added 9/13/2011
    var hasGFBread  = ajaxGetXmlNodeValue(registry, 20, userAgent); // Added 9/13/2011
    var hasGFMenu  = ajaxGetXmlNodeValue(registry, 21, userAgent);  // Added 9/13/2011
    var menuURL  = ajaxGetXmlNodeValue(registry, 22, userAgent);    // Added 9/13/2011
    var accommodatesOnly  = ajaxGetXmlNodeValue(registry, 24, userAgent); // Added 9/13/2011

    // Business name
    if (website == null || website == "") {
      infoHtml = businessName + "<br/>";
    } else {
      infoHtml = "<a href='http://" + website + "' target='_blank'>" + businessName + "</a><br/>";
    }

    // GF Offerings (added 9/13/2011)
    var temp = "";
    if (accommodatesOnly == "Y") {
      temp = "** Accommodates only";

    } else {
      temp = "";
      if (hasGFPizza == "Y") {
        if (temp == "") {
          temp = "* Offers Gluten Free: Pizza"
        } else {
          temp = temp + ", Pizza"
        }
      }

      if (hasGFPasta == "Y") {
        if (temp == "") {
          temp = "* Offers Gluten Free: Pasta"
        } else {
          temp = temp + ", Pasta"
        }
      }

      if (hasGFBread == "Y") {
        if (temp == "") {
          temp = "* Offers Gluten Free: Bread"
        } else {
          temp = temp + ", Bread"
        }
      }

      if (hasGFMenu == "Y") {
        if (menuURL == "") {
          if (temp == "") {
            temp = "* Offers Gluten Free: Menu"
          } else {
            temp = temp + ", Menu"
          }
        } else {
          if (temp == "") {
            temp = "* Offers Gluten Free: <a href='http://" + menuURL + "' target='_blank'>Menu</a>"
          } else {
            temp = temp + ", <a href='http://" + menuURL + "' target='_blank'>Menu</a>"
          }
        }
      }

    }

    if (!(temp == "")) {
      infoHtml = infoHtml + temp + "<br/>";

    }

    // Address
    infoHtml = infoHtml + street1 + "<br/>" + 
               city  + ", " + state  + " " + zip  + "<br/>" + 
               "<a href='tel:" + localPhone + "'>" + localPhone + "</a>" + "<br/>";

    // Display notes
    if (!(registryDisplayNote == null || registryDisplayNote == "")) {           
      infoHtml = infoHtml + registryDisplayNote + "<br/>";
    }

    if (!(addressDisplayNote == null || addressDisplayNote == "")) {           
      infoHtml = infoHtml + addressDisplayNote + "<br/>";
    }

    // Comments
    if (iMap == 0) {
      infoHtml = infoHtml + "<a href='registry-comments.do?registryId=" + registryId + "&addressId=" + addressId + "' target='_blank'>";

      if (feedbackCount > 0) {
        infoHtml = infoHtml + feedbackCount + " Reviews</a>";
      } else {
        infoHtml = infoHtml + "Add a Comment</a>";
      }

    } else if (iMap == 1) {
      if (feedbackCount > 0) {
        infoHtml = infoHtml + "<a href='javascript:ajaxRequestComments(" + registryId + ", " + addressId + ")' >";
        infoHtml = infoHtml + feedbackCount + " Reviews</a>&nbsp;&nbsp;&nbsp;";
      }

      // Add a review (added 10/5/2011)
      infoHtml = infoHtml + "<a href='javascript:writeMapReview(" + registryId + ", " + addressId + ")'>Add Review</a>";
    }

    // Return the results
    return infoHtml;
  }

  // *********************************************************************** //
  function zoomAddress() {
    // Get the address
    var address = document.getElementById("address").value;

    if (address.length == 0) {
      alert("Please enter your address first");
      return false;
    }

    // Geocode the address
    var geocoder = new GClientGeocoder();
    geocoder.getLatLng(address, function(results) {map.setCenter(results, 10);});
    return true;
  }

  // *********************************************************************** //
  function enterSubmit() {
    if (window.event && window.event.keyCode == 13) {
      zoomAddress();
    }

    return true;
  }
-->
