/*
  --------------
  Module Cartographie -- v 0.3 -- Copyright Altimax JD
  dernière modif : Jerome le 19 avril 2010
  --------------
*/

//initialisation de la gmap avec les différents circuits cliquables
// itemid => itemId du menu joomla afin de retouver l'url
// urlBase => afin de faire les liens vers la fiche détail
// xml => infos du polygone à afficher (zone cliquable d'un circuit)
function init_gmap(itemid, urlBase, xml)
{   

	if (GBrowserIsCompatible()) 
	{
		map =new GMap2(document.getElementById("map_carto"));
		// initialisation de la gmap
		map.setUIToDefault();
		map.disableScrollWheelZoom();
 		map.setCenter(new GLatLng(0,0),0); 
 		//map.setCenter(new GLatLng(46.1988443,5.2281188),10); 

      var polys = [];
      var labels = [];
      var ids = []; 
      var descriptions = []; 
	  var lats = [];
	  var lngs = [];
	  var zooms = [];
	  var centerLat = 0;
	  var centerLng = 0;
	  var zoom = 0;

	GEvent.addListener(map, "click", function(overlay,point) {
        if (!overlay) {
          for (var i=0; i<polys.length; i++) { 
            if (polys[i].Contains(point)) {
				var infoBulle = '<div class="infobulle">'
				infoBulle += "<h3>" + labels[i] + "</h3>";
				infoBulle += "<p>" + descriptions[i] + "</p>";
				infoBulle += '<p><br /><a href="'+urlBase+'--'+ids[i]+'--'+RemoveAccents(labels[i]).toLowerCase()+'.html" title="'+labels[i]+'" class="plus_infos">Voir le descriptif du circuit</a></p>';
              	map.openInfoWindowHtml(point, infoBulle);
				i = 999; // Jump out of loop
            }
          }
        }
      });

      // Read the data from states.xml
      var request = GXmlHttp.create();
      request.open("GET", "/altiadmin/files/kml/"+xml, true);
	  $j("#loading").fadeIn(200);
      request.onreadystatechange = function() {
        if (request.readyState == 4) {
          var xmlDoc = GXml.parse(request.responseText);
          // ========= Now process the polylines ===========
          var circuits = xmlDoc.documentElement.getElementsByTagName("circuit");

          // read each line
          for (var a = 0; a < circuits.length; a++) {
            // get any state attributes
            var label  = circuits[a].getAttribute("name");
            var colour = circuits[a].getAttribute("colour");
            var id = circuits[a].getAttribute("id");
            var description = circuits[a].getAttribute("description");
            // read each point on that line
            var points = circuits[a].getElementsByTagName("point");
            var pts = [];
            var bound = new GLatLngBounds();
			for (var i = 0; i < points.length; i++) {
               pts[i] = new GLatLng(parseFloat(points[i].getAttribute("lat")),
                                   parseFloat(points[i].getAttribute("lng")));
				bound.extend(pts[i]);
            }
            var poly = new GPolygon(pts,"#cccccc",1,1,colour,0.5,{clickable:false});
            polys.push(poly);
            labels.push(label);
            ids.push(id);
            descriptions.push(description);
            map.addOverlay(poly);
			lats.push(bound.getCenter().lat()); 
			lngs.push(bound.getCenter().lng());
			zooms.push(map.getBoundsZoomLevel(bound));
			//latlngbounds.push(poly.Bounds()); //alert(poly.Bounds());

          }
			for ( var i = 0; i < lats.length; i++ )
			{	
				centerLat += lats[i];
				centerLng += lngs[i];
				zoom += zooms[i]; 
			}
			centerLat = centerLat / lats.length;
			centerLng = centerLng / lngs.length;
			zoom = Math.round(zoom / zooms.length)-1;
			map.setCenter(new GLatLng(centerLat, centerLng), zoom);
		    $j("#loading").fadeOut(200);
          // ================================================           
        }
      }
      request.send(null);
    }
    else 
	{
      alert("Désolé, votre navigateur n'est pas compatible avec Gmap !!!");
    }
	
}//init_gmap


