// written by JaxCore (www.jaxcore.com)

showall = false;

//PopoverWindow.setPath('popoverwindow/');
var citytheme = {"width":"435","height":"430","left":"","top":"","title":"City Picker","icon":"browse","showClose":true,"drag":true,"resize":true,"roundedCorners":true,"scrolling":true,"fadeIn":true,"fadeOut":true,"overlayClose":true,"titleFont":"sans-serif","titleSize":"9pt","titleWeight":"normal","titleColor":"000000","titlePadding":"0","windowColor":"CCCCCC","windowPadding":"0","pageBorderSize":"0","pageBorderColor":"FCF5ED","pageColor":"FFFFFF","overlayColor":"000000","overlayOpacity":"0.7"};

function createCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function eraseCookie(name) {
	createCookie(name,"",-1);
}

if (geolocation==null) {
	var gc = readCookie('geolocation');
	if (gc) geolocation = transform.string2json(gc);
}

jaxscript.run(function() {
	if (geolocation==null) {
		PopoverWindow.show('dealers/citypicker.html',citytheme);
	}
});

window.onload = initialize;
window.onunload = GUnload;

var degee2radian = function(d) {
	return d * Math.PI / 180;
}

function getDistance(lat1,lon1) {
	if (!geolocation) return 0;
	var lat2 = geolocation.latitude;
	var lon2 = geolocation.longitude;
	var R = 6371; // km
	var dLat = degee2radian(lat2-lat1);
	var dLon = degee2radian(lon2-lon1); 
	var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
			Math.cos(degee2radian(lat1)) * Math.cos(degee2radian(lat2)) * 
			Math.sin(dLon/2) * Math.sin(dLon/2); 
	var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
	var d = R * c;
	return d;
}


// 3 = 
// 4 = 500
// 5 = 250
// 6 = 120
// 7 = 80
// 8 = 40
// 9 = 20
// 10 = 10
// 11 = 5
// 12 = 2
// 13 = 1

var map = null;
function initialize() {
	if (GBrowserIsCompatible()) {
		map = new GMap2(document.getElementById("map_canvas"));
		map.setCenter(new GLatLng(45,-95), 3);
		map.setUIToDefault();
		
		setGeoLocation(geolocation);
		//else map.setCenter(new GLatLng(45,-95), 3);
		
		
		
	}
}

function changeLocation() {
	PopoverWindow.show('dealers/citypicker.html',citytheme);
}

youarehere = null;
function setGeoLocation(geo, countryCode) {
	
	if (youarehere) youarehere.remove();
	for (var i=0;i<markers.length;i++) {
		markers[i].remove();
	}
	markers = [];

	geolocation = geo;

	if (geolocation) {

		style.display('logo_ca',countryCode=='CA')
		style.display('logo_us',countryCode!='CA')	
		
		addDealers();
		
		var baseIcon = new GIcon(G_DEFAULT_ICON);
		
		var icon = new GIcon(baseIcon);
		icon.image = "http://maps.google.com/mapfiles/arrow.png";
		var markerOptions = { icon:icon };

		/*youarehere = new GMarker(new GLatLng(geolocation.latitude, geolocation.longitude),markerOptions);
		GEvent.addListener(youarehere, 'click', function() {
			youarehere.openInfoWindowHtml("<h1>You Are Here<\/h1>");
			//<p><a href=\"javascript:\" onclick=\"changeLocation()\">Change Your Location</a>");
		});
		map.addOverlay(youarehere);*/
		
		var zoom = 3;
		if (avgDistance<600) zoom = 4;
		if (avgDistance<300) zoom = 5;
		if (avgDistance<150) zoom = 6;
		if (avgDistance<100) zoom = 7;
		if (avgDistance<50) zoom = 8;
		if (avgDistance<25) zoom = 9;
		if (avgDistance<12) zoom = 10;
		if (avgDistance<6) zoom = 11;
		if (avgDistance<3) zoom = 12;
		if (avgDistance<2) zoom = 13;
		
		map.setCenter(new GLatLng(geolocation.latitude,geolocation.longitude), zoom);

		//youarehere.openInfoWindowHtml("<h1>You Are Here<\/h1>");
		//<p><a href=\"javascript:\" onclick=\"changeLocation()\">Change Your Location</a>");
	}

}

var maxDealers = 15;

var distances = [];
var totalDistance = 0;

var shownDealers = [];

var avgDistance = 0;

var alpha = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
var letterCount = 0;
function getMarkerLetter(letter) {
	letter = alpha.charAt(letterCount);
	letterCount++;
	if (letterCount>=25) letterCount = 0;
	return letter;
}

