
/*
	ARGE jads / netzgarten Stuttgart
	funktionssammlung fuer einen einfachen JS-Logger
	2007-06-01 anzeige von hash-indizierten arrays (objekten)
	2007-10-25 relative hoehe der textarea
	2007-11-21 weitere abfragen, damit: keine fehlermeldungen wenn das debug-fenster geschlossen wurde
	2009-05-12 genauere angabe des datentyps bei object und array
	2009-06-04 zeitangabe zum log hinzu
	2009-06-22 anzeige von bool typen verbessert
	2009-07-20 anzahl elemente fuer arrays und objekte hinzu
*/



function meinFehler(Nachricht,Datei,Zeile) {
	if ( 0 ) {
		// fehler werden nicht angezeigt
		return true;
	}
	Fehler = "Fehlermeldung:\n"+ Nachricht+"\n"+Datei+"\n"+Zeile;
	if ( 1 ) {
		alert(Fehler);
	}
	else if ( 0 ) {
		add_message("warning", Fehler );
	}
	else {
		add_message("warning", "In "+Datei+" ist ein Fehler aufgetreten. Eventuell folgen noch weitere Fehlermeldungen");
	}
	return true;
}


function add_message ( type, message ) {
	// fuegt dem JS-Meldungsfenster eine Nachricht hinzu
	var js_meldungs_knoten = document.getElementById("JS_feedback");
	var js_inhalts_knoten = document.getElementById("JS_feedback_content");
	if (js_meldungs_knoten) {
		// sichtbar schalten
		js_meldungs_knoten.style.display = "block";

		// div-box erzeugen
		var div_box = document.createElement("div");

		// Textknoten erzeugen
		if (!message) message = "JavaScript - Fehler";

		var text_knoten = document.createTextNode(message);

		// und anhaengen
		div_box.appendChild(text_knoten);

		// style setzen
		var Ausrichtung = document.createAttribute("class");
		Ausrichtung.nodeValue = type;
		div_box.setAttributeNode(Ausrichtung);
		// Text-box in meldungs-box einh?ngen
		js_inhalts_knoten.appendChild(div_box);
	}
	else {
		alert( type + ": " + message );
	}
}


var obj_debug_window=null;
var obj_debug_skript=null;


function open_debug_window (domaene,skript) {
	// window.open()  benutzt ein bereits vorhandenes Fenster gleichen Namens,
	// ein pruefen auf vorhandensein ist nicht noetig
	obj_debug_skript = skript;
	skript = skript.replace(/\D/, "");
	if (obj_debug_window) {
		//alert("obj_debug_window");
	}
	else {
		//alert("kein obj_debug_window gefunden");
	}
	obj_debug_window = window.open("","debug_window"+skript,"dependent=yes, width=640,height=700,left=60,top=20,scrollbars=yes,resizable=yes");

	try {
		obj_debug_window.document.close();  // inhalt schliessen
	}
	catch (err) {
	}

	obj_debug_window.document.open();

	with (obj_debug_window.document) {
		writeln("<html><head>");
		writeln("<title>Log "+window.location.hostname+" </title>");
		writeln("<style>");
		writeln("td.item {text-align:right;}");
		writeln(".names {font-size:12pt;}");
		writeln(".desc {font-size:8pt;}");
		writeln("</style>");

		writeln("</head><body>");
		writeln("<h1><small>JS-debug "+window.location.hostname+"(<small>"+skript+"</small>)<input type='button' value='schliessen' onClick='window.close()'/></small></h1>");
		writeln("<form name=\"debug_form\">");
		writeln("immer oben: <input value=\"oben\" name=\"immer_oben\" type=\"checkbox\" /><br/>");
		var fieldlength = 50;
		var textarealength = 50;
		writeln("<input type='button' value='löschen' onClick='window.document.debug_form.debug_text.value=\"\"'/><br />");
		writeln("<textarea name=\"debug_text\" style=\"width:100%;height:80%;\" rows=\"36\" /></textarea><br/>");
		writeln("");
		writeln("</form>");
		writeln("<script language=\"javascript\">");
		writeln("//var aktiv = window.setInterval(\"check_keep_on_top()\",4000);");
		writeln("function check_keep_on_top () {");
		writeln("if (this.document.forms[\"debug_form\"].elements[\"immer_oben\"].checked==true) {");
		writeln("this.focus();");
		writeln("}");
		writeln("");
		writeln("");
		writeln("}");
		writeln("</script>");
		writeln("</body></html>");
	}
	//obj_debug_window.blur();
	obj_debug_window.document.close();  // inhalt schliessen
	return false;
}

