// [dFilter] - A Numerical Input Mask for JavaScript
// Written By Dwayne Forehand - March 27th, 2003
// Please reuse & redistribute while keeping this notice.

var dFilterStep

function dFilterStrip (dFilterTemp, dFilterMask)
{
    dFilterMask = replace(dFilterMask,'#','');
    for (dFilterStep = 0; dFilterStep < dFilterMask.length++; dFilterStep++)
		{
		    dFilterTemp = replace(dFilterTemp,dFilterMask.substring(dFilterStep,dFilterStep+1),'');
		}
		return dFilterTemp;
}

function dFilterMax (dFilterMask)
{
 		dFilterTemp = dFilterMask;
    for (dFilterStep = 0; dFilterStep < (dFilterMask.length+1); dFilterStep++)
		{
		 		if (dFilterMask.charAt(dFilterStep)!='#')
				{
		        dFilterTemp = replace(dFilterTemp,dFilterMask.charAt(dFilterStep),'');
				}
		}
		return dFilterTemp.length;
}


function fazMascara (codigo, objCampo) {
	var navegador = navigator.appName;
	var verificaNav = navegador.search(/Microsoft/);
	var valorMascara = "";

	var key = String.fromCharCode(codigo);
	var objetoCampo = objCampo;

	var tipoMascara = objCampo.getAttribute("mascara");
	
	switch(tipoMascara){
				
		case "telefoneContato":
		valorMascara = "(##)####-####";
		break;
		
		case "telefone":
		valorMascara = "(##)####-####";
		break;
		
		case "cep":
		valorMascara = "##.###-###";
		break;
		
		case "cnpj":
		valorMascara = "##.###.###/####-##";
		break;
		
		case "cpf":
		valorMascara = "###.###.###-##";
		break;
		
		case "data":
		valorMascara = "##/##/####";
		break;	
		
		case "quantidade":
		valorMascara = "######";
		break;			

		case "buscaDireta":
		valorMascara = "###";
		break;

		case "numero":
		valorMascara = "####################";
		break;
			
		case "numeroNota":
		valorMascara = "########";
		break;
		
		case "hora":
		valorMascara = "##:##:##";
		break;						
		
		case "iesubst":
		valorMascara = "##########";
		break;
		
		case "parcelas":
		valorMascara = "####";
		break;
		
		case "paginacao":
		valorMascara = "###";
		break;

		case "fatura":
		valorMascara = "##########";
		break;
		
		case "numero4":
		valorMascara = "####";
		break;
		
		default: 
		break;	
	}	
	
	if(tipoMascara == "hora") {
		Mascara_Hora(objCampo);
	}
	
	if (tipoMascara == "monetario") {

		ehNumero = -1;
		var ultimaLetra = String.fromCharCode(codigo);
		if (ultimaLetra == "1" ||
		ultimaLetra == "2" ||
		ultimaLetra == "3" ||
		ultimaLetra == "4" ||
		ultimaLetra == "5" ||
		ultimaLetra == "6" ||
		ultimaLetra == "7" ||
		ultimaLetra == "8" ||
		ultimaLetra == "9" ||
		ultimaLetra == "0") {
			ehNumero = ultimaLetra;
		}		
		fazMascaraValor(key, objetoCampo, ehNumero);
		if (ehNumero > -1) {
			return false;
		}
	} else {
		dFilter(codigo, objetoCampo, valorMascara);
		return false;
	}
}

function fazMascaraValor(key, objCampo, ehNumero) {

	var objetoCampo = objCampo;
	var valor = objetoCampo.value;
	var novoValor = retornaMascaraValor(valor, ehNumero);
	objetoCampo.value = novoValor;
}
/*
function retornaMascaraValor(valor, codigo) {
	var tmpValor = "";
	for(var i = 0; i <= valor.length; i++) {
		letra = valor.charAt(i);
		if (letra == "1" ||
		letra == "2" ||
		letra == "3" ||
		letra == "4" ||
		letra == "5" ||
		letra == "6" ||
		letra == "7" ||
		letra == "8" ||
		letra == "9" ||
		letra == "0") {
			tmpValor = tmpValor.concat(letra);
		}
	}
	valor = tmpValor;
		
	limite = 2;
	if (ehNumero > -1) {
		limite = 1;
	}
	var contador = 0;
	var passo = 1;
	var novoValor = "";
	for(var j = valor.length - 1; j >= 0; j--) {
		contador++;
		if (passo == 1) {
			if (contador == limite) {
				letra = "," + valor.charAt(j);
				passo++;
				contador = 0;
			} else if (contador < 3) {
				letra = valor.charAt(j);
			}
		} else if (passo > 1) {
			if (contador == 3) {
				if (j > 0) {
					letra = "." + valor.charAt(j);
				} else {
					letra = valor.charAt(j);
				}
				contador = 0;
			} else {
				letra = valor.charAt(j);
			}
		}
		var valorFinal = letra.concat(novoValor);
		novoValor = valorFinal
	}
	if (ehNumero > -1) {
			novoValor = novoValor.concat(ehNumero);
	}
	return novoValor;
}

 */
