
        infMois=0;supMois=11;spDOffer=null;posSDay=null;prValD=null;derValD=null;diffAn=0;retDay=null,retMonth=null,retYear=null;bBord=false;isNav=false;isIE=false;
if (navigator.appName == "Netscape") { isNav=true; } else { isIE=true; }
codeMarche="";libClik=new Array();selDate=new Date();moisChoisi="";longWeekDays="";shortWeekDays="";calDocRight="";calDocLeft="";calDocTop="";calDBas="";calBaCFen="";calCCRFen="";calHtCFen="";calEnd="";
function writeCalendar() {   
    var calDBas=top.newWin.frames['fenDroit'].genCalBas();     
    top.newWin.frames['calBas'].document.open();   
    top.newWin.frames['calBas'].document.write(cLink1);
    top.newWin.frames['calBas'].document.write(cLink2);
    top.newWin.frames['calBas'].document.write(calDBas); 
    top.newWin.frames['calBas'].document.close();          
    top.newWin.frames['calBas'].document.dateLibelleForm.dateLibelle.value="";
}

/***************************************************************/
/* Rajout de variables pour tests sur les listes jours et mois */
/***************************************************************/

/* Variables utilisees pour le controle des dates */
var aller = "moisAller";
var retour = "moisRetour";

var NS4 = (navigator.appName == "Netscape" && parseInt(navigator.appVersion) < 5);
var NSX = (navigator.appName == "Netscape");
var IE4 = (document.all) ? true : false;

var monthday = new Array('31','28','31','30','31','30','31','31','30','31','30','31');

var shortWeekDays = new Array(
	'zo',
	'ma',
	'di',
	'wo',
	'do',
	'vr',
	'za'
);
var longWeekDays = new Array(
	'zondag',
	'maandag',
	'dinsdag',
	'woensdag',
	'donderdag',
	'vrijdag',
	'zaterdag'
);

/* Fonction controlant si l annee en cours est bissextile ou non */
function verifAnneeBissextile(a) {
  var num = a - 1900;
  if( (num == 100) || (num % 4 == 0 && num % 100 != 0) || (num % 400 == 0) ) {
	return(29);
  } else {
	return(28);
  }
}

/*
idj l'objet du select du jour
month la valeur du mois
year la valeur de l'annee
*/
function updateListJour(idj,month,year) {
  var mois=month;
  var jour=$(idj);
  var annee=year;
   
  /* On recupere l annee en cours, on teste si elle est bissextile pour avoir le nb de jours en fevrier */
  var nbJours = verifAnneeBissextile(annee);

  /* On recupere la longueur de la liste des jours */
  var selLength = jour.length;
  /* update du tableau de max de jours pour février*/
  monthday[1]=nbJours;

  /* On vide toute la liste non commune à tous les mois*/
  /*Save the latest select value*/
  selected = jour.options[jour.selectedIndex].value;

  if (IE4) {
    for(i=Number(selLength); i > 27; i--) {
      jour.remove(i);
    }
  } else
    jour.options.length=monthday[mois-1];
	
  for(i=29; i < Number(monthday[mois-1])+1; i++) {
    if (IE4) {
      var newOpt = document.createElement("OPTION");
      newOpt.text=i;
      newOpt.value=i;
      if(selected==i) {
        newOpt.selected=true;
      }
      jour.add(newOpt);
    } else {	  		
      jour.options.length=monthday[mois-1];
      var newOpt = new Option(i,i);
      if(selected==i) {
        newOpt.selected=true;
      }
      jour.options[i-1] = newOpt;
    }
  }
}


/* 
 * Fonction appelee lorsque l utilisateur selectionne un mois dans la liste deroulante - met a jour la liste des jours 
 * Utilise les noms des inputs par defaut : jourAller, moisAller, jourRetour, moisRetour
 */
function changeOption(p) {
   /* Test sur la liste selectionnee - on recupere les elements */
   if (p == "moisAller") {
      changeOptionByObject("jourAller", "moisAller");
   } else {
      /* Sinon la liste selectionnee est moisRetour */
      changeOptionByObject("jourRetour", "moisRetour");
   }

}

