

function salto_ancla(ancla, target)
{
    ancla = ancla.replace(/.*#/, "");

	var destino = eval("parent." + target);

    var loc = String(destino.location);
    destino.location = loc.replace(/#.*/,"")+"#"+ancla;
}


// Cambia el estado de un nodo del árbol.
// Esta función se invoca cuando se pincha en una imágen. El siguiente hermano de la imágen es
// el salto al documento, y el siguiente y último, un span que incluye los hijos.


/*
function Toggle(node)
{
    // Buscamos un DIV entre nuestros antepasados
    var node_div = node;
    while (node_div && node_div.nodeName!="DIV")
	node_div = node_div.parentElement;

    if (node_div && node_div.nodeName == "DIV"){

	var imagen = node_div.firstChild;
	var span   = node_div.lastChild;

	// Comprobamos que nuestros hijos son el IMG y el SPAN que esperamos
	if (imagen  && imagen.nodeName == "IMG" &&
	    span    && span.nodeName   == "SPAN") {
	    
	    // ¿Son visibles nuestros hijos?
	    if (span.style.display == 'none') {

		// Cambiamos el nombre de la imagen
		imagen.src = imagen.src.replace(/cerrado/, "abierto");

		// Enseñamos los hijos
		span.style.display = 'block';
	    } else {

		imagen.src = imagen.src.replace(/abierto/, "cerrado");

		// Escondemos los hijos
		span.style.display = 'none';
	    }
	} 
    }
}
*/

function Toggle(node)
{
    // Buscamos un DIV entre nuestros antepasados
    var node_div = node;
    while (node_div && node_div.nodeName!="DIV")
	node_div = node_div.parentElement;

    if (node_div && node_div.nodeName == "DIV"){		
		var span   = node_div.lastChild;

		// Comprobamos que nuestros hijos son el IMG y el SPAN que esperamos
		if (span    && span.nodeName   == "SPAN") {
		    
		    // ¿Son visibles nuestros hijos?
		    if (span.style.display == 'none') {
				// Enseñamos los hijos
				span.style.display = 'block';
		    }
		    else {
				// Escondemos los hijos
				span.style.display = 'none';
		    }
		}//if 
    }//if
}//end function

function Contar_Nodos_Colapsados(node)
{
    var n = 0;
    var hijos = node.children;
    var i;
    for (i=0; i < hijos.length; ++i) {
	n += Contar_Nodos_Colapsados(hijos[i]);
    }

    if (node.style.display=='none')
	++n;

    return n;
}

function Toggle_Rama_Isis(node, imagen)
{
    // Contamos los nodos colapsados
    var n_colapsados = Contar_Nodos_Colapsados(node);

    if (n_colapsados > 0)
	Expandir_Rama_Incremental(node);
    else
	Colapsar_Rama_Incremental(node);

    if (imagen && imagen.nodeName=='IMG') {
	var n_colapsados = Contar_Nodos_Colapsados(node);
	
	if (n_colapsados > 0) {
	    imagen.src = imagen.src.replace(/abierta/, "cerrada");
	    imagen.alt = imagen.alt.replace(/Colapsar/, "Expandir");
	} else {
	    imagen.src = imagen.src.replace(/cerrada/, "abierta");
	    imagen.alt = imagen.alt.replace(/Expandir/, "Colapsar");
	}
    }
}

	    
function Expandir_Rama_Incremental(node)
{
    if (node && node.nodeName == 'DIV') {
	var imagen = node.firstChild;
	var span   = node.lastChild;

	// Comprobamos que nuestros hijos son el IMG y el SPAN que esperamos
	if (imagen  && imagen.nodeName == "IMG" &&
	    span    && span.nodeName   == "SPAN") {

	    // ¿Son visibles nuestros hijos?
	    if (span.style.display == 'none') {

		// Cambiamos el nombre de la imagen
		imagen.src = imagen.src.replace(/cerrado/, "abierto");

		// Enseñamos los hijos
		span.style.display = 'block';

		return;
	    }
	} 
    }

    // Recorremos los hijos para expandirlos
    var i=0;
    for (i = 0; i < node.children.length; ++i)
	Expandir_Rama_Incremental(node.children[i]);
}

function Colapsar_Rama_Incremental(node)
{
    if (node && node.nodeName == 'DIV') {
	var imagen = node.firstChild;
	var span   = node.lastChild;

	// Comprobamos que nuestros hijos son el IMG y el SPAN que esperamos
	if (imagen  && imagen.nodeName == "IMG" &&
	    span    && span.nodeName   == "SPAN") {

	    // ¿Son visibles nuestros hijos?
	    if (span.style.display == 'block') {

		// Cambiamos el nombre de la imagen
		imagen.src = imagen.src.replace(/abierto/, "cerrado");

		// Ocultamos los hijos
		span.style.display = 'none';

		return;
	    }
	} 
    }

    // Recorremos los hijos para colapsarlos
    var i=0;
    for (i = 0; i < node.children.length; ++i) 
	if (node.nodeName == 'DIV' || node.nodeName=='SPAN') 
	    Colapsar_Rama_Incremental(node.children[i]);
    		
}


function Toggle_Rama(node)
{
  // Comprobamos que nuestros hermanos son el A y el SPAN que esperamos
  if (node.nextSibling		    && node.nextSibling.nodeName            =="A" &&
      node.nextSibling.nextSibling  && node.nextSibling.nextSibling.nodeName=="SPAN") {

    // ¿Son visibles nuestros hijos?
    if (node.nextSibling.nextSibling.style.display == 'none') {
	Expandir_Rama(node);
    } else {
	Colapsar_Rama(node);
    }
  } 
}

function Colapsar_Nodo(node)
{
  if (node && node.nodeName =="DIV") {

	var num_childs = node.children.length;

	if (num_childs >= 3 &&
	    node.children[0].nodeName=='IMG' &&
	    node.children[num_childs-1].nodeName == 'SPAN') {

	    var imagen = node.children[0];
	    var span   = node.children[num_childs-1];

	    // ¿Son visibles nuestros hijos?
	    if (span.style.display != 'none') {
		// Nos cambiamos la imágen
		imagen.src = imagen.src.replace(/abierto/, "cerrado");

		// Escondemos los hijos
		span.style.display = 'none';

	    }
	} 
    }
}

function Expandir_Nodo(node)
{

  // Comprobamos que nuestros hermanos son el A y el SPAN que esperamos
  if (node.nextSibling		    && node.nextSibling.nodeName            =="A" &&
      node.nextSibling.nextSibling  && node.nextSibling.nextSibling.nodeName=="SPAN") {

    // ¿Son visibles nuestros hijos?
    if (node.nextSibling.nextSibling.style.display == 'none') {

      // Comprobamos que somos una imágen y nos cambiamos
      if (node.nodeName == "IMG")
	node.src = node.src.replace(/cerrado/, "abierto");

      // Enseñamos los hijos
      node.nextSibling.nextSibling.style.display = 'block';
    } 
  } 
}

function Expandir_Rama(node)
{
    Expandir_Nodo(node);

    // Recorremos los hijos para expandirlos
    var i=0;
    for (i = 0; i < node.children.length; ++i)
	Expandir_Rama(node.children[i]);
}

function Colapsar_Rama(node)
{
    // Recorremos los hijos para colapsarlos
    var i=0;
    for (i = 0; i < node.children.length; ++i) 
	if (node.nodeName == 'DIV' || node.nodeName=='SPAN') 
	    Colapsar_Rama(node.children[i]);
    		
    Colapsar_Nodo(node);
}

function Ocultar_Hermanos(node)
{
	var hermano=node;

	while(hermano=hermano.nextSibling)
		hermano.style.display='none';


	hermano=node;

	while(hermano=hermano.previousSibling)
		hermano.style.display='none';
}

function Mostrar_Hermanos(node)
{
	var hermano=node;

	while(hermano=hermano.nextSibling)
		hermano.style.display='block';


	hermano=node;

	while(hermano=hermano.previousSibling)
		hermano.style.display='block';
}

function Ocultar_Hermanos_Tios(node)
{
	Ocultar_Hermanos(node);

	var padre=node;

	while(padre=padre.parentNode)
	    if (padre && padre.nodeName=='DIV')
		Ocultar_Hermanos(padre);
}

function Mostrar_Hermanos_Tios(node)
{
	Mostrar_Hermanos(node);

	var padre=node;

	while(padre=padre.parentNode)
	    if (padre && padre.nodeName=='DIV')
		Mostrar_Hermanos(padre);


}

