jQuery(document).ready(function() { loadSchedule(); }); // Load Schedule var loadSchedule = function() { var table = jQuery("#schedule"); jQuery.ajax({ url: 'json.php', type: 'GET', dataType: 'json', data: { controller: 'schedule' }, success: function(data, textStatus, jqXHR) { if (data.programs != undefined) { jQuery.each(data.programs, function(i, value) { table.append(format(value)); }); jQuery("time").localize('yyyy-mm-dd HH:MM:ss'); } }, error: function(jqXHR, textStatus, errorThrown) { }, complete: function(jqXHR, textStatus) { schedule(); } }); } // Stream var streamSchedule = function(total) { var table = jQuery("#schedule"); jQuery.ajax({ url: 'json.php', type: 'GET', dataType: 'json', data: { controller: 'stream', total: total }, success: function(data, textStatus, jqXHR) { if (data.programs != undefined) { jQuery.each(data.programs, function(i, value) { table.append(format(value)); }); jQuery("time").localize('yyyy-mm-dd HH:MM:ss'); } }, error: function(jqXHR, textStatus, errorThrown) { }, complete: function(jqXHR, textStatus) { } }); return false; } // Update Counter var schedule = function() { var current = Math.round((new Date()).getTime() / 1000); var data = jQuery("#schedule td:last-child"); var kill = 0; jQuery.each(data, function(i, value) { var that = jQuery(this); var countdown = that.data("airtime"); var key = jQuery("#p" + that.data("id") + " td:first-child"); key.attr("class", colorize(countdown - current)); if (key.hasClass('key-00')) { if ((countdown - current + that.data("duration")) <= 0) { jQuery("#p" + that.data("id")).remove(); kill++; } } jQuery(this).html(getETA(countdown - current)); }); if (kill > 0) { streamSchedule(kill); } setTimeout(schedule, 1000); } function colorize(time) { if (time <= 0) return 'key-00'; if (time <= 3600) return 'key-01'; if (time <= 10800) return 'key-03'; if (time <= 21600) return 'key-06'; if (time <= 43200) return 'key-12'; return 'key-XX'; } function format(data) { var current = Math.round((new Date()).getTime() / 1000); return '\n\  \n\ ' + ((data.anidb) ? '' + data.title + '' : data.title) + '\n\ ' + data.episode + '\n\ ' + data.station + '\n\ \n\ ' + (data.unixtime - current) + '\n\ '; } function getETA(time) { if (time < 0) return 'Now Playing...'; var h = Math.floor(time / 3600); var m = Math.floor(time / 60) - (h * 60); var s = time - (h * 3600) - (m * 60); return pad(h, 2) + 'h ' + pad(m, 2) + 'm ' + pad(s, 2) + 's'; } function pad(num, len) { var output = '' + num; while (output.length < len) output = "0" + output; return output; }