function isNull(obj)      { return obj === null; }
function isUndefined(obj) { return typeof(obj) == 'undefined'; }
function isNot(obj)       { return isUndefined(obj) || isNull(obj); }
function isObject(obj)    { return obj && typeof(obj) == 'object'; }

var pageTools = {

    /*
     * Prüft ob [object] die CSS Klasse [class_name] gesetzt hat
     */
    hasClass: function (class_name, object) {
        return object.className.indexOf(class_name) > -1;
    },

    /*
     * Fügt [object] (dem string object.className) die CSS Klasse [class_name] hinzu
     */
    addClass: function (addName, object) {
        if (object.className.length > 0){
            object.className += ' ' + addName
        } else {
            object.className = addName;
        }
    },

    /*
     * Entfernt CSS Klasse [rmName] von [object]
     */
    rmClass: function (rmName, object) {
        var newName = ''; /* className String nach entfernen von rmName */
        var position = object.className.indexOf(rmName);
        if (this.hasClass(rmName, object)) {
            if (position==0) { /* Zu entfernender Klassenname steht an erster Stelle... */
                if (object.className.length > rmName.length) { /* ... und es folgen weitere Klassennamen */
                    newName = object.className.substr(rmName.length +1, object.className.length);
                }
            } else { /* Zu entfernender Klassenname steht nicht an erster Stelle... */
                var newName = object.className.substr(0, position-1); /* führendes Space mit entfernen */
                if (object.className.length > position + rmName.length) { /* ... und es folgen weitere Klassennamen */
                    newName += object.className.substr(position + rmName.length, object.className.length);
                }
            }
            object.className = newName;
        }
    },

    getElementsByTagAndClassName: function (searchClass, searchTag, rootObj) {
        var searchObj;
        var foundObj = new Array();
        if (isNot(rootObj)) { rootObj = document; }
        searchObj = rootObj.getElementsByTagName(searchTag);
        for (var i=0; i<searchObj.length; i++) {
            if (this.hasClass(searchClass, searchObj[i])) {
                foundObj[foundObj.length] = searchObj[i];
            }
        }
        return foundObj;
    },

    /*
     * Interne Methode ("private")
     * Bearbeitet alle direkten Kindelelemente vom Typ [toggleTag] (name des HTML tags)
     * Setzt beim (als Objekt übergebenen) HTML Element [toggleObj] die CSS Klasse [toggleClass]
     * und entfernt sie bei allen anderen, falls vorhanden.
     */
    _toggleStateInverted: function (rootElement, toggleObj, toggleClass, toggleTag) {
        // if rootElement is an ID string -> get the Node, else rootElement is the actual rootNode
        var aChildNodes = !isObject(rootElement) ? document.getElementById(rootElement).childNodes : rootElement.childNodes;
        for (var i=0; i<aChildNodes.length; i++) {
            if (aChildNodes[i].nodeName == toggleTag) {
                if (toggleObj !== aChildNodes[i]) {
                    if (!this.hasClass(toggleClass, aChildNodes[i])) {
                        this.addClass(toggleClass, aChildNodes[i]);
                    }
                } else {
                    if (this.hasClass(toggleClass, aChildNodes[i])) {
                        this.rmClass(toggleClass, aChildNodes[i]);
                    } else {
                        return false;
                    }
                }
            }
        }
        return false;
    },

    /*
     * Such-Formulare auf/zuklappen
     */
    initExhibitionBlocks: function (triggerName) {
        if (isUndefined(triggerName)) {
            var allSections = pageTools.getElementsByTagAndClassName('ausstellungsliste', 'div', document.getElementById('listTabs'));
            for (var i=1; i<allSections.length; i++) {
                if (!pageTools.hasClass('hiddenBlock', allSections[i])) {
                    pageTools.addClass('hiddenBlock', allSections[i]);
                }
            }
        } else {
            pageTools.toggleBlock(triggerName);
        }
    },

    /*
     * Such-Formulare auf/zuklappen
     */
    toggleExhibitBlock: function (triggerName) {
        var toggleObj = document.getElementById(triggerName);
        this._toggleStateInverted('listTabs', toggleObj, 'hiddenBlock', 'DIV');
        //return false;
    }

}

var toggledID = '';
function toggleDisplay(id)
{
    var objMember = document.getElementById(id);
    var objMoreLink = document.getElementById(id + "more");
    if (!objMember.style.display) {
        objMember.style.display = "none";
    }
    var display = objMember.style.display;
    if (toggledID != '') {
        document.getElementById(toggledID).style.display = 'none';
        document.getElementById(toggledID + "more").style.display = 'inline';
    }
    toggledID = objMember.id;
    if (display && display == "none") {
        objMember.style.display = "block";
        objMoreLink.style.display = "none";
    }
    else {
        objMember.style.display = "none";
        objMoreLink.style.display = "inline";
    }
}
