// Fonction de blocage de la saisie si elle n'est pas conforme
function bloque(formulaire,champ) 
{
  // Creation d'un raccourci pour manipuler le champ
  var controle = eval('document.' + formulaire + '.' + champ);
  
  // On se place sur le champ incrimine
  controle.focus();
  
  // On selectionne le contenu pour faciliter la reprise de la saisie
  controle.select();
}


// Fonction de controle des champs vides

// Debut du message qui sera affiche 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 reinitialisation
var mess_init = "Les champs suivants sont necessaires au traitement de votre demande :\n";

// Variable marquant l'erreur (0 : tout va bien, 1 : blocage demande)
var necessaire = 0;

function vide(formulaire,champ,alerte) 
{
  // Creation d'un raccourci pour manipuler le champ a tester
  var controle = eval('document.' + formulaire + '.' + champ);
  
  // Si c'est un champ 'text'
  if ( controle.type == 'text' ) 
  {
    // Et que la valeur du champ comporte moins de 1 caractere (vide)
    if ( controle.value.length < 1 ) 
    {
      // On ajoute l'intitule 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 element qui est selectionne (element vide a indiquer dans le HTML)
		if ( controle.options[0].selected ) 
    {
		mess += alerte;
		mess += "\n";
		necessaire = 1;
		}
	}

  // Si c'est une case a cocher
	if ( controle.type == 'checkbox' ) 
  {
    // Quand elle est cochee, l'etat 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) 
{
  // Creation d'un raccourci pour manipuler le champ a tester
	var controle = eval('document.' + formulaire + '.' + champ);

  // On declare par defaut que les champs ne sont pas coches,
	var non = "hs";
	for ( i = 0; i < controle.length; i++ ) 
  {
    // Si on trouve un bouton coche, on le marque
  	if (controle[i].status) 
    {
  		non = "ok";
  	}
  }

  // Si on n'a pas marque 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 marque qu'au moins un champ etait 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 re-initialise le message d'erreur pour permettre un autre passage des tests
	mess = mess_init;
	necessaire = 0;
}


// Fonction de controle de validite de la saisie
// Creation d'une variable pour marquer s'il y a incoherence de saisie ou pas
var probleme = 0;

function validite(formulaire,champ,format,mini,maxi) 
{
  // Initialisation de la variable
  probleme = 0;
  
  // Les differents tests possibles :
  // On affecte a la variable 'RE' le test d'expression reguliere souhaite
  //	A	: alphabetique
  if ( format == "A" ) { RE = /^([A-Za-z]+[ ]*[-]*[A-Za-z]*)+$/; }
  
  //	AN	: alphanumerique
  if ( format == "AN" ) { RE = /^[A-Za-zàâäéèêëîïôùûç\s,'0-9\-]+$/; }
  
  //	N	: numerique
  if ( format == "N" ) { RE = /^\d+$/;}
  
  //	CP	: code postal francais (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]?$/;}
  
  // Creation d'un raccourci pour manipuler le champ a tester
  var controle = eval('document.' + formulaire + '.' + champ);
  
  // On ne fera les tests que si le champ est rempli d'au moins un caractere (pas vide)
  if (controle.value.length > 0) 
  {
    // Si on ne trouve pas dans le champ l'expression reguliere recherchee
    if (!RE.test(controle.value)) 
    {
      // Envoi d'une alerte
      alert('Votre saisie est incorrecte.');
    // On marque que la saisie n'est pas coherente
    probleme = 1;
    }
    // Tests de longueur du champ (nombre de caracteres saisis)
    // Si il a ete specifie '0', le test n'est pas effectue
    if ( mini != 0 ) 
    {
      // Si la longueur de la saisie est inferieure au minimum demande
      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 superieure au maximum demande
    if ( maxi != 0 ) 
    {
      if ( controle.value.length > maxi ) 
      {
        alert('Vous ne devez pas saisir plus de ' + maxi + ' caracteres.');
        probleme = 1;
      }
    }
    // Si on a marque qu'il y avait un probleme
    if ( probleme == 1 ) 
    {
      // On active le blocage du champ
      bloque(formulaire,champ);
		}
	}
}

// Fonction de verification d'une plage de nombres (entre X et Y)
function check_num(formulaire,champ,plancher,plafond) 
{
  // Creation d'un raccourci pour manipuler le champ a tester
	var controle = eval('document.' + formulaire + '.' + champ);

  // Si la valeur de la saisie est inferieure au plancher demande
	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 superieure au plafond demande
	if ( controle.value > plafond ) 
  {
		alert('Votre saisie ne doit pas etre superieure a ' + plafond + '.');
		bloque(formulaire,champ);
	}
}

// Fonction pour verifier la coherence de deux saisies de mot de passe
// Cette fonction se declenche a partir du second champ uniquement
function check_pw(formulaire,champ1,champ2) 
{
  // Creation de deux raccourcis pour manipuler les champ a 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
		alert('Vous n\'avez pas saisi votre mot de passe');

    // On active le blocage du champ
		bloque(formulaire,champ1);
	}

  // Si le premier champ est rempli
	else 
  {
    // Si la saisie des deux champ est differente
		if ( prems.value != deuze.value ) 
    {
      // Envoi d'une alerte
			alert('La confirmation de votre mot de passe n\'est pas exacte.');
      // Reinitialisation des deux champs
			deuze.value = "";
			prems.value = "";
      // On active le blocage du champ
			bloque(formulaire,champ1);
		}
	}
}
