/****************************
 * formulaire_contact.js : traitements JavaScript du formulaire de contact du test d'éligibilité
 ****************************/

// variables globales
var codeToucheEntree = 13;
var ndLength = 10;
var ndLengthWithSep = 14;
var alertZone1;
var alertZone2 ;
var inputCPhone;
var inputCNom;
var inputEPhone;
var inputENom;
var inputEPrenom;
var inputEObjet;
var inputEEmail;
var inputEMessage;

/**
 * fonction loadPageDefault()
 * => code devant être exécuté au chargement de la page
 **/
function loadPageDefault()
{
	alertZone1 = findObject('alert_zone1'); // div pour les messages d'erreur de la demande de contact
	alertZone2 = findObject('alert_zone2'); // div pour les messages d'erreur de l'envoi de mail
	inputCPhone = findObject('contact_phone'); // input numéro téléphone
	inputCNom = findObject('contact_nom'); // input nom
	inputEPhone = findObject('email_phone'); // input numéro téléphone
	inputENom = findObject('email_nom'); // input nom
	inputEPrenom = findObject('email_prenom'); // input prenom
	inputEObjet = findObject('email_objet'); // input motif
	inputEEmail = findObject('email_mail'); // input mail
	inputEMessage = findObject('email_message'); // input commentaire
}

/**
 * fonction displayAlert(msg)
 * => afficher un message d'erreur au-dessus du formulaire
 * msg (string) = message contextuel à afficher
 **/
function displayAlert(msg,alertZone)
{
	resetMessageErreur();
	var paragraphe = document.createElement("p");
	paragraphe.className = "erreur";
	paragraphe.appendChild(document.createTextNode(msg));
	alertZone.className = "alerte";
	alertZone.appendChild(paragraphe);
}


/**
 * fonction resetMessageErreur()
 * => remise à zéro de la zone de messages d'erreur du formulaire
 **/
function resetMessageErreur()
{

	// suppression messages d'erreur
	alertZone1.className = 'visible';
	if(alertZone1.hasChildNodes())
	{
		while(alertZone1.hasChildNodes())
			alertZone1.removeChild(alertZone1.firstChild);
	}
	alertZone2.className = 'visible';
	if(alertZone2.hasChildNodes())
	{
		while(alertZone2.hasChildNodes())
			alertZone2.removeChild(alertZone2.firstChild);
	}
}

/**
 * fonction resetTelephone()
 * => remise à zéro de la partie "numéro de téléphone" du formulaire
 **/
function resetTelephone(inputTel)
{
	inputTel.className = "saisie"; // style par défaut sur champ téléphone
	inputTel.maxLength = ndLengthWithSep; // maxlength large pour le champ téléphone
	resetMessageErreur();
}

/**
 * fonction resetChamp()
 * => remise à zéro d'un champ
 **/
function resetChamp(champ)
{
	champ.className = "saisie"; // style par défaut sur champ texte
	resetMessageErreur();
}

/**
 * fonction gererModifLigne(nd,evenement)
 * => en fonction de l'évènement intercepté sur le champ input du n° de ligne, décide quelle action effectuer
 * inputTel (input) = numéro de ligne (champ input)
 * evenement = évènement intercepté
 **/
function gererModifLigne(inputTel,evenement,alertZone,phoneStrict)
{
	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(inputTel,false,alertZone,phoneStrict);
}

/**
 * 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(inputTel,termine,alertZone,phoneStrict)
{
	nd = inputTel.value;
	resetTelephone(inputTel);
	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 à tester doit comporter exactement 10 chiffres (format 0123456789).";

	// cas [A] : numéro de ligne pouvant être testé / rappelé
	if (isTelephone(nd,phoneStrict))
	{
		if (nd.length == ndLength) inputTel.maxLength = ndLength;
		return true;
	}

	// cas [B] : formulaire validé mais erreur
	if (termine)
	{
		if (nd == "") displayAlert(erreurChampVide,alertZone); // champ vide
		else if (!isTelephoneComplete(nd)) displayAlert(erreurChampIncomplet,alertZone); // saisie incomplète
		else if (phoneStrict && !startsLikeTelephone(nd,true)) displayAlert(erreurTypeNumLigne,alertZone); // numéro fixe attendu
		else displayAlert(erreurFormatNumLigne,alertZone); // saisie complète mais non valide
		inputTel.className = "saisie erreur";
	}

	// cas [C] : formulaire non validé mais numéro de ligne d'ores-et-déjà invalide
	else if (!startsLikeTelephone(nd,false) || (phoneStrict && !startsLikeTelephone(nd,true)))
	{
		startsLikeTelephone(nd,false) ?	displayAlert(erreurTypeNumLigne,alertZone) : displayAlert(erreurFormatNumLigne,alertZone);
		inputTel.className = "saisie erreur";
	}

	return false;
}

/**
 * fonction verifierChampsTexte(inputTexte)
 * => vérification d'un champs texte qui ne doit pas etre vide
 * texte (string) = texte saisi dans le champ input
 * nomDuChamp (string) = intitulé du champ tésté
 **/
function verifierChampTexte(inputTexte,alertZone)
{
	resetChamp(inputTexte);

	if (inputTexte.value == "")
	{
		inputTexte.className = "saisie erreur";
		displayAlert("Un champ obligatoire n'a pas été complété.",alertZone);
		return false;
	}

	return true;
}

/**
 * fonction verifierMotif()
 * => vérification sur le motif (un choix doit etre fait)
 **/
function verifierMotif()
{
	resetChamp(inputEObjet);

	if(inputEObjet.value == "")
	{
		inputEObjet.className = "saisie erreur";
		displayAlert("Merci de sélectionner le motif de votre demande dans la liste déroulante.",alertZone2);
		return false;
	}
	return true;
}

/**
 * fonction verifierMail()
 * => vérification sur le mail
 **/
function verifierMail()
{
	resetChamp(inputEEmail);

	if(!emailok(inputEEmail))
	{
		inputEEmail.className = "saisie erreur";
		displayAlert("L'adresse e-mail saisie n'est pas valide.",alertZone2);
		return false;
	}
	return true;
}

/**
 * fonction validForm1(elm)
 * => vérifie que le formulaire de demande de contact est correctement complété
 **/
function validForm1(elm)
{
	// vérif du nom
	if (!verifierChampTexte(inputCNom,alertZone1,false)) return false;
	// vérif saisie zone numéro ligne
	if (!verifierLigne(inputCPhone,true,alertZone1,false)) return false;

	return true;
}


/**
 * fonction validForm2(elm)
 * => vérifie que le formulaire d'envoie de mail au webmaster est correctement complété
 **/
function validForm2(elm)
{
	//verif du motif
	if (!verifierMotif()) return false;
	// vérif du nom
	if (!verifierChampTexte(inputENom,alertZone2)) return false;
	// vérif du prenom
	if (!verifierChampTexte(inputEPrenom,alertZone2)) return false;
	//verif de l'email
	if (!verifierMail()) return false;
	// vérif saisie zone numéro ligne
	if (inputEPhone.value != "" && !verifierLigne(inputEPhone,true,alertZone2,true)) return false;
	// vérif du message
	if (!verifierChampTexte(inputEMessage,alertZone2)) return false;
	return true;
}