// $Id: lib.js,v 1.74.4.1 2009/09/18 10:21:31 ac Exp $
//


// Contrôler que la valeur saisie dans l'objet TEXT n'est pas vide.
function notNull(TheText) {
   if ( TheText.value.length == 0 ) {
      alert(' Ce champ ne peut pas être vide ')
      //TheText.focus() 
      return false
   }
   return true
}

// Passer la valeur saisie dans l'objet TEXT en Majuscule.
function upperCase(TheText) {
    TheText.value=TheText.value.toUpperCase()
    return true
}


// Afficher un message d'aide dans la ligne de status du browser
function helpMessage(TheHelp) {
   status=TheHelp
   return true
}

// Pour afficher correctement les caracteres speciaux html dans les alert js
function html_entity_decode(str) {
  var ta=document.createElement("textarea");
  ta.innerHTML=str.replace(/</g,"&lt;").replace(/>/g,"&gt;");
  return ta.value;
}

function emailCheck (emailStr) {
/* The following pattern is used to check if the entered e-mail address
   fits the user@domain format.  It also is used to separate the username
   from the domain. */
var emailPat=/^(.+)@(.+)$/
/* The following string represents the pattern for matching all special
   characters.  We don't want to allow special characters in the address. 
   These characters include ( ) < > @ , ; : \ " . [ ]    */
var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]"
/* The following string represents the range of characters allowed in a 
   username or domainname.  It really states which chars aren't allowed. */
var validChars="\[^\\s" + specialChars + "\]"
/* The following pattern applies if the "user" is a quoted string (in
   which case, there are no rules about which characters are allowed
   and which aren't; anything goes).  E.g. "jiminy cricket"@disney.com
   is a legal e-mail address. */
var quotedUser="(\"[^\"]*\")"
/* The following pattern applies for domains that are IP addresses,
   rather than symbolic names.  E.g. joe@[123.124.233.4] is a legal
   e-mail address. NOTE: The square brackets are required. */
var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/
/* The following string represents an atom (basically a series of
   non-special characters.) */
var atom=validChars + '+'
/* The following string represents one word in the typical username.
   For example, in john.doe@somewhere.com, john and doe are words.
   Basically, a word is either an atom or quoted string. */
var word="(" + atom + "|" + quotedUser + ")"
// The following pattern describes the structure of the user
var userPat=new RegExp("^" + word + "(\\." + word + ")*$")
/* The following pattern describes the structure of a normal symbolic
   domain, as opposed to ipDomainPat, shown above. */
var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$")


/* Finally, let's start trying to figure out if the supplied address is
   valid. */

/* Begin with the coarse pattern to simply break up user@domain into
   different pieces that are easy to analyze. */
var matchArray=emailStr.match(emailPat)
if (matchArray==null) {
  /* Too many/few @'s or something; basically, this address doesn't
     even fit the general mould of a valid e-mail address. */
	alert("Email address seems incorrect (check @ and .'s)")
	return false
}
var user=matchArray[1]
var domain=matchArray[2]

// See if "user" is valid 
if (user.match(userPat)==null) {
    // user is not valid
    alert("The username doesn't seem to be valid.")
    return false
}

/* if the e-mail address is at an IP address (as opposed to a symbolic
   host name) make sure the IP address is valid. */
var IPArray=domain.match(ipDomainPat)
if (IPArray!=null) {
    // this is an IP address
	  for (var i=1;i<=4;i++) {
	    if (IPArray[i]>255) {
	        alert("Destination IP address is invalid!")
		return false
	    }
    }
    return true
}

// Domain is symbolic name
var domainArray=domain.match(domainPat)
if (domainArray==null) {
	alert("The domain name doesn't seem to be valid.")
    return false
}

/* domain name seems valid, but now make sure that it ends in a
   three-letter word (like com, edu, gov) or a two-letter word,
   representing country (uk, nl), and that there's a hostname preceding 
   the domain or country. */

/* Now we need to break up the domain to get a count of how many atoms
   it consists of. */
var atomPat=new RegExp(atom,"g")
var domArr=domain.match(atomPat)
var len=domArr.length
if (domArr[domArr.length-1].length<2 || 
    domArr[domArr.length-1].length>3) {
   // the address must end in a two letter or three letter word.
   alert("The address must end in a three-letter domain, or two letter country.")
   return false
}

// Make sure there's a host name preceding the domain.
if (len<2) {
   var errStr="This address is missing a hostname!"
   alert(errStr)
   return false
}

// If we've gotten this far, everything's valid!
return true;
}


//
// GESTION DES DATES
//
// Memo nous supposons qu'une date est constituée de 3 champs de type comboBox consécutifs.
// Donc si l'indice du champ du jour est x dans le formulaire, le champ du mois est x+1 celui
// de l'année est x+2. On passe alors uniquement la référence sur le champ jour.

// Formatte une chaine de 1 caractère sur 2 caractères en faisant précéder le char par '0'
function formatSurDeuxChar(chaine) {
   if ( new String(chaine).length == 1 ) {
      var formatChaine=new String('0'+chaine);
      return formatChaine;
   }
   return chaine;
}

// Format l'annee sur 4 char (95->1995)
function formatYear(chaine){
    var yr = parseInt(chaine);
    if(chaine.length == 2){
        if(yr <=10){
            yr += 2000;
        }
        else{
            yr += 1900;
        }
    }
    
    return yr.toString();
}

// Fonction vérifiant que la série de 3 entiers est bien une date valide.
function isDateValid(dd, mm, yyyy) {
    //alert(dd+" "+mm+" "+yyyy);
    if (dd < 1 || dd > 31 || mm < 1 || mm > 12) return false
    if (mm == 2) {
      if (dd == 30 || dd == 31) return false
      if (dd == 29) return ((yyyy % 4 == 0 && yyyy % 100 != 0) || yyyy % 400 == 0)
    }
    else if (dd == 31)
      return !( mm == 4 || mm == 6 || mm == 9 || mm == 11 )
    return true
}

