﻿Ext.form.TextCPFCNPJ = Ext.extend(Ext.form.TextField, {
    fieldLabel: 'CPF/CNPJ',
    vtype: 'cnpj',
    enableKeyEvents: true,
    listeners: {
        'keydown': {
            fn: function(a, b) {
            	var k = b.getKey();
				if (!(k != b.BACKSPACE && k != b.DELETE)) {
					return;
				}

                var v = a.getValue();

				if (this.vtype == 'cpf') {
					Ext.form.VTypes['cpfText'] = 'O campo <b>CPF/CNPJ</b> está incorreto, ex: 999.999.999-99';
					
					var l = v.length;
					
					if (l == 3) {
						this.setValue(v + '.');
					} else if (l == 7) {
						this.setValue(v + '.');
					} else if (l == 11) {
						this.setValue(v + '-');
					}
				} else if (this.vtype == 'cnpj') {
					Ext.form.VTypes['cnpjText'] = 'O campo <b>CPF/CNPJ</b> está incorreto, ex: 999.999.999/9999-99';
				}
            }
        },
        'blur': {
            fn: function(a) {

                //Validação
                var v = a.getValue();
                var l = v.length;
	
                if (this.vtype == 'cpf') {
                    if (l == 14) {
                        if (!Ext.ux.isCPF(v)) {
                            this.markInvalid('O campo <b>CPF</b> contém um CPF inválido');
                            return;
                        }
                    }
                }
                else if (this.vtype == 'cnpj') {
                    if (l == 14) { v = '0' + v; }

                    if (l == 15) {
                        v = v.substring(0, 3) + '.' + v.substring(3, 6) + '.' + v.substring(6, 9) + '/' + v.substring(9, 13) + '-' + v.substring(13, 15);
                    }

                    this.setValue(v);

                    if (!Ext.ux.isCNPJ(v)) {
                        this.markInvalid('O campo <b>CNPJ</b> contém um CNPJ inválido');
                        return;
                    }
                }
				
                if (!this.validate()) return;
            }
        }
    },
    reset: function() {
        this.setValue('', true);

        this.clearInvalid();
        this.applyEmptyText();
    },
    setValue: function(v, b) {
        if (v == undefined || v == null) { this.originalValue = null; return; }

        if (v.trim().length == 11) {
            v = v.substring(0, 3) + '.' + v.substring(3, 6) + '.' + v.substring(6, 9) + '-' + v.substring(9, 11);
        } else if (v.trim().length == 14) {
            v = '0' + v;
        }

        if (v.trim().length == 15) {
            v = v.substring(0, 3) + '.' + v.substring(3, 6) + '.' + v.substring(6, 9) + '/' + v.substring(9, 13) + '-' + v.substring(13, 15);
        }

        if (v == '') this.originalValue = '';

        if (b) { this.originalValue = v; }

        this.value = v;

        if (this.rendered) {
            this.el.dom.value = (v === null || v === undefined ? '' : v);
            this.validate();
        }
    }
});

Ext.reg('textcpfcnpj', Ext.form.TextCPFCNPJ);
