var login_verified = 0;
var pwd_verified = 0;
var email_verified = 0;
var captcha_verified = 0;

function generatePassword()
{
    var pwd = _generatePassword();
    pwd_verified = 1;
    $('register_password').value = pwd;
    $('register_password_bis').value = pwd;
    $('register_password_status').innerHTML = "Запишите, пожалуйста пароль: <strong>" + pwd + "</strong>";
}

function _generatePassword()
{
    var length = 8;
    var sPassword = "";
    var noPunction = true;

    for (var i=0; i < length; i++) {
        numI = getRandomNum();
        if (noPunction) {
            while (checkPunc(numI)) {
                numI = getRandomNum();
            }
        }

        sPassword += String.fromCharCode(numI);
    }

    return sPassword;
}

function getRandomNum()
{
    // between 0 - 1
    var rndNum = Math.random()

    // rndNum from 0 - 1000
    rndNum = parseInt(rndNum * 1000);

    // rndNum from 33 - 127
    rndNum = (rndNum % 94) + 33;

    return rndNum;
}

function checkPunc(num)
{
    if ((num >=33) && (num <=47)) { return true; }
    if ((num >=58) && (num <=64)) { return true; }
    if ((num >=91) && (num <=96)) { return true; }
    if ((num >=123) && (num <=126)) { return true; }

    return false;
}

function verifyingLogin()
{
    show_i();

    login_verified = -1;
    with ($('register_login_status')) {
        style.color = '';
        firstChild.nodeValue = 'идёт проверка логина…';
    }
}

function receiveLoginVerification(req, json)
{
    hide_i();

    if (json[0] == true) {
        login_verified = 1;
        with ($('register_login_status')) {
            style.color = 'green';
            firstChild.nodeValue = 'Cпасибо';
        }
    } else {
        login_verified = 0;
        with ($('register_login_status')) {
            style.color = 'red';
            firstChild.nodeValue = 'Извините, но этот логин уже занят';
        }
    }
}

function verifyPassword()
{
    var pwd1 = $('register_password').value;
    var pwd2 = $('register_password2').value;

    pwd_verified = 0;

    if (pwd1.length == 0) {
        $('register_password_status').style.color = '';
        $('register_password_status').firstChild.nodeValue = 'Введите, пожалуйста, пароль';
    } else if (pwd1.length < 5) {
        $('register_password_status').style.color = 'red';
        $('register_password_status').firstChild.nodeValue = 'Длина пароля должен быть не менее 5 символов';
    } else if (pwd2.length == 0) {
        $('register_password_status').style.color = '';
        $('register_password_status').firstChild.nodeValue = 'Введите пароль в поле подтверждения, пожалуйста';
    } else if (pwd2 != pwd1) {
        $('register_password_status').style.color = 'red';
        $('register_password_status').firstChild.nodeValue = 'Пароли не совпадают. Повторите ввод, пожалуйста';
    } else {
        $('register_password_status').style.color = 'green';
        $('register_password_status').firstChild.nodeValue = 'Спасибо';
        pwd_verified = 1;
    }

}

function verifyingEmail()
{
    show_i();

    email_verified = -1;
    with ($('register_email_status')) {
        style.color = '';
        firstChild.nodeValue = 'идёт проверка адреса эл.почты…';
    }
}

function receiveEmailVerification(req, json)
{
    hide_i();

    var res = json[0];
    if (res == 'ok') {
        email_verified = 1;
        with ($('register_email_status')) {
            style.color = 'green';
            firstChild.nodeValue = 'Спасибо';
        }
    } else if (res == 'bad') {
        email_verified = 0;
        with ($('register_email_status')) {
            style.color = 'red';
            firstChild.nodeValue = 'Адрес электронной почты набран с ошибкой';
        }
    } else if (res == 'used') {
        email_verified = 0;
        with ($('register_email_status')) {
            style.color = 'red';
            firstChild.nodeValue = 'Этот адрес электронной почты уже используется пользователем сайта';
        }
    }
}



function validateRegisterForm()
{
    $('register_submit').disabled = true;

    if (login_verified == -1 || pwd_verified == -1 || email_verified == -1) {
        window.setTimeout('validateRegisterForm()', 100);
        return false;
    }

    if (login_verified == 1 && pwd_verified == 1 && email_verified == 1) {
        new Ajax.Request('/user/registerJson/', {
            asynchronous:true,
            evalScripts:false,
            onComplete:function(request, json){registrationSubmitted(request, json)},
            onLoading:function(request, json){submittingRegistration()},
            parameters:$('registerForm').serialize(true)
        })
    } else {
        highlightErrors();
        $('register_submit').disabled = false;
    }

    return false;
}

function highlightErrors()
{
    if ($('register_email').value.length == 0)
        email_verified = 0; // Защита на случай если пользователь попадёт на страницу регистрации через кнопку Back

    if (login_verified == 0)
        new Effect.Highlight('register_login', {startcolor:'#ff0000', endcolor:'#ffffff'});

    if (pwd_verified == 0) {
        new Effect.Highlight('register_password', {startcolor:'#ff0000', endcolor:'#ffffff'});
        new Effect.Highlight('register_password2', {startcolor:'#ff0000', endcolor:'#ffffff'});
    }

    if (email_verified == 0)
        new Effect.Highlight('register_email', {startcolor:'#ff0000', endcolor:'#ffffff'});

    if (captcha_verified == 0)
        new Effect.Highlight('register_captcha', {startcolor:'#ff0000', endcolor:'#ffffff'});

    if (!(login_verified == 1 && pwd_verified == 1 && email_verified == 1))
        new Effect.Shake('register_submit');
}

function submittingRegistration()
{
    show_i();
}

function registrationSubmitted(request, json)
{
    hide_i();
    captcha_verified = 1; // сбрасываю флаг перед обработкой рез-та

    if (json[0] == 'ok') {
        try {
            var url = json[1];
            var container = $('register_container');

            Effect.SlideUp(
                'register_container',
                {
                    'afterFinish': function (o)
                    {
                        container.innerHTML = '';

                        container.appendChild(Builder.node('p', 'Регистрация прошла успешно!'));
                        container.appendChild(Builder.node('p', [
                            "Через несколько секунд вы будете перенаправлены дальше. Если автоматика не сработала, то нажмите ",
                            Builder.node('a', {'href': url}, 'сюда'),
                            " ",
                            Builder.node('img', {'src': '/images/indicator.white.gif'})
                        ]));

                        Effect.SlideDown(
                            'register_container',
                            {
                                'afterFinish': function (o) { window.location.href = url }
                            }
                        );
                    }
                }
            );
        } catch (e) {
            alert('exception: ' + e);
        }
    } else {
        json[1].each(
            function (item, index)
            {
                if (item == 'email')
                    receiveEmailVerification(null, ['bad']);
                else if (item == 'email-used')
                    receiveEmailVerification(null, ['used']);
                else if (item == 'login')
                    receiveLoginVerification(null, [false]);
                else if (item == 'captcha')
                    captcha_verified = 0;
                else if (item == 'password') {
                    pwd_verified = 0;
                    $('register_password_status').style.color = 'red';
                    $('register_password_status').firstChild.nodeValue = 'Сервер не принял пароль';
                }

            }
        );
        highlightErrors();
        $('register_submit').disabled = false;
    }
}

function show_i()
{
    $('submit_indicator').style.visibility = 'visible';
}

function hide_i()
{
    $('submit_indicator').style.visibility = 'hidden';
}
