/*
 * truncatable 1.2 - jQuery lightwieght text truncation plugin
 *
 * Copyright (c) 2009 Philip Beel (http://www.theodin.co.uk/)
 * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) 
 * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
 *
 * Revision: $Id: jquery.truncatable.js 2009-08-20 $
 *
 * Upd: updated for handling also html text
 */

(function($){$.fn.truncatable=function(options){var defaults={limit:100,more:'...',less:false,hideText:'[read less]'};
var options=$.extend(defaults,options);
return this.each(function(num){
	//get size of only plain text, we don't need html tags
	var plainText = $(this).html().replace(/<a[^>]*>/g, '');
	plainText = plainText.replace(/<\/a>/g, '');
	
	//var stringLength=$(this).html().length;
	var stringLength=plainText.length;
	
	if(stringLength>defaults.limit){
		var splitText=$(this).html().substr(defaults.limit);
		var splitPoint=splitText.substr(0,1);
		var whiteSpace=new RegExp(/^\s+$/);
		for(var newLimit=defaults.limit;newLimit<stringLength;newLimit++){
			var newSplitText=$(this).html().substr(0,newLimit);
			var newHiddenText=$(this).html().substr(newLimit);
			var newSplitPoint=newSplitText.slice(-1);
			if(whiteSpace.test(newSplitPoint)){
				var hiddenText='<span class="hiddenText_'+num+'" style="display:none">'+newHiddenText+'</span>';
				var setNewLimit=(newLimit-1);
				var trunkLink=$('<a>').attr('class','more_'+num+'');
				$(this).html($(this).html().substr(0,setNewLimit)).append('<a class="more_'+num+'" href="#">'+defaults.more+'<a/> '+hiddenText);
				$('a.more_'+num).bind('click',function(){
					$('span.hiddenText_'+num).show();
					$('a.more_'+num).hide();
					if(defaults.less==true){
						$('span.hiddenText_'+num).append('<a class="hide_'+num+'" href="" title="'
								+defaults.hideText+'">'+defaults.hideText+'</a>');
						$('a.hide_'+num).bind('click',function(){
							$('.hiddenText_'+num).hide();
							$('.more_'+num).show();
							$('.hide_'+num).empty();
							return false
						})
					}
				return false;
				});
				newLimit=stringLength
			}}}})}})(jQuery);
