/*=======================================================================
	汎用チェックルーチン（JavaScript）
		Create      2003/11/26
		Copyright   Citynet Inc.
		Language	JavaScript
		Useage		<script language='JavaScript' src='commChk.js'></script>
		Basis spec	アラートは出さない
					オブジェクトを引数にとる
					エラーは色を赤に、フォーカスを与える
Function List
		chkIsNull (obj)			// NULLチェック
		eregEmail (obj)			// E-mail 以外か？
		chkDateFmt (obj) 		// YYYY/MM/DDか？
		eregNum (obj) 			// 半角数字のみか？
		eregKana (obj) 			// 全角カタカナ or 半角SP or 全角SPか？
		eregHiragana (obj)		// 全角ひらがな or 半角SP or 全角SPか？
		eregKana2 (obj)	 		// 全角カタカナ or 半角英数 or 全角英数か？
		chkIsHanKana (obj)		// 半角カナが含まれているか？
History
------------------------------------------------------------------------
ID	Date		Name		Memo
------------------------------------------------------------------------
======================================================================*/

/*----------------------------------------------------------
 *	空白チェック
 *		args : IN	: src	: <input type="text"... Object
 *			 :------:-------:------------------------------
 *			 : OUT	: ret	: true == NULL, false == NOT NULL
 *		-----:---------------------------------------------
 * 		memo : 引数には、オブジェクトを渡す(text object etc..)
 *			 : 空白ならば true を返す
-----------------------------------------------------------*/
function chkIsNull (obj) {
	if (obj.value == "") {
		obj.style.backgroundColor="#ffd6ac";
		alert("必ずご登録ください！");
		obj.focus();
		return true;
	} else {
		obj.style.backgroundColor="";
		return false;
	}
}
/*----------------------------------------------------------
 *	文字数チェック
 *		args : IN	: src	: <input type="text"... Object
 *			 :------:-------:------------------------------
 *			 : OUT	: ret	: true == NULL, false == NOT NULL
 *		-----:---------------------------------------------
 * 		memo : 引数には、オブジェクトを渡す(text object etc..)
 *			 : 空白ならば true を返す
-----------------------------------------------------------*/
function chkLength (obj,byte) {
	if (obj.value != "" && obj.value.length > byte) {
		obj.style.backgroundColor="#ffd6ac";
		alert("文字数は" + (byte - 30) + "文字以内でご登録ください！");
		obj.focus();
		return false;
	} else {
		obj.style.backgroundColor="";
		return true;
	}
}

/*----------------------------------------------------------
 *	選択チェック
 *		args : IN	: src	: <input type="text"... Object
 *			 :------:-------:------------------------------
 *			 : OUT	: ret	: true == NULL, false == NOT NULL
 *		-----:---------------------------------------------
 * 		memo : 引数には、オブジェクトを渡す(text object etc..)
 *			 : 空白ならば true を返す
-----------------------------------------------------------*/
function chkIsNullSelected (obj) {

	matchstr = /選択してください/;
	str = new String(obj.options[obj.selectedIndex].text);
	
	if (matchstr.test(str)) {
		obj.style.backgroundColor="#ffd6ac";
		alert("必ずご選択ください！");
		obj.focus();
		return true;
	} else {
		obj.style.backgroundColor="";
		return false;
	}
}
/*-----------------------------------------------------------------------
 *	e-mail チェック（半角数字のみ）
 *		args : IN	: src	: <input type="text"... Object
 *			 :------:-------:-----------------------------------------
 *			 : OUT	: ret	: false == Email以外, true == Email
 *		-----:--------------------------------------------------------
 * 		memo : 引数には、オブジェクトを渡す(text object etc..)
 *			 : Email以外が含まれていたら false を返す
 *---------------------------------------------------------------------*/
function eregEmail (obj) {
	matchstr = /^\S+@\S+\.\S+$/;
	str = new String(obj.value);
	if (obj.value == "") return true;
	if (matchstr.test(str)) {
		obj.style.backgroundColor="";
		return true;
	} else {
		obj.style.backgroundColor="#ffd6ac";
		alert("メールアドレス形式でご登録ください！");
		obj.focus();
		obj.select();
		return false;
	}
}
/*-----------------------------------------------------------------------
 *	日付下請け関数
 *		args : IN	: nYY	: 年
 *			 :		: nMM	: 月
 *			 :		: nDD	: 日
 *			 :------:-------:-----------------------------------------
 *			 : OUT	: ret	: true == OK, false == NG
 *		-----:--------------------------------------------------------
 * 		memo : 閏年含み数値の正当性を検査
 *---------------------------------------------------------------------*/
