
function Scrollbar(ScrollbarID, SliderID, ScrollableAreaID) {
	
	this.Scrollbar = document.getElementById(ScrollbarID);
	this.ScrollArea = document.getElementById('information');
	this.ScrollableArea = document.getElementById(ScrollableAreaID);
	this.Slider = document.getElementById(SliderID);

	this.Initialize();
}

Scrollbar.Active = null;

Scrollbar.interval = '';

Scrollbar.scrollPos = 0;

Scrollbar.scrollDirection = -1;

Scrollbar.prototype = {
	
	
	Initialize : function() {
		Scrollbar.Active = this;
		
		this.HeightRatio = this.Scrollbar.offsetHeight / this.ScrollableArea.scrollHeight;
		this.Mistake = 1 - this.ScrollArea.offsetHeight / this.ScrollableArea.scrollHeight;
		this.iScrollbarWorkHeight = this.Scrollbar.offsetHeight - this.Slider.offsetHeight;
		this.iScrollbarHeight = this.Scrollbar.offsetHeight;

		if(this.HeightRatio < 0.925) {
			Common.Event.add(this.Slider, 'mousedown', this.startDrag);
			this.wheelBinding();
		}
		else
			Common.DOM.addClass(this.Slider, 'off');
	},
	
	updateScroll : function() {
		var oScroller = window['oScroller'];
		
		oScroller.HeightRatio = oScroller.Scrollbar.offsetHeight / oScroller.ScrollableArea.scrollHeight;
		oScroller.Mistake = 1 - oScroller.ScrollArea.offsetHeight / oScroller.ScrollableArea.scrollHeight;
		
		if(oScroller.HeightRatio < 0.925) {
			Common.Event.add(oScroller.Slider, 'mousedown', oScroller.startDrag);
			Common.DOM.removeClass(oScroller.Slider, 'off');
		}
		else {
			Common.Event.remove(oScroller.Slider, 'mousedown', oScroller.startDrag);
			Common.DOM.addClass(oScroller.Slider, 'off');
		}
	},
	
	wheelDelta :function(event) {
		var oScrollbar = Scrollbar.Active;
		var delta = 0;
		var iPos;
		
		if (!event) 
				event = window.event;
		
		if (event.wheelDelta) {
				delta = event.wheelDelta/120;
		
		} else if (event.detail) { 
				delta = -event.detail/3;
		}
		
		if (delta) {
			
			if( Scrollbar.scrollDirection == 'undefined' || delta == Scrollbar.scrollDirection ) {
				if(delta < 0) {
					Scrollbar.scrollPos += -delta + 5;
				}
				else {
					Scrollbar.scrollPos -= delta + 5;
				}
			}
			
			iPos = Math.max(0, Math.min(1, Scrollbar.scrollPos / oScrollbar.iScrollbarWorkHeight));
			oScrollbar.setPosition(iPos);
			oScrollbar.setScrollableAreaPos(iPos);
			
			Scrollbar.scrollDirection = (iPos == 0) ? -1 : (iPos == 1) ? 1 : 'undefined';
		}
		
		if (event.preventDefault) event.preventDefault();
		event.returnValue = false;
	},
	

	wheelBinding : function() {
		if (window.addEventListener)
				this.ScrollArea.addEventListener('DOMMouseScroll', this.wheelDelta, false);
	
		this.ScrollArea.onmousewheel = this.wheelDelta;
	},
	
	
	startDrag: function(e) { 
		var evt = e || window.event;

		var oScrollbar = Scrollbar.Active;
		
		oScrollbar.iEventPosY = evt.clientY;
		oScrollbar.iSliderPosY = oScrollbar.Slider.offsetTop;
		
		Common.Event.add(document, 'mousemove', oScrollbar.Drag);
		Common.Event.add(document, 'mouseup', oScrollbar.endDrag);

		return false;
	},

	
	Drag: function(e){
		var evt =  e || window.event;

		var oScrollbar = Scrollbar.Active;
		var iMousePosY, iDy;

		iMousePosY = evt.clientY;
		iDy = iMousePosY - oScrollbar.iEventPosY;
		
		Scrollbar.scrollPos = iDy + oScrollbar.iSliderPosY;
		var iPos = Math.max(0, Math.min(1, (iDy + oScrollbar.iSliderPosY) / oScrollbar.iScrollbarWorkHeight));
		
		oScrollbar.setPosition(iPos);
		oScrollbar.setScrollableAreaPos(iPos);

		return false;
	},
	
	ScrollUp: function() {
		if(this.Scrollbar.offsetHeight / this.ScrollableArea.scrollHeight < 0.925) {
			var oScrollbar = Scrollbar.Active;
			if(Scrollbar.scrollPos - 10 < 0) {
				var iPos = Math.max(0, Math.min(1, (0) / oScrollbar.iScrollbarWorkHeight));
				Scrollbar.scrollPos = 0;
			} else {
				var iPos = Math.max(0, Math.min(1, (Scrollbar.scrollPos - 10) / oScrollbar.iScrollbarWorkHeight));
				Scrollbar.scrollPos = Scrollbar.scrollPos - 10;
			}
			
			//oScrollbar.setPosition(iPos);
			//oScrollbar.setScrollableAreaPos(iPos);
			oScrollbar.Slider.style.top = (iPos * oScrollbar.iScrollbarWorkHeight) + 'px';
			oScrollbar.ScrollableArea.style.top = (oScrollbar.Mistake * -iPos * oScrollbar.iScrollbarHeight / oScrollbar.HeightRatio) + 'px';
		}
		
		return false;
	},
	
	ScrollDown: function() {
		if(this.Scrollbar.offsetHeight / this.ScrollableArea.scrollHeight < 0.925) {
			var oScrollbar = Scrollbar.Active;
			
			if(Scrollbar.scrollPos + 10 > oScrollbar.iScrollbarWorkHeight) {
				var iPos = Math.max(0, Math.min(1, (oScrollbar.iScrollbarWorkHeight) / oScrollbar.iScrollbarWorkHeight));
				Scrollbar.scrollPos = oScrollbar.iScrollbarWorkHeight;
			} else {
				var iPos = Math.max(0, Math.min(1, (Scrollbar.scrollPos + 10) / oScrollbar.iScrollbarWorkHeight));
				Scrollbar.scrollPos = Scrollbar.scrollPos + 10;
			}
			
			//oScrollbar.setPosition(iPos);
			//oScrollbar.setScrollableAreaPos(iPos);
			oScrollbar.Slider.style.top = (iPos * oScrollbar.iScrollbarWorkHeight) + 'px';
			oScrollbar.ScrollableArea.style.top = (oScrollbar.Mistake * -iPos * oScrollbar.iScrollbarHeight / oScrollbar.HeightRatio) + 'px';
		}
		
		return false;
	},

	setPosition: function(iPos){
		var oScrollbar = Scrollbar.Active;

		oScrollbar.Slider.style.top = (iPos * oScrollbar.iScrollbarWorkHeight) + 'px';
	},
	
	
	setScrollableAreaPos: function(iPos){
		var oScrollbar = Scrollbar.Active;

		oScrollbar.ScrollableArea.style.top = (oScrollbar.Mistake * -iPos * oScrollbar.iScrollbarHeight / oScrollbar.HeightRatio) + 'px';
	},
	
	
	endDrag: function(e){
		var oScrollbar = Scrollbar.Active;
		
		Common.Event.remove(document, 'mousemove', oScrollbar.Drag);
		Common.Event.remove(document, 'mouseup', oScrollbar.endDrag);
	}
	
};



/*Common.Event.add(window, 'load', function() {
	var oScroller = new Scrollbar('scrollbar-base', 'slider-1', 'information_in');
	window['oScroller'] = oScroller;
});*/

