var lang = 'FR'; // cette variable peut être modifiee dans une page <script>lang="en"</script> et sa valeur peut etre en minuscule
var minDaysSelect = 0;
var maxNuits = window.maxStay || 23;
var today = new Date();
var maxStayDate=new Date();
maxStayDate.setTime(maxStayDate.getTime() + 404*24*3600*1000);
var periodValidityStart = (today.getMonth()+1)+'/'+today.getDate()+'/'+today.getFullYear(); // MM/JJ/AAAA
var periodValidityEnd = (maxStayDate.getMonth()+1)+'/'+maxStayDate.getDate()+'/'+maxStayDate.getFullYear(); // MM/JJ/AAAA

if (window.parent) {
    lang = window.parent.lang;   
}

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 (this<new Date()) return false;
		return !parseInt((this.getTime()-(new Date()).getTime() ) / (days*(24*3600*1000)))
	}
}

// retourne vrai si la date est comprise entre dateStart et dateEnd
// dateStart et dateEnd doivent etre rentrés avec le masque : MM/JJ/AAAA
if (!Date.prototype.isBetween) {
	Date.prototype.isBetween = function(dateStart, dateEnd) { 
		if (this<new Date(dateStart)) return false; 
		if (this>new Date(dateEnd)) return false;
		return true;
	}
}

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

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

var pul_calDocumentClickFunc = null;
function pul_afficher(id) {
	pul_getCurrentDate();
	var obj=document.getElementById(id);
	if (!obj.alreadyEvent) {
		addEvent(obj, 'click', cancelClick);
		obj.alreadyEvent = true;
		pul_calDocumentClickFunc = function() {pul_afficher(id)}
	}
	
	if(obj.style.display =="block") {
		obj.style.display = "none";
		removeEvent(document, 'click', pul_calDocumentClickFunc, 10);	
	}
	else {
		obj.style.display = "block";
		setTimeout(function() {
			addEvent(document, 'click', pul_calDocumentClickFunc);
		}, 10);	
	
		if (id == "Calendrier") {
			var obj2 = document.getElementById("resaCtn"); 
			obj.style.left = obj2.offsetLeft+"px";
			obj.style.top = obj2.offsetTop + obj2.offsetHeight +"px"; //findPos(obj2)[1] -4 +"px";
		}
	}
}
function pul_ItemChoisi(val) {
	var obj=document.getElementById("ItemActuel");
	obj.innerHTML=val;
	pul_afficher("choix_nights_sublist");
}

function pul_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]);
	}
	pul_getCurrentDate();
	date = new Date();
	date.setDate(date.getDate() + minDaysSelect);
	dateString = date.dayStr() + "/" + date.monthStr()+"/" + date.getFullYear();
//	dateField = $("arrivee");
//	dateField.value = dateString;
//	dateField.value ='';
}


function pul_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(pul_addDays(dateInCalendar.getMonth(), dateInCalendar.getFullYear()));
	////
	//mois suivant 
	var nextDate = new Date(dateInCalendar);
	nextDate.setMonth(dateInCalendar.getMonth()+1);
	var nextMonth= document.getElementById("nextMonth");
	var id_2 = nextDate.getMonth()-1;
	var monthValue = months[nextDate.getMonth()];
	nextMonth.innerHTML = monthValue + ' ' + nextDate.getFullYear();
	
	var obj=document.getElementById("nextDays");
	obj.innerHTML = "";
	obj.appendChild(pul_addDays(nextDate.getMonth(), nextDate.getFullYear()));
}
function pul_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(pul_addTitleDays());
	
	var nbEmpty = d.getDay()-1;
	if (nbEmpty < 0) nbEmpty = 6;
	// Rajouter le nombre de champ vide	
	var row;
	row	 = document.createElement("tr");
	pul_addEmpty(row, nbEmpty);
	var cpt = nbEmpty;
	for (var i = 1; i <= nbjour; i++) {
		var cell = document.createElement("td");
		cell.className = "item";
		var res = (year, month, i);
		if (res == 0)
			cell.className += " itemCurrent";
		var dateOk = pul_dateOkWithAllConstraints(new Date([month+1,i,year].join('/')));
		if (!dateOk) { cell.className+=" unselectable";}
		
		
		if (res != -1) {
			var link = document.createElement("a");
			link.setAttribute("href", "javascript:;");
			link.onclick = new Function ("pul_selectDate('" + year +"', "+month+", "+i+");");
			var cellText = document.createTextNode(i);
			link.appendChild(cellText);
			cell.appendChild(link);
		} else {
			var cellText = document.createTextNode(i);
			cell.appendChild(cellText);
		}
		
		if (!dateOk) {
			link.onclick = function() {return false};
		}
		
		row.appendChild(cell);
		cpt++;
		if (cpt == 7) {
			cpt = 0;
			tblbody.appendChild(row);
			row	 = document.createElement("tr");
		}
	}
	pul_complementCell(row,cpt);
	tblbody.appendChild(row);
	// Rajouter champ vide
	table.appendChild(tblbody);
	return table;
}

function pul_dateOkWithAllConstraints(date) {
	if (date<new Date(periodValidityStart) || date>new Date(periodValidityEnd)) return false;
	var dateTest = new Date();
	dateTest.setDate(dateTest.getDate()+minDaysSelect);
	if (date<dateTest) return false;
	return true;
}

