String.prototype.trim = function() 
{ 
    // usando uma regular expression para trocar 
    // os espaï¿½os para vazio 
    return this.replace(/(^\s*)|(\s*$)/g, ""); 
}

/**
 * Abre popUp  
 *
 */
function abrirJanela(url,largura,altura) {
    var janela = window.open(url,'PopUp','width='+largura+',height='+altura);
    janela.focus();
}

/**
 * Retorna true se o campo ï¿½ nulo ou vazio
 *
 * return True se vazio ou nulo, false caso contrï¿½rio
 */
function ehVazio(campo) {
    if (campo.value == null || trim(campo.value) == '') {
        return true;
    }
    
    return false;
}

function TrocaImg(objeto,img){
    objeto.src = "image/interna/bot_" + img + ".gif";
}



function extraiNumero(campo) {
    var valor = "";
    var teste = campo.value;
    for (var i = 0;i<teste.length;i++) {
        if (!isNaN(teste.charAt(i))) {
            valor += teste.charAt(i);
        }
    }
    campo.value=valor;
}


function submenu(id, estilo)
{
	var myElement=document.getElementById(id);
	{
	eval('myElement.style.visibility=' + "estilo");
	}
}



/**
*Funï¿½ï¿½o responsï¿½vel por verificar qual funï¿½ï¿½o de marcaï¿½ï¿½o de checkbox deverï¿½ chamar
*/  

function ToggleAll(e, frm, nome) {
    if (e.checked) {
        CheckAll(frm, nome);
    }
    else {
        ClearAll(frm, nome);
    }
 }

/**
*Funï¿½ï¿½o responsï¿½vel por marcar todos os checkBox
*/  
    
function CheckAll(frm, nome) {
    var ml = frm;
    var len = ml.elements.length;
    for (var i = 0; i < len; i++) {
        var e = ml.elements[i];
        if(e.name.indexOf(nome) != -1) {    
           e.checked = true;
        }
    }
    ml.toggleAll.checked = true;
 }

/**
*Funï¿½ï¿½o responsï¿½vel por desmarcar todos os checkBox
*/  
 function ClearAll(frm, nome) {
    var ml = frm;
    var len = ml.elements.length;
    for (var i = 0; i < len; i++) {
        var e = ml.elements[i];
        if(e.name.indexOf(nome) != -1) {    
           e.checked = false;
        }
    }
    ml.toggleAll.checked = false;
 }
 
/* 
 * Funï¿½ï¿½o para verificar se algum checkbox estï¿½ marcado.
 */
function verificaChecked(frm, nome) {

    var i;
    var ok = false;

    for (i = 0; i < frm.length; i++) {
   
       if (frm.elements[i].type == "checkbox") {

           if ((frm.elements[i].name == nome) && frm.elements[i].checked) {
               ok = true;
               break;
           }
       }
   }
   
   return ok;
}

/* 
 * Funï¿½ï¿½o para verificar se algum checkbox estï¿½ marcado.
 */
function verificaRadio(frm, nome) {

    var i;
    var ok = false;

    for (i = 0; i < frm.length; i++) {
   
       if (frm.elements[i].type == "radio") {
           if ((frm.elements[i].name == nome) && frm.elements[i].checked) {
               ok = true;
               break;
           }
       }
   }
   
   return ok;
}

/**
 * Obter o item do radio button selecionado.
 * @param radio RadioButton informado.
 * @param Retorna o objeto radio selecionado.
 */
function obterRadioSelecionado(radio) {

    var item;

    if (radio[0] != null) {

        for (var i = 0; i < radio.length; i++) {

            if (radio[i].checked) {
                item = radio[i];
                break;
            }
        }
    }
    
    return item;
}

/*
* Funï¿½ï¿½o responsï¿½vel por detalhar o parceiro.
*/
function detalheParceiro(frm,acao,campo, cod) {
    frm.action = acao;
    frm[campo].value = cod;
    frm.submit();
    return true;
}



/**
*   Funï¿½ï¿½o que retira os espaï¿½os em branco a direita e a esquerda, retornando uma nova string sem espaï¿½os em branco.
*/
function trim(s) {
    try {
      while (s.substring(0,1) == ' ') {
        s = s.substring(1,s.length);
      }
      while (s.substring(s.length-1,s.length) == ' ') {
        s = s.substring(0,s.length-1);
      }
      return s;
    } catch (e) {}
}



/*
*  Funcao para fazer formatacao de perï¿½odo : mm/aaaa
*  Utilizar da seguinte forma: formataPeriodo(this)
*/
function formataPeriodo(campo, e)
{
    car = ( navigator.appName == "Netscape" ) ? e.which : e.keyCode;
    
    if ( ( car < 48 || car > 57 ) && ( car > 31 ) ) return false;
    if ( campo.value.length==2 )
    {
        campo.value+='/';
    }

    return true;
}