function DateValidator(date) {
  if(date=="10000000"){
	  return true;
  }
  var d = parseInt(date.substring(6,8),10);
  var mth = parseInt(date.substring(4,6),10);
  var yr = parseInt(date.substring(0,4),10);
  if(!isDateValid(d,mth,yr)){
    	alert("Date saisie ("+date.substring(6,8)+"/"+date.substring(4,6)+"/"+date.substring(0,4)+") invalide");
	return false;
  }
  return true;
}

function getIndiceObjectInForm(TheObject){
  var indice
  //alert('getIndice avant boucle')
  for (indice=0;indice <= TheObject.form.elements.length;indice++){
    //alert('boucle indice: '+indice+' parcourt obj:'+TheObject.form.elements[indice].name+' obj cherché: '+TheObject.name)
    if (TheObject.form.elements[indice].name == TheObject.name){
      break
    }
  }
  return indice
}

function NewValideFourchetteDeDates(jourdt1,jourdt2,dathiden1,dathiden2) {
   //alert('on est dans ValideFourchetteDeDates')
   //alert(jourdt1+" "+jourdt2+" "+dathiden1+" "+dathiden2);
   if (NewValiderDate(jourdt1) == false){
     return false
   }
   if (NewValiderDate(jourdt2) == false){
     return false
   }
   var indice =  getIndiceObjectInForm(jourdt1)
   var jourt1 = jourdt1.form.elements[indice].options[jourdt1.selectedIndex].value
   var moisyr1 = jourdt1.form.elements[indice+1].options[jourdt1.form.elements[indice+1].selectedIndex].value
   
   indice =  getIndiceObjectInForm(jourdt2)
   var jourt2 = jourdt2.form.elements[indice].options[jourdt2.selectedIndex].value;
   var moisyr2 = jourdt2.form.elements[indice+1].options[jourdt2.form.elements[indice+1].selectedIndex].value

   var jour_debut   =  parseInt(jourt1, 10);
   var mois_debut   =  parseInt(moisyr1.substring(0,2),10);
   var annee_debut  =  parseInt(moisyr1.substring(2,6),10)
   var jour_fin     =  parseInt(jourt2,10)
   var mois_fin     =  parseInt(moisyr2.substring(0,2),10)
   //var annee_fin    =  parseInt(anneedt2.options[anneedt2.selectedIndex].value)
   var annee_fin    =  parseInt(moisyr2.substring(2,6),10)
   var isOk=true

   if(mois_debut > 12){
      mois_debut -= 12
      annee_debut +=1
   }
   if(mois_fin > 12){
      mois_fin -= 12
      annee_fin +=1
   }

   if ( annee_fin < annee_debut ) {
      isOk=false
   }
   else {
      if ( annee_fin==annee_debut && mois_fin < mois_debut ) {
         isOk=false
      }
      else {
         if ( annee_fin==annee_debut && mois_fin==mois_debut && jour_fin<jour_debut ) {
            isOk=false
         }
      }
   }
   if ( !isOk ) {
     alert(' Fourchette de dates incorrecte ')
     return false
   }
   return true
}

function ValideFourchetteDeDates(jourdt1,jourdt2,dathiden1,dathiden2) {
   //alert('on est dans ValideFourchetteDeDates')
   //alert(jourdt1+" "+jourdt2+" "+dathiden1+" "+dathiden2);
   if ( ValiderDate(jourdt1) == false){
     return false
   }
   if ( ValiderDate(jourdt2) == false){
     return false
   }
   var indice =  getIndiceObjectInForm(jourdt1)
   var jourdt1 = jourdt1.form.elements[indice]
   var moisdt1 = jourdt1.form.elements[indice+1]
   var anneedt1 = jourdt1.form.elements[indice+2]
   indice =  getIndiceObjectInForm(jourdt2)
   var jourdt2 = jourdt1.form.elements[indice]
   var moisdt2 = jourdt1.form.elements[indice+1]
   var anneedt2 = jourdt1.form.elements[indice+2]
   var jour_debut   =  parseInt(jourdt1.options[jourdt1.selectedIndex].value,10)
   var mois_debut   =  parseInt(moisdt1.options[moisdt1.selectedIndex].value,10)
   //var annee_debut  =  parseInt(anneedt1.options[anneedt1.selectedIndex].value)
   var annee_debut  =  parseInt(anneedt1.value)
   var jour_fin     =  parseInt(jourdt2.options[jourdt2.selectedIndex].value,10)
   var mois_fin     =  parseInt(moisdt2.options[moisdt2.selectedIndex].value,10)
   //var annee_fin    =  parseInt(anneedt2.options[anneedt2.selectedIndex].value)
   var annee_fin    =  parseInt(anneedt2.value,10)
   var isOk=true

   if(mois_debut > 12){
      mois_debut -= 12
      annee_debut +=1
   }
   if(mois_fin > 12){
      mois_fin -= 12
      annee_fin +=1
   }

   if ( annee_fin < annee_debut ) {
      isOk=false
   }
   else {
      if ( annee_fin==annee_debut && mois_fin < mois_debut ) {
         isOk=false
      }
      else {
         if ( annee_fin==annee_debut && mois_fin==mois_debut && jour_fin<jour_debut ) {
            isOk=false
         }
      }
   }
   if ( !isOk ) {
     alert(' Fourchette de dates incorrecte ')
     return false
   }
   return true
}

