/****************************
 * formulaire_test.js : traitements JavaScript du formulaire du test d'éligibilité
 ****************************/

// variables globales
var timeout1 = null;
var codeToucheEntree = 13;
var ndLength = 10;
var ndLengthWithSep = 14;
var alertZoneND;
var alertZoneAdresse;
var inputND;
var infoInputND;
var infoInputRivoli;
var inputCP;
var selectCommunes;
var inputNumeroVoie;
var selectComplementNumeroVoie;
var inputVoie;
var inputHiddenRivoli;
var selectTypeVoie;
var divSuggestions;
var loaderCommunes;
var loaderVoies;
var tester;
var ndOk;
var adresseOk;


/**
 * fonction loadPageDefault()
 * => code devant être exécuté au chargement de la page
 **/
function loadPageDefault()
{
	setFocus('ndi');
	alertZoneND = findObject('alertZoneND'); // div pour les messages d'erreur relatifs au ND
	alertZoneAdresse = findObject('alertZoneAdresse'); // div pour les messages d'erreur relatifs a l'adresse
	inputND = findObject('ndi'); // input numéro téléphone
	infoInputND = findObject('infoInputND'); // span affichant un picto selon état input numéro téléphone
	infoInputRivoli = findObject('infoInputRivoli'); // span affichant un picto selon voie ok ou non
	inputCP = findObject('zip_code'); // input code postal
	selectCommunes = findObject("communes");
	inputNumeroVoie = findObject("numeroVoie");
	selectComplementNumeroVoie = findObject("complementNumeroVoie");
	selectTypeVoie = findObject("typeVoie");
	inputVoie = findObject("voie");
	inputHiddenRivoli = findObject("rivoli");
	divSuggestions = findObject("suggestions");
	loaderCommunes = findObject("loaderCommunes");
	loaderVoies = findObject("loaderVoies");
	tester = findObject("tester");
	// on interdit l'autocompletion (pour gerer au mieux les evenements)
	inputND.setAttribute('autocomplete', 'off');
	inputCP.setAttribute('autocomplete', 'off');
	inputNumeroVoie.setAttribute('autocomplete', 'off');
	inputVoie.setAttribute('autocomplete', 'off');
	deblocCP();
	ndOk = false;
	adresseOk = false;
	blocBoutonTester();
}

/**
 * fonction progressOn(loader)
 * => affiche le loader ajax
 **/
function progressOn(loader,champ)
{
	if(loader) loader.className="afficher";
	champ.disabled = true;
	champ.className = (champ.className == "saisie") ? "saisie disable" : "select disable";
}

/**
 * fonction progressOff(loader,champ)
 * => masque le loader ajax et desactive le champ associé.
 **/
function progressOff(loader,champ)
{
	if(loader) loader.className="masquer";
	champ.disabled = false;
	champ.className = (champ.className == "saisie disable") ? "saisie" : "select";
}

/*******************************************************************
 * 		REMISE A ZERO DES DIFFERENTS ELEMENTS DU FORMULAIRE		   *
 *******************************************************************/

/**
 * fonction resetTelephone()
 * => remise à zéro de la partie "numéro de téléphone" du formulaire
 **/
function resetTelephone()
{
	inputND.className = "saisie"; // style par défaut sur champ téléphone
	inputND.maxLength = ndLengthWithSep; // maxlength large pour le champ téléphone
	infoInputND.className = "obligatoireInput"; // style par défaut
	ndOk = false;
	blocBoutonTester();
	resetMessageErreur();
}

/**
 * fonction resetAdresse()
 * => remise à zéro de la partie "code postal" du formulaire
 **/
function resetAdresse()
{
	inputCP.className = "saisie"; // style par défaut sur champ code postal
	infoInputRivoli.className = "obligatoireInput"; // style par défaut
	blocCommune();
	blocNumeroVoie();
	blocComplementNumeroVoie();
	blocTypeVoie();
	blocVoie();
	resetMessageErreur();
}
	
/**
 * fonction resetMessageErreur()
 * => remise à zéro de la zone de messages d'erreur du formulaire
 **/
