/* DON'T EDIT THIS GENERATED FILE! Changes will be lost. */

function ajaxLib() {
    if (UserAgent.knowsAjax) {
        var defaultLoadingMessage = '<p style="height: 100%; background: url(//img.web.de/v/home06/icons/loading.gif) no-repeat 50% 50%;"><!--Die Seite wird geladen ...--></p>';
        var defaultErrorMessage   = '<h3>Es ist ein Fehler aufgetreten.</h3><p>Die Seite konnte nicht geladen werden. Bitte versuchen Sie es erneut oder klicken Sie auf folgenden Link: <a href="${url}">${title}</a></p>';
        function getElementContent(item, tagname, defaultValue) {
            if (isUndefined(defaultValue)) { defaultValue = ''; }
            return isSet(item) && item.getElementsByTagName(tagname).length && item.getElementsByTagName(tagname)[0].firstChild
                ?  item.getElementsByTagName(tagname)[0].firstChild.nodeValue
                : defaultValue;
        }
        var MSWebItem = function(item) {
            this.link        = getElementContent(item, 'link');
            this.title       = getElementContent(item, 'title');
        }
        var MSPicItem = function(item) {
            this.link        = item.getAttribute('page_url');
            this.imageUrl    = item.getAttribute('thumb_url');
            this.imageWidth  = item.getAttribute('thumb_width')/128*74;
            this.imageHeight = item.getAttribute('thumb_height')/128*74;
        }
        var MSNewsItem = function(item) {
            this.link        = getElementContent(item, 'link');
            this.title       = getElementContent(item, 'title').replace(/<span class="highlighting">/g, '').replace(/<\/span>/g, '').replace(/<strong>/g, '').replace(/<\/strong>/g, '');
            this.source      = getElementContent(item, 'source');
            this.pubDate     = new Date(getElementContent(item, 'pubDate')).getTime();
        }
        var MSDirItem = function(item) {
            this.link        = getElementContent(item, 'url');
            this.title       = getElementContent(item, 'title');
            this.categories  = [];
            var cats         = item.getElementsByTagName('category');
            for (var i=0; i<cats.length; ++i) {
                this.categories.push({'path': getElementContent(cats[i],'path'), 'name': getElementContent(cats[i],'name')});
            }
        }
        var MSWikiItem = function(item) {
            this.link        = item.getAttribute('page_url');
            this.imageUrl    = item.getAttribute('thumb_url');
            this.imageWidth  = item.getAttribute('thumb_width')/128*74;
            this.imageHeight = item.getAttribute('thumb_height')/128*74;
        }
        var AbstractRenderer = function(options) {
            this.options      = options || {};
            this.object       = null;
            this.data         = null;
            this.outputEngine = null;
            this.maxItems     = 5;
            this.render = function(obj, data) {
                this.object = obj;
                this.data   = data;
                if (this.options['preRendering'])   { this.runFunctions(this.options['preRendering']); }
                this.clearContent();
                this.doRendering();
                if (this.options['postRendering'])  { this.runFunctions(this.options['postRendering']); }
                if (!this.options['avoidTooltips']) {  } 
                if (UserAgent.isIe) { addFirstLastClasses(this.object); }
            }
            this.runFunctions = function(funcs) {
                if (isArray(funcs)) {
                    var result = false;
                    for (var i=0; i<funcs.length; i++) {
                        result |= funcs[i](this.object);
                    }
                    return result;
                } else {
                    return funcs(this.object);
                }
            }
            this.clearContent = function() {
                var c = this.object.getContentElement();
                while (c.firstChild) {
                    c.removeChild(c.firstChild);
                }
            }
            this.doRendering = function() {
                this.outputEngine.render(this);
            }
            this.renderAsString = function(data) {
                this.object.getContentPart(0).innerHTML = data;
            }
            this.setOutputEngine = function(outputEngine, maxItems) {
                this.outputEngine = outputEngine;
                if (!isUndefined(maxItems)) { this.setMaxItems(maxItems); }
                return this;
            }
            this.setMaxItems = function(maxItems) {
                if (isNumber(maxItems)) { this.maxItems = maxItems; }
                return this;
            }
            this.generateTooltips = function() {
                initTooltips(this.object.getContentElement());
            }
        }
        HtmlRenderer = function(options) {
            this.isHtmlRenderer = true;
            this.options        = (options||{}).defaultIs(this.options);
            this.getItems = function() {
                if (isString(this.data)) { return new Array(this.data); }
                if (!this.data.responseXML || !this.data.responseXML.documentElement || this.data.responseXML.documentElement.nodeName!='multiparts') {
                    return new Array(this.data.responseText);
                }
                var xml = (this.data.responseXML && this.data.responseXML.documentElement) ? this.data.responseXML : this.data.responseText.toDom();
                return xml.getElementsByTagName('part');
            }
        }
        HtmlRenderer.prototype = new AbstractRenderer();
        MSWebRenderer = function(nr, options) {
            this.isRssRenderer = true;
            this.options       = Object.extend(options||{}, this.options);
            this.maxItems      = (nr) ? nr : 5;
            this.getItems = function() {            
                var xml = this.data.responseXML;
                if (!xml || !xml.documentElement) { xml = this.data.responseText.toDom(); }
                var items  = xml.getElementsByTagName('item');
                var result = new Array();
                for (var i=0; i<Math.min(items.length, this.maxItems); i++) {
                    result.push(new MSWebItem(items[i]));
                }
                return result;
            }
        }
        MSWebRenderer.prototype = new AbstractRenderer();
        MSPicRenderer = function(nr, options) {
            this.isRssRenderer = true;
            this.options       = Object.extend(options||{}, this.options);
            this.maxItems      = (nr) ? nr : 5;
            this.getItems = function() {            
                var xml = this.data.responseXML;
                if (!xml || !xml.documentElement) { xml = this.data.responseText.toDom(); }
                var items  = xml.getElementsByTagName('image');
                var result = new Array();
                for (var i=0; i<Math.min(items.length, this.maxItems); i++) {
                    result.push(new MSPicItem(items[i]));
                }
                return result;
            }
        }
        MSPicRenderer.prototype = new AbstractRenderer();
        MSNewsRenderer = function(nr, options) {
            this.isRssRenderer = true;
            this.options       = Object.extend(options||{}, this.options);
            this.maxItems      = (nr) ? nr : 5;
            this.getItems = function() {            
                var xml = this.data.responseXML;
                if (!xml || !xml.documentElement) { xml = this.data.responseText.toDom(); }
                var items  = xml.getElementsByTagName('item');
                var result = new Array();
                for (var i=0; i<Math.min(items.length, this.maxItems); i++) {
                    result.push(new MSNewsItem(items[i]));
                }
                return result;
            }
        }
        MSNewsRenderer.prototype = new AbstractRenderer();
        MSDirRenderer = function(nr, options) {
            this.isRssRenderer = true;
            this.options       = Object.extend(options||{}, this.options);
            this.maxItems      = (nr) ? nr : 5;
            this.getItems = function() {            
                var xml = this.data.responseXML;
                if (!xml || !xml.documentElement) { xml = this.data.responseText.toDom(); }
                var items  = xml.getElementsByTagName('dir-search-result');
                var result = new Array();
                for (var i=0; i<Math.min(items.length, this.maxItems); i++) {
                    result.push(new MSDirItem(items[i]));
                }
                return result;
            }
        }
        MSDirRenderer.prototype = new AbstractRenderer();
        MSWikiRenderer = function(nr, options) {
            this.isRssRenderer = true;
            this.options       = Object.extend(options||{}, this.options);
            this.maxItems      = (nr) ? nr : 5;
            this.getItems = function() {            
                var xml = this.data.responseXML;
                if (!xml || !xml.documentElement) { xml = this.data.responseText.toDom(); }
                var items  = xml.getElementsByTagName('image');
                var result = new Array();
                for (var i=0; i<Math.min(items.length, this.maxItems); i++) {
                    result.push(new MSWikiItem(items[i]));
                }
                return result;
            }
        }
        MSWikiRenderer.prototype = new AbstractRenderer();
        PlainRenderer = function(options) {
            this.isPlainRenderer = true;
            this.doRendering = function() {
                this.renderAsString(isString(this.data) ? this.data : this.data.responseText);
            }
        }
        PlainRenderer.prototype = new AbstractRenderer();
        var AbstractOutput = function() {
            this.renderer = null;
            this.object   = null;
            this.items    = null;
            this.maxItems = 5;
            this.render = function(renderer) {
                renderer.setMaxItems(this.maxItems);
                this.renderer = renderer;
                this.object   = renderer.object;
                this.items    = renderer.getItems();
                this.output();
            }
            this.setMaxItems = function(maxItems) {
                this.maxItems = maxItems;
                return this;
            }
            this._outputAmount = function(target, amount) {
                var text = target.innerHTML;
                text = text.replace(/\s*\(.*\)/, '');
                if(amount && amount >= 1) text += ' ('+amount+')';
                target.innerHTML = text;
            }
        }
        HtmlOutput = function() {
            this.output = function() {
                for (var i=0; i<this.items.length; i++) {
                    var item = this.items[i];
                    if (isString(item)) {
                        this.object.getContentPart(i).innerHTML = item;
                        continue;
                    }
                    this.object.getContentPart(i).innerHTML = '';
                    for (var j=0; j<item.childNodes.length; j++) {
                        this.object.getContentPart(i).innerHTML += item.childNodes[j].toString ? item.childNodes[j].toString() : item.childNodes[j].xml;
                    }
                    if (item.getAttribute('id')) {
                        this.object.getContentPart(i).id = item.getAttribute('id');
                    }
                    if (item.getAttribute('class')) {
                        this.object.getContentPart(i).className += ' '+item.getAttribute('class');
                    }
                    if (item.getAttribute('separate')) {
                        insertAfter(newElement('div', {'class':'hr'}, newElement('hr')), this.object.getContentPart(i));
                    }
                }
                if (this.object.hasPagesNav) {
                    this.object.createPagesNav();
                }
            }
        }
        HtmlOutput.prototype = new AbstractOutput();
        MSWebHtmlOutput = function() {
            this.maxItems = 5;
            this.output = function() {
                var output = "";
                if (this.items.length > 0) {             
                    for (var i=0; i<Math.min(this.items.length, this.maxItems); i++) {
                        this.items[i].stitle  = this.items[i].title.shorten(20, 'word');
                        this.items[i].surl   =  this.items[i].link;
                        output += '<div class="searchResult"><h3><a href="${link}"><strong>${stitle}</strong></a></h3><p><span class="url">${surl}</span></p></div>'.inReplace(this.items[i]);
                    }
                    output += '<div class="moreResults"><a href="' + this.object.options['searchpath'] + '?su=' +  this.object.options['searchterm'] + '">mehr Suchergebnisse</a></div>';
                } else {
                    output += '<div class="noResult"><p>Zu Ihrem Suchbegriff wurden keine Ergebnisse gefunden.</p></div><div class="moreResults"><a href="' + this.object.options['searchpath'] + '">zur Websuche</a></div>';
                }
                this.object.getContentPart(0).innerHTML = output;
            }
            this.outputAmount = function(target) {
                this._outputAmount(target, this.renderer.data.responseXML.getElementsByTagName('item').length);
            }
        }
        MSWebHtmlOutput.prototype = new AbstractOutput();
        MSPicHtmlOutput = function() {
            this.maxItems = 4 ;
            this.output = function() {
                var output = "";
                if (this.items.length > 0) {    
                    for (var i=0; i<Math.min(this.items.length, this.maxItems); i++) {
                        output += '<div class="searchResult"><div class="resultImage"><div class="imageInner"><div class="imageInner2"><a href="${link}" target="_blank"><img src="${imageUrl}" alt="" width="${imageWidth}" height="${imageHeight}" border="0" /></a></div></div></div></div>'.inReplace(this.items[i]);
                        if (i==0 || i == 2) {
                            output += '<div class="spacer"></div>';
                        }                      
                    }
                    output += '<div class="moreResults"><a href="' + this.object.options['searchpath'] + '?su=' +  this.object.options['searchterm'] + '">mehr Suchergebnisse</a></div>';
                } else {
                    output += '<div class="noResult"><p>Zu Ihrem Suchbegriff wurden keine Ergebnisse gefunden.</p></div><div class="moreResults"><a href="' + this.object.options['searchpath'] + '">zur Bildersuche</a></div>';
                }
                this.object.getContentPart(0).innerHTML = output;
            }
            this.outputAmount = function(target) {
                this._outputAmount(target, this.renderer.data.responseXML.getElementsByTagName('result')[0].getAttribute('hits'));
            }
        }
        MSPicHtmlOutput.prototype = new AbstractOutput();
        MSDirHtmlOutput = function() {
            this.maxItems = 5;
            var _base_url = 'http://dir.web.de';
            this.output = function() {
                var output = "";
                if (this.items.length > 0) {    
                    for (var i=0; i<Math.min(this.items.length, this.maxItems); i++) {
                        this.items[i].stitle=this.items[i].title.shorten(25, 'word');
                        var url        = _base_url+'/'+this.items[i].categories[0].path;
                        var pathLength = this.items[i].categories.length;
                        output += '<div class="searchResult"><h3><a href="${link}" target="_blank"><strong>${stitle}</strong></a></h3>'.inReplace(this.items[i]);
                        output += '<p><span class="rubric"><a href="'+url+'">${name}</a>'.inReplace(this.items[i].categories[0]);
                        if (pathLength > 2 && parseInt(this.items[i].categories[(pathLength-1)].name)>0) {
                            for (var j=1; j<(pathLength-1); ++j) {
                                url += '/' + this.items[i].categories[j].path;
                            }
                            if (pathLength != 3) { output += ' &gt; ... &gt; ' } else { output += ' &gt; ' };
                            output += '<a href="'+url+'">${name}</a>'.inReplace(this.items[i].categories[this.items[i].categories.length-2]);                                         
                            output += ' &gt; <a href="'+url+'/${path}">${name}</a>'.inReplace(this.items[i].categories[this.items[i].categories.length-1]);
                        } else if (pathLength > 2 && !parseInt(this.items[i].categories[(pathLength-1)].name)>0) {                        
                            for (var j=1; j<pathLength; ++j) {
                                url += '/' + this.items[i].categories[j].path;
                            }
                            output += ' &gt; ...';
                            output += ' &gt; <a href="'+url+'">${name}</a>'.inReplace(this.items[i].categories[this.items[i].categories.length-1]);                  
                        } else if (pathLength == 2 && !parseInt(this.items[i].categories[(pathLength-1)].name)>0) {                        
                            for (var j=1; j<pathLength; ++j) {
                                url += '/' + this.items[i].categories[j].path;
                            }
                            output += ' &gt; <a href="'+url+'">${name}</a>'.inReplace(this.items[i].categories[this.items[i].categories.length-1]);                  
                        }
                        output += '</span></p></div>';
                    }
                    output += '<div class="moreResults"><a href="' + this.object.options['searchpath'] + '?su=' +  this.object.options['searchterm'] + '">mehr Suchergebnisse</a></div>';
                } else {
                    output += '<div class="noResult"><p>Zu Ihrem Suchbegriff wurden keine Ergebnisse gefunden.</p></div><div class="moreResults"><a href="' + this.object.options['searchpath'] + '">zur Verzeichnissuche</a></div>';                
                }
                this.object.getContentPart(0).innerHTML = output;
            }
            this.outputAmount = function(target) {
                this._outputAmount(target, this.renderer.data.responseXML.getElementsByTagName('dir-search-results')[0].getAttribute('total_number_hits'));
            }
        }
        MSDirHtmlOutput.prototype = new AbstractOutput();
        MSNewsHtmlOutput = function() {
            this.maxItems = 5;
            this.output = function() {
                var output = "";
                var cDate  = new Date().getTime();
                if (this.items.length > 0) {    
                    for (var i=0; i<Math.min(this.items.length, this.maxItems); i++) {
                        this.items[i].stitle=this.items[i].title.shorten(20, 'word');
                        output += '<div class="searchResult"><h3><a href="${link}"><strong>${stitle}</strong></a></h3><p><span class="rubric">${source}</span> <span class="timeliness">'.inReplace(this.items[i]);
                        var dDate  = cDate-this.items[i].pubDate;
                        dDate      = Math.ceil(dDate/1000/60); 
                        if (dDate <= 1) {
                            dDate = '1 Minute';
                        } else if (dDate > 1 && dDate < 60) {
                            dDate = dDate + ' Minuten';
                        } else if  (dDate == 60) {
                            dDate = '1 Stunde';
                        } else if  (dDate > 60 && dDate < 2879) {
                            dDate = Math.ceil(dDate/60) + ' Stunden';
                        } else {
                            dDate = Math.ceil(dDate/60/24) + ' Tagen';
                        } 
                        output += '- vor '+dDate+' gefunden</span></p></div>';
                    }
                    output += '<div class="moreResults"><a href="' + this.object.options['searchpath'] + '?su=' +  this.object.options['searchterm'] + '">mehr Suchergebnisse</a></div>';
                } else {
                    output += '<div class="noResult"><p>Zu Ihrem Suchbegriff wurden keine Ergebnisse gefunden.</p></div><div class="moreResults"><a href="' + this.object.options['searchpath'] + '">zur Nachrichtensuche</a></div>';                
                }
                this.object.getContentPart(0).innerHTML = output;
            }
            this.outputAmount = function(target) {
                var hits = '';
                if (!this.renderer.data.responseXML.getElementsByTagNameNS) {
                    if (this.renderer.data.responseXML.getElementsByTagName('ne:hits')[0]) {
                        hits = this.renderer.data.responseXML.getElementsByTagName('ne:hits')[0].firstChild.nodeValue; 
                    }
                } else {
                    if (this.renderer.data.responseXML.getElementsByTagNameNS('http://www.neofonie.de/newsexpress/rssextend','hits')[0]) {
                        hits =  this.renderer.data.responseXML.getElementsByTagNameNS('http://www.neofonie.de/newsexpress/rssextend','hits')[0].firstChild.nodeValue;
                    }
                }
                this._outputAmount(target, hits); 
            }
        }
        MSNewsHtmlOutput.prototype = new AbstractOutput();
        MSWikiHtmlOutput = function() {
            this.maxItems = 1 ;
            this.output = function() {
                var output = "";
                if (this.items.length > 0) {    
                    for (var i=0; i<Math.min(this.items.length, this.maxItems); i++) {
                        output += '<div class="searchResult"><div class="resultImage"><div class="imageInner"><div class="imageInner2"><a href="${link}" target="_blank"><img src="${imageUrl}" alt="" width="${imageWidth}" height="${imageHeight}" border="0" /></a></div></div></div></div>'.inReplace(this.items[i]);
                        if (i==0 || i == 2) {
                            output += '<div class="spacer"></div>';
                        }                      
                    }
                    output += '<div class="moreResults"><a href="' + this.object.options['searchpath'] + '?su=' +  this.object.options['searchterm'] + '">mehr Suchergebnisse</a></div>';
                } else {
                    output += '<div class="noResult"><p>Zu Ihrem Suchbegriff wurden keine Ergebnisse gefunden.</p></div><div class="moreResults"><a href="' + this.object.options['searchpath'] + '">zur Lexikonrichtensuche</a></div>';
                }
                this.object.getContentPart(0).innerHTML = output;
            }
            this.outputAmount = function(target) {
                this._outputAmount(target, this.renderer.data.responseXML.getElementsByTagName('result')[0].getAttribute('hits'));
            }
        }
        MSWikiHtmlOutput.prototype = new AbstractOutput();
        var AbstractAjaxObject = function() {
            this.object      = null;
            this.uri         = null;
            this.renderer    = null;
            this.request     = null;
            this.response    = null;
            this.loadTime    = null;
            this.loaded      = false;
            this.loading     = false;
            this.rendering   = false;
            this.isRendered  = false;
            this.isShown     = false;
            this.isError     = false;
            this.hasPagesNav = false;
            this.pages       = [];
            this.currentPage = null;
            this.currentPageObject = null;
            this.options    = { 
                'timeout':        900,                   
                'loadingTimeout': 50,                    
                'loadingMessage': defaultLoadingMessage, 
                'errorMessage':   defaultErrorMessage,   
                'showLoadingMessage': true,              
                'showOnload':     true,                  
                'tsParam':        'ts',                  
                '_':null
            };
            this.replacements = {
                'loadTime': function() { return this.loadTime ? this.loadTime.toString() : ''; }.bind(this),
                '_':''
            }
            this.init = function(obj, uri, renderer, outputEngine, effects, options) {
                this.object           = obj;
                this.uri              = uri;
                this.renderer         = renderer;
                this.htmlRenderer     = this.renderer.isHtmlRenderer ? this.renderer : new HtmlRenderer();
                this.outputEngine     = outputEngine;
                this.effects          = isNone(effects) || isArray(effects) ? effects : new Array(effects);
                this.object.dynObject = this;
                this.renderer.setOutputEngine(outputEngine);
                this.htmlRenderer.setOutputEngine(new HtmlOutput());
                if (!isEmpty(options)) {
                    for (var i in options) {
                        this.options[i] = options[i];
                    }
                }
                if (isSet(this.options['dataInside']) && this.options['dataInside']) {
                    this.options['dataInside'] = null;
                    this.loadTime = new Date(document.lastModified);
                    this.loaded   = true;
                    this.isShown  = true;
                }
            }
            this.register = function(obj) {
                obj.dynObject  = this;
                new EventHandler(obj, new Array('click', 'dblclick'));
                obj.addOnclick(   function() { return dynAction(this, false); }.bind(obj));
                obj.addOndblclick(function() { return dynAction(this, true);  }.bind(obj));
                if (new RegExp(/\bactivate\b/).test(obj.className)) {
                    obj.onclick();
                }
                this.registerEffects();
            }
            this.registerEffects = function() {
                if (isSet(this.effects)) {
                    for (var i=0; i<this.effects.length; i++) {
                        this.effects[i].register(this.object);
                        this.effects[i].init(this);
                    }
                }
            }
            this.setIvwPath = function() {
                this.options['ivwPath'] = new Array();
                var replacements = {
                    '\xE4': 'ae', '\xF6': 'oe', '\xFC': 'ue',
                    '\xC4': 'ae', '\xD6': 'oe', '\xDC': 'ue',
                    '\xDF': 'ss'
                }
                var parts = new Array();
                for (var i=0; i<arguments.length; i++) {
                    var segments = arguments[i].split('/');
                    for (var j=0; j<segments.length; j++) {
                        parts.push(segments[j]);
                    }
                }
                for (var i=0; i<parts.length; i++) {
                    var part = parts[i].toLowerCase();
                    for (var j in replacements) {
                        if (isSet(Object.prototype[j])) { continue; }
                        part = part.replace(new RegExp('/'+j+'/g'), replacements[j]);
                    }
                    part = part.replace(/ /g, '_');
                    part = part.replace(/\W/g, '');
                    this.options['ivwPath'].push(part.substr(0, 64));
                }
            }
            this.setLoading = function(loading) {
                this.loading = loading;
                this.getContentElement().style.cursor = loading ? 'wait' : '';
            }
            this.activate = function() {
                if (isSet(this.options['ivwPath'])) {
                    createIvwCounter(this.options['ivwPath'], true);
                }
                if (isSet(this.options['contentHeight'])) {
                    this.getContentElement().style.height = this.options['contentHeight'];
                }
                if (isSet(this.options['approxHeight']) && !this.isShown) {
                    this.htmlRenderer.render(this, '<div style="height: ${approxHeight};"></div>'.inReplace(this.options));
                }
                select(this.object);
            }
            this.deactivate = function() { }
            this.showHtml = function(force) {
                if (!this.loaded) {
                    return this.load();
                }
                if (force || this.loadTime.getTime()+this.options['timeout']*1000 < new Date()) {
                    return this.load(false);
                }
                if (this.response && !this.isRendered) {
                    this.rendering = true;
                    this.renderer.render(this, this.response);
                    this.rendering  = false;
                    this.isRendered = true;
                    this.isShown    = true;
                    this.isError    = false;
                }
            }
            this.showLoading = function() {
                this.isShown = false;
                this.isError = false;
                if (this.options['showLoadingMessage']) {
                    window.setTimeout(function() { this.renderLoading(); }.bind(this), this.options['loadingTimeout']);
                }
            }
            this.renderLoading = function() {
                if (!this.isShown && !this.isError && !this.rendering) {
                    var loadingMessage = isSet(this.options['approxHeight'])
                                       ? '<div style="height: ${approxHeight};">${loadingMessage}</div>'.inReplace(this.options)
                                       : '<div style="height: ${boxHeight}">${loadingMessage}</div>'.inReplace(Object.extend(this.options, {'boxHeight':(this.getContentElement().offsetHeight)+'px'}));
                    this.htmlRenderer.render(this, loadingMessage.inReplace(this.replacements));
                }
            }
            this.showError = function() {
                this.htmlRenderer.render(this, this.options['errorMessage'].inReplace(Object.extend(this.replacements, {'errorCode': function() { return this.response.status; }.bind(this)})));
                this.isShown = false;
                this.isError = true;
            }
            this.load = function(showLoading) {
                if (this.loading) { return; }
                this.isRendered = false;
                this.setLoading(true);
                if (showLoading !== false) { this.showLoading(); }
                var url = this.uri;
                if (!isTrue(this.options['suspendTsParam'])) {
                    url += (url.indexOf('?')>=0 ? '&' : '?')
                        +  encodeURIComponent(this.options['tsParam']) + '=' + new Date().getTime();
                }
                if (url.indexOf('http://')==0 || url.indexOf('https://')==0) {
                    url = 'passthrough.php?url=' + encodeURIComponent(url);
                }
                this.request = new Ajax.Request(url, {method:'GET', onSuccess:this.onload.bind(this), onFailure:this.onerror.bind(this)});
            }
            this.onload = function(transport, json) {
                this.setLoading(false);
                this.loaded   = true;
                this.loadTime = new Date();
                this.response = transport;
                if (new RegExp(/\bdynamicLoad\b/).test(this.object.className)) {
                    this.object.className = this.object.className.replace(/\bdynamicLoad\b/, '');
                }
                if (this.options['showOnload']) { this.showHtml(); }
                this.onafterload();
            }
            this.onafterload = function() {
            }
            this.onerror = function(transport, json) {
                this.setLoading(false);
                this.loaded   = false;
                this.response = transport;
                if (this.response.status == 302) {
                    this.uri = this.response.getResponseHeader('Location');
                    this.load();
                    return;
                }
                if (this.options['showOnload']) { this.showError(); }
            }
        }
        DynAjaxObject = function(obj, uri, renderer, outputEngine, effects, options) {
            this.options = (options||{}).defaultIs(this.options);
            this.content = getCorrespondingLi(obj);
            this.replacements = {
                'url':      function() { return this.object.getElementsByTagName('a')[0].getAttribute('href'); }.bind(this),
                'title':    function() { return this.object.getText ? this.object.getText() : this.object.innerText.trim(); }.bind(this),
                'link':     function() { return '<a href="'+this.object.getElementsByTagName('a')[0].getAttribute('href')+'">Link zur Seite<\/a>'; }.bind(this),
                '_':''
            }.defaultIs(this.replacements);
            this.getContentElement = function() {
                for (var i=0; i<this.content.childNodes.length; i++) {
                    if (new RegExp(/\bmoduleContent\b/).test(this.content.childNodes[i].className)) {
                        return this.content.childNodes[i];
                    }
                }
                var newNode = document.createElement('div');
                newNode.className = 'moduleContent';
                if (this.content.firstChild) {
                    this.content.insertBefore(newNode, this.content.firstChild);
                } else {
                    this.content.appendChild(newNode);
                }
                return newNode;
            }
            this.getContentPart = function(no) {
                if (this.hasPagesNav) { no++; }
                var c = this.getContentElement();
                var n = 0;
                for (var i=0; i<c.childNodes.length; i++) {
                    if (new RegExp(/\bmodulePart\b/).test(c.childNodes[i].className)) {
                        if (n++ == no) { return c.childNodes[i]; }
                    }
                }
                var newNode = null;
                while (n++ <= no) {
                    newNode = document.createElement('div');
                    newNode.className = 'modulePart';
                    c.appendChild(newNode);
                }
                return newNode;
            }
            this.createPagesNav = function() {
                this.pages  = new Array();
                var nav     = this.getContentPart(-1); 
                var content = this.getContentPart(0);
                var temp    = content.getElementsByTagName('ol')[0];
                if (isNone(temp)) { return; }
                temp = temp.childNodes;
                this.currentPage = null;
                for (var i=0; i<temp.length; i++) {
                    if (temp[i].nodeType == 1) {
                        this.pages.push(temp[i]);
                        temp[i].pageNumber = this.pages.length-1;
                        if (new RegExp(/\bactive\b/).test(temp[i].className)) {
                            this.currentPage = temp[i].pageNumber;
                        }
                    }
                }
                if (this.currentPage == null) {
                    this.currentPage = 0;
                    temp[0].className += ' active';
                }
                content.className += ' pages';
                nav.className += ' navPages';
                nav.innerHTML = '\
                    <h3><span>Seite umbl&auml;ttern:</span></h3>\
                    <ol>\
                        <li class="first"><a><span>1</span></a></li>\
                        <li class="prev"><a><span>&lt;</span></a></li>\
                        <li class="current"><span>1</span></li>\
                        <li class="sep"><span>/</span></li>\
                        <li class="amount"><span>'+this.pages.length+'</span></li>\
                        <li class="next"><a><span>&gt;</span></a></li>\
                        <li class="last"><a><span>'+this.pages.length+'</span></a></li>\
                    </ol>\
                ';
                this.currentPageObject = nav.getElementsByTagName('li')[2].getElementsByTagName('span')[0];
                var links = nav.getElementsByTagName('a');
                links[0].onclick = function() { this.setPage(0);                   }.bind(this);
                links[1].onclick = function() { this.setPage(this.currentPage-1);  }.bind(this);
                links[2].onclick = function() { this.setPage(this.currentPage+1);  }.bind(this);
                links[3].onclick = function() { this.setPage(this.pages.length-1); }.bind(this);
                for (var i=0; i< this.pages.length; i++) {
                    var page = this.pages[i];
                    if (i != this.pages.length-1) {
                        var temp = page.insertBefore(newElement('span', {'class':'turnover forward', 'title':'n\xE4chste Seite'}, newElement('span', {}, 'weiter')), page.firstChild);
                        temp.onclick = function(i) { this.setPage(i); }.bind(this, i+1);
                    }
                    if (i != 0) {
                        var temp = page.insertBefore(newElement('span', {'class':'turnover back', 'title':'vorherige Seite'}, newElement('span', {}, 'zur\xFCck')), page.firstChild);
                        temp.onclick = function(i) { this.setPage(i); }.bind(this, i-1);
                    }
                }
            }
            this.setPage = function(page) {
                if (page<0)                  { page = 0; }
                if (page>=this.pages.length) { page = this.pages.length-1; }
                this.pages[this.currentPage].className = this.pages[this.currentPage].className.replace(/\bactive\b/g, '');
                this.pages[page].className += ' active';
                this.currentPage = page;
                this.currentPageObject.innerHTML = page+1;
            }
            this.init(obj, uri, renderer, outputEngine, effects, options);
            if (isSet(this.options['module'])) {
                this.setIvwPath(this.options['module'], this.replacements['title']());
            }
            if (isSet(this.options['pages'])) {
                this.hasPagesNav = true;
            }
        }
        DynAjaxObject.prototype = new AbstractAjaxObject();
        LayerAjaxObject = function(obj, uri, renderer, outputEngine, effects, options) {
            this.options = (options||{}).defaultIs(this.options);
            this.content = null;
            this.activate = function() {
                if (isSet(this.options['module']) && !isSet(this.options['ivwPath'])) {
                    this.setIvwPath(this.options['module'], this.object.getText ? this.object.getText() : this.object.innerText.trim());
                }
                if (this.object.getElementsByTagName('a').length) {
                    this.object.getElementsByTagName('a')[0].style.cursor = 'wait';
                }
                if (this.loaded) { this.onafterload(); }
                else             { this.showHtml(); }
                this.content.style.display = '';
                if (isFunction(this.options['postOpenclose'])) {
                    this.options['postOpenclose']();
                }
            }
            this.deactivate = function(e) {
                stopEventPropagation(e);
                if (isSet(this.object.fxObject)) {
                    this.object.fxObject.run(1);
                } else {
                    this.object.className = '';
                }
                this.content.style.display = 'none';
                if (isFunction(this.options['postOpenclose'])) {
                    this.options['postOpenclose']();
                }
                return false;
            }
            this.onafterload = function() {
                window.scrollTo(0, 0);
                if (isSet(this.options['ivwPath'])) {
                    createIvwCounter(this.options['ivwPath'], true);
                }
                this.object.getElementsByTagName('a')[0].style.cursor = '';
                if (this.object.className == 'active') { return this.deactivate(); }
                var els = this.object.getElementsByTagName('*');
                for (var i=0; i<els.length; i++) {
                    if (isSet(els[i].tooltip)) {
                        els[i].tooltip.hide();
                    }
                }
                if (isSet(this.object.fxObject)) {
                    this.object.fxObject.run(0);
                } else {
                    this.object.className = 'active';
                }
                if (document.getElementById('layerCloser')) {
                    document.getElementById('layerCloser').onclick = function() { this.deactivate(); return false; }.bind(this);
                }
            }
            this.getContentElement = function() {
                if (isSet(this.content)) { return this.content; }
                var newNode = document.createElement('div');
                newNode.id  = this.options['layerId'];
                if (isSet(this.options['layerClass'])) {
                    newNode.className = this.options['layerClass'];
                }
                var target = isSet(this.options['targetElement'])
                           ? (typeof(this.options['targetElement'])=='string' ? document.getElementById(this.options['targetElement']) : this.options['targetElement'])
                           : this.object;
                target.appendChild(newNode);
                this.content = newNode;
                return newNode;
            }
            this.getContentPart = function(no) {
                return this.getContentElement();
            }
            this.init(obj, uri, renderer, outputEngine, effects, options);
        }
        LayerAjaxObject.prototype = new AbstractAjaxObject();
        MSAjaxObject = function(obj, uri, renderer, outputEngine, effects, options) {
            this.options = (options||{}).defaultIs({
                'approxHeight': '100px'
            }).defaultIs(this.options);
            this.content = null;        
            this.activate = function() {
                if (this.loaded) { this.onafterload(); }
            }
            this.onafterload = function() {
                if (this.outputEngine.outputAmount) {
                    var target = this.object.lastChild;
                    while (target && target.nodeType != 1) { target = target.previousSibling; }
                    if (target) {
                        this.outputEngine.outputAmount(target);
                    }
                }
            }
            this.getContentElement = function() {
                if (isSet(this.content)) { return this.content; }
                var newNode = document.createElement('div');
                if (isSet(this.options['layerClass'])) {
                    newNode.className = this.options['layerClass'];
                }
                var target = isSet(this.options['targetElement'])
                           ? (typeof(this.options['targetElement'])=='string' ? document.getElementById(this.options['targetElement']) : this.options['targetElement'])
                           : this.object;
                target.appendChild(newNode);
                this.content = newNode;
                return newNode;
            }
            this.getContentPart = function(no) {
                return this.getContentElement();
            }
            this.init(obj, uri, renderer, outputEngine, effects, options);
        }
        MSAjaxObject.prototype = new AbstractAjaxObject();
        addFirstLastClasses = function(obj) {
            var start = new Date();
            var els = obj.getContentElement().getElementsByTagName('*');
            var c = 0;
            for (var i=0; i<els.length; i++) {
                if (els[i] == els[i].parentNode.firstChild) {
                    els[i].className += ' first';
                }
                if (els[i] == els[i].parentNode.lastChild) {
                    els[i].className += ' last';
                    if (els[i] == els[i].parentNode.firstChild || (els[i]==els[i].parentNode.firstChild.nextSibling && els[i].parentNode.firstChild.nodeType!=1)) {
                        els[i].className += ' firstlast';
                    }
                }
            }
        }
        function dynAction(el, force) {
            if (!isSet(el.dynObject) || !isFunction(el.dynObject.showHtml)) { return true; }
            el.dynObject.showHtml(force);
            el.dynObject.activate();
            return false;
        }
    }
    function eraseAjax() {
        var lis = document.getElementsByTagName('li');
        for (var i=0; i<lis.length; i++) {
            lis[i].onkeydown = '';
        }
        var divs = document.getElementsByTagName('div');
        for (var i=0; i<divs.length; i++) {
            divs[i].onkeydown = '';
        }
        return true;
    }
    function initAjax() {
        if (!UserAgent.knowsAjax) { return eraseAjax(); }
        var lis = document.getElementsByTagName('li');
        for (var i=0; i<lis.length; i++) {
            if (!lis[i].onkeydown) { continue; }
            var li  = lis[i];
            var obj = li.onkeydown();
            if (isFunction(obj.register)) {
                obj.register(li);
            }
            li.onkeydown  = '';
        }
        var divs = document.getElementsByTagName('div');
        for (var i=0; i<divs.length; i++) {
            if (!divs[i].onkeydown) { continue; }
            var div = divs[i];
            var obj = div.onkeydown();
            if (isFunction(obj.register)) {
                obj.register(div);
            }
            div.onkeydown = '';
        }
        var h2s = document.getElementsByTagName('h2');
        for (var i=0; i<h2s.length; i++) {
            if (!h2s[i].onkeydown) { continue; }
            var h2 = h2s[i];
            var obj = h2.onkeydown();
            if (isFunction(obj.register)) {
                obj.register(h2);
            }
            h2.onkeydown = '';
        }        
    }
    window.addOnload(initAjax);
    jsLoaded('ajaxLib.js');
}

requires('dynLib.js', ajaxLib);
