var map;
var geocoder;

function load() 
{
  if (GBrowserIsCompatible()) 
  {
		geocoder = new GClientGeocoder();

		map = new GMap2(document.getElementById('map'));
		map.addControl(new GSmallZoomControl());
		map.addControl(new GMenuMapTypeControl());
		map.setCenter(new GLatLng(60, -95), 3);
  }
}

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

function searchLocationsNear(center) 
{
 var radius = document.getElementById('radius_select').value;
 var searchUrl = 'searchcontroller.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 list_container = document.getElementById('dealer_list_container');

   list_container.innerHTML = '';

   if (markers.length == 0) 
   {
	 list_container.innerHTML = 'No results found.';
	 map.setCenter(new GLatLng(60, -95), 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') + ', ' + markers[i].getAttribute('province') + ' ' + markers[i].getAttribute('zip_code');
	 var distance = parseFloat(markers[i].getAttribute('distance'));
	 var point = new GLatLng(parseFloat(markers[i].getAttribute('lat')),
							 parseFloat(markers[i].getAttribute('lng')));
	 var telephone = markers[i].getAttribute('telephone');
	 var url = markers[i].getAttribute('url');
	
	 var marker = createMarker(point, name, address, telephone);

	 map.addOverlay(marker);

	 var list_view = createListView(marker, name, address, distance, telephone, url);
	 list_container.appendChild(list_view);

	 bounds.extend(point);
   }

   map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));

 });
}

function createMarker(point, name, address, telephone) 
{
  var marker = new GMarker(point);
  var html = '<b>' + name + '</b><br/><span style="font-color: #666; font-size: 12px;">' + address + '</span>' + '<br /><span style="font-color: #666; font-size: 12px;">' + telephone + '</span>';

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

  return marker;
}

function createListView(marker, name, address, distance, telephone, url) 
{
  var div = document.createElement('div');
		
  var left_cell = '<div style="font-weight: bold; color: #AA0706;">' + name + '</div>' +   
				  '<div style="font-weight: bold; color: #000;">' + telephone + '</div>' +
				  '<div style="font-weight: bold;"><a style="color: #D17B7A;" href="' + url + '">' + url + '</a></div>';

  var right_cell = address + ' (' + distance.toFixed(1) + ' km)';
	
  div.innerHTML = '<table><tr><td style="font-size: 12px; width: 250px;">' + left_cell + '</td><td style="font-size: 12px; color: #666; width: 262px;">' + right_cell + '</td></tr></table>';
	
  div.style.width = "512px";
  div.style.margin = "3px";
  div.style.cursor = 'pointer';

  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;
}

function enterKeyIsPressed(e)
{ 
	var characterCode = null;

	if(e && e.which)
	{ 
		//if which property of event object is supported (NN4)
		e = e
		characterCode = e.which //character code is contained in NN4's which property
	}
	else if (event)
	{
		e = event
		characterCode = e.keyCode //character code is contained in IE's keyCode property
	}

	return (characterCode == 13);
}