var xhrMemento = createXhrObject();

// AFFICHAGE DU MEMENTO ============================================================================================

function displayMementoEtabs(){

	//DEBUG
	//alert('displayMementoEtabs\nFonction executée !');
	
	if(xhrMemento){
	
		try{
			xhrMemento.open('GET','memento_display_act.php',true);
			//On passe la fonction écouteur : ATTENTION => ne jamais metter de parentheses a la fonction passée !!
			xhrMemento.onreadystatechange = handleDisplayMementoRequestStateChange;
			xhrMemento.send(null);
		}
		catch(e){
			alert('Erreur JS : function displayMementoEtabs\n' + e.toString());
		}

	}
	else{
		alert('displayMementoEtabs\nObjet xhr manquant !');
	}

}


/*
Fonction ecouteur de la reponse du serveur

Propriétés de readyState :
	0 = uninitilized
	1 = loading
	2 = loaded
	3 = interactive
	4 = complete
	
	ATTENTION => Firefox affiche plusieurs fois les alert
				il renvoie plusieurs fois le statut 200, faire attention a ce qu'il n'execute pas les lecture de reponses a chaque fois !
*/
function handleDisplayMementoRequestStateChange(){
	
	//DEBUG
	//alert('handleRequestStateChange\nFonction executée !');

	if(xhrMemento){
	
		//DEBUG
		//alert(xhrMemento.readyState);
	
		//continue si le traitement est OK
		if(xhrMemento.readyState == 4){
		
			//DEBUG
			//alert('xhrMemento.readyState = 4');
		
			//continue seulement si le statut HTTP est OK
			if(xhrMemento.status == 200){
			
				handleDisplayMementoServerResponse();

				//DEBUG
				//alert('handleRequestStateChange\nStatut HTTP = 200');
			}
		}
	}
	else{
		alert('handleDisplayMementoRequestStateChange\nObjet xhr manquant !');
	}
	
}


//Recupere la reponse du serveur et l'affiche
function handleDisplayMementoServerResponse(){

	//Initialisation de la variable de contenu
	var html = '';
	var mementoXMLResponse;
	//recupere la reponse au format XML
	mementoXMLResponse = xhrMemento.responseXML;
	
	//if(mementoXMLResponse != null){
	
	//alert(mementoXMLResponse);

	var xmlRoot = mementoXMLResponse.documentElement;
	
	
	//Je verifie si le noeud racine a des enfants
	//Si le nombre d'enfants != 0 c'est que le memento n'est pas vide
	if(xmlRoot.childNodes.length != 0){
	
		//DEBUG
		//alert(MementoXMLResponse); //pas de toString sur Object => ne sert a rien et fait planter le script sur IE
		
		//ouverture de la table
		html += '<table>';
		
		//Je recupere les nodes des classes : (tout les tags <classes>)
		var xmlClasses = xmlRoot.getElementsByTagName('classe');
		//alert(xmlClasses.length) //renvoie 3 OK (test avec 3 classes)
		
		//Boucle qui parcours les tags <classe>
		for(var i = 0; i < xmlClasses.length; i++){
		
			//Classe en cours :
			var xmlClasse = xmlClasses.item(i);
			//Attributs de la classe :
			var id_classe = xmlClasse.getAttribute('id_classe');
			var nom_simple_classe = xmlClasse.getAttribute('nom_simple_classe');
			var nom_url_classe = xmlClasse.getAttribute('nom_url_classe');
			//alert(xmlClasse.getAttribute('id_classe')); //OK
			
			//Je recupere le node des etablissements de la classe en cours :
			var xmlEtabs = xmlClasse.getElementsByTagName('etab');
			//alert('nb etabs = '+xmlEtabs.length); //OK
			
			//Boucle qui parcours les etabs de la classe en cours 
			for(var j = 0; j < xmlEtabs.length; j++){
				
				//Etablissement en cours :
				var xmlEtab = xmlEtabs.item(j);
				//Attributs de l'etablissement :
				var id_etab = xmlEtab.getAttribute('id_etab');
				var nom_etab = xmlEtab.getAttribute('nom_etab');
				var nom_url_etab = xmlEtab.getAttribute('nom_url_etab');
				var nom_ville = xmlEtab.getAttribute('nom_ville');
				var nom_simple_ville = xmlEtab.getAttribute('nom_simple_ville');
				//alert(xmlEtab.getAttribute('nom_etab')); //OK
				
				//construction du lien vers l'etablissement
				var aEtabHref = nom_url_classe+'-'+nom_simple_ville+'-'+id_etab+'-'+nom_url_etab+'.html';
				var aEtabTitle = 'Voir la fiche de l\'établissement : '+unescape(nom_etab).toUpperCase()+' - '+nom_url_classe+' - '+unescape(nom_ville);
				
				//Création du HTML a insérer pour chaque etablissement :
				html += '<tr>'; //voir les classes CSS pour la table
					html += '<td width="5"></td>'; //separation
					html += '<td width="30"><img src="images/icone_'+nom_simple_classe+'_micro.gif"</td>';
					html += '<td width="10"></td>'; //separation
					html += '<td width="240" class="ligneDottedBottom">';
						html += '<span class="microTypo aVertFluo aNoirHover bold">';
							html += '<a href="'+aEtabHref+'" title="'+aEtabTitle+'">';
								html += unescape(nom_etab).toUpperCase();
							html += '</a>';
						html += '</span>';
						html += '<br/>';
						html += '<span class="microTypo grisMoyen">';
							html += unescape(nom_ville);
						html += '</span>';
					html += '</td>';
					html += '<td><img src="images/icone_micro_suppr.png" onclick="delFromMemento(\''+id_classe+'\',\''+id_etab+'\');" class="curseurMain" title="Supprimer cet établissement de la sélection"/></td>';
					//html += '<td></td>';
				html += '</tr>';
			
			}

		}
		
		html += '</table>';
	
	}//fin de if memento pas vide ?
	else{
	
		//Si memento vide,  affichage de limage par defaut
		html = '<div class="padd10"><img src="images/memento_default.gif"/></div>';
		
	}

	//Recuperation de la div ou il faut inserer le HTML généré
	var divMemento = document.getElementById('divMemento');
	//Ajout du HTML généré :
	divMemento.innerHTML = html;

}


