แบนนิสเตอร์ สวีทส์ เฟรแมนเทิ้ล (Quality Suites Fremantle) - รีวิวและเปรียบเทียบราคาโรงแรม Fremantle
โรงแรม 5ดาว ใน Fremantle
โรงแรม 4ดาว ใน Fremantle
โรงแรม 3ดาว ใน Fremantle
โรงแรมใกล้The Artisan Store Fremantle
โรงแรมใกล้The Newport Hotel Bars
โรงแรมใกล้Fremantle Chocolate
ร้านอาหารใกล้ แบนนิสเตอร์ สวีทส์ เฟรแมนเทิ้ล
โรงแรม แบนนิสเตอร์ สวีทส์ เฟรแมนเทิ้ล Fremantle
แบนนิสเตอร์ สวีทส์ เฟรแมนเทิ้ลQuality Suites Fremantle
ที่ 5 จาก 8 ด้านโรงแรม ใน Fremantle
ดูโรงแรมทั้ง 8 แห่งใน Fremantle
อันดับที่ 1 จาก 8 โรงแรม ใน Fremantle
อันดับที่ 3 จาก 8 โรงแรม ใน Fremantle
อันดับที่ 2 จาก 8 โรงแรม ใน Fremantle
อันดับที่ 4 จาก 8 โรงแรม ใน Fremantle
อันดับที่ 7 จาก 8 โรงแรม ใน Fremantle
อันดับที่ 8 จาก 8 โรงแรม ใน Fremantle
อันดับที่ 1 จาก 1 โรงแรม ใน East Fremantle
ข้อเสนอจาก แบนนิสเตอร์ สวีทส์ เฟรแมนเทิ้ล
22 Bannister St, 6160
{"BOOKING_FEATURES": ["IB_STREAMLINED_SELECTED_ROOM","IB_SHOW_EMAIL_FOR_INSECURE_LOGIN","VISA_SPONSORSHIP_WEB","RCMS_INLINE_ROOM_GRID_MAX_OCC","IB_POST_BOOKING_LOGIN","IB_IRG_PERFORMANCE_METRICS","IB_IRG_MATCH_META","CHILDREN_SEARCH","ATTRACTIONS_REMOVE_PAYMENT_ADDRESS_FIELDS","HR_IB_EXCLUDE_TAXES_AND_FEES","IB_DW_CCNAME_WITH_AUTOCOMPLETE","IB_IRG_PERFORMANCE_METRICS_MOBILE","STORED_CARDS","IB_PRICE_WINS_COPY","IB_PRICES_OUTSIDE_ROOM_BUTTON","IB_HIDE_MSNBC_LARGEST_SITE_QUOTE","IB_EXIT_INTERRUPTER","IB_SHOW_AMENITIES_AS_ICONS","META_AIR","IB_INLINE_ROOM_GRID","IB_TIME_OF_STAY_PAYMENT_TYPES_V3","IBEX_HIGH_EQUITY_BRANDING","IB_PRICE_WINS_POST_TX","IB_BOOKING_FORM_FAVICON","IB_URGENCY_BLOCK"] , "IMPRESSION_KEY": "1b8bd9d6480543b5946ee709eb54c85b", "roomSelectionModel": {"partnerInfos":[],"multiplePartners":false,"polling":{"locationId":1474425,"bookingSessionId":null,"detailedAvailabilityKey":null,"commerceContentIds":[79916347],"additionalContentIds":[],"pollCount":0,"checkin":{"day":26,"month":11,"year":2017},"checkout":{"day":27,"month":11,"year":2017},"adults":2,"child_rm_ages":"","rooms":1,"display_rooms":300,"entryPrice":99,"entryCurrency":"USD","complete":false,"formKey":"","showAllRooms":true,"genNewBookingSessionId":false,"winningProviderAtClick":"","selectedRoomKey":"","impressionKey":"1b8bd9d6480543b5946ee709eb54c85b","navArea":null,"referringServlet":"Hotel_Review","highestMetaPrice":116,"lowestMetaPrice":99,"additionalPartner":false,"highestMetaPriceDisplay":116,"roomsToVerify":[],"clazz":null},"summary":null,"unavailable":false,"metaOffers":[],"mismatchCheckModel":null,"totalMediaCount":0,"hotelPhotos":[],"noticeHeaderMessage":null,"moreProviders":null,"lowestPricePartner":null,"showAllRooms":true,"isMetaCheaper":false,"isBookingLessThanOrEqualToMeta":null,"avgHistoricalPrice":0.0,"avgHistoricalDisplayPrice":null,"expressBookState":{"hasFullTravelerInfo":false,"hasReducedBillingInfo":false,"hasFullBillingInfo":false},"highestMetaPrice":116,"lowestMetaPrice":99,"highestMetaPriceDisplay":116,"hotelName":"แบนนิสเตอร์ สวีทส์ เฟรแมนเทิ้ล","hasSpecialTimeOfStayTaxes":false,"trackingTree":null,"trackingTreeId":null,"showPriceHoverTooltip":false,"trackingContext":"eyJzdGF0ZSI6IkhPVEVMX0FVQ1RJT04iLCJwIjoiSFJfTWFpbkNvbW1lcmNlIiwiaWRzIjp7IkJGSyI6IjFiOGJkOWQ2NDgwNTQzYjU5NDZlZTcwOWViNTRjODViIiwiQUlLIjoiM2E2NTdjYWE2NmM0NDgwZjhiOTFhODkxNmIwNjcyZTUifSwiZW50cnlTZXJ2bGV0IjoiSG90ZWxfUmV2aWV3In0=","cheaperPricesExist":false,"enableLPF":false,"priceDropPercent":0,"canExpandRooms":false,"expandRoomsToAllPartners":false,"roomSelectionKey":null,"useSupplierDirectTreatment":false,"isSupplierDirect":false,"showProviderSeparator":false,"clazz":null,"isPriceDrawerEnabled":false,"seeMoreMessage":null,"seeMoreIFrameMessage":null,"isPricelineCom":false,"isMetaMarketingLandOnBookingFormEnabled":false}, "ibAvailability": true, "metaAvailability": true, "topOfferIsIB": false, "numHacTries": -1, "checkIn": "26/11/2017", "checkOut": "27/11/2017", "lowestPrice": "US$99", "hasDates": true, "hacComplete": false, "contentIdMappings": {"32462879":"BookingCom","33300845":"Expedia","101630234":"PricelineIB","53956979":"TravelocityEWS","78939265":"OrbitzEWS","76493865":"Hotwire","79916347":"AgodaIB","109285756":"HotelsCom2IB"}, "pollingEnabled": false, "preventScroll": false, "offerClickToken": null, "conditionalUpdate": false, "mightGetRooms": true, "divClasses": "ppr_rup ppr_priv_hr_inline_room_grid_hsx", "singlePartnerRoomGridWidget": {"containerClass":null,"containerAttributes":null,"widget":{"name":"ibex_room_grid_hsx","moduleList":["handlers","tracking"],"template":"ibex_room_grid_hsx__widget","divClasses":"prw_rup prw_ibex_room_grid_hsx","js":{"handlers":"(ta.prwidgets.getjs(this,'handlers'))","tracking":"(ta.prwidgets.getjs(this,'tracking'))"},"dust":{"sub_header":"ibex_room_grid_hsx__sub_header"}},"scriptFlags":null}, "multiPartnerRoomGridWidget": null, "mismatchMessage": {"containerClass":null,"containerAttributes":null,"widget":{"name":"ibex_mismatch_message","moduleList":["handler"],"template":"ibex_mismatch_message__widget","divClasses":"prw_rup prw_ibex_mismatch_message","js":{"handler":"(ta.prwidgets.getjs(this,'handler'))"},"dust":{}},"scriptFlags":null}, "maxRoomsToShow": 300, "isTablet": false, "roomGridRowWidget": {"containerClass":null,"containerAttributes":null,"widget":{"name":"ibex_room_grid_row_hsx","moduleList":[],"template":"ibex_room_grid_row_hsx__widget","divClasses":"prw_rup prw_ibex_room_grid_row_hsx","js":{},"dust":{"amenities":"ibex_room_grid_row_hsx__amenities","condition_col":"ibex_room_grid_row_hsx__condition_col","price_text":"ibex_room_grid_row_hsx__price_text","reservation_col":"ibex_room_grid_row_hsx__reservation_col"}},"scriptFlags":null}, "mismatchMessageLightbox": null, "deviceInfo": "OtherOS OtherBrowser", "bookOnTripAdvisor": "จองบน <img class=\"ibHeaderImg\" alt=\"TripAdvisor\" src=\"https:\/\/static.tacdn.com\/img2\/branding\/rebrand\/TA_logo_primary.png\"\/>"}
มีรีวิวที่ใหม่กว่าสำหรับ แบนนิสเตอร์ สวีทส์ เฟรแมนเทิ้ล
พนักงานช่วยเหลือดี ถนนที่มีเสียงดัง
คำตอบจาก O9963ZMmarco, General Manager ของ แบนนิสเตอร์ สวีทส์ เฟรแมนเทิ้ลตอบกลับเมื่อ 18 พฤษภาคม 2017
ที่พักคุณภาพห้องพักที่มีคุณภาพ
คำตอบจาก O9963ZMmarco, General Manager ของ แบนนิสเตอร์ สวีทส์ เฟรแมนเทิ้ลตอบกลับเมื่อ 28 เมษายน 2017
หนึ่งสัปดาห์ในฟรีโอ
คำตอบจาก O9963ZMmarco, General Manager ของ แบนนิสเตอร์ สวีทส์ เฟรแมนเทิ้ลตอบกลับเมื่อ 22 มีนาคม 2017
TripAdvisor ภูมิใจที่ได้ร่วมเป็นพันธมิตรกับ Agoda, Priceline, Expedia, Hotels.com, Booking.com, Hotwire, Travelocity, Cancelon, Orbitz, TripOnline SA, Evoline ltd และ Cheap Tickets คุณจึงสามารถจองห้องพักที่ แบนนิสเตอร์ สวีทส์ เฟรแมนเทิ้ล ได้อย่างมั่นใจ ในแต่ละเดือน เราช่วยให้นักท่องเที่ยวนับล้านค้นหาโรงแรมที่เหมาะสำหรับทริปวันหยุดพักผ่อนหรือทริปการติดต่อธุรกิจด้วยส่วนลดและข้อเสนอสุดพิเศษที่ดีที่สุดเสมอ
โรงแรมใกล้เคียงดูโรงแรมทั้ง 8 แห่งใน Fremantle
รับคำตอบอย่างรวดเร็วจากพนักงานของ แบนนิสเตอร์ สวีทส์ เฟรแมนเทิ้ล และแขกที่เคยเข้าพัก
'); } calendarDiv = document.createElement('div'); calendarDiv.id = 'CALENDAR'; calendarDiv.style.display = 'none'; calendarDiv.innerHTML = htmlBuf.join(''); $('PAGE').appendChild(calendarDiv); ta.m.toggleLightBox($('MAIN'), ta.m.oldlocalize(headerKey), "overlayCalendar", 'CALENDAR', undefined, false); ta.m.hideCalendar(); if (currentMonth > showMonth) { showMonth += 12; } if (selectBox) { selectBox.selectedIndex = showMonth - currentMonth; } desiredDateDiv.setAttribute('value', desiredDate); desiredMonthDiv.setAttribute('value', desiredMonth); ta.m.pageFormActive(false); if (ifdefNN(ta.m.lightbox)) { ta.m.lightbox.setLightboxOnClose(function () { ta.m.pageFormActive(true); }); } } , getVRCalendarClasses: function (firstOfCurrentMonth, now, showYear, showMonth, showDay) { var tdClass = "" , d = new Date(showYear, showMonth, showDay) , bookedRanges , theDayBefore , isTheDayBeforeBooked ; if (!ta.VRShared) { return ""; } bookedRanges = ta.VRShared.VRInquiryDataSingleton.get(); if (!bookedRanges) { return ""; } theDayBefore = new Date(d); theDayBefore.setDate(theDayBefore.getDate() - 1); isTheDayBeforeBooked = bookedRanges.isDateBooked(theDayBefore); if (bookedRanges.isDateBooked(d)) { if (!isTheDayBeforeBooked) { tdClass += " arrival"; } else { tdClass += " booked"; } } else if (isTheDayBeforeBooked) { tdClass += " departure"; } return tdClass; } , hideCalendar: function () { var calendar = $('CALENDAR'); if (calendar && calendar.parentNode) { calendar.parentNode.removeChild(calendar); } } , preventDefault: function (event) { if (event && event.preventDefault) { event.preventDefault(); } else if (window.event) { window.event.returnValue = false; } } , stopPropagation: function (event) { if (event.stopPropagation) { event.stopPropagation(); } else if (window.event) { window.event.cancelBubble = true; } } , nextElemNode: function ( el) { var node; if (!ifdefNN(el)) { return null; } node = el.nextSibling; if ((!ifdefNN(node)) || node.nodeType === 1) { return node; } return ta.m.nextElemNode(node); } , getDaysInMonth: function (year, month) { return 32 - new Date(year, month, 32).getDate(); } , crChanged: false , onCrSubmit: function (crChangedPid, crNotChangedPid) { var pidField = $('CR_SUBMIT_PID'); if (!ifdefNN(pidField)) { return true; } if (ta.m.crChanged) { pidField.value = crChangedPid; } else { pidField.value = crNotChangedPid; } return true; } , setDate: function (prefix, year, month, day) { var display = $(prefix + 'Select') , yearDiv = $(prefix + 'Year') , monthDiv = $(prefix + 'Month') , dayDiv = $(prefix + 'Day') ; if (display && year && month && day) { display.children[0].innerHTML = ta.m.oldlocalize('date.MM_DD_YYYY_fffff619', [month + 1, day, year]); } else if (display) { display.children[0].innerHTML = ta.m.oldlocalize('dateFormatStringShort_91d'); } yearDiv.value = year; monthDiv.value = month; dayDiv.value = day; } , setDeparture: function (year, month, day) { ta.m.setDepartureDate(year, month, day); ta.m.closeLightBox(); ta.m.hideCalendar(); } , setDepartureDate: function (year, month, day) { var inRoot = 'in' , outRoot = 'out' , outYear = $(outRoot + 'Year') , outMonth = $(outRoot + 'Month') , outDay = $(outRoot + 'Day') , outSelect = $(outRoot + 'Select') , showPricesButton = $('showPricesSubmit') , inYear = $(inRoot + 'Year') , inMonth = $(inRoot + 'Month') , inDay = $(inRoot + 'Day') , outDate = new Date(year, month, day) , inDate = new Date(inYear.value, inMonth.value, inDay.value) , arrivalDate ; ta.m.crChanged = true; if (outSelect) { outSelect.children[0].innerHTML = ta.m.oldlocalize('date.MM_DD_YYYY_fffff619', [month + 1, day, year]); outSelect.children[0].removeClass('disabled'); } if (showPricesButton) { showPricesButton.parentNode.removeClass('disabled'); } outYear.setAttribute('value', "" + year); outYear.value = year; outMonth.setAttribute('value', "" + month); outMonth.value = month; outDay.setAttribute('value', "" + day); outDay.value = day; if (inDate >= outDate || !inYear.value || parseInt(inYear.value, ta.m.RADIX_DECIMAL) === -1 || !inMonth.value || parseInt(inMonth.value, ta.m.RADIX_DECIMAL) === -1 || !inDay.value || parseInt(inDay.value, ta.m.RADIX_DECIMAL) === -1) { arrivalDate = new Date(year, month, day - 1); ta.m.setArrivalDate(arrivalDate.getFullYear(), arrivalDate.getMonth(), arrivalDate.getDate()); } } , setArrival: function (year, month, day) { ta.m.setArrivalDate(year, month, day); ta.m.closeLightBox(); ta.m.hideCalendar(); } , setArrivalDate: function (year, month, day) { var inRoot = 'in' , outRoot = 'out' , inYear = $(inRoot + 'Year') , inMonth = $(inRoot + 'Month') , inDay = $(inRoot + 'Day') , inSelect = $(inRoot + 'Select') , showPricesButton = $('showPricesSubmit') , outYear = $(outRoot + 'Year') , outMonth = $(outRoot + 'Month') , outDay = $(outRoot + 'Day') , outDate = new Date(outYear.value, outMonth.value, outDay.value) , inDate = new Date(year, month, day) , departureDate ; ta.m.crChanged = true; if (inSelect) { inSelect.children[0].innerHTML = ta.m.oldlocalize('date.MM_DD_YYYY_fffff619', [month + 1, day, year]); inSelect.children[0].removeClass('disabled'); } if (showPricesButton) { showPricesButton.parentNode.removeClass('disabled'); } if (inDate >= outDate) { departureDate = new Date(year, month, day + 1); ta.m.setDepartureDate(departureDate.getFullYear(), departureDate.getMonth(), departureDate.getDate()); } inYear.setAttribute('value', "" + year); inYear.value = year; inMonth.setAttribute('value', "" + month); inMonth.value = month; inDay.setAttribute('value', "" + day); inDay.value = day; } , numAdultsChanged: function () { ta.m.crChanged = true; } , getIndexWithValue: function ( dropdown, value) { var children , i ; if (!(ifdefNN(dropdown) && ifdefNN(dropdown.children) && ifdefNN(value))) { throw "getIndexWithVaue called with null parameter"; } children = dropdown.children; for (i = 0; i < children.length; ++i) { if (children[i].value === value) { return i; } } return -1; } , RADIX_DECIMAL: 10 , MAX_ROOMS: 8 , MAX_ADULTS_PER_ROOM: 4 , MAX_CHILDREN_PER_ROOM: 10 , MAX_CHILDREN: 20 , updateSelectOptionsToRange: function ( dropdown, lower, upper) { var selected , i , newOption , bottom , killMe ; if (!(ifdefNN(dropdown) && ifdefNN(dropdown.children) && ifdefNN(lower) && ifdefNN(upper))) { throw "updateSelectOptionsToRange called with null parameters"; } selected = parseInt(dropdown.value, 10); if (isNaN(selected)) { throw "updateSelectOptionsToRange selected value not an integer"; } selected = Math.max(lower, Math.min(selected, upper)); for (i = 0; i < dropdown.children.length; ++i) { if (parseInt(dropdown.children[i].value, ta.m.RADIX_DECIMAL) < lower || parseInt(dropdown.children[i].value, ta.m.RADIX_DECIMAL) > upper) { killMe = dropdown.children[i]; dropdown.removeChild(killMe); --i; } } bottom = dropdown.children.length > 0 ? parseInt(dropdown.children[0].value, ta.m.RADIX_DECIMAL) - 1 : upper; for (i = bottom; i >= lower; --i) { newOption = document.createElement("option"); newOption.value = i.toString(); newOption.text = i.toString(); dropdown.insertBefore(newOption, dropdown.children[0]); } for (i = parseInt(dropdown.children[dropdown.children.length - 1].value, ta.m.RADIX_DECIMAL) + 1; i <= upper; ++i) { newOption = document.createElement("option"); newOption.value = i.toString(); newOption.text = i.toString(); dropdown.add(newOption); } dropdown.selectedIndex = ta.m.getIndexWithValue(dropdown, selected.toString()); } , boundsCheckAdultsAndRooms: function ( updatedRooms) { var adultsSelect = $("adultsSelect") , roomsSelect = $("roomsSelect") , adults , rooms ; if (!(ifdefNN(adultsSelect) && ifdefNN(roomsSelect))) { throw "boundsCheckAdultsAndRooms() unable to find select widget"; } adults = parseInt(adultsSelect.value, 10); rooms = parseInt(roomsSelect.value, 10); if (isNaN(adults) || isNaN(rooms)) { throw "boundsCheckAdultsAndRooms() adult or room quantity is NaN adults:" + adultsSelect.value + " rooms:" + roomsSelect.value; } ta.m.updateSelectOptionsToRange(adultsSelect, rooms, ta.m.MAX_ADULTS_PER_ROOM * rooms); } , validateAdultsUpdate: function ( updatedRoomsAndAdults) { var adults , rooms , children ; adults = Math.max(1, Math.min(updatedRoomsAndAdults.adults, ta.m.MAX_ROOMS * ta.m.MAX_ADULTS_PER_ROOM)); rooms = updatedRoomsAndAdults.rooms; if (adults > rooms * ta.m.MAX_ADULTS_PER_ROOM) { rooms++; } else if (adults < rooms) { rooms--; } children = Math.max(0, Math.min(updatedRoomsAndAdults.children, rooms * ta.m.MAX_CHILDREN_PER_ROOM)); return { adults: adults, rooms: rooms, children: children }; } , validateRoomsUpdate: function ( updatedRoomsAndAdults) { var rooms , adults , children ; rooms = Math.max(1, Math.min(updatedRoomsAndAdults.rooms, ta.m.MAX_ROOMS)); adults = Math.max(rooms, Math.min(updatedRoomsAndAdults.adults, rooms * ta.m.MAX_ADULTS_PER_ROOM)); children = Math.max(0, Math.min(updatedRoomsAndAdults.children, rooms * ta.m.MAX_CHILDREN_PER_ROOM)); return { adults: adults, rooms: rooms, children: children }; } , validateChildrenUpdate: function ( updatedRoomsAndAdults) { var rooms , adults , children ; rooms = updatedRoomsAndAdults.rooms; adults = updatedRoomsAndAdults.adults; children = Math.max(0, Math.min(updatedRoomsAndAdults.children, Math.min(rooms * ta.m.MAX_CHILDREN_PER_ROOM, ta.m.MAX_CHILDREN))); return { adults: adults, rooms: rooms, children: children }; } , incrementAdultsLabel: function ( adultsIncrement) { var validateFunc; if (ifdefNN(ta.m.vr)) { validateFunc = ta.m.vr.validateAdultsUpdate; } else { validateFunc = ta.m.validateAdultsUpdate; } return ta.m.incrementRoomsAndGuestsLabels(adultsIncrement, 0, 0, validateFunc); } , incrementAdultsLabelMax: function ( adultsIncrement, max) { var adultsVal = parseInt($("adultsInput").value, ta.m.RADIX_DECIMAL); if(!ifdefNN(adultsVal)){ adultsVal = 0; } if ((adultsVal + adultsIncrement) > max){ adultsIncrement = max - adultsVal; } if(adultsIncrement > 0) { ta.m.incrementAdultsLabel(adultsIncrement); } } , incrementRoomsLabel: function ( roomsIncrement) { var validateFunc; if (ifdefNN(ta.m.vr)) { validateFunc = ta.m.vr.validateRoomsUpdate; } else { validateFunc = ta.m.validateRoomsUpdate; } return ta.m.incrementRoomsAndGuestsLabels(0, roomsIncrement, 0, validateFunc); } , incrementChildrenLabel: function ( childrenIncrement) { var validateFunc = ta.m.validateChildrenUpdate; return ta.m.incrementRoomsAndGuestsLabels(0, 0, childrenIncrement, validateFunc); } , incrementRoomsAndGuestsLabels: function ( adultsIncrement, roomsIncrement, childrenIncrement, validateFunc) { var adultsInput , roomsInput , childrenInput , roomsAndGuests , adultsUI , roomsUI , childrenUI , childrenInputValue ; adultsInput = $("adultsInput"); roomsInput = $("roomsInput"); childrenInput = $("childrenInput"); adultsUI = z('.adultsInputForm'); roomsUI = z('.roomsInputForm'); childrenUI = z('.childrenInputForm'); if (!ifdefNN(adultsInput) || !ifdefNN(roomsInput)) { throw "incrementRoomsAndGuestsLabels() unable to find rooms or guests input field"; } childrenInputValue = ifdefNN(childrenInput) ? parseInt(childrenInput.value, ta.m.RADIX_DECIMAL) : 0; roomsAndGuests = { adults: parseInt(adultsInput.value, ta.m.RADIX_DECIMAL), rooms: parseInt(roomsInput.value, ta.m.RADIX_DECIMAL), children: childrenInputValue }; if (isNaN(roomsAndGuests.adults) || isNaN(roomsAndGuests.rooms) || isNaN(roomsAndGuests.children)) { throw "incrementRoomsAndGuestsLabels() guests or room quantity is NaN adults:" + adultsInput.value + " children:" + roomsInput.children + " rooms:" + roomsInput.value; } roomsAndGuests.adults += adultsIncrement; roomsAndGuests.rooms += roomsIncrement; roomsAndGuests.children += childrenIncrement; roomsAndGuests = validateFunc(roomsAndGuests); if (!ifdefNN(roomsAndGuests)) { throw "incrementRoomsAndGuestsLabels() unable to update rooms or guests quantity"; } if (isNaN(roomsAndGuests.adults) || isNaN(roomsAndGuests.rooms) || isNaN(roomsAndGuests.children)) { throw "incrementRoomsAndGuestsLabels() guests or room quantity is NaN adults:" + roomsAndGuests.adults + " children:" + roomsInput.children + " rooms:" + roomsAndGuests.rooms; } adultsInput.value = roomsAndGuests.adults; roomsInput.value = roomsAndGuests.rooms; if(ifdefNN(childrenInput)) { childrenInput.value = roomsAndGuests.children; } if (!ifdefNN(adultsUI) || !ifdefNN(roomsUI)) { throw "incrementRoomsAndGuestsLabels() unable to find rooms or guests widget"; } if (ifdefNN(ta.m.vr)) { adultsUI.text(roomsAndGuests.adults + "+"); roomsUI.text(roomsAndGuests.rooms + "+"); } else { adultsUI.text(roomsAndGuests.adults); roomsUI.text(roomsAndGuests.rooms); if (ifdefNN(childrenUI)) { childrenUI.text(roomsAndGuests.children); } } if(adultsIncrement === 0 && roomsIncrement === 0 && childrenIncrement !== 0) { z(document.body).trigger('childrenChanged', roomsAndGuests); } else { z(document.body).trigger('guestsChanged', roomsAndGuests); } } , screenName: { delay: 200, timeout: undefined, cache: {}, lastNameValue: undefined, lastMsgIndex: 0, msgs: ['sn_status_checking', 'sn_status_avail', 'sn_status_unavail'], lastForm: undefined, lastError: undefined, button: undefined, activeClass: 'green', inactiveClass: 'pGreen' } , _screenNameShowMsg: function (indexOn, inLightbox) { var sn = ta.m.screenName , lastMsg , curMsg , parent = document ; if (inLightbox) { parent = $("overlay"); } if (sn.lastMsgIndex !== indexOn) { lastMsg = parent.getElementsByClassName(sn.msgs[sn.lastMsgIndex])[0]; curMsg = parent.getElementsByClassName(sn.msgs[indexOn])[0]; lastMsg.removeClass('visible'); curMsg.addClass('visible'); sn.lastMsgIndex = indexOn; } } , _screenNameHideAllMessages: function (inLightbox) { var sn = ta.m.screenName , parent = document , lastMsg ; if (inLightbox) { parent = $("overlay"); } lastMsg = parent.getElementsByClassName(sn.msgs[sn.lastMsgIndex])[0]; lastMsg.removeClass('visible'); sn.lastMsgIndex = 0; } , _screenNameShowAvailable: function (available, inLightbox) { if (available) { ta.m._screenNameShowMsg(1, inLightbox); ta.m._screenNameButtonActive(true); } else { ta.m._screenNameShowMsg(2, inLightbox); ta.m._screenNameButtonActive(false); } } , _screenNameButtonActive: function (makeActive) { var sn = ta.m.screenName , activeClass = sn.activeClass , inactiveClass = sn.inactiveClass , button = sn.button ; if (!button || (makeActive && button.hasClass(activeClass)) || (!makeActive && button.hasClass(inactiveClass))) { return; } if (makeActive) { button.removeClass(inactiveClass); button.addClass(activeClass); } else { button.removeClass(activeClass); button.addClass(inactiveClass); } } , onScreenNameKeyUp: function (elt, buttonId, inLightbox, divId) { var name = elt.value.trim() , sn = ta.m.screenName , valFromCache ; if (name === sn.lastNameValue) { return; } sn.lastNameValue = name; clearTimeout(sn.timeout); if (sn.lastError) { sn.lastError.addClass('hidden'); } if (!sn.button) { if (inLightbox) { divId = 'overlay'; sn.button = $(divId).getElementsByClassName(buttonId)[0]; } else { sn.button = $(buttonId); } if (!sn.button && divId) { sn.button = $(divId).getElementsByClassName(buttonId)[0]; } } if (name.length == 0) { ta.m._screenNameHideAllMessages(inLightbox); } else if (name.length < 3 || name.length > 20) { ta.m._screenNameShowAvailable(false, inLightbox); } else { valFromCache = sn.cache[name]; if (valFromCache) { ta.m._screenNameShowAvailable(valFromCache === 'true', inLightbox); return; } sn.timeout = setTimeout(function () { ta.m._screenNameAjaxCall(name, inLightbox); }, sn.delay); } } , _screenNameAjaxCall: function (name, inLightbox) { ta.m._screenNameShowMsg(0, inLightbox); ta.m._screenNameButtonActive(false); ta.m.makeXHRGetResponse('/ScreenNameAjax?n=' + encodeURIComponent(name), 'get', ta.m._screenNameCallback, [name, inLightbox]); } , _screenNameCallback: function (available, args) { var sn = ta.m.screenName , name = args[0] , inLightbox = args[1] ; sn.cache[name] = available; ta.m._screenNameShowAvailable(available === 'true', inLightbox); } , showScreenNameLightbox: function (elt, title) { ta.m.toggleLightBox(elt, title, "", "CREATE_NAME"); ta.m.screenName.lastForm = elt.form; return false; } , inactiveButtonCheck: function (elt) { var button = $(elt).parentNode; return button.hasClass(ta.m.screenName.activeClass); } , onScreenNameSubmit: function (elt, name, errorDiv, formToSubmit) { var sn = ta.m.screenName; sn.button = $(elt).parentNode; if (sn.button.hasClass(sn.inactiveClass)) { return false; } if (!sn.lastForm) { sn.lastForm = formToSubmit; } ta.m._screenNameButtonActive(false); if (errorDiv) { sn.lastError = $('overlay').getElementsByClassName(errorDiv)[0]; } ta.m.makeXHRGetResponse('/MobileRegistration?mreg_action=3&mreg_screenname=' + escape(name) + '&mreg_secToken=' + escape(ta.m.secureToken), 'post', ta.m._screenNameSubmitCallback, [formToSubmit]); return false; } , _screenNameSubmitCallback: function (response, args) { var sn = ta.m.screenName; if (response.indexOf('okay') >= 0 && response.length <= 10) { ta.m.closeLightBox(); if (sn.lastForm) { sn.lastForm.submit(); sn.lastForm = undefined; } } else { if (sn.lastError) { sn.lastError.innerHTML = response; sn.lastError.removeClass('hidden'); } } } , freshVSCookieCheck: function () { var freshVSTrackingCookie = ta.m.freshVSTrackingCookie , hasVSCookie , uniqueID , url ; if (ifdefNN(freshVSTrackingCookie) && freshVSTrackingCookie) { hasVSCookie = document.getCookie('v1st'); if (hasVSCookie) { uniqueID = (new Date()).getTime(); url = '/VSCookieRequest?uniqueID=' + uniqueID; ta.m.makeXHR(url, "POST", null); } } } , abbreviateString: function (str, length) { var s = str.substring(0, length); return (s == str) ? s : s + "…"; } , addCookieCheckToForm: function (elm) { var input = document.createElement('input') ; input.type = "hidden"; input.name = "mreg_hasCookies"; input.value = navigator.cookieEnabled; elm.form.appendChild(input); } , saveDeviceToken: function (token) { if (ifdefNN(token) && hasLocalStore()) { try { localStorage.removeItem('pushToken'); localStorage.setItem('pushToken', token); ta.m.injectDeviceToken(); return true; } catch (e) { ta.m.handleLocalStorageError(e); } } return false; } , injectDeviceToken: function () { var bIsMobileIPhoneAndroid = ifdefNN(ta.m.iphone) || ifdefNN(ta.m.android) , bIsTabletOnMobile = (typeof(isTATabletApp) != 'undefined' && isTATabletApp) , tokenInput , token ; if (!bIsTabletOnMobile && (!bIsMobileIPhoneAndroid || !IS_APP)) { return; } if (hasLocalStore()) { try { tokenInput = $('DEVICE_TOKEN'); if (ifdefNN(tokenInput)) { token = localStorage.getItem('pushToken'); tokenInput.value = token; if (ifdefNN(token) && token !== '') { ta.pushSent(); } } else { if (ifdefNN(ta.m.isUserLoggedIn) && ta.m.isUserLoggedIn) { ta.trySyncToken(ta.m.isUserLoggedIn, ta.m.makeXHRGetResponse, ta.m.parseJSON); } } } catch (e) { ta.m.handleLocalStorageError(e); } } } , addPidToUrl: function (url, pid) { var list; if (url != null) { list = url.split('-'); list.splice(1, 0, 'p' + pid); return list.join('-'); } } , addPidToCookie: function (pid) { if (ifdefNN(pid) && 0 !== pid.length) { document.setCookieInSeconds('NPID', pid, { path: '/', duration: (5), ignoreVersion: true }); } } , recordHelpfulVote: function (elt, url2) { var url = asdf(url2) , button ; if (ifdefNN(elt)) { elt.className = "button helpful gray"; elt.onclick = null; button = elt.getElementsByClassName("buttontext")[0]; if (ifdefNN(button)) { button.innerHTML = ta.m.oldlocalize('reviewSliderHelpful'); } } ta.m.makeXHR(url, "post", null); } , recordHelpfulVoteBauhaus: function (elt, url2) { var url = asdf(url2) , thumbIcon ; if (ifdefNN(elt)) { elt.onclick = null; thumbIcon = elt.getElementsByClassName("bauhaus"); if (ifdefNN(thumbIcon) && ifdefNN(thumbIcon[0])) { thumbIcon[0].className = "svgico bauhaus thumbs_up green"; } } ta.m.makeXHR(url, "post", null); } , turnReportGray: function ( id) { var elt = $('report_' + id) , button ; ta.m.eventRecordPid("34304"); if (ifdefNN(elt)) { elt.className = "button report gray"; elt.onclick = null; button = elt.getElementsByClassName("buttontext")[0]; if (ifdefNN(button)) { button.innerHTML = ta.m.oldlocalize('SO_recat_thankYou_e1f'); } } } , clearFormLatLng: function () { var f = document.forms['locationForm'] , submitBtn = document.getElementsByName("locationSubmit")[0] , el ; if (ifdefNN(f)) { el = f.elements['latitude']; if (ifdefNN(el)) { el.value = ""; } el = f.elements['longitude']; if (ifdefNN(el)) { el.value = ""; } } if (submitBtn) { $(submitBtn.parentNode).removeClass('gray'); } } , updateSortValue: function (newValue) { var sortOrder = $('SORT_INPUT') , unavailInput = $('UNAVAIL_INPUT') ; if (!ifdefNN(newValue) || !ifdefNN(sortOrder)) { return; } sortOrder.value = newValue; ta.m.updateSortButtons(newValue); } , handleFriendsFirstSortCheckBox: function () { var sortOrder = $('SORT_INPUT') , firstButton = $('segCtrl1') ; if (!ifdefNN(sortOrder) || !ifdefNN(firstButton)) { return; } if (sortOrder.value === 'friends' || sortOrder.value === '') { ta.m.updateSortValue(ifdefNN(ta.savedNonFriendSort) ? ta.savedNonFriendSort : firstButton.getAttribute('data-sort-val')); } else { ta.savedNonFriendSort = sortOrder.value; ta.m.updateSortValue('friends'); } } , updateSortButtons: function (newValue) { var group = $('sortCtrlOptions') , buttons , button , check , locationForm = $('locationForm') , fbSortButtons , fbSortButton , i ; if (!ifdefNN(group)) { return; } buttons = group.getElementsByClassName('button'); for (i = 0; i < buttons.length; i++) { button = buttons[i]; check = button.getElementsByClassName('checkMark')[0]; if (button.getAttribute('data-sort-val') === newValue) { button.removeClass('faded'); if (ifdefNN(check)) { check.removeClass('hidden'); } } else { button.addClass('faded'); if (ifdefNN(check)) { check.addClass('hidden'); } } } if (locationForm) { fbSortButtons = locationForm.getElementsByClassName('fbButton'); if (fbSortButtons && fbSortButtons.length > 0) { fbSortButton = fbSortButtons[0]; if (fbSortButton) { if (newValue === 'friends') { fbSortButton.removeClass('faded'); } else { fbSortButton.addClass('faded'); } } } } } , toggleShowUnavailable: function () { var unavailInput = $('UNAVAIL_INPUT') , unavailButton = $('unavailCtrl') , group = $('sortCtrlOptions') , check ; if (!ifdefNN(unavailInput) || !ifdefNN(unavailButton) || !ifdefNN(group)) { return; } check = unavailButton.getElementsByClassName('checkMark')[0]; if (unavailInput.value === 'true') { unavailInput.value = 'false'; unavailButton.removeClass('faded'); ta.m.eventRecordPid('36680'); if (ifdefNN(check)) { check.removeClass('hidden'); } } else { ta.m.eventRecordPid('36681'); unavailInput.value = 'true'; unavailButton.addClass('faded'); if (ifdefNN(check)) { check.addClass('hidden'); } } } , colorButtons: function (elmt) { var hasChange = false , buttons = elmt.parentNode.getElementsByClassName('button') , button , checkImgs , checkImg , isSet , radios , className ; for (var i = buttons.length; --i >= 0;) { button = buttons[i]; checkImgs = button.getElementsByClassName('svgico'); checkImg; if (checkImgs) { checkImg = checkImgs[0]; } isSet = false; radios = button.getElementsByTagName('input'); if (ifdefNN(radios) && radios.length) { isSet = radios[0].checked; } if (isSet && button.hasClass('faded')) { className = button.className; button.className = className.replace('faded', 'checkContainer'); if (checkImg) { className = checkImg.className; checkImg.className = className.replace('hidden', 'checkMark'); } hasChange = true; } else if (!isSet && !button.hasClass('faded')) { className = button.className; button.className = className.replace('checkContainer', 'faded'); if (checkImg) { className = checkImg.className; checkImg.className = className.replace('checkMark', 'hidden'); } hasChange = true; } } return hasChange; } , scrollTo: function (element) { if (!(ifdefNN(ta.m.iphone) && ta.m.iphone.noScroll())) { setTimeout(window.scrollTo, 50, 0, element.offsetTop); } } , showMapDisclaimer: function (locationName, encodedLocation, destLatLong) { var mapLink , mapBody , mapBase , address = $('ADDRESS'); $('MAPS_DSC').block(); mapBody = $('MAP_BODY'); if (mapBody) { mapBody.hide(); } if (locationName) { address.innerHTML = locationName; } else { address.innerHTML = destLatLong; } if (ifdefNN(ta.m.iphone) && ta.m.iphone.iOSVersion() >= 6) { mapBase = 'http://maps.apple.com'; } else { mapBase = ta.m.isDaoDao ? 'https://ditu.google.cn' : 'https://maps.google.com'; } mapLink = mapBase + '/maps?saddr=&daddr='; if (encodedLocation) { mapLink += encodedLocation; if (destLatLong) { mapLink += '@' + destLatLong; } } else { mapLink += destLatLong; } $('CONFIRM').onclick = function () { ta.m.eventRecord(null, null, 25166, function () { window.location = mapLink; }); return false; }; } , saveCurrency: function ( elem, pid) { if (ifdefNN(elem)) { ta.m.addPidToCookie(pid); window.location.replace("/MobileNativeSettings?currency=" + elem.value); } } , initAutosave: function (pagetype) { ta.m.autosave.init(pagetype); } , toggleSave: function (isSaved, id, geoId, pid) { return ta.m.oldsaves.toggleSave(isSaved, id, geoId, pid); } , checkMySaves: function () { return ta.m.oldsaves.checkMySaves(); } , clearAutosave: function (pagetype) { ta.m.autosave.clearAutosave(pagetype); } , forumDetectClear: function (pagetype) { return ta.m.autosave.forumDetectClear(pagetype); } , toggleRefresh: function () { var newUrl , unavailableInputDiv = $('UNAVAIL_INPUT') , unavailableInputValue = false ; if (unavailableInputDiv) { unavailableInputValue = unavailableInputDiv.value; } newUrl = ta.m.updateUrl(location.href, 'a_showUnavail.', unavailableInputValue); newUrl = ta.m.updateUrl(newUrl, 'zfp', 'zfp'); newUrl = ta.m.updateUrl(newUrl, 'zfn', 'zfn'); newUrl = ta.m.updateUrl(newUrl, 'a_distance.', 'distance'); newUrl = ta.m.updateUrl(newUrl, 'zfc', 'zfc'); newUrl = ta.m.updateUrl(newUrl, 'zfa', 'zfa'); newUrl = ta.m.updateUrl(newUrl, 'a_prng.', 'prng'); ta.m.makeXHRGetResponse(newUrl, 'GET', ta.m.populate); } , updateUrl: function (oldUrl, filter, filterVal) { var filterValStr , filterValStored , selected ; if (filter === 'a_showUnavail.') { filterValStored = filterVal; } else { filterValStored = window[filterVal + 'Selected']; } if (filterValStored || filterValStored === 0) { if (filter !== 'a_showUnavail.') { selected = document.getElementsByName(filterVal)[0].value; if (selected.length > 0) { filterValStored = selected; window[filterVal + 'Selected'] = selected; } } filterValStr = filter + filterValStored; oldUrl = oldUrl.replace(new RegExp(filter + '[^-]+', 'g'), filterValStr); if (!oldUrl.contains(filterValStr)) { oldUrl = oldUrl.replace('MobileFilters', 'MobileFilters-' + filterValStr); } } return oldUrl; } , populate: function (responseText) { var jsonResponse , jsonCounts , jsonLabels , jsonSelected , jsonFilterHeader , jsonFilteredCount , jsonTotalCount , selects = document.getElementsByTagName('select') , filterHeader = $('filterHeader') , filteredCount = $('filteredCount') , totalCount = $('totalCount') , i , options , optionValues , j , optionValue , optionText , newCount , optionDisabled , optionSelected , selectedOption , newOption , maximumFilters ; jsonResponse = JSON.parse(responseText); jsonCounts = jsonResponse['count']; jsonLabels = jsonResponse['labels']; jsonSelected = jsonResponse['selected']; jsonFilterHeader = jsonResponse['filterHeader']; jsonFilteredCount = jsonResponse['filteredCount']; jsonTotalCount = jsonResponse['totalCount']; if (ifdefNN(filterHeader)) { filterHeader.innerHTML = jsonFilterHeader; } if (ifdefNN(filteredCount)) { filteredCount.value = jsonFilteredCount; } if (ifdefNN(totalCount)) { totalCount.value = jsonTotalCount; } if (!jsonLabels || !jsonSelected || !jsonCounts) { return; } maximumFilters = Math.max(jsonLabels.length, jsonSelected.length, jsonCounts.length); for (i = 0; i < selects.length; i++) { if (i >= maximumFilters) { break; } options = selects[i].options; while (ifdefNN(options) && options.length > 0) { selects[i].removeChild(options[0]); } optionValues = jsonLabels[i]; selectedOption = jsonSelected[i]['0']; for (j in optionValues) { optionValue = j; optionText = optionValues[j]; newCount = jsonCounts[i][optionValue]; optionText = newCount === '0' ? optionText : optionText + ' (' + newCount + ')'; optionSelected = (selectedOption === optionValue); optionDisabled = !(parseInt(newCount, 10) > 0); newOption = new Option(optionText, optionValue, false, optionSelected); if (i !== 1) { newOption.disabled = optionDisabled; } options.add(newOption); } } } , temporarilyDisableInterrupter: function ( days) { document.setCookieInSeconds("interstitialCounter", "-1", {duration: days * 24 * 60 * 60, path: "/"}); } , showInterrupter: function ( gaTrackingLabel, isHardGated) { var wrapper = document.getElementById('interrupterWrapper') ; try { window.scrollTo(0, 1); if (wrapper) { wrapper.style.display = 'inherit'; if (gaTrackingLabel) { ta.m.interrupter.setUpForTracking(gaTrackingLabel, isHardGated); ta.m.interrupter.gaTrackInterrupterShown(gaTrackingLabel); } ta.m.interrupter.replaceElemBgForInterrupter(); } } catch (e) { } } , replaceElementBackgroundWithDataPhotoUrl: function (element) { var photoUrl ; if (ifdefNN(element)) { photoUrl = element.getAttribute("data-photo-url"); if (ifdefNN(photoUrl)) { element.style.backgroundImage = "url('" + photoUrl + "')"; } } } , tryShowingHybridUpgradeInterrupter: function (pid) { var pageContents = document.getElementById('PAGE_CONTAINER') , upgradeWrapper = document.getElementById('hybridUpgradeWrapper') , phoneElement = document.getElementById('hybridPhone'); try { window.scrollTo(0, 1); ta.m.eventRecordPid(pid); if (ifdefNN(pageContents)) { pageContents.style.display = "none"; } if (ifdefNN(upgradeWrapper)) { upgradeWrapper.style.display = "inherit"; ta.m.replaceElementBackgroundWithDataPhotoUrl(upgradeWrapper); if (ifdefNN(phoneElement)) { ta.m.replaceElementBackgroundWithDataPhotoUrl(phoneElement); } } } catch (e) { throw(e); } } , closeInterrupter: function ( interrupterWrapperId) { var interrupter = document.getElementById(interrupterWrapperId) ; if (interrupter) { interrupter.style.display = 'none'; } if (ifdefNN(ta.m.Carousel)) { ta.m.Carousel.redraw(); } } , submitForumPostForm: function (elem) { if (!elem) { return; } if (elem && elem.parentNode) { elem.parentNode.addClass('gray'); } elem.setAttribute('disabled', true); if (elem.form) { elem.form.submit(); } } , displayElemById: function (id) { var item = $(id); if (!item) { return; } item.block(); } , verifyCookies: function (currentValue) { var storedValue , storedValueName = "STASHED" , pidCorrect = 37385 , pidLost = 37386 , pidMissing = 37387 , pidCleared = 37388 , pidMismatch = 37389 ; if (!ta.m.supportsHtml5Storage() || !ta.m.allowsCookies()) { return; } try { storedValue = localStorage[storedValueName]; if (!storedValue) { ta.m.onFirstPageView(pidCorrect, pidLost); } else if (storedValue === currentValue) { ta.m.eventRecord(null, ta.m.servletName, pidCorrect, null); } else if (!currentValue) { ta.m.eventRecord(null, ta.m.servletName, pidMissing, null); } else { ta.m.onFirstPageView(pidCleared, pidMismatch); } localStorage[storedValueName] = currentValue; } catch (e) { } } , onFirstPageView: function (firstPageViewPid, subsequentPageViewPid) { var interstitialCookieName = "interstitialCounter" , interstitialValue ; interstitialValue = parseInt(document.getCookie(interstitialCookieName), 10); if (!ifdefNN(interstitialValue) || isNaN(interstitialValue)) { ta.m.eventRecord(null, ta.m.servletName, firstPageViewPid, null); } else { ta.m.eventRecord(null, ta.m.servletName, subsequentPageViewPid, null); } } , supportsHtml5Storage: function () { try { return 'localStorage' in window && window['localStorage'] !== null; } catch (e) { return false; } } , fillBookingOfferPUID: function () { var puidElems = [] , puidElemsLen , i ; if (!ifdefNN(ta.uid)) { return; } if (typeof document.getElementsByClassName === 'function') { puidElems = document.getElementsByClassName('abFormPUID'); } puidElemsLen = puidElems.length; for (i = 0; i < puidElemsLen; i++) { puidElems[i].setAttribute("value", ta.uid); } } , clearAbandonedCartCookie: function() { document.cookie = "TAAbandonedCart=;path=/;max-age=0;expires=Thu, 01 Jan 1970 00:00:00 GMT;domain=" + ta.m.cookieDomain(); } , clearAbandonedCartCookieAndCloseOverlay: function ( idOfElementToShow) { var cart = $('abandonedCart') , hiddenContent = ifdefNN(idOfElementToShow) && typeof idOfElementToShow === "string" ? $(idOfElementToShow) : null ; if (ifdefNN(cart)) { cart.addClass("hidden"); } if (ifdefNN(hiddenContent)) { hiddenContent.removeClass("hidden"); } ta.m.clearAbandonedCartCookie(); if (ifdef(ta.m.Carousel)) { ta.m.Carousel.redraw(); } } , checkIfUserReturnedFromMeta: function() { var timeReturned , timeLeft , providerName , slot , servlet ; if (ta.util.localstorage.canUseSessionStore()) { timeReturned = new Date().getTime(); timeLeft = sessionStorage.browsedToMetaTime; providerName = sessionStorage.browseToMetaProvider; slot = sessionStorage.browsedToMetaSlot; servlet = sessionStorage.browsedToMetaServlet; if (timeLeft && (timeReturned - timeLeft <= TEN_MINUTES)) { ta.trackEventOnPage('COMMERCE_CLICK', 'Meta_Bounce', servlet + "|" + slot + "|" + providerName, (timeReturned - timeLeft)); } sessionStorage.browsedToMetaTime = null; sessionStorage.browseToMetaProvider = null; sessionStorage.browsedToMetaSlot = null; sessionStorage.browsedToMetaServlet = null; } } , recordScreenSize: function(action) { var screenSize = (function () { var e = document.documentElement , landscape = window.orientation && (window.orientation == 90 || window.orientation == -90) , g = document.body , wx = window.innerWidth || e.clientWidth || g.clientWidth , wy = window.innerHeight || e.clientHeight || g.clientHeight , sx = screen.width , sy = screen.height; return landscape ? 's' + sy + 'x' + sx + 'b' + wy + 'x' + wx : 's' + sx + 'x' + sy + 'b' + wx + 'x' + wy; })() ; if (ta.util.localstorage.canUseSessionStore() && sessionStorage && !sessionStorage.recordedScreenSize) { ta.trackEventOnPage('screenSizeRecord', action, screenSize); sessionStorage.recordedScreenSize = 1; } } , trackScrollingInHotelsPages: function(scrollingPositions) { if (_scrollingPositions) { return; } _scrollingPositions = scrollingPositions; var scrollFunction = _.throttle(function() { if (_scrollingPositions.length === 0) { window.removeEventListener('scroll', scrollFunction, false); } else if (_scrollingPositions.length > 0 && _scrollingPositions[0].position <= z(window).scrollTop() + z(window).height()) { var trackingName = _scrollingPositions[0].name; if(trackingName === "xsell") { ta.trackEventOnPage('xsell_hr_belowqa_similar', 'in_view', null, null, true); } else { ta.trackEventOnPage('MobileHotel_Review', 'scroll', trackingName, 0, true); } _scrollingPositions.shift(); } }, 250); window.addEventListener('scroll', scrollFunction, false); } , trackHotelsInGeo: function() { if (require.defined('page-model')) { var pageModel = require('page-model'); ta.trackEventOnPage("geo_size", "geo_size", pageModel.GEO_ID, pageModel.hotelsInGeo, true); } } , trackScrollingInHotelReview: function() { var trackingNames = {"#PAGE" : "hotel_info", "#rd_reviews_section_start" : "reviews", "#answersModule" : "q&a", ".bauhaus_room_tips" : "room_tips", ".also_viewed_module" : "xsell", "#nd_nearby_section_start" : "nearby_places"} , scrollingPositions = (function() { var positions = []; z(Object.keys(trackingNames)).each(function(index, item) { var zItem = z(item); if (zItem.length > 0 ) { positions.push({name: trackingNames[item], position: zItem.offset().top}); } }); return positions; })(); ta.m.trackScrollingInHotelsPages(scrollingPositions); } , inlineCheckRatesFormSubmit: function (errorMessage) { var checkRates = document.getElementById('checkRates') , inDayValue = parseInt(z('#outDay').val()) , outDayValue = parseInt(z('#inDay').val()) ; if (!errorMessage || (inDayValue > -1 && outDayValue > -1 && checkRates)) { document.getElementById('checkRates').submit(); } else { ta.m.alert.showDefaultAlertWithMessage(errorMessage); } } , delayNavigation: function(url, timeout, callback) { if (typeof callback === "function") { callback(); } setTimeout(function() { window.location.href = url; }, timeout); return false; } , adjustTitleFontSizeToFit: function() { var zTitle = z(".hero_image_title") , targetWidth = zTitle.parent().width() - 7 * 2 , targetHeight = Math.floor(zTitle.parent().height() * 0.56) , zTitleShadow , initialFontSizeString = zTitle.css("font-size") , fontSize ; if (initialFontSizeString) { fontSize = parseInt(initialFontSizeString, 10); if (fontSize) { zTitleShadow = zTitle.clone().css({ "position": "absolute", "max-width": targetWidth + "px", "z-index": -1 }).appendTo(zTitle.parent()); while (zTitleShadow.width() > targetWidth || zTitleShadow.height() > targetHeight) { fontSize--; zTitleShadow.css("font-size", fontSize + "px"); } zTitleShadow.remove(); zTitle.css("font-size", fontSize + "px"); } } } , injectAltSess: function (altsessid) { if (!$('altsess-script') && ifdefNN(ta.m.threatmetrix) && ta.m.threatmetrix !== '') { var altsessScript = document.createElement('script'); altsessScript.id ='altsess-script'; altsessScript.src = ta.m.threatmetrix; altsessScript.type = 'text/javascript'; altsessScript.onload = function(){ loadAltSess(altsessid); }; document.body.appendChild(altsessScript); } } }; nsExporter.exportTo(exports, "ta.m"); return exports; }); require(['ta/prwidgets'], function(widgets) { var define = widgets.define.bind(widgets,'mobile_hotel_address','handlers',['handlers']); define(["widget", "lib/jquery-amd", "common/trackingStreams", "mobile/Mobile", "ta/page", "ta/Core/TA.FireEvent"], function(widget, $, taRecord, mobile, taPage, taEvent) { return { trackAddressClick: function(useMapGate) { if (useMapGate) { taPage.loadDeferred().then(function() { taEvent.fireEvent("mobileInterruptableEvent", "javascript:void(0)", null, "use_native_map_adv_hard", "hard_gated"); }); return false; } else { taRecord.trackEvent(window.pageServlet, "street_address_click", "tablecell", 0, false); return true; } }, openLocalLang: function() { try { mobile.addPidToCookie(39242); } catch (e) {} widget.element.querySelector('.localLB').classList.remove('hidden'); }, closeLocalLang: function() { widget.element.querySelector('.localLB').classList.add('hidden'); } }; }); });require(['ta/prwidgets'], function(widgets) { var define = widgets.define.bind(widgets,'mobile_ride_service','handlers',['handlers']); define(["widget", "lib/jquery-amd", "ta/Core/TA.Record"], function(widget, $, taRecord) { function _handleClick(evnt, elmt, name) { taRecord.trackEventOnPage(name, name + '_clicked', 'launch' + name + 'MW'); require(["trjs!mobile/bauhaus/components/" + name.toLowerCase()], function(providerLib) { providerLib.handleClick && providerLib.handleClick(evnt); }); } // track shown modules $(".callout_container[data-provider]").each(function() { var name = $(this).attr("data-provider"); taRecord.trackEventOnPage(name, name + '_shown', '', 0, true); }); return { handleClick: _handleClick }; }); });if (require) {require(['ta/rollupAmdShim'], function(rollupAmdShim) { rollupAmdShim.install([], ["ta"]); }); } else {if (window.ta&&ta.rollupAmdShim) {ta.rollupAmdShim.install([],["ta"]);} }require(['ta/prwidgets'], function(widgets) { var define = widgets.define.bind(widgets,'common_atf_header_bl','handlers',['handlers']); define(['widget', 'vanillajs', 'ta/common/Flyout', 'ta/Core/TA.Record', 'ta/util/Link', 'ta/Core/TA.Event', 'overlays/uiOverlay', 'ta/maps/opener'], function (widget, vanillajs, taFlyout, taRecord, taLink, taEvent, uiOverlay, mapsOpener) { var dataElem = document.querySelector('.blRow'); var long_address_event = 'bl_contact_long_address'; var email_event = 'bl_contact_email'; function _onWebLinkClicked(event, target) { if (!dataElem) { return; } var locId = dataElem.getAttribute('data-locid'); var targetHref = target.getAttribute('data-ahref'); var trackingKey = target.getAttribute('data-trackingkey') || 'URL_HOTEL'; var trackingEventName = target.getAttribute('data-eventname') || 'bl_contact_website'; var options = { 'aHref': targetHref, 'isAsdf': true, 'detailId': locId, 'newTab': true }; taLink.targetBlank(event, target, options); _fireTracking(target, trackingKey); // ADS-3384 fire event to track through remarketing store taEvent.fireEvent("onBLClick", event, locId); var ctx = { location_id: locId, bl_website: targetHref, bl_tracking_key: trackingKey }; taRecord.trackActionWithJson(trackingEventName, ctx); } function _onEmailClicked(event, target, encodedEmailAddress) { if (!dataElem) { return; } var locId = dataElem.getAttribute('data-locid'); var context = dataElem.getAttribute('data-context'); _fireTracking(target, "EMAIL"); var ctx = { location_id: locId }; taRecord.trackActionWithJson(email_event, ctx); if (encodedEmailAddress && (context === 'Attraction_Review')) { // mailto for /AR var decodedEmailAddress = ta.util.decoder.base64Decoder(encodedEmailAddress); window.location = 'mailto:' + decodedEmailAddress; } else { // show flyout for /HR taFlyout.showEmailHotelOverlay(locId, 'false', '' , ''); } } function _onMenuClicked(event, target) { _fireScrollEvents('TABS_MENU'); _fireTracking(target,"MENU"); } function _onAddressHovered(event, target) { if (target && target.scrollWidth > target.offsetWidth) { uiOverlay(event, target); } var ctx = { location_id: dataElem.getAttribute('data-locid') }; taRecord.trackImpressionWithJson(long_address_event, ctx); } function _onAddressClicked(event, target) { var mapOptions = {customFilters:[]}; var mapFilters = target.getAttribute('data-mapFilters'); mapFilters && (mapOptions.customFilters = mapFilters.split(',')); mapsOpener.open(2, null, null, mapOptions); taRecord.trackEventOnPage('BusinessListings', 'click', 'address'); var ctx = { location_id: dataElem.getAttribute('data-locid') }; taRecord.trackActionWithJson(long_address_event, ctx); } function _fireTracking(target, contactType) { var gaContext = dataElem.getAttribute('data-context'); var locId = dataElem.getAttribute('data-locid'); var column = target.getAttribute('data-column'); var gaAction = contactType+"|text|" + column + "||"; taRecord.trackEventOnPage(gaContext, gaAction, locId, 0, false); taRecord.trackEventOnPage('BusinessListings', 'BL_CLICK', 'BL_LINKS'); } function _fireScrollEvents(tabId) { var elm = document.getElementById(tabId); taEvent.fireEvent("HRTab_clickTab", elm, 300); //Event for /HR taEvent.fireEvent("TabHeader_clickTab", elm, 300); //Event for /R_R and /A_R } return { onAddressHovered: _onAddressHovered, onAddressClicked: _onAddressClicked, onWebLinkClicked: _onWebLinkClicked, onEmailClicked: _onEmailClicked, onMenuClicked: _onMenuClicked }; }); });require(['ta/p13n/placements'], function(placements) { var define = placements.define.bind(placements,'trip_planner_breadcrumbs','handlers',['handlers']); define(["placement", "ta/Core/TA.FireEvent"], function(placement, taEvent) { "use strict"; function updateContents(contentDiv) { var placementDiv = document.getElementById(placement.id); if(placementDiv) { placementDiv.innerHTML = contentDiv.innerHTML; } } taEvent.on("update-" + placement.name, updateContents); return { }; });});require(['ta/p13n/placements'], function(placements) { var define = placements.define.bind(placements,'unsupported_browser_messaging','handlers',['handlers']); define(['placement', 'ta/util/ASDF'], function(placement, asdf) { function _openUrl(url) { asdf.asdfPopup(url); } return { openUrl: _openUrl }; });});require(['ta/p13n/placements'], function(placements) { var define = placements.define.bind(placements,'global_nav_action_profile','handlers',['handlers']); /* jshint newcap:false */ define([ 'placement', 'lib/jquery-amd' ], function( placement, $ ) { 'use strict'; var placementEl = $('#' + placement.id); var oldOverlay = null; var overlays = {}; // Login placementEl.on('click', 'a.login-button', function(evt) { if (oldOverlay) { oldOverlay.hide('replace-el'); } var flow = $('.core-login-button').data('flowName'); if (flow === "VIATOR_COMBINED") { require('ta/registration/RegOverlay').show(evt, evt.target, { flow: flow, pid: 40102, userRequestedForce: 'true', locationId: require('page-model').GEO_ID }); evt.preventDefault(); } else { require('ta/registration/RegOverlay').show(evt, evt.target, { flow: flow, pid: 427, userRequestedForce: 'true' }); evt.preventDefault(); } }); // Tracking: Catch-all var _trackNavClick = function(elmt, category) { var trackingLabel = $(elmt).data('trackingLabel'); // Handle links to /# (Help Center) or links opening new window require(['trjs!ta/Core/TA.Record'], function(taRecord) { if(/\/#\s*$/.test(elmt.href) || elmt.target == '_blank') { taRecord.trackEventOnPage(category, 'click', trackingLabel); } else { taRecord.setEvtCookie(category, 'click', trackingLabel, 0, elmt.href); } }); }; // Tracking: Global Nav and Sidebar Profile Links placementEl.on('click', '.global-nav-profile-menu a.subLink[data-tracking-label], .sidebar-nav-profile a.subLink[data-tracking-label]', function() { _trackNavClick(this, 'UtilityNav'); }); // Tracking: Profile Sublinks placementEl.on('click', '[data-track-profile-dropdown-open]', function() { var event = require('page-model').session.loggedIn ? "Signed_in_profile_dropdown" : "Signed_out_profile_dropdown"; require(['trjs!ta/Core/TA.Record'], function(taRecord) { taRecord.trackEventOnPage('UtilityNav', 'open', event); }); }); }); });require(['ta/prwidgets'], function(widgets) { var define = widgets.define.bind(widgets,'common_location_content_header','handlers',['handlers']); /** * Private handlers for LocationContentHeaderWidget * @author xli * @since June 2017 */ define(['widget', 'ta/Core/TA.Record'], function(widget, taRecord){ 'use strict'; function _warOnClick() { taRecord.setEvtCookie('Review_Summary', 'write_reivew', '', 0, '/UserReviewEdit'); } function _warOnClickForOwner(locationId, href) { taRecord.setEvtCookie('owner_cta', 'owner_visit_mc_middle', locationId, 0, href); } return { warOnClick: _warOnClick, warOnClickForOwner: _warOnClickForOwner }; });});require(['ta/prwidgets'], function(widgets) { var define = widgets.define.bind(widgets,'common_review_point_campaign','handlers',['handlers']); /** * Private handlers for ReviewPointCampaignWidget * @author xli * @since June 2017 */ define(['widget', 'ta/Core/TA.Record', 'vanillajs'], function(widget, taRecord, vanilla){ 'use strict'; function _campaignStickerTracking(campaignName){ if(!campaignName) { return; } taRecord.trackEventOnPage('MileCampaigns', campaignName, 'PointsSticker', 1); } return { campaignStickerTracking: _campaignStickerTracking }; }); });require(['ta/p13n/placements'], function(placements) { var define = placements.define.bind(placements,'background_update_dates','handlers',['handlers']); /** * Poll travel info cookie for updated dates, and if found, update page */ define(['placement', 'lib/jquery-amd', 'utils/cookieutils', 'ta/page'], function(placement, $, CookieUtils, page) { var _timeToPoll = 2 * 1000; // poll every 2 seconds var _timeToTimeout = 15 * 60 * 1000; // timeout after 15 minutes var _checkin = getTravelDate('A'); var _checkout = getTravelDate('D'); var _polling; var _timeout; /** * Get a travel date from the cookie. * @param {String} prefix * @returns {Date} */ function getTravelDate(prefix) { var day, month, year; day = getTravelInfoItem(prefix + 'D'); month = getTravelInfoItem(prefix + 'M'); year = getTravelInfoItem(prefix + 'Y'); if (day && month && year) { return dateFromString(year + '/' + month + '/' + day); } return null; } /** * Get a travel info item from the cookie. * @param {String} key * @returns {String} */ function getTravelInfoItem(key) { var travelInfoCookie = CookieUtils.getCookie('TATravelInfo'); if (travelInfoCookie) { var travelInfo = travelInfoCookie.split('*'); for (var i = 0; i < travelInfo.length; i++) { var item = travelInfo[i].split('.'); if (item[0] === key) { return item[1]; } } } } /** * Convert a date string formatted as year/month/day into a Date object. * @param {String} dateString * @returns {Date} */ function dateFromString(dateString) { var components = dateString.split('/'); return new Date(parseInt(components[0]), parseInt(components[1]) - 1, parseInt(components[2])); } /** * Compares passed in dates with current dates and returns passed in dates if they are different from current dates. * @param {[Date, Date]} dates * @returns ({[Date, Date]}) */ function checkForUpdatedDates(dates) { if (!dates || dates.length != 2) { return; } var checkin = dates[0]; var checkout = dates[1]; if (checkin instanceof Date && checkout instanceof Date) { // make sure we're ignoring time checkin.setHours(0, 0, 0, 0); checkout.setHours(0, 0, 0, 0); if (_checkin instanceof Date && _checkout instanceof Date) { // make sure we're ignoring time _checkin.setHours(0, 0, 0, 0); _checkout.setHours(0, 0, 0, 0); // compare the dates and return the updated dates if they have changed if (checkin.getTime() != _checkin.getTime() || checkout.getTime() != _checkout.getTime()) { return [checkin, checkout]; } } else { // no old dates, so just return the new dates return [checkin, checkout]; } } } /** * Updates the page (sets datepickers and fetches updated prices) with the passed in dates. * @param {[Date, Date]} dates */ function pushDates(dates) { page.pushDates(document.querySelector('body'), 'STAYDATES', [dates[0], dates[1]]); } /** * Event handler for 'dateSelected' page event. * @param {Element} target * @param {String} dateType * @param {[Date, Date]} dates */ function dateSelected(target, dateType, dates) { if (dateType == 'STAYDATES') { if (checkForUpdatedDates(dates)) { stopPolling(); // user changed dates in this tab } } } /** * Check travel info cookie for updated dates (changed in a different tab). */ function poll() { if (_polling) { var dates = checkForUpdatedDates([getTravelDate('A'), getTravelDate('D')]); if (dates) { pushDates(dates); stopPolling(); // dates were updated in a different tab } else { setTimeout(poll, _timeToPoll); } } } /** * Starts polling of the travel info cookie for updated dates. */ function startPolling() { _polling = true; poll(); if (!_timeout) { _timeout = setTimeout(function () { stopPolling(); // timeout out }, _timeToTimeout); } } /** * Pauses polling of the travel info cookie. * Clears the interval and timeout. */ function pausePolling() { _polling = false; clearTimeout(_timeout); _timeout = null; } /** * Stops polling of the travel info cookie. * Clears the interval and timeout. * Removes the event handlers. */ function stopPolling() { pausePolling(); page.off('dateSelected', dateSelected); $(window).off('blur', startPolling); $(window).off('focus', pausePolling); } // Setup the event handlers to start polling on blur, pause on focus, and stop when dates have been updated. // Assumes we have default dates, otherwise placement would have been featured off by FeatureDefaultDates.java. page.on('dateSelected', dateSelected); $(window).on('blur', startPolling); $(window).on('focus', pausePolling); } ); });require(['ta/p13n/placements','ta/page','$prp/background_update_dates/handlers'], function(placements, impl) { window.ta.plc_background_update_dates_handlers = placements.load('background_update_dates','handlers.js', { 'name': 'background_update_dates', 'id': 'taplc_background_update_dates', 'location_id': 1474425, 'servletClass': 'com.TripResearch.servlet.accommodation.AccommodationDetail', 'servletName': 'Hotel_Review', 'params': {}, 'data': {}});}); require(['ta/p13n/placements'], function(placements) { var define = placements.define.bind(placements,'vr_srp_listings','handlers',['handlers']); define(['placement', 'lib/jquery-amd', 'utils/ajax', 'ta/util/Error', 'utils/localstorage' ], function (placement, $, ajax, taError, localStorage ) { var ABANDONED_CART_INFO = "abandonedCart"; var _placement = $('#' + placement.id); var addAbandonedCartCell = function () { var abandonedCart = localStorage.get(ABANDONED_CART_INFO); if (abandonedCart) { ajax({ url: '/MetaPlacementAjax', data: { /* MetaPlacementAjax parameters */ placementName: 'vr_abandoned_cart_cell', skipLocation: true, assets: false, packagePrivateAssets: true, wrap: true, /* AbandonedCartCellRenderer parameters */ metaReferer: "SRP", geo: placement.location_id, // UrlArg.LOCATION_ID locationId: abandonedCart.locationId, // UrlArg.LOCATIONID checkIn: abandonedCart.checkIn, // UrlArg.CHECK_IN checkOut: abandonedCart.checkOut, // UrlArg.CHECK_OUT inquiryAdults: abandonedCart.inquiryAdults, // VacationRentalsAjax.PARAM_ADULTS numOfKids: abandonedCart.numOfKids // VRDetailUtil.PARAM_N_KIDS }, type: 'POST', evalScripts: false, success: function (data) { if (data.indexOf("vr_listing") < 0) { return; } var duplicateListing = $("#vrListing_" + abandonedCart.locationId); if (duplicateListing) { duplicateListing.closest(".vr_listing").remove(); } _placement.find(".vr_listing:eq(1)").after(data); }, error: function(e) { taError.record(e, 'Failed to retrieve abandoned cart cell'); } }); } }; addAbandonedCartCell(); return { }; });});require(['ta/p13n/placements'], function(placements) { var define = placements.define.bind(placements,'saves_cta_highlights','handlers',['handlers']); /** * Created by huihongwang on 7/5/17. */ define([ 'placement', 'lib/jquery-amd', 'page-model', 'ta/Core/TA.Record', 'utils/localstorage', 'overlays/Overlay', 'overlays/position', 'overlays/styles/flyout', 'overlays/options/fade', 'overlays/options/autoReposition' ], function( placement, $, pageModel, Tracking, Storage, Overlay, Position, Flyout, Fade, AutoReposition ) { 'use strict'; var overlay; var $root = $('#' + placement.id); var $testEl = $root.find('.saves-cta-highlights-test'); var $controlEl = $root.find('.saves-cta-highlights-control'); var STORAGE_TEST_KEY_PREFIX = 'saves-cta-highlights-test'; var STORAGE_CONTROL_KEY_PREFIX = 'saves-cta-highlights-control'; var STORAGE_SKIP_KEY = 'saves-cta-highlights-skip'; var csrf_token = require('page-model').JS_SECURITY_TOKEN; var servletName = require('page-model').session.pageServlet; var _isTimeWithinXHours = function(hours, time) { return (new Date().getTime() - time) < (hours * 60 * 60 * 1000); }; var _displayOverlay = function() { $testEl.on('click', '.ui_close_x', function() { overlay && overlay.destroy() && (overlay = null); }); $root.parent().on('click', '.saves-widget-button', function() { overlay && overlay.destroy() && (overlay = null); }); overlay = new Overlay($root.parent()[0], [ new Flyout($testEl[0], 'saves-cta-highlights-test-flyout ui_popover'), Position.bottomLeft([-10, 15]), AutoReposition, Fade(Fade.SHORT, true, true) ]); overlay.show(); }; var _getRecentLocations = function(onSuccess) { $.ajax({ type: 'GET', url: '/data/1.0/recent/locations', data: { limit: 3 }, beforeSend: function(xhr) { xhr.setRequestHeader('X-Requested-By', csrf_token); }, success: onSuccess }); }; var _getTripItems = function(onSuccess) { $.ajax({ type: 'GET', url: '/data/1.0/trips/item', data: { limit: 1 }, beforeSend: function(xhr) { xhr.setRequestHeader('X-Requested-By', csrf_token); }, success: onSuccess }); }; var _runTestIfNeeded = function(isControlGroup, storageKey) { var trackingLabel = ''; if (!require('page-model').session.loggedIn) { // Run the test if user is logged out trackingLabel = 'logged_out|' + servletName; if (!isControlGroup) { _displayOverlay(); } Storage.set(storageKey, true); Tracking.trackEventOnPage(storageKey, "flyout_shown", trackingLabel, 0, false); return; } _getRecentLocations(function(response) { if (response.data && response.data.length > 1 && _isTimeWithinXHours(2, response.data[1].date) && (response.data.length <= 2 || !_isTimeWithinXHours(2, response.data[2].date))) { // This is the 2nd page user visited in last 2 hours _getTripItems(function(response) { if (!response.data || response.data.length == 0) { trackingLabel = 'never_saved|' + servletName; } else if (!_isTimeWithinXHours(30 * 24, new Date(response.data[0].created).getTime())) { trackingLabel = 'no_save_last_30_days|' + servletName; } else { Storage.set(STORAGE_SKIP_KEY, true); return; } // Run the test if user is visiting the 2nd location detail page in last 2 hours // and haven't saved in last 30 days if (!isControlGroup) { _displayOverlay(); } Storage.set(storageKey, true); Tracking.trackEventOnPage(storageKey, "flyout_shown", trackingLabel, 0, false); }); } }); }; // Detect if there is any existing overlay, notification popup or qualaroo survery on the page var _isOverlayOnPage = function() { return $.find('.ui_notification_container').length || $.find('.ui_overlay').length || $.find('#qual_ol').length; }; var _showTestFlyout = function() { setTimeout(function() { if (Storage.has(STORAGE_SKIP_KEY)) { return; } if (_isOverlayOnPage()) { Storage.set(STORAGE_SKIP_KEY, true); return; } if (pageModel.session.pageServlet === 'Hotel_Review' && require.defined('hotels/hrSurveys') && require('hotels/hrSurveys').shouldShowSurvey()) { return; } if ($testEl.length) { var testVersion = $testEl.attr('data-test-version'); var storageKey = STORAGE_TEST_KEY_PREFIX + testVersion; if (!Storage.has(storageKey)) { _runTestIfNeeded(false, storageKey); } } else if ($controlEl.length) { // The user could have seen overlay if he/she in test group var storageKey = STORAGE_CONTROL_KEY_PREFIX; if (!Storage.has(storageKey)) { _runTestIfNeeded(true, storageKey); } } }, 1600); }; if (Storage.enabled) { if (document.readyState === 'complete') { _showTestFlyout(); } else { $(window).ready(_showTestFlyout); } } }); });require(['ta/p13n/placements'], function(placements) { var define = placements.define.bind(placements,'global_nav_links','handlers',['handlers']); /* jshint newcap:false */ define([ 'placement', 'lib/jquery-amd' ], function( placement, $ ) { 'use strict'; var placementEl = $('#' + placement.id); var globalNavMenus = $('[data-placement-name="global_nav_links"]'); // Tracking: Catch-all var _trackNavClick = function(elmt, category) { var trackingLabel = $(elmt).data('trackingLabel'); // Handle links to /# (Help Center) or links opening new window require(['trjs!ta/Core/TA.Record'], function(taRecord) { if(/\/#\s*$/.test(elmt.href) || elmt.target == '_blank') { taRecord.trackEventOnPage(category, 'click', trackingLabel); } else { taRecord.setEvtCookie(category, 'click', trackingLabel, 0, elmt.href); } }); }; var _trackReorderNavClick = function(elmt, category) { var reorderTrackingLabel = $(elmt).data('reorderTrackingLabel'); // Handle links to /# (Help Center) or links opening new window require(['trjs!ta/Core/TA.Record'], function(taRecord) { taRecord.trackEventOnPage(category, 'click', reorderTrackingLabel); }); }; globalNavMenus.on('click', 'a.global-nav-link[data-reorder-tracking-label]', function() { _trackReorderNavClick(this, 'TopNav'); }); // Tracking: Catches all of the non-submenu links that require tracking // Links only qualify if they have the data-tracking-label attribute. globalNavMenus.on('click', 'a.global-nav-link[data-tracking-label]', function() { _trackNavClick(this, 'TopNav'); }); // Tracking for links in submenus works by looking up the active-menu-trigger // (link that triggered the dropdown) and using it's tracking-label as a prefix globalNavMenus.on('click', 'a.subLink', function() { var triggerEl = $("[data-active-menu-trigger][data-tracking-label]", placementEl); var trackingLabel = triggerEl.data('trackingLabel') + "_sublink"; _trackNavClick(this, 'TopNav'); }); }); });require(['ta/p13n/placements'], function(placements) { var define = placements.define.bind(placements,'masthead_search','handlers',['deferred/lateHandlers','handlers']); /* jshint newcap:false */ /** * Private javascript for masthead_search placement */ define(["placement", "ta/Core/TA.Store"], function (placement, taStore) { function prepareTypeaheadParameters() { if (placement.params && 'typeahead_to_store' in placement.params) { var propertiesToStore = placement.params.typeahead_to_store; if (propertiesToStore) { for (var property in propertiesToStore) { if (propertiesToStore.hasOwnProperty(property)) { taStore.store(property, propertiesToStore[property]); } } } } } prepareTypeaheadParameters(); var options = taStore.retrieve("typeahead_dual_search_options"); if (document.activeElement === document.getElementById("GEO_SCOPED_SEARCH_INPUT")) { placement.require(["trjs!deferred/lateHandlers"], function (lh) { lh.whereFocused({type: "dummy"}, document.activeElement); }); } else if (document.activeElement === document.getElementById("mainSearch")) { placement.require(["trjs!deferred/lateHandlers"], function (lh) { lh.whatFocused({type: "dummy"}, document.activeElement); }); } return { getOptions: function () { return options; } }; }); });if (require) {require(['ta/rollupAmdShim'], function(rollupAmdShim) { rollupAmdShim.install([], ["ta/util/RecordInterruption"]); }); } else {if (window.ta&&ta.rollupAmdShim) {ta.rollupAmdShim.install([],["ta/util/RecordInterruption"]);} }require(['ta/p13n/placements'], function(placements) { var define = placements.define.bind(placements,'qualtrics_survey','handlers',['handlers']); /** * Private javascript for qualtrics survey placement * We want to show on the 2nd pageview, no more than once every 30 days * The div id is generated from the qualtrics site-intercept code. * The placement render will decide which survey to displace. */ define(["placement", "lib/jquery-amd", "ta", 'ta/Core/TA.LocalStorage', 'ta/Core/TA.Event', 'page-model', 'ta/util/RecordInterruption', 'ta/support/Qualtrics'], function (placement, $, ta, taLocalStore, taEvent, model, recordInterruption, taQualtrics) { "use strict"; var placementEl = $('#' + placement.id); var _seenTimeout = 30 * 24 * 60 * 60 * 1000; // 30 days in ms function updatePageViews(){ if (taLocalStore && taLocalStore.enabled) { var previousSessionId = taLocalStore.get('qualtrics-session-id'); var currentSessionId = model.session.sessionId; if (previousSessionId && previousSessionId == currentSessionId) { var views = Number(taLocalStore.get('qualtrics-page-views')) + 1; taLocalStore.set('qualtrics-page-views', views); } else { taLocalStore.set('qualtrics-session-id', currentSessionId); taLocalStore.set('qualtrics-page-views', 1); } } } function beenSeen() { if (taLocalStore && taLocalStore.enabled) { var ts = parseFloat(taLocalStore.get('qualtrics-last-seen')); var lastDisplayTime = isNaN(ts) ? 0 : ts; var nextDisplayTime = (lastDisplayTime < 0) ? 0 : (lastDisplayTime + _seenTimeout); return Date.now() < nextDisplayTime; } else { // no localstorage to track display return true; } } function setSeen(seen) { // set/clear the value localStorage (if available) if (taLocalStore && taLocalStore.enabled) { if (seen) { taLocalStore.set('qualtrics-last-seen', Date.now()); } else { taLocalStore.remove('qualtrics-last-seen'); } } } /* only shows at 2nd pageview of a session*/ updatePageViews(); if(taLocalStore.enabled) { var views = Number(taLocalStore.get('qualtrics-page-views')); if (views == 2 && !beenSeen()) { var surveyKey = placementEl.find(".survey_plc_holder").attr('id'); var surveyName = placementEl.find(".survey_name").attr('id'); if (surveyKey) { taQualtrics.displaySurvey(surveyKey); recordInterruption.record('popup', 'Qualtrics_Survey' + '|' + window.pageServlet + '|' + surveyName); setSeen(true); } } } return { }; }); });require(['ta/p13n/placements'], function(placements) { var define = placements.define.bind(placements,'browser_mode_tracking','handlers',['handlers']); define([ 'placement', 'ta/Core/TA.Event', 'ta/Browser', 'ta/Core/TA.Record', 'ta/util/SessionStorage' ], function(placement, taEvent, taBrowser, taRecord, taSessionStorage){ var browserName; var sessionStoreKey = placement.id + '_browser_mode_tracked'; function _trackBrowserMode (resultStr) { taRecord.trackEventOnPage('BROWSER_TRACKING', browserName, resultStr, null, true); } taEvent.queueForLoad(function(){ if (taSessionStorage.canUseSessionStore() && sessionStorage.getItem(sessionStoreKey)) { // already tracked return; } else { if (taBrowser.isChrome()) { browserName = "Chrome"; taBrowser.isChromeIncognito(_trackBrowserMode); taSessionStorage.canUseSessionStore() && sessionStorage.setItem(sessionStoreKey, '1'); } } }); });});require(['ta/p13n/placements'], function(placements) { var define = placements.define.bind(placements,'global_nav_geopill','handlers',['deferred/GeoSearch','handlers']); // this file MUST exist in order for the placements system to be able to load // the deferred file. If this file is removed the placement will fail to // initialize. define([], function(){}); });require(['ta/p13n/placements'], function(placements) { var define = placements.define.bind(placements,'comscore','handlers',['handlers']); /* globals COMSCORE */ define([ 'placement', 'ta/Core/TA.Event', 'vanillajs' ], function( placement, TAEvent ){ 'use strict'; TAEvent.queueForLoad(function(){ var _root = document.getElementById(placement.id) , _dataHolder = _root.querySelector('.dataHolder') , commscoreId = _dataHolder.getAttribute('data-id') , beacon = { c1: '2', c2: commscoreId, c3: '', c4: '' } ; if (typeof COMSCORE != 'undefined'){ COMSCORE.beacon(beacon); } else { window._comscore = window._comscore || []; window._comscore.push(beacon); var s = document.createElement('script'); s.async = true; s.src = (document.location.protocol == 'https:' ? 'https://sb' : 'http://b') + '.scorecardresearch.com/beacon.js'; _root.appendChild(s); } }, 5, 'comscore'); // prioritized before default things (100+), and after 'really important' things, which seem to be meta things. Before GA, which is 10. }); });require(['ta/p13n/placements'], function(placements) { var define = placements.define.bind(placements,'hsx_special_messaging','handlers',['handlers']); /* * Private javascript for hsx_special_messaging placement */ define(["placement", "ta/Core/TA.FireEvent", 'ta/prwidgets', 'utils/nodePreserve'], function(placement, taEvent, prwidgets, nodePreserve) { var eventName = 'update-' + placement.name; /** * Called on data-targetEvent update- * * @param {DocumentFragment} contentDiv - A DOM element containing the new special messaging placement */ function _updatePlacement(contentDiv) { // Normalize contentDiv - sometimes desired content is root, sometimes a child (ex. FiltersUtil.js vs Repoll.js) if (contentDiv && contentDiv.getAttribute('data-targetEvent') != eventName) { contentDiv = contentDiv.querySelector('[data-targetEvent="' + eventName + '"]'); } var placementDiv = document.getElementById(placement.id); if(!contentDiv || !placementDiv) { return; } nodePreserve.treePreserve(placementDiv, contentDiv); prwidgets.initWidgets(placementDiv); } taEvent.on(eventName, _updatePlacement); return { }; }); });require(['ta/prwidgets'], function(widgets) { var define = widgets.define.bind(widgets,'hotels_special_message','handlers',['handlers']); /** * Private javascript for special_message widget */ define(["widget", "ta/Core/TA.Record"], function(widget, taRecord) { var _widgetElement = widget.element; var _messageType; function _dismissMessage() { _widgetElement.classList.add("collapsed"); taRecord.trackEventOnPage("Special_Message_Widget", "hidden", _messageType); } function _toggleInfo() { var moreInfo = _widgetElement.querySelector(".moreInfo"); if (moreInfo) { moreInfo.classList.toggle("collapsed"); } } function _init() { _messageType = _widgetElement.querySelector(".specialMessageContainer").getAttribute("data-messagetype"); taRecord.trackEventOnPage("Special_Message_Widget", "shown", _messageType); var link = _widgetElement.querySelector(".primaryText[data-link] .link"); if (link) { link.addEventListener("click", _primaryTextClick); } } function _primaryTextClick(event) { var targetParent = event.target && event.target.parentNode; var url = targetParent.getAttribute("data-link"); var trackingInfo = targetParent.getAttribute("data-track"); if (trackingInfo) { var trackingArgs = trackingInfo.split('|'); taRecord.addGARecordMevt.apply(taRecord, trackingArgs); } if (url) { window.location = url; } return false; } _init(); return { dismiss: _dismissMessage, toggleInfo: _toggleInfo } }); });require(['ta/p13n/placements'], function(placements) { var define = placements.define.bind(placements,'global_nav','handlers',['deferred/lateHandlers','handlers']); /* jshint newcap:false */ define([ 'placement', 'lib/jquery-amd', 'common/Radio' ], function( placement, $, Radio ) { 'use strict'; var placementEl = $('#' + placement.id); var radio = Radio('global-nav'); var oldOverlay = null; var mastheadSavesApp = null; // Trigger in 'placements/global_nav_action_trips/handlers' radio.on('run-my-trips-test-3', function() { openMyTrips(false, true); }); // Update Global Nav content var _onSuccessLoginRefresh = (function(response) { window.userLoggedIn = true; // Update the masthead, but keep some of the old content. // This is because the AJAX servlet does not generate the correct content // for the original page (instead, it generates it for /MetaPlacementAjax). // Note this uses the IDs to match each "old" element with its corresponding "new" element. var oldMenus = $("
").append(placementEl.find('.global-nav-no-refresh')); placementEl.html(response); placementEl.find('.global-nav-no-refresh').each(function(idx, el) { $(el).replaceWith(oldMenus.find('#' + el.getAttribute('id'))[0]); }); if (oldOverlay) { oldOverlay.hide('replace-el'); } }).bind(placementEl); var _getRequestOptionsForLoginRefresh = function() { return { // This should not be necessary, but for some reason placements // seems tightly coupled with the location store skipLocation: placement.location_id <= 0, returnTo: document.location.pathname + (document.location.search||'') + (document.location.hash||'') }; }; // When login state changes, request the updated global nav $(document).on('regOverlay:success', function() { placement.requestAJAXPlacement( _onSuccessLoginRefresh, null, _getRequestOptionsForLoginRefresh()); }); // When mousing over the global nav links, show their submenus placementEl.on('mouseenter', '.global-nav-links-container [data-element]', function(evt) { var elmt = $(this); var linkEl = elmt.find('a').first(); if (oldOverlay) { oldOverlay.hide('new-overlay'); } // Is there a submenu to show? var menuEl = placementEl.find(elmt.data('element')).clone(); if (!menuEl.length) { return; } var reqs = ['trjs!overlays/Overlay', 'trjs!overlays/styles/flyout', 'trjs!overlays/options/closeOnMouseAway', 'trjs!overlays/position', 'trjs!overlays/options/destroyOnHide' ]; require(reqs, function(Overlay, Flyout, CloseOnMouseAway, Position, DestroyOnHide) { var overlay = new Overlay(elmt[0], new Flyout(menuEl[0], 'global-nav-flyout global-nav-menu'), CloseOnMouseAway, Position.bottomRight([0, 1]), DestroyOnHide); overlay.domParent = placementEl.find('.global-nav-overlays-container')[0]; overlay.show(); // For tracking clicks to submenu links, we add an attribute to the link being hovered over so we can retrieve // the tracking prefix from the link's tracking-label attribute. linkEl.attr('data-active-menu-trigger', true); $(evt.currentTarget).find('.ui_tab').addClass('hovering'); overlay.on('hide', function() { // Remove attribute used for tracking linkEl.removeAttr('data-active-menu-trigger'); $(evt.currentTarget).find('.ui_tab').removeClass('hovering'); }); oldOverlay = overlay; }); }); // When mousing over a menu in the dropdown, open the submenu placementEl.on('mouseenter', '.expandSubItem', function(evt) { var elmt = $(this); // CX-2715 avoid opening a duplicate submenu if (elmt.hasClass('active')) { return; } elmt.addClass('active'); elmt.siblings('.expandSubItem').removeClass('active'); var submenuEl = elmt.find('.secondSubNav').clone(); var targetEl = elmt.parents('.ui_overlay'); var reqs = ['trjs!overlays/Overlay', 'trjs!overlays/styles/flyout', 'trjs!overlays/options/closeOnMouseOut', 'trjs!overlays/options/destroyOnHide' ]; require(reqs, function(Overlay, Flyout, CloseOnMouseOut, DestroyOnHide) { var overlay = new Overlay(elmt[0], new Flyout(submenuEl[0]), CloseOnMouseOut, DestroyOnHide); overlay.domParent = targetEl[0]; submenuEl.css('display', 'block'); overlay.show(); }); }); // If we're opening the more menu, add any elements that are hidden or collapsed due to space placementEl.on('mouseenter', '.global-nav-links-ellipsis', function(evt) { var elmt = $(this); if (oldOverlay) { oldOverlay.hide('new-overlay'); } var allEls = placementEl.find(".global-nav-links-container li"); var hiddenEls = allEls.filter(":hidden"); var collapsedEls = allEls.filter(function(idx, el) { return $(el).offset().top > allEls.offset().top; }); var elsToShow = $().add(hiddenEls).add(collapsedEls).clone(); var menuEl = placementEl.find('.global-nav-links-menu-more').clone(); menuEl.prepend(elsToShow); var reqs = ['trjs!overlays/Overlay', 'trjs!overlays/styles/flyout', 'trjs!overlays/options/closeOnMouseAway', 'trjs!overlays/position', 'trjs!overlays/options/destroyOnHide' ]; require(reqs, function(Overlay, Flyout, CloseOnMouseAway, Position, DestroyOnHide) { var overlay = new Overlay(elmt[0], new Flyout(menuEl[0], 'global-nav-flyout global-nav-menu'), CloseOnMouseAway, Position.bottomRight([0, 1]), DestroyOnHide); overlay.domParent = placementEl.find('.global-nav-overlays-container')[0]; overlay.show(); elmt.find('.ui_tab').addClass('hovering'); overlay.on('hide', function() { elmt.find('.ui_tab').removeClass('hovering'); }); oldOverlay = overlay; }); }); // Help Center MW Overlay placementEl.on('click', '#global-nav-HelpDesk', function (evt) { evt.preventDefault(); var sourceElem = this; var reqs = ['trjs!overlays/Overlay', 'trjs!overlays/styles/modal', 'trjs!overlays/options/closeOnEscape', 'trjs!overlays/position', 'trjs!overlays/options/closeOnDocClick', 'trjs!overlays/options/ajax', 'trcss!src/build/required/help_center_overlay' ]; require(reqs, function(Overlay, Modal, CloseOnEscape, Position, CloseOnDocClick, Ajax, styleSheetOK){ var overlay = new Overlay(sourceElem, [ Modal(null, '', 'help_center'), CloseOnEscape, Position.cssCentered(), CloseOnDocClick, Ajax("/uvpages/helpCenterOverlay.html") ]); overlay.show(); radio.emit('overlay-show'); }); }); // When clicking on my trips placementEl.on('click', '.masthead-saves', function(evt) { if (mastheadSavesApp) { if (oldOverlay) { oldOverlay.hide('new-overlay'); } mastheadSavesApp && mastheadSavesApp.destroy() && (mastheadSavesApp = null); require(['trjs!ta/Core/TA.Record'], function(taRecord) { taRecord.trackEventOnPage('TopNav', 'mytrips_dropdown_cancel'); }); } else { openMyTrips(false, false, evt.currentTarget); $(evt.currentTarget).find('.ui_icon').addClass('hovering'); } }); // My Trips - Remove through CX-2542 var openMyTrips = function(inCreateTripFlow, runTest3, elmt) { if (oldOverlay) { oldOverlay.hide('new-overlay'); } var reqs = ['trjs!overlays/Overlay', 'trjs!overlays/styles/flyout', 'trjs!overlays/options/closeOnDocClick', 'trjs!overlays/position', 'trjs!overlays/options/destroyOnHide', 'trjs!overlays/options/autoReposition', 'trjs!ta/Core/TA.Record' ]; require(reqs, function(Overlay, Flyout, CloseOnDocClick, Position, DestroyOnHide, AutoReposition, taRecord) { // Create a new overlay var overlay = new Overlay( $('.masthead-saves')[0], new Flyout('', 'global-nav-flyout global-nav-utility trips-flyout-container'), CloseOnDocClick.withoutTouchEvents, Position.bottomLeft([-20, -3]), DestroyOnHide, AutoReposition ); overlay.domParent = placementEl.find('.global-nav-overlays-container')[0]; overlay.show(); placementEl.find('.trips-flyout-container').addClass('hide-arrow'); // To make sure the overlay arrow is shown together with the masthead saves view oldOverlay = overlay; require(['trdust!masthead-saves-dust', 'trdust!styleguide-dust', 'trjs!masthead-saves', 'trcss!masthead-saves'], function(dustModule, module, styleSheetOK) { setTimeout(function () { mastheadSavesApp = new window.MastheadSavesApp(); mastheadSavesApp.start({ inCreateTripFlow: inCreateTripFlow, runTest3: runTest3 }); overlay.on('hide', function(evt) { mastheadSavesApp && mastheadSavesApp.destroy() && (mastheadSavesApp = null); taRecord.trackEventOnPage('TopNav', 'mytrips_dropdown_cancel'); if (elmt) { $(elmt).find('.ui_icon').removeClass('hovering'); } }); placementEl.find('.trips-flyout-container').removeClass('hide-arrow'); }, 0); }); }); }.bind(placementEl); // Profile Link: When clicking on a utility link, open the submenu, if one is available placementEl.on('click', '.global-nav-utility-activator', function(evt) { var elm = $(this); // Is there a submenu to show? var menuEl = placementEl.find(elm.data('element')).clone(); if (!menuEl.length) { return; } if (oldOverlay) { if (oldOverlay.sourceElement == this){ oldOverlay.isOpen() ? oldOverlay.hide('close') : oldOverlay.show(); return; // don't re-open the same overlay. } else { oldOverlay.hide('new-overlay'); } } // Create a new overlay menuEl = menuEl.clone(); var reqs = ['trjs!overlays/Overlay', 'trjs!overlays/styles/flyout', 'trjs!overlays/options/closeOnDocClick', 'trjs!overlays/position', 'trjs!overlays/options/autoReposition' ]; require(reqs, function(Overlay, Flyout, CloseOnDocClick, Position, AutoReposition) { var overlay = new Overlay(elm[0], new Flyout(menuEl[0], 'global-nav-flyout global-nav-utility'), CloseOnDocClick, Position.bottomLeft([-20, -3]), AutoReposition); overlay.domParent = placementEl.find('.global-nav-overlays-container')[0]; overlay.show(); elm.addClass('menu-open'); $(evt.currentTarget).find('.ui_icon').addClass('hovering'); overlay.on('hide', function() { elm.removeClass('menu-open'); $(evt.currentTarget).find('.ui_icon').removeClass('hovering'); }); oldOverlay = overlay; }); }); // Trackng: Logo clicks placementEl.on('click', '.global-nav-logo', function() { require(['trjs!ta/Core/TA.Record'], function(taRecord) { taRecord.setEvtCookie('TopNav_' + window.pageServlet, 'click', 'TAlogo', 0, '/Home'); }); }); // Mobile Web Global Nav Persistent Icons function checkForPersistentIcons() { var offsetPosition = $(window).scrollTop(); var persistentIcons = $('.persistent-icons', placementEl); var navIcons = $('.global-nav-icons', persistentIcons); if (navIcons.length) { var logo = $('.global-nav-logo'); var pill = $('[data-placement-name="global_nav_geopill"]'); // A - Sideways default state: Logo and icons together, geo pill on second line // B - Sideways 1st scroll (down): Icons animate to geo pill, logo scrolls out of view // C - Sideways 2nd scroll (down): Icons locked to geo pill, all elements scroll out of view // // A - Internal default state: No logo, geo pill and icons on first line // B - Internal 1st scroll (down): Icons locked to geo pill, all elements scroll out of view // C - Internal 1st scroll (up): Icons animate to logo, logo scrolls into view // // Adjust icons to placements: Logo then Geopill when available if (pill.is(':visible')) { var calculatePlacementInView = placementEl.height() - offsetPosition; // Keep icons confined to scrollable area on DW & MW (avoids snap-into-view on MW) if (offsetPosition <= 0) { navIcons.css({ 'position': 'absolute', 'top': 0 }); } // As long as the icons are w/n the scrollable area, animate position of icons if (calculatePlacementInView > 0) { if (offsetPosition > 0 && offsetPosition <= 50) { navIcons.css({ 'position': 'absolute', 'top': offsetPosition, 'bottom': 'auto' }); } // When the icons reach the end of the scrollable area, lock them to the geo pill else if (calculatePlacementInView <= 50) { navIcons.css({ 'position': 'absolute', 'top': 'auto', 'bottom': 0 }); } } } } } // Auto scroll to desired position based on traffic type function positionSecondView() { var hideLogo = $('.second-view', placementEl); var offsetPosition = $(window).scrollTop(); var persistentIcons = $('.persistent-icons', placementEl); var navIcons = $('.global-nav-icons', persistentIcons); if (navIcons.length) { var area = $('.global-nav-mobile-web-rollout'); var logo = $('.global-nav-logo', area); var pill = $('[data-placement-name="global_nav_geopill"]'); logo.css({ 'display': 'block' }); if (hideLogo.length && pill.is(':visible')) { offsetPosition = persistentIcons.height() - logo.height(); window.scroll(0, offsetPosition); navIcons.css({ 'position': 'absolute', 'top': 'auto', 'bottom': 0 }); } } } // Global Nav Persistent Single-line Header function checkForPersistentGlobalNav() { var persistentGlobalNav = $('.global-nav-persistent', placementEl); if (persistentGlobalNav.length) { persistentGlobalNav.toggleClass('fixed', $(window).scrollTop() > placementEl.offset().top); } } // Default scroll position for responsive views positionSecondView(); $(window).scroll( function() { require(['trjs!utils/throttle'], function(throttle) { throttle(checkForPersistentIcons(), 0); throttle(checkForPersistentGlobalNav(), 100); }); }); return { checkForPersistentIcons: checkForPersistentIcons, checkForPersistentGlobalNav: checkForPersistentGlobalNav }; }); });require(['commerce/impression-tracker'],function(impressionTracker){ impressionTracker.onTrackingTreeElement(document.getElementById('octtp_hr_xsell_above_overview')); impressionTracker.onTrackingTreeElement(document.getElementById('octtp_hr_xsell_below_overview')); impressionTracker.onTrackingTreeElement(document.getElementById('octtp_location_nearby_hotels')); impressionTracker.onTrackingTreeElement(document.getElementById('octtp_hr_xsell_below_review')); }); require(['ta/p13n/placements','ta/page','$prp/unsupported_browser_messaging/handlers'], function(placements, impl) { window.ta.plc_unsupported_browser_messaging_0_handlers = placements.load('unsupported_browser_messaging','handlers.js', { 'name': 'unsupported_browser_messaging', 'occurrence': 0, 'id': 'taplc_unsupported_browser_messaging_0', 'location_id': 1474425, 'servletClass': 'com.TripResearch.servlet.accommodation.AccommodationDetail', 'servletName': 'Hotel_Review', 'modules': ["handlers"], 'params': {}, 'data': {}});}); require(['ta/p13n/placements','ta/page','$prp/global_nav/handlers'], function(placements, impl) { window.ta.plc_global_nav_0_handlers = placements.load('global_nav','handlers.js', { 'name': 'global_nav', 'occurrence': 0, 'id': 'taplc_global_nav_0', 'location_id': 1474425, 'servletClass': 'com.TripResearch.servlet.accommodation.AccommodationDetail', 'servletName': 'Hotel_Review', 'modules': ["deferred/lateHandlers","handlers"], 'params': {}, 'data': {}});}); require(['ta/p13n/placements','ta/page','$prp/global_nav_action_cart/handlers'], function(placements, impl) { window.ta.plc_global_nav_action_cart_0_handlers = placements.load('global_nav_action_cart','handlers.js', { 'name': 'global_nav_action_cart', 'occurrence': 0, 'id': 'taplc_global_nav_action_cart_0', 'location_id': 1474425, 'servletClass': 'com.TripResearch.servlet.accommodation.AccommodationDetail', 'servletName': 'Hotel_Review', 'modules': ["handlers"], 'params': {}, 'data': {}});}); require(['ta/p13n/placements','ta/page','$prp/global_nav_action_trips/handlers'], function(placements, impl) { window.ta.plc_global_nav_action_trips_0_handlers = placements.load('global_nav_action_trips','handlers.js', { 'name': 'global_nav_action_trips', 'occurrence': 0, 'id': 'taplc_global_nav_action_trips_0', 'location_id': 1474425, 'servletClass': 'com.TripResearch.servlet.accommodation.AccommodationDetail', 'servletName': 'Hotel_Review', 'modules': ["handlers"], 'params': {}, 'data': {}});}); require(['ta/p13n/placements','ta/page','$prp/global_nav_action_profile/handlers'], function(placements, impl) { window.ta.plc_global_nav_action_profile_0_handlers = placements.load('global_nav_action_profile','handlers.js', { 'name': 'global_nav_action_profile', 'occurrence': 0, 'id': 'taplc_global_nav_action_profile_0', 'location_id': 1474425, 'servletClass': 'com.TripResearch.servlet.accommodation.AccommodationDetail', 'servletName': 'Hotel_Review', 'modules': ["handlers"], 'params': {}, 'data': {}});}); require(['ta/p13n/placements','ta/page','$prp/masthead_search/handlers'], function(placements, impl) { window.ta.plc_masthead_search_0_handlers = placements.load('masthead_search','handlers.js', { 'name': 'masthead_search', 'occurrence': 0, 'id': 'taplc_masthead_search_0', 'location_id': 1474425, 'servletClass': 'com.TripResearch.servlet.accommodation.AccommodationDetail', 'servletName': 'Hotel_Review', 'modules': ["deferred/lateHandlers","handlers"], 'params': {"typeahead_to_store":{"typeahead_new_location_label":"ตำแหน่งที่ตั้งใหม่","typeahead_divClasses":null,"typeahead.aliases.travel_forums":["ฟอรั่ม","ฟอรั่ม","ฟอรั่มจากนักท่องเที่ยว","ที่แสดงความคิดเห็นจากนักท่องเที่ยว"],"typeahead.aliases.travel_guides":["คู่มือ","คู่มือท่องเที่ยวในเมือง"],"typeahead.aliases.flight_reviews":["รีวิวเที่ยวบิน","รีวิวสายการบิน"],"typeahead.aliases.vacation_rentals":["การเช่าบ้านพักตากอากาศ","การเช่าบ้านพักตากอากาศ","Airbnb","บ้านพักตากอากาศให้เช่า","บ้านพักตากอากาศให้เช่า"],"typeahead_throttle_requests":"true","typeahead.aliases.flights":["เที่ยวบิน","เที่ยวบิน","เที่ยวบินไปยัง","เที่ยวบินไปยัง","เที่ยวบินตรง","เที่ยวบินชั้นธุรกิจ","เที่ยวบินขากลับ","เที่ยวบินจากสายการบิน","เที่ยวบิน","เที่ยวบินราคาถูก","เที่ยวบินจาก","เที่ยวบินที่ถูกที่สุด","เฉพาะเที่ยวบิน","เที่ยวบินเที่ยวเดียว","เที่ยวบินตรง","เที่ยวบินในประเทศ","ราคาตั๋วเครื่องบิน","เที่ยวบินราคาถูกไปยัง","เที่ยวบินไปยัง","เที่ยวบินจากสายการบินไปยัง","เที่ยวบินชั้นธุรกิจไปยัง","เที่ยวบินที่ถูกที่สุดไปยัง","เที่ยวบินตรงไปยัง","เที่ยวบินในประเทศไปยัง","เที่ยวบินตรงไปยัง","เที่ยวบินเที่ยวเดียวไปยัง","ราคาตั๋วเครื่องบิน","ราคาตั๋วเครื่องบิน","ราคาตั๋วเครื่องบิน","ราคาตั๋วเครื่องบินไปยัง","ราคาตั๋วเครื่องบินไปยัง","ราคาตั๋วเครื่องบินไปยัง","ราคาตั๋วเครื่องบินไปยัง"],"typeahead_moved_label":"ย้ายแล้ว","typeahead_dual_search_options":{"geoID":285726,"bypassSearch":true,"staticTypeAheadOptions":{"minChars":3,"defaultValue":"ค้นหา","injectNewLocation":true,"typeahead1_5":true,"geoBoostFix":true},"debug":false,"navSearchTypeAheadEnabled":true,"isMobileWeb":false,"geoInfo":{"geoId":285726,"geoName":"Fremantle","parentName":"ออสเตรเลีย","shortParentName":"ออสเตรเลีย","categories":{"GEO":{"url":"/Tourism-g285726-Fremantle_Greater_Perth_Western_Australia-Vacations.html"},"HOTEL":{"url":"/Hotels-g285726-Fremantle_Greater_Perth_Western_Australia-Hotels.html"},"ATTRACTION":{"url":"/Attractions-g285726-Activities-Fremantle_Greater_Perth_Western_Australia.html"},"EATERY":{"url":"/Restaurants-g285726-Fremantle_Greater_Perth_Western_Australia.html"},"FLIGHTS_TO":{"url":"/Flights-g285726-Fremantle_Greater_Perth_Western_Australia-Cheap_Discount_Airfares.html"}}}},"typeahead_closed_label":"ปิด","typeahead.scoped.all_of_trip":"ทั่วโลก","typeahead_attraction_activity_search":"false","typeahead.aliases.hotels":["โรงแรม","โรงแรม","ที่พัก","ที่พัก","ที่พัก","ที่พัก","ที่พัก","รีวิวโรงแรม","โรงแรมและโมเตล","โรงแรมที่ดีที่สุด","สถานที่พักที่ดีที่สุด","ที่พักที่ดีที่สุด","โรงแรมและโมเตลที่ดีที่สุด","ที่พัก","สถานที่พัก","โรงแรมยอดนิยม","สถานที่พักยอดนิยม","ที่พักยอดนิยม","โรงแรมและโมเตลยอดนิยม","โรงแรม 10 อันดับสูงสุด","สถานที่พัก 10 อันดับสูงสุด","ที่พัก 10 อันดับสูงสุด","โรงแรมและโมเตล 10 อันดับสูงสุด"],"typeahead.aliases.things_to_do":["สถานที่ท่องเที่ยว","กิจกรรมน่าสนใจ","สถานที่ท่องเที่ยว","กิจกรรม","กิจกรรม","การเที่ยวชมทิวทัศน์","สถานที่ท่องเที่ยว","สถานที่ท่องเที่ยว","กิจกรรม","สถานที่ท่องเที่ยว","สิ่งที่ควรเยี่ยมชม","ที่ที่ควรไป","ที่ที่ควรเที่ยว","สถานที่ท่องเที่ยวที่ดีที่สุด","กิจกรรมน่าสนใจที่ดีที่สุด","สถานที่ท่องเที่ยวที่ดีที่สุด","การเที่ยวชมที่ดีที่สุด","สถานที่ท่องเที่ยวยอดนิยม","กิจกรรมน่าสนใจยอดนิยม","สถานที่ท่องเที่ยวยอดนิยม","การเที่ยวชมยอดนิยม","สถานที่ท่องเที่ยว 10 อันดับสูงสุด","กิจกรรมน่าสนใจ 10 อันดับสูงสุด","สถานที่ท่องเที่ยว 10 อันดับสูงสุด","การเที่ยวชม 10 อันดับสูงสุด"],"typeahead.aliases.restaurants":["อาหาร","ที่กิน","ภัตตาคาร","บริการอาหาร","ร้านอาหาร","ร้านอาหาร","สถานที่กิน","ร้านอาหาร","ที่กิน","สิ่งที่ควรกิน","ร้านอาหารที่ดีที่สุด","สถานที่กินที่ดีที่สุด","อาหารที่ดีที่สุด","ห้องอาหารที่ดีที่สุด","ร้านอาหารยอดนิยม","สถานที่กินยอดนิยม","อาหารยอดนิยม","ห้องอาหารยอดนิยม","ร้านอาหาร 10 อันดับสูงสุด","สถานที่กิน 10 อันดับสูงสุด","อาหาร 10 อันดับสูงสุด","ห้องอาหาร 10 อันดับสูงสุด"],"typeahead.searchMore.v2":"ค้นหาคำว่า \"%\"","typeahead.searchSessionId":"5226B54CD2BCE97BC2CCF49E7C07D43A1511044895753ssid"}}, 'data': {}});}); require(['ta/p13n/placements','ta/page','$prp/global_nav_links/handlers'], function(placements, impl) { window.ta.plc_global_nav_links_0_handlers = placements.load('global_nav_links','handlers.js', { 'name': 'global_nav_links', 'occurrence': 0, 'id': 'taplc_global_nav_links_0', 'location_id': 1474425, 'servletClass': 'com.TripResearch.servlet.accommodation.AccommodationDetail', 'servletName': 'Hotel_Review', 'modules': ["handlers"], 'params': {}, 'data': {}});}); require(['ta/p13n/placements','ta/page','$prp/global_nav_geopill/handlers'], function(placements, impl) { window.ta.plc_global_nav_geopill_0_handlers = placements.load('global_nav_geopill','handlers.js', { 'name': 'global_nav_geopill', 'occurrence': 0, 'id': 'taplc_global_nav_geopill_0', 'location_id': 1474425, 'servletClass': 'com.TripResearch.servlet.accommodation.AccommodationDetail', 'servletName': 'Hotel_Review', 'modules': ["deferred/GeoSearch","handlers"], 'params': {"searchSessionId":"5226B54CD2BCE97BC2CCF49E7C07D43A1511044895850ssid"}, 'data': {}});}); require(['ta/p13n/placements','ta/page','$prp/trip_planner_breadcrumbs/handlers'], function(placements, impl) { window.ta.plc_trip_planner_breadcrumbs_0_handlers = placements.load('trip_planner_breadcrumbs','handlers.js', { 'name': 'trip_planner_breadcrumbs', 'occurrence': 0, 'id': 'taplc_trip_planner_breadcrumbs_0', 'location_id': 1474425, 'servletClass': 'com.TripResearch.servlet.accommodation.AccommodationDetail', 'servletName': 'Hotel_Review', 'modules': ["handlers"], 'params': {}, 'data': {}});}); require(['ta/p13n/placements','ta/page','$prp/location_detail_header/handlers'], function(placements, impl) { window.ta.plc_location_detail_header_hotels_0_handlers = placements.load('location_detail_header','handlers.js', { 'name': 'location_detail_header:hotels', 'occurrence': 0, 'id': 'taplc_location_detail_header_hotels_0', 'location_id': 1474425, 'servletClass': 'com.TripResearch.servlet.accommodation.AccommodationDetail', 'servletName': 'Hotel_Review', 'modules': ["handlers"], 'params': {"featAnimPortalUrl":"https://www.tripadvisor.com/blog/animal-welfare-education-portal/","isHotelReview":true,"animTrackingPageProperty":"Attractions","animTrackingPageActionPrefix":"Hotel_ReviewRedesign","animalAttraction":false}, 'data': {}});}); require(['ta/p13n/placements','ta/page','$prp/saves_cta_highlights/handlers'], function(placements, impl) { window.ta.plc_saves_cta_highlights_0_handlers = placements.load('saves_cta_highlights','handlers.js', { 'name': 'saves_cta_highlights', 'occurrence': 0, 'id': 'taplc_saves_cta_highlights_0', 'location_id': 1474425, 'servletClass': 'com.TripResearch.servlet.accommodation.AccommodationDetail', 'servletName': 'Hotel_Review', 'modules': ["handlers"], 'params': {}, 'data': {}});}); require(['ta/p13n/placements','ta/page','$prp/hsx_special_messaging/handlers'], function(placements, impl) { window.ta.plc_hsx_special_messaging_HotelReview_0_handlers = placements.load('hsx_special_messaging','handlers.js', { 'name': 'hsx_special_messaging:HotelReview', 'occurrence': 0, 'id': 'taplc_hsx_special_messaging_HotelReview_0', 'location_id': 1474425, 'servletClass': 'com.TripResearch.servlet.accommodation.AccommodationDetail', 'servletName': 'Hotel_Review', 'modules': ["handlers"], 'params': {}, 'data': {}});}); require(['ta/p13n/placements','ta/page','$prp/hr_atf_north_star_traveler_info_nostalgic/handlers'], function(placements, impl) { window.ta.plc_hr_atf_north_star_traveler_info_nostalgic_0_handlers = placements.load('hr_atf_north_star_traveler_info_nostalgic','handlers.js', { 'name': 'hr_atf_north_star_traveler_info_nostalgic', 'occurrence': 0, 'id': 'taplc_hr_atf_north_star_traveler_info_nostalgic_0', 'location_id': 1474425, 'servletClass': 'com.TripResearch.servlet.accommodation.AccommodationDetail', 'servletName': 'Hotel_Review', 'modules': ["handlers"], 'params': {}, 'data': {}});}); require(['ta/p13n/placements','ta/page','$prp/hr_north_star_v1_meta/handlers'], function(placements, impl) { window.ta.plc_hr_north_star_v1_meta_0_handlers = placements.load('hr_north_star_v1_meta','handlers.js', { 'name': 'hr_north_star_v1_meta', 'occurrence': 0, 'id': 'taplc_hr_north_star_v1_meta_0', 'location_id': 1474425, 'servletClass': 'com.TripResearch.servlet.accommodation.AccommodationDetail', 'servletName': 'Hotel_Review', 'modules': ["handlers"], 'params': {}, 'data': {}});}); require(['ta/p13n/placements','ta/page','$prp/location_persistent_tabs_header/handlers'], function(placements, impl) { window.ta.plc_location_persistent_tabs_header_0_handlers = placements.load('location_persistent_tabs_header','handlers.js', { 'name': 'location_persistent_tabs_header', 'occurrence': 0, 'id': 'taplc_location_persistent_tabs_header_0', 'location_id': 1474425, 'servletClass': 'com.TripResearch.servlet.accommodation.AccommodationDetail', 'servletName': 'Hotel_Review', 'modules': ["handlers"], 'params': {"dealInactiveClass":"book_now","dealInactiveTab":"TABS_ROOMS","eventPrefix":"hr"}, 'data': {}});}); require(['ta/p13n/placements','ta/page','$prp/hr_top_right_cta_first_chevron_hsx/handlers'], function(placements, impl) { window.ta.plc_hr_top_right_cta_first_chevron_hsx_0_handlers = placements.load('hr_top_right_cta_first_chevron_hsx','handlers.js', { 'name': 'hr_top_right_cta_first_chevron_hsx', 'occurrence': 0, 'id': 'taplc_hr_top_right_cta_first_chevron_hsx_0', 'location_id': 1474425, 'servletClass': 'com.TripResearch.servlet.accommodation.AccommodationDetail', 'servletName': 'Hotel_Review', 'modules': ["handlers"], 'params': {}, 'data': {}});}); require(['ta/p13n/placements','ta/page','$prp/hr_btf_similar_hotels_above_overview/handlers'], function(placements, impl) { window.ta.plc_hr_btf_similar_hotels_above_overview_0_handlers = placements.load('hr_btf_similar_hotels_above_overview','handlers.js', { 'name': 'hr_btf_similar_hotels_above_overview', 'occurrence': 0, 'id': 'taplc_hr_btf_similar_hotels_above_overview_0', 'location_id': 1474425, 'servletClass': 'com.TripResearch.servlet.accommodation.AccommodationDetail', 'servletName': 'Hotel_Review', 'modules': ["handlers"], 'params': {"trackingName":"xsell_hr_abovereviews_BV","pivotPriority":"1","crossSellPivotType":"similar_hotels","noCommerce":false,"geoId":285726,"maxRequests":12,"geoPopIndexCount":8}, 'data': {}});}); require(['ta/p13n/placements','ta/page','$prp/hotel_detail_overview_responsive/handlers'], function(placements, impl) { window.ta.plc_hotel_detail_overview_responsive_0_handlers = placements.load('hotel_detail_overview_responsive','handlers.js', { 'name': 'hotel_detail_overview_responsive', 'occurrence': 0, 'id': 'taplc_hotel_detail_overview_responsive_0', 'location_id': 1474425, 'servletClass': 'com.TripResearch.servlet.accommodation.AccommodationDetail', 'servletName': 'Hotel_Review', 'modules': ["handlers"], 'params': {}, 'data': {}});}); require(['ta/p13n/placements','ta/page','$prp/ibex_room_details_lightbox/room_details_lightbox'], function(placements, impl) { window.ta.plc_ibex_room_details_lightbox_0_room_details_lightbox = placements.load('ibex_room_details_lightbox','room_details_lightbox.js', { 'name': 'ibex_room_details_lightbox', 'occurrence': 0, 'id': 'taplc_ibex_room_details_lightbox_0', 'location_id': 1474425, 'servletClass': 'com.TripResearch.servlet.accommodation.AccommodationDetail', 'servletName': 'Hotel_Review', 'modules': ["trcss!deferred/book_now_button","trcss!deferred/book_on_header","trcss!deferred/room_details_lightbox","handlers","room_details_lightbox"], 'params': {}, 'data': {}});}); require(['ta/p13n/placements','ta/page','$prp/ibex_room_details_lightbox/handlers'], function(placements, impl) { window.ta.plc_ibex_room_details_lightbox_0_handlers = placements.load('ibex_room_details_lightbox','handlers.js', { 'name': 'ibex_room_details_lightbox', 'occurrence': 0, 'id': 'taplc_ibex_room_details_lightbox_0', 'location_id': 1474425, 'servletClass': 'com.TripResearch.servlet.accommodation.AccommodationDetail', 'servletName': 'Hotel_Review', 'modules': ["trcss!deferred/book_now_button","trcss!deferred/book_on_header","trcss!deferred/room_details_lightbox","handlers","room_details_lightbox"], 'params': {}, 'data': {}});}); require(['ta/p13n/placements','ta/page','$prp/hr_btf_similar_hotels_below_overview/handlers'], function(placements, impl) { window.ta.plc_hr_btf_similar_hotels_below_overview_0_handlers = placements.load('hr_btf_similar_hotels_below_overview','handlers.js', { 'name': 'hr_btf_similar_hotels_below_overview', 'occurrence': 0, 'id': 'taplc_hr_btf_similar_hotels_below_overview_0', 'location_id': 1474425, 'servletClass': 'com.TripResearch.servlet.accommodation.AccommodationDetail', 'servletName': 'Hotel_Review', 'modules': ["handlers"], 'params': {"trackingName":"xsell_hr_abovereviews_BV","pivotPriority":"2","crossSellPivotType":"similar_hotels","noCommerce":false,"geoId":285726,"maxRequests":12,"geoPopIndexCount":8}, 'data': {}});}); require(['ta/p13n/placements','ta/page','$prp/hr_inline_room_grid_hsx/tooltips'], function(placements, impl) { window.ta.plc_hr_inline_room_grid_hsx_0_tooltips = placements.load('hr_inline_room_grid_hsx','tooltips.js', { 'name': 'hr_inline_room_grid_hsx', 'occurrence': 0, 'id': 'taplc_hr_inline_room_grid_hsx_0', 'location_id': 1474425, 'servletClass': 'com.TripResearch.servlet.accommodation.AccommodationDetail', 'servletName': 'Hotel_Review', 'modules': ["PollingInitiator","RateVerificationController","RateVerificationView","RoomListController","bookingflow","handlers","pollingdatautils","pollingparamsfactory","roomlistconfig","roomlistmodel","tooltips","viewcontroller"], 'params': {}, 'data': {}});}); require(['ta/p13n/placements','ta/page','$prp/hr_inline_room_grid_hsx/RateVerificationView'], function(placements, impl) { window.ta.plc_hr_inline_room_grid_hsx_0_RateVerificationView = placements.load('hr_inline_room_grid_hsx','RateVerificationView.js', { 'name': 'hr_inline_room_grid_hsx', 'occurrence': 0, 'id': 'taplc_hr_inline_room_grid_hsx_0', 'location_id': 1474425, 'servletClass': 'com.TripResearch.servlet.accommodation.AccommodationDetail', 'servletName': 'Hotel_Review', 'modules': ["PollingInitiator","RateVerificationController","RateVerificationView","RoomListController","bookingflow","handlers","pollingdatautils","pollingparamsfactory","roomlistconfig","roomlistmodel","tooltips","viewcontroller"], 'params': {}, 'data': {}});}); require(['ta/p13n/placements','ta/page','$prp/hr_inline_room_grid_hsx/bookingflow'], function(placements, impl) { window.ta.plc_hr_inline_room_grid_hsx_0_bookingflow = placements.load('hr_inline_room_grid_hsx','bookingflow.js', { 'name': 'hr_inline_room_grid_hsx', 'occurrence': 0, 'id': 'taplc_hr_inline_room_grid_hsx_0', 'location_id': 1474425, 'servletClass': 'com.TripResearch.servlet.accommodation.AccommodationDetail', 'servletName': 'Hotel_Review', 'modules': ["PollingInitiator","RateVerificationController","RateVerificationView","RoomListController","bookingflow","handlers","pollingdatautils","pollingparamsfactory","roomlistconfig","roomlistmodel","tooltips","viewcontroller"], 'params': {}, 'data': {}});}); require(['ta/p13n/placements','ta/page','$prp/hr_inline_room_grid_hsx/pollingparamsfactory'], function(placements, impl) { window.ta.plc_hr_inline_room_grid_hsx_0_pollingparamsfactory = placements.load('hr_inline_room_grid_hsx','pollingparamsfactory.js', { 'name': 'hr_inline_room_grid_hsx', 'occurrence': 0, 'id': 'taplc_hr_inline_room_grid_hsx_0', 'location_id': 1474425, 'servletClass': 'com.TripResearch.servlet.accommodation.AccommodationDetail', 'servletName': 'Hotel_Review', 'modules': ["PollingInitiator","RateVerificationController","RateVerificationView","RoomListController","bookingflow","handlers","pollingdatautils","pollingparamsfactory","roomlistconfig","roomlistmodel","tooltips","viewcontroller"], 'params': {}, 'data': {}});}); require(['ta/p13n/placements','ta/page','$prp/hr_inline_room_grid_hsx/pollingdatautils'], function(placements, impl) { window.ta.plc_hr_inline_room_grid_hsx_0_pollingdatautils = placements.load('hr_inline_room_grid_hsx','pollingdatautils.js', { 'name': 'hr_inline_room_grid_hsx', 'occurrence': 0, 'id': 'taplc_hr_inline_room_grid_hsx_0', 'location_id': 1474425, 'servletClass': 'com.TripResearch.servlet.accommodation.AccommodationDetail', 'servletName': 'Hotel_Review', 'modules': ["PollingInitiator","RateVerificationController","RateVerificationView","RoomListController","bookingflow","handlers","pollingdatautils","pollingparamsfactory","roomlistconfig","roomlistmodel","tooltips","viewcontroller"], 'params': {}, 'data': {}});}); require(['ta/p13n/placements','ta/page','$prp/hr_inline_room_grid_hsx/handlers'], function(placements, impl) { window.ta.plc_hr_inline_room_grid_hsx_0_handlers = placements.load('hr_inline_room_grid_hsx','handlers.js', { 'name': 'hr_inline_room_grid_hsx', 'occurrence': 0, 'id': 'taplc_hr_inline_room_grid_hsx_0', 'location_id': 1474425, 'servletClass': 'com.TripResearch.servlet.accommodation.AccommodationDetail', 'servletName': 'Hotel_Review', 'modules': ["PollingInitiator","RateVerificationController","RateVerificationView","RoomListController","bookingflow","handlers","pollingdatautils","pollingparamsfactory","roomlistconfig","roomlistmodel","tooltips","viewcontroller"], 'params': {}, 'data': {}});}); require(['ta/p13n/placements','ta/page','$prp/hr_inline_room_grid_hsx/PollingInitiator'], function(placements, impl) { window.ta.plc_hr_inline_room_grid_hsx_0_PollingInitiator = placements.load('hr_inline_room_grid_hsx','PollingInitiator.js', { 'name': 'hr_inline_room_grid_hsx', 'occurrence': 0, 'id': 'taplc_hr_inline_room_grid_hsx_0', 'location_id': 1474425, 'servletClass': 'com.TripResearch.servlet.accommodation.AccommodationDetail', 'servletName': 'Hotel_Review', 'modules': ["PollingInitiator","RateVerificationController","RateVerificationView","RoomListController","bookingflow","handlers","pollingdatautils","pollingparamsfactory","roomlistconfig","roomlistmodel","tooltips","viewcontroller"], 'params': {}, 'data': {}});}); require(['ta/p13n/placements','ta/page','$prp/hr_inline_room_grid_hsx/RateVerificationController'], function(placements, impl) { window.ta.plc_hr_inline_room_grid_hsx_0_RateVerificationController = placements.load('hr_inline_room_grid_hsx','RateVerificationController.js', { 'name': 'hr_inline_room_grid_hsx', 'occurrence': 0, 'id': 'taplc_hr_inline_room_grid_hsx_0', 'location_id': 1474425, 'servletClass': 'com.TripResearch.servlet.accommodation.AccommodationDetail', 'servletName': 'Hotel_Review', 'modules': ["PollingInitiator","RateVerificationController","RateVerificationView","RoomListController","bookingflow","handlers","pollingdatautils","pollingparamsfactory","roomlistconfig","roomlistmodel","tooltips","viewcontroller"], 'params': {}, 'data': {}});}); require(['ta/p13n/placements','ta/page','$prp/hr_inline_room_grid_hsx/RoomListController'], function(placements, impl) { window.ta.plc_hr_inline_room_grid_hsx_0_RoomListController = placements.load('hr_inline_room_grid_hsx','RoomListController.js', { 'name': 'hr_inline_room_grid_hsx', 'occurrence': 0, 'id': 'taplc_hr_inline_room_grid_hsx_0', 'location_id': 1474425, 'servletClass': 'com.TripResearch.servlet.accommodation.AccommodationDetail', 'servletName': 'Hotel_Review', 'modules': ["PollingInitiator","RateVerificationController","RateVerificationView","RoomListController","bookingflow","handlers","pollingdatautils","pollingparamsfactory","roomlistconfig","roomlistmodel","tooltips","viewcontroller"], 'params': {}, 'data': {}});}); require(['ta/p13n/placements','ta/page','$prp/hr_inline_room_grid_hsx/roomlistmodel'], function(placements, impl) { window.ta.plc_hr_inline_room_grid_hsx_0_roomlistmodel = placements.load('hr_inline_room_grid_hsx','roomlistmodel.js', { 'name': 'hr_inline_room_grid_hsx', 'occurrence': 0, 'id': 'taplc_hr_inline_room_grid_hsx_0', 'location_id': 1474425, 'servletClass': 'com.TripResearch.servlet.accommodation.AccommodationDetail', 'servletName': 'Hotel_Review', 'modules': ["PollingInitiator","RateVerificationController","RateVerificationView","RoomListController","bookingflow","handlers","pollingdatautils","pollingparamsfactory","roomlistconfig","roomlistmodel","tooltips","viewcontroller"], 'params': {}, 'data': {}});}); require(['ta/p13n/placements','ta/page','$prp/hr_inline_room_grid_hsx/viewcontroller'], function(placements, impl) { window.ta.plc_hr_inline_room_grid_hsx_0_viewcontroller = placements.load('hr_inline_room_grid_hsx','viewcontroller.js', { 'name': 'hr_inline_room_grid_hsx', 'occurrence': 0, 'id': 'taplc_hr_inline_room_grid_hsx_0', 'location_id': 1474425, 'servletClass': 'com.TripResearch.servlet.accommodation.AccommodationDetail', 'servletName': 'Hotel_Review', 'modules': ["PollingInitiator","RateVerificationController","RateVerificationView","RoomListController","bookingflow","handlers","pollingdatautils","pollingparamsfactory","roomlistconfig","roomlistmodel","tooltips","viewcontroller"], 'params': {}, 'data': {}});}); require(['ta/p13n/placements','ta/page','$prp/hr_inline_room_grid_hsx/roomlistconfig'], function(placements, impl) { window.ta.plc_hr_inline_room_grid_hsx_0_roomlistconfig = placements.load('hr_inline_room_grid_hsx','roomlistconfig.js', { 'name': 'hr_inline_room_grid_hsx', 'occurrence': 0, 'id': 'taplc_hr_inline_room_grid_hsx_0', 'location_id': 1474425, 'servletClass': 'com.TripResearch.servlet.accommodation.AccommodationDetail', 'servletName': 'Hotel_Review', 'modules': ["PollingInitiator","RateVerificationController","RateVerificationView","RoomListController","bookingflow","handlers","pollingdatautils","pollingparamsfactory","roomlistconfig","roomlistmodel","tooltips","viewcontroller"], 'params': {}, 'data': {}});}); require(['ta/p13n/placements','ta/page','$prp/location_detail_two_column/handlers'], function(placements, impl) { window.ta.plc_location_detail_two_column_top_hotels_0_handlers = placements.load('location_detail_two_column','handlers.js', { 'name': 'location_detail_two_column:top_hotels', 'occurrence': 0, 'id': 'taplc_location_detail_two_column_top_hotels_0', 'location_id': 1474425, 'servletClass': 'com.TripResearch.servlet.accommodation.AccommodationDetail', 'servletName': 'Hotel_Review', 'modules': ["handlers"], 'params': {}, 'data': {}});}); require(['ta/p13n/placements','ta/page','$prp/location_reviews_container/handlers'], function(placements, impl) { window.ta.plc_location_reviews_container_hotels_0_handlers = placements.load('location_reviews_container','handlers.js', { 'name': 'location_reviews_container:hotels', 'occurrence': 0, 'id': 'taplc_location_reviews_container_hotels_0', 'location_id': 1474425, 'servletClass': 'com.TripResearch.servlet.accommodation.AccommodationDetail', 'servletName': 'Hotel_Review', 'modules': ["handlers"], 'params': {}, 'data': {}});}); require(['ta/p13n/placements','ta/page','$prp/location_review_filter_controls/handlers'], function(placements, impl) { window.ta.plc_location_review_filter_controls_hotels_0_handlers = placements.load('location_review_filter_controls','handlers.js', { 'name': 'location_review_filter_controls:hotels', 'occurrence': 0, 'id': 'taplc_location_review_filter_controls_hotels_0', 'location_id': 1474425, 'servletClass': 'com.TripResearch.servlet.accommodation.AccommodationDetail', 'servletName': 'Hotel_Review', 'modules': ["handlers"], 'params': {}, 'data': {}});}); require(['ta/p13n/placements','ta/page','$prp/location_review_keyword_search/handlers'], function(placements, impl) { window.ta.plc_location_review_keyword_search_hotels_0_handlers = placements.load('location_review_keyword_search','handlers.js', { 'name': 'location_review_keyword_search:hotels', 'occurrence': 0, 'id': 'taplc_location_review_keyword_search_hotels_0', 'location_id': 1474425, 'servletClass': 'com.TripResearch.servlet.accommodation.AccommodationDetail', 'servletName': 'Hotel_Review', 'modules': ["handlers"], 'params': {}, 'data': {}});}); require(['ta/p13n/placements','ta/page','$prp/location_reviews_list/handlers'], function(placements, impl) { window.ta.plc_location_reviews_list_hotels_0_handlers = placements.load('location_reviews_list','handlers.js', { 'name': 'location_reviews_list:hotels', 'occurrence': 0, 'id': 'taplc_location_reviews_list_hotels_0', 'location_id': 1474425, 'servletClass': 'com.TripResearch.servlet.accommodation.AccommodationDetail', 'servletName': 'Hotel_Review', 'modules': ["handlers"], 'params': {}, 'data': {}});}); require(['ta/p13n/placements','ta/page','$prp/prodp13n_hr_sur_reviews_no_results/handlers'], function(placements, impl) { window.ta.plc_prodp13n_hr_sur_reviews_no_results_1_handlers = placements.load('prodp13n_hr_sur_reviews_no_results','handlers.js', { 'name': 'prodp13n_hr_sur_reviews_no_results', 'occurrence': 1, 'id': 'taplc_prodp13n_hr_sur_reviews_no_results_1', 'location_id': 1474425, 'servletName': 'Hotel_Review','servletClass': 'com.TripResearch.servlet.accommodation.AccommodationDetail', 'modules': ["handlers"], 'params': {}, 'data': {}});}); require(['ta/p13n/placements','ta/page','$prp/hr_btf_similar_hotels/handlers'], function(placements, impl) { window.ta.plc_hr_btf_similar_hotels_0_handlers = placements.load('hr_btf_similar_hotels','handlers.js', { 'name': 'hr_btf_similar_hotels', 'occurrence': 0, 'id': 'taplc_hr_btf_similar_hotels_0', 'location_id': 1474425, 'servletClass': 'com.TripResearch.servlet.accommodation.AccommodationDetail', 'servletName': 'Hotel_Review', 'modules': ["deferred/lateHandlers","handlers"], 'params': {"trackingName":"xsell_hr_belowreviews_BV","noCommerce":false,"maxRequests":12,"geoPopIndexCount":8,"geoId":285726}, 'data': {}});}); require(['ta/p13n/placements','ta/page','$prp/hr_btf_north_star_about/handlers'], function(placements, impl) { window.ta.plc_hr_btf_north_star_about_0_handlers = placements.load('hr_btf_north_star_about','handlers.js', { 'name': 'hr_btf_north_star_about', 'occurrence': 0, 'id': 'taplc_hr_btf_north_star_about_0', 'location_id': 1474425, 'servletClass': 'com.TripResearch.servlet.accommodation.AccommodationDetail', 'servletName': 'Hotel_Review', 'modules': ["handlers"], 'params': {}, 'data': {}});}); require(['ta/p13n/placements','ta/page','$prp/hr_btf_north_star_photos/handlers'], function(placements, impl) { window.ta.plc_hr_btf_north_star_photos_0_handlers = placements.load('hr_btf_north_star_photos','handlers.js', { 'name': 'hr_btf_north_star_photos', 'occurrence': 0, 'id': 'taplc_hr_btf_north_star_photos_0', 'location_id': 1474425, 'servletClass': 'com.TripResearch.servlet.accommodation.AccommodationDetail', 'servletName': 'Hotel_Review', 'modules': ["handlers"], 'params': {}, 'data': {}});}); require(['ta/p13n/placements','ta/page','$prp/location_detail_two_column/handlers'], function(placements, impl) { window.ta.plc_location_detail_two_column_bottom_hotels_0_handlers = placements.load('location_detail_two_column','handlers.js', { 'name': 'location_detail_two_column:bottom_hotels', 'occurrence': 0, 'id': 'taplc_location_detail_two_column_bottom_hotels_0', 'location_id': 1474425, 'servletClass': 'com.TripResearch.servlet.accommodation.AccommodationDetail', 'servletName': 'Hotel_Review', 'modules': ["handlers"], 'params': {}, 'data': {}});}); require(['ta/p13n/placements','ta/page','$prp/location_nearby/handlers'], function(placements, impl) { window.ta.plc_location_nearby_hotels_0_handlers = placements.load('location_nearby','handlers.js', { 'name': 'location_nearby:hotels', 'occurrence': 0, 'id': 'taplc_location_nearby_hotels_0', 'location_id': 1474425, 'servletClass': 'com.TripResearch.servlet.accommodation.AccommodationDetail', 'servletName': 'Hotel_Review', 'modules': ["trcss!deferred/placement","handlers"], 'params': {"trackingName":"location_nearby:hotels_BV","noCommerce":false,"geoId":285726,"maxRequests":12}, 'data': {}});}); require(['ta/p13n/placements','ta/page','$prp/location_qa/handlers'], function(placements, impl) { window.ta.plc_location_qa_hotels_0_handlers = placements.load('location_qa','handlers.js', { 'name': 'location_qa:hotels', 'occurrence': 0, 'id': 'taplc_location_qa_hotels_0', 'location_id': 1474425, 'servletClass': 'com.TripResearch.servlet.accommodation.AccommodationDetail', 'servletName': 'Hotel_Review', 'modules': ["handlers"], 'params': {}, 'data': {}});}); require(['ta/p13n/placements','ta/page','$prp/hr_btf_north_star_room_tips/handlers'], function(placements, impl) { window.ta.plc_hr_btf_north_star_room_tips_0_handlers = placements.load('hr_btf_north_star_room_tips','handlers.js', { 'name': 'hr_btf_north_star_room_tips', 'occurrence': 0, 'id': 'taplc_hr_btf_north_star_room_tips_0', 'location_id': 1474425, 'servletClass': 'com.TripResearch.servlet.accommodation.AccommodationDetail', 'servletName': 'Hotel_Review', 'modules': ["handlers"], 'params': {}, 'data': {}});}); require(['ta/p13n/placements','ta/page','$prp/hr_btf_north_star_claim_listing/handlers'], function(placements, impl) { window.ta.plc_hr_btf_north_star_claim_listing_0_handlers = placements.load('hr_btf_north_star_claim_listing','handlers.js', { 'name': 'hr_btf_north_star_claim_listing', 'occurrence': 0, 'id': 'taplc_hr_btf_north_star_claim_listing_0', 'location_id': 1474425, 'servletClass': 'com.TripResearch.servlet.accommodation.AccommodationDetail', 'servletName': 'Hotel_Review', 'modules': ["handlers"], 'params': {}, 'data': {}});}); require(['ta/p13n/placements','ta/page','$prp/global_footer/handlers'], function(placements, impl) { window.ta.plc_global_footer_0_handlers = placements.load('global_footer','handlers.js', { 'name': 'global_footer', 'occurrence': 0, 'id': 'taplc_global_footer_0', 'location_id': 1474425, 'servletClass': 'com.TripResearch.servlet.accommodation.AccommodationDetail', 'servletName': 'Hotel_Review', 'modules': ["handlers"], 'params': {}, 'data': {}});}); require(['ta/p13n/placements','ta/page','$prp/qualtrics_survey/handlers'], function(placements, impl) { window.ta.plc_qualtrics_survey_0_handlers = placements.load('qualtrics_survey','handlers.js', { 'name': 'qualtrics_survey', 'occurrence': 0, 'id': 'taplc_qualtrics_survey_0', 'location_id': 1474425, 'servletClass': 'com.TripResearch.servlet.accommodation.AccommodationDetail', 'servletName': 'Hotel_Review', 'modules': ["handlers"], 'params': {}, 'data': {}});}); require(['ta/p13n/placements','ta/page','$prp/browser_mode_tracking/handlers'], function(placements, impl) { window.ta.plc_browser_mode_tracking_0_handlers = placements.load('browser_mode_tracking','handlers.js', { 'name': 'browser_mode_tracking', 'occurrence': 0, 'id': 'taplc_browser_mode_tracking_0', 'location_id': 1474425, 'servletClass': 'com.TripResearch.servlet.accommodation.AccommodationDetail', 'servletName': 'Hotel_Review', 'modules': ["handlers"], 'params': {}, 'data': {}});}); require(['ta/p13n/placements','ta/page','$prp/safari_private_tracking/handlers'], function(placements, impl) { window.ta.plc_safari_private_tracking_0_handlers = placements.load('safari_private_tracking','handlers.js', { 'name': 'safari_private_tracking', 'occurrence': 0, 'id': 'taplc_safari_private_tracking_0', 'location_id': 1474425, 'servletClass': 'com.TripResearch.servlet.accommodation.AccommodationDetail', 'servletName': 'Hotel_Review', 'modules': ["handlers"], 'params': {}, 'data': {}});}); require(['ta/p13n/placements','ta/page','$prp/h_hr_refresh_rates_prompt/handlers'], function(placements, impl) { window.ta.plc_h_hr_refresh_rates_prompt_0_handlers = placements.load('h_hr_refresh_rates_prompt','handlers.js', { 'name': 'h_hr_refresh_rates_prompt', 'occurrence': 0, 'id': 'taplc_h_hr_refresh_rates_prompt_0', 'location_id': 1474425, 'servletClass': 'com.TripResearch.servlet.accommodation.AccommodationDetail', 'servletName': 'Hotel_Review', 'modules': ["deferred/popper","trcss!deferred/prompt","handlers"], 'params': {"scroll_to_top":"true"}, 'data': {}});}); require(['ta/p13n/placements','ta/page','$prp/h_hr_refresh_rates_prompt/handlers'], function(placements, impl) { window.ta.plc_h_hr_refresh_rates_prompt_tracking_0_handlers = placements.load('h_hr_refresh_rates_prompt','handlers.js', { 'name': 'h_hr_refresh_rates_prompt:tracking', 'occurrence': 0, 'id': 'taplc_h_hr_refresh_rates_prompt_tracking_0', 'location_id': 1474425, 'servletClass': 'com.TripResearch.servlet.accommodation.AccommodationDetail', 'servletName': 'Hotel_Review', 'modules': ["deferred/popper","trcss!deferred/prompt","handlers"], 'params': {"tracking_only":"true"}, 'data': {}});}); require(['ta/p13n/placements','ta/page','$prp/enable_cpm_content/handlers'], function(placements, impl) { window.ta.plc_enable_cpm_content_0_handlers = placements.load('enable_cpm_content','handlers.js', { 'name': 'enable_cpm_content', 'occurrence': 0, 'id': 'taplc_enable_cpm_content_0', 'location_id': 1474425, 'servletClass': 'com.TripResearch.servlet.accommodation.AccommodationDetail', 'servletName': 'Hotel_Review', 'modules': ["handlers"], 'params': {}, 'data': {}});}); require(['ta/p13n/placements','ta/page','$prp/maps_meta_block/handlers'], function(placements, impl) { window.ta.plc_maps_meta_block_0_handlers = placements.load('maps_meta_block','handlers.js', { 'name': 'maps_meta_block', 'occurrence': 0, 'id': 'taplc_maps_meta_block_0', 'location_id': 1474425, 'servletClass': 'com.TripResearch.servlet.accommodation.AccommodationDetail', 'servletName': 'Hotel_Review', 'modules': ["handlers"], 'params': {}, 'data': {}});}); require(['ta/prwidgets', 'ta/page'], function(prwidgets) { prwidgets.initWidgets(document); }); /* ]]> */