/***************************************************************************\
* Nom du fichier :	fonctions_javascript.js									*
* description : Contient le code Javascript nécessaire au fonctionnement	*
*				du moteur de recherche										*
*																			*
* Date de création :        05/08/2004										*
* Date de modification :    19/05/2005                                  	*
****************************************************************************/

// Tableaux globaux

// Pointeurs vers les fenetres
id_fenetres = new Array() ;

// Messages d'erreur
debug = new Array() ;

// Enregistre les messages d'erreur ou de debug
function message_debug(message)
	{
	debug.push(message) ;
	}
	
// ----------------------------------
// Ouverture des fenetres, mode "GET"
// ----------------------------------
function ouvre_fenetre_get(url)
	{
	window.open(url,'',"width=600,height=400,menubar=yes,toolbar=yes,status=yes,scrollbars=yes,resizable=yes,location=yes") ;
	}

// -----------------------------------------
// Ouverture des fenetres, mode "Javascript"
// -----------------------------------------

// Ouvre une nouvelle fenêtre et note les paramètres nécessaires pour sa modification
// Fonction apellée lorsque le mode est setté à "Javascript" pour le moteur donné
// Synopsys : ouvre_fenetre(nom,adresse,frame,formulaire,terme,champ_terme,type_ls,type_lc,champ_ls,champ_lc,choix_ls,choix_lc)
function ouvre_fenetre(id,fenetre,frame,formulaire,terme,champ_terme,type_ls,type_lc,champ_ls,champ_lc,choix_ls,choix_lc,derniere_fenetre)
	{
	message_debug("ouvre_fenetre() : Appel, fenetre "+id); 
	
	// Conversion des caractères "&#xxx;" et autres "&eacute;"
	var position = 0 ;
	var caractere = 0 ;
	var chainefinale = "" ;
	var position_ptvirgule = 0 ;
	var longueur = 0 ;
	var numero = 0 ;
	
	for(position = 0;position < terme.length;position++)
		{ // &#259;
		// Si l'on a un "&" c'est un caractère unicode
		if(terme.charAt(position) == "&")
			{// Unicode
			position_ptvirgule = terme.indexOf(";",position) ;
			longueur = position_ptvirgule - (position + 2) ;
			numero = terme.substr(position+2,longueur) ;
			chainefinale += String.fromCharCode(parseInt(numero,10)) ;
			
			position = position_ptvirgule ;
			}
		else
			{// Caractère normal
			chainefinale += terme.charAt(position) ;
			}
		}
	
	// Ouverture de la fenêtre
	w=window.open(fenetre,id,"width=600,height=400,menubar=yes,toolbar=yes,status=yes,scrollbars=yes,resizable=yes,location=yes") ;
	
	// On note une référence sur la fenêtre pour pouvoir y accéder par la suite
	id_fenetres[id] = w ;
	
	// On attache les événements !!! Ils doivent être en ordre inverse !!!
	
	// Si c'est la dernière fenêtre on ferme la fenêtre de recherche
	if(derniere_fenetre == true)
		{
		//w.attachEvent("onunload",function() { parent.close() }) ;
		message_debug(id+" est la derniere fenetre, ajout de onunload->parent.close()") ;
		}
	
	// Soumission formulaire
    w.attachEvent("onload",function() { soumet_formulaire(id_fenetres[id],formulaire,frame) }) ;
    //w.onload = function() { soumet_formulaire(id_fenetres[id], formulaire, frame); };
    message_debug("ouvre_fenetre() : attachEvent onload->soumet_formulaire, fenetre "+id);
	// Changement langue source
	w.attachEvent("onload",function() { modifie_langue_cible(id_fenetres[id],formulaire,type_ls,champ_ls,choix_ls,frame) }) ;
	//w.onload = function() { modifie_langue_cible(id_fenetres[id], formulaire, type_ls, champ_ls, choix_ls, frame); };
	message_debug("ouvre_fenetre() : attachEvent onload->modifie_langue_cible, fenetre "+id); 
	// Changement langue cible
	w.attachEvent("onload",function() { modifie_langue_source(id_fenetres[id],formulaire,type_lc,champ_lc,choix_lc,frame) }) ;
	//w.onload = function() { modifie_langue_source(id_fenetres[id], formulaire, type_lc, champ_lc, choix_lc, frame); };
	message_debug("ouvre_fenetre() : attachEvent onload->modifie_langue_source, fenetre "+id); 
	// Changement terme
	w.attachEvent("onload",function() { modifie_terme(id_fenetres[id],formulaire,champ_terme,chainefinale,frame) }) ;
	//w.onload = function() { modifie_terme(id_fenetres[id], formulaire, champ_terme, chainefinale, frame); };
	message_debug("ouvre_fenetre() : attachEvent onload->modifie_terme, fenetre "+id);
	
	// On retourne le nom de la fenetre ;
	return w ;
	}



