//---------------------------------------------------------------------------
//
// 入力項目チェック関数群
//
//                                            (C)1999, Yuuki Aizawa
//                                            E-mail: yuuki@mte.biglobe.ne.jp
//                                            1999.03.10 製作
//                                            1999.04.01 公開
//---------------------------------------------------------------------------
// このファイルに関する一切の編集、一部又はすべての複製、及び、再配布を禁止します。
// バグ・要望などは、上記のメールアドレスへお願いしします。
//-----------------------------------------------------------------------------

//---------------------------------------------------------------------------
// 検査文字種
//---------------------------------------------------------------------------
var NumberString = "1234567890-+";
var LetterString = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
var NumLetString = "1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
var MailString = "1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_-.";
var BadString = "<>\"'%;()&+-";

var Non = "0";
var Input = "1";
var Select = "2";
var Email = "3";
var Number = "4";
var Letter = "5";
var NumberLetter = "6";
var CharCheck = "7";
var EtcSelect = "A";
var EtcInput = "B";

//---------------------------------------------------------------------------
// 文字列検査
//
// CheckString( String, CheckMode );
//
// 引数     String : 検査する文字列
//            Mode : 検査の種類 ( Number, Letter, NumLetter )
//                         Number - 半角数字検査
//                         Letter - 半角英字検査
//                      NumLetter - 半角英数字検査
//
// 戻り値 異常なし : true
//---------------------------------------------------------------------------
function CheckString( String, CheckMode )
{
	for ( i = 0 ; i < String.length ; i++ )
		{
		Charactor = String.charAt( i );

		if( CheckMode.indexOf( Charactor, 0 ) == -1 )
			{
			return false;
			}
		}

	return true;
}

//---------------------------------------------------------------------------
// 文字列検査２
//
// CheckString2( String, CheckMode );
//
// 引数     String : 検査する文字列
//            Mode : 検査の種類 ( Non, Input )
//                         特殊文字不可　（ < > " ' ( ) % ; & + - ）
//
// 戻り値 異常なし : true
//---------------------------------------------------------------------------
function CheckString2( String, CheckMode )
{
	for ( i = 0 ; i < String.length ; i++ )
		{
		Charactor = String.charAt( i );

		if( CheckMode.indexOf( Charactor, 0 ) != -1 )
			{
			return false;
			}
		}

	return true;
}

//---------------------------------------------------------------------------
// メールアドレス検査
//
// CheckEmail( Address );
//
// 引数    Address : 検査するアドレス文字列
//
// 戻り値 異常なし : true
//---------------------------------------------------------------------------
function CheckEmail( Address )
{
	//＠の探索
	if( ( p = Address.indexOf( "@", 1 ) ) == -1 )
		{
		return false;
		}

	//＠までの検査
	for ( i = 0; i < p; i++ )
		{
		Charactor = Address.charAt( i );

		if( MailString.indexOf( Charactor, 0 ) == -1 )
			{
			return false;
			}
		}

	//＠以降の検査
	CommaMode = 0;
	for ( i = p+1; i < Address.length; i++ )
		{
		Charactor = Address.charAt( i );

		if( Charactor == "." )
			{
			CommaMode = 1;
			if( i == p+1 || i == Address.length - 1 )
				{
				return false;
				}
			}
		else if( MailString.indexOf( Charactor, 0 ) == -1 )
			{
			return false;
			}
		}

	if( CommaMode == 0 )
		{
		return false;
		}

	return true;
}

//---------------------------------------------------------------------------
// フォーム内容のチェック
//
// CheckForm( FormName, Modes );
//
// 引数   FormName : 検査するフォーム
//           Modes : 検査種類
//
// 戻り値 異常なし : true
//---------------------------------------------------------------------------
function CheckForm( FormName, Modes )
{
	var ErrorMessage = "";
	var EtcMode = "";
	var Control = "";

	for( var i=0; i < FormName.length; i++ )
		{
		var Mode  = Modes[i].charAt( 0 );
		var Name  = FormName.elements[i].name;
		var Value = FormName.elements[i].value;

		if( Mode == CharCheck &&
			( Value != "" && !CheckString2( Value, BadString ) ) )
			{
			ErrorMessage += "Please input a " + Name + " except special characters.\n";
			continue;
			}
		if( Mode == Input  && 
			( Value == "" || !CheckString2( Value, BadString ) ) )
			{
			ErrorMessage += "Please input a " + Name + " except special characters.\n";
			continue;
			}
		if( Mode == Select  && Value == "" )
			{
			ErrorMessage += "Please choose a " + Name + ".\n";
			continue;
			}
		if( Mode == Email && ( Value == "" || !CheckEmail( Value ) ) )
			{
			ErrorMessage += "Please fill in " + Name + " correctly.\n";
			continue;
			}
		if( Mode == Number &&
			( Value == "" || !CheckString( Value, NumberString ) ) )
			{
			ErrorMessage += "Please fill in " + Name + " for HANKAKU numerical characters.\n";
			continue;
			}
		if( Mode == Letter &&
			( Value == "" || !CheckString( Value, LetterString ) ) )
			{
			ErrorMessage += "Please fill in " + Nama + " with HANKAKU alphabetic characters.\n";
			continue;
			}
		if( Mode == NumberLetter &&
			( Value == "" || !CheckString( Value, NumLetString ) ) )
			{
			ErrorMessage += "Please fill in " + Nama + " by HANKAKU alphanumeric characters.\n";
			continue;
			}
		if( Mode == EtcSelect )
			{
			if( Value == "on" )
				{
//				Control = "on";
				}
			}
		if( Mode == EtcInput )
			{
			var Control = Modes[i].substr( 1, Modes[i].length-1 );
			if( EtcMode.indexOf( Control, 0 ) != -1 && Value == "" )
				{
				ErrorMessage += "Please fill in " + Name + " of " + Control + ".\n";
				}
			}
	}	

	if( ErrorMessage != "" )
		{
		alert( ErrorMessage );
		return( false );
		}

	return ( true );
	}
//---------------------------------------------------------------------------