/* Convertit une date jjmmaaaa au format dsagl aaaammjj */
function ConvDateFormatDsAgl(Jour, AglDate) {
    //alert("ConvDateFormatDsAgl() Jour="+Jour.value);

    var indice = getIndiceObjectInForm(Jour);
    var MthYr = Jour.form.elements[indice+1];

    var jour=formatSurDeuxChar(Jour.options[Jour.selectedIndex].value.toString());
    //alert("Jour="+jour);
    var moisyr=MthYr.options[MthYr.selectedIndex].value;
    //alert("MoisYr="+moisyr);

    var yr =moisyr.substring(2,6);
    var mth = moisyr.substring(0,2);

    AglDate.value = yr+mth+jour;

    //alert('conversion finie: '+AglDate.value);
    return true;
}

function ConvDateOldFormatDsAgl(Jour,ChaineDateHiden) {
  //alert('Dans ConvDateFormatDsAgl')
  var indice = getIndiceObjectInForm(Jour)
  var Mois = Jour.form.elements[indice+1]
  var Annee = Jour.form.elements[indice+2]
  var jour=formatSurDeuxChar(Jour.options[Jour.selectedIndex].value.toString())
  var mois=formatSurDeuxChar(Mois.options[Mois.selectedIndex].value)
  var annee=Annee.value

  var moisInt = parseInt(mois,10);
  var anneeInt = parseInt(annee,10);
  
  //ChaineDateHiden.value =new String(Annee.options[Annee.selectedIndex].value+mois+jour)
  
  //alert('jour: '+jour)
  //alert('mois: '+mois)
  //alert('annee: '+annee)

  if( moisInt > 12 ){
    moisInt -= 12
    anneeInt += 1
  }
  //alert(' inside ConvDateFormatDsAgl: moisInt: ' + moisInt )
  //alert('format sur 2 char du mois' + formatSurDeuxChar(moisInt))
  //ChaineDateHiden.value =new String(Annee.value+moisInt+jour)
  var moisStr = new String(moisInt);
  var anneeStr = new String(anneeInt);
  ChaineDateHiden.value =new String(anneeStr + formatSurDeuxChar(moisStr) + jour)
  //alert('conversion de '+ChaineDateHiden.value)
  return true
}

function ConvTimeFormatDsAgl(Hour,ChaineTimeHiden) {
  var indice = getIndiceObjectInForm(Hour)
  var Min = Hour.form.elements[indice+1]
  var hour=formatSurDeuxChar(Hour.options[Hour.selectedIndex].value)
  var min=formatSurDeuxChar(Min.options[Min.selectedIndex].value)
  ChaineTimeHiden.value =new String(hour+min)
  return true
}

/* Validation d'une date à partir du champ JOUR
 * Le mois et l'annee sont respectivement dans les champs suivants
 */
function ValiderDate(ChampJour) {
    var IndiceChampJour = getIndiceObjectInForm(ChampJour)
    var jour_debut   =  parseInt(ChampJour.form.elements[IndiceChampJour].options[ChampJour.form.elements[IndiceChampJour].selectedIndex].value, 10)
    var mois_debut   =  parseInt(ChampJour.form.elements[IndiceChampJour+1].options[ChampJour.form.elements[IndiceChampJour+1].selectedIndex].value, 10)
    //var annee_debut  =  parseInt(ChampJour.form.elements[IndiceChampJour+2].options[ChampJour.form.elements[IndiceChampJour+2].selectedIndex].value)
    var annee_debut  =  parseInt(ChampJour.form.elements[IndiceChampJour+2].value,10)

    if(mois_debut > 12){
      mois_debut -= 12
      annee_debut += 1
    }

    if ( !isDateValid(jour_debut,mois_debut,annee_debut)) {
       alert(' Date sélectionnée Incorrecte ')
       ChampJour.form.elements[IndiceChampJour].options[0].selected=true
       return false
    }
    return true
}

/* Validation d'une date à partir du champ JOUR
 * Le mois et l'annee sont ensembles dans le champ suivant
 */
function NewValiderDate(ChampJour) {
    var IndiceChampJour = getIndiceObjectInForm(ChampJour);
    var jour_debut   =  parseInt(ChampJour.form.elements[IndiceChampJour].options[ChampJour.form.elements[IndiceChampJour].selectedIndex].value, 10);
    var moisyr  =  ChampJour.form.elements[IndiceChampJour+1].options[ChampJour.form.elements[IndiceChampJour+1].selectedIndex].value;
    //var annee_debut  =  parseInt(ChampJour.form.elements[IndiceChampJour+2].options[ChampJour.form.elements[IndiceChampJour+2].selectedIndex].value);
    
    var annee_debut  = parseInt(moisyr.substring(2,6),10);
    var mois_debut  = parseInt(moisyr.substring(0,2),10);
    

    if(mois_debut > 12){
      mois_debut -= 12;
      annee_debut += 1;
    }

    if ( !isDateValid(jour_debut,mois_debut,annee_debut)) {
       alert(' Date sélectionnée Incorrecte ');
       ChampJour.form.elements[IndiceChampJour].options[0].selected=true;
       return false;
    }
    return true;
}

function validateNull(arg,message){
   if(!notNullArray(arg)){
      alert(message);
      return 0;
   }
   return 1;
}

function validateVide(arg,message){
   if(!notVideArray(arg)){
      alert(message);
      return 0;
   }
   return 1;
}

/* on teste si le arg existe, est non-vide et contient au moins une lettre */
function validateBlanc(arg,message){
   if(!notBlancArray(arg)){
      alert(html_entity_decode(message));
      return 0;
   }
   return 1;
}

