// JavaScript Document

String.prototype.formatCurrency = aplicaMascaraDecimal

//Formata mascara num?rica. A mascara deve ser passsada no utilizando # para numeros.
//Ex.: ###.###.###-## (CPF)
function formataMascaraNumerica(obj, mascara, evt){

	var str = removeMascaraNumerica(obj.value);
	var strFormatada = "";
	var j = 0;

	for(i = 0; i < mascara.length && j < str.length; i++){
		if(mascara.charAt(i) == '#'){
			strFormatada = strFormatada + str.charAt(j);
			j++;
		}else{
			strFormatada = strFormatada + mascara.charAt(i); 
		}	
	}
	obj.value = strFormatada;
}

function aplicaMascaraDecimal(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);

} // formatamoney()

function removeMascaraDecimal(valor, currency){

	var val2 = '';
	var strCheck = '0123456789';
	var len = valor.length;

	if (len== 0){
		return 0.00;
	}

	if (currency ==true){	

		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{
		val3 ="";

		for(var k=0; k < len; k++){
			if (strCheck.indexOf(valor.charAt(k))!=-1) val3+= valor.charAt(k);
		}			

		return val3;

	} // if-else

} // removeMascaraDecimal()

function formataMascaraDecimalComLimiteTamanho(obj,event, tamanhoMaximo){

	var whichCode = (window.Event) ? event.which : event.keyCode;
	var valor = obj.value;

	if(valor.length > 7 && whichCode != 8) {
		var x = valor.substring(0,8);
		obj.value= removeMascaraDecimal(x,true).formatCurrency();
		return false;
	} else if (whichCode == 8 && !document.all) {	

		if (event.preventDefault){ //standard browsers
				event.preventDefault();
			}else{ // internet explorer
				event.returnValue = false;
		}

		var x = valor.substring(0,valor.length-1);
		obj.value= removeMascaraDecimal(x,true).formatCurrency();
		return false;
	}

	formataReais(obj,'','.',event);

} // reais()

function formataMascaraDecimal(obj,event){

	var whichCode = (window.Event) ? event.which : event.keyCode;

	if (whichCode == 8 && !document.all) {	

		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= removeMascaraDecimal(x,true).formatCurrency();
		return false;
	}

	formataReais(obj,'','.',event);

} // reais()


function backspace(obj,event){

	var whichCode = (window.Event) ? event.which : event.keyCode;

	if (whichCode == 8 && document.all) {	
		var valor = obj.value;
		var x = valor.substring(0,valor.length-1);
		var y = removeMascaraDecimal(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		

} // 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 = removeMascaraDecimal(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;

} // formataReais()

//Formata mascara genÃ©rica - Fun??o em ajuste.
//O sÃ­mbolo § na mÃ¡scara indica que o valor deve ser 0-9 e A-H
function formataMascara(obj, mascara, evt){
	var caracteresAlfabeto = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	var caracteresNumericos = "0123456789";

	var str = removeMascaraAlfaNumerica(obj.value);
	obj.value = "";
	var j = 0;

	for(var i = 0; i < mascara.length && j < str.length; i++){
		if(mascara.charAt(i) == '9'){
			var num = str.charAt(j);
			if(caracteresNumericos.indexOf(num) > -1){
				obj.value = obj.value + str.charAt(j);
			}
			j++;
		}else if(mascara.charAt(i) == 'A'){
			var letraUp = str.charAt(j);

			if(caracteresAlfabeto.indexOf(letraUp.toUpperCase()) > -1){
				obj.value = obj.value + letraUp.toUpperCase();
			}
			j++;
		}else if(mascara.charAt(i) == 'a'){
			var letraDown = str.charAt(j); 	

			if(caracteresAlfabeto.indexOf(letraDown.toUpperCase()) > -1){
				obj.value = obj.value + letraDown.toLowerCase();
			}
			j++;
		}else if(mascara.charAt(i) == '§'){//O sÃ­mbolo § na mÃ¡scara indica que o valor deve ser 0-9 e A-H
			var letraUp = str.charAt(j);
			// O indice 7 do array caracteresAlfabeto Ã© a letra H
			if(caracteresAlfabeto.indexOf(letraUp.toUpperCase()) > -1 && caracteresAlfabeto.indexOf(letraUp.toUpperCase()) < 8){
				obj.value = obj.value + letraUp.toUpperCase();
			}else if(caracteresNumericos.indexOf(str.charAt(j)) > -1){
				obj.value = obj.value + str.charAt(j);
			}
			j++;
		}else{
			obj.value = obj.value + mascara.charAt(i);
		}	
	}

	//obj.value = obj.value.substring(1);
}

//Remove mascara alfa-num?rica
function removeMascaraAlfaNumerica(valor) {
	var caracteresAlfabeto = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	var caracteresNumericos = "0123456789";
	var saida = "";

	for (var i=0; i<valor.length; i++) {
		var caractere = valor.charAt(i);
		if(caracteresAlfabeto.indexOf(caractere.toUpperCase()) > -1 || caracteresNumericos.indexOf(caractere) > -1){
			saida = saida + caractere;
		}
	}

	return saida;
}

//Remove mascara num?rica
function removeMascaraNumerica(valor) {
	var saida = "";

	for (var i=0; i<valor.length; i++) {
		// IncluÃ­do tratamento do caracter ' ' (espaÃ§o), pois isNaN nÃ£o trata o caracter quando executado no Firefox
		saida += (  (isNaN(valor.charAt(i)))  || (valor.charAt(i) == ' ')  )? "": valor.charAt(i);
	}

	return saida;
}

// FORMATA O Radical do CNPJ
function formataRadicalCnpj(obj, evt){
	formataMascaraNumerica(obj, "##.###.###", evt);
}


// FORMATA O CDA XX.§XXX.XXXX-X
function formataCda(obj, evt){//O sÃ­mbolo § na mÃ¡scara indica que o valor deve ser 0-9 e A-H
	formataMascara(obj, "99.§999.9999-9", evt);
}

// FORMATA O CODIGO DA EMPRESA §XXX
function formataCodigoEmpresa(obj, evt){//O sÃ­mbolo § na mÃ¡scara indica que o valor deve ser 0-9 e A-H
	formataMascara(obj, "§999", evt);
}

// FORMATA O Org?o emissor
function formataOrgaoEmissor(obj, evt){
	formataMascara(obj, "AAA-AA", evt);
}

// FORMATA A IDENTIDADE ###.###.###
function formataIdentidade(obj, evt){
	formataMascaraNumerica(obj, "###.###.###", evt);
}

// FORMATA O CPF ###-###-###-##
function formataCpf(obj, evt){
	formataMascaraNumerica(obj, "###.###.###-##", evt);
}

// FORMATA O CNPJ ##.###.###/####-##
function formataCnpj(obj, evt){
	formataMascaraNumerica(obj, "##.###.###/####-##", evt);
}

// FORMATA A DATA ##/##/####
function formataData(obj, evt){
	formataMascaraNumerica(obj, "##/##/####", evt);
}

// FORMATA O CEP ##/##/####
function formataCep(obj, evt){
	formataMascaraNumerica(obj, "##.###-###", evt);
}

// FORMATA O Caixa Postal ##.###
function formataCaixaPostal(obj, evt){
	formataMascaraNumerica(obj, "##.###", evt);
}

// FORMATA A InscricaoEstadual ##.###.###/###-##
function formataInscricaoEstadual(obj, evt){
	formataMascaraNumerica(obj, "##.###.###/###-##", evt);
}

// FORMATA Telefones (##)########
function formataTelefone(obj, evt){
	formataMascaraNumerica(obj, "(##)####-####", evt);
}

// FORMATA Safra ####-####
function formataSafra(obj, evt){
	formataMascaraNumerica(obj, "####/####", evt);
}


// FUNCAO QUE PERMITE QUE DIGITE SOMENTE NUMEROS EM UM CAMPO
function filtraNaoNumerico(e){
	if (document.all) // Internet Explorer
		var tecla = event.keyCode;
	else if (document.layers) // Nestcape
		var tecla = e.which;	
	else if (document.getElementById) //FireFox
		var tecla = e.which;

	if (tecla > 47 && tecla < 58) // numeros de 0 a 9
		return true;
	else{		
		if (tecla == 8 || tecla == 46 || tecla == 0) // backspace ou delete ou seta
			return true;
		else
			return false;
	}
}

// FUNCAO QUE PERMITE QUE DIGITE SOMENTE LETRAS EM UM CAMPO
function filtraNaoLetra(e){
	if (document.all) // Internet Explorer
		var tecla = event.keyCode;
	else if (document.layers) // Nestcape
		var tecla = e.which;
	else if (document.getElementById) //FireFox
		var tecla = e.which;

	if (tecla > 47 && tecla < 58) // numeros de 0 a 9
		return false;
	else
		return true;
}

// FUN??O PARA BLOQUEAR A TECLA CTRL DO TECLADO
function filtraTeclaControl(e){
	if (document.all) // Internet Explorer
		var tecla = event.keyCode;
	else if (document.layers) // Nestcape
		var tecla = e.which;
	else if (document.getElementById) //FireFox
		var tecla = e.which;

	if (event.ctrlKey){
	  return false;
	}
}

/* onKeyPress="return somenteNumeros(event, this); */
function somenteNumeros(e, obj){
	var tecla=(window.event)?event.keyCode:e.which;     
	if(tecla == 8) {
	return true;
	}
	if(obj.value.length > 8) {
	return false;
	}

	if((tecla > 47 && tecla < 58)) {
	return true;
	} 
	return false;
}

/*
	Ex de uso: onBlur="formataValorMonetario(this,'0');"
*/
function formataValorMonetario(campooriginal,decimais) {
  var posicaoPontoDecimal;
  var campo = '';
  var resultado = '';
  var pos,sep,dec;

//Retira possiveis separadores de milhar
  var anterior = '';

  for (pos=0; pos < 9; pos ++) {
	//Retira todos os zeros que estavam na frente do numero
	if (campooriginal.value.charAt(pos)=='0' && anterior == '') {
		continue;
	}

	//Atualiza o valor da variavel anterior, nao entrando mais no if acima.
	anterior = campooriginal.value.charAt(pos);    

	//Recupera apenas os numeros digitados, sem os pontos.
	if (campooriginal.value.charAt(pos)!='.')
		campo = campo + campooriginal.value.charAt(pos);
  }     

//Formata valor monetÃ¡rio com decimais
  posicaoPontoDecimal = campo.indexOf(',');
  if (posicaoPontoDecimal != -1) {
	  sep = 0;
	  for (pos=posicaoPontoDecimal-1;pos >= 0;pos--) {
		sep ++;
		if (sep > 3) {
		   resultado = '.' + resultado;
		   sep = 1;
		}

		resultado = campo.charAt(pos) + resultado;   
	  }

	  // Trata parte decimal
	  if (parseInt(decimais) > 0 ) {
		 resultado = resultado + ',';

		 pos=posicaoPontoDecimal+1;
		 for (dec = 1;dec <= parseInt(decimais); dec++) {
		   if (pos < campo.length) {
			  resultado = resultado + campo.charAt(pos);
			  pos++;
		   } else {
			  resultado = resultado + '0';   
		   }
		 } // trata decimais
	  }
   // Trata valor monetÃ¡rio sem decimais
  } else {
	  sep = 0;
	  for (pos=campo.length-1;pos >= 0;pos--) {
		sep ++;
		if (sep > 3) {
		   resultado = '.' + resultado;
		   sep = 1;
		}
		resultado = campo.charAt(pos) + resultado;   
	  }
	  // Trata parte decimal
	  if (parseInt(decimais) > 0 ) {
		 resultado = resultado + ',';
		 for (dec = 1;dec <= parseInt(decimais); dec++) {
			  resultado = resultado + '0';   
		 }
	  } // trata decimais
   }
   campooriginal.value = resultado;
}