//--------------------------------------------エラーチェッカーの定義
/**
 * エラーチェック基底クラス(JavaScriptでは必要ないがエラーチェック系のスーパークラス)
 * @param data_val チェック対象となる値
 */
function ErrorChecker(data_val) {
	/**
	 * チェック対象となる値
	 */
	var data = data_val;
	
	/**
	 * エラー有無のチェック
	 * @return エラー有無（TRUE->エラー有、FALSE->エラー無）
	 */
	this.is_error = function() {
		return false;
	}
}
/**
 * 論理積エラーチェッククラス（全てエラー有りである場合のみエラー有りとする）
 * 登録したエラーチェックのクラスを論理積としてエラーチェックを行う
 */
function ErrorAndChecker() {
	/**
	 * エラーチェッククラスリスト
	 */
	var chk_list = new Array();
	for(var i = 0; i < ErrorAndChecker.arguments.length; i++) {
		chk_list.push(ErrorAndChecker.arguments[i]);
	}
	
	/**
	 * エラーチェッククラスの追加
	 * @param one エラーチェッククラス
	 */
	this.add_error = function(one) {
		chk_list.push(one);
	}
	/**
	 * エラーチェッククラスのリスト追加
	 * @param list エラーチェッククラスのリスト
	 */
	this.add_errors = function(list) {
		for(var i = 0; i < list.length; i++) {
			chk_list.push(list[i]);
		}
	}
	
	/**
	 * エラー有無のチェック
	 * @return エラー有無（TRUE->エラー有、FALSE->エラー無）
	 */
	this.is_error = function() {
		for(var i = 0; i < chk_list.length; i++) {
			if(chk_list[i].is_error() == false) return false;
		}
		return true;
	}
}
/**
 * 論理和エラーチェッククラス（一つでもエラー有りである場合のみエラー有りとする）
 * 登録したエラーチェックのクラスを論理和としてエラーチェックを行う
 */
function ErrorOrChecker() {
	/**
	 * エラーチェッククラスリスト
	 */
	var chk_list = new Array();
	for(var i = 0; i < ErrorOrChecker.arguments.length; i++) {
		chk_list.push(ErrorOrChecker.arguments[i]);
	}
	
	/**
	 * エラーチェッククラスの追加
	 * @param one エラーチェッククラス
	 */
	this.add_error = function(one) {
		chk_list.push(one);
	}
	/**
	 * エラーチェッククラスのリスト追加
	 * @param list エラーチェッククラスのリスト
	 */
	this.add_errors = function(list) {
		for(var i = 0; i < list.length; i++) {
			chk_list.push(list[i]);
		}
	}
	
	/**
	 * エラー有無のチェック
	 * @return エラー有無（TRUE->エラー有、FALSE->エラー無）
	 */
	this.is_error = function() {
		for(var i = 0; i < chk_list.length; i++) {
			if(chk_list[i].is_error() == true) return true;
		}
		return false;
	}
}
/**
 * 排他的論理和エラーチェッククラス（エラー有りとエラー無しが混在する場合のみエラー有りとする）
 * 登録したエラーチェックのクラスを排他的論理和としてエラーチェックを行う
 */
function ErrorXorChecker() {
	/**
	 * エラーチェッククラスリスト
	 */
	var chk_list = new Array();
	for(var i = 0; i < ErrorXorChecker.arguments.length; i++) {
		chk_list.push(ErrorXorChecker.arguments[i]);
	}
	
	/**
	 * エラーチェッククラスの追加
	 * @param one エラーチェッククラス
	 */
	this.add_error = function(one) {
		chk_list.push(one);
	}
	/**
	 * エラーチェッククラスのリスト追加
	 * @param list エラーチェッククラスのリスト
	 */
	this.add_errors = function(list) {
		for(var i = 0; i < list.length; i++) {
			chk_list.push(list[i]);
		}
	}
	
	/**
	 * エラー有無のチェック
	 * @return エラー有無（TRUE->エラー有、FALSE->エラー無）
	 */
	this.is_error = function() {
		var err_sum = 0; // エラー数の総数
		for(var i = 0; i < chk_list.length; i++) {
			if(chk_list[i].is_error() == true) err_sum++;
		}
		return (err_sum > 0 && err_sum < chk_list.length);
	}
}
//--------------------------------------------エラーペアリングの定義
/**
 * エラーメッセージとエラーチェッカーの対応付けを格納するクラス
 * @param arg_message エラーメッセージ
 * @param arg_checker エラーチェッカー
 */
function ValidatePairing(arg_message, arg_checker) {
	/**
	 * エラーメッセージ
	 */
	var message = arg_message;
	/**
	 * エラーチェッカー
	 */
	var checker = arg_checker;
	
	/**
	 * エラーメッセージの取得
	 * @return エラーメッセージ
	 */
	this.get_message = function() {
		return message;
	}
	/**
	 * エラーチェックの実行
	 * @return チェック結果（TRUE->エラー有、FALSE->エラー無）
	 */
	this.err_check = function() {
		return checker.is_error();
	}
}
/**
 * エラーメッセージとエラーチェッカーの対応付けを格納するクラスを管理するクラス
 * 対応付けをチェインとして管理し、エラーチェック時にエラーになった時点で後続のエラーチェックを行わない
 * @param pair エラーメッセージとエラーチェッカーのペアクラス（可変長引数リスト）
 */
