// Definicion de la clase Nodo para el menu dinamico
var PREFIJO_CAPA_NODO = "";
// Constructor
function Nodo(id) {
	this.id = id;
	// Capa que contiene esta opcion de menu 
	this.capaMenu = GetCapa(PREFIJO_CAPA_NODO + "menu_" + id);
	// Capa que contiene los submenus de este menu (desplegable)
	this.capaSubmenu = GetCapa(PREFIJO_CAPA_NODO + "submenu_" + id);
	// Nodo padre
	this.parent = null;
	// Indica si el submenu esta desplegado (o desplegandose)
	this.desplegado = false;
	// Nodos hijos
	this.hijos = new Array();
	// Siguiente nodo con el mismo padre
	this.nextSibling = null;
	// Numero de nodos hijos
	this.numHijos = 0;
	// Funcion para aņadir un hijo
	this.addHijo = nodoAddHijo;
	// Funcion para buscar un nodo en toda la jerarquia
	this.buscar = nodoFind;
}

/* Aņade un nodo como hijo de este nodo */
function nodoAddHijo(nodo) {
	nodo.parent = this;
	if (this.numHijos > 0) 
		this.hijos[this.numHijos-1].nextSibling = nodo;
	this.hijos[this.numHijos] = nodo;
	this.numHijos++;
	return nodo;
}

/* Busca un nodo con un id determinado entre los descendientes de este nodo */
function nodoFind(id) {
	for (var i=0; i<this.numHijos; i++) {
		var nodo = this.hijos[i];
		if (nodo.id == id) {
			return nodo;
		}
		else if (nodo.numHijos > 0) {
			nodo = nodo.buscar(id);
			if (nodo != null) {
				return nodo;
			}
		}
	}
	return null;
}

