// Object
var calendars = new Array();
function calendar(type,field,caller,start,end){
  this.index = calendars.length;this.type = type;this.field = field;this.caller = caller;this.caller.index = this.index;this.start = (!start)? 0 : start;this.end = (!end)? 99999999 : end;calendars[this.index] = this;
  // Actions
  this.caller.onclick = function(){ launchCalendar(this.index); }
  if(this.type == 'simple'){
    _('calendar'+this.index,'input',1).index = this.index;
    _('calendar'+this.index,'input',1).onblur = function(){
      var output = parseFloat(this.value.split('/')[2]+this.value.split('/')[1]+this.value.split('/')[0]);
      _('calendar'+this.index,'input',0).value = output;
             alert(output+"1");	}
  }else {
    _('calendar'+this.index,'select',0).index = this.index;
    _('calendar'+this.index,'select',0).onchange = function(){
      var other = _('calendar'+this.index,'select',1);
      var output = parseFloat(other.value.split('/')[1]+other.value.split('/')[0]+this.value);
      _('calendar'+this.index,'input',0).value = output;
            //display the day of the week
            var selectDate = new Date();
            selectDate.setFullYear(other.value.split('/')[1]);
            selectDate.setMonth(parseFloat(other.value.split('/')[0])-1);
            selectDate.setDate(this.value);
            var dayName = dayTabMid[selectDate.getDay()];
            if( this.value!=""&&document.getElementById("yearmonth").value!="") document.getElementById("weekday").innerHTML=dayName;
            else document.getElementById("weekday").innerHTML="";
    }
    _('calendar'+this.index,'select',1).index = this.index;
    _('calendar'+this.index,'select',1).onchange = function(){
      var other = _('calendar'+this.index,'select',0);
      var output = parseFloat(this.value.split('/')[1]+this.value.split('/')[0]+other.value);
      _('calendar'+this.index,'input',0).value = output;
      updateDayField(other.value,this.value,this.index);
            //display the day of the week
            var selectDate = new Date();
            selectDate.setFullYear(this.value.split('/')[1]);
            selectDate.setMonth(parseFloat(this.value.split('/')[0])-1);
            selectDate.setDate(other.value);
            var dayName = dayTabMid[selectDate.getDay()];
            if( other.value!=""&&document.getElementById("yearmonth").value!="") document.getElementById("weekday").innerHTML=dayName;
            else document.getElementById("weekday").innerHTML="";
    }
    updateDayField('00',_('calendar'+this.index,'select',1).value,this.index);
  }
}
// Variables
var calendarField;var calendarCaller;var tempDay;var tempMonth;var tempYear;var noDateAvailable=false;var startYear;var startMonth;var startDay;var endYear;var endMonth;var endDay;
// Recupere la date client
var clientDate = new Date();
var currentDay = (clientDate.getDate() < 10)? '0'+clientDate.getDate() : clientDate.getDate()+'';
var currentMonth = ((clientDate.getMonth()+1) < 10)? '0'+(clientDate.getMonth()+1) : (clientDate.getMonth()+1)+'';
var currentYear = clientDate.getFullYear()+'';
var currentDate = parseFloat(currentYear+currentMonth+currentDay);

