/*
** slide.js
** Reece made it
*/

var Slide = new Class({

    initialize: function(buttonHolder,slideHolder,options){

        this.buttonHolder = buttonHolder;
        this.slideHolder = slideHolder;
	
        if (!options) { options = false; }
        this.auto = $pick(options.auto,true);
        this.autoTick = this.autoTickDefault = $pick(options.autoInterval,5);
        this.defaultSlide = $pick(options.defaultSlide,0);
        this.mouse = $pick(options.mouse, 'click');
        this.slideDuration = $pick(options.slideDuration, 500);
        this.curSlideNo = 'none';
        this.counter = $pick( $(options.counter),false);
		
        if ( $(this.slideHolder) ){
			
            this.slides = $(this.slideHolder).getElements('div.slide');
            this.slides.each(function(element,index){
                this.slides[index].scrollPosition = this.slides[index].getPosition(this.slides[index].getParent());
            }.bind(this));
			
            if ( $(this.buttonHolder) ){
                this.buttonHolder = $(buttonHolder);
                this.slideHolder = $(slideHolder);
				
                this.buttons = $(buttonHolder).getElements('a');

                this.buttons.each(function(element,index){
                    //this.slides[index].scrollPosition = this.slides[index].getPosition(this.slides[index].getParent());
                    element.addEvent(this.mouse,function(e){
                        this.gotoSlide(index);
                    }.bind(this));
					
                }.bind(this));
	
            }
			
            this.gotoSlide(this.defaultSlide);
            this.toggleAuto(this.auto);
            this.autoNextSlide.periodical(1000, this);

        }
		
    },
	
    gotoSlide: function(slideNo){
        if ( this.curSlideNo !== slideNo ){
            if ( this.curSlideNo !== 'none' ){
                if (this.buttonHolder) this.buttons[this.curSlideNo].removeClass('active');
            }
            this.curSlideNo = slideNo;
			
            if (this.buttonHolder) this.buttons[this.curSlideNo].addClass('active');
			
            new Fx.Scroll(this.slideHolder,{
                'duration': this.slideDuration,
                wheelStops: false,
                link: 'cancel',
                transition: Fx.Transitions.Expo.easeInOut
                }).start(null, this.slides[this.curSlideNo].scrollPosition['y']);
            //new Fx.Tween(this.slideHolder).start('height', this.slides[this.curSlideNo].getCoordinates().height+'px');
			
            this.autoTick = this.autoTickDefault;
        }
		
    },
	
    skipSlide: function(skipWay){
        var slideToSkip=false;
        switch(skipWay){
            case 'next':
                if (this.curSlideNo == (this.slides.length-1)){
                    slideToSkip = 0;
                } else {
                    slideToSkip = this.curSlideNo+1;
                }
                break;
            case 'previous':
                if (this.curSlideNo == 0){
                    slideToSkip = this.slides.length-1;
                } else {
                    slideToSkip = this.curSlideNo-1;
                }
                break;
            case 'random':
                slideToSkip = $random(0, this.slide.length-1);
                if ( slideToSkip == this.curSlideNo ) {
                    this.skipSlide('random');
                    slideToSkip=false;
                }
                break;
        }
        if (slideToSkip!==false) this.gotoSlide(slideToSkip);
    },

    toggleAuto: function(swit){
        if ( swit == undefined ) {
            if ( swit == false || this.auto == true ) this.auto=false;
            else this.auto=true;
        } else {
            if ( swit == false ) this.auto=false;
            else this.auto=true;
        }
		
        if ( this.auto==false ){
            //$(this.autoBtnTick).setStyle('display','none');
            //$(this.autoBtn).removeClass('autoActive');
            //$(this.autoBtnTick).innerHTML = '';
        } else if ( this.auto==true ) {
            //this.autoTick = this.autoTickDefault;
            //$(this.autoBtnTick).setStyle('display','inline');
            //$(this.autoBtn).addClass('autoActive');
        }
    },

    autoNextSlide: function(){
        if ( this.auto == true ){
            if ( this.autoTick == 0 ){
                this.skipSlide('next');
                if ( this.counter ) {
                    this.counter.innerHTML = '0';
                }
                this.autoTick = this.autoTickDefault;
            } else {
                if ( this.counter ) {
                    this.counter.innerHTML = this.autoTick;
                }
                this.autoTick--;
            }
        }
    }

	
});
