<!--
// Cette variable est utilisée pour ne pas lancer les tests
// sur le onSubmit quand un champ a une valeur incorrecte
var test = true;

// Messages d'erreur par langues
//******************************

// Français
FORM_REQUIRED_FIELDS_fr = "\nLa ou les valeurs suivantes sont obligatoires :\n\n\t";
FORM_INVALID_EMAIL_fr = "L'adresse email n'est pas valide";
FORM_INVALID_DATE_fr = "La date doit être sous la forme jj/mm/aaaa";
FORM_INVALID_DATELIBRE_fr = "La date doit être sous la forme jj/mm/aaaa ou mm/aaaa ou aaaa";
FORM_INVALID_DATEMOISANNEE_fr = "La date doit être sous la forme mm/aaaa";
FORM_INVALID_DATEJOURMOIS_fr = "La date doit être sous la forme jj/mm";
FORM_INVALID_MONTH_fr = "Le mois n'est pas valide";
FORM_INVALID_YEAR_fr = "L'année n'est pas bissextile";
FORM_INVALID_DAY_fr = "Le jour n'est pas valide";
FORM_INVALID_NUMBER_fr = "Ceci n'est pas un nombre valide\n- le séparateur de décimales est le point (.)\n- ne mettez pas d'espace";
FORM_ZERO_NOT_ALLOWED_fr = "La valeur ne peut pas être nulle";
FORM_POSITIVE_NOT_ALLOWED_fr = "Les valeurs positives ne sont pas acceptées";
FORM_NEGATIVE_NOT_ALLOWED_fr = "Les valeurs négatives ne sont pas acceptées";
FORM_DECIMAL_NOT_ALLOWED_fr = "Les nombres décimaux ne sont pas acceptés";
FORM_INTPART_TOO_LONG_fr = "La partie entière ne doit comporter que %1 chiffres au maximum";
FORM_DECPART_TOO_LONG_fr = "La partie décimale ne doit comporter que %1 chiffres au maximum";
FORM_OVERFLOW_fr = "La valeur doit être %1 à %2";
FORM_TOO_LONG_fr = "Le texte ne peut contenir que %1 caractères"

// Anglais
FORM_REQUIRED_FIELDS_en = "\nThe following fields are required :\n\n\t";
FORM_INVALID_EMAIL_ = "Invalid email address";
FORM_INVALID_DATE_en = "Date must be dd/mm/yyyy";
FORM_INVALID_DATELIBRE_en = "Date must be dd/mm/yyyy or mm/yyyy or yyyy";
FORM_INVALID_DATEMOISANNEE_en = "Date must be mm/yyyy";
FORM_INVALID_DATEJOURMOIS_en = "Date must be dd/mm";
FORM_INVALID_MONTH_en = "Invalid month";
FORM_INVALID_YEAR_en = "This year is not bissextile";
FORM_INVALID_DAY_en = "Invalid day";
FORM_INVALID_NUMBER_en = "Invalid number format";
FORM_ZERO_NOT_ALLOWED_en = "Zero is not allowed";
FORM_POSITIVE_NOT_ALLOWED_en = "Positive numbers are not allowed";
FORM_NEGATIVE_NOT_ALLOWED_en = "Negative numbers are not allowed";
FORM_DECIMAL_NOT_ALLOWED_en = "Decimal numbers are not allowed";
FORM_INTPART_TOO_LONG_en = "Integer part must contain less than %1 figures";
FORM_DECPART_TOO_LONG_en = "Decimal part must contain less than %1 figures";
FORM_OVERFLOW_en = "Value must be %1 than %2";
FORM_TOO_LONG_en = "Text must contain less than %1 characters"

/* Fonction message
** Renvoie un message d'erreur dans la langue voulue
**
** Parametres:
**   msg = Nom du message
**   lang = Langue dans laquelle le message doit être renvoyé
**   args = tableau contenant les paramètres du message
**
** Retour:
**   String message dans la bonne langue avec les arguments remplacés
*/
function message( msg, lang, args )
{
  // Récupération du message dans la bonne langue
  eval("result = " + msg + "_" + lang + ";");
  re = /%([0-9])/;
	while (re.test(result)) {
	  // Remplacement de %i par args[i]
	  result = result.replace("%" + RegExp.$1, args[RegExp.$1 - 1]);
	}
  
  return result;
}

