﻿var showM = {
	currentMarker:null,
	init: function (instanceAPI,contentSearch,contentCity,initEdit){
		// ShowM.map hérite des propriétés et des méthodes de l'instance de l'API déclarée dans le fichier index
		
		showM.map = instanceAPI;
		
		if (!showM.map) {
            alert(OpenLayers.i18n('failed loading viewer'));
            return;
        }
		showM.language="fr";
		showM.isEdit = initEdit; // Note DG, gestion des listes dynamiques de marqueurs
		showM.asc=1; // Note DG, gestion des listes dynamiques de marqueurs
		showM.contentSearch = contentSearch;
		showM.rangeZoom=8; // Niveau de zoom par défaut de la carte 
        // showM.map.addGeoportalLayers(); // load all available layers
		if (showM.map.getMap().allowedGeoportalLayers) {
			//ajout de la couche photo aerienne
			showM.map.addGeoportalLayer('ORTHOIMAGERY.ORTHOPHOTOS:WMSC'); // layers[0]
			//ajout de la couche carte IGN
			showM.map.addGeoportalLayer('GEOGRAPHICALGRIDSYSTEMS.MAPS:WMSC'); // layers[1]
			// ajout TEST de la couche Cadastre
			// showM.map.addGeoportalLayer('CADASTRALPARCELS.PARCELS:WMSC'); // layers[2]
			// ajout TEST de la couche Hydrographie
			// showM.map.addGeoportalLayer('HYDROGRAPHY.HYDROGRAPHY:WMSC'); // layers[3]
		}
		/* Test insertion couche IGN 22/12/2009 */
		/*
		if
		(showM.map.getMap().catalogue["7867290114182901205"].layers["GEOGRAPHICALGRIDSYSTEMS.1900TYPEMAPS:WMSC"])
		{
			// alert("Couche 1900TYPEMAPS"); // Debug
			showM.map.getMap().addLayer(
				"WMS-C",
				"GEOGRAPHICALGRIDSYSTEMS.1900TYPEMAPS",
				showM.map.getMap().catalogue["7867290114182901205"].layers["GEOGRAPHICALGRIDSYSTEMS.1900TYPEMAPS:WMSC"].url,
				{
					layers:"GEOGRAPHICALGRIDSYSTEMS.1900TYPEMAPS",
					format:"image/jpeg",
					exceptions:"text/xml"
				},
				{
					gridOrigin: new OpenLayers.LonLat(0,0),
					projection:"IGNF:GEOPORTALFXX",
					opacity:0.5,
					GeoRM: Geoportal.GeoRMHandler.addKey(
						"7867290114182901205",
						showM.map.getMap().catalogue["7867290114182901205"].tokenServer.url,
						showM.map.getMap().catalogue["7867290114182901205"].tokenServer.ttl,
						showM.map.getMap())
				}
			);
		}
		*/
		/*
		if
		(showM.map.getMap().catalogue["7867290114182901205"].layers["NATURALRISKZONES.1910FLOODEDWATERSHEDS:WMSC"])
		{
			// alert("Couche 1910FLOODEDWATERSHEDS"); // Debug
			showM.map.getMap().addLayer(
				"WMS-C",
				"NATURALRISKZONES.1910FLOODEDWATERSHEDS",
				showM.map.getMap().catalogue["7867290114182901205"].layers["NATURALRISKZONES.1910FLOODEDWATERSHEDS:WMSC"].url,
				{
					layers:"NATURALRISKZONES.1910FLOODEDWATERSHEDS",
					format:"image/png",
					exceptions:"text/xml"
				},
				{
					gridOrigin: new OpenLayers.LonLat(0,0),
					projection:"IGNF:GEOPORTALFXX",
					opacity:0.5,
					GeoRM: Geoportal.GeoRMHandler.addKey(
						"7867290114182901205",
						showM.map.getMap().catalogue["7867290114182901205"].tokenServer.url,
						showM.map.getMap().catalogue["7867290114182901205"].tokenServer.ttl,
						showM.map.getMap())
				}
			);
		}
		*/
		/*
		if
		(showM.map.getMap().catalogue["7867290114182901205"].layers["NATURALRISKZONES.1910FLOODEDCELLARS:WMSC"])
		{
			// alert("Couche 1910FLOODEDWATERSHEDS"); // Debug
			showM.map.getMap().addLayer(
				"WMS-C",
				"NATURALRISKZONES.1910FLOODEDCELLARS",
				showM.map.getMap().catalogue["7867290114182901205"].layers["NATURALRISKZONES.1910FLOODEDCELLARS:WMSC"].url,
				{
					layers:"NATURALRISKZONES.1910FLOODEDCELLARS",
					format:"image/png",
					exceptions:"text/xml"
				},
				{
					gridOrigin: new OpenLayers.LonLat(0,0),
					projection:"IGNF:GEOPORTALFXX",
					opacity:0.5,
					GeoRM: Geoportal.GeoRMHandler.addKey(
						"7867290114182901205",
						showM.map.getMap().catalogue["7867290114182901205"].tokenServer.url,
						showM.map.getMap().catalogue["7867290114182901205"].tokenServer.ttl,
						showM.map.getMap())
				}
			);
		}
		*/
		/* Fin test insertion couche IGN */
		
		/* Test insertion couche IGN 28/12/2009 */
		/**/
		var clef='7867290114182901205';
		var fls1910= {
			'GEOGRAPHICALGRIDSYSTEMS.1900TYPEMAPS':{
				name:'Carte type 1900', opacity:1.0, mnz:11, mxz:14},
			'NATURALRISKZONES.1910FLOODEDWATERSHEDS':{
				name:'Plus hautes eaux', opacity:0.75, mnz:9, mxz:15},//***
			'NATURALRISKZONES.1910FLOODEDCELLARS':{
				name:'Caves inondées', opacity:0.5, mnz:11, mxz:15}
		};
		for (var fl1910 in fls1910) {
			if (!((showM.map.getMap().catalogue[clef].layers[fl1910+':WMSC']))) {
				continue;
			}
			showM.map.getMap().addLayer("WMS-C",
				fl1910.split('.')[1],
				showM.map.getMap().catalogue[clef].layers[fl1910+':WMSC'].url,
					{
						layers: fl1910,
						format: 'image/png',
						exceptions: "text/xml",
						transparent:true
					},
					{
						gridOrigin: new OpenLayers.LonLat(0,0),
						projection:"IGNF:GEOPORTALFXX",
						opacity:fls1910[fl1910].opacity,
						minZoomLevel:fls1910[fl1910].mnz,
						maxZoomLevel:fls1910[fl1910].mxz,
						originators:[
							{
								logo:'DIRENIDF',
								url :'http://www.ile-de-france.ecologie.gouv.fr/'
							},
							{
								logo:'DIRENHAUTENORMANDIE',
								url :'http://www.haute-normandie.ecologie.gouv.fr/'
							},
							{
								logo:'SEINEENPARTAGE',
								url :'http://www.seineenpartage.fr/'
							}
						],
						GeoRM: Geoportal.GeoRMHandler.addKey(
							clef,
							showM.map.getMap().catalogue[clef].tokenServer.url,
							showM.map.getMap().catalogue[clef].tokenServer.ttl,
							showM.map.getMap())
					});
			//}
		}
		// Affichage des boutons de Zoom et de déplacement
		panel = new OpenLayers.Control.Panel();		
		controls = {
			PanNorth : new OpenLayers.Control.Pan
				('North',{'displayClass': 'olControlPanNorth'}),
			PanWest : new OpenLayers.Control.Pan
				('West',{'displayClass': 'olControlPanWest'}),
			PanEast : new OpenLayers.Control.Pan
				('East',{'displayClass': 'olControlPanEast'}),
			PanSouth : new OpenLayers.Control.Pan
				('South',{'displayClass': 'olControlPanSouth'}),
			zoomIn : new OpenLayers.Control.ZoomIn
				({'displayClass': 'olControlZoomIn'}),
			zoomOut : new OpenLayers.Control.ZoomOut
				({'displayClass': 'olControlZoomOut'})
		}
		//Ajout des outils à la barre
		for(var key in controls) {
			panel.addControls([controls[key]]);
		}	
		showM.map.getMap().addControl(panel);
		showM.initCouches();
		
		showM.centerisset();
		showM.map.getMap().events.register("zoomend", showM.map.getMap(), function() {showM.centerisset();});
		showM.map.getMap().events.register("moveend", showM.map.getMap(), function() {showM.centerisset();});
		if(contentCity!=""){
			showM.getAdresse(contentCity);
		}
	},//end init
	
	// Initialisation des couches + affichage des couches par defaut
	initCouches : function(){
			// alert("initCouches");
			// Copyright // A terminer
			geoMin.mapsize();
			geoMin.putResizeEvents();
			// Detection navigateur
			/**/
			var IE6 = (navigator.appVersion.indexOf('MSIE 6.')==-1) ? false : true;
			var IE7 = (navigator.appVersion.indexOf('MSIE 7.')==-1) ? false : true;
			var IE8 = (navigator.appVersion.indexOf('MSIE 8.')==-1) ? false : true;
			showM.transparency = (IE7 == true || IE8 == true) ? 1 : 0.6 ;
			// Masque blanc
			// Note DG les couches Overlay n'ont pas besoin d'être gérées ici, fournies par l'IGN (cf. sources)
			// Initialisation de la couche "Photos"
			showM.markersPhoto = new OpenLayers.Layer.Markers("Photos");
			// alert("addlayer"); // Debug
			showM.map.getMap().addLayer(showM.markersPhoto);
	},
	
	// Affichage des couches... par ordre de superposition
	showCouches : function(){
		// Parcours de couches déclarées de l'API
		for(var i = 0; i < showM.map.getMap().layers.length; i++){
			var layer= showM.map.getMap().layers[i];
			if ( ! layer.params ) {
				continue;
			}
			if(layer.params.LAYERS.search('GEOGRAPHICALGRIDSYSTEMS.1900TYPEMAPS')!=-1) { // Affichage de la couche etatmajor
				layer.setVisibility(document.getElementById('etatmajorbox').checked);
			}
			if(layer.params.LAYERS.search('NATURALRISKZONES.1910FLOODEDWATERSHEDS')!=-1) { // Affichage de la couche plushauteseaux
				layer.setVisibility(document.getElementById('plushauteseauxbox').checked);
			}
			if(layer.params.LAYERS.search('NATURALRISKZONES.1910FLOODEDCELLARS')!=-1) { // Affichage de la couche caveinnondées
				layer.setVisibility(document.getElementById('caveinnondeesbox').checked);
			}			
		}		
	},
	// Fonction de centrage de la carte sur un point
	centerMap : function (myLong,myLat,rangeZoom) {
		var ll = new OpenLayers.LonLat(myLong,myLat);
		ll.transform(OpenLayers.Projection.CRS84, showM.map.getMap().getProjection());
		showM.map.getMap().setCenter(ll,rangeZoom);
		// showM.map.getMap().setCenterAtLonLat(ll.lon, ll.lat,(showM.tabAccuracy(rangeZoom)+1));
		showM.centerisset();
	},
	// Recherche d'adresse - version simple GMaps
	getAdresse: function(qAdresse){
		var googleAdress = encodeURIComponent("http://maps.google.fr/maps?hl=fr&output=kml");
		var url = "/ajaxproxy.php";
		var params = "ajaxurl="+googleAdress;
		params += "&q="+encodeURIComponent(qAdresse);
		// alert(url+"?"+params);
		showM.downloadUrl(url, params, showM.getQuery);
	}, // end getQuery
	
	// Retour Gmaps query adresse
	getQuery: function(responseText,responseXML){
		// alert(responseText);
		if (!responseXML) {
				alert("Impossible de se connecter au moteur de Géocodage de Google!\nVeuillez vérifier votre connexion ou vous reconnecter ultérieurement.");
      	} else {
			var xmldoc = responseXML;
			var LookAt = xmldoc.getElementsByTagName('LookAt');
			if (!LookAt[0]) { // (response.Status.code != 200){ // Modif DG à adapter pour la requête ajax Mootools
				// Unable to geocode
        		alert("Impossible de géocoder l'adresse entrée!\n");
			} else {
				var myLong = LookAt[0].childNodes[0].firstChild.nodeValue; // longitude
				var myLat = LookAt[0].childNodes[1].firstChild.nodeValue; // latitude
				var range = LookAt[0].childNodes[2].firstChild.nodeValue; // range
				var rangeZoom = showM.zoomDistance(range/1000);
				// alert("myLong="+myLong+"/myLat="+myLat+"/rangeZoom="+rangeZoom+"/range="+range+"/showM.tabAccuracy(rangeZoom)+1:"+(showM.tabAccuracy(rangeZoom)+1)); // Debug
				showM.rangeZoom = showM.tabAccuracy(rangeZoom)+1
				showM.centerMap(myLong,myLat,showM.rangeZoom);
			}
		}
	}, // end getQuery


	// Centerisset (A chaque mouvement de la carte)
	// On tape dans la base pour voir les points à afficher
	// Puis on appelle les couches
	centerisset: function(response){
		document.getElementById('currentlist').innerHTML=geoMin.loader;
		var zoom,center;
		zoom = showM.map.getMap().getZoom();
		center = showM.map.getMap().getCenter();
		showM.rangeZoom = zoom; // Mise à jour du niveau de zoom
		// On recentre
		/**/
		if(zoom>13){
			showM.map.getMap().setCenter(center, 13);
		}
		if(zoom<6){
			showM.map.getMap().setCenter(center, 6);
		}
		/**/
		// On vire les markers existants
		// ...
		
		// Determination de l'emprise de la carte
		var mapBounds = new OpenLayers.Bounds();
		mapBounds = showM.map.getMap().getExtent();
		mapBounds.transform( showM.map.getMap().getProjection(), showM.map.getMap().displayProjection);
		var swlon = mapBounds.left.toFixed(6);
		var nelon = mapBounds.right.toFixed(6);
		var nelat = mapBounds.top.toFixed(6);
		var swlat = mapBounds.bottom.toFixed(6);
		var nivzoom = showM.map.getMap().getZoom();
		
		// Points photos
		var plotphoto;
		if(showM.contentSearch=="photographies"){plotphoto=1;}
		var plotevent;
		if(showM.contentSearch=="evenements"){plotevent=1;}
		var plotfile;
		if(showM.contentSearch=="dossier"){plotfile=1;}
		var plotnews;
		if(showM.contentSearch=="actualites"){plotnews=1;}
		
		
		// En plus
		var url = "/xml/getMarkers.php";
		var params = "type=bounds";
		params += "&nelat="+nelat;
		params += "&nelon="+nelon;
		params += "&swlat="+swlat;
		params += "&swlon="+swlon;
		params += "&zoom="+nivzoom;
		params += "&photo="+plotphoto;
		params += "&event="+plotevent;
		params += "&file="+plotfile;
		params += "&news="+plotnews;
		// alert(url+"?"+params);
		showM.downloadUrl(url, params, showM.responseProcess);
		// GDownloadUrl(url, showM.responseProcess); // Note DG, trouver une alternative à GDownloadUrl
		showM.showCouches();
	}, // end getQuery
	downloadUrl: function(url, params, onsuccess) {	
		//make the ajax call
		var req = new Request({
			method: 'get',
			url: url,
			onSuccess: onsuccess
		}).send(params);		
	},

	// responseProcess: function(data, responseCode){
	responseProcess: function(responseText,responseXML){
		// alert(responseText);
		// Degage les anciens
		if(showM.aMarker){
			for (var i = 0; i < showM.aMarker.length; i++) {
				showM.markersPhoto.removeMarker(showM.aMarker[i]);
			}
		}
		// var xml = GXml.parse(data);
		// var adresses = xml.documentElement.getElementsByTagName("adresse");
		var xmldoc = responseXML;
		// set the size of the panel to match the number of variables
		var adresses = xmldoc.getElementsByTagName('adresse');
		
	  	// showM.adresses = adresses;
	  	showM.aLat = new Array(); 
	  	showM.aLong = new Array();	
	  	showM.aTitle = new Array();
		showM.aMarker = new Array();
		showM.aCity = new Array();
		showM.aId = new Array();
		showM.aType = new Array();
		showM.aList = new Array(); // Note DG, gestion des listes dynamiques de marqueurs
	  	for (var i = 0; i < adresses.length; i++) {
			// Language
			if(showM.language!=adresses[i].getAttribute("language")){
				showM.language=adresses[i].getAttribute("language");
			}
			
			// Start paramss
			var zeTitle = adresses[i].getAttribute("name"); // Note DG, gérer le choix de la langue
			zeTitle = zeTitle.replace("&#39;","'");
			// alert(zeTitle); // Debug
			var zeType = adresses[i].getAttribute("type");
			var zeId = adresses[i].getAttribute("id");  
			var zeType = adresses[i].getAttribute("type");
			if(zeType!="news"){
			   	var zeLat = parseFloat(adresses[i].getAttribute("lat"));
				var zeLong = parseFloat(adresses[i].getAttribute("long"));
			} else {
				var zeLat = 0;
				var zeLong = 0;
			}
			
			var zelink;
			if(zeType=="photo"){
				if(showM.rangeZoom>9){
					zelink = 'Mediabox.open("/photoshow.php?lat='+adresses[i].getAttribute("lat")+'&long='+adresses[i].getAttribute("long")+'", "Google", "950 600");'
				} else {
					zelink = 'Mediabox.open("/photoshow.php?city='+encodeURIComponent(adresses[i].getAttribute("city"))+'", "", "950 600");'
				}
			}
			if(zeType=="event"){
				zelink = 'Mediabox.open("/eventshow.php?eid='+zeId+'", "", "900 600");'
			}
			if(zeType=="file"){
				zelink = 'Mediabox.open("/fileshow.php?fid='+zeId+'", "", "900 600");'
			}
			if(zeType=="news"){
				zelink = 'Mediabox.open("/newsshow.php?nid='+zeId+'", "", "900 600");'
			}
			
			
			// Note DG, manquent les styles css des listes, à récupérer auprès de GC
			var zeList = "<div id='itemelem_"+i+"' class='item clearfix' onclick='Javascript:"+zelink+"'>";


			if(zeType=="photo"){
				zeList += "<div class='icon'><a href='#'><img src='/images/photos/thumbnails/"+adresses[i].getAttribute("img")+"' alt='"+adresses[i].getAttribute("name").replace("&#39;","'")+"'/></a></div>";
				zeList += "<div class='txt'>";
				zeList += "<h2 class='ttre'>"+adresses[i].getAttribute("city")+"</h2>";
				if(adresses[i].getAttribute("nb")==1){
					zeList += "<p>"+adresses[i].getAttribute("name")+"</p>";	
				} else {
					zeList += "<p>"+adresses[i].getAttribute("nb")+" photos</p>";
				}
				zeList += "</div>";
			}
			if(zeType=="event"){
				if(adresses[i].getAttribute("img")!=''){
					zeList += "<div class='icon'><a href='#'><img src='/images/events/thumbnails/"+adresses[i].getAttribute("img")+"' alt='"+adresses[i].getAttribute("name").replace("&#39;","'")+"'/></a></div>";
				}
				zeList += "<div class='txt'>";
				zeList += "<h2 class='ttre'>"+adresses[i].getAttribute("name")+"</h2>";
				if(showM.language=="fr"){
					zeList += "<p>"+adresses[i].getAttribute("address")+" "+adresses[i].getAttribute("city")+"<br>du "+adresses[i].getAttribute("date_start")+" au "+adresses[i].getAttribute("date_end")+"</p>";
					zeList += "<p class='morelink'><a href='#'>>Détail de l’événement</a></p>";
				}
				if(showM.language=="en"){
					zeList += "<p>"+adresses[i].getAttribute("address")+" "+adresses[i].getAttribute("city")+"<br>from "+adresses[i].getAttribute("date_start")+" to "+adresses[i].getAttribute("date_end")+"</p>";
					zeList += "<p class='morelink'><a href='#'>>Event detail</a></p>";
				}
				zeList += "</div>";
			}
			if(zeType=="file"){
				if(adresses[i].getAttribute("img")!=''){
					zeList += "<div class='icon'><a href='#'><img src='/images/files/thumbnails/"+adresses[i].getAttribute("img")+"' alt='"+adresses[i].getAttribute("name").replace("&#39;","'")+"'/></a></div>";
				}
				zeList += "<div class='txt'>";
				zeList += "<h2 class='ttre'>"+adresses[i].getAttribute("name")+"</h2>";
				zeList += "<p>"+adresses[i].getAttribute("school")+" - "+adresses[i].getAttribute("city")+"</p>";	
				if(showM.language=="fr"){
					zeList += "<p class='morelink'><a href='#'>>Détail du dossier</a></p>";
				}
				if(showM.language=="en"){
					zeList += "<p class='morelink'><a href='#'>>Report detail</a></p>";
				}
				zeList += "</div>";
			}
			if(zeType=="news"){
				if(adresses[i].getAttribute("img")!=''){
					zeList += "<div class='icon'><a href='#'><img src='/images/news/thumbnails/"+adresses[i].getAttribute("img")+"' alt='"+adresses[i].getAttribute("name").replace("&#39;","'")+"'/></a></div>";
				}
				zeList += "<div class='txt'>";
				zeList += "<h2 class='ttre'>"+adresses[i].getAttribute("name")+"</h2>";
				zeList += "<p>"+adresses[i].getAttribute("date")+"</p>";	
				if(showM.language=="fr"){
					zeList += "<p class='morelink'><a href='#'>>Détail de l'actualité</a></p>";
				} 
				if(showM.language=="en"){
					zeList += "<p class='morelink'><a href='#'>>News detail</a></p>";
				}
				zeList += "</div>";
			}
	
			
			zeList += "</div>";
			
			// End params all
			showM.aTitle[i] = zeTitle;
			showM.aLat[i] = zeLat;
			showM.aCity[i] = adresses[i].getAttribute("city");
			showM.aLong[i] = zeLong;
			showM.aType[i] = zeType;
			showM.aList[i] = zeList;
			showM.aId[i] = zeId;
		}
		// Ou pas
		showM.markersProcess();	
	}, // end responseProcess
	
	// Affichage des markers
	markersProcess: function(){
		// alert ("markersProcess"); // Debug
		// showM.map.getMap().clearOverlays();
		showM.currI =0;
		// alert(showM.aTitle.length); Debug
		for (var i = 0; i < showM.aTitle.length; i++) {
			// var point= new OpenLayers.LonLat(showM.aLong[i],showM.aLat[i]);
			if(showM.aType[i]!="news"){
				var pointLon = showM.aLong[i];
				var pointLat = showM.aLat[i];
				// alert("showM.addMarker("+pointLon+","+pointLat+", "+i+")"); // Debug
				// alert("OpenLayers.LonLat("+showM.aLong[i]+","+showM.aLat[i]+")"); // Debug
				showM.addMarker(pointLon, pointLat, i);
			}
		}
		timer=setTimeout("showM.updateList()",300);
	}, // end markersProcess
	
	// Mise à jour de la liste dynamique des marqueurs
	updateList : function(){
		var listcode="";
		for (var i = 0; i < showM.aTitle.length; i++) {
			listcode+=showM.aList[i];
		}
		if(listcode==""){
			if(showM.contentSearch=="photographies"){
				// listcode=$('err_nophoto').get('html');
				listcode=document.getElementById('err_nophoto').innerHTML;
			}
			if(showM.contentSearch=="evenements"){
				// listcode=$('err_noevent').get('html');
				listcode=document.getElementById('err_noevent').innerHTML;
			}
			if(showM.contentSearch=="dossier"){
				// listcode=$('err_nofile').get('html');
				listcode=document.getElementById('err_nofile').innerHTML;
			}
			if(showM.contentSearch=="news"){
				// listcode=$('err_nofile').get('html');
				listcode=document.getElementById('err_nonews').innerHTML;
			}
		}
		document.getElementById('currentlist').innerHTML=listcode;
		document.getElementById('currentlist').scrollTop = 0;
		geoMin.mouseOverActions();
		// initialize();
	}, // end updateList
	
	// Ajout d'un marker
	addMarker: function(pointLon, pointLat, i){
		// Testing
		if ((pointLon == null)||(pointLat == null)){
			alert("Marqueur non placé : "+i);
		}	
		// markers= new OpenLayers.Layer.Markers("Repères");
		// VISU.getMap().addLayer(markers);
		var size= new OpenLayers.Size(40,30);
		// var offset= new OpenLayers.Pixel(-(size.w/2), -(size.h/2));//centered
		var offset= new OpenLayers.Pixel(-15, -15);
		// Choix du type de marker
		var IE = (navigator.appVersion.indexOf('MSIE')==-1) ? false : true;
		switch (showM.aType[i]) {
			case("photo") :
				if(IE!=true){
					var imagemarker = "/layout/img/markers/photo.png";
				} else {
					var imagemarker = "/layout/img/markers/photo_on.png";
				}
				// Note DG, affiner la gestion des marqueurs photo avec une vignette ou le marqueur avec le nombre de photos de la galerie
				// Créer une fonction renvoyant le chemin relatif du marker
				break;
			case("event") :
				if(IE!=true){
					var imagemarker = "/layout/img/markers/event.png";
				} else {
					var imagemarker = "/layout/img/markers/event_on.png";
				}
				break;
			case("file") :
			if(IE!=true){
					var imagemarker = "/layout/img/markers/file.png";
				} else {
					var imagemarker = "/layout/img/markers/file_on.png";
				}
				break;
		}
		// Création de la vignette et affichage du marker
		var icon = new OpenLayers.Icon(imagemarker,size,offset);
		var ll= new OpenLayers.LonLat(pointLon, pointLat);
		ll.transform(OpenLayers.Projection.CRS84, showM.map.getMap().getProjection());
		// Création marqueur
		var marker = new OpenLayers.Marker(ll,icon);
		showM.markersPhoto.addMarker(marker);
		showM.aMarker[i]=marker;
		// Gestion des tooltips
		// marker.events.register("mouseover",marker': marker,'name':showM.aTitle[i],'bgColor':'blue','fontColor':'white','opacity':'0.75'}, toolTips);
		
		if(showM.aType[i]=="photo"){
			marker.events.register("mouseover",marker, function (evt) {geoMin.scrollToElem(i);this.icon.imageDiv.firstChild.src='/layout/img/markers/photo_on.png';});
			if(showM.rangeZoom>9){
				marker.events.register("click",marker, function (evt) {Mediabox.open('/photoshow.php?lat='+showM.aLat[i]+'&long='+showM.aLong[i], '', '950 600');});
			} else {
				marker.events.register("click",marker, function (evt) {Mediabox.open('/photoshow.php?city='+encodeURIComponent(showM.aCity[i]), '', '950 600');});
			}
		}
		if(showM.aType[i]=="event"){
			marker.events.register("mouseover",marker, function (evt) {geoMin.scrollToElem(i);this.icon.imageDiv.firstChild.src='/layout/img/markers/event_on.png';});
			marker.events.register("click",marker, function (evt) {Mediabox.open('/eventshow.php?eid='+showM.aId[i], '', '900 600');});
		}
		if(showM.aType[i]=="file"){
			marker.events.register("mouseover",marker, function (evt) {geoMin.scrollToElem(i);this.icon.imageDiv.firstChild.src='/layout/img/markers/file_on.png';});
			marker.events.register("click",marker, function (evt) {Mediabox.open('/fileshow.php?fid='+showM.aId[i], '', '900 600');});
		}
		
		// marker.events.register("mouseout", marker, eraseToolTips);
	}, // end addMarker

	// Note DG, fonction déclenchée depuis l'activation d'un marqueur depuis la liste
	callMarker: function(i){
		// showM.map.closeInfoWindow();
		// showM.aMarker[i].openInfoWindowHtml(showM.aPage[i]);
		var str = showM.aTitle[i]
		str=str.replace(/\'/g,'\\\'');
		str=str.replace(/\"/g,'\\"');
		alert(str); // Debug
		showM.centerMap(showM.aLong[i],showM.aLat[i],showM.rangeZoom);
	}, // end callMarker
	
	// Pertinence du niveau de zoom
	tabAccuracy: function(accuracy){
		// var tabAccuracy = new Array(2,4,6,10,12,13,16,16,17); // Note DG, pour info, ancienne tabAccuracy pour Google Maps
		var tabAccuracy = new Array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17);
		return tabAccuracy[accuracy];
	}, // end tabAccuracy
		
	// Niveau de zoom en fonction d'une distance max
	zoomDistance: function(distance) {
	/*
	if (distance < 0.5) return 21;
	  else if (distance < 1) return 20;
	    else if (distance < 1.5) return 19;
		  else if (distance < 2) return 18;
		    else if (distance < 2.5) return 17;
		      else if (distance < 3) return 16;
		        else if (distance < 3.5) return 15;
				  else if (distance < 4) return 14;
					else if (distance < 8) return 13;
					  else if (distance < 16) return 12;
						else if (distance < 32) return 11;
						  else if (distance < 64) return 10;
							else if (distance < 128) return 9;
							  else if (distance < 256) return 8;
								else if (distance < 512) return 7;
								  else if (distance < 1024) return 6;
									else if (distance < 2048) return 5;
									  else if (distance < 4096) return 4;
										else if (distance < 8192) return 3;
										  else if (distance < 16384) return 2;
											else return 1;
	*/
	if (distance < 0.5) return 17;
	  else if (distance < 1) return 16;
		else if (distance < 2) return 15;
		  else if (distance < 4) return 14;
			else if (distance < 8) return 13;
	 		  else if (distance < 16) return 12;
			    else if (distance < 32) return 11;
				  else if (distance < 64) return 10;
				    else if (distance < 128) return 9;
					  else if (distance < 256) return 8;
					  	else if (distance < 512) return 7;
						  else if (distance < 1024) return 6;
						    else if (distance < 2048) return 5;
							  else if (distance < 4096) return 4;
							    else if (distance < 8192) return 3;
								  else if (distance < 16384) return 2;
									else return 1;

	}, // end zoomDistance
	
	// Fct math utilisée pour les distances
	toRadians: function(value) {
    	return (value * Math.PI / 180);
	}, // end toRadians
	
	// Fct math utilisée pour les distances
	toDegrees: function(value) {
    	return (value * 180 / Math.PI);
	}, // end toDegrees
	
	// Va chercher la distance entre 2 points
	getDistance: function(lat1,lat2,long1,long2){
		return showM.toDegrees(Math.acos((Math.sin(showM.toRadians(lat1))*Math.sin(showM.toRadians(lat2)))+(Math.cos(showM.toRadians(lat1))*Math.cos(showM.toRadians(lat2))*Math.cos(showM.toRadians(long1-long2)))))*60*1.1515*1.61;	
	}, // end getDistance
	
	// Barycentre d'un ensemble de points
	findCenter: function() {
		lat1 = lat2 = showM.bLat[0];
		lng1 = lng2 = showM.bLong[0];
	
		for (i=1 ; i<showM.bLat.length ; i++) {
			if (showM.bLat[i] > lat1) lat1 = showM.bLat[i];
			if (showM.bLat[i] < lat2) lat2 = showM.bLat[i];
			if (showM.bLong[i] > lng1) lng1 = showM.bLong[i];
			if (showM.bLong[i] < lng2) lng2 = showM.bLong[i];
		}
		var point = new GLatLng((lat2+(lat1-lat2)/2),(lng2+(lng1-lng2)/2));
		return point;
	},// end findCenter
	
	// Distance max entre tous les points
	findDistance: function() {
		var maxdistance=0;
		var Rterre = 6378;
		for (i=0 ; i<showM.bLat.length ; i++) {
			var fromLat = showM.bLat[i];
			var fromLong = showM.bLong[i];
			for (j=i+1 ; j<showM.bLat.length ; j++) {
				var toLat = showM.bLat[j];
				var toLong = showM.bLong[j];
				var d = showM.getDistance(fromLat,toLat,fromLong,toLong);
				if (d > maxdistance) {maxdistance=d;}
			}
		}
		return maxdistance;
	} // end findDistance	
}//end showM