// ESTO ESTA HECHO CON AJAX asi que tienen que tener en cuenta que aunque es Jscript
// esta programado orientado a objetos y varias de las funciones definidas a lo largo
// del programa son clases y metodos. Dentro de algunas funciones donde se definen metodos
// se ver&aacute; que se define una funcion dentro de la funcion. Esto es que se est&aacute; definiendo un metodo.
// Algunos de los metodos llamados en la funcion load() -la inicial - y las clases usadas se definen a continuacion
//por lo que es recomendable primero leerse todo un poco y los comentarios tmb y luego meterse en el codigo

addEvent( window, 'load', load );
var popID;
var tID;
var slideID;
var altura;
altura = 1;

// CARGA DE LAS LINEAS DE SUBMENU DE CADA MENU
function load() {
inMenu = false;
body = document.getElementsByTagName( "body" )[0];
last = null;
if( getNode( "publications" ) == null ) return;

var research  = new MenuP( getNode( "research" ));
var special  = new MenuP( getNode( "special" ));
var about  = new MenuP( getNode( "about" ));
var people  = new MenuP( getNode( "people" ));
var publica  = new MenuP( getNode( "publications" ));

//AGREGA A CADA MENU LOS SUBMENUS INVOCANDO LA FUNCION ADD
research.add( new Menu( "&iquest;Qu&eacute; es una C&Aacute;TEDRA?", "/029_Catedras_QueEs.asp" ) );
//research.add( new Menu( "Bienes P&uacute;blicos Intergeneracionales", "020_Catedras_Principal.asp?z=18" ) );
research.add( new Menu( "Capital Humano y Empleo", "/catedras/index.asp?z=3" ) );
research.add( new Menu( "Econom&iacute;a de Cambio Climatico", "/catedras/index.asp?z=1" ) );
research.add( new Menu( "Econom&iacute;a de la Salud y Hábitos de Vida", "/catedras/index.asp?z=6" ) );
research.add( new Menu( "Inmigraci&oacute;n", "/catedras/index.asp?z=15" ) );
research.add( new Menu( "Pymes", "/catedras/index.asp?z=8" ) );
research.add( new Menu( "Talento, Esfuerzo y  Movilidad Social", "/catedras/index.asp?z=16" ) );
research.add( new Menu( "Programa Energ&iacute;a y Cambio Clim&aacute;tico", "/catedras/index.asp?z=17" ) );
research.add( new Menu( "C&aacute;tedra FEDEA-Repsol", "/catedras/index.asp?z=18" ) );
research.add( new Menu( "C&aacute;tedra Fuentes Quintana", "/catedras/index.asp?z=4" ) );
research.add( new Menu( "FEDEA- Abertis", "/catedras/index.asp?z=19" ) );
research.add( new Menu( "FEDEA-BBVA", "/catedras/index.asp?z=2" ) );
research.add( new Menu( "FEDEA-CAJA MADRID", "/catedras/index.asp?z=7" ) );
research.add( new Menu( "FEDEA-McKinsey", "/catedras/index.asp?z=24" ) );



//Crea el objeto Menu Divisiones
research.create();

//con este es lo mismo que con el de arriba
about.add( new Menu( "&iquest;Qui&eacute;nes Somos?", "/001_AcercaDe_QuienesSomos.asp" ) );
about.add( new Menu( "&iquest;Para qu&eacute;?", "/009_AcercaDe_ParaQue.asp" ) );
about.add( new Menu( "Organos de Gobierno", "/002_AcercaDe_MiembrosConsejo.asp" ) );
//about.add( new Menu( "Trabajar en FEDEA", "/003_AcercaDe_TrabajarFedea.asp" ) );
about.add( new Menu( "Contacto y Localizaci&oacute;n", "/004_AcercaDe_Ubicacion.asp" ) );
about.add( new Menu( "Informaci&oacute;n Financiera y Legal", "/005_AcercaDe_FinanLegal.asp" ) );
about.add( new Menu( "FEDEA en los medios", "/007_AcercaDe_EnMedios.asp" ) );
about.add( new Menu( "Patronos", "/008_AcercaDe_Patrocinadores.asp" ) );
about.create();

//con este es lo mismo que con el de arriba
special.add( new Menu( "&iquest;Qu&eacute; es una RED DE INVESTIGACI&Oacute;N?", "/050_Redes_QueEs.asp" ) );
special.add( new Menu( "Sociedad Abierta", "http://www.sociedadabierta.net" ) );
special.add( new Menu( "Proyecto Consolider", "http://www.fedea.es/pub/otros/CONSOLIDER-spanish.pdf" ) );
special.add( new Menu( "Enepri", "http://www.enepri.org" ) );
special.add( new Menu( "Mainstreaming Methodology for Estimating the Costs of Crime", "http://www.york.ac.uk/criminaljustice" ) );
//special.add( new Menu( "Red de Credibilidad de los Reg&iacute;menes Cambiarios", "http://www.fedea.es/rcrc" ) );
//special.add( new Menu( "Red Vivienda", "http://www.fedea.es/redvivienda" ) );
special.add( new Menu( "REDg", "http://www.fedea.es/redg" ) );
special.add( new Menu( "Observatorio de redes de nueva generación", "http://www.crisis09.es/redes" ) );
special.add( new Menu( "Observatorio Cambio Climático", "http://www.crisis09.es/cambioclimatico" ) );
special.add( new Menu( "Observatorio laboral de la Crisis", "http://www.fedea.es/observatorio/" ) );
special.add( new Menu( "Observatorio Empresarial de la Crisis", "http://www.crisis09.es/pymes/" ) );
//special.add( new Menu( "NEREC", "http://www.nerec.es" ) );
special.create();

//con este es lo mismo que con el de arriba
people.add( new Menu( "Directores C&aacute;tedra", "/051_Directores_catedra.asp" ) );
people.add( new Menu( "Investigadores", "/012_Investigadores.asp" ) );
people.add( new Menu( "Investigadores Post-Doc y visitantes", "/017_Postdoc.asp" ) );
people.add( new Menu( "Analistas de Investigaci&oacute;n", "/014_Ayudantes.asp" ) );
people.add( new Menu( "Analistas de informaci&oacute;n", "/052_Analistas_informacion.asp" ) );
people.add( new Menu( "Personal de Apoyo", "/015_Administrativo.asp" ) );
people.create();

//con este es lo mismo que con el de arriba
publica.add( new Menu( "Publicaciones de Fedea", "/032_Publicaciones_Tipos.asp" ) );
publica.add( new Menu( "Documentos De Trabajo", "/030_Publicaciones_Principal.asp?z=1" ) );
publica.add( new Menu( "FEDEA Brief", "/030_Publicaciones_Principal.asp?z=2" ) );
publica.add( new Menu( "Estudios Econ&oacute;micos", "/030_Publicaciones_Principal.asp?z=3" ) );
publica.add( new Menu( "Bolet&iacute;nes FEDEA", "/030_Publicaciones_Principal.asp?z=4" ) );
publica.add( new Menu( "Boletines del Observatorio laboral de la Crisis", "http://www.fedea.es/observatorio/boletines.html" ) );
publica.add( new Menu( "Boletines Observatorio Empresarial de la Crisis", "http://www.crisis09.es/PDF/observatorio-empresarial-de-la-crisis.pdf" ) );
publica.add( new Menu( "Monografias", "/088_monografias.asp" ) );
publica.add( new Menu( "Boletín observatorio cambio climático", "http://www.crisis09.es/cambioclimatico/PDF/observatorio-cambio-climatico.pdf" ) );
publica.create();
}

