//<![CDATA[
var map;
var geocoder;
var server_name;
var gmaps_key;
var baseURL = 'includes/store_locator/includes/find_locations.php?method=';

$(document).ready(function(){
	$('#countrySelect').hide(0);
	gMapLoad();
	$('#ajax_div').hide();

	var stateSelect = $("#stateSelect");
	var countrySelect = $('#countrySelect');
	var address = $('#addressInput');
	
	//MM_preloadImages('assets/images/home_over.png','assets/images/aboutus_over.png','assets/images/contactus_over.png','assets/images/products_over.png','assets/images/faqs_over.png','assets/images/registration_over.png');
	
	$('#searchLocations').click(function(){
		if(!isEmpty($(address).val()) && ($(stateSelect).val() != 'no_state' || $(countrySelect).val() != 'no_country'))
			throwError('Please search by address or state');
		else{
			findMarkers();
		}
	});
	
	$(stateSelect).change(function(){
		if((!isEmpty($(address).val()) || $(countrySelect).val() != "no_country") && $(stateSelect).val() != 'no_state'){
			throwError("Please search by address or state");
			$(stateSelect).attr("value", "no_state");
		}
	});
	$(countrySelect).change(function(){
		if((!isEmpty($(address).val()) || $(stateSelect).val() != "no_state") && $(countrySelect).val() != 'no_country'){
			throwError("Please search by address or state");
			$(countrySelect).attr("value", "no_country");
		}
	});
});

function throwError(message){
	var error_div = $('#error_div');
	$(error_div).empty();
	$(error_div).css('display', '');
	$(error_div).append(message);
	$(error_div).fadeOut(3000);
}
	

function gMapLoad() {
  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);
	//GEvent.addListener(map, 'load', function(){
		//$('#searchLocations').attr('disabled', false);
	//});
  }
}

function doAddressSearch(address) {
	var radius = document.getElementById('radiusSelect').value;
	
	geocoder.getLatLng(address, function(latlng) {
		if (!latlng) {
			alert(address + ' not found');
		} 
		else  {
		 center = latlng;
		 var searchUrl = baseURL + 'address&lat=' + center.lat() + '&lng=' + center.lng() + '&radius=' + radius;
		 doSearch(searchUrl);
		}
	});
}

function findMarkers() {
	
	 
	if($('#stateSelect').val() != "no_state"){
		var searchUrl = baseURL + 'state&state=' + $('#stateSelect').val();
		doSearch(searchUrl);
	}
	else if($('#countrySelect').val() != 'no_country'){
		var searchUrl = baseURL + 'country&country=' + $('#countrySelect').val();
		doSearch(searchUrl);
	}
	else if(!isEmpty($('#addressInput').val())){
		doAddressSearch($('#addressInput').val());
	}
	else
		throwError('Please input an address or choose a state to conduct a search.');
		
}

function doSearch(searchUrl){
	var ajax_load = $("#ajax_div");
	$(ajax_load).show();
	GDownloadUrl(searchUrl, function(data) {
			$(ajax_load).hide();
			var xml = GXml.parse(data);
			var error = xml.documentElement.getElementsByTagName('error');
			if(error){
				var errorMessage = $(error).text();
				throwError(errorMessage);
			}
			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(40, -100), 4);
				return;
			}

			var bounds = new GLatLngBounds();
		   
			var count_div = document.createElement('div');
			var result_count = markers.length;
		   
			if(result_count > 1)
				var result_count_html = '<b>Found ' + result_count + ' results:</b><br/><br/>'; 
			else if (result_count != 0)
				var result_count_html = '<b>Found ' + result_count + ' result:</b><br/><br/>'; 
		   
			count_div.innerHTML = result_count_html;
		   
			sidebar.appendChild(count_div);
		   
			var result_num = 1;
			for (var i = 0; i < markers.length; i++) {
				var name = markers[i].getAttribute('name').replace('<%amp%>', '&');
				name = name.replace(/\\/g, '');
				var street = markers[i].getAttribute('street').replace('<%amp%>', '&');
				var city = markers[i].getAttribute('city');
				var state = markers[i].getAttribute('state');
				var zip = markers[i].getAttribute('zip');
				var address = markers[i].getAttribute('address');
				var email = markers[i].getAttribute('email');
				var parts_manager = markers[i].getAttribute('parts_manager');
				parts_manager = parts_manager.replace(/\\/g, '');
				var service_manager = markers[i].getAttribute('service_manager');
				service_manager = service_manager.replace(/\\/g, '');
				var full_phone = markers[i].getAttribute('phone');
				var phone1 = full_phone.substr(0, 3);
				var phone2 = full_phone.substr(3, 3);
				var phone3 = full_phone.substr(6, 4);
				var phone = new Array(phone1, phone2, phone3);
				
				var full_fax = markers[i].getAttribute('fax');
				var fax1 = full_fax.substr(0, 3);
				var fax2 = full_fax.substr(3, 3);
				var fax3 = full_fax.substr(6, 4);
				var fax = new Array(fax1, fax2, fax3);
				 
				var d_dealer = markers[i].getAttribute('d_dealer');
				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, street, city, state, zip, phone, fax, email, parts_manager, service_manager, d_dealer);
				map.addOverlay(marker);
				var sidebarEntry = createSidebarEntry(marker, name, street, city, state, zip, distance, phone, fax, email, parts_manager, service_manager, d_dealer, result_num);
				result_num++;
				sidebar.appendChild(sidebarEntry);
				bounds.extend(point);
			}
			map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));
			if(result_count == 1)
				map.setZoom(15);
		});
}

