
var xwzVRoll=function(srcById,targetTag,height){
		if(typeof srcById =='string') this.frame=document.getElementById(srcById);
		else if(typeof srcById =='object') this.frame=object;
		else{alert('Error.');return false;}

		this.Nodes=[];
		this.height=height||this.frame.offsetHeight||parseInt(this.frame.style.height||0);/*??*/
		this.direction='updn';
		this.bPause=false;
		this.nDelay=3000;
		this.nPeriod=30;
		this.index=0;
		this.resTime=null;
		this.length=0;
		this.Queue=[];
		this.dd=this.direction.indexOf('dn')!==-1;


		var itms=this.frame.getElementsByTagName(targetTag);
		this.length=itms.length;

		this.frame.style.overflow='hidden';
		this.frame.style.position='relative';
		if(!this.frame.style.height) this.frame.style.height=this.height+'px';
		/**/
		for(var i=0;i<this.length;i++){
			if(!itms[i].style.height) itms[i].style.height=this.height+'px' ;
			itms[i].style.position="absolute";
			if(this.dd) this.Nodes.unshift(itms[i]);else this.Nodes.push(itms[i]);

		};
		for(var i=0;i<this.length;i++){this.Nodes[i].style.top=(this.height*(this.dd?((this.length-1-i)*-1):i))+'px';}
};
xwzVRoll.prototype={

	setDelaytime:function(nVal){
		var n=nVal||(this.nDelay/1000);
		return this.nDelay=Math.abs(n*1)*1000;
	},

	setPeriod:function(nVal){
		var n=nVal||(this.nPeriod);
		return this.nPeriod=Math.abs(n*1);
	},

	setDirection:function(strVal){
		strVal=(strVal||this.direction).toString().toLowerCase();
		if((/^(up|dn|updn)$/).test(strVal)==false||this.direction==strVal) return this.direction;

		this.dd=strVal.indexOf('dn')!==-1; 
		var a= this.Nodes;this.Nodes=[];
		for(var i=0;i<this.length;i++){
			if(this.dd) this.Nodes.unshift(a[i]);else this.Nodes.push(a[i]);
		};

		for(var i=0;i<this.length;i++){this.Nodes[i].style.top=(this.height*(this.dd?((this.length-1-i)*-1):i))+'px';}
		this._stack();
		return this.direction=strVal; 
	},

	on:function(){

		this.resTime=setTimeout(this._aviate.bind(this),this.nDelay);
	},

	_stack:function(){
		var dY=pY=0,o=null,a=[];
		this.Queue=[];
		if(this.dd && this.index>0){
			o=this.Nodes[this.length-1];this.Nodes.pop();this.Nodes.unshift(o);o.style.top=(this.height*(this.length-1)*-1)+'px';

		}else if(!this.dd && this.index>0){
			o=this.Nodes[0];this.Nodes.shift();this.Nodes.push(o);o.style.top=(this.height*(this.length-1))+'px';
		}
		if(this.bPause==true) return;

		this.index++;

		if(this.index==this.length&&this.direction=='updn'&&this.dd){

			a[0]=this.Nodes[this.length-1];for(var i=1;i<this.length;i++){a[i]=this.Nodes[i-1];}this.Nodes=a;

			for(var i=0;i<this.length;i++) this.Nodes[i].style.top=(this.height* i) + 'px';
			this.dd=false;
		}else if(this.index==this.length-1&&this.direction=='updn'&&!this.dd){

			for(var i=1;i<this.length;i++){a[i-1]=this.Nodes[i];}a[this.length-1]=this.Nodes[0];this.Nodes=a;

			for(var i=0;i<this.length;i++) this.Nodes[i].style.top=(   this.height* ((this.length-1-i)*-1)  ) + 'px';

			this.dd=true;this.index=0;return false;
		}
		a=null; 
		for(var i=0;i<this.length;i++){
			pY=this.height* ( this.dd?(this.length-(2+i))*-1:i-1 );
			dY=pY-parseInt(this.Nodes[i].style.top);
			if(dY==0) continue;
			this.Queue[this.Queue.length]={style:this.Nodes[i].style,distY:dY,posY:parseInt(this.Nodes[i].style.top),mvY:pY,nBaud:dY!=0?0:this.nPeriod};
		}
		if(this.index>this.length) this.index=0;
	},

	_aviate:function(){
		clearTimeout(this.resTime);this.resTime=null;
		var Toggle=null,Queue=[];
		var dY=0, nsec=0;
		for(var i=0,len=this.Queue.length;i<len;i++){
			Toggle=this.Queue[i];
			if(Toggle.nBaud < this.nPeriod){
				dY = Math.round(Math.sin(Toggle.nBaud / this.nPeriod*Math.PI/2)*Toggle.distY);
				Toggle.style.top=(Toggle.posY+dY)+'px';
				Toggle.nBaud++;
			}
			if(Toggle.nBaud >= this.nPeriod ){
				Toggle.style.top=(Toggle.mvY)+'px';
			}else{
				Queue[Queue.length]=Toggle;
			}
		};
		if(Queue.length==0){

			if(this.bPause==true){	return false;}
			this._stack();
			nsec=this.nDelay;
		}else{
			this.Queue=Queue;
		}
		this.resTime=setTimeout(this._aviate.bind(this),nsec);
	}
	
}

