
/*******************************************************************
  Arquivo:	Basico.js
  Versão:	V3.0
  Data:		Jun/2001 ~ Jul/2010
  Origem:	CJDinfo
  Função:	Funções Básicas em JavaScript para uso Geral
 *******************************************************************/

// -----------------------------------------------------------------
// Retorna True se a String dada só contiver caracteres 
// do domínio dado:
// -----------------------------------------------------------------
function ContidoNoDominio(StrDado, Dominio){
  
  var i, j;
    
  if (StrDado == "") return false;
    
  for (i=0; i<StrDado.length; i++){
    for (j=0; j<Dominio.length; j++){
      if (StrDado.substr(i,1) == Dominio.substr(j,1)) break;
    }
    if (j >= Dominio.length) return false;
  }
  return true;
}
            
// -----------------------------------------------------------------
// Retorna True se a String dada contiver algum caractere 
// do domínio dado:
// -----------------------------------------------------------------
function ContemDominio(StrDado, Dominio){
  
  var i, j;
    
  if (StrDado != ""){
    for (i=0; i<StrDado.length; i++){
      for (j=0; j<Dominio.length; j++){
        if (StrDado.substr(i,1) == Dominio.substr(j,1)) return true;
      }
    }
  }
  return false;
}
            
// -----------------------------------------------------------------
// Retorna True se o String dada for um número 
// com casas decimais dadas:
// -----------------------------------------------------------------
function IsStrNum(Dado, Casas){
  
  var l, posVirg, sDado = StrTrim(Dado);
 
  l = sDado.length;
  if (Casas > 0){
    if(l < Casas + 2) return false;
    posVirg = l - Casas - 1;
    if(sDado.substr(posVirg,1) != ",") return false;
    if(!ContidoNoDominio(sDado.substr(posVirg+1),"0123456789")) return false;
  } else {
    if(l == 0) return false;
    posVirg = l;
  }
  if(!ContidoNoDominio(sDado.substr(0,1),"+-0123456789")) return false;
  if(posVirg > 1 && !ContidoNoDominio(sDado.substring(1,posVirg),"0123456789")) return false;
  return true;
}

// -----------------------------------------------------------------
// Formata a data dada para comparação
// (de DD/MM/AAAA para AAAAMMDD)
// -----------------------------------------------------------------
function FmtDataCmp(Dado){
  
  var Result="";
  
  if (Dado.length == 10){
    Result = Dado.substr(6,4) + Dado.substr(3,2) + Dado.substr(0,2);
  }
  return Result;
}
  
// -----------------------------------------------------------------
// Formata a Hora dada para comparação
// (de HH:MM para HHMM ou de HH:MM:SS para HHMMSS)
// -----------------------------------------------------------------
function FmtHoraCmp(Dado){
  
  var Result="";
  
  if (Dado.length == 5){
    Result = Dado.substr(0,2) + Dado.substr(3,2);
  }
  if (Dado.length == 8){
    Result = Dado.substr(0,2) + Dado.substr(3,2) + Dado.substr(6,2);
  }
  return Result;
}

// -----------------------------------------------------------------
// Formata a DataHora dada para comparação
// (de DD/MM/AAAA para AAAAMMDD ou
//  de DD/MM/AAAA HH:MM para AAAAMMDDHHMM ou
//  de DD/MM/AAAA HH:MM:SS para AAAAMMDDHHMMSS)
// Obs.: Comparar sempre strings com MESMA formatação!
// -----------------------------------------------------------------
function FmtDataHoraCmp(Dado){
  
  var Result = "";
  
  if (Dado.length >= 10){
    Result = FmtDataCmp(Dado.substr(0,10));
    if (Dado.length > 10){
      Result += FmtHoraCmp(Dado.substr(11));
    }
  }
  return Result;
}

