document.addEventListener('DOMContentLoaded', function () { const holesToggle = document.getElementById('holesToggle'); const scoreTable = document.getElementById('scoreTable'); const form = document.getElementById('scoreForm'); const courseSelect = document.getElementById('courseSelect'); if (!holesToggle || !scoreTable || !form || !courseSelect) return; let coursePars = null; const updateTotal = () => { let totalScore = 0; let totalPutts = 0; let totalPenalties = 0; let totalSandLies = 0; let totalToPar = 0; const holes = holesToggle.checked ? 18 : 9; for (let i = 1; i <= holes; i++) { const score = parseInt(document.getElementById(`hole${i}_score`).value) || 0; const putts = parseInt(document.getElementById(`hole${i}_putts`).value) || 0; const penalties = parseInt(document.getElementById(`hole${i}_penalties`).value) || 0; const sandLie = document.getElementById(`hole${i}_sand`).checked; totalScore += score; totalPutts += putts; totalPenalties += penalties; if (sandLie) totalSandLies++; if (coursePars && score > 0) { const par = coursePars[`par_hole_${i}`]; totalToPar += score - par; } } document.getElementById('totalScore').textContent = totalScore; document.getElementById('totalPutts').textContent = totalPutts; document.getElementById('totalPenalties').textContent = totalPenalties; document.getElementById('totalSandLies').textContent = totalSandLies; const toParElement = document.getElementById('totalToPar'); if (totalToPar > 0) { toParElement.textContent = `+${totalToPar}`; toParElement.classList.add('text-danger'); toParElement.classList.remove('text-success'); } else if (totalToPar < 0) { toParElement.textContent = totalToPar; toParElement.classList.add('text-success'); toParElement.classList.remove('text-danger'); } else { toParElement.textContent = 'E'; toParElement.classList.remove('text-danger', 'text-success'); } }; const updateVsPar = (holeNumber) => { if (!coursePars) return; const scoreInput = document.getElementById(`hole${holeNumber}_score`); const score = parseInt(scoreInput.value) || 0; const vsParCell = document.getElementById(`hole${holeNumber}_vs_par`); if (score > 0) { const par = coursePars[`par_hole_${holeNumber}`]; const diff = score - par; if (diff > 0) { vsParCell.textContent = `+${diff}`; vsParCell.className = 'text-danger fw-bold'; } else if (diff < 0) { vsParCell.textContent = diff; vsParCell.className = 'text-success fw-bold'; } else { vsParCell.textContent = 'E'; vsParCell.className = 'text-muted'; } } else { vsParCell.textContent = '-'; vsParCell.className = ''; } }; const renderTable = () => { const holes = holesToggle.checked ? 18 : 9; let html = ''; for (let i = 1; i <= 18; i++) { const hidden = i > holes ? ' style="display: none;"' : ''; const parValue = coursePars ? coursePars[`par_hole_${i}`] : '-'; html += ` ${i} ${parValue} -
`; } scoreTable.innerHTML = html; attachInputListeners(); }; const attachInputListeners = () => { form.querySelectorAll('input[type="number"]').forEach(input => { input.addEventListener('input', () => { const holeNumber = input.id.match(/\d+/)[0]; updateVsPar(holeNumber); updateTotal(); }); }); form.querySelectorAll('input[type="checkbox"]').forEach(input => { input.addEventListener('input', updateTotal); }); }; const toggleInputs = (disabled) => { form.querySelectorAll('input').forEach(input => { if(input.id !== 'holesToggle') { input.disabled = disabled; } }); }; courseSelect.addEventListener('change', async () => { const courseId = courseSelect.value; if (courseId) { try { const response = await fetch(`api/get_course_pars.php?course_id=${courseId}`); if(response.ok) { coursePars = await response.json(); if(coursePars.error) { console.error(coursePars.error); coursePars = null; toggleInputs(true); } else { renderTable(); toggleInputs(false); } } else { console.error('Failed to fetch par data'); coursePars = null; toggleInputs(true); } } catch (error) { console.error('Error fetching par data:', error); coursePars = null; toggleInputs(true); } } else { coursePars = null; renderTable(); toggleInputs(true); } updateTotal(); }); holesToggle.addEventListener('change', () => { const holes = holesToggle.checked ? 18 : 9; for (let i = 1; i <= 18; i++) { const row = document.getElementById(`hole_row_${i}`); if (row) { row.style.display = i > holes ? 'none' : 'table-row'; } } updateTotal(); }); form.addEventListener('submit', async function(e) { e.preventDefault(); const playerName = document.getElementById('playerName').value; if (!playerName) { alert('Player name is required.'); return; } const holes = holesToggle.checked ? 18 : 9; const scores = {}; for (let i = 1; i <= holes; i++) { scores[`hole${i}_score`] = parseInt(document.getElementById(`hole${i}_score`).value) || 0; } const data = { playerName: playerName, teamName: document.getElementById('teamName').value, courseId: courseSelect.value, holes: holes, scores: scores, totalScore: parseInt(document.getElementById('totalScore').textContent) || 0, totalToPar: document.getElementById('totalToPar').textContent || 'E', }; try { const response = await fetch('submit_score.php', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(data) }); const result = await response.json(); if (response.ok) { const successToast = document.getElementById('successToast'); if (successToast) { const toast = new bootstrap.Toast(successToast); toast.show(); } form.reset(); courseSelect.value = ''; coursePars = null; renderTable(); toggleInputs(true); updateTotal(); } else { alert(`Error: ${result.error}`); } } catch (error) { console.error('Submission error:', error); alert('An error occurred while submitting the score.'); } }); renderTable(); updateTotal(); });