PageSourceSearch

https://operatori.sanmartino.com/kumbe/minified/js/kumbe_utilities.min.js?v=1762946603

js sanmartino.com collected 2026-10-02 06:24:14 UTC 32,962 bytes, 186 lines download raw bytes

1var ROOT_URL=(window.location.origin||window.location.protocol+"//"+window.location.hostname)+"/";var CURRENT_URL=document.location.origin+document.location.pathname;var startingHistoryLength=history.length;var inputEvent=new Event('input');function closeContentWindow(){document.querySelectorAll('.contentWindow').forEach(element=>{element.classList.remove('overlayIn');element.classList.add('overlayOut');document.body.classList.remove('noverflown');setTimeout(function(){element.style.display='none';},300);element.dispatchEvent(new CustomEvent('close'));})}
2function showWindow(target){document.querySelectorAll('.contentWindow').forEach(element=>{element.style.display='none';})
3let modalSelector=document.getElementById('window'+target);if(!modalSelector){console.warn('There is no valid modal: window'+target);return;}
4document.querySelectorAll('.contentWindow').forEach(element=>{element.style.display='hidden';})
5modalSelector.style.display='block';modalSelector.classList.add('overlayIn');modalSelector.classList.remove('overlayOut');modalSelector.scrollTop=0;document.addEventListener('keyup',WB.checkKeyPressed);document.body.classList.add('noverflown');setFocusTrapOnModal(modalSelector);}
6function getRequestParams(asString=true){let urlParams=new URLSearchParams(window.location.search);if(asString){return urlParams.toString();}else{return Object.fromEntries(urlParams.entries());}}
7function doChunks(elements,itemsPerChunk=8){if(elements===undefined||elements===null||elements.length===0){return[];}
8let chunks=[];let maxLength=Math.floor(elements.length / itemsPerChunk);if(elements.length%itemsPerChunk>0){maxLength++;}
9let j=0;for(let i=0;i<maxLength;i++){chunks.push(elements.slice(j,j+itemsPerChunk));j+=itemsPerChunk;}
10return chunks;}
11Date.prototype.isBetween=function(minDate,maxDate,equals=true){let currentDate=new Date(this.valueOf());if(equals){return currentDate.getTime()>=minDate.getTime()&&currentDate.getTime()<=maxDate.getTime();}else{return currentDate.getTime()>minDate.getTime()&&currentDate.getTime()<maxDate.getTime();}}
12Date.prototype.getDayName=function(locale='',type="short"){if(locale===''){locale=getCurrentLocale();}
13var date=new Date(this.valueOf());return date.toLocaleDateString(locale,{weekday:type}).toLowerCase();}
14Date.prototype.getDayNumber=function(locale=''){if(locale===''){locale=getCurrentLocale();}
15var date=new Date(this.valueOf());return date.toLocaleDateString(locale,{day:'numeric'});}
16Date.prototype.getMonthName=function(locale='',type="long"){if(locale===''){locale=getCurrentLocale();}
17var date=new Date(this.valueOf());return date.toLocaleDateString(locale,{month:type}).toLowerCase();}
18Date.prototype.getMonthNumber=function(locale=''){if(locale===''){locale=getCurrentLocale();}
19var date=new Date(this.valueOf());return date.toLocaleDateString(locale,{month:'numeric'}).toLowerCase();}
20Date.prototype.addDays=function(days){var date=new Date(this.valueOf());date.setDate(date.getDate()+days);return date;}
21Date.prototype.addYears=function(years){var date=new Date(this.valueOf());date.setFullYear(date.getFullYear()+years);return new Date(date);}
22Date.prototype.addMonths=function(months){var date=new Date(this.valueOf());date.setMonth(date.getMonth()+months);return new Date(date);}
23Date.prototype.getIsoFormat=function(separator='-'){var date=new Date(this.valueOf());return date.toLocaleString('sv',{timeZone:'Europe/Rome',year:'numeric',month:'2-digit',day:'2-digit'});}
24Date.prototype.toLocalISOString=function(){let date=new Date(this.valueOf());return new Date(date.getTime()-date.getTimezoneOffset()*60000).toISOString();}
25Date.prototype.getCurrentLocaleStringFormat=function(){var date=new Date(this.valueOf());return date.toLocaleString(language,{timeZone:'Europe/Rome',year:'numeric',month:'2-digit',day:'2-digit'});}
26Date.prototype.toFormattedString=function(type='long'){var date=new Date(this.valueOf());return date.toLocaleString(language,{year:'numeric',month:type,day:'numeric'});}
27Date.prototype.isValid=function(andFuture=false){var date=new Date(this.valueOf());let result=date instanceof Date&&!isNaN(date);if(andFuture){result=result&&date>=new Date().startOfDay();}
28return result;}
29Date.prototype.isFuture=function(){var date=new Date(this.valueOf());return date>new Date();}
30Date.prototype.startOfDay=function(){var date=new Date(this.valueOf());return new Date(date.setHours(0,0,0,0));}
31Date.prototype.endOfDay=function(){var date=new Date(this.valueOf());return new Date(date.setHours(23,59,59,59));}
32function getDatesRange(startDate,endDate){var dateArray=new Array();var currentDate=startDate;while(currentDate<=endDate){dateArray.push(new Date(currentDate));currentDate=currentDate.addDays(1);}
33return dateArray;}
34function getTextRangeDates(startDate,endDate,type='long'){if(!startDate instanceof Date===false){startDate=new Date(startDate);}
35if(!endDate instanceof Date===false){endDate=new Date(endDate);}
36let result='';if(startDate.isValid()&&endDate.isValid()){let langIso=language.toLowerCase()+'-'+language.toUpperCase();let paramsDateFrom={day:'numeric',month:type,year:'numeric'};let paramsDateTo={day:'numeric',month:type,year:'numeric'};let years=[startDate.getFullYear(),endDate.getFullYear()];if(years[0]===years[1]){delete paramsDateFrom.year;}
37let months=[startDate.getMonth(),endDate.getMonth()];if(months[0]===months[1]){delete paramsDateFrom.month;}
38result=startDate.toLocaleDateString(langIso,paramsDateFrom)+' - '+endDate.toLocaleDateString(langIso,paramsDateTo);}
39return result.trimAll();}
40Number.prototype.isBetween=function(a,b){return this.valueOf()>=a&&this.valueOf()<=b;}
41Array.prototype.first=function(fallback=[]){let self=this.valueOf();let result=fallback;if(self.length>0){result=self[0];}
42return result;}
43Array.prototype.last=function(){let self=this.valueOf();let result=[];if(self.length>0){result=self[self.length-1];}
44return result;}
45Array.prototype.unique=function(){let self=this.valueOf();return[...new Set(self)];}
46Array.prototype.intersect=function(needles=[],strict=false){let self=this.valueOf();if(needles.length===0&&strict===false){return this.valueOf();}
47return self.filter(value=>needles.includes(value));}
48Array.prototype.notIntersect=function(needles=[],bilateral=false){let self=this.valueOf();let result=self.filter(value=>!needles.includes(value));if(bilateral===true){result=result.concat(needles.filter(value=>!self.includes(value))).unique();}
49return result;}
50Array.prototype.groupByField=function(key){let arr=this.valueOf();return arr.reduce(function(rv,x){(rv[x[key]]=rv[x[key]]||[]).push(x);return rv;},{});}
51function clone(obj){var copy;if(null==obj||"object"!=typeof obj)return obj;if(obj instanceof Date){copy=new Date();copy.setTime(obj.getTime());return copy;}
52if(obj instanceof Array){copy=[];for(var i=0,len=obj.length;i<len;i++){copy[i]=clone(obj[i]);}
53return copy;}
54if(obj instanceof Object){copy={};for(var attr in obj){if(obj.hasOwnProperty(attr))copy[attr]=clone(obj[attr]);}
55return copy;}
56throw new Error("Unable to copy obj! Its type isn't supported.");}
57Array.prototype.clone=function(key){if(typeof structuredClone==='function'){return structuredClone(this.valueOf());}else{return clone(this.valueOf());return this.valueOf();}}
58Array.prototype.chunk=function(itemsPerChunk=8){let elements=this.valueOf();let chunks=[];let maxLength=Math.floor(elements.length / itemsPerChunk);if(elements.length%itemsPerChunk>0){maxLength++;}
59let j=0;for(let i=0;i<maxLength;i++){chunks.push(elements.slice(j,j+itemsPerChunk));j+=itemsPerChunk;}
60return chunks;}
61Array.prototype.empty=function(){return this.valueOf().length===0;}
62Array.prototype.trigger=function(element,mode=1){let elements=this.valueOf();let JSONelement=JSON.stringify(sortObjectKeys(element));let occurrence=elements.findIndex(a=>JSON.stringify(sortObjectKeys(a))===JSONelement);if(occurrence===-1){if(mode!==3){elements.push(element);}}else{if(mode!==2){elements.splice(occurrence,1);}}
63return elements;}
64function sortObjectKeys(object,mode='asc'){return Object.keys(object).sortArray(mode).reduce((obj,key)=>{obj[key]=object[key];return obj;},{});}
65function getSortedObjectKeysByArray(startingObject,sortingArray=[],options={}){let result=[];let sortedKeys=Object.keys(startingObject).sortByArray(sortingArray,options);sortedKeys.forEach(key=>
65{result.push([key,startingObject[key]]);});return result;}
66function diffInDays(dateFrom,dateTo){if(!dateFrom instanceof Date){dateFrom=new Date(dateFrom);}
67if(!dateTo instanceof Date){dateTo=new Date(dateTo);}
68dateFrom=dateFrom.getTime();dateTo=dateTo.getTime();return parseInt((dateTo-dateFrom)/(1000*60*60*24));}
69String.prototype.stripTags=function(){return this.valueOf().replace(/(<([^>]+)>)/gi,"");}
70String.prototype.clearText=function(options={}){let separator=options.separator??'-';return this.valueOf().replaceAll(' ',separator).normalize('NFD').replace(/[\u0300-\u036f]/g,'');}
71String.prototype.getTextContent=function(){try{let htmlElement=document.createElement('div');htmlElement.innerHTML=this.valueOf();return htmlElement.textContent;}catch(exception){return this.valueOf();}}
72String.prototype.isHTML=function(){return this.valueOf().getTextContent()!==this.valueOf();}
73String.prototype.splitUntil=function(separator='-',limit=null){let result=[];let self=this.valueOf();self=self.split(separator);if(limit!==null){let lastPart=self.slice(parseInt(limit)).join(separator);result=self.slice(0,limit);result.push(lastPart);}
74return result;}
75String.prototype.ucFirst=function(){return this.valueOf().charAt(0).toUpperCase()+this.valueOf().slice(1);}
76String.prototype.ucWords=function(){return this.valueOf().toLowerCase().replace(/\b\w/g,function(char){return char.toUpperCase();});}
77String.prototype.stripTags=function(){var html=this.valueOf();var div=document.createElement("div");div.innerHTML=html;var text=div.textContent||div.innerText||"";return text;}
78function sleep(time){return new Promise((resolve)=>setTimeout(resolve,time));}
79function getTextRangeDates(dateFrom,dateTo,type='long'){let result='';if(dateFrom instanceof Date&&dateTo instanceof Date){let langIso=lang.toLowerCase()+'-'+lang.toUpperCase();let paramsDateFrom={day:'numeric',month:type,year:'numeric'};let paramsDateTo={day:'numeric',month:type,year:'numeric'};let years=[dateFrom.getFullYear(),dateTo.getFullYear()];if(years[0]===years[1]){delete paramsDateFrom.year;}
80let months=[dateFrom.getMonth(),dateTo.getMonth()];if(months[0]===months[1]){delete paramsDateFrom.month;}
81result=dateFrom.toLocaleDateString(langIso,paramsDateFrom)+' - '+dateTo.toLocaleDateString(langIso,paramsDateTo);}
82return result.trimAll();}
83String.prototype.replaceValues=function(toReplace,replaceWith){let currentValue=this.valueOf();if(!Array.isArray(toReplace)){toReplace=[toReplace];}
84if(!Array.isArray(replaceWith)){replaceWith=[replaceWith];}
85if(toReplace.length!==replaceWith.length){return currentValue;}
86for(let i=0;i<toReplace.length;i++){currentValue=currentValue.replaceAll(toReplace[i],replaceWith[i]);}
87return currentValue;}
88String.prototype.trimAll=function(){return this.valueOf().replace(/ +(?= )/g,'');}
89String.prototype.isNumeric=function(){return!isNaN(this.valueOf())&&!isNaN(parseFloat(this.valueOf()));}
90Array.prototype.sortArray=function(type='asc'){let self=this.valueOf();let sortingExpression='(a, b) => a - b';switch(type){case'asc':sortingExpression='(a, b) => a - b';break;case'desc':sortingExpression='(a, b) => b - a';break;default:break;}
91return self.sort(eval(sortingExpression));}
92Array.prototype.sortByArray=function(sortingArray=[],options={}){let itemsArray=this.valueOf();let itemsLength=itemsArray.length+1;return itemsArray.sort((a,b)=>{let positionOfA=sortingArray.indexOf(a);let positionOfB=sortingArray.indexOf(b);if(positionOfA<0){positionOfA=itemsLength;}
93if(positionOfB<0){positionOfB=itemsLength;}
94return positionOfA-positionOfB});}
95Array.prototype.sortByDateRate=function(firstRelateds=false,firstRate=false){let monthsOrder=['T_GENNAIO','T_FEBBRAIO','T_MARZO','T_APRILE','T_MAGGIO','T_GIUGNO','T_LUGLIO','T_AGOSTO','T_SETTEMBRE','T_OTTOBRE','T_NOVEMBRE','T_DICEMBRE'];let ratesOrder=['RATE_1','RATE_2','RATE_3'];let currentMonth='';if(isDefined(localStorage.dateFrom)){currentMonth=new Date(localStorage.dateFrom).getMonthName('it-IT').toUpperCase()}else{currentMonth=new Date().getMonthName('it-IT').toUpperCase();}
96let currentMonthPosition=monthsOrder.findIndex(a=>a==='T_'+currentMonth);
96monthsOrder=monthsOrder.slice(currentMonthPosition).concat(monthsOrder.slice(0,currentMonthPosition));let result=this.valueOf();result.forEach((elem,index)=>{this.valueOf()[index].score.rate=0;this.valueOf()[index].score.time=0;elem.tags.forEach(tag=>{if(tag.indexOf('T_')===0){let monthOccurrence=monthsOrder.findIndex(month=>month===tag);if(monthOccurrence!==-1&&this.valueOf()[index].score.time<monthsOrder.length-monthOccurrence){this.valueOf()[index].score.time=monthsOrder.length-monthOccurrence;}}else if(tag.indexOf('RATE_')===0){let rateOccurrence=ratesOrder.findIndex(rate=>rate===tag);if(rateOccurrence!==-1&&this.valueOf()[index].score.rate<ratesOrder.length-rateOccurrence){this.valueOf()[index].score.rate=ratesOrder.length-rateOccurrence;}}})});if(firstRate){result=this.valueOf().sort((a,b)=>b.score.time-a.score.time).sort((a,b)=>b.score.rate-a.score.rate);}else{result=this.valueOf().sort((a,b)=>b.score.rate-a.score.rate).sort((a,b)=>b.score.time-a.score.time);}
97if(firstRelateds){result=result.sort((a,b)=>b.associated-a.associated);}
98return result;}
99function trackEvents(trackingData){if(typeof(tr)==='undefined'||tr===null||typeof(trackingData)==='undefined'){return;}
100if(!Array.isArray(trackingData)){trackingData=[trackingData];}
101setTimeout(()=>{trackingData.forEach(event=>{if(event.action&&event.label){if(event.label==='url'){event.label=document.location.origin+document.location.pathname;}
102let eventData={event_label:event.label};if(typeof event.dimensions==='object'){Object.entries(event.dimensions).forEac
102h(dimension=>{eventData[dimension[0]]=dimension[1];})}
103tr.track(event.action,eventData);}})},300);}
104HTMLElement.prototype.isInViewport=function(strict=true){let element=this.valueOf();var elementTop=element.offsetTop;var elementBottom=elementTop+element.getBoundingClientRect().height;var viewportTop=window.scrollY;var viewportBottom=viewportTop+window.innerHeight;return elementBottom>viewportTop&&elementTop<viewportBottom;}
105function isVisible(element,strict=true){if(element===null){return false;}
106var elementTop=element.offsetTop;var elementBottom=elementTop+element.getBoundingClientRect().height;var viewportTop=window.scrollY;var viewportBottom=viewportTop+window.innerHeight;return elementBottom>viewportTop&&elementTop<viewportBottom;}
107function checkAnchors(){let anchorHrefs=[];document.querySelectorAll("a[href^='#']").forEach(element=>{if(element.getAttribute('href')!=='#'){anchorHrefs.push(element.getAttribute('href'));}})
108anchorHrefs.forEach(h=>{if(!isValidCssSelector(h)){document.querySelectorAll("a[href^='"+h+"']").forEach(element=>{element.remove();})}})}
109function getCurrentLocale(){return language.toLowerCase()+'-'+language.toUpperCase();}
110document.addEventListener("DOMContentLoaded",function(event){if(!document.referrer){console.log('Removing');document.querySelectorAll('.history-back').forEach(element=>{element.remove();})}});window.addEventListener('load',()=>{checkAnchors();})
111document.querySelector('.history-back')?.addEventListener("click",function(event){event.preventDefault();let backSteps=-1-(history.length-startingHistoryLength);window.history.go(backSteps);});document.querySelector('.cookies-preferences')?.addEventListener('click',function(){window.Cookiebot.show();})
112function createDatePicker(wrapper=null,options={}){let inModal=options.inModal??true;let showClearButton=options.showClearButton??false;let onlyFutureDates=options.onlyFutureDates??true;let datesToHighlight=options.datesToHighlight??[];let minimumDate=options.minimumDate instanceof Date?options.minimumDate:onlyFutureDates?new Date():null;let maximumDate=options.maximumDate instanceof Date?options.maximumDate:null;let defaultViewDate=options.defaultViewDate instanceof Date?options.defaultViewDate:minimumDate;let beforeShowDay=options.beforeShowDay;let maxNumberOfDates=options.maxNumberOfDates??1;let datepickerElement=typeof wrapper==='object'?wrapper:document.querySelector(wrapper);if(!datepickerElement){console.warn('Datepicker not created for element '+wrapper+': Please provide a start date and an end date input in the range');return;}
113let datePickerOptions={autohide:true,startDate:new Date(),language:language,todayHighlight:false,clearBtn:false,maxNumberOfDates:maxNumberOfDates,maxViewMode:2,format:{toDisplay:function(date,format,language){return new Date(date).getCurrentLocaleStringFormat();}},beforeShowDay:function(date){let result={classes:'',enabled:true};if(datesToHighlight.includes(date.startOfDay().getTime())){result.classes+=' highlight';}
114if(date.startOfDay().getTime()===new Date().startOfDay().getTime()){result.classes=result.classes+' today';}
115result.classes=result.classes.trim();if(typeof beforeShowDay==='function'){let additionalResult=beforeShowDay(date);for(const property in additionalResult){if(result[property]){result[property]+=' '+additionalResult[property];}else{result[property]=additionalResult[property];}}}
116return result;},clearButton:showClearButton};if(inModal){datePickerOptions.container=datepickerElement.closest('.date-wrapper');}
117let result=new Datepicker(datepickerElement,Object.assign(datePickerOptions,{minDate:minimumDate,maxDate:maximumDate,defaultViewDate:defaultViewDate}));datepickerElement.addEventListener('changeDate',(event)=>{event.detail.datepicker.dates.sort();let currentDate=event.detail.datepicker.dates[0];if(currentDate){currentDate=new Date(currentDate);}
118let nextHiddenInput=datepickerElement.previousElementSibling;if(nextHiddenInput&&nextHiddenInput.tagName==='INPUT'&&nextHiddenInput.type==='hidden'){nextHiddenInput.value=currentDate?.getIsoFormat()??'';nextHiddenInput.dispatchEvent(inputEvent);}
119result.refresh('picker',true);});datepickerElement.addEventListener('show',()=>{document.querySelector('.datepicker').style.zIndex=10000;setTimeout(()=>{result.refresh('picker',true);},3)})
120datepickerElement.datepicker=result;return result;}
121function inputDateRange(wrapper=null,options={}){let minimumDaysRange=options.minimumDaysRange??1;let startDate=null;let endDate=null;let rangeDatepickerWrapper=typeof wrapper==='object'?wrapper:document.querySelector(wrapper);if(!rangeDatepickerWrapper){console.warn('Datepicker not created for wrapper '+wrapper+': Please provide a valid wrapper');return;}
122let rangeStartElement=rangeDatepickerWrapper.querySelector('.range-start-date');let rangeEndElement=rangeDatepickerWrapper.querySelector('.range-end-date');
122if(!rangeStartElement||!rangeEndElement){console.warn('Datepicker not created for wrapper '+wrapper+': Please provide a start date and an end date input in the range');return;}
123options.beforeShowDay=function(date){let result={};if(startDate&&endDate&&date>startDate&&date<endDate){result.classes='range';}else if(startDate&&date.getTime()==startDate.getTime()){result.classes='selected range-start';}else if(endDate&&date.getTime()==endDate.getTime()){result.classes='selected range-end';}
124return result;}
125let rangeStartPicker=createDatePicker(rangeStartElement,Object.assign(options,{minimumDate:options.dateFromMinimumDate,maxDate:options.dateFromMaximumDate,defaultViewDate:options.dateFromDefaultViewDate}));rangeStartElement.addEventListener('changeDate',(event)=>{startDate=event.detail.date??null;if(!startDate){return;}
126setTimeout(()=>{let previousEndDate=endDate;let minimumDate=null;if(typeof minimumDaysRange==='number'){minimumDate=startDate.addDays(minimumDaysRange);}else{minimumDate=startDate.addDays(minimumDaysRange());}
127rangeEndPicker.setOptions({minDate:minimumDate});if(!endDate||endDate<minimumDate){rangeEndPicker.setDate(minimumDate);rangeEndPicker.show();}else{rangeEndPicker.setDate(previousEndDate);}},50);})
128rangeStartPicker.picker.datepicker.picker.element.addEventListener('click',function(event){if(event.target.classList.contains('day')&&!event.target.classList.contains('disabled')){rangeEndPicker.show();}});let rangeEndPicker=createDatePicker(rangeEndElement,Object.assign(options,{minimumDate:options.datToMinimumDate,maxDate:options.dateToMaximumDate,defaultViewDate:options.dateToDefaultViewDate}));rangeEndElement.addEventListener('changeDate',(event)=>{endDate=event.detail.date??null;})
129rangeEndElement.addEventListener('show',()=>{document.querySelector('.datepicker').style.zIndex=10000;setTimeout(()=>{rangeEndPicker.refresh('picker',true);},3)});let loadEvent=new Event('datepicker-load');rangeDatepickerWrapper.dispatchEvent(loadEvent);}
130function singleInputDateRange(wrapper=null,options={}){let minimumDaysRange=options.minimumDaysRange??1;let startDate=null;let endDate=null;let rangeDatePickerWrapper=typeof wrapper==='object'?wrapper:document.querySelector(wrapper);if(!rangeDatePickerWrapper){console.warn('Datepicker not created for wrapper '+wrapper+': Please provide a valid wrapper');return;}
131options.beforeShowDay=function(date){let result={};if(startDate&&endDate&&date>startDate&&date<endDate){result.classes='range';}else if(startDate&&date.getTime()==startDate.getTime()){result.classes='selected range-start';}else if(endDate&&date.getTime()==endDate.getTime()){result.classes='selected range-end';}
132return result;}
133options.maxNumberOfDates=2;let rangePicker=createDatePicker(rangeDatePickerWrapper,options);rangeDatePickerWrapper.addEventListener('changeDate',(event)=>{event.detail.datepicker.dates.sort();startDate=event.detail.datepicker.dates[0]?new Date(event.detail.datepicker.dates[0]):null;endDate=event.detail.datepicker.dates[1]?new Date(event.detail.datepicker.dates[1]):null;rangePicker.refresh('picker',true);});let loadEvent=new Event('datepicker-load');rangeDatePickerWrapper.dispatchEvent(loadEvent);}
134function roomsAndPeopleHandler(wrapper){let wrapperElement=document.querySelector(wrapper);if(!wrapperElement){console.warn('Please provide a valid wrapper ('+wrapper+' not found)');return;}
135let currentRoom=0;if(!wrapperElement.dataset.listenerAdded){wrapperElement.addEventListener('click',handleRoomClick);wrapperElement.dataset.listenerAdded="true";}
136function handleRoomClick(event){event.preventDefault();if(event.target.classList.contains('form-add-room')){addRoom();}else if(event.target.classList.contains('form-remove-room')){let roomIndexToRemove=event.target.getAttribute('data-room');if(roomIndexToRemove){removeRoom(roomIndexToRemove);}}}
137function addRoom(){if(currentRoom>8)return;currentRoom++;let newRoom=wrapperElement.querySelector('.room-data')?.cloneNode(true);newRoom.querySelectorAll('input, select').forEach(element=>{element.classList.remove('error');});newRoom.setAttribute('data-room',currentRoom);newRoom.querySelector('.room-stats .add-remove-wrapper').insertAdjacentHTML('beforeend',`<a class="form-remove-room no-hide" data-room="${currentRoom}" href="javascript:void(0);">
138
139                <img width="16" src="/imgfiles/icons/general/icon-minus.svg" 
140
141                     title="${labels['LBL_RIMUOVI_CAMERA'] ?? 'Rimuovi Camera'}" 
142
143                     alt="${labels['LBL_RIMUOVI_CAMERA'] ?? 'Rimuovi Camera'}" 
144
145                     class="me-2 mb-1"/>${labels['LBL_RIMUOVI_CAMERA'] ?? 'Rimuovi Camera'}
146
147            </a>`);newRoom.querySelectorAll('.room-number').forEach(element=>{element.textContent=currentRoom+1;});newRoom.querySelector('.children-ages-container').innerHTML='';let formId=wrapperElement.closest('form')?.id??'form';let adultsSelect=newRoom.querySelector('.adults-select');let childrenSelect=newRoom.querySelector('.form-children-select');if(adultsSelect){adultsSelect.setAttribute('name',`rooms[${currentRoom}][adultsNumber]`);adultsSelect.setAttribute('id',`${formId}_room_${currentRoom}_adults_number`);if(adultsSelect.previousElementSibling?.tagName==='LABEL'){adultsSelect.previousElementSibling.setAttribute('for',`${formId}_room_${currentRoom}_adults_number`);}}
148if(childrenSelect){childrenSelect.setAttribute('name',`rooms[${currentRoom}][childrenNumber]`);childrenSelect.setAttribute('id',`${formId}_room_${currentRoom}_children_number`);if(childrenSelect.previousElementSibling?.tagName==='LABEL'){childrenSelect.previousElementSibling.setAttribute('for',`${formId}_room_${currentRoom}_children_number`);}}
149wrapperElement.querySelector('.rooms-container').insertAdjacentHTML('beforeend',newRoom.outerHTML);}
150function removeRoom(roomIndexToRemove){wrapperElement.querySelector(`.rooms-container .room-data[data-room="${roomIndexToRemove}"]`)?.remove();recalculateRoomsNumbers();}
151function recalculateRoomsNumbers(){currentRoom=-1;wrapperElement.querySelectorAll('.rooms-container .room-data').forEach(element=>{currentRoom++;element.setAttribute('data-room',currentRoom);element.querySelector('.form-remove-room')?.setAttribute('data-room',currentRoom);element.querySelectorAll('.room-number').forEach(roomNumber=>
151{roomNumber.textContent=currentRoom+1;});let formId=wrapperElement.closest('form')?.id??'form';let adultsSelect=element.querySelector('.adults-select');let childrenSelect=element.querySelector('.form-children-select');if(adultsSelect){adultsSelect.setAttribute('name',`rooms[${currentRoom}][adultsNumber]`);adultsSelect.setAttribute('id',`${formId}_room_${currentRoom}_adults_number`);if(adultsSelect.previousElementSibling?.tagName==='LABEL'){adultsSelect.previousElementSibling.setAttribute('for',`${formId}_room_${currentRoom}_adults_number`);}}
152if(childrenSelect){childrenSelect.setAttribute('name',`rooms[${currentRoom}][childrenNumber]`);childrenSelect.setAttribute('id',`${formId}_room_${currentRoom}_children_number`);if(childrenSelect.previousElementSibling?.tagName==='LABEL'){childrenSelect.previousElementSibling.setAttribute('for',`${formId}_room_${currentRoom}_children_number`);}}
153element.querySelector('.children-ages-container').querySelectorAll('select').forEach((selectElement,i)=>{selectElement.setAttribute('name',`rooms[${currentRoom}][childrenAges][${i}]`);});});}
154childrenHandler(wrapperElement);}
155function childrenHandler(wrapperElement){if(!wrapperElement){console.warn('Please provide a valid wrapper ('+wrapper+' not found)');return;}
156let childrenAgeOptions='';for(let i=0;i<18;i++){childrenAgeOptions+='<option value="'+i+'">'+i+'</option>';}
157wrapperElement.addEventListener('change',function(event){event.preventDefault();if(event.target.classList.contains('form-children-select')){manageChildren(event.target);}})
158function manageChildren(childrenSelectElement){let childrenNumber=parseInt(childrenSelectElement.value);let closestRoomData=childrenSelectElement.closest('.room-data');let childrenContainer=closestRoomData?.querySelector('.children-ages-container');let roomNumber=closestRoomData.getAttribute('data-room');let currentAgesSelects=childrenContainer.querySelectorAll('select').length;if(currentAgesSelects>childrenNumber){let difference=currentAgesSelects-childrenNumber;Array.from(childrenContainer.querySelectorAll('select')).slice(-difference).forEach(childrenSelect=>{childrenSelect.parentElement.remove();})}else{let childrenAgesSelects='';for(let i=currentAgesSelects;i<childrenNumber;i++){childrenAgesSelects+='<div class="col-sm-6 mt-3"><select name="rooms['+roomNumber+'][childrenAges]['+i+']" class="form-control required" required><option value="">'+labels['LBL_ETA_BAMBINO']+' *</option>'+childrenAgeOptions+'</select></div>';}
159childrenContainer.insertAdjacentHTML('beforeend',childrenAgesSelects);}}}
160function isValidCssSelector(selector,strict=false){try{document.querySelector(selector);}catch(ex){return false;}
161return!strict||!!document.querySelector(selector);}
162function scrollToUrlAnchor(timeout=0){let anchor=window.location.hash;if(!isValidCssSelector(anchor,true)){return;}
163history.pushState({},'',window.location.origin+window.location.pathname);window.addEventListener('scriptsLoaded',function(){applyAnchor();});function applyAnchor(){console.log('scrolling to '+anchor+' '+timeout);setTimeout(()=>{$('html, body').stop().animate({scrollTop:$(anchor).offset().top-70},1500,'easeInOutExpo');if(!window.location.hash){history.pushState({},'',window.location.href+anchor);}},timeout);}}
164function loadCollapsibleContent(){const collapsibleDivs=document.querySelectorAll('.collapsible');const collapsibleLinks=document.querySelectorAll('.collapsible-link');collapsibleLinks.forEach((link,index)=>{link.addEventListener('click',function(event){event.preventDefault();const collapsibleDiv=collapsibleDivs[index];if(collapsibleDiv.style.maxHeight){collapsibleDiv.style.maxHeight=null;link.textContent=labels.LBL_LEGGI_DI_PIU;}else{collapsibleDiv.style.maxHeight=collapsibleDiv.scrollHeight+'px';link.textContent=labels.LBL_LEGGI_DI_MENO;}});});}
165function openFormsFromUrl(timeout=0){let requestParams=getRequestParam
165s(false);setTimeout(()=>{if(requestParams.newsletter){showWindow('_newsletterpop');}else if(requestParams.info_request){showWindow('_infopop');}},timeout);}
166function delay(callback,ms){var timer=0;return function(){var context=this,args=arguments;clearTimeout(timer);timer=setTimeout(function(){callback.apply(context,args);},ms||0);};}
167function xhrSynchronousRequest(endPoint,method='GET'){let xhr=new XMLHttpRequest();xhr.open(method,endPoint);try{xhr.send();if(xhr.status===200){return xhr.response;}else{return false;}}catch(err){console.warn(err);return false;}}
168function synchronousRequest(url){const xhr=new XMLHttpRequest();xhr.open('GET',url,false);xhr.send(null);if(xhr.status===200){let responseContentType=xhr.getResponseHeader('Content-Type');switch(responseContentType){case'application/json':return JSON.parse(xhr.responseText);break;default:return xhr.responseText;}}else{throw new Error('Request failed: '+xhr.statusText);}}
169async function asynchronousRequest(url='',method='POST',data={},headers={}){let payload={method:method,headers:headers,};if(method==='POST'){payload.body=JSON.stringify(data);if(!payload.headers['Content-Type']){payload.headers['Content-Type']='application/json';}}
170const response=await fetch(url,payload);if(response.status=='401'){window.location.reload();}
171if(response.headers.get('Content-Type')==='application/zip'){return response.blob()}else if(response.headers.get('Content-Type').includes('text/html')){return response.text();}else{return response.json();}}
172function scrollToElement(element,options={}){let offset=options.offset??0;let elementPosition=element.getBoundingClientRect().top;let finalPosition=elementPosition+window.pageYOffset-offset;window.scrollTo({top:finalPosition,behavior:'smooth'});}
173function calculateNightDifference(startDate,endDate){const start=new Date(startDate);const end=new Date(endDate);if(end<start){throw new Error("End date must be after start date.");}
174const differenceMs=end-start;const differenceDays=differenceMs /(1000*60*60*24);const differenceNights=Math.ceil(differenceDays);return differenceNights;}
175function formatDateToDDMMYYYY(date){const d=new Date(date);const day=String(d.getDate()).padStart(2,'0');const month=String(d.getMonth()+1).padStart(2,'0');const year=d.getFullYear();return`${day}${month}${year}`;}
176function formatDates(date1,date2){const formattedDate1=formatDateToDDMMYYYY(date1);const formattedDate2=formatDateToDDMMYYYY(date2);return`${formattedDate1}_${formattedDate2}`;}
177function setFocusTrapOnModal(modalElement){if(!modalElement){return;}
178if(!(modalElement instanceof HTMLElement)){try{modalElement=document.querySelector(modalElement);if(!modalElement){return;}}catch(exception){return;}}
179if(!modalElement.classList.contains('contentWindow')&&modalElement.role!=='alertdialog'){return;}
180let modalAccessibleElements=modalElement.querySelectorAll('a, button, input:not([type="hidden"]):not([style*="display: none"]), textarea, select, [tabindex]:not([tabindex="-1"])');if(modalAccessibleElements.length<1){return;}
181let modalFirstAccessibleElement=modalAccessibleElements[0];let modalLastAccessibleElement=modalAccessibleElements[modalAccessibleElements.length-1];if(modalFirstAccessibleElement){modalFirstAccessibleElement.focus();modalElement.addEventListener('keydown',(event)=>{if(event.key==='Tab'&&document.activeElement===modalLastAccessibleElement){event.preventDefault();event.stopPropagation();event.stopImmediatePropagation();modalFirstAccessibleElement.focus();}});console.log('set focus trap on modal with id',modalElement.id);}}
182function resetForm(form){if(form.tagName!=='FORM'){return;}
183form.reset();if(typeof grecaptcha!=='undefined'){grecaptcha.reset();}
184let childrenAgesContainer=form.querySelector('.children-ages-container');if(childrenAgesContainer){childrenAgesContainer.innerHTML='';}}
185function preventAutomaticBrowserInitialScroll(){window.addEventListener('unload',()=>{window.scrollTop=0;});window.onunload=function(){window.scrollTo(0,0);}
186if('scrollRestoration'in history){history.scrollRestoration='manual';}}

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.