//<![CDATA[

if (GBrowserIsCompatible()) { // Méthode de l'API pour déterminer si le navigateur est compatible avec Google Maps
	
	var liste_points = ""; // Variable contenant la liste des points (affichée sous la carte)
	
	// Déclaration des tableaux qui vont contenir les différents points, descriptions...
	var gmarkers = []; // marqueurs (indéxé par i)
	var tgcad = []; // varaible qui va permettre de connaître l'état du contour pour l'id choisi: 0 = contour masqué, 1 = contour affiché (indexé par id)
	var contour = []; // variable contenant le polygone contour (indexé par id)
	var infobulle = []; // varaible contenant l'infobulle (indexé par id)
	
	var mm; // Variable qui va contenir le Marker Manager (nécessite d'être définie globalement)
	
	var i = 0; // Variable globale qui va permettre d'indexer les marqueurs sur la page (Attention: différent du numéro de fiche "id")
	
	
	
	// Icon pour marquer la position de l'internaute
	var icon_home = new GIcon();
	icon_home.image = "charte/img/marker_home.png";
	icon_home.iconAnchor = new GPoint(6, 20);
	icon_home.infoWindowAnchor = new GPoint(5, 1);
	icon_home.iconSize = new GSize(18, 15);
	
	// Icon pour marquer les marqueurs zoom en mode navigation
	var icon_zoom = new GIcon();
	icon_zoom.image = "charte/img/marker_zoom.png";
	icon_zoom.iconAnchor = new GPoint(6, 20);
	icon_zoom.infoWindowAnchor = new GPoint(5, 1);
	icon_zoom.iconSize = new GSize(18, 24);
		
	// Création de la carte
	var map; // Déclaration de l'objet map
	map = new GMap2(document.getElementById("mappy")); // Création de l'objet map dans la div "map"
	map.addControl(new GLargeMapControl()); // Ajout des contrôles de zoom et direction
	map.addControl(new GMapTypeControl()); // Ajout des 3 boutons (satellite, hybrid, carte)
	map.addMapType(G_PHYSICAL_MAP);

	/*var latville = 47.3272;
	var lonville = 5.04399;*/
	map.setCenter(new GLatLng(latville, lonville), 10, G_PHYSICAL_MAP); // Vue initiale: centrage, zoom et type (satellite)
	map.enableDoubleClickZoom(); // Active le double clic
	map.enableContinuousZoom(); // Active le zoom continu
//	map.enableScrollWheelZoom(); // Active le zoom avec la molette de souris (désactivé car nécessite un peu de prise en main: trop confus pour les utilisateurs)
	map.addControl(new GOverviewMapControl()); // Ajout de la mini-carte (en bas à droite)
	
	// AFFICHAGE RAYON
	var dijon = new GLatLng(latville, lonville); // On créé le couple de coordonnées
	var ray = parseFloat(5);
	var mon_marker = new GMarker(dijon,icon_home); // On créé le marqueur central
	map.addOverlay(mon_marker);
	cercle(dijon,ray);
	// FIN AFFICHAGE RAYON


	// Initialisation du geocoder (utile pour la recherche de type 3= près de chez moi)
	var geocoder = new GClientGeocoder();
	
	// Préchargement des images (pour que les marqueurs s'affichent dès que la navigation est lancée, sans qu'il y ait à attendre le chargement de toutes les miniatures)
	var i1 = new Image;
	i1.src = "charte/img/marker_zoom.png";
	var i2 = new Image;
	i2.src = "charte/img/picto2.png";
}
	