/* Fonction appelee lorsque l utilisateur selectionne un mois dans la liste deroulante - met a jour la liste des jours */
function changeOptionByObject(dayList, monthList, yearList) {

   /* on recupere les elements */
   var mois = $(monthList);
   var jour = $(dayList);

   /* On recupere le mois selectionne */
  if(mois.options==null) { // visiblement IE ne charge pas tout de suite tous les objets
     if (document.forms[0].elements[RechercherIndiceElt(monthList)].value.length == 6) {
       var moisSelected = document.forms[0].elements[RechercherIndiceElt(monthList)].value.substring(4,6);
       var anneeSelected = document.forms[0].elements[RechercherIndiceElt(monthList)].value.substring(0,4);
     } else {
       var moisSelected = document.forms[0].elements[RechercherIndiceElt(monthList)].value;
       var anneeSelected = document.forms[0].elements[RechercherIndiceElt(yearList)].value;
     }
  } else {
     if (mois.options[mois.selectedIndex].value.length == 6) {
       var moisSelected = mois.options[mois.selectedIndex].value.substring(4,6);
       var anneeSelected = mois.options[mois.selectedIndex].value.substring(0,4);
     } else {
       var moisSelected = mois.options[mois.selectedIndex].value;
       var anneeSelected = $(yearList).options[$(yearList).selectedIndex].value;
     }
  }

   var nbJours = verifAnneeBissextile(anneeSelected);

   /* On recupere la longueur de la liste des jours */
   var selLength = jour.length;

   /* Test sur le mois selectionne */
   if (moisSelected =='01' || moisSelected == '03' || moisSelected == '05' ||  moisSelected == '07' || moisSelected == '08' || 
moisSelected == '10' || moisSelected == '12') {
      /* Tests sur la longueur de la liste et rajout des options pour avoir les 31 jours du mois */
      if(selLength == 28) {
         /* Test sur le navigateur */
         if (IE4){
	    var newOpt = document.createElement("OPTION");
	    newOpt.text="29";
	    newOpt.value="29";
	    jour.add(newOpt);
        } else if(NSX){
	    var newOpt = new Option("29", "29");
	    jour.options[selLength] = newOpt;
        }
        /* On met a jour la longueur de la liste */
	selLength = jour.length;
     }
     
     if (selLength > 28 && selLength<30){
        if(IE4){
	   var newOpt = document.createElement("OPTION");
	   newOpt.text="30";
	   newOpt.value="30";
	   jour.add(newOpt);
	} else if(NSX){
	   var newOpt = new Option("30", "30");
	   jour.options[selLength] = newOpt;
        }
	selLength = jour.length;
     }

     if (selLength > 29 && selLength<31) {
        if(IE4){
           var newOpt = document.createElement("OPTION");
	   newOpt.text="31";
	   newOpt.value="31";
	   jour.add(newOpt);
        } else if (NSX) {
	   var newOpt = new Option("31", "31");
	   jour.options[selLength] = newOpt;
        }
        selLength = jour.length;
     }

   }

   /* Tests sur la longueur de la liste et rajout des options pour avoir les 30 jours du mois */
   if (moisSelected =='04' || moisSelected =='06' || moisSelected =='09' || moisSelected =='11'){
      
      if(selLength == 28){
         if(IE4) {
	   var newOpt = document.createElement("OPTION");
	   newOpt.text="29";
	   newOpt.value="29";
	   jour.add(newOpt);
	 }
	 else if (NSX) {
	   var newOpt = new Option("29", "29");
	   jour.options[selLength] = newOpt;
	 }
         selLength = jour.length;
      }

      if (selLength > 28 && selLength<30){
         if (IE4){
	   var newOpt = document.createElement("OPTION");
	   newOpt.text="30";
	   newOpt.value="30";
	   jour.add(newOpt);
	  }
	  else if (NSX) {
	    var newOpt = new Option("30", "30");
	    jour.options[selLength] = newOpt;
	  }
	  selLength = jour.length;

	}

      /* Si la liste contient 31 elements, on en supprime un pour avoir 30 jours dans le mois*/

      if (selLength>30){
         if (IE4) {
	   jour.remove(selLength-1);
	 }
	 else if (NSX) {
           jour.options[selLength-1]=null;
	   if (NS4) history.go(0);
	 }
	 selLength = jour.length;
      }
	
   }
        

   /* Si le mois selectionne est fevrier */	

   if (moisSelected =='02'){

      /* Tests sur la longueur de la liste et suppression des options pour avoir les 28/29 jours du mois selon annee bissextile ou pas */

      /* Si l'annee en cours a 28 jours*/
      if (nbJours==28){

         /* Si la liste a 30 elements, on en supprime 2 */
         if (selLength == 30){
           if (IE4){
             jour.remove(selLength-1);
	     jour.remove(selLength-2);
	   }
	   else if(NSX){
             jour.options[selLength-1]=null;
             jour.options[selLength-2]=null;
	     if (NS4) history.go(0);
	   }
	   selLength = jour.length;
	 }
			

         /* Si la liste a 31 elements, on en supprime 3 */
         if (selLength == 31){
	   if (IE4){
	     jour.remove(selLength-1);
             jour.remove(selLength-2);
	     jour.remove(selLength-3);
	   }
	   else if(NSX){
	     jour.options[selLength-1]=null;
             jour.options[selLength-2]=null;
             jour.options[selLength-3]=null;
	     if (NS4) history.go(0);
	   }
	   selLength = jour.length;
	  }
      } 


      /* Si l'annee en cours a 29 jours */
      if (nbJours==29){

         /* Si la liste a 30 elements, on en supprime 1 */
         if (selLength == 30){
	   if (IE4){
	     jour.remove(selLength-1);
	   }
	   else if(NSX){
             jour.options[selLength-1]=null;
	     if (NS4) history.go(0);
	   }
	   selLength = jour.length;
         }

         /* Si la liste a 31 elements, on en supprime 2 */
	 if (selLength == 31){
	   if (IE4){
	     jour.remove(selLength-1);
	     jour.remove(selLength-2);
	   }
	   else if(NSX){
             jour.options[selLength-1]=null;
             jour.options[selLength-2]=null;
	     if (NS4) history.go(0);
	   }
           selLength = jour.length;
	  }
      }
   }
}


