// 给数组添加一个查找指定值得函数，找到了返回这个值对应的数组下标，找不到返回 false
Array.prototype.Search = function(value)
{
	for (key in this)
	{
		if (this[key] == value)
		{
			return parseInt(key);
		}
	}
	return false;
}

// 测试字符串是否是一个日期
String.prototype.IsDate = function(){
	var r = this.match(/^(\d{4})(-|\/)(\d{1,2})\2(\d{1,2})$/);
	if (r == null) return false;
	var d = new Date(r[1], r[3]-1, r[4]);
	return (d.getFullYear() == r[1] && (d.getMonth() + 1) == r[3] && d.getDate() == r[4]);
}

function AddEvent(obj, evt, func)
{
	if (obj.attachEvent)
		obj.attachEvent("on" + evt, func);
	else
		obj.addEventListener(evt, func, false);
}

function isArray(obj) {
	if (obj.constructor.toString().indexOf("Array") == -1)
		return false;
	else
		return true;
}


function GetEvent()
{
	if (typeof window.event == "undefined")
	{
		var func = arguments.callee.caller;
		while(func != null)
		{
			var arg0 = func.arguments[0];
			if(arg0 && (arg0.constructor == Event || arg0.constructor == MouseEvent || arg0.constructor == KeyboardEvent))
				return arg0;
			func = func.caller;
		}
		return null;
	}
	else
		return window.event;
}

// 替换当前网址中指定的参数
// searchRe -> url中被替换参数的正则表达式
//     例如 http://domain/?page=2 中 page=2 对应 /page=[^&]*/ig (最后一定要用*)
// replace -> 参数中被替换部分的值，例如上面的 2
function ChangeUrl(searchRe, replaceValue)
{
	var h = location.href;
	var str = searchRe.toString();
	str = str.substr(1, str.indexOf("=") - 1) + "=";
	if (h.indexOf("?") == -1)
		h += "?" + str;
	else {
		if(h.indexOf(str) == -1)
			h += "&" + str;
	}
	location.href = h.replace(searchRe, str + replaceValue);
}

/*
 获取元素的绝对坐标
 IE 也可以使用 getBoundingClientRect 函数
 返回结果: {top, left, width, height}
*/
function GetAbsoluteLocation(element)
{
	if (arguments.length != 1 || element == null)
		return null;
	var elmt = element;
	var offsetTop = elmt.offsetTop;
	var offsetLeft = elmt.offsetLeft;
	var offsetWidth = elmt.offsetWidth;
	var offsetHeight = elmt.offsetHeight;
	while(elmt = elmt.offsetParent)
	{
		if (elmt.style.position == 'absolute' || elmt.style.position == 'relative'
			|| (elmt.style.overflow != 'visible' && elmt.style.overflow != '' ))
			break;
		offsetTop += elmt.offsetTop;
		offsetLeft += elmt.offsetLeft;
	}
	return {top: offsetTop, left: offsetLeft, width: offsetWidth, height: offsetHeight};
}

// 设置 Select 元素的值
function SetSelect(name, value)
{
	var e = document.getElementById(name);
	if (!e) e = document.getElementsByName(name)[0];
	if (!e || !value) return;
	e.value = value;
}

