//==============================================================================
//グローバル変数
//==============================================================================

//クライアントOS・ブラウザ
var g_cl_os = null;
var g_cl_browser = null;

//文字列チェックで、「'」「"」「\」を許可するか
var g_allow_quote = false;

//ハイフンの必須フラグ
//→null:ハイフン有り無し可
//  true:ハイフン必須
//  false:ハイフン不要
var g_ness_bar_zip = null;		//郵便番号
var g_ness_bar_tel = null;		//電話・FAX番号

//******************************************************************************
// <summary> 確認を行う 
// <param  > 
// <returns> 
// <remarks> 
function chk_send()
{
	//入力チェック
	if (!check_form("frm_input"))
	{
		return;
	}
	
	//サブミット
	document.getElementById("frm_input").submit();
		
	return;
}

//******************************************************************************
// <summary> フォームを取得する
// <param  > index : フォームインデックス、または、フォームID属性
// <returns>
// <remarks> 
function get_form(index)
{
	//パラメータ取得
	index = (index == null ? 0 : index);
	
	//数値でない場合
	if (isNaN(index))
	{
		//フォームのIDから取得
		//→[strict]では、<form name="">属性は非推奨
		return document.getElementById(index);
	}
	//数値の場合
	else
	{
		//フォームインデックスから取得
		return document.forms[index];
	}
}

//******************************************************************************
// <summary> クライアントのOSを判別する
// <param  > 
// <returns>
// <remarks> 
function judge_os()
{	
	//判別済の場合
	if (g_cl_os != null)
	{
		return g_cl_os;
	}

	// Macintosh
	if (navigator.userAgent.indexOf('Macintosh') >= 0 || navigator.userAgent.indexOf('Mac') >= 0)
	{
		return "MAC";
	}
	// Windows
	else if (navigator.userAgent.indexOf('Windows') >= 0 || navigator.userAgent.indexOf('Win') >= 0 )
	{
		return "WIN";
	}
	// Unix
	else
	{
		return "UNIX";
	}
}

//******************************************************************************
// <summary> クライアントのブラウザを判別する
// <param  > 
// <returns>
// <remarks> 
function judge_browser()
{
	//判別済の場合
	if (g_cl_browser != null)
	{
		return g_cl_browser;
	}

	// IE
	if (navigator.appName.indexOf('Microsoft') >= 0 || navigator.appName.indexOf('Explorer') >= 0)
	{
		return "IE";
	}
	// Firefox
	else if (navigator.userAgent.indexOf('Firefox') >= 0)
	{
		return "FIREFOX";
	}
	// Safari
	else if (navigator.userAgent.indexOf('Safari') >= 0)
	{
		return "SAFARI";
	}
	//その他
	else
	{
		return "OTHER";
	}
}

//******************************************************************************
// <summary> 属性値を取得する
// <param  > element   : 要素インスタンス(object) または 要素ID名
//           attribute : 取得する属性名
// <returns> 該当要素の該当属性の値 / null
// <remarks> 不正引数、該当要素なしの場合はNULLを返す
function get_attr(element,attribute)
{

	//パラメータがNULLの場合
	if (element == null || attribute == null)
	{
		return null;
	}

	//[element]のタイプで分岐
	switch (typeof(element))
	{
		case "string":
			
			//引数が要素IDとして、該当要素を取得
			element = document.getElementById(element);
			
			//該当要素がない場合
			if (element == null)
			{
				return null;
			}
			
			break;
			
		case "object":
		
			//要素インスタンスとして扱う(特になにもしない)
		
			break;
			
		default:
			return null;
	}
	
	//クライアントOSを取得
	var cl_os = judge_os();
	
	//クライアントブラウザを取得
	var cl_br = judge_browser();
	
	//戻り値
	var ret = "";
	
		
	//MAC ========================================================
	if (cl_os == "MAC")
	{
		//ブラウザで分岐
		switch (cl_br)
		{
			//IE  -------------------------------------------
			case "IE":
				
				ret = element.getAttribute(attribute)
				break;
				
			//Safari-----------------------------------------
			case "SAFARI":
			
				ret = element.getAttribute(attribute)
				break;
				
			//Firefox、など
			default:
			
				//form要素の任意属性を取得
				attr = element.attributes[attribute];
				
				//該当の属性が無い場合
				if (attr == null)
				{
					ret = null;
				}
				else
				{
					//取得した任意属性に格納されたチェックパラメータを取得
					ret = attr.value;
				}				
				
				break;
		}
	}
	//Windows、Linux ==============================================
	else
	{
		//form要素の任意属性を取得
		attr = element.attributes[attribute];
		
		//該当の属性が無い場合
		if (attr == null)
		{
			ret = null;
		}
		else
		{
			//取得した任意属性に格納されたチェックパラメータを取得
			ret = attr.value;
		}
	}

	return ret;
}


