//FONCTION RENVOYANT UN OBJET AJAX
function getXhr(){
    var xhr = null;
    if (window.XMLHttpRequest || window.ActiveXObject){
		if (window.ActiveXObject){
		    try{
				xhr = new ActiveXObject("Msxml2.XMLHTTP");
	         }
	         catch(e){
	    		xhr = new ActiveXObject("Microsoft.XMLHTTP");
	         }
	    }
	    else {
	       xhr = new XMLHttpRequest(); 
	    }
    }
    else {
    	alert("Votre navigateur ne supporte pas l'objet XMLHTTPRequest...");
    	return null;
    }
    return xhr;
}
//FONCTION EFFECTUANT UNE REQUETE AJAX
// la variable argument est de la forme "argument1=data1&argument2=data2 etc..."
function requestAjax(filename,argument,method,callback) {
		var xhr = getXhr();
		if ( (!method=='GET')||(!method=='POST') ) 	alert('methode envoi de Ajax mal definie');
		if ( (method=='GET')&&(argument!=null) ) 		{
			filename=filename+'?'+argument;
			argument=null;			
			}		
		xhr.open(method, filename, true);
		xhr.onreadystatechange = function() {
										if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) {
														callback(xhr);
										}
									};
		if (method=="POST"){
			xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded; charset=iso-8859-15");
		}		
		xhr.send(argument);
}
//la variable map est définie en globale pour être utilisé dans d'autres fonctions
var map=null;
//FONCTION DE CHARGEMENT DE LA CARTE et des ses dimensions
function chargerCarte(malargeur,malongueur) {
	var divmap=document.getElementById('map');
	
	//divmap.innerHTML='ID=MAP C ICI';
	
	divmap.style.width=malargeur;	
	divmap.style.height=malongueur;	
	divmap.style.display='block';
	
	//alert('chargement carte');
	
	if (GBrowserIsCompatible()) {
		//chargement de la carte
		map = new GMap2(divmap);
		map.addControl(new GSmallMapControl());
		map.addControl(new GMapTypeControl());
		map.setCenter(new GLatLng(49.05, -0.50), 8);
	}/**/
}

