//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
//! Déclaration des variables globales !
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

var nomMois = new Array("Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"); //Tableau contenant le nom des mois (12 valeurs de 0 à 11)
var nomJours = new Array("Lun", "Mar", "Mer", "Jeu", "Ven", "Sam", "Dim"); //Tableau contenant le nom des jours (7 valeurs de 0 à 6)
var nbDaysInMonth = new Array(31, 0, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); //Tableau contenant le nombre de jours dans un mois (valeurs fixes, cas particulier pour le mois de février qui nécéssite une fonction de bissextilité)
var joursferies = new Array("01/01", "01/05", "08/05", "14/07", "15/08", "01/11", "11/11", "25/12");

var feriesaleatoires = new Array; //Tableau qui contiendra les dates générées par la fonction jours_fériés pour une année donnée
feriesaleatoires[0] = "1"; //Date de paques (initialisée à 1)
feriesaleatoires[1] = "1"; //Date de l'ascension (idem)
feriesaleatoires[2] = "1"; //date de pentecôte (idem)
var sJour;
sJour = 0; //Variable qui contient le jour sélectionné
var sMois;
sMois = 0; //Variable qui contient le mois séléctioné
var sAnnee;
sAnnee = 0;

var crtdate = new Date(); //crtdate pour current date
var jour = crtdate.getDay(); //Variable qui contient le jour actuel !!0 pour dimanche, 1 pour lundi ... 6 pour samedi!!
var mois = crtdate.getMonth(); //Variable qui contient le mois actuel !! 0 pour janvier, 11 pour décembre !!
var dates = new Array(); // association sens > ID
var datesid = new Array(); // association ID > sens
indice_mois = (mois + 1); //Mise en forme USA -> EU
if (indice_mois < 10) {
    indice_mois = ("0" + indice_mois)
} //Mise en forme : rajoute un 0 devant le chiffre si il est inférieur à 10
var annee = crtdate.getFullYear(); //Variable qui contient l'année actuelle
//!!Permet de récupérer la valeur de l'année sur 4 chiffres pour la date passée en paramètre!!

var indice_jour = crtdate.getDate(); //Variable qui contient la valeur du jour du mois [1 à 31]
if (indice_jour < 10) {
    indice_jour = ("0" + indice_jour)
} //mise en forme...
var Mouse_X; //Variable globale Position X de la souris
var Mouse_Y; //Variable globale Position Y de la souris
if (sJour == "") {
    sJour = jour;
} //Initialisation des variables au début si l'on ne sélectionne rien
if (sMois == "") {
    sMois = mois;
} //Pareil pour le mois
if (sAnnee == "") {
    sAnnee = annee;
} //Pareil pour l'année
document.onmousemove = WhereMouse; //Indique la position de la souris sur la page
document.onclick = cache_calendrier;
//document.onclick= ClickMouse; // comme ca dans la v2

var CALENDAR_retour_fac = true;
var CALENDAR_entete = true;
var CALENDAR_nb_mois_affich = 3;
var CALENDAR_root = "calendar";
var CALENDAR_AR = false;
var plus = false;
var moins = false;
var vient_d_etre_affiche;

function setNbMois(nb){
    CALENDAR_nb_mois_affich = nb;
}

function afficheEntete(bool){
    CALENDAR_entete = bool;
}

function setAllerRetour(bool){
    CALENDAR_AR = bool;
}

function setCheminCalendrier(url){
    CALENDAR_root = url;
}

function setSensInput(sens, id){
    dates[sens] = id;
    datesid[id] = sens;
}

function cache_calendrier(){
    if (vient_d_etre_affiche) {
        vient_d_etre_affiche = false;
        voirSelect_calendrier('hidden');
    }
    else {
        document.getElementById('calendrier').style.visibility = 'hidden';
        voirSelect_calendrier('visible');
    }
}

function voirSelect_calendrier(style){
    elem = document.getElementsByTagName('select');
    
    if (document.all) {
        for (i = 0; i < elem.length; i++) {
            if (elem[i].className.lastIndexOf("masquable_calendar") != -1) 
                elem[i].style.visibility = style;
        }
    }
}


function setCalendrier(nb_mois_a_afficher, retour_facultatif){
    CALENDAR_nb_mois_affich = nb_mois_a_afficher;
    CALENDAR_retour_fac = retour_facultatif;
}

function estFacultatif(){
    if (CALENDAR_retour_fac == true) 
        return 'Sélectionnez votre date de RETOUR (facultatif)';
    else 
        return 'Sélectionnez votre date de RETOUR';
}

