trees [0] = new tr_Tree ("arbol0");
trees [1] = new tr_Tree("arbol1");
trees [2] = new tr_Tree ("arbol2");
trees [3] = new tr_Tree ("arbol3");
trees [4] = new tr_Tree ("arbol4");

function tr_Tree (nombre, class_texto, posx_ori, posy_ori, altura_nodo, anchura_nodo) {
	this.nombre = (nombre != null?nombre:"arbol");
	this.posx_ori = (posx_ori != null?posx_ori:15);
	this.posy_ori = (posy_ori != null?posy_ori:100);

	if(this.nombre == "arbol4") this.posy_ori = 570;
	
	this.altura_nodo = (altura_nodo != null?altura_nodo:15);

	this.nodos = new Array;
	this.niveles = new Array;
	this.escribirlinea = new Array;

	this.objsdivs_creados = false;

	this.anadir_nodo = tr_anadir_nodo;
	this.insertar_nodo = tr_insertar_nodo;
	this.cerrar_tree = tr_cerrar_tree;
	this.borrar_nodo = tr_borrar_nodo;
	this.vaciar = tr_vaciar;

	this.calcular_posy = tr_calcular_posy;
	this.actualizar_lastnodes = tr_actualizar_lastnodes;

	this.escribir_tree = tr_escribir_tree;
	this.asociar_styles = tr_asociar_styles;
	this.redibujar_tree = tr_redibujar_tree;
	this.ocultar_tree = tr_ocultar_tree;
	this.mostrar_tree = tr_mostrar_tree;
}

function tr_Nodo (tree, ind, nombre, enlace, target, nivel, tipo) {
	this.nombre = nombre;
	this.enlace = enlace;
	this.target = target;
	this.nivel = nivel;
	this.tipo = tipo;

	this.color = (nivel == 0?"nivel0":"normal");
	//this.color = "blanco";


	this.isOpen = false;
	this.isLastNode = false; // por defecto, isLastNode es falso. Ver actualizar_lastnodes (nivel)
	this.obj_style = null;
	this.obj_doc = null;

	// Si el padre está abierto, el nodo está visible -> su posición_y será ([posición_y del anterior] + tr_HEIGHT).
	// Si el padre está cerrado, el nodo está oculto -> su posición_y será la del padre.
	var ind_padre = (nivel == 0?-1:tree.niveles [nivel-1]);
	this.ind_padre = ind_padre;
	this.isVisible = (ind_padre == -1?true:tree.nodos [ind_padre].isOpen);
	this.posicion_y = tree.calcular_posy (ind, this.isVisible);

	if(this.tipo == "seccion") this.posicion_y+=3;
	else if(this.tipo == "seccion_esp") this.posicion_y+=10;
	else if(this.tipo == "productosinhijos" || this.tipo == "linea_intermedia") this.posicion_y+=2;
	else if(this.tipo == "producto") this.posicion_y+=6;
	
	tree.niveles [nivel] = ind;	// este último nodo es el último nodo de su nivel.
	tree.actualizar_lastnodes (nivel); // actualiza los últimos nodos de los niveles mayores que éste.
}

/*
 * Calcula la posy de un nodo:
 *  Si el nodo es visible (porque el padre está abierto): la posición_y es ([posicion_y del anterior] + tr_HEIGHT);
 *  Si el nodo NO es visible (porque el padre está cerrado): la posición_y es la posición_y del padre;
 */
function tr_calcular_posy (ind, isVisible) {
	if (ind == 0) return this.posy_ori;
	else if (!isVisible) return this.nodos [ind-1].posicion_y;
	else return this.nodos [ind-1].posicion_y + this.altura_nodo;
}

/*
 * Actualiza el valor isLastNode de los nodos que ya se sabe que son los últimos de su padre...
 */
function tr_actualizar_lastnodes (nivel) {
	for(var i=(nivel+1); i < this.niveles.length; i++) {
		if ( this.niveles [i] < 0 ) break;

		var ind_nodo = this.niveles [i];
		this.nodos [ind_nodo].isLastNode = true;
		this.niveles [i] = -1;
	}
}

