


var InlineFilter = {
    _hideClass: "hideOnScreen",
    _categories: new Array(),
    _data: new Array(),
    _searchId: null,
    init: function(filterInput) {
        _pageForms = document.getElementsByTagName("form");
        // Following line is commented out because it disables the site search (There is only one form in the Catella AB page)
        //_pageForms[0].onsubmit = function() { return false; };
        this._parseData();
        document.getElementById(filterInput).onkeyup = InlineFilter._filter;
        document.getElementById(filterInput).focus();
    },
    _filter: function(e) {
        var target = e ? e.target : event.srcElement;
        if (InlineFilter._searchId) {
            clearTimeout(InlineFilter._searchId);
        }
        InlineFilter._searchId = setTimeout("InlineFilter._performFilter(\"" + target.value.trim().toLowerCase() + "\")", 300);
    },
    _performFilter: function(filterValue) {
        for(var i = 0; i < this._categories.length; i++) {
            this._categories[i].hasContent = false;
        }
        for(var i=0; i<this._data.length;i++) {
            if(this._data[i].value.indexOf(filterValue) < 0) {
                if(!hasClass(this._data[i].node, this._hideClass)) {
                    addClass(this._data[i].node, this._hideClass);
                }
            }
            else if(hasClass(this._data[i].node), this._hideClass) {
                removeClass(this._data[i].node, this._hideClass);
                this._data[i].category.hasContent = true;
            }
        }
        for(var i = 0; i < this._categories.length; i++) {
            if(!this._categories[i].hasContent) {
                addClass(this._categories[i].node, this._hideClass);
            }
            else {
                removeClass(this._categories[i].node, this._hideClass);
            }
        }
    },
    _parseData: function() {
        var resourcesContainers = getElementsByClassName("resources");
        for(var i=0; i < resourcesContainers.length; i++) {
            var newCat = new category(true, resourcesContainers[i]);
            this._categories[this._categories.length] = newCat;
            var lis = resourcesContainers[i].getElementsByTagName("li");
            for(var b=0; b<lis.length;b++) {
                this._data[this._data.length] = new atom(lis[b], getNodeContent(lis[b]), newCat);
            }
        }
    }
}
OnLoadHandler.appendFunction("InlineFilter.init(\"filter\")", true);



function atom(node, value, category) {
    this.node = node;
    this.value = value;
    this.category = category;
}
function category(hasContent, node) {
    this.hasContent = hasContent;
    this.node = node;
}
function getNodeContent(node) {
    if (node != null) {
        if (node.nodeValue != null) {
            return node.nodeValue.toLowerCase();
        }
        var result = "";
        for (var i = 0; i < node.childNodes.length; i++) {
            var nodeContent = getNodeContent(node.childNodes[i]);
            if (nodeContent != null && nodeContent.length > 0) {
                result += " " + nodeContent;
            }
        }
        return result;
    }
}
