var maxNuits=23; 
var maxDeltaJours=405;
var IS_MS = /MSIE /.test(navigator.userAgent);

function nov_initLang(){
	var e = document.getElementsByTagName("html")[0];
	if(e.attributes["xml:lang"] && e.attributes["xml:lang"].value){
		lang = e.attributes["xml:lang"].value;	
	} else if(e.attributes["lang"] && e.attributes["lang"].value){
		lang = e.attributes["lang"].value;
	}
}

if (!Date.prototype.monthStr) {
	Date.prototype.monthStr = function(val) {
		val = val || (this.getMonth()+1);
		return (val<10 ? "0" : "") + val;
	}
	
	Date.prototype.dayStr = function() {
		return this.monthStr(this.getDate());
	}
}

if (!Date.prototype.toSlashString) {
	Date.prototype.toSlashString = function(val) {
		if (window.lang && window.lang=='en') {
			//return this.monthStr()+"../../"+this.dayStr()+"../../"+this.getFullYear();
			return this.dayStr()+"../../"+this.monthStr()+"../../"+this.getFullYear();
		} else {
			return this.dayStr()+"../../"+this.monthStr()+"../../"+this.getFullYear();
		}
	}
}

if (!Date.prototype.isInPeriod) {
	Date.prototype.isInPeriod = function(days) {
	  if (nov_isSameDay(this, new Date())) return true;
		if (this<new Date()) return false;
		return !parseInt((this.getTime()-(new Date()).getTime() ) / (days*(24*3600*1000)))
	}
}

var days = new Array();
var months = new Array();

var _currentDate = new Date();
var _realDate = new Date();

var calDocumentClickFunc = null;
var chouchouType;

function nov_afficher(id,decal) {
	var moveCal = decal ? 60 : 0;
	nov_getCurrentDate();
	var obj=document.getElementById(id);

	if (!obj.alreadyEvent) {
		addEvent(obj, 'click', NOV.tools.cancelClick);
		obj.alreadyEvent = true;
		
		calDocumentClickFunc = function() {nov_afficher(id)}
	}
	
	if(obj.style.display =="block") {
		obj.style.display = "none";
		NOV.ifrlayer.hide(obj); // IE6 select layer bug fix
		removeEvent(document, 'click', calDocumentClickFunc, 10);	
	}
	else {
		//obj.style.display = "block";
		obj.setStyle("display:block");
		
		setTimeout(function() {
			addEvent(document, 'click', calDocumentClickFunc);
		}, 10);	
		if (id == "Calendrier" && !IS_MS) {
			var obj2 = document.getElementById("jour_arrivee");
			obj.style.left = obj2.offsetLeft-moveCal+"px";
			obj.style.top = obj2.offsetTop + obj2.offsetHeight+ moveCal +"px"; //findPos(obj2)[1] -4 +"px";
		}
		 else if (id == "Calendrier" && IS_MS) {
			var obj2 = document.getElementById("jour_arrivee");
			if(/fichehotel/.test(document.location)) {
				obj.style.left = obj2.offsetLeft+10+"px";
				obj.style.top = obj2.offsetTop + obj2.offsetHeight+10 +"px"; //findPos(obj2)[1] -4 +"px";
			}
			else{
				obj.style.left = obj2.offsetLeft+"px";
				obj.style.top = obj2.offsetTop + obj2.offsetHeight+48 +"px"; //findPos(obj2)[1] -4 +"px";
			}
		}
		NOV.ifrlayer.make(obj); // IE6 select layer bug fix
	}
}

function nov_ItemChoisi(val) {
	var obj=document.getElementById("ItemActuel");
	obj.innerHTML=val;
	nov_afficher("choix_nights_sublist");
}

function nov_initCalendar() {
	lang = lang.toLowerCase();
	
	for(clef in I18N.calendar_days) {
		days.push(I18N.calendar_days[clef]);
	}
	for(clef in I18N.calendar_months) {
		months.push(I18N.calendar_months[clef]);
	}

	var calendarForm = $('bookingEngine');
	if (calendarForm){
		
		if(document.getElementById('calendar')){
			// alert("ici");
			Event.observe(
				'calendar',
				"click",
				function(){
					nov_afficher('Calendrier', false);
					return false;
				}
			);
			// try {document.getElementById('calendar').onclick = function() {
				// nov_afficher('Calendrier');
			// }} catch(e){alert (e);}
		}
		if($('prev')) $('prev').onclick = nov_prevMonth;
		if($('next')) $('next').onclick = nov_nextMonth;
	}
}

