var js_rolling = function(this_s, width, count, view, type){
	if(this_s.nodeType==1)	this.this_s = this_s;
	else					this.this_s = document.getElementById(this_s);

	this.type        = type;

	this.children    = null;
	this.width		 = width;
	this.count		 = count;
	this.view		 = view;

	this.is_rolling	 = false;
	this.is_stopMove = false;
	this.is_jump	 = false;
	this.is_size	 = width;


	this.direction   = 1;
	if(this.is_stopMove) this.move_gap = 0;
	else				 this.move_gap = 1;
	this.move_gap_temp = this.move_gap;
	

	this.time_dealy       = 1;
	this.time_dealy_pause = 1000;
	this.time_timer       = null;
	this.time_timer_pause = null;
	this.time_timer_temp  = null;


	this.is_over   = false;
	this.is_change = false;
	this.is_click  = false;
	this.init();
}
js_rolling.prototype.init = function(){
	this.this_s.style.position = 'relative';
	this.this_s.style.overflow = 'hidden';

	if(this.type == 1)	this.this_s.style.height = this.width * 3;
	else				this.this_s.style.width  = this.width * this.count;

	if(this.is_stopMove == false){
		var this_s = this;
		this.this_s.onmouseover=function(){
			this_s.is_over=true;
			this_s.pause();
		}
		this.this_s.onmouseout=function(){
			this_s.is_over=false;
			this_s.resume();
		}
	}
}
js_rolling.prototype.set_direction = function(direction){
	this.direction = direction;
	this.children  = this.this_s.childNodes;

	if(this.direction==2 || this.direction==4)	this.this_s.style.whiteSpace='nowrap';
	else										this.this_s.style.whiteSpace='normal';

	for(var i=(this.children.length-1);0<=i;i--){
		if(this.children[i].nodeType==1){
			this.children[i].style.position='relative';
		}else{
			this.this_s.removeChild(this.children[i]);
		}
	}

	for(var i=(this.children.length-1);0<=i;i--){
		switch(this.direction){
			case 1 :
			case 3 : this.children[i].style.display='block';  break;
			case 2 :
			case 4 : this.children[i].style.display='inline'; break;
		}
	}

	this.init_element_children();
}
js_rolling.prototype.init_element_children = function(){
	this.children = this.this_s.childNodes;

	for(var i=(this.children.length-1);0<=i;i--){
		switch(this.direction){
			case 1 : this.children[i].style.top='0px'; break;
			case 2 : this.children[i].style.left='-'+this.this_s.firstChild.offsetWidth+'px'; break;
			case 3 : this.children[i].style.top='-'+this.this_s.firstChild.offsetHeight+'px'; break;
			case 4 : this.children[i].style.left='0px'; break;
		}
	}
}
js_rolling.prototype.start = function(){
	if(this.children.length > this.view){
		this.is_rolling = true;

		var this_s = this;
		var start_function = function(){ this_s.start_action(); };

		if(this_s.is_stopMove)	start_function();
		else					eval("this.time_timer_temp = setTimeout(start_function,"+this.time_dealy_pause+");");
	}
}
js_rolling.prototype.start_action = function(){
	var this_s = this;

	var act = function(){
		if(this_s.is_rolling){
			switch(this_s.direction){
				case 1 : this_s.act_move_up(); break;
				case 2 : this_s.act_move_right(); break;
				case 3 : this_s.act_move_down(); break;
				case 4 : this_s.act_move_left(); break;
			}
		}
	}
	eval("this.time_timer = setInterval(act,"+this.time_dealy+");");
}
js_rolling.prototype.stop = function(){
	this.is_rolling = false;
	eval("clearInterval(this.time_timer);");
	this.time_timer = null;
}
js_rolling.prototype.pause = function(){
	if(this.count > this.view){
		this.is_rolling = false;
		this.move_gap   = 0;

		eval("clearInterval(this.time_timer)");
		this.time_timer = null;
	}
}
js_rolling.prototype.resume = function(){
	if(this.count > this.view){
		if(!this.is_over){
			this.is_rolling = true;
			this.move_gap   = this.move_gap_temp;

			eval("clearInterval(this.time_timer)");
			this.time_timer = null;

			eval("clearTimeout(this.time_timer_temp)");
			this.time_timer_temp = null;

			var this_s = this;
			var start_function = function(){ this_s.start_action(); };
			eval("this.time_timer_temp = setTimeout(start_function,"+this.time_dealy_pause+");");

		}
	}
}
js_rolling.prototype.moveChange = function(action){
	if(this.count > this.view){
		
		if(action != this.direction){
			this.is_change = true;
			this.direction = action;
		}
		this.is_rolling = true;
		this.move_gap   = 1;
		this.time_dealy_pause = 0;
		
		eval("clearInterval(this.time_timer)");
		this.time_timer = null;

		eval("clearTimeout(this.time_timer_temp)");
		this.time_timer_temp = null;

		var this_s = this;
		var start_function = function(){ this_s.start_action(); };
		eval("this.time_timer_temp = setTimeout(start_function,0)");
	}
}
js_rolling.prototype.act_move_left = function(){
	for(var i=0,m=this.children.length;i<m;i++){
		if(this.is_jump)	this.children[i].style.left = -this.is_size;
		else				this.children[i].style.left = (parseInt(this.children[i].style.left)-this.move_gap)+'px';
	}

	if((this.children[0].offsetWidth+parseInt(this.children[0].style.left))<=0){
		this.this_s.appendChild(this.this_s.firstChild);
		this.init_element_children();
		if(this.time_dealy_pause){
			
			if(!this.is_change)	this.pause();
			else				this.is_change = false;

			var this_s = this;
			var act = function(){ this_s.resume(); this_s.time_timer_pause=null; }
			if(this.is_stopMove == false){
				eval("clearTimeout(this.time_timer_pause);");
				this.time_timer_pause = null;
				eval("this.time_timer_pause = setTimeout(act,"+this.time_dealy_pause+");");
			}
		}
	}
}
js_rolling.prototype.act_move_right = function(){
	for(var i = 0,m=this.children.length;i<m;i++){
		var child = this.children[i];
		if(this.is_jump)	child.style.left = +this.is_size;
		else				child.style.left = (parseInt(child.style.left)+this.move_gap)+'px';
	}

	if(parseInt(this.this_s.lastChild.style.left)>=0){
		this.this_s.insertBefore(this.this_s.lastChild,this.this_s.firstChild);
		this.init_element_children();
		if(this.time_dealy_pause){
			
			if(!this.is_change)	this.pause();
			else				this.is_change = false;

			var this_s = this;
			var act = function(){ this_s.resume(); this_s.time_timer_pause=null; }
			if(this.is_stopMove == false){
				eval("clearTimeout(this.time_timer_pause);");
				this.time_timer_pause = null;
				eval("this.time_timer_pause = setTimeout(act,"+this.time_dealy_pause+");");
			}
		}
	}
}

