{"version":3,"file":"library/js/build/hotel-rooms.min.js","mappings":"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","sources":["webpack://peppermillreno_com_dev/webpack/runtime/chunk loaded","webpack://peppermillreno_com_dev/./library/js/helpers/get-selected-filters.ts","webpack://peppermillreno_com_dev/./library/js/store/hotel-rooms.store.ts","webpack://peppermillreno_com_dev/./library/js/components/hotel/hotelFilterWidget.vue?66db","webpack://peppermillreno_com_dev/./library/js/components/widget-filters.vue?f3f0","webpack://peppermillreno_com_dev/./node_modules/vue-loader/lib/runtime/componentNormalizer.js","webpack://peppermillreno_com_dev/./library/js/components/widget-filters.vue","webpack://peppermillreno_com_dev/./library/js/components/widget-filters.vue?9acb","webpack://peppermillreno_com_dev/./library/js/components/hotel/hotelCalendar.vue?cb91","webpack://peppermillreno_com_dev/./library/js/components/hotel/hotelCalendarDay.vue?ea72","webpack://peppermillreno_com_dev/./library/js/components/hotel/hotelCalendarDay.vue","webpack://peppermillreno_com_dev/./library/js/components/hotel/hotelCalendarDay.vue?8fdd","webpack://peppermillreno_com_dev/./library/js/components/hotel/hotelCalendarMonth.vue?1df2","webpack://peppermillreno_com_dev/./library/js/components/hotel/hotelCalendarMonth.vue","webpack://peppermillreno_com_dev/./library/js/components/hotel/hotelCalendarMonth.vue?a349","webpack://peppermillreno_com_dev/./library/js/components/hotel/hotelCalendarFooter.vue?5abe","webpack://peppermillreno_com_dev/./library/js/components/hotel/hotelCalendarFooter.vue","webpack://peppermillreno_com_dev/./library/js/components/hotel/hotelCalendarFooter.vue?c92f","webpack://peppermillreno_com_dev/./library/js/components/LoadingSpinner.vue?0ab5","webpack://peppermillreno_com_dev/./library/js/components/LoadingSpinner.vue","webpack://peppermillreno_com_dev/./library/js/components/LoadingSpinner.vue?7f3b","webpack://peppermillreno_com_dev/./library/js/components/hotel/hotelCalendar.vue","webpack://peppermillreno_com_dev/./library/js/components/hotel/hotelCalendar.vue?c29d","webpack://peppermillreno_com_dev/./library/js/components/hotel/hotelFilterWidget.vue","webpack://peppermillreno_com_dev/./library/js/components/hotel/hotelFilterWidget.vue?6222","webpack://peppermillreno_com_dev/./library/js/helpers/IntersectionObserverFallback.ts","webpack://peppermillreno_com_dev/./library/js/components/hotel/pageListRoom.vue?7ed5","webpack://peppermillreno_com_dev/./library/js/components/hotel/hotelRoomCallToAction.vue?1b11","webpack://peppermillreno_com_dev/./library/js/components/hotel/hotelRoomCallToAction.vue","webpack://peppermillreno_com_dev/./library/js/components/hotel/hotelRoomCallToAction.vue?dcad","webpack://peppermillreno_com_dev/./library/js/components/hotel/hotelRoomIcons.vue?0b59","webpack://peppermillreno_com_dev/./library/js/components/hotel/hotelRoomIcons.vue","webpack://peppermillreno_com_dev/./library/js/components/hotel/hotelRoomIcons.vue?07b6","webpack://peppermillreno_com_dev/./library/js/components/hotel/pageListRoom.vue","webpack://peppermillreno_com_dev/./library/js/components/hotel/pageListRoom.vue?1b3e","webpack://peppermillreno_com_dev/./library/js/components/hotel/hotelRoomDetails.vue?aff2","webpack://peppermillreno_com_dev/./library/js/components/hotel/hotelRoomDetails.vue","webpack://peppermillreno_com_dev/./library/js/components/hotel/hotelRoomDetails.vue?3042","webpack://peppermillreno_com_dev/./library/js/components/loader.vue?b7cd","webpack://peppermillreno_com_dev/./library/js/components/loader.vue","webpack://peppermillreno_com_dev/library/js/components/loader.vue","webpack://peppermillreno_com_dev/./webpack-hotel-rooms.ts","webpack://peppermillreno_com_dev/webpack/bootstrap","webpack://peppermillreno_com_dev/webpack/runtime/define property getters","webpack://peppermillreno_com_dev/webpack/runtime/global","webpack://peppermillreno_com_dev/webpack/runtime/hasOwnProperty shorthand","webpack://peppermillreno_com_dev/webpack/runtime/runtimeId","webpack://peppermillreno_com_dev/webpack/runtime/jsonp chunk loading","webpack://peppermillreno_com_dev/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","/**\r\n * @version 1.0.1\r\n * @author Jasper Howard \r\n * Copyright (C) 2023, Peppermill Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are not permitted.\r\n * 2023-04-02 (1.0.1) (jhoward)\r\n *\t - Refactor get-selected-filters.js to get-selected-filters.ts.\r\n */\r\n\r\nimport {StateFilter} from \"../store/hotel-rooms\";\r\n\r\nexport interface SelectedFilterOutput {\r\n [key: string]: string[]\r\n}\r\n\r\nexport function getSelectedFilters (filters: StateFilter[]): SelectedFilterOutput {\r\n let selectedFilters: SelectedFilterOutput = {};\r\n filters.forEach(filter => {\r\n selectedFilters[filter.key] = [];\r\n filter.items.forEach(filterValue => {\r\n if (filterValue.selected) {\r\n selectedFilters[filter.key].push(filterValue.value);\r\n }\r\n });\r\n });\r\n\r\n return selectedFilters;\r\n}","/*!\r\n * Copyright (C) 2022-2024, Peppermill Inc.\r\n * All rights reserved.\r\n *\r\n * Redistribution and use in source and binary forms, with or without\r\n * modification, are not permitted.\r\n *//*\r\n *\t2022-08-17\r\n *\t\t- create hotel-rooms.store.js to facilitate data storage between hotel-related components.\r\n *\r\n *\t2022-08-19\r\n *\t\t- Refactor getSelectedFilters() to the helper js directory.\r\n *\r\n *\t2023-03-30\r\n *\t\t- Refactor hotel-rooms.store.js to hotel-rooms.store.ts and add types to all function arguments.\r\n *\r\n *\t2024-06-10 (jhoward)\r\n *\t\t- Add roomTypeTotalAvailable getter.\r\n *\t\t- Add selectedDates getter.\r\n *\t\t- Add bookingLink getter.\r\n */\r\n\r\nimport {HotelRoomAdjacentDate, HotelRoomState, StateFilterSelected} from \"./hotel-rooms\";\r\n\r\n//@ts-ignore\r\nimport Vue from 'vue/dist/vue.esm'\r\nimport Vuex from \"vuex\";\r\nimport {getSelectedFilters, SelectedFilterOutput} from \"../helpers/get-selected-filters\";\r\nimport {HotelBookingLinkData, RoomAvailabilityData, RoomAvailabilityRoomType} from \"../components/hotel/defs\";\r\n\r\nVue.use(Vuex);\r\n\r\nexport default new Vuex.Store({\r\n state: {\r\n ROOMS: [] as RoomAvailabilityData[],\r\n ADJACENT_DATES: [] as HotelRoomAdjacentDate[],\r\n isRoomAvailabilityLoaded: false,\r\n filterSaveTimer: -1,\r\n filterSaveTimeout: 500,\r\n filters: [\r\n {\r\n title: 'Bed',\r\n key: 'bed_type',\r\n items: [\r\n {\r\n title: '1 King',\r\n value: '1-KING',\r\n selected: false\r\n },\r\n {\r\n title: '2 Kings',\r\n value: '2-KING',\r\n selected: false\r\n },\r\n {\r\n title: '2 Queens',\r\n value: '2-QUEEN',\r\n selected: false\r\n },\r\n ]\r\n },\r\n\r\n {\r\n title: 'Price per Night',\r\n key: 'price',\r\n items: [\r\n {\r\n title: 'Below $100',\r\n value: '0-100',\r\n selected: false\r\n },\r\n {\r\n title: '$100 to $200',\r\n value: '100-200',\r\n selected: false\r\n },\r\n {\r\n title: '$200 to $300',\r\n value: '200-300',\r\n selected: false\r\n },\r\n {\r\n title: '$300 or more',\r\n value: '300-10000',\r\n selected: false\r\n },\r\n ]\r\n },\r\n\r\n {\r\n title: 'Smoking',\r\n key: 'smoking',\r\n items: [\r\n {\r\n title: 'Smoking',\r\n value: 'YES',\r\n selected: false\r\n },\r\n {\r\n title: 'Non-Smoking',\r\n value: 'NO',\r\n selected: false\r\n },\r\n ]\r\n },\r\n\r\n {\r\n title: 'Accessibility',\r\n key: 'accessibility',\r\n items: [\r\n {\r\n title: 'Hearing Impaired',\r\n value: 'hearing impaired',\r\n selected: false\r\n },\r\n {\r\n title: 'Roll-In Shower',\r\n value: 'roll-in shower',\r\n selected: false\r\n },\r\n {\r\n title: 'Bathtub with Bars',\r\n value: 'bathtub with bars',\r\n selected: false\r\n },\r\n ]\r\n },\r\n\r\n {\r\n title: 'Room Size',\r\n key: 'sq_ft',\r\n items: [\r\n {\r\n title: 'Small',\r\n value: '100-400',\r\n selected: false\r\n },\r\n {\r\n title: 'Medium',\r\n value: '400-750',\r\n selected: false\r\n },\r\n {\r\n title: 'Large',\r\n value: '750-10000',\r\n selected: false\r\n },\r\n ]\r\n },\r\n ],\r\n\r\n //compatability with view-room-details for calendar component\r\n bookingLinkData: {\r\n start: null,\r\n end: null,\r\n adults: 2,\r\n children: 0,\r\n } as HotelBookingLinkData,\r\n\r\n checkInDate: null,\r\n checkOutDate: null,\r\n },\r\n mutations: {\r\n updateState: (state: HotelRoomState, data: [string, unknown]) => {\r\n if (data.length === 2 && data[0] in state) {\r\n //@ts-ignore\r\n state[data[0]] = data[1];\r\n }\r\n },\r\n updateRooms: (state: HotelRoomState, data: RoomAvailabilityData[]) => {\r\n if (Array.isArray(data)) {\r\n state.ROOMS = data;\r\n }\r\n },\r\n updateAdjacentDates: (state: HotelRoomState, data: HotelRoomAdjacentDate[]) => {\r\n if (Array.isArray(data)) {\r\n state.ADJACENT_DATES = data;\r\n }\r\n },\r\n updateFilter: (state: HotelRoomState, data: StateFilterSelected) => {\r\n let saveChange = false;\r\n state.filters.forEach((filterType, filterIndex) => {\r\n if (filterType.key === data.key) {\r\n filterType.items.forEach((filterValue, filterValueIndex) => {\r\n if (filterValue.value === data.value && state.filters[filterIndex].items[filterValueIndex].selected !== data.selected) {\r\n saveChange = true;\r\n state.filters[filterIndex].items[filterValueIndex].selected = data.selected;\r\n }\r\n });\r\n }\r\n });\r\n\r\n //persist filter change if any occurred\r\n if (saveChange) {\r\n clearTimeout(state.filterSaveTimer);\r\n\r\n state.filterSaveTimer = window.setTimeout(() => {\r\n window.pepHelperFunctions.setCachedData(\r\n 'hotel-filter-widget-selections',\r\n {\r\n filters: getSelectedFilters(state.filters)\r\n }\r\n );\r\n }, state.filterSaveTimeout);\r\n }\r\n },\r\n updateCheckInDate: (state: HotelRoomState, checkInDate: Date | null) => {\r\n state.bookingLinkData.start = checkInDate;\r\n state.checkInDate = checkInDate;\r\n },\r\n updateCheckOutDate: (state: HotelRoomState, checkOutDate: Date | null) => {\r\n state.bookingLinkData.end = checkOutDate;\r\n state.checkOutDate = checkOutDate;\r\n }\r\n },\r\n getters: {\r\n currentRoomWingCode: (state: HotelRoomState, getters) => {\r\n const currentRoomType = getters.currentRoomType;\r\n if (currentRoomType && 'DATA' in currentRoomType && currentRoomType.DATA.length && 'rrcsn_wing_code' in currentRoomType.DATA[0]) {\r\n return currentRoomType.DATA[0].rrcsn_wing_code;\r\n }\r\n return '';\r\n },\r\n\r\n selectedFilters: function (state: HotelRoomState): SelectedFilterOutput {\r\n return getSelectedFilters(state.filters);\r\n },\r\n\r\n //compatability with view-room-details for calendar component\r\n bookingLinkRoomPageId: () => 0,\r\n\r\n stayLength: function (state: HotelRoomState) {\r\n if (state.checkInDate && state.checkOutDate) {\r\n return window.hotelRoomsVueApp.daysBetween(state.checkInDate, state.checkOutDate);\r\n }\r\n\r\n return 0;\r\n },\r\n\r\n roomTypeIsAvailable: (state: HotelRoomState, getters) => (roomAvailabilityData: RoomAvailabilityData): boolean => {\r\n const stayLength = getters.stayLength;\r\n const validRoomTypes = roomAvailabilityData.ROOM_TYPES.filter(roomType => {\r\n return roomType.MIN_STAY_DAYS <= stayLength\r\n });\r\n return !!validRoomTypes.length;\r\n },\r\n\r\n roomTypeTotalAvailable: (state: HotelRoomState, getters) => (roomAvailabilityData: RoomAvailabilityData): number => {\r\n const stayLength = getters.stayLength;\r\n const validRoomTypes = roomAvailabilityData.ROOM_TYPES.filter(roomType => {\r\n return roomType.MIN_STAY_DAYS <= stayLength\r\n });\r\n return validRoomTypes.map(roomType => roomType.ROOM_INVENTORY).reduce((roomInventory, totalInventory) => roomInventory + totalInventory, 0);\r\n },\r\n\r\n roomTypeMinStayDays: (state: HotelRoomState, getters) => (roomAvailabilityData: RoomAvailabilityData): number => {\r\n if (false === getters.roomTypeIsAvailable(roomAvailabilityData)) {\r\n const minStayRoomTypes = roomAvailabilityData.ROOM_TYPES.filter(roomType => {\r\n return roomType.MIN_STAY_DAYS > getters.stayLength\r\n });\r\n if (minStayRoomTypes.length) {\r\n return minStayRoomTypes[0].MIN_STAY_DAYS;\r\n }\r\n }\r\n\r\n return 0;\r\n },\r\n\r\n selectedDates: (state: HotelRoomState): string[] => {\r\n const output = [];\r\n if (state.checkInDate && state.checkOutDate) {\r\n let currentDate = state.checkInDate;\r\n const checkOutTime = state.checkOutDate.getTime();\r\n while (currentDate.getTime() <= checkOutTime) {\r\n output.push(window.pepDateFunctions.formatDateObjectYYYYMMDD(currentDate));\r\n currentDate = window.pepDateFunctions.addDays(currentDate, 1);\r\n }\r\n } else if (state.checkInDate) {\r\n output.push(window.pepDateFunctions.formatDateObjectYYYYMMDD(state.checkInDate));\r\n } else if (state.checkOutDate) {\r\n output.push(window.pepDateFunctions.formatDateObjectYYYYMMDD(state.checkOutDate));\r\n }\r\n\r\n return output;\r\n },\r\n\r\n bookingLink: (state, getters) => (roomAvailabilityData: RoomAvailabilityData, prtId = 0, offerCode = '', pageId = 0, clickSource = 'hotel-widget'): string => {\r\n const params: {\r\n room_page_id: number,\r\n clickSource: string,\r\n o: string,\r\n start?: string,\r\n end?: string,\r\n test?: number,\r\n auto_book_prt?: number,\r\n room?: number\r\n } = {\r\n room_page_id: pageId,\r\n clickSource,\r\n o: offerCode\r\n };\r\n\r\n if (state.checkInDate) {\r\n params.start = window.pepDateFunctions.formatDateObjectYYYYMMDD(state.checkInDate);\r\n }\r\n if (state.checkOutDate) {\r\n params.end = window.pepDateFunctions.formatDateObjectYYYYMMDD(state.checkOutDate);\r\n }\r\n\r\n if (getters.roomTypeIsAvailable(roomAvailabilityData)) {\r\n let selectedRoomTypeIndex = 0;\r\n let isNonSmokingRoomTypeFound = false;\r\n\r\n if (/[&?]test=1$/.test(location.href)) {\r\n params.test = 1;\r\n }\r\n\r\n const availableRoomTypes: RoomAvailabilityRoomType[] = [];\r\n roomAvailabilityData.ROOM_TYPES.forEach((roomType: RoomAvailabilityRoomType) => {\r\n if ((roomType?.ROOM_INVENTORY || 0) > 0) {\r\n availableRoomTypes.push(roomType);\r\n }\r\n });\r\n\r\n if (prtId) {\r\n for (let i = 0, l = availableRoomTypes.length; i < l; i++) {\r\n if (availableRoomTypes[i].PRT_ID === prtId) {\r\n selectedRoomTypeIndex = i;\r\n break;\r\n }\r\n }\r\n } else {\r\n //let's default to non-smoking room type if we can\r\n for (let i = 0, l = availableRoomTypes.length; i < l; i++) {\r\n if (availableRoomTypes[i].hasOwnProperty('ROOM_NON_SMOKING') && availableRoomTypes[i].ROOM_NON_SMOKING) {\r\n if (availableRoomTypes[i].hasOwnProperty('PRT_ID')) {\r\n params.auto_book_prt = availableRoomTypes[i].PRT_ID;\r\n }\r\n\r\n if (availableRoomTypes[i].hasOwnProperty('ROOM_SEQUENCE_NUMBER')) {\r\n params.room = availableRoomTypes[i].ROOM_SEQUENCE_NUMBER;\r\n }\r\n\r\n isNonSmokingRoomTypeFound = true;\r\n selectedRoomTypeIndex = i;\r\n\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (!isNonSmokingRoomTypeFound && availableRoomTypes.hasOwnProperty(selectedRoomTypeIndex)) {\r\n if (availableRoomTypes[selectedRoomTypeIndex].hasOwnProperty('PRT_ID')) {\r\n params.auto_book_prt = availableRoomTypes[selectedRoomTypeIndex].PRT_ID;\r\n }\r\n\r\n if (availableRoomTypes[selectedRoomTypeIndex].hasOwnProperty('ROOM_SEQUENCE_NUMBER')) {\r\n params.room = availableRoomTypes[selectedRoomTypeIndex].ROOM_SEQUENCE_NUMBER;\r\n }\r\n }\r\n }\r\n\r\n return '/view-room-details/?' + $.param(params);\r\n }\r\n }\r\n});","var render = function render() {\n var _vm = this,\n _c = _vm._self._c,\n _setup = _vm._self._setupProxy\n return _c(\n \"section\",\n {\n staticClass: \"page-link-filter date sticky-polyfill\",\n class: _vm.containerClasses,\n attrs: { \"data-widget-type\": _vm.filterType },\n },\n [\n _c(\"div\", {\n ref: \"stickySentinelTop\",\n staticClass: \"sticky_sentinel sticky_sentinel--top\",\n }),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"viewport\" }, [\n _c(\"div\", { staticClass: \"top-bar\" }),\n _vm._v(\" \"),\n _c(\"span\", { staticClass: \"filter-title\" }, [\n _vm._v(\"MAKE A RESERVATION\"),\n ]),\n _vm._v(\" \"),\n _c(\n \"form\",\n {\n ref: \"form\",\n staticClass: \"pepvalidate-v3 ajax-ignore full-width no-text-here\",\n attrs: { role: \"presentation\" },\n on: {\n submit: function ($event) {\n $event.preventDefault()\n $event.stopPropagation()\n return _vm.filterSubmitHandler.apply(null, arguments)\n },\n },\n },\n [\n _c(\"p\", { staticClass: \"full-width check-in active\" }, [\n _c(\"label\", [\n _vm._m(0),\n _vm._v(\" \"),\n _c(\"span\", { staticClass: \"handle\" }, [\n _c(\"svg\", { staticClass: \"ic_calendar\" }, [\n _c(\"use\", {\n attrs: {\n \"xmlns:xlink\": \"http://www.w3.org/1999/xlink\",\n \"xlink:href\": \"#ic_calendar\",\n },\n }),\n ]),\n ]),\n _vm._v(\" \"),\n _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.checkInDateFormatted,\n expression: \"checkInDateFormatted\",\n },\n ],\n ref: \"check_in_input\",\n attrs: {\n name: \"check_in\",\n autocomplete: \"off\",\n type: \"text\",\n readonly: \"\",\n \"data-dateformat\": \"MM d\",\n \"data-mindate\": _vm.minCheckInDate,\n \"data-onhide\": \"FILTER-WIDGET-DATEPICKER-HIDE\",\n \"data-onselect\": \"FILTER-WIDGET-DATEPICKER-SELECT\",\n \"data-range\": \"true\",\n },\n domProps: { value: _vm.checkInDateFormatted },\n on: {\n click: function ($event) {\n $event.preventDefault()\n $event.stopPropagation()\n return _vm.showCalendars()\n },\n keydown: _vm.showCalendars,\n input: function ($event) {\n if ($event.target.composing) return\n _vm.checkInDateFormatted = $event.target.value\n },\n },\n }),\n ]),\n ]),\n _vm._v(\" \"),\n _c(\"p\", { staticClass: \"full-width check-out active\" }, [\n _c(\"label\", [\n _vm._m(1),\n _vm._v(\" \"),\n _c(\"span\", { staticClass: \"handle\" }, [\n _c(\"svg\", { staticClass: \"ic_calendar\" }, [\n _c(\"use\", {\n attrs: {\n \"xmlns:xlink\": \"http://www.w3.org/1999/xlink\",\n \"xlink:href\": \"#ic_calendar\",\n },\n }),\n ]),\n ]),\n _vm._v(\" \"),\n _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.checkOutDateFormatted,\n expression: \"checkOutDateFormatted\",\n },\n ],\n attrs: {\n name: \"check_out\",\n autocomplete: \"off\",\n type: \"text\",\n readonly: \"\",\n \"data-dateformat\": \"MM d\",\n \"data-mindate\": _vm.minCheckOutDate,\n \"data-onhide\": \"FILTER-WIDGET-DATEPICKER-HIDE\",\n \"data-onselect\": \"FILTER-WIDGET-DATEPICKER-SELECT\",\n \"data-range\": \"true\",\n },\n domProps: { value: _vm.checkOutDateFormatted },\n on: {\n click: function ($event) {\n $event.preventDefault()\n $event.stopPropagation()\n return _vm.showCalendars()\n },\n keydown: _vm.showCalendars,\n input: function ($event) {\n if ($event.target.composing) return\n _vm.checkOutDateFormatted = $event.target.value\n },\n },\n }),\n ]),\n ]),\n _vm._v(\" \"),\n _c(\"p\", { staticClass: \"full-width reservation-offer-code\" }, [\n _c(\"label\", [\n _c(\"span\", { staticClass: \"text\" }, [_vm._v(\"Offer Code\")]),\n _vm._v(\" \"),\n _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.offerCode,\n expression: \"offerCode\",\n },\n ],\n ref: \"offerCodeInput\",\n attrs: {\n \"data-error-msg\": \"Please enter a valid offer code.\",\n \"data-regex\": \"^[a-zA-Z0-9]+$\",\n name: \"offer_code\",\n type: \"text\",\n },\n domProps: { value: _vm.offerCode },\n on: {\n keyup: _vm.offerCodeKeyUpHandler,\n input: function ($event) {\n if ($event.target.composing) return\n _vm.offerCode = $event.target.value\n },\n },\n }),\n ]),\n ]),\n _vm._v(\" \"),\n _c(\"p\", { staticClass: \"full-width filters\" }, [\n _c(\"label\", [\n _c(\"span\", { staticClass: \"text\" }, [\n 0 === _vm.selectedFilterCount\n ? _c(\"span\", [\n _c(\n \"span\",\n { staticClass: \"mobile-hidden tablet-hidden\" },\n [_vm._v(\"Choose \")]\n ),\n _vm._v(\"Filters\\n \"),\n ])\n : _c(\"span\", [_vm._v(_vm._s(_vm.selectedFilterLabel))]),\n ]),\n _vm._v(\" \"),\n _c(\"span\", { staticClass: \"handle\" }, [\n _c(\"svg\", { staticClass: \"symbol_filter_list\" }, [\n _c(\"use\", {\n attrs: {\n \"xmlns:xlink\": \"http://www.w3.org/1999/xlink\",\n \"xlink:href\": \"#symbol_filter_list\",\n },\n }),\n ]),\n ]),\n _vm._v(\" \"),\n _c(\"input\", {\n attrs: {\n name: \"filters\",\n autocomplete: \"off\",\n type: \"text\",\n readonly: \"\",\n value: \"\",\n },\n on: {\n click: function ($event) {\n $event.stopPropagation()\n _vm.isFilterOpen = !_vm.isFilterOpen\n },\n },\n }),\n ]),\n ]),\n _vm._v(\" \"),\n _c(\n \"p\",\n { staticClass: \"full-width submit-wrapper filter-submit\" },\n [\n _c(\n \"label\",\n { attrs: { \"aria-label\": \"Click to Check Rates\" } },\n [\n _vm.isRoomDataLoading\n ? _c(\"loading-spinner\", {\n staticClass: \"hotel_filter--rate_loader\",\n })\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"input\", {\n ref: \"filterButton\",\n staticClass: \"check-rates-button\",\n attrs: { type: \"submit\", value: \"CHECK RATES\" },\n }),\n ],\n 1\n ),\n ]\n ),\n _vm._v(\" \"),\n _c(\"p\", { staticClass: \"full-width reservation-iata\" }, [\n _c(\"label\", [\n _c(\"span\", { staticClass: \"text\" }, [_vm._v(\"IATA\")]),\n _vm._v(\" \"),\n _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.iata,\n expression: \"iata\",\n },\n ],\n ref: \"iataInput\",\n attrs: { name: \"iata\", type: \"text\" },\n domProps: { value: _vm.iata },\n on: {\n input: function ($event) {\n if ($event.target.composing) return\n _vm.iata = $event.target.value\n },\n },\n }),\n ]),\n ]),\n _vm._v(\" \"),\n _c(\"widget-filters\", {\n attrs: {\n filters: _vm.$store.state.filters,\n \"is-filter-open\": _vm.isFilterOpen,\n },\n on: {\n close: function ($event) {\n _vm.isFilterOpen = false\n },\n \"update-filter\": _vm.updateFilter,\n },\n }),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"calendar-wrapper drop-down-overlay show-loading-spinner\",\n class: _vm.calendarWrapperClasses,\n on: {\n click: function ($event) {\n $event.stopPropagation()\n },\n },\n },\n [\n _c(_vm.calendarComponent, {\n ref: \"calendar\",\n tag: \"component\",\n attrs: {\n \"show-special-offers\": \"\",\n \"load-calendar-callback\": \"\",\n \"change-dates-callback\": _vm.setDatesFromCalendar,\n },\n on: {\n loaded: function ($event) {\n _vm.calendarLoaded = true\n },\n close: _vm.handleCalendarClose,\n },\n }),\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"clearme\" }),\n _vm._v(\" \"),\n _c(\n \"div\",\n { ref: \"mobileCta\", staticClass: \"mobile-only mobile-cta\" },\n [\n _c(\n \"a\",\n {\n staticClass: \"btn non-resort-page no-touch-effect\",\n attrs: { href: \"/resort/?STR=1\" },\n on: { click: _vm.nonResortPageButtonClick },\n },\n [_vm._v(\"Check\\n Rates\")]\n ),\n _vm._v(\" \"),\n _c(\n \"a\",\n {\n staticClass: \"btn resort-page no-touch-effect\",\n attrs: { href: \"#\" },\n on: {\n click: function ($event) {\n $event.preventDefault()\n $event.stopPropagation()\n return _vm.resortPageButtonClick.apply(null, arguments)\n },\n },\n },\n [\n _c(\"span\", { staticClass: \"when-stuck\" }, [\n _vm._v(\"View Filters\"),\n ]),\n _vm._v(\" \"),\n _c(\"span\", { staticClass: \"when-unstuck\" }, [\n _vm._v(\"View Rooms\"),\n ]),\n ]\n ),\n ]\n ),\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"clearme\" }),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"shadow\" }),\n ]),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"sticky_sentinel sticky_sentinel--bottom\" }),\n ]\n )\n}\nvar staticRenderFns = [\n function () {\n var _vm = this,\n _c = _vm._self._c,\n _setup = _vm._self._setupProxy\n return _c(\"span\", { staticClass: \"text mobile-hidden\" }, [\n _vm._v(\"Check-In\"),\n _c(\"span\", { staticClass: \"tablet-hidden\" }, [_vm._v(\" Date\")]),\n ])\n },\n function () {\n var _vm = this,\n _c = _vm._self._c,\n _setup = _vm._self._setupProxy\n return _c(\"span\", { staticClass: \"text mobile-hidden\" }, [\n _vm._v(\"Check-Out\"),\n _c(\"span\", { staticClass: \"tablet-hidden\" }, [_vm._v(\" Date\")]),\n ])\n },\n]\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function render() {\n var _vm = this,\n _c = _vm._self._c,\n _setup = _vm._self._setupProxy\n return _c(\n \"div\",\n {\n staticClass: \"filter-selection-drop-down drop-down-overlay\",\n class: _vm.filterContainerClasses,\n on: {\n click: function ($event) {\n $event.stopPropagation()\n },\n },\n },\n [\n _c(\n \"a\",\n {\n staticClass: \"btn btn-close\",\n attrs: { href: \"#\" },\n on: {\n click: function ($event) {\n $event.preventDefault()\n return _vm.filterCloseButtonClick.apply(null, arguments)\n },\n },\n },\n [_vm._v(\"Close\")]\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"view\" },\n _vm._l(_vm.filterColumns, function (filterColumn, filterColumnIndex) {\n return _c(\n \"ul\",\n { key: filterColumnIndex },\n [\n _vm._l(filterColumn, function (filterType) {\n return [\n _c(\n \"li\",\n {\n staticClass: \"title\",\n on: {\n click: function ($event) {\n $event.stopPropagation()\n return _vm.titleClickHandler(filterType.key)\n },\n },\n },\n [_vm._v(_vm._s(filterType.title))]\n ),\n _vm._v(\" \"),\n _vm._l(filterType.items, function (filterValue) {\n return _c(\n \"li\",\n {\n key: filterType.key + \"::\" + filterValue.value,\n class: {\n active: filterValue.selected,\n show:\n filterType.key in _vm.filterTypesToShow &&\n _vm.filterTypesToShow[filterType.key],\n },\n attrs: {\n \"data-id\": filterType.key,\n \"data-value\": filterValue.value,\n },\n on: {\n click: function ($event) {\n $event.stopPropagation()\n return _vm.filterClickHandler(\n filterType.key,\n filterValue.value,\n !filterValue.selected\n )\n },\n },\n },\n [\n _c(\"span\", { staticClass: \"filter-checkbox\" }, [\n _c(\"svg\", { staticClass: \"checked\" }, [\n _c(\"use\", {\n attrs: {\n \"xmlns:xlink\": \"http://www.w3.org/1999/xlink\",\n \"xlink:href\": \"#ic_check_box_24px\",\n },\n }),\n ]),\n _vm._v(\" \"),\n _c(\"svg\", { staticClass: \"unchecked\" }, [\n _c(\"use\", {\n attrs: {\n \"xmlns:xlink\": \"http://www.w3.org/1999/xlink\",\n \"xlink:href\":\n \"#ic_check_box_outline_blank_24px\",\n },\n }),\n ]),\n ]),\n _vm._v(\n \"\\n \" +\n _vm._s(filterValue.title) +\n \"\\n \"\n ),\n ]\n )\n }),\n ]\n }),\n ],\n 2\n )\n }),\n 0\n ),\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nexport default function normalizeComponent(\n scriptExports,\n render,\n staticRenderFns,\n functionalTemplate,\n injectStyles,\n scopeId,\n moduleIdentifier /* server only */,\n shadowMode /* vue-cli only */\n) {\n // Vue.extend constructor export interop\n var options =\n typeof scriptExports === 'function' ? scriptExports.options : scriptExports\n\n // render functions\n if (render) {\n options.render = render\n options.staticRenderFns = staticRenderFns\n options._compiled = true\n }\n\n // functional template\n if (functionalTemplate) {\n options.functional = true\n }\n\n // scopedId\n if (scopeId) {\n options._scopeId = 'data-v-' + scopeId\n }\n\n var hook\n if (moduleIdentifier) {\n // server build\n hook = function (context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (injectStyles) {\n injectStyles.call(this, context)\n }\n // register component module identifier for async chunk inferrence\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n options._ssrRegister = hook\n } else if (injectStyles) {\n hook = shadowMode\n ? function () {\n injectStyles.call(\n this,\n (options.functional ? this.parent : this).$root.$options.shadowRoot\n )\n }\n : injectStyles\n }\n\n if (hook) {\n if (options.functional) {\n // for template-only hot-reload because in that case the render fn doesn't\n // go through the normalizer\n options._injectStyles = hook\n // register for functional component in vue file\n var originalRender = options.render\n options.render = function renderWithStyleInjection(h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n var existing = options.beforeCreate\n options.beforeCreate = existing ? [].concat(existing, hook) : [hook]\n }\n }\n\n return {\n exports: scriptExports,\n options: options\n }\n}\n","import { render, staticRenderFns } from \"./widget-filters.vue?vue&type=template&id=4952bb51&scoped=true\"\nimport script from \"./widget-filters.vue?vue&type=script&lang=ts\"\nexport * from \"./widget-filters.vue?vue&type=script&lang=ts\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4952bb51\",\n null\n \n)\n\nexport default component.exports","\r\n/*!\r\n * Copyright (C) 2022-2024, Peppermill Inc.\r\n * All rights reserved.\r\n *\r\n * Redistribution and use in source and binary forms, with or without\r\n * modification, are not permitted.\r\n *//*\r\n *\t\t2022-08-17\r\n *\t\t\t- Refactor filter-widget.js filter-selection functionality to component.\r\n *\r\n *\t\t2022-08-19\r\n *\t\t\t- no longer commits directly to Vuex store (emits update-filter event instead).\r\n *\t\t\t- renamed to .\r\n * - now stops propagation of clicks on filters.\r\n *\r\n *\t\t2023-04-03 (jhoward)\r\n *\t\t\t- Refactor to use TypeScript.\r\n *\t\t\t- Fix filter navigation on mobile in .\r\n *\r\n *\t\t2024-06-10 (jhoward)\r\n *\t\t\t- Refactor template in to fix interaction bug.\r\n *\t\t\t- Add emits object in .\r\n */\r\n\r\nimport {defineComponent, PropType} from \"vue\";\r\nimport {StateFilter, StateFilterSelected} from \"../store/hotel-rooms\";\r\n\r\nexport default defineComponent({\r\n name: 'widget-filters',\r\n emits: {\r\n 'update-filter': (payload: StateFilterSelected) => true,\r\n close: () => true\r\n },\r\n props: {\r\n isFilterOpen: {\r\n type: Boolean,\r\n default: false\r\n },\r\n filters: {\r\n type: Array as PropType,\r\n required: true\r\n }\r\n },\r\n data: function () {\r\n let filterTypesToShow: {[key: string]: boolean} = {};\r\n this.filters.forEach(filter => {\r\n filterTypesToShow[filter.key] = false;\r\n });\r\n return {\r\n selectedFilters: [],\r\n filterTypesToShow: filterTypesToShow,\r\n };\r\n },\r\n computed: {\r\n filterContainerClasses: function () {\r\n return {\r\n hide: !this.isFilterOpen\r\n };\r\n },\r\n filterColumns(): [StateFilter[], StateFilter[]] {\r\n const columnOne = [];\r\n for (let i = 0, l = Math.floor(this.filters.length / 2); i < l; i++) {\r\n columnOne.push(this.filters[i]);\r\n }\r\n const columnTwo = [];\r\n for (let i = Math.floor(this.filters.length / 2), l = this.filters.length; i < l; i++) {\r\n columnTwo.push(this.filters[i]);\r\n }\r\n return [\r\n columnOne,\r\n columnTwo\r\n ];\r\n },\r\n },\r\n methods: {\r\n filterCloseButtonClick: function () {\r\n this.$emit('close');\r\n },\r\n titleClickHandler(filterTypeKey: string): void {\r\n if (filterTypeKey in this.filterTypesToShow) {\r\n this.filterTypesToShow[filterTypeKey] = !this.filterTypesToShow[filterTypeKey];\r\n } else {\r\n this.filterTypesToShow[filterTypeKey] = true;\r\n }\r\n },\r\n filterClickHandler: function (key: string, value: string, selected: boolean) {\r\n this.$emit('update-filter', {\r\n key,\r\n value,\r\n selected\r\n });\r\n }\r\n }\r\n})\r\n","var render = function render() {\n var _vm = this,\n _c = _vm._self._c,\n _setup = _vm._self._setupProxy\n return _c(\n \"div\",\n {\n staticClass: \"hotel_calendar--container\",\n class: { \"hotel_calendar--container-vertical\": _vm.isDisplayVertical },\n style: { \"--months-to-show\": _vm.calendarMonthsToShow },\n },\n [\n _vm.calendarInitialized\n ? _c(\n \"div\",\n {\n staticClass: \"calendar--container\",\n class: _vm.calendarContainerClasses,\n },\n [\n _c(\n \"a\",\n {\n staticClass: \"calendar--nav calendar--nav-previous\",\n class: _vm.calendarPrevClasses,\n attrs: { href: \"#\", title: \"Navigate to previous month\" },\n on: {\n click: function ($event) {\n $event.preventDefault()\n return _vm.seekMonth(-1)\n },\n },\n },\n [\n _c(\"svg\", [\n _c(\"use\", {\n attrs: {\n \"xmlns:xlink\": \"http://www.w3.org/1999/xlink\",\n \"xlink:href\": \"#ic_chevron_left_24px\",\n },\n }),\n ]),\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"a\",\n {\n staticClass: \"calendar--nav calendar--nav-next\",\n class: _vm.calendarNextClasses,\n attrs: { href: \"#\", title: \"Navigate to next month\" },\n on: {\n click: function ($event) {\n $event.preventDefault()\n return _vm.seekMonth(1)\n },\n },\n },\n [\n _c(\"svg\", [\n _c(\"use\", {\n attrs: {\n \"xmlns:xlink\": \"http://www.w3.org/1999/xlink\",\n \"xlink:href\": \"#ic_chevron_right_24px\",\n },\n }),\n ]),\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"calendar--grid\" },\n _vm._l(_vm.calendarMonths, function (month, monthIndex) {\n return _c(\"hotel-calendar-month\", {\n key: month.year + \"-\" + month.month,\n ref: \"month-\" + month.year + \"-\" + month.month,\n refInFor: true,\n class: _vm.getMonthClasses(\n monthIndex,\n _vm.calendarCurrentMonthIndex\n ),\n attrs: { month: month },\n on: {\n close: function ($event) {\n return _vm.$emit(\"close\")\n },\n seek: _vm.seekMonth,\n },\n })\n }),\n 1\n ),\n _vm._v(\" \"),\n _c(\"hotel-calendar-footer\", {\n on: {\n close: function ($event) {\n return _vm.$emit(\"close\")\n },\n },\n }),\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n !_vm.calendarInitialized\n ? _c(\"loading-spinner\", { staticClass: \"hotel_calendar--rate_loader\" })\n : _vm._e(),\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function render() {\n var _vm = this,\n _c = _vm._self._c,\n _setup = _vm._self._setupProxy\n return _c(\n _vm.component,\n {\n tag: \"component\",\n staticClass: \"day--container\",\n class: _vm.dayClasses,\n attrs: {\n \"data-day-number\": _vm.day.TITLE,\n href: _vm.href,\n \"data-day-offer\": _vm.day.OFFER_CODE,\n \"data-day-offer-strike\": _vm.day.OFFER_CODE_STRIKE,\n \"data-day-min-nights\": _vm.day.MIN_NIGHTS,\n \"aria-label\": _vm.ariaLabel,\n \"aria-hidden\": _vm.ariaHidden,\n },\n on: {\n click: function ($event) {\n $event.preventDefault()\n return _vm.handleDayClick.apply(null, arguments)\n },\n keydown: _vm.handleDayKeydown,\n },\n },\n [\n _c(\"span\", { staticClass: \"day--marker\" }),\n _vm._v(\" \"),\n _c(\"span\", { staticClass: \"day--number\" }, [\n _vm._v(_vm._s(_vm.day.TITLE)),\n ]),\n _vm._v(\" \"),\n _vm.day.PRICE > 0\n ? _c(\"span\", { staticClass: \"day--price\" }, [\n _vm._v(\"$\" + _vm._s(_vm.day.PRICE)),\n ])\n : _vm._e(),\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","import { render, staticRenderFns } from \"./hotelCalendarDay.vue?vue&type=template&id=219046ca&scoped=true\"\nimport script from \"./hotelCalendarDay.vue?vue&type=script&lang=ts\"\nexport * from \"./hotelCalendarDay.vue?vue&type=script&lang=ts\"\nimport style0 from \"./hotelCalendarDay.vue?vue&type=style&index=0&id=219046ca&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"219046ca\",\n null\n \n)\n\nexport default component.exports","\r\n/*!\r\n * Copyright (C) 2024, Peppermill Inc.\r\n * All rights reserved.\r\n *\r\n * Redistribution and use in source and binary forms, with or without\r\n * modification, are not permitted.\r\n *//*\r\n *\t\t2024-05-17 (jhoward)\r\n *\t\t\t- Refactor calendar day from hotelCalendar.vue to hotelCalendarDay.vue.\r\n */\r\n\r\nimport {defineComponent, PropType} from 'vue'\r\n\r\nexport interface CalendarDay {\r\n PRICE: number;\r\n BASE_PRICE: number;\r\n // HIGHLIGHT: boolean;\r\n // CHECK_IN: boolean;\r\n // CHECK_OUT: boolean;\r\n DISPLAY_RATES: boolean;\r\n OFFER_CODE: string;\r\n OFFER_CODE_STRIKE: string;\r\n ROOM_SEQUENCE_STRIKE: string;\r\n MIN_NIGHTS: number;\r\n TITLE: string;\r\n BLANK: boolean;\r\n KEY: string; //YYYY-MM-DD\r\n DATE: Date | null;\r\n BEFORE_TODAY: boolean | undefined;\r\n}\r\n\r\nexport default defineComponent({\r\n name: 'hotelCalendarDay',\r\n emits: ['close'],\r\n props: {\r\n day: {\r\n type: Object as PropType,\r\n required: true,\r\n },\r\n },\r\n computed: {\r\n component(): string {\r\n return (!this.isBlank) ? 'a' : 'span';\r\n },\r\n isCheckIn(): boolean {\r\n return !!this.selectedDates.length && this.selectedDates[0] === this.day.KEY\r\n },\r\n isCheckOut(): boolean {\r\n return this.selectedDates.length > 1 && this.selectedDates[this.selectedDates.length - 1] === this.day.KEY\r\n },\r\n selectedDates(): string[] {\r\n return this.$store.getters.selectedDates;\r\n },\r\n ariaHidden(): string | null {\r\n return (this.day.BLANK) ? 'true' : null;\r\n },\r\n ariaLabel(): string | null {\r\n let output = null;\r\n if (!this.day.BLANK) {\r\n const suffix = (this.day.DATE) ? window.pepDateFunctions.dateSuffix(this.day.DATE?.getDate()) : '';\r\n output = this.getDayMonthName(this.day) + ' ' + this.day.TITLE + suffix;\r\n if (this.isCheckIn) {\r\n output += ', check in day';\r\n } else if (this.isCheckOut) {\r\n output += ', check out day';\r\n } else if (this.selectedDates.includes(this.day.KEY)) {\r\n const dayNumberOfReservation = this.selectedDates.indexOf(this.day.KEY) + 1;\r\n output += ', ' + dayNumberOfReservation + window.pepDateFunctions.dateSuffix(dayNumberOfReservation) + ' day of reservation';\r\n }\r\n }\r\n\r\n return output;\r\n },\r\n href(): string | null {\r\n return (this.isBlank) ? null : '#';\r\n },\r\n dayClasses(): { [key: string]: boolean } {\r\n const output: { [key: string]: boolean } = {\r\n 'day--container-blank': this.isBlank,\r\n 'day--container-check_in': this.isCheckIn,\r\n 'day--container-check_out': this.isCheckOut,\r\n 'day--container-highlight': this.isHighlighted,\r\n 'day--container-no_rates': !this.day.DISPLAY_RATES,\r\n };\r\n\r\n if (!this.isBlank) {\r\n if (this.isNoData) {\r\n output['day--container-no_data'] = true;\r\n } else {\r\n if (this.isSpecialOffer) {\r\n output['day--container-special_offer'] = true;\r\n }\r\n }\r\n }\r\n\r\n return output;\r\n },\r\n isSpecialOffer(): boolean {\r\n return (this.day.DISPLAY_RATES && this.day.PRICE !== this.day.BASE_PRICE)\r\n || this.day.OFFER_CODE !== this.day.OFFER_CODE_STRIKE;\r\n },\r\n isBlank(): boolean {\r\n return this.day.BLANK || !!this.day.BEFORE_TODAY;\r\n },\r\n isHighlighted(): boolean {\r\n return this.selectedDates.includes(this.day.KEY);\r\n },\r\n isNoData(): boolean {\r\n return this.isBlank || (this.day.DISPLAY_RATES && this.day.PRICE === 0);\r\n },\r\n },\r\n methods: {\r\n getDayMonthName(day: CalendarDay): string {\r\n const month = day.DATE?.getMonth();\r\n if (month) {\r\n return window.pepDateFunctions.language.en.months[month];\r\n }\r\n\r\n return '';\r\n },\r\n\r\n handleDayKeydown(event: KeyboardEvent) {\r\n if (event.key === 'Enter') {\r\n event.preventDefault();\r\n this.handleDayClick();\r\n } else if (event.key === 'Escape') {\r\n this.$emit('close');\r\n }\r\n },\r\n handleDayClick() {\r\n if (!this.isBlank) {\r\n if (this.day.DATE) {\r\n if (this.$store.state.checkInDate && this.$store.state.checkOutDate && !this.isNoData) {\r\n //both dates selected, start over\r\n this.$store.commit('updateCheckInDate', this.day.DATE);\r\n this.$store.commit('updateCheckOutDate', null);\r\n } else if (this.$store.state.checkInDate && !this.$store.state.checkOutDate) {\r\n //only check in selected\r\n if (this.day.DATE.getTime() < this.$store.state.checkInDate.getTime()) {\r\n this.$store.commit('updateCheckOutDate', this.$store.state.checkInDate);\r\n this.$store.commit('updateCheckInDate', this.day.DATE);\r\n } else {\r\n this.$store.commit('updateCheckOutDate', this.day.DATE);\r\n }\r\n\r\n } else if (!this.isNoData) {\r\n //fallback to setting up check in\r\n this.$store.commit('updateCheckInDate', this.day.DATE);\r\n this.$store.commit('updateCheckOutDate', null);\r\n }\r\n }\r\n }\r\n },\r\n }\r\n})\r\n","var render = function render() {\n var _vm = this,\n _c = _vm._self._c,\n _setup = _vm._self._setupProxy\n return _c(\n \"div\",\n { staticClass: \"calendar--month\" },\n [\n _c(\"h4\", { staticClass: \"calendar--title\" }, [\n _vm._v(_vm._s(_vm.month.title)),\n ]),\n _vm._v(\" \"),\n _vm._l(_vm.dayHeaders, function (dayHeader, index) {\n return _c(\"span\", { key: index, staticClass: \"calendar--header\" }, [\n _vm._v(_vm._s(dayHeader)),\n ])\n }),\n _vm._v(\" \"),\n _vm._l(_vm.month.weeks, function (week) {\n return _vm._l(week, function (day) {\n return _c(\"hotel-calendar-day\", {\n key: day.KEY,\n attrs: { day: day },\n on: {\n close: function ($event) {\n return _vm.$emit(\"close\")\n },\n },\n nativeOn: {\n keydown: function ($event) {\n return _vm.handleDayKeydown($event, day)\n },\n },\n })\n })\n }),\n ],\n 2\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","import { render, staticRenderFns } from \"./hotelCalendarMonth.vue?vue&type=template&id=d5823cb8&scoped=true\"\nimport script from \"./hotelCalendarMonth.vue?vue&type=script&lang=ts\"\nexport * from \"./hotelCalendarMonth.vue?vue&type=script&lang=ts\"\nimport style0 from \"./hotelCalendarMonth.vue?vue&type=style&index=0&id=d5823cb8&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"d5823cb8\",\n null\n \n)\n\nexport default component.exports","\r\n/*!\r\n * Copyright (C) 2024, Peppermill Inc.\r\n * All rights reserved.\r\n *\r\n * Redistribution and use in source and binary forms, with or without\r\n * modification, are not permitted.\r\n *//*\r\n *\t\t2024-05-17 (jhoward)\r\n *\t\t\t- Refactor calendar month from hotelCalendar.vue to hotelCalendarMonth.vue.\r\n */\r\n\r\nimport {defineComponent, PropType} from 'vue'\r\nimport HotelCalendarDay, {CalendarDay} from \"./hotelCalendarDay.vue\";\r\n\r\nexport interface CalendarMonth {\r\n weeks: CalendarDay[][],\r\n title: string,\r\n year: number;\r\n month: number;\r\n}\r\n\r\nexport default defineComponent({\r\n name: \"hotelCalendarMonth\",\r\n emits: {\r\n close: () => true,\r\n seek: (direction: number) => true\r\n },\r\n components: {HotelCalendarDay},\r\n props: {\r\n month: {\r\n type: Object as PropType,\r\n required: true\r\n }\r\n },\r\n data() {\r\n return {\r\n dayHeaders: ['S', 'M', 'T', 'W', 'T', 'F', 'S'],\r\n };\r\n },\r\n methods: {\r\n handleDayKeydown(event: KeyboardEvent, day: CalendarDay) {\r\n if (event.key === 'Tab') {\r\n if (!event.shiftKey && this.isLastDayOfMonth(day)) {\r\n this.$emit('seek', 1);\r\n } else if (event.shiftKey && this.isFirstDayOfMonth(day)) {\r\n this.$emit('seek', -1);\r\n }\r\n }\r\n },\r\n isLastDayOfMonth(day: CalendarDay): boolean {\r\n return !!day.DATE && window.pepDateFunctions.addDays(day.DATE, 1).getMonth() !== day.DATE.getMonth();\r\n },\r\n isFirstDayOfMonth(day: CalendarDay): boolean {\r\n return !!day.DATE && window.pepDateFunctions.addDays(day.DATE, -1).getMonth() !== day.DATE.getMonth();\r\n },\r\n }\r\n})\r\n","var render = function render() {\n var _vm = this,\n _c = _vm._self._c,\n _setup = _vm._self._setupProxy\n return _c(\"div\", { staticClass: \"hotel_calendar--footer\" }, [\n _vm._m(0),\n _vm._v(\" \"),\n _c(\n \"a\",\n {\n staticClass: \"footer--close\",\n attrs: { title: \"Click to close the calendar\", href: \"#\" },\n on: {\n click: function ($event) {\n $event.preventDefault()\n return _vm.closeCalendar.apply(null, arguments)\n },\n },\n },\n [_vm._v(\"Close\")]\n ),\n ])\n}\nvar staticRenderFns = [\n function () {\n var _vm = this,\n _c = _vm._self._c,\n _setup = _vm._self._setupProxy\n return _c(\"span\", { staticClass: \"footer--legend\" }, [\n _c(\"span\", { staticClass: \"legend--item legend--item-special_offer\" }, [\n _vm._v(\" Special\"),\n _c(\"span\", { staticClass: \"mobile-hidden\" }, [_vm._v(\" Offer\")]),\n ]),\n _vm._v(\" \"),\n _c(\"span\", { staticClass: \"legend--item legend--item-day_highlight\" }, [\n _c(\"span\", { staticClass: \"mobile-hidden\" }, [_vm._v(\" Date\")]),\n _vm._v(\" Selected\"),\n ]),\n ])\n },\n]\nrender._withStripped = true\n\nexport { render, staticRenderFns }","import { render, staticRenderFns } from \"./hotelCalendarFooter.vue?vue&type=template&id=5046f840&scoped=true\"\nimport script from \"./hotelCalendarFooter.vue?vue&type=script&lang=ts\"\nexport * from \"./hotelCalendarFooter.vue?vue&type=script&lang=ts\"\nimport style0 from \"./hotelCalendarFooter.vue?vue&type=style&index=0&id=5046f840&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5046f840\",\n null\n \n)\n\nexport default component.exports","\r\n/*!\r\n * Copyright (C) 2024, Peppermill Inc.\r\n * All rights reserved.\r\n *\r\n * Redistribution and use in source and binary forms, with or without\r\n * modification, are not permitted.\r\n *//*\r\n *\t\t2024-05-17 (jhoward)\r\n *\t\t\t- Refactor calendar footer from hotelCalendar.vue to hotelCalendarFooter.vue.\r\n */\r\n\r\nimport {defineComponent} from 'vue'\r\n\r\nexport default defineComponent({\r\n name: \"hotelCalendarFooter\",\r\n emits: ['close'],\r\n methods: {\r\n closeCalendar() {\r\n this.$emit('close');\r\n },\r\n }\r\n})\r\n","var render = function render() {\n var _vm = this,\n _c = _vm._self._c,\n _setup = _vm._self._setupProxy\n return _c(\n \"div\",\n {\n staticClass: \"loading_spinner--container\",\n attrs: {\n role: \"progressbar\",\n \"aria-valuetext\": \"Loading calendar\",\n \"aria-busy\": \"true\",\n },\n },\n [\n _c(\n \"svg\",\n { staticClass: \"circular\", attrs: { viewBox: \"25 25 50 50\" } },\n [\n _c(\"circle\", {\n staticClass: \"path\",\n attrs: {\n cx: \"50\",\n cy: \"50\",\n r: \"20\",\n fill: \"none\",\n \"stroke-width\": \"4\",\n \"stroke-miterlimit\": \"10\",\n },\n }),\n ]\n ),\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","import { render, staticRenderFns } from \"./LoadingSpinner.vue?vue&type=template&id=567c3ac2&scoped=true\"\nimport script from \"./LoadingSpinner.vue?vue&type=script&lang=ts\"\nexport * from \"./LoadingSpinner.vue?vue&type=script&lang=ts\"\nimport style0 from \"./LoadingSpinner.vue?vue&type=style&index=0&id=567c3ac2&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"567c3ac2\",\n null\n \n)\n\nexport default component.exports","\r\nimport {defineComponent} from 'vue'\r\n\r\nexport default defineComponent({\r\n name: \"LoadingSpinner\",\r\n})\r\n","import { render, staticRenderFns } from \"./hotelCalendar.vue?vue&type=template&id=e11848c2&scoped=true\"\nimport script from \"./hotelCalendar.vue?vue&type=script&lang=ts\"\nexport * from \"./hotelCalendar.vue?vue&type=script&lang=ts\"\nimport style0 from \"./hotelCalendar.vue?vue&type=style&index=0&id=e11848c2&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"e11848c2\",\n null\n \n)\n\nexport default component.exports","\r\n/*!\r\n * Copyright (C) 2022-2024, Peppermill Inc.\r\n * All rights reserved.\r\n *\r\n * Redistribution and use in source and binary forms, with or without\r\n * modification, are not permitted.\r\n *//*\r\n *\t\t2022-08-17\r\n *\t\t\t- Refactor calendar.vue to hotelCalendar.vue.\r\n *\r\n *\t\t2024-06-10 (jhoward)\r\n *\t\t\t- Implement Typescript in .\r\n *\t\t\t- Build HTML in so only JSON data needs to be pulled from the backend.\r\n *\r\n *\t\t2024-07-09 (jhoward)\r\n *\t\t\t- Throttle window.resize callbacks in .\r\n *\t\t\t- Fix nav arrow placement in .\r\n *\t\t\t- Fix the number of months being shown at once in .\r\n */\r\n\r\n//@ts-ignore\r\nimport Vue from \"vue/dist/vue.esm\";\r\nimport {ComponentPublicInstance, defineComponent} from \"vue\";\r\nimport HotelCalendarDay, {CalendarDay} from \"./hotelCalendarDay.vue\";\r\nimport HotelCalendarMonth, {CalendarMonth} from \"./hotelCalendarMonth.vue\";\r\nimport HotelCalendarFooter from \"./hotelCalendarFooter.vue\";\r\nimport LoadingSpinner from \"../LoadingSpinner.vue\";\r\n\r\ninterface CalendarData {\r\n //YYYY-MM\r\n [key: string]: {\r\n //DD\r\n [key: string]: CalendarDay;\r\n };\r\n}\r\n\r\ninterface CalendarDataServerResponse {\r\n STATUS: 'SUCCESS' | 'ERROR';\r\n DATA: {\r\n CALENDAR: CalendarData;\r\n 'CALENDAR-CALLBACK-UPDATE': string;\r\n 'CALENDAR-WIDGET-CLASSES': string[];\r\n };\r\n}\r\n\r\nexport interface HotelCalendarComponent extends ComponentPublicInstance {\r\n loadTemplate: (forceReload?: boolean) => void;\r\n getDayObjectForDate: (date: string | Date) => CalendarDay | null;\r\n}\r\n\r\nexport default defineComponent({\r\n name: \"hotel-calendar\",\r\n components: {LoadingSpinner, HotelCalendarFooter, HotelCalendarMonth, HotelCalendarDay},\r\n props: {\r\n showSpecialOffers: {\r\n type: Boolean,\r\n default: false\r\n },\r\n loadCalendarCallback: {\r\n type: String,\r\n default: 'RATE-CALENDAR-RELOAD-PROMPT'\r\n },\r\n changeDatesCallback: {\r\n type: Function,\r\n required: true\r\n },\r\n pageId: {\r\n type: Number,\r\n default: 0\r\n },\r\n disallowSoldOutDates: {\r\n type: Boolean,\r\n default: false\r\n },\r\n isDisplayVertical: {\r\n type: Boolean,\r\n default: false\r\n }\r\n },\r\n data() {\r\n return {\r\n calendarMonthsToShow: 12,\r\n calendarCurrentMonthIndex: 0,\r\n calendarInitialized: false,\r\n calendarData: {} as CalendarData,\r\n calendarLoaded: false,\r\n updateCallback: '',\r\n widgetClasses: [] as string[],\r\n\r\n initialCheckInDate: null,\r\n initialCheckOutDate: null,\r\n\r\n blankDay: {\r\n PRICE: 0,\r\n BASE_PRICE: 0,\r\n // HIGHLIGHT: false,\r\n // CHECK_IN: false,\r\n // CHECK_OUT: false,\r\n DISPLAY_RATES: false,\r\n OFFER_CODE: '',\r\n OFFER_CODE_STRIKE: '',\r\n ROOM_SEQUENCE_STRIKE: '',\r\n MIN_NIGHTS: 0,\r\n TITLE: '',\r\n BLANK: true,\r\n KEY: '',\r\n } as CalendarDay,\r\n\r\n currentUiBreakpoint: 'mobile',\r\n uiBreakpointTimer: -1,\r\n\r\n today: new Date((new Date()).toDateString())\r\n };\r\n },\r\n mounted() {\r\n window.addEventListener('resize', () => {\r\n window.clearTimeout(this.uiBreakpointTimer);\r\n this.uiBreakpointTimer = window.setTimeout(this.setCurrentUiBreakpoint, 128);\r\n }, {\r\n passive: true\r\n });\r\n requestAnimationFrame(this.setCurrentUiBreakpoint);\r\n\r\n this.loadTemplate();\r\n },\r\n watch: {\r\n calendarInitialized() {\r\n if (this.calendarInitialized) {\r\n window.setTimeout(() => {\r\n (this.$el.querySelector('.day--container-check_in') as HTMLElement | null)?.focus();\r\n }, 256);\r\n }\r\n },\r\n selectedDates() {\r\n //first check if any unavailable dates have been selected\r\n if (this.disallowSoldOutDates && this.$store.state.checkInDate && this.$store.state.checkOutDate) {\r\n let badDateFound = false;\r\n for (let i = 0, l = this.selectedDates.length - 1; i < l; i++) {\r\n const [year, month, day] = this.selectedDates[i].split('-');\r\n const yearMonth = year + '-' + month;\r\n if (this.calendarData[yearMonth]?.[day] && this.isDayNoData(this.calendarData[yearMonth][day])) {\r\n badDateFound = true;\r\n break;\r\n }\r\n }\r\n if (badDateFound) {\r\n window.showOverlayDialog({\r\n alertMode: true,\r\n confirmAccept: 'OK',\r\n confirmTitle: 'Invalid Date Selection',\r\n confirmBody: '

One or more unavailable dates selected.

Your check in/out dates have been reset.

',\r\n callback: 'RATE-CALENDAR-RELOAD'\r\n }, this.$el as HTMLElement);\r\n this.$store.commit('updateCheckInDate', this.initialCheckInDate);\r\n this.$store.commit('updateCheckOutDate', this.initialCheckOutDate);\r\n return;\r\n }\r\n }\r\n\r\n if (this.$store.state.checkInDate && this.$store.state.checkOutDate) {\r\n this.dateSelectCallback();\r\n }\r\n }\r\n },\r\n computed: {\r\n calendarMonths(): CalendarMonth[] {\r\n const months: CalendarMonth[] = [];\r\n for (let monthYear in this.calendarData) {\r\n const monthData = this.calendarData[monthYear];\r\n let monthWeeks: CalendarDay[][] = [];\r\n const titleParts = monthYear.split('-');\r\n const titleMonth = parseInt(titleParts[1], 10) - 1;\r\n const titleYear = parseInt(titleParts[0], 10);\r\n const firstDayOfWeek = (new Date(titleYear, titleMonth, 1)).getDay();\r\n const weeksInMonth = Math.ceil((Object.keys(monthData).length + firstDayOfWeek) / 7);\r\n for (let i = 0; i < weeksInMonth; i++) {\r\n let monthWeek = [];\r\n if (i === 0) {\r\n //first week\r\n for (let ii = 0; ii < firstDayOfWeek; ii++) {\r\n monthWeek.push({...this.blankDay, ...{KEY: monthYear + '-' + (0 - ii)}});\r\n }\r\n for (let ii = 0, ll = 7 - firstDayOfWeek; ii < ll; ii++) {\r\n const dayNumber = (ii + 1);\r\n const dayKey = '0' + dayNumber;\r\n const date = this.getDayDate(monthData[dayKey]);\r\n monthWeek.push({\r\n ...monthData['0' + (ii + 1)],\r\n ...{\r\n TITLE: dayNumber,\r\n DAY: dayNumber,\r\n DATE: date,\r\n BLANK: monthData[dayKey].BLANK,\r\n BEFORE_TODAY: this.isDateBeforeToday(date)\r\n }\r\n });\r\n }\r\n } else if (i + 1 === weeksInMonth) {\r\n //last week\r\n for (let ii = 0; ii < 7; ii++) {\r\n const dayNumber = i * 7 + ii - firstDayOfWeek + 1;\r\n const dayKey = (dayNumber < 10) ? '0' + dayNumber : '' + dayNumber;\r\n if (monthData[dayKey]) {\r\n const date = this.getDayDate(monthData[dayKey]);\r\n monthWeek.push({\r\n ...monthData[dayKey],\r\n ...{\r\n TITLE: dayNumber,\r\n DAY: dayNumber,\r\n DATE: date,\r\n BLANK: monthData[dayKey].BLANK,\r\n BEFORE_TODAY: this.isDateBeforeToday(date)\r\n }\r\n });\r\n } else {\r\n monthWeek.push({...this.blankDay, ...{KEY: monthYear + '-' + dayNumber}});\r\n }\r\n }\r\n } else {\r\n //middle weeks\r\n for (let ii = 0; ii < 7; ii++) {\r\n const dayNumber = i * 7 + ii - firstDayOfWeek + 1;\r\n const dayKey = (dayNumber < 10) ? '0' + dayNumber : '' + dayNumber;\r\n const date = this.getDayDate(monthData[dayKey]);\r\n monthWeek.push({\r\n ...monthData[dayKey],\r\n ...{\r\n TITLE: dayNumber,\r\n DAY: dayNumber,\r\n DATE: date,\r\n BLANK: monthData[dayKey].BLANK,\r\n BEFORE_TODAY: this.isDateBeforeToday(date)\r\n }\r\n });\r\n }\r\n }\r\n monthWeeks.push(monthWeek);\r\n }\r\n\r\n months.push({\r\n weeks: monthWeeks,\r\n title: window.pepDateFunctions.language.en.months[titleMonth] + ' ' + titleYear,\r\n year: titleYear,\r\n month: titleMonth\r\n });\r\n }\r\n return months;\r\n },\r\n\r\n calendarPrevClasses(): { [key: string]: boolean } {\r\n return {\r\n 'calendar--nav-hidden': !this.calendarLoaded || this.calendarCurrentMonthIndex === 0 || this.isDisplayVertical\r\n };\r\n },\r\n calendarNextClasses(): { [key: string]: boolean } {\r\n return {\r\n 'calendar--nav-hidden': !this.calendarLoaded || this.calendarCurrentMonthIndex >= this.calendarMonthsToShow - this.calendarNumberOfMonthsToShow || this.isDisplayVertical\r\n };\r\n },\r\n calendarNumberOfMonthsToShow() {\r\n if ('mobile' === this.currentUiBreakpoint) {\r\n return 1;\r\n }\r\n\r\n return 2;\r\n },\r\n\r\n calendarContainerClasses(): { [key: string]: boolean } {\r\n const classes: { [key: string]: boolean } = {\r\n 'calendar--container-has_footer': true\r\n };\r\n\r\n this.widgetClasses.forEach(className => classes[className] = true);\r\n\r\n return classes;\r\n },\r\n\r\n checkInMonth(): number {\r\n return (new Date(this.$store.getters.bookingLinkStartDate))?.getMonth() || 0;\r\n },\r\n checkInYear(): number {\r\n return (new Date(this.$store.getters.bookingLinkStartDate))?.getFullYear() || 0;\r\n },\r\n selectedDates(): string[] {\r\n return this.$store.getters.selectedDates;\r\n }\r\n },\r\n methods: {\r\n setCurrentUiBreakpoint(): void {\r\n const htmlClassList = document.querySelector('html')?.classList;\r\n if (htmlClassList) {\r\n if (htmlClassList.contains('ui-mobile')) {\r\n this.currentUiBreakpoint = 'mobile';\r\n } else if (htmlClassList.contains('ui-tablet')) {\r\n this.currentUiBreakpoint = 'tablet';\r\n } else if (htmlClassList.contains('ui-desktop')) {\r\n this.currentUiBreakpoint = 'desktop';\r\n } else if (htmlClassList.contains('ui-widescreen')) {\r\n this.currentUiBreakpoint = 'widescreen';\r\n }\r\n }\r\n },\r\n\r\n isDateBeforeToday(date: Date | null): boolean {\r\n return !!date && date.getTime() < this.today.getTime();\r\n },\r\n\r\n getMonthClasses(monthIndex: number, currentMonthIndex: number): { [key: string]: boolean } {\r\n return {\r\n 'calendar--month-hide': !this.isDisplayVertical && !(monthIndex === currentMonthIndex || monthIndex === currentMonthIndex + this.calendarNumberOfMonthsToShow - 1)\r\n };\r\n },\r\n\r\n\r\n getDayDate(day: CalendarDay): Date | null {\r\n const dateParts = day.KEY.split('-');\r\n const date = new Date(parseInt(dateParts[0], 10), parseInt(dateParts[1], 10) - 1, parseInt(dateParts[2], 10));\r\n\r\n return (!isNaN(date.getTime())) ? date : null;\r\n },\r\n scrollToCheckIn() {\r\n const checkInMonthNode = this.$refs['month-' + this.checkInYear + '-' + this.checkInMonth] as HTMLDivElement | null;\r\n const viewportNode = this.$refs.viewport as HTMLDivElement | null;\r\n\r\n if (checkInMonthNode && viewportNode) {\r\n viewportNode.scrollTop = checkInMonthNode.offsetTop || 0;\r\n }\r\n },\r\n initializeCalendar() {\r\n requestAnimationFrame(() => {\r\n this.initialCheckInDate = this.$store.state.checkInDate || this.$store.state.bookingLinkData.start;\r\n this.initialCheckOutDate = this.$store.state.checkOutDate || this.$store.state.bookingLinkData.end;\r\n this.$store.commit('updateCheckInDate', this.initialCheckInDate);\r\n this.$store.commit('updateCheckOutDate', this.initialCheckOutDate);\r\n this.scrollToCheckIn();\r\n\r\n this.calendarInitialized = true;\r\n });\r\n },\r\n loadTemplate(forceReload = false) {\r\n if (!this.calendarLoaded || forceReload) {\r\n this.loadCalendar();\r\n }\r\n },\r\n async loadCalendar() {\r\n const currentDate = new Date();\r\n const firstDate = new Date(currentDate.getFullYear(), currentDate.getMonth());\r\n let allMonths = [];\r\n\r\n for (let i = 0; i <= this.calendarMonthsToShow; i++) {\r\n const newDate = window.pepDateFunctions.addMonths(firstDate, i);\r\n allMonths.push(newDate.getFullYear() + '-' + (newDate.getMonth() + 1));\r\n }\r\n\r\n try {\r\n const response = await fetch('/library/api/resnet.php', {\r\n method: 'POST',\r\n cache: 'no-cache',\r\n headers: {\r\n // 'Content-type': 'application/x-www-form-urlencoded',\r\n 'Content-type': 'application/json',\r\n 'Accept': 'application/json'\r\n },\r\n redirect: 'follow',\r\n body: JSON.stringify({\r\n ACTION: 'GET_WIDGET_CALENDAR',\r\n MONTHS: allMonths,\r\n CHECK_IN_DATE: this.$store.state.bookingLinkData.start || this.$store.state.checkInDate,\r\n CHECK_OUT_DATE: this.$store.state.bookingLinkData.end || this.$store.state.checkOutDate,\r\n PAGE_ID: this.$store.getters.bookingLinkRoomPageId || this.pageId,\r\n CALLBACK: this.loadCalendarCallback,\r\n USE_VUE: 'YES',\r\n SHOW_SPECIAL: this.showSpecialOffers ? 'YES' : 'NO',\r\n DATA_ONLY: 'YES'\r\n })\r\n });\r\n const json: CalendarDataServerResponse | null = await response.json();\r\n if (json?.STATUS === 'SUCCESS') {\r\n //dynamically update the template render and static render functions for the component\r\n this.calendarData = json.DATA.CALENDAR;\r\n this.updateCallback = json.DATA['CALENDAR-CALLBACK-UPDATE'];\r\n this.widgetClasses = json.DATA['CALENDAR-WIDGET-CLASSES'];\r\n this.calendarLoaded = true;\r\n this.$emit('loaded');\r\n this.initializeCalendar();\r\n }\r\n } catch (e) {\r\n const error = e as Error;\r\n window.pepTracking.event('JS Error', 'Get Rate calendar', error.message, 0, true);\r\n\r\n $.ajax({\r\n url: '/library/api/capture-js-error.php',\r\n dataType: 'json',\r\n type: 'post',\r\n data: {\r\n je_message: 'Get Rate Calendar',\r\n je_source: 'hotelCalendar.vue',\r\n je_lineno: 0,\r\n je_colno: 0,\r\n je_url: window.location.href,\r\n je_stack: error.message\r\n }\r\n });\r\n }\r\n },\r\n\r\n dateSelectCallback() {\r\n if (this.$store.state.checkInDate && this.$store.state.checkOutDate && (this.$store.state.checkInDate !== this.initialCheckInDate || this.$store.state.checkOutDate !== this.initialCheckOutDate)) {\r\n this.changeDatesCallback(this.$store.state.checkInDate, this.$store.state.checkOutDate, this.initialCheckInDate, this.initialCheckOutDate, this.selectedDates);\r\n }\r\n },\r\n\r\n seekMonth(direction: number) {\r\n if (direction < 0 && this.calendarCurrentMonthIndex > 0) {\r\n this.calendarCurrentMonthIndex--;\r\n } else if (direction > 0 && this.calendarCurrentMonthIndex < this.calendarMonthsToShow - 1) {\r\n this.calendarCurrentMonthIndex++;\r\n }\r\n },\r\n\r\n\r\n isDayNoData(day: CalendarDay): boolean {\r\n return day.BLANK || day.BEFORE_TODAY || (day.DISPLAY_RATES && day.PRICE === 0);\r\n },\r\n\r\n getDayObjectForDate(date: string | Date): CalendarDay | null {\r\n const dateParts = (date instanceof Date)\r\n ? [date.getFullYear(), date.getMonth() + 1, date.getDate()]\r\n : /^\\d{4}-\\d{2}-\\d{2}$/.exec(date);\r\n if (dateParts) {\r\n const yearMonth = dateParts[0] + '-' + dateParts[1];\r\n return this.calendarData[yearMonth]?.[dateParts[2]] || null;\r\n }\r\n\r\n return null;\r\n }\r\n }\r\n})\r\n","import { render, staticRenderFns } from \"./hotelFilterWidget.vue?vue&type=template&id=57886331&scoped=true\"\nimport script from \"./hotelFilterWidget.vue?vue&type=script&lang=ts\"\nexport * from \"./hotelFilterWidget.vue?vue&type=script&lang=ts\"\nimport style0 from \"./hotelFilterWidget.vue?vue&type=style&index=0&id=57886331&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"57886331\",\n null\n \n)\n\nexport default component.exports","\r\n/*!\r\n * Copyright (C) 2022-2025, Peppermill Inc.\r\n * All rights reserved.\r\n *\r\n * Redistribution and use in source and binary forms, with or without\r\n * modification, are not permitted.\r\n *//*\r\n *\t\t2022-08-17\r\n *\t\t\t- Refactor filter-widget.js functionality to component.\r\n *\r\n *\t\t2022-08-19\r\n *\t\t\t- now uses .\r\n *\r\n *\t\t2022-08-31\r\n *\t\t\t- now sends DerbySoft ARI pixel in production.\r\n *\r\n *\t\t2022-09-27\r\n *\t\t\t- Fix PRIVLINE special offer redirect in .\r\n *\r\n *\t\t2022-10-14\r\n *\t\t\t- Give offerCodes computed property in the default value of this.offerCode.\r\n *\r\n * 2023-04-03 (jhoward)\r\n * - Refactor to use TypeScript and type all objects, function returns and arguments.\r\n * - Add ReservationDataCache interface in .\r\n * - Do not map any state in , instead use this.$store.state...\r\n * - Add ::selectedFilterCount computed property.\r\n * - Watch selected filters in and update UX based on what's selected.\r\n * - Close filter dialog in when click event is fired on document.\r\n * - Show \"no rooms found\" dialog in when filters are too specific.\r\n *\r\n * 2023-05-24 (jhoward)\r\n * - now maps checkInDate and checkOutDate from the store so they can be watched.\r\n *\r\n * 2023-07-13 (jhoward)\r\n * - sets both UA and GA4 linkers.\r\n *`\r\n * 2023-08-15 (jhoward)\r\n * - Do not request hotel rate data if no rooms are found on the page in .\r\n *`\r\n * 2024-06-10 (jhoward)\r\n * - Refactor to use new component.\r\n *`\r\n * 2024-06-17 (jhoward)\r\n * - Fix Private Line form input type.\r\n *`\r\n * 2024-06-19 (jhoward)\r\n * - Fix \"CHECK RATES\" button in when not on /resort page.\r\n * - Fix mobile calendar grid in .\r\n *\r\n *\t\t2024-07-09 (jhoward)\r\n *\t\t\t- Fix the number of months being shown at once in .\r\n *\r\n *\t\t2024-11-18 (jhoward)\r\n *\t\t\t- Refactor check in/out date initialization logic to use querystring data first in .\r\n *\r\n *\t\t2024-12-17 (jhoward)\r\n *\t\t\t- Fix redirecting user to booking engine when offer code is supplied in .\r\n *\r\n *\t\t2025-01-28 (jhoward)\r\n *\t\t\t- Fix SSL Warning dialog \"CONTINUE TO BOOK\" button in .\r\n */\r\n\r\nimport {ComponentPublicInstance, defineComponent} from \"vue\";\r\nimport WidgetFilters from \"../widget-filters.vue\";\r\nimport HotelCalendar from \"./hotelCalendar.vue\";\r\nimport {\r\n IntersectionObserverFallback,\r\n IntersectionObserverFallbackObject\r\n} from \"../../helpers/IntersectionObserverFallback\";\r\nimport {\r\n FilterCache, HotelFilterWidgetSelections,\r\n PageListRoomComponent,\r\n ReservationDataCache,\r\n RoomAvailabilityData,\r\n RoomAvailabilityRoomType\r\n} from \"./defs\";\r\nimport {StateFilterSelected} from \"../../store/hotel-rooms\";\r\nimport {mapGetters, mapState} from \"vuex\";\r\nimport LoadingSpinner from \"../LoadingSpinner.vue\";\r\n\r\ninterface HotelRoomDomNode extends HTMLDivElement {\r\n __vue__: PageListRoomComponent;\r\n}\r\n\r\ninterface SelectedFilter {\r\n accessibility: string[];\r\n bed_type: string[];\r\n price: string[];\r\n smoking: string[];\r\n sq_ft: string[];\r\n}\r\n\r\nexport default defineComponent({\r\n name: 'hotelFilterWidget',\r\n components: {\r\n LoadingSpinner,\r\n WidgetFilters,\r\n HotelCalendar\r\n },\r\n props: {\r\n filterType: {\r\n type: String,\r\n default: 'SCROLL'\r\n },\r\n minCheckInDate: {\r\n type: String,\r\n required: true\r\n },\r\n minCheckOutDate: {\r\n type: String,\r\n required: true\r\n }\r\n },\r\n mounted() {\r\n $(this.initialize);\r\n },\r\n data() {\r\n return {\r\n isInitialized: false,\r\n\r\n isRoomDataLoading: false,\r\n\r\n currentScroll: window.scrollY,\r\n currentWindowHeight: window.innerHeight,\r\n scrollOffset: 64,\r\n\r\n savedResData: {} as ReservationDataCache,\r\n\r\n filterCacheLabel: 'hotel-filter-widget-selections',\r\n savedFilterData: {} as FilterCache,\r\n\r\n offerCode: '',\r\n iata: '',\r\n\r\n calendarComponent: '',\r\n calendarOpenUpward: false,\r\n calendarLastScrollRender: -1,\r\n calendarLastWindowHeightRender: -1,\r\n calendarMonthNodes: [] as HTMLElement[],\r\n calendarLoaded: false,\r\n calendarOpen: false,\r\n\r\n userHasScrolled: false,\r\n scrollTimer: -1,\r\n\r\n isFilterOpen: false,\r\n\r\n observerTop: null as IntersectionObserver | IntersectionObserverFallbackObject | null,\r\n observerStickyStuck: false,\r\n\r\n hotelPageLinkGroupNodes: [] as HTMLDivElement[],\r\n hotelRoomNodes: [] as HotelRoomDomNode[],\r\n\r\n lastRateFetchCheckInDate: null,\r\n lastRateFetchCheckOutDate: null,\r\n\r\n filterUpdateTimer: -1,\r\n filterUpdateTimeout: 132\r\n };\r\n },\r\n computed: {\r\n ...mapGetters(['selectedFilters']),\r\n ...mapState(['checkInDate', \"checkOutDate\"]),\r\n selectedFilterCount(): number {\r\n return Object.keys(this.$store.getters.selectedFilters).length;\r\n },\r\n selectedFilterLabel() {\r\n let selectedFilterTypesFound = 0;\r\n let output = 'Choose Filters';\r\n for (let key in this.$store.getters.selectedFilters) {\r\n if (this.$store.getters.selectedFilters[key].length) {\r\n selectedFilterTypesFound++;\r\n }\r\n }\r\n if (1 < selectedFilterTypesFound) {\r\n output = selectedFilterTypesFound + ' Filter Types Selected';\r\n } else if (1 === selectedFilterTypesFound) {\r\n output = selectedFilterTypesFound + ' Filter Type Selected';\r\n }\r\n\r\n return output;\r\n },\r\n containerClasses() {\r\n return {\r\n initialized: this.isInitialized,\r\n 'sticky-stuck': this.observerStickyStuck\r\n };\r\n },\r\n calendarWrapperClasses() {\r\n return {\r\n hide: !this.calendarOpen,\r\n 'open-upward': this.calendarOpenUpward\r\n };\r\n },\r\n\r\n offerCodes() {\r\n let output = [this.offerCode];\r\n Array.from(this.hotelRoomNodes).forEach(hotelRoomNode => {\r\n hotelRoomNode.__vue__.offerCodes.forEach(offerCode => {\r\n if (-1 === output.indexOf(offerCode)) {\r\n output.push(offerCode);\r\n }\r\n });\r\n });\r\n return output;\r\n },\r\n\r\n checkInDateFormatted(): string {\r\n if (this.$store.state.checkInDate) {\r\n return this.reservationWidgetPrepareDate(this.$store.state.checkInDate);\r\n }\r\n\r\n return '';\r\n },\r\n checkOutDateFormatted(): string {\r\n if (this.$store.state.checkOutDate) {\r\n return this.reservationWidgetPrepareDate(this.$store.state.checkOutDate);\r\n }\r\n\r\n return '';\r\n }\r\n },\r\n watch: {\r\n selectedFilters(): void {\r\n //- recalculate scroll position for card fade-in [DONE]\r\n // - set \"view all\" for all hotel page link groups [DONE]\r\n // - \"scroll\" to the closest room type in the same tower being looked at\r\n //- show \"no rooms available\" if needed [DONE]\r\n clearTimeout(this.filterUpdateTimer);\r\n this.filterUpdateTimer = window.setTimeout(() => {\r\n this.hotelPageLinkGroupNodes.forEach(pageLinkGroupNode => {\r\n //make sure all room types are available in this group\r\n pageLinkGroupNode.classList.add('show-all-items');\r\n\r\n //check if any rooms are available\r\n if (!pageLinkGroupNode.querySelectorAll('.item:not(.hide)').length) {\r\n pageLinkGroupNode.classList.add('page-links-all_items_hidden');\r\n } else {\r\n pageLinkGroupNode.classList.remove('page-links-all_items_hidden');\r\n }\r\n\r\n // window.resetPageLinks();\r\n window.recalcPageLinks(true);\r\n\r\n //scroll to the first room type in the tower being looked at\r\n const currentScrollPosition = document.querySelector('html')?.scrollTop || 0;\r\n let newScrollPosition = currentScrollPosition;\r\n for (let i = 0, l = this.hotelPageLinkGroupNodes.length; i < l; i++) {\r\n if (this.hotelPageLinkGroupNodes[i].offsetTop > currentScrollPosition) {\r\n break;\r\n }\r\n newScrollPosition = this.hotelPageLinkGroupNodes[i].offsetTop;\r\n const viewportNode: HTMLElement | null = this.hotelPageLinkGroupNodes[i].querySelector(':scope > .viewport');\r\n if (viewportNode) {\r\n newScrollPosition += viewportNode.offsetTop;\r\n }\r\n }\r\n window.scrollTo({\r\n top: newScrollPosition\r\n });\r\n });\r\n }, this.filterUpdateTimeout);\r\n },\r\n\r\n savedFilterData(): void {\r\n //HANDLE CHECK IN/OUT DATES\r\n this.setCheckInAndCheckOutDates();\r\n\r\n //HANDLE OFFER CODE\r\n if (this.savedResData.code) {\r\n this.offerCode = this.savedResData.code;\r\n }\r\n },\r\n offerCode(): void {\r\n this.saveOfferCodeForLater();\r\n },\r\n\r\n calendarOpen(): void {\r\n this.checkCalendarBounds();\r\n },\r\n\r\n checkInDate(): void {\r\n if (this.$store.state.checkInDate && this.$store.state.checkOutDate) {\r\n window.hotelRoomsVueApp.saveReservationSelections($(this.$el).data('initialized', this.isInitialized), this.$store.state.checkInDate, this.$store.state.checkOutDate);\r\n }\r\n },\r\n checkOutDate(): void {\r\n if (this.$store.state.checkInDate && this.$store.state.checkOutDate) {\r\n window.hotelRoomsVueApp.saveReservationSelections($(this.$el).data('initialized', this.isInitialized), this.$store.state.checkInDate, this.$store.state.checkOutDate);\r\n }\r\n }\r\n },\r\n methods: {\r\n initialize() {\r\n document.addEventListener('click', () => {\r\n this.calendarOpen = false;\r\n this.isFilterOpen = false;\r\n }, {passive: true});\r\n document.addEventListener('scroll', () => {\r\n this.currentScroll = window.scrollY;\r\n }, {\r\n passive: true\r\n });\r\n\r\n if (window.hasOwnProperty('pepvalidateInitForm')) {\r\n window.pepvalidateInitForm.call(this.$refs.form as HTMLFormElement);\r\n }\r\n\r\n this.getSavedReservationData();\r\n\r\n this.getSavedFilterData();\r\n\r\n this.setCheckInAndCheckOutDates();\r\n\r\n this.scrollOffset = this.$el.clientHeight;\r\n\r\n this.updateObserverOptions();\r\n\r\n this.updateHotelRoomNodes();\r\n\r\n requestAnimationFrame(this.checkCalendarBounds);\r\n\r\n this.getRoomData();\r\n\r\n window.ajaxLinkRegisterCallback(\r\n 'SSL-WARNING',\r\n () => {\r\n this.filterSubmitHandler((new CustomEvent('click', {detail: true})));\r\n }\r\n );\r\n\r\n this.isInitialized = true;\r\n },\r\n setCheckInAndCheckOutDates(): void {\r\n const startQuerystringDate = window.hotelRoomsVueApp.formatYYYYMMDDToDateObject(window.pepHelperFunctions.getParameterByName('start'));\r\n const endQuerystringDate = window.hotelRoomsVueApp.formatYYYYMMDDToDateObject(window.pepHelperFunctions.getParameterByName('end'));\r\n\r\n if (startQuerystringDate && endQuerystringDate) {\r\n window.pepConsole.log('setCheckInAndCheckOutDates', 'querystring', startQuerystringDate, endQuerystringDate);\r\n this.$store.commit(\"updateCheckInDate\", startQuerystringDate);\r\n this.$store.commit(\"updateCheckOutDate\", endQuerystringDate);\r\n } else if (this.savedResData.checkin) {\r\n window.pepConsole.log('setCheckInAndCheckOutDates', 'savedResData', this.savedResData.checkin, this.savedResData.checkout);\r\n this.$store.commit(\"updateCheckInDate\", new Date(this.savedResData.checkin));\r\n\r\n if (this.savedResData.checkout) {\r\n this.$store.commit('updateCheckOutDate', new Date(this.savedResData.checkout));\r\n } else {\r\n this.$store.commit('updateCheckOutDate', window.hotelRoomsVueApp.addDays(this.$store.state.checkInDate, 2));\r\n }\r\n } else if (this.minCheckInDate.length) {\r\n window.pepConsole.log('setCheckInAndCheckOutDates', 'minCheckInDate', this.minCheckInDate);\r\n const newCheckInDate = new Date(this.minCheckInDate);\r\n if (!!newCheckInDate) {\r\n this.$store.commit('updateCheckInDate', newCheckInDate);\r\n this.$store.commit('updateCheckOutDate', window.hotelRoomsVueApp.addDays(this.$store.state.checkInDate, 2));\r\n }\r\n }\r\n },\r\n getSavedReservationData(): void {\r\n this.savedResData = window.hotelRoomsVueApp.getReservationSelections();\r\n if (this.savedResData.code) {\r\n this.offerCode = this.savedResData.code;\r\n }\r\n if (this.savedResData.iata) {\r\n this.iata = this.savedResData.iata;\r\n }\r\n },\r\n getSavedFilterData() {\r\n const cachedFilterData: {\r\n DATA: HotelFilterWidgetSelections\r\n } | null = window.pepHelperFunctions.getCachedData(this.filterCacheLabel, 1800000) || null;\r\n if (cachedFilterData?.DATA?.filters) {\r\n const filterCache = cachedFilterData.DATA.filters;\r\n for (let key in filterCache) {\r\n //@ts-ignore\r\n filterCache[key].forEach(value => {\r\n this.$store.commit('updateFilter', {\r\n key,\r\n value,\r\n selected: true\r\n });\r\n });\r\n }\r\n }\r\n },\r\n setupUserScrollDetection() {\r\n //TODO: need to make a bit smarter, if you scroll to rooms, then disable for page load, otherwise make sure to show room\r\n window.addEventListener('scroll', this.setUserHasScrolled);\r\n window.addEventListener('touchstart', this.setUserHasScrolled);\r\n },\r\n setUserHasScrolled(event: Event | TouchEvent) {\r\n window.clearTimeout(this.scrollTimer);\r\n this.userHasScrolled = true;\r\n event?.target?.removeEventListener('scroll', this.setUserHasScrolled);\r\n event?.target?.removeEventListener('touchstart', this.setUserHasScrolled);\r\n },\r\n getRoomData() {\r\n //TODO: setup caching with localStorage\r\n const hotelRoomPageIds = this.getHotelRoomPageIds();\r\n if (\r\n hotelRoomPageIds.length\r\n && this.$store.state.checkInDate\r\n && this.$store.state.checkOutDate\r\n && (\r\n this.$store.state.checkInDate !== this.lastRateFetchCheckInDate\r\n || this.$store.state.checkOutDate !== this.lastRateFetchCheckOutDate\r\n )\r\n ) {\r\n this.isRoomDataLoading = true;\r\n this.$store.commit('updateState', ['isRoomAvailabilityLoaded', false]);\r\n fetch('/library/api/room-rates.php', {\r\n method: 'POST',\r\n cache: 'no-cache',\r\n headers: {\r\n 'Content-type': 'application/json',\r\n 'Accept': 'application/json'\r\n },\r\n redirect: 'follow',\r\n body: JSON.stringify({\r\n ACTION: 'GET_AVAILABLE_ROOMS_FOR_PAGES_BY_DATES',\r\n OFFER_CODES: this.offerCodes,\r\n START_DATE: window.hotelRoomsVueApp.formatDateObjectYYYYMMDD(this.$store.state.checkInDate),\r\n END_DATE: window.hotelRoomsVueApp.formatDateObjectYYYYMMDD(this.$store.state.checkOutDate),\r\n PAGE_IDS: hotelRoomPageIds\r\n })\r\n })\r\n .then(response => {\r\n return response.json();\r\n })\r\n .then(json => {\r\n if (\r\n 'object' === typeof json\r\n && json.hasOwnProperty('STATUS')\r\n && json.hasOwnProperty('DATA')\r\n && json.STATUS === 'SUCCESS'\r\n && Array.isArray(json.DATA.ROOMS)\r\n ) {\r\n this.lastRateFetchCheckInDate = this.$store.state.checkInDate;\r\n this.lastRateFetchCheckOutDate = this.$store.state.checkOutDate;\r\n this.$store.commit('updateRooms', json.DATA.ROOMS);\r\n this.$store.commit('updateAdjacentDates', json.DATA.ADJACENT_DATES || []);\r\n this.$store.commit('updateState', ['isRoomAvailabilityLoaded', true]);\r\n\r\n this.sendDSPixel();\r\n }\r\n })\r\n .catch(e => {\r\n window.pepTracking.event('JS Error', 'Get Hotel Room Availability', e.message, 0, true);\r\n })\r\n .finally(() => {\r\n this.isRoomDataLoading = false;\r\n });\r\n }\r\n },\r\n getHotelRoomPageIds() {\r\n let output: number[] = [];\r\n this.hotelRoomNodes.forEach(hotelRoomNode => {\r\n if (hotelRoomNode.dataset.pageId && -1 === output.indexOf(parseInt(hotelRoomNode.dataset.pageId, 10))) {\r\n output.push(parseInt(hotelRoomNode.dataset.pageId, 10));\r\n }\r\n });\r\n //add page id for hotel room page if current page is for a hotel room\r\n if (document.querySelector('#container.hotel-page')) {\r\n output.push(parseInt(document.querySelector('body')?.dataset?.i || '0', 10));\r\n }\r\n return output;\r\n },\r\n\r\n\r\n reservationWidgetPrepareDate(date: Date) {\r\n const newDay = date.getDate().toString(10);\r\n const newSuffix = (newDay === '11' || newDay === '12' || newDay === '13')\r\n ? 'th'\r\n : (newDay.substr(-1, 1) === '1')\r\n ? 'st'\r\n : (newDay.substr(-1, 1) === '2')\r\n ? 'nd'\r\n : (newDay.substr(-1, 1) === '3')\r\n ? 'rd'\r\n : 'th';\r\n\r\n return window.pepDateFunctions.language.en.daysShort[date.getDay()] + ', ' + window.pepDateFunctions.language.en.monthsShort[date.getMonth()] + ' ' + newDay + newSuffix;\r\n },\r\n\r\n\r\n showCalendars(event?: KeyboardEvent) {\r\n if (\r\n (!this.calendarOpen && !event)\r\n || (!!event && event.key === 'Enter')\r\n ) {\r\n event?.preventDefault();\r\n event?.stopPropagation();\r\n if ('' === this.calendarComponent) {\r\n this.calendarComponent = 'hotel-calendar';\r\n }\r\n\r\n this.calendarOpen = true;\r\n }\r\n },\r\n setDatesFromCalendar(dayCheckIn: Date, dayCheckOut: Date, initialCheckIn: Date, initialCheckOut: Date, selectedDates: string[]): void {\r\n if (document.querySelector('html')?.classList.contains('ui-mobile')) {\r\n this.getRoomData();\r\n }\r\n },\r\n\r\n\r\n filterSubmitHandler(event: Event) {\r\n window.pepConsole.group('filterSubmitHandler');\r\n window.pepConsole.log('this.offerCode.length', this.offerCode.length);\r\n window.pepConsole.log('this.filterType.toUpperCase()', this.filterType.toUpperCase(), 'SCROLL' === this.filterType.toUpperCase());\r\n // window.pepConsole.log('is not mobile', !document.querySelector('html')?.classList.contains('ui-mobile'));\r\n event.preventDefault();\r\n event.stopPropagation();\r\n event.stopImmediatePropagation();\r\n if (this.offerCode.length) {\r\n window.pepConsole.log('event.detail', ('detail' in event) ? !!event.detail : false);\r\n this.filterSubmitHandlerOfferCode(('detail' in event) ? !!event.detail : false);\r\n } else if ('SCROLL' === this.filterType.toUpperCase()/* && !document.querySelector('html')?.classList.contains('ui-mobile')*/) {\r\n window.pepConsole.log('run getRoomData()');\r\n this.getRoomData();\r\n if (!event.detail || '' + event.detail !== 'skipScroll') {\r\n this.scrollToRoom(0, true);\r\n }\r\n } else {\r\n window.location.href = '/resort/?STR=1';\r\n }\r\n window.pepConsole.groupEnd();\r\n },\r\n scrollToRoom(timeout: number, scrollFromAnywhere: boolean) {\r\n this.setupUserScrollDetection();\r\n\r\n $(window)\r\n .trigger('resize.page-links', [() => {\r\n this.scrollTimer = window.setTimeout(() => {\r\n this.scrollToRoomPageLinkCallback(timeout, scrollFromAnywhere);\r\n }, timeout);\r\n }]);\r\n },\r\n scrollToRoomPageLinkCallback(timeout: number, scrollFromAnywhere: boolean) {\r\n let scrollDuration = 250;\r\n let scrollToContainer = false;\r\n\r\n clearTimeout(this.scrollTimer);\r\n\r\n if (!this.userHasScrolled || (document.querySelector('html') as HTMLElement | null)?.classList?.contains('ui-mobile')) {\r\n\r\n //run after recalculating page link position data\r\n const visibleHotelRoomNodes = this.hotelRoomNodes.filter(hotelRoomNode => {\r\n return !hotelRoomNode.classList.contains('hide');\r\n });\r\n\r\n //scroll if there are visible hotel room nodes, and they aren't all visible\r\n if (visibleHotelRoomNodes.length && (scrollFromAnywhere || (visibleHotelRoomNodes.length < this.hotelRoomNodes.length))) {\r\n\r\n //scroll to first room that still meets the criteria of the filters if it's below the current viewport\r\n if (scrollFromAnywhere || (this.currentScroll + this.currentWindowHeight < parseInt(visibleHotelRoomNodes[0].dataset?.offsetTop || '0', 10) - (this.scrollOffset / 2 - (document.querySelector('#header')?.clientHeight || 0) * 2))) {\r\n\r\n const filterWidgetHeight = (document.querySelector('html')?.classList.contains('ui-mobile'))\r\n ? (this.$refs.mobileCta as HTMLElement | null)?.clientHeight || 0\r\n : this.$el.clientHeight;\r\n const containerOffset = (scrollToContainer)\r\n ? $(visibleHotelRoomNodes[0])?.closest('.body-container')?.offset()?.top || 0\r\n : $(visibleHotelRoomNodes[0])?.offset()?.top || 0 - 48;\r\n const topOffset = containerOffset - filterWidgetHeight - (document.querySelector('#header')?.clientHeight || 0);\r\n\r\n if (0 === scrollDuration) {\r\n window.scrollTo({\r\n top: topOffset,\r\n behavior: 'auto'\r\n });\r\n } else if ('scrollBehavior' in document.documentElement.style) {\r\n window.scrollTo({\r\n top: topOffset,\r\n behavior: 'smooth'\r\n });\r\n } else {\r\n $('html, body')\r\n .animate({scrollTop: topOffset}, scrollDuration, 'easeInOutQuad');\r\n }\r\n }\r\n } else if (!visibleHotelRoomNodes.length) {\r\n window.showOverlayDialog({\r\n alertMode: true,\r\n confirmAccept: 'CLOSE',\r\n confirmTitle: 'No Matches Found',\r\n confirmBody: 'You can remove filters or try different dates to find available rooms.',\r\n callback: 'GENERIC-DIALOG-CLOSE'\r\n });\r\n }\r\n }\r\n },\r\n filterSubmitHandlerOfferCode(forceClick: boolean = false) {\r\n window.pepConsole.group('filterSubmitHandlerOfferCode()');\r\n window.pepConsole.log('window.sslNotify.show', window.sslNotify.show);\r\n window.pepConsole.log('forceClick', forceClick);\r\n if (window.sslNotify.show && !forceClick) {\r\n this.showSslNotification();\r\n } else {\r\n this.handleOfferBookingLink();\r\n }\r\n window.pepConsole.groupEnd();\r\n },\r\n handleOfferBookingLink() {\r\n const linkParameters = this.getBookingLinkParameters();\r\n\r\n if ('privline' === linkParameters.o.toLowerCase()) {\r\n window.ajaxLinkRegisterCallback(\r\n 'PRIVLINE-ACCOUNT-CODE',\r\n function (this: HTMLDivElement, companyCode, offerCode, start, end) {\r\n //console.log(companyCode, offerCode, start, end);\r\n $('body')\r\n .children('.confirm')\r\n .filter('.dialog')\r\n .trigger('close');\r\n\r\n if (typeof companyCode === 'string' && $.trim(companyCode).length > 0 && typeof offerCode === 'string' && typeof start === 'string' && typeof end === 'string') {\r\n const gaLinker = window.pepTracking.getGALinkerParam();\r\n const ga4Linker = window.pepTracking.getGA4LinkerParam();\r\n const params: {\r\n o: string;\r\n lmsref: string;\r\n start: string;\r\n end: string;\r\n _ga?: string;\r\n _gl?: string;\r\n } = {\r\n o: offerCode,\r\n lmsref: companyCode,\r\n start: start,\r\n end: end\r\n };\r\n\r\n //add ga linker param\r\n if (gaLinker.length > 0) params._ga = gaLinker;\r\n if (ga4Linker.length > 0) params._gl = ga4Linker;\r\n //redirect to the offer page\r\n window.location.href = '/offers/?' + $.param(params);\r\n } else {\r\n window.showOverlayDialog({\r\n alertMode: true,\r\n confirmAccept: 'OK',\r\n confirmTitle: 'Invalid Company Code',\r\n confirmBody: 'Please enter a valid company code to continue.'\r\n }, this);\r\n }\r\n }\r\n );\r\n\r\n //force the user to enter a Reference ID for the PRIVLINE offer\r\n window.showOverlayDialog({\r\n confirmAccept: 'OK',\r\n confirmDeny: 'CANCEL',\r\n confirmTitle: 'Enter Account Code',\r\n confirmBody: 'Please enter your company\\'s Private Line account code.

 ',\r\n callback: 'PRIVLINE-ACCOUNT-CODE'\r\n }, this.$el as HTMLElement);\r\n } else {\r\n setTimeout(function () {\r\n window.location.href = '/offers/?' + $.param(linkParameters);\r\n }, 66);\r\n }\r\n },\r\n getBookingLinkParameters() {\r\n let parameters: {\r\n o: string;\r\n start?: string;\r\n end?: string;\r\n _ga?: string;\r\n _gl?: string;\r\n iata?: string;\r\n } = {\r\n o: this.offerCode\r\n };\r\n const gaLinker = window.pepTracking.getGALinkerParam();\r\n const ga4Linker = window.pepTracking.getGA4LinkerParam();\r\n\r\n if (this.$store.state.checkInDate) {\r\n parameters.start = this.$store.state.checkInDate.getFullYear() + '-' + (this.$store.state.checkInDate.getMonth() + 1) + '-' + this.$store.state.checkInDate.getDate()\r\n }\r\n if (this.$store.state.checkOutDate) {\r\n parameters.end = this.$store.state.checkOutDate.getFullYear() + '-' + (this.$store.state.checkOutDate.getMonth() + 1) + '-' + this.$store.state.checkOutDate.getDate()\r\n }\r\n\r\n if (gaLinker.length) {\r\n parameters._ga = gaLinker;\r\n }\r\n\r\n if (ga4Linker.length) {\r\n parameters._gl = ga4Linker;\r\n }\r\n\r\n if (this.iata.length) {\r\n parameters.iata = this.iata;\r\n }\r\n\r\n return parameters;\r\n },\r\n reservationWidgetShowErrorMsg(msg: string, title?: string, sslWarning?: boolean): void {\r\n if (msg.length === 0) {\r\n return;\r\n }\r\n if (typeof title !== 'string') {\r\n title = '';\r\n }\r\n if (typeof sslWarning !== 'boolean') {\r\n sslWarning = false;\r\n }\r\n\r\n //close any current dialogs\r\n document.querySelectorAll('.dialog.confirm.active').forEach(dialogNode => {\r\n dialogNode.dispatchEvent(new CustomEvent('close'));\r\n });\r\n\r\n window.showOverlayDialog({\r\n alertMode: !sslWarning,\r\n confirmAccept: (sslWarning) ? 'Continue Anyway' : 'OK',\r\n confirmDeny: (sslWarning) ? 'CANCEL' : '',\r\n confirmTitle: (title.length) ? title : '',\r\n confirmBody: msg,\r\n callback: (sslWarning) ? 'SSL-WARNING' : ''\r\n }, this.$el as HTMLElement);\r\n },\r\n determineBookingPhoneNumber() {\r\n if (window.Modernizr.touchevents && (document.querySelector('html')?.classList.contains('ui-mobile') || document.querySelector('html')?.classList.contains('ui-tablet'))) {\r\n return '1-800-821-8568';\r\n }\r\n\r\n return '1-866-400-0519';\r\n },\r\n showSslNotification() {\r\n this.reservationWidgetShowErrorMsg('Your browser is out-of-date and no longer secure. To protect your information please use a newer browser or call the following phone number to book your reservation:

' + this.determineBookingPhoneNumber(), 'SSL Warning', true);\r\n fetch('/library/api/ssl-notify-errors.php', {\r\n method: 'POST',\r\n cache: 'no-cache',\r\n headers: {\r\n // 'Content-type': 'application/x-www-form-urlencoded',\r\n 'Content-type': 'application/json',\r\n 'Accept': 'application/json'\r\n },\r\n redirect: 'follow',\r\n body: JSON.stringify({\r\n page: window.location.href\r\n })\r\n })\r\n .catch(e => {\r\n window.pepTracking.event('JS Error', 'SSL Notify Logging AJAX', e.message, 0, true);\r\n });\r\n },\r\n\r\n\r\n resortPageButtonClick() {\r\n if (this.offerCode.length && !this.$el.classList.contains('sticky-stuck')) {\r\n (this.$refs.form as HTMLFormElement | null)?.dispatchEvent(new Event('submit'));\r\n } else {\r\n //if we're already looking at the reservation widget, then scroll to rooms\r\n if (!this.$el.classList.contains('sticky-stuck')) {\r\n this.calendarOpen = false;\r\n this.isFilterOpen = false;\r\n this.scrollToRoom(0, true);\r\n } else if ('scrollBehavior' in document.documentElement.style) {\r\n window.scrollTo({\r\n top: ($('#container')?.offset()?.top || 0) - ($('#header')?.height() || 0),\r\n behavior: 'smooth'\r\n });\r\n } else {\r\n $('html, body')\r\n .animate({scrollTop: ($('#container')?.offset()?.top || 0) - ($('#header')?.height() || 0)}, 350, 'easeInOutQuad');\r\n }\r\n }\r\n },\r\n nonResortPageButtonClick(event: MouseEvent) {\r\n if (this.offerCode.length) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n (this.$refs.form as HTMLFormElement | null)?.dispatchEvent(new Event('submit'));\r\n }\r\n },\r\n\r\n offerCodeKeyUpHandler(event: KeyboardEvent) {\r\n if (event.key === 'Enter') {\r\n const buttonNodes = this.$el.querySelectorAll('.non-resort-page, .filter-submit input');\r\n for (let i = 0, l = buttonNodes.length; i < l; i++) {\r\n if ('visible' === getComputedStyle(buttonNodes[i]).visibility) {\r\n buttonNodes[i].dispatchEvent(new Event('click'));\r\n break;\r\n }\r\n }\r\n }\r\n },\r\n saveOfferCodeForLater() {\r\n window.window.hotelRoomsVueApp.saveReservationSelections(\r\n $(this.$el).data('initialized', this.isInitialized),\r\n this.$store.state.checkInDate,\r\n this.$store.state.checkOutDate\r\n );\r\n },\r\n\r\n\r\n updateObserverOptions() {\r\n //remove old observers if needed\r\n if (this.observerTop) {\r\n this.observerTop.disconnect();\r\n }\r\n\r\n if ('IntersectionObserver' in window) {\r\n this.updateObserverOptionsIntersectionObserver();\r\n } else if ('requestAnimationFrame' in window) {\r\n this.updateObserverOptionsRequestAnimationFrame();\r\n }\r\n\r\n if (this.observerTop) {\r\n this.observerTop.observe(this.$refs.stickySentinelTop as HTMLElement);\r\n }\r\n },\r\n updateObserverOptionsIntersectionObserver() {\r\n this.observerTop = new IntersectionObserver((records) => {\r\n records.forEach(observerRecord => {\r\n const targetInfo = observerRecord.boundingClientRect;\r\n const rootBoundsInfo = observerRecord.rootBounds;\r\n\r\n if (rootBoundsInfo && targetInfo.bottom < rootBoundsInfo.top) {\r\n this.observerStickyStuck = true;\r\n }\r\n\r\n if (rootBoundsInfo && targetInfo.bottom >= rootBoundsInfo.top && targetInfo.bottom < rootBoundsInfo.bottom) {\r\n this.observerStickyStuck = false;\r\n }\r\n });\r\n }, {\r\n threshold: [0]\r\n });\r\n },\r\n updateObserverOptionsRequestAnimationFrame() {\r\n this.observerTop = IntersectionObserverFallback((observerFallback: IntersectionObserverFallbackObject) => {\r\n if (observerFallback.lastScrollCheck !== observerFallback.currentScroll) {\r\n observerFallback.lastScrollCheck = observerFallback.currentScroll;\r\n\r\n //get all bounding client rectangles\r\n const boundingRect = observerFallback.elementToObserve?.getBoundingClientRect();\r\n const rootBoundsInfo = observerFallback.rootBoundsInfo;\r\n\r\n if (boundingRect && boundingRect.bottom <= rootBoundsInfo.top) {\r\n this.observerStickyStuck = true;\r\n }\r\n\r\n if (boundingRect && boundingRect.bottom >= rootBoundsInfo.top && boundingRect.bottom <= rootBoundsInfo.bottom) {\r\n this.observerStickyStuck = false;\r\n }\r\n }\r\n });\r\n },\r\n updateHotelRoomNodes(): void {\r\n this.hotelPageLinkGroupNodes = Array.from(document.querySelectorAll('.body-container.page-links.type-HOTEL'));\r\n this.hotelRoomNodes = Array.from(document.querySelectorAll('.body-container.page-links.type-HOTEL .item'));\r\n },\r\n\r\n\r\n checkCalendarBounds() {\r\n if (\r\n (\r\n this.calendarLastScrollRender !== this.currentScroll\r\n || this.calendarLastWindowHeightRender !== this.currentWindowHeight\r\n )\r\n && this.calendarOpen\r\n ) {\r\n\r\n this.calendarLastScrollRender = this.currentScroll;\r\n this.calendarLastWindowHeightRender = this.currentWindowHeight;\r\n\r\n let openUpward = false;\r\n\r\n if (this.observerStickyStuck) {\r\n openUpward = false;\r\n } else {\r\n const $el = $(this.$el);\r\n const filterWidgetToTopOfViewport = ($el) ? ($el.offset()?.top || 0) - this.currentScroll : 0;\r\n const calendarWidgetTopOffset = this.$el.clientHeight;\t//calendar widget is docked to the bottom of the filter widget\r\n const calendarWidgetHeight = this.$el.querySelector('.calendar-wrapper')?.clientHeight || 0;\r\n const stickyFooterHeight = document.querySelector('#footer .above-the-fold')?.clientHeight || 0;\r\n const headerHeight = document.querySelector('#header')?.clientHeight || 0;\r\n\r\n //if the calendar widget will display below the fold, let's see if there is space to show above the widget\r\n if (filterWidgetToTopOfViewport + calendarWidgetTopOffset + calendarWidgetHeight > this.currentWindowHeight - stickyFooterHeight) {\r\n\r\n //calendar will be clipped to some degree if opened down\r\n if (filterWidgetToTopOfViewport - calendarWidgetHeight > headerHeight) {\r\n\r\n //looks like there is space to open the calendar widget upward\r\n openUpward = true;\r\n }\r\n }\r\n }\r\n\r\n this.calendarOpenUpward = openUpward;\r\n }\r\n\r\n requestAnimationFrame(this.checkCalendarBounds);\r\n },\r\n\r\n sendDSPixel: function () {\r\n const stayLength = window.hotelRoomsVueApp.daysBetween(this.$store.state.checkInDate, this.$store.state.checkOutDate);\r\n const allRoomTypes: RoomAvailabilityRoomType[] = this.$store.state.ROOMS.map((room: RoomAvailabilityData) => {\r\n return (Array.isArray(room.ROOM_TYPES))\r\n ? room.ROOM_TYPES.filter(roomType => !roomType.hasOwnProperty('MIN_STAY_DAYS') || roomType.MIN_STAY_DAYS <= stayLength)\r\n : [];\r\n })\r\n .reduce((acc: RoomAvailabilityRoomType[], carry: RoomAvailabilityRoomType[]) => acc.concat(carry), []);\r\n const cheapestRoomType = this.getCheapestRoomType(allRoomTypes);\r\n if (\r\n cheapestRoomType\r\n && cheapestRoomType.hasOwnProperty('ROOM_TOTAL_PRICE')\r\n && cheapestRoomType.hasOwnProperty('ROOM_CODE_WITH_WING')\r\n && cheapestRoomType.hasOwnProperty('ROOM_TITLE')\r\n ) {\r\n const priceSubtotal = cheapestRoomType.ROOM_TOTAL_PRICE;\r\n let taxAmount = priceSubtotal * 0.13;\r\n let feeAmount = 2 * stayLength;\r\n if (cheapestRoomType.hasOwnProperty('RESORT_FEE_RATE')) {\r\n const resortFeeAmount = cheapestRoomType.RESORT_FEE_RATE * stayLength;\r\n feeAmount += resortFeeAmount;\r\n taxAmount += resortFeeAmount * 0.13;\r\n }\r\n\r\n this.createDSPixel({\r\n check_in_date: window.hotelRoomsVueApp.formatDateObjectYYYYMMDD(this.$store.state.checkInDate),\r\n check_out_date: window.hotelRoomsVueApp.formatDateObjectYYYYMMDD(this.$store.state.checkOutDate),\r\n stay_length: stayLength,\r\n\r\n total_guests: 2,\r\n adults: 2,\r\n children: 0,\r\n\r\n price_base: priceSubtotal,\r\n price_tax_fees: taxAmount + feeAmount,\r\n price_total: priceSubtotal + taxAmount + feeAmount,\r\n price_currency: 'USD',\r\n\r\n room_type_id: (cheapestRoomType.hasOwnProperty('ROOM_CODE_WITH_WING')) ? cheapestRoomType.ROOM_CODE_WITH_WING : '',\r\n room_type: cheapestRoomType.ROOM_TITLE,\r\n\r\n rate_plan_id: 'INTERNT',\r\n rate_plan_name: 'INTERNT',\r\n\r\n event_type: 'rate_selection',\r\n });\r\n }\r\n },\r\n getCheapestRoomType(roomTypes: RoomAvailabilityRoomType[]): RoomAvailabilityRoomType | null {\r\n if (roomTypes.length) {\r\n return roomTypes.reduce((carryRoomType, currentRoomType) => {\r\n if (\r\n carryRoomType.hasOwnProperty('ROOM_TOTAL_PRICE')\r\n && currentRoomType.hasOwnProperty('ROOM_TOTAL_PRICE')\r\n && carryRoomType.ROOM_TOTAL_PRICE > currentRoomType.ROOM_TOTAL_PRICE\r\n ) {\r\n return currentRoomType;\r\n }\r\n\r\n return carryRoomType;\r\n });\r\n }\r\n\r\n return null;\r\n },\r\n createDSPixel(data: { [key: string]: string | number | null }) {\r\n window._bparams = $.extend({\r\n pixel_id: '10126',\r\n account_id: 'peppermill',\r\n is_landing_page: 'FALSE',\r\n hotel_id: '54908',\r\n rooms: 1\r\n }, data);\r\n\r\n //only send data on production site\r\n if ('dev.' !== location.host.substring(0, 4)) {\r\n const scriptNode = document.createElement('script');\r\n scriptNode.type = 'text/javascript';\r\n scriptNode.async = true;\r\n scriptNode.src = 'https://linkcenterus.derbysoftsec.com/pixel/v1/pixel.js?v=' + Math.round(new Date().getTime() / 1000);\r\n const s = document.querySelector('script');\r\n if (s && s.parentNode) {\r\n s.parentNode.insertBefore(scriptNode, s);\r\n }\r\n }\r\n },\r\n\r\n updateFilter(payload: StateFilterSelected) {\r\n this.$store.commit('updateFilter', {\r\n key: payload.key || '',\r\n value: payload.value || '',\r\n selected: payload.selected || false\r\n });\r\n },\r\n handleCalendarClose(): void {\r\n this.calendarOpen = false;\r\n (this.$refs.check_in_input as HTMLElement | null)?.focus();\r\n }\r\n }\r\n})\r\n","/*!\r\n * Copyright (C) 2022-2023, Peppermill Inc.\r\n * All rights reserved.\r\n *\r\n * Redistribution and use in source and binary forms, with or without\r\n * modification, are not permitted.\r\n *//*\r\n *\t\t2022-08-16\r\n *\t\t\t- Create intersection observer fallback script.\r\n *\r\n *\t\t2022-08-16\r\n *\t\t\t- Refactor IntersectionObserverFallback to use TypeScript.\r\n *\t\t\t- Add IntersectionObserverFallbackObject interface to IntersectionObserverFallback.ts.\r\n*/\r\n\r\nexport interface IntersectionObserverFallbackObject {\r\n currentScroll: number;\r\n requestID: number;\r\n elementToObserve: HTMLElement | null,\r\n lastScrollCheck: number;\r\n disconnect: () => void;\r\n resizeFunction: () => void;\r\n rootBoundsInfo: {\r\n top: number;\r\n bottom: number;\r\n },\r\n watchFunction: () => void;\r\n observe: (elementToObserve: HTMLElement) => void;\r\n}\r\n\r\nexport function IntersectionObserverFallback(observeCallback: (fallbackObject: IntersectionObserverFallbackObject) => void): IntersectionObserverFallbackObject {\r\n if ('function' !== typeof observeCallback) {\r\n observeCallback = function () {\r\n };\r\n }\r\n\r\n let fallbackObject: IntersectionObserverFallbackObject = {\r\n currentScroll: 0,\r\n requestID: 0,\r\n elementToObserve: null,\r\n lastScrollCheck: -1,\r\n disconnect: function () {\r\n cancelAnimationFrame(fallbackObject.requestID);\r\n\r\n fallbackObject.elementToObserve = null;\r\n fallbackObject.lastScrollCheck = -1;\r\n fallbackObject.requestID = 0;\r\n\r\n window.removeEventListener('resize', fallbackObject.resizeFunction);\r\n\r\n },\r\n resizeFunction: function () {\r\n fallbackObject.rootBoundsInfo = {\r\n top: 0,\r\n bottom: window.innerHeight\r\n };\r\n },\r\n rootBoundsInfo: {\r\n top: 0,\r\n bottom: window.innerHeight\r\n },\r\n watchFunction: function () {\r\n observeCallback(fallbackObject);\r\n fallbackObject.requestID = requestAnimationFrame(fallbackObject.watchFunction);\r\n },\r\n observe: function (elementToObserve: HTMLElement) {\r\n\r\n cancelAnimationFrame(fallbackObject.requestID);\r\n window.removeEventListener('resize', fallbackObject.resizeFunction);\r\n window.addEventListener('resize', fallbackObject.resizeFunction, {\r\n passive: true\r\n });\r\n\r\n fallbackObject.elementToObserve = elementToObserve;\r\n fallbackObject.requestID = requestAnimationFrame(fallbackObject.watchFunction);\r\n\r\n }\r\n };\r\n\r\n document\r\n .addEventListener('scroll', () => {\r\n fallbackObject.currentScroll = window.scrollY;\r\n }, {\r\n passive: true\r\n });\r\n\r\n return fallbackObject;\r\n}","var render = function render() {\n var _vm = this,\n _c = _vm._self._c,\n _setup = _vm._self._setupProxy\n return _c(\n \"div\",\n {\n staticClass: \"item hotel\",\n class: _vm.containerClasses,\n attrs: {\n \"data-page-id\": _vm.page.ID,\n \"aria-label\": \"Details for \" + _vm.page.TITLE + \" Room\",\n },\n },\n [\n _c(\n \"div\",\n {\n staticClass: \"img\",\n style: _vm.imageStyles,\n attrs: { \"data-img-src\": _vm.page.IMG_SRC },\n },\n [\n _c(\"hotel-room-icons\", {\n attrs: {\n \"room-data\": _vm.roomData,\n \"room-availability-data\": _vm.roomAvailabilityData,\n page: _vm.page,\n },\n }),\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"h3\",\n {\n staticClass: \"tooltip-dock-bottom\",\n attrs: { \"data-tooltip\": _vm.page.TITLE },\n },\n [\n _c(\"span\", { staticClass: \"clip\" }, [\n _vm._v(\"\\n \" + _vm._s(_vm.page.TITLE) + \"\\n \"),\n ]),\n ]\n ),\n _vm._v(\" \"),\n _c(\"hotel-room-call-to-action\", {\n attrs: {\n page: _vm.page,\n \"offer-codes\": _vm.offerCodes,\n \"show-learn-more-button\": \"\",\n \"add-resort-fee-to-room-rate\": \"\",\n },\n }),\n _vm._v(\" \"),\n _c(\"table\", { staticClass: \"details\", attrs: { role: \"presentation\" } }, [\n _c(\"tbody\", [\n _c(\"tr\", [\n _c(\"td\", { staticClass: \"filter-match-sq_ft\" }, [\n _vm._v(\"SIZE\"),\n _c(\"br\"),\n _vm._v(_vm._s(_vm.roomSqFt) + \" sq. ft.\"),\n ]),\n _vm._v(\" \"),\n _c(\"td\", { staticClass: \"filter-match-bed_type\" }, [\n _vm._v(_vm._s(_vm.bedType)),\n _c(\"br\"),\n _vm._v(_vm._s(_vm.bedCount)),\n ]),\n _vm._v(\" \"),\n _c(\"td\", { staticClass: \"filter-match-bath_type\" }, [\n _vm._v(\"BATHS\"),\n _c(\"br\"),\n _vm._v(_vm._s(_vm.searchData[\"BATH-COUNT\"])),\n ]),\n ]),\n ]),\n ]),\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function render() {\n var _vm = this,\n _c = _vm._self._c,\n _setup = _vm._self._setupProxy\n return _c(\n \"div\",\n { staticClass: \"cta\" },\n [\n !_vm.$store.state.isRoomAvailabilityLoaded\n ? _c(\"div\", { staticClass: \"price\" }, [_vm._v(\"...\")])\n : _vm.isAvailable\n ? _c(\n \"div\",\n { staticClass: \"price\" },\n [\n _vm.averagePricePreferred === 0\n ? _c(\"span\", { staticClass: \"rate\" }, [\n _vm._v(\n \"\\n $\" +\n _vm._s(Math.round(_vm.averagePriceStandardToDisplay)) +\n \"\\n \"\n ),\n _c(\"span\", { staticClass: \"less-emphasis\" }, [\n _vm._v(\"avg/night\"),\n ]),\n ])\n : _c(\"span\", { staticClass: \"rate\" }, [\n _c(\"span\", { staticClass: \"less-emphasis\" }, [\n _vm._v(\"Standard:\"),\n ]),\n _vm._v(\" \"),\n _c(\"span\", { staticClass: \"strike\" }, [\n _vm._v(\n \"$\" +\n _vm._s(Math.round(_vm.averagePriceStandardToDisplay))\n ),\n ]),\n _vm._v(\" \"),\n _c(\"span\", { staticClass: \"less-emphasis\" }, [\n _vm._v(\"avg/night\"),\n ]),\n _vm._v(\" \"),\n _c(\"br\"),\n _vm._v(\" \"),\n _c(\n \"span\",\n {\n staticClass: \"rate\",\n attrs: { \"data-tooltip\": _vm.preferredTooltipCopy },\n },\n [\n _c(\"span\", { staticClass: \"less-emphasis\" }, [\n _vm._v(\"Members:\"),\n ]),\n _vm._v(\n \" $ \" +\n _vm._s(\n Math.round(_vm.averagePricePreferredToDisplay)\n ) +\n \"\\n \"\n ),\n _c(\"span\", { staticClass: \"less-emphasis\" }, [\n _vm._v(\"avg/night\"),\n ]),\n ]\n ),\n ]),\n _vm._v(\" \"),\n _vm.roomAvailabilityData.ROOM_TYPES.length\n ? [\n !_vm.showRateDetails\n ? [\n _vm.addResortFeeToRoomRate\n ? _c(\n \"div\",\n { staticClass: \"less-emphasis rate-subtotal\" },\n [\n _c(\"span\", { staticClass: \"less-emphasis\" }, [\n _vm._v(\n \"\\n Room Rate $\" +\n _vm._s(\n _vm.formatAsDollarAmount(\n _vm.averageSubtotal\n )\n ) +\n \" avg/night\\n \"\n ),\n ]),\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.addResortFeeToRoomRate\n ? _c(\n \"div\",\n {\n staticClass: \"less-emphasis rate-resort-fee\",\n },\n [\n _c(\"span\", { staticClass: \"less-emphasis\" }, [\n _vm._v(\n \"\\n Resort Fee $\" +\n _vm._s(\n _vm.formatAsDollarAmount(\n _vm.averageResortFee\n )\n ) +\n \" /night\\n \"\n ),\n ]),\n ]\n )\n : _c(\n \"div\",\n {\n staticClass: \"less-emphasis rate-resort-fee\",\n },\n [\n _c(\"span\", { staticClass: \"less-emphasis\" }, [\n _vm._v(\n \"\\n Plus Resort Fee of $\" +\n _vm._s(\n _vm.formatAsDollarAmount(\n _vm.averageResortFee\n )\n ) +\n \" /night\\n \"\n ),\n ]),\n ]\n ),\n ]\n : _c(\n \"table\",\n {\n staticClass:\n \"hotel_room--cta_rate_table less-emphasis\",\n attrs: {\n \"aria-label\":\n \"Rate information for selected stay\",\n },\n },\n [\n _c(\n \"tr\",\n { staticClass: \"less-emphasis rate-subtotal\" },\n [\n _c(\"td\", [_vm._v(\"Room Rate\")]),\n _vm._v(\" \"),\n _vm.showRateDetailTotals\n ? _c(\"td\", [\n _vm._v(\n \"$\" +\n _vm._s(\n _vm.formatAsDollarAmount(\n _vm.subtotal,\n false\n )\n )\n ),\n ])\n : _c(\"td\", [\n _vm._v(\n \"$\" +\n _vm._s(\n _vm.formatAsDollarAmount(\n _vm.averageSubtotal,\n false\n )\n ) +\n \" avg/night\"\n ),\n ]),\n ]\n ),\n _vm._v(\" \"),\n !_vm.showRateDetails\n ? [\n _c(\n \"tr\",\n {\n staticClass:\n \"less-emphasis rate-resort-fee\",\n },\n [\n _c(\"td\", [_vm._v(\"Resort Fee\")]),\n _vm._v(\" \"),\n _vm.showRateDetailTotals\n ? _c(\"td\", [\n _vm._v(\n \"$\" +\n _vm._s(\n _vm.formatAsDollarAmount(\n _vm.averageResortFee\n )\n ) +\n \" /night\"\n ),\n ])\n : _c(\"td\", [\n _vm._v(\n \"$\" +\n _vm._s(\n _vm.formatAsDollarAmount(\n _vm.averageResortFee\n )\n ) +\n \" /night\"\n ),\n ]),\n ]\n ),\n ]\n : _vm._e(),\n _vm._v(\" \"),\n _vm.showRateDetails\n ? [\n _c(\n \"tr\",\n { staticClass: \"less-emphasis rate-tax\" },\n [\n _c(\"td\", [_vm._v(\"Room Tax\")]),\n _vm._v(\" \"),\n _vm.showRateDetailTotals\n ? _c(\"td\", [\n _vm._v(\n \"$\" +\n _vm._s(\n _vm.formatAsDollarAmount(\n _vm.totalRoomTax,\n false\n )\n )\n ),\n ])\n : _c(\"td\", [\n _vm._v(\n \"$\" +\n _vm._s(\n _vm.formatAsDollarAmount(\n _vm.averageRoomTax,\n false\n )\n ) +\n \" avg/night\"\n ),\n ]),\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"tr\",\n {\n staticClass:\n \"less-emphasis rate-resort-fee\",\n },\n [\n _c(\"td\", [_vm._v(\"Resort Fee\")]),\n _vm._v(\" \"),\n _vm.showRateDetailTotals\n ? _c(\"td\", [\n _vm._v(\n \"$\" +\n _vm._s(\n _vm.formatAsDollarAmount(\n _vm.totalResortFee,\n false\n )\n )\n ),\n ])\n : _c(\"td\", [\n _vm._v(\n \"$\" +\n _vm._s(\n _vm.formatAsDollarAmount(\n _vm.averageResortFee,\n false\n )\n ) +\n \" /night\"\n ),\n ]),\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"tr\",\n {\n staticClass:\n \"less-emphasis rate-resort-fee-tax\",\n },\n [\n _c(\"td\", [_vm._v(\"Resort Fee Tax\")]),\n _vm._v(\" \"),\n _vm.showRateDetailTotals\n ? _c(\"td\", [\n _vm._v(\n \"$\" +\n _vm._s(\n _vm.formatAsDollarAmount(\n _vm.totalResortFeeTax,\n false\n )\n )\n ),\n ])\n : _c(\"td\", [\n _vm._v(\n \"$\" +\n _vm._s(\n _vm.formatAsDollarAmount(\n _vm.averageResortFeeTax,\n false\n )\n ) +\n \" /night\"\n ),\n ]),\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"tr\",\n {\n staticClass:\n \"less-emphasis rate-tourism-surcharge\",\n },\n [\n _c(\"td\", [_vm._v(\"Tourism Surcharge\")]),\n _vm._v(\" \"),\n _vm.showRateDetailTotals\n ? _c(\"td\", [\n _vm._v(\n \"$\" +\n _vm._s(\n _vm.formatAsDollarAmount(\n _vm.totalTourismSurcharge,\n false\n )\n )\n ),\n ])\n : _c(\"td\", [\n _vm._v(\n \"$\" +\n _vm._s(\n _vm.formatAsDollarAmount(\n _vm.averageTourismSurcharge,\n false\n )\n ) +\n \" /night\"\n ),\n ]),\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"tr\",\n { staticClass: \"less-emphasis rate-total\" },\n [\n _c(\"td\", [_vm._v(\"Total\")]),\n _vm._v(\" \"),\n _vm.showRateDetailTotals\n ? _c(\"td\", [\n _vm._v(\n \"$\" +\n _vm._s(\n _vm.formatAsDollarAmount(\n _vm.total,\n false\n )\n )\n ),\n ])\n : _c(\"td\", [\n _vm._v(\n \"$\" +\n _vm._s(\n _vm.formatAsDollarAmount(\n _vm.averageTotal,\n false\n )\n ) +\n \" avg/night\"\n ),\n ]),\n ]\n ),\n ]\n : _vm._e(),\n ],\n 2\n ),\n ]\n : _vm._e(),\n _vm._v(\" \"),\n !_vm.showRateDetails\n ? _c(\n \"a\",\n {\n staticClass: \"info\",\n attrs: { title: \"Click to view rate details\", href: \"#\" },\n on: {\n click: function ($event) {\n $event.preventDefault()\n $event.stopPropagation()\n return _vm.openRateDialog.apply(null, arguments)\n },\n },\n },\n [\n _c(\"svg\", [\n _c(\"use\", {\n attrs: {\n \"xmlns:xlink\": \"http://www.w3.org/1999/xlink\",\n \"xlink:href\": \"#symbol_info\",\n },\n }),\n ]),\n ]\n )\n : _vm._e(),\n ],\n 2\n )\n : [\n _vm.minStayDays > 0\n ? _c(\"div\", { staticClass: \"price\" }, [\n _c(\"p\", { staticClass: \"quote\" }, [\n _vm._v(\n \"Minimum stay length is \" +\n _vm._s(_vm.minStayDays) +\n \" night\" +\n _vm._s(1 < _vm.minStayDays ? \"s\" : \"\") +\n \".\"\n ),\n ]),\n _vm._v(\" \"),\n _c(\"p\", { staticClass: \"quote\" }, [\n _vm._v(\n \"You have selected a \" +\n _vm._s(_vm.$store.state.stayLength) +\n \" night stay.\"\n ),\n ]),\n ])\n : _vm.roomAdjacentDates.length\n ? _c(\n \"div\",\n { staticClass: \"price\" },\n [\n _c(\"p\", { staticClass: \"quote\" }, [\n _vm._v(\"Selected dates unavailable. Check in on:\"),\n ]),\n _vm._v(\" \"),\n _vm._l(_vm.roomAdjacentDates, function (adjacentDate) {\n return [\n adjacentDate.hasOwnProperty(\"AHEAD\") &&\n adjacentDate.AHEAD.hasOwnProperty(\"ADJACENT_DAY_SHIFT\")\n ? _c(\n \"a\",\n {\n staticClass: \"quote quote-ahead\",\n attrs: { href: \"#\" },\n on: {\n click: function ($event) {\n $event.preventDefault()\n return _vm.adjacentDateClickHandler(\n adjacentDate.AHEAD.ADJACENT_DAY_SHIFT\n )\n },\n },\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(adjacentDate.AHEAD.CHECKIN_DATE) +\n \" for \" +\n _vm._s(\n _vm.getAdjacentDatePrice(\n adjacentDate.AHEAD\n )\n ) +\n \" avg/night*\\n \"\n ),\n ]\n )\n : adjacentDate.hasOwnProperty(\"BEHIND\") &&\n adjacentDate.BEHIND.hasOwnProperty(\n \"ADJACENT_DAY_SHIFT\"\n )\n ? _c(\n \"a\",\n {\n staticClass: \"quote behind\",\n attrs: { href: \"#\" },\n on: {\n click: function ($event) {\n $event.preventDefault()\n return _vm.adjacentDateClickHandler(\n adjacentDate.BEHIND.ADJACENT_DAY_SHIFT\n )\n },\n },\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(adjacentDate.BEHIND.CHECKIN_DATE) +\n \" for \" +\n _vm._s(\n _vm.getAdjacentDatePrice(\n adjacentDate.BEHIND\n )\n ) +\n \" avg/night*\\n \"\n ),\n ]\n )\n : _vm._e(),\n ]\n }),\n ],\n 2\n )\n : _c(\"div\", { staticClass: \"price\" }, [\n _vm._v(\"\\n Sold Out\\n\\n \"),\n _vm._m(0),\n ]),\n ],\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"cta--dates\" }, [\n _c(\"p\", [\n _c(\"span\", { staticClass: \"less-emphasis\" }, [_vm._v(\"Check In\")]),\n _vm._v(\" \"),\n _c(\"span\", {\n domProps: { innerHTML: _vm._s(_vm.checkInDateFormatted) },\n }),\n ]),\n _vm._v(\" \"),\n _c(\"p\", [\n _c(\"span\", { staticClass: \"less-emphasis\" }, [_vm._v(\"Check Out\")]),\n _vm._v(\" \"),\n _c(\"span\", {\n domProps: { innerHTML: _vm._s(_vm.checkOutDateFormatted) },\n }),\n ]),\n ]),\n _vm._v(\" \"),\n !_vm.$store.state.isRoomAvailabilityLoaded\n ? _c(\n \"a\",\n { staticClass: \"btn get-rates btn-disabled\", attrs: { href: \"#\" } },\n [_vm._v(\"Loading Rates\")]\n )\n : _vm.isAvailable\n ? _c(\n \"a\",\n {\n staticClass: \"btn get-rates\",\n attrs: { href: _vm.bookNowLink },\n on: { click: _vm.getRatesClickHandler },\n },\n [_vm._v(\"Book Now\")]\n )\n : _vm.minStayDays > 0\n ? _c(\n \"a\",\n {\n staticClass: \"btn\",\n attrs: { href: \"#\" },\n on: {\n click: function ($event) {\n $event.preventDefault()\n return _vm.updateCheckOutDateForMinNights.apply(\n null,\n arguments\n )\n },\n },\n },\n [_vm._v(\"Make\\n \" + _vm._s(_vm.minStayDays) + \" Night Stay\")]\n )\n : _c(\n \"a\",\n { staticClass: \"btn get-rates btn-disabled\", attrs: { href: \"#\" } },\n [_vm._v(\"Not Available\")]\n ),\n _vm._v(\" \"),\n _vm.showLearnMoreButton\n ? _c(\n \"a\",\n {\n staticClass: \"btn btn-dark\",\n attrs: {\n href: _vm.page.URL,\n title: \"Learn more about the \" + _vm.page.TITLE,\n },\n },\n [_vm._v(\"Learn\\n More\")]\n )\n : _vm._e(),\n ],\n 2\n )\n}\nvar staticRenderFns = [\n function () {\n var _vm = this,\n _c = _vm._self._c,\n _setup = _vm._self._setupProxy\n return _c(\"div\", { staticClass: \"less-emphasis rate-resort-fee\" }, [\n _c(\"span\", { staticClass: \"less-emphasis\" }, [_vm._v(\" \")]),\n ])\n },\n]\nrender._withStripped = true\n\nexport { render, staticRenderFns }","import { render, staticRenderFns } from \"./hotelRoomCallToAction.vue?vue&type=template&id=38ac4889&scoped=true\"\nimport script from \"./hotelRoomCallToAction.vue?vue&type=script&lang=ts\"\nexport * from \"./hotelRoomCallToAction.vue?vue&type=script&lang=ts\"\nimport style0 from \"./hotelRoomCallToAction.vue?vue&type=style&index=0&id=38ac4889&prod&scoped=true&lang=css\"\nimport style1 from \"./hotelRoomCallToAction.vue?vue&type=style&index=1&id=38ac4889&prod&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"38ac4889\",\n null\n \n)\n\nexport default component.exports","\r\n/*!\r\n * Copyright (C) 2022-2024, Peppermill Inc.\r\n * All rights reserved.\r\n *\r\n * Redistribution and use in source and binary forms, with or without\r\n * modification, are not permitted.\r\n *//*\r\n *\t\t2022-08-16\r\n *\t\t\t- Refactor filter-widget.js hotel room call-to-action related functionality to component.\r\n *\r\n *\t\t2023-02-16 (jhoward)\r\n *\t\t\t- Add resort fee mention to .\r\n *\t\t\t- Hide info dialog for resort fee info in .\r\n *\r\n *\t\t2023-03-15 (jhoward)\r\n *\t\t\t- Add subtotal amount under price in to .\r\n *\r\n *\t\t2023-03-20 (jhoward)\r\n *\t\t\t- Add boolean showRateDetails prop to .\r\n *\t\t\t- Add ::formatAsDollarAmount().\r\n *\t\t\t- Round standard/preferred average rates in ::formatAsDollarAmount().\r\n *\r\n *\t\t2024-06-10 (jhoward)\r\n *\t\t\t- Implement Typescript in .\r\n *\t\t\t- Add showRateDetailTotals prop to to facilitate displaying totals rather than daily averages.\r\n *\t\t\t- Add addResortFeeToRoomRate prop to .\r\n * - Add rate detail dialog to .\r\n *\r\n *\t\t2024-06-19 (jhoward)\r\n *\t\t\t- Fix adjacent night selection links in .\r\n*/\r\n\r\nimport {mapGetters, mapState} from \"vuex\";\r\nimport {defineComponent, PropType} from \"vue\";\r\nimport {HotelRoomAdjacentDate, HotelRoomAdjacentDateRooms} from \"../../store/hotel-rooms\";\r\nimport {HotelPage, RoomAvailabilityData} from \"./defs\";\r\n\r\nexport default defineComponent({\r\n name: 'hotelRoomCallToAction',\r\n props: {\r\n offerCodes: {\r\n type: Array as PropType,\r\n required: true\r\n },\r\n page: {\r\n type: Object as PropType,\r\n required: true\r\n },\r\n showLearnMoreButton: {\r\n type: Boolean,\r\n default: false\r\n },\r\n showRateDetails: {\r\n type: Boolean,\r\n default: false\r\n },\r\n showRateDetailTotals: {\r\n type: Boolean,\r\n default: false\r\n },\r\n addResortFeeToRoomRate: {\r\n type: Boolean,\r\n default: false\r\n },\r\n },\r\n data() {\r\n return {\r\n preferredLoggedIn: false,\r\n taxRate: 0.13,\r\n tourismSurchargeRate: 2,\r\n };\r\n },\r\n mounted() {\r\n $(() => {\r\n if (window.hasOwnProperty('peppermillPreferred') && window.peppermillPreferred.checkForPeppermillPreferredLoginToken()) {\r\n //user is logged in, let's check their token\r\n const tokenData = window.peppermillPreferred.getPeppermillPreferredLoginData();\r\n if (false !== tokenData) {\r\n this.preferredLoggedIn = true;\r\n }\r\n }\r\n });\r\n },\r\n computed: {\r\n ...mapState([\r\n 'ROOMS',\r\n 'ADJACENT_DATES',\r\n 'isRoomAvailabilityLoaded',\r\n 'checkInDate',\r\n 'checkOutDate'\r\n ]),\r\n ...mapGetters([\r\n 'stayLength',\r\n 'bookingLink'\r\n ]),\r\n\r\n averagePriceStandardToDisplay() {\r\n return (this.addResortFeeToRoomRate)\r\n ? this.averagePriceStandardWithResortFee\r\n : this.averagePriceStandard;\r\n },\r\n averagePricePreferredToDisplay() {\r\n return (this.addResortFeeToRoomRate)\r\n ? this.averagePricePreferredWithResortFee\r\n : this.averagePricePreferred;\r\n },\r\n\r\n averagePriceStandardWithResortFee() {\r\n return this.averagePriceStandard + (this.roomAvailabilityData.ROOM_TYPES[0]?.RESORT_FEE_RATE || 0);\r\n },\r\n\r\n averagePricePreferredWithResortFee() {\r\n return this.averagePricePreferred + (this.roomAvailabilityData.ROOM_TYPES[0]?.RESORT_FEE_RATE || 0);\r\n },\r\n\r\n isAvailable(): boolean {\r\n return this.$store.getters.roomTypeIsAvailable(this.roomAvailabilityData);\r\n },\r\n isPreferredRate(): boolean {\r\n return this.averagePricePreferred > 0;\r\n },\r\n\r\n roomAvailabilityData(): RoomAvailabilityData {\r\n if (this.page.ID > 0) {\r\n for (let i = 0, l = this.$store.state.ROOMS.length; i < l; i++) {\r\n if (this.$store.state.ROOMS[i].PAGE_ID === this.page.ID) {\r\n return this.$store.state.ROOMS[i];\r\n }\r\n }\r\n }\r\n return {\r\n ADA_VARIANTS: [],\r\n DATA_AVAILABLE: false,\r\n PAGE_ID: 0,\r\n ROOM_TYPES: []\r\n };\r\n },\r\n\r\n minStayDays: function () {\r\n return this.$store.getters.roomTypeMinStayDays(this.roomAvailabilityData);\r\n },\r\n\r\n roomAdjacentDates: function () {\r\n return this.$store.state.ADJACENT_DATES.filter((adjacentDate: HotelRoomAdjacentDate) => {\r\n return adjacentDate.PAGE_ID === this.page.ID;\r\n });\r\n },\r\n\r\n averagePriceStandard: function () {\r\n if (Array.isArray(this.roomAvailabilityData.ROOM_TYPES) && this.roomAvailabilityData.ROOM_TYPES.length) {\r\n return this.roomAvailabilityData.ROOM_TYPES[0].ROOM_AVERAGE_PRICE || 0;\r\n }\r\n\r\n return 0;\r\n },\r\n averagePricePreferred: function () {\r\n if (this.roomAvailabilityData.hasOwnProperty('ROOM_TYPES') && Array.isArray(this.roomAvailabilityData.ROOM_TYPES) && this.roomAvailabilityData.ROOM_TYPES.length) {\r\n return this.roomAvailabilityData.ROOM_TYPES[0].PREFERRED_AVERAGE_PRICE || 0;\r\n }\r\n\r\n return 0;\r\n },\r\n\r\n totalPriceStandard: function () {\r\n if (this.roomAvailabilityData.hasOwnProperty('ROOM_TYPES') && Array.isArray(this.roomAvailabilityData.ROOM_TYPES) && this.roomAvailabilityData.ROOM_TYPES.length) {\r\n return this.roomAvailabilityData.ROOM_TYPES[0].ROOM_TOTAL_PRICE || 0;\r\n }\r\n\r\n return 0;\r\n },\r\n totalPricePreferred: function () {\r\n if (this.roomAvailabilityData.hasOwnProperty('ROOM_TYPES') && Array.isArray(this.roomAvailabilityData.ROOM_TYPES) && this.roomAvailabilityData.ROOM_TYPES.length) {\r\n return this.roomAvailabilityData.ROOM_TYPES[0].PREFERRED_TOTAL_PRICE || 0;\r\n }\r\n\r\n return 0;\r\n },\r\n\r\n preferredTooltipCopy: function () {\r\n return this.preferredLoggedIn\r\n ? 'You are logged in and will receive our member rate!'\r\n : 'Join our free Preferred program for member rates.';\r\n },\r\n preferredOverlayCopy: function () {\r\n return this.preferredLoggedIn\r\n ? 'You are logged in and will receive our member rate!'\r\n : 'Join our free Preferred program for member rates. Prices require Peppermill Preferred account (signup for free).';\r\n },\r\n\r\n averageRoomTax() {\r\n return this.averageSubtotal * this.taxRate;\r\n },\r\n totalRoomTax() {\r\n return this.subtotal * this.taxRate;\r\n },\r\n\r\n averageResortFee() {\r\n return (0 < this.roomAvailabilityData.ROOM_TYPES.length)\r\n ? this.roomAvailabilityData.ROOM_TYPES[0].RESORT_FEE_RATE\r\n : 0;\r\n },\r\n totalResortFee() {\r\n return this.averageResortFee * this.$store.getters.stayLength;\r\n },\r\n\r\n averageResortFeeTax() {\r\n return this.averageResortFee * this.taxRate;\r\n },\r\n totalResortFeeTax() {\r\n return this.totalResortFee * this.taxRate;\r\n },\r\n\r\n averageTourismSurcharge() {\r\n return this.tourismSurchargeRate;\r\n },\r\n totalTourismSurcharge() {\r\n return this.tourismSurchargeRate * this.$store.getters.stayLength;\r\n },\r\n\r\n averageSubtotal() {\r\n if (0 < this.totalPricePreferred) {\r\n return this.averagePricePreferred;\r\n } else if (0 < this.totalPriceStandard) {\r\n return this.averagePriceStandard;\r\n }\r\n\r\n return 0;\r\n },\r\n subtotal() {\r\n return (this.isPreferredRate)\r\n ? this.totalPricePreferred\r\n : this.totalPriceStandard;\r\n },\r\n\r\n averageTotal() {\r\n return this.averageSubtotal + this.averageRoomTax + this.averageResortFee + this.averageResortFeeTax + this.averageTourismSurcharge;\r\n },\r\n total() {\r\n return this.subtotal + this.totalRoomTax + this.totalResortFee + this.totalResortFeeTax + this.totalTourismSurcharge;\r\n },\r\n\r\n checkInDateFormatted(): string {\r\n if (this.$store.state.checkInDate) {\r\n return window.pepDateFunctions.formatShortDisplayDate(this.$store.state.checkInDate);\r\n }\r\n\r\n return '...';\r\n },\r\n checkOutDateFormatted(): string {\r\n if (this.$store.state.checkOutDate) {\r\n return window.pepDateFunctions.formatShortDisplayDate(this.$store.state.checkOutDate);\r\n }\r\n\r\n return '...';\r\n },\r\n\r\n bookNowLink(): string {\r\n return this.$store.getters.bookingLink(this.roomAvailabilityData, this.roomAvailabilityData.ROOM_TYPES[0]?.PRT_ID || 0, this.offerCodes[0] || '', this.page.ID);\r\n },\r\n },\r\n methods: {\r\n openRateDialog: function () {\r\n if (this.isPreferredRate) {\r\n this.openRateDialogPreferred();\r\n } else {\r\n this.openRateDialogStandard();\r\n }\r\n },\r\n openRateDialogPreferred: function () {\r\n window.showOverlayDialog({\r\n alertMode: true,\r\n confirmAccept: 'CLOSE',\r\n confirmTitle: 'Preferred Rate Information for Your Selected Stay',\r\n confirmBody: '

' + this.preferredOverlayCopy + '

$' + this.formatAsDollarAmount(this.averagePricePreferredToDisplay) + ' is the average nightly rate for the ' + this.page.TITLE + '. This includes resort fee and average room rate.

' + this.getRateTableHtml(),\r\n // callback: 'GENERIC-DIALOG-CLOSE'\r\n });\r\n },\r\n openRateDialogStandard: function () {\r\n window.showOverlayDialog({\r\n alertMode: true,\r\n confirmAccept: 'CLOSE',\r\n confirmTitle: 'Rate Information for Your Selected Stay',\r\n confirmBody: '

$' + this.formatAsDollarAmount(this.averagePriceStandardToDisplay) + ' is the average nightly rate for the ' + this.page.TITLE + '. This includes resort fee and average room rate.

' + this.getRateTableHtml(),\r\n // callback: 'GENERIC-DIALOG-CLOSE'\r\n });\r\n },\r\n\r\n getRateTableHtml(): string {\r\n return `\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
Check In Date:${this.checkInDateFormatted}
Check Out Date:${this.checkOutDateFormatted}
Room Rate:$${this.formatAsDollarAmount(this.subtotal, false)}
Room Tax:$${this.formatAsDollarAmount(this.totalRoomTax, false)}
Resort Fee:$${this.formatAsDollarAmount(this.totalResortFee, false)}
Resort Fee Tax:$${this.formatAsDollarAmount(this.totalResortFeeTax, false)}
Tourism Surcharge:$${this.formatAsDollarAmount(this.totalTourismSurcharge, false)}
Total:$${this.formatAsDollarAmount(this.total, false)}
`;\r\n },\r\n\r\n getRatesClickHandler(event: MouseEvent) {\r\n if ('#' === this.bookNowLink) {\r\n event.preventDefault();\r\n }\r\n },\r\n\r\n updateCheckOutDateForMinNights() {\r\n if (this.minStayDays > 0 && !this.isAvailable && this.$store.state.checkInDate) {\r\n this.$store.commit('updateCheckOutDate', window.pepDateFunctions.addDays(this.$store.state.checkInDate, this.minStayDays));\r\n document.querySelector('.page-link-filter .pepvalidate-v3')?.dispatchEvent(new CustomEvent('submit', {detail: 'skipScroll'}));\r\n }\r\n },\r\n\r\n adjacentDateClickHandler(daysToShift: number): void {\r\n const saveCheckOutDate = new Date(this.$store.state.checkOutDate);\r\n this.$store.commit('updateCheckOutDate', null);\r\n this.$store.commit('updateCheckInDate', window.pepDateFunctions.addDays(this.$store.state.checkInDate, daysToShift));\r\n this.$store.commit('updateCheckOutDate', window.pepDateFunctions.addDays(saveCheckOutDate, daysToShift));\r\n\r\n document.querySelector('.page-link-filter .pepvalidate-v3')?.dispatchEvent(new CustomEvent('submit', {detail: 'skipScroll'}));\r\n },\r\n\r\n getAdjacentDatePrice(data: HotelRoomAdjacentDateRooms): string {\r\n if (data.hasOwnProperty(0)) {\r\n if (data[0].hasOwnProperty('PREFERRED_LOWEST_PRICE') && data[0].PREFERRED_LOWEST_PRICE) {\r\n return '$' + this.formatAsDollarAmount(data[0].PREFERRED_LOWEST_PRICE + this.averageResortFee);\r\n } else if (data[0].hasOwnProperty('ROOM_LOWEST_PRICE')) {\r\n return '$' + this.formatAsDollarAmount(data[0].ROOM_LOWEST_PRICE + this.averageResortFee);\r\n }\r\n }\r\n\r\n return '';\r\n },\r\n\r\n formatAsDollarAmount(amount: number, truncate = true): string {\r\n return '' + window.pepHelperFunctions.formatAsDollarAmount(amount, truncate);\r\n }\r\n }\r\n})\r\n","var render = function render() {\n var _vm = this,\n _c = _vm._self._c,\n _setup = _vm._self._setupProxy\n return _c(\"div\", { staticClass: \"room_icons--container\" }, [\n _c(\n \"span\",\n {\n staticClass:\n \"room_icons--icon room_icons--icon-availability room_icons--icon-available tooltip-dock-top\",\n class: {\n \"room_icons--icon-unavailable\": !_vm.iconsAvailable.anyRoomType,\n \"icon-low-inventory\": _vm.$store.getters.roomTypeTotalAvailable(\n _vm.roomAvailabilityData\n ),\n },\n attrs: {\n \"data-tooltip\": _vm.availabilityTooltip,\n \"aria-label\": _vm.availabilityTooltip,\n },\n },\n [\n _c(\"svg\", [\n _c(\"use\", {\n attrs: {\n \"xmlns:xlink\": \"http://www.w3.org/1999/xlink\",\n \"xlink:href\": \"#symbol_calendar_valid\",\n },\n }),\n ]),\n ]\n ),\n _vm._v(\" \"),\n _vm.icons[\"non-smoking\"]\n ? _c(\n \"span\",\n {\n staticClass:\n \"room_icons--icon room_icons--icon-non_smoking tooltip-dock-top\",\n class: {\n \"room_icons--icon-unavailable\":\n !_vm.iconsAvailable[\"non-smoking\"],\n },\n attrs: {\n \"data-tooltip\": _vm.iconsAvailable[\"non-smoking\"]\n ? \"Non-Smoking Available\"\n : \"Non-Smoking Sold Out\",\n \"aria-label\": _vm.iconsAvailable[\"non-smoking\"]\n ? \"Non-Smoking Available\"\n : \"Non-Smoking Sold Out\",\n },\n },\n [\n _c(\"svg\", [\n _c(\"use\", {\n attrs: {\n \"xmlns:xlink\": \"http://www.w3.org/1999/xlink\",\n \"xlink:href\": \"#symbol_non_smoking\",\n },\n }),\n ]),\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.icons.smoking\n ? _c(\n \"span\",\n {\n staticClass:\n \"room_icons--icon room_icons--icon-smoking tooltip-dock-top\",\n class: {\n \"room_icons--icon-unavailable\": !_vm.iconsAvailable.smoking,\n },\n attrs: {\n \"data-tooltip\": _vm.iconsAvailable.smoking\n ? \"Smoking Available\"\n : \"Smoking Sold Out\",\n \"aria-label\": _vm.iconsAvailable.smoking\n ? \"Smoking Available\"\n : \"Smoking Sold Out\",\n },\n },\n [\n _c(\"svg\", [\n _c(\"use\", {\n attrs: {\n \"xmlns:xlink\": \"http://www.w3.org/1999/xlink\",\n \"xlink:href\": \"#symbol_smoking\",\n },\n }),\n ]),\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.icons.ada\n ? _c(\n \"a\",\n {\n staticClass:\n \"room_icons--icon room_icons--icon-ada tooltip-dock-top\",\n class: { \"room_icons--icon-unavailable\": !_vm.iconsAvailable.ada },\n attrs: {\n \"data-tooltip\": _vm.iconsAvailable.ada\n ? \"Click for \" + _vm.page.TITLE + \" Accessibility Options\"\n : \"Accessibility Options Sold Out\",\n \"aria-label\": _vm.iconsAvailable.ada\n ? \"Click for \" + _vm.page.TITLE + \" Accessibility Options\"\n : \"Accessibility Options Sold Out\",\n title: _vm.iconsAvailable.ada\n ? \"Click for \" + _vm.page.TITLE + \" Accessibility Options\"\n : \"Accessibility Options Sold Out\",\n href: \"#\",\n },\n on: {\n click: function ($event) {\n $event.preventDefault()\n return _vm.showAdaVariants.apply(null, arguments)\n },\n },\n },\n [\n _c(\"svg\", [\n _c(\"use\", {\n attrs: {\n \"xmlns:xlink\": \"http://www.w3.org/1999/xlink\",\n \"xlink:href\": \"#symbol_accessible\",\n },\n }),\n ]),\n ]\n )\n : _vm._e(),\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","import { render, staticRenderFns } from \"./hotelRoomIcons.vue?vue&type=template&id=22f77685\"\nimport script from \"./hotelRoomIcons.vue?vue&type=script&lang=ts\"\nexport * from \"./hotelRoomIcons.vue?vue&type=script&lang=ts\"\nimport style0 from \"./hotelRoomIcons.vue?vue&type=style&index=0&id=22f77685&prod&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n/*!\r\n * Copyright (C) 2022-2024, Peppermill Inc.\r\n * All rights reserved.\r\n *\r\n * Redistribution and use in source and binary forms, with or without\r\n * modification, are not permitted.\r\n */\r\n/*\r\n *\t\t2022-08-16\r\n *\t\t\t- Refactor filter-widget.js hotel room icon related functionality to component.\r\n *\r\n *\t\t2024-06-10 (jhoward)\r\n *\t\t\t- Implement Typescript in .\r\n *\t\t\t- Refactor to use BEM CSS naming.\r\n *\t\t\t- Implement low inventory notification in .\r\n *\t\t\t- Make ADA variants clickable in for easier booking.\r\n*/\r\nimport {defineComponent, PropType} from 'vue'\r\nimport {HotelPage, HotelRoomData, RoomAvailabilityData} from \"./defs\";\r\nimport {mapGetters} from \"vuex\";\r\n\r\nexport default defineComponent({\r\n name: 'hotelRoomIcons',\r\n props: {\r\n roomAvailabilityData: {\r\n type: Object as PropType,\r\n required: true\r\n },\r\n roomData: {\r\n type: Array as PropType,\r\n required: true\r\n },\r\n page: {\r\n type: Object as PropType,\r\n required: true\r\n }\r\n },\r\n data() {\r\n return {\r\n lowInventoryThresholdCount: 10,\r\n lowInventoryThresholdPercent: 0.25,\r\n };\r\n },\r\n computed: {\r\n ...mapGetters([\r\n 'bookingLink',\r\n 'roomTypeTotalAvailable'\r\n ]),\r\n icons() {\r\n let output = {\r\n 'non-smoking': false,\r\n smoking: false,\r\n ada: false\r\n };\r\n this.roomData.forEach(roomTypeData => {\r\n if (roomTypeData.ROOM_SMOKING) {\r\n output.smoking = true;\r\n }\r\n if (roomTypeData.ROOM_NON_SMOKING) {\r\n output['non-smoking'] = true;\r\n }\r\n if (roomTypeData.ROOM_ADA) {\r\n output.ada = true;\r\n }\r\n });\r\n\r\n return output;\r\n },\r\n iconsAvailable() {\r\n let output = {\r\n anyRoomType: this.isAvailable,\r\n 'non-smoking': false,\r\n smoking: false,\r\n ada: false\r\n };\r\n this.roomAvailabilityData.ROOM_TYPES.forEach(roomType => {\r\n if (roomType.ROOM_SMOKING) {\r\n output.smoking = true;\r\n }\r\n if (roomType.ROOM_NON_SMOKING) {\r\n output['non-smoking'] = true;\r\n }\r\n if (roomType.ROOM_ADA) {\r\n output.ada = true;\r\n }\r\n });\r\n\r\n return output;\r\n },\r\n isAvailable() {\r\n return this.$store.getters.roomTypeIsAvailable(this.roomAvailabilityData);\r\n },\r\n adaVariants(): HotelRoomData[] {\r\n return this.roomData.filter(roomTypeData => roomTypeData.ROOM_ADA_VARIANT.length);\r\n },\r\n availabilityTooltip(): string {\r\n return (!this.iconsAvailable.anyRoomType)\r\n ? 'Room Sold Out'\r\n : (this.isLowInventory)\r\n ? 'Not many rooms left'\r\n : 'Room Available';\r\n },\r\n isLowInventory(): boolean {\r\n const totalInventory = this.$store.getters.roomTypeTotalAvailable(this.roomAvailabilityData);\r\n return totalInventory < this.lowInventoryThresholdCount;\r\n },\r\n },\r\n methods: {\r\n showAdaVariants() {\r\n const dialogBody = (!this.adaVariants.length)\r\n ? 'No accessibility options exist for this room type.'\r\n : `

Here are the accessibility options for \"${this.page.TITLE}\":

    ` + this.adaVariants.map(this.getAdaVariantListItemHtml).join('') + `
`;\r\n\r\n window.showOverlayDialog({\r\n alertMode: true,\r\n confirmAccept: 'CLOSE',\r\n confirmTitle: this.page.TITLE + ' Accessibility Options',\r\n confirmBody: dialogBody\r\n });\r\n },\r\n\r\n getAdaVariantListItemHtml(roomTypeData: HotelRoomData): string {\r\n if (this.isPageRoomTypeAvailable(roomTypeData.PRT_ID)) {\r\n return `
  • ${roomTypeData.ROOM_ADA_VARIANT}
  • `;\r\n }\r\n\r\n return `
  • ${roomTypeData.ROOM_ADA_VARIANT} (Sold Out)
  • `;\r\n },\r\n\r\n isPageRoomTypeAvailable(prtId: number) {\r\n for (let i = 0, l = this.roomAvailabilityData.ROOM_TYPES.length; i < l; i++) {\r\n if (\r\n this.roomAvailabilityData.ROOM_TYPES[i].hasOwnProperty('PRT_ID')\r\n && this.roomAvailabilityData.ROOM_TYPES[i].PRT_ID === prtId\r\n ) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n }\r\n})\r\n","import { render, staticRenderFns } from \"./pageListRoom.vue?vue&type=template&id=02bf4743&scoped=true\"\nimport script from \"./pageListRoom.vue?vue&type=script&lang=ts\"\nexport * from \"./pageListRoom.vue?vue&type=script&lang=ts\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"02bf4743\",\n null\n \n)\n\nexport default component.exports","\r\n/*!\r\n * Copyright (C) 2022-2025, Peppermill Inc.\r\n * All rights reserved.\r\n *\r\n * Redistribution and use in source and binary forms, with or without\r\n * modification, are not permitted.\r\n *//*\r\n *\t\t2022-07-05\r\n *\t\t\t- Refactor hotel room page link item related functionality from filter-widget.js to component.\r\n *\r\n *\t\t2023-03-31 (jhoward)\r\n *\t\t\t- Refactor to use TypeScript.\r\n * - calculates visibility based on current filters.\r\n *\r\n *\t\t2024-06-10 (jhoward)\r\n *\t\t\t- Add aria-role attribute to container.\r\n *\r\n *\t\t2024-06-10 (jhoward)\r\n *\t\t\t- Enable adding resort fee to room rate in .\r\n *\r\n *\t\t2025-01-24 (jhoward)\r\n *\t\t\t- Add more dynamic bed type and count display in .\r\n *\t\t\t- Search all bed type variants when filtering in .\r\n*/\r\n\r\nimport {defineComponent, PropType} from \"vue\";\r\nimport HotelRoomCallToAction from \"./hotelRoomCallToAction.vue\";\r\nimport HotelRoomIcons from \"./hotelRoomIcons.vue\";\r\nimport {HotelPage, HotelRoomData, PageListRoomSearchData, RoomAvailabilityData, RoomAvailabilityRoomType} from \"./defs\";\r\n\r\nexport default defineComponent({\r\n name: 'pageListRoom',\r\n components: {\r\n HotelRoomCallToAction,\r\n HotelRoomIcons,\r\n },\r\n props: {\r\n offerCodes: {\r\n type: Array as PropType,\r\n default: () => []\r\n },\r\n searchData: {\r\n type: Object as PropType,\r\n default: function () {\r\n return {\r\n 'SQ-FT-LOW': 0,\r\n 'SQ-FT-HIGH': 0,\r\n 'BED': '',\r\n 'BATH-COUNT': 0\r\n };\r\n }\r\n },\r\n page: {\r\n type: Object as PropType,\r\n default: function () {\r\n return {\r\n ID: 0,\r\n TITLE: '',\r\n URL: '',\r\n IMG_SRC: '',\r\n IMG_FOCUS_X: 50,\r\n IMG_FOCUS_Y: 50\r\n };\r\n }\r\n },\r\n roomData: {\r\n type: Array as PropType,\r\n default: function () {\r\n return [{\r\n ROOM_TITLE: '',\r\n ROOM_TITLE_FIXED: '',\r\n ROOM_SQ_FT: 0,\r\n ROOM_BED_TYPE: '',\r\n ROOM_BED_COUNT: 0,\r\n ROOM_BATH_COUNT: 0,\r\n ROOM_SMOKING: false,\r\n ROOM_NON_SMOKING: false,\r\n ROOM_ADA: false,\r\n BOOKING_LINK: '#'\r\n }];\r\n }\r\n }\r\n },\r\n watch: {\r\n isRoomHiddenByFilters(): void {\r\n if (this.isRoomHiddenByFilters) {\r\n setTimeout(() => {\r\n $(this.$el).data('scrolled', false);\r\n (this.$el as HTMLElement).dataset.scrolled = 'false';\r\n }, 350);\r\n }\r\n },\r\n },\r\n computed: {\r\n isRoomHiddenByFilters(): boolean {\r\n for (const filterType in this.$store.getters.selectedFilters) {\r\n if (this.$store.getters.selectedFilters[filterType].length) {\r\n //@ts-ignore\r\n if (this[this.getFilterMethodName(filterType)](this.$store.getters.selectedFilters[filterType])) {\r\n return true;\r\n }\r\n }\r\n }\r\n\r\n return false;\r\n },\r\n\r\n icons(): {[key: string]: boolean} {\r\n let output: {[key: string]: boolean} = {\r\n 'non-smoking': false,\r\n smoking: false,\r\n ada: false\r\n };\r\n this.roomData.forEach(roomTypeData => {\r\n if (roomTypeData.hasOwnProperty('ROOM_SMOKING') && roomTypeData.ROOM_SMOKING) {\r\n output.smoking = true;\r\n }\r\n if (roomTypeData.hasOwnProperty('ROOM_NON_SMOKING') && roomTypeData.ROOM_NON_SMOKING) {\r\n output['non-smoking'] = true;\r\n }\r\n if (roomTypeData.hasOwnProperty('ROOM_ADA') && roomTypeData.ROOM_ADA) {\r\n output.ada = true;\r\n }\r\n });\r\n\r\n return output;\r\n },\r\n\r\n iconsAvailable(): {[key: string]: boolean} {\r\n let output: {[key: string]: boolean} = {\r\n anyRoomType: this.isAvailable,\r\n 'non-smoking': false,\r\n smoking: false,\r\n ada: false\r\n };\r\n this.roomAvailabilityData.ROOM_TYPES.forEach((roomType: RoomAvailabilityRoomType) => {\r\n if (roomType.hasOwnProperty('ROOM_SMOKING') && roomType.ROOM_SMOKING) {\r\n output.smoking = true;\r\n }\r\n if (roomType.hasOwnProperty('ROOM_NON_SMOKING') && roomType.ROOM_NON_SMOKING) {\r\n output['non-smoking'] = true;\r\n }\r\n if (roomType.hasOwnProperty('ROOM_ADA') && roomType.ROOM_ADA) {\r\n output.ada = true;\r\n }\r\n });\r\n\r\n return output;\r\n },\r\n\r\n isAvailable(): boolean {\r\n return this.$store.getters.roomTypeIsAvailable(this.roomAvailabilityData);\r\n },\r\n isSmoking(): boolean {\r\n for (let i = 0, l = this.roomData.length; i < l; i++) {\r\n if (this.roomData[i].ROOM_SMOKING) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n },\r\n isNonSmoking(): boolean {\r\n for (let i = 0, l = this.roomData.length; i < l; i++) {\r\n if (this.roomData[i].ROOM_NON_SMOKING) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n },\r\n\r\n containerClasses(): {[key: string]: boolean} {\r\n let classes: {[key: string]: boolean} = {\r\n hide: this.isRoomHiddenByFilters,\r\n scrolled: $(this.$el).data('scrolled')\r\n };\r\n const iconCount = Object.entries(this.icons).filter(icon => {\r\n return icon[1];\r\n }).length;\r\n classes['icon-count-' + iconCount] = true;\r\n\r\n return classes;\r\n },\r\n\r\n imageStyles(): {[key: string]: string} {\r\n return {\r\n 'background-position': this.page.IMG_FOCUS_X + '% ' + this.page.IMG_FOCUS_Y + '%',\r\n 'background-image': 'url(\\'' + this.page.IMG_SRC + '\\')'\r\n };\r\n },\r\n\r\n roomAvailabilityData(): RoomAvailabilityData {\r\n if (this.page.ID > 0) {\r\n for (let i = 0, l = this.$store.state.ROOMS.length; i < l; i++) {\r\n if (this.$store.state.ROOMS[i].PAGE_ID === this.page.ID) {\r\n return this.$store.state.ROOMS[i];\r\n }\r\n }\r\n }\r\n return {\r\n ADA_VARIANTS: [],\r\n DATA_AVAILABLE: false,\r\n PAGE_ID: 0,\r\n ROOM_TYPES: []\r\n };\r\n },\r\n\r\n averageNightlyPrice(): number {\r\n if (this.roomAvailabilityData.ROOM_TYPES.length) {\r\n return this.roomAvailabilityData.ROOM_TYPES[0].ROOM_AVERAGE_PRICE || 0;\r\n }\r\n\r\n return 0;\r\n },\r\n\r\n roomSqFt(): string {\r\n if (this.searchData['SQ-FT-HIGH'] !== this.searchData['SQ-FT-LOW']) {\r\n return this.searchData['SQ-FT-LOW'] + '-' + this.searchData['SQ-FT-HIGH'];\r\n }\r\n\r\n return '' + this.searchData['SQ-FT-HIGH'];\r\n },\r\n bedTypes(): {[key: string]: number[]} {\r\n const output: {[key: string]: number[]} = {};\r\n this.roomData.forEach(roomTypeData => {\r\n if (roomTypeData.ROOM_BED_TYPE.length && roomTypeData.ROOM_BED_COUNT > 0) {\r\n if (!output.hasOwnProperty(roomTypeData.ROOM_BED_TYPE)) {\r\n output[roomTypeData.ROOM_BED_TYPE] = [];\r\n }\r\n if (-1 === output[roomTypeData.ROOM_BED_TYPE].indexOf(roomTypeData.ROOM_BED_COUNT)) {\r\n output[roomTypeData.ROOM_BED_TYPE].push(roomTypeData.ROOM_BED_COUNT);\r\n }\r\n }\r\n });\r\n\r\n return output;\r\n },\r\n bedCount(): string {\r\n const output: string[] = [];\r\n for (const bedType in this.bedTypes) {\r\n output.push(this.bedTypes[bedType].join(' or '));\r\n }\r\n\r\n return output.join(' / ');\r\n // return this.searchData['BED'].split('-')[0];\r\n },\r\n bedType(): string {\r\n const output: string[] = [];\r\n for (const bedType in this.bedTypes) {\r\n output.push(bedType);\r\n }\r\n\r\n return output.join(' / ');\r\n // return this.searchData['BED'].split('-')[1] || '';\r\n },\r\n },\r\n methods: {\r\n isRoomHiddenByAccessibilityFilter(chosenAccessibilityTypes: string[]): boolean {\r\n if (0 === chosenAccessibilityTypes.length) {\r\n return false;\r\n }\r\n\r\n for (let i = 0, l = this.roomAvailabilityData.ADA_VARIANTS.length; i < l; i++) {\r\n if (-1 !== chosenAccessibilityTypes.indexOf(this.roomAvailabilityData.ADA_VARIANTS[i].toLowerCase())) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n },\r\n isRoomHiddenByBedTypeFilter(chosenBedTypes: string[]): boolean {\r\n for (let bedType in this.bedTypes) {\r\n for (let i = 0; i < this.bedTypes[bedType].length; i++) {\r\n if (-1 !== chosenBedTypes.indexOf(this.bedTypes[bedType][i] + '-' + bedType.toUpperCase())) {\r\n return false;\r\n\r\n }\r\n }\r\n }\r\n return true;\r\n },\r\n isRoomHiddenByPriceFilter(chosenPriceRanges: string[]): boolean {\r\n if (!chosenPriceRanges.length || !this.searchData?.[\"SQ-FT-LOW\"] || !this.searchData?.[\"SQ-FT-HIGH\"]) {\r\n return false;\r\n } else if (chosenPriceRanges.length && !this.isAvailable) {\r\n return true;\r\n }\r\n\r\n for (let i = 0, l = chosenPriceRanges.length; i < l; i++) {\r\n const chosenMinMax: number[] = chosenPriceRanges[i]\r\n .split('-')\r\n .map((sqFt: string) => parseInt(sqFt, 10));\r\n if (1 === chosenMinMax.length) {\r\n chosenMinMax.push(chosenMinMax[0]);\r\n }\r\n if (this.averageNightlyPrice >= chosenMinMax[0] && this.averageNightlyPrice <= chosenMinMax[1]) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n },\r\n isRoomHiddenBySmokingFilter(chosenSmokingOptions: string[]): boolean {\r\n if (-1 !== chosenSmokingOptions.indexOf('YES') && !this.isSmoking) {\r\n return true;\r\n }\r\n\r\n return -1 !== chosenSmokingOptions.indexOf('NO') && !this.isNonSmoking;\r\n },\r\n isRoomHiddenBySqFtFilter(chosenSqFtSizes: string[]): boolean {\r\n //sq_ft: (3) ['100-400', '400-750', '750-10000']\r\n if (!chosenSqFtSizes.length || !this.searchData?.[\"SQ-FT-LOW\"] || !this.searchData?.[\"SQ-FT-HIGH\"]) {\r\n return false;\r\n }\r\n\r\n for (let i = 0, l = chosenSqFtSizes.length; i < l; i++) {\r\n const chosenMinMax: number[] = chosenSqFtSizes[i]\r\n .split('-')\r\n .map((sqFt: string) => parseInt(sqFt, 10));\r\n if (1 === chosenMinMax.length) {\r\n chosenMinMax.push(chosenMinMax[0]);\r\n }\r\n if (\r\n (this.searchData[\"SQ-FT-LOW\"] >= chosenMinMax[0] && this.searchData[\"SQ-FT-LOW\"] <= chosenMinMax[1])\r\n || (this.searchData[\"SQ-FT-HIGH\"] >= chosenMinMax[0] && this.searchData[\"SQ-FT-HIGH\"] <= chosenMinMax[1])\r\n ) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n },\r\n getFilterMethodName(filterType: string): string {\r\n const preparedFilterType = filterType.toLowerCase()\r\n .split('_')\r\n .map((word: string) => word.charAt(0).toUpperCase() + word.substring(1).toLowerCase())\r\n .join('');\r\n return 'isRoomHiddenBy' + preparedFilterType + 'Filter';\r\n },\r\n }\r\n})\r\n","var render = function render() {\n var _vm = this,\n _c = _vm._self._c,\n _setup = _vm._self._setupProxy\n return _c(\"div\", { staticClass: \"hotel-widget\" }, [\n _c(\n \"div\",\n { staticClass: \"widget-side\" },\n [\n _c(\n \"form\",\n { staticClass: \"pepvalidate-v3 ignore-js full-width no-text-here\" },\n [\n _c(\"p\", { staticClass: \"check-in\" }, [\n _c(\"label\", [\n _c(\"span\", { staticClass: \"text mobile-hidden\" }, [\n _vm._v(\"Check-In\"),\n ]),\n _vm._v(\" \"),\n _c(\"span\", { staticClass: \"handle\" }, [\n _c(\"svg\", { staticClass: \"ic_calendar\" }, [\n _c(\"use\", {\n attrs: {\n \"xmlns:xlink\": \"http://www.w3.org/1999/xlink\",\n \"xlink:href\": \"#ic_calendar\",\n },\n }),\n ]),\n ]),\n _vm._v(\" \"),\n _c(\"input\", {\n attrs: {\n name: \"check_in\",\n autocomplete: \"off\",\n type: \"text\",\n readonly: \"\",\n \"data-dateformat\": \"MM d\",\n \"data-mindate\": _vm.minCheckInDate,\n \"data-onhide\": \"FILTER-WIDGET-DATEPICKER-HIDE\",\n \"data-onselect\": \"FILTER-WIDGET-DATEPICKER-SELECT\",\n \"data-range\": \"true\",\n },\n domProps: { value: _vm.checkInDateFormatted },\n on: {\n click: function ($event) {\n $event.preventDefault()\n $event.stopPropagation()\n return _vm.showCalendars(false)\n },\n },\n }),\n ]),\n ]),\n _vm._v(\" \"),\n _c(\"p\", { staticClass: \"check-out active\" }, [\n _c(\"label\", [\n _c(\"span\", { staticClass: \"text mobile-hidden\" }, [\n _vm._v(\"Check-Out\"),\n ]),\n _vm._v(\" \"),\n _c(\"span\", { staticClass: \"handle\" }, [\n _c(\"svg\", { staticClass: \"ic_calendar\" }, [\n _c(\"use\", {\n attrs: {\n \"xmlns:xlink\": \"http://www.w3.org/1999/xlink\",\n \"xlink:href\": \"#ic_calendar\",\n },\n }),\n ]),\n ]),\n _vm._v(\" \"),\n _c(\"input\", {\n attrs: {\n name: \"check_out\",\n autocomplete: \"off\",\n type: \"text\",\n readonly: \"\",\n \"data-dateformat\": \"MM d\",\n \"data-mindate\": _vm.minCheckOutDate,\n \"data-onhide\": \"FILTER-WIDGET-DATEPICKER-HIDE\",\n \"data-onselect\": \"FILTER-WIDGET-DATEPICKER-SELECT\",\n \"data-range\": \"true\",\n },\n domProps: { value: _vm.checkOutDateFormatted },\n on: {\n click: function ($event) {\n $event.preventDefault()\n $event.stopPropagation()\n return _vm.showCalendars(true)\n },\n },\n }),\n ]),\n ]),\n _vm._v(\" \"),\n _c(\n \"p\",\n {\n staticClass: \"full-width reservation-offer-code\",\n staticStyle: { display: \"none\" },\n },\n [\n _c(\"label\", [\n _c(\"span\", { staticClass: \"text\" }, [_vm._v(\"Offer Code\")]),\n _vm._v(\" \"),\n _c(\"input\", {\n ref: \"offerCodeInput\",\n attrs: {\n \"data-error-msg\": \"Please enter a valid offer code.\",\n \"data-regex\": \"^[a-zA-Z0-9]+$\",\n name: \"offer_code\",\n type: \"text\",\n },\n domProps: { value: _vm.offerCode },\n on: {\n keyup: _vm.offerCodeKeyUpHandler,\n input: function ($event) {\n _vm.offerCode = $event\n },\n },\n }),\n ]),\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"p\",\n {\n staticClass: \"full-width reservation-iata\",\n staticStyle: { display: \"none\" },\n },\n [\n _c(\"label\", [\n _c(\"span\", { staticClass: \"text\" }, [_vm._v(\"IATA\")]),\n _vm._v(\" \"),\n _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.iata,\n expression: \"iata\",\n },\n ],\n ref: \"iataInput\",\n attrs: { name: \"iata\", type: \"text\" },\n domProps: { value: _vm.iata },\n on: {\n input: function ($event) {\n if ($event.target.composing) return\n _vm.iata = $event.target.value\n },\n },\n }),\n ]),\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass:\n \"calendar-wrapper drop-down-overlay show-loading-spinner\",\n class: _vm.calendarWrapperClasses,\n on: {\n click: function ($event) {\n $event.stopPropagation()\n },\n },\n },\n [\n _c(_vm.calendarComponent, {\n ref: \"calendar\",\n tag: \"component\",\n attrs: {\n \"show-special-offers\": \"\",\n \"load-calendar-callback\": \"\",\n \"change-dates-callback\": _vm.setDatesFromCalendar,\n \"page-id\": _vm.page.ID,\n },\n on: {\n loaded: function ($event) {\n _vm.calendarLoaded = true\n },\n close: function ($event) {\n _vm.calendarOpen = false\n },\n },\n }),\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"clearme\" }),\n ]\n ),\n _vm._v(\" \"),\n _c(\"hotel-room-call-to-action\", {\n attrs: {\n page: _vm.page,\n \"offer-codes\": _vm.offerCodes,\n \"show-rate-details\": \"\",\n \"show-rate-detail-totals\": \"\",\n },\n }),\n _vm._v(\" \"),\n _c(\"hotel-room-icons\", {\n attrs: {\n \"room-data\": _vm.roomData,\n \"room-availability-data\": _vm.roomAvailabilityData,\n page: _vm.page,\n },\n }),\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"widget-side\" }, [\n _vm.roomFloorPlanUrl.length\n ? _c(\n \"a\",\n {\n staticClass: \"btn btn-dark floorplan\",\n attrs: {\n href: _vm.roomFloorPlanUrl,\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n },\n },\n [_vm._v(\"Floor Plan\")]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"table\",\n { staticClass: \"hotel-details\", attrs: { role: \"presentation\" } },\n [\n _c(\"tbody\", [\n _c(\"tr\", [\n _c(\"td\", { attrs: { colspan: \"2\" } }, [\n _vm._v(\"SIZE\"),\n _c(\"br\"),\n _vm._v(_vm._s(_vm.roomSqFt) + \" sq. ft.\"),\n ]),\n ]),\n _vm._v(\" \"),\n _c(\"tr\", [\n _c(\"td\", [\n _vm._v(_vm._s(_vm.bedType)),\n _c(\"br\"),\n _vm._v(_vm._s(_vm.bedCount)),\n ]),\n _vm._v(\" \"),\n _c(\"td\", [\n _vm._v(\"BATHS\"),\n _c(\"br\"),\n _vm._v(_vm._s(_vm.searchData[\"BATH-COUNT\"])),\n ]),\n ]),\n ]),\n ]\n ),\n ]),\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","import { render, staticRenderFns } from \"./hotelRoomDetails.vue?vue&type=template&id=322474b1&scoped=true\"\nimport script from \"./hotelRoomDetails.vue?vue&type=script&lang=ts\"\nexport * from \"./hotelRoomDetails.vue?vue&type=script&lang=ts\"\nimport style0 from \"./hotelRoomDetails.vue?vue&type=style&index=0&id=322474b1&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"322474b1\",\n null\n \n)\n\nexport default component.exports","\r\n/*!\r\n * Copyright (C) 2022-2025, Peppermill Inc.\r\n * All rights reserved.\r\n *\r\n * Redistribution and use in source and binary forms, with or without\r\n * modification, are not permitted.\r\n *//*\r\n *\t\t2022-08-16\r\n *\t\t\t- Refactor filter-widget.js hotel room widget related functionality to component.\r\n *\r\n *\t\t2023-04-03 (jhoward)\r\n *\t\t\t- Refactor to use TypeScript.\r\n *\t\t\t- Show rate details in .\r\n *\r\n *\t\t2023-06-20 (jhoward)\r\n *\t\t\t- Fix mobile calendar layout in .\r\n *\r\n *\t\t2024-08-30 (jhoward)\r\n *\t\t\t- Remove navigation arrows for the calendar in as they are now included in the calendar component.\r\n *\r\n *\t\t2025-02-13 (jhoward)\r\n *\t\t\t- Show multiple types of beds if available in .\r\n*/\r\n\r\nimport {ComponentPublicInstance, defineComponent, PropType} from \"vue\";\r\nimport HotelRoomCallToAction from \"./hotelRoomCallToAction.vue\";\r\nimport HotelCalendar from \"./hotelCalendar.vue\";\r\nimport HotelRoomIcons from \"./hotelRoomIcons.vue\";\r\nimport {\r\n FilterCache,\r\n HotelPage,\r\n HotelRoomData,\r\n PageListRoomSearchData,\r\n ReservationDataCache,\r\n RoomAvailabilityData\r\n} from \"./defs\";\r\nimport KeyUpEvent = JQuery.KeyUpEvent;\r\n\r\nexport default defineComponent({\r\n name: 'hotelRoomDetails',\r\n components: {\r\n HotelCalendar,\r\n HotelRoomCallToAction,\r\n HotelRoomIcons,\r\n },\r\n props: {\r\n offerCodes: {\r\n type: Array as PropType,\r\n default: () => []\r\n },\r\n searchData: {\r\n type: Object as PropType,\r\n default: () => {\r\n return {\r\n 'SQ-FT-LOW': 0,\r\n 'SQ-FT-HIGH': 0,\r\n 'BED': '',\r\n 'BATH-COUNT': 0\r\n };\r\n }\r\n },\r\n minCheckInDate: {\r\n type: String,\r\n required: true\r\n },\r\n minCheckOutDate: {\r\n type: String,\r\n required: true\r\n },\r\n page: {\r\n type: Object as PropType,\r\n default: () => {\r\n return {\r\n ID: 0,\r\n TITLE: '',\r\n URL: '',\r\n IMG_SRC: '',\r\n IMG_FOCUS_X: 50,\r\n IMG_FOCUS_Y: 50\r\n };\r\n }\r\n },\r\n roomFloorPlanUrl: {\r\n type: String,\r\n default: ''\r\n },\r\n roomData: {\r\n type: Array as PropType,\r\n default: () => {\r\n return [{\r\n ROOM_TITLE: '',\r\n ROOM_TITLE_FIXED: '',\r\n ROOM_SQ_FT: 0,\r\n ROOM_BED_TYPE: '',\r\n ROOM_BED_COUNT: 0,\r\n ROOM_BATH_COUNT: 0,\r\n ROOM_SMOKING: false,\r\n ROOM_NON_SMOKING: false,\r\n ROOM_ADA: false,\r\n BOOKING_LINK: '#'\r\n }];\r\n }\r\n }\r\n },\r\n mounted() {\r\n $(this.initialize);\r\n },\r\n data() {\r\n return {\r\n isInitialized: false,\r\n\r\n savedResData: {} as ReservationDataCache,\r\n\r\n filterCacheLabel: 'hotel-filter-widget-selections',\r\n savedFilterData: {} as FilterCache,\r\n\r\n offerCode: '',\r\n iata: '',\r\n\r\n calendarComponent: '',\r\n calendarCurrentMonthIndex: -1,\r\n calendarMonthNodes: [],\r\n\r\n currentUiBreakpoint: 'mobile',\r\n\r\n calendarOpen: false,\r\n calendarLoaded: false,\r\n };\r\n },\r\n computed: {\r\n checkInDateFormatted() {\r\n if (this.$store.state.checkInDate) {\r\n return this.reservationWidgetPrepareDate(this.$store.state.checkInDate);\r\n }\r\n\r\n return '';\r\n },\r\n checkOutDateFormatted() {\r\n if (this.$store.state.checkOutDate) {\r\n return this.reservationWidgetPrepareDate(this.$store.state.checkOutDate);\r\n }\r\n\r\n return '';\r\n },\r\n\r\n calendarNumberOfMonthsToShow() {\r\n if ('mobile' === this.currentUiBreakpoint) {\r\n return 1;\r\n }\r\n\r\n return 2;\r\n },\r\n\r\n roomSqFt(): string {\r\n if (this.searchData['SQ-FT-HIGH'] !== this.searchData['SQ-FT-LOW']) {\r\n return this.searchData['SQ-FT-LOW'] + '-' + this.searchData['SQ-FT-HIGH'];\r\n }\r\n\r\n return '' + this.searchData['SQ-FT-HIGH'];\r\n },\r\n bedTypes(): {[key: string]: number[]} {\r\n const output: {[key: string]: number[]} = {};\r\n this.roomData.forEach(roomTypeData => {\r\n if (roomTypeData.ROOM_BED_TYPE.length && roomTypeData.ROOM_BED_COUNT > 0) {\r\n if (!output.hasOwnProperty(roomTypeData.ROOM_BED_TYPE)) {\r\n output[roomTypeData.ROOM_BED_TYPE] = [];\r\n }\r\n if (-1 === output[roomTypeData.ROOM_BED_TYPE].indexOf(roomTypeData.ROOM_BED_COUNT)) {\r\n output[roomTypeData.ROOM_BED_TYPE].push(roomTypeData.ROOM_BED_COUNT);\r\n }\r\n }\r\n });\r\n\r\n return output;\r\n },\r\n bedCount(): string {\r\n const output: string[] = [];\r\n for (const bedType in this.bedTypes) {\r\n output.push(this.bedTypes[bedType].join(' or '));\r\n }\r\n\r\n return output.join(' / ');\r\n // return this.searchData['BED'].split('-')[0];\r\n },\r\n bedType(): string {\r\n const output: string[] = [];\r\n for (const bedType in this.bedTypes) {\r\n output.push(bedType);\r\n }\r\n\r\n return output.join(' / ');\r\n // return this.searchData['BED'].split('-')[1] || '';\r\n },\r\n\r\n calendarWrapperClasses() {\r\n return {\r\n hide: !this.calendarOpen\r\n };\r\n },\r\n\r\n roomAvailabilityData(): RoomAvailabilityData {\r\n if (this.page.ID > 0) {\r\n for (let i = 0, l = this.$store.state.ROOMS.length; i < l; i++) {\r\n if (parseInt(this.$store.state.ROOMS[i].PAGE_ID, 10) === this.page.ID) {\r\n return this.$store.state.ROOMS[i];\r\n }\r\n }\r\n }\r\n return {\r\n ADA_VARIANTS: [],\r\n DATA_AVAILABLE: false,\r\n PAGE_ID: 0,\r\n ROOM_TYPES: []\r\n };\r\n },\r\n },\r\n watch: {\r\n savedFilterData() {\r\n //HANDLE CHECK IN/OUT DATES\r\n this.setCheckInAndCheckOutDates();\r\n },\r\n offerCode() {\r\n this.saveOfferCodeForLater(1500);\r\n },\r\n\r\n calendarLoaded() {\r\n if (this.calendarLoaded) {\r\n requestAnimationFrame(() => {\r\n const calendarNode: Element | undefined = (this.$refs.calendar as ComponentPublicInstance | null)?.$el;\r\n if (calendarNode) {\r\n this.calendarMonthNodes = Array.from(calendarNode.querySelectorAll('.rate-calendar'));\r\n const firstMonthShownNode: HTMLElement | null = calendarNode.querySelector('.rate-calendar:not(.hide)');\r\n if (firstMonthShownNode) {\r\n this.calendarCurrentMonthIndex = this.calendarMonthNodes.indexOf(firstMonthShownNode as never);\r\n }\r\n }\r\n });\r\n }\r\n },\r\n\r\n calendarCurrentMonthIndex() {\r\n this.calendarMonthNodes.forEach((rateCalendarNode: HTMLElement, rateCalendarIndex: number) => {\r\n if (rateCalendarIndex === this.calendarCurrentMonthIndex || rateCalendarIndex === this.calendarCurrentMonthIndex + this.calendarNumberOfMonthsToShow - 1) {\r\n rateCalendarNode.classList.remove('hide');\r\n } else {\r\n rateCalendarNode.classList.add('hide');\r\n }\r\n });\r\n },\r\n checkInDate() {\r\n if (this.$store.state.checkInDate && this.$store.state.checkOutDate) {\r\n window.hotelRoomsVueApp.saveReservationSelections($(this.$el).data('initialized', this.isInitialized), this.$store.state.checkInDate, this.$store.state.checkOutDate);\r\n }\r\n },\r\n checkOutDate() {\r\n if (this.$store.state.checkInDate && this.$store.state.checkOutDate) {\r\n window.hotelRoomsVueApp.saveReservationSelections($(this.$el).data('initialized', this.isInitialized), this.$store.state.checkInDate, this.$store.state.checkOutDate);\r\n }\r\n }\r\n },\r\n methods: {\r\n initialize() {\r\n document.addEventListener('click', () => {\r\n this.calendarOpen = false;\r\n }, {passive: true});\r\n window.addEventListener('resize', () => {\r\n requestAnimationFrame(this.setCurrentUiBreakpoint);\r\n }, {\r\n passive: true\r\n });\r\n requestAnimationFrame(this.setCurrentUiBreakpoint);\r\n\r\n if (window.hasOwnProperty('pepvalidateInitForm')) {\r\n window.pepvalidateInitForm.call(this.$refs.form as HTMLFormElement);\r\n }\r\n\r\n this.getSavedReservationData();\r\n\r\n this.getSavedFilterData();\r\n\r\n this.setCheckInAndCheckOutDates();\r\n\r\n this.isInitialized = true;\r\n },\r\n setCurrentUiBreakpoint(): void {\r\n const htmlClassList = document.querySelector('html')?.classList;\r\n if (htmlClassList) {\r\n if (htmlClassList.contains('ui-mobile')) {\r\n this.currentUiBreakpoint = 'mobile';\r\n } else if (htmlClassList.contains('ui-tablet')) {\r\n this.currentUiBreakpoint = 'tablet';\r\n } else if (htmlClassList.contains('ui-desktop')) {\r\n this.currentUiBreakpoint = 'desktop';\r\n } else if (htmlClassList.contains('ui-widescreen')) {\r\n this.currentUiBreakpoint = 'widescreen';\r\n }\r\n }\r\n },\r\n setCheckInAndCheckOutDates(): void {\r\n const startQuerystringDate = window.hotelRoomsVueApp.formatYYYYMMDDToDateObject(window.pepHelperFunctions.getParameterByName('start'));\r\n const endQuerystringDate = window.hotelRoomsVueApp.formatYYYYMMDDToDateObject(window.pepHelperFunctions.getParameterByName('end'));\r\n\r\n if (this.savedResData.checkin) {\r\n this.$store.commit(\"updateCheckInDate\", new Date(this.savedResData.checkin));\r\n\r\n if (this.savedResData.checkout) {\r\n this.$store.commit('updateCheckOutDate', new Date(this.savedResData.checkout));\r\n } else {\r\n this.$store.commit('updateCheckOutDate', window.hotelRoomsVueApp.addDays(this.$store.state.checkInDate, 2));\r\n }\r\n } else if (startQuerystringDate && endQuerystringDate) {\r\n this.$store.commit(\"updateCheckInDate\", startQuerystringDate);\r\n this.$store.commit(\"updateCheckOutDate\", endQuerystringDate);\r\n }\r\n },\r\n getSavedReservationData(): void {\r\n this.savedResData = window.hotelRoomsVueApp.getReservationSelections();\r\n if (this.savedResData.code) {\r\n this.offerCode = this.savedResData.code;\r\n }\r\n if (this.savedResData.iata) {\r\n this.iata = this.savedResData.iata;\r\n }\r\n },\r\n getSavedFilterData() {\r\n const cachedFilterData = window.pepHelperFunctions.getCachedData(this.filterCacheLabel, 1800000);\r\n if (!!cachedFilterData && cachedFilterData.DATA?.filters) {\r\n const filterCache: FilterCache | null = cachedFilterData.DATA.filters;\r\n if (filterCache) {\r\n for (let key in filterCache) {\r\n filterCache[key as keyof FilterCache]?.forEach((value: string) => {\r\n this.$store.commit('updateFilter', {\r\n key,\r\n value,\r\n selected: true\r\n });\r\n });\r\n }\r\n }\r\n }\r\n },\r\n\r\n\r\n reservationWidgetPrepareDate(date: Date | string | null) {\r\n //make sure a date was passed in\r\n if (typeof date !== 'object' || !(date instanceof Date)) {\r\n return '';\r\n }\r\n\r\n //var monthNames\t=\t($container.hasClass('hotel-page'))\t?\twindow.pepDateFunctions.language.en.monthsShort\t:\twindow.pepDateFunctions.language.en.months;\r\n const newDay = date.getDate().toString(10);\r\n const newSuffix = (newDay === '11' || newDay === '12' || newDay === '13')\r\n ? 'th'\r\n : (newDay.substr(-1, 1) === '1')\r\n ? 'st'\r\n : (newDay.substr(-1, 1) === '2')\r\n ? 'nd'\r\n : (newDay.substr(-1, 1) === '3')\r\n ? 'rd'\r\n : 'th';\r\n\r\n return window.pepDateFunctions.language.en.daysShort[date.getDay()] + ', ' + window.pepDateFunctions.language.en.monthsShort[date.getMonth()] + ' ' + newDay + newSuffix;\r\n },\r\n\r\n\r\n showCalendars(startOnCheckOut?: boolean) {\r\n if (!this.calendarOpen) {\r\n if ('boolean' !== typeof startOnCheckOut) {\r\n startOnCheckOut = false;\r\n }\r\n\r\n if ('' === this.calendarComponent) {\r\n this.calendarComponent = 'hotel-calendar';\r\n }\r\n\r\n this.calendarOpen = true;\r\n }\r\n },\r\n setDatesFromCalendar(dayCheckIn: Date | null, dayCheckOut: Date | null, initialCheckIn: Date | null, initialCheckOut: Date | null) {\r\n if (\r\n dayCheckIn\r\n && dayCheckOut\r\n && (\r\n dayCheckIn.getTime() !== initialCheckIn?.getTime()\r\n || dayCheckOut.getTime() !== initialCheckOut?.getTime()\r\n )\r\n ) {\r\n document.querySelector('.page-link-filter .pepvalidate-v3')?.dispatchEvent(new CustomEvent('submit', {detail: 'skipScroll'}));\r\n }\r\n },\r\n\r\n offerCodeKeyUpHandler(event: KeyboardEvent) {\r\n if (event.key === 'Enter') {\r\n const buttonNodes = this.$el.querySelectorAll('.non-resort-page, .filter-submit input');\r\n for (let i = 0, l = buttonNodes.length; i < l; i++) {\r\n if ('visible' === getComputedStyle(buttonNodes[i]).visibility) {\r\n buttonNodes[i].dispatchEvent(new Event('click'));\r\n break;\r\n }\r\n }\r\n }\r\n },\r\n saveOfferCodeForLater(timeout?: number) {\r\n window.hotelRoomsVueApp.saveReservationSelections($(this.$el).data('initialized', this.isInitialized), this.$store.state.checkInDate, this.$store.state.checkOutDate);\r\n },\r\n }\r\n})\r\n","var render = function render() {\n var _vm = this,\n _c = _vm._self._c\n return _c(\n \"div\",\n {\n staticClass: \"loader--overlay\",\n class: { \"loader--overlay-show\": _vm.active },\n },\n [\n _c(\"div\", { staticClass: \"loader--container\" }, [\n _c(\n \"svg\",\n {\n staticClass: \"loader--circular\",\n attrs: { viewBox: \"25 25 50 50\" },\n },\n [\n _c(\"circle\", {\n staticClass: \"loader--path\",\n attrs: {\n cx: \"50\",\n cy: \"50\",\n r: \"20\",\n fill: \"none\",\n \"stroke-width\": \"4\",\n \"stroke-miterlimit\": \"10\",\n },\n }),\n ]\n ),\n ]),\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","import { render, staticRenderFns } from \"./loader.vue?vue&type=template&id=61ee6a0c&scoped=true\"\nimport script from \"./loader.vue?vue&type=script&lang=js\"\nexport * from \"./loader.vue?vue&type=script&lang=js\"\nimport style0 from \"./loader.vue?vue&type=style&index=0&id=61ee6a0c&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"61ee6a0c\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n","//@ts-ignore\r\nimport Vue from 'vue/dist/vue.esm'\r\n\r\nimport hotelRoomStore from './library/js/store/hotel-rooms.store'\r\n\r\nimport HotelFilterWidget from \"./library/js/components/hotel/hotelFilterWidget.vue\";\r\nimport PageListRoom from \"./library/js/components/hotel/pageListRoom.vue\";\r\nimport HotelRoomDetails from \"./library/js/components/hotel/hotelRoomDetails.vue\";\r\nimport Loader from \"./library/js/components/loader.vue\";\r\n\r\ninterface ReservationWidgetDatesCache {\r\n exp: number;\r\n checkin: string;\r\n checkout: string;\r\n code: string;\r\n iata: string;\r\n}\r\n\r\nVue.component('hotel-filter-widget', HotelFilterWidget);\r\nVue.component('page-list-room', PageListRoom);\r\nVue.component('hotel-room-details', HotelRoomDetails);\r\nVue.component('loader', Loader);\r\n\r\nlet saveResDataTimer = -1;\r\n\r\nwindow.hotelRoomsVueApp = new Vue({\r\n store: hotelRoomStore,\r\n mounted: function () {\r\n $(window.resetPageLinks);\r\n },\r\n methods: {\r\n formatDateObjectYYYYMMDD: function (dateObject: Date) {\r\n let regMatch;\r\n\r\n // check for valid date\r\n if (typeof dateObject === 'object' && typeof dateObject.getMonth === 'function') {\r\n regMatch = /(20\\d{2})-(\\d{1,2})-(\\d{1,2})/.exec(dateObject.getFullYear() + '-' + (dateObject.getMonth() + 1) + '-' + dateObject.getDate());\r\n\r\n if (!!regMatch) {\r\n // verify correct format for months\r\n if (regMatch[2].length < 2) regMatch[2] = '0' + regMatch[2];\r\n\r\n // verify correct format for days\r\n if (regMatch[3].length < 2) regMatch[3] = '0' + regMatch[3];\r\n\r\n return regMatch[1] + '-' + regMatch[2] + '-' + regMatch[3];\r\n }\r\n }\r\n\r\n return '';\r\n },\r\n formatYYYYMMDDToDateObject: function (YYYYMMDD: string) {\r\n let matches = /(\\d{4})-(\\d{2})-(\\d{2})/.exec(YYYYMMDD);\r\n if (matches) {\r\n let date = new Date();\r\n date.setFullYear(parseInt(matches[1], 10));\r\n date.setMonth(parseInt(matches[2], 10) - 1);\r\n date.setDate(parseInt(matches[3], 10));\r\n\r\n return date;\r\n }\r\n\r\n return null;\r\n },\r\n daysBetween: function (startDate: Date, endDate: Date) {\r\n let millisecondsPerDay = 24 * 60 * 60 * 1000;\r\n\r\n return (window.pepDateFunctions.treatAsUTC(endDate).getTime() - window.pepDateFunctions.treatAsUTC(startDate).getTime()) / millisecondsPerDay;\r\n },\r\n addDays: function (date: Date, days: number) {\r\n let result = new Date(date);\r\n\r\n result.setDate(result.getDate() + days);\r\n\r\n return result;\r\n },\r\n addMonths: function (date: Date, months: number) {\r\n let result = new Date(date);\r\n\r\n result.setMonth(result.getMonth() + months);\r\n\r\n return result;\r\n },\r\n\r\n getReservationSelections: function () {\r\n let output = {};\r\n\r\n if ('JSON' in window) {\r\n //check for saved values for check in/out dates\r\n try {\r\n const cacheData: {DATA: ReservationWidgetDatesCache} | null = window.pepHelperFunctions.getCachedData('reservation-widget-dates', 1800000, true) || null;\r\n if (cacheData) {\r\n //make sure check-in-out dates are valid\r\n if (cacheData.DATA.checkin) {\r\n let checkIn = new Date(cacheData.DATA.checkin as string);\r\n const checkInSave = checkIn;\r\n let checkInString = window.pepDateFunctions.formatDateObjectYYYYMMDD(checkIn);\r\n const todayDate = new Date();\r\n const todayString = window.pepDateFunctions.formatDateObjectYYYYMMDD(todayDate);\r\n if (checkInString < todayString) {\r\n cacheData.DATA.checkin = todayDate.toString();\r\n checkIn = todayDate;\r\n checkInString = window.pepDateFunctions.formatDateObjectYYYYMMDD(checkIn);\r\n // console.log('change checkIn', checkIn, checkInString);\r\n }\r\n\r\n if ('checkout' in cacheData.DATA) {\r\n const checkOut = new Date(cacheData.DATA.checkout as string);\r\n const checkOutString = window.pepDateFunctions.formatDateObjectYYYYMMDD(checkOut);\r\n if (checkInString >= checkOutString) {\r\n const daysBetween = window.pepDateFunctions.daysBetween(checkInSave, checkOut);\r\n cacheData.DATA.checkout = window.pepDateFunctions.addDays(checkIn, daysBetween).toString();\r\n }\r\n }\r\n }\r\n output = cacheData.DATA;\r\n }\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n }\r\n\r\n return output;\r\n },\r\n saveReservationSelections: function ($widgetEle: JQuery, checkInDate: Date, checkOutDate: Date, overrides = {checkin: null, checkout: null, code: null, iata: null, timerDuration: 33}) {\r\n if ($widgetEle.data('initialized') && 'JSON' in window) {\r\n window.clearTimeout(saveResDataTimer);\r\n saveResDataTimer = window.setTimeout(function () {\r\n try {\r\n let $inputs = $widgetEle.find('.pepvalidate-v3').find('input, select');\r\n window.pepHelperFunctions.setCachedData(\r\n 'reservation-widget-dates',\r\n {\r\n exp: window.pepDateFunctions.addMinutes(new Date(), 30),\r\n checkin: overrides.checkin ? overrides.checkin : checkInDate.toJSON(),\r\n checkout: overrides.checkout || checkOutDate.toJSON(),\r\n code: overrides.code || $inputs.filter('[name=offer_code]').val(),\r\n iata: overrides.iata || $inputs.filter('[name=iata]').val()\r\n },\r\n true\r\n );\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n }, overrides.timerDuration);\r\n }\r\n },\r\n\r\n formatAsDollarAmount: function (amount: string | number, truncate: boolean = true) {\r\n let tmp = [];\r\n try {\r\n let formattedAmount = amount;\r\n if (typeof formattedAmount === 'string') {\r\n formattedAmount = formattedAmount.replace(/[$,]/g, '');\r\n formattedAmount = parseFloat(formattedAmount);\r\n }\r\n\r\n // @ts-ignore\r\n if (truncate && formattedAmount.toFixed(2) == parseInt(formattedAmount, 10)) {\r\n formattedAmount = parseInt('' + formattedAmount, 10);\r\n } else {\r\n formattedAmount = formattedAmount.toFixed(2);\r\n }\r\n\r\n formattedAmount = '' + formattedAmount;\r\n\r\n if (formattedAmount.indexOf('.') > -1) {\r\n tmp = formattedAmount.split('.');\r\n } else {\r\n tmp[0] = formattedAmount;\r\n }\r\n\r\n tmp[0] = tmp[0].replace(/([0-9])(?=([0-9]{3})+)/g, '$1,');\r\n\r\n formattedAmount = tmp.join('.');\r\n\r\n return formattedAmount;\r\n } catch (e) {\r\n return amount;\r\n }\r\n }\r\n }\r\n})\r\n .$mount(\"#container\");","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","__webpack_require__.j = 728;","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t728: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkpeppermillreno_com_dev\"] = self[\"webpackChunkpeppermillreno_com_dev\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [305], () => (__webpack_require__(976)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","getSelectedFilters","filters","selectedFilters","forEach","filter","key","items","filterValue","selected","push","value","use","state","ROOMS","ADJACENT_DATES","isRoomAvailabilityLoaded","filterSaveTimer","filterSaveTimeout","title","bookingLinkData","start","end","adults","children","checkInDate","checkOutDate","mutations","updateState","data","length","updateRooms","Array","isArray","updateAdjacentDates","updateFilter","saveChange","filterType","filterIndex","filterValueIndex","clearTimeout","window","setTimeout","pepHelperFunctions","setCachedData","updateCheckInDate","updateCheckOutDate","getters","currentRoomWingCode","currentRoomType","DATA","rrcsn_wing_code","bookingLinkRoomPageId","stayLength","hotelRoomsVueApp","daysBetween","roomTypeIsAvailable","roomAvailabilityData","ROOM_TYPES","roomType","MIN_STAY_DAYS","roomTypeTotalAvailable","map","ROOM_INVENTORY","reduce","roomInventory","totalInventory","roomTypeMinStayDays","minStayRoomTypes","selectedDates","output","currentDate","checkOutTime","getTime","pepDateFunctions","formatDateObjectYYYYMMDD","addDays","bookingLink","prtId","offerCode","pageId","clickSource","params","room_page_id","o","selectedRoomTypeIndex","isNonSmokingRoomTypeFound","test","location","href","availableRoomTypes","i","l","PRT_ID","hasOwnProperty","ROOM_NON_SMOKING","auto_book_prt","room","ROOM_SEQUENCE_NUMBER","$","param","render","_vm","this","_c","_self","_setupProxy","staticClass","class","containerClasses","attrs","ref","_v","role","on","submit","$event","preventDefault","stopPropagation","filterSubmitHandler","apply","arguments","_m","directives","name","rawName","checkInDateFormatted","expression","autocomplete","type","readonly","minCheckInDate","domProps","click","showCalendars","keydown","input","target","composing","checkOutDateFormatted","minCheckOutDate","keyup","offerCodeKeyUpHandler","selectedFilterCount","_s","selectedFilterLabel","isFilterOpen","isRoomDataLoading","_e","iata","$store","close","calendarWrapperClasses","calendarComponent","tag","setDatesFromCalendar","loaded","calendarLoaded","handleCalendarClose","nonResortPageButtonClick","resortPageButtonClick","_withStripped","filterContainerClasses","filterCloseButtonClick","_l","filterColumns","filterColumn","filterColumnIndex","titleClickHandler","active","show","filterTypesToShow","filterClickHandler","normalizeComponent","scriptExports","staticRenderFns","functionalTemplate","injectStyles","scopeId","moduleIdentifier","shadowMode","hook","options","_compiled","functional","_scopeId","context","$vnode","ssrContext","parent","__VUE_SSR_CONTEXT__","call","_registeredComponents","add","_ssrRegister","$root","$options","shadowRoot","_injectStyles","originalRender","h","existing","beforeCreate","concat","exports","emits","payload","props","Boolean","default","required","computed","hide","columnOne","Math","floor","columnTwo","methods","$emit","filterTypeKey","isDisplayVertical","style","calendarMonthsToShow","calendarInitialized","calendarContainerClasses","calendarPrevClasses","seekMonth","calendarNextClasses","calendarMonths","month","monthIndex","year","refInFor","getMonthClasses","calendarCurrentMonthIndex","seek","component","dayClasses","day","TITLE","OFFER_CODE","OFFER_CODE_STRIKE","MIN_NIGHTS","ariaLabel","ariaHidden","handleDayClick","handleDayKeydown","PRICE","Object","isBlank","isCheckIn","KEY","isCheckOut","BLANK","suffix","dateSuffix","DATE","getDate","getDayMonthName","includes","dayNumberOfReservation","indexOf","isHighlighted","DISPLAY_RATES","isNoData","isSpecialOffer","BASE_PRICE","BEFORE_TODAY","getMonth","language","en","months","event","commit","dayHeaders","dayHeader","index","weeks","week","nativeOn","direction","components","HotelCalendarDay","shiftKey","isLastDayOfMonth","isFirstDayOfMonth","closeCalendar","viewBox","cx","cy","r","fill","LoadingSpinner","HotelCalendarFooter","HotelCalendarMonth","showSpecialOffers","loadCalendarCallback","String","changeDatesCallback","Function","Number","disallowSoldOutDates","calendarData","updateCallback","widgetClasses","initialCheckInDate","initialCheckOutDate","blankDay","ROOM_SEQUENCE_STRIKE","currentUiBreakpoint","uiBreakpointTimer","today","Date","toDateString","mounted","addEventListener","setCurrentUiBreakpoint","passive","requestAnimationFrame","loadTemplate","watch","$el","querySelector","focus","badDateFound","split","yearMonth","isDayNoData","showOverlayDialog","alertMode","confirmAccept","confirmTitle","confirmBody","callback","dateSelectCallback","monthYear","monthData","monthWeeks","titleParts","titleMonth","parseInt","titleYear","firstDayOfWeek","getDay","weeksInMonth","ceil","keys","monthWeek","ii","ll","dayNumber","dayKey","date","getDayDate","DAY","isDateBeforeToday","calendarNumberOfMonthsToShow","classes","className","checkInMonth","bookingLinkStartDate","checkInYear","getFullYear","htmlClassList","document","classList","contains","currentMonthIndex","dateParts","isNaN","scrollToCheckIn","checkInMonthNode","$refs","viewportNode","viewport","scrollTop","offsetTop","initializeCalendar","forceReload","loadCalendar","firstDate","allMonths","newDate","addMonths","response","fetch","method","cache","headers","redirect","body","JSON","stringify","ACTION","MONTHS","CHECK_IN_DATE","CHECK_OUT_DATE","PAGE_ID","CALLBACK","USE_VUE","SHOW_SPECIAL","DATA_ONLY","json","STATUS","CALENDAR","e","error","pepTracking","message","ajax","url","dataType","je_message","je_source","je_lineno","je_colno","je_url","je_stack","getDayObjectForDate","exec","WidgetFilters","HotelCalendar","initialize","isInitialized","currentScroll","scrollY","currentWindowHeight","innerHeight","scrollOffset","savedResData","filterCacheLabel","savedFilterData","calendarOpenUpward","calendarLastScrollRender","calendarLastWindowHeightRender","calendarMonthNodes","calendarOpen","userHasScrolled","scrollTimer","observerTop","observerStickyStuck","hotelPageLinkGroupNodes","hotelRoomNodes","lastRateFetchCheckInDate","lastRateFetchCheckOutDate","filterUpdateTimer","filterUpdateTimeout","selectedFilterTypesFound","initialized","offerCodes","from","hotelRoomNode","__vue__","reservationWidgetPrepareDate","pageLinkGroupNode","querySelectorAll","remove","recalcPageLinks","currentScrollPosition","newScrollPosition","scrollTo","top","setCheckInAndCheckOutDates","code","saveOfferCodeForLater","checkCalendarBounds","saveReservationSelections","pepvalidateInitForm","form","getSavedReservationData","getSavedFilterData","clientHeight","updateObserverOptions","updateHotelRoomNodes","getRoomData","ajaxLinkRegisterCallback","CustomEvent","detail","startQuerystringDate","formatYYYYMMDDToDateObject","getParameterByName","endQuerystringDate","pepConsole","log","checkin","checkout","newCheckInDate","getReservationSelections","cachedFilterData","getCachedData","filterCache","setupUserScrollDetection","setUserHasScrolled","removeEventListener","hotelRoomPageIds","getHotelRoomPageIds","OFFER_CODES","START_DATE","END_DATE","PAGE_IDS","then","sendDSPixel","catch","finally","dataset","newDay","toString","newSuffix","substr","daysShort","monthsShort","dayCheckIn","dayCheckOut","initialCheckIn","initialCheckOut","group","toUpperCase","stopImmediatePropagation","filterSubmitHandlerOfferCode","scrollToRoom","groupEnd","timeout","scrollFromAnywhere","trigger","scrollToRoomPageLinkCallback","visibleHotelRoomNodes","filterWidgetHeight","mobileCta","topOffset","offset","documentElement","behavior","animate","forceClick","sslNotify","showSslNotification","handleOfferBookingLink","linkParameters","getBookingLinkParameters","toLowerCase","companyCode","trim","gaLinker","getGALinkerParam","ga4Linker","getGA4LinkerParam","lmsref","_ga","_gl","confirmDeny","replace","parameters","reservationWidgetShowErrorMsg","msg","sslWarning","dialogNode","dispatchEvent","determineBookingPhoneNumber","Modernizr","touchevents","page","Event","height","buttonNodes","getComputedStyle","visibility","disconnect","updateObserverOptionsIntersectionObserver","updateObserverOptionsRequestAnimationFrame","observe","stickySentinelTop","IntersectionObserver","records","observerRecord","targetInfo","boundingClientRect","rootBoundsInfo","rootBounds","bottom","threshold","observeCallback","fallbackObject","requestID","elementToObserve","lastScrollCheck","cancelAnimationFrame","resizeFunction","watchFunction","IntersectionObserverFallback","observerFallback","boundingRect","getBoundingClientRect","openUpward","filterWidgetToTopOfViewport","calendarWidgetTopOffset","calendarWidgetHeight","stickyFooterHeight","headerHeight","allRoomTypes","acc","carry","cheapestRoomType","getCheapestRoomType","priceSubtotal","ROOM_TOTAL_PRICE","taxAmount","feeAmount","resortFeeAmount","RESORT_FEE_RATE","createDSPixel","check_in_date","check_out_date","stay_length","total_guests","price_base","price_tax_fees","price_total","price_currency","room_type_id","ROOM_CODE_WITH_WING","room_type","ROOM_TITLE","rate_plan_id","rate_plan_name","event_type","roomTypes","carryRoomType","_bparams","extend","pixel_id","account_id","is_landing_page","hotel_id","rooms","host","substring","scriptNode","createElement","async","src","round","s","parentNode","insertBefore","check_in_input","ID","imageStyles","IMG_SRC","roomData","roomSqFt","bedType","bedCount","searchData","isAvailable","averagePricePreferred","averagePriceStandardToDisplay","preferredTooltipCopy","averagePricePreferredToDisplay","showRateDetails","showRateDetailTotals","formatAsDollarAmount","subtotal","averageSubtotal","averageResortFee","totalRoomTax","averageRoomTax","totalResortFee","totalResortFeeTax","averageResortFeeTax","totalTourismSurcharge","averageTourismSurcharge","total","averageTotal","addResortFeeToRoomRate","openRateDialog","minStayDays","roomAdjacentDates","adjacentDate","AHEAD","adjacentDateClickHandler","ADJACENT_DAY_SHIFT","CHECKIN_DATE","getAdjacentDatePrice","BEHIND","innerHTML","bookNowLink","getRatesClickHandler","updateCheckOutDateForMinNights","showLearnMoreButton","URL","preferredLoggedIn","taxRate","tourismSurchargeRate","peppermillPreferred","checkForPeppermillPreferredLoginToken","getPeppermillPreferredLoginData","averagePriceStandardWithResortFee","averagePriceStandard","averagePricePreferredWithResortFee","isPreferredRate","ADA_VARIANTS","DATA_AVAILABLE","ROOM_AVERAGE_PRICE","PREFERRED_AVERAGE_PRICE","totalPriceStandard","totalPricePreferred","PREFERRED_TOTAL_PRICE","preferredOverlayCopy","formatShortDisplayDate","openRateDialogPreferred","openRateDialogStandard","getRateTableHtml","daysToShift","saveCheckOutDate","PREFERRED_LOWEST_PRICE","ROOM_LOWEST_PRICE","amount","truncate","iconsAvailable","anyRoomType","availabilityTooltip","icons","smoking","ada","showAdaVariants","lowInventoryThresholdCount","lowInventoryThresholdPercent","roomTypeData","ROOM_SMOKING","ROOM_ADA","adaVariants","ROOM_ADA_VARIANT","isLowInventory","dialogBody","getAdaVariantListItemHtml","join","isPageRoomTypeAvailable","HotelRoomCallToAction","HotelRoomIcons","IMG_FOCUS_X","IMG_FOCUS_Y","ROOM_TITLE_FIXED","ROOM_SQ_FT","ROOM_BED_TYPE","ROOM_BED_COUNT","ROOM_BATH_COUNT","BOOKING_LINK","isRoomHiddenByFilters","scrolled","getFilterMethodName","isSmoking","isNonSmoking","entries","icon","averageNightlyPrice","bedTypes","isRoomHiddenByAccessibilityFilter","chosenAccessibilityTypes","isRoomHiddenByBedTypeFilter","chosenBedTypes","isRoomHiddenByPriceFilter","chosenPriceRanges","chosenMinMax","sqFt","isRoomHiddenBySmokingFilter","chosenSmokingOptions","isRoomHiddenBySqFtFilter","chosenSqFtSizes","word","charAt","staticStyle","display","roomFloorPlanUrl","rel","colspan","calendarNode","calendar","firstMonthShownNode","rateCalendarNode","rateCalendarIndex","startOnCheckOut","saveResDataTimer","store","resetPageLinks","dateObject","regMatch","YYYYMMDD","matches","setFullYear","setMonth","setDate","startDate","endDate","treatAsUTC","days","result","cacheData","checkIn","checkInSave","checkInString","todayDate","checkOut","console","$widgetEle","overrides","timerDuration","$inputs","find","exp","addMinutes","toJSON","val","tmp","formattedAmount","parseFloat","toFixed","$mount","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","module","__webpack_modules__","m","O","chunkIds","fn","priority","notFulfilled","Infinity","fulfilled","j","every","splice","d","definition","defineProperty","enumerable","get","g","globalThis","obj","prop","prototype","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","id","chunkLoadingGlobal","self","bind","__webpack_exports__"],"sourceRoot":""}