var promoCommon = {
    getNext : function(block, context, change){
        change = (!change) ? "+" : change;
        if(change == "-"){
            if((parseInt(block)-1) <= 0){
                return (context.length);
            }
            else{
                return (parseInt(block)-1);
            }
        }
        else{
            if((parseInt(block)+1) >= (context.length+1)){
                return 1;
            }
            else{
                return (parseInt(block)+1);
            }
        }
    }
}

var promoPanels = {
    // changing and externally accessable global variables
    play : null,
    active: false,
    panel : 1,
    delay : 5000,
    blocks : {},
    init: function(){
        // non changing private global variables
        $panels = $("#slidePanel>div.panel");
        // no point referencing here since they need to be built before they can even be referenced
        //$topbarLi = $("#topBar li");
        //$topbarLiA = $topbarLi.find("a");
        //-------------
        
        promoPanels.mapBlocks();
        promoPanels.buildTopBarLi();
        $topbarLiA.click(function(){
            promoPanels.changePanel(this.href.split("#panel")[1]);
            return false;
        });
        $panels.fadeOut(0, function(){
            $("#cover").fadeOut(function(){
                $("#jumpPanel").fadeIn(1000);
                $("#topBar li:first a").click();
            });
        });
        $("#topContent").hover(function(){
            promoPanels.setAutoplayTo(false);
        }, function(){
            promoPanels.setAutoplayTo(true);
        });
        promoPanels.setAutoplayTo(true);
    },
    mapBlocks : function(){
        for(var i = 0; i < $panels.length; i++){
            promoPanels.blocks[$panels[i].id] = i;
        }
    },
    buildTopBarLi : function(){
        var jumpPanel = document.getElementById("jumpPanel");
        jumpPanel.style.display = "none";
        for(var i = 0; i < $panels.length; i++){
            jumpPanel.innerHTML += "<li><a href='#"+$panels[i].id+"'><\/a><\/li>";
        }
        $topbarLi = $("#topBar li");
        $topbarLiA = $topbarLi.find("a");
    },
    setAutoplayTo : function(change){
        if(change === false){
            clearTimeout(promoPanels.play);
            promoPanels.play = null;
        }
        else{
            clearTimeout(promoPanels.play);
            promoPanels.play = null;
            promoPanels.play = setTimeout( function(){ promoPanels.changePanel(promoCommon.getNext(promoPanels.panel, $topbarLi)) }, promoPanels.delay );
        }
    },
    changePanel : function(panel){
        if(!promoPanels.active){
            promoPanels.active = true;
            $topbarLiA.removeClass("active");
            $($topbarLiA[panel-1]).addClass("active");
            $panels.css({ "z-index" : "1" });
            $("#panel" + panel).css({ "left":"0", "z-index":"5" }).fadeIn(1000, function(){
                promoPanels.active = false;
            });
            for(var i = 0; i < $panels.length; i++){
                if(($panels[i].id != "panel"+panel)){
                    $($panels[i]).fadeOut(750);
                }
            }
            promoPanels.panel = panel;
        }
        if(promoPanels.play){
            promoPanels.setAutoplayTo(true);
        }
    }
}

var promoBlocks = {
    // changing and public global variables
    play : null,
    active: false,
    block : 1,
    delay : 3500,
    init : function(){
        // non changing gloable variables
        $promoBlocks = $("#promoBlocks li");
        //--------------------
        
        promoBlocks.setupBlocks();
        $promoBlocks.hover(function(){
            var a = $(this);
            a.find("span").stop().animate({ "opacity" : "0" });
        }, function(){
            var a = $(this);
            a.find("span").stop().animate({ "opacity" : "1" });
        }).click(function(){// hack for IE
            var a = $(this);
            if(IE){
                window.location = a.find("a")[0].href;
            }
        });
        $("#prev").click(function(){
            promoBlocks.slideBlock(promoCommon.getNext(promoBlocks.block, $promoBlocks, "-"),"right");
            return false;
        });
        $("#next").click(function(){
            promoBlocks.slideBlock(promoCommon.getNext(promoBlocks.block, $promoBlocks, "+"),"left");
            return false;
        });
        $("#scrollingArea").hover(function(){
            promoBlocks.setAutoplayTo(false);
        }, function(){
            promoBlocks.setAutoplayTo(true);
        });
        promoBlocks.setAutoplayTo(true);
    },
    setupBlocks : function(){
        for(var i = 0; i < $promoBlocks.length; i++){
            var a = $($promoBlocks[i]);
            var thumbOver = a.find("img").attr("src"); 
            a.find("a.promoBox").css({'background':'url(' + thumbOver + ') no-repeat center bottom'});
            // Arrange the blocks
            a.css({ "left" : ((i*288)+((i)*20))+"px" }).fadeIn(1000);
        }
    },
    setAutoplayTo : function(change){
        if(change === false){
            clearTimeout(promoBlocks.play);
            promoBlocks.play = null;
        }
        else{
            clearTimeout(promoBlocks.play);
            promoBlocks.play = null;
            promoBlocks.play = setTimeout( function(){ promoBlocks.slideBlock(promoCommon.getNext(promoBlocks.block, $promoBlocks, "+"),"left")}, promoBlocks.delay );
        }
    },
    slideBlock : function(block, direction){
        if(!promoBlocks.active){
            promoBlocks.active = true;
            if(direction == "right"){
                var position = "-308px";
                if((promoBlocks.block - 1) < 0){
                    $promoBlocks[$promoBlocks.length - 2].style.left = position;
                    promoBlocks.block = $promoBlocks.length;
                }
                else if((promoBlocks.block - 2) < 0){
                    $promoBlocks[$promoBlocks.length - 1].style.left = position;
                }
                else{
                    $promoBlocks[promoBlocks.block - 2].style.left = position;
                }
                promoBlocks.block -= 1;
            }
            else{
                var position = "924px";
                if((promoBlocks.block + 1) > ($promoBlocks.length-1)){
                    $promoBlocks[1].style.left = position;
                    promoBlocks.block = -1;
                }
                else if((promoBlocks.block + 2) > ($promoBlocks.length-1)){
                    $promoBlocks[0].style.left = position;
                }
                else{
                    $promoBlocks[promoBlocks.block + 2].style.left = position;
                }
                promoBlocks.block += 1;
            }
            for(var i = 0; i < $promoBlocks.length; i++){
                promoBlocks.moveBlock(i, direction);
            }
        }
        if(promoBlocks.play){
            promoBlocks.setAutoplayTo(true);
        }
    },
    moveBlock : function (i, direction){
        var distance = 308;
        var timing = 850;
        var block = $($promoBlocks[i]);
        if(direction == "right"){
            block.animate({ "left" : (parseInt(block[0].style.left.split("px")[0])+distance)+"px" }, timing, function(){
                if(i == $promoBlocks.length-1){
                    promoBlocks.active = false;
                }
            });
        }
        else{
            block.animate({ "left" : ((block[0].style.left.split("px")[0])-distance+"px") }, timing, function(){
                if(i == $promoBlocks.length-1){
                    promoBlocks.active = false;
                }
            });
        }
    }
}

$(document).ready(function() {
    promoPanels.init();
    promoBlocks.init();
});
