function handle(delta) {
	if ($I('scroller')) {
		if (delta < 0) {
				$I('scroller').onMove(10);
		} else {
				$I('scroller').onMove(-10);
		}
	}
}

/** Event handler for mouse wheel event.
 */
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(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;
}


function $I(id) {
	return document.getElementById(id);
}

//We wrap all the code in an object so that it doesn't interfere with any other code
var scroller = {
  init:   function() {

		if (!document.getElementById('scrollContent')) {
			return
		}

    //collect the variables
    scroller.docH = document.getElementById("scrollContent").offsetHeight + 20;
    scroller.contH = document.getElementById("scrollContainer").offsetHeight;
    scroller.scrollAreaH = document.getElementById("scrollArea").offsetHeight -2;
		// get the top position from screen
    scroller.scrollAreaTop = findPosY(document.getElementById("scrollArea"));

    //calculate height of scroller and resize the scroller div
    //(however, we make sure that it isn't to small for long pages)
    scroller.scrollH = (scroller.contH * scroller.scrollAreaH) / scroller.docH;
   	if(scroller.scrollH < 12) scroller.scrollH = 12;
    $I("scroller").style.height = Math.round(scroller.scrollH) + "px";

		if(scroller.docH > scroller.contH) {
			scroller.needScroller = true;
		} else {
			scroller.needScroller = false;
		}
		//alert(scroller.needScroller);
    
    //what is the effective scroll distance once the scoller's height has been taken into account
    scroller.scrollDist = Math.round(scroller.scrollAreaH-scroller.scrollH);
    
    //make the scroller div draggable
    Drag.init(document.getElementById("scroller"),null,0,0,-1,scroller.scrollDist);
    
    //add ondrag function
    $I("scroller").onDrag = function (x,y,e) {
			//window.status = "DRAG";
			stopBubble(e);
      var scrollY = parseInt($I("scroller").style.top);
			if (scrollY < 0) { 
				scrollY = 0;
			}
			if (scrollY > scroller.scrollDist) {
				scrollY = scroller.scrollDist;
			}

      var docY = 0 - (scrollY * (scroller.docH - scroller.contH) / scroller.scrollDist);
			if (docY > 0) {
				docY = 0;
			}
      $I("scrollContent").style.top = docY + "px";


			//window.status = scrollY + ' ' + docY;
    }


		// -- wiwo -- scroll event --
		if (window.addEventListener) {
        /** DOMMouseScroll is for mozilla. */
        $I("scrollContent").addEventListener('DOMMouseScroll', wheel, false);
        $I("scrollArea").addEventListener('DOMMouseScroll', wheel, false);
		} else {
			/** IE/Opera. */
			//window.onmousewheel = document.onmousewheel = wheel;
				$I("scrollContent").onmousewheel = wheel;
				$I("scrollArea").onmousewheel = wheel;
		}
		// -- END wiwo --

    document.getElementById("scroller").onMove= function (scrollAmount) {
      //var scrollY = parseInt(document.getElementById("scroller").style.top);
			//var scrollY = y;
			//this.style.top = scrollY + "px";
			var ret = 1;

      var scrollY = parseInt(document.getElementById("scroller").style.top);

			scrollY += scrollAmount;
			if (scrollY < -1) { scrollY = -1; ret = 0;  }
			if (scrollY > scroller.scrollDist ) { scrollY = scroller.scrollDist ; ret = 0; }

			this.setContentPosition(scrollY);

			return ret;
		}


    document.getElementById("scroller").onMoveTop = function () {
      //var scrollY = parseInt(document.getElementById("scroller").style.top);
			var scrollY = 0;

			this.setContentPosition(scrollY);
		}
    document.getElementById("scroller").onMoveBottom = function () {
      //var scrollY = parseInt(document.getElementById("scroller").style.top);
			var scrollY = scroller.scrollDist ;
			
			this.setContentPosition(scrollY);
		}

		document.getElementById("scroller").setContentPosition = function (scrollY) {
			if (scrollY < 0) {
				scrollY = 0;
			} 

			if (scrollY > scroller.scrollDist) {
				scrollY = scroller.scrollDist;
			}
			//window.status = scrollY + ' XXX ' + scroller.scrollDist;

			this.style.top = scrollY + "px";

      var docY = 0 - (scrollY * (scroller.docH - scroller.contH) / scroller.scrollDist);

			if (docY > 0) {
				docY = 0;
			}
      $I("scrollContent").style.top = docY + "px";

			//window.status = docY;
		}
		document.getElementById("scroller").setContentPositionPx = function (scrollY) {
      $I("scrollContent").style.top = scrollY*-1 + "px";

			// compute the offset for the handle
			// Height of the scrollbar / height of the text display area * offset of text display area
			scrY = scroller.scrollAreaH / scroller.docH * scrollY;
			$I("scroller").style.top = scrY + "px";
			
		}

		scroller.mouse_down = 0;

		document.getElementById("scroller").startScrolling = function (scrollAmount) {
			scroller.mouse_down = 1;
			window.setTimeout("document.getElementById('scroller').onRepeatedMove(" + scrollAmount + ")",750)
			//window.status = "scroll started " + scrollAmount + "px; " + scroller.count;
		}
		document.getElementById("scroller").onRepeatedMove = function (scrollAmount) {
			if (scroller.mouse_down && this.onMove(scrollAmount) ) {
				//window.status = "scroll repeated" + scrollAmount + "px; " + scroller.count2;
				window.setTimeout("document.getElementById('scroller').onRepeatedMove(" + scrollAmount + ")",30)
			}
		}
		document.getElementById("scroller").stopScrolling = function () {
			scroller.mouse_down = 0;
			//window.status = "scroll off";
		}
		
		document.getElementById("scroller").onClickMove = function (e) {
			// add the half height off the scroller-handle (div#scroller)
 			scrollY = getMouseXY(e) -  (scroller.scrollAreaTop + (scroller.scrollH/2)); //parseInt(document.getElementById("scrollArea").style.top);
			document.getElementById("scroller").setContentPosition(scrollY);
		}

		document.getElementById('scrollArea').onmousedown = document.getElementById("scroller").onClickMove;

		if (scroller.custom_init) {
			scroller.custom_init();
		}
		if (scroller.custom_init_2) {
			scroller.custom_init_2();
		}
  }

}
//window.status = "ok";