//Es la definici&oacute;n de la clase MenuP que es utilizada para crear los objetos tipo menu de la func de arriba
//Crea dos metodos a la nueva clase "add" y "create" (que se utilizan para armar los submenus)
//Esto permite dibujar cada liena de submenu como un DIV + UL + LI
// CADA BOTON (DIVISIONES, CONTACTO, etc) es una clase de tipo MenuP
function MenuP ( node ) {
this.node = node;
//Crea el array donde se va a cargar el submenu
this.menuItems = new Array();
//Define el metodo add que agrega una linea de submenu al menu
MenuP.prototype.add = function( menuItem ) {
this.menuItems[ this.menuItems.length ] = menuItem;	
}
//Define el metodo create que crea el menu una vez definido y que le da formato, estilo y eventos (mouseout, on etc)
//Crea un DIV por menu y UL/LI por submenus
MenuP.prototype.create = function( ) {
var dNode = document.createElement( "div" );
dNode.className = "jsMenu";
var str = "_" + this.node.id;
dNode.setAttribute( "id", str );
var w = this.node.offsetWidth;
//dNode.style.width = w > 160 ? w+"px" : "160px";
dNode.style.width = w +"px";
dNode.style.top = ( this.node.offsetTop + this.node.offsetHeight ) + "px";
dNode.style.left = this.node.offsetLeft + "px";
//agrega los eventos al menu (boton)principal
addEvent( this.node, "mouseover", function() { showMenuInTime(str, 150) } );
addEvent( this.node, "mouseout", function() { setInMenu(false) } );
//agrega los eventos a los submenus
dNode.setAttribute( "pItemID", this.node.id );
addEvent( dNode, "mouseover", function() { setInMenu(true) } );
addEvent( dNode, "mouseout", function() { setInMenu(false) } );
var html = "<ul>";
for( var i=0; i<this.menuItems.length; i++ ) {
	html += this.menuItems[i].getLinkHTML();
}
body.appendChild( dNode );
dNode.innerHTML = html + "</ul>";
}
}

