1(function($){'use strict';var _avdpSession={url:window.location.href,ts:Date.now(),matched:{},errors:[]};window.addEventListener('error',function(e){if(e.filename&&e.filename.indexOf('avdp')!==-1){_avdpSession.errors.push({msg:e.message,file:e.filename.split('/').pop(),line:e.lineno,col:e.colno,ts:Date.now()})}});function _avdpSaveDiagnostics(){try{var stored=JSON.parse(localStorage.getItem('avdp_diagnostics')||'[]');if(!Array.isArray(stored)){stored=[]} 2stored.unshift(_avdpSession);localStorage.setItem('avdp_diagnostics',JSON.stringify(stored.slice(0,5)))}catch(e){}} 3$(document).ready(function(){initDatepickers()});function initDatepickers(){if(!avdpPublic||!avdpPublic.selectors||!avdpPublic.config){return} 4var config=avdpPublic.config;var selectors=avdpPublic.selectors;var $fields=$();$.each(selectors,function(key,sel){if(sel){var $matched=$(sel);_avdpSession.matched[key]=$matched.length;$fields=$fields.add($matched)}});_avdpSaveDiagnostics();if($fields.length===0){return} 5$fields.each(function(){var $field=$(this);if($field.hasClass('avdp-initialized')){return} 6initLibrary($field,config);$field.addClass('avdp-initialized');if(config.inline){$field.parent().addClass('avdp-inline-mode')}});$(document).on('click','[data-avdp-picker] .xdsoft_date:not(.xdsoft_disabled)',function(){var $cell=$(this);var $picker=$cell.closest('.xdsoft_datetimepicker');if($picker.length){$picker.find('.xdsoft_date').removeClass('xdsoft_selected');$cell.addClass('xdsoft_selected')}})} 7var parseFlexibleDate=AVDPAvailabilityCore.parseFlexibleDate;var getFirstAvailableDate=AVDPAvailabilityCore.getFirstAvailableDate;var calculateSlots=AVDPAvailabilityCore.calculateSlots;var calculateSlotsFromCustomRange=AVDPAvailabilityCore.calculateSlotsFromCustomRange;var canStartSequentialBooking=AVDPAvailabilityCore.canStartSequentialBooking;var validateSequence=AVDPAvailabilityCore.validateSequence;var countAvailableDays=AVDPAvailabilityCore.countAvailableDays;var filterTodaySlots=AVDPAvailabilityCore.filterTodaySlots;function initLibrary($field,config){var library=(config&&config.library)||'xdsoft';if(library==='xdsoft'){initXdsoft($field,config)}} 8function initXdsoft($field,config){var format=config.format||'Y-m-d H:i';var timepicker=config.timepicker!==!1;var datepicker=!0;if($field.is(avdpPublic.selectors.start_date)||$field.is(avdpPublic.selectors.end_date)){format=config.formatDate||'Y-m-d';timepicker=!1}else if($field.is(avdpPublic.selectors.start_time)||$field.is(avdpPublic.selectors.end_time)){format=config.formatTime||'H:i';datepicker=!1} 9var firstAvailableDate=getFirstAvailableDate(config);var minDateObj=!1;var maxDateObj=!1;if(config.minDate){var minParts=config.minDate.split('-');if(minParts.length===3){minDateObj=new Date(parseInt(minParts[0]),parseInt(minParts[1])-1,parseInt(minParts[2]))}} 10if(config.maxDate){var maxParts=config.maxDate.split('-');if(maxParts.length===3){maxDateObj=new Date(parseInt(maxParts[0]),parseInt(maxParts[1])-1,parseInt(maxParts[2]))}} 11var bookingWindowMin=minDateObj?new Date(minDateObj.getTime()):!1;var bookingWindowMax=maxDateObj?new Date(maxDateObj.getTime()):!1;if(config.exemptedDates&&config.exemptedDates.length>0){config.exemptedDates.forEach(function(ds){var ep=ds.split('-');if(ep.length!==3){return} 12var ed=new Date(parseInt(ep[0]),parseInt(ep[1])-1,parseInt(ep[2]));ed.setHours(0,0,0,0);if(maxDateObj&&ed>maxDateObj){maxDateObj=ed} 13if(minDateObj&&ed<minDateObj){minDateObj=ed}})} 14var pendingMinDate=$field.data('avdp-pending-min-date');if(pendingMinDate&&pendingMinDate instanceof Date&&!isNaN(pendingMinDate.getTime())){if(!minDateObj||pendingMinDate>minDateObj){minDateObj=pendingMinDate} 15$field.removeData('avdp-pending-min-date')} 16var xdsoftOptions={format:format,formatTime:config.formatTime||'H:i',formatDate:config.formatDate||'Y-m-d',timepicker:timepicker,datepicker:datepicker,minDate:minDateObj,maxDate:maxDateObj,step:config.step||30,inline:config.inline||!1,dayOfWeekStart:1,lazyInit:!0,defaultDate:firstAvailableDate,defaultSelect:!1,validateOnBlur:!1,closeOnDateSelect:timepicker?!1:!0,closeOnTimeSelect:timepicker&&datepicker,allowTimes:(config.weekly_hours&&timepicker)?calculateSlots(firstAvailableDate,config):[],beforeShowDay:function(date){var y=date.getFullYear();var m=String(date.getMonth()+1).padStart(2,'0');var d=String(date.getDate()).padStart(2,'0');var dateStr=y+'-'+m+'-'+d;var dayOfWeek=date.getDay();var checkDate=new Date(date);checkDate.setHours(0,0,0,0);var $startField=null;var $endField=null;var isEndPicker=$field.is(avdpPublic.selectors.end_date)||$field.is(avdpPublic.selectors.end_datetime);var isStartPicker=$field.is(avdpPublic.selectors.start_date)||$field.is(avdpPublic.selectors.start_datetime);var $form=$field.closest('form');if($field.is(avdpPublic.selectors.end_date)||$field.is(avdpPublic.selectors.start_date)){$startField=$form.length?$form.find(avdpPublic.selectors.start_date):$(avdpPublic.selectors.start_date);$endField=$form.length?$form.find(avdpPublic.selectors.end_date):$(avdpPublic.selectors.end_date)}else if($field.is(avdpPublic.selectors.end_datetime)||$field.is(avdpPublic.selectors.start_datetime)){$startField=$form.length?$form.find(avdpPublic.selectors.start_datetime):$(avdpPublic.selectors.start_datetime);$endField=$form.length?$form.find(avdpPublic.selectors.end_datetime):$(avdpPublic.selectors.end_datetime)} 17if(isEndPicker&&$startField&&$startField.length&&$startField.val()){var startDate=parseFlexibleDate($startField.val(),config.formatDate);if(startDate&&!isNaN(startDate.getTime())){startDate.setHours(0,0,0,0);if(checkDate<startDate){return[!1,'avdp-before-start']}}} 18var isAvailable=!0;var cssClass='';if(config.exemptedDates&&config.exemptedDates.includes(dateStr)){cssClass='avdp-exempted'}else if(bookingWindowMax&&checkDate>bookingWindowMax){isAvailable=!1}else if(bookingWindowMin&&checkDate<bookingWindowMin){isAvailable=!1}else if(config.disabledDates&&config.disabledDates.includes(dateStr)){isAvailable=!1}else if(config.disabledWeekDays&&config.disabledWeekDays.length>0){var disabledDays=config.disabledWeekDays.map(function(dd){return parseInt(dd,10)});if(disabledDays.indexOf(dayOfWeek)!==-1){isAvailable=!1}} 19if(isAvailable&&timepicker){var nowBSD=new Date();var isTodayBSD=(checkDate.getFullYear()===nowBSD.getFullYear()&&checkDate.getMonth()===nowBSD.getMonth()&&checkDate.getDate()===nowBSD.getDate());if(isTodayBSD){var todaySlots=calculateSlots(checkDate,config);var noticeMinBSD=parseInt(config.minimum_notice)||0;var remainingBSD=filterTodaySlots(todaySlots,noticeMinBSD,nowBSD);if(remainingBSD.length===0){isAvailable=!1;cssClass='avdp-no-times-today'}}} 20if(isAvailable&&isStartPicker&&config.booking_type!=='flexible'){var minDays=parseInt(config.min_days)||0;if(minDays>0&&!canStartSequentialBooking(checkDate,minDays,config)){isAvailable=!1;cssClass='avdp-insufficient-days'}} 21if(isAvailable&&$startField&&$endField&&$startField.length&&$endField.length){var startVal=$startField.val();var endVal=$endField.val();if(startVal&&endVal){var rangeStart=parseFlexibleDate(startVal,config.formatDate);var rangeEnd=parseFlexibleDate(endVal,config.formatDate);if(rangeStart&&rangeEnd&&!isNaN(rangeStart.getTime())&&!isNaN(rangeEnd.getTime())){rangeStart.setHours(0,0,0,0);rangeEnd.setHours(0,0,0,0);if(checkDate>=rangeStart&&checkDate<=rangeEnd){cssClass=(cssClass?cssClass+' ':'')+'xdsoft_current'}}}} 22return[isAvailable,cssClass]},onShow:function(ct){$(this).attr('data-avdp-picker','1');var pickerInstance=$field.data('xdsoft_datetimepicker');if(!timepicker&&pickerInstance&&$field.val()){var fieldValue=$field.val();var parsedDate=parseFlexibleDate(fieldValue,config.formatDate);if(parsedDate&&!isNaN(parsedDate.getTime())){setTimeout(function(){if(pickerInstance){pickerInstance.setOptions({value:fieldValue});var $picker=$('.xdsoft_datetimepicker:visible').last();if($picker.length){var targetDay=parsedDate.getDate();$picker.find('.xdsoft_date').removeClass('xdsoft_selected');$picker.find('.xdsoft_date').each(function(){var $cell=$(this);if(!$cell.hasClass('xdsoft_disabled')&&parseInt($cell.text().trim(),10)===targetDay){$cell.addClass('xdsoft_selected');return!1}})}}},100)}} 23if(timepicker){if($field.is(avdpPublic.selectors.start_time)||$field.is(avdpPublic.selectors.end_time)){var $dateField=null;if($field.is(avdpPublic.selectors.start_time)){$dateField=$(avdpPublic.selectors.start_date)}else if($field.is(avdpPublic.selectors.end_time)){$dateField=$(avdpPublic.selectors.end_date)} 24if($dateField&&$dateField.length&&$dateField.val()){var dateStr=$dateField.val();var selectedDate=parseFlexibleDate(dateStr,config.formatDate);if(selectedDate&&!isNaN(selectedDate.getTime())){var instance=$field.data('xdsoft_datetimepicker');updateAllowTimes(selectedDate,instance||this,config);return}} 25var instance=$field.data('xdsoft_datetimepicker');updateAllowTimes(new Date(),instance||this,config)}else{var instance=$field.data('xdsoft_datetimepicker');updateAllowTimes(ct,instance||this,config)}} 26var isEndPicker=$field.is(avdpPublic.selectors.end_date)||$field.is(avdpPublic.selectors.end_datetime);if(isEndPicker){var $startField=null;var $form=$field.closest('form');if($field.is(avdpPublic.selectors.end_date)){$startField=$form.length?$form.find(avdpPublic.selectors.start_date):$(avdpPublic.selectors.start_date)}else if($field.is(avdpPublic.selectors.end_datetime)){$startField=$form.length?$form.find(avdpPublic.selectors.start_datetime):$(avdpPublic.selectors.start_datetime)} 27var startDate=null;var pendingMinDate=$field.data('avdp-pending-min-date');
27if(pendingMinDate&&pendingMinDate instanceof Date&&!isNaN(pendingMinDate.getTime())){startDate=new Date(pendingMinDate.getFullYear(),pendingMinDate.getMonth(),pendingMinDate.getDate());$field.removeData('avdp-pending-min-date')}else if($startField&&$startField.length&&$startField.val()){var parsedStartDate=parseFlexibleDate($startField.val(),config.formatDate);if(parsedStartDate&&!isNaN(parsedStartDate.getTime())){startDate=new Date(parsedStartDate.getFullYear(),parsedStartDate.getMonth(),parsedStartDate.getDate())}} 28if(startDate&&pickerInstance){try{var currentMinDate=null;try{currentMinDate=pickerInstance.getOptions('minDate')}catch(e){} 29var finalMinDate=startDate;if(currentMinDate&¤tMinDate>startDate){finalMinDate=currentMinDate} 30pickerInstance.setOptions({minDate:finalMinDate,defaultDate:!$field.val()?startDate:null});setTimeout(function(){pickerInstance.trigger('xchange.xdsoft')},50)}catch(e){}}}},onSelectDate:function(ct,$input){var pickerInstance=$field.data('xdsoft_datetimepicker');if(!timepicker&&ct&&($field.is(avdpPublic.selectors.end_date)||$field.is(avdpPublic.selectors.end_datetime))){var $startField=null;var $form=$field.closest('form');if($field.is(avdpPublic.selectors.end_date)){$startField=$form.length?$form.find(avdpPublic.selectors.start_date):$(avdpPublic.selectors.start_date)}else if($field.is(avdpPublic.selectors.end_datetime)){$startField=$form.length?$form.find(avdpPublic.selectors.start_datetime):$(avdpPublic.selectors.start_datetime)} 31if($startField&&$startField.length&&$startField.val()){var parsedStartDate=parseFlexibleDate($startField.val(),config.formatDate);if(parsedStartDate&&!isNaN(parsedStartDate.getTime())){var startDate=new Date(parsedStartDate.getFullYear(),parsedStartDate.getMonth(),parsedStartDate.getDate());var selectedDate=new Date(ct.getFullYear(),ct.getMonth(),ct.getDate());if(selectedDate<startDate){$field.val('');return!1}}}} 32if(timepicker){var instance=$field.data('xdsoft_datetimepicker');var pickerToUpdate=instance||this;var ctSnapshot=ct?new Date(ct.getTime()):new Date();setTimeout(function(){updateAllowTimes(ctSnapshot,pickerToUpdate,config)},0)}else if(!$field.is(avdpPublic.selectors.start_time)&&!$field.is(avdpPublic.selectors.end_time)){updateTimePickerForDateField($field,ct,config)} 33if($field.is(avdpPublic.selectors.start_date)||$field.is(avdpPublic.selectors.start_datetime)){updateDependentPickers($field,ct,config)}},onChangeDateTime:function(dp,$input){var pickerInstance=$field.data('xdsoft_datetimepicker');var fieldValue=$field.val();var pickerDate=pickerInstance?pickerInstance.getValue():null;if(!timepicker&&pickerDate&&($field.is(avdpPublic.selectors.end_date)||$field.is(avdpPublic.selectors.end_datetime))){var $startField=null;var $form=$field.closest('form');if($field.is(avdpPublic.selectors.end_date)){$startField=$form.length?$form.find(avdpPublic.selectors.start_date):$(avdpPublic.selectors.start_date)}else if($field.is(avdpPublic.selectors.end_datetime)){$startField=$form.length?$form.find(avdpPublic.selectors.start_datetime):$(avdpPublic.selectors.start_datetime)} 34if($startField&&$startField.length&&$startField.val()){var parsedStartDate=parseFlexibleDate($startField.val(),config.formatDate);if(parsedStartDate&&!isNaN(parsedStartDate.getTime())){var startDate=new Date(parsedStartDate.getFullYear(),parsedStartDate.getMonth(),parsedStartDate.getDate());var selectedDate=new Date(pickerDate.getFullYear(),pickerDate.getMonth(),pickerDate.getDate());if(selectedDate<startDate){$field.val('');return}}}} 35if(!timepicker&&pickerInstance&&fieldValue){var parsedDate=parseFlexibleDate(fieldValue,config.formatDate);if(parsedDate&&!isNaN(parsedDate.getTime())){pickerInstance.setOptions({value:fieldValue})}} 36if(timepicker){var selectedDate=this.getValue();if(selectedDate){updateAllowTimes(selectedDate,this,config)}}else if(!$field.is(avdpPublic.selectors.start_time)&&!$field.is(avdpPublic.selectors.end_time)){var selectedDate=this.getValue();if(selectedDate){updateTimePickerForDateField($field,selectedDate,config)}} 37if($field.is(avdpPublic.selectors.start_date)||$field.is(avdpPublic.selectors.start_datetime)){var selectedDate=this.getValue();if(selectedDate){updateDependentPickers($field,selectedDate,config)}} 38validateSelection($input,config)}};if(avdpPublic.config.lang){$.datetimepicker.setLocale(avdpPublic.config.lang)} 39try{$field.datetimepicker(xdsoftOptions)}catch(e){_avdpSession.errors.push({msg:e.message||String(e),file:'avdp-public.js',line:0,col:0,ts:Date.now()});_avdpSaveDiagnostics()} 40if(!timepicker&&($field.is(avdpPublic.selectors.end_date)||$field.is(avdpPublic.selectors.end_datetime))){$field.on('change',function(){var $endField=$(this);var endValue=$endField.val();if(!endValue){return} 41var pickerInstance=$endField.data('xdsoft_datetimepicker');var pickerDate=pickerInstance?pickerInstance.getDate():null;if(!pickerDate){return} 42var $form=$endField.closest('form');var $startField=null;if($endField.is(avdpPublic.selectors.end_date)){$startField=$form.length?$form.find(avdpPublic.selectors.start_date):$(avdpPublic.selectors.start_date)}else if($endField.is(avdpPublic.selectors.end_datetime)){$startField=$form.length?$form.find(avdpPublic.selectors.start_datetime):$(avdpPublic.selectors.start_datetime)} 43if($startField&&$startField.length&&$startField.val()){var parsedStartDate=parseFlexibleDate($startField.val(),config.formatDate);if(parsedStartDate&&!isNaN(parsedStartDate.getTime())){var startDate=new Date(parsedStartDate.getFullYear(),parsedStartDate.getMonth(),parsedStartDate.getDate());var selectedDate=new Date(pickerDate.getFullYear(),pickerDate.getMonth(),pickerDate.getDate());if(selectedDate<startDate){$endField.val('')}}}})}} 44function updateDependentPickers($startField,selectedDate,config){if(!selectedDate||!(selectedDate instanceof Date)||isNaN(selectedDate.getTime())){return} 45var $form=$startField.closest('form');var $endField=null;if($startField.is(avdpPublic.selectors.start_date)){$endField=$form.length?$form.find(avdpPublic.selectors.end_date):$(avdpPublic.selectors.end_date)}else if($startField.is(avdpPublic.selectors.start_datetime)){$endField=$form.length?$form.find(avdpPublic.selectors.end_datetime):$(avdpPublic.selectors.end_datetime)} 46if(!$endField||!$endField.length){return} 47var endPickerInstance=$endField.data('xdsoft_datetimepicker');var year=selectedDate.getFullYear();var month=selectedDate.getMonth();var day=selectedDate.getDate();var minDate=new Date(year,month,day);if(!endPickerInstance){$endField.data('avdp-pending-min-date',minDate);return} 48var opts=endPickerInstance.data('options')||{};var currentMinDate=opts.minDate||!1;var finalMinDate=minDate;if(currentMinDate&¤tMinDate>minDate){finalMinDate=currentMinDate} 49endPickerInstance.setOptions({minDate:finalMinDate});var endDate=endPickerInstance.getValue();if(endDate&&endDate<finalMinDate){$endField.val('')}} 50function validateSelection($input,config){if($input.is(avdpPublic.selectors.start_date)||$input.is(avdpPublic.selectors.end_date)){var $start=$(avdpPublic.selectors.start_date);var $end=$(avdpPublic.selectors.end_date);if($start.length&&$end.length&&$start.val()&&$end.val()){var d1=parseFlexibleDate($start.val(),config.formatDate);var d2=parseFlexibleDate($end.val(),config.formatDate);if(!d1||!d2||isNaN(d1.getTime())||isNaN(d2.getTime())){return} 51var seqResult=validateSequence(d1,d2,config);if(!seqResult.valid){alert('Your selected range contains an unavailable date ('+seqResult.blockedDate+') that breaks the booking sequence. Please select a continuous range of available dates.');$input.val('');return} 52if(config.booking_type==='flexible'){var diffHours=Math.abs(d2-d1)/(1000*60*60);var minDur=parseFloat(config.min_duration)||0;var maxDur=parseFloat(config.max_duration)||0;if(minDur>0&&diffHours<minDur){alert('Minimum booking is '+(minDur/24)+' night(s). Please select a longer stay.');$input.val('');return}else if(maxDur>0&&diffHours>maxDur){alert('Maximum booking is '+(maxDur/24)+' night(s). Please select a shorter stay.');$input.val('');return}}else{var availableDays=countAvailableDays(d1,d2,config);var min=parseInt(config.min_days)||0;var max=parseInt(config.max_days)||0;if(min>0&&availableDays<min){alert('Minimum booking is '+min+' available days. Your selection has only '+availableDays+' available days.');$input.val('')}else if(max>0&&availableDays>max){alert('Maximum booking is '+max+' available days. Your selection has '+availableDays+' available days.');$input.val('')}}}} 53if($input.is(avdpPublic.selectors.start_datetime)||$input.is(avdpPublic.selectors.end_datetime)){var $start=$(avdpPublic.selectors.start_datetime);var $end=$(avdpPublic.selectors.end_datetime);if($start.length&&$end.length&&$start.val()&&$end.val()){var d1=parseFlexibleDate($start.val(),config.formatDate);var d2=parseFlexibleDate($end.val(),config.formatDate);if(!d1||!d2||isNaN(d1.getTime())||isNaN(d2.getTime())){return} 54var seqResult=validateSequence(d1,d2,config);if(!seqResult.valid){alert('Your selected range contains an unavailable date ('+seqResult.blockedDate+') that breaks the booking sequence. Please select a continuous range of available dates.');$input.val('');return} 55var diffTime=Math.abs(d2-d1);var diffHours=diffTime/(1000*60*60);var min=parseFloat(config.min_duration)||0;var max=parseFloat(config.max_duration)||0;if(min>0&&diffHours<min){alert('Minimum duration is '+min+' hours.');$input.val('')}else if(max>0&&diffHours>max){alert('Maximum duration is '+max+' hours.');$input.val('')}}}} 56function updateTimePickerForDateField($dateField,selectedDate,config){if(!selectedDate||!(selectedDate instanceof Date)||isNaN(selectedDate.getTime())){return} 57var $timeField=null;
57if($dateField.is(avdpPublic.selectors.start_date)){$timeField=$(avdpPublic.selectors.start_time)}else if($dateField.is(avdpPublic.selectors.end_date)){$timeField=$(avdpPublic.selectors.end_time)} 58if(!$timeField||!$timeField.length){return} 59var timePickerInstance=$timeField.data('xdsoft_datetimepicker');if(!timePickerInstance){return} 60updateAllowTimes(selectedDate,timePickerInstance,config)} 61function updateAllowTimes(date,pickerInstance,config){if(!config.weekly_hours)return;if(!date||!(date instanceof Date)||isNaN(date.getTime())){date=new Date()} 62var now=new Date();var isToday=(date.getFullYear()===now.getFullYear()&&date.getMonth()===now.getMonth()&&date.getDate()===now.getDate());var availableSlots=calculateSlots(date,config);var noticeMinutes=parseInt(config.minimum_notice)||0;if(isToday&&availableSlots.length>0){availableSlots=filterTodaySlots(availableSlots,noticeMinutes,now)} 63if(availableSlots.length===0){return} 64pickerInstance.setOptions({allowTimes:availableSlots});if(pickerInstance&&pickerInstance.trigger){var _capturedInstance=pickerInstance;setTimeout(function(){_capturedInstance.trigger('afterOpen.xdsoft')},25)}}})(jQuery)
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.