//----------------------------------------------------------------------
//【名前】
//	checkDate - 日付を調べる
//
//【形式】
//
//	checkDate
//		( year,		// 対象年
//		  month,	// 対象月
//		  day )		// 対象日
//
//【機能説明】
//		文字列が正しい日付かどうか調べる
// 
//【戻り値】
//		ret =  JSC_OK  /JSC_OK   // 正しい日付
//		ret =  JSC_NG /JSC_NG 
//【エラー】
//		なし
//
//【更新ログ】
//	2001.09.27 K.Sakamoto Create.
//	2002.01.18 K.Sakamoto Update.checkDate_proc()をフラグ:"JSC_chkyyyymmdd","JSC_notIptNG"で呼ぶ様に変更。
//----------------------------------------------------------------------
function checkDate(year, month, day)
{
	return checkDate_proc( year, month, day , JSC_chkyyyymmdd , JSC_notIptNG );
}

//----------------------------------------------------------------------
//【名前】
//	checkDate_proc - 日付を調べる
//
//【形式】
//
//	checkDate_proc( year, month, day ,dateflg, lenghflg )
//		※checkDate() 参照
//		dateflg		// 	JSC_chkyyyymmdd	→ 年月日を調べる
//					//	JSC_chkyyyymm	→ 年月  を調べる → 引数day部分には呼ぶ出し側でnullを設定すること！
//					//	JSC_chkmm		→ 月    を調べる → 引数year,day部分には呼ぶ出し側でnullを設定すること！
//
//		lenghflg	//  JSC_notIptNG   → value未入力 → JSC_NG
//					//	JSC_notIptOK				  → JSC_OK
//
//【機能説明】
//		文字列が正しい日付かどうか調べる
// 
//【戻り値】
//		ret =  JSC_OK  /JSC_OK   // 正しい日付である
//									※	 lenghflg	=  JSC_notIptNG 
//										  ・年/月/日: 全て入力されていること！
//										  ・正の半角数値が入力されている
//										  ・年：明治元年以降
//										  ・月：適切な月
//							 			  ・日：適切な日	* dateflg = JSC_chkyyyymm のときは無し。
//									※	 lenghflg	=  JSC_notIptOK  
//										  ・正の半角数値が入力されている
//										  ・年：明治元年以降
//										  ・月：適切な月
//							 			  ・日：適切な日	* dateflg = JSC_chkyyyymm のときは無し。
//		ret =  JSC_NG /JSC_NG
//【使用内部関数】
//	checkNum()				- 本ファイル内
//	getDaysOfMonth()		- 本ファイル内
//
//【エラー】
//		なし
//
//【更新ログ】
//	2002.07.12 M.Kodama Create.
//----------------------------------------------------------------------
function checkDate_proc( year, month, day , dateflg, lengthflg )
{
	//
	// mm入力
	//
	if( dateflg == JSC_chkmm )
	{
		// 正の半角数値かどうか調べる
		if ( checkNum(month) )
		{
			return JSC_NG;
		}
		// 月を調べる
		if (month < 1 || month > 12)
		{
			return JSC_NG;
		}
	}
	else
	{
		//
		// yyyymmdd入力
		//
		if( dateflg == JSC_chkyyyymmdd )
		{
			if( lengthflg == JSC_notIptNG )
			{
				// dataが入っているか調べる
				if (!year.length || !month.length || !day.length)
				{
					return JSC_NG;
				}
			}
			// 正の半角数値かどうか調べる
			if (checkNum(year) || checkNum(month)|| checkNum(day) )
			{
				return JSC_NG;
			}

			// 日付を調べる
			if (day < 1 || day > getDaysOfMonth(year, month))
			{
				return JSC_NG;
			}

		}
		//
		// yyyymm入力
		//
		else if( dateflg == JSC_chkyyyymm )
		{
			if(lengthflg == JSC_notIptNG)
			{
				// dataが入っているか調べる
				if (!year.length || !month.length )
				{
					return JSC_NG;
				}
			}
			// 正の半角数値かどうか調べる
			if (checkNum(year) || checkNum(month))
			{
				return JSC_NG;
			}
		}

		if (year < 1968 )		// 明治元年から入力可
		{
			return JSC_NG;
		}
		if (month < 1 || month > 12)		// 月を調べる
		{
			return JSC_NG;
		}
	}
	return JSC_OK;
}

