(function($) {
    $.fn.more = function(options) {
        var defaults = {
            source: "",
            xsl: "",
            refresh: false,
            showDate: false,
            full: false,
            moreText: "more...",
            lessText: "less...",
            boardIds: "",
            category: "",
            depts: "",
            max: 30
        };
        var originalLength = $(this).children().size();

        var options = $.extend(defaults, options);

        return this.each(function() {
            obj = $(this);

            obj.ready(function() {
                createMoreLink(obj, options, originalLength);
            });
        });
    };

    function createMoreLink(obj, options, originalLength) {
        obj.after($('<a class="enet_more_link" href="#">' + options.moreText + '</a>').click(function() {
            var numResults = options.max;

            if ($(this).text() == options.lessText) {
                numResults = originalLength;
            }

            loadData(obj, options, numResults, originalLength);

            return false;
        }));
    }

    function loadData(obj, options, numResults, originalLength) {
        obj.append('<img id="loading" src="http://www.elon.edu/e-net/images/indicator.gif" alt="loading..." />');

        $("<div></div>").load("/e-net/xml.ashx?max=" + numResults + "&refresh=" + options.refresh + "&full=" + options.full + "&showDate=" + options.showDate + "&boardIds=" + options.boardIds + "&xsl=" + options.xsl + "&source=" + options.source + "&category=" + options.category + "&depts=" + options.depts, function() {
            $("#loading").remove();
            var results = this;
            displayData(obj, options, $(results), originalLength);
        });
    }

    function displayData(obj, options, results, originalLength) {
        obj.hide();

        var liResults;

        if (options.boardIds == "5") {
            // special case for headlines just to save some processing
            liResults = results.find("li:not([class^=ecast])");  // this strips out the parent ul, with special case to ignore all li that have a class begining with "ecast"
        }
        else {
            liResults = results.find("li");
        }

        obj.html(liResults);
        obj.slideDown("fast");
        var currentLength = obj.children().size();

        if (originalLength < currentLength) {
            obj.parent().find(".enet_more_link").text(options.lessText).removeClass("enet_more_link").addClass("enet_less_link");
            obj.children("li:nth(" + originalLength + ")").css("border-top", "1px dashed #666");
        }
        else {
            obj.parent().find(".enet_less_link").text(options.moreText).removeClass("enet_less_link").addClass("enet_more_link");
            obj.children("li:nth(" + originalLength + ")").css("border-top", "none");
        }

        obj.triggerHandler("morePopulated");
    }

})(jQuery);