//*********************************************************************************************************************************
//* Se charge de montrer/cacher l'élement calendrier selon le navigateur internet (firefox ne prend pas en charge l'objet .event) *
//*********************************************************************************************************************************
function affiche_calendrier(id_input, sens){
    vient_d_etre_affiche = true;
    champ_a_modifier = id_input;
    
    //alert("Vous allez maintenant modifier le contenu de "+champ_a_modifier);
    if (document.getElementById("calendrier").style.visibility == "visible") {
        document.getElementById("calendrier").style.visibility = "hidden"; //si le calendrier est déjà affiché, on le cache.
        voirSelect_calendrier('visible');
        
        if (document.all) 
            vient_d_etre_affiche = false;
    }
    else {
        /*document.getElementById("calendrier").style.left = Mouse_X+10+"px";*/
        /*document.getElementById("calendrier").style.top = Mouse_Y-5+"px";*/
        document.getElementById("calendrier").style.left = Mouse_X+"px";
        document.getElementById("calendrier").style.top = Mouse_Y+"px";
        document.getElementById("calendrier").style.visibility = "visible";
        dispCal(); //appelle la fonction dispCal (génération du tableau calendrier)
        voirSelect_calendrier('hidden');
    }
}

//****************************************************************************************************************************
//* Détermine si une année est bissextile ou non, tout simplement en vérifiant s'il existe le 29 février de l'année en cours *
//* Entrée: variable annee                                                                                                   *
//* Sortie: booléen VRAI ou FAUX                                                                                             *
//****************************************************************************************************************************
function isBissextile(annee){
    fev = new Date(annee, 1, 29);
    if (fev.getDate() == 29) {
        return (true);
    }
    else {
        return (false);
    }
}


//***************************************************************************
//* Fonction qui détermine la position du curseur de la souris dans la page *
//***************************************************************************
//*
//function WhereMouse(e){
//    if (e) 
//    {
//        Mouse_X = e.pageX;
//        Mouse_Y = e.pageY;
//    }
//    else {
//        Mouse_X = event.clientX;
//        Mouse_Y = event.clientY;
//    }
//    
//}
//***************************************************************************
//* Fonction qui détermine la position du curseur de la souris dans la page *
//***************************************************************************
function WhereMouse(e){
	  var DocRef;    // Variable pour IE uniquement

	  // L'événement est passée à la fonction
	  // donc tous sauf IE
	  if( e){                     // Dans ce cas on obtient directement la position dans la page
	    Mouse_X = e.pageX;
	    Mouse_Y = e.pageY;
	  }
	  else{                      // Dans ce cas on obtient la position relative à la fenêtre d'affichage
	    Mouse_X = event.clientX;
	    Mouse_Y = event.clientY;

	    //-- Il faut traiter le CAS des DOCTYPE sous IE
	    if( document.documentElement && document.documentElement.clientWidth) // Donc DOCTYPE
	      DocRef = document.documentElement;   // Dans ce cas c'est documentElement qui est réfèrence
	    else
	      DocRef = document.body;                    // Dans ce cas c'est body qui est réfèrence

	    //-- On rajoute la position liée aux ScrollBars
	    Mouse_X += DocRef.scrollLeft;
	    Mouse_Y += DocRef.scrollTop;
	  }
	}


//*************************************************************
//* Fonction qui actualise le calendrier selon l'incrémention *
//*************************************************************
function changeMonth(type){
    vient_d_etre_affiche = true;
    var tempor = 0;
    
    if (type == "+") {
        sMois += CALENDAR_nb_mois_affich;//Si l'on était au mois de décembre lors d'une incrémentation, on retombe sur le mois 0 (janvier) sinon on incrémente de 1
        if (sMois > 11) {
            sMois = sMois - 12;
            sAnnee++;
        }
    }
    if (type == "-") {
        sMois = sMois - CALENDAR_nb_mois_affich;
        if (sMois < 0) {
            sAnnee--;
            sMois = 12 + sMois;
            
        }
    }
    dispCal(); // puis on regénère un nouveau calendrier
}


//*********************************************************************************************************
//* Fonction qui détermine le nombre de jours maximum d'un mois, selon que l'année soit bissextile ou non *
//*********************************************************************************************************
function getNbDay(month, year){
    if ((month == 1) && (isBissextile(year))) {
        return (29);
    } //Dans le cas où une année est bissextile et que l'on demande pour le mois de février, la fonction retournera 29...
    if ((month == 1) && (!isBissextile(year))) {
        return (28);
    } //Dans le cas où une année est non bissextile et que l'on demande pour le mois de février, la fonction retournera 28...
    return (nbDaysInMonth[month]); //Sinon, la fonction ira chercher dans le tableau nbDaysInMonth le nombre de jours du mois voulu à l'indice du mois indiqué...
}


