// ============================================================ // Equipe Andaime Manutenção — JavaScript Principal // ============================================================ 'use strict'; /* ── Contador Regressivo ─────────────────────────────────── */ function iniciarContador(dataJogo) { const wrapper = document.getElementById('contador'); if (!wrapper) return; const alvo = new Date(dataJogo).getTime(); function atualizar() { const agora = Date.now(); const diff = alvo - agora; if (diff <= 0) { wrapper.innerHTML = `
⚽ JOGO EM ANDAMENTO — INSCRIÇÕES ENCERRADAS
`; return; } const dias = Math.floor(diff / 86400000); const horas = Math.floor((diff % 86400000) / 3600000); const minutos = Math.floor((diff % 3600000) / 60000); const segs = Math.floor((diff % 60000) / 1000); const fmt = n => String(n).padStart(2, '0'); document.getElementById('cnt-dias') && (document.getElementById('cnt-dias').textContent = fmt(dias)); document.getElementById('cnt-horas') && (document.getElementById('cnt-horas').textContent = fmt(horas)); document.getElementById('cnt-min') && (document.getElementById('cnt-min').textContent = fmt(minutos)); document.getElementById('cnt-seg') && (document.getElementById('cnt-seg').textContent = fmt(segs)); } atualizar(); setInterval(atualizar, 1000); } /* ── Validação do Formulário de Cadastro ─────────────────── */ function validarFormCadastro(e) { const form = e.target; let valido = true; // Nome const nome = form.querySelector('[name="nome"]'); const nomeErro = document.getElementById('erro-nome'); if (!nome.value.trim() || nome.value.trim().length < 2) { nome.classList.add('erro'); if (nomeErro) { nomeErro.textContent = 'Informe seu nome completo (mínimo 2 caracteres).'; nomeErro.classList.add('visivel'); } valido = false; } else { nome.classList.remove('erro'); if (nomeErro) nomeErro.classList.remove('visivel'); } // Brasil const brasil = form.querySelector('[name="placar_brasil"]'); const brasilErro = document.getElementById('erro-brasil'); const bVal = parseInt(brasil.value); if (brasil.value === '' || isNaN(bVal) || bVal < 0 || bVal > 20) { brasil.classList.add('erro'); if (brasilErro) { brasilErro.textContent = 'Informe um placar válido (0–20).'; brasilErro.classList.add('visivel'); } valido = false; } else { brasil.classList.remove('erro'); if (brasilErro) brasilErro.classList.remove('visivel'); } // Japão const japao = form.querySelector('[name="placar_japao"]'); const japaoErro = document.getElementById('erro-japao'); const eVal = parseInt(japao.value); if (japao.value === '' || isNaN(eVal) || eVal < 0 || eVal > 20) { japao.classList.add('erro'); if (japaoErro) { japaoErro.textContent = 'Informe um placar válido (0–20).'; japaoErro.classList.add('visivel'); } valido = false; } else { japao.classList.remove('erro'); if (japaoErro) japaoErro.classList.remove('visivel'); } if (!valido) e.preventDefault(); } /* ── Confirmações ────────────────────────────────────────── */ function confirmarExclusao(nome) { return confirm(`Tem certeza que deseja excluir o participante "${nome}"?\n\nEsta ação não pode ser desfeita.`); } function confirmarEncerrar() { return confirm('Encerrar as inscrições agora?\n\nNovos palpites não serão mais aceitos.'); } function confirmarResultado() { return confirm('Confirmar o resultado oficial?\n\nO cálculo dos vencedores será feito automaticamente.'); } /* ── Feedback visual no submit ───────────────────────────── */ function btnLoadingOn(btn) { if (!btn) return; btn.dataset.textoOriginal = btn.innerHTML; btn.innerHTML = ' Aguarde...'; btn.disabled = true; } /* ── Auto-ocultar alertas ─────────────────────────────────── */ function autoOcultarAlertas(ms = 6000) { document.querySelectorAll('.alerta-auto').forEach(el => { setTimeout(() => { el.style.transition = 'opacity .4s'; el.style.opacity = '0'; setTimeout(() => el.remove(), 400); }, ms); }); } /* ── Highlight vencedores na tabela ──────────────────────── */ function destacarVencedores() { document.querySelectorAll('tr.vencedor').forEach(tr => { tr.style.background = 'linear-gradient(90deg, rgba(244,195,0,.08), rgba(244,195,0,.04))'; tr.style.borderLeft = '3px solid var(--amarelo-ouro)'; }); } /* ── Init ────────────────────────────────────────────────── */ document.addEventListener('DOMContentLoaded', () => { // Contador (data injetada pelo PHP via data-attribute) const contEl = document.getElementById('contador'); if (contEl && contEl.dataset.jogo) { iniciarContador(contEl.dataset.jogo); } // Validação cadastro const formCadastro = document.getElementById('form-cadastro'); if (formCadastro) { formCadastro.addEventListener('submit', validarFormCadastro); } // Auto-ocultar alertas autoOcultarAlertas(); // Destacar vencedores destacarVencedores(); // Inputs numéricos: impedir negativo document.querySelectorAll('input[type="number"].form-control-gurus').forEach(inp => { inp.addEventListener('input', () => { if (inp.value < 0) inp.value = 0; if (inp.value > 20) inp.value = 20; }); }); // Animação fade-in cards document.querySelectorAll('.fade-in-up').forEach((el, i) => { el.style.animationDelay = `${i * 0.08}s`; }); });