var LINK_TEXT = "Read More ...";

window.onload = function()
{
changeList = [];
searchTogglers(document.body);
for(var i=0; i<changeList.length; i++)
createToggler(changeList[i]);
}

function searchTogglers(node)
{
// Die Funktion rekursiv aufrufen, um alle Knoten im
// Dokument zu durchlaufen
for(var i=0; i<node.childNodes.length; i++)
{
if(node.childNodes[i].nodeType == 1) // 1 => ELEMENT_NODE
searchTogglers(node.childNodes[i]);
}

// Nur auf die Klassen "collapse" und "hide" reagieren,
// Suche per Regex
if(!node.className.match(/(collapse|hide)/i))
return;

// Das Element in die Liste von zu ändernden Elementen aufnehmen
changeList.push(node);
}


function createToggler(node)
{
// Die Node verstecken
var oldDisplay = node.style.display;
node.style.display = "none";

// Einen Link davor einfügen
var link = document.createElement("a");
link.href = "#";
link.appendChild(document.createTextNode(LINK_TEXT));
link.className = "toggle";
link.behaviour = node.className.match(/collapse/i);
link.oldDisplay = oldDisplay;
link.style.display = "block";
link.onclick = function()
{
// Das hier ist die Funktion, die ausgeführt wird, wenn
// ein User auf den Link klickt

// Inhalt (wieder) anzeigen - nextSibling steht für das
// folgende Element. Da dieser Link immer vor dem Element
// eingefügt wird, passt das.
if(this.nextSibling.style.display == "none")
this.nextSibling.style.display = this.oldDisplay;
else
this.nextSibling.style.display = "none";

// Wenn dies kein "collapse"-typ ist, den Link entfernen
if(!this.behaviour)
this.parentNode.removeChild(this);

return false;
}
node.parentNode.insertBefore(link, node);
}// JavaScript Document