// Fonction de création de marqueur
function createMarker(type_recherche,point,id,denomination,titre_courant,commune,adresse,id_type,tel,fax,html,lien,email) {

	var icon_gd = new GIcon(); // Déclaration de l'objet
	//icon_gd.image = "pictos/picto1.png"; // Image utilisé
	icon_gd.image = "charte/pictos/picto-"+id_type+".gif"; // Image utilisé
	icon_gd.iconAnchor = new GPoint(6, 20); // Point d'ancrage de l'icone
	icon_gd.infoWindowAnchor = new GPoint(5, 1); // Point d'ancrage de l'infobulle
	icon_gd.iconSize = new GSize(18, 24); // Taille de l'image


	var marker = new GMarker(point,icon_gd); // Création d'un objet GMarker 
	
	if (titre_courant) { // S'il est disponible, on utilise le titre courant pour nommer le lieu
		var titre = titre_courant;
	}
	else { // Sinon on utilise la dénomination
		var titre = denomination;
	}
	
	// Création des infobulles avec onglets (infobulle[id][0],infobulle[id][1],infobulle[id][2]...)
	infobulle[id] = new Array();
	
	// Onglet 1 (nommé "Infos")
	infobulle[id][0] = new GInfoWindowTab ('Infos', '<table width="284px" border="0" cellspacing="2" cellpadding="0"><tr><td colspan="2"><b>'+titre+'</b></td></tr><tr><td>'+adresse+'<br />Tel: '+tel+'<br />Fax: '+fax+'<br /><a href="mailto:'+email+'" >'+email+'</a><br /><br />'+html+'<p><a href="javascript:void(0)" onclick="javascript:zoom('+i+')"><img src="charte/img/fleche.png" /> Zoom</a><br /><a href="'+lien+'" ><img src="charte/img/fleche.png" /> Fiche détaillée</a></p></td></tr></table>');
	// Onglet 2 (nommé "Bâtiment(s)") Cet onglet n'est pas utilisé pour l'instant
	infobulle[id][1] = new GInfoWindowTab ('Bâtiment(s)', '<br /><p><a href="javascript:void(0)" onclick="javascript:toggle_contour('+id+')"><img src="charte/img/fleche.png" /> Afficher / Masquer</a><br /></p>'); // Infobulle à décommenter pour rajouter un onglet
	
	// Fonction qui détecte un clique sur un marqueur, et qui ouvre l'infobulle (1 seul onglet est appelé dans notre cas)
	GEvent.addListener(marker, "click", function() {
		marker.openInfoWindowTabsHtml([infobulle[id][0]]); // ou marker.openInfoWindowTabsHtml([infobulle[id][0],infobulle[id][1]]); pour une double infobulle par exemple
	});
	
	gmarkers[i] = marker; // on enregistre le marker dans le tableau global gmarkers[] pour pouvoir le réutiliser dans la fonction cible_liste.
	
	tgcad[id] = 0; // initialisation de la variable qui décrit l'état du contour du bâtiment: 0 = masqué, 1 = affiché (masqué = 0 par défaut)
	i++; // On incrémente la variable d'indexation des marqueurs
	return marker; // On renvoit le marqueur
}
		
// Fonction d'appel de l'infobulle pour un clic dans la liste
function cible_liste(i,id) { // i est nécessaire en tant que référence du marqueur, id en tant que référence de l'infobulle
	gmarkers[i].openInfoWindowTabsHtml([infobulle[id][0]]);
}

// Fonction de Zoom sur un point
function zoom(i) {
	map.setCenter(gmarkers[i].getPoint(),15);
}


// Recherche de type d'offres
function rechercheType() {

	//montrer('chargement'); // affichage message de chargement
	//alert("allo");
	var TabChecks = new Array();
	var Tabvalues = new Array();
	//id_type[] = document.getElementById("form_moteur").type[];	

	TabChecks=document.getElementsByName('type');
	//alert (TabChecks.length);
	j=0;

	for(i=0;i<TabChecks.length;i++){
		var cocher = document.getElementsByName("type")[i].checked;
		valeurss = document.getElementsByName("type")[i].value;
		//alert("value: "+valeurss+" - "+cocher);

		//alert("i: "+i);
		if( cocher == true){

			//alert("j: "+j);
			
			var valeur = document.getElementsByName("type")[i].value;
			//alert("avant "+valeur);
			Tabvalues[j]=valeur;
			//alert("apres "+Tabvalues[j]);
			j++
		}
	}
	//alert(Tabvalues);
	//alert(Tabvalues[0]+" et "+Tabvalues[1]+" et "+Tabvalues[2]+" et "+Tabvalues[3]+" et "+Tabvalues[4]);
	//var latref = new Array();
	//var lngref = new Array();
	var latref = document.getElementsByName("lat-ref")[0].value;
	var lngref = document.getElementsByName("lng-ref")[0].value;
	var param_recherche = "t=2&type="+Tabvalues+"&lat-ref="+latref+"&lng-ref="+lngref; // Création des paramètres de recherche
	//var param_recherche = "t=2&type="+Tabvalues; // Création des paramètres de recherche

	moteur_affichage(param_recherche,2); // Appel de moteur_affichage(...)
}



