//-------------------------------------------------------値追加削除関数
/**
 * 指定したフォームの指定したパラメータに指定した値を配備
 * @param form_name フォーム名
 * @param param_name パラム名
 * @param param_data パラム値
 */
function set_form_paramater(form_name, param_name, param_data) {
	document[form_name][param_name].value = param_data;
}
/**
 * 現在時刻時間を取得
 * @return 現在時刻時間
 */
function get_now_time() {
	var now = new Date();// 現在日時の取得
	return now.getTime();// 現在日時の返却
}
/**
 * フォームの実行
 * @param form_name フォーム名
 * @param time_name 時間パラメータの名前（キャッシュに対する処置）
 * @param method_name 処理振り分け用のパラム名
 * @param method_data 処理振り分け用のパラム値
 */
function submit_form(form_name, time_name, method_name, method_data) {
	var now = new Date();// 現在日時の取得
	// 日付の設定
	if((typeof time_name == 'undefined') == false) {
		set_form_paramater(form_name, time_name, now.getTime());
	}
	// メソッドの設定
	if((typeof method_data == 'undefined') == false) {
		set_form_paramater(form_name, method_name, method_data);
	}
	// サブミット
	document[form_name].submit();
}
/**
 * フォーム値のセット(※サブミットは実行しない)
 * @param form_name フォーム名
 * @param time_name 時間パラメータの名前（キャッシュに対する処置）
 * @param method_name 処理振り分け用のパラム名
 * @param method_data 処理振り分け用のパラム値
 */
function setting_form(form_name, time_name, method_name, method_data) {
	var now = new Date();// 現在日時の取得
	// 日付の設定
	if((typeof time_name == 'undefined') == false) {
		set_form_paramater(form_name, time_name, now.getTime());
	}
	// メソッドの設定
	if((typeof method_data == 'undefined') == false) {
		set_form_paramater(form_name, method_name, method_data);
	}
}
/**
 * 指定したＩＤを持つエレメントを取得
 * @param element_id 要素ＩＤ
 * @return 取得した要素
 */
function get_element_by_id(element_id) {
	return document.getElementById(element_id);
}
/**
 * 指定したＩＤを持つエレメントの値を取得
 * @param element_id 要素ＩＤ
 * @return 取得した要素の値
 */
function get_element_value_by_id(element_id) {
	return document.getElementById(element_id).value;
}
/**
 * 指定した要素ＩＤに表示する内容をセット
 * @param div_id 要素ＩＤ
 * @param set_value 表示する内容
 */
function set_div_value(div_id, set_value) {
	var element = get_element_by_id(div_id);
	element.innerHTML = set_value;
}
/**
 * 指定したフォーム(SingleSelectBox)の指定したパラメータに指定した値を配備
 * @param form_name フォーム名
 * @param param_name パラム名
 * @param param_data パラム値
 */
function set_form_single_selectbox(form_name, param_name, param_data) {
	document[form_name][param_name].selectedIndex = parseInt(param_data);
}
/**
 * 指定したフォーム(CheckBox)の指定したパラメータに指定した値を配備
 * @param form_name フォーム名
 * @param param_name パラム名
 * @param param_data パラム値
 */
function set_form_checkbox(form_name, param_name, param_data) {
	document[form_name][param_name].checked = Boolean(param_data);
}

//-------------------------------------------------------クラス変更関数
/**
 * 指定した要素ＩＤに配備されているクラスを置換
 * @param div_id 要素ＩＤ
 * @param old_class 置換前のクラス名
 * @param new_class 置換後のクラス名
 */
function change_class_name(div_id, old_class, new_class) {
	var element = get_element_by_id(div_id);
	element.className = element.className.replace(old_class, new_class);
}
/**
 * 選択中要素ＩＤのクラスを置換（非選択要素ＩＤのクラスは戻す）
 * @param div_list 要素ＩＤリスト
 * @param selected_id 選択中要素ＩＤ
 * @param old_class 置換前のクラス名
 * @param new_class 置換後のクラス名
 */
function change_select_class(div_list, selected_id, old_class, new_class) {
	for(var i = 0; i < div_list.length; i++) {
		var selected_item = get_element_by_id(div_list[i]);
		if(str_cmp(div_list[i], selected_id) == 0) {
			selected_item.className = selected_item.className.replace(old_class, new_class);
		} else {
			selected_item.className = selected_item.className.replace(new_class, old_class);
		}
	}
}

//-------------------------------------------------------要素追加削除関数
/**
 * 要素の生成
 * @param tag タグのタイプ
 * @param attributes 属性（配列[属性名=>属性値]）
 * @return 生成した要素
 */
function create_element(tag, attributes) {
	var node = document.createElement(tag);
	for(var attr in attributes) {
		if(attributes.hasOwnProperty(attr) == true) {
			node.setAttribute(attr, attributes[attr]);
		}
	}
	return node;
}
/**
 * 指定した兄要素に指定した弟要素を追加
 * @param younger_node 追加する弟要素
 * @param older_node 追加先の兄要素
 * @return オブジェクトノード
 */
function insert_after(younger_node, older_node) {
	return older_node.parentNode.insertBefore(younger_node, older_node.nextSibling);
}
/**
 * 要素の削除
 * @param element 削除対象の要素
 */
function remove(element) {
	element.parentNode.removeChild(element);
}

//-------------------------------------------------------メッセージ表示関数
/**
 * メッセージＩＤの生成
 * @param view_id メッセージを表示する要素のＩＤ
 */
function get_view_message(view_id) {
	return view_id + "_message";
}
/**
 * メッセージの非表示
 * @param view_id メッセージを表示する要素のＩＤ
 */
