/*************************************************************
	指定focus的控制項
	輸入：
		control 控制項
	輸出：
		true focus成功
*************************************************************/
function _focus(control,msg)
{
	if (msg!=null) alert(msg);
	try {
		control.focus();
		return true;
	}
	catch(e){
	}
	return false;
}
	
/*************************************************************
	將字串頭尾的空白字元去除
	輸入：
		str 字串
	輸出：
		string 去除頭尾空白字元後的字串
*************************************************************/
function trim(str) 
{
   return str.replace(/^\s*|\s*$/g, "");
}

/********************************************
	檢查指定的控制項是否為空字串並focus
	Input:
		src   控制項
		msg   顯示的訊息
	Output:
		ture 為空字串
********************************************/
function isEmptyValue(src,msg)
{
	if (src.type != 'HIDDEN' && !src.disabled && !src.readOnly)
	{
		var str = trim(src.value);
		if(trim(str).length == 0)
		{
			if (msg != null) 
			{
				alert(msg);
				_focus(src);
			}
			return true;
		}
	}
	return false;
}

/********************************************
	檢查指定的物件名稱的值是否為空字串並focus
	Input:
		name  名稱
		msg   顯示的訊息
	Output:
		ture 為空字串
********************************************/
function isEmptyValueS(name,msg)
{
	var srcs = document.getElementsByName(name);
	for (var iList=0; iList<srcs.length; iList++)
	{
		if (isEmptyValue(srcs[iList],msg))
			return true;
	}
	return false;
}
	
/*************************************************************
	檢查輸入的字串是否為合法的小時
	輸入：
		src 控制項
	輸出：
		true 是， false 否
*************************************************************/
function isHour(src,msg)
{ 
	var value = trim(src.value);
	if (value.length==0) return true;
	var patten = /^[0-9]{1,2}$/;
	if (patten.test(value))
	{
		var hour = new Number(value);
		if (hour>=0 && hour<=23)
		{
			if (hour<10) hour="0" + hour;
			src.value = hour;
			return true;
		}
	}
	if (msg!=null)
	{
		_focus(src,msg);
	}
	return false;
}

/*************************************************************
	檢查輸入的字串是否為合法的西元年份
	輸入：
		src 控制項
	輸出：
		true 是， false 否
*************************************************************/
function isYear(src,msg)
{ 
	var value = trim(src.value);
	if (value.length==0) return true;
	var patten = /^[0-9]{4}$/;
	if (patten.test(value))
	{
		var year = new Number(value);
		if (year>1911)
		{
			src.value = year;
			return true;
		}
	}
	if (msg!=null)
	{
		_focus(src,msg);
	}
	return false;
}


/*************************************************************
	檢查輸入的字串是否為合法的日期
	輸入：
		src 控制項
		sp 分隔字串
	輸出：
		true 是， false 否
*************************************************************/
function isDate(src,msg)
{
	var value = trim(src.value);
	if (value.length==0) return true;
	var dDate = stringToDate(value,"-");
	if (dDate != null)
	{
		src.value = getDateString(dDate,"-");
		return true;
	}
	else 
	{
		if (msg!=null)
		{
			_focus(src,msg);
		}
		return false;
	}
}	
	
/*************************************************************
	將日期字串轉成日期
	輸入：
		value 日期字串 20090105 or 2009-01-05
		sp 分隔字串
	輸出：
		date
*************************************************************/
function stringToDate(value,sp)
{
	var aDate=value.split(sp);
	var year; var month; var day;
	if (aDate.length==1)
	{
		if (value.length==8)
		{
			year = new Number(value.substr(0,4));
			month = new Number(value.substr(4, 2));
			day = new Number(value.substr(6, 2));
		}
	}
	else if (aDate.length==3)
	{
		year = new Number(aDate[0]);
		month = new Number(aDate[1]);
		day = new Number(aDate[2]);
	}

	if (year>0 && month>0 && day>0)
	{
		dDate=new Date(year,month-1,day);
		if (!isNaN(dDate) 
			&& dDate.getFullYear() == year
			&& dDate.getMonth() == (month-1)
			&& dDate.getDate()== day)
		return dDate;
	}
	
	return null;
	
}
	
/*************************************************************
	將日期轉成字串
	輸入：
		dDate 日期
		sp 分隔字串
	輸出：
		string
*************************************************************/
function getDateString(dDate,sp)
{
	var sMonth=dDate.getMonth()+1;
	if (sMonth<10) sMonth='0'+sMonth;
	var sDate=dDate.getDate();
	if (sDate<10) sDate='0'+sDate;
	return dDate.getFullYear() + sp + sMonth + sp + sDate;
}
	
/*************************************************************
	檢查是否為本國人身份證字號
	輸入：
		src 控制項
		msg 錯誤訊息
	輸出：
		true 是本國人
*************************************************************/
function isID(src, msg, ischkarc, sexname)
{
	var value = new String(trim(src.value));
	if (value.length==0) return true;
	value = value.toUpperCase();
	var patten = /^[A-Z][12][0-9]{8}$/;
	if (patten.test(value))
	{
		h = "ABCDEFGHJKLMNPQRSTUVXYWZIO";
		x = 10 + h.indexOf(value.substring(0, 1));
		chksum = (x - (x % 10)) / 10 + (x % 10) * 9;

		for(i = 1; i < 9; i++)
		{
			chksum += value.substring(i, i + 1) * (9 - i);
		} 
		chksum = (10 - chksum % 10) % 10 

		if(chksum == value.substring(9, 10))
		{
			src.value = value;
			
			if (sexname!=null)
			{
				var sexvalue = value.substring(1, 2);
				var sexs = document.getElementsByName(sexname);
				for (iList=0; iList<sexs.length; iList++)
				{
					if (sexs[iList].value == sexvalue)
					{
						sexs[iList].checked = true;
						break;
					}
				}
			}
			return true;
		}
	}
	
	if (ischkarc)
	{
		return isARCID(src, msg);
	}
	else
	{
		if (msg!=null)
			_focus(src,msg);
		return false;
	}
}

