var Fader = new Class({
	
	initialize: function(container, options){
		this.setOptions({
			display: 4000,
			transition: 1000
		}, options);
		
		this.i = 0;
		
		this.container = container.setStyles({
			'position' : 'relative',
			'padding': '0'
		});
		
		this.elements = this.container.getElements('.element');
		
		this.elements.each(function(element){
			element.setStyles({
				'position' : 'absolute',
				'left': '0px',
				'top': '0px',
				'display': 'none'
			});
		});
		
		this.elements[0].setStyles({
			'display': 'block',
			'z-index': 2,
			'opacity': 1
		});
		
		this.swap();
	},
	
	swap: function() {
		(function() { this.fade() }.bind(this)).delay(this.options.display);
	},
	
	
	fade: function() {
		var next = this.i+1;
		if (next >= this.elements.length) {
			next = 0;
		}
		this.elements[next].setStyles({
			'display': 'block',
			'z-index': 1,
			'opacity': 1
		});
		this.elements[this.i].effects({
			duration: this.options.transition,
			wait: false,
			onComplete : function() {
				this.elements[next].setStyles({
					'display': 'block',
					'z-index': 2,
					'opacity': 1
				});
				this.elements[this.i].setStyles({
					'display': 'none',
					'z-index': 1
				});
				this.i = next;
				this.swap();
			}.bind(this)
		}).start({'opacity': 0});
	}
	
});

Fader.implement(new Events, new Options);