/****************************************
checkField.js
Controle de validité des champs saisis (entier, numérique, date)
Site web Perval 2006
Auteur : E. Martin
*****************************************/
var globalvar;

function isDepOuCodePostal(field)
/*	Cette fonction vérifie que le champ "field" contient un numéro de département ou un code postal
	formattée "DA" ou "DADDD" (D=décimal A=Alphanumérique)
	Retourne un texte explicatif en cas d'erreur.

Paramètre :
- field :	champ à vérifier
*/
{
	var errorMsg = "";
	var cpStr = field.value

	if (cpStr != "")
	{
		if ((cpStr.length != 2) && (cpStr.length != 5))
			errorMsg = "Vous devez saisir un numéro de département sur 2 caractères, ou un code postal sur 5 caractères";

		for (var i = 0 ; i < cpStr.length ; i++)
		{
			c = cpStr.charAt(i);
			if (((c < "0") || (c > "9")) && (c != ','))
			{
				if ((i == 1) && (cpStr.charAt(0) == 2))
				{
					/*	Cas de la corse 2A et 2B :	*/
					if ((c.toLowerCase() != "a") && (c.toLowerCase() != "b"))
						errorMsg = "Vous devez saisir un numéro de département ou un code postal";
				}
				else
					errorMsg = "Vous devez saisir un numéro de département ou un code postal";
			}
		}
	}
	return errorMsg;
}

function isDate(field)

/*	Cette fonction vérifie que le champ "field" contient une date
	formattée "JJ/MM/AAAA" ou "MM/AAAA" ou "AAAA".
	Retourne un texte explicatif en cas d'erreur.

Paramètre :
- field :	champ à vérifier
*/

{
	var errorMsg = "";
	var dateStr = field.value

	if (dateStr != "")
	{
		var minYear = 1980;
		var today = new Date();
		var maxYear = today.getFullYear();
		var strYear = "";
		var strMonth = "";
		var strDay = "";

		var posSlash = dateStr.indexOf("/");
		var posLastSlash = dateStr.lastIndexOf("/");

		if (posSlash == -1)						/*	Année seule (AAAA)	*/
			strYear = dateStr;
		else if (posSlash == posLastSlash)		/*	Mois + Année (MM/AAAA)	*/
		{
			strMonth = dateStr.substring(0, posSlash);
			strYear = dateStr.substring(posSlash + 1);
		}
		else									/*	Jour + Mois + Année (JJ/MM/AAAA)	*/
		{
			strDay = dateStr.substring(0, posSlash);
			strMonth = dateStr.substring(posSlash + 1, posLastSlash);
			strYear = dateStr.substring(posLastSlash + 1);
		}

		var intDay = parseInt(strDay, 10);
		var intMonth = parseInt(strMonth, 10);
		var intYear = parseInt(strYear, 10);

	//	alert("Jour : " + intDay + "\nMois : " + intMonth + "\nAnnée : " + intYear);

		/*	Controle du jour :	*/
		if (strDay != "")
		{
			if (strDay.length > 2 || isNaN(intDay))
				errorMsg = "Vous devez saisir le numéro du jour sur 1 ou 2 chiffres";
			else if (intDay < 1 || intDay > 31)
				errorMsg = "Vous devez saisir un numéro de jour compris entre 1 et 31";
		}
		/*	Controle du mois :	*/
		if (strMonth != "")
		{
			if (strMonth.length > 2 || isNaN(intMonth))
				errorMsg = "Vous devez saisir le numéro du mois sur 1 ou 2 chiffres";
			else if (intMonth < 1 || intMonth > 12)
				errorMsg = "Vous devez saisir un numéro de mois compris entre 1 et 12";
		}
		/*	Controle de l'année :	*/
		if (isNaN(intYear))
			errorMsg = "Vous devez saisir une valeur numérique pour la date";
		else if (strYear.length != 4)
			errorMsg = "Vous devez saisir l'année sur 4 chiffres";
		else if (intYear < minYear)
			errorMsg = "Vous devez saisir une année postérieure ou égale à " + minYear;
		else if (intYear > maxYear)
			errorMsg = "Vous devez saisir une année antérieure ou égale à " + maxYear;
	}

	return errorMsg;
}


function isDateAv(field)

/*	Cette fonction vérifie que le champ "field" contient une date
	formattée "JJ/MM/AAAA" et qui doit être :
	- postérieure à la date du jour moins 3 mois
	- antérieure ou égale à aujourd'hui
	Retourne un texte explicatif en cas d'erreur.

Paramètre :
- field :	champ à vérifier
*/