function notNullArray(arg){
  var i=0;
  var size=0;
  if(arg != null){
     if(arg.length==null){
       if(arg.value.length==0){
         //alert('champ vide!');
         return 0;
       }
     }
     else{
       size=arg.length;
       for(i=0;i<size;i++){
          if(arg[i].value.length==0){
            //alert('champ vide!');
            return 0;
          }
       }
     }
     return 1;
  }
  else{
    return 0;
  }
}

//teste si un tableau ou un element est vide
//si l'element n'existe pas, on valide le test
function notVideArray(arg){
  var i=0;
  var size=0;
  if(arg != null){
     if(arg.length==null){
       if(arg.value.length==0){
         //alert('champ vide!');
         return 0;
       }
     }
     else{
       size=arg.length;
       for(i=0;i<size;i++){
          if(arg[i].value.length==0){
            //alert('champ vide!');
            return 0;
          }
       }
     }
     return 1;
  }
  return 1;
}


//teste si un tableau ou un element existent et contiennent au moins une lettre
function notBlancArray(arg){
  var i=0;
  var size=0;
  if(arg != null){
     if(arg.length==null){
       if(arg.value.length==0){
         //alert('champ vide!');
         return 0;
       }
       return testNonBlanc(arg.value)
     }
     else{
       size=arg.length;
       for(i=0;i<size;i++){
          if(arg[i].value.length==0){
            //alert('champ vide!');
            return 0;
          }
          if( testNonBlanc(arg[i].value)==0)return 0;
       }
     }
     return 1;
  }
  return 0;
}

/* on test si la valeur de la variable var contient 'des lettres'
** on utilise un search avec une RE de type [^0-9 ]
*/
function testNonBlanc(arg){
  //alert('inside testNonBlanc');
  var nrLetters=2;
  var count=0;
  var str=new String(arg);
  re = new RegExp("[^ ]")
  //re = new RegExp("[^0-9 ]")
  //re = new RegExp("/\D/")

  return (str.search(re) != -1);
}

/*
** on detecte s'il s'agit d'un champ de type input ou select et on retourne 
** la valeur saisie
** ça marche pour:
**  - select de type select-one
**  - input de type TEXT
**  - input de type hidden
**  - input de type RADIO avec au moins 2 choix
*/

function getInputSelect(arg){
   var ret = new String("");
   var i=0;
   // pour select de type select-one
   if( arg.type == "select-one"  ){
      ret=arg.options[arg.selectedIndex].value;
      return ret;
   }
   // pour input de type TEXT
   if( arg.type == "text"  ){
      ret=arg.value;
      return ret;
   }
   // pour input de type hidden
   if( arg.type == "hidden"  ){
      ret=arg.value;
      return ret;
   }
   //pour input de type radio - seulement 1 input!!
   if(arg.type == "radio")
   { /* radio 1 input */
     return arg.value;
   }
   //pour input de type radio - au moin 2 input!!
   if(arg.length != null){
     if(arg[0].type == "radio"){
       for(i=0;i<arg.length;i++){
         if(arg[i].checked){
           ret=arg[i].value;
           return ret;
         }
       }
     }
   }
 }
 
 // Retrouve un objet dans le document par son nom (merci à DW)
 function findObj(n, d) { //v3.0
  var p,i,x;
  if(!d) d=document; 
  if((p=n.indexOf("?"))>0 && parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document;
    n=n.substring(0,p);
   }
  if(!(x=d[n]) && d.all) x=d.all[n]; 
  for (i=0;!x && i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x && d.layers && i<d.layers.length;i++) x=findObj(n,d.layers[i].document);
  return x;
}


// On élimine les blancs du début et de la fin du string arg 
//Le arg est 'une value', pas un obj. 
function trimBeginEnd(arg){
  var strOut=new String("");
  var strIn=String(arg);
  var l=strIn.length;
  var i=0;

  while( i<l && (strIn.charAt(i) == ' ') ){
    i++
  }
  if(i==l){ // il n'y a pas des char nonBlanc
  }
  else{
    while( l>i && (strIn.charAt(l-1) == ' ') ){
      l--
    }
  }
  strOut=strIn.substring(i,l);
  //alert('end trimBeginEnd <'+strOut+'>');
  return strOut;
}


// Fonction qui construit une requête XML. Elle reçoit le modelid et une
// fonction qui doit construire la chaine XML interne aux tags content.
function buildXml(modelid,content,jsessionid){
  var xml= new String("");
  xml = "<?xml version=\"1.0\" encoding='ISO-8859-1' ?>"+
      "<request websession=\""+jsessionid+"\">"+ 
         "<modelid>"+modelid+"</modelid>"+
         "<content>"+content+
         "</content>"+
      "</request>";  
  return xml;
}

// on teste si le arg est un numèro
function validateNumber(arg,message){
    //alert(arg.value);
    if(isNaN(arg.value)){
        alert(message);
        arg.focus();
        return false;
    }
    return true;
}

// on teste si le arg ne contient pas des cars. spec.
function validateNonRegExp(arg,regExp,message){
   if(!validateNonRegExpArray(arg,regExp)){
      if( message.length ) alert(message);
      return 0;
   }
   return 1;
}

//teste si un tableau ou un element ne contient pas des cars. spec.
function validateNonRegExpArray(arg,regExp){
  var i=0;
  var size=0;
  if(arg != null){
     if(arg.length==null){
       //if(arg.value.length !=0 )return testNonRegExp(arg,regExp);
       return testNonRegExp(arg,regExp);
     }
     else{
       size=arg.length;
       for(i=0;i<size;i++){
          if(testNonRegExp(arg[i],regExp) == 0)return 0;
       }
     }
     //alert('test nonSpecChar OK')
     return 1;
  }
  alert('champ null');
  return 0;
}