function nov_getCurrentDate() {
	var dateInCalendar = _currentDate;
	// mois en cours
	var firstMonth= document.getElementById("firstMonth");
	var monthValue = months[dateInCalendar.getMonth()];
	firstMonth.innerHTML = monthValue + ' ' + dateInCalendar.getFullYear();
	var obj=document.getElementById("firstDays");
	obj.innerHTML = "";
	obj.appendChild(nov_addDays(dateInCalendar.getMonth(), dateInCalendar.getFullYear()));
}

function nov_addDays(month, year) {
	var d=new Date(year, month, 1);
	var nbjour = 31;
	if (month==3 || month==5 || month==8 || month==10) --nbjour;
	if (month==1){
		nbjour-=3;
		if (year%4==0) nbjour++;
		if (year%100==0) nbjour--;
		if (year%400==0) nbjour++;
	}
	
	var table = document.createElement("table");
	var tblbody = document.createElement("tbody");
	tblbody.appendChild(nov_addTitleDays());
	
	var nbEmpty = d.getDay()-1;
	if (nbEmpty < 0) nbEmpty = 6;
	// Rajouter le nombre de champ vide	
	var row;
	row	 = document.createElement("tr");
	nov_addEmpty(row, nbEmpty);
	var cpt = nbEmpty;
	
	var currentDay = new Date($("annee_arrivee").value , $("mois_arrivee").value - 1, $("jour_arrivee").value);
	
	
	for (var i = 1; i <= nbjour; i++) {
		var cell = document.createElement("td");
		cell.className = "item";
		var dateOk = nov_dateOkWithAllConstraints(new Date([month+1,i,year].join('../../default.htm')));
		if (!dateOk) { cell.className+=" unselectable";}
		if ((i == currentDay.getDate() )  && (month == currentDay.getMonth() ) && (year == currentDay.getFullYear()) ) {
			cell.className += " itemCurrent";
		}
		if (dateOk) {
			var link = document.createElement("a");
			link.setAttribute("href", "javascript:;");
			if (dateOk) {
				link.onclick = new Function ("nov_selectDate('" + year +"', "+month+", "+i+");");
			} else {
				link.onclick = function () {return false;}
			}
			var cellText = document.createTextNode(i);
			link.appendChild(cellText);
			cell.appendChild(link);
		} else {
			var cellText = document.createTextNode(i);
			cell.appendChild(cellText);
		}
		
		row.appendChild(cell);
		cpt++;
		if (cpt == 7) {
			cpt = 0;
			
			tblbody.appendChild(row);
			row	 = document.createElement("tr");
		}
	}
	nov_complementCell(row,cpt);
	tblbody.appendChild(row);
	// Rajouter champ vide
	table.appendChild(tblbody);
	return table;
}

function nov_selectDate(year, month, day) {
	month++;
	document.getElementById("jour_arrivee").value = day;
	document.getElementById("mois_arrivee").value = month;
	document.getElementById("annee_arrivee").value = year.toString();
	
	var currentDate = new Date();
	var selectedDate = new Date([month,day,year.toString()].join("../../default.htm"));
	var delta =  + nov_getNbNuits();
	if (!selectedDate.isInPeriod(maxDeltaJours-nov_getNbNuits())) return; //gestion du fait qu'on ne peut selectionner un jour anterieur a la date en cours ou un jour superieur a 405 jours
	// if (lang=='en') {
		//document.getElementById("item_datefull").value = nov_numberToString(month) + '/' + nov_numberToString(day) + '/' + year;
		// document.getElementById("item_datefull").value = nov_numberToString(day) + '/' + nov_numberToString(month) + '/' + year;
	// } else {
		// document.getElementById("item_datefull").value = nov_numberToString(day) + '/' + nov_numberToString(month) + '/' + year;
	// }
	nov_afficher("Calendrier");
}

