//Declaração de constantes
var objMask = new Object();
objMask.CEP      = "cep"
objMask.CPF      = "cpf"
objMask.CNPJ     = "cnpj"
objMask.DATA     = "data"
objMask.TEL      = "tel"
objMask.TEL2     = "tel2"
objMask.PROCESSO = "processo"
objMask.CONTA    = "conta"
objMask.CARTAO   = "cartao"
objMask.NUM      = "num"
objMask.HORA     = "hora"
objMask.arrChange = new Array();
objMask.arrChange[96] = 48;
objMask.arrChange[97] = 49
objMask.arrChange[98] = 50
objMask.arrChange[99] = 51
objMask.arrChange[100] = 52
objMask.arrChange[101] = 53
objMask.arrChange[102] = 54
objMask.arrChange[103] = 55
objMask.arrChange[104] = 56
objMask.arrChange[105] = 57

/*
 *@function Mask
 *
 *@param  objForm - Compo do Formulario
 *@param  mask    - Tipo da mascara desejada
 *
 *@return true
 *@return false - Se diferente de número
 */

 
function mask(objForm, sMask, event) {
	var i, nCount, sValue, fldLen, mskLen,bolMask, sCod, nTecla;
	var nTecla = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
	//nTecla = event.keyCode;
	if (nTecla == 8 || nTecla == 9 || nTecla == 46) { // backspace alert(nTecla)
		return true;
	}
	if(nTecla >= 37 && nTecla <= 40){
		objForm.selection = objForm.createTextRange().duplicate();
		return true;
	}
	switch (sMask) {
		case objMask.CEP:
			sMask =  "99999-999"
			objForm.maxLength = 9;
			break;
		
		case objMask.CPF:
			sMask = "999.999.999-99"
			objForm.maxLength = 14;
			break;
		
		case objMask.CNPJ:
			sMask = "99.999.999/9999-99"
			objForm.maxLength = 18;
			break;
		
		case objMask.DATA: 
			sMask = "99/99/9999"
			objForm.maxLength = 10;
			break;
		
		case objMask.TEL: 
			var nLength = 0;
			if(nTecla){
				nLength = 12;
			} else {
				if(!objForm.value.length){
					return
				}
				nLength = 13;
			}
			if(objForm.value.length > nLength){
				sMask = "(99) 9999-9999";
			} else {
				sMask = "(99) 999-9999";
			}
			/*objForm.onblur = function(){
				if(this.onkeypress){
					this.onkeypress();
				} else if(this.onkeydown){
					this.onkeydown();
				}
			}*/
			objForm.maxLength = 14;
			break;
		
		case objMask.TEL2: 
			sMask = "9999-9999"
			objForm.maxLength = 9;
			break;
		
		case objMask.PROCESSO: 
			sMask = "99.999999999/9999-99"
			objForm.maxLength = 20;
			break;
		
		case objMask.CONTA: 
			sMask = "9999-9"
			objForm.maxLength = 6;
			break;
			
		case objMask.CARTAO: 
			sMask = "9999.9999.9999.9999"
			objForm.maxLength = 19;
			break;
		
		case objMask.NUM : 
			sMask = "999999999999999999999999999999999999999999999999999999999"
			break;
       case objMask.HORA : 
			sMask = "99:99"
            objForm.maxLength = 5;
			break;     
		
	}
	var objRange = document.selection.createRange().duplicate();
	if (nTecla != 13) { // apenas números...
		if((nTecla > 47) && (nTecla < 58) || (nTecla >= 96) && (nTecla <= 105) || nTecla == 13 || nTecla == 37 || nTecla == 39 || nTecla == 46){
			if(objMask.arrChange[event.keyCode]){
				objRange.text = String.fromCharCode(objMask.arrChange[event.keyCode]);
			} else {
				objRange.text = String.fromCharCode(nTecla);
			}
			//objForm.selection.text = ;
		}
	}
	var cursoPos = objRange.moveEnd("character", -1000000)*-1;
	

	sValue = objForm.value;
	var totalPontos = 0;
	for(var i=0; i < sValue.length; i++){
		var bolMask = ((sMask.charAt(i) == "-") || (sMask.charAt(i) == ".") || (sMask.charAt(i) == "/")|| (sMask.charAt(i) == ":"))
		bolMask = bolMask || ((sMask.charAt(i) == "(") || (sMask.charAt(i) == ")") || (sMask.charAt(i) == " "))
		bolMask = bolMask && i < cursoPos-1;
		if(bolMask){
			if(i == 0){
				totalPontos++;
			}
			totalPontos++;
		}
	}
		
	// Limpa todos os caracteres de formatação que
	// já estiverem no campo.
	sValue = sValue.toString().replaceAll("-", "");
	sValue = sValue.toString().replaceAll("-", "");
	sValue = sValue.toString().replaceAll(".", "");
	sValue = sValue.toString().replaceAll(".", "");
	sValue = sValue.toString().replaceAll("/", "");
	sValue = sValue.toString().replaceAll("/", "");
	sValue = sValue.toString().replaceAll("(", "");
	sValue = sValue.toString().replaceAll("(", "");
	sValue = sValue.toString().replaceAll(")", "");
	sValue = sValue.toString().replaceAll(")", "");
	sValue = sValue.toString().replaceAll(" ", "");
	sValue = sValue.toString().replaceAll(" ", "");
    sValue = sValue.toString().replaceAll(":", "");
    sValue = sValue.toString().replaceAll(":", "");
	fldLen = sValue.length;
	mskLen = sMask.length;

	
	i = 0;
	nCount = 0;
	sCod = "";
	mskLen = fldLen;
	var somaCursor = 0;

	while (i <= mskLen) {
		bolMask = ((sMask.charAt(i) == "-") || (sMask.charAt(i) == ".") || (sMask.charAt(i) == "/")|| (sMask.charAt(i) == ":"))
		bolMask = bolMask || ((sMask.charAt(i) == "(") || (sMask.charAt(i) == ")") || (sMask.charAt(i) == " "))
		if (bolMask) {
			sCod += sMask.charAt(i);
			mskLen++; 
			if(i <= cursoPos){
				if(i == 0){
					somaCursor++;
				}
				somaCursor++;
			}
		}else {
			sCod += sValue.charAt(nCount);
			nCount++;
		}
		i++;
	}
	//objRange.text = sCod;
	objForm.value = sCod;
	//objRange.select();
	var objRange = objForm.createTextRange();
	//alert("cursoPos: "+ cursoPos+"\n"+"somaCursor: "+somaCursor +"\ntotalPontos: "+ totalPontos)
	objRange.move("character", cursoPos + (somaCursor-totalPontos));
	objRange.select();
	return false;
}