/*
*  Funcao para validar o perï¿½odo, verificando mes e ano.
*  Utilizar da seguiinte forma: validaPeriodo(campo_date)
*/

function validarPeriodo(Wparam) {
    if ( trim( Wparam.value ) != "" ) {
        barra = Wparam.value.indexOf("/");
        mes = Wparam.value.substring(0,barra);
        ano = Wparam.value.substring(barra+1);
        data = mes + ano;
        if ( data.length < 6 ) {
            alert("O formato correto do perï¿½odo ï¿½ mm/aaaa");
            Wparam.focus();
            return false;
        }
        if ( mes > 12 || mes < 1 ){
            alert("Mï¿½s digitado ï¿½ invï¿½lido");
            Wparam.focus();
            return false;
        }
   }
   return true;
}




/*
*  So permite a entrada de numero num campo text de um formulario.
*  Deve ser chamado no evento KeyPress da seguinte forma: onKeyPress="soNumerosTarifa(event)"
*/
function soNumerosTarifa(e)
{
    car = ( navigator.appName == "Netscape" ) ? e.which : e.keyCode;

    if ( car > 31 && ( ( car < 48 && car != 46 ) || ( car > 57 ) ) )
        return false;
    else 
        return true;
}


/*
*  So permite a entrada de numero num campo text de um formulario.
*  Deve ser chamado no evento KeyPress da seguinte forma: onKeyPress="soNumeros(event)"
*/
function soNumeros(e)
{
    car = ( navigator.appName == "Netscape" ) ? e.which : e.keyCode;
    
    if ( car > 31 && ( car < 48 || car > 57 ) )
        return false;
    else 
       return true;
}


function validacnpj(campo) {
    if ( trim( campo.value ) != "" ) {
        var Num = limpa(campo.value);
        var Mult1 = '543298765432';
        var Mult2 = '6543298765432';
        var dig1 = 0;
        var dig2 = 0;
        var X = 0;
        for (var X = 0; X < 13; X++) {
            dig1 += (Num.substr(X, 1) * Mult1.substr(X, 1));
        }
        for (var X = 0; X < 14; X++) {
            dig2 += (Num.substr(X, 1) * Mult2.substr(X, 1));
        }
        dig1 = (dig1 * 10) % 11;
        dig2 = (dig2 * 10) % 11;
    
        if (dig1 == 10) 
            dig1 = 0;
        if (dig2 == 10)
            dig2 = 0;
        if (dig1 != Num.substr(12, 1)) {
            return (false);
        }
        if (dig2 != Num.substr(13, 1)){
            return (false);
        }
   }
    return (true);
}

function validacpf2(campo) {
    if ( trim( campo.value ) != "" ) {
        if (campo.value.length < 11) {
            window.alert("CPF Invï¿½lido");
            campo.focus();
            return false;
        }
        var Num = limpa(campo.value);
        var Mult1 = '298765432';
        var Mult2 = '3298765432';
        var dig1 = 0;
        var dig2 = 0;
        var X = 0;
        for (var X = 0; X < 10; X++) {
            dig1 += (Num.substr(X, 1) * Mult1.substr(X, 1));
        }
        for (var X = 0; X < 11; X++) {
            dig2 += (Num.substr(X, 1) * Mult2.substr(X, 1));
        }
        dig1 = (dig1 * 10) % 11;
        dig2 = (dig2 * 10) % 11;
    
        if (dig1 == 10) 
            dig1 = 0;
        if (dig2 == 10)
            dig2 = 0;
        if (dig1 != Num.substr(9, 1)) {
            window.alert("CPF Invï¿½lido");
            campo.focus();
            return (false);
        }
        if (dig2 != Num.substr(10, 1)){
            window.alert("CPF Invï¿½lido");
            campo.focus();
            return (false);
        }
   }
    return (true);
}

function limpa(str) {
  var digitos = "0123456789";
  var temp = "";
  var digito = "";
  for (var i=0; i < str.length; i++) {
    digito = str.charAt(i);
    if (digitos.indexOf(digito)>=0) {
      temp=temp+digito;
    } 
  }
  return temp;
}

function inverte(str) {
        var temp="";
        var S=str;
        for (var i=0; i<S.length; i++) {
            temp=S.charAt(i)+temp
        }
        return temp 
}

function resto(str) {
        var invertido = inverte(limpa(str));
        var soma = 0;
        for (var i=0; i<invertido.length; i++){
            soma=soma+(i+2)*eval(invertido.charAt(i))
        }
        soma*=10;
        return ((soma % 11) % 10)
}

