		
	var user_agent = navigator.userAgent;
	var nav_opera	= /opera [56789]|opera\/[56789]/i.test(user_agent);
	var nav_ie = !nav_opera && /msie [56789]/i.test(user_agent);
	var nav_ie6 = nav_ie && /msie 6/i.test(user_agent);
	
	/** le nom du champ localite dans le formulaire */
	var CHAMP_LOCALITE;  
	
	/** le nom du champ du code localite dans le formulaire */
	var CHAMP_CODE_LIEU; 
	
	/** le nom du champ departement dans le formulaire */
	var CHAMP_DEPARTEMENT; 
	
	/** le nom du champ activite dans le formulaire */
	var CHAMP_ACTIVITE;
	
	/** le nom du champ du code activite dans le formulaire */
	var CHAMP_CODE_ACTIVITE;
	
	/** URL de l'action a appeler */
	var ACTION_GUIDE_LIEU = URL_SERVEUR_SCG+ '/guideLieu.do';
		
	/** URL de l'action a appeler */
	var ACTION_GUIDE_ACTIVITE = URL_SERVEUR_SCG+ '/guideActivite.do';
	
	/** Le nom du noeud root du XML envoyé par le serveur */
	var COMPLETE_RESPONSE_ROOT = 'guide';
		
	/** le fomurlaire dans lequel on trouve les champs a valuer */
	var formulaire;
	
	/** la classe de la boite du guide où on affiche la liste des lieux */
	var boiteGuide;

	var TRAITEMENT_RETOUR_GUIDE;
	
	
//---------------------------------------------------------------------------------------------------------//
//---------------------------------------METHODES PUBLIQUES GUIDES-----------------------------------------//	
//---------------------------------------------------------------------------------------------------------//
	
	/**
      * Récupère la liste des informations du guide sur le département
      * @param _idFormulaire le nom du formulaire qui contient les champs a valuer
      * @param _champLocalite le nom du champ localite
      * @param _champIdLieu le nom du champ du code de la localite choisie
      * @param _champDepartement le nom du champ departement
      * @param _guideLocalite true si on doit afficher le niveau localite
      */
	function scgAfficherGuideListeRegions(_idFormulaire, _champLocalite, _champIdLieu, _champDepartement, _guideLocalite ) {
		if(_guideLocalite){
			scgRecupererListeDepartement(_idFormulaire, _champLocalite, _champIdLieu, _champDepartement, "afficheNiveauLocalite=true") ;
		}else{
			scgRecupererListeDepartement(_idFormulaire, _champLocalite, _champIdLieu, _champDepartement, "") ;
		}   
	}
	
	/**
      * Récupère la liste des localites d'un département dans le guide
      * @param _idFormulaire le nom du formulaire qui contient les champs a valuer
      * @param _champLocalite le nom du champ localite
      * @param _champIdLieu le nom du champ du code de la localite choisie
      * @param _champDepartement le nom du champ departement
      * @param _params les parametres correspondants au code lieu, typelieu, libelle du departement le tout encrypté
      */
	function scgAfficherGuideListeLocalites(_idFormulaire, _champLocalite, _champIdLieu, _champDepartement, _params) {
		scgRecupererListeDepartement(_idFormulaire, _champLocalite, _champIdLieu, _champDepartement, _params ) ;
	}
	
	
	/**
      * Récupère la liste des informations du guide sur l'activite
      * @param _nomFormulaire le nom du formulaire qui contient les champs a valuer
      * @param _champActivite le nom du champ activite
      */
	function scgAfficherGuideActivite(_nomFormulaire, _champActivite, _champCodeActivite) {
		CHAMP_ACTIVITE = _champActivite;
		CHAMP_CODE_ACTIVITE = _champCodeActivite;
		TRAITEMENT_RETOUR_GUIDE=scgTraitementRetourActivite;
		formulaire = document.getElementById(_nomFormulaire);
		boiteGuide = getFirstElementByClass("guide_activite", formulaire);
		scgEffacerGuides(formulaire);
		scgAppelAjaxGuide(ACTION_GUIDE_ACTIVITE, "");
	}
	
