Ext.namespace('Sourceflow.form');

Sourceflow.form.Ticker = function(els,target,params) {
	
	var extels = [];
	
	var maxHeight = 0;
	
	//this.staggerInterval = 100;
	//if (params.staggerInterval) this.staggerInterval = params.staggerInterval;
	if (!els instanceof Array) {
		var extel = Ext.get(els);
		var els = [];
		
		els.push(els.dom);
		extels.push(extel);
		
	} else {
		for (var j=0;j<els.length;j++) {
			var extel = Ext.get(els[j]);
			var h = extel.getHeight();

			extels.push(extel);
			els[j]=extel.dom;
		}
		
	}
	

	var exttarget = Ext.get(target);
	
	target = exttarget.dom;

	target.style.position='relative';
	target.style.width='915px';
	target.style.overflow='hidden';
	
	this.contentdiv = document.createElement('div');
	this.contentdiv.id='divContent';
	this.contentdiv.style.position='absolute';
	
	this.wrapcontentdiv= document.createElement('div');
	this.wrapcontentdiv.id='divWrapContent';
	this.wrapcontentdiv.style.position='absolute';
	
	this.extcontentdiv = Ext.get(this.contentdiv);
	this.extwrapcontentdiv = Ext.get(this.wrapcontentdiv);
	
	var self = this;
	var w = 0;
	for (var j=0;j<els.length;j++) {	

		var cpel = els[j].cloneNode(true);
		els[j].style.cssFloat='left';
		els[j].style.styleFloat='left';
		
		cpel.style.cssFloat='left';
		cpel.style.styleFloat='left';
		
		
		els[j].parentNode.removeChild(els[j]);

		
		this.contentdiv.appendChild(els[j]);
		
		
		
		this.wrapcontentdiv.appendChild(cpel);
		
		var as = Ext.query('a',els[j]);
		for (var k =0;k<as.length;k++) {
			as[k].onmouseover=function(){self.stopTicker();};
			as[k].onmouseout=function(){self.startTicker();};
		}
		
		var as = Ext.query('a',cpel);
		for (var k =0;k<as.length;k++) {
			as[k].onmouseover=function(){self.stopTicker();};
			as[k].onmouseout=function(){self.startTicker();};
		}
		
	}
	target.appendChild(this.contentdiv);
	target.appendChild(this.wrapcontentdiv);
	
	for (var j=0;j<els.length;j++) {	
		var extel = Ext.get(els[j]);
		w+=extel.getWidth();
		w+=extel.getMargins('lr');
		maxHeight = extel.getHeight();
	}
	
	
	this.extcontentdiv.setWidth(w);
	this.extwrapcontentdiv.setWidth(w);
	
	exttarget.setHeight(maxHeight+10);
	
	
	this.extcontentdiv.clone = this.extwrapcontentdiv;
	this.extcontentdiv.parentObj = this;
	
	
	
	this.exttarget=exttarget;
	this.targetLeftEdge = this.exttarget.getLeft();
	this.targetWidth = this.exttarget.getWidth();
	this.targetRightEdge = this.targetLeftEdge + this.targetWidth;

	this.extcontentdiv.setLeft(this.exttarget.getWidth()-w);
	this.extwrapcontentdiv.setLeft(this.extcontentdiv.getLeft()+this.extcontentdiv.getWidth());
	this.leftEdge = this.extcontentdiv.getLeft();
	this.rightEdge = this.leftEdge+this.extcontentdiv.getWidth();
	
	this.staggerInterval = this.extcontentdiv.getLeft(); //when left edge goes off, the wrap div shows up
	
	this.wrapLeftEdge = this.rightEdge+this.extcontentdiv.getLeft()-this.exttarget.getLeft();
	this.wrapRightEdge = this.wrapLeftEdge+ this.extwrapcontentdiv.getWidth();
	
	if (params.startOnLoad===true) {
		this.startTicker();
	}
	
}

Sourceflow.form.Ticker.prototype.runTicker = function(e) {
	var extcontentdiv = this.extcontentdiv;
	if (!extcontentdiv) extcontentdiv = Ext.get(e);
	
	var self = extcontentdiv.parentObj;
	var extwrapcontentdiv = extcontentdiv.clone ;
	if (self.stopped!==true) {
		
		self.leftEdge -=1;
		self.rightEdge -=1;
		
		self.wrapLeftEdge -=1;
		self.wrapRightEdge -=1;
		
		if (0>self.rightEdge) {
			var a = extwrapcontentdiv.getLeft();
			var b = self.exttarget.getLeft();
			var c = self.exttarget.getWidth();
			var lft = a+c-2*b;
			extcontentdiv.setLeft(lft);
			self.leftEdge=self.extcontentdiv.getLeft();
			self.rightEdge = self.leftEdge+extcontentdiv.getWidth();
			self.runTicker();
		}
		else if (0>self.wrapRightEdge) {
			var a = extcontentdiv.getLeft();
			var b = self.exttarget.getLeft();
			var c = self.exttarget.getWidth();
			var lft = a+c-2*b;
			
			extwrapcontentdiv.setLeft(lft);
			self.wrapLeftEdge= extwrapcontentdiv.getLeft();
			self.wrapRightEdge = self.wrapLeftEdge+extwrapcontentdiv.getWidth();
			self.runTicker();
		}
		else {
			//extcontentdiv = extcontentdiv.shift({x:self.leftEdge,duration:.01,callback:self.runTicker,easing:'easeOut'});
			extcontentdiv.setLeft(self.leftEdge);
			extwrapcontentdiv.setLeft(self.wrapLeftEdge);
			setTimeout(function(){self.runTicker();},25);
		}
	}
		
}
Sourceflow.form.Ticker.prototype.startTicker= function(e) {
	this.stopped=false;
	this.runTicker();
}
Sourceflow.form.Ticker.prototype.stopTicker = function() {
	this.stopped=true;
}
