/**
 *   Truncate text and pass callback methods
 *	Copyright 2011 Stefan Blickensdoerfer
 *
 *	Project:					jquery.sfTruncate.js
 *	URI:						http://reizwerk.com/
 *	Description:
 *	Version:					1.2
 *	Last Revision:				09.02.2011
 *
 *   Licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License
 *   http://creativecommons.org/licenses/by-sa/3.0/
 *
 */
 
 
(function(jQuery){
	
	var defaults = {
		maxlength: 0,
		counton: 'chars',
		moreText: '&nbsp;mehr&nbsp;lesen&hellip;',
		hideText: '&nbsp;&laquo;&nbsp;schließen',
		onShow: function(e){},
		onClose: function(e){}
	};
	
	jQuery.fn.sfTruncate = function(o) {
		
	    return this.each(function() {
			
			new jQuery.sfTruncate(this, o);
			
	    });
	 };
	 
	 jQuery.sfTruncate = function(e, o){
	  	
	  	
		var options = jQuery.extend(defaults, o);
	
		var elem = this;
		var obj = jQuery(e);
		
		var text = obj.text();
		var visible = text;
		
		obj.attr('rel', text );
		
		var hideFn = function() {			
			obj.html( visible ).append(togglerShow);
			togglerShow.click(function(){
				showFn();
				return false;
			});
			options.onClose(obj);
		}
		
		var showFn = function() {
			togglerHide.click(function(){
				hideFn();
				return false;
			});
			obj.html( text ).append(togglerHide);
			options.onShow(obj);
		}
		
		var togglerShow = jQuery('<a href="#">'+options.moreText+'</a>').addClass('truncate-toggle').click(function(){
				
				showFn();
				
				return false;
			});
			
		var togglerHide = jQuery('<a href="#">'+options.hideText+'</a>').addClass('truncate-toggle').click(function(){				
				
				hideFn();
				
				return false;
			});
		
		if (options.counton == 'chars') {
			if (text.length >= options.maxlength)
			{
				visible = text.substring(0, options.maxlength);
				obj.html( visible).append(togglerShow);
			}
		}
		
		return this;
		
	 };
	 
})(jQuery);
