    var RANK_PSEUDO_SELECTOR = ":first-child";

    /* ===== END - UTILITY FUNCTIONS ==================================== */

    function getContentSet(child) {
        var o = child;
        while(o) {
            if(o.className && /(transformableAsTabs)|(transformedAsTabs)/.test(o.className)) {
                break;
            }
            o = o.parentNode;
        }
        return o;
    }

    /*
        HTML IMPLEMENTATION-DEPENDANT
    */
    function getUnitStateNode(child) {
        var o = child;
        while(o) {
            if(o.tagName && "LI"==o.tagName.toUpperCase()) {
                break;
            }
            o = o.parentNode;
        }
        return o;
    }

    /* ===== END - UTILITY FUNCTIONS ==================================== */

    /*
        Make tabs from TOC and units
    */
    Behavior.register(
            ".transformableAsTabs",
            function(element) {
                element.className = "transformedAsTabs";
            }
        );

    /*
        Make 'unselected' all TOC and unit items
        Make 'selected' all first TOC and unit items
    */
    Behavior.register(
            ".transformedAsTabs ul.toc > li",
            function(element) {
                element.className = "unselected";
            }
        );
    Behavior.register(
            ".transformedAsTabs ul.units > li",
            function(element) {
                element.className = "unselected";
            }
        );
    /*
        Make 'selected' all first TOC and unit items
    */
    Behavior.register(
            ".transformedAsTabs ul.toc > li"+RANK_PSEUDO_SELECTOR,
            function(element) {
                element.className = "selected";
            }
        );
    Behavior.register(
            ".transformedAsTabs ul.units > li"+RANK_PSEUDO_SELECTOR,
            function(element) {
                element.className = "selected";
            }
        );

    /*
        Remove anchor search behavior from TOC titles
    */
    Behavior.register(
            ".transformedAsTabs ul.toc > li a.title",
            function(element) {
                // element.href="#";
                element.onclick = function() { return false;};
            }
        );

    /*
        Add a 'click' behavior to tabs
    */
    Behavior.register(
            ".transformedAsTabs ul.toc > li",
            function(element) {
                element.onclick = function() {
                        var linkToAnchor            = cssQuery("a.title", element)[0];
                        var contentSet              = getContentSet(linkToAnchor);
                        var anchor                  = document.getElementById(linkToAnchor.hash.replace(/#/, ""));
                        var selectedTocNode         = this;
                        var selectedUnitStateNode   = getUnitStateNode(anchor);
                        var stateNode = null;

                        // update state of toc items
                        stateNode = selectedTocNode.parentNode.firstChild;

                        while(stateNode) {
                            if(stateNode.tagName && selectedTocNode.tagName==stateNode.tagName) {
                                if(stateNode==selectedTocNode) {
                                    stateNode.className = "selected";
                                } else {
                                    stateNode.className = "unselected";
                                }
                            }
                            stateNode = stateNode.nextSibling;
                        }
                        var stateNode = null;

                        // update state of unit items
                        stateNode = selectedUnitStateNode.parentNode.firstChild;

                        while(stateNode) {
                            if(stateNode.tagName && selectedUnitStateNode.tagName==stateNode.tagName) {
                                if(stateNode==selectedUnitStateNode) {
                                    stateNode.className = "selected";
                                } else {
                                    stateNode.className = "unselected";
                                }
                            }
                            stateNode = stateNode.nextSibling;
                        }

                        var stateNode = null;

                    };
            }
        );

