<!-- ---------------------------------------------------------------------------------------- -->

var domMenu_data = new domMenu_Hash();
var domMenu_settings = new domMenu_Hash();

domMenu_settings.setItem('global', new domMenu_Hash(
	'menuBarClass', 'domMenu_menuBar',
	'menuElementClass', 'domMenu_menuElement',
	'menuElementHoverClass', 'domMenu_menuElementHover',
	'menuElementActiveClass', 'domMenu_menuElementHover',
	'subMenuBarClass', 'domMenu_subMenuBar',
	'subMenuElementClass', 'domMenu_subMenuElement',
	'subMenuElementHoverClass', 'domMenu_subMenuElementHover',
	'subMenuElementActiveClass', 'domMenu_subMenuElementHover',
	'subMenuElementHeadingClass', 'domMenu_subMenuElementHeading',
	'menuBarWidth', '100%',
	'subMenuMinWidth', 'inherit',
	'distributeSpace', true,
	'axis', 'horizontal',
	'verticalExpand', 'south',
	'horizontalExpand', 'east',
	'subMenuWidthCorrection', 0,
	'verticalSubMenuOffsetY', 0,
	'verticalSubMenuOffsetX', 0,
	'horizontalSubMenuOffsetX', 0,
	'horizontalSubMenuOffsetY', 0,
	'screenPadding', 0,
	'openMouseoverMenuDelay', 50,
	'openMousedownMenuDelay', -1,
	'closeMouseoutMenuDelay', 400,
	'closeClickMenuDelay', -1,
	'openMouseoverSubMenuDelay', 50,
	'openClickSubMenuDelay', -1,
	'closeMouseoutSubMenuDelay', 400,
	'closeClickSubMenuDelay', -1,
	'baseZIndex', 100
));

var domMenu_userAgent = navigator.userAgent.toLowerCase();
var domMenu_isOpera = domMenu_userAgent.indexOf('opera 7') != -1 ? 1 : 0;
var domMenu_isKonq = domMenu_userAgent.indexOf('konq') != -1 ? 1 : 0;
var domMenu_isIE = !domMenu_isKonq && !domMenu_isOpera && document.all ? 1 : 0;
var domMenu_isIE50 = domMenu_isIE && domMenu_userAgent.indexOf('msie 5.0') != -1;
var domMenu_isIE55 = domMenu_isIE && domMenu_userAgent.indexOf('msie 5.5') != -1;
var domMenu_isIE5 = domMenu_isIE50 || domMenu_isIE55;
var domMenu_isGecko = domMenu_userAgent.indexOf('gecko') != -1 ? 1 : 0;

var domMenu_useLibrary = domMenu_isIE || domMenu_isGecko || domMenu_isKonq || domMenu_isOpera ? 1 : 0;

var domMenu_data;

var domMenu_selectElements;
var domMenu_scrollbarWidth = 14;
var domMenu_eventTo = domMenu_isIE ? 'toElement' : 'relatedTarget';
var domMenu_eventFrom = domMenu_isIE ? 'fromElement' : 'relatedTarget';

var domMenu_activeElement = new domMenu_Hash();

var domMenu_timeouts = new Array();
domMenu_timeouts['open'] = new domMenu_Hash();
domMenu_timeouts['close'] = new domMenu_Hash();

var domMenu_timeoutStates = new Array();
domMenu_timeoutStates['open'] = new domMenu_Hash();
domMenu_timeoutStates['close'] = new domMenu_Hash();

var domMenu_pointerStyle = domMenu_isIE ? 'hand' : 'pointer';

function domMenu_Hash() {
	var argIndex = 0;
	this.length = 0;
	this.numericLength = 0; 
	this.items = new Array();
	while (arguments.length > argIndex) {
		this.items[arguments[argIndex]] = arguments[argIndex + 1];
		if (arguments[argIndex] == parseInt(arguments[argIndex])) {
			this.numericLength++;
		}

		this.length++;
		argIndex += 2;
	}

	this.removeItem = function(in_key)
	{
		var tmp_value;
		if (typeof(this.items[in_key]) != 'undefined') {
			this.length--;
			if (in_key == parseInt(in_key)) {
				this.numericLength--;
			}

			tmp_value = this.items[in_key];
			delete this.items[in_key];
		}
		
		return tmp_value;
	}

	this.getItem = function(in_key)
	{
		return this.items[in_key];
	}

	this.setItem = function(in_key, in_value)
	{
		if (typeof(this.items[in_key]) == 'undefined') {
			this.length++;
			if (in_key == parseInt(in_key)) {
				this.numericLength++;
			}
		}
		
		this.items[in_key] = in_value;
	}

	this.hasItem = function(in_key)
	{
		return typeof(this.items[in_key]) != 'undefined';
	}
	
	this.merge = function(in_hash)
	{
		for (var tmp_key in in_hash.items) {
			if (typeof(this.items[tmp_key]) == 'undefined') {
				this.length++;
				if (tmp_key == parseInt(tmp_key)) {
					this.numericLength++;
				}
			}

			this.items[tmp_key] = in_hash.items[tmp_key];
		}
	}

	this.compare = function(in_hash)
	{
		if (this.length != in_hash.length) {
			return false;
		}

		for (var tmp_key in this.items) {
			if (this.items[tmp_key] != in_hash.items[tmp_key]) {
				return false;
			}
		}
		
		return true;
	}
}