// AJOUT AU MEMENTO ======================================================================================================

function addToMemento(id_classe, nom_simple_classe, nom_url_classe, id_etab, nom_etab, nom_ville, nom_simple_ville)
{

	//alert('addToMemento RUN');
	
	if(xhrMemento){
	
		var dataPost = 'id_classe='+id_classe+'&nom_simple_classe='+nom_simple_classe+'&nom_url_classe='+nom_url_classe+'&id_etab='+id_etab+'&nom_etab='+escape(nom_etab)+'&nom_ville='+escape(nom_ville)+'&nom_simple_ville='+nom_simple_ville;

		try{
			xhrMemento.open('POST','memento_add_act.php',true);
			xhrMemento.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;"); 
			//On passe la fonction écouteur : ATTENTION => ne jamais metter de parentheses a la fonction passée !!
			xhrMemento.onreadystatechange = handleAddMementoRequestStateChange;
			xhrMemento.send(dataPost);
		}
		catch(e){
			alert('Erreur JS : function addToMemento\n' + e.toString());
		}

	}
	else{
		alert('displayMementoEtabs\nObjet xhr manquant !');
	}
}

function handleAddMementoRequestStateChange()
{

	//alert('handleAddMementoRequestStateChange'); //OK
	if(xhrMemento){
	
		//DEBUG
		//alert(xhrMemento.readyState);
	
		//continue si le traitement est OK
		if(xhrMemento.readyState == 4){
		
			//DEBUG
			//alert('xhrMemento.readyState = 4');
		
			//continue seulement si le statut HTTP est OK
			if(xhrMemento.status == 200){
			
				handleAddMementoServerResponse();

				//DEBUG
				//alert('handleRequestStateChange\nStatut HTTP = 200');
			}
		}
	}
	else{
		alert('handleAddMementoRequestStateChange\nObjet xhr manquant !');
	}

}

function handleAddMementoServerResponse()
{
	///alert(xhrMemento.responseText);

	//recupere la reponse au format XML
	var mementoXMLResponse = xhrMemento.responseXML;

	//alert(xhrMemento.responseText);

	//passer l'affichage des boutons en mode DEL
	//La reponse XML contient les infos a passer pour le nouveau onclick
	switchDisplayMementoBtns(mementoXMLResponse, 'DEL');
	
	//Mise a jour de laffichage du memento
	displayMementoEtabs();

}

// SUPPRESSION AU MEMENTO ======================================================================================================
function delFromMemento(id_classe, id_etab)
{
	//alert('delFromMemento RUN !');

	if(xhrMemento){
	
		var dataPost = 'id_classe='+id_classe+'&id_etab='+id_etab;

		try{
			xhrMemento.open('POST','memento_del_act.php',true);
			xhrMemento.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;"); 
			//On passe la fonction écouteur : ATTENTION => ne jamais metter de parentheses a la fonction passée !!
			xhrMemento.onreadystatechange = handleDelMementoRequestStateChange;
			xhrMemento.send(dataPost);
		}
		catch(e){
			alert('Erreur JS : function addToMemento\n' + e.toString());
		}

	}
	else{
		alert('displayMementoEtabs\nObjet xhr manquant !');
	}
}

function handleDelMementoRequestStateChange()
{

	//alert('handleAddMementoRequestStateChange'); //OK
	if(xhrMemento){
	
		//DEBUG
		//alert(xhrMemento.readyState);
	
		//continue si le traitement est OK
		if(xhrMemento.readyState == 4){
		
			//DEBUG
			//alert('xhrMemento.readyState = 4');
		
			//continue seulement si le statut HTTP est OK
			if(xhrMemento.status == 200){
			
				handleDelMementoServerResponse();

				//DEBUG
				//alert('handleDelMementoRequestStateChange\nStatut HTTP = 200');
			}
		}
	}
	else{
		alert('handleDelMementoRequestStateChange\nObjet xhr manquant !');
	}

}

