//ajax调用同步标志位

var asyncFlag = false;
var errIdx = -1;
var errMsg = new Array();
errMsg[0] = {
    1: '<div class="terr">账号名非法</div>',
    2: '<div class="terr">用户名已被使用</div>',
    3: '<div class="terr">账号长度为6～16位，请正确输入</div>',
    4: '<div class="terr">账号只能由小写字母、数字、下划线组成，且必须以英文字母或下划线开头</div>',
    5: '<div class="terr">您的账号中存在非法字符，请重新输入</div>'
};
errMsg[1] = {
    1: '<div class="terr">密码长度为6～15位 ，请正确输入</div>',
    2: '<div class="terr">密码只能包含字母、数字和下划线，字母区分大小写</div>',
    3: '<div class="terr">密码和账号名不能相同，请重新输入</div>'
};
errMsg[2] = {
    1: '<div class="terr">两次输入的密码不一致，请确认后重新输入</div>',
    2: '<div class="terr">请再次输入密码</div>'
};
errMsg[3] = {
    1: '<div class="terr">电子邮箱地址格式错误，请输入正确的邮箱格式，例如xxxxx@xxx.com</div>'
};
errMsg[4] = {
    1: '<div class="terr">请填写您的真实姓名，以保障您的用户权益</div>'
};
errMsg[5] = {
    1: '<div class="terr">你输入的身份证格式错误</div>',
    2: '<div>未成年人将被列入防沉迷系统</div>'
};
errMsg[6] = {
    1: '<div class="terr">超级身份验证码不能为空</div>',
    2: '<div class="terr">超级身份验证码应为15位、18位数字或大小写字符</div>',
    3: '<div class="terr">超级身份验证码应为6-28位数字或大小写字符</div>'
};
errMsg[7] = {
    1: '<div class="terr">验证码为空，请输入</div>',
    2: '<div class="terr">验证码格式错误，请重新输入</div>',
    3: '<div class="terr">验证码错误，请重新输入</div>'
};

function doPost() {
    errIdx = -1;
    document.getElementById('modelemail').value=document.getElementById('input_3').value;
    checkAllValue();
    if (errIdx != -1) {
        document.getElementById('input_' + errIdx).focus();
        alert('请检查填写的内容');
        return false;
    }
    if (!document.getElementById('licenseFlag').checked) {
        alert('请认真阅读比酷通行证协议');
        return false;
    }
    return true;
}

function checkAccount(account) {
    if (account == '') {
        setSignal(0, 3);
        return;
    }
    else if (account.length < 6 || account.length > 16) {
        setSignal(0, 3);
        return;
    }
    account = account.toLowerCase();
    //普通账号字符检查
    ereg = /^[a-z_]{1}[a-z0-9_]{5,15}$/;
    if (!ereg.test(account)) {
        setSignal(0, 5);
        return;
    }

    //账号前缀检查
    prefix_2 = account.substring(0, 2);
    prefix_3 = account.substring(0, 3);
    prefix_4 = account.substring(0, 4);
    prefix_5 = account.substring(0, 5);
    if (prefix_2 == 'gm') {
        setSignal(0, 1);
        return;
    }
    if (prefix_3 == 'ge_' || prefix_3 == 'at_' || prefix_3 == 'mj_' || prefix_3 == 'gm_') {
        setSignal(0, 1);
        return;
    }
    if (prefix_4 == 'sun_' || prefix_4 == 'jjw_' || prefix_4 == 'au2_' || prefix_4 == 'ro2_' || prefix_5 == 'biku') {
        setSignal(0, 1);
        return;
    }
    if (prefix_5 == 'fifa_' || prefix_5 == 'abiku') {
        setSignal(0, 1);
        return;
    }
    //检查账号重名
    var url = 'register.jhtml?userID=' + account;
    var func = function(r) {
        var json = eval("(" + r + ")");
        if (json.exsit) {
            errMsg[0][0] = '<div class="terr">您申请的账号 <font color="black"><b>' + account + '</b></font> 已被注册！';
            setSignal(0, 0);
        } else {
            setRight(0);
        }
    }
    jqAjax(url, {}, func);
}

function checkPassword(password) {
    if (password == '') {
        setSignal(1, 1);
    }
    else {
        //密码长度检查
        if (password.length < 6 || password.length > 15) {
            setSignal(1, 1);
        }
        //密码字符检查
        else if (!passwordValidator(password)) {
            setSignal(1, 2);
        }
        //密码不能与账号相同
        else if (password == $('#input_0')[0].value) {
                setSignal(1, 3);
            }
            else {
                setRight(1);
            }
    }

}

function confirmPassword(password) {
    if (password == '') {
        setSignal(2, 2);
        return;
    }
    else if (password != '' && password != $('#input_1')[0].value) {
        setSignal(2, 1);
        return;
    }
    setRight(2);
}

