/***********************************************************
 *                                                         *
 * Projekt:             Objektorientierte Programmierung   *
 *                      um browserunabhängige Javascripte  *
 *                      einfach einsetzen zu können.       *
 *                                                         *
 * Datum beginn:        2003-09-28                         *
 * Datum Änderung:      2003-09-29                         *
 *                                                         *
 * Version:             0.0                                *
 *                                                         *
 * Beschreibung:        Ermittelt Eigenschaften über den   *
 *                      verwendeten Browser und dem        *
 *                      zugrundeliegenden System.          *
 *                                                         *
 ***********************************************************/

function Browser() {

	// Objekt Eigenschaften, öffentlich.
	this.ie          = false;                   // Ist true, wenn es sich um den Microsoft Internet Explorer handelt, egal welche Version und welches System.
	this.ns          = false;                   // Ist true, wenn es sich um den Netscape handelt, egal welche Version und welches System.
	this.op          = false;                   // Ist true, wenn es sich um den Opera handelt, egal welche Version und welches System.
	this.mo          = false;                   // Ist true, wenn es sich um den Morzilla handelt, egal welche Version und welches System.
	this.version     = "";                      // Gibt die Versionsnummer an;
	this.system      = "unbekannt";             // Gibt das System an. Werte sind: "Windows", "Macintosh", "Linux" und "unbekannt".
	this.name        = "unbekannt";             // Gibt den vollständigen Namen des Browsers an. Werte sind: "Microsoft Internet Explorer", "Netscape", "Opera", "Morzilla".
	
	// Statische Eigenschaften, öffentlich.

	// Objekt Eigenschaften, privat.
	this._appName    = navigator.appName;       // Offizieller Name des Browsers. Bei Opera ist es der Name, als der er sich ausgibt.
	this._userAgent  = navigator.userAgent;     // HTTP-Identifikation des Browsers.

	// Statische Eigenschaften, privat.

	// Objekt Methoden, öffentlich.
	this.toString                 =	function() {

										var derString = "Ermittelt Eigenschaften über den Browser und das System.\n\n";
										derString    += "Objekt Eigenschaften:\n";
										derString    += "boolean\tie:\t" + this.ie + "\n";
										derString    += "boolean\tns:\t" + this.ns + "\n";
										derString    += "boolean\top:\t" + this.op + "\n";
										derString    += "boolean\tmo:\t" + this.mo + "\n";
										derString    += "string\tversion:\t" + this.version + "\n";
										derString    += "string\tname:\t" + this.name + "\n";
										derString    += "string\tsystem:\t" + this.system + "\n\n";
										derString    += "Statische Eigenschaften: keine\n\n";
										derString    += "Objekt Methoden:\n";
										derString    += "string\ttoString(void)\n\n";
										derString    += "Statische Methoden: keine";

										return derString;
									}

	// Statische Methoden, öffentlich.

	// Objekt Methoden, privat.
	this._browserTyp              =	function() {
								
										if(this._appName == "Microsoft Internet Explorer" && this._userAgent.indexOf("Opera") == -1) {

											// Internet Explorer.
											this.ie      = true;
											this.name    = "Microsoft Internet Explorer";

											var muster   = /MSIE\s?([0-9](\.[0-9]+)*);/;
											if(this._userAgent.search(muster) != -1) { this.version = RegExp.$1;}
										}
										else if(this._userAgent.indexOf("Gecko") != -1 && this._userAgent.indexOf("Netscape") == -1) {

											// Mozilla.
											this.mo      = true;
											this.name    = "Mozilla";

											var muster   = /rv:([0-9](\.[0-9]+)*)/;
											if(this._userAgent.indexOf("Gecko") != -1 && this._userAgent.search(muster) != -1) { this.version = RegExp.$1;}
										}
										else if(this._appName == "Netscape" && this._userAgent.indexOf("Opera") == -1) {

											// Netscape.
											this.ns      = true;
											this.name    = "Netscape";

											var muster1  = /Netscape.*\/([0-9](\.[0-9]+)*)/; // Netscape >= 6.
											var muster2  = /Mozilla\/([0-9](\.[0-9]+)*)/;    // Netscape >= 4.05 und < 6;

											if     (this._userAgent.indexOf("Gecko") != -1 && this._userAgent.search(muster1) != -1) { this.version = RegExp.$1; }
											else if(this._userAgent.indexOf("Gecko") == -1 && this._userAgent.search(muster2) != -1) { this.version = RegExp.$1; }
										}
										else if(this._userAgent.indexOf("Opera") != -1) {

											// Opera.
											this.op      = true;
											this.name    = "Opera";

											var muster   = /Opera\s?([0-9](\.[0-9]+)*)/;
											if(this._userAgent.search(muster) != -1) { this.version = RegExp.$1;}
										}
							    	}
	
	this._systemTyp               =	function() {
									
										var muster1 = /Windows|WinNT/;
										var muster2 = /Mac/;
										var muster3 = /Linux/;

										if     (this._userAgent.search(muster1) != -1) { this.system = "Windows"; }
										else if(this._userAgent.search(muster2) != -1) { this.system = "Macintosh"; }
										else if(this._userAgent.search(muster3) != -1) { this.system = "Linux"; }
									}

	// Statische Methoden, privat.

	// Konstruktor.
	this._browserTyp();
	this._systemTyp();
}