//******************************************************************************
// <summary> フォーム入力値チェック
// <param  > form_index : フォームインデックス
//           attribute  : 下記チェックモードを設定する任意属性
//                       　 ※省略時はを「chkmode」デフォルト
//           to_str     : 汎用チェックモードの変換後の文字列
//                        　※「i」を指定した場合、「num_x」→「num_i」として動作する
// <returns> true/false
// <remarks> 
//           htmlソースのフォームのエレメントの任意属性に、
//           以下の値を設定することで入力値のチェックを行う(禁則文字チェック含む)
//
//           チェックエラーとなった場合は、警告メッセージを表示し、
//           フォーカスを設定し、選択状態にする
//
//           ※任意属性に設定するチェックモード
//               num_i  :必須数値       num_n  : 任意数値       num_x  : 汎用数値 
//               alp_i  :必須半角文字   alp_n  : 任意半角文字   alp_x  : 汎用半角文字
//               str_i  :必須文字列     str_n  : 任意文字列     str_x  : 汎用文字列
//               mail_i :必須メール     mail_n : 任意メール     mail_x : 汎用メール
//               url_i  :必須URL        url_n  : 任意URL        url_x  : 汎用URL
//               sel_i  :必須選択       sel_n  : 任意選択       sel_x  : 汎用選択
//               tel_i  :必須電話       tel_n  : 任意電話       tel_x  : 汎用電話
//               zip_i  :必須郵便番号   zip_n  : 任意郵便番号   zip_x  : 汎用郵便番号
//               chk_i  :必須チェック   chk_n  : 任意チェック   chk_x  : 汎用チェック
//               date_i :必須日付       date_n : 任意日付       date_x : 汎用日付
//
//           ※[minlength][maxlength]属性により、最低入力桁数チェックが可能
//             以下の[chkmode]属性が設定されている要素に限る
//             →[num_*][alp_*][str_*]
//           ※[date_i]のチェック対象は「yyyy/mm/dd」書式
function check_form(form_index,attribute,to_str)
{
	//メッセージ
	var msg_hissu =     "必須項目が未入力です。入力してください";
	var msg_hissu_sel = "必須項目が未選択です。リストから選択してください";
	var msg_alp =       "半角英数字を入力してください";
	var msg_num =       "半角数字を入力してください";
	var msg_mail =      "正しいメールアドレスを入力してください";
	var msg_url =       "正しいURLを入力してください";
	var msg_tel =       "正しい電話(FAX)番号を入力してください";
	var msg_zip =       "正しい郵便番号番号を入力してください";
	var msg_len =   	"正しい入力桁数(文字数)を入力して下さい";
	var msg_hissu_chk = "必須項目が未チェックです。いずれかにチェックしてください";
	var msg_chked_cnt =   "チェックされた項目数が不正です";
	var msg_date =      "正しい日付を入力してください";

	//フォームを取得
	var form = get_form(form_index);

	//属性が、NULLまたは空文字の場合
	if (attribute == null || attribute.length == 0)
	{
		//デフォルト属性を設定
		attribute = 'chkmode';
	}

	//要素数分ループ
	for(var i = 0; i < form.elements.length; i++)
	{
		/* チェックパラメータ取得 */
		//*****************************************************************************
		
		//該当する要素のチェック属性を取得
		var mychkmode = get_attr(form.elements[i],attribute);

		//チェックパラメータが設定されていない場合
		if (mychkmode == null || mychkmode.length == 0)
		{
			//次要素へ
			continue;
		}
		
		//変換後文字列が設定されている場合
		if (to_str != null && to_str.length != 0)
		{
			mychkmode = mychkmode.replace('_x','_' + to_str);
		}
		
		//最低文字数属性の値を取得
		var minlength = get_attr(form.elements[i],'minlength');
		
		//未設定の場合はnullに統一
		if (minlength == null || minlength.length == 0)
		{
			minlength = null;
		}
		
		//最低文字数属性の値を取得
		var maxlength = get_attr(form.elements[i],'maxlength');
		
		//未設定の場合はnullに統一
		if (maxlength == null || maxlength.length == 0)
		{
			maxlength = null;
		}
			

		/* チェックメイン */
		//*****************************************************************************

		//form要素の値を取得
		myvalue = form.elements[i].value;



		//チェックパラメータで分岐
		switch(mychkmode)
		{
			//数値チェック------------------//
			case "num_i":
			
				if(myvalue.length == 0)
				{
					alert(msg_hissu);
					form.elements[i].focus();
					return false;
				}
				else
				{
					if (!check_len(myvalue,minlength,maxlength))
					{
						alert(msg_len + get_min_max_err_msg(minlength,maxlength));
						form.elements[i].focus();
						form.elements[i].select();
						return false;
					}
					
					if(!check_num(myvalue))
					{
						alert(msg_num);
						form.elements[i].focus();
						form.elements[i].select();
						return false;
					}
				}
				break;
			
			case "num_n":

				if (myvalue.length == 0)
				{
					break;
				}

				if (!check_len(myvalue,minlength,maxlength))
				{
					alert(msg_len + get_min_max_err_msg(minlength,maxlength));
					form.elements[i].focus();
					form.elements[i].select();
					return false;
				}
			
				if(!check_num(myvalue))
				{
					alert(msg_num);
					form.elements[i].focus();
					form.elements[i].select();
					return false;
				}
				break;
			
			//英数字チェック----------------//
			case "alp_i":
			
				if(myvalue.length == 0)
				{
					alert(msg_hissu);
					form.elements[i].focus();
					return false;
				}
				else
				{
					if (!check_len(myvalue,minlength,maxlength))
					{
						alert(msg_len + get_min_max_err_msg(minlength,maxlength));
						form.elements[i].focus();
						form.elements[i].select();
						return false;
					}				
				
					if(!check_alphanumeric(myvalue))
					{
						alert(msg_alp);
						form.elements[i].focus();
						form.elements[i].select();
						return false;
					}
					
					if(!check_special_str(myvalue))
					{
						alert(msg_err_str);
						form.elements[i].focus();
						form.elements[i].select();
						return false;
					}
				}
				break;
			
			case "alp_n":
			
				if (myvalue.length == 0)
				{
					break;
				}
			
				if (!check_len(myvalue,minlength,maxlength))
				{
					alert(msg_len + get_min_max_err_msg(minlength,maxlength));
					form.elements[i].focus();
					form.elements[i].select();
					return false;
				}		
			
				if(!check_alphanumeric(myvalue))
				{
					alert(msg_alp);
					form.elements[i].focus();
					form.elements[i].select();
					return false;
				}
				
				if(!check_special_str(myvalue))
				{
					alert(msg_err_str);
					form.elements[i].focus();
					form.elements[i].select();
					return false;
				}
				break;
			
			//文字列チェック----------------//
			case "str_i":
			
				if(myvalue.length == 0)
				{
					alert(msg_hissu);
					form.elements[i].focus();
					return false;
				}
				
				if (!check_len(myvalue,minlength,maxlength))
				{
					alert(msg_len + get_min_max_err_msg(minlength,maxlength));
					form.elements[i].focus();
					form.elements[i].select();
					return false;
				}
				
				if(!check_special_str(myvalue))
				{
					alert(msg_err_str);
					form.elements[i].focus();
					form.elements[i].select();
					return false;
				}
				break;
			
			case "str_n":
			
				if (myvalue.length == 0)
				{
					break;
				}
				
				if (!check_len(myvalue,minlength,maxlength))
				{
					alert(msg_len + get_min_max_err_msg(minlength,maxlength));
					form.elements[i].focus();
					form.elements[i].select();
					return false;
				}
			
				if(!check_special_str(myvalue))
				{
					alert(msg_err_str);
					form.elements[i].focus();
					form.elements[i].select();
					return false;
				}
				break;
			
			//メールチェック----------------//
			case "mail_i":
			
				if(myvalue.length == 0)
				{
					alert(msg_hissu);
					form.elements[i].focus();
					return false;
				}
				else
				{
					if(!check_mail(myvalue))
					{
						alert(msg_mail);
						form.elements[i].focus();
						form.elements[i].select();
						return false;
					}
				}
				break;
			
			case "mail_n":

				if(myvalue.length != 0)
				{
					if(!check_mail(myvalue))
					{
						alert(msg_mail);
						form.elements[i].focus();
						form.elements[i].select();
						return false;
					}
				}
				break;
				
			//URLチェック----------------//
			case "url_i":
			
				if(myvalue.length == 0)
				{
					alert(msg_hissu);
					form.elements[i].focus();
					return false;
				}
				else
				{
					if(!check_url(myvalue))
					{
						alert(msg_url);
						form.elements[i].focus();
						form.elements[i].select();
						return false;
					}
				}
				break;
			
			case "url_n":
			
				if(myvalue.length != 0)
				{
					if(!check_url(myvalue))
					{
						alert(msg_url);
						form.elements[i].focus();
						form.elements[i].select();
						return false;
					}
				}
				break;
				
			//選択チェック----------------//
			case "sel_i":
			
				if(myvalue.length == 0)
				{
					alert(msg_hissu_sel);
					form.elements[i].focus();
					return false;
				}
				break;
				
			case "sel_n":
				//特になし
				break;

				
			//電話(FAX)チェック----------------//
			case "tel_i":
			
				if(myvalue.length == 0)
				{
					alert(msg_hissu);
					form.elements[i].focus();
					return false;
				}
				else
				{
					if(!check_tel(myvalue))
					{
						alert(msg_tel);
						form.elements[i].focus();
						form.elements[i].select();
						return false;
					}
				}
				break;
			
			case "tel_n":
			
				if(myvalue.length != 0)
				{
					if(!check_tel(myvalue))
					{
						alert(msg_tel);
						form.elements[i].focus();
						form.elements[i].select();
						return false;
					}
				}
				break;

			//郵便番号チェック----------------//
			case "zip_i":
			
				if(myvalue.length == 0)
				{
					alert(msg_hissu);
					form.elements[i].focus();
					return false;
				}
				else
				{
					if(!check_zip(myvalue))
					{
						alert(msg_zip);
						form.elements[i].focus();
						form.elements[i].select();
						return false;
					}
				}
				break;
			
			case "zip_n":
			
				if(myvalue.length != 0)
				{
					if(!check_zip(myvalue))
					{
						alert(msg_zip);
						form.elements[i].focus();
						form.elements[i].select();
						return false;
					}
				}
				break;
				
			//チェックボックスチェック----------------//
			case "chk_i":

				//対象のチェックボックス名を設定要素(hidden)の[value]属性から取得
				var chkbox_name = form.elements[i].value;
			
				//一つもチェックされていない場合
				if(!is_checked(chkbox_name))
				{
					alert(msg_hissu_chk);
					try
					{
						//該当名要素の最初の要素にフォーカス
						document.getElementsByName(chkbox_name)[0].focus();
					}
					catch(e)
					{
						
					}
					return false;
				}
				
				//対象のチェックボックスのチェック最小値を取得
				var chkmin = get_attr(form.elements[i],"chkmin");
				
				//未設定の場合はnullに統一
				if (chkmin == null || chkmin.length == 0)
				{
					chkmin = null;
				}			
				
				//対象のチェックボックスのチェック最大値を取得
				var chkmax = get_attr(form.elements[i],"chkmax");
				
				//未設定の場合はnullに統一
				if (chkmax == null || chkmax.length == 0)
				{
					chkmax = null;
				}
				
				//チェック数エラーの場合
				if (!check_checked_cnt(chkbox_name,chkmin,chkmax))
				{
					alert(msg_chked_cnt + get_min_max_err_msg(chkmin,chkmax,"項目"));
					try
					{
						//該当名要素の最初の要素にフォーカス
						document.getElementsByName(chkbox_name)[0].focus();
					}
					catch(e)
					{
						
					}
					return false;
				}

				break;
				
			case "chk_n":
			
				//対象のチェックボックス名を設定要素(hidden)の[value]属性から取得
				var chkbox_name = form.elements[i].value;
			
				//対象のチェックボックスのチェック最小値を取得
				var chkmin = get_attr(form.elements[i],"chkmin");
				
				//未設定の場合はnullに統一
				if (chkmin == null || chkmin.length == 0)
				{
					chkmin = null;
				}			
				
				//対象のチェックボックスのチェック最大値を取得
				var chkmax = get_attr(form.elements[i],"chkmax");
				
				//未設定の場合はnullに統一
				if (chkmax == null || chkmax.length == 0)
				{
					chkmax = null;
				}
				
				//チェック数エラーの場合
				if (!check_checked_cnt(chkbox_name,chkmin,chkmax))
				{
					alert(msg_chked_cnt + get_min_max_err_msg(chkmin,chkmax,"項目"));
					try
					{
						//該当名要素の最初の要素にフォーカス
						document.getElementsByName(chkbox_name)[0].focus();
					}
					catch(e)
					{
						
					}
					return false;
				}
			
				//特になし
				break;
				
			//日付チェック----------------//
			case "date_i":
			
				if(myvalue.length == 0)
				{
					alert(msg_hissu);
					form.elements[i].focus();
					return false;
				}
				
				var arr_date = myvalue.split("/");
				
				if (arr_date.length != 3)
				{
					alert(msg_date);
					form.elements[i].focus();
					form.elements[i].select();
					return false;
				}
				
				if (!is_date(arr_date[0],arr_date[1],arr_date[2]))
				{
					form.elements[i].focus();
					form.elements[i].select();
					return false;				
				}

				//ゼロ詰め
				arr_date[1] = (arr_date[1].length < 2 && arr_date[1] < 10 ? '0' + arr_date[1] : arr_date[1]);
				arr_date[2] = (arr_date[2].length < 2 &&  arr_date[2] < 10 ? '0' + arr_date[2] : arr_date[2]);
				
				//ゼロ詰めした値をセット
				form.elements[i].value = arr_date.join("/");
				
				break;
			
			case "date_n":
			
				if (myvalue.length == 0)
				{
					break;
				}
				
				var arr_date = myvalue.split("/");
				
				if (arr_date.length != 3)
				{
					alert(msg_date);
					form.elements[i].focus();
					form.elements[i].select();
					return false;
				}
				
				if (!is_date(arr_date[0],arr_date[1],arr_date[2]))
				{
					form.elements[i].focus();
					form.elements[i].select();
					return false;				
				}

				//ゼロ詰め
				arr_date[1] = (arr_date[1].length < 2 && arr_date[1] < 10 ? '0' + arr_date[1] : arr_date[1]);
				arr_date[2] = (arr_date[2].length < 2 &&  arr_date[2] < 10 ? '0' + arr_date[2] : arr_date[2]);
				
				//ゼロ詰めした値をセット
				form.elements[i].value = arr_date.join("/");				
				
				break;
				
			default:
				break;
		}
	}

	return true;
}

