function FindDealer() {
	
}

var map;
var geocoder;
FindDealer.lat = null;
FindDealer.lng = null;
FindDealer.rad = null;
FindDealer.pid = null;
FindDealer.max = null;


FindDealer.initiateDealerMap = function(latitude, longitude, radius, prodId, max) {
	FindDealer.lat = latitude;
	FindDealer.lng = longitude;
	FindDealer.rad = radius;
	FindDealer.pid = prodId;
	FindDealer.max = max;
	$("#g_map_search_form").submit(FindDealer.getGeoCode);
	$(window).load(FindDealer.load);
};

FindDealer.getGeoCode = function(e){
	e.preventDefault();
	var address = $(this).find("input[name='search']").val();
	var theForm = this;
	geocoder.getLatLng(address,
			function(point) {
				if(!point){
					alert(address + " not found");
				} else {
					//we want to insert it as part of the form and submit.
					var output = '<input type="hidden" name="lat" value="' + point.lat() + '" />';
					output += '<input type="hidden" name="lng" value="' + point.lng() + '" />';
					$(theForm).find("fieldset").append(output);
					theForm.submit();
				}
			});
};

FindDealer.load = function() {
  if (GBrowserIsCompatible()) {
  	geocoder = new GClientGeocoder();
    map = new GMap2(document.getElementById('g_map'));
    map.addControl(new GSmallMapControl());
    map.addControl(new GMapTypeControl());
    map.setCenter(new GLatLng(40, -100), 4);
    FindDealer.searchLocationsNear();
  }
};

FindDealer.searchLocationsNear = function()
{
	//var searchUrl = 'find_dealer_xml.php?lat=' + FindDealer.lat  + '&lng=' + FindDealer.lng + '&rad=' + FindDealer.rad + '&pid=' + FindDealer.pid;
	var searchUrl = 'find_dealer_xml.php?lat=' + FindDealer.lat  + '&lng=' + FindDealer.lng + '&rad=' + FindDealer.rad + '&pid=' + FindDealer.pid + '&max=' + FindDealer.max;

	GDownloadUrl(searchUrl,
		function(data) {

			var xml = GXml.parse(data);
			var markers = xml.documentElement.getElementsByTagName('marker');
			map.clearOverlays();

		    var sidebar = document.getElementById('dealer_listing');
		    sidebar.innerHTML = '';

		    if (markers.length == 0)
		    {
		    	sidebar.innerHTML = '<b>No Results Found</b>';
		    	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 email   = markers[i].getAttribute('email');
				var url     = '<a class="find_dealer_url" href="'+markers[i].getAttribute('url')+'" target="_blank">' + markers[i].getAttribute('url') + '</a>';
				var distance = parseFloat(markers[i].getAttribute('distance'));
				var point = new GLatLng(parseFloat(markers[i].getAttribute('lat')), parseFloat(markers[i].getAttribute('lng')));

				var marker = FindDealer.createMarker(point, name, address, phone, email, url);
				map.addOverlay(marker);

				var sidebarEntry = FindDealer.createSidebarEntry(marker, name, address, distance, phone, email, url);
				sidebar.appendChild(sidebarEntry);
				bounds.extend(point);
				
				//CC - 2010-09-13 - Added limit of 10 items.
				//if (i == 9) i = markers.length;
			}

			map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));
		}
	);
};

FindDealer.createMarker = function(point, name, address, phone, email, url)
{
	var marker = new GMarker(point);
	var html = '<b>' + name + '</b> <br/>' + address + '<br/>Email: ' + email + '<br/>Telephone: ' + phone;
	if(email != '') html = html + "<br/>";
	html += url;

	GEvent.addListener(marker, 'click', function(){
		marker.openInfoWindowHtml(html);
	});
	return marker;
};


FindDealer.createSidebarEntry = function(marker, name, address, distance, phone, email, url)
{
	var div = document.createElement('div');

	var html = '<p class="listing"><b>' + name + '</b> (' + distance.toFixed(1) + ')<br />' + address + '<br />Email: ' + email + '<br/>Telephone: ' + phone;

	if(email != '') html = html + "<br/>";
	html += url + '</p>';

	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;
};


