//////////////////////////////////////////////////////////////
// Librairie   : date.js
// Description : gestion des dates
//
// Date de creation     :   /06/99		Auteur : MOUTON
// Date de modification : 30/06/99		Auteur : F.TOUDROSS
//        - ajout de la fonction FinitDateDuJour
//        - autorisation des champs date vide
//        - dans la fonction Fpivot, enlevement du point vigule avant le else
//        - renome FverifDate en FvaliderDate
//        - ajout d'envoi de la date pivot par parametre
// Date de modification : 01/07/99		Auteur : MOUTON
//        - ajout des formats de date
//  j/m/aa jj/m/aa j/mm/aa j/m/ssaa jj/m/ssaa j/mm/ssaa 
// Date de modification : 05/07/99		Auteur : F.TOUDROSS
//        - mise a plat des variables globales et parametres
//         
//////////////////////////////////////////////////////////////
// variables globales
var VGjj;
var VGmm;
var VGaa;
var VGss;
var VGssaa;
var VGdateok = true;
var VGpivot = 80;
var VGmoisarray = new Array(13);

/*************************************************************
* FinitDateDuJour : initialise le champ a la date du jour
* VPchamp : champ du formulaire de type date
**************************************************************/
function FinitDateDuJour(VPchamp)
{ var jj, mm, aa, ssaa, VLdateFormate;
  var VLdate = new Date();
  jj =  String(VLdate.getDate());
  if (jj.length < 2) jj = '0' + jj;
  mm = String((VLdate.getMonth())+ 1);
  if (mm.length < 2) mm = '0' + mm;
  aa =  VLdate.getYear();
//  ssaa = 1900 + aa;
//  VLdateFormate = jj+"/"+mm+"/"+ssaa;

if (navigator.appName.indexOf("Netscape") != -1) {
		aa = aa - 100;
		if (aa < 10) {
                     aa = "200" + aa;
                           }else{
                     aa = "20" + aa;}        
              }
        
  VLdateFormate = jj+"/"+mm+"/"+aa;
  VPchamp.value = VLdateFormate;
  return true;
}

/*************************************************************
* FrepriseDate : verifie si le champ est une date valide
* VPchampSrc : element du formulaire source
* VPchampDst : element du formulaire destination
**************************************************************/
function FrepriseDate(VPchampSrc, VPchampDst)
{ if ( VPchampDst.value != "" ) return false;
  if ( ! FvaliderDate(VPchampSrc) ) return false;
  VPchampDst.value = VPchampSrc.value;
  return true;
}


/**************************************************************
* FvaliderDate : validation du format date de (VPchamp)         
* l annee pivot est passee en parametre
**************************************************************/
function FvaliderDate(VPchamp,VPpivot) //FverifDate(VPchamp)
{ 
VGpivot = VPpivot;
// initialisation du tableau du nb de jours par mois
Finitialisertableau()
 
// variables locales
var VLvaleurChampDate = String (VPchamp.value);
var VLlongueurdate = VLvaleurChampDate.length;

// determinantion du format de la date saisie. si
// la date n'a pas une longueur valide --> message d'erreur.
{ 
if ( VLlongueurdate == 0) return
else
if ( VLlongueurdate == 6)
 { Ftrtlong6(VPchamp)
 }
   else {if ( VLlongueurdate == 7)
           { Ftrtlong7(VPchamp);
           } 
      else {if ( VLlongueurdate == 8)
          { Ftrtlong8(VPchamp);
          } 
         else { if ( VLlongueurdate == 9)
                   { Ftrtlong9(VPchamp);
                   }
                else { if ( VLlongueurdate == 10)
                     { Ftrtlong10(VPchamp);
                     }
                       else
                         {VGdateok = false;
                         FmessageDate(VPchamp,1);}
                     }   
               }
	   }
      }
} 

{ 

// test de numericite sur annee mois jour. si non numerique --> message erreur
if (VGdateok == true) 
  {
FvaliderDateEntier(VPchamp, VGssaa);
  }
if (VGdateok == true) 
  {
FvaliderDateEntier(VPchamp, VGmm);
  }
if (VGdateok == true) 
  {
FvaliderDateEntier(VPchamp, VGjj);
  }

// determinantion de la bissextilite de l annee
if (VGdateok == true) 
  {
Fbissextile();

// validation du numero de jour du numero de mois et coherence des deux
FValidation(VPchamp);
  }
}

// mise en forme du champ date au format jj/mm/ssaa
{if (VGdateok == true) 
    { VPchamp.value = VGjj + "/" + VGmm + "/" + VGssaa ;
      return true ;
    }

   else {
   VGdateok = true;
   return false;
        }  ;
}
}

