// JavaScript Document
function checkValidDate(dateStr) {

    var slash1 = dateStr.indexOf("/");
    if (slash1 == -1) { slash1 = dateStr.indexOf("-"); }
    if (slash1 == -1) { return false; }
    var dateDay = dateStr.substring(0, slash1)
    var dateMonthAndYear = dateStr.substring(slash1+1, dateStr.length);
    var slash2 = dateMonthAndYear.indexOf("/");
    if (slash2 == -1) { slash2 = dateMonthAndYear.indexOf("-"); }
    if (slash2 == -1) { return false; }
    var dateMonth = dateMonthAndYear.substring(0, slash2);
    var dateYear = dateMonthAndYear.substring(slash2+1, dateMonthAndYear.length);
    if ( (dateMonth == "") || (dateDay == "") || (dateYear == "") ) { return false; }
    for (var x=0; x < dateMonth.length; x++) {
        var digit = dateMonth.substring(x, x+1);
        if ((digit < "0") || (digit > "9")) { return false; }
    }
    var numMonth = 0;
    for (var x=0; x < dateMonth.length; x++) {
        digit = dateMonth.substring(x, x+1);
        numMonth *= 10;
        numMonth += parseInt(digit);
    }
    if ((numMonth <= 0) || (numMonth > 12)) { return false; }
    for (var x=0; x < dateDay.length; x++) {
        digit = dateDay.substring(x, x+1);
        if ((digit < "0") || (digit > "9")) { return false; }
    }
    var numDay = 0;
    for (var x=0; x < dateDay.length; x++) {
        digit = dateDay.substring(x, x+1);
        numDay *= 10;
        numDay += parseInt(digit);
    }
    if ((numDay <= 0) || (numDay > 31)) { return false; }
    if ((numMonth == 2) && (numDay > 29)) { return false; }
    if ((numMonth == 4) || (numMonth == 6) || (numMonth == 9) || (numMonth == 11)) { 
        if (numDay > 30) { return false; } 
    }
    for (var x=0; x < dateYear.length; x++) {
        digit = dateYear.substring(x, x+1);
        if ((digit < "0") || (digit > "9")) { return false; }
    }
    var numYear = 0;
    for (var x=0; x < dateYear.length; x++) {
        digit = dateYear.substring(x, x+1);
        numYear *= 10;
        numYear += parseInt(digit);
    }
    if (  (dateYear.length != 4) ) { return false; }//(dateYear.length != 2) &&
    if ( (numYear < 50) && (dateYear.length == 2) ) { numYear += 2000; }
    if ( (numYear < 100) && (dateYear.length == 2) ) { numYear += 1900; }
    if ((numYear <= 0) || (numYear > 9999)) { return false; }
    if ((numMonth == 2) && (numDay == 29)) {
        var div4 = numYear % 4;
        var div100 = numYear % 100;
        var div400 = numYear % 400;
        if (div4 != 0) { return false; }
        if ((div100 == 0) && (div400 != 0)) { return false; }
    }
    return true;
}

function AfficheTemps () { 
  var Temps = new Date(); 
  var TempsLocal = Temps.getTime()+ (Temps.getTimezoneOffset()-60)*60; 
  var Maintenant = new Date(TempsLocal); 
  var Heure = " " + Maintenant.getHours(); 
  var minutes = Maintenant.getMinutes(); 
  var secondes = Maintenant.getSeconds(); 
  Heure += ((minutes < 10) ? ":0" : ":") + minutes; 
  Heure += ((secondes < 10) ? ":0" : ":") + secondes; 
  document.resa.Horloge.value = Heure; 
  var AujourdHui = " " + Maintenant.getDate(); 
  var Mois = Maintenant.getMonth()+1; 
  var Annee = Maintenant.getYear(); 
  AujourdHui += "/" + Mois + "/" + Annee; 
  document.resa.DateJour.value = AujourdHui; 
  Compteur = setTimeout("AfficheTemps()",1000); 
  CompteurTourne = true; 
  }
//***********************************************************************  
  


