//! [three-level submenu's]
//!
//! The general idea behind this submenu is that a list is divided into 
//! three sections: top bar section; menu section; and submenu section.
//!
//! When a mouse over event occurs on a menu item, an event handler is 
//! called, that positions the menu on the right top position. 
var menuHeight = 24;
var menuStatus = 0;
var menuCurrentItem = 0;
var menuCurrentHeight = 0;

/**
 * Calculate the offset of a DOM item.
 *
 * @return {top, left}
 */
function getOffset( el ) {
    var _x = 0;
    var _y = 0;
    while( el && !isNaN( el.offsetLeft ) && !isNaN( el.offsetTop ) ) {
        _x += el.offsetLeft - el.scrollLeft;
        _y += el.offsetTop - el.scrollTop;
        el = el.offsetParent;
    }
    return { top: _y, left: _x };
}

/**
 * Detect which browser is currently being used.
 *
 * @return 
 *  'IE6' on Internet Explorer 6
 *  'IE7' on Internet Explorer 7
 *  'IE8' on Internet Explorer 8
 *  'IE9' on Internet Explorer 9
 *  'FF2' on Firefox 2
 *  'FF3' on Firefox 3
 *  'FF4' on Firefox 4
 *  'FF5' on Firefox 5
 */
function getBrowserVersion()
{
    var rv = -1;

    if (navigator.appName == 'Microsoft Internet Explorer')
        {
            var ua = navigator.userAgent;
            var re  = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
            if (re.exec(ua) != null)
                {
                    rv = 'IE' + parseInt( RegExp.$1 );
                }
        }
    else if (navigator.appName == 'Netscape')
        {
            var ua = navigator.userAgent;
            var re  = new RegExp("Firefox/([0-9]{1,}[\.0-9]{0,})");
            if (re.exec(ua) != null)
                {
                    rv = 'FF' + parseInt(RegExp.$1);
                }
        }

    return rv;
}

/**
 * Position the submenus specifically for IE7.
 * 
 * This function notes the different client heights of the second
 * level submenus. These get accumulated to define the new start
 * position of a submenu.
 */
function navigationRealignIE7()
{
    var items = ge('navigation-main').getElementsByTagName('A');
    var level2_index=0;
    var level2_offset = 0;
    var level2_position = 0;
    var startpos;
   
    for(var i = 0; i < items.length; i++) {

        if(items[i].parentNode.parentNode.id == 'navigation-main') {        
            //! This is a top level menu, so the absolute 
            //! position must be reset.
            level2_index = 0;
            level2_position = 0;
            level2_offset = 0;
            continue;
        } else if(items[i].parentNode.parentNode.parentNode.parentNode.id == 'navigation-main') {           
            //! This is a menu item in a toplevel menu, the
            //! absolute position of submenu's must be increased.
            level2_index = level2_index + 1;
            level2_position += level2_offset;
            level2_offset = items[i].clientHeight;
        } else if(items[i].parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.id == 'navigation-main') {
            //! This is a submenu of a menu item in a toplevel meu, so
            //! it needs to be positioned according to the gathered data.
            startpos = level2_position;
            startpos += level2_index;
            startpos -= 3;
            items[i].parentNode.parentNode.style.top = startpos + 'px';
        }	
    }
}

/**
 * Position the sub menu specifically for IE8.
 * 
 * This function uses the offset position to calculate
 * render position of a menu.
 */
function navigationRealignIE8()
{
    var items = ge('navigation-main').getElementsByTagName('A');
    var level2_index=0;
    var level2_offset = 0;
    var startpos;
   
    for(var i = 0; i < items.length; i++) {

        if(items[i].parentNode.parentNode.id == 'navigation-main') {        
            // Level 1            
            level2_index = 0;
            continue;

        } else if(items[i].parentNode.parentNode.parentNode.parentNode.id == 'navigation-main') {           
            // Level 2
            level2_index = level2_index + 1;
            level2_offset = items[i].clientHeight;
        } else if(items[i].parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.id == 'navigation-main') {
            startpos = getOffset(items[i].parentNode.parentNode.parentNode).top;
            startpos -= getOffset(items[i].parentNode.parentNode.parentNode.parentNode).top;
            startpos -= level2_offset-16;                
            items[i].parentNode.parentNode.style.top = startpos + 'px';
            items[i].style.top = '0px'; 
        }	
    }
}

/**
 * Position the submenus for other browsers.
 * 
 * Works fine with FF3 and FF5.
 */
function navigationRealignGeneric()
{
    var items = ge('navigation-main').getElementsByTagName('A');
    var level2_index=0;
    var level2_offset = 0;
    var startpos;
   
    for(var i = 0; i < items.length; i++) {

        if(items[i].parentNode.parentNode.id == 'navigation-main') {        
            // Level 1            
            level2_index = 0;
            continue;

        } else if(items[i].parentNode.parentNode.parentNode.parentNode.id == 'navigation-main') {           
            // Level 2
            level2_index = level2_index + 1;
            level2_offset = items[i].clientHeight;
        } else if(items[i].parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.id == 'navigation-main') {
            startpos = getOffset(items[i].parentNode.parentNode.parentNode).top;
            startpos -= getOffset(items[i].parentNode.parentNode.parentNode.parentNode).top;
            startpos -= level2_offset-16;
            items[i].parentNode.parentNode.style.top = startpos + 'px';
            items[i].style.top = '0px'; 
        }	
    }
}