function secureLevel(password) {
    passwordLength = password.length;
    if (passwordLength < 6) {
        document.getElementById("passlevel_low").style.backgroundColor = '';
        document.getElementById("passlevel_mid").style.backgroundColor = '';
        document.getElementById("passlevel_high").style.backgroundColor = '';
        return;
    }
    if (passwordLength == 6) {
        document.getElementById("passlevel_low").style.backgroundColor = '#FE5C11';
        document.getElementById("passlevel_mid").style.backgroundColor = '';
        document.getElementById("passlevel_high").style.backgroundColor = '';
        return;
    }
    if (passwordLength <= 8 && passwordLength >= 7) {
        document.getElementById("passlevel_low").style.backgroundColor = '';
        document.getElementById("passlevel_mid").style.backgroundColor = '#FE5C11';
        document.getElementById("passlevel_high").style.backgroundColor = '';
        return;
    }

    document.getElementById("passlevel_low").style.backgroundColor = '';
    document.getElementById("passlevel_mid").style.backgroundColor = '';
    document.getElementById("passlevel_high").style.backgroundColor = '#FE5C11';

}

function checkEmail(email) {
    if (email == '' || email.length < 6 || email.length > 50 || !emailValidator(email)) {
        setSignal(3, 1);
        return;
    }
    setRight(3);
}

function checkName(name) {
    ereg = /^[\u4e00-\u9fff]*$/;
    if (name == '' || name.length < 2 || name.length > 4 || ereg.test(name) == false) {
        setSignal(4, 1);
        return;
    }
    setRight(4);
}

function checkCertId(certid) {
    if (certid == '') {
        setSignal(5, 1);
        return;
    }
    var ret = certIdValidator(certid);
    if (ret == 0) {
        setSignal(5, 1);
        return;
    } else if (ret == 1) {
        document.getElementById("tip_5").innerHTML = errMsg[5][2] + "<img src='http://img.nbiku.com/images/registerOk.gif'/> ";
        return;
    }
    setRight(5);
}
function checksType() {
    checkSecurityCode(document.getElementById("input_6").value);
}
function checkSecurityCode(scode) {
    if (scode == '') {
        setSignal(6, 1);
        return;
    }
    if (document.getElementById('setype').checked) {
        var ret = certIdValidator(scode);
        if (ret == 0) {
            setSignal(6, 2);
            return;
        }
    } else {
        if (scode.length < 6 || scode.length > 28) {
            setSignal(6, 3);
            return;
        }
    }
    setRight(6);
}
function checkVerifyCode(verifycode) {
    ereg = /^[A-Za-z0-9]+$/;
    if (verifycode == '') {
        setSignal(7, 1);
        return;
    }
    if (verifycode.length != 4 || !ereg.test(verifycode)) {
        setSignal(7, 2);
        return;
    }

    var url = 'register.jhtml?validate=' + verifycode;
    var func = function(r) {
        var json = eval("(" + r + ")");
        if (json.result) {
            setRight(7);
        } else {
            setSignal(7, 3);
        }
    }
    jqAjax(url, {}, func);

}

//检查所有输入，并清空错误提示
function checkAllValue() {
    checkAccount(document.getElementById('input_0').value);
    if (errIdx != -1) return;
    checkPassword(document.getElementById('input_1').value);
    if (errIdx != -1) return;
    confirmPassword(document.getElementById('input_2').value);
    if (errIdx != -1) return;
    secureLevel(document.getElementById('input_1').value);
    if (errIdx != -1) return;
    checkEmail(document.getElementById('input_3').value);
    if (errIdx != -1) return;
    checkName(document.getElementById('input_4').value);
    if (errIdx != -1) return;
    checkCertId(document.getElementById('input_5').value);
    if (errIdx != -1) return;
    checkSecurityCode(document.getElementById('input_6').value);
    if (errIdx != -1) return;
    checkVerifyCode(document.getElementById('input_7').value);
}

//根据标志位设置错误标记
function setSignal(idx, type) {
    document.getElementById("tip_" + idx).innerHTML = errMsg[idx][type];
    errIdx = idx;
}
function setRight(idx) {
    document.getElementById("tip_" + idx).innerHTML = "<img src='http://img.nbiku.com/images/registerOk.gif'/>"
}

function jqAjax(url, para, func) {
    $.ajax({
        'type': 'post',
        'url': url,
        'data': para,
        'success': func,
        'async': asyncFlag
    });
}

//reference

