// Must set 'fixedMenuId' as div tag ID.

// Debugging variable.
var DEBUG = false;

// Shortcut to reduce code size.
var d = document;

// Testing for existence of the defined "div" tag.
var testDiv = d.createElement("div");

var fixedMenu = { 
	hasInner: typeof(window.innerWidth) == 'number',
	hasElement: d.documentElement != null
		&& d.documentElement.clientWidth,
	menu: d.getElementById
		? d.getElementById(fixedMenuId)	: d.all
			? d.all[fixedMenuId] : d.layers[fixedMenuId]

}; // fixedMenu variable

if (DEBUG)
	alert('fixedMenu.menu=' + fixedMenu.menu + ', hasInner=' + fixedMenu.hasInner + ', hasElement=' + fixedMenu.hasElement);

fixedMenu.computeShifts = function() {
	fixedMenu.shiftX = fixedMenu.hasInner	
		? pageXOffset : fixedMenu.hasElement
			? d.documentElement.scrollLeft : d.body.scrollLeft;	
	if (fixedMenu.targetLeft > 0)	
		fixedMenu.shiftX += fixedMenu.targetLeft;	

	// Computing width of browser window.
	else {	
		fixedMenu.shiftX +=	
			(fixedMenu.hasElement	
				? d.documentElement.clientWidth	 
				: fixedMenu.hasInner	 
					? window.innerWidth - 20
					: d.body.clientWidth)
			 - fixedMenu.targetRight
			 - fixedMenu.menu.offsetWidth;	
	} // else
	
	// Computing height of browser window.
	fixedMenu.shiftY = fixedMenu.hasInner	
		? pageYOffset	
		: fixedMenu.hasElement	 
			? d.documentElement.scrollTop	 
			: d.body.scrollTop;	 
	if (fixedMenu.targetTop > 0)
		fixedMenu.shiftY += fixedMenu.targetTop;
	else {	
		fixedMenu.shiftY +=	
		  (fixedMenu.hasElement	
		  ? d.documentElement.clientHeight	
		  : fixedMenu.hasInner	
				? window.innerHeight - 20
				: d.body.clientHeight)	
		  - fixedMenu.targetBottom	
		  - fixedMenu.menu.offsetHeight;	 
	} // else	
}; // fixedMenu.computeShifts

fixedMenu.moveMenu = function() {	
	fixedMenu.computeShifts();

	if (fixedMenu.currentX != fixedMenu.shiftX ||
		fixedMenu.currentY != fixedMenu.shiftY) {	
		fixedMenu.currentX = fixedMenu.shiftX;	 
		fixedMenu.currentY = fixedMenu.shiftY;	 
	
		if (d.layers) {	
			fixedMenu.menu.left = fixedMenu.currentX;	
			fixedMenu.menu.top = fixedMenu.currentY;
		 } else {	
			fixedMenu.menu.style.left = fixedMenu.currentX + 'px';	 
			fixedMenu.menu.style.top = fixedMenu.currentY + 'px';	
		 }	
	}
	
	fixedMenu.menu.style.right = '';
	fixedMenu.menu.style.bottom = '';
}; // fixedMenu.moveMenu
	
fixedMenu.floatMenu = function() {	
	fixedMenu.moveMenu();	
	setTimeout('fixedMenu.floatMenu()', 100);
}; // fixedMenu.floatMenu

	// addEvent designed by Aaron Moore.
	fixedMenu.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 = 0; i < element[listener + '_num']; i++)
				if (element[listener + i](e) === false)	 
					r = false;	 
				return r;	
			}; // listener function
	}
	
	 // 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']++;	
}; // addEvent function

fixedMenu.supportsFixed = function() {
	testDiv.id = "testingPositionFixed";
	testDiv.style.position = "fixed";
	testDiv.style.top = "0px";
	testDiv.style.right = "0px";
	document.body.appendChild(testDiv);
	var offset = 1;
	if (typeof testDiv.offsetTop == "number" && testDiv.offsetTop != null &&
		testDiv.offsetTop != "undefined")
			offset = parseInt(testDiv.offsetTop);
	if (offset == 0)
			return true;
	return false;
}; // fixedMenu.supportsFixed

fixedMenu.supportsFixed = function() {	
	var offset = 1;

	if (typeof testDiv.offsetTop == "number" &&
		testDiv.offsetTop != null && 
		testDiv.offsetTop != "undefined")
			offset = parseInt(testDiv.offsetTop);
	if (offset == 0)
		return true;
	return false;
}; // fixedMenu.supportsFixed

fixedMenu.init = function() {
	if (fixedMenu.supportsFixed())	
		fixedMenu.menu.style.position = "fixed";
	else {
		var ob = d.layers ? fixedMenu.menu : fixedMenu.menu.style;
		fixedMenu.targetLeft = parseInt(ob.left);
		fixedMenu.targetTop = parseInt(ob.top);
		fixedMenu.targetRight = parseInt(ob.right);
		fixedMenu.targetBottom = parseInt(ob.bottom);

		// Check if layers are active, if so set style that way.
		if (d.layers) {
			menu.left = 0;
			menu.top = 0;
		} // layers

		fixedMenu.addEvent(window, 'onscroll', fixedMenu.moveMenu);
		fixedMenu.floatMenu();
	} // else
}; // fixedMenu.init

fixedMenu.addEvent(window, 'onload', fixedMenu.init);
