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

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

// this fonction apply the CSS style and the event
function initMenu(menuNum)
{
    // 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'+menuNum); // 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"+menuNum+'_'+i );
            }
        }
    }
}

function initOtherMenus() {
	var smenu = document.getElementById('smenu-container'); // the root element
	var menus = smenu.getElementsByTagName('ul'); // all the li
	for (var i=0; i<menus.length; i++) {
		if (menus[i].className != 'menu') {
			var lis = menus[i].getElementsByTagName('li');
			for (var j=0; j<lis.length; j++) {
				addAnEvent(lis[j],'mouseover',submenuLinkOver);
				addAnEvent(lis[j],'mouseout',submenuLinkOut);
			}
		}
	}
}

function submenuLinkOver () {
	if(this.nodeName == 'LI') {
		/*
		this.className = 'linkOver';
		*/
	}
}

function submenuLinkOut() {
	if(this.nodeName == 'LI') {
		//this.className = '';
	}
}

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
    try {
    	eval( "timeout" + this.id + " = window.setTimeout('hideUlUnder( \"" + this.id + "\" )', " + timeout + " );");
    } catch(i) {}
}

// 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
    try {
    	eval ( "clearTimeout( timeout"+ this.id +");" );
    	hideAllOthersUls( this );
    } catch(i) {};
}

// 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';
    }
}





// Browser Detect Lite  v2.1.4

// http://www.dithered.com/javascript/browser_detect/index.html

// modified by Chris Nott (chris@NOSPAMdithered.com - remove NOSPAM)





function BrowserDetectLite() {

   var ua = navigator.userAgent.toLowerCase();



   // browser name

   this.isGecko     = (ua.indexOf('gecko') != -1 && ua.indexOf('safari') == -1);

   this.isMozilla   = (this.isGecko && ua.indexOf('gecko/') + 14 == ua.length);

   this.isNS        = ( (this.isGecko) ? (ua.indexOf('netscape') != -1) : ( (ua.indexOf('mozilla') != -1) && (ua.indexOf('spoofer') == -1) && (ua.indexOf('compatible') == -1) && (ua.indexOf('opera') == -1) && (ua.indexOf('webtv') == -1) && (ua.indexOf('hotjava') == -1) ) );

   this.isIE        = ( (ua.indexOf('msie') != -1) && (ua.indexOf('opera') == -1) && (ua.indexOf('webtv') == -1) );

   this.isSafari    = (ua.indexOf('safari') != - 1);

   this.isOpera     = (ua.indexOf('opera') != -1);

   this.isKonqueror = (ua.indexOf('konqueror') != -1 && !this.isSafari);

   this.isIcab      = (ua.indexOf('icab') != -1);

   this.isAol       = (ua.indexOf('aol') != -1);



   // spoofing and compatible browsers

   this.isIECompatible = ( (ua.indexOf('msie') != -1) && !this.isIE);

   this.isNSCompatible = ( (ua.indexOf('mozilla') != -1) && !this.isNS && !this.isMozilla);



   // browser version

   this.versionMinor = parseFloat(navigator.appVersion);



   // correct version number

   if (this.isNS && this.isGecko) {

      this.versionMinor = parseFloat( ua.substring( ua.lastIndexOf('/') + 1 ) );

   }

   else if (this.isIE && this.versionMinor >= 4) {

      this.versionMinor = parseFloat( ua.substring( ua.indexOf('msie ') + 5 ) );

   }

   else if (this.isMozilla) {

      this.versionMinor = parseFloat( ua.substring( ua.indexOf('rv:') + 3 ) );

   }

   else if (this.isSafari) {

      this.versionMinor = parseFloat( ua.substring( ua.lastIndexOf('/') + 1 ) );

   }

   else if (this.isOpera) {

      if (ua.indexOf('opera/') != -1) {

         this.versionMinor = parseFloat( ua.substring( ua.indexOf('opera/') + 6 ) );

      }

      else {

         this.versionMinor = parseFloat( ua.substring( ua.indexOf('opera ') + 6 ) );

      }

   }

   else if (this.isKonqueror) {

      this.versionMinor = parseFloat( ua.substring( ua.indexOf('konqueror/') + 10 ) );

   }

   else if (this.isIcab) {

      if (ua.indexOf('icab/') != -1) {

         this.versionMinor = parseFloat( ua.substring( ua.indexOf('icab/') + 6 ) );

      }

      else {

         this.versionMinor = parseFloat( ua.substring( ua.indexOf('icab ') + 6 ) );

      }

   }



   this.versionMajor = parseInt(this.versionMinor);

   this.geckoVersion = ( (this.isGecko) ? ua.substring( (ua.lastIndexOf('gecko/') + 6), (ua.lastIndexOf('gecko/') + 14) ) : -1 );



   // dom support

   this.isDOM1 = (document.getElementById);

   this.isDOM2Event = (document.addEventListener && document.removeEventListener);



   // css compatibility mode

   this.mode = document.compatMode ? document.compatMode : 'BackCompat';



   // platform

   this.isWin   = (ua.indexOf('win') != -1);

   this.isWin32 = (this.isWin && ( ua.indexOf('95') != -1 || ua.indexOf('98') != -1 || ua.indexOf('nt') != -1 || ua.indexOf('win32') != -1 || ua.indexOf('32bit') != -1 || ua.indexOf('xp') != -1) );

   this.isMac   = (ua.indexOf('mac') != -1);

   this.isUnix  = (ua.indexOf('unix') != -1 || ua.indexOf('sunos') != -1 || ua.indexOf('bsd') != -1 || ua.indexOf('x11') != -1)

   this.isLinux = (ua.indexOf('linux') != -1);



   // specific browser shortcuts

   this.isNS4x = (this.isNS && this.versionMajor == 4);

   this.isNS40x = (this.isNS4x && this.versionMinor < 4.5);

   this.isNS47x = (this.isNS4x && this.versionMinor >= 4.7);

   this.isNS4up = (this.isNS && this.versionMinor >= 4);

   this.isNS6x = (this.isNS && this.versionMajor == 6);

   this.isNS6up = (this.isNS && this.versionMajor >= 6);

   this.isNS7x = (this.isNS && this.versionMajor == 7);

   this.isNS7up = (this.isNS && this.versionMajor >= 7);



   this.isIE4x = (this.isIE && this.versionMajor == 4);

   this.isIE4up = (this.isIE && this.versionMajor >= 4);

   this.isIE5x = (this.isIE && this.versionMajor == 5);

   this.isIE55 = (this.isIE && this.versionMinor == 5.5);

   this.isIE5up = (this.isIE && this.versionMajor >= 5);

   this.isIE6x = (this.isIE && this.versionMajor == 6);

   this.isIE6up = (this.isIE && this.versionMajor >= 6);



   this.isIE4xMac = (this.isIE4x && this.isMac);

}

var browser = new BrowserDetectLite();