function domMenu_activate(in_containerId)
{
	var container;
	var data;

	if (!domMenu_useLibrary || !(container = document.getElementById(in_containerId)) || !(data = domMenu_data.items[in_containerId])) {
		return;
	}

	if (!domMenu_settings.hasItem(in_containerId)) {
		domMenu_settings.setItem(in_containerId, new domMenu_Hash());
	}

	var settings = domMenu_settings.items[in_containerId];
	for (var i in domMenu_settings.items['global'].items) {
		if (!settings.hasItem(i)) {
			settings.setItem(i, domMenu_settings.items['global'].items[i]);
		}
	}

	container.data = new domMenu_Hash(
		'parentElement', false,
		'numChildren', data.numericLength,
		'childElements', new domMenu_Hash(),
		'level', 0,
		'index', 1
	);
	
	var distributeRatio = Math.round(100/container.data.items['numChildren']) + '%';
	
	var rootMenu = document.createElement('div');
	rootMenu.id = in_containerId + '[0]';
	rootMenu.className = settings.items['menuBarClass'];
	container.data.setItem('subMenu', rootMenu);

	var rootMenuTable = rootMenu.appendChild(document.createElement('table'));
	if (domMenu_isKonq) {
		rootMenuTable.cellSpacing = 0;
	}

	rootMenuTable.style.border = 0;
	rootMenuTable.style.borderCollapse = 'collapse';
	rootMenuTable.style.width = settings.items['menuBarWidth'];
	var rootMenuTableBody = rootMenuTable.appendChild(document.createElement('tbody'));

	var numSiblings = container.data.items['numChildren'];
	for (var index = 1; index <= numSiblings; index++) {
		if (index == 1 || settings.items['axis'] == 'vertical') {
			var rootMenuTableRow = rootMenuTableBody.appendChild(document.createElement('tr'));
		}

		var rootMenuTableCell = rootMenuTableRow.appendChild(document.createElement('td'));
		rootMenuTableCell.style.padding = 0;
		rootMenuTableCell.id = in_containerId + '[' + index + ']';
		container.data.items['childElements'].setItem(rootMenuTableCell.id, rootMenuTableCell);

		rootMenuTableCell.data = data.items[index];
		rootMenuTableCell.data.merge(new domMenu_Hash(
			'basename', in_containerId,
			'parentElement', container,
			'numChildren', rootMenuTableCell.data.numericLength,
			'childElements', new domMenu_Hash(),
			'offsets', new domMenu_Hash(),
			'level', container.data.items['level'] + 1,
			'index', index
		));

		rootMenuTableCell.style.cursor = 'default';
		if (settings.items['axis'] == 'horizontal') {
			if (settings.items['distributeSpace']) {
				rootMenuTableCell.style.width = distributeRatio;
			}
		}

		var rootElement = rootMenuTableCell.appendChild(document.createElement('div'));
		rootElement.className = settings.items['menuElementClass'];
		rootElement.innerHTML = '<span>' + rootMenuTableCell.data.items['contents'] + '</span>' + (rootMenuTableCell.data.hasItem('contentsHover') ? '<span style="display: none;">' + rootMenuTableCell.data.items['contentsHover'] + '</span>' : '');

		rootMenuTableCell.onmouseover = function(in_event) { domMenu_openEvent(this, in_event, settings.items['openMouseoverMenuDelay']); };
		rootMenuTableCell.onmouseout = function(in_event) { domMenu_closeEvent(this, in_event); };

		if (settings.items['openMousedownMenuDelay'] >= 0 && rootMenuTableCell.data.items['numChildren']) {
			rootMenuTableCell.onmousedown = function(in_event) { domMenu_openEvent(this, in_event, settings.items['openMousedownMenuDelay']); };
			rootMenuTableCell.onmouseup = function(in_event) { var eventObj = domMenu_isIE ? event : in_event; eventObj.cancelBubble = true; };
			if (domMenu_isIE) {
				rootMenuTableCell.ondblclick = function(in_event) { domMenu_openEvent(this, in_event, settings.items['openMousedownMenuDelay']); };
			}
		}
		else if (rootMenuTableCell.data.items['uri']) {
			rootMenuTableCell.style.cursor = domMenu_pointerStyle;
			rootMenuTableCell.onclick = function(in_event) { domMenu_resolveLink(this, in_event); };
		}

		if (domMenu_isIE) {
			rootMenuTableCell.onselectstart = function() { return false; };
		}

		rootMenuTableCell.oncontextmenu = function() { return false; };
	}
	
	rootMenu = container.appendChild(rootMenu);

	domMenu_detectCollisions(rootMenu);
}