//*******************************************************
//* Fonction qui génère un calendrier d'un mois en HTML *
//*******************************************************
function dispCal(){
    //Création d'un objet date pour savoir le mois et l'année actuelle à chaque appel de la fonction dispCal (la variable globale "mois" crée des erreurs si la fonction dispCal est appelée plus d'une fois)
    var avoir_date = new Date();
    var le_mois = avoir_date.getMonth();
    var l_annee = avoir_date.getFullYear();
    var affich_prev = (sMois <= le_mois) && (l_annee == sAnnee);
    
    // codeHtml="<table border=\"1\" cellspacing=\"0\" style=\"cursor:default;\" width=\"50\">";
    //codeHtml+="<tr>";
    // codeHtml="<script type='text/javascript' src='jours_feries.js'></script>";
    codeHtml = "";
    //Entête du calendrier (peut être passé par style CSS... mais présente certaines incompatibilitées: border-collapse)
    if (CALENDAR_entete) {
        codeHtml += "<div class=\"titre-tableau\">" + ((datesid[champ_a_modifier] == 'depart') ? 'Sélectionnez votre date de DEPART' : estFacultatif()) + "<span class=\"img-croix\"><img src=\"" + CALENDAR_root + "/close.jpg\"></span></div>";
    }
    for (var compt = 0; compt < CALENDAR_nb_mois_affich; compt++) {
        //codeHtml+="<td style=\"border: 0px none ;\">";
        codeHtml += "<div style=\"float:left;\">";
        codeHtml += "<table border=\"1\" cellpadding=\"2\" cellspacing=\"0\" style=\"cursor:default;\" width=\"50\">";
        
        if (compt > 0) {
            sMois++;
        }
        
        if (sMois > 11) {
            sMois = sMois - 12;
            sAnnee++;
        }
        
        
        codeHtml += "    <tr align=\"center\">";
        
        //Structure conditionelle qui empêche d'aller sur les mois antérieurs au mois actuel.
        if (affich_prev) {
            codeHtml += "         <th class=\"titre\"> </th> <td class=\"titre\" colspan=\"5\" bgcolor=\"#FFFFFF\"><b> " + nomMois[sMois] + " " + sAnnee + " </b></td> <th class=\"titre\" style=\"cursor:pointer; border:0px solid\" onClick=\"javascript:changeMonth('+');\"> <img src=\"" + CALENDAR_root + "/droite.gif\"> </th>";
        }
        else {
            codeHtml += "         <th class=\"titre\" style=\"cursor:pointer\" onClick=\"javascript:changeMonth('-');\"> <img src=\"" + CALENDAR_root + "/gauche.gif\"> </th> <td class=\"titre\" colspan=\"5\" bgcolor=\"#FFFFFF\"><b> " + nomMois[sMois] + " " + sAnnee + " </b></td> <th class=\"titre\" style=\"cursor:pointer\" onClick=\"javascript:changeMonth('+');\"> <img src=\"" + CALENDAR_root + "/droite.gif\"></th>";
        }
        codeHtml += "        </tr>";
        codeHtml += "    <tr align=\"center\">";
        
        //Boucle POUR qui rempli le nom des jours dans la 2ème ligne du tableau.
        for (i = 0; i < nomJours.length; i++) {
            codeHtml += "          <td style=\"border:0px\"><b>" + nomJours[i] + "</b></td>";
        }
        codeHtml += "    </tr>";
        
        // Corps du calendrier:
        
        // +++ Premiers jours du mois +++
        jMois = new Date(sAnnee, sMois, 1);
        wday = jMois.getDay(); //variable wday (pour "week day") : chargé de récupérer à quel jour correspond le 1er jour du mois (0: dimanche, 1:lundi ... 6:samedi)
        if (wday == 0) {
            wday = 7;
        } //si ce jour correspond à un dimanche (javascript est au format US et place le dimanche en début de semaine -> sunday: 0), on le déterminera cette valeur en pos 7 pour la placer en fin de semaine
        //ainsi on aura les correspondances suivantes: lundi: 1, mardi: 2, mercredi: 3, jeudi: 4, vendredi: 5, samedi: 6, dimanche: 7
        wday--; //Pour revenir avec 7 élements de 0 à 6, on décrémente la variable wday de 1 (lundi: 0, mardi: 1, mercredi: 2, jeudi: 3, vendredi: 4, samedi: 5, dimanche: 6)
        crtDay = 1; // crtDay pour current Day (au début, c'est le 1er du mois)
        codeHtml += "    <tr align=\"center\">";
        
        // +++ Colonne de décallage pour les jours du mois d'avant +++ (sert à remplir les premières cases du calendrier par les derniers jours du mois précédent)
        for (decal = 0; decal < wday; decal++) {
            calJ = new Date(sAnnee, sMois, 1 - (wday - decal));
            //si c'est inférieur mais supérieur à la date courante
            
            /*transformation de la date en format JJ/MM/AAAA*/
            var jour_jour = calJ.getDate();
            if (jour_jour < 10) 
                jour_jour = "0" + jour_jour;
            
            var mois_jour = calJ.getMonth() + 1;
            if (mois_jour < 10) 
                mois_jour = "0" + mois_jour;
            
            var annee_jour = calJ.getFullYear();
            
            var calJformat = jour_jour + "/" + mois_jour + "/" + annee_jour;
            var etat_temp = compare_dates(calJformat);//Récupération de l'état par rapport à la date du jour
            if (etat_temp == "EGAL" || etat_temp == "SUP") {
                calJformat = jour_jour + "/" + mois_jour + "/" + calJ.getFullYear();
                
                codeHtml += "<td id=\"" + calJformat + "\" style=\"border:0px\" class=\"finclic\" onClick=\"javascript:clic_jour(this.id);\" onMouseOver=\"this.style.fontWeight='bold'; this.style.color='#208000';\" onMouseOut=\"this.style.fontWeight='normal'; this.style.color='#cccccc';\">" + jour_jour + "</td>";
            }
            else 
                codeHtml += "<td style=\"border:0px\" class=\"old\" onClick=\"alert('vous ne pouvez pas s&eacute;lectionner un jour pass&eacute;')\"><font color=\"#cccccc\">" + calJ.getDate() + "</font></td>";
        }
        date_actuelle = (indice_jour + "/" + indice_mois + "/" + annee);
        test = new Date(sAnnee, sMois, crtDay);
        
        //On crée une boucle POUR qui va incrémenter le 1er jour du mois et l'inscrire entre des balises TD pour 7 balises TD (fini de remplir une ligne du jour actuel jusqu'en fin de semaine)
        //Boucle qui rempli le reste de la 1ère ligne par les premiers jours du mois en cours
        //Pour cette boucle, on fait appel à 5 sous-fonctions.
        //Ensuite, selon que la date soit supérieure ou inférieure à la date actuelle, on génère une case TD...
        
        for (j = 0; j < 7 - wday; j++) {
            test = new Date(sAnnee, sMois, crtDay); //Défini une date grâce à l'objet date
            num_jour_de_case = test.getDay(); //Récupère le numéro de jour de case (0 1 2 3 4 5 6)
            jour_de_case = correspond(num_jour_de_case); //Converti ce numéro en sa valeur réelle (dimanche, lundi, mar...)
            date_courante = id_case(crtDay); //Défini la date au format jj/mm/aaaa de la case qui va être générée
            jours_feries(sAnnee); //Appel à la fonction qui se charge de déterminer les 3 jours fériés aléatoires en focntion de l'année au format aaaa
            style = style_case(crtDay); //Défini le style CSS à appliquer
            etat = compare_dates(date_courante); //Détermine le type de TD à générer en fonction de la date à générer
            
            var caseTraitee = false;
            if (isDateLessThanJPlus3(date_courante)){
               	//codeHtml += "<td id=\"" + date_courante + "\" class=\"" + jour_de_case + " , " + style + "\" onClick=\"alert('d&eacute;sol&eacute;, vous ne pouvez pas s&eacute;lectionner la date d&rsquo;aujourd&rsquo;hui ni celle de demain ni celle du surlendemain')\" onMouseOver=\"this.className='" + jour_de_case + " , mouseoverfutur , " + style + "';\" onMouseOut=\"this.className='" + jour_de_case + " , mouseoutfutur , " + style + "';\" >" + crtDay + "</td>";
               	codeHtml += "<td id=\"" + date_courante + "\" class=\"" + jour_de_case + " , old\" onClick=\"alert('vous ne pouvez pas s&eacute;lectionner la date d&rsquo;aujourd&rsquo;hui ni celle de demain ni celle du surlendemain')\" onMouseOver=\"this.style.color='#606060'\" onMouseOut=\"this.style.color='#606060'\" >" + crtDay + "</td>";
               	caseTraitee = true;
            }
            if (caseTraitee == false){
            	if (etat == "INF") { // Si la case que l'on va créer est un jour passé
                    codeHtml += "<td id=\"" + date_courante + "\" class=\"" + jour_de_case + " , old\" onClick=\"alert('vous ne pouvez pas s&eacute;lectionner un jour pass&eacute;')\" onMouseOver=\"this.style.color='#606060'\" onMouseOut=\"this.style.color='#606060'\" >" + crtDay + "</td>";
                }
                
                else 
                    if (etat == "EGAL") { // Si la date que l'on va créer est un jour présent.
                        codeHtml += "<td id=\"" + date_courante + "\" class=\"" + jour_de_case + " , " + style + "\" onClick=\"javascript:clic_jour(this.id); javascript:affiche_calendrier(champ_a_modifier)\" onMouseOver=\"this.className='" + jour_de_case + " , mouseoverpresent , " + style + "';\" onMouseOut=\"this.className='" + jour_de_case + " , mouseoutpresent , " + style + "';\" >" + crtDay + "</td>";
                    }
                    
                    else 
                        if (etat == "SUP") { // Si la date que l'on va créer est un jour futur
                            codeHtml += "<td id=\"" + date_courante + "\" class=\"" + jour_de_case + " , " + style + "\" onClick=\"javascript:clic_jour(this.id); javascript:affiche_calendrier(champ_a_modifier)\" onMouseOver=\"this.className='" + jour_de_case + " , mouseoverfutur , " + style + "';\" onMouseOut=\"this.className='" + jour_de_case + " , mouseoutfutur , " + style + "';\" >" + crtDay + "</td>"; //this.style.fontWeight='normal' ; this.style.color='#000000'
                        }
            }
            
            crtDay++;
        }
        codeHtml += "    </tr>"; //Et qui fait un retour à la ligne une fois les 7 balises(premières cases) créees (fin de boucle POUR)
        // +++ Autres lignes du calendrier +++
        lastDay = getNbDay(sMois, sAnnee); //Fait appel à la fonction getNbDay pour avoir le nombre de jours dans le mois courant (envoie en paramètre sMois et sAnnee)
        while (crtDay <= lastDay) //On crée une boucle TANTQUE la variable crtDay est inférieure ou égale au nombre de jours dans le mois
        {
            codeHtml += "    <tr align=\"center\">";
            // Rempli pour le mois entier jusqu'au dernier jour du mois...
            //On fait aussi appel aux 5 mêmes sous-fonctions
            for (j = 0; j < 7; j++) {
                cMois = new Date(sAnnee, sMois, crtDay);
                if (cMois.getMonth() == sMois) {
                    test = new Date(sAnnee, sMois, crtDay);
                    num_jour_de_case = test.getDay();
                    jour_de_case = correspond(num_jour_de_case);
                    date_courante = id_case(crtDay);
                    jours_feries(sAnnee);
                    style = style_case(crtDay);
                    etat = compare_dates(date_courante);
                    
                    var caseTraitee = false;
                    if (isDateLessThanJPlus3(date_courante)){
                    	//codeHtml += "<td id=\"" + date_courante + "\" class=\"" + jour_de_case + " , " + style + "\" onClick=\"alert('d&eacute;sol&eacute;, vous ne pouvez pas s&eacute;lectionner la date d&rsquo;aujourd&rsquo;hui ni celle de demain ni celle du surlendemain')\" onMouseOver=\"this.className='" + jour_de_case + " , mouseoverfutur , " + style + "';\" onMouseOut=\"this.className='" + jour_de_case + " , mouseoutfutur , " + style + "';\" >" + crtDay + "</td>";
                    	codeHtml += "<td id=\"" + date_courante + "\" class=\"" + jour_de_case + " , old\" onClick=\"alert('vous ne pouvez pas s&eacute;lectionner la date d&rsquo;aujourd&rsquo;hui ni celle de demain ni celle du surlendemain')\"onMouseOver=\"this.style.color='#606060'\" onMouseOut=\"this.style.color='#606060'\" >" + crtDay + "</td>";
                    	caseTraitee = true;
                    }
                    if (caseTraitee == false){
                    	
                    	if (etat == "INF") { // Si la case que l'on va créer est un jour passé
                    		codeHtml += "<td id=\"" + date_courante + "\" class=\"" + jour_de_case + " , old\" onClick=\"alert('vous ne pouvez pas s&eacute;lectionner un jour pass&eacute;')\"onMouseOver=\"this.style.color='#606060'\" onMouseOut=\"this.style.color='#606060'\" >" + crtDay + "</td>";
                    	}
                    
                    	else 
                    		if (etat == "EGAL") { // Si la date que l'on va créer est un jour présent.
                    			codeHtml += "<td id=\"" + date_courante + "\" class=\"" + jour_de_case + " , " + style + "\" onClick=\"javascript:clic_jour(this.id); javascript:affiche_calendrier(champ_a_modifier)\" onMouseOver=\"this.className='" + jour_de_case + " , mouseoverpresent , " + style + "';\" onMouseOut=\"this.className='" + jour_de_case + " , mouseoutpresent , " + style + "'\" >" + crtDay + "</td>";
                    		}
                        
                    		else 
                    			if (etat == "SUP") { // Si la date que l'on va créer est un jour futur.
                    				codeHtml += "<td id=\"" + date_courante + "\" class=\"" + jour_de_case + " , " + style + "\" onClick=\"javascript:clic_jour(this.id); javascript:affiche_calendrier(champ_a_modifier)\" onMouseOver=\"this.className='" + jour_de_case + " , mouseoverfutur , " + style + "'\" onMouseOut=\"this.className='" + jour_de_case + " , mouseoutfutur , " + style + "'\" >" + crtDay + "</td>";
                    			}
                    }
                    
                }
                else {
                    mon_mois = cMois.getMonth();
                    mon_annee = sAnnee;
                    nbjour = crtDay - lastDay;
                    
                    
                    if (mon_mois > 11) {
                        mon_mois = 0;
                        mon_annee++;
                    }
                    
                    test = new Date(mon_annee, mon_mois, nbjour); //Génération de la date
                    var jour_aff = test.getDate(); //Récupération du jour
                    if (jour_aff < 10) //Ajout du 0 si c'est un jour < 10
                        jour_aff = "0" + jour_aff;
                    
                    var mois_aff = test.getMonth() + 1; //Récupération du mois
                    if (mois_aff < 10) //Ajout du 0 si c'est un mois < 10
                        mois_aff = "0" + mois_aff;
                    
                    var annee_aff = test.getFullYear(); //Récupération de l'année
                    if (mois_aff == '01') 
                        annee_aff++;
                    
                    date_courante = jour_aff + "/" + mois_aff + "/" + annee_aff;
                    
                    etat = compare_dates(date_courante);
            
                    if (etat != "INF") 
                    	codeHtml += "<td id=\"" + date_courante + "\" style=\"border:0px\" class=\"finclic\" onClick=\"javascript:clic_jour(this.id); javascript:affiche_calendrier(champ_a_modifier)\" onMouseOver=\"this.style.fontWeight='bold'; this.style.color='#208000';\" onMouseOut=\"this.style.fontWeight='normal'; this.style.color='#cccccc';\">" + cMois.getDate() + "</td>";
                    else 
                    	codeHtml += "<td id=\"" + date_courante + "\" style=\"border:0px\" class=\"old\" onClick=\"alert('vous ne pouvez pas s&eacute;lectionner un jour pass&eacute;')\"onMouseOver=\"this.style.color='#606060'\" onMouseOut=\"this.style.color='#606060'\" >" + cMois.getDate() + "</td>";
                    
                }
                crtDay++;
            }
            codeHtml += "    </tr>";
        }
        codeHtml += "</table></div>";
    }
    
    sMois -= CALENDAR_nb_mois_affich - 1;
    
    if (sMois < 0) {
        sMois = 12 + sMois;
        sAnnee--;
    }
    
    //codeHtml+="</table>";
    
    //Fin de la boucle
    
    document.getElementById("calendrier").innerHTML = codeHtml;
}


