﻿function updateGUIPasswordGood(textBoxPassword, textBoxPasswordConfirm, labelPasswordStatus) {
    textBoxPasswordConfirm.SetEnabled(true);
    textBoxPassword.GetInputElement().style.backgroundColor = '#C1EBC5';
    textBoxPassword.GetMainElement().style.backgroundColor = '#C1EBC5';
    labelPasswordStatus.GetMainElement().style.color = '#dbe86d';
}

function updateGUIPasswordBad(textBoxPassword, textBoxPasswordConfirm, labelPasswordStatus) {
    textBoxPasswordConfirm.SetEnabled(false);
    textBoxPassword.GetInputElement().style.backgroundColor = '#EBC1C9';
    textBoxPassword.GetMainElement().style.backgroundColor = '#EBC1C9';
    labelPasswordStatus.GetMainElement().style.color = '#d8511b';
}

function evaluatePasswordComplexity(password) {

    var strongRegex = new RegExp("^(?=.{8,})(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*\\W).*$", "g");
    var mediumRegex = new RegExp("^(?=.{7,})(((?=.*[A-Z])(?=.*[a-z]))|((?=.*[A-Z])(?=.*[0-9]))|((?=.*[a-z])(?=.*[0-9]))).*$", "g");
    var enoughRegex = new RegExp("(?=.{6,}).*", "g");

    if (password.length < 5) return 0;
    if (!enoughRegex.test(password)) return 1;
    if (strongRegex.test(password)) return 4;
    if (mediumRegex.test(password)) return 3;
    return 2; // Weak
}

function internalCheckPassword(textBoxPassword, textBoxPasswordConfirm, labelPasswordStatus, resetConfirmPassword) {

    var potentialPassword = textBoxPassword.GetText();
    var passwordLevel = evaluatePasswordComplexity(potentialPassword);
    var isGood = false;

    if (resetConfirmPassword != undefined && resetConfirmPassword == true) {
        textBoxPasswordConfirm.SetText("");
    }

    switch (passwordLevel) {
        case 0:
            if (labelPasswordStatus != undefined) labelPasswordStatus.SetText(registrationPasswordEvalEmpty);
            break;
        case 1:
        case 2:
            if (labelPasswordStatus != undefined) labelPasswordStatus.SetText(registrationPasswordEval1);
            break;
        case 3:
            if (labelPasswordStatus != undefined) labelPasswordStatus.SetText(registrationPasswordEval2);
            isGood = true;
            break;
        case 4:
        case 5:
            if (labelPasswordStatus != undefined) labelPasswordStatus.SetText(registrationPasswordEval3);
            isGood = true;
            break;
    }

    if (isGood) {
        updateGUIPasswordGood(textBoxPassword, textBoxPasswordConfirm, labelPasswordStatus);
    }
    else {
        updateGUIPasswordBad(textBoxPassword, textBoxPasswordConfirm, labelPasswordStatus);
    }
    return isGood;
}


