/*
*	HOMEPAGE SLIDESHOW
*	dependencies: imageobserver.js for image preloading
*/
document.observe("dom:loaded", function() {
    (function() {
        var slideshowImageSlides = $$('#slideshowPane .slide');
        var slideshowPane = $('slideshowPane');
        var currentSlide = 0;
        var slideWidth = 960;
        var queueScope = 'slideshow';
        var rotationDelay = 6000;

        var numSlides = slideshowImageSlides.length;
        var slideInterval = null;
        var currAnimation = null;

        var maxSlides = 5;
        var totalSlidesShown = 1;

        function changeToSlide(n) {
            var queue = Effect.Queues.get(queueScope);
            //make sure we are not currently animating.
            if(queue.effects.length ==  0) {
                lis = $$('#slideshowNav ul li');
                lis[currentSlide].removeClassName('selected');
                lis[n].addClassName('selected');

                currSlide = slideshowImageSlides[currentSlide];
                currAnimation = new Effect.Fade(currSlide,{duration: 1, from: 1, to: 0, afterFinish: function(){
                    new Effect.Appear(slideshowImageSlides[n],{duration: 1, from: 0, to: 1});
                    currentSlide = n;
                }});
            }
        }

        function init(){
            var ul = document.createElement('ul');
            $$('#slideshowNav')[0].appendChild(ul);

            slideshowImageSlides.each(function(element,i){
                var li = $(document.createElement('li'));
                var span = $(document.createElement('span'));
                span.innerHTML = '&bull;';
                li.appendChild(span);
                if(i == 0){
                    li.addClassName('selected');
                }
                else {
                    element.hide();
                }
                ul.appendChild(li);
                span.observe('click', function(){
                    if(currentSlide != i){
                        changeToSlide(i);
                        clearInterval(slideInterval);
                        /*slideInterval = setInterval(function(){
                            changeToSlide((currentSlide + 1) % numSlides);
                        },rotationDelay);*/
                    }
                });
            });

            slideInterval = setInterval(function(){
                if (maxSlides <= totalSlidesShown) {
                    return;
                }
                changeToSlide((currentSlide + 1) % numSlides);
                totalSlidesShown++;
            },rotationDelay);

        }
        new ImagesObserver('slideshowPane', {
         onImagesLoaded: function() { $('slideshowLoading').fade({ duration: 2.0, from: 1, to: 0 });$('slideshowPane').appear({ duration: 2.0 }); init(); }
        });
    })();


/*
*	HOMEPAGE FEATURED ITEMS
*
*/
    (function() {
        var featuredItemsContainer = $('featuredItemsContainer');
        var featuredItems = $$('#featuredItemPane .item');
        var featuredItemPane = $('featuredItemPane');
        var itemHeight = 99;
        var queueScope = 'featuredItem';
        var currPosition = 0;
        var numberItemsToShow = 3;
        var numNegativeClones = 0;
        var numPositiveClones = 0;
        var offset = 0;

        var numItems = featuredItems.length;
        var initialHeight = numItems * itemHeight;
        //var totalHeight = featuredItemPane.getHeight();
        //var totalHeight = numItems * itemHeight;
        var currAnimation = null;

        function cloneFeaturedItem(stackPosition,itemIndex){
         if(stackPosition == 'top'){
            //calculate where to put clone
            topval = ((offset + 1) * itemHeight * -1 - (numNegativeClones * itemHeight)) + 'px';
            //clone element
            clonedItem  =  featuredItems[itemIndex].cloneNode(true).setStyle({top: topval}).addClassName('clone');
            //insert clone at first position inside element
            featuredItems[0].insert({before: clonedItem});
            //push cloned item to front of the featuredItems array
            arr = new Array(clonedItem);
            featuredItems = arr.concat(featuredItems);
            numPositiveClones++;
         }
         else{
            //calculate where to put clone
            topval = ((-1 * offset) * itemHeight + initialHeight + numNegativeClones * itemHeight) + 'px';
            //clone element
            clonedItem  =  featuredItems[itemIndex].cloneNode(true).setStyle({top: topval}).addClassName('clone');
            //insert clone after last element
            featuredItems[featuredItems.length - 1].insert({after: clonedItem});
            //add clone to end of featuredItems array
            featuredItems = featuredItems.concat(clonedItem);
            numNegativeClones++;
         }
        }

        function slide(direction){
            var queue = Effect.Queues.get(queueScope);
            //make sure we are not currently animating.
            if(queue.effects.length ==  0) {
                yVal = 0;
                switch(direction){
                    case 'up' :
                        nextPos = currPosition + itemHeight;
                        bufferBoundry = -1 * offset * itemHeight - itemHeight;
                        if( nextPos + bufferBoundry == 0) {
                            cloneFeaturedItem('top', numItems - 1);
                            //remove item from dom
                            $(featuredItems[featuredItems.length - 1]).remove();
                            //remove item from end of array
                            featuredItems.pop();
                            offset++;
                            numPositiveClones--;
                        }
                        yVal = itemHeight;
                        break;
                    case 'down' :
                        //next Margin Top
                        nextPos = currPosition + itemHeight * -1;
                        // adjust it by offset   height of all the items  - screen height  + oneItemHeight        
                        bufferBoundry = (-1 * offset * itemHeight) + initialHeight - (itemHeight * numberItemsToShow) + itemHeight;
                        if( nextPos + bufferBoundry == 0) {
                            cloneFeaturedItem('bottom', featuredItems.length - numItems);
                            //remove item from dom
                            $(featuredItems[0]).remove();
                            //remove item from front of array
                            featuredItems.shift();
                            offset--;
                            numNegativeClones--;
                        }
                        yVal = -1 * itemHeight;
                        break;
                }
                currAnimation  = new Effect.Move(featuredItemPane, {y: yVal, duration: 0.5, mode:'relative', queue: {position: 'end', limit: 2, scope: queueScope}});
                currPosition = currPosition + yVal;
            }
        }


        function init(){
            for(var i = 0; i < featuredItems.length; i++){
                featuredItems[i].setStyle({top: (i * itemHeight) + 'px', position: 'absolute'});
            }
            //we always have a positive and negative clone
            cloneFeaturedItem('top',featuredItems.length - 1);
            cloneFeaturedItem('bottom',featuredItems.length - numItems);

            //hook up events to up and down arrows
            var up = featuredItemsContainer.down('span.up');
            var down = featuredItemsContainer.down('span.down');
            up.observe('click', function(){ 
                slide('up');
            });
            down.observe('click', function(){ 
                slide('down');
            });     
        }
        init();
    })();
});

