// Funcao focaNumero(campo)
// Prepara o conteúdo de um campo de valor para edição, removendo os pontos de separação de milhar
// parametro -> campo a preparar
// mazzini@ditech.com.br
function focaNumero(campo) {
  var num = campo.value;

  if (num != "") {
    num = num.replace(/[\.]/g, "");
    campo.value = num;
  }

  campo.select();
}

function toNumber(valor) {
  // Alterado por Edelmar@ditech em 11/03/2005
  return formataNumeroUS(valor);

  valor = valor.replace(/\./g,"");
  valor = valor.replace(",",".");
  return valor * 1;
}

// Funcao mascaraDinheiro()
// Faz a separação de milhar e decimal em campos de dinheiro
// Parâmetros:
//   campo - campo a mascarar
//   digit - número de dígitos decimais no número de saída
// mazzini@ditech.com.br
function mascaraDinheiro(campo, digit) {
  if (campo.value.slice(0, 1) == '=') {
    if (! analisaExpressao(campo)) {
      campo.focus();
      return campo.value;
    } else {
      campo.maxLength = campo.TamanhoOriginal;
    }
    campo.TamanhoOriginal = 0;
  }

  var num = campo.value;

  if (num == "") { return false; }
  if (isNaN(digit)) { digit = "2"; }

  num = formataNumeroUS(num);

  num = num.replace(/[\.]/g, ",");

  var inicio = getFront(num, ',') * 1;
  if (num != inicio) {
    var fim = getEnd(num, ',');
    fim = fim + '';
  } else var fim = '';

  if (isNaN(inicio)) inicio = '0';
  if (isNaN(fim)) fim = '';
  if (digit > 0) while (fim.length < digit) fim = fim + '0';
  if (fim.length > digit) fim = fim.substring(0,digit);

  // Inclui pontos separadores de milhar
  for (i = inicio.toString().length - 3; i > 0; i = i - 3) {
    inicio = inicio.toString().substr(0, i) + '.' + inicio.toString().substr(i);
  }

  if (inicio.toString().substr(0, 2) == "-.") {
    inicio = "-" + inicio.toString().substr(2);
  }

  if (digit > 0) {
    campo.value = inicio.toString() + ',' + fim;
  } else {
    campo.value = inicio.toString();
  }
	return;
}

function validaTecla(campo, event, sCharVal) {
  var BACKSPACE = 8;
  var VIRGULA = 44;
  var PONTO = 46;
  var MENOS = 45;
  var key;
  var tecla;

  CheckTAB=true;
  if (navigator.appName.indexOf("Netscape") != -1)
    tecla = event.which;
  else
    tecla = event.keyCode;
  key = String.fromCharCode(tecla);

  if (tecla == 13) {
    campo.blur();
    if (campo.form.name) {
      window.setTimeout("document." + campo.form.name + ".submit()", 500);
    }
    return false;
  }

  // Obtém o tamanho do texto selecionado
  if (document.getSelection) {
    iTamSel = campo.selectionEnd - campo.selectionStart;
  } else if (document.selection) {
    txt = document.selection.createRange().text;
    iTamSel = txt.length;
  }

  if ((key == '=') && (iTamSel == campo.value.length))
    return true;

  if (sCharVal == undefined) {
    sCharVal = '0-9,\\.';
  }

  if (campo.value.slice(0, 1) == '=') {

    // Tratamento de expressões
    if ((campo.TamanhoOriginal == null) || (campo.TamanhoOriginal == 0)) {
      campo.TamanhoOriginal = campo.maxLength;
      campo.maxLength = 200;
    }

    iPos = key.search(/[^0-9,\.\t\r\b\+\-\*\/\%\(\)\000]/);
    return (iPos < 0);

  } else {

    // Tratamento de números puros
    sMascChar = '/[^' + sCharVal + '\\t\\r\\b\\000]/';

    if (tecla == 0)
      return true;

    if ((tecla == VIRGULA) || (tecla == PONTO)) {
      return ((campo.value.indexOf(',') == -1) && (campo.value.indexOf('.') == -1) && (campo.value.length > 0));
    }

    if (tecla == MENOS)
      return ((campo.value.length == 0) || (iTamSel == campo.value.length));

    iPos = eval('key.search(' + sMascChar + ')');
    return (iPos < 0);

  }
}

// Funcao formataNumeroUS()
// Formata o número no padrão americano (para cálculo)
// Parâmetros:
//   num - número a ser formatado
// edelmar@ditech.com.br
function formataNumeroUS(num) {
  if (!num) {
    return '0';
  }
  // Tem virgula, está em formato brasileiro, precisa remover os pontos
  if (num.toString().indexOf(',') != -1) {
    num = num.toString().replace(/\$|\./g,'');
  }
  // e colocar ponto no lugar da virgula
  return num.toString().replace(/\$|\,/g,'.');
}

function getFront(mainStr,searchStr){
  foundOffset = mainStr.indexOf(searchStr)
  if (foundOffset == -1) {
    return mainStr
  }
  return mainStr.substring(0,foundOffset)
}
// extract back end of string after searchString
function getEnd(mainStr,searchStr) {
  foundOffset = mainStr.indexOf(searchStr)
  if (foundOffset == -1) {
    return mainStr
  }
  return mainStr.substring(foundOffset+searchStr.length,mainStr.length)
}

function verifyRange(elField, minValue, maxValue) {
  // Modified by mazzini@ditech.com.br
  var valor = elField.value;

  if(valor == ""){
    return false;
  }

  valor = toNumber(valor);
  if ((valor < minValue || valor > maxValue)) {

    alert("Este valor está fora da faixa para este campo, os valores possíveis devem estar entre " + minValue + " e " + maxValue + ".");
    elField.value = "";
    elField.focus();

    return false;
  } else {
    return true;
  }
}

function mascara_valor(num) {
  num = num.toString().replace(/\$|\./g,'');
  num = num.toString().replace(/\$|\,/g,'.');

  if(isNaN(num))
    num = "0";

  sign = (num == (num = Math.abs(num)));
  num = Math.floor(num*100+0.50000000001);
  cents = num%100;
  num = Math.floor(num/100).toString();
  if(cents<10)
    cents = "0" + cents;

  for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
    num = num.substring(0,num.length-(4*i+3))+'.'+ num.substring(num.length-(4*i+3));

  return (((sign)?'':'-') + num + ',' + cents);
}