// Renvoie un objet Window qui pointe sur le frame
// Dont le nom est transmis en argument
// dans la fenetre dont le nom est également transmis comme argument
// Renvoie False si rien n'a été trouvé
// Possible de faire du récursif si bcp de frames imbriqués
// Pour le moment on ne fait que les deux premiers niveaux
function trouve_frame(fenetre,nom_frame)
	{
	message_debug("trouve_frame() : appel, fenetre "+fenetre.name);
	//alert("appel trouve_frames, nom fenetre :"+fenetre.name) ;
	var i;
	var j;
	
	for(i=0;i<fenetre.frames.length;i++)
		{
		for(j=0;j<fenetre.frames.item(i).frames.length;j++)
			{
			if(fenetre.frames.item(i).frames.item(j).name == nom_frame)
				{
				return fenetre.frames.item(i).frames.item(j) ;
				}
			}
		
		if(fenetre.frames.item(i).name == nom_frame)
			{
			return fenetre.frames.item(i) ;
			}
		}
	// Si on a rien trouvé on retourne False
	return false ;
	}

// Modifie un terme dans une page
// Si frame vaut False, on est dans le cas d'une page simple
function modifie_terme(id,formulaire,terme,valeur,nom_frame)
	{
	message_debug("modifie_terme() : appel");
	// Initialisations
	var fenetre ;

	//alert("nom_frame = "+nom_frame) ;

	// On essaye d'assigner la valeur
	if(nom_frame != "False")
		{
		message_debug("modifie_terme() : la page est un frame, fenetre "+id.name);
		// Cas d'un frame
		
		// Ancienne méthode
		// on emploie id.document.getElementById(frame).document.getElementById(terme).value
		// id.frames[nom_frame].document.getElementById(terme).value = valeur ;
		
		// Nouvelle méthode
		// On apelle trouve_frame()
		fenetre = trouve_frame(id,nom_frame) ;
		fenetre.document.getElementById(terme).value = valeur ;
		}
	else
		{
		message_debug("modifie_terme() : la page n'est pas un frame, fenetre "+id.name);
		// Autres cas
		// On emploie id.document.getElementById(terme).value
		id.document.getElementById(terme).value = valeur ;
		}
	
	}