/* Fonction appelee lorsque l utilisateur modifie le menu deroulant de la date aller */
/* Si la date aller modifiee est posterieure a la date retour affichee, alors la date retour affichee prend la valeur de la date aller */
/* Utilise les noms des inputs par defaut : jourAller, moisAller, jourRetour, moisRetour */
function dateRetourPosterieure()
{
	dateRetourPosterieureByObject("jourAller", "moisAller", "jourRetour", "moisRetour");
}

/* Fonction appelee lorsque l utilisateur modifie le menu deroulant de la date aller */
/* Si la date aller modifiee est posterieure a la date retour affichee, alors la date retour affichee prend la valeur de la date aller */
function dateRetourPosterieureByObject(outboundDayList, outboundMonthList, inboundDayList, inboundMonthList)
{

    var outboundDayObj = $(outboundDayList);
    var outboundMonthObj = $(outboundMonthList);
    var inboundDayObj = $(inboundDayList);
    var inboundMonthObj = $(inboundMonthList);
    if(isNaN(outboundDayObj.selectedIndex)) // cas de IE qui ne fonctionne pas sur certains navigateur
    {      
        outboundDayObj = document.forms[0].elements[outboundDayList];
        outboundMonthObj = document.forms[0].elements[outboundMonthList];
        inboundDayObj = document.forms[0].elements[inboundDayList];
        inboundMonthObj = document.forms[0].elements[inboundMonthList];
    }

    outboundDaySelectedIndex = outboundDayObj.selectedIndex;
    outboundMonthSelectedIndex = outboundMonthObj.selectedIndex;
    inboundDaySelectedIndex = inboundDayObj.selectedIndex;
    inboundMonthSelectedIndex = inboundMonthObj.selectedIndex;


    var moisAllerTmp = 0;
    var moisRetourTmp = 0;
    var jourAllerTmp = 0;
    var jourRetourTmp = 0;

    moisAllerTmp = parseInt(outboundMonthSelectedIndex);
    moisRetourTmp = parseInt(inboundMonthSelectedIndex);
    jourAllerTmp = parseInt(outboundDaySelectedIndex);
    jourRetourTmp = parseInt(inboundDaySelectedIndex);

    if (moisAllerTmp > moisRetourTmp) 
    {  
       inboundMonthObj.selectedIndex = outboundMonthObj.selectedIndex;
       changeOptionByObject(inboundDayList, inboundMonthList);
       inboundDayObj.selectedIndex = outboundDayObj.selectedIndex;
    }

    if (moisAllerTmp == moisRetourTmp && jourAllerTmp > jourRetourTmp) 
    {
       inboundDayObj.selectedIndex = outboundDayObj.selectedIndex;
    }
}