/****************************************************************
* Ftrtlong6() : verification de numericite des champs de la date
*               j/m/aa ou jjmmaa 
*****************************************************************/
function Ftrtlong6(VPchamp)
{
 var VLvaleurChampDate = String (VPchamp.value);
 {if ((VLvaleurChampDate.charAt(1) == " " && VLvaleurChampDate.charAt(3) == " ") ||
     (VLvaleurChampDate.charAt(1) == "/" && VLvaleurChampDate.charAt(3) == "/") ||
     (VLvaleurChampDate.charAt(1) == "-" && VLvaleurChampDate.charAt(3) == "-"))
 {VGjj = "0" +  VLvaleurChampDate.charAt(0);
  VGmm = "0" +  VLvaleurChampDate.charAt(2);
  VGaa = VLvaleurChampDate.charAt(4) +  VLvaleurChampDate.charAt(5);
 } 
else
 {VGjj = VLvaleurChampDate.charAt(0) +  VLvaleurChampDate.charAt(1);
  VGmm = VLvaleurChampDate.charAt(2) +  VLvaleurChampDate.charAt(3);
  VGaa = VLvaleurChampDate.charAt(4) +  VLvaleurChampDate.charAt(5);
 }
}
Fpivot();
return;
}

/*****************************************************************
* Ftrtlong7(VPchamp) : j/mm/aa ou jj/m/aa
*               
******************************************************************/
function Ftrtlong7(VPchamp)
{
 var VLvaleurChampDate = String (VPchamp.value);
 {if ((VLvaleurChampDate.charAt(1) == " " && VLvaleurChampDate.charAt(4) == " ") ||
     (VLvaleurChampDate.charAt(1) == "/" && VLvaleurChampDate.charAt(4) == "/") ||
     (VLvaleurChampDate.charAt(1) == "-" && VLvaleurChampDate.charAt(4) == "-"))
    {VGjj = "0" +  VLvaleurChampDate.charAt(0);
     VGmm = VLvaleurChampDate.charAt(2) +  VLvaleurChampDate.charAt(3);
     VGaa = VLvaleurChampDate.charAt(5) +  VLvaleurChampDate.charAt(6);
    } 
  else
   { if
    ((VLvaleurChampDate.charAt(2) == " " && VLvaleurChampDate.charAt(4) == " ") ||
     (VLvaleurChampDate.charAt(2) == "/" && VLvaleurChampDate.charAt(4) == "/") ||
     (VLvaleurChampDate.charAt(2) == "-" && VLvaleurChampDate.charAt(4) == "-"))
     {VGjj = VLvaleurChampDate.charAt(0) +  VLvaleurChampDate.charAt(1);
     VGmm = "0" +  VLvaleurChampDate.charAt(3);
     VGaa = VLvaleurChampDate.charAt(5) +  VLvaleurChampDate.charAt(6);
     }
     else 
     { FmessageDate(VPchamp,0);
     }   
   }
 }
Fpivot();
return;
}