//************************************************************************
//*Fonction qui attribue pour une case sa date (format jj/mm/aaaa) en ID:*
//************************************************************************
function id_case(jour_case){
    mois_case = (sMois + 1);
    jour_case = crtDay;
    
    if (jour_case < 10) {
        jour_case = ("0" + jour_case);
    }
    
    if (mois_case < 10) {
        mois_case = ("0" + mois_case);
    }
    return (jour_case + "/" + mois_case + "/" + sAnnee);
}

//****************************************************************************
//*Fonction qui détermine le style CSS d'une case en fonction de sa date     *
//*3 styles sont  possible selon la date: normal, jour present ou jour férié *
//****************************************************************************
function style_case(le_jour){
    le_mois = (sMois + 1); //Mise en forme USA -> EU
    if (le_jour < 10) { //Mise en forme si nombre inf. à 10, on ajoute un 0 devant
        le_jour = ("0" + le_jour);
    }
    
    if (le_mois < 10) { //Idem...
        le_mois = ("0" + le_mois);
    }
    
    //Dans le cas où une case correspond à la date de début sélectionné...
    // if(date_courante == (champ_a_modifier.value)){return ("debut")}
    
    //Dans le cas où une case correspond à la date de fin sélectionné...
    // if(date_courante == (document.formulaire.date_fin.value)){return ("fin")}
    
    //Dans le cas où une case correspond à la date actuelle...
    if (document.getElementById(dates['depart']) && document.getElementById(dates['depart']).value == date_courante) {
        return ("depart")
    }
    else 
        if (document.getElementById(dates['retour']) && document.getElementById(dates['retour']).value == date_courante) {
            return ("retour")
        }
        else 
            if (date_actuelle == date_courante) {
                return ("present")
            }
    
    //Dans le cas où une case correspondrait à un jour férié du tableau joursferies...
    for (k = 0; k < joursferies.length; k++) {
        if (joursferies[k] == (le_jour + "/" + le_mois)) {
            return ("ferie")
        }
    }
    
    //Dans le cas où une case correspondrait à un des 3 jours fériés aléatoires...
    for (l = 0; l < feriesaleatoires.length; l++) {
        if (feriesaleatoires[l] == (le_jour + "/" + le_mois)) {
            return ("ferie")
        }
    }
    
    return ("normal");
}

