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