
/**
* Wandelt den String in einen Boolean um.
* @type Boolean
*/
String.prototype.ToBoolean = function() {
    return (/^true$/i).test(this);
};
/**
* Prüft den String auf einen übergebenen Wert und gibt das Result als Boolean zurück.
* @type Boolean
* @param {String} key Der Wert, welcher im String enthalten sein  soll.
*/
String.prototype.Contains = function(key) {
    return (this.indexOf(key) != -1);
};
/**
* Formartiert einen String auf Basis eines Templates um und gibt das Result zurück.
* @type Boolean
* @param {Array} arguments Die Werte, die in das Template einfliessen sollen.
*/
String.prototype.Format = function() {
    var ret = this;

    if (arguments.length > 0) {
        for (var i = 0; i < arguments.length; i++) {
            ret = ret.replace("{" + i + "}", arguments[i]);
        }
    }

    return ret;
};
/**
* @class Enum
* ist eine Klasse, die als NameSpace f&uuml;r Enumeratoren steht. Sie ist ohne Weiteres erweiterbar.
* <br><br>
* 
Die Klasse Enum ist eine static Klasse, sie muß nicht instanziert werden 
* und steht zum sofortigen Zugriff bereit. 
*/
var Enum =
{
    /**
    * Enth&auml;lt die verschiedenen Typen der clientseitigen Konstrukte. 
    * @type Enumerator
    */
    Types:
	{
	    Undefined: "undefined",
	    Object: "object",
	    Input: "input",
	    CheckBox: "checkbox"
	},
    /**
    * Enth&auml;lt die verschiedenen TagNamen der clientseitigen Konstrukte. 
    * @type Enumerator
    */
    TagNames:
	{
	    Td: "td",
	    Tr: "tr",
	    Table: "table",
	    Input: "input",
	    Button: "button",
	    Anchor: "a",
	    Div: "div"
	},
    /**
    * Enth&auml;lt die verschiedenen DisplayTypes f&uuml;r die Attribute <b>style.display</b> und <b>style.visibility</b>. 
    * @type Enumerator
    */
    DisplayTypes:
	{
	    Empty: "",
	    Block: "block",
	    None: "none",
	    Hidden: "hidden",
	    Visible: "visible",
	    Static: "Static",
	    Dynamic: "Dynamic"
	},
    /**
    * Enthält die Namen der gebräuchlichsten Browser. 
    * @type Enumerator
    */
    Browser:
	{
	    FireFox: "FIREFOX",
	    InternetExplorer: "MSIE",
	    Opera: "OPERA",
	    Safari: "SAFARI",
	    Chrome: "CHROME"
	}
};
/**
* @class BrowserInfo
* ist eine Klasse, der das Pr&uuml;fen des Browsers und das Ausgeben von Informationen
* &uuml;ber Denselben obliegt.
* <br><br>
* Die Klasse BrowserInfo ist eine static Klasse, sie muß nicht instanziert werden 
* und steht zum sofortigen Zugriff bereit.  
* <br> 
*/
var BrowserInfo =
{
    /**
    * Zeigt an, ob Eigenschaft <b>DHTML</b> unterst&uuml;tzt wird. 
    * @type Boolean
    */
    DHTML: false,
    /**
    * Zeigt an, ob Eigenschaft <b>DOM</b> unterst&uuml;tzt wird. 
    * @type Boolean
    */
    DOM: false,
    /**
    * Zeigt an, ob Browser <b>MSIE4</b> genutzt wird. 
    * @type Boolean
    */
    MSIE4: false,
    /**
    * Zeigt an, ob Browser <b>MSIE6</b> genutzt wird. 
    * @type Boolean
    */
    MSIE6: false,
    /**
    * Zeigt an, ob Browser <b>NS4</b> genutzt wird. 
    * @type Boolean
    */
    NS4: false,
    /**
    * Zeigt an, ob Browser <b>OP</b> genutzt wird. 
    * @type Boolean
    */
    OPERA: false,
    /**
    * Zeigt an, ob Browser <b>FireFox</b> genutzt wird. 
    * @type Boolean
    */
    FIREFOX: false,
    /**
    * Zeigt an, ob Browser <b>MSIE</b> genutzt wird. 
    * @type Boolean
    */
    MSIE: false,
    /**
    * Zeigt an, ob Browser <b>SAFARI</b> genutzt wird. 
    * @type Boolean
    */
    SAFARI: false,
    /**
    * Zeigt an, ob Browser <b>CHROME</b> genutzt wird. 
    * @type Boolean
    */
    CHROME: false,
    /**
    * Holds the version of Chrome the user has, if being used. 
    * @type Int
    */
    CHROMEVERSION: 0,
    /**
    * Enth&auml;lt den Browsertyp
    * <br><br>
    * Wird in folgenden Methoden aufgerufen:
    * <br><br>
    * <ul>
    * <li>{@link #.SetDetail}</li>
    * </ul> 
    * @type String
    */
    BrowserType: new String(""),
    /**
    * Pr&uuml;ft den genutzten Browser auf bestimmte Eigenschaften.
    * <br><br>
    * Wird beim Laden der Seite einmal aufgerufen.
    * @type Void
    * @see #.DHTML
    * @see #.DOM
    * @see #.MSIE4
    * @see #.NS4
    * @see #.OP
    * @see #.FireFox
    * @see #.SetDetail
    */
    Check: function() {
        var agent = window.navigator.userAgent;

        this.FIREFOX = agent.toUpperCase().Contains(Enum.Browser.FireFox);
        this.MSIE = agent.toUpperCase().Contains(Enum.Browser.InternetExplorer);
        this.OPERA = agent.toUpperCase().Contains(Enum.Browser.Opera);
        this.SAFARI = agent.toUpperCase().Contains(Enum.Browser.Safari);
        this.CHROME = agent.toUpperCase().Contains(Enum.Browser.Chrome);

        if (this.CHROME) this.CHROMEVERSION = agent[(agent.toUpperCase().indexOf(Enum.Browser.Chrome) + 7)];

        if (document.getElementById) {
            this.DHTML = true;
            this.DOM = true;
        }
        else {
            if (document.all) {
                this.DHTML = true;
                this.MSIE4 = true;
            }
            else {
                if (document.layers) {
                    this.DHTML = true;
                    this.NS4 = true;
                }
            }
        }

        this.SetDetail();
        this.MSIE6 = (this.MSIE && (this.BrowserType.toUpperCase() == "IE6"));
    },
    /**
    * Setzt den BrowserTyp.
    * <br><br>
    * Wird in folgenden Methoden aufgerufen:
    * <br><br>
    * <ul>
    * <li>{@link #.Check}</li>
    * </ul> 
    * @type Void
    * @see #.BrowserType
    */
    SetDetail: function() {
        if (this.BrowserType.length == 0) {
            var x = new String("");

            if (document.ids) x = "nc4";
            else if (document.all && !document.getElementById) x = "ie4";
            else if (window.opera && !document.createElement) x = "op5";
            else if (window.opera && window.getComputedStyle) {
                if (document.createRange) x = "op8";
                else if (window.navigate) x = "op7.5";
                else x = "op7.2";
            }
            else if (window.opera && document.compatMode) x = "op7";
            else if (window.opera && document.releaseEvents) x = "op6";
            else if (document.contains && !window.opera) x = "kq3";
            else if (window.pkcs11 && window.XML) x = "f15";
            else if (window.getSelection && window.atob) x = "nn7";
            else if (window.getSelection && !document.compatMode) x = "nn6";
            else if (window.clipboardData && document.compatMode && window.XMLHttpRequest && (window.navigator.appVersion.indexOf("MSIE 6") == -1)) x = "ie7";
            else if (window.clipboardData && document.compatMode) x = "ie6";
            else if (window.clipboardData) {
                x = "ie5";

                if (!document.createDocumentFragment) x += ".5";
                if (document.doctype && !window.print) x += "m";
            }

            else if (document.getElementById && !document.all) x = "op4";
            else if (document.images && !document.all) x = "nn3";
            else if (document.clientWidth && !window.RegExp) x = "kq2";
            else x = "???";

            this.BrowserType = x;
        }
    }
};