/*****************************************************************
* Ftrtlong8(VPchamp) : analyse du type de date traite et redirection
*               vers les procedures voulues
*           Ftrtlong8Sep(): date de type jj/mm/aa
*           Ftrtlong8SansSep() : date du type jjmmssaa
******************************************************************/
function Ftrtlong8(VPchamp)
{
var VLvaleurChampDate = String (VPchamp.value);
if ((VLvaleurChampDate.charAt(2) == " " && VLvaleurChampDate.charAt(5) == " ") ||
    (VLvaleurChampDate.charAt(2) == "/" && VLvaleurChampDate.charAt(5) == "/") ||
    (VLvaleurChampDate.charAt(2) == "-" && VLvaleurChampDate.charAt(5) == "-"))
    Ftrtlong8Sep(VPchamp, VLvaleurChampDate);
else {if 
      ((VLvaleurChampDate.charAt(1) == " " && VLvaleurChampDate.charAt(3) == " ") ||
       (VLvaleurChampDate.charAt(1) == "/" && VLvaleurChampDate.charAt(3) == "/") ||
       (VLvaleurChampDate.charAt(1) == "-" && VLvaleurChampDate.charAt(3) == "-")) 
	    Ftrtlong8AveSep(VPchamp, VLvaleurChampDate);
      else Ftrtlong8SansSep(VPchamp, VLvaleurChampDate);
     }
return;
} 

/****************************************************************
* Ftrtlong8Sep(VPchamp) : traitement date du type jj/mm/aa 	*
*           							*
*****************************************************************/
function Ftrtlong8Sep(VPchamp, VPvaleurChampDate)
{
VGjj = VPvaleurChampDate.charAt(0) +  VPvaleurChampDate.charAt(1);
VGmm = VPvaleurChampDate.charAt(3) +  VPvaleurChampDate.charAt(4);
VGaa = VPvaleurChampDate.charAt(6) +  VPvaleurChampDate.charAt(7);
 Fpivot();
 return;
}

/****************************************************************
* Ftrtlong8Sep(VPchamp) : traitement date du type j/m/ssaa 	*
*           							*
*****************************************************************/
function Ftrtlong8AveSep(VPchamp, VPvaleurChampDate)
{
VGjj = "0" + VPvaleurChampDate.charAt(0);
VGmm = "0" + VPvaleurChampDate.charAt(2);
VGssaa = VPvaleurChampDate.charAt(4) +  VPvaleurChampDate.charAt(5) +  VPvaleurChampDate.charAt(6) +  VPvaleurChampDate.charAt(7);
return;
}

/****************************************************************
* Ftrtlong8SansSep(VPchamp) : traitement date du type jjmmssaa  *
*****************************************************************/
function Ftrtlong8SansSep(VPchamp, VPvaleurChampDate)
{

VGjj = VPvaleurChampDate.charAt(0) +  VPvaleurChampDate.charAt(1);
VGmm = VPvaleurChampDate.charAt(2) +  VPvaleurChampDate.charAt(3);
VGssaa = VPvaleurChampDate.charAt(4) +  VPvaleurChampDate.charAt(5) + VPvaleurChampDate.charAt(6) +  VPvaleurChampDate.charAt(7);
 return;
}



/*****************************************************************
* Ftrtlong9(VPchamp) : j/mm/ssaa ou jj/m/ssaa
*               
******************************************************************/
function Ftrtlong9(VPchamp)
{
 var VLvaleurChampDate = String (VPchamp.value);
 {if ((VLvaleurChampDate.charAt(1) == " " && VLvaleurChampDate.charAt(4) == " ") ||
      (VLvaleurChampDate.charAt(1) == "/" && VLvaleurChampDate.charAt(4) == "/") ||
      (VLvaleurChampDate.charAt(1) == "-" && VLvaleurChampDate.charAt(4) == "-"))
    {VGjj = "0" +  VLvaleurChampDate.charAt(0);
     VGmm = VLvaleurChampDate.charAt(2) +  VLvaleurChampDate.charAt(3);
     VGssaa = VLvaleurChampDate.charAt(5) +  VLvaleurChampDate.charAt(6) +  VLvaleurChampDate.charAt(7) +  VLvaleurChampDate.charAt(8);
    } 
  else
    { if
    ((VLvaleurChampDate.charAt(2) == " " && VLvaleurChampDate.charAt(4) == " ") ||
     (VLvaleurChampDate.charAt(2) == "/" && VLvaleurChampDate.charAt(4) == "/") ||
     (VLvaleurChampDate.charAt(2) == "-" && VLvaleurChampDate.charAt(4) == "-"))
      {VGjj = VLvaleurChampDate.charAt(0) +  VLvaleurChampDate.charAt(1);
      VGmm = "0" +  VLvaleurChampDate.charAt(3);
      VGssaa = VLvaleurChampDate.charAt(5) +  VLvaleurChampDate.charAt(6) +  VLvaleurChampDate.charAt(7) +  VLvaleurChampDate.charAt(8);
      }
      else 
      { FmessageDate(VPchamp,0);
      }   
    }
 }
return;
}

