/*************************************************************************************************
   La siguiente funcion toma una objecto del tipo lista e invierte el orden de sus elementos
*************************************************************************************************/

function reversar(lista){
var values = new Array();
var textos = new Array();
for(i=0;i<lista.length;i++){
values[i] = lista.options[i].value;
textos[i] = lista.options[i].text;
}
values.reverse();
textos.reverse();
for(i=0;i<lista.length;i++){
lista.options[i].value = values[i];
lista.options[i].text = textos[i];
}
}
function reversarTabla(tabla)
{
  for(var i=0;i < Math.abs(tabla.rows.length / 2); i++)
  {
    intercambiaFila(i,tabla.rows.length - i - 1,tabla);
  }
}
/*************************************************************************************************
La siguiente funcion toma una objecto del tipo lista y ordena alfabeticamente
el orden de sus elementos. Si el parametro tambienPrimero es false, entonces 
ordena todos los elementos de la lista menos el primer elemento.
*************************************************************************************************/
function ordenar(lista, tambienElPrimero){
var values = new Array();
var textos = new Array();
var textosOrdenados = new Array();
for(i=0;i<lista.length;i++){
values[i] = lista.options[i].value;
textos[i] = lista.options[i].text;
textosOrdenados[i] = lista.options[i].text;
}
textosOrdenados.sort();
var i=0;
if(tambienElPrimero==false)i=1;
for(i;i<textosOrdenados.length;i++){
lista.options[i].text = textosOrdenados[i];
for(j=0;j<textos.length;j++){
if(textosOrdenados[i]==textos[j])lista.options[i].value = values[j];
}
}
}
/*************************************************************************************************
          Esta funcion ordena una lista alfabeticamente, se debe tener en cuenta que la lista
		  debe tener un elemento de cabecera que posea en su value el valor "-1"
		  lista : el objecto select
*************************************************************************************************/
function ordenarLista(lista){
var elementos = new Array();
var encabezado=" ; ";
for(var i=0;i<lista.length;i++){
if(lista.options[i].value!="-1")
elementos[i]=lista.options[i].text + ";" + lista.options[i].value;
else encabezado = lista.options[i].text + ";" + lista.options[i].value;
}
elementos.sort();
var elementoCabecera = encabezado.split(";");
lista.options[0].value = elementoCabecera[1];
lista.options[0].text = elementoCabecera[0];

for(var j=0;j<lista.length-1;j++){
var elemento = elementos[j].split(";");
lista.options[j+1].value = elemento[1];
lista.options[j+1].text = elemento[0];
}
}
/*************************************************************************************************
          Esta funcion muestra el value de la opcion seleccionada de una lista
		  lista : el objecto select
*************************************************************************************************/
function mostar(lista){
alert("Se ha seleccionado: " + lista.options[lista.selectedIndex].value);
}
/*************************************************************************************************
                     Esta funcion intercambia dos filas de una tabla
			uno_  : primer numero de fila de la tabla a intercambiar
			dos_  : segundo numero de fila de la tabla a intercambiar
			tabla : el id de la tabla

obs: EL orden de los 2 primeros parametros da lo mismo, obvio!!!
*************************************************************************************************/
function intercambiaFila(uno_,dos_,tabla){
var uno = parseInt(uno_);
var dos = parseInt(dos_);
for(var i=0;i<tabla.rows[0].cells.length;i++){
temp = tabla.rows[uno].cells[i].innerHTML;
tabla.rows[uno].cells[i].innerHTML = tabla.rows[dos].cells[i].innerHTML;
tabla.rows[dos].cells[i].innerHTML = temp;
}
}
/*************************************************************************************************
                     Esta funcion intercambia dos columnas de una tabla
			uno_  : primer numero de columna de la tabla a intercambiar
			dos_  : segundo numero de columna de la tabla a intercambiar
			tabla : el id de la tabla

obs: EL orden de los 2 primeros parametros da lo mismo, obvio!!!
*************************************************************************************************/
function intercambiaColumna(uno_,dos_,tabla)
{
uno = parseInt(uno_);
dos = parseInt(dos_);
for(i=0;i<tabla.rows.length;i++){
temp = tabla.rows[i].cells[uno].innerHTML;
tabla.rows[i].cells[uno].innerHTML = tabla.rows[i].cells[dos].innerHTML;
tabla.rows[i].cells[dos].innerHTML = temp;
}
}
/*************************************************************************************************
       Esta funcion muestra el contenido de una casilla de la tabla en la posicion x,y
	   uno_ : numero de fila
	   dos_ : numero de columna
	   tabla : el id de la tabla
*************************************************************************************************/
function mostrarEnPosicion(uno_,dos_,tabla){
uno = parseInt(uno_);
dos = parseInt(dos_);
alert(tabla.rows[uno].cells[dos].innerHTML);
}
/*************************************************************************************************
   Esta funcion ordena una tabla segun el campo del numero de columna pasada como parametro
   col_ : numero de la columna por la cual ordenar
   tabla : el id de la  tabla a ordenar
*************************************************************************************************/
function ordenaTabla(col_,tabla)
{
    var hasChange = false;
		col = parseInt(col_);
		//var columna = new Array();
		var columnaOrdenada = new Array();
    var columnaEstaOrdenada = new Array();
		var max = tabla.rows.length;
		for(i=0;i<max;i++)
		{
			//columna[i] = tabla.rows[i].cells[col].innerHTML;
			columnaOrdenada[i] = Trim(tabla.rows[i].cells[col].innerText).toUpperCase();
      columnaEstaOrdenada[i] = Trim(tabla.rows[i].cells[col].innerText).toUpperCase();
		}
		columnaOrdenada.sort();
    
    for(var k=0;k<columnaEstaOrdenada.length;k++)
      {
        if(columnaOrdenada[k]!=columnaEstaOrdenada[k])
        {
          hasChange = true;
          break;
        }
      }
    if(!hasChange)
    {
      reversarTabla(tabla);  
    }
    else
    {
      for(var i=0;i<max;i++)
      {
        for(var j=i;j<max;j++)
        {
          if(columnaOrdenada[i]==Trim(tabla.rows[j].cells[col].innerText).toUpperCase())
          {
            intercambiaFila(i,j,tabla);
            j=max;
          }
        }
      }
    }
}

