var sele;

function maskNumberS ()
{
    sele = true;
}

function maskNumber(obj, casas)
{
    var valor;
    var acao = 0;
    valor = obj.value;
    if (sele == true)
        valor = '';

    if ((((event.keyCode >= 96) && (event.keyCode <= 105)) || ((event.keyCode >= 48) && (event.keyCode <= 57))) && (valor.length<19))  {
        if (event.keyCode < 96)
           valor = valor + String(event.keyCode - 48);  else
           valor = valor + String(event.keyCode - 96);

        obj.value = formata(valor, casas);
        acao = 1;
    }


    if (event.keyCode == 8)   {
        valor = valor.substr(0, valor.length - 1);
        obj.value = formata(valor, casas);
        acao = 2;
    }
    if ((event.keyCode == 9) || (event.keyCode == 46))   acao = 3;

    if (((event.keyCode==109) || (event.keyCode==189)) && (acao==0))  {
       if (valor.indexOf('-') < 0)
         valor = '-'+valor;  else
         valor = valor.substring(1,valor.length)
       obj.value = formata(valor, casas);
       acao = 1;
    }

    if (acao < 3)     event.keyCode = 35;
    sele = false;
}

function insere(original, novo, onde)
{
  return original.substring(0, onde) + novo + original.substring(onde, original.length);
}

function apaga(a, x)
{
  if (x==0)
    return a.substring(1); else
    return a.substr(0, x) + a.substring(x+1);
}

function formata(texto, casas)
{
  var menos=0;
  texto = String(texto);

  if (texto.indexOf('-') >= 0)  {
    texto = texto.substring(1,texto.length);
    menos = 1;
  }

  while (texto.indexOf('.') >= 0)
   texto = apaga(texto, texto.indexOf('.'));
  while (texto.indexOf(',') >= 0)
   texto = apaga(texto, texto.indexOf(','));

  while (texto.charAt(0) == '0')
    texto = texto.substring(1,texto.length);

  while (texto.length <  3) texto = '0'+texto;

  texto = insere(texto, '.', texto.length-2);
  while (texto.indexOf('.') > 3)
    texto = insere(texto, '.', texto.indexOf('.')-3);
  texto = texto.substring(0, texto.length-3) + ',' + texto.substring(texto.length-2, texto.length);

  if (menos>0)
    texto = '-'+texto;

  return(texto);
}

/*******************************************************************************************************/
function moeda(campo, e)   
{   
   var SeparadorDecimal = ","  
   var SeparadorMilesimo = "."  
   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.keyCode;   
       
  
  
     
   if (whichCode == 13) return true;   
   key = String.fromCharCode(whichCode); // Valor para o código da Chave   
     
   if (strCheck.indexOf(key) == -1) return true; // Chave inválida   
   len = campo.value.length;   
   for(i = 0; i < len; i++)   
  
       if ((campo.value.charAt(i) != '0') && (campo.value.charAt(i) != SeparadorDecimal)) break;   
   aux = '';   
   for(; i < len; i++)   
  
       if (strCheck.indexOf(campo.value.charAt(i))!=-1) aux += campo.value.charAt(i);   
   aux += key;   
   len = aux.length;   
  
   if (len == 0) campo.value = '';   
   if (len == 1) campo.value = '0'+ SeparadorDecimal + '0' + aux;   
   if (len == 2) campo.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++;   
       }   
       campo.value = '';   
       len2 = aux2.length;   
       for (i = len2 - 1; i >= 0; i--)   
       campo.value += aux2.charAt(i);   
       campo.value += SeparadorDecimal + aux.substr(len - 2, len);   
}   
   return false;   
  
}  
/***********************************************************************************************/
documentall = document.all;   
/*  
* função para formatação de valores monetários retirada de  
* [url]http://jonasgalvez.com/br/blog/2003-08/egocentrismo[/url]  
*/  
function formatamoney(c) {   
    var t = this; if(c == undefined) c = 2;         
    var p, d = (t=t.split("."))[1].substr(0, c);   
    for(p = (t=t[0]).length; (p-=3) >= 1;) {   
           t = t.substr(0,p) + "." + t.substr(p);   
    }   
    return t+","+d+Array(c+1-d.length).join(0);   
}   
  
String.prototype.formatCurrency=formatamoney   
  
