(function(){ const toggle=document.querySelector('[data-nav-toggle]');const nav=document.querySelector('[data-nav]'); if(toggle&&nav)toggle.addEventListener('click',()=>{const open=toggle.getAttribute('aria-expanded')==='true';toggle.setAttribute('aria-expanded',String(!open));nav.classList.toggle('open',!open)}); document.querySelectorAll('[data-tabs]').forEach(tabs=>{const buttons=tabs.querySelectorAll('[data-tab]');const panels=tabs.querySelectorAll('[data-panel]');buttons.forEach(button=>button.addEventListener('click',()=>{buttons.forEach(x=>x.classList.remove('active'));panels.forEach(x=>x.classList.remove('active'));button.classList.add('active');const panel=tabs.querySelector('[data-panel="'+button.dataset.tab+'"]');if(panel)panel.classList.add('active')}))}); document.querySelectorAll('[data-copy]').forEach(button=>button.addEventListener('click',async()=>{const target=document.querySelector(button.dataset.copy);if(!target)return;try{await navigator.clipboard.writeText(target.innerText);const old=button.textContent;button.textContent='✓ Copiato';setTimeout(()=>button.textContent=old,1800)}catch(e){target.focus&&target.focus()}})); const color=document.querySelector('input[name="colore"]');const preview=document.querySelector('[data-widget-preview]');if(color&&preview)color.addEventListener('input',()=>{preview.style.borderTop='4px solid '+color.value}); const termsModal=document.querySelector('[data-terms-modal]');const termsOpen=document.querySelector('[data-terms-open]');const termsAccept=document.querySelector('[data-terms-accept]');const termsInput=document.querySelector('[data-terms-input]');const termsStatus=document.querySelector('[data-terms-status]');const checkoutForm=document.querySelector('.checkout-grid');let termsLastFocus=null; const openTerms=()=>{if(!termsModal)return;termsLastFocus=document.activeElement;termsModal.hidden=false;document.body.classList.add('has-checkout-modal');const scroll=termsModal.querySelector('.checkout-terms-scroll');if(scroll)scroll.focus()}; const closeTerms=()=>{if(!termsModal)return;termsModal.hidden=true;document.body.classList.remove('has-checkout-modal');if(termsLastFocus&&termsLastFocus.focus)termsLastFocus.focus()}; if(termsOpen)termsOpen.addEventListener('click',openTerms); document.querySelectorAll('[data-terms-close]').forEach(button=>button.addEventListener('click',closeTerms)); if(termsAccept)termsAccept.addEventListener('click',()=>{if(termsInput)termsInput.disabled=false;if(termsStatus){termsStatus.textContent=document.documentElement.lang==='en'?'Accepted':'Accettate';termsStatus.classList.add('is-accepted')}if(termsOpen)termsOpen.textContent=document.documentElement.lang==='en'?'Review terms':'Rileggi le condizioni';closeTerms()}); if(checkoutForm)checkoutForm.addEventListener('submit',event=>{if(termsInput&&termsInput.disabled){event.preventDefault();openTerms()}}); const couponApply=document.querySelector('[data-coupon-apply]');const couponRemove=document.querySelector('[data-coupon-remove]');const couponInput=document.querySelector('input[name="coupon_code"]'); const couponUrl=button=>{const url=new URL(button.dataset.checkoutUrl||window.location.pathname,window.location.origin);const domain=document.querySelector('input[name="domain_id"]:checked');const plan=document.querySelector('input[name="plan_code"]:checked');const order=document.querySelector('input[name="order_id"]');if(domain)url.searchParams.set('domain',domain.value);if(plan)url.searchParams.set('plan',plan.value);if(order)url.searchParams.set('order',order.value);return url}; if(couponInput)couponInput.addEventListener('input',()=>{const start=couponInput.selectionStart;couponInput.value=couponInput.value.toUpperCase().replace(/^\s+|\s+$/g,'');if(start!==null)couponInput.setSelectionRange(start,start)}); if(couponApply&&couponInput)couponApply.addEventListener('click',()=>{const url=couponUrl(couponApply);url.searchParams.delete('coupon_remove');if(couponInput.value.trim())url.searchParams.set('coupon',couponInput.value.trim());else url.searchParams.set('coupon_remove','1');window.location.href=url.toString()}); if(couponRemove)couponRemove.addEventListener('click',()=>{const url=couponUrl(couponRemove);url.searchParams.delete('coupon');url.searchParams.set('coupon_remove','1');window.location.href=url.toString()}); if(couponApply&&couponInput)couponInput.addEventListener('keydown',event=>{if(event.key==='Enter'){event.preventDefault();couponApply.click()}}); const totals=document.querySelector('.checkout-totals');const formatEuro=cents=>'€ '+(cents/100).toLocaleString(document.documentElement.lang==='en'?'en-IE':'it-IT',{minimumFractionDigits:2,maximumFractionDigits:2}); if(totals)document.querySelectorAll('[data-plan-price]').forEach(plan=>plan.addEventListener('change',()=>{const base=parseInt(plan.dataset.planPrice||'0',10);const percentage=parseFloat(totals.dataset.couponPercentage||'0');const discount=Math.round(base*percentage/100);const baseOutput=totals.querySelector('[data-checkout-base]');const discountOutput=totals.querySelector('[data-checkout-discount]');const totalOutput=totals.querySelector('[data-checkout-total]');if(baseOutput)baseOutput.textContent=formatEuro(base);if(discountOutput)discountOutput.textContent='− '+formatEuro(discount);if(totalOutput)totalOutput.textContent=formatEuro(Math.max(0,base-discount))})); const domainCancelModal=document.querySelector('[data-domain-cancel-modal]');const domainCancelId=document.querySelector('[data-domain-cancel-id]');const domainCancelName=document.querySelector('[data-domain-cancel-name]');const domainCancelWarning=document.querySelector('[data-domain-cancel-warning]');let domainCancelLastFocus=null; const closeDomainCancel=()=>{if(!domainCancelModal)return;domainCancelModal.hidden=true;document.body.classList.remove('has-domain-cancel-modal');if(domainCancelLastFocus&&domainCancelLastFocus.focus)domainCancelLastFocus.focus()}; document.querySelectorAll('[data-domain-cancel-open]').forEach(button=>button.addEventListener('click',()=>{if(!domainCancelModal)return;domainCancelLastFocus=button;const days=Math.max(0,parseInt(button.dataset.domainDays||'0',10));if(domainCancelId)domainCancelId.value=button.dataset.domainId||'';if(domainCancelName)domainCancelName.textContent=(domainCancelModal.dataset.nameTemplate||'Dominio: %s').replace('%s',button.dataset.domainName||'');if(domainCancelWarning){const warning=days<1?domainCancelModal.dataset.warningExpired:(days===1?domainCancelModal.dataset.warningOne:domainCancelModal.dataset.warningMany);domainCancelWarning.textContent=(warning||'').replace('%d',String(days))}domainCancelModal.hidden=false;document.body.classList.add('has-domain-cancel-modal');const close=domainCancelModal.querySelector('.domain-cancel-dialog [data-domain-cancel-close]');if(close)close.focus()})); document.querySelectorAll('[data-domain-cancel-close]').forEach(button=>button.addEventListener('click',closeDomainCancel)); const registrationForm=document.querySelector('[data-registration-form]'); if(registrationForm){const customerInputs=registrationForm.querySelectorAll('input[name="tipocliente"]');const updateCustomerFields=()=>{const selected=registrationForm.querySelector('input[name="tipocliente"]:checked');const customerType=selected?selected.value:'privato';registrationForm.querySelectorAll('[data-customer-fields]').forEach(group=>{const active=group.dataset.customerFields===customerType;group.hidden=!active;group.querySelectorAll('[data-customer-required]').forEach(input=>{input.required=active;input.disabled=!active})})};customerInputs.forEach(input=>input.addEventListener('change',updateCustomerFields));updateCustomerFields()} document.addEventListener('keydown',event=>{if(event.key==='Escape'&&termsModal&&!termsModal.hidden)closeTerms()}); document.addEventListener('keydown',event=>{if(event.key==='Escape'&&domainCancelModal&&!domainCancelModal.hidden)closeDomainCancel()}); })();