{
	var errorMsg = "";
	var dateStr = field.value

	if (dateStr !== "")
	{
		/*	Vérification validité format date :	*/

		var today = new Date();
		var maxYear = today.getFullYear();
		var minYear = maxYear - 1;
		var strYear = "";
		var strMonth = "";
		var strDay = "";

		var posSlash = dateStr.indexOf("/");
		var posLastSlash = dateStr.lastIndexOf("/");

		if ((posSlash === -1) || (posSlash === posLastSlash))
		{
		/*	Année seule (AAAA) ou Mois + Année (MM/AAAA) :	*/
			errorMsg += "Vous devez saisir la date au format JJ/MM/AAAA...";
			return errorMsg;
		}
		/*	Jour + Mois + Année (JJ/MM/AAAA) :	*/
		strDay = dateStr.substring(0, posSlash);
		strMonth = dateStr.substring(posSlash + 1, posLastSlash);
		strYear = dateStr.substring(posLastSlash + 1);
		var intDay = parseInt(strDay, 10);
		var intMonth = parseInt(strMonth, 10);
		var intYear = parseInt(strYear, 10);

		/*	Controle du jour :	*/
		if (strDay !== "")
		{
			if (strDay.length !== 2 || isNaN(intDay))
				errorMsg += "Vous devez saisir le numéro du jour sur 2 chiffres\n";
			else if (intDay < 1 || intDay > 31)
				errorMsg += "Vous devez saisir un numéro de jour compris entre 1 et 31\n";
		}
		/*	Controle du mois :	*/
		if (strMonth !== "")
		{
			if (strMonth.length !== 2 || isNaN(intMonth))
				errorMsg += "Vous devez saisir le numéro du mois sur 2 chiffres\n";
			else if (intMonth < 1 || intMonth > 12)
				errorMsg += "Vous devez saisir un numéro de mois compris entre 1 et 12\n";
		}
		/*	Controle de l'année :	*/
		if (isNaN(intYear))
			errorMsg += "Vous devez saisir une valeur numérique pour la date\n";
		else if (strYear.length != 4)
			errorMsg += "Vous devez saisir l'année sur 4 chiffres\n";
		else if (intYear < minYear)
			errorMsg += "Vous devez saisir une année postérieure ou égale à " + minYear + "\n";
		else if (intYear > maxYear)
			errorMsg += "Vous devez saisir une année antérieure ou égale à " + maxYear + "\n";


		/*	Vérification : date comprise entre il y a 3 mois et aujourd'hui ? :	*/
		if (errorMsg === "")	/*	Si la date a passé les controles de validité ci-dessus	*/
		{
			/*	Nombre de ms par trimestre (càd 93 jours) :	*/
			var nbMsTrim = 1000 * 60 * 60 * 24 * 93;

			/*	Calcul borne haute (aujourd'hui à minuit) :	*/
			var todayMidnight = new Date(today.getFullYear(), today.getMonth(), today.getDate(), 23, 59, 59);
			var maxMsTime = todayMidnight.getTime();

			/*	Calcul borne basse (aujourd'hui - 3 mois) :	*/
			var minMsTime = maxMsTime - nbMsTrim;

			/*	Calcul date saisie :	*/
			var dateComp = new Date(intYear, intMonth - 1, intDay);
			var msDateComp = dateComp.getTime();

			/*	Tests : */
			if (msDateComp < minMsTime)
				errorMsg += "Vous devez saisir une date de compromis datant de moins de 3 mois...\n";
			else if (msDateComp > maxMsTime)
				errorMsg += "Vous devez saisir une date de compromis antérieure ou égale à aujourd'hui...\n";
		}
	}

	return errorMsg;
}



function isFullDate(field)

/*	Cette fonction vérifie que le champ "field" contient une date formattée "JJ/MM/AAAA".
	Retourne un texte explicatif en cas d'erreur.

Paramètre :
- field :	champ à vérifier
*/

{
	var errorMsg = "";
	var dateStr = field.value

	if (dateStr != "")
	{
		var minYear = 1980;
		var today = new Date();
		var maxYear = today.getFullYear();
		var strYear = "";
		var strMonth = "";
		var strDay = "";

		var posSlash = dateStr.indexOf("/");
		var posLastSlash = dateStr.lastIndexOf("/");

		if ((posSlash == -1) || (posSlash == posLastSlash))
		{
		/*	Année seule (AAAA) ou Mois + Année (MM/AAAA) :	*/
			errorMsg = "Vous devez saisir la date au format JJ/MM/AAAA...";
			return errorMsg;
		}
		/*	Jour + Mois + Année (JJ/MM/AAAA) :	*/
		strDay = dateStr.substring(0, posSlash);
		strMonth = dateStr.substring(posSlash + 1, posLastSlash);
		strYear = dateStr.substring(posLastSlash + 1);
		var intDay = parseInt(strDay, 10);
		var intMonth = parseInt(strMonth, 10);
		var intYear = parseInt(strYear, 10);

		/*	Controle du jour :	*/
		if (strDay != "")
		{
			if (strDay.length != 2 || isNaN(intDay))
				errorMsg = "Vous devez saisir le numéro du jour sur 2 chiffres";
			else if (intDay < 1 || intDay > 31)
				errorMsg = "Vous devez saisir un numéro de jour compris entre 1 et 31";
		}
		/*	Controle du mois :	*/
		if (strMonth != "")
		{
			if (strMonth.length != 2 || isNaN(intMonth))
				errorMsg = "Vous devez saisir le numéro du mois sur 2 chiffres";
			else if (intMonth < 1 || intMonth > 12)
				errorMsg = "Vous devez saisir un numéro de mois compris entre 1 et 12";
		}
		/*	Controle de l'année :	*/
		if (isNaN(intYear))
			errorMsg = "Vous devez saisir une valeur numérique pour la date";
		else if (strYear.length != 4)
			errorMsg = "Vous devez saisir l'année sur 4 chiffres";
		else if (intYear < minYear)
			errorMsg = "Vous devez saisir une année postérieure ou égale à " + minYear;
		else if (intYear > maxYear)
			errorMsg = "Vous devez saisir une année antérieure ou égale à " + maxYear;
	}

	return errorMsg;
}