//*********************************************************************************
//* Fonction qui met en forme l'attribut CSS avec l'indice du jour correspondant  *
//* (il est impossible qu'un style CSS commence par un chiffre)                   *
//*********************************************************************************
function correspond(num_jour){
    if (num_jour == 0) {
        return ("dimanche");
    }
    if (num_jour == 1) {
        return ("lundi");
    }
    if (num_jour == 2) {
        return ("mardi");
    }
    if (num_jour == 3) {
        return ("mercredi");
    }
    if (num_jour == 4) {
        return ("jeudi");
    }
    if (num_jour == 5) {
        return ("vendredi");
    }
    if (num_jour == 6) {
        return ("samedi");
    }
}


//***********************************************************************************************************************
//*Fonction qui se charge de mettre dans le champ (input) en question la date du jour cliqué sur une case du calendrier *
//***********************************************************************************************************************
function clic_jour(jour_clique){
    document.getElementById(champ_a_modifier).value = jour_clique;
    sMois = jour_clique.substr(3, 2) - 1; // recuperation du mois cliqué pour l'affichage du prochain calendrier
    sAnnee = jour_clique.substr(6, 4); // recuperation de l'année cliquée pour l'affichage du prochain calendrier
    if (datesid[champ_a_modifier] == 'date' && CALENDAR_AR) {
        var chainleft = '';
        var chaintop = '';
        
        //Récupération uniquement des chiffres en laissant de côté les "px"
        chainleft = document.getElementById("calendrier").style.left.substring(0, document.getElementById("calendrier").style.left.lastIndexOf("px", document.getElementById("calendrier").style.left.length));
        chaintop = document.getElementById("calendrier").style.top.substring(0, document.getElementById("calendrier").style.top.lastIndexOf("px", document.getElementById("calendrier").style.top.length));
        
        //Transformation des chaines en nombres pr pouvoir effectuer les additions
        chainleft = parseInt(chainleft);
        chaintop = parseInt(chaintop);
        
        //On définit en dur la position du calendrier (Mouse_X et Mouse_Y sont normalement les coordonnées de la souris mais dans le cas présent on les fixe
        Mouse_X = chainleft - 10;
        Mouse_Y = chaintop + 29;
        
        //appel à la fonction d'affichage du calendrier en fixant en dur les paramètres
        affiche_calendrier('date_retour', 'retour');
    }
    
    // Ajouté par KOEDIA le 28/05/2009
    if (datesid[champ_a_modifier] == 'depart' && CALENDAR_AR) {
        updateInDateOrOutDate('inDate');
    }
    if (datesid[champ_a_modifier] == 'retour' && CALENDAR_AR) {
        updateInDateOrOutDate('outDate');
    }
    
}


