var map;
  var geocoder;

  function load() {
    if (GBrowserIsCompatible()) {
      geocoder = new GClientGeocoder();
      map = new GMap2(document.getElementById('map'));
      map.addControl(new GSmallMapControl());
      map.addControl(new GMapTypeControl());
      map.setCenter(new GLatLng(40, -100), 4);
    }
  }

 function searchLocations() {
   var address = document.getElementById('addressInput').value;
   geocoder.getLatLng(address, function(latlng) {
     if (!latlng) {
       alert(address + ' not found');
     } else {
       searchLocationsNear(latlng);
     }
   });
 }

 function searchLocationsNear(center) {
   var radius = document.getElementById('radiusSelect').value;
   var searchUrl = '/phpsqlsearch_genxml.php?lat=' + center.lat() + '&lng=' + center.lng() + '&radius=' + radius;
   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 = 'Sorry, there are no results found in this area.';
       map.setCenter(new GLatLng(40, -100), 4);
       return;
     }

     var bounds = new GLatLngBounds();
     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 city = markers[i].getAttribute('city');
       var state = markers[i].getAttribute('state');
       var postalcode = markers[i].getAttribute('postalcode');
       var phone = markers[i].getAttribute('phone');
       var point = new GLatLng(parseFloat(markers[i].getAttribute('lat')),
                               parseFloat(markers[i].getAttribute('lng')));
       
       var marker = createMarker(point, name, address, city, state, postalcode, phone);
       map.addOverlay(marker);
       var sidebarEntry = createSidebarEntry(marker, name, address, distance, city, state, postalcode, phone );
       sidebar.appendChild(sidebarEntry);
       bounds.extend(point);
     }
     map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));
   });
 }

  function createMarker(point, name, address, city, state, postalcode, phone) {
    var marker = new GMarker(point);
    var html = '<b>' + name + '</b> <br/>' + address + '<br/>' + city + ', ' + state + ' ' + postalcode + '<br/>' + phone + '<br/><a href="http://www.google.com/maps?f=d&hl=en&saddr=&daddr=' + address + ' ' + city + ', ' + state + ' ' + postalcode + '&ie=UTF8&om=1" target="_blank">Get Directions With Google Maps</a><br/>';
    GEvent.addListener(marker, 'click', function() {
      marker.openInfoWindowHtml(html);
    });
    return marker;
  }

  function createSidebarEntry(marker, name, address, distance, city, state, postalcode, phone) {
    var div = document.createElement('div');
    var html = '<span style="color: #3e2c08; font-size: 12px; font-weight:bold;">' + name + '</span><br/>' + address + '<br />' + city + ', ' + state + ' ' + postalcode + '<br/>' + phone + '<br/>(' + distance.toFixed(1) + ' Miles)<br/><a href="http://www.google.com/maps?f=d&hl=en&saddr=&daddr=' + address + ' ' + city + ', ' + state + ' ' + postalcode + '&ie=UTF8&om=1" target="_blank">Get Directions With Google Maps</a><br/><br/>';
    div.innerHTML = html;
    div.style.cursor = 'pointer';
    div.style.marginBottom = '5px'; 
    GEvent.addDomListener(div, 'click', function() {
      GEvent.trigger(marker, 'click');
    });
    return div;
  }