function resetMessageErreur()
{
	// suppression messages d'erreur
	alertZoneND.className = 'afficher';
	if(alertZoneND.hasChildNodes())
	{
		while(alertZoneND.hasChildNodes())
			alertZoneND.removeChild(alertZoneND.firstChild);
	}
	alertZoneAdresse.className = 'afficher';
	if(alertZoneAdresse.hasChildNodes())
	{
		while(alertZoneAdresse.hasChildNodes())
			alertZoneAdresse.removeChild(alertZoneAdresse.firstChild);
	}
}

/**
 * fonction resetForm()
 * => remise à zéro (reset) du formulaire
 **/
function resetForm()
{
	resetTelephone();
	resetAdresse();
}

/*******************************************************************
 * 				GESTION DU COMPORTEMENT DES CHAMPS    	 		   *
 *******************************************************************/

/**
 * fonction gererModifLigne(nd,evenement)
 * => en fonction de l'évènement intercepté sur le champ input du n° de ligne, décide quelle action effectuer
 * nd (string) = numéro de ligne saisi dans le champ input
 * evenement = évènement intercepté
 **/
function gererModifLigne(nd,evenement)
{
	var codeTouche = window.event ? evenement.keyCode : evenement.which;

	// sauf pression sur la touche Entrée (validation formulaire), on vérifie la ligne saisie
	if(codeTouche != codeToucheEntree) verifierLigne(nd,false);
}

/**
 * fonction gererModifCodePostal(cp,evenement)
 * => en fonction de l'évènement intercepté sur le champ input du code postal, décide quelle action effectuer
 * cp (string) = code postal saisi dans le champ input
 * evenement = évènement intercepté
 **/
function gererModifCodePostal(nd,evenement)
{
	var codeTouche = window.event ? evenement.keyCode : evenement.which;

	// sauf pression sur la touche Entrée (validation formulaire), on vérifie le code postal saisi
	if(codeTouche != codeToucheEntree) verifierCodePostal(cp,false);
}

/**
 * fonction gererEnsembleChampsVoie(insee)
 * =>
 **/
function gererEnsembleChampsVoie(insee)
{
	resetTypeVoie();
	resetVoie(true);
	
	if(insee != "none")
	{	
		deblocNumeroVoie();
		deblocComplementNumeroVoie();
		deblocTypeVoie();
		chercherTypesVoie(insee);
		deblocVoie();
		inputNumeroVoie.focus();
	}
	else
	{
		blocNumeroVoie();		
		blocComplementNumeroVoie();
		blocTypeVoie();
		blocVoie();
		selectCommunes.focus();
	}
}


/*******************************************************************
 * 			JS CONCERNANT LA VALIDITE DES CHAMPS			   	   *
 *******************************************************************/

/**
 * fonction verifierLigne(nd,termine)
 * => vérification dynamique du numéro de téléphone saisi
 * nd (string) = numéro de ligne saisi dans le champ input
 * termine (bool) = true si le formulaire a été validé (clic sur "tester"), auquel cas on ne tolère pas de numéro incomplet
 **/
function verifierLigne(nd,termine)
{
	resetTelephone();
	var erreurChampVide = "Merci de saisir un numéro de ligne à tester.";
	var erreurChampIncomplet = "Erreur : le numéro de téléphone saisi est incomplet, il doit comporter exactement 10 chiffres.";
	var erreurTypeNumLigne = "Erreur : seuls les numéros de ligne fixe à indicatif géographique (01 à 05) peuvent être testés.";
	var erreurFormatNumLigne = "Erreur : le numéro de téléphone saisi est invalide. Merci de saisir un numéro de téléphone français à 10 chiffres.";

	// cas [A] : nd vide => RAS
	//if (nd == "")	return true;
	
	// cas [B] : numéro de ligne pouvant être testé
	if (isTelephone(nd,true))
	{
		infoInputND.className = "valideInput";
		if (nd.length == ndLength)
			inputND.maxLength = ndLength;
		
		ndOk = true;
		deblocBoutonTester();
		return true;
	}

	// cas [C] : numéro de ligne ne pouvant pas être testé
	if (isTelephoneComplete(nd) || !startsLikeTelephone(nd,true) || termine)
	{
		inputND.className = "saisie erreur";
		infoInputND.className = "erreurInput";

		if (isTelephoneComplete(nd)) // champ téléphone complet : adapter message selon que le numéro est un tél valide ou non
			isTelephone(nd,false) ? displayAlert(erreurTypeNumLigne, alertZoneND) : displayAlert(erreurFormatNumLigne, alertZoneND);

		else if (!startsLikeTelephone(nd,true)) // champ téléphone non valide ou pas une ligne fixe => message tout de suite
			startsLikeTelephone(nd,false) ? displayAlert(erreurTypeNumLigne, alertZoneND) : displayAlert(erreurFormatNumLigne, alertZoneND);

		else if (termine) // autres cas (champ incomplet voire vide, mais valide) : erreur seulement si validation formulaire
			(nd == "") ? displayAlert(erreurChampVide, alertZoneND) : displayAlert(erreurChampIncomplet, alertZoneND);
			
		return false;
	}

	// cas [D] : numéro de ligne ne pouvant pas encore être testé, mais pas d'erreur à générer (saisie en cours)
	return true;
}

