var pools;

var map;
var geocoder;


function XMLresult (xml, n, field){
	var element = xml.documentElement.getElementsByTagName(field)[n].firstChild;
	
	if (element){
		return element.nodeValue;
	}else{
		return '';
	}
}


function XMLcount (xml){
	return xml.documentElement.getElementsByTagName('item').length;
}


function CapitalCitiesCache() {
	GGeocodeCache.apply(this);
}


// Builds an array of geocode responses for the 5 cities.
function loadList (type, thread){
	var xhr_object = null;

	// Firefox
	if (window.XMLHttpRequest){
		xhr_object = new XMLHttpRequest(); 
	} else 
	// Explorer
	if (window.ActiveXObject){
		xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
	}
	// XMLHttpRequest non supporté
	else {
		alert("Votre navigateur ne supporte pas cette fonction !");
	} 

	xhr_object.open("POST", "inc/tools/map_requests.php", true); 

	xhr_object.onreadystatechange = function () {
		if (xhr_object.readyState == 4){
			xml = xhr_object.responseXML;
			
			pools = new Array (XMLcount (xml));
			
			for (var n = 0; n < XMLcount (xml); n ++){
				pools[n] ={
					adress: XMLresult (xml, n, 'adress'),
					title: XMLresult (xml, n, 'title'),
					infos: XMLresult (xml, n, 'adress'),
					thread: XMLresult (xml, n, 'thread'),
					id: XMLresult (xml, n, 'id')
				};
			}
			
			CapitalCitiesCache.prototype = new GGeocodeCache();
			
			CapitalCitiesCache.prototype.reset = function() {
				GGeocodeCache.prototype.reset.call(this);
				for (var i in pools) {
					this.put(pools[i].adress, pools[i]);
				}
			}
			
			map = new GMap2(document.getElementById("map"));
			map.setCenter(new GLatLng(47.2, 2.2), 5);
			map.addControl(new GLargeMapControl());
			geocoder = new GClientGeocoder();
			geocoder.setCache(new CapitalCitiesCache());
			
			for (var i in pools) {
				findCity (i);
			}
		}
	}

	xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	xhr_object.send ('type=' + type + '&thread=' + thread);
}

function findCity(n) {
	showAddress (pools[n].adress, '<b>' + pools[n].title + '</b><br>' + pools[n].adress + '<br><br><i><a href="index.php?t=' + pools[n].thread + '&id=' + pools[n].id + '">>> voir la fiche</a></i>');
}

function showAddress(address, text) {
	if (geocoder) {
		geocoder.getLatLng(
			address,
			function(point) {
				if (!point) {
					//~ document.getElementById("mapinfos").innerHTML = document.getElementById("mapinfos").innerHTML + '<br><b>Impossible de Localiser :</b> ' + address;
				} else {
					// rajoute un marker sur la carte
					var marker = createMarker(point, text);
					map.addOverlay(marker);
				}
			}
		);
	}
}

function showCloseAddress (address, text) {
	if (geocoder) {
		geocoder.getLatLng(
			address + ' france',
			function(point) {
				if (!point) {
					//~ mapError ("<b>Impossible de Localiser :</b></br>" + address);
				} else {
					map.setCenter(point, 15);
					
					// rajoute un marker sur la carte
					var marker = createMarker(point, text);
					map.addOverlay(marker);
				}
			}
		);
	}
}

function createMarker(point, text) {
	// créer un icon perso pour le marker
	var icon = new GIcon();
	icon.image = "http://infos.aqualike.com/img/layout/marker.png";
	icon.shadow = "http://infos.aqualike.com/img/layout/marker-shadow.png";
	icon.iconSize = new GSize(28, 42);
	icon.shadowSize = new GSize(42, 34);
	icon.iconAnchor = new GPoint(14, 38);
	icon.infoWindowAnchor = new GPoint(18, 5);

	// créer le marker
	var marker = new GMarker(point, icon);
	
	// rajoute le fait de pouvoir cliquer dessus pour faire apparaitre une fenetre
	GEvent.addListener(marker, "click", function() {
		marker.openInfoWindowHtml ("" + text + "");
	});
	
	return marker;
}

function load(address, text) {
	map = new GMap2(document.getElementById("map"));
	geocoder = new GClientGeocoder();
	map = new GMap2(document.getElementById("map"));
	geocoder = new GClientGeocoder();
	//~ map.addControl(new GSmallMapControl());
	map.addControl(new GLargeMapControl());
	
	showCloseAddress (address, text);
}

function mapError(text){
	var mapDiv = document.getElementById("map");
	
	mapDiv.innerHTML = "<p class=\"error\">" + text + "</p>";
	mapDiv.style.height = "auto";
	mapDiv.style.background = "#F9F9F9";
	mapDiv.style.border = "dashed 1px #CCCCCC";
}
