var RegFormController = function() {
    var _messages;

    this.setMessages = function(messages) {
        _messages = messages;
    }

    this.isFormOpened = function() {
        return !$("registration").hasClass("hide");
    }

    this.registerFormOpenEvent = function() {
        $("#linkReg").bind("click", _openRegForm);
        $("a.linkReg_add").live("click", _openRegForm);
    }

    var _registerSubmitEvent = function() {
        $("#regSubmit").bind("click", _submitEvent);
    }

    var _registerFormCloseEvent = function() {
        $("#linkCloseRegForm").click(function() {
            $("#registration").addClass("hide");
            $("body #fade").remove();
        });
    }

    var _openRegForm = function() {
        _drawRegForm();
        $("body #fade").remove();
        $("body").append('<div id="fade" ></div>');
        body_height = document.height || document.documentElement.scrollHeight
        $("body #fade").css("height",body_height)
        $("body #fade").fadeTo(0, 0.4);
    }

    var _drawRegForm = function() {
        if (!$("#login").hasClass("hide")) $("#login").addClass("hide");
        if (!$("#lostpassword").hasClass("hide")) $("#lostpassword").addClass("hide");
        $("#registration").removeClass("hide");
        $("#fieldLogin").focus();
    }

    var _callbackLoginCheck = function(response) {
        if(response.success) {
          $('#regForm').submit();
        }
        else {
            var errors = response.errors;
            for(var i = 0; i<errors.length; i++) {
                errors.push(errors[i]);
            }
            _drawErrors(errors);
        }
        $('#regSubmit').html('Регистрация');
        _registerSubmitEvent();
        
    }

    var _submitEvent = function(event) {
        $("#registration span.error").remove();
/*
        var errors = _validate();
        if (errors) {
            _drawErrors(errors);
            return false;
        }
*/
       	_form = $('#regForm');
        var qString = _form.formSerialize();
     	$.post("/ajax.php?", qString, _callbackLoginCheck, "json");
        $('#regSubmit').html('Подождите...');
        $('#regSubmit').unbind('click');
    }

    var _validate = function() {
        var errors = {};
        if (!$("#registration input[name=login]").attr("value") || !$("#registration input[name=login]").attr("value").match(/^[a-z0-9_]{4,30}$/i)) {
            errors['login'] = "illegal_login";
        }
        if($("#registration input[name=pass1]").val().length < 4) {
            errors['pass1'] = "illegal_password";
        }
        else if($("#registration input[name=pass1]").attr("value") != $("#registration input[name=pass2]").attr("value")) {
            errors['pass1'] = "illegal_password_repeat";
        }
        if(!emailIsValid($("#registration input[name=mail]").val())) {
            errors['mail'] = "illegal_email";
        }
        return errors;
    }


    var _drawErrors = function(errors) {
        _translate(errors);
        $.each(errors, function(idx, error) {
            $("#regForm input[name=" + idx + "]").before('<span class="error">' + error + '</span>');
//            ShowBaloon($("#registration input[name=login]"), error);
//            $("#regForm").before('<p class="error">' + error + '</p>');
        });
    }

    var _translate = function(errors) {
        for (var i=0;i < errors.length;i++) {
            errors[i] = _messages.regErrors[errors[i]];
        }
    }

    _registerSubmitEvent();
    _registerFormCloseEvent();

}

$(document).ready(function(){
    var rfc = new RegFormController();
    rfc.setMessages(messages);
    rfc.registerFormOpenEvent();
});