/* ADT21 : fonctions de traitement pour les cartographies */

var date = new Date();
var dateJour=date.getHours()+":"+date.getMinutes()+":"+date.getSeconds();
//ajout de la date et heure pour differencier les fichier dans le cache du proxy google
var browser=navigator.userAgent.toLowerCase();

var marqueurs = new Array();
var nb_element = 0;

var kml_contour = "http://flux.cotedor-tourisme.com/kml/co.kml";
var map_proximite;
var map_localisation;
var geoXml;
var repertXml;
var rechXml;
var rechEnCours = 0;
var centerMap ;
var boundsMap ;
var zoomMap;

function init_view_map(){
	if(document.getElementById('adt21_carte_generale'))
	{
		map_generale = map_init_generale("adt21_carte_generale");
	}

// 	if(document.getElementById('adt21_detail_localisation'))
// 	{
// 		map_localisation = map_init_localisation('adt21_detail_localisation');
// 	}
}


function map_init(div_id, lat, lng, zoom){
	
	var map = new GMap2(document.getElementById(div_id));
	map.addControl(new GLargeMapControl());
	map.addControl(new GMenuMapTypeControl());
map.addMapType(G_PHYSICAL_MAP);
map.addMapType(G_SATELLITE_3D_MAP);
	map.setCenter(new GLatLng(lat ,lng), zoom);
	//permet de zoomer avec la molette de la souris
	map.enableScrollWheelZoom(); 

	return map;
}

function map_init_generale(div_id){
	
	geoXml = new GGeoXml(flux_carte_generale);		//affiche la carte google maps
        geoXml2 = new GGeoXml(kml_contour);

	
	var map = new GMap2(document.getElementById(div_id));
		//centre la carte sur le point fournit en paramètre (14=zoom)
		map.addOverlay(geoXml);
        map.addOverlay(geoXml2);
      
        map.setCenter(new GLatLng(47.5 ,  5), 8);
	map.addControl(new GLargeMapControl());
	map.addControl(new GMenuMapTypeControl());
map.addMapType(G_PHYSICAL_MAP);
map.addMapType(G_SATELLITE_3D_MAP);
	//permet de zoomer avec la molette de la souris
	map.enableScrollWheelZoom(); 

	GEvent.addListener(geoXml2, 'load', function() {
		if (geoXml2.loadedCorrectly()) {
			zoomToGeoXML(map, geoXml2);
			
			
			//repertXml.gotoDefaultViewport(map);
		}
	});
	
	return map;
}

function map_init_localisation(div_id){
	geoXml = new GGeoXml(flux_carte_localisation+"?id_objet="+idObj_localisation);		//affiche la carte google maps
        

	
	var map = new GMap2(document.getElementById(div_id));
	//centre la carte sur le point fournit en paramètre (14=zoom)
	map.addOverlay(geoXml);
        
      
        map.setCenter(new GLatLng(47.5 ,  5), 8);
	map.addControl(new GLargeMapControl());
	map.addControl(new GMenuMapTypeControl());
	//permet de zoomer avec la molette de la souris
	map.enableScrollWheelZoom(); 

	GEvent.addListener(geoXml, 'load', function() {
		if (geoXml.loadedCorrectly()) {
			zoomToGeoXML(map, geoXml);
			
			
			//repertXml.gotoDefaultViewport(map);
		}
	});
	
	return map;
}

function map_view_localisation(map){
	geoXml = new GGeoXml(flux_carte_localisation+"?id_objet="+idObj_localisation);		//affiche la carte google maps
        
	map.addOverlay(geoXml);
        
	map.setCenter(new GLatLng(47.5 ,  5), 8);
	map.addControl(new GLargeMapControl());
	map.addControl(new GMenuMapTypeControl());
	//permet de zoomer avec la molette de la souris
	map.enableScrollWheelZoom(); 

	GEvent.addListener(geoXml, 'load', function() {
		if (geoXml.loadedCorrectly()) {
			zoomToGeoXML(map, geoXml);
			
			
			//repertXml.gotoDefaultViewport(map);
		}
	});
	
	return map;
}

function map_view_directions(map, id){

	if(idObj_localisation != '')
	{
		marqueur = new GMarker(centerMap);
        map.addOverlay(marqueur);
        GEvent.addListener(marqueur, "click", function()
        {
            viewMarqueurInfo();
        });
		
        map.setCenter(centerMap, zoomMap);
	}
	else
	{
		geoXml = new GGeoXml(flux_itineraire+"?id="+id+"&date="+dateJour);
	
		map.addOverlay(geoXml);
		GEvent.addListener(geoXml, 'load', function() {
			if (geoXml.loadedCorrectly()) {
				zoomToGeoXML(map, geoXml);
				
				
				//repertXml.gotoDefaultViewport(map);
			}
		});
	}
}

