
/* FRONTEND MODE */


/* BEGIN OF INCLUDED FILE '/modules/backend/js/backend.js' */

/*
 * 
 * These backend functions may be used from frontend modules.
 * 
 */


/*
 * Popup Windows
 */

function backend_findElemPos(obj) {
    var curleft = curtop = 0;
    if (obj.offsetParent) {
        curleft = obj.offsetLeft
        curtop = obj.offsetTop
        while (obj = obj.offsetParent) {
            curleft += obj.offsetLeft
            curtop += obj.offsetTop
        }
    }
    return [curleft,curtop];
}

function backend_showPopup(clickedElem, elem) {
    elem = dojo.byId(elem);
    if(dojo.style(elem, 'display') == 'block') {
        dojo.style(elem, 'display', 'none');
    } else { 
        dojo.style(elem, 'display', 'block');
    }
    if (clickedElem && clickedElem.offsetLeft) {
        var clickedElemPos = backend_findElemPos(clickedElem);
        dojo.style(elem, 'left', (clickedElemPos[0] - elem.offsetWidth - 10) + 'px');
        dojo.style(elem, 'top', clickedElemPos[1] + 'px');
    }
}
/*
 * Ajax Refresh and Form Submit
 */

function backend_destroyWidgets(parentNode) {
    var nodes = dojo.query("*[widgetid]", parentNode);
    for(var ni=0; ni<nodes.length; ni++){
        var node = nodes[ni];
        var widgetid = dojo.attr(node, 'widgetid');
        if (widgetid && widgetid != '') {
            var widget = dijit.byId(widgetid);
            if (widget && widget.destroy) {
                widget.destroy();
            }
        }
    }    
}

function backend_ajaxSetRefreshUrl(url) {
    window.backend_ajaxRefreshUrl = url;
}

function backend_ajaxRefreshTabContent(tabname) {
    if (tabname == null) {
        tabname = window.backend_currentTab;
    }
    var divElem = dojo.byId('backend_tab_'+tabname);
    window.scrollTo(0,0);
    backend_showLoadingIcon(divElem);
    // destroy old htmleditors
    htmlcontent_destroyEditors(divElem);
    // refresh tab content by ajax
    var ajaxUrl = window.backend_ajaxRefreshUrl;
    if (ajaxUrl.indexOf('#') != -1) {
        ajaxUrl = ajaxUrl.substr(0,ajaxUrl.indexOf('#'));
    }
    if (ajaxUrl.indexOf('?') == -1) {
        ajaxUrl = ajaxUrl + '?';
    } else {
        ajaxUrl = ajaxUrl + '&';
    }
    ajaxUrl = ajaxUrl + 'backaned_ajaxRefreshTabContent=' + escape(tabname);
    console.log('Refreshing tab content by ajax: tabname=', tabname);
    dojo.xhrGet({
        url: ajaxUrl,
        load: function(response, ioArgs){
            console.log('Refreshing tab content by ajax get, ajax request successful:', tabname);
            // destroy old widgets (after sending post data!)
            console.log('Refreshing tab content by ajax get, destroying old widgets:', tabname);
            backend_destroyWidgets(divElem);
            // set new content
            console.log('Refreshing tab content by ajax get, setting new content:', tabname);
            divElem.innerHTML = response;
            // apply dojo parser
            console.log('Refreshing tab content by ajax get, parsing:', tabname);
            dojo.parser.parse(divElem);
            // initialize editors for this tab
            console.log('Refreshing tab content by ajax get, activating html editors:', tabname);
            htmlcontent_activateEditors(divElem);
            // hide loading icon
            console.log('Refreshing tab content by ajax get, done:', tabname);
            backend_hideLoadingIcon(divElem);
            // always return response object
            return response;
        },
        handleAs: "text"
    });
}

function backend_ajaxSubmitForm(formElem) {
    var tabname = window.backend_currentTab;
    var divElem = dojo.byId('backend_tab_'+tabname);
    window.scrollTo(0,0);
    backend_showLoadingIcon(divElem);
    // destroy old htmleditors (before sending post data!)
    htmlcontent_destroyEditors(divElem);
    // refresh tab content by ajax
    var form = dojo.byId(formElem);
    var ajaxUrl = dojo.attr(form, 'action');
    if (!ajaxUrl || ajaxUrl == '') {
        ajaxUrl = window.backend_ajaxRefreshUrl;
    }
    if (ajaxUrl.indexOf('#') != -1) {
        ajaxUrl = ajaxUrl.substr(0,ajaxUrl.indexOf('#'));
    }
    if (ajaxUrl.indexOf('?') == -1) {
        ajaxUrl = ajaxUrl + '?';
    } else {
        ajaxUrl = ajaxUrl + '&';
    }
    ajaxUrl = ajaxUrl + 'backaned_ajaxRefreshTabContent=' + escape(tabname);
    console.log('Refreshing tab content by ajax post: tabname=', tabname);
    dojo.xhrPost({
        url: ajaxUrl,
        form: form,
        load: function(response, ioArgs){
            console.log('Refreshing tab content by ajax post, ajax request successful:', tabname);
            // destroy old widgets (after sending post data!)
            console.log('Refreshing tab content by ajax post, destroying old widgets:', tabname);
            backend_destroyWidgets(divElem);
            // set new content
            console.log('Refreshing tab content by ajax post, setting new content:', tabname);
            divElem.innerHTML = response;
            // apply dojo parser
            console.log('Refreshing tab content by ajax post, parsing:', tabname);
            dojo.parser.parse(divElem);
            // initialize editors for this tab
            console.log('Refreshing tab content by ajax post, activating html editors:', tabname);
            htmlcontent_activateEditors(divElem);
            // hide loading icon
            console.log('Refreshing tab content by ajax post, done:', tabname);
            backend_hideLoadingIcon(divElem);
            // always return response object
            return response;
        },
        handleAs: "text"
    });
}


/*
 * Helpers
 */

function backend_reloadPage() {
    if (dojo.isFF || dojo.isIE) {
        window.location.href = new String(window.location.href);
    } else {
        window.location.reload(false);
    }
}

function backend_showLoadingIcon(targetElem) {
    // remove existing loading icon
    backend_hideLoadingIcon(targetElem);
    // show loading icon
    console.log("backend_showLoadingIcon()");
    targetElem = dojo.byId(targetElem);
    if (!targetElem.id || targetElem.id == '') {
        alert("Cannot create loading icon for an element without id.");
    }
    var div = dojo.doc.createElement("div");
    var w = targetElem.offsetWidth + 2;
    var h = targetElem.offsetHeight + 2;
    var bgX = (Math.floor(w/2)-16);
    var bgY = (Math.floor(h/2)-16);
    if (bgY > 250) {
        bgY = 250;
    }
    dojo.style(div, "position", "absolute");
    dojo.style(div, "zIndex", "999999");
    dojo.style(div, "opacity", 0.85);
    dojo.style(div, "backgroundColor", "#777777");
    dojo.style(div, "backgroundImage", "url(/media/images/backend/loading.gif)");
    dojo.style(div, "backgroundRepeat", "no-repeat");
    dojo.style(div, "backgroundPosition", bgX+"px "+bgY+"px");
    dojo.style(div, "width", w+"px");
    dojo.style(div, "height", h+"px");
    dojo.place(div, targetElem, "before");
    // show waiting cursor
    dojo.style(dojo.body(), "cursor", "wait");
    // register loading icon
    if (!window.backend_activeLoadingIcons) {
       window.backend_activeLoadingIcons = new Object();
    }
    window.backend_activeLoadingIcons[targetElem.id] = div;
}

function backend_hideLoadingIcon(targetElem) {
    // hide loading icon
    console.log("backend_hideLoadingIcon()");
    targetElem = dojo.byId(targetElem);
    if (window.backend_activeLoadingIcons && window.backend_activeLoadingIcons[targetElem.id]) {
        var div = window.backend_activeLoadingIcons[targetElem.id];
        div.parentNode.removeChild(div);
        delete window.backend_activeLoadingIcons[targetElem.id];
    }
    // unset waiting cursor
    dojo.style(dojo.body(), "cursor", "");
}



/* END OF INCLUDED FILE '/modules/backend/js/backend.js' */



/* BEGIN OF INCLUDED FILE '/modules/navigation/navigation.js' */

var currentAufklappElem = new Array();
var currentAufklappTimer = new Array();

window.autoDropdownSelectedLevel = null;
window.autoDropdownSelectedElemId = null;

// Layer fuer ausgewaehlten Eintrag automatisch einblenden
window.showAufklappLayerAutoDropdownSelected = function(level, elemId) {
    window.autoDropdownSelectedLevel = level;
    window.autoDropdownSelectedElemId = elemId;
    window.showAufklappLayer(level, elemId);
};

// Layoer fuer ausgewaehlten Eintrag automatisch wiedereinblenden, nachdem ein anderer Layer eingeblendet war
window.restoreAufklappLayerAutoDropdownSelected = function() {
    if (currentAufklappElem[window.autoDropdownSelectedLevel] == null) { // nur, wenn kein layer mehr eingeblendet ist
        window.showAufklappLayer(window.autoDropdownSelectedLevel, window.autoDropdownSelectedElemId);
    }
};

// Layer einblenden
window.showAufklappLayer = function(level, elemId) {
    // Momentan angezeigten Layer ausblenden
    if (currentAufklappElem[level] != null){
        hideCurrentAufklappLayerNow(level);
    }
    // Neuen Layer einblenden
    var elem = document.getElementById(elemId);
    elem.style.display = 'block';
    currentAufklappElem[level] = elem;
    // Dem passenden Link eine Hover-Klasse zuweisen
    if (window.dojo) {
        var aElements = dojo.query('a', elem.parentNode);
        if (aElements) {
            dojo.forEach(aElements, function(e){
                dojo.addClass(e, "dropdownHover");
                if (dojo.hasClass(e, "ebene0-1")) {
                    dojo.addClass(e, "ebene0-1_dropdownHover");
                }
                if (dojo.hasClass(e, "ebene0-1_angewaehlt")) {
                    dojo.addClass(e, "ebene0-1_angewaehlt_dropdownHover");
                }
            });
        }
    }
    // Den uebergeordneten DIVs fuer "Runde Ecken" eine Hover-Klasse zuordnen
    if (window.dojo) {
        if (dojo.hasClass(elem.parentNode, "navEntryRoundCorner")) {
            // query all divs
            var corners = ['mitte', 'om', 'um', 'lm', 'rm', 'lo', 'ro', 'lu', 'ru'];
            var topNode =  elem.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode;
            dojo.forEach(corners, function(cr){
                var divElements = dojo.query('div.ecke0-1_' + cr, topNode);
                if (divElements) {
                    dojo.forEach(divElements, function(e){
                        dojo.addClass(e, 'cornerDropdownHover');
                        dojo.addClass(e, 'ecke0-1_' + cr + '_cornerDropdownHover');
                    });
                }
            });
        }
    }
};

// Layer ausblenden (verzoegert!)
window.hideAufklappLayer = function(level, elemId) {
    if (currentAufklappTimer[level] != null) {
        window.clearTimeout(currentAufklappTimer[level]);
        currentAufklappTimer[level] = null;
    }
    currentAufklappTimer[level] = window.setTimeout('hideCurrentAufklappLayerNow('+level+');', 500);
};

// Layer jetzt ausblenden
window.hideCurrentAufklappLayerNow = function(level) {
    if (currentAufklappTimer[level] != null) {
        window.clearTimeout(currentAufklappTimer[level]);
        currentAufklappTimer[level] = null;
    }
    if (currentAufklappElem[level] != null) {
        var elem = currentAufklappElem[level];
        elem.style.display = 'none';
        currentAufklappElem[level] = null;
        // Dem passenden Link die Hover-Klasse wieder wegnehmen
        if (window.dojo) {
            var aElements = dojo.query('a', elem.parentNode);
            if (aElements) {
                dojo.forEach(aElements, function(e){
                    dojo.removeClass(e, "dropdownHover");
                    if (dojo.hasClass(e, "ebene0-1")) {
                        dojo.removeClass(e, "ebene0-1_dropdownHover");
                    }
                    if (dojo.hasClass(e, "ebene0-1_angewaehlt")) {
                        dojo.removeClass(e, "ebene0-1_angewaehlt_dropdownHover");
                    }
                });
            }
        }
        // Den uebergeordneten DIVs fuer "Runde Ecken" eine Hover-Klasse zuordnen
        if (window.dojo) {
            if (dojo.hasClass(elem.parentNode, "navEntryRoundCorner")) {
                // query all divs
                var corners = ['mitte', 'om', 'um', 'lm', 'rm', 'lo', 'ro', 'lu', 'ru'];
                var topNode =  elem.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode;
                dojo.forEach(corners, function(cr){
                    var divElements = dojo.query('div.ecke0-1_' + cr, topNode);
                    if (divElements) {
                        dojo.forEach(divElements, function(e){
                            dojo.removeClass(e, 'cornerDropdownHover');
                            dojo.removeClass(e, 'ecke0-1_' + cr + '_cornerDropdownHover');
                        });
                    }
                });
            }
        }
        // Layer fuer ausgewaehlten Eintrag wieder einblenden, falls autoDropdownSelected aktiv
        if (window.autoDropdownSelectedLevel != null && window.autoDropdownSelectedElemId != null && window.autoDropdownSelectedLevel == level) {
            window.setTimeout("restoreAufklappLayerAutoDropdownSelected();", 50);
        }
    }
};



/* END OF INCLUDED FILE '/modules/navigation/navigation.js' */



/* BEGIN OF INCLUDED FILE '/modules/_mootools/mootools.js' */

//MooTools, My Object Oriented Javascript Tools. Copyright (c) 2006 Valerio Proietti, <http://mad4milk.net>, MIT Style License.

eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('o 9m={9n:\'1.11\'};k $4T(W){h(W!=6w)};k $r(W){m(!$4T(W))h V;m(W.3B)h\'C\';o r=4u W;m(r==\'2Z\'&&W.9l){1Z(W.5C){12 1:h\'C\';12 3:h(/\\S/).2I(W.6G)?\'9k\':\'9h\'}}m(r==\'2Z\'||r==\'k\'){1Z(W.6q){12 1P:h\'1f\';12 5F:h\'62\';12 1i:h\'5T\'}m(4u W.R==\'3Y\'){m(W.2x)h\'9i\';m(W.7a)h\'Y\'}}h r};k $3i(){o 4h={};G(o i=0;i<Y.R;i++){G(o B 17 Y[i]){o ap=Y[i][B];o 4Y=4h[B];m(4Y&&$r(ap)==\'2Z\'&&$r(4Y)==\'2Z\')4h[B]=$3i(4Y,ap);14 4h[B]=ap}}h 4h};o $M=k(){o 19=Y;m(!19[1])19=[c,19[0]];G(o B 17 19[1])19[0][B]=19[1][B];h 19[0]};o $3H=k(){G(o i=0,l=Y.R;i<l;i++){Y[i].M=k(1s){G(o 1B 17 1s){m(!c.1r[1B])c.1r[1B]=1s[1B];m(!c[1B])c[1B]=$3H.51(1B)}}}};$3H.51=k(1B){h k(Q){h c.1r[1B].3I(Q,1P.1r.6K.1Y(Y,1))}};$3H(5Z,1P,5s,6N);k $1W(W){h!!(W||W===0)};k $4C(W,6u){h $4T(W)?W:6u};k $6d(3q,2d){h 1a.9p(1a.6d()*(2d-3q+1)+3q)};k $2L(){h X 9u().9v()};k $6c(1L){9t(1L);9s(1L);h 1j};o 3a=k(W){W=W||{};W.M=$M;h W};o 9q=X 3a(N);o 9r=X 3a(I);I.6A=I.2o(\'6A\')[0];N.2O=!!(I.85);m(N.9f)N.2a=N[N.94?\'95\':\'6r\']=1b;14 m(I.70&&!I.93&&!92.8Z)N.3r=N[N.2O?\'90\':\'4F\']=1b;14 m(I.91!=1j)N.5K=1b;N.96=N.3r;97.M=$M;m(4u 3S==\'6w\'){o 3S=k(){};m(N.3r)I.6I("9d");3S.1r=(N.3r)?N["[[9e.1r]]"]:{}}3S.1r.3B=k(){};m(N.6r)5J{I.9c("9b",V,1b)}5O(e){};o 1i=k(2v){o 4a=k(){h(Y[0]!==1j&&c.1D&&$r(c.1D)==\'k\')?c.1D.3I(c,Y):c};$M(4a,c);4a.1r=2v;4a.6q=1i;h 4a};1i.1X=k(){};1i.1r={M:k(2v){o 4Q=X c(1j);G(o B 17 2v){o 6B=4Q[B];4Q[B]=1i.7q(6B,2v[B])}h X 1i(4Q)},5x:k(){G(o i=0,l=Y.R;i<l;i++)$M(c.1r,Y[i])}};1i.7q=k(2Y,1J){m(2Y&&2Y!=1J){o r=$r(1J);m(r!=$r(2Y))h 1J;1Z(r){12\'k\':o 5A=k(){c.1h=Y.7a.1h;h 1J.3I(c,Y)};5A.1h=2Y;h 5A;12\'2Z\':h $3i(2Y,1J)}}h 1J};o 83=X 1i({9w:k(J){c.3f=c.3f||[];c.3f.1d(J);h c},8m:k(){m(c.3f&&c.3f.R)c.3f.78().1S(10,c)},9x:k(){c.3f=[]}});o 2i=X 1i({22:k(r,J){m(J!=1i.1X){c.$T=c.$T||{};c.$T[r]=c.$T[r]||[];c.$T[r].5o(J)}h c},1A:k(r,19,1S){m(c.$T&&c.$T[r]){c.$T[r].1C(k(J){J.2m({\'Q\':c,\'1S\':1S,\'Y\':19})()},c)}h c},44:k(r,J){m(c.$T&&c.$T[r])c.$T[r].36(J);h c}});o 5v=X 1i({42:k(){c.t=$3i.3I(1j,[c.t].M(Y));m(c.22){G(o 2E 17 c.t){m($r(c.t[2E]==\'k\')&&(/^6g[A-Z]/).2I(2E))c.22(2E,c.t[2E])}}h c}});1P.M({4n:k(J,Q){G(o i=0,j=c.R;i<j;i++)J.1Y(Q,c[i],i,c)},2h:k(J,Q){o 3G=[];G(o i=0,j=c.R;i<j;i++){m(J.1Y(Q,c[i],i,c))3G.1d(c[i])}h 3G},2c:k(J,Q){o 3G=[];G(o i=0,j=c.R;i<j;i++)3G[i]=J.1Y(Q,c[i],i,c);h 3G},4A:k(J,Q){G(o i=0,j=c.R;i<j;i++){m(!J.1Y(Q,c[i],i,c))h V}h 1b},9V:k(J,Q){G(o i=0,j=c.R;i<j;i++){m(J.1Y(Q,c[i],i,c))h 1b}h V},3v:k(2x,K){o 3F=c.R;G(o i=(K<0)?1a.2d(0,3F+K):K||0;i<3F;i++){m(c[i]===2x)h i}h-1},73:k(1c,R){1c=1c||0;m(1c<0)1c=c.R+1c;R=R||(c.R-1c);o 5e=[];G(o i=0;i<R;i++)5e[i]=c[1c++];h 5e},36:k(2x){o i=0;o 3F=c.R;6e(i<3F){m(c[i]===2x){c.4s(i,1);3F--}14{i++}}h c},18:k(2x,K){h c.3v(2x,K)!=-1},9W:k(1y){o W={},R=1a.3q(c.R,1y.R);G(o i=0;i<R;i++)W[1y[i]]=c[i];h W},M:k(1f){G(o i=0,j=1f.R;i<j;i++)c.1d(1f[i]);h c},3i:k(1f){G(o i=0,l=1f.R;i<l;i++)c.5o(1f[i]);h c},5o:k(2x){m(!c.18(2x))c.1d(2x);h c},9U:k(){h c[$6d(0,c.R-1)]||1j},6n:k(){h c[c.R-1]||1j}});1P.1r.1C=1P.1r.4n;1P.1C=1P.4n;k $A(1f){h 1P.73(1f)};k $1C(2V,J,Q){m(2V&&4u 2V.R==\'3Y\'&&$r(2V)!=\'2Z\'){1P.4n(2V,J,Q)}14{G(o 1v 17 2V)J.1Y(Q||2V,2V[1v],1v)}};1P.1r.2I=1P.1r.18;5s.M({2I:k(4l,29){h(($r(4l)==\'2r\')?X 5F(4l,29):4l).2I(c)},2j:k(){h 49(c,10)},6J:k(){h 3Q(c)},6i:k(){h c.2P(/-\\D/g,k(2y){h 2y.66(1).7j()})},6Q:k(){h c.2P(/\\w[A-Z]/g,k(2y){h(2y.66(0)+\'-\'+2y.66(1).3V())})},7l:k(){h c.2P(/\\b[a-z]/g,k(2y){h 2y.7j()})},5h:k(){h c.2P(/^\\s+|\\s+$/g,\'\')},5G:k(){h c.2P(/\\s{2,}/g,\' \').5h()},4N:k(1f){o 24=c.2y(/\\d{1,3}/g);h(24)?24.4N(1f):V},53:k(1f){o 3s=c.2y(/^#?(\\w{1,2})(\\w{1,2})(\\w{1,2})$/);h(3s)?3s.6K(1).53(1f):V},18:k(2r,s){h(s)?(s+c+s).3v(s+2r+s)>-1:c.3v(2r)>-1},9S:k(){h c.2P(/([.*+?^${}()|[\\]\\/\\\\])/g,\'\\\\$1\')}});1P.M({4N:k(1f){m(c.R<3)h V;m(c.R==4&&c[3]==0&&!1f)h\'9X\';o 3s=[];G(o i=0;i<3;i++){o 3C=(c[i]-0).9Y(16);3s.1d((3C.R==1)?\'0\'+3C:3C)}h 1f?3s:\'#\'+3s.21(\'\')},53:k(1f){m(c.R!=3)h V;o 24=[];G(o i=0;i<3;i++){24.1d(49((c[i].R==1)?c[i]+c[i]:c[i],16))}h 1f?24:\'24(\'+24.21(\',\')+\')\'}});5Z.M({2m:k(t){o J=c;t=$3i({\'Q\':J,\'u\':V,\'Y\':1j,\'1S\':V,\'3p\':V,\'4X\':V},t);m($1W(t.Y)&&$r(t.Y)!=\'1f\')t.Y=[t.Y];h k(u){o 19;m(t.u){u=u||N.u;19=[(t.u===1b)?u:X t.u(u)];m(t.Y)19.M(t.Y)}14 19=t.Y||Y;o 2C=k(){h J.3I($4C(t.Q,J),19)};m(t.1S)h a4(2C,t.1S);m(t.3p)h a2(2C,t.3p);m(t.4X)5J{h 2C()}5O(a1){h V};h 2C()}},9Z:k(19,Q){h c.2m({\'Y\':19,\'Q\':Q})},4X:k(19,Q){h c.2m({\'Y\':19,\'Q\':Q,\'4X\':1b})()},Q:k(Q,19){h c.2m({\'Q\':Q,\'Y\':19})},9P:k(Q,19){h c.2m({\'Q\':Q,\'u\':1b,\'Y\':19})},1S:k(1S,Q,19){h c.2m({\'1S\':1S,\'Q\':Q,\'Y\':19})()},3p:k(6L,Q,19){h c.2m({\'3p\':6L,\'Q\':Q,\'Y\':19})()}});6N.M({2j:k(){h 49(c)},6J:k(){h 3Q(c)},1q:k(3q,2d){h 1a.3q(2d,1a.2d(3q,c))},3o:k(3P){3P=1a.2F(10,3P||0);h 1a.3o(c*3P)/3P},9D:k(J){G(o i=0;i<c;i++)J(i)}});o H=X 1i({1D:k(q,1s){m($r(q)==\'2r\'){m(N.2a&&1s&&(1s.1v||1s.r)){o 1v=(1s.1v)?\' 1v="\'+1s.1v+\'"\':\'\';o r=(1s.r)?\' r="\'+1s.r+\'"\':\'\';5Y 1s.1v;5Y 1s.r;q=\'<\'+q+1v+r+\'>\'}q=I.6I(q)}q=$(q);h(!1s||!q)?q:q.2z(1s)}});o 1E=X 1i({1D:k(O){h(O)?$M(O,c):c}});1E.M=k(1s){G(o 1B 17 1s){c.1r[1B]=1s[1B];c[1B]=$3H.51(1B)}};k $(q){m(!q)h 1j;m(q.3B)h 1T.3z(q);m([N,I].18(q))h q;o r=$r(q);m(r==\'2r\'){q=I.4H(q);r=(q)?\'C\':V}m(r!=\'C\')h 1j;m(q.3B)h 1T.3z(q);m([\'2Z\',\'9C\'].18(q.4P.3V()))h q;$M(q,H.1r);q.3B=k(){};h 1T.3z(q)};I.4G=I.2o;k $$(){o O=[];G(o i=0,j=Y.R;i<j;i++){o 1o=Y[i];1Z($r(1o)){12\'C\':O.1d(1o);12\'9B\':1t;12 V:1t;12\'2r\':1o=I.4G(1o,1b);5d:O.M(1o)}}h $$.41(O)};$$.41=k(1f){o O=[];G(o i=0,l=1f.R;i<l;i++){m(1f[i].$52)4J;o C=$(1f[i]);m(C&&!C.$52){C.$52=1b;O.1d(C)}}G(o n=0,d=O.R;n<d;n++)O[n].$52=1j;h X 1E(O)};1E.4W=k(B){h k(){o 19=Y;o 1e=[];o O=1b;G(o i=0,j=c.R,2C;i<j;i++){2C=c[i][B].3I(c[i],19);m($r(2C)!=\'C\')O=V;1e.1d(2C)};h(O)?$$.41(1e):1e}};H.M=k(2v){G(o B 17 2v){3S.1r[B]=2v[B];H.1r[B]=2v[B];H[B]=$3H.51(B);o 6D=(1P.1r[B])?B+\'1E\':B;1E.1r[6D]=1E.4W(B)}};H.M({2z:k(1s){G(o 1B 17 1s){o 3d=1s[1B];1Z(1B){12\'81\':c.5b(3d);1t;12\'T\':m(c.63)c.63(3d);1t;12\'2v\':c.6E(3d);1t;5d:c.55(1B,3d)}}h c},34:k(q,6F){q=$(q);1Z(6F){12\'6H\':q.2A.5l(c,q);1t;12\'6O\':o 4f=q.6V();m(!4f)q.2A.5B(c);14 q.2A.5l(c,4f);1t;12\'1m\':o 5a=q.61;m(5a){q.5l(c,5a);1t}5d:q.5B(c)}h c},9L:k(q){h c.34(q,\'6H\')},7T:k(q){h c.34(q,\'6O\')},9I:k(q){h c.34(q,\'3R\')},9J:k(q){h c.34(q,\'1m\')},7W:k(){o O=[];$1C(Y,k(6P){O=O.5D(6P)});$$(O).34(c);h c},36:k(){h c.2A.6M(c)},8N:k(6X){o q=$(c.8o(6X!==V));m(!q.$T)h q;q.$T={};G(o r 17 c.$T)q.$T[r]={\'1y\':$A(c.$T[r].1y),\'1u\':$A(c.$T[r].1u)};h q.4q()},8C:k(q){q=$(q);c.2A.8r(q,c);h q},71:k(2k){c.5B(I.8A(2k));h c},6a:k(1n){h c.1n.18(1n,\' \')},6W:k(1n){m(!c.6a(1n))c.1n=(c.1n+\' \'+1n).5G();h c},6Y:k(1n){c.1n=c.1n.2P(X 5F(\'(^|\\\\s)\'+1n+\'(?:\\\\s|$)\'),\'$1\').5G();h c},8y:k(1n){h c.6a(1n)?c.6Y(1n):c.6W(1n)},2J:k(B,F){1Z(B){12\'1R\':h c.6R(3Q(F));12\'8q\':B=(N.2a)?\'8t\':\'8s\'}B=B.6i();1Z($r(F)){12\'3Y\':m(![\'8v\',\'6U\'].18(B))F+=\'3J\';1t;12\'1f\':F=\'24(\'+F.21(\',\')+\')\'}c.1l[B]=F;h c},5b:k(2M){1Z($r(2M)){12\'2Z\':H.4p(c,\'2J\',2M);1t;12\'2r\':c.1l.6h=2M}h c},6R:k(1R){m(1R==0){m(c.1l.4z!="4B")c.1l.4z="4B"}14{m(c.1l.4z!="6T")c.1l.4z="6T"}m(!c.4M||!c.4M.8T)c.1l.6U=1;m(N.2a)c.1l.2h=(1R==1)?\'\':"8P(1R="+1R*8F+")";c.1l.1R=c.$2X.1R=1R;h c},1G:k(B){B=B.6i();o 1k=c.1l[B];m(!$1W(1k)){m(B==\'1R\')h c.$2X.1R;1k=[];G(o 1l 17 H.30){m(B==1l){H.30[1l].1C(k(s){o 1l=c.1G(s);1k.1d(49(1l)?1l:\'7o\')},c);m(B==\'2W\'){o 4A=1k.4A(k(3C){h(3C==1k[0])});h(4A)?1k[0]:V}h 1k.21(\' \')}}m(B.18(\'2W\')){m(H.30.2W.18(B)){h[\'7p\',\'6b\',\'6j\'].2c(k(p){h c.1G(B+p)},c).21(\' \')}14 m(H.76.18(B)){h[\'7n\',\'7m\',\'7f\',\'7e\'].2c(k(p){h c.1G(\'2W\'+p+B.2P(\'2W\',\'\'))},c).21(\' \')}}m(I.6S)1k=I.6S.8G(c,1j).8K(B.6Q());14 m(c.4M)1k=c.4M[B]}m(N.2a)1k=H.7k(B,1k,c);m(1k&&B.2I(/54/i)&&1k.18(\'24\')){h 1k.4V(\'24\').4s(1,4).2c(k(54){h 54.4N()}).21(\' \')}h 1k},7J:k(){h H.5X(c,\'1G\',Y)},4e:k(4w,1c){4w+=\'8J\';o q=(1c)?c[1c]:c[4w];6e(q&&$r(q)!=\'C\')q=q[4w];h $(q)},8H:k(){h c.4e(\'2Y\')},6V:k(){h c.4e(\'4f\')},8O:k(){h c.4e(\'4f\',\'61\')},6n:k(){h c.4e(\'2Y\',\'8X\')},8x:k(){h $(c.2A)},8n:k(){h $$(c.70)},6m:k(q){h!!$A(c.2o(\'*\')).18(q)},4Z:k(B){o 2B=H.4k[B];m(2B)h c[2B];o 5S=H.6C[B]||0;m(!N.2a||5S)h c.8w(B,5S);o 5z=c.a8[B];h(5z)?5z.6G:1j},a6:k(B){o 2B=H.4k[B];m(2B)c[2B]=\'\';14 c.bk(B);h c},bi:k(){h H.5X(c,\'4Z\',Y)},55:k(B,F){o 2B=H.4k[B];m(2B)c[2B]=F;14 c.bn(B,F);h c},6E:k(2M){h H.4p(c,\'55\',2M)},7g:k(){c.7i=$A(Y).21(\'\');h c},bt:k(2k){o 2s=c.3A();m([\'1l\',\'3D\'].18(2s)){m(N.2a){m(2s==\'1l\')c.72.6h=2k;14 m(2s==\'3D\')c.55(\'2k\',2k);h c}14{c.6M(c.61);h c.71(2k)}}c[$4T(c.5R)?\'5R\':\'7h\']=2k;h c},bp:k(){o 2s=c.3A();m([\'1l\',\'3D\'].18(2s)){m(N.2a){m(2s==\'1l\')h c.72.6h;14 m(2s==\'3D\')h c.4Z(\'2k\')}14{h c.7i}}h($4C(c.5R,c.7h))},3A:k(){h c.4P.3V()},1X:k(){1T.4L(c.2o(\'*\'));h c.7g(\'\')}});H.7k=k(B,1k,C){m($1W(49(1k)))h 1k;m([\'2Q\',\'2t\'].18(B)){o 1u=(B==\'2t\')?[\'1p\',\'3T\']:[\'1m\',\'3R\'];o 35=0;1u.1C(k(F){35+=C.1G(\'2W-\'+F+\'-2t\').2j()+C.1G(\'60-\'+F).2j()});h C[\'2G\'+B.7l()]-35+\'3J\'}14 m(B.2I(/2W(.+)7p|2b|60/)){h\'7o\'}h 1k};H.30={\'2W\':[],\'60\':[],\'2b\':[]};[\'7n\',\'7m\',\'7f\',\'7e\'].1C(k(77){G(o 1l 17 H.30)H.30[1l].1d(1l+77)});H.76=[\'b8\',\'b6\',\'b5\'];H.5X=k(q,3j,1y){o 1k={};$1C(1y,k(23){1k[23]=q[3j](23)});h 1k};H.4p=k(q,3j,6k){G(o 23 17 6k)q[3j](23,6k[23]);h q};H.4k=X 3a({\'5T\':\'1n\',\'G\':\'bf\',\'be\':\'bd\',\'bb\':\'bv\',\'bu\':\'bz\',\'bO\':\'bN\',\'bM\':\'bK\',\'bL\':\'bQ\',\'bP\':\'bU\',\'F\':\'F\',\'5q\':\'5q\',\'5p\':\'5p\',\'5P\':\'5P\',\'5H\':\'5H\'});H.6C={\'bR\':2,\'4j\':2};H.2g={4y:{2w:k(r,J){m(c.65)c.65(r,J,V);14 c.bT(\'6g\'+r,J);h c},3N:k(r,J){m(c.75)c.75(r,J,V);14 c.bI(\'6g\'+r,J);h c}}};N.M(H.2g.4y);I.M(H.2g.4y);H.M(H.2g.4y);o 1T={O:[],3z:k(q){m(!q.$2X){1T.O.1d(q);q.$2X={\'1R\':1}}h q},4L:k(O){G(o i=0,j=O.R,q;i<j;i++){m(!(q=O[i])||!q.$2X)4J;m(q.$T)q.1A(\'4L\').4q();G(o p 17 q.$2X)q.$2X[p]=1j;G(o d 17 H.1r)q[d]=1j;1T.O[1T.O.3v(q)]=1j;q.3B=q.$2X=q=1j}1T.O.36(1j)},1X:k(){1T.3z(N);1T.3z(I);1T.4L(1T.O)}};N.2w(\'6Z\',k(){N.2w(\'5L\',1T.1X);m(N.2a)N.2w(\'5L\',bG)});o 25=X 1i({1D:k(u){m(u&&u.$74)h u;c.$74=1b;u=u||N.u;c.u=u;c.r=u.r;c.2H=u.2H||u.bD;m(c.2H.5C==3)c.2H=c.2H.2A;c.78=u.bc;c.b1=u.aq;c.ao=u.b2;c.an=u.as;m([\'6l\',\'3x\'].18(c.r)){c.at=(u.79)?u.79/ab:-(u.ac||0)/3}14 m(c.r.18(\'23\')){c.4R=u.7b||u.aa;G(o 1v 17 25.1y){m(25.1y[1v]==c.4R){c.23=1v;1t}}m(c.r==\'6y\'){o 4S=c.4R-a9;m(4S>0&&4S<13)c.23=\'f\'+4S}c.23=c.23||5s.ai(c.4R).3V()}14 m(c.r.2I(/(6z|2q|ah)/)){c.3L={\'x\':u.5t||u.7d+I.26.47,\'y\':u.58||u.7c+I.26.45};c.af={\'x\':u.5t?u.5t-N.7H:u.7d,\'y\':u.58?u.58-N.7F:u.7c};c.aA=(u.7b==3)||(u.aS==2);1Z(c.r){12\'5r\':c.1I=u.1I||u.aP;1t;12\'59\':c.1I=u.1I||u.8e}c.6t()}h c},1x:k(){h c.4I().4E()},4I:k(){m(c.u.4I)c.u.4I();14 c.u.aY=1b;h c},4E:k(){m(c.u.4E)c.u.4E();14 c.u.aX=V;h c}});25.4U={1I:k(){m(c.1I&&c.1I.5C==3)c.1I=c.1I.2A},6s:k(){5J{25.4U.1I.1Y(c)}5O(e){c.1I=c.2H}}};25.1r.6t=(N.5K)?25.4U.6s:25.4U.1I;25.1y=X 3a({\'aG\':13,\'aM\':38,\'aL\':40,\'1p\':37,\'3T\':39,\'aJ\':27,\'am\':32,\'aI\':8,\'aK\':9,\'5Y\':46});H.2g.2i={22:k(r,J){c.$T=c.$T||{};c.$T[r]=c.$T[r]||{\'1y\':[],\'1u\':[]};m(c.$T[r].1y.18(J))h c;c.$T[r].1y.1d(J);o 4t=r;o 1O=H.2i[r];m(1O){m(1O.6f)1O.6f.1Y(c,J);m(1O.2c)J=1O.2c;m(1O.r)4t=1O.r}m(!c.65)J=J.2m({\'Q\':c,\'u\':1b});c.$T[r].1u.1d(J);h(H.5y.18(4t))?c.2w(4t,J):c},44:k(r,J){m(!c.$T||!c.$T[r])h c;o 1M=c.$T[r].1y.3v(J);m(1M==-1)h c;o 23=c.$T[r].1y.4s(1M,1)[0];o F=c.$T[r].1u.4s(1M,1)[0];o 1O=H.2i[r];m(1O){m(1O.36)1O.36.1Y(c,J);m(1O.r)r=1O.r}h(H.5y.18(r))?c.3N(r,F):c},63:k(2M){h H.4p(c,\'22\',2M)},4q:k(r){m(!c.$T)h c;m(!r){G(o 57 17 c.$T)c.4q(57);c.$T=1j}14 m(c.$T[r]){c.$T[r].1y.1C(k(J){c.44(r,J)},c);c.$T[r]=1j}h c},1A:k(r,19,1S){m(c.$T&&c.$T[r]){c.$T[r].1y.1C(k(J){J.2m({\'Q\':c,\'1S\':1S,\'Y\':19})()},c)}h c},6p:k(K,r){m(!K.$T)h c;m(!r){G(o 57 17 K.$T)c.6p(K,57)}14 m(K.$T[r]){K.$T[r].1y.1C(k(J){c.22(r,J)},c)}h c}};N.M(H.2g.2i);I.M(H.2g.2i);H.M(H.2g.2i);H.2i=X 3a({\'6x\':{r:\'5r\',2c:k(u){u=X 25(u);m(u.1I!=c&&!c.6m(u.1I))c.1A(\'6x\',u)}},\'6v\':{r:\'59\',2c:k(u){u=X 25(u);m(u.1I!=c&&!c.6m(u.1I))c.1A(\'6v\',u)}},\'3x\':{r:(N.5K)?\'6l\':\'3x\'}});H.5y=[\'6z\',\'al\',\'5E\',\'68\',\'3x\',\'6l\',\'5r\',\'59\',\'3M\',\'6y\',\'ar\',\'by\',\'7X\',\'5L\',\'6Z\',\'bs\',\'bl\',\'bh\',\'ba\',\'8d\',\'ax\',\'aw\',\'2S\',\'au\',\'av\',\'ak\',\'3E\'];5Z.M({4x:k(Q,19){h c.2m({\'Q\':Q,\'Y\':19,\'u\':25})}});1E.M({a7:k(2s){h X 1E(c.2h(k(q){h(H.3A(q)==2s)}))},8g:k(1n,1Q){o O=c.2h(k(q){h(q.1n&&q.1n.18(1n,\' \'))});h(1Q)?O:X 1E(O)},8k:k(3n,1Q){o O=c.2h(k(q){h(q.3n==3n)});h(1Q)?O:X 1E(O)},8l:k(1v,5i,F,1Q){o O=c.2h(k(q){o 1J=H.4Z(q,1v);m(!1J)h V;m(!5i)h 1b;1Z(5i){12\'=\':h(1J==F);12\'*=\':h(1J.18(F));12\'^=\':h(1J.88(0,F.R)==F);12\'$=\':h(1J.88(1J.R-F.R)==F);12\'!=\':h(1J!=F);12\'~=\':h 1J.18(F,\' \')}h V});h(1Q)?O:X 1E(O)}});k $E(1o,2h){h($(2h)||I).7I(1o)};k $ad(1o,2h){h($(2h)||I).4G(1o)};$$.2K={\'62\':/^(\\w*|\\*)(?:#([\\w-]+)|\\.([\\w-]+))?(?:\\[(\\w+)(?:([!*^$]?=)["\']?([^"\'\\]]*)["\']?)?])?$/,\'2O\':{5k:k(1e,2f,U,i){o 1U=[2f.aR?\'69:\':\'\',U[1]];m(U[2])1U.1d(\'[@3n="\',U[2],\'"]\');m(U[3])1U.1d(\'[18(5D(" ", @5T, " "), " \',U[3],\' ")]\');m(U[4]){m(U[5]&&U[6]){1Z(U[5]){12\'*=\':1U.1d(\'[18(@\',U[4],\', "\',U[6],\'")]\');1t;12\'^=\':1U.1d(\'[aU-aV(@\',U[4],\', "\',U[6],\'")]\');1t;12\'$=\':1U.1d(\'[b0(@\',U[4],\', 2r-R(@\',U[4],\') - \',U[6].R,\' + 1) = "\',U[6],\'"]\');1t;12\'=\':1U.1d(\'[@\',U[4],\'="\',U[6],\'"]\');1t;12\'!=\':1U.1d(\'[@\',U[4],\'!="\',U[6],\'"]\')}}14{1U.1d(\'[@\',U[4],\']\')}}1e.1d(1U.21(\'\'));h 1e},5N:k(1e,2f,1Q){o O=[];o 2O=I.85(\'.//\'+1e.21(\'//\'),2f,$$.2K.8h,aZ.aO,1j);G(o i=0,j=2O.aN;i<j;i++)O.1d(2O.aF(i));h(1Q)?O:X 1E(O.2c($))}},\'7r\':{5k:k(1e,2f,U,i){m(i==0){m(U[2]){o q=2f.4H(U[2]);m(!q||((U[1]!=\'*\')&&(H.3A(q)!=U[1])))h V;1e=[q]}14{1e=$A(2f.2o(U[1]))}}14{1e=$$.2K.2o(1e,U[1]);m(U[2])1e=1E.8k(1e,U[2],1b)}m(U[3])1e=1E.8g(1e,U[3],1b);m(U[4])1e=1E.8l(1e,U[4],U[5],U[6],1b);h 1e},5N:k(1e,2f,1Q){h(1Q)?1e:$$.41(1e)}},8h:k(8i){h(8i==\'69\')?\'aH://aC.aB.aD/aE/69\':V},2o:k(2f,4P){o 5m=[];G(o i=0,j=2f.R;i<j;i++)5m.M(2f[i].2o(4P));h 5m}};$$.2K.3j=(N.2O)?\'2O\':\'7r\';H.2g.5M={4D:k(1o,1Q){o 1e=[];1o=1o.5h().4V(\' \');G(o i=0,j=1o.R;i<j;i++){o 7x=1o[i];o U=7x.2y($$.2K.62);m(!U)1t;U[1]=U[1]||\'*\';o 1U=$$.2K[$$.2K.3j].5k(1e,c,U,i);m(!1U)1t;1e=1U}h $$.2K[$$.2K.3j].5N(1e,c,1Q)},7I:k(1o){h $(c.4D(1o,1b)[0]||V)},4G:k(1o,1Q){o O=[];1o=1o.4V(\',\');G(o i=0,j=1o.R;i<j;i++)O=O.5D(c.4D(1o[i],1b));h(1Q)?O:$$.41(O)}};H.M({4H:k(3n){o q=I.4H(3n);m(!q)h V;G(o 1h=q.2A;1h!=c;1h=1h.2A){m(!1h)h V}h q},aW:k(1n){h c.4D(\'.\'+1n)}});I.M(H.2g.5M);H.M(H.2g.5M);H.M({2N:k(){1Z(c.3A()){12\'2S\':o 1u=[];$1C(c.t,k(2E){m(2E.5H)1u.1d($4C(2E.F,2E.2k))});h(c.5P)?1u:1u[0];12\'7Y\':m(!(c.5p&&[\'aQ\',\'aT\'].18(c.r))&&![\'4B\',\'2k\',\'az\'].18(c.r))1t;12\'7S\':h c.F}h V},7M:k(){h $$(c.2o(\'7Y\'),c.2o(\'2S\'),c.2o(\'7S\'))},ag:k(){o 5j=[];c.7M().1C(k(q){o 1v=q.1v;o F=q.2N();m(F===V||!1v||q.5q)h;o 5n=k(3d){5j.1d(1v+\'=\'+aj(3d))};m($r(F)==\'1f\')F.1C(5n);14 5n(F)});h 5j.21(\'&\')}});H.M({2U:k(x,y){c.47=x;c.45=y},5I:k(){h{\'3E\':{\'x\':c.47,\'y\':c.45},\'35\':{\'x\':c.4d,\'y\':c.4b},\'5Q\':{\'x\':c.4i,\'y\':c.4v}}},3c:k(1F){1F=1F||[];o q=c,1p=0,1m=0;ae{1p+=q.ay||0;1m+=q.bE||0;q=q.bF}6e(q);1F.1C(k(C){1p-=C.47||0;1m-=C.45||0});h{\'x\':1p,\'y\':1m}},7A:k(1F){h c.3c(1F).y},7G:k(1F){h c.3c(1F).x},4r:k(1F){o 1N=c.3c(1F);o W={\'2t\':c.4d,\'2Q\':c.4b,\'1p\':1N.x,\'1m\':1N.y};W.3T=W.1p+W.2t;W.3R=W.1m+W.2Q;h W}});H.2i.67={6f:k(J){m(N.4K){J.1Y(c);h}o 43=k(){m(N.4K)h;N.4K=1b;N.1L=$6c(N.1L);c.1A(\'67\')}.Q(c);m(I.4m&&N.3r){N.1L=k(){m([\'4K\',\'7P\'].18(I.4m))43()}.3p(50)}14 m(I.4m&&N.2a){m(!$(\'6o\')){o 4j=(N.bH.bC==\'bB:\')?\'://0\':\'bx:bw(0)\';I.bJ(\'<3D 3n="6o" bA 4j="\'+4j+\'"><\\/3D>\');$(\'6o\').bS=k(){m(c.4m==\'7P\')43()}}}14{N.2w("7X",43);I.2w("b9",43)}}};N.b4=k(J){h c.22(\'67\',J)};N.M({7B:k(){m(c.4F)h c.b3;m(c.7u)h I.4o.7s;h I.26.7s},7C:k(){m(c.4F)h c.b7;m(c.7u)h I.4o.7z;h I.26.7z},7D:k(){m(c.2a)h 1a.2d(I.26.4d,I.26.4i);m(c.3r)h I.4o.4i;h I.26.4i},80:k(){m(c.2a)h 1a.2d(I.26.4b,I.26.4v);m(c.3r)h I.4o.4v;h I.26.4v},8b:k(){h c.7H||I.26.47},8j:k(){h c.7F||I.26.45},5I:k(){h{\'35\':{\'x\':c.7B(),\'y\':c.7C()},\'5Q\':{\'x\':c.7D(),\'y\':c.80()},\'3E\':{\'x\':c.8b(),\'y\':c.8j()}}},3c:k(){h{\'x\':0,\'y\':0}}});o 15={};15.2e=X 1i({t:{3Z:1i.1X,3e:1i.1X,82:1i.1X,1z:k(p){h-(1a.7K(1a.5W*p)-1)/2},64:bg,1K:\'3J\',3u:1b,84:50},1D:k(t){c.C=c.C||1j;c.42(t);m(c.t.1D)c.t.1D.1Y(c)},86:k(){o 2L=$2L();m(2L<c.2L+c.t.64){c.8f=c.t.1z((2L-c.2L)/c.t.64);c.3h();c.3b()}14{c.1x(1b);c.2z(c.L);c.1A(\'3e\',c.C,10);c.8m()}},2z:k(L){c.P=L;c.3b();h c},3h:k(){c.P=c.33(c.K,c.L)},33:k(K,L){h(L-K)*c.8f+K},1c:k(K,L){m(!c.t.3u)c.1x();14 m(c.1L)h c;c.K=K;c.L=L;c.8d=c.L-c.K;c.2L=$2L();c.1L=c.86.3p(1a.3o(bq/c.t.84),c);c.1A(\'3Z\',c.C);h c},1x:k(56){m(!c.1L)h c;c.1L=$6c(c.1L);m(!56)c.1A(\'82\',c.C);h c},1O:k(K,L){h c.1c(K,L)},br:k(56){h c.1x(56)}});15.2e.5x(X 83,X 2i,X 5v);15.2u={2S:k(B,L){m(B.2I(/54/i))h c.6j;o r=$r(L);m((r==\'1f\')||(r==\'2r\'&&L.18(\' \')))h c.4W;h c.87},28:k(q,B,3y){m(!3y.1d)3y=[3y];o K=3y[0],L=3y[1];m(!$1W(L)){L=K;K=q.1G(B)}o 1g=c.2S(B,L);h{\'K\':1g.28(K),\'L\':1g.28(L),\'1g\':1g}}};15.2u.87={28:k(F){h 3Q(F)},3w:k(K,L,3t){h 3t.33(K,L)},2N:k(F,1K,B){m(1K==\'3J\'&&B!=\'1R\')F=1a.3o(F);h F+1K}};15.2u.4W={28:k(F){h F.1d?F:F.4V(\' \').2c(k(v){h 3Q(v)})},3w:k(K,L,3t){o P=[];G(o i=0;i<K.R;i++)P[i]=3t.33(K[i],L[i]);h P},2N:k(F,1K,B){m(1K==\'3J\'&&B!=\'1R\')F=F.2c(1a.3o);h F.21(1K+\' \')+1K}};15.2u.6j={28:k(F){h F.1d?F:F.53(1b)},3w:k(K,L,3t){o P=[];G(o i=0;i<K.R;i++)P[i]=1a.3o(3t.33(K[i],L[i]));h P},2N:k(F){h\'24(\'+F.21(\',\')+\')\'}};15.6b=15.2e.M({1D:k(q,B,t){c.C=$(q);c.B=B;c.1h(t)},7R:k(){h c.2z(0)},3h:k(){c.P=c.1g.3w(c.K,c.L,c)},2z:k(L){c.1g=15.2u.2S(c.B,L);h c.1h(c.1g.28(L))},1c:k(K,L){m(c.1L&&c.t.3u)h c;o 1w=15.2u.28(c.C,c.B,[K,L]);c.1g=1w.1g;h c.1h(1w.K,1w.L)},3b:k(){c.C.2J(c.B,c.1g.2N(c.P,c.t.1K,c.B))}});H.M({bo:k(B,t){h X 15.6b(c,B,t)}});15.30=15.2e.M({1D:k(q,t){c.C=$(q);c.1h(t)},3h:k(){G(o p 17 c.K)c.P[p]=c.1g[p].3w(c.K[p],c.L[p],c)},2z:k(L){o 1w={};c.1g={};G(o p 17 L){c.1g[p]=15.2u.2S(p,L[p]);1w[p]=c.1g[p].28(L[p])}h c.1h(1w)},1c:k(W){m(c.1L&&c.t.3u)h c;c.P={};c.1g={};o K={},L={};G(o p 17 W){o 1w=15.2u.28(c.C,p,W[p]);K[p]=1w.K;L[p]=1w.L;c.1g[p]=1w.1g}h c.1h(K,L)},3b:k(){G(o p 17 c.P)c.C.2J(p,c.1g[p].2N(c.P[p],c.t.1K,p))}});H.M({bj:k(t){h X 15.30(c,t)}});15.1E=15.2e.M({1D:k(O,t){c.O=$$(O);c.1h(t)},3h:k(){G(o i 17 c.K){o 3U=c.K[i],2T=c.L[i],2D=c.1g[i],48=c.P[i]={};G(o p 17 3U)48[p]=2D[p].3w(3U[p],2T[p],c)}},2z:k(L){o 1w={};c.1g={};G(o i 17 L){o 2T=L[i],2D=c.1g[i]={},8a=1w[i]={};G(o p 17 2T){2D[p]=15.2u.2S(p,2T[p]);8a[p]=2D[p].28(2T[p])}}h c.1h(1w)},1c:k(W){m(c.1L&&c.t.3u)h c;c.P={};c.1g={};o K={},L={};G(o i 17 W){o 5u=W[i],3U=K[i]={},2T=L[i]={},2D=c.1g[i]={};G(o p 17 5u){o 1w=15.2u.28(c.O[i],p,5u[p]);3U[p]=1w.K;2T[p]=1w.L;2D[p]=1w.1g}}h c.1h(K,L)},3b:k(){G(o i 17 c.P){o 48=c.P[i],2D=c.1g[i];G(o p 17 48)c.O[i].2J(p,2D[p].2N(48[p],c.t.1K,p))}}});15.bm=15.2e.M({t:{1F:[],2G:{\'x\':0,\'y\':0},7O:1b},1D:k(C,t){c.P=[];c.C=$(C);c.1V={\'1x\':c.1x.Q(c,V)};c.1h(t);m(c.t.7O){c.22(\'3Z\',k(){I.22(\'3x\',c.1V.1x)}.Q(c));c.22(\'3e\',k(){I.44(\'3x\',c.1V.1x)}.Q(c))}},3h:k(){G(o i=0;i<2;i++)c.P[i]=c.33(c.K[i],c.L[i])},2U:k(x,y){m(c.1L&&c.t.3u)h c;o q=c.C.5I();o 1u={\'x\':x,\'y\':y};G(o z 17 q.35){o 2d=q.5Q[z]-q.35[z];m($1W(1u[z]))1u[z]=($r(1u[z])==\'3Y\')?1u[z].1q(0,2d):2d;14 1u[z]=q.3E[z];1u[z]+=c.t.2G[z]}h c.1c([q.3E.x,q.3E.y],[1u.x,1u.y])},8u:k(){h c.2U(V,0)},8Q:k(){h c.2U(V,\'8c\')},8W:k(){h c.2U(0,V)},8V:k(){h c.2U(\'8c\',V)},8e:k(q){o 1h=c.C.3c(c.t.1F);o 2H=$(q).3c(c.t.1F);h c.2U(2H.x-1h.x,2H.y-1h.y)},3b:k(){c.C.2U(c.P[0],c.P[1])}});15.8M=15.2e.M({t:{1H:\'7Z\'},1D:k(q,t){c.C=$(q);c.31=X H(\'8L\',{\'81\':$M(c.C.7J(\'2b\'),{\'8I\':\'4B\'})}).7T(c.C).7W(c.C);c.C.2J(\'2b\',0);c.42(t);c.P=[];c.1h(c.t);c.4c=1b;c.22(\'3e\',k(){c.4c=(c.P[0]===0)});m(N.4F)c.22(\'3e\',k(){m(c.4c)c.C.36().34(c.31)})},3h:k(){G(o i=0;i<2;i++)c.P[i]=c.33(c.K[i],c.L[i])},7Z:k(){c.2b=\'2b-1m\';c.4g=\'2Q\';c.2G=c.C.4b},8U:k(){c.2b=\'2b-1p\';c.4g=\'2t\';c.2G=c.C.4d},7L:k(1H){c[1H||c.t.1H]();h c.1c([c.C.1G(c.2b).2j(),c.31.1G(c.4g).2j()],[0,c.2G])},7N:k(1H){c[1H||c.t.1H]();h c.1c([c.C.1G(c.2b).2j(),c.31.1G(c.4g).2j()],[-c.2G,0])},7R:k(1H){c[1H||c.t.1H]();c.4c=V;h c.2z([-c.2G,0])},8R:k(1H){c[1H||c.t.1H]();c.4c=1b;h c.2z([0,c.2G])},8S:k(1H){m(c.31.4b==0||c.31.4d==0)h c.7L(1H);h c.7N(1H)},3b:k(){c.C.2J(c.2b,c.P[0]+c.t.1K);c.31.2J(c.4g,c.P[1]+c.t.1K)}});15.5V=k(1z,29){29=29||[];m($r(29)!=\'1f\')29=[29];h $M(1z,{8p:k(1M){h 1z(1M,29)},8D:k(1M){h 1-1z(1-1M,29)},8z:k(1M){h(1M<=0.5)?1z(2*1M,29)/2:(2-1z(2*(1-1M),29))/2}})};15.2p=X 3a({8B:k(p){h p}});15.2p.M=k(5w){G(o 1z 17 5w){15.2p[1z]=X 15.5V(5w[1z]);15.2p.5U(1z)}};15.2p.5U=k(1z){[\'8E\',\'a5\',\'9H\'].1C(k(5c){15.2p[1z.3V()+5c]=15.2p[1z][\'9K\'+5c]})};15.2p.M({9N:k(p,x){h 1a.2F(p,x[0]||6)},9M:k(p){h 1a.2F(2,8*(p-1))},9G:k(p){h 1-1a.7Q(1a.9F(p))},9A:k(p){h 1-1a.7Q((1-p)*1a.5W/2)},9z:k(p,x){x=x[0]||1.8Y;h 1a.2F(p,2)*((x+1)*p-x)},9y:k(p){o F;G(o a=0,b=1;1;a+=b,b/=2){m(p>=(7-4*a)/11){F=-1a.2F((11-6*a-11*p)/4,2)+b*b;1t}}h F},9E:k(p,x){h 1a.2F(2,10*--p)*1a.7K(20*p*1a.5W*(x[0]||1)/3)}});[\'9O\',\'a0\',\'a3\',\'9R\'].1C(k(1z,i){15.2p[1z]=X 15.5V(k(p){h 1a.2F(p,[i+2])});15.2p.5U(1z)});o 3k={};3k.2e=X 1i({t:{3X:V,1K:\'3J\',3Z:1i.1X,7V:1i.1X,3e:1i.1X,7v:1i.1X,7t:1i.1X,1q:V,2R:{x:\'1p\',y:\'1m\'},3g:V,7w:6},1D:k(q,t){c.42(t);c.C=$(q);c.3X=$(c.t.3X)||c.C;c.2q={\'P\':{},\'1M\':{}};c.F={\'1c\':{},\'P\':{}};c.1V={\'1c\':c.1c.4x(c),\'3K\':c.3K.4x(c),\'3l\':c.3l.4x(c),\'1x\':c.1x.Q(c)};c.7U();m(c.t.1D)c.t.1D.1Y(c)},7U:k(){c.3X.22(\'68\',c.1V.1c);h c},9Q:k(){c.3X.44(\'68\',c.1V.1c);h c},1c:k(u){c.1A(\'7V\',c.C);c.2q.1c=u.3L;o 1q=c.t.1q;c.1q={\'x\':[],\'y\':[]};G(o z 17 c.t.2R){m(!c.t.2R[z])4J;c.F.P[z]=c.C.1G(c.t.2R[z]).2j();c.2q.1M[z]=u.3L[z]-c.F.P[z];m(1q&&1q[z]){G(o i=0;i<2;i++){m($1W(1q[z][i]))c.1q[z][i]=($r(1q[z][i])==\'k\')?1q[z][i]():1q[z][i]}}}m($r(c.t.3g)==\'3Y\')c.t.3g={\'x\':c.t.3g,\'y\':c.t.3g};I.2w(\'3M\',c.1V.3K);I.2w(\'5E\',c.1V.1x);c.1A(\'3Z\',c.C);u.1x()},3K:k(u){o 7y=1a.3o(1a.9T(1a.2F(u.3L.x-c.2q.1c.x,2)+1a.2F(u.3L.y-c.2q.1c.y,2)));m(7y>c.t.7w){I.3N(\'3M\',c.1V.3K);I.2w(\'3M\',c.1V.3l);c.3l(u);c.1A(\'7v\',c.C)}u.1x()},3l:k(u){c.3W=V;c.2q.P=u.3L;G(o z 17 c.t.2R){m(!c.t.2R[z])4J;c.F.P[z]=c.2q.P[z]-c.2q.1M[z];m(c.1q[z]){m($1W(c.1q[z][1])&&(c.F.P[z]>c.1q[z][1])){c.F.P[z]=c.1q[z][1];c.3W=1b}14 m($1W(c.1q[z][0])&&(c.F.P[z]<c.1q[z][0])){c.F.P[z]=c.1q[z][0];c.3W=1b}}m(c.t.3g[z])c.F.P[z]-=(c.F.P[z]%c.t.3g[z]);c.C.2J(c.t.2R[z],c.F.P[z]+c.t.1K)}c.1A(\'7t\',c.C);u.1x()},1x:k(){I.3N(\'3M\',c.1V.3K);I.3N(\'3M\',c.1V.3l);I.3N(\'5E\',c.1V.1x);c.1A(\'3e\',c.C)}});3k.2e.5x(X 2i,X 5v);H.M({9a:k(t){h X 3k.2e(c,$3i({2R:{x:\'2t\',y:\'2Q\'}},t))}});3k.89=3k.2e.M({t:{4O:[],2l:V,1F:[]},1D:k(q,t){c.42(t);c.C=$(q);c.4O=$$(c.t.4O);c.2l=$(c.t.2l);c.1N={\'C\':c.C.1G(\'1N\'),\'2l\':V};m(c.2l)c.1N.2l=c.2l.1G(\'1N\');m(![\'5g\',\'3O\',\'5f\'].18(c.1N.C))c.1N.C=\'3O\';o 1m=c.C.1G(\'1m\').2j();o 1p=c.C.1G(\'1p\').2j();m(c.1N.C==\'3O\'&&![\'5g\',\'3O\',\'5f\'].18(c.1N.2l)){1m=$1W(1m)?1m:c.C.7A(c.t.1F);1p=$1W(1p)?1p:c.C.7G(c.t.1F)}14{1m=$1W(1m)?1m:0;1p=$1W(1p)?1p:0}c.C.5b({\'1m\':1m,\'1p\':1p,\'1N\':c.1N.C});c.1h(c.C)},1c:k(u){c.2n=1j;m(c.2l){o 3m=c.2l.4r();o q=c.C.4r();m(c.1N.C==\'3O\'&&![\'5g\',\'3O\',\'5f\'].18(c.1N.2l)){c.t.1q={\'x\':[3m.1p,3m.3T-q.2t],\'y\':[3m.1m,3m.3R-q.2Q]}}14{c.t.1q={\'y\':[0,3m.2Q-q.2Q],\'x\':[0,3m.2t-q.2t]}}}c.1h(u)},3l:k(u){c.1h(u);o 2n=c.3W?V:c.4O.2h(c.7E,c).6n();m(c.2n!=2n){m(c.2n)c.2n.1A(\'99\',[c.C,c]);c.2n=2n?2n.1A(\'98\',[c.C,c]):1j}h c},7E:k(q){q=q.4r(c.t.1F);o P=c.2q.P;h(P.x>q.1p&&P.x<q.3T&&P.y<q.3R&&P.y>q.1m)},1x:k(){m(c.2n&&!c.3W)c.2n.1A(\'9g\',[c.C,c]);14 c.C.1A(\'9o\',c);c.1h();h c}});H.M({9j:k(t){h X 3k.89(c,t)}});',62,739,'||||||||||||this|||||return|||function||if||var||el|type||options|event|||||||property|element|||value|for|Element|document|fn|from|to|extend|window|elements|now|bind|length||events|param|false|obj|new|arguments||||case||else|Fx||in|contains|args|Math|true|start|push|items|array|css|parent|Class|null|result|style|top|className|selector|left|limit|prototype|props|break|values|name|parsed|stop|keys|transition|fireEvent|prop|each|initialize|Elements|overflown|getStyle|mode|relatedTarget|current|unit|timer|pos|position|custom|Array|nocash|opacity|delay|Garbage|temp|bound|chk|empty|call|switch||join|addEvent|key|rgb|Event|documentElement||parse|params|ie|margin|map|max|Base|context|Methods|filter|Events|toInt|text|container|create|overed|getElementsByTagName|Transitions|mouse|string|tag|width|CSS|properties|addListener|item|match|set|parentNode|index|returns|iCss|option|pow|offset|target|test|setStyle|shared|time|source|getValue|xpath|replace|height|modifiers|select|iTo|scrollTo|iterable|border|tmp|previous|object|Styles|wrapper||compute|inject|size|remove||||Abstract|increase|getPosition|val|onComplete|chains|grid|setNow|merge|method|Drag|drag|cont|id|round|periodical|min|webkit|hex|fx|wait|indexOf|getNow|mousewheel|fromTo|collect|getTag|htmlElement|bit|script|scroll|len|results|native|apply|px|check|page|mousemove|removeListener|absolute|precision|parseFloat|bottom|HTMLElement|right|iFrom|toLowerCase|out|handle|number|onStart||unique|setOptions|domReady|removeEvent|scrollTop||scrollLeft|iNow|parseInt|klass|offsetHeight|open|offsetWidth|walk|next|layout|mix|scrollWidth|src|Properties|regex|readyState|forEach|body|setMany|removeEvents|getCoordinates|splice|realType|typeof|scrollHeight|brother|bindWithEvent|Listeners|visibility|every|hidden|pick|getElements|preventDefault|webkit419|getElementsBySelector|getElementById|stopPropagation|continue|loaded|trash|currentStyle|rgbToHex|droppables|tagName|proto|code|fKey|defined|fix|split|Multi|attempt|mp|getProperty||generic|included|hexToRgb|color|setProperty|end|evType|pageY|mouseout|first|setStyles|easeType|default|newArray|fixed|relative|trim|operator|queryString|getParam|insertBefore|found|qs|include|checked|disabled|mouseover|String|pageX|iProps|Options|transitions|implement|NativeEvents|node|merged|appendChild|nodeType|concat|mouseup|RegExp|clean|selected|getSize|try|gecko|unload|Dom|getItems|catch|multiple|scrollSize|innerText|flag|class|compat|Transition|PI|getMany|delete|Function|padding|firstChild|regexp|addEvents|duration|addEventListener|charAt|domready|mousedown|xhtml|hasClass|Style|clear|random|while|add|on|cssText|camelCase|Color|pairs|DOMMouseScroll|hasChild|getLast|ie_ready|cloneEvents|constructor|ie6|relatedTargetGecko|fixRelatedTarget|picked|mouseleave|undefined|mouseenter|keydown|click|head|pp|PropertiesIFlag|elementsProperty|setProperties|where|nodeValue|before|createElement|toFloat|slice|interval|removeChild|Number|after|argument|hyphenate|setOpacity|defaultView|visible|zoom|getNext|addClass|contents|removeClass|beforeunload|childNodes|appendText|styleSheet|copy|extended|removeEventListener|borderShort|direction|shift|wheelDelta|callee|which|clientY|clientX|Left|Bottom|setHTML|textContent|innerHTML|toUpperCase|fixStyle|capitalize|Right|Top|0px|Width|Merge|normal|clientWidth|onDrag|opera|onSnap|snap|sel|distance|clientHeight|getTop|getWidth|getHeight|getScrollWidth|checkAgainst|pageYOffset|getLeft|pageXOffset|getElement|getStyles|cos|slideIn|getFormElements|slideOut|wheelStops|complete|sin|hide|textarea|injectAfter|attach|onBeforeStart|adopt|load|input|vertical|getScrollHeight|styles|onCancel|Chain|fps|evaluate|step|Single|substr|Move|iParsed|getScrollLeft|full|change|toElement|delta|filterByClass|resolver|prefix|getScrollTop|filterById|filterByAttribute|callChain|getChildren|cloneNode|easeIn|float|replaceChild|cssFloat|styleFloat|toTop|zIndex|getAttribute|getParent|toggleClass|easeInOut|createTextNode|linear|replaceWith|easeOut|In|100|getComputedStyle|getPrevious|overflow|Sibling|getPropertyValue|div|Slide|clone|getFirst|alpha|toBottom|show|toggle|hasLayout|horizontal|toRight|toLeft|lastChild|618|taintEnabled|webkit420|getBoxObjectFor|navigator|all|XMLHttpRequest|ie7|khtml|Object|over|leave|makeResizable|BackgroundImageCache|execCommand|iframe|DOMElement|ActiveXObject|drop|whitespace|collection|makeDraggable|textnode|nodeName|MooTools|version|emptydrop|floor|Window|Document|clearInterval|clearTimeout|Date|getTime|chain|clearChain|Bounce|Back|Sine|boolean|embed|times|Elastic|acos|Circ|InOut|injectInside|injectTop|ease|injectBefore|Expo|Pow|Quad|bindAsEventListener|detach|Quint|escapeRegExp|sqrt|getRandom|some|associate|transparent|toString|pass|Cubic|err|setInterval|Quart|setTimeout|Out|removeProperty|filterByTag|attributes|111|keyCode|120|detail|ES|do|client|toQueryString|menu|fromCharCode|encodeURIComponent|contextmenu|dblclick|space|meta|alt||ctrlKey|keypress|metaKey|wheel|error|abort|reset|submit|offsetLeft|password|rightClick|w3|www|org|1999|snapshotItem|enter|http|backspace|esc|tab|down|up|snapshotLength|UNORDERED_NODE_SNAPSHOT_TYPE|fromElement|checkbox|namespaceURI|button|radio|starts|with|getElementsByClassName|returnValue|cancelBubble|XPathResult|substring|control|altKey|innerWidth|onDomReady|borderColor|borderStyle|innerHeight|borderWidth|DOMContentLoaded|blur|rowspan|shiftKey|colSpan|colspan|htmlFor|500|focus|getProperties|effects|removeAttribute|move|Scroll|setAttribute|effect|getText|1000|clearTimer|resize|setText|accesskey|rowSpan|void|javascript|keyup|accessKey|defer|https|protocol|srcElement|offsetTop|offsetParent|CollectGarbage|location|detachEvent|write|maxLength|readonly|maxlength|tabIndex|tabindex|frameborder|readOnly|href|onreadystatechange|attachEvent|frameBorder'.split('|'),0,{}))


