//
// Google map support for store finder
//
var map = null;
var geocoder = null;
var mapCenterLat = 39.669586;
var mapCenterLon = -104.987840;
mapCenterLat = 40;
mapCenterLon = -100;

function initialize()
{
  if (GBrowserIsCompatible())
  {
    geocoder = new GClientGeocoder();
    map = new GMap2(document.getElementById('map'));
    map.addControl(new GSmallMapControl());
    map.addControl(new GMapTypeControl());
    map.setCenter(new GLatLng(mapCenterLat, mapCenterLon), 4);
  }
}

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

function searchLocationsNear(center)
{
   var radius = document.getElementById('radiusSelect').value;
   if (radius == null)
   {
     radius = 50;
   }
   var searchUrl = '/help/googleMarkers.html?lat=' + center.lat() + '&lon=' + 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(mapCenterLat, mapCenterLon), 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 point = new GLatLng(parseFloat(markers[i].getAttribute('lat')),
                                 parseFloat(markers[i].getAttribute('lng')));
         var phone = markers[i].getAttribute('phone');
         var marker = createMarker(point, name, address, phone);
         map.addOverlay(marker);
         var sidebarEntry = createSidebarEntry(marker, name, address, distance, phone);
         sidebar.appendChild(sidebarEntry);
         bounds.extend(point);
       }
       map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));
     });
}

function createMarker(point, name, address, phone) 
{
  var marker = new GMarker(point);
  var html = '<b>' + name + '</b> <br/>' + address;
  if (phone != null)
  {
    html += '<br/>' + phone;
  }
  GEvent.addListener(marker, 'click', function() {
    marker.openInfoWindowHtml(html);
  });
  return marker;
}

function createSidebarEntry(marker, name, address, distance, phone)
{
  var div = document.createElement('div');
  var html = '<b>' + name + '</b> (' + distance.toFixed(1) + ')<br/>' + address;
  if (phone != null)
  {
    html += '<br/>' + phone;
  }
  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 = '#B8C4E7';
  });
  GEvent.addDomListener(div, 'mouseout', function() {
    div.style.backgroundColor = '';
  });
  return div;
}