// JavaScript Document

function menuTabsDesplegable(datos)
{
	var menu = this;
	menu.claseTabs = datos.claseTabs;
	menu.clasePestanas = datos.clasePestanas;
	menu.objetoTabs = jQuery('.'+menu.claseTabs);
	menu.objetoPestanas = jQuery('.'+menu.clasePestanas);
	
	var numTabs = menu.objetoTabs.length;
	var anchoTab = menu.objetoTabs.outerWidth([true]);
	var anchoContenedorTabs = anchoTab * numTabs;
	//como las pestanas aparecen ocultas no es posible obtener su ancho con jquery
	//asi que lo pasamos como parametro inicial
	var anchoPestanas = datos.anchoPestanas;
	
	//variable que almacena los datos del menu del apartado que se encuentra desplegado, si hay alguno desplegado
	var menuDesplegado = {
	  desplegado:false,
	  refApartado:false
	};
	
	//variable que almacenara el emporizador
	var temporizador;
	//variable que se usa como bandera para determinar si un menu de un apartado debe cerrarse:
	//Cuando el puntero abandona el tab correspodiente que lo acaba de abrir se establece un temporizador de 3 seg
	//y la variable se cambia a 'true'
	//si al cabo de 3 segundos el puntero no ha entrado en el menu del apartado y la variable se ha cambiado a false
	//se cerrara el apartado
	var cerrarMenuApartado = false;
	//variable que indica si el temporizador esta corriendo
	var cuentaAtras = false;
	
	//funcion que cierra todas las pestañas
	function cerrarPestanas()
	{ 
	    if (cuentaAtras)
		{
			clearTimeout(temporizador);
			cuentaAtras = false;
		}
		menu.objetoPestanas.hide();
	}
	
	//funcion que abre la pestana activa
	function abrirPestana()
	{
		var idPestana = menu.clasePestanas+'_' + menuDesplegado.refApartado;
		var pestana = jQuery('#' + idPestana);
		
		var indicePestana = menu.objetoPestanas.index(pestana);
		//calculamos la posicion desde la izquierda para cada pestana en funcion de su orden dentro del menu
		//siendo cada una igual al ancho de cada tab * la posicion
		//teniendo en cuenta que la posicion de la pestaña + su ancho 
		//no puede ser mayor que la suma del ancho de todos los tabs del menu
		var posPestana = indicePestana*anchoTab;
		var posPestanaDer;
		var cssPestana = {};
		
		if ((posPestana + anchoPestanas) < anchoContenedorTabs)
		{
			cssPestana = {'left':posPestana+'px'};
		}
		else
		{
			posPestanaDer = anchoContenedorTabs - anchoPestanas;
			cssPestana = {'left':posPestanaDer+'px'};
		}
				
		if (pestana.is(':hidden'))
		{
		  pestana.fadeIn('fast').css(cssPestana);
		}
		else
		{
		  return false;
	    }
	}
	
	//funcion que cierra la pestana activa
	function cerrarPestana()
	{
		var idPestana = menu.clasePestanas+'_' + menuDesplegado.refApartado;
		var pestana = jQuery('#' + idPestana);
		
		if(cerrarMenuApartado)
		{
		  if (pestana.is(':visible'))
		  {
			pestana.fadeOut('fast');
		  }
		  else
		  {
			return false;
		  }
		}
		
		//puesto que esta funcion se ejecuta al terminar la cuenta atras, establecemos la variable como false
		cuentaAtras = false;
	}
	
	//al entrar con el puntero en el tab, mostramos el menu correspondiente a este apartado
	menu.objetoTabs.bind('mouseenter',function()
	{
		var tab = jQuery(this);
		var idTab = tab.attr('id');
		var refTab = idTab.replace(menu.claseTabs+'_','');
		
		cerrarPestanas();
		menuDesplegado.desplegado = true;
		menuDesplegado.refApartado = refTab;
		abrirPestana();
		
	});
	
	//al abandonar con el puntero el tab, establecemos una variable y un temporizador
	//la variable cambiara si se desplaza el puntero al interior del menu del apartado correspondiente
	//si al finalizar el temporizador el estado de la variable no ha cambiado
	//o lo que es lo mismo, el puntero no se ha colocado sobre el menu
	//se cerrará el menu
	
	menu.objetoTabs.bind('mouseleave',function()
	{
        cerrarMenuApartado = true;
		cuentaAtras = true;
        temporizador = setTimeout(cerrarPestana,2000);
	});
	
	//al entrar con el puntero en una pestana del menu estableceremos la variable para que no se cierre
	//y paramos el temporizador
	menu.objetoPestanas.bind('mouseenter',function()
	{
		cerrarMenuApartado = false;
		if (cuentaAtras)
		{
			clearTimeout(temporizador);
			cuentaAtras = false;
		}
	});
	
	//al abandonar con el puntero la pestana, lo cerramos
	menu.objetoPestanas.bind('mouseleave',function()
	{
		cerrarMenuApartado = true;
        cerrarPestana();
	});
	
}