/****************************************************************
* Ftrtlong10(VPchamp) : traitement date du type jj/mm/ssaa      *
*****************************************************************/
function Ftrtlong10(VPchamp)
{
var VLvaleurChampDate = String (VPchamp.value);
if ((VLvaleurChampDate.charAt(2) == " " && VLvaleurChampDate.charAt(5) == " ") ||
    (VLvaleurChampDate.charAt(2) == "/" && VLvaleurChampDate.charAt(5) == "/") ||
    (VLvaleurChampDate.charAt(2) == "-" && VLvaleurChampDate.charAt(5) == "-"))

{ VGjj = VLvaleurChampDate.charAt(0) +  VLvaleurChampDate.charAt(1);
  VGmm = VLvaleurChampDate.charAt(3) +  VLvaleurChampDate.charAt(4);
  VGssaa = VLvaleurChampDate.charAt(6) +  VLvaleurChampDate.charAt(7) + VLvaleurChampDate.charAt(8) +  VLvaleurChampDate.charAt(9);
 return;
}
else 
{
  FmessageDate(VPchamp,4);
  
  }
}

/*****************************************************************
* Fpivot : fenetrage de VGaa par rapport a VGpivot               * 
*****************************************************************/
function Fpivot()
{
var VLaanumerique = Math.round(VGaa)
if (VLaanumerique > VGpivot)
    { VGssaa = "19" + VGaa}
 else {VGssaa = "20" + VGaa};
 return; 
}

/****************************************************************************
* Fbissextile() : determination du nombre de jours du mois de fevrier * 
*****************************************************************************/
function Fbissextile()
{var VLannee
 var VLsiecle
 
 VLannee = VGssaa.charAt(2) + VGssaa.charAt(3);
 VLsiecle = VGssaa.charAt(0) + VGssaa.charAt(1);
 VGmoisarray[2][2] = "28"
{ if (VLannee == "00")
    {var VLresult = VGssaa/400
     var VLrentier = Math.floor(VLresult) 
     if (VLresult == VLrentier )
        VGmoisarray[2][2] = "29";
     }
  else 
     { VLresult = VGssaa/4;
       VLrentier = Math.floor(VLresult)
         if (VLresult == VLrentier )
          VGmoisarray[2][2] = "29";
         
     }
 
}
// return
}

/****************************************************************************
* FValidation() : validation de la date saisie                              * 
*****************************************************************************/
function FValidation(VPchamp)
// on valide ici le nombre de jours/ au mois ds lequel on se trouve
{ var VLjour
 
for (var j = 0; j < 13; j++)
   { 
   if  (VGmm == VGmoisarray[j][1]) 
        VLjour = VGmoisarray[j][2];
        VLvalid = true 
        
   }

 
if ((VGjj < "01" || VGjj > VLjour  || (VGmm < "01" || VGmm > "12" ))  )
   {
 FmessageDate(VPchamp,3);       
   }
else return true ;
}


