
/* FROM CACHE */


/* 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/page/js/page.js' */


function fadeClickLabel(){

}

function fadeOutClickLabel(){

}




/* END OF INCLUDED FILE '/modules/page/js/page.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_Dialog.js' */

////
//// Modified Dialog dijit which can display alert and confirm like dialogs.
////
if (window.dojo) {
    
    dojo.provide("seitbox.dijit.Dialog");
    
    dojo.require("dijit.Dialog");
    
    dojo.declare(
    	"seitbox.dijit.Dialog",
    	[dijit.Dialog, dijit._Container],
    	{
    		message: "",
    		
    		isNonmodal: false,
    		
    		type: "",
    		
    		destroyOnClose: false,
    		
    		duration: 1000,
    		
    		showAnimation: null,
    		
    		hideAnimation: null,
    		
    		hasTitleBar: true,
    		
    		_animConnections: [],
    		
    		postCreate: function(){
    			if (!this.showAnimation){
    				this.showAnimation = dojo.fadeIn({
    					node: this.domNode,
    					duration: this.duration
    				});
    			}
    			if (!this.hideAnimation){
    				this.hideAnimation = dojo.fadeOut({
    					node: this.domNode,
    					duration: this.duration
    				});
    			}
    			if (this.message){
    				this.attr("content", this.message + "<br/>");
    			}
    			if (this.type == "alert"){
    				this.addChild(new dijit.form.Button({id: this.id + "ButtonOk", type: "submit", label: this.buttonOk}), "last");
    				//this.isNonmodal = true;
    				this.hasTitleBar = false;
    				this.destroyOnClose = true;
    			}
    			if (this.type == "confirm"){
    				this.addChild(new dijit.form.Button({id: this.id + "ButtonOk", type: "submit", label: this.buttonOk}), "last");
    				this.addChild(new dijit.form.Button({id: this.id + "ButtonCancel", type: "reset", label: this.buttonCancel}), "last");
    				this.connect(dijit.byId(this.id + "ButtonCancel"), "onClick", "_abort");
    				//this.isNonmodal = true;
    				this.hasTitleBar = false;
    				this.destroyOnClose = true;
    			}
    			if (!this.hasTitleBar){
    				dojo.style(this.titleBar, "display", "none");
    			}
    			if (this.destroyOnClose){
    				this.connect(this, "onHide", function(){
    					this.destroyRecursive();
    				});
    			}
    			this.connect(this, "_setup", "_switchAnimations");
    			this.inherited(arguments);
    		},
    		
    		layout: function(){
    			if(this.domNode.style.visibility != "hidden"){
    				this._position();
    				if (!this.isNonmodal){
    					dijit._underlay.layout();
    				}
    			}
    		},
    		
    		onShow: function(){
    			dojo.style(this.domNode, {"opacity": 1});
    		},
    		
    		abort: function(){
    		},
    		
    		_abort: function(){
    			this.hide();
    			this.abort();
    		},
    		
    		_switchAnimations: function(){
    			if (this._animConnections.lenght){
    				dojo.forEach(this._animConnections, function(handles){
    					dojo.disconnect(handles[0]);
    				});
    				this._animConnections = [];
    			}
    			this._animConnections.push(this.connect(this.showAnimation, "onEnd", dojo.hitch(this, function(){
    				if(this.autofocus){
    					this._getFocusItems(this.domNode);
    					dijit.focus(this._firstFocusItem);
    				}
    			})));
    			if (!this.isNonmodal){
    				this._animConnections.push(this.connect(this.showAnimation, "beforeBegin", function(){
    					var underlay = dijit._underlay;
    					if(!underlay){
    						underlay = dijit._underlay = new dijit.DialogUnderlay(this.underlayAttrs);
    					}else{
    						underlay.attr(this.underlayAttrs);
    					}
    					var zIndex = 948 + dijit._dialogStack.length*2;
    					dojo.style(dijit._underlay.domNode, 'zIndex', zIndex);
    					dojo.style(this.domNode, 'zIndex', zIndex + 1);
    					underlay.show();
    				}));
    			}
    			this._animConnections.push(this.connect(this.hideAnimation, "onEnd", dojo.hitch(this, function(){
    				this.domNode.style.display = "none";
    				var ds = dijit._dialogStack;
    				if (!this.isNonmodal){
    					if(ds.length == 0){
    							dijit._underlay.hide();
    					}else{
    						dojo.style(dijit._underlay.domNode, 'zIndex', 948 + ds.length*2);
    						dijit._underlay.attr(ds[ds.length-1].underlayAttrs);
    					}
    				}
    				if(this.refocus){
    					var focus = this._savedFocus;
    					if(ds.length > 0){
    						var pd = ds[ds.length-1];
    						if(!dojo.isDescendant(focus.node, pd.domNode)){
    							pd._getFocusItems(pd.domNode);
    							focus = pd._firstFocusItem;
    						}
    					}
    					dijit.focus(focus);
    				}
    			})));
    			delete this._fadeIn;
    			delete this._fadeOut;
    			this._fadeIn = this.showAnimation;
    			this._fadeOut = this.hideAnimation;
    		},
    		
    		_setShowAnimationAttr: function(animation){
    			this.showAnimation = animation;
    			this._switchAnimations();
    		},
    		
    		_setHideAnimationAttr: function(animation){
    			this.hideAnimation = animation;
    			this._switchAnimations();
    		},
    		
    		_setIsNonmodalAttr: function(isNonmodal){
    			this.isNonmodal = isNonmodal;
    			this._switchAnimations();
    		},
    		
    		_setHasTitleBarAttr: function(hasTitleBar){
    			this.hasTitleBar = hasTitleBar;
    			if (hasTitleBar){
    				dojo.style(this.titleBar, "display", "block");
    			}else{
    				dojo.style(this.titleBar, "display", "none");
    			}
    		}
    	}
    );
    
}

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



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

////
//// Info icon dijit
////
if (window.dojo) {

    dojo.provide("seitbox.dijit.InfoIcon");
    
    dojo.require("seitbox.dijit.Dialog");
    dojo.require("dijit.Tooltip");
    dojo.require("dijit._Templated");
    
    dojo.declare(
    	"seitbox.dijit.InfoIcon",
    	[dijit._Widget, dijit._Templated],
    	{
    		templateString: '<div class="seitboxDijitInfoIcon dijitInline"></div>',
    		
    		dialogTitle: "INFO",
    		
    		messageTooltip: "",
    		
    		messageDialog: "",
    		
    		href: "",
    		
    		showDelay: 600,
    		
    		_tooltip: null,
    		
    		_dialog: null,
    		
    		_dialogHeight: 0,
    		
    		postCreate: function(){
    			if (this.messageTooltip != ""){
    				this._tooltip = new dijit.Tooltip({
    					connectId: [this.domNode],
    					label: this.messageTooltip,
    					showDelay: this.showDelay
    				});
    			}
    			if (this.messageDialog != ""){
    			    this.connect(this, "onClick", "_showDialog");
    			}
    			this.inherited(arguments);
    		},
    		
    		_createDialog: function(){
    		    if (this._dialog != null) {
    		        return; // already created
    		    }
                //this._dialog = new seitbox.dijit.Dialog({
    		    this._dialog = new dijit.Dialog({
                    title: this.dialogTitle
                });
                if (this.messageDialog){
                    this._dialog.attr("content", this.messageDialog);
                }
                if (this.href){
                    this._dialog.attr("href", this.href);
                }
            },
    		
    		_showDialog: function(){
                this._createDialog();
    			this._dialog.show();
    		}
    	}
    );
    
}


/* END OF INCLUDED FILE '/modules/usability/js/seitbox_dijit_InfoIcon.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_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_SwTooltip.js' */