function domMenu_activateSubMenu(in_parentElement)
{
	if (in_parentElement.data.hasItem('subMenu')) {
		domMenu_toggleSubMenu(in_parentElement, 'visible');
		return;
	}

	var settings = domMenu_settings.items[in_parentElement.data.items['basename']];

	var menu = document.createElement('div');
	menu.id = in_parentElement.id + '[0]';
	menu.className = settings.items['subMenuBarClass'];
	menu.style.zIndex = settings.items['baseZIndex'];
	menu.style.position = 'absolute';
	menu.style.visibility = 'hidden';
	menu.style.top = 0;
	menu.style.left = 0;

	in_parentElement.data.setItem('subMenu', menu);

	var menuTable = menu.appendChild(document.createElement('table'));
	if (domMenu_isOpera) {
		menuTable.style.width = '1px';
		menuTable.style.whiteSpace = 'nowrap';
	}

	if (domMenu_isKonq) {
		menuTable.cellSpacing = 0;
	}

	menuTable.style.border = 0;
	menuTable.style.borderCollapse = 'collapse';
	var menuTableBody = menuTable.appendChild(document.createElement('tbody'));

	var numSiblings = in_parentElement.data.items['numChildren'];
	for (var index = 1; index <= numSiblings; index++) {
		var dataIndex = in_parentElement.data.items['level'] == 1 && settings.items['verticalExpand'] == 'north' && settings.items['axis'] == 'horizontal' ? numSiblings + 1 - index : index;
		var menuTableCell = menuTableBody.appendChild(document.createElement('tr')).appendChild(document.createElement('td'));
		menuTableCell.style.padding = 0;
		menuTableCell.id = in_parentElement.id + '[' + dataIndex + ']';

		in_parentElement.data.items['childElements'].setItem(menuTableCell.id, menuTableCell);

		menuTableCell.data = in_parentElement.data.items[dataIndex];
		menuTableCell.data.merge(new domMenu_Hash(
			'basename', in_parentElement.data.items['basename'],
			'parentElement', in_parentElement,
			'numChildren', menuTableCell.data.numericLength,
			'childElements', new domMenu_Hash(),
			'offsets', new domMenu_Hash(),
			'level', in_parentElement.data.items['level'] + 1,
			'index', index
		));
		
		var parentStyle = in_parentElement.data.items['level'] == 1 ? in_parentElement.parentNode.style : in_parentElement.style;
		menuTableCell.style.cursor = 'default';
		
		var element = menuTableCell.appendChild(document.createElement('div')); 
		var outerElement = element;
		outerElement.className = settings.items['subMenuElementClass']; 

		if (menuTableCell.data.items['numChildren']) {
			element = outerElement.appendChild(document.createElement('div'));
			element.style.backgroundImage = 'url(arrow.gif)';
			element.style.backgroundRepeat = 'no-repeat';
			element.style.backgroundPosition = 'right center';
			element.style.paddingRight = '12px';
		}

		element.innerHTML = menuTableCell.data.items['contents'];

		menuTableCell.onmouseover = function(in_event) { domMenu_openEvent(this, in_event, settings.items['openMouseoverSubMenuDelay']); };
		menuTableCell.onmouseout = function(in_event) { domMenu_closeEvent(this, in_event); };

		if (settings.items['openClickSubMenuDelay'] >= 0 && menuTableCell.data.items['numChildren']) {
			menuTableCell.onmousedown = function(in_event) { domMenu_openEvent(this, in_event, settings.items['openClickSubMenuDelay']); };
			menuTableCell.onmouseup = function(in_event) { var eventObj = domMenu_isIE ? event : in_event; eventObj.cancelBubble = true; };
			if (domMenu_isIE) {
				menuTableCell.ondblclick = function(in_event) { domMenu_openEvent(this, in_event, settings.items['openClickSubMenuDelay']); };
			}
		}
		else if (menuTableCell.data.items['uri']) {
			menuTableCell.style.cursor = domMenu_pointerStyle;
			menuTableCell.onclick = function(in_event) { domMenu_resolveLink(this, in_event); };
		}
		else if (!menuTableCell.data.items['numChildren']) {
			outerElement.className += ' ' + settings.items['subMenuElementHeadingClass'];
		}

		if (domMenu_isIE) {
			menuTableCell.onselectstart = function() { return false; };
		}

		menuTableCell.oncontextmenu = function() { return false; };
	}

	menu = document.body.appendChild(menu);
	domMenu_toggleSubMenu(in_parentElement, 'visible');
}

