// +----------------------------------------------------------------------+
// | Copyright (c) 2004 - Maillard adrien                                 |
// | All rights reserved.                                                 |
// +----------------------------------------------------------------------+
// |                                                                      |
// |                                                                      |
// |                                                                      |
// +----------------------------------------------------------------------+
// | @author     Maillard adrien <maillard.adrien@wanadoo.fr>             |
// | @version    $Revision: 1.00 $                                        |
// | @access     public                                                   |
// +----------------------------------------------------------------------+
//
// $Id: script.js,v 1.00 2004/02/01 00:00:00 madrien Exp $
//

var msg = new Array();
 
msg[0] = "Ce formulaire a déjà été envoyé. Merci de pressez le bouton OK et d'attendre que l'action se termine.\n";
msg[1] = "Fonction hex_md5 non définie.\n"
msg[2] = "Impossible de trouver le label correspondant.\n";
 
msg[3] = "- le champs '{d}' est obligatoire.\n"
msg[4] = "- le champs '{d}' doit être alphabetique.\n"  
msg[5] = "- le champs '{d}' doit être alphanumérique.\n"  
msg[6] = "- le champs '{d}' doit être de type texte.\n" 
msg[7] = "- le champs '{d}' doit être une adresse email valide.\n" 
msg[8] = "- le champs '{d}' doit être une de type numérique.\n"

msg[9] = "- l'année du champs '{d}' est invalide.\n" 
msg[10] = "- le champs '{d}' doit être une numéro de téléphone valide.\n"
msg[11] = "- La validation du mot de passe est incorrecte.\n"
msg[12] = "- Le password doit comporter au moins 6 caractères.\n"

msg1 = "Les champs suivants ont mal été renseignés.\n\nMerci d'apporter les corrections suivantes:\n\n";
msg2 = "Le champs suivant a mal été renseigné.\n\nMerci d'apporter les corrections suivantes:\n\n";
  

// paramètre par défaut
var form = "";
var _messages = new Array();
var _msgError = new Array();
var _error = false;
var _debug = true;
var _submitted = false;
var _stopToFirst = true;

// class pour les messages d'erreurs label
var _erreurLabel = 'erreurLabel';
var _okLabel = 'okLabel';

// class pour les messages d'erreurs field
var _erreurField = 'erreurField';
var _okField = 'okField';

/**
 * getLabelForId( string input_name )
 *
 * Recherche le LABEL associé à un champs du formulaire
 *
 * @access	public
 * @param       string    id    id du champs
 * @return	string || false
 */
function getLabelForId(id) {
  var label, labels = document.getElementsByTagName('label');
  for (var i = 0; (label = labels[i]); i++) {
    if (label.htmlFor == id) {
      return label;
    }
  }
  _msgError[_msgError.length] = msg[2];
  return false;
}

/**
 * isEmpty( object obj )
 *
 * Détermine si une variable n'est pas vide
 *
 * @access	public
 * @param       string    str    variable
 * @return	boolean
 */
function isEmpty(obj){
  if ( 
    obj.type == 'text' || 
    obj.type == 'password' ||
    obj.type == 'textarea' ) {
    return ( ltrim(obj.value).length == 0 );
  }
  
  if ( obj.type == 'select-one' ) {
    //return ( obj.options[0].selected );
    return (obj.value == '---');
  }
  
  if ( obj.type == 'checkbox' ) {
    return (!obj.status);
  }
}


/**
 * trim( string str )
 *
 * Supprime les espaces en début et fin de chaîne
 *
 * @access	public
 * @param       string    str    chaîne à traiter
 * @return	string
 */
function trim(s){
  return rtrim(ltrim(s));
}

/**
 * ltrim( string str )
 *
 * Supprime les espaces en début de chaîne
 *
 * @access	public
 * @param       string    str    chaîne à traiter
 * @return	string
 */
function ltrim(s){
  return (s.length == 0) ? s : s.replace(/^\\s+/, "");
}

/**
 * rtrim( string str )
 *
 * Supprime les espaces en fin de chaîne
 *
 * @access	public
 * @param       string    str    chaîne à traiter
 * @return	string
 */
function rtrim(s){
  return (s.length == 0) ? s : s.replace(/\\s+$/, "");
} 

/**
 * isBetween( mixed var [, int min] [, int max] )
 *
 * Si var est une chaîne de caractères ont vérifie la longeur de la chaîne
 * sinon si var est une valeur numeric on vérifie sa valeur
 *
 * @access	public
 * @return	int || true
 */
function isBetween(str , minVal, maxval) {
  if ( isNaN(str) ){
    if ( (typeof (minVal) != 'undefined') && (str.value < minVal) ) {
      return -1;	
    }
    
    if ( (typeof (maxval) != 'undefined') && (str.value > maxval) ) {
      return -2;	
    }    
    return true;
  }
  else {
    if ( (typeof (minVal) != 'undefined') && (str.length < minVal) ) {
      return -1;	
    }
    
    if ( (typeof (maxval) != 'undefined') && (str.length > maxval) ) {
      return -2;	
    }    
    return true;	
  }
}

/**
 * isAlpha(  mixed var )
 *
 * Détermine si une variable est alphabétique
 *
 * @access	public
 * @param       string    str    variable à traiter
 * @return	boolean
 */
function isAlpha(str) {
  var filtre = /^[a-zàâäéèêëîïôùûç -]+$/i
  return filtre.test(str);
}

/**
 * isAlphanumeric(  mixed var )
 *
 * Détermine si une variable est alphanumerique
 *
 * @access	public
 * @param       string    str    variable à traiter
 * @return	boolean
 */
function isAlphanumeric(str) {
  var filtre = /^[a-z0-9 ]+$/i
  return filtre.test(str);
}

/**
 * isNumeric( mixed var )
 *
 * Détermine si une variable est numérique
 *
 * @access	public
 * @param       string    str    variable à traiter
 * @return	boolean
 */
