///////////////////////////////////
//         Clan Systeem          //
//   (c) 2006 Second-vision.nl   //
//   Under the GNU GPL license   //
//     info@second-vision.nl     //
///////////////////////////////////

/* <![CDATA[ */
function init()
{
    var enablePasswdGen = true; 
    var specialCharCheck = false;
    var passwdCheckerLevel = "normal"; //normal, easy, difficult
    if(enablePasswdGen == true)
    {
        createRandomPassword(specialCharCheck,passwdCheckerLevel);
    }

        defaultColors();
        passwdChecker();

}

function passwdChecker() {
    
    var forbiddenWords = new Array("test","admin","satan","god","password","money","sex","love","abc","def"); // Forbidden passwords
    var forbiddenMessage = " is a forbidden word and cannot be used as a password.";
    var spaceErrorMessage = "You are not allowed to use spaces in passwords.";
    var specialCharMessage = "You are not allowed to use special characters and spaces.";
    var colorArray = new Array("#336633","#339900","#33CC00","#33FF00","#99FFCC"); // from weak to strong.

    var specialCharCheck = false;
    var passwdCheckerLevel = "normal"; //normal, easy, difficult
    var setContinueLevel = 1; // When is a user able to continue... Lowest level = 0, highest = 5.
    
    var securityLevel = 0;
    var safetyLength = 5; 

    var typeZero = "";
    var typeOne = "very weak";
    var typeTwo = "weak";
    var typeThree = "mediocre";
    var typeFour = "strong";
    var typeFive = "very strong";

    var upperCaseRegExp = new RegExp("[^A-Z]");
    var lowercaseRegExp = new RegExp("[^a-z]");
    var typeSwitch = 0;
    var fieldName = document.getElementById("passwdBox").value;
    var specialRegExp = new RegExp("[^A-Za-z0-9]");


    var inputField = fieldName.toLowerCase();
    
    for(i = 0; i < forbiddenWords.length; i++)
    {

        if(inputField.match(forbiddenWords[i]) == forbiddenWords[i])
        {
            alert(forbiddenWords[i] + forbiddenMessage);
            fieldName = fieldName.substr(0,(fieldName.length - forbiddenWords[i].length));
            document.getElementById("passwdBox").value = fieldName;
        }
    }

    if(fieldName.length > safetyLength)
    {
        securityLevel = securityLevel + 5;
    }

    if(fieldName.length > 0)
    {
        if(specialRegExp.test(fieldName.substring(0,1)) == false)
        {
            securityLevel++;
        }
        else
        {
            securityLevel--;
        }
    }
    
    var spaceArray = fieldName.split(" ");    

    if(specialCharCheck == true)
    {
        if(spaceArray.length > 1)
        {
            alert(spaceErrorMessage);
            document.getElementById("passwdBox").value = fieldName.substr(0,(fieldName.length-1));
        }
    }

    var charArray = fieldName.split("");

    for(i = 0; i < charArray.length; i++){


        if(!isNaN(charArray[i]))
        {
            securityLevel++;
        }

        if(lowercaseRegExp.test(charArray[i]) == false)
        {
            securityLevel++;
        }

        if(upperCaseRegExp.test(charArray[i]) == false)
        {
            securityLevel++;
        }

        if(upperCaseRegExp.test(charArray[i]) == false && upperCaseRegExp.test(charArray[i+1]) == false )
        {
            securityLevel--;
        }

        if(lowercaseRegExp.test(charArray[i]) == false && lowercaseRegExp.test(charArray[i+1]) == false )
        {
            securityLevel--;
        }
                
        if(!isNaN(charArray[i]) && !isNaN(charArray[i+1]) )
        {
            securityLevel--;
        }

        if(specialCharCheck == false)
        {
            if(specialRegExp.test(charArray[i]) == true)
            {
            alert(specialCharMessage);

            document.getElementById("passwdBox").value  = "";

                if(fieldName.length > 1)
                {
                    document.getElementById("passwdBox").value = fieldName.substr(0,(fieldName.length-1));                
                }
            }
        }

        else{

        if(specialRegExp.test(charArray[i]) == true)
        {
            securityLevel++;
        }

        if(specialRegExp.test(charArray[i]) == true && specialRegExp.test(charArray[i+1]) == true )
        {
            securityLevel--;
        }

        }
        
    }
    
    var charArray2 = inputField.split("");
    charArray2.sort();
    
    for(i=0; i < charArray2.length; i++)
    {
                
        if(charArray2[i] == charArray2[i+1])
        {
            securityLevel--;
        }
        
    }
    
    if(passwdCheckerLevel == "easy")
    {
        if(charArray.length > safetyLength)
        {
            securityLevel = securityLevel + 2;
        }
    }
    else if(passwdCheckerLevel == "difficult")
    {
        if(charArray.length > safetyLength)
        {
            securityLevel = securityLevel - 2;
        }
    }
    
    if(securityLevel < 1 && charArray.length > 1)
    {
        securityLevel = 4;
    }
    
    if(securityLevel > 25)
    {
        securityLevel = 25;
    }
    
    switch(securityLevel)
    {
        case 0: typeSwitch = 0; break
        case 1: typeSwitch = 1; break
        case 2: typeSwitch = 1; break
        case 3: typeSwitch = 2; break
        case 4: typeSwitch = 2; break
        case 5: typeSwitch = 3; break
        case 6: typeSwitch = 3; break
        case 7: typeSwitch = 3; break
        case 8: typeSwitch = 3; break
        case 9: typeSwitch = 3; break
        case 10: typeSwitch = 4; break
        case 11: typeSwitch = 4; break
        case 12: typeSwitch = 4; break
        case 13: typeSwitch = 5; break
        case 14: typeSwitch = 5; break
        case 15: typeSwitch = 5; break
        case 16: typeSwitch = 5; break
        case 17: typeSwitch = 5; break
        case 18: typeSwitch = 5; break
        case 19: typeSwitch = 5; break
        case 20: typeSwitch = 5; break
        case 21: typeSwitch = 5; break
        case 22: typeSwitch = 5; break
        case 23: typeSwitch = 5; break
        case 24: typeSwitch = 5; break
        case 25: typeSwitch = 5; break
        default: typeSwitch = 0; break
    }

    switch(typeSwitch)
    {
        case 0: txtAnswer = typeZero; break
        case 1: txtAnswer = typeOne; break
        case 2: txtAnswer = typeTwo; break
        case 3: txtAnswer = typeThree; break
        case 4: txtAnswer = typeFour; break
        case 5: txtAnswer = typeFive; break
    }
    
    if(typeSwitch < setContinueLevel)
    {
    document.getElementById("submitButton").disabled = true;
    }
    else
    {
    document.getElementById("submitButton").disabled = false;
    }
    
    document.getElementById("passwdStatus").value  = txtAnswer;

    alternateColor(typeSwitch, colorArray);

}