function domMenu_changeActivePath(in_newActiveElement, in_oldActiveElement, in_closeDelay)
{
	if (!in_oldActiveElement && !in_newActiveElement) {
		return false;
	}

	for (var i in domMenu_timeouts['open'].items) {
		domMenu_cancelTimeout(i, 'open');
	}

	var basename = in_oldActiveElement ? in_oldActiveElement.data.items['basename'] : in_newActiveElement.data.items['basename'];
	var settings = domMenu_settings.items[basename];

	var oldActivePath = new domMenu_Hash();
	if (in_oldActiveElement) {
		var tmp_oldActivePathElement = in_oldActiveElement;
		do {
			oldActivePath.setItem(tmp_oldActivePathElement.id, tmp_oldActivePathElement); 
		} while ((tmp_oldActivePathElement = tmp_oldActivePathElement.data.items['parentElement']) && tmp_oldActivePathElement.id != basename);

		if (!in_oldActiveElement.data.items['subMenu'] || in_oldActiveElement.data.items['subMenu'].style.visibility == 'hidden') {
			domMenu_toggleHighlight(in_oldActiveElement, false);
		}
	}

	var newActivePath = new domMenu_Hash();
	var intersectPoint;
	if (in_newActiveElement) {
		var actualActiveElement = in_newActiveElement;
		window.status = in_newActiveElement.data.items['statusText'] + ' ';

		if (!in_oldActiveElement) {
			domMenu_cancelTimeout(in_newActiveElement.id, 'close'); 
			domMenu_toggleHighlight(in_newActiveElement, true);
			return false;
		}
		else if (oldActivePath.hasItem(in_newActiveElement.id)) {
			in_newActiveElement = in_oldActiveElement;
		}

		var tmp_newActivePathElement = in_newActiveElement;
		do {
			if (!intersectPoint && oldActivePath.hasItem(tmp_newActivePathElement.id)) {
				intersectPoint = tmp_newActivePathElement;
			}

			newActivePath.setItem(tmp_newActivePathElement.id, tmp_newActivePathElement); 
			domMenu_cancelTimeout(tmp_newActivePathElement.id, 'close'); 
			if (tmp_newActivePathElement != in_oldActiveElement || actualActiveElement == in_oldActiveElement) {
				domMenu_toggleHighlight(tmp_newActivePathElement, true);
			}
		} while ((tmp_newActivePathElement = tmp_newActivePathElement.data.items['parentElement']) && tmp_newActivePathElement.id != basename);

		if (in_newActiveElement.data.items['parentElement'] == in_oldActiveElement) {
			return in_newActiveElement;
		}
		else if (in_newActiveElement == in_oldActiveElement) {
			return in_newActiveElement;
		}

		var intersectSibling;
		if (intersectPoint) {
			for (var i in oldActivePath.items) {
				if (oldActivePath.items[i].data.items['parentElement'] == intersectPoint) {
					intersectSibling = oldActivePath.items[i];
					break;
				}
			}
		}

		var isRootLevel = in_newActiveElement.data.items['level'] == 1 ? true : false;
		var closeDelay = isRootLevel ? settings.items['closeMouseoutMenuDelay'] : settings.items['closeMouseoutSubMenuDelay'];
	}
	else {
		var isRootLevel = false;
		var closeDelay = settings.items['closeMouseoutMenuDelay'];
		window.status = window.defaultStatus;
	}

	if (typeof(in_closeDelay) != 'undefined') {
		closeDelay = in_closeDelay;
	}

	if (intersectSibling) {
		if (!isRootLevel) {
			domMenu_toggleHighlight(intersectSibling, false);
		}
		else {
			for (var i in domMenu_timeouts['close'].items) {
				if (!oldActivePath.hasItem(i)) {

					var tmp_element = document.getElementById(i);
					if (tmp_element.data.items['basename'] == basename) {
						oldActivePath.setItem(i, tmp_element);
					}
				}
			}
		}
	}

	for (var i in oldActivePath.items) {
		if (newActivePath.hasItem(i)) {
			continue;
		}

		domMenu_cancelTimeout(i, 'close');

		if (isRootLevel) {
			domMenu_toggleHighlight(oldActivePath.items[i], false); 
			domMenu_toggleSubMenu(oldActivePath.items[i], 'hidden');
		}
		else {
			var tmp_args = new Array();
			tmp_args[0] = oldActivePath.items[i];
			var tmp_function = 'domMenu_toggleHighlight(argv[0], false); domMenu_toggleSubMenu(argv[0], ' + domMenu_quote('hidden') + ');';
			if (oldActivePath.items[i].data.items['level'] == 1) {
				tmp_function += ' domMenu_activeElement.setItem(' + domMenu_quote(basename) + ', false);';
			}

			domMenu_callTimeout(tmp_function, closeDelay, tmp_args, i, 'close');
		}
	}
	
	return in_newActiveElement;
}

