Agende uma conversa com nossos especialistas

Nossa equipe terá o maior prazer em apresentar a plataforma e mostrar como ela pode ajudar a sua instituição.

Seus dados serão enviados para a equipe comercial da Tutor.

(function () { const FORM_PRODUCT_ID = 8; const FORM_TOKEN_URL = `https://www.tutor.do/api/form/token?idProjeto=`; const FORM_SUBMIT_URL = 'https://www.tutor.do/api/projeto/form'; function parseApiResponse(text) { if (!text) return {}; try { return JSON.parse(text); } catch (error) { return { status:false, mensagem:text }; } } function getApiErrorMessage(data, fallback) { if (data?.codigo && data?.mensagem) return `Código : `; if (data?.mensagem) return data.mensagem; return fallback; } function formatPhone(value) { const digits = value.replace(/\D/g, '').slice(0, 11); if (digits.length <= 2) return digits ? `(` : ''; if (digits.length <= 6) return `() `; if (digits.length <= 10) return `() -`; return `() -`; } function notifyParentHeight() { window.parent?.postMessage({ type:'tutor-contact-form-height', height:document.documentElement.scrollHeight }, '*'); } async function getFormToken() { const response = await fetch(FORM_TOKEN_URL, { method:'GET', cache:'no-store', headers:{ 'Accept':'application/json' } }); const text = await response.text(); const data = parseApiResponse(text); if (!response.ok || !data.status || !data.token) { throw new Error(getApiErrorMessage(data, 'Não foi possível gerar o token do formulário.')); } return data.token; } function initTutorContactForm(embed) { const form = embed.querySelector('.tutor-contact-form'); const phoneInput = embed.querySelector('[name="telefone"]'); const status = embed.querySelector('.tutor-contact-status'); if (!form) return; function setFormStatus(type, message) { if (!status) return; status.className = `tutor-contact-status `; status.textContent = message; notifyParentHeight(); } function setFieldError(field, message) { const group = field.closest('.tutor-contact-field'); const error = group?.querySelector('.tutor-contact-field-error'); if (!group || !error) return; group.classList.toggle('has-error', Boolean(message)); field.setAttribute('aria-invalid', message ? 'true' : 'false'); error.textContent = message || ''; } function validateField(field) { const value = field.value.trim(); const requiredMessage = field.dataset.requiredMessage || 'Este campo é obrigatório'; if (field.required && !value) { setFieldError(field, requiredMessage); return false; } if (field.type === 'email' && value && !field.validity.valid) { setFieldError(field, field.dataset.emailMessage || 'Informe um e-mail válido'); return false; } setFieldError(field, ''); return true; } function validateForm() { const fields = [...form.querySelectorAll('input, select, textarea')]; const invalid = fields.filter(field => !validateField(field)); if (invalid.length > 0) invalid[0].focus(); return invalid.length === 0; } async function submitContactForm(event) { event.preventDefault(); setFormStatus('', ''); if (!validateForm()) { notifyParentHeight(); return; } const button = form.querySelector('button[type="submit"]'); const originalText = button.textContent; button.disabled = true; button.textContent = 'Enviando...'; try { const token = await getFormToken(); const formData = new FormData(form); const payload = { token, nome: formData.get('nome') || '', email: formData.get('email') || '', telefone: formData.get('telefone') || '', tipo_escola: formData.get('tipo_escola') || '', quantidade_alunos: formData.get('quantidade_alunos') || '', nome_escola_curso_empresa: formData.get('nome_escola_curso_empresa') || '', como_podemos_ajudar: formData.get('como_podemos_ajudar') || '' }; const response = await fetch(FORM_SUBMIT_URL, { method:'POST', headers:{ 'Content-Type':'application/json', 'Accept':'application/json' }, body:JSON.stringify(payload) }); const text = await response.text(); const data = parseApiResponse(text); if (!response.ok || !data.status) { throw new Error(getApiErrorMessage(data, 'Não foi possível enviar o formulário.')); } form.reset(); [...form.querySelectorAll('input, select, textarea')].forEach(field => setFieldError(field, '')); setFormStatus('success', 'Recebemos seus dados. Nossa equipe vai entrar em contato em breve.'); } catch (error) { console.error('Erro ao enviar formulário:', error); setFormStatus('error', error.message || 'Não foi possível enviar agora. Tente novamente em alguns instantes.'); } finally { button.disabled = false; button.textContent = originalText; notifyParentHeight(); } } phoneInput?.addEventListener('input', event => { event.target.value = formatPhone(event.target.value); validateField(event.target); }); form.querySelectorAll('input, select, textarea').forEach(field => { field.addEventListener('blur', () => validateField(field)); field.addEventListener('change', () => validateField(field)); field.addEventListener('input', () => { if (field !== phoneInput) validateField(field); }); }); form.addEventListener('submit', submitContactForm); } function initAllTutorContactForms() { document.querySelectorAll('.tutor-contact-embed').forEach(initTutorContactForm); notifyParentHeight(); } if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', initAllTutorContactForms); } else { initAllTutorContactForms(); } window.addEventListener('load', notifyParentHeight); window.addEventListener('resize', notifyParentHeight); })();