// Moteur d'affichage des points avec appel dynamique de "moteur.php"
function moteur_affichage(param_recherche,type_recherche) {

	var bounds = new GLatLngBounds(); // Fenêtre "résultat" qui va être un cadrage de la carte contenant tous les points affichés
	map.clearOverlays(); // efface tout sur la carte
	liste_points = ""; // efface la liste des résultats
	
	
	
	var requete = GXmlHttp.create(); // Création d'une requête serveur pour aller lire le fichier "moteur.php" qui génére du XML lisible directement par les méthodes de l'API
	requete.open("GET", "../scripts/moteur-en.php?"+param_recherche, true); // Appel du fichier moteur.php en lui envoyant les paramètres de recherche par GET
	//requete.open("GET", "moteur.php?t=2&type=a:3:{i:0;s:1:%222%22}", true);

	
	requete.onreadystatechange = function() { // Si changement d'état de la requête
	    if (requete.readyState == 4) { // Si requête serveur OK
			var xmlDoc = requete.responseXML; // Récupération du fichier XML "moteur.php?...."
			
			
			var markers = xmlDoc.documentElement.getElementsByTagName("marker"); // récupération du contenu des balises "marker" du XML
			
			for (var i = 0; i < markers.length; i++) { // tant qu'il y a des "marker" (markers est un tableau)
				
				var id = markers[i].getAttribute("id_fiche"); // récupération du numéro Référence
				var denomination = markers[i].getAttribute("denomination"); // récupération de la dénomination
				var titre_courant = markers[i].getAttribute("titre_courant"); // récupération du titre courant
				var commune = markers[i].getAttribute("commune"); // récupération de la commune
				var adresse = markers[i].getAttribute("adresse"); // récupération de l'adresse
				//var photo = markers[i].getAttribute("photo"); // récupération du nom de fichier de la photo
				var id_type = markers[i].getAttribute("id_type"); // récupération de l'id du type d'offre
				var tel = markers[i].getAttribute("tel"); // récupération du tel
				var fax = markers[i].getAttribute("fax"); // récupération du fax
				var html = markers[i].firstChild.data; // récupération du html
				var lien = markers[i].getAttribute("lien"); // récupération du lien vers la fiche détaillée
				var email = markers[i].getAttribute("email"); // récupération de l'email


				
				var lat = parseFloat(markers[i].getAttribute("lat")); // récupération latitude
				var lng = parseFloat(markers[i].getAttribute("lng")); // récupération longitude
				var point = new GLatLng(lat,lng); // création d'un couple de coordonnées

				// AFFICHAGE RAYON
				var dijon = new GLatLng(latville, lonville); // On créé le couple de coordonnées
				var ray = parseFloat(20);
				var mon_marker = new GMarker(dijon,icon_home); // On créé le marqueur central
				map.addOverlay(mon_marker);
				cercle(dijon,ray);
				// FIN AFFICHAGE RAYON

				
				var marker = createMarker(type_recherche,point,id,denomination,titre_courant,commune,adresse,id_type,tel,fax,html,lien,email); // Appel de la fonction createMarker(...) ci-dessus
				
				// Affichage sur la carte du point créé précédemment
				if (type_recherche == 1) { // Si recherche de type 1
					mm.refresh(); // On affiche le point en actualisant le Marker Manager
				}
				else {
					map.addOverlay(marker); // Sinon affichage classique du marqueur
				}
				
				bounds.extend(point); // Inclut le marker ajouté dans la fenêtre pour affichage (au final) de tous les résultats
			}

			
			
			// Récupération du nombre de résultats et de l'intitulé du résultat
			var nbreresult = xmlDoc.documentElement.getElementsByTagName("result");
			var nbreresult2 = parseFloat(nbreresult[0].getAttribute("nbre"));
			var intitule = nbreresult[0].getAttribute("intitule");
			
			// Gestion du pluriel
			if (nbreresult2 == 0 || nbreresult2 == 1) {var pluriel = '';} else {var pluriel = 's';}
			
			if (type_recherche == 1) { // Si recherche de type 1
				affiche_points_zoom(); // On affiche en plus les marqueurs zoom
			}
			
			if (type_recherche == 2) { // Si recherche de type 2

				if (nbreresult2) { // Si on a des résultats
					map.setZoom(map.getBoundsZoomLevel(bounds) - 1); // Choix du zoom
					map.setCenter(bounds.getCenter()); // On centre
				}
				else { // Si pas de résultat, vue initiale
					map.setCenter(new GLatLng(latville, lonville), 10);
				}
			}
			
			if (type_recherche == 3) { // Si en recherche de type3
				if (rayon < 1) {rayon = (rayon * 1000)+"m";} else {rayon = rayon+"km";} // Mise en forme du rayon
				document.getElementById("resultats").innerHTML = "<p><b>"+nbreresult2+" résultat"+pluriel+" trouvé"+pluriel+" pour la recherche près de \""+intitule+"\" dans un rayon de "+rayon+"</b></p>"; // En-tête des résultats
				document.getElementById("resultats").innerHTML += liste_points; // Affichage de la liste sous la carte
				bounds.extend(mes_coordonnees); // Iclut la position de l'utilisateur dans la fenêtre "résultats" pour affichage (au final) des résultats
				map.setZoom(map.getBoundsZoomLevel(bounds) - 1); // Récupération du niveau de zoom de la fenêtre "résultats"; pour que le cercle soit quand-même visible, on diminue le zoom d'1 unité
				map.setCenter(mes_coordonnees); // Centrage de la carte à l'adresse de l'internaute
				//map.setCenter(bounds.getCenter()); // Centre sur la fenêtre "résultats"
			}
			
			//cacher('chargement'); // On enlève le message de chargement
		}
	}
	requete.send(null); // Commande nécessaire pour boucler la requête serveur
}

