
function _getYearFull()
{
  var iAnnee = this.getYear();
  if (iAnnee < 1000) {iAnnee += 1900}
  return iAnnee;
}

function _dtIncDate(iNbJours, iNbMois, iNbAnnees)
{
  if (iNbJours) this.setDate( this.getDate() + iNbJours);
  if (iNbMois)  this.setMonth( this.getMonth() + iNbMois);
  if (iNbAnnees) this.setYear( this.getYearFull() + iNbAnnees);
}


Date.prototype.inc = _dtIncDate;
Date.prototype.getYearFull = _getYearFull;


function asTabNomsMois() /* !traduc! */
{
  this[0] = 'Janvier';
  this[1] = 'Février';
  this[2] = 'Mars';
  this[3] = 'Avril';
  this[4] = 'Mai';
  this[5] = 'Juin';
  this[6] = 'Juillet';
  this[7] = 'Aout';
  this[8] = 'Septembre';
  this[9] = 'Octobre';
  this[10] = 'Novembre';
  this[11] = 'Décembre';
}

function sNomMois(piMois)
{
  var nm = new asTabNomsMois();
  return nm[piMois];
}

function aiTabJoursDansMois(piAnnee)
{
  this[0]		=	31;
  if (piAnnee % 4 == 0) 
    { this[1] =	29 }
  else 
    { this[1] = 28 }
  this[2]  = 31;
  this[3]  = 30;
  this[4]  = 31;
  this[5]  = 30;
  this[6]  = 31;
  this[7]  = 31;
  this[8]  = 30;
  this[9]  = 31;
  this[10] = 30;
  this[11] = 31;
}

function iJoursDansMois(piMois, piAnnee)
{
  var ajdm = new aiTabJoursDansMois( piAnnee);
  return ajdm[piMois];
}

function iCompareDate(pdt1, pdt2)
{
  if ((pdt1) && (pdt2)) 
  {    
    if (pdt1.getYear() > pdt2.getYear()) return 1;
    if (pdt1.getYear() < pdt2.getYear()) return -1;
    if (pdt1.getMonth() > pdt2.getMonth()) return 1;
    if (pdt1.getMonth() < pdt2.getMonth()) return -1;
    if (pdt1.getDate() > pdt2.getDate()) return 1;
    if (pdt1.getDate() < pdt2.getDate()) return -1;
    return 0; //pas de différence.
  }
  else return null;
}

function iGetYear(pdt) 
{
  return pdt.getYearFull();
}

<!--
function oTrouveObjet(n, d) 
{ 
  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=dhtmTrouveObjet(n,d.layers[i].document);
  //alert(n + ':' + (x?'OK':'INTROUVALE'));
  return x;
}

//wlr : diminutif de "window.location.replace".
//Cette fonction permet d'effectuer un lien vers une URL en remplaçant l'entrée 
//courante par l'entrée suivante dans l'historique du navigateur.
//Le seul but est d'empêcher l'utilisation de back sur certaines pages.
function wlr(psUrlDest)
{
  window.location.replace(psUrlDest);
}


//true si le caractère fait partie des caractères à supprimer par Trim
function bEstTrim(iCodeAscii)
{
  return( (iCodeAscii==32) || (iCodeAscii==13) || (iCodeAscii==10));
}
//supprime les caractères insignifiants à gauche de la chaîne 
function sLTrim(sChaine)
{
  for (var x = 0; (x < sChaine.length) && (bEstTrim(sChaine.charCodeAt(x))); x++);
  if (x>0) sChaine = sChaine.substring(x);
  return(sChaine);
}
//supprime les caractères insignifiants à droite de la chaîne 
function sRTrim(sChaine)
{  
  for (var x = sChaine.length-1; (x >= 0) && (bEstTrim(sChaine.charCodeAt(x))); x-1);
  if (x < sChaine.length-1) sChaine = sChaine.substring(0,x+1);
	return(sChaine);
}
//supprime les caractères insignifiants à gauche et à droite de la chaîne 
function sTrim(sChaine)
{
  sChaine = sLTrim( sChaine);
  sChaine = sRTrim( sChaine);
  return( sChaine );
}

//verifie que la chaine n'est pas nulle ou vide. Retourne true si sChaine n'est pas vide
function bVerifNotNull(sChaine)
{
	if ((sChaine == null) || (sChaine == "") || (!sChaine))
		return(false);
	else
		return(true);
}

//retourne true si sChaine est vide.
function bEstVide(sChaine)
{
  return !bVerifNotNull(sChaine)
}

//verifie que tous les caracteres de sChaine sont dans sEnsemble
function bVerifCaracteres(sChaine,sEnsemble)
{
	for (var x = 0; x < sChaine.length; x++)
		if (sEnsemble.indexOf(sChaine.charAt(x)) == -1)
		{
			return(false);
		}
	return(true);
}