/* END OF INCLUDED FILE '/modules/_mootools/mootools.js' */



/* BEGIN OF INCLUDED FILE '/modules/_mootools_seitwerk/mootools_seitwerk.js' */

/**
 * Klasse zur Steuerung von Animations-Effekten, die verkettet nacheinander ablaufen sollen.
 *
 * 
 * Alles-Erklärender-Und-Keine-Fragen-Offen-Lassender-Beispiel-Code:
 *
 *    var fxChain = new SwFxChain();
 *    fxChain.push( 'logo', {duration:2000, transition:Fx.Transitions.Quad.easeOut}, {'margin-left':800}, 0 );
 *    fxChain.push( 'logo', {duration:1000, transition:Fx.Transitions.Quad.easeOut}, {'margin-left':0} ), 0;
 *    fxChain.pushP( 'logo', {duration:500, transition:Fx.Transitions.Quad.easeOut}, {'margin-top':400}, 500 );
 *    fxChain.pushF( function() { alert('pushF test') } );
 *    fxChain.start();
 *
 */
function SwFxChain() {

    // Variablen Initialisierten
    this.chain = new Array();
    
    // Diese Chain registrieren
    if (!window.swFxChains || window.swFxChains == null) {
        window.swFxChains = new Array();
    }
    this.chainId = window.swFxChains.length;
    window.swFxChains[this.chainId] = this;
    
    /**
     * Aktuelle Größe der Chain auslesen.
     */
    this.size = function() {
        return this.chain.length;
    }
    
    /**
     * Aktion anhängen.
     */    
    this.push = function(target, options, params, delay) {
        var o = new Object();
        o['target'] = target;
        o['options'] = options;
        o['params'] = params;
        o['delay'] = delay;
        o['parallel'] = false;
        this.chain.push(o);
    }

    /**
     * Aktion anhängen, die zeitgleich zur letzten Aktion ablaufen soll.
     */    
    this.pushP = function(target, options, params, delay) {
        var o = new Object();
        o['target'] = target;
        o['options'] = options;
        o['params'] = params;
        o['delay'] = delay;
        o['parallel'] = true;
        this.chain.push(o);
    }

    /**
     * Pseudo-Aktion anhängen, die eine Funktion ausführt.
     */
    this.pushF = function(f) {
        var o = new Object();
        o['function'] = f;
        this.chain.push(o);
    }
    
    /**
     * Letzte Aktion der Kette entfernen und zurückgeben.
     */    
    this.pop = function() {
        return this.chain.pop();
    }
    
    /**
     * Erste Aktion der Kette entfernen und zurückgeben.
     */    
    this.shift = function() {
        return this.chain.shift();
    }
    
    /**
     * Eine bestimmte Aktion in der Kette abrufen.
     */
    this.get = function(i) {
        return this.chain[i];
    }
            
    /**
     * Eine bestimmte Aktion in der Kette entfernen.
     */
    this.remove = function(i) {
        var chainNew = new Array();
        for (var j=0; j<this.chain.length; j++) {
            if (j != i) {
                chainNew.push(this.chain[j]);
            }
        }
        this.chain = chainNew;
    }
   
    /**
     * Alle Aktionen aus der Kette entfernen.
     */
    this.removeAll = function() {
        while(this.chain.length > 0) {
            this.remove(this.chain.length-1);
        }
    }
    
    /**
     * Die Abarbeitung der Kette starten.
     */
    this.start = function() {
        this.next();
    }
    
    /**
     * Die Abarbeitung der Kette abbrechen.
     */
    this.stop = function() {
        this.removeAll();
    }    
    
    /**
     * Einen Schritt weiter in der Kette.
     */
    this.next = function() {
        if (this.size() > 0) {
            var o = this.shift();
            if (o['function'] != null) {
                // Funktion aufrufen
                o['function']();
                this.next();
            } else {
                // Animation starten
                eval("o['options'].onComplete = function() { window.swFxChains["+this.chainId+"].next(); }");
                if (!document.getElementById(o['target'])) {
                    alert("Element not found: "+o['target']);
                    return;
                }
                var fx = $(o['target']).effects(o['options']);
                if (o['delay'] != 0) {
                    fx.start.delay(o['delay'], fx, o['params'])
                } else {
                    fx.start(o['params']);
                }
                // Parallel ablaufende Animationen starten
                while (this.size() > 0 && this.get(0)['parallel'] == true) {
                    var o = this.shift();
                    if (!document.getElementById(o['target'])) {
                        alert("Element not found: ".o['target']);
                        return;
                    }
                    var fx = $(o['target']).effects(o['options']);
                    if (o['delay'] != 0) {
                        fx.start.delay(o['delay'], fx, o['params'])
                    } else {
                        fx.start(o['params']);
                    }
                }
            }
        }
    }
    
}




