AI Agent Whitepaper

Start your free trial

  • Please enter a valid business email address (personal domains like Gmail, Yahoo, Outlook are not accepted).
Try Typewise for free. No credit card needed.
Thank you! You'll hear shortly with access details.
Oops! Something went wrong while submitting the form.
Powering the world's best customer service teams
document.addEventListener('DOMContentLoaded', function () { var form = document.querySelector('form[ms-code-form="get-access"]') || document.querySelector('.w-form form') if (!form) return // wyłącz redirect Webflow form.removeAttribute('data-redirect') form.removeAttribute('data-wf-redirect') // lista domen prywatnych var personalDomains = [ 'gmail.com','googlemail.com','yahoo.com','ymail.com','hotmail.com','outlook.com','live.com','msn.com', 'icloud.com','me.com','comcast.net','aol.com', 'wp.pl','onet.pl','o2.pl','interia.pl','gazeta.pl','op.pl', 'proton.me','protonmail.com','zoho.com','mail.com','gmx.com' ] function isPersonalEmail(val){ var v = String(val || '').toLowerCase().trim() var parts = v.split('@') if (parts.length !== 2) return true var domain = parts[1].trim() return personalDomains.indexOf(domain) !== -1 } // Parsley setup form.setAttribute('data-parsley-validate','') var emailInput = form.querySelector('input[ms-code-business-email], input[type="email"]') if (window.Parsley && !window.Parsley._addedBusinessEmail){ window.Parsley.addValidator('businessemail', { validateString: function(value){ return !isPersonalEmail(value) }, messages: { en: 'Please enter a business email address.' } }) window.Parsley._addedBusinessEmail = true } if (emailInput){ emailInput.setAttribute('data-parsley-businessemail','') emailInput.setAttribute( 'data-parsley-pattern', '^[^@\\s]+@(?!(gmail|googlemail|yahoo|ymail|hotmail|outlook|live|msn|icloud|me|comcast|aol|wp|onet|o2|interia|gazeta|op|proton|protonmail|zoho|mail|gmx)\\.(com|net|pl|me)$)[^@\\s]+\\.[^@\\s]+$' ) emailInput.setAttribute('data-parsley-pattern-message','Please enter a business email address.') } // stylowany przycisk submit document.addEventListener('click', function(e){ var btn = e.target.closest('[ms-code-submit-new]') if (!btn) return var hostForm = btn.closest('form') || form if (!hostForm) return e.preventDefault() if (hostForm.requestSubmit) hostForm.requestSubmit() else hostForm.submit() }) // submit do Basin + redirect po sukcesie form.addEventListener('submit', async function(e){ e.preventDefault() var $form = window.jQuery ? window.jQuery(form) : null var parsley = $form && $form.parsley ? $form.parsley() : null if (parsley && !parsley.validate()) return var action = form.getAttribute('action') || '' if (!/^https:\/\/usebasin\.com\/f\/[a-z0-9]+/i.test(action)){ console.error('Invalid Basin endpoint') return } try { var fd = new FormData(form) if (!fd.has('source_label')) fd.set('source_label','get-access') var res = await fetch(action, { method: 'POST', body: fd, headers: { 'Accept': 'application/json' } }) var wrap = form.closest('.w-form') var done = wrap && wrap.querySelector('.w-form-done') var fail = wrap && wrap.querySelector('.w-form-fail') if (res.ok){ // opcjonalnie schowaj ewentualny error if (fail) fail.style.display = 'none' // redirect na onboarding booking window.location.href = 'https://www.typewise.app/onboarding-booking' return } else { if (fail) fail.style.display = 'block' console.error('Basin status', res.status) } } catch(err){ var fail = form.closest('.w-form')?.querySelector('.w-form-fail') if (fail) fail.style.display = 'block' console.error(err) } }) // Twoje oryginalne stylowanie błędów Parsley if (window.jQuery && window.jQuery.fn.parsley) { window.jQuery('form').parsley().on('form:error', function() { window.jQuery('.parsley-errors-list').addClass('ms-code-validation-error') }) } })