﻿if (CCJOY.FORM) CCJOY.FORM = null;
CCJOY.Form = CCJOY.FORM = {};
//密码安全
CCJOY.FORM.checkPasswordStrength = function(el, callBack) {
    function getStrength(str) {
        var score = 0;
        var l = str.length;
        if (l <= 4) {
            score += 5;
        } else if (l > 4 && l < 8) {
            score += 10;
        } else if (l > 7) {
            score += 25;
        }

        var nums = 0;
        var marks = 0;
        var caps = 0;
        var mins = 0;

        var tchar;
        for (var i = str.length - 1; i >= 0; i--) {
            tchar = str.charCodeAt(i);
            if (tchar > 47 && tchar < 58) {
                nums++;
            } else if (tchar > 64 && tchar < 91) {
                caps++;
            } else if (tchar > 96 && tchar < 123) {
                mins++;
            } else if (tchar > 32 && tchar < 127) {
                marks++;
            }
        }

        if (caps && mins) {
            score += 20;
        } else if ((caps && !mins) || (mins && !caps)) {
            score += 10;
        } else {
            score += 0;
        }

        if (nums > 2) {
            score += 20;
        } else if (nums > 0 && nums < 3) {
            score += 10;
        } else {
            score += 0;
        }

        if (marks > 1) {
            score += 25;
        } else if (marks == 1) {
            score += 10;
        } else {
            score += 0;
        }

        if (caps && mins && nums && marks) {
            score += 5;
        } else if ((caps || mins) && nums && marks) {
            score += 3;
        } else if ((caps || mins) && nums) {
            score += 2;
        }

        var strength;
        var level;
        if (score >= 90) {
            strength = '非常安全';
            level = 5;
        } else if (score >= 80) {
            strength = '安全';
            level = 4;
        } else if (score >= 70) {
            strength = '非常强';
            level = 3;
        } else if (score >= 60) {
            strength = '强';
            level = 3;
        } else if (score >= 50) {
            strength = '一般';
            level = 2;
        } else if (score >= 25) {
            strength = '弱';
            level = 1;
        } else if (score >= 0) {
            strength = '非常弱';
            level = 1;
        }
        return { "level": level, "score": score, "strength": strength };
    }
    $(el).bind("focus", function() { callBack(getStrength($(el).val())); })
    $(el).bind("keyup", function() { callBack(getStrength($(el).val())); })
};