/* END OF INCLUDED FILE '/modules/_mootools_seitwerk/mootools_seitwerk.js' */



/* BEGIN OF INCLUDED FILE '/modules/usability/js/seitbox_dijit_form_SlickCheckBox.js' */


////
//// SlickCheckBox dijit
////
//// A checkbox which supports the parameters 'checkedValue' and 'uncheckedValue' and posts
//// one of this values to the server, depending on it's current state.
////
if (window.dojo) {
    dojo.provide("seitbox.dijit.form.SlickCheckBox");
    dojo.require("dijit.form.CheckBox");
    dojo.declare(
        "seitbox.dijit.form.SlickCheckBox",
        [dijit.form.CheckBox],
        {
            checkedValue: '1',
            uncheckedValue: '0',
            _currentValue: null,
            _uncheckedHiddenField: null,
            postMixInProperties: function(){
                // store current value and set value to checked value
                this._currentValue = this.value;
                this.value = this.checkedValue;
                // set checked state from current value
                if (this._currentValue == this.checkedValue) {
                    this.checked = true;
                } else {
                    this.checked = false;
                    //this._createUncheckedHiddenField(); --> will be done in postCreate()! This is too early!!
                }
                // call inherited
                this.inherited(arguments);
            },
            postCreate: function(){
                this.inherited(arguments);
                if(!this.checked){
                    this._createUncheckedHiddenField();
                }
            },
            _setCheckedAttr: function(){
                this.inherited(arguments);
                if (!this.checked) {
                    this._createUncheckedHiddenField();
                } else {
                    this._removeUncheckedHiddenField();
                }
            },
            _createUncheckedHiddenField: function() {
                this._uncheckedHiddenField = dojo.doc.createElement("input");
                dojo.attr(this._uncheckedHiddenField, "type", "hidden");
                dojo.attr(this._uncheckedHiddenField, "name", this.name);
                dojo.attr(this._uncheckedHiddenField, "value", this.uncheckedValue);
                if (!this.domNode) {
                    alert("seitbox.dijit.form.SlickCheckBox: Could not place unchecked hidden field before domNode, domNode not found.");
                }
                dojo.place(this._uncheckedHiddenField, this.domNode, "before");
            },
            _removeUncheckedHiddenField: function() {
                if (this._uncheckedHiddenField != null) {
                    this._uncheckedHiddenField.parentNode.removeChild(this._uncheckedHiddenField);
                    this._uncheckedHiddenField = null;
                }
            }
        }  
    );
}


