var ACTION_VALID_OU = URL_SERVEUR_SCG+"/validerOuXML.do";
var FORM_VALID_OU;
var CHAMP_ACOTE_DE;

/*--------------------------------------------------------------------------
 * Valide les informations du champ où du formulaire.
 * Prend en paramètre le nom du formulaire à valider.
--------------------------------------------------------------------------*/
function scgValiderOuUnique(nameForm){
	scgEffacerAlertes();
	scgEffacerBoites();
 	FORM_VALID_OU = document.getElementById(nameForm);
 	var ou = FORM_VALID_OU.ou.value;
 	CHAMP_ACOTE_DE ="";
 	try{
 		CHAMP_ACOTE_DE=FORM_VALID_OU.acotede;
 	}catch(e){
 	}
 	var acotede = false;
 	if(CHAMP_ACOTE_DE){
 		acotede=CHAMP_ACOTE_DE.checked;
 	}
 	var idLieu = FORM_VALID_OU.idLieu.value;
 	
	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);

    if (nav_ie6) {
        TRAITEMENT_RETOUR=scgTraitementXMLOu;
        appelAjax(ACTION_VALID_OU, "ou="+ou+"&amp;idLieu="+idLieu+"&amp;acotede="+acotede+"&amp;lieuxExclus="+OU_UNIQUE_LIEUX_EXCLUS, true);      
    }
    else {
        TRAITEMENT_RETOUR = null;
        appelAjax(ACTION_VALID_OU, "ou="+ou+"&amp;idLieu="+idLieu+"&amp;acotede="+acotede+"&amp;lieuxExclus="+OU_UNIQUE_LIEUX_EXCLUS, true);
        scgTraitementXMLOu();
    }
}

/*--------------------------------------------------------------------------
	Recupéartion du XML retourné par AJAX lors de la validation du où par 
 	le serveur scg. Le XML est traité et du HTML est créé en
 	fonction de chaque cas.
--------------------------------------------------------------------------*/
function scgTraitementXMLOu(){
	// Le traitement n'est effectue 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("resultat")[0];
		if (rootNode) {
			var isAmbiguite = rootNode.getAttribute("ambiguite");
			var isLieuInconnu = rootNode.getAttribute("lieuInconnu");
			var isErreur = rootNode.getAttribute("erreur");
			var divAmbiguite = getFirstElementByClass("ambiguiteouunique", FORM_VALID_OU);
			divAmbiguite.innerHTML="";
			if(isAmbiguite=="true"){
				scgCreerHTMLAmbiguite(rootNode);
			}else if(isLieuInconnu=="true"){
				scgCreerHTMLLieuInconnu(rootNode);
			}else if (isErreur=="true"){
				scgCreerHTMLErreur(rootNode);
			}else{
				scgCreerHTMLLieuValide(rootNode);
			}
		}
    }    
}

/*--------------------------------------------------------------------------
  Recupération et traitements des infos du xml dans le cas d'un lieu valide.
  Le formulaire est mis à jour et valider.
--------------------------------------------------------------------------*/
function scgCreerHTMLLieuValide(xmlRootNode){
	var lieu = xmlRootNode.getElementsByTagName("lieu")[0];
	FORM_VALID_OU.idLieu.value=lieu.getAttribute("idLieu");
	FORM_VALID_OU.ou.value=lieu.getAttribute("libelleLieu");
	FORM_VALID_OU.jsActif.value=true;
	FORM_VALID_OU.submit();
}