function pul_selectDate(year, month, day) {
	month++;
	document.getElementById("jour_arrivee").value = day;
	document.getElementById("mois_arrivee").value = month;
	document.getElementById("annee_arrivee").value = year.toString();
	if(document.getElementById("nb_nuit") && document.getElementById("nb_nuit").value=="")
	{
	  document.getElementById("nb_nuit").value = 1;
	}
	var currentDate = new Date();
	var selectedDate = new Date([month,day,year.toString()].join("/"));
	var delta =  + pul_getNbNuits();
	if (lang=='en') {
		//document.getElementById("arrivee").value = numberToString(month) + '/' + numberToString(day) + '/' + year;
		document.getElementById("arrivee").value = pul_numberToString(day) + '/' + pul_numberToString(month) + '/' + year;
	} else {
		document.getElementById("arrivee").value = pul_numberToString(day) + '/' + pul_numberToString(month) + '/' + year;
	}
	document.getElementById("arrivee").checkDate(); //remise en forme de la date automatique, si la date choisie est moisie
	pul_afficher("Calendrier");
}

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

function pul_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 pul_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 pul_complementCell(row, cpt) {
	for(; cpt < 7; cpt++) {
		var cell = document.createElement("td");
		var cellText = document.createTextNode("");
		cell.appendChild(cellText);
		row.appendChild(cell);		
	}
}

function pul_compareDate(year, month, day) {
 var d = new Date(year, month, day);
 
 if (d.getFullYear() == _realDate.getFullYear() && d.getMonth() == _realDate.getMonth() && d.getDate() == _realDate.getDate())
	return 0;
 if(_realDate < d)
	return 1;
 else
 return -1;
}
function pul_prevMonth() {
	_currentDate = new Date(_currentDate.getFullYear(), _currentDate.getMonth()-1);
	pul_getCurrentDate();
}
function pul_nextMonth() {
	_currentDate = new Date(_currentDate.getFullYear(), _currentDate.getMonth()+1);
	pul_getCurrentDate();
}
	 
addEvent(window, 'load', pul_initCalendar);

function pul_getNbNuits() {
	var val = $('nb_nuit').value;
	return (parseInt(val,10) || val || 1);
}


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

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

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

function pul_sel_priv(){
	pr = document.getElementById("privileges");
	pr.value=(pr.value==0)?1:0;
	im = document.getElementById("img_privilege");
	im.src = (pr.value==0)?"/imagerie/calendar/bullet_off.png":"/imagerie/calendar/bullet_on.png";
}


function pul_initDateField() {
	var dF = $('arrivee');
	
	
	dF.checkDate = function() {
		var val = $('arrivee').value.match(/(\d{2}).?(\d{2}).?(\d{4})/); // this.value.match, BUG sous IE avec le this
		if (!val) {
			$('jour_arrivee').value = '';
			$('mois_arrivee').value = '';
			$('annee_arrivee').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();

		/*//vendredi samedi dimanche
		if (!(theDate.getDay()+"").match(/^[056]$/)) {
			// on reformate automatiquement la date en choisissant un vendredi de la semaine en cours
			var dayDelta = 5-theDate.getDay();
			theDate.setDate(theDate.getDate()+dayDelta);
		}
		*/
		var dateTest = new Date();
		dateTest.setDate(dateTest.getDate()+minDaysSelect);
		if (theDate<dateTest) theDate = dateTest;
		if (theDate<new Date(periodValidityStart)) theDate = new Date(periodValidityStart);
		if (theDate>new Date(periodValidityEnd)) theDate = new Date(periodValidityEnd);
		
		
		var dateStr = theDate.toSlashString();
		this.value = dateStr;
		$('jour_arrivee').value = theDate.dayStr();
		$('mois_arrivee').value = theDate.monthStr();
		$('annee_arrivee').value = theDate.getFullYear();
		_currentDate = ($('jour_arrivee').value!='' && $('mois_arrivee').value!='' && $('annee_arrivee').value!='') ? new Date([$('mois_arrivee').value,$('jour_arrivee').value,$('annee_arrivee').value].join('/')) : new Date(); //on reinitialise le calendrier
	}
	Element.observe(dF, 'blur', dF.checkDate);
}

function pul_initFormRecherche() {
	var elm = $('choix_nights_sublist');
	if (elm) { 
		var template = elm.getElementsByClassName('template')[0];
		var parent = template.parentNode;
		template = template.parentNode.removeChild(template);
		for (var i=1; i<=maxNuits; i++) {
			var newLink = parent.appendChild(template.cloneNode(true));
			newLink.innerHTML = newLink.innerHTML.replace(/\%number\%/g, i);
			newLink.onclick = function() {
				pul_sel_nuit(pul_getText(this));
				return false;
			}
		}
	}
	var elm = $('liste_destinations');
	if (elm) {
		var links = elm.getElementsByTagName('a');
		for (var i=0; i<links.length; i++) {
			links[i].onclick = function() {
				pul_sel_dest(pul_getText(this),this);
				return false;
			}
		}
	}
	
	pul_initDateField();
	
}

addEvent(window, 'load', pul_initFormRecherche);
	
function pul_checkRechercheForm(form) {
	if ($('search-error')){
	Event.observe($('search-error'), 'click', function(event) {
		$('search-error').hide();
	});}
	
	$('arrivee').checkDate();
	var jour = $('jour_arrivee').value;
	var mois = $('mois_arrivee').value;
	var annee = $('annee_arrivee').value;
	
	var erreur = false;
	if (jour != "" && mois != "" && annee != ""){
		var dateCheck = new Date(mois+"/"+jour+"/"+annee);
		if (dateCheck =="Invalid Date") {
			erreur = true;
		}
	}
	
	if ($('liste_destinations') && $('liste_destinations').value=='0'){
		erreur = true;
	}
	
	if (erreur && $('search-error')){
		Element.show('search-error');
	}
	return !erreur;
}
	
	
	
/* /fin fonctionnel JS */
