﻿//*****************************************************************
//********************** Teclas válidas ***************************
//*****************************************************************

function getTeclasValidasGerais(_ATecla, _AShiftPress){
  /* Teclas válidas
     - 08: Backspace
     - 09: TAB
     - 35: End
     - 36: Home
     - 37: Seta Esquerda
     - 39: Seta Direita
     - 46: Delete
  */  
  return ((_AShiftPress == false) && 
          ((_ATecla == 8) || 
           (_ATecla == 9) ||
           (_ATecla == 35) ||
           (_ATecla == 36) ||
           (_ATecla == 37) ||
           (_ATecla == 39) ||
           (_ATecla == 46)));
}

//*****************************************************************
//************************** Funções ******************************
//*****************************************************************

// Digitação de inteiros
function OnChangeInteger(_ACtrl){
  var ACharValidos = /^((\d+\,\d+)*|(\d+))$/;
  
  if(ACharValidos.test(_ACtrl.value) == false)
    _ACtrl.value = '';
}

function OnKeyPressValidarInteiros(_ACtrl, _AEvent){
  var ATecla = (_AEvent.keyCode)?(_AEvent.keyCode):(_AEvent.which);
  var ADigito = String.fromCharCode(ATecla);
  var ACharValidos = /^(\d+)$/;
  
  if(ACharValidos.test(ADigito) == false)
    return getTeclasValidasGerais(ATecla, _AEvent.shiftKey);
}

// Digitação de CEP
function OnChangeValidarCEP(_ACtrl){
  var ACharValidos = /^\d{5}\-\d{3}$/;

  if ((ACharValidos.test(_ACtrl.value)) == false)
    _ACtrl.value = '';
}

function OnKeyPressValidarCEP(_ACtrl, _AEvent){
  var ATecla = (_AEvent.keyCode)?(_AEvent.keyCode):(_AEvent.which);
  var ADigito = String.fromCharCode(ATecla);
  var ACharValidos = /^(\d+)$/;
  var ACont = _ACtrl.value.length;
  
  if(ACharValidos.test(ADigito)){
    if (ACont == 5)
      _ACtrl.value = _ACtrl.value + '-';
    else
      return (ACont < 9);
  }
  else
    return getTeclasValidasGerais(ATecla, _AEvent.shiftKey);
}

// Digitação de datas
function OnChangeValidarData(_ACtrl){
  var ACharValidos = /^((0?[1-9]|[12]\d)\/(0?[1-9]|1[0-2])|30\/(0?[13-9]|1[0-2])|31\/(0?[13578]|1[02]))\/(19|20)?\d{2}$/;
  
  if ((ACharValidos.test(_ACtrl.value)) == false)
    _ACtrl.value = '';
}

function OnKeyPressValidarData(_ACtrl, _AEvent){
  var ATecla = (_AEvent.keyCode)?(_AEvent.keyCode):(_AEvent.which);
  var ADigito = String.fromCharCode(ATecla);
  var ACharValidos = /^(\d+)$/;
  var ACont = _ACtrl.value.length;
  
  if(ACharValidos.test(ADigito)){
    if ((ACont == 2) || (ACont == 5))
      _ACtrl.value = _ACtrl.value + '/';
    else
      return (ACont < 10);
  }
  else
    return getTeclasValidasGerais(ATecla, _AEvent.shiftKey);
}

// Digitação de horários
function OnChangeValidarHorario(_ACtrl){
  var ACharValidos =  /^([0-1]\d|2[0-3]):[0-5]\d$/;
  
  if ((ACharValidos.test(_ACtrl.value)) == false)
    _ACtrl.value = '';
}

function OnKeyPressValidarHorario(_ACtrl, _AEvent){
  var ATecla = (_AEvent.keyCode)?(_AEvent.keyCode):(_AEvent.which);
  var ADigito = String.fromCharCode(ATecla);
  var ACharValidos = /^(\d+)$/;
  var ACont = _ACtrl.value.length;
  
  if(ACharValidos.test(ADigito)){
    if (ACont == 2)
      _ACtrl.value = _ACtrl.value + ':';
    else
      return (ACont < 5);
  }
  else
    return getTeclasValidasGerais(ATecla, _AEvent.shiftKey);
}

// Digitação de inscrição federal: CPF ou CNPJ
function OnChangeValidarInscrFederal(_ACtrl, _ATipoInscr){
  if (_ATipoInscr == 'F'){
    var ACharValidos = /^\d{3}\.\d{3}\.\d{3}\-\d{2}$/;
  
    if(ACharValidos.test(_ACtrl.value) == false){
      _ACtrl.value = '';
      
      return false
    }
  
    setValidarCPF(_ACtrl);
  }
  else{
    var ACharValidos = /^\d{2}\.\d{3}\.\d{3}\/\d{4}\-\d{2}$/;
    
    if(ACharValidos.test(_ACtrl.value) == false){
      _ACtrl.value = '';
    
      return false;
    }
    
    setValidarCNPJ(_ACtrl);
  }
}

