function scroll(event) {
  var scroller = document.getElementById("scroller")
  var outerscroller = document.getElementById("outerscroller")
  var content = document.getElementById("scrollcontent")
  if (!event) {
    var event = window.event;
  }
  if (event.preventDefault)
    event.preventDefault();    
  var grabOffset = event.clientY - scroller.offsetTop

  document.onmousemove=function(event) {
    if (!event) {
      var event = window.event;
    }
    if (event.preventDefault)
      event.preventDefault();    

    // scroll grip positioning
    var scrollerpos = event.clientY-grabOffset;
    var scrollermax = outerscroller.clientHeight - scroller.clientHeight;
    if (scrollerpos<0) {
      scrollerpos = 0;
    } else if (scrollerpos>scrollermax) {
      scrollerpos = scrollermax;
    }
    scroller.style.top=scrollerpos+"px"
    var scrollratio = scrollerpos/scrollermax;

    // actual content scroll
    content.scrollTop=(content.scrollHeight-content.clientHeight)*scrollratio
    if (content.scrollTop<0) {
      content.scrollTop = 0;
    }
  }
  document.onmouseup=function() {
    document.onmousemove=null
  }
};

function scrollby(pages, lines) {
  var scroller = document.getElementById("scroller")
  var outerscroller = document.getElementById("outerscroller")
  var content = document.getElementById("scrollcontent")
  
  var scrollamount = pages*content.clientHeight + lines*15;
  var contentPos = content.scrollTop
  var contentMax = content.scrollHeight-content.clientHeight
  
  contentPos += scrollamount;
  if (contentPos<0) {
    contentPos = 0
  } else if (contentPos>contentMax) {
    contentPos = contentMax
  }
  content.scrollTop = contentPos
  var scrollratio = contentPos/contentMax;
  scroller.style.top=(outerscroller.clientHeight - scroller.clientHeight)*scrollratio + "px"
}

function outerscroll(event) {
  if (document.onmousemove) {
	  return;
  }
  var scroller = document.getElementById("scroller")
  var outerscroller = document.getElementById("outerscroller")
  var content = document.getElementById("scrollcontent")
  if (!event) {
    var event = window.event;
  }
  if (event.preventDefault)
    event.preventDefault();    

  var clickPos = event.offsetY
  var scrollerTop = scroller.offsetTop
  var scrollerBot = scroller.offsetTop+scroller.offsetHeight
  var scrolldir=0;
  if (clickPos<scrollerTop) {
    scrolldir = -1
  } else if (clickPos>scrollerBot) {
    scrolldir = +1
  }

  if (scrolldir!=0) {
    scrollby(scrolldir, 0);
  }
}
  
/** This is high-level function.
 * It must react to delta being more/less than zero.
 */
function handlewheel(delta) {
  scrollby(0, -delta);
}

/** 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.
                 */
// but not in opera 10
//                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)
                handlewheel(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;
}

/** Initialization code. 
 * If you use your own event management code, change it as required.
 */
if (window.addEventListener)
        /** DOMMouseScroll is for mozilla. */
        window.addEventListener('DOMMouseScroll', wheel, false);
/** IE/Opera. */
window.onmousewheel = document.onmousewheel = wheel;


