var cacn_adminKey = false;
function SetAdminKey()
{
	try {if (event.keyCode == '65') cacn_adminKey = true;}
	catch(e) {}
}
function UnsetAdminKey()
{
	try {if (event.keyCode == '65') cacn_adminKey = false;}
	catch(e) {}
}
function OpenAdminPage()
{
	if (cacn_adminKey === true)
		window.open("admin/");
}
document.attachEvent("onkeydown", SetAdminKey);
document.attachEvent("onkeyup", UnsetAdminKey);
document.attachEvent("ondblclick", OpenAdminPage);

/* 去除字符串两边的空白字符 */
String.prototype.Trim = function()
{
	return this.replace(/(^\s*)|(\s*$)/g, "");
}


/* 生成重复指定次数的字符串 */
String.prototype.Repeat = function(num)
{
	if (arguments.length == 0)
	{
		alert("必须给 Repeat 函数指定一个参数");
		return;
	}
	if (typeof(num) != "number" || num < 0)
	{
		alert("必须给 Repeat 函数指定一个正整数参数");
		return;
	}

	num = parseInt(num);
	var result = "";
	for (var i = 0; i < num; i++)
		result += this;
	return result;
}


function $(id)
{
	if (typeof(id) == "string")
	{
		var e = document.getElementById(id);
		if (!e)
			e = document.getElementsByName(id)[0];
	}
	else
		return id;
	return e;
}

function $v(id)
{
	return $(id).value;
}


/*
 随机取出 v1 到 v2 之间(包括 v1 和 v2)的一个整数
 v1 -> 正整数
 v2 -> 正整数, 可省略, 默认为 0
*/
Random = function(v1, v2)
{
	var ok = true;
	if (arguments.length == 1)
		if (typeof(v1) != "number" || v1 < 0) ok = false;
	else if (arguments.length == 2)
		if (typeof(v1) != "number" || v1 < 0 || typeof(v2) != "number" || v2 < 0) ok = false;
	else
		ok = false
	if (!ok)
	{
		alert("Random 函数需要一个或两个正整数参数");
		return false;
	}
	if (arguments.length == 1)
	{
		var v2 = v1;
		v1 = 0;
	}
	else
	{
		var temp = Math.max(v1, v2);
		v1 = Math.min(v1, v2);
		v2 = temp;
	}
	return Math.floor(Math.random() * (Math.floor(v2 - v1) + 1)) + v1;
}


/*
 获取元素的绝对坐标
 IE 也可以使用 getBoundingClientRect 函数
 返回结果: {top, left, width, height}
*/
function GetLocation(element)
{
	if (element == undefined)
		return null;
	// ie
	if (element.getBoundingClientRect)
		return element.getBoundingClientRect();

	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, right: offsetLeft + offsetWidth, bottom: offsetTop + offsetHeight};
}

function GetQueryString(url) {
	if (!url) var url = window.location.href;
	var query = url.replace(/^[^\?]+\??/, '');
	var pairs = query.split(/[;&]/);
	var params = {};

	for (var i = 0; i < pairs.length; i++) {
		var keyVal = pairs[i].split('=');
		if (!keyVal || keyVal.length != 2 ) continue;
		var key = decodeURIComponent(keyVal[0]);
		var val = decodeURIComponent(keyVal[1]);
		val = val.replace(/\+/g, ' ');
		params[key] = val;
	}
	return params;
}


function ChangeUrl(keys, vals, url, returnValue) {
	if (!url) url = window.location.href;
	var params = GetQueryString(url);

	if (keys.join) {
		for (var i = 0; i < keys.length; i++)
			params[keys[i]] = vals.join ? vals[i] : i;
	} else {
		params[keys] = vals;
	}

	var keyVal = [];
	for (var key in params) {
		if (null != params[key]) keyVal.push(key + '=' + params[key]);
	}

	url += '?';
	var query = keyVal.join('&');
	var position = (url + '?').indexOf('?') + 1;
	url = url.substr(0, position) + query;
	if (returnValue)
		return url
	else
		location.href = url;
}