function ordenaTablaNumero(col_,tabla){


col = parseInt(col_);
//var columna = new Array();
var max = tabla.rows.length;
var hasChange = false;
var columnaOrdenada = new Array();
var columnaEstaOrdenada = new Array();
  for(i=0;i<max;i++)
  {
    //columna[i] = tabla.rows[i].cells[col].innerHTML;
    columnaOrdenada[i] = Trim(tabla.rows[i].cells[col].innerText);
    columnaEstaOrdenada[i] = Trim(tabla.rows[i].cells[col].innerText);
  }

    columnaOrdenada.sort(numeroMayor);

    for(var k=0;k<columnaEstaOrdenada.length;k++)
      {
        if(columnaOrdenada[k]!=columnaEstaOrdenada[k])
        {
          hasChange = true;
          break;
        }
      }

    if(!hasChange)
      {
        reversarTabla(tabla);
      }
      else
      {

        for(var i=0;i<max;i++)
        {
        for(var j=i;j<max;j++)
          {
          if(columnaOrdenada[i]==Trim(tabla.rows[j].cells[col].innerText)){intercambiaFila(i,j,tabla);j=max;}
          }
        }
      }
}

function ordenaTablaFecha(col_,tabla){

col = parseInt(col_);
var hasChange = false;
var max = tabla.rows.length;
//var columna = new Array();
var columnaOrdenada = new Array();
var columnaEstaOrdenada = new Array();
for(i=0;i<max;i++){
//columna[i] = tabla.rows[i].cells[col].innerHTML;
columnaOrdenada[i] = Trim(tabla.rows[i].cells[col].innerText);
columnaEstaOrdenada[i] = Trim(tabla.rows[i].cells[col].innerText);
}
columnaOrdenada.sort(fechaMayor);


    for(var k=0;k<columnaEstaOrdenada.length;k++)
      {
        if(columnaOrdenada[k]!=columnaEstaOrdenada[k])
        {
          hasChange = true;
          break;
        }
      }

    if(!hasChange)
      {
        reversarTabla(tabla);
      }
    else
    {
        for(var i=0;i<max;i++)
        {
        for(var j=i;j<max;j++)
          {
          if(columnaOrdenada[i]==Trim(tabla.rows[j].cells[col].innerText)){intercambiaFila(i,j,tabla);j=max;}
          }
        }      
    }


}

function numeroMayor(a_,b_){
var a = parseInt(a_);
var b = parseInt(b_);
if(a>=b)return 1;
else return -1;
}

function fechaMayor(_f1,_f2){
var f1_ = convierteMMDDYYYY(_f1);
var f2_ = convierteMMDDYYYY(_f2);
var f1 = new Date(f1_);
var f2 = new Date(f2_);
if(f1>=f2)return 1;
else return -1;
}

function convierteMMDDYYYY(fecha){
var fecha_ = fecha.substring(3,5) + "/" + fecha.substring(0,2) + "/" + fecha.substring(6,10);
return fecha_;
}

function Trim(s) 
{
  while ((s.substring(0,1) == ' ') || (s.substring(0,1) == '\n') || (s.substring(0,1) == '\r'))
  {
    s = s.substring(1,s.length);
  }
  while ((s.substring(s.length-1,s.length) == ' ') || (s.substring(s.length-1,s.length) == '\n') || (s.substring(s.length-1,s.length) == '\r'))
  {
    s = s.substring(0,s.length-1);
  }
  return s;
}