function passwordValidator(password) {
    var numFlag = 2;
    var charFlag = 2;
    validnum = /^\d$/;
    validchar = /^\[a-zA-Z]+$/;
    validall = /^\w{6,15}$/;
    if (!validall.test(password)) {
        return false;
    }
    else {
        for (var i = 0; i < password.length; i++) {
            cPwd = password.substr(i, 1);
            if (validnum.test(cPwd)) {
                numFlag = 1;
            }
            else if (65 < cPwd < 90 || 97 < cPwd < 122) {
                charFlag = 1;
            }
            if ((numFlag == 1) && (charFlag == 1)) {
                break;
            }
        }
        if ((numFlag == 2) || (charFlag == 2)) {
            return false;
        }
    }
    return true;
}

function emailValidator(email) {
    var reg_email = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;
    //var reg_email = /^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*(\.[a-zA-Z0-9]+[-a-zA-Z0-9]*)+[a-zA-Z0-9]+$/;
    if (email.length < 6 || email.length > 50 || !reg_email.test(email)) {
        return false;
    }
    else {
        return true;
    }
}

function certIdValidator(certid) {
    var reg_15 = /\d{15}/;
    var reg_18 = /\d{17}([0-9]{1}|x|X)/;
    var monthPerDays = new Array("31", "28", "31", "30", "31", "30", "31", "31", "30", "31", "30", "31");
    certid = certid.toLowerCase();
    if (certid == "" || certid == "111111111111111") {
        return 0;
    }
    var ret = certid.length == 15 ? reg_15.test(certid) : reg_18.test(certid);
    if (!ret) {
        return 0;
    }
    birthDate = certid.length == 15 ? "19" + certid.substr(6, 6) : certid.substr(6, 8);
    year = birthDate.substr(0, 4);
    if (birthDate.substr(4, 1) == '0')
        month = birthDate.substr(5, 1);
    else
        month = birthDate.substr(4, 2);
    if (birthDate.substr(6, 1) == '0')
        day = birthDate.substr(7, 1);
    else
        day = birthDate.substr(6, 2);
    dd = parseInt(day);
    mm = parseInt(month);
    yy = parseInt(year);
    days = new Date();
    gdate = days.getDate();
    gmonth = days.getMonth();
    gyear18 = days.getFullYear() - 18;
    if (mm > 12 || mm < 1 || dd > 31 || dd < 1) {
        return 0;
    }
    if (year % 100 != 0) {
        if (year % 4 == 0)
            monthPerDays[1] = 29;
    }
    else {
        if (year % 400 == 0)
            monthPerDays[1] = 29;
    }
    if (monthPerDays[mm - 1] < dd) {
        return 0;
    }
    if (certid.length == 18) {
        var arTemp = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
        var num = 0;
        var proof;
        for (var i = 0; i < 17; i++) {
            num = num + certid.substr(i, 1) * arTemp[i];
        }
        num = num % 11;
        switch (num) {
            case 0:proof = '1';break;
            case 1:proof = '0';break;
            case 2:proof = 'x';break;
            case 3:proof = '9';break;
            case 4:proof = '8';break;
            case 5:proof = '7';break;
            case 6:proof = '6';break;
            case 7:proof = '5';break;
            case 8:proof = '4';break;
            case 9:proof = '3';break;
            case 10:proof = '2';break;
        }
        if (certid.substr(17, 1) != proof) {
            return 0;
        }
    }
    mm = mm - 1;
    var prevTS18 = new Date(gyear18, gmonth, gdate, 0, 0, 0);
    var ageTs = new Date(yy, mm, dd, 0, 0, 0)
    if ((prevTS18 < ageTs)) {
        return 1;
    }
    return 2;
}

function addClass(el, className) {
    $(el).addClass(className);
}

function removeClass(el, className) {
    $(el).removeClass(className);
}


$(document).ready(function() {
    //刷新验证码
    changeValidCode();

    $('#input_0').blur(function() {
        asyncFlag = true;
        checkAccount($('#input_0').attr('value'));
        asyncFlag = false;
    });
    $('#input_1').blur(function() {
        checkPassword($('#input_1').attr('value'));
        secureLevel($('#input_1').attr('value'));
        //confirmPassword($('#input_2').attr('value'));
    });
    $('#input_1').keyup(function() {
        secureLevel($('#input_1').attr('value'));
    });

    $('#input_2').blur(function() {
        confirmPassword($('#input_2').attr('value'));
    });

    $('#input_3').blur(function() {
        checkEmail($('#input_3').attr('value'));
    });
    $('#input_4').blur(function() {
        checkName($('#input_4').attr('value'));
    });
    $('#input_5').blur(function() {
        checkCertId($('#input_5').attr('value'));
    });
    $('#input_6').blur(function() {
        checkSecurityCode($('#input_6').attr('value'));
    });
    $('#input_7').blur(function() {
        checkVerifyCode($('#input_7').attr('value'));
    });
});



