/*
 *  jQuery Ellipsis
 *  Mnigrele/Emateu: 8 abril 2011. Aportes de Ekupelian
 *  No copyright
 *
 */

(function($){

    $.fn.ellipsis = function(conf) {
        return this.each(function() {
//             return false;
            setup($(this), conf);
        });
    };

    function setup(element$, conf) {

        conf = $.extend({
            lines: 2
        }, conf || {} );

        var wrapper = {};
        wrapper.$       = element$;
        wrapper.display = wrapper.$.css("display");
        // Display Block al elemento
        wrapper.$.css("display", "block");
        wrapper.text    = $.trim(wrapper.$.text());
        wrapper.textArr = wrapper.text.split(" ");
        wrapper.width   = wrapper.$.width();
        wrapper.lheight = parseInt(wrapper.$.css('line-height').split("px")[0]);
        wrapper.fheight = parseInt(wrapper.$.css('font-size').split("px")[0]) + 1;
        wrapper.lineHeight = (jQuery.browser.msie) ? wrapper.fheight : wrapper.lheight ;
        wrapper.ratio      = parseInt(wrapper.$.height()/wrapper.lineHeight);

        if ( wrapper.ratio <= conf.lines )  {
            return false;
        }

        var transWrapper = $("<span>").css({
            "line-height": wrapper.lineHeight + 'px', // ACA ESTABA LA PAPA
            "font-size": wrapper.$.css("font-size"),
            "text-align": wrapper.$.css("text-align"),
            "font-weight": wrapper.$.css("font-weight"),
            "padding": wrapper.$.css("padding"),
            "position": "absolute",
            "top" : "-99999px"
        }).appendTo("body");

        var length = wrapper.textArr.length;
        for (var i = 1; i <= length; i++) {
            if ( transWrapper.text(wrapper.textArr.slice(0, i).join(" ")).width() >= (wrapper.width*conf.lines) ) {
                wrapper.textArr = $.merge(wrapper.textArr.slice(0, i), []);
                break;
            }
        }

        transWrapper.width(wrapper.width).css("display", "block");

        var k = 1;
        while ( conf.lines < parseFloat(transWrapper.height()/wrapper.lineHeight)) {
            transWrapper.text( wrapper.textArr.slice(0, -k).join(" ") + " ..." );
            k += 1;
//            alert("mira:\nLineHeight: " + wrapper.lineHeight + "\nFalopa Height: " + transWrapper.height() + "\nRate: " + parseFloat(transWrapper.height()/wrapper.lineHeight));
        }
        wrapper.$.text(transWrapper.text());
        wrapper.$.css("display", wrapper.display);
        transWrapper.remove();
        return true;
    }

}(jQuery));
