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("Please enter " +len+" letters in " + 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("Please choose at leat one for field " + fName);
		return false;
	}
	return true;
}
function checkSelect(select, fName)
{
	if (select.selectedIndex == -1)
	{
		alert("Please select "+fName);
		return false;
	}
	return true;
}
function checkNumber(number, fName)
{
	var re = /^\d{0,}$/;
	if (!re.test(number.value))
	{
		alert(fName+" is not a valid number!");
		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+" is not a valid date!");
		return false;
	}
	return true;
}
function checkNull(field, fName)
{
	if (isEmpty(field.value))
	{
		alert("Please enter "+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("This is not a valid 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("Please enter " + min+" to " + max+" letters for " + fName+" !");
		return false;
	}
	return true;
}
//驗證百分比
function checkPercent(field)
{
	var re = new RegExp("^\\d$|^[1-9][0-9]$|^100$");
	if (!re.test(field.value))
	{
		alert("Please enter percentage.");
		return false;
	}
	return true;
}
//驗證英文名字
function checkEName(field)
{
	field.value = field.value.replace(/^[\s　]+|[\s　]+$/g, "");
	field.value = field.value.replace(/[\s　]+/g, " ");
	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("Please use english letters!");
		return false;
	}
	return true;
}

//驗證中文名字
function checkCName(field)
{
	field.value = field.value.replace(/[\s　]+/g, "");
	var re = /\w/;
	if (re.test(field.value))
	{
		alert("Chinese characters only!");
		return false;
	}
	if ((field.value.length < 2) || (field.value.length > 4))
	{
		alert("Wrong chinese name!");
		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 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}$/;
	if (!re1.test(field.value) && !re2.test(field.value) && !re3.test(field.value))
	{
		if (re11.test(field.value) || re22.test(field.value) || re33.test(field.value))
			return true;
		else
		{
			//alert("請輸入正確的Email格式!");
			return false;
		}
	}
	return true;
}

function charToNum(char)
{
	if (char.charCodeAt(0) < 73)
		return(char.charCodeAt(0) - 55);
	if (char.charCodeAt(0) < 79)
		return(char.charCodeAt(0) - 56);
	if (char.charCodeAt(0) < 87)
		return(char.charCodeAt(0) - 57);
	return(char.charCodeAt(0) - 58);
}

function checkID(field, gender)
{
	field.value = field.value.toUpperCase();
	if (!gender[0].checked && !gender[1].checked)
	{
		alert("請先選擇性別!");
		return false;
	}
	var re = /^[A-HJ-NP-VX-Y]\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;
}