(function () {
var previous_;
var utilarium = {
    noConflict : function () {
        _ = previous_;
        return utilarium;
    }
    , isString : function (x) {
        try {
            if (x.constructor === String)
                return true;
        } catch (e) {}
        return String(x) === x;
    }
    , baue : function (tagName, attr, inhalt) {
        attr = attr || {};
        inhalt = inhalt || [];
        var rv = $(document.createElement(tagName));
        for (var key in attr) {
            var value = attr[key];
            var k = key.toLowerCase();
            if (k.startsWith("on"))
                rv.observe(k.substring(2), value);
            else if ("class" == k)
                rv.addClassName(value);
            else if ("css" == k)
                rv.setStyle(value);
            else
                rv.setAttribute(key, value);
        }
        $A(inhalt).each(function (elem) {
            rv.appendChild(
                utilarium.isString(elem)
                ? document.createTextNode(elem)
                : elem
            );
        });
        return rv;
    }
    , uistrings : function (hash) {
        function einsetzen (str) {
            var args = $A(arguments);
            args.shift(); 
            while (args.length > 0)
                str = str.replace(/\$/, args.shift());
            return str;
        }
        var rv = {};
        for (var s in hash) {
            rv[s] = einsetzen.bind(this, hash[s]);
            rv[s].toString = rv[s];
        }
        return rv;
    }
    , expando : function (domElement) {
        var args = $A(arguments);
        if (args.length == 3)
            expandoEinzeln(domElement, args[1], args[2]);
        else {
            for (var it in args[1])
                expandoEinzeln(domElement, it, args[1][it]);
        }
    }
    , trim : function (s) {
        if (! s)
            return "";
        return s.replace(/^\s+/, "").replace(/\s+$/, "");
    }
    , contains : function (array, element) {
        for (var i = 0; i < array.length; i++) {
            if (array[i] == element)
                return true;
        }
        return false;
    }
    , objektBauen : function (array, generator) {
        var rv = {};
        $A(array).map(generator).map(function (kv) { rv[kv[0]] = kv[1]; });
        return rv;
    }
    , cookiesHer : function (dekodieren) {
        if (dekodieren == undefined)
            dekodieren = true;
        var rv = utilarium.objektBauen(
            document.cookie.split(/[ \u0009]*;[ \u0009]*/),
            function (cookie) {
                var rv = cookie.split("=", 2);
                if (dekodieren)
                    rv[1] = decodeURIComponent(rv[1]);
                return rv;
            });
        return rv;
    }
    , cookieSchreiben : function(name, wert, attribute, enkodieren) {
        if (enkodieren == undefined || enkodieren == true)
            wert = encodeURIComponent(wert);
        var a = "";
        for (var it in attribute)
            a += ";" + it + "=" + attribute[it];
        document.cookie = name + "=" + wert + a;
    }
    , baueLoeschenKnopf : function (parameter) {
        return utilarium.baue("span",
            Object.extend({ "class": "loeschenXBehaelter" }, parameter),
            [
                utilarium.baue("img", {
                    "class": "loeschenX"
                    ,"src": "/software/icons/loeschen-x.gif"
                })
            ]);
    }
};
var previous_ = this["_"];
_ = utilarium;
var expandoEinzeln =
    /MSIE/.test(navigator.userAgent)
    ? function (elem, name, wert) {
        elem[name] = wert;
        Event.observe(window, "unload", function () {
            elem[name] = null;
        });
    }
    : function (elem, name, wert) {
        elem[name] = wert;
    }
;
})();