//******************************************************************************
// <summary> 数値入力チェック
// <param  > str : 対象文字列
// <returns> true/false
// <remarks>
function check_num(str)
{
	return !isNaN(str);

	/*
	//文字列を走査し、数値以外が含まれていれば偽、数値なら正
	for(j=0; j < str.length; j++)
	{
		c=str.charAt(j);
		
		if("0123456789".indexOf(c,0) < 0)
		{
			return false;
		}
	}
	return true;
	*/
}

//******************************************************************************
// <summary> 特殊文字入力チェック
// <param  > str : 対象文字列
// <returns> true/false
// <remarks>
function check_special_str(str)
{
	//文字列を走査し、特殊文字が含まれていれば偽、以外は正
	for(var l=0; l < str.length; l++)
	{
		var c = str.charAt(l);
		
		//クォート不許可で、クォート文字列の場合
		if(!g_allow_quote && (c=="\'" || c=="\"" || c=="\\"))
		{
				return false;
		}

		//パイプ
		if(c=="\|")
		{
			return false;
		}
	
		//その他
		var other = "";	//「:」は外す
		
		//その他
		if(other.indexOf(c) >= 0)
		{
			return false;
		}
	}

	return true;
}

//******************************************************************************
// <summary> 英数字入力チェック
// <param  > str : 対象文字列
// <returns> true/false
// <remarks>
function check_alphanumeric(str)
{
	
	check = /^\w+$/i
	
	if(!str.match(check))
	{
		return false;
	}
	
	return true;
	
	/*
	var newString = "";
	for (k = 0; k < str.length; k++)
	{
		c = str.substring(k, k+1);
		if (c >= " " && c <= "~")
		{
			newString += c;
		}
		else
		{
			//英数字以外
			return false;
		}
	}
	return true;
	*/
}

