(function () {

    /**
     * Загрузка фотографий
     *
     * @param root

     * @field root      root
     *
     */
    PICSA.AccessPanel = function (root) {
        var me = this;
        Observable(me);
        var current_user = PICSA.current_user;

        if(current_user){
            $('<div id="auth">' +
                '<p>' + current_user.login + '</p>' +
                //'<a href="#">Настройка</a><br />' +
                '<a href="/logout">Выйти</a>' +
              '</div>').appendTo(root);
        }else{
            var arr = ['<div id="auth">',
                '<div id="indicator"></div>',
                '<div class="block" id="signup" style="display:none">',
                    '<a href="#" class="signin">Вход</a>',
                    '<a href="#" class="signup active">Регистрация</a>',
                    '<form action="/users" method="post" >',
                        '<label>Логин</label>',
                        '<input class="textinput" id="user_login" name="user[login]" size="30" type="text" /><br />',
                        '<label>Пароль</label>',
                        '<input class="textinput" id="user_password" name="user[password]" size="30" type="password" /><br />',
                        '<label for="email">Email</label>',
                        '<input class="textinput" id="user_email" name="user[email]" size="30" type="text" /><br />',
                        '<div class="button-div">',
                            '<label></label><input class="button" id="registerButton" name="commit" type="submit" value="Зарегистрироваться" />',
                        '</div>',
                        '<div id="signup-error" class="error"></div>',
                        '<div id="signup-message" class="message"></div>',
                    '</form>',
                '</div>',
                '<div class="block" id="signin">',
                    '<a href="#" class="signin active">Вход</a>',
                    '<a href="#" class="signup">Регистрация</a>',
                    '<form action="/session" method="post" >',
                        '<label>Логин</label>',
                        '<input class="textinput" id="login" name="login" type="text" /><br />',
                        '<label>Пароль</label>',
                        '<input class="textinput" id="password" name="password" type="password" /><br />',
                        '<a href="#" class="remind">Напомнить</a>',
                        '<div class="button-div">',
                            '<label></label><input class="button" id="loginButton" name="commit" type="submit" value="Войти" />',
                        '</div>',
                        '<div id="signin-error" class="error"></div>',
                        '<div id="signin-message" class="message"></div>',
                    '</form>',
                '</div>',
                '<div class="block" id="remind" style="display:none">',
                    '<a href="#" class="signin">Вход</a>',
                    '<a href="#" class="signup">Регистрация</a>',
                    '<form action="/users/remind" method="post" >',
                        '<label for="email">Почта</label>',
                        '<input class="textinput" id="email" name="email" type="text" /><br />',
                        '<div class="button-div">',
                            '<label></label><input class="button" id="loginButton" name="commit" type="submit" value="Выслать пароль" /><br />',
                        '</div>',
                        '<div id="remind-error" class="error"></div>',
                        '<div id="remind-message" class="message"></div>',
                    '</form>',
                '</div>',
            '</div>'];
        $(arr.join('')).appendTo(root);

        $('#auth a.signup:not(.active)').click(function(){
            me.hideAll();
            $('#auth #signup').show();
            return false;
        });
        $('#auth a.signin:not(.active)').click(function(){
            me.hideAll();
            $('#auth #signin').show();
            return false;
        });
        $('#auth a.remind:not(.active)').click(function(){
            me.hideAll();
            $('#auth #remind').show();
            return false;
        });

        $("#auth form").submit(function(){
            var form = this;

            $.ajax({
                beforeSend: function(request){me.showIndicator();me.disableButton();},
                data: $.param($(form).serializeArray()),
                dataType: "script",
                success: function(request){
                    me.showResponce($(form).parent().attr('id'), request);
                },
                type: "POST",
                url: $(form).attr('action')//"/session"
            });
            return false;
        });
        } //end if
    }

    PICSA.AccessPanel.prototype = {
        hideAll: function(){
            $('#auth .block').hide();
        },
        showIndicator: function(){
            $('#auth #indicator').show();
        },
        hideIndicator: function(){
            $('#auth #indicator').hide();
        },
        showResponce: function(act, resp){
            var me = this;
            
            me.hideIndicator();
            var data = eval('(' + resp + ')');
            if(data.success){
                me.showMessage(act, data.message, data.return_to);
            }else{
                me.showError(act, data.message);
            }
        },
        showError: function(act, message){
            var me = this;

            me.hideError();
            me.enableButton();
            $('#auth #'+act+'-error').html(message).show();//slideDown();
        },
        showMessage: function(act, message, return_to){
            var me = this;

            me.hideError();
            me.hideButton();
            $('#auth .message').fadeOut();
            $('#auth #'+act+'-message').html(message).slideDown();

            if(act=='signin'){
                setTimeout(function(){
                    location.href = return_to;
                    }, 1000);
            }
        },
        hideError: function(){
            $('#auth .error').hide();
        },
        disableButton: function(){
            $('#auth .button').attr('disabled', true);
        },
        enableButton: function(){
            $('#auth .button').attr('disabled', false);
        },
        hideButton: function(){
            $('#auth .button').hide();
        }
    };

})();
