document.addEventListener('DOMContentLoaded', function() {
var XML_URL = 'https://www.saltv.es/EPG/epg-ch1.xml';
var MAX_PROGRAMAS = 20;
function parsearFechaXMLTV(str) {
if (!str || str.length < 14) return null;
var a = str.substring(0, 4);
var m = str.substring(4, 6) - 1;
var d = str.substring(6, 8);
var h = str.substring(8, 10);
var min = str.substring(10, 12);
var s = str.substring(12, 14);
var offsetMatch = str.substring(14).trim().match(/^([+-])(\d{2})(\d{2})$/);
if (offsetMatch) {
var sign = offsetMatch[1] === '+' ? 1 : -1;
var offH = parseInt(offsetMatch[2], 10);
var offM = parseInt(offsetMatch[3], 10);
var totalOffsetMs = sign * ((offH * 60) + offM) * 60 * 1000;
var utcBase = Date.UTC(a, m, d, h, min, s);
return new Date(utcBase - totalOffsetMs);
}
return new Date(a, m, d, h, min, s);
}
function parsearXML(xmlText) {
var parser = new DOMParser();
var xmlDoc = parser.parseFromString(xmlText, "text/xml");
var programmes = xmlDoc.getElementsByTagName("programme");
var container = document.getElementById('sal-epg-container');
if (!container) return;
container.innerHTML = '';
var ahora = new Date();
var programasValidos = 0;
for (var i = 0; i = MAX_PROGRAMAS) break;
var prog = programmes[i];
var titleEl = prog.getElementsByTagName("title")[0] || prog.getElementsByTagName("original_title")[0];
var title = titleEl ? titleEl.textContent : "SIN TÍTULO";
var startAttr = prog.getAttribute("start");
var stopAttr = prog.getAttribute("stop");
var fechaInicio = parsearFechaXMLTV(startAttr);
var fechaFin = parsearFechaXMLTV(stopAttr);
if (fechaFin && fechaFin < ahora) continue;
var horaStr = "--:--";
if (fechaInicio) {
var hh = String(fechaInicio.getHours()).padStart(2, '0');
var mm = String(fechaInicio.getMinutes()).padStart(2, '0');
horaStr = hh + ":" + mm;
}
var item = document.createElement('div');
item.className = 'sal-epg-item';
item.innerHTML = '
' + horaStr + '' +
'
' + title + '';
container.appendChild(item);
programasValidos++;
}
if (programasValidos === 0) {
container.innerHTML = '
No hay más emisiones programadas para hoy.';
}
}
fetch(XML_URL)
.then(function(response) {
if (!response.ok) throw new Error('Error al cargar EPG');
return response.text();
})
.then(parsearXML)
.catch(function() {
// Fallback a ruta relativa si la absoluta es bloqueada por CORS
fetch('/EPG/epg-ch1.xml')
.then(function(r) { return r.text(); })
.then(parsearXML)
.catch(function() {
var container = document.getElementById('sal-epg-container');
if (container) {
container.innerHTML = '
Programación no disponible temporalmente.';
}
});
});
});