// Modifie la ou les langue source de la page
function modifie_langue_source(nom,formulaire,Langue_source_type,Langue_source_nom,langue_choisie,nom_frame)
	{
	message_debug("modifie_langue_source() : appel, fenetre "+nom.name);
	var i ;
	// Plusieurs cas selon le type de sélecteur pour la langue source
	switch(Langue_source_type)
		{
		// Cas d'un select
		case "Select":
			message_debug("modifie_langue_source/cible() : La langue source/cible est un Select, fenetre "+nom.name);
			if(nom_frame != "False")
				{
				message_debug("modifie_langue_source/cible() : La langue source/cible est dans un Frame, fenetre "+nom.name);
				fenetre = trouve_frame(nom,nom_frame) ;
				fenetre.document.getElementById(Langue_source_nom).selectedIndex = langue_choisie ;
				}
			else
				{
				message_debug("modifie_langue_source/cible() : La langue source/cible n'est pas dans un Frame, fenetre "+nom.name);
				// Autres cas
				nom.document.getElementById(Langue_source_nom).selectedIndex = langue_choisie ;
				}
		break ;
		
		// Cas d'un radio button
		case "Radio":
			message_debug( "modifie_langue_source/cible() : La langue source/cible est un Radio, fenetre "+nom.name);
			if(nom_frame != "False")
				{
				message_debug("modifie_langue_source/cible() : La langue source/cible est dans un Frame, fenetre "+nom.name);
				fenetre = trouve_frame(nom,nom_frame) ;
				fenetre.document.getElementById(Langue_source_nom).selectedIndex = langue_choisie ;
				}
			else
				{
				message_debug("modifie_langue_source/cible() : La langue source/cible n'est pas dans un Frame, fenetre "+nom.name);
				// Autres cas
				nom.document.forms[formulaire].elements[langue_choisie].checked = true ;
				}
		break ;
		
		// Cas d'un checkbox
		case "Checkbox":
			message_debug("modifie_langue_source/cible() : La langue source/cible est un Checkbox, fenetre "+nom.name);
			// Tout d'abord on ne prend qu'une référence sur la fenetre
			if(nom_frame != "False")
				{
				message_debug("modifie_langue_source/cible() : La langue source/cible est dans un Frame, fenetre "+nom.name);
				fenetre = trouve_frame(nom,nom_frame) ;
				}
			else
				{
				message_debug("modifie_langue_source/cible() : La langue source/cible n'est pas dans un Frame, fenetre "+nom.name);
				// Autres cas
				fenetre = nom ;
				}
				
			// On construit le tableau des langues à cocher
			langues = langue_choisie.split(":") ;
			
			// Ensuite on boucle pour cocher ce qui nous intéresse
			for(i=0;i<langues.length;i++)
				{
				if(langues[i] != "")
					fenetre.document.forms[formulaire].elements[langues[i]].checked = true ;
				}
		break ;
		
		// Pas de sélection possible
		case "none":
				message_debug("modifie_langue_source/cible() : La langue source/cible n'est pas disponible, fenetre "+nom.name);
		break ;
		
		// Problème si on arrive ici
		default:
		break ;
		}
	}

// Modifie la ou les langues cibles de la page
// C'est la meme fonction que modifie_langue_source
function modifie_langue_cible(nom,formulaire,Langue_cible_type,Langue_cible_nom,langue_choisie,nom_frame,nom_tableau_langues)
	{
	message_debug("modifie_langue_cible() : appel, fenetre "+nom.name);
	modifie_langue_source(nom,formulaire,Langue_cible_type,Langue_cible_nom,langue_choisie,nom_frame,nom_tableau_langues) ;
	}

// simule un click sur le bouton soumettre
function soumet_formulaire(id,formulaire,nom_frame)
	{
	message_debug("soumet_formulaire() : appel, fenetre "+id.name);
	var fenetre ;
	if(nom_frame == "False")
		{
		message_debug("soumet_formulaire() : Le formulaire n'est pas dans un frame, fenetre "+id.name);
		// Sans frames
		id.document.forms[formulaire].submit() ;
		}
	else
		{
		message_debug("soumet_formulaire() : Le formulaire est dans un frame, fenetre "+id.name);
		fenetre = trouve_frame(id,nom_frame) ;
		fenetre.document.forms[formulaire].submit() ;
		}
	}
	
// -------------------------------------------------------------
// Fonctions relatives à la sélection des moteurs et des langues
// -------------------------------------------------------------

// Fonction apellée à partir de liste_moteurs
// Retourne True si les deux tableaux ont au moins un élément en commun
// Retourne False dans le cas contraire
function valeur_commune(tableau1,tableau2)
	{
	var resultat = false ;
	var i = 0 ;
	// On boucle sur le premier tableau
	for(i=0; i<tableau1.length; i++)
		{
		// On boucle sur le deuxième tableau
		for(j=0; j<tableau2.length; j++)
			{
			if(tableau1[i] == tableau2[j])
				{
				resultat = true ;
				}
			}
		}
	return resultat ;
	}

