PageSourceSearch

https://www.thehotelumd.com/content/cache/autoptimize/autoptimize_…83bdefcfccaa19f7b7d0d52cd6fc5.php?ver=6.9.5

js thehotelumd.com collected 2026-10-03 21:56:19 UTC 21,582 bytes, 50 lines download raw bytes

1let pickers=[];$(function(){$('.booking-widget').each(function(){const bw=new BookingWidget($(this));});header();});const BookingWidget=function(this$obj){if(!this$obj){return false;}
2this.$obj=this$obj;this.$all_booking_widgets=$('.booking-widget');this.init();}
3BookingWidget.prototype.init=function init(){const _this=this;this.$window=$(window);this.$stay_button=this.$obj.find('.js-stay-button');this.$stay_container=this.$obj.find('.js-stay-container');this.$stay_list=this.$obj.find('.js-stay-input');this.$easepick_button_arrival=this.$obj.find('.js-easepick-button-arrival');this.$easepick_button_departure=this.$obj.find('.js-easepick-button-departure');this.$easepick_container=this.$obj.find('.easepick-container');this.$guests_button=this.$obj.find('.js-guests-button');this.$guests_container=this.$obj.find('.js-guests-container');this.$numberpicker=this.$obj.find('.js-booking-numberpicker');this.$add_room=this.$obj.find('.js-add-room');this.$promo_input=this.$obj.find('.js-promo-input');this.$submit_button=this.$obj.find('.js-submit-booking');this.$submission_error=this.$obj.find('.submission-error');this.$close_button=this.$obj.find('.js-booking-close');this.$bg=$('.booking-widget__bg');this.$body=$('body');this.create_easepick();this.datepicker_containers();this.stay_containers();this.stay_selection();this.guest_containers();this.number_pickers();this.add_room();this.$close_button.on('click',function(){_this.$obj.removeClass('active');_this.$bg.removeClass('active');_this.$body.removeClass('bw-active');});};BookingWidget.prototype.create_easepick=function create_easepick(){let _this=this;let startDate=new Date();let endDate=new Date(startDate);endDate.setDate(endDate.getDate()+1);const pickerTriggers=this.$obj.find('.easepick-container__bind');pickerTriggers.each(function(i){let chevron="<svg class=\"v-icon__svg v-icon__svg--arrow-splide\" role=\"presentation\">"+"<use xlink:href=\"/content/themes/base/assets/img/icons/arrow-splide.svg#arrow-splide\"></use>"+"</svg>";const easePicker=new easepick.create({element:pickerTriggers[i],css:['/content/themes/base/assets/css/easepick.css','/content/themes/base/assets/css/common.css','/content/themes/base/assets/css/booking-widget.css'],plugins:['KbdPlugin','RangePlugin'],locale:{"previousMonth":'Previous'+chevron,"nextMonth":'Next'+chevron,},RangePlugin:{startDate:startDate,endDate:endDate,tooltipNumber(num){return num-1;},locale:{one:'night',other:'nights',},},firstDay:0,calendars:1,grid:1,inline:true,autoApply:true,setup(picker){let wrapper=picker.ui.container;wrapper.classList.add('easepicker');wrapper.classList.add('easepicker--sticky');picker.on('select',(event)=>{let{start,end}=event.detail;let error=_this.$obj.find('.submission-error');error.text('');_this.$easepick_button_arrival.removeClass('active');_this.$easepick_button_departure.removeClass('active');_this.$easepick_container.removeClass('show');_this.update_date_string(start,end);picker.setDateRange(start,end);picker.gotoDate(start);});picker.on('view',(evt)=>{let days=$('.daynames-row>div',wrapper);days.each(function(){switch($(this).text()){case'Mon':{$(this).text('M');break;}
4case'Tue':{$(this).text('T');break;}
5case'Wed':{$(this).text('W');break;}
6case'Thu':{$(this).text('T');break;}
7case'Fri':{$(this).text('F');break;}
8case'Sat':{$(this).text('S');break;}
9case'Sun':{$(this).text('S');break;}
10default:break;}});let $prevButton=$('.previous-button',wrapper);let $nextButton=$('.next-button',wrapper);if($prevButton.length&&!$prevButton.attr('aria-label')){$prevButton.attr('aria-label','Previous month');}
11if($nextButton.length&&!$nextButton.attr('aria-label')){$nextButton.attr('aria-label','Next month');}
12$('.next-button.unit',wrapper).attr('tabindex','0').removeAttr('aria-hidden');$('.previous-button.unit',wrapper).attr('tabindex','0').removeAttr('aria-hidden');$('[tabindex="1"], [tabindex="2"], [tabindex="3"]',wrapper).attr('tabindex','0').removeAttr('aria-hidden');let monthNames=['January','February','March','April','May','June','July','August','September','October','November','December'];$('.day.unit',wrapper).each(function(){let $day=$(this);if(!$day.attr('aria-label')){let timestamp=$day.data('time');if(timestamp){let date=new Date(timestamp);let fullDate=monthNames[date.getMonth()]+' '+date.getDate()+', '+date.getFullYear();$day.attr('role','button');$day.attr('aria-label',fullDate);}}});});}});_this.update_date_string(easePicker.getStartDate(),easePicker.getEndDate());pickers.push(easePicker);});}
13BookingWidget.prototype.update_date_string=function update_date_string(start,end){let days=['Sun','Mon','Tue','Wed','Thu','Fri','Sat'];let daysFull=['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'];let weekdayStart=start.getDay();let weekdayEnd=end.getDay();let arrival_value=start.format('MM/DD/YYYY');let departure_value=end.format('MM/DD/YYYY');let arrival_string=days[weekdayStart]+start.format(', MMM DD');let departure_string=days[weekdayEnd]+end.format(', MMM DD');let header_arrival_day=daysFull[weekdayStart];let header_arrival_date=start.format('DD');let header_arrival_month=start.format('MMM, YYYY');let header_departure_day=daysFull[weekdayEnd];let header_departure_date=end.format('DD');let header_departure_month=end.format('MMM, YYYY');this.sync_date_values(arrival_value,departure_value,arrival_string,departure_string,header_arrival_day,header_arrival_date,header_arrival_month,header_departure_day,header_departure_date,header_departure_month);}
14BookingWidget.prototype.sync_date_values=function sync_date_values(arrival_value,departure_value,arrival_string,departure_string,header_arrival_day,header_arrival_date,header_arrival_month,header_departure_day,header_departure_date,header_departure_month){const _this=this;let $input_checkin=_this.$all_booking_widgets.find('input[name="datein"]');let $input_checkout=_this.$all_booking_widgets.find('input[name="dateout"]');
14let $arrival_text=_this.$all_booking_widgets.find('.js-arrival-date');let $departure_text=_this.$all_booking_widgets.find('.js-departure-date');let $header_arrival_day=_this.$all_booking_widgets.find('.js-arrival-date-header--day');let $header_arrival_date=_this.$all_booking_widgets.find('.js-arrival-date-header--date');let $header_arrival_month=_this.$all_booking_widgets.find('.js-arrival-date-header--month');let $header_departure_day=_this.$all_booking_widgets.find('.js-departure-date-header--day');let $header_departure_date=_this.$all_booking_widgets.find('.js-departure-date-header--date');let $header_departure_month=_this.$all_booking_widgets.find('.js-departure-date-header--month');$input_checkin.val(arrival_value);$input_checkout.val(departure_value);$arrival_text.text(arrival_string);$departure_text.text(departure_string);$header_arrival_day.text(header_arrival_day);$header_arrival_date.text(header_arrival_date);$header_arrival_month.text(header_arrival_month);$header_departure_day.text(header_departure_day);$header_departure_date.text(header_departure_date);$header_departure_month.text(header_departure_month);}
15BookingWidget.prototype.datepicker_containers=function datepicker_containers(){const _this=this;const closeDates=function(){_this.$easepick_button_arrival.removeClass('active');_this.$easepick_button_departure.removeClass('active');_this.$easepick_container.removeClass('show');$('.next-button.unit').attr('tabindex','-1').attr('aria-hidden','true');$('.previous-button.unit').attr('tabindex','-1').attr('aria-hidden','true');}
16const openDates=function(isKeyboard){_this.$easepick_button_arrival.addClass('active');_this.$easepick_button_departure.addClass('active');_this.$easepick_container.addClass('show');setTimeout(function(){$('.next-button.unit').attr('tabindex','0').removeAttr('aria-hidden');$('.previous-button.unit').attr('tabindex','0').removeAttr('aria-hidden');$('.day.unit').attr('tabindex','0');if(isKeyboard){$('.next-button.unit').first().focus();}},100);}
17const setupCalendarFocusOrder=function(){$(document).on('keydown','.next-button.unit',function(e){if(e.key==='Tab'&&!e.shiftKey&&_this.$easepick_container.hasClass('show')){e.preventDefault();$('.previous-button.unit').first().focus();}});$(document).on('keydown','.previous-button.unit',function(e){if(e.key==='Tab'&&e.shiftKey&&_this.$easepick_container.hasClass('show')){e.preventDefault();$('.next-button.unit').first().focus();}
18if(e.key==='Tab'&&!e.shiftKey&&_this.$easepick_container.hasClass('show')){e.preventDefault();$('.day.unit:not(.disabled)').first().focus();}});$(document).on('keydown','.day.unit',function(e){if(e.key==='Tab'&&e.shiftKey&&_this.$easepick_container.hasClass('show')){let $days=$('.day.unit:not(.disabled)');let $firstDay=$days.first();if($(this).is($firstDay)){e.preventDefault();$('.previous-button.unit').first().focus();}}});}
19setupCalendarFocusOrder();let isKeyboardInteraction=false;this.$easepick_button_arrival.on('keydown',function(e){if(e.key==='Enter'||e.key===' '){isKeyboardInteraction=true;}});this.$easepick_button_departure.on('keydown',function(e){if(e.key==='Enter'||e.key===' '){isKeyboardInteraction=true;}});this.$easepick_button_arrival.on('click',function(){if(_this.$easepick_container.hasClass('show')){closeDates();}else{openDates(isKeyboardInteraction);}
20isKeyboardInteraction=false;});this.$easepick_button_departure.on('click',function(){if(_this.$easepick_container.hasClass('show')){closeDates();}else{openDates(isKeyboardInteraction);}
21isKeyboardInteraction=false;});this.$stay_button.on('click',closeDates);this.$stay_button.on('focus',closeDates);this.$guests_button.on('click',closeDates);this.$guests_button.on('focus',closeDates);this.$close_button.on('click',closeDates);this.$promo_input.on('focus',closeDates);this.$submit_button.on('click',closeDates);}
22BookingWidget.prototype.stay_containers=function stay_containers(){const _this=this;const closeStay=function(){_this.$stay_button.removeClass('active');_this.$stay_container.removeClass('show');}
23const openStay=function(){_this.$stay_button.addClass('active');_this.$stay_container.addClass('show');}
24this.$stay_button.on('click',function(){if(_this.$stay_container.hasClass('show')){closeStay();}else{openStay();}});this.$easepick_button_arrival.on('click',closeStay);this.$easepick_button_arrival.on('focus',closeStay);this.$easepick_button_departure.on('click',closeStay);this.$easepick_button_departure.on('focus',closeStay);this.$guests_button.on('click',closeStay);this.$guests_button.on('focus',closeStay);this.$close_button.on('click',closeStay);this.$promo_input.on('focus',closeStay);this.$submit_button.on('click',closeStay);}
25BookingWidget.prototype.stay_selection=function stay_selection(){const _this=this;this.$stay_list.children().each(function(){let $item=$(this);$item.on('click',function(){let $type=$item.data('type');let $value=$item.data('value');let $text=$item.text();let $stay_text=_this.$all_booking_widgets.find('.js-stay-text');let $stay_input=_this.$all_booking_widgets.find('input[name="roomcategory"]');let $room_input=_this.$all_booking_widgets.find('input[name="room"]');$stay_text.text($text);
25$room_check_box.attr('checked',false);if($type==='room'){$stay_input.val('');$room_input.val($value);$room_check_box.attr('disabled',true);$room_check_box.closest('.booking-widget__select--accessible').addClass('no-accessible');}else{$stay_input.val($value);$room_input.val('');$room_check_box.removeAttr('disabled');$room_check_box.closest('.booking-widget__select--accessible').removeClass('no-accessible');}
26_this.$stay_button.removeClass('active');_this.$stay_container.removeClass('show');});});}
27BookingWidget.prototype.guest_containers=function guest_containers(){const _this=this;const closeGuests=function(){_this.$guests_button.removeClass('active');_this.$guests_container.removeClass('show');}
28const openGuests=function(){_this.$guests_button.addClass('active');_this.$guests_container.addClass('show');}
29this.$guests_button.on('click',function(){if(_this.$guests_container.hasClass('show')){closeGuests();}else{openGuests();}});this.$stay_button.on('click',closeGuests);this.$stay_button.on('focus',closeGuests);this.$easepick_button_arrival.on('click',closeGuests);this.$easepick_button_arrival.on('focus',closeGuests);this.$easepick_button_departure.on('click',closeGuests);this.$easepick_button_departure.on('focus',closeGuests);this.$close_button.on('click',closeGuests);this.$promo_input.on('focus',closeGuests);this.$submit_button.on('click',closeGuests);}
30BookingWidget.prototype.number_pickers=function number_pickers(){const _this=this;this.$numberpicker.each(function(){let $numberpicker=$(this);let $picker_value=$numberpicker.find('.js-numberpicker-value');let $sub=$numberpicker.find('.js-numberpicker-sub');$sub.off('click');let $add=$numberpicker.find('.js-numberpicker-add');$add.off('click');$add.on('click',function(){let value=parseInt($picker_value.text());$picker_value.text(value+1);_this.sync_guests();});$sub.on('click',function(){let value=parseInt($picker_value.text());if(value>0){$picker_value.text(value-1);}
31_this.sync_guests();});});}
32BookingWidget.prototype.sync_guests=function sync_guests(){const _this=this;_this.$adults_value=[];_this.$children_value=[];let guests=0;let adults=0;let children=0;_this.$guest_string='Guests & Rooms';_this.$rooms=_this.$obj.find('.booking-widget__guests-wrapper');_this.$rooms.each(function($room_number){_this.$adults_value[$room_number]=$(this).find('.booking-widget__numberpicker-value-adults').text();_this.$children_value[$room_number]=$(this).find('.booking-widget__numberpicker-value-child').text();guests=parseInt(guests)+parseInt(_this.$adults_value[$room_number])+parseInt(_this.$children_value[$room_number]);adults=parseInt(adults)+parseInt(_this.$adults_value[$room_number]);children=parseInt(children)+parseInt(_this.$children_value[$room_number]);});let guest_string=guests+((guests>1)?' Guests':' Guest')+' & '+_this.$rooms.length+((_this.$rooms.length>1)?' Rooms':' Room');let $input_adults=_this.$all_booking_widgets.find('input[name="adults"]');let $input_children=_this.$all_booking_widgets.find('input[name="child"]');let $input_rooms=_this.$all_booking_widgets.find('input[name="rooms"]');let $guests_text=_this.$all_booking_widgets.find('.js-guests-text');let $guests_text_room=_this.$all_booking_widgets.find('.js-guests-text--room');let $guests_text_adult=_this.$all_booking_widgets.find('.js-guests-text--adult');let $guests_text_children=_this.$all_booking_widgets.find('.js-guests-text--children');let $guests_text_room_text=_this.$all_booking_widgets.find('.js-guests-text--room-text');let $guests_text_adult_text=_this.$all_booking_widgets.find('.js-guests-text--adult-text');let $guests_text_children_text=_this.$all_booking_widgets.find('.js-guests-text--children-text');$input_adults.val(_this.$adults_value.join(','));$input_children.val(_this.$children_value.join(','));$input_rooms.val(_this.$rooms.length);$guests_text.text(guest_string);$guests_text_room.text(_this.$rooms.length);$guests_text_room_text.text(((_this.$rooms.length>1)?'Rooms':'Room'));$guests_text_adult.text(adults);$guests_text_adult_text.text(((adults>1)?'Adults':'Adult'));$guests_text_children.text(children);$guests_text_children_text.text(((children>1||children==0)?'Children':'Child'));let roomLabel=_this.$rooms.length+((_this.$rooms.length>1)?' Rooms':' Room');let adultLabel=adults+((adults>1)?' Adults':' Adult');let childLabel=children+((children>1||children==0)?' Children':' Child');$guests_text_room.attr('aria-label',roomLabel);$guests_text_adult.attr('aria-label',adultLabel);$guests_text_children.attr('aria-label',childLabel);_this.$all_booking_widgets.find('.js-guests-text--room-wrap').attr('aria-label',roomLabel+' selected');_this.$all_booking_widgets.find('.js-guests-text--adult-children-wrap').attr('aria-label',adultLabel+' and '+childLabel+' selected');}
33BookingWidget.prototype.add_room=function add_room(){const _this=this;_this.$add_room.each(function(){const $add_room=$(this);$add_room.on('click',function(){let $room_number=$(this).prev().data('room-number')+1;let $room=$(this).prev().clone().attr('data-room-number',$room_number);let $room_suffix=$room_number===2?'nd':$room_number===3?'rd':'th';if($room_number<=9){$room.find('.booking-widget__room-number').text($room_number+$room_suffix+' room');$room.find('.booking-widget__numberpicker-value-adults').text(0);$room.find('.booking-widget__numberpicker-value-child').text(0);$room.insertBefore($(this));_this.$numberpicker=_this.$obj.find('.js-booking-numberpicker');_this.number_pickers();_this.remove_room();}});});_this.sync_guests();}
34BookingWidget.prototype.remove_room=function remove_room(){const _this=this;_this.$remove_room=_this.$obj.find('.js-room-remove');_this.$remove_room.each(function(){const $remove_room=$(this);$remove_room.on('click',function(){let $remove_room_wrapper=$remove_room.closest('.booking-widget__guests-wrapper');$remove_room_wrapper.slideUp(200,function(){$remove_room_wrapper.remove();_this.update_room_number();});});});_this.sync_guests();}
35BookingWidget.prototype.update_room_number=function update_room_number(){const _this=this;_this.$rooms=_this.$obj.find('.booking-widget__guests-wrapper');_this.$rooms.each(function($room_number){++$room_number;let $room_suffix=$room_number===2?'nd':$room_number===3?'rd':'th';$(this).find('.booking-widget__room-number').text($room_number+$room_suffix+' room');$(this).attr('data-room-number',$room_number);});_this.sync_guests();}
36BookingWidget.prototype.valid_form=function valid_form(){const _this=this;let error_free=true;let error_message='';const validateStay=function(){let roomCategory=_this.$obj.find('input[name="roomcategory"]');let room=_this.$obj.find('input[name="room"]');let valid=(room.val()!==''||roomCategory.val()!=='')??false;if(!valid){error_message='Invalid Stay Type Selection.';error_free=false;}}
37const validateCheckinDate=function(){let checkinDate=_this.$obj.find('input[name="datein"]');let valid=Date.parse(checkinDate.val());if(!valid){error_message='Invalid Arrival Date.';error_free=false;}}
38const validateCheckoutDate=function(){let checkoutDate=_this.$obj.find('input[name="dateout"]');let valid=Date.parse(checkoutDate.val());if(!valid){error_message='Invalid Departure Date.';error_free=false;}}
39const validateAdults=function(){let adults=_this.$obj.find('input[name="adults"]');const adults_arr=adults.val().split(',');let valid=true;let room=1;$(adults_arr).each(function(adult,value){let check=parseInt(value)>=1&&parseInt(value)<=9;if(check===false){valid=false;room=adult+1;return false;}})
40if(!valid){error_message='Room number '+room+' must have number of Adults between 1 and 9.';error_free=false;}}
41const validateChild=function(){let child=_this.$obj.find('input[name="child"]');const child_arr=child.val().split(',');let valid=true;let room=1;$(child_arr).each(function(child,value){let check=parseInt(value)>=0&&parseInt(value)<=4;if(check===false){valid=false;room=child+1;return false;}})
42if(!valid){error_message='Room number '+room+' must have number of Children between 0 and 4.';error_free=false;}}
43const validateRooms=function(){let rooms=_this.$obj.find('input[name="rooms"]');let valid=rooms.val()>=0&&rooms.val()<=9;if(!valid){error_message='Number of Rooms must be between 0 and 9.';error_free=false;}}
44validateRooms();validateChild();validateAdults();validateCheckoutDate();validateCheckinDate();validateStay();_this.$submission_error.text(error_message);return error_free;}
45BookingWidget.prototype.close_on_click_outside=function close_on_click_outside(){const _this=this;this.$window.on('click',function(e){if(_this.$easepick_container.hasClass('show')){if(!_this.$obj.get(0).contains(e.target)&&e.target!=''){_this.$easepick_button_arrival.removeClass('active');_this.$easepick_button_departure.removeClass('active');_this.$easepick_container.removeClass('show');}}
46if(_this.$guests_container.hasClass('show')){if(!_this.$obj.get(0).contains(e.target)&&e.target!=''){_this.$guests_button.removeClass('active');_this.$guests_container.removeClass('show');}}});}
47function header(){const $header=$('.header');const $toggleBookingBTN=$header.find('.js-reserve-button');const $toggleBookingBTNmobile=$header.find('.js-reserve-button-mobile');const $closeMenu=$header.find('.mobilemenu__close');const $bookingWidget=$header.find('.booking-widget');const $bg=$header.find('.booking-widget__bg');const $body=$('body');const $closeButton=$bookingWidget.find('.js-booking-close');let lastFocusedElement=null;function updateAriaExpanded(isOpen){$toggleBookingBTN.attr('aria-expanded',isOpen?'true':'false');$toggleBookingBTNmobile.attr('aria-expanded',isOpen?'true':'false');}
48function openBookingWidget(triggerElement){lastFocusedElement=triggerElement;$bookingWidget.addClass('active');$bg.addClass('active');$body.addClass('bw-active');updateAriaExpanded(true);setTimeout(function(){$closeButton.focus();},100);}
49function closeBookingWidget(){$bookingWidget.removeClass('active');$bg.removeClass('active');$body.removeClass('bw-active');updateAriaExpanded(false);
49if(lastFocusedElement){$(lastFocusedElement).focus();lastFocusedElement=null;}}
50$toggleBookingBTN.on('click',function(){if($bookingWidget.hasClass('active')){closeBookingWidget();}else{openBookingWidget(this);}});$toggleBookingBTNmobile.on('click',function(){if($bookingWidget.hasClass('active')){closeBookingWidget();}else{openBookingWidget(this);}});$closeButton.on('click',function(){closeBookingWidget();});$(document).on('keydown',function(e){if(e.key==='Escape'&&$bookingWidget.hasClass('active')){closeBookingWidget();}});}

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.