////
//// SwTooltip dijit, providing a tooltip which can contain links, which will not hide itself when moving the mouse over it
////
if (window.dojo) {
    
    dojo.provide("seitbox.dijit.SwTooltip");
    dojo.require("dijit.Tooltip");
    
    dojo.declare(
    	"seitbox.dijit.SwTooltip",
    	dijit.Tooltip,
    	{
    		hideDelay: 1000,
    		
            postCreate: function(){
                // call parent method
                this.inherited(arguments);
            },
    		
    		
            _onHover: function(/*Event*/ e){
                // summary:
                //      Despite the name of this method, it actually handles both hover and focus
                //      events on the target node, setting a timer to show the tooltip.
                // tags:
                //      private
                // handle masterTT connects
                if(!dijit._masterTT){
                    dijit._masterTT = new dijit._MasterTooltip();
                }
                // - remove old masterTT connects (created by another SwTooltip dijit)
                if (dijit._masterTT._swTooltipOnMouseEnterConnect) {
                    dojo.disconnect(dijit._masterTT._swTooltipOnMouseEnterConnect);
                    delete dijit._masterTT._swTooltipOnMouseEnterConnect;
                }
                if (dijit._masterTT._swTooltipOnMouseLeaveConnect) {
                    dojo.disconnect(dijit._masterTT._swTooltipOnMouseLeaveConnect);
                    delete dijit._masterTT._swTooltipOnMouseLeaveConnect;
                }
                // - create masterTT connects
                dijit._masterTT._swTooltipOnMouseEnterConnect = dojo.connect(dijit._masterTT, "onMouseEnter", this, function(){
                    if (this._hideTimer){
                        window.clearTimeout(this._hideTimer);
                        delete this._hideTimer;
                    }
                });
                dijit._masterTT._swTooltipOnMouseLeaveConnect = dojo.connect(dijit._masterTT, "onMouseLeave", this, function(){
                    this._onUnHover(null);
                });
                // - show tooltip
                if (this._hideTimer){
                    window.clearTimeout(this._hideTimer);
                    delete this._hideTimer;
                }
                if(!this._showTimer){
                    var target = e.target;
                    this._showTimer = setTimeout(dojo.hitch(this, function(){this.open(target)}), this.showDelay);
                }
            },

            _onUnHover: function(/*Event*/ e){
                // summary:
                //      Despite the name of this method, it actually handles both mouseleave and blur
                //      events on the target node, hiding the tooltip.
                // tags:
                //      private

                // keep a tooltip open if the associated element still has focus (even though the
                // mouse moved away)
                if(this._focus){ return; }

                if (this._hideTimer){
                    window.clearTimeout(this._hideTimer);
                    delete this._hideTimer;
                }

                this._hideTimer = window.setTimeout(dojo.hitch(this, function() {
                    this._onUnHoverReal();
                }), this.hideDelay);
            },

            _onUnHoverReal: function(/*Event*/ e){
                // summary:
                //      Despite the name of this method, it actually handles both mouseleave and blur
                //      events on the target node, hiding the tooltip.
                // tags:
                //      private

                // keep a tooltip open if the associated element still has focus (even though the
                // mouse moved away)
                if(this._focus){ return; }

                if(this._showTimer){
                    clearTimeout(this._showTimer);
                    delete this._showTimer;
                }
                this.close();
            }
    		
    	}
    );
    
}

/* END OF INCLUDED FILE '/modules/usability/js/seitbox_dijit_SwTooltip.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_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' */



/* 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_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_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_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/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_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/headerimage/js/headerimage.js' */


// Init slideshow if first slide found
if (window.dojo) {
    dojo.addOnLoad(function(){
        if (dojo.byId('headerimageSlide0') && dojo.byId('headerimageSlide1')) { // we need at least two slides
            window.headerimage.startSlideshow();
        }
    });
}

// Create namespace
window.headerimage = new Object();

// Array containing all slide nodes
window.headerimage.DELAY = 6000;  
window.headerimage.DURATION = 750;
window.headerimage.currentOffset = 0;
window.headerimage.allSlides = new Array();

// Start slideshow
window.headerimage.startSlideshow = function() {
	var containerNode = dojo.byId("headerimageSlideshow");
    // find all slides
    window.headerimage.allSlides = dojo.query(".headerimageSlide", containerNode);
    // set the size of all slides to the size of the container, set the z-index
    for(var i=0; i<window.headerimage.allSlides.length; i++) {
    	dojo.style(window.headerimage.allSlides[i], "width", containerNode.offsetWidth+"px");
    	dojo.style(window.headerimage.allSlides[i], "height", containerNode.offsetHeight+"px");
    	dojo.style(window.headerimage.allSlides[i], "zIndex", 8);
    }
    // make all but the first slide transparent
    dojo.style(window.headerimage.allSlides[0], "opacity", 1.0);
    dojo.style(window.headerimage.allSlides[0], "visibility", "visible");
    for(var i=1; i<window.headerimage.allSlides.length; i++) {
        dojo.style(window.headerimage.allSlides[i], "opacity", 0.0);
        dojo.style(window.headerimage.allSlides[i], "visibility", "visible"); // slides are hidden when loading
    }
    // start the slideshow loop
    window.setTimeout(window.headerimage.nextSlide, window.headerimage.DELAY);
};

// Skip to next slide
window.headerimage.nextSlide = function() {
    var newOffset = window.headerimage.currentOffset + 1;
    if (newOffset >= window.headerimage.allSlides.length) {
        newOffset = 0;
    }
    window.headerimage.gotoSlide(newOffset);
    // repeat the slideshow loop forever
    window.setTimeout(window.headerimage.nextSlide, window.headerimage.DELAY);
};

// Goto given slide
window.headerimage.gotoSlide = function(newOffset) {
    var oldOffset = window.headerimage.currentOffset;
    // set z-indexes
    dojo.style("headerimageSlide"+oldOffset, "zIndex", 8);
    dojo.style("headerimageSlide"+newOffset, "zIndex", 9);
    // fade in new slide and make old slide invisible on end
    var fadeIn = dojo.animateProperty(
    	{
    		node: "headerimageSlide"+newOffset,
    		duration: window.headerimage.DURATION,
    		properties: {
    			opacity: 1.0
    		},
    		onEnd: function() {
    			dojo.style("headerimageSlide"+oldOffset, "opacity", 0.0);
    		}
    	}
    );
    fadeIn.play();
    // set current slide
    window.headerimage.currentOffset = newOffset;
};



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



/* BEGIN OF INCLUDED CUSTOM FILE '/modules/headerimage/js/headerimage_custom.js' */

window.headerimage.DELAY = 10000;  
window.headerimage.DURATION = 2500;

/* END OF INCLUDED CUSTOM FILE '/modules/headerimage/js/headerimage_custom.js' */



/* BEGIN OF INCLUDED FILE '/modules/_seitbox2/seitbox2.js' */

var currentLink;

function setCurrentLink(link){
    currentLink= link;
}

function getCurrentLink(){
    return currentLink;
}

/* END OF INCLUDED FILE '/modules/_seitbox2/seitbox2.js' */



/* BEGIN OF INCLUDED FILE '/modules/_store/store.js' */

function trim(s) {
  if(s != null){
      while (s.substring(0,1) == ' ') {
        s = s.substring(1,s.length);
      }
      while (s.substring(s.length-1,s.length) == ' ') {
        s = s.substring(0,s.length-1);
      }
  }
  return s;
}

/*
 * Erzeugt die Artikelliste fuer die Kategorie
 */
