var incremento = 1;
var tiempo1;
var ALTO_OPCION = 21;
var ANCHO_MENU = 184;
var nodoRaiz = new Nodo("");
var nivelPadres = 0;

function iniciarCapas(nodoPadre) {
	var alturaTotal = 0;
	if(nivelPadres==0)
		alturaTotal=21;
		
	for (var i=0; i<nodoPadre.numHijos; i++) {
		var nodo = nodoPadre.hijos[i];
		SetTopCapa(nodo.capaMenu,alturaTotal);
		SetHeightCapa(nodo.capaMenu,ALTO_OPCION);
		SetWidthCapa(nodo.capaMenu,ANCHO_MENU);
		alturaTotal += ALTO_OPCION;
		if (nodo.numHijos > 0) {
			nivelPadres=1;
			var alturaHijos = iniciarCapas(nodo);
			SetHeightCapa(nodo.capaSubmenu,alturaHijos);
			SetWidthCapa(nodo.capaSubmenu,ANCHO_MENU);
			if (nodo.desplegado) {
				SetTopCapa(nodo.capaSubmenu,alturaTotal);
				alturaTotal += alturaHijos;
			}
			else {
				SetTopCapa(nodo.capaSubmenu,alturaTotal-alturaHijos);
				clipeaCapa(alturaHijos,ANCHO_MENU,alturaHijos,0,
					nodo.capaSubmenu);
			}
		}
		else
			nivelPadres=0;
	}
	return alturaTotal;
}

function mover(num){
	if(window.tiempo1)
		clearInterval(tiempo1);
	incremento = 3;
	var nodo = nodoRaiz.buscar(num);
	if(nodo.desplegado){
		tiempo1 = setInterval("movimiento('"+num+"',-1)",50);
		nodo.desplegado = false;
	}
	else{
		tiempo1 = setInterval("movimiento('"+num+"',1)",50);
		nodo.desplegado = true;
	}
}

function movimiento(num,dir) {
	var nodo = nodoRaiz.buscar(num);
	var top = GetTopCapa(nodo.capaSubmenu);
	var topDesplegado = GetTopCapa(nodo.capaMenu) 
					+ GetHeightCapa(nodo.capaMenu);
	var topFinal;
	if (dir < 0) {
		// Estamos subiendo, posicion final por encima de menu
		topFinal = topDesplegado 
					- GetHeightCapa(nodo.capaSubmenu);
	}
	else {
		// Estamos bajando, posicion final justo bajo el menu
		topFinal = topDesplegado;
	}
	if(top != topFinal) {
		if (incremento > dir*(topFinal-top)) 
			incremento = dir*(topFinal-top);
		top = top + dir*incremento;
		SetTopCapa(nodo.capaSubmenu,top);
		var sigNodo = nodo.nextSibling;
		while (sigNodo != null) {
			var topMenu = GetTopCapa(sigNodo.capaMenu);
			SetTopCapa(sigNodo.capaMenu,topMenu + dir*incremento);
			if (sigNodo.capaSubmenu != null) {
				var topSubmenu = GetTopCapa(sigNodo.capaSubmenu);
				SetTopCapa(sigNodo.capaSubmenu,topSubmenu + dir*incremento);
			}
			sigNodo = sigNodo.nextSibling;
		}
		clipeaCapa(topDesplegado - top,
					GetWidthCapa(nodo.capaSubmenu),
					GetHeightCapa(nodo.capaSubmenu),
					0,
					nodo.capaSubmenu);
		VisibilidadCapa(nodo.capaSubmenu,1)

		// Ajusta el tamaņo del submenu que lo contiene 
		// y sube los nodos "tios"
		var padre = nodo.parent;
		while (padre.id != "") {
			var altoPadre = GetHeightCapa(padre.capaSubmenu);
			SetHeightCapa(padre.capaSubmenu, altoPadre + dir*incremento);
			clipeaCapa(0, GetWidthCapa(padre.capaSubmenu),
					altoPadre + dir*incremento, 0,
					padre.capaSubmenu);
			var sigNodo = padre.nextSibling;
			while (sigNodo != null) {
				var topMenu = GetTopCapa(sigNodo.capaMenu);
				SetTopCapa(sigNodo.capaMenu,topMenu + dir*incremento);
				if (sigNodo.capaSubmenu != null) {
					var topSubmenu = GetTopCapa(sigNodo.capaSubmenu);
					SetTopCapa(sigNodo.capaSubmenu,topSubmenu + dir*incremento);
				}
				sigNodo = sigNodo.nextSibling;
			}
			padre = padre.parent;
		}
		// Al nodo raiz, le cambiamos el tamaņo 
		// de la capa submenu (capa contenedora)
		var altoPadre = GetHeightCapa(padre.capaSubmenu);
		SetHeightCapa(padre.capaSubmenu, altoPadre + dir*incremento);
		
		incremento *= 2;
	}
	else{
		if(window.tiempo1)
			clearTimeout(tiempo1);

	}
}