function domMenu_deactivate(in_basename, in_delay)
{
	if (!in_delay) {
		in_delay = 0;
	}

	domMenu_changeActivePath(false, domMenu_activeElement.items[in_basename], in_delay);
}

function domMenu_openEvent(in_this, in_event, in_openDelay)
{
	if (domMenu_isGecko) {
		window.getSelection().removeAllRanges();
	}

	var eventObj = domMenu_isIE ? event : in_event;
	var currentTarget = domMenu_isIE ? in_this : eventObj.currentTarget;
	var basename = currentTarget.data.items['basename'];

	if (eventObj.type != 'mousedown' && domMenu_getElement(eventObj[domMenu_eventFrom], basename) == currentTarget) {
		return;
	}

	if (eventObj.type == 'mousedown' && domMenu_activeElement.items[basename]) {
		var settings = domMenu_settings.items[basename];
		domMenu_changeActivePath(false, domMenu_activeElement.items[basename], currentTarget.data.items['level'] == 1 ? settings.items['closeClickMenuDelay'] : settings.items['closeClickSubMenuDelay']);
		return;
	}

	if (currentTarget.data.items['numChildren']) {
		if (currentTarget.data.items['level'] == 1 && domMenu_activeElement.items[basename]) {
			domMenu_activateSubMenu(currentTarget);
			domMenu_activeElement.setItem(basename, domMenu_changeActivePath(currentTarget, domMenu_activeElement.items[basename]));
		}
		else {
			domMenu_activeElement.setItem(basename, domMenu_changeActivePath(currentTarget, domMenu_activeElement.items[basename]));
			var tmp_args = new Array();
			tmp_args[0] = currentTarget;
			var tmp_function = 'if (!domMenu_activeElement.items[' + domMenu_quote(basename) + ']) { domMenu_activeElement.setItem(' + domMenu_quote(basename) + ', argv[0]); } domMenu_activateSubMenu(argv[0]);';
			domMenu_callTimeout(tmp_function, in_openDelay, tmp_args, currentTarget.id, 'open');
		}
	}
	else {
		domMenu_activeElement.setItem(basename, domMenu_changeActivePath(currentTarget, domMenu_activeElement.items[basename]));
	}
}

function domMenu_closeEvent(in_this, in_event)
{
	var eventObj = domMenu_isIE ? event : in_event;
	var currentTarget = domMenu_isIE ? in_this : eventObj.currentTarget;
	var basename = currentTarget.data.items['basename'];
	var relatedTarget = domMenu_getElement(eventObj[domMenu_eventTo], basename);

	if (domMenu_activeElement.items[basename]) {
		if (!relatedTarget) {
			domMenu_changeActivePath(false, domMenu_activeElement.items[basename]);
		}
	}
	else {
		if (currentTarget != relatedTarget) {
			domMenu_cancelTimeout(currentTarget.id, 'open');
			domMenu_toggleHighlight(currentTarget, false);
		}
	}
}	

