!function(u,t){"use strict";var c,o="YYYY-MM-DD",h=86400,d=loftoceanRoomReservationUtilsData.i18nText;function m(t){return void 0===t||t.getTime||(t=new Date),Math.floor(t.getTime()/h/1e3)*h}c=m(""),t.loftoceanRoomReservationUtils=function(t){this.setData(t),this.setDisabledDates()},t.loftoceanDatePickerValidate={instance:!1,defaultDates:!1,checkDefaultDates:function(t,a){if(!1!==this.defaultDates)return this.defaultDates;for(var e=0,i=0,n=t.clone(),s=null;e++<365;){var r=this.checkDate(n,{startDate:null,endDate:null});if(!r[0]||r[1]&&r[1].split(" ").includes("checkin-unavailable"))n.add("1","day");else{i=0,s=n.clone().add("1","day");for(var l={startDate:n,endDate:null};i++<365;){var u=this.checkDate(s,l);if(!(!u[0]||u[1]&&u[1].split(" ").includes("checkout-unavailable")))return this.defaultDates={checkin:n,checkout:s},this.defaultDates;s.add("1","day")}n.add("1","day")}}return this.defaultDates={checkin:t,checkout:a},this.defaultDates},checkDate:function(t,a){if(0==this.instance&&(this.instance=new loftoceanRoomReservationUtils({unavailableDates:loftoceanRoomReservationUtilsData.allRoomsUnavailableDates,priceList:{}})),t=t.format(o),void 0===a||null===a.startDate&&null!==a.endDate)return[!0,"",""];var e=void 0!==a&&null!==a.startDate&&null===a.endDate,i=new Date(t),n="day"+i.getDay(),s=m(i),r=[],l=[],t=!1,i=this.instance.getMatchedBookingRule(s),t=e&&this.instance.getMatchedBookingRule(m(new Date(a.startDate.format(o))));return!1!==i&&(i.checkin&&i.checkin.length&&i.checkin.includes(n)&&(r.push("no-checkin","checkin-unavailable"),l.push(d.noCheckin)),e?i.checkout&&i.checkout.length&&i.checkout.includes(n)&&(r.push("no-checkout","checkout-unavailable"),l.push(d.noCheckout)):i.in_advance&&((i=i.in_advance).min&&(s-c)/hi.max&&(r.push("checkin-unavailable"),void 0!==a&&null!==a.startDate&&null===a.endDate||r.push("disabled")))),!1!==t&&e&&t.stay_length&&(e=m(new Date(a.startDate.format(o))),a="day"+a.startDate.day(),et[a].max&&(r.push("off","disabled","maximal-stay-unavailable","checkout-unavailable"),l.push(t[a].max+d.maximum))))),[!0,r.length?r.join(" "):"",l.length?l.join(", "):""]}},loftoceanRoomReservationUtils.prototype={data:{},disabledStartDates:[],disabledEndDates:[],setData:function(t){this.data=t},checkTaxes:function(t,a){var e;this.data.isTaxEnabled&&(this.data.taxIncluded?(e=this.calculateIncludedTax(t),a.tax=this.checkOutputNumberFormat(e.totalTax),a.taxDetails=e.taxDetails):(e=this.calculateExcludeTax(t),a.tax=this.checkOutputNumberFormat(e.totalTax),a.taxDetails=e.taxDetails,a.beforeTax=a.totalPrice,a.totalPrice=this.checkOutputNumberFormat(add(a.totalOriginalPrice,e.totalTax),!0)))},calculateIncludedTax:function(t){var a,e=this.add(this.data.currencySettings.precision,2),i=this.data.taxRate,n=[],s=t;if(i.reversed_compound_rates&&i.reversed_compound_rates.length)for(var r=0;rt.max&&n.push("checkin-unavailable")),a.checkin.length)){let t=a.checkin;t.includes(e)&&(n.push("no-checkin","checkin-unavailable"),s.push(d.noCheckin))}return[!0,n.length?n.join(" "):"",s.length?s.join(", "):""]},showCheckoutDates:function(t,a){if(t=t.format(o),this.disabledEndDates.includes(t)||!moment(a).isValid())return[!1,"",""];if(!moment(t).isAfter(a))return[!1,"",""];var e=a.clone(),i=moment(t);for(e.add("1","day");e.isBefore(i);){if(this.disabledStartDates.includes(e.format(o)))return[!1,"",""];e.add("1","day")}var n=new Date(t),s="day"+n.getDay(),r=m(n),l=[],u=[],c=m(new Date(a.format(o))),t=this.getMatchedBookingRule(c),n=this.getMatchedBookingRule(r);if(!1!==n&&n.checkout.length){let t=n.checkout;t.includes(s)&&(l.push("no-checkout","checkout-unavailable"),u.push(d.noCheckout))}return!1!==t&&t.stay_length&&(a="day"+a.day(),ct[a].max&&(l.push("off","disabled","maximal-stay-unavailable","checkout-unavailable"),u.push(t[a].max+d.maximum))))),[!0,l.length?l.join(" "):"",u.length?u.join(", "):""]},getEnabledExtraServiceList:function(s,r){if(this.data.hasCustomExtraServices){var l=[];return s=m(new Date(s)),r=m(new Date(r)),this.data.extraServices.forEach(function(a){if(""!==a.effective_time&&a.custom_effective_time_slots.length){var e=!0,i="activated"==a.effective_time;for(let t=0;t=r)){i?l.push(u.extend({},a)):e=!1;break}}!i&&e&&l.push(u.extend({},a))}else l.push(u.extend({},a))}),l}return!1},getRoomLimitation:function(t,a){for(var e=!1,t=m(new Date(t)),i=m(new Date(a)),n=this.data.priceList,s=t;s