var SlideShow = new Class({
	options: {
		slides: [],
		currentSlideClass: 'currentSlide',
		wrap: true,
		crossFadeOptions: {},
		imgUrls: [],
		imgClass: 'slide',
		container: false
	},
	initialize: function(options){
		this.setOptions(options);
		this.slides = this.options.slides;
		this.options.imgUrls.each(function(url){
			this.addImg(url);
		}, this);
		this.now = 0
	},
	nextSlide: function() {
		var next = (this.now < this.slides.length-1) ? this.now+1 : 0;
		var now = this.now;
		var s = this.slides[next]; //saving bytes

		function fadeIn(s, resetOpacity){
			s.setStyle('display', 'block');
			if(resetOpacity) {
				s.setStyle('opacity', 0);
			}
			s.effect('opacity', this.options.crossFadeOptions).start(1);
		};

		if(s) {
			if($type(this.now) && this.now != next){
				this.slides[this.now].effect('opacity', this.options.crossFadeOptions).start(0).chain(function() {
					this.slides[now].setStyle('display', 'none');
					s.addClass(this.options.currentSlideClass);
					fadeIn.bind(this, [s, true])();
				}.bind(this));
			}
			else {
				fadeIn.bind(this, s)();
			}
			this.now = next;
		}
	},
	addImg: function(url){
		if($(this.options.container)) {
			var img = new Element('img').setProperties({
						'src': url,
						'id': this.options.imgClass+this.slides.length
					}).addClass(this.options.imgClass).setStyle('display', 'none').injectInside($(this.options.container));
			this.slides.push(img);
		}
	}
});

SlideShow.implement(new Events);
SlideShow.implement(new Options);