(function () { var $ = function (id) { return document.getElementById(id); }; var P = new URLSearchParams(location.search), n = (P.get('n') || '').trim(), fe = (P.get('f') || '').trim(), k = n && fe ? n + fe : ''; var f = $('g'), st = $('st'), hola = $('hola'), malo = $('malo'), intro = $('intro'); var t0 = Date.now(), busy = false, KEY = 'aqnsn-ficha-' + k.slice(0, 40); function say(m, ok) { st.textContent = m; st.className = 'status ' + (ok ? 'ok' : 'err'); } function store(op, v) { try { return op === 'get' ? localStorage.getItem(KEY) : op === 'set' ? localStorage.setItem(KEY, v) : localStorage.removeItem(KEY); } catch (e) { return null; } } if (!k) { malo.hidden = false; return; } fetch('/api/invitados/check?n=' + encodeURIComponent(n) + '&f=' + encodeURIComponent(fe), { cache: 'no-store' }) .then(function (r) { return r.json(); }) .then(function (j) { if (!j.ok) { malo.hidden = false; return; } hola.textContent = 'Hola, ' + j.nombre + '. ¡Gracias por querer venir al programa!'; hola.hidden = false; intro.hidden = false; f.hidden = false; try { var d = JSON.parse(store('get') || '{}'); Object.keys(d).forEach(function (n) { if (f.elements[n] && f.elements[n].type !== 'checkbox') f.elements[n].value = d[n]; }); } catch (e) {} }) .catch(function () { malo.hidden = false; }); var timer; f.addEventListener('input', function () { clearTimeout(timer); timer = setTimeout(function () { var d = {}; Array.prototype.forEach.call(f.elements, function (el) { if (el.name && el.type !== 'checkbox' && el.name !== 'web' && el.value) d[el.name] = el.value; }); store('set', JSON.stringify(d)); }, 600); }); f.addEventListener('submit', function (e) { e.preventDefault(); if (busy) return; var resp = {}, falta = null; Array.prototype.forEach.call(f.elements, function (el) { if (/^q\d+$/.test(el.name)) { resp[el.name] = el.value.trim(); if (el.required && !resp[el.name] && !falta) falta = el; } }); if (falta) { falta.focus(); say('Faltan respuestas obligatorias (las marcadas con *).', false); return; } if (!f.consent.checked || !f.privacy.checked) { say('Marca las dos casillas finales para poder enviar la ficha.', false); return; } var email = (f.email.value || '').trim(); if (email && !/^[^@\s]+@[^@\s]+\.[^@\s]{2,}$/.test(email)) { say('El correo no parece válido.', false); return; } busy = true; say('Enviando…', true); fetch('/api/invitados', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ n: n, f: fe, email: email, resp: resp, consent: true, web: f.web.value || '', t: Date.now() - t0 }) }) .then(function (r) { return r.json().catch(function () { return {}; }).then(function (j) { return { ok: r.ok && j.ok, j: j }; }); }) .then(function (x) { if (x.ok) { store('del'); f.reset(); Array.prototype.forEach.call(f.querySelectorAll('fieldset,label,button,.note'), function (n) { n.hidden = true; }); say(f.getAttribute('data-ok'), true); } else say((x.j && x.j.error) || 'No se pudo enviar. Escríbenos a andaquenosabesnada@gmail.com.', false); }) .catch(function () { say('No se pudo enviar. Escríbenos a andaquenosabesnada@gmail.com.', false); }) .then(function () { busy = false; }); }); })();