//ellipsis plugin http://devongovett.wordpress.com/2009/04/06/text-overflow-ellipsis-for-firefox-via-jquery/ + comments + custom mods

(function($) {
    $.fn.ellipsis = function(lines, enableUpdating, moreText, lessText) {
        return $(this).each(function() {
            var el = $(this);
            if (el.css("overflow") == "hidden") {
                var originalText = el.html();
                var availWidth = el.width();
                var availHeight = el.height();
                var MoreLessTag;

                if (moreText) {
                    enableUpdating = true;
                    MoreLessTag = " <a class='MoreLessTag' href='#' >" + moreText + "</a>";
                } else MoreLessTag = ""; 

                var t = $(this.cloneNode(true))
                    .hide()
                    .css({
                        'position': 'absolute',
                        'overflow': 'visible',
                        'max-width': 'none',
                        'max-height': 'none'
                    });

                if (lines) t.css("height", "auto").width(availWidth);
                else t.css("width", "auto");

                el.after(t); 

                var fullHeight = t.height();
                var avail = (lines) ? availHeight : availWidth;
                var test = (lines) ? t.height() : t.width();
                var foundMin = false, foundMax = false;

                if (test > avail) {
                    //Binary search style trimming of the temp element to find its optimal size
                    var min = 0;
                    var max = originalText.length;
                    while (min <= max) {
                        var trimLocation = (min + max) / 2;
                        var text = originalText.substr(0, trimLocation);
                        
                        t.html(text + "&hellip;" + MoreLessTag); 

                        test = (lines) ? t.height() : t.width();

                        if (test > avail) {
                            if (foundMax)
                                foundMin = true; 

                            max = trimLocation - 1;

                            if (min > max) {
                                //If we would be ending decrement the min and regenerate the text so we don't end with a
                                //slightly larger text than there is space for
                                trimLocation = (max + max - 2) / 2;
                                text = originalText.substr(0, trimLocation);
                                t.html(text + "&hellip;" + MoreLessTag);

                                break;
                            }
                        } else if (test < avail) {
                            min = trimLocation + 1;
                        } else {
                            if (foundMin && foundMax && ((max - min) / max < .2))
                                break;
                                
                            foundMax = true;
                            min = trimLocation + 1;
                        }
                    }
                }

                el.html(t.html());
                t.remove(); 

                if (moreText) {
                    jQuery(".MoreLessTag", this).click(function(event) {
                        event.preventDefault();
                        el.html(originalText);
                        embeddedPlayerManager.getPlayer().hidePlayer();
                        
                        el.animate({ "height": fullHeight }, "normal", null, function() {
                            embeddedPlayerManager.manager.updatePositions();
                            embeddedPlayerManager.getPlayer().unHidePlayer();
                        });

                        el.append(" <a class='MoreLessTag' href='#' >" + lessText + "</a>");

                        jQuery(".MoreLessTag", el).click(function(event) {
                            event.preventDefault();
                            resetDescription(availHeight, originalText);
                        });
                    });
                } else {
                    var replaceTags = new RegExp(/<\/?[^>]+>/gi);
                    el.attr("alt", originalText.replace(replaceTags, ''));
                    el.attr("title", originalText.replace(replaceTags, ''));
                }

                if (enableUpdating == true) {
                    var oldW = el.width();
                    var oldH = el.height();

                    el.one("resize", function() {
                        if (el.width() != oldW || (lines && el.height != oldH)) {
                            el.html(originalText);
                            el.ellipsis(lines, enableUpdating, moreText, lessText);
                        }
                    });
                }
            }
        });
    };
})(jQuery);

$( function() {
  $( "#some #twitter a" ).ellipsis( 2, true, false, false );
});

