/* ---------------------------------- */
/* Custom scrollbar v1.3              */
/* (c) 2006-2007 www.artifex-media.de */
/* ---------------------------------- */

var _scrollTarget = 0;
var _scrollEvent = 0;
var _scrollObjs=new Array();

function _getMouse(e)
{
    var posx = 0;
	var posy = 0;
	if (!e) var e = window.event;
	if (e.pageX || e.pageY)
	{
		posx = e.pageX;
		posy = e.pageY;
	}
	else if (e.clientX || e.clientY)
	{
		posx = e.clientX + document.body.scrollLeft;
		posy = e.clientY + document.body.scrollTop;
	}

    return {x:posx,y:posy};
}

function _getScrollAreas()
{
	var tags = document.getElementsByTagName("scroll");

    var scroll = Array();

    for (var i = 0; i < tags.length; i++)
    {
    	var tagid = tags[i].getAttribute("id");

        // Tag ID exists?
        var idpos = -1;
        for (var j = 0; j < scroll.length; j++)
        {
        	if (scroll[j].id == tagid) // Yes.
            {
        		idpos = j;
                break;
            }
        }

        if (idpos == -1) // Tag ID not found, add a new one
        {
            idpos = scroll.length;
            scroll[idpos] = {id:tagid};
        }

        // Get the information of the current tag
        scroll[idpos].DOM = tags[i];
        scroll[idpos].DOM.style.visibility = "hidden"; // Hide it in Mozilla

        if (tags[i].getAttribute("range"))
        {
        	if (tags[i].getAttribute("range").toLowerCase() == "auto")
        		scroll[idpos].range = -1;

        	else
        		scroll[idpos].range = parseInt(tags[i].getAttribute("range"));
        }
        else
        	scroll[idpos].range = -1;

        if (tags[i].getAttribute("wheelspeed"))
        	sg_wheel = parseInt(tags[i].getAttribute("wheelspeed"));
        else sg_wheel= 2;

        if (tags[i].getAttribute("scrollspeed"))
        	sg_scroll = parseInt(tags[i].getAttribute("scrollspeed"));
        else sg_scroll= 10;

        var div = document.getElementsByTagName("DIV");

		for  (var j = 0; j < div.length; j++)
        {
        	var scrollid = div[j].getAttribute("scroll");
            if (scrollid == tagid)
            {
            	var type = div[j].getAttribute("type").toLowerCase();

                switch(type)
                {
                	case "content":
                    	scroll[idpos].content = {DOM:div[j], height:0, offsetY:0};
                    	break;

                    case "buttondown":
                    	scroll[idpos].buttonDown = {DOM:div[j]};
                    	break;

                    case "buttonup":
                    	scroll[idpos].buttonUp = {DOM:div[j]};
                    	break;

                    case "slider":
                    	scroll[idpos].buttonSlider = {DOM:div[j]};
                    	break;
                }
            }
        }



        scroll[idpos].node = Array();
      //  scroll[idpos].node[0] = {x:0,y:0};
        scroll[idpos].currentNode = 0;

        var node = document.getElementsByTagName("scrollnode");
        for (var j = 0; j < node.length; j++)
        {
        	var scrollid = node[j].getAttribute("scroll");
            if (scrollid == tagid)
            {
            	var nb = scroll[idpos].node.length;
            	scroll[idpos].node[nb] = {x:parseInt(node[j].getAttribute("x")), y:parseInt(node[j].getAttribute("y")) };
            }
        }

        // Check if all needed elements were found
	  	if (!scroll[idpos].content ||
        	!scroll[idpos].buttonDown ||
            !scroll[idpos].buttonUp )
        {
        	   document.write("Warning: Missing elements in scrollset '"+scroll[idpos].id+"'!");
            return false;
        }

        if (scroll[idpos].buttonSlider)
        {
        	   scroll[idpos].hasSlider = true;
            scroll[idpos].buttonSlider.DOM.style.visibility="visible";
            scroll[idpos].buttonSlider.DOM.style.top = scroll[idpos].node[0].y;
        }

        else
        	scroll[idpos].hasSlider = false;

        scroll[idpos].buttonUp.DOM.style.visibility="visible";
        scroll[idpos].buttonDown.DOM.style.visibility="visible";

        if (scroll[idpos].DOM.getAttribute("delay"))
        {
        	scroll[idpos].delay = parseInt(scroll[idpos].DOM.getAttribute("delay"));
        }
		else
        	scroll[idpos].delay = 100;

        scroll[idpos].currentStep = 0; // For scrolling
        scroll[idpos].slideOffX = 0;
        scroll[idpos].slideOffY = 0;

        // Create a page
        var parent = scroll[idpos].DOM.parentNode;
        var page = document.createElement("div");

        page.style.position = scroll[idpos].DOM.style.position;
        page.style.width = scroll[idpos].DOM.style.width;
        page.style.height = scroll[idpos].DOM.style.height;
        page.style.left = scroll[idpos].DOM.style.left;
        page.style.top = scroll[idpos].DOM.style.top;
        page.style.background = scroll[idpos].DOM.style.background;
        page.style.border = scroll[idpos].DOM.style.border;

        page.style.overflow = "hidden"; // Must be set

	    var content  = scroll[idpos].content.DOM;
        scroll[idpos].content.DOM.style.visibility="visible";
        scroll[idpos].content.DOM = page.appendChild(content);
        scroll[idpos].page = {DOM:page};

        parent.insertBefore(page, scroll[idpos].DOM);

        // Do we really need scrolling?
        scroll[idpos].content.height = scroll[idpos].content.DOM.offsetHeight;
        scroll[idpos].height = parseInt(scroll[idpos].DOM.style.height);

        if (scroll[idpos].content.height > scroll[idpos].height) // We do.
        	scroll[idpos].scrolling = true;

        else  // No we don't
        {
            scroll[idpos].scrolling = false;

            scroll[idpos].buttonUp.DOM.style.visibility = "hidden";
            scroll[idpos].buttonDown.DOM.style.visibility = "hidden";

            if (scroll[idpos].hasSlider)
            {
                scroll[idpos].buttonSlider.DOM.style.visibility = "hidden";
            }
        }

        scroll[idpos].settings = {wheelSpeed:sg_wheel,scrollSpeed:sg_scroll};
    }

    return scroll;
}

