
/* Script by: www.jtricks.com
 * Version: 20071210
 * Latest version:
 * www.jtricks.com/javascript/navigation/floating.html
 */
var floatingSSLId = 'ssldiv';

var floatingSSL =
{
    targetX: 15,
    targetY:  -60,

    hasInner: typeof(window.innerWidth) == 'number',
    hasElement: document.documentElement
        && document.documentElement.clientWidth,

    menu:
        document.getElementById
        ? document.getElementById(floatingSSLId)
        : document.all
          ? document.all[floatingSSLId]
          : document.layers[floatingSSLId]
};

floatingSSL.move = function ()
{
    if (document.layers)
    {
        floatingSSL.menu.left = floatingSSL.nextX;
        floatingSSL.menu.top = floatingSSL.nextY;
    }
    else
    {
        floatingSSL.menu.style.left = floatingSSL.nextX + 'px';
        floatingSSL.menu.style.top = floatingSSL.nextY + 'px';
    }
}

floatingSSL.computeShifts = function ()
{
    var de = document.documentElement;

    floatingSSL.shiftX =
        floatingSSL.hasInner
        ? pageXOffset
        : floatingSSL.hasElement
          ? de.scrollLeft
          : document.body.scrollLeft;
    if (floatingSSL.targetX < 0)
    {
        if (floatingSSL.hasElement && floatingSSL.hasInner)
        {
            // Handle Opera 8 problems
            floatingSSL.shiftX +=
                de.clientWidth > window.innerWidth
                ? window.innerWidth
                : de.clientWidth
        }
        else
        {
            floatingSSL.shiftX +=
                floatingSSL.hasElement
                ? de.clientWidth
                : floatingSSL.hasInner
                  ? window.innerWidth
                  : document.body.clientWidth;
        }
    }

    floatingSSL.shiftY = 
        floatingSSL.hasInner
        ? pageYOffset
        : floatingSSL.hasElement
          ? de.scrollTop
          : document.body.scrollTop;
    if (floatingSSL.targetY < 0)
    {
        if (floatingSSL.hasElement && floatingSSL.hasInner)
        {
            // Handle Opera 8 problems
            floatingSSL.shiftY +=
                de.clientHeight > window.innerHeight
                ? window.innerHeight
                : de.clientHeight
        }
        else
        {
            floatingSSL.shiftY +=
                floatingSSL.hasElement
                ? document.documentElement.clientHeight
                : floatingSSL.hasInner
                  ? window.innerHeight
                  : document.body.clientHeight;
        }
    }
}

floatingSSL.doFloat = function()
{
    var stepX, stepY;

    floatingSSL.computeShifts();

    stepX = (floatingSSL.shiftX + 
        floatingSSL.targetX - floatingSSL.nextX) * .07;
    if (Math.abs(stepX) < .5)
    {
        stepX = floatingSSL.shiftX +
            floatingSSL.targetX - floatingSSL.nextX;
    }

    stepY = (floatingSSL.shiftY + 
        floatingSSL.targetY - floatingSSL.nextY) * .07;
    if (Math.abs(stepY) < .5)
    {
        stepY = floatingSSL.shiftY + 
            floatingSSL.targetY - floatingSSL.nextY;
    }

    if (Math.abs(stepX) > 0 ||
        Math.abs(stepY) > 0)
    {
        floatingSSL.nextX += stepX;
        floatingSSL.nextY += stepY;
        floatingSSL.move();
    }

    setTimeout('floatingSSL.doFloat()', 20);
};

// addEvent designed by Aaron Moore
floatingSSL.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']++;
};

floatingSSL.init = function()
{
    floatingSSL.initSecondary();
    floatingSSL.doFloat();
};

// Some browsers init scrollbars only after
// full document load.
floatingSSL.initSecondary = function()
{
    floatingSSL.computeShifts();
    floatingSSL.nextX = floatingSSL.shiftX +
        floatingSSL.targetX;
    floatingSSL.nextY = floatingSSL.shiftY +
        floatingSSL.targetY;
    floatingSSL.move();
}

if (document.layers)
    floatingSSL.addEvent(window, 'onload', floatingSSL.init);
else
{
    floatingSSL.init();
    floatingSSL.addEvent(window, 'onload',
        floatingSSL.initSecondary);
}