function setArtikelListe(anfrage,url){
    if (anfrage.readyState == 4) {
        if (anfrage.status == 200) {
            /* Antwort vom Server empfangen */
            var naviObj = anfrage.responseXML;
            var artikelliste = $("artikelTabelle");
            var artikel = null;
            var artikelKat = $('katBaum').value;
            //Elemente loeschen
            while(artikelliste.hasChildNodes()){
                var firstChild = artikelliste.firstChild;
                artikelliste.removeChild(firstChild);
            }
            //Alle Artikelelemente aus XML holen
            var artikelArray = naviObj.getElementsByTagName("artikel");
            var artikelTabelle = $("artikelTabelle");
            //Alle Artikel aus XML durchgehen
            for(var i=0;i<artikelArray.length;i++){
                artikel = artikelArray[i];
                //Artikeldaten aus XML holen
                var artikelNummer = artikel.getElementsByTagName("artikelnummer")[0].firstChild.nodeValue;
                var artikelName = artikel.getElementsByTagName("name")[0].firstChild.nodeValue;
                var artikelId = artikel.getElementsByTagName("id")[0].firstChild.nodeValue;
                //Tbody ist wichtig fuer IE
                var tbody = document.createElement("tbody");
                //Neue Zeile erzeugen
                var zeile = document.createElement("tr");
                //Die Spalten fuer die Artikeldaten erzeugen
                var spalteArtikelNummer = document.createElement("td");
                var spalteArtikelName = document.createElement("td");
                var spalteArtikelId = document.createElement("td");
                var spalteAdmin = document.createElement("td");
                //TextNodes fuer die Spalten erzeugen
                var spalteArtikelNummerText = document.createTextNode(artikelNummer);
                var spalteArtikelNameText = document.createTextNode(artikelName);
                var spalteArtikelIdText = document.createTextNode(artikelId);
                //Admin Funktionen
                //Edit Button
                var spalteAdminEditLink = document.createElement("a");
                spalteAdminEditLink.href = "";
                eval("spalteAdminEditLink.onclick = function(event) { startRequest('" + url + "','getArtikelInformation','artId=" + artikelId + "',editArtikel,'xml');setEditLayer(event);return false; }");

                var spalteAdminEdit = document.createElement("img");
                spalteAdminEdit.src = "/bilder/store/bearbeiten.gif";
                spalteAdminEdit.title = "Artikel bearbeiten";
                spalteAdminEdit.alt = "Artikel bearbeiten";
                spalteAdminEdit.border = 0;
                spalteAdminEditLink.appendChild(spalteAdminEdit);
                spalteAdmin.appendChild(spalteAdminEditLink);

                //Kategorie Verwaltung Button
                var spalteKatverwaltungLink = document.createElement("a");
                spalteKatverwaltungLink.href = "";
                eval("spalteKatverwaltungLink.onclick = function(event) { startRequest('" + url + "','getArtikelKatInformation','artId=" + artikelId + "',setKategorieverwaltungData,'xml');$('hiddenArtId').value = '" + artikelId + "';setKatLayer(event);return false; }");

                var spalteKatverwaltung = document.createElement("img");
                spalteKatverwaltung.src = "/bilder/store/kategorieverwaltung.gif";
                spalteKatverwaltung.title = "Kategorieverwaltung";
                spalteKatverwaltung.alt = "Kategorieverwaltung";
                spalteKatverwaltung.border = 0;
                spalteKatverwaltungLink.appendChild(spalteKatverwaltung);
                spalteAdmin.appendChild(spalteKatverwaltungLink);

                //Delete Button
                var spalteAdminDeleteLink = document.createElement("a");
                spalteAdminDeleteLink.href = "";
                eval("spalteAdminDeleteLink.onclick = function() { startRequest('" + url + "','deleteArtikel','artId=" + artikelId + "&cat=" + artikelKat + "',refreshArtikelliste);return false; }");
                var spalteAdminDelete = document.createElement("img");
                spalteAdminDelete.src = "/bilder/store/delete.gif";
                spalteAdminDelete.title = "Artikel loeschen";
                spalteAdminDelete.alt = "Artikel loeschen";
                spalteAdminDelete.border = 0;
                spalteAdminDeleteLink.appendChild(spalteAdminDelete);
                spalteAdmin.appendChild(spalteAdminDeleteLink);

                //Texte den Spalten zuweisen
                spalteArtikelNummer.appendChild(spalteArtikelNummerText);
                spalteArtikelName.appendChild(spalteArtikelNameText);
                spalteArtikelId.appendChild(spalteArtikelIdText);
                //Spalten der Zeile zuweisen
                zeile.appendChild(spalteArtikelId);
                zeile.appendChild(spalteArtikelNummer);
                zeile.appendChild(spalteArtikelName);
                zeile.appendChild(spalteAdmin);
                //Zeile dem Table Body zuweisen
                tbody.appendChild(zeile);
                //Table Body der Tabelle zuweisen
                artikelTabelle.appendChild(tbody);
            }
        }
    }
}

/**
* Den Wert einer Select Box auf einen bestimmten Wert setzen
**/
function changeSelectBox(targetSelectId,value){
    var targetSelectBox = document.getElementById(targetSelectId);
    targetSelectBox.value = value;
}

function refreshArtikelliste(anfrage,url){
    startRequest(url,'getArtikel','kat=' + document.getElementById('katBaum').value,setArtikelListe,'xml');
}

function finishCreateArticle(anfrage,url){
    if (anfrage.readyState == 4) {
        if (anfrage.status == 200) {
            changeSelectBox('katBaum',document.getElementById('katNew').value);
            refreshArtikelliste(anfrage,url);
            document.forms[0].reset();
        }
    }

}

function editArtikel(anfrage,url){
    if (anfrage.readyState == 4) {
        if (anfrage.status == 200) {
            var naviObj = anfrage.responseXML;
            var artikelArray = naviObj.getElementsByTagName("artikel");
            var artikel = artikelArray[0];
            //Artikeldaten aus XML holen
            if(artikel != null){
                var artikelNummer = artikel.getElementsByTagName("artikelnummer")[0].firstChild.nodeValue;
                var artikelName = artikel.getElementsByTagName("name")[0].firstChild.nodeValue;
                var artikelId = artikel.getElementsByTagName("id")[0].firstChild.nodeValue;
                var artikelTax = artikel.getElementsByTagName("tax")[0].firstChild.nodeValue;
                var artikelBeschreibung = artikel.getElementsByTagName("beschreibung")[0].firstChild.nodeValue;
                var artikelNetto = artikel.getElementsByTagName("netto")[0].firstChild.nodeValue;
                var artikelMindestMenge = artikel.getElementsByTagName("mindestmenge")[0].firstChild.nodeValue;
                var artikelBild = artikel.getElementsByTagName("bild")[0].firstChild.nodeValue;
            }
            //Daten setzen
            $('artikelId').value = trim(artikelId);
            $('artikelNummerEdit').value = trim(artikelNummer);
            $('artikelNameEdit').value = trim(artikelName);
            $('artikelTaxEdit').value = trim(artikelTax);
            $('artikelBeschreibungEdit').value = trim(artikelBeschreibung);
            $('artikelNettopreisEdit').value = trim(artikelNetto);
            $('artikelMindestmengeEdit').value = trim(artikelMindestMenge);
            $('artikelBild').src = 'module/_store/resize.php?width=200&height=200&pic=' + trim(artikelBild);
            //Attribute auslesen
            var attributeArray = artikel.getElementsByTagName("attribute");
            var attributeChildArray = null;
            var attribute = null;
            attributeChildArray = attributeArray[0].childNodes;
            for(var i=0;i<attributeChildArray.length;i++){
                attribute = attributeChildArray[i];

                $('attr_' + attribute.nodeName + "Edit").value = trim(attribute.firstChild.nodeValue);

            }

        }
    }
}