// Apellé lors du choix d'une langue source
// Valeur est la valeur du radio button sélectionné
function selection_langue_source(valeur)
	{
	var i ;
	var j ;
	var k ;
	
	var langues_cibles_correspondantes = new Array() ;
	var moteurs_correspondants = new Array() ;
	// On détermine la liste des moteurs et des langues cibles correspondant
	
	// On parcourt la liste des moteurs
	for(i=0;i<liste_moteurs.length;i++)
		{
		// Est ce que la langue source choisie est une langue source de ce moteur ?
		if(existe_dans_tableau(valeur,liste_moteurs[i]['langues_source']))
			{
			// On note le  numéro du moteur
			moteurs_correspondants[i] = true ;
			
			// On note toutes les langues correspondantes
			for(j=0;j<liste_moteurs[i]['langues_cible'].length;j++)
				{
				//langues_cibles_correspondantes[liste_moteurs['langues_cible'][j]] = true ;
				langues_cibles_correspondantes[langues_cibles_correspondantes.length] = liste_moteurs[i]['langues_cible'][j] ;
				}
			}
		else
			{
			// On note le  numéro du moteur
			moteurs_correspondants[i] = false ;
			}
		}
	
	
	
	// On a donc établi deux tableaux :
	// moteurs_correspondants[i] qui pour chaque valeur indique si le moteur est valable (true) ou non (false)
	// langues_cibles_correspondantes[i] qui contient la liste des langues valides mais pas les langues invalides
	
	
	// On parcourt la liste des langues cibles
	for(i = 0; i < document.formulaire.elements.length; i++)
		{
		objet = document.formulaire.elements[i] ;
		
		// Est ce que l'on est positionné sur une langue cible ?
		if(objet.name.substr(3) == "_cible")
			{
			// Est ce que cette langue cible est valide ?
			if(existe_dans_tableau(objet.value,langues_cibles_correspondantes))
				{
				// On checke et on dégrise
				//objet.checked = true ;
				objet.disabled = false ;
				}
			else
				{
				// On déchecke et on désactive
				//objet.checked = false ;
				objet.disabled = true ;
				}
			}
		}
		
	// On parcourt la liste des moteurs
	k = 0 ;
	for(i = 0; i < document.formulaire.elements.length; i++)
		{
		objet = document.formulaire.elements[i] ;
		
		// Est ce que l'on est positionné sur un moteur ?
		if(objet.name == "liste_moteurs[]")
			{
			// Est-ce que ce moteur est valide ?
			if(moteurs_correspondants[k] == true)
				{
				// On checke et on dégrise
				// FIXME : pour le moment on ne coche pas tous les moteurs
				// objet.checked = true ;
				//objet.checked = false ;
				objet.disabled = false ;
				}
			else
				{
				// On déchecke et on désactive
				//objet.checked = false ;
				objet.disabled = true ;
				}
			k++ ;
			}
		}
	}


