$(document).ready(function() {
    
    $.baseurl = $("body:eq(0)").attr("rel");
    $.fullBaseurl = $("base:eq(0)").attr("href");
    $.storage = new $.store();

    $("body").delegate("a.external","click",function(e) {
        e.preventDefault();
        e.stopPropagation();
        window.open($(this).attr("href"),'');    
    });
    
    $.getJSON($.baseurl + '/bandak/last',{},function(response) {
        $("#lastBands ul").html(response.content);
    });
    
    var excludedSelectors = ".external,.lang";
    $("body").delegate("a:not("+excludedSelectors+")",'click', function(e){
        e.preventDefault();
        e.stopPropagation();
        if (!$(this).attr("href")) return;
        var url = $(this).attr('href').replace(RegExp('^'+$.baseurl),'');
        $.bbq.pushState( "#!"+url);
        return false;
    });
    
    var $content = $("#main");
    
    var nav = {
        parseResponse : function(response) {
            if (response.content) {
                $content.stop().html(response.content).animate({opacity:'1'});
                $('html, body').animate({scrollTop:0}, 'slow');
                
                if (response.title) document.title = response.title;
                
                _gaq.push(['_trackPageview', $.param.fragment()]);
            }
        }
    };
    
    $("#main").delegate("span.bozkatu","click",function() {
        $(this).css({opacity:'0.5',cursor:'default'});
        $but = $(this);
        $.ajax({
                dataType:'json',
                url : $(this).attr("rel"),
                data: {hash : $(this).data("hash")},
                action : 'post',
                success: function(response) {
                    if (response.msg) {
                        $but.fadeOut(function() {
                            $(this).replaceWith("<span class='bozkatu2'>"+response.msg+"</span>");
                        });
                    }
                }
            });
        
    });
    
    
    
    var loadImg = $("<div id='loader' class='center'><img src='"+$.baseurl+"/images/loading.gif' alt='itxaron...' /></div>");
    
    $(window).bind('hashchange', function(e) {
        var url = $.param.fragment();
        
        if (url == '') {
            url = document.location.href.replace(RegExp('^'+$.fullBaseurl),'');
            if (!url.match(/^\//)) url = '/' + url;
            document.location = $.fullBaseurl + '#!' + url;
            return;
        }

        if (url.substr(1) == '') url = "!/";
        $content.animate({opacity:'0'},500,function() {
            $(this).html(loadImg).animate({opacity:'1'},'40');
            $.ajax({
                url : $.baseurl + url.substr(1),
                dataType: 'json',
                success: nav.parseResponse,
                error: function() {
                   // document.location = $.fullBaseurl;
                }
            });
        });
    });
    
    $(window).trigger( 'hashchange' );    
    
    var $playList = $("#playsong_host ul:eq(0)");
    $playList.bind("resize",function() {
        var targetHeight = $("li",$(this)).length * 24;
        if (targetHeight<= 23) return;
        $("#playsong_host").stop().animate({height:targetHeight+'px'});        
    });
    
    $("#playsong_host").delegate("span.delete","click",function(e) {
        var oLi = $(this).parents("li").eq(0);
        var hash = $("a.song",oLi).attr("rel");
        oLi.slideUp(function() {
            var hash = $("a.song",$(this)).attr("rel");
            $(this).remove();
            $playList.trigger("resize");
            
            var index = $.storage.get('index') || [];

            for(var i=0;i<index.length;i++) {
                if (index[i] == hash) {
                    index.splice(i,1);
                    break;
                }
            }
            $.storage.del(hash);
            $.storage.set('index',index);
            
        });
        
    });
    
    $("#playsong_host").delegate("a.song","click",function(e) {
        e.preventDefault();
        e.stopPropagation();
        var hash = $(this).attr("rel");
        if ($(this).hasClass("song_on")) return;
        $("a",$playList).removeClass("song_on");
        $(this).addClass("song_on");
        jPl.trigger("playsong",hash);
    });
    
    $("#main").delegate("li.abestia","click",function(e) {
        e.preventDefault();
        e.stopPropagation();
        var hash = $("a.abestia",$(this)).attr("rel");
        var song = {
            bandName: $("#nombreBanda").html(),
            bandUrl: $("#nombreBanda").attr("rel"),
            idSong : hash,
            songTitle : $("span.musicfile",$(this)).html(),
            songDuration : $("span.dur",$(this)).html()
        };
           
        var newSong = $( "#songTmpl" ).tmpl(song);
        
        newSong.fadeOut();
        $(this).effect("transfer",{ to: "#playsong_host", className: "effect" },1100,function() {
            newSong.appendTo($playList);
            $playList.trigger("resize");
            newSong.fadeIn();
            if ($("li",$playList).length == 1) {
                $("li a.song",$playList).trigger("click");
            }
            var index = $.storage.get('index') || [];
            index.push(song.idSong);
            $.storage.set(song.idSong,song);
            $.storage.set('index',index);

        });
        
    });

    var jPl = $("#jplayer_blehia");
    var startPaused = false;
    jPl.jPlayer({
        cssSelectorAncestor : '#jp_interface',
        ended: function() {
            $(".jp-next",$("#jp_interface")).trigger("click");
        },
        play: function(event) {
            if (startPaused) {
                startPaused = false;
                $(this).jPlayer("pause");
            }
        },
        swfPath: $.fullBaseurl+"js",
        solution:'html,flash',
        supplied: "mp3,oga"
    });

    var targetURL = 'http://www.bandabeat.com/';
    jPl.bind("playsong",function(ev,hash) {
        $(this).jPlayer("setMedia", {
            name : hash,
            mp3: targetURL + '/fetch/'+hash+'/s.mp3',
            oga: targetURL + '/fetch/'+hash+'/s.ogg'
        }).jPlayer("play");    
    });
    
    $(".jp-previous",$("#jp_interface")).bind("click",function(e) {
        e.preventDefault();
        e.stopPropagation();
        $(this).blur();
        
        if ($("a.song",$playList).length == 0) return;
        
        if ($("a.song_on",$playList).length == 0) {
            $("a.song:eq(0)",$playList).trigger("click");
            return;
        }
        
        var current = $("a.song_on",$playList).parents("li:eq(0)");
        var prev  = current.prev("li").find("a.song");

        if (prev.length == 0) {
            $("a.song:last",$playList).trigger("click");
            return;
        }
        prev.trigger("click");
        return false;
    });

    $(".jp-next",$("#jp_interface")).bind("click",function(e) {
        e.preventDefault();
        e.stopPropagation();
        $(this).blur();
    
        if ($("a.song",$playList).length == 0) return;
        
        if ($("a.song_on",$playList).length == 0) {
            $("a.song:eq(0)",$playList).trigger("click");
            return;
        }
        
        var current = $("a.song_on",$playList).parents("li:eq(0)");
        var next  = current.next("li").find("a.song");
        
        if (next.length == 0) {
            $("a.song:eq(0)",$playList).trigger("click");
            return;
        }
        next.trigger("click");
    
        return false;
    });

    var iniPl = $.storage.get("index");
    if (iniPl) {
        for(var i=0;i<iniPl.length;i++) {
            var pl = $.storage.get(iniPl[i]);
            if (pl) {
                var newSong = $( "#songTmpl" ).tmpl(pl);
                newSong.appendTo($playList);
            }
        }   
        $playList.trigger("resize");
    }
    
});