//Kategorieverwaltung anzeigen
function setKategorieverwaltungData(anfrage,url){
    if (anfrage.readyState == 4) {
        if (anfrage.status == 200) {
            //XML Empfangen
            var naviObj = anfrage.responseXML;
            var kategorienArray = naviObj.getElementsByTagName("kategorie");
            var kategorie = null;
            var kategorieTabelle = $("kategorieTabelle");
            //Elemente loeschen
            while(kategorieTabelle.hasChildNodes()){
                var firstChild = kategorieTabelle.firstChild;
                kategorieTabelle.removeChild(firstChild);
            }
            var kategorieTabelle = $("kategorieTabelle");
            //Alle Elemente durchgehen
            for(var i=0;i<kategorienArray.length;i++){
                kategorie = kategorienArray[i];
                //Artikeldaten aus XML holen
                var kategorieId = kategorie.getElementsByTagName("id")[0].firstChild.nodeValue;
                var kategorieName = kategorie.getElementsByTagName("name")[0].firstChild.nodeValue;
                var kategoriePfad = kategorie.getElementsByTagName("pfad")[0].firstChild.nodeValue;
                //Tbody ist wichtig fuer IE
                var tbody = document.createElement("tbody");
                //Neue Zeile erzeugen
                var zeile = document.createElement("tr");
                //Die Spalten fuer die Kategorien erzeugen
                var spalteKategorieId = document.createElement("td");
                var spalteKategorieName = document.createElement("td");
                var spalteAdminFunc = document.createElement("td");
                //TextNodes fuer die Spalten erzeugen
                var spalteKategorieIdText = document.createTextNode(kategorieId);
                var pfadIcon = document.createElement("img");
                pfadIcon.src = "/bilder/store/info.gif";
                pfadIcon.title = kategoriePfad;
                pfadIcon.alt = kategoriePfad;
                var spalteKategorieNameText = document.createTextNode(kategorieName);
                var deleteIconLink = document.createElement("a");
                deleteIconLink.href = "#";
                eval("deleteIconLink.onclick = function(event) { startRequest('" + url + "','deleteCat','artId=" + $('hiddenArtId').value + "&cat=" + kategorieId + "',setKategorieverwaltungData,'xml');return false; }");

                var deleteIcon = document.createElement("img");
                deleteIcon.border="0";
                deleteIcon.src = "/bilder/store/delete.gif";
                deleteIcon.title = "Kategorie entfernen";
                deleteIcon.alt = "Kategorie entfernen";
                deleteIconLink.appendChild(deleteIcon);
                //Texte den Spalten zuweisen
                spalteKategorieName.appendChild(pfadIcon);
                spalteKategorieName.appendChild(spalteKategorieNameText);
                spalteAdminFunc.appendChild(deleteIconLink);
                //Spalten der Zeile zuweisen
                zeile.appendChild(spalteKategorieId);
                zeile.appendChild(spalteKategorieName);
                zeile.appendChild(spalteAdminFunc);
                //Zeile dem Table Body zuweisen
                tbody.appendChild(zeile);
                //Table Body der Tabelle zuweisen
                kategorieTabelle.appendChild(tbody);
            }
        }
    }
}

function setEditLayer(event){
    var artikelBearbeitenDiv = $('artikelBearbeiten');
    var myEvent = new Event(event);
    var elemSize = artikelBearbeitenDiv.getSize();
    showBox('artikelBearbeiten','left',myEvent.page.x,myEvent.page.y);
}

function setKatLayer(event){
    var kategorieverwaltungDiv = $('kategorieverwaltung');
    var myEvent = new Event(event);
    var elemSize = kategorieverwaltungDiv.getSize();
    showBox('kategorieverwaltung','left',myEvent.page.x,myEvent.page.y);
}

function showBox(id,position,x,y){
    var box = document.getElementById(id);
    var boxSize = box.getSize();
    if(position == "left"){
        box.style.left = (x-boxSize.size.x) + "px";
    }
    if(position == "right"){
        box.style.left = (x+boxSize.size.x) + "px";
    }
    box.style.top = (y-10) + "px";
    //box.makeDraggable();
    box.style.visibility = "visible";
    $('artikelBeschreibungEdit').style.display = "inline";
}

function closeBox(id){
    var box = document.getElementById(id);
    box.style.visibility = "hidden";
    $('artikelBeschreibungEdit').style.display = "none";
}

function finishEditArticle(anfrage,url){
    closeBox('artikelBearbeiten');
    refreshArtikelliste(anfrage,url)
}

function checkArtikelDetailForm(){
    if($('edit_artikel_artikelnummer').value == ""){
        alert("Bitte Artikelnummer angeben!");
        return false;
    }
    if($('edit_artikel_artikelname').value == ""){
        alert("Bitte Artikelname angeben!");
        return false;
    }
    if($('edit_artikel_artikelbeschreibung').value == ""){
        alert("Bitte Artikelbeschreibung angeben!");
        return false;
    }
    if($('edit_artikel_artikelmindestmenge').value == ""){
        alert("Bitte eine Mindestmenge angeben!");
        return false;
    }
    if($('edit_artikel_artikelmindestmenge').value <= 0){
        alert("Die Mindestmenge muss groesser als 0 sein!");
        return false;
    }
    if($('edit_artikel_menge')){
        if($('edit_artikel_menge').value == ""){
            alert("Bitte Inhaltsmenge angeben!");
            return false;
        }
    }
    /* NEU ATTRIBUTE SIND KEINE PFLICHTFELDER MEHR
    var i=1;
    while($('edit_artikel_artikelattribut[' + i + ']')){
        if($('edit_artikel_artikelattribut[' + i + ']').value == ""){
            alert("Bitte fuellen Sie alle Felder aus!");
            return false;
        }
        i++;
    }
    */
}

function checkCreateArtikelForm(){
    if($('new_artikel_kategorie').value == "0"){
        alert("Bitte eine Kategorie auswaehlen!");
        return false;
    }
    if($('new_artikel_artikelnummer').value == ""){
        alert("Bitte eine Artikelnummer angeben!");
        return false;
    }
    if($('new_artikel_artikelname').value == ""){
        alert("Bitte einen Artikelnamen angeben!");
        return false;
    }
    if($('new_artikel_artikelbeschreibung').value == ""){
        alert("Bitte eine Artikelbeschreibung angeben!");
        return false;
    }
    if($('new_artikel_tax').value == ""){
        alert("Bitte einen Steuersatz auswaehlen!");
        return false;
    }
    if($('new_artikel_tax').value == 0){
        alert("Bitte einen Steuersatz auswaehlen!");
        return false;
    }
    if($('new_artikel_artikelbeschreibung').value == ""){
        alert("Bitte eine Artikelbeschreibung angeben!");
        return false;
    }
    if($('new_artikel_artikelpreis').value == ""){
        alert("Bitte einen Artikelpreis angeben!");
        return false;
    }
    if($('new_artikel_artikelmindestmenge').value == ""){
        alert("Bitte eine Mindestmenge angeben!");
        return false;
    }
    if($('new_artikel_artikelmindestmenge').value <= 0){
        alert("Die Mindestmenge muss groesser als 0 sein!");
        return false;
    }

    if($('new_artikel_artikelmindestmenge').value == ""){
        alert("Bitte eine Mindestmenge angeben!");
        return false;
    }
    if($('new_artikel_menge')){
        if($('new_artikel_menge').value == ""){
            alert("Bitte Inhaltsmenge angeben!");
            return false;
        }
    }
    /* NEU ATTRIBUTE SIND KEINE PFLICHTFELDER MEHR
    var i=1;
    while($('new_artikel_artikelattribut[' + i + ']')){
        if($('new_artikel_artikelattribut[' + i + ']').value == ""){
            alert("Bitte fuellen Sie alle Felder aus!");
            return false;
        }
        i++;
    }
    */
}

function checkCreateArtikelAttributForm(){
    if($('new_attribut_name').value == ""){
        alert("Bitte einen Namen fuer das Attribut angeben!");
        return false;
    }
}

function checkArtikelAttributDetailForm(){
    if($('edit_attribut_name').value == ""){
        alert("Bitte einen Namen fuer das Attribut angeben!");
        return false;
    }
}

