/*------------------------------------------------------------------------------
// LIBRERIA DE FUNCIONES JAVASCRIPT para el control CETreeView 
// Se usan en el caso de que el control CETreeView tenga la propiedad 
// AutoPostBack = false.

// Programador: Gustavo Reboso
// Analista: Gustavo Reboso
// Responsable: Gustavo Reboso
-------------------------------------------------------------------------------*/
// CONSTANTES
var SELECTED_STYLE='general_enlace_negrita';
var UNSELECTED_STYLE='menu_izq_sub_enlace'
var SELECTED_VALUE = '1';
var UNSELECTED_VALUE = '0';
var SEP = '_';
var OPEN_NODE_IMG = 'open-node.gif';
var CLOSE_NODE_IMG = 'closed-node.gif';
// indice para recorrer los nodos del árbol
var index;
//----------------------------------------------------------------------------
// Selecciona un objeto (nodo)
function selectNode(object){

	if (object != null){
		object.className = SELECTED_STYLE;
		document.getElementById(object.id+"_hidden").value = SELECTED_VALUE;
	}
}
//----------------------------------------------------------------------------
// Deselecciona un objeto (nodo del árbol)
function unselectNode(object){

	if (object != null){
		object.className = UNSELECTED_STYLE;
		document.getElementById(object.id+"_hidden").value = UNSELECTED_VALUE;
	}
}
//----------------------------------------------------------------------------
// Comprueba si todos los nodos hijos de un nodo están seleccionados o no
// Devuelve true en caso de que todos los nodos hijos de node estén seleccionados o
// false en otro caso.
function checkSelectedChilds(object){
	var allSelected = true;
	var value;

	if (object != null){
		var node = object.id;
		
		var i = node.lastIndexOf(SEP); // 
		var key = node.substring(i+1,i+2); // letra de los nodos C, D, U, ...
		index = node.substring(i+2); // indice del nodo actual
		index++;
		var pre = node+SEP+key;
		var child = document.getElementById(pre+index);
		if (child == null){
			// nodo hoja
			if(document.getElementById(node+'_hidden').value>0) 
				allSelected=true 
			else 
				allSelected=false;
		}else{
			// recorro los nodos hijos
			while (child != null){
				if(!checkSelectedChilds(child)){
					allSelected = false;
				}
				index++;
				child = document.getElementById(pre+index);
			}
		}
		index--;
		if (allSelected){
			selectNode(object);	
		}
		return allSelected;
	}
	
}

//----------------------------------------------------------------------------
// Selecciona o deselecciona un nodo del árbol  <-- (Modificado: 27 de octubre de 2008)
function tw_SelectNode (node, seleccionar)
{

    var o = document.getElementById(node); 
    if (o != null){
    
        if (seleccionar == null)
        {
            if (o.className == SELECTED_STYLE) seleccionar = false;
		    else seleccionar = true;
        }
    
        // Obtenemos el índice del nodo actual
        var i = node.lastIndexOf(SEP);
        var key = node.substring(i+1,i+2);
        index = node.substring(i+2);
        
        if (seleccionar)  selectNode(o);
		else unselectNode(o);
        
        // Si tengo hijos los selecciono o desselecciono todos también
	    var pre = node+SEP+key;
        index++;
	    var child = document.getElementById(pre+index);
	    
	    // Si el nodo actual no tiene hijos (nodo hoja)
	    if (child == null)
	    {
	        if (seleccionar)  select(index-1);
		    else unselect(index-1);
	    }
	    
	    while (child != null){
		    tw_SelectNode(pre+index, seleccionar);
		    index++;
		    child = document.getElementById(pre+index);
	    }
	    index--;
 
    }
}
//----------------------------------------------------------------------------

//----------------------------------------------------------------------------
// Selecciona o deselecciona un nodo del árbol
//function tw_SelectNode (node, selected, initialNode)
//{

//var o = document.getElementById(node); 

//if (o != null){

//    var i = node.lastIndexOf(SEP); // 
//	var key = node.substring(i+1,i+2); // letra de los nodos C, D, U, ...
//	index = node.substring(i+2); // indice del nodo actual

//	if (selected != null){
//		if(selected) 
//			selectNode(o, index);
//		else 
//			unselectNode(o, index);
//	}else{
//		if (o.className == SELECTED_STYLE){
//				unselectNode(o, index);
//				selected = false;
//				
//		}else
//		{
//				selectNode(o, index);
//				selected = true;
//		}
//		// nodo inicial desde el que empieza la acción
//		initialNode = node;
//	}
//	
//	// Si tengo hijos los selecciono o desselecciono todos también
//	index++;
//	//index = 1;
//	var pre = node+SEP+key;
//	//alert(pre+index);
//	var child = document.getElementById(pre+index);
//	// mientras tenga hijos ...
//	while (child != null){
//		tw_SelectNode(pre+index, selected, initialNode);
//	
//		index++;
//		child = document.getElementById(pre+index);
//	}
//	index--;
	
	// Si tengo padres ...
//	if ((i > 0) && (initialNode==node)){
//		
//		if (selected){
//			// ... y me han seleccionado 
//			// para cada padre comprobar si todos sus hijos están hora seleccionados o no,
//			// si lo están seleccionar también el padre
//			
//			//recupero el nodo raiz padre
//			var parentName = node.substring(0,node.indexOf(SEP));
//			var parent = document.getElementById(parentName); 
//			checkSelectedChilds(parent);
//					
//		}else {
//			// ... y me han 'desseleccionado' -> 'desseleccionar' también a mis padres
//			var parents = new Array();
//			var parent;
//			parents = node.split(SEP);
//			var parentName = parents[0];
//			for(k=1; k<parents.length; k++) {
//				parent = document.getElementById(parentName); 
//				unselectNode(parent);
//				parentName += SEP+parents[k];
//			}
//		}
//	}
//}
//}


//----------------------------------------------------------------------------
// Expande o contrae los nodos del árbol
function tw_EnterExpandNode (node)
{
	
	
	div = 'div'+ node;
	img = 'img'+node;
	div = document.getElementById(div);
	img = document.getElementById(img);
	
	if (div != null){
			if (div.style.display=="none")
			{
				div.style.display="";
				if (img != null){
					img_url = img.src.substring(0,img.src.lastIndexOf('/')+1);
					img_name = img.src.substring(img.src.lastIndexOf('/')+1);
					
					if (img_name.indexOf('end-') <0){
						img_name = '';
					}else{
						img_name = 'end-';
					}
					img_name += OPEN_NODE_IMG;
					img.src = img_url+ img_name;
				}
			}
			else{
				div.style.display="none";
				if (img != null){
					img_url = img.src.substring(0,img.src.lastIndexOf('/')+1);
					img_name = img.src.substring(img.src.lastIndexOf('/')+1);
					
					if (img_name.indexOf('end') <0){
						img_name = '';
					}else{
						img_name = 'end-';
					}
					img_name += CLOSE_NODE_IMG;
					img.src = img_url+ img_name;
				}
			} 
	 }
}
//----------------------------------------------------------------------------
