    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), 3);
      }
    }
    


   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 radius= 40000;
     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 = 'No results found.';
         map.setCenter(new GLatLng(40, -100), 3);
         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 urlTemp = markers[i].getAttribute('url');
         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, urlTemp, phone);
         map.addOverlay(marker);
         var sidebarEntry = createSidebarEntry(marker, name, address, distance);
         sidebar.appendChild(sidebarEntry);
         if(i<2)
         	bounds.extend(point);
       }
       map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds)-1);
     });
   }

	   function searchLocations_BarOnly() {
         geocoder = new GClientGeocoder();
		jQuery('#sidebar_loc').html("Loading...");

	     var address = document.getElementById('addressInput_side').value;
	     geocoder.getLatLng(address, function(latlng) {
	       if (!latlng) {
			jQuery('#sidebar_loc').append("<p>Location not found</p>")
			  } 
			  else {
	         searchLocationsNear_BarOnly(latlng);
	       }
	     });
	   }
	


	function searchLocationsNear_BarOnly(center) {
		     //var radius = document.getElementById('radiusSelect').value;
     var radius= 40000;
     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');
       var sidebar = document.getElementById('sidebar_loc');
       sidebar.innerHTML = '';
       if (markers.length == 0) {
         sidebar.innerHTML = 'No results found.';
         return;
       }

       var bounds = new GLatLngBounds();
       for (var i = 0; i < markers.length && i < 5; i++) {
         var name = markers[i].getAttribute('name');
         var address = markers[i].getAttribute('address');
         var distance = parseFloat(markers[i].getAttribute('distance'));
         var urlTemp = markers[i].getAttribute('url');
         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, urlTemp, phone);

		jQuery('#sidebar_loc').hide();
		if(urlTemp) {
			jQuery('#sidebar_loc').append('<div><b>' +'<a href="http://' + urlTemp + '" target="_blank" >' + name + '</a></b> (' + distance.toFixed(1) + ')<br/>' + '<a href="http://maps.google.com/maps?q=' + address + '" target="_blank" >' + address + '</a> <br />' + phone +  '</div>');
			}
		else {
        	jQuery('#sidebar_loc').append('<div><b>'  + name + '</b> (' + distance.toFixed(1) + ')<br/>' + '<a href="http://maps.google.com/maps?q=' + address + '" target="_blank" >' + address + '</a>  <br />' + phone + '</div>');

       }
       }
      
    	jQuery('#sidebar_loc').slideDown(500);


     });

	}

    function createMarker(point, name, address, url, phone) {
      var marker = new GMarker(point);
      if(url)
      	var html = '<b>' + name + '</b> <br/>' + address + '<br /><a href="http://' + url + '" target="_blank">' + url + '</a> <br />' + phone; 
      else var html = '<b>' + name + '</b> <br/>' + address + '<br />' + phone; 

      GEvent.addListener(marker, 'click', function() {
        marker.openInfoWindowHtml(html);
      });
      return marker;
    }

    function createSidebarEntry(marker, name, address, distance) {
      var div = document.createElement('div');
      var html = '<b>' + name + '</b> (' + distance.toFixed(1) + ')<br/>' + address;
      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;
    }