function ValidateChainPairing() {
	/**
	 * エラーメッセージとエラーチェッカーのペアリスト
	 */
	var pair_list = new Array();
	for(var i = 0; i < ValidateChainPairing.arguments.length; i++) {
		pair_list.push(ValidateChainPairing.arguments[i]);
	}
	/**
	 * ペアリストの総数
	 */
	var cnt = pair_list.length;
	/**
	 * エラーとなったエラーチェッカーのエラーメッセージ
	 * エラーチェック前およびエラー無しの場合はNULL
	 */
	var mes = null;
	
	/**
	 * エラーメッセージとエラーチェッカーのペアの追加
	 * @param one エラーメッセージとエラーチェッカーのペアクラス
	 */
	this.add_pair = function(one) {
		pair_list.push(one);
		cnt = pair_list.length;
	}
	/**
	 * エラーメッセージとエラーチェッカーのペアリスト追加
	 * @param list エラーメッセージとエラーチェッカーのペアリスト
	 */
	this.add_pairs = function(list) {
		for(var i = 0; i < list.length; i++) {
			pair_list.push(list[i]);
		}
		cnt = pair_list.length;
	}
	
	/**
	 * エラーメッセージの取得
	 * @return エラーメッセージ
	 */
	this.get_message = function() {
		return mes;
	}
	/**
	 * エラーチェックの実行
	 * @return チェック結果（TRUE->エラー有、FALSE->エラー無）
	 */
	this.err_check = function() {
		mes = null;
		for(var pos = 0; pos < cnt; pos++) {
			if(pair_list[pos].err_check() == true) {
				mes = pair_list[pos].get_message();
				return true;
			}
		}
		return false;
	}
}
//--------------------------------------------管理系クラスの定義
/**
 * エラー検証管理クラスの登録情報を持つクラス
 * @param arg_validate_pair エラーメッセージとエラーチェッカーのペアクラス
 * @param arg_view_id エラーメッセージを表示する要素のＩＤ
 * @param arg_view_position エラーメッセージの表示位置（'under'または'neighbor'）
 * @param arg_target_id 対象となる入力フォームの要素ＩＤ（存在しない場合はＮＵＬＬ）
 */
function VerifyEntryClass(arg_validate_pair, arg_view_id, arg_view_position, arg_target_id) {
	/**
	 * エラーメッセージとエラーチェッカーのペアクラス
	 */
	var validate_pair = arg_validate_pair;
	/**
	 * エラーメッセージを表示する要素ＩＤ
	 */
	var view_id = arg_view_id;
	/**
	 * エラーメッセージの表示位置（'under'または'neighbor'）
	 */
	var view_position = arg_view_position;
	/**
	 * 対象となる入力フォームの要素ＩＤ（存在しない場合はＮＵＬＬ）
	 */
	var target_id = arg_target_id;
	
	/**
	 * ペアクラスの取得
	 * @return ペアクラス
	 */
	this.get_validate_pair = function() {
		return validate_pair;
	}
	/**
	 * エラーメッセージを表示するＩＤを取得
	 * @return エラーメッセージを表示するＩＤ
	 */
	this.get_view_id = function() {
		return view_id;
	}
	/**
	 * エラーメッセージの表示位置の取得
	 * @return エラーメッセージの表示位置
	 */
	this.get_view_position = function() {
		return view_position;
	}
	/**
	 * 対象となる入力フォームの要素ＩＤの取得
	 * @return 対象となる入力フォームの要素ＩＤ
	 */
	this.get_target_id = function() {
		return target_id;
	}
}
/**
 * エラー検証管理クラスの結果情報を持つクラス
 * @param arg_error_flag エラーフラグ（ＴＲＵＥ->エラー結果）
 * @param arg_error_message エラーメッセージ
 * @param arg_view_id エラーメッセージを表示する要素のＩＤ
 * @param arg_view_position エラーメッセージの表示位置（'under'または'neighbor'）
 * @param arg_target_id 対象となる入力フォームの要素ＩＤ（存在しない場合はＮＵＬＬ）
 */
function VerifyResultClass(arg_error_flag, arg_error_message, arg_view_id, arg_view_position, arg_target_id) {
	/**
	 * エラーフラグ（ＴＲＵＥ->エラー結果）
	 */
	var error_flag = arg_error_flag;
	/**
	 * エラーメッセージ
	 */
	var error_message = arg_error_message;
	/**
	 * エラーメッセージを表示する要素ＩＤ
	 */
	var view_id = arg_view_id;
	/**
	 * エラーメッセージの表示位置（'under'または'neighbor'）
	 */
	var view_position = arg_view_position;
	/**
	 * 対象となる入力フォームの要素ＩＤ（存在しない場合はＮＵＬＬ）
	 */
	var target_id = arg_target_id;
	
	/**
	 * エラーフラグを取得（エラー結果の場合ＴＲＵＥ）
	 * @return エラーフラグ
	 */
	this.is_error = function() {
		return error_flag;
	}
	/**
	 * エラーメッセージを取得（エラー無しの場合ＮＵＬL）
	 * @return 表示するエラーメッセージ
	 */
	this.get_error_message = function() {
		return error_message;
	}
	/**
	 * エラーメッセージを表示するＩＤを取得
	 * @return エラーメッセージを表示するＩＤ
	 */
	this.get_view_id = function() {
		return view_id;
	}
	/**
	 * エラーメッセージの表示位置の取得
	 * @return エラーメッセージの表示位置
	 */
	this.get_view_position = function() {
		return view_position;
	}
	/**
	 * 対象となる入力フォームの要素ＩＤの取得
	 * @return 対象となる入力フォームの要素ＩＤ
	 */
	this.get_target_id = function() {
		return target_id;
	}
}
/**
 * エラー検証の管理および実行を提供するクラス
 */