/**
 * fonction verifierCodePostal(cp,termine)
 * => vérification dynamique du code postal saisi
 * cp (string) = code postal saisi dans le champ input
 * termine (bool) = true si le formulaire a été validé (clic sur "tester"), auquel cas on ne tolère pas de cp incomplet
 **/
function verifierCodePostal(cp,termine)
{
	inputCP.className = "saisie";
	resetMessageErreur();
	var erreurChampIncomplet = "Erreur : le code postal saisi est incomplet, il doit comporter exactement 5 chiffres.";
	var erreurFormatCp = "Erreur : le code postal saisi est invalide. Merci de saisir un code postal français à 5 chiffres.";

	// cas [A] : code postal vide => RAS
	if (cp == "")	return true;

	// cas [B] : code postal correct => vérifier sélection de la commune
	if (isCodePostal(cp))	return validCommune();

	// cas [C] : code postal non valide
	if (isCodePostalComplete(cp) || !startsLikeCodePostal(cp) || termine)
	{
		inputCP.className = "saisie erreur";

		if (isCodePostalComplete(cp)) // cp complet (5 caractères) mais non valide
			displayAlert(erreurFormatCp, alertZoneAdresse);

		else if (termine) // code postal incomplet à la validation
			displayAlert(erreurChampIncomplet, alertZoneAdresse);

		else if (!startsLikeCodePostal(cp)) // code postal invalide avant même d'avoir terminé la saisie
			displayAlert(erreurFormatCp, alertZoneAdresse);

		return false;
	}

	// cas [D] : code postal pas encore valide mais pas de génération d'erreur (saisie en cours)
	return true;
}

/**
 * fonction validCommune()
 * => vérifie que la commune a été sélectionnée
 **/
function validCommune()
{
	// liste déroulante de communes inexistante car cp valide mais inconnu
	if(selectCommunes.disabled == true)
	{
		inputCP.className = "saisie erreur";
		displayAlert("Merci de corriger ou effacer le code postal saisi pour permettre l'exécution du test.", alertZoneAdresse);
		return false;
	}
	// commune non sélectionnée dans la liste déroulante
	if (selectCommunes.value == "none")
	{
		findObject('communes').className = "erreur";
		displayAlert("Merci de sélectionner une commune dans la liste.", alertZoneAdresse);
		return false;
	}

	return true;
}

/**
 * fonction validForm(elm)
 * => vérifie que le formulaire est correctement complété
 **/
function validForm(elm)
{
	// vérif saisie zone numéro ligne
	if (!verifierLigne(inputND.value,true)) return false;

	// vérif saisie zone code postal
	if (!verifierCodePostal(inputCP.value,true)) return false;

	boutonTesterEnCours();
	
	return true;
}

/**
 * fonction displayAlert(msg, alertZone)
 * => afficher un message d'erreur au-dessus du formulaire
 * msg (string) = message contextuel à afficher
 * alertZone (object) = zone dans laquel le message d'erreur doit s'afficher
 **/
function displayAlert(msg, alertZone)
{
	resetMessageErreur();
	var paragraphe = document.createElement("p");
	paragraphe.className = "erreur";
	paragraphe.appendChild(document.createTextNode(msg));
	if(alertZone) alertZone.className = "alerte";
	if(alertZone) alertZone.appendChild(paragraphe);
}


