1(()=>{class u{constructor(e){this.form=e,this.localized=window.quCrmData?.localization||this.getDefaultLocalization(),this.apiBase=window.quCrmData?.apiBase||"https://crm.qualityunit.com/api/v3/",this.currentLang=window.quCrmData?.currentLang||"en",this.crmLangCode=window.quCrmData?.crmLangCode||"en-US",this.crmTimeout=window.quCrmData?.crmTimeout||2e4,this.isFreeForm=e.dataset.freeForm!==void 0,this.planType=e.dataset.planType||"Trial",this.liveValidationTimeout=void 0,this.lastValidatedDomain=void 0,this.shouldCheckDomain=!0,this.domainCheckUnreachable=!1,this.fields={name:{valid:!1},email:{valid:!1},domain:{valid:!1},region:{valid:!1},code:{valid:!1},captcha:{valid:!1},error:{},promo:{},submit:{}},this.regexPatterns={name:/[^\p{L}0-9\s]+/u,email:/^(?![a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$)/,domain:/^(?!((?!http|www))[^A-Z][-a-z0-9]*$)/,code:/^(?![A-Za-z0-9-]+$)/,emailCompany:new RegExp("@(gmail.com|outlook.com|yahoo.com|zoho.com|aol.com|icloud.com|yandex.com|gmx.us|gmx.com)$"),domain_live:/[^A-Za-z0-9-]/g,code_live:/[^A-Za-z0-9-]/g},this.init()}init(){this.initFields(),this.initValidation(),this.initSubmission(),this.addTrackingData()}initFields(){this.fields.name.element=this.form.querySelector('input[name="fullname"]'),this.fields.email.element=this.form.querySelector('input[name="email"]'),this.fields.domain.element=this.form.querySelector('input[name="subdomain"]'),this.fields.region.element=this.form.querySelector('select[name="region"]'),this.fields.code.element=this.form.querySelector('input[name="redeem_code"]'),this.fields.promo.element=this.form.querySelector('input[name="promo"]'),this.fields.submit.element=this.form.querySelector('button[type="submit"]'),this.fields.error.element=this.form.querySelector('[data-id="signUpError"]'),this.fields.captcha.element=this.form.querySelector('[data-id="captchaFieldmain"]')}initValidation(){this.fields.domain.element&&(this.fields.domain.element.addEventListener("input",e=>{this.handleDomainInput(e)}),this.fields.domain.element.addEventListener("blur",async()=>{await this.validateDomain()})),this.fields.email.element&&this.fields.email.element.addEventListener("blur",()=>{this.validateEmail()}),this.fields.name.element&&this.fields.name.element.addEventListener("blur",()=>{this.validateName()}),this.fields.region.element&&this.fields.region.element.addEventListener("change",()=>{this.validateRegion()}),this.fields.code.element&&(this.fields.code.element.addEventListener("input",e=>{this.handleCodeInput(e)}),this.fields.code.element.addEventListener("blur",()=>{this.validateCode()}))}initSubmission(){this.form.addEventListener("submit",e=>{e.preventDefault(),this.handleSubmit()})}handleDomainInput(e){let t=e.target.value,i=t.replace(this.regexPatterns.domain_live,"").toLowerCase();t!==i&&(e.target.value=i),clearTimeout(this.liveValidationTimeout),this.liveValidationTimeout=setTimeout(async()=>{await this.validateDomain()},500)}validateName(){const e=this.fields.name.element?.value?.trim()||"",t=e.length>=2&&!this.regexPatterns.name.test(e);return this.fields.name.valid=t,!t&&e.length>0?this.showFieldError(this.fields.name.element,this.localized.invalid.name):t&&e.length>0?this.showFieldSuccess(this.fields.name.element):this.clearFieldError(this.fields.name.element),t}validateEmail(){const e=this.fields.email.element?.value?.trim()||"",t=!this.regexPatterns.email.test(e);return this.fields.email.valid=t,!t&&e.length>0?this.showFieldError(this.fields.email.element,this.localized.invalid.email):t&&e.length>0?(this.showFieldSuccess(this.fields.email.element),this.checkCompanyEmail(this.fields.email.element)):this.clearFieldError(this.fields.email.element),t}validateRegion(){const t=(this.fields.region.element?.value?.trim()||"").length>0;return this.fields.region.valid=t,t?this.showFieldSuccess(this.fields.region.element):this.showFieldError(this.fields.region.element,"Please select a region"),t}handleCodeInput(e){let t=e.target.value,i=t.replace(this.regexPatterns.code_live,"");t!==i&&(e.target.value=i)}validateCode(){const e=this.fields.code.element?.value?.trim()||"",t=e.length===0||!this.regexPatterns.code.test(e);return this.fields.code.valid=t,!t&&e.length>
10?this.showFieldError(this.fields.code.element,"Invalid code format"):e.length>0?this.showFieldSuccess(this.fields.code.element):this.clearFieldError(this.fields.code.element),t}checkCompanyEmail(e){const t=e?.value?.trim()||"";if(!t)return;const i=this.regexPatterns.emailCompany.test(t),s=e.closest(".form-field")||e.closest("div");let a=s?.querySelector(".CompanyEmailWarning");i?(a||(a=document.createElement("div"),a.className="CompanyEmailWarning text-orange-500 text-xs mt-1 flex items-center",a.innerHTML=` 2 <svg class="w-4 h-4 mr-1 shrink-0" fill="currentColor" viewBox="0 0 20 20"> 3 <path fill-rule="evenodd" d="M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z" clip-rule="evenodd"></path> 4 </svg> 5 <span>Consider using your business email instead of personal email</span> 6 `,s?.appendChild(a)),a.classList.remove("hidden")):a&&a.classList.add("hidden")}async validateDomain(){const e=this.fields.domain.element?.value?.trim()||"";if(e===this.lastValidatedDomain)return this.fields.domain.valid;if(e.length>0&&e.length<3)return this.fields.domain.valid=!1,this.lastValidatedDomain=e,this.showFieldError(this.fields.domain.element,"Domain must be at least 3 characters"),!1;if(this.regexPatterns.domain.test(e))return this.fields.domain.valid=!1,this.lastValidatedDomain=e,this.showFieldError(this.fields.domain.element,this.localized.invalid.domain),!1;if(e.length===0)return this.clearFieldError(this.fields.domain.element),!1;if(e.length>=3)try{this.showFieldValidating(this.fields.domain.element);const t=await this.checkDomainAvailability(e);return this.fields.domain.valid=t.available,this.lastValidatedDomain=e,this.domainCheckUnreachable=!1,t.available?this.showFieldSuccess(this.fields.domain.element,t.message):this.showFieldError(this.fields.domain.element,t.message),t.available}catch(t){return console.error("Domain validation error:",t),this.fields.domain.valid=!1,this.lastValidatedDomain=e,this.domainCheckUnreachable=this.isConnectionError(t),this.domainCheckUnreachable?(this.clearFieldError(this.fields.domain.element),this.showFormErrorHtml(this.connectionErrorMessage())):this.showFieldError(this.fields.domain.element,t.message||this.localized.textFailedDomain||"Failed to validate domain"),!1}else return this.clearFieldError(this.fields.domain.element),!1}async crmFetch(e,t){const i=new AbortController,s=setTimeout(()=>i.abort(),this.crmTimeout);try{return await fetch(e,Object.assign({},t||{},{signal:i.signal}))}finally{clearTimeout(s)}}isConnectionError(e){return e?e.crmUnreachable===!0?!0:e.name==="AbortError"||e.name==="TypeError":!1}connectionErrorMessage(){return this.localized.textErrorConnection||this.getDefaultLocalization().textErrorConnection}isGatewayStatus(e){return e===502||e===503||e===504}gatewayError(e){const t=new Error(this.connectionErrorMessage());return t.crmUnreachable=!0,t.status=e,t}async checkDomainAvailability(e){const i=`${this.apiBase}subscriptions/_check_domain?productId=b229622b&subdomain=${e}`,s=await this.crmFetch(i,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"}});if(this.isGatewayStatus(s.status))throw this.gatewayError(s.status);let a=null;try{a=await s.json()}catch{}if(s.status===404)return{available:!1,message:a?.message||"Domain is already used"};if(s.status===200)return{available:!0,message:a?.message||"Domain is available"};if(!s.ok){const o=a?.message||`HTTP error! status: ${s.status}`;throw new Error(o)}if(a&&a.hasOwnProperty("success")){const o=a.message||(a.success?"Domain is available":"Domain is already used");return{available:a.success===!0,message:o}}else if(a&&a.hasOwnProperty("available")){const o=a.message||(a.available?"Domain is available":"Domain is already used");return{available:a.available===!0,message:o}}else return{available:!1,message:"Domain is already used"}}showFieldValidating(e){if(!e)return;const t=e.closest(".form-field")||e.closest("div");let i=t?.querySelector(".ErrorMessage");i||(i=document.createElement("div"),i.className="ErrorMessage text-blue-500 text-xs mt-1 flex items-center",t?.appendChild(i)),i.innerHTML=` 7 <div class="inline-block w-3 h-3 border-2 border-blue-500 border-t-transparent roun
7ded-full animate-spin mr-2"></div> 8 <span>${this.localized.textValidating||"Validating..."}</span> 9 `,i.classList.remove("hidden"),i.className="ErrorMessage text-blue-500 text-xs mt-1 flex items-center",e.classList.remove("ring-red-500","focus:ring-red-500","ring-green-500","focus:ring-green-500"),e.classList.add("ring-blue-500","focus:ring-blue-500"),e.classList.remove("ring-gray-300","focus:ring-primary","hover:ring-gray-400")}showFieldError(e,t){if(!e)return;const i=e.closest(".form-field")||e.closest("div");let s=i?.querySelector(".ErrorMessage");s||(s=document.createElement("div"),s.className="ErrorMessage text-red-600 text-xs mt-1",i?.appendChild(s)),s.textContent=t,s.classList.remove("hidden"),s.className="ErrorMessage text-red-600 text-xs mt-1",e.classList.remove("ring-green-500","focus:ring-green-500"),e.classList.remove("ring-gray-300","focus:ring-primary","hover:ring-gray-400"),e.classList.remove("dark:focus:ring-primary","dark:ring-gray-600"),e.classList.add("ring-red-500","focus:ring-red-500","border-red-500","focus:border-red-500"),e.classList.add("dark:ring-red-500","dark:focus:ring-red-500")}showFieldSuccess(e,t=null){if(!e)return;const i=e.closest(".form-field")||e.closest("div");let s=i?.querySelector(".ErrorMessage");if(e.name==="subdomain")s||(s=document.createElement("div"),s.className="ErrorMessage text-green-500 text-xs mt-1",i?.appendChild(s)),s.textContent=t||"Domain is available",s.classList.remove("hidden"),s.className="ErrorMessage text-green-500 text-xs mt-1";else if(s&&s.classList.add("hidden"),!i?.querySelector(".absolute.inset-y-0.right-0")){const r=document.createElement("div");r.className="absolute inset-y-0 right-0 pr-3 flex items-center pointer-events-none success-icon",r.innerHTML='<svg class="w-4 h-4 text-green-500" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"></path></svg>',i?.querySelector(".relative")?.appendChild(r)}e.classList.remove("ring-red-500","focus:ring-red-500","border-red-500","focus:border-red-500"),e.classList.remove("dark:ring-red-500","dark:focus:ring-red-500"),e.classList.remove("ring-gray-300","focus:ring-primary","hover:ring-gray-400"),e.classList.remove("dark:ring-gray-600","dark:focus:ring-primary"),e.classList.add("ring-green-500","focus:ring-green-500"),e.classList.add("dark:ring-green-500","dark:focus:ring-green-500")}clearFieldError(e){if(!e)return;const t=e.closest(".form-field")||e.closest("div"),i=t?.querySelector(".ErrorMessage");i&&(i.textContent="",i.classList.add("hidden"));const s=t?.querySelector(".success-icon");s&&s.remove(),e.classList.remove("ring-red-500","focus:ring-red-500","ring-green-500","focus:ring-green-500"),e.classList.remove("border-red-500","focus:border-red-500","dark:ring-red-500","dark:focus:ring-red-500"),e.classList.add("ring-gray-300","focus:ring-primary","hover:ring-gray-400"),e.classList.add("dark:ring-gray-600","dark:focus:ring-primary")}showFormError(e){this.fields.error.element&&(this.fields.error.element.textContent=e,this.fields.error.element.classList.remove("hidden"))}showFormErrorHtml(e){this.fields.error.element&&(this.fields.error.element.innerHTML=e,this.fields.error.element.classList.remove("hidden"))}hideFormError(){this.fields.error.element&&(this.fields.error.element.textContent="",this.fields.error.element.classList.add("hidden"))}resetCaptcha(){const e=this.form.querySelector('[name="grecaptcha"]');if(e&&(e.value=""),typeof grecaptcha<"u"&&grecaptcha.reset)try{const t=this.form._captchaWidgetId;grecaptcha.reset(t!==void 0?t:void 0)}catch(t){console.warn("Failed to reset captcha:",t)}}addTrackingData(){const e=this.getCookie("_ga")||"",t=this.form.querySelector('[name="ga_client_id"]');t&&(t.value=e);const i=this.getGa4SessionId(),s=this.form.querySelector('[name="ga_session_id"]');s&&(s.value=i),this.initTrackingFields()}getGa4SessionId(){const e=this.getCookie("_ga_T9HBB9KMVK");if(!e)return"";const t=e.split(".");if(t.length<3)return"";const i=t[2].match(/^s?(\d+)/);return i?i[1]:""}initTrackingFields(){const e=(s,a)=>{let o=this.form.querySelector(`input[name="${s}"]`);if(o)o.value=a;else{const r=document.createElement("input");r.type="hidden",r.name=s,r.value=a,r.autocomplete="off",this.form.insertBefore(r,this.form.firstChild)}};let t="";if(typeof PostAffTracker<"u"&&PostAffTracker.getVisitorId)try{t=PostAffTracker.getVisitorId()}catch(s){console.warn("Failed to get LiveAgent Visitor ID:",s)}e("pap_visitor_id",t);const i=this.getSourceId();e("source_id",i)}getCookie(e){const i=`; ${document.cookie}`.split(`; ${e}=`);return i.length>=2?i[1].split(";")[0]:""}getUrlParam(e){try{return new URLSearchParams(window.location.search).get(e)||""}catch{return""}}getGclid(){return this.getUrlParam("gclid")||this.getCookie("_gclid")||""}getSourceId(){const e=this.getCookie("crmsor");return typeof e<"u"&&e.length>0?encodeURIComponent(window.atob(decodeURIComponent(e))).replaceAll("%2C",",").replaceAll("%3A",":").replaceAll("%26","&").replaceAll("%3D","="):""}getVariationId(){return this.isFreeForm?"freedesk":"3513230f"}async handleSubmit(){this.hideFormError();const e=this.validateName(),t=this.validateEmail(),i=await this.validateDomain(),s=this.validateRegion(),a=this.fields.code.element?this.validateCode():!0;
9if(!e||!t||!i||!s||!a){this.domainCheckUnreachable?this.showFormErrorHtml(this.connectionErrorMessage()):this.showFormError(this.localized.textError||"Please fix the errors above");return}if(typeof grecaptcha<"u")if(window.hugoCaptchaConfig?.version==="v2"){if(!(this.form.querySelector('[name="grecaptcha"]')?.value||"")){this.showFormError(this.localized.invalid?.captcha||"Please verify the captcha");return}}else try{const r=await grecaptcha.execute();this.form.querySelector('[name="grecaptcha"]').value=r}catch(r){console.error("Captcha error:",r),this.showFormError(this.localized.textErrorCaptcha||"Cannot load captcha");return}this.setLoadingState(!0);try{await this.ensureGaConsent();const o=new FormData(this.form),r=await this.submitToAPI(o);if(r&&(r.success||r.id||r.account_id)){const l=Object.fromEntries(o.entries()),d={id:r.id,domain:r.domain,customer_email:r.customer_email||l.email,customer_name:r.customer_name||l.fullname,account_id:r.account_id,subdomain:l.subdomain,language:this.crmLangCode,async:r.async||!1,plan_type:this.planType},n=window.quCrmData?.thankYouUrl||"/thank-you/?ver=installation";this.saveGdmcidToCookies(),this.setCookie("trial_signup_response",JSON.stringify(d),1),window.location.href=n}else this.showFormError(r.message||this.localized.textError),this.resetCaptcha()}catch(o){if(console.error("Form submission failed:",o.message),this.isConnectionError(o))this.showFormErrorHtml(this.connectionErrorMessage());else if(o.message&&o.message.toLowerCase().includes("email domain"))this.clearFieldError(this.fields.email.element),this.showFieldError(this.fields.email.element,o.message),this.hideFormError();else{const r=o.message||this.localized.textError||"Something went wrong";this.showFormError(r)}this.resetCaptcha()}finally{this.setLoadingState(!1)}}async ensureGaConsent(){this.getCookie("cookie_consent_status")||this.setCookie("cookie_consent_status","all",365),window.consentCore&&typeof window.consentCore.grantAll=="function"&&window.consentCore.grantAll("trial-signup"),typeof window.gtag=="function"&&window.gtag("consent","update",{analytics_storage:"granted",ad_storage:"granted",ad_user_data:"granted",ad_personalization:"granted"});const e=3e3,t=100;let i=0;for(;!this.getCookie("_ga")&&i<e;)await new Promise(s=>setTimeout(s,t)),i+=t;this.addTrackingData()}async submitToAPI(e){const t=Object.fromEntries(e.entries());let i="";if(typeof PostAffTracker<"u"&&PostAffTracker.getVisitorId)try{i=PostAffTracker.getVisitorId()}catch(c){console.warn("Failed to get LiveAgentVisitorId from PostAffTracker:",c)}else console.warn("PostAffTracker not available - LiveAgentVisitorId will be empty");const s={variation_id:this.getVariationId(),subdomain:t.subdomain,pap_visitor_id:i||"",source_id:this.getSourceId(),customer:{name:t.fullname,email:t.email},promo:t.promo==="on"||t.promo===!0,language:this.crmLangCode,ga_client_id:t.ga_client_id,ga_session_id:t.ga_session_id,region:t.region,redeem_code:t.redeem_code||"",signup_url:window.location.href},a=window.__consent||(this.getCookie("cookie_consent_status")==="all"?{marketing:!0,analytics:!0}:{});s.consent_ad_storage=a.marketing?"granted":"denied",s.consent_analytics_storage=a.analytics?"granted":"denied";const o=this.getGclid();o&&(s.gclid=o);const r=this.getCookie("_fbp");r&&(s.fbp=r);const l=this.getCookie("_fbc"),d=this.getUrlParam("fbclid");l?s.fbc=l:d&&(s.fbc="fb.1."+Date.now()+"."+d,s.fbclid=d),t.grecaptcha&&!t.grecaptcha.includes("placeholder")&&(s.grtoken=t.grecaptcha);const n=await this.crmFetch(this.apiBase+"subscriptions/",{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(s)});if(this.isGatewayStatus(n.status))throw this.gatewayError(n.status);if(!n.ok){let c=`HTTP error! status: ${n.status}`;try{c=(await n.json()).message||c}catch{}throw new Error(c)}return await n.json()}setLoadingState(e){if(this.fields.submit.element){this.fields.submit.element.disabled=e;const t=this.fields.submit.element.querySelector("span");if(e){this.originalButtonText||(this.originalButtonText=t?t.textContent.trim():this.fields.submit.element.textContent.trim());let i=this.fields.submit.element.querySelector(".spinner");i||(i=document.createElement("div"),i.className="spinner inline-block w-5 h-5 border-2 border-white border-t-transparent roun
9ded-full animate-spin mr-2",t?t.innerHTML=i.outerHTML+"Creating Account...":this.fields.submit.element.innerHTML=i.outerHTML+"Creating Account..."),this.fields.submit.element.classList.add("opacity-75","cursor-not-allowed")}else{const i=this.fields.submit.element.querySelector(".spinner");i&&i.remove();const s=this.originalButtonText||"Create account for FREE";t?t.textContent=s:this.fields.submit.element.textContent=s,this.fields.submit.element.classList.remove("opacity-75","cursor-not-allowed")}}}getDefaultLocalization(){return{invalid:{name:"Field invalid",email:"Email invalid",domain:"Domain can not contain http, www or capital letters (A-Z)",captcha:"Verify captcha."},textEmpty:"Field can't be empty",textFailedDomain:"Failed to validate domain",textValidating:"Validating...",textError:"Something went wrong.",textErrorConnection:"Account creation is temporarily unavailable. Please try again in a few minutes.",textErrorCaptcha:"Cannot load captcha"}}setCookie(e,t,i=1){const s=new Date;s.setTime(s.getTime()+i*24*60*60*1e3),document.cookie=`${e}=${t};expires=${s.toUTCString()};path=/;SameSite=Lax`}deleteCookie(e){document.cookie=`${e}=;expires=Thu, 01 Jan 1970 00:00:01 GMT;path=/`}saveGdmcidToCookies(){try{const e=this.getCookie("_gdmcid");if(e){console.log("_gdmcid cookie already exists:",e);return}const t=window.getStoredUtmParam?window.getStoredUtmParam("gdmcid"):null;if(t){const i=new Date;i.setTime(i.getTime()+2880*60*1e3),document.cookie=`_gdmcid=${t};expires=${i.toISOString()};path=/`,console.log("_gdmcid saved to cookies from sessionStorage:",t)}else console.log("No gdmcid found in stored UTM parameters")}catch(e){console.warn("Failed to save gdmcid to cookies:",e)}}}document.addEventListener("DOMContentLoaded",()=>{window.quCrmData=window.quCrmData||{};const m=document.querySelectorAll('[data-form-type="signup-trial-form"]');m.forEach(e=>{new u(e)}),m.forEach(e=>{e.addEventListener("submit",t=>{typeof grecaptcha>"u"&&t.preventDefault()})})});})();
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.