var markers = [];
function addDealers() {
	var d,letter;
	var str = '';
	
	for (var i=0; i<dealers.length; i++) {
		d = dealers[i];
		d.distance = getDistance(d.latitude,d.longitude);
		
		if (d.country_code=='US') d.country_name = 'United States';
		if (d.country_code=='CA') d.country_name = 'Canada';
		if (d.country_code=='UK') d.country_name = 'United Kingdom';
		
	}
	dealers.sort(function(a,b) {
		return a.distance - b.distance;
	});
	
	for (var i=0; i<dealers.length; i++) {
		d = dealers[i];
		
		if (!showall) {
			if (dealers[i].city_name == geolocation.city) {}  // if city is the same show it
			else if (i>=maxDealers) continue;
		}
		
		d.idx = i;
		shownDealers.push(d);
		
		letter = getMarkerLetter();

		var baseIcon = new GIcon(G_DEFAULT_ICON);
			baseIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
		baseIcon.iconSize = new GSize(20, 34);
		baseIcon.shadowSize = new GSize(37, 34);
		baseIcon.iconAnchor = new GPoint(9, 34);
		baseIcon.infoWindowAnchor = new GPoint(9, 2);

		var letteredIcon = new GIcon(baseIcon);
		letteredIcon.image = "http://www.google.com/mapfiles/marker" + letter + ".png";
		var markerOptions = { icon:letteredIcon };

		var mkr = new GMarker(new GLatLng(d.latitude, d.longitude),markerOptions);
		markers.push(mkr);
		GEvent.addListener(mkr, 'click', clickHandler);
		map.addOverlay(mkr);
		
		str += '<div class="dealer" id="dealer_'+i+'">';
		str += '<a class="gicon" href="javascript://" onclick="return showInfo('+i+');"><img src="'+markerOptions.icon.image+'" width="20" height="34" border="0" align="top"></a>';
		str += '<a class="dealer" href="javascript://" onclick="return showInfo('+i+');">'+d.dealer_name+'</a>';
		str += '<ul class="location">';
		if (d.address1) str += '<li>'+d.address1+'</li>';
		if (d.address2) str += '<li>'+d.address2+'</li>';
		if (d.address3) str += '<li>'+d.address3+'</li>';
		str += '<li>'+d.city_name+', '+d.state+' '+d.zipcode+'</li>';
		str += '<li>'+d.phone+' </li>';
		str += '</ul>';
		str += '</div>';
		
		distances.push(d.distance);
	}
	
	document.getElementById("dealer_wrap").innerHTML = str;
	
	var lats = [];
	var longs = [];
	var total = 0;
	var d;
	for (var i=0; i<shownDealers.length; i++) {
		total += shownDealers[i].distance;
		dom.addEvent('dealer_'+shownDealers[i].idx,'click',dealerClick);
		
	}
	avgDistance = total / shownDealers.length;
}

function getAddress(dealer) {
	return getStreetAddress(dealer)+', '+dealer.city_name+', '+dealer.state+', '+dealer.country_name;
}

function getStreetAddress(dealer) {
	if (dealer.address3!='') {
		if (dealer.address3.indexOf("P.O.")>-1) {
			return getStreetAddress2(dealer);
		}
		return dealer.address3;
	}
	else return getStreetAddress2(dealer);
}

function getStreetAddress2(dealer) {
	if (dealer.address2!='') {
		if (dealer.address2.indexOf("P.O.")>-1) {
			return dealer.address1;
		}
		return dealer.address2;
	}
	else return dealer.address1;
}

function dealerClick(e) {
	var src = dom.eventTarget(e);
	if (src.tagName!='DIV') src = dom.findParent(src,'DIV');
	if (src.id) {
		var i = parseInt(src.id.substring(src.id.indexOf('_')+1));
		showInfo(i);
	}
}

function clickHandler(latlng) {
	var d;
	for (var i=0; i<dealers.length; i++) {
		d = dealers[i];
		if (d.latitude == latlng.lat() && d.longitude == latlng.lng()) {
			showInfo(i);
			break;
		}
	}
}


var selectedDiv = null;
function showInfo(i) {
	document.body.scrollTop = 0;
	
	if (selectedDiv) selectedDiv.className = 'dealer';
	selectedDiv = dom.id('dealer_'+i);
	selectedDiv.className = 'dealer_selected';
	
	var d = dealers[i];
	map.panTo(new GLatLng(d.latitude, d.longitude));
	setTimeout('map.setZoom(15)', 500);
	
	var source_address = '';
	if (geolocation) source_address = geolocation.city+', '+geolocation.region+', '+geolocation.country_name;
	
	var content = '<h1 style="width:200px">'+d.dealer_name+'</h1><p>';
	if (d.address1) content += d.address1+'</br>';
	if (d.address2) content += d.address2+'</br>';
	if (d.address3) content += d.address3+'</br>';
	content += d.city_name+', '+d.state+' '+d.zipcode+'</br>';
	if (d.phone) content += 'phone: '+d.phone+'</br>';
	content += '<br><a href="http://www.google.com/maps?daddr='+encodeURIComponent(getAddress(d))+'&saddr='+encodeURIComponent(source_address)+'" target="_blank" class="directions">get directions to here</a></p>';
	//content = content.replace('"','\"');
	
	setTimeout(function() {
		map.openInfoWindowHtml(new GLatLng(d.latitude, d.longitude), content);
	},700);
	return false;
}