function setValidarCPF(_ACtrl){
  var i;
  var ADiferente;
  var dv = _ACtrl.value.substr(12,2);
  var d1 = 0;
  var c = _ACtrl.value.substr(0,3) +
          _ACtrl.value.substr(4,3) +
          _ACtrl.value.substr(8,3);
          
  for (i = 0; i < 9; i++){
    d1 += c.charAt(i)*(10-i);
  }

  if (d1 == 0){
    _ACtrl.value = '';

    return false;
  }

  d1 = 11 - (d1 % 11);

  if (d1 > 9) d1 = 0;

  if (dv.charAt(0) != d1){
    _ACtrl.value = '';

    return false;
  }

  d1 *= 2;

  for (i = 0; i < 9; i++){
    d1 += c.charAt(i)*(11-i);
  }

  d1 = 11 - (d1 % 11);

  if (d1 > 9) d1 = 0;

  if (dv.charAt(1) != d1){
    _ACtrl.value = '';

    return false;
  }

  for (i = 1; i < 9; i++){
    if (c.charAt(i - 1) != c.charAt(i))
      ADiferente = true
    else
      ADiferente = false;

    if (ADiferente == true)
      break;
  }

  if (ADiferente == false){
    _ACtrl.value = '';

    return false;
  }
  else
    return true;
}

function setValidarCNPJ(_ACtrl){
  var i;
  var dv = _ACtrl.value.substr(16,2);
  var d1 = 0;
  var c = _ACtrl.value.substr(0,2) +
          _ACtrl.value.substr(3,3) +
          _ACtrl.value.substr(7,3) +
          _ACtrl.value.substr(11,4);

  for (i = 0; i < 12; i++){
    d1 += c.charAt(11-i)*(2+(i % 8));
  }

  if (d1 == 0){
    _ACtrl.value = '';

    return false;
  }

  d1 = 11 - (d1 % 11);

  if (d1 > 9)
    d1 = 0;

  if (dv.charAt(0) != d1){
    _ACtrl.value = '';

    return false;
  }

  d1 *= 2;

  for (i = 0; i < 12; i++)
    d1 += c.charAt(11-i)*(2+((i+1) % 8));

  d1 = 11 - (d1 % 11);

  if (d1 > 9)
    d1 = 0;

  if (dv.charAt(1) != d1){
    _ACtrl.value = '';

    return false;
  }

  return true;
}

function OnKeyPressValidarInscrFederal(_ACtrl, _AEvent, _ATipoInscr){
  var ATecla = (_AEvent.keyCode)?(_AEvent.keyCode):(_AEvent.which);
  var ADigito = String.fromCharCode(ATecla);
  var ACharValidos = /^(\d+)$/;
  var ACont = _ACtrl.value.length;

  if (_ATipoInscr == 'F'){
    if((ACharValidos.test(ADigito)) && (ACont < 14)){
      if ((ACont == 3) || (ACont == 7))
        _ACtrl.value = _ACtrl.value + '.'
      else if (ACont == 11)
        _ACtrl.value = _ACtrl.value + '-';
    }
    else
      return getTeclasValidasGerais(ATecla, _AEvent.shiftKey);
  }
  else{
    if((ACharValidos.test(ADigito)) && (ACont < 18)){
      if ((ACont == 2) || (ACont == 6))
        _ACtrl.value = _ACtrl.value + '.'
      else if (ACont == 10)
        _ACtrl.value = _ACtrl.value + '/'
      else if (ACont == 15)
        _ACtrl.value = _ACtrl.value + '-';
    }
    else
      return getTeclasValidasGerais(ATecla, _AEvent.shiftKey);
  }
}

// Digitação de valores de dinheiro (moeda)
function OnChangeValidarMoeda(_ACtrl){
  var ACharValidos = /^\d{1,3}(\.\d{3})*\,\d{2}$/;
  var EncontrouVirgula = false;
  var PosicaoVirgula = '';
  var NovoValor = '';
  var cont = 0;
  var i;

  // Formatação das casas decimais
  for (i = 0; i <= _ACtrl.value.length; i++){
    EncontrouVirgula = _ACtrl.value.charAt(i) == ',';

    if (EncontrouVirgula)
      break;
  }

  if (EncontrouVirgula == false)
    _ACtrl.value += ',00';

  // Formatação dos "pontos" de milhar
  NovoValor = _ACtrl.value;

  PosicaoVirgula = NovoValor.indexOf(',');

  for (i = PosicaoVirgula - 1; i > 0; i--){
    cont += 1;

    if ((cont == 3) &&
        (NovoValor.charAt(i-1) != '.')){
      NovoValor = NovoValor.substring(0, i) +
                  '.' +
                  NovoValor.substring(i, NovoValor.length);

      cont = 0;
    }
  }

  _ACtrl.value = NovoValor;

  if(ACharValidos.test(_ACtrl.value) == false)
    _ACtrl.value = '';
}

