152 lines
6.6 KiB
JavaScript
152 lines
6.6 KiB
JavaScript
/* ===== VALEA Inversiones — Scripts estáticos ===== */
|
|
(function () {
|
|
'use strict';
|
|
|
|
/* ---------- Mobile navigation ---------- */
|
|
var toggle = document.querySelector('.nav-toggle');
|
|
var mobile = document.querySelector('.nav-mobile');
|
|
if (toggle && mobile) {
|
|
toggle.addEventListener('click', function () {
|
|
mobile.classList.toggle('open');
|
|
var icon = toggle.querySelector('svg');
|
|
if (mobile.classList.contains('open')) {
|
|
icon.innerHTML = '<line x1="18" y1="6" x2="6" y2="18"></line><line x1="6" y1="6" x2="18" y2="18"></line>';
|
|
} else {
|
|
icon.innerHTML = '<line x1="3" y1="12" x2="21" y2="12"></line><line x1="3" y1="6" x2="21" y2="6"></line><line x1="3" y1="18" x2="21" y2="18"></line>';
|
|
}
|
|
});
|
|
mobile.querySelectorAll('a').forEach(function (a) {
|
|
a.addEventListener('click', function () { mobile.classList.remove('open'); });
|
|
});
|
|
}
|
|
|
|
/* ---------- Active nav link ---------- */
|
|
var path = window.location.pathname.split('/').pop() || 'index.html';
|
|
document.querySelectorAll('[data-nav]').forEach(function (link) {
|
|
if (link.getAttribute('data-nav') === path) link.classList.add('active');
|
|
});
|
|
|
|
/* ---------- Scroll reveal ---------- */
|
|
var reveals = document.querySelectorAll('.reveal');
|
|
if ('IntersectionObserver' in window && reveals.length) {
|
|
var io = new IntersectionObserver(function (entries) {
|
|
entries.forEach(function (entry) {
|
|
if (entry.isIntersecting) {
|
|
entry.target.classList.add('visible');
|
|
io.unobserve(entry.target);
|
|
}
|
|
});
|
|
}, { threshold: 0.12 });
|
|
reveals.forEach(function (el) { io.observe(el); });
|
|
} else {
|
|
reveals.forEach(function (el) { el.classList.add('visible'); });
|
|
}
|
|
|
|
/* ---------- Toast ---------- */
|
|
function showToast(title, desc, type) {
|
|
var vp = document.querySelector('.toast-viewport');
|
|
if (!vp) {
|
|
vp = document.createElement('div');
|
|
vp.className = 'toast-viewport';
|
|
document.body.appendChild(vp);
|
|
}
|
|
var t = document.createElement('div');
|
|
t.className = 'toast ' + (type || 'success');
|
|
t.innerHTML =
|
|
'<div><div class="toast-title"></div><div class="toast-desc"></div></div>' +
|
|
'<button class="toast-close" aria-label="Cerrar"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="18" y1="6" x2="6" y2="18"></line><line x1="6" y1="6" x2="18" y2="18"></line></svg></button>';
|
|
t.querySelector('.toast-title').textContent = title;
|
|
t.querySelector('.toast-desc').textContent = desc || '';
|
|
vp.appendChild(t);
|
|
var close = function () {
|
|
t.style.transition = 'opacity .3s, transform .3s';
|
|
t.style.opacity = '0';
|
|
t.style.transform = 'translateX(100%)';
|
|
setTimeout(function () { if (t.parentNode) t.parentNode.removeChild(t); }, 300);
|
|
};
|
|
t.querySelector('.toast-close').addEventListener('click', close);
|
|
setTimeout(close, 5000);
|
|
}
|
|
window.valeaToast = showToast;
|
|
|
|
/* ---------- Contact form ---------- */
|
|
var form = document.getElementById('contact-form');
|
|
if (form) {
|
|
var fields = ['nombre', 'email', 'telefono', 'empresa', 'asunto', 'mensaje'];
|
|
var data = {};
|
|
fields.forEach(function (f) { data[f] = ''; });
|
|
|
|
function setError(name, msg) {
|
|
var input = form.querySelector('[name="' + name + '"]');
|
|
var errEl = form.querySelector('[data-error="' + name + '"]');
|
|
if (input) input.classList.toggle('error', !!msg);
|
|
if (errEl) errEl.textContent = msg || '';
|
|
}
|
|
|
|
function validate() {
|
|
var ok = true;
|
|
if (!data.nombre.trim()) { setError('nombre', 'El nombre es requerido'); ok = false; } else setError('nombre', '');
|
|
if (!data.email.trim()) { setError('email', 'El email es requerido'); ok = false; }
|
|
else if (!/^\S+@\S+\.\S+$/.test(data.email)) { setError('email', 'Email inválido'); ok = false; } else setError('email', '');
|
|
if (!data.telefono.trim()) { setError('telefono', 'El teléfono es requerido'); ok = false; } else setError('telefono', '');
|
|
if (!data.asunto.trim()) { setError('asunto', 'El asunto es requerido'); ok = false; } else setError('asunto', '');
|
|
if (!data.mensaje.trim()) { setError('mensaje', 'El mensaje es requerido'); ok = false; } else setError('mensaje', '');
|
|
return ok;
|
|
}
|
|
|
|
fields.forEach(function (name) {
|
|
var input = form.querySelector('[name="' + name + '"]');
|
|
if (input) {
|
|
input.addEventListener('input', function () {
|
|
data[name] = input.value;
|
|
if (input.classList.contains('error')) setError(name, '');
|
|
});
|
|
}
|
|
});
|
|
|
|
form.addEventListener('submit', function (e) {
|
|
e.preventDefault();
|
|
fields.forEach(function (name) {
|
|
var input = form.querySelector('[name="' + name + '"]');
|
|
if (input) data[name] = input.value;
|
|
});
|
|
if (!validate()) {
|
|
showToast('Error de validación', 'Por favor complete todos los campos requeridos.', 'error');
|
|
return;
|
|
}
|
|
var btn = form.querySelector('button[type="submit"]');
|
|
var original = btn.innerHTML;
|
|
btn.disabled = true;
|
|
btn.innerHTML = '<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right:.5rem;animation:spin 1s linear infinite"><path d="M21 12a9 9 0 1 1-6.219-8.56"></path></svg> Enviando...';
|
|
|
|
// Alternativa funcional sin backend: abrir el cliente de correo del usuario
|
|
// con todos los datos del formulario ya rellenados.
|
|
setTimeout(function () {
|
|
var subject = encodeURIComponent(data.asunto || 'Consulta desde la web VALEA Inversiones');
|
|
var body = encodeURIComponent(
|
|
'Nombre: ' + data.nombre + '\n' +
|
|
'Email: ' + data.email + '\n' +
|
|
'Teléfono: ' + data.telefono + '\n' +
|
|
(data.empresa ? 'Empresa: ' + data.empresa + '\n' : '') +
|
|
'\nMensaje:\n' + data.mensaje
|
|
);
|
|
var mailto = 'mailto:valeainversiones@gmail.com?subject=' + subject + '&body=' + body;
|
|
|
|
showToast('¡Mensaje listo para enviar!', 'Se abrirá su cliente de correo. Si no se abre, escríbanos a valeainversiones@gmail.com', 'success');
|
|
btn.disabled = false;
|
|
btn.innerHTML = original;
|
|
form.reset();
|
|
fields.forEach(function (f) { data[f] = ''; });
|
|
|
|
// Intentar abrir el cliente de correo
|
|
try { window.location.href = mailto; } catch (err) {}
|
|
}, 1200);
|
|
});
|
|
}
|
|
})();
|
|
|
|
/* spinner keyframe injected */
|
|
var style = document.createElement('style');
|
|
style.textContent = '@keyframes spin{to{transform:rotate(360deg)}}';
|
|
document.head.appendChild(style);
|