//----------------------------------------------------------------------
//【名前】
//	getDaysOfMonth() - 日付を調べる
//
//【形式】
//
//	getDaysOfMonth
//		( year,		// 対象年
//		  month,	// 対象月
//		)
//【機能説明】
//		与えられた年、月に対してその月の最終日付を得る
// 
//【戻り値】
//		最終日付
//【エラー】
//		なし
//
//【更新ログ】
//	2001.09.27 K.Sakamoto Create.
//----------------------------------------------------------------------
function getDaysOfMonth(year, month)
{
	if (month == 2)
	{
		return isLeapYear(year) ? 29 : 28;
	}
	if (month <= 7 && month % 2 == 0)
	{
		return 30;
	}
	if (month >= 8 && month % 2 == 1)
	{
		return 30;
	}
	
	return 31;
}

//----------------------------------------------------------------------
//【名前】
//	isLeapYear(year) - うるう年かどうか調べる
//
//【形式】
//
//	isLeapYear
//		( year,		// 対象年
//		)
//【機能説明】
//		与えられた年に対してうるう年かどうか調べる
// 
//【戻り値】
//		最終日付
//【エラー】
//		なし
//
//【更新ログ】
//	2001.09.27 K.Sakamoto Create.
//----------------------------------------------------------------------
function isLeapYear(year)
{
   return (year % 4 == 0) && (year % 100 != 0 || year % 400 == 0);
}
//----------------------------------------------------------------------
//【名前】
//	checkNum - 正の半角数値かどうかを調べる
//
//【形式】
//
//	checkNum( chkValue )			
// 
//		chkValue		//	[I]	調べる値
//
//【機能説明】
//		文字列が正の半角数値かどうか調べる
// 
//【戻り値】
//		ret =  JSC_OK      // 正の半角数値
//		ret =  JSC_NG      // それ以外
//【エラー】
//		なし
//
//【更新ログ】
//	  2001.09.27 K.Sakamoto Create.
//----------------------------------------------------------------------
function checkNum(chkValue)
{
	var i,c;

	for( i = 0; i < chkValue.length; i++)
	{
		c = chkValue.charAt(i)
		if("0123456789".indexOf(c,0) < 0)
		{
			return JSC_NG;
		}
	}
	return JSC_OK;
}
//----------------------------------------------------------------------
//【名前】
//	checkNum_Comma - 正の半角数値かどうかを調べる（ カンマもOK! ）
//
//【形式】
//
//	checkNum_Comma( chkValue )			
// 
//		chkValue		//	[I]	調べる値
//
//【機能説明】
//		文字列が正の半角数値かどうか調べる（ カンマもOK! ）
// 
//【戻り値】
//		ret =  JSC_OK      // 正の半角数値、または「,」（ カンマ )
//		ret =  JSC_NG      // それ以外
//【エラー】
//		なし
//
//【更新ログ】
//	  2001.12.26 K.Sakamoto Create.
//----------------------------------------------------------------------
function checkNum_Comma( chkValue )
{
	var i,c;
	for( i = 0; i < chkValue.length; i++)
	{
		c = chkValue.charAt(i)
		if("0123456789,".indexOf(c,0) < 0)
		{
			return JSC_NG;
		}
	}
	return JSC_OK;
}
//----------------------------------------------------------------------
//【名前】
//	checkNum_Minus - 正の半角数値かどうかを調べる（ マイナスもOK! ）
//
//【形式】
//
//	checkNum_Minus( chkValue )
// 
//		chkValue		//	[I]	調べる値
//
//【機能説明】
//		文字列が正の半角数値かどうか調べる（ マイナスもOK! ）
// 
//【戻り値】
//		ret =  JSC_OK      // 正の半角数値、または「,」（ カンマ )
//		ret =  JSC_NG      // それ以外
//【エラー】
//		なし
//
//【更新ログ】
//	  2002.05.13 M.Kodama Create.
//----------------------------------------------------------------------
function checkNum_Minus( chkValue )
{
	var i,c;

	// 1文字目が"-"または半角数値で無い場合エラー
	if("-0123456789,".indexOf(chkValue.charAt(0),0) < 0)
	{
		return JSC_NG;
	}

	for( i = 1; i < chkValue.length; i++)
	{
		c = chkValue.charAt(i)
		if("0123456789,".indexOf(c,0) < 0)
		{
			return JSC_NG;
		}
	}
	return JSC_OK;
}
//----------------------------------------------------------------------
//【名前】
//	checkNum_Minus_Point - 正の半角数値かどうかを調べる（ マイナス、プラス、小数点もOK! ）
//
//【形式】
//
//	checkNum_Minus_Point( chkValue )
// 
//		chkValue		//	[I]	調べる値
//
//【機能説明】
//		文字列が正の半角数値かどうか調べる（ マイナスもOK! ）
// 
//【戻り値】
//		ret =  JSC_OK      // 正の半角数値、または「,」（ カンマ )
//		ret =  JSC_NG      // それ以外
//【エラー】
//		なし
//
//【更新ログ】
//	  2002.09.30 M.Kodama Create.
//----------------------------------------------------------------------
function checkNum_Minus_Point( chkValue )
{
	var i,c;
	var pointflg = JSC_OFF;

	// 1文字目が"-""+"または半角数値で無い場合エラー
	if("+-0123456789".indexOf(chkValue.charAt(0),0) < 0)
	{
		return JSC_NG;
	}
	else
	{
		// 1文字目が"-""+"の時は、次の文字が"."の場合エラー
		if("+-".indexOf(chkValue.charAt(0),0) >= 0)
		{
			if(".".indexOf(chkValue.charAt(1),0) >= 0)
			{
				return JSC_NG;
			}
		}
	}

	for( i = 1; i < chkValue.length; i++)
	{
		c = chkValue.charAt(i)

		// "."または半角数値で無い場合エラー
		if(".0123456789,".indexOf(c,0) < 0)
		{
			return JSC_NG;
		}
		// 小数点チェック
		else
		{
			if(".".indexOf(c,0) >= 0)
			{
				if(pointflg == JSC_OFF)
				{
					pointflg = JSC_ON;
				}
				else
				{
					// 2つ以上の小数点はエラー
					return JSC_NG;
				}
			}
		}

	}
	return JSC_OK;
}
//----------------------------------------------------------------------
//【名前】
//	checkZero - 0かどうかを調べる
//
//【形式】
//
//	checkNum( chkValue )			
// 
//		chkValue		//	[I]	調べる値
//
//【機能説明】
//		文字列が0かどうか調べる
// 
//【戻り値】
//		ret =  JSC_OK      // すべて0
//		ret =  JSC_NG      // それ以外
//【エラー】
//		なし
//
//【更新ログ】
//	  2002.01.11 K.Sakamoto Create.
//----------------------------------------------------------------------
function checkZero(chkValue)
{
	var i,c;
	if( chkValue == "")
	{
		return JSC_NG;
	}
	
	for( i = 0; i < chkValue.length; i++)
	{
		c = chkValue.charAt(i)
		if( c != 0 )
		{
			return JSC_NG;
		}
	}
	return JSC_OK;
}
//----------------------------------------------------------------------
//【名前】
//	checkByte - 入力文字数を調べる
//
//【形式】
//
//	limitChars( obj , limit )			
// 
//		obj			//	[I]	入力文字のelements要素 ( document.formName.elements['Name'] )
//		limit		//	[I]	入力制限文字数
//
//【機能説明】
//		入力文字数が制限文字数以内かどうか調べる
// 
//【戻り値】
//		ret =  JSC_OK      // 入力制限文字数内
//		ret =  JSC_NG      // それ以外
//【エラー】
//		なし
//
//【更新ログ】
//	  2001.09.27 K.Sakamoto Create.
//----------------------------------------------------------------------
function checkByte( obj, limit )
{
	var bytes = 0;
	var i;

	for(i=0; i < obj.value.length; i++)
	{
		bytes += ( (obj.value.charAt(i) >= "ｦ"&& obj.value.charAt(i)<="ﾝ" )?1:( escape(obj.value.charAt(i) ).length > 3?2:1) );
	}
	if(bytes > limit)
	{
		return JSC_NG;
	}

	return JSC_OK;
}

