Fader = new Class({
	initialize: function(element, images, displayFor, fadeFor) {
		this.element = $(element);
		this.images = $A(images);
		this.displayFor = displayFor || 3000;
		this.fadeFor = fadeFor || 1000;

		this.element.setStyle('position', 'relative');

		this.alpha = new Element('div').adopt(this.element.getChildren()).inject(this.element).setStyles({position: 'absolute', top: 0});
		this.beta = new Element('div').inject(this.element).setStyles({position: 'absolute', top: 0});
		this.beta.setStyle('opacity', 0);

		this.index = this.images.indexOf(this.alpha.getElement('img').getAttribute('src'));
		if (this.index == -1) this.index = 0;

		this.advance.delay(this.displayFor, this);
	},

	advance: function() {
		this.index = (this.index + 1) % this.images.length;
		var img = new Element('img');
		img.addEvent('load', function() {
			var fx = this.beta.effect('opacity', {
				duration: this.fadeFor,
				onComplete: function() {
					this.alpha.empty();
					this.alpha.adopt(this.beta.getFirst());
					this.beta.setStyle('opacity', 0);
					this.advance.delay(this.displayFor, this);
				}.bind(this)
			});
			fx.start(1);
		}.bind(this));
		img.src = this.images[this.index];
		this.beta.adopt(img);
	}
});