/*--------------------------------------------------------------------------
  Recupération et traitements des infos du xml dans le cas d'un lieu ambigu.
  Affichage d'une div de levée d'ambguité et d'une alerte
--------------------------------------------------------------------------*/
function scgCreerHTMLAmbiguite(xmlRootNode){
	var divAmbiguite = getFirstElementByClass("ambiguiteouunique", FORM_VALID_OU);
	
	//creation de l'alerte
	var alerte =  xmlRootNode.getElementsByTagName("alerte")[0];
	scgCreationAlerte(divAmbiguite, alerte);
	
	//creation d'une boite de message.
	var boiteInfos =  xmlRootNode.getElementsByTagName("boitesinfos")[0];
	
	var lstAmbiguites = xmlRootNode.getElementsByTagName("ambiguite");
	
	var divListe = document.createElement('div');
	divListe.className="liste_thematique";
	
	var lstXMLPoiVoieArr = new Array();
	var lstXMLAutres = new Array();
	var ambiguiteXML;
	var indexPoiVoieArr = 0;
	var indexAutres = 0;
	//regroupement des pois, voies et arrondissements
	for(i=0;i<lstAmbiguites.length;i++){
		ambiguiteXML = lstAmbiguites[i];
		var typeLieuAmbigu = ambiguiteXML.getAttribute("type");
		if(typeLieuAmbigu=="TYPE_POI" || typeLieuAmbigu=="TYPE_ADRESSE" || typeLieuAmbigu=="TYPE_ARRONDISSEMENT"){
			lstXMLPoiVoieArr[indexPoiVoieArr]=ambiguiteXML;
			indexPoiVoieArr++;
		}else{
			lstXMLAutres[indexAutres]=ambiguiteXML;
			indexAutres++;
		}
	}
	
	// creation de la liste des pois, voies et arrondissmeents
	if(lstXMLPoiVoieArr.length>0){
	
		scgCreerLibelleHTMLListeLieu(xmlRootNode, lstXMLPoiVoieArr[0], divListe);
		
		var ul = document.createElement('ul');
		
		for(i=0;i<lstXMLPoiVoieArr.length;i++){
			scgCreerListeHTMLLieu(lstXMLPoiVoieArr[i], ul);
		}
		
		//ajout du contenu de la boite
		divListe.appendChild(ul);
	
	}

	//creation des listes pour chaque autres types de lieux
	for(i=0;i<lstXMLAutres.length;i++){
		
		scgCreerLibelleHTMLListeLieu(xmlRootNode, lstXMLAutres[i], divListe);
		
		var ul = document.createElement('ul');
		
		scgCreerListeHTMLLieu(lstXMLAutres[i], ul);
		
		//ajout du contenu de la boite
		divListe.appendChild(ul);
	}
	
	scgCreerBoite(xmlRootNode, divAmbiguite, divListe, boiteInfos.getAttribute("libelle"), true);
}

/*-------------------------------------------------------------------------------
Creation du libelle HTML d'une liste lieux depuis le XML passe en paramètre 
dans une div.
---------------------------------------------------------------------------------*/
function scgCreerLibelleHTMLListeLieu(xmlRoot, ambiguiteXML, divListe){

	//creation du titre de la liste.
	var pTitre = document.createElement('p');
	pTitre.className="soustitre sclear";
	pTitre.appendChild(document.createTextNode(ambiguiteXML.getAttribute("libelle")));
	
	//creation du lien 'selectionner toute les localites' en cas d'une multiloc
	if(ambiguiteXML.getAttribute("idMultiLoc")!=""){
		var aLi = document.createElement('a');		
		aLi.className="soustitre_localite";
		aLi.href="#";
		aLi.onclick=function(ambiguiteXML){
			return function(){
			 	var acotede = false;
			 	if(CHAMP_ACOTE_DE){
			 		acotede=CHAMP_ACOTE_DE.checked;
			 	}
				scgValiderAmbiguite(ambiguiteXML.getAttribute('idMultiLoc'),FORM_VALID_OU.ou.value, acotede);
			}
		}(ambiguiteXML);
		var libelleLien = "";
		var libellesXML =xmlRoot.getElementsByTagName("libelle");
		for(k=0;k<libellesXML.length;k++){
			if(libellesXML[k].getAttribute("id")=="selectionLocalite"){
				libelleLien=libellesXML[k].getAttribute("value");
			}
		}
		aLi.appendChild(document.createTextNode(libelleLien));
		pTitre.appendChild(aLi);
	}
	divListe.appendChild(pTitre);

}
/*-------------------------------------------------------------------------------
Creation de la liste des lieux HTML dans le ul depuis le XML passe en paramètre 
---------------------------------------------------------------------------------*/
function scgCreerListeHTMLLieu(ambiguiteXML, ul){

	var	lieux = ambiguiteXML.getElementsByTagName("lieu");
	var li;
	var aLi;
	var lieu;
	//creation de la liste des lieux
	for(j=0;j<lieux.length;j++){
		lieu = lieux[j];
		li = document.createElement('li');	
		aLi = document.createElement('a');	
		aLi.href="#";
		aLi.onclick=function(lieu){
			return function(){
			 	var acotede = false;
			 	if(CHAMP_ACOTE_DE){
			 		acotede=CHAMP_ACOTE_DE.checked;
			 	}
				scgValiderAmbiguite(lieu.getAttribute('idLieu'),lieu.getAttribute('libelleLieu'), acotede);
			}
		}(lieu);
		aLi.appendChild(document.createTextNode(lieu.getAttribute("libelleLieuComplet")));
		li.appendChild(aLi);
		ul.appendChild(li);
	}
	

}