function _wheelScroll(ev)
{
    var amount = (event.wheelDelta/10)*_scrollTarget.settings.wheelSpeed;
    _scrollTarget.content.offsetY += amount;

    _scrollEvent = 1;
    _scrollTarget.direction = 0;
    _softScroll();
    _scrollEvent = 0;

}

function _softScroll()
{
	if (_scrollEvent == 0)
    {
    	if (!_scrollTarget.firstScroll)
        {
        	_scrollTarget.firstScroll = true;
            window.setTimeout("_softScroll()", _scrollTarget.delay*3);
        }

        else
       		_scrollEvent = window.setInterval("_softScroll()", _scrollTarget.delay);
    }

	if (_scrollTarget == 0)
    {
    	window.clearInterval(_scrollEvent);
        _scrollEvent = 0;
        _scrollTarget.firstScroll = false;
        return;
    }

    if (_scrollTarget.wait)
    	return;

    _scrollTarget.content.offsetY += _scrollTarget.settings.scrollSpeed * _scrollTarget.direction;
    if (_scrollTarget.content.offsetY > 0)
    	_scrollTarget.content.offsetY = 0;
    else if (_scrollTarget.content.offsetY < -(_scrollTarget.content.height-(_scrollTarget.height/2)))
    	_scrollTarget.content.offsetY = -(_scrollTarget.content.height-(_scrollTarget.height/2));

    _scrollTarget.content.DOM.style.marginTop = _scrollTarget.content.offsetY + "px";

    var amount = _scrollTarget.content.offsetY / (_scrollTarget.content.height-(_scrollTarget.height/2));
	var maxY = _scrollTarget.node[1].y;
    var minY = _scrollTarget.node[0].y;
    var shY = maxY - minY;

    _scrollTarget.buttonSlider.DOM.style.top = minY  +Math.round(-amount*shY) + "px";


}