function demaskvalue(valor, currency){   
/*  
* Se currency é false, retorna o valor sem apenas com os números. Se é true, os dois últimos caracteres são considerados as   
* casas decimais  
*/  
var val2 = '';   
var strCheck = '0123456789';   
var len = valor.length;   
   if (len== 0){   
      return 0.00;   
   }   
  
   if (currency ==true){      
      /* Elimina os zeros à esquerda   
      * a variável  <i> passa a ser a localização do primeiro caractere após os zeros e   
      * val2 contém os caracteres (descontando os zeros à esquerda)  
      */  
         
      for(var i = 0; i < len; i++)   
         if ((valor.charAt(i) != '0') && (valor.charAt(i) != ',')) break;   
         
      for(; i < len; i++){   
         if (strCheck.indexOf(valor.charAt(i))!=-1) val2+= valor.charAt(i);   
      }   
  
      if(val2.length==0) return "0.00";   
      if (val2.length==1)return "0.0" + val2;   
      if (val2.length==2)return "0." + val2;   
         
      var parte1 = val2.substring(0,val2.length-2);   
      var parte2 = val2.substring(val2.length-2);   
      var returnvalue = parte1 + "." + parte2;   
      return returnvalue;   
         
   }   
   else{   
         /* currency é false: retornamos os valores COM os zeros à esquerda,   
         * sem considerar os últimos 2 algarismos como casas decimais   
         */  
         val3 ="";   
         for(var k=0; k < len; k++){   
            if (strCheck.indexOf(valor.charAt(k))!=-1) val3+= valor.charAt(k);   
         }            
   return val3;   
   }   
}   
  
function reais(obj,event){   
  
var whichCode = (window.Event) ? event.which : event.keyCode;   
/*  
Executa a formatação após o backspace nos navegadores !document.all  
*/  
if (whichCode == 8 && !documentall) {      
/*  
Previne a ação padrão nos navegadores  
*/  
   if (event.preventDefault){ //standart browsers   
         event.preventDefault();   
      }else{ // internet explorer   
         event.returnValue = false;   
   }   
   var valor = obj.value;   
   var x = valor.substring(0,valor.length-1);   
   obj.value= demaskvalue(x,true).formatCurrency();   
   return false;   
}   
/*  
Executa o Formata Reais e faz o format currency novamente após o backspace  
*/  
FormataReais(obj,'.',',',event);   
} // end reais   
  
  
function backspace(obj,event){   
/*  
Essa função basicamente altera o  backspace nos input com máscara reais para os navegadores IE e opera.  
O IE não detecta o keycode 8 no evento keypress, por isso, tratamos no keydown.  
Como o opera suporta o infame document.all, tratamos dele na mesma parte do código.  
*/  
  
var whichCode = (window.Event) ? event.which : event.keyCode;   
if (whichCode == 8 && documentall) {      
   var valor = obj.value;   
   var x = valor.substring(0,valor.length-1);   
   var y = demaskvalue(x,true).formatCurrency();   
  
   obj.value =""; //necessário para o opera   
   obj.value += y;   
      
   if (event.preventDefault){ //standart browsers   
         event.preventDefault();   
      }else{ // internet explorer   
         event.returnValue = false;   
   }   
   return false;   
  
   }// end if         
}// end backspace   
  
function FormataReais(fld, milSep, decSep, 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.keyCode;   
  
//if (whichCode == 8 ) return true; //backspace - estamos tratando disso em outra função no keydown   
if (whichCode == 0 ) return true;   
if (whichCode == 9 ) return true; //tecla tab   
if (whichCode == 13) return true; //tecla enter   
if (whichCode == 16) return true; //shift internet explorer   
if (whichCode == 17) return true; //control no internet explorer   
if (whichCode == 27 ) return true; //tecla esc   
if (whichCode == 34 ) return true; //tecla end   
if (whichCode == 35 ) return true;//tecla end   
if (whichCode == 36 ) return true; //tecla home   
  
/*  
O trecho abaixo previne a ação padrão nos navegadores. Não estamos inserindo o caractere normalmente, mas via script  
*/  
  
if (e.preventDefault){ //standart browsers   
      e.preventDefault()   
   }else{ // internet explorer   
      e.returnValue = false  
}   
  
var key = String.fromCharCode(whichCode);  // Valor para o código da Chave   
if (strCheck.indexOf(key) == -1) return false;  // Chave inválida   
  
/*  
Concatenamos ao value o keycode de key, se esse for um número  
*/  
fld.value += key;   
  
var len = fld.value.length;   
var bodeaux = demaskvalue(fld.value,true).formatCurrency();   
fld.value=bodeaux;   
  
/*  
Essa parte da função tão somente move o cursor para o final no opera. Atualmente não existe como movê-lo no konqueror.  
*/  
  if (fld.createTextRange) {   
    var range = fld.createTextRange();   
    range.collapse(false);   
    range.select();   
  }   
  else if (fld.setSelectionRange) {   
    fld.focus();   
    var length = fld.value.length;   
    fld.setSelectionRange(length, length);   
  }   
  return false;   
  
}   
 

