/* slideshow.js */

Ext.onReady(function(){
    var nSlideshowWidth = 600;
    var nSlides = 0;

    function init(){
        initSlideshow();
    }
    
    var oSlideTask, bSlideTaskRunning, bIsSliding, oSlideshow, oSlideshowUL, oDotsUL;
    
    function initSlideshow(){
        oSlideshow = Ext.get('slideshow');
        oSlideTask = {
            run: slideTask
          , interval: nSlideshowDelay * 1000
        }
        if(oSlideshow){
            oSlideshow.addClass('setup');
            oSlideshow.setVisibilityMode(Ext.Element.DISPLAY);
            
            oSlideshow.on('mouseover', stopSlideTask);
            oSlideshow.on('mouseout', startSlideTask);
            
            oSlideshowUL = Ext.get('slideshow-slides');
            
            aSlides = oSlideshow.select('ul li', true);
            nSlides = aSlides.elements.length;
            oSlideshowUL.setWidth(nSlideshowWidth * nSlides);

            oDotsUL = oSlideshow.createChild({
                tag: 'ul'
              , id: 'slideshow-dots'
              , cls: 'dots'
            });
            for(var i = 0; i < nSlides; i++){
                oDotsUL.createChild({
                    tag: 'li'
                  , id: 'slideshow-dot-' + (i + 1)
                })
            }
            oDotsUL.on('click', function(evt, el, o){
                var nSlide = parseInt(el.id.replace('slideshow-dot-', ''), 10);
                setDot(nSlide);
                setSlide(nSlide);
            }, null, {
                delegate: 'li'
            })
            /*
            for(var i = 0; i < nSlides; i++){
                if(aSlides.elements[i].getHeight() < nSlideshowHeight + 30){
                    aSlides.elements[i].select('dl dd').set({ style: 'padding: ' + ((nSlideshowHeight + 30 - aSlides.elements[i].getHeight()) / 2) + 'px 0'})
                }
            }
            */
            
            if(nSlideshowDelay > 0){
                oSlideshowUL.move('right', nSlideshowWidth);
                startSlideTask();
            }
            
//            oSlideshow.hide();
        }
    }
    
    function slideTask(){
        moveSlide('right');
    }
    
    function startSlideTask(evt, el, o){
        bSlideTaskRunning = true;
        Ext.TaskMgr.start(oSlideTask);
    }
    
    function stopSlideTask(evt, el, o){
        bSlideTaskRunning = false;
        Ext.TaskMgr.stop(oSlideTask);
    }
    
    function hasMove(direction){
        var bMove = false;
        var oPosition = oSlideshowUL.getPositioning();
        var nLeft = (oPosition.left != 'auto') ? parseInt(oPosition.left.replace('px', ''), 10) : 0;
        var nWidth = oSlideshowUL.getWidth();
        var nRight = oSlideshowUL.getWidth() + nLeft - nSlideshowWidth;

        if(nLeft < 0 && direction == 'right'){
            bMove = true;
        }else if(nRight > 0 && direction == 'left'){
            bMove = true;
        }
        return bMove;
    }
    
    function moveSlide(direction){
        var bOverride = false;
        var nDistance = nSlideshowWidth;
        if(arguments.length > 1){
            bOverride = arguments[1];
        }
        if(arguments.length > 2){
            nDistance = arguments[2];
        }
        switch(direction){
            case 'left':
            case 'previous':{
                direction = 'right';
                break;
            }
            case 'right':
            case 'next':{
                direction = 'left';
                break;
            }
        }
        if(!bIsSliding){
            if(!bOverride && direction == 'left' && !hasMove(direction)){
                direction = 'right';
                nDistance = (nSlides - 1) * nSlideshowWidth;
            }
        
            if(bOverride || hasMove(direction)){
                bIsSliding = true;
                oSlideshowUL.move(direction, nDistance, {
                    duration: 0.30
                  , easing: 'easeOut'
                  , callback: function(){
                        setDot();
                        bIsSliding = false;
                    }
                });
            }
        }
    }
    
    function setSlide(index){
        var oPosition = oSlideshowUL.getPositioning();
        var nWidth = oSlideshowUL.getWidth();
        var nLeft = (oPosition.left != 'auto') ? parseInt(oPosition.left.replace('px', ''), 10) : 0;
        var oSlide = Ext.get('slideshow-slide-' + index);
        var nOffset = nLeft - (((index - 1) * nSlideshowWidth) * -1);
        if(nOffset > 0){
            moveSlide('right', true, nOffset);
        }else if(nOffset < 0){
            moveSlide('left', true, -nOffset);
        }
    }
    
    function setDot(){
        var index = 0;
        var oPosition, nWidth, nLeft;
        if(arguments.length > 0){
            index = parseInt(arguments[0], 10);
        }else{
          var oPosition = oSlideshowUL.getPositioning();
          var nWidth = oSlideshowUL.getWidth();
          var nLeft = (oPosition.left != 'auto') ? parseInt(oPosition.left.replace('px', ''), 10) : 0;
          index = ((nLeft * -1) / nSlideshowWidth) + 1;
        }
        var oDot = Ext.get('slideshow-dot-' + index);
        if(oDot){
            oDot.radioClass('selected');
        }
        
    }
    
    init();
});

/*

                  , callback: function(){
                        if(bSlideTaskRunning && !hasMove(direction) && bOverride){
                            oSlideshowUL.setLeft(0); // nDistance
                            moveSlide('right');
                        }
                    }

*/
