
// MENU FUNCTIONALITY

	function fShowMenu(sSubMenu, iSubMenuLevel, oMenuLink) {
		// cancel all timed menu closes
		fCancelTimeout();
		
		// close all sub menus at this level and below
		fCloseMenus(iSubMenuLevel)
		
		// check whether any sub menu needs opening
		if (sSubMenu.length > 0) {
			oSubMenu = document.getElementById(sSubMenu);
			
			// increment actual level
			actualLevel++;
			
			// calculate width required for wrapping
			oSubMenu.style.display = "block"; // next line requires block display to calculate width
			var iSpaceNeeded = (((fGetDistanceFrom(oMenuLink, "Left")) + oMenuLink.offsetParent.offsetWidth + submenuOffsetH) + oSubMenu.offsetWidth)
			oSubMenu.style.display = "none"; // set back to none to prevent flicker in firefox
			
			// highlight parent link
			oMenuLink.className = "a_MenuOpen";
			
			//do positioning
			if (iSubMenuLevel == 1) {
				oSubMenu.style.left = ((fGetDistanceFrom(oMenuLink, "Left")) + menuOffsetH) + "px";
				oSubMenu.style.top = ((fGetDistanceFrom(oMenuLink, "Top")) + oMenuLink.offsetParent.offsetHeight + menuOffsetV) + "px";
			}
			else if (iSubMenuLevel == 10) {
				// This is fixed data for the colour picker dropdown
			    if (oMenuLink.previousSibling.innerHTML == "") {
				    oSubMenu.style.left = (oMenuLink.parentNode.offsetLeft + menuOffsetH) + "px";
			    	oSubMenu.style.top = (fGetDistanceFrom(oMenuLink, "Top") - oMenuLink.parentNode.offsetHeight - 32) + "px";
				} else {
				    oSubMenu.style.left = ((oMenuLink.parentNode.offsetLeft + menuOffsetH) - 250) + "px";
			    	oSubMenu.style.top = (oMenuLink.parentNode.offsetHeight + menuOffsetV + 70) + "px";
				}
			}
			else {
				// wrap menu back towards the right if it goes off the edge of the screen
				if (iSpaceNeeded < document.body.offsetWidth) {
					oSubMenu.style.left = ((fGetDistanceFrom(oMenuLink.offsetParent, "Left")) + oMenuLink.offsetParent.offsetWidth + submenuOffsetH) + "px";
				}
				else {
					oSubMenu.style.left = ((fGetDistanceFrom(oMenuLink.offsetParent, "Left")) - oMenuLink.offsetParent.offsetWidth - submenuOffsetH) + "px";
				};
				oSubMenu.style.top = ((fGetDistanceFrom(oMenuLink, "Top")) + submenuOffsetV) + "px";
			}
			
			// set the correct style
			if (oSubMenu.getAttribute("title") != "fixedstyle") {
				if (arMenuStyle[actualLevel] == "") {
					oSubMenu.className = submenuDefaultStyle;
				}
				else {
					oSubMenu.className = arMenuStyle[iSubMenuLevel];
				};
			};
			
			// show the menu
			oSubMenu.style.display = "block";
			
			// add menu details to array
			fAddMenuDetails(sSubMenu, iSubMenuLevel, oMenuLink.id)
			//alert(iSubMenuLevel); && iSubMenuLevel != 10
			// iframe control
			oIframe = document.getElementById("ifr_" + iSubMenuLevel);
			if (!oIframe && iSubMenuLevel != 10) {
				// iframe does not exist for this menu, so build a new one
				oIfrCont = document.getElementById('div_Iframes');
				oIfrCont.innerHTML += '<iframe id="ifr_' + iSubMenuLevel + '" src="' + iframeBlankURL + '" frameBorder="0" scrolling="no"></iframe>';
				oIframe = document.getElementById("ifr_" + iSubMenuLevel);
			}
			if (!oIframe && iSubMenuLevel == 10) {
				// iframe does not exist for this menu, so build a new one
				oIfrCont = document.getElementById('div_Icframes');
				oIfrCont.innerHTML += '<iframe id="ifr_' + iSubMenuLevel + '" src="' + iframeBlankURL + '" frameBorder="0" scrolling="no"></iframe>';
				oIframe = document.getElementById("ifr_" + iSubMenuLevel);
			}
			if (oIframe) {
				oIframe.style.display = "none";
				oIframe.style.top = (fGetDistanceFrom(oSubMenu, "Top")) + "px";
				oIframe.style.left = (fGetDistanceFrom(oSubMenu, "Left")) + "px";
				oIframe.style.width = oSubMenu.offsetWidth + "px";
				oIframe.style.height = oSubMenu.offsetHeight + "px";
				oIframe.style.display = "block";
			}
		}		
	}
	
	function fAddMenuDetails(menuid, level, parentid) {
		arOpenMenuID[arrayTotal + 1] = menuid;
		arOpenMenuLevel[arrayTotal + 1] = level;
		arOpenMenuParentID[arrayTotal + 1] = parentid;
		arrayTotal++;
	}
	function fRemoveMenuDetails(array) {
		arOpenMenuID[array] = "";
		arOpenMenuLevel[array] = "";
		arOpenMenuParentID[array] = "";
		arrayTotal--;
	}
	function fResetArray() {
		arrayTotal = -1;
		currentLevel = 1;
	}
	function fCloseMenus(level) {
		for (i=arrayTotal; i>=0; i--) {
			if (arOpenMenuLevel[i] >= level) {
				fDisableMenu(arOpenMenuID[i], arOpenMenuParentID[i], i);
			};
		};
		if (level == 1) {
			fResetArray();
		}
	}
	
	function fHideMenu() {
		lastTimeout = window.setTimeout("fCloseMenus(1);", menuCloseDelay);
	}
	function fDisableMenu(sSubMenu, sParent, iArrayID) {
		document.getElementById(sSubMenu).style.display = "none";
		fRemoveMenuDetails(iArrayID);
		if (sParent != "") {
			var oLastMenuLink = document.getElementById(sParent)
			oLastMenuLink.className = "a_Parent";
		};
		oIframe = document.getElementById("ifr_" + actualLevel);
		if (oIframe) {
			oIframe.style.display = "none";
		};
		actualLevel--;
	}
	function fCancelTimeout() {
		window.clearTimeout(lastTimeout);
	}
	function fGetDistanceFrom(obj, where) {
		//gets the distance of an object from the top/left of the page
		var count = 0;
		while (obj) {
			switch (where) {
				case "Top":
					count = count + obj.offsetTop;
					break
				case "Right":
					count = count + obj.offsetRight;
					break
				case "Bottom":
					count = count + obj.offsetBottom;
					break
				case "Left":
					count = count + obj.offsetLeft;
					break
				default:
					count = 0;
					break
			}
			obj = obj.offsetParent;
		}
		return count;
	}
	
	
	
// DEBUGGING TOOLS //

	function fShowOpenMenus() {
		var poo = "";
		for (i=0; i<=arrayTotal; i++) {
			var poo = poo + arOpenMenuID[i] + "/" + arOpenMenuLevel[i] + "/" + arOpenMenuParentID[i] + "<br>";
		}
		fDebug(poo);
	}
	
	function fDebug(stuff) {
		document.getElementById('div_Status').innerHTML += stuff;
	}
	
// COLOUR MENU //

	function showColourText(obj, status) {
		displayobj = document.getElementById("ucColourFilter_div_ColourText");
		if (displayobj) {
		    var text = obj.innerHTML;
		    if (status) {
			    displayobj.innerHTML = "Choose to show only <b>" + text.toLowerCase() + "</b> products";
		    }
		    else {
			    displayobj.innerHTML = displayobj.getAttribute("title");
		    }
		}
	}