//cette variable est un tableau des éléménts "établissement" du document XML	
//on utilisera les index du tableau pour récupérer les informations concernant ce noeud XML (coordonnées, adresse, noms, etc..)
var etabs=null;	
//identifiant de l'etablissement dont l'infobulle est affichée
var idEtabselect=null;
var idFormselect=null;
//FONCTION d'AFFICHAGE DES MARKERS SUR LA CARTE SUITE A UNE REQUETE AJAX
function  chargerDonnees(data){
	var xml=data.responseXML;
	//alert(data.responseText);
	etabs=xml.getElementsByTagName('etablissement');				
	for (var i=0; i<LengthEtab();i++){
		AjoutMarker(i);		
	}	
}
//fonction renvoyant le nombre d'élément "etablissement" dans le flux Xml
function LengthEtab(){
	return etabs.length;				
}
//renvoit les nom et coordonnÃ©es d'un  Ã©tablissement à partir de leur numéro d'index
function CoorEtabs(index){	
	var retour='<div class="geoloc"><p class="geoloc">';
	
	try{		retour+= etabs[index].getElementsByTagName('etablissement_nom')[0].firstChild.nodeValue+'<br/>';	
	}		catch(e){
	}	
	try{		retour+= etabs[index].getElementsByTagName('adresse')[0].firstChild.nodeValue+'<br/>';
	}		catch(e){
	}	
	try{		retour+= etabs[index].getElementsByTagName('CP')[0].firstChild.nodeValue+' ' ;
	}		catch(e){
	}	
	try{		retour+= etabs[index].getElementsByTagName('commune')[0].firstChild.nodeValue;
	}	catch(e){
	}
	retour+='</p></div>';	
	return retour;
}
//renvoit la liste des formations d'un Ã©tablissement ou bien null si pas de formations
var formIDS=new Array();
var trouve=false;
function FormationsEtabs(index){	
	var retour=null;
	var nbreformations=etabs[index].getElementsByTagName('formation').length;
	if ( nbreformations>0){
		retour='<div class="geoloc"><ul class="geoloc">';								
		for (var y=0;y<nbreformations;y++){
			
			retour+='<li>'+etabs[index].getElementsByTagName('formation')[y].getElementsByTagName('lien_formation')[0].firstChild.nodeValue;
			try{
				retour+=' (du '+etabs[index].getElementsByTagName('formation')[y].getElementsByTagName('date_debut')[0].firstChild.nodeValue;
				retour+=' au '+etabs[index].getElementsByTagName('formation')[y].getElementsByTagName('date_fin')[0].firstChild.nodeValue+')';
			}catch (e){}
			retour+='</li>';
			//alert(etabs[index].getElementsByTagName('formation')[y].attributes[0].nodeValue);
			if (etabs[index].getAttribute('etablissement_type'))
				formIDS.push(etabs[index].getAttribute('etablissement_type')+etabs[index].getAttribute('etablissement_id'));
		}
		retour+='</ul></div>';
	}
	return retour;
}
//ajout de marker grÃ¢ce Ã  un noeud "Ã©tablissement" du flux Xml
function AjoutMarker(index){	
	//alert('ajout marker');
	//"géoloc" est le noeud xml "geoloc" du noeud "etablissement" dont l'index est passé en argument
	var geoloc=etabs[index].getElementsByTagName('geoloc')[0];
	
	
	//on récupère les coordonnées de l'établissement
	var point = new GLatLng(parseFloat(geoloc.getAttribute("lat")), parseFloat(geoloc.getAttribute("lng")), 9);
	//instanciation du marker
	var marker=new GMarker(point);	
		//le marker est attaché à la carte
	map.addOverlay(marker);		

	
	//variable pour la creation des onglets
	var onglets = new Array;
	onglets[0] = new GInfoWindowTab ('Lieu', CoorEtabs(index) ); 
	if (FormationsEtabs(index)) onglets[1] = new GInfoWindowTab ("Formation(s)", FormationsEtabs(index)); 
	var options = {   maxWidth : 400, selectedTab : 0 };

	//si les champs "formations" sont remplis on ajoute une info-bulle par onglet qui se declenche au click
	if (FormationsEtabs(index)){					
		marker.bindInfoWindowTabsHtml(onglets,options);				
	}
	//sinon on affiche une info bulle simple avec adresse uniquement
	else{
		marker.bindInfoWindowHtml( CoorEtabs(index) );
	}
	//si l'etablissement selectionné est celui-ci on ajoute une deuxieme info bulle qui s'ouvre dés le chargement,
	//elle possède les mêmes infos que la précédente
	var x=0;
	while (x<formIDS.length && trouve==false){
		if (formIDS[x]==idFormselect){
			idEtabselect=etabs[index].getAttribute("etablissement_id");
			trouve=true;
		}
		x++;
	}
	
	
	if (etabs[index].getAttribute("etablissement_id")==idEtabselect){
		//si les champs "formations" sont remplis on ajoute une info-bulle par onglet qui se declenche au click
		if (FormationsEtabs(index)){
			marker.openInfoWindowTabsHtml(onglets,options);	
		}
		//sinon on affiche une info bulle simple avec adresse uniquement
		else{
			marker.openInfoWindowHtml( CoorEtabs(index) );
		}	
	}
	
	//gestionnaire d'evenement
	//google.maps.Event.addListener(marker, "mouseover", function() {marker.openInfoWindowHtml('test')});
	//google.maps.Event.addListener(marker, "mouseout", function() {marker.bindInfoWindowHtml('test')});
}


function AfficherCarte(selectedID,type){


	//si cette variable n'est pas nulle, l'info-bulle correspondant à cet ID apparaitra automatiquement voir fonction AjoutMarker
	if (type=='ofs')idEtabselect=selectedID;
	if (type=='afm')idFormselect=selectedID;
	//affichage de la carte et de sa div
	document.getElementById('map').style.display='block';
	chargerCarte('700px', '500px');	
	
	//requete Ajax qui sera traitée par  la fonction chargerDonnees()
	//les argument passé dans le Get de la requete Ajax, different selon qu'il s'agisse de formation continue ou apprentissage
	var args='type='+type;
	requestAjax('/ajax_carto',args,'GET',chargerDonnees);/**/
	//window.location.href="#map1";
	//document.location.href="#contmap";
}


