/*
 * verif.js
 * Fonctions avancées de vérification des champs
 *
 * @author Christophe BUGUET <christophe-b@hippocampe.fr>
 * @author Nicolas PINCEMIN <nicolas@hippocampe.fr>
 * @copyright (c) 2003 Hippocampe <info@hippocampe.fr>
 */

var browser = 0;
var browserName = navigator.appName;
var browserVer = parseInt(navigator.appVersion);
var browserOS = 0;

if ((browserName == "Netscape") && (browserVer >=2))
	browser = 1;
else if ((browserName == "Microsoft Internet Explorer") && (browserVer >=4)) {
	browser = 2;
}


/**
 * Vérification qu'un radio button est sélectionné !
 *
 * @param champ L'objet à vérifier
 * @param nomChamp Le nom du champ
 */
function checkRadio(champ)
{
	var b_elementChecked = false;
	
	for (var i=0; i<champ.length; i++) {
		if (champ[i].checked)
			b_elementChecked = true;
       }
	if (!b_elementChecked) {
		alert("Veuillez choisir un métier");
		return false;
	}
		
	return true
}

/**
 * Vérifie un login, password
 *
 */
function checkFormLogin(login) {
	if (login.value.length == 0) {
		alert("Veuillez renseigner le champ identifiant.");
		return false;
	}
					
	if (!(/[A-Za-z0-9\-]+$/).test(login.value)) {
		alert("Le champ identifiant ne doit contenir que des lettres ou des chiffres.");
		return false;
	}

	return true;
}


/**
 * Vérifie un password
 *
 */
function checkFormPass(pass) {
	if (pass.value.length == 0) {
		alert("Veuillez renseigner le champ mot de passe.");
		return false;
	}
					
	if (!(/[A-Za-z0-9\-]+$/).test(pass.value)) {
		alert("Le champ mot de passe ne doit contenir que des lettres ou des chiffres.");
		return false;
	}

	return true;
}



/**
 * Vérifie si le champ est vide et affiche un message le cas échéant
 *
 * @param champ L'objet à vérifier
 * @param nomChamp Le nom du champ
 */
function checkEmpty(champ, nomChamp)
{
	if (champ.value.length == 0) {
		alert("Le champ " + nomChamp + " est obligatoire.");
		champ.focus();
		return false;
	}
	
	return true;
}

/**
 * Vérifie si le champ est vide et affiche un message le cas échéant
 *
 * @param champ L'objet à vérifier
 * @param nomChamp Le nom du champ
 */
function checkMotsClefs(champ, nomChamp)
{
	if (champ.value.length == 0) {
		alert("Le champ " + nomChamp + " est obligatoire.");
		champ.focus();
		return false;
	}
	
	return true;
}

/**
 * Vérifie si le champ est vide et affiche un message le cas échéant
 *
 * @param champ L'objet à vérifier
 * @param nomChamp Le nom du champ
 */
function checkSelected(champ, nomChamp)
{
	var i=0;
	var sortie=0;
	while (i<champ.length && sortie==0) {
		if (browser==2){
			if (champ.item(i).selected){
				sortie=1;
			}
		} else {
			if (champ[i].selected){
				sortie=1;
			}
		}
		i++;
	}
	if (sortie==0) {
		alert("Le champ " + nomChamp + " est obligatoire.");
		return false;
	}
	
	return true;

}

/**
 * Vérification d'une date sous la forme jj/mm/aa
 * @param champ Le nom du champ
 * @return True si le champ est bien rempli, False sinon
 */
function checkDate(champ) {
	// Creation d'un tableau de valeurs
	// tabVal[0] : jour
	// tabVal[1] : mois
	// tabVal[2] : annee
	var i = 0;
	var numSlashes = 0;
	var valBeforeSlash = "";
	var tabVals = new Array();
	var nbVals = 0;
	while (i < champ.value.length) {
		var car = champ.value.substring(i, i+1);
		if (car == "/") {
			tabVals[nbVals++] = parseInt(valBeforeSlash,10);
			valBeforeSlash = "";
		}
		else {
			valBeforeSlash += car;
		}
			i++;
	}

	/* Ajout du dernier élément du tableau (l'année)
	 * Si l'année est < à 50, on suppose que c'est 20xx
	 * Si l'année est > à 50, on suppose que c'est en 19xx
	 */	
	tabVals[tabVals.length] = parseInt(valBeforeSlash,10);
	ajoutSiecleAnnee = ( parseInt(valBeforeSlash,10) < 50 ) ? 2000 : parseInt(valBeforeSlash,10)+1900;
			
	// Si le champ ne contient pas 2 caractères '/' ou si la date tappé par l'utilisateur fait plus de 8 caractères (jj/mm/aa):
	if (tabVals.length != 3 || champ.value.length > 10) {
		alert("Le format de date indiqué est incorrect.\nVeuillez le corriger.");
		champ.focus();
		return(false);
	}
	
	// Vérification de la validité des valeurs du tableau
	var j = 0;
	while (j < tabVals.length) {
		if (isNaN(tabVals[j])) {
			alert("La date indiquée est incorrecte.\nVeuillez la corriger.");
			champ.focus();
			return(false);
		}
		j++;
	}
	
	// Verification que la date existe et est valable :
	var bissec = (((tabVals[2] % 4 == 0) && (tabVals[2] % 100 != 0)) || (tabVals[2] % 1000 == 0));
	var tabMonths = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
	if (bissec)
		tabMonths[1]++;
	
	if ((tabVals[1] < 1) || (tabVals[1] > 12) || (tabVals[0] < 1) || (tabVals[0] > tabMonths[tabVals[1]-1])) {
		alert("La date indiquée n'existe pas.\nVeuillez la corriger.");
		champ.focus();
		return(false);
	}

	return(true);
}

/**
 * Vérifie de l'email : on vérifie la présence du @ et du .
 * @param champ Le nom du champ
 * @return True si le champ est bien rempli, False sinon
 */
function checkEmail(champ) {
	// Cible du FAF.SAB : Adresses e-mail de domaines en fr, et domaines non associés à un pays
	if (!(/[A-Za-z0-9\-\.\_]+\@[A-Za-z0-9\-\.\_]+\.(fr|be|com|net|org|info|biz)$/).test(champ.value)) {
		alert("Le format de l'adresse e-mail indiquée n'est pas correct.\nVeuillez le rectifier.");
		champ.focus();
		return false;
	}
	
	return true;
}
					
 
/**
 * Vérifie le cp sous la forme "12345"
 * @param champ Le nom du champ
 * @return True si le champ est bien rempli, False sinon
 */
function checkCP(champ) {
	if (isNaN(champ.value) || (champ.value.length != 5) || (champ.value.indexOf('.') != -1)) {
		alert("Le code postal indiqué est incorrect.\nVeuillez le corriger.");
		champ.focus();
		return(false);
	}
	return(true);
}

/**
 * Vérification d'un numéro de téléphone en FRANCE sous la forme : 014455667788
 * @param champ Le nom du champ
 * @param type Le type du champ ("téléphone" ou "fax")
 * @return True si le champ est bien rempli, False sinon
*/
function checkTel(champ, type) {
	var formatOk	= isNaN(champ.value) || champ.value.indexOf('.') != -1;
	var longueurOk 	= champ.value.length != 10
	
	if (formatOk || longueurOk) {
		alert("Le format du numéro de " + type + " saisi est invalide. Le format correct contient 10 chiffres attachés.\n");
		champ.focus();
		return(false);
	}
	
	return(true);
}