/*
 根据传递的正则表达式验证值
 name -> 被验证的页面元素的名称(应该保证这个名称和所有的id不一样)
 re -> 验证元素值的正则表达式
 title -> 验证失败显示提示信息时对这个元素的称呼
 required -> 是否是必填项

 常用正则表达式
 汉字 [\u4E00-\u9FA5]
 全角字母和数字 [\u0030-\u0039]|[\u0041-\u007A]|[\uFF10-\u0019]|[\uFF21-\uFF5A]
*/
function CheckFormat(name, title, re, required)
{
	if (typeof name == "string")
	{
		var e = document.getElementById(name);
		if (!e) e = document.getElementsByName(name)[0];
	}
	else
		e = name
	if (!e) return true;
	//if (e.type == "checkbox" && e.checked) return true;
	if (typeof title == "undefined") title = ido_lang.chkfmt_some_value;
	if (typeof re == "undefined") re = "";
	if (typeof required == "undefined") required = true;

	var type = re;
	if (typeof re == "string")
	{
		switch (re)
		{
			case "email" : re = /^[\.\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/; break;
			case "postcode" : re = /^\d{6}$/; break;
			case "tel" : re = /^[\d\(\)\-,;: ]{7,}$/; break;
			case "date" : re = /^(\d{4})(-|\/)(\d{1,2})\2(\d{1,2})$/; break;
			case "number" : re = /^[+-]?\d+$/; break;
			case "username" : re = /^[a-zA-z][a-zA-z0-9_]{3,}$/; break;
			case "password" : re = /^.{6,}$/; break;
			default: re = /^.+$/m; break;
		}
	}

	if (required)
	{
		if (e.value == "")
		{
			alert(title + ido_lang.chkfmt_no_blank);
			try {e.focus();} catch(e) {}
			return false;
		}
	}
	else
		if (e.value == "") return true;

	if (!re.test(e.value))
	{
		if (type == "username")
			alert(title + ido_lang.chkfmt_name);
		else if (type == "password")
			alert(title + ido_lang.chkfmt_pwd);
		else if (type == "date")
			alert(title + ido_lang.chkfmt_date)
		else
			alert(title + ido_lang.chkfmt_other);
		try {e.focus();} catch(e) {}
		return false;
	}
	else
		return true;
}

/*
 curPage -> 当前页号
 lastPage -> 总页数
 numOfIndex -> 显示的页号数，最好为单数
*/
function WritePageIndex(curPage, lastPage, numOfIndex)
{
	if (curPage < 1 || lastPage < 1 || numOfIndex < 2) {
		document.write('<span style="color: #f00; cursor: default;" title="1">1</span>');
		return;
	}

	if (curPage > lastPage) curPage = lastPage;
	if (numOfIndex >= lastPage)
	{
		numOfIndex = lastPage;
		var start = 1;
	}
	else
	{
		var start = Math.max(curPage - Math.floor((numOfIndex - 1) / 2), 1);
		if (start + numOfIndex - 1 > lastPage)
			start = lastPage + 1 - numOfIndex;
	}

	for (i = 0; i < numOfIndex; i++)
	{
		if (start + i == curPage)
			document.write("<a style='margin-right: 5px; text-decoration: none; color: #ff0000;' href='javascript:ChangeUrl(/page=[^&]*/ig, " + (start + i) + ")' title='" + (start + i) + "'>" + (start + i) + "</a>");
		else
			document.write("<a style='margin-right: 5px; text-decoration: none;' href='javascript:ChangeUrl(/page=[^&]*/ig, " + (start + i) + ")' title='" + (start + i) + "'>" + (start + i) + "</a>");
	}

	if (curPage > 1) {
		document.write("<a style='margin-right: 5px; text-decoration: none;' href='javascript:ChangeUrl(/page=[^&]*/ig, 1)'>首页</a>");
		document.write("<a style='margin-right: 5px; text-decoration: none;' href='javascript:ChangeUrl(/page=[^&]*/ig, " + (curPage - 1) + ")'>上一页</a>");
	}
	if (curPage < lastPage) {
		document.write("<a style='margin-right: 5px; text-decoration: none;' href='javascript:ChangeUrl(/page=[^&]*/ig, " + (curPage + 1) + ")'>下一页</a>");
		document.write("<a style='margin-right: 5px; text-decoration: none;' href='javascript:ChangeUrl(/page=[^&]*/ig, " + lastPage + ")'>尾页</a>");
	}
}

/*
 定义关联下拉列表框类
 parentId -> 包含所有下拉列表框的网页元素 id 值
 itemInAll -> 在所有下拉列表框中生成 itemInAll 选项, null 为不生成 (可选项)
 itemInFirst -> 在第一个下拉列表框中生成 itemInFirst 选项, null 为不生成, 其优先级大于 itemInAll (可选项)
*/
function RelatingList(parentId, itemInAll, itemInFirst)
{
	if (typeof parentId == "undefined") return false;
	if (typeof itemInAll == "undefined") itemInAll = null;
	if (typeof itemInFirst == "undefined") itemInFirst = null;

	this.parentId = parentId;
	this.itemInAll = itemInAll;
	this.itemInFirst = itemInFirst;
	this.item = Array();
}

/*
 添加一个列表项
 id -> 列表项的 id
 name -> 列表项的名称
 parent -> 列表项的父项 id
*/
RelatingList.prototype.AddItem = function(id, name, cat)
{
	with(this)
	{
		item[item.length] = {
			id : id,
			name : name,
			parentId : cat
		};
	}
}

/* 根据设置初始化关联下拉列表框 */
RelatingList.prototype.Show = function(position)
{
	position = position == "" ? [""] : position.split(",");
	with(this)
	{
		var eParent =  document.getElementById(parentId);

		// 生成隐藏提交表单(父类框名称: parentId_cat, 位置框名称: parentId_position)
		var eInput = document.createElement("<INPUT TYPE=HIDDEN NAME='" + parentId + "_cat' ID='" + parentId + "_cat'>");
		eParent.parentNode.appendChild(eInput);
		var eInput = document.createElement("<INPUT TYPE=HIDDEN NAME='" + parentId + "_position' ID='" + parentId + "_position'>");
		eParent.parentNode.appendChild(eInput);

		this.GenerateChildList();
		for (var i = 0; i < position.length; i++)
		{
			var eSelect = eParent.childNodes[i];
			if (eSelect)
			{
				if (position[i] == "" || position[i] == "0")
					eSelect.selectedIndex = 0;
				else
					eSelect.value = position[i];
				if (eSelect.value == "") return;
				eSelect.fireEvent("onchange");
			}
		}
	}
}

/*
 生成子类列表框
 curList -> 当前下拉列表框元素 (可选项)
*/
RelatingList.prototype.GenerateChildList = function(curList)
{
	var parent = 0;	// 父下拉列表框的值
	if (arguments.length != 0) parent = parseInt(curList.value);

	with(this)
	{
		var eParent =  document.getElementById(parentId);

		// 删除当前下拉列表框后面的所有下拉列表框
		while (eParent.lastChild && eParent.lastChild != curList)
			eParent.removeChild(eParent.lastChild);
		// 创建一个下拉列表框
		var eSelect = document.createElement("SELECT");
		var o = this;
		eSelect.onchange = function() {o.GenerateChildList(this);};

		// 生成 itemInAll 和 itemInFirst 选项
		if (itemInFirst && eParent.childNodes.length == 0)
		{
			var eOption = document.createElement("<OPTION STYLE='COLOR:RED;'>");
			eSelect.options.add(eOption);
			eOption.value = "";
			eOption.text = itemInFirst;
		}
		else if (itemInAll)
		{
			var eOption = document.createElement("<OPTION STYLE='COLOR:RED;'>");
			eSelect.options.add(eOption);
			eOption.value = "";
			eOption.text = itemInAll;
		}

		// 生成下拉列表项
		for (var i = 0; i < item.length; i++)
		{
			if (item[i].parentId === parent)
			{
				var eOption = document.createElement("OPTION");
				eSelect.options.add(eOption);
				eOption.value = item[i].id;
				eOption.text = item[i].name;
			}
		}
		// 生成的下拉列表框是否有有效的列表项, 有则显示
		if (eSelect.options.length > 1 || eSelect.options[0] && eSelect.options[0].value != "")
		{
			eParent.appendChild(eSelect);
			eSelect.fireEvent("onchange");
		}

		// 更新提交的父类值
		var eInputParent = document.getElementById(parentId + "_cat");
		var eSelect = eParent.lastChild;
		if (eParent.childNodes.length > 1 && eSelect.value == "") eSelect = eSelect.previousSibling;
		eInputParent.value = (eSelect && eSelect.value != "" ? eSelect.value : 0);
		// 更新提交的位置值
		var eInputPosition = document.getElementById(parentId+ "_position");
		var pos = "";
		var eSelect = eParent.firstChild;
		while (eSelect && eSelect.value != "")
		{
			pos += "," + eSelect.value;
			eSelect = eSelect.nextSibling;
		}
		eInputPosition.value = pos.substr(1);
	}
}

top.adminKey = false;
function SetAdminKey()
{
	var evt = GetEvent();
	try {if (evt.keyCode == '192') top.adminKey = true;}
	catch(e) {}
}
function UnsetAdminKey()
{
	var evt = GetEvent();
	try {if (evt.keyCode == '192') top.adminKey = false;}
	catch(e) {}
}
function OpenBackEnd()
{
	if (top.adminKey === true) {
		var href = window.location.toString() + "/";
		href = href.substr(0, href.indexOf("/", 8)) + "/admin/";
		window.open(href);
	}
}
AddEvent(document, "keydown", SetAdminKey);
AddEvent(document, "keyup", UnsetAdminKey);
AddEvent(document, "dblclick", OpenBackEnd);