function tr_anadir_nodo (nombre, enlace, target, nivel, tipo) {
	this.nodos [this.nodos.length] = new tr_Nodo (this, this.nodos.length, nombre, enlace, target, nivel, tipo);
}

function tr_insertar_nodo (ind, nombre, enlace, target, nivel, tipo) {
	// Nota: es prácticamente seguro que esto NO funciona bien
	this.nodos.splice (ind, 0, new tr_Nodo (this, ind, nombre, enlace, target, nivel, tipo));
}

function tr_cerrar_tree () {
	this.actualizar_lastnodes (-1);
}

function tr_borrar_nodo (ind) {
	// Nota: es prácticamente seguro que esto NO funciona bien
	this.nodos.splice (ind, 1);
}

function tr_vaciar () {
	this.nodos = new Array;
}

function tr_escribir_tree () {
	var str = '';
	for (var i=0; i<this.niveles.length; i++) this.escribirlinea [i] = false;
	for (var i=0; i<this.nodos.length; i++) {
		var img_lineas = '';
		var nivel_actual = this.nodos [i].nivel;
		var tiene_hijos = (((i+1) < this.nodos.length) && (this.nodos [i].nivel < this.nodos [i+1].nivel));
		
		if(this.nodos[i].tipo != "seccion" && this.nodos[i].tipo != "productosinhijos" && this.nodos[i].tipo != "producto" && this.nodos[i].tipo != "seccion_esp"){
			for(var j=0; j < (nivel_actual); j++) 
			{
				img_lineas += '&nbsp;&nbsp;';
				
				if(this.nodos[i].enlace!="") img_lineas += '&nbsp;&nbsp;&nbsp;&nbsp;<img src="../webmap/imagenes/mass.gif"><a href="'+this.nodos[i].enlace+'" class='+this.nodos[i].color+' onclick="top.focus();">';
			}                                                                                    

			this.escribirlinea [nivel_actual] = !this.nodos [i].isLastNode;
			/* Nivel 0*/
			if (this.nodos[i].nivel == 0)
			{
				img_lineas += '&nbsp;';
				if (!tiene_hijos) 
				{
					img_lineas += (this.nodos [i].isLastNode?'<img src=" border="0" name="imgpadre' + i +this.nombre+ '"><a href="'+this.nodos[i].enlace+'" class='+this.nodos[i].color+' onclick="top.focus();">':'<img src="../webmap/imagenes/mas.gif" border=0 name="imgpadre' + i +this.nombre+ '"><a onclick="" href="'+this.nodos[i].enlace+'" class='+this.nodos[i].color+' onclick="top.focus();">')
				}
				else 
				{
					if (!this.nodos [i].isOpen) 
					{
						img_lineas += (this.nodos [i].isLastNode?'&nbsp;&nbsp;<a href="javascript: tr_click (\'' + this.nombre + '\', ' + i + ');" class='+this.nodos[i].color+'><img name="imgpadre' + i +this.nombre+ '" src="../webmap/imagenes/mas.gif" border="0">':'&nbsp;&nbsp;<a href="javascript: tr_click (\'' + this.nombre + '\', ' + i + ');" class='+this.nodos[i].color+'><img name="imgpadre' + i +this.nombre+ '" src="../webmap/imagenes/mas.gif" border=0>')
					}
					else 
					{
						img_lineas += (this.nodos [i].isLastNode?'&nbsp;&nbsp;<a href="javascript: tr_click (\'' + this.nombre + '\', ' + i + ');" class='+this.nodos[i].color+'><img name="imgpadre' + i +this.nombre+ '" src="../webmap/imagenes/menos.gif" border=0>':'&nbsp;&nbsp;<a href="javascript: tr_click (\'' + this.nombre + '\', ' + i + ');" class='+this.nodos[i].color+'><img name="imgpadre' + i +this.nombre+ '" src="../webmap/imagenes/menos.gif" border=0>')
					}
				}   
			} // fin nivel 0
			if(tr_isIE() || tr_isNS6()){
				str = '<div id="divtree' + this.nombre + i + '" class="divs"><table cellpadding="0" cellspacing="0" border="0" border="0"><tr><td>' + img_lineas + this.nodos [i].nombre + '</a></td></tr></table></div>';
			}else if(tr_isNS()){
				str = '<layer id="divtree' + this.nombre + i + '" visibility=hidden z-index=0><table cellpadding="0" cellspacing="0" border="0" border="0"><tr><td>' + img_lineas + this.nodos [i].nombre + '</a></td></tr></table></layer>';
			}
			document.writeln (str);
		}else if(this.nodos[i].tipo == "seccion" || this.nodos[i].tipo == "seccion_esp"){
			img_lineas = '<img src="../webmap/imagenes/cuadrado.gif" name="imgpadre' + i +this.nombre+ '" border=0>&nbsp;';

			if(this.nodos[i].enlace!=null) img_lineas += '<a href="'+this.nodos[i].enlace+'" class="verde" onclick="top.focus();">';
			
			if(tr_isIE() || tr_isNS6()){
				str = '<div id="divtree' + this.nombre + i + '" class="divs"><table cellpadding="0" cellspacing="0" border="0" border="0"><tr><td class="verde">' + img_lineas + this.nodos [i].nombre;
				if(this.nodos[i].enlace!=null) str += '</a>';
				str += '</td></tr></table></div>';
			}else if(tr_isNS()){
				str = '<layer id="divtree' + this.nombre + i + '" visibility=hidden z-index=0><table cellpadding="0" cellspacing="0" border="0" border="0"><tr><td class="verde">' + img_lineas + this.nodos [i].nombre;
				if(this.nodos[i].enlace!=null) str += '</a>';
				str += '</td></tr></table></layer>';
			}
			document.writeln (str);
		}else if(this.nodos[i].tipo == "productosinhijos" || this.nodos[i].tipo == "producto"){
			img_lineas += '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font size=2 color=#000000>-</font><a href="javascript:void(0);" onclick="'+this.nodos[i].enlace+'" class='+this.nodos[i].color+'>';
			if(tr_isIE() || tr_isNS6()){
				str = '<div id="divtree' + this.nombre + i + '" class="divs"><table cellpadding="0" cellspacing="0" border="0" border="0"><tr><td class="verde">' + img_lineas + this.nodos [i].nombre + '</a></td></tr></table></div>';
			}else if(tr_isNS()){
				str = '<layer id="divtree' + this.nombre + i + '" visibility=hidden z-index=0><table cellpadding="0" cellspacing="0" border="0" border="0"><tr><td class="verde">' + img_lineas + this.nodos [i].nombre + '</a></td></tr></table></layer>';
			}
			document.writeln (str);
		}
	}
}


