document.addEventListener('DOMContentLoaded', function() {
const liveTrainForm = document.getElementById('live-train-form');
let map = null; // Variable to hold the map instance
let trainMarker = null; // Variable to hold the train marker
if (liveTrainForm) {
liveTrainForm.addEventListener('submit', function(e) {
e.preventDefault();
const trainNumber = document.getElementById('train-number').value;
// Use today's date for the demo
const trainDate = new Date().toISOString().slice(0, 10).replace(/-/g, '');
const resultDiv = document.getElementById('live-train-result');
resultDiv.innerHTML = '
';
fetch(`api/live_train_status_handler.php?train_number=${trainNumber}&date=${trainDate}`)
.then(response => response.json())
.then(data => {
if(data.ResponseCode == 200) {
// Handle route display
let routeHtml = '';
data.Route.forEach(station => {
let statusClass = station.IsCurrentStation ? 'text-primary fw-bold' : '';
routeHtml += `
${station.StationName} (${station.StationCode})
Arrival: ${station.ActualArrival} | Departure: ${station.ActualDeparture}
`;
});
resultDiv.innerHTML = `
Current Status: ${data.Position}
`;
// Handle map display
const coords = data.CurrentStation;
if (coords.latitude && coords.longitude) {
const latLng = [coords.latitude, coords.longitude];
if (!map) {
// Initialize map
map = L.map('live-train-map').setView(latLng, 13);
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
attribution: '© OpenStreetMap contributors'
}).addTo(map);
trainMarker = L.marker(latLng).addTo(map);
} else {
// Update map
map.setView(latLng, 13);
trainMarker.setLatLng(latLng);
}
trainMarker.bindPopup(`${data.TrainName}
${data.Position}`).openPopup();
}
} else {
resultDiv.innerHTML = `${data.Message || 'Could not fetch live train status.'}
`;
}
})
.catch(err => {
console.error('Error:', err);
resultDiv.innerHTML = `An error occurred.
`;
});
});
}
});