      var NewsTicker = Class.create();
	  
      NewsTicker.prototype = {
          messages: new Array(),
		  messagesStr: '',
          counter: 0, 
		  interval: 0,
          target: null, 
		  source: null,
		  containerWidth: 0, 
		  containerStartPos: null,
          initialize: function(target, options)
          {
              this.target = $(target);
              //this.source = $(source);
              this.options = Object.extend({
				  updateRate: 2,
                  duration: 0.5,
				  moveX: 10,
                  beforeStart:function(){
                      this.counter++;
                  }.bind(this),
				  msgWrap: '<span class="ticker_msgWrap">&nbsp;</span>'
              }, options || {});

              Element.cleanWhitespace(this.target);
			  if(this.target == undefined) { return false; }
			  
			  var offsetParent = this.target.getOffsetParent();
			  this.containerStartPos = offsetParent.getDimensions();
			  
			  var liList = $(this.target).childElements();
              var msgCount=0;
			  liList.each(function(sel) {
                 //this.messages.push(sel.innerHTML.strip());
				 this.messages.push(sel.innerHTML);
				 if(msgCount > 0) {
					this.messagesStr =  this.messagesStr + this.options.msgWrap + sel.innerHTML;
				 } else {
					this.messagesStr =  this.messagesStr + sel.innerHTML;
				 }
				 msgCount++;
				 this.containerWidth += sel.getWidth();
              }.bind(this));
			  this.target.update(this.messagesStr);
			  
			  this.target.setStyle({
								'display': 'block',
								'width': this.containerWidth + 'px'
								});

              this.start();
			  
          },
		  start: function()
          {

				var tempPos = this.target.positionedOffset()
				var tempY = tempPos[1];
				var tempX = tempPos[0]
				
				var newX = 1-this.containerWidth;

				this.target.setStyle({left: this.containerStartPos.width + 'px'});
				Event.observe(this.target.getOffsetParent(), 
							  'mouseover', 
							  this.ticker_onMouseover.bind(this));
				this.scrollContent();

          },
		  scrollContent: function() {
				var queue = Effect.Queues.get('tickerScope');
				queue.each(function(effect) { effect.cancel(); });
				var newX = 1-this.containerStartPos.width-this.containerWidth-this.containerWidth;
				new Effect.MoveBy(this.target, 0, newX, {duration:(this.messagesStr.length/20),transition:Effect.Transitions.linear, queue:'end', scope:'tickerScope', delay:0, afterFinish:this.resetartContent.bind(this)});
		  },
		  ticker_onMouseover: function() {
				this.stopTicker();
				Event.observe(this.target.getOffsetParent(), 
							  'mouseout', 
							  this.scrollContent.bind(this));
		  },
          stopTicker: function()
          {
				var queue = Effect.Queues.get('global');
				queue.each(function(effect) { 
					effect.cancel(); 			
				});
          },
		  resetartContent: function() {
				var queue = Effect.Queues.get('global');
				queue.each(function(effect) { 
					effect.cancel(); 			
				});
				this.target.setStyle({left: this.containerStartPos.width + 'px'});
				this.scrollContent();
		  }
      };