function domMenu_getElement(in_object, in_basename)
{
	while (in_object) {
		try {
			if (in_object.id && in_object.id.search(new RegExp('^' + in_basename + '(\\[[0-9]\\])*\\[[1-9]\\]$')) == 0) {
				return in_object;
			}
			else {
				in_object = in_object.parentNode;
			}
		}
		catch(e) {
			return false;
		}
	}
	
	return false;
}

function domMenu_detectCollisions(in_menuObj, in_recover)
{
	if (domMenu_isOpera) {
		return;
	}

	if (typeof(domMenu_selectElements) == 'undefined') {
		domMenu_selectElements = document.getElementsByTagName('select');
	}
	
	if (in_recover) {
		for (var cnt = 0; cnt < domMenu_selectElements.length; cnt++) {
			if (domMenu_isGecko && domMenu_selectElements[cnt].size <= 1 && !domMenu_selectElements[cnt].multiple) {
				continue;
			}

			var thisSelect = domMenu_selectElements[cnt];
			thisSelect.hideList.removeItem(in_menuObj.id);
			if (!thisSelect.hideList.length) {
				domMenu_selectElements[cnt].style.visibility = 'visible';
			}
		}

		return;
	}

	var menuOffsets = domMenu_getOffsets(in_menuObj);

	for (var cnt = 0; cnt < domMenu_selectElements.length; cnt++) {
		var thisSelect = domMenu_selectElements[cnt];

		if (domMenu_isGecko && thisSelect.size <= 1 && !thisSelect.multiple) {
			continue;
		}

		if (!thisSelect.hideList) {
			thisSelect.hideList = new domMenu_Hash();
		}

		var selectOffsets = domMenu_getOffsets(thisSelect); 
		if (domMenu_isGecko) {
			selectOffsets.setItem('left', selectOffsets.items['left'] + thisSelect.offsetWidth - domMenu_scrollbarWidth);
			selectOffsets.setItem('leftCenter', selectOffsets.items['left'] + domMenu_scrollbarWidth/2);
			selectOffsets.setItem('radius', Math.max(thisSelect.offsetHeight, domMenu_scrollbarWidth/2));
		}

		var center2centerDistance = Math.sqrt(Math.pow(selectOffsets.items['leftCenter'] - menuOffsets.items['leftCenter'], 2) + Math.pow(selectOffsets.items['topCenter'] - menuOffsets.items['topCenter'], 2));
		var radiusSum = selectOffsets.items['radius'] + menuOffsets.items['radius'];
		if (center2centerDistance < radiusSum) {
			if ((menuOffsets.items['leftCenter'] <= selectOffsets.items['leftCenter'] && menuOffsets.items['right'] < selectOffsets.items['left']) ||
				(menuOffsets.items['leftCenter'] > selectOffsets.items['leftCenter'] && menuOffsets.items['left'] > selectOffsets.items['right']) ||
				(menuOffsets.items['topCenter'] <= selectOffsets.items['topCenter'] && menuOffsets.items['bottom'] < selectOffsets.items['top']) ||
				(menuOffsets.items['topCenter'] > selectOffsets.items['topCenter'] && menuOffsets.items['top'] > selectOffsets.items['bottom'])) {
				thisSelect.hideList.removeItem(in_menuObj.id);
				if (!thisSelect.hideList.length) {
					thisSelect.style.visibility = 'visible';
				}
			}
			else {
				thisSelect.hideList.setItem(in_menuObj.id, true);
				thisSelect.style.visibility = 'hidden';
			}
		}
	}
}

function domMenu_getOffsets(in_object)
{
	var originalObject = in_object;
	var originalWidth = in_object.offsetWidth;
	var originalHeight = in_object.offsetHeight;
	var offsetLeft = 0;
	var offsetTop = 0;

	while (in_object) {
		offsetLeft += in_object.offsetLeft;
		offsetTop += in_object.offsetTop;
		in_object = in_object.offsetParent;
	}
	
	return new domMenu_Hash(
		'left', offsetLeft,
		'top', offsetTop,
		'right', offsetLeft + originalWidth,
		'bottom', offsetTop + originalHeight,
		'leftCenter', offsetLeft + originalWidth/2,
		'topCenter', offsetTop + originalHeight/2,
		'radius', Math.max(originalWidth, originalHeight) 
	);
}

