var custscroll = {
	speed: 8,
	interval: null,
	scrollElement: null,
	init: function() {
		var scrollable = $('#scrollable');
		if(scrollable.length > 0) {
			scrollable = scrollable[0];
			var jscroll = $(scrollable);
			if(scrollable.scrollHeight > jscroll.height()) {

				var upBtn = jscroll.parent().children('div.scroll_up');
				var dnBtn = jscroll.parent().children('div.scroll_down');

				if(upBtn.length > 0 && dnBtn.length > 0) {
					
					upBtn = upBtn[0];
					dnBtn = dnBtn[0];

					custscroll.scrollElement = scrollable;
					jscroll.parent().addClass("scroll");
					
					upBtn.onmousedown = custscroll.up;
					upBtn.onmouseup = custscroll.scrollEnd;
					upBtn.onmouseout = custscroll.scrollEnd;

					dnBtn.onmousedown = custscroll.down;
					dnBtn.onmouseup = custscroll.scrollEnd;
					dnBtn.onmouseout = custscroll.scrollEnd;

					if(window.addEventListener)
						scrollable.addEventListener('DOMMouseScroll', custscroll.wheel, false);
						
					scrollable.onmousewheel = custscroll.wheel;
				}
			}
		}	
	},
	up: function() {
		custscroll.scrollEnd();
		custscroll.isOver = true;
		custscroll.interval = window.setInterval("custscroll.doScroll(-1)", 5);
	},
	down: function() {
		custscroll.scrollEnd();
		custscroll.isOver = true;
		custscroll.interval = window.setInterval("custscroll.doScroll(1)", 5);
	},
	doScroll: function(dir) {
		if(custscroll.scrollElement == null)
			return;
		custscroll.scrollElement.scrollTop += dir * custscroll.speed;
	},
	scrollEnd: function() {
		if(custscroll.interval == null)
			return;
		window.clearInterval(custscroll.interval);
		custscroll.interval = null;
	}, 
	wheel: function(event) {
		var delta = 0;
		if (!event) event = window.event;
		if (event.wheelDelta) {
			delta = Math.floor(event.wheelDelta/120); 
			if (window.opera) delta = -delta;
		} else if (event.detail) {
			delta = -event.detail/3;
		}
		if (delta)
			custscroll.handle(delta*3);
					if (event.preventDefault)
						event.preventDefault();
					event.returnValue = false;
	},
	handle: function(delta) {
		if(custscroll.scrollElement == null)
			return;
		if (delta < 0)
			custscroll.scrollElement.scrollTop -= delta;
		else
			custscroll.scrollElement.scrollTop -= delta;
	}
};

custscroll.init();