//******************************************************************************************
//* Fonction qui compare si une date est inférieur, égale ou supérieure à al date actuelle *
//******************************************************************************************
function compare_dates(testez_moi){
    var date_a_tester = new String(testez_moi); //découpage de la date d'iD de la case (qui est une date au format jj/mm/aaaa) en 3 variables pour pouvoir y effectuer des opérations de comparaison...
    annee_a_tester = date_a_tester.substr(6, 4); //pour l'année
    mois_a_tester = date_a_tester.substr(3, 2); //...
    jour_a_tester = date_a_tester.substr(0, 2); //...
    if (annee_a_tester < annee) {
        return ("INF")
    } //L'année de la case est supérieure à l'année actuelle
    if (annee_a_tester > annee) {
        return ("SUP")
    } //L'année de la case est inférieure à l'année actuelle
    if (annee_a_tester == annee) { //Si l'année de la case est égale à l'année actuelle...
        if (mois_a_tester < indice_mois) {
            return ("INF")
        } //...et que le mois de la case est inférieur au mois actuel
        if (mois_a_tester > indice_mois) {
            return ("SUP")
        } //...et que le mois de la case est supérieur au mois actuel
        if (mois_a_tester == indice_mois) { //...et que le mois de la case est égal au mois actuel...
            if (jour_a_tester < indice_jour) {
                return ("INF")
            } //...et que le jour de la case est inférieur au jour actuel
            if (jour_a_tester > indice_jour) {
                return ("SUP")
            } //...et que le jour de la case est supérieur au jour actuel
            if (jour_a_tester == indice_jour) {
                return ("EGAL")
            } //...et que le jour de la case est égal au jour actuel
        }
    }
}


