// Compressed version of the DOM Menu Library //

var BrowserDetect = { init: function() { this.engine = "unknown engine"; this.browser = this.searchString(this.dataBrowser) || "unknown browser"; this.version = this.searchVersion(navigator.userAgent) || this.searchVersion(navigator.appVersion) || "unknown version"; this.OS = this.searchString(this.dataOS) || "unknown OS"; this.mode = (document.compatMode && document.compatMode == 'CSS1Compat' ? 'Strict' : 'Quirks'); }, searchString: function(data) {
    for (var i = 0; i < data.length; i++) {
        var dataString = data[i].string; var dataProp = data[i].prop; this.versionSearchString = data[i].versionSearch || data[i].identity; if (dataString) {
            if (dataString.indexOf(data[i].subString) != -1) {
                if (data[i].engine) { this.engine = data[i].engine; }
                return data[i].identity;
            } 
        }
        else if (dataProp) {
            if (data[i].engine) { this.engine = data[i].engine; }
            return data[i].identity;
        } 
    } 
}, searchVersion: function(dataString) {
    var index = dataString.indexOf(this.versionSearchString); if (index == -1) { return; }
    return parseFloat(dataString.substring(index + this.versionSearchString.length + 1));
}, dataBrowser: [{ string: navigator.userAgent, subString: "OmniWeb", versionSearch: "OmniWeb/", identity: "OmniWeb", engine: "WebCore" }, { string: navigator.vendor, subString: "Apple", identity: "Safari", engine: "KHTML" }, { prop: window.opera, identity: "Opera", engine: "Presto" }, { string: navigator.vendor, subString: "iCab", identity: "iCab", engine: "iCab" }, { string: navigator.vendor, subString: "KDE", identity: "Konqueror", engine: "KHTML" }, { string: navigator.userAgent, subString: "Firefox", identity: "Firefox", engine: "Gecko" }, { string: navigator.vendor, subString: "Camino", identity: "Camino", engine: "Gecko" }, { string: navigator.userAgent, subString: "Netscape", identity: "Netscape", engine: "Gecko" }, { string: navigator.userAgent, subString: "MSIE", identity: "Explorer", versionSearch: "MSIE", engine: "Trident" }, { string: navigator.userAgent, subString: "Gecko", identity: "Mozilla", versionSearch: "rv", engine: "Gecko" }, { string: navigator.userAgent, subString: "Mozilla", identity: "Netscape", versionSearch: "Mozilla"}], dataOS: [{ string: navigator.platform, subString: "Win", identity: "Windows" }, { string: navigator.platform, subString: "Mac", identity: "Mac" }, { string: navigator.platform, subString: "Linux", identity: "Linux"}]
}; BrowserDetect.init(); var domLib_isMac = BrowserDetect.OS == 'Mac'; var domLib_isWin = BrowserDetect.OS == 'Windows'; var domLib_isGecko = BrowserDetect.engine == 'Gecko'; var domLib_isOpera = BrowserDetect.browser == 'Opera'; var domLib_isSafari = BrowserDetect.browser == 'Safari'; var domLib_isKonq = BrowserDetect.browser == 'Konqueror'; var domLib_isKHTML = BrowserDetect.engine == 'KHTML'; var domLib_isIE = BrowserDetect.browser == 'Explorer'; var domLib_isIE50 = (domLib_isIE && BrowserDetect.version == 5); var domLib_isIE5 = (domLib_isIE && BrowserDetect.version >= 5 && BrowserDetect.version < 6); var domLib_isMacIE = (domLib_isIE && domLib_isMac); var domLib_standardsMode = BrowserDetect.mode == 'Strict'; var domLib_useLibrary = ((domLib_isOpera && BrowserDetect.version >= 7) || domLib_isKHTML || (domLib_isIE && BrowserDetect.version >= 5) || domLib_isGecko || domLib_isMacIE || document.defaultView); var domLib_hasBrokenTimeout = (domLib_isMacIE || (domLib_isKonq && BrowserDetect.version >= 3.2)); var domLib_canFade = (domLib_isGecko || domLib_isIE || domLib_isSafari || domLib_isOpera); var domLib_canDrawOverSelect = ((domLib_isIE && BrowserDetect.version >= 7) || domLib_isMac || domLib_isOpera || domLib_isGecko); var domLib_canDrawOverFlash = (domLib_isMac || domLib_isWin); var domLib_detectObstructionsEnabled = true; var domLib_eventTarget = domLib_isIE ? 'srcElement' : 'currentTarget'; var domLib_eventButton = domLib_isIE ? 'button' : 'which'; var domLib_eventTo = domLib_isIE ? 'toElement' : 'relatedTarget'; var domLib_stylePointer = domLib_isIE ? 'hand' : 'pointer'; var domLib_styleNoMaxWidth = domLib_isOpera ? '10000px' : 'none'; var domLib_hidePosition = '-1000px'; var domLib_scrollbarWidth = 14; var domLib_autoId = 1; var domLib_zIndex = 100; var domLib_collisionElements; var domLib_collisionsCached = false; var domLib_timeoutStateId = 0; var domLib_timeoutStates = new Hash(); if (!document.ELEMENT_NODE)
{ document.ELEMENT_NODE = 1; document.ATTRIBUTE_NODE = 2; document.TEXT_NODE = 3; document.DOCUMENT_NODE = 9; document.DOCUMENT_FRAGMENT_NODE = 11; }