function setNavigationMainPaddings() {
    var items = ge('navigation-main').getElementsByTagName('A');
    var j=0;

    var level1_index=0;
    var level2_index=0;
    var level2_offset = 0;
    var level3_index=0;
    var rv = getBrowserVersion();

    for(var i = 0; i < items.length; i++) {

        if(items[i].parentNode.parentNode.id == 'navigation-main') {        
            // Level 1            
            continue;

        } else if(items[i].parentNode.parentNode.parentNode.parentNode.id == 'navigation-main') {           
            var itemPaddingLeft = findOffsetLeft(items[i].parentNode.parentNode.parentNode) - findOffsetLeft(ge('wrapper')) - 24;
            var safePaddingRight = 0;            
            
            if(itemPaddingLeft>630){
                var itemOffsetLeft = findOffsetLeft(items[i].parentNode.parentNode.parentNode) - findOffsetLeft(ge('wrapper')) - 24;
                safePaddingRight = 965 - itemOffsetLeft - 185;
                items[i].parentNode.parentNode.style.marginLeft = (itemPaddingLeft - 1) + 'px';
            }
            else {
                items[i].parentNode.parentNode.style.marginLeft = (itemPaddingLeft - 1) + 'px';
            }

            // Level 2
            if(items[i].nextSibling)
                {
                    if (rv == 'IE7')
                        {
                            items[i].onmouseover = function() {
                                navigationRealignIE7();
                            };
                        }
                    else if (rv = 'IE8')
                        {                            
                            items[i].onmouseover = function() {
                                navigationRealignIE7();
                            };
                        }
                    else
                        {
                            items[i].onmouseover = function() {
                                navigationRealignGeneric();
                            }
                        }
                }

        } else if(items[i].parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.id == 'navigation-main') {
	    items[i].parentNode.parentNode.style.backgroundColor = 'transparent';
            items[i].parentNode.parentNode.style.position = 'absolute';
            items[i].parentNode.parentNode.style.top = level2_offset+'px';	    
            items[i].style.top = '0px'; 
        }
	
	// List types toevoegen
	if(items[i].nextSibling) {
            addClassName(items[i], 'hasChild');
       	}
	items[i].parentNode.parentNode.onmouseover = function() {
		addClassName(this.parentNode.firstChild, 'highlighted-parent');
		addClassName(this.parentNode.parentNode, 'highlighted-parent');
	}
	items[i].parentNode.parentNode.onmouseout = function() {
		removeClassName(this.parentNode.firstChild, 'highlighted-parent');
		removeClassName(this.parentNode.parentNode, 'highlighted-parent');
	}
    }
}

function initSlideMenu() {
	var sfEls = ge('navigation-main').getElementsByTagName('LI');
	var j = 0;
	for (var i = 0; i < sfEls.length; i++) {
	    
	    if(sfEls[i].parentNode.parentNode.parentNode.id == 'navigation-main' && isIE6) {
    		sfEls[i].onmouseover = function() {    
    		    addClassName(this, 'sfhover');
    		}	        
                sfEls[i].onmouseout = function() {
                    removeClassName(this, 'sfhover');
    		}	        
	    }
	} 
        
        ge('navigation-corporate').onmouseover = function() {
	    menuStatus = 0;
	    menuCurrentHeight = 0;
	}
	
	ge('header').onmouseover = function() {
	    menuStatus = 0;
	    menuCurrentHeight = 0;
	}

	ge('webtrail').onmouseover = function() {
	    menuStatus = 0;
	    menuCurrentHeight = 0;
	}	

	ge('content').onmouseover = function() {
	    menuStatus = 0;
	    menuCurrentHeight = 0;
	}
}

function initSlideMenuCorporate() {
	var sfEls = ge('navigation-corporate').getElementsByTagName('LI');
	for (var i = 0; i < sfEls.length; i++) {
	    // if(sfEls[i].parentNode.parentNode.parentNode.id == 'navigation-corporate' && isIE6) {
	    if(isIE6) {
    		sfEls[i].onmouseover = function() {
    		    addClassName(this, 'sfhover');
    		}
		    sfEls[i].onmouseout = function() {
		        removeClassName(this, 'sfhover');
    		}
	    }
	}
}

function animateMenuDown(item) {
    var oElm = ge('navigation-main').childNodes[item].childNodes[1];
    if(oElm) {  

        menuCurrentHeight = menuCurrentHeight > 0 ? menuCurrentHeight * 1.3 : 1;
        menuCurrentHeight = menuCurrentHeight <= menuHeight ? menuCurrentHeight : menuHeight;
        oElm.style.height = menuCurrentHeight + 'em';
        if(menuCurrentHeight >= menuHeight) {
            window.clearInterval(intervalID);
        }
    }
}

function switchMenu(item) {

    var oElmOld = ge('navigation-main').childNodes[menuCurrentItem].childNodes[1];
    var oElmNew = ge('navigation-main').childNodes[item].childNodes[1];

    if(typeof oElmNew != "undefined") {
        oElmNew.style.height = menuHeight + 'em';
    }
       
    if(typeof oElmOld != "undefined") {
        oElmOld.style.height = 0;
    }
      
    menuCurrentItem = item;

}
