﻿Ext.namespace('Ext.ux');

Ext.ux = {
	isEmail : function (v) {
	    var emailPat = /^(.+)@(.+)$/;
	    var specialChars = "\\(\\)<>@,;:\\\\\\\"\\.\\[\\]";
	    var validChars = "\[^\\s" + specialChars + "\]";
	    var quotedUser = "(\"[^\"]*\")";
	    var ipDomainPat = /^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
	    var atom = validChars + '+';
	    var word = "(" + atom + "|" + quotedUser + ")";
	    var userPat = new RegExp("^" + word + "(\\." + word + ")*$");
	    var domainPat = new RegExp("^" + atom + "(\\." + atom + ")*$");
	    var matchArray = v.match(emailPat);
	    if (matchArray == null) {
	        return false;
	    }
	    var user = matchArray[1];
	    var domain = matchArray[2];
	    if (user.match(userPat) == null) {
	        return false;
	    }
	    var IPArray = domain.match(ipDomainPat);
	    if (IPArray != null) {
	        for (var i = 1; i <= 4; i++) {
	            if (IPArray[i] > 255) {
	                return false;
	            }
	        }
	        return true;
	    }
	    var domainArray = domain.match(domainPat);
	    if (domainArray == null) {
	        return false;
	    }
	    var atomPat = new RegExp(atom, "g");
	    var domArr = domain.match(atomPat);
	    var len = domArr.length;
	    if (domArr[domArr.length - 1].length < 2 || domArr[domArr.length - 1].length > 3) {
	        return false;
	    }
	    if (len < 2) {
	        return false;
	    }
	    return true;
	},
	isCPF : function (cpf) {
	    for (var i = 0; i < 2; i++) {
	        cpf = cpf.replace('.', '');
	    }
	
	    cpf = cpf.replace('-', '');
	
	    var num, d, s, i, r, equals;
	    equals = 1;
	
	    if (cpf.length != 11) {
	        return false;
	    }
	
	    for (i = 0; i < cpf.length - 1; i++) {
	        if (cpf.charAt(i) != cpf.charAt(i + 1)) {
	            equals = 0;
	            break;
	        }
	    }
	
	    if (!equals) {
	        num = cpf.substring(0, 9);
	        d = cpf.substring(9);
	        s = 0;
	
	        for (i = 10; i > 1; i--) { s += num.charAt(10 - i) * i; }
	
	        r = s % 11 < 2 ? 0 : 11 - s % 11;
	
	        if (r != d.charAt(0)) { return false; }
	
	        num = cpf.substring(0, 10); s = 0;
	
	        for (i = 11; i > 1; i--) { s += num.charAt(11 - i) * i; }
	
	        r = s % 11 < 2 ? 0 : 11 - s % 11;
	
	        return (r != d.charAt(1)) ? false : true;
	    } else {
	        return false;
	    }
	},
	isCNPJ : function (cnpj) {
	    for (var i = 0; i < 2; i++) {
	        cnpj = cnpj.replace('.', '');
	    }
	
	    cnpj = cnpj.replace('/', '');
	    cnpj = cnpj.replace('-', '');
	
	    var n, d, s, i, r, pos, l, equals;
	    equals = 1;
	
	    if (cnpj.length < 14 || cnpj.length > 15) { return false; }
	
	    for (i = 0; i < cnpj.length - 1; i++) {
	        if (cnpj.charAt(i) != cnpj.charAt(i + 1)) {
	            equals = 0;
	            break;
	        }
	    }
	
	    if (!equals) {
	        l = cnpj.length - 2;
	        n = cnpj.substring(0, l);
	        d = cnpj.substring(l);
	        s = 0;
	        pos = l - 7;
	
	        for (i = l; i >= 1; i--) {
	            s += n.charAt(l - i) * pos--;
	            if (pos < 2) pos = 9;
	        }
	
	        r = s % 11 < 2 ? 0 : 11 - s % 11;
	
	        if (r != d.charAt(0)) { return false; }
	
	        l = l + 1;
	        n = cnpj.substring(0, l);
	        s = 0;
	        pos = l - 7;
	
	        for (i = l; i >= 1; i--) {
	            s += n.charAt(l - i) * pos--;
	            if (pos < 2) pos = 9;
	        }
	
	        r = s % 11 < 2 ? 0 : 11 - s % 11;
	
	        return (r != d.charAt(1)) ? false : true;
	    } else {
	        return false;
	    }
	}
};