/*
fonctions liées au moteur de recherche
testé sous : Opera 8.51
						 Internet Explorer 6 
						 Netscape 7 
						 Mozilla Firefox 1.0.7

version originale par Benoit Vaudel
modifié par Sébastien Derrey le 20/12/2005
*/

t_num_select = new Array('haut','bas');

// *********************************************************
// Fonction permettant d'afficher les propriétés d'un objet
// *********************************************************		
	function affiche_proprietes(objet)
	{
		var noms="";
		cpt=0;
		cpt_propriete = 1;
		nbr_propriete = 0;
		nbr_element_par_page = 10;
		for (var nom in objet)
		{
			nbr_propriete++;
		}
		alert("Objet ("+nbr_propriete+" propriétés)\n\ntagName = "+objet.tagName+"\n\nid = "+objet.id+"\n\nname = "+objet.name);
		for (var nom in objet)
		{
			noms += cpt_propriete+" - "+nom + "=" + objet[nom] + "\n";
			noms += "--------------------------------------------\n";
			cpt++;
			cpt_propriete++;
			if (cpt==nbr_element_par_page)
			{
				alert(noms);
				cpt=0;
				noms="";
			}
		}
		alert(noms);
	}

function cocher_site(input_appelant, t_id_site)
{	
	if(input_appelant == 'sites')
	{
		if(document.getElementById(input_appelant).checked)
		{
			document.getElementById(input_appelant).attributes['etat'].nodeValue = 1;
			for(var i = 0; i < t_id_site.length; i += 1)
			{
				var id_input = 'site_'+t_id_site[i];
				if(!document.getElementById(id_input).checked)
				{
					document.getElementById(id_input).attributes['etat'].nodeValue = 1;
					document.getElementById(id_input).checked = true;
				}
			}
		}
		else
		{
			document.getElementById(input_appelant).attributes['etat'].nodeValue = 0;
		}
	}

}

function decocher_site(input_appelant, t_id_site)
{
	if(!document.getElementById(input_appelant).checked)
	{
		
		document.getElementById(input_appelant).attributes['etat'].nodeValue = 0;
		if(document.getElementById('sites')!=null)
		{
			document.getElementById('sites').attributes['etat'].nodeValue = 0;
			document.getElementById('sites').checked = false;
		}
	}
	else
	{
		document.getElementById(input_appelant).attributes['etat'].nodeValue = 1;
		var flag = true;
		for(var i = 0; i < t_id_site.length; i += 1)
		{
			var id_input = 'site_'+t_id_site[i];
			if(!document.getElementById(id_input).checked)
			{
				flag = false;
			}
		}
		if(flag == true && document.getElementById('sites')!=null)
		{
			document.getElementById('sites').attributes['etat'].nodeValue = 1;
			document.getElementById('sites').checked = true;
		}
	}
}

function affiche_elements_naviguation(type)
{
	document.getElementById('fleches_'+type+'es_haut').style.display = '';
	document.getElementById('fleches_'+type+'es_bas').style.display = '';
}

function cache_elements_naviguation(type)
{
	document.getElementById('fleches_'+type+'es_haut').style.display = 'none';
	document.getElementById('fleches_'+type+'es_bas').style.display = 'none';
}

function modifie_style_numero_page(id_num,type)
{
	if(type=='gras')
	{
		document.getElementById(id_num).className = "rechercheLienPaginationSelectionne";
		document.getElementById(id_num).style.display = "";			
	}
	else if(type=='normal')
	{
		document.getElementById(id_num).className = "rechercheLienPaginationNonSelectionne";
		document.getElementById(id_num).style.display = "";	
	}	
	else
	{
		document.getElementById(id_num).className = "rechercheLienPaginationNonSelectionne";		
		document.getElementById(id_num).style.display = "none";	
	}
}

