{"version":3,"file":"js/pageChunk30-c9e1e0c0c79772c784ff.chunk.js","mappings":"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","sources":["webpack://Emeritus/./app/javascript/chunks/marketing/landingPageTemplateGroupEnrollmentModal.js","webpack://Emeritus/./app/javascript/modules/validate/constants.js","webpack://Emeritus/./app/javascript/modules/validate/domUtil.js","webpack://Emeritus/./app/javascript/modules/utils/camelCaseToSnakeCase.js","webpack://Emeritus/./app/javascript/modules/validate/validate.js","webpack://Emeritus/./app/javascript/modules/i18n.js.erb"],"sourcesContent":["import validate, { instanceMethods } from '../../modules/validate/validate';\nimport getPageChunk from '../../modules/lazyChunks';\n\nconst hideGeButtons = () => {\n const enrollButton = document.getElementById('group-enrollment-page-two-enroll-button');\n const notNowButton = document.getElementById('group-enrollment-page-two-dismiss-button');\n if (enrollButton && notNowButton) {\n enrollButton.style.display = 'none';\n notNowButton.style.display = 'none';\n }\n};\n\nconst showNextModal = () => {\n const pageOne = document.getElementById('page-one');\n const pageTwo = document.getElementById('page-two');\n\n if (pageOne && pageTwo) {\n let consent;\n\n if (document.getElementById('group_enrollments_interested_form_agree') !== null) {\n consent = document.getElementById('group_enrollments_interested_form_agree').checked;\n } else {\n consent = document.getElementById('group_enrollments_interested_form_agree_true').checked;\n }\n\n const consentText = document.getElementsByClassName('js-thank-you-consent-text')[0];\n const countrySelect = document.getElementById('group_enrollments_interested_form_country');\n const countryCode = countrySelect.value;\n\n const wrapper = document.querySelector('.js-custom-form__contact-checkbox-block');\n const wrapperData = wrapper.dataset;\n const gdprCountries = wrapperData.gdprCountries.split(' ');\n const nonGdprMoreCautiousCountries = wrapperData.nonGdprMoreCautiousCountries.split(' ');\n const { programLanguage } = wrapperData;\n\n let explicitConsent;\n if (countryCode === 'BR' && programLanguage === 'pt') {\n explicitConsent = false;\n } else if (gdprCountries.includes(countryCode)) {\n const { gdprType } = wrapperData;\n explicitConsent = gdprType;\n } else if (nonGdprMoreCautiousCountries.includes(countryCode)) {\n const { nonGdprMoreCautiousType } = wrapperData;\n explicitConsent = nonGdprMoreCautiousType;\n } else {\n const { nonGdprLessCautiousType } = wrapperData;\n explicitConsent = nonGdprLessCautiousType;\n }\n\n if (explicitConsent === '1' && consent === false && consentText) {\n const { b2bThankYouDontAgree } = wrapperData;\n\n consentText.innerHTML = b2bThankYouDontAgree;\n }\n\n pageOne.classList.add('hidden');\n pageTwo.classList.remove('hidden');\n }\n};\n\nconst setFormErrors = (response) => {\n Object.entries(response.errors).forEach((entry) => {\n const input = document.getElementById(`group_enrollments_interested_form_${entry[0]}`);\n const message = entry[1];\n input.setCustomValidity(message);\n instanceMethods.findOrCreateErrorNode({\n input,\n errorMessage: message,\n cb: (currentInput) => {\n const { parentNode } = currentInput;\n return parentNode;\n },\n });\n });\n};\n\nconst setFormXhttp = (method, url) => {\n const token = document.querySelector('input[name=\"authenticity_token\"]')?.value;\n const xhttp = new XMLHttpRequest();\n xhttp.open(method, url, true);\n if (token) {\n xhttp.setRequestHeader('X-CSRF-Token', token);\n }\n return xhttp;\n};\n\nconst submitForm = (form, submitButton) => {\n const xhttp = setFormXhttp(form.method, form.action);\n xhttp.onreadystatechange = function handleFormResponse () {\n if (this.readyState === 4) {\n if (this.status === 200) {\n const response = JSON.parse(this.responseText);\n const b2bLeadsAsB2cEnabled = response.b2b_leads_as_b2c_enabled;\n hideGeButtons();\n if (b2bLeadsAsB2cEnabled) {\n getPageChunk('marketing/handleLeadCustomForm', '', false);\n } else {\n showNextModal();\n }\n } else if (this.status === 422) {\n const response = JSON.parse(this.responseText);\n setFormErrors(response);\n } else {\n // eslint-disable-next-line no-console\n console.error('There was an error while submitting the form');\n }\n }\n submitButton.disabled = false;\n };\n xhttp.send(new FormData(form));\n};\n\nconst changePage = (e) => {\n e.preventDefault();\n const form = e.target;\n const button = document.getElementById('group-enrollment-page-one-submit');\n if (form) {\n const wrapper = form.querySelector('.js-custom-form__contact-checkbox-block');\n const wrapperData = wrapper.dataset;\n const { consentRadiobuttonEnabled } = wrapperData;\n\n if (consentRadiobuttonEnabled === 'true') {\n const consentCheckbox = wrapper.querySelectorAll('[type=\"checkbox\"]');\n const countrySelect = form.querySelector('.js-custom-form [type=\"country\"]');\n const countryCode = countrySelect.value;\n\n const explicitValue = '1';\n const gdprCountries = wrapperData.gdprCountries.split(' ');\n const nonGdprMoreCautiousCountries = wrapperData.nonGdprMoreCautiousCountries.split(' ');\n const {\n gdprType,\n nonGdprMoreCautiousType,\n nonGdprLessCautiousType,\n programLanguage,\n } = wrapperData;\n\n let consentType;\n if (countryCode === 'BR' && programLanguage === 'pt') {\n consentType = '2';\n } else if (gdprCountries.includes(countryCode)) {\n consentType = gdprType;\n } else if (nonGdprMoreCautiousCountries.includes(countryCode)) {\n consentType = nonGdprMoreCautiousType;\n } else {\n consentType = nonGdprLessCautiousType;\n }\n\n if (consentType === explicitValue) {\n if ((consentCheckbox[0].checked || consentCheckbox[1].checked) && !button.disabled) {\n button.disabled = true;\n submitForm(form, button);\n }\n } else if (!button.disabled) {\n button.disabled = true;\n document.getElementById('group_enrollments_interested_form_agree_true').checked = true;\n submitForm(form, button);\n }\n } else if (!button.disabled) {\n button.disabled = true;\n submitForm(form, button);\n }\n }\n};\n\nconst groupEnrollmentModalConnect = (form) => {\n form.addEventListener('submit', changePage);\n};\n\nexport default () => {\n const form = document.getElementById('group-enrollment-modal-form');\n\n if (form) {\n groupEnrollmentModalConnect(form);\n validate(form, {});\n }\n};\n","export const VALIDATION_ERROR_CLASS = 'form__validation-error-message';\nexport const DIRTY_CLASS = 'form__input--dirty';\nexport const VALID_CLASS = 'form__input--valid';\nexport const VALIDATION_ERROR_PARENT_CLASS = 'parent-error';\nexport const INPUT_INVALID_CLASS = 'form__input--invalid';\nexport const INPUT_SKIP_VALIDATIONS = 'form__input_skip_validations';\nexport const DISABLED_SUBMIT_INPUT = 'btn--disabled';\nexport const CUSTOM_DATE_CLASS = 'custom_format_date';\n","import {\n DIRTY_CLASS,\n VALIDATION_ERROR_CLASS,\n INPUT_INVALID_CLASS,\n VALID_CLASS,\n DISABLED_SUBMIT_INPUT,\n} from './constants';\n\nconst formVersion = document.querySelector('.simple_form')?.dataset?.formVersion;\nconst requiredNeeded = document.querySelector('.simple_form')?.dataset?.requiredNeeded;\n\nconst emptyInputValue = (input) => {\n if (input.type === 'checkbox') return true;\n if (input.type === 'radio') return true;\n\n return input.value === '';\n};\n\nconst noneSelected = siblings => !siblings.some(sibling => sibling.classList.contains('form-check') && sibling.firstChild.checked);\n\nexport const isValidatable = (input) => {\n const classes = input.classList;\n\n return Array.prototype.indexOf.call(classes, DIRTY_CLASS) > -1\n || Array.prototype.indexOf.call(classes, 'form__input--invalid') > -1;\n};\n\nexport const findOrCreateErrorNode = ({\n errorMessage,\n input,\n cb,\n}) => {\n if (isValidatable(input)) {\n let parentNode;\n if (cb) {\n parentNode = cb(input);\n } else {\n const { parentNode: { parentNode: parent } } = input;\n parentNode = parent;\n }\n\n const errorNode = parentNode.querySelector(`.${VALIDATION_ERROR_CLASS}`) || document.createElement('div');\n errorNode.classList.add(VALIDATION_ERROR_CLASS);\n if (errorMessage) {\n errorNode.textContent = errorMessage;\n } else {\n errorNode.textContent = input.validationMessage;\n }\n\n if (emptyInputValue(input) && formVersion === '2' && requiredNeeded !== 'true') {\n input.classList.remove(INPUT_INVALID_CLASS);\n input.classList.remove(DIRTY_CLASS);\n\n if (parentNode.querySelector(`.${VALIDATION_ERROR_CLASS}`)) parentNode.removeChild(errorNode);\n } else {\n const siblings = [...parentNode.children];\n if (input.type === 'checkbox') {\n if (noneSelected(siblings)) {\n siblings\n .filter(sibling => sibling.classList.contains('form-check'))\n .map(sibling => sibling.firstChild.classList.add(INPUT_INVALID_CLASS));\n parentNode.appendChild(errorNode);\n }\n } else {\n input.classList.remove(VALID_CLASS);\n input.classList.add(INPUT_INVALID_CLASS);\n parentNode.appendChild(errorNode);\n }\n }\n }\n};\n\nexport const removeInvalidClass = function (sibling) {\n if (sibling.firstChild.classList) {\n sibling.firstChild.classList.remove(INPUT_INVALID_CLASS);\n }\n};\n\nexport const removeErrorNode = (input, cb) => {\n let parentNode;\n if (cb) {\n parentNode = cb(input);\n } else {\n const { parentNode: { parentNode: parent } } = input;\n parentNode = parent;\n }\n\n const errorNode = parentNode.querySelector(`.${VALIDATION_ERROR_CLASS}`);\n input.classList.remove(INPUT_INVALID_CLASS);\n if (errorNode && parentNode === errorNode.parentNode) {\n parentNode.removeChild(errorNode);\n }\n if (input.type === 'checkbox') {\n const siblings = [...parentNode.children];\n siblings\n .filter(sibling => sibling.classList.contains('form-check'))\n .map(removeInvalidClass);\n }\n};\n\nexport const toggleSubmitButton = function (...args) {\n let form;\n if (args[0] && args[0].nodeName && args[0].nodeName.toLowerCase() === 'form') {\n [form] = args;\n } else {\n form = args[0].currentTarget;\n }\n\n const submit = form.querySelector('input[type=\"submit\"]');\n\n form.checkValidity();\n if (form.checkValidity()) {\n submit.classList.remove(DISABLED_SUBMIT_INPUT);\n submit.disabled = false;\n return;\n }\n submit.classList.add(DISABLED_SUBMIT_INPUT);\n submit.disabled = true;\n};\n\nexport const makeDirty = (input) => {\n input.classList.add(DIRTY_CLASS);\n};\n\nexport default {\n isValidatable,\n findOrCreateErrorNode,\n makeDirty,\n removeErrorNode,\n};\n","const camelCaseToSnakeCase = string => string.replace(/[A-Z]/g, char => `_${char.toLowerCase()}`).replace(/^_/, '');\n\nexport default camelCaseToSnakeCase;\n","import {\n findOrCreateErrorNode,\n isValidatable,\n makeDirty,\n removeErrorNode,\n} from './domUtil';\nimport {\n INPUT_INVALID_CLASS,\n CUSTOM_DATE_CLASS,\n INPUT_SKIP_VALIDATIONS,\n} from './constants';\nimport i18n from '../i18n.js.erb';\nimport camelCaseToSnakeCase from '../utils/camelCaseToSnakeCase';\n\nconst validateOptions = {};\n\nconst errorProps = [\n 'badInput',\n 'patternMismatch',\n 'rangeOverflow',\n 'rangeUnderflow',\n 'stepMismatch',\n 'tooLong',\n 'tooShort',\n 'typeMismatch',\n 'valueMissing',\n 'customError',\n];\n\nconst { lang } = document.documentElement;\n\nconst customDateInputExists = (input) => {\n const classes = input.classList;\n return Array.prototype.indexOf.call(classes, CUSTOM_DATE_CLASS) > -1;\n};\n\nconst invalidWordLimit = (input) => {\n const dataWordLimitAttr = input.getAttribute('data-word-limit');\n return dataWordLimitAttr\n && input.value.trim().split(/\\s+/).length\n > parseInt(dataWordLimitAttr, 10);\n};\n\nconst CustomMessageWordLimit = (input) => {\n const dataWordLimitAttr = input.getAttribute('data-word-limit');\n return i18n[lang].word_limit.replace('%{count}', dataWordLimitAttr, 'gi');\n};\n\nconst errorMessage = (modelName, attribute, messageKey) => {\n let messages = i18n[lang].models[modelName];\n if (!messages) { return null; }\n\n messages = messages.attributes[attribute];\n if (!messages) { return null; }\n\n return messages[messageKey];\n};\n\nconst inputName = (input) => {\n const name = input.name.match(/(\\[.+\\])/);\n if (!name) { return input.name; }\n\n return name[0].replace(/\\[|\\]/g, '');\n};\n\nconst getCustomMessage = function (input) {\n if (invalidWordLimit(input)) {\n return CustomMessageWordLimit(input);\n }\n const { modelName } = input.form.dataset;\n const { validity } = input;\n const attribute = validateOptions.inputName(input);\n const localErrorProps = [`${input.type}Mismatch`].concat(errorProps);\n\n for (let i = 0; i < localErrorProps.length; i += 1) {\n const prop = localErrorProps[i];\n const snakeCasedProp = camelCaseToSnakeCase(prop);\n if (validity[prop]) {\n return validateOptions.errorMessage(modelName, attribute, snakeCasedProp)\n || i18n[lang][snakeCasedProp];\n }\n }\n return true;\n};\n\nconst handleCustomMessages = (input) => {\n const checkValidity = () => {\n const message = !input.validity.valid || invalidWordLimit(input)\n ? getCustomMessage(input)\n : null;\n input.setCustomValidity(message || '');\n };\n\n input.addEventListener('input', checkValidity);\n input.addEventListener('blur', checkValidity);\n input.addEventListener('invalid', checkValidity);\n};\n\nconst handleCustomMessageDisplay = (input) => {\n const checkValidity = () => {\n if (!input.validity.valid && input.validationMessage) {\n if (customDateInputExists(input)) {\n input.setCustomValidity(input.title);\n }\n findOrCreateErrorNode({\n input,\n cb: validateOptions.findParentNode,\n });\n } else {\n removeErrorNode(input, validateOptions.findParentNode);\n }\n };\n\n input.addEventListener('input', () => {\n if (isValidatable(input)) {\n checkValidity();\n }\n });\n\n input.addEventListener('blur', () => {\n if (!isValidatable(input)) {\n makeDirty(input);\n }\n checkValidity();\n });\n\n input.addEventListener('invalid', (e) => {\n e.preventDefault();\n checkValidity();\n });\n};\n\nconst setFormValidation = (inputs, options) => {\n const { submit } = options;\n\n /*\n Since we want to make sure that the user gets feedback on all the fields that\n are invalid when clicking on the submit button, especially in the case where\n they may not have blurred out of the field we need to make the fields dirty\n on click of the submit button.\n This is because we only start validating if the field is considered dirty, i.e.,\n the user has entered the field and either and exited or entered input and exited.\n This is to prevent validations from happening when the user has first entered\n the input and started typing. That would be annoying.\n */\n if (submit) {\n submit.addEventListener('click', () => {\n inputs.forEach((input) => {\n if (input.classList.contains(INPUT_SKIP_VALIDATIONS)) { return; }\n makeDirty(input);\n });\n });\n }\n\n inputs.forEach((input, type) => {\n if (input.classList.contains(INPUT_SKIP_VALIDATIONS)) { return; }\n if (input.classList.contains(INPUT_INVALID_CLASS)) { makeDirty(input); }\n handleCustomMessages(input, type);\n handleCustomMessageDisplay(input, options);\n });\n};\n\nexport const instanceMethods = {\n findOrCreateErrorNode,\n};\n\nexport default (form, options) => {\n const type = form.nodeName.toLowerCase();\n validateOptions.inputName = options.inputName || inputName;\n validateOptions.errorMessage = options.errorMessage || errorMessage;\n validateOptions.validations = options.validations;\n validateOptions.findParentNode = options.findParentNode;\n\n if (!form || !form.nodeName) {\n throw new Error('First arg must be a form');\n }\n\n if (type !== 'form') {\n throw new Error('Only forms are supported');\n }\n\n const inputs = form.querySelectorAll('input, select, textarea');\n const submit = form.querySelector('input[type=\"submit\"]:not([formnovalidate])') || form.querySelector('.js-credit-card-submit-btn');\n\n setFormValidation(inputs, { form, submit });\n return {\n findOrCreateErrorNode,\n };\n};\n","\n\nconst translations = JSON.parse('{\"en\":{\"ebanx\":{\"errors\":{\"card_declined\":\"Your card was declined. Please contact your bank or try a different payment method.\",\"choose_payment_option\":\"Choose a payment option\",\"expired_card\":\"Your card has expired. Please update your card details or try a different payment method.\",\"foreign_card\":\"This card was issued outside your country of residence. Please use a card issued within your country of residence.\",\"incorrect_cvc\":\"Your card’s security code (CVC) was entered incorrectly. Please try again.\",\"processing_error\":\"An error occurred while processing your payment. Please try again.\"}},\"models\":{\"advocate\":{\"attributes\":{\"email\":{\"pattern_mismatch\":\"Please enter a valid email address.\",\"type_mismatch\":\"Please enter a valid email address.\"}}},\"payment_requests_form\":{\"attributes\":{\"coupon\":{\"value_missing\":\"Please enter a Tuition Assistance code\"}}},\"user\":{\"attributes\":{\"email\":{\"pattern_mismatch\":\"Please enter a valid email address.\",\"type_mismatch\":\"Please enter a valid email address.\"},\"password\":{\"too_short\":\"Passwords must be at least 8 characters.\"}}}},\"password_mismatch\":\"Password confirmation must match password\",\"value_missing\":\"Required\",\"word_limit\":\"exceeded %{count} word limit\"},\"es\":{\"ebanx\":{\"errors\":{\"card_declined\":\"Tu tarjeta fue rechazada. Contacte al banco o intente con otro método de pago.\",\"choose_payment_option\":\"Elija su opción de pago\",\"expired_card\":\"Tu tarjeta está vencida. Por favor, actualiza la información de tu tarjeta o intenta con otra forma de pago.\",\"foreign_card\":\"Esta tarjeta fue emitida fuera de su país de residencia. Por favor use una tarjeta emitida en su país de residencia.\",\"incorrect_cvc\":\"El código de seguridad ingresado (CVC) es incorrecto. Por favor, intenta de nuevo.\",\"processing_error\":\"Ocurrió un error mientras se procesaba tu pago. Por favor, intenta de nuevo.\"}},\"models\":{\"advocate\":{\"attributes\":{\"email\":{\"pattern_mismatch\":\"Por favor ingrese un correo electrónico válido.\",\"type_mismatch\":\"Por favor ingrese un correo electrónico válido.\"}}},\"payment_requests_form\":{\"attributes\":{\"coupon\":{\"value_missing\":\"Por favor ingrese un código de apoyo económico\"}}},\"user\":{\"attributes\":{\"email\":{\"pattern_mismatch\":\"Por favor ingrese un correo electrónico válido.\",\"type_mismatch\":\"Por favor ingrese un correo electrónico válido.\"},\"password\":{\"too_short\":\"La contraseña debe tener al menos 8 caracteres.\"}}}},\"password_mismatch\":\"La confirmación de contraseña debe coincidir con la contraseña.\",\"value_missing\":\"Requerido\",\"word_limit\":\"has excedido el límite de %{count} palabras\"},\"fr\":{\"ebanx\":{\"errors\":{\"card_declined\":\"Votre carte a été refusée. Veuillez contacter votre banque ou essayez un autre moyen de paiement.\",\"choose_payment_option\":\"Choisissez une option de paiement\",\"expired_card\":\"Votre carte a expiré. Veuillez mettre à jour les informations sur votre carte ou essayez un autre moyen de paiement.\",\"foreign_card\":\"Cette carte a été émise hors de votre pays de résidence. Veuillez utiliser une carte émise dans votre pays de résidence.\",\"incorrect_cvc\":\"Le code de sécurité (CVC) de votre carte a été saisi incorrectement. Veuillez réessayer.\",\"processing_error\":\"Une erreur s’est produite pendant le paiement. Veuillez réessayer.\"}},\"models\":{\"advocate\":{\"attributes\":{\"email\":{\"pattern_mismatch\":\"S’il vous plaît, mettez une adresse email valide.\",\"type_mismatch\":\"S’il vous plaît, mettez une adresse email valide.\"}}},\"payment_requests_form\":{\"attributes\":{\"coupon\":{\"value_missing\":\"Veuillez entrer un code d’assistance aux frais de scolarité\"}}},\"user\":{\"attributes\":{\"email\":{\"pattern_mismatch\":\"S’il vous plaît, mettez une adresse email valide.\",\"type_mismatch\":\"S’il vous plaît, mettez une adresse email valide.\"},\"password\":{\"too_short\":\"Les mots de passe doivent comporter au moins 8 caractères.\"}}}},\"password_mismatch\":\"La confirmation du mot de passe doit correspondre au mot de passe.\",\"value_missing\":\"Requis\",\"word_limit\":\"dépassé la limite de %{count} mots\"},\"it\":{\"ebanx\":{\"errors\":{\"card_declined\":\"La carta è stata rifiutata. Contattare la propria banca o provare un altro metodo di pagamento.\",\"choose_payment_option\":\"Seleziona un’opzione di pagamento\",\"expired_card\":\"La carta è scaduta. Aggiornare i dati della carta o di provare un altro metodo di pagamento.\",\"foreign_card\":\"Questa carta è stata rilasciata in un paese diverso da quello di residenza. Utilizzare una carta emessa nel proprio paese di residenza.\",\"incorrect_cvc\":\"Il codice di sicurezza della carta (CVC) non è corretto. Riprova.\",\"processing_error\":\"Si è verificato un errore durante l’elaborazione del pagamento. Riprova.\"}},\"models\":{\"advocate\":{\"attributes\":{\"email\":{\"pattern_mismatch\":\"Inserisci un indirizzo e-mail valido.\",\"type_mismatch\":\"Inserisci un indirizzo e-mail valido.\"}}},\"payment_requests_form\":{\"attributes\":{\"coupon\":{\"value_missing\":\"Inserire un codice di assistenza scolastica\"}}},\"user\":{\"attributes\":{\"email\":{\"pattern_mismatch\":\"Inserisci un indirizzo e-mail valido.\",\"type_mismatch\":\"Inserisci un indirizzo e-mail valido.\"},\"password\":{\"too_short\":\"La password deve contenere almeno 8 caratteri.\"}}}},\"password_mismatch\":\"La conferma della password deve corrispondere alla password\",\"value_missing\":\"Obbligatorio\",\"word_limit\":\"supera il limite di %{count} parole\"},\"pt\":{\"ebanx\":{\"errors\":{\"card_declined\":\"Seu cartão foi recusado. Por favor, entre em contato com seu banco ou tente outro método de pagamento.\",\"choose_payment_option\":\"Escolha a forma de pagamento\",\"expired_card\":\"Seu cartão expirou. Por favor, atualize os dados do cartão ou tente outro método de pagamento.\",\"foreign_card\":\"O seu cartão foi emitido fora de seu país de residência. Por favor, utilize um cartão emitido em seu país de residência.\",\"incorrect_cvc\":\"O código de segurança de seu cartão (CVC) está incorreto. Por favor, tente novamente.\",\"processing_error\":\"Ocorreu um erro enquanto processávamos seu cartão. Por favor, tente novamente.\"}},\"models\":{\"advocate\":{\"attributes\":{\"email\":{\"pattern_mismatch\":\"Insira um endereço de e-mail válido.\",\"type_mismatch\":\"Insira um endereço de e-mail válido.\"}}},\"payment_requests_form\":{\"attributes\":{\"coupon\":{\"value_missing\":\"Insira o Código de desconto\"}}},\"user\":{\"attributes\":{\"email\":{\"pattern_mismatch\":\"Insira um endereço de e-mail válido.\",\"type_mismatch\":\"Insira um endereço de e-mail válido.\"},\"password\":{\"too_short\":\"A senha deve ter no mínimo 8 caracteres.\"}}}},\"password_mismatch\":\"A confirmação da senha deve corresponder à senha.\",\"value_missing\":\"Obrigatórios\",\"word_limit\":\"excedeu o limite de %{count} palavras\"}}');\n\nexport default translations;\n"],"names":["submitForm","form","submitButton","xhttp","method","url","_document$querySelect","token","document","querySelector","value","XMLHttpRequest","open","setRequestHeader","setFormXhttp","action","onreadystatechange","this","readyState","status","b2bLeadsAsB2cEnabled","JSON","parse","responseText","b2b_leads_as_b2c_enabled","enrollButton","getElementById","notNowButton","style","display","getPageChunk","pageOne","pageTwo","consent","checked","consentText","getElementsByClassName","countryCode","wrapperData","dataset","gdprCountries","split","nonGdprMoreCautiousCountries","programLanguage","includes","gdprType","nonGdprMoreCautiousType","nonGdprLessCautiousType","b2bThankYouDontAgree","innerHTML","classList","add","remove","showNextModal","response","Object","entries","errors","forEach","entry","input","concat","message","setCustomValidity","instanceMethods","errorMessage","cb","currentInput","parentNode","setFormErrors","console","error","disabled","send","FormData","changePage","e","preventDefault","target","button","wrapper","consentRadiobuttonEnabled","consentCheckbox","querySelectorAll","addEventListener","groupEnrollmentModalConnect","validate","VALIDATION_ERROR_CLASS","DIRTY_CLASS","VALID_CLASS","INPUT_INVALID_CLASS","INPUT_SKIP_VALIDATIONS","CUSTOM_DATE_CLASS","formVersion","_document$querySelect2","requiredNeeded","_document$querySelect3","_document$querySelect4","isValidatable","classes","Array","prototype","indexOf","call","findOrCreateErrorNode","_ref","errorNode","createElement","textContent","validationMessage","type","emptyInputValue","removeChild","siblings","_toConsumableArray","children","some","sibling","contains","firstChild","noneSelected","filter","map","appendChild","removeInvalidClass","removeErrorNode","makeDirty","string","replace","char","toLowerCase","validateOptions","errorProps","lang","documentElement","invalidWordLimit","dataWordLimitAttr","getAttribute","trim","length","parseInt","modelName","attribute","messageKey","messages","i18n","models","attributes","inputName","name","match","getCustomMessage","word_limit","CustomMessageWordLimit","validity","localErrorProps","i","prop","snakeCasedProp","camelCaseToSnakeCase","handleCustomMessageDisplay","checkValidity","valid","customDateInputExists","title","findParentNode","setFormValidation","inputs","options","submit","handleCustomMessages","nodeName","validations","Error","translations"],"sourceRoot":""}