function hide_view_message(view_id) {
	var message_id = get_view_message(view_id);
	if(get_element_by_id(message_id) != null) {
		remove(get_element_by_id(message_id));
	}
}
/**
 * メッセージの表示（青色）
 * @param message_value 描画メッセージ
 * @param view_id メッセージを表示する要素のＩＤ
 * @param view_position メッセージの表示位置（'under'または'neighbor'）
 */
function show_view_blue_message(message_value, view_id, view_position) {
	var message_id = get_view_message(view_id);
	// 既に表示されているエラーメッセージを消去
	if(get_element_by_id(message_id) != null) {
		remove(get_element_by_id(message_id));
	}
	// メッセージの表示
	var message;// エレメント要素を格納
	if(view_position == 'under') {
		message = create_element('div', { id: message_id, style: "color:blue;" } );
	} else {
		message = create_element('span', { id: message_id, style: "color:blue;" } );
	}
	if(message.runtimeStyle) {
		message.runtimeStyle.cssText = "color:#0000FF;";
	}
	message.innerHTML = message_value;
	insert_after(message, get_element_by_id(view_id));
}
/**
 * メッセージの表示（赤色）
 * @param message_value 描画メッセージ
 * @param view_id メッセージを表示する要素のＩＤ
 * @param view_position メッセージの表示位置（'under'または'neighbor'）
 */
function show_view_red_message(message_value, view_id, view_position) {
	var message_id = get_view_message(view_id);
	// 既に表示されているエラーメッセージを消去
	if(get_element_by_id(message_id) != null) {
		remove(get_element_by_id(message_id));
	}
	// メッセージの表示
	var message;// エレメント要素を格納
	if(view_position == 'under') {
		message = create_element('div', { id: message_id, style: "color:red;" } );
	} else {
		message = create_element('span', { id: message_id, style: "color:red;" } );
	}
	if(message.runtimeStyle) {
		message.runtimeStyle.cssText = "color:#FF0000;";
	}
	message.innerHTML = message_value;
	insert_after(message, get_element_by_id(view_id));
}
/**
 * メッセージの表示（カスタム）
 * @param message_value 描画メッセージ
 * @param view_id メッセージを表示する要素のＩＤ
 * @param view_position メッセージの表示位置（'under'または'neighbor'）
 * @param name_color カラー名（例：red）
 * @param rgb_color ＲＧＢカラー値（例：#FF0000）
 */
function show_view_custom_message(message_value, view_id, view_position, name_color, rgb_color) {
	var message_id = get_view_message(view_id);
	var name_value = "color:" + name_color + ";";
	var rgb_value = "color:" + rgb_color + ";";
	// 既に表示されているエラーメッセージを消去
	if(get_element_by_id(message_id) != null) {
		remove(get_element_by_id(message_id));
	}
	// メッセージの表示
	var message;// エレメント要素を格納
	if(view_position == 'under') {
		message = create_element('div', { id: message_id, style: name_value } );
	} else {
		message = create_element('span', { id: message_id, style: name_value } );
	}
	if(message.runtimeStyle) {
		message.runtimeStyle.cssText = rgb_value;
	}
	message.innerHTML = message_value;
	insert_after(message, get_element_by_id(view_id));
}

//-------------------------------------------------------チェック関数
/**
 * 指定したデータが「undefined」かチェック
 * @param check_data チェックデータ
 * @return TRUE->「undefined」データ
 */
function is_undefined(check_data) {
	return (typeof check_data == 'undefined');
}
/**
 * 指定したデータが「length」を保有するかチェック
 * @param check_data チェックデータ
 * @return TRUE->「length」保有データ
 */
function has_length(check_data) {
	return !(typeof check_data.length == 'undefined');
}

//-------------------------------------------------------文字列関数
/**
 * 文字列比較
 * @param src 比較元文字列
 * @param des 比較先文字列
 * @return 同じ場合０を返却
 */
function str_cmp(src, des) {
	var cmp;
	if((cmp = src.length - des.length) != 0) {
		return cmp;
	}
	for(var pos = 0; pos < src.length; pos++) {
		var src_ch = src.charCodeAt(pos);
		var des_ch = des.charCodeAt(pos);
		if((cmp = (src_ch - des_ch)) != 0) break;
	}
	return cmp;
}
/**
 * 接頭語の文字列チェック
 * @param src 比較対象文字列
 * @param prefix 比較文字の接頭語
 * @return 接頭語が指定した文字->TRUE
 */
function string_prefix_cmp(src, prefix) {
	if((src.length - prefix.length) < 0) {
		return false;
	}
	var prefix_str = src.substring(0, prefix.length);
	return (str_cmp(prefix_str, prefix) == 0);
}
/**
 * 接尾語の文字列チェック
 * @param src 比較対象文字列
 * @param suffix 比較文字の接尾語
 * @return 接尾語が指定した文字->TRUE
 */
function string_suffix_cmp(src, suffix) {
	if((src.length - suffix.length) < 0) {
		return false;
	}
	var suffix_str = src.substring(src.length - suffix.length, src.length);
	return (str_cmp(suffix_str, suffix) == 0);
}
/**
 * 重複を取り除く関数
 * @param array 配列
 * @return 重複を取り除いた配列
 */
function array_to_unique(array) {
	var storage = new Object();
	var uniqueArray = new Array();
	for(var i = 0; i < array.length; i++) {
		var value = array[i];
		if((value in storage) == false) {
			storage[value] = true;
			uniqueArray.push(value);
		}
	}
	return uniqueArray;
}

