// ***************************************************************************
// ++ autoIndent-Funktion - automatisches Einrücken von Code per Javascript ++
// ***************************************************************************
// Autor: Patrick Fischer
// Datum: 26.12.2007 Version 0.8
// ***************************************************************************

// Variable path: Pfad zu dem Element, in dem der zu formatierende Code steht
function autoIndent( path ) {
	// Initialisierung: Anzahl der Einrückungen
	indents = 0;
	// hole den zu formatierenden Inhalt
	code = path.innerHTML;
	// splitte code, wobei jede Zeile ein Array-Feld ist
	eArray = code.match( /(.*)\r\n|(.*)(\n)?/gi );
	// lösche code - darin wird fortan der formatierte Code geschrieben
	code = "";
	// Schleife über alle Array-Zeilen
	for ( var i = 0; eArray[i]; i++ ) {
		// entferne alle Zeilen möglichen Zeilenumbrüche
		eArray[i] = eArray[i].replace(/\r|\n|\n\r|\n\r/gi, "");
		// entferne sonstige Leerzeichen
		eArray[i] = eArray[i].replace(/^([\s]|&nbsp;|&#160;)*/, "");
		// Verringere Anzahl der Einrückungen falls } oder Abschlusstag
		if ( eArray[i].match(/\}|&lt;\/[\w]+&gt;/i) && indents > 0) {
			// Anzahl der } oder Abschlusstags
			eLength = eArray[i].match(/\}|&lt;\/[\w]+&gt;/gi).length;
			indents -= eLength;
			if ( indents < 0 ) indents = 0;
		}
		// Sonderbehandung für Zeilenumbrüche via Javascript im IE
		if ( navigator.appName.indexOf("Internet Explorer") > 0 && i != 0 ) code += "<br />";
		// nach jeder Zeile kommt ein Zeilenumbruch
		if ( i != 0 ) code += "\n";
		// rücke nur nichtleere Zeilen ein
		if ( eArray[i] != "" ) {
			// Anzahl der Einrückungen entsprechend der Variable indents
			for  (var j = 0; j < indents ; j++ ) {
				code += "&nbsp;&nbsp;&nbsp;&nbsp;";
			}
		} else {
			// leere Zeilen bekommen ein Leerzeichen, da IE sonst die Zeile nicht anzeigt
			code += "&nbsp;";
		}
		// rücke Zeilen mit Anfangs- und Abschlusstag richtig ein
		if ( ( eArray[i].match(/\&lt;[\w]+&gt;/i) && eArray[i].match(/\&lt;\/[\w]+&gt;/i) ) || eArray[i].match(/[\w\s;:]+\}/i) ) code += "&nbsp;&nbsp;&nbsp;&nbsp;";
		// Zeileninhalt wird an code angehängt
		code += eArray[i];
		// Erhöhe Anzahl der Einrückungen
		if ( eArray[i].match(/\{|&lt;[\w]+&gt;/i) )	{
			indents++;
		}
	}
	// setze neuen Inhalt
	path.innerHTML = code;
}
