//KB.CollapsableText
//Collapses elements with "collapsable-text" adding switch to reveal more.
//Optionally looks for a script tag that only contains a number for number of characters to show initially.
//It is 100 by default.
//Creates switches with <a class="collapse-switch">

document.observe
(
	"dom:loaded",
	function()
	{
		$$(".collapsable-text").each
		(
			function(collapsetexttag)
			{
				var count;

				if(isNaN(count=parseInt(collapsetexttag.innerHTML.replace(/<script[^>]*>\s*(\d*)\s*<\/script>/i,"$1"),10)))
				{
					count=100;
				}
				var collapsetext=collapsetexttag.innerHTML.replace(/<script[^>]*>\s*\d*\s*<\/script>/i,"").replace(/<br\s*\/?>/ig,"\0");
				if(collapsetext.length<=count)
				{
					return;
				}
				var morelink;
				var lesslink;

				morelink=(new Element("span")).update(collapsetext.replace(/<[^>]*>/g,"").replace(new RegExp("([\\s\\S]{"+count+"})[\\s\\S]*"),"$1").replace(/\0/g,"<br/>")+"... ").insert((new Element("span",{"class":"collapse-switch"})).observe
				(
					"click",
					function()
					{
						morelink.hide();
						lesslink.show();
					}
				).update("(More)"));
				
				lesslink=(new Element("span")).update(collapsetexttag.innerHTML+" ").insert((new Element("span",{"class":"collapse-switch"})).observe
				(
					"click",
					function()
					{
						lesslink.hide();
						morelink.show();
					}
				).update("(Less)"));
				
				collapsetexttag.update(morelink).insert(lesslink.hide());
			}
		);
	}
);