function validacpf(campo) {
  var valor = campo.value;
  var result = "";
  var OK = false;
  var temp = limpa(valor);
  if (temp.length>10) {
    var work=temp.substring(0,(temp.length)-2);
    var iresto = resto(work);
    OK = (iresto == eval(temp.charAt((temp.length)-2)));
    if (OK) {
      work = work+temp.charAt((temp.length)-2);
      iresto = resto(work);
      OK = (iresto == eval(temp.charAt((temp.length)-1)));
    }
  }
  if (OK) {
    return true;
  }
}

/*
* Funï¿½ï¿½o que verifica se um valor ï¿½ numï¿½rico.
* Utilizar da seguinte forma: isNumber(document.forms[#].elements[#].value)
*/
function isNumber(inputVal)
{
    oneDecimal = false;
    inputStr = inputVal.toString();
    for(var i = 0;i < inputStr.length; i++)
    {
        var oneChar = inputStr.charAt(i);
        if(oneChar == "." && !oneDecimal)
        {
            oneDecimal = true;
            continue;
        }
        if(oneChar < "0" || oneChar > "9")
        {
            return false;
        }
    }
    return true;
}

//formata de forma generica os campos
function formataCampo(campo, Mascara, evento) {
    var boleanoMascara;
 
    var Digitato = evento.keyCode;
    exp = /\-|\.|\/|\(|\)| /g
    campoSoNumeros = campo.value.toString().replace( exp, "" );
 
    var posicaoCampo = 0;    
    var NovoValorCampo="";
    var TamanhoMascara = campoSoNumeros.length;;
 
    if (Digitato != 8) { // backspace
        for(i=0; i<= TamanhoMascara; i++) {
            boleanoMascara  = ((Mascara.charAt(i) == "-") || (Mascara.charAt(i) == ".")
                                || (Mascara.charAt(i) == "/"))
            boleanoMascara  = boleanoMascara || ((Mascara.charAt(i) == "(")
                                || (Mascara.charAt(i) == ")") || (Mascara.charAt(i) == " "))
            if (boleanoMascara) {
                NovoValorCampo += Mascara.charAt(i);
                  TamanhoMascara++;
            }else {
                NovoValorCampo += campoSoNumeros.charAt(posicaoCampo);
                posicaoCampo++;
              }           
          }    
        campo.value = NovoValorCampo;
          return true;
    }else {
        return true;
    }
}

/*
* Funï¿½ï¿½o que formata Moeda.
* Utilizar da seguinte forma: onKeyUp="formataCampoMoeda(this);"
*/
function formataCampoMoeda(valor)
{
    var valorFormatado;
    var valorAux1;
    var valorAux=valor.value;

    if(valorAux.indexOf(",") != -1)
    {
        valorAux1 = valorAux.split(",");
        valorAux = valorAux1[0]+valorAux1[1];
    }

    while((pos=valorAux.indexOf(".")) != -1)
    {
        valorAux = valorAux.substring(0,pos)+valorAux.substr(pos+1);
    }

    var vl = parseInt(valorAux);
    valorAux = vl.toString();
    var tam = valorAux.length;

        if((!isNumber(valorAux)) && (tam > 0))
    {
        //alert("Favor preencher campo apenas com n\372meros.");
        //valor.value = valorAux.substring(0,tam-1);
        return;
    }


    if((tam > 2))
    {
        var valorAuxInt = valorAux.substring(0,tam-2);
        var tamInt = valorAuxInt.length;
        var dim = tamInt-3;
        while(dim > 0)
        {
            valorAuxInt = valorAuxInt.substring(0,dim)+"."+valorAuxInt.substr(dim);
            dim = dim-3;
        }
        valorFormatado = valorAuxInt+","+valorAux.substring(tam-2,tam);
        valor.value = valorFormatado;
    }
    else
    {
        valor.value = valorAux;
    }
}