//******************************************************************************
// <summary> 文字桁数チェック
// <param  > str : 対象文字列
//           min : 最低桁数
//           max : 最大桁数
// <returns> true/false
// <remarks>
function check_len(str,min,max)
{
	if (str == null )
	{
		return false;
	}
	
	if (min != null && max != null)
	{
		if (!(min <= str.length && str.length <= max))
		{
			return false;
		}
	}
	else if(min != null && max == null)
	{
		if (str.length < min)
		{
			return false;
		}
	}
	else if(min == null && max != null)
	{
		if (str.length > max)
		{
			return false;
		}
	}
	
	return true;
}

//******************************************************************************
// <summary> チェックBOXの選択数チェック
// <param  > name : 対象チェックボックス名(*[]となっていること)
//           min  : 最低選択数
//           max  : 最大選択数
// <returns> true/false
// <remarks>
function check_checked_cnt(name,min,max)
{
	if (name == null )
	{
		return false;
	}
	
	//チェックされている数を取得
	var chk_cnt = get_checked_cnt(name);

	
	if (min != null && max != null)
	{
		if (!(min <= chk_cnt && chk_cnt <= max))
		{
			return false;
		}
	}
	else if(min != null && max == null)
	{
		if (chk_cnt < min)
		{
			return false;
		}
	}
	else if(min == null && max != null)
	{
		if (chk_cnt > max)
		{
			return false;
		}
	}
	
	return true;
}