//remplace toutes les chaines de caracteres cs par cd dans la
//chaine de caracteres str, sans tenir compte des Maj/min.
function sReplace(sSource,sTrouve,sRempl) 
{  
  var y = 0;
  var lsSource = String(sSource);
  sTrouve = String(sTrouve).toUpperCase();
  var sMaj = lsSource.toUpperCase();
	for (var x= sMaj.indexOf(sTrouve,0); (x>0); x= sMaj.indexOf(sTrouve,x+sRempl.length))
	{	  
		lsSource= lsSource.substring(0,x)+sRempl+lsSource.substring(x+sTrouve.length);
		sMaj = lsSource.toUpperCase();
	}
	return(lsSource);
}

//remplace dans champ toutes les virgules par des points
function sVirguleToPoint(sChaine) 
{
	sChaine = sReplace(sChaine,",",".");
	return(sChaine);
}

// 
//convertit une chaine de caracteres en un nombre decimal. si erreur, bOk = false et renvoie 0
function fStringToNum(sChaine) 
{
	var fRes = 0;
	sChaine = sTrim(sChaine)
	sChaine = sVirguleToPoint(sChaine);
	fRes = parseFloat(sChaine) 
	return fRes
}

//convertit une chaîne de caractères en un nombre entier (arrondi si la source est décimale). 
//si erreur, bOk = false et renvoie 0
function iStringToInt(sChaine, bOk)
{
  var iRes = 0;
  iRes = fStringToNum(sChaine);
  if (!isNaN(iRes))
  iRes = Math.round(iRes);
  return (iRes);
}

function bVerifLongueur(sChaine, iLgMin, iLgMax, bTrim)
{
  var bOk = true;
  var sChn = sChaine;
  if (bTrim) sChn = sTrim(sChn);
  if (iLgMin > 0) bOk = (sChn.length  >= iLgMin);
  if ( (bOk) && (iLgMax > 0) ) bOk = (sChn.length <= iLgMax);
  return bOk;
}

function bVerifIntervalle(vValeur, iValMin, iValMax)
{
  var bOk = true;    
  vValeur = iStringToInt( vValeur);
  bOk = !(isNaN(vValeur));
  if (bOk) { if (!isNaN(iValMin)) { bOk = (vValeur >= iValMin);}}
  if (bOk) { if (!isNaN(iValMax)) { bOk = (vValeur <= iValMax);}}
  return bOk;
}


/*
'*********************************************************************                           '
' Function sInsereParams'
' *** --- OBJET --------------------------------------------------------'
' Intègre des sous-chaînes nommées à l'intérieur d'une chaîne' 
' *** --- EVOLUTIONS ---------------------------------------------------'
' 04/08/00 [AC] - Création' 
' *** --- PARAMETRES ---------------------------------------------------'
' IN :' 
' - psEntree : La chaîne contenant les balises de sous-chaînes'
' - psValeurs : La chaînes contenant les sous-chaînes à intégrer'
' OUT :' 
' > psEntree avec les paramètres intégrés aux emplacements indiqués.'
' *** --- COMMENTAIRES -----------------------------------------------'
' - Dans la chaînes d'entrée, l'emplacement des paramètres est spécifié'
'   par le nom du paramètre, encadré par des "%" (ex: "Il est %heure%.").'
' - la chaîne de paramètres est construite sous la forme :' 
'   "param1=valeur param 1|param2=valeur param2|param3=etc..."'
'   Le caractère "|" doit être doublé s'il est intégré dans la valeur du '
'   paramètre.'
' *** --- EXEMPLES ---------------------------------------------------'
' sInsereParam("Bonjour %genre% %nom%. Il est %heure%.", _
'              "genre=monsieur|heure=15:25:00|nom=Dupont")
'  => "Bonjour monsieur Dupont. Il est 15:25:00."
'*********************************************************************'
*/
function sInsereParams( sEntree, sValeurs)
{
var psEntree = String(sEntree);
var psValeurs = String(sValeurs);
var iPos=0;
var iPosDep=0;
var sNomPrm="";
var sValPrm="";
var c255;  
  c255 = String.fromCharCode(255)
  psValeurs = sReplace(psValeurs, "||", c255);
  iPos = psValeurs.indexOf( "=", 1);  
  while (iPos >= 0)
  {
    sNomPrm = psValeurs.substring(0,iPos)
    psValeurs = psValeurs.substring(iPos+1)
    iPosSep = psValeurs.indexOf( "|", 0);
    if (iPosSep >= 0)
    {
      sValPrm   = psValeurs.substring(0, iPosSep-1);
      psValeurs = psValeurs.substring(iPosSep + 1);
    }
    else
    {
      sValPrm = psValeurs
      psValeurs = ""      
    }
    psEntree = sReplace(psEntree, "%" + sNomPrm + "%" , sValPrm)
    iPos = psValeurs.indexOf("=",1);
  }
  psEntree = sReplace(psEntree, c255,"|");
  return psEntree;
}


