function replaceAll(str, replacements) {
    for (i = 0; i < replacements.length; i++) {
        var idx = str.indexOf(replacements[i][0]);

        while (idx > -1) {
            str = str.replace(replacements[i][0], replacements[i][1]);
            idx = str.indexOf(replacements[i][0]);
        }

    }

    return str;
}

function modifyChildren(selectObj, childId) {
    if (selectObj == null) {
        return;
    }

    var node;
    if (!(dojo.isFF >= 2)) {
        selectObj.style.display = "none";
        node = dojo.byId("entityId");
        if (node != null) {
            node.style.display = "block";
        }
        selectObj.selectedIndex = 0;
        return;
    } else {
        node = dojo.byId("entityId");
        if (node != null) { // node may have already been removed
            node.parentNode.removeChild(node);
        }
    }

    var childSelectObj = dojo.byId(childId);

    // Disable child if selectedIndex = 0
    if (selectObj.selectedIndex == 0) {
        childSelectObj.style.display = "none";
    } else {
        childSelectObj.style.display = "block";
    }

    // If child.class != this.class then child.selected = 0;
    if (childSelectObj.options[childSelectObj.selectedIndex].className != replaceAll(selectObj.options[selectObj.selectedIndex].text, [[' ', '_']])) {
        childSelectObj.selectedIndex = 0;
    }

    // Show and hide child options based on parent selection
    var className = replaceAll(selectObj.options[selectObj.selectedIndex].text, [[' ', '_']]);

    children = dojo.query('option.' + className, childSelectObj);
    if (children.length == 0) {
        childSelectObj.style.display = "none";
    } else {
        children.forEach(
                function (option) {
                    option.style.display = 'block';
                }
                );

        dojo.query(':not(option.' + className + ")", childSelectObj).forEach(
                function (option) {
                    option.style.display = 'none';
                }
                );

    }

    if (childId == 'contentAreaId') {
        modifyChildren(dojo.byId("contentAreaId"), "topicId");
    } else if (childId == 'topicId') {
        modifyChildren(dojo.byId("topicId"), "subTopicId");
    }

}

dojo.addOnLoad(
        function() {
            modifyChildren(dojo.byId("subjectId"), "contentAreaId");
        }
        );
