/*
 * Petite collection de scripts
 * crées par Newel (http://www.newel.net)
 * dans le but de simplifier et
 * normaliser les vérifications
 * de formulaires.
 * lexsimon@fr.st
 */

function isWhiteSpace(c) {
    return (c == ' ' || c == '\n' || c == '\r' || c == 160);
}

function isEmpty(champ) {
    var chaine = champ.value;
    var l = chaine.length;
    var i = 0;
    while (i < l && isWhiteSpace(chaine.charAt(i))) i++; 
    if (i == l) {
       // champ.focus();
       return true;
    }
    return false;
}

function isInteger(valeur) {
   if (!isNaN(valeur) && valeur.indexOf('.') == -1 && valeur >= 0)
      return true;
   return false;
}

function isNonNullInteger(valeur) {
   return (isInteger(valeur) && valeur > 0);
}

function isAlpha(valeur, customAcceptedChars) {
   var custom = '';
   if (typeof(customAcceptedChars != 'undefined')) custom = customAcceptedChars;
   var expression = new RegExp('[^a-zA-Z'+custom+']');
   return !expression.test(valeur);
}

function isAlphaNumeric(valeur, customAcceptedChars) {
   var custom = '';
   if (typeof(customAcceptedChars != 'undefined')) custom = customAcceptedChars;
   var expression = new RegExp('[^a-zA-Z0-9'+custom+']');
   return !expression.test(valeur);
}

function verifDate(jour, mois, annee, datename) {
   if (isNaN(jour) || isNaN(mois) || isNaN(annee)) { // vérifie si les champs sont des entiers
      alert('La date '+datename+'fournie n\'est pas au bon format');
      return false;
   }
   var date = new Date(annee, mois-1, jour);
   if (date.getDate() != jour || date.getMonth() != (mois-1) || date.getFullYear() != annee) { // vérifie si bonne date
      alert('La date '+datename+'fournie n\'existe pas');
      return false;
   }
   return date.getTime();
}

function isMail(champ) {
    chaine = champ.value;
    var expr = /[a-z0-9\-.]+@[A-Za-z0-9][A-Za-z0-9\-]*[.][A-Za-z0-9\-]+/;
    if (expr.test(chaine)) {
	//champ.focus();
	return (chaine.indexOf('@') == chaine.lastIndexOf('@')); // on vérifie s'il y a un seul '@'
    }
    return false;
}

function addOption(select, id, text) {
    select.options[select.options.length] = new Option(text, id);
    select.selectedIndex = (select.options.length-1);
}

function formatNumber(champ, length) {
	while (champ.value.length < length) champ.value = "0"+champ.value;
}

function requiredText(champ, label) {
    if (isEmpty(champ)) {
	alert('Le champ \''+label+'\' est obligatoire');
	return false;
    }
    return true;
}

function requiredInteger(champ, label) {
    if (!requiredText(champ, label)) return false;
    if (!isInteger(champ.value)) {
	alert('Le champ \''+label+'\' doit être un entier');
	return false;
    }
    return true;
}

function requiredSelect(champ, label) {
    if (champ.selectedIndex < 1) {
	alert('Le champ \''+label+'\' est obligatoire');
	return false;
    }
    return true;
}