function isFloat(field)

/*	Cette fonction vérifie que le champ "field" contient une valeur
	numérique "flottante".
	Retourne un texte explicatif en cas d'erreur.

Paramètre :
- field :	champ à vérifier
*/

{
	var errorMsg = "";
	var floatStr = field.value

	if (floatStr != "")
	{
		var c = floatStr.charAt(0);
		if (((c < "0") || (c > "9")) && (c != "+") && (c != "-"))
			errorMsg = "Vous devez saisir une valeur numérique décimale";
		else
		{
			for (var i = 1 ; i < floatStr.length ; i++)
			{
				c = floatStr.charAt(i);
				if (((c < "0") || (c > "9")) && (c != ','))
					errorMsg = "Vous devez saisir une valeur numérique décimale";
			}
		}
	}

	return errorMsg;
}


function isInt(field)

/*	Cette fonction vérifie que le champ "field" contient une valeur
	numérique "entière".
	Retourne un texte explicatif en cas d'erreur.

Paramètre :
- field :	champ à vérifier
*/

{
	var errorMsg = "";
	var intStr = field.value

	if (intStr != "")
	{
		var c = intStr.charAt(0);
		if (((c < "0") || (c > "9")) && (c != "+") && (c != "-"))
			errorMsg = "Vous devez saisir une valeur numérique entière";
		else
		{
			for (var i = 1 ; i < intStr.length ; i++)
			{
				c = intStr.charAt(i);
				if ((c < "0") || (c > "9"))
					errorMsg = "Vous devez saisir une valeur numérique entière";
			}
		}
	}
	return errorMsg;
}


function checkForm(formName, action, path)

/*	Cette fonction vérifie que tous les champs obligatoires du formulaire
	formName sont bien remplis.
	Soumet (submit) le formulaire si c'est le cas, affiche une alerte dans
	le cas contraire.

Paramètres :
- formName :	nom du formulaire à vérifier (plusieurs noms de formulaires
				peuvent éventuellement être spécifiés ici, séparés par des tirets)
- action :		paramètre "action" à passer tel quel au script PHP après le submit
- path :		paramètre "path" à passer tel quel au script PHP après le submit
*/

{
	var errorMsg = "";
	var field;
	formList = formName.split("-");

	for (var j = 0; j < formList.length; j++)
	{
		if(formList[j] != '') {
			nomForm = formList[j];
			nomFonctionValidate = 'validateF' + nomForm.substring(1);
			errorMsg = errorMsg + eval(nomFonctionValidate + '()');
		}
	}

	var specifErrorMsg = '';
	try {
		specifErrorMsg = eval('specifValidateForm()');
		if (specifErrorMsg != '') {
			errorMsg = errorMsg + specifErrorMsg;
		}
	} catch (e) {
		// la fonction de validation spécifique n'existe pas
	}

	if (errorMsg != "")
	{
		alert (errorMsg);
	}
	else
	{
		document.forms[0].action.value = action;
		if (path != "")
			document.forms[0].path.value = path;
//		MM_showHideLayers('patience','','show');
		if (action == 'faireAffichageRapportPdf')
			document.forms[0].target = '_blank';
		else
			document.forms[0].target = '_self';

		document.forms[0].submit();
	}
}

function validateRequired(objetChamp) {
/*	Cette fonction vérifie que le champ objetChamp soit bien renseigné

Paramètres :
- objetChamp :	le champ à valider
*/
	var valid = false;
	// Cas des radio et checkbox
	if ((objetChamp.length > 0) && (objetChamp.type != 'select-one') && (objetChamp.type != 'select-multiple')) {
		for (var i = 0; i < objetChamp.length; i++) {
			if(objetChamp[i].checked == true){
				valid = true;
				break;
			}
		}
	// Tous les autres cas
	} else {
		switch (objetChamp.type) {
			case 'text':
			case 'password':
			case 'hidden':
			case 'textarea':
				if (objetChamp.value != '') {
					valid = true;
				}
				break;
			case 'select-one':
				if (objetChamp.selectedIndex > 0) {
					valid = true;
				}
				break;
			case 'select-multiple':
				for (var i = 0; i < objetChamp.length; i++) {
					if(objetChamp.options[i].selected == true){
						valid = true;
						break;
					}
				}
				break;
		}
	}
	return valid;
}

