﻿// JScript File

// cookie utility

var _menucookieid = "XLADMM";

function Mi_GetCookieVal(name) {
	name = new String(name);
	var co = new String(document.cookie);
	if (co.indexOf(";") < 0) {
		//alert(co+"\r\n"+co.indexOf(name));
		if (co.indexOf(name) >= 0) {
			return co.substring(co.indexOf(name) + name.length + 1, co.length);
		} else {
			return "";
		}
	} else {
		var ca = co.split(";");
		for (var i = 0; i < ca.length; i++) {
			if (ca[i]) {
				if (ca[i].indexOf(name) >= 0) {
					return ca[i].substring(ca[i].indexOf(name) + name.length + 1, ca[i].length);
				}
			}
		}
		return "";
	}
}
function Mi_SetCookieVal(name, val) {
	document.cookie = name + "=" + val + ";path=/;";
}
function Mi_CookiesRemove(id) {
	var val = Mi_GetCookieVal(_menucookieid);
	if (val == id || val.indexOf(id + "+") >= 0 || val.indexOf("+" + id) >= 0) {
		if (val == id) {
			val = "";
		} else {
			var va = val.split("+");
			var _val = "", j = 0;
			for (var i = 0; i < va.length; i++) {
				if (va[i] != id) {
					if (j == 0) {
						_val = va[i];
					} else {
						_val += "+" + va[i];
					}
					j++;
				}
			}
			val = _val;
		}
		//alert(val);
		Mi_SetCookieVal(_menucookieid, val);
	}
}
function Mi_CookiesAdd(id) {
	var val = Mi_GetCookieVal(_menucookieid);
	var _val = new String("+" + val + "+");
	if (_val.indexOf("+" + id + "+") >= 0) {
	} else {
		if (val) {
			Mi_SetCookieVal(_menucookieid, val + "+" + id);
		} else {
			Mi_SetCookieVal(_menucookieid, id);
		}
	}
}


// below: new menu builder (2009-4-18)

function MenuItem(id, label, url, subitems) { this.id = id; this.label = label; this.url = url; this.subitems = subitems; }

function MenuTree(items, containerid) {
	this._items = items;
	this._containerid = containerid;
	this._expanditems = [];

	this.InExpandList = function(id) {
		for (var i = 0; i < this._expanditems.length; i++) {
			if (id == this._expanditems[i]) {
				return true;
			}
		}
		return false;
	}

	this.GetClassName = function(item, open) {
		if (item.subitems.length > 0) {
			if (open) {
				return "singleopen";
			}
			return "singleclose";
		} else {
			return "single";
		}
	}

	this.GetContainerClassName = function(item, open) {
		return open ? "subopen" : "subclose";
	}

	this.SwitchItemState = function(item, obj, objcontainer, writecookie) {
		if (obj.className == this.GetClassName(item, true)) {
			obj.className = this.GetClassName(item, false);
			objcontainer.className = this.GetContainerClassName(item, false);
			if (writecookie) {
				Mi_CookiesRemove(item.id);
			}
		} else {
			obj.className = this.GetClassName(item, true);
			objcontainer.className = this.GetContainerClassName(item, true);
			if (writecookie) {
				Mi_CookiesAdd(item.id);
			}
		}
	}

	this.AppendItem = function(container, item, level) {
		var tree = this;
		var item_span = document.createElement("span");
		container.appendChild(item_span);
		var open = this.InExpandList(item.id);
		item_span.className = this.GetClassName(item, open);
		if (item.url) {
			var link = document.createElement("a");
			item_span.appendChild(link);
			link.innerHTML = item.label;
			link.href = "../" + item.url;
		} else {
			item_span.innerHTML = item.label;
		}
		if (item.subitems.length > 0) {
			var item_container = document.createElement("span");
			container.appendChild(item_container);
			item_container.className = this.GetContainerClassName(item, open);
			for (var i = 0; i < item.subitems.length; i++) {
				this.AppendItem(item_container, item.subitems[i], level + 1);
			}
			// set event handler
			item_span.onclick = function() {
				tree.SwitchItemState.call(tree, item, item_span, item_container, true);
			}
		}
	}

	this.ReadInitExpandedItems = function() {
		var expanditems = Mi_GetCookieVal(_menucookieid).split('+');
		for (var i = 0; i < expanditems.length; i++) {
			expanditems[i] = parseInt(expanditems[i]);
			if (isNaN(expanditems[i])) {
				expanditems[i] = -1;
			}
		}
		this._expanditems = expanditems;
	}

	this.Show = function() {
		var container = document.getElementById(this._containerid);
		if (container) {
			this.ReadInitExpandedItems();
			container.innerHTML = "";
			container.className = "menugroup";
			for (var i = 0; i < this._items.length; i++) {
				this.AppendItem(container, this._items[i], 0);
			}
			/*var debugshow=document.createElement("span");
			container.appendChild(debugshow);
			debugshow.style.cssText="display:block; color:red; margin-top:1em;";
			debugshow.innerHTML=this._expanditems;*/
		}
	}
}