// Apellé lorsque une langue cible est modifiée (chéckée ou decheckée)
function selection_langues_cibles(objet)
	{
	var i ;
	var k ;
	var langue_source_selectionnee ;
	
	// Determination de la langue source sélectionnée
	for(i = 0; i < document.formulaire.elements.length; i++)
		{
		objet_temporaire = document.formulaire.elements[i] ;
		if((objet_temporaire.name == "langue_source") && objet_temporaire.checked == true)
			langue_source_selectionnee = objet_temporaire.value ;
		}
	
	var langues_selectionnees = new Array() ;
	
	// Une langue cible vient d'être déselectionnée
	// On détermine les moteurs qui ne peuvent plus correspondre
	// et on les grise
	
	// Pour cela on parcourt la liste des langues cible encore checkées
	// et on les recense toutes
	k = 0 ;
	for(i = 0; i < document.formulaire.elements.length; i++)
		{
		objet_temporaire = document.formulaire.elements[i] ;
		// Est ce que l'on est sur une langue cible ?
		if((objet_temporaire.name.substr(3) == "_cible") && (objet_temporaire.checked == true))
			{
			langues_selectionnees[k] = objet_temporaire.value ;
			//alert("ajout langue "+objet_temporaire.value) ;
			k++ ;
			}
		}
	// On a la liste des langues cible sélectionnées
	
	// On détermine alors les moteurs encore valides
	// Boucle sur les moteurs
	k = 0 ;
	for(i = 0; i < document.formulaire.elements.length; i++)
		{
		objet_temporaire = document.formulaire.elements[i] ;
		// Est ce que l'on est sur un moteur ?
		if(objet_temporaire.name == "liste_moteurs[]")
			{
			// Deux cas de figure
			// 1 - On a décoché une langue, on décoche et on grise les moteurs qui ne correspondent plus
			if(objet.checked == false)
				{
				// On vérifie qu'il prend en charge au moins une des langues cibles
				if(valeur_commune(langues_selectionnees,liste_moteurs[k]['langues_cible']) == false)
					{
					// Si c'est pas le cas on le désactive
					objet_temporaire.disabled = true ;
					//objet_temporaire.checked = false ;
					}
				}
			// 2 - On a coché une langue, on dégrise mais on ne le coche pas pour autant
			// Uniquement si la langue source correspond également...
			else
				{
				//alert("LC:"+valeur_commune(langues_selectionnees,liste_moteurs[k]['langues_cible'])) ;
				//alert("LS:"+existe_dans_tableau(langue_source_selectionnee,liste_moteurs[k]['langues_source'])) ;
				// On vérifie qu'il prend en charge au moins une des langues cible et la langue source
				if((valeur_commune(langues_selectionnees,liste_moteurs[k]['langues_cible']) == true) && (existe_dans_tableau(langue_source_selectionnee,liste_moteurs[k]['langues_source'])))
					{
					// Si c'est le cas on le rend cochable
					objet_temporaire.disabled = false ;
					}
				}
			k++ ;
			}
		}
	}
	

// Apellé lorsqu'un moteur est modifié (checké ou déchecké)
function selection_moteurs(objet)
	{
	var i ;
	var j ;
	
	var liste_langues_cibles = new Array() ;
	
	// On établit la liste des langues qui peuvent encore servir
	// Pour cela on boucle sur les moteurs
	k = 0 ;
	for(i = 0; i < document.formulaire.elements.length; i++)
		{
		objet_temporaire = document.formulaire.elements[i] ;
		// Est ce que l'on est sur un moteur ?
		if((objet_temporaire.name == "liste_moteurs[]"))
			{
			if(objet_temporaire.checked == true)
				{
				// On récolte ses langues cibles et on les ajoute à une liste temporaire
				for(j=0;j<liste_moteurs[k]['langues_cible'].length;j++)
					{
					liste_langues_cibles[liste_langues_cibles.length] = liste_moteurs[k]['langues_cible'][j] ;
					}
				}
			k++ ;
			}
		}
	
	// A présent on a les langues cibles utilisables
	
	// Boucle sur les langues cibles
	for(i = 0; i < document.formulaire.elements.length; i++)
		{
		objet_temporaire = document.formulaire.elements[i] ;
		// Est ce que l'on est sur une langue cible ?
		if((objet_temporaire.name.substr(3) == "_cible"))
			{
			// Deux cas de figure
			if(objet.checked == false)
				{
				// On a déselectionné un moteur
				// On détermine les langues source qui ne peuvent plus correspondre
				// On les déselectionne et on les grise
								
				if(existe_dans_tableau(objet_temporaire.value,liste_langues_cibles) == false)
					{
					objet_temporaire.disabled = true ;
					objet_temporaire.checked = false ;
					}
				}
			else
				{
				// On a sélectionné un moteur
				// On dégrise les langues qui sont en accord avec ce moteur
				// mais on ne les sélectionne pas pour autant
				
				if(existe_dans_tableau(objet_temporaire.value,liste_langues_cibles) == true)
					{
					objet_temporaire.disabled = false ;
					}
				}
			}
		}
	}

