function hideKeyboard() { document.activeElement.blur(); } function login() { const username = document.getElementById("username").value.trim(); const password = document.getElementById("password").value.trim(); const provider = document.getElementById("provider").value.trim(); const msg = document.getElementById("msg"); if (!username || !password || !provider) { msg.textContent = "Preencha todos os campos."; return; } // msg.textContent = "Verificando..."; msg.textContent = ""; document.getElementById("loader").classList.remove("hidden"); hideKeyboard(); fetch("https://auth.xstream.one/api/authorization.php", { method: "POST", headers: { "Content-Type": "application/x-www-form-urlencoded" }, body: `username=${encodeURIComponent(username)}&password=${encodeURIComponent(password)}&provider=${encodeURIComponent(provider)}` }) .then(res => res.json()) .then(data => { if (data.status === "authorized") { const provider_dns = data.dns; const apiURL = `${provider_dns}/player_api.php?username=${username}&password=${password}`; fetch(apiURL) .then(res => res.json()) .then(data => { if (data.user_info && data.user_info.status === "Active") { localStorage.setItem("user", username); localStorage.setItem("pass", password); localStorage.setItem("provider", provider_dns); localStorage.setItem("exp_date", data.user_info.exp_date || ''); localStorage.setItem("max_connections", data.user_info.max_connections || ''); window.location.href = "home.html"; } else { msg.textContent = "Conta vencida!"; document.getElementById("loader").classList.add("hidden"); } }) .catch(() => { msg.textContent = "Erro ao conectar com o servidor."; document.getElementById("loader").classList.add("hidden"); }); } else { msg.textContent = data.mensagem || "Provedor não autorizado."; document.getElementById("loader").classList.add("hidden"); } }) .catch(() => { msg.textContent = "Erro ao verificar o provedor."; document.getElementById("loader").classList.add("hidden"); }); } document.addEventListener("DOMContentLoaded", () => { const campos = [ document.getElementById("username"), document.getElementById("password"), document.getElementById("provider"), document.getElementById("btnLogin") ]; let index = 0; function focarCampo(i) { index = i; campos[index].focus(); } // Aplica tabindex e detecta quando o campo ganha foco campos.forEach((campo, i) => { campo.setAttribute("tabindex", "0"); campo.addEventListener("focus", () => { index = i; }); }); // Foco inicial no primeiro campo ao abrir o app focarCampo(0); document.addEventListener("keydown", (e) => { const current = campos[index]; const active = document.activeElement; // Se nada estiver focado e setas forem pressionadas, foca no primeiro campo if (!campos.includes(active) && (e.key === "ArrowDown" || e.key === "ArrowUp")) { e.preventDefault(); focarCampo(0); return; } // BACK → Fecha teclado e mantém foco if ((e.key === "Backspace" || e.key === "BrowserBack") && current.tagName === "INPUT") { e.preventDefault(); current.blur(); setTimeout(() => { if (document.activeElement !== current) { current.focus(); } }, 200); return; } // SETAS if (e.key === "ArrowDown") { e.preventDefault(); if (index < campos.length - 1) { focarCampo(index + 1); } return; } if (e.key === "ArrowUp") { e.preventDefault(); if (index > 0) { focarCampo(index - 1); } return; } // ENTER / OK if (e.key === "Enter" || e.key === "OK") { e.preventDefault(); if (current.tagName === "INPUT") { // Alterna entre abrir e fechar o teclado virtual if (document.activeElement === current) { current.blur(); // Fecha o teclado } else { current.focus(); // Abre o teclado } } else if (current.id === "btnLogin") { login(); } } }); });