/* Fonction checkLength
** Vérifie que le contenu du champ indiqué ne dépasse pas une certaine taille
**
** Parametres:
**   obj = champ à tester
**   lang = langue utilisée pour les messages
**   maxLength = taille maximale
**
** Retour:
**   booléen true  si la taille limite n'est pas dépassée
**           false sinon
*/
function checkLength( obj, lang, maxLength ) {
  if (obj.value.length > maxLength) {
    // Traitement d'erreur
    alert(message("FORM_TOO_LONG",lang,new Array(maxLength)));
    test = false;
    obj.focus();
    return false;
  } else {
    return true;
  }
}

/* Fonction isNumeric
** Vérifie que le contenu du champ indiqué représente un format numérique
**
** Parametres:
**   obj = champ à tester
**   lang = langue utilisée pour les messages
**   positiveAllowed = booléan indiquant si les nombres positifs sont acceptés
**   negativeAllowed = booléan indiquant si les nombres négatifs sont acceptés
**   zeroAllowed = booléan indiquant si zéro est accepté
**   decimalAllowed = booléan indiquant si les nombres décimaux sont acceptés
**   beforeSeparator = nombre de chiffres acceptés avant le séparateur de décimales ('' si pas précisé)
**   afterSeparator = nombre de chiffres acceptés après le séparateur de décimales ('' si pas précisé)
**   maxValue = valeur maximale acceptée ('' si pas précisé)
**   maxComparison = méthode de comparaison par rapport à la valeur maximale (< ou <=) ('' si pas précisé)
**   minValue = valeur minimale acceptée ('' si pas précisé)
**   minComparison = méthode de comparaison par rapport à la valeur minimale (> ou >=) ('' si pas précisé)
**
** Retour:
**   booléen true  si le champ contient une chaine vide ou
**                 un nombre correspondant aux paramètres désirés
**           false sinon
*/
function isNumeric( obj, lang,
                    positiveAllowed, negativeAllowed,
                    zeroAllowed, decimalAllowed,
                    beforeSeparator, afterSeparator,
                    maxValue, maxComparison,
                    minValue, minComparison )
{
  test = true;

  // Récupération de la valeur contenue dans le champ
  var value = obj.value;
  
  // On ne fait pas de tests si le champ est vide
	if (value.length == 0) {
	  return true;
	} else {
	  // Vérification du format numérique
	  re = /^[+-]{0,1}([0-9]*)[.]{0,1}([0-9]*)$/;
	  if (re.test(value)) {
	    // Ceci sert à supprimer les zéros inutiles
	    value = parseFloat(value);
	    re.test(value);
	    // On récupère les parties entière et décimale
	    intPart = RegExp.$1;
	    decPart = RegExp.$2;
	  } else {
	    // Traitement d'erreur
	    alert(message("FORM_INVALID_NUMBER",lang,""));
	    test = false;
	    obj.focus();
	    return false;
	  }
	  
	  // Vérification sur le zéro
	  if (!zeroAllowed && value == 0) {
	    // Traitement d'erreur
	    alert(message("FORM_ZERO_NOT_ALLOWED",lang,""));
	    test = false;
	    obj.focus();
	    return false;
	  }
	  
	  // Vérification sur les nombres positifs
	  if (!positiveAllowed && String(value).charAt(0) != '-' && value != 0) {
	    // Traitement d'erreur
	    alert(message("FORM_POSITIVE_NOT_ALLOWED",lang,""));
	    test = false;
	    obj.focus();
	    return false;
	  }
	  
	  // Vérification sur les nombres négatifs
	  if (!negativeAllowed && String(value).charAt(0) == '-') {
	    // Traitement d'erreur
	    alert(message("FORM_NEGATIVE_NOT_ALLOWED",lang,""));
	    test = false;
	    obj.focus();
	    return false;
	  }
	  
	  // Vérification sur les nombres décimaux
	  if (!decimalAllowed && decPart.length != 0) {
	    // Traitement d'erreur
	    alert(message("FORM_DECIMAL_NOT_ALLOWED",lang,""));
	    test = false;
	    obj.focus();
	    return false;
	  }
	  
	  // Vérification sur le nombre de chiffres avant le séparateur
	  if (beforeSeparator != '' && (intPart.length > beforeSeparator)) {
	    // Traitement d'erreur
	    alert(message("FORM_INTPART_TOO_LONG",lang,new Array(beforeSeparator)));
	    test = false;
	    obj.focus();
	    return false;
	  }
	  
	  // Vérification sur le nombre de chiffres après le séparateur
	  if (afterSeparator != '' && (decPart.length > afterSeparator)) {
	    // Traitement d'erreur
	    alert(message("FORM_DECPART_TOO_LONG",lang,new Array(afterSeparator)));
	    test = false;
	    obj.focus();
	    return false;
	  }
	  
	  // Vérification par rapport la valeur maximale
	  if (maxValue != '') {
	    // Test en fonction de la méthode de comparaison
	    eval("res = (" + value + maxComparison + maxValue + ");");
	    if (!res) {
	      // Traitement d'erreur
	      alert(message("FORM_OVERFLOW",lang,new Array(maxComparison,maxValue)));
	      test = false;
  	    obj.focus();
  	    return false;
	    }
	  }
	  // Vérification par rapport la valeur minimale
	  if (minValue != '') {
	    // Test en fonction de la méthode de comparaison
	    eval("res = (" + value + minComparison + minValue + ");");
	    if (!res) {
	      // Traitement d'erreur
  	    alert(message("FORM_OVERFLOW",lang,new Array(minComparison,minValue)));
  	    test = false;
  	    obj.focus();
  	    return false;
  	  }
	  }
	}
  
  return true;
}