/*--------------------------------------------------------------------------
  Recupération et traitements des infos du xml dans le cas d'un lieu inconnu.
  Affichage d'une boite de message et d'une alerte.
--------------------------------------------------------------------------*/
function scgCreerHTMLLieuInconnu(xmlRootNode){
	var divAmbiguite = getFirstElementByClass("ambiguiteouunique", FORM_VALID_OU);	
	
	//creation de l'alerte
	var alerte =  xmlRootNode.getElementsByTagName("alerte")[0];
	scgCreationAlerte(divAmbiguite, alerte);

	//creation d'une boite de message.
	var boiteInfos =  xmlRootNode.getElementsByTagName("boitesinfos")[0];
	//creation du contenu de la boite.
	var pInfos = document.createElement('p');
	pInfos.className="sous_titre";
	pInfos.appendChild(document.createTextNode(boiteInfos.childNodes[0].nodeValue));	
	
	var divListe = document.createElement('div');
	divListe.className="liste_thematique";
	//ajout du contenu de la boite
	divListe.appendChild(pInfos);
	
	scgCreerBoite(xmlRootNode, divAmbiguite, divListe, boiteInfos.getAttribute("libelle"), true);
}

/*--------------------------------------------------------------------------
  Recupération et traitements des infos du xml dans le cas d'un lieu inconnu.
  Affichage d'une alerte.
--------------------------------------------------------------------------*/
function scgCreerHTMLErreur(xmlRootNode){
	var alerte =  xmlRootNode.getElementsByTagName("alerte")[0];
	var divAmbiguite = getFirstElementByClass("ambiguiteouunique", FORM_VALID_OU);
	scgCreationAlerte(divAmbiguite, alerte);
}


/*-------------------------------------------------------------------------
 	Création d'une boite HTML dans laquelle on va placer le contenu 
 	passé en paramètre puis ajout dans une div passée en paramètre.
---------------------------------------------------------------------------*/
function scgCreerBoite(xmlRoot, divContenant, contenuHTML, libelleTitre, creerLienModifierSaisie){	
	//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(libelleTitre));	
	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 de la boite
	var divContenu = document.createElement('div');
	divContenu.className="contenu contenu_localite";
	divContenu.appendChild(contenuHTML);
	
	//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');
	if(creerLienModifierSaisie){
		var aModif = document.createElement('a');
		aModif.href="#";
		var libelleLien ="";
		var libellesXML =xmlRoot.getElementsByTagName("libelle");
		for(i=0;i<libellesXML.length;i++){
			if(libellesXML[i].getAttribute("id")=="modifSaisie"){
				libelleLien=libellesXML[i].getAttribute("value");
			}
		}
		aModif.title=libelleLien;
		aModif.onclick=scg_modifierSaisieOu;
		aModif.appendChild(document.createTextNode(libelleLien));
		var spanA = document.createElement('span');
		spanA.appendChild(document.createTextNode("> "));
		spanA.appendChild(aModif);
		spanPied.appendChild(spanA);
	}else{
		spanPied.appendChild(document.createTextNode(" "));
	}	
	pPied.appendChild(spanPied);	
	divPied.appendChild(pPied);
	
	var divBoite = document.createElement('div');
	divBoite.className="boite scg_ambiguite_ou";
	divBoite.appendChild(divTitre);
	divBoite.appendChild(divContenu);
	divBoite.appendChild(divPied);
	
	divContenant.appendChild(divBoite);
	divBoite.style.display="block";
}