function alternateColor(securityLevel, colorArray)
{

    defaultColors();

    tableArray = new Array("bg1","bg2","bg3","bg4","bg5");

    for(i = 0; i < securityLevel; i++)
    {

        document.getElementById(tableArray[i]).style.background = colorArray[i];

    }
}

function defaultColors()
{
    document.getElementById("bg1").style.background = '#CCCCCC';
    document.getElementById("bg2").style.background = '#CCCCCC';
    document.getElementById("bg3").style.background = '#CCCCCC';
    document.getElementById("bg4").style.background = '#CCCCCC';
    document.getElementById("bg5").style.background = '#CCCCCC';
}

function createRandomPassword(specialCharCheck,passwdCheckerLevel)
{
    var charArray = new Array("0123456789","ABCDEFGHIJKLMNOPQRSTUVWXYZ","abcdefghijklmnopqrstuvwxyz");

    if(specialCharCheck == true)
    {
        charArray[3] = "_%^&$#@!()/*+-";
    }

    var stringLength = 4;
    var randomstring = "";
    var numReset = 0;

    for (var i = 0; i < (charArray.length * stringLength); i++)
    {
        var rnum = Math.floor(Math.random() * charArray[numReset].length);

        randomstring += charArray[numReset].substring(rnum,rnum+1);

        if(numReset == (charArray.length-1)){
            numReset = 0;
        }
        numReset++;
    }
    
    if(passwdCheckerLevel == "difficult")
    {
        passwordString = randomstring.substr(0,12);
    }
    else if(passwdCheckerLevel == "easy")
    {
        passwordString = randomstring.substr(0,8);
    }
    else
    {
        passwordString = randomstring.substr(0,10);
    }
    
    document.getElementById('passwdBox').value = passwordString;
}

window.onload = init; 
/* ]]> */