var map;

var imageRoot = "http://www.zonefivesoftware.com/WhereInTheWorld/images/";
var iconFilter = -1;
var currentIconSet = "";
var iconSize = 28;
var shadowSize = 38;
var pins = new Array();
var units = "km";

function load_pin(i) {
	var iconNum = parseInt(pin_text(i, "icon"));
	if (iconFilter != -1 && iconNum != iconFilter) return;
	
	var icon = new GIcon();
	icon.iconSize = new GSize(iconSize, iconSize);
	icon.iconAnchor = new GPoint(iconSize/2, iconSize/2);
	icon.infoWindowAnchor = new GPoint(15, 2);	
	
	icon.image = imageRoot+currentIconSet+pins[iconNum];
	if (shadowSize != 0) {
		if (iconNum != 0) {
			icon.shadowSize = new GSize(shadowSize, shadowSize);		
			icon.shadow = imageRoot+currentIconSet+"pin_shadow.png";
		}
	}	
	
	var marker = new GMarker(
		new GLatLng(eval(xml.documentElement.getElementsByTagName("lat")[i].childNodes[0].nodeValue),
			eval(xml.documentElement.getElementsByTagName("lng")[i].childNodes[0].nodeValue)),
			icon);
	var meters = parseInt(pin_text(i, "meters"));
	var km = Math.round(meters/1000*10)/10;
	var mi = Math.round(meters/1609.344*10)/10; 
	var distText = km + " kilometers";
	if (units == "mi") {
		distText = mi + " miles";
	}
	
	map.addOverlay(marker);
	GEvent.addListener(marker, "click", function() {
		var iconNum = parseInt(pin_text(i, "icon"));
		var userid = pin_text(i, "userid");
		var username = pin_text(i, "username");
		var date = pin_text(i, "date");
		var category = pin_text(i, "category");
		var location = pin_text(i, "location");
		var details = "<table class='infoBox'>";
			details += "<tr><td>";
			details += "<span class='label'>Athlete:</span> ";
			details += "<span class='athleteName'>";
			details += "<a href='http://www.zonefivesoftware.com/SportTracks/Forums/profile.php?mode=viewprofile&u=" + userid + "'>" + username + "</a></span>";
			details += "<br><span class='label'>Date:</span> <span class='activityDate'>" + date + "</span>";
			details += "</td>";
			details += "<td style='text-align:right'>";
			if (iconNum > 1) {
				details += "<a href='javascript: set_icon_filter(" + iconNum + ");'><img style='border:0' src='" + imageRoot + "4_" + pins[iconNum] + "' /></a>";
			} else {
				details += "&nbsp;";
			}
			details += "</td></tr>";
			details += "<tr><td colspan='2'><span class='activityCategory'>" + category + "</span></td></tr>";
			if (location != null) {
				details += "<tr><td colspan='2'><span class='activityLocation'>" + location + "</span></td></tr>";
			}
			if (km > 0) {			
				details += "<tr><td colspan='2'><span class='label'>Distance:</span> <span class='activityDistance'>" + distText + "</span></td></tr>";
			}
			details += "</table>";
		marker.openInfoWindowHtml(details);
	});
}

function pin_text(pin_num, property_name) {
	var node = xml.documentElement.getElementsByTagName(property_name)[pin_num].childNodes[0];
	if (node != null) {
		return node.nodeValue;
	} else {
		return null;
	}
}

function set_icon_filter(iconNum) {
	if (iconNum != iconFilter) {
		iconFilter = iconNum;
		load_map();
	}
}

function set_units(unitsType) {
	if (units != unitsType) {
		units = unitsType;
		load_map();
	}
}

function load_map() {
	pins = [
		"pin_any.png", //unspecified
		"pin_any.png",
		"pin_running.png",
		"pin_cycling.png",
		"pin_hiking.png",
		"pin_rowing.png",
		"pin_swimming.png",
		"pin_skiing.png",
	];
	iconSize = calc_icon_size();
	shadowSize = calc_shadow_size();
	map.clearOverlays();	
	for (var i = 1; i <= xml.documentElement.getElementsByTagName("wiwentry").length; i++) {
		load_pin(i-1);
	}
}

function init_map() {
	var locale = "";
	if(navigator.language) {
        locale=navigator.language;
    }  else if(navigator.userLanguage) {
        locale=navigator.userLanguage;
    }
    if (locale.toLowerCase()  == "en-us") {
    	units = "mi";
    }

	if (GBrowserIsCompatible()) {
		map = new GMap2(document.getElementById("map"));
		map.addMapType(G_PHYSICAL_MAP);
		map.addControl(new GMapTypeControl());
		map.addControl(new GLargeMapControl(),new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(10,30)));
		map.addControl(new GScaleControl(), new GControlPosition(G_ANCHOR_BOTTOM_LEFT, new GSize(68,6)));
		map.enableDoubleClickZoom();
		map.enableContinuousZoom();
		map.enableScrollWheelZoom();
		map.setCenter(new GLatLng(24, 12), 2);
		map.setMapType(G_PHYSICAL_MAP);

		GEvent.addListener(map,'zoomend',function(oldLevel, newLevel) {
			var iconSet = calc_icon_set();
			if (currentIconSet != iconSet) {
				currentIconSet = iconSet;
				load_map();
			}
		});							

		currentIconSet = calc_icon_set();
		GDownloadUrl('data.php', function(data, responseCode) {
			xml = GXml.parse(data);		
			load_map();
		});
	}
}

function calc_icon_set() {
	if (map.getZoom() < 2) {
		return "0_";
	} else if (map.getZoom() < 4) {
		return "1_";
	} else if (map.getZoom() < 6) {
		return "2_";
	} else if (map.getZoom() < 8) {
		return "3_";
	} else {
		return "4_";
	}
}

function calc_icon_size() {
	if (map.getZoom() < 2) {
		return 4;
	} else if (map.getZoom() < 4) {
		return 8;
	} else if (map.getZoom() < 6) {
		return 14;
	} else if (map.getZoom() < 8) {
		return 20;
	} else {
		return 28;
	}
}

function calc_shadow_size() {
	if (map.getZoom() < 2) {
		return 0;
	} else if (map.getZoom() < 4) {
		return 0; //11;
	} else if (map.getZoom() < 6) {
		return 19;
	} else if (map.getZoom() < 8) {
		return 27;
	} else {
		return 38;
	}
}