function value_changed(form_dependencies, input) {
    if (form_dependencies[input.name]) {
        var dependants = form_dependencies[input.name];
        for (var i = 0; i < dependants.length; i++) {
            var dependant = dependants[i];
            var match = false;
            if (dependant.dependency_value instanceof Array) {
                for (var j = 0; j < dependant.dependency_value.length; j++) {
                    if (input.value == dependant.dependency_value[j]) {
                        match = true;
                        break;
                    }
                }
            } else if (input.value == dependant.dependency_value) {
                match = true;
            }
            $(dependant.id + '_row').style.display = match ? '' : 'none';
            
            if (!match && form_dependencies[dependant.name]) {
                hide_invalidated_dependencies(form_dependencies, dependant.name);
            }
        }
    }
}

function hide_invalidated_dependencies(form_dependencies, name) {
    var dependants = form_dependencies[name];
    for (var i = 0; i < dependants.length; i++) {
        var dependant = dependants[i];
        $(dependant.id + '_row').style.display = 'none';
        if (form_dependencies[dependant.name]) {
            hide_invalidated_dependencies(dependant.name);
        }
    }
}

function select_all(select, form_name, checkbox_name_prefix) {
    if (document.forms[form_name]) {
        var form = document.forms[form_name];
        var element = null;
        
        for (property in form) {
            element = form[property];
            if (element != null) {
                if (element.tagName && element.tagName.toLowerCase() == 'input') {
                    if (element.type.toLowerCase() == 'checkbox') {
                        if (element.name.length > checkbox_name_prefix.length && element.name.substring(0, checkbox_name_prefix.length) == checkbox_name_prefix) {
                            element.checked = select;
                        }
                    }
                }
            }
        }
    }
}