MultiCalendars = function(datas) {
		this.arrivalID = datas.arrivalID;
		this.buttonID = datas.buttonID;
		this.arrivalDayID = datas.arrivalDayID;
		this.arrivalMonthID = datas.arrivalMonthID;
		this.arrivalYearID = datas.arrivalYearID;
		this.nightsID = datas.nightsID;
		this.nightsNb = parseInt($(datas.nightsID).value, 10);
		this.departureID = datas.departureID;
		this.arrivalDate = null;
		this.maxStay = datas.maxStay || 23;
		this.maxPeriod = datas.maxPeriod || 405;
		this.calType = datas.calType;
		this.jPlusX = datas.jPlusX;
		this.initialize(datas);
};

MultiCalendars.prototype.initialize=function(datas){
		Event.observe($(datas.arrivalID), 'focus', function() {this.blur();});
		
		var arrival = $(datas.arrivalID);
		if (arrival.value) {
			var d = Date.parseDate(arrival.value, Calendar._TT.DEF_DATE_FORMAT);
			d = d.setDateMidday();
			this.setHiddenFields(d);
			this.arrivalDate = d;
		}
		
		Calendar.setup({
			inputField: datas.arrivalID,
			button: datas.buttonID,
			button_eventNames: ['click'],
			inputField_eventNames: ['click','focus'],
			ifFormat: Calendar._TT["DEF_DATE_FORMAT"],
			singleClick: true,
			onSelect: this.selectDate.bind(this),
			dateStatusFunc: this.disableDates.bind(this)
		});
		
		if ($(datas.nightsID)) {
			this.setupMaxStayDropDown();
		}
};
	
MultiCalendars.prototype.setDisplayField =  function(date,d) {
		$(this.arrivalID).value = date;
		var weekDay = $(this.arrivalID).previous(".jour");
		if(weekDay) 
				weekDay.innerHTML =(date) ? Calendar._DN[date.getDay()] : Calendar._DN[d.getDay()] ;
	};
	
MultiCalendars.prototype.setHiddenFields = function(cDate, date) {
		$(this.arrivalDayID).value = cDate.getDate();
		$(this.arrivalMonthID).value = cDate.getMonth() + 1;
		$(this.arrivalYearID).value = cDate.getFullYear();
		if (!$(this.nightsID).value) {
			$(this.nightsID).value = 1;
		}
	};
	
MultiCalendars.prototype.setupMaxStayDropDown = function() {
		var select = $(this.nightsID);
		// empty select box if not empty
		if(select.options.length > 1) {
			select.options.length = 0;
		}
		// fill select box with maxStay value
		for(var i = 1; i <= this.maxStay; i++) {
			select.options[select.options.length] = new Option(i, i);
		}
		
		if(this.calType == 'meeting'){
			if(Meetings.meetingRoomNightIndex != null){
				this.nightsNb = Meetings.meetingRoomNightIndex;
			}
			else{
				this.nightsNb = 0;
			}
		}
		else{
			if(Meetings.bedroomNightIndex != null && Meetings.bedroomNightIndex != -1){
				this.nightsNb = Meetings.bedroomNightIndex;
			}
			else{
				this.nightsNb = 0;
			}
		}
		
		select.selectedIndex = this.nightsNb;
		
		Event.observe(select, 'change', function(e) {
			var el = Event.element(e);
			if(el.value!=""){
			var date = new Date();
			if($(this.arrivalID).value==''){
				$(this.arrivalID).value=date.print(Calendar._TT.DEF_DATE_FORMAT);
				this.setDisplayField(date.print(Calendar._TT.DEF_DATE_FORMAT),date);
				this.setHiddenFields(date);
				this.arrivalDate = date;
			}else{
			if (date) {
				date.setTime(date.getTime());
			} else if (this.arrivalDate) {
				date.setTime(this.arrivalDate.getTime());
			}
			date.setTime(date.getTime() + Date.DAY * parseInt(el.value, 10));
			if (!this.checkDate(date)) {
				el.selectedIndex = this.nightsNb;
				return false;
			}
			this.nightsNb = el.selectedIndex;
		}
			this.updateDepartureDate();
		}else{
			if(this.calType == 'meeting'){
				if(Meetings.meetingRoomNightIndex != null){
					this.nightsNb = Meetings.meetingRoomNightIndex;
				}
				else{
					this.nightsNb = 0;
				}
			}
			else{
				if(Meetings.bedroomNightIndex != null){
					this.nightsNb = Meetings.bedroomNightIndex;
				}
				else{
					this.nightsNb = 0;
				}
			}
			$(this.arrivalID).value='';
			$(this.arrivalDayID).value='';
			$(this.arrivalMonthID).value='';
			$(this.arrivalYearID).value='';
			var departureDisplay = $(this.departureID);
			departureDisplay.down("span.jour").innerHTML="";
			departureDisplay.down("span.date").innerHTML="";
		}
		}.bind(this));
		if (this.arrivalDate) {this.updateDepartureDate();}
	};
	