function retornaMascaraValor(valor, codigo) {
	var tmpValor = "";
	for(var i = 0; i <= valor.length; i++) {
		letra = valor.charAt(i);
		if (letra == "1" ||
		letra == "2" ||
		letra == "3" ||
		letra == "4" ||
		letra == "5" ||
		letra == "6" ||
		letra == "7" ||
		letra == "8" ||
		letra == "9" ||
		letra == "0") {
			tmpValor = tmpValor.concat(letra);
		}
	}
	valor = tmpValor;
	// TRATAMENTO PARA RETIRAR ZEROS DA ESQUERDA
   tmpValor = "";
   tamanho = valor.length;
   for(i = 0; i < valor.length; i++) {
       letraAtual = valor.charAt(i);
       if (letraAtual != "0") {
           tmpValor = valor.substring(i, valor.length);
           i = tamanho;
       }
   }
   // ADICIONA QUANTIDADE CORRETA DE ZEROS QUANDO NUMERO TEM LENGTH < 3
   valor = tmpValor;
   if (valor.length == 0) {
       valor = "000";
   } else if (valor.length == 1) {
       var zeros = "00";
       valor = zeros.concat(valor);
   } else if (valor.length == 2) {
       var zeros = "0";
       valor = zeros.concat(valor);          } 
		
	limite = 2;
/*
 	if (ehNumero > -1) {
		limite = 1;
	}
 */
	var contador = 0;
	var passo = 1;
	var novoValor = "";
	for(var j = valor.length - 1; j >= 0; j--) {
		contador++;
		if (passo == 1) {
			if (contador == limite) {
				letra = "," + valor.charAt(j);
				passo++;
				contador = 0;
			} else if (contador < 3) {
				letra = valor.charAt(j);
			}
		} else if (passo > 1) {
			if (contador == 3) {
				if (j > 0) {
					letra = "." + valor.charAt(j);
				} else {
					letra = valor.charAt(j);
				}
				contador = 0;
			} else {
				letra = valor.charAt(j);
			}
		}
		var valorFinal = letra.concat(novoValor);
		novoValor = valorFinal
	}
/*
 	if (ehNumero > -1) {
			novoValor = novoValor.concat(ehNumero);
	}
 */
	return novoValor;
}

function Mascara_Hora(Hora){ 
	var hora01 = ''; 
	hora01 = hora01 + Hora.value; 
	if (hora01.length == 2){ 
		hora01 = hora01 + ':'; 
		Hora.value = hora01; 
	} 
	if (hora01.length == 5){ 
		//Verifica_Hora(); 
	} 
} 

function dFilter(codigo, textbox, dFilterMask)
{
	var strCheck = '0123456789';
    var verificaNumero = String.fromCharCode(codigo);
	dFilterNum = dFilterStrip(textbox.value, dFilterMask);
		
	if (codigo==9) {
	    return true;
	} else if (codigo==8&&dFilterNum.length!=0) {
		dFilterNum = dFilterNum.substring(0,dFilterNum.length-1);
	} else if ( (strCheck.indexOf(verificaNumero) != -1) && dFilterNum.length<dFilterMax(dFilterMask) ) {
		dFilterNum=dFilterNum+String.fromCharCode(codigo);
	}

	var dFilterFinal='';
		for (dFilterStep = 0; dFilterStep < dFilterMask.length; dFilterStep++)
		{
	    	if (dFilterMask.charAt(dFilterStep)=='#')
				{
					  if (dFilterNum.length!=0)
					  {
				        dFilterFinal = dFilterFinal + dFilterNum.charAt(0);
					      dFilterNum = dFilterNum.substring(1,dFilterNum.length);
					  }
				    else
				    {
				        dFilterFinal = dFilterFinal + "";
				    }
				}
		 		else if (dFilterMask.charAt(dFilterStep)!='#')
				{
				    dFilterFinal = dFilterFinal + dFilterMask.charAt(dFilterStep); 			
				}
	//		    dFilterTemp = replace(dFilterTemp,dFilterMask.substring(dFilterStep,dFilterStep+1),'');
		}
		
		textbox.value = dFilterFinal;
		return false;
}

function replace(fullString,text,by) {
// Replaces text with by in string
    var strLength = fullString.length, txtLength = text.length;
    if ((strLength == 0) || (txtLength == 0)) return fullString;

    var i = fullString.indexOf(text);
    if ((!i) && (text != fullString.substring(0,txtLength))) return fullString;
    if (i == -1) return fullString;

    var newstr = fullString.substring(0,i) + by;

    if (i+txtLength < strLength)
        newstr += replace(fullString.substring(i+txtLength,strLength),text,by);

    return newstr;
}