/*******************************************************************
 * 			JS CONCERNANT LE CHAMP CODE POSTAL				   	   *
 *******************************************************************/

/**
 * fonction deblocCP()
 * => 
 **/
function deblocCP()
{
	inputCP.disabled = false;
	inputCP.className = "saisie";

}

/**
 * fonction chercherCommunes(cp,evenement)
 * =>
 **/
function chercherCommunes(cp,evenement)
{
	if(cp.length > 0) 
		blocBoutonTester();
	else
	 	deblocBoutonTester();
	
	clearTimeout(timeout1);
	timeout1 = setTimeout(function()
	{
		var codeTouche = window.event ? evenement.keyCode : evenement.which;
		if(codeTouche != codeToucheEntree)
		{
			//reset de tout l'affichage
			resetAdresse();
			launchAjaxCommunes(cp);	
		}
		clearTimeout(timeout1);
	}
	,300);
}

/**
 * fonction launchAjaxCommunes(cp)
 * =>
 **/
function launchAjaxCommunes(cp)
{
	if(isCodePostalComplete(cp))
	{
		if (isCodePostal(cp))
		{
			progressOn(loaderCommunes,inputCP); 
			var xhr;
			if (window.XMLHttpRequest) xhr = new XMLHttpRequest();
			else if (window.ActiveXObject) xhr = new ActiveXObject('Microsoft.XMLHTTP');
			else {alert('JavaScript : votre navigateur ne supporte pas les objets XMLHttpRequest...');return;}
			xhr.open('POST','/scripts/ajaxCommunes.php',true);
			xhr.onreadystatechange = function()
			{
				if(xhr.readyState == 4)
				{
					//traitement
					var reponse = xhr.responseXML;
					var elements = reponse.getElementsByTagName("marker");
					var errors = reponse.getElementsByTagName("error");
					progressOff(loaderCommunes,inputCP); 
					afficherCommunes(elements,errors);
				}
			}
			xhr.setRequestHeader('Content-type','application/x-www-form-urlencoded');
			var data = 'cpvalue='+escape(cp);
			xhr.send(data);
		}
		else
		{
			resetAdresse();
			inputCP.className = "saisie erreur";
			displayAlert("Le code postal n'est pas correctement renseigné : il doit contenir 5 chiffres.", alertZoneAdresse);
		}
	}
	else
		resetAdresse();
}

/**
 * fonction afficherCommunes(elements,errors)
 * =>
 **/
function afficherCommunes(elements,errors)
{
	//traitement du nouvel affichage
	if(elements.length > 0)
	{
		resetCommune();
		if(elements.length > 1)
		{
			var option = document.createElement('option');
			option.appendChild(document.createTextNode('Commune'));
			option.setAttribute("selected", "selected");
			option.setAttribute("value", "none");
			selectCommunes.appendChild(option);
		}
		for(i=0; i<elements.length; i++)
		{
			var nomCommune = elements[i].getAttribute("nomCommune");
			var insee =	elements[i].getAttribute("insee");
			var option = document.createElement('option');
			option.appendChild(document.createTextNode(nomCommune));
			option.setAttribute("value", insee);
			selectCommunes.appendChild(option);
		}	
		deblocCommune();
		if(elements.length == 1)
		{
			gererEnsembleChampsVoie(elements[0].getAttribute("insee"));
			inputNumeroVoie.focus();
		}
		else
			selectCommunes.focus();
	}
	else if(errors != null)
	{
		if(errors[0].getAttribute("type") == 'invalidCp')
		{
			displayAlert("Le code postal n'est pas correctement renseigné : il doit contenir 5 chiffres.", alertZoneAdresse);
			inputCP.className = "saisie erreur";
			inputHiddenRivoli.focus(); // patch firefox gerant mal le focus
			inputCP.focus();
		}
		else if(errors[0].getAttribute("type") == 'badCp')
		{
			displayAlert("Nous n'avons trouvé aucune commune avec ce code postal. Le test ne pourra donc pas trouver les offres fibre optique et WiFi-Wimax disponibles sur votre zone. S'il s'agit d'une erreur de saisie, vous pouvez corriger ci-dessous.", alertZoneAdresse);
			inputCP.className = "saisie erreur";
			inputHiddenRivoli.focus(); // patch firefox gerant mal le focus
			inputCP.focus();
		}
	}
}


