function scroll (divElm,params) {
	this.firstshownvid=false;
	this.tweentime=700;
	this.tweeninterval=30;
	this.numVidScroll = params.numVidScroll;
	this.items = params.items;
	this.dir = params.direction;
	this.itemSize = params.itemSize;
	this.itemsDisplay = params.itemsDisplay;
	this.clicked = 0;
	this.flag= true;
	this.scrollItems = 0;
	this.scrollBackward = 0;
	this.scrollForward = 1;
	
	if (this.itemsDisplay < this.numVidScroll) {
		this.itemsCount = this.itemsDisplay;
	} else if (this.numVidScroll < this.itemsDisplay) {
		this.itemsCount = this.numVidScroll+(this.itemsDisplay-this.numVidScroll);
	} else if (this.numVidScroll == this.itemsDisplay) {
		this.itemsCount = this.numVidScroll;
	} 

	this.getElt=function(str){
		if (this[str]) return true;
		var elt=document.getElementById(str);
		if (!elt) return false;
		this.obj=elt;
		return true;
	};
	
	this.itemPos=function(dir){
		if (dir == 1) {this.firstshownvid += -1;} else {this.firstshownvid += 1;}
	};
	
	this.onMoveItemsTimeout=function(){
		var currTime=((new Date()).getTime())-this.mmtstarttime;
		if (currTime>this.tweentime) {
			switch (this.dir) {
				case 'top': this.obj.style.top = this.mmtstarttop+this.mmtdifftop + 'px'; break;
				case 'left': this.obj.style.left = this.mmtstarttop+this.mmtdifftop + 'px'; break; 
				case 'right': this.obj.style.right = this.mmtstarttop+this.mmtdifftop + 'px'; break;
			}
			
			this.mmtonend.call(this,this.mmtdir);
			return;
		};
		
		switch (this.dir) {
			case 'top': this.obj.style.top=this.transFunc(currTime,this.mmtstarttop,this.mmtdifftop,this.tweentime); break;
			case 'left': this.obj.style.left=this.transFunc(currTime,this.mmtstarttop,this.mmtdifftop,this.tweentime); break; 
			case 'right': this.obj.style.right=this.transFunc(currTime,this.mmtstarttop,this.mmtdifftop,this.tweentime); break;
		}
		var _this=this;setTimeout(function(){_this.onMoveItemsTimeout();},this.tweeninterval);
	};
	
	
	
	this.moveItems=function(dir,onEnd){
		if (!this.getElt(divElm)) return;
		this.mmtstarttop=parseInt(this.scrollDirection(this.dir));

		if (isNaN(this.mmtstarttop)) {
			switch (this.dir) {
				case 'top': this.obj.style.top = 0; break;
				case 'left': this.obj.style.left = 0; break; 
				case 'right': this.obj.style.right = 0; break;
			}
			this.mmtstarttop=0;
		}
		
		var numItemsScroll = this.calcItems(dir);
		this.mmtdifftop=numItemsScroll*dir;
		this.mmtstarttime=(new Date()).getTime();
		this.mmtonend=onEnd;
		this.mmtdir=dir;
		this.onMoveItemsTimeout();
	};

	this.scrollDirection=function(dir){
		switch (dir) {
			case 'top': return parseInt(this.obj.style.top); break;
			case 'left': return parseInt(this.obj.style.left); break;
			case 'right': return parseInt(this.obj.style.right); break;
			default: return 0; break
		}
	};
	
	this.calcItems=function(dir){
		
		if (dir == -1){
			if (this.itemsCount + this.numVidScroll >= this.items) {
				this.scrollItems = this.items - this.itemsCount;
				this.itemsCount = this.items;
				this.flag = false;
			} else {
				this.scrollItems = this.numVidScroll;
				this.itemsCount += this.numVidScroll;
				this.flag = true;
			}
		} 
		
		if (dir == 1){ 
			if (!this.flag) {
				this.flag = true
			} else {
				this.scrollItems = this.numVidScroll;
			}
			this.itemsCount -= this.scrollItems;
		}
		
		return this.scrollItems*this.itemSize;
	};
	
	this.checkPos=function() {
		if (this.itemsCount == this.itemsDisplay) {
			this.scrollBackward = 0;
		} else {
			this.scrollBackward = 1;				
		}
		
		if (this.itemsCount == this.items) {
			this.scrollForward = 0;
		} else {
			this.scrollForward = 1;
		}
	};

	this.onClickNext=function(){this.onClick(-1);this.checkPos();};
	this.onClickPrev=function(){this.onClick(1);this.checkPos();};
	this.onClick=function(dir){
		
		if ((this.movingItems) || ((dir==-1) && (this.itemsCount >= this.items)) || ((dir==1) && (this.firstshownvid==false)) || this.clicked==1) return;
		this.clicked=1;
		this.moveItems(dir,function(dir){
			//increment or decrement the video postion
			this.itemPos(dir);
			this.movingItems=false;
			this.clicked=0;
		});
		
		
	};
	// sineInOut ( currTime, startVal, changeVal, tweenTime  )
	this.transFunc=function(t,b,c,d){
		return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;
	};
}