﻿//<![CDATA[

// Variables globales
var compteCont = 0;
var map;
var show_messages = 0; // bloque l'affichage des messages d'informations à l'initialisation de la carte
var markerOptions = [];

// Début ajout AbsysTech décembre 2010
// Variables javascripts
var AbsysTech = {
	position:null // Position initiale
};
// Fin modification


function debugText(texte) {
	// affiche des informations en italique dans <div id="debug">
	document.getElementById('debug').innerHTML = "<i>" + texte + "</i>";
}

function afficheMessage(texte) {
	// affiche en gras un message d'informations pour l'internaute dans <div id="msg">
	if (show_messages) { 
		document.getElementById('msg').innerHTML = "<b>" + texte + "<\/b>";
	}
}

function effaceMessage() {
	// vide la zone de message
	document.getElementById('msg').innerHTML = "&nbsp;";
}

function afficheNbConteneurs(nb) {
	// affiche un message concernant le nombre de conteneurs
	switch (nb) {
		case 0:
			afficheMessage("Pas de conteneur dans votre zone de recherche. Veuillez vous déplacer dans la carte ou changer le filtrage.");
			break;
		case 1:
			afficheMessage("1 conteneur trouv&eacute; dans votre zone de recherche");
			break;
		default:
			afficheMessage(nb + " conteneurs trouv&eacute;s dans votre zone de recherche");
	}
}


function showMap() {
	// masque le message d'attente et affiche la carte
	document.getElementById("loading_message").style.display = "none";
	document.getElementById("map_canvas").style.display = "";
}

function hideMap() {
	// masque la carte et affiche le message d'attente
	document.getElementById("map_canvas").style.display = "none";
	document.getElementById("loading_message").style.display = "";
}


function choixDuZoom(ctr) {
	// Cette fonction affiche la carte avec le niveau de zoom approprié

//	hideMap(); // cacher la carte le temps du traitement pour le confort visuel
// Finalement bugue avec Internet Explorer car renvoie de mauvaises coordonnées pour la carte.
 
	map.setCenter(ctr, ZOOM_DE_BASE); // centrer au point demandé avec le zoom par defaut
	// on appelle zoom.php qui renvoie au format XML le niveau de zoom approprié 
	var zoomurl = './include/zoom.php?lat=' + ctr.lat() + '&lng=' + ctr.lng() + '&' + boundsUrlExt();
	GDownloadUrl(zoomurl, function(data) {
		// traitement des sonnées XML
		var xml = GXml.parse(data);
		var nb = parseInt(xml.firstChild.firstChild.nodeValue); // extraction de la valeur du zoom
		if (nb < MINZOOM) {
			map.setCenter(ctr, MINZOOM);
//			afficheMessage("Il n'y a pas de conteneur à moins de 100 Km.");
		} else {
			map.setCenter(ctr, nb);
		}
	});// Fin de fonction chargement
//	setTimeout("showMap()",500);
// plus nécessaire, à cause du bug IE sur la fonction hideMap
}

function showAddress(zoneurbaine, rec) {
	// Début ajout AbsysTech décembre 2010
	// Stockage dans la base des requêtes effectuées par les clients
	GDownloadUrl("storeQueries.php", function(data) { },"q="+zoneurbaine);
	// Fin ajout AbsysTech

	// traite la requete (ville, code postal) entrée dans le champ de recherche
	show_messages = 1; //autorise l'affichage des messages d'informations
	if (geocoder) {
		geocoder.getLatLng(zoneurbaine + ", France", function(point) {
			if (!point) {
				alert(zoneurbaine + " n'a pas été trouvé");
			} else {
				// au dela des latitudes et longitudes françaises, on ne fait rien 
				if (point.lat() < 41 || point.lat() > 52 || point.lng() < -5 || point.lng() > 8) {
					alert(zoneurbaine + " n'a pas été trouvé");
				} else {
					choixDuZoom(point);
					chargement(); // affichage des conteneurs
				}
			}
		});
	}
}


