var Carousel = Class.create();
Carousel.prototype = {
    initialize: function(key, sliderTimer) {
		this.element = $(key);
		this.width = this.element.getWidth();
		this.height = this.element.getHeight();
		this.list = this.element.getElementsByClassName('carousel-items')[0];
		this.items = this.list.getElementsByTagName('li');
		this.numItems = this.items.length;
		this.currentItem = 0;
		this.timer;
		this.sliderTime = (sliderTimer == undefined)?6500:sliderTimer;

		if (this.element.getElementsByClassName('itemNumber')[0]) {
			this.element.getElementsByClassName('itemNumber')[0].className='itemNumber selected';
		}
	},
	
	next: function() {
		if (this.currentItem < this.numItems-1) {
			this.element.getElementsByClassName('itemNumber')[this.currentItem].className='itemNumber';
			++this.currentItem;
			this.animate();
			this.element.getElementsByClassName('itemNumber')[this.currentItem].className='itemNumber selected';
		} else {
			this.element.getElementsByClassName('itemNumber')[this.currentItem].className='itemNumber';
			this.currentItem = 0;
			this.animate();
			this.element.getElementsByClassName('itemNumber')[this.currentItem].className='itemNumber selected';
		}
	},
	
	prev: function() {
		if (this.currentItem > 0) {
			this.element.getElementsByClassName('itemNumber')[this.currentItem].className='itemNumber';
			--this.currentItem;
			this.animate();
			this.element.getElementsByClassName('itemNumber')[this.currentItem].className='itemNumber selected';
		}
	},
	
	goto: function(index) {
		if (index >= 0 && index < this.numItems) {
			this.element.getElementsByClassName('itemNumber')[this.currentItem].className='itemNumber';
			this.currentItem = index;
			this.fader();
			this.element.getElementsByClassName('itemNumber')[this.currentItem].className='itemNumber selected';
		}
	},
	
	animate: function() {
		new Effect.Morph(this.list, {style: 'left: -' + (this.width * this.currentItem) + 'px', duration: 0.5});
	},
	
	fader: function(){
	 new Effect.Opacity(this.list, {
                    from:   1.0,
                    to:     0,
                    duration: 0.5,
                    afterFinish: (function () {
                        new Effect.Morph(this.list, {style: 'left: -' + (this.width * this.currentItem) + 'px', duration: 0});

                        new Effect.Opacity(this.list, {
                            from: 0,
                            to: 1.0,
                            duration: 0.5
                        });
                    }
                ).bind(this)});
    }

	/*
	play: function() {
		var self = this;
		this.element.getElementsByClassName('pause')[0].show();
		this.element.getElementsByClassName('play')[0].hide();
		this.timer = setTimeout(function() { self.next(); self.play(); }, this.sliderTime);	
	}, 
	pause: function() {
		if (this.timer) {
			clearTimeout(this.timer);	
		}
		this.element.getElementsByClassName('pause')[0].hide();
		this.element.getElementsByClassName('play')[0].show();
	}
	*/
}