function OnKeyPressValidarMoeda(_ACtrl, _AEvent){
  var ATecla = (_AEvent.keyCode)?(_AEvent.keyCode):(_AEvent.which);
  var ADigito = String.fromCharCode(ATecla);
  var ACharValidos = /^\d+|\.|\,$/;
  var ACont = _ACtrl.value.length;

  if (ACharValidos.test(ADigito)){
    if ((ADigito == ',') || (ADigito == '.')) {
      if (ACont == 0)
        return false
      else if ((_ACtrl.value.charAt(ACont - 1) == '.') ||
               (_ACtrl.value.charAt(ACont - 1) == ','))
        return false;

      for (var i = 0; i <= ACont; i++){
        if (_ACtrl.value.charAt(i) == ',')
          return false;
      }
    }
  }
  else
    return getTeclasValidasGerais(ATecla, _AEvent.shiftKey);
}

// Digitação de percentuais (%)
function OnChangeValidarPercentual(_ACtrl){
  var ACharValidos = /^\d{1,3}(\,\d{1,2})$/;
  var EncontrouVirgula = false;
  var i;
  
  for (i = 0; i <= _ACtrl.value.length; i++){
    EncontrouVirgula = _ACtrl.value.charAt(i) == ',';
  
    if (EncontrouVirgula)
      break;
  }
  
  if (EncontrouVirgula == false)
    _ACtrl.value += ',00';
  
  var APerc = parseFloat(_ACtrl.value);
  
  if (((ACharValidos.test(_ACtrl.value)) == false) ||
      (APerc > 100))
    _ACtrl.value = '';
}

function OnKeyPressValidarPercentual(_ACtrl, _AEvent){
  var ATecla = (_AEvent.keyCode)?(_AEvent.keyCode):(_AEvent.which);
  var ADigito = String.fromCharCode(ATecla);
  var ACharValidos = /^\d+|\,$/;
  var ACont = _ACtrl.value.length;
  
  if (ACharValidos.test(ADigito)){
    if (ADigito == ','){
      if (ACont == 0)
        return false;
      for (var i = 0; i <= ACont; i++){
        if (_ACtrl.value.charAt(i) == ',')
          return false;
      }
    }
  }
  else{
    if (ADigito == '.')
      return false
    else
      return getTeclasValidasGerais(ATecla, _AEvent.shiftKey);
  }
}

// Digitação de pesos (Kg)
function OnChangeValidarPeso(_ACtrl){
  var ACharValidos = /^\d{3}(\,\d{1,3})$/;
  var EncontrouVirgula = false;
  var i;

  for (i = 0; i <= _ACtrl.value.length; i++){
    EncontrouVirgula = _ACtrl.value.charAt(i) == ',';

    if (EncontrouVirgula)
      break;
  }

  if (EncontrouVirgula == false)
    _ACtrl.value += ',000';

  if (ACharValidos.test(_ACtrl.value))
    _ACtrl.value = '';
}

function OnKeyPressValidarPeso(_ACtrl, _AEvent){
  var ATecla = (_AEvent.keyCode)?(_AEvent.keyCode):(_AEvent.which);
  var ADigito = String.fromCharCode(ATecla);
  var ACharValidos = /^\d+|\,$/;
  var ACont = _ACtrl.value.length;

  if (ACharValidos.test(ADigito)){
    if (ADigito == ','){
      if (ACont == 0)
        return false;

      for (var i = 0; i <= ACont; i++){
        if (_ACtrl.value.charAt(i) == ',')
          return false;
      }
    }
  }
  else{
    if (ADigito == '.')
      return false
    else
      return getTeclasValidasGerais(ATecla, _AEvent.shiftKey);
  }
}

// Digitação de número de telefone
function OnChangeValidarTelefone(_ACtrl){
  var ACharValidos = /^\d{4}\-\d{4}$/;

  if ((ACharValidos.test(_ACtrl.value)) == false)
    _ACtrl.value = '';
}

function OnKeyPressValidarTelefone(_ACtrl, _AEvent){
  var ATecla = (_AEvent.keyCode)?(_AEvent.keyCode):(_AEvent.which);
  var ADigito = String.fromCharCode(ATecla);
  var ACharValidos = /^(\d+)$/;
  var ACont = _ACtrl.value.length;
  
  if(ACharValidos.test(ADigito)){
    if (ACont == 4)
      _ACtrl.value = _ACtrl.value + '-';
    else
      return (ACont < 9);
  }
  else
    return getTeclasValidasGerais(ATecla, _AEvent.shiftKey);
}

// Valida uma quantidade limitada de texto
function OnKeyPressValidarQtdDigitos(_ACtrlTexto, _AEvent, _AIDDivResto, _AQtdMaxima){
  var ATecla = (_AEvent.keyCode)?(_AEvent.keyCode):(_AEvent.which);
  var ADigito = String.fromCharCode(ATecla);
  var ACont = _ACtrlTexto.value.length + 1;
  var ADivResto = document.getElementById(_AIDDivResto);

  if (ACont > _AQtdMaxima){
    if (ADigito != '.')
      return getTeclasValidasGerais(ATecla, _AEvent.shiftKey);
    else
      return false;
  }
  else{
    ADivResto.innerHTML = (_AQtdMaxima - ACont);

    return true;
  }
}

function OnChangeValidarEmail(_ACtrl){
  var ACharValidos = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;

  if ((ACharValidos.test(_ACtrl.value)) == false)
    _ACtrl.value = '';
}