function handleDelMementoServerResponse()
{
	//recupere la reponse au format XML
	var mementoXMLResponse = xhrMemento.responseXML;
	
	//alert(xhrMemento.responseText);

	//passer l'affichage des boutons en mode DEL
	//La reponse XML contient les infos a passer pour le nouveau onclick
	switchDisplayMementoBtns(mementoXMLResponse, 'ADD');
	
	//Mise a jour de laffichage du memento
	displayMementoEtabs();

}


// SWITCH AFFICHAGE DES BOUTONS DU MEMENTO ======================================================================================================================

function switchDisplayMementoBtns(btnDataXML, switchTo)
{
	//alert(btnDataXML); //OK

	//traitement des infos XML sur le boutton============================
	var xmlRoot = btnDataXML.documentElement;
	
	//recuperation des infos sur la classe ===============================
	//Je recupere les nodes des classes : (tout les tags <classe>)
	var xmlClasses = xmlRoot.getElementsByTagName('classe');
	//Selection de la premiere classe (il n'est censé y en avoir qu'une) :
	var xmlClasse = xmlClasses.item(0);
	//Attributs de la classe :
	var id_classe = xmlClasse.getAttribute('id_classe');
	var nom_simple_classe = xmlClasse.getAttribute('nom_simple_classe');
	var nom_url_classe = xmlClasse.getAttribute('nom_url_classe');
	
	//recuperation des infos sur letab ===================================
	//Je recupere le node des etablissements de la classe en cours :
	var xmlEtabs = xmlClasse.getElementsByTagName('etab');	
	//Selection du premier etab
	var xmlEtab = xmlEtabs.item(0);
	//Attributs de l'etablissement :
	var id_etab = xmlEtab.getAttribute('id_etab');
	var nom_etab = xmlEtab.getAttribute('nom_etab');
	var nom_ville = xmlEtab.getAttribute('nom_ville');
	var nom_simple_ville = xmlEtab.getAttribute('nom_simple_ville');
	
	var btnName = 'memento_'+id_classe+'_'+id_etab;
	
	var icones = document.getElementsByName(btnName);
	//alert(icones.length); //OK
	
	//switch en mode DEL
	if(switchTo == 'DEL'){
	
		for(var i = 0; i < icones.length; i++) {
			// Selon l'image de base
			
			var icone_src = icones[i].src.split('/');
			var index_src = icone_src.length-1;
						
			if(icone_src[index_src] == 'icone_memento_add.png')
			{
				icones[i].src = 'images/icone_memento_del.png';
				
			}
			else
			{	
				icones[i].src = 'images/icone_bookmark_memento_del_hover.png';
				icones[i].onmouseover = function(){switchBookmark('img_memento','icone_bookmark_memento_del_hover.png','icone_bookmark_memento_del.png');
										  displayLegend('Enlever de la sélection');
										 };
				icones[i].onmouseout = function(){switchBookmark('img_memento','icone_bookmark_memento_del_hover.png','icone_bookmark_memento_del.png');
										 displayLegend('');
										 };
			}
			//Utilisation d'une fonction anonyme JS
			icones[i].onclick = function(){ delFromMemento(id_classe, id_etab); }
			icones[i].title = 'Supprimer l\'établissement '+unescape(nom_etab).toUpperCase()+' de votre sélection';
		}
	
	}
	else if(switchTo == 'ADD'){
	
		for(var i = 0; i < icones.length; i++) {
			var icone_src = icones[i].src.split('/');
			var index_src = icone_src.length-1;
			
			if(icone_src[index_src] == 'icone_memento_del.png')
			{
				icones[i].src = 'images/icone_memento_add.png';
			}
			else
			{
				icones[i].src = 'images/icone_bookmark_memento_add_hover.png';
				icones[i].onmouseover = function(){switchBookmark('img_memento','icone_bookmark_memento_add_hover.png','icone_bookmark_memento_add.png');
										  displayLegend('Ajouter à la sélection');
										 };
				icones[i].onmouseout = function(){switchBookmark('img_memento','icone_bookmark_memento_add_hover.png','icone_bookmark_memento_add.png');
										 displayLegend('');
										 };
			}
			//Utilisation d'une fonction anonyme JS
			//les parametres nom_etab et nom_ville on un unescape() car il ont été rawurlencode dans le XML par le PHP
			icones[i].onclick = function(){ addToMemento(id_classe, nom_simple_classe, nom_url_classe, id_etab, unescape(nom_etab), unescape(nom_ville), nom_simple_ville); }
			icones[i].title = 'Ajouter l\'établissement '+unescape(nom_etab).toUpperCase()+' à votre sélection';
		}
		
	}

}