function DecomposeDate(LeParam1){ 

// S&eacute;pare les jours, les mois et les ann&eacute;es dans une date de type "22/05/1981"
// Renvoye le tout dans un tableau de taille 3

LeRetour = new Array(3);
LeJour="";
LeMois="";
LeAnnee="";

// Extraction du jour
i=0;
while((LeParam1.charAt(i)!="/")&&(i<10)){
LeJour+=LeParam1.charAt(i);
i++;
}
if(LeJour.charAt(0)=="0"){
LeJour=LeJour.charAt(1);
}
LeParam1=LeParam1.substring(i+1,LeParam1.length);

// Extraction du mois
i=0;
while((LeParam1.charAt(i)!="/")&&(i<10)){
LeMois+=LeParam1.charAt(i);
i++;
}
if(LeMois.charAt(0)=="0"){
LeMois=LeMois.charAt(1);
}
LeParam1=LeParam1.substring(i+1,LeParam1.length);


// Extraction de l'ann&eacute;e
LeAnnee=LeParam1;
LeRetour[0]=LeJour;
LeRetour[1]=LeMois;
LeRetour[2]=LeAnnee;
return LeRetour;
}


// -------------------------------------------



function DateMachine(LeParam1){

// Renvoye une date sans les 0 dans les mois ou les jours "02/03/1981" -> "2/3/1981"

LaDate = new Array(3);
LaDate = DecomposeDate(LeParam1);
LeRetour = LaDate[0]+"/"+LaDate[1]+"/"+LaDate[2];
return LeRetour;
}

// Renvoye une date en format anglais avec le s&eacute;parateur choisi "02/03/1981" -> "1981-3-2"
// Le premier param&egrave;tre est la date a convertir, le second est le caract&egrave;re de s&eacute;paration choisi
function DateAnglaise(LeParam1,LeParam2){

LaDate = new Array(3);
LaDate = DecomposeDate(LeParam1);

LeRetour = LaDate[2]+LeParam2+LaDate[1]+LeParam2+LaDate[0];
return LeRetour;
}



// -------------------------------------------

function ComparerDates(LeParam1,LeParam2){

// Compare 2 dates au format jj/mm/aaaa
// Renvoye 0 si &eacute;galit&eacute;, 1 si la premi&egrave;re est sup&eacute;rieure, sinon 2

var LeParam1 = DateAnglaise(LeParam1,"/");// Ne pas oublier d'utiliser cette fonction
// pour convertir en date anglaise, sinon le 05/07/2003 sera compris "7 mai 2003" par JavaScript

var LeParam2 = DateAnglaise(LeParam2,"/");
LeParam1 = Date.parse(LeParam1);
LeParam2 = Date.parse(LeParam2);

if (LeParam1 == LeParam2) { 
return 0;
}

if (LeParam1 > LeParam2){
return 1;
}else{
return 2;
}
}