function ValidateManager() {
	/**
	 * エラー検証登録情報リスト
	 */
	var entry_list = new Array();
	/**
	 * ペアリストの総数
	 */
	var cnt = entry_list.length;
	
	/**
	 * エラーメッセージとエラーチェッカーのペアの追加
	 * @param one エラーメッセージとエラーチェッカーのペアクラス
	 * @param view_id エラーメッセージを表示する要素のＩＤ
	 * @param view_position エラーメッセージの表示位置（'under'または'neighbor'）
	 * @param target_id 対象となる入力フォームの要素ＩＤ（存在しない場合はＮＵＬＬ）
	 */
	this.add_pair = function(one, view_id, view_position, target_id) {
		entry_list.push(new VerifyEntryClass(one, view_id, view_position, target_id));
		cnt = entry_list.length;
	}
	/**
	 * エラーメッセージとエラーチェッカーのペアリスト追加
	 * @param list エラーメッセージとエラーチェッカーのペアリスト（「VerifyEntryClass」の配列）
	 */
	this.add_pairs = function(list) {
		for(var i = 0; i < list.length; i++) {
			entry_list.push(list[i]);
		}
		cnt = entry_list.length;
	}
	
	/**
	 * エラーチェックの実行（実行時に登録されているエラー文言に対して表示をクリア）
	 * @return エラーの有無（TRUE->エラー有、FALSE->エラー無）
	 */
	this.default_verify = function() {
		var result_list = new Array();
		for(var pos = 0; pos < cnt; pos++) {
			var validate_pair = entry_list[pos].get_validate_pair();
			result_list.push(
				new VerifyResultClass(validate_pair.err_check(), validate_pair.get_message(), entry_list[pos].get_view_id(), entry_list[pos].get_view_position(), entry_list[pos].get_target_id())
			);
		}
		return result_list;
	}
}
/**
 * エラー結果を管理するクラス
 */
