// ============================================================
// 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`;
});
});