	// Global Variables //
	var _isMoz = (navigator.appName == "Netscape");
	var _isIE = (navigator.appName == "Microsoft Internet Explorer");
	var _isIE6 = (navigator.appVersion.search("MSIE 6.0") != -1);
	var _isSafari = (navigator.userAgent.indexOf("Safari") != -1);
	
	var _isLoaded = false, _i = _j =  _navCount = _subNavCount = _width = _height = 0, _canAni = "show", _animateBy = 40;
	var _incArrayMenu = [0,10,17,21,23], _incArrayUL = [57,47,40,36,34], _incArrayMenuH = [23,21,17,10,0], _incArrayULH = [34,36,40,47,57];

	$S = function(_elementID) {
		return $(_elementID).style;
	}

	// init function //
	init = function() {
		addEvent(onLoad,"load");
	}

	setOpacity = function(_elementID,_opacity) {
		$S(_elementID).opacity = _opacity;
		$S(_elementID).MozOpacity = _opacity;
		$S(_elementID).filter = "alpha(opacity=" + (_opacity * 100) + ")";
	}

	within = function(_val,_low,_high) {
		return ((_val >= _low) && (_val <= _high));
	}

	dec2hex = function(_dec) {
		var _hexChars = "0123456789ABCDEF", _hex = "";
		while (_dec > 15) {
			_hex = (_hexChars.charAt((_dec - (Math.floor(_dec / 16)) * 16)) + _hex);
			_dec = Math.floor(_dec / 16);
		}
		return (_hexChars.charAt(_dec) + _hex);
	}

	hex2dec = function(_hex) {
		return parseInt(_hex,16);
	}

	// Manage events //
	addEvent = function(_function,_event) {
		if ((document.all) && (window.attachEvent)) {
			window.attachEvent("on" + _event,_function);
		} else if (window.addEventListener) {
			window.addEventListener(_event,_function,false);
		}
	}

	isHex = function(_hex) {
		return /^[a-fA-F0-9]{6}$/.test(_hex);
	}

	domEvent = function(_event) {
		_event = (_event) ? _event : window.event;

		// Opera hates this for some reason:
		if (!window.opera && _event.srcElement) {
			_event.target = _event.srcElement;
		}
		if (_event.keyCode) {
			_event.code = _event.keyCode;
		} else if (_event.which) {
			_event.code = _event.which;
		} else {
			_event.code = _event.charCode
		}
		return _event;
	}

	setNavEvents = function() {
		$("nav").onmouseover = function() {menuOver();};
		$("nav").onmouseout = function() {menuOut();};
		$("Nav0").onmouseover = function() {showSubNav("Nav0");};
		$("Nav1").onmouseover = function() {showSubNav("Nav1");};
		$("Nav2").onmouseover = function() {showSubNav("Nav2");};
		$("Nav3").onmouseover = function() {showSubNav("Nav3");};
		$("Nav4").onmouseover = function() {showSubNav("Nav4");};
		$("Nav5").onmouseover = function() {showSubNav("Nav5");};
		$("Nav6").onmouseover = function() {showSubNav("Nav6");};
		$("Nav7").onmouseover = function() {showSubNav("Nav7");};
		$("Nav8").onmouseover = function() {highlightNav("Nav8"); hideSubNav();};
		$("Nav8").onmouseout = function() {highlightNav();};
	}

	// Init drag //
	initDD = function() {
		dragsort.makeListSortable($("ddItems"),function(_item) {
			_item.toolManDragGroup.register("dragend",clEndDrag);
		});
	}

	// End drag //
	clEndDrag = function() {
		_colourBoxOrder = "";
		var _colourBoxes = $("ddItems").getElementsByTagName("li");
		for (_i=0;_i<_colourBoxes.length;_i++) {
			_colourBoxOrder += _colourBoxes[_i].title;
			if ((_i + 1) != _colourBoxes.length) {
				_colourBoxOrder += "|";
			}
		}
	}


	// Show subNav //
	showSubNav = function(_elementID) {
		_wait = 0;
		if (_canAni == "show") {
			$S("navUL").marginBottom = 0;
			if ($("subNavContainer").style.height != (_incArrayMenuH[0] + "px")) {
				// If subNavContainer is closed...
				_canAni = "";
				for (_i=0;_i<_incArrayMenu.length;_i++) {
					setTimeout("aniSubNav(" + _incArrayMenu[_i] + "," + _incArrayUL[_i] + ")",(_animateBy * _i));
				}
				$S("subNavContainer").display = "block";
			}
			_wait = (_incArrayMenu.length * _animateBy);
			setTimeout("menuAniStop('hide')",(_wait + 19));
		}

		fadeElement("sub" + _elementID,0);
		for (_i=1;_i<=10;_i++) {
			setTimeout("fadeElement('sub" + _elementID + "'," + _i + ")",(_wait + (_animateBy * _i)));
		}
		highlightNav(_elementID);

		// Close any SubNavs we have open //
		for (_i=0;_i<=_subNavCount;_i++) {
			$S("subNav" + _i).display = "none";
		}
		$S("sub" + _elementID).display = "block";
	}

	aniSubNav = function(_howMuchMenu,_howMuchUL) {
		$S("subNavContainer").height = (_howMuchMenu + "px");
		$S("navUL").marginTop = (_howMuchUL + "px");
	}

	// Hide subNav //
	hideSubNav = function() {
		_wait = 0;
		if (_canAni == "hide") {
			if ($S("subNavContainer").height == (_incArrayMenuH[0] + "px")) {
				_canAni = "";
				for (_i=0;_i<_incArrayMenu.length;_i++) {
					setTimeout("aniSubNav(" + _incArrayMenuH[_i] + "," + _incArrayULH[_i] + ")",(_animateBy * _i));
				}
				_wait = (_incArrayMenu.length * _animateBy);
				setTimeout("menuAniStop('show')",(_wait + 19));
			}
		}
	}

	menuOver = function() {
		try {
			clearTimeout(_timeOut);
		} catch(_e) {}
	}

	menuOut = function() {
		_timeOut = setTimeout("hideSubNav(); highlightNav();",750);
	}

	// Called when the menu is done animating [either up or down]
	menuAniStop = function(_showHide) {
		_canAni = _showHide;
	}

	// Highlight whatever _elementID is passed //
	highlightNav = function(_elementID) {
		// Clear any Nav Anchors we have higlighted //
		for (_i=0;_i<=_navCount;_i++) {
			// See .nav li a in ./global.css for values //
			$S("Nav" + _i).background = "";
			$S("Nav" + _i).color = "#515151";
		}
		if (_elementID) {
			// See .nav li a:hover in ./global.css for values //
			$S(_elementID).background = "transparent url(http://www.incredi.net/temp/images/nav/tab.gif) top right no-repeat";
			$S(_elementID).color = "#ffffff";
		}
	}

	// Fades _elementID to _opacity, called from timeouts //
	fadeElement = function(_elementID,_opacity) {
		// Safari seems to think it's funny to throw a moueover event when you move your mouse, so this will flicker: //
		if (_isIE) {
			$(_elementID).style.filter = "alpha(opacity=" + (_opacity * 10) + ")";
		} else if (_isMoz) {
			$(_elementID).style.MozOpacity = (_opacity / 10);
			$(_elementID).style.opacity = (_opacity / 10);
		}
	}