function ErrorManager() {
	/**
	 * エラー結果リスト
	 */
	var err_list = new Array();
	for(var i = 0; i < ErrorManager.arguments.length; i++) {
		err_list.push(ErrorManager.arguments[i]);
	}
	/**
	 * エラー結果の総数
	 */
	var cnt = err_list.length;
	
	/**
	 * エラー結果の追加
	 * @param error_flag エラーフラグ
	 * @param error_message エラーメッセージ
	 * @param view_id エラー表示ＩＤ
	 * @param view_position エラー表示位置
	 * @param target_id 対象入力フォームＩＤ
	 */
	this.add_error = function(error_flag, error_message, view_id, view_position, target_id) {
		err_list.push(new VerifyResultClass(error_flag, error_message, view_id, view_position, target_id));
		cnt = err_list.length;
	}
	/**
	 * エラー結果のリスト追加
	 * @param list エラー結果のリスト（「VerifyResultClass」の配列）
	 */
	this.add_errors = function(list) {
		for(var i = 0; i < list.length; i++) {
			err_list.push(list[i]);
		}
		cnt = err_list.length;
	}
	
	/**
	 * デフォルトのエラーメッセージ非表示
	 */
	this.hide_default_err_style = function() {
		for(var pos = 0; pos < cnt; pos++) {
			var element_id = err_list[pos].get_target_id();
			var message_id = err_list[pos].get_view_id();
			// 既に表示されているエラーメッセージを消去
			if(message_id) {
				var message_view_id = get_view_message(message_id);
				if(get_element_by_id(message_view_id) != null) {
					remove(get_element_by_id(message_view_id));
				}
			}
			if(element_id) {
				if(element_id instanceof Array) {
					for(var i = 0; i < element_id.length; i++) {
						get_element_by_id(element_id[i]).style.backgroundColor = "";
					}
				} else {
					get_element_by_id(element_id).style.backgroundColor = "";
				}
			}
		}
	}
	/**
	 * エラーメッセージ表示
	 */
	this.set_default_err_style = function() {
		for(var pos = 0; pos < cnt; pos++) {
			if(err_list[pos].is_error() == false) continue;
			var element_id = err_list[pos].get_target_id();
			var message_id = err_list[pos].get_view_id();
			var position_val = err_list[pos].get_view_position();
			// 既に表示されているエラーメッセージを消去
			if(message_id) {
				var message_view_id = get_view_message(message_id);
				if(get_element_by_id(message_view_id) != null) {
					remove(get_element_by_id(message_view_id));
				}
			}
			if(element_id) {
				if(element_id instanceof Array) {
					for(var i = 0; i < element_id.length; i++) {
						get_element_by_id(element_id[i]).style.backgroundColor = "";
					}
				} else {
					get_element_by_id(element_id).style.backgroundColor = "";
				}
			}
			// 入力フォームの背景色を変更
			if(element_id) {
				if(element_id instanceof Array) {
					for(var i = 0; i < element_id.length; i++) {
						get_element_by_id(element_id[i]).style.backgroundColor = "#FFCCFF";
					}
				} else {
					get_element_by_id(element_id).style.backgroundColor = "#FFCCFF";
				}
			}
			// メッセージの表示
			if(message_id && position_val) {
				var message;// エレメント要素を格納
				var message_view_id = get_view_message(message_id);
				if(position_val == 'under') {
					message = create_element('div', { id: message_view_id, style: "color:red;" } );
				} else {
					message = create_element('span', { id: message_view_id, style: "color:red;" } );
				}
				if(message.runtimeStyle) {
					message.runtimeStyle.cssText = "color:#FF0000;";
				}
				message.innerHTML = err_list[pos].get_error_message();
				insert_after(message, get_element_by_id(message_id));
			}
		}
	}
	/**
	 * 一番上のエラーメッセージ表示
	 */
	this.set_default_once_err_style = function() {
		for(var pos = 0; pos < cnt; pos++) {
			if(err_list[pos].is_error() == false) continue;
			var element_id = err_list[pos].get_target_id();
			var message_id = err_list[pos].get_view_id();
			var position_val = err_list[pos].get_view_position();
			// 既に表示されているエラーメッセージを消去
			if(message_id) {
				var message_view_id = get_view_message(message_id);
				if(get_element_by_id(message_view_id) != null) {
					remove(get_element_by_id(message_view_id));
				}
			}
			if(element_id) {
				if(element_id instanceof Array) {
					for(var i = 0; i < element_id.length; i++) {
						get_element_by_id(element_id[i]).style.backgroundColor = "";
					}
				} else {
					get_element_by_id(element_id).style.backgroundColor = "";
				}
			}
			// 入力フォームの背景色を変更
			if(element_id) {
				if(element_id instanceof Array) {
					for(var i = 0; i < element_id.length; i++) {
						get_element_by_id(element_id[i]).style.backgroundColor = "#FFCCFF";
					}
				} else {
					get_element_by_id(element_id).style.backgroundColor = "#FFCCFF";
				}
			}
			// メッセージの表示
			if(message_id && position_val) {
				var message;// エレメント要素を格納
				var message_view_id = get_view_message(message_id);
				if(position_val == 'under') {
					message = create_element('div', { id: message_view_id, style: "color:red;" } );
				} else {
					message = create_element('span', { id: message_view_id, style: "color:red;" } );
				}
				if(message.runtimeStyle) {
					message.runtimeStyle.cssText = "color:#FF0000;";
				}
				message.innerHTML = err_list[pos].get_error_message();
				insert_after(message, get_element_by_id(message_id));
			}
			break;// 一番上のみ表示のためループを抜ける
		}
	}
	/**
	 * エラーメッセージをダイアログ表示
	 */
	this.show_default_err_alert = function() {
		var message_list = new Array();// エラー文言格納
		// エラー算出
		for(var pos = 0; pos < cnt; pos++) {
			if(err_list[pos].is_error() == false) continue;
			var element_id = err_list[pos].get_target_id();
			var message_id = err_list[pos].get_view_id();
			var position_val = err_list[pos].get_view_position();
			// 既に表示されているエラーメッセージを消去
			if(message_id) {
				var message_view_id = get_view_message(message_id);
				if(get_element_by_id(message_view_id) != null) {
					remove(get_element_by_id(message_view_id));
				}
			}
			if(element_id) {
				if(element_id instanceof Array) {
					for(var i = 0; i < element_id.length; i++) {
						get_element_by_id(element_id[i]).style.backgroundColor = "";
					}
				} else {
					get_element_by_id(element_id).style.backgroundColor = "";
				}
			}
			// 入力フォームの背景色を変更
			if(element_id) {
				if(element_id instanceof Array) {
					for(var i = 0; i < element_id.length; i++) {
						get_element_by_id(element_id[i]).style.backgroundColor = "#FFCCFF";
					}
				} else {
					get_element_by_id(element_id).style.backgroundColor = "#FFCCFF";
				}
			}
			// メッセージの格納
			message_list.push(err_list[pos].get_error_message());
		}
		// メッセージの表示
		var message_data = '';// メッセージ格納
		for(var pos = 0; pos < message_list.length; pos++) {
			if(pos > 0) message_data += "\n";
			message_data += message_list[pos];
		}
		window.alert(message_data);
	}
	/**
	 * 一番上のエラーメッセージをダイアログ表示
	 */
	this.show_default_once_err_alert = function() {
		var message_data = '';// メッセージ格納
		// エラー算出
		for(var pos = 0; pos < cnt; pos++) {
			if(err_list[pos].is_error() == false) continue;
			var element_id = err_list[pos].get_target_id();
			var message_id = err_list[pos].get_view_id();
			var position_val = err_list[pos].get_view_position();
			// 既に表示されているエラーメッセージを消去
			if(message_id) {
				var message_view_id = get_view_message(message_id);
				if(get_element_by_id(message_view_id) != null) {
					remove(get_element_by_id(message_view_id));
				}
			}
			if(element_id) {
				if(element_id instanceof Array) {
					for(var i = 0; i < element_id.length; i++) {
						get_element_by_id(element_id[i]).style.backgroundColor = "";
					}
				} else {
					get_element_by_id(element_id).style.backgroundColor = "";
				}
			}
			// 入力フォームの背景色を変更
			if(element_id) {
				if(element_id instanceof Array) {
					for(var i = 0; i < element_id.length; i++) {
						get_element_by_id(element_id[i]).style.backgroundColor = "#FFCCFF";
					}
				} else {
					get_element_by_id(element_id).style.backgroundColor = "#FFCCFF";
				}
			}
			// メッセージの格納
			message_data = err_list[pos].get_error_message();
		}
		// メッセージの表示
		window.alert(message_data);
	}
	
	/**
	 * エラーメッセージの保有有無を取得
	 * @return エラーメッセージの保有有無（TRUE->エラー有、FALSE->エラー無）
	 */
	this.has_errors = function(is_hide) {
		// 非表示処理
		var hide_flag = true;
		if((typeof is_hide == 'undefined') == false) {
			hide_flag = is_hide;
		}
		if(hide_flag == true) this.hide_default_err_style();
		// エラー数のチェック
		for(var pos = 0; pos < cnt; pos++) {
			if(err_list[pos].is_error() == true) {
				return true;
			}
		}
		return false;
	}
	/**
	 * エラーメッセージのリストの取得
	 * @return エラーメッセージのリスト
	 */
	this.get_errors = function() {
		var message_list = new Array();
		for(var pos = 0; pos < cnt; pos++) {
			if(err_list[pos].is_error() == false) continue;
			message_list.push(err_list[pos].get_error_message());
		}
		return message_list;
	}
}
//--------------------------------------------エラーチェッカー
/**
 * 条件指定可能エラーチェッククラス
 * @param element_id チェック対象となる要素のＩＤ
 * @param regex_data 検証するRegex値
 */