function testNonRegExp(arg,regExp){
  //alert(arg.value)
  var str=new String(arg.value);
  // re = new RegExp("[^\\wà-ü '@]")
  re = new RegExp(regExp)

  pos = str.search(re)
  if(pos >= 0){
    alert("Caractère interdit: <"+str.charAt(pos)+">")
    arg.focus()
    return false
  }
  return true
}

function validateNonCharSpec(arg,message){
  var regExp = new String("[^\\wà-ü '@,.-]");
  return validateNonRegExp(arg,regExp,message);
}

function validateDigits(arg,message){
  var regExp = new String("[^\\d.,()+-]");
  return validateNonRegExp(arg,regExp,message);
}


function selectDay(imgname,typ,argday,argmth,year,month,day,form)
{
    //alert("selectDay() year: "+year+" month: "+month);

    var monthDays = new montharr(31, 28, 31, 30, 31, 30, 31, 31, 30,31, 30, 31);
      
    if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)){
        monthDays[1] = 29;
    }
	
    if(typ=="DAY")  {
        month=argmth.value;
    }
    
    var year = month.substring(2,6);
    var month = month.substring(0,2);
    var nDays = monthDays[--month];

    if(day>nDays) {
        argday.selectedIndex=nDays-1;
        day=nDays;
    }
	
    var dy = new Date(year,month,day);
    tabD=new Array(
   	"Dim",
   	"Lun",
	"Mar",
	"Mer",
	"Jeu",
	"Ven",
	"Sam");
	
    //alert(day+"/"+month+"/"+year);

    numday = dy.getDay();
        
    d = tabD[numday];
	
    imgname.value=d;
    
    if(form.doe && form.delay){
        var mt = new String(month+1);
        var date = year+formatSurDeuxChar(mt)+formatSurDeuxChar(day);
        nd=addNDays(date, form.delay.options[form.delay.selectedIndex].value);
        //alert(nd);
        form.doe.value=nd;
    }
    return;
}

function formatDate(date)
{
	var d = date.substring(6,8);
	var mth = date.substring(4,6);
	var yr = date.substring(0,4);
	//alert(d);
	fdate=d+"/"+mth+"/"+yr;
	//alert(fdate);
	return fdate;
}

function printPetitDay(dd,date)
{
	
	var d = date.substring(6,8);
	var mth = date.substring(4,6);
	var yr = date.substring(0,4);
	

	//alert(d+mth+yr);
	var dy = new Date(yr,mth-1,d);
	
	//var dy = new Date();
	tabD=new Array(
   	"Dim",
   	"Lun",
	"Mar",
	"Mer",
	"Jeu",
	"Ven",
	"Sam");

	
	day = dy.getDay();
	d = tabD[day];
	
	//alert(img);
        img="<input name=\"dayof"+dd+"\" class=\"frminput\" size=\"3\" value="+d+" disabled/>";
        //alert("printPetitDay");
	document.write(img);
}

function printSmallDay(date)
{
	var d = date.substring(6,8);
	var mth = date.substring(4,6);
	var yr = date.substring(0,4);
		
	//alert(d+mth+yr);
	var dy = new Date(yr,mth-1,d);
		
	tabD=new Array(
   	"Di",
   	"Lu",
	"Ma",
	"Me",
	"Je",
	"Ve",
	"Sa");

	day = dy.getDay();
        d = tabD[day];
	//alert(d);
	//alert(img);
	document.write(d+" ");
}

function montharr(m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11)
   {
   this[0] = m0;
   this[1] = m1;
   this[2] = m2;
   this[3] = m3;
   this[4] = m4;
   this[5] = m5;
   this[6] = m6;
   this[7] = m7;
   this[8] = m8;
   this[9] = m9;
   this[10] = m10;
   this[11] = m11;
   return '';
   }

function printDate(strday,strmth,stryear,date,delaydep,form,url,urlcalimg,css){
    
  var maxdelay = parseInt(delaydep,10);

  var mcour=0;
  var xml= new String();
  var k=0;
 
  /* bug 20844-la date min. n'est plus la date de depart, mais la date du jour*/ 
  var d  = new String();
  var dt = new Date();

  d = ''+dt.getFullYear();

  if( dt.getMonth() < 9)
  {
    d += '0';
  }
  d += (dt.getMonth() +1);
  if(dt.getDate() < 10)
  {
    d += '0';
  }
  d += dt.getDate();
  var year=d.substring(0,4);
  var mth=d.substring(4,6);
  var day=d.substring(6,8);

  var year1=date.substring(0,4);
  var mth1=date.substring(4,6);
  var day1=date.substring(6,8);

  var monthDays = new montharr(31, 28, 31, 30, 31, 30, 31, 31, 30,31, 30, 31);
  
  tabM=new Array(
   	"Janvier",
   	"Fevrier",
	"Mars",
	"Avril",
	"Mai",
	"Juin",
	"Juillet",
	"Aout",
	"Septembre",
	"Octobre",
	"Novembre",
	"Decembre");


  xml+="<select class=\"frminput\" name=\""+strday+"\" onchange=\"return selectDay(form.dayof"+strday+",'DAY',form."+strday+",form."+strmth+","+year+","+mth+",this.value,form)\">";

  for(k=1;k<31+1;k++) {
     xml += "<option";
     xml += " value=\""+k+"\"";
     if(k==day1){
	xml += " selected=\"Y\"";     
     }
     xml += ">"+k+"</option>";
  }
  xml += "</select>";
  
  
  xml+="<select class=\"frminput\" maxlength=13 name=\""+strmth+"\" onchange=\"return selectDay(form.dayof"+strday+",'MTH',"+strday+","+strmth+","+year+",this.value,day1.value,form)\">";
  for(k=0;k<=maxdelay;k++,mth++) {
     xml += "<option";

     //alert("printDate() MTH: "+mth);
     
     
     xml += " value=\""+formatSurDeuxChar(mth)+year+"\"";
     var xmlline= new String(tabM[mth-1]+" "+year);
     var myear1= new String(tabM[mth1-1]+" "+year1);
     if((mth==mth1) && (year==year1)){
        xml += " selected=\"Y\"";
     }
     xml += ">";
     xml += xmlline+"</option>";
     if(mth == 12){
        mth=0;
        year++;
     }
  }
  xml += "</select>";
  //alert(xml);
  //alert('lib.js, css2: ' + css)
  
  xml+= '<input align="ABSMIDDLE" alt="Calendar" border=0 type="image" name="imgCalendar" src="'+urlcalimg+'"  onclick="try{return gCalendar.Show(event, form.'+strday+',form.'+strmth+',form,\'right\', \''+url+'\', form.dayof'+strday+',\''+ css + '\');}catch(error){return false;}" > </input>';
  
  xml += "<input name=\"" + stryear+"\" type=\"hidden\" value=\"";
  xml += year+"\"/>";
  //alert(xml);
  document.write(xml);
}