/* Fonction isMail
** Vérifie que le contenu du champ indiqué représente un format d'adresse email valide
**
** Parametres:
**   obj = champ à tester
**   lang = langue utilisée pour les messages
**
** Retour:
**   booléen true si le champ contient une adresse email ou une chaine vide
**           false sinon
*/
function isMail( obj, lang )
{
  test = true;

  // Récupération de la valeur contenue dans le champ
  var value = obj.value;
  
  // On ne fait pas de tests si le champ est vide
	if (value.length == 0) {
	  return true;
	} else {
	  // Vérification du format numérique de la date
	  re = /^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)+$/;
	  if (!re.test(value)) {
	    // Traitement d'erreur
	    alert(message("FORM_INVALID_EMAIL",lang,""));
	    test = false;
	    obj.focus();
	    return false;
	  }	  	  
	}
	return true;
};

/* Fonction isDate
** Vérifie que le contenu du champ indiqué représente un format de date valide
**
** Parametres:
**   obj = champ à tester
**   lang = langue utilisée pour les messages
**
** Retour:
**   booléen true si le champ contient une date ou une chaine vide
**           false sinon
*/
function isDate( obj, lang )
{
  test = true;

  // Récupération de la valeur contenue dans le champ
  var value = obj.value;
  
  // Variables qui contiendront les différentes parties de la date
  var jour = "";
  var mois = "";
  var annee = "";
  
  // Tableau contenant le nombre de jours par mois
	var nb_jours;
  nb_jours = new Array();
	nb_jours[1] = 31;
	nb_jours[2] = 28;
	nb_jours[3] = 31;
	nb_jours[4] = 30;
	nb_jours[5] = 31;
	nb_jours[6] = 30;
	nb_jours[7] = 31;
	nb_jours[8] = 31;
	nb_jours[9] = 30;
	nb_jours[10] = 31;
	nb_jours[11] = 30;
	nb_jours[12] = 31;
	
	// On ne fait pas de tests si le champ est vide
	if (value.length == 0) {
	  return true;
	} else {
	  // Vérification du format numérique de la date
	  re = /^([0-9]{1,2})\/([0-9]{1,2})\/([0-9]{4})$/;
	  if (re.test(value)) {
	    // On renseigne les variables contenant les éléments de la date
	    jour = RegExp.$1;
	    mois = RegExp.$2;
	    annee = RegExp.$3;
	  } else {
	    // Traitement d'erreur
	    alert(message("FORM_INVALID_DATE",lang,""));
	    test = false;
	    obj.focus();
	    return false;
	  }
	  
	  // Vérification sur le mois
	  if (mois > 12 || mois < 1) {
	    // Traitement d'erreur
	    alert(message("FORM_INVALID_MONTH",lang,""));
	    test = false;
	    obj.focus();
	    return false;
	  }
	  
	  // Vérification sur le jour
	  if (jour > nb_jours[mois] || jour < 1) {
	    // Cas particulier de février
	    if (mois == 2 && jour == 29) {
	      // une année bissextile est divisible par 4,
	      // pas par 100 sauf si elle est divisible par 400
	      if (!((annee % 4 == 0) && ((annee % 100 != 0) ||(annee % 400 == 0)))) {
	        // Traitement d'erreur
    	    alert(message("FORM_INVALID_YEAR",lang,""));
    	    test = false;
    	    obj.focus();
    	    return false;
    	  }
    	} else {
    	  // Traitement d'erreur
  	    alert(message("FORM_INVALID_DAY",lang,""));
  	    test = false;
  	    obj.focus();
  	    return false;
  	  }
  	}	  
	}
	return true;
};

