//$(function($){

function isHidingWorthwhile( current, 
														 splitPos, 
														 minLetters ) {
		lettersToHide = 0;

		// letters left in current paragraph
		lettersToHide = current.text().length - splitPos;

		// letters left in other paragraphs
		current.nextAll().each( function() {
						lettersToHide += $(this).text().length;
				  }
				);
    
		return lettersToHide > minLetters ? true : false;
};

jQuery.fn.truncate = function(options) {
   var defaults = {
      length: 1000,
      minLettersLeft: 1000,
			minLettersLeftInParagraph: 200,
      moreText: "weiter lesen ...",
      lessText: "... ausblenden",
      moreSpeed: "",
      lessSpeed: ""
   };

   var options = $.extend(defaults, options);

   return this.each(function() {
      // for each news-entry
      var newsEntry = $(this);

      var letterCount = 0;
      var hideText = false;

      newsEntry.children("p").each(
         function() {
            var paragraph = $(this);

						if( hideText == false ) {
								var text = paragraph.html(); 
                var oldLetterCount = letterCount;
								letterCount += text.length;

								if( letterCount > options.length ) {
										// split paragraph
										var splitPos = options.length - oldLetterCount;
										splitPos = Math.max(splitPos, options.minLettersLeftInParagraph);
                    // adjust split
										var adjSplitPos = text.indexOf(" ", splitPos);
										splitPos = Math.max( splitPos, adjSplitPos );

										// some letters left in this paragraph ?
										var splitParagraph = true;
										if(	text.length - splitPos < options.minLettersLeftInParagraph ) {
												splitParagraph = false;
										}

										// check if there are enought letters left in text
										hideText = isHidingWorthwhile($(this), splitPos, options.minLettersLeft);

										if( hideText && splitParagraph ) {
												newParagraph = '<p>... ' + text.substring( text.length, splitPos ) + '</p>';
												paragraph.after(newParagraph);
												// cut of current
												text = text.substring( 0, splitPos )  + " ...";
												paragraph.html(text);
												paragraph.next().addClass("hiddenParagraph").hide();
										}
								}
						}
						else {
                paragraph.addClass("hiddenParagraph");
								paragraph.hide();
						}
         }
			);

      if( hideText ) {
         $(this).append('<p><a href="#" class="more_link">' + options.moreText + '</a></p>'); // todo newsEntry

				 var moreLink = $('.more_link', $(this)); // todo
				 var paragraphs = $(this).children("p");  // todo
				 var div = $(this);                       // todo

				 moreLink.toggle(
       		 function() {
							 paragraphs.show(options.moreSpeed);
							 moreLink.text(options.lessText);
					 },
					 function() {
							 moreLink.text(options.moreText);
							 div.children("p").each( 
							    function() {  // todo paragraphs
											if( $(this).hasClass("hiddenParagraph") ) {
													$(this).hide(options.lessSpeed);
											}
									});
					 }
				 ); // toggle
			}
	 }); // each entry
};