function domMenu_callTimeout(in_function, in_timeout, in_args, in_basename, in_type)
{
	if (in_timeout == 0) {
		var tmp_function = new Function('argv', in_function);
		tmp_function(in_args);
	}
	else if (in_timeout > 0) {
		var tmp_function = new Function('argv', in_function + ' domMenu_timeouts[' + domMenu_quote(in_type) + '].removeItem(' + domMenu_quote(in_basename) + ');');

		var tmp_args = new Array();
		for (var i = 0; i < in_args.length; i++) {
			tmp_args[i] = in_args[i];
		}

		if (!domMenu_isKonq && !domMenu_isIE50) {
			domMenu_timeouts[in_type].setItem(in_basename, setTimeout(function() { tmp_function(tmp_args); }, in_timeout));
		}
		else {
			var tmp_data = new Array();
			tmp_data['function'] = tmp_function;
			tmp_data['args'] = tmp_args;
			domMenu_timeoutStates[in_type].setItem(in_basename, tmp_data);
			var tmp_type = domMenu_quote(in_type);
			var tmp_basename = domMenu_quote(in_basename);

			domMenu_timeouts[in_type].setItem(in_basename, setTimeout('domMenu_timeoutStates[' + tmp_type + '].items[' + tmp_basename + '][' + domMenu_quote('function') + '](domMenu_timeoutStates[' + tmp_type + '].items[' + tmp_basename + '][' + domMenu_quote('args') + ']); domMenu_timeoutStates[' + tmp_type + '].removeItem(' + tmp_basename + ');', in_timeout));
		}
	}
}

function domMenu_cancelTimeout(in_basename, in_type)
{
	if (!domMenu_isKonq && !domMenu_isIE50) {
		clearTimeout(domMenu_timeouts[in_type].removeItem(in_basename));
	}
	else {
		if (domMenu_timeoutStates[in_type].hasItem(in_basename)) {
			clearTimeout(domMenu_timeouts[in_type].removeItem(in_basename));
			domMenu_timeoutStates[in_type].removeItem(in_basename);
		}
	}
}

function domMenu_correctEdgeBleed(in_width, in_height, in_x, in_y, in_padding, in_axis)
{
	if (domMenu_isIE && !domMenu_isIE5) {
		var pageHeight = document.documentElement.clientHeight;
	}
	else if (!domMenu_isKonq) {
		var pageHeight = document.body.clientHeight;
	}
	else {
		var pageHeight = window.innerHeight;
	}

	var pageYOffset = domMenu_isIE ? document.body.scrollTop : window.pageYOffset;
	var pageXOffset = domMenu_isIE ? document.body.scrollLeft : window.pageXOffset;
	

	if (in_axis == 'horizontal') {
		var bleedRight = (in_x - pageXOffset) + in_width - (document.body.clientWidth - in_padding);
		var bleedLeft = (in_x - pageXOffset) - in_padding;

		if (bleedRight > 0) {
			in_x -= bleedRight;
		}

		if (bleedLeft < 0) {
			in_x += bleedLeft;
		}
	}
	else {
		var bleedTop = (in_y - pageYOffset) - in_padding;
		var bleedBottom = (in_y - pageYOffset) + in_height - (pageHeight - in_padding);
		
		if (bleedBottom > 0) {
			in_y -= bleedBottom;
		}

		if (bleedTop < 0) {
			in_y += bleedTop;
		}
	}
	
	return new Array(in_x, in_y);
}

