// JavaScript Document
var map = null;
var arrMarkers = new Array();

$(document).ready( function() {

	$.ajaxSetup({
		type: "POST", 
		url: "/distributor_map.asp", 
		dataType: "xml", 
		async: false				
	});
	
	$("#selType").change( function() {
		var type = $(this).val();
		if (type != '') {
			$("#selRegion, #selCountry").attr("disabled", "disabled");
			$.ajax({
				data: "Type="+type, 
				success: function(xml) { resetMap(); populateRegions(xml); $("#selRegion").attr("disabled", ""); }, 
				error: function() { alert("AJAX failed ??"); $("#selRegion").attr("disabled", ""); }	
			});
		}
	});
	
	$("#selRegion").change( function() {
		var type = $("#selType").val();
		var region = $(this).val();
		if (region != '') {
			$("#selCountry").attr("disabled", "disabled");
			$.ajax({
				data: "Type="+type+"&Region="+region, 
				success: function(xml) { 
					getCountries(type, region); 
					updateMap(xml); }, 
				error: function() { alert("AJAX failed ??"); $("#selCountry").attr("disabled", ""); }	
			});
		}
	});	
	
	$("#selCountry").change( function() {
		var type = $("#selType").val();
		var region = $("#selRegion").val();
		var country = $(this).val();
		if (country != '') {
			$.ajax({
				data: "Country="+country+"&Type="+type+"&Region="+region, 
				success: function(xml) { updateMap(xml); }, 
				error: function() { alert("AJAX failed ??"); }	
			});
		}
	});

	initMap();
	
});

function initMap() {
		map = new GMap2(document.getElementById("map"));
		map.addControl(new GLargeMapControl());
		map.addControl(new GMapTypeControl());
		
		resetMap();
}

function resetMap() {
		map.clearOverlays();
		var loc = new GLatLng(0, 0);			
		map.setCenter(loc, 1);
		arrMarkers = new Array();
}

function locAddress(lat, lng, address) {
	
	var loc = new GLatLng(lat, lng);
	var marker = new GMarker(loc);
	
	map.addOverlay(marker);
	
	GEvent.addListener(marker, "click", function() {    
		marker.openInfoWindowHtml(address);  
	});
	
	arrMarkers.push(marker);
}

function getCountries(type, region) {
	$.ajax({
		data: "Type="+type+"&Filter="+region, 
		success: function(xml) { populateCountries(xml); $("#selCountry").attr("disabled", ""); }, 
		error: function() { alert("AJAX failed ??"); }	
	});	
}

function populateRegions(xml) {
		$("#selRegion").removeOption(/./).addOption("", "-- Choose a region --", true);
		$("row", xml).each( function(i) { $("#selRegion").addOption($(this).attr("Region_id"), $(this).attr("Region"), false); });
}

function populateCountries(xml) {
		$("#selCountry").removeOption(/./).addOption("", "-- Choose a country --", true);
		$("row", xml).each( function(i) { $("#selCountry").addOption($(this).attr("Country_id"), $(this).attr("Country"), false); });	
}

function updateMap(xml) {
		resetMap();
		
		$("#results, #addresses").empty();
		
		var i = 0;
		var latlng = new Array();
		
		$("row", xml).each( function(i) { 

			var web = $(this).attr("Website");
			if (web != "n/a") { web = '<a href="http://' + web + '" target="_blank">' + web + '</a>'; }
			
			$("#results").append('<li><a href="#maptop" class="result" rel="'+(i)+'">('+$(this).attr("ID")+') '+$(this).attr("Company")+', '+$(this).attr("Country")+'</a></li>');
			$("#addresses").append('<div id="addr-'+i+'"><p>('+$(this).attr("ID")+') <strong>'+$(this).attr("Company")+'</strong><br/>'+$(this).attr("geo_address_")+'<br/><strong>Tel:</strong> '+$(this).attr("Tel")+'<br/><strong>Web:</strong> '+web+'</p></div>');
			locAddress($(this).attr("lat"), $(this).attr("lng"), $("#addr-"+i).html()); 			
			
			latlng[i] = new GLatLng($(this).attr("lat"), $(this).attr("lng"));

		});
		
		$(".result").click( function() {  
			var x = $(this).attr("rel");			
			var addr = $("#addr-"+x).html();
			map.setCenter(arrMarkers[x].getLatLng(), 4);
			arrMarkers[x].openInfoWindowHtml(addr);
			return true;
		});
		
		
		var latlngbounds = new GLatLngBounds();
		for(var i = 0; i < latlng.length; i++)
		{
			latlngbounds.extend(latlng[i]);
		}
		var mapzoom = 5;
		
		if(map.getBoundsZoomLevel(latlngbounds) > 5) { mapzoom = 5; } else { mapzoom = map.getBoundsZoomLevel(latlngbounds); }
		map.setCenter(latlngbounds.getCenter(), mapzoom);
}