/**
 * Bibliothèque de fonction javascript sur la gestion des dates 
 * @author Coudreuse Mickael
 * @date 30/08/2006
 *
 *
 */


/**
 * Normalise la date.
 * Normalise le format de la date si possible en 'jj/mm/aaaa' ou retourne false si le format est incorrect.
 * @param Srting madate
 * @return String norm_date ou false;
*/ 
function Normalise_Date(madate)
{
 var ANNEE_LIMIT = 20;
 var jour;
 var mois;
 var annee;
  
  //////////////////////////////////////////// 
  // Liste Format :
	 
	  // jj/mm/aaaa
	  var valid_dateJJMMYYYY = /^[0-3]{1}[0-9]{1}[/\-_ \.]{0,1}[01]{1}[0-9]{1}[/\-_ \.]{0,1}[12]{1}[0-9]{3}$/ ;
	  
	  // jj/mm/aa
	  var valid_dateJJMMYY = /^[0-3]{1}[0-9]{1}[/\-_ \.]{0,1}[01]{1}[0-9]{1}[/\-_ \.]{0,1}[0-9]{2}$/ ;
	  	  
	  // mm/aa
	  var valid_dateMMYY = /^[01]{1}[0-9]{1}[/\-_ \.]{0,1}[0-9]{2}$/ ;

      // mm/aaaa -> confrontation avec jj/mm/aa si aucun séparateur
      
  /////////////////////////////////////////////
   
  // converti mm/aa -> jj/mm/aaaa
  if( valid_dateMMYY.test(madate))
  {  
     if(madate.length == 4) // sans séparateur
     {
	      jour  = '01';
	      mois  = madate.substr(0,2);
	      annee = madate.substr(2,2);
	 }
	 else
	 {
	      jour  = '01';
	      mois  = madate.substr(0,2);
	      annee = madate.substr(3,2);	 	 
	 }
	 
	 if( annee > ANNEE_LIMIT ) annee = '19'+annee ; 
     else annee = '20'+annee;     
	 if(mois > 12) return false;
	     
     madate = jour+'/'+mois+'/'+annee;     	 
  }
  
  // converti jj/mm/aa -> jj/mm/aaaa
  if( valid_dateJJMMYY.test(madate))
  {    
     if(madate.length == 6)  // sans séparateur
     {
	      jour  = madate.substr(0,2);
	      mois  = madate.substr(2,2);
	      annee = madate.substr(4,2);
	 }
	 else 
	 {
	      jour  = madate.substr(0,2);
	      mois  = madate.substr(3,2);
	      annee = madate.substr(6,2);	 	 
	 }    
     if( annee > ANNEE_LIMIT ) annee = '19'+annee ; 
     else annee = '20'+annee;
     
     madate = jour+'/'+mois+'/'+annee;            
  }

  // Test final de la date modifié ou non avant.
  if( valid_dateJJMMYYYY.test(madate))
  {      
     if(madate.length == 8) // sans séparateur
     {
	      jour  = madate.substr(0,2);
	      mois  = madate.substr(2,2);
	      annee = madate.substr(4,4);
	 }
	 else
	 {
	      jour  = madate.substr(0,2);
	      mois  = madate.substr(3,2);
	      annee = madate.substr(6,4);	
	 }    
     
     jourmax = new Date(annee,mois,0).getDate(); // regarde le nombre de jour max pour le mois.
     if(jour == 0 || jour > jourmax)    return false;     
     if(mois == 0 || mois > 12)    return false;
     madate = jour+'/'+mois+'/'+annee;     
     
     return madate;
  }
  else return false;  
}

/**
 *  Permet de convertir une date normalisée 
 *  au format ISO : jj/mm/aaaa
 *  @param Date madate (normalisée)
 *  @return Date ou false
 *
 */
function ConvDateISO(madate)
{
    if(madate)
	 return madate.substr(6,4)+madate.substr(3,2)+madate.substr(0,2);
	else return false;
}

/**
 *  Cette fonction permet de savoir si une date normalisé est compris entre deux.
 *  On peut soit donner la borne inférieure,soit la borne supérieure, soit les deux.
 *  La fonction renvoie false en cas d'échec et true sinon. 
 *  Les bornes doivent être des dates normalisées aussi (jj/mm/aaaa)
 *
 *  Comparaison par défaut : date_inf <= madate < date_sup
 *
 *  @param Date madate
 *  @param Date date_inf
 *  @param Date date_sup
 *  @param booleen strict_inf ( defaut '<=' sinon '<' -> true, '<=' -> false)
 *  @param booleen strict_sup ( defaut '<'  sinon '<' -> true, '<=' -> false)
 *
 *  @return booleen
 */