function _slideScroll(ev)
{
	var maxY = _scrollTarget.node[1].y;
    var minY = _scrollTarget.node[0].y;
	_scrollTarget.buttonSlider.DOM.style.top = (_getMouse(ev).y - _scrollTarget.slideMouseOffset) +"px";

    if (parseInt(_scrollTarget.buttonSlider.DOM.style.top) > maxY)
    {
        _scrollTarget.buttonSlider.DOM.style.top = maxY + "px";
    }

    if (parseInt(_scrollTarget.buttonSlider.DOM.style.top) < minY)
    {
        _scrollTarget.buttonSlider.DOM.style.top = minY + "px";
    }


    var curY = parseInt(_scrollTarget.buttonSlider.DOM.style.top)-minY;
    var height = maxY - minY;
    var amount = curY/height;

    var stepsize = 2;
    var steps = (_scrollTarget.content.height-(_scrollTarget.height/2))  / stepsize;
    var curstep = Math.round(amount * steps);



    _scrollTarget.slideOffset = (parseInt(_scrollTarget.buttonSlider.DOM.style.top)-_scrollTarget.sliderInitialPos.y);

    _scrollTarget.content.offsetY = -(curstep*stepsize);
    _scrollTarget.content.DOM.style.marginTop = _scrollTarget.content.offsetY + "px";

}

function _setScrollEvents(scroll)
{
	if (!scroll.scrolling)
    	return;

    //scroll.page.DOM.onmousewheel = function(ev)
    document.onmousewheel=function(ev)
    {
    	_scrollTarget = scroll;
        _wheelScroll(ev);

    }

    scroll.buttonSlider.DOM.onmousedown = function(ev)
    {
    	_scrollTarget = scroll;
        _scrollTarget.slideScroll = true;
        _scrollTarget.slideMouseOffset = _getMouse(ev).y - parseInt(_scrollTarget.buttonSlider.DOM.style.top);
        _scrollTarget.sliderInitialPos = {x:parseInt(_scrollTarget.buttonSlider.DOM.style.left),y:parseInt(_scrollTarget.buttonSlider.DOM.style.top)};
        _scrollTarget.slideOffset = 0;
    }

    scroll.buttonDown.DOM.onmousedown = function(ev)
    {
    	scroll.direction = -1;
        _scrollTarget = scroll;
        _softScroll();
    }

    scroll.buttonDown.DOM.onmouseover = function(ev)
    {
    	if (_scrollTarget != 0 && _scrollTarget.direction == -1)
        {
        	_scrollTarget.wait = false;
        }
    }

    scroll.buttonDown.DOM.onmouseout = function(ev)
    {
    	if (_scrollTarget)
        	if (_scrollTarget.direction == -1)
        		_scrollTarget.wait = true;
    }

    scroll.buttonUp.DOM.onmousedown = function(ev)
    {
    	scroll.direction = 1;
        _scrollTarget = scroll;
        _softScroll();
    }

    scroll.buttonUp.DOM.onmouseover = function(ev)
    {
    	if (_scrollTarget != 0 && _scrollTarget.direction == 1)
        {
        	_scrollTarget.wait = false;
        }
    }

    scroll.buttonUp.DOM.onmouseout = function(ev)
    {
        if (_scrollTarget)
        	if (_scrollTarget.direction == 1)
        		_scrollTarget.wait = true;
    }
}

function _setGlobalScrollEvents()
{
	document.onmouseup = function(ev)
    {
        _scrollTarget.wait = false;
    	_scrollTarget.firstScroll = false;
        _scrollTarget.slideScroll = false;
    	_scrollTarget = 0;
        window.clearInterval(_scrollEvent);
        _scrollEvent = 0;
    }

    document.onmousemove = function(ev)
    {
    	if (_scrollTarget == 0)
        	return;

        if (_scrollTarget.slideScroll)
        	_slideScroll(ev);
    }
}

function initScrolling()
{
   _scrollObjs = _getScrollAreas();

   for (var i = 0; i < _scrollObjs.length; i++)
   {
    		_setScrollEvents(_scrollObjs[i]);
   }

   _setGlobalScrollEvents();

}

function scrollable(id)
{
	for(var i=0;i<_scrollObjs.length;i++)
     {
     	if(_scrollObjs[i].id==id)
         	return _scrollObjs[i].scrolling;
     }
     return false;
}