/* END OF INCLUDED FILE '/modules/usability/js/seitbox_dijit_form_SlickCheckBox.js' */



/* BEGIN OF INCLUDED FILE '/modules/usability/js/imageviewer.js' */


window.imageviewer_fadeInDuration = 500; // set to 0 in imageviewer_custom.js to disable fade effect
window.imageviewer_fadeOutDuration = 500; // set to 0 in imageviewer_custom.js to disable fade effect
window.imageviewer_connectedListeners = new Array();

window.imageviewer_init = function(elemId) {
    var iv = eval('window.' + elemId + '_object');
    iv.currentIi = -1;
    // preload first image
    imageviewer_preloadImage(elemId, 0);
    // call for a second time (don't ask why)
    window.setTimeout(function() {
        imageviewer_gotoImage(elemId, 0);
    }, 1500);
    // disable marking of text
    imageviewer_disableSelection(dojo.byId(elemId));
    imageviewer_disableSelection(dojo.byId(elemId + '_imageviewerScreen'));
    imageviewer_disableSelection(dojo.byId(elemId + '_imageviewerImageContainer1'));
    imageviewer_disableSelection(dojo.byId(elemId + '_imageviewerImageContainer2'));
    imageviewer_disableSelection(dojo.byId(elemId + '_imageviewerImage1'));
    imageviewer_disableSelection(dojo.byId(elemId + '_imageviewerImage2'));
    imageviewer_disableSelection(dojo.byId(elemId + '_imageviewerImage2'));
    imageviewer_disableSelection(dojo.byId(elemId + '_imageviewerPrevNextContainer'));
    imageviewer_disableSelection(dojo.byId(elemId + '_imageviewerPrev'));
    imageviewer_disableSelection(dojo.byId(elemId + '_imageviewerNext'));
    imageviewer_disableSelection(dojo.byId(elemId + '_imageviewerImageNr'));
    // connect listeners
    (function(elemIdConnect){
        // add onmouseover
        dojo.connect(dojo.byId(elemIdConnect), 'onmouseover', function(event){
            imageviewer_createKeyboardListeners(elemIdConnect);
        });
        // add onclick to prev next buttons
        dojo.connect(dojo.byId(elemIdConnect + '_imageviewerPrev'), 'onclick', function(event){
            imageviewer_gotoPrevImage(elemIdConnect);
            dojo.stopEvent(event);
        });
        dojo.connect(dojo.byId(elemIdConnect + '_imageviewerNext'), 'onclick', function(event){
            imageviewer_gotoNextImage(elemIdConnect);
            dojo.stopEvent(event);
        });
        // add onclick for skipping to next image
        dojo.connect(dojo.byId(elemIdConnect + '_imageviewerScreen'), 'onclick', function(event){
            imageviewer_gotoNextImage(elemIdConnect);
            dojo.stopEvent(event);
        });
    })(elemId);
};

window.imageviewer_disableSelection = function(target) {
    if (typeof target.onselectstart != "undefined") { // IE
        target.onselectstart = function() {return false};
    } else if (typeof target.style.MozUserSelect != "undefined") { // Firefox
        target.style.MozUserSelect = "none";
    } else { // Others (ie: Opera)
        target.onmousedown = function() {return false};
        target.style.cursor = "default";
    }
};

window.imageviewer_createKeyboardListeners = function(elemIdConnect) {
    var listener;
    // remove existing listeners
    imageviewer_removeKeyboardListeners();
    // add onclick listeners to elem
    listener = dojo.connect(dojo.byId(elemIdConnect), 'onclick', function(event){
        dojo.stopEvent(event);
    });
    window.imageviewer_connectedListeners.push(listener);
    // add onclick listener (required to kill keyboard listener when clicking outside of imageviewer)
    listener = dojo.connect(window.document, 'onclick', function(event){
        imageviewer_removeKeyboardListeners();
        dojo.stopEvent(event);
    });
    window.imageviewer_connectedListeners.push(listener);
    // add keyboard listener
    listener = dojo.connect(window.document, 'onkeypress', function(event){
        imageviewer_onKeyPress(event, elemIdConnect);
    });
    window.imageviewer_connectedListeners.push(listener);
};

window.imageviewer_removeKeyboardListeners = function() {
    while(window.imageviewer_connectedListeners.length > 0) {
        dojo.disconnect(window.imageviewer_connectedListeners.pop());
    }
};

window.imageviewer_onKeyPress = function(event, elemId) {
    var iv = eval('window.' + elemId + '_object');
    if (event.keyCode == dojo.keys.LEFT_ARROW) {
        imageviewer_gotoPrevImage(elemId);
        dojo.stopEvent(event);
        return;
    }
    if (event.keyCode == dojo.keys.RIGHT_ARROW || event.keyCode == dojo.keys.SPACE || event.keyCode == 0) {
        imageviewer_gotoNextImage(elemId);
        dojo.stopEvent(event);
        return;
    }
    if (iv.fullscreen && event.keyCode == dojo.keys.ESCAPE) {
        imageviewer_toggleFullscreen(elemId);
        dojo.stopEvent(event);
        return;
    }
};

window.imageviewer_gotoPrevImage = function(elemId) {
    var iv = eval('window.' + elemId + '_object');
    imageviewer_gotoImage(elemId, iv.currentIi - 1);
};

window.imageviewer_gotoNextImage = function(elemId) {
    var iv = eval('window.' + elemId + '_object');
    imageviewer_gotoImage(elemId, iv.currentIi + 1);
};

window.imageviewer_gotoImage = function(elemId, ii) {
    imageviewer_createKeyboardListeners(elemId);
    var iv = eval('window.' + elemId + '_object');
    if (ii > iv.images.length - 1) {
        ii = 0;
    }
    if (ii < 0) {
        ii = iv.images.length - 1;
    }
    if (!iv.useSecondContainer) {
        iv.useSecondContainer = true;
        dojo.style(elemId + '_imageviewerImageContainer1', 'opacity', 0.0);
        dojo.style(elemId + '_imageviewerImageContainer1', 'zIndex', 1198);
        dojo.style(elemId + '_imageviewerImageContainer2', 'zIndex', 1197);
        dojo.byId(elemId + '_imageviewerImage1').src = iv.images[ii];
        imageviewer_fitImage(elemId, elemId + '_imageviewerImageContainer1', elemId + '_imageviewerImage1', ii);
        var fadeOut = dojo.animateProperty(
            {
                node: elemId + '_imageviewerImageContainer2',
                duration: (window.imageviewer_fadeOutDuration == 0 ? 1 : window.imageviewer_fadeOutDuration),
                properties: {
                    opacity: 0.0
                }
            }
        );
        fadeOut.play();
        var fadeIn = dojo.animateProperty(
            {
                node: elemId + '_imageviewerImageContainer1',
                duration: (window.imageviewer_fadeInDuration == 0 ? 1 : window.imageviewer_fadeInDuration),
                properties: {
                    opacity: 1.0
                }
            }
        );
        fadeIn.play();
    } else {
        iv.useSecondContainer = false;
        dojo.style(elemId + '_imageviewerImageContainer2', 'opacity', 0.0);
        dojo.style(elemId + '_imageviewerImageContainer2', 'zIndex', 1198);
        dojo.style(elemId + '_imageviewerImageContainer1', 'zIndex', 1197);
        dojo.byId(elemId + '_imageviewerImage2').src = iv.images[ii];
        imageviewer_fitImage(elemId, elemId + '_imageviewerImageContainer2', elemId + '_imageviewerImage2', ii);
        var fadeOut = dojo.animateProperty(
            {
                node: elemId + '_imageviewerImageContainer1',
                duration: (window.imageviewer_fadeOutDuration == 0 ? 1 : window.imageviewer_fadeOutDuration),
                properties: {
                    opacity: 0.0
                }
            }
        );
        fadeOut.play();
        var fadeIn = dojo.animateProperty(
            {
                node: elemId + '_imageviewerImageContainer2',
                duration: (window.imageviewer_fadeInDuration == 0 ? 1 : window.imageviewer_fadeInDuration),
                properties: {
                    opacity: 1.0
                }
            }
        );
        fadeIn.play();
    }
    dojo.byId(elemId + '_imageviewerTitle').innerHTML = (iv.imageinfos[ii].title == null || iv.imageinfos[ii].title == '' ? '&nbsp;' : iv.imageinfos[ii].title);
    dojo.byId(elemId + '_imageviewerDescription').innerHTML = (iv.imageinfos[ii].description == null || iv.imageinfos[ii].description == '' ? '&nbsp;' : iv.imageinfos[ii].description);
    dojo.byId(elemId + '_imageviewerImageNr').innerHTML = (parseInt(ii) + 1) + ' / ' + iv.images.length;
    imageviewer_preloadImage(elemId, ii - 1);
    imageviewer_preloadImage(elemId, ii + 1);
    iv.currentIi = ii;
};

window.imageviewer_fitImage = function(elemId, containerId, imageId, ii) {
    var iv = eval('window.' + elemId + '_object');
    var imageWidth = null;
    var imageHeight = null;
    if (iv.fullscreen) {
        imageWidth = dojo.byId(elemId + '_imageviewerScreen').offsetWidth;
        imageHeight = dojo.byId(elemId + '_imageviewerScreen').offsetHeight;
    } else {
        imageWidth = iv.imagewidth;
        imageHeight = iv.imageheight;
    }
    var container = dojo.byId(containerId);
    var img = dojo.byId(imageId);
    var preloadedImage = iv.preloadedImages[ii];
    if (!preloadedImage) {
        return;
    }
    var origWidth = preloadedImage.width;
    var origHeight = preloadedImage.height;
    var xFactor = origWidth / imageWidth;
    var yFactor = origHeight / imageHeight;
    if (xFactor >= yFactor) {
        img.width = imageWidth;
        img.height = Math.floor(origHeight / xFactor);
    } else {
        img.height = imageHeight;
        img.width = Math.floor(origWidth / yFactor);
    }
    dojo.style(img, 'marginLeft', Math.floor((imageWidth - img.width) / 2) + 'px');
    dojo.style(img, 'marginTop', Math.floor((imageHeight - img.height) / 2) + 'px');
};

