
var tabla_arbol_estado_fila = new Array();
var tabla_arbol_llamar_atras = new Array();

function tabla_arbol_escondo_fila(rowId) {
  el = document.getElementById(rowId);
  el.style.display = "none";
}

function tabla_arbol_muestro_fila(rowId) {
  el = document.getElementById(rowId);
  el.style.display = "";
}

function tabla_arbol_nodos_hijos(rowId) {
  res = document.getElementById(rowId + '_0');
  return (res != null);
}

function tabla_arbol_getRowChildren(rowId) {
  el = document.getElementById(rowId);
  var arr = new Array();
  i = 0;
  while (true) {
    childRowId = rowId + '_' + i;
    childEl = document.getElementById(childRowId);
    if (childEl) {
      arr[i] = childRowId;
    } else {
      break;
    }
    i++;
  }
  return (arr);
}

function tabla_arbol_toggleRow(rowId, state, force) {
  var rowChildren;
  var i;
    // Abrir o cerrar todos las nodos hijos dependiendo del estado actual
  force = (force == null) ? 1 : force; 
  if (state == null) {
    row_state = ((tabla_arbol_estado_fila[rowId]) ? (tabla_arbol_estado_fila[rowId]) : 1) * -1;
  } else {
    row_state = state;
  }
  rowChildren = tabla_arbol_getRowChildren(rowId);
  if (rowChildren.length == 0) return (false);
  for (i = 0; i < rowChildren.length; i++) {
    if (row_state == -1) {
      tabla_arbol_escondo_fila(rowChildren[i]);
      tabla_arbol_toggleRow(rowChildren[i], row_state, -1);
    } else {
      if (force == 1 || tabla_arbol_estado_fila[rowId] != -1) {
        tabla_arbol_muestro_fila(rowChildren[i]);
        tabla_arbol_toggleRow(rowChildren[i], row_state, -1);
      }
    }
  }
  if (force == 1) {
    tabla_arbol_estado_fila[rowId] = row_state;
    tabla_arbol_fireEventestado_filaChanged(rowId, row_state);
  }
  return (true);
}

function tabla_arbol_fireEventestado_filaChanged(rowId, state) {
  if (tabla_arbol_llamar_atras['eventestado_filaChanged']) {
    callback = tabla_arbol_llamar_atras['eventestado_filaChanged'] + "('" + rowId + "', " + state + ");";
    eval(callback);
  }
}

function tabla_arbol_contraer_todo(tableId) {
  table = document.getElementById(tableId);
  rowChildren = table.getElementsByTagName('tr');
  for (i = 0; i < rowChildren.length; i++) {
    if (index = rowChildren[i].id.indexOf('_')) {
      //  NO oculta los elementos de la raiz
      if(index != rowChildren[i].id.lastIndexOf('_')) {
        rowChildren[i].style.display = 'none';
      }
      if (tabla_arbol_nodos_hijos(rowChildren[i].id)) {
        tabla_arbol_estado_fila[rowChildren[i].id] = -1;
        tabla_arbol_fireEventestado_filaChanged(rowChildren[i].id, -1);
      }
    }
  }
  return (true);
}    

function tabla_arbol_expandir_todo(tableId) {
  table = document.getElementById(tableId);
  rowChildren = table.getElementsByTagName('tr');
  for (i = 0; i < rowChildren.length; i++) {
    if (index = rowChildren[i].id.indexOf('_')) {
      rowChildren[i].style.display = '';
      if (tabla_arbol_nodos_hijos(rowChildren[i].id)) {
        tabla_arbol_estado_fila[rowChildren[i].id] = 1;
        tabla_arbol_fireEventestado_filaChanged(rowChildren[i].id, 1);
      }
    }
  }
  return (true);
}

