var SlideShow = new Class({
	
	Implements: Options,
	container: 'slideshow',
	
	options: {
			slides: '.slide',
			duration: 5000
		},

	initialize: function(container, options){
		this.container = ($type(container) == 'element' ? container : $(container));
        this.setOptions(options);
        this.go();
    },
	
    go: function() {
		// if no slides, hide container, and exit
		if (this.container.getElement(this.options.slides) == null) {
			this.container.setStyle('display', 'none');
			return;
		}
	
		if (this.container.getStyle('position') != 'absolute') {
			this.container.setStyle('position', 'relative');
		}
		
		// hide all
		this.container.setStyle('width', this.container.getElement(this.options.slides).getSize()['x']).setStyle('height', this.container.getElement(this.options.slides).getSize()['y']);
		this.container.getElements(this.options.slides).setStyle('display', 'none').setStyle('z-index', 1).setStyle('position', 'absolute');
		
		// start by showing first
		this.container.getElement(this.options.slides).setStyle('display', '').setStyle('z-index', 5);
		
		// if multiple slides, start show
		if (this.container.getElements(this.options.slides).length > 1) {
			this.next.periodical(this.options.duration, this);
		}
    },
    
    next: function () {
		var slides = this.container.getElements(this.options.slides);
		
		// find current
		active = slides.filter(function(item, index) {
	    	return item.getStyle('z-index') > 1;
		})[0];
		
		// find next
		for (s = 0; s < slides.length; s++) {
			if (slides[s] == active) {
				if (s == slides.length - 1) {
					next = slides[0];
				} else {
					next = slides[s + 1];
				}
			}
		}
		
		next.setStyle('opacity', 0).setStyle('display', '').setStyle('z-index', 5)
			.set('tween', {
				onStart: function() {
						active.setStyle('z-index', 1);				
					},
				onComplete: function() {
						active.setStyle('display', 'none');
					}
				})
			.tween('opacity', 1);
		}
});
