/**
 * verif.js
 * 	Ensemble de fonctions permettant la vérification d'un Code postal, d'un tél, d'un entier, de la mise en majuscule de champ, etc, etc
 *	Ce fichier peut se remplir avec d'autres fonctions à condition qu'elles renvoient TRUE ou FALSE
 *
 * ToDoList :
 *	- Gérer l'internationalisation des fonctions...
 *
 * @author Dalias Christophe <christophe-d@hippocampe.net>
 * @author Paul Gregory <paul-gregory@hippocampe.net>
 *
 * Copyright (c) 2003 Hippocampe <info@hippocampe.net>
 **/


/**
 * Champ obligatoire
 *
 */
function alertRequiredField(captionField) {
	alert("Le champ '"+captionField+"' est obligatoire.");
}


/**
 * 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 siret
 *
 */
function checkFormSiret(siret) {
	/* Vérification du SIRET */
	if (!(/[0-9]{14}$/).test(siret.value)) {
		alert("Le champ SIRET doit contenir 14 chiffres.");
		return false;
	}
	return true;
}

/**
 * Vérifie un naf
 *
 */
function checkFormNaf(naf) {
	/* Vérification du NAF */
	if (!(/[0-9]{3}[A-Z]{1}$/).test(naf.value.toUpperCase())) {
		alert("Le code NAF doit contenir 3 chiffres et une lettre (ex: 722C).");
		return false;
	}
	return true;
}

/**
 * Vérifie les limites min et max spécifiées du champ, et
 * affiche une alerte le cas échéant.
 *
 * @param field Le champ à spécifier
 * @param bmin La borne min
 * @param bmax La borne max
 * @return TRUE si OK, FALSE sinon
 */
function checkBounds(field, bmin, bmax)
{
	if (field.value < bmin) {
		if (!confirm("Cette valeur est faible, êtes vous sûr de la saisie de ce chiffre ?")) {
			field.value = bmin;
			field.focus();
		}		
	} else if (field.value > bmax) {
		if (!confirm("Cette valeur est élevée, êtes vous sûr de la saisie de ce chiffre ?")) {
			field.value = bmax;
			field.focus();
		}		
	}
	
	return true;
}

 
/**
 * Vérifie si le champ est non vide
 * @param champ Le nom du champ
 * @param str Une chaine contenant le nom du champ pour l'alerte
 * @return True si le champ est rempli, False sinon
 */
function checkEmpty(champ, str) {
	b = (champ.value != "");	
	if (!b) {
		alert("Le champ " + str + " est obligatoire.");
		champ.focus();
	}
		
	return b;
}
 
 
/**
 * 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\-\.\_]+\.[a-z]+$/).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érifie la validité du champ : entier
 * @param champ Le nom du champ
 * @return True si le champ est bien rempli, False sinon
 */
function checkInt(champ) {	
	if (isNaN(champ.value) || (champ.value == "") || (champ.value.indexOf('.') != -1)) {
		alert("La valeur doit être un nombre entier.\nVeuillez la corriger.");
		champ.value = 0;

		if (champ.focus)
			champ.focus();

		return(false);
	}
	return(true);
}


/**
 * Vérifie la validité du champ : décimal
 * @param champ Le nom du champ
 * @return True si le champ est bien rempli, False sinon
 */
function checkDecimal(champ) {	
	if (isNaN(champ.value) || (champ.value == "")) {
		alert("La valeur doit être une valeur décimale.\nVeuillez la corriger.");
		champ.value = 0.00;

		if (champ.focus)
			champ.focus();
			
		return(false);
	}
	return(true);
}


/**
 * Mets en majuscule
 * @param champ Le nom du champ
 * @return True
 */
function setUpper(champ) {
	champ.value = champ.value.toUpperCase();
	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);
}


/**
 * 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 que la date 1 est inférieure à la date 2 et
 * affiche un message le cas échéant
 *
 * @param date1
 * @param date2
 * @param str Message d'alerte
 * @return True si OK, False sinon
 */
function compareDate(date1, date2, str) {
	var d1 = getTimestamp(date1);
	var d2 = getTimestamp(date2);
	
	if (d2 < d1) {
		alert(str);
		return false;
	}
	
	return true;
}


/**
 * Renvoit le timestamp d'une date
 *
 * @param champ
 * @return timestamp
 */
function getTimestamp(champ) {
	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++;
	}

	tabVals[tabVals.length] = parseInt(valBeforeSlash,10);

	if (tabVals[2] < 100) {
		tabVals[2] += (tabVals[2] > 79) ? 1900 : 2000;
	}
	
	return (tabVals[2] * 10000) + (tabVals[1] * 100) + tabVals[0];
}


/**
 * Vérifie la longueur du champ (pour les textaera où les maxlength ne fonctionnent pas)
 * @param champ Le nom du champ
 * @return True si la maxlength n'est pas atteinte
 */
function checkNotMaxLength(champ, maxlength) {
	if (champ.value.length >= maxlength) {
		alert("La taille maximale du champ de " + maxlength + " caractères est atteinte.\nVeuillez raccourcir le texte.");
		champ.focus();
		return(false);
	}
	return(true);
}

/*verifie si la case est cocher*/
function checkButtonRadio(field, str) 
{
	for (var i = 0; i < field.length; i++) {
    	if (field[i].checked) {
      		return true;
    	}
  	}
 	
	return false;
}

function fillCheckboxValue(fieldBox, fieldValue)
{
  var separateur= " ; ";
  
  fieldValue.value = "";
  j=0;
  
  for (var i = 0; i < fieldBox.length; i++) {
    if (fieldBox[i].checked) {
       	///fieldValue.value += /*(fieldValue.length > 0 ? ";" : "") + fieldBox[i].value + separateur.value;
		if (j > 0)
			fieldValue.value += separateur + fieldBox[i].value;
		else
			fieldValue.value += fieldBox[i].value;
		
   		j++;
	}
  }
}