//////////////////////////////////////////////////////////////////////////
//
// Funzioni per la gestione dei menu tramite layer
//
// (c) 2003 Neomedia
//


// Array con i menu aperti nei vari livelli
var nmmenu_levelmenu = new Array();

// Array con gli item selezionati nei vari livelli
var nmmenu_levelitem = new Array();

// Array con le classi degli item selezionati nei vari livelli
var nmmenu_levelitemclass = new Array();

// Root corrente
var nmmenu_rootcurr = 0;

// Classe della root corrente
var nmmenu_rootcurrclass = '';

// Chiusura del menu ritardata?
var nmmenu_closedelayed = 0;

// ID del setTimeout() attualmente in esecuzione
var nmmenu_timeoutid = 0;

// Indicano se il browser è Internet Explorer per Windows o Mac
var nmmenu_iewin = 0;
var nmmenu_iemac = 0;
if( navigator.appVersion.indexOf("MSIE") > -1 )
	{
	if( navigator.appVersion.indexOf("Mac") > -1 )
		nmmenu_iemac = 1;
	else
		nmmenu_iewin = 1;
	}

// Indica se tutti i div dei menu sono stati caricati
var nmmenu_completed = 0;




// Restituisce un array con la posizione [Left, Top] di un oggetto
function nmmenu_getobjposition( obj, offsetleft, offsettop )
{
	l = obj.offsetLeft + offsetleft;
	t = obj.offsetTop + offsettop;
	op = obj.offsetParent;
	while( op )
		{
		l += parseInt(op.offsetLeft);
		t += parseInt(op.offsetTop);
		op = op.offsetParent;
		}

	if( nmmenu_iemac )
		{
		l += 0;
		t += 0;
		}

	return( [l, t] );
}



// Esegue lo snap di un menu alla sua rooot
function nmmenu_snapmenu( id, l, t, w, h )
{
	menuobj = document.getElementById( 'nmmenu-menu-' + id );

	// Largezza minima del menu uguale a quella del relativo button
	if( menuobj.offsetWidth < rootobj.offsetWidth )
		menuobj.style.width = rootobj.offsetWidth + "px";

	snaps = new Array( 1, 0, 0, 0 );

	if( id == 'f' ) snaps = new Array( 1, 0, 1, 1 );


	if( snaps[0] )
		t = t + h;
	if( snaps[1] )
		t = t - menuobj.offsetHeight;
	if( snaps[2] )
		l = l + w;
	if( snaps[3] )
		l = l - menuobj.offsetWidth;

	menuobj.style.left = l + "px";
	menuobj.style.top = t + "px";
}



// Esegue lo snap di un submenu al suo item (con fit intelligente nello schermo)
function nmmenu_snapsubmenu( id )
{
	menuobj = document.getElementById( 'nmmenu-menu-' + id );
	itemobj = document.getElementById( 'nmmenu-item-' + id );

	pos = nmmenu_getobjposition( itemobj, -4, 0 );
	l = pos[0] + itemobj.offsetWidth;
	t = pos[1] - 2;
	if( nmmenu_iewin )
		l -= 2;
	if( nmmenu_iemac )
		l += 2;

	maxy = document.body.clientHeight + document.body.scrollTop;
	if( t + menuobj.offsetHeight > maxy )
		t -= t + menuobj.offsetHeight - maxy;
	if( t < document.body.scrollTop )
		t = document.body.scrollTop;

	maxx = document.body.clientWidth + document.body.scrollLeft;
	if( l + menuobj.offsetWidth > maxx )
		l = pos[0] - menuobj.offsetWidth - -4;
	if( l < document.body.scrollLeft )
		l = document.body.scrollLeft;

	menuobj.style.left = l + "px";
	menuobj.style.top = t + "px";
}



// Salta alla pagina corrispondente ad un certo menu
function nmmenu_jumpto( arg )
{
	nmmenu_closeall();
	location = '/catalogo/?arg=' + arg;
}


// Mouse click sulla root di un menu
function nmmenu_rootclick( id )
{
	if( nmmenu_iscompleted() )
		{
		nmmenu_open( id, 0 );
		nmmenu_closedelayed = 1;
		}
}


// Mouse sopra la root di un menu
function nmmenu_rootover( id, openmenu )
{
	if( nmmenu_iscompleted() )
		{
		nmmenu_timeoutreset();
		if( nmmenu_levelmenu[0] && nmmenu_levelmenu[0] != id )
			{
			nmmenu_close( 0 );
			nmmenu_rootdeselect();
			}
		nmmenu_rootselect( id );

		if( openmenu )
			nmmenu_open( id, 0 );
		}
}


// Mouse fuori dalla root di un menu
function nmmenu_rootout()
{
	if( nmmenu_iscompleted() )
		{
		if( !nmmenu_levelmenu[0] )	// Ignora se c'è un menu aperto
			{
			nmmenu_rootdeselect();
			}
		}
}


// Seleziona la root di un menu
function nmmenu_rootselect( id )
{
	if( nmmenu_rootcurr != id )
		{

		rootobj = document.getElementById( 'nmmenu-root-' + id );
		nmmenu_rootcurrclass = rootobj.className;
		rootobj.className = nmmenu_rootcurrclass ? nmmenu_rootcurrclass + ' nmmenu-rootactive' : 'nmmenu-rootactive';
		nmmenu_rootcurr = id;
		}
}


