// ----------------------- 生成关联数据, 类似省市联动的关系 -------------------
/* 调用方法:
   首先包含这个文件: <script type="text/javascript" language="javascript" src="javascript/linkdata.js"></script>
   <script type="text/javascript" language="javascript">
   var 变量名称 = new LinkData(相关元素id或名称列表);	// 例如 LinkData("select1", "input2", ...);

   var v1 = 变量名称.Add(值11)	// 这是 1 级值(第一个值)
       var v2 = v1.Add(值12)		// 这是上级值的子值
       var v2 = v1.Add(值13)		// 同上
       var v2 = v1.Add(值14)		// 同上
	       var v3 = v2.Add    ...............	// 重复上面的过程添加多级数据
   var v1 = 变量名称.Add(值21)	// 这是 1 级值(另一个值)
       var v2 = v1.Add(值22)		// 这是上级值的子值
       var v2 = v1.Add(值23)		// 同上


   然后可以用 v1.GetChildren(级数, 从 1 开始, 第一级时可不填) 得到当前指定级数的值列表
*/


/* 定义一个存储联动数据的类 */
function LinkData()
{
	var args = arguments.length;
	if (args > 0)
	{
		this.elms = new Array();
		for (var i = 0; i < args; i++)
			this.elms[i] = arguments[i];
	}

	this.name = null;
	this.value = null;
	this.children = new Array();
}

/* 在当前级下添加一个值, 并返回添加的值对应的对象 */
LinkData.prototype.Add = function(name, value)
{
	var o = new LinkData();
	o.name = name;
	o.value = value;
	this.children[this.children.length] = o;
	return o;
}

/* 获得指定级的值列表, 从 1 开始, 为 1 时可省略 */
LinkData.prototype.GetChildren = function(deep)
{
	if (typeof(deep) == "undefined") deep = 1;

	var list = new Array();
	var objs = this.children;
	for (var i = 0; i < deep - 1; i++)
	{
		var e = document.getElementById(this.elms[i]);
		if (!e) e = document.getElementsByName(this.elms[i])[0];
		if (e)
		{
			var value = e.value;
			var finded = false;
			for (var j = 0; j < objs.length; j++)
			{
				if (objs[j].value == value)
				{
					objs = objs[j].children;
					finded = true;
					break;
				}
			}
			if (!finded) objs = new Array();
		}
	}

	for (var i = 0; i < objs.length; i++)
		list[i] = {name: objs[i].name, value: objs[i].value};
	return list;
}