/* Fonction appelee lorsque l utilisateur modifie le menu deroulant de la date retour */
/* Si la date retour modifiee est anterieure a la date aller affichee, alors */
/*    - si le champ jourRetour a ete modifie, le champs moisRetour est incremente de 1 */
/*    - si le champ moisRetour a ete modifie, la date retour affichee prend la valeur de la date aller */
/* Utilise les noms des inputs par defaut : jourAller, moisAller, jourRetour, moisRetour */
function dateAllerAnterieure(jourRetourModifie)
{
   dateAllerAnterieureByObject(jourRetourModifie, "jourAller", "moisAller", "jourRetour", "moisRetour");
}



/* Fonction appelee lorsque l utilisateur modifie le menu deroulant de la date retour */
/* Si la date retour modifiee est anterieure a la date aller affichee, alors */
/*    - si le champ jourRetour a ete modifie, le champs moisRetour est incremente de 1 */
/*    - si le champ moisRetour a ete modifie, la date retour affichee prend la valeur de la date aller */
function dateAllerAnterieureByObject(jourRetourModifie, outboundDayList, outboundMonthList, inboundDayList, inboundMonthList)
{
    var outboundDayObj = $(outboundDayList);
    var outboundMonthObj = $(outboundMonthList);
    var inboundDayObj = $(inboundDayList);
    var inboundMonthObj = $(inboundMonthList);
    if(isNaN(outboundDayObj.selectedIndex)) // cas de IE qui ne fonctionne pas sur certains navigateur
    {      
        outboundDayObj = document.forms[0].elements[outboundDayList];
        outboundMonthObj = document.forms[0].elements[outboundMonthList];
        inboundDayObj = document.forms[0].elements[inboundDayList];
        inboundMonthObj = document.forms[0].elements[inboundMonthList];
    }

    outboundDaySelectedIndex = outboundDayObj.selectedIndex;
    outboundMonthSelectedIndex = outboundMonthObj.selectedIndex;
    inboundDaySelectedIndex = inboundDayObj.selectedIndex;
    inboundMonthSelectedIndex = inboundMonthObj.selectedIndex;

    var moisAllerTmp = 0;
    var moisRetourTmp = 0;
    var jourAllerTmp = 0;
    var jourRetourTmp = 0;

    moisAllerTmp = parseInt(outboundMonthSelectedIndex);
    moisRetourTmp = parseInt(inboundMonthSelectedIndex);
    jourAllerTmp = parseInt(outboundDaySelectedIndex);
    jourRetourTmp = parseInt(inboundDaySelectedIndex);

    if (moisAllerTmp > moisRetourTmp || (moisAllerTmp == moisRetourTmp && jourAllerTmp > jourRetourTmp)) { 

       if (jourRetourModifie) {
           /* incremente le champ moisRetour si possible */
           if (parseInt(inboundMonthSelectedIndex) < inboundMonthObj.options.length - 1) { 
               inboundMonthObj.selectedIndex = parseInt(inboundMonthSelectedIndex) + 1;
               changeOptionByObject(inboundDayList, inboundMonthList);

           }
       } else {
           /* met a jour la date aller */
           outboundMonthObj.selectedIndex = inboundMonthSelectedIndex;
           changeOptionByObject(outboundDayList, outboundMonthList);
           outboundDayObj.selectedIndex = inboundDaySelectedIndex;

       }
    }
}

