


(function($){ $.fn.elide = function(options){



options = $.extend({
 
 titleText: true,
 elipsis: '...'
},
options);


options.elipsisLength = options.elipsis.length;


function truncate(inText, $span, chunk, availableWidth){

 var
  oText = inText || $span.text(),
  nText,
  chunk = chunk || Math.round($span.text().length / 2)
 ;

 if($span.width() <= availableWidth){ return oText; }

 nText = oText.substring(0, oText.length - chunk - options.elipsisLength) + options.elipsis;
 $span.text(nText);

 if($span.width() > availableWidth){
  truncate(nText, $span, chunk, availableWidth);
 }
 else if(chunk != 1){
  $span.text(oText);
  truncate(oText, $span, Math.round(chunk/2), availableWidth);
 }

 return oText;

}


return this.each(function(){var $this = $(this);

 var
  availableWidth = $this.innerWidth(),
  maxWidth = parseInt($this.css("maxWidth")),
  originalText = $this.text(),
  newText = originalText
 ;

 
 if(availableWidth <= 0 || $this.children().length > 0) return;

 
 if(availableWidth < maxWidth) return;

 
 $this.wrapInner("<span></span>");
 $rail = $this.children();
 $rail.css({
  display: "block",
  width: "200%"
 });

 $rail.wrapInner("<span></span>");
 $span = $rail.children();

 newText = truncate(null, $span, null, availableWidth);


 
 if(options.titleText && originalText != newText && !$this.attr("title")){
  $this.attr("title", originalText);
 }

});


}})(jQuery)
