const ConfiguratorTxt={selectOption:"Choose at least 1 option",minString:"Min. number of characters ",maxString:"Max. number of characters ",minDigit:"Minimum value ",maxDigit:"Maximum value "};Configurator=function(e){const t=this;this.params=e||{},this.vars={dependencies:"object"==typeof configuratorDependencies&&configuratorDependencies},this.customDelay={set:function(e,t){this.del(),this.timeoutID=window.setTimeout((()=>{t&&t()}),e)},del:function(){"number"==typeof this.timeoutID?window.clearTimeout(this.timeoutID):delete this.timeoutID}},this.generateInputText=e=>{const t=e.getAttribute("type"),r=e.getAttribute("data-min"),o=e.getAttribute("data-max"),c=e.value;let n="";if("number"===t){if(r&&parseFloat(c,10)<parseFloat(r)||o&&parseFloat(c)>parseFloat(o))return r||o}else if(r&&c.length<r||o&&c.length>o){for(let e=0;e<r;e++)n+="a";return n}return c},this.fetchPrice=async()=>{document.getElementById("projector_prices_wrapper").classList.add("load-content");const e=new URLSearchParams(new FormData(document.getElementById("projector_form")));let r=[];const o=[...e.keys()].reduce(((t,o,c,n)=>(n.indexOf(o)!==c&&t.indexOf(o)<0&&(t=[...t,o],r=[...r,e.getAll(o)]),t)),[]);o.length&&o.forEach(((t,o)=>{e.delete(t),r[o].forEach(((r,o)=>{e.set(`${t}[${o}]`,r)}))}));const c=document.querySelectorAll(".configurator__item[data-limits]:not(.--hide) input");c.length&&c.forEach((r=>{e.set(r.getAttribute("name"),t.generateInputText(r,e.get(r.getAttribute("name"))))})),[...e.keys()].find((e=>"number"===e))||e.set("number",document.getElementById("projector_number")?.value||1),[...e.keys()].find((e=>"size"===e))||e.set("size",document.getElementById("projector_size_hidden").value),[...e.keys()].find((e=>"product"===e))||e.set("product",document.getElementById("projector_product_hidden").value);try{const t=await fetch("/ajax/calculatePrice.php",{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded; charset=UTF-8"},body:e}),r=await t.json();return document.getElementById("projector_prices_wrapper").classList.remove("load-content"),r}catch(e){return document.getElementById("projector_prices_wrapper").classList.remove("load-content"),!1}},this.setPrice=async e=>{e&&document.getElementById("projector_prices_wrapper").classList.add("load-content"),this.customDelay.set(500,(async()=>{const e=await this.fetchPrice();e&&(e.priceformula_calculation_error&&e.priceformula_calculation_error_msg?document.getElementById("projector_prices_wrapper").classList.add("load-content"):document.getElementById("projector_price_value").innerHTML=document.getElementById("projector_configurator").hasAttribute("data-netto")?e.worth_net_formatted:e.worth_formatted,this.setPriceCallback&&this.setPriceCallback(e))}))},this.toggleDependencies=(e,t,r)=>{if(this.vars.dependencies&&this.vars.dependencies[e]&&this.vars.dependencies[e][t]){const o=document.querySelector(`.configurator__item[data-name="${e}"]`),c=o.querySelectorAll('input[type="checkbox"]:checked');let n=!0;"checkbox"!==o.getAttribute("data-type")||c.length||(n=!1),Object.keys(this.vars.dependencies[e][t]).forEach((o=>{let a;c.length?(a=!!Array.isArray(this.vars.dependencies[e][t][o])&&[],c.forEach((r=>{Array.isArray(this.vars.dependencies[e][t][o])?a.push(...this.vars.dependencies[e][r.value][o]):!0===this.vars.dependencies[e][r.value][o]&&(a=!0)}))):a=this.vars.dependencies[e][t][o];const i=document.querySelector(`.configurator__item[data-name="${o}"]`);i&&(i.classList.contains("--dependencies")||i.classList.add("--dependencies"),(a.length||!0===a)&&n?(i.classList.contains("--hide")&&i.classList.remove("--hide"),"select"===i.getAttribute("data-type")?i.querySelectorAll("option, .f-dropdown-li").forEach((e=>{e.classList.remove("--show"),e.classList.remove("--last")})):i.querySelectorAll(".f-group").forEach((e=>{e.classList.remove("--show")})),i.querySelectorAll("option, input").forEach((e=>{e.disabled=!1})),a.length&&(a.forEach(((e,t)=>{const o=i.querySelector(`[value="${e}"]`);if(o)if("OPTION"===o.tagName){const c=i.querySelector(`[data-value="${e}"]`);c&&(c.closest(".f-dropdown-li").classList.add("--show"),t+1===a.length&&c.closest(".f-dropdown-li").classList.add("--last")),o.classList.add("--show"),0===t&&(o.selected=!0,c&&(r&&c.classList.add("--without"),c.click()))}else o.closest(".f-group").classList.add("--show"),0===t&&"checkbox"!==o.type&&(o.checked=!0)})),"checkbox"===i.getAttribute("data-type")&&i.querySelectorAll(".f-group:not(.--show)").forEach((e=>{e.querySelector("input").checked=!1})))):(i.classList.add("--hide"),i.querySelectorAll("option, input").forEach((e=>{e.disabled=!0}))))}))}r||this.setPrice(),this.validateCheckbox()&&this.removeAlert()},this.hideDependenciesOnInit=()=>{this.vars.dependencies&&Object.keys(this.vars.dependencies).forEach((e=>{let r=!1;Object.keys(t.vars.dependencies[e]).sort().forEach((e=>{const t=document.getElementById(e),o=document.querySelector(`.f-dropdown-item[data-value="${e}"]`);(o&&o.classList.contains("--selected")||t&&t.checked)&&(r=e)})),r&&t.toggleDependencies(e,r,!0)}))},this.afterGenerateDropdown=e=>{e.querySelectorAll(".f-dropdown-item").forEach((e=>{const t=`${e.hasAttribute("data-icon")?`<span class="configurator__icon"><img src="${e.getAttribute("data-icon")}" alt="${e.innerHTML}" /></span>`:""}<span class="configurator__name">${e.innerHTML}</span>${e.hasAttribute("data-price")?`<span class="configurator__price">${e.getAttribute("data-price")}</span>`:""}`;e.innerHTML=t})),e.querySelector(".f-dropdown-button").innerHTML=e.querySelector(".f-dropdown-item.--selected").innerHTML},this.afterClickDropdown=e=>{const r=e.closest(".configurator__item").getAttribute("data-name"),o=e.querySelector(".f-dropdown-item").getAttribute("data-value");e.querySelector(".f-dropdown-item").classList.contains("--without")?(t.toggleDependencies(r,o,!0),e.querySelector(".f-dropdown-item").classList.remove("--without")):t.toggleDependencies(r,o)},this.configuratorSelects=()=>{app_shop.fn.configuratorDropdowns=new SelectToDropdown({selector:this.dropdownSelectorCallback?this.dropdownSelectorCallback:".configurator .f-select",generateDropdownCallback:this.dropdownGenerateCallback?this.dropdownGenerateCallback:this.afterGenerateDropdown,clickDropdownCallback:!!this.dropdownClickCallback&&this.dropdownClickCallback,afterClickDropdownCallback:this.dropdownAfterClickCallback?this.dropdownAfterClickCallback:this.afterClickDropdown,disableMobileView:!this.dropdownMobileCallback||this.dropdownMobileCallback})},this.addAlert=(e,t)=>{if(!e.classList.contains("--alert")){const r=document.createElement("div");r.classList.add("configurator__alert"),r.innerHTML=t,e.classList.add("--alert"),e.insertBefore(r,e.firstChild)}},this.removeAlert=()=>{const e=document.querySelector(".configurator__alert");e&&(e.closest(".--alert").classList.remove("--alert"),e.parentNode.removeChild(e))},this.validateCheckbox=()=>{const e=document.querySelectorAll(".configurator__item[data-required]:not(.--hide)");let r=!0;return e.forEach((e=>{const o=e.querySelector('input[type="checkbox"]:checked');r&&(o||(r=!1,t.removeAlert(),t.addAlert(e,ConfiguratorTxt.selectOption)))})),r},this.getPriceFormulaParams=()=>{const e=new URLSearchParams(window.location.search);return[...e].forEach((([t])=>{t.startsWith("priceformula")||e.delete(t)})),[...e]},this.setCheckboxFromUrl=(e,t)=>{const r=e.querySelectorAll('input[type="checkbox"]');r.length&&r.forEach((e=>{const r=e.name,o=e.value;t.find((([e,t])=>e===r&&t===o))?e.checked=!0:e.checked=!1}))},this.setRadioFromUrl=(e,t)=>{const r=e.querySelector('input[type="radio"]');if(!r)return;const o=r.name,c=t.find((([e])=>e===o));if(!c)return;const[n,a]=c,i=e.querySelector(`input[type="radio"][name="${n}"][value="${a}"]`);i&&(i.checked=!0)},this.setSelectFromUrl=(e,t)=>{const r=e.querySelector("select");if(!r)return;const o=r.name,c=t.find((([e])=>e===o));if(!c)return;const n=c[1];r.value=n},this.setInputFromUrl=(e,t)=>{const r=e.querySelector("input");if(!r)return;const o=r.name,c=t.find((([e])=>e===o));if(!c)return;const n=c[1];r.value=n},this.paramsFromUrl=()=>{const e=this.getPriceFormulaParams();if(!e.length)return;document.querySelectorAll(".configurator__item").forEach((t=>{const{type:r}=t.dataset;switch(r){case"checkbox":this.setCheckboxFromUrl(t,e);break;case"radio":this.setRadioFromUrl(t,e);break;case"select":this.setSelectFromUrl(t,e);break;case"input":this.setInputFromUrl(t,e)}}))},this.initEvents=()=>{document.getElementById("projector_form").addEventListener("change",(function(e){if(e.target.closest(".configurator")&&"input"!==e.target.closest(".configurator__item").getAttribute("data-type")){const r=e.target.closest(".configurator__item").getAttribute("data-name"),o=e.target.value;t.toggleDependencies(r,o)}})),document.querySelectorAll('.configurator input[type="number"], .configurator input[type="text"]').forEach((e=>{e.addEventListener("input",(function(e){e.target.reportValidity(),t.setPrice()}))})),document.getElementById("projector_form").addEventListener("submit",(function(e){t.validateCheckbox()||e.preventDefault();const r=[];document.querySelectorAll('.configurator input[type="checkbox"]:checked').forEach((e=>{const t=e.getAttribute("name");r.push(t)}));[...new Set(r)].forEach((e=>{const t=document.querySelectorAll(`.configurator input[name="${e}"]:checked`);t.length>1&&t.forEach(((t,r)=>{t.setAttribute("name",`${e}[${r}]`)}))}))}))},this.init=()=>{document.getElementById("projector_prices_wrapper").classList.add("load-content");const{dropdownSelectorCallback:e,dropdownGenerateCallback:t,dropdownClickCallback:r,dropdownAfterClickCallback:o,dropdownMobileCallback:c,setPriceCallback:n}=this.params;this.dropdownSelectorCallback=e,this.dropdownGenerateCallback=t,this.dropdownClickCallback=r,this.dropdownAfterClickCallback=o,this.dropdownMobileCallback=c,this.setPriceCallback=n,this.paramsFromUrl(),this.configuratorSelects(),this.hideDependenciesOnInit(),this.initEvents()}},app_shop.run((function(){const e=document.querySelector(".configurator.--skeleton"),t=document.querySelector(".configurator:not(.--skeleton)");e&&t&&e.replaceWith(t),app_shop.fn.configurator=new Configurator,app_shop.fn.configurator.init();const r=projectorEndStartCallback;projectorEndStartCallback=function(){r(),app_shop.fn.configurator.setPrice(!0)},projectorEndStartCallback()}),"all",".configurator",!0);