﻿function LimitRelated(sel) {
	if (sel) {
		var f = sel.form;
		if (sel.type.indexOf("select-one") != -1 && f) {
			for (var i = 0; i < f.elements.length; i++) {
				if (f.elements[i].className.indexOf("rel_" + sel.name) > -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")) {
								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;
}