(function(a){a.fn.ttwMusicPlayer=function(q,n){var o,j,g,v,D,w,t,x,E,F,G,y;function H(a){return h(c[a].title)?h(c[a].mp3)?h(c[a].oga)?"":I(c[a].oga):I(c[a].mp3):c[a].title}function I(a){a=a.split("/");return a[a.length-1]}function J(a,b,d){a=="track"?h(c[d].rating)||K(b,c[d].rating):(a=!h(c[d].rating)?Math.ceil(c[d].rating):0,L(a))}function L(a){e.find(o).find(j).removeClass(g.substr(1)).slice(0,a).addClass(g.substr(1))}function K(a,c){a.find(j).removeClass(g.substr(1)).slice(0,c*2).addClass(g.substr(1))}
function Q(c){var b=Array.prototype.slice.call(arguments,1);a.isFunction(c)&&c.apply(this,b)}function h(a){return typeof a=="undefined"}var e=this,k,M,N,O,r,c,b;v=".tracklist";D=".tracks";w=".track";o=".track-info";t=".rating";j=".rating-level";g=".on";x=".title";E=".duration";F=".buy";G=".not-active";y=".more";k=a.extend(!0,{},{ratingCallback:null,currencySymbol:"$",buyText:"BUY",tracksToShow:5,autoPlay:!1,jPlayer:{}},n);c=q;b=0;M=function(){var j,f;function d(a){b=0;a?l(b):(P(b),e.trigger("mbPlaylistInit"))}
function P(a){b=a;i.jPlayer("setMedia",c[b])}function l(a){P(a);a>=k.tracksToShow&&o();e.trigger("mbPlaylistAdvance");i.jPlayer("play")}function z(){l(b+1<c.length?b+1:0)}function g(){l(b-1>=0?b-1:c.length-1)}function q(){A?i.jPlayer("pause"):i.jPlayer("play")}function n(){var b=a();u=e.find(D);for(var m=0;m<10;m++)b=b.add(j);for(m=0;m<c.length;m++){var d=a(f);d.find(t).html(b.clone());d.find(x).html(H(m));d.find(E).html(!h(c[m].duration)?c[m].duration:"-");J("track",d,m);r(d,m);d.data("index",m);
u.append(d)}s=a(w);s.slice(0,k.tracksToShow).each(function(){B+=a(this).outerHeight()});s.slice(k.tracksToShow,c.length).each(function(){C+=a(this).outerHeight()});C>0&&(b=a(v),u.height(B),b.addClass("show-more-button"),b.find(y).click(function(){p=a(this);o()}));s.find(".title").click(function(){l(a(this).parents("li").data("index"))})}function o(){h(p)&&(p=e.find(y));u.animate({height:B+C},function(){p.animate({opacity:0},function(){p.slideUp(function(){p.parents(v).removeClass("show-more-button");
p.remove()})})})}function r(a,b){h(c[b].buy)||a.find(F).removeClass(G.substr(1)).attr("href",c[b].buy).html((!h(c[b].price)?k.currencySymbol+c[b].price:"")+" "+k.buyText)}var A=!1,i={},s,B=0,C=0,u,p;f='<li class="track"><span class="title"></span><span class="duration"></span><span class="rating"></span><a href="#" class="buy not-active" target="_blank"></a></li>';j='<span class="rating-level rating-bar"></span>';return{init:function(c){i=a(".ttw-music-player .jPlayer-container");c=a.extend(!0,{},
{swfPath:"jquery.jplayer",supplied:"mp3, oga",cssSelectorAncestor:".jp-interface",preload:"auto",errorAlerts:!1,warningAlerts:!1,fullScreen:!1},c);i.bind(a.jPlayer.event.ready,function(){i.bind(a.jPlayer.event.ended,function(){z()});i.bind(a.jPlayer.event.play,function(){i.jPlayer("pauseOthers");s.eq(b).addClass("playing").siblings().removeClass("playing")});i.bind(a.jPlayer.event.playing,function(){A=!0});i.bind(a.jPlayer.event.pause,function(){A=!1});a(".jp-interface .jp-previous").click(function(){g();
a(this).blur();return!1});a(".jp-interface .jp-next").click(function(){z();a(this).blur();return!1});e.bind("mbInitPlaylistAdvance",function(){var a=this.getData("mbInitPlaylistAdvance");a!=b?(b=a,l(b)):i.data("jPlayer").status.srcSet?q():l(0)});n();e.trigger("mbPlaylistLoaded");d(k.autoplay)});i.jPlayer(c)},playlistInit:d,playlistAdvance:l,playlistNext:z,playlistPrev:g,togglePlay:q,$myJplayer:i}};O=function(){var h=e.find(w);(function(){a(t).find(j).hover(function(){a(this).addClass("hover").prevAll().addClass("hover").end().nextAll().removeClass("hover")});
a(t).mouseleave(function(){a(this).find(j).removeClass("hover")});a(j).click(function(){var f=a(this),d=f.parent().children().index(f)+1,e;f.hasClass("rating-bar")?(d/=2,e=f.parents("li").data("index"),e==b&&L(d)):(e=b,K(h.eq(e),d));f.prevAll().add(f).addClass(g.substr(1)).end().end().nextAll().removeClass(g.substr(1));f=e;c[f].rating=d;Q(k.ratingCallback,f,c[f],d)})})()};N=function(){function j(){l.animate({opacity:0},"fast",function(){if(!h(c[b].cover)){var d=b;a('<img src="'+c[b].cover+'" alt="album cover" />',
this).imagesLoaded(function(){d==b&&l.html(a(this)).animate({opacity:1})})}})}var f,d,g,l;return{buildInterface:function(){var b;b=a('<div class="ttw-music-player"><div class="player jp-interface"><div class="album-cover"><span class="img"></span>            <span class="highlight"></span>        </div>        <div class="track-info">            <p class="title"></p>            <p class="artist-outer">By <span class="artist"></span></p>            <div class="rating">                <span class="rating-level rating-star on"></span>                <span class="rating-level rating-star on"></span>                <span class="rating-level rating-star on"></span>                <span class="rating-level rating-star on"></span>                <span class="rating-level rating-star"></span>            </div>        </div>        <div class="player-controls">            <div class="main">                <div class="previous jp-previous"></div>                <div class="play jp-play"></div>                <div class="pause jp-pause"></div>                <div class="next jp-next"></div><\!-- These controls aren\'t used by this plugin, but jPlayer seems to require that they exist --\>                <span class="unused-controls">                    <span class="jp-video-play"></span>                    <span class="jp-stop"></span>                    <span class="jp-mute"></span>                    <span class="jp-unmute"></span>                    <span class="jp-volume-bar"></span>                    <span class="jp-volume-bar-value"></span>                    <span class="jp-current-time"></span>                    <span class="jp-duration"></span>                    <span class="jp-full-screen"></span>                    <span class="jp-restore-screen"></span>                </span>            </div>            <div class="progress-wrapper">                <div class="progress jp-seek-bar">                    <div class="elapsed jp-play-bar"></div>                </div>            </div>        </div>    </div>    <p class="description"></p>    <div class="tracklist">        <ol class="tracks"> </ol>        <div class="more">View More...</div>    </div>    <div class="jPlayer-container"></div></div>').css({display:"none",
opacity:0}).appendTo(e).slideDown("slow",function(){b.animate({opacity:1});e.trigger("mbInterfaceBuilt")})},init:function(){f=a(".player");d=f.find(x);g=f.find(".artist");l=f.find(".img");h(k.description)||e.find(".description").html(k.description).addClass("showing").slideDown();e.bind("mbPlaylistAdvance mbPlaylistInit",function(){d.html(H(b));h(c[b].artist)?g.parent(".artist-outer").animate({opacity:0},"fast"):g.html(c[b].artist).parent(".artist-outer").animate({opacity:1},"fast");J("current",null,
b);j()})}}};(function(){q=new M;r=new N;r.buildInterface();q.init(k.jPlayer);e.bind("mbPlaylistLoaded",function(){e.bind("mbInterfaceBuilt",function(){new O});r.init()})})()}})(jQuery);(function(a){a.fn.imagesLoaded=function(a){var n=this.filter("img"),o=n.length;n.bind("load",function(){--o<=0&&a.call(n,this)}).each(function(){if(this.complete||this.complete===void 0){var a=this.src;this.src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==";this.src=a}});return this}})(jQuery);