function domLib_clone(obj) {
    var copy = {}; for (var i in obj) {
    var value = obj[i];
        try 
        {
            if (value != null && typeof (value) == 'object' && value != window && !value.nodeType)
            { copy[i] = domLib_clone(value); }
            else
            { copy[i] = value; } 
        }
        catch (e)
    { copy[i] = value; } 
    }
    return copy;
}

function Hash() {
    this.length = 0; this.numericLength = 0; this.elementData = []; for (var i = 0; i < arguments.length; i += 2) {
        if (typeof (arguments[i + 1]) != 'undefined') {
            this.elementData[arguments[i]] = arguments[i + 1]; this.length++; if (arguments[i] == parseInt(arguments[i]))
            { this.numericLength++; } 
        } 
    } 
}
Hash.prototype.get = function(in_key) {
    if (typeof (this.elementData[in_key]) != 'undefined') { return this.elementData[in_key]; }
    return null;
}
Hash.prototype.set = function(in_key, in_value) {
    if (typeof (in_value) != 'undefined') {
        if (typeof (this.elementData[in_key]) == 'undefined') {
            this.length++; if (in_key == parseInt(in_key))
            { this.numericLength++; } 
        }
        return this.elementData[in_key] = in_value;
    }
    return false;
}
Hash.prototype.remove = function(in_key) {
    var tmp_value; if (typeof (this.elementData[in_key]) != 'undefined') {
        this.length--; if (in_key == parseInt(in_key))
        { this.numericLength--; }
        tmp_value = this.elementData[in_key]; delete this.elementData[in_key];
    }
    return tmp_value;
}
Hash.prototype.size = function()
{ return this.length; }
Hash.prototype.has = function(in_key)
{ return typeof (this.elementData[in_key]) != 'undefined'; }
Hash.prototype.find = function(in_obj) {
    for (var tmp_key in this.elementData) {
        if (this.elementData[tmp_key] == in_obj)
        { return tmp_key; } 
    }
    return null;
}
Hash.prototype.merge = function(in_hash) {
    for (var tmp_key in in_hash.elementData) {
        if (typeof (this.elementData[tmp_key]) == 'undefined') {
            this.length++; if (tmp_key == parseInt(tmp_key))
            { this.numericLength++; } 
        }
        this.elementData[tmp_key] = in_hash.elementData[tmp_key];
    } 
}
Hash.prototype.compare = function(in_hash) {
    if (this.length != in_hash.length)
    { return false; }
    for (var tmp_key in this.elementData) {
        if (this.elementData[tmp_key] != in_hash.elementData[tmp_key])
        { return false; } 
    }
    return true;
}
function domLib_isDescendantOf(in_object, in_ancestor, in_bannedTags) {
    if (in_object == null)
    { return false; }
    if (in_object == in_ancestor)
    { return true; }
    if (typeof (in_bannedTags) != 'undefined' && (',' + in_bannedTags.join(',') + ',').indexOf(',' + in_object.tagName + ',') != -1)
    { return false; }
    while (in_object != document.documentElement) {
        try {
            if ((tmp_object = in_object.offsetParent) && tmp_object == in_ancestor)
            { return true; }
            else if ((tmp_object = in_object.parentNode) == in_ancestor)
            { return true; }
            else
            { in_object = tmp_object; } 
        }
        catch (e)
{ return false; } 
    }
    return false;
}
function domLib_detectObstructions(in_object, in_recover, in_useCache) {
    if (!domLib_collisionsCached) {
        var tags = []; if (!domLib_canDrawOverFlash)
        { tags[tags.length] = 'object'; }
        if (!domLib_canDrawOverSelect)
        { tags[tags.length] = 'select'; }
        domLib_collisionElements = domLib_getElementsByTagNames(tags, true); domLib_collisionsCached = in_useCache;
    }
    if (in_recover) {
        for (var cnt = 0; cnt < domLib_collisionElements.length; cnt++) {
            var thisElement = domLib_collisionElements[cnt]; if (!thisElement.hideList)
            { thisElement.hideList = new Hash(); }
            thisElement.hideList.remove(in_object.id); if (!thisElement.hideList.length) {
                domLib_collisionElements[cnt].style.visibility = 'visible'; if (domLib_isKonq)
                { domLib_collisionElements[cnt].style.display = ''; } 
            } 
        }
        return;
    }
    else if (domLib_collisionElements.length == 0)
    { return; }
    var objectOffsets = domLib_getOffsets(in_object); for (var cnt = 0; cnt < domLib_collisionElements.length; cnt++) {
        var thisElement = domLib_collisionElements[cnt]; if (domLib_isDescendantOf(thisElement, in_object))
        { continue; }
        if (domLib_isKonq && thisElement.tagName == 'SELECT' && (thisElement.size <= 1 && !thisElement.multiple))
        { continue; }
        if (!thisElement.hideList)
        { thisElement.hideList = new Hash(); }
        var selectOffsets = domLib_getOffsets(thisElement); var center2centerDistance = Math.sqrt(Math.pow(selectOffsets.get('leftCenter') - objectOffsets.get('leftCenter'), 2) + Math.pow(selectOffsets.get('topCenter') - objectOffsets.get('topCenter'), 2)); var radiusSum = selectOffsets.get('radius') + objectOffsets.get('radius'); if (center2centerDistance < radiusSum) {
            if ((objectOffsets.get('leftCenter') <= selectOffsets.get('leftCenter') && objectOffsets.get('right') < selectOffsets.get('left')) || (objectOffsets.get('leftCenter') > selectOffsets.get('leftCenter') && objectOffsets.get('left') > selectOffsets.get('right')) || (objectOffsets.get('topCenter') <= selectOffsets.get('topCenter') && objectOffsets.get('bottom') < selectOffsets.get('top')) || (objectOffsets.get('topCenter') > selectOffsets.get('topCenter') && objectOffsets.get('top') > selectOffsets.get('bottom'))) {
                thisElement.hideList.remove(in_object.id); if (!thisElement.hideList.length) {
                    thisElement.style.visibility = 'visible'; if (domLib_isKonq)
                    { thisElement.style.display = ''; } 
                } 
            }
            else {
                thisElement.hideList.set(in_object.id, true); thisElement.style.visibility = 'hidden'; if (domLib_isKonq)
                { thisElement.style.display = 'none'; } 
            } 
        } 
    } 
}
function domLib_getOffsets(in_object, in_preserveScroll) {
    if (typeof (in_preserveScroll) == 'undefined') { in_preserveScroll = false; }
    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; if (in_object && !in_preserveScroll)
        { offsetLeft -= in_object.scrollLeft; offsetTop -= in_object.scrollTop; } 
    }
    if (domLib_isMacIE) { offsetLeft += 10; offsetTop += 10; }
    return new 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 domLib_setTimeout(in_function, in_timeout, in_args) {
    if (typeof (in_args) == 'undefined')
    { in_args = []; }
    if (in_timeout == -1)
    { return 0; }
    else if (in_timeout == 0)
    { in_function(in_args); return 0; }
    var args = domLib_clone(in_args); if (!domLib_hasBrokenTimeout)
    { return setTimeout(function() { in_function(args); }, in_timeout); }
    else
    { var id = domLib_timeoutStateId++; var data = new Hash(); data.set('function', in_function); data.set('args', args); domLib_timeoutStates.set(id, data); data.set('timeoutId', setTimeout('domLib_timeoutStates.get(' + id + ').get(\'function\')(domLib_timeoutStates.get(' + id + ').get(\'args\')); domLib_timeoutStates.remove(' + id + ');', in_timeout)); return id; } 
}
function domLib_clearTimeout(in_id) {
    if (!domLib_hasBrokenTimeout)
    { if (in_id > 0) { clearTimeout(in_id); } }
    else {
        if (domLib_timeoutStates.has(in_id)) {
            clearTimeout(domLib_timeoutStates.get(in_id).get('timeoutId'))
            domLib_timeoutStates.remove(in_id);
        } 
    } 
}
function domLib_getEventPosition(in_eventObj) {
    var eventPosition = new Hash('x', 0, 'y', 0, 'scrollX', 0, 'scrollY', 0); if (domLib_isIE) {
        var doc = (domLib_standardsMode ? document.documentElement : document.body); if (doc)
        { eventPosition.set('x', in_eventObj.clientX + doc.scrollLeft); eventPosition.set('y', in_eventObj.clientY + doc.scrollTop); eventPosition.set('scrollX', doc.scrollLeft); eventPosition.set('scrollY', doc.scrollTop); } 
    }
    else
    { eventPosition.set('x', in_eventObj.pageX); eventPosition.set('y', in_eventObj.pageY); eventPosition.set('scrollX', in_eventObj.pageX - in_eventObj.clientX); eventPosition.set('scrollY', in_eventObj.pageY - in_eventObj.clientY); }
    return eventPosition;
}
function domLib_cancelBubble(in_event)
{ var eventObj = in_event ? in_event : window.event; eventObj.cancelBubble = true; }
function domLib_getIFrameReference(in_frame) {
    if (domLib_isGecko || domLib_isIE)
    { return in_frame.frameElement; }
    else {
        var name = in_frame.name; if (!name || !in_frame.parent)
        { return null; }
        var candidates = in_frame.parent.document.getElementsByTagName('iframe'); for (var i = 0; i < candidates.length; i++) {
            if (candidates[i].name == name)
            { return candidates[i]; } 
        }
        return null;
    } 
}
function domLib_getElementsByClass(in_class) {
    var elements = domLib_isIE5 ? document.all : document.getElementsByTagName('*'); var matches = []; var cnt = 0; for (var i = 0; i < elements.length; i++) {
        if ((" " + elements[i].className + " ").indexOf(" " + in_class + " ") != -1)
        { matches[cnt++] = elements[i]; } 
    }
    return matches;
}
function domLib_getElementsByTagNames(in_list, in_excludeHidden) {
    var elements = []; for (var i = 0; i < in_list.length; i++) {
        var matches = document.getElementsByTagName(in_list[i]); for (var j = 0; j < matches.length; j++) {
            if (matches[j].tagName == 'OBJECT' && domLib_isGecko) {
                var kids = matches[j].childNodes; var skip = false; for (var k = 0; k < kids.length; k++) {
                    if (kids[k].tagName == 'EMBED')
                    { skip = true; break; } 
                }
                if (skip) continue;
            }
            if (in_excludeHidden && domLib_getComputedStyle(matches[j], 'visibility') == 'hidden')
            { continue; }
            elements[elements.length] = matches[j];
        } 
    }
    return elements;
}
function domLib_getComputedStyle(in_obj, in_property) {
    if (domLib_isIE)
    { var humpBackProp = in_property.replace(/-(.)/, function(a, b) { return b.toUpperCase(); }); return eval('in_obj.currentStyle.' + humpBackProp); }
    else if (domLib_isKonq)
    { return eval('in_obj.style.' + in_property); }
    else
    { return document.defaultView.getComputedStyle(in_obj, '').getPropertyValue(in_property); } 
}
function makeTrue()
{ return true; }
function makeFalse()
{ return false; }
var domMenu_data = new Hash();
var domMenu_settings = new Hash();
domMenu_settings.set('global', new Hash('menuElementClassSpecial', 'domMenu_menuElementSpecial', 'menuElementHoverClassSpecial', 'domMenu_menuElementHoverSpecial', 'menuElementActiveClassSpecial', 'domMenu_menuElementHoverSpecial', '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', 'subMenuTargetFrame', false, 'targetDocumentXOrigin', 0, 'targetDocumentYOrigin', 0, 'menuBarWidth', '100%', 'subMenuMinWidth', 'inherit', 'distributeSpace', true, 'axis', 'horizontal', 'verticalExpand', 'south', 'horizontalExpand', 'east', 'expandMenuArrowUrl', 'arrow.gif', 'subMenuWidthCorrection', 0, 'verticalSubMenuOffsetY', 0, 'verticalSubMenuOffsetX', 0, 'horizontalSubMenuOffsetX', 0, 'horizontalSubMenuOffsetY', 0, 'screenPadding', 0, 'openMouseoverMenuDelay', 300, 'openMousedownMenuDelay', -1, 'closeMouseoutMenuDelay', 800, 'closeClickMenuDelay', -1, 'openMouseoverSubMenuDelay', 300, 'openClickSubMenuDelay', -1, 'closeMouseoutSubMenuDelay', 300, 'closeClickSubMenuDelay', -1, 'baseZIndex', 100, 'baseUri', '')); var domMenu_data; var domMenu_selectElements; var domMenu_scrollbarWidth = 14; var domMenu_eventTo = domLib_isIE ? 'toElement' : 'relatedTarget';
var domMenu_eventFrom = domLib_isIE ? 'fromElement' : 'relatedTarget';
var domMenu_activeElement = new Hash();
var domMenu_timeouts = []; domMenu_timeouts['open'] = new Hash(); 
domMenu_timeouts['close'] = new Hash();
var domMenu_pointerStyle = domLib_isIE ? 'hand' : 'pointer'; 
function domMenu_activate(in_containerId, in_disableWarning) {
    var container;
    var data; 
    if (!domLib_useLibrary) {
        if (!in_disableWarning)
        { alert('domMenu: Browser not supported.  Menu will be disabled.'); }
        return;
    }
    if (!(container = document.getElementById(in_containerId)) || !(data = domMenu_data.get(in_containerId)) || data.numericLength == 0) {
        if (!in_disableWarning) { alert('domMenu: Menu failed to load.'); }
        return;
    }
    if (domLib_isIE && window.attachEvent) { window.attachEvent('onunload', domMenu_unloadEventCache); }
    if (!domMenu_settings.has(in_containerId)) { domMenu_settings.set(in_containerId, new Hash()); }

    var settings = domMenu_settings.get(in_containerId);
    for (var i in domMenu_settings.get('global').elementData) {
        if (!settings.has(i)) {
            settings.set(i, domMenu_settings.get('global').get(i));
        } 
    }
    container.data = new Hash('parentElement', false, 'numChildren', data.numericLength, 'childElements', new Hash(), 'level', 0, 'index', 1);
    var distributeRatio = Math.round(100 / container.data.get('numChildren')) + '%';
    var rootMenu = document.createElement('div'); rootMenu.id = in_containerId + '-0'; rootMenu.className = settings.get('menuBarClass'); container.data.set('subMenu', rootMenu);
    var rootMenuTable = rootMenu.appendChild(document.createElement('table')); 
    if (domLib_isKonq || domLib_isMacIE) { rootMenuTable.cellSpacing = 0; }

    rootMenuTable.style.border = 0;
    rootMenuTable.style.borderCollapse = 'collapse';
    rootMenuTable.style.width = settings.get('menuBarWidth');
    var rootMenuTableBody = rootMenuTable.appendChild(document.createElement('tbody'));
    var numSiblings = container.data.get('numChildren'); 
    for (var index = 1; index <= numSiblings; index++) {
        if (index == 1 || settings.get('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.get('childElements').set(rootMenuTableCell.id, rootMenuTableCell);
        rootMenuTableCell.data = data.get(index);
        rootMenuTableCell.data.merge(new Hash('basename', in_containerId, 'parentElement', container, 'numChildren', rootMenuTableCell.data.numericLength, 'childElements', new Hash(), 'offsets', new Hash(), 'level', container.data.get('level') + 1, 'index', index));
        rootMenuTableCell.style.cursor = 'default';
        if (settings.get('axis') == 'horizontal') {
            if (settings.get('distributeSpace')) {
                rootMenuTableCell.style.width = distributeRatio;
            } 
        }
        rootMenuTableCell.style.verticalAlign = 'top';
        var rootElement = rootMenuTableCell.appendChild(document.createElement('div')); 
        if (rootMenuTableCell.data.has('specialColor') && rootMenuTableCell.data.get('specialColor') == 'true') {
            rootElement.className = settings.get('menuElementClassSpecial');
        }
        else {
            rootElement.className = settings.get('menuElementClass');
        }
        var spanElement = rootElement.appendChild(document.createElement('span'));
        spanElement.innerHTML = rootMenuTableCell.data.get('contents').replace(/\/\/\//, settings.get('baseUri'));
        if (rootMenuTableCell.data.has('contentsHover')) {
            spanElement = rootElement.appendChild(document.createElement('span'));
            spanElement.style.display = 'none';
            spanElement.innerHTML = rootMenuTableCell.data.get('contentsHover').replace(/\/\/\//, settings.get('baseUri')); 
        }
        if (domLib_isMacIE) {
            rootMenuTableCell.appendChild(document.createTextNode("\n")); 
        }
        rootMenuTableCell.onmouseover = domMenu_openMenuOnmouseoverHandler;
        rootMenuTableCell.onmouseout = domMenu_closeMenuHandler;
        if (settings.get('openMousedownMenuDelay') >= 0 && rootMenuTableCell.data.get('numChildren')) {
            rootMenuTableCell.onmousedown = domMenu_openMenuOnmousedownHandler;
            rootMenuTableCell.onmouseup = domLib_cancelBubble;
            if (domLib_isIE) {
                rootMenuTableCell.ondblclick = domMenu_openMenuOnmousedownHandler;
            } 
        }
        else if (rootMenuTableCell.data.get('uri')) {
            rootMenuTableCell.style.cursor = domMenu_pointerStyle;
            rootMenuTableCell.onclick = domMenu_resolveLinkHandler; 
        }
        if (domLib_isIE) { rootMenuTableCell.onselectstart = makeFalse; }
        rootMenuTableCell.oncontextmenu = makeFalse;
    }
    rootMenu = container.appendChild(rootMenu); 
    if (domLib_detectObstructionsEnabled) { domLib_detectObstructions(rootMenu, false, false); }
}

function domMenu_activateSubMenu(in_parentElement) {
    if (domLib_isMacIE) { return; }

    if (in_parentElement.data.has('subMenu')) { domMenu_toggleSubMenu(in_parentElement, 'visible'); return; }

    var settings = domMenu_settings.get(in_parentElement.data.get('basename'));
    var targetDoc = document;
    var targetFrame = settings.get('subMenuTargetFrame'); 
    if (targetFrame) { targetDoc = targetFrame.document; }
    var menu = targetDoc.createElement('div'); 
    menu.id = in_parentElement.id + '-0';
    menu.className = settings.get('subMenuBarClass');
    menu.style.zIndex = settings.get('baseZIndex');
    menu.style.position = 'absolute';
    menu.style.visibility = 'hidden';
    menu.style.top = 0;
    menu.style.left = 0;
    in_parentElement.data.set('subMenu', menu);
    var menuTable = menu.appendChild(targetDoc.createElement('table')); 
    if (domLib_isOpera) { menuTable.style.width = '1px'; menuTable.style.whiteSpace = 'nowrap'; }
    if (domLib_isKonq || domLib_isMacIE) { menuTable.cellSpacing = 0; }

    menuTable.style.border = 0;
    menuTable.style.borderCollapse = 'collapse';
    var menuTableBody = menuTable.appendChild(targetDoc.createElement('tbody'));
    var numSiblings = in_parentElement.data.get('numChildren'); 
    for (var index = 1; index <= numSiblings; index++) {
        var dataIndex = in_parentElement.data.get('level') == 1 && settings.get('verticalExpand') == 'north' && settings.get('axis') == 'horizontal' ? numSiblings + 1 - index : index;
        var menuTableCell = menuTableBody.appendChild(targetDoc.createElement('tr')).appendChild(targetDoc.createElement('td')); menuTableCell.style.padding = 0;
        menuTableCell.id = in_parentElement.id + '-' + dataIndex;
        in_parentElement.data.get('childElements').set(menuTableCell.id, menuTableCell);
        menuTableCell.data = in_parentElement.data.get(dataIndex);
        menuTableCell.data.merge(new Hash('basename', in_parentElement.data.get('basename'), 'parentElement', in_parentElement, 'numChildren', menuTableCell.data.numericLength, 'childElements', new Hash(), 'offsets', new Hash(), 'level', in_parentElement.data.get('level') + 1, 'index', index));
        menuTableCell.style.cursor = 'default';
        var element = menuTableCell.appendChild(targetDoc.createElement('div'));
        var outerElement = element; 
        outerElement.className = settings.get('subMenuElementClass'); 
        if (menuTableCell.data.get('numChildren')) {
            element = outerElement.appendChild(targetDoc.createElement('div'));
            element.style.backgroundImage = 'url(' + settings.get('expandMenuArrowUrl') + ')';
            element.style.backgroundRepeat = 'no-repeat';
            if (settings.get('horizontalExpand') == 'east') {
                element.style.backgroundPosition = 'right center';
                element.style.paddingRight = '12px'; 
            }
            else {
                element.style.backgroundPosition = 'left center';
                element.style.paddingLeft = '12px'; 
            } 
        }
        if (domLib_isMacIE) {
            element.appendChild(targetDoc.createTextNode(menuTableCell.data.get('contents')));
            menuTableCell.appendChild(targetDoc.createTextNode("\n")); 
        }
        else {
            element.innerHTML = menuTableCell.data.get('contents'); 
        }
        
        menuTableCell.onmouseover = domMenu_openSubMenuOnmouseoverHandler;
        menuTableCell.onmouseout = domMenu_closeMenuHandler;
        if (settings.get('openClickSubMenuDelay') >= 0 && menuTableCell.data.get('numChildren')) {
            menuTableCell.onmousedown = domMenu_openSubMenuOnclickHandler;
            menuTableCell.onmouseup = domLib_cancelBubble;
            if (domLib_isIE) {
                menuTableCell.ondblclick = domMenu_openSubMenuOnclickHandler;
            } 
        }
        else if (menuTableCell.data.get('uri')) {
            menuTableCell.style.cursor = domMenu_pointerStyle;
            menuTableCell.onclick = domMenu_resolveLinkHandler; 
        }
        else if (!menuTableCell.data.get('numChildren')) {
            outerElement.className += ' ' + settings.get('subMenuElementHeadingClass'); 
        }
        
        if (domLib_isIE) { menuTableCell.onselectstart = makeFalse; }
        menuTableCell.oncontextmenu = makeFalse;
    }
    
    menu = targetDoc.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'].elementData) {
        domLib_clearTimeout(domMenu_timeouts['open'].get(i)); 
    }
    var basename = in_oldActiveElement ? in_oldActiveElement.data.get('basename') : in_newActiveElement.data.get('basename');
    var settings = domMenu_settings.get(basename); 
    var oldActivePath = new Hash();
    if (in_oldActiveElement) {
        var tmp_newActiveLevel = in_newActiveElement ? in_newActiveElement.data.get('level') : -1;
        var tmp_oldActivePathElement = in_oldActiveElement;
        do {
            oldActivePath.elementData[tmp_oldActivePathElement.id] = tmp_oldActivePathElement;
            if (tmp_newActiveLevel >= 0 && tmp_oldActivePathElement.data.get('level') == tmp_newActiveLevel) {
                domMenu_toggleHighlight(tmp_oldActivePathElement, false);
            }
        } while ((tmp_oldActivePathElement = tmp_oldActivePathElement.data.get('parentElement')) && tmp_oldActivePathElement.id != basename);

        if (!in_oldActiveElement.data.get('subMenu') || in_oldActiveElement.data.get('subMenu').style.visibility == 'hidden') {
            domMenu_toggleHighlight(in_oldActiveElement, false);
        } 
    }

    var newActivePath = new Hash();
    var intersectPoint; 
    if (in_newActiveElement) {
        var actualActiveElement = in_newActiveElement;
        window.status = in_newActiveElement.data.get('statusText') + ' ';
        if (!in_oldActiveElement) {
            domLib_clearTimeout(domMenu_timeouts['close'].get(in_newActiveElement.id));
            domMenu_toggleHighlight(in_newActiveElement, true);
            return false; 
        }
        else if (oldActivePath.has(in_newActiveElement.id)) {
            in_newActiveElement = in_oldActiveElement; 
        }
        var tmp_newActivePathElement = in_newActiveElement; 
        do {
            if (!intersectPoint && oldActivePath.has(tmp_newActivePathElement.id)) {
                intersectPoint = tmp_newActivePathElement; 
            }
            newActivePath.set(tmp_newActivePathElement.id, tmp_newActivePathElement);
            domLib_clearTimeout(domMenu_timeouts['close'].get(tmp_newActivePathElement.id));
            if (tmp_newActivePathElement != in_oldActiveElement || actualActiveElement == in_oldActiveElement) {
                domMenu_toggleHighlight(tmp_newActivePathElement, true); 
            }
        } while ((tmp_newActivePathElement = tmp_newActivePathElement.data.get('parentElement')) && tmp_newActivePathElement.id != basename);

        if (in_newActiveElement.data.get('parentElement') == in_oldActiveElement) {
            return in_newActiveElement; 
        }
        else if (in_newActiveElement == in_oldActiveElement) {
            return in_newActiveElement; 
        }
        var intersectSibling;
        if (intersectPoint && oldActivePath.length > 0) {
            for (var i in oldActivePath.elementData) {
                if (oldActivePath.get(i).data.get('parentElement') == intersectPoint) {
                    intersectSibling = oldActivePath.get(i);
                    break;
                }
            } 
        }
        var isRootLevel = in_newActiveElement.data.get('level') == 1 ? true : false; 
        var closeDelay = isRootLevel ? settings.get('closeMouseoutMenuDelay') : settings.get('closeMouseoutSubMenuDelay');
    }
    else {
        var isRootLevel = false;
        var closeDelay = settings.get('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'].elementData) {
                if (!oldActivePath.has(i)) {
                    var tmp_element = document.getElementById(i);
                    if (tmp_element.data.get('basename') == basename) {
                        oldActivePath.set(i, tmp_element);
                    }
                }
            } 
        } 
    }
    for (var i in oldActivePath.elementData) {
        if (newActivePath.has(i)) {
            continue; 
        }
        domLib_clearTimeout(domMenu_timeouts['close'].get(i));
        if (isRootLevel) {
            domMenu_toggleHighlight(oldActivePath.get(i), false);
            domMenu_toggleSubMenu(oldActivePath.get(i), 'hidden'); 
        }
        else {
            domMenu_timeouts['close'].set(i, domLib_setTimeout(domMenu_closeMenuCallback, closeDelay, [oldActivePath.get(i), basename])); 
        } 
    }
    return in_newActiveElement;
}

function domMenu_deactivate(in_basename, in_delay) {
    if (!in_delay) { in_delay = 0; }
    domMenu_changeActivePath(false, domMenu_activeElement.get(in_basename), in_delay);
}
function domMenu_openEvent(in_this, in_event, in_delayType) {
    if (domLib_isGecko) { window.getSelection().removeAllRanges(); }
    var eventObj = domLib_isIE ? event : in_event; if (domLib_isIE && in_this.data.get('level') > 1) { var targetFrame = domMenu_settings.get(in_this.data.get('basename')).get('subMenuTargetFrame'); if (targetFrame) { eventObj = targetFrame.event; } }
    var currentTarget = domLib_isIE ? in_this : eventObj.currentTarget; var basename = currentTarget.data.get('basename'); var settings = domMenu_settings.get(basename); if (eventObj.type != 'mousedown' && domMenu_getElement(eventObj[domMenu_eventFrom], basename) == currentTarget) { return; }
    if (eventObj.type == 'mousedown' && domMenu_activeElement.get(basename)) { domMenu_changeActivePath(false, domMenu_activeElement.get(basename), currentTarget.data.get('level') == 1 ? settings.get('closeClickMenuDelay') : settings.get('closeClickSubMenuDelay')); return; }
    if (currentTarget.data.get('numChildren')) {
        if (currentTarget.data.get('level') == 1 && domMenu_activeElement.get(basename)) { domMenu_activateSubMenu(currentTarget); domMenu_activeElement.set(basename, domMenu_changeActivePath(currentTarget, domMenu_activeElement.get(basename))); }
        else { domMenu_activeElement.set(basename, domMenu_changeActivePath(currentTarget, domMenu_activeElement.get(basename))); domMenu_timeouts['open'].set(currentTarget.id, domLib_setTimeout(domMenu_openMenuCallback, settings.get(in_delayType), [currentTarget, basename])); } 
    }
    else { domMenu_activeElement.set(basename, domMenu_changeActivePath(currentTarget, domMenu_activeElement.get(basename))); } 
}
function domMenu_closeEvent(in_this, in_event) {
    var eventObj = domLib_isIE ? event : in_event; if (domLib_isIE && in_this.data.get('level') > 1) { var targetFrame = domMenu_settings.get(in_this.data.get('basename')).get('subMenuTargetFrame'); if (targetFrame) { eventObj = targetFrame.event; } }
    var currentTarget = domLib_isIE ? in_this : eventObj.currentTarget; var basename = currentTarget.data.get('basename'); var relatedTarget = domMenu_getElement(eventObj[domMenu_eventTo], basename); if (domMenu_activeElement.get(basename)) { if (!relatedTarget) { domMenu_changeActivePath(false, domMenu_activeElement.get(basename)); } }
    else { if (currentTarget != relatedTarget) { domLib_clearTimeout(domMenu_timeouts['open'].get(currentTarget.id)); 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_correctEdgeBleed(in_width, in_height, in_x, in_y, in_padding, in_axis) {
    var doc = ((domLib_standardsMode && (domLib_isIE || domLib_isGecko)) ? document.documentElement : document.body); var pageHeight = domLib_isKHTML ? window.innerHeight : doc.clientHeight; var pageYOffset = domLib_isIE ? doc.scrollTop : window.pageYOffset; var pageXOffset = domLib_isIE ? doc.scrollLeft : window.pageXOffset; if (in_axis == 'horizontal') {
        var bleedRight = (in_x - pageXOffset) + in_width - (doc.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 [in_x, in_y];
}
function domMenu_toggleSubMenu(in_parentElement, in_style) {
    var subMenu = in_parentElement.data.get('subMenu'); if (subMenu && subMenu.style.visibility != in_style) {
        var settings = domMenu_settings.get(in_parentElement.data.get('basename')); var isFirstLevelSub = in_parentElement.data.get('level') == 1; var targetOtherDoc = isFirstLevelSub && settings.get('subMenuTargetFrame'); var prefix = isFirstLevelSub ? 'menu' : 'subMenu'; var className = settings.get(prefix + 'ElementClass'); if (in_style == 'visible') { className += ' ' + settings.get(prefix + 'Element' + (in_style == 'visible' ? 'Active' : 'Hover') + 'Class'); }
        in_parentElement.firstChild.className = className; if (in_style == 'visible') {
            var tmp_offsets = domLib_getOffsets(in_parentElement); if (isFirstLevelSub) { tmp_offsets.set('top', tmp_offsets.get('top') + settings.get('verticalSubMenuOffsetY')); tmp_offsets.set('bottom', tmp_offsets.get('bottom') + settings.get('verticalSubMenuOffsetY')); tmp_offsets.set('left', tmp_offsets.get('left') + settings.get('verticalSubMenuOffsetX')); tmp_offsets.set('right', tmp_offsets.get('right') + settings.get('verticalSubMenuOffsetX')); }
            if (!in_parentElement.data.get('offsets').compare(tmp_offsets)) {
                in_parentElement.data.set('offsets', tmp_offsets); var xCoor, yCoor; if (isFirstLevelSub && settings.get('axis') == 'horizontal') {
                    xCoor = tmp_offsets.get('left'); if (settings.get('verticalExpand') == 'north') {
                        if (targetOtherDoc) { yCoor = subMenu.offsetHeight; }
                        else { yCoor = tmp_offsets.get('top') - subMenu.offsetHeight - settings.get('verticalSubMenuOffsetY'); } 
                    }
                    else {
                        if (targetOtherDoc) { yCoor = settings.get('targetDocumentYOrigin'); }
                        else { yCoor = tmp_offsets.get('bottom'); } 
                    } 
                }
                else {
                    yCoor = tmp_offsets.get('top') + settings.get('horizontalSubMenuOffsetY'); if (settings.get('horizontalExpand') == 'east') {
                        if (targetOtherDoc) { xCoor = settings.get('targetDocumentXOrigin'); }
                        else { xCoor = tmp_offsets.get('right') + settings.get('horizontalSubMenuOffsetX'); } 
                    }
                    else { xCoor = tmp_offsets.get('left') - subMenu.offsetWidth - settings.get('horizontalSubMenuOffsetX'); }
                    if (!targetOtherDoc && (domLib_isOpera || domLib_isSafari)) { var marginLeft = parseInt(domLib_getComputedStyle(document.body, 'margin-left')); xCoor -= marginLeft; var marginTop = parseInt(domLib_getComputedStyle(document.body, 'margin-top')); yCoor -= marginTop; } 
                }
                var minWidth = settings.get('subMenuMinWidth'); var renderedWidth = subMenu.offsetWidth; if (minWidth == 'inherit') { minWidth = in_parentElement.offsetWidth + settings.get('subMenuWidthCorrection'); }
                else if (minWidth == 'auto') { minWidth = renderedWidth; }
                if (domLib_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.get('screenPadding'), settings.get('axis')); subMenu.style.left = coordinates[0] + 'px'; subMenu.style.top = coordinates[1] + 'px'; if (settings.get('axis') == 'horizontal' && settings.get('subMenuMinWidth') == 'inherit') { subMenu.firstChild.style.width = Math.max(in_parentElement.offsetWidth + settings.get('subMenuWidthCorrection'), renderedWidth) + 'px'; } 
            } 
        }
        if (domLib_isKonq) { in_parentElement.firstChild.style.display = 'none'; in_parentElement.firstChild.style.display = ''; }
        subMenu.style.visibility = in_style; if (domLib_detectObstructionsEnabled) { domLib_detectObstructions(subMenu, (in_style == 'hidden'), true); } 
    } 
}
function domMenu_toggleHighlight(in_element, in_status) {
    if (!in_element.data.get('numChildren') && !in_element.data.get('uri')) {
        return; 
    }
    var settings = domMenu_settings.get(in_element.data.get('basename'));
    var prefix = in_element.data.get('level') == 1 ? 'menu' : 'subMenu';
    var extention = '';
    if (in_element.data.get('level') == 1 && in_element.data.has('specialColor') && in_element.data.get('specialColor') == 'true') {
        extention = 'Special';
    }
    var className = settings.get(prefix + 'ElementClass');
    var highlightElement = in_element.firstChild;
    var pseudoClass; 
    if (in_status) {
        if (in_element.data.has('subMenu') && in_element.data.get('subMenu').style.visibility == 'visible') {
            pseudoClass = 'Active'; 
        }
        else if (in_element.data.get('numChildren') || in_element.data.get('uri')) {
            pseudoClass = 'Hover'; 
        } 
    }
    if (pseudoClass) {
        className += extention + ' ' + settings.get(prefix + 'Element' + pseudoClass + 'Class' + extention); 
        if (highlightElement.childNodes.length == 2) { }
        if (highlightElement.childNodes.length == 2 && highlightElement.lastChild.style.display == 'none') {
            highlightElement.firstChild.style.display = 'none';
            highlightElement.lastChild.style.display = ''; 
        } 
    }
    else {
        className += extention;
        if (highlightElement.childNodes.length == 2 && highlightElement.firstChild.style.display == 'none') {
            highlightElement.lastChild.style.display = 'none';
            highlightElement.firstChild.style.display = '';
        } 
    }
    highlightElement.className = className;
    if (domLib_isKonq) {
        highlightElement.style.display = 'none';
        highlightElement.style.display = ''; 
    }
}

function domMenu_resolveLink(in_this, in_event) {
    var eventObj = domLib_isIE ? event : in_event; var currentTarget = domLib_isIE ? in_this : eventObj.currentTarget; var basename = currentTarget.data.get('basename'); domMenu_changeActivePath(false, domMenu_activeElement.get(basename), 0); var uri = currentTarget.data.get('uri'); if (uri) {
        window.status = 'Pagina wordt geladen...'; if (uri.charAt(0) == '/' && domMenu_settings.get(basename).get('baseUri').length > 0) { uri = domMenu_settings.get(basename).get('baseUri') + uri; }
        if (uri.indexOf('javascript: ') == 0) { eval(uri.substring(12)); }
        else if (!currentTarget.data.get('target') || currentTarget.data.get('target') == '_self') { window.location = uri; }
        else { window.open(uri, currentTarget.data.get('target')); } 
    } 
}
function domMenu_unloadEventCache()
{ var clearElementProps = ['data', 'onmouseover', 'onmouseout', 'onmousedown', 'onmouseup', 'ondblclick', 'onclick', 'onselectstart', 'oncontextmenu']; var el; for (var d = document.all.length; d--; ) { el = document.all[d]; for (var c = clearElementProps.length; c--; ) { el[clearElementProps[c]] = null; } } }
function domMenu_openMenuOnmouseoverHandler(in_event) { domMenu_openEvent(this, in_event, 'openMouseoverMenuDelay'); }
function domMenu_openMenuOnmousedownHandler(in_event) { domMenu_openEvent(this, in_event, 'openMousedownMenuDelay'); }
function domMenu_openSubMenuOnmouseoverHandler(in_event) { domMenu_openEvent(this, in_event, 'openMouseoverSubMenuDelay'); }
function domMenu_openSubMenuOnclickHandler(in_event) { domMenu_openEvent(this, in_event, 'openClickSubMenuDelay'); }
function domMenu_resolveLinkHandler(in_event) { domMenu_resolveLink(this, in_event); }
function domMenu_closeMenuHandler(in_event) { domMenu_closeEvent(this, in_event); }
function domMenu_closeMenuCallback(argv)
{ domMenu_toggleHighlight(argv[0], false); domMenu_toggleSubMenu(argv[0], 'hidden'); if (argv[0].data.get('level') == 1) { domMenu_activeElement.set(argv[1], false); } }
function domMenu_openMenuCallback(argv) {
    if (!domMenu_activeElement.get(argv[1])) { domMenu_activeElement.set(argv[1], argv[0]); }
    domMenu_activateSubMenu(argv[0]);
}
