jQuery.fn.teclaPressionada = function(options) {
	
	var o = jQuery.extend({
		formato : "",
		teclas : {}
	}, options);	
	
	var isCtrl = false;
	var isDelete = false;	


	this.keydown(function(event){
		
		switch(getTecla(event)){
			case 8: 
			case 46: isDelete = true; break;
			case 17: isCtrl = true;	break;	
		}
				
	});
	
	this.keyup(function(event){
						   
		switch(getTecla(event)){
			case 8: 
			case 46: isDelete = false; return; break;
			case 17: isCtrl = false; break;
		}
		
		if(o.formato){
			
			var i, nCount, sValue, fldLen, mskLen,bolMask, sCod, nTecla;
	 
			val = this.value;
			val = val.replace(/[\[\\\^\$\.\|\?\*\+\(\)\-\s\/\]]/g,"");
			fldLen = val.length;
			mskLen = o.formato.length;
			
			i = 0;
			nCount = 0;
			sCod = "";
			mskLen = fldLen;			
			
			while (i <= mskLen) {
				bolMask = ((o.formato.charAt(i) == "-") || (o.formato.charAt(i) == ".") || (o.formato.charAt(i) == "/"))
				bolMask = bolMask || ((o.formato.charAt(i) == "(") || (o.formato.charAt(i) == ")") || (o.formato.charAt(i) == " ") || (o.formato.charAt(i) == ":"))

				if (bolMask) {
					sCod += o.formato.charAt(i);
					mskLen++; }
				else {
					sCod += val.charAt(nCount);
					nCount++;
				}

				i++;
			}
			
			if(sCod.length > o.formato.length){
				sCod = sCod.substr(0,o.formato.length);
			}

			this.value = sCod;		
		}
				
	});	
	
	this.keypress(function(event){
		
		if(isCtrl == true){return;}
		
		tecla = getTecla(event);
		if(o.teclas.caracteres){
			if ((tecla != 8) && (tecla != 0) && (tecla <= 43 || tecla >= 58)){
				event.preventDefault();	
			}
		}else if(o.teclas.numeros){
			if ((tecla != 8) && (tecla != 0) && (tecla <= 46 || tecla >= 58)){
				event.preventDefault();	
			}
		}
		
	});
	
	function getTecla(e){
		if($.browser.mozilla){return e.which;}else{return e.keyCode;}
	}
	
	return this;
	
};

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 || whichCode == 0) return true;
	if (whichCode == 13) return true;
	key = String.fromCharCode(whichCode);// Valor para o código da Chave
	if (strCheck.indexOf(key) == -1) return false; // Chave inválida
	len = fld.value.length;
	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;
}