/* Fonction isDateLibre
** Vérifie que le contenu du champ indiqué représente un format de date libre valide
** (JJ/MM/AAAA ou MM/AAAA ou AAAA)
**
** Parametres:
**   obj = champ à tester
**   lang = langue utilisée pour les messages
**
** Retour:
**   booléen true si le champ contient une date ou une chaine vide
**           false sinon
*/
function isDateLibre( obj, lang )
{
  test = true;

  // Récupération de la valeur contenue dans le champ
  var value = obj.value;
  
  // Variables qui contiendront les différentes parties de la date
  var jour = "";
  var mois = "";
  var annee = "";
  
  // Tableau contenant le nombre de jours par mois
	var nb_jours;
  nb_jours = new Array();
	nb_jours[1] = 31;
	nb_jours[2] = 28;
	nb_jours[3] = 31;
	nb_jours[4] = 30;
	nb_jours[5] = 31;
	nb_jours[6] = 30;
	nb_jours[7] = 31;
	nb_jours[8] = 31;
	nb_jours[9] = 30;
	nb_jours[10] = 31;
	nb_jours[11] = 30;
	nb_jours[12] = 31;
	
	// On ne fait pas de tests si le champ est vide
	if (value.length == 0) {
	  return true;
	} else {
	  // Vérification du format numérique de la date JJ/MM/AAAA
	  re = /^([0-9]{1,2})\/([0-9]{1,2})\/([0-9]{4})$/;
	  if (re.test(value)) {
	    // On renseigne les variables contenant les éléments de la date
	    jour = RegExp.$1;
	    mois = RegExp.$2;
	    annee = RegExp.$3;
	    
	    // Vérification sur le mois
  	  if (mois > 12 || mois < 1) {
  	    // Traitement d'erreur
  	    alert(message("FORM_INVALID_MONTH",lang,""));
  	    test = false;
  	    obj.focus();
  	    return false;
  	  }
  	  
  	  // Vérification sur le jour
  	  if (jour > nb_jours[mois] || jour < 1) {
  	    // Cas particulier de février
  	    if (mois == 2 && jour == 29) {
  	      // une année bissextile est divisible par 4,
  	      // pas par 100 sauf si elle est divisible par 400
  	      if (!((annee % 4 == 0) && ((annee % 100 != 0) ||(annee % 400 == 0)))) {
  	        // Traitement d'erreur
      	    alert(message("FORM_INVALID_YEAR",lang,""));
      	    test = false;
      	    obj.focus();
      	    return false;
      	  }
      	} else {
      	  // Traitement d'erreur
    	    alert(message("FORM_INVALID_DAY",lang,""));
    	    test = false;
    	    obj.focus();
    	    return false;
    	  }
    	}
	  } else {
	    
	    // Vérification du format numérique de la date MM/AAAA
	    re = /^([0-9]{1,2})\/([0-9]{4})$/;
	    if (re.test(value)) {
  	    // On renseigne les variables contenant les éléments de la date
  	    mois = RegExp.$1;
  	    annee = RegExp.$2;
  	    
  	    // Vérification sur le mois
    	  if (mois > 12 || mois < 1) {
    	    // Traitement d'erreur
    	    alert(message("FORM_INVALID_MONTH",lang,""));
    	    test = false;
    	    obj.focus();
    	    return false;
    	  }
  	  } else {
  	    // Vérification du format numérique de la date MM/AAAA
  	    re = /^([0-9]{4})$/;
  	    if (re.test(value) == false) {
  	      // Traitement d'erreur
    	    alert(message("FORM_INVALID_DATELIBRE",lang,""));
    	    test = false;
    	    obj.focus();
    	    return false;
    	  }  	      
  	  }
	  }	  
	}
	return true;
};

