function cycle(options) {
	this.options = options;
	this.current = 0;
	this.pause = false;
	this.init = function() {
		this.next_timeout = setTimeout(this.options.callback + ".next()", this.options.sustain);
		this.all_elements = this.options.elements;
		for(var idx = 0; idx < this.all_elements.length; idx++) {
			if (idx == this.current) {
				this.all_elements[idx].setStyles({
					"z-index":2,
					"opacity":1
				});
				continue;
			}
			this.all_elements[idx].setStyles({
				"z-index":1,
				"opacity":0
			});
		}
	};
	this.next = function() {
		if (this.pause) {
			return;
		}
		this.previous = this.current;
		this.current++;
		if (this.current >= this.all_elements.length) {
			this.current = 0;
		}
		this.fade_step = 0;
		this.all_elements[this.current].setStyle("opacity", 1);
		this.fadeIn();
	};
	this.fadeIn = function() {
		if (this.pause) {
			return;
		}
		this.fade_step++;
		if (this.fade_step > this.options.steps) {
			this.all_elements[this.current].setStyles({
				"z-index":2
			});
			this.all_elements[this.previous].setStyles({
				"z-index":1,
				"opacity":0
			});
			this.next_timeout = setTimeout(this.options.callback + ".next()", this.options.sustain);
			return;
		}
		this.all_elements[this.previous].setStyle("opacity", (this.options.steps - this.fade_step) / this.options.steps);
		this.fadein_timeout = setTimeout(this.options.callback + ".fadeIn()", this.options.attack);
	};
}

