function LimitAllRelated(f)
{
	if (!f) { f = dsFormObj; }
	if (!f) { f = document.forms['dsForm']; }
	if (!f) { f = document.forms[0]; }
	if (f) {
		for (var i = 0; i < f.elements.length; i++) {
			if (f.elements[i].type.indexOf("select-one") != -1 && f.elements[i].className.indexOf("rel_") == -1) {
				var sel = f.elements[i];
				LimitRelated(sel)
			}
		}
	}
}

function LimitRelated(sel) {
	if (sel) {
		var f = sel.form;
		if (sel.type.indexOf("select-one") != -1 && f && sel.name.length > 0) {
			for (var i = 0; i < f.elements.length; i++) {
				var pre = new RegExp("\\brel_" + sel.name + "\\b","i")
				if (f.elements[i].className.search(pre) > -1 && f.elements[i].type.indexOf("select") != -1) {
					var rsel = f.elements[i];
					var rselA = window["options_" + rsel.name];
					if (!rselA) {
						CreateSelectOptionsArray(rsel);
						rselA = window["options_" + rsel.name];
					}
					if (rselA) {
						rsel.options.length = 0;
						var j = 0;
						var ec = 0;
						for (var k = 0; k < rselA.length; k++) {
							if ((sel.value == rselA[k].Parent) || (rselA[k].Parent == "null") || (rselA[k].Parent == "empty") || (sel.value == "%ALL%")) {
								rsel.options[j] = new Option(rselA[k].Title,rselA[k].Value);
								rsel.options[j].className = rselA[k].Parent;
								rsel.options[j].selected = rselA[k].Selected;
								j++;
								if (rselA[k].Parent == "empty") {
									ec++;
								}
							}
						}
						if ((ec > 0) && ((j - ec) > 0)) {
							for (var k = 0; k < rsel.options.length; k++) {
								if (rsel.options[k].className == "empty") {
									rsel.options[k] = null;
									k--;
								}
							}
						}
					}
					FireOnChange(rsel);
				}
			}
		}
	}
}

function CreateSelectOptionsArray(sel) {
	if (sel) {
		if (sel.type.indexOf("select") != -1) {
			var varname = "options_" + sel.name;
			window[varname] = new Array();
			for (var i = 0; i < sel.options.length; i++) {
				var o = sel.options[i];
				window[varname][i] = new SelectOption(o.innerHTML,o.value,o.className,o.selected);
			}
		}
	}
}

function FireOnChange(el) {
	if (el) {
		if (el.fireEvent) {
			el.fireEvent("onchange");
		} else {
			var evt = document.createEvent("HTMLEvents");
			evt.initEvent("change",true,true);
			el.dispatchEvent(evt);
		}
	}
}

function SelectOption(Title,Value,Parent,Selected) {
	this.Title = Title;
	this.Value = Value;
	this.Parent = Parent;
	this.Selected = Selected;
}
