function isEmpty(value)
{
	var re = new RegExp("^\\s*$");
	if (value == "" || value == null || re.test(value))
		return true;
	return false;
}
function checkLength(field, len, fName)
{
	var re = new RegExp("^\\S{"+len+"}$");
	if (!re.test(field.value))
	{
		alert("請輸入" +len+"個非空白字元在" + fName+"欄位");
		return false;
	}
	return true;
}
function checkCheckBoxGroup(checkbox, fName)
{
	var submit = false;
	//
	if (!checkbox.length) // not array
		submit = checkbox.checked;
	else
	{
		for (i=0; i<checkbox.length; i++)
		{
			if (checkbox[i].checked)
			{
				submit = true;
				break;
			}
		}
	}
	if (!submit)
	{
		alert("請至少勾選一項" + fName);
		return false;
	}
	return true;
}
function checkSelect(select, fName)
{
	if (select.selectedIndex == -1)
	{
		alert("請選擇"+fName);
		return false;
	}
	return true;
}
function checkNumberValue(value, fName)
{
	var re = /^\d{0,}$/;
	if (!re.test(value))
	{
		alert(fName+"不符合「數字」的格式");
		return false;
	}
	return true;
}
function checkZeroNumberValue(value, fName)
{
	var re = /^\d{0,}$/;
	if (!re.test(value))
	{
		alert(fName+"不符合「數字」的格式");
		return false;
	}
	var idx;
	for (idx=0; idx<value.length; idx++)
	{
		var char = value.substring(idx,idx+1);
		if (char != '0')
			break;
	}
	if( idx >= value.length )
	{
		alert(fName+"不可全為「0」");
		return false;
	}
	return true;
}
function checkNumber(number, fName)
{
	var re = /^\d{0,}$/;
	if (!re.test(number.value))
	{
		alert(fName+"不符合「數字」的格式");
		return false;
	}
	return true;
}
function checkNullableDate(date, fName)
{
	if (isEmpty(date.value))
		return true;
	var re = /^\d{4}\/\d{1,2}\/\d{1,2}$/;
	if (!re.test(date.value))
	{
		alert(fName+"不符合「年/月/日」的格式!");
		return false;
	}
	return true;
}
function checkDate(date, fName)
{
	if (!checkNull(date, fName))
		return false;
	var re = /^\d{4}\/\d{1,2}\/\d{1,2}$/;
	if (!re.test(date.value))
	{
		alert(fName+"不符合「年/月/日」的格式!");
		return false;
	}
	return true;
}
function checkNull(field, fName)
{
	if (isEmpty(field.value))
	{
		alert(fName+"是必填!");
		return false;
	}
	return true;
}
function checkIp(value)
{
	var re = /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/;
	if (!re.test(value))
	{
		alert("IP不符合「數字.數字.數字.數字」的格式!");
		return false;
	}
	return true;
}
function checkPort(value)
{
	var re = /^\d{1,2}$/;
	if (!re.test(value))
		return false;
	return true;
}
//要輸入min-max個非空白字元...
function checkFieldNum(field, min, max, fName)
{
	var re = new RegExp("^\\S{" + min+"," + max+"}$");
	if (!re.test(field.value))
	{
		alert("請輸入" + min+"至" + max+"個非空白字元在" + fName+"欄位");
		return false;
	}
	return true;
}
//驗證百分比
function checkPercent(field)
{
	var re = new RegExp("^\\d$|^[1-9][0-9]$|^100$");
	if (!re.test(field.value))
	{
		alert("請輸入百分比");
		return false;
	}
	return true;
}
//驗證英文名字
function checkEName(field)
{
	field.value = field.value.replace(/^[\s　]+|[\s　]+$/g, "");
	field.value = field.value.replace(/[\s　]+/g, " ");
	field.value = field.value.replace("-", " "); // 允許用 '-' 分隔
	var re1 = /^[A-Za-z]+\.*\s+[A-Za-z]+\.*$/;
	var re2 = /^[A-Za-z]+\.*\s+[A-Za-z]+\.*\s+[A-Za-z]+\.*$/;
	if (!re1.test(field.value) && !re2.test(field.value))
	{
		alert("請輸入正確的英文姓名格式!");
		return false;
	}
	return true;
}