/* Fonction isDateMoisAnnee
** Vérifie que le contenu du champ indiqué représente une date sous la forme mm/aaaa
**
** Parametres:
**   obj = champ à tester
**   lang = langue utilisée pour les messages
**
** Retour:
**   booléen true si le champ contient une date ou une chaine vide
**           false sinon
*/
function isDateMoisAnnee( obj, lang )
{
  test = true;

  // Récupération de la valeur contenue dans le champ
  var value = obj.value;
  
  // Variables qui contiendront les différentes parties de la date
  var mois = "";
  var annee = "";
	
	// On ne fait pas de tests si le champ est vide
	if (value.length == 0) {
	  return true;
	} else {
	  // Vérification du format numérique de la date
	  re = /^([0-9]{1,2})\/([0-9]{4})$/;
	  if (re.test(value)) {
	    // On renseigne les variables contenant les éléments de la date
	    mois = RegExp.$1;
	    annee = RegExp.$2;
	  } else {
	    // Traitement d'erreur
	    alert(message("FORM_INVALID_DATEMOISANNEE",lang,""));
	    test = false;
	    obj.focus();
	    return false;
	  }
	  
	  // Vérification sur le mois
	  if (mois > 12 || mois < 1) {
	    // Traitement d'erreur
	    alert(message("FORM_INVALID_MONTH",lang,""));
	    test = false;
	    obj.focus();
	    return false;
	  }
	}
	return true;
};

/* Fonction isDateJourMois
** Vérifie que le contenu du champ indiqué représente une date sous la forme jj/mm
**
** Parametres:
**   obj = champ à tester
**   lang = langue utilisée pour les messages
**
** Retour:
**   booléen true si le champ contient une date ou une chaine vide
**           false sinon
*/
function isDateJourMois( obj, lang )
{
  test = true;

  // Récupération de la valeur contenue dans le champ
  var value = obj.value;
  
  // Variables qui contiendront les différentes parties de la date
  var jour = "";
  var mois = "";
  
  // Tableau contenant le nombre de jours par mois
	var nb_jours;
  nb_jours = new Array();
	nb_jours[1] = 31;
	nb_jours[2] = 28;
	nb_jours[3] = 31;
	nb_jours[4] = 30;
	nb_jours[5] = 31;
	nb_jours[6] = 30;
	nb_jours[7] = 31;
	nb_jours[8] = 31;
	nb_jours[9] = 30;
	nb_jours[10] = 31;
	nb_jours[11] = 30;
	nb_jours[12] = 31;
	
	// On ne fait pas de tests si le champ est vide
	if (value.length == 0) {
	  return true;
	} else {
	  // Vérification du format numérique de la date
	  re = /^([0-9]{1,2})\/([0-9]{1,2})$/;
	  if (re.test(value)) {
	    // On renseigne les variables contenant les éléments de la date
	    jour = RegExp.$1;
	    mois = RegExp.$2;
	  } else {
	    // Traitement d'erreur
	    alert(message("FORM_INVALID_DATEJOURMOIS",lang,""));
	    test = false;
	    obj.focus();
	    return false;
	  }
	  
	  // Vérification sur le mois
	  if (mois > 12 || mois < 1) {
	    // Traitement d'erreur
	    alert(message("FORM_INVALID_MONTH",lang,""));
	    test = false;
	    obj.focus();
	    return false;
	  }
	  
	  // Vérification sur le jour
	  if (jour > nb_jours[mois] || jour < 1) {
	    // Traitement d'erreur
	    alert(message("FORM_INVALID_DAY",lang,""));
	    test = false;
	    obj.focus();
	    return false;
  	}	  
	}
	return true;
};