/**
 * Met &agrave; jour la champ divDay, contenant le jour de la semaine, en fonction de la date selectionn&eacute;e
 * divDay: id du champ contenant le jour de la semaine
 * selectDay: id du champ jour
 * selectMonth: id du champ annee/mois
 */
function updateDay(divDay, selectDay, selectMonth, isShort) {

	var inpDay = $(selectDay);
	var inpMonth = $(selectMonth);

	if (!inpDay.value || !inpMonth.value) {
		inpDay = document.forms[0].elements[selectDay];
		inpMonth = document.forms[0].elements[selectMonth];
	}

	var day = inpDay.value;
	var month = inpMonth.value.substring(4, 6);
	var year = inpMonth.value.substring(0, 4);
	// Cr&eacute;e l'objet date
	var dateJavaScript = new Date(year, month-1, day);
	
	// on v&eacute;rifie que la date est valide
	var jourJavaScript = dateJavaScript.getDate();
        jourJavaScript = parseInt(jourJavaScript,10);
	var moisJavaScript = dateJavaScript.getMonth()+1;
	moisJavaScript = parseInt(moisJavaScript);
	var anneeJavaScript = dateJavaScript.getFullYear();
	anneeJavaScript = parseInt(anneeJavaScript,10);
	
	var iWeekDay; 
	if ((day == jourJavaScript) && (month == moisJavaScript) && (year == anneeJavaScript)) {
		iWeekDay = dateJavaScript.getDay();

                if (isShort) {
			$(divDay).innerHTML = shortWeekDays[iWeekDay]; 
		} else {
			$(divDay).innerHTML = longWeekDays[iWeekDay]; 
		}
	} else {
		// date invalide
		$(divDay).innerHTML = "xxx";
	}
}

function updateDayByObject(divDay, selectDay, selectMonth, isShort) {

	var inpDay = $(selectDay);
	var inpMonth = $(selectMonth);
	var day = inpDay.value;
	var month = inpMonth.value.substring(4, 6);
	var year = inpMonth.value.substring(0, 4);
	// Cr&eacute;e l'objet date
	var dateJavaScript = new Date(year, month-1, day);
	
	// on v&eacute;rifie que la date est valide
	var jourJavaScript = dateJavaScript.getDate();
        jourJavaScript = parseInt(jourJavaScript,10);
	var moisJavaScript = dateJavaScript.getMonth()+1;
	moisJavaScript = parseInt(moisJavaScript);
	var anneeJavaScript = dateJavaScript.getFullYear();
	anneeJavaScript = parseInt(anneeJavaScript,10);
	
	var iWeekDay; 
	if ((day == jourJavaScript) && (month == moisJavaScript) && (year == anneeJavaScript)) {
		iWeekDay = dateJavaScript.getDay();

                if (isShort) {
			$(divDay).innerHTML = shortWeekDays[iWeekDay]; 
		} else {
			$(divDay).innerHTML = longWeekDays[iWeekDay]; 
		}
	} else {
		// date invalide
		$(divDay).innerHTML = "xxx";
	}
}