/*
* Funï¿½ï¿½o que formata Moeda.
* Utilizar da seguinte forma: onKeyUp="formataCampoQtde(this);"
*/
function formataCampoQtde(campo)
{
    var valorFormatado;
    var valorAux1;
    var valorAux=campo.value;

    if(valorAux.indexOf(",") != -1)
    {
        valorAux1 = valorAux.split(",");
        valorAux = valorAux1[0]+valorAux1[1];
    }

    while((pos=valorAux.indexOf(".")) != -1)
    {
        valorAux = valorAux.substring(0,pos)+valorAux.substr(pos+1);
    }

    var vl = parseInt(valorAux);
    valorAux = vl.toString();
    var tam = valorAux.length;

        if((!isNumber(valorAux)) && (tam > 0))
    {
        //alert("Favor preencher campo apenas com n\372meros.");
        //valor.value = valorAux.substring(0,tam-1);
        return;
    }


    if((tam > 3))
    {
        var valorAuxInt = valorAux.substring(0,tam-3);
        var tamInt = valorAuxInt.length;
        var dim = tamInt-3;
        while(dim > 0)
        {
            valorAuxInt = valorAuxInt.substring(0,dim)+"."+valorAuxInt.substr(dim);
            dim = dim-3;
        }
        valorFormatado = valorAuxInt+","+valorAux.substring(tam-3,tam);
        campo.value = valorFormatado;
    }
    else
    {
        campo.value = valorAux;
    }
}

/*
* Funï¿½ï¿½o que formata Quantidade da NotaFiscal.
* Utilizar da seguinte forma: onBlur="formataCampoQtdeOnBlur(this);"
*/
function formataCampoQtdeOnBlur(campo)
{
    var tam = campo.value.length;

    if (tam <= 3)
    {
        if(!isNumber(campo.value))  {
            alert("Favor preencher campo apenas com nï¿½meros.");
            campo.value = campo.value.substring(0,tam-1);
        } else if( tam == 1 ) {
            campo.value = "0,00"+campo.value;
        } else if ( tam == 2 ) {
            campo.value = "0,0"+campo.value;
        } else if ( tam == 3 ) {
            campo.value = "0,"+campo.value;
        }

    }
}


/*
* Funï¿½ï¿½o que formata Moeda.
* Utilizar da seguinte forma: onBlur="formataCampoMoedaOnBlur(this);"
*/
function formataCampoMoedaOnBlur(valor)
{
    var tam = valor.value.length;


    if (tam <= 2)
    {
        if(!isNumber(valor.value))
        {
            alert("Favor preencher campo apenas com nï¿½meros.");
            valor.value = valor.value.substring(0,tam-1);
        }
        else if(tam == 1)
        {
            valor.value = "0,0"+valor.value;
        }
        else if(tam == 2)
        {
            valor.value = "0,"+valor.value;
        }
    }
}

/*
*  Funcï¿½o que verifica o preenchimento dos campos obrigatorios.
*  Parte do pressuposto que os campos obrigatorios terï¿½o nome iniciado com _obr.
*  Utilizar da seguinte forma: (document.forms[#])
*/
function valida(frm)
{
    for (i=0;i<frm.length;i++)
    {
        if (frm.elements[i].name.search('obr') != -1)
            if ((trim(frm.elements[i].value) == '') && (frm.elements[i].disabled == false))
            {
                alert('Por favor, preencha todos os campos obrigatï¿½rios.');
                frm.elements[i].focus();
                return 0;
            }
    }

    return 1;
}


/*
*  Funcï¿½o que verifica o preenchimento dos campos obrigatorios.
*  @param frm formulï¿½rio, qtdeObr quantidade de filtros obrigatï¿½rios.
*  Utilizar da seguinte forma: (document.forms[#])
*/
function validaFiltro(frm,qtdeObr)
{

    qtdePreenchido = 0;
    for (i=0;i<frm.length;i++)
    {
        if (frm.elements[i].type == 'text' || frm.elements[i].type == 'select-one') { 
            if ( trim( frm.elements[i].value ) != '' ) {
                qtdePreenchido = qtdePreenchido +1;
            }
        } 
    }

    if(qtdePreenchido < qtdeObr){
                alert('Por favor, preencha pelo menos '+ qtdeObr +' filtro(s).');
                return 0;
    }

    return 1;
}


/*
*   Funï¿½ï¿½es usadas no formulï¿½rio de usuï¿½rio. Tem a funï¿½ï¿½o de transferir dados de uma combo para outra.
*  Utilizaï¿½ï¿½o :   onclick="sel();" e onclick="rem();"
*  A funï¿½ï¿½o onSubmit="posta()" serve para colocar os itens escolhidos separados por virgula para serem enviados.
*  
*/

    function setMultCombo(frm,strOr,strDest){
      var objO = frm[strOr];
      var objD = frm[strDest];
      var tam  = parseInt(objO.options.length)-1;
      for (var i=tam;i>=0;i--){
        if (objO.options[i].selected){
          objD.options[objD.options.length] = new Option(objO.options[i].text,objO.options[i].value);
          objO.options[i] = null;
        }
      }
    }



