/*[version]2008-05-16 10:54[/version]*/
/**
 * Module: AnemaLog.js
 *
 * Bietet die Möglichkeit, anstatt der lästigen alerts in einen Div zu
 * schreiben. Dem Konstruktor kann ein DOM-Element oder die ID eines DOM-
 * Elements übergeben werden, in das dann geschrieben wird.
 * Wird kein Element angegeben oder existiert das angegebene nicht, wird ein
 * Default-Div angelegt und am Body-Ende eingefügt.
 * Als zweites Argument für den Konstruktor kann als Logging-Modus "append"
 * oder "prepend" angegeben werden. Default ist "append".
 * Das dritte Argument definiert das Aussehen des Log-Fensters. Die Werte
 * seiner Properties werden auf die gleichnamigen Properties des Style-
 * Objekts des Logfensters übertragen. Soll heißen: hat das Argument styles
 * für seine Property styles.width den Wert "100px", wird dieser Wert für
 * das Logfenster übernommen. Usw.
 * Alle Argumente sind optional.
 *
 * Das Logging wird durch Erweitern des innerHTML um einen Break und die neue
 * Nachricht bewerkstelligt.
 *
 * Methode write() schreibt nur, wenn ein DOM-Element existiert (no na).
 */
function AnemaLog( /*obj, mode, styles*/ ){
	this.domElement = null;
	this.mode = '';
	this.cssStyles = arguments[2] ? arguments[2] : AnemaLog.DEFAULT_CSS_STYLES;
	this.setDomElement( arguments[0] );
	this.setMode( arguments[1] );
}
AnemaLog.DEFAULT_CSS_STYLES = {
	position   		: "absolute",
	top	    		: "10px",
	left    		: "10px",
	width    		: "200px",
	height   		: "300px",
	padding  		: "4px",
	margin   		: "2px",
	border   		: "dotted black 1px",
	overflow 		: "scroll",
	color			: "black",
	backgroundColor	: "white"
};

// Abhängig vom Log-Modus wird vor oder nach jeder Meldung ein Break eingefügt.
AnemaLog.prototype.write = function( msg ){
	if( !msg ) return;
	if( !this.domElement ) return;

	if( this.mode == "prepend" ){
		this.domElement.innerHTML = msg + "<br />" + this.domElement.innerHTML;
	}else{
		// Default mode "append".
		this.domElement.innerHTML += "<br />" + msg;
	}
};


// obj kann ein DOM-Element oder die ID eines solchen sein.
// Wurde kein oder kein gültiges Element übergeben, bleibt das alte Log-Div
// erhalten, so es existiert. Falls nicht, wird ein Default-Div angelegt.
AnemaLog.prototype.setDomElement = function( obj ){
	if( typeof obj == "string" ) obj = document.getElementById( obj );
	if( obj ){
		this.domElement = obj;
	}else{
		// Falls wir bereits ein DOM-Element haben, bleiben wir dabei.
		if( !this.domElement ){
			this.domElement = AnemaLog._createDefaultDomElement();
		}
	}

	if( this.domElement ){
		this.setStyles( this.cssStyles );
		this.domElement.style.display = '';
	}
};

AnemaLog.prototype.getDomElement = function(){
	return this.domElement;
};

AnemaLog.prototype.setMode = function( mode ){
	this.mode = (mode == "prepend") ? "prepend" : "append";	// "append" is default.
};

AnemaLog.prototype.getMode = function(){
	return this.mode;
};


AnemaLog._createDefaultDomElement = function(){
	var obj = document.createElement( "div" );
	document.body.appendChild( obj );

	return obj;
};

AnemaLog.prototype.setStyles = function( cssStyles ){
	this.cssStyles = cssStyles;
	if( this.domElement ){
		var style = this.domElement.style;
		for( var p in this.cssStyles ){
			style[p] = this.cssStyles[p];
		}
	}
};