//驗證中文名字
function checkCName(field)
{
	field.value = field.value.replace(/[\s　]+/g, "");
	var re = /\w/;
	if (re.test(field.value))
	{
		alert("中文名字只能有中文字!")
		return false;
	}
	if ((field.value.length < 2) || (field.value.length > 4))
	{
		alert("中文名字格式錯誤!")
		return false;
	}
	return true;
}
//br871506@oz.nthu.edu.tw
function checkEmail(field)
{
	var re1 = /^(\w|\w+-+\w)+@(\w|\w+-+\w)+\.\w{2,3}$/;
	var re2 = /^(\w|\w+-+\w)+@(\w|\w+-+\w)+\.(\w|\w+-+\w)+\.\w{2,3}$/;
	var re3 = /^(\w|\w+-+\w)+@(\w|\w+-+\w)+\.(\w|\w+-+\w)+\.(\w|\w+-+\w)+\.\w{2,3}$/;
	var re4 = /^(\w|\w+-+\w)+@(\w|\w+-+\w)+\.(\w|\w+-+\w)+\.(\w|\w+-+\w)+\.(\w|\w+-+\w)+\.\w{2,3}$/;
	var re5 = /^(\w|\w+-+\w)+@(\w|\w+-+\w)+\.(\w|\w+-+\w)+\.(\w|\w+-+\w)+\.(\w|\w+-+\w)+\.(\w|\w+-+\w)+\.\w{2,3}$/;
	var re11 = /^\w+\.\w+@\w+\.\w{2,3}$/;
	var re22 = /^\w+\.\w+@\w+\.\w+\.\w{2,3}$/;
	var re33 = /^\w+\.\w+@\w+\.\w+\.\w+\.\w{2,3}$/;
	var re44 = /^\w+\.\w+@\w+\.\w+\.\w+\.\w+\.\w{2,3}$/;
	var re55 = /^\w+\.\w+@\w+\.\w+\.\w+\.\w+\.\w+\.\w{2,3}$/;
	if (!re1.test(field.value) && !re2.test(field.value) && !re3.test(field.value) && !re4.test(field.value) && !re5.test(field.value))
	{
		if (re11.test(field.value) || re22.test(field.value) || re33.test(field.value) || re44.test(field.value) || re55.test(field.value))
			return true;
		else
		{
			alert("請輸入正確的Email格式!");
			return false;
		}
	}
	return true;
}
//modified by genix@2007/12/20, for bug#1841, 修正 I,O,W 的對應數字
function charToNum(char)
{
	if (char.charCodeAt(0) < 73)
		return(char.charCodeAt(0) - 55);
	if (char.charCodeAt(0)==73)
		return (char.charCodeAt(0) - 39);
	if (char.charCodeAt(0) < 79)
		return(char.charCodeAt(0) - 56);
	if (char.charCodeAt(0)==79)
		return (char.charCodeAt(0) - 44);
	if (char.charCodeAt(0) < 87)
		return(char.charCodeAt(0) - 57);
	if (char.charCodeAt(0)==87)
		return (char.charCodeAt(0) - 55);
	if (char.charCodeAt(0) < 90)
		return(char.charCodeAt(0) - 58);
	if (char.charCodeAt(0)==90)
		return(char.charCodeAt(0) - 57);
}

function checkIDByGender(field, gender)
{
	var gender_value = gender.options[gender.selectedIndex].value;
	var re = /^[A-Z]\d{9}$/;
	if (!re.test(field.value))
	{
		alert("身份證號碼格式不合!");
		return false;
	}
	if (gender_value=="M" && field.value.substring(1,2)!='1')
	{
		alert("身份證號碼與性別不合!");
		return false;
	}
	if (gender_value=="F" && field.value.substring(1,2)!='2')
	{
		alert("身份證號碼與性別不合!");
		return false;
	}
	//
	var str1 =  charToNum(field.value.substring(0,1)) + field.value.substring(1,10);
	var str2 = "1987654321";
	var total = 0;
	for(i=0;i<10;i++)
		total += str1.substring(i,i+1) * str2.substring(i,i+1);
	if ((10 - total%10) != str1.substring(10,11))
	{
		if ((str1.substring(10,11)==0) && (total%10==0))
			return true;
		else
		{
			alert("身份證號碼不合法!")
			return false;
		}
	}
	return true;
}
function checkID(field, gender)
{
	field.value = field.value.toUpperCase();
	if (!gender[0].checked && !gender[1].checked)
	{
		alert("請先選擇性別!");
		return false;
	}
	var re = /^[A-Z]\d{9}$/;
	if (!re.test(field.value))
	{
		alert("身份證號碼格式不合!");
		return false;
	}
	if (gender[0].checked && field.value.substring(1,2)!='1')
	{
		alert("身份證號碼與性別不合!");
		return false;
	}
	if (gender[1].checked && field.value.substring(1,2)!='2')
	{
		alert("身份證號碼與性別不合!");
		return false;
	}
	//alert(field.value);
	var str1 =  charToNum(field.value.substring(0,1)) + field.value.substring(1,10);
	var str2 = "1987654321";
	var total = 0;
	for(i=0;i<10;i++)
		total += str1.substring(i,i+1) * str2.substring(i,i+1);
//	alert(total)
//	alert(total%10)
	if ((10 - total%10) != str1.substring(10,11))
	{
		if ((str1.substring(10,11)==0) && (total%10==0))
			return true;
		else
		{
			alert("身份證號碼不合法!")
			return false;
		}
	}
	return true;
}