/*---------------------------------------------------------------------
 	Création d'une alerte HTML à partir d'une alerte XML 
 	puis ajout dans une div passée en paramètre.
-----------------------------------------------------------------------*/
function scgCreationAlerte(divContenant, elmtXMLAlerte){
	//creation de l'alerte
	//creation des spans de l'alerte
	var spanTop = document.createElement('span');
	spanTop.className="alerte_top";
	var spanbottom = document.createElement('span');
	spanbottom.className="alerte_bottom";
	var spanpointe = document.createElement('span');
	spanpointe.className="alerte_pointe";
	
	//creation du pararagraphe de texte de l'alerte
	var paragraphe = document.createElement('p');
	var texteAlerte = elmtXMLAlerte.childNodes[0].nodeValue;
	paragraphe.appendChild(document.createTextNode(texteAlerte));
	var texteSpan = elmtXMLAlerte.getElementsByTagName("sp")[0];
	if(texteSpan){
		var spantexte = document.createElement('span');
		spantexte.className="alerte_data";
		spantexte.appendChild(document.createTextNode(texteSpan.childNodes[0].nodeValue));
		paragraphe.appendChild(spantexte);
	}
	//creation de la div contenant les spans
	var divAlerte = document.createElement('div');
	divAlerte.className="alerte_contour";
	divAlerte.appendChild(spanTop);
	divAlerte.appendChild(spanbottom);
	divAlerte.appendChild(spanpointe);
	divAlerte.appendChild(paragraphe);
	
	var divAlerte1 = document.createElement('div');
	divAlerte1.appendChild(divAlerte);
	
	var divAlertePrinc = document.createElement('div');
	divAlertePrinc.className="alerte "+elmtXMLAlerte.getAttribute("cssClass");
	divAlertePrinc.appendChild(divAlerte1);
	
	divContenant.appendChild(divAlertePrinc);
	divAlertePrinc.style.display="block";
}

/*---------------------------------------------------------------------
 	Valide l'ambiguite.
  	Le formulaire est mis à jour et valider.
-----------------------------------------------------------------------*/
function scgValiderAmbiguite(idLieu, libelleLieu, proxi){
	FORM_VALID_OU.idLieu.value=idLieu;
	FORM_VALID_OU.ou.value=libelleLieu;
	if(CHAMP_ACOTE_DE){
		FORM_VALID_OU.acotede.value=proxi;
	}
	FORM_VALID_OU.jsActif.value=true;
	FORM_VALID_OU.submit();
}

/*--------------------------------------------------------------------------
 * Efface les alertes HTML affichées dans le formulaire.
--------------------------------------------------------------------------*/
function scgEffacerAlertes(){
	if(FORM_VALID_OU){
		var alertesGlobales = getElementsByClassName(FORM_VALID_OU, "div", "alerte");
		if(alertesGlobales){
			for(i = 0; i < alertesGlobales.length; i++){
				alertesGlobales[i].style.display = "none";
			}
		}
	}
}

/*--------------------------------------------------------------------------
 * Efface les boites HTML affichées dans le formulaire.
--------------------------------------------------------------------------*/
function scgEffacerBoites(){
	if(FORM_VALID_OU){
		var alertesGlobales = getElementsByClassName(FORM_VALID_OU, "div", "boite");
		if(alertesGlobales){
			for(i = 0; i < alertesGlobales.length; i++){
				alertesGlobales[i].style.display = "none";
			}
		}
	}
}

/*--------------------------------------------------------------------------
  Evenement appeler lors du clic sur le bouton fermer d'une boite.
--------------------------------------------------------------------------*/
function scgFermerBoite(ev){
	Obj = ((window.event)?window.event.srcElement:this);
	Obj.parentNode.parentNode.parentNode.style.display = 'none';
	scgEffacerAlertes();
}

function scg_modifierSaisieOu(){
	FORM_VALID_OU.idLieu.value="";
	FORM_VALID_OU.ou.value="";
	scgEffacerAlertes();
	scgEffacerBoites();

}