/*
    Vérification des données d'un formulaire
    
    Auteur : Hubert Borderiou
    Révision : 1.0.1
    Date de la dernière révision : 17-04-2007


    Notes : 
    - 23/04/07 : ajout de typeLogin

*/


// APPELLE DE LA FONCTION :
// fieldOK(inobj, intype, innom, inmin, inmax, trim?)
// inobj : l'objet (ex : document.monform.prenom)
// intype : le type de l'objet à choisir dans la liste ci dessous (ex : typeNomPrenom)
// innom : le nom de l'objet pour le repérer dans les msg d'erreur (ex : Votre prénom)
// inmin : si le type est typeIntervalle la borne inf, sinon le nb de caractères min (si 0, champ facultatif)
// inmax : si le type est typeIntervalle la borne sup, sinon le nb de caractères max
// trim? : est à TRIM si on veut que la valeur soit trimé avant les tests, à NOTRIM sinon
//          le trim modifie la valeur du champ on enlevant les espaces avant et après

String.prototype.trim = function() { return this.replace(/^\s*|\s*$/g, '') };

var TRIM = "1";     // si on trim les espaces de la valeur avant de vérifier
var NOTRIM = "0";   // si on trim pas les espaces de la valeur

// //////////////////////////////////////////////////////////////////////////
// LES TYPES PROPOSÉS
var typeNomPrenom = "typeNomPrenom";        // nom et prénom
var typeIntervalle = "typeIntervalle";      // doit etre un nobre entre inmin et inmax
var typeEmail = "typeEmail";                // un mail nom@domain.net
var typeText = "typeText";                  // text quelconque
var typeDateDMY = "typeDateDMY";            // date au format dd/mm/yyyy
var typeLogin = "typeLogin";                // lettre et chiffres

// //////////////////////////////////////////////////////////////////////////
var erreur = "";    // variable globale erreur modifiée dans les fonctions
var erreur_typeIntervalle = "doit être un nombre dans l'intervalle : ";
// pour les types (sauf intervalle) il faut définir un msg d'erreur et une regexp
// nom prénom
var regexp_typeNomPrenom = /^['îêâûëüäïéàèç a-zA-Z\-\s ]+$/gi;
var erreur_typeNomPrenom = "seuls les caractères suivants sont permis : (a-z, A-Z), espace, petit trait (-),' îêâûëüäïéàèç";
// mail
var regexp_typeEmail = /^([a-zA-Z0-9_\-]+\.)*[a-zA-Z0-9_\-]+\@([a-zA-Z0-9_\-]+\.)+\w{2,4}$/gi;
var erreur_typeEmail = "doit être de type monnom@domain.com Les caractères autorisés sont : (a-z, A-Z), point, chiffres (0-9), petit trait (-), trait bas (_) et arobase (@).";
// type texte
var regexp_typeText = /.*/gi;
var erreur_typeText = "";
// date format dd/mm/yyyy
var regexp_typeDateDMY = /^\d\d\/\d\d\/\d\d\d\d$/;
var erreur_typeDateDMY = "doit être au format dd/mm/yyyy (ex : 01/05/2007)";
// type login
var regexp_typeLogin = /^[a-z0-9]*$/i;
var erreur_typeLogin = "seuls les caractères suivants sont permis : a-Z, A-Z, 0-9.";

function checkLongueur(invaleur, inmin, inmax) {
    erreur = "";
    if (inmin > 0) {
        erreur = " est un champ obligatoire. Il";
    }
    if (inmin == inmax) { 
        erreur += " doit contenir "+inmin+" caractères."; 
    }
    else { 
        erreur += " doit contenir au minimum "+inmin+" caractères, et au maximum "+inmax+" caractères.";
    }
    return (invaleur.length >= inmin && invaleur.length <= inmax);
}

function checkIntervalle(invaleur, inmin, inmax) {
    erreur = erreur_typeIntervalle+" ["+inmin+"-"+inmax+"]";
    return (invaleur <=inmax && invaleur >= inmin);
}


function checkFieldResult(inobj, intype, innom, inmin, inmax, intrim) {
    var valeur = inobj.value;
    
    // est ce que l'on trim la valeur ?
    if (intrim == TRIM) {
        valeur = valeur.trim();
        inobj.value = valeur;
    }
    
    // si c'est un nombre dans un intervalle : typeIntervalle
    if (intype == typeIntervalle) {
        return checkIntervalle(valeur, inmin, inmax);
    }
    
    // on regarde les contraintes sur la longueur
    if (!checkLongueur(valeur, inmin, inmax)) {
        return false;
    }
    
    // on regarde les autres contraintes
    // si on a une valeur (on peut avoir un champ vide à cet endroit)
    if (valeur.length > 0) {
        var maregexp = eval("regexp_"+intype);
        erreur = eval("erreur_"+intype);
        return valeur.match(maregexp);
    }
    // ici on peut avoir un champ vide
    else {
        return true;
    }
}


function fieldOK(inobj, intype, innom, inmin, inmax, intrim) {
    if (!checkFieldResult(inobj, intype, innom, inmin, inmax, intrim)) {
        alert("["+innom+"] : "+erreur);
        inobj.focus();
        if (inobj.nodeName.toUpperCase() == "INPUT") {
            inobj.select();
        }
        return false;
    }
    return true;
}