//Fonction de création de cercles (récupérée toute faite)
// http://esa.ilmari.googlepages.com/circle.htm
function cercle(centre,rayon) {

	var latConv = centre.distanceFrom(new GLatLng(centre.lat()+0.1, centre.lng()))/100; // Les +0.1 sont des facteurs de correctionpour éviter que le cercle soit ovoïde (problèm de de projection)
	var lngConv = centre.distanceFrom(new GLatLng(centre.lat(), centre.lng()+0.1))/100;
	
//	var bounds = new GLatLngBounds();

	var points = [];
	var step = parseInt(360/50)||10;
	
	for(var i=0; i<=360; i+=step) {
		var point = new GLatLng(centre.lat() + (rayon/latConv * Math.cos(i * Math.PI/180)), centre.lng() + (rayon/lngConv * Math.sin(i * Math.PI/180)));
		points.push(point);
//		bounds.extend(point);
	}
	var poly = new GPolyline(points,'#d1003f',2,0.6); // Gpolyline (tableau des points, couleur du trait, épaisseur du trait, opacité du trait)
	map.addOverlay(poly);
}



// Fonction de création des marqueurs zoom
function CreerMarkerZoom(point) {
	var marker = new GMarker(point,icon_zoom);
	mm.addMarker(marker,0,16); // Les marqueurs zoom sont visibles du niveau 0 à 16
	GEvent.addListener(marker, "click", function() {
		map.setCenter(marker.getPoint(),17); // Au clic, on zoom sur le point au niveau 17
	});
	return marker;
}

//]]>