// -----------------------------------------------------------------
// Retorna True se a String dada for uma data válida
// no formato DD/MM/AAAA
// -----------------------------------------------------------------
function IsStrData(Dado){
  
  var DiasMes = new Array(31,29,31,30,31,30,31,31,30,31,30,31);
  var Dia, Mes, Ano;
  var Result = false;

  // Pré-analisa o String:
  if (Dado != ""){
    if ((Dado.length == 10) && (Dado.substr(2,1) == "/") && (Dado.substr(5,1) == "/")){
      // Levanta Campos:
      if (IsStrNum(Dado.substr(0,2),0)) Dia = Dado.substr(0,2);
      if (IsStrNum(Dado.substr(3,2),0)) Mes = Dado.substr(3,2);
      if (IsStrNum(Dado.substr(6,4),0)) Ano = Dado.substr(6,4);

      // Analisa Ano e Mês:
      if ((Ano > 0) && (Mes >= 1) && (Mes <= 12)){
        // Analisa Dia:
        if ((Dia >= 1) && (Dia <= DiasMes[Mes - 1])){
          // Analisa os casos não-bissextos:
          if ((Mes == 2) && ((Ano%4 != 0) || (Ano%100 == 0) && (Ano%400 != 0))){
            if (Dia <= 28) Result = true;
          } else {
            Result = true;
          }
        }
      }
    }
  }       
  return Result;
}   

// -----------------------------------------------------------------
// Retorna True se a String dada for uma data válida
// no formato HH:MM ou HH:MM:SS
// -----------------------------------------------------------------
function IsStrHora(Dado){
  
  var Hor, Min, Seg;
  var Result = false;

  // Pré-analisa o String:
  if (Dado != ""){
    if (((Dado.length == 5) || (Dado.length == 8)) && (Dado.substr(2,1) == ":")){
      // Levanta Campos:
      if (IsStrNum(Dado.substr(0,2),0)) Hor = Dado.substr(0,2); else Hor = -1;
      if (IsStrNum(Dado.substr(3,2),0)) Min = Dado.substr(3,2); else Min = -1;

      // Analisa a Hora:
      if ((Hor >= 0) && (Hor <= 23)){
        // Analisa o Minuto:
        if ((Min >= 0) && (Min <= 59)){
          // Verifica se tem segundo:
          if (Dado.length == 8){
            // Pré-analisa:
            if (Dado.substr(5,1) == ":"){
              // Levanta e verifica segundos:
              if (IsStrNum(Dado.substr(6,2),0)) Seg = Dado.substr(6,2); else Seg = -1;
              if ((Seg >= 0) && (Seg <= 59)){
                Result = true;
              }
            }
          } else {
            Result = true;
          }       
        }
      }
    }
  }
  return Result;
}

// -----------------------------------------------------------------
// Retorna True se a String dada for uma DataHora
// nos formatos "DD/MM/AAAA" ou "DD/MM/AAAA HH:MM"
// ou "DD/MM/AAAA HH:MM:SS"
// -----------------------------------------------------------------
function IsStrDataHora(Dado){
  
  var Result = false;

  // Pré-Analisa o String:
  if (Dado != ""){
    // Analisa a Data:
    if (Dado.length >= 10){
      if (IsStrData(Dado.substr(0,10))){
        // Analisa a Hora, se disponível:
        if (Dado.length > 10){
          if ((Dado.substr(10,1) == " ") && IsStrHora(Dado.substr(11))){
            Result = true;
          }
        } else {
          Result = true;
        }
      }
    }
  }
  return Result;
}

// -----------------------------------------------------------------
// Separa o Nome de Arquivo do Path completo
// 
// -----------------------------------------------------------------
function SeparaNomeArq(PathDado){
  
  var i;
  
  if (PathDado.length == 0) return "";
  
  for (i=PathDado.length-1; i>=0; i--){
    if (PathDado.substr(i,1) == "\\" || PathDado.substr(i,1) == ":"){
      return PathDado.substr(i + 1);
    }
  }
  return PathDado;        
}

