﻿/*
Calcula preco do produto (quantidade X valor unitário)
*/
function CalculaTotal(idQ, idV, idT) {
  var quant = document.getElementById(idQ).value.replace(',', '.');
  var valor = document.getElementById(idV).value.replace(',', '.');
  document.getElementById(idT).value = quant * valor;
}

/*
Funcao: somenteNumero
Descrição: Permite digitar somente números
Parametro:
   objTextBox : Objeto (TextBox)
   e : Evento
OBS: Para evitar que o usuario possa copiar e colar letras no campo,
adicionar ao textbox o evento onpaste="return false;"
exemplo: <input type="text" id="txtNumero" onkeypress="return somenteNumeros(this, event)" onpaste="return false;" />
*/
function somenteNumero(objTextBox, e) {
  var tecla = (window.event) ? event.keyCode : e.which;
  if ((tecla > 47 && tecla < 58)) {
    var valor = objTextBox.value + 0;
    if (valor >= 500) {
      objTextBox.value = 500;
      //return false;
    }
    return true;
  }
  else {
    if (tecla != 8)
      return false;
    else
      return true;
  }
}

/*
Funcao: mascaraMoeda
Descrição: Mascara de preenchimento de moeda
Parametro:
   objTextBox : Objeto (TextBox)
   SeparadorMilesimo : Caracter separador de milésimos
   SeparadorDecimal : Caracter separador de decimais
   e : Evento
OBS: Para evitar que o usuario possa copiar e colar letras no campo,
adicionar ao textbox o evento onpaste="return false;"
exemplo: <input type="text" id="txtMoeda" onkeypress="return mascaraMoeda(this,'.',',',event)" onpaste="return false;" />
*/
function mascaraMoeda(objTextBox, separadorMilesimo, separadorDecimal, e) {
  var sep = 0;
  var key = '';
  var i = j = 0;
  var len = len2 = 0;
  var strCheck = '0123456789';
  var aux = aux2 = '';
  var whichCode = (window.Event) ? (e.which ? e.which : e.keyCode) : e.keyCode;
  if (whichCode == 13 || whichCode == 8) 
    return true;

  var t = new String(objTextBox.value);

  key = String.fromCharCode(whichCode); // Valor para o código da Chave
  if (strCheck.indexOf(key) == -1) return false; // Chave inválida
  len = objTextBox.value.length;
  for (i = 0; i < len; i++)
    if ((objTextBox.value.charAt(i) != '0') && (objTextBox.value.charAt(i) != separadorDecimal)) break;
  aux = '';
  for (; i < len; i++)
    if (strCheck.indexOf(objTextBox.value.charAt(i)) != -1) aux += objTextBox.value.charAt(i);
  aux += key;
  len = aux.length;
  if (len == 0) objTextBox.value = '';
  if (len == 1) objTextBox.value = '0' + separadorDecimal + '0' + aux;
  if (len == 2) objTextBox.value = '0' + separadorDecimal + aux;
  if (len > 2) {
    aux2 = '';
    for (j = 0, i = len - 3; i >= 0; i--) {
      if (j == 3) {
        aux2 += separadorMilesimo;
        j = 0;
      }
      aux2 += aux.charAt(i);
      j++;
    }
    objTextBox.value = '';
    len2 = aux2.length;
    for (i = len2 - 1; i >= 0; i--)
      objTextBox.value += aux2.charAt(i);
    objTextBox.value += separadorDecimal + aux.substr(len - 2, len);
  }
  return false;
}

/*
Funcao: validaCep
Descrição: Valida se o cep é válido
Parametro:
   objTextBox : Objeto (TextBox)
retorno: boolean
exemplo: <input type="text" id="txtCep" onkeypress="return mascaraCep(this, event)" onpaste="return false;" onblur="return validaCep(this)"/>
*/
function validaCep(objTextBox) {

  var regex = /^[0-9]{5}-[0-9]{3}$/;

  if (regex.test(objTextBox.value)) {
    return true;
  }
  else {
    return false;
  }
}

/*
Funcao: mascaraCep
Descrição: Mascara de preenchimento de CEP
Parametro:
   objTextBox : Objeto (TextBox)
   e : Evento
OBS: Para evitar que o usuario possa copiar e colar letras no campo,
adicionar ao textbox o evento onpaste="return false;"
exemplo: <input type="text" id="txtCep" onkeypress="return mascaraCep(this, event)" onpaste="return false;" onblur="return validaCep(this)"/>
*/
function mascaraCep(objTextBox, e) {

  var tecla = (window.event) ? event.keyCode : e.which;

  if (objTextBox.value.length == 9 && tecla != 8)
    return false;

  if ((tecla < 47 || tecla > 58) && (tecla != 8)) {
    return false;
  }

  var vr = new String(objTextBox.value);
  vr = vr.replace("-", "");
  tam = vr.length + 1;
  if (tecla != 8) {
    if (tam == 6)
      objTextBox.value = vr.substr(0, 5) + '-' + vr.substr(5, 5);
  }
}

/*
Funcao: validaEmail
Descrição: Valida se email é válido
Parametro:
   objTextBox : Objeto (TextBox)
retorno: boolean
exemplo: <input type="text" id="txtEmail" onblur="return validaEmail(this)"/>
*/
function validaEmail(objTextBox) {

  var regex = /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;

  if (regex.test(objTextBox.value)) {
    return true;
  }
  else {
    return false;
  }
}

/*
Lê um valor monetário em string e retorna o valor numérico correspondente.
@valorString: String: O valor da moeda em string, no formato brasileiro (pode incluir R$).
@return: Number: O valor correspondente à string informada ou 0 (caso o valor informado não possa ser convertido).
*/
function getMoney(valorString) {
  if (!valorString || valorString.length == 0)
    return 0;
  valorString = valorString.toUpperCase().replace('R$', '').replace(' ', '').replace('.', '').replace(',', '.');
  var valorMonetario = parseFloat(valorString);
  return isNaN(valorMonetario) ? 0 : valorMonetario;
}
/*
Recebe um valor e o formata como moeda brasileira.
@valor: Number: O valor a ser formatado.
@return: String: O valor formatado como moeda brasileira.
*/
function formatarValorMonetario(valor) {
  if (typeof valor == 'undefined')
    return;
  if (isNaN(valor))
    return valor;
  
  valor = valor.toFixed(2);
  var valorString = valor.toString();
  var partes = valorString.split('.');
  var parteInteira = partes[0];
  var parteDecimal = partes.length ? partes[1] : '';
  // Verifica a quantidade de dígitos da parte decimal.
  while(parteDecimal.length < 2) {
    parteDecimal += '0';
  }
  
  return 'R$ ' + parteInteira + ',' + parteDecimal;
}

/*
Mostra uma mensagem.
@mensagem: String: A mensagem a ser exibida.
@tipoMensagem: Number: Opcional. O tipo de mensagem (0 = Informação (padrão), 1 = Sucesso, 2 = Erro).
*/
function mostrarMensagem(mensagem, tipoMensagem) {
  if (!mensagem)
    return;
  alert(mensagem);
}