// Vérifie qu'au moins un moteur, une langue source et une langue cible ont été choisis
function verifie_formulaire(message1,message2)
	{
	if(document.formulaire.terme.value == "")
		{
		alert(message1) ;
		
		return ;
		}
	
	var moteur = false ;
	var ls = false ;
	var lc = false ;
	
	for(i = 0; i < document.formulaire.elements.length; i++)
		{
		objet_temporaire = document.formulaire.elements[i] ;
		if((objet_temporaire.name == "langue_source") && (objet_temporaire.checked == true))
			ls = true ;

		if((objet_temporaire.name.substr(3) == "_cible") && (objet_temporaire.checked == true) && (objet_temporaire.disabled == false))
			lc = true ;
		
		if((objet_temporaire.name == "liste_moteurs[]") && (objet_temporaire.checked == true) && (objet_temporaire.disabled == false))
			moteur = true ;
		}
	
	if(moteur && ls && lc)
		{
		document.formulaire.submit() ;
		}
	else
		alert(message2) ;
	}

// -------------------------------------------------------------------
// Fonctions relatives à la sauvegarde des paramètres de l'utilisateur
// -------------------------------------------------------------------
// Regarde si la valeur existe dans le tableau
// Renvoie true si la chaine a été trouvée
// Renvoie false autrement
function existe_dans_tableau(chaine,tableau)
	{
	var resultat = false ;
	
	for(l = 0 ; l < tableau.length ; l++)
		{
		if(tableau[l] == chaine)
			resultat = true ;
		}
	return resultat ;
	}

// Fonction qui est apellée à chaque fois que l'ut clique sur le checkbox de sauvegarde
function parametres_interface(objet)
	{
	if(objet.checked)
		{
		//alert("sauvegarde des parametres") ;
		enregistre_parametres() ;
		}
	else
		{
		//alert("supression des parametres") ;
		supprime_parametres() ;
		}
	}

// Enregistre les paramètres de l'utilisateur à l'aide de cookies
// Apellé lorsque l'utilisateur coche la case correspondante dans l'interface de recherche
function enregistre_parametres()
	{
	// Problème : on ne peut enregistrer que 20 valeurs dans un cookie
	// On procède donc de la manière suivante :
	// On enregistre 3 valeurs, au format suivant :
	// Langues_source --> "XXX:YYY..." On ne note que la langues source sélectionnée
	// Langues_cible --> "XXX:YYY..." ... On ne note que les langues cible sélectionnées
	// Moteurs --> "A:B..." On ne note que les moteurs sélectionnés
	var Langues_source = "" ;
	var Langues_cible = "" ;
	var Moteurs = "" ;
	
	// On boucle sur les éléments du formulaire
	for(i = 0; i < document.formulaire.elements.length; i++)
		{
		objet = document.formulaire.elements[i] ;
		// Est ce que l'on est sur la langue source checkée ?
		if((objet.name == "langue_source") && (objet.checked == true))
			{
			Langue_source = objet.value ;
			}
		
		// Est ce que l'on est sur une langue cible checkée ?
		if((objet.name.substr(3) == "_cible") && (objet.checked == true))
			{
			langue = objet.name.substr(0,3) ;
			Langues_cible = Langues_cible + ":" + langue ;
			}
		
		// Est ce que l'on est sur moteur checké ?
		if((objet.name == "liste_moteurs[]") && (objet.checked == true))
			{
			moteur = objet.value ;
			
			Moteurs = Moteurs + ":" + moteur ;
			}
		}
	// On enregistre les valeurs dans le cookie
	
	// Le cookie dure un an
	var expDays = 90; 
	var exp = new Date(); 
	exp.setTime(exp.getTime() + (expDays*24*60*60*1000)); 
	
	SetCookie("Langue_source",Langue_source,exp) ;
	SetCookie("Langues_cible",Langues_cible,exp) ;
	SetCookie("Moteurs",Moteurs,exp) ;
	}

