﻿Ext.form.VTypes['cnpjVal'] = /^([0-9]{3}.[0-9]{3}.[0-9]{3}\/[0-9]{4}-[0-9]{2})|([0-9]{2}.[0-9]{3}.[0-9]{3}\/[0-9]{4}-[0-9]{2})$/;
Ext.form.VTypes['cnpjMask'] = /[0-9]/;
Ext.form.VTypes['cnpjText'] = 'O campo <b>CNPJ</b> está incorreto, ex: 999.999.999/9999-99';
Ext.form.VTypes['cnpj'] = function(v) { 
    if (v == '000000000000000' || v == '000.000.000/0000-00') { 
        return true; 
    } 
    
    if (Ext.form.VTypes['cnpjVal'].test(v) && Ext.ux.isCNPJ(v)) { 
        return true; 
    } 
    else 
    { 
        return false; 
    }
}

Ext.form.TextCNPJ = Ext.extend(Ext.form.TextField, {
    fieldLabel: 'CNPJ',
    vtype: 'cnpj',
    enableKeyEvents: true,
    listeners: {
        'blur': {
            fn: function(a) {
                var v = a.getValue();
                var l = v.length;
                
                if (l == 14) { v = '0' + v; }

                if (v.length == 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;
                }
            }
        }
    },
    setValue: function(v) {
        if (typeof(v) == 'string') {
            v = v.trim();
            var l = v.length;
            
            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);
            }
            
            Ext.form.TextCNPJ.superclass.setValue.call(this, v);
        }
    }
});

Ext.reg('textcnpj', Ext.form.TextCNPJ);