// JavaScript Document
//Scrollbox - stylized scrollbars
//Written By Ted Betzler
//Version 020508

var mousedowntracker=0;
var amountofscroll=5;
var startspeed=1;
var accelerator=25;
var scrollpercentage=0;
var offset = {x: 0, y: 0};
var scrolldir=0;
var boxheight=0;
//Amount of height to add or subtract for IE
var ieadjuster=-19;

function scrollpos(multiplier)
{
	
	if(mousedowntracker==1 && scrolldir!=0)
	{
		scrollboxobj=document.getElementById("scrollbox");
		adjustpos(scrolldir*amountofscroll*multiplier);
		setTimeout("scrollpos("+multiplier+")", startspeed*accelerator);
	}
	else
		accelerator=25;
}

function adjustpos(amount)
{
	scrollboxobj=document.getElementById("scrollbox");
	scrollboxobj.scrollTop+=amount;
	scrollpercentage=scrollboxobj.scrollTop/(scrollboxobj.scrollHeight - scrollboxobj.clientHeight);
	document.getElementById("topscroll").style.height=boxheight*scrollpercentage+'px';
	document.getElementById("bottomscroll").style.height=boxheight*(1-scrollpercentage)+'px';
	if(accelerator>1)
		accelerator--;
}

function wheelpos(e)
{
	e = e ? e : window.event;
	var normal = e.detail ? e.detail * -1 : e.wheelDelta / 40;
	adjustpos(-1*normal);
	cancelEvent(e);
}

function positionTracker()
{
	adjustpos(0);
	setTimeout(positionTracker, 100);
}

function setupscroller()
{
	var quickamount=Math.round((document.getElementById("scrollbox").scrollHeight/500));
	if(quickamount<1)
		quickamount=1;
	document.body.onmouseup= function() {mousedowntracker=0;};
	document.getElementById("scrollers").onselectstart=function() {return false;};
 	document.getElementById("uparrow").onmousedown= function() {mousedowntracker=1; scrolldir=-1; scrollpos(1);};
	document.getElementById("uparrow").onmouseout= function() {scrolldir=0;};
	document.getElementById("topscroll").onmousedown= function() {mousedowntracker=1;};
	document.getElementById("topscroll").onclick= function() {adjustpos(-200);};
	document.getElementById("topscroll").onmouseover= function() {scrolldir=-1; scrollpos(quickamount);};
	document.getElementById("topscroll").onmouseout= function() {scrolldir=0;};
	document.getElementById("midscroll").onmousedown= function() {mousedowntracker=1;};
	document.getElementById("bottomscroll").onmousedown= function() {mousedowntracker=1;};
	document.getElementById("bottomscroll").onclick= function() {adjustpos(200);};
	document.getElementById("bottomscroll").onmouseover= function() {scrolldir=1; scrollpos(quickamount);};
	document.getElementById("bottomscroll").onmouseout= function() {scrolldir=0;};
	document.getElementById("downarrow").onmousedown= function() {mousedowntracker=1; scrolldir=1; scrollpos(1);};
	document.getElementById("downarrow").onmouseout= function() {scrolldir=0;};
	boxheight=document.getElementById("scrollbox").clientHeight-document.getElementById("uparrow").clientHeight-document.getElementById("downarrow").clientHeight-document.getElementById("midscroll").clientHeight;
	//IE adjustment:
	if (navigator.appVersion.toLowerCase().indexOf('msie') != -1)
	{
		boxheight+=ieadjuster;
	}
	
	if(document.getElementById("scrollbox").clientHeight<document.getElementById("scrollbox").scrollHeight)
	{
		positionTracker();
	}
	else
		document.getElementById("scrollers").style.display="none";
		
	hookEvent('scrollwrapper', 'mousewheel', wheelpos);
}

/* Functions cancelEvent, hookEvent and unhookEvent from http://blog.paranoidferret.com/index.php/2007/10/31/javascript-tutorial-the-scroll-wheel/ */

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);
}

function cancelEvent(e)
{
  e = e ? e : window.event;
  if(e.stopPropagation)
    e.stopPropagation();
  if(e.preventDefault)
    e.preventDefault();
  e.cancelBubble = true;
  e.cancel = true;
  e.returnValue = false;
  return false;
}