/*******************************************************************
 * 			JS CONCERNANT LE CHAMP CHOIX DE LA COMMUNE		   	   *
 *******************************************************************/

/**
 * fonction blocCommune()
 * => 
 **/
function blocCommune()
{
	resetCommune();
	var option = document.createElement('option');
	option.appendChild(document.createTextNode(" "));
	option.setAttribute("value", "");
	selectCommunes.appendChild(option);
	selectCommunes.disabled = true;
	selectCommunes.className = "select disable";
}

/**
 * fonction deblocCommune()
 * => 
 **/
function deblocCommune()
{
	selectCommunes.disabled = false;
	selectCommunes.className = "select";
}

/**
 * fonction resetCommune()
 * => 
 **/
function resetCommune()
{
	if(selectCommunes.hasChildNodes())
	{
		while(selectCommunes.hasChildNodes())
			selectCommunes.removeChild(selectCommunes.firstChild);
	}
}

/*******************************************************************
 * 					JS CONCERNANT LE NUMERO DE VOIE				   *
 *******************************************************************/

/**
 * fonction blocNumeroVoie()
 * => 
 **/
function blocNumeroVoie()
{
	inputNumeroVoie.value = "";
	inputNumeroVoie.disabled = true;
	inputNumeroVoie.className = "saisie disable";
}

/**
 * fonction deblocNumeroVoie()
 * => 
 **/
function deblocNumeroVoie()
{
	inputNumeroVoie.disabled = false;
	inputNumeroVoie.className = "saisie";
}


/*******************************************************************
 * 			JS CONCERNANT LE COMPLEMENT DU NUMERO DE VOIE		   *
 *******************************************************************/

/**
 * fonction blocComplementNumeroVoie()
 * => 
 **/
function blocComplementNumeroVoie()
{
	var tabOptions = selectComplementNumeroVoie.options;
	for(i=0; i<tabOptions.length; i++)
	{
		if(selectComplementNumeroVoie.options[i].value == "")
		{
			selectComplementNumeroVoie.selectedIndex = i;
			break;
		}
	}
	selectComplementNumeroVoie.disabled = true;
	selectComplementNumeroVoie.className = "select disable";
}

/**
 * fonction deblocComplementNumeroVoie()
 * => 
 **/
function deblocComplementNumeroVoie()
{
	selectComplementNumeroVoie.disabled = false;
	selectComplementNumeroVoie.className = "select";
}

/*******************************************************************
 * 			JS CONCERNANT LE CHAMP CHOIX DU TYPE DE VOIE		   *
 *******************************************************************/

/**
 * fonction blocTypeVoie()
 * => 
 **/
function blocTypeVoie()
{
	resetTypeVoie();
	var option = document.createElement('option');
	option.appendChild(document.createTextNode(" "));
	option.setAttribute("value", "");
	selectTypeVoie.appendChild(option);
	selectTypeVoie.disabled = true;
	selectTypeVoie.className = "select disable";
}

/**
 * fonction deblocTypeVoie()
 * => 
 **/
function deblocTypeVoie()
{
	selectTypeVoie.disabled = false;
	selectTypeVoie.className = "select";
}

/**
 * fonction resetTypeVoie()
 * => 
 **/
function resetTypeVoie()
{
	if(selectTypeVoie.hasChildNodes())
	{
		while(selectTypeVoie.hasChildNodes())
			selectTypeVoie.removeChild(selectTypeVoie.firstChild);
	}
}


/**
 * fonction chercherTypesVoie(insee)
 * =>
 **/
function chercherTypesVoie(insee)
{
	resetTypeVoie();
	resetVoie(true);
	
	if (isInsee(insee))
	{
		progressOn(loaderVoies,selectCommunes);
		var xhr;
		if (window.XMLHttpRequest) xhr = new XMLHttpRequest();
		else if (window.ActiveXObject) xhr = new ActiveXObject('Microsoft.XMLHTTP');
		else {alert('JavaScript : votre navigateur ne supporte pas les objets XMLHttpRequest...');return;}
		xhr.open('POST','/scripts/ajaxTypesVoie.php',true);
		xhr.onreadystatechange = function()
		{
			if(xhr.readyState == 4)
			{
				//traitement
				var reponse = xhr.responseXML;
				var elements = reponse.getElementsByTagName("marker");
				var errors = reponse.getElementsByTagName("error");
				progressOff(loaderVoies,selectCommunes); 
				afficherTypesVoie(elements,errors);
			}
		}
		xhr.setRequestHeader('Content-type','application/x-www-form-urlencoded');
		var data = 'inseevalue='+escape(insee);
		xhr.send(data);
	}
}