//---------------------------------------------------------------------------------------------------------//
//----------------------------------------METHODES PRIVEES GUIDE LIEU -------------------------------------//
//---------------------------------------------------------------------------------------------------------//
	
	
	/**
      * Récupère la liste des informations du guide sur le département
      * @param _nomFormulaire le nom du formulaire qui contient les champs a valuer
      * @param _champLocalite le nom du champ localite
      * @param _champCodeLieu le nom du champ du code de la localite choisie
      * @param _champDepartement le nom du champ departement
      */
	function scgRecupererListeDepartement(_nomFormulaire, _champLocalite, _champCodeLieu, _champDepartement, _params ) {
		CHAMP_LOCALITE = _champLocalite;
		CHAMP_CODE_LIEU = _champCodeLieu;
		CHAMP_DEPARTEMENT = _champDepartement;
		TRAITEMENT_RETOUR_GUIDE= scgTraitementRetourLieu;
		formulaire = document.getElementById(_nomFormulaire);
		boiteGuide = getFirstElementByClass("guide_lieu", formulaire);		
		scgEffacerGuides(formulaire);
		scgAppelAjaxGuide(ACTION_GUIDE_LIEU, _params);
	}
	
	function scgAppelAjaxGuide(_action, _params){
	    if (nav_ie6) {
	        TRAITEMENT_RETOUR=TRAITEMENT_RETOUR_GUIDE; 
	        appelAjax(_action, _params, true);
	    }
	    else {
	        TRAITEMENT_RETOUR = null;
	        appelAjax(_action, _params, true);
	        eval(TRAITEMENT_RETOUR_GUIDE)();
	    }
	}
	
	function scgTraitementRetourLieu(){
		// Le traitement n'est effectuer que lorsque : 
		//  - La reponse a ete recue (readuState == 4)
		//  - Le format est celui attendu (Flux XML -> ajax.responseXML est non null)
		if (ajax.readyState == '4' && ajax.responseXML) {
			// Recuperation de l'element racine
			var rootNode = ajax.responseXML.getElementsByTagName(COMPLETE_RESPONSE_ROOT)[0];
			if (rootNode) {
				boiteGuide.innerHTML="";
				var afficheLocalite = "";
				var isLocalite = rootNode.getElementsByTagName("isLocalite");
				if(isLocalite && isLocalite[0]){
					afficheLocalite = isLocalite[0].firstChild.nodeValue;
				}
				var filAriane = scgCreerFilAriane(rootNode);
				var railAlpha = scgCreerRailAlphabetique(rootNode);
				var divListeLieux = scgAffichageGuideLieu(rootNode, afficheLocalite);
				scgCreerBoiteGuide(rootNode, filAriane, railAlpha, divListeLieux);
				boiteGuide.style.display='block';
			}
		}
	}
	
	/**
	 * Traite le xml de la liste des lieux et créer le code HTML correspondant
	 * @param rootNode le xml
	 * @param afficheLocalite true si on est au niveau localité.
	 */
	function scgAffichageGuideLieu(rootNode, afficheLocalite){		
		var ulListeLongue = document.createElement('ul');
		ulListeLongue.className="liste_longue";
		var listeLieuDom = rootNode.getElementsByTagName("listeLieu")[0];
		if(listeLieuDom ){				
			//récupération du libelle du lien de selection
			var libelleLienSelection = listeLieuDom.getElementsByTagName("libSelection")[0].firstChild.data; 
			var libelleLienVoir = "";
			var libVoirDom = listeLieuDom.getElementsByTagName("libVoir");
			if(libVoirDom && libVoirDom[0]){
				libelleLienVoir = libVoirDom[0].firstChild.data;
			}
			 
			//récupération du libelle pour aucune localite sur une lettre du rail pour un département
			var aucuneLocalite = listeLieuDom.getElementsByTagName("aucuneLocalite");
			if(aucuneLocalite && aucuneLocalite.length>0){
				var liLieu = document.createElement('li');
				ulListeLongue.appendChild(liLieu);
				liLieu.appendChild(document.createTextNode(aucuneLocalite[0].firstChild.data));
			}else{
				//récupération de la liste des lieux
				var listeLieu = listeLieuDom.getElementsByTagName("lieu");
				
				for (i=0;i<listeLieu.length;i++){
					liLieu = scgCreerHTMLLieu(listeLieu[i], libelleLienSelection, libelleLienVoir, afficheLocalite);
					ulListeLongue.appendChild(liLieu);
				}
			}
		}
		return ulListeLongue; 
	}
	
	/**
	 *  Créer le html correspondant au xml d'un lieu
	 * @param xmlLieu le xml du lieu
	 * @param libelleLienSelection le libelle du lien de sélection du lieu
	 * @param libelleLienVoir le libelle du lien de visualisation des niveaux inférieurs au lieu.
	 * @param afficheLocalite true si on est au niveau localité.
	 */	
	function scgCreerHTMLLieu(xmlLieu, libelleLienSelection, libelleLienVoir,  afficheLocalite){
		var liLieu = document.createElement('li');
		var lieu = scgCreerObjetLieu(xmlLieu, afficheLocalite);
		if(afficheLocalite){
			//une localité n'a qu'un libelle qui est cliquable pour la sélectionner
			var urlSelection = scgCreerHTMLLien(lieu.libelle, lieu.urlSelection, lieu.actionSelectionClick);
			liLieu.appendChild(urlSelection);
		}else{
			//les autres lieux sont composés d'un libelle et de 2 liens qui sont la sélection du lieu 
			// et la visualisation des lieux de niveaux inférieurs
			
			//libelle du lieu
			var spanLibelle = document.createElement('span');
			spanLibelle.className="regions_nom";
			spanLibelle.appendChild(document.createTextNode(lieu.libelle));
			liLieu.appendChild(spanLibelle);
			
			//lien de sélection du lieu
			var spanUrl = document.createElement('span');
			liLieu.appendChild(spanUrl);
			if(lieu.urlSelection && lieu.urlSelection!=""){
				var ahref = scgCreerHTMLLien(libelleLienSelection, lieu.urlSelection, lieu.actionSelectionClick);
				spanUrl.appendChild(ahref);
			}
			
			//lien de visualisation des lieux de niveaux inférieurs
			if(lieu.urlAppel && lieu.urlAppel!=""){
				var separateur = document.createTextNode(" | ");
				spanUrl.appendChild(separateur);
				var ahref = scgCreerHTMLLien(libelleLienVoir, lieu.urlAppel, lieu.actionAppelClick);
				spanUrl.appendChild(ahref);
			}
		}
		return liLieu;
			
	}
	
	/**
	 * Créer un objet javascript correspondant au xml d'un lieu
	 * comme attribut libelle, urlSelection et urlVoir
	 */ 
	function scgCreerObjetLieu(xmlLieu, afficheLocalite){
		var objet = new Object();
		objet.libelle=xmlLieu.getAttribute("libelle");
		objet.code=xmlLieu.getAttribute("idLieu");

		// en cas de lieu ou on peut voir les lieux de niveaux inférieurs, donc tout sauf les localites
		if(xmlLieu.getAttribute("urlAppel") && xmlLieu.getAttribute("urlAppel")!=""){
			objet.urlAppel = "#null";
			var fonctionURLAjax = scgCreerURLAjax(xmlLieu.getAttribute("urlAppel"),"scgSelectionDepartement",objet.libelle, objet.code);
			objet.actionAppelClick=function(fonctionURLAjax){
				return function(){
					eval(fonctionURLAjax);
				}
			}(fonctionURLAjax);
		}
		//création des actions de sélection du lieu
		var libelle = objet.libelle.replace(/\'/g,"\\'");
		libelle = libelle.replace(/\"/g,'\\"');
		if(afficheLocalite){
			objet.urlSelection = "#null";
			objet.actionSelectionClick=function(libelle, code){
				return function(){
					scgSelectionLocaliteClose(libelle,code);
				}
			}(libelle, objet.code);
		}else{
			objet.urlSelection = "#null";
			objet.actionSelectionClick=function(libelle, code){
				return function(){
					scgSelectionDepartementClose(libelle,code);
				}
			}(libelle, objet.code);	
		}
		return objet;
	}

//---------------------------------------------------------------------------------------------------------//
//-----------------------------------METHODES PRIVEES GUIDE ACTIVITE --------------------------------------//
//---------------------------------------------------------------------------------------------------------//

	function scgTraitementRetourActivite(){
		// Le traitement n'est effectuer que lorsque : 
		//  - La reponse a ete recue (readuState == 4)
		//  - Le format est celui attendu (Flux XML -> ajax.responseXML est non null)
		if (ajax.readyState == '4' && ajax.responseXML) {
			// Recuperation de l'element racine
			var rootNode = ajax.responseXML.getElementsByTagName(COMPLETE_RESPONSE_ROOT)[0];
			if (rootNode) {
				boiteGuide.innerHTML="";
				var filAriane = scgCreerFilAriane(rootNode);
				var divListeActivite = scgAffichageGuideActivite(rootNode);
				scgCreerBoiteGuide(rootNode, filAriane, null, divListeActivite);
				boiteGuide.style.display='block';
			}
		}
	}
	
	/**
	 * Traite le flux XML renvoyé par le serveur et remplit le guide activite
	 */
	function scgAffichageGuideActivite(rootNode){	
		var ulListeLongue = document.createElement('ul');
		ulListeLongue.className="liste_longue";
		var listeActiviteDom = rootNode.getElementsByTagName("listeActivite")[0];
		if(listeActiviteDom){
			 
			//récupération de la liste des rubriques
			var listeActivite = listeActiviteDom.getElementsByTagName("activite");
			
			for (i=0;i<listeActivite.length;i++){
				var activite = scgCreerObjetActivite(listeActivite[i]);
				var liActivite = document.createElement('li');
				ulListeLongue.appendChild(liActivite);
				var urlAppel = scgCreerHTMLLien(activite.libelle, activite.urlAppel, activite.actionclick);
				liActivite.appendChild(urlAppel);
			}
		}
		return ulListeLongue;
	}
	
	/**
	 * Crée un objet contenant les informations d'une activite, aavec un libellen et une url d'appel 
	 * à ajax et de selection du libelle
	 */ 
	function scgCreerObjetActivite(noeudPere){
		var objet = new Object();
		objet.libelle=noeudPere.getAttribute("libelle");
		objet.code=noeudPere.getAttribute("codeActivite");
		objet.urlAppel = "#null";
		var fonctionURLAjax = scgCreerURLAjax(noeudPere.getAttribute("urlAppel"),"scgSelectionActivite",objet.libelle, objet.code);
		objet.actionclick=function(fonctionURLAjax){
			return function(){
				eval(fonctionURLAjax);
				
			}
		}(fonctionURLAjax);
		return objet;
	}
	
	
	
//---------------------------------------------------------------------------------------------------------//
//-----------------------METHODES COMMUNES AUX GUIDES POUR LA GESTION DES OBJETS DOM-----------------------//
//---------------------------------------------------------------------------------------------------------//

	function scgCreerBoiteGuide(xmlRoot, filAriane, railAlpha, ulListeLongue){	
		//creation de la div du titre de la boite
		var divTitre = document.createElement('div');
		divTitre.className="titre";
		var spanTitre = document.createElement('span');
		spanTitre.appendChild(document.createTextNode(xmlRoot.getElementsByTagName("boitesinfos")[0].getAttribute("libelle")));	
		var img = document.createElement('img');
		var aTitre = document.createElement('a');
		aTitre.href="#";
		aTitre.className="closeBoite";
		aTitre.onclick=scgFermerBoite;
		var pTitre = document.createElement('p');
		pTitre.appendChild(spanTitre);
		pTitre.appendChild(aTitre);
		divTitre.appendChild(pTitre);
		
		//creation de la div du contenu du fil d'ariane
		var divGuide = document.createElement('div');
		divGuide.className="guide";
		divGuide.appendChild(filAriane);
		if(railAlpha){
			divGuide.appendChild(railAlpha);
		}
		
		//creation de la div du contenu liste lieux
		var divContenu = document.createElement('div');
		divContenu.className="contenu";
		divContenu.appendChild(divGuide);
		divContenu.appendChild(ulListeLongue);
		
		
		//creation de la div du bas de la boite
		var divPied = document.createElement('div');
		divPied.className="pied";
		var pPied = document.createElement('p');
		var spanPied = document.createElement('span');
		spanPied.appendChild(document.createTextNode(" "));
		pPied.appendChild(spanPied);	
		divPied.appendChild(pPied);
		
		boiteGuide.appendChild(divTitre);
		boiteGuide.appendChild(divContenu);
		boiteGuide.appendChild(divPied);
		
	}

	/**
	 * Récupère le fil d'ariane dans le XML envoyé par le serveur puis création du HTML correpondant
	 *
	 */
	function scgCreerFilAriane(rootNode){
		var pFilAriane = document.createElement('p');
		var filArianeDom = rootNode.getElementsByTagName("filAriane")[0];
		if(filArianeDom){
			var listePasDom = filArianeDom.childNodes;
			for (i=0;i<listePasDom.length;i++){
				var pas = scgCreerObjetInfoLien(listePasDom[i], false);	
				if(i!=0){
					var separateur = document.createTextNode(" > ");
					pFilAriane.appendChild(separateur);
				}
				var lienPas = scgCreerLienOuLibelleHTML(pas);
				pFilAriane.appendChild(lienPas);
			}
		}
		return pFilAriane;
	}
	
	/**
	 * Récupère le rail alphabetique dans le XML envoyé par le serveur puis création du HTML correpondant
	 *
	 */
	function scgCreerRailAlphabetique(rootNode){
		var ulABC = "";
		var railAlphaDom = rootNode.getElementsByTagName("railAlphabetique")[0];
		if(railAlphaDom){	
			var ulABC = document.createElement('ul');
			ulABC.className="abc sclear";
			var listeLettre = railAlphaDom.childNodes;
			for (i=0;i<listeLettre.length;i++){
				var lettre = scgCreerObjetInfoLien(listeLettre[i], false);
				var liLettre = document.createElement("li");
			    if(i==listeLettre.length-1){
				 	liLettre.className="last";
				}
				var lienLettre = scgCreerLienOuLibelleHTML(lettre);
				liLettre.appendChild(lienLettre);	
			    ulABC.appendChild(liLettre);
			}
		}
		return ulABC;
	}
	
	/**
	 * Cree un objet javascript contenant les informations d'un lien simple avec un libelle et une url d'appel à ajax
	 */
	function scgCreerObjetInfoLien(xmlLien){
		var objet = new Object();
		objet.libelle=xmlLien.getAttribute("libelle");
		var urlAppel = xmlLien.getAttribute("urlAppel");
		if (urlAppel!="") {
			objet.urlAppel = "#null";
			var fonctionURLAjax = scgCreerURLAjax(urlAppel,"","");
			objet.actionclick=function(fonctionURLAjax){
				return function(){
					eval(fonctionURLAjax);
				}
			}(fonctionURLAjax);
		} else {
			objet.urlAppel = "";
		}
		var act = xmlLien.getAttribute("act");
		objet.lettreActive = act;
		return objet;
	}

	/**
	 * Cree une url d'appel à ajax à partir d'une url HTTP avec un appel à une méthode de selection si les champs 
	 * nomMethodeSelection et libelleSelectionne sont valués
	 */
	function scgCreerURLAjax(url, nomMethodeSelection, libelleSelectionne, code){
		var retour= "";
		if(libelleSelectionne && libelleSelectionne!=""){
			libelleSelectionne = libelleSelectionne.replace(/\'/g,"\\'");
			libelleSelectionne = libelleSelectionne.replace(/\"/g,'\\"');
			if(url) {
				retour+= nomMethodeSelection+"('"+libelleSelectionne+"','"+code+"');";
			}else{
				retour+= nomMethodeSelection+"Close('"+libelleSelectionne+"','"+code+"');";
			}
		}
		if(url) {
			var indexParam = url.indexOf("?");
			if(indexParam!=-1){
				var longueurUrl = url.length;
				var action = URL_SERVEUR_SCG+ '/'+url.substring(0,indexParam);
				var params = url.substring(indexParam+1, longueurUrl);
				params = params.replace(/\'/g,"\\'");
				params = params.replace(/\"/g,'\\"');
				retour+= "scgAppelAjaxGuide('"+action+"','"+params+"');";
			}else{
				retour+= "scgAppelAjaxGuide('"+url+"','');";
			}
		}
		return retour;
		
	}
	
	
	/**
	 * Ajoute les informations d'un lien dans le code HTML de la page sous un noeud pere
	 * utilisé pour les info du rail alphabteique ainsi que du fil d'arianne
	 */	
	function scgCreerLienOuLibelleHTML(objInfoLien){
		var lien =null;
		if(objInfoLien.urlAppel!=null && objInfoLien.urlAppel!=""){
			//si l'url n'est pas vide alors création d'un a href avec l'url
			lien = scgCreerHTMLLien(objInfoLien.libelle, objInfoLien.urlAppel, objInfoLien.actionclick);
		}else{
			//création d'un libelle
			if (objInfoLien.lettreActive == "true") {
				lien = document.createElement("strong");
			} else {
				lien = document.createElement("span");
			}						
			let = document.createTextNode(objInfoLien.libelle)
			lien.appendChild(let);
		}
		return lien;
	}
	
	/**
	 * Creer un objet DOM html correspondant à un ahref avec comme attribut, le libelle du lien et son url
	 * et l'action sur le onclick.
	 */
	function scgCreerHTMLLien(libelleLien, href, click){
		var libelle = document.createTextNode(libelleLien);
		var ahref = document.createElement("a");
		ahref.setAttribute("href",href);
		ahref.onclick=click;
		ahref.appendChild(libelle);
		return ahref;
		
		
	}
	
		
	/*--------------------------------------------------------------------------
	 * Efface les boites HTML affichées dans le formulaire.
	--------------------------------------------------------------------------*/
	function scgEffacerGuides(form){
		if(form){
			var alertesGlobales = getElementsByClassName(form, "div", "boite");
			if(alertesGlobales){
				for(i = 0; i < alertesGlobales.length; i++){
					alertesGlobales[i].style.display = "none";
				}
			}
		}
	}
	
	// sélection d'un departement ou d'un region dans le guide
	function scgSelectionDepartement(libelle, idLieu) {
		formulaire[CHAMP_DEPARTEMENT].value= libelle;
		formulaire[CHAMP_LOCALITE].value= "";
		formulaire[CHAMP_CODE_LIEU].value= idLieu;
	}
	
	// sélection d'un departement ou d'un region dans le guide avec fermeture de la div
	function scgSelectionDepartementClose(libelle, idLieu) {
		scgSelectionDepartement(libelle, idLieu);
		boiteGuide.style.display='none';
	}
	
	//sélection d'une localite ou d'un region dans le guide
	function scgSelectionLocalite(libelle, idLieu) {
		formulaire[CHAMP_LOCALITE].value= libelle;
		formulaire[CHAMP_CODE_LIEU].value= idLieu;
	}
	
	//sélection d'une localite ou d'un region dans le guide avec fermeture de la div
	function scgSelectionLocaliteClose(libelle, idLieu) {
		scgSelectionLocalite(libelle, idLieu);
		boiteGuide.style.display='none';
	}
	
	// sélection d'un departement ou d'un region dans le guide
	function scgSelectionActivite(libelle, code) {
		formulaire[CHAMP_ACTIVITE].value= libelle;
		formulaire[CHAMP_CODE_ACTIVITE].value= code;
	}
	// sélection d'un departement ou d'un region dans le guide avec fermeture de la div
	function scgSelectionActiviteClose(libelle, code) {
		scgSelectionActivite(libelle, code);
		boiteGuide.style.display='none';
	}
