var Ticker = new Class({
	Implements: [Events, Options],
	
	options: {
		interval: 4000,
		effect: {},
		onStart: $empty,
		onNext: $empty,
		onStop: $empty
	},
	
	initialize: function(container, options) {  
		// Set container
		this.container = $(container);
		if (!this.container || this.container.getElements('li').length <= 1) return;
		// Set options
		this.setOptions(options);
		
		// Set start variables
		this.index = 0;
		this.container.setStyle('position', 'relative');
		this.elements = this.container.getElements('li').setStyles({
			'position': 'absolute',
			'top': this.container.getHeight()
		}).set('morph', this.options.effect);
		this.elements[0].setStyle('top', 0);
		
		// Start ticker
		this.start();
	},
	
	start: function(){
		// Fire onStart event
		this.fireEvent('start');
		
		// Start timer if not already started
		this.timer = this.timer || this.next.periodical(this.options.interval, this);
	},
	
	next: function(){
		// Get indexes
		var nextIndex = (this.index + 1 >= this.elements.length) ? 0 : this.index + 1;
		
		// Fire onNext event
		this.fireEvent('next', [this.index, nextIndex]);
		
		// Slide current item up
		this.elements[this.index].morph({
			'top': [0, -this.container.getHeight()],
			'opacity': [1, 0]
		});
		
		// Slide next item up
		this.elements[nextIndex].morph({
			'top': [this.container.getHeight(), 0],
			'opacity': [0, 1]
		});
		
		// Update index
		this.index = nextIndex;
	},
	
	stop: function(){
		// Fire onStop event
		this.fireEvent('stop');
		
		// Clear timer
		$clear(this.timer);
		delete this.timer;
	}
});