/**
 * fonction afficherTypesVoie(elements,errors)
 * =>
 **/
function afficherTypesVoie(elements,errors)
{
	if(elements.length > 0)
	{
		for(i=0; i<elements.length; i++)
		{
			var typeVoie = elements[i].getAttribute("typeVoie");
			var option = document.createElement('option');
			option.appendChild(document.createTextNode(typeVoie));
			option.setAttribute("value", typeVoie);
			selectTypeVoie.appendChild(option);
		}
	}
	else if(errors != null)
	{
		if(errors[0].getAttribute("type") == 'noResults')
		{
			resetAdresse();
			displayAlert("Nous n'avons trouvé aucune commune avec ce code postal. Le test ne pourra donc pas trouver les offres fibre optique et WiFi-Wimax disponibles sur votre zone. S'il s'agit d'une erreur de saisie, vous pouvez corriger ci-dessous.", alertZoneAdresse);
			inputCP.className = "saisie erreur";
			inputHiddenRivoli.focus(); // patch firefox gerant mal le focus
			inputCP.focus();
		}
	}
	
}


/*******************************************************************
 * 				JS CONCERNANT LE CHAMP VOIE						   *
 *******************************************************************/

/**
 * fonction blocVoie()
 * => 
 **/
function blocVoie()
{
	inputVoie.value = "";
	inputVoie.disabled = true;
	inputVoie.className = "saisie disable";
	resetDivSuggestions();
}

/**
 * fonction deblocVoie()
 * => 
 **/
function deblocVoie()
{
	inputVoie.disabled = false;
	inputVoie.className = "saisie";
}

/**
 * fonction resetVoie(resetValueVoie)
 * => 
 **/
function resetVoie(resetValueVoie)
{
	inputVoie.className = "saisie";
	infoInputRivoli.className = "obligatoireInput";
	if(resetValueVoie) inputVoie.value = "";
	setRivoli("");
	resetMessageErreur();
	resetDivSuggestions();
}

/**
 * fonction resetDivSuggestions()
 * =>
 **/
function resetDivSuggestions()
{
	divSuggestions.className = "masquer";
	if(divSuggestions.hasChildNodes())
	{
		while(divSuggestions.hasChildNodes())
			divSuggestions.removeChild(divSuggestions.firstChild);
	}
}

/**
 * fonction chercherVoies(insee,evenement)
 * =>
 **/
function chercherVoies(insee,typeVoie,nomVoie,evenement)
{
	resetVoie(false);

	if(nomVoie.length < 2) 
		return false;
	
	clearTimeout(timeout1);
	timeout1 = setTimeout(function()
	{
		var codeTouche = window.event ? evenement.keyCode : evenement.which;
		if(codeTouche != codeToucheEntree)
			launchAjaxVoies(insee,typeVoie,nomVoie);
		clearTimeout(timeout1);
	}
	,500);
}

/**
 * fonction launchAjaxVoies(insee)
 * =>
 **/
function launchAjaxVoies(insee,typeVoie,nomVoie)
{
	if (isInsee(insee))
	{
		progressOn(loaderVoies,inputVoie);
		var xhr;
		if (window.XMLHttpRequest) xhr = new XMLHttpRequest();
		else if (window.ActiveXObject) xhr = new ActiveXObject('Microsoft.XMLHTTP');
		else {alert('JavaScript : votre navigateur ne supporte pas les objets XMLHttpRequest...');return;}
		xhr.open('POST','/scripts/ajaxVoies.php',true);
		xhr.onreadystatechange = function()
		{
			if(xhr.readyState == 4)
			{
				//traitement
				var reponse = xhr.responseXML;
				var elements = reponse.getElementsByTagName("marker");
				var errors = reponse.getElementsByTagName("error");
				progressOff(loaderVoies,inputVoie);
				afficherVoies(elements,errors);
			}
		}
		xhr.setRequestHeader('Content-type','application/x-www-form-urlencoded');
		var data = 'inseevalue='+escape(insee)+'&typeVoievalue='+encodeURIComponent(typeVoie)+'&nomVoievalue='+encodeURIComponent(nomVoie);
		xhr.send(data);
	}
}

