
function toAsteriskString(s)
{
    if (!isNonNullAndNonEmptyString(s))
        return "";

    var result = "";
    for (var i = 0; i < s.length; i++)
        result += '*';

    return result;
}

function loginForm_onSubmit()
{
    var password = document.loginForm.password.value;
    var ac       = document.loginForm.ac.value;
    document.loginForm.ar.value = (
        isNonNullAndNonEmptyString(password) && isNonNullAndNonEmptyString(ac) ?
        c0(password, ac) : "");

    document.loginForm.ac.value = "";
    document.loginForm.ac.disabled = true;

    document.loginForm.password.value = toAsteriskString(password);

    return true;
}

function c0(x, y)
{
    return c8(c4(x, y));
}

function c1(x, y)
{
    x[y >> 5] |= 0x80 << (24 - y % 32);
    x[((y + 64 >> 9) << 4) + 15] = y;

    var w = Array(80);
    var a =  1732584193;
    var b = -271733879;
    var c = -1732584194;
    var d =  271733878;
    var e = -1009589776;

    for (var i = 0; i < x.length; i += 16)
    {
        var olda = a;
        var oldb = b;
        var oldc = c;
        var oldd = d;
        var olde = e;

        for (var j = 0; j < 80; j++)
        {
            if (j < 16)
                w[j] = x[i + j];
            else
                w[j] = c6(w[j - 3] ^ w[j - 8] ^ w[j - 14] ^ w[j - 16], 1);

            var t = c5(c5(c6(a, 5), c2(j, b, c, d)), c5(c5(e, w[j]), c3(j)));
            e = d;
            d = c;
            c = c6(b, 30);
            b = a;
            a = t;
        }

        a = c5(a, olda);
        b = c5(b, oldb);
        c = c5(c, oldc);
        d = c5(d, oldd);
        e = c5(e, olde);
    }

    return Array(a, b, c, d, e);
}

function c2(t, b, c, d)
{
    if (t < 20) return (b & c) | ((~b) & d);
    if (t < 40) return b ^ c ^ d;
    if (t < 60) return (b & c) | (b & d) | (c & d);
    return b ^ c ^ d;
}

function c3(t)
{
    return ((t < 20) ?  1518500249 :
            (t < 40) ?  1859775393 :
            (t < 60) ? -1894007588 :
                        -899497514);
}

function c4(x, y)
{
    var a = c7(x);
    if (a.length > 16)
        a = c1(a, x.length * 8);

    var b = Array(16), c = Array(16);
    for (var i = 0; i < 16; i++)
    {
        b[i] = a[i] ^ 0x36363636;
        c[i] = a[i] ^ 0x5C5C5C5C;
    }

    var d = c1(b.concat(c7(y)), 512 + y.length * 8);
    return c1(c.concat(d), 512 + 160);
}

function c5(x, y)
{
    var a = (x & 0xFFFF) + (y & 0xFFFF);
    var b = (x >> 16) + (y >> 16) + (a >> 16);
    return (b << 16) | (a & 0xFFFF);
}

function c6(x, y)
{
    return (x << y) | (x >>> (32 - y));
}

function c7(x)
{
    var a = Array();
    var b = (1 << 8) - 1;
    for (var i = 0; i < x.length * 8; i += 8)
        a[i >> 5] |= (x.charCodeAt(i / 8) & b) << (32 - 8 - i % 32);

    return a;
}

function c8(x)
{
    var a = "0123456789abcdef";
    var b = "";
    for (var i = 0; i < x.length * 4; i++)
    {
        b += a.charAt((x[i >> 2] >> ((3 - i % 4) * 8 + 4)) & 0xF) +
             a.charAt((x[i >> 2] >> ((3 - i % 4) * 8    )) & 0xF);
    }

    return b;
}