//----------------------------------------------------------------------
//【名前】
//	checkByte_NonForm - 入力文字数を調べる(フォーム部品以外)
//
//【形式】
//
//	checkByte_NonForm( str , limit )
// 
//		str			//	[I]	入力文字
//		limit		//	[I]	入力制限文字数
//
//【機能説明】
//		入力文字数が制限文字数以内かどうか調べる(フォーム部品以外)
// 
//【戻り値】
//		ret =  JSC_OK      // 入力制限文字数内
//		ret =  JSC_NG      // それ以外
//【エラー】
//		なし
//
//【更新ログ】
//	  2001.12.05 M.kodama Create.
//----------------------------------------------------------------------
function checkByte_NonForm( str, limit )
{
	var i;
	var bytes = 0;

	for(i=0; i < str.length; i++)
	{
		bytes += ( (str.charAt(i) >= "ｦ"&& str.charAt(i)<="ﾝ" )?1:( escape(str.charAt(i) ).length > 3?2:1) );
	}
	if(bytes > limit)
	{
		return JSC_NG;
	}

	return JSC_OK;
}

//----------------------------------------------------------------------
//【名前】
//	checkTextFill - 空欄かどうかを調べる
//
//【形式】
//
//	checkTextFill( chkValue )			
// 
//		chkValue		//	[I]	入力文字
//
//【機能説明】
//		空欄かどうかを調べる
// 
//【戻り値】
//		ret =  JSC_OK      // 
//		ret =  JSC_NG      // 空欄
//【エラー】
//		なし
//
//【更新ログ】
//	  2001.09.27 K.Sakamoto Create.
//----------------------------------------------------------------------
function checkTextFill( chkValue ) 
{
	if( !chkValue )
	{
		return JSC_NG;
	}
	
	return JSC_OK;
}
//----------------------------------------------------------------------
//【名前】
//	checkPulldownFill - プルダウン項目が空欄かどうかを調べる
//
//【形式】
//
//	checkPulldownFill( chkValue )			
// 
//		chkValue		//	[I]	入力文字
//
//【機能説明】
//		プルダウン項目が空欄かどうかを調べる
//		
//		※ 「空白」のValueは-3にしておくこと！！
// 
//【戻り値】
//		ret =  JSC_OK      // 
//		ret =  JSC_NG      // 空欄
//【エラー】
//		なし
//
//【更新ログ】
//	  2001.10.03 K.Sakamoto Create.
//	  2002.02.22 M.Kodama Update. 動的にセレクトボックスが変化した時に空欄だけValueが空になることへの処理追加
//----------------------------------------------------------------------
function checkPulldownFill( chkValue )
{
	if( chkValue == -3 || chkValue.length == 0)
	{
		return JSC_NG;
	}
	return JSC_OK;
}
//----------------------------------------------------------------------
//【名前】
//	checkRadioFill - ラジオボタンがチェックされているかどうか調べる
//
//【形式】
//
//	checkRadioFill( obj )
// 
//		obj		//	[I] elements までの要素 ( document.formName.elements['radioName'] )
//
//【機能説明】
//		ラジオボタンがチェックされているかどうかを調べる
// 
//【戻り値】
//		ret =  JSC_OK      // 
//		ret =  JSC_NG      // チェックされていない
//【エラー】
//		なし
//
//【更新ログ】
//	  2001.10.19 K.Sakamoto Create.
//----------------------------------------------------------------------
function checkRadioFill( obj )
{
	var i;

	if( obj.length )
	{
		for(i = 0; i < obj.length; i++)
		{
			if( obj[i].checked == true )
			{
				return JSC_OK;
			}
		}
	}
	
	else
	{
		if( obj[i].checked == true )
		{
			return JSC_OK;
		}
	}
	
	return JSC_NG;
}

