AJS.$(function() {
    AJS.JFEP = AJS.JFEP || {};

    AJS.$('.twixi-toggle').live('click', function (e) {
        e.preventDefault();
        if (AJS.$(e.target).hasClass('expand-all')) {
            AJS.$('.twixi-block.collapsed').removeClass('collapsed').addClass('expanded');
        } else {
            if (AJS.$(e.target).hasClass('collapse-all')) {
                AJS.$('.twixi-block.expanded').removeClass('expanded').addClass('collapsed');
            }
        }
    });
    AJS.$('.review-filter').live('change', function (e) {
        var val = AJS.$(e.target).val(),
                visibility = AJS.$(e.target).is(':checked') ? 'block' : 'none';
        AJS.$('.review-status-' + val).css('display', visibility);
    });
    AJS.$('.tab-content').find('.project-activity:gt(0)').addClass('hidden');
    AJS.$('.activity-filter input').live('change', function (e) {
        var val = AJS.$('.activity-filter input:checked').val();
        AJS.$('.project-activity').addClass('hidden');
        AJS.$('.limit-' + val).removeClass('hidden');
    });

    AJS.JFEP.tabControl = function () {
        AJS.$('.tabs2').each(function () {
            var container = AJS.$(this);
            container.find('.tab-content:gt(0)').addClass('hidden').end().find('.tabs a').click(function (e) {
                e.preventDefault();
                var trigger = AJS.$(this),
                        target = AJS.$(this).attr('href');
                if (target.length) {
                    container.find('.tab-content:visible').addClass('hidden').end()
                            .find('.active').removeClass('active').end()
                            .find(target).removeClass('hidden');
                    trigger.parent('li').addClass('active');
                }
            });
        });
    };

    AJS.JFEP.reviewIssueToggle = function () {
        AJS.$('.review-issue-target').addClass('hidden');
        AJS.$('.review-issue-trigger').click(function(e) {
            e.preventDefault(); // Leave the mouse focus on the trigger
            var target = AJS.$(this).attr('href');
            AJS.$(target).toggleClass('hidden');
        });
    };

    AJS.$("#hide_tab").click(function() {
        AJS.$("#preview_form").submit();
    });

    AJS.JFEP.ignoreCookieName = function() {
        var username = AJS.$("#header-details-user-fullname").attr("data-username");
        if (!username) {
            username = "__ANON";
        }
        return "JFEP.ignoredAppLinks." + username;
    };

    AJS.JFEP.ignoreAppLink = function(applicationId) {
        // append cookie - have to hand-roll our cookie handling code until AJS-574 is fixed
        var cookieValue;
        var cookie = document.cookie;
        if (cookie.indexOf(AJS.JFEP.ignoreCookieName() + "=") > -1) {
            var rx = new RegExp(AJS.JFEP.ignoreCookieName() + "=([^;]*)");
            cookieValue = rx.exec(cookie)[1];
        } else {
            cookieValue = "";
        }

        if (cookieValue.indexOf(applicationId) == -1) {
            // set cookie so error messages suppressed
            cookieValue += (cookieValue.length > 0 ? "|" : "") + applicationId;
            var expires=new Date();
            expires.setDate(expires.getDate()+365);
            document.cookie = AJS.JFEP.ignoreCookieName() + "=" + cookieValue + "; " +
                    "expires=" + expires.toUTCString() + "; " +
                    "path=" + contextPath;
        }
    };

    AJS.JFEP.clearIgnoredAppLinks = function() {
        // clear cookie - have to hand-roll our cookie handling code until AJS-574 is fixed
        var expires=new Date();
        expires.setDate(expires.getDate()-5);
        document.cookie = AJS.JFEP.ignoreCookieName() + "=expired;" +
                    "expires=" + expires.toUTCString() + "; " +
                    "path=" + contextPath;
    };

    AJS.$(".ignore-applink").click(function () {
        var applinkId = AJS.$(this).attr("data-id");
        AJS.JFEP.ignoreAppLink(applinkId);
        AJS.$(this).parents(".credentials-required-message").slideUp();
    });

    AJS.$(".clear-ignored-applinks").click(function () {
        AJS.JFEP.clearIgnoredAppLinks();
        document.location.reload(true);
    });
});

