(function () {
    var G = Allthat.namespace('Allthat.GUI'),
        W = Allthat.namespace('Allthat.Widget');

    /**
     * Bind appropriate event listeners to the sign up, login (and so on) links
     * @module Allthat.GUI
     * @class Login
     */
    G.Login = new Class({
        Implements : [Events, Options],
        options : {
            authorized : false,
            logged_in : false
        },
        initialize : function (options) {
          window.options = options;
            this.setOptions(options);
            if (this.options.logged_in) {
                this.initializeSettingsLink();
            } else {
                this.initializeLoginLink();
            }
            this.fireEvent('initialize'); // todo: what for? :)
        },

        /**
         * bind click event listener to the "create account link" (works only if user is not signed in)
         * @method initializeCreateAccountLink
         */
        initializeCreateAccountLink : function () {
            var createAccountLink = $$('#landing_container a')[0];
            if (createAccountLink) {
                createAccountLink.addEvent('click', function (e) {
                    W.Popup.create($('signup_popup_link'), {
                        uniqueId : 'signup_popup_link',
                        toggleSelector : '#signup_popup_link',
                        closeSelector : '#signup_popup_close',
                        targetId : 'signup_outer',
                        topOffset : 10,
                        leftOffset : -48,
                        group : 'nav',
                        execute : G.selectSignUp
                    }, true);

                    if (e.preventDefault) e.preventDefault();
                    return false;
                });
            }
        },
        /**
         * initialize click handlers for the "login" and "signup" link (used only if user is not signed in)
         * @method initializeLoginLink
         */
        initializeLoginLink : function () {
            /*$('signup_popup_link').addEvent('click', function (e) {
                W.Popup.create(this, {
                    uniqueId : 'signup_popup_link',
                    toggleSelector : '#signup_popup_link',
                    closeSelector : '#signup_popup_close',
                    targetId : 'signup_outer',
                    topOffset : 10,
                    leftOffset : -48,
                    group : 'nav',
                    execute : G.selectSignup
                });

                if (e.preventDefault) e.preventDefault();
                return false;
            });*/
            // initializing login link
//            $('login_popup_link').addEvent('click', function (e) {
//                W.Popup.create(this, {
//                    uniqueId : 'login_popup_link',
//                    toggleSelector : '#login_popup_link',
//                    closeSelector : '#login_popup_close',
//                    targetId : 'login_outer',
//                    leftOffset : 0,
//                    group : 'nav',
//                    execute : G.selectUsername
//                });
//
//                if (e.preventDefault) e.preventDefault();
//                return false;
//            });
            // initialize "enter" key event listeners.
            $$('#login_form input[type!=image]').addEvent('keypress', function (e) {
                if (e.key == 'enter') {
                    var f = document.login;
                    if (f && f.submit) {
                        f.submit();
                    }
                };
            }, this);

            this.fireEvent('loginLinksInitialize');
        },
        /**
         * bind setting link click event listeners (used only if user is signed in)
         * @method initializeSettingsLink
         */
        initializeSettingsLink : function () {
            $('my_settings_popup_link').addEvent('click', function (e) {
                W.Popup.create(this, {
                    uniqueId : 'my_settings_popup_link',
                    toggleSelector : '#my_settings_popup_link',
                    closeSelector : '#my_settings_popup_close',
                    targetId : 'settings_outer',
                    topOffset : 10,
                 //   leftOffset : -145,
                    group: 'nav'
                });

                if (e.preventDefault) e.preventDefault();
                return false;
            });

            var logoutLink = $('logoutLink');
            if (logoutLink){
                logoutLink.addEvent('click', function (e) {
                    Facebook.logout();
                    if (window.console != undefined) {
                        console.log("Facebook.logout();");
                    }
                    return false;
                });
            }

            var loginForm = $$('form[name=login]')[0];
            if (loginForm) {
                loginForm.addEvent('submit', function (e) {
                    var valid = true,
                        errors = [];
                    // validate presence of username, email
                    if (!$(this.username).get('value').trim().length) {
                        $('error_username').removeClass('hide');
                        valid &= false;
                    } else {
                        $('error_username').addClass('hide');
                    }

                    if (!$(this.login).get('value').trim().length) {
                        $('error_empty_email').removeClass('hide');
                        valid &= false;
                    } else {
                        $('error_empty_email').addClass('hide');
                    }

                    // validate equalities of new password and new password confirmation (if any)
                    if ($(this.password).get('value').trim()) {
                        if (!($(this.password).get('value') == $(this.password_confirmation).get('value'))) {
                            $('error_new_password').removeClass('hide');
                            valid &= false;
                        } else {
                            $('error_new_password').addClass('hide');
                        }
                    }

                    if (!valid) {
                        if (e.preventDefault) { e.preventDefault(); }
                        return false;
                    }
                });
            }

            this.representStatus();

            this.fireEvent('settingsLinkInitialize');
        },

        representStatus : function () {
            var params = Allthat.params,
                settingsForm = $$('form[name=login]')[0];


            if (params['status'] && (params['status'].contains('phonenumber_in_use') || params['status'].contains('twittername_in_use') || params['status'].contains('email_in_use'))) {
                // display error messages
                if (params['status'].contains('phonenumber_in_use')) {
                    $(settingsForm.phonenumber).set('value', (params['phonenumber']) ? params['phonenumber'] : '');
                    $('error_settings_phonenumber').removeClass('hide');
                } else {
                    $('error_settings_phonenumber').addClass('hide');
                }
                if (params['status'].contains('twittername_in_use')) {
                    $(settingsForm.twitter).set('value', (params['twitter']) ? params['twitter'] : '');
                    $('error_settings_twitter').removeClass('hide');
                } else {
                    $('error_settings_twitter').addClass('hide');
                }
                if (params['status'].contains('email_in_use')) {
                    $(settingsForm.login).set('value', (params['email']) ? params['email'] : '');
                    $('error_email_in_use').removeClass('hide');
                } else {
                    $('error_email_in_use').addClass('hide');
                }


                // show settings popup window
                var settingsLink = $('my_settings_popup_link');
                W.Popup.create(settingsLink, {
                    uniqueId : 'my_settings_popup_link',
                    toggleSelector : '#my_settings_popup_link',
                    closeSelector : '#my_settings_popup_close',
                    targetId : 'settings_outer',
                    topOffset : 10,
                    leftOffset : -460,
                    group: 'nav'
                });
            }
        },

        initializeForgotPasswordUserNameCopy : function () {
            $$('#forgot_password a')[0].addEvent('click', function (e) {
                e.preventDefault();

                $('forgot_email').set('value', $('login_username').get('value'));
                $('forgot_password').submit();

                return false;
            });
        }
    });
})();