/******************************************************************************************************
 
 jQuery.ellipsisy
 
 Author Elchin Ivan
 version 0.1
 
 Date: 23.5.2011
 
 
 DESCRIPTION
 
 Для заданного блока, у которого overflow: 'hidden', ищет блок с классом 'ellipsis',
 и укорачивает в нем текст, пока он весь не влезет в заданный блок. На конце добавляет '...'
 Укорачивание происходит только по вертикали.
 
************************************************************************************/

(function($) {
        $.fn.ellipsisy = function()
        {
                return this.each(function()
                {
                        var el = $(this);
                        var reg = new RegExp("[.,!?][^.,!?]*$") /* укорачивание текста по знакам пунктуации */
                        
                        if(el.css("overflow") == "hidden")
                        {
                                var t = $(this.cloneNode(true))
                                        .hide()
                                        .css('position', 'absolute')
                                        .css('overflow', 'visible')
                                        .height('auto')
                                        ;

                                el.after(t);
                                
                                text_block = t.find('.ellipsis:last');
                                text = text_block.html();
                                
                                while (text.length > 0 && (t.height() > el.height()))
                                {
                                    new_text = text.replace(reg, "")
                                    if (new_text.length == text.length)
                                        break
                                    text = new_text
                                    text_block.html(text + "...");
                                }
                                el.find('.ellipsis:last').html(text_block.html());
                                t.remove();
                        }
                });
        };
})(jQuery);