// -----------------------------------------------------------------
// Acerta a String na Largura dada com Alinhamento à Direita:
//
// -----------------------------------------------------------------
function StrD(Dado, Larg){  
  
  var Result;
  var i;

  if (Dado.length >= Larg){
    Result = Dado.substr(Dado.length - Larg,Larg);         
  } else {
    Result = "";
    for (i=Larg-Dado.length; i>0; i--){
      Result = Result + " ";
    }
    Result = Result + Dado;
  }
  return Result;
}

// -----------------------------------------------------------------
// Acerta a String na Largura dada com Alinhamento à Esquerda:
//
// -----------------------------------------------------------------
function StrE(Dado, Larg){  
  
  var Result;
  var i;

  if (Dado.length >= Larg){
    Result = Dado.substr(0,Larg);       
  } else {
    Result = Dado;
    for (i=Larg-Dado.length; i>0; i--){
      Result = Result + " ";
    }
  }
  return Result;
}

// -----------------------------------------------------------------
// Retorna o valor Numérico em String Dado,
// formatado na Largura dada:
// -----------------------------------------------------------------
function StrNum(Dado, Larg){
  
  var Result, sDado, i;

  sDado = Dado.toString();
  if (sDado.length >= Larg){
    Result = sDado.substr(sDado.length - Larg,Larg);       
  } else {
    Result = "";
    for (i=Larg-sDado.length; i>0; i--){
      Result = Result + "0";
    }
    Result = Result + sDado;
  }
  return Result;
}

// -------------------------------------------------------------------
//  Retorna a Data do objeto Date dado no formato "DD/MM/AAAA":
//
// -------------------------------------------------------------------
function StrData(oDt) {

    return StrNum(oDt.getDate(), 2) + "/" + StrNum(oDt.getMonth()+1, 2) + 
           "/" + StrNum(oDt.getFullYear(), 4);
}

// -------------------------------------------------------------------
//  Retorna a Hora do objeto Date dado no formato "HH:MM:SS":
//
// -------------------------------------------------------------------
function StrHora(oDt) {

    return StrNum(oDt.getHours(), 2) + ":" + StrNum(oDt.getMinutes(), 2) + 
           ":" + StrNum(oDt.getSeconds(), 2);
}

// -------------------------------------------------------------------
//  Retorna a Data do objeto Date dado no formato 
//  "DD/MM/AAAA HH:MM:SS":
// -------------------------------------------------------------------
function StrDataHora(oDt) {

    return StrData(oDt) + " " + StrHora(oDt);
}

// -------------------------------------------------------------------
//  Right
//  Retorna a quantidade de caracteres indicados da string dada
// -------------------------------------------------------------------
function Right(Dado, Qtd) {
    
    return Dado.substr(Dado.length - Qtd);
}

// -----------------------------------------------------------------
// Elimina os espaços do Início e Fim da String Dada
//
// -----------------------------------------------------------------
function StrTrim(Dado){
  
  var sDado, Result, i, f;

  Result = "";
  sDado = Dado.toString();
  if (sDado.length > 0){
    for (i=0; i<sDado.length; i++){
      if (sDado.charAt(i) != " ") break;
    }
    if (i < sDado.length){
      for (f=sDado.length-1; f>=0; f--){
        if (sDado.charAt(f) != " ") break;
      }
      Result = sDado.substring(i, f+1);
    }
  }
  return Result;
}

// -----------------------------------------------------------------
// Retorna a String dada somente com os caracteres do domínio dado
// 
// Para fazer um text-box deixar passar somente determinado domínio
// use nos eventos de onKeyUp e onChange simultaneamente:
// this.value = PassaDominio(this.value, Dominio)
// -----------------------------------------------------------------
function PassaDominio(StrDado, Dominio){
  
  var i, j, c;
  var Result;
  
  Result = "";
  for (i=0; i<StrDado.length; i++){
    c = StrDado.substr(i,1);
    for (j=0; j<Dominio.length; j++){
      if (c == Dominio.substr(j,1)) break;
    }
    if (j < Dominio.length){
      Result = Result + c;
    }
  }
  return Result;
}
      