function bChampOk( oChp, bOk, sAlerte, sPrms)
{
  if (bOk==false) 
  {    
    if (bVerifNotNull(sAlerte) ) {
      if ( bVerifNotNull(sPrms)) { sAlerte = sInsereParams(sAlerte, sPrms); };
      alert(sAlerte);
    }   
    if (oChp) {
      if (oChp.focus) oChp.focus();
      if (oChp.select) oChp.select();
    }
  }
  return bOk;
}


// Verifie la cohérence d'un numéro de téléphone saisi
// si bOblig vaut false et que la chaine est vide renvoie true
function bVerifNumTel(sChaine, iLg, sEnsCar, bOblig)
{
  var bOk = true;
  if ((!bOblig) && (bEstVide(sChaine))) return true;
  bOk = bVerifLongueur(sChaine, iLg, iLg,false);
  if (bOk) bOk = bVerifCaracteres(sChaine, sEnsCar);  
  return bOk;
}

// Verifie si une chaine saisie ne contient que des chiffres
// donc si c'est un entier
function bVerifDigits(sChaine)
{ return bVerifCaracteres(sChaine, '0123456789'); }

// Verifie si une chaine saisie représente un numérique
function bVerifNumerique(sChaine)
{ return bVerifCaracteres(sChaine, '0123456789., -+');} 

// Verifie si une adresse email saisie est cohérente
function bVerifEmail(sChaine)
{ var bRes=true;
  bRes=bVerifNotNull(sChaine);
  if (bRes)
  { var paro= sChaine.indexOf("@",0);
    if (paro>=0)
    {bRes = (sChaine.indexOf(".",paro)>=0);}
    else
    { bRes = false;}
  }
  return bRes;
}

//[CBP] 29/11/2001
// Verifie si une adresse email non-obligatoire saisie est cohérente
function bVerifEmailOuVide(sChaine)
{ 
  var bRes=true;
  var bVide=!bVerifNotNull(sChaine);
  if (!bVide)
  {
    var paro= sChaine.indexOf("@",0);
    if (paro>=0)
    {
      bRes = (sChaine.indexOf(".",paro)>=0);
    }
    else
    {
      bRes = false;
    }
  }
  return bRes;
}

// vérifie la validité d'un numéro de carte bleue saisi
function bVerifNumCB(sChaine)
{
 var bRes= true;
 bRes = bVerifLongueur(sChaine,16,16,true);
 if (bRes) bRes = bVerifDigits(sChaine);
 if (bRes)
 {
		var bNumChiffreImpair = true;
		var somme = 0;
		var i = 0;
    var iChiffre = 0;
    var bok = true;
    while (i <= 15)
    {
     iChiffre = iStringToInt(sChaine.substring(i,i+1));
     i=i+1;
     if (bNumChiffreImpair==true)
     { 
       iChiffre=iChiffre*2;
       if (iChiffre>9) { iChiffre=iChiffre-9;}
       bNumChiffreImpair=false;
     }
     else
     { bNumChiffreImpair=true;  }
     somme = somme + iChiffre;
    }
    if (somme==0) { bRes = false; }
    if ((somme %= 10) != 0 ) { bRes = false; }
 } 
 return bRes;
}

//Verifie la validite d'une date
function bVerifDateValide(iJour, iMois, iAnnee, iBascule)
{var bOk=true;
 bOk=(!isNaN(iJour))&&(!isNaN(iMois))&&(!isNaN(iAnnee));
 if (!isNaN(iBascule)) 
 {iBascule=50;}
 else
 { iBascule = iBascule % 100;}
 if (bOk)
 { if (iAnnee < 100) 
   {  if (iAnnee<=iBascule)
      {  iAnnee += 2000;}
      else
      {  iAnnee += 1900;}
   } 
 }  
 if (bOk) bOk = bVerifIntervalle(iMois,1,12);
 if (bOk) 
 {  var jdm=iJoursDansMois(iMois-1,iAnnee)
    bOk = bVerifIntervalle(iJour,1,jdm);
 }
 
 return bOk;
}

// Verifie à partir d'une date de naissance si la personne a bien l'age voulu
function bVerifAge(dtDateNaiss,iAge)
{
 var TODAY = new dtDateServeur;
 dtDateNaiss.inc(0,0,iAge);
 if (iCompareDate(TODAY,dtDateNaiss)>0)
 { return true;}
 else
 { return false;}
}