function selection_module(id_max,nb_page_max_par_pagination,nb_ppage)
{
	var valeur_select_module = document.getElementById('select_module').value;
	var nb_result_par_page = nb_ppage;
	
	// On commence par tout cacher (les pages et les résultats)
	for(var j = 0; j < t_num_select.length; j++)
	{
		// On cache tous les boutons d'affichage de page de résultat
		cache_elements_naviguation('precedent');
		var i = 1;
		while(document.getElementById('page'+i+'_'+t_num_select[j]))
		{
			document.getElementById('page'+i+'_'+t_num_select[j]).attributes['etat'].nodeValue = 0;
			modifie_style_numero_page('page'+i+'_'+t_num_select[j],'cache');
			i += 1;
		}
	}


	/********************************************************************
	
	GESTION DES RESULTATS
	
	********************************************************************/

	// 
	//	Si on a plus de résultats que le nombre de résultats par page on affiche :
	//		-> les boutons d'affichage des pages résultats nécessaires, on se limite aux $nb_page_max_par_pagination premières pages
	//		-> s'il y a plus de $nb_page_max_par_pagination pages on affiche le lien vers les pages suivantes (et peut-être fin)
	//	Il faut penser à afficher les 'nb_result_par_page' premiers résultats
	//
	// On calcule le nombre de résultats correspondant au 'filtre' choisit dans le select, tout en affichant les bons résultats
	//
	
	var cpt = 0;
	
	// la selection des sites n'existe plus (pour une raison d'affichage)
	// on affiche donc par défaut les résultats sans les filtrer par site
	var valeur_select_site = 'Tous les sites';
	if(valeur_select_site == 'Tous les sites' && valeur_select_module == 'Tous les modules')
	{
		cpt = id_max;
		for(i = 1; i <= id_max; i++)
		{
			if(i <= nb_result_par_page)
			{
				// On affiche les premiers résultats
				document.getElementById(i).attributes['etat'].nodeValue = 2;
				document.getElementById(i).style.display = 'block';
			}
			else
			{
				// On met les autres résultats à l'état 1
				document.getElementById(i).attributes['etat'].nodeValue = 1;
				document.getElementById(i).style.display = 'none';
			}
		}
	}
	else if(valeur_select_site == 'Tous les sites')
	{
		// On ne controle que les modules
		for(i = 1; i <= id_max; i++)
		{
			var div_resultat_module = document.getElementById(i).attributes['module'].nodeValue;
			if(div_resultat_module == valeur_select_module)
			{
				cpt += 1;
				if(cpt <= nb_result_par_page)
				{
					// On affiche le résultat
					document.getElementById(i).attributes['etat'].nodeValue = 2;
					document.getElementById(i).style.display = 'block';
				}
				else
				{
					// On passe l'état du résultat à 1 et on le cache
					document.getElementById(i).attributes['etat'].nodeValue = 1;
					document.getElementById(i).style.display = 'none';
				}
			}
			else
			{
				// Si le résultat ne correspond pas au module, on ne l'affiche pas
				document.getElementById(i).attributes['etat'].nodeValue = 0;
				document.getElementById(i).style.display = 'none';
			}
		}
	}
	else if(valeur_select_module == 'Tous les modules')
	{
		// On ne controle que les sites
		for(i = 1; i <= id_max; i++)
		{
			var div_resultat_site = document.getElementById(i).attributes['site'].nodeValue;
			if(div_resultat_site == valeur_select_site)
			{
				cpt += 1;
				if(cpt <= nb_result_par_page)
				{
					// On affiche le résultat
					document.getElementById(i).attributes['etat'].nodeValue = 2;
					document.getElementById(i).style.display = 'block';
				}
				else
				{
					// On passe l'état du résultat à 1 et on le cache
					document.getElementById(i).attributes['etat'].nodeValue = 1;
					document.getElementById(i).style.display = 'none';
				}
			}
			else
			{
				// Si le résultat ne correspond pas au site, on ne l'affiche pas
				document.getElementById(i).attributes['etat'].nodeValue = 0;
				document.getElementById(i).style.display = 'none';
			}
		}
	}
	else
	{
		// On controle à la fois les sites et les modules
		for(i = 1; i <= id_max; i++)
		{
			var div_resultat_module = document.getElementById(i).attributes['module'].nodeValue;
			var div_resultat_site = document.getElementById(i).attributes['site'].nodeValue;

			if(div_resultat_site == valeur_select_site && div_resultat_module == valeur_select_module)
			{
				cpt += 1;
				if(cpt <= nb_result_par_page)
				{
					// On affiche le résultat
					document.getElementById(i).attributes['etat'].nodeValue = 2;
					document.getElementById(i).style.display = 'block';
				}
				else
				{
					// On passe l'état du résultat à 1 et on le cache
					document.getElementById(i).attributes['etat'].nodeValue = 1;
					document.getElementById(i).style.display = 'none';
				}
			}
			else
			{
				// Si le résultat ne correspond ni au site ni au module, on ne l'affiche pas
				document.getElementById(i).attributes['etat'].nodeValue = 0;
				document.getElementById(i).style.display = 'none';
			}
		}
	}
	// On sait combien de résultats on a, et on a affiché les premiers
	for(j = 0; j < t_num_select.length; j++)
	{
		document.getElementById('nb_resultats_haut').innerHTML = cpt;
		document.getElementById('nb_resultats_bas').innerHTML = cpt;
	}
	
	/********************************************************************
	
	FIN GESTION DES RESULTATS
	
	********************************************************************/
	
	// Maintenant on peut refaire la pagination proprement dite
	if(cpt > nb_result_par_page)
	{
		var	nb_page = Math.ceil(cpt / nb_result_par_page);
		i = 1;
		while(document.getElementById('page'+i+'_haut'))
		{
			for(j = 0; j < t_num_select.length; j++)
			{
				if(i == 1)
				{
					// La première page est colorée et affichée
					modifie_style_numero_page('page'+i+'_'+t_num_select[j],'gras');
					document.getElementById('page'+i+'_'+t_num_select[j]).attributes['etat'].nodeValue = 2;
				}
				else if(i <= nb_page_max_par_pagination && i <= nb_page)
				{
					// Les premières pages sont affichées (mais pas colorées)
					modifie_style_numero_page('page'+i+'_'+t_num_select[j],'normal');
					document.getElementById('page'+i+'_'+t_num_select[j]).attributes['etat'].nodeValue = 2;
				}
				else if(i <= nb_page)
				{
					// Le nombre de pages correspondantes aux résultats (cpt) sont passées à l'état 1 et cachées
					modifie_style_numero_page('page'+i+'_'+t_num_select[j],'cache');			
					document.getElementById('page'+i+'_'+t_num_select[j]).attributes['etat'].nodeValue = 1;
				}
			}
			i += 1;
		}	
	}
	changer_page_resultats(1,nb_ppage);
}