CCJOY.FORM.checkers = {
    blank: {
        exe: function(p) {
            var str = $(p).val();
            return !CCJOY.STRING.isBlank(str);
        },
        error: '必填项不能为空'
    },
    email: {
        exe: function(p) {
            var str = $(p).val();
            if (!str) return false;
            return CCJOY.STRING.isEmail(str);
        },
        error: '您输入的不是一个合法的 E-mail 地址'
    },
    phone: {
        exe: function(p) {
            var str = $(p).val();
            if (!str) return false;
            return CCJOY.STRING.isPhone(str);
        },
        error: '您输入的不是一个合法的电话号码'
    },
    mobile: {
        exe: function(p) {
            var str = $(p).val();
            if (!str) return false;
            return CCJOY.STRING.isMobile(str);
        },
        error: '您输入的不是一个合法的手机号码'
    },
    ip: {
        exe: function(p) {
            var str = $(p).val();
            if (!str) return false;
            return CCJOY.STRING.isIp(str);
        },
        error: '您输入的不是一个合法的ip地址'
    },
    url: {
        exe: function(p) {
            var str = $(p).val();
            if (!str) return true;
            return CCJOY.STRING.isUrl(str);
        },
        error: '您输入的不是一个合法的url'
    },
    num: {
        exe: function(p) {
            var str = $(p).val();
            if (!str) return false;
            return CCJOY.STRING.isNum(str);
        },
        error: '您只能输入一个数字'
    },
    zip: {
        exe: function(p) {
            var str = $(p).val();
            if (!str) return false;
            return CCJOY.STRING.isZip(str);
        },
        error: '您输入的不是一个合法的邮政编码'
    },
    en: {
        exe: function(p) {
            var str = $(p).val();
            if (!str) return false;
            return CCJOY.STRING.isEN(str);
        },
        error: '您只能输入英文字母'
    },
    length: {
        exe: function(p) {
            var tmp = p.split(',');
            var id = tmp[0];
            var min = parseInt(tmp[1]);
            var max = parseInt(tmp[2]);
            var str = $(id).val();
            if (!str) return false;
            var l = str.length;
            if (l < min || l > max) {
                CCJOY.FORM.checkers.length.error = '您输入字符长度只能在' + min + '-' + max + '之间';
                return false;
            }
            return true;
        },
        error: ''
    },
    file: {
        exe: function(p) {
            var avs = p.split(',');
            var id = avs[0];
            var str = $(id).val();
            if (!str) return false;
            var passed = false;
            var filetype = p.toString().substring(p.toString().indexOf(",") + 1);
            for (var i = 1, j = avs.length; i < j; i++) {
                if (CCJOY.STRING.endsWith(str, '.' + avs[i])) {
                    passed = true;
                    break;
                }
            }
            if (!passed) {
                CCJOY.FORM.checkers.file.error = '您只能提交' + filetype + '格式的文件';
            }
            return passed;
        },
        error: ''
    },
    include: {
        exe: function(p) {
            var tmp = p.split(',');
            var id = tmp[0];
            var str = $(id).val();
            if (!str) return false;
            var s = p.toString().substring(p.toString().indexOf(",") + 1);
            if (!CCJOY.STRING.include(str, s)) {
                CCJOY.FORM.checkers.include.error = '您输入的字符必须包含' + s;
                return false;
            }
            return true;
        },
        error: ''
    },
    startsWith: {
        exe: function(p) {
            var tmp = p.split(',');
            var id = tmp[0];
            var str = $(id).val();
            if (!str) return false;
            var s = p.toString().substring(p.toString().indexOf(",") + 1);
            if (!CCJOY.STRING.startsWith(str, s)) {
                CCJOY.FORM.checkers.startsWith.error = '您输入的字符只能以' + s + '开头';
                return false;
            }
            return true;
        },
        error: ''
    },
    endsWith: {
        exe: function(p) {
            var tmp = p.split(',');
            var id = tmp[0];
            var str = $(id).val();
            if (!str) return false;
            var s = p.toString().substring(p.toString().indexOf(",") + 1);
            if (!CCJOY.STRING.endsWith(str, s)) {
                CCJOY.FORM.checkers.endsWith.error = '您输入的字符只能以' + s + '结尾';
                return false;
            }
            return true;
        },
        error: ''
    },
    compare: {
        exe: function(p) {
            var tmp = p.split(',');
            var id1 = tmp[0];
            var id2 = tmp[1];
            var str1 = $(id1).val();
            var str2 = $(id2).val();
            return (str1 == str2);
        },
        error: ''
    },
    sharelink: {
        exe: function(p) {
            var str = $(p).val();
            if (!str) return false;
            if (str.substr(0, 7) != "http://" && str.substr(0, 6) != "ftp://") {
                $(p).val('http://' + str);
                str = $(p).val();
            }
            if (!CCJOY.STRING.isUrl(str)) {
                CCJOY.FORM.checkers.sharelink.error = '请您输入一个有效的链接';
                return false;
            }
            if (/ccjoy.com/.test(str)) {
                CCJOY.FORM.checkers.sharelink.error = '您必须输入一个站外链接';
                return false;
            }
            return true;
        },
        error: ''
    },
    regNickName: {
        exe: function(p) {
            var str = $(p).val();
            if (!str) return false;

            if (!(/^([a-zA-Z0-9_\u4e00-\u9fa5]+)$/.test(str))) {
                CCJOY.FORM.checkers.regNickName.error = '帐号格式错误';
                return false;
            }

            var rt = true;
            $.ajax({
                type: "GET",
                cache: false,
                dataType: "jsonp",
                url: "http://passport.ccjoy.com/check.ashx?httptype=nickname&nickname=" + encodeURIComponent(str) + "&jsoncallback=?",
                async: false,
                success: function(data) {
                    if (data.message != "NICKNAMEOK") {
                        rt = false;
                        CCJOY.FORM.checkers.regNickName.error = data.message;
                    }
                }
            });

            return rt;
        },
        error: ''
    },
    regUserName: {
        exe: function(p) {
            var str = $(p).val();
            if (!str) return false;

            if (!(/^[a-zA-Z]{1}(\w+)$/.test(str))) {
                CCJOY.FORM.checkers.regUserName.error = '帐号格式错误';
                return false;
            }
            var rt = true;
            $.ajax({
                type: "GET",
                cache: false,
                dataType: "jsonp",
                url: "http://passport.ccjoy.com/check.ashx?httptype=username&username=" + str + "&jsoncallback=?",
                async: false,
                success: function(data) {
                    if (data.message != "USERNAMEOK") {
                        rt = false;
                        CCJOY.FORM.checkers.regUserName.error = data.message;
                    }
                    else {
                        rt = true;
                    }
                }
            });
            return rt;
        },
        error: ''
    },
    regEmail: {
        exe: function(p) {
            var str = $(p).val();
            if (!str) return false;
            if (!CCJOY.STRING.isEmail(str)) {
                CCJOY.FORM.checkers.regEmail.error = 'E-mail 格式错误';
                return false;
            }
            var endError = '您的邮箱可能收不到激活信推荐,<a href=\"http:\/\/mail.163.com\" target=\"_blank\" style=\"color:blue\">163邮箱<\/a>';
            var rt = true;
            CCJOY.ARRAY.each([/eyou\.com/i, /yaoyaobuluo\.cn/i, /love126\.com/i], function(i, v) {
                if (v.test(str)) {
                    CCJOY.FORM.checkers.regEmail.error = endError;
                    rt = false;
                    return;
                }
            });
            $.ajax({
                type: "GET",
                cache: false,
                dataType: "jsonp",
                url: "http://passport.ccjoy.com/check.ashx?httptype=useremail&useremail=" + str + "&jsoncallback=?",
                async: false,
                success: function(data) {
                    if (data.message != "EMAILOK") {
                        rt = false;
                        CCJOY.FORM.checkers.regEmail.error = data.message;
                    }
                    else {
                        rt = true;
                    }
                }

            });
            return rt;
        },
        error: ''
    },
    realName: {
        exe: function(p) {
            var str = $(p).val();
            if (!str) return false;
            function strlen(str) {
                var len = 0;
                for (var i = 0; i < str.length; i++) {
                    if (str.charCodeAt(i) > 255)
                        len += 2;
                    else
                        len++;
                }
                return len;
            }
            function chinese(str) {
                var count = 0;
                for (var i = 0; i < str.length; i++) {
                    if (str.charCodeAt(i) > 255)
                        count++;
                }
                return count;
            }
            if (strlen(str) > 12) {
                CCJOY.FORM.checkers.realName.error = '姓名不能多于6个汉字';
                return false;
            }
            if (chinese(str) < 2) {
                CCJOY.FORM.checkers.realName.error = '请输入真实姓名';
                return false;
            }
            return true;
        },
        error: ''
    },
    check: {
        exe: function(p) {
            return $(p)[0].checked;
        },
        error: ''
    },
    noCheck: {
        exe: function(p) {
            return !$(p)[0].checked;
        },
        error: ''
    },
    password: {
        exe: function(p) {
            var str = $(p).val();
            if (!str) return false;
            return /[A-Za-z0-9_\-]/.test(str);
        },
        error: '您的密码只能包含英文字母数字和-_'
    },
    not: {
        exe: function(p) {
            var tmp = p.split(',');
            var id1 = tmp[0];
            var id2 = tmp[1];
            var str1 = $(id1).val();
            if (!str1) return false;
            var str2 = $(id2).val();
            if (!str2) return false;
            return (str1 == str2);
        },
        error: ''
    }
};
