1(function (){ 2if(typeof window.SMAnalytics!=="undefined") return; 3var adapters=[]; 4window.SMAnalytics={ 5register: function (adapter){ 6adapters.push(adapter); 7}, 8emit: function (eventName, payload){ 9adapters.forEach(function (a){ 10try { 11if(typeof a.track==="function") a.track(eventName, payload||{}); 12} catch (e){ 13console.error(e); 14}}); 15}, 16}; 17var plausibleAdapter={ 18track: function (eventName, payload){ 19if(typeof window.plausible!=="function") return; 20try { 21window.plausible(eventName, { props: payload||{}}); 22} catch (e){ 23console.error(e); 24}}, 25}; 26window.SMAnalytics.register(plausibleAdapter); 27})(); 28(function (){ 29function translate(text, domain){ 30if(window.wp && 31window.wp.i18n && 32typeof window.wp.i18n.__==="function" 33){ 34return window.wp.i18n.__(text, domain); 35} 36return text; 37} 38function ensureLiveRegion(){ 39var existing=document.getElementById("siteminder-live-region"); 40if(existing) return existing; 41var region=document.createElement("div"); 42region.id="siteminder-live-region"; 43region.className="siteminder-sr-only"; 44region.setAttribute("role", "status"); 45region.setAttribute("aria-live", "polite"); 46document.body.appendChild(region); 47return region; 48} 49function emitEvent(name, payload){ 50if(typeof window.SMAnalytics!=="undefined" && 51typeof window.SMAnalytics.emit==="function" 52){ 53window.SMAnalytics.emit(name, payload||{}); 54}} 55document.addEventListener("click", function (e){ 56var el = 57e.target.closest && 58e.target.closest(".siteminder-book-button, .ibe.siteminder-book-button, .ibe", 59); 60if(el){ 61emitEvent("siteminder:cta_click", { 62text: el.textContent ? el.textContent.trim():"", 63}); 64}}); 65document.addEventListener("DOMContentLoaded", function (){ 66var embeds=document.querySelectorAll('.ibe[data-widget="embed"]'); 67if(embeds.length){ 68embeds.forEach(function (el){ 69emitEvent("siteminder:embed_loaded", { 70channel: el.getAttribute("data-channelcode")||"", 71}); 72var region=ensureLiveRegion(); 73region.textContent=translate("Buchungsmodul geladen.", "siteminder"); 74}); 75}}); 76})(); 77(function (){ 78function getSourceParam(){ 79var params=new URLSearchParams(window.location.search||""); 80return ( 81params.get("_src") || 82params.get("src") || 83params.get("utm_source") || 84params.get("source") || 85"" 86); 87} 88function getLocaleValue(){ 89var htmlLang=document.documentElement&&document.documentElement.lang; 90if(htmlLang) return htmlLang; 91if(navigator.language) return navigator.language; 92return ""; 93} 94function setHiddenInputs(form){
95var sourceInput=form.querySelector("[data-source-input]"); 96var localeInput=form.querySelector("[data-locale-input]"); 97var source=getSourceParam(); 98var locale=getLocaleValue(); 99if(sourceInput&&!sourceInput.value&&source){ 100sourceInput.value=source; 101} 102if(localeInput&&!localeInput.value&&locale){ 103localeInput.value=locale; 104}} 105function init(){ 106var forms=document.querySelectorAll("form.siteminder-booking-widget, form.siteminder-booking-form", 107); 108if(!forms.length) return; 109forms.forEach(function (form){ 110setHiddenInputs(form); 111}); 112} 113document.addEventListener("DOMContentLoaded", init); 114})(); 115document.addEventListener("DOMContentLoaded", function (){ 116document.querySelectorAll('.ibe[data-widget="embed"][data-use_parent="true"]').forEach(function (el){ 117var applyToIframe=function (iframe){ 118try { 119iframe.style.width='100%'; 120iframe.style.maxWidth='none'; 121iframe.style.height='100%'; 122iframe.removeAttribute('width'); 123iframe.removeAttribute('height'); 124} catch (e){}}; 125var iframe=el.querySelector('iframe'); 126if(iframe){ 127applyToIframe(iframe); 128return; 129} 130var mo=new MutationObserver(function (mutations, obs){ 131var ifr=el.querySelector('iframe'); 132if(ifr){ 133applyToIframe(ifr); 134obs.disconnect(); 135}}); 136mo.observe(el, { childList: true, subtree: true }); 137}); 138}); 139(function (){ 140var MONTHS=[ 141"Jan", 142"Feb", 143"Mar", 144"Apr", 145"May", 146"Jun", 147"Jul", 148"Aug", 149"Sep", 150"Oct", 151"Nov", 152"Dec", 153]; 154var WEEKDAYS=["Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"]; 155function pad(value){ 156return value < 10 ? "0" + value:String(value); 157} 158function formatISO(date){ 159return ( 160date.getFullYear() + 161"-" + 162pad(date.getMonth() + 1) + 163"-" + 164pad(date.getDate()) 165); 166} 167function formatDisplay(date){ 168return pad(date.getDate()) + "." + pad(date.getMonth() + 1) + "." + date.getFullYear(); 169} 170function normalizeDate(date){ 171return new Date(date.getFullYear(), date.getMonth(), date.getDate()); 172} 173function addMonths(date, offset){ 174return new Date(date.getFullYear(), date.getMonth() + offset, 1); 175} 176function addDays(date, offset){ 177return new Date(date.getFullYear(), date.getMonth(), date.getDate() + offset); 178} 179function isSameDay(a, b){ 180return ( 181a && 182b && 183a.getFullYear()===b.getFullYear() && 184a.getMonth()===b.getMonth() && 185a.getDate()===b.getDate() 186); 187} 188function renderMonth(container, monthDate, state){ 189var year=monthDate.getFullYear(); 190var month=monthDate.getMonth(); 191var firstOfMonth=new Date(year, month, 1); 192var startOffset=(firstOfMonth.getDay() + 6) % 7; 193var startDate=new Date(year, month, 1 - startOffset); 194var today=normalizeDate(new Date()); 195var html=""; 196html +='<div class="siteminder-calendar__header">' + MONTHS[month] + " " + year + "</div>"; 197html +='<div class="siteminder-calendar__weekdays">'; 198WEEKDAYS.forEach(function (day){ 199html +='<div class="siteminder-calendar__weekday">' + day + "</div>"; 200}); 201html +="</div>"; 202html +='<div class="siteminder-calendar__grid">'; 203for (var i=0; i < 42; i +=1){ 204var dayDate=new Date(startDate.getFullYear(), startDate.getMonth(), startDate.getDate() + i); 205var inMonth=dayDate.getMonth()===month; 206var classes=["siteminder-calendar__day"]; 207if(!inMonth) classes.push("is-outside"); 208if(isSameDay(dayDate, today)) classes.push("is-today"); 209if(state.from&&isSameDay(dayDate, state.from)){ 210classes.push("is-range-start", "is-selected"); 211} 212if(state.to&&isSameDay(dayDate, state.to)){ 213classes.push("is-range-end", "is-selected"); 214} 215if(state.from&&state.to){ 216var time=dayDate.getTime(); 217if(time > state.from.getTime()&&time < state.to.getTime()){ 218classes.push("is-in-range"); 219}} 220html += 221'<button type="button" class="' + 222classes.join(" ") + 223'" data-date="' + 224formatISO(dayDate) + 225'">' + 226dayDate.getDate() + 227"</button>"; 228} 229html +="</div>"; 230container.innerHTML=html; 231} 232function updateLabel(picker, state){ 233var trigger=picker.querySelector(".siteminder-range-picker__trigger"); 234var fromInput=picker.querySelector('[data-range-input="from"]'); 235var toInput=picker.querySelector('[data-range-input="to"]'); 236var fromValue=picker.querySelector('[data-range-value="from"]'); 237var toValue=picker.querySelector('[data-range-value="to"]'); 238if(state.from&&state.to){ 239if(fromValue) fromValue.textContent=formatDisplay(state.from); 240if(toValue) toValue.textContent=formatDisplay(state.to); 241fromInput.value=formatISO(state.from); 242toInput.value=formatISO(state.to); 243return; 244} 245if(state.from){ 246if(fromValue) fromValue.textContent=formatDisplay(state.from); 247if(toValue) toValue.textContent="Ende"; 248fromInput.value=formatISO(state.from); 249toInput.value=""; 250return; 251} 252if(fromValue) fromValue.textContent="Start"; 253if(toValue) toValue.textContent="Ende"; 254fromInput.value=""; 255toInput.value=""; 256} 257function initPicker(picker){ 258if(!picker||picker.getAttribute("data-sm-init")==="1") return; 259var popover=picker.querySelector(".siteminder-range-picker__popover"); 260var trigger=picker.querySelector(".siteminder-range-picker__trigger"); 261if(!popover||!trigger) return; 262var fromInput=picker.querySelector('[data-range-input="from"]'); 263var toInput=picker.querySelector('[data-range-input="to"]'); 264var monthEls=popover.querySelectorAll(".siteminder-calendar"); 265var baseMonth=new Date(); 266baseMonth=new Date(baseMonth.getFullYear(), baseMonth.getMonth(), 1); 267var state={ 268from: null, 269to: null, 270}; 271if(fromInput&&toInput&&!fromInput.value&&!toInput.value){ 272var today=normalizeDate(new Date()); 273state.from=today; 274state.to=addDays(today, 1); 275fromInput.value=formatISO(state.from); 276toInput.value=formatISO(state.to); 277} 278if(!popover.querySelector(".siteminder-calendar__nav")){ 279var nav=document.createElement("div"); 280nav.className="siteminder-calendar__nav"; 281nav.innerHTML = 282'<button type="button" class="siteminder-calendar__nav-button" data-nav="prev">‹</button>' + 283'<div class="siteminder-calendar__nav-title"></div>' + 284'<button type="button" class="siteminder-calendar__nav-button" data-nav="next">›</button>'; 285popover.insertBefore(nav, popover.firstChild); 286} 287function updateNavTitle(){ 288var navTitle=popover.querySelector(".siteminder-calendar__nav-title"); 289var nextMonth=addMonths(baseMonth, 1); 290navTitle.textContent = 291MONTHS[baseMonth.getMonth()] + 292" " + 293baseMonth.getFullYear() + 294" - " + 295MONTHS[nextMonth.getMonth()] + 296" " + 297nextMonth.getFullYear(); 298} 299function render(){ 300renderMonth(monthEls[0], baseMonth, state); 301renderMonth(monthEls[1], addMonths(baseMonth, 1), state); 302updateNavTitle(); 303} 304function toggle(open){ 305if(open){ 306popover.removeAttribute("hidden"); 307}else{ 308popover.setAttribute("hidden", "hidden"); 309}} 310trigger.setAttribute("data-placeholder", trigger.textContent||""); 311updateLabel(picker, state); 312render(); 313trigger.addEventListener("click", function (event){ 314event.preventDefault(); 315var isOpen = !popover.hasAttribute("hidden"); 316toggle(!isOpen); 317}); 318popover.addEventListener("click", function (event){ 319event.stopPropagation(); 320var target=event.target; 321if(target.matches(".siteminder-range-picker__close")){ 322toggle(false); 323return; 324} 325if(target.matches(".siteminder-range-picker__reset")){ 326state.from=null; 327state.to=null; 328updateLabel(picker, state); 329render(); 330return; 331} 332if(target.matches(".siteminder-calendar__nav-button")){ 333var dir=target.getAttribute("data-nav"); 334baseMonth=addMonths(baseMonth, dir==="prev" ? -1:1); 335render(); 336return; 337} 338if(!target.matches(".siteminder-calendar__day")) return; 339var dateStr=target.getAttribute("data-date"); 340if(!dateStr) return; 341var parts=dateStr.split("-"); 342var picked=new Date(Number(parts[0]), Number(parts[1]) - 1, Number(parts[2])); 343picked=normalizeDate(picked); 344var hadFrom = !!state.from; 345var hadTo = !!state.to; 346if(!state.from||(state.from&&state.to)){ 347state.from=picked; 348state.to=null; 349}else if(picked.getTime() < state.from.getTime()){ 350state.to=state.from; 351state.from=picked; 352}else{ 353state.to=picked; 354} 355updateLabel(picker, state); 356render(); 357if(hadFrom&&!hadTo&&state.from&&state.to){ 358toggle(false); 359}}); 360document.addEventListener("click", function (event){ 361if(!popover||popover.hasAttribute("hidden")) return; 362if(picker.contains(event.target)) return; 363toggle(false); 364}); 365document.addEventListener("keydown", function (event){ 366if(event.key!=="Escape") return; 367if(!popover||popover.hasAttribute("hidden")) return; 368toggle(false); 369}); 370picker.setAttribute("data-sm-init", "1"); 371} 372document.addEventListener("DOMContentLoaded", function (){ 373var pickers=document.querySelectorAll(".siteminder-range-picker"); 374if(!pickers.length) return;
375pickers.forEach(function (picker){ 376initPicker(picker); 377}); 378}); 379document.addEventListener("click", 380function (event){ 381var trigger=event.target.closest 382? event.target.closest(".siteminder-range-picker__trigger") 383: null; 384if(!trigger) return; 385var picker=trigger.closest(".siteminder-range-picker"); 386if(!picker) return; 387if(picker.getAttribute("data-sm-init")!=="1"){ 388initPicker(picker); 389} 390var popover=picker.querySelector(".siteminder-range-picker__popover"); 391if(popover&&popover.hasAttribute("hidden")){ 392popover.removeAttribute("hidden"); 393} 394event.preventDefault(); 395event.stopPropagation(); 396}, 397true, 398); 399})(); 400(function (){ 401function initGuestChooser(chooser){ 402if(!chooser||chooser.getAttribute("data-sm-init")==="1") return; 403var trigger=chooser.querySelector(".siteminder-guest-trigger"); 404var popover=chooser.querySelector(".siteminder-guest-popover"); 405if(!trigger||!popover) return; 406var summary=chooser.querySelector("[data-guest-summary]"); 407var inputs=chooser.querySelectorAll("[data-guest-input]"); 408function readState(){ 409var state={}; 410inputs.forEach(function (input){ 411var key=input.getAttribute("data-guest-input"); 412state[key]=parseInt(input.value||"0", 10); 413}); 414return state; 415} 416function updateSummary(state){ 417var adults=state.adults||0; 418var children=state.children||0; 419var total=adults + children; 420var label=total===1 ? "1 Gast":total + " Gaeste"; 421if(summary) summary.textContent=label; 422} 423function updateCounts(state){ 424Object.keys(state).forEach(function (key){ 425var countEl=chooser.querySelector('[data-guest-count="' + key + '"]'); 426if(countEl) countEl.textContent=String(state[key]); 427}); 428} 429function sync(){ 430var state=readState(); 431updateCounts(state); 432updateSummary(state); 433} 434function setValue(key, value){ 435inputs.forEach(function (input){ 436if(input.getAttribute("data-guest-input")===key){ 437input.value=String(value); 438}}); 439} 440trigger.addEventListener("click", function (event){ 441event.preventDefault(); 442if(popover.hasAttribute("hidden")){ 443popover.removeAttribute("hidden"); 444}else{ 445popover.setAttribute("hidden", "hidden"); 446}}); 447popover.addEventListener("click", function (event){ 448var target=event.target; 449if(target.matches(".siteminder-guest-close")){ 450popover.setAttribute("hidden", "hidden"); 451return; 452} 453if(target.matches(".siteminder-guest-reset")){ 454inputs.forEach(function (input){ 455var def=input.getAttribute("data-guest-default"); 456input.value=def||"0"; 457}); 458sync(); 459return; 460} 461if(!target.matches("[data-guest-action]")) return; 462var row=target.closest("[data-guest-type]"); 463if(!row) return; 464var type=row.getAttribute("data-guest-type"); 465var min=parseInt(row.getAttribute("data-guest-min")||"0", 10); 466var state=readState(); 467var current=state[type]||0; 468var delta=target.getAttribute("data-guest-action")==="increase" ? 1:-1; 469var next=Math.max(min, current + delta); 470setValue(type, next); 471sync(); 472}); 473document.addEventListener("click", function (event){ 474if(popover.hasAttribute("hidden")) return; 475if(chooser.contains(event.target)) return; 476popover.setAttribute("hidden", "hidden"); 477}); 478document.addEventListener("keydown", function (event){ 479if(event.key!=="Escape") return; 480if(popover.hasAttribute("hidden")) return; 481popover.setAttribute("hidden", "hidden"); 482}); 483sync(); 484chooser.setAttribute("data-sm-init", "1"); 485} 486document.addEventListener("DOMContentLoaded", function (){ 487var choosers=document.querySelectorAll(".siteminder-guest-chooser"); 488if(!choosers.length) return; 489choosers.forEach(function (chooser){ 490initGuestChooser(chooser); 491}); 492}); 493document.addEventListener("click", 494function (event){ 495var trigger=event.target.closest 496? event.target.closest(".siteminder-guest-trigger") 497: null; 498if(!trigger) return; 499var chooser=trigger.closest(".siteminder-guest-chooser"); 500if(!chooser) return; 501if(chooser.getAttribute("data-sm-init")!=="1"){ 502initGuestChooser(chooser); 503}}, 504true, 505); 506})();
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.