// A des fins de test
function supprime_parametres()
	{
	// Le cookie dure un an
	var expDays = 90; 
	var exp = new Date(); 
	exp.setTime(exp.getTime() + (expDays*24*60*60*1000)); 
	
	SetCookie("Langue_source","",exp) ;
	SetCookie("Langues_cible","",exp) ;
	SetCookie("Moteurs","",exp) ;
	}


// Restaure les paramètres de recherche de l'utilisateur
// Dans le cas où l'utilisateur ne dispose pas de paramètres personnalisés,
// on en met par défaut
function restaure_parametres(langue_courante,langues_cibles_defaut,moteurs_defaut)
	{
	//  On lit les variables si elles existent
	Langue_source = GetCookie("Langue_source") ;
	Langues_cible = GetCookie("Langues_cible") ;
	Moteurs = GetCookie("Moteurs") ;
	
	// On checke la case s'il existe des paramètres sauvés
	if((Langue_source != "") || (Langues_cible != "") || (Moteurs != ""))
		{
		document.formulaire.parametres.checked = true ;
		}
	
	// Si rien n'est enregistré, on colle des paramètres par défaut
	if((Langue_source == "") || (Langues_cible == "") || (Moteurs == ""))
		{
		// La langue source est déterminée par la langue d'affichage du site web
		switch(langue_courante)
			{
			case "es":
				Langue_source = "SPA" ;
			break;
			
			case "fr":
				Langue_source = "FRA" ;
			break;
			
			case "it":
				Langue_source = "ITA" ;
			break;
			
			case "pt":
				Langue_source = "POR" ;
			break;
			
			case "ro":
				Langue_source = "RON" ;
			default:
			break;
			}
		
		// Les langues cibles et les moteurs dépendent de la configuration
		// Langues_cible = ":CAT:SPA:FRA:ITA:POR:RON" ;
		Langues_cible = langues_cibles_defaut ;
		// Moteurs= ":Eurodicautom:Logos:TIS:Termcat:UNTerm" ;
		Moteurs= moteurs_defaut ;
		}
	
	
	// Construction des tableaux
	if(Langues_cible != "")
		Tableau_Langues_cible = Langues_cible.split(":") ;
	if(Moteurs != "")
		Tableau_Moteurs = Moteurs.split(":") ;
	
	// On grise les cases inutilisables selon les paramètres choisis
	// simplement en apellant selection_langue_source(Langue_source)
	selection_langue_source(Langue_source) ;
	
	
	// Boucle sur les langues source
	// Seulementsi on a les données correspondantes dans le cookie
	if(Langue_source != "")
		{
		for(i = 0; i < document.formulaire.elements.length; i++)
			{
			objet = document.formulaire.elements[i] ;
			// Est ce que l'on est sur une langue source ?
			if(objet.name == "langue_source")
				{
				langue = objet.value ;
				// Est ce qu'il faut checker la langue source ?
				if(langue == Langue_source)
					{
					objet.checked = true ;
					}
				else
					{
					objet.checked = false ;
					}
				}
			}
		}

	// Boucle sur les langues cible
	// Seulementsi on a les données correspondantes dans le cookie
	if(Langues_cible != "")
		{
		// Boucle sur les langues cible
		for(i = 0; i < document.formulaire.elements.length; i++)
			{
			objet = document.formulaire.elements[i] ;
			// Est ce que l'on est sur une langue cible ?
			if(objet.name.substr(3) == "_cible")
				{
				langue = objet.name.substr(0,3) ;
				// Est ce qu'il faut checker la langue cible ?
				if(existe_dans_tableau(langue,Tableau_Langues_cible))
					{
					objet.checked = true ;
					}
				else
					{
					objet.checked = false ;
					}
				}
			}
		}
		
	// Boucle sur les moteurs
	// Seulementsi on a les données correspondantes dans le cookie
	if(Moteurs != "")
		{
		for(i = 0; i < document.formulaire.elements.length; i++)
			{
			objet = document.formulaire.elements[i] ;
			// Est ce que l'on est sur une langue cible ?
			if(objet.name == "liste_moteurs[]")
				{
				moteur = objet.value ;
				// Est ce qu'il faut checker la langue cible ?
				if(existe_dans_tableau(moteur,Tableau_Moteurs))
					{
					objet.checked = true ;
					}
				else
					{
					objet.checked = false ;
					}
				}
			}
		}
	}