function domMenu_toggleSubMenu(in_parentElement, in_style)
{
	var subMenu = in_parentElement.data.items['subMenu'];
	if (subMenu && subMenu.style.visibility != in_style) {
		var settings = domMenu_settings.items[in_parentElement.data.items['basename']];
		var prefix = in_parentElement.data.items['level'] == 1 ? 'menu' : 'subMenu';
		var className = settings.items[prefix + 'ElementClass'];
		if (in_style == 'visible') {
			className += ' ' + settings.items[prefix + 'Element' + (in_style == 'visible' ? 'Active' : 'Hover') + 'Class'];
		}

		in_parentElement.firstChild.className = className;
		
		if (in_style == 'visible') {
			var tmp_offsets = domMenu_getOffsets(in_parentElement);
			if (in_parentElement.data.items['level'] == 1) {
				tmp_offsets.items['top'] += settings.items['verticalSubMenuOffsetY'];
				tmp_offsets.items['bottom'] += settings.items['verticalSubMenuOffsetY'];
				tmp_offsets.items['left'] += settings.items['verticalSubMenuOffsetX'];
				tmp_offsets.items['right'] += settings.items['verticalSubMenuOffsetX'];
			}

			if (!in_parentElement.data.items['offsets'].compare(tmp_offsets)) {
				in_parentElement.data.items['offsets'] = tmp_offsets;

				if (settings.items['axis'] == 'horizontal' && in_parentElement.data.items['level'] == 1) {
					var xCoor = tmp_offsets.items['left'];
					if (settings.items['verticalExpand'] == 'north') {
						var yCoor = tmp_offsets.items['top'] - subMenu.offsetHeight - settings.items['verticalSubMenuOffsetY'];
					}
					else {
						var yCoor = tmp_offsets.items['bottom'];
					}
				}
				else {
					var xCoor = tmp_offsets.items['right'] + settings.items['horizontalSubMenuOffsetX'];
					var yCoor = tmp_offsets.items['top'] + settings.items['horizontalSubMenuOffsetY'];
				}

				var minWidth = settings.items['subMenuMinWidth'];
				var renderedWidth = subMenu.offsetWidth;
				if (minWidth == 'inherit') {
					minWidth = in_parentElement.offsetWidth + settings.items['subMenuWidthCorrection'];
				}
				else if (minWidth == 'auto') {
					minWidth = renderedWidth;
				}

				if (domMenu_isKonq) {
					subMenu.firstChild.firstChild.firstChild.firstChild.style.width = Math.max(minWidth, renderedWidth) + 'px';
				}
				else {
					subMenu.firstChild.style.width = Math.max(minWidth, renderedWidth) + 'px';
				}
				
				var coordinates = domMenu_correctEdgeBleed(subMenu.offsetWidth, subMenu.offsetHeight, xCoor, yCoor, settings.items['screenPadding'], settings.items['axis']);
				subMenu.style.left = coordinates[0] + 'px';
				subMenu.style.top = coordinates[1] + 'px';

				if (settings.items['axis'] == 'horizontal' && settings.items['subMenuMinWidth'] == 'inherit') {
					subMenu.firstChild.style.width = Math.max(in_parentElement.offsetWidth + settings.items['subMenuWidthCorrection'], renderedWidth) + 'px';
				}
			}
		}

		if (domMenu_isKonq) {
			in_parentElement.firstChild.style.display = 'none';
			in_parentElement.firstChild.style.display = '';
		}

		subMenu.style.visibility = in_style;
		domMenu_detectCollisions(subMenu, (in_style == 'hidden'));
	}
}

function domMenu_toggleHighlight(in_element, in_status)
{
	if (!in_element.data.items['numChildren'] && !in_element.data.items['uri']) {
		return;
	}

	var settings = domMenu_settings.items[in_element.data.items['basename']];
	var prefix = in_element.data.items['level'] == 1 ? 'menu' : 'subMenu';
	var className = settings.items[prefix + 'ElementClass'];
	var highlightElement = in_element.firstChild;

	var pseudoClass;
	if (in_status) {
		if (in_element.data.hasItem('subMenu') && in_element.data.items['subMenu'].style.visibility == 'visible') {
			pseudoClass = 'Active';
		}
		else if (in_element.data.items['numChildren'] || in_element.data.items['uri']) {
			pseudoClass = 'Hover';
		}
	}

	if (pseudoClass) {
		className += ' ' + settings.items[prefix + 'Element' + pseudoClass + 'Class'];
		if (highlightElement.childNodes.length == 2 && highlightElement.lastChild.style.display == 'none') {
			highlightElement.firstChild.style.display = 'none';
			highlightElement.lastChild.style.display = '';
		}
	}
	else {
		if (highlightElement.childNodes.length == 2 && highlightElement.firstChild.style.display == 'none') {
			highlightElement.lastChild.style.display = 'none';
			highlightElement.firstChild.style.display = '';
		}
	}

	highlightElement.className = className;

	if (domMenu_isKonq) {
		highlightElement.style.display = 'none';
		highlightElement.style.display = '';
	}
}

function domMenu_resolveLink(in_this, in_event)
{
	var eventObj = domMenu_isIE ? event : in_event;
	var currentTarget = domMenu_isIE ? in_this : eventObj.currentTarget;
	var basename = currentTarget.data.items['basename'];

	domMenu_changeActivePath(false, domMenu_activeElement.items[basename], 0);

	if (currentTarget.data.items['uri']) {
		window.status = 'Resolving Link...';

		if (!currentTarget.data.items['target'] || currentTarget.data.items['target'] == '_self') {
			window.location = currentTarget.data.items['uri'];
		}
		else {
			window.open(currentTarget.data.items['uri'], currentTarget.data.items['target']);
		}
	}
}

function domMenu_quote(in_string)
{
	return "'" + in_string.replace(new RegExp("'", 'g'), "\\'") + "'";
}

<!-- ---------------------------------------------------------------------------------------- -->