(function($) {
	$.fn.ellipsis = function(){
        this.each(function(){
		    var el = $(this);
		    if(el.css("overflow") == "hidden"){
			    var originalText = el.html();
			    var width = el.width();
			    var adjustedTextWidth = width - 15;
			    if (adjustedTextWidth < 1)
			    {
			        adjustedTextWidth = width;
			    }
    			
			    var t = $(this.cloneNode(true)).css('position', 'absolute').hide()
			    .css('width', 'auto').css('overflow', 'visible');
			    el.after(t);

			    // Check if mouseover effects are is needed
			    if (t.width() > el.width())
			    {
			        // Add Ellipsis
			        var ellipsis = ""
                    var oEllipsis = $("#hdnGlobalEllipsis:first");
                    if (oEllipsis.length > 0)
                    {
                        ellipsis = oEllipsis.val();
                    }
                    if (ellipsis.length < 1)
                    {
                        ellipsis = "...";
                    }

                    var showSymbol = "";
                    var oShowSymbol = $("#hdnGlobalShowSymbol:first");
                    if (oShowSymbol.length > 0)
                    {
                        showSymbol = oShowSymbol.val();
                    }
                    if (showSymbol.length < 1)
                    {
                        showSymbol = "+";
                    }
			        
			        var text = originalText;
                    while(text.length > 0 && t.width() > el.width()){
				        text = text.substr(0, text.length - 1);
				        t.html(text + ellipsis + showSymbol);
			        }
			        el.html(t.html());
			        el.addClass("ShowHideAddressText");

                    // Create show/hide area
                    var oDiv = document.createElement('div');
                    $(oDiv).addClass("remainingAddressText").hide();

                    var tempText = originalText.replace("&nbsp;", " ");
                    if (CheckForOversizedText(adjustedTextWidth, tempText, t))
                    {
                        SplitOversizedText(adjustedTextWidth, tempText, t, oDiv);   
                    }
                    else
                    {
                        CreateSpanForDiv(tempText, oDiv);
                    }

                    $(oDiv).insertAfter(this);
			    }
    			
			    t.remove();
		    }
	    });
	    
	    function SplitOversizedText(width, text, oClone, oDiv)
	    {
	        var originalText = text;
	        var remainingText = text;
	        var holdRemainingText = "";
	        var workText = "";
	        var i = 0;
	        
	        do {
	        
	            workText = remainingText;
	            holdRemainingText = remainingText;
	            oClone.html(workText);
	            i = 0;
	            while(workText.length > 0 && oClone.width() > width){
	                i++;
		            remainingText = holdRemainingText.substr(holdRemainingText.length - i, holdRemainingText.length);
		            workText = workText.substr(0, workText.length - 1);
		            oClone.html(workText);
	            }
	            
	            if (workText.length > 0)
	            {
	                CreateSpanForDiv(workText, oDiv);
	            }
	            
	        } while (i > 0);
	        
	        return;
	    }
	    
	    function CheckForOversizedText(width, text, oClone)
	    {
	        var result = false;
	        var textArray = text.split(' ');
	        if (textArray.length > 0)
	        {
	            for (var i = 0; i < textArray.length; i++)
	            {
	                oClone.html(textArray[i]);
	                if (oClone.width() > width)
	                {
	                    result = true;
	                    break;
	                }
	            }
	        }
	        return result;
	    }
	    
	    function CreateSpanForDiv(text, oDiv)
	    {
            var oSpan = document.createElement('span');
            $(oSpan).html(text);
            $(oDiv).append(oSpan);
            
            var oBr = document.createElement('br');
            $(oDiv).append(oBr);
	    }
	};
})(jQuery);