//initialisation de la gmap d'un circuit
// itemid => itemId du menu joomla afin de retouver l'url
// idCircuit => id circuit concernée
// kml => tracé du circuit à afficher
function init_gmap_circuit(itemid, idCircuit, kml)
{   

	if (GBrowserIsCompatible()) 
	{
		map =new GMap2(document.getElementById("map_carto"));
		// initialisation de la gmap
		map.setUIToDefault();
		map.disableScrollWheelZoom();
 		map.setCenter(new GLatLng(0,0),0); 
 		//map.setCenter(new GLatLng(46.1988443,5.2281188),10);
		if (kml) {
			geoXml = new GGeoXml(kml);
			map.addOverlay(geoXml);
		}
		
		

		$j.ajax({
		  url: "/php/carte-interactive/ajax/genereXML.php",
		  type: "POST",
		  data: ({itemid : itemid, idCircuit : idCircuit}),
		  dataType: "xml",
		  beforeSend :function(){$j("#loading").fadeIn(500);},
		  complete: function(msg)
		  {
			if(msg.responseText != "")
			{
				  var xmlDoc = GXml.parse(msg.responseText);
				  // obtain the array of markers and loop through it
				  var markers = xmlDoc.documentElement.getElementsByTagName("marker");
				  var nb = markers.length;
				  if(nb > 0)
				  {
					  num = 0;
					  for (var i = 0; i < nb; i++) 
					  {
							// obtain the attribues of each marker
							var lat 			= 	parseFloat(markers[i].getAttribute("lat"));
							var lng 			=	parseFloat(markers[i].getAttribute("lng"));
							var point 			= 	new GLatLng(lat,lng);
							var name 			= 	markers[i].getAttribute("name"); 
							var type 			= 	markers[i].getAttribute("type"); 
							var descr 			= 	markers[i].getAttribute("descr"); 
							var adresse 		= 	markers[i].getAttribute("adresse");
							adresse 			=	adresse.replace('|','<br />');
							var tel 			= 	markers[i].getAttribute("tel");
							tel 				=	tel.replace('|','<br />');
							var url 			= 	markers[i].getAttribute("url");
							var photo 			= 	markers[i].getAttribute("photo");
							var lieu		 	= 	markers[i].getAttribute("lieu");
							if (type != "coupCoeur") {
								num++;
							}
							// create the marker
							var marker = createMarker(point,num,name,type,adresse,tel,descr,url,photo,lieu,'');
							map.addOverlay(marker);
							bounds.extend(point);
				  		}					
						//map.setCenter(bounds.getCenter(), 10);
						map.setZoom(map.getBoundsZoomLevel(bounds));
 						map.setCenter(bounds.getCenter());

						$j("#loading").fadeOut(500);
						
				}
				else
				{
					$j("#loading").empty().html("<h3>Pas de résultat pour cette recherche.</h3>");
					
				}
			 }
			
		  },
		  error: function(msg){
			 //alert(msg.responseText); 
		  }
		});
    }
    else 
	{
      alert("Désolé, votre navigateur n'est pas compatible avec Gmap !!!");
    }
	
}//init_gmap_circuit


//initialisation de la gmap d'un partenaire
// itemid => itemId du menu joomla afin de retouver l'url
// idObjet => id partenaire concerné
function init_gmap_partenaire(Itemid, idObjet, idThem, idSousThem, idCircuit)
{   

	if (GBrowserIsCompatible()) 
	{
		map =new GMap2(document.getElementById("map_carto"));
		// initialisation de la gmap
		map.setUIToDefault();
		map.disableScrollWheelZoom();
 		map.setCenter(new GLatLng(0,0),0); 
 		//map.setCenter(new GLatLng(46.1988443,5.2281188),10);
		
		
	  $j.ajax({
			url: "/php/carte-interactive/ajax/add-marker-carto.ajax.php",
			type: "POST",
			dataType:"script",
			data: ({idSousThem : idSousThem, idThem:idThem, idCircuit:idCircuit, Itemid:Itemid, idObjet:idObjet}),
			beforeSend :function(){$j("#loading").fadeIn(200);},
			complete : function(){$j("#loading").fadeOut(200);}
	  });

    }
    else 
	{
      alert("Désolé, votre navigateur n'est pas compatible avec Gmap !!!");
    }
	
}//init_gmap_partenaire