/**************************************************************************
* Finitialisertableau() : initialise le tableau des nb jour/mois          * 
***************************************************************************/
function Finitialisertableau()
{
for (var j = 0; j < VGmoisarray.length; j++)  {  // Prépare le remplissage du tableau 
     var VLLigne = new Array(2);  // Crée une ligne.
    for (var i = 0; i < VLLigne.length; i++)  {  // Prépare le remplissage  
    VLLigne[i] = (" ");  // initialise le tableau à blanc.
    }
 VGmoisarray[j] = VLLigne;  // Place la ligne remplie dans le tableau.
}

// initialisation du nombre de jours par mois.
//janvier
VGmoisarray[1][1] = "01";
VGmoisarray[1][2] = "31";

//fevrier bissextile
VGmoisarray[2][1] = "02";
 
//mars
VGmoisarray[3][1] = "03";
VGmoisarray[3][2] = "31";

//avril
VGmoisarray[4][1] = "04";
VGmoisarray[4][2] = "30";

//mai
VGmoisarray[5][1] = "05";
VGmoisarray[5][2] = "31";

//juin
VGmoisarray[6][1] = "06";
VGmoisarray[6][2] = "30";

//juillet
VGmoisarray[7][1] = "07";
VGmoisarray[7][2] = "31";

//aout
VGmoisarray[8][1] = "08";
VGmoisarray[8][2] = "31";

//septembre
VGmoisarray[9][1] = "09";
VGmoisarray[9][2] = "30";

//octobre
VGmoisarray[10][1] = "10";
VGmoisarray[10][2] = "31";

//novembre
VGmoisarray[11][1] = "11";
VGmoisarray[11][2] = "30";

//decembre
VGmoisarray[12][1] = "12";
VGmoisarray[12][2] = "31";

return;
}


/*************************************************************
* FvaliderDateEntier : verifie si le champ ne contient que des chiffres
* VPchamp : element du formulaire
**************************************************************/
function FvaliderDateEntier(VPchamp, VPentier)
{
var VLentier = "0123456789"
var VLvalidation = false
var VLvalidOk = true
var j = 0
var i = 0

do 
   { 
     VLcaractere = VPentier.charAt(j);
    do 
     {if  (VLentier.charAt(i) ==  VLcaractere)
     {VLvalidation = true};
     i++    
     }
   while ((VLvalidation == false) && i < VLentier.length);
   if (VLvalidation == false)
   {VLvalidOk = false};
   j++ ;
   i = 0;
   VLvalidation = false;
  }
while ((j < VPentier.length) && (VLvalidOk == true) );
 
if (VLvalidOk == false)
   {  FmessageDate(VPchamp,0);
       
   }
else return true; 
}

/*********************************************************************************
* Compare deux dates au format jj/mm/ssaa
* Retourne vrai si VPChamp1 est apres VPChamp2
*********************************************************************************/
function Fisafter(VPchamp1, VPchamp2) {
var VLvaleurChampDate1 = String (VPchamp1.value);
var VLvaleurChampDate2 = String (VPchamp2.value);
if (VLvaleurChampDate1 == '') return true;
var annee1 = VLvaleurChampDate1.substring(6,VLvaleurChampDate1.length);
var annee2 = VLvaleurChampDate2.substring(6,VLvaleurChampDate2.length);
var mois1 = VLvaleurChampDate1.substring(3,5);
var mois2 = VLvaleurChampDate2.substring(3,5);
var jour1 = VLvaleurChampDate1.substring(0,2);
var jour2 = VLvaleurChampDate2.substring(0,2);
if (annee1 > annee2) return true;
else if (annee1==annee2 && mois1>mois2) return true;
else if (annee1==annee2 && mois1==mois2 && jour1>=jour2) return true;
else return false;
}

/*********************************************************************************
* fonction des anomalies
**********************************************************************************/
function FmessageDate(VPchamp, VPnumMsg)
{
 VPchamp.focus();   
 switch (VPnumMsg)
  { case 0 :
    case 1 :  
     alertit("Erreur de saisie","Cette date est incorrecte.\nElle doit être composée du JOUR (JJ), du MOIS (MM) et de l\'ANNEE (AA ou AAAA) avec ou sans séparateurs.",250,100);
            break;
    case 3 : 
      alertit("Erreur de saisie","Cette date est incorrecte (incohérence jour/mois).",250,100);
      break;
    case 4 : 
      alertit("Erreur de saisie","ATTENTION : Les caractères séparateurs des dates doivent être identiques et sont / ou - ou ESPACE.",250,100);
      break;
    default : alertit("Erreur de saisie","ERREUR DANS LE CODE MESSAGE.",250,100);
  }
 VGdateok = false;
 return false ;
 }

