	
	///////////////////////////////////////////////
	// GENERATE MENU
	//////////////////////////////////////////////

		// GLOBAL MENU ITEMS
		var aMenuItems = new Array();
		
		var iMenuClearTimeout = null;
		
		function menuItem(sID, sMenuItemLabel, sHref, sSubMenuTargetLayer)
		{
			// Add ID to global menu items array
			aMenuItems[aMenuItems.length] = sID;
			
			// OBJECT VARIABLES
			this.id = sID;
			this.sMenuItemLabel = sMenuItemLabel;
			this.sHref = sHref;
			this.sSubMenuTargetLayer = sSubMenuTargetLayer;
			
			this.aSubMenuItems = new Array();
			
			// OBJECT METHODS
			this.active = active;
			this.inactive = inactive;
		}
		
		function subMenuItem(sParentMenuItemId, sSubMenuItemId, sText, sHref)
		{
			eval(sParentMenuItemId +'.aSubMenuItems').push(sSubMenuItemId);
			
			this.id = sSubMenuItemId;
			this.parentId = sParentMenuItemId;
			this.sText = sText;
			this.sHref = sHref;
			
			this.aSubMenuItems = new Array();
			
			this.active = active;
			this.inactive = inactive;
		}
		
		function drawMenu()
		{
			//
			//	Write the parent menu items
			//
			sMainLinks = '';
			
			for (iCounter = 0; iCounter < aMenuItems.length; iCounter++)
			{
				// Create the default menu item left variable
				// iParentMenuItemMargin_left is set up from the 
				// menu setup
				var iMenuItemLeft = iParentMenuItemMargin_left;
				
				// Position menu item
				if (iCounter != 0) iMenuItemLeft += (iCounter * iMenuItemWidth) + (iCounter * iParentMenuItemMargin_right);
				else iMenuItemLeft = iParentMenuItemMargin_left;
				
				// Set menu item inline style
				var sStyle = '';

				sStyle += 'position:absolute;';
				sStyle += 'top:'+ iParentMenuItemMargin_top +'px;';
				sStyle += 'left:'+ (iMenuItemLeft + iParentMenuOffsetX) +'px;';
				sStyle += 'width:'+ iMenuItemWidth +'px;';
				sStyle += 'height:'+ iMenuItemHeight +'px;';
				sStyle += 'background-color:'+ sParentInactiveBackgroundColor +';';
				sStyle += 'color:'+ sParentInactiveColor +';';
				
				if (bUseParentMenuItemBorders)
				{
					sStyle += 'border-width:'+ sParentInactiveMenuItemBorderWidth +';';
					sStyle += 'border-style:'+ sParentInactiveMenuItemBorderStyle +';';
					sStyle += 'border-color:'+ sParentInactiveMenuItemBorderColor +';';
				}
				
				// Set menu item
				sMainLinks += '<div ';
				sMainLinks += 'class="'+ sParentMenuLayerClass +'" ';
				sMainLinks += 'id="'+ aMenuItems[iCounter] +'"';
				sMainLinks += ' onmouseover="'+ aMenuItems[iCounter] +'.active()" ';
				sMainLinks += ' onmouseout="'+ aMenuItems[iCounter]+'.inactive()" ';
				
				if (eval(aMenuItems[iCounter] +'.sHref'))
				{
					sStyle += 'cursor:hand;cursor:pointer;';

					// Add the href to the menu item
					sMainLinks += ' onclick="window.location.href = \''+ eval(aMenuItems[iCounter] +'.sHref') +'\'"';
					
					// Add a title to the menu item
					if (bShowMenuItemTitles) sMainLinks += ' title="'+ eval(aMenuItems[iCounter] +'.sMenuItemLabel') +'"';
				}
				
				// Add the menu item style
				sMainLinks += 'style="'+ sStyle +'" ';

				// Add the text to the menu item
				sMainLinks += '>\n';
				
				if (bUseParentNestedMenuItemLabel)
				{
					sMainLinks += '\t<div style="'+ iParentMenuItemLabelStyle +'">';
					sMainLinks += eval(aMenuItems[iCounter] +'.sMenuItemLabel') +'';
					sMainLinks += '</div>\n';
				}
				else
				{
					sMainLinks += eval(aMenuItems[iCounter] +'.sMenuItemLabel') +'';
				}

				sMainLinks += '</div>\n\n';
			}
			
			if (bDebugMenu) alert(sMainLinks);
			document.getElementById(sParentMenuTargetLayer).innerHTML = sMainLinks;
		}

		function active()
		{
			// If the hide timeout has been set, clear it
			if (iMenuClearTimeout) clearTimeout(iMenuClearTimeout);
			
			//
			// Deal with parent items
			//

			// Return parent layers to default styles
			for (iCounter = 0; iCounter < aMenuItems.length; iCounter++)
			{
				if (this.id != aMenuItems[iCounter])
				{
					var oMenuItem = document.getElementById(aMenuItems[iCounter]);
					
					oMenuItem.style.backgroundColor = sParentInactiveBackgroundColor;
					oMenuItem.style.color = sParentInactiveColor;

					if (bUseParentMenuItemBorders)
					{
						oMenuItem.style.borderWidth = sParentInactiveMenuItemBorderWidth;
						oMenuItem.style.borderStyle = sParentInactiveMenuItemBorderStyle;
						oMenuItem.style.borderColor = sParentInactiveMenuItemBorderColor;
					}

					if (sUseParentMenuLayerActiveClass)
					{
						oMenuItem.className = sParentMenuLayerClass;
					}
				}
			}
			
			//
			// Get the top level menu item left position
			//

			var iCurrentMenuItemPosition_left;

			if (!this.parentId)
			{
				var oActiveParentMenuItem = document.getElementById(this.id);

				oActiveParentMenuItem.style.backgroundColor = sParentActiveBackgroundColor;
				oActiveParentMenuItem.style.color = sParentActiveColor;
				
				iCurrentMenuItemPosition_left = getIntFromStyle(oActiveParentMenuItem.style.left);

				if (bUseParentMenuItemBorders)
				{
					oActiveParentMenuItem.style.borderWidth = sParentActiveMenuItemBorderWidth;
					oActiveParentMenuItem.style.borderStyle = sParentActiveMenuItemBorderStyle;
					oActiveParentMenuItem.style.borderColor = sParentActiveMenuItemBorderColor;
				}

				if (sUseParentMenuLayerActiveClass)
				{
					oActiveParentMenuItem.className = sParentMenuLayerActiveClass;
				}
			}

			//
			// Deal with sub menu target layer
			//

			var oSubMenuTargetLayer = document.getElementById(sSubMenuTargetLayer);
			
			oSubMenuTargetLayer.style.top = iParentMenuItemMargin_top + iMenuItemHeight + iParentMenuItemMargin_bottom +'px';
			if (iCurrentMenuItemPosition_left) oSubMenuTargetLayer.style.left = iCurrentMenuItemPosition_left + iSubMenuOffsetX +'px';
			oSubMenuTargetLayer.style.visibility ='visible';
			
			// Layer that holds the sub menu items
			var oSubMenuContainer = document.getElementById(sSubMenuTargetLayer);
			
			//
			// Clean up the sub menu items not being displayed
			//

			if (oSubMenuContainer.lastChild)
			{
				if (!this.parentId)
				{
					for (iCounter = oSubMenuContainer.childNodes.length; iCounter > 0; iCounter--)
					{
						var sThisObjectFinalSubMenuId = this.aSubMenuItems[this.aSubMenuItems.length - 1];
						var sCurrentChildNodeObjectId = oSubMenuContainer.childNodes[iCounter - 1].id;
						
						if (sThisObjectFinalSubMenuId == sCurrentChildNodeObjectId) break;

						oSubMenuContainer.removeChild(oSubMenuContainer.lastChild);
					}
				}
				else
				{
					for (iCounter = oSubMenuContainer.childNodes.length; iCounter > 0; iCounter--)
					{
						var oParentMenuItem = eval(this.parentId);
						
						var sParentObjectFinalSubMenuId = oParentMenuItem.aSubMenuItems[oParentMenuItem.aSubMenuItems.length - 1];
						var sCurrentChildNodeObjectId = oSubMenuContainer.childNodes[iCounter - 1].id;
						
						if (sParentObjectFinalSubMenuId == sCurrentChildNodeObjectId) break;
						
						oSubMenuContainer.removeChild(oSubMenuContainer.lastChild);
					}
				}
			}
			
			//
			// Create/display sub menu items
			//

			if (this.aSubMenuItems.length)
			{

				for (iCounter = 0; iCounter < this.aSubMenuItems.length; iCounter++)
				{
					// If the current submenu item already
					// exists go round again
					if (document.getElementById(this.aSubMenuItems[iCounter]))
					{
						continue;
					}

					//
					// Create sub menu elements
					//

					// Create the content of the menu item
					var sSubMenuElementLabel = eval(this.aSubMenuItems[iCounter] +'.sText');
					var sSubMenItemText = '';

					if (bUseSubMenuItemNestedMenuItemLabel)
					{
						sSubMenItemText += '\t<div style="'+ sSubMenuItemLabelStyle +'">';
						sSubMenItemText += sSubMenuElementLabel +'';
						sSubMenItemText += '</div>\n';
					}
					else
					{
						sSubMenItemText = sSubMenuElementLabel;
					}
					
					// Create new sub menu element and set text
					var oSubMenuElement = document.createElement(this.aSubMenuItems[iCounter]);
					// Add sub menu content and set id
					oSubMenuElement.innerHTML = sSubMenItemText;
					oSubMenuElement.setAttribute('id', this.aSubMenuItems[iCounter]);
					// Add sub menu element
					oSubMenuContainer.appendChild(oSubMenuElement);
					
					// Get the new sub menu element
					var oNewSubMenuElement = document.getElementById(this.aSubMenuItems[iCounter]);
					
					var iItemTop = 0;
					var iItemLeft = 0;
					
					if (!this.parentId)
					{
						iItemTop = (iCounter * iSubMenuItemHeight) + (iCounter * iSubMenuItemVerticalSpacing);
					}
					else
					{
						var iActiveMenuItemTop = getIntFromStyle(document.getElementById(this.id).style.top);
						var iActiveMenuItemLeft = getIntFromStyle(document.getElementById(this.id).style.left);
						iItemTop = (iActiveMenuItemTop + (iCounter * iSubMenuItemVerticalSpacing)) + (iCounter * iSubMenuItemHeight);
						iItemLeft = iActiveMenuItemLeft + iSubMenuItemWidth + iSubMenuItemHorizontalSpacing;
					}

					// Set element style
					oNewSubMenuElement.style.position = 'absolute';
					oNewSubMenuElement.style.top = iItemTop +'px';
					oNewSubMenuElement.style.left = iItemLeft +'px';
					oNewSubMenuElement.style.width = iSubMenuItemWidth +'px';
					oNewSubMenuElement.style.height = iSubMenuItemHeight +'px';
					oNewSubMenuElement.style.backgroundColor = sSubMenuItemInactiveBackgroundColor;
					oNewSubMenuElement.style.color = sSubMenuItemInactiveColor;
					oNewSubMenuElement.style.cursor = 'hand';
					oNewSubMenuElement.style.cursor = 'pointer';
					oNewSubMenuElement.className = sSubMenuLayerClass;
					
					if (bUseSubMenuItemBorders)
					{
						oNewSubMenuElement.style.borderWidth = sSubMenuItemInactiveBorderWidth;
						oNewSubMenuElement.style.borderStyle = sSubMenuItemInactiveBorderStyle;
						oNewSubMenuElement.style.borderColor = sSubMenuItemInactiveBorderColor;
					}
					
					// Set element title
					if (bShowMenuItemTitles) oNewSubMenuElement.title = sSubMenuElementLabel;

					// Set element events
					oNewSubMenuElement.onmouseover = new Function(''+ this.aSubMenuItems[iCounter] +'.active()');
					oNewSubMenuElement.onmouseout = new Function(''+ this.aSubMenuItems[iCounter] +'.inactive()');
					oNewSubMenuElement.onclick = new Function('window.location.href = \''+ eval(this.aSubMenuItems[iCounter] +'.sHref') +'\'');
				}
			}
			
			// Return all sub menu elements to their original styles
			for (iCounter = 0; iCounter < oSubMenuContainer.childNodes.length; iCounter++)
			{
				oSubMenuElement = document.getElementById(oSubMenuContainer.childNodes[iCounter].id);

				oSubMenuElement.style.backgroundColor = sSubMenuItemInactiveBackgroundColor;
				oSubMenuElement.style.color = sSubMenuItemInactiveColor;

				if (bUseSubMenuItemBorders)
				{
					oSubMenuElement.style.borderWidth = sSubMenuItemInactiveBorderWidth;
					oSubMenuElement.style.borderStyle = sSubMenuItemInactiveBorderStyle;
					oSubMenuElement.style.borderColor = sSubMenuItemInactiveBorderColor;
				}

				if (sUseSubMenuLayerActiveClass)
				{
					oSubMenuElement.className = sSubMenuLayerClass;
				}
			}
			
			// If this is a sub menu item set active styles
			if (this.parentId)
			{
				oSubMenuElement = document.getElementById(this.id);

				oSubMenuElement.style.backgroundColor = sSubMenuItemActiveBackgroundColor;
				oSubMenuElement.style.color = sSubMenuItemActiveColor;
					
				if (bUseSubMenuItemBorders)
				{
					oSubMenuElement.style.borderWidth = sSubMenuItemActiveBorderWidth;
					oSubMenuElement.style.borderStyle = sSubMenuItemActiveBorderStyle;
					oSubMenuElement.style.borderColor = sSubMenuItemActiveBorderColor;
				}

				if (sUseSubMenuLayerActiveClass)
				{
					oSubMenuElement.className = sSubMenuLayerActiveClass;
				}
			}

		} // end functon active()

		function getIntFromStyle(sStyle)
		{
			return parseInt(sStyle.substring(0, sStyle.indexOf('px')));
		}

		function inactive()
		{
			iMenuClearTimeout = setTimeout("hide()", iMenuHideTime);
		}

		function hide()
		{
			// Return all parent layers to default styles
			for (iCounter = 0; iCounter < aMenuItems.length; iCounter++)
			{
				var oMenuItem = document.getElementById(aMenuItems[iCounter]);
				
				oMenuItem.style.backgroundColor = sParentInactiveBackgroundColor;
				oMenuItem.style.color = sParentInactiveColor;

				if (bUseParentMenuItemBorders)
				{
					oMenuItem.style.borderWidth = sParentInactiveMenuItemBorderWidth;
					oMenuItem.style.borderStyle = sParentInactiveMenuItemBorderStyle;
					oMenuItem.style.borderColor = sParentInactiveMenuItemBorderColor;
				}

				if (sUseParentMenuLayerActiveClass)
				{
					oMenuItem.className = sParentMenuLayerClass;
				}
			}
			
			// Hide the sub menu items
			document.getElementById(sSubMenuTargetLayer).style.visibility = 'hidden';
		}