// Fonction de blocage de la saisie si elle n'est pas conforme
function bloque(formulaire,champ) {
// Création d'un raccourci pour manipuler le champ
var controle = eval('document.' + formulaire + '.' + champ);
controle.focus(); // On se place sur le champ incriminé
controle.select(); // On sélectionne le contenu pour faciliter la reprise de la saisie
}
// Fonction de contrôle des champs vides
// Début du message qui sera affiché en cas d'un ou plusieurs champ(s) vide(s)
var mess = "Les champs suivants sont necessaires au traitement de votre demande :\n";
// Copie pour réinitialisation
var mess_init = "Les champs suivants sont necessaires au traitement de votre demande :\n";
// Variable marquant l'erreur (0 : tout va bien, 1 : blocage demandé)
var necessaire = 0;

function vide(formulaire,champ,alerte) {
var controle = eval('document.' + formulaire + '.' + champ); // Création d'un raccourci pour manipuler le champ à tester
// Si c'est un champ 'text'
if ( controle.type == 'text' ) {
// Et que la valeur du champ comporte moins de 1 caractère (vide)
if ( controle.value.length < 1 ) {
// On ajoute l'intitulé du champ dans le message d'erreur
mess += alerte;
mess += "\n";
// On marque qu'il ne faut pas valider le formulaire
necessaire = 1;
}
}
// Si c'est un champ de type mot de passe
if ( controle.type == 'password' ) {
if ( controle.value.length < 1 ) {
mess += alerte;
mess += "\n";
necessaire = 1;
}
}
// Si c'est un champ de type texte multilignes
if ( controle.type == 'textarea' ) {
if ( controle.value.length < 1 ) {
mess += alerte;
mess += "\n";
necessaire = 1;
}
}
// Si c'est une liste
if ( controle.type == 'select-one' ) {
// Si c'est le premier élément qui est sélectionnée (élément vide à indiquer dans le HTML)
if ( controle.options[0].selected ) {
mess += alerte;
mess += "\n";
necessaire = 1;
}
}
// Si c'est une case à cocher
if ( controle.type == 'checkbox' ) {
// Quand elle est cochée, l'état est 'true', ici on cherche l'inverse (false)
if (!controle.status) {
mess += alerte;
mess += "\n";
necessaire = 1;
}
}
}

// Fonction pour le test des boutons radio
function vide_radio(formulaire,champ,alerte) {
// Création d'un raccourci pour manipuler le champ à tester
var controle = eval('document.' + formulaire + '.' + champ);
// On déclare par défaut que les champs ne sont pas cochés,
var non = "hs";
for ( i = 0; i < controle.length; i++ ) {
// Si on trouve un bouton coché, on le marque
if (controle[i].status) {
non = "ok";
}
}
// Si on n'a pas marqué un champ comme 'coche' (ok)
if ( non != "ok" ) {
mess += alerte;
mess += "\n";
necessaire = 1;
}
}

// Fonction de validation du formulaire
function resultat(formulaire) {
// Si on a marqué qu'au moins un champ était vide
if ( necessaire == 1 ) {
// Affichage du message d'erreur avec tous les champs en erreur
alert(mess);
}
// Si aucun champ n'est vide
if ( necessaire == 0 ) {
var formu = eval('document.' + formulaire);
// Validation du formulaire
formu.submit();
}
// Quoi qu'il arrive, on ré-initialise le message d'erreur pour permettre un autre passage des tests
mess = mess_init;
necessaire = 0;
}