function RegexCheckerId(element_id, regex_data) {
	/**
	 * チェック対象となる値
	 */
	var data = get_element_by_id(element_id).value;
	/**
	 * Regex検証の値
	 */
	var regex = regex_data;
	
	/**
	 * エラー有無のチェック（指定した検証値を満たさない場合エラー）
	 * @return エラー有無（TRUE->エラー有、FALSE->エラー無）
	 */
	this.is_error = function() {
		if(data.length == 0) return false;
		return (data.match(regex) == null);
	}
}
/**
 * 非空文字をチェックするクラス（空文字の場合：エラー）
 * @param element_id チェック対象となる要素のＩＤ
 */
function NotEmptyCheckerId(element_id) {
	/**
	 * チェック対象となる値
	 */
	var data = get_element_by_id(element_id).value;
	/**
	 * エラー有無のチェック
	 * @return エラー有無（TRUE->エラー有、FALSE->エラー無）
	 */
	this.is_error = function() {
		if(data.length > 0) return false;
		else return true;
	}
}
/**
 * 空文字をチェックするクラス（非空文字の場合：エラー）
 * @param element_id チェック対象となる要素のＩＤ
 */
function IsEmptyCheckerId(element_id) {
	/**
	 * チェック対象となる値
	 */
	var data = get_element_by_id(element_id).value;
	/**
	 * エラー有無のチェック
	 * @return エラー有無（TRUE->エラー有、FALSE->エラー無）
	 */
	this.is_error = function() {
		if(data.length <= 0) return false;
		else return true;
	}
}
/**
 * ラジオボタンが選択されていることをチェックするクラス（未選択の場合：エラー）
 * @param element_id チェック対象となる要素のＩＤ（配列指定可）
 */
function NotSelectRadioCheckerId(element_id) {
	/**
	 * チェック対象となる値
	 */
	var data = 0;
	if(element_id instanceof Array) {
		for(var i = 0; i < element_id.length; i++) {
			var elem = get_element_by_id(element_id[i]);
			if(elem.checked == true) data++;
		}
	} else {
		var elem = get_element_by_id(element_id);
		if(elem.checked == true) data++;
	}
	/**
	 * エラー有無のチェック
	 * @return エラー有無（TRUE->エラー有、FALSE->エラー無）
	 */
	this.is_error = function() {
		return (data <= 0);
	}
}
/**
 * セレクトボックス(マルチプル)が選択されていることをチェックするクラス（未選択の場合：エラー）
 * @param element_id チェック対象となる要素のＩＤ
 */
function NotSelectBoxMultipleCheckerId(element_id) {
	/**
	 * チェック対象となる値
	 */
	var data = 0;// チェック数
	var elem = get_element_by_id(element_id);
	for(var i = 0; i < elem.options.length; i++) {
		if(elem.options[i].selected == true) data++;
	}
	/**
	 * エラー有無のチェック
	 * @return エラー有無（TRUE->エラー有、FALSE->エラー無）
	 */
	this.is_error = function() {
		return (data <= 0);
	}
}
/**
 * 真値をチェックするクラス（非真値の場合：エラー）
 * @param data_val チェック対象となる値
 */
function IsTrueCheckerVal(data_val) {
	/**
	 * チェック対象となる値
	 */
	var data = data_val;
	
	/**
	 * エラー有無のチェック
	 * @return エラー有無（TRUE->エラー有、FALSE->エラー無）
	 */
	this.is_error = function() {
		return (true !== data)
	}
}
/**
 * 偽値をチェックするクラス（非偽値の場合：エラー）
 * @param data_val チェック対象となる値
 */
function IsFalseCheckerVal(data_val) {
	/**
	 * チェック対象となる値
	 */
	var data = data_val;
	
	/**
	 * エラー有無のチェック
	 * @return エラー有無（TRUE->エラー有、FALSE->エラー無）
	 */
	this.is_error = function() {
		return (false !== data)
	}
}
/**
 * 同じ文字をチェックするクラス（異なる文字の場合：エラー）
 * @param element_data_id チェック対象となる要素のＩＤ
 * @param element_same_id 指定値となる要素のＩＤ
 */
function SameCheckerId(element_data_id, element_same_id) {
	/**
	 * チェック対象となる値
	 */
	var data = get_element_by_id(element_data_id).value;
	/**
	 * 指定値
	 */
	var same = get_element_by_id(element_same_id).value;
	/**
	 * エラー有無のチェック
	 * @return エラー有無（TRUE->エラー有、FALSE->エラー無）
	 */
	this.is_error = function() {
		if(data.length == 0 && same.length == 0) return false;
		var cmp;
		if((cmp = data.length - same.length) != 0) {
			return true;
		}
		for(var pos = 0; pos < data.length; pos++) {
			var src_ch = data.charCodeAt(pos);
			var des_ch = same.charCodeAt(pos);
			if((cmp = (src_ch - des_ch)) != 0) break;
		}
		return (cmp != 0);
	}
}
/**
 * 異なる文字をチェックするクラス（同じ文字の場合：エラー）
 * @param element_data_id チェック対象となる要素のＩＤ
 * @param element_same_id 指定値となる要素のＩＤ
 */
