    var map;
    var geocoder;

    function load() {
      if (GBrowserIsCompatible()) {
        geocoder = new GClientGeocoder();
        map = new GMap2(document.getElementById('map'));
		map.addControl(new GLargeMapControl());
		map.addControl(new GScaleControl());
        map.setCenter(new GLatLng(37.3, -121.9), 10);
		map.enableScrollWheelZoom();
      }
    }
	
function searchLocations() {
     var address = document.getElementById('addressInput').value;
	 var name = document.getElementById('FacilityNameInput').value;
	 if ((name == "")&&(address == ""))
	 {
		 alert("no perimeters entered, please search again");
	 }	 
	 else if (address == "")
	 {
		searchLocationsNoAddress(name);
	 }
	 else{
     geocoder.getLatLng(address, function(latlng) {
       if (!latlng) {
         alert(address + ' not found');
       } else {
         searchLocationsNear(latlng, name);
       }
     });
	 }
   }
   
   function searchLocationsNoAddress(name) {
     var searchUrl = 'phpsqlsearch_genxml2.php?name=' + name;
	 GDownloadUrl(searchUrl, function(data) {
       var xml = GXml.parse(data);
       var markers = xml.documentElement.getElementsByTagName('marker');
       map.clearOverlays();
       var sidebar = document.getElementById('sidebar');
       sidebar.innerHTML = '';
       if (markers.length == 0) {
         sidebar.innerHTML = 'No results found.';
         map.setCenter(new GLatLng(37.3, -121.9), 10);
         return;
       }

       var bounds = new GLatLngBounds();
	   sidebar.innerHTML = 'Top results (10 max):';
       for (var i = 0; i < markers.length; i++) {
         var name = markers[i].getAttribute('name');
         var address = markers[i].getAttribute('address');
         var distance = null;
         var point = new GLatLng(parseFloat(markers[i].getAttribute('lat')),
                                 parseFloat(markers[i].getAttribute('lng')));
		 var city = markers[i].getAttribute('city');
		 var state = markers[i].getAttribute('state');
		 var zip = markers[i].getAttribute('zip');
		 var fa_id = markers[i].getAttribute('fa_id');
         
         var marker = createMarker(point, name, fa_id,i+1);
         map.addOverlay(marker);
         var sidebarEntry = createSidebarEntry(marker, name, address, distance, city, state, zip,i+1);
         sidebar.appendChild(sidebarEntry);
         bounds.extend(point);
       }
       map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));
     });
   }

   function searchLocationsNear(center, name) {
     var searchUrl = 'phpsqlsearch_genxml.php?lat=' + center.lat() + '&lng=' + center.lng() + '&name=' + name;
	 GDownloadUrl(searchUrl, function(data) {
       var xml = GXml.parse(data);
       var markers = xml.documentElement.getElementsByTagName('marker');
       map.clearOverlays();

       var sidebar = document.getElementById('sidebar');
       sidebar.innerHTML = '';
       if (markers.length == 0) {
         sidebar.innerHTML = 'No results found.';
         map.setCenter(new GLatLng(37.3, -121.9), 10);
         return;
       }

       var bounds = new GLatLngBounds();
	   sidebar.innerHTML = 'Closest results (10 max):';
       for (var i = 0; i < markers.length; i++) {
         var name = markers[i].getAttribute('name');
         var address = markers[i].getAttribute('address');
         var distance = parseFloat(markers[i].getAttribute('distance'));
         var point = new GLatLng(parseFloat(markers[i].getAttribute('lat')),
                                 parseFloat(markers[i].getAttribute('lng')));
		 var city = markers[i].getAttribute('city');
		 var state = markers[i].getAttribute('state');
		 var zip = markers[i].getAttribute('zip');
		 var fa_id = markers[i].getAttribute('fa_id');
         
         var marker = createMarker(point, name, fa_id, i+1);
         map.addOverlay(marker);
         var sidebarEntry = createSidebarEntry(marker, name, address, distance, city, state, zip, i+1);
         sidebar.appendChild(sidebarEntry);
         bounds.extend(point);
       }
       map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));
     });
   }

    function createMarker(point, name, fa_id,i) {
      var Icon = new GIcon(G_DEFAULT_ICON);
	  Icon.image = "/images/icons/red_Marker" + i + ".png";
	  markerOptions = { icon:Icon };
	  var marker = new GMarker(point,markerOptions);
      var html = '<b>' + name + '</b> <br/>' + '<a href=fareport.php?id='+fa_id+' target="_blank"> Click here to view latest inspection report </a>';
      GEvent.addListener(marker, 'click', function() {
        marker.openInfoWindowHtml(html);
      });
      return marker;
    }

    function createSidebarEntry(marker, name, address, distance, city, state, zip, i) {
      var div = document.createElement('div');
	  if (distance == null)
	  {
		  var html = '<table><tr><td><img src="/images/icons/red_Marker' + i + '.png"></img></td><td>' + '<b>' + name + '</b>' + '<br/>' + address + '<br/>' 
	  			+ city + ', ' + state + ' ' +zip + '</td></tr></table>';
	  }
	  else
	  {
      var html = '<table><tr><td><img src="/images/icons/red_Marker' + i + '.png"></img></td><td>' + '<b>' + name + '</b> (' + distance.toFixed(1) + ' miles)<br/>' + address + '<br/>' 
	  			+ city + ', ' + state + ' ' +zip +'</td><tr></table>';
	  }
      div.innerHTML = html;
      div.style.cursor = 'pointer';
      div.style.marginBottom = '5px'; 
      GEvent.addDomListener(div, 'click', function() {
        GEvent.trigger(marker, 'click');
      });
      GEvent.addDomListener(div, 'mouseover', function() {
        div.style.backgroundColor = '#eee';
      });
      GEvent.addDomListener(div, 'mouseout', function() {
        div.style.backgroundColor = '#fff';
      });
      return div;
    }