var scrollBar = new Object();
//scrollBar values (as they scroll)
scrollBar.valueX = 0;
scrollBar.valueY = 0;
//scrollBar data
scrollBar.contentData = new Object();
scrollBar.options = new Object();
scrollBar.bars = new Object();
//scrollBar Object
scrollBar.cSlV = null;
scrollBar.cSlH = null;

scrollBar.init = function (content, bars, options) {
	//parse the data
	this.contentData = content;
	this.bars = bars;
	this.options = options || { };

	if (this.bars.vertical!=undefined) {
		sb_v=(this.bars.vertical.visible==undefined)?true:this.bars.vertical.visible;
		b_v=this.bars.vertical.bar;
		s_v=this.bars.vertical.slider;
	} else sb_v=false;

	if (this.bars.horizontal!=undefined) {
		sb_h=(this.bars.horizontal.visible==undefined)?true:this.bars.horizontal.visible;
		b_h=this.bars.horizontal.bar;
		s_h=this.bars.horizontal.slider;
	} else sb_h=false;
	//vertical
	var ch_v=Element.getHeight($(this.contentData.content));
	var cth_v=Element.getHeight($(this.contentData.inner));

	if (cth_v>ch_v && sb_v) {
		//create the slider
		this.cSlV = new Control.Slider(s_v,b_v, {
			axis: 'vertical',
			minimum: 0,
			maximum: 100,
			onChange: function(v) {
				scrollBar.valueY = v;
				scrollBar.refresh();
			},
			onSlide: function(v) {
				scrollBar.valueY = v;
				scrollBar.refresh();
			}
		});
		//mouse scroll
		Event.observe(this.contentData.content, 'DOMMouseScroll', scrollBar.wheel);
		Event.observe(this.contentData.content, 'mousewheel', scrollBar.wheel);
		//refresh
		scrollBar.refresh();
	} else {
		if (sb_v) {
			$(s_v).hide();
			if (sb_h) {
				$(b_v).hide();
			}
		}
	}
	//horizontal
	var ch_h=Element.getHeight($(this.contentData.content));
	var cth_h=Element.getHeight($(this.contentData.inner));

	if (cth_h>ch_h && sb_h) {
		//create the slider
		this.cSlH = new Control.Slider(s_h,b_h, {
			axis: 'horizontal',
			minimum: 0,
			maximum: 100,
			onChange: function(v) {
				scrollBar.valueX = v;
				scrollBar.refresh();
			},
			onSlide: function(v) {
				scrollBar.valueX = v;
				scrollBar.refresh();
			}
		});
		//refresh
		scrollBar.refresh();
	} else {
		if (sb_v) {
			$(s_h).hide();
			if (sb_h) {
				$(b_h).hide();
			}
		}
	}
}
scrollBar.refresh = function(moveScroller) {
	if (moveScroller==undefined) moveScroller=false;

	var ch_v=Element.getHeight($(this.contentData.content)),cth_v=Element.getHeight($(this.contentData.inner));

	var ch_h=Element.getWidth($(this.contentData.content)),cth_h=Element.getWidth($(this.contentData.inner));

	//vertical & horizontal
	new Effect.Move($(this.contentData.inner), {
		x: scrollBar.valueX * (ch_h-cth_h),
		y: scrollBar.valueY * (ch_v-cth_v),
		mode: 'absolute',
		duration:0
	});
	if (this.options.setVerticalHeight) {
		var svh=ch_v/cth_v*$(this.bars.vertical.bar).getHeight();
		if (svh<20) svh=20;
		$(this.bars.vertical.slider).style.height = svh + "px";
		this.cSlV.handleLength = svh;
	}
	if (this.options.setHorizontalHeight) {
		var shh=ch_h/cth_h*$(this.bars.horizontal.bar).getWidth();
		if (shh<20) shh=20;
		$(this.bars.horizontal.slider).style.width = shh + "px";
		if (this.cSlH) this.cSlH.handleLength = shh;
	}
	if (moveScroller) {
		this.cSlV.setValue(scrollBar.valueY);
	}
	this.checkVisibility();
}
scrollBar.checkVisibility = function() {
	//vertical
	if (this.bars.vertical!=undefined) {
		if (Element.getHeight($(this.contentData.content)) >= Element.getHeight($(this.contentData.inner))) {
			$(this.bars.vertical.slider).hide();
		} else {
			$(this.bars.vertical.slider).show();
		}
	}
	//horizontal
	if (this.bars.horizontal!=undefined) {
		if (Element.getWidth($(this.contentData.content)) >= Element.getWidth($(this.contentData.inner))) {
			$(this.bars.horizontal.slider).hide();
		} else {
			$(this.bars.horizontal.slider).show();
		}
	}
}
scrollBar.handleWeel = function (delta) {
	this.valueY += -delta/(10*Element.getHeight($(this.contentData.inner))/Element.getHeight($(this.contentData.content)));
	if (this.valueY<0) this.valueY=0;
	if (this.valueY>1) this.valueY=1;
	this.refresh(true);
}
scrollBar.wheel = function (event){
	var delta = 0;
	if (!event) event = window.event;
	if (event.wheelDelta) {
		delta = event.wheelDelta/120;
		if (window.opera) delta = -delta;
	} else if (event.detail) delta = -event.detail/3;
	if (delta) scrollBar.handleWeel(delta);
	if (event.preventDefault) event.preventDefault();
	event.returnValue = false;
}