function Compare_Dates(madate, date_inf, date_sup, strict_inf , strict_sup )
{        
    var BorneInf = true;
    var BorneSup = true;
    var madate_iso;
    
    var Comp1;
    var Comp2;
    var Operation='';
    
	if(madate!=false ) madate_iso = ConvDateISO(madate);	 
    else  return false;  
     
    if(date_inf)
    {
	   date_inf_iso = ConvDateISO(date_inf);

	   if(strict_inf==null || strict_inf==false)
	   {	     
	     if(!(date_inf_iso <= madate_iso  ))  BorneInf = false;
	   }
	   else if(strict_inf==true)
	   {
	     if(!(date_inf_iso < madate_iso )) BorneInf = false;
	   }
	   else 
	   {	    
	     alert("Mauvais paramêtre strict_inf (true/false)");	   	   
	     return false;
	   }
	}
	   
	//alert("madate_iso="+madate_iso);
	   
    if(date_sup)
    {
	   date_sup_iso = ConvDateISO(date_sup);	   	  
	   
	   if(strict_sup==null || strict_sup==true)
	   {
	      if(!(madate_iso < date_sup_iso )) BorneSup = false;
	   }
	   else if(strict_sup==false)
	   {
	      if(!(madate_iso <= date_sup_iso )) BorneSup = false;
	   }
	   else 
	   {
	     alert("Mauvais paramêtre strict_sup (true/false)");
	     return false;
	   }
	}   
    return BorneInf && BorneSup;
}

/**
 *  Ajout temporelle sur une date
 *  Cette fonction permet d'ajouter ou de retirer des jours,mois et/ou année
 *  à une date au format 'jj/mm/aaaa'
 */
function Ajout_Date(madate,j,m,a)
{
   var obj_date;
   
   if(madate)
   {
     var tabdate=madate.split('/',3);
     var jour=parseInt(tabdate[0],10);
     var mois=parseInt(tabdate[1],10);
     var annee=parseInt(tabdate[2],10);
     
     j=parseInt(j,10);
     m=parseInt(m,10);
     a=parseInt(a,10);
     
     jourmax = new Date(annee+a,mois+m,0).getDate();
     if(jour>jourmax)
       jour=jourmax;
     obj_date = new Date(annee+a,mois+m-1,jour+j);
     
     var strjour='0'+obj_date.getDate();
     var strmois='0'+(obj_date.getMonth()+1);
     var strannee=''+obj_date.getFullYear();
     
     return strjour.substr(strjour.length-2,2)+'/'+strmois.substr(strmois.length-2,2)+'/'+strannee;
   }
   else return false;
}

/**
 *  Sousctraction des deux dates
 *  Cette fonction permet calculer l'intervalle en jours, mois, années entre deux dates
 *  à une date au format 'jj/mm/aaaa'
 *  date1 > date2 : nombre > 0
 */
function Diff_Date(date1,date2, intervalle)
{
   if(date1 && date2)
   {
     var tabdate1=date1.split('/',3);
     var jour1=parseInt(tabdate1[0],10);
     var mois1=parseInt(tabdate1[1],10);
     var annee1=parseInt(tabdate1[2],10);
     
     var tabdate2=date2.split('/',3);
     var jour2=parseInt(tabdate2[0],10);
     var mois2=parseInt(tabdate2[1],10);
     var annee2=parseInt(tabdate2[2],10);
     
     switch(intervalle)
     {
       // Calcul de la différence des dates en jours
       case 'j':
         var objdate1=new Date(annee1,mois1-1,jour1);
         var objdate2=new Date(annee2,mois2-1,jour2);
         
         resultat=(objdate1.getTime()-objdate2.getTime())/(1000*3600*24);
         //alert(resultat);
         return parseInt(resultat,10);
         break;
       case 'm':
         var resultat=(annee1*12+mois1)-(annee2*12+mois2);
         if(resultat>=0 && jour1< jour2)
           resultat=resultat-1;
         if(resultat<0 && jour1> jour2)
           resultat=resultat+1;
         return parseInt(resultat,10);
         break;
       case 'a':
         var resultat=annee1-annee2;
         if(resultat>0 && (mois2>mois1 || (mois2==mois1 && jour2>jour1)))
           resultat=resultat-1;
         if(resultat<0 && (mois2<mois1 || (mois2==mois1 && jour2<jour1)))
           resultat=resultat+1;
         return parseInt(resultat,10);
         break;
       default:
         return false;
     }
   }
   return false;
}

/**
 *  Retourne la date d'aujourd'hui au format jj/mm/aaaa
 *  @return Date
 */
// Déplacé dans _HautPage.php pour récupérer la date du serveur.

//function Aujourdhui()
//{
//  var Date_Auj = new Date();
//  var jour  = Date_Auj.getDate();
//  var mois  = Date_Auj.getMonth()+1;
//  var annee = Date_Auj.getFullYear();
//  
//  if(mois < 10 ) mois = '0'+mois;                       
//  if(jour < 10 ) jour = '0'+jour;
//   
//  //alert("Date : " + jour +'/'+mois+'/'+annee );
//  
//  return jour+'/'+mois+'/'+annee;
//}

/**
 *  Retourne la date d'aujourd'hui au format jj/mm/aaaa
 *  @return Date
 */
function getHeureAujourdhui()
{
  var Date_Auj = new Date();
  return parseInt(Date_Auj.getHours(),10);  
}



/**
 *  Retourne le jour d'une date normalisée.
 */