function tr_asociar_styles () {
	var incremento = 250;
	for (var i=0; i<this.nodos.length; i++) {
		if (tr_isNS ()) {
			this.nodos [i].obj_style = window.document.layers ["divtree" + this.nombre + i];
			this.nodos [i].obj_doc = window.document.layers ["divtree" + this.nombre + i].document;
		}
		if (tr_isIE ()) {
			this.nodos [i].obj_style = window.document.all ["divtree" + this.nombre + i].style;
			this.nodos [i].obj_doc = window.document;
		}
		if(tr_isNS6 ()){
			this.nodos [i].obj_style = document.getElementById("divtree" + this.nombre + i).style;
			this.nodos [i].obj_doc = window.document;
		}

		if(this.nombre != "arbol4") {
			this.nodos [i].obj_style.top = this.nodos [i].posicion_y;
		}else{
			this.nodos [i].obj_style.top = this.nodos [i].posicion_y + 510;
		}
		
		this.nodos [i].obj_style.top = this.nodos [i].posicion_y;

		// LEFT de cada árbol		
		if(tr_isIE() || tr_isNS6()) incremento = 250;
		if(this.nombre == "arbol1"){
			this.nodos [i].obj_style.left = this.posx_ori;
		}else if(this.nombre == "arbol2"){
			this.nodos [i].obj_style.left = this.posx_ori + incremento;
		}else{
			this.nodos [i].obj_style.left = this.posx_ori + (2*incremento) +10;
		}
	}

	this.objsdivs_creados = true;
}

