';
}
this.el.innerHTML = html;
if (opts.bound) {
if(opts.field.type !== 'hidden') {
sto(function() {
opts.trigger.focus();
}, 1);
}
}
if (typeof this._o.onDraw === 'function') {
var self = this;
sto(function() {
self._o.onDraw.call(self);
}, 0);
}
},
adjustPosition: function()
{
var field, pEl, width, height, viewportWidth, viewportHeight, scrollTop, left, top, clientRect;
if (this._o.container) return;
this.el.style.position = 'absolute';
field = this._o.trigger;
pEl = field;
width = this.el.offsetWidth;
height = this.el.offsetHeight;
viewportWidth = window.innerWidth || document.documentElement.clientWidth;
viewportHeight = window.innerHeight || document.documentElement.clientHeight;
scrollTop = window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop;
if (typeof field.getBoundingClientRect === 'function') {
clientRect = field.getBoundingClientRect();
left = clientRect.left + window.pageXOffset;
top = clientRect.bottom + window.pageYOffset;
} else {
left = pEl.offsetLeft;
top = pEl.offsetTop + pEl.offsetHeight;
while((pEl = pEl.offsetParent)) {
left += pEl.offsetLeft;
top += pEl.offsetTop;
}
}
// default position is bottom & left
if ((this._o.reposition && left + width > viewportWidth) ||
(
this._o.position.indexOf('right') > -1 &&
left - width + field.offsetWidth > 0
)
) {
left = left - width + field.offsetWidth;
}
if ((this._o.reposition && top + height > viewportHeight + scrollTop) ||
(
this._o.position.indexOf('top') > -1 &&
top - height - field.offsetHeight > 0
)
) {
top = top - height - field.offsetHeight;
}
this.el.style.left = left + 'px';
this.el.style.top = top + 'px';
},
/**
* render HTML for a particular month
*/
render: function(year, month)
{
var opts = this._o,
now = new Date(),
days = getDaysInMonth(year, month),
before = new Date(year, month, 1).getDay(),
data = [],
row = [];
setToStartOfDay(now);
if (opts.firstDay > 0) {
before -= opts.firstDay;
if (before < 0) {
before += 7;
}
}
var previousMonth = month === 0 ? 11 : month - 1,
nextMonth = month === 11 ? 0 : month + 1,
yearOfPreviousMonth = month === 0 ? year - 1 : year,
yearOfNextMonth = month === 11 ? year + 1 : year,
daysInPreviousMonth = getDaysInMonth(yearOfPreviousMonth, previousMonth);
var cells = days + before,
after = cells;
while(after > 7) {
after -= 7;
}
cells += 7 - after;
for (var i = 0, r = 0; i < cells; i++)
{
var day = new Date(year, month, 1 + (i - before)),
isSelected = isDate(this._d) ? compareDates(day, this._d) : false,
isToday = compareDates(day, now),
isEmpty = i < before || i >= (days + before),
dayNumber = 1 + (i - before),
monthNumber = month,
yearNumber = year,
isStartRange = opts.startRange && compareDates(opts.startRange, day),
isEndRange = opts.endRange && compareDates(opts.endRange, day),
isInRange = opts.startRange && opts.endRange && opts.startRange < day && day < opts.endRange,
isDisabled = (opts.minDate && day < opts.minDate) ||
(opts.maxDate && day > opts.maxDate) ||
(opts.disableWeekends && isWeekend(day)) ||
(opts.disableDayFn && opts.disableDayFn(day));
if (isEmpty) {
if (i < before) {
dayNumber = daysInPreviousMonth + dayNumber;
monthNumber = previousMonth;
yearNumber = yearOfPreviousMonth;
} else {
dayNumber = dayNumber - days;
monthNumber = nextMonth;
yearNumber = yearOfNextMonth;
}
}
var dayConfig = {
day: dayNumber,
month: monthNumber,
year: yearNumber,
isSelected: isSelected,
isToday: isToday,
isDisabled: isDisabled,
isEmpty: isEmpty,
isStartRange: isStartRange,
isEndRange: isEndRange,
isInRange: isInRange,
showDaysInNextAndPreviousMonths: opts.showDaysInNextAndPreviousMonths
};
row.push(renderDay(dayConfig));
if (++r === 7) {
if (opts.showWeekNumber) {
row.unshift(renderWeek(i - before, month, year));
}
data.push(renderRow(row, opts.isRTL));
row = [];
r = 0;
}
}
return renderTable(opts, data);
},
isVisible: function()
{
return this._v;
},
show: function()
{
if (!this._v) {
removeClass(this.el, 'is-hidden');
this._v = true;
this.draw();
if (this._o.bound) {
addEvent(document, 'click', this._onClick);
this.adjustPosition();
}
if (typeof this._o.onOpen === 'function') {
this._o.onOpen.call(this);
}
}
},
hide: function()
{
var v = this._v;
if (v !== false) {
if (this._o.bound) {
removeEvent(document, 'click', this._onClick);
}
this.el.style.position = 'static'; // reset
this.el.style.left = 'auto';
this.el.style.top = 'auto';
addClass(this.el, 'is-hidden');
this._v = false;
if (v !== undefined && typeof this._o.onClose === 'function') {
this._o.onClose.call(this);
}
}
},
/**
* GAME OVER
*/
destroy: function()
{
this.hide();
removeEvent(this.el, 'mousedown', this._onMouseDown, true);
removeEvent(this.el, 'touchend', this._onMouseDown, true);
removeEvent(this.el, 'change', this._onChange);
if (this._o.field) {
removeEvent(this._o.field, 'change', this._onInputChange);
if (this._o.bound) {
removeEvent(this._o.trigger, 'click', this._onInputClick);
removeEvent(this._o.trigger, 'focus', this._onInputFocus);
removeEvent(this._o.trigger, 'blur', this._onInputBlur);
}
}
if (this.el.parentNode) {
this.el.parentNode.removeChild(this.el);
}
}
};
return Pikaday;
}));
// inzializza gli elementi con le diverse lingue (javascript)
var mesiIT = {
previousMonth : 'Mese Precedente',
nextMonth : 'Mese Seguente',
months : ['Gennaio','Febbraio','Marzo','Aprile','Maggio','Giugno','Luglio','Agosto','Settembre','Ottobre','Novembre','Dicembre'],
weekdays : ['Domenica','Luned#236','Marted#236','Mercoled#236','Gioved#236','Venerd#236','Sabato'],
weekdaysShort : ['Dom','Lun','Mar','Mer','Gio','Ven','Sab']
}
var mesiEN = {
previousMonth : 'Previous Month',
nextMonth : 'Next Month',
months : ['January','February','March','April','May','June','July','August','September','October','November','December'],
weekdays : ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'],
weekdaysShort : ['Sun','Mon','Tue','Wed','Thu','Fri','Sat']
}
var mesiFR = {
previousMonth : 'Précédent',
nextMonth : 'Suivant',
months : ['Janvier','Février','Mars','Avril','Mai','Juin','Juillet','Août','Septembre','Octobre','Novembre','Décembre'],
weekdays : ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'],
weekdaysShort : ['Dim.','Lun.','Mar.','Mer.','Jeu.','Ven.','Sam.']
}
var mesiDE = {
previousMonth : '#x3c;zurück',
nextMonth : 'Vor#x3e;',
months : ['Januar','Februar','März','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember'],
weekdays : ['Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag'],
weekdaysShort : ['So','Mo','Di','Mi','Do','Fr','Sa']
}
var mesiES = {
previousMonth : '#x3c;Ant',
nextMonth : 'Sig#x3e;',
months : ['Enero','Febrero','Marzo','Abril','Mayo','Junio','Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre'],
weekdays : ['Domingo','Lunes','Martes','Miércoles','Jueves','Viernes','Sábado'],
weekdaysShort : ['Dom','Lun','Mar','Mié','Juv','Vie','Sáb']
}
var mesiNL = {
previousMonth : 'Previous Month',
nextMonth : 'Next Month',
months : ['Januari', 'Februari', 'Maart', 'April', 'Mei', 'Juni','Juli', 'Augustus', 'September', 'Oktober', 'November', 'December'],
weekdays : ['Zondag', 'Maandag', 'Dinsdag', 'Woensdag', 'Donderdag', 'Vrijdag', 'Zaterdag'],
weekdaysShort : ['zon', 'maa', 'din', 'woe', 'don', 'vri', 'zat']
}
var nomiMesi_i18n = mesiEN; // variabile che contiene la lingua del datepicker, che viene usata dallo script richiamato qui sotto
function pd_selectChild(numberChildren,maxChildren)
{
for(var i = 1; i <= maxChildren; i++) {
if(numberChildren == 0)
{document.getElementById("pd_allChildren").style.display = "none";}
else
{
document.getElementById("pd_allChildren").style.display = "";
if(i <= numberChildren)
{document.getElementById("pd_showChild_"+i).style.display = "";}
else
{document.getElementById("pd_showChild_"+i).style.display = "none";}
}
}
}
function pd_selectChildMultiRoom(numberChildren,maxChildren,room)
{
for(var i = 1; i <= maxChildren; i++) {
if(numberChildren <= 0)
{
document.getElementById("pd_roomChildren"+room).style.display = "none";
}
else
{
document.getElementById("pd_roomChildren"+room).style.display = "";
if(i <= numberChildren)
{document.getElementById("pd_showChild_"+room+'_'+i).style.display = "";}
else
{document.getElementById("pd_showChild_"+room+'_'+i).style.display = "none";}
}
}
}
document.write(' ');
// funzioni personalizzate per datepicker standalone del booking engine da distribuire
var lang_ir_dateMask = "MM/DD/YYYY"; // date mask
function pd_set_datepickerCheckIN(){ // setta il secondo datepicker (checkIn) in base a cià che è stato scelto nel primo datepicker (checkOut). la funzione viene richiamta da var pickerCheckIn = new Pikaday({.... (vedi sotto)
var dataCheckIn = document.getElementById("pd_checkIn").value;
var dataCheckOut = document.getElementById("pd_checkOut").value;
if(dataCheckOut != 'undefined' && dataCheckOut != "" && dataCheckOut != 0){ // questa funzione si attiva solo se dataCheckOut è definita, altrimenti non serve a nulla
var a = moment(dataCheckIn,lang_ir_dateMask); // memorizza le date in un formato generato da moment, per poterle poi confrontare e capire se la data di inizio è maggiore della data di fine mediante "a.diff(b)"
var b = moment(dataCheckOut,lang_ir_dateMask);
// alert(a.diff(b));
if (a.diff(b) >= 0) { // controlla se la data di arrivo è maggiore di quella di arrivo - ovvero se ci sono dei giorni di differenza con a.diff(b) - lo fa utilizzando moment.js
// alert("La data di inizio soggiorno deve essere anteriore a quella di fine soggiorno!");
// document.getElementById("pd_checkOut").value = "";
// inserisce di default la data del giorno dopo:
pd_dataDomani = moment(dataCheckIn,lang_ir_dateMask).add("days", 1).format(lang_ir_dateMask);
document.getElementById("pd_checkOut").value = pd_dataDomani;
}
} else if (dataCheckOut == 'undefined' || dataCheckOut == "" || dataCheckOut != 0) { // se data checkout è vuota, aggiunge automaticamente la data di domani
pd_dataDomani = moment(dataCheckIn,lang_ir_dateMask).add("days", 1).format(lang_ir_dateMask);
document.getElementById("pd_checkOut").value = pd_dataDomani;
}
}
function pd_set_datepickerCheckOUT(){ // setta il secondo datepicker (checkIn) in base a ciò che è stato scelto nel primo datepicker (checkOut)
var dataCheckIn = document.getElementById("pd_checkIn").value;
// var dataCheckOut = document.getElementById("pd_checkOut").value;
if(dataCheckIn != 'undefined' && dataCheckIn != "" && dataCheckIn != 0){ // questa funzione si attiva solo se dataCheckIn è definita, altrimenti non serve a nulla
var dataGiornoDopo = moment(dataCheckIn,lang_ir_dateMask).add("days", 1).format('YYYY/MM/DD'); // incrementa la data di un giorno e la inverte per passarla al Pikaday (utilizzo le funzioni dello script "moment.js")
var arrayData = dataGiornoDopo.split('/'); // separa ogni elemento della data
pd_pickerCheckOut.setMinDate(new Date(arrayData[0], arrayData[1]-1, arrayData[2])); // la numerazione del mese parte da 0 (gennaio= 0, feb=1 ecc) per questo metto arrayData[1]-1
pd_pickerCheckOut.gotoDate(new Date(arrayData[0], arrayData[1]-1, arrayData[2]));
}
}
var pd_pickerCheckIn = new Pikaday({
i18n: nomiMesi_i18n,
field: document.getElementById("pd_checkIn"),
format: lang_ir_dateMask,
minDate: new Date(),
maxDate: new Date('2020/12/31'),
onSelect: function() {
// dopo la selezione della data, lancia la funzione che controlla se non si sia impostata una data minore nel campo "checkOut". In caso lo svuota.
pd_set_datepickerCheckIN();
// l'evento "changedate" è un evento personalizzato, scatenato da pickaday in js puro e intercettato da jquery per evitare conflitti e
// malfunzionamenti con le varie funzioni associate all'evento "change" degli input delle date */
var eventChange = new Event('changedate'); // dichiaro l'evento "change" per scatenarlo successivamente (va dichiarato ogni volta, altrimenti non funziona)
document.getElementById("pd_checkIn").dispatchEvent(eventChange); // scateno l'evento changedate in js puro (serve per quando si calcola il prezzo in asincrono con jquery)
}
});
// prima ricava la data di domani, appoggiandosi a moment.js
var pd_dataDomani = moment().add("days", 1).format('YYYY/MM/DD');
var pd_pickerCheckOut = new Pikaday({
i18n: nomiMesi_i18n,
field: document.getElementById("pd_checkOut"),
format: lang_ir_dateMask,
minDate: new Date(pd_dataDomani),
maxDate: new Date('2020/12/31'),
onSelect: function() {
// l'evento "changedate" è un evento personalizzato, scatenato da pickaday in js puro e intercettato da jquery per evitare conflitti e
// malfunzionamenti con le varie funzioni associate all'evento "change" degli input delle date */
var eventChange = new Event('changedate'); // dichiaro l'evento "change" per scatenarlo successivamente (va dichiarato ogni volta, altrimenti non funziona)
document.getElementById("pd_checkOut").dispatchEvent(eventChange); // scateno l'evento changedate in js puro (serve per quando si calcola il prezzo in asincrono con jquery)
}
});