﻿var dControlList = new Array();
var CachedElements = new Array();

if (window.addEventListener) {
    window.addEventListener("load", SetDependentControls, false);
} else {
    window.attachEvent("onload", SetDependentControls);
}

function SetDependentControls() {
    try {
        document.body.style.cursor = 'wait';
        var divElements = document.getElementsByTagName('div');

        if (dControlList.length == 0) {
            for (var i = 0; i < divElements.length; i++) {
                if (divElements[i].DependentContainerControl != null) {
                    dControlList.push(divElements[i]);
                }
            }
        }

        if (dControlList.length > 0) {
            for (var j = 0; j < dControlList.length; j++) {
                var bIsSelected = IsSelected(dControlList[j]);

                /* make the control in/visible */
                if (!bIsSelected) {
                    if (dControlList[j].className.indexOf(" RequestFormDependentHidden") == -1) {
                        dControlList[j].className += " RequestFormDependentHidden";
                    }
                }
                else {
                    if (dControlList[j].className.indexOf(" RequestFormDependentHidden") > -1) {
                        dControlList[j].className = dControlList[j].className.replace(" RequestFormDependentHidden", "");
                    }
                }

                /* set or unset the validator */
                SetValidators(dControlList[j], bIsSelected);
            }
        }
    }
    finally {
        document.body.style.cursor = 'default';
    }
}

function SetValidators(el, isSel) {
    var selectedElements = el.getElementsByTagName("*");

    for (var j = 0; j < selectedElements.length; j++) {
        if (selectedElements[j].Validators != null) {
            for (var k = 0; k < selectedElements[j].Validators.length; k++) {
                var ValEl = selectedElements[j].Validators[k];

                // save the original enabled value, which can be true, false or not set at all
                if (ValEl.oldenabled != true && ValEl.oldenabled != false && ValEl.oldenabled != "notset") {
                    if (ValEl.enabled != null) {
                        ValEl.oldenabled = ValEl.enabled;
                    } else {
                        ValEl.oldenabled = "notset";
                    }
                }

                if (isSel) {
                    if (ValEl.oldenabled != null || ValEl.oldenabled != "notset") {
                        ValEl.enabled = ValEl.oldenabled;
                    } else {
                        ValEl.enabled = null;
                    }
                } else {
                    ValEl.enabled = false;
                }
            }
        }
    }
}

/* IE does not keep an index with elements by their Id, so we have this function to speed up things a bit */
function GetElementByIdCached(elId) {
    if (CachedElements[elId] == null) {
        CachedElements[elId] = document.getElementById(elId);
    }
    return CachedElements[elId];
}

function IsSelected(depControl) {
    if (depControl.DependentContainerControl == null) {
        return true;
    }

    if (!IsSelected(GetElementByIdCached(depControl.DependentContainerControl))) {
        return false;
    }

    var aValues = depControl.DependentValues.split(';');

    if (depControl.DependentControl == null) {
        var dcc = GetElementByIdCached(depControl.DependentContainerControl);
        if (dcc != null) {
            for (var i = 0; i < aValues.length; i++) {
                if (dcc.DependentControlValue == aValues[i]) {
                    return true;
                }
            }
            return false;
        }
        return true;
    }

    var el = GetElementByIdCached(depControl.DependentControl);

    if (el.tagName.toUpperCase() == 'SELECT') {
        var SelectedValue = GetValueFromSelect(el);
        for (var i = 0; i < aValues.length; i++) {
            if (SelectedValue == aValues[i]) {
                return true;
            }
        }
    } else if (el.tagName.toUpperCase() == 'TABLE') {
        var SelectedValue = GetValueFromRadioList(el.getElementsByTagName('input'));
        for (var i = 0; i < aValues.length; i++) {
            if (SelectedValue == aValues[i]) {
                return true;
            }
        }
    } else if (el.tagName.toUpperCase() == 'INPUT' && el.type.toUpperCase() == 'CHECKBOX') {
        var SelectedValue = GetValueFromCheckbox(el);
        for (var i = 0; i < aValues.length; i++) {
            if (SelectedValue == aValues[i]) {
                return true;
            }
        }
    }
    return false;
}

function GetValueFromRadioList(inputs) {
    for (var i = 0; i < inputs.length; i++) {
        if (inputs[i].checked) {
            return inputs[i].value;
        }
    }
    return 'NOVALUE';
}

function GetValueFromSelect(input) {
    var selectedValue = input.options[input.selectedIndex].value;
    if (selectedValue == null) {
        return 'NOVALUE';
    }
    return selectedValue;
}

function GetValueFromCheckbox(input) {
    if (input.checked) {
        return input.CheckedValue;
    }
    return input.UncheckedValue;
}