// Parameter
var sense1 = 28; // Scroll zone 1 (in %)
var sense2 = 18; // Scroll zone 2 (in %)
var speed1 = 14; // Scrollspeed in Zone 1
var speed2 = 24; // Scrollspeed in Zone 2
var stime = 9; // Timer for Scrolling
 
// Internal Variables
var scrolling = false;
var scrollfast;
var richtung;
var y_mem = -1;
var myWin;
 
// Stop Scrolling
function stopp_scrolling()
{
scrolling = false;
//y_mem = -1;

}
 
// Scroll aktivate and initial
function start_scrolling(initial)
{
if(!scrolling)
return;
 
// Determine Position
var dy = (myWin.pageYOffset != null) ? myWin.pageYOffset : myWin.document.body.scrollTop;
if((y_mem != dy) && !initial)
return;
var dx = (myWin.pageXOffset != null) ? myWin.pageXOffset : myWin.document.body.scrollLeft;
dx += richtung * (scrollfast ? speed2 : speed1);
 
// Scroll
myWin.scrollTo(dx, dy);
y_mem = dy;
 
// Initial function again
setTimeout("start_scrolling(false)", stime);
}
 
// Analysis of Mouse Position
function zeige(e)
{
// Mouse Position and Document Data
var y = myWin.Event ? e.pageX : myWin.event.clientX;
if(myWin.Event)
y -= - (myWin.pageXOffset != null) ? myWin.pageXOffset : myWin.document.body.scrollTop;
var wh = myWin.innerWidth ? myWin.innerWidth : myWin.document.body.clientWidth;
var dh = myWin.document.height ? myWin.document.height : myWin.document.body.scrollHeight;
 
// Variables
var s1 = Math.round(wh * sense1 / 100);
var s2 = Math.round(wh * sense2 / 100);
var now_scroll;
 
// Determine necessity to Scroll
if((y < s1) || (y > (wh - s1)))
{
now_scroll = true;
richtung = (y < s1) ? -1 : 1;
scrollfast = ((y < s2) || (y > (wh - s2))) ? true : false;
}
else
{
now_scroll = false;
scrolling = false;
}
 
// Scroll Status changed?
if(now_scroll != scrolling)
{
y_mem = -1;
scrolling = now_scroll;
if(scrolling)
start_scrolling(true);
}
}
 
// Initiate Mouse Control
function init()
{
myWin = window;
 
if(myWin.Event)
myWin.document.captureEvents(Event.MOUSEMOVE);
 
myWin.document.onmousemove = zeige;
}
if(window.focus) window.focus();
document.onblur = stopp_scrolling();

// call mouswheel events cross browser

function hookEvent(element, eventName, callback)
{
  if(typeof(element) == "string")
    element = document.getElementById(element);
  if(element == null)
    return;
  if(element.addEventListener)
  {
    if(eventName == 'mousewheel')
      element.addEventListener('DOMMouseScroll', callback, false);  
    element.addEventListener(eventName, callback, false);
  }
  else if(element.attachEvent)
    element.attachEvent("on" + eventName, callback);
}

function unhookEvent(element, eventName, callback)
{
  if(typeof(element) == "string")
    element = document.getElementById(element);
  if(element == null)
    return;
  if(element.removeEventListener)
  {
    if(eventName == 'mousewheel')
      element.removeEventListener('DOMMouseScroll', callback, false);  
    element.removeEventListener(eventName, callback, false);
  }
  else if(element.detachEvent)
    element.detachEvent("on" + eventName, callback);
}
window.onload=init;
