﻿// ------------------------------------------------------------------------------------------------------------------
// Menus déroulants CSS
// (C)2005 CAT Developments
// ------------------------------------------------------------------------------------------------------------------

window.onload=montre;

// --- Variables globales

var timerId = 0;  
var nosel = false;
var nb_sm = 0;
var nb_mm = 0;
var start_sous_menu = false;
var current_menu = null;
var menus_seuls = new Array();
var idx_ms = 0;
var hashPositions = {};
var curw;

// --- Coordonnées

function coords(ref,x,y)
    {
    this.reference = ref;
    this.x = x;
    this.y = y;
    }

// --- Fonction lourde pour contourner un bug de firefox :-(( 

function isAlone(id)
    {
    for (var i = 0; i < idx_ms; i++)
        {
        if  (id == menus_seuls[i]) return true;
        }
    return false;
    }


// --- Affiche un sous menu et eventuellement inverse une selection

function montre(toto,id) 
    {
    var d = document.getElementById(id);
    reinit();
    if (d) {d.style.display='block'; nosel = false; }
    if ((toto) && (toto.style)) {toto.style.backgroundImage="url('/lib/ArboMenuDeroulant/fond_m_on.gif')"; nosel = false;}
    else {timerId = setTimeout('rTimer()',500);}
    }

// --- Reinitialise un menu (enleve la selection et cache tous les sous menus)

function reinit()
    {
	for (var i = 0; i <= nb_sm; i++) 
	    {
		if (document.getElementById('sm'+i)) {document.getElementById('sm'+i).style.display='none';}
	    }
	    
	for (var i = 0; i <= nb_mm; i++) 
	    {
	    var d = document.getElementById('mm'+i);
		if  (d) 
		    {
		    if  (!isAlone(i))
		        {
		        d.style.backgroundImage="url('/lib/MenuDeroulant/bouton.gif')";
		        d.style.backgroundPosition="right bottom";
		        }
		    else
		        {
		        d.style.backgroundImage="";
		        }
		    }
	    }
    
    nosel = true;
    }    
   
// --- Affiche ou cache un menu complet
   
function affmenu(id,ok)
    {
    var d = document.getElementById(id);
    if  (d)
        {
        if  (ok) 
            {
            if  (current_menu != null) affmenu(current_menu,false);
            reinit(); 
            d.style.top = (getOffsetPosition(hashPositions[id].reference,'Top') + hashPositions[id].y) + 'px';
            d.style.left = (getOffsetPosition(hashPositions[id].reference,'Left') + hashPositions[id].x) + 'px';
            d.style.display = 'block';
            current_menu = id;
            timerId = setTimeout('rTimer()',1500);          // si l'utilisateur n'a pas réagit au bout de 1.5s, on referme
            }
        else 
            {
            d.style.display='none';
            current_menu = null;
            }
        }
    }    
    
// --- Récupère la position d'un objet

function getOffsetPosition(inID, inTYPE)
    {
    var iVal = 0;
    var oObj = document.getElementById(inID);
    var sType = 'oObj.offset' + inTYPE;
    while (oObj.offsetParent)
        {
        iVal += eval(sType);
        oObj = oObj.offsetParent;
        }
    return iVal;
    }

// --- Ferme le menu automatiquement au bout d'1/2 seconde si on en est sorti
  
function rTimer()
    {
    if  (!timerId) return;
    clearTimeout(timerId);
    if  (nosel) affmenu(current_menu,false); 
    }  
    
// -------------------------------------------------------------------------------------------------------------------
// Génération du menu
// -------------------------------------------------------------------------------------------------------------------

// --- Debut du menu

function deb_menu(id,ref,x,y,w)
    {
    var c = new coords(ref,x,y);
    hashPositions[id] = c;
    curw = w;
    document.write('<div id="' + id + '" style="display:none;position:absolute;" class="dropshadow2">');
    document.write('<div class="innerbox">');
    document.write('<dl id="menu" style="width:' + w + 'px">');
    }
    
// --- Ajoute une ligne au menu

function aj_mligne(texte,sous_menu,l)
    {
    if  (start_sous_menu) fin_smenu();
    var id_sous_menu = (sous_menu ? ("sm" + nb_sm) : "*");
    document.write('<dt id="mm' + nb_mm + '" onmouseover="javascript:montre(this,\'' + id_sous_menu + '\')" onmouseout="javascript:montre()" >');
    if  (!sous_menu) {document.write('<a href="' + l + '">'); menus_seuls[idx_ms++] = nb_mm; }
    document.write(texte);
    if  (!sous_menu) document.write('</a>');
    document.write('</dt>');
    nb_mm++;
    if  (sous_menu) deb_smenu(l);
    }

// --- Début d'un sous menu

function deb_smenu(w)
    {
    document.write('<dd class=\"sous_menu\" id="sm' + nb_sm + '" onmouseover="javascript:montre(null,\'sm' + nb_sm + '\')" onmouseout="javascript:montre()" style="width:' + w + 'px; left:' + (curw - 25) +  'px">'); 
    document.write('<ul class=\"sous_menu\">');  
    nb_sm++;
    start_sous_menu = true;
    }
    
// --- Ajoute une ligne à un sous menu    
    
function aj_smligne(texte,lien)
    {
    document.write('<li class=\"sous_menu\">');
    document.write('<a href="' + lien + '">' + texte + '</a>');
    document.write('</li>');
    }    

// --- Fin d'un sous menu

function fin_smenu()
    {
    document.write('</ul>');
    document.write('</dd>');
    start_sous_menu = false;
    }

// --- Fin d'un menu

function fin_menu()
    {
    if (start_sous_menu) fin_smenu();
    document.write('</dl>');
    document.write('</div></div>');
    }
    
   
