var forbidden_pwd_list = "bizzlounge,bizz,bizzlounger";
var arrforbidden = forbidden_pwd_list.split(",");

var set = new Array();
set[0] = "[a-z]";
set[1] = "[A-Z]";
set[2] = "[0-9]";
set[3] = "[\.\"\'#%(),/:;=&?@_\$!<>?\*\+\[\\]\-]";
var special = "[\[\*\+?$()^{}|]";

function getlevel() {

    //var pw = document.getElementById["signup_password"].value;
    var pw = $F('signup_password');

    var msisdn = $F('signup_email' );
    var aliasName = $F('signup_username');

    forbidden_pwd_list = forbidden_pwd_list + "," + msisdn;

    if (aliasName.length > 0) {
        forbidden_pwd_list = forbidden_pwd_list + "," + aliasName;
    }

    if (msisdn.length > 6) {
        forbidden_pwd_list = forbidden_pwd_list + "," + msisdn.substring(msisdn.length - 6, msisdn.length);
    }

    //    alert(pw);

    arrforbidden = forbidden_pwd_list.split(",");

    var level = 1;
    var i = 0;
    if (pw.length == 0) {
        return 0;
    }
    if (RegExp('[^a-zA-Z0-9\.\"\'#%(),/:;=&?@_\$!<>?\*\+\[\\]\-]', 'g').test(pw))   //[0-9a-zA-Z\+\-\!\"\$#%\'()*,\./:;=\?_@\&amp;\&lt;\&gt;]
    {
        return 0;
    }

    //consecutive password
    var code = '';
    for (i = 0; i < pw.length; i++) {
        if (i == 0) {
            code = pw.charCodeAt(i);
            continue;
        }
        var code_new = pw.charCodeAt(i);
        if (code_new != code + 1)  break;
        else  code = code_new;
        if (i == pw.length - 1) {
            return 1;
        }
    }

    // reverse consecutive password
    code = '';
    for (i = pw.length - 1; i >= 0; i--) {
        if (i == pw.length - 1) {
            code = pw.charCodeAt(i);
            continue;
        }
        var code_new = pw.charCodeAt(i);
        if (code_new != code + 1) {
            break;
        }
        else  code = code_new;
        if (i == 0) {
            return 1;
        }
    }

    //all characters the same
    for (i = 0; i < pw.length; i++) {
        if (i == 0) {
            code = pw.charCodeAt(i);
            continue;
        }
        var code_new = pw.charCodeAt(i);
        if (code_new != code)  break;
        if (i == pw.length - 1) {
            return 1;
        }

    }

    //invalid string
    if (pw.toLowerCase() == msisdn.toLowerCase()) {
        return 1;
    }
    for (i = 0; i < arrforbidden.length; i++) {
        if (pw.toLowerCase() == arrforbidden[i].toLowerCase()) {
            return 1;
        }
    }

    //filter invalid string from password
    var ind = pw.toLowerCase().indexOf(msisdn.toLowerCase());
    if (ind != -1) {
        pw = pw.substring(0, ind) + pw.substring(ind + msisdn.length, pw.length);
    }

    for (i = 0; i < arrforbidden.length; i++) {
        var index = pw.toLowerCase().indexOf(arrforbidden[i].toLowerCase());
        if (index != -1) {
            pw = pw.substring(0, index) + pw.substring(index + arrforbidden[i].length, pw.length);
        }
    }
    if (pw.length < 6) {
        return 1;
    }
    if (pw.length >= 6) {
        level++;
    }
    if (pw.length >= 8) {
        level++;
    }

    // how many sets used?
    var setCount = 0;
    for (i = 0; i < set.length; i++) {
        var result = RegExp(set[i], 'g').test(pw);

        if (result) {
            setCount++;
        }
    }
    if (setCount < 2) {
        level--;
    }
    if (setCount > 2) {
        level++;
    }


    //number of different characters
    var sym = new Array(pw.length);
    sym[0] = pw.charAt(i);
    var j = 1;
    var k = 0;
    for (i = 0; i < pw.length; i++) {
        for (k = 0; k < j; k++) {
            if (sym[k] == pw.charAt(i)) break;
        }
        if (k == j) {
            sym[j] = pw.charAt(i);
            j++;
        }
    }
    if (j <= 4) level--;
    if (j >= 6) level++;


    //sequence of 3 or more same characters

    for (i = 0; i < pw.length; i++) {

        var chr = pw.charAt(i);
        if (RegExp(special, 'g').test(chr)) {
            chr = '\\' + chr;
        }

        var result1 = RegExp(chr + '{3}', 'g').test(pw);
        if (result1) {
            level--;
            break;
        }
    }

    //consecutive of 3 or more same characters

    for (i = 0; i < pw.length; i++) {
        var cd = pw.charCodeAt(i)    ;
        var chr = pw.charAt(i);
        var cd1 = String.fromCharCode(cd + 1.0);
        var cd2 = String.fromCharCode(cd + 2.0);
        if (RegExp(special, 'g').test(chr)) {
            chr = '\\' + chr;
        }
        if (RegExp(special, 'g').test(cd1)) {
            cd1 = '\\' + cd1;
        }
        if (RegExp(special, 'g').test(cd2)) {
            cd2 = '\\' + cd2;
        }

        var result2 = RegExp(chr + cd1 + cd2, 'g').test(pw);
        if (result2) {
            level--;
            break;
        }
        // reverse
        result2 = RegExp(cd2 + cd1 + chr, 'g').test(pw);
        if (result2) {
            level--;
            break;
        }

    }
    if (level < 2) level = 2;
    if (level > 4) level = 4;
    return level;
}

function setlevel() {
    var level = getlevel();
    document.images["level"].src = "./images/status" + level + ".gif";
}