/***********************************************************
 *                                                         *
 * Projekt:             Objektorientierte Programmierung   *
 *                      um browserunabhängige Javascripte  *
 *                      einfach einsetzen zu können.       *
 *                                                         *
 * Datum beginn:        2003-09-28                         *
 * Datum Änderung:      2003-09-28                         *
 *                                                         *
 * Version:             0.0                                *
 *                                                         *
 * Beschreibung:        Dient als Javascript Schnittstelle *
 *                      für mit DIV-Tags angelegte Layer.  *
 *                                                         *
 ***********************************************************/

function Ebene(name) {

	// Objekt Eigenschaften, öffentlich.
	this.browser          = new Browser(); // Über diese Eigenschaft holt sich das Objekt Browserinformationen.
	
	// Statische Eigenschaften, öffentlich.

	// Objekt Eigenschaften, privat.
	this._name            = name; // Der Name (id) des DIV-Tags.
	this._obj             = new Object();

	// Statische Eigenschaften, privat.

	// Objekt Methoden, öffentlich.
	// Gibt die ID des DIV-Tags zurück.
	this.name             =	function() {
							
								return this._name;
							}

	// Setzt die X-Position des Layers.
	// Wird die Methode ohne Parameter aufgerufen, so gibt sie
	// die aktuelle X-Position zurück.
	this.x                =	function() {

								var xPos = parseInt(arguments[0]);

								if(xPos) {

									this._obj.left = xPos;
								}
								else {

									return parseInt(this._obj.left);
								}
							}

	// Setzt die Y-Position des Layers.
	// Wird die Methode ohne Parameter aufgerufen, so gibt sie
	// die aktuelle Y-Position zurück.
	this.y                =	function() {

								var yPos = parseInt(arguments[0]);

								if(yPos) {

									this._obj.top = yPos;
								}
								else {

									return parseInt(this._obj.top);
								}
							}

	// Setzt die Breite des Layers.
	// Wird die Methode ohne Parameter aufgerufen, so gibt sie
	// die aktuelle Breite zurück.
	this.breite           =	function() {
							
								var breite = parseInt(arguments[0]);

								if(breite) {

									if(this.browser.ie) {

										this._obj.width = breite;
									}
									else if(this.browser.ns && parseInt(this.browser.version) < 6) {

										this._obj.clip.width = breite;
									}
									else if(this.browser.ns && parseInt(this.browser.version) >= 6) {

										this._obj.width = breite;
									}
									else if(this.browser.op) {

										this._obj.pixelWidth = breite;
									}
									else if(this.browser.mo) {

										this._obj.width = breite;
									}
								}
								else {

									if(this.browser.ie) {

										return parseInt(this._obj.width);
									}
									else if(this.browser.ns && parseInt(this.browser.version) < 6) {

										return parseInt(this._obj.clip.width);
									}
									else if(this.browser.ns && parseInt(this.browser.version) >= 6) {

										return parseInt(this._obj.width);
									}
									else if(this.browser.op) {

										return parseInt(this._obj.pixelWidth);
									}
									else if(this.browser.mo) {

										return parseInt(this._obj.width);
									}
								}
                       	}

	// Setzt die Höhe des Layers.
	// Wird die Methode ohne Parameter aufgerufen, so gibt sie
	// die aktuelle Höhe zurück.
	this.hoehe                =	function() {
							
								var hoehe = parseInt(arguments[0]);

								if(hoehe) {

									if(this.browser.ie) {

										this._obj.height = hoehe;
									}
									else if(this.browser.ns && parseInt(this.browser.version) < 6) {

										this._obj.clip.height = hoehe;
									}
									else if(this.browser.ns && parseInt(this.browser.version) >= 6) {

										this._obj.height = hoehe;
									}
									else if(this.browser.op) {

										this._obj.pixelHeight = hoehe;
									}
									else if(this.browser.mo) {

										this._obj.height = hoehe;
									}
								}
								else {

									if(this.browser.ie) {

										return parseInt(this._obj.height);
									}
									else if(this.browser.ns && parseInt(this.browser.version) < 6) {

										return parseInt(this._obj.clip.height);
									}
									else if(this.browser.ns && parseInt(this.browser.version) >= 6) {

										return parseInt(this._obj.height);
									}
									else if(this.browser.op) {

										return parseInt(this._obj.pixelHeight);
									}
									else if(this.browser.mo) {

										return parseInt(this._obj.height);
									}
								}
                         	}

	// Setzt die Hintergrundfarbe des Layers.
	// Wird die Methode ohne Parameter aufgerufen, so gibt sie
	// die aktuelle Hintergrundfarbe zurück.
	this.farbe            =	function() {
							
								var farbe = arguments[0];

								if(farbe) {

									if(this.browser.ie) {

										this._obj.backgroundColor = farbe;
									}
									else if(this.browser.ns && parseInt(this.browser.version) < 6) {

										this._obj.bgColor = farbe;
									}
									else if(this.browser.ns && parseInt(this.browser.version) >= 6) {

										this._obj.backgroundColor = farbe;
									}
									else if(this.browser.op) {

										this._obj.backgroundColor = farbe;
									}
									else if(this.browser.mo) {

										this._obj.backgroundColor = farbe;
									}
								}
								else {

									if(this.browser.ie) {

										farbe = this._obj.backgroundColor;
									}
									else if(this.browser.ns && parseInt(this.browser.version) < 6) {

										farbe = "#" + this._dezHex(this._obj.bgColor);
									}
									else if(this.browser.ns && parseInt(this.browser.version) >= 6) {

										var muster = /rgb\(([0-9]{1,3}),([0-9]{1,3}),([0-9]{1,3})\)/i;
										
										farbe = this._obj.backgroundColor;

										farbe.search(muster);

										farbe = "#" + this._dezHex(RegExp.$1) + this._dezHex(RegExp.$2) + this._dezHex(RegExp.$3);
									}
									else if(this.browser.op) {

										farbe = this._obj.backgroundColor;
									}
									else if(this.browser.mo) {

										var muster = /rgb\(([0-9]{1,3}),([0-9]{1,3}),([0-9]{1,3})\)/i;
										
										farbe = this._obj.backgroundColor;

										farbe.search(muster);

										farbe = "#" + this._dezHex(RegExp.$1) + this._dezHex(RegExp.$2) + this._dezHex(RegExp.$3);
									}

									if(farbe && farbe != "#") { return farbe.toUpperCase(); }
									else { return "#000000"; }
								}
							}

	// Schaltet den Layer auf sichtbar oder unsichtbar.
	// Wird die Methode ohne Parameter aufgerufen, so gibt sie
	// die aktuelle Sichtbarkeit zurück.
	this.sichtbarkeit     =	function() {

								var sichtbarkeit = arguments[0];

								if(sichtbarkeit) {

									this._obj.visibility = sichtbarkeit;
								}
								else {

									var visibility = this._obj.visibility.toLowerCase();

									if(!visibility || visibility == "visible" || visibility == "show") { return "visible"; }
									else if(visibility == "hidden" || visibility == "hide") { return "hidden"; }
								}
							}

	// Setzt den Z-Index.
	// Wird die Methode ohne Parameter aufgerufen, so gibt sie
	// den aktuellen Z-Index zurück.
	this.zIndex           =	function() {
							
								var zIndex = arguments[0];

								if(zIndex) {

									this._obj.zIndex = zIndex;
								}
								else {

									return this._obj.zIndex;
								}
							}

	// Statische Methoden, öffentlich.

	// Objekt Methoden, privat.
	// Errechnet aus einer dezimalen Zahl die hexadezimale Zahl.
	this._dezHex          =	function(dezZahl) {

								var tmpZahl = 0;
								var hexCode = new Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F");
								var hexZahl = "";
							
								while(tmpZahl = dezZahl % 16) {

									hexZahl = hexCode[tmpZahl] + hexZahl;
									dezZahl = parseInt(dezZahl / 16);
								}

								return hexZahl;
							}

	this.toString         =	function() {

								var derString = "Eine Schnittstelle zum DIV-Layer.\n\n";
								derString    += "Objekt Eigenschaften:\n";
								derString    += "object\tbrowser:\t(new Browser())\n\n";
								derString    += "Statische Eigenschaften: keine\n\n";
								derString    += "Objekt Methoden:\n";
								derString    += "string\t\t\tname(void)\n";
								derString    += "void|int\t\t\tx(int|void)\n";
								derString    += "void|int\t\t\ty(int|void)\n";
								derString    += "void|int\t\t\tbreite(int|void)\n";
								derString    += "void|int\t\t\thoehe(int|void)\n";
								derString    += "void|'visible' bzw. 'hidden'\tsichtbarkeit(string|void)\n";
								derString    += "void|'#RRGGBB'\t\tfarbe(string|void)\n";
								derString    += "void|int\t\t\tzIndex(int|void)\n";
								derString    += "string\t\t\ttoString(void)\n\n";
								derString    += "Statische Methoden: keine";

								return derString;
							}

	// Statische Methoden, privat.

	// Konstruktor.
	if(this.browser.ie) {

		this._obj = document.all[this._name].style;
	}
	else if(this.browser.ns && parseInt(this.browser.version) < 6) {

		this._obj = document[this._name];
	}
	else if(this.browser.ns && parseInt(this.browser.version) >= 6) {

		this._obj = document.getElementById(this._name).style;
	}
	else if(this.browser.mo) {

		this._obj = document.getElementById(this._name).style;
	}
	else if(this.browser.op) {

		this._obj = document.getElementById(this._name).style;
	}
}