// ==> Convertit une chaine en date en utilisant le format spécifier par le paramètre iFormat
// ==> Si la conversion réussit, renvoie une date et true dans bOk
// ==> Si la conversion échoue, renvoie 0 et false dans bOk
//
// Valeurs de iFormat prises en compte
// jjmmaa          1
// jjmmaaaa      101  
// aammjj          2
// aaaammjj      102
// mmjjaa          3
// mmjjaaaa      103
// mmaa           11          ==> la date renvoyée est le premier jour du mois
// mmaaaa        111          ==> la date renvoyée est le premier jour du mois
// aamm           12 ou  13   ==> la date renvoyée est le premier jour du mois
// aaaamm        112 ou 113   ==> la date renvoyée est le premier jour du mois
// ---------
// [AC] - 04/01/2001 : Si iBasculeSiecle non spécifié (null ou < 0), l'année en cours en prise par défaut.
function dtStringToDate(sChaine, iFormat,iBasculeSiecle)
{
 var iPosJour,iPosMois,iPosAnnee;
 var iLgAnnee;
 var sJour,sMois,sAnnee;
 var iJour,iMois,iAnnee;
 var bAnneeAAAA=false;
 var bOk=false;
 
 if (iFormat>100)
 {  iLgAnnee=4;
    iFormat = iFormat-100;
    bAnneeAAAA=true;
 } 
 else 
 {  iLgAnnee=2;
 }
 switch (iFormat)
 { case 1 : iPosJour=0;iPosMois=2;iPosAnnee=4; break;
   case 2 : iPosAnnee=0;iPosJour=iLgAnnee;iPosMois=iLgAnnee+2; break;
   case 3 : iPosJour=2;iPosMois=0;iPosAnnee=4;break;
   case 11: iPosJour=-1;iPosMois=0;iPosAnnee=2;break;
   case 12,13:iPosJour=-1;iPosAnnee=0;iPosMois=iLgAnnee;break;
   default: iPosJour=0;iPosMois=2;iPosAnnee=4;
 }
 if (iPosJour>=0)
 {  sJour=sChaine.substring(iPosJour,iPosJour+2);  }
 else
 {  sJour=1;  }
 
 sMois=sChaine.substring(iPosMois,iPosMois+2);
 sAnnee=sChaine.substring(iPosAnnee,iPosAnnee+iLgAnnee);
 iJour=iStringToInt(sJour);
 bOk = !isNaN(iJour);
 if (bOk) iMois=iStringToInt(sMois);
 bOk = !isNaN(iMois);
 if (bOk) iAnnee=iStringToInt(sAnnee);
 bOk = !isNaN(iAnnee);
 if (!bAnneeAAAA)
 {   
     if ( isNaN(iBasculeSiecle)) iBasculeSiecle = -1
     if ( iBasculeSiecle < 0) 
     {
       var dtToday = new dtDateServeur;
       iBasculeSiecle = dtToday.getYearFull() % 100;
     }
     if (iAnnee<=iBasculeSiecle) 
     {   iAnnee=iAnnee+2000; }
     else
     {   iAnnee=iAnnee+1900; }
 }
 if (bOk) bOk = bVerifIntervalle(iMois,1,12);
 if (bOk) 
 {  var jdm=iJoursDansMois(iMois-1,iAnnee)
    bOk = bVerifIntervalle(iJour,1,jdm);
 }
 if (bOk)
 { return new Date(iAnnee,iMois-1,iJour);}
 else
 { return 0;}
}

// Verifie la cohérence d'une date de naissance saisie et si la personne et majeure
// Valeurs de iFormat : voir dtStringToDate
function bVerifMajeur(sChaine,iFormat,iAge)
{ var bOk=false;
  var dtNaiss;
  
  dtNaiss=dtStringToDate(sChaine,iFormat,-1);
  
  bOk = !(dtNaiss==0);
  if (bOk) bOk=bVerifAge(dtNaiss,iAge);
  return bOk;
}

// Vérifie la cohérence d'une date de validite de CB saisie
// Valeurs de iFormat : voir dtStringToDate
function bVerifDateCB(sChaine, iFormat)
{
  var bRes = true;
  var dtDateCB=new Date();
  var TODAY=new dtDateServeur();
  dtDateCB = dtStringToDate(sChaine,iFormat,50);
  if (dtDateCB!=0)               // ==>01/03/2001
  {  dtDateCB.inc(0,1,0); // ==>01/04/2001
     dtDateCB.inc(-1,0,0); // ==>31/03/2001
     if (iCompareDate(dtDateCB,TODAY)<0) bRes=false;
  }
  return bRes;
}

function bVerifDateCombos(sj,sma)
{
 var j = parseInt(sj, 10);
 var a  = parseInt( sma.substr(0,4),10);
 var m  = parseInt( sma.substr(4,2),10);
 return bVerifDateValide(j,m,a,50);
}
//-->