// Fonction de contrôle de validité de la saisie
// Création d'une variable pour marquer s'il y a incohérence de saisie ou pas
var probleme = 0;
function validite(formulaire,champ,format,mini,maxi) {
// Initialisation de la variable
probleme = 0;
// Les différents tests possibles :
// On affecte à la variable 'RE' le test d'expression régulière souhaité
// A : alphabétique
if ( format == "A" ) { RE = /^([A-Za-z]+[ ]*[-]*[A-Za-z]*)+$/;}
// AN : alphanumérique
if ( format == "AN" ) { RE = /^[A-Za-zàâäéèêëîïôùûç\s,'0-9\-]+$/;}
// N : numérique
if ( format == "N" ) { RE = /^\d+$/;}
// CP : code postal français (5 chiffres)
if ( format == "CP" ) { RE = /^\d{5}$/;}
// D : Date (xx/xx/xx ou xx/xx/xxxx ou xx-xx-xx ou xx-xx-xxxx)
if ( format == "D" ) { RE = /^\d{2}([\/]|[\-])+\d{2}([\/]|[\-])+\d{2}(\d{2})*$/;}
// EMAIL : email
if ( format == "EMAIL" ) { RE = /^[A-Za-z0-9\.\-_]+[@][A-Za-z0-9\-\.]+[\.][A-Za-z][A-Za-z][A-Za-z]?$/;}
// Création d'un raccourci pour manipuler le champ à tester
var controle = eval('document.' + formulaire + '.' + champ);
// On ne fera les tests que si le champ est rempli d'au moins un caractère (pas vide)
if (controle.value.length > 0) {
// Si on ne trouve pas dans le champ l'expression régulière recherchée
if (!RE.test(controle.value)) {
// Envoi d'une alerte
alert('Votre saisie est incorrecte.');
// On marque que la saisie n'est pas cohérente
probleme = 1;
}
// Tests de longueur du champ (nombre de caractères saisis)
// Si il a été spécifié '0', le test n'est pas effectué
if ( mini != 0 ) {
// Si la longueur de la saisie est inférieure au minimum demandé
if ( controle.value.length < mini ) {
// Envoi d'une alerte
alert('Vous devez saisir au moins ' + mini + ' caracteres.');
probleme = 1;
}
}
// Si la longueur de la saisie est supérieure au maximum demandé
if ( maxi != 0 ) {
if ( controle.value.length > maxi ) {
alert('Vous ne devez pas saisir plus de ' + maxi + ' caracteres.');
probleme = 1;
}
}
// Si on a marqué qu'il y avait un problème
if ( probleme == 1 ) {
// On active le blocage du champ
bloque(formulaire,champ);
}
}
}

// Fonction de vérification d'une plage de nombres (entre X et Y)
function check_num(formulaire,champ,plancher,plafond) {
// Création d'un raccourci pour manipuler le champ à tester
var controle = eval('document.' + formulaire + '.' + champ);
// Si la valeur de la saisie est inférieure au plancher demandé
if ( controle.value < plancher ) {
// Envoi d'une alerte
alert('Votre saisie ne doit pas etre inferieure a ' + plancher + '.');
// On active le blocage du champ
bloque(formulaire,champ);
}
// Si la valeur de la saisie est supérieure au plafond demandé
if ( controle.value > plafond ) {
alert('Votre saisie ne doit pas etre superieure a ' + plafond + '.');
bloque(formulaire,champ);
}
}

// Fonction pour vérifier la cohérence de deux saisies de mot de passe
// Cette fonction se déclenche à partir du second champ uniquement
function check_pw(formulaire,champ1,champ2) {
// Création d'un raccourci pour manipuler le champ à tester
var controle = eval('document.' + formulaire + '.' + champ1);
var controle = eval('document.' + formulaire + '.' + champ2);
// Création de deux raccourcis pour manipuler les champ à comparer
var prems = eval('document.' + formulaire + '.' + champ1);
var deuze = eval('document.' + formulaire + '.' + champ2);
// Si le premier champ n'est pas rempli
if (!prems.value) {
// Envoi d'une alerte
if ( controle.type == 'password' ) {
alert('Vous n\'avez pas saisi votre mot de passe');
}
if ( controle.type == 'text' ) {
alert('Vous n\'avez pas saisi votre adresse e-mail');
}
// On active le blocage du champ
bloque(formulaire,champ1);
}
// Si le premier champ est rempli
else {
// Si la saisie des deux champ est différente
if ( prems.value != deuze.value ) {
// Envoi d'une alerte selon le type de champ en référence
if ( controle.type == 'password' ) {
alert('La confirmation de votre mot de passe n\'est pas exacte.');
}
if ( controle.type == 'text' ) {
alert('La confirmation de votre adresse e-mail n\'est pas exacte.');
}
// Ré-initialisation des deux champs
deuze.value = "";
prems.value = "";
// On active le blocage du champ
bloque(formulaire,champ1);
}
}
}