
   scrollBarWidth = 27
  scrollBarHeight = 29
 scrollBarYOffset = 13

 var scrollBarY1, scrollContentY1, scrollLength;

 function scrollMouseX(evt) {
  //return(event.x + document.body.scrollLeft);
  return ( ie ? (event.x + document.body.scrollLeft) : evt.pageX );
 }

 function scrollMouseY(evt) {
  //return (event.y + document.body.scrollTop);
  return ( ie ? (event.y + document.body.scrollTop) : evt.pageY );
 }

 function scrollLineBounds(x, y) {

  var yn =

     (
      ( x >= (getLayerX("scrollline", "content") + getLayerX("content")) )
        &&
      ( x <= (getLayerX("scrollline", "content") + getLayerX("content") + scrollBarWidth) )
        && 
      ( y >= (getLayerY("scrollline", "content") - scrollBarHeight) )
        &&
      ( y <= (getLayerY("scrollline", "content") + scrollLength + scrollBarHeight) )
     ) 

    ;
   return yn;
 }

 function scrollBarBounds(x, y) {

  var yn =

     (
      ( x >= (getLayerX("scrollbar", "content") + getLayerX("content")) )
        &&
      ( x <= (getLayerX("scrollbar", "content") + getLayerX("content") + scrollBarWidth) )
        && 
      ( y >= getLayerY("scrollbar", "content") )
        &&
      ( y <= (getLayerY("scrollbar", "content") + scrollBarHeight) )
     ) 
	 
    ;
   return yn;
 }

 function scrollBarTo(y) {
   y -= scrollBarYOffset;
   if (y > (scrollBarY1 + scrollLength - scrollBarHeight))
    y = scrollBarY1 + scrollLength - scrollBarHeight;

  else if (y < scrollBarY1)
    y = scrollBarY1;

   setLayerY("scrollbar", y, "content");

   setLayerY
   ( 
    "scrollcontent", 
    
    (scrollContentY1 
       - 
     Math.floor
     ( 
       (getLayerHeight("scrollcontent", "content") - (scrollLength / 2))
         *
       ((getLayerY("scrollbar", "content") - scrollBarY1) / scrollLength )
     )
    ),

    "content"
   );
 }

 function scrollMouseMoveEvt(evt) {

   scrollBarTo( scrollMouseY(evt) );

   return false;

 }

 function scrollMouseUpEvt(evt) {
 
  if (!ie)
    document.releaseEvents(Event.MOUSEMOVE | Event.MOUSEUP);

   document.onmousemove = null;
   document.onmouseup   = null;

   scrollBarTo( scrollMouseY(evt) );

   return false;
 }

 function scrollMouseDownEvt(evt) {
 	
  if (
      ( ie ? event.button : evt.which)
       ==
       1
     )
  {
   var mX = scrollMouseX(evt), 
       mY = scrollMouseY(evt) ;

   if ( scrollBarBounds( mX, mY ) ) {
   	
     document.onmousemove = scrollMouseMoveEvt;
     document.onmouseup   = scrollMouseUpEvt;


    if (!ie)  
      document.captureEvents(Event.MOUSEMOVE | Event.MOUSEUP);

     return false;

   } else if ( scrollLineBounds( mX, mY ) ) {
   
     scrollBarTo(mY);

     return false;
   }

 
  }

   return true;
 }

 function scroll_init(arg, arg2) {

   scrollContentY1 = arg; 
   scrollBarY1 = getLayerY("scrollbar", "content");
   scrollLength = arg2;
   
  if (getLayerHeight("scrollcontent", "content") <= scrollLength) {
    hideLayer("scrollbar", "content");
    return;
  }

   document.onmousedown = scrollMouseDownEvt;

  if (!ie)
    document.captureEvents(Event.MOUSEDOWN);

 }

