<!--
/*******************************************************************************
* システム名：HELP@RESULT
* 著作権：Copyright(C) Ace JAPAN
* プログラム名：common.js
* 説明：共通JavaScriptファイル
*******************************************************************************/


	/****************************************************************
	* 機能：ボタン２度押し抑止
	* 引数：フォームオブジェクト
	*
	* 使用方法
	* ボタン２度押し制御を有効にする場合、ボタンのonClickイベントに
	* sendCheck(フォーム, [ボタン])をセットする
	* 2パターンの制御方法があります。
	* ▼イメージ制御
	* 下記のタグを制御したいソースに埋め込みます。
	* <div id="CoverIMG" style="position:absolute;top:0px;left:0px;z-index:-1;">
	* 	<img src="./spacer.gif" width="100%" alt="">
	* </div>
	* ▼各ボタン制御
	* sendCheck(フォーム, [ボタン])をセットするだけです。
	* ※sendCheckを埋め込む場所によってパラメータが異なります。
	*   フォーム埋め込み時：(this, this.[submitボタン名])
	*   ※複数のボタンが同じ名前の場合、ボタン値は取得出来ません。
	*     複数ボタンがある場合には、ボタン埋め込みを行ってください。
	*   ボタン埋め込み時：(this.form, this.value)
	****************************************************************/
	var ahref = new Array();
	function sendCheck(Obj, Button){

		// イメージ画像が見つかった場合は、画像制御を行う
		if (document.getElementById('CoverIMG') == null) {
			// まずはリンク情報を格納する
			var aobj = document.getElementsByTagName('A');
			for (i = 0; aobj.length>i; i++) {
				ahref[i] = aobj[i].getAttribute('href');
			}

			len = document.forms.length;
			for (j = 0; j < len; j++) {
				formex = document.forms[j];
				// フォーム内の各要素をチェックする
				for (i = 0; i < formex.elements.length; i++) {
					type = formex.elements[i].type;
					// 要素のタイプが｢submit｣｢button｣｢reset｣の場合、抑止にする
					if (type == "submit" || type == "button" || type == "reset") {
						formex.elements[i].disabled = true;
					}
					// 要素のタイプが｢checkbox｣の場合、抑止にする
					else if (type == "checkbox") {
						//input要素を生成
						var myinput = Obj.document.createElement("input");
						//新たなinput要素にtype、value、onClickの各属性を追加。
						myinput.setAttribute('type', "hidden");
						myinput.setAttribute('name', formex.elements[i].name);
						if (formex.elements[i].checked == true) {
							myinput.setAttribute('value', formex.elements[i].value);
						} else {
							myinput.setAttribute('value', "");
						}
						Obj.appendChild(myinput);
						formex.elements[i].disabled = true;
					}
					// 要素のタイプが｢radio｣の場合、抑止にする
					else if (type == "radio") {
						if (formex.elements[i].checked == true) {
							//input要素を生成
							var myinput = Obj.document.createElement("input");
							//新たなinput要素にtype、value、onClickの各属性を追加。
							myinput.setAttribute('type', "hidden");
							myinput.setAttribute('name', formex.elements[i].name);
							myinput.setAttribute('value', formex.elements[i].value);
							Obj.appendChild(myinput);
						}
						formex.elements[i].disabled = true;
					}
					// 要素のタイプが｢text｣｢textarea｣｢select-one｣｢select-multiple｣の場合、抑止にする
					else if (type == "text" || type == "textarea" || type == "select-one"
							|| type == "select-multiple") {
						formex.elements[i].readOnly = true;
						formex.elements[i].style.color = "#999999";
					}
				}
			}

			// リンクを無効にする
			var aobj = document.getElementsByTagName('A');
			for (i = 0; aobj.length>i; i++) {
				aobj[i].removeAttribute('href');
			}

			// Submitボタンのvalueをhiddenで作成する
			if (typeof(Button) == "object") {
				//input要素を生成
				var myinput = Obj.document.createElement("input");
				//新たなinput要素にtype、value、onClickの各属性を追加。
				myinput.setAttribute('type', "hidden");
				myinput.setAttribute('name', Button.name);
				myinput.setAttribute('value', Button.value);
				Obj.appendChild(myinput);
			}
		} else {
			// 画像で制御を行う
			document.getElementById('CoverIMG').style.zIndex = "3";
		}

		// Formから呼び出された場合、エラーになるので必要
		if (typeof(Obj) != "undefined") {
			Obj.submit();
		}
	}



	/****************************************************************
	* 機能：キー操作による制御を行う
	* 引数：なし
	* 使用方法
	* 各制御説明を参照
	****************************************************************/
	function nextForm(){

		// -------------------------------------------------
		// Enterキーによる誤送信防止 
		// 使用方法
		// Enterキーを有効にしたい場合は、id='none'にする
		// TEXTAREAとボタンはデフォルトでスルーされる
		// -------------------------------------------------
		// TEXTAREAの場合のみ、Enter処理を実行させる
		if (event.keyCode == 13 && document.activeElement.type != "textarea"
				&& document.activeElement.id != "none"
				&& document.activeElement.type != "button"
				&& document.activeElement.type != "submit") {
			return false;

		// -------------------------------------------------
		// Escキーによるボタン２度押し抑止解除
		// Escキーを押下されたらボタン２度押し抑止を解除する
		// 使用方法
		// このファイルを設置するだけで動作する
		// -------------------------------------------------
		} else if (event.keyCode == 27) {
			// イメージ画像が見つかった場合は、画像制御の解除を行う
			if (document.getElementById('CoverIMG') == null) {
				len = document.forms.length;
				for (j = 0; j < len; j++) {
					formex = document.forms[j];
					// フォーム内の各要素をチェックする
					for (i = 0; i < formex.elements.length; i++) {
						type = formex.elements[i].type;
						// 要素のタイプが｢submit｣｢button｣｢reset｣の場合、抑止にする
						if (type == "submit" || type == "button" || type == "reset") {
							formex.elements[i].disabled = false;
						}
						// 要素のタイプが｢radio｣｢checkbox｣の場合、抑止にする
						else if (type == "radio" || type == "checkbox") {
							formex.elements[i].disabled = false;
						}
						// 要素のタイプが｢text｣｢textarea｣｢select-one｣｢select-multiple｣の場合、抑止にする
						else if (type == "text" || type == "textarea" || type == "select-one"
								|| type == "select-multiple") {
							formex.elements[i].readOnly = false;
							formex.elements[i].style.color = "#000000";
						}
					}
				}
				// リンクを有効にする
				var aobj = document.getElementsByTagName('A');
				for( i = 0; aobj.length>i; i++) {
					aobj[i].setAttribute('href',ahref[i]);
				}
			} else {
				// 画像で制御を解除する
				document.getElementById('CoverIMG').style.zIndex = "-1";
			}
		}
		return true;
	}
	window.document.onkeydown = nextForm;



	/****************************************************************
	* 機能：日付リストの日付の制御を行う
	* 引数：obj				this
	*
	* 使用方法
	* 年・月のリストボックスにonChangeイベントをセットする
	* onChange='setDay(this);'
	****************************************************************/
	function setDay(obj){
		obj = obj.form;
		var years = parseInt(obj.years.options[obj.years.selectedIndex].value);
		var months = obj.months.options[obj.months.selectedIndex].value;
		var lastday = monthday(years,months);
		var itemnum = obj.days.length;
		if (lastday - 1 < obj.days.selectedIndex) {
			obj.days.selectedIndex = lastday - 1;
		}
		obj.days.length = lastday;
		for (cnt = itemnum + 1;cnt <= lastday;cnt++) {
			obj.days.options[cnt - 1].text = cnt;
		}
	}
	function monthday(years,months){
		var lastday = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
		if (((years % 4 == 0) && (years % 100 != 0)) || (years % 400 == 0)){
			lastday[1] = 29;
		}
		return lastday[months - 1];
	}



	/****************************************************************
	* 機能：別画面表示
	* 引数：ID				URLパラメータ引数
	*     ：frame			遷移先URL
	*
	* 使用方法
	* showWindow("URLパラメータ引数", "遷移先URL")
	****************************************************************/
	function showWindow(ID, frame) {
		var act = frame + '?ID=' + ID;
		window.open(
			act,   //移動先
			'new',
			'width=650px, height=570px, resizable=no'
		);
	}

	/****************************************************************
	* 機能：別画面表示
	* 引数：ID				URLパラメータ引数
	*     ：frame			遷移先URL
	*
	* 使用方法
	* showWindow("URLパラメータ引数", "遷移先URL")
	****************************************************************/
	function showWindowResize(ID, frame) {
		var act = frame + '?ID=' + ID;
		window.open(
			act,   //移動先
			'new',
			'width=650px, height=570px, resizable=yes'
		);
	}

	// マウスポインタの変更
	function setCSR(mType) {
		document.body.style.cursor = mType;
	}



	/****************************************************************
	* 機能：テーブルなど選択された背景色を変更する
	* 引数：obj				this
	*     ：id				変更id番号
	*     ：Cnt				変更項目id数
	*     ：color			元のカラー
	*
	* 使用方法
	* 背景変更をする部分に｢id='(テーブル数)rowxx'｣をセットする
	* change_tb_bgcolor(this, "(id:位置番号)", "テーブル数", "元カラー")
	****************************************************************/
	function change_tb_bgcolor(obj, id, Cnt, color) {
		form = obj.form;
		idnumber = "id"+id;
		if (form.document.all(idnumber).checked == false) {
			var bgcolor = color;
		} else {
			var bgcolor = "#FFFF99";
		}
		for(var i = 0; i < Cnt; i++) {
			tdnumber = i+"row"+id;
			form.document.getElementById(tdnumber).style.backgroundColor = bgcolor;
		}
	}



	/****************************************************************
	* 機能：テーブルなど選択された背景色を変更する
	* 引数：id				変更id番号
	*     ：color			変更カラー
	*     ：selectid		選択済みid
	*
	* 使用方法
	* 背景変更をする部分に｢id='(テーブル数)rowxx'｣をセットする
	* change_bgcolor("(id:位置番号)", "変更カラー", "選択済みid")
	****************************************************************/
	function change_bgcolor(id, color, selectid) {

		if (id != selectid) {
			//選択背景を変更する
			document.getElementById(id).style.backgroundColor = color;
		}
	}



	/****************************************************************
	* 機能：全チェックボックスの切り替えを行う
	* 引数：obj				this
	*     ：switch			ON / OFF切り替え (True / False)
	*     ：mode			全て / 一部指定 (All / Select)
	*
	* 使用方法
	* チェックボックスの全チェック及び、全解除を行うForm内にボタンを
	* 設置します。
	* modeをSelectにした場合、class='auto_check'をチェックボックスに
	* 設定してください。
	* onclick="allcheck(this, (true / false), '(All / Select)');"
	****************************************************************/
	function allcheck(obj, tf, mode) {

		form = obj.form;
		// チェックボックスの数
		var ElementsCount = form.elements.length;
		for (i = 0; i < ElementsCount; i++) {
			var element = form.elements[i].className;
			// Typeがcheckboxの時だけ処理を行う
			if (form.elements[i].type == "checkbox") {
				if (mode == "Select") {
					if (element == "auto_check") {
						form.elements[i].checked = tf;
					}
				} else {
					form.elements[i].checked = tf;
				}
			}
		}
	}



	/****************************************************************
	* 機能：全チェックボックスの切り替えを行い、背景色を変更する
	* 引数：obj				this
	*     ：switch			ON / OFF切り替え (True / False)
	*     ：mode			全て / 一部指定 (All / Select)
	*     ：id				変更id番号
	*     ：Cnt				変更項目id数
	*     ：color			元のカラー
	*
	* 使用方法
	* チェックボックスの全チェック及び、全解除を行うForm内にボタンを
	* 設置します。
	* modeをSelectにした場合、class='auto_check'をチェックボックスに
	* 設定してください。
	* onclick="allcheck(this, (true / false), '(All / Select)');"
	****************************************************************/
	function allcheck_plus(obj, tf, mode, id, Cnt, color) {

		form = obj.form;
		var j = 0;
		// チェックボックスの数
		var ElementsCount = form.elements.length;
		for (i = 0; i < ElementsCount; i++) {
			var element = form.elements[i].className;
			// Typeがcheckboxの時だけ処理を行う
			if (form.elements[i].type == "checkbox") {
				if (mode == "Select") {
					if (element == "auto_check") {
						form.elements[i].checked = tf;
						change_tb_bgcolor(obj, j, Cnt, color);
					}
				} else {
					form.elements[i].checked = tf;
					change_tb_bgcolor(obj, j, Cnt, color);
				}
				j = j + 1;
			}
		}
	}



	/**************************************************************** 
	* 機能：スタートページ設定
	* 引数：setUrl			ステートぺージにするURL
	*
	* 使用方法
	* href="javascript:setStartPage('http://kmgr.info');"
	****************************************************************/ 
	function setStartPage(setUrl){
		document.body.style.behavior="url(#default#homepage)";
		document.body.setHomePage(setUrl);
	}



	/**************************************************************** 
	* 機能：画面を非表示にする
	* 引数：ch			チャンネル名
	*
	* 使用方法
	* 表示/非表示の切り替えを行う記述を<SPAN id='ID名'></SAPN>で
	* 囲み、表示/非表示切り替えを行うコントロールをボタンなどに埋め込む
	* <A href="javascript:checkExpand('ID名');">閉じる</A>
	****************************************************************/ 
	function checkExpand(ch) {
		var obj=document.all && document.all(ch) || document.getElementById && document.getElementById(ch);
		if(obj && obj.style) {
			obj.style.display = "none" == obj.style.display ?"" : "none" 
		}
	}



	/**************************************************************** 
	* 機能：クリップボードにコピー 
	* 引数：arg			対象テキスト名
	*
	* 使用方法
	* <input type='button' name='Copy' value='コピー' onClick='CopyText("Text");'>
	****************************************************************/ 
	function CopyText(arg){
		var obj=document.all && document.all(arg) || document.getElementById && document.getElementById(arg);
		if (obj.value) {
			var doc = document.body.createTextRange();
			doc.moveToElementText(obj);
			doc.execCommand("copy");
			alert('クリップボードにコピーしました。');
		} else {
			alert('コピーするデータがありません。');
		}
	}
//-->