function DiffCheckerId(element_data_id, element_same_id) {
	/**
	 * チェック対象となる値
	 */
	var data = get_element_by_id(element_data_id).value;
	/**
	 * 指定値
	 */
	var same = get_element_by_id(element_same_id).value;
	/**
	 * エラー有無のチェック
	 * @return エラー有無（TRUE->エラー有、FALSE->エラー無）
	 */
	this.is_error = function() {
		if(data.length == 0 && same.length == 0) return false;
		var cmp;
		if((cmp = data.length - same.length) != 0) {
			return false;
		}
		for(var pos = 0; pos < data.length; pos++) {
			var src_ch = data.charCodeAt(pos);
			var des_ch = same.charCodeAt(pos);
			if((cmp = (src_ch - des_ch)) != 0) break;
		}
		return (cmp == 0);
	}
}
/**
 * セレクトボックス(シングル)が選択されていることをチェックするクラス（未選択の場合：エラー）
 * @param element_id チェック対象となる要素のＩＤ
 * @param non_selected_val 未選択値
 * @param is_flip 反転フラグ（FALSE->選択中の値はオプションタグのvalue値による比較、TRUE->選択中の値はオプションタグの表示値による比較）
 */
function DiffSelectBoxSingleCheckerId(element_id, non_selected_val, is_flip) {
	/**
	 * 反転フラグ
	 */
	var flip_flag = false;
	if((typeof is_flip == 'undefined') == false) {
		flip_flag = is_flip;
	}
	/**
	 * チェック対象となる値
	 */
	var data = "";// デフォルトの初期値格納
	var elem = get_element_by_id(element_id);
	if(flip_flag == false) {
		data = String(elem.options[elem.selectedIndex].value);
	} else {
		data = String(elem.options[elem.selectedIndex].text);
	}
	/**
	 * 未選択値
	 */
	var same = String(non_selected_val);
	
	/**
	 * エラー有無のチェック
	 * @return エラー有無（TRUE->エラー有、FALSE->エラー無）
	 */
	this.is_error = function() {
		if(data.length == 0 && same.length == 0) return false;
		var cmp;
		if((cmp = data.length - same.length) != 0) {
			return false;
		}
		for(var pos = 0; pos < data.length; pos++) {
			var src_ch = data.charCodeAt(pos);
			var des_ch = same.charCodeAt(pos);
			if((cmp = (src_ch - des_ch)) != 0) break;
		}
		return (cmp == 0);
	}
}
/**
 * 最大文字列長以下をチェックするクラス（最大文字列長超過の場合：エラー）
 * @param element_id チェック対象となる要素のＩＤ
 * @param len 最大文字列長
 */
function MaxLengthCheckerId(element_id, len) {
	/**
	 * チェック対象となる値
	 */
	var data = get_element_by_id(element_id).value;
	/**
	 * 最大文字列長
	 */
	var max_len = parseInt(len);
	/**
	 * エラー有無のチェック
	 * @return エラー有無（TRUE->エラー有、FALSE->エラー無）
	 */
	this.is_error = function() {
		if(data.length == 0) return false;
		var regex = new RegExp("^.{0," + String(max_len) + "}$");
		return (data.match(regex) == null);
	}
}
/**
 * 最小文字列長以上をチェックするクラス（最小文字列長未満の場合：エラー）
 * @param element_id チェック対象となる要素のＩＤ
 * @param len 最小文字列長
 */
function MinLengthCheckerId(element_id, len) {
	/**
	 * チェック対象となる値
	 */
	var data = get_element_by_id(element_id).value;
	/**
	 * 最小文字列長
	 */
	var min_len = parseInt(len);
	/**
	 * エラー有無のチェック
	 * @return エラー有無（TRUE->エラー有、FALSE->エラー無）
	 */
	this.is_error = function() {
		if(data.length == 0) return false;
		var regex = new RegExp("^.{" + String(min_len) + ",}$");
		return (data.match(regex) == null);
	}
}
/**
 * 文字列長をチェックするクラス（文字列長を満たさない場合：エラー）
 * @param element_id チェック対象となる要素のＩＤ
 * @param min 最小文字列長
 * @param max 最大文字列長
 */
function LengthCheckerId(element_id, min, max) {
	/**
	 * チェック対象となる値
	 */
	var data = get_element_by_id(element_id).value;
	/**
	 * 最小文字列長
	 */
	var min_len = parseInt(min);
	/**
	 * 最大文字列長
	 */
	var max_len = parseInt(max);
	/**
	 * エラー有無のチェック
	 * @return エラー有無（TRUE->エラー有、FALSE->エラー無）
	 */
	this.is_error = function() {
		if(data.length == 0) return false;
		var regex = new RegExp("^.{" + String(min_len) + "," + String(max_len) + "}$");
		return (data.match(regex) == null);
	}
}
/**
 * 最大値以下をチェックするクラス（最大値超過の場合：エラー）
 * @param element_id チェック対象となる要素のＩＤ
 * @param val 最大値
 */
function MaxValueCheckerId(element_id, val) {
	/**
	 * チェック対象となる値
	 */
	var data = get_element_by_id(element_id).value;
	/**
	 * 最大値
	 */
	var max_val = parseInt(val);
	/**
	 * エラー有無のチェック
	 * @return エラー有無（TRUE->エラー有、FALSE->エラー無）
	 */
	this.is_error = function() {
		if(data.length == 0) return false;
		return (parseInt(data) > max_val);
	}
}
/**
 * 最小値以下をチェックするクラス（最小値未満の場合：エラー）
 * @param element_id チェック対象となる要素のＩＤ
 * @param val 最小値
 */
