//Variables globales des scripts de recherche//
	
	//Xhr pour la construction du XML
	var xhrNbEtabs = createXhrObject();
	//XML des etablissements
	var xmlEtabs;

function displayNbEtabs(id_ville,id_classe)
{
	
	if(xhrNbEtabs)
	{
		
		try{
			xhrNbEtabs.open('GET', 'recherche_xml_act.php?id_ville='+id_ville+'&id_classe='+id_classe,true);
			//On passe la fonction écouteur : ATTENTION => ne jamais metter de parentheses a la fonction passée !!
			xhrNbEtabs.onreadystatechange = handleNbEtabsRequestStateChange;
			xhrNbEtabs.send(null);
			
		}
		catch(e){
			alert('Erreur JS : function displayNbEtabs\n' + e.toString());
		}

	}
	else{
		alert('loadRecherche\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 handleNbEtabsRequestStateChange(){

	if(xhrNbEtabs){

		//continue si le traitement est OK
		if(xhrNbEtabs.readyState == 4){

			//continue seulement si le statut HTTP est OK
			if(xhrNbEtabs.status == 200){
			
				handleNbEtabsServerResponse();

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

/*
 * Fonction reponse de l'appel ajax
 */
function handleNbEtabsServerResponse(){

	//recupere la reponse au format XML
	var rechercheXMLResponse = xhrNbEtabs.responseXML;
	
	//alert(xhrNbEtabs.responseText);

	if(rechercheXMLResponse)
	{
		//racine du xml des etabs
		var xmlRoot = rechercheXMLResponse.documentElement;
		//XML des etablissements
		xmlEtabs = xmlRoot.getElementsByTagName('etablissement');
		//Execution du calcul du nombre d'etab
		calculNbEtabs();
	}
	
}

/*
 * Fonction calculant le nombre de résultats de la recherche
 * On affiche ce nombre dans le compteur à la fin du calcul et on affiche / masque le bouton du formulaire
 */
function calculNbEtabs()
{
	//Contient des ids etab par type de critre 
	//arrayType['sclasses'] = Array(1,2,3,4);
	var arrayType = new Array();
	arrayType['sclasse'] = new Array();
	arrayType['lieu'] = new Array();
	arrayType['genre'] = new Array();
	arrayType['all'] = new Array();
	
	var arrayEtabs = new Array();
	
	var nbCriteres = 0;
	var nbEtabs = xmlEtabs.length;
	
	// On récupère les cases cochées
	var criteresCheck = document.getElementsByTagName('input');
	
	
	for(var j=0; j<criteresCheck.length; j++)
	{
		// On regarde les critères selectionnés
		if(criteresCheck[j].checked && criteresCheck[j].type == "checkbox")
		{	
			//L'id des criteres est formé de la maniere suivant (id_genre_18 ou id_sclasse_2) on peut donc les découper afin de traiter le XML
			var dataCritere = criteresCheck[j].id.split('_');
			
			//Recupere le type du critere (sclasse, lieu, genre) correspont a l'index 1 de l'id splité
			var typeCritere = dataCritere[1];
			//Correspond à un id_sclasse, un id_genre ou code de lieu (00 pour centre, 99 pour hors centre et 01,02,03 etc pour les arrondissements)
			var idCritere = dataCritere[2];

			// Pour chaque critère, on parcours les etablissements presents dans le XML
			for(var i=0; i<xmlEtabs.length; i++)
			{
				//recupere l'id etab de l'etab en cours
				var id_etab = xmlEtabs.item(i).getAttribute('id_etab');
				
				//noeud xml avec les tags du type de critere en cours
				var xmlCriteresEtab = xmlEtabs.item(i).getElementsByTagName(typeCritere);
	
				// Si l'établissement n'a pas encore été retenu par le type critère courant on regarde si il a le critere courant
				
				//if(!(id_etab in arrayType[typeCritere]))  //OLD
				if(!in_array(id_etab, arrayType[typeCritere]))
				{
					//Parcours des balises du typeCritere en cours dans le xml de l'etab
					//exemple : si le typeCritre = genre, alors on parcours toutes ses balises <genre> récupéré précédement
					for(var k=0; k < xmlCriteresEtab.length; k++)
					{
						//Si l'etab possède le critere recherché, on l'ajoute (id_etab) a arrayType[typeCritere]
						if(xmlCriteresEtab.item(k).getAttribute('id_'+typeCritere) == idCritere)
						{							
							arrayType[typeCritere].push(id_etab);
							if(!in_array(id_etab, arrayType['all'])){
								arrayType['all'].push(id_etab);
							}
						}
							
					}//fin parcours des criteres de l'etab
					
				}
				
			}//fin de parcours des etablissements
			
			nbCriteres++;		
				
		}//Fin de IF checkbox est coché
											
	}//FIN de parcours des checkbox
		

	if(arrayType['sclasse'].length != 0 && arrayType['lieu'].length == 0 && arrayType['genre'].length == 0){
		arrayEtabs = array_intersect(arrayType['all'], arrayType['sclasse']);
	}
	else if(arrayType['sclasse'].length == 0 && arrayType['lieu'].length != 0 && arrayType['genre'].length == 0){
		arrayEtabs = array_intersect(arrayType['all'], arrayType['lieu']);
	}
	else if(arrayType['sclasse'].length == 0 && arrayType['lieu'].length == 0 && arrayType['genre'].length != 0){
		arrayEtabs = array_intersect(arrayType['all'], arrayType['genre']);
	}
	else if(arrayType['sclasse'].length != 0 && arrayType['lieu'].length != 0 && arrayType['genre'].length == 0){
		arrayEtabs = array_intersect(arrayType['all'], arrayType['sclasse'], arrayType['lieu']);
	}
	else if(arrayType['sclasse'].length != 0 && arrayType['lieu'].length == 0 && arrayType['genre'].length != 0){
		arrayEtabs = array_intersect(arrayType['all'], arrayType['sclasse'], arrayType['genre']);
	}
	else if(arrayType['sclasse'].length == 0 && arrayType['lieu'].length != 0 && arrayType['genre'].length != 0){
		arrayEtabs = array_intersect(arrayType['all'], arrayType['lieu'], arrayType['genre']);
	}
	else if(arrayType['sclasse'].length != 0 && arrayType['lieu'].length != 0 && arrayType['genre'].length != 0){
		arrayEtabs = array_intersect(arrayType['all'], arrayType['sclasse'], arrayType['lieu'], arrayType['genre']);
	}
	
	// Si il y a des criteres on compte le nombre did etab dans le tableau issu de array_intersect()
	if(nbCriteres != 0)
	{
		nbEtabs = array_count(arrayEtabs);
	}
	
	// On affiche le nombre d'établissements pour la recherche
	var divCompteur = document.getElementById('compteur');
	divCompteur.innerHTML = nbEtabs;
	
	// On vérifie si la recherche est valide (=> renvoit des résultats), si ce n'est pas le cas, on enlève le bouton et on affiche le message d'erreur
	var btnSubmitSearch = document.getElementById('btnSubmitSearch');
	var searchNull = document.getElementById('searchNull');
	if(nbEtabs == 0)
	{
		btnSubmitSearch.style.display = 'none';
		searchNull.style.display = 'block';
	}
	else if(btnSubmitSearch &&(typeof(btnSubmitSearch) == 'object'))
	{
		btnSubmitSearch.style.display = 'block';
		searchNull.style.display = 'none';
	}
	
	
}


//============================================================================================================

/*
 * Mise a jour de l'affichage des filtres en JS
 */
function displayListeFiltres()
{
	//recuperation du formulaire
	var rechercheForm = document.getElementById('rechercheForm');
	//recuperation des inputs filtrés apres avec le type pour n'agir que sur les checkboxes
	var filtresCheckboxes = rechercheForm.getElementsByTagName('input');
	//Init du html
	var html = '';
	//Init du nombre de criteres
	var nbFiltres = 0;
	//span du lien de suppression de filtres
	var lienSupprFiltres = document.getElementById('lienSupprFiltres');
	
	html += '<table width="324">';
	
	//boucle sur les tags input
	for(var i=0; i<filtresCheckboxes.length; i++)
	{
		//Si c'est une  checkbox et si elle est cochée
		if(filtresCheckboxes[i].checked && filtresCheckboxes[i].type == 'checkbox')
		{		
			html += '<tr height="22">';
				html += '<td width="48"></td>';
					html += '<td width="239" class="ligneDottedBottom"><span class="microTypo bold"> '+filtresCheckboxes[i].value+'</span></td>';
					//html += '<td width="23"><img src="images/icone_micro_suppr.png"></td>';
					//TODO: développer le systeme de suppression des filtres
					html += '<td width="37"></td>';
			html += '</tr>';
			
			//Incrémentation du nombre de checkbox cochées
			nbFiltres ++;
		}
		
	}

	//Si il n'y a pas de filtres on met la ligne lindiquant par defaut et on masque le lien de suppression de filtres
	if(nbFiltres == 0)
	{
		html += '<tr height="22">';
			html += '<td width="48"></td>';
				html += '<td width="239" class="ligneDottedBottom"><span class="microTypo bold"> Aucun filtre selectionné </span></td>';
				//html += '<td width="23"><img src="images/icone_micro_suppr.png"></td>';
				//TODO: développer le systeme de suppression des filtres
				html += '<td width="37"></td>';
		html += '</tr>';
		
		//on masque le lien de suppression des fitres
		lienSupprFiltres.style.display = 'none';
	}
	//Si il y a des filtres on affiche le lien de suppression de filtres
	else{
		//on affiche le lien de suppression des fitres
		lienSupprFiltres.style.display = '';
	}
	
	html += '</table>';

	//Mise à jour du nombre de filtres
	var divCompteurFiltre = document.getElementById('compteurFiltres');
	divCompteurFiltre.innerHTML = nbFiltres;
	
	//Mise a jour de la liste des filtres
	var tableFiltres =  document.getElementById('listeFiltresJS');
	tableFiltres.innerHTML = html;
	
}


function resetRechercheForm(){

	//recuperation du formulaire
	var rechercheForm = document.getElementById('rechercheForm');
	//recuperation des inputs filtrés apres avec le type pour n'agir que sur les checkboxes
	var filtresCheckboxes = rechercheForm.getElementsByTagName('input');
	//recuperation de tous les compteursGroupesSearch
	var compteursGroupesSearch = rechercheForm.getElementsByTagName('span');
	
	//alert(compteursGroupesSearch.length);
	
	//boucle sur les tags input
	for(var i=0; i < filtresCheckboxes.length; i++)
	{
		//Si c'est une  checkbox et si elle est cochée
		if(filtresCheckboxes[i].checked && filtresCheckboxes[i].type == 'checkbox')
		{	
			filtresCheckboxes[i].checked = false;
		}
		
	}
	
	//boucle sur les compteurs pour les mettre a 0
	for(var j=0; j < compteursGroupesSearch.length; j++){
		//Rustine ie8, je ne peut pas passer par name pour les span ie8 au jour daujourdhui il aime pas ! le vilain
		//alors je verifie si les 20 premier caractere des ids des span de la page correspondent a compteurGroupeSearch ...
		if(compteursGroupesSearch[j].id.substr(0,20) == 'compteurGroupeSearch'){
			compteursGroupesSearch[j].innerHTML = '0';
		}
		
	}

	//Mise a jour de l'affichage des filtres
	displayListeFiltres();
	
	//Mise a jour du nbre de resultats
	calculNbEtabs();

}



/*
 * Compteur simple pour savoir le nombre de cases cochées par groupe
 */
function countFiltreGroupe(id)
{

	var idGroupe = document.getElementById('groupeSearch_'+id);
	
	var checkboxGroupe = idGroupe.getElementsByTagName('input');
	
	var compteur = 0;
	
	for(i in checkboxGroupe)
	{
		if(checkboxGroupe[i].checked)
		{
			compteur++;
		}
	}
	
	var compteurGroupeSearch = document.getElementById('compteurGroupeSearch_'+id);

	compteurGroupeSearch.innerHTML = compteur;

}



