/* Script by: www.jtricks.com
 * Version: 20071017
 * Latest version:
 * www.jtricks.com/javascript/navigation/floating.html
 */
var floatingMenuId = 'floatdiv';
var floatingMenu =
{
    targetX: 0,
    targetY: 0,

    hasInner: typeof(window.innerWidth) == 'number',
    hasElement: typeof(document.documentElement) == 'object'
	&& typeof(document.documentElement.clientWidth) == 'number',

    menu:
	document.getElementById
	? document.getElementById(floatingMenuId)
	: document.all
	  ? document.all[floatingMenuId]
	  : document.layers[floatingMenuId]
};

floatingMenu.move = function ()
{
    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)
    {
	floatingMenu.shiftX +=
	    floatingMenu.hasElement
	    ? de.clientWidth
	    : 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
		? de.clientHeight
		: document.body.clientHeight;
	}
    }
}

floatingMenu.calculateCornerX = function()
{
    if (floatingMenu.targetX != 'center')
	return floatingMenu.shiftX + floatingMenu.targetX;

    var width = parseInt(floatingMenu.menu.offsetWidth);

    var cornerX =
	floatingMenu.hasElement
	? (floatingMenu.hasInner
	   ? pageXOffset
	   : document.documentElement.scrollLeft) +
	  (document.documentElement.clientWidth - width)/2
	: document.body.scrollLeft +
	  (document.body.clientWidth - width)/2;
    return cornerX;
};

floatingMenu.calculateCornerY = function()
{
    if (floatingMenu.targetY != 'center')
	return floatingMenu.shiftY + floatingMenu.targetY;

    var height = parseInt(floatingMenu.menu.offsetHeight);

    // Handle Opera 8 problems
    var clientHeight =
	floatingMenu.hasElement && floatingMenu.hasInner
	&& document.documentElement.clientHeight
	    > window.innerHeight
	? window.innerHeight
	: document.documentElement.clientHeight

    var cornerY =
	floatingMenu.hasElement
	? (floatingMenu.hasInner
	   ? pageYOffset
	   : document.documentElement.scrollTop) +
	  (clientHeight - height)/2
	: document.body.scrollTop +
	  (document.body.clientHeight - height)/2;
    return cornerY;
};

floatingMenu.doFloat = function()
{
    var stepX, stepY;

    floatingMenu.computeShifts();

    var cornerX = floatingMenu.calculateCornerX();

    var stepX = (cornerX - floatingMenu.nextX) * .07;
    if (Math.abs(stepX) < .5)
    {
	stepX = cornerX - floatingMenu.nextX;
    }

    var cornerY = floatingMenu.calculateCornerY();

    var stepY = (cornerY - floatingMenu.nextY) * .07;
    if (Math.abs(stepY) < .5)
    {
	stepY = cornerY - 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.calculateCornerX();
    floatingMenu.nextY = floatingMenu.calculateCornerY();
    floatingMenu.move();
}

if (document.layers)
    floatingMenu.addEvent(window, 'onload', floatingMenu.init);
else
{
    floatingMenu.init();
    floatingMenu.addEvent(window, 'onload',
	floatingMenu.initSecondary);
}