function boundsUrlExt() {
	// renvoie une portion d'url contenant les bornes de la carte pour les appels à des fichiers php 
	var bds = map.getBounds();
	var swp = bds.getSouthWest();
	var nep = bds.getNorthEast();
	var urlext = 'minlat=' + swp.lat() + '&maxlat=' + nep.lat() + '&minlng=' + swp.lng() + '&maxlng=' + nep.lng() + '&relais_id=' + document.getElementById('relais_id_filter').value;
	return urlext;
}


function mouvement() {
	// Fonction déclenchée si la carte est modifiée par l'internaute
	var ctr = map.getCenter();
	// on appelle count.php qui renvoie au format XML le nombre de conteneurs pour la zone sélectionnée
	var counturl = './include/count.php?lat=' + ctr.lat() + '&lng=' + ctr.lng() + '&' + boundsUrlExt();
	GDownloadUrl(counturl, function(data) {
		var xml = GXml.parse(data); // parsing des données XML
		var nb = parseInt(xml.firstChild.firstChild.nodeValue); // extraction du nombre de conteneurs
		if (nb > MAXCONT) {
// Début ajout AbsysTech 10 janvier 2010
			map.clearOverlays(); // nettoyage de la carte
			show_messages = 1; //autorise l'affichage des messages d'informations
			afficheMessage("Les conteneurs ne sont pas visibles à cette altitude, vous devez zoomer pour voir tous les points.");
//			chargement(true); // affichage d'un nombre limité de conteneurs aléatoires
// Fin ajout AbsysTech
		} else {
			chargement(); // affichage des conteneurs
		}
	});
}


function createMarker(adresse, cp, ville, details, point, id_relais, contact) {
	// creation d'un marqueur et de sa fenêtre d'information 
	var marker = new GMarker(point,markerOptions[id_relais]);	
	var html = adresse + "<br/>" + cp + " " + ville+ "<br />"+details;
	
	// Début ajout AbsysTech décembre 2010
	// Ajout des onglets dans infoWindow Gmap v2
	var infoTabs = [ new GInfoWindowTab("Adresse", html), new GInfoWindowTab("Contact", contact)];		
	GEvent.addListener(marker, 'click', function() {
		marker.openInfoWindowTabsHtml(infoTabs);
	});
	if (AbsysTech && AbsysTech.position && AbsysTech.position.lat==point.lat() && AbsysTech.position.lng==point.lng()) {
		// Si on est actuellement sur le point préselectionné, on affiche l'infobulle
		marker.openInfoWindowTabsHtml(infoTabs);
		// Puis on détruit la présélection
		AbsysTech.position = null;
	}
	// Fin ajout AbsysTech
	
	return marker;
}


function chargement(rand) {
	// affiche les conteneurs et leur nombre 
	// on appelle xml.php qui renvoie au format XML la liste des conteneurs pour la zone sélectionnée 
	var xmlurl = './include/xml.php?' + boundsUrlExt();
	
	// Ajout AbsysTech 10 Janvier 2011
	if (rand) {
		xmlurl += "&random=1";
	} else {
		effaceMessage();
	}
	// Fin ajout
	
	GDownloadUrl(xmlurl, function(data) {
		// initialisations 
		map.clearOverlays(); //nettoyage de la carte
		var bounds = map.getBounds();
		var nbrCnts = 0;
		// traitement des données XML
		var xml = GXml.parse(data); 
		var markers = xml.documentElement.getElementsByTagName("marker");
		// boucle de création et comptage des marqueurs
		for (var i = 0; i < markers.length; i++) {
			// extraction des informations 
			var adresse = markers[i].getAttribute("adresse");
			var cp = markers[i].getAttribute("cp");
			var ville = markers[i].getAttribute("ville");
			var details = markers[i].getAttribute("details");
			var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("lng")));
			var id_relais = parseInt(markers[i].getAttribute("id_relais"));
			var contact = markers[i].getAttribute("contact");
			// ajout d'un marqueur					
			if (bounds.contains(point) == true) {
				var marker = createMarker(adresse, cp, ville, details, point, id_relais, contact);
				map.addOverlay(marker);
				nbrCnts++;
			}
		}
		// affichage du nombre de marqueurs
		if (xmlurl.indexOf('random')==-1) {
			compteCont = nbrCnts;
			afficheNbConteneurs(compteCont);
		}
	});	
}// Fin de fonction chargement