function _validDate (nYY, nMM, nDD) {
	switch (nMM) {
	case 1: case 3: case 5: case 7:
	case 8: case 10: case 12:
		if ((nDD < 1) || (nDD > 31)) return false;
		break;
	case 4: case 6: case 9: case 11:
		if ((nDD < 1) || (nDD > 30)) return false;
		break;
	case 2:
		if ((nYY % 4) == 0) { // YES
			if (((nYY % 100) == 0) && ((nYY % 400) != 0)) { // NO
				if ((nDD < 1) || (nDD > 28)) return false;
			} else {
				if ((nDD < 1) || (nDD > 29)) return false;
			}
		} else {
			if ((nDD < 1) || (nDD > 28)) return false;
		}
		break;
	default:
		return false;
		break;
	}
	return true;
}
/*-----------------------------------------------------------------------
 *	日付チェック
 *		args : IN	: obj	: <input type="text"... Object
 *			 :		:		: YYYY/MM/DD
 *			 :------:-------:-----------------------------------------
 *			 : OUT	: ret	: true == OK, false == NG
 *		-----:--------------------------------------------------------
 * 		memo : 長さゼロの文字列も真を返すので、NULL Checkが
 *			   必要な場合は、別途検査すること
 *---------------------------------------------------------------------*/
function chkDateFmt (obj) {
	var str = new String (obj.value);
	var tmpStr;
	var okFlg = 1;
	matchstr = /[^0-9]/;

	if (str.length == 0) return true;

	if (str.substr(4,1) != "/") okFlg = 0;
	if (str.substr(7,1) != "/") okFlg = 0;

	if (matchstr.test(str.substr(0,4))) okFlg = 0;
	if (matchstr.test(str.substr(5,2))) okFlg = 0;
	if (matchstr.test(str.substr(8,2))) okFlg = 0;

	if (okFlg != 1) {
		obj.style.backgroundColor="#ffd6ac";
		alert("日付の形式に誤りがあります！(YYYY/MM/DD)");
		obj.focus();
		obj.select();
		return false;
	}
	
	tmpStr = str.substr(0,4) + str.substr(5,2) + str.substr(8,2);
	str = tmpStr;
	var len = str.length;
	
	if (matchstr.test(str)) {
		obj.style.backgroundColor="#ffd6ac";
		alert("日付の形式に誤りがあります！(YYYY/MM/DD)");
		obj.focus();
		obj.select();
		return false;
	} else {
		if (len == 8) {	//YYYYMMDD
			var nYY   = Number(str.substr(0,4));
			var nMM   = Number(str.substr(4,2));
			var nDD   = Number(str.substr(6,2));
			if (!_validDate (nYY, nMM, nDD)) {
				obj.style.backgroundColor="#ffd6ac";
				alert("日付の形式に誤りがあります！(YYYY/MM/DD)");
				obj.focus();
				obj.select();
				return false;
			}
		}
		else {
			obj.style.backgroundColor="#ffd6ac";
			alert("日付の形式に誤りがあります！(YYYY/MM/DD)");
			obj.focus();
			obj.select();
			return false;
		}
	}
	return true;
}
/*-----------------------------------------------------------------------
 *	数字チェック（半角数字のみ）
 *		args : IN	: src	: <input type="text"... Object
 *			 :------:-------:-----------------------------------------
 *			 : OUT	: ret	: false == 数字以外, true == 数字のみ
 *		-----:--------------------------------------------------------
 * 		memo : 引数には、オブジェクトを渡す(text object etc..)
 *			 : 数字以外が含まれていたら false を返す
 *---------------------------------------------------------------------*/
function eregNum (obj) {
	matchstr = /[^0-9]/;
	str = new String(obj.value);
	if (matchstr.test(str)) {
		obj.style.backgroundColor="#ffd6ac";
		alert("半角数字でご登録ください！");
		obj.focus();
		obj.select();
		return false;
	} else {
		obj.style.backgroundColor="";
		return true;
	}
}
/*-----------------------------------------------------------------------
 *	カタカナチェック（カタカナのみ）
 *		args : IN	: src	: <input type="text"... Object
 *			 :------:-------:-----------------------------------------
 *			 : OUT	: ret	: false == カナ以外, true == カナのみ
 *		-----:--------------------------------------------------------
 * 		memo : 引数には、オブジェクトを渡す(text object etc..)
 *			 : カタカナ以外が含まれていたら false を返す
 *---------------------------------------------------------------------*/