// below: old menu builder

function Mi_GetMenuInfoByControlID(controlid) {
	var rgid = /^([a-z0-9A-Z]+)_(\d+)$/g;
	var m = rgid.exec(controlid);
	//alert(controlid+": "+m);
	if (m) {
		var id = parseInt(m[2]);
		var prefix = m[1];
		if (!isNaN(id)) {
			var spanid = prefix + "_sub" + id;
			return { ID: id, Prefix: prefix, SpanID: spanid };
		}
	}
	return null;
}

function Mi_SwitchState(obj, modifycookie) {
	var menuinfo = Mi_GetMenuInfoByControlID(obj.id);
	//alert("[" + obj.id + "]");
	//alert(menuinfo);
	if (menuinfo) {
		var span = document.getElementById(menuinfo.SpanID);
		if (span) {
			if (obj.className == "collapse") {
				//alert("open " + obj.id);
				obj.className = "expand";
				span.className = "expand";
				if (modifycookie) { Mi_CookiesAdd(menuinfo.ID); }
			} else {
				//alert("close " + obj.id);
				obj.className = "collapse";
				span.className = "collapse";
				if (modifycookie) { Mi_CookiesRemove(menuinfo.ID); }
			}
		}
	} else {
		//alert("n");
	}
}

function Mi_SetEventHandler(obj, expanditems) {
	if (obj) {
		if (obj.tagName && obj.className) {
			var classname = new String(obj.className).toLowerCase();
			var tagname = new String(obj.tagName).toLowerCase();
			var id = obj.id;

			if (tagname = "div" && classname != "single") {
				var inExpandList = false;
				var menuinfo = Mi_GetMenuInfoByControlID(id);
				if (menuinfo) {
					for (var i = 0; i < expanditems.length; i++) {
						if (expanditems[i] == menuinfo.ID) {
							inExpandList = true;
							break;
						}
					}
				}
				if (inExpandList) {
					Mi_SwitchState(obj, false);
				}

				obj.onclick = function() {
					Mi_SwitchState(this, true);
				}
			}

			if (obj.childNodes) {
				for (var i = 0; i < obj.childNodes.length; i++) {
					Mi_SetEventHandler(obj.childNodes[i], expanditems);
				}
			}
		}
	}
}

function Mi_MakeMenu(menudivid) {
	var expanditems = Mi_GetCookieVal(_menucookieid).split('+');
	//alert(expanditems);
	for (var i = 0; i < expanditems.length; i++) {
		expanditems[i] = parseInt(expanditems[i]);
		if (isNaN(expanditems[i])) {
			expanditems[i] = -1;
		}
	}

	var div = document.getElementById(menudivid);
	if (div) {
		if (div.childNodes) {
			for (var i = 0; i < div.childNodes.length; i++) {
				Mi_SetEventHandler(div.childNodes[i], expanditems);
			}
		}
	}
}

