document.addEventListener("DOMContentLoaded", function() { const accCi = document.getElementById('accCi'); const pCi = document.getElementById('pCi'); const accidentsMin = 1, accidentsMax = 999; const periodMin = 1, periodMax = 20; accCi.addEventListener('input', () => validateInputCi(accCi, accidentsMin, accidentsMax)); pCi.addEventListener('input', () => validateInputCi(pCi, periodMin, periodMax)); document.getElementById("accCi").addEventListener("input", calculateConfidenceInterval); document.getElementById("pCi").addEventListener("input", calculateConfidenceInterval); document.getElementById("kCi").addEventListener("change", calculateConfidenceInterval); }); function validateInputCi(inputElement, min, max) { const value = parseFloat(inputElement.value); if (value < min || value > max) { alert(`The value must be a number between ${min} y ${max}.`); inputElement.value = ''; } } function calculateConfidenceInterval() { const accCi = parseInt(document.getElementById("accCi").value); const pCi = parseInt(document.getElementById("pCi").value); const kCi = parseFloat(document.getElementById("kCi").value) / 100; if (isNaN(accCi) || isNaN(pCi) || pCi <= 0 || accCi < 0) { document.getElementById("pCi").textContent = "0.0"; return; } const m = accCi / pCi; document.getElementById("pCi").textContent = m.toFixed(1); let z; switch (kCi) { case 0.80: z = 1.282; break; case 0.85: z = 1.440; break; case 0.90: z = 1.645; break; case 0.95: z = 1.960; break; case 0.99: z = 2.576; break; default: z = 1.960; } const stdError = m / Math.sqrt(accCi); const marginOfError = z * stdError; const lowerLimit = m - marginOfError; const upperLimit = m + marginOfError; document.getElementById("accFCi").textContent = m.toFixed(1); document.getElementById("lowerCi").textContent = lowerLimit.toFixed(1); document.getElementById("upperCi").textContent = upperLimit.toFixed(1); }