jQuery.fn.truncate = function( settings ) {
    settings = jQuery.extend( {
        chars: /\s/,
		trim_target:'null',
		trim_count:'30',
        trail: [ "...", "" ]
    }, settings );
    var myResults = {};
    var ie = $.browser.msie;
	var _elementNum = 0;
    function fixIE( o ) {
        if ( ie ) {
            o.style.removeAttribute( "filter" );
        }
    };
	

	$('.truncated_text').css('display', 'none');
	

    return this.each( function() {
        var $this = jQuery(this);
		var $trim;
		var sett;


if($this.find(settings.trim_target) == null)return;
		$trim =  $this.find(settings.trim_target);

		if($trim.html()==null)return;
   		var original_max = settings.trim_count;
        var myStrOrig = $trim.html().replace( /\r\n/gim, "" );
        var myStr = myStrOrig;
        var myRegEx = /<\/?[^<>]*\/?>/gim;
        var myRegExArray;
        var myRegExHash = {};
        var myResultsKey = $("*").index( this );
        while ( ( myRegExArray = myRegEx.exec( myStr ) ) != null ) {
            myRegExHash[ myRegExArray.index ] = myRegExArray[ 0 ];
        }
        myStr = jQuery.trim( myStr.split( myRegEx ).join( "" ) );

        if ( myStr.length > original_max ) {
            var c;
            max = original_max;
            while (( max < myStr.length ) && ( max > 0)) {
                c = myStr.charAt( max );
                if ( c.match( settings.chars ) ) {
                    myStr = myStr.substring( 0, max );
                    break;
                }
                max--;
            }
            if ( max == 0 ) {
              myStr = myStr.substring( 0, original_max );
            }

            if ( myStrOrig.search( myRegEx ) != -1 ) {
                var endCap = 0;
				
                for ( eachEl in myRegExHash ) {
                    myStr = [ myStr.substring( 0, eachEl ), myRegExHash[ eachEl ], myStr.substring( eachEl, myStr.length ) ].join( "" );
                    if ( eachEl < myStr.length ) {
                        endCap = myStr.length;
                    }
                }
				
                $trim.html( [ myStr.substring( 0, endCap ), myStr.substring( endCap, myStr.length ).replace( /<(\w+)[^>]*>.*<\/\1>/gim, "" ).replace( /<(br|hr|img|input)[^<>]*\/?>/gim, "" ) ].join( "" ) );
            } else {
                $trim.html( myStr );
            }
			$this.append("<div class='truncated_text' style='display:none'>"+myStrOrig+"</div>");			
            myResults[ myResultsKey ] = myStrOrig;
			
            $trim.html( [$trim.html(), settings.trail[ 0 ]].join( "" ) )
			
			_elementNum++;
		};
	
    });
};


jQuery.fn.allData = function() {
    var intID = jQuery.data(this.get(0));
    return(jQuery.cache[intID]);
};