//initialisation de la gmap des sites remarquables
// itemid => itemId du menu joomla afin de retouver l'url
// idRoute => id route concernée
function init_gmap_site(itemid, idRoute)
{   

	if (GBrowserIsCompatible()) 
	{
		map =new GMap2(document.getElementById("map_carto"));
		// initialisation de la gmap
		map.setUIToDefault();
		map.disableScrollWheelZoom();
 		map.setCenter(new GLatLng(0,0),0); 
 		//map.setCenter(new GLatLng(46.1988443,5.2281188),10);
		
		

		$j.ajax({
		  url: "/php/carte-interactive/ajax/genereXMLSite.php",
		  type: "POST",
		  data: ({itemid : itemid, idRoute : idRoute}),
		  dataType: "xml",
		  beforeSend :function(){$j("#loading").fadeIn(500);},
		  complete: function(msg)
		  {
			if(msg.responseText != "")
			{
				  var xmlDoc = GXml.parse(msg.responseText);
				  // obtain the array of markers and loop through it
				  var markers = xmlDoc.documentElement.getElementsByTagName("marker");
				  var nb = markers.length;
				  if(nb > 0)
				  {
					  num = 0;
					  for (var i = 0; i < nb; i++) 
					  {
							// obtain the attribues of each marker
							var lat 			= 	parseFloat(markers[i].getAttribute("lat"));
							var lng 			=	parseFloat(markers[i].getAttribute("lng"));
							var point 			= 	new GLatLng(lat,lng);
							var name 			= 	markers[i].getAttribute("name"); 
							var type 			= 	markers[i].getAttribute("type"); 
							var descr 			= 	markers[i].getAttribute("descr"); 
							var adresse 		= 	markers[i].getAttribute("adresse");
							adresse 			=	adresse.replace('|','<br />');
							var tel 			= 	markers[i].getAttribute("tel");
							tel 				=	tel.replace('|','<br />');
							var url 			= 	markers[i].getAttribute("url");
							var photo 			= 	markers[i].getAttribute("photo");
							var lieu		 	= 	markers[i].getAttribute("lieu");
							var picto		 	= 	markers[i].getAttribute("picto");
							if (type != "coupCoeur") {
								num++;
							}
							// create the marker
							var marker = createMarker(point,num,name,type,adresse,tel,descr,url,photo,lieu,picto);
							map.addOverlay(marker);
							bounds.extend(point);
				  		}					
						//map.setCenter(bounds.getCenter(), 10);
						map.setZoom(map.getBoundsZoomLevel(bounds));
 						map.setCenter(bounds.getCenter());

						$j("#loading").fadeOut(500);
						
				}
				else
				{
					$j("#loading").empty().html("<h3>Pas de résultat pour cette recherche.</h3>");
					
				}
			 }
			
		  },
		  error: function(msg){
			 //alert(msg.responseText); 
		  }
		});
    }
    else 
	{
      alert("Désolé, votre navigateur n'est pas compatible avec Gmap !!!");
    }
	
}//init_gmap_site