function affichage_module(module, id_max, nb_page_max_par_pagination,nb_result)
{
	// On met le premier select des modules à la bonne valeur et on appel le fonction comme si c'était le select qui l'appelait
	document.getElementById('select_module').value=module;
	selection_module(id_max, nb_page_max_par_pagination,nb_result);
}

function changer_pagination(sens,nb_page_max_par_pagination,nb_resultats_par_page)
{
	// récupération de l'identifiant de la page actuelle
	num_page_actuelle = parseInt(document.getElementById('page_selectionnee').value);
	num_page_suivante = num_page_actuelle + 1;	
	num_page_precedente = num_page_actuelle - 1;
		
	// ****************************************************
	//
	// si le sens est SUIVANT
	//
	// ****************************************************	
	if(sens == "suivant")
	{
		//on vérifie s'il y a une page après l'actuelle
		if(document.getElementById('page'+num_page_suivante+'_haut')!=null && document.getElementById('page'+num_page_suivante+'_haut').attributes['etat'].nodeValue==2)
		{
			// on affiche les liens précédents
			affiche_elements_naviguation('precedent');
			//on commande l'affichage des résultats de la page demandée
			changer_page_resultats(num_page_suivante,nb_resultats_par_page);
		}

		//s'il y a encore des page après la pge que l'on souhaite afficher, 
		//on réaffiche les liens de pagination suivant		
		if(document.getElementById('page'+(num_page_suivante+1)+'_haut')!=null  && document.getElementById('page'+(num_page_suivante+1)+'_haut').attributes['etat'].nodeValue==2)
			affiche_elements_naviguation('suivant');		
		else
			cache_elements_naviguation('suivant');		
	}
	// ****************************************************
	//
	// si le sens est FIN
	//
	// ****************************************************		
	else if(sens == "fin")
	{
		// on recherche la dernière page 
		t_pages = document.getElementById('liste_page_haut').childNodes;
		num_derniere_page_affichee = num_page_actuelle;
		
		//on fait une boucle sur le span contenant les différents numérose de page
		for(i=0;i<t_pages.length;i++)
		{
			t_contenu_span_page = t_pages[i].childNodes;
			//regex qui va servir pour récupérer le numéro de la page
			var reg = new RegExp("[0-9]","g");
			//chacun des numéros est contenu dans un autre span
			//on refait donc une boucle sur celui-ci, bien qu'il n'ai qu'un seul noeud fils
			for(j=0;j<t_contenu_span_page.length;j++)
			{		
				//si la page est affichée
				if(t_contenu_span_page[j].attributes['etat'].nodeValue==2)
				{
					//on récupère son numéro que le dernier
					num_derniere_page_affichee = reg.exec(t_contenu_span_page[j].attributes['id'].nodeValue);
				}
			}
		}
		//s'il elle est > à la page actuelle
		if(num_derniere_page_affichee > num_page_actuelle)
		{
			//on commande l'affichage des résultats de la page demandée
			changer_page_resultats(num_derniere_page_affichee,nb_resultats_par_page);
			//on affiche les liens précédents
			affiche_elements_naviguation('precedent');		
		}
		//on cache les éléments de naviguation suivant
		cache_elements_naviguation('suivant');		
	}
	// ****************************************************
	//
	// si le sens est PRECEDENT
	//
	// ****************************************************	
	else if(sens=="precedent")
	{	
		//on vérifie s'il y a une page avant l'actuelle
		if(document.getElementById('page'+num_page_precedente+'_haut')!=null && document.getElementById('page'+num_page_precedente+'_haut').attributes['etat'].nodeValue==2)
		{
			//on affiche les éléments de naviguation suivant et fin
			affiche_elements_naviguation('suivant');
			//on commande l'affichage des résultats de la page demandée
			changer_page_resultats(num_page_precedente,nb_resultats_par_page);
		}

		//s'il y a encore des page après la pge que l'on souhaite afficher, 
		//on réaffiche les liens de pagination suivant		
		if(document.getElementById('page'+(num_page_precedente-1)+'_haut')!=null  && document.getElementById('page'+(num_page_precedente-1)+'_haut').attributes['etat'].nodeValue==2)
			affiche_elements_naviguation('precedent');		
		else
			cache_elements_naviguation('precedent');		
	}
	// ****************************************************
	//
	// si le sens est DEBUT
	//
	// ****************************************************	
	else if(sens=="debut")
	{
		num_premiere_page = 1;
		
		//s'il elle est < à la page actuelle
		if(num_premiere_page < num_page_actuelle)
		{
			//on commande l'affichage des résultats de la page demandée
			changer_page_resultats(num_premiere_page,nb_resultats_par_page);
			//on affiche les liens suivants
			affiche_elements_naviguation('suivant');		
		}
		//on cache les éléments de naviguation precedent
		cache_elements_naviguation('precedent');		
	}
}