// Utiles
var dayTab = new Array('L','M','M','J','V','S','D');
var dayTabMid = new Array('Dim.','Lun.','Mar.','Mer.','Jeu.','Ven.','Sam.');
var monthTab = new Array('Janvier','F&eacute;vrier','Mars','Avril','Mai','Juin','Juillet','Ao&ucirc;t','Septembre','Octobre','Novembre','D&eacute;cembre');
function isBissextile(year){
  if(year%4 != 0){return false;}
  return true;
}
function getFirstDayOf(month,year){
  var targetDate = new Date();
  targetDate.setDate(1);
  targetDate.setMonth(parseFloat(month-1));
  targetDate.setFullYear(parseFloat(year));
  var firstDay = (targetDate.getDay() == 0)? 6 : (targetDate.getDay()-1);
  return firstDay;
}
function getMaxDays(month,year){
  switch(month){
    case 1: case 3: case 5: case 7: case 8: case 10: case 12:var maxDay = 31;break;
    case 4: case 6: case 9: case 11:var maxDay = 30;break;
    case 2:var maxDay = (isBissextile(year))? 29 : 28;break;
    default:var maxDay = 31;break;}
  return maxDay;
}
// Builder
function buildCalendar(month,year,index){
  var calendar = calendars[index];
  var month = (month.length == 1)? '0'+month : month;
    if(month==""){
     var tempStartMonth=startMonth;
     tempStartMonth = (tempStartMonth.length == 1)? '0'+tempStartMonth : tempStartMonth;
     month =tempStartMonth;
    }
    if(year=="NaN"){ year=startYear; }
  var targetMonth = parseFloat(month-1);var targetYear = parseFloat(year);
  var limitStart = false;var limitEnd = false;
  if(calendar.type == 'double'){
    var currentRequest = parseFloat(year+month);
    if(currentRequest < calendar.start){
      var startString = calendar.start+'';
      buildCalendar(startString.substr(4,2),startString.substr(0,4),index);
      return;
    } else if(currentRequest > calendar.end){
      var endString = calendar.end+'';
      buildCalendar(endString.substr(4,2),endString.substr(0,4),index);
      return;
    }
    limitStart = (currentRequest == calendar.start)? true : false;
    limitEnd = (currentRequest == calendar.end)? true : false;
  } else {
    limitStart = false;
    limitEnd = false;
  }
  // Changement d'ann?e
  if(targetMonth < 0){
    buildCalendar('12',(targetYear-1)+'',index);
    return;
  } else if(targetMonth > 11){
    buildCalendar('01',(targetYear+1)+'',index);
    return;
  }
  var htmlRender = '';
  // Entete
  htmlRender += '<div class="calCont">\n';htmlRender += '\t<a href="javascript:closeCalendar();" class="calClose" title="Cliquez ici pour refermer le calendrier."><img src="/CS/images/pictos/calendar.gif" alt="Cliquez ici pour refermer le calendrier." /></a>\n';htmlRender += '\t<div class="calTitle">Calendrier</div>\n';htmlRender += '\t<div class="calNav">\n';htmlRender += '\t\t<div class="calMonth">\n';htmlRender += '\t\t\t<a href="javascript:void(0)" onclick="buildCalendar(\''+targetMonth+'\',\''+targetYear+'\','+index+');" class="prevCalendar">&laquo;</a><span class="monthCalendar" onclick="updateCalField(\''+year+''+month+'00\','+index+');">'+monthTab[targetMonth]+'</a></span><a href="javascript:void(0)" onclick="buildCalendar(\''+(targetMonth+2)+'\',\''+targetYear+'\','+index+');" class="nextCalendar">&raquo;</a>\n';htmlRender += '\t\t</div>\n';htmlRender += '\t\t<div class="calYear">\n';htmlRender += '\t\t\t<a href="javascript:void(0)" onclick="buildCalendar(\''+(targetMonth+1)+'\',\''+(targetYear-1)+'\','+index+');" class="prevCalendar">&laquo;</a><span class="yearCalendar">'+targetYear+'</span><a href="javascript:void(0)" onclick="buildCalendar(\''+(targetMonth+1)+'\',\''+(targetYear+1)+'\','+index+');" class="nextCalendar">&raquo;</a>\n';htmlRender += '\t\t</div>\n';htmlRender += '\t</div>\n';
  // Semaine
  htmlRender += '\t<div class="calLegend">\n';
  for(i=0; i<dayTab.length; i++){htmlRender += '\t\t<span>'+dayTab[i]+'</span>\n';}
  htmlRender += '\t\t<div class="clear"></div>\n';htmlRender += '\t</div>\n';
  // Jours
  var currentDay = 1;
  var maxDay = getMaxDays((targetMonth+1),targetYear);
  var firstDay = getFirstDayOf((targetMonth+1),targetYear);
  var maxWeek = Math.floor((maxDay+firstDay)/7);
  maxWeek = (maxWeek == (maxDay+firstDay)/7)? maxWeek : maxWeek+1;
  var maxWeekDays = maxWeek*7;
  var prevMonth = (targetMonth == 0)? 12 : targetMonth;
  var prevYear = (targetMonth == 0)? (targetYear-1) : targetYear;
  var prevMonthFirst = getMaxDays(prevMonth,prevYear)-firstDay+1;
  var nextMonth = (targetMonth == 11)? 1 : targetMonth+2;
  var nextYear = (targetMonth == 11)? (targetYear+1) : targetYear;
  var nextMonthDay = 1;
  htmlRender += '\t<div class="calDays">\n';
    var beforeStartDay=false;
    var afterEndDay=false;
  for(i=0; i<maxWeekDays; i++){
    if(i < firstDay){
      var updateMonth = (prevMonth < 10)? '0'+prevMonth : prevMonth;
      var updateYear = prevYear;
      var calOn = (updateDay == tempDay && updateMonth == tempMonth && updateYear == tempYear)? ' on' : '';
      if(limitStart == false){htmlRender += '\t\t<a class="calOld'+calOn+'" href="javascript:void(0)" onclick="updateCalField(\''+updateYear+''+updateMonth+''+prevMonthFirst+'\','+index+');">'+prevMonthFirst+'</a>\n';}
      else {htmlRender += '\t\t<span class="calOld'+calOn+'">&nbsp;</span>\n';}
      prevMonthFirst ++;
    }else if(i >= firstDay && i < (maxDay+firstDay)){
            beforeStartDay=false;
            afterEndDay=false;
      var updateDay = (currentDay < 10)? '0'+currentDay : currentDay;
      var updateMonth = ((targetMonth+1) < 10)? '0'+(targetMonth+1) : (targetMonth+1);
            if(targetMonth+1==startMonth && startYear == targetYear){
            if(currentDay<startDay)
                beforeStartDay=true;
            }
            if(targetMonth+1==endMonth && targetYear==endYear){
            if(currentDay>endDay)afterEndDay=true;}
      var updateYear = targetYear;
            if(!beforeStartDay&!afterEndDay){
      var calOn = (updateDay == tempDay && updateMonth == tempMonth && updateYear == tempYear)? ' class="on"' : '';
      htmlRender += '\t\t<a'+calOn+' href="javascript:void(0)" onclick="updateCalField(\''+updateYear+''+updateMonth+''+updateDay+'\','+index+');">'+currentDay+'</a>\n';
      }
            else {htmlRender +='\t\t<span class="disabled">'+currentDay+'</span>\n';}
            currentDay ++;
    } else if(limitEnd == false){
      var updateDay = (nextMonthDay < 10)? '0'+nextMonthDay : nextMonthDay;
      var updateMonth = (nextMonth < 10)? '0'+nextMonth : nextMonth;
      var updateYear = nextYear;
      var calOn = (updateDay == tempDay && updateMonth == tempMonth && updateYear == tempYear)? ' on' : '';
      htmlRender += '\t\t<a class="calOld'+calOn+'" href="javascript:void(0)" onclick="updateCalField(\''+updateYear+''+updateMonth+''+updateDay+'\','+index+');">'+nextMonthDay+'</a>\n';
      nextMonthDay ++;
    }
  }
  htmlRender += '\t\t<div class="clear"></div>\n'; htmlRender += '\t</div>\n'; htmlRender += '</div>\n';
  // innerHTML
  if(!_('calendar')){
    var calendarObj = document.createElement('div');
    var calendarElement = document.body.appendChild(calendarObj);
    calendarElement.id = 'calendar';
    calendarElement.style.visibility = 'hidden';
    calendarElement.style.top = '-999px';
    calendarElement.style.left = '-999px';
    var calendarOuterObj = document.createElement('div');
    var calendarOuterElement = document.body.appendChild(calendarOuterObj);
    calendarOuterElement.id = 'calendarOuter';
    calendarOuterElement.style.visibility = 'hidden';
    calendarOuterElement.onclick = closeCalendar;
    var firstBuild = true;
  } else {var firstBuild = false;}
  _('calendar').innerHTML = htmlRender;
  if(isIE && !isIE7 && _('rescueFrame')){_('rescueFrame').style.height = _('calendar').offsetHeight+'px';}
  if(firstBuild == true || _('calendar').style.visibility == 'hidden'){openClandar(index);}
}
// Launcher
function launchCalendar(index){
  if(_('calendar') && _('calendar').style.visibility == 'visible') closeCalendar();
  var calendar = calendars[index];
  var intOnly = new RegExp('^[0-9]{6,8}$','gi');
  var isInt = intOnly.test(calendar.field.value);
  var tempValue = (calendar.field.value != '')? calendar.field.value+'' : currentDate+'';
  if(tempValue.length == 6 && isInt){tempDay = 0;tempMonth = tempValue.substr(4,2);tempYear = tempValue.substr(0,4);}
  else if(tempValue.length == 8 && isInt){tempDay = tempValue.substr(6,2);tempMonth = tempValue.substr(4,2);tempYear = tempValue.substr(0,4);}
  else {tempDay = 0;tempMonth = tempValue.substr(4,2);tempYear = tempValue.substr(0,4);}
  buildCalendar(tempMonth,tempYear,index);
}
function openClandar(index){
  var calendar = calendars[index];
  // Affichage du calendrier
  _('calendar').style.top = (_C('y',calendar.caller)-5)+'px';_('calendar').style.left = (_C('x',calendar.caller)-5)+'px';_('calendar').style.visibility = 'visible';
  // Affichage du Outer
  _('calendarOuter').style.visibility = 'visible';
  // iFrame de secour pour IE6
  rescueFrame(_('calendar'),5);
}
// Mise ? jour du champ
function updateCalField(value,index){
  var calendar = calendars[index];
  calendar.field.value = value;
  var newYear = value.substr(0,4);
  var newMonth = value.substr(4,2);
  var newDay = value.substr(6,2);
    var selectDate = new Date();
    selectDate.setFullYear(newYear);
    selectDate.setMonth(newMonth-1);
    selectDate.setDate(newDay);
    var dayName = dayTabMid[selectDate.getDay()];
  if(calendar.type == 'double'){updateMonthField(newDay,newMonth+'/'+newYear,index);}
  else if(calendar.type == 'simple'){var output = (newDay == '00')? newMonth+'/'+newYear : newDay+'/'+newMonth+'/'+newYear;_('calendar'+index,'input',1).value = output;}
    if( document.getElementById("dd").value!=""&&document.getElementById("yearmonth").value!="")
    document.getElementById("weekday").innerHTML=dayName;
    else document.getElementById("weekday").innerHTML="";
  // Masquage du calendrier
  closeCalendar();
}
function updateSearchEngine(value,index){

    if(value!=""){
    var calendar = calendars[index];
    calendar.field.value = value;
    var newYear = value.substr(0,4);
    var newMonth = value.substr(4,2);
    var newDay = value.substr(6,2);
    var selectDate = new Date();
    selectDate.setFullYear(newYear);
    selectDate.setMonth(newMonth-1);
    selectDate.setDate(newDay);
    var dayName = dayTabMid[selectDate.getDay()];
    if(calendar.type == 'double'){
        updateMonthField(newDay,newMonth+'/'+newYear,index);
    } else if(calendar.type == 'simple'){
        var output = (newDay == '00')? newMonth+'/'+newYear : newDay+'/'+newMonth+'/'+newYear;
        _('calendar'+index,'input',1).value = output;
    }
    if( document.getElementById("dd").value!=""&&document.getElementById("yearmonth").value!="")
    document.getElementById("weekday").innerHTML=dayName;
    else document.getElementById("weekday").innerHTML="";
    }
    // Masquage du calendrier
}
function updateMonthField(day,month,index){
    var field = _('calendar'+index,'select',1);
  var length = field.length
  for(var i =0; i<length; i++){
    if(month == field[i].value){field[i].selected = true;} else {field[i].selected = false;}
  }
  updateDayField(day,month,index);
}
function updateDayField(day,month,index){
    if(month!=""){
    var year = month.split('/')[1];
  var month = month.split('/')[0];
  var dayLength = getMaxDays(parseFloat(month),parseFloat(year));
  var day = (parseFloat(day) > dayLength)? '00' : day;
  var dayField = _('calendar'+index,'select',0);
  var dayFieldLength = dayField.length;
    var startDate = 1;
    if(parseFloat(month)==startMonth&&parseFloat(year)==startYear){startDate =startDay ;}
    if(parseFloat(month)==endMonth&&parseFloat(year)==endYear){dayLength =endDay ;}
  // Vide la liste
  for(var i=1; i<dayFieldLength; i++){dayField.removeChild(dayField[1]);}
  // Rempli la liste
  var selectDate = new Date();
  selectDate.setFullYear(parseFloat(year));
  selectDate.setMonth(parseFloat(month)-1);
  for(var i=startDate; i<=dayLength; i++){
    selectDate.setDate(i);
    //var dayName = dayTabMid[selectDate.getDay()];
    var opt = document.createElement('option');
    var val = (i<10)? '0'+i : i+'';
    var text = document.createTextNode(' '+i);
    opt.appendChild(text);
    opt.setAttribute('value',val);
    dayField.appendChild(opt);
  }
  // Active la liste
  var newLength = dayField.length;
  for(var i=0; i<newLength; i++){if(day == dayField[i].value){dayField[i].selected = true;} else {dayField[i].selected = false;}}
}
}
// Fermeture du calendrier
function closeCalendar(){
  // Masquage du calendrier
  _('calendar').style.visibility = 'hidden';
  // Masquage du Outer
  _('calendarOuter').style.visibility = 'hidden';
  // Cache iFrame de secour pour IE6
  endRescueFrame();
}
// A appeler au chargement pour poser les ev?nements
function calendarEvents(){
  var calendTab = __('div','calendar');
  for(i=0; i<calendTab.length; i++){
    var type = (_('calendar'+i,'select',-1).length > 1)? 'double' : 'simple';
    var field = _('calendar'+i,'input',0);
    var caller = _('calendar'+i,'a',0);
        var tempStartMonth=startMonth;
        var tempEndMonth=endMonth;
        if(startMonth<10) tempStartMonth='0'+startMonth;
        if(endMonth<10) tempEndMonth='0'+endMonth;
        var start = startYear+''+tempStartMonth;
        var end = endYear+''+tempEndMonth;
        var monthArray=new Array();
        var yearArray=new Array();
        var monthCount=0;
        if(startYear<=endYear) monthCount=(endYear-startYear)*12+endMonth-startMonth+1;
        for(i=0; i<monthCount; i++){
          yearArray[i]=startYear+parseInt((startMonth+i-1)/12);
          if(startMonth+i>12){monthArray[i]=(startMonth+i)%12;if(monthArray[i]==0)monthArray[i]=12; }
          else {monthArray[i]=(startMonth+i)}
        }

        renderArrayMonth(monthArray,yearArray);
        new calendar(type,field,caller,start,end);
  }
}
function setMinMaxDate(){
  var minDate = document.getElementById("minDate").value;
  var maxDate = document.getElementById("maxDate").value;
  if(minDate != ""&&maxDate!=""){
    noDateAvailable = false;
    var minDateArray = minDate.split("-");
    startYear = parseFloat(minDateArray[0]);
    startMonth = parseFloat(minDateArray[1]);
    startDay = parseFloat(minDateArray[2]);

    var maxDateArray = maxDate.split("-");
    endYear = parseFloat(maxDateArray[0]);
    endMonth = parseFloat(maxDateArray[1]);
    endDay = parseFloat(maxDateArray[2]);
  }else{
    noDateAvailable = true;
    var startDateAvailable = new Date();
    startYear = startDateAvailable.getFullYear();
    startMonth = startDateAvailable.getMonth()+1;
    startDay = startDateAvailable.getDate();
    var endDateAvailable = new Date();
    endDateAvailable.setDate(startDay -1);
    endYear = endDateAvailable.getFullYear();
    endMonth = endDateAvailable.getMonth()+1;
    endDay = endDateAvailable.getDate();
  }
}
function renderArrayMonth(monthArray,yearArray){
    var buffer = "";
    buffer = "<select id='yearmonth' name='dmy' class='inputSelect monthSelect' >";
    buffer +="<option value='' selected='selected'>Mois</option>";
    var month="";
    var cookieDate = Get_Cookie("departureDate");
    var cookieDateTable;
    if(cookieDate){
       cookieDateTable = cookieDate.split("/");
    }
    if(!noDateAvailable){
       for (var x=0;x< monthArray.length;x++){
          if(monthArray[x]<10)
          {
            month='0'+monthArray[x];
          }
          else
          {
            month=monthArray[x];
          }
          var select = false;
         if(cookieDateTable&&cookieDateTable[1] == month){
           select = true;
         }
          if(select){
            buffer += "<option select value='"+month+'/'+yearArray[x]+"'>"+monthTab[monthArray[x]-1]+' '+yearArray[x]+"</option>";
          }else{
            buffer += "<option value='"+month+'/'+yearArray[x]+"'>"+monthTab[monthArray[x]-1]+' '+yearArray[x]+"</option>";
          }
      }
    }
    buffer += "</select>"; document.getElementById("dmy").innerHTML = buffer;
}