function createMarker(point, name, street, city, state, zip, phone, fax, email, parts_manager, service_manager, d_dealer) {
  var marker = new GMarker(point);
	if(!isEmpty(email))
		email = '<br/>' + email;
	if(!isEmpty(parts_manager))
		parts_manager = '<br/>Parts Manger: ' + parts_manager;
	if(!isEmpty(service_manager))
		service_manager = '<br/>Service Manager: ' + service_manager;
	if(!isEmpty(phone[0]))
		phone = '<br/>Phone: ' + phone[0] + '-' + phone[1] + '-' + phone[2];
	else
		phone = '';
	if(!isEmpty(fax[0]))
		fax = '<br/>Fax: ' + fax[0] + '-' + fax[1] + '-' + fax[2];
	else
		fax = '';
  var html = '<b>' + name + '</b> <br/>' + street + '<br/>' + city + ', ' + state + ' ' + zip + email + parts_manager + service_manager + phone + fax;
  
  if(d_dealer == '1')
	html = html + '<br/><span class="maphead">4-Diamond Dealer <img src="assets/images/fourdiamond.png" align="absmiddle"></span><br/>';
	
  GEvent.addListener(marker, 'click', function() {
	marker.openInfoWindowHtml(html);
  });
  return marker;
}

function createSidebarEntry(marker, name, street, city, state, zip, distance, phone, fax, email, parts_manager, service_manager, d_dealer, result_num) {
	if(!isEmpty(email))
		email = '<br/>Email: ' + email;
	if(!isEmpty(parts_manager))
		parts_manager = '<br/>Parts Manager: ' + parts_manager;
	if(!isEmpty(service_manager))
		service_manager = '<br/>Service Manager: ' + service_manager;
	if(!isEmpty(phone[0]))
		phone = '<br/>Phone: ' + phone[0] + '-' + phone[1] + '-' + phone[2];
	else
		phone = '';
	if(!isEmpty(fax[0]))
		fax = '<br/>Fax: ' + fax[0] + '-' + fax[1] + '-' + fax[2];
	else
		fax = '';
	var div = document.createElement('div');
	var html = '<b>Result ' + result_num + '<br/><span class="coname">' + name + '</span></b>';
	if(!isNaN(distance.toFixed(1)))
		html = html + '(' + distance.toFixed(1) + 'mi)';
	html = html + '<br/>'; 
	  
	if(d_dealer == '1')
		html = html + '<span class="maphead">4-Diamond Service Center<img src="assets/images/fourdiamond2.png" align="absmiddle"></span><br/>';

	var html = html + street + '<br/>' + city + '<br/>' + state + ' ' + zip + phone + fax + email + parts_manager + service_manager;
		
	div.innerHTML = html;
	div.style.cursor = 'pointer';
	div.style.marginBottom = '5px';
	div.style.borderBottom = '1px dotted #ebebeb';
	div.style.paddingBottom = '5px';
	GEvent.addDomListener(div, 'click', function() {
		GEvent.trigger(marker, 'click');
	});
	GEvent.addDomListener(div, 'mouseover', function() {
		div.style.backgroundColor = '#333';
	});
	GEvent.addDomListener(div, 'mouseout', function() {
		div.style.backgroundColor = '#313030';
	});
	return div;
}


function isEmpty( inputStr ){ 
	if (null == inputStr || "" == inputStr)
	{ 
		return true;
	}
	return false; 
}
