jQuery.fn.extend({readMore:function(options) {
	var settings=jQuery.extend({
		wrappedLines:4,
		maxLines:8,
		plus:"images/rozwin.png",
		minus:"images/zwin.png",
		textSelector:".intro_text p",
		readMoreSelector:".readmore img",
		animTime:1000,
		buttonCSS:{
			cursor:"pointer",
			"float":"right",
			display:"block"
		}
	}, options);

	var currentElementHideFn={fn:null};

	$(this).each(function(i, newsEl) {
		readMoreEl=$(newsEl).find(settings.readMoreSelector);
		$(readMoreEl).parent().css({
			display:"block",
			height:$(readMoreEl).height(),
			width:$(readMoreEl).width()
		});
		$(readMoreEl).css({position:"absolute", display:"none"});

		var textEl=$(newsEl).find(settings.textSelector);
		var lh=parseFloat($(textEl).css("line-height"));
		var height=parseFloat($(textEl).height());
		var isTruncated=false;

		if(height > lh*settings.wrappedLines) {
			$(textEl).css({
				overflow:"hidden",
				height: lh*settings.wrappedLines+"px"
			});
			isTruncated=true;
		}

		var plusEl=function(){e=document.createElement("img"); e.src=settings.plus; return e;}()
		var minusEl=function(){e=document.createElement("img"); e.src=settings.minus; return e;}()


		var button=document.createElement("a");
		$(button).css(settings.buttonCSS).append(plusEl);
		$(newsEl).prepend(button);

		var functions={};

		functions.showFn=function(settings, readMoreEl, textEl, lh, height, button, isTruncated, functions, currentElementHideFn, plusEl, minusEl) {
			return function() {
				if(currentElementHideFn.fn != null) {
					currentElementHideFn.fn();
				}
				currentElementHideFn.fn=functions.hideFn;
				
				if(isTruncated)
					textEl.animate(
						{height:(lh*settings.maxLines > height)?height:(lh*settings.maxLines)+"px"},
						{queue:true, duration:settings.animTime}
					);
				$(readMoreEl).slideDown();
				button.replaceChild(minusEl, plusEl);
				button.onclick=functions.hideFn;
			};
		}(settings, readMoreEl, textEl, lh, height, button, isTruncated, functions, currentElementHideFn, plusEl, minusEl);

		functions.hideFn=function(settings, readMoreEl, textEl, lh, height, button, isTruncated, functions, currentElementHideFn, plusEl, minusEl) {
			return function() {
				currentElementHideFn.fn=null;
				if(isTruncated)
					textEl.animate(
						{height:lh*settings.wrappedLines+"px"},
						{queue:true, duration:settings.animTime}
					);
				$(readMoreEl).slideUp();
				button.replaceChild(plusEl, minusEl);
				button.onclick=functions.showFn;
			};
		}(settings, readMoreEl, textEl, lh, height, button, isTruncated, functions, currentElementHideFn, plusEl, minusEl);

		button.onclick=functions.showFn;

	});
}});

$(".newsBox").readMore();