function eregKana (obj) {
	matchstr = /[^ア-ンーァィゥェォッャュョ 　]/;
	str = new String(obj.value);
	if (matchstr.test(str)) {
		obj.style.background="#ffd6ac";
		alert("全角カタカナでご登録ください！");
		obj.focus();
		obj.select();
		return false;
	} else {
		obj.style.background="";
		return true;
	}
}
/*-----------------------------------------------------------------------
 *	ひらがなチェック（ひらがなのみ）
 *		args : IN	: src	: <input type="text"... Object
 *			 :------:-------:-----------------------------------------
 *			 : OUT	: ret	: false == ひらがな以外, true == ひらがなのみ
 *		-----:--------------------------------------------------------
 * 		memo : 引数には、オブジェクトを渡す(text object etc..)
 *			 : ひらがな以外が含まれていたら false を返す
 *---------------------------------------------------------------------*/
function eregHiragana (obj) {
	matchstr = /[^あ-んーぁぃぅぇぉっゃゅょ 　]/;
	str = new String(obj.value);
	if (matchstr.test(str)) {
		obj.style.background="#ffd6ac";
		alert("全角ひらがなでご登録ください！");
		obj.focus();
		obj.select();
		return false;
	} else {
		obj.style.background="";
		return true;
	}
}
/*-----------------------------------------------------------------------
 *	カタカナチェック（半角英数・全角数字含む）
 *		args : IN	: src	: <input type="text"... Object
 *			 :------:-------:-----------------------------------------
 *			 : OUT	: ret	: false == カナ以外, true == カナのみ
 *		-----:--------------------------------------------------------
 * 		memo : 引数には、オブジェクトを渡す(text object etc..)
 *			 : カタカナが含まれていたら true を返す
 *---------------------------------------------------------------------*/
function eregKana2 (obj) {
	matchstr = /[^ア-ンーァィゥェォッャュョ 　()（）0-9a-zA-Z０-９]/;
	str = new String(obj.value);
	if (matchstr.test(str)) {
		obj.style.background="#ffd6ac";
		alert("カタカナでご登録ください！");
		obj.focus();
		obj.select();
		return false;
	} else {
		obj.style.background="";
		return true;
	}
}
/*-----------------------------------------------------------------------
 *	カタカナチェック（半角カタカナ）
 *		args : IN	: src	: <input type="text"... Object
 *			 :------:-------:-----------------------------------------
 *			 : OUT	: ret	: true == 半角カナがある, false == ない
 *		-----:--------------------------------------------------------
 * 		memo : 引数には、オブジェクトを渡す(text object etc..)
 *			 : 半角カタカナが含まれていたら true を返す
 *---------------------------------------------------------------------*/
function chkIsHanKana (obj) {
	obj.style.backgroundColor="";
	txt = "ｱｲｳｴｵｶｷｸｹｺｻｼｽｾｿﾀﾁﾂﾃﾄﾅﾆﾇﾈﾉﾊﾋﾌﾍﾎﾏﾐﾑﾒﾓﾔﾕﾖﾗﾘﾙﾚﾛﾜｦﾝｧｨｩｪｫｬｭｮ､｡｢｣ﾞﾟ･";
	for (i = 0; i < obj.value.length; i++) {
		if (txt.indexOf(obj.value.charAt(i),0) >= 0) {
			obj.style.backgroundColor="#ffd6ac";
			alert("半角カタカナのご登録はできません！");
			obj.select();
			return true;
		}
	}
	return false;
}
/*-----------------------------------------------------------------------
 *	チェックリスト、ラジオボタンの必須チェック
 *		args : IN	: src	: <input type="text"... Object
 *			 :------:-------:-----------------------------------------
 *			 : OUT	: ret	: true == 選択した, false == 選択なし
 *		-----:--------------------------------------------------------
 * 		memo : 引数には、オブジェクトを渡す(text object etc..)
 *			 : チェックされていなければ false を返す
 *---------------------------------------------------------------------*/
function chkObj (obj,name) {
	var flg = 0;
	for (i=0;i<obj.length;i++){
		if (obj[i].checked){
			flg = 1;
			return true;
		}
	}
	
	if (flg == 0) {
		alert("「" + name + "」が未選択です！");
		return false;
	}
}