// -----------------------------------------------------------------
// Retorna a String dada retirando os caracteres do domínio dado
//
// -----------------------------------------------------------------
function BloqueiaDominio(StrDado, Dominio){
  
  var i, j;
  
  Result = "";
  for (i=0; i<StrDado.length; i++){
    c = StrDado.substr(i,1);
    for (j=0; j<Dominio.length; j++){
      if (c == Dominio.substr(j,1)) break;
    }
    if (j >= Dominio.length){
      Result = Result + c;
    }
  }
  return Result;
}

// -----------------------------------------------------------------
// Retorna a true se for um mail válido
//
// -----------------------------------------------------------------
function ValidaEMail(EMail){

  if (EMail.indexOf("@") < 0) return false;
  if (EMail.indexOf(".") < 0) return false;
  if (ContemDominio(EMail, " ;,:/$!#%^&*()+[]{}|\\~`'\"")) return false;
  return true;
}

// -----------------------------------------------------------------
// Limita o MaxLength do campo (objeto) indicado no tamanho dado
// (específico para controle de maxlength de textarea)
// Amarrar ao evento onKeyUp:
// -----------------------------------------------------------------
function LimitaMaxLength(Obj, Tamanho){

  if(Obj.value.length > Tamanho){
    Obj.value = Obj.value.substr(0,Tamanho);
  }
}

// -------------------------------------------------------------------
// Conta e Limita o MaxLength do textarea indicado, com o tamanho
// indicado e apresenta mensagem no objeto msg de nome indicado.
// Amarrar ao envento de onKeyUp:
// -------------------------------------------------------------------
function ContaMaxLength(Obj, NomeMsg, Tamanho){

  var c, el;
  
  LimitaMaxLength(Obj, Tamanho);
  c = Tamanho - Obj.value.length;
  el = getElemento(NomeMsg);
  el.innerHTML = c + " Caracteres restantes";
}

// -------------------------------------------------------------------
//  AcConv     
//  Converte os Acentos para letras normais.
//  Elimina os caracteres ASC Extendidos.
// -------------------------------------------------------------------
function AcConv(Dado){

    s = "";
    for(i=0; i<Dado.length; i++){
        c = Dado.charAt(i);
        switch(c){
            case 'á':
            case 'à':
            case 'ã':
            case 'â':
            case 'ä':
                c = 'a';
                break;
            case 'é':
            case 'ê':
            case 'ë':
                c = 'e';
                break;
            case 'í':
            case 'ì':
            case 'î':
            case 'ï':
                c = 'i';
                break;
            case 'ó':
            case 'ò':
            case 'õ':
            case 'ô':
            case 'ö':
                c = 'o';
                break;
            case 'ú':
            case 'ù':
            case 'û':
            case 'ü':
                c = 'u';
                break;
            case 'ç':
                c = 'c';
                break;
            case 'Á':
            case 'À':
            case 'Ã':
            case 'Â':
            case 'Ä':
                c = 'A';
                break;
            case 'É':
            case 'Ê':
            case 'Ë':
                c = 'E';
                break;
            case 'Í':
            case 'Ì':
            case 'Î':
            case 'Ï':
                c = 'I';
                break;
            case 'Ó':
            case 'Ò':
            case 'Õ':
            case 'Ô':
            case 'Ö':
                c = 'O';
                break;
            case 'Ú':
            case 'Ù':
            case 'Û':
            case 'Ü':
                c = 'U';
                break;
            case 'Ç':
                c = 'C';
                break;
            default:
                if(c > '~'){
                    c = ' ';
                }
        }
        s += c;
    }
    return s;
}

// -------------------------------------------------------------------
//  Retorna o objeto do elemento de tela com Id dado:
//  
// -------------------------------------------------------------------
function getElemento(Id){
  
  var el;
  
  if(document.all){
    eval("el = document.all." + Id);
  }else{
    el = document.getElementById(Id);
  }
  return el;
}

