var digits = "0123456789";
var lowerLetters = "abcdefghijklmopqrstuvwxyz";
var upperLetters = "ABCDEFGHIJKLMOPQRSTUVWXYZ";
var lowerLettersRu = "абвгдеёжзийклмнопрстуфхцчшщьыъэюя";
var upperLettersRu = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯ";
var lowerLettersLt = "ąčęėįšųūž";
var upperLettersLt = "ĄČĘĖĮŠŲŪŽ";
var otherSigns = "~`!@#$%^&*+-=_|\\/()[]{}<>,.;:?\"\'";

function validate_psw(password) {

    if(password == '') return -1;
    
    var hasDigits = false;
    var hasLowerLetters = false;
    var hasUpperLetters = false;
    var hasLowerLettersRu = false;
    var hasUpperLettersRu = false;
    var hasLowerLettersLt = false;
    var hasUpperLettersLt = false;
    var hasOtherSigns = false;
    
    for(i=0; i<password.length; i++) {
        hasDigits |= digits.indexOf(password.charAt(i)) >= 0;
        hasLowerLetters |= lowerLetters.indexOf(password.charAt(i)) >= 0;
        hasUpperLetters |= upperLetters.indexOf(password.charAt(i)) >= 0;
        hasLowerLettersRu |= lowerLettersRu.indexOf(password.charAt(i)) >= 0;
        hasUpperLettersRu |= upperLettersRu.indexOf(password.charAt(i)) >= 0;
        hasLowerLettersLt |= lowerLettersLt.indexOf(password.charAt(i)) >= 0;
        hasUpperLettersLt |= upperLettersLt.indexOf(password.charAt(i)) >= 0;
        hasOtherSigns |= otherSigns.indexOf(password.charAt(i)) >= 0;
    }

    var m =
      (hasDigits ? 10 : 0) +
      (hasLowerLetters ? 26 : 0) +
      (hasUpperLetters ? 26 : 0) +
      (hasLowerLettersRu ? 33 : 0) +
      (hasUpperLettersRu ? 33 : 0) +
      (hasLowerLettersLt ? 9 : 0) +
      (hasUpperLettersLt ? 9 : 0) +
      (hasOtherSigns ? 32: 0);

    var n = password.length;

    var R = Math.pow(m, n);

    var strength = Math.log(R);
    
    return strength <= 29.0 ? 0 : (strength <= 33.0 ? 1 : 2);
}
