// 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){
            if(currentDay<startDay)
                beforeStartDay=true;
            }
            if(targetMonth+1==endMonth){
            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]);
//	if(document.getElementById('date1').value==""){
//	document.getElementById('date1').value=minDateArray[0]+minDateArray[1];
//	}
	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;
}
