//################################################################################
//入力チェック用関数
//
//2007.10.22 Koji Kimura @ STARRYWORKS INC. http://www.starryworks.co.jp/
//
//################################################################################

var SW_InputCheck = {
	
	checkAll:function(arrConf) {
		var objForm;
		var strName;
		var arrCheck;
		var notNull;
		for ( key in arrConf ) {
			objForm = arrConf[key].form;
			strName = arrConf[key].name;
			arrCheck = arrConf[key].check;
			for ( key2 in arrCheck ) {
				//入力チェック
				notNull = this.checkMust(objForm,strName,"",false);
				switch(arrCheck[key2].check) {
					case "Must":
						if ( typeof(arrCheck[key2].flgErr) == "undefined" ) arrCheck[key2].flgErr = true;
						if ( typeof(arrCheck[key2].strDefault) == "undefined" ) arrCheck[key2].strDefault = "";
						if ( !this.checkMust(objForm,strName,arrCheck[key2].strDefault,arrCheck[key2].flgErr) ) return false;
						break;
					case "Int":
						if ( notNull ) {
							if ( typeof(arrCheck[key2].flgCheckMinus) == "undefined" ) arrCheck[key2].flgCheckMinus = false;
							if ( !this.checkInt(objForm,strName,arrCheck[key2].flgCheckMinus) ) return false;
						}
						break;
					case "Numeric":
						if ( notNull ) {
							if ( typeof(arrCheck[key2].flgCheckMinus) == "undefined" ) arrCheck[key2].flgCheckMinus = false;
							if ( !this.checkNumeric(objForm,strName,arrCheck[key2].flgCheckMinus) ) return false;
						}
						break;
					case "StrLen":
						if ( notNull ) {
							if ( !this.checkStrLen(objForm,strName,arrCheck[key2].valMaxLen) ) return false;
						}
						break;
					case "Range":
						if ( notNull ) {
							if ( !this.checkRange(objForm,strName,arrCheck[key2].valMin,arrCheck[key2].valMax) ) return false;
						}
						break;
				}
			}
		}
		return true;
	},
	
	
	//################################################################################
	// alertMsg(objForm, strMsg)
	// アラート出力後、フォームをフォーカス
	//
	// 引数：
	//	objForm			：対象のフォーム
	//	strMsg			：メッセージ
	// 
	// 戻り値：
	//	なし
	// 
	//################################################################################
	alertMsg:function(objForm, strFieldName, strMsg) {
		alert("入力内容にエラーがあります。\n"+strFieldName+"："+strMsg);
		objForm.focus();
	},
	
	//################################################################################
	// checkMust(objForm, strFieldName, flgErr=true, strDefault="")
	// フォーム入力必須チェック
	//
	// 引数：
	//	objForm			：対象のフォーム
	//	flgErr			：入力フォームの名称
	//	strFieldName	：入力フォームの名称
	//	strFieldName	：入力フォームの名称
	// 
	// 戻り値：
	//	入力あり		：true
	//	入力なし		：false
	// 
	//################################################################################
	checkMust:function(objForm, strFieldName, strDefault, flgErr) {
		if ( objForm.value == "" || objForm.value == strDefault ) {
			if ( flgErr ) this.alertMsg(objForm,strFieldName, "入力必須です。");
			return false;
		}
		return true;
	},
	
	//################################################################################
	// checkInt(objForm, strFieldName)
	// フォーム入力の整数チェック
	//
	// 引数：
	//	objForm			：対象のフォーム
	//	strFieldName	：入力フォームの名称
	// 
	// 戻り値：
	//	整数値			：true
	//	整数値以外		：false
	// 
	//################################################################################
	checkInt:function(objForm, strFieldName, flgCheckMinus) {
		if ( objForm.value != parseInt(objForm.value) ) {
			this.alertMsg(objForm,strFieldName, "半角で整数の数値を入力してください。");
			return false;
		}
		if ( flgCheckMinus && objForm.value < 0 ) {
			this.alertMsg(objForm,strFieldName, "プラスの数値を入力してください。");
			return false;
		}
		return true;
	},
	
	//################################################################################
	// checkNumeric(objForm, strFieldName)
	// フォーム入力の数値チェック
	//
	// 引数：
	//	objForm			：対象のフォーム
	//	strFieldName	：入力フォームの名称
	// 
	// 戻り値：
	//	数値			：true
	//	数値以外		：false
	// 
	//################################################################################
	checkNumeric:function(objForm, strFieldName, flgCheckMinus) {
		if ( isNaN(objForm.value) || objForm.value != parseFloat(objForm.value) ) {
			this.alertMsg(objForm,strFieldName, "半角で数値を入力してください。");
			return false;
		}
		if ( flgCheckMinus && objForm.value < 0 ) {
			this.alertMsg(objForm,strFieldName, "プラスの数値を入力してください。");
			return false;
		}
		return true;
	},
	
	//################################################################################
	// checkStrLen(objForm, strFieldName, valMaxLen)
	// フォーム入力の数値チェック
	//
	// 引数：
	//	objForm			：対象のフォーム
	//	strFieldName	：入力フォームの名称
	//	valMaxLen			：最大桁数
	// 
	// 戻り値：
	//	桁数内			：true
	//	桁数オーバー	：false
	// 
	//################################################################################
	checkStrLen:function(objForm, strFieldName, valMaxLen) {
		var strInput = ""+objForm.value;
		if ( strInput.length > valMaxLen ) {
			this.alertMsg(objForm,strFieldName, valMaxLen+"文字以内で入力してください。");
			return false;
		}
		return true;
	},
	
	//################################################################################
	// checkRange(objForm, valMin, valMax, strFieldName)
	// フォーム入力数値の範囲チェック
	//
	// 引数：
	//	objForm			：対象のフォーム
	//	valMin			：最小値
	//	valMin			：最大値
	//	strFieldName	：入力フォームの名称
	// 
	// 戻り値：
	//	範囲内			：true
	//	範囲外			：false
	// 
	//################################################################################
	checkRange:function(objForm, strFieldName, valMin, valMax) {
		if ( ! this.checkNumeric(objForm,strFieldName) ) return false;//数値チェック
		if ( objForm.value < valMin || objForm.value > valMax ) {
			this.alertMsg(objForm,strFieldName, ""+valMin+"以上"+valMax+"以下の数値を入力してください。");
			return false;
		}
		return true;
	}
};

