(function($) {
  $.fn.ellipsis = function(enableUpdating){
    var s = document.documentElement.style;
    if (!('textOverflow' in s || 'OTextOverflow' in s)) {
      return this.each(function(){
        var el = $(this);
        if(el.css("overflow") == "hidden"){
          var originalText = el.html();
          var w = el.width();
          
          var t = $(this.cloneNode(true)).hide().css({
                        'position': 'absolute',
                        'width': 'auto',
                        'overflow': 'visible',
                        'max-width': 'inherit'
                    });
          el.after(t);
          
          var text = originalText;
          while(text.length > 0 && t.width() > el.width()){
            text = text.substr(0, text.length - 1);
            t.html(text + "...");
          }
          el.html(t.html());
          
          t.remove();
          
          if(enableUpdating == true){
            var oldW = el.width();
            setInterval(function(){
              if(el.width() != oldW){
                oldW = el.width();
                el.html(originalText);
                el.ellipsis();
              }
            }, 200);
          }
        }
      });
    } else return this;
  };
})(jQuery);