/*
 *@function currencyFormat
 *
 *@param  fld  - Campo do valor digitado
 *@param  size - Qtde de caracteres permitidos
 *
 *@return true
 *@return false
 */
function currencyFormat(fld, size) {
	var milSep = '.';
	var decSep = ',';
	var sep = 0;
	var key = '';
	var i = j = 0;
	var len = len2 = 0;
	var strCheck = '0123456789';
	var aux = aux2 = '';
	var whichCode = event.keyCode;	
	
	if (whichCode == 13) 
		return true;  // Enter
	key = String.fromCharCode(whichCode);  // Get key value from key code
	if (strCheck.indexOf(key) == -1) 
		return false;  // Not a valid key
	len = fld.value.length;
	
	if(size <= len)
		return false;
		
	for(i = 0; i < len; i++)
		if ((fld.value.charAt(i) != '0') && (fld.value.charAt(i) != decSep))
			break;
	aux = '';
	for(; i < len; i++)
		if (strCheck.indexOf(fld.value.charAt(i))!=-1) aux += fld.value.charAt(i);
			aux += key;
	len = aux.length;
	if (len == 0) 
		fld.value = '';
	if (len == 1) 
		fld.value = '0'+ decSep + '0' + aux;
	if (len == 2) 
		fld.value = '0'+ decSep + aux;
	if (len > 2) {
		aux2 = '';
		for (j = 0, i = len - 3; i >= 0; i--) {
			if (j == 3) {
				aux2 += milSep;
				j = 0;
			}
			aux2 += aux.charAt(i);
			j++;
		}
		fld.value = '';
		len2 = aux2.length;
		for (i = len2 - 1; i >= 0; i--)
			fld.value += aux2.charAt(i);
		fld.value += decSep + aux.substr(len - 2, len);
	}
	return false;
}

/*@function semAcentuacao desenvolvido por Sergio Pereira
 *@param event 
 *@return true - Se a tecla pressionada for diferente de um acento.
 *@return false- Se a tecla pressionada for um acento.
 * e.g.: onKeyPress="return semAcentuacao(event);"
 */
function semAcentuacao(event){
	var tecla = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;

	if(tecla == 44 || tecla == 94 || tecla == 96 || tecla > 125) {
			return false;
	}
	return true;
}

/*@function soLetras desenvolvido por Sergio Pereira
 *@param event 
 *@return true - Se a tecla pressionada for diferente de uma letra.
 *@return false- Se a tecla pressionada for uma letra.
 * e.g.: onKeyPress="return soLetras(event);"
 */
 /*
function soLetras(event){
	var tecla = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
	
	if((tecla < 65 || tecla > 90) && (tecla < 97 || tecla > 122)) {
			return false;
	}
	return true;
}
*/
function soLetras(event){
	var tecla = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
//	alert(tecla);
	if((tecla < 65 || tecla > 90) && tecla != 9 && tecla != 13 && tecla != 127 && tecla != 32 && (tecla < 37 || tecla > 40) && tecla !=8 && tecla !=35 && tecla !=36 && tecla !=46) {
			return false;
	}
	return true;
}


String.prototype.replaceAll = function(strBusca,strNova){
	return eval("this.replace(/["+strBusca+"]/g,strNova)");
}