//vérifie que la date demandée n'est pas la date du jour et ni la date du lendemain
//en paramètre on reçoit une date en string au format jj/mm/aaaa
function isDateTodayOrTomorrow(dateToTest){
	if (dateToTest != null && indice_jour != null && indice_mois != null && annee != null){
		var dateToTestStr = new String(dateToTest);
		if (dateToTestStr != null){
			var yearDateToTestStr = dateToTestStr.substr(6, 4); //pour l'année
			var monthDateToTestStr = dateToTestStr.substr(3, 2); //...
			var dayDateToTestStr = dateToTestStr.substr(0, 2); //...
			var dateToTestDte = new Date(yearDateToTestStr+'/'+monthDateToTestStr+'/'+dayDateToTestStr);		
				
			if (dateToTestDte != null){
				var todayDte = new Date(annee+'/'+indice_mois+'/'+indice_jour);
				if (todayDte != null){
					var todayPlus1Dte = new Date();
					todayPlus1Dte.setDate(todayDte.getDate() + 1);
					if (areDatesEquals(dateToTestDte, todayDte) || areDatesEquals(dateToTestDte, todayPlus1Dte)){
						return true;
					}
				}				
			}
		}   	
	}
	return false;
}

//vérifie que la date demandée n'est pas la date du jour ni la date du lendemain ni la date du sur lendemain
//en paramètre on reçoit une date en string au format jj/mm/aaaa
function isDateLessThanJPlus3(dateToTest){
	if (dateToTest != null && indice_jour != null && indice_mois != null && annee != null){
		var dateToTestStr = new String(dateToTest);
		if (dateToTestStr != null){
			var yearDateToTestStr = dateToTestStr.substr(6, 4); //pour l'année
			var monthDateToTestStr = dateToTestStr.substr(3, 2); //...
			var dayDateToTestStr = dateToTestStr.substr(0, 2); //...
			var dateToTestDte = new Date(yearDateToTestStr+'/'+monthDateToTestStr+'/'+dayDateToTestStr);		
				
			if (dateToTestDte != null){
				var todayDte = new Date(annee+'/'+indice_mois+'/'+indice_jour);
				if (todayDte != null){
					var todayPlus1Dte = new Date();
					todayPlus1Dte.setDate(todayDte.getDate() + 1);
					
					var todayPlus2Dte = new Date();
					todayPlus2Dte.setDate(todayDte.getDate() + 2);
					
					if (areDatesEquals(dateToTestDte, todayDte) || areDatesEquals(dateToTestDte, todayPlus1Dte) || areDatesEquals(dateToTestDte, todayPlus2Dte)){
						return true;
					}
				}				
			}
		}   	
	}
	return false;
}

//retourne vrai si les jours, mois et annee des deux dates sont identiques
function areDatesEquals(date1, date2){
	if (date1 instanceof Date && date2 instanceof Date){
	  if (date1.getDate() == date2.getDate() && date1.getDay() == date2.getDay() && date1.getMonth() == date2.getMonth() && date1.getYear() == date2.getYear()){
		  return true;
	  }
	}
	return false;		
}