
function setOKStatus(element) {
    element.css("background-position", "top left");
}

function setErrorStatus(element) {
    element.css("background-position", "bottom left");
}


/**
 * @return true if passwords equals
 */
function passwordEquals(pass1, pass2){
    if(pass1.val() == pass2.val() && pass1.val() != "") {
        return true;
    } else {
        return false;
    }
}

/**
 * Verify email if it is an email address
 * @return true if email field match email pattern
 */
function verifyEmail(email){
    if (email.val().match("^[^.]+(\.[^.]+)*@([^.]+[.])+[a-z]{2,3}$")) {
        return true;
    } else {
        return false;
    }
}

/**
 * @return score of the password
 */
function passwordStrength(pass,username){

    var noPass = "0";
    var shortPass = "0";
    var badPass = "-16";
    var goodPass = "-31";
    var strongPass = "-45";

    var score = 0;

    if (pass.length < 1 ) {
        return noPass
    }

    if (pass.length < 4 ) {
        return shortPass
    }

    if (pass.toLowerCase() == username.toLowerCase()) return badPass

    score += pass.length * 4
    score += ( checkRepetition(1,pass).length - pass.length ) * 1
    score += ( checkRepetition(2,pass).length - pass.length ) * 1
    score += ( checkRepetition(3,pass).length - pass.length ) * 1
    score += ( checkRepetition(4,pass).length - pass.length ) * 1

    //password has 3 numbers
    if (pass.match(/(.*[0-9].*[0-9].*[0-9])/))  score += 5
    //password has 2 sybols
    if (pass.match(/(.*[!,@,#,$,%,^,&,*,?,_,~].*[!,@,#,$,%,^,&,*,?,_,~])/)) score += 5
    //password has Upper and Lower chars
    if (pass.match(/([a-z].*[A-Z])|([A-Z].*[a-z])/))  score += 10

    //password has number and chars
    if (pass.match(/([a-zA-Z])/) && pass.match(/([0-9])/))  score += 15
    //
    //password has number and symbol
    if (pass.match(/([!,@,#,$,%,^,&,*,?,_,~])/) && pass.match(/([0-9])/))  score += 15

    //password has char and symbol
    if (pass.match(/([!,@,#,$,%,^,&,*,?,_,~])/) && pass.match(/([a-zA-Z])/))  score += 15

    //password is just a nubers or chars
    if (pass.match(/^\w+$/) || pass.match(/^\d+$/) )  score -= 10

    //verifing 0 < score < 100
    if ( score < 0 )  score = 0
    if ( score > 100 )  score = 100

    if (score < 34 )  {
        return badPass
    }
    if (score < 68 ){
        return goodPass
    }
    return strongPass
}

function checkPasswordStrength(password, email, resultField){
    setOffset(resultField, passwordStrength(password.val(), email.val()));
}

function setOffset(statusElement, offset_y){
    statusElement.css("background-position", "0px " + offset_y + "px");
}

/**
 * Check the name field for regexp
 * @param name
 * @return true if the field value match the regexp
 */
function verifyName(name){
    if(name.val().match("^(.+ .+)+$") && name.val().length > 2) {
        return true;
    } else {
        return false;
    }
}

function checkRepetition(pLen,str) {
    var res = "";
    for (var i=0; i<str.length ; i++ ) {
        var repeated=true;
        for (var j=0;j < pLen && (j+i+pLen) < str.length;j++) {
            repeated=repeated && (str.charAt(j+i)==str.charAt(j+i+pLen));
        }
        if (j<pLen) {
            repeated=false;
        }
        if (repeated) {
            i+=pLen-1;
            repeated=false;
        } else {
            res+=str.charAt(i);
        }
    }
    return res;
}

/**
 * Checks the field for the length
 * @return true if the field is between values false otherwise
 */
function checkLength(inputElement, min, max) {
    if ( inputElement.val().length > max || inputElement.val().length < min ) {
        return false;
    } else {
        return true;
    }
}

/**
 * Check value of the provided field with regexp
 * @return true if the input match regexp
 */
function checkRegexp(input, regexp) {
    if (regexp.test(input.val())) {
        return true;
    } else {
        return false;
    }

}

/**
 * Check whether input is number
 * @return true if the input is number
 */
function isNumber(input) {
    return !isNaN(parseFloat(input)) && isFinite(input);
}