//Funcion invocada en la primera funcion cuando se invoca el metodo add
//realiza la adicion de los parametros de nombre y href pasados al objeto menu
function Menu( value, href ) {
this.value = ( value == null ) ? "" : value;
this.href = ( href == null ) ? "" : href;
//se fija el tipo de href pasado para ver si le agrega la primera parte (http://...) o no
if( this.href != "" && typeof useAbsPath != "undefined" )
	if( useAbsPath && this.href.indexOf( "http://" ) == -1 && this.href.indexOf( "https://" ) == -1 )
		this.href = "http://www.fedea.es" + this.href;
//Crea el metodo obtenerlink de la clase menu y le da la accion onclick
Menu.prototype.getLinkHTML = function () {
	if( this.value != "" && this.href != "" ) {
		if (this.href.indexOf("http://") != -1) {
			return "<li><a target=\"_blank\" onclick=\"setInMenu(false); hideMenu(); return true;\" href=\"" + this.href + "\">" + this.value + "</a></li>";		
		} else {
			return "<li><a onclick=\"setInMenu(false); hideMenu(); return true;\" href=\"" + this.href + "\">" + this.value + "</a></li>";
		}
	} else if( this.value != "" && this.href == "" )
		return "<li class='heading'>" + this.value + "</li>";
	else
		return "<li class='separator'>&nbsp;</li>";
}
}
//muestra menu y delay
function showMenuInTime( node, time ) {
popID = setTimeout( "showMenu('" + node + "')", time );
}

//MOSTRAR LOS MENUS DESPLEGANDOSE
function showMenu( node ) {
clearTimeout( popID );
if( typeof node == "string" )
	node = getNode( node );
if( last != null && last != node )
	hideMenu( last );
else if( last == node ) {
	setInMenu( true );
	return;
}
var pItem = getNode( node.getAttribute( "pItemID" ) );
var menuLeft = 0;
var menuTop = pItem.offsetHeight;
var tmp = pItem;
while(tmp!=null && tmp.tagName!="BODY") {
	if( tmp.tagName == "html:body" ) break;
	
	menuLeft += tmp.offsetLeft;
	tmp = tmp.offsetParent;
}
node.style.left = menuLeft + "px";
// AQUI CAMBIAN LA ALTURA DESDE DONDE SE DESPLIEGA EL MENU
/*node.style.top = 139 + "px";*/
//define el ancho del submenu 
//le agregu&eacute; el menos 3 porque por la caja que se despliega era m&aacute;s grande que el boton debido a los bordes

if (node.getAttribute( "pItemID" ) == "publications") {
	node.style.backgroundImage = "url(/images/f-menu1.gif)";
} else if (node.getAttribute( "pItemID" ) == "seminars") {
	node.style.backgroundImage = "url(/images/f-menu2.gif)";	
} else if (node.getAttribute( "pItemID" ) == "research") {
	node.style.backgroundImage = "url(/images/f-menu3.gif)";	
} else if (node.getAttribute( "pItemID" ) == "networks") {
	node.style.backgroundImage = "url(/images/f-menu4.gif)";	
} else if (node.getAttribute( "pItemID" ) == "people") {
	node.style.backgroundImage = "url(/images/f-menu5.gif)";	
} else if (node.getAttribute( "pItemID" ) == "about") {
	node.style.backgroundImage = "url(/images/f-menu6.gif)";	
}
 else if (node.getAttribute( "pItemID" ) == "special") {
	node.style.backgroundImage = "url(/images/f-menu4.gif)";	
}
var w = pItem.offsetWidth+38;
node.style.width = w +"px" ;
//node.style.display = "block";
setInMenu( true );
last = node;
slideID = setInterval( "slide( last )", 10);
tID = setTimeout( "hideMenu( last )", 200 );
}

function slide(nodo) {
	if (altura == 1) {
		nodo.style.display = "block";
	}
	nodo.style.clip = "rect(auto auto " + altura + "px auto)";
	if (altura < 200) {
		altura = altura + 10;
	} else {
		clearInterval(slideID);
		altura = 1;
		nodo.style.clip = "rect(auto auto auto auto)";
	}
}

//ESTA FUNCION ESCONDE EL MENU DESPLEGADO
function hideMenu( node ) {
if( node == null ) {
	setInMenu( false );
	hideMenu( last );
	return;
}
if( typeof node == "string" )
	node = getNode( node );
if( !inMenu ) {
	node.style.display = "none";
	var pItem = getNode( node.getAttribute( "pItemID" ) );
	last = null;
	clearTimeout( tID );
	clearInterval(slideID);
} else
	tID = setTimeout( "hideMenu( last )", 500 );
}


function setInMenu( value ) {
inMenu = value;	
if( !value ) clearTimeout( popID );
}

//funcion agregar evento usada para agregar los eventos mouseout y on de la clase menuP
function addEvent( node, evtType, func ) {
if( node.addEventListener ) {
	node.addEventListener( evtType, func, false );
	return true;
} else if( node.attachEvent )
	return node.attachEvent( "on" + evtType, func );
else
	return false;
}

//FUncino usada en la creacion de los botones principales en la funcion de carga (la primera)
function getNode( nodeId ) {
if( document.getElementById )
	return document.getElementById( nodeId );
else if( document.all && document.all( nodeId ) )
	return document.all( nodeId );
else if( document.layers && document.layers[ nodeId ] )
	return document.layers[ nodeId ];
else
	return false;
}