/**
 * fonction afficherVoies(elements,errors)
 * =>
 **/
function afficherVoies(elements,errors)
{
	resetVoie(false);
	if(elements.length > 0)
	{
		blocUl = document.createElement("ul");
		for(i=0;i<elements.length; i++)
		{
			var libelle = elements[i].getAttribute("libelle");
			var typeVoie = elements[i].getAttribute("typeVoie");
			var rivoli = elements[i].getAttribute("rivoli");
	
			var li = document.createElement('li');
			var lien = document.createElement('a');
			lien.setAttribute("href", "javascript:choisirVoie('"+libelle.replace(/'/g,"\\'")+"','"+typeVoie.replace(/'/g,"\\'")+"','"+rivoli+"');");
			var titleLien = (typeVoie != "") ? "choisir \""+typeVoie+" "+libelle+"\"" : "choisir \""+libelle+"\"";
			lien.setAttribute("title", titleLien);
			//lien.onclick = function choisirVoie(libelle,typeVoie,rivoli);
			lien.appendChild(document.createTextNode(typeVoie+" "+libelle));
			li.appendChild(lien);
			blocUl.appendChild(li);
		}
		divSuggestions.appendChild(blocUl);
		divSuggestions.className = "suggestions";
	}
	else if(errors != null)
	{
		if(errors[0].getAttribute("type") == 'tooManyResults')
		{
			displayAlert("Trop de résultats, Merci de préciser votre recherche avec plus de lettres ou en indiquant le type de voie par exemple.", alertZoneAdresse);
			infoInputRivoli.className = "erreurInput";
			inputVoie.className = "saisie erreur";
			inputHiddenRivoli.focus(); // patch firefox gerant mal le focus
			inputVoie.focus();
		}
		else if(errors[0].getAttribute("type") == 'noResults')
		{
			displayAlert("Aucun résultat trouvé. Vérifiez votre saisie (type de voie, nom exact...).", alertZoneAdresse);
			infoInputRivoli.className = "erreurInput";
			inputVoie.className = "saisie erreur";
			inputHiddenRivoli.focus(); // patch firefox gerant mal le focus
			inputVoie.focus();
		}
	}
}

/**
 * fonction choisirVoie(nom)
 * =>
 **/
function choisirVoie(nom,typeVoie,rivoli)
{
	inputVoie.value = nom;
	var tabOptions = selectTypeVoie.options;
	for(i=0; i<tabOptions.length; i++)
	{
		if(selectTypeVoie.options[i].value == typeVoie)
		{
			selectTypeVoie.selectedIndex = i;
			break;
		}
	}
	resetDivSuggestions();
	setRivoli(rivoli);
}

/**
 * fonction blocBoutonTester()
 * => 
 **/
function blocBoutonTester()
{
	tester.disabled = true;
	tester.src = "/media/boutons/tester-big-disable.png";
}


/**
 * fonction deblocBoutonTester()
 * => 
 **/
function deblocBoutonTester()
{
	if(ndOk && (adresseOk || inputCP.value == ""))
	{
		tester.disabled = false;
		tester.src = "/media/boutons/tester-big.png";
	}
}

/**
 * fonction boutonTesterEnCours()
 * => 
 **/
function boutonTesterEnCours()
{
	tester.src = "/media/boutons/tester-big-encours.png ";
	tester.disabled = true;
}

/**
 * fonction setRivoli(rivoli)
 * => 
 **/
function setRivoli(rivoli)
{
	inputHiddenRivoli.value = rivoli;
	if(inputHiddenRivoli.value != "")
	{
		adresseOk = true;
		infoInputRivoli.className = "valideInput";
		deblocBoutonTester();
	}
	else
	{
		adresseOk = false;
		blocBoutonTester();
	}
}