function debug_window_clear() {
	if ( !obj_debug_window ) {
		return;
	}
	if ( obj_debug_window.document.forms["debug_form"].elements["debug_text"] ) {
		var oNow = new Date();
		var sNow = oNow.getHours()+":"+oNow.getMinutes()+":"+oNow.getSeconds();
		var sNow;
		obj_debug_window.document.forms["debug_form"].elements["debug_text"].value = "cleared "+sNow+"\n";
	}
	return;
}

function close_debug_window() {
	if ( !obj_debug_window ) {
		return;
	}

	try {
		obj_debug_window.close();
	}
	catch (error) {
		//alert("obj_debug_window.close() geht nicht ("+error+")");
	}
}


function debug_window_write (name, data) {
	// löscht das Fenster vor dem neu beschreiben
	if ( !obj_debug_window ) {
		//alert("no obj_debug_window");
		return;
	}
	if ( !obj_debug_window.document ) {
		return;
	}
	if ( obj_debug_window.document.forms["debug_form"].elements["debug_text"] ) {
		obj_debug_window.document.forms["debug_form"].elements["debug_text"].value = "repainted\n";
		update_debug_window (name, data);
	}
	return;
}

function debug_window_add (name, data) {
	// fügt dem debug-window einen eintrag hinzu, wenn das Fenster existiert
	// test, ob das debug_window da ist
	if ( !obj_debug_window ) {
		//alert("no obj_debug_window");
		return;
	}
	update_debug_window (name, data);
	try {
		obj_debug_window.document.forms["debug_form"].elements["debug_text"].scrollBy(0,16);
	}
	catch (err) {
	}
	return;
}

function update_debug_window (debug_name, debug_data) {
	// wird von debug_window_add() und debug_window_write() benutzt, um daten strukturiert auszugeben
	var debug_output = '';
	var arr_href ;
	var i=0;

	if ( !obj_debug_window ) {
		return;
	}
	if ( !obj_debug_window.document ) {
		return;
	}
	if ( !obj_debug_window.document.forms["debug_form"] ) {
		return;
	}
	if ( !obj_debug_window.document.forms["debug_form"].elements["debug_text"] ) {
		return;
	}


	if (debug_name) {
		debug_output += debug_name;
		if ( typeof(debug_data) == 'undefined' ) {
			// das datum ist undefiniert oder der zweite parameter ist nicht vorhanden 
			//debug_output += "=undefiniert";
		}
		else if ( typeof(debug_data) == 'array' || typeof(debug_data) == 'object' ) {
			// daten sind ein Array / Objekt
			var datentyp = typeof(debug_data);
			i=0;
			if ( debug_data ) {
				//debug_output += "\n" ;
				debug_output += " - "+datentyp;
				if ( typeof(debug_data) == 'array' ) {
					debug_output += "("+debug_data.length+")";
				}
				else if ( typeof(debug_data) == 'object' ) {
					var i=0;
					for (var Eigenschaft in debug_data) i++;
					debug_output += "("+i+")";
				}
				debug_output += "\n" ;
				for (var item in debug_data) {
					debug_output += " "+item+": " + debug_data[item] + "\n" ;
					i++;
				}
				debug_output += datentyp+" END" + "\n" ;
			}
			else {
				debug_output += " - empty "+datentyp ;
			}
		}
		else if ( typeof(debug_data) == 'boolean' ) {
			// boolscher typ
			if ( debug_data ) {
				debug_output += "=WAHR";
			}
			else {
				debug_output += "=FALSCH";
			}
		}
		else {
			// daten sind skalar
			//alert("update_debug_window(): daten sind skalar");
			debug_output += debug_data ;
		}
	}
	else {
		alert("update_debug_window(): keine Beschreibung (debug-name) angegeben");
	}

	if ( obj_debug_window.document.forms["debug_form"].elements["debug_text"] ) {
		obj_debug_window.document.forms["debug_form"].elements["debug_text"].value += debug_output + "\n";
		// fenster immer oben halten
		check_keep_on_top();
	}
}


function check_keep_on_top() {
	if (obj_debug_window.document.forms["debug_form"].elements["immer_oben"].checked ) {
		obj_debug_window.focus();
	}
}

function scroll_down () {
	obj_debug_window.document.forms["debug_form"].elements["debug_text"].scrollBy(0,16);
	var aktiv = window.setInterval("scroll_down()",2000);
}

