/*
 Copyright 2008 Google Inc. 
 Licensed under the Apache License, Version 2.0: 
 http://www.apache.org/licenses/LICENSE-2.0 
*/
    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(54.5,-4), 5);		
		map.getPane(G_MAP_FLOAT_SHADOW_PANE).style.display = 'none' //remove bubble shadow
		//map.setUIToDefault(); // Reset UI
      }
    }
 var iAddress = '';
 
    function searchLocations() {
   	var location = document.getElementById('locationSelect').value;
	var addressinput = document.getElementById('addressInput');
	if (addressinput.value){iAddress = addressinput.value+', '+location;}
	else{iAddress = location;}
	geocoder.getLatLng(iAddress, function(latlng) {
       if (!latlng) {
         alert(iAddress + ': This location could not be found. Please check the spelling of the location or try an more generic search term.');
       } else {
         searchLocationsNear(latlng);
       }
     });
   }

   function searchLocationsNear(center) {
     var radius = document.getElementById('radiusSelect').value;
	 var hasAddress = 1;
	 if (!document.getElementById('addressInput').value){
	 	radius = 1000;
		hasAddress = 0;
	 	}
	 var dealertype = document.getElementById('dealertype').value;
	 var country = document.getElementById('locationSelect').value;
	 var searchUrl = 'service?action=dealersearch&hideresponse=1&lat=' + center.lat() + '&lng=' + center.lng() + '&radius=' + radius+ '&dealertype=' + dealertype + '&hasaddress=' + hasAddress + '&country=' + country;
     GDownloadUrl(searchUrl, function(data) {
       var xml = GXml.parse(data);
	   var redirect = xml.documentElement.getAttribute('redirect');
	   if (redirect!=0){
		   var wl = window.location;
		   window.location = wl.protocol+'//'+wl.hostname+'/'+_language+'/contact/#COUNTRY-'+redirect;
		   }
       var markers = xml.documentElement.getElementsByTagName('marker');
       map.clearOverlays();

       var sidebar = document.getElementById('sidebar');
       sidebar.innerHTML = '';
       if (markers.length == 0) {
         sidebar.innerHTML = '<p style="color:#fff;">No dealers were found within your search criteria. Please modify your search terms and try again.</p>';
		 alert('No dealers were found within your search criteria. Please modify your search terms and try again.');
         //map.setCenter(new GLatLng(40, -100), 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 phone = markers[i].getAttribute('phone');
		 var web = markers[i].getAttribute('web');
		 var dealertype = markers[i].getAttribute('dealertype');
         var distance = parseFloat(markers[i].getAttribute('distance'));
         var point = new GLatLng(parseFloat(markers[i].getAttribute('lat')),
                                 parseFloat(markers[i].getAttribute('lng')));
         
	 var marker = createMarker(point, name, address, phone, web, dealertype);
	 	 map.addOverlay(marker);
         var sidebarEntry = createSidebarEntry(marker, name, address, phone, dealertype, distance);
         sidebar.appendChild(sidebarEntry);
         bounds.extend(point);
       }
       map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));
     });
   }

    function createMarker(point, name, address, phone, web, dealertype) {
		var baseIcon = new GIcon();
		baseIcon.image = "../style/assets/gmaps/marker-t.png";
		if (dealertype == 'pro') {
			baseIcon.image = "../style/assets/gmaps/marker-pro.png";
		}
		baseIcon.shadow ="../style/assets/gmaps/marker-shadow-50.png";
		baseIcon.iconSize = new GSize(37, 34);
		baseIcon.shadowSize = new GSize(37, 34);
		baseIcon.iconAnchor = new GPoint(9, 34);
		baseIcon.infoWindowAnchor = new GPoint(9, 2);
		baseIcon.infoShadowAnchor = new GPoint(18, 25);
		var opts = {
			icon: new GIcon(baseIcon)
		};
	  var marker = new GMarker(point,opts);
	  var html = '<b>' + name + '</b> <br/>' + address + phone + '<br/><a href="http://'+web+'">'+web+'</a><br /><a href ="http://maps.google.com/maps?saddr='+iAddress+'&daddr='+point+'&hl='+ system.language+'" target="_blank">Get directions</a>';
	  
      GEvent.addListener(marker, 'click', function() {
        marker.openInfoWindowHtml(html);
		});
	  
      return marker;
    }

    function createSidebarEntry(marker, name, address, phone, dealertype, distance) {
      var div = document.createElement('div');
	  	div.setAttribute('class', 'dealerinfo '+dealertype); //Real browsers
		div.setAttribute('className', 'dealerinfo '+dealertype); //IE ;)
	  var html = '<b>' + name + '</b> (' + distance.toFixed(1) + ')<br/>' + address + phone;
      div.innerHTML = html;
	  GEvent.addDomListener(div, 'click', function() {
        GEvent.trigger(marker, 'click');
      });
      return div;
    }

(function($){
	$(load);
	$(window).unload(GUnload);	
})(jQuery);