window.imageviewer_preloadImage = function(elemId, ii) {
    var iv = eval('window.' + elemId + '_object');
    if (ii > iv.images.length - 1) {
        ii = 0;
    }
    if (ii < 0) {
        ii = iv.images.length - 1;
    }
    if (!iv.preloadedImages) {
        iv.preloadedImages = new Object();
    }
    if (!iv.preloadedImages[ii]) {
        iv.preloadedImages[ii] = new Image();
        iv.preloadedImages[ii].src = iv.images[ii];
    }
};

window.imageviewer_toggleFullscreen = function(elemId) {
    var iv = eval('window.' + elemId + '_object');
    iv.fullscreen = !iv.fullscreen;
    if (iv.fullscreen) {
        // switch to fullscreen mode
        dojo.removeClass(dojo.byId(elemId), 'imageviewerNonFullscreen');
        dojo.addClass(dojo.byId(elemId), 'imageviewerFullscreen');
        dojo.style(dojo.body(), 'overflow', 'hidden');
        window.scrollTo(0, 0);
        var viewportWidth = dijit.getViewport().w;
        var viewportHeight = dijit.getViewport().h;
        var imageWidth = viewportWidth - iv.imagewidthOffset;
        var imageHeight = viewportHeight - iv.imageheightOffset;
        iv.nonFullscreenWidth = dojo.style(elemId, 'width');
        iv.nonFullscreenHeigh = dojo.style(elemId, 'height');
        iv.nonFullscreenParentNode = dojo.byId(elemId).parentNode;
        dojo.place(elemId, dojo.body(), 'first');
        dojo.style(elemId, 'position', 'absolute');
        dojo.style(elemId, 'zIndex', '1195');
        dojo.style(elemId, 'left', '0px');
        dojo.style(elemId, 'top', '0px');
        dojo.style(elemId, 'width', viewportWidth + 'px');
        dojo.style(elemId, 'height', viewportHeight + 'px');
        dojo.style(elemId + '_imageviewerScreen', 'width', imageWidth + 'px');
        dojo.style(elemId + '_imageviewerScreen', 'height', imageHeight + 'px');
        dojo.style(elemId + '_imageviewerImageContainer1', 'width', imageWidth + 'px');
        dojo.style(elemId + '_imageviewerImageContainer1', 'height', imageHeight + 'px');
        dojo.style(elemId + '_imageviewerImageContainer2', 'width', imageWidth + 'px');
        dojo.style(elemId + '_imageviewerImageContainer2', 'height', imageHeight + 'px');
        dojo.style(elemId + '_imageviewerPrevNextContainer', 'width', imageWidth + 'px')
    } else {
        // switch to non-fullscreen mode
        dojo.removeClass(dojo.byId(elemId), 'imageviewerFullscreen');
        dojo.addClass(dojo.byId(elemId), 'imageviewerNonFullscreen');
        dojo.style(dojo.body(), 'overflow', '');
        window.scrollTo(0, 0);
        var imageWidth = iv.imagewidth;
        var imageHeight = iv.imageheight;
        dojo.place(elemId, iv.nonFullscreenParentNode, 'first');
        dojo.style(elemId, 'position', '');
        dojo.style(elemId, 'zIndex', '');
        dojo.style(elemId, 'left', '');
        dojo.style(elemId, 'top', '');
        dojo.style(elemId, 'width', iv.nonFullscreenWidth + 'px');
        dojo.style(elemId, 'height', iv.nonFullscreenHeigh + 'px');
        dojo.style(elemId + '_imageviewerScreen', 'width', imageWidth + 'px');
        dojo.style(elemId + '_imageviewerScreen', 'height', imageHeight + 'px');
        dojo.style(elemId + '_imageviewerImageContainer1', 'width', imageWidth + 'px');
        dojo.style(elemId + '_imageviewerImageContainer1', 'height', imageHeight + 'px');
        dojo.style(elemId + '_imageviewerImageContainer2', 'width', imageWidth + 'px');
        dojo.style(elemId + '_imageviewerImageContainer2', 'height', imageHeight + 'px');
        dojo.style(elemId + '_imageviewerPrevNextContainer', 'width', imageWidth + 'px')
    }
    imageviewer_gotoImage(elemId, iv.currentIi);
    imageviewer_gotoImage(elemId, iv.currentIi);
};



/* END OF INCLUDED FILE '/modules/usability/js/imageviewer.js' */



/* BEGIN OF INCLUDED FILE '/modules/usability/js/seitbox_dijit_Paging.js' */


////
//// Paging dijit, used by PagingViewElement
////
if (window.dojo) {
    dojo.provide("seitbox.dijit.Paging");
    dojo.require("dijit.Declaration");
    dojo.require("dojo.parser");
    dojo.require("dijit._Widget");
    dojo.require("dijit._Templated");
    dojo.declare(
	    "seitbox.dijit.Paging",
	    [dijit._Widget, dijit._Templated],
	    {	    
            // summary: A paging dijit
            //
            // description: A simple paging dijit for navigating between
            //       pages from 1 to n. 
            //
			text: '',
			rowsPerPage: 10,
			numPages: 0,
			numRows: 0,
			currentPageI: 0,
			onChangePage: '',
            templateString: '<div class="seitboxDijitPaging">${text}<div class="seitboxDijitPagingSummary">SUM</div><div class="seitboxDijitPagingLinks">LINKS</div></div>',
            templatePath: null,
            postCreate: function(){
	            this.inherited(arguments);
	            this.refreshPagingLinks();
	        },
            setRowsPerPage: function(rowsPerPage) {
                this.rowsPerPage = rowsPerPage;
                this.refreshPagingLinks();
            },
            setNumRows: function(numRows) {
                this.numRows = numRows;
                this.refreshPagingLinks();
            },            
            setCurrentPageI: function(currentPageI) {
                this.currentPageI = currentPageI;
                this.refreshPagingLinks();
                var offset = this.currentPageI * this.rowsPerPage;
                var currentPage = currentPageI + 1;
                if (this.onChangePage != null && this.onChangePage != '') {
                    var js = this.onChangePage;
                    js = js.replace(/\${offset}/, offset);
                    js = js.replace(/\${pageI}/, currentPageI);
                    js = js.replace(/\${page}/, currentPage);
                    eval(js);
                } 
            },
            setCurrentPage: function(currentPage) {
                var currentPageI = currentPage - 1;
                this.setCurrentPageI(currentPageI);
            },
            refreshPagingLinks: function() {
                var currentPageN = this.currentPageI + 1;
                var numPages = Math.ceil(this.numRows / this.rowsPerPage);
                this.numPages = numPages;
                // generate paging links
                var pagingLinks = '';
                for(var pageI=0; pageI<numPages; pageI++) {
                    var pageN = pageI + 1;
                    pagingLinks += '<a class="seitboxDijitPagingLink'+(this.currentPageI==pageI ? ' seitboxDijitPagingLinkSelected' : '')+'" href="#page'+pageN+'" onclick="'+this.id+'.setCurrentPageI('+pageI+'); return false;">'+pageN+'</a> ';
                }
                // update paging links
                var pagingLinksContainers = dojo.query('div.seitboxDijitPagingLinks', this.domNode);
                dojo.forEach(pagingLinksContainers, function(elem){
                    elem.innerHTML = pagingLinks;
                });
                // update summary
                var summaryContainers = dojo.query('div.seitboxDijitPagingSummary', this.domNode);
                dojo.forEach(summaryContainers, function(elem){
                    elem.innerHTML = 'Seite ' + currentPageN + '/' + numPages;
                });
            }
	    }  
    );
}

/* END OF INCLUDED FILE '/modules/usability/js/seitbox_dijit_Paging.js' */



/* BEGIN OF INCLUDED FILE '/modules/usability/js/seitbox_dijit_form_DndImageMulti.js' */


////
//// DndImageMulti dijit
////
if (window.dojo) {
    dojo.provide("seitbox.dijit.form.DndImageMulti");
    dojo.require("dijit.Declaration");
    dojo.require("dojo.parser");
    dojo.require("dijit._Widget");
    dojo.require("dijit._Templated");
    dojo.declare(
	    "seitbox.dijit.form.DndImageMulti",
	    [dijit._Widget, dijit._Templated],
	    {	    
            // summary: A dnd image drop area for multiple images
            //
            // description: A dnd image drop area which can be used like a standard form field and supports multiple images.
            //
	    	name: '',
			value: '',
			content: '',
            templateString: '<div class="seitboxDijitDndImageMulti dijitInlineTable"><input type="hidden" id="${id}_input" name="${name}" value="${value}" /><div dojoType="dojo.dnd.Source" accept="dndimg" id="${id}_dnd" jsId="${id}_dnd" class="dndContainer backenddndtarget"></div><div dojoType="dojo.dnd.Source" accept="dndimg" id="${id}_trash" jsId="${id}_trash" class="dndContainer backenddndtrash"></div></div>',
            templatePath: null,
            postCreate: function(){
	    		this._initContent();
	    		dojo.parser.parse(this.id);
	    		dojo.connect(eval(this.id + '_dnd'), 'onDropInternal', dojo.hitch(this, function(evt){
	    			this._updateValue();
	    		}));
	    		dojo.connect(eval(this.id + '_dnd'), 'onDropExternal', dojo.hitch(this, function(evt){
	    			this._updateValue();
	    		}));
	    		dojo.connect(eval(this.id + '_trash'), 'onDropExternal', dojo.hitch(this, function(evt){
	    			this._updateValue();
	    		}));
                dojo.connect(dojo.byId(this.id+'_dnd'), 'ondblclick', dojo.hitch(this, function(evt){
                    this._openImageProperties(evt);
                }));	    		
                dojo.connect(dojo.byId(this.id+'_dnd'), 'oncontextmenu', dojo.hitch(this, function(evt){
                    this._openMenu(evt);
                }));
	    	},   	
	    	_initContent: function(){
	    		var newContent = '';
	    		var value = this.value;
	    		var images = value.split(",");
	    		for(var i=0; i<images.length; i++) {
	    			var imgSrc = images[i];
	    			if (imgSrc && imgSrc != '') {
	    				newContent += '<img src="' + imgSrc + '" class="dojoDndItem dndimg" dndType="dndimg" alt="Image" border="0" />';
	    			}
	    		}
	    		dojo.byId(this.id+'_dnd').innerHTML = newContent;
	    	},
	    	_updateValue: function() {
	    		var newValue = '';
	    		var inputElem = dojo.byId(this.id + '_input');
	            var containerElem = document.getElementById(this.id + '_dnd');
	            var containerImages = dojo.query("img", containerElem);
	            for(var i=0; i<containerImages.length; i++) {
	                var imgNode = containerImages[i];
	                if (imgNode.src && imgNode.src != '') {
	                    if (newValue != '') {
	                        newValue += ',';
	                    }
	                    var isDndimgThumb = dojo.hasClass(imgNode, 'dndimgThumb');
	                    newValue += this._filterValue(imgNode.src, isDndimgThumb);
	                }
	            }
	    		inputElem.value = newValue;
	    		this.value = newValue;
	    		// update dnd container innerHtml
	    		this._initContent();
	    		// call sync
	    		eval(this.id + '_dnd').sync();
	    	},
	    	_filterValue: function(val, isDndimgThumb) {
	    		val = new String(val);
	    		var beginIndex = val.indexOf('/media/');
	    		if (beginIndex != -1){
	    			val = val.substr(beginIndex);
	    		}
	    		if (isDndimgThumb) { // filter away _image_scaler_ if this is a thumbnail 
    	    		var endIndex = val.indexOf('_image_scaler_');
                    if (endIndex != -1){
                        val = val.substr(0, endIndex);
                    }
	    		}
	    		return val;
	    	},
	    	_openImageProperties: function(e) {
                if (!e.target || (!dojo.hasClass(e.target, 'dndimgThumb') && !dojo.hasClass(e.target, 'dndimg'))) {
                    return;
                } else {
                    var imgSrc = backend_media_normalizeImagePath(e.target.src);
                    backend_media_showImagesPopupProperties(imgSrc);
                }
	    	},
            _openMenu: function(evt) {
                var imgContextMenu = dijit.byId('imgContextMenuForDndImage');
                if (imgContextMenu) {
                    imgContextMenu._openMyself(evt);
                }
            }	    	
	    }  
    );
}

/* END OF INCLUDED FILE '/modules/usability/js/seitbox_dijit_form_DndImageMulti.js' */



/* BEGIN OF INCLUDED FILE '/modules/usability/js/seitbox_dijit_form_DndFile.js' */


////
//// DndFile dijit
////
if (window.dojo) {
    dojo.provide("seitbox.dijit.form.DndFile");
    dojo.require("dijit.Declaration");
    dojo.require("dojo.parser");
    dojo.require("dijit._Widget");
    dojo.require("dijit._Templated");
    dojo.declare(
	    "seitbox.dijit.form.DndFile",
	    [dijit._Widget, dijit._Templated],
	    {	    
            // summary: A dnd file drop area
            //
            // description: A dnd file drop area which can be used like a standard form field.
            //
	    	name: '',
			value: '',
            templateString: '<div class="seitboxDijitDndFile dijitInlineTable"><input type="hidden" id="${id}_input" name="${name}" value="${value}" /><div dojoType="dojo.dnd.Source" accept="dndfile" id="${id}_dnd" jsId="${id}_dnd" class="dndContainer backenddndtarget"></div><div dojoType="dojo.dnd.Source" accept="dndfile" id="${id}_trash" jsId="${id}_trash" class="dndContainer backenddndtrash"></div></div>',
            templatePath: null,
            _content: null,
            postCreate: function(){
	    		dojo.parser.parse(this.id);
	    		this._initCreator();
	    		this._setValue(this.value);
	    		dojo.connect(eval(this.id + '_dnd'), 'onDropExternal', dojo.hitch(this, function(evt){
	    			var newValue = '';
	    			if (evt.getSelectedNodes) {
		    			var selectedNodes = evt.getSelectedNodes();
		    			if (selectedNodes && selectedNodes.length) {
			                if (selectedNodes.length > 0) {
			                	selectedNode = selectedNodes[0];
			                    if (selectedNode.href && selectedNode.href != ''){
			                    	newValue = selectedNode.href;
			                    } else {
			                        selectedNodeLinks = dojo.query('a', selectedNode);
			                        if (selectedNodeLinks[0] && selectedNodeLinks[0].href && selectedNodeLinks[0].href != '') {
			                            newValue = selectedNodeLinks[0].href;
			                        }
			                    }
			                }
		    			}
	    			}
	                this._setValue(newValue);
	    		}));
	    		dojo.connect(eval(this.id + '_trash'), 'onDropExternal', dojo.hitch(this, function(evt){
	    			var newValue = '';
	    			this._setValue(newValue);
	    		}));	
	    	},
	    	_initCreator: function() {
	    		var dndSource = eval(this.id + '_dnd');
	    		dndSource.creator = this._creator;
	    		var dndTrash = eval(this.id + '_trash');
	    		dndTrash.creator = this._creator;
	    	},
	    	_creator: function(item, hint) {
				var type = ["dndfile"];
				var val = item.href;
				var node = dojo.doc.createElement("a");
				//node.id = dojo.dnd.getUniqueId(); // DON'T SET AN ID, THIS WILL NOT WORK WHEN LATER DRAGGING THE DROPPED ITEM TO TRASH
				node.href = val;
				node.alt = val;
				node.title = val;
				node.innerHTML = val;
				dojo.addClass(node, "dojoDndItem");
				dojo.addClass(node, "dndfile");
				return {node: node, data: item, type: type};
	    	},
	    	_setValue: function(val) {
	    		var dndSource = eval(this.id + '_dnd');
	    		val = this._filterValue(val);
	    		// remove all nodes
	    		dndSource.selectAll();
	    		dndSource.deleteSelectedNodes();
	    		// insert new node
	    		if (val != '') {
		    		var newItem = {href:val};
		    		dndSource.insertNodes(false, [newItem]);
	    		}
	    		// set input value
	    		dojo.byId(this.id + '_input').value = val;
	    		this.value = val;
	    	},
	    	_filterValue: function(val) {
	    		val = new String(val);
	    		var beginIndex = val.indexOf('/media/');
	    		if (beginIndex != -1){
	    			val = val.substr(beginIndex);
	    		}
	    		return val;
	    	}
	    }  
    );
}

/* END OF INCLUDED FILE '/modules/usability/js/seitbox_dijit_form_DndFile.js' */



/* BEGIN OF INCLUDED FILE '/modules/usability/js/seitbox_dojox_image_LightboxNanoMultiMedia.js' */