function checkBezahlmethodeDetailForm(){
    if($('payment_rabatt').value == ""){
        alert("Bitte einen Rabatt eingeben");
        return false;
    }
    if($('payment_versand').value == ""){
        alert("Bitte Versandkosten eingeben");
        return false;
    }
}

window.checkAdressForm = function(isVersandfrei, containsVersandfrei){
    var error=0;
    if($('vorname').value == ""){
        document.getElementById('error_vorname').innerHTML = "< Bitte tragen Sie hier Ihren Vornamen ein";
        document.getElementById('vorname').className = "textfeld_error";
        error=1;
    }else{
        document.getElementById('error_vorname').innerHTML = "";
        document.getElementById('vorname').className = "textfeld";
    }

    if($('nachname').value == ""){
        document.getElementById('error_nachname').innerHTML = "< Bitte tragen Sie hier Ihren Nachnamen ein";
        document.getElementById('nachname').className = "textfeld_error";
        error=1;
    }else{
        document.getElementById('error_nachname').innerHTML = "";
        document.getElementById('nachname').className = "textfeld";
    }

    if($('strasse').value == ""){
        document.getElementById('error_strasse').innerHTML = "< Bitte tragen Sie hier Ihre Straße ein";
        document.getElementById('strasse').className = "textfeld_error";
        error=1;
    }else{
        document.getElementById('error_strasse').innerHTML = "";
        document.getElementById('strasse').className = "textfeld";
    }

    if($('plz').value == ""){
        document.getElementById('error_plzStadt').innerHTML = "< Bitte tragen Sie hier Ihre PLZ und Ihren Ort ein";
        document.getElementById('plz').className = "textfeld_error";
        error=1;
    }else{
        document.getElementById('error_plzStadt').innerHTML = "";
        document.getElementById('plz').className = "textfeld";
    }

    if($('stadt').value == ""){
        document.getElementById('error_plzStadt').innerHTML = "< Bitte tragen Sie hier Ihre PLZ und Ihren Ort ein";
        document.getElementById('stadt').className = "textfeld_error";
        error=1;
    }else{
        document.getElementById('error_plzStadt').innerHTML = "";
        document.getElementById('stadt').className = "textfeld";
    }
	
    if (document.getElementById('error_telefon')) { // telefon wird nur geprueft, falls error div vorhanden
	    if($('telefon').value == ""){
	    	document.getElementById('error_telefon').innerHTML = "< Bitte tragen Sie hier Ihre Telefonnummer ein";
	    	document.getElementById('telefon').className = "textfeld_error";
	    	error=1;
	    }else{
	    	document.getElementById('error_telefon').innerHTML = "";
	    	document.getElementById('telefon').className = "textfeld";        
	    }
    }
    
	if(checkEmailAdr( $('email').value) ){
		document.getElementById('error_email').innerHTML = "";
        document.getElementById('email').className = "textfeld";        
    }else{
        document.getElementById('error_email').innerHTML = "< Bitte tragen Sie hier Ihre korrekte E-Mail-Adresse ein";
        document.getElementById('email').className = "textfeld_error";
        error=1;
    }
	
    
    // wenn lieferadresse ausgewaehlt
    if(document.getElementById('abnormDelivAddr').checked){
        if($('Lvorname').value == ""){
            document.getElementById('error_Lvorname').innerHTML = "< Bitte tragen Sie hier Ihren Vornamen ein";
            document.getElementById('Lvorname').className = "textfeld_error";
            error=1;
        }else{
            document.getElementById('error_Lvorname').innerHTML = "";
            document.getElementById('Lvorname').className = "textfeld";
        }

        if($('Lnachname').value == ""){
            document.getElementById('error_Lnachname').innerHTML = "< Bitte tragen Sie hier Ihren Nachnamen ein";
            document.getElementById('Lnachname').className = "textfeld_error";
            error=1;
        }else{
            document.getElementById('error_Lnachname').innerHTML = "";
            document.getElementById('Lnachname').className = "textfeld";
        }

        if($('Lstrasse').value == ""){
            document.getElementById('error_Lstrasse').innerHTML = "< Bitte tragen Sie hier Ihre Straße ein";
            document.getElementById('Lstrasse').className = "textfeld_error";
            error=1;
        }else{
            document.getElementById('error_Lstrasse').innerHTML = "";
            document.getElementById('Lstrasse').className = "textfeld";
        }
        
        if ($('error_Lplz')){
	        if($('Lplz').value == ""){
	            document.getElementById('error_Lplz').innerHTML = "< Bitte tragen Sie eine gültige PLZ ein";
	            document.getElementById('Lplz').className = "textfeld_error";
	            error=1;
	        }else{
	            document.getElementById('error_Lplz').innerHTML = "";
	            document.getElementById('Lplz').className = "textfeld";
	        }
        }
        
        if ($('error_Lstadt')){
	        if($('Lstadt').value == ""){
	            document.getElementById('error_Lstadt').innerHTML = "< Bitte tragen Sie einen gültigen Ort ein";
	            document.getElementById('Lstadt').className = "textfeld_error";
	            error=1;
	        }else{
	            document.getElementById('error_Lstadt').innerHTML = "";
	            document.getElementById('Lstadt').className = "textfeld";
	        }
        }

    }


    // NUR bei LAND=DE darf per Rechnung bestellt werden
    // Es duerfen keine Download-Produkte im Warenkorb sein!

    if(document.getElementById('bezahl_rechnung').checked){
        document.getElementById('error_radio_bankeinzug').innerHTML = "";
        if($('land').value != "DE"){
            document.getElementById('error_radio_rechnung').innerHTML = "< Eine Bezahlung per Rechnung ist nur innerhalb Deutschlands möglich.";
            document.getElementById('land').className = "textfeld_error";
            error=1;
        } else if($('land').value == "DE" && containsVersandfrei == true) {
        	document.getElementById('error_radio_rechnung').innerHTML = "< Download-Produkte können leider nicht per Rechnung bezahlt werden.";
        	document.getElementById('land').className = "textfeld";
        	error=1;
        } else {
        	document.getElementById('error_radio_rechnung').innerHTML = "";
        	document.getElementById('land').className = "textfeld";
        }
    }else if($('land').value != "DE" && document.getElementById('bezahl_bank').checked){
        document.getElementById('error_radio_bankeinzug').innerHTML = "< Eine Bezahlung per Lastschrift ist nur innerhalb Deutschlands möglich.";
        document.getElementById('error_radio_rechnung').innerHTML = "";
        document.getElementById('land').className = "textfeld_error";
        error=1;
    }else{
        document.getElementById('land').className = "textfeld";
    }

        
    if(error){
        return false;
    }else{
        return true;
    }
}

function checkAdressForm2(){
    if($('u_vorname').value == ""){
        alert("Bitte Ihren Vornamen eingeben");
        return false;
    }
    if($('u_nachname').value == ""){
        alert("Bitte Ihren Nachnamen eingeben");
        return false;
    }
    if($('u_strasse').value == ""){
        alert("Bitte Ihre komplette Adresse eingeben");
        return false;
    }
    if($('u_plz').value == ""){
        alert("Bitte Ihre komplette Adresse eingeben");
        return false;
    }
    if($('u_ort').value == ""){
        alert("Bitte Ihre komplette Adresse eingeben");
        return false;
    }
    if(!checkEmailAdr( $('u_email').value) ){
        alert("Bitte Ihre korrekte E-mail Adresse eingeben");
        return false;
    }
    if($('u_telefon').value == ""){
        alert("Bitte Ihre Telefonnummer eingeben");
        return false;
    }

    if($('u_pwd').value == "") {
        alert("Bitte geben Sie ein Passwort an");
        return false;
    }

    if($('u_pwd').value != $('u_pwd2').value){
        alert("Die Passwoerter stimmen nicht ueberein");
        return false;
    }

    if($('agb_akzeptiert').checked == false){
        alert("Bitte bestaetigen Sie die AGB");
        return false;
    }

}

