function searchProjects()

in site/js/projects.js [1507:1559]


function searchProjects(str) {
    var obj = document.getElementById('contents');

    str = str.toLowerCase();
    var hits = {};
    var hitssorted = [];

    // Search committees
    for (p in projects) {
        var project = projects[p];
        for (key in project) {
            if (typeof project[key] == "string") {
                var val = project[key].toLowerCase();
                if (val.indexOf(str) >= 0 && val.substr(0,1) != "{") {
                    if (!hits[p]) {
                        hits[p] = [];
                    }
                    var estr = new RegExp(str, "i");
                    hits[p].push({
                    'key': key,
                    'val': project[key].replace(estr, function(a) { return "<u style='color: #963;'>"+a+"</u>"}, "img")
                    });
                    if (hitssorted.indexOf(p) < 0) {
                        hitssorted.push(p);
                    }
                }
            }
        }
    }

    var title = "Search results for '" + str + "' (" + hitssorted.length + "):";
    obj.innerHTML = "";
    var h2 = document.createElement('h2');
    h2.appendChild(document.createTextNode(title));
    obj.appendChild(h2);
    hitssorted.sort(function(a,b) { return hits[b].length - hits[a].length });
    var ul = document.createElement('ul');

    var h;
    for (h in hitssorted) {
        h = hitssorted[h];
        var project = hits[h];
        var html = "<h4><a href='project.html?" + h + "'>" + projects[h].name + "</a> (" + project.length + " hit(s)):</h4>";
        for (x in project) {
            html += "<blockquote><b>" + project[x].key + ":</b> " +  project[x].val + "</blockquote>";
        }
        appendLiInnerHTML(ul,html);
    }
    if (hitssorted.length == 0) {
            obj.innerHTML += "No search results found";
    }
    obj.appendChild(ul);
}