(function() {
var XML_URL = 'https://www.saltv.es/EPG/epg-ch1.xml';
var MAX_PROGRAMAS = 20;
var container = document.getElementById('sal-epg-container');
var prevBtn = document.getElementById('sal-epg-prev');
var nextBtn = document.getElementById('sal-epg-next');
if (prevBtn && container) {
prevBtn.addEventListener('click', function() {
container.scrollBy({ left: -300, behavior: 'smooth' });
});
}
if (nextBtn && container) {
nextBtn.addEventListener('click', function() {
container.scrollBy({ left: 300, behavior: 'smooth' });
});
}
function parsearFechaXMLTV(str) {
if (!str || str.length = 14) ? parseInt(str.substring(12, 14), 10) : 0;
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");
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 card = document.createElement('div');
card.className = 'sal-epg-card';
card.innerHTML = '
' + horaStr + '' +
'
' + title + '';
container.appendChild(card);
programasValidos++;
}
if (programasValidos === 0) {
container.innerHTML = '
No hay más emisiones programadas para hoy.';
}
}
function mostrarError() {
if (container) {
container.innerHTML = '
Programación no disponible temporalmente.';
}
}
fetch(XML_URL)
.then(function(r) {
if (!r.ok) throw new Error('CORS / HTTP Error');
return r.text();
})
.then(parsearXML)
.catch(function() {
fetch('/EPG/epg-ch1.xml')
.then(function(r) {
if (!r.ok) throw new Error('Relative Error');
return r.text();
})
.then(parsearXML)
.catch(function() {
fetch('https://api.allorigins.win/raw?url=' + encodeURIComponent(XML_URL))
.then(function(r) { return r.text(); })
.then(parsearXML)
.catch(mostrarError);
});
});
})();