function userMarker(usercoord) {
	// creation du marqueur de geolocalisation de l'internaute
	var usermarker = new GMarker(usercoord);
	map.addOverlay(usermarker);
	// fenetre d'info sur l'internaute
	GEvent.addListener(usermarker, 'click', function() {
		usermarker.openInfoWindowHtml(USER_IP);
	});
}


function localizeUser() {
		// Recherche et traitement des coordonnees du visiteur dans le fichier ip.xml généré par index.php

//		hideMap();	// On planque la carte le temps de traiter la localisation 
// Finalement bugue avec Internet Explorer car renvoie de mauvaises coordonnées pour la carte.

		GDownloadUrl("./xml/" + USER_IP + ".ip.xml", function(data) {
			var ipxml = GXml.parse(data);	// Parsing du fichier de geolocalisation du visiteur
			var coordnode = ipxml.documentElement.getElementsByTagName("gml:coordinates"); // Cherche les coordonnées
			if (coordnode.length) {
				// Si les coordonnées existent, on les utilise pour centrer la carte
				var coordarray = GXml.value(coordnode[0]).split(new RegExp(",", "g"));
				var usercoord = new GLatLng(coordarray[1], coordarray[0]);
				choixDuZoom(usercoord);	// Centrage de la carte
//				userMarker(map, usercoord);	// Marqueur visiteur
				chargement();	// Chargement de la carte des conteneurs
			} else {
				// Sinon, on affiche la carte de France
				var ctr = new GLatLng(47, 1.6);
				map.setCenter(ctr, 6);
			}			
//		setTimeout("showMap()",500);
// plus nécessaire, à cause du bug IE sur la fonction hideMap
		});
}


function setCustomIcons() {
	// Ajout de l'icone relais
	for (var i = 1; i <= NBLOGOS; i++) {
		icon = new GIcon(G_DEFAULT_ICON);
		icon.image = "img/logo_" + i + ".png";
	//	relaisIcon.image = "point.png";
	//	relaisIcon.iconSize = new GSize(11, 11);
		icon.shadowSize = new GSize(0, 0);
		markerOptions[i] = { icon:icon };
	}
}


function customizeMap() {
	// personnalisation de la carte
	var opts = { };
	// ajouts des types de cartes qui vont bien 
	var custommap1 = new GMapType(G_NORMAL_MAP.getTileLayers(), G_NORMAL_MAP.getProjection(), "Plan", opts);
	map.addMapType(custommap1);
	var custommap2 = new GMapType(G_SATELLITE_MAP.getTileLayers(), G_SATELLITE_MAP.getProjection(), "Satellite", opts);
	map.addMapType(custommap2);
	map.setMapType(custommap1); // choix de l'affichage par défaut 
	// bidouille pour enlever les typoes de cartes pré-existants
	var maps = map.getMapTypes();
	for (var m = 0; m < 3; m++) {
		map.removeMapType(maps[0]);
	}
	// ajout des contrôles utilisateur
	map.addControl(new GMapTypeControl()); // Choix du type de carte
	map.addControl(new GLargeMapControl3D()); // Outil de zoom et déplacement
	map.enableScrollWheelZoom(); // autorise le zoom avec la molette de la souris
	setCustomIcons();	// Ajout de l'icone Relais
}


// Début ajout AbsysTech décembre 2010
// Ajout gestion de la position données en paramètre
function initialize(position) {
	//Initialisation de la carte au chargement de la page
	if (GBrowserIsCompatible()) {
		map = new GMap2(document.getElementById("map_canvas"));	// Initialisation de la carte
		customizeMap();	// Initialisation de l'interface
		if (position && position.lat && position.lng) {
			AbsysTech.position=position;
			var usercoord = new GLatLng(AbsysTech.position.lat, AbsysTech.position.lng);
			choixDuZoom(usercoord);
		} else {
			localizeUser();	// Localisation du visiteur
		}
		GEvent.addListener(map, "moveend", function() {	mouvement(); }); //appelle la fonction mouvement après toute manipulation de la carte par l'utilisateur
		geocoder = new GClientGeocoder();
	}
}
// Fin modification

//]]>