function nov_numberToString(num) {
	return (num<10?'0':'') + num;
}

function nov_addEmpty(row, nb) {
	for (var i = 0; i < nb; i++) {
		var cell = document.createElement("td");
		var cellText = document.createTextNode("");
				cell.appendChild(cellText);
				row.appendChild(cell);
	}
}

function nov_addTitleDays() {
	var rows = document.createElement("tr");
	for(var i = 0; i < days.length; i++) {
		var cell = document.createElement("th");
		var cellText = document.createTextNode(days[i]);
		cell.appendChild(cellText);
		rows.appendChild(cell);		
	}
	return rows;
}

function nov_complementCell(row, cpt) {
	for(; cpt < 7; cpt++) {
		var cell = document.createElement("td");
		var cellText = document.createTextNode("");
		cell.appendChild(cellText);
		row.appendChild(cell);		
	}
}

function nov_prevMonth() {
	_currentDate = new Date(_currentDate.getFullYear(), _currentDate.getMonth()-1);
	nov_getCurrentDate();
}

function nov_nextMonth() {
	_currentDate = new Date(_currentDate.getFullYear(), _currentDate.getMonth()+1);
	nov_getCurrentDate();
}
	 
function nov_getNbNuits() {
	var val = $('nb_nuit').value;
	return (parseInt(val,10) || val || 1);
}

/* fonctionnel du calendrier sur la page recherche */
function sel_nuit(n){
	Element.update('ItemActuel',n);
	$('nb_nuit').value=n;
	Element.toggle('choix_nights_sublist');
	return false;
}

function sel_dest(n,dest_elem){
	Element.update('destinationTxt',n);
	document.getElementById('destination_input').value=dest_elem.name;
	Element.toggle('liste_destinations');
	return false;
}

function getText(elm) {
	return elm.innerText || elm.textContent;
}

function nov_initDateField() {

  var dF = $('item_datefull');
  var jour = $('jour_arrivee');
	var mois = $('mois_arrivee');
	var annee = $('annee_arrivee');
	var nbnuits = $('nb_nuit');
	if (!dF) return;
	dF.checkDate = function() {
		
		var val = dF.value.match(/(\d{2}).?(\d{2}).?(\d{4})/); // this.value.match, BUG sous IE avec le this
		if (!val) {
			jour.value = '';
			mois.value = '';
			annee.value = '';
			return;
		}
		var day = val[1]; //lang=='en' ? val[2] : val[1];
		var month = parseInt(val[2],10); //(lang=='en' ? val[1] : val[2],10);
		var theDate = new Date(month+"../../"+day+"../../"+val[3]);
		var currentDate = new Date();
		if (theDate<currentDate) theDate = currentDate;
		if (!theDate.isInPeriod(maxDeltaJours-nov_getNbNuits())) {
			theDate  = new Date();
			theDate.setTime((new Date()).getTime() + (maxDeltaJours-nov_getNbNuits())*24*3600*1000);
		}
		var dateStr = theDate.toSlashString();
		dF.value = dateStr;
		jour.value = theDate.getDate();
		mois.value = theDate.getMonth() + 1;
		annee.value = theDate.getFullYear();
		_currentDate = (jour.value!='' && mois.value!='' && annee.value!='') ? new Date([mois.value,jour.value,annee.value].join('../../default.htm')) : new Date(); //on reinitialise le calendrier
	}
	
	dF.checkDateFromSelectDay = function() {
		checkDateFrom("day");
	}
	
	dF.checkDateFromSelectMonth = function() {
		checkDateFrom("month");
	}
	
	dF.checkDateFromSelectYear = function() {
		checkDateFrom("year");
	}
	
	dF.checkDateFromSelectNights = function() {
		checkDateFrom("nights");
	}

	Element.observe(dF, 'blur', dF.checkDate);
	Element.observe(jour, 'change', dF.checkDateFromSelectDay);
	Element.observe(mois, 'change', dF.checkDateFromSelectMonth);
	Element.observe(annee, 'change', dF.checkDateFromSelectYear);
	Element.observe(nbnuits, 'change', dF.checkDateFromSelectNights);
}