// Fonctions de manipulation des cookies
function getCookieVal(offset) 
	{ 
	var endstr = document.cookie.indexOf (";", offset); 
	if (endstr == -1) 
		endstr = document.cookie.length; 
	return unescape(document.cookie.substring(offset, endstr)); 
	} 
	
// Fonctions de manipulation des cookies
function GetCookie(name) 
	{ 
	var arg = name + "="; 
	var alen = arg.length; 
	var clen = document.cookie.length; 
	var i = 0; 
	while (i < clen) 
		{ 
		var j = i + alen; 
		if (document.cookie.substring(i, j) == arg) 
		return getCookieVal(j); 
		i = document.cookie.indexOf(" ", i) + 1; 
		if (i == 0) break; 
		}
	chainevide = "" ;
	return chainevide; 
	} 
  
// Fonctions de manipulation des cookies
function SetCookie(name, value) 
	{ 
	var argv = SetCookie.arguments; 
	var argc = SetCookie.arguments.length; 
	var expires = (argc > 2) ? argv[2] : null; 
	var path = (argc > 3) ? argv[3] : null; 
	var domain = (argc > 4) ? argv[4] : null; 
	var secure = (argc > 5) ? argv[5] : false; 
	
	//alert("setcookie:") ;
	//alert("nom:"+name) ;
	//alert("valeur:"+value) ;
	
	document.cookie = name + "=" + escape (value) + 
	((expires == null) ? "" : ("; expires=" + expires.toGMTString())) + 
	((path == null) ? "" : ("; path=" + path)) + 
	((domain == null) ? "" : ("; domain=" + domain)) + 
	((secure == true) ? "; secure" : ""); 
	} 
// --------------------------------------------
// Fonctions concernant l'interface utilisateur
// --------------------------------------------
function coche_tout()
	{
	// On boucle sur tous les éléments du formulaire
	for(i = 0; i < document.formulaire.elements.length; i++)
		{
		objet = document.formulaire.elements[i] ;
		
		// Est ce que l'on est positionné sur un checkbox à cocher ?
		if(objet.name.substr(3) == "_source" || objet.name.substr(3) == "_cible" || objet.name == "liste_moteurs[]")
			{
			// On coche
			objet.checked = true ;
			}
		}
	}


function decoche_tout()
	{
	// On boucle sur tous les éléments du formulaire
	for(i = 0; i < document.formulaire.elements.length; i++)
		{
		objet = document.formulaire.elements[i] ;
		
		// Est ce que l'on est positionné sur un checkbox à cocher ?
		if(objet.name.substr(3) == "_source")
			{
			// On coche
			objet.checked = false ;
			}
			
		// Est ce que l'on est positionné sur un checkbox à cocher ?
		if( objet.name.substr(3) == "_cible" || objet.name == "liste_moteurs[]")
			{
			// On coche
			objet.checked = false ;
			objet.disabled = true ;
			}

		}
	}
	
function ouvre_mode_emploi()
	{
	window.open('aide.php','','height=550,menubar=no,scrollbars=yes,toolbar=no,width=700') ;
	}
function ouvre_contact()
	{
	window.open('contact.php','','height=550,menubar=no,scrollbars=yes,toolbar=no,width=600') ;
	}
	
function verifie_formulaire_envoi(message)
	{
	if( (document.forms['form1'].nom.value == "") || (document.forms['form1'].sujet.value == "") || (document.forms['form1'].message.value == "") || (document.forms['form1'].mail.value == "") )
		alert(message) ;
	else
		document.forms['form1'].submit() ;
	}
	
