var Ticker = Class.create({
    initialize: function(tempHolder, tempTarget, tempSource, tempClass) {
    
    	this.interval = 0;	
        this.target = $(tempTarget);
		this.source = $(tempSource);
		this.holder = $(tempHolder);
		this.className = tempClass;
		this.amount = 200;
    	this.titles = $$('.'+this.className+' li');
        this.options = Object.extend({
			updateRate: 5
		});
		
		width = 0;
		this.titles.each(function(el){
			width+= el.getWidth();
		});
		
    	if(width > this.holder.getWidth()){
			this.start();
    	}
    	    	    	
    },
    start: function() {
    	this.effect();
		this.interval = new PeriodicalExecuter(function() {
	    	this.effect();
		}.bind(this), this.options.updateRate);
    },
    effect: function() {

		var slideAmount = this.holder.cumulativeOffset()[0] - this.source.cumulativeOffset()[0] + this.amount;
	
		if(slideAmount > this.titles[0].getWidth()){
			slideAmount = this.titles[0].getWidth();
		}
    	
    	var options = Object.extend({
    		style: 'left: -'+slideAmount+'px',
    		duration: 4.5,
    		afterFinish: function(){
    			
    			var difference = this.holder.cumulativeOffset()[0] - this.titles[0].cumulativeOffset()[0];
    			
    			if(difference >= this.titles[0].getWidth()){
    			
					var li = new Element("li");
					li.innerHTML = this.titles[0].innerHTML;
					$(this.source).insert(li);
	
					$(this.target).setStyle('left: 0px');
					$(this.titles[0]).remove();
					
					this.titles = $$('.'+this.className+' li');
				}
				
	    	}.bind(this)
    	});
    	new Effect.Morph(this.target,options);
    }
});