// Deseleziona la root del menu corrente
function nmmenu_rootdeselect()
{
	if( nmmenu_rootcurr )
		{
		id = nmmenu_rootcurr;
		document.getElementById( 'nmmenu-root-' + id ).className = nmmenu_rootcurrclass;

		nmmenu_rootcurr = 0;
		}
}


// Apre un certo menu ad un certo livello
function nmmenu_open( id, level )
{
	nmmenu_close( level );

	if( !level )	// E` il primo livello di menu?
		{
		// Per sicurezza (doppio click veloce, etc...)
		nmmenu_rootselect( id );

		// Apriamo il closer a tutto schermo
		closerobj = document.getElementById( 'nmmenu-closer' );
		closerobj.style.left = document.body.scrollLeft + 'px';
		closerobj.style.top = document.body.scrollTop + 'px';
		closerobj.style.width = document.body.clientWidth + 'px';
		closerobj.style.height = document.body.clientHeight + 'px';
		closerobj.style.visibility = 'visible';

		rootobj = document.getElementById( 'nmmenu-root-' + id )
		pos = nmmenu_getobjposition( rootobj, (nmmenu_iemac ? 0 : 0), (nmmenu_iemac ? 0 : 0) );
		w = rootobj.offsetWidth;
		h = rootobj.offsetHeight;

		// Posizioniamo ed apriamo il layer di copertura della root
		rootdivobj = document.getElementById( 'nmmenu-rootdiv-' + id )
		rootdivobj.style.left = pos[0] + "px";
		rootdivobj.style.top = pos[1] + "px";
		rootdivobj.style.width = w + "px";
		rootdivobj.style.height = h + "px";
		rootdivobj.style.visibility = 'visible';

		// Posizioniamo il menu
		nmmenu_snapmenu( id, pos[0], pos[1], w, h );
		}
	else
		{
		nmmenu_snapsubmenu( id );
		}

	nmmenu_levelmenu[level] = id;

	document.getElementById( 'nmmenu-menu-' + id ).style.visibility = 'visible';
}


// Chiude i menu a partire da un certo livello
function nmmenu_close( level )
{
	if( nmmenu_levelmenu[level] )
		{
		// Deselezioniamo l'item del menu
		nmmenu_itemdeselect( level );

		// Chiudiamo il menu del livello
		document.getElementById( 'nmmenu-menu-' + nmmenu_levelmenu[level] ).style.visibility = 'hidden';

		nmmenu_levelmenu[level] = 0;
		}
}


// Azzera tutti i menu
function nmmenu_closeall()
{
	if( nmmenu_levelmenu[0] )
		{
		nmmenu_close( 0 );

		document.getElementById( 'nmmenu-rootdiv-' + nmmenu_rootcurr ).style.visibility = 'hidden';
		document.getElementById( 'nmmenu-closer' ).style.visibility = 'hidden';

		nmmenu_closedelayed = 0;
		nmmenu_timeoutreset();
		}
	nmmenu_rootdeselect();
}


// Mouse sul menucloser
function nmmenu_closerover()
{
	if( !nmmenu_timeoutid )
		{
		if( nmmenu_closedelayed )
			nmmenu_timeoutid = setTimeout( 'nmmenu_closeall()', 600 );
		else
			nmmenu_closeall();
		}
}


// Resetta il timeout della chiusura del menu
function nmmenu_timeoutreset()
{
	if( nmmenu_timeoutid )
		{
		clearTimeout( nmmenu_timeoutid );
		nmmenu_timeoutid = 0;
		}
}


// Sopra un item di un menu
function nmmenu_itemover( id, level, hassubmenu )
{
	nmmenu_timeoutreset();
	if( nmmenu_levelitem[level] != id )
		{
		nmmenu_itemdeselect( level );

		nmmenu_itemselect( id, level );

		if( hassubmenu )
			{
			nmmenu_open( id, level+1 );
			}
		}
	else
		{
		nmmenu_itemdeselect( level+1 );
		}
}


// Seleziona un item di un menu
function nmmenu_itemselect( id, level )
{
	itemobj = document.getElementById( 'nmmenu-item-' + id );

	classname = itemobj.className;
	nmmenu_levelitemclass[level] = classname;
	itemobj.className = classname ? classname + ' nmmenu-itemactive' : 'nmmenu-itemactive';

	nmmenu_levelitem[level] = id;
}


// Deseleziona l'item corrente di un livello
function nmmenu_itemdeselect( level )
{
	if( nmmenu_levelitem[level] )
		{
		if( nmmenu_levelmenu[level+1] )
			{
			nmmenu_close( level+1 );
			}

		document.getElementById( 'nmmenu-item-' + nmmenu_levelitem[level] ).className = nmmenu_levelitemclass[level];

		nmmenu_levelitem[level] = 0;
		}
}


// Sopra un ruler di un menu
function nmmenu_rulerover( level )
{
	nmmenu_itemdeselect( level );
}



// Verifica se tutti i div sono stati caricati
function nmmenu_iscompleted()
{
	if( !nmmenu_completed )
		{
		if( document.getElementById( 'nmmenu-completed' ) )
			nmmenu_completed = 1;
		}

	return( nmmenu_completed );
}
