var showLimit = 5; var showOffset = 0; var loadShows = true; var movieLimit = 5; var movieOffset = 0; var loadMovies = true; var seasonOpacity = 0.5; $(document).ready(function() { getLatest('Shows'); getLatest('Movies'); getShows(); getMovies(); $(".nav a").on('click',function(e) { var page = $(this).attr('href'); e.preventDefault(); window.location.hash = page; showPage(page); }); $(window).scroll(function(){ if ($(window).scrollTop()+200 >= ($(document).height() - ($(window).height()))){ if ($("#shows").is(":visible") && loadShows == true) { loadShows = false; getShows(); } if ($("#movies").is(":visible") && loadMovies == true) { loadMovies = false; getMovies(); } } }); var url = document.location.toString(); if (url.match('#')) { showPage('#'+url.split('#')[1]); } }); function showPage(page) { $('.content').hide(); $(".nav li").removeClass('active'); $(".nav li:has(a[href="+page+"])").addClass('active'); window.scrollTo(0, 0); $(page).show(); } function getLatest(type) { $.getJSON('api.php', { 'type': type.toLowerCase(), 'get': 'latest' }, function(data) { $.each(data, function (key, ep) { var ulLatestContainer = $("#latest"+type); if(type == 'Shows') { var liLatestItem = $('<li><img src="'+cdn('show/'+escape(ep.show))+'/poster.jpg" /><div class="epLabel">'+ep.show+'<br />'+ep.episode+'<br />'+ep.airdate+'</div></li>'); }else{ var liLatestItem = $('<li><img src="'+cdn('movie/'+escape(ep.movie))+'/poster.jpg" /><div class="epLabel">'+ep.movie+'</div></li>'); } ulLatestContainer.append(liLatestItem); }); $('.jcarousel.jc'+type) .on('jcarousel:create jcarousel:reload', function() { var element = $(this), width = element.innerWidth(); if (width > 1000) { width = width / 5; } else if (width > 800) { width = width / 4; } else if (width > 590) { width = width / 3; } else if (width < 590) { width = width / 2; } element.jcarousel('items').css('width', width + 'px'); }) .jcarousel({ wrap: 'both' }); $('.jcarousel-control-prev.jc'+type) .on('jcarouselcontrol:active', function() { $(this).removeClass('inactive'); }) .on('jcarouselcontrol:inactive', function() { $(this).addClass('inactive'); }) .jcarouselControl({ target: '-=1' }); $('.jcarousel-control-next.jc'+type) .on('jcarouselcontrol:active', function() { $(this).removeClass('inactive'); }) .on('jcarouselcontrol:inactive', function() { $(this).addClass('inactive'); }) .jcarouselControl({ target: '+=1' }); } ); } function getShows() { $("#loading").show(); $.getJSON('api.php', { 'get': 'shows', 'limit': showLimit.toString(), 'offset': showOffset.toString() }, function(data) { var divShows = $("#shows"); var i = 0; $.each(data, function (key, show) { if(show.seasons.length == 0) { return true; } var divShowContainer = $('<div class="show panel panel-default" data-showid="'+show.id+'" id="show_'+show.id+'"></div>'); var divShowHeader = $('<div class="showName panel-heading"><h2 class="panel-title text-center"><img class="showLogo lazy" style="min-height: 50px; height: 50px;" alt="'+show.name+'" data-original="'+cdn('show/'+escape(show.folder)+'/logo.png')+'" /></h2></div>'); var divShowBody = $('<div class="panel-body lazy" data-original="'+cdn('show/'+escape(show.folder)+'/fanart.jpg')+'"></div>'); divShowBody.css('background-image', 'url('+cdn('img/no_fanart.jpg')); if(show.seasons[0].season == '0') { var countSeasons = show.seasons.length-1; } else { var countSeasons = show.seasons.length; } var countEpisodes = 0; $.each(show.seasons, function(i, season) { countEpisodes = countEpisodes+season.count; }); var divShowFooter =$('<div class="panel-footer"><strong>Seasons:</strong> '+countSeasons+', <strong>Episodes:</strong> '+countEpisodes+' </div>'); var divShowPoster = $('<div class="col-md-2 text-center"><a href="#" class="thumbnail"><img id="poster_'+show.id+'" class="showPoster lazy" data-original="'+cdn('show/'+escape(show.folder)+'/poster.jpg')+'" /></a></div>'); var ulSeasons = $('<ul class="seasons col-md-10 list-group"></ul>'); $.each(show.seasons, function(key, season) { if (season.season == '0') { var seasonTitle = 'Specials'; }else{ var seasonTitle = 'Season '+season.season; } var liSeason = $('<li class="season list-group-item" data-season="'+season.season+'"><strong>'+seasonTitle+'</strong><span class="badge">'+season.count+'</span></li>'); liSeason.bind('click', function() { getEpisodes($(this).parent().parent().parent().data('showid'), $(this).data('season')); }); liSeason.hover(function() { $("#poster_"+show.id).error(function() {$(this).attr('src', cdn('show/'+escape(show.folder)+'/poster.jpg'))}); $("#poster_"+show.id).attr('src', cdn('show/'+escape(show.folder)+'/'+season.season+'/poster.jpg')); }, function() { $("#poster_"+show.id).attr('src', cdn('show/'+escape(show.folder)+'/poster.jpg')); }); ulSeasons.append(liSeason); }); ulSeasons.fadeTo(0, seasonOpacity); divShowBody.hover(function() { ulSeasons.fadeTo(300, 1); }, function() { ulSeasons.fadeTo(300, seasonOpacity); }); divShowContainer.append(divShowHeader); divShowContainer.append(divShowBody); divShowBody.append(divShowPoster); divShowBody.append(ulSeasons); divShowContainer.append(divShowFooter); $("#shows div.panel-body.lazy").lazyload({ //event: "scrollstop", effect: "fadeIn", //threshold: 100 }); $("#shows img.showPoster.lazy").lazyload({ //event: "scrollstop", effect: "fadeIn", //threshold: 100 }); $("#shows img.showLogo.lazy").lazyload({ //event: "scrollstop", effect: "fadeIn", //threshold: 100 }); divShows.append(divShowContainer); if(i < 5) { divShowHeader.find("img.showLogo").attr('src', cdn('show/'+escape(show.folder)+'/logo.png')).removeClass('lazy'); divShowBody.css('background-image', 'url('+cdn('show/'+escape(show.folder)+'/fanart.jpg')+')').removeClass('lazy'); divShowPoster.find("img.showPoster").attr('src', cdn('show/'+escape(show.folder)+'/poster.jpg')).removeClass('lazy'); } i++; }); showOffset = showOffset+showLimit; if(i > 0) { loadShows = true; } $("#loading").hide(); } ); } function getEpisodes(show, season) { $.getJSON('api.php', { 'get': 'episodes', 'show': show, 'season': season }, function(data) { var liSeason = $("#shows").find('div[data-showid="'+show+'"] li[data-season="'+season+'"]'); liSeason.find("table.episodes").remove(); var olEpisodes = $('<table class="table table-bordered table-condensed episodes"></table>'); $.each(data, function (key, episode) { var status; switch(episode.status) { case 'Ignored': status = "info"; break; case 'Downloaded': status = "success"; break; case 'Wanted': status = "danger"; break; case 'Snatched': status = "warning"; break; case 'Unaired': status = ""; break; default: status = "text-default"; } var liEpisode = $('<tr class="episode text-'+status+'"><td>'+episode.episode+'</td><td>'+episode.name+'</td><td class="text-right">'+episode.airdate+'</td></tr>'); olEpisodes.append(liEpisode); }); liSeason.append(olEpisodes); liSeason.unbind('click').bind('click', function() { $(this).find("table.episodes").remove(); $(this).unbind('click').bind('click', function() { getEpisodes($(this).parent().parent().parent().data('showid'), $(this).data('season')); }); }); } ); } function getMovies() { $("#loading").show(); $.getJSON('api.php', { 'get': 'movies', 'limit': movieLimit.toString(), 'offset': movieOffset.toString() }, function(data) { var divMovies = $("#movies"); var i = 0; $.each(data, function (key, movie) { var divMovieContainer = $('<div class="movie panel panel-default" data-imdb="'+movie.imdb+'" id="movie_'+movie.imdb+'"></div>'); var divMovieHeader = $('<div class="movieName panel-heading"><h2 class="panel-title text-center"><img class="movieLogo lazy" alt="'+movie.title+'" data-original="'+cdn('movie/'+escape(movie.folder)+'/logo.png')+'" /></h2></div>'); var divMovieBody = $('<div class="panel-body lazy" data-original="'+cdn('movie/'+escape(movie.folder)+'/fanart.jpg')+'"></div>'); divMovieBody.css('background-image', 'url('+cdn('img/no_fanart.jpg')); var divMoviePoster = $('<div class="col-md-2 text-center"><a href="#" class="thumbnail"><img id="poster_'+movie.imdb+'" class="moviePoster lazy" data-original="'+cdn('movie/'+escape(movie.folder)+'/poster.jpg')+'" /></a></div>'); var divMoviePlot = $('<div class="moviePlot col-md-10 panel panel-default"><div class="panel-heading">'+movie.tagline+'</div><div class="panel-body">'+movie.plot+'</div></div>'); var divMovieFooter =$('<div class="panel-footer text-right">IMDB Rating: '+movie.rating+'</div>'); divMovieContainer.append(divMovieHeader); divMovieContainer.append(divMovieBody); divMovieBody.append(divMoviePoster); divMoviePlot.fadeTo(0, seasonOpacity); divMovieBody.hover(function() { divMoviePlot.fadeTo(300, 1); }, function() { divMoviePlot.fadeTo(300, seasonOpacity); }); divMovieBody.append(divMoviePlot); divMovieContainer.append(divMovieFooter); $("#movies div.panel-body.lazy").lazyload({ //event: "scrollstop", effect: "fadeIn", //threshold: 100 }); $("#movies img.moviePoster.lazy").lazyload({ //event: "scrollstop", effect: "fadeIn", //threshold: 100 }); $("#movies img.movieLogo.lazy").lazyload({ //event: "scrollstop", effect: "fadeIn", //threshold: 100 }); divMovies.append(divMovieContainer); if(i < 5) { divMovieHeader.find("img.movieLogo").attr('src', cdn('movie/'+escape(movie.folder)+'/logo.png')).removeClass('lazy'); divMovieBody.css('background-image', 'url('+cdn('movie/'+escape(movie.folder)+'/fanart.jpg')+')').removeClass('lazy'); divMoviePoster.find("img.moviePoster").attr('src', cdn('movie/'+escape(movie.folder)+'/poster.jpg')).removeClass('lazy'); } i++; }); movieOffset = movieOffset+movieLimit; if(i > 0) { loadMovies = true; } $("#loading").hide(); } ); } function cdn(img) { if(cdnEnabled == true) { var cdnHost = cdnHostPattern.replace('#', Math.floor((Math.random()*cdnHostCount))); var base = window.location.href.replace(/https?:\/\//i, "").split('#')[0]; var img = window.location.protocol+'//'+cdnHost+'/'+base+img } return img; }