// A function to create the marker and set up the event window
function createMarker(point,num,name,type,adresse,tel,descr,url,photo,lieu,picto) {
	var classInfobulle = "infobulle";
	if (type == 'coupCoeur') { //coup de coeur
        var IconC = new GIcon(G_DEFAULT_ICON);
        IconC.image = "/images/stories/gmarker/bulle-coupCoeur.png";
        IconC.iconSize = new GSize(20,34);
		var marker = new GMarker(point,IconC);
	} else if (type == 'etape') { //ville étape
	   Icon.label = {"url":"/images/stories/gmarker/" + num + ".png",
					  "anchor":new GPoint(2,10),
					  "size":new GSize(16,13)};
		var marker = new GMarker(point,Icon);
	} else { //site remarquable
        var IconC = new GIcon(G_DEFAULT_ICON);
        IconC.image = picto;
        IconC.iconSize = new GSize(20,34);
		var marker = new GMarker(point,IconC);
		classInfobulle = "infowindow_gmap";
	}
	
	var infoBulle = '<div class="'+classInfobulle+'">'
	infoBulle += "<h3>" + name + "</h3>";
	if(photo != "")
	{
		infoBulle += '<img src="'+photo+'" alt="'+name+'" class="left"/>';
	}
	if (type == 'site') { infoBulle += "<div class='adresse'"; }
	infoBulle += "<p>" + adresse + "</p>";
	infoBulle += "<p>" + tel + "</p>";
	if (type == 'site') { infoBulle += "</div>"; }
	infoBulle += "<p>" + descr + "</p>";
	if(url != "")
	{
		infoBulle += '<a href="'+url+'" title="'+name+'" class="plus_infos">d\'infos</a>';
	}
	infoBulle += '</div>';

	GEvent.addListener(marker, "click", function() 
	{
	  marker.openInfoWindowHtml(infoBulle);
	  //removeSelect();
	});

	gmarkers[i] = marker;
	htmls[i] = infoBulle;
	if(openInfoBulle){gmarkers[i].openInfoWindowHtml(htmls[i])};
	
	i++;
	return marker;
}

// click sur un item de la liste = on affiche l'info bulle correspondante
function myclick(i) 
{
	window.location.hash = "#map_carto";
	gmarkers[i].openInfoWindowHtml(htmls[i]);
}


function importanceOrder (marker,b) 
{
	return GOverlay.getZIndex(marker.getPoint().lat()) + marker.importance*1000000;
}


var k =0;
//Cette fonction ajoute les pictos parking et autres point d'intérêt via Ajax
function addCartoMarker  (contenu,lat,lng,marker,total,id_picto,type) { 
  var markerPerso = {};

	if(marker  !=  "")
  {
    var iconePerso = new GIcon(G_DEFAULT_ICON);
    iconePerso.iconSize = new GSize(20, 34);
    //iconePerso.iconAnchor = new GPoint(20, 34);
    //iconePerso.infoWindowAnchor = new GPoint(14, 13);
    iconePerso.image= marker;
    markerPerso = { icon:iconePerso, zIndexProcess:importanceOrder };
  }
  var point = new GLatLng(lat,lng);
  var mMarker = new GMarker(point,markerPerso);
  mMarker.maCategorie = id_picto;
  mMarker.importance = 2;
  aMarkers.push(mMarker);

  k++;
  map.addOverlay(mMarker);
  //bounds.extend(point);
    
  GEvent.addListener(mMarker,"click",function() {
    mMarker.openInfoWindowHtml("<div class='infowindow_gmap'>"+contenu+"</div>");
  });
  
  //gestion auto du zoom et du centre pour la fiche détail partenaire
  if (type == "detail") {
     map.setCenter(new GLatLng(lat,lng), 10);
  }
/*  map.setZoom((map.getBoundsZoomLevel(bounds)-2));
  map.setCenter(bounds.getCenter());*/
  
}

function removeMarkers (category) {
	
	if (category != 'tous') {
		for (var i=0; i<aMarkers.length; i++) 
		{
			if (aMarkers[i].maCategorie == category) 
			{
				aMarkers[i].closeInfoWindow();
				aMarkers[i].hide();
			}
		}
	} else {
		for (var i=0; i<aMarkers.length; i++) // suppression des markers de toute catégorie
		{
				aMarkers[i].closeInfoWindow();
				aMarkers[i].hide();
		}
		for (var i=0; i<gmarkers.length; i++) // suppression des markers initiaux
		{
				gmarkers[i].closeInfoWindow();
				gmarkers[i].hide();
		}
	}
	bounds = new GLatLngBounds();

}


//fonction pour enlever les accents et espaces d'une chaîne de caractères
function RemoveAccents(Texte){
	var Accents = 'àâäéèêëïïöôûüù \'';
	var NoAccen = 'aaaeeeeiioouuu--';
	 
	Accents = Accents.split('');
	NoAccen = NoAccen.split('');
	var i=0;
	while(Accents[i]){
		 var Reg=new RegExp(Accents[i],'gi');
		 Texte=Texte.replace(Reg,NoAccen[i]);
		 i++
	}
	return Texte;
} 