function checkAGB(bezahlArt){
    var error=0;
    if (document.getElementById('submitButton')) {
        document.getElementById('submitButton').disabled = true;
    }

    if(dojo.byId('confirm_agb').checked == false){
        alert("Bitte bestätigen Sie die Allgemeinen Geschäftsbedingungen, indem Sie die Box anklicken.");
        error=1;
    }

    if(bezahlArt == "creditcard"){
        // felder aus eingabemaske in payone frontend hidden felder kopieren
        if (document.getElementById('payone_hidden_cardholder')) {
            document.getElementById('payone_hidden_cardholder').value = dijit.byId('card_firstname').getValue() + ' ' + dijit.byId('card_lastname').getValue();
            document.getElementById('payone_hidden_firstname').value = dijit.byId('card_firstname').getValue();
            document.getElementById('payone_hidden_lastname').value = dijit.byId('card_lastname').getValue();
            document.getElementById('payone_hidden_cardpan').value = dijit.byId('nr1').getValue() + '' + dijit.byId('nr2').getValue() + '' + dijit.byId('nr3').getValue() + '' + dijit.byId('nr4').getValue();
            document.getElementById('payone_hidden_cardtype').value = dijit.byId('cardType').getValue();
            document.getElementById('payone_hidden_cardexpireyear').value = '20' + dijit.byId('jahr').getValue();
            document.getElementById('payone_hidden_cardexpiremonth').value = dijit.byId('monat').getValue();
            document.getElementById('payone_hidden_cardcvc2').value = dijit.byId('cvc_code').getValue();
        }
    }
        
    // write additional form values to cookie (so we can read them from PHP when the user is coming back from payone)
    var additionalFormValues = new Array();
    if (document.getElementById('reg_newsletter') && document.getElementById('reg_newsletter').checked) {
    	additionalFormValues.push('reg_newsletter=' + escape(document.getElementById('reg_newsletter').value));
    }
    dojo.cookie("storeCompleteOrderAdditionalFormValues", additionalFormValues.join("&"), {path:'/'});

    if(error == 1){
        if (document.getElementById('submitButton')) {
            document.getElementById('submitButton').disabled = false;
        }
        return false;
    }else{
        if (document.getElementById('waiting')) {
            document.getElementById('waiting').style.display = "block";
        }
        return true;
    }
}

function changeButtonText(id,text){
    document.getElementById(id).innerHTML = text;
}

function checkFormAnmeldung(){
    var error=0;
    document.getElementById('register_button').disabled = true;
    /*
    if($('benutzer').value == ""){
        document.getElementById('error_benutzer').innerHTML = "Bitte tragen Sie hier ihren gewünschten Benutzernamen ein";
        document.getElementById('benutzer').className = "textfeld_error";
        error=1;
    }else{
        document.getElementById('error_benutzer').innerHTML = "";
        document.getElementById('benutzer').className = "textfeld";
    }
    */
    if($('email').value == ""){
        document.getElementById('error_email').innerHTML = "Bitte tragen Sie hier Ihre korrekte E-Mail-Adresse ein";
        document.getElementById('email').className = "textfeld_error";
        error=1;
    }else{
        document.getElementById('error_email').innerHTML = "";
        document.getElementById('email').className = "textfeld";
    }

    if($('passwort').value == ""){
        document.getElementById('error_passwort').innerHTML = "Bitte tragen Sie hier ein Passwort Ihrer Wahl ein";
        document.getElementById('passwort').className = "textfeld_error";
        error=1;
    }else{
        document.getElementById('error_passwort').innerHTML = "";
        document.getElementById('passwort').className = "textfeld";
    }
    if($('passwort2').value == ""){
        document.getElementById('error_passwort2').innerHTML = "Bitte bestätigen Sie Ihr Passwort";
        document.getElementById('passwort2').className = "textfeld_error";
        error=1;
    }else{
        document.getElementById('error_passwort2').innerHTML = "";
        document.getElementById('passwort2').className = "textfeld";
    }

    if($('passwort').value != $('passwort2').value){
        document.getElementById('error_passwort2').innerHTML = "Bitte geben Sie das gleiche Passwort ein";
        document.getElementById('passwort2').className = "textfeld_error";
        error=1;
    }

    if(error == 1){
        document.getElementById('register_button').disabled = false;
        return false;
    }else{
        document.getElementById('waiting').style.display = "inline";
        return true;
    }
}

function checkEmailAdr(inputvalue) {
    var pattern=/^([a-zA-Z0-9_.-])+@([a-zA-Z0-9_.-])+\.([a-zA-Z])+([a-zA-Z])+/;
    if(pattern.test(inputvalue)){         
        return true;
    }else{   
        return false;
    }
}


/* END OF INCLUDED FILE '/modules/_store/store.js' */



/* BEGIN OF INCLUDED FILE '/modules/_store_navigation/store_navigation.js' */

var globalUrl;


/**
 * Baut die normale Navigation auf
 **/
function buildNavi(anfrage,url){
    if (anfrage.readyState == 4) {
        if (anfrage.status == 200) {

          var navItem = null;
          var naviElement = null;
          var naviElementText = null;
          var naviElementLink = null;

          /* Antwort vom Server empfangen */
          var naviObj = anfrage.responseXML;
          var navi = $("navi");

          if (!navi) {
        	  console.log("WARNING: Store navigation div, id=navi, not found.");
        	  return;
          }
          
          //Elemente loeschen
          while(navi.hasChildNodes()){
              var firstChild = navi.firstChild;
              navi.removeChild(firstChild);
          }

          //Navi aufbauen
          var xmlItems = naviObj.getElementsByTagName("item");

          for(var i=0;i<xmlItems.length;i++){
              navItem = xmlItems[i];
              var navLevel = navItem.getElementsByTagName("level")[0].firstChild.nodeValue;
              var navID = navItem.getElementsByTagName("id")[0].firstChild.nodeValue;
              var navName = navItem.getElementsByTagName("name")[0].firstChild.nodeValue;
			  var navBild = navItem.getElementsByTagName("bild")[0].firstChild.nodeValue;
			  var offen = navItem.getElementsByTagName("offen")[0].firstChild.nodeValue;

              naviElement = document.createElement("div");
              naviElement.className = "nav navEbene_" + navLevel;
			  if(offen == navID){
			  	naviElement.className = "nav navEbeneSelected_" + navLevel;
			  }

              naviElementLink = document.createElement("a");
              naviElementLink.className = "navEbeneText_" + navLevel;
              var link = getCurrentLink();
              if (link.indexOf('?') == -1) {
                link += '?';
              } else {
                link += '&';
              }
              link += "storeCat=" + navID + "&action=showCat";
              naviElementLink.href =  link;
              if(navBild != "''"){
              	naviElementText = document.createElement("img");
              	naviElementText.src = navBild;
              	naviElementText.title = navName;
              	naviElementText.border = 0;
              } else {
              	naviElementText = document.createTextNode(navName);
              }
              naviElementLink.appendChild(naviElementText);
              naviElement.appendChild(naviElementLink);

              navi.appendChild(naviElement);
          }

        } else {
            //alert("Fehler! Anfragestatus ist " + anfrage.status);
        }
    }
}