function MinValueCheckerId(element_id, val) {
	/**
	 * チェック対象となる値
	 */
	var data = get_element_by_id(element_id).value;
	/**
	 * 最小値
	 */
	var min_val = parseInt(val);
	/**
	 * エラー有無のチェック
	 * @return エラー有無（TRUE->エラー有、FALSE->エラー無）
	 */
	this.is_error = function() {
		if(data.length == 0) return false;
		return (parseInt(data) < min_val);
	}
}
/**
 * 最小値未満または最大値超過をチェックするクラス（最小値未満または最大値超過の場合：エラー）
 * @param element_id チェック対象となる要素のＩＤ
 * @param min 最小値
 * @param max 最大値
 */
function RangeValueCheckerId(element_id, min, max) {
	/**
	 * チェック対象となる値
	 */
	var data = get_element_by_id(element_id).value;
	/**
	 * 最小値
	 */
	var min_val = parseInt(min);
	/**
	 * 最大値
	 */
	var max_val = parseInt(max);
	
	/**
	 * エラー有無のチェック
	 * @return エラー有無（TRUE->エラー有、FALSE->エラー無）
	 */
	this.is_error = function() {
		if(data.length == 0) return false;
		return (parseInt(data) < min_val || parseInt(data) > max_val);
	}
}
/**
 * 半角数字であることをチェックするクラス（半角数字でない場合：エラー）
 * @param element_id チェック対象となる要素のＩＤ
 */
function HalfNumberCheckerId(element_id) {
	/**
	 * チェック対象となる値
	 */
	var data = get_element_by_id(element_id).value;
	/**
	 * エラー有無のチェック
	 * @return エラー有無（TRUE->エラー有、FALSE->エラー無）
	 */
	this.is_error = function() {
		if(data.length == 0) return false;
		return (data.match(/^[0-9]*$/) == null);
	}
}
/**
 * 半角英字であることをチェックするクラス（半角英字でない場合：エラー）
 * @param element_id チェック対象となる要素のＩＤ
 */
function HalfAlphabetCheckerId(element_id) {
	/**
	 * チェック対象となる値
	 */
	var data = get_element_by_id(element_id).value;
	/**
	 * エラー有無のチェック
	 * @return エラー有無（TRUE->エラー有、FALSE->エラー無）
	 */
	this.is_error = function() {
		if(data.length == 0) return false;
		return (data.match(/^[a-zA-Z]*$/) == null);
	}
}
/**
 * 半角英数字であることをチェックするクラス（半角英数字でない場合：エラー）
 * @param element_id チェック対象となる要素のＩＤ
 */
function HalfAlphaNumCheckerId(element_id) {
	/**
	 * チェック対象となる値
	 */
	var data = get_element_by_id(element_id).value;
	/**
	 * エラー有無のチェック
	 * @return エラー有無（TRUE->エラー有、FALSE->エラー無）
	 */
	this.is_error = function() {
		if(data.length == 0) return false;
		return (data.match(/^[a-zA-Z0-9_]*$/) == null);
	}
}
/**
 * 日付が存在するかをチェックするクラス（日付に誤りがある場合場合：エラー）
 * @param year_element_id チェック対象となる年の要素のＩＤ
 * @param month_element_id チェック対象となる月の要素のＩＤ
 * @param day_element_id チェック対象となる日の要素のＩＤ
 */
function DateCheckerId(year_element_id, month_element_id, day_element_id) {
	/**
	 * チェック対象となる年の値
	 */
	var year = get_element_by_id(year_element_id).value;
	/**
	 * チェック対象となる月の値
	 */
	var month = get_element_by_id(month_element_id).value;
	/**
	 * チェック対象となる日の値
	 */
	var day = get_element_by_id(day_element_id).value;
	
	/**
	 * エラー有無のチェック
	 * @return エラー有無（TRUE->エラー有、FALSE->エラー無）
	 */
	this.is_error = function() {
		if(year.length == 0 && month.length == 0 && day.length == 0) return false;
		var date_data = new Date(parseInt(year), parseInt(month) - 1, parseInt(day));
		if(date_data.getFullYear() == parseInt(year) && date_data.getMonth() == parseInt(month) - 1 && date_data.getDate() == parseInt(day)) {
			return false;
		} else {
			return true;
		}
	}
}
/**
 * 日付が存在するかをチェックするクラス（日付に誤りがある場合場合：エラー）
 * @param year_element_id チェック対象となる年の要素のＩＤ
 * @param month_element_id チェック対象となる月の要素のＩＤ
 * @param day_element_id チェック対象となる日の要素のＩＤ
 * @param no_check_value 非チェック対象となる値
 */
function DateSelectBoxSingleCheckerId(year_element_id, month_element_id, day_element_id, no_check_value) {
	/**
	 * チェック対象となる年の値
	 */
	var year_elem = get_element_by_id(year_element_id);
	var year = String(year_elem.options[year_elem.selectedIndex].value);
	/**
	 * チェック対象となる月の値
	 */
	var month_elem = get_element_by_id(month_element_id);
	var month = String(month_elem.options[month_elem.selectedIndex].value);
	/**
	 * チェック対象となる日の値
	 */
	var day_elem = get_element_by_id(day_element_id);
	var day = String(day_elem.options[day_elem.selectedIndex].value);
	/**
	 * 非チェック値
	 */
	var no_value = String(no_check_value);
	
	/**
	 * エラー有無のチェック
	 * @return エラー有無（TRUE->エラー有、FALSE->エラー無）
	 */
	this.is_error = function() {
		if(year.length == 0 && month.length == 0 && day.length == 0) return false;
		if(str_cmp(year, no_value) == 0 || str_cmp(month, no_value) == 0 || str_cmp(day, no_value) == 0) return false;
		var date_data = new Date(parseInt(year), parseInt(month) - 1, parseInt(day));
		if(date_data.getFullYear() == parseInt(year) && date_data.getMonth() == parseInt(month) - 1 && date_data.getDate() == parseInt(day)) {
			return false;
		} else {
			return true;
		}
	}
}
/**
 * 日付が存在するかをチェックするクラス（日付に誤りがある場合場合：エラー）
 * @param year_val チェック対象となる年の要素のＩＤ
 * @param month_val チェック対象となる月の要素のＩＤ
 * @param day_val チェック対象となる日の要素のＩＤ
 */
