function COSP_Ticker(id, options)
{
	// public String
	this.id = id;

	// protected Integer
	this.min_x = 0;
	this.min_y = 0;
	this.width = 0;
	this.height = 0;
	this.content_width = 0;
	this.fps = ( options && options['fps'] ) ? options['fps'] : 24;
	this.stop_onmouseover = ( options && options['stop_onmouseover'] ) ? options['stop_onmouseover'] : 0;

	// protected Float
	this.speed = ( options && options['speed'] ) ? options['speed'] : 3;
	this.current_speed = this.speed;

	// protected String
	this.direction = ( options && options['direction'] ) ? options['direction'] : 'rtl';


	// public
	this.Start = function()
	{
		if ( document.getElementById )
		{
			var ticker = byId(this.id);
			SetStyle(ticker, 'overflow:hidden');

			// Get content
			var content = byId(this.id + '_content').innerHTML;
			byId(this.id + '_content').innerHTML = '';
			SetStyleById(this.id + '_content', 'display:inline;');

			this.width = GetContentWidth(ticker);
			this.height = GetContentHeight(ticker);

			var content_container_html = AppendElement(ticker, 'div', { style : 'position:relative; width:' + this.width + 'px; height:' + this.height + 'px; overflow:hidden;' });
			content_container_html.parent = this;
			if ( this.stop_onmouseover )
			{
				content_container_html.onmouseover = function(){ this.parent.current_speed = 0; };
				content_container_html.onmouseout = function(){ this.parent.current_speed = this.parent.speed; };
			}
			var content_container = AppendElement(content_container_html, 'div', { id : this.id + '_content_container', style : 'display:inline; position:absolute; white-space:nowrap;' });
			content_container.innerHTML = content;
			this.content_width = content_container.offsetWidth;

			// Fix position
			switch ( this.direction )
			{
				case 'ltr' :
					this.min_x = 0 - parseInt(this.content_width);
					this.min_y = 0;
				break;
				case 'rtl' :
					this.min_x = parseInt(this.width);
					this.min_y = 0;
				break;
			}
			content_container.style.left = this.min_x + 'px';
			content_container.style.top = this.min_y + 'px';

			var scroll_ticker_interval = setInterval(dojo.hitch(this, this.Scroll), parseInt(1000 / this.fps));
		}
	};


	// public
	this.Scroll = function()
	{
		var content_container = byId(this.id + '_content_container');

		switch ( this.direction )
		{
			case 'ltr' :
				content_container.style.left = ( parseInt(content_container.style.left) < this.width ) ? parseInt(content_container.style.left) + this.current_speed + 'px' : this.min_x + 'px';
			break;
			case 'rtl' :
				content_container.style.left = ( parseInt(content_container.style.left) > 0-this.content_width ) ? parseInt(content_container.style.left) - this.current_speed + 'px' : this.min_x + 'px';
			break;
		}
	};
};

