/**********************************************************************************************
					
					
					Funciones para los submenus desplegables 
							Alberto Blanco (c) 2007
					
**********************************************************************************************/
var MENUDesplegadoId='@';	// Lleva el Id del submenu que esta desplegado
var MENUOrientacion='H'		//Orientación del menu,(H / V) horizontal o vertical
var MENUVelocidad=10;		// Número de pixels que se mueve cada vez que sale o entra el submenu

/*************************************************
	Llamada general para el control de menús
	Si aún no había colocado los menús lo hace
*************************************************/
function MENUControl(Id)
{
var a;

	if (MENUDesplegadoId=='@')
		{
		 MENUColoca();	// Aun no había colocado
		 window.onresize=MENUColoca;	// Capturo el evento del resize para que se recoloquen
		 document.onmousemove = MENUControlaRaton;	// Para poder ocultarlos cuando se mueva fuera del menu
		 };
		 
	if (MENUDesplegadoId!=Id)
		{
		if (MENUDesplegadoId!='') 
			{
			a=MENUDesplegadoId;
			MENUDesplegadoId='';
			MENUMete(a);
			};
		
		if (Id!='') 
			{
			MENUDesplegadoId=Id;
			MENUSaca(Id);
			};
		};
};


/**************************************************************
 Comprueba si hay un menu desplegado que el raton este dentro.
 En cuanto no este dentro, lo cierra
**************************************************************/
function MENUControlaRaton(e) {
var _x,_y;
var Menu,Scrol;
var Top, Left, Rigth, Bottom;
var flag=0;

	if (MENUDesplegadoId!='')
		{
		_x = event.clientX 
		_y = event.clientY 
		
		// Miramos si esta dentro del menu
		Menu=eval("document.all.mn" + MENUDesplegadoId);
		Top=CalculaTop(Menu);
		Left=CalculaLeft(Menu);
		Rigth=Left+Menu.offsetWidth-1;
		Bottom=Top+Menu.offsetHeight-1;
		if (_x>=Left && _x<=Rigth && _y>=Top && _y<=Bottom)
			flag=1;
		else
			{
			// Miramos si esta dentro del submenu
			Scrol=eval("document.all.sc" + MENUDesplegadoId);
			Top=CalculaTop(Scrol);
			Left=CalculaLeft(Scrol);
			Rigth=Left+Scrol.offsetWidth-1;
			Bottom=Top+Scrol.offsetHeight-1;
			if (_x>=Left && _x<=Rigth && _y>=Top && _y<=Bottom)
				flag=1;
			}
		};

	if (flag==0) MENUControl('');	// No estaba ni en el menu ni en el submenu. Lo cierro
	return true;
}


/**********************************************
	Coloca todos los menus en sus posiciones
**********************************************/
function MENUColoca()
{
var a,s;

	MENUDesplegadoId='';

	// Bucle para buscar todos los DIVs de los submenús
	for (a=0;a<document.all.length;a++)
		if (document.all[a].id.indexOf('dvOpcion')!=-1)
			{
			s=document.all[a].id;
			MENUColocaSub(s.substring(2,s.length));	//El Id del menu es OpcionXXXX donde XXXX será el número del menú
			};
};




/***********************************************
 Coloca las posiciones y estilos de un submenu 
***********************************************/
function MENUColocaSub(Id)
{
var TopMenu,LeftMenu
var Menu=eval("document.all.mn" + Id)
var Contenedor=eval("document.all.dv" + Id)
var Scrol=eval("document.all.sc" + Id)
var a,b,c

	// Comenzamos mirando el top y el left del menu del que cuelga el submenu
	TopMenu=CalculaTop(Menu)
	LeftMenu=CalculaLeft(Menu)

	// Colocamos el contenedor, centrado respecto al menú
	if (MENUOrientacion=='H')
		{
		Contenedor.style.top=TopMenu + Menu.offsetHeight;
		Contenedor.style.left=LeftMenu;
		if (Menu.offsetWidth>Contenedor.offsetWidth)
			{
			a=Menu.offsetWidth;
			b=Contenedor.offsetWidth;
			c=Math.round((a-b)/2);
			Contenedor.style.left=LeftMenu + c;
			}
		}
	else
		{
		Contenedor.style.top=TopMenu;
		c=Menu.offsetWidth + 1;
		Contenedor.style.left=LeftMenu + c;
		};
	
	// Colocamos el scrol
	if (MENUOrientacion=='H')
		{
		a=Scrol.offsetHeight;
		c=a*-1;
		Scrol.style.top=c;
		}
	else
		{
		a=Scrol.offsetWidth;
		c=a*-1;
		Scrol.style.left=c;
		};

	// Y lo hacemos visible	
	Scrol.style.visibility = 'visible';
};


/**********************************************
	Función para sacar el menú 
**********************************************/
function MENUSaca(Id)
{
var Scrol=eval("document.all.sc" + Id);
var a;

	if (Id!=MENUDesplegadoId) return;	// Si el que esta marcado como desplegado no es el que se le pasa, lo ignora

	if (MENUOrientacion=='H')
		a=parseInt(Scrol.style.top);		//De arriba a abajo
	else
		a=parseInt(Scrol.style.left);		//De izquierda a derecha

	if (a<0)
		{
		a+=MENUVelocidad;
		if (a>0) a=0;
		if (MENUOrientacion=='H') Scrol.style.top = a; else Scrol.style.left = a;
		if (a!=0) window.setTimeout("MENUSaca('" + Id + "');",1)
		};
		
};

/**********************************************
Función para ocultar el menú de abajo a arriba
**********************************************/
function MENUMete(Id)
{
var Scrol=eval("document.all.sc" + Id);
var a,b;

	if (MENUOrientacion=='H')
		{
		//De arriba a abajo
		b=Scrol.offsetHeight;
		a=parseInt(Scrol.style.top);
		}
	else
		{
		//De izquierda a derecha
		b=Scrol.offsetWidth;
		a=parseInt(Scrol.style.left);
		}


	if (a + b >0)
		{
		a-=MENUVelocidad;
		if (a + b < 0) a=b*-1;
		if (MENUOrientacion=='H') Scrol.style.top = a; else Scrol.style.left = a;
		if (a!=(b*-1) && MENUDesplegadoId!=Id) 
			window.setTimeout("MENUMete('" + Id + "');",1)
		};
};

/****************************************************************************
 Calcula el top real de un elemento dentro del documento
 Para ello se hace recursiva subiendo por la piramide del documento
 *****************************************************************************/
function CalculaTop(objeto)
{
var Pos=0;

	Pos=objeto.offsetTop;
	if (objeto.tagName!='BODY' && objeto.offsetParent!=null)
		Pos+=CalculaTop(objeto.offsetParent);
	return Pos;
};


/****************************************************************************
 Calcula el left real de un elemento dentro del documento
 Para ello se hace recursiva subiendo por la piramide del documento
 *****************************************************************************/
function CalculaLeft(objeto)
{
var Pos=0;

	Pos=objeto.offsetLeft;
	if (objeto.tagName!='BODY' && objeto.offsetParent!=null)
		Pos+=CalculaLeft(objeto.offsetParent);
	return Pos;
};