1(function(global){'use strict';var AVDPAvailabilityCore={};function parseFlexibleDate(dateStr,format){if(!dateStr)return null;var parsedDate;var parts;var isDayFirst=format&&/^d[\/\-\.]m[\/\-\.]Y/.test(format);if(!isDayFirst){parsedDate=new Date(dateStr);if(isNaN(parsedDate.getTime())){parsedDate=new Date(dateStr.replace(/\//g,'-'))} 2if(!isNaN(parsedDate.getTime())){return parsedDate}} 3parts=dateStr.split(/[-\/.]/);if(parts.length>=3){if(isDayFirst){parsedDate=new Date(parseInt(parts[2],10),parseInt(parts[1],10)-1,parseInt(parts[0],10))}else if(parts[0].length===4){parsedDate=new Date(parseInt(parts[0],10),parseInt(parts[1],10)-1,parseInt(parts[2],10))}else if(parts[2].length===4){parsedDate=new Date(parseInt(parts[2],10),parseInt(parts[1],10)-1,parseInt(parts[0],10))}} 4return parsedDate||new Date(NaN)} 5function getFirstAvailableDate(config){var dayMap=['sunday','monday','tuesday','wednesday','thursday','friday','saturday'];var weekly=config.weekly_hours||{};var disabledDates=config.disabledDates||[];var exemptedDates=config.exemptedDates||[];var noticeMinutes=parseInt(config.minimum_notice,10)||0;var bookingType=config.booking_type||'fixed';var startDate=new Date();startDate.setTime(startDate.getTime()+(noticeMinutes*60*1000));for(var i=0;i<365;i++){var checkDate=new Date(startDate);checkDate.setDate(startDate.getDate()+i);var dayName=dayMap[checkDate.getDay()];var dateStr=checkDate.getFullYear()+'-'+String(checkDate.getMonth()+1).padStart(2,'0')+'-'+String(checkDate.getDate()).padStart(2,'0');if(exemptedDates.indexOf(dateStr)!==-1){return checkDate} 6if(disabledDates.indexOf(dateStr)!==-1){continue} 7if(weekly[dayName]){var dayConfig=weekly[dayName];var isEnabled=dayConfig.enabled===!0||dayConfig.enabled===1||dayConfig.enabled==='1'||dayConfig.enabled==='true';if(bookingType==='daily'){if(isEnabled){return checkDate}}else{if(isEnabled&&dayConfig.slots&&dayConfig.slots.length>0){var isStartDay=(checkDate.getFullYear()===startDate.getFullYear()&&checkDate.getMonth()===startDate.getMonth()&&checkDate.getDate()===startDate.getDate());if(isStartDay){var candidateSlots=calculateSlots(checkDate,config);var remaining=filterTodaySlots(candidateSlots,0,startDate);if(remaining.length===0){continue}} 8return checkDate}}}} 9return new Date()} 10function calculateSlotsFromCustomRange(date,start,end,config){var allowed=[];var step=parseInt(config.step,10)||30;var bufferBefore=parseInt(config.buffer_before,10)||0;var bufferAfter=parseInt(config.buffer_after,10)||0;var totalCycle=bufferBefore+step+bufferAfter;var startParts=start.split(':');var endParts=end.split(':');var startMins=(parseInt(startParts[0],10)*60)+parseInt(startParts[1],10);var endMins=(parseInt(endParts[0],10)*60)+parseInt(endParts[1],10);var isCross=endMins<startMins;var limit=isCross?1440:endMins;for(var slotStart=startMins+bufferBefore;slotStart+step<=limit;slotStart+=totalCycle){var h=Math.floor(slotStart/60);var m=slotStart%60;allowed.push(String(h).padStart(2,'0')+':'+String(m).padStart(2,'0'))} 11if(isCross){for(var slotStart=bufferBefore;slotStart+step<=endMins;slotStart+=totalCycle){var h=Math.floor(slotStart/60);var m=slotStart%60;var timeStr=String(h).padStart(2,'0')+':'+String(m).padStart(2,'0');if(allowed.indexOf(timeStr)===-1){allowed.push(timeStr)}}} 12allowed.sort();return allowed} 13function calculateSlots(date,config){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 allowedDatesWithTimes=config.allowed_dates_with_times||[];for(var i=0;i<allowedDatesWithTimes.length;i++){var allowedDate=allowedDatesWithTimes[i];if(allowedDate.date===dateStr&&allowedDate.start&&allowedDate.end){return calculateSlotsFromCustomRange(date,allowedDate.start,allowedDate.end,config)}} 14var dayMap=['sunday','monday','tuesday','wednesday','thursday','friday','saturday'];var dayName=dayMap[date.getDay()];var weekly=config.weekly_hours;if(!weekly||!weekly[dayName]){return[]} 15var dayConfig=weekly[dayName];var isEnabled=dayConfig.enabled===!0||dayConfig.enabled===1||dayConfig.enabled==='1'||dayConfig.enabled==='true';if(!isEnabled){return[]} 16var slotsData=dayConfig.slots;if(!slotsData||slotsData.length===0){return[]} 17var allowed=[];var step=parseInt(config.step,10)||30;var bufferBefore=parseInt(config.buffer_before,10)||0;var bufferAfter=parseInt(config.buffer_after,10)||0;var totalCycle=bufferBefore+step+bufferAfter;slotsData.forEach(function(slotRange){var startParts=slotRange.start.split(':');var endParts=slotRange.end.split(':');var startMins=(parseInt(startParts[0],10)*60)+parseInt(startParts[1],10);var endMins=(parseInt(endParts[0],10)*60)+parseInt(endParts[1],10);var isCross=endMins<startMins;var limit=isCross?1440:endMins;for(var slotStart=startMins+bufferBefore;slotStart+step<=limit;slotStart+=totalCycle){var h=Math.floor(slotStart/60);var m=slotStart%60;allowed.push(String(h).padStart(2,'0')+':'+String(m).padStart(2,'0'))}});var yestDate=new Date(date);yestDate.setDate(date.getDate()-1);var yestDayName=dayMap[yestDate.getDay()];if(weekly[yestDayName]&&weekly[yestDayName].enabled&&weekly[yestDayName].slots){weekly[yestDayName].slots.forEac
17h(function(slotRange){var startParts=slotRange.start.split(':');var endParts=slotRange.end.split(':');var startMins=(parseInt(startParts[0],10)*60)+parseInt(startParts[1],10);var endMins=(parseInt(endParts[0],10)*60)+parseInt(endParts[1],10);if(endMins<startMins){for(var slotStart=bufferBefore;slotStart+step<=endMins;slotStart+=totalCycle){var h=Math.floor(slotStart/60);var m=slotStart%60;var timeStr=String(h).padStart(2,'0')+':'+String(m).padStart(2,'0');if(allowed.indexOf(timeStr)===-1){allowed.push(timeStr)}}}})} 18allowed.sort();return allowed} 19function canStartSequentialBooking(startDate,minDays,config){if(!minDays||minDays<=0){return!0} 20var disabledWeekDays=(config.disabledWeekDays||[]).map(function(d){return parseInt(d,10)});var blockedDates=config.disabledDates||[];var exemptedDates=config.exemptedDates||[];var current=new Date(startDate);current.setHours(0,0,0,0);for(var i=0;i<minDays;i++){var y=current.getFullYear();var m=String(current.getMonth()+1).padStart(2,'0');var d=String(current.getDate()).padStart(2,'0');var dateStr=y+'-'+m+'-'+d;var dayOfWeek=current.getDay();if(exemptedDates.indexOf(dateStr)!==-1){current.setDate(current.getDate()+1);continue} 21if(disabledWeekDays.indexOf(dayOfWeek)!==-1){return!1} 22if(blockedDates.indexOf(dateStr)!==-1){return!1} 23current.setDate(current.getDate()+1)} 24return!0} 25function validateSequence(startDate,endDate,config){var disabledWeekDays=(config.disabledWeekDays||[]).map(function(d){return parseInt(d,10)});var blockedDates=config.disabledDates||[];var exemptedDates=config.exemptedDates||[];var current=new Date(startDate);current.setHours(0,0,0,0);var end=new Date(endDate);end.setHours(0,0,0,0);while(current<=end){var y=current.getFullYear();var m=String(current.getMonth()+1).padStart(2,'0');var d=String(current.getDate()).padStart(2,'0');var dateStr=y+'-'+m+'-'+d;var dayOfWeek=current.getDay();if(disabledWeekDays.indexOf(dayOfWeek)!==-1){current.setDate(current.getDate()+1);continue} 26if(exemptedDates.indexOf(dateStr)!==-1){current.setDate(current.getDate()+1);continue} 27if(blockedDates.indexOf(dateStr)!==-1){return{valid:!1,blockedDate:dateStr}} 28current.setDate(current.getDate()+1)} 29return{valid:!0,blockedDate:null}} 30function countAvailableDays(startDate,endDate,config){var disabledDates=config.disabledDates||[];var disabledWeekDays=(config.disabledWeekDays||[]).map(function(d){return parseInt(d,10)});var exemptedDates=config.exemptedDates||[];var count=0;var current=new Date(startDate);current.setHours(0,0,0,0);var end=new Date(endDate);end.setHours(0,0,0,0);while(current<=end){var y=current.getFullYear();var m=String(current.getMonth()+1).padStart(2,'0');var d=String(current.getDate()).padStart(2,'0');var dateStr=y+'-'+m+'-'+d;var dayOfWeek=current.getDay();var isAvailable;if(exemptedDates.indexOf(dateStr)!==-1){isAvailable=!0}else if(disabledDates.indexOf(dateStr)!==-1){isAvailable=!1}else if(disabledWeekDays.indexOf(dayOfWeek)!==-1){isAvailable=!1}else{isAvailable=!0} 31if(isAvailable){count++} 32current.setDate(current.getDate()+1)} 33return count} 34function filterTodaySlots(slots,noticeMinutes,now){if(!slots||slots.length===0)return slots;var reference=now instanceof Date?now:new Date();var minAvailableTime=new Date(reference.getTime()+((noticeMinutes||0)*60*1000));if(minAvailableTime.getDate()!==reference.getDate()||minAvailableTime.getMonth()!==reference.getMonth()||minAvailableTime.getFullYear()!==reference.getFullYear()){return[]} 35var minMins=(minAvailableTime.getHours()*60)+minAvailableTime.getMinutes();return slots.filter(function(timeStr){var parts=timeStr.split(':');var slotMins=(parseInt(parts[0],10)*60)+parseInt(parts[1],10);return slotMins>=minMins})} 36AVDPAvailabilityCore.parseFlexibleDate=parseFlexibleDate;AVDPAvailabilityCore.getFirstAvailableDate=getFirstAvailableDate;AVDPAvailabilityCore.calculateSlots=calculateSlots;AVDPAvailabilityCore.calculateSlotsFromCustomRange=calculateSlotsFromCustomRange;AVDPAvailabilityCore.canStartSequentialBooking=canStartSequentialBooking;AVDPAvailabilityCore.validateSequence=validateSequence;AVDPAvailabilityCore.countAvailableDays=countAvailableDays;AVDPAvailabilityCore.filterTodaySlots=filterTodaySlots;if(typeof module!=='undefined'&&module.exports){module.exports=AVDPAvailabilityCore}else{global.AVDPAvailabilityCore=AVDPAvailabilityCore}})(typeof window!=='undefined'?window:this)
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.