//**********************************************************************************************
function VerifierDates(LeParam1,LeParam2){

// V&eacute;rifie les dates de d&eacute;but et de fin des courses
// Cette fonction est un exemple de script tests complets sur des dates
// LeParam1 = date de d&eacute;but entr&eacute;e par l'utilisateur
// LeParam2 = date de fin entr&eacute;e par l'utilisateur

ErreurDate=0;
var LaDateDebut = new Array(3);
var LaDateFin = new Array(3);

LaDateDebut=DecomposeDate(LeParam1);
LaDateFin=DecomposeDate(LeParam2);

// V&eacute;rification des dates
if(isNaN(LaDateDebut[0])||isNaN(LaDateDebut[1])||isNaN(LaDateDebut[2])||
LaDateDebut[0]==""|| LaDateDebut[1]==""||LaDateDebut[2]==""){
window.alert("La date de d&eacute;but est incorrecte.");
ErreurDate=1;
}

if(isNaN(LaDateFin[0])||isNaN(LaDateFin[1])||isNaN(LaDateFin[2])||
LaDateFin[0]==""||LaDateFin[1]==""||LaDateFin[2]==""){
window.alert("La date de fin est incorrecte.");
ErreurDate=1;
}

LeParam1=DateMachine(LeParam1);
LeParam2=DateMachine(LeParam2);

var LaDate=new Date;// Dans cette variable, nous allons attribuer notre date d&eacute;compos&eacute;e.
// Ainsi, si la date que l'on attribue (comme le 30/02/2003), JavaScript la corriger &agrave; la date la plus proche

LaDate.setDate(LaDateDebut[0]);
LaDate.setMonth(LaDateDebut[1]-1);// On enl&egrave;ve 1 car les mois sont indic&eacute;s &agrave; partir de 0 en JavaScript
LaDate.setYear(LaDateDebut[2]);
if(LeParam1!=(LaDate.getDate()+"/"+(LaDate.getMonth()+1)+"/"+LaDate.getFullYear())){
// Ici nous comparons la date corrig&eacute;e par JavaScript avec celle entr&eacute;e par l'utilisateur. Si elles sont diff&eacute;rente,
// cel&agrave; signifie que JavaScript &agrave; &eacute;t&eacute; oblig&eacute; de la corriger car la date entr&eacute;e par l'utilisateur n'existe pas.


// On pr&eacute;viens donc que la date est fausse.
window.alert("La date de d&eacute;but est incorrecte.");
ErreurDate=1;
}

var LaDate=new Date;
LaDate.setDate(parseInt(LaDateFin[0]));
LaDate.setMonth(parseInt(LaDateFin[1])-1);
LaDate.setYear(parseInt(LaDateFin[2]));
if(LeParam2!=(LaDate.getDate()+"/"+(LaDate.getMonth()+1)+"/"+LaDate.getFullYear())){
window.alert("La date de fin est incorrecte.");
ErreurDate=1;
}

if(ErreurDate==0){
if(ComparerDates(LeParam1,LeParam2)==2){
window.alert("La date de d&eacute;but doit être inf&eacute;rieure &agrave; la date de fin.");
ErreurDate=1;
}
}
return ErreurDate;
}
function checkTemps(strTemps){
	sep = strTemps.indexOf("h"); 
    if (sep == -1) { sep = strTemps.indexOf(":"); }
    if (sep == -1) { sep = strTemps.indexOf("."); }
    if (sep == -1) { return false; }
    var heures = strTemps.substring(0, sep);
    var minutes = strTemps.substring(sep+1, 5);


    if ( (heures == "") || (minutes == "")  ) { return false; }

    for (var x=0; x < heures.length; x++) {
        var digit = heures.substring(x, x+1);
        if ((digit < "0") || (digit > "9")) {return false; }
    }
    var numHeures = 0;
    for (var x=0; x < heures.length; x++) {
        digit = heures.substring(x, x+1);
        numHeures *= 10;
        numHeures += parseInt(digit);
    }
    if ((numHeures < 8) || (numHeures > 20)) { return false; }
    for (var x=0; x < minutes.length; x++) {
        var digit = minutes.substring(x, x+1);
        if ((digit < "0") || (digit > "9")) { return false; }
    }
    var numMinutes = 0;
    for (var x=0; x < minutes.length; x++) {
        digit = minutes.substring(x, x+1);
        numMinutes *= 10;
        numMinutes += parseInt(digit);
    }
    if ((numMinutes <0) || (numMinutes > 59)) {return false; }
	return true;
}

function CmpTemps(strDeb, strFin)
{
    var heure_deb = strDeb.substring(0, sep);
    var minute_deb = strDeb.substring(sep+1, 5);

    var numHDeb = 0;
    for (var x=0; x < heure_deb.length; x++) {
        digit = heure_deb.substring(x, x+1);
        numHDeb *= 10;
        numHDeb += parseInt(digit);
    }
    var numMDeb = 0;
    for (var x=0; x < minute_deb.length; x++) {
        digit = minute_deb.substring(x, x+1);
        numMDeb *= 10;
        numMDeb += parseInt(digit);
    }

    var heure_fin = strFin.substring(0, sep);
    var minute_fin = strFin.substring(sep+1, 5);

    var numHFin = 0;
    for (var x=0; x < heure_fin.length; x++) {
        digit = heure_fin.substring(x, x+1);
        numHFin *= 10;
        numHFin += parseInt(digit);
    }
    var numMFin = 0;
    for (var x=0; x < minute_fin.length; x++) {
        digit = minute_fin.substring(x, x+1);
        numMFin *= 10;
        numMFin += parseInt(digit);
    }
	if ((numHDeb > numHFin) || ((numHDeb == numHFin) && (numMDeb > numMFin))) return true;

	return false;
}


function bissextile(annee) {
if (annee%4==0 && annee %100!=0 || annee%400==0) return true; else return false
}

function nb_01_01(date){
nb_mois=new Array(13);
nb_mois=[,0,31,59,90,120,151,181,212,243,273,304,334];
j=eval(date[0]) ; m=eval(date[1]) ; a=eval(date[2]);
nb=nb_mois[m]+j-1 ;
if (bissextile(a) && m>2) nb++;
return nb;
}

function nb_jour_annee(a1,a2){
n=0;
if (a1==a2) n=0 ; else
for (i=a1; i<a2; i++) {n += 365; if (bissextile(i)) n++}
return n;
}

function nb_jour(date1,date2){
a1=eval(date1[2]) ; a2=eval(date2[2]) ; 
nb=nb_jour_annee(date1[2],date2[2]) - nb_01_01(date1) + nb_01_01(date2);
return nb;
}