function addNDays(date,n)
{
    //alert(date);
    var year=date.substring(0,4);
    mth=date.substring(4,6);
    day=date.substring(6,8);
    //alert("NBDAYS: "+n);
    var d = new Date(year,mth-1,day);
    var dres = new Date();
    //alert(d);
    n++;
    nbdays=(d.getTime()/(3600*24*1000))+parseInt(n,10);
    //alert(nbdays);
    var tutu=parseInt(nbdays,10)*3600*24*1000;
    //alert(tutu);
    dres.setTime(parseInt(tutu,10));
    //alert(dres);
    var dj=new String(dres.getDate());
    var dm=new String(dres.getMonth()+1);
    var newday=formatSurDeuxChar(dj);
    var newmonth=formatSurDeuxChar(dm);
    var newyear=formatSurDeuxChar(dres.getFullYear());
    var toto=newyear.toString()+newmonth.toString()+newday.toString();
    //alert(toto);
    return toto;
}

function setDoe(n,doc)
{
    //alert(doc.day1);
    day1 = formatSurDeuxChar(doc.day1.options[doc.day1.selectedIndex].value);
    var mthyr = doc.month1.options[doc.month1.selectedIndex].value;
    var pyear = mthyr.substring(2,6);
    var mth1 = mthyr.substring(0,2);
    //alert("setDoe "+"year:"+pyear+" month:"+mth1+" day:"+day1);

    if(mth1>12){
        mth1 -=12;
        pyear++;
    }
    
    date = pyear+formatSurDeuxChar(mth1)+formatSurDeuxChar(day1);
    //alert("setDoe "+date);
    nd=addNDays(date, n.options[n.selectedIndex].value);
    //alert("setDoe "+nd);
    doc.doe.value=nd;
}

/* Affiche la date cf printDate sauf qu'on sélectionne la date après mthSel mois
   Attention! Comme on affiche qu'un an, mthSel doit être <= 12 */
function printDateSelMonth(strday,strmth,stryear,date,form,mthSel){
  var mcour=0;
  var xml= new String();
  var k=0;
  //var year=new String();
  var mth=new String();
  var day=new String();
  
  var year=date.substring(0,4);
  mth=date.substring(4,6);
  day=date.substring(6,8);
  //alert(mth);

  var monthDays = new montharr(31, 28, 31, 30, 31, 30, 31, 31, 30,31, 30, 31);
      
  if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0))
      monthDays[1] = 29;
  
  // on teste si le jour ne dépasse pas le jour de fin du mois à sélectionner
  if(mthSel > 12)
    mthSel %= 12;
  var mthCal = parseInt(mth,10) + mthSel;
  if(mthCal > 12) {
    mthCal %= 12;
    var yearCal = parseInt(year) + 1;
    if(day>29 && mthCal==2 && (((yearCal % 4 == 0) && (yearCal % 100 != 0)) || (yearCal % 400 == 0))){
       day = 29;    // mois février an bisect
    } else {
      if(day > monthDays[mthCal-1])
        day = monthDays[mthCal-1];
    }
  } else {
    if(day > monthDays[mthCal-1])
      day = monthDays[mthCal-1];
  }
   
  var nDays = monthDays[mth-1];
  
  //alert(nDays);
  
  tabM=new Array(
   	"Janvier",
   	"Fevrier",
	"Mars",
	"Avril",
	"Mai",
	"Juin",
	"Juillet",
	"Aout",
	"Septembre",
	"Octobre",
	"Novembre",
	"Decembre",
	"Janvier",
   	"Fevrier",
	"Mars",
	"Avril",
	"Mai",
	"Juin",
	"Juillet",
	"Aout",
	"Septembre",
	"Octobre",
	"Novembre");

  xml+="<select class=\"frminput\" name=\""+strday+"\" onchange=\"return selectDay(d"+strday+",'DAY',form."+strday+",form."+strmth+","+year+","+mth+",this.value,form)\">";
  //alert(xml);
  for(k=1;k<31+1;k++) {
     xml += "<option";
     xml += " value=\""+k+"\"";
     if(k==day){
	xml += " selected=\"Y\"";     
     }
     xml += ">"+k+"</option>";
  }
  xml += "</select>";
  
  var pyear=year;
  xml+="<select class=\"frminput\" maxlength=13 name=\""+strmth+"\" onchange=\"return selectDay(d"+strday+",'MTH',"+strday+","+strmth+","+year+",this.value,day1.value,form)\">";
  //alert(xml);
  for(k=0;k<12;k++,mth++) {
     xml += "<option";
     
     if(mth>12 && mcour != 2){
	pyear++;
	mcour=2;
     }
     xml += " value=\""+mth+"\"";
     if(k == mthSel){
        xml += " selected=\"Y\"";     
     }
     xml += ">";
     var xmlline= new String(tabM[mth-1]+" "+pyear);
     xml += xmlline+"</option>";
  }
  xml += "</select>";
  xml += "<input name=\"" + stryear+"\" type=\"hidden\" value=\"";
  xml += year+"\"/>";
  //alert(xml);
  document.write(xml);
}