function posta() {
  var f = document.form1;
  var prim = 1;
  var xtxt = "";
  var valCampo = "";
  
  for (j=0;j < f.p_campos.options.length;j++) {
    if (prim == 0) 
        xtxt = xtxt + ","; 
    valCampo = f.p_campos.options[j].text;
    tamCNPJ =  valCampo.indexOf("|");
    xtxt = xtxt + ("fornecedor_" + valCampo.substring(0,tamCNPJ - 1) ); 
    prim = 0; 
  }
  //alert(xtxt);
  document.form1.p_fornecedor.value   = xtxt;
  return true;
}

function postaInterno(frm) {
  var f = frm;
  var prim = 1;
  var xtxt = "";
  for (j=0;j < f.p_campos.options.length;j++) {
    if (prim == 0) xtxt = xtxt + ","; 
    xtxt = xtxt + f.p_campos.options[j].value; 
    prim = 0; 
  }
  document.form1.p_filial.value   = xtxt;
  return true;
}




function formataReal(ValoraFormatar) {
    var i ;
    var decimalPointDelimiter = ",";
    var posDecPoint = parseInt("");
    var hasDecPoint = false;
    var s = new String(ValoraFormatar);
    var sAux = new String("");

    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
        if ( c == '.' ) c = decimalPointDelimiter;
        sAux += c;
      if (c == decimalPointDelimiter){ 
              hasDecPoint = true;
              posDecPoint = i;
              break;}
    }
    for (var j = i+1; j < s.length; j++) sAux += s.charAt(j);
    
    if (!hasDecPoint) //(isNaN(posDecPoint)) 
      { ValoraFormatar = s + ",00";}
    else
      { 
        s = sAux + '00';
        ValoraFormatar= s.charAt(0);
        for (i = 1; i <= (posDecPoint+2); i++){ 
            ValoraFormatar += s.charAt(i);}
        if (posDecPoint == 0) ValoraFormatar = '0'+ValoraFormatar;
      }
    s = ValoraFormatar;
    ValoraFormatar = "";
    i=0;

    for (var j=s.length-4; j>=0; j--)
    {
        i++;
        ValoraFormatar = s.charAt(j) + ValoraFormatar;
        if (i == 3 && j != 0)
        {
            ValoraFormatar = "." + ValoraFormatar;
            i = 0;
        }
    }           
    ValoraFormatar +=  s.substring(s.length-3,s.length);
    
    return ValoraFormatar;
}

/*
*   Funï¿½ï¿½o que verifica o intervalo das datas.
*   Utilizar da seguinte forma: (document.forms[#].elementes[#],document.forms[#].elementes[#])
*/
function validaIntervaloData(dt_inicio,dt_fim)
{
    if (!validardata(dt_inicio)) {
        dt_inicio.focus();
        return false;
    }
    
    if (!validardata(dt_fim)) {
        dt_fim.focus();
        return false;
    }

    dia_inicio=dt_inicio.value.substr(0,2);
    mes_inicio=dt_inicio.value.substr(3,2);
    ano_inicio=dt_inicio.value.substr(6,4);

    dia_final=dt_fim.value.substr(0,2);
    mes_final=dt_fim.value.substr(3,2);
    ano_final=dt_fim.value.substr(6,4);

    if (ano_inicio > ano_final)
    {
        alert("A data de inicio deve ser anterior ï¿½ data fim.");
        dt_inicio.focus();
        return false;
    }

    if ((ano_inicio == ano_final) && (mes_inicio > mes_final))
    {
        alert("A data de inicio deve ser anterior ï¿½ data fim.");
        dt_inicio.focus();
        return false;
    }

    if ((ano_inicio == ano_final) && (mes_inicio == mes_final) && (dia_inicio > dia_final))
    {
        alert("A data de inicio deve ser anterior ï¿½ data fim.");
        dt_inicio.focus();
        return false;
    }

    return true;

}

function habilitaTodos(frm) {
    for (i = 0; i< frm.length; i++) {
      frm.elements[i].disabled = false;
    }
}

