var floatingMenu3Id = 'float_slow';
var floatingMenu3 =
{
    targetX: 0,
    targetY: -10,

    hasInner: typeof(window.innerWidth) == 'number',
    hasElement: typeof(document.documentElement) == 'object'
        && typeof(document.documentElement.clientWidth) == 'number',

    menu:
        document.getElementById
        ? document.getElementById(floatingMenu3Id)
        : document.all
          ? document.all[floatingMenu3Id]
          : document.layers[floatingMenu3Id]
};

floatingMenu3.move = function ()
{
    floatingMenu3.menu.style.left = floatingMenu3.nextX + 'px';
    floatingMenu3.menu.style.top = floatingMenu3.nextY + 'px';
}

floatingMenu3.computeShifts = function ()
{
    var de = document.documentElement;

    floatingMenu3.shiftX =  
        floatingMenu3.hasInner  
        ? pageXOffset  
        : floatingMenu3.hasElement  
          ? de.scrollLeft  
          : document.body.scrollLeft;  
    if (floatingMenu3.targetX < 0)
    {
        floatingMenu3.shiftX +=
            floatingMenu3.hasElement
            ? de.clientWidth
            : document.body.clientWidth;
    }

    floatingMenu3.shiftY = 
        floatingMenu3.hasInner
        ? pageYOffset
        : floatingMenu3.hasElement
          ? de.scrollTop
          : document.body.scrollTop;
    if (floatingMenu3.targetY < 0)
    {
        if (floatingMenu3.hasElement && floatingMenu3.hasInner)
        {
            // Handle Opera 8 problems
            floatingMenu3.shiftY +=
                de.clientHeight > window.innerHeight
                ? window.innerHeight
                : de.clientHeight
        }
        else
        {
            floatingMenu3.shiftY +=
                floatingMenu3.hasElement
                ? de.clientHeight
                : document.body.clientHeight;
        }
    }
}

floatingMenu3.calculateCornerX = function()
{
    if (floatingMenu3.targetX != 'center')
        return floatingMenu3.shiftX + floatingMenu3.targetX;

    var width = parseInt(floatingMenu3.menu.offsetWidth);

    var cornerX =
        floatingMenu3.hasElement
        ? (floatingMenu3.hasInner
           ? pageXOffset
           : document.documentElement.scrollLeft) + 
          (document.documentElement.clientWidth - width)/2
        : document.body.scrollLeft + 
          (document.body.clientWidth - width)/2;
    return cornerX;
};

floatingMenu3.calculateCornerY = function()
{
    if (floatingMenu3.targetY != 'center')
        return floatingMenu3.shiftY + floatingMenu3.targetY;

    var height = parseInt(floatingMenu3.menu.offsetHeight);

    // Handle Opera 8 problems
    var clientHeight = 
        floatingMenu3.hasElement && floatingMenu3.hasInner
        && document.documentElement.clientHeight 
            > window.innerHeight
        ? window.innerHeight
        : document.documentElement.clientHeight

    var cornerY =
        floatingMenu3.hasElement
        ? (floatingMenu3.hasInner  
           ? pageYOffset
           : document.documentElement.scrollTop) + 
          (clientHeight - height)/2
        : document.body.scrollTop + 
          (document.body.clientHeight - height)/2;
    return cornerY;
};

floatingMenu3.doFloat = function()
{
    var stepX, stepY;

    floatingMenu3.computeShifts();

    var cornerX = floatingMenu3.calculateCornerX();

    var stepX = (cornerX - floatingMenu3.nextX) * .01;
    if (Math.abs(stepX) < .01)
    {
        stepX = cornerX - floatingMenu3.nextX;
    }

    var cornerY = floatingMenu3.calculateCornerY();

    var stepY = (cornerY - floatingMenu3.nextY) * .01;
    if (Math.abs(stepY) < .01)
    {
        stepY = cornerY - floatingMenu3.nextY;
    }

    if (Math.abs(stepX) > 0 ||
        Math.abs(stepY) > 0)
    {
        floatingMenu3.nextX += stepX;
        floatingMenu3.nextY += stepY;
        floatingMenu3.move();
    }

    setTimeout('floatingMenu3.doFloat()', 20);
};

// addEvent designed by Aaron Moore
floatingMenu3.addEvent = function(element, listener, handler)
{
    if(typeof element[listener] != 'function' || 
       typeof element[listener + '_num'] == 'undefined')
    {
        element[listener + '_num'] = 0;
        if (typeof element[listener] == 'function')
        {
            element[listener + 0] = element[listener];
            element[listener + '_num']++;
        }
        element[listener] = function(e)
        {
            var r = true;
            e = (e) ? e : window.event;
            for(var i = element[listener + '_num'] -1; i >= 0; i--)
            {
                if(element[listener + i](e) == false)
                    r = false;
            }
            return r;
        }
    }

    //if handler is not already stored, assign it
    for(var i = 0; i < element[listener + '_num']; i++)
        if(element[listener + i] == handler)
            return;
    element[listener + element[listener + '_num']] = handler;
    element[listener + '_num']++;
};

floatingMenu3.init = function()
{
    floatingMenu3.initSecondary();
    floatingMenu3.doFloat();
};

// Some browsers init scrollbars only after
// full document load.
floatingMenu3.initSecondary = function()
{
    floatingMenu3.computeShifts();
    floatingMenu3.nextX = floatingMenu3.calculateCornerX();
    floatingMenu3.nextY = floatingMenu3.calculateCornerY();
    floatingMenu3.move();
}

if (document.layers)
    floatingMenu3.addEvent(window, 'onload', floatingMenu3.init);
else
{
    floatingMenu3.init();
    floatingMenu3.addEvent(window, 'onload',
        floatingMenu3.initSecondary);
}
