//<![CDATA[
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 searchUrl = 'testmap.php?lat=' + center.lat() + '&lng=' + center.lng() + '&radius=' + radius;
  GDownloadUrl(searchUrl, function(data) {
    var xml = GXml.parse(data);
    var dealers = xml.documentElement.getElementsByTagName('dealer');
    map.clearOverlays();

    var sidebar = document.getElementById('sidebar');
    sidebar.innerHTML = '';
    if (dealers.length == 0) {
      sidebar.innerHTML = 'No dealers are within that radius.';
      map.setCenter(new GLatLng(40, -100), 3);
      return;
    }

    var bounds = new GLatLngBounds();
    for (var i = 0; i < dealers.length; i++) {
      var company = dealers[i].getAttribute('company');
      var address = dealers[i].getAttribute('address');
			var phone = dealers[i].getAttribute('phone');
      var distance = parseFloat(dealers[i].getAttribute('distance'));
      var point = new GLatLng(parseFloat(dealers[i].getAttribute('lat')),
                              parseFloat(dealers[i].getAttribute('lng')));
         
      var marker = createMarker(point, company, address, phone);
			map.addOverlay(marker);
      var sidebarEntry = createSidebarEntry(marker, company, address, phone, distance);
      sidebar.appendChild(sidebarEntry);
      bounds.extend(point);
		}
    map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));
	});
}

function createMarker(point, company, address, phone) {
	var marker = new GMarker(point);
  var html = '<b>' + company + '</b> <br/>' + phone + '<br/>' + address;
  GEvent.addListener(marker, 'click', function() {
  	marker.openInfoWindowHtml(html);
  });
 	return marker;
}

function createSidebarEntry(marker, company, address, phone, distance) {
  var div = document.createElement('div');
  var html = '<b>' + company + '</b> (' + distance.toFixed(1) + ' miles)<br/>' + phone + '<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;
}
//]]>