js_rolling.prototype.act_move_up = function(){
	for(var i = 0,m=this.children.length;i<m;i++){
		var child = this.children[i];
		if(this.is_jump)	child.style.top = -this.is_size;
		else				child.style.top = (parseInt(child.style.top)-this.move_gap)+'px';
	}

	if((this.children[0].offsetHeight+parseInt(this.children[0].style.top))<=0){
		this.this_s.appendChild(this.children[0]);
		this.init_element_children();
		if(this.time_dealy_pause){
			
			if(!this.is_change)	this.pause();
			else				this.is_change = false;

			var this_s = this;
			var act = function(){this_s.resume();this_s.time_timer_pause=null;}
			if(this.is_stopMove == false){
				eval("clearTimeout(this.time_timer_pause);");
				this.time_timer_pause = null;
				eval("this.time_timer_pause = setTimeout(act,"+this.time_dealy_pause+");");
			}
		}
	}
}

js_rolling.prototype.act_move_down = function(){
	for(var i = 0,m=this.children.length;i<m;i++){
		var child = this.children[i];
		child.style.top=(parseInt(child.style.top)+this.move_gap)+'px';
	}

	if(parseInt(this.children[0].style.top)>=0){
		this.this_s.insertBefore(this.this_s.lastChild,this.this_s.firstChild);
		this.init_element_children();
		if(this.time_dealy_pause){
			
			if(!this.is_change)	this.pause();
			else				this.is_change = false;

			var this_s = this;
			var act = function(){this_s.resume();this_s.time_timer_pause=null;}
			if(this.is_stopMove == false){
				eval("clearTimeout(this.time_timer_pause);");
				this.time_timer_pause = null;
				eval("this.time_timer_pause = setTimeout(act,"+this.time_dealy_pause+");");
			}
		}		
	}
}