//******************************************************************************
// <summary> チェック数のチェックエラー時の桁数メッセージを取得
// <param  > min  : 最低チェック数
//           max  : 最大チェック数
//           name : エラー表示の際の単位名
// <returns> true/false
// <remarks>
function get_min_max_err_msg(min,max,uname)
{
	if (uname == null)
	{
		uname = "桁";
	}

	if (min != null && max != null)
	{
		if (min == max)
		{
			return "[ " + min + uname + " ]";
		}
		else
		{
			return "[ " + min + uname + " から " + max + uname + " ]";
		}
	}
	else if(min != null && max == null)
	{
		return "[ " + min + uname + "以上 ]";
	}
	else if(min == null && max != null)
	{
		return "[ " + max + uname + "まで ]";
	}
}

//******************************************************************************
// <summary> メール形式チェック
// <param  > str : 対象文字列
// <returns> true/false
// <remarks>
function check_mail(str)
{
	check = /[!#-9A-~]+@+[a-z0-9]+.+[!#-9A-~]/i;
	
	if(!str.match(check))
	{
		return false;
	}
	
	return true;
}

//******************************************************************************
// <summary> URL形式チェック
// <param  > str : 対象文字列
// <returns> true/false
// <remarks>
function check_url(str)
{
	check = /(https?|ftp)(:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)/i;
	
	if(!str.match(check))
	{
		return false;
	}
	
	return true;
}

//******************************************************************************
// <summary> 電話番号形式チェック
// <param  > str : 対象文字列
// <returns> true/false
// <remarks>
function check_tel(str)
{
	//ハイフン必須未設定の場合
	if (g_ness_bar_tel == null)
	{
		check = /^\d{2,4}\-?\d{2,4}\-?\d{2,4}$/;
	}
	//必須の場合
	else if (g_ness_bar_tel == true)
	{
		check = /^\d{2,4}\-\d{2,4}\-\d{2,4}$/;
	}
	//不要の場合
	else
	{
		check = /^\d{10,11}$/;
	}

	if(!str.match(check))
	{
		return false;
	}
	
	return true;
}

//******************************************************************************
// <summary> 郵便番号形式チェック
// <param  > str : 対象文字列
// <returns> true/false
// <remarks>
function check_zip(str)
{
	//ハイフン必須未設定の場合
	if (g_ness_bar_zip == null)
	{
		check = /^\d{3}\-?\d{4}$/;
	}
	//必須の場合
	else if (g_ness_bar_zip == true)
	{
		check = /^\d{3}\-\d{4}$/;
	}
	//不要の場合
	else
	{
		check = /^\d{7}$/;
	}
	
	if(!str.match(check))
	{
		return false;
	}
	
	return true;
}

//******************************************************************************
// <summary> 日付チェック
// <param  > year  : 年
//           month : 月
//           day   : 日
// <returns>
// <remarks> 不正な場合、内部でエラーメッセージを表示(サンプルより抜粋)
function is_date(year,month,day)
{    
	//年
	if (isNaN(year))
	{
		alert("年には 数字 を設定してください。");
		return false;
	}
	if(year.length != 4){
		alert("年には 西暦４桁を設定してください。");
		return false;
	}

	//月
	if (isNaN(month))
	{
		alert("月には 数字 を設定してください。");
		return false;
	}
	if(mon_chk(month)){
		alert("月に正しい値を設定してください。");
		return false;
	}

	//日
	if (isNaN(day))
	{	
		alert("日には 半角数字 を設定してください。");
		return false;
	}
	if(day.length == 0)
	{
		alert("日には 正しい値を設定してください。");
		return false;
	}
	var d = daymonth(year,month);
	if(d < day){
		alert("日が間違っています。"+ d + "日までです。");
		return false;
	}

	return true;
}

//******************************************************************************
// <summary> 日付の範囲チェック
// <param  > year  : 年
//           month : 月
// <returns>
// <remarks> 
function daymonth(year,month){	
	day = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
	if(month==2 && leapyear(year)) return 29;
	return day[month-1];
}

//******************************************************************************
// <summary> うるう年のチェック
// <param  > year  : 年
// <returns>
// <remarks> 
function leapyear(year){
	return year%4==0 && (year%100!=0 || year%400==0);
}

//******************************************************************************
// <summary> 月の範囲チェック
// <param  > month  : 月
// <returns>
// <remarks> 
function mon_chk(month){	
	if((month >= 1) && (month <= 12)) return false;
	return true;
}