if (window.disqus === undefined) {
    var disqus = {};
}

(function() {
    // jQuery plugin for enabling/disabling elements
    $.fn.enable = function(className) {
        this.removeAttr('disabled');
        this.removeClass(className || 'disabled');
        return this;
    };

    $.fn.disable = function(className) {
        this.attr('disabled', 'disabled');
        this.addClass(className || 'disabled');
        return this;
    };
})();

(function () {
    disqus.showLoginBox = function(el) {
        $.facebox.settings.opacity = 0.9;
        $.get(context.disqusUrl + '/auth/login.html', function(body) {
            var service;
            if(context.forumUrl === undefined) {
                service = 'profile';
            } else {
                service = 'admin';
            }

            var login = new DISQUS.ui.Modal();
            login.open({
                body: body,
                title: 'Log in to Your Account',
                footer: false
            });

            // Set redirect url if provided, otherwise redirect to current page
            var next = (utils.query().next) ? utils.query().next : window.location;
            $('form#login-form').attr('action', context.loginUrl + '?next=' + next);
            $('form#login-form input[type=text]')[0].focus();
            $.facebox.settings.opacity = 0; // Reset opacity
        });
    };

    // turn off autogrow. it sucks.
    disqus.autogrow = function (object) {
        return;
    };

    /**
     * Renders the user's top-right navigation bar.
     */
    function setupUserNav(data) {
        var template, built;
        if (data.username !== undefined) {
            // Remove the "Login" link
            $('#global-nav-login').remove();

            built = $('#authed-account-nav-tmpl').tmpl($.extend({}, data, {
                nav: context.navMap,
                url: context.urlMap,
                is_moderating_forums: data.has_forums,
                is_staff: data.is_staff
            }));
        } else {
            built = $('#anon-account-nav-tmpl').tmpl($.extend({}, {
                nav: context.navMap,
                url: context.urlMap
            }));
        }
        $('#account-nav').css('visibility', 'hidden').append(built);
        var default_width = $('#account-nav .user-dropdown .dropdown').width();
        var username_width = $('#account-nav .user-dropdown').width();
        $('#account-nav .user-dropdown .dropdown').width(Math.max(username_width+20, default_width));
        $('#account-nav').css('visibility', 'visible');

        DISQUS.ready(function(){
            $(function() {
                $('.edit-profile').click(function() {
                    var modal = new DISQUS.ui.ProfileEditModal();
                    modal.open({ selectedTab: 'profile' });
                    return false;
                });

                if (window.location.hash.match(/^#?account$/)) {
                    var modal = new DISQUS.ui.ProfileEditModal();
                    modal.open({ selectedTab: 'account'});
                }
            });
        });
    }

    /**
     * Framework for showing flash messages.
     */
    disqus.messages = {};
    disqus.messages.add = function(message, level) {
        var el = $('<li class="message ' + level + '">' +
                       '<p>' + message + '</p><a href="#" class="close">Hide</a>' +
                   '</li>').hide().appendTo('#message-list ul').fadeIn();
    };

    $('#message-list .close').live('click', function(){
        $(this).parent().remove();
        return false;
    });

    $(document).ready(function(){
        // we use the disqusauth cookie to determine if our login data is stale

        DISQUS.ready(function(){
            DISQUS.sexyapi.setPublicKey(context.apiPublicKey);

            DISQUS.ui.applyTooltips();

            $('.community-launcher').live('click', function() {
                var url = $(this).attr('data-forum-url');
                var modal = new DISQUS.ui.ForumCommunityModal();
                modal.open('http://' + url + '.' + context.disqusDomain + '/community.html');
                return false;
            });

            $('.profile-launcher').live('click', function() {
                var username = $(this).attr('data-profile-username');
                var anonymous = false;
                if (!username) {
                    username = $(this).attr('data-profile-hash');
                    anonymous = true;
                }
                var modal = new DISQUS.ui.ProfileModal();
                modal.open({
                    username: username,
                    anonymous: anonymous
                });
                return false;
            });

            if ($('#message-list')) {
                DISQUS.sexyapi["internal/users"].details({
                    data: {
                        with_messages: 1
                    },
                    success: function(data) {

                        if (data.premium_user) {
                            $('<li id="premium_user_dropdown"><a href="' + context.billingUrl + '">Add-ons Billing</a></li>').insertAfter('#edit-profile-dropdown');
                        }
                        
                        $.each(data.messages, function(index, value){
                            disqus.messages.add(value[1], value[2]);
                        });

                        $('#message-list .close').click(function(){
                            $('#message-list').remove();
                            return false;
                        });
                    }
                });

            }
        }); // /DISQUS.ready

        // Set login link
        $('a[rel=login]').click(function () {
            disqus.showLoginBox(this);
            return false;
        });

        // Placeholder HTML5 polyfill. Does nothing if placeholders are supported.
        // Unfortunately, this still does query and return a DOM set.
        $('input[placeholder], textarea[placeholder]').placeholder();

        setupUserNav(context.auth);
    });
})();