function isNumeric(str) {
  var filtre = /^\d+$/
  return filtre.test(str);
}

/**
 * isEmail( mixed var )
 *
 * Détermine si une variable est un email
 *
 * @access	public
 * @param       string    str    variable à traiter
 * @return	boolean
 */
function isEmail(email) {
  re = new RegExp( "^[_a-z0-9-]+(\\.[_a-z0-9-]+)*@[a-z0-9-]+(\\.[a-z0-9-]+)*(\\.[a-z]{2,4})$", "i" );
  return result = re.test( email );  
  //var filtre = /^[_a-z0-9-]+(\\.[_a-z0-9-]+)*@[a-z0-9-]+(\\.[a-z0-9-]+)*(\\.[a-z]{2,4})$/i
  //return filtre.test(str);
}

/**
 * isAddress( mixed var )
 *
 * Détermine si une variable est une adresse
 *
 * @access	public
 * @param       string    str    variable à traiter
 * @return	boolean
 */
function isText(str) {
  var filtre = /^[0-9a-zàâäéèêëîïôùûç’ -,\.\'\-\;]+$/i
  return filtre.test(str);
}

/**
 * compareField( string input_name, string input_name )
 *
 * Compare la valeur de 2 champs, retoune True si les 2 champs sont identiques
 *
 * @access	public
 * @param       string    field1    nom du champs 1
 * @param       string    field2    nom du champs 2
 * @return	boolean
 */
function compareField(field1, field2) {
  field1 = form.elements[field1];
  field2 = form.elements[field2];
  
  if( field1.value == field2.value ){
    return true;
  } else {
    return false;
  }
  return true;
}

/**
 * passwordToMd5( object input_name, object input_name )
 *
 * Calcule le md5 du champs field1 et place le resultat dans le champs field2, vide le champs field1
 *
 * @access	public
 * @param       object    field1    objet du champs 1
 * @param       object    field2    objet du champs 2
 * @return	boolean
 */
function passwordToMd5(field1, field2) {  
  // Calcule du MD5
  md5 = hex_md5(field1.value);
  
  field2.value=md5;
  field1.value="";
  return true;
}

/**
 * implode( string glue, array pieces )
 *
 * Rassemble les éléments d'un tableau en une chaîne
 *
 * @access	public
 * @param       string    glue      chaîne glue, à placer entre deux éléments
 * @param       string    pieces    tableau à linéariser
 * @return	string
 */
function join(glue, pieces){
  var str = new String();  
  return pieces.join(glue);
}

/**
 * isPhone( mixed var )
 *
 * Détermine si une variable est un numéro de telephone
 *
 * @access	public
 * @param       string    str    variable à traiter
 * @return	phone || int
 */
function isPhone(str) {
  // format international : [+][country code][ ][number]
  // format francais xx-xx-xx-xx

  var france = /^0[1234568][0-9]{8}$/;
  var internationale = /^[\+]?[1-9]\d{0,2}\s*[0-9\s*]+$/;

  // On supprime tous ce qui est entre parenthèse
  phone = str.replace(/\(.*\)/g, ' ');
    
  // On supprime les caractères de séparation autre que les espaces
  phone = phone.replace(/[\.\-]/g, ' ');
  
  // On remplace le 00 du début du numéro pas un +
  phone = phone.replace(/^00/, '+');
  
  // On remplace le double + par un simple
  phone = phone.replace(/^\s*[\+]?\s*[\+]\s*/g, '+');
  
  // On enlève les espaces et le +
  phone2 = phone.replace(/[ \+]/g, '');
  
  // On vérifie que le numéro ne contient plus que des chiffres 
  if ( !isNumeric(phone2) ) {
    return -1;
  }
  
  // si le numéro de téléphone correspond a un numéro en france
  // on le format correctement (xx xx xx xx xx)
  if ( france.test(phone2) ) {
    mask = "xx xx xx xx xx";
    return wordwrap(phone2, mask, " ");
  }

  // sinon on vérifie si le numéro correspond a une numéro 
  // internationale [+][country code][ ][number]
  if ( internationale.test(phone2) ) {
    // Indicatif des numéro francais
    frenchCode = new Array('', '33', '590', '594', '598', '262', '687');

    phone = phone.replace(/[\+]/g, '');    
    var tmp = phone.split(" ");
    var countryCode = tmp[0];
    if ( countryCode.length > 3 ){
      var code2 = phone.substring(0,2);
      var code3 = phone.substring(0,3);
      if ( in_array(code2, frenchCode) ){
        var number = phone2.substring(2);
        mask = "xx xx xx xx xx";    
        return wordwrap ("0" + number, mask, " ");   
      } else if ( in_array(code3, frenchCode) ) {
      	 var number = phone2.substring(3);
      	 mask = "xx xx xx xx xx";    
         return wordwrap ("0" + number, mask, " ");   
      } else {
        var number = phone2.substring(countryCode.length); 
        // si le numéro correspond a un numéro en france au format international
        if ( in_array(countryCode, frenchCode) ){
          mask = "xx xx xx xx xx";    
          return wordwrap ("0" + number, mask, " ");
        }
      }
    } else {
      var number = phone2.substring(countryCode.length);
      
      if ( number.length == 5 )
        mask = "xx xxx";
      if ( number.length == 6 )
        mask = "xxx xxx";
      if ( number.length == 7 )
        mask = "xxx xxxx";
      if ( number.length == 8 )
        mask = "xxxx xxxx"; 
      if ( number.length == 9 )
        mask = "xxx xxx xxx";   
      if ( number.length == 10 )
        mask = "xxx xxx xxxx";
      if ( number.length == 11 )
        mask = "xxx xxxx xxxx";
      
      return "+" + countryCode + " " + wordwrap (number, mask, " "); 
    }    
  }
  return -2;
}

/**
 * wordwrap( string str, string mask, string glue  )
 *
 * Effectue la césure d'une chaîne 
 *
 * @access	public
 * @param       string    str     chaîne à traiter
 * @param       string    mask    mask de séparation
 * @param       string    glue    chaîne glue, à placer entre deux éléments
 * @return	string
 */
function wordwrap(phone, mask, glue ) {  
  var str = new String();
  var mask = mask.split(glue);
  var index = 0;
  
  for ( var i = 0; i < mask.length; i++) {
    str += phone.substring(index, index + mask[i].length) + glue;
    index  += mask[i].length;
  }
  
  //alert(str.substring(0, str.length-1));
   
  return str.substring(0, str.length-1);
}

/**
 * wordwrap( string needle, array haystack  )
 *
 * Indique si une valeur appartient à un tableau  
 *
 * @access	public
 * @param       string    needle      chaîne à rechercher
 * @param       array     haystack    tableau ou l'on doit recherche needle 
 * @return	boolean
 */
function in_array(needle, haystack){
  for ( var i = 0; i < haystack.length; i++){    
    if ( haystack[i] == needle ) {
      return true;
    }  
  }
  return false;
}

/**
 * wordwrap( string needle, array haystack  )
 *
 * Indique si une valeur appartient à un tableau  
 *
 * @access	public
 * @param       string    needle      chaîne à rechercher
 * @param       array     haystack    tableau ou l'on doit recherche needle 
 * @return	boolean
 */
function checkRadio(field) {
   var radio = form.elements[field];
   for ( var i = 0; i < radio.length; i++ ) {
     if (radio[i].status)
      return true;
   }
   return false;
}

/**
 * wordwrap( string needle, array haystack  )
 *
 * Indique si une valeur appartient à un tableau  
 *
 * @access	public
 * @param       string    needle      chaîne à rechercher
 * @param       array     haystack    tableau ou l'on doit recherche needle 
 * @return	boolean
 */
function checkSelect(field, defaut)
{
  valeur = form.elements[field].value;
  return ( valeur != defaut );
}

/**
 * isDate( mixed var )
 *
 * Détermine si une variable est une date
 *
 * @access	public
 * @param       string    str    variable à traiter
 * @return	boolean
 */
function isDate(str) {
  
  // On remplace les caractère de séparation par des espaces
  str = str.replace(/[\.\-\/]/g, ' ');
  
  // On remplace les espaces > 1 par un espace simple
  str = str.replace(/[\s+]/g, ' ');

  var filtre = /^\d{1,2}\s\d{1,2}\s\d{4}$/;

  if ( !filtre.test(str) )
  {
    return -1;
  }
 
  // On eclate la date en jour, mois année
  jour = parseInt(str.split(" ")[0], 10);
  mois = parseInt(str.split(" ")[1], 10);
  annee = parseInt(str.split(" ")[2], 10);
  
  // Définition du dernier jour de février  
  if (annee%4 == 0 && annee%100 !=0 || annee%400 == 0) fev = 29;
  else fev = 28;
  
  // Nombre de jours pour chaque mois
  nbJours = new Array(31,fev,31,30,31,30,31,31,30,31,30,31);

  return ( mois >= 1 && mois <=12 && jour >= 1 && jour <= nbJours[mois-1] );
}

/**
 * clearInput( string field )
 *
 * Vide le champs field
 *
 * @access	public
 * @param       string    field    nom du champs
 * @return	boolean
 */
function clearInput(field){
  field.value= "";
}

/**
 * fieldError( object field, object label )
 *
 * Indique le champs en erreur
 *
 * @access	public
 * @param       object    field    objet field
 * @param       object    label    objet label
 * @return	boolean
 */
function fieldError(field){
  if ( field.type == 'textarea' ) {
    field.className = 'erreurTextarea';
  } else {
    field.className = 'erreurField';  	
  }
}

/**
 * fieldOk( object field )
 *
 * Indique le champs ok
 *
 * @access	public
 * @param       object    field    objet field
 * @param       object    label    objet label
 * @return	boolean
 */
function fieldOk(field){
  //field.readOnly = true;
  //field.className = _okField;
}

/**
 * initField( object field )
 *
 * remet le background à blanc au focus
 *
 * @access	public
 * @param       object    field    objet field
 * @return	boolean
 */
function initField(field){
  if ( field.type == 'textarea' ) {
    field.className = 'textarea';
  } else {
    if (!field.readOnly){
      field.className = 'field';  
    }
  }
}

/*------------------------------------------------------------------------------------*/
/*------------------------------------------------------------------------------------*/
/*------------------------------------------------------------------------------------*/
/*------------------------------------------------------------------------------------*/

/**
 * validiteCompte()
 *
 * Valide le formulaire de changement de password
 *
 * @access	public
 * @return	boolean
 */
function validiteCompte(target)  {
  var formulaire = document.valider;
  var action = formulaire.elements['action'];
  action.value = target;
  formulaire.submit();
}


/**
 * validitePassword()
 *
 * Valide le formulaire de changement de password
 *
 * @access	public
 * @return	boolean
 */
function validitePassword()  {
  var formulaire = document.password;
  if (_submitted == true)
  {
    _msgError[_msgError.length] = msg[0];
    return false;
  }

  var _error = false;

  var message = new String();
  
  var erreur = 0;
  var old = formulaire.elements['oldPassword'];
  var pass = formulaire.elements['password'];
  var ver = formulaire.elements['password_verification'];
  var md5Old = formulaire.elements['md5Old'];
  var md5New = formulaire.elements['md5New'];

  var oldLabel = getLabelForId('oldPassword');
  var passLabel = getLabelForId('password');
  var verLabel = getLabelForId('password_verification');
  
  // Le champs old est obligatoire est de type alphabétique
  if ( isEmpty (old) ){    
    message += msg[3].replace(/{d}/g, oldLabel.title);
    fieldError(old);
    erreur++;
    _error = true;	
  } else if ( !isAlphanumeric(old.value) ){
    message += msg[5].replace(/{d}/g, oldLabel.title);
    fieldError(old);
    erreur++;
    _error = true;	
  }
  
  // Le champs password est obligatoire est de type alphabétique
  if ( isEmpty (pass) ){    
    message += msg[3].replace(/{d}/g, passLabel.title);
    fieldError(pass);
    erreur++;
    _error = true;	
  } else if ( !isAlphanumeric(pass.value) ){
    message += msg[5].replace(/{d}/g, passLabel.title);
    fieldError(pass);
    erreur++;
    _error = true;	
  }

  // Le champs verification est obligatoire est de type alphabétique
  if ( isEmpty (ver) ){    
    message += msg[3].replace(/{d}/g, verLabel.title);
    fieldError(ver);
    erreur++;
    _error = true;	
  } else if ( !isAlphanumeric(ver.value) ){
    message += msg[5].replace(/{d}/g, verLabel.title);
    fieldError(ver);
    erreur++;
    _error = true;	
  } else {
    if ( pass.value != ver.value )
    {
      message += msg[11];
      erreur++;
      _error = true;
    }
    else if ( pass.value.length < 6 )
    {
      message += msg[12];
      erreur++;
      _error = true;    	
    }    
  } 

  // Traitement des erreurs
  if (_error == true)
  {
    if ( erreur > 1 ){
      message = msg1 + message;
    } else {
      message = msg2 + message;	
    }
    alert(message);
  } else {
    passwordToMd5(old, md5Old);
    passwordToMd5(ver, md5New);
    _submitted = true;
    formulaire.submit();
  }
}  

/**
 * validiteIdentification()
 *
 * Valide le formulaire d'identification
 *
 * @access	public
 * @return	boolean
 */
function validiteIdentification(nomForm)  {
  var formulaire = eval('document.'+nomForm);
  if (_submitted == true)
  {
    _msgError[_msgError.length] = msg[0];
    return false;
  }
  
  var _error = false;
  
  var message = new String();
  
  var erreur = 0;
  var nom = formulaire.elements['nom'];
  var prenom = formulaire.elements['prenom'];
  var pass = formulaire.elements['password'];
  var md5 = formulaire.elements['md5password'];

  var nomLabel = getLabelForId('nom');
  var prenomLabel = getLabelForId('prenom');
  var passLabel = getLabelForId('password');

  // Le champs nom est obligatoire est de type alphabétique
  if ( isEmpty (nom) ){    
    message += msg[3].replace(/{d}/g, nomLabel.title);
    fieldError(nom);
    erreur++;
    _error = true;	
  } else if ( !isAlpha(nom.value) ){
    message += msg[4].replace(/{d}/g, nomLabel.title);
    fieldError(nom);
    erreur++;
    _error = true;	
  } else {
    fieldOk(nom);
  }
  
  // Le champs prenom est obligatoire est de type alphabétique
  if ( isEmpty (prenom) ){    
    message += msg[3].replace(/{d}/g, prenomLabel.title);
    fieldError(prenom);    
    erreur++;
    _error = true;	
  } else if ( !isAlpha(prenom.value) ){
    message += msg[4].replace(/{d}/g, prenomLabel.title);
    fieldError(prenom);    
    erreur++;
    _error = true;	
  } else {
    fieldOk(prenom);
  }
  
  // Le champs password est obligatoire est de type alphabétique
  if ( isEmpty (pass) ){    
    message += msg[3].replace(/{d}/g, passLabel.title);
    passLabel.className = _classErreur;
    erreur++;
    _error = true;	
  } else if ( !isAlphanumeric(pass.value) ){
    message += msg[5].replace(/{d}/g, passLabel.title);
    fieldError(pass);    
    erreur++;
    _error = true;	
  } else {
    passwordToMd5(pass, md5);
  }
  
  // Traitement des erreurs
  if (_error == true)
  {
    if ( erreur > 1 ){
      message = msg1 + message;
    } else {
      message = msg2 + message;	
    }
    alert(message);
  } else {
    _submitted = true;
    formulaire.submit();
  }
}

/**
 * validiteLostPassword()
 *
 * Valide le formulaire d'oublie de password
 *
 * @access	public
 * @return	boolean
 */
function validiteLostPassword()  {
  var formulaire = document.lostPassword;
  if (_submitted == true)
  {
    _msgError[_msgError.length] = msg[0];
    return false;
  }

  var _error = false;
  
  var message = new String();
  
  var erreur = 0;
  var nom = formulaire.elements['nom'];
  var prenom = formulaire.elements['prenom'];
  var pass = formulaire.elements['password'];

  var nomLabel = getLabelForId('nom');
  var prenomLabel = getLabelForId('prenom');
  var passLabel = getLabelForId('password');

  // Le champs nom est obligatoire est de type alphabétique
  if ( isEmpty (nom) ){    
    message += msg[3].replace(/{d}/g, nomLabel.title);
    fieldError(nom);
    erreur++;
    _error = true;	
  } else if ( !isAlpha(nom.value) ){
    message += msg[4].replace(/{d}/g, nomLabel.title);
    fieldError(nom);
    erreur++;
    _error = true;	
  } else {
    fieldOk(nom);
  }
  
  // Le champs prenom est obligatoire est de type alphabétique
  if ( isEmpty (prenom) ){    
    message += msg[3].replace(/{d}/g, prenomLabel.title);
    fieldError(prenom);    
    erreur++;
    _error = true;	
  } else if ( !isAlpha(prenom.value) ){
    message += msg[4].replace(/{d}/g, prenomLabel.title);
    fieldError(prenom);    
    erreur++;
    _error = true;	
  } else {
    fieldOk(prenom);
  }  
  
  // Traitement des erreurs
  if (_error == true)
  {
    if ( erreur > 1 ){
      message = msg1 + message;
    } else {
      message = msg2 + message;	
    }
    alert(message);
  } else {
    _submitted = true;
    formulaire.submit();
  }
}  
  
/**
 * validiteContact()
 *
 * Valide le formulaire de contact
 *
 * @access	public
 * @return	boolean
 */
function validiteContact()  {
  var formulaire = document.contact;
  if (_submitted == true)
  {
    _msgError[_msgError.length] = msg[0];
    return false;
  }

  var _error = false;
  
  var message = new String();
  var _tabError = new Array();
  
  var erreur = 0;
  //var destinataire = formulaire.elements['destinataire'];
  var nom = formulaire.elements['nom'];
  var prenom = formulaire.elements['prenom'];
  var titre = formulaire.elements['titre'];
  var email = formulaire.elements['email'];
  var texte = formulaire.elements['texte'];

 // var destinataireLabel = getLabelForId('destinataire');
  var nomLabel = getLabelForId('nom');
  var prenomLabel = getLabelForId('prenom');
  var titreLabel = getLabelForId('titre');
  var emailLabel = getLabelForId('email');
  var texteLabel = getLabelForId('texte');

  // Le champs destinataire est obligatoire
  /*if ( isEmpty (destinataire) ){    
    message += msg[3].replace(/{d}/g, destinataireLabel.title);
    fieldError(destinataire);
    _tabError[erreur] = destinataire;
    erreur++;
    _error = true;	
  } else {
    fieldOk(destinataire);
  }*/
  
  // Le champs nom est obligatoire est de type alphabétique
  if ( isEmpty (nom) ){    
    message += msg[3].replace(/{d}/g, nomLabel.title);
    fieldError(nom);
    erreur++;
    _error = true;	
  } else if ( !isAlpha(nom.value) ){
    message += msg[4].replace(/{d}/g, nomLabel.title);
    fieldError(nom);
    erreur++;
    _error = true;	
  } else {
    fieldOk(nom);
  }
  
  // Le champs prenom est obligatoire est de type alphabétique
  if ( isEmpty (prenom) ){    
    message += msg[3].replace(/{d}/g, prenomLabel.title);
    fieldError(prenom);    
    erreur++;
    _error = true;	
  } else if ( !isAlpha(prenom.value) ){
    message += msg[4].replace(/{d}/g, prenomLabel.title);
    fieldError(prenom);    
    erreur++;
    _error = true;	
  } else {
    fieldOk(prenom);
  }
  
  // Le champs titre est obligatoire est de type texte
  if ( isEmpty (titre) ){    
    message += msg[3].replace(/{d}/g, titreLabel.title);
    fieldError(titre);    
    _tabError[erreur] = titre;
    erreur++;
    _error = true;	
  } else if ( !isText(titre.value) ){
    message += msg[6].replace(/{d}/g, titreLabel.title);
    fieldError(titre);    
    _tabError[erreur] = titre;
    erreur++;
    _error = true;	
  } else {
    fieldOk(titre);
  }  

  // Le champs email est obligatoire est de type email
  if ( isEmpty (email) ){    
    message += msg[3].replace(/{d}/g, emailLabel.title);
    fieldError(email);    
    _tabError[erreur] = email
    erreur++;
    _error = true;	
  } else if ( !isEmail(email.value) ){
    message += msg[7].replace(/{d}/g, emailLabel.title);
    fieldError(email);    
    _tabError[erreur] = email;
    erreur++;
    _error = true;	
  } else {
    fieldOk(email);
  }  

  // Le champs texte est obligatoire
  if ( isEmpty (texte) ){    
    message += msg[3].replace(/{d}/g, texteLabel.title);
    fieldError(texte);
    _tabError[erreur] = texte;
    erreur++;
    _error = true;	
  } else {
    fieldOk(texte);
  }
  
  // Traitement des erreurs
  if (_error == true)
  {
    if ( erreur > 1 ){
      message = msg1 + message;
    } else {
      message = msg2 + message;	
    }
    alert(message);
  } else {
    _submitted = true;
    formulaire.submit();
  }
}  


/**
 * validiteArticle()
 *
 * Valide le formulaire article
 *
 * @access	public
 * @return	boolean
 */
function validiteArticle()  {
  var formulaire = document.article;
  if (_submitted == true)
  {
    _msgError[_msgError.length] = msg[0];
    return false;
  }

  var _error = false;
  
  var message = new String();
  var _tabError = new Array();
  
  var erreur = 0;
  var rubrique = formulaire.elements['rubrique_id'];
  var titre = formulaire.elements['titre'];
  var chapo = formulaire.elements['chapo'];
  var texte = formulaire.elements['texte'];

  var rubriqueLabel = getLabelForId('rubrique_id');
  var titreLabel = getLabelForId('titre');
  var chapoLabel = getLabelForId('chapo');
  var texteLabel = getLabelForId('texte');
  
  // Le champs rubrique est obligatoire
  if ( isEmpty (rubrique) ){    
    message += msg[3].replace(/{d}/g, rubriqueLabel.title);
    fieldError(rubrique);
    _tabError[erreur] = rubrique;
    erreur++;
    _error = true;	
  } else {
    fieldOk(rubrique);
  }
  
  // Le champs titre est obligatoire est de type texte
  if ( isEmpty (titre) ){    
    message += msg[3].replace(/{d}/g, titreLabel.title);
    fieldError(titre);    
    _tabError[erreur] = titre;
    erreur++;
    _error = true;	
  } else if ( !isText(titre.value) ){
    message += msg[6].replace(/{d}/g, titreLabel.title);
    fieldError(titre);    
    _tabError[erreur] = titre;
    erreur++;
    _error = true;	
  } else {
    fieldOk(titre);
  }    

  // Le champs chapo est obligatoire
  if ( isEmpty (chapo) ){    
    message += msg[3].replace(/{d}/g, chapoLabel.title);
    fieldError(chapo);
    _tabError[erreur] = chapo;
    erreur++;
    _error = true;	
  } else {
    fieldOk(chapo);
  }

  // Le champs texte est obligatoire
  if ( isEmpty (texte) ){    
    message += msg[3].replace(/{d}/g, texteLabel.title);
    fieldError(texte);
    _tabError[erreur] = texte;
    erreur++;
    _error = true;	
  } else {
    fieldOk(texte);
  }
  
  // Traitement des erreurs
  if (_error == true)
  {
    if ( erreur > 1 ){
      message = msg1 + message;
    } else {
      message = msg2 + message;	
    }
    alert(message);
  } else {
    _submitted = true;
    formulaire.submit();
  }
}  

/**
 * validiteAnnonce()
 *
 * Valide le formulaire annonce
 *
 * @access	public
 * @return	boolean
 */
function validiteAnnonce()  {
  var formulaire = document.annonce;
  if (_submitted == true)
  {
    _msgError[_msgError.length] = msg[0];
    return false;
  }

  var _error = false;
  
  var message = new String();
  var _tabError = new Array();
  
  var erreur = 0;
  var titre = formulaire.elements['titre'];
  var texte = formulaire.elements['texte'];

  var titreLabel = getLabelForId('titre');
  var texteLabel = getLabelForId('texte');
  
 // Le champs titre est obligatoire est de type texte
  if ( isEmpty (titre) ){    
    message += msg[3].replace(/{d}/g, titreLabel.title);
    fieldError(titre);    
    _tabError[erreur] = titre;
    erreur++;
    _error = true;	
  } else if ( !isText(titre.value) ){
    message += msg[6].replace(/{d}/g, titreLabel.title);
    fieldError(titre);    
    _tabError[erreur] = titre;
    erreur++;
    _error = true;	
  } else {
    fieldOk(titre);
  }    

  // Le champs texte est obligatoire
  if ( isEmpty (texte) ){    
    message += msg[3].replace(/{d}/g, texteLabel.title);
    fieldError(texte);
    _tabError[erreur] = texte;
    erreur++;
    _error = true;	
  } else {
    fieldOk(texte);
  }
  
  // Traitement des erreurs
  if (_error == true)
  {
    if ( erreur > 1 ){
      message = msg1 + message;
    } else {
      message = msg2 + message;	
    }
    alert(message);
  } else {
    _submitted = true;
    formulaire.submit();
  }
}  


/**
 * validiteInscription()
 *
 * Valide le formulaire de contact
 *
 * @access	public
 * @return	boolean
 */
function validiteInscription()  {
  var formulaire = document.inscription;
  if (_submitted == true)
  {
    _msgError[_msgError.length] = msg[0];
    return false;
  }

  var _error = false;
  
  var message = new String();
  var _tabError = new Array();
  
  var erreur = 0;
  
  var email = formulaire.elements['email'];
  var genre = formulaire.elements['genre'];
  var nom = formulaire.elements['nom'];
  var prenom = formulaire.elements['prenom'];

  var emailLabel = getLabelForId('email');
  var genreLabel = getLabelForId('genre');
  var nomLabel = getLabelForId('nom');
  var prenomLabel = getLabelForId('prenom');

  var debutTI = formulaire.elements['debutTI'];
  var finTI = formulaire.elements['finTI'];

  var debutTILabel = getLabelForId('debutTI');
  var finTILabel = getLabelForId('finTI');

  var adresse_personnel = formulaire.elements['adresse_personnel'];
  var ville_personnel = formulaire.elements['ville_personnel'];
  var cp_personnel = formulaire.elements['cp_personnel'];
  var pays_personnel = formulaire.elements['pays_personnel'];
  var tel_personnel = formulaire.elements['tel_personnel'];
  var mobile_personnel = formulaire.elements['mobile_personnel'];
  var statut_personnel = formulaire.elements['statut_personnel'];

  var adresse_personnelLabel = getLabelForId('adresse_personnel');
  var ville_personnelLabel = getLabelForId('ville_personnel');
  var cp_personnelLabel = getLabelForId('cp_personnel');
  var pays_personnelLabel = getLabelForId('pays_personnel');
  var tel_personnelLabel = getLabelForId('tel_personnel');
  var mobile_personnelLabel = getLabelForId('mobile_personnel');
  var statut_personnelLabel = getLabelForId('statut_personnel');
  
  var adresse_professionnel = formulaire.elements['adresse_professionnel'];
  var ville_professionnel = formulaire.elements['ville_professionnel'];
  var cp_professionnel = formulaire.elements['cp_professionnel'];
  var pays_professionnel = formulaire.elements['pays_professionnel'];
  var tel_professionnel = formulaire.elements['tel_professionnel'];
  var mobile_professionnel = formulaire.elements['mobile_professionnel'];
  var fax_professionnel = formulaire.elements['fax_professionnel'];
  var societe = formulaire.elements['societe'];
  var profession = formulaire.elements['profession'];
  var statut_professionnel = formulaire.elements['statut_professionnel'];

  var adresse_professionnelLabel = getLabelForId('adresse_professionnel');
  var ville_professionnelLabel = getLabelForId('ville_professionnel');
  var cp_professionnelLabel = getLabelForId('cp_professionnel');
  var pays_professionnelLabel = getLabelForId('pays_professionnel');
  var tel_professionnelLabel = getLabelForId('tel_professionnel');
  var mobile_professionnelLabel = getLabelForId('mobile_professionnel');
  var fax_professionnelLabel = getLabelForId('fax_professionnel');
  var societeLabel = getLabelForId('societe');
  var professionLabel = getLabelForId('profession');
  var statut_professionnelLabel = getLabelForId('statut_professionnel');

  // Le champs email est obligatoire est de type email
  if ( (typeof(email) != 'undefined') && email.type != 'hidden' ){
    if ( isEmpty (email) ){    
      message += msg[3].replace(/{d}/g, emailLabel.title);
      fieldError(email);    
      _tabError[erreur] = email;
      erreur++;
      _error = true;	
    } else if ( !isEmail(email.value) ){
      message += msg[7].replace(/{d}/g, emailLabel.title);
      fieldError(email);    
      _tabError[erreur] = email;
      erreur++;
      _error = true;	
    } else {
      fieldOk(email);
    }
  }  
  
  // Le champs genre est obligatoire
  if ( (typeof(genre) != 'undefined') && genre.type != 'hidden' ){
    if ( isEmpty (genre) || genre.value == "0" ){    
      message += msg[3].replace(/{d}/g, genreLabel.title);
      fieldError(genre);
      _tabError[erreur] = genre;
      erreur++;
      _error = true;	
    } else {
      fieldOk(genre);
    }
  }  
  
  // Le champs nom est obligatoire est de type alphabétique
  if ( (typeof(nom) != 'undefined') && nom.type != 'hidden' ){
    if ( isEmpty (nom) ){    
      message += msg[3].replace(/{d}/g, nomLabel.title);
      fieldError(nom);
      erreur++;
      _error = true;	
    } else if ( !isAlpha(nom.value) ){
      message += msg[4].replace(/{d}/g, nomLabel.title);
      fieldError(nom);
      erreur++;
      _error = true;	
    } else {
      fieldOk(nom);
    }
  }
  
  // Le champs prenom est obligatoire est de type alphabétique
  if ( (typeof(prenom) != 'undefined') && prenom.type != 'hidden' ){
    if ( isEmpty (prenom) ){    
      message += msg[3].replace(/{d}/g, prenomLabel.title);
      fieldError(prenom);    
      erreur++;
      _error = true;	
    } else if ( !isAlpha(prenom.value) ){
      message += msg[4].replace(/{d}/g, prenomLabel.title);
      fieldError(prenom);    
      erreur++;
      _error = true;	
    } else {
      fieldOk(prenom);
    }
  }    
  
  debut = false;
  fin = false;
  
  // Le champs debutTI est obligatoire est de type numérique
  if ( (typeof(debutTI) != 'undefined') && debutTI.type != 'hidden' ){
    if ( isEmpty (debutTI) ){    
      message += msg[3].replace(/{d}/g, debutTILabel.title);
      fieldError(debutTI);    
      erreur++;
      _error = true;	
    } else if ( !isNumeric(debutTI.value) ){
      message += msg[8].replace(/{d}/g, debutTILabel.title);
      fieldError(debutTI);    
      erreur++;
      _error = true;	
    } else {
      fieldOk(debutTI);
      debut = true;
    }
  }
  
  // Le champs finTI est obligatoire est de type numérique
  if ( (typeof(finTI) != 'undefined') && finTI.type != 'hidden' ){
    if ( isEmpty (finTI) ){    
      message += msg[3].replace(/{d}/g, finTILabel.title);
      fieldError(finTI);    
      erreur++;
      _error = true;	
    } else if ( !isNumeric(finTI.value) ){
      message += msg[8].replace(/{d}/g, finTILabel.title);
      fieldError(finTI);    
      erreur++;
      _error = true;	
    } else {
      fieldOk(debutTI);
      fin = true;
    }
  }
  
  if ( debut && fin ){
    var result = isBetween(debutTI, 1950, finTI.value);
    if ( result < 0 ){
     message += msg[9].replace(/{d}/g, debutTILabel.title);
     fieldError(debutTI);    
     erreur++;
     _error = true;     
    } else {    
      var a = new Date();
      var result = isBetween(finTI, debutTI.value, a.getFullYear());
      if ( result < 0 ){
        message += msg[9].replace(/{d}/g, debutTILabel.title);
        fieldError(finTI);    
        erreur++;
        _error = true
      }
    }
  }

  // Le champs adresse_personnel est de type texte
  if ( 
    (typeof(adresse_personnel) != 'undefined') && 
    adresse_personnel.type != 'hidden' &&
    !isEmpty (adresse_personnel)
  ){
    if (  !isText(adresse_personnel.value) ){
      message += msg[6].replace(/{d}/g, adresse_personnelLabel.title);
      fieldError(adresse_personnel);    
      _tabError[erreur] = adresse_personnel;
      erreur++;
      _error = true;	
    } else {
      fieldOk(adresse_personnel);
    }
  }  
 
  // Le champs ville_personnel est de type texte
  if ( 
    (typeof(ville_personnel) != 'undefined') && 
    ville_personnel.type != 'hidden' &&
    !isEmpty (ville_personnel)
   ){
    if (  !isText(ville_personnel.value) ){
      message += msg[6].replace(/{d}/g, ville_personnelLabel.title);
      fieldError(ville_personnel);    
      _tabError[erreur] = ville_personnel;
      erreur++;
      _error = true;	
    } else {
      fieldOk(ville_personnel);
    }
  } 
  
  // Le champs cp_personnel est de type numerique
  if ( 
    (typeof(cp_personnel) != 'undefined') && 
    cp_personnel.type != 'hidden' &&
    !isEmpty (cp_personnel)
  ){
    if (  !isNumeric(cp_personnel.value) ){
      message += msg[8].replace(/{d}/g, cp_personnelLabel.title);
      fieldError(cp_personnel);    
      _tabError[erreur] = cp_personnel;
      erreur++;
      _error = true;	
    } else {
      fieldOk(cp_personnel);
    }
  }   
   
  // Le champs tel_personnel est de type telephone
  if ( 
    (typeof(tel_personnel) != 'undefined') 
    && tel_personnel.type != 'hidden' &&
    !isEmpty (tel_personnel)
  ){
    var result = isPhone(tel_personnel.value);
    if ( result < 0 ){
      message += msg[10].replace(/{d}/g, tel_personnelLabel.title);
      fieldError(tel_personnel);    
      _tabError[erreur] = tel_personnel;
      erreur++;
      _error = true;
    } else {
      tel_personnel.value = result;
      fieldOk(tel_personnel);	
    }
  }	
   
  // Le champs mobile_personnel est de type telephone
  if ( 
    (typeof(mobile_personnel) != 'undefined') && 
    mobile_personnel.type != 'hidden' &&
    !isEmpty (mobile_personnel) 
  ){
    var result = isPhone(mobile_personnel.value);
    if ( result < 0 ){
      message += msg[10].replace(/{d}/g, mobile_personnelLabel.title);
      fieldError(mobile_personnel);    
      _tabError[erreur] = mobile_personnel;
      erreur++;
      _error = true;
    } else {
      mobile_personnel.value = result;
      fieldOk(mobile_personnel);	
    }
  }
  

  // Le champs adresse_professionnel est de type texte
  if ( 
    (typeof(adresse_professionnel) != 'undefined') && 
    adresse_professionnel.type != 'hidden' &&
    !isEmpty (adresse_professionnel) 
  ){
    if (  !isText(adresse_professionnel.value) ){
      message += msg[6].replace(/{d}/g, adresse_professionnelLabel.title);
      fieldError(adresse_professionnel);    
      _tabError[erreur] = adresse_professionnel;
      erreur++;
      _error = true;	
    } else {
      fieldOk(adresse_professionnel);
    }
  }  
 
  // Le champs ville_professionnel est de type texte
  if ( 
    (typeof(ville_professionnel) != 'undefined') && 
    ville_professionnel.type != 'hidden' &&
    !isEmpty (ville_professionnel)  
  ){
    if (  !isText(ville_professionnel.value) ){
      message += msg[6].replace(/{d}/g, ville_professionnelLabel.title);
      fieldError(ville_professionnel);    
      _tabError[erreur] = ville_professionnel;
      erreur++;
      _error = true;	
    } else {
      fieldOk(ville_professionnel);
    }
  } 

  // Le champs cp_professionnel est de type numerique
  if ( 
    (typeof(cp_professionnel) != 'undefined') && 
    cp_professionnel.type != 'hidden' &&
    !isEmpty (cp_professionnel) 
  ){
    if (  !isNumeric(cp_professionnel.value) ){
      message += msg[8].replace(/{d}/g, cp_professionnelLabel.title);
      fieldError(cp_professionnel);    
      _tabError[erreur] = cp_professionnel;
      erreur++;
      _error = true;	
    } else {
      fieldOk(cp_professionnel);
    }
  }   
  
  // Le champs tel_professionnel est de type telephone
  if ( 
    (typeof(tel_professionnel) != 'undefined') && 
    tel_professionnel.type != 'hidden' &&
    !isEmpty (tel_professionnel)  
  ){
    var result = isPhone(tel_professionnel.value);
    if ( result < 0 ){
      message += msg[10].replace(/{d}/g, tel_professionnelLabel.title);
      fieldError(tel_professionnel);    
      _tabError[erreur] = tel_professionnel;
      erreur++;
      _error = true;
    } else {
      tel_professionnel.value = result;
      fieldOk(tel_professionnel);	
    }
  }
  
  // Le champs mobile_professionnel est de type telephone
  if ( 
    (typeof(mobile_professionnel) != 'undefined') && 
    mobile_professionnel.type != 'hidden' &&
    !isEmpty (mobile_professionnel)   
  ){
    var result = isPhone(mobile_professionnel.value);
    if ( result < 0 ){
      message += msg[10].replace(/{d}/g, mobile_professionnelLabel.title);
      fieldError(mobile_professionnel);    
      _tabError[erreur] = mobile_professionnel;
      erreur++;
      _error = true;
    } else {
      mobile_professionnel.value = result;
      fieldOk(mobile_professionnel);	
    }
  }

  // Le champs fax_professionnel est de type telephone
  if ( 
    (typeof(fax_professionnel) != 'undefined') && 
    fax_professionnel.type != 'hidden' &&
    !isEmpty (fax_professionnel)   
  ){
    var result = isPhone(fax_professionnel.value);
    if ( result < 0 ){
      message += msg[10].replace(/{d}/g, fax_professionnelLabel.title);
      fieldError(fax_professionnel);    
      _tabError[erreur] = fax_professionnel;
      erreur++;
      _error = true;
    } else {
      fax_professionnel.value = result;
      fieldOk(fax_professionnel);	
    }
  }
    
  // Le champs societe est de type texte
  if ( 
    (typeof(societe) != 'undefined') && 
    societe.type != 'hidden' &&
    !isEmpty (societe)   
  ){
    if (  !isText(societe.value) ){
      message += msg[6].replace(/{d}/g, societeLabel.title);
      fieldError(societe);    
      _tabError[erreur] = societe;
      erreur++;
      _error = true;	
    } else {
      fieldOk(societe);
    }
  } 

  // Le champs profession est de type texte
  if ( 
    (typeof(profession) != 'undefined') &&  
    profession.type != 'hidden' &&
    !isEmpty (profession)    
  ){
    if (  !isText(profession.value) ){
      message += msg[6].replace(/{d}/g, professionLabel.title);
      fieldError(profession);    
      _tabError[erreur] = profession;
      erreur++;
      _error = true;	
    } else {
      fieldOk(profession);
    }
  }
  
  // Traitement des erreurs
  if (_error == true)
  {
    if ( erreur > 1 ){
      message = msg1 + message;
    } else {
      message = msg2 + message;	
    }
    alert(message);
  } else {
    _submitted = true;
    formulaire.submit();
  }
} 