////
//// LightboxNanoMultiMedia
////
//// A modified version of LightboxNano which supports multiple media types, like .swf or .flv.
////
if (window.dojo) {
    
    if(!dojo._hasResource["seitbox.dojox.image.LightboxNanoMultiMedia"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
        dojo._hasResource["seitbox.dojox.image.LightboxNanoMultiMedia"] = true;
        dojo.provide("seitbox.dojox.image.LightboxNanoMultiMedia");
        dojo.require("dojo.fx");

        (function(d){

            var getViewport = function(){
                    //  summary: Returns the dimensions and scroll position of the viewable area of a browser window
                    var scrollRoot = (d.doc.compatMode == "BackCompat") ? d.body() : d.doc.documentElement,
                        scroll = dojo._docScroll();
                    return { w: scrollRoot.clientWidth, h: scrollRoot.clientHeight, l: scroll.x, t: scroll.y };
                };
                
            var abs = "absolute";
    
            d.declare("seitbox.dojox.image.LightboxNanoMultiMedia", null, {
                //  summary:
                //      A simple "nano" version of the lightbox. 
                //
                //  description:
                //      Very lightweight lightbox which only displays a larger image.  There is
                //      no support for a caption or description.  The lightbox can be closed by
                //      clicking any where or pressing any key.  This widget is intended to be
                //      used on <a> and <img> tags.  Upon creation, if the domNode is <img> tag,
                //      then it is wrapped in an <a> tag, then a <div class="enlarge"> is placed
                //      inside the <a> and can be styled to display an icon that the original
                //      can be enlarged.
                //
                //  example:
                //  |   <a dojoType="seitbox.dojox.image.LightboxNanoMultiMedia" href="/path/to/largeimage.jpg"><img src="/path/to/thumbnail.jpg"></a>
                //
                //  example:
                //  |   <img dojoType="seitbox.dojox.image.LightboxNanoMultiMedia" src="/path/to/thumbnail.jpg" href="/path/to/largeimage.jpg">
    
                //  href: string
                //      URL to the large image to show in the lightbox.
                href: "",
    
                //  duration: int
                //      The delay in milliseconds of the LightboxNano open and close animation.
                duration: 500,
    
                //  preloadDelay: int
                //      The delay in milliseconds after the LightboxNano is created before preloading the larger image.
                preloadDelay: 5000,
    
                constructor: function(p, n){
                    // summary: Initializes the DOM node and connect onload event
                    var _this = this;
    
                    d.mixin(_this, p);
                    n = dojo.byId(n);
    
                    if(!/a/i.test(n.tagName)){
                        var a = d.create("a", { href: _this.href, "class": n.className }, n, "after");
                        n.className = "";
                        a.appendChild(n);
                        n = a;
                    }
    
                    d.style(n, {
                        display: "block",
                        position: "relative"
                    });
                    _this._createDiv("dojoxEnlarge", n);
    
                    _this._node = n;
                    d.setSelectable(n, false);
                    _this._onClickEvt = d.connect(n, "onclick", _this, "_load");
    
                    setTimeout(function(){
                        (new Image()).src = _this.href;
                        _this._hideLoading();
                    }, _this.preloadDelay);
                },
    
                destroy: function(){
                    // summary: Destroys the LightboxNano and it's DOM node
                    var a = this._connects || [];
                    a.push(this._onClickEvt);
                    d.forEach(a, d.disconnect);
                    d.destroy(this._node);
                },
    
                _createDiv: function(/*String*/cssClass, /*DomNode*/refNode, /*boolean*/display){
                    // summary: Creates a div for the enlarge icon and loading indicator layers
                    return d.create("div", { "class": cssClass, style: { position: abs, display: display ? "" : "none" } }, refNode); // DomNode
                },
                
                _load: function(/*Event*/e){
                    // summary: Creates the large image and begins to show it
                    var _this = this;
    
                    d.stopEvent(e);
    
                    if(!_this._loading){
                        _this._loading = true;
                        _this._reset();
    
                        var n = d.query("img", _this._node)[0],
                            a = d._abs(n, true),
                            c = d.contentBox(n),
                            b = d._getBorderExtents(n),
                            m = _this._createMediaNode(),
                            ln = _this._loadingNode;
    
                        if(ln == null){
                            _this._loadingNode = ln = _this._createDiv("dojoxLoading", _this._node, true)
                            var l = d.marginBox(ln);
                            d.style(ln, {
                                left: parseInt((c.w - l.w) / 2) + "px",
                                top: parseInt((c.h - l.h) / 2) + "px"
                            });
                        }
    
                        c.x = a.x - 10 + b.l;
                        c.y = a.y - 10 + b.t;
                        _this._start = c;
    
                        _this._connects = [d.connect(m, "onload", _this, "_show")];
    
                        _this._loadMedia();
                    }
                },
                
                _createMediaNode: function() {
                    var _this = this;
                    _this._mediaNode = d.create("img", {
                        style: {
                            visibility: "hidden",
                            cursor: "pointer",
                            position: abs,
                            top: 0,
                            left: 0,
                            zIndex: 9999999
                        }
                    }, d.body());
                    return _this._mediaNode;
                },
                
                _loadMedia: function() {
                    var _this = this;
                    _this._mediaNode.src = _this.href;
                },
    
                _hideLoading: function(){
                    // summary: Hides the animated loading indicator
                    if(this._loadingNode){
                        d.style(this._loadingNode, "display", "none");
                    }
                    this._loadingNode = false;
                },
    
                _show: function(){
                    // summary: The image is now loaded, calculate size and display
                    var _this = this,
                        vp = getViewport(),
                        w = _this._mediaNode.width,
                        h = _this._mediaNode.height,
                        vpw = parseInt((vp.w - 20) * 0.9),
                        vph = parseInt((vp.h - 20) * 0.9),
                        dd = d.doc,
                        bg = _this._bg = d.create("div", {
                            style: {
                                backgroundColor: "#000",
                                opacity: 0.0,
                                position: abs,
                                zIndex: 9999998
                            }
                        }, d.body()),
                        ln = _this._loadingNode;
    
                    if(_this._loadingNode){
                        _this._hideLoading();
                    }
                    d.style(_this._mediaNode, {
                        border: "10px solid #fff",
                        visibility: "visible"
                    });
                    d.style(_this._node, "visibility", "hidden");
    
                    _this._loading = false;
    
                    _this._connects = _this._connects.concat([
                        d.connect(dd, "onmousedown", _this, "_hide"),
                        d.connect(dd, "onkeypress", _this, "_key"),
                        d.connect(window, "onresize", _this, "_sizeBg")
                    ]);
    
                    if(w > vpw){
                        h = h * vpw / w;
                        w = vpw;
                    }
                    if(h > vph){
                        w = w * vph / h;
                        h = vph;
                    }
    
                    _this._end = {
                        x: (vp.w - 20 - w) / 2 + vp.l,
                        y: (vp.h - 20 - h) / 2 + vp.t,
                        w: w,
                        h: h
                    };
    
                    _this._sizeBg();
    
                    d.fx.combine([
                        _this._anim(_this._mediaNode, _this._coords(_this._start, _this._end)),
                        _this._anim(bg, { opacity: 0.5 })
                    ]).play();
                },
    
                _sizeBg: function(){
                    // summary: Resize the background to fill the page
                    var dd = d.doc.documentElement;
                    d.style(this._bg, {
                        top: 0,
                        left: 0,
                        width: dd.scrollWidth + "px",
                        height: dd.scrollHeight + "px"
                    });
                },
    
                _key: function(/*Event*/e){
                    // summary: A key was pressed, so hide the lightbox
                    d.stopEvent(e);
                    this._hide();
                },
    
                _coords: function(/*Object*/s, /*Object*/e){
                    // summary: Returns animation parameters with the start and end coords
                    return {
                        left:   { start: s.x, end: e.x },
                        top:    { start: s.y, end: e.y },
                        width:  { start: s.w, end: e.w },
                        height: { start: s.h, end: e.h }
                    }; // object
                },
    
                _hide: function(){
                    // summary: Closes the lightbox
                    var _this = this;
                    d.forEach(_this._connects, d.disconnect);
                    _this._connects = [];
                    d.fx.combine([
                        _this._anim(_this._mediaNode, _this._coords(_this._end, _this._start), "_reset"),
                        _this._anim(_this._bg, {opacity:0})
                    ]).play();
                },
    
                _reset: function(){
                    // summary: Destroys the lightbox
                    d.style(this._node, "visibility", "visible");
                    d.forEach([this._mediaNode, this._bg], function(n){
                        d.destroy(n);
                        n = null;
                    });
                    this._node.focus();
                },
    
                _anim: function(node, args, onEnd){
                    // summary: Creates the lightbox open/close and background fadein/out animations
                    return d.animateProperty({
                        node: node,
                        duration: this.duration,
                        properties: args,
                        onEnd: onEnd ? d.hitch(this, onEnd) : null
                    }); // object
                }
            });
    
        })(dojo);

    }
    
}
    
    


/* END OF INCLUDED FILE '/modules/usability/js/seitbox_dojox_image_LightboxNanoMultiMedia.js' */



/* BEGIN OF INCLUDED FILE '/modules/usability/js/seitbox_dijit_form_DndImage.js' */


////
//// DndImage dijit
////
if (window.dojo) {
    dojo.provide("seitbox.dijit.form.DndImage");
    dojo.require("dijit.Declaration");
    dojo.require("dojo.parser");
    dojo.require("dijit._Widget");
    dojo.require("dijit._Templated");
    dojo.declare(
        "seitbox.dijit.form.DndImage",
        [dijit._Widget, dijit._Templated],
        {       
            // summary: A dnd image drop area for an image
            //
            // description: A dnd image drop area which can be used like a standard form field
            //
            name: '',
            value: '',
            content: '',
            templateString: '<div class="seitboxDijitDndImage dijitInlineTable"><input type="hidden" id="${id}_input" name="${name}" value="${value}" /><div dojoType="dojo.dnd.Source" accept="dndimg" id="${id}_dnd" jsId="${id}_dnd" class="dndContainer backenddndtarget"></div><div dojoType="dojo.dnd.Source" accept="dndimg" id="${id}_trash" jsId="${id}_trash" class="dndContainer backenddndtrash"></div></div>',
            templatePath: null,
            postCreate: function(){
                this._initContent();
                dojo.parser.parse(this.id);
                dojo.connect(eval(this.id + '_dnd'), 'onDropInternal', dojo.hitch(this, function(evt){
                    this._updateValue();
                }));
                dojo.connect(eval(this.id + '_dnd'), 'onDropExternal', dojo.hitch(this, function(evt){
                    this._updateValue();
                }));
                dojo.connect(eval(this.id + '_trash'), 'onDropExternal', dojo.hitch(this, function(evt){
                    this._updateValue();
                }));
                dojo.connect(dojo.byId(this.id+'_dnd'), 'ondblclick', dojo.hitch(this, function(evt){
                    this._openImageProperties(evt);
                }));
                dojo.connect(dojo.byId(this.id+'_dnd'), 'oncontextmenu', dojo.hitch(this, function(evt){
                    this._openMenu(evt);
                }));
            },      
            _initContent: function(){
                var newContent = '';
                var value = this.value;
                var imgSrc = value;
                if (imgSrc && imgSrc != '') {
                    newContent += '<img src="' + imgSrc + '" class="dojoDndItem dndimg" dndType="dndimg" alt="Image" border="0" />';
                }
                dojo.byId(this.id+'_dnd').innerHTML = newContent;
            },
            _updateValue: function() {
                var inputElem = dojo.byId(this.id + '_input');
                var containerElem = document.getElementById(this.id + '_dnd');
                var containerImages = dojo.query("img", containerElem);
                if (containerImages.length == 0) {
                    var newValue = '';
                    inputElem.value = newValue;
                    this.value = newValue;
                } else {
                    var oldValue = this.value;
                    for(var i=0; i<containerImages.length; i++) {
                        var imgNode = containerImages[i];
                        if (imgNode.src && imgNode.src != '') {
                            var isDndimgThumb = dojo.hasClass(imgNode, 'dndimgThumb');
                            var newValue = this._filterValue(imgNode.src, isDndimgThumb);
                            if (newValue != oldValue) { // only accept new values (this way it is possible to replace existing images, by dropping a new image before or after the existing image)
                                inputElem.value = newValue;
                                this.value = newValue;
                            }
                        }
                    }
                }
                // update dnd container innerHtml
                this._initContent();
                // call sync
                eval(this.id + '_dnd').sync();
            },
            _filterValue: function(val, isDndimgThumb) {
                val = new String(val);
                var beginIndex = val.indexOf('/media/');
                if (beginIndex != -1){
                    val = val.substr(beginIndex);
                }
                if (isDndimgThumb) { // filter away _image_scaler_ if this is a thumbnail 
                    var endIndex = val.indexOf('_image_scaler_');
                    if (endIndex != -1){
                        val = val.substr(0, endIndex);
                    }
                }
                return val;
            },
            _openImageProperties: function(e) {
                if (!e.target || (!dojo.hasClass(e.target, 'dndimgThumb') && !dojo.hasClass(e.target, 'dndimg'))) {
                    return;
                } else {
                    var imgSrc = backend_media_normalizeImagePath(e.target.src);
                    backend_media_showImagesPopupProperties(imgSrc);
                }
            },
            _openMenu: function(evt) {
                var imgContextMenu = dijit.byId('imgContextMenuForDndImage');
                if (imgContextMenu) {
                    imgContextMenu._openMyself(evt);
                }
            }           
        }  
    );
}

/* END OF INCLUDED FILE '/modules/usability/js/seitbox_dijit_form_DndImage.js' */



/* BEGIN OF INCLUDED FILE '/modules/usability/js/seitbox_dijit_form_ValidationTextBox.js' */

////
//// ValidationTextBox dijit
////
//// A validation text box, that also shows the invalid message if the text box is currently empty and focused.
////
if (window.dojo) {
    dojo.provide("seitbox.dijit.form.ValidationTextBox");
    dojo.require("dijit.form.ValidationTextBox");
    dojo.declare(
        "seitbox.dijit.form.ValidationTextBox",
        [dijit.form.ValidationTextBox],
        {
        
            validate: function(/*Boolean*/ isFocused){
                // summary:
                //      Called by oninit, onblur, and onkeypress.
                // description:
                //      Show missing or invalid messages if appropriate, and highlight textbox field.
                // tags:
                //      protected
                var message = "";
                var isValid = this.disabled || this.isValid(isFocused);
                if(isValid){ this._maskValidSubsetError = true; }
                var isValidSubset = !isValid && isFocused && this._isValidSubset();
                var isEmpty = this._isEmpty(this.textbox.value);
                if(isEmpty){ this._maskValidSubsetError = true; }
                if(isEmpty && this.required) { // added by seitwerk
                    this._maskValidSubsetError = false;
                }
                this.state = (isValid || (!this._hasBeenBlurred && isEmpty) || isValidSubset) ? "" : "Error";
                if(this.state == "Error"){ this._maskValidSubsetError = false; }
                this._setStateClass();
                dijit.setWaiState(this.focusNode, "invalid", isValid ? "false" : "true");
                if(isFocused){
                    if(isEmpty){
                        message = this.getPromptMessage(true);
                    }
                    if(!message && (this.state == "Error" || (isValidSubset && !this._maskValidSubsetError))){
                        message = this.getErrorMessage(true);
                    }
                }
                /*
                if ((!message || message == "") && isEmpty && this.required) { // added by seitwerk, we want to have an error message for empty text boxes
                    console.log("xx");
                    message = "fffffhallo";
                }
                */
                this.displayMessage(message);
                return isValid;
            },
            
            displayMessage: function(/*String*/ message){
                // summary:
                //      Overridable method to display validation errors/hints.
                //      By default uses a tooltip.
                // tags:
                //      extension
                if(this._message == message){ return; }
                this._message = message;
                dijit.hideTooltip(this.domNode);
                if(message){
                    dijit.showTooltip(message, this.domNode, this.tooltipPosition);
                }
            }

        }
    );
}

/* END OF INCLUDED FILE '/modules/usability/js/seitbox_dijit_form_ValidationTextBox.js' */



/* BEGIN OF INCLUDED FILE '/modules/usability/js/seitbox_dijit_Chichiupload.js' */


////
//// Chichiupload dijit
////
if (window.dojo) {
    ////
    //// seitbox.dojox.embed.Flas
    ////
    dojo.provide("seitbox.dojox.embed.Flash");
    dojo.require("dojox.embed.Flash");
    dojo.declare(
        "seitbox.dojox.embed.Flash",
        [dojox.embed.Flash],
        {
            init: function(/* dojox.embed.__flashArgs */kwArgs, /* DOMNode? */node){
                //  summary
                //      Initialize (i.e. place and load) the movie based on kwArgs.
                this.destroy();     //  ensure we are clean first.
                node = node || this.domNode;
                if(!node){ throw new Error("dojox.embed.Flash: no domNode reference has been passed."); }
    
                this._poller = null;
                this._pollCount = 0, this._pollMax = 250;
                if(dojox.embed.Flash.initialized){
                    this.id = dojox.embed.Flash.place(kwArgs, node);
                    this.domNode = node;
                    setTimeout(dojo.hitch(this, function(){
                        this.movie = (dojo.isIE)?dojo.byId(this.id):document[this.id];
                        this.onReady(this.movie);
    
                        this._poller = setInterval(dojo.hitch(this, function(){
                            if(!this._percentLoadedWarningThrown && (!this.movie || !this.movie.PercentLoaded)) {
                                this._percentLoadedWarningThrown = true;
                                console.log("seitbox.dojox.embed.Flash: WARNING: this.movie.PercentLoaded is not a function: id=",this.id);
                            }
                            if((this.movie && this.movie.PercentLoaded && this.movie.PercentLoaded() == 100) || this._pollCount++ > this._pollMax){
                                clearInterval(this._poller);
                                delete this._poller;
                                delete this._pollCount;
                                delete this._pollMax;
                                console.log("seitbox.dojox.embed.Flash: calling this.onLoad(): id=",this.id," movie=",this.movie);
                                this.onLoad(this.movie);
                            }
                        }), 20);
                    }), 1);
                }
            }
        }
    );    
    
    ////
    //// seitbox.dijit.Chichiupload
    ////    
    dojo.provide("seitbox.dijit.Chichiupload");
    dojo.require("dijit.Declaration");
    dojo.require("dojo.parser");
    dojo.require("dijit.form.Button");
    dojo.require("dijit.ProgressBar");
    dojo.require("seitbox.dojox.embed.Flash");
    dojo.declare(
        "seitbox.dijit.Chichiupload",
        [dijit.form.Button],
        {
            statusNode: null,
            flashNode: null,
            flashObject: null,
            flashMovie: null,
            url: '',
            onComplete: '',
            _chichiFiles: null,
            _chichiTotalBytes: null,
            _chichiLoadedBytes: null,
            _chichiLoadedBytesFromCompletedFiles: null,
            _chichiProgressPercent: null,
            _swfUri: '/media/js/fancyupload_2/Swiff.Uploader.swf',
            postCreate: function(){
                // create status node
                this.statusNode = document.createElement("div");
                this.statusNode.id = this.id + "_statusNode";
                this.statusNode.className = "seitboxDijitChichiuploadStatus";
                dojo.style(this.statusNode, "display", "none");
                var html = 'Upload läuft...<br /><div style="width:200px" annotate="true" maximum="100" id="' + this.id + '_progressBar" progress="0" dojoType="dijit.ProgressBar"></div>';
                this.statusNode.innerHTML = html;
                dojo.parser.parse(this.statusNode);
                dojo.place(this.statusNode, this.button.domNode, 'after');
                // create fallback form (if flash not available)
                //   '<form id="backend_media_imagesSubdirUploadForm_'.$subDir.'" name="backend_media_imagesSubdirUploadForm_'.$subDir.'" method="post" dojoType="dijit.form.Form" enctype="multipart/form-data">'
                //   --> TODO
                // init chichi (Chichi upload)
                this.initChichi();
                // connect click
                dojo.connect(this, 'onClick', function() {
                    this.browse();
                });        
                // call inherited
                this.inherited(arguments);
            },
            initChichi: function() {
                console.log(" ===== Chichi says: Flash version detected:", dojox.embed.Flash.available);
                // create flash node
                this.flashNode = dojo.doc.createElement("div");
                dojo.style(this.flashNode, "position", "absolute");
                dojo.style(this.flashNode, "width", "100px");
                dojo.style(this.flashNode, "height", "22px");
                dojo.place(this.flashNode, this.focusNode, "before");
                // create flash object
                var args = {
                    path:this._swfUri,
                    width:'100%',
                    height:'100%',
                    params:{
                        wMode:'transparent'
                    },
                    vars:{
                        id:this.id,
                        multiple: true,
                        queued: true,
                        typeFilter: null,
                        url: this.url,
                        method: 'post',
                        data: null,
                        fieldName: this.name,
                        target: null,
                        width: '100%',
                        height: '100%',
                        callBacks: null,
                        onSelect: "dijit.byId('"+this.id+"')._onSelect",
                        onAllSelect: "dijit.byId('"+this.id+"')._onAllSelect",
                        onComplete: "dijit.byId('"+this.id+"')._onComplete",
                        onAllComplete: "dijit.byId('"+this.id+"')._onAllComplete",
                        onProgress: "dijit.byId('"+this.id+"')._onProgress",
                        onError: "dijit.byId('"+this.id+"')._onError",
                        onCancel: "dijit.byId('"+this.id+"')._onCancel"
                    }
                };
                this.flashObject = null;
                if (dojo.isFF) {
                    this.flashObject = new seitbox.dojox.embed.Flash(args, this.flashNode);
                } else {
                    this.flashObject = new dojox.embed.Flash(args, this.flashNode);
                }
                this.flashObject.onLoad = dojo.hitch(this, function(mov){
                    console.log(" ===== Chichi says: flashObject.onLoad! Yippieh!!!");
                    this.flashMovie = mov;
                })
            },
            _onSelect: function(file, index, length) {
                console.log(" ===== Chichi says: _onSelect");
            },
            _onAllSelect: function(files, current, overall) {
                console.log(" ===== Chichi says: _onAllSelect");
                console.log(" ===== Chichi says: _onAllSelect files: ", files);
                console.log(" ===== Chichi says: _onAllSelect current: ", current);
                this._chichiFiles = files;
                var totalBytes = 0;
                for(var i=0; i<files.length; i++) {
                    totalBytes += files[i].size;
                }
                this._chichiTotalBytes = totalBytes;
                this._chichiLoadedBytes = 0;
                this._chichiLoadedBytesFromCompletedFiles = 0;
                this._chichiProgressPercent = 0;
                this.upload();
            },
            _onComplete: function(file, response) {
                console.log(" ===== Chichi says: _onComplete");
                console.log(" ===== Chichi says: _onComplete file: ", file);
                this._chichiLoadedBytesFromCompletedFiles += file.size;
                this._updateProgress();
            },
            _onAllComplete: function(current) {
                console.log(" ===== Chichi says: _onAllComplete");
                dojo.style(this.statusNode, "display", "none");
                if (this.onComplete) {
                    eval(this.onComplete);
                }
            },
            _onProgress: function(file, current, overall) {
                console.log(" ===== Chichi says: _onProgress");
                console.log(" ===== Chichi says: _onProgress file: ", file);
                console.log(" ===== Chichi says: _onProgress current: ", current);
                console.log(" ===== Chichi says: _onProgress overall: ", overall);
                var bytesLoaded = parseInt(overall.bytesLoaded);
                if (!bytesLoaded || bytesLoaded == "NaN") {
                    bytesLoaded = 0;
                }
                if (bytesLoaded > this._chichiLoadedBytes) {
                    this._chichiLoadedBytes = bytesLoaded;
                }
                this._updateProgress();
            },
            _onError: function(file, error, info) {
                console.log(" ===== Chichi says: _onError");
                console.log(" ===== Chichi says: _onError file: ", file);
                console.log(" ===== Chichi says: _onError error: ", error);
                console.log(" ===== Chichi says: _onError info: ", info);
                alert("Upload failed: file="+file.name+", error="+error+", info="+info);
            },
            _onCancel: function() {
                console.log(" ===== Chichi says: _onCancel");
            },
            _updateProgress: function() {
                console.log(" ===== Chichi says: _updateProgress");
                dojo.style(this.statusNode, "display", "block");
                var totalBytes = this._chichiTotalBytes;
                var loadedBytes = this._chichiLoadedBytes;
                if (this._chichiLoadedBytesFromCompletedFiles > loadedBytes) {
                    loadedBytes = this._chichiLoadedBytesFromCompletedFiles;
                }
                var progressPercent = Math.floor((loadedBytes / totalBytes) * 100);
                if (progressPercent < 0) {
                    progressPercent = 0;
                }
                if (progressPercent > 100) {
                    progressPercent = 100;
                }
                console.log(" ===== Chichi says: _onProgress progressPercent: ", progressPercent);
                this._chichiProgressPercent = progressPercent;
                dijit.byId(this.id + '_progressBar').update({progress: progressPercent});
            },
            browse: function() {
                console.log(" ===== Chichi says: browse");
                this.flashMovie.browse();
                console.log(" ===== Chichi says: browse has been called ...");
            },
            upload: function() {
                console.log(" ===== Chichi says: upload, name="+this.name+", url="+this.url);
                var options = new Object();
                options.data = null;
                options.fieldName = this.name;
                options.method = 'post';
                options.url = this.url;
                this.flashMovie.upload(options);
                console.log(" ===== Chichi says: upload called ...");
                dojo.style(this.statusNode, "display", "block");
            },
            reposition: function() {
                console.log(" ===== Chichi says: reposition");
            },
            setUrl: function(url) {
                this.url = url;
            },
            setOnComplete: function(onComplete) {
                this.onComplete = onComplete;
            }
        }  
    );
}


/* END OF INCLUDED FILE '/modules/usability/js/seitbox_dijit_Chichiupload.js' */



/* BEGIN OF INCLUDED FILE '/modules/usability/js/seitbox_dijit_form_FileUploader.js' */

if (window.dojo) {
    dojo.provide("seitbox.dijit.form.FileUploader");
    dojo.require("dojox.form.FileUploader");
    dojo.require("dijit.ProgressBar");
    dojo.declare(
        "seitbox.dijit.form.FileUploader",
        [dojox.form.FileUploader],
        {
            
            postCreate: function(){
                // call parent method
                this.inherited(arguments);
                // update position
                this.updatePosition();
                // create status node
                this.statusNode = document.createElement("div");
                this.statusNode.id = this.id + "_statusNode";
                this.statusNode.className = "seitboxDijitChichiuploadStatus";
                dojo.style(this.statusNode, "display", "block");
                var html = 'Upload läuft...<br /><div style="width:200px" annotate="true" maximum="100" id="' + this.id + '_progressBar" progress="0" dojoType="dijit.ProgressBar"></div>';
                this.statusNode.innerHTML = html;
                dojo.parser.parse(this.statusNode);
                // add on complete for hiding progress bar
                (function(uploader) {
                    dojo.connect(uploader, "_complete", function() {
                        dojo.style(uploader.statusNode, "display", "none");
                    });
                })(this);
            },
            
            createFlashUploader: function(){
                // summary:
                //      Internal. Creates Flash Uploader
                this.uploadUrl = this.uploadUrl.toString();
                if(this.uploadUrl){
                    if(this.uploadUrl.toLowerCase().indexOf("http")<0 && this.uploadUrl.indexOf("/")!=0){
                        // Appears to be a relative path. Attempt to 
                        //  convert it to absolute, so it will better 
                        //target the SWF.
                        //
                        var loc = window.location.href.split("/");
                        loc.pop();
                        loc = loc.join("/")+"/";
                        this.uploadUrl = loc+this.uploadUrl;
                        this.log("SWF Fixed - Relative loc:", loc, " abs loc:", this.uploadUrl);
                    }
                }else{
                    //console.warn("Warning: no uploadUrl provided.");
                }
                var w = this.fhtml.nr.w;
                var h = this.fhtml.nr.h;
                
                var args = {
                    expressInstall:true,
                    path: this.swfPath.uri || this.swfPath,
                    width: w,
                    height: h,
                    allowScriptAccess:"always",
                    allowNetworking:"all",
                    vars: {
                        uploadDataFieldName: this.flashFieldName,
                        uploadUrl: this.uploadUrl,
                        uploadOnSelect: this.uploadOnChange,
                        deferredUploading:this.deferredUploading || "",
                        selectMultipleFiles: this.selectMultipleFiles,
                        id: this.id,
                        isDebug: this.isDebug,
                        devMode:this.devMode,
                        flashButton:dojox.embed.flashVars.serialize("fh", this.fhtml),
                        fileMask:dojox.embed.flashVars.serialize("fm", this.fileMask)
                    },
                    params: {
                        scale:"noscale",
                        wmode:"transparent"
                    }
                    
                };
                
                this.flashObject = new dojox.embed.Flash(args, this.insideNode);
                this.flashObject.onError = function(msg){
                    console.warn("Flash Error:", msg);
                };
                this.flashObject.onReady = dojo.hitch(this, function(){
                    //console.log("READY");
                });
                this.flashObject.onLoad = dojo.hitch(this, function(mov){
                    this.log("flashObject onload", mov)
                    this.flashMovie = mov;
                    this.flashReady = true;
                    this.onReady();
                });
                this._connectFlash();
            },            
            
            upload: function(data){
                console.log("UPLOAD STARTED");
                console.log("DOMNODE", this.domNode);
                // display progress bar
                dojo.place(this.statusNode, this.domNode, "before");
                dojo.style(this.statusNode, "display", "block");                
                // call parent method
                this.inherited(arguments);
            },
            
            onProgress: function(dataArray){
                // calculate total progress
                var allFilesProgressPercent = 0;
                for(var di=0; di<dataArray.length; di++) {
                    allFilesProgressPercent += dataArray[di].percent;
                }
                allFilesProgressPercent = Math.floor(allFilesProgressPercent / dataArray.length);
                // update progress bar
                dijit.byId(this.id + '_progressBar').update({progress: allFilesProgressPercent});
            },
            
            updatePosition: function(){
                //dojo.place(this.domNode, dojo.body(), 'first');
                //dojo.style(this.domNode, "width", "40px");
                //dojo.style(this.domNode, "height", "20px");
                //dojo.style(this.domNode, "border", "1px solid #ff0000");
                //console.log("POS", this);
                //setTimeout(dojo.hitch(this, function(){
                /*
                    if (this.button.focusNode.offsetWidth == 0) { // place flash somewhere in visible area, if button is currently invisible
                        dojo.place(this.domNode, dojo.body(), 'first');
                        dojo.style(this.domNode, "position", "absolute");
                        dojo.style(this.domNode, "width", "4px");
                        dojo.style(this.domNode, "height", "4px");
                    } else {
                        dojo.place(this.domNode, this.button.focusNode, "before");
                        dojo.style(this.domNode, "position", "absolute");
                        dojo.style(this.domNode, "width", this.button.focusNode.offsetWidth+"px");
                        dojo.style(this.domNode, "height", this.button.focusNode.offsetHeight+"px");
                    }
                */
                //}), 100);
            }
                 
        }
    );
}


/* END OF INCLUDED FILE '/modules/usability/js/seitbox_dijit_form_FileUploader.js' */



/* BEGIN OF INCLUDED FILE '/modules/usability/js/seitbox_dijit_PersistTitlePane.js' */


////
//// PersistTitlePane dijit
////
//// A title pane which supports the parameter 'persist' and stores the current
//// open state in a cookie if persist is set to true.
////
if (window.dojo) {
    dojo.provide("seitbox.dijit.PersistTitlePane");
    dojo.require("dijit.TitlePane");
    dojo.declare(
        "seitbox.dijit.PersistTitlePane",
        [dijit.TitlePane],
        {
            persist: 'true',
            postCreate: function(){
                // restore open state
                if (this.persist == "true") {
                    var cValue = dojo.cookie("seitbox.dijit.PersistTitlePane." + this.id);
                    if (cValue) {
                        console.log("RESTORE", this.open, cValue);
                        if (cValue == 'closed') {
                            this.open = false;
                        }
                        if (cValue == 'opened') {
                            this.open = true;
                        }
                    }
                }
                // call inherited
                this.inherited(arguments);
            },
            toggle: function(){
                this.inherited(arguments);
                // save open state
                if (this.persist == "true") {
                    var state = "closed";
                    if (this.open) {
                        state = "opened";
                    }
                    dojo.cookie("seitbox.dijit.PersistTitlePane." + this.id, state, {path:'/'});
                }
            }
        }  
    );
}


/* END OF INCLUDED FILE '/modules/usability/js/seitbox_dijit_PersistTitlePane.js' */



/* BEGIN OF INCLUDED FILE '/modules/usability/js/seitbox_dijit_form_DndFileMulti.js' */


////
//// DndFile dijit
////
if (window.dojo) {
    dojo.provide("seitbox.dijit.form.DndFileMulti");
    dojo.require("dijit.Declaration");
    dojo.require("dojo.parser");
    dojo.require("dijit._Widget");
    dojo.require("dijit._Templated");
    dojo.declare(
	    "seitbox.dijit.form.DndFileMulti",
	    [dijit._Widget, dijit._Templated],
	    {	    
            // summary: A dnd file drop area
            //
            // description: A dnd file drop area which can be used like a standard form field.
            //
	    	name: '',
			value: '',
            templateString: '<div class="seitboxDijitDndFileMulti dijitInlineTable"><input type="hidden" id="${id}_input" name="${name}" value="${value}" /><div dojoType="dojo.dnd.Source" accept="dndfile" id="${id}_dnd" jsId="${id}_dnd" class="dndContainer backenddndtarget"></div><div dojoType="dojo.dnd.Source" accept="dndfile" id="${id}_trash" jsId="${id}_trash" class="dndContainer backenddndtrash"></div></div>',
            templatePath: null,
            _content: null,
            postCreate: function(){
                this._initContent();
                dojo.parser.parse(this.id);
                dojo.connect(eval(this.id + '_dnd'), 'onDropInternal', dojo.hitch(this, function(evt){
                    this._updateValue();
                }));
                dojo.connect(eval(this.id + '_dnd'), 'onDropExternal', dojo.hitch(this, function(evt){
                    this._updateValue();
                }));
                dojo.connect(eval(this.id + '_trash'), 'onDropExternal', dojo.hitch(this, function(evt){
                    this._updateValue();
                }));
	    	},
            _initContent: function(){
                var newContent = '';
                var value = this.value;
                var files = value.split(",");
                for(var i=0; i<files.length; i++) {
                    var fileHref = files[i];
                    if (fileHref && fileHref != '') {
                        newContent += '<a href="' + fileHref + '" class="dojoDndItem dndfile" dndType="dndfile">' + fileHref + '</a>';
                    }
                }
                dojo.byId(this.id+'_dnd').innerHTML = newContent;
            },
            _updateValue: function() {
                var newValue = '';
                var inputElem = dojo.byId(this.id + '_input');
                var containerElem = document.getElementById(this.id + '_dnd');
                var containerFiles = dojo.query("a", containerElem);
                for(var i=0; i<containerFiles.length; i++) {
                    var fileNode = containerFiles[i];
                    if (fileNode.href && fileNode.href != '') {
                        if (newValue != '') {
                            newValue += ',';
                        }
                        newValue += this._filterValue(fileNode.href);
                    }
                }
                inputElem.value = newValue;
                this.value = newValue;
                // update dnd container innerHtml
                this._initContent();
                // call sync
                eval(this.id + '_dnd').sync();
            },
            _filterValue: function(val) {
                val = new String(val);
                var beginIndex = val.indexOf('/media/');
                if (beginIndex != -1){
                    val = val.substr(beginIndex);
                }
                return val;
            }
	    }  
    );
}

/* END OF INCLUDED FILE '/modules/usability/js/seitbox_dijit_form_DndFileMulti.js' */