/*
* Funï¿½ï¿½o que verifica o tipo do dado cValue que estï¿½ sendo passado e retorna o mesmo formatado para
* que se possa fazer uma ordenaï¿½ï¿½o correta dos dados de uma tabela.
*/
function setDataType(cValue){
    // ESTA FUNï¿½ï¿½O CONVERTE DATAS E NUMEROS PARA ARRAYS PRï¿½PRIOS
    // ORDENANDO EM UMA FUNï¿½ï¿½O DE ORDENAï¿½ï¿½O
    var isDate = new Date(cValue);
    if (isDate == "NaN"){
        if (isNaN(cValue)){
            // O VALOR ï¿½ UMA STRING, TRANSFORMA TODOS OS CARACTERES EM
            // STRING MAIï¿½SCULAS PARA GARANTIR UMA CORRETA ORDENAï¿½ï¿½O DE A-Z
            cValue = cValue.toUpperCase();
            return cValue;
        } else{
            // O VALOR ï¿½ UM NUMERO, PREVENIR A ORDENAï¿½ï¿½O DE UM Nï¿½MERO
            // ADICIONANDO UM DIGITO A MAIS QUE ï¿½ O + PARA O TAMANHO DO
            // Nï¿½MERO QUANDO ESTE ï¿½ UMA STRING
            var myNum;
            myNum = String.fromCharCode(48 + cValue.length) + cValue;
            return myNum;
        }
    }else{
        // VALOR ORDENADO ï¿½ UMA DATA, REMOVE TODOS OS PONTUAï¿½ï¿½ES E 
        // RETORNA A STRING COMO UM Nï¿½MERO
        //BUG - STRING E ORDENAï¿½ï¿½O Nï¿½O NUMERICA .....
        // ( 1 - 10 - 11 - 2 - 3 - 4 - 41 - 5  etc.)
        var myDate = new String();
        myDate = isDate.getFullYear() + " " ;
        myDate = myDate + isDate.getMonth() + " ";
        myDate = myDate + isDate.getDate(); + " ";
        myDate = myDate + isDate.getHours(); + " ";
        myDate = myDate + isDate.getMinutes(); + " ";
        myDate = myDate + isDate.getSeconds();
        //myDate = String.fromCharCode(48 + myDate.length) + myDate;
        return myDate ;
      }
  }
    
  /*
  * Funï¿½ï¿½o que faz a ordenaï¿½ï¿½o das linhas de uma table. Ou seja a ordem das linhas
  * vï¿½o sendo invertidas.
  */
  function sortTable(col, tableToSort){
        var iCurCell = col + tableToSort.cols;
        var totalRows = tableToSort.rows.length;
        var bSort = 0;
        var colArray = new Array();
        var oldIndex = new Array();
        var indexArray = new Array();
        var bArray = new Array();
        var newRow;
        var newCell;
        var i;
        var c;
        var j;
        // ** POPULA O ARRAY colArray COM O CONTEUDO DA COLUNA SELECIONADA
        for (i=1; i < tableToSort.rows.length; i++){
            //alert("Valor passado: "+setDataType(tableToSort.cells(iCurCell).innerText));
            bArray[i - 1] = setDataType(tableToSort.cells(iCurCell).innerText);
            iCurCell = iCurCell + tableToSort.cols;
        }
        // ** COPIA O ARRAY PARA COMPARAR DEPOIS DA ORDENAï¿½ï¿½O
        for (i=0; i < bArray.length; i++){
            colArray[i] = bArray[i];
        }
        // ** ORDENA OS ITENS DA COLUNA
        //alert ("colArray: "+colArray );
        bArray.sort();
        cBArray = bArray.length-1;
        for(i=0; i < bArray.length; i++){           
            colArray[i] = bArray[cBArray];
            cBArray = cBArray-1;

        }
        //alert ("colArray: "+colArray );
        //alert ("bArray: "+bArray);
        
        for (i=0; i < colArray.length; i++){ // FAZ O LOOP ATRAVï¿½S DO NOVO ARRAY ORDENADO
            indexArray[i] = (i+1);
            for(j=0; j < bArray.length; j++){ // FAZ O LOOP ATRAVï¿½S DO VELHO ARRAY
                if (colArray[i] == bArray[j]){  // QUANDO O ITEM VELHO E NOVO SE ENCONTRAM, COLOCA O
                    // NUMERO DA LINHA CORRENTE NA POSIï¿½ï¿½O APROPRIADA NA 
                    // NOVA ORDEM DO ARRAY ASSIM AS LINHAS PODEM SER MOVIDAS...
                    // GARANTA QUE O NUMERO DA LINHA CORRENTE Jï¿½ Nï¿½O ESTEJA 
                    // NA NOVA ORDEM DO ARRAY
                    for (c=0; c<i; c++){
                        if ( oldIndex[c] == (j+1) ){
                          bSort = 1;
                        }
                    }
                    if (bSort == 0){
                       oldIndex[i] = (j+1);
                    }
                    bSort = 0;
                 }
              }
        }
        //alert("colArray: "+colArray );
        //alert("bArray: "+bArray);
        //alert("oldIndex: "+oldIndex);     
        //alert("bSort: "+bSort);
        
        // ** ORDENAï¿½ï¿½O COMPLETA, ADICIONANDO NOVAS LINHAS PARA A BASE DA TABELA ....
        for (i=0; i<oldIndex.length; i++){
          newRow = tableToSort.insertRow();
          //newRow.bgcolor="#DDF2F5";
          for (c=0; c<tableToSort.cols; c++){
              newCell = newRow.insertCell();
              //newCell.bgcolor="#DDF2F5";
              newCell.innerHTML = tableToSort.rows(oldIndex[i]).cells(c).innerHTML;
              //newCell.bgcolor="#DDF2F5";
          }
        }
        //alert("newRow: "+newRow);
        //alert("newCell: "+newCell);
        //MOVE AS NOVAS LINHAS PARA O INICIO DA TABELA ....
        for (i=1; i<totalRows; i++){
          tableToSort.moveRow((tableToSort.rows.length -1),1);
        }
        //EXCLUI AS VELHAS LINHAS DO FINAL DA TABELA
        for (i=1; i<totalRows; i++){
          tableToSort.deleteRow();
        }
  }
    
