/* */ //https://book.travelbookgroup.com/premium/index.html?id_stile=18418&tst_prntz=si&headvar=ok&lingua_int=eng&id_albergo=24092&dc=6162 if (true) { var type = 'single' console.log("loaded"); let hotelStats = [ //change these values to correspond to the correct values for the booking engines - style/albergo/6162 18418, 24092, 2721 ]; if (typeof booking_w != 'undefined') { //if the WP JS booking_w does not exist then default to the above type = booking_w.type; if (type == 'single') { hotelStats[0] = booking_w.style; hotelStats[1] = booking_w.id; hotelStats[2] = booking_w.dc; } } //https://book.travelbookgroup.com/premium/group_index.html?id_stile=18336&tst_prntz=si&headvar=ok&lingua_int=eng&id_gruppo=19499&dc_gruppo=2721 let maxSize = 30; let isStartDate = true; let nights = 0; let atime; let btime; let middleCells = []; let isBookingWidgetShown = false; let dayName = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]; let monthNames = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; let dateElement = document.createElement("h4"); dateElement.textContent = "Please Pick An Arrival Date"; dateElement.id = "calendarDateString"; let nightElement = document.createElement("h4"); nightElement.textContent = ""; nightElement.id = "calendarNightString"; let confirmButton = document.createElement("button"); confirmButton.textContent = "Confirm?"; confirmButton.id = "confirmButton"; confirmButton.addEventListener("click", (e) => { isBookingWidgetShown = false; changeContainerVisibility(isBookingWidgetShown); confirm(); e.stopPropagation(); }); let isConfirmButton = false; let dateChanger = document.getElementsByClassName("datePickerColumn"); for (let i = 0; i < dateChanger.length; i++) { dateChanger[i].addEventListener("click", function(event) { isBookingWidgetShown = !isBookingWidgetShown; changeContainerVisibility(isBookingWidgetShown); event.stopPropagation(); }); dateChanger[i].style.cursor = "pointer"; } let calendarContainer = document.getElementById("calendarContainer"); calendarContainer.addEventListener("click", (e) => { e.stopPropagation(); }); let container = document.getElementById("calendarContent"); let title = document.getElementById("calendarTitle"); let backButton = document.createElement("button"); backButton.textContent = "<"; backButton.className = "hasHover calendarButton"; backButton.addEventListener("click", () => { changeMonth(-1); }); document.getElementById("calendarBackButton").appendChild(backButton); let nextButton = document.createElement("button"); nextButton.textContent = ">"; nextButton.className = "hasHover calendarButton"; nextButton.addEventListener("click", () => { changeMonth(1); }); document.getElementById("calendarNextButton").appendChild(nextButton); getTodaysDate = () => { let text = (currentDay < 10 ? "0" + currentDay : currentDay) + "-"; text += ((currentMonth + 1) < 10 ? "0" + (currentMonth + 1) : (currentMonth + 1)) + "-" + currentYear; return text; } getTodaysDatePlusOne = () => { let maxDays = getDaysInMonth(currentYear, currentMonth + 1); let newDay = currentDay; let newMonth = currentMonth; let newYear = currentYear; newDay++; if (newDay > maxDays) { newDay = 1; newMonth++; if (newMonth > 11) { newMonth = 0; newYear++; } } let text = (newDay < 10 ? "0" + newDay : newDay) + "-"; text += ((newMonth + 1) < 10 ? "0" + (newMonth + 1) : (newMonth + 1)) + "-" + newYear; return text; } document.addEventListener("click", () => { if (isBookingWidgetShown) closeCalendarWindow(); }); closeCalendarWindow = () => { changeContainerVisibility(false); isBookingWidgetShown = false; if (isConfirmButton) confirm(); } changeMonth = (index) => { calendar.index += index; container.removeChild(currentTable); container.removeChild(dateElement); container.removeChild(nightElement); if (isConfirmButton) container.removeChild(confirmButton); currentTable = calendar.tables[calendar.index]; container.appendChild(currentTable); container.appendChild(dateElement); container.appendChild(nightElement); if (isConfirmButton) container.appendChild(confirmButton); changeCalendarDetails(index); } changeCalendarDetails = (index) => { let newIndex = calendar.monthNameIndex += index; if (newIndex < 0) { newIndex = monthNames.length - 1; calendar.yearIndex--; } else if (newIndex >= monthNames.length) { newIndex = 0; calendar.yearIndex++; } calendar.monthNameIndex = newIndex; title.textContent = monthNames[calendar.monthNameIndex] + " " + calendar.yearIndex; if (calendar.index === 0) { backButton.style.visibility = "hidden"; } else if (calendar.index === maxSize - 1) { nextButton.style.visibility = "hidden"; } else { backButton.style.visibility = "visible"; nextButton.style.visibility = "visible"; } } //gets all months for maxSize and returns them to the calendar object getMonths = () => { let month = currentMonth; let year = currentYear; let months = []; for (let i = 0; i < maxSize; i++) { let m = { index: month, maxDays: getDaysInMonth(year, month), dayNum: getDayNum(year, month) } month++; if (month == 12) { month = 0 year++; } months.push(m); } return months; } getDaysInMonth = (year, month) => { return new Date(year, month + 1, 0).getDate(); } getDayNum = (year, month) => { let firstDate = monthNames[month] + " " + 1 + " " + year; //7 1 2019 let temp = new Date(firstDate).toDateString(); let firstDay = temp.substring(0, 3); return dayName.indexOf(firstDay); } getTomorrow = () => { let maxDays = getDaysInMonth(currentYear, currentMonth + 1); let newDay = currentDay; let newMonth = currentMonth; let newYear = currentYear; newDay++; if (newDay > maxDays) { newDay = 1; newMonth++; if (newMonth > 11) { newMonth = 0; newYear++; } } return [newDay, newMonth, newYear]; } createTables = () => { let list = []; for (let i = 0; i < maxSize; i++) { list.push(createTable(calendar.months[i].dayNum, calendar.months[i].maxDays, (i === 0 ? true : false))); } return list; } createTable = (dayNum, days, boo) => { let table = document.createElement("table"); let tr = document.createElement("tr"); //first row for the day letter for (let i = 0; i < 7; i++) { let td = document.createElement("td"); td.textContent = "SMTWTFS" [i]; td.className = "weekday"; tr.appendChild(td); } table.appendChild(tr); let count = 1 - dayNum; while (count < days) { let tr = document.createElement("tr"); for (let i = 0; i < 7; i++) { if (count > 0) { let inactive = false; if (boo && count < currentDay) inactive = true; const td = document.createElement("td"); td.textContent = count; if (!inactive) { const c = count; td.className = "activeDate"; td.addEventListener("click", () => { if (isStartDate) changeStartDate(td); else changeEndDate(td); }); td.addEventListener("mouseenter", () => { if (!isStartDate) { changeLabel(td); } }); td.addEventListener("mouseleave", () => { if (!isStartDate) { changeLabel(null); } }) } else { td.className = "inactiveDate"; } tr.appendChild(td); } else { let td = document.createElement("td"); td.textContent = ""; tr.appendChild(td); } count++; if (count > days) break; } table.appendChild(tr); } return table; } resetChoice = () => { if (calendar.startDate != null) { calendar.startDate.removeAttribute("id"); } if (calendar.endDate != null) { calendar.endDate.removeAttribute("id"); } calendar.checkIn = ""; calendar.checkOut = ""; dateElement.textContent = "Please Pick An Arrival Date"; nightElement.textContent = ""; resetMiddleCells(); if (isConfirmButton) container.removeChild(confirmButton); isConfirmButton = false; } changeStartDate = (td) => { resetChoice(); calendar.checkIn = "" + (td.textContent < 10 ? "0" + td.textContent : td.textContent) + "/" + ((calendar.monthNameIndex + 1) < 10 ? "0" + (calendar.monthNameIndex + 1) : (calendar.monthNameIndex + 1)) + "/" + calendar.yearIndex; calendar.startDate = td; dateElement.textContent = calendar.checkIn + " - "; td.id = "activeCellStart"; isStartDate = false; } changeEndDate = (td) => { calendar.checkOut = "" + (td.textContent < 10 ? "0" + td.textContent : td.textContent) + "/" + ((calendar.monthNameIndex + 1) < 10 ? "0" + (calendar.monthNameIndex + 1) : (calendar.monthNameIndex + 1)) + "/" + calendar.yearIndex; if (!checkDates(calendar.checkIn, calendar.checkOut)) { changeStartDate(td); } else { calendar.endDate = td; dateElement.textContent = calendar.checkIn + " - " + calendar.checkOut; td.id = "activeCellEnd"; isStartDate = true; isConfirmButton = true; container.appendChild(confirmButton); } } checkDates = (checkIn, checkOut) => { if (checkIn === checkOut) return false; if (checkOut === "") return false; let sDay = checkIn.substring(0, 2); let sMonth = checkIn.substring(3, 5); let sYear = checkIn.substring(6, 10); let fDay = checkOut.substring(0, 2); let fMonth = checkOut.substring(3, 5); let fYear = checkOut.substring(6, 10); atime = new Date("" + sYear + "-" + sMonth + "-" + sDay + "T08:03:22Z"); btime = new Date("" + fYear + "-" + fMonth + "-" + fDay + "T08:03:22Z"); nights = findOutNights(atime, btime); if (atime < btime) return true; return false; } findOutNights = (atime, btime) => { let delta_time = Math.abs(btime - atime); if (delta_time === 0) { return 1; } else { return delta_time / 86400000; } } changeLabel = (td) => { let checkOut = ""; if (td != null) checkOut = "" + (td.textContent < 10 ? "0" + td.textContent : td.textContent) + "/" + ((calendar.monthNameIndex + 1) < 10 ? "0" + (calendar.monthNameIndex + 1) : (calendar.monthNameIndex + 1)) + "/" + calendar.yearIndex; if (checkDates(calendar.checkIn, checkOut)) { dateElement.textContent = calendar.checkIn + " - " + checkOut; nightElement.textContent = "(" + nights + " night stay)"; changeMiddleCells(calendar.startDate, td); } else { dateElement.textContent = calendar.checkIn + " - "; nightElement.textContent = ""; resetMiddleCells(); } } changeMiddleCells = (start, end) => { let startIndex = -1; for (let i = 0; i < calendar.tables.length; i++) { if (start.parentElement.parentElement === calendar.tables[i]) { startIndex = i; break; } } resetMiddleCells(); let toDo = true; let startFound = false; let endFound = false; while (toDo) { let list = calendar.tables[startIndex].getElementsByClassName("activeDate"); for (let i = 0; i < list.length; i++) { if (startFound) { if (list[i] === end) { endFound = true; break; } else { middleCells.push(list[i]); } } else { if (list[i] === start) startFound = true; } } if (startFound && endFound) { toDo = false; } else { startIndex++; } } for (let i = 0; i < middleCells.length; i++) { middleCells[i].className = "middleCells"; } } resetMiddleCells = () => { for (let i = 0; i < middleCells.length; i++) { middleCells[i].className = "activeDate"; } middleCells = []; } changeContainerVisibility = (boo) => { if (boo) { calendarContainer.style.transform = "scale(1)"; if (calendar.index != 0) backButton.style.visibility = "visible"; } else { calendarContainer.style.transform = "scale(0)"; backButton.style.visibility = "hidden"; } } confirm = () => { let datePieces1 = calendar.checkIn.split("/"); let datePieces2 = calendar.checkOut.split("/"); updateDates(new Date(datePieces1[2], datePieces1[1] - 1, datePieces1[0], 0, 0, 0, 0), new Date(datePieces2[2], datePieces2[1] - 1, datePieces2[0], 0, 0, 0, 0)); checkIn = calendar.checkIn; checkOut = calendar.checkOut; } let today; let currentDay; let currentMonth; let currentYear; let tomorrow; let calendar; let currentTable; let checkIn; let checkOut; let checkInNumber; let checkInMonth; let checkInDay let checkOutNumber; let checkOutMonth; let checkOutDay; setup = () => { today = new Date(); currentDay = today.getDate(); currentMonth = today.getMonth(); currentYear = today.getFullYear(); tomorrow = new Date(new Date().getTime() + 24 * 60 * 60 * 1000); checkInNumber = document.getElementById("arrivalDateNumber"); checkInMonth = document.getElementById("arrivalDateMonth"); checkInDay = document.getElementById("arrivalDateDay"); checkOutNumber = document.getElementById("departureDateNumber"); checkOutMonth = document.getElementById("departureDateMonth"); checkOutDay = document.getElementById("departureDateDay"); updateDates(today, tomorrow); calendar = { months: getMonths(), index: 0, checkIn: "", checkOut: "", monthNameIndex: currentMonth, yearIndex: currentYear, today } calendar.tables = createTables(); currentTable = calendar.tables[0]; container.appendChild(currentTable); container.appendChild(dateElement); container.appendChild(nightElement); changeMonth(0); checkIn = getTodaysDate(); checkOut = getTodaysDatePlusOne(); } updateDates = (first, last) => { checkInNumber.textContent = first.getDate(); checkInMonth.textContent = monthNames[first.getMonth()].toUpperCase().substring(0, 3); checkInDay.textContent = dayName[first.getDay()].toUpperCase(); checkOutNumber.textContent = last.getDate(); checkOutMonth.textContent = monthNames[last.getMonth()].toUpperCase().substring(0, 3); checkOutDay.textContent = dayName[last.getDay()].toUpperCase(); } setup(); let checkButton = document.getElementById(`dateAvailabilityButton`); checkButton.addEventListener("click", () => check()); checkButton.style.cursor = "pointer"; check = () => { startURL(); } startURL = () => { let startDate = checkIn; let endDate = checkOut; startYear = startDate.substring(6, 10); startMonth = startDate.substring(3, 5); startDay = startDate.substring(0, 2); endYear = endDate.substring(6, 10); endMonth = endDate.substring(3, 5); endDay = endDate.substring(0, 2); atime = new Date("" + startYear + "-" + startMonth + "-" + startDay + "T08:03:22Z"); btime = new Date("" + endYear + "-" + endMonth + "-" + endDay + "T08:03:22Z"); let nights = findOutNights(); startDay = splitZero(startDay); startMonth = splitZero(startMonth); endDay = splitZero(endDay); endMonth = splitZero(endMonth); ////https://book.travelbookgroup.com/premium/group_index.html?id_stile=18336&tst_prntz=si&headvar=ok&lingua_int=eng&id_gruppo=19499&dc_gruppo=2721 console.log(type); let url = ''; if (type == 'group') { url = `https://book.travelbookgroup.com/premium/group_index2.html?tot_camere=${1}&tot_adulti=${noAdults}&tot_bambini=${noChildren}&gg=${startDay}&mm=${startMonth}&aa=${startYear}&ggf=&mmf=&aaf=¬ti_1=${nights}&id_stile=${hotelStats[0]}&lingua_int=eng&id_gruppo=${hotelStats[1]}&dc_gruppo=${hotelStats[2]}&countryCode=GB&gps_latitude=&gps_longitude=`; } else if (type == 'single') { url = `https://book.travelbookgroup.com/premium/index2.html?tot_camere=${1}&tot_adulti=${noAdults}&tot_bambini=${noChildren}&gg=${startDay}&mm=${startMonth}&aa=${startYear}&ggf=&mmf=&aaf=¬ti_1=${nights}&id_stile=${hotelStats[0]}&lingua_int=eng&id_albergo=${hotelStats[1]}&dc=${hotelStats[2]}&countryCode=GB&gps_latitude=&gps_longitude=`; } window.open(url); } findOutNights = () => { let delta_time = Math.abs(btime - atime); if (delta_time === 0) { return 1; } else { return delta_time / 86400000; } } splitZero = string => { if (string.substring(0, 1) == 0) { let newDay = string.substring(1, 2); return newDay; } else { return string; } } let adultPicker = document.getElementById("adultPicker"); let adultRow = adultPicker.getElementsByClassName("flex-row")[0]; let adultIcons = adultRow.getElementsByClassName("svg-circle"); let adultNumber = adultRow.getElementsByTagName("h3")[0]; let noAdults = 2; let childPicker = document.getElementById("childPicker"); let childRow = childPicker.getElementsByClassName("flex-row")[0]; let childIcons = childRow.getElementsByClassName("svg-circle"); let childNumber = childRow.getElementsByTagName("h3")[0]; let noChildren = 0; adultNumberChanger = (index) => { if (noAdults == 1 && index == -1) return; noAdults += index; adultNumber.textContent = noAdults; } for (let index = 0; index < adultIcons.length; index++) { console.log("hello", adultIcons[index]); adultIcons[index].addEventListener("click", () => { adultNumberChanger(index == 0 ? -1 : 1); }) } childNumberChanger = (index) => { if (noChildren == 0 && index == -1) return; noChildren += index; childNumber.textContent = noChildren; } for (let index = 0; index < childIcons.length; index++) { childIcons[index].addEventListener("click", () => { childNumberChanger(index == 0 ? -1 : 1); }) } }