function changer_page_resultats(num_page,nb_result_par_page)
{
	var id_from = (num_page - 1) * nb_result_par_page + 1;
	
	// On s'occupe de coloriser le lien vers la page en cours
	var i = 1;
	var nb_pages = 0;
	var num_page = Math.ceil(id_from / nb_result_par_page);

	while(document.getElementById('page'+i+'_haut'))
	{
		for(var j = 0; j < t_num_select.length; j++)
		{
			/*
			* Les if, else et else if suivants (dans le for), paraissent contenir des commandes inutiles
			*	Mais lorsque l'on cherche à modifier le style seul, le display est modifié inoportunément et automatiquement
			*	par javascript... donc pour éviter ce problème on a rajouté ces commandes 'inutiles' pour être sûr d'avoir
			*	l'affichage que l'on souhaite
			*/
			if(i == num_page)
			{
				modifie_style_numero_page('page'+i+'_'+t_num_select[j],'gras');
				document.getElementById('page'+i+'_'+t_num_select[j]).attributes['etat'].nodeValue = 2;
				document.getElementById('page_selectionnee').value = num_page;
			}
			else
			{
				if(document.getElementById('page'+i+'_'+t_num_select[j]).attributes['etat'].nodeValue == 2)
				{
					modifie_style_numero_page('page'+i+'_'+t_num_select[j],'normal');
					document.getElementById('page'+i+'_'+t_num_select[j]).attributes['etat'].nodeValue = 2;
				}
				else if(document.getElementById('page'+i+'_'+t_num_select[j]).attributes['etat'].nodeValue == 1)
				{
					modifie_style_numero_page('page'+i+'_'+t_num_select[j],'cache');
					document.getElementById('page'+i+'_'+t_num_select[j]).attributes['etat'].nodeValue = 1;
				}
			}
		}
		
		if(document.getElementById('page'+i+'_haut').attributes['etat'].nodeValue == 2)
		{
			nb_pages += 1;
		}
		
		i += 1;
	}

	//on s'occupe maintenant des flèche précédentes et suivantes
	
	/* si on se trouve sur la première page,
		- on n'affiche pas les flèches permettant d'aller aux pages précédentes
		- on affiche les pages permettant d'aller au liens suivant si il y a plusieurs page pour la recherche
	*/
	
	/* si on se trouve sur une page supérieure à la première page : 
		- on affiche les flèches permettant d'aller à la page précédente
		- on affiche les flèches permettant d'aller au pages suivantes si il y  d'aures pages après
	*/
	
	//on affiche les flèches précédentes
	if(num_page > 1)
		affiche_elements_naviguation('precedent');
	else
		cache_elements_naviguation('precedent');
		
		
	//on affiche les flèches suivantes
	if(num_page < nb_pages)
		affiche_elements_naviguation('suivant');
	else
		cache_elements_naviguation('suivant');
	
	var cpt = 0;
	i = 1;
	while(document.getElementById(i))
	{
		// On fait défiler toutes les résultats
		if(document.getElementById(i).attributes['etat'].nodeValue == 1)
		{
			cpt += 1;
		}
		else if(document.getElementById(i).attributes['etat'].nodeValue == 2)
		{
			// On cache les résultats affichés
			document.getElementById(i).attributes['etat'].nodeValue = 1;
			document.getElementById(i).style.display = 'none';
			cpt += 1;
		}
		if(cpt >= id_from && cpt < (id_from + nb_result_par_page) && document.getElementById(i).attributes['etat'].nodeValue == 1)
		{
			// On affiche les résultats qu'il faut
			document.getElementById(i).attributes['etat'].nodeValue = 2;
			document.getElementById(i).style.display = 'block';
		}
		i += 1;
	}
}

