").parent().html()),$("#main-row").append("
"),$("#player").removeClass("player_bottom"),$("#main-row").removeClass("frontpage_modified_heights"),$("#main_section_frontpage").remove(),$("#closePlayer").remove(),$("#player_bottom_overlay").remove()}$("#search").attr("placeholder","Find song on YouTube..."),$(".page-footer").addClass("padding-bottom-novideo"),1==$("#alreadychannel").length?e():(Ne=!0,e()),0===$("#alreadyfp").length&&$("head").append("
")}})}};String.prototype.capitalizeFirstLetter=function(){return this.charAt(0).toUpperCase()+this.slice(1)};var Ue={loaded:!0,before_load:"",after_load:"",player:"",stopInterval:!1,youtube_listener:function(e){Ue.loaded=!1,B.log("--------youtube_listener--------"),B.log("Received: "),B.log(e),B.log("paused variable: "+Z),B.log("mobile_beginning variable: "+$e);try{B.log("getVideoUrl(): "+Ue.player.getVideoUrl().split("v=")[1])}catch(e){}if(B.log("video_id variable: "+Ee),B.log("---------------------------------"),e.np){if(Z)Ue.getTitle(e.np[0].title,W),Ue.notifyUser(e.np[0].id,e.np[0].title),Ue.player.stopVideo();else if(!Z){void 0===Me?Me=e.np[0].id:Me!=Ee&&(Me=Ee),Ee=e.np[0].id,U=e.conf[0],time=e.time,Le=time-U.startTime,Pe=e.np[0].title,duration=e.np[0].duration,$e&&B.mobilecheck()&&0===Le&&(Le=1);try{Ce[0].id==Ee&&P.song_change(Ce[0].added),Fe.fetchYoutubeSuggests(Ee)}catch(e){}if(Ue.getTitle(Pe,W),Ue.setBGimage(Ee),G&&!window.MSStream)try{Ue.player.getVideoUrl().split("v=")[1]!=Ee&&(Ue.player.loadVideoById(Ee),Ue.notifyUser(Ee,Pe),Ue.player.seekTo(Le),Z&&Ue.player.pauseVideo()),Z||($e||Ue.player.playVideo(),ie||Ue.durationSetter()),(Ue.player.getDuration()>Le||0===Ue.player.getDuration())&&Ue.player.seekTo(Le),Ue.after_load=Ee,Ue.loaded||setTimeout(function(){Ue.loaded=!0},500)}catch(e){ie||Ue.durationSetter()}else Ue.getTitle(Pe,W)}}else{document.getElementById("song-title").innerHTML="Empty channel. Add some songs!",$("#player_overlay").height($("#player").height()),window.MSStream||$("#player_overlay").toggleClass("hide");try{Ue.player.stopVideo()}catch(e){}}},onPlayerStateChange:function(e){B.log("-------onPlayerStateChange------"),B.log("New state\nState: "),B.log(e);try{B.log("Duration: "+Ue.player.getDuration(),"Current time: "+Ue.player.getCurrentTime()),B.log("getVideoUrl(): "+Ue.player.getVideoUrl().split("v=")[1])}catch(e){}switch(B.log("video_id variable: "+Ee),B.log("---------------------------------"),e.data){case-1:break;case 0:Q=!1,Z=!1,Ae.emit("end",{id:Ee,channel:M.toLowerCase()});break;case 1:Q=!0,beginning&&B.mobilecheck()&&(Ue.player.pauseVideo(),beginning=!1,$e=!1),ne||"/"==window.location.pathname||B.addClass("#player_overlay","hide"),"/"!=window.location.pathname&&(1==document.getElementById("play").className.split(" ").length&&$("#play").toggleClass("hide"),2==document.getElementById("pause").className.split(" ").length&&$("#pause").toggleClass("hide")),Z&&(Ae.emit("pos",{channel:M.toLowerCase()}),Z=!1);break;case 2:Z=!0,"/"!=window.location.pathname&&qe.play_pause_show(),$e=!0;break;case 3:}},getTitle:function(e,t){var o=t>1?"viewers":"viewer",n=decodeURIComponent(e);if("/"!=window.location.pathname){var a=document.getElementById("song-title"),i=document.getElementById("viewers");a.innerHTML=n,i.innerHTML=t+" "+o,a.title=n}document.title=n+" • Zöff / "+M},errorHandler:function(e){5==e.data||100==e.data||101==e.data||150==e.data?(curr_playing=Ue.player.getVideoUrl().replace("https://www.youtube.com/watch?v=",""),Ae.emit("skip",{error:e.data,id:Ee,pass:F,channel:M.toLowerCase})):void 0!==Ee&&Ue.player.loadVideoById(Ee)},onPlayerReady:function(e){$("#channel-load").css("display","none");try{beginning=!0,G=!0,window.MSStream||($("#player").css("opacity","1"),$("#controls").css("opacity","1"),$(".playlist").css("opacity","1"),Ue.player.loadVideoById(Ee),ae&&!B.mobilecheck()&&Ue.player.playVideo(),ie||Ue.durationSetter(),ne?setTimeout(function(){Ue.player.seekTo(Le),ae||(Ue.player.pauseVideo(),qe.play_pause_show())},1e3):Ue.player.seekTo(Le)),Ue.readyLooks(),qe.initYoutubeControls(Ue.player),qe.initSlider(),Ue.player.setVolume(E.get_volume()),$(".video-container").removeClass("no-opacity")}catch(e){}},readyLooks:function(){Ue.setBGimage(Ee)},setBGimage:function(e){if(void 0!==e&&!ne){var t=new Image;t.onload=function(){var e=new ColorThief,o=e.getColor(t);"/"!=window.location.pathname&&(document.getElementsByTagName("body")[0].style.backgroundColor=B.rgbToHsl(o,!0),$("meta[name=theme-color]").attr("content",B.rgbToHex(o[0],o[1],o[2])))},t.crossOrigin="Anonymous",t.src="https://zoff.no:8080/https://img.youtube.com/vi/"+e+"/mqdefault.jpg"}},set_width:function(e){$(".video-container").width(e)},notifyUser:function(e,t){if(t=t.replace(/\\\'/g,"'").replace(/"/g,"'").replace(/&/g,"&"),"granted"===Notification.permission&&document.hidden){var o=new Notification("Now Playing",{body:t,icon:"https://i.ytimg.com/vi/"+e+"/mqdefault.jpg",iconUrl:"http://i.ytimg.com/vi/"+e+"/mqdefault.jpg"});o.onclick=function(e){window.focus(),this.cancel()},setTimeout(function(){o.close()},5e3)}},setup_all_listeners:function(){n(),o(),s(),l(),c()},onYouTubeIframeAPIReady:function(){Ue.player=new YT.Player("player",{videoId:Ee,playerVars:{rel:"0",wmode:"transparent",controls:"0",iv_load_policy:"3",theme:"light",color:"white",showinfo:0},events:{onReady:Ue.onPlayerReady,onStateChange:Ue.onPlayerStateChange,onError:Ue.errorHandler}})},durationSetter:function(){if(void 0!==duration)try{Ue.stopInterval||(ie=!0),dMinutes=Math.floor(duration/60),dSeconds=duration-60*dMinutes,currDurr=void 0!==Ue.player.getCurrentTime()?Math.floor(Ue.player.getCurrentTime()):Le,currDurr>duration&&(currDurr=duration),minutes=Math.floor(currDurr/60),seconds=currDurr-60*minutes,document.getElementById("duration").innerHTML=B.pad(minutes)+":"+B.pad(seconds)+"
/ "+B.pad(dMinutes)+":"+B.pad(dSeconds),per=100/duration*currDurr,per>=100?per=100:0===duration&&(per=0),$("#bar").width(per+"%")}catch(e){}Ue.stopInterval||setTimeout(Ue.durationSetter,1e3)},loadPlayer:function(){if(1==$("script[src='https://www.youtube.com/iframe_api']").length)try{Ue.onYouTubeIframeAPIReady()}catch(e){console.error("Seems YouTube iFrame script isn't correctly loaded. Please reload the page.")}else Te=document.createElement("script"),Te.src="https://www.youtube.com/iframe_api",Ie=document.getElementsByTagName("script")[0],Ie.parentNode.insertBefore(Te,Ie)}},qe={stopInterval:!1,initYoutubeControls:function(){!B.mobilecheck()||/iPad|iPhone|iPod/.test(navigator.userAgent)||window.MSStream||$("#controls").appendTo("#playbar"),qe.initControls()},initControls:function(){document.getElementById("volume-button").addEventListener("click",qe.mute_video),document.getElementById("playpause").addEventListener("click",qe.play_pause),document.getElementById("fullscreen").addEventListener("click",qe.fullscreen)},initSlider:function(){try{vol=E.get_volume()}catch(e){}$("#volume").slider({min:0,max:100,value:vol,range:"min",animate:!0,slide:function(e,t){qe.setVolume(t.value);try{E.set_volume(t.value)}catch(e){}}}),qe.choose_button(vol,!1)},fullscreen:function(){var e=document.getElementById("player"),t=e.requestFullScreen||e.mozRequestFullScreen||e.webkitRequestFullScreen;t&&t.bind(e)()},play_pause:function(){1==Ue.player.getPlayerState()?(Ue.player.pauseVideo(),!B.mobilecheck()||/iPad|iPhone|iPod/.test(navigator.userAgent)||window.MSStream||(document.getElementById("player").style.display="none",$(".video-container").toggleClass("click-through"),$(".page-footer").toggleClass("padding-bottom-extra"))):2!=Ue.player.getPlayerState()&&0!==Ue.player.getPlayerState()||(Ue.player.playVideo(),!B.mobilecheck()||/iPad|iPhone|iPod/.test(navigator.userAgent)||window.MSStream||(document.getElementById("player").style.display="block",$(".video-container").toggleClass("click-through"),$(".page-footer").toggleClass("padding-bottom-extra")))},play_pause_show:function(){1==document.getElementById("pause").className.split(" ").length&&$("#pause").toggleClass("hide"),2==document.getElementById("play").className.split(" ").length&&$("#play").toggleClass("hide")},settings:function(){$("#qS").toggleClass("hide")},changeQuality:function(e){Ue.player.getPlaybackQuality!=e&&(Ue.player.setPlaybackQuality(e),Ue.player.getPlaybackQuality()),$("#qS").toggleClass("hide")},mute_video:function(){Ue.player.isMuted()?(Ue.player.unMute(),qe.choose_button(Ue.player.getVolume(),!1)):(qe.choose_button(0,!0),Ue.player.mute())},setVolume:function(e){Ue.player.setVolume(e),qe.choose_button(e,!1),Ue.player.isMuted()&&Ue.player.unMute()},choose_button:function(e,t){t?(1==document.getElementById("v-full").className.split(" ").length&&$("#v-full").toggleClass("hide"),1==document.getElementById("v-medium").className.split(" ").length&&$("#v-medium").toggleClass("hide"),1==document.getElementById("v-low").className.split(" ").length&&$("#v-low").toggleClass("hide"),2==document.getElementById("v-mute").className.split(" ").length&&$("#v-mute").toggleClass("hide")):e>=0&&e<=33?(1==document.getElementById("v-full").className.split(" ").length&&$("#v-full").toggleClass("hide"),1==document.getElementById("v-medium").className.split(" ").length&&$("#v-medium").toggleClass("hide"),2==document.getElementById("v-low").className.split(" ").length&&$("#v-low").toggleClass("hide"),1==document.getElementById("v-mute").className.split(" ").length&&$("#v-mute").toggleClass("hide")):e>=34&&e<=66?(1==document.getElementById("v-full").className.split(" ").length&&$("#v-full").toggleClass("hide"),2==document.getElementById("v-medium").className.split(" ").length&&$("#v-medium").toggleClass("hide"),1==document.getElementById("v-low").className.split(" ").length&&$("#v-low").toggleClass("hide"),1==document.getElementById("v-mute").className.split(" ").length&&$("#v-mute").toggleClass("hide")):e>=67&&e<=100&&(2==document.getElementById("v-full").className.split(" ").length&&$("#v-full").toggleClass("hide"),1==document.getElementById("v-medium").className.split(" ").length&&$("#v-medium").toggleClass("hide"),1==document.getElementById("v-low").className.split(" ").length&&$("#v-low").toggleClass("hide"),1==document.getElementById("v-mute").className.split(" ").length&&$("#v-mute").toggleClass("hide"))},playPause:function(){state=Ue.player.getPlayerState(),button=document.getElementById("playpause"),1==state?Ue.player.pauseVideo():2==state&&Ue.player.playVideo()},volumeOptions:function(){Ue.player.isMuted()?(Ue.player.unMute(),vol=Ue.player.getVolume(),$("#volume").slider("value",Ue.player.getVolume())):(Ue.player.mute(),$("#volume").slider("value",0))},hoverMute:function(e){vol=Ue.player.getVolume()}},He={submitArray:[],submitArrayExpected:null,showSearch:function(){$("#search-wrapper").toggleClass("hide"),B.mobilecheck()&&$(".search_input").focus(),$("#song-title").toggleClass("hide"),$("#results").toggleClass("hide"),$("#results").empty(),$("#search-btn i").toggleClass("mdi-navigation-close"),$("#search-btn i").toggleClass("mdi-action-search"),$("#search").focus()},search:function(e){if(void 0!==we&&void 0!==be||(we=$("#temp-results-container"),be=$("#empty-results-container").html()),$(".search_results").html(""),""!==e){Y=!0;var t=encodeURIComponent(e),o="https://www.googleapis.com/youtube/v3/search?key="+V+"&videoEmbeddable=true&part=id&fields=items(id)&type=video&order=viewCount&safeSearch=none&maxResults=25";o+="&q="+t,q&&(o+="&videoCategoryId=10");var n="https://www.googleapis.com/youtube/v3/videos?part=contentDetails,snippet,id&key="+V+"&id=";B.contains($("#search_loader").attr("class").split(" "),"hide")&&$("#search_loader").removeClass("hide"),B.contains($("#results").attr("class").split(" "),"hide")&&$("#results").removeClass("hide"),$.ajax({type:"GET",url:o,dataType:"jsonp",success:function(e){0===e.items.length?($("
"+be+"
").appendTo($("#results")).show("blind",83.33),B.contains($("#search_loader").attr("class").split(" "),"hide")||$("#search_loader").addClass("hide")):e.items&&($.each(e.items,function(e,t){n+=t.id.videoId+","}),$.ajax({type:"GET",url:n,dataType:"jsonp",success:function(e){var t="",o=$(we);$.each(e.items,function(e,n){var a=n.contentDetails.duration;if(secs=He.durationToSeconds(a),!longsongs||secs<720){xe=n.snippet.title,enc_title=xe,ke=n.id,a=a.replace("PT","").replace("H","h ").replace("M","m ").replace("S","s"),
+snippet:{title:M.toLowerCase(),description:"Playlist exported from zoff"}}),success:function(e){var t=0,o=e.id;$.each(Ce,function(e,n){var a="https://www.googleapis.com/youtube/v3/playlistItems?part=snippet";$.ajax({type:"POST",url:a,headers:{Authorization:"Bearer "+fe.access_token,"Content-Type":"application/json"},data:JSON.stringify({snippet:{playlistId:o,resourceId:{kind:"youtube#video",videoId:n.id}}}),success:function(e){B.log("Added video: "+n.id+" to playlist id "+o),t==Ce.length-1&&(B.log("All videoes added!"),B.log("url: https://www.youtube.com/playlist?list="+o),$(".exported-list").append("
Exported URL:
"),$(".exported-list").append("
"+M+""),$("#playlist_loader_export").addClass("hide"),$(".exported-list-container").removeClass("hide")),t+=1}})})},error:function(e){B.log(e)}})},importOldList:function(e){var t="",o=0;playlist_url="lists/"+e+".json",Be=$.parseJSON($.ajax({type:"GET",url:playlist_url,async:!1}).responseText),$.each(Be.songs,function(e,n){t+=n.id+",",o>45&&(He.addVideos(t),t="",o=0),o++}),He.addVideos(t),document.getElementById("search").value=""},sortList:function(){Ce.sort(B.predicate({name:"votes",reverse:!0},{name:"added",reverse:!1},{name:"title",reverse:!1}))},show:function(){B.mobilecheck()||(N?(N=!1,$("#toptitle").empty(),$("#chan").addClass("bigChan"),$("#chan").html("zoff.no/"+M.toLowerCase())):(N=!0,$("#toptitle").html("Zöff"),$("#chan").removeClass("bigChan"),$("#chan").html(M)))},generateSong:function(e,t,o,n,a){void 0===j&&(j=$("#list-song-html").html());var i,s,l=e.id,r=e.title,c=e.votes,d="background-image:url('//img.youtube.com/vi/"+l+"/mqdefault.jpg');",p=$("
"+j+"
"),u="style";return t&&p.find("#list-song").css("height",0),A||p.find(".card-action").removeClass("hide"),1==c&&p.find(".vote-text").text("vote"),o&&(d="//img.youtube.com/vi/"+l+"/mqdefault.jpg",u="data-original"),n?(p.find(".list-votes").text(c),p.find("#list-song").attr("id",l),p.find(".vote-container").attr("title",r),i=".vote-container",s="del"):n||(p.find(".vote-text").text(e.duration),i=".add-suggested",s=a?"del_user_suggested":"del_suggested",p.find(".vote-container").attr("class","clickable add-suggested"),p.find(".add-suggested").attr("title",r),p.find("#del").attr("id",s),p.find(i).attr("data-video-title",r),p.find(i).attr("data-video-length",e.length),p.find("#list-song").attr("id","suggested-"+l),p.find(".list-image").attr("class",p.find(".list-image").attr("class").replace("list-image","list-suggested-image"))),p.find(".list-title").text(r),p.find(".list-title").attr("title",r),p.find(i).attr("data-video-id",l),p.find(".list-image").attr(u,d),p.find(".list-suggested-image").attr(u,d),p.find("#"+s).attr("data-video-id",l),p.html()},getIndexOfSong:function(e){return indexes=$.map(Ce,function(t,o){if(t.id==e)return o}),indexes[0]},scrollTop:function(){$("#wrapper").scrollTop(0)},scrollBottom:function(){$("#wrapper").scrollTop($("#wrapper")[0].scrollHeight)}},M=void 0===window.chan?$("#chan").html():window.chan,A=!0,z=0,N=!0,j=$("#list-song-html").html(),D=!1,O=!1,V="***REMOVED***",Y=!1,R=/P((([0-9]*\.?[0-9]*)Y)?(([0-9]*\.?[0-9]*)M)?(([0-9]*\.?[0-9]*)W)?(([0-9]*\.?[0-9]*)D)?)?(T(([0-9]*\.?[0-9]*)H)?(([0-9]*\.?[0-9]*)M)?(([0-9]*\.?[0-9]*)S)?)?/,U=[],q=0,H=1,F="",J="",G=!1,W=1,Z=!1,Q=!1,X=6e3,K=Date.now(),ee=!1,te=-1,oe=!0,ne=!1,ae=!0,ie=!1,se=!1,le=!1,re=!1,ce={},de=!1,pe="",ue=300,me=600,ge="&autoplay",he=!1,fe={},ye=!1;if(void 0===localStorage.debug){var ve=!1;localStorage.debug=ve}var we,be,$e,_e,ke,Ce,U,Se,Te,Ie,xe,W,Ee,Be,Le,Pe,Me,Ae,ze={"sync disconnect on unload":!0,secure:!0,"force new connection":!0},Ne=!1,je=!1;navigator.serviceWorker?navigator.serviceWorker.register("/service-worker.js",{scope:"/"}).then(function(e){B.log(e)}).catch(function(e){console.error(e)}):B.log("Service Worker is not supported in this browser."),$().ready(function(){Ne||"/"==window.location.pathname?je||"/"!=window.location.pathname||S():e(),Ae.on("connect",function(){he&&(he=!1,$(".connect_error").fadeOut(function(){$(".connect_error").remove(),Materialize.toast("Connected!",2e3,"green lighten")}))}),t();try{Oe=$.ajax({type:"GET",url:"https://api.github.com/repos/zoff-music/zoff/commits",async:!1}).responseText,Oe=$.parseJSON(Oe),$("#latest-commit").html("Latest Commit:
"+Oe[0].commit.author.date.substring(0,10)+": "+Oe[0].committer.login+"
"+Oe[0].sha.substring(0,10)+": "+Oe[0].commit.message+"
=48&&$("#wrapper").scrollTop()>0?($("#top-button").removeClass("hide"),B.addClass("#bottom-button","hide")):t>=$("#playlist").height()-18&&$("#wrapper").scrollTop()<$("#wrapper")[0].scrollHeight-$("#wrapper").height()-1?($("#bottom-button").removeClass("hide"),B.addClass("#top-button","hide")):(B.addClass("#bottom-button","hide"),B.addClass("#top-button","hide"))}),$(document).on("mouseleave","#playlist",function(){B.addClass("#bottom-button","hide"),B.addClass("#top-button","hide")}),$(document).on("click","#top-button",function(){P.scrollTop()}),$(document).on("click","#bottom-button",function(){P.scrollBottom()});var De,Oe,Ae,Ve,Ye={id:"",get_input:function(e){""===Ye.id?Ye.set_id(e.toLowerCase()):Ye.set_channel(e.toLowerCase())},set_id:function(e){Ye.id=e,$("#pausebutton_remote").attr("disabled",!1),$("#skipbutton_remote").attr("disabled",!1),$("#playbutton_remote").attr("disabled",!1),$("#skipbutton_remote").attr("disabled",!1),$("#remote_channel").val(""),$("#remote_channel").attr("placeholder","Change channel"),$("#remote_header").html("Controlling "+e),$("#volume-control-remote").css("display","block")},set_channel:function(e){Ae.emit("id",{id:Ye.id,type:"channel",value:e})},play_remote:function(){Ae.emit("id",{id:Ye.id,type:"play",value:"mock"})},pause_remote:function(){Ae.emit("id",{id:Ye.id,type:"pause",value:"mock"})},skip_remote:function(){Ae.emit("id",{id:Ye.id,type:"skip",value:"mock"})},initiate_volume:function(){$("#volume-control-remote").slider({min:0,max:100,value:100,range:"min",animate:!0,stop:function(e,t){Ae.emit("id",{id:Ye.id,type:"volume",value:t.value}),B.log("volume")}})}},H=!0,Re={blob_list:[],winter:!1,times_rotated:0,frontpage_function:function(e){$("#channels").empty(),H=!0,Re.populate_channels(e.channels),Re.set_viewers(e.viewers)},populate_channels:function(e){var t,o="",n=0;1==e[0].pinned&&(t=e.shift()),e.sort(Re.sortFunction),void 0!==t&&e.unshift(t),pre_card=$(De),B.mobilecheck()||Re.add_backdrop(e,0);for(var a in e){var i=e[a].channel;if(n<12){var s=e[a].id,l=e[a].viewers,r="background-image:url('https://img.youtube.com/vi/"+s+"/hqdefault.jpg');",c=e[a].count,d=pre_card;1==e[a].pinned?(d.find(".pin").attr("style","display:block;"),d.find(".card").attr("title","Pinned!")):(d.find(".pin").attr("style","display:none;"),d.find(".card").attr("title","")),d.find(".chan-name").text(i),d.find(".chan-name").attr("title",i),d.find(".chan-views").text(l),d.find(".chan-songs").text(c),d.find(".chan-bg").attr("style",r),d.find(".chan-link").attr("href",i),$("#channels").append(d.html())}o+="