/* SCROLL */
var slider=new Array();
function InitScroll (_box,_delta,_vertical,_hide,_mWheel)
{	
  

	if (!$(_box))
		return false;



	_vertical=(_vertical==undefined?false:_vertical);

	var boxSize=(_vertical?$(_box).getHeight():$(_box).getWidth());
	if (_delta)
		boxSize+=_delta;
	var cntSize=(_vertical?$(_box).scrollHeight:$(_box).scrollWidth)+boxSize;
	
	var handleSize=Math.round((boxSize*boxSize)/cntSize);	

	if ((_vertical && $(_box).scrollHeight <= $(_box).offsetHeight) ||
		 (!_vertical && $(_box).scrollWidth <= $(_box).offsetWidth)) {
		return;
	}
	$(_box).insert({after: '<div id="track_'+_box+'" class="'+(_vertical?'v':'o')+'Track"><div id="handle_'+_box+'" class="handle"></div></div>'});
	if (_hide)
		$('track_'+_box).hide();
	if (_vertical) {
		$('track_'+_box).setStyle({
			width: '15px',
			height: $(_box).getHeight()+(_delta?_delta:'')+'px'
		});
		if (handleSize>15)
			$('handle_'+_box).style.height=handleSize+"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); }
		});
			
	} else {
		if (_delta)
			$('track_'+_box).setStyle({width: ($('track_'+_box).getWidth()+_delta)+'px'});
		if (handleSize>15)
			$('handle_'+_box).style.width=handleSize+"px";
			
		slider[_box] = new Control.Slider('handle_'+_box, 'track_'+_box, {
			axis: 'horizontal',
			onSlide: function(v) { scrollHorizontal(v, $(_box), slider);  },
			onChange: function(v) { scrollHorizontal(v, $(_box), slider); }
		});
	}	
	
	if (_mWheel==true || _mWheel==undefined) {
		if (window.addEventListener)	//DOMMouseScroll is for mozilla.
			$(_box).addEventListener('DOMMouseScroll', wheel, false);	
		
		$(_box).onmousewheel = $(_box).onmousewheel = wheel;// IE/Opera.
	}
}

function scrollHorizontal(value, element, slider)
{	
	element.scrollLeft = Math.round(value/slider[element.id].maximum*(element.scrollWidth+10-element.offsetWidth));
}
function scrollVertical(value, element, slider)
{	
	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;
}