function map_view_reperes(map, id){

	repertXml = new GGeoXml(flux_reperes+"?id="+id+"&date="+dateJour);
	//map.addOverlay(repertXml);
	
	
	
}


function map_view_recherche(map, id, distance, typeObj){
	
	/*if(rechEnCours == 1)
	{
		map.removeOverlay(rechXml);
	}*/
	//document.getElementById('barre_progression').innerHTML = "<img src='/images/progression.gif' alt='Chargement en cours' title='Chargement en cours'>";
	document.getElementById('barre_progression').style.display =''  ;
	rechXml = new GGeoXml(flux_recherche+"?id="+id+"&distance="+distance+"&objet="+typeObj+"&date="+dateJour);
	map.addOverlay(rechXml);
	GEvent.addListener(rechXml, 'load', function() {
			if (rechXml.loadedCorrectly()) {
				document.getElementById('barre_progression').style.display = 'none';
			}
		});
	marqueurs.push(rechXml);
	
	rechEnCours = 1;
}	

function map_view_recherche_clear_all(map){
	for (i = 0; i < marqueurs.length; i++)
	{
		map.removeOverlay(marqueurs[i]);
	}

}

function zoomToGeoXML(map, geoXml) {
	
	var center = geoXml.getDefaultCenter();
	var span = geoXml.getDefaultSpan();
	var sw = new GLatLng(center.lat() - span.lat() / 2,
			center.lng() - span.lng() / 2);
	var ne = new GLatLng(center.lat() + span.lat() / 2,
			center.lng() + span.lng() / 2);
	var bounds = new GLatLngBounds(sw, ne);
	
	centerMap = center;
	boundsMap = bounds;
	map.setCenter(center);
	map.setZoom(map.getBoundsZoomLevel(bounds));
	
	
}


function fiche_view_recherche(id, distance, typeObj){
	
	var xsl_safari = "<h2>{name}</h2>{description}";
	document.getElementById('barre_progression_aprox').style.display =''  ;
	
	descr_aproximite = "";
	//rechXml = new GGeoXml(flux_recherche+"?id="+id+"&distance="+distance+"&objet="+typeObj+"&date="+dateJour);
	
	GDownloadUrl("/stylesheet/xml-recherche-aproximite_"+id+"_"+distance+"_"+typeObj+".xml", function(data, responseCode) {
																									  
			
			var xml = GXml.parse(data);
			

			longueurName = xml.getElementsByTagName("description").length;

			for(i=0;i<longueurName;i++)
			{
//			  descr_aproximite += "<h2>"+xml.getElementsByTagName("name")[i].childNodes[0].nodeValue + "</h2>";
			  //descr_aproximite += xml.getElementsByTagName("description")[i].childNodes[0].nodeValue + "<br>";
			
			  descr_aproximite += xml.getElementsByTagName("description")[i].childNodes[0].nodeValue + "<br>";
			  
			}

			//descr_aproximite = decode_utf8( descr_aproximite );
			descr_aproximite = Utf8.decode( descr_aproximite );
						 			
			contenu_result = document.getElementById('Prox_result').innerHTML;
			contenu_result += descr_aproximite;

			document.getElementById('Prox_result').innerHTML= contenu_result;
			document.getElementById('barre_progression_aprox').style.display = 'none';
		}
			
			
        );
	


}	

function encode_utf8( s )
{
  return unescape( encodeURIComponent( s ) );
}

function decode_utf8( s )
{
  return decodeURIComponent( escape( s ) );
}

var Utf8 = {
 
	// public method for url encoding
	encode : function (string) {
		string = string.replace(/\r\n/g,"\n");
		var utftext = "";
 
		for (var n = 0; n < string.length; n++) {
 
			var c = string.charCodeAt(n);
 
			if (c < 128) {
				utftext += String.fromCharCode(c);
			}
			else if((c > 127) && (c < 2048)) {
				utftext += String.fromCharCode((c >> 6) | 192);
				utftext += String.fromCharCode((c & 63) | 128);
			}
			else {
				utftext += String.fromCharCode((c >> 12) | 224);
				utftext += String.fromCharCode(((c >> 6) & 63) | 128);
				utftext += String.fromCharCode((c & 63) | 128);
			}
 
		}
 
		return utftext;
	},
 
	// public method for url decoding
	decode : function (utftext) {
		var string = "";
		var i = 0;
		var c = c1 = c2 = 0;
 
		while ( i < utftext.length ) {
 
			c = utftext.charCodeAt(i);
 
			if (c < 128) {
				string += String.fromCharCode(c);
				i++;
			}
			else if((c > 191) && (c < 224)) {
				c2 = utftext.charCodeAt(i+1);
				string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
				i += 2;
			}
			else {
				c2 = utftext.charCodeAt(i+1);
				c3 = utftext.charCodeAt(i+2);
				string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
				i += 3;
			}
 
		}
 
		return string;
	}
 
}
