// JavaScript Document
// Site : IFACI
// Objectif : Gestion du menu du site (style accordéon)
// Commentaires : initMenu('idmenu') pour initialiser le menu dans un état voulu, les menus : m1,m2,m3,m4,m5,m6 ou rien e.g initMenu(). Les autres fonctions gèrent le menu et les effets -> sauf modification sur les effets du menu ne pas modifier.

// Cette variable indique le menu qui doit doit rester ouvert en permanence. -> à faire passer via le gabarit et donc à supprimer plus tard. Il sert juste à tester la fonctionnalité actuelllement.
var pinnedMenu = 'mrub2';

// this fonction apply the CSS style and the event
function initMenu(openMenu)
{
    // 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'; // pas utile
        
        // 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 )
            {        
                //----------------------------INITIALISE LE MENU DANS SON ETAT DE DEPART--------------------------
				// Cette étape peut être réalisée dans le code source HTML
				
				if(lis.item(i).getElementsByTagName('ul')[0].id != pinnedMenu && lis.item(i).getElementsByTagName('ul')[0].id !=openMenu)
				{
					lis.item(i).getElementsByTagName('ul')[0].className = 'closedMenu';
				}else{
					lis.item(i).getElementsByTagName('ul')[0].className = 'openedMenu';
				}
				
				if (lis.item(i).getElementsByTagName('ul')[0].id != pinnedMenu && lis.item(i).getElementsByTagName('ul')[0].id != openMenu)
				{
					lis.item(i).getElementsByTagName('img')[0].className = 'rubClosed';
				}else{
					lis.item(i).getElementsByTagName('img')[0].src = lis.item(i).getElementsByTagName('img')[0].src.replace(/.gif/,"_in.gif");
					lis.item(i).getElementsByTagName('img')[0].className = 'rubOpen';
				}
				
				//-------------------------------------------------------------------------------------------------
				// improve IE key navigation
                if ( browser.isIE )
                {
                    addAnEvent(lis.item(i),'keyup',show);
                }
                // link events to list item
                addAnEvent(lis.item(i),'click',show);
				as = lis.item(i).getElementsByTagName('a');
				for(j=0;j<as.length;j++)
				{
					addAnEvent(lis.item(i).getElementsByTagName('a')[j],'click',selectMenuItem);
				}
				imgs = lis.item(i).getElementsByTagName('img');
				for(k=0;k<imgs.length;k++)
				{
					addAnEvent(lis.item(i).getElementsByTagName('img')[k],'mouseover',rollover);
					addAnEvent(lis.item(i).getElementsByTagName('img')[k],'mouseout',rollout);
				}
                // add an id to list item
                lis.item(i).setAttribute( 'id', "li"+i );
            }
        }
    }
}

//library de fonctions
//--------------------

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
    }
}

function hideUlUnder( id )
{   
    document.getElementById(id).getElementsByTagName('ul')[0].style['display'] = 'none';
}

// show the first ul element found under this element
function show()
{
    // show the sub menu
    this.getElementsByTagName('ul')[0].style['display'] = 'block';
    var currentNode=this;
    while(currentNode)
    {
            if( currentNode.nodeName=='LI')
            {
				currentNode.getElementsByTagName('img')[0].src = currentNode.getElementsByTagName('img')[0].src.replace(/_on.gif/,"_in.gif");
                currentNode.getElementsByTagName('img')[0].className = 'rubOpen';
			}
            currentNode=currentNode.parentNode;
    }
    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] );
			/*
			if(lis.childNodes[i].getElementsByTagName('ul')[0].id != pinnedMenu)
			{
				lis.childNodes[i].getElementsByTagName('img')[0].className = 'rubClosed';
			}
			*/
			if(lis.childNodes[i].getElementsByTagName('img')[0].className != 'rubOpen')
			{
				lis.childNodes[i].getElementsByTagName('img')[0].src = lis.childNodes[i].getElementsByTagName('img')[0].src.replace(/_in.gif/,".gif");
			}			
        }
    }
}

// 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++ )
    {
		if (as.item(i).className=="selected")
		{
	        as.item(i).className="selected";
		}else{
			as.item(i).className="";
		}
    }
    var uls = li.getElementsByTagName('ul');
    for ( var i=0; i<uls.length; i++ )
    {
        if (uls.item(i).id != pinnedMenu)
		{
			uls.item(i).style['display'] = 'none';
			//uls.item(i).className = 'closedMenu';
		}
    }
}

function selectMenuItem()
{
	var menu = document.getElementById('menu');
	var lis = menu.getElementsByTagName('li');
	for(i=0;i<lis.length;i++)
	{
		var as = lis.item(i).getElementsByTagName('a');
		var imgs = lis.item(i).getElementsByTagName('img');
		for(j=0; j<as.length;j++)
		{
			if (as.item(j).className=="selected")
			{
				as.item(j).className="";
			}
		}
	}
	var classe = document.createAttribute("class");
	classe.nodeValue = "selected";
	this.setAttributeNode(classe);
}

function rollover()
{
	this.style.cursor = 'pointer';
	imgpath = this.src;
	imgname = imgpath.split('/')[imgpath.split('/').length-1];
	newimgname = imgname.split('.')[0]+'_on.'+imgname.split('.')[1];
	if(imgpath.indexOf("_in")==-1)
	{
		newimgpath = imgpath.replace(/.gif/,"_on.gif");
	}else{
		newimgpath = imgpath;
	}
	this.src = newimgpath;
}

function rollout()
{
	imgpath = this.src;
	imgname = imgpath.split('/')[imgpath.split('/').length-1];
	newimgname = imgname.split('_')[0]+'.'+imgpath.split('.')[1];;
	newimgpath = imgpath.replace(/_on.gif/,".gif");
	this.src = newimgpath;
	//alert(newimgpath);
}

function addFavorites(anchor){

	if (navigator.userAgent.indexOf("AppleWebKit") !=-1) {
	     alert("Cette fonction n'est pas disponible sur Safari.\n\nUtilisez plutôt la combinaison de touches \"Pomme-D\"");
	}

	/*alert(navigator.appVersion);*/
	if ( navigator.appName != 'Microsoft Internet Explorer' ){
		window.sidebar.addPanel(document.title,location.href,""); 
	} else {
		window.external.AddFavorite(location.href,document.title); 
	}

}