/* Teste si la fourchette de dates ne dépasse pas nbMois mois
   Attention! Comme on affiche qu'un an, nbMois doit être <= 12 */
function DatesEnPeriode(jourdt1,jourdt2,nbMois) {
   //alert('on est dans DatesEnPeriode')
   //alert(jourdt1+" "+jourdt2+" "+nbMois);
   if ( ValiderDate(jourdt1) == false){
     return false
   }
   if ( ValiderDate(jourdt2) == false){
     return false
   }
   var indice =  getIndiceObjectInForm(jourdt1)
   var jourdt1 = jourdt1.form.elements[indice]
   var moisdt1 = jourdt1.form.elements[indice+1]
   var anneedt1 = jourdt1.form.elements[indice+2]
   indice =  getIndiceObjectInForm(jourdt2)
   var jourdt2 = jourdt1.form.elements[indice]
   var moisdt2 = jourdt1.form.elements[indice+1]
   var anneedt2 = jourdt1.form.elements[indice+2]
   var jour_debut   =  parseInt(jourdt1.options[jourdt1.selectedIndex].value,10)
   var mois_debut   =  parseInt(moisdt1.options[moisdt1.selectedIndex].value,10)
   var annee_debut  =  parseInt(anneedt1.value)
   var jour_fin     =  parseInt(jourdt2.options[jourdt2.selectedIndex].value,10)
   var mois_fin     =  parseInt(moisdt2.options[moisdt2.selectedIndex].value,10)
   var annee_fin    =  parseInt(anneedt2.value,10)
   var isOk=true

   if(mois_debut > 12){
      mois_debut -= 12
      annee_debut +=1
   }
   if(mois_fin > 12){
      mois_fin -= 12
      annee_fin +=1
   }

   if ( annee_fin < annee_debut ) {
      isOk=false
   }
   else {
      if ( annee_fin==annee_debut && mois_fin < mois_debut ) {
         isOk=false
      }
      else {
         if ( annee_fin==annee_debut && mois_fin==mois_debut && jour_fin<jour_debut ) {
            isOk=false
         }
      }
   }
   if ( !isOk ) {
     alert(' Fourchette de dates incorrecte ')
     return false
   }

   /* On teste si la date de fin ne dépasse pas celle les nbMois mois */
   var anneeCal = annee_debut;
   var moisCal = mois_debut;
   var jourCal = jour_debut;
   var monthDays = new montharr(31, 28, 31, 30, 31, 30, 31, 31, 30,31, 30, 31);
   moisCal += nbMois;
   if(moisCal > 12) {
      anneeCal++;
      moisCal %= 12;
   }
   if(((anneeCal % 4 == 0) && (anneeCal % 100 != 0)) || (anneeCal % 400 == 0))
      monthDays[1] = 29;
   if(jourCal > monthDays[moisCal-1])
      jourCal = monthDays[moisCal-1];
   if(annee_fin > anneeCal)
     isOk = false;
   else if(annee_fin == anneeCal && mois_fin > moisCal)
     isOk = false;
   else if(annee_fin == anneeCal && mois_fin == moisCal && jour_fin > jourCal)
     isOk = false;

   if ( !isOk ) {
     alert(' La fourchette de dates dépasse ' + nbMois + ' mois ')
     return false
   }

   return true
}

function replaceString(oldS,newS,fullS) {
// Replaces oldS with newS in the string fullS
   for (var i=0; i<fullS.length; i++) {
      if (fullS.substring(i,i+oldS.length) == oldS) {
         fullS = fullS.substring(0,i)+newS+fullS.substring(i+oldS.length,fullS.length)
      }
   }
   return fullS
}

function getSelectedValue(champ)
{
    return champ.options[champ.selectedIndex].value;
}

function selectNewDate(dayField, monthField, newDate)
{
    var newYear=newDate.substring(0,4);
    var newMth=newDate.substring(4,6);
    var newDay=newDate.substring(6,8);
    for(var i=0; i<31; i++){
        dayField.selectedIndex = i;
        var df = formatSurDeuxChar(getSelectedValue(dayField));
        if(formatSurDeuxChar(getSelectedValue(dayField)) == newDay){
            break;
        }
    }
    for(var i=0; i<=12; i++){
        monthField.selectedIndex = i;
        var newYearStr=new String(newYear);
        if(formatSurDeuxChar(getSelectedValue(monthField)) == newMth){
            break; 
        }
    }
}

function initProdField()
{
   //alert(document.prodsreq.prod.value);
   if(document.prodsreq.prod.value != "" || document.prodsreq.dest.value != ""){
     document.prodsreq.prod.disabled=false;
   }
   else{
     document.prodsreq.prod.disabled=true;
   }
}

function insert(el)
{
	var part = el;
	var dom = (document.getElementById);
	var iex = (document.all);
	if (dom) { x = document.getElementById(part).style; }
	else if (iex) { x = eval(part+'.style') }
	x.display='';
	
}
function erase(el)
{
	var part = el;
	var dom = (document.getElementById);
	var iex = (document.all);
	if (dom) { x = document.getElementById(part).style; }
	else if (iex) { x = eval(part+'.style') }
	x.display='none';
	
}

function clearDefault(el) {
  if (el.defaultValue==el.value) el.value = "";
}

