/*
Author   : bieler batiste
Company  : doSimple : http://www.dosimple.ch
send me a mail for more informations : faden@PASDEPOURRIELaltern.org - remove ( PASDEPOURRIEL )

Short javascript function to create and handle a CSS navigation menu

Copyright (C) 2004  Bieler Batiste

This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*/

// the timeout for the menu
//var timeout = 2000;
//var timein = 500;
var timeout = 0;
var timein = 0;
var page = 0;

// 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 < 100; i++ )
{
    eval("var timeoutli" + i + " = false;");
    eval("var timeinli" + i + " = false;");
}*/

// this fonction apply the CSS style and the event
function initMenu(pag,enfants)
{
   if (pag == 0) page = 'm1';
   else page = 'm'+pag; 
   trouve = false;
   



// 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 menu = document.getElementById('menu'); // the root element
        var lis = menu.getElementsByTagName('li'); // all the li
        
        // change the class name of the menu, 
        // it's usefull for compatibility with old browser
        menu.className='menu';
        
        // i am searching for ul element in li element
        for ( var i=0; i<lis.length; i++ )
        {
            // is there a ul element ?
            if ( lis.item(i).getElementsByTagName('ul').length > 0 )
            {        
                // improve IE key navigation
                if ( browser.isIE )
                {
                    addAnEvent(lis.item(i),'keyup',show);
                }
                // link events to list item
                
		//addAnEvent(lis.item(i),'mouseover',timeinShow);
		
		//addAnEvent(lis.item(i),'mouseover',show);
                //addAnEvent(lis.item(i),'mouseout',timeoutHide);
                //addAnEvent(lis.item(i),'blur',timeoutHide);
                addAnEvent(lis.item(i),'focus',show);
                
                // add an id to list item
		if (lis.item(i).getAttribute('id') == page ) {
			page = "li"+i;
			trouve = true;
		}
		lis.item(i).setAttribute( 'id', "li"+i );
                lis.item(i).getElementsByTagName('a')[0].className = 'menuIndicateur';
		//lis.item(i).getElementsByTagName('a')[0].style['background'] = 'url(images/a1.jpg) left no-repeat)';

		//lis.item(i).getElementsByTagName('a')[0].style['cursor'] = 'wait';
            	//if (document.getElementById("li"+i).getElementsByTagName('ul')[0] == "null") document.getElementById("li"+i).style['cursor'] = 'pointer';
		//else document.getElementById("li"+i).getElementsByTagName('ul')[0].style['cursor'] = 'wait';
	    	

	    
	    }
	    //if (typeof(page == "number")){
	    //	if ( lis.item(i).parentNode.nodeType != 9) page = toString(page);
	    //}
	}
    }
    	
	if (typeof(page) != "number"){
		showParentUls(document.getElementById(page));
		showChildUls(document.getElementById(page));
	}

	if (!trouve) { // Ca n'a pas de sous menu, ou bien c'ets un sous menu
		if (document.getElementById(page)) {
			document.getElementById(page).setAttribute( 'id', "lii" );
			showParentUls(document.getElementById("lii"));

			if(isPrinc(document.getElementById("lii"))) {
				//alert(isPrinc(document.getElementById("lii")));
				//C'est un menu principal
				if (pag == 0) {
					document.getElementById("lii").getElementsByTagName('a')[0].style['background'] = '#747472 url(\'images/fl3.gif\') no-repeat 3px 50%';
                        document.getElementById("lii").getElementsByTagName('a')[0].style['color'] = '#CCCCCC';
                        document.getElementById("lii").getElementsByTagName('a')[0].style['font-weight'] = 'bold';

				} else {

					document.getElementById("lii").getElementsByTagName('a')[0].style['background'] = '#DFDEDC url(\'images/fl1.gif\') no-repeat 3px 50%';
				}
			} else {
				//C'est un sous menu il faut aller chercher son popa
				//alert(isPrinc(document.getElementById("lii")));
				document.getElementById("lii").getElementsByTagName('a')[0].style['color'] = '#CCCCCC';
				var papa = document.getElementById("lii").parentNode; //<-ul 
				papa = papa.parentNode; //<-li 

				papa.getElementsByTagName('a')[0].style['background'] = '#DFDEDC url(\'images/fl1.gif\') no-repeat 3px 50%';


			}
		}
		
	} else { // ca a un sous menu mais le sous menu n'est pas sélectionné
		document.getElementById(page).getElementsByTagName('a')[0].style['background'] = '#DFDEDC url(\'images/fl1.gif\') no-repeat 3px 50%';	
	}

	if (page != 'm1') {
			document.getElementById("m1").getElementsByTagName('a')[0].style['background'] = '#747472 url(\'images/fl3.gif\') no-repeat 3px 50%';
			document.getElementById("m1").getElementsByTagName('a')[0].style['color'] = '#CCCCCC';
	        	document.getElementById("m1").getElementsByTagName('a')[0].style['font-weight'] = 'bold';
	}
}

