/**
 * Startpage Slider
 *
 * @author Flavio Curte <f.curte@netzbewegung.com>
 * @copyright Netzbewegung GmbH
 */

var StartpageSlider = new function()
{
    var Dom = YAHOO.util.Dom;
    var Event = YAHOO.util.Event;
    var Anim = YAHOO.util.Anim;

    // Settings variables
    this.itemWidth = 746;
    this.arrowLeft = Dom.get('arrow-left');
    this.arrowRight = Dom.get('arrow-right');
    this.sliderContainer = Dom.get('slide-container');
    this.slideItemsClass = 'slide-item';
    this.autoSlide = true;
    this.autoSlideDirection = 'right';
    this.autoSlideTimer = 10000;

    this._setSlideItems = function()
    {
        this.slideItems = Dom.getElementsByClassName(this.slideItemsClass);
    }
    this._setSlideItems();

    this.countSlides = this.slideItems.length;
    this.sliderContainer.style.width = (this.countSlides * this.itemWidth) + "px";



    // Functions
    this._onCompleteAnimation = function()
    {
        var firstItem = Dom.getFirstChild(this.sliderContainer);
        firstItem.parentNode.removeChild(firstItem);
        
        this.sliderContainer.appendChild(firstItem);
        this.sliderContainer.style.marginLeft = 0;
        
        this._setSlideItems();
    }


    this._onArrowClick = function(event, parameter)
    {

        if (this.sliderContainerAnimation && this.sliderContainerAnimation.isAnimated())
        {
            return;
        }

        var animation = new Anim(this.sliderContainer, {}, 0.8);

        animation.attributes.marginLeft = {to: 0};

        switch(parameter)
        {
            case 'left':
                var lastItem = Dom.getLastChild(this.sliderContainer);
                lastItem.parentNode.removeChild(lastItem);

                var firstItem = Dom.getFirstChild(this.sliderContainer);
                this.sliderContainer.insertBefore(lastItem, firstItem);

                this.sliderContainer.style.marginLeft = '-' + this.itemWidth + 'px';
                this._setSlideItems();
                
                this._clearInterval();

                break;

            case 'right':
                animation.attributes.marginLeft = {to: -this.itemWidth};
                animation.onComplete.subscribe(this._onCompleteAnimation, null, this);
                
                this._clearInterval();

                break;
        }

        this.sliderContainerAnimation = animation;

        animation.method = YAHOO.util.Easing.easeOutStrong;
        animation.animate();
    }


    this._startAutoSlideListener = function()
    {
        if (this.intervalAutoSlide)
        {
            this._clearInterval();
            
            this._onArrowClick(null, this.autoSlideDirection);
        }

        that = this;
        this.intervalAutoSlide = setInterval('that._startAutoSlideListener()', this.autoSlideTimer);
    }


    this._clearInterval = function()
    {
        clearInterval(this.intervalAutoSlide);
    }



    // Listeners
    if (this.arrowLeft)
    {
        Event.addListener(this.arrowLeft, 'click', this._onArrowClick, 'left', this);
    }

    if (this.arrowRight)
    {
        Event.addListener(this.arrowRight, 'click', this._onArrowClick, 'right', this);
    }

    if (this.autoSlide && this.autoSlideDirection && this.autoSlideTimer)
    {
        this._startAutoSlideListener();
    }
    
}
