$.fn.trunc = function(maxBottom, top)
{
	if ($(this).data("originalText") == null)
	{
		$(this).data("originalText", $(this).html());
	}
	else
	{
		$(this).html = $(this).data("originalText");
	}
	
	var text = $(this).html();
	
	if (top == null)
	{
		top = 0;
	}
	
	var maxHeight = maxBottom - top;
	
	if (maxHeight > 0)
	{	
		while ($(this).height() > maxHeight)
		{
			var nextSpace = text.lastIndexOf(" ", text.length - 2);
			text = text.substr(0, nextSpace);
			
			var tag = getTag(text, nextSpace);
			if (tag != "")
			{
				nextSpace -= tag.length;
			}
			
			$(this).html(text + "...");
		}
	}
	else
	{
		$(this).html("");	
	}
}

function getTag(input, offset)
{
	var endPos = input.indexOf(">", offset) + 1;
	var startPos = input.lastIndexOf("<", offset);

	if (endPos == -1 || startPos == -1) return "";
	
	var output = input.substr(startPos, endPos-startPos);
	
	if (output.replace(/[^<]/g, '').length > 1 || output.replace(/[^>]/g, '').length > 1)
	{
		return "";
	}
	else
	{
		return output;
	}
}

