// the timeout for the menu
var timeout = 400;
var timeout1 = 400;
// 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 < 100; i++ )
{
    //eval("var timeoutli" + i + " = false;");
	eval("var timeoutli" + i + " = false;");
}
for( var i = 0; i < 100; i++ )
{
    //eval("var timeoutli" + i + " = false;");
	eval("var timeout1li" + i + " = false;");
}

// this fonction apply the CSS style and the event
function initMenu()
{
    // 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 menu0 = document.getElementById('menu0'); // the root element
        var lis0 = menu0.getElementsByTagName('li'); // all the li
		var menu1 = document.getElementById('menu1'); // the root element
        var lis1 = menu1.getElementsByTagName('li'); // all the li
		var menu2 = document.getElementById('menu2'); // the root element
        var lis2 = menu2.getElementsByTagName('li'); // all the li
		var menu3 = document.getElementById('menu3'); // the root element
        var lis3 = menu3.getElementsByTagName('li'); // all the li
		var menu4 = document.getElementById('menu4'); // the root element
        var lis4 = menu4.getElementsByTagName('li'); // all the li
		var menu5 = document.getElementById('menu5'); // the root element
        var lis5 = menu5.getElementsByTagName('li'); // all the li
		//var menu6 = document.getElementById('menu6'); // the root element
        //var lis6 = menu6.getElementsByTagName('li'); // all the li
        
        // change the class name of the menu, 
        // it's usefull for compatibility with old browser
        menu0.className='menu0';
		menu1.className='menu1';
		menu2.className='menu2';
		menu3.className='menu3';
		menu4.className='menu4';
		menu5.className='menu5';
		//menu6.className='menu6';
		
        
        // i am searching for ul element in li element
        for ( var i=0; i<lis0.length; i++ )
        {
            // is there a ul element ?
            if ( lis0.item(i).getElementsByTagName('ul').length > 0 )
            {        
                // improve IE key navigation
                if ( browser.isIE )
                {
                    addAnEvent(lis0.item(i),'keyup',show);
                }
                // link events to list item
                addAnEvent(lis0.item(i),'mouseover',show);
                addAnEvent(lis0.item(i),'mouseout',timeoutHide);
                addAnEvent(lis0.item(i),'blur',timeoutHide);
                addAnEvent(lis0.item(i),'focus',show);
                
                // add an id to list item
                lis0.item(i).setAttribute( 'id', "li0"+i );
            }
        }
		for ( var i=0; i<lis1.length; i++ )
        {
            // is there a ul element ?
            if ( lis1.item(i).getElementsByTagName('ul').length > 0 )
            {        
                // improve IE key navigation
				if ( browser.isIE )
                {
                    addAnEvent(lis1.item(i),'keyup',show);
                }
                // link events to list item
                addAnEvent(lis1.item(i),'mouseover',show);
                addAnEvent(lis1.item(i),'mouseout',timeoutHide);
                addAnEvent(lis1.item(i),'blur',timeoutHide);
                addAnEvent(lis1.item(i),'focus',show);
                
                // add an id to list item
                lis1.item(i).setAttribute( 'id', "li1"+i );
            }
        }
		for ( var i=0; i<lis2.length; 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', "li2"+i );
            }
        }
		for ( var i=0; i<lis3.length; 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', "li3"+i );
            }
        }
		for ( var i=0; i<lis4.length; i++ )
        {
            // is there a ul element ?
            if ( lis4.item(i).getElementsByTagName('ul').length > 0 )
            {        
                // improve IE key navigation
                if ( browser.isIE )
                {
                    addAnEvent(lis4.item(i),'keyup',show);
                }
                // link events to list item
                addAnEvent(lis4.item(i),'mouseover',show);
                addAnEvent(lis4.item(i),'mouseout',timeoutHide);
                addAnEvent(lis4.item(i),'blur',timeoutHide);
                addAnEvent(lis4.item(i),'focus',show);
                
                // add an id to list item
                lis4.item(i).setAttribute( 'id', "li4"+i );
            }
        }
		for ( var i=0; i<lis5.length; i++ )
        {
            // is there a ul element ?
            if ( lis5.item(i).getElementsByTagName('ul').length > 0 )
            {        
                // improve IE key navigation
                if ( browser.isIE )
                {
                    addAnEvent(lis5.item(i),'keyup',show);
                }
                // link events to list item
                addAnEvent(lis5.item(i),'mouseover',show);
                addAnEvent(lis5.item(i),'mouseout',timeoutHide);
                addAnEvent(lis5.item(i),'blur',timeoutHide);
                addAnEvent(lis5.item(i),'focus',show);
                
                // add an id to list item
                lis5.item(i).setAttribute( 'id', "li5"+i );
            }
        }
		/*for ( var i=0; i<lis6.length; i++ )
        {
            // is there a ul element ?
            if ( lis6.item(i).getElementsByTagName('ul').length > 0 )
            {        
                // improve IE key navigation
                if ( browser.isIE )
                {
                    addAnEvent(lis6.item(i),'keyup',show);
                }
                // link events to list item
                addAnEvent(lis6.item(i),'mouseover',show);
                addAnEvent(lis6.item(i),'mouseout',timeoutHide);
                addAnEvent(lis6.item(i),'blur',timeoutHide);
                addAnEvent(lis6.item(i),'focus',show);
                
                // add an id to list item
                lis6.item(i).setAttribute( 'id', "li6"+i );
            }
        }*/
    }
}

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 + " );");
}
function timeoutHide1()
{
    // start the timeout
    eval( "timeout1" + this.id + " = window.setTimeout('hideUlUnder1( \"" + this.id + "\" )', " + timeout1 + " );");
}
// hide the ul elements under the element identified by id
function hideUlUnder( id )
{   
    document.getElementById(id).getElementsByTagName('ul')[0].style['visibility'] = 'hidden';
}
function hideUlUnder1( 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 );
}
function show1()
{
    // 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( timeout1"+ 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';
    }
}