// ne sert pas et n'as pas été testée
/*function change_nb_result_max_par_page(nb_page_max_par_pagination)
{
	var select_nb_result_max_par_page = document.getElementById('select_nb_resultats_max_par_page');
	var nb_result_par_page = parseInt(select_nb_result_max_par_page.options[select_nb_result_max_par_page.selectedIndex].value);
	
	// Il faut changer la pagination
	// Affichage des premiers résultats, on en profite pour compter le nombre de résultats qui satisfont le 'tri' des select
	var i = 1;
	var cpt = 0;
	while(document.getElementById(i))
	{
		if(document.getElementById(i).attributes['etat'].nodeValue == 2)
		{
			cpt += 1;
			document.getElementById(i).attributes['etat'].nodeValue = 1;
			document.getElementById(i).style.display = 'none';
		}
		else if(document.getElementById(i).attributes['etat'].nodeValue == 1)
		{
			cpt += 1;
		}
		if(cpt <= nb_result_par_page && document.getElementById(i).attributes['etat'].nodeValue == 1)
		{
			document.getElementById(i).attributes['etat'].nodeValue = 2;
			document.getElementById(i).style.display = 'block';
		}
		i += 1;
	}
	
	// On va maintenant pouvoir refaire la pagination
	
	// On commence par tout cacher (les pages et les résultats)
	for(var j = 0; j < t_num_select.length; j++)
	{
		// On cache tous les boutons d'affichage des pages de résultats
		cache_elements_naviguation('precedent');
		cache_elements_naviguation('suivant');
		
		i = 1;
		while(document.getElementById('page'+i+'_'+t_num_select[j]))
		{
			document.getElementById('page'+i+'_'+t_num_select[j]).attributes['etat'].nodeValue = 0;
			document.getElementById('page'+i+'_'+t_num_select[j]).style.fontweight = 'arial';
			document.getElementById('page'+i+'_'+t_num_select[j]).style.display = 'none';
			i += 1;
		}
	}
	
	// On affiche les liens qu'il faut
	if(cpt > nb_result_par_page)
	{
		var	nb_page = Math.ceil(cpt / nb_result_par_page);
		i = 1;
		while(document.getElementById('page'+i+'_haut'))
		{
			for(j = 0; j < t_num_select.length; j++)
			{
				if(i == 1)
				{
					// La première page est colorée et affichée
					modifie_style_numero_page('page'+i+'_'+t_num_select[j],'gras');
					document.getElementById('page'+i+'_'+t_num_select[j]).attributes['etat'].nodeValue = 2;
				}
				else if(i <= nb_page_max_par_pagination && i <= nb_page)
				{
					// Les premières pages sont affichées (mais pas colorées)
					modifie_style_numero_page('page'+i+'_'+t_num_select[j],'normal');
					document.getElementById('page'+i+'_'+t_num_select[j]).attributes['etat'].nodeValue = 2;
				}
				else if(i <= nb_page)
				{
					// Le nombre de pages correspondantes aux résultats (cpt) sont passées à l'état 1 et cachées
					modifie_style_numero_page('page'+i+'_'+t_num_select[j],'normal');
					document.getElementById('page'+i+'_'+t_num_select[j]).attributes['etat'].nodeValue = 1;
					document.getElementById('page'+i+'_'+t_num_select[j]).style.display = 'none';
				}
			}
			i += 1;
		}
		for(j = 0; j < t_num_select.length; j++)
		{
			if(nb_page > nb_page_max_par_pagination)
			{
				document.getElementById('suivant_'+t_num_select[j]).attributes['etat'].nodeValue = 2;
				document.getElementById('suivant_'+t_num_select[j]).style.display = 'block';
			}
			if(nb_page > (2*nb_page_max_par_pagination))
			{
				document.getElementById('fin_'+t_num_select[j]).attributes['etat'].nodeValue = 2;
				document.getElementById('fin_'+t_num_select[j]).style.display = 'block';
			}
		}
	}
}*/