// ------------------------------------------------------------------------------------------------- //
// Fonction du site																					 //
// ------------------------------------------------------------------------------------------------- //

var selectedLayers = 0x0;
var selectedId = new Array;
var currentCat = 1;
var currentAction = '';

function command(cmd, param1, param2) {
	currentAction = cmd;
	switch(cmd.toUpperCase()) {
		case 'ADDLAYER':
			var value = parseInt(param1);
			if ((selectedLayers & value) == 0) {
				selectedLayers |= value;
				selectedId.push(param2);
				$('Check' + param2).src = 'images/check.gif';
			} else {
				selectedId = deleteFromArray(selectedId, param2);
			//	deleteElements(param2);
				selectedLayers ^= value;
				$('Check' + param2).src = 'images/uncheck.gif';
			}

			command('LoadMarkers');
			break;
			
		case 'TOGGLE':
			if (param1!=currentCat) {
				$('Cat' + currentCat).style.display = 'none';
				$('Cat' + param1).style.display = '';
				currentCat = param1;
			}
			break;
			
		case 'CHANGECITY':
			ajaxRequest("procs/psCommune.asp", "id=" + param1.value, linkHandler);
			break;
			
		case 'LOADMARKERS':
			if (isLoaded) {
				map.clearOverlays(); // Supprime les différents overlay de la carte
				$('marks').empty(); // Efface le div contenant les infos
		
				ajaxRequest("procs/psPoints.asp", 
							"id=" + $('City').value + 
							"&ids=" + selectedId.join()
							, linkHandler);
			}
			break;
	}
}

// Supprime un élément du tableau
function deleteFromArray(array, key) {
	for (el in array) {
		if (array[el] == key) {
			array.splice(el, 1);
			break;
		}
	}
	return array;
}

// Supprime les éléments d'une catégorie
function deleteElements(key) {
	var els = $$('#marks DIV');
	els.each(function(el) {
		var pt = el.id.indexOf('_');
		if (pt!=-1) {
			var id = el.id.substring(4, pt);
			alert(id + ' ' + key);
			if (id == key) el.remove();
		}
	});
}

// ------------------------------------------------------------------------------------------------- //
// Ajax																								 //
// ------------------------------------------------------------------------------------------------- //

function ajaxRequest(url, data, func) {
	var req = new Ajax(url, {
		onComplete: func,
		method: 'post',
		data: data
	});
	req.request();
}

function linkHandler(response) {
	var cmd = currentAction;
	
	var J = Json.evaluate(response);
	
	switch (cmd.toUpperCase()) {
		case 'LOADMARKERS':
			for (el in J) {
				var e = new Element('div');
				e.setHTML(J[el].data);
				e.injectInside($('marks'));
				
				addMarker(J[el].lat, J[el].lng, J[el].icon, e);
			}
			break;
		case 'CHANGECITY': // Change la position de la carte
			setPosition(J.lat, J.lng, 14);
			command('LoadMarkers');
			break;
	}
}

// ------------------------------------------------------------------------------------------------- //
// Google Map																						 //
// ------------------------------------------------------------------------------------------------- //

var map;
var defaultIcon;

function initialize() {
  		if (GBrowserIsCompatible()) { // Vérifie si l'API est compatible avec le navigateur
  			map = new GMap2(document.getElementById("map_canvas")); // Instancie une carte GMap
			map.addControl(new GLargeMapControl()); // Ajoute le contrôle de déplacement
			map.addControl(new GMapTypeControl()); // Ajoute le sélecteur de type de cartes
			map.addControl(new GScaleControl()); // Ajoute l'échelle
			map.addControl(new GOverviewMapControl()); // Ajoute la carte

			defaultIcon = new GIcon(); // Créé une icône pour le marqueur
			defaultIcon.image = "http://www.google.com/intl/fr_ALL/mapfiles/marker.png"; // Spécifie l'image
			defaultIcon.shadow = "http://www.google.com/intl/fr_ALL/mapfiles/shadow50.png"; // l'ombre
			defaultIcon.iconSize = new GSize(49, 57); // définie sa taille
			defaultIcon.shadowSize = new GSize(37, 34); // celle de l'ombre
			defaultIcon.iconAnchor = new GPoint(10, 34); // définie le point de l'ancre
			defaultIcon.infoWindowAnchor = new GPoint(10, 10); // le point d'ancrage de la fênêtre d'info
		
			command('changeCity', $('City')); // On se place sur la première ville
     	}
		
		window.onunload = GUnload;
}

function isLoaded() {
	return map.isLoaded();
}

function setPosition(lat, lng, zoom) {
	map.setCenter( // se positionne
		new GLatLng(lat, lng) // aux coordonnées suivantes
		, zoom // avec le zoom suivant
	);
	map.savePosition(); // Enregistre la position courante.
}

function setPositionPt(point, zoom) {
	map.setCenter( // se positionne
		point // aux coordonnées du point suivant
		, zoom // avec le zoom suivant
	);
	map.savePosition(); // Enregistre la position courante.
}

function setToAddress(address) {
	var geo = new GClientGeocoder(); // Créé l'instance d'une classe GClientGeocoder
	geo.getLatLng( // obtient les coordonnées
		address, // de l'adresse spécifié
		function(point) { // et la renvoi dans le callback suivant
			if (point) // si des coordonnées ont été trouvée
				setPositionPt(point);
		}
	);
}
	
function reset() {
	map.returnToSavedPosition(); // Permet de retourner au point enregistré par savePosition();
}

function addMarker(lat, lng, iconUri, div) {


	var icon = new GIcon(); // Créé une icône pour le marqueur
		icon.image = "http://parthenay.cartes.actisens.com/images/pictos/" + iconUri; // Spécifie l'image
		//icon.shadow = ""; // l'ombre
		icon.iconSize = new GSize(49, 57); // définie sa taille
		//icon.shadowSize = new GSize(37, 34); // celle de l'ombre
		icon.iconAnchor = new GPoint(18, 53); // définie le point de l'ancre
		icon.infoWindowAnchor = new GPoint(18, 53); // le point d'ancrage de la fênêtre d'info

	var marker = new GMarker( // Créé un marqueur
		new GLatLng(lat, lng), // à la position indiquée
		icon // avec l'icône suivant
	);
	
	map.addOverlay(marker); // l'ajoute à la carte
	
	GEvent.addListener( // ajoute un évènement
		marker, // sur le marqueur
		"click", // de type clic
		function () { // et appelle le callback suivant
			marker.openInfoWindow(div);
		}
	);
}

function deleteMarker(marker) {
	map.removeOverlay(marker)
}

window.onload = initialize; 
