/* 去除字符串两边的空白字符 */
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};
}


/*
 根据传递的正则表达式验证值
 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\(\)\-,;: ]{7,}$/; 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);
			//e.focus();
			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 + " 不正确");
		e.focus();
		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 ChangeUrl(searchRe, replaceValue, href, returnValue)
{
	var h = href ? href : 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;
	}
	h = h.replace(searchRe, str + replaceValue);
	if (returnValue)
		return h;
	else
		location.href = h;
}


/* 设置下拉列表框的值 */
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;
			}
		}
	}
}


/** 把第一个 Select 中被选择的项移到第二个 Select 中
 * eSelect1		第一个 Select 元素
 * eSelect2		第二个 Select 元素
 * limit		第二个 Select 元素最多拥有的子项个数
 */
function MoveSelectItems(eSelect1, eSelect2, limit)
{
	var e1 = $(eSelect1);
	var e2 = $(eSelect2);

	// 计算 eSelect 的现有项个数
	if (typeof(limit) != "undefined")
	{
		var count = 0;
		for (var i = 0; i < e2.options.length; i++)
			count++;
	}

	var opts = e1.options;
	var i = 0;
	while (i < opts.length)
	{
		if (opts[i].selected)
		{
			// 检查是否达到了最大允许数
			if (typeof(limit) != "undefined")
			{
				if (count >= limit)
				{
					alert("已经达到了最大允许数");
					break;
				}
				count++;
			}
			e2.insertBefore(e1.removeChild(opts[i]));
		}
		else
			i++;
	}
}


function ShowOptions(name, list, title, textLimit, lastOptionName, lastOptionValue)
{
	if (typeof(title) == "undefined") var title = "请选择";
	if (typeof(textLimit) == "undefined") var textLimit = 15;
	if (typeof(lastOptionName) == "undefined") var lastOptionName = null;
	if (typeof(lastOptionValue) == "undefined") var lastOptionValue = "0";
	var html = '<iframe style="position: absolute; z-index: -1; width: 0; height:0 ;top:0; left:0; scrolling:no;" frameborder="0" src=""></iframe><table width="645" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF" class="zwxztable"><tr><td bgcolor="#E2F0FD" height="28"><table width="100%" height="100%" border="0" cellpadding="0" cellspacing="0"><tr><td width="35" align="center" valign="middle"><img src="subimages/zwzxpho1.gif" width="16" height="12"/></td><td class="style30">&nbsp;&nbsp;' + title + '</td><td width="50"  align="center" valign="middle" class="style29" ><a href="javascript:CloseOptions()">[关闭]</a></td></tr></table></td></tr><tr><td  height="25"></td></tr><tr><td><table width="100%" height="100%" border="0" cellpadding="0" cellspacing="0" style="color:#EA8937;">';

	// 动态部分
	var j = 0, k = 3;
	var len = list.length;
	for (var i = 0; i < len; i = i + k)
	{
		var temp = new Array();
		for (var l = 0; l < k; l++)
		{
			if (typeof(list[i + l]) != "undefined")
			{
				var value = list[i + l].value;
				var text = limitedText = list[i + l].name
				if (text.length > textLimit)
					limitedText = text.substr(0, textLimit) + '...';
				temp[l] = '<td height="25" width="200" align="left"><a href="javascript:ChooseOptions(\'' + name + '\', \'' + text + '\', \'' + value + '\')" title="' + text + '"> &nbsp; ' + limitedText + ' </a></td>';
			}
		}
		if (i + k >= len && lastOptionName)
		{
			if (temp.length < k)
				temp[temp.length] = '<td height="25" width="200" align="left"><a href="javascript:ChooseOptions(\'' + name + '\', \'' + lastOptionName + '\', \'' + lastOptionValue + '\')" title="' + lastOptionName + '"> &nbsp; ' + lastOptionName + ' </a></td>';
			else
				var last = '<tr><td height="25" width="200" align="left"><a href="javascript:ChooseOptions(\'' + name + '\', \'' + lastOptionName + '\', \'' + lastOptionValue + '\')" title="' + lastOptionName + '"> &nbsp; ' + lastOptionName + ' </a></td></tr>';
		}
		html += "<tr>" + temp.join('<td width="1" background="subimages/zwzxpho2.jpg"></td>') + "</tr>";
	}
	if (last != undefined) html += last;

	html += '</table></td></tr><tr><td  height="25" align="right"  class="style29" ><a href="javascript:CloseOptions()">[关闭]</a>&nbsp;</td></tr><tr><td bgcolor="#E2F0FD" height="20"></td></tr></table>';
	var div = $("js_generate_options");
	if (!div)
	{
		div = document.createElement('<div id="js_generate_options" style="z-index: 999; position: absolute;" onclick="CloseOptions()">');
		document.body.appendChild(div);
	}
	div.innerHTML = html;
	div.style.display = "";

	// 调整 iframe 的大小为 div 的大小
	var iframe = div.getElementsByTagName("iframe")[0];
	iframe.style.height = div.offsetHeight;
	iframe.style.width = div.offsetWidth;

	// 定位倒中间
	var l = GetLocation(div);
	div.style.top = document.body.scrollTop + (document.body.clientHeight + l.top - l.bottom) / 2;
	div.style.left = document.body.scrollLeft + (document.body.clientWidth + l.left - l.right) / 2;
}

function ChooseOptions(name, text, value)
{
	$(name).value = value;
	var e = $(name + "Text");
	e.value = text;
	CloseOptions();
	if (e.fireEvent)
		e.fireEvent("onchange");
	else
	{
		var evt = document.createEvent("Events");
		evt.initEvent("change", true, false);
		e.dispatchEvent(evt)
	}
}

function CloseOptions()
{
	$("js_generate_options").style.display = "none";
}

function SetOption(name, list, value)
{
	for (var i = 0, len = list.length; i < len; i++)
	{
		if (list[i].value == value)
		{
			$(name).value = value;
			$(name + "Text").value = list[i].name;
			break;
		}
	}
}