/*
 根据传递的正则表达式验证值
 name -> 被验证的页面元素的名称(应该保证这个名称和所有的id不一样)
 re -> 验证元素值的正则表达式
 description -> 验证失败显示提示信息时对这个元素的称呼
 required -> 是否是必填项

 常用正则表达式
 汉字 [\u4E00-\u9FA5]
 全角字母和数字 [\u0030-\u0039]|[\u0041-\u007A]|[\uFF10-\u0019]|[\uFF21-\uFF5A]
*/
function CheckFormat(name, re, description, required)
{
	if (typeof(name) == "string") var e = $(name);
	if (!e) return true;

	if (typeof(description) == "undefined") description = "此处";
	if (typeof(required) == "undefined") required = true;

	var type = re;
	if (typeof(re) == "string")
	{
		switch (re)
		{
			case "" : re = /^.+$/m; break;
			case "email" : re = /^[\.\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/; break;
			case "zipcode" : re = /^\d{6}$/; break;
			case "telephone" : re = /^[\d\(\)\-,;: ]{4,}$/; break;
			case "date" : re = /^(\d{4})(-|\/)(\d{1,2})\2(\d{1,2})$/; break;
			case "username" : re = /^[a-zA-z][a-zA-z0-9_]{3,}$/; break;
			case "password" : re = /^.{6,}$/; break;
		}
	}

	if (required)
	{
		if (e.value == "")
		{
			alert("必须填写 " + description);
			try {e.focus();} catch(e) {}
			return false;
		}
	}
	else
		if (e.value == "") return true;

	if (!re.test(e.value))
	{
		if (type == "username")
			alert(description + " 必须以字母开始并以字母、数字和下划线组成, 且长度不能小于 4");
		else if (type == "password")
			alert(description + " 长度不能小于 6 个字符");
		else if (type == "date")
			alert(description + " 的格式不正确 (1949-10-01)")
		else
			alert(description + " 不正确");
		try {e.focus();} catch(e) {}
		return false;
	}
	else
		return true;
}

/*
 按比例调整图象的大小
 eImg -> IMG 元素
 width -> 调整后的宽度
 height -> 调整后的高度
 imgBorder -> 图片边框
*/
function AdjustImage(eImg, imgWidth, imgHeight, imgBorder)
{
	var args = arguments.length;
	if (args < 3)
	{
		alert("AdjustImage 的参数不正确, 至少三个参数");
		return;
	}
	if (args >= 4) eImg.style.borderWidth = imgBorder;
	var image = new Image();
	image.onload = function()
	{
		eImg.removeAttribute("width");
		eImg.removeAttribute("height");
		eImg.style.width = "";
		eImg.style.height = "";
		if (this.height / this.width > imgHeight / imgWidth)
			eImg.style.height = Math.min(this.height, imgHeight);
		else
			eImg.style.width = Math.min(this.width, imgWidth);
	}
	image.src = eImg.src;
}


/* 转到指定页 */
function GoToPage(page)
{
	if (/^\d+$/.test(page))
	{
		var h = location.href;
		if (h.indexOf("?") == -1)
			h += "?page=1";
		else
		{
			if(h.indexOf("page=") == -1)
				h += "&page=1";
		}
		location.href = h.replace(/page=[0-9]*/ig, "page=" + page);
	}
	else
		alert("页号不正确");
}


/* 设置下拉列表框的值 */
function SetSelect(e, value)
{
	if (typeof(e) == "string")
		e = $(e);
	if (e && value)
		e.value = value;
	if (e.fireEvent)
		e.fireEvent("onchange");
	else
	{
		var evt = document.createEvent("Events");
		evt.initEvent("change", true, false);
		e.dispatchEvent(evt)
	}
}


/** 根据列表变量填充对应名称的 select 元素
 * selectName		被填充 select 的 id 或者 name
 * list				填充的数据列表变量
 * firstOptionText	如果需要在 select 前先额外添加一个项, 这个参数可以设置这个项的 text 属性
 * firstOptionText	如果需要在 select 前先额外添加一个项, 这个参数可以设置这个项的 value 属性
 */
function FillSelect(selectName, list, firstOptionText, firstOptionValue)
{
	if (typeof(firstOptionValue) == "undefined") firstOptionValue = "0";

	var eSelect = $(selectName);
	if (eSelect)
	{
		eSelect.innerHTML = "";

		/* ie bug, select 中不能直接用 innerHTML
		var arr = new Array();
		for (var i = 0; i < list.length; i++)
			arr[i] = "<OPTION value=\"" + list[i] + "\">" + list[i] + "</OPTION>";
		$(selectName).innerHTML = (firstOptionText ? "<OPTION value=\"" + firstOptionValue + "\">" + firstOptionText + "</OPTION>" : "") + arr.join();
		*/


		if (typeof(firstOptionText) != "undefined")
		{
			var eOption = document.createElement("OPTION");
			eSelect.options.add(eOption);
			eOption.text = firstOptionText;
			eOption.value = firstOptionValue;
		}
		for (var i = 0, len = list.length; i < len; i++)
		{
			var eOption = document.createElement("OPTION");
			eSelect.options.add(eOption);
			eOption.text = list[i].name;
			eOption.value = list[i].value;
		}
	}
}


function DeleteSelectItems(selectName, list)
{
	if (list.length == 0) return;
	var eSelect = $(selectName);
	if (!eSelect) return;

	var llen = list.length;
	var opts = eSelect.options;
	for (var i = opts.length - 1; i >= 0 ; i--)
	{
		for (var j = 0; j < llen; j++)
		{
			if (list[j].value == opts[i].value)
			{
				opts.remove(i);
				break;
			}
		}
	}
}