function tr_redibujar_tree (ind) {
	var imgsrc;
	for (var i=0 ;i < this.nodos.length; i++) {
		if ((this.nodos[i].nivel == 0) && (this.nodos[i].tipo != "seccion") && (this.nodos[i].tipo != "seccion_esp") && (this.nodos[i].tipo != "productosinhijos") && (this.nodos[i].tipo != "producto"))
		{
			imgsrc = (this.nodos [i].isOpen?"../webmap/imagenes/menos.gif":"../webmap/imagenes/mas.gif");
			this.nodos [i].obj_doc.images ["imgpadre" + i+this.nombre].src = imgsrc;
		}
	}

	for (var i=(ind+1);i < this.nodos.length; i++) {
		var ind_padre = this.nodos [i].ind_padre;

		if (ind_padre == -1) this.nodos [i].isVisible = true;
		else this.nodos [i].isVisible = this.nodos [ind_padre].isVisible && this.nodos [ind_padre].isOpen;

		this.nodos [i].posicion_y = this.calcular_posy (i, this.nodos [i].isVisible);
		
		if(this.nodos [i].tipo == "seccion") this.nodos [i].posicion_y+=3;
		else if(this.nodos [i].tipo == "seccion_esp") this.nodos [i].posicion_y+=10;
		else if(this.nodos [i].tipo == "productosinhijos" || this.nodos [i].tipo == "linea_intermedia") this.nodos [i].posicion_y+=2;
		else if(this.nodos [i].tipo == "producto") this.nodos [i].posicion_y+=6;
	
		this.nodos [i].obj_style.top = this.nodos [i].posicion_y;

		this.nodos [i].obj_style.visibility = (this.nodos [i].isVisible?"visible":"hidden");
	}
}

function tr_ocultar_tree () {
	for (var i=0; i<this.nodos.length; i++) {
		this.nodos [i].obj_style.visibility = "hidden";
	}
}

function tr_mostrar_tree () {
	for (var i=0; i<this.nodos.length; i++) {
		this.nodos [i].obj_style.visibility = (this.nodos [i].isVisible?"visible":"hidden");
	}
}

function tr_click (nombre_tree, ind) 
{
	top.focus();
	var tree;
	for (var i=0; i<trees.length; i++) {
		if (trees [i].nombre == nombre_tree) {
			tree = trees [i];
			break;
		}
	}

	if (tree.nodos[ind].isOpen)
	{
		tree.nodos[ind].isOpen = false; 
		
		tree.redibujar_tree(0);
		
		return;
	}
	else
	{
		for (var j=0; j<tree.nodos.length; j++)
		{
			tree.nodos[j].isOpen = false;
		}
		tree.nodos [ind].isOpen = true;

		var padre = tree.nodos[ind]	.ind_padre;
		while (padre != -1)
		{
			tree.nodos[padre].isOpen = true;
			padre = tree.nodos[padre].ind_padre;
		}
		tree.redibujar_tree (0);	
	}
}

var tree_actual = 0;
function cambiar () {
	trees [tree_actual].ocultar_tree ();
	tree_actual++;
	if (tree_actual == trees.length) tree_actual = 0;
	trees [tree_actual].mostrar_tree ();
}

function cambiar_narboles (narboles) {
	trees [tree_actual].ocultar_tree ();
	tree_actual++;
	if (tree_actual == narboles) tree_actual = 0;
	trees [tree_actual].mostrar_tree ();
}

function tr_isNS () {
	return document.layers;
}

function tr_isIE () {
	if(tr_isNS6()) return;
	else return document.all;
}

function tr_isNS6(){
	if(document.layers || document.all) {
		return false;
	}else if(document.getElementById && !document.all) {
		return true;
	}
}

//Redirecciona a la ventana padre
function redirect(path){
	if(parent.opener.document != null){
			parent.opener.parent.contenidos.document.location.href = path;
			parent.opener.parent.contenidos.focus();
	}
}