MultiCalendars.prototype.updateDepartureDate= function() {
		if (this.arrivalDate === undefined) {
			var d = new Date();
			d = d.setDateMidday();
			$(this.arrivalID).value = d.print(Calendar._TT.DEF_DATE_FORMAT);
			this.setDisplayField(d.print(Calendar._TT.DEF_DATE_FORMAT), d);
			this.setHiddenFields(d);
			this.arrivalDate = d;
		}

		var select = $(this.nightsID);
		if (select) {
			var departureDisplay = $(this.departureID);
			var weekDay = departureDisplay.down("span.jour");
			var date = departureDisplay.down("span.date");
			//compute new date
			
			//si Calendrier pour un meeting
			if(this.calType == 'meeting')
				var nightsStayInDays = Number(select.value)-1;
			else
				var nightsStayInDays = Number(select.value);
				
			var nightsStayInMS = nightsStayInDays * Date.DAY;
			var departureDate = new Date();
			departureDate = departureDate.setDateMidday();
	  	
			if(!this.arrivalDate){
				this.arrivalDate=new Date();
				this.arrivalDate = this.arrivalDate.setDateMidday();
			}
				departureDate.setTime(((d) ? d.getTime() : this.arrivalDate.getTime()) + nightsStayInMS);
			if (weekDay) {
				weekDay.innerHTML = Calendar._DN[departureDate.getDay()];
			}
			date.innerHTML= departureDate.print(Calendar._TT.FULL_DATE_FORMAT);
			
			if(this.calType == 'meeting')
			{
				Meetings.mDateIn = this.arrivalDate;
				Meetings.mDateOut = departureDate;
				Meetings.updateSelectRoomsDateIn(this.arrivalDate, departureDate);
				//Meetings.rewriteCalendarArrivalField();
			}
		}
		var fullDatePrinted = $(this.arrivalID).next(".fullPrintedDate");
		if(fullDatePrinted)
				fullDatePrinted.innerHTML = this.arrivalDate.print(Calendar._TT.FULL_DATE_FORMAT);
	};
	
MultiCalendars.prototype.checkDate= function(date) {
		var b = true;
		var msg = null;
		var now = new Date();
		if (date.getTime() < now.getTime()) {
			b = false;
			msg = "outOfMinDate";
			var min = new Date();
			min.setTime(now.getTime());
			//setDate(min);
		}
		var max = now.getTime() + (Date.DAY * this.maxPeriod);
		if (date.getTime() >= max) {
			b = false;
			msg = "outOfMaxDate";
			var safe = new Date();
			safe.setTime(max - ((this.nightsNb + 1) * Date.DAY));
			//setDate(safe);
		}
		return b;
	};
	
MultiCalendars.prototype.disableDates= function(dDate, y, m, d) {
		
		var now = new Date();
		if(dDate.getTime() < now.getTime() + (this.jPlusX - 1)*Date.DAY) {
			return true;
		}
		var max = now.getTime() + (Date.DAY * this.maxPeriod) - (Date.DAY * (this.nightsNb + 1));
		if(dDate.getTime() > max) {
			return true;
		}
		return false;
};
	
MultiCalendars.prototype.selectDate= function(cal, date) {
		var departure = new Date();
		departure.setTime(cal.date.getTime() + (12 * Date.HOUR) + (this.nightsNb + 1) * Date.DAY);
		
		if(!this.checkDate(departure)) {
			return false;
		}
		if(cal.dateClicked) {
			this.arrivalDate = cal.date.setDateMidday();
			this.setDisplayField(date);
			this.setHiddenFields(cal.date);
			this.updateDepartureDate();
			cal.hide();
		}
		return true;
	};

Date.prototype.setDateMidday = function() {
	n = new Date(this.getFullYear(), this.getMonth(), this.getDate());
	n.setTime(n.getTime() + (12 *Date.HOUR));
	return n;
};