/**
* Navigation fuer Admin aufbauen
**/
function buildAdminNavi(anfrage,url){
    if (anfrage.readyState == 4) {
        if (anfrage.status == 200) {

          var navItem = null;
          var naviElement = null;
          var naviElementText = null;
          var naviElementLink = null;

          /* Antwort vom Server empfangen */
          var naviObj = anfrage.responseXML;
          var navi = $("adminNavi");

          //Elemente loeschen
          while(navi.hasChildNodes()){
              var firstChild = navi.firstChild;
              navi.removeChild(firstChild);
          }

          //Navi aufbauen
          var xmlItems = naviObj.getElementsByTagName("item");
          for(var i=0;i<xmlItems.length;i++){
              navItem = xmlItems[i];
              var navLevel = navItem.getElementsByTagName("level")[0].firstChild.nodeValue;
              var navID = navItem.getElementsByTagName("id")[0].firstChild.nodeValue;
              var navName = navItem.getElementsByTagName("name")[0].firstChild.nodeValue;
              var adminLink = '';
              if (navItem.getElementsByTagName("adminlink")[0].firstChild) {
                  adminLink = navItem.getElementsByTagName("adminlink")[0].firstChild.nodeValue;
              }
              var href = unescape(navItem.getElementsByTagName("href")[0].firstChild.nodeValue);
              var offen = navItem.getElementsByTagName("offen")[0].firstChild.nodeValue;
              var className = "navAdminEbeneText_" + navLevel;
              if (navID == offen) {
                className = "navAdminEbeneTextSelected navAdminEbeneText_" + navLevel;
              }

              // Haupt-Link
              naviElement = document.createElement("div");
              naviElement.className = "navAdmin navAdminEbene_" + navLevel;
              naviElement.style.styleFloat = "left";
              naviElement.style.cssFloat = "left";
              naviElementLink = document.createElement("a");
              naviElementLink.className = className;
              naviElementLink.href = href;
              //eval("naviElementLink.onclick = function() { startRequest('" + url + "','getKatTree','offen=" + navID + "',buildAdminNavi,'xml');setHiddenNaviOffen(" + navID + ");setKatName('" + navName + "','" + navID + "','kat');return false; }");
              naviElementText = document.createTextNode(navName);
              naviElementLink.appendChild(naviElementText);
              naviElement.appendChild(naviElementLink);

              //Link zu neuem Punkt
              naviNewCatElement = document.createElement("div");
              naviNewCatElement.className = "navAdmin";
              naviNewCatElement.style.styleFloat = "left";
              naviNewCatElement.style.cssFloat = "left";
              naviNewCatElementLink = document.createElement("a");
              naviNewCatElementLink.href = "#";
              eval("naviNewCatElementLink.onclick = function() { startRequest('" + url + "','insertKat','after=" + navID + "',updateKat);return false; }");
              naviAdminElementImage = document.createElement("img");
              naviAdminElementImage.src = "/media/images/store_navigation/addKat.gif";
              naviAdminElementImage.title = "Neue Kategorie anlegen";
              naviAdminElementImage.alt = "[Neue Kategorie anlegen]";
              naviAdminElementImage.border = 0;
              naviNewCatElementLink.appendChild(naviAdminElementImage);
              naviNewCatElement.appendChild(naviNewCatElementLink);

              //Link zu Neuer Unterpunkt
              naviNewSubCatElement = document.createElement("div");
              naviNewSubCatElement.className = "navAdmin";
              naviNewSubCatElement.style.styleFloat = "left";
              naviNewSubCatElement.style.cssFloat = "left";
              naviAdminElementLink = document.createElement("a");
              naviAdminElementLink.href = "#";
              eval("naviAdminElementLink.onclick = function() { startRequest('" + url + "','insertSubKat','parent=" + navID + "',updateKat); return false; }");
              naviAdminElementImage = document.createElement("img");
              naviAdminElementImage.src = "/media/images/store_navigation/addSubKat.gif";
              naviAdminElementImage.title = "Neue Unterkategorie anlegen";
              naviAdminElementImage.alt = "[Neue Unterkategorie anlegen]";
              naviAdminElementImage.border = 0;
              naviAdminElementLink.appendChild(naviAdminElementImage);
              naviNewSubCatElement.appendChild(naviAdminElementLink);

              //Link zu Loesche Punkt
              naviDeleteElement = document.createElement("div");
              naviDeleteElement.className = "navAdmin";
              naviDeleteElement.style.styleFloat = "left";
              naviDeleteElement.style.cssFloat = "left";
              naviAdminElementLink = document.createElement("a");
              naviAdminElementLink.href = "#";
              eval("naviAdminElementLink.onclick = function() { if(confirm('Die Kategorie wirklich löschen?') == true) { startRequest('" + url + "','deleteKat','navId=" + navID + "',updateKat);}return false; }");
              naviAdminElementImage = document.createElement("img");
              naviAdminElementImage.src = "/media/images/store_navigation/deleteKat.gif";
              naviAdminElementImage.title = "Kategorie löschen";
              naviAdminElementImage.alt = "[Kategorie löschen]";
              naviAdminElementImage.border = 0;
              naviAdminElementLink.appendChild(naviAdminElementImage);
              naviDeleteElement.appendChild(naviAdminElementLink);

              //Link zu verschiebe nach Oben
              naviMoveUpElement = document.createElement("div");
              naviMoveUpElement.className = "navAdmin";
              naviMoveUpElement.style.styleFloat = "left";
              naviMoveUpElement.style.cssFloat = "left";
              naviAdminElementLink = document.createElement("a");
              naviAdminElementLink.href = "#";
              eval("naviAdminElementLink.onclick = function() { startRequest('" + url + "','moveNodeUp','nodeId=" + navID + "',updateKat);return false; }");
              naviAdminElementImage = document.createElement("img");
              naviAdminElementImage.src = "/media/images/store_navigation/moveUp.gif";
              naviAdminElementImage.title = "Nach oben verschieben";
              naviAdminElementImage.alt = "[Nach oben verschieben]";
              naviAdminElementImage.border = 0;
              naviAdminElementLink.appendChild(naviAdminElementImage);
              naviMoveUpElement.appendChild(naviAdminElementLink);

              //Link zu verschiebe nach Unten
              naviMoveDownElement = document.createElement("div");
              naviMoveDownElement.className = "navAdmin";
              naviMoveDownElement.style.styleFloat = "left";
              naviMoveDownElement.style.cssFloat = "left";
              naviAdminElementLink = document.createElement("a");
              naviAdminElementLink.href = "#";
              eval("naviAdminElementLink.onclick = function() { startRequest('" + url + "','moveNodeDown','nodeId=" + navID + "',updateKat);return false; }");
              naviAdminElementImage = document.createElement("img");
              naviAdminElementImage.src = "/media/images/store_navigation/moveDown.gif";
              naviAdminElementImage.title = "Nach unten verschieben";
              naviAdminElementImage.alt = "[Nach unten verschieben]";
              naviAdminElementImage.border = 0;
              naviAdminElementLink.appendChild(naviAdminElementImage);
              naviMoveDownElement.appendChild(naviAdminElementLink);

              //Link zu Beschreibung bearbeiten
              naviEditDescElement = document.createElement("div");
              naviEditDescElement.className = "navAdmin";
              naviAdminElementLink = document.createElement("a");
              naviAdminElementLink.href = unescape(adminLink);
              naviAdminElementLink.target = "_blank";
              naviAdminElementImage = document.createElement("img");
              naviAdminElementImage.src = "/media/images/store_navigation/editKat.gif";
              naviAdminElementImage.title = "Beschreibung bearbeiten";
              naviAdminElementImage.alt = "[Beschreibung bearbeiten]";
              naviAdminElementImage.border = 0;
              naviAdminElementLink.appendChild(naviAdminElementImage);
              naviEditDescElement.appendChild(naviAdminElementLink);

              // Hinzu
              navi.appendChild(naviElement);
              navi.appendChild(naviNewCatElement);
              navi.appendChild(naviNewSubCatElement);
              navi.appendChild(naviDeleteElement);
              navi.appendChild(naviMoveUpElement);
              navi.appendChild(naviMoveDownElement);
              navi.appendChild(naviEditDescElement);
          }

	    } else {
	        alert("Fehler! Anfragestatus ist " + anfrage.status);
	    }
    }
}

