var slider=new Array();
var slider_pe=new Array();
var slider_wait=new Array();
function InitScroll (_box,auto,tmp) //box id, auto scroll
{	
	var vh=$(_box).getHeight();	
	var rh=$(_box).scrollHeight+vh;
	
	var sh=Math.round((vh*vh)/rh);

	if ($(_box).scrollHeight <= $(_box).offsetHeight) {
		$(_box).style.width='133px';
		return;
	}
		
	$(_box).insert({after: '<div id="track_'+_box+'" class="track" style="display: block;"><div id="handle_'+_box+'" class="handle"></div></div>'});	
	
	if (sh>15)
		$('handle_'+_box).style.height=sh+"px";
	
	slider[_box] = new Control.Slider('handle_'+_box, 'track_'+_box, {
		axis: 'vertical',
		onSlide: function(v) { scrollVertical(v, $(_box), slider);  },
		onChange: function(v) { scrollVertical(v, $(_box), slider); }
	});	
	
	if (window.addEventListener)	//DOMMouseScroll is for mozilla.
		$(_box).addEventListener('DOMMouseScroll', wheel, false);

	$(_box).onmousewheel = $(_box).onmousewheel = wheel;// IE/Opera.
	
	$('track_'+_box).hide();
	//OVER EVENT
	Event.observe($(_box+'_cnt'), 'mouseover', function (event) {
		var src=Event.element(event);
		if (auto!=undefined && slider_pe[_box])
			slider_pe[_box].stop();
		$('track_'+_box).show();
	});
	Event.observe($(_box+'_cnt'), 'mouseout', function (event) {
		var src=Event.element(event);
		$('track_'+_box).hide();
		if (auto!=undefined)
			StartScroll (_box,tmp);			
	});
	
	if (auto!=undefined) {
		StartScroll (_box,tmp);		
	}
}

function StartScroll (_box,tmp) {
	slider_pe[_box]=new PeriodicalExecuter(function(pe) {
		if ($(_box).scrollTop>=($(_box).scrollHeight-$(_box).getHeight())) {
			pe.stop();
			slider_wait[_box]=new PeriodicalExecuter(function(pew) {				
				pew.stop();
				ResetBox(_box,tmp);
			},1);
			return;
		}
		slider[_box].setValueBy(tmp);			
	},.2);
}

function ResetBox(_box,tmp) {
	//slider[_box].setValue(0);
	slider[_box].setValueBy(-($(_box).scrollHeight-$(_box).getHeight()));
	StartScroll(_box,tmp);
}

function scrollVertical(value, element, slider)
{	
	if (slider_wait[element.id])
		slider_wait[element.id].stop();
	element.scrollTop = Math.round(value/slider[element.id].maximum*(element.scrollHeight+10-element.offsetHeight));
}

function handle(obj,delta) {	
	slider[obj.id].setValueBy(-delta/5);
}

function wheel(event) {	
	var delta = 0;
	if (!event) /* For IE. */
		event = window.event;
	if (event.wheelDelta) { /* IE/Opera. */
		delta = event.wheelDelta/120;
		/** In Opera 9, delta differs in sign as compared to IE.*/
		/*if (window.opera)
			delta = -delta;*/
	} else if (event.detail) { /** Mozilla case. */
		/** In Mozilla, sign of delta is different than in IE.
		* Also, delta is multiple of 3.
		*/
		delta = -event.detail/3;
	}
	/** If delta is nonzero, handle it.
	* Basically, delta is now positive if wheel was scrolled up,
	* and negative, if wheel was scrolled down.
	*/
	if (delta)
		handle(this,delta);
	/** Prevent default actions caused by mouse wheel.
	* That might be ugly, but we handle scrolls somehow
	* anyway, so don't bother here..
	*/
	if (event.preventDefault)
		event.preventDefault();
	event.returnValue = false;
}