/************************************************
*            [     Scrollbar        ]           *
*                                               *
* Works with                                    *
*    - IE 4 or +                                *
*    - FireFox 1 or +                           *
*    - Netscape 2 or +                          *
*    - Safari (Mac Browsers)                    *
*                                               *
* ! Opera Error => Prompt.Message               *
*************************************************/

// Browser Identification ***********************
var  js10 = (document.images) ? false : true; // NN2.x
var  js11 = (document.images) && ((window.screen) ? false : true); // NN3.x
var  ie = ((document.all) && (window.offscreenBuffering)) ? true : false; // IE >= 4.x
var  isNS = ((document.captureEvents) && (!document.getElementById)) ? true : false; // NN4.x
var  mz = ((document.getElementById) && (!document.all) && (document.documentElement)) ? true : false; // NN6/MZ
var  op = ((document.getElementById) && (navigator.userAgent.indexOf('Opera') != -1)) ?true : false;
var  isMacIE = ( (navigator.userAgent.indexOf("IE 4") > -1) && (navigator.userAgent.indexOf("Mac")  > -1) );

// Init *****************************************
var y               = 0;        // Y Position of scrollContainerDiv
var weiter          = 0;        // Defines if the MouseButton is still down
// Config Vars **********************************
var offsetLeft      = 0;        // leftMenu.Left
var offsetTop       = 137;        // Offset indside Main Div
var offsetTimeout   = 25;        // scrollen(a_value).TimeOut
var offsetFactor    = 1;        // Special Events => offsetChange
var offsetClickY    = 333;        // BarClick offset to Object Dimension (Browser Wnd Top -> First avail. Click Pos)
var offsetSliderTop = 159;      // Offset ScrollBar.Top
var maxHeight       = 210;      // Scrollbar.height + OffsetTop
var scrollStep      = 3;        // Pixel Step / Move
var scrollMaxFactor = 6;        // If Bounderies are reached (scrollStep * scrollMaxFactor)

var dragMode = 0;
var dragLastPosY = 0;

//***********************************************

/************************************************
*                 [    Init()    ]              *
* Called by Event: body onLoad();               *
* > Init of Variables                         < *
*************************************************/
function ScrollBarInit(a_position)
{
    if (op) {
        alert("Opera not supported! Please use another Browser");
        return;
    }
    y = offsetTop;
    for (i = 0; i < (a_position/(2*scrollStep)); i++) {
       scrollen(-scrollStep);
       setTimeout("scrollen(-scrollStep)", 250);
    }
    ResetAll();
}

function ResetAll()
{
    dragMode = 0;
    weiter = 0;
    offsetFactor = 1;
}

function doStep(a_dir)
{
    weiter = 1;
    if (a_dir == 0)
        scrollen(scrollStep);
    else
        scrollen(-scrollStep);
}

function stopStep()
{
    weiter = 0;
}

/************************************************
*            [    scrollen( a_value )    ]      *
* Called By Event: OnMouseDown                  *
* > While MouseDown do scrollen( a_value );   < *
* > Repositions the <div>'s from the Content  < *
* > and the ScrollSlider                      < *
* > Content goes up -> Slider goes down       < *
*************************************************/
function scrollen(a_value)
{
    y += a_value;
    var slider_y = Math.abs((y-offsetTop) / 3) + offsetSliderTop;

    if (y < -maxHeight) {
        y = -(maxHeight-(scrollStep*scrollMaxFactor));
        offsetFactor = 3;
    }
    if (y > offsetTop) {
        y = offsetTop;
        offsetFactor = 3;
    }

    // Define Slider Top.Offset *****************
    // (ScrollSlider.Height * 2) == (Content.Height - (ScrollButton * 2))
    // ==> (Current Y Coord of Content / 2) + Start Position of the Slider
    slider_y = Math.abs((y-offsetTop) / 2) + offsetSliderTop;

    // Assign Values to Objects *****************
    if (ie) {
        leftMenu.style.pixelTop = y;
        scrollSlider.style.pixelTop = slider_y;
    }

    if (isNS) {
        document.navi_left.document.leftMenu.moveTo(offsetLeft, y);
        document.navi_left.document.scrollSlider.moveTo(offsetLeft, slider_y);
    }

    if (mz) {
        document.getElementById("leftMenu").style.top = y+"px";
        document.getElementById("scrollSlider").style.top = slider_y+"px";
    }
    // Define TimeOut between the next Event Call
    a=a_value;
    if ((weiter) && (y < (offsetTop+10)) && (offsetFactor != 0)) setTimeout("scrollen(a)", (offsetTimeout * offsetFactor));
}

/************************************************
*            [    barClick( event )    ]        *
* Called By Event: OnClick                      *
* > Catches Mouses Y Coord & determinates     < *
* > wheter to scroll (Up || Down)             < *
* > Value is delivered to function            < *
* > scrollen( a_value )                       < *
*************************************************/
function barClick(event)
{
    var clickPos  = event.pageY  - offsetClickY;
    var sliderPos = 0;
    sliderPos = document.getElementById("scrollSlider").style.top;
    if (sliderPos.replace("px", "") < clickPos)
        scrollen(-scrollStep);
    else
        scrollen(scrollStep);
}

function startDrag(event)
{
    dragLastPosY = event.clientY;
    dragMode = 1;
    offsetFactor = 0;
}

function doDrag(event)
{
    if (dragMode) {
        if (dragLastPosY > event.clientY)
            scrollen(scrollStep);
        else
            scrollen(-scrollStep);
        dragLastPosY = event.clientY;
    }
}


