/*
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 = 1000;

// 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;");
}

// 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 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',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
                lis.item(i).setAttribute( 'id', "li"+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 + " );");
}

/*****************************************************************************/
/**
 * sind alles submenues1 uls gehided, wird steuervariable auf true gesetzt
 */ 
function considerTimeoutAllSubBG(){
    var hide = true;
    if (document.getElementsByTagName('ul')[0].id == "menu"){
        var menues = document.getElementsByTagName('ul');
        for ( var i=0; i<menues.length; i++ ){
//if (document.getElementsByTagName('ul')[i].id == "submenu1"){
//    alert(document.getElementsByTagName('ul')[i].style['visibility']);
//}
            if (document.getElementsByTagName('ul')[i].id == "submenu1" && 
                (document.getElementsByTagName('ul')[i].style['visibility'] == 'visible' ||
                 document.getElementsByTagName('ul')[i].style['visibility'] == 'show')
                ){
                hide = false;
            }
        }
    }    
    return hide;
}

/*****************************************************************************/
/**
 * sind alles submenues2 uls gehided, wird steuervariable auf true gesetzt
 */ 
function considerTimeoutSubBG2(){
    var hide = true;
    if (document.getElementsByTagName('ul')[0].id == "menu"){
        var menues = document.getElementsByTagName('ul');
        for ( var i=0; i<menues.length; i++ ){
            if (document.getElementsByTagName('ul')[i].id == "submenu2" && 
                ( document.getElementsByTagName('ul')[i].style['visibility'] == 'visible' ||
                  document.getElementsByTagName('ul')[i].style['visibility'] == 'show')
                ){
                hide = false;
            }
        }
    }    
    return hide;
}
/*****************************************************************************/

// hide the ul elements under the element identified by id
function hideUlUnder( id ){   
    document.getElementById(id).getElementsByTagName('ul')[0].style['visibility'] = 'hidden';
    // teo 2007-08-04
    // sind alle sebmenues1 oder submenues2 gehided, muss auch die weisse unterlage gehided werden
    var toHide = considerTimeoutAllSubBG();
    if (toHide == true){
//alert(toHide);
        hideAll();
    }    
    var toHide2 = considerTimeoutSubBG2();
    if (toHide2 == true){
//alert(toHide2);
        hide('subBG2');  
    }    
}

// 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;
//alert(currentNode);    
    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 )
{
//alert(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';
    }
    
} 




// hide the first ul element of the current element
function timeoutDiv(currentobj)
{   //alert("timeout: " + currentobj);
    // start the timeout
    eval( "timeout" + currentobj + " = window.setTimeout('hideUlUnder( \"" + currentobj + "\" )', " + timeout + " );");
}

/***************************************************************************/

// convert all characters to lowercase to simplify testing 
var agt=navigator.userAgent.toLowerCase(); 
//BROWSER VERSION
// Note: On IE5, these return 4, so use is_ie5up to detect IE5. 
var is_major = parseInt(navigator.appVersion); 
var is_minor = parseFloat(navigator.appVersion); 
//BROWSER TYPE 
var is_nav  = ((agt.indexOf('mozilla')!=-1) && (agt.indexOf('spoofer')==-1) 
            && (agt.indexOf('compatible') == -1) && (agt.indexOf('opera')==-1) 
            && (agt.indexOf('webtv')==-1));
            
var is_nav4up = (is_nav && (is_major >= 4));
var is_nav6up = (is_nav && (is_major >= 5)); 
 
 
var is_ie   = (agt.indexOf("msie") != -1); 
var is_ie3  = (is_ie && (is_major < 4)); 
var is_ie4  = (is_ie && (is_major == 4) && (agt.indexOf("msie 5.0")==-1) );
var is_ie4up  = (is_ie  && (is_major >= 4));
var is_ie5  = (is_ie && (is_major == 4) && (agt.indexOf("msie 5.0")!=-1) );  
var is_ie5up  = (is_ie  && !is_ie3 && !is_ie4);  
var is_dom = ((document.getElementById) && (!is_ie));

//PLATFORM 
var is_win   = ( (agt.indexOf("win")!=-1) || (agt.indexOf("16bit")!=-1) );
var is_mac    = (agt.indexOf("mac")!=-1);
var is_sun   = (agt.indexOf("sunos")!=-1);
var is_irix  = (agt.indexOf("irix") !=-1);    // SGI
var is_hpux  = (agt.indexOf("hp-ux")!=-1);
var is_aix   = (agt.indexOf("aix") !=-1);      // IBM
var is_linux = (agt.indexOf("inux")!=-1);
var is_sco   = (agt.indexOf("sco")!=-1) || (agt.indexOf("unix_sv")!=-1);
var is_unixware = (agt.indexOf("unix_system_v")!=-1); 
var is_mpras    = (agt.indexOf("ncr")!=-1); 
var is_reliant  = (agt.indexOf("reliantunix")!=-1);
var is_dec   = ((agt.indexOf("dec")!=-1) || (agt.indexOf("osf1")!=-1) || 
       (agt.indexOf("dec_alpha")!=-1) || (agt.indexOf("alphaserver")!=-1) || 
       (agt.indexOf("ultrix")!=-1) || (agt.indexOf("alphastation")!=-1)); 
var is_sinix = (agt.indexOf("sinix")!=-1);
var is_freebsd = (agt.indexOf("freebsd")!=-1);
var is_bsd = (agt.indexOf("bsd")!=-1);
var is_unix  = ((agt.indexOf("x11")!=-1) || is_sun || is_irix || is_hpux || 
             is_sco ||is_unixware || is_mpras || is_reliant || 
             is_dec || is_sinix || is_aix || is_linux || is_bsd || is_freebsd);
// unterschiedliche Stylesheets fuer PC und MAC    
// Files and directory structures
var cssDir = "../../../styles/";
var winNSCSS = "ns.css";
var winIECSS = "main.css";
var macCSS = "ns.css";
var unixCSS = "main.css";

var ie;
var n;
var mac;
var nmac;
var dom;


function init(){
    ie=(document.all);
    n=(document.layers);
    mac=(navigator.userAgent.indexOf("Mac")!=-1);
    nmac=(n && mac);
    //dom=(document.getElementById);
	dom = ((document.getElementById) && (!ie));

    if(ie){
        genObj="document.all";
        genStyle=".style";
    }
    if(n) {
        genObj="document.layers";
        genStyle="";
    }
}

 
init ();
var obj;
  
function createObj(divName){
    if(dom){
        stand_obj=document.getElementById('subBG');
        obj=stand_obj.style;
    } else{
        obj=eval(genObj+"['"+divName+"']"+genStyle);
    }  
}


function showSubBG(divName){
    createObj(divName);
    obj.visibility="visible";
}


function hide(divName){
//    setTimeout('hide("+divName+")',1000);
    createObj(divName);
    obj.visibility="hidden";
}


function hideAll(){
    hide('subBG');
    hide('subBG2');    
}




