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);
    gdir = new GDirections(map, document.getElementById("directions"));
  }
}


function searchLocations() {
 var address = (document.getElementById('addressInput').value + ' ' + document.getElementById('zipInput').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 = 'search_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 = '<span class="error">No results found. Please refine your search by increasing your distance.</span>';
     map.setCenter(new GLatLng(40, -100), 4);
     return;
   }

   var bounds = new GLatLngBounds();
   for (var i = 0; i < markers.length; i++) {
     var id = markers[i].getAttribute('id');
     var name = markers[i].getAttribute('dealer');
     var address = markers[i].getAttribute('address');
     var city_state = markers[i].getAttribute('city_state');
     var zip_code = markers[i].getAttribute('zip_code');
     var phone = markers[i].getAttribute('phone');
     var url = markers[i].getAttribute('url');
     var distance = parseFloat(markers[i].getAttribute('distance'));
     var point = new GLatLng(parseFloat(markers[i].getAttribute('latitude')),
                             parseFloat(markers[i].getAttribute('longitude')));
     
     var marker = createMarker(point, id, name, address, city_state, zip_code, phone, url);
     map.addOverlay(marker);
     var sidebarEntry = createSidebarEntry(marker, name, address, city_state, phone, distance);
     sidebar.appendChild(sidebarEntry);
     bounds.extend(point);
   }
   map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));
 });
}

function createMarker(point, id, name, address, city_state, zip_code, phone, url) {
  var marker = new GMarker(point);
  if (url.length > 0) {
      url_link = '<a href="http://'+url+'" target="_blank">Visit Website</a><br />';
  } else {
      url_link = '';
  }
  
  var html = '<div class="gmarker"><div id="dealerinfo"><span class="bigger pushy blue">' + name + '</span>' + address + '<br />' + city_state + ' ' + zip_code + '<br />' + phone +
             '</div><br />' + url_link + '<a onclick="javascript:showBox('+id+')" class="thickbox">Contact this Dealer</a><br /><br />' +
             '<span class="bigger blue">Get directions to this dealer:</span>' + '<br><b>Start address:</b><form action="javascript:getDirections()">' +
           '<input type="text" size="30" maxlength="40" name="saddr" id="saddr" value="" /><br>' +
           '<input value="Get Directions" type="submit"><br>' + '<input type="hidden" id="daddr" value="'+name+"@"+ point.lat() + ',' + point.lng() + '"/></div>' +
           '<div id="dealerinforeformatted" style="display: none;"><span class="bigger blue">' + name + '</span><br />' + address + ', ' + city_state + '<br />' + phone + '</div>';

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

  return marker;
}

function createSidebarEntry(marker, name, address, city_state, phone, distance) {
  var div = document.createElement('div');
  //var html = '<b>' + name + '</b> (' + distance.toFixed(1) + ')<br/>' + address;
  var html = '<span class="bigger blue">' + name + '</span><br />' + address + ', ' + city_state + '<br /><i>' + distance.toFixed(1) + ' miles</i> - ' + phone +
             ' <span class="smaller"><a>more info »</a></span>';
  div.innerHTML = html;
  div.style.cursor = 'pointer';
  div.style.marginBottom = '0px'; 
  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 getDirections() {
//alert("Mary KATE!!!");
  // ==== Set up the walk and avoid highways options ====
  var opts = {};
 // ==== set the start and end locations ====
 var saddr = document.getElementById("saddr").value
 var daddr = document.getElementById("daddr").value
 var dealerinfo = document.getElementById("dealerinforeformatted").innerHTML;
 gdir.load("from: "+saddr+" to: "+daddr, opts);
 document.getElementById("dealerdata").innerHTML = dealerinfo;
 document.getElementById("sidebar").style.display = 'none';
 document.getElementById("location").style.display = 'none';
 document.getElementById("directions").style.display = 'block';
}

function switchToSidebar() {
 document.getElementById("sidebar").style.display = 'block';
 document.getElementById("location").style.display = 'block';
 document.getElementById("directions").style.display = 'none';
 searchLocations();
}

function printMap() {
   window.print();
}

function showBox(id) {
   var url = 'contact.php?id=' + id + '&KeepThis=true&TB_iframe=true&height=500&width=600';
   tb_show("Contact Dealer", url, false);
}

function clearValues() {
   if(document.getElementById("addressInput").value == "city, state") {
	document.getElementById("addressInput").value = '';
   }
   if(document.getElementById("zipInput").value == "zip code") {
	document.getElementById("zipInput").value = '';
   }
}
