Code:
Ext.ux.MoneyField = function(config){
		var defConfig = {
			autocomplete: 'off',
			format: 'BRL',
			currency: 'R$',
			showCurrency: true
		};
		Ext.applyIf(config,defConfig);
    Ext.ux.MoneyField.superclass.constructor.call(this, config);
};
Ext.extend(Ext.ux.MoneyField, Ext.form.TextField,{

	initEvents : function(){
        Ext.ux.MoneyField.superclass.initEvents.call(this);
		this.el.on('keydown',this.stopEventFunction,this);
		this.el.on("keypress", this.mapCurrency,this); 
		this.el.on("keyup", this.stopEventFunction,this); 
    },
	     
    formatCurrency : function(evt, floatPoint, decimalSep, thousandSep) {             		    	
	    floatPoint  = !isNaN(floatPoint) ? Math.abs(floatPoint) : 2;
	    thousandSep = typeof thousandSep != "string" ? "," : thousandSep;
	    decimalSep  = typeof decimalSep != "string" ? "." : decimalSep;
	    var key = evt.getKey();
	    var character = (key > 47 && key < 58 ? String.fromCharCode(key) : "");	    
		var field = this.el.dom;
		var value = (field.value.replace(/\D/g, "").replace(/^0+/g, "") + character).replace(/\D/g, "");
		var length = value.length;			
		
    	if ( character == "" && length > 0 && key == 8) {
        	length--;
        	value = value.substr(0,length);
        	evt.stopEvent();
		}
		
        if(field.maxLength + 1 && length >= field.maxLength) return false;
        
        length <= floatPoint && (value = new Array(floatPoint - length + 2).join("0") + value);
        for(var i = (length = (value = value.split("")).length) - floatPoint; (i -= 3) > 0; value[i - 1] += thousandSep);
        floatPoint && floatPoint < length && (value[length - ++floatPoint] += decimalSep);
        field.value = (this.showCurrency && this.currencyPosition == 'left' ? this.currency : '' ) +
        			  value.join("") + 
        			  (this.showCurrency && this.currencyPosition == 'right' ? this.currency : '' );            
    },
     
    mapCurrency : function(evt) {        
        switch (this.format) { 
            case 'BRL': 
            	this.currency = 'R$ ';
            	this.currencyPosition = 'left';
                this.formatCurrency(evt, 2,',','.'); 
                break; 
                
            case 'EUR':            	
            	this.currency = ' €';
            	this.currencyPosition = 'right';
                this.formatCurrency(evt, 2,',','.'); 
                break; 
                
            case 'USD':            	
            	this.currencyPosition = 'left';
            	this.currency = '$';
                this.formatCurrency(evt, 2); 
                break;
                
            default: 
                this.formatCurrency(evt, 2); 
        } 
    },

	stopEventFunction : function(evt) { 
        var key = evt.getKey(); 
        
        if ( (( key>=41 && key<=122 ) || key==32 || key>186) && (!evt.altKey && !evt.ctrlKey)  ) {
			evt.stopEvent(); 
		}
	}
});