(function($){
	$.fn.jTruncate = function(options) {
	   
		var defaults = {
			length: 300,
			minTrail: 20,
			moreText: "more",
			lessText: "less",
			ellipsisText: "...",
			moreAni: "",
			lessAni: ""
		};
		
		var options = $.extend(defaults, options);
	   
		return this.each(function() {
			obj = $(this);
			if (obj.find("p").length==1){
				obj=obj.find("p");
			}else if (obj.find("p").length>1){
				var contenuto="";
				obj.find("p").each(function(index){
					if (contenuto!="")
						contenuto = contenuto + "<br/>";
					contenuto = contenuto + obj.find("p").eq(index).html() ;
				});
				var p=obj.find("p:eq(0)").clone();
				p.html(contenuto);
				obj.empty().append(p);
				obj=obj.find("p");
			}
			var body = obj.html();
			
			if(body.length > options.length + options.minTrail) {
				var splitLocation = body.indexOf('.', options.length);
				if(splitLocation != -1) {
					// truncate tip
					var splitLocation = body.indexOf('.', options.length);
					var str1 = body.substring(0, splitLocation+1);
					var str2 = body.substring(splitLocation+1, body.length);
					if (str2.length >= options.minTrail){
						obj.html(str1 + '<span class="truncate_ellipsis">' + options.ellipsisText + 
							'</span><br/>' + '<span class="truncate_more">' + str2 + '</span>');
						obj.find('.truncate_more').css("display", "none");
						
						// insert more link
						obj.append(
							'<div class="clearboth" style="text-align: right; margin-top: 5px;">' +
								'<a href="#" class="truncate_more_link">' + options.moreText + '</a>' +
							'</div>'
						);

						// set onclick event for more/less link
						var moreLink = $('.truncate_more_link', obj);
						var moreContent = $('.truncate_more', obj);
						var ellipsis = $('.truncate_ellipsis', obj);
						moreLink.click(function() {
							if(moreLink.text() == options.moreText) {
								moreContent.fadeIn(options.moreAni);
								moreLink.text(options.lessText);
								ellipsis.css("display", "none");
							} else {
								moreContent.fadeOut(options.lessAni);
								moreLink.text(options.moreText);
								ellipsis.css("display", "inline");
							}
							return false;
						});
					}
				}
			} // end if
			
		});
	};
})(jQuery);