//-----------------------------------------------------------------------------------
//【名前】
//	checkCBoxFill - チェックボックスがチェックされているかどうか調べる
//
//【形式】
//
//	checkCBoxFill( objForm,CBoxName )
// 
//		objForm		//	[I] Form までの要素 ( document.formName )
//		CBoxName	//  [I] チェックしたいcheckBoxname
//【機能説明】
//		チェックボックスがチェックされているかどうか調べる
// 
//【戻り値】
//		ret =  JSC_OK      // 
//		ret =  JSC_NG      // チェックされていない
//【エラー】
//		なし
//
//【更新ログ】
//	  2001.10.19 K.Sakamoto Create.
//-----------------------------------------------------------------------------------
function checkCBoxFill( objForm, CBoxName )
{
	if( objForm[CBoxName].checked == false )
	{
		return JSC_NG;
	}
	
	return JSC_OK;
}
//-----------------------------------------------------------------------------------
//【名前】
//	checkGrpCBoxFill - 同グループのチェックボックスが１つ以上チェックされているかどうか調べる
//
//【形式】
//	checkGrpCBoxFill( objForm, CBoxName, CBoxCnt )
// 
//		objForm	 	formまでの要素 document.formName
//		CBoxName	チェックボックスname
//		CBoxCnt		チェックボックス数 ( 同グループ内 )
//【条件】
//  調べたいグループの'CBoxName'は すべて同じであること.
//	その後の添え字（ 1 〜 ) によってそれぞれのチェックボックスを区別する.
//	ex) objForm.elements['CBoxName'+ i] )	// i : 添え字
//
//
//【機能説明】
//	同グループ内（任意）のチェックボックスが1つ以上チェックされているかどうか調べる
// 
//【戻り値】
//		ret =  JSC_OK      // 
//		ret =  JSC_NG      // チェックされていない
//【エラー】
//		なし
//
//【更新ログ】
//	  2001.10.19 K.Sakamoto Create.
//----------------------------------------------------------------------------------
function checkGrpCBoxFill( objForm, CBoxName, CBoxCnt)
{
	var i;
	
	for(i = 1 ; i <= CBoxCnt; i++)
	{
		if( objForm.elements[CBoxName+i].checked == true )
		{
			return JSC_OK;
		}
	}
	
	return JSC_NG;
}
//----------------------------------------------------------------------
//【名前】
//	checkNaN - 半角数字かどうか調べる
//
//【形式】
//
//	checkNaN( chkValue )			
// 
//		chkValue	//	[I]	入力文字
//
//【機能説明】
//		半角数字かどうか調べる
//
//【戻り値】
//		ret =  JSC_OK      // 半角数字
//		ret =  JSC_NG      // 上記以外
//【注意事項】
//	・この関数は"."を含んだ数字もtrueを返す。
//		※ ".3" → ture "3." →ture と判断する。ので、問題がある場合は使用側でチェックを行ってください。
//【エラー】
//		なし
//
//【更新ログ】
//	  2001.10.11 K.Sakamoto Create.
//	  2002.04.22 K.Sakamoto Update. 【注意事項】追加
//----------------------------------------------------------------------
function checkNaN( chkValue )
{
	if( isNaN(chkValue) == true )
	{
		return JSC_NG;
	}
	
	return JSC_OK;
}

