// the timeout for the menu
var timeout = 100;

// not very clean but simple
// the function can be run in the HTML for faster display
// window.onload=initMenu;

// creat timeout variables for list item
// it's for avoid some warning with IE
for( var i = 0; i < 600; i++ ) {
    eval("var timeoutli" + i + " = false;");
}

// this fonction apply the CSS style and the event
function initMenu(identifiant) {
	switch (identifiant) {
		case 'nav_tech':
			// a test to avoid some browser like IE4, Opera 6, and IE Mac
			if ( browser.isDOM1 
			&& !( browser.isMac && browser.isIE ) 
			&& !( browser.isOpera && browser.versionMajor < 7 )
			&& !( browser.isIE && browser.versionMajor < 5 ) ) {
				// get some element
				var menu1 = document.getElementById(identifiant); // the root element
				var lis1 = menu1.getElementsByTagName('li'); // all the li
				
				// change the class name of the menu, 
				// it's usefull for compatibility with old browser
				menu1.className=identifiant;
				
				for ( var i=0; i<lis1.length; i++ ) {
					j = (200*0)+i;
					// is there a ul element ?
					if ( lis1.item(j).getElementsByTagName('ul').length > 0 ) {        
						// improve IE key navigation
						if ( browser.isIE ) {
							addAnEvent(lis1.item(j),'keyup',show);
						}
						// link events to list item
						addAnEvent(lis1.item(j),'mouseover',show);
						addAnEvent(lis1.item(j),'mouseout',timeoutHide);
						addAnEvent(lis1.item(j),'blur',timeoutHide);
						addAnEvent(lis1.item(j),'focus',show);
						
						// add an id to list item
						lis1.item(j).setAttribute( 'id', "li"+j );
					}
				}
			}
		break;
		case 'menu':
			// a test to avoid some browser like IE4, Opera 6, and IE Mac
			if ( browser.isDOM1 
			&& !( browser.isMac && browser.isIE ) 
			&& !( browser.isOpera && browser.versionMajor < 7 )
			&& !( browser.isIE && browser.versionMajor < 5 ) ) {
				// get some element
				var menu2 = document.getElementById(identifiant); // the root element
				var lis2 = menu2.getElementsByTagName('li'); // all the li
				
				// change the class name of the menu, 
				// it's usefull for compatibility with old browser
				menu2.className=identifiant;
				
				for ( var i=0; i<lis2.length; i++ ) {
					j = (200*1)+i;
					// is there a ul element ?
					if ( lis2.item(i).getElementsByTagName('ul').length > 0 ) {        
						// improve IE key navigation
						if ( browser.isIE ) {
							addAnEvent(lis2.item(i),'keyup',show);
						}
						// link events to list item
						addAnEvent(lis2.item(i),'mouseover',show);
						addAnEvent(lis2.item(i),'mouseout',timeoutHide);
						addAnEvent(lis2.item(i),'blur',timeoutHide);
						addAnEvent(lis2.item(i),'focus',show);
						
						// add an id to list item
						lis2.item(i).setAttribute( 'id', "li"+j );
					}
				}
			}
		break;
		case 'nav':
			// a test to avoid some browser like IE4, Opera 6, and IE Mac
			if ( browser.isDOM1 
			&& !( browser.isMac && browser.isIE ) 
			&& !( browser.isOpera && browser.versionMajor < 7 )
			&& !( browser.isIE && browser.versionMajor < 5 ) ) {
				// get some element
				var menu3 = document.getElementById(identifiant); // the root element
				var lis3 = menu3.getElementsByTagName('li'); // all the li
				
				// change the class name of the menu, 
				// it's usefull for compatibility with old browser
				menu3.className=identifiant;
				
				for ( var i=0; i<lis3.length; i++ ) {
					j = (200*2)+i;
					// is there a ul element ?
					if ( lis3.item(i).getElementsByTagName('ul').length > 0 ) {        
						// improve IE key navigation
						if ( browser.isIE ) {
							addAnEvent(lis3.item(i),'keyup',show);
						}
						// link events to list item
						addAnEvent(lis3.item(i),'mouseover',show);
						addAnEvent(lis3.item(i),'mouseout',timeoutHide);
						addAnEvent(lis3.item(i),'blur',timeoutHide);
						addAnEvent(lis3.item(i),'focus',show);
						
						// add an id to list item
						lis3.item(i).setAttribute( 'id', "li"+j );
					}
				}
			}
		break;
	}
}

function addAnEvent( target, eventName, functionName ) {
    // apply the method to IE
    if ( browser.isIE ) {
        //attachEvent dont work properly with this
        eval('target.on'+eventName+'=functionName');
    }
    // apply the method to DOM compliant browsers
    else {
        target.addEventListener( eventName , functionName , true ); // true is important for Opera7
    }
}
    
// hide the first ul element of the current element
function timeoutHide() {
    // start the timeout
    eval( "timeout" + this.id + " = window.setTimeout('hideUlUnder( \"" + this.id + "\" )', " + timeout + " );");
}

// hide the ul elements under the element identified by id
function hideUlUnder( id ) {   
    document.getElementById(id).getElementsByTagName('ul')[0].style['visibility'] = 'hidden';
}

// show the first ul element found under this element
function show() {
    // show the sub menu
    this.getElementsByTagName('ul')[0].style['visibility'] = 'visible';
    var currentNode=this;
    while(currentNode) {
            if( currentNode.nodeName=='LI') {
                /*currentNode.getElementsByTagName('a')[0].className = 'linkOver';*/
            }
            currentNode=currentNode.parentNode;
    }
    // clear the timeout
    eval ( "clearTimeout( timeout"+ this.id +");" );
    hideAllOthersUls( this );
}

// hide all ul on the same level of  this list item
function hideAllOthersUls( currentLi ) {
    var lis = currentLi.parentNode;
    for ( var i=0; i<lis.childNodes.length; i++ ) {
        if ( lis.childNodes[i].nodeName=='LI' && lis.childNodes[i].id != currentLi.id ) {
            hideUlUnderLi( lis.childNodes[i] );
        }
    }
}

// hide all the ul wich are in the li element
function hideUlUnderLi( li ) {
    var as = li.getElementsByTagName('a');
    for ( var i=0; i<as.length; i++ ) {
        /*as.item(i).className="";*/
    }
    var uls = li.getElementsByTagName('ul');
    for ( var i=0; i<uls.length; i++ ) {
        uls.item(i).style['visibility'] = 'hidden';
    }
} 