function DateCheckerVal(year_val, month_val, day_val) {
	/**
	 * チェック対象となる年の値
	 */
	var year = year_val;
	/**
	 * チェック対象となる月の値
	 */
	var month = month_val;
	/**
	 * チェック対象となる日の値
	 */
	var day = day_val;
	
	/**
	 * エラー有無のチェック
	 * @return エラー有無（TRUE->エラー有、FALSE->エラー無）
	 */
	this.is_error = function() {
		if(year.length == 0 && month.length == 0 && day.length == 0) return false;
		var date_data = new Date(parseInt(year), parseInt(month) - 1, parseInt(day));
		if(date_data.getFullYear() == parseInt(year) && date_data.getMonth() == parseInt(month) - 1 && date_data.getDate() == parseInt(day)) {
			return false;
		} else {
			return true;
		}
	}
}
/**
 * 接頭子が正しいかをチェックするクラス（接頭子が異なっている場合：エラー）
 * @param element_id チェック対象となる要素のＩＤ
 * @param arg_prefix 拡張子
 */
function PrefixCheckerId(element_id, arg_prefix) {
	/**
	 * チェック対象となる値
	 */
	var data = get_element_by_id(element_id).value;
	/**
	 * 接頭子
	 */
	var prefix = new Array();
	if(arg_prefix instanceof Array) {
		for(var i = 0; i < arg_prefix.length; i++) {
			prefix.push(arg_prefix[i]);
		}
	} else {
		prefix.push(arg_prefix);
	}
	
	/**
	 * エラー有無のチェック
	 * @return エラー有無（TRUE->エラー有、FALSE->エラー無）
	 */
	this.is_error = function() {
		if(data.length == 0) return false;
		for(var i = 0; i < prefix.length; i++) {
			if(string_prefix_cmp(data, prefix[i]) == true) return false;
		}
		return true;
	}
}
/**
 * 拡張子が正しいかをチェックするクラス（拡張子が異なっている場合：エラー）
 * @param element_id チェック対象となる要素のＩＤ
 * @param arg_suffix 拡張子
 */
function SuffixCheckerId(element_id, arg_suffix) {
	/**
	 * チェック対象となる値
	 */
	var data = get_element_by_id(element_id).value;
	/**
	 * 拡張子
	 */
	var suffix = new Array();
	if(arg_suffix instanceof Array) {
		for(var i = 0; i < arg_suffix.length; i++) {
			suffix.push(arg_suffix[i]);
		}
	} else {
		suffix.push(arg_suffix);
	}
	
	/**
	 * エラー有無のチェック
	 * @return エラー有無（TRUE->エラー有、FALSE->エラー無）
	 */
	this.is_error = function() {
		if(data.length == 0) return false;
		for(var i = 0; i < suffix.length; i++) {
			if(string_suffix_cmp(data, suffix[i]) == true) return false;
		}
		return true;
	}
}
/**
 * メールアドレスであることをチェックするクラス（メールアドレスでない場合：エラー）
 * @param element_id チェック対象となる要素のＩＤ
 */
function MailAddressCheckerId(element_id) {
	/**
	 * チェック対象となる値
	 */
	var data = get_element_by_id(element_id).value;
	/**
	 * エラー有無のチェック
	 * @return エラー有無（TRUE->エラー有、FALSE->エラー無）
	 */
	this.is_error = function() {
		if(data.length == 0) return false;
		return (data.match(/^[a-zA-Z0-9_\.\-]+@[A-Za-z0-9][a-zA-Z0-9_\.\-]*\.[A-Za-z0-9]+$/) == null);
	}
}
/**
 * URLであることをチェックするクラス（URLでない場合：エラー）
 * @param element_id チェック対象となる要素のＩＤ
 */
function UrlAddressCheckerId(element_id) {
	/**
	 * チェック対象となる値
	 */
	var data = get_element_by_id(element_id).value;
	/**
	 * エラー有無のチェック
	 * @return エラー有無（TRUE->エラー有、FALSE->エラー無）
	 */
	this.is_error = function() {
		if(data.length == 0) return false;
		return (data.match(/^(https?|ftp)(:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)$/) == null);
	}
}
/**
 * 電話番号であることをチェックするクラス（電話番号でない場合：エラー）
 * @param element_id チェック対象となる要素のＩＤ
 */
function TelephoneNumberCheckerId(element_id) {
	/**
	 * チェック対象となる値
	 */
	var data = get_element_by_id(element_id).value;
	/**
	 * エラー有無のチェック
	 * @return エラー有無（TRUE->エラー有、FALSE->エラー無）
	 */
	this.is_error = function() {
		if(data.length == 0) return false;
		return (data.match(/\d{2,4}-\d{2,4}-\d{4}$/) == null);
	}
}
/**
 * フリーダイアルであることをチェックするクラス（フリーダイアルでない場合：エラー）
 * @param element_id チェック対象となる要素のＩＤ
 */
function FreeDialCheckerId(element_id) {
	/**
	 * チェック対象となる値
	 */
	var data = get_element_by_id(element_id).value;
	/**
	 * エラー有無のチェック
	 * @return エラー有無（TRUE->エラー有、FALSE->エラー無）
	 */
	this.is_error = function() {
		if(data.length == 0) return false;
		return (data.match(/0120-\d+-\d+/) == null);
	}
}