function checkDateFrom(from) {
	
	var dF = $('item_datefull');
	var jour = $('jour_arrivee');
	var mois = $('mois_arrivee');
	var annee = $('annee_arrivee');
	var nbnuits = $('nb_nuit');
	
	var day = jour.value;
	var month = mois.value;
	var year = annee.value;	
	var today = new Date();
		
	if ( (day + month + year) == 0 ) return; // cas ou l'on modifie le nombre de nuits sans date selectionnee
	
	if ((day == 31) && (month == 2)) day = 30; // Hack demande par Accor
		
	// RESET si un des select est mis a 0 (Un seul select a zero)
	
	if ( ( (day * month * year) == 0 ) && 
		 ( ( (day != 0) && (month != 0) ) || ( (day != 0) && (year != 0) ) || ( (year != 0) && (month != 0) ) ) ) {
		
		jour.value = 0;
		mois.value = 0;
		annee.value = 0;
		_currentDate = today;
		dF.value = 0;
	} else {
		// Cas ou l'on rentre une premiere donnee (Deux selects a zero)
		if ( ((day * month) == (year * month)) && ((day * month) == 0)) {
			var month = mois.value - 1;
			
			if (day != 0) { // Select jour modifie
				month = today.getMonth();
				if ((day < today.getDate()) && (year <= today.getFullYear())) {
					month = ((today.getMonth() + 1) %12); // nextmonth
					if ((month < today.getMonth()) && (year <= today.getFullYear() )) {
						year = today.getFullYear() + 1; // nextyear
					} else {
						year = today.getFullYear();
					}
				} else {
					month = today.getMonth();
					year = today.getFullYear();
				}
			} else {
				if (month != -1) { // Select mois modifie
					if ((month < today.getMonth()) && (year <= today.getFullYear() )) {
						year = today.getFullYear() + 1; // nextyear
					} else {
						year = today.getFullYear();
					}
					day = 1;
				} else {
					// Select annee modifie
					if (year > today.getYear()) {
						month = 0;
						day = 1;
					} else {
						month = today.getMonth();
						day = today.getDay();
						year = today.getYear();
					}
				}
			}
		// Cas ou l'on ne rentre pas une premiere donnee (0 select a zero)
		} else {
			var month = mois.value - 1;
			if (from!="year") { // on ajuste le mois et le jour automatiquement au besoin
				if ((day < today.getDate()) && (month <= today.getMonth()) && (year <= today.getFullYear())) {
					month = ((today.getMonth() + 1) % 12);
					
					if ((month < today.getMonth()) && (year <= today.getFullYear() )) {
						year = today.getFullYear() + 1; // nextyear
					} else {
						year = today.getFullYear();
					}
				}
				
				if ((month <= today.getMonth()) && (year <= today.getFullYear())) {
					
					if ((month < today.getMonth()) && (year <= today.getFullYear() )) {
						year = today.getFullYear() + 1; // nextyear
					} else {
						year = today.getFullYear();
					}
				}
			}
		}
		var theDate = new Date(year, month, day);
		var currentDate = new Date();
		
		if (theDate<currentDate)  {
			theDate = currentDate;
		}
		
		
		
		if (!theDate.isInPeriod(maxDeltaJours-nov_getNbNuits())) {
			theDate  = new Date();
			theDate.setTime((new Date()).getTime() + (maxDeltaJours-nov_getNbNuits())*24*3600*1000);
		}
		
		jour.value = theDate.getDate();
		mois.value = theDate.getMonth() + 1;
		annee.value = theDate.getFullYear();
		
		dF.value = nov_numberToString(jour.value) + "../../" + nov_numberToString($('mois_arrivee').value) + "../../" + $('annee_arrivee').value;
		_currentDate = theDate;
	}
}


function nov_dateOkWithAllConstraints(date) {
  if (nov_isSameDay(date, new Date())) return true;
	if (date < new Date()) return false;
	if (!date.isInPeriod(maxDeltaJours-nov_getNbNuits())) return false;
	return true;
}

function nov_isSameDay(date1, date2) {
  return ((date1.getDate() == date2.getDate()) && 
  (date1.getMonth() == date2.getMonth()) && 
  (date1.getYear() == date2.getYear()));
}


/* /fin fonctionnel JS */