/**
* Kategorie setzen
**/
function setKatName(name,id,idPrefix){
    var katNameInputName = $(idPrefix + "Name");
    var katNameInputId = $(idPrefix + "Id");
    katNameInputName.value = name;
    katNameInputId.value = id;
}

/**
* Setzt das versteckte Feld, das angibt, welcher Punkt offen ist
**/
function setHiddenNaviOffen(value){
    var hiddenOffenDiv = $("hiddenNaviOffen");
    while(hiddenOffenDiv.hasChildNodes()){
        var firstChild = hiddenOffenDiv.firstChild;
        hiddenOffenDiv.removeChild(firstChild);
    }
    var newTextNode = document.createTextNode(value);
    hiddenOffenDiv.appendChild(newTextNode);
}

/**
* Kategorie speichern
**/
function saveKat(url){
    var katId = $("katId").value;
    var katName = $("katName").value;
    startRequest(url,'updateKat',"katId=" + katId + "&katName=" + katName,updateKat);
}

/**
* Aktualisiert eine Kategorie
**/
function updateKat(anfrage,url){
    if (anfrage.readyState == 4) {
        if (anfrage.status == 200) {
            var navID = $("hiddenNaviOffen").firstChild.nodeValue;
            startRequest(url,'getKatTree','offen=' + navID,buildAdminNavi,'xml');
        } else {
            alert("Fehler! update Anfragestatus ist " + anfrage.status);
        }

    }
}


/* END OF INCLUDED FILE '/modules/_store_navigation/store_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/_store_warenkorb/store_warenkorb.js' */

function refreshWarenkorb(anfrage,url){
    if (anfrage.readyState == 4) {
        if (anfrage.status == 200) {
            if (document.getElementById('waiting')) {
                document.getElementById('waiting').style.display = 'block';
            }
            if (window.dojo && (dojo.isFF || dojo.isIE)) {
                window.location.href = new String(window.location.href);
            } else {
                window.location.reload(false);
            }
        }
    }
}

function refreshWarenkorbRedirect(anfrage,url){
    if (anfrage.readyState == 4) {
        if (anfrage.status == 200) {
            if (document.getElementById('waiting')) {
                document.getElementById('waiting').style.display = 'block';
            }
            location.href = "/de/store.html?&action=showCart";
        }
    }
}

function checkMaxAmount(amount){
    if(amount > 999) {
        alert("Sie koennen maximal 999 Stueck von einem Artikel bestellen");
        return false;
    }
    return true;
}

function checkLogin(login,pwd,url){
	if(login == "" && pwd == ""){
		startRequest(url,'doAnonymousLogin','',confirmLogin);
	} else {
    	startRequest(url,'doLogin','login=' + login + '&pwd=' + pwd ,confirmLogin);
    }

}

function checkLoginOnReturn(event,login,pwd,url){
    var taste = event.keyCode
      if (taste == 13){
          checkLogin(login,pwd,url);
          return true;
      }
      return false;
}

function checkBestellung(url){
	/*
	if(document.getElementById('land').value != "0"){
		return true;
	}
	alert("Bitte waehlen Sie ein Land aus!");
	return false;
	*/
	return true;
}

function confirmLogin(anfrage,url){
     if (anfrage.readyState == 4) {
        if (anfrage.status == 200) {
            result = anfrage.responseText;
            if(result != "false"){
                location.href= result;
            } else {
                alert("Die Logindaten sind falsch");
            }

        }
    }
}


/* END OF INCLUDED FILE '/modules/_store_warenkorb/store_warenkorb.js' */



/* BEGIN OF INCLUDED FILE '/modules/_swajax/swajax.js' */


function getAnfrage(){

    var anfrage = null;
    try {
      anfrage = new XMLHttpRequest();
    } catch (versuchmicrosoft) {
      try {
        anfrage = new ActiveXObject("Msxml2.XMLHTTP");
      } catch (anderesmicrosoft) {
        try {
          anfrage = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (fehlschlag) {
          anfrage = null;
        }
      }
    }

    if (anfrage == null)
      alert("Fehler beim Erzeugen des Anfrage-Objekts!");
    return anfrage;
}




function startRequest(url,phpfunktion,param,action,format){
	var headerFormat = "";
	if(format == null) {
	    headerFormat = "";
	}
	if(format == "xml"){
	    headerFormat = "&ajaxheader=xml";
	}
	globalUrl = url;
	var anfrage = getAnfrage();
	var anfrageUrl = unescape(url);
	if (anfrageUrl.indexOf('?') == -1) {
	    anfrageUrl += '?';
	}
	var urlKomplett = anfrageUrl + headerFormat +  "&ajaxfunktion=" + phpfunktion + "&ajaxparam=" + escape(param);
    //alert(urlKomplett);
	anfrage.open("GET", urlKomplett, true);
	anfrage.onreadystatechange = function() { action(anfrage,url); };
	anfrage.send(null);
}


/* END OF INCLUDED FILE '/modules/_swajax/swajax.js' */



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


// create namespace for module
window.storecategory = new Object();

window.storecategory.articleAjaxRefresh = function(articleId, articleAjaxContainer, articleForm, articleTemplate) {
    // normalize parameters
    articleAjaxContainer = dojo.byId(articleAjaxContainer);
    articleForm = dojo.byId(articleForm);
    // generate ajax url
    var ajaxUrl = window.location.href;
    if (ajaxUrl.indexOf('#') != -1) {
        ajaxUrl = ajaxUrl.substr(0,ajaxUrl.indexOf('#'));
    }
    if (ajaxUrl.indexOf('?') == -1) {
        ajaxUrl = ajaxUrl + '?';
    } else {
        ajaxUrl = ajaxUrl + '&';
    }
    ajaxUrl = ajaxUrl + 'storecategoryArticleAjaxRefresh=' + escape(articleId) + '&storecategoryArticleAjaxRefreshTemplate=' + escape(articleTemplate);
    // show loading icon
    console.log("Show loading icon ...");
    if (window.backend_showLoadingIcon) {
        backend_showLoadingIcon(articleAjaxContainer);
    }
    // perform http post to refresh article
    dojo.xhrPost({
        url: ajaxUrl,
        form: articleForm,
        load: function(response, ioArgs){
            console.log("Ajax response received");
            // destroy old widgets (after sending post data!)
            var newHtml = response + '';
            var contentPane = dijit.byId(articleAjaxContainer.id);
            if (!contentPane || !contentPane._setContent) {
                alert("Please update yout store article ajax container, this has to be a dijit content pane now.");
                return false;
            }
            contentPane.attr("content", newHtml);
            // hide loading icon
            console.log("Hide loading icon ...");
            if (window.backend_hideLoadingIcon) {
                backend_hideLoadingIcon(articleAjaxContainer);
            }
            // always return response object
            console.log("Return response.");
            return response;
        },
        error: function(response, ioArgs){
            console.log("Ajax refresh of article data failed.");
            // always return response object
            return response;
        },
        handleAs: "text"
    });    
};



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



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


window.googlemaps_createMarker = function(point, html, iconImage, isDraggable) {
    var myIcon = null;
    if (iconImage && iconImage != null && iconImage != '') {
    	myIcon = new GIcon();
    	myIcon.image = iconImage;
    	myIcon.iconSize = new GSize(10, 10);
    	myIcon.iconAnchor = new GPoint(5, 5);
    	myIcon.infoWindowAnchor = new GPoint(5, 5);
    } else {
    	myIcon = new GIcon(G_DEFAULT_ICON);
    }
	var marker = new GMarker(point, { icon:myIcon, draggable:isDraggable });
	if (html && html != null && html != '') {
		GEvent.addListener(marker, "click", function() {
			marker.openInfoWindowHtml(html);
		});
	}
	return marker;
}


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


