/* Script by: www.jtricks.com
 * Version: 20071210
 * Latest version:
 * www.jtricks.com/javascript/navigation/floating.html
 */
var floatingMenuId = 'menu';
var floatingMenu;

function init_menu() {
	floatingMenu =
	{
    targetX: 0,
    targetY: floatMenu_startY,

    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.top = floatingMenu.nextY;
			}
			else
			{
					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();
	}
	
	if (document.layers)
			floatingMenu.addEvent(window, 'onload', floatingMenu.init);
	else
	{
			floatingMenu.init();
			floatingMenu.addEvent(window, 'onload',
					floatingMenu.initSecondary);
	}
}

if(window.attachEvent)
{
	window.attachEvent("onload", init_menu);
}
else
{
	if(typeof window.onload == "function")
	{
		var fOld = window.onload;
		window.onload = function(){ fOld(); init_menu(); };
	}
	else
	{
		window.onload = init_menu;
	}
}

