       
var prefixMenuId = "menu";
var durataFadeIn = 500;
var durataFadeOut = 500;
var durataFadeInVoce = 200;

var uAgent = navigator.userAgent;
var isFf = false;
if( uAgent.indexOf("Firefox") > 0 ) { isFf = true; } 

var numMenu = 10; // nuemro menu definiti

var myMenus = new Array(numMenu); // array effetti
var myMenusVoce = new Array(numMenu); // array effetti voci
var myMenusStatus = new Array(numMenu); // array stato del menu
var myMenusProp = new Array(numMenu); // array prop del menu
var filterTimerOut = 100; // millisec

// Inizializzo gli stati dei menu
for(i=0;i<numMenu;i++) {
    myMenusStatus[i] = [0,0];
    myMenusProp[i] = ['',''];
}

// Definizione stati
// 0 = nascosto
// 1 = in esecuzione (mostra)
// 2 = mostrato
// 3 = in esecuzione (nascondi)

function outDebug(str,clearData) {
    var boxDebug = document.getElementById('boxDebug');
    if( boxDebug )
    {
        if( clearData )
            boxDebug.innerHTML = str;
        else
            boxDebug.innerHTML += str + "<br />";
    }
}

/******** Filtro NascondiMenu ********/
function nascondiMenu(numero) {  
    // Se nascosto o lo sta già nascondendo allora esco
    if( myMenusStatus[numero][0] == 0 || myMenusStatus[numero][0] == 3 )
        return;
    
    if( isFf )
    {
        // Filtro l'uscita dal box per un problema di firefox e l'evento onmouseout
        myMenusStatus[numero][1] = setTimeout("nascondiMenuOk('"+numero+"');",filterTimerOut);
    }
    else
    {
        nascondiMenuOk(numero);
    }
}

/******** NascondiMenu ********/
function nascondiMenuOk(numero) {
    // Se nascosto o lo sta già nascondendo allora esco
    if( myMenusStatus[numero][0] == 0 || myMenusStatus[numero][0] == 3 )
        return;

    var menuIdOut = prefixMenuId + numero;
    if( $(menuIdOut) ) {

        // Se esco cancello le operazioni correnti
        myMenus[numero].cancel();

        myMenusStatus[numero][0] = 3; // Segnalo operazione in corso
        var currOpacity = $(menuIdOut).getStyle('opacity');            
        myMenus[numero] = new Fx.Tween(menuIdOut,'opacity',{duration: durataFadeOut, onComplete: function(){nascondiMenuEnd(numero)}});         
         // porto opacity a 0, alla fine dell'operazione l'attributo "display"
         // dello stile dell'elemento sarà impostato e "none" automaticamente
        myMenus[numero].start(currOpacity,0);
    }
}

/******** Fine NascondiMenu ********/
function nascondiMenuEnd(numero) {
    // aggiorno lo stato a "nascosto"
    myMenusStatus[numero][0] = 0;    
}

/******** MostraMenu ********/
function mostraMenu(numero) {
    if( isFf ) { clearTimeout(myMenusStatus[numero][1]); } // Azzero il timer per la scomparsa
    
    // Se già mostrato o sto mostrando esco
    if( myMenusStatus[numero][0] == 1 || myMenusStatus[numero][0] == 2 )
        return;
    
    var menuIdIn = prefixMenuId + numero;
    if( $(menuIdIn) ) {
           
        if( myMenusStatus[numero][0] == 0 )
        {
            $(menuIdIn).setStyle('opacity','0'); // Imposto opacity a 0
            $(menuIdIn).setStyle('display','block'); // Mostro perchè di default è nascosto
        }
        else if( myMenusStatus[numero][0] == 3 )
        {
            // Se sto nascondendo e voglio mostrare, stoppo e segnalo come nascosto
            myMenus[numero].cancel();
            myMenusStatus[numero][0] == 0;
        }
        
        var currOpacity = $(menuIdIn).getStyle('opacity'); // opacity corrente per il valore di inizio
         
        myMenusStatus[numero][0] = 1; // Segnalo operazione in corso
        myMenus[numero] = new Fx.Tween(menuIdIn,'opacity',{duration: durataFadeIn, onComplete: function(){mostraMenuEnd(numero)}});
        myMenus[numero].start(currOpacity,1); // porto opacity a 1
    }
    else {
        // alert("Menu non trovato!!!");
    }
}

/******** Fine MostraMenu ********/
function mostraMenuEnd(numero) {
    // aggiorno lo stato a "mostrato"
    myMenusStatus[numero][0] = 2;
}

function outVoce(numero,menu) {
   
    var idVoce = "voce" + numero + "-" + menu;
    if( $(idVoce) ) {
    
        // Fermo l'operazione in corso sulla voce
        myMenusVoce[menu].cancel();

        // Ripristino i valori originali
        $(idVoce).setStyle('color',myMenusProp[menu][0]);
        $(idVoce).setStyle('background-color',myMenusProp[menu][1]);
        
    }
    else {
        // alert("Voce non trovata!!!");
    }
}

function overVoce(numero,menu) {       
   
    var idVoce = "voce" + numero + "-" + menu;
    if( $(idVoce) ) {
    
        // Salvo i colori originali (color,background-color)
        myMenusProp[menu][0] = $(idVoce).getStyle('color');
        myMenusProp[menu][1] = $(idVoce).getStyle('background-color');            
            
        // opacity corrente per il valore di inizio
        var currColor = $(idVoce).getStyle('color');
        var currBack = $(idVoce).getStyle('background-color');      

        myMenusVoce[menu] = new Fx.Morph(idVoce, {duration: durataFadeInVoce});
        myMenusVoce[menu].start({'color': [currColor, currBack], 'background-color': [currBack, currColor]});
        
    }
    else {
        // alert("Voce non trovata!!!");
    }
}

function apriPagina(link) {
	location.href = link;
}
    