/*
* Função que soma um número de dias a uma data no formato dd/MM/yyyy
*/
function somadias(data, dias) {
	data=data.split('/');
	diafuturo=parseFloat(data[0])+dias;
	mes=parseFloat(data[1]);
	ano=parseFloat(data[2]);
	while(diafuturo>diasPorMes(mes,ano)) {
		diafuturo-=diasPorMes(mes,ano);
		mes++;
		if(mes>12) {
			mes=1;
		ano++;
	}
}

if(diafuturo<10) diafuturo='0'+diafuturo;
if(mes<10) mes='0'+mes;

return diafuturo+"/"+mes+"/"+ano;
}

//FUNï¿½ï¿½ES PARA A TELA DE ABAS!!
//joao.felipe

var arAbas = new Array();
arAbas[0] = new stAba('td_opcao1','div_opcao1');
arAbas[1] = new stAba('td_opcao2','div_opcao2');
 
function stAba(menu,conteudo)
 {
	 this.menu = menu;
	 this.conteudo = conteudo;
 }
 		
 function AlternarAbas(menu,conteudo)
 {
	 for (i=0;i<arAbas.length;i++)
	 {
		  m = document.getElementById(arAbas[i].menu);
		  m.className = 'menu';
		  c = document.getElementById(arAbas[i].conteudo)
		  c.style.display = 'none';
	 }
	 m = document.getElementById(menu)
	 m.className = 'menu-sel';
	 c = document.getElementById(conteudo)
	 c.style.display = '';
 }
 
 /*
  * ##########################################################################
  * ###### FUNÇÃO QUE RETORNA A DIFERENÇA EM DIAS ENTRE DUAS DATAS
  * ###### -X: DATA2 < DATA1
  * ###### 0: DATA2 = DATA1
  * ###### +X: DATA2 > DATA1
  * ###### @autor Rafael Paiva Silva
  * ##########################################################################
  */
 function diferencaDias(data1, data2) {
	var arr1 = data1.split("/");
	var arr2 = data2.split("/");
	var dt1 = new Date(parseInt(arr1[2], 10), parseInt(arr1[1], 10) - 1, parseInt(arr1[0], 10));
	var dt2 = new Date(parseInt(arr2[2], 10), parseInt(arr2[1], 10) - 1, parseInt(arr2[0], 10));

    // variáveis auxiliares
    var minuto = 60000; 
    var dia = minuto * 60 * 24;
    var horarioVerao = 0;
    
    // ajusta o horario de cada objeto Date
    dt1.setHours(0);
    dt1.setMinutes(0);
    dt1.setSeconds(0);
    dt2.setHours(0);
    dt2.setMinutes(0);
    dt2.setSeconds(0);
    
    // determina o fuso horário de cada objeto Date
    var fh1 = dt1.getTimezoneOffset();
    var fh2 = dt2.getTimezoneOffset();
    
    // retira a diferença do horário de verão
    if(dt2 > dt1){
      horarioVerao = (fh2 - fh1) * minuto;
    } 
    else{
      horarioVerao = (fh1 - fh2) * minuto;    
    }
    
    var dif = dt2.getTime() - dt1.getTime() - horarioVerao;
    return Math.ceil(dif / dia);
}
 
 /*
  * ##########################################################################
  * ###### FUNÇÃO QUE COMPLETA O CAMPO COM O CARACTER E TAMANHO PASSADOS
  * ###### @autor Rafael Paiva Silva
  * ##########################################################################
  */
