var GCK = GCK?GCK:{};
GCK.scrollBar = function(_barElem, _sliderElem, _contentElem, _upLimit, _downLimit){
	/*
	YUI ScrollBar
	I would like to make this code cleaner. e.g create a YUI custom event for the mouse wheel but I'm short on time.
	-Clayton Rabenda
	*/
	//private properties
	var barElem = _barElem;
	var sliderElem = _sliderElem;
	var contentElem = _contentElem;
	var upLimit = _upLimit;
	var downLimit = _downLimit; 
	var oldValue = -1000000;
	var originalTopMargin = parseInt(document.getElementById(contentElem).style.marginTop.replace('px',''));
	var safetyMargin = 10;
	var multiplier = (document.getElementById(contentElem).clientHeight + safetyMargin - document.getElementById(barElem).clientHeight) / (downLimit - upLimit);
	var yuiSlider = YAHOO.widget.Slider.getVertSlider(barElem, sliderElem, upLimit, downLimit);
	var hidden = false;
	//private methods
	function wheel(event){
		var delta = 0;
		if (!event){ /* For IE. */
			event = window.event;
		}
		if (event.wheelDelta) { /* IE/Opera. */
			delta = event.wheelDelta/120;
			if (window.opera){
				delta = -delta;
			}
		} else if (event.detail) { /** Mozilla case. */
			delta = -event.detail/3;
		}
		if (delta){
			delta = delta/Math.abs(delta);//normalize it, it's different in different browsers.
			delta = 100*delta;//tweak the speed
			yuiSlider.setValue(yuiSlider.getYValue() - delta, true);
			if(oldValue !== yuiSlider.getYValue()){
				YAHOO.util.Event.preventDefault(event);
			}
			oldValue = yuiSlider.getYValue();
		}
	}
	var sliderCallback = function (offsetFromStart) {
		document.getElementById(contentElem).style.marginTop = ((multiplier*(-offsetFromStart))-multiplier+originalTopMargin) + "px";
	}
	//constructor
	if((document.getElementById(contentElem).clientHeight - (downLimit - upLimit)) > 0){
		document.getElementById(barElem).style.display = 'block';
		yuiSlider.subscribe('change', sliderCallback);
		if (document.getElementById(contentElem).addEventListener){
			document.getElementById(contentElem).addEventListener('DOMMouseScroll', wheel, false);
		}
		document.getElementById(contentElem).onmousewheel = wheel;
	}else{
		hidden = true;
		document.getElementById(barElem).style.display = 'none';
	}
	//public methods and properties
	return {
		//Call this method if the content within the scrollable area changes size.
		resize: function(){
			yuiSlider.unsubscribe('change', sliderCallback);
			if((document.getElementById(contentElem).clientHeight - (downLimit - upLimit)) > 0){
				document.getElementById(barElem).style.display = 'block';
				multiplier = (document.getElementById(contentElem).clientHeight + safetyMargin - document.getElementById(barElem).clientHeight) / (downLimit - upLimit);
				yuiSlider.setValue(0,true,true,true);  
				yuiSlider.subscribe('change', sliderCallback);
				document.getElementById(contentElem).style.marginTop = originalTopMargin;
			}else{
				document.getElementById(barElem).style.display = 'none';
				document.getElementById(contentElem).style.marginTop = originalTopMargin;
			}
		},
		isHidden: hidden
	}
}