function dateAllerChanged(isShort, jourMax, moisAnneeMax, pasDeRetour) {
	var atteintMax = false;   /* indique si la date selectionnée atteint ou dépasse la date max */

	// Vérifie que la date ne dépasse pas le max
	if (jourMax && moisAnneeMax) {
		var inpDay = getElement('jourAller');
		var inpMonth = getElement('moisAller');
		if (inpMonth.value > moisAnneeMax) {
			selectOption(inpMonth, moisAnneeMax);
                        atteintMax = true;
		}
		if (atteintMax || (inpDay.value > jourMax && inpMonth.value == moisAnneeMax)) {
			selectOption(inpDay, jourMax);
                        atteintMax = true;
		}
	}
	
	changeOption(aller);
	updateDay('jourSemAller','jourAller','moisAller', isShort);

	if (!pasDeRetour) {
		if(document.forms[0].typeTrajet[0].checked == true) {
			dateRetourPosterieure();	
		}
		changeOption(retour);
		updateDay('jourSemRetour','jourRetour','moisRetour', isShort);	
	}
	
	if (atteintMax) {
		return "MAX";	
	}
}

function dateAllerChangedByObject(isRoundTrip, isShort, outboundDivDay, outboundDayList, outboundMonthList, inboundDivDay, inboundDayList, inboundMonthList) {

	changeOptionByObject(outboundDayList, outboundMonthList);
	if($(isRoundTrip).value == "true") {
		dateRetourPosterieureByObject(outboundDayList, outboundMonthList, inboundDayList, inboundMonthList);	
	}
	changeOptionByObject(inboundDayList, inboundMonthList);
	updateDay(outboundDivDay,outboundDayList, outboundMonthList, isShort);
	updateDay(inboundDivDay, inboundDayList, inboundMonthList, isShort);
}


function dateRetourChanged(moisChanged, isShort, jourMin, moisAnneeMin, pasDAller) {
	var atteintMin = false;   /* indique si la date selectionnée atteint ou dépasse la date min */

	// Vérifie que la date ne dépasse pas le min
	if (jourMin && moisAnneeMin) {
		var inpDay = getElement('jourRetour');
		var inpMonth = getElement('moisRetour');
		if (inpMonth.value < moisAnneeMin) {
			selectOption(inpMonth, moisAnneeMin);
			atteintMin = true;
		}
		if (atteintMin|| (inpDay.value < jourMin && inpMonth.value == moisAnneeMin)) {
			selectOption(inpDay, jourMin);
			atteintMin = true;
		}
	}
       
        if (!pasDAller) {
		dateRetourChangedByObject(moisChanged, isShort, 'jourSemAller','jourAller','moisAller','jourSemRetour','jourRetour','moisRetour');
	} else { /* pas d'input pour l'aller, on fait le strict necessaire pour le retour */
		
		changeOptionByObject('jourRetour','moisRetour');
		updateDay('jourSemRetour','jourRetour','moisRetour', isShort);
	}

	if (atteintMin) {
		return "MIN";	
	}
}

function dateRetourChangedByObject(moisHasChanged, isShort, outboundDivDay, outboundDayList, outboundMonthList, inboundDivDay, inboundDayList, inboundMonthList) {
	changeOptionByObject(inboundDayList, inboundMonthList)	
	dateAllerAnterieureByObject(!moisHasChanged, outboundDayList, outboundMonthList, inboundDayList, inboundMonthList)
	changeOptionByObject(outboundDayList, outboundMonthList);
	changeOptionByObject(inboundDayList, inboundMonthList);  /* le mois peut avoir change, apres l'appel a dateAllerAnterieure */
	updateDay(inboundDivDay, inboundDayList, inboundMonthList, isShort);
	updateDay(outboundDivDay,outboundDayList, outboundMonthList, isShort);
}

function getDiv(divId) {
	if (document.getElementById) {
		return document.getElementById(divId);
	} else if (document.all) {
		return document.all[divId];
	} else if (document.layers)	{
		return document.layers[divId];
	}
}
function selectOption(inpSelect, value) {
	var len = inpSelect.options.length;
	for (var i = 0; i < len; i++) {
		if (inpSelect.options[i].value == value) {
			inpSelect.selectedIndex = i;
			break;
		}
	}
}

