//	'# menu class per MOZ
//	'# parametri costruttore: - id html del menu


var SRMenu = function( idElement )
{
	
	//	'# properties
	windowWidth = document.body.offsetWidth;
	

	//	'# TODEBUG
	if(DEBUG){
		toDebug = document.getElementById('toDebug');
		toDebug.innerHTML += '<BR> --------------SRMENU_MOZ------------ ' ;
	}
	//	##########
	//	'# elemento con l'hover
	this.Hover	= null;
	
	//	'# oggetto menu con l'id passato al costruttore:
	this.Menu = document.getElementById( idElement );
	
	//	'# eventi
	this.OnError = null;
	//	'# inizializzo i button
	this.initButtons();
	
}

function SRButton_OnClick(button)
{
	
	if( ndLevelOnClick ) return;
	//	'# se è già aperta una bandiera devo prima chiudere quella
	if( Active )
	{
		RealOut();
	}
	
	//	'# se il buttonclick è true non catcho il click sul body
	ButtonClick = true;
//	// if(DEBUG) toDebug.innerHTML += '<BR> --------------SRButton_OnClick------------ ' ;
	//	'# conservo l'informazione della visualizzazione bandiera
	Visible = true;
	//	'# rilevo la dimensione del button
	var buttonWidth	= button.offsetWidth;
	//	'# rilevo il margine sx del button
	var buttonLeft  = button.offsetLeft;
	var buttonRight	= buttonLeft + buttonWidth;
	var originalLeft;
	if( button.getElementsByTagName('UL') != null || button.getElementsByTagName('UL') != 'undefined' || Active == null)
	{
		//toDebug.innerHTML += "button.getElementsByTagName('UL') != null || button.getElementsByTagName('UL') != 'undefined' <br>"
		ndUL = button.getElementsByTagName('UL');	
	}else{
		//toDebug.innerHTML += 'return<br>';
		return;
	}

	//	'# rendo graficamente l'elemento attivo
	ActiveClassName	= button.className;
	if(button.className.indexOf('Active') < 0)
	button.className += 'Active';
	
	//	'# conservo l'innerHTML dell'active per controllare al mouseout se l'elemento è lo stesso
	Active = ndUL[0];
	Active.style.display = 'block';
	var newLeft = button.offsetLeft;
	/*	calcolo per definire se l'elemento aperto va oltre il margini dx
		del monitor in tal caso prendo in cosiderazione il margine destro del padre	
		non più il sinistro 
	*/
	// conservo la left originaria
	ActiveLeft = Active.offsetLeft;
	var widthLeft = Active.offsetWidth + Active.offsetLeft ;
	// 292 è la larghezza max del terzo livello
	widthLeft+=292;
	var windowWidth = document.body.offsetWidth;
	// TODO:
	/*
		LA direction deve essere SX anche se il figlio va oltre 
		il limite della pagina
	*/
	//ho messo il -20 perche senno a 800x600 il menu dei documenti non si vedeva - jeko
	if( widthLeft - 20 > windowWidth )
	{
		var activeChild;
		var activeLength;
		activeChild = Active.getElementsByTagName('LI');
		activeLength = activeChild.length;
		for(var y=0;y<activeLength;y++)
		{
			if(activeChild[y].className == 'secondoLivelloPadre')
			{
				activeChild[y].className = 'secondoLivelloPadreSX';
			}
		}
		RdLevelDirection = 'SX';

		newLeft = (button.offsetLeft + button.offsetWidth) - Active.offsetWidth;
	}else{
		RdLevelDirection = 'DX';
	}		
	//newLeft+=5;
	Active.style.left  = newLeft + 'px';

}
function NDLevel_OnClick( button )
{
		// if(DEBUG) toDebug.innerHTML += '<BR> --------------NDLevel_OnClick------------ ' ;

		ndLevelOnClick = true;
		ButtonClick = true;
		if ( ActiveRdLevel ) 
		{
			HideRdLevel();
		}
		
		rdLevelOnClick = true;
		var rdLevel = button.getElementsByTagName("UL");
		//	'# modifico la classe del secondo livello per la visualizzazione della freccia:
		ActiveNdLevel = button;
		ActiveClassNameNdLevel = ActiveNdLevel.className;
		ActiveNdLevel.className = ActiveNdLevel.className + 'Opened';
		//	'# rendo l'elemento visibile
		
		var offWidth = button.offsetParent.offsetWidth;
		var offHeight = button.offsetParent.offsetHeight;
		var offTop = button.offsetTop;
		ActiveRdLevel = rdLevel[0];
		ActiveClassNameRdLevel = ActiveRdLevel.className;
		ActiveRdLevel.className = ActiveRdLevel.className + 'Opened';
		ActiveRdLevel.style.top = offTop + "px";
		ActiveRdLevel.style.height = offHeight + "px";
		//	'# gestisco la direction 
		if( RdLevelDirection == 'DX' )
		{
			ActiveRdLevel.style.left = offWidth + "px";
		}else{
			ActiveRdLevel.style.right = offWidth + "px";

		}
	
}
//	gestisco la scomparsa del terzo livello
function HideRdLevel()
{
	if( ActiveRdLevel )
	{
		if( DEBUG ) toDebug.innerHTML += '<BR> -----------  HIDE RD LEVEL TRUE--------------';	
		
		ActiveRdLevel.className = ActiveClassNameRdLevel;
		ActiveRdLevel = null;
		ActiveNdLevel.className = ActiveClassNameNdLevel;
		ActiveNdLevel = null;
	}
}
// stabilisco la direction del button:
function getButtonDirection(n, limit)
{
	var direction;
	direction = (n-1)<((limit/1.5)-3)?"DX":"SX";
	return direction;
}
SRMenu.prototype.initButtons = function ()
{
	
	// if(DEBUG) toDebug.innerHTML += '<BR> --------------INIT BUTTONS------------ ' ;
	
	Body = document.body;
	Body.onclick = Body_OnClick;
	//	'# elementi di primoLivello
	var buttons		= this.Menu.childNodes;
	var limit 		= buttons.length;
	PositionArray	= new Array();
	for(var i=0;i<limit;i++)
	{
		//	'# impedisco a mozilla di leggere gli oggetti di testo
		if( buttons[i].nodeName != "#text" )
		{
			// creo un array per gestire la position dei button
			// gli ultimi tre li apro cmq a DX
			PositionArray[ buttons[i].id ] = getButtonDirection(i, limit);
			/*	gestisco la visualizzazione sul onmouseleave in modo
				da utilizzare la funzione di timer per la chiusura del menu che fa riferimento
				alla variabile KeepAlive
			*/
			//	'# handler onclick sul body
			var newHREF;				
//				buttons[i].setAttribute("onclick", "javascript:SRButton_OnClick();");
			newHREF = buttons[i].getElementsByTagName("A");
			//newHREF[0].setAttribute("href", "pippo");
			//	'# questa funzione è necessaria per gestire il click sul body...
			buttons[i].onmouseout = SRButton_OnMouseOut;
			
			
			/*	*	GESTIONE TERZO LIVELLO	*	*/
			// elementi del secondo livello
			var ndLevel =  buttons[i].getElementsByTagName("LI");
			var ndLevelLimit = ndLevel.length;
			
			
			for( var j=0;j<ndLevelLimit;j++ )
			{
				// elementi del terzo livello
				var rdLevel = ndLevel[j].getElementsByTagName("UL");
				var rdLevelLimit = rdLevel.length
				// se il secondo livello ha figli:
				if (rdLevelLimit > 0 )
				{
					var toPass = ndLevel[j];
				}
			}
		}
	}
}
function NDLevel_OnMouseOut()
{
	// if(DEBUG) toDebug.innerHTML += '<BR> --------------NDLevel_OnMouseOut------------ ' ;
	ndLevelOnClick = false;
	SRButton_OnMouseOut();
	
}
function SRButton_OnMouseOut( )
{
	// if(DEBUG) toDebug.innerHTML += '<BR> --------------SRButton_OnMouseOut------------ ' ;
	//	'# lo metto a false in modo che se c'è un click sul body si chiude il menu
	ButtonClick = false;
	
}
function Body_OnClick()
{
	//	'# controllo che l'elemento sia attivo e che il click non sia stato fatto
	//	'# su una voce di secondo livello
		
	// if(DEBUG)toDebug.innerHTML += '<BR> --------------Body_OnClick------------ ' ;
	
	if(Active && !ButtonClick)
	{
		RealOut();
		//	'# resetto la variabile rdLevelOnClick
		rdLevelOnClick = false;
	}

	

}
function RealOut()
{
	// if(DEBUG) toDebug.innerHTML += '<BR> --------------SRButton_OnMouseOut------------ ' ;	
		Active.parentNode.className = ActiveClassName;
		//	'# pulisco tutte le variabili
		Active.style.left = null;
		Active.style.right = null; 
		Active.style.display = 'none';
		Active = null;
		Visible = false;
		HideRdLevel();
		
}