/*************************************************************
	檢查是否為外國人身份證字號
	輸入：
		src 控制項
		msg 錯誤訊息
	輸出：
		true 是外國人
*************************************************************/
function isARCID(src, msg)
{
	try
	{
		var value = new String(trim(src.value));
		value = value.toUpperCase();
		var patten=/^[A-Z][A-Z][0-9]{8}$/;
		if (patten.test(value))
		{
			h="ABCDEFGHJKLMNPQRSTUVXYWZIO";
			x=(10+h.indexOf(value.substring(0,1))).toString();
			
			chksum=(x.substring(1,2)*9)%10+x.substring(0,1)*1+h.indexOf(value.substring(1,2))%10*8 ;
			
			for(j=2; j<9; j++)
			{
				chksum=(chksum+(value.substring(j,j+1)*(9-j))%10)%10;
			}
			chksum=(10-chksum)%10;
	
			if (value.substring(9,10)==chksum)
			{
				src.value = value;
				return true;
			}
		}
	}
	catch(e)
	{
	}
	if (msg!=null)
		_focus(src,msg);
	return false;
}
	
/*************************************************************
	檢查郵遞區號格式是否正確
	輸入：
		src 控制項
		msg 錯誤訊息
	輸出：
		true 正確
*************************************************************/
function isZipCode(src, msg)
{
	var value = new String(trim(src.value));
	if (value.length==0) return true;
	var patten=/^[0-9]{3,5}$/;
	if (patten.test(value))
		return true;
	
	if (msg!=null)
		_focus(src,msg);
	return false;
}

/*************************************************************
	檢查行動電話是否正確
	輸入：
		src 控制項
		msg 錯誤訊息
	輸出：
		true 正確
*************************************************************/
function isMobilePhone(src, msg)
{
	var value = new String(trim(src.value));
	if (value.length==0) return true;
	var patten=/^[0][9][0-9]{8}$/;
	if (patten.test(value))
		return true;

	if (msg!=null)
		_focus(src,msg);
	return false;
}
	
/*************************************************************
	檢查E-mail是否正確
	輸入：
		src 控制項
		msg 錯誤訊息
	輸出：
		true 正確
*************************************************************/
function isMail(src, msg)
{
	var value = new String(trim(src.value));
	if (value.length==0) return true;
	var patten = /^[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)[_]?@([A-Za-z0-9]+)(([\.\-]?[a-zA-Z0-9]+)*)\.([A-Za-z]{2,})$/;
	if (patten.test(value))
		return true;

	if (msg!=null)
		_focus(src,msg);
	return false;
}

/*************************************************************
	取得radio或checkbox的選項值
	輸入：
		name 控制項名稱
		msg 錯誤訊息
	輸出：
		value 選項值
*************************************************************/
function getCheckValue(name,msg)
{
	var srcs = document.getElementsByName(name);
	for (var iList=0; iList<srcs.length; iList++)
	{
		var src = srcs[iList];
		if(src.checked)
			return src.value;
	}

	if (msg != null) 
	{
		alert(msg);
		_focus(srcs[0]);
	}
	return null;
}

function isCheckValue(name,match)
{
	var srcs = document.getElementsByName(name);
	for (var iList=0; iList<srcs.length; iList++)
	{
		var src = srcs[iList];
		if(src.checked)
		{
			if (src.value == match)
				return true;
		}
	}

	return null;
}

function getCtrlByName(name)
{
	var srcs= document.getElementsByName(name);
	if (srcs.length>0) return srcs[0];
}

/**
 * 檢查是否為整數值
 * @param src 控制項
 * @param msg 錯誤訊息
 * @param min 最小值
 * @return true 是整數值
 */
function isInteger(src,msg,min,max,overmsg)
{
	if (src.readOnly || src.disabled) return true;
	var value = trim(src.value);
	if (value.length==0) return true;
	if (value.indexOf(".")>-1)
	{
		value = value.substr(0,value.indexOf("."));
	}
	var num = new Number(value);

	if (!isNaN(num))
	{
		if(min==null || num>=min)
		{
			if(max==null || num<=max)
			{
				src.value=num;
				return true;
			}
			else
			{
				if (overmsg!=null)
					msg = overmsg;
			}
		}
	}

	if (msg!=null)
	{
		_focus(src,msg);
	}
	return false;
}
 
function getFileName(file)
{
	if (file==null) return "" ;
	var fileName =file.value;
	var start = fileName.lastIndexOf("\\");
	fileName = fileName.substr(start+1);
	return fileName.toUpperCase();
}

function isinUrl(src, msg)
{
	var value = new String(trim(src.value));
	if (value.length==0) return true;
	value=value.toUpperCase();
	var patten = /^HTTP:\/\//;
	if (!patten.test(value))
		return true;

	if (msg!=null)
		_focus(src,msg);
	return false;
}