//xxxx-xxxx-xxxx-xxxx
function checkCreditCard(field)
{
	var re = /^\d{4}-\d{4}-\d{4}-\d{4}$/;
	if (!re.test(field.value))
	{
		alert("你的信用卡號碼不符合「xxxx-xxxx-xxxx-xxxx」的格式!");
		return false;
	}
	return true;
}

//驗證homepage
function checkHomepage(field)
{
	var re1 = /^http:\/\/www\.\w+\.\w{2,3}(.*)/;
	var re2 = /^http:\/\/www\.\w+\.\w+\.\w{2,3}(.*)/;
	var re3 = /^http:\/\/www\.\w+\.\w+\.\w+\.\w{2,3}(.*)/;
	var re4 = /^http:\/\/\w+\.\w{2,3}(.*)/;
	//alert(re1.source+"\n"+re2.source+"\n"+re3.source)
	if (!re3.test(field.value) && !re2.test(field.value) && !re1.test(field.value) && !re4.test(field.value))
	{
		alert("請輸入正確的http格式!");
		return false;
	}
	else
	{
		var str = RegExp.$1
		if (str != "")
		{
			var re = /^\/~\w+$/;
			if (!re.test(str))
			{
				alert("請輸入正確的http格式!")
				return false;
			}
			return true;
		}
		return true;
	}
}

//只要意見欄看不到文字...就會發出錯誤訊息...
function checkComment(field)
{
	var re = new RegExp("^\\s*$");
	if (re.test(field.value))
	{
		alert("意見攔不可以留白!");
		return false;
	}
	return true;
}

function modifyText(field)
{
	var str = field.value;
	// get rid of leading and trailing white spaces
	str = str.replace(/^[\s　]+|[\s　]+$/g, "");	// \s & 全形空白
	// merge multiple white spaces into one
	str = str.replace(/[\s　]+/g, " ");
	field.value = str;
}

function modifyComment(field)
{
	var str = field.value;
	// get rid of leading and trailing white spaces
	str = str.replace(/^[\s　]+|[\s　]+$/g, "");	// \s & 全形空白
	// merge multiple white spaces (except new line) into one
	str = str.replace(/[ \t\f\r　]+/g, " ");

//	str = str.replace(/\n\n\s+/g, "\n\n");
	str = str.replace(/[ \t]+\r/g, "\r");
	str = str.replace(/\s[\n]+/g, "\n");
	str = str.replace(/\n[\n]+/g, "\n\n");
	field.value = str;
}
//檢查password不得使用特殊字元 
function checkPassword(field)
{
	return checkSpecialChar(field);
}

//檢查userId不得使用特殊字元 
function checkUserId(field)
{
	return checkSpecialChar(field);
}

//檢查輸入值不得使用特殊字元 
function checkSpecialChar(field)
{
	var re1 = /\W+/;
	//alert(re1.source+"\n"+re2.source+"\n"+re3.source)
	if (re1.test(field.value))
	{
		alert("請勿輸入特殊字元!");
		return false;
	}
	else return true;
}

//檢查是否輸入帳號密碼
function checkLoginForm(form)
{
	if (!checkNull(form.id, "帳號"))
	{
		form.id.focus();
		return;
	}
	if (!checkUserId(form.id, "帳號"))
	{
		form.id.focus();
		return;
	}
	else if (!checkNull(form.password, "密碼"))
	{
		form.password.focus();
		return;
	}
	else if (!checkPassword(form.password, "密碼"))
	{
		form.password.focus();
		return;
	}
	
	form.submit();
}

function checkUnquotedField(field,fieldName)
{
	if( field.value.indexOf('\'')!=-1 || field.value.indexOf('"')!=-1 )
	{
		alert(fieldName+'不可含「"」及「\'」字元');
		return false;
	}
	return true;
}