BrowserInfo.Check();

var Global = {
    /**
    * Gibt ein Objekt basierend auf einem Objekt oder einer Id des Objektes zur&uuml;ck.
    * Ist das Objekt null, so wird <i>false</i> zur&uumlckgegeben.
    * Standardaufruf zum Holen eines HTML-Objektes. Wird in fast allen Methoden aufgerufen.
    * @type Object
    * @param {Object} obj Object oder Stringid
    */
    GetElement: function(obj) {
        if (typeof (obj) != "object") {
            if (BrowserInfo.DOM) obj = document.getElementById(obj);
            else if (BrowserInfo.MSIE4) obj = document.all(obj);
            else if (BrowserInfo.NS4) obj = document.anchors[obj];
        }
        return (obj != null ? obj : false);
    },
    /**
    * Zeigt ein Objekt an oder versteckt es wieder.
    * Es wird sowohl <b>display</b> als auch <b>visibility</b> unterst&uuml;tzt.
    * @type Void
    * @param {Array} Argumentenarray 0 - Objekt das angezeigt werden soll<br/>1 - Attributevalue Siehe dazu {@link Enum.DisplayTypes}<br/>2 - Boolean ob visibility statt display verwendet werden soll
    * @see #GetElement
    * @see #SetParameters
    * @see #isVisibility
    * @see BrowserInfo#NS4
    */
    Display: function() {
        var obj = (arguments[0] != null ? this.GetElement(arguments[0]) : false);
        var displayType = (arguments[1] != null ? arguments[1] : Enum.DisplayTypes.Block);
        var isVisibility = (arguments[2] != null ? arguments[1] : false);

        if (obj) {
            if (isVisibility) {
                if (BrowserInfo.NS4) obj.visibility = displayType;
                else obj.style.visibility = displayType;
            }
            else {
                if (BrowserInfo.NS4) obj.display = displayType;
                else obj.style.display = displayType;
            }
        }
    },
    /**
    * Zeigt an, ob das Objekt angezeigt wird.
    * @type Void
    * @param {Object} objToReplace Das zuersetzende Objekt
    * @param {Object} replaceObject Das ersetzende Objekt
    * @see #GetElement
    * @see BrowserInfo#NS4
    */
    IsVisible: function(obj) {
        var ret = false;
        obj = this.GetElement(obj);

        if (obj) {
            if (BrowserInfo.NS4) ret = (obj.display != "none");
            else ret = (obj.style.display != "none");
        }

        return ret;
    },
    /**
    * Display given object
    * @type Void
    * @param {Object} Das &uml;bergebene Objekt
    * @see #Display
    * @see #GetElement
    */
    SwitchDisplay: function(obj) {
        obj = this.GetElement(obj);
        if (obj) {
            var displayType = new Array("block", "none");
            this.Display(obj, displayType[Number(obj.style.display == "block")]);
        }
    },
    /**
    * Change displayed emelents
    * Dabei wird das zu ersetzende Objekt nur versteckt.
    * @type Void
    * @param {Object} objToReplace Das zuersetzende Objekt
    * @param {Object} replaceObject Das ersetzende Objekt
    * @see #Display
    */
    SwitchObject: function(objToReplace, replaceObject) {
        var obj = this.GetElement(replaceObject);
        this.Display(objToReplace, "none");
        this.Display(obj, "inline");
        if (this.IsVisible(obj)) obj.focus();
    }
}