//Grosso modo est ce que ce li est un li du menu principal donc pas un sous menu
function isPrinc(currentLi) {

	var ul = currentLi.parentNode;
	if (ul == document.getElementById("menu")){
		return true;
	} else return false;
}


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()
{
	eval ( "clearTimeout( timein"+ this.id +");" );
	
    
    // start the timeout
    //eval( "timeout" + this.id + " = window.setTimeout('hideUlUnder( \"" + this.id + "\" )', " + timeout + " );");
}

function timeinShow()
{
	
        if (this.getElementsByTagName('ul')[0] == 'null' )
	        {
		        //this.getElementsByTagName('ul')[0].style['cursor'] = 'pointer';
			        }
				
	//start the timein
	eval( "timein" + this.id + " = window.setTimeout('show( \"" +this.id +"\")', " + timein + " );");
}

// hide the ul elements under the element identified by id
function hideUlUnder( id )
{   
    document.getElementById(id).getElementsByTagName('ul')[0].style['visibility'] = 'hidden';
    // ici ajout pour que le menu se collapse et s'étende 
    document.getElementById(id).getElementsByTagName('ul')[0].style['display'] = 'none';
}

function showParentUls(currentLi)
{
	var ul = currentLi.parentNode;


	
	ul.style['visibility'] = 'visible';
	ul.style['display'] = 'block';
	
	while ((ul.parentNode.nodeType != 9) && (ul.parentNode != 'document') && (ul.parentNode != 'null') )
	{
		ul = ul.parentNode;
		ul.style['visibility'] = 'visible';
		ul.style['display'] = 'block';
		
	}
}

function showChildUls(currentLi)
{
	var ul = currentLi.getElementsByTagName('ul');
	for (var i=0; i<ul.length; i++)
	{
		if (ul[i].parentNode.getAttribute('id') == currentLi.getAttribute('id')){
		
			ul[i].style['visibility'] = 'visible';
			ul[i].style['display'] = 'block';
		}
	}
}

function show(id)
{
	if ((typeof(id) == "string")) {
		
		if (document.getElementById(id).hasChildNodes() == true){
		
		document.getElementById(id).getElementsByTagName('ul')[0].style['visibility'] = 'visible';
		document.getElementById(id).getElementsByTagName('ul')[0].style['display'] = 'block';
		//eval ( "clearTimeout( timeout"+ id +");" );
		hideAllOthersUls( document.getElementById(id) );
		//document.getElementById(id).getElementsByTagName('a')[0].style['cursor'] = 'pointer';
		//document.getElementById(id).getElementsByTagName('ul')[0].style['cursor'] = 'pointer';
	}
	}   
}
/*
// show the first ul element found under this element
function show()
{    
    // show the sub menu
    this.getElementsByTagName('ul')[0].style['visibility'] = 'visible';
    // ici ajout pour qu ele menu se collapse et s'étende
    this.getElementsByTagName('ul')[0].style['display'] = 'block';
    // 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 ul = currentLi.parentNode;
    //alert(lis.childNodes.length);
    for ( var i=0; i<ul.childNodes.length; i++ )
    {
        if ( ul.childNodes[i].id && ul.childNodes[i].id != currentLi.id )
        {
            hideUlUnderLi( ul.childNodes[i] );
        }
    }
}

// hide all the ul wich are in the li element
function hideUlUnderLi( li )
{
    var uls = li.getElementsByTagName('ul');
    for ( var i=0; i<uls.length; i++ )
    {
        uls.item(i).style['visibility'] = 'hidden';
	uls.item(i).style['display'] = 'none';
//	uls.item(i).style['cursor'] = 'wait';
    }
} 
