(function($) {

    $.fn.truncate = function(options) {

        var opts = $.extend({}, $.fn.truncate.defaults, options);

        $(this).each(function() {

            var orig_text = $(this).html();

            var split_text = orig_text.split(" ");
            if (opts.nof_words < split_text.length) {
                var truncated_text = split_text.slice(0, opts.nof_words).join(" ");
                var more_text = split_text.slice(opts.nof_words, split_text.length).join(" ");
            } else {
                return; // exit early if short enough
            }

            var truncated_node = $(this).empty().html(truncated_text);
            var ellipsis_span = $("<span id=\"ellipsis\"> &hellip; </span>");
            truncated_node.append(ellipsis_span);

            if (more_text != "") {
                var more_text_span = $("<span id=\"more_text\"> " + more_text + "</span>");
                var more_link = $("<a id=\"more_link\" href=\"#\">" + opts.more + "</a>");
                truncated_node.append(more_text_span);
                truncated_node.append(more_link);

                more_text_span.hide();

                more_link.click(function() {
                    var container = $(this).parent();
                    container.children("span#ellipsis").remove();
                    container.children("a#more_link").remove();
                    var more_text = container.children("span#more_text").html();
                    container.children("*").remove;
                    var full_text = container.html() + more_text;
                    container.html(full_text);
                    return false;
                });
            }
        });
    }

    $.fn.truncate.defaults = {
        nof_words: 100,
        more: "more"
    };

})(jQuery);