function stopBubble(e) { 
	var oEvent = (window.event) ? window.event : e;
	if (oEvent) {
		try {
			oEvent.returnValue = false;
			oEvent.cancelBubble = true;

			if(document.all){ //IE
					oEvent.keyCode = 0;
			} else{ //NS
					oEvent.preventDefault();
					oEvent.stopPropagation();
			}
			//window.status = 'bubble stopped';
		} catch(ex){
			alert(ex);
		}
	}

}


function findPosX(obj)
{
        var curleft = 0;
        if (obj.offsetParent)
        {
                while (obj.offsetParent)
                {
                        curleft += obj.offsetLeft
                        obj = obj.offsetParent;
                }
        }
        else if (obj.x)
                curleft += obj.x;
        return curleft;
}

function findPosY(obj)
{
        var curtop = 0;
        if (obj.offsetParent)
        {
                while (obj.offsetParent)
                {
                        curtop += obj.offsetTop
                        obj = obj.offsetParent;
                }
        }
        else if (obj.y)
                curtop += obj.y;
        return curtop;
}

var is_ie = document.all?true:false;
 
function getMouseXY(e) {
	var x,y;
	if(is_ie){
		x = event.clientX + document.body.scrollLeft;
		y = event.clientY + document.body.scrollTop;
	} else {
		x = e.pageX;
		y = e.pageY;
	}
	// x and y are now the mouse X and Y
	return y;
}

onload = scroller.init;
