    var scrollStep=0;
    var scrollFreq= 10;
 
    var sbTop = 0;
    var sbBot = 0;
    var sbHeight = 0;
    var sbWidth = 0;
    var sbBoxYOffset = 0;
    var sbDivider = 0;
    var sbBoxActive = "";
    var sbBoxNormal = "";
    var scrollTimer="";

    var scrollObj = null; 
    var scrollObjStyle = null;
    
    var scrollBarObj = null;
    var scrollBarStyle = null;
    
    var scrollBoxObj = null;
    var scrollBoxStyle = null; 
    
    var scrollObjectId = "";
    var scrollBarId = "";
    var scrollBoxId = "";

    function createScrollbar(scrollObject, scrollbar, scrollbox, boxNormalClass, boxActiveClass){
    	scrollObjectId = scrollObject;
    	scrollBarId = scrollbar;
    	scrollBoxId = scrollbox;
    	
    	sbBoxActive = boxActiveClass;
    	sbBoxNormal = boxNormalClass;
    	
       	scrollObj = getIdObj(scrollObject);
       	scrollObjStyle = getIdObjStyle(scrollObject);
       	
       	if ( scrollObj.addEventListener ) {
       		scrollObj.addEventListener('DOMMouseScroll', doMouseWheel, false);
       	}
       	else if (scrollObj.attachEvent) {
       		scrollObj.attachEvent("onmousewheel", doMouseWheel);
       	}
       	
       	scrollBarObj = getIdObj(scrollbar);
       	scrollBarStyle = getIdObjStyle(scrollbar);
       	
       	//* Events
        scrollBarObj.onmousemove = doScrollMouseMove;
        scrollBarObj.onmouseout = stopMe;  

       	
       	scrollBoxObj = getIdObj(scrollbox);
       	scrollBoxStyle = getIdObjStyle(scrollbox);
       	
		sbTop    = 1*fixNum(scrollBarStyle.top);
		sbHeight = 1*fixNum(scrollBarStyle.height); 
		sbWidth  = 1*fixNum(scrollBarStyle.width);
		sbBot    = (1*sbTop) + (1*sbHeight);
    	sbBoxYOffset = fixNum(scrollBoxStyle.height) / 2;
    	sbDivider = sbHeight / 10;

		
		bDoDrag = true;
    }
    
    function doMouseWheel(evt){
    	var posy = 0;
    	if (!evt) evt = window.event;
    	var wheelDelta = evt.detail ? evt.detail * -1: evt.wheelDelta / 40;
    	scrollObj.scrollTop = scrollObj.scrollTop + (wheelDelta*-2);
    	doMoveBox();
    }
    
    function doScrollMouseMove(evt){
		doTheScroll(iMouseY);	
    }

    function doTheScroll(yPos){
    	if ( oDragObject!=null )
        	return;

        scrollDiv();
    }
    
    function doMoveBox(){
        if (scrollObj.scrollTop == 0 ){
        	scrollBoxStyle.top = sbTop;
        }
        else {
            //Calculates the percentage scrolled
    		var sh = scrollObj.scrollHeight - fixNum(scrollObjStyle.height); //This is the scrollable area 
    		var perc = scrollObj.scrollTop / sh;
    		var iBoxHeight = fixNum(scrollBoxStyle.height);
    		
        	//Now set the box to the same percentage of the scrollbar
    		//scrollBoxStyle.top = sbTop + ((sbHeight-iBoxHeight) * perc);
    		scrollBoxStyle.top = sbTop + ((sbHeight-sbBoxYOffset) * perc) - sbBoxYOffset;
        }
    }

    function doScrollTo(yPos){
        //Calculates the box percentage on scrollbar
        var iBoxHeight = fixNum(scrollBoxStyle.height);
        var sh = scrollObj.scrollHeight - fixNum(scrollObjStyle.height); //This is the scrollable area 
   		var perc = (yPos - sbTop) / (sbHeight - iBoxHeight);
   		scrollObj.scrollTop = sh * perc;
    }
    
    function scrollDiv(){
		var iDiff;
		var iBoxOffset = (1*fixNum(scrollBoxStyle.top)) + (1*sbBoxYOffset);

		if  (iMouseY< sbTop || iMouseY > sbBot ) {
			clearTimeout(scrollTimer); 
			return;
		}
		else if  (iMouseY>=fixNum(scrollBoxStyle.top) && iMouseY<=fixNum(scrollBoxStyle.bottom) ) {
			clearTimeout(scrollTimer); 
			return;
		}
		else {
			if ( iMouseY < iBoxOffset ) {
				iDiff = iBoxOffset - iMouseY;
				scrollStep = -1;
			}
			else {
				iDiff = iMouseY - iBoxOffset;
				scrollStep = 1;
			}
			scrollFreq = 20 - (Math.floor(iDiff / sbDivider) * 2);
		        
	        clearTimeout(scrollTimer); 
	        scrollObj.scrollTop = scrollObj.scrollTop + scrollStep;
	        doMoveBox();
	        scrollTimer=setTimeout("scrollDiv()", scrollFreq);
		}
     }

    function stopMe(){
      clearTimeout(scrollTimer); 
    }

    function handleDragMove(oDragObj){
    	var sId = oDragObj.id;
    	var iBoxHeight = fixNum(scrollBoxStyle.height);
        if ( sId == scrollBoxId ){
            if ( iMouseY >= sbTop && iMouseY <= (sbBot - iBoxHeight) ) {
	        	scrollBoxStyle.top = iMouseY - sbBoxYOffset;
	        	doScrollTo(iMouseY);
            }
        }
    }

    function handleDragStart(oDragObj){
        var sId = oDragObj.id;
        if ( sId == scrollBoxId ){
            oDragObj.className = sbBoxActive ;
        	return true;
        }
        else
            return false;
    }
    
    function handleDragEnd(oDragObj){
    	var sId = oDragObj.id;
        if ( scrollBoxId == sId ){
        	oDragObj.className = sbBoxNormal;
        }
    }