/* Fonction trim
** Supprime les espaces aux extrêmes d'une chaine de caractères
**
** Parametres:
**   valeur = chaine de caractère à traiter
**
** Retour:
**   Chaine sans les espaces à droite et à gauche
*/
function trim(valeur) {
	var index1 = 0;
	var index2 = valeur.length;	

	// Compte les espaces à gauche
	while (valeur.charAt(index1) == " ") {
		index1++;
	}
	// Si toute la chaine comporte des espaces
	// le résultat est une chaine vide
	if (index1 == valeur.length) {return ""}

	// Compte les espaces à droite
	while (valeur.charAt(index2-1) == " ") {
		index2--;
	}
	// Renvoie la chaine traitée
	return valeur.substring(index1,index2);
};


/* Fonction checkRequiredFields
** Teste si les champs dont les noms sont passés en paramètres sont remplis
** Si un ou plusieurs champs sont vides, un message les listant tous apparait
** (les noms utilisés sont ceux de fieldLabels qui sont plus explicites)
**
** Paramètres:
**   names = tableau contenant le nom des champs à tester
**   labels = tableau contenant les libellés des champs à tester, ces
**                 libellés sont utilisés dans le message d'erreur
**   input = formulaire à tester
**   lang = langue utilisée pour les messages
**
** Retour:
**   booléen true si tous les champs sont remplis
**           false sinon
**
** Exemple:
** <form ... onSubmit="return checkRequiredFields(new Array('strNom','strMatricule'),
**                                                new Array('Nom','Matricule'), this)"
*/
function checkRequiredFields(names, labels, input, lang)
{ 
  if (test == false) {
    test = true;
    return false;
  } else {
    var focusSet = false;
    var fieldCheck   = true;
    var fieldsNeeded = message("FORM_REQUIRED_FIELDS",lang,"");    
    for(var fieldNum=0; fieldNum < names.length; fieldNum++) {
      // On vérifie que le champ existe
      if (typeof(input.elements[names[fieldNum]]) != 'undefined') {

         if (input.elements[names[fieldNum]].type == 'select-one')  {
           // cas d'une combobox
           var contenu;
           contenu = input.elements[names[fieldNum]].options[input.elements[names[fieldNum]].selectedIndex].value;
           if ((contenu == "") || (contenu == "null")) {
             if (!focusSet) {
	    			  input.elements[names[fieldNum]].focus();
	    			  focusSet = true;
	    		  }
            fieldsNeeded += labels[fieldNum] + "\n\t";
            fieldCheck = false;
           }
         } else {
          // Cas général
          if (trim(input.elements[names[fieldNum]].value) == "") {
	    		  if (!focusSet) {
	    			  input.elements[names[fieldNum]].focus();
	    			  focusSet = true;
	    		  }
	    		  
            fieldsNeeded += labels[fieldNum] + "\n\t";
            fieldCheck = false;
          }
        }
      }
    }

    // ALL REQUIRED FIELDS HAVE BEEN ENTERED
    if (fieldCheck == true){
        return true;
    }
    // SOME REQUIRED FIELDS ARE MISSING VALUES
    else{
        alert(fieldsNeeded);
        return false;
    }
  }
};

function changement(theme,photo) {

 	if (document.images) {
		document.images['myImage'].src = 'images/photos/'+theme+'/v_'+photo+'.jpg'; 	

 	}
 };

//-->