function insertPart(pax,divpref)
{
    var _nbAdulte = pax[pax.selectedIndex].value;
    var i=0;
    for (;i<_nbAdulte;i++){
        insert('part_'+divpref+eval(i+1));
    }
    for(k=i;k<9;k++){
        erase('part_'+divpref+eval(k+1));
    }
}

function insertPart2(part,pax,divpref)
{
    var _nbAdulte = pax[pax.selectedIndex].value;
    var i=0;
    for (;i<_nbAdulte;i++){
        insert(part+divpref+eval(i+1));
    }
    for(k=i;k<9;k++){
        erase(part+divpref+eval(k+1));
    }
}

// Activation/Désactivation de champ, selon bool (Y/N)
function DisableField(argf,bool){
  if(bool=="N"){
    argf.selectedIndex="0";
    argf.disabled=true;
  }
  else if(bool=="Y"){
    argf.disabled=false;
  }
  else{
    argf.disabled=false;
  }
}

function getLibPax(typ) {
  if(typ=="adu") return "adulte";
  if(typ=="chd") return "enfant";
  if(typ=="inf") return "bébé";
}

function validatePax(form,typ,i){
  //alert("validatePax");
  mess='Saisie refusée. Présence de caractères interdits.';
  messVide='';

  var day = eval('form.day_'+typ+i);
  var month = eval('form.month_'+typ+i);
  var year = eval('form.year_'+typ+i);

  if(!validateNumber(day, "Le jour de naissance saisi n'est pas conforme") ||
     !validateNumber(month, "Le mois de naissance saisi n'est pas conforme") ||
     !validateNumber(year, "L'année de naissance saisie n'est pas conforme")){
     return false;
  }

  if(!verifdateNaiss(form,typ, i)) {
    return false;
  }

  eval('form.year_'+typ+i+'.value ='+formatYear(year.value));
  eval('form.tif_dob_'+typ+i+'.value ='+formatYear(year.value)+formatSurDeuxChar(month.value)+formatSurDeuxChar(day.value));

  if(!validateNaiss(form,typ,i,1)){
     return false;
  }
  return true;
}

function validateNaiss(form,typ,i,ctrlCateg){
  //alert("validateNaiss "+typ+" "+ctrlCateg);

  var upperTyp = typ.toUpperCase();

  var fdate=new String("");

  var dobTif = eval('form.tif_dob_'+typ+i+'.value');
  var firstYr = eval('form.datefirstyr_'+typ+'.value');
  var lateYr = eval('form.datelateyr_'+typ+'.value');

  if ((eval('form.tif_dob_'+typ+i+'.disabled') == false) &&
        (eval('form.tif_dob_'+typ+i+'.disabled') !=null) && 
        (eval('form.tif_dob_'+typ+i+'.disabled') != 10000000)) {

      if(eval('form.tif_dob_'+typ+i)) {
         if(!DateValidator(dobTif)){
            return false;
         }
      }
      var dobTifArg = eval('form.tif_dob_'+typ+i);
      fdate=formatDate(dobTif);

      if(ctrlCateg == 1) {
          if(upperTyp == "INF"){
            //alert("Le bébé "+firstYr);

        if(parseInt(firstYr,10)>parseInt(dobTif,10)){
          alert("Le bébé né le "+fdate+" n'appartient pas à la catégorie choisie");
          return false;
        }
        if(parseInt(dobTif,10)>parseInt(lateYr,10)){
          alert("Le bébé né le "+fdate+" n'appartient pas à la catégorie choisie");
          return false;
        }
      }
          if(upperTyp == "CHD"){
        //alert("LATE:"+lateYr+" FIRST:"+firstYr+" tif:"+dobTif);
        if(parseInt(firstYr,10)>parseInt(dobTif,10)){
          alert("L'enfant né le "+fdate+" n'appartient pas à la catégorie choisie");
          return false;
        }
        if(parseInt(dobTif,10)>parseInt(lateYr,10)){
          alert("L'enfant né le "+fdate+" n'appartient pas à la catégorie choisie");
          return false;
        }
      }
          if(upperTyp == "ADU"){
        if(parseInt(firstYr,10)>parseInt(dobTif,10)){
          alert("L'adulte né le "+fdate+" n'appartient pas à la catégorie choisie");
          return false;
        }
        if(parseInt(dobTif,10)>parseInt(lateYr,10)){
          alert("L'adulte né le "+fdate+" n'appartient pas à la catégorie choisie");
          return false;
        }
      }
    }
    }

  return true;
}

function verifdateNaiss(form,typ,i) {
  //alert("verifdateNaiss"+eval('form.year_'+typ+i+'.value'));

  if (!validateVide(eval('form.day_'+typ+i),'Jour de Naissance vide pour le passager '+getLibPax(typ)+ ' '+i+' !') ||
      !validateVide(eval('form.month_'+typ+i),'Mois de Naissance vide pour le passager '+getLibPax(typ)+' '+i+' !') ||
      !validateVide(eval('form.year_'+typ+i),'Année de Naissance vide pour le passager '+getLibPax(typ)+' '+i+' !') ||
      !validateYear(eval('form.year_'+typ+i),'Année de Naissance incorrecte pour le passager '+getLibPax(typ)+' '+i+' !')) {
        return false;
  }

  return true;
}
function validateYear(year, mess) {
  if(year.value.length != 4 && year.value.length != 2){
    alert(mess);
    return false;
  }
  return true;
}

function showDiv(div,typ)
{
 //alert("INFO DIV");
    
 var obj=div,v=typ;
 if (obj.style) {
    obj=obj.style; 
    v=(v=='show')?'visible':(v='hide')?'hidden':v; 
 }
 obj.visibility=v;
}

function openwindowLien(url){
 window.open(url,"liens","left=100,top=100,toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,copyhistory=no,width=780,height=500")
 }
