/*<表單檢查JS函式庫> Spike 2007.12.11
*/
function join_date(date_name, separator) //傳入日期名稱及其索引，傳回其標準形式(Y-m-d)，以利chk_date()之檢查
{
	if(typeof(separator) == 'undefined')
		separator = '-';
	var string = '';
	for(date_ctr = 0; date_ctr <= 2; date_ctr++)
		string += document.getElementById(date_name + date_ctr).value + ((date_ctr < 2) ? separator : '');
	return  string;
}

function join_addr(string, separator) //傳入地址名稱及分隔字元, 傳回用分隔字串組合後的地址
{
	if(typeof(separator) == 'undefined')
		separator = ',';
	return join_date(string, separator);
}

function chk_mail(s_mail,string,must,max)
{
	var tmp_msg = chk_text(s_mail,string, must, max);
	if(tmp_msg) return tmp_msg;
	var e =trim(string);
	if(e != "") 
	{
         if(!/(\S)+[@]{1}(\S)+[.]{1}(\w)+/.test(e)) 
			return '請輸入正確e-mail格式\n';
         else
			return ''; //正確
     }
	return '';
}

function chk_acc(caption, string, min, max) //檢查帳號: 以字母開頭, 不能有空白
{
	var tmp_msg = chk_text(caption, string, min, max);
	if(tmp_msg) return tmp_msg;
	var rule = new RegExp('^[A-Za-z]\\S{3,}$');
	if(!rule.test(string))
		return caption + ' 必須以字母開頭且不能有空白\n';
	return '';
}

function chk_addr(caption, string, must) //檢查地址格式(縣市,分區,地址)
{
	if(must && string.length <= 2)
		return caption + ' 必須輸入\n';
	var rule = new RegExp('(.+),(.+),(.+)');
	if(string.length > 2 && !rule.test(string))
		return caption + ' 輸入不完整\n';
	return '';
}

function chk_auth_id(caption, string, must) //檢查身份證字號
{
	var tmp_msg = chk_text(caption, string, must, 10);
	if(tmp_msg) return tmp_msg;
	var rule = new RegExp('^[A-Z][A-Z12]{1}\\d{8}');
	if(string.length > 0 && !rule.test(string))
		return caption + ' 輸入不正確\n';
	return '';
}

function chk_date(caption, string, must, roc) //檢查日期格式(Y-M-D)
{
	if(must && string.length <= 2)
		return caption + ' 必須輸入\n';
	//使用民國年或西元年樣板
	pattern = (roc ? '^[0-1]{0,1}[0-9]{1,2}' : '^[12]{0,1}[0-9]{2,3}') + '-[0-1]{0,1}[0-9]{1}-[0-3]{0,1}[0-9]{1}$';
	var rule = new RegExp(pattern);
	if(string.length > 2 && !rule.test(string))
		return caption + ' 輸入格式有誤\n';
	return '';
}

function chk_deci(caption, string,must ,min, max) //檢查小數格式
{
	if(must==1 && string.length ==0)
		return caption + ' 必須輸入\n';
	var rule = new RegExp('[0-9.]{'+string.length+'}'); 
	if(!rule.test(string))
		return caption + ' 必須為數字或小數\n';
	if(string < min || string > max)
		return caption + ' 必須介於' + min + '~' + max + '\n';
	deci_count=0;
	for(deci=0;deci<=(string.length-1);deci++)
	{
		if(string.substr(deci,1)=='.')
			deci_count=deci_count+1;
	}
	if(deci_count>1)
		return caption + '只能一個小數點\n';
	if(string.substr(0,1)=='.')
		return caption + '第一個字不能為小數點\n';
	return '';
}

function chk_num(caption, string, must,min, max) //檢查數字
{
	if(must==1 && string.length ==0)
		return caption + ' 必須輸入\n';
	var rule = new RegExp('[0-9]{'+string.length+'}'); 
	if(!rule.test(string))
		return caption + ' 必須為數字\n';
	if(string < min || string > max)
		return caption + ' 必須介於' + min + '~' + max + '\n';
	return '';
}

function chk_plate(caption, string, min, max) //檢查車牌 (全英數及一個"-", )
{
	var regexp = new RegExp('(^[A-Z0-9]{2,3}-[0-9]{3,4}$)|(^[0-9]{3,4}-[A-Z0-9]{2,3}$)'); //允許"AB[C]-012[3]"或012[3]-AB[C]
	if(!regexp.test(string))
		return caption + string + ' 是無效的號碼' + '\n';
	return '';
}

function chk_sel(caption, string, custom) //檢查下拉選單, custom表自訂選單(無效判斷為0而非空字串)
{
	invalid_val = (typeof(custom) == 'undefined') ? '' : 0;
	if(!string || string == invalid_val)
		return caption + ' 必須選擇\n';
	return '';
}

function chk_text(caption, string,min, max) //檢查字串長度
{
	if(string.length < min)
			return caption + ' 最少必須' + min + '個字\n';
		if(string.length > max)
			return caption + ' 不能超過' + max + '字\n';
	return '';
}

function chk_today(caption, string, must, roc, mode) //檢查日期是否早mode=0或晚mode=1於今日
{
	//1.檢查日期格式
	tmp_msg = chk_date(caption, string, must, roc);
	if(tmp_msg) return tmp_msg;
	
	//2.與今日日期比對
	today = new Date();
	today = (today.getFullYear() - 1911) + '-' + (today.getMonth() + 1) + '-' + today.getDate();
	
	//alert('輸入日期:' + string + (mode ? '要晚於' : '要早於') + '今日日期:' + today);
	
	if(!mode && string > today)
		return caption + ' 不能晚於今日(' + today + ')\n';
	else if(mode && string < today)
		return caption + ' 不能早於今日(' + today + ')\n';
	else return '';
}
	
function chk_pw(caption, string0, string1, min, max) //檢查密碼一致性及長度
{
	var tmp_msg = chk_text(caption, string0, min, max);
	if(tmp_msg) return tmp_msg;
	var rule = new RegExp('[a-zA-Z0-9]{'+string0.length+'}'); //密碼只支援英文和數字
	if(!rule.test(string0))
		return caption + ' 只能輸入英文和數字\n';
	if(string0 != string1)
		return caption + ' 不一致\n';
	return '';
}

function chk_dir(caption, string, min, max) //檢查目錄//商品編號
{
	var tmp_msg = chk_text(caption, string, min, max);
	if(tmp_msg) return tmp_msg;
	var rule = new RegExp('[a-zA-Z0-9-_]{'+string.length+'}'); //目錄只支援英文和數字和-_
	if(!rule.test(string))
		return caption + ' 只能輸入英文和數字和特殊字"-","_"\n';
	return '';
}

function chk_phone(caption, string, min, max) //檢查電話及手機格式
{
	var tmp_msg = chk_text(caption, string, min, max);
	if(tmp_msg) return tmp_msg;
	var rule = new RegExp('[0-9+-/#]{'+string.length+'}'); //密碼只支援英文和數字
	if(!rule.test(string))
		return caption + ' 錯誤格式\n';
	return '';
}