function completaCampo(campo, caracter, tamanho) {
	while (campo.value.length < tamanho){
		campo.value += caracter;
	}
}

 /*
  * ##########################################################################
  * ###### FUNÇÃO QUE RETORNA A IDADE DE UMA CERTA DATA DE NASCIMENTO
  * ###### DATA1 - DATA DE NASCIMENTO
  * ###### @autor Marcio Pereira Pinto
  * ##########################################################################
  */
 function getIdade(data1) { 
	var arr1 = data1.split("/");
	var dt1 = new Date(parseInt(arr1[2], 10), parseInt(arr1[1], 10) - 1, parseInt(arr1[0], 10));
	var dt2 = new Date();

    // variáveis auxiliares
    var minuto = 60000; 
    var dia = minuto * 60 * 24;
    var horarioVerao = 0;
    
    // ajusta o horario de cada objeto Date
    dt1.setHours(0);
    dt1.setMinutes(0);
    dt1.setSeconds(0);
    dt2.setHours(0);
    dt2.setMinutes(0);
    dt2.setSeconds(0);
    
    // determina o fuso horário de cada objeto Date
    var fh1 = dt1.getTimezoneOffset();
    var fh2 = dt2.getTimezoneOffset();
    
    // retira a diferença do horário de verão
    if(dt2 > dt1){
      horarioVerao = (fh2 - fh1) * minuto;
    } 
    else{
      horarioVerao = (fh1 - fh2) * minuto;    
    }
    
    var dif = dt2.getTime() - dt1.getTime() - horarioVerao;
    diferenca = Math.ceil(dif / dia);
    idade = parseInt(diferenca / 365);

    return idade;
}
	

/*
 * FUNÇÃO QUE ADICIONA DIAS(dd), MESES(MM) OU ANOS(yyyy) À DATA
 */
function addData(data, valor, tipo) {
  	data=data.split('/');
  	dia=parseFloat(data[0]);
  	mes=parseFloat(data[1]);
  	ano=parseFloat(data[2]);
  	if (tipo == 'dd'){
  		dia += valor;
  	} else if (tipo == 'MM'){
  		mes += valor;
  	} else if (tipo == 'yyyy'){
  		ano += valor;
  	}
  	while(mes > 12) {mes -= 12;	ano++;}
  	while(mes <= 0) {mes += 12;	ano--;}
  	while(dia > diasPorMes(mes,ano)) {
  		dia -= diasPorMes(mes,ano);
  		mes++;
  		if(mes > 12) {
  			mes -= 12;
  			ano++;
  		}
  	}
  	while(dia <= 0) {
  		dia += diasPorMes(mes,ano);
  		mes--;
  		if(mes <= 0) {
  			mes += 12;
  			ano--;
  		}
  	}

  	if(dia < 10) dia = '0' + dia;
  	if(mes < 10) mes = '0' + mes;

  	return dia + "/" + mes + "/" + ano;
}
      
/*
* FUNÇÃO QUE RETORNO A QUANTIDADE DE DIAS DE UM MÊS EM UM DETERMINADO ANO.
*/
function diasPorMes(mes,ano) {
  	if((mes<8 && mes%2==1) || (mes>7 && mes%2==0)) return 31;
  	if(mes!=2) return 30;
  	if(ano%4==0) return 29;
  	return 28;
}


/*
 * Abre a página de confirmação
 */
function windowOpenModal(pUrl, pWidth, pHeight, pTop, pLeft) {
	if (window.showModalDialog) {
		return window.showModalDialog(pUrl, window,
		  "dialogWidth:" + pWidth + "px;dialogHeight:" + pHeight + "px;dialogTop:" + pTop + "px;"
		  + "dialogLeft:" + pLeft + "px;");
	} else {
		try {
			netscape.security.PrivilegeManager.enablePrivilege(
			  "UniversalBrowserWrite");
			window.open(pUrl, "wndModal", "width=" + pWidth
					+ ",height=" + pHeight + ",top=" + pTop + ",left=" + pLeft 
					+ ",resizable=no,modal=yes");
			return true;
		}
		catch (e) {
			alert("Script não confiável, não é possível abrir janela modal.");
			return false;
		}
	}
}


 /*
  * Colore uma linha apartir de seu ID
  */
 function colore(tr, cor) {
	tr.style.background=cor;
 }

  function coloreLinha(tableId, cor) {
  	var previousClass = null;
  	var table = document.getElementById(tableId);
  	var tbody = table.getElementsByTagName("tbody")[0];
  	if (tbody == null) {
  		var rows = table.getElementsByTagName("tr");
  	} else {
  		var rows = tbody.getElementsByTagName("tr");
  	}
  	// add event handlers so rows light up and are clickable
  	for (i=0; i < rows.length; i++) {
  		rows[i].onmouseover = function() { colore(this, cor); };
  		rows[i].onmouseout = function() { colore(this, ''); };
  	}
  }
  

