var maxNuits=23; 
var maxDeltaJours=405;

Event.observe(window, 'load', onLoadEvent, false);

function onLoadEvent() {
	pul_initLang();
	pul_initCalendar();
	pul_initFormRecherche();
}

function pul_initLang(){
	var item = $$('html')[0];
	lang = 'en';
	if(item.getAttribute('xml:lang')) lang = item.getAttribute('xml:lang');
	else if(item.getAttribute('lang')) lang = item.getAttribute('lang');
	else lang = 'en';
}

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 (pul_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;

function pul_afficher(id) {
	pul_getCurrentDate();
	var obj=document.getElementById(id);
	if (!obj.alreadyEvent) {
		addEvent(obj, 'click', cancelClick);
		obj.alreadyEvent = true;
		calDocumentClickFunc = function() {pul_afficher(id)}
	}
	
	if(obj.style.display =="block") {
		obj.style.display = "none";
		removeEvent(document, 'click', calDocumentClickFunc, 10);	
	}
	else {
		obj.style.display = "block";
		setTimeout(function() {
			addEvent(document, 'click', 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]);
	}
}

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 dateOk = pul_dateOkWithAllConstraints(new Date([month+1,i,year].join('/')));
		if (!dateOk) { cell.className+=" unselectable";}
		var res = (year, month, i);
		if (res == 1)
			cell.className += " itemNext";
		else if (res == 0)
			cell.className += " itemCurrent";
		
		
		if (res != -1) {
			var link = document.createElement("a");
			link.setAttribute("href", "javascript:;");
			if (dateOk) {
				link.onclick = new Function ("pul_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");
		}
	}
	pul_complementCell(row,cpt);
	tblbody.appendChild(row);
	// Rajouter champ vide
	table.appendChild(tblbody);
	return table;
}

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 (!selectedDate.isInPeriod(maxDeltaJours-pul_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("arrivee").value = pul_numberToString(month) + '/' + pul_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;
	}
	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();
}
	 
function pul_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 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/fichehotel/pul/calendar/bullet_off.png":"/imagerie/fichehotel/pul/calendar/bullet_on.png";
}

function pul_initDateField() {
	var dF = $('arrivee');

	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_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();
		if (theDate<currentDate) theDate = currentDate;
		if (!theDate.isInPeriod(maxDeltaJours-pul_getNbNuits())) {
			theDate  = new Date();
			theDate.setTime((new Date()).getTime()+ maxDeltaJours*24*3600*1000);
		}
		var dateStr = theDate.toSlashString();
		dF.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_dateOkWithAllConstraints(date) {
  if (pul_isSameDay(date, new Date())) return true;
	if (date < new Date()) return false;
	if (!date.isInPeriod(maxDeltaJours-pul_getNbNuits())) return false;
	return true;
}

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

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() {
				sel_nuit(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() {
				sel_dest(getText(this),this);
				return false;
			}
		}
	}
	
	pul_initDateField();
	
}

	
function pul_checkRechercheForm(form) {
	if ($('search-error'))
	{
  	Event.observe(
  	  $('search-error'),
  	  'click',
  	  function(event)
  	  {
    	  Event.stop(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 */