function getJour(madate)
{
   if(madate)
   {
     var tabdate=madate.split('/',3);
     var j = '0'+parseInt(tabdate[0],10);
     return j.substr(j.length-2,2)
   }
   else return false;
}

/**
 *  Retourne le mois d'une date normalisée.
 */
function getMois(madate)
{
   if(madate)
   {
     var tabdate=madate.split('/',3);
     var m = '0'+parseInt(tabdate[1],10);
     return m.substr(nbj.length-2,2)
   }
   else return false;   
}

/**
 *  Retourne l'année d'une date normalisée.
 */
function getAnnee(madate)
{
   if(madate)
   {
     var tabdate=madate.split('/',3);
     return parseInt(tabdate[3],10);
   }
   else return false;   
}

/**
 * @return booleen
 */
function isDateVide(madate)
{
  return madate=='' || madate=='jj/mm/aaaa';
}


//////////////////////////////////////////////////////////
//
//
//
//////////////////////////////////////////////////////////
/**
 *  Vérification du format de la date.
 *  Ecrit la date au bon format si possible, sinon affiche un message d'erreur et efface le champs.
 *  @param Champ Case_Date
 *  @return booleen
 */
function Valid_Date(Case_Date)
{
  var format_date;

  if(Case_Date.value != '' || Case_Date.value != 'jj/mm/aaaa')
  {
	  if(format_date = Normalise_Date(Case_Date.value))  
	  {
        Case_Date.value = format_date;
	    return true;
	  }
	  else
	  {
	    Case_Date.value='';	
	    alert("Veuillez entrer une date au format jj/mm/aaaa");
	    Case_Date.focus();
	    return false;
	  }
  }
  else return true;
}


function Valid_Date_Effet(Case_Date)
{
   if(!Valid_Date(Case_Date)) return false; 
   
   if(!Compare_Dates(Case_Date.value, Aujourdhui() ))
   {
     alert("La date d'effet ne doit pas être inférieur à la date d'aujourd'hui.");
     Case_Date.focus();
	 return false; 
   }   
   else return true;
}


function Valid_Date_Post(Case_Date)
{
   if(!Valid_Date(Case_Date)) return false; 
   
   if(!Compare_Dates(Case_Date.value,'', Aujourdhui(),'',false ))
   {
     alert("La date ne doit pas être supérieur à la date d'aujourd'hui.");
     Case_Date.value='';	
     Case_Date.focus();
	 return false; 
   }   
   else return true;
}

function Valid_Date18(Case_Date)
{
   if(!Valid_Date(Case_Date)) return false;
   
   if(!Valid_Date_Post(Case_Date)) return false;   
   
   if( Diff_Date(Aujourdhui(),Case_Date.value ,'a') < 18 )
   {
      alert("L'âge minimum est de 18 ans.")
      Case_Date.value='';
      Case_Date.focus();
      Case_Date.select();
      
      return false;
   }
   else return true;
}

function Valid_Date25(Case_Date)
{
   if(!Valid_Date(Case_Date)) return false;
   
   if(!Valid_Date_Post(Case_Date)) return false;   
   
   if( Diff_Date(Aujourdhui(),Case_Date.value ,'a') < 25 )
   {
      alert("L'âge minimum pour les conducteurs occasionnels est de 25 ans.")
      Case_Date.value='';
      Case_Date.focus();
      Case_Date.select();
      
      return false;
   }
   else return true;
}

function Valid_Date2(Case_Date)
{
   if(!Valid_Date(Case_Date)) return false;
   
   if( Diff_Date(Aujourdhui(),Case_Date.value ,'j') > 1 )
   {
      alert("Il doit y avoir 2 jour de décalage au minimum")
      Case_Date.value=Ajout_Date(Aujourdhui(),2,0,0);
      Case_Date.focus();
      Case_Date.select();
      
      return false;
   }
   else return true;
}

function Init_Date_effet(Case_Date)
{
	Case_Date.value=Aujourdhui();
}
//teste juste si une date est bonne
function checkdate( j, m, a ) {
 		 ok=1;
         var d2=new Date(a,m-1,j);
         j2=d2.getDate();
         m2=d2.getMonth()+1;
         a2=d2.getFullYear();
         if (a2<=100) {a2=1900+a2}
         if ( (j!=j2)||(m!=m2)||(a!=a2) ) {
            ok=0;
         }
    
      return ok;
    
}


function updateStrDate(idChampDate)
{
	var jour  = document.getElementById("JOUR_"+idChampDate).value;
	var mois  = document.getElementById("MOIS_"+idChampDate).value;
	var annee = document.getElementById("ANNEE_"+idChampDate).value;	
	document.getElementById("DATE_"+idChampDate).value = jour+"/"+mois+"/"+annee;	
}
function updateStrHeure(idChampHeure)
{
	var heure  = document.getElementById("HEURE_"+idChampHeure).value;
	var minute = document.getElementById("MINUTE_"+idChampHeure).value;
	document.getElementById("FULLHEURE_"+idChampHeure).value = heure+":"+minute;	
}
function resetStrDate(idChampDate)
{
	document.getElementById("DATE_"+idChampDate).value = "";	
}



