// 
// prototype.jpを利用。
// 
// - ajaxToggleRequest
// displayの表示に応じてリクエストを制御する。
// 表示したタイミングでリクエストを行い、
// 閉じたタイミングでHTMLを空にする。
// 主に「on/off」を兼ねるスイッチボタンで利用し、
// 通常はElement.toggle/show([id])と併用する。※１
// 
// - ajaxToggleRequestOnce
// displayの表示に応じてリクエストを制御する。
// 表示したタイミングでリクエストを行い、
// その後の開閉はトグル制御のみ行う（非リクエスト）。
// 但しajaxGetRequestが行われる度に、
// ON/OFF情報は破棄されるので注意が必要。
// 
// - ajaxToggleReset
// displayの表示に応じてリクエストを制御する。
// 表示したタイミングでリクエストを行い、
// 閉じたタイミングでHTMLを空にする。
// 主に「閉じる」等の特定用途ボタンで利用し、
// 通常はElement.toggle/show([id])と併用する。※１
//
// - ajaxGetRequest
// リクエストのみ行う。
// フォーム名が引数に与えられている場合のみ、
// そのフォーム中の要素を連結しCGIに送信する。
// これにより 取得のみ / 送信して取得 の使い分けが可能。
// なおフォームに「id」指定が必須となる。
// 
// ※１
// 基本は「toggle」を利用し、
// 併せてajaxToggleResetにより中身をON/OFF（代入の有無）すれば問題ない。
// 
// 但し入れ子構造の際に少々コツが必要で、
// toggle/showの適切な使い分けが必要となる。
// 
// <input type="button" value="***" class="***" onClick="Element.show('parent'); ajaxToggleRequest('***', 'parent');">
// <div id="parent">
//    <input type="button" value="***" class="***" onClick="Element.toggle('child01'); ajaxToggleRequest('***', 'child01');">
//    <div id="child01">
//       TEST.
//    </div>
//    <div id="child02">
//    </div>
// </div>
// 
// 例えばボタン１のshowで「parent」を制御し表示させ、
// 続けてajaxToggleRequestで「child02」にデータを読み込むと仮定する。
// 次にparentを隠そうとした場合、showではidを対象としたOFFが不可能となるため、
// 単にajaxToggleRequestで「child02の中身を空にする」だけとなる。
// よって「child01」の内容は一度表示された後はそのままとなってしまう。
// 
// このような場合「parent」に対し「toggle」で制御しておけば、
// id自体を隠す事になるため問題なく制御可能となる。
// （同時にajaxToggleRequestでchild02の中身も空になる）
// 
// 次にボタン２の「toggle」で「child01」を制御しているが、
// 続けて「ajaxToggleRequest」で制御すると、何故かtoggleが効かなくなる（child01がONされない）。
// このような場合、この例では上記showによる問題点の範疇外となるため、
// （単一の内容のみ制御しているので、残ってしまう内容がない）
// 「show」で制御し「ajaxToggleRequest」にON/OFFを任せれば実現可能となる。
// 
// ==================================================
// 基本は「toggle」で、入れ子の中は「show」で制御。
// （toggleが使えるなら、その方が絶対に好ましい）
// これが基本っぽい。
// ==================================================
//
// またローディング演出はSafariでは正しく表示できないため
// 画面右上に表示を固定している。
//

dfFlag = new Array();	// 対象カラムのON/OFF状態
ocFlag = new Array();	// 対象カラムのON/OFF状態（ワンスモード）

//////////////////////////////////////////////////////////////////////
// トグルリクエスト（常にリクエストを行う）
//////////////////////////////////////////////////////////////////////
function ajaxToggleRequest (event, uriCGI, byId, formName, alertFlg) {

	// オープン ⇒ 初期ローディング
	if (!dfFlag[byId]) {
		ajaxGetRequest(event, uriCGI, byId, formName, alertFlg);
		dfFlag[byId] = 'on';

	// リセット処理 ⇒ クローズ
	} else {
		$(byId).innerHTML = '';
		dfFlag[byId] = '';

		// ローディング表示OFF
		//$('_processStatus').style.visibility="hidden";
		$('_processStatus').childNodes[0].style.display = 'none';
	}

}

//////////////////////////////////////////////////////////////////////
// トグルリクエストワンス（最初のみリクエスト、後はトグル制御のみ）
//////////////////////////////////////////////////////////////////////
function ajaxToggleRequestOnce (event, uriCGI, byId, formName, alertFlg) {

	// オープン ⇒ 初期ローディング
	if (!ocFlag[byId]) {
		ajaxGetRequest(event, uriCGI, byId, formName, alertFlg);
		ocFlag[byId] = 'on';

	// トグル表示処理
	} else {
		$(byId).toggle('byId');

		// ローディング表示OFF
		//$('_processStatus').style.visibility="hidden";
		$('_processStatus').childNodes[0].style.display = 'none';

	}

}

//////////////////////////////////////////////////////////////////////
// トグルリリセット（リセットして閉じるのみ行う）
//////////////////////////////////////////////////////////////////////
function ajaxToggleReset (event, byId) {

	// リセット処理 ⇒ クローズ
	$(byId).innerHTML = '';
	dfFlag[byId] = '';

	// ローディング表示OFF
	//$('_processStatus').style.visibility="hidden";
	$('_processStatus').childNodes[0].style.display = 'none';

}

//////////////////////////////////////////////////////////////////////
// リセット（eventは不要）
//////////////////////////////////////////////////////////////////////
function ajaxReset (byId) {

	// リセット処理 ⇒ クローズ
	$(byId).innerHTML = '';
	dfFlag[byId] = '';

	// ローディング表示OFF
	//$('_processStatus').style.visibility="hidden";
	$('_processStatus').childNodes[0].style.display = 'none';

}

//////////////////////////////////////////////////////////////////////
// 通常リクエスト
//////////////////////////////////////////////////////////////////////
function ajaxGetRequest (event, uriCGI, byId, formName, alertFlg) {

	// クリック座標取得
	if (!event) { event = window.event; }
	var mx, my;
	if (document.all) { // for IE
		mx = event.clientX+(document.body.scrollLeft || document.documentElement.scrollLeft);
		my = event.clientY+(document.body.scrollTop || document.documentElement.scrollTop);
	} else {
		mx = event.pageX;
		my = event.pageY;
	}

	// ウィンドウ表示位置調整
	mx -= 17;
	my -= 18;

	// Safari用強制調調整（右上に固定）
	//if (navigator.userAgent.toUpperCase().indexOf("SAFARI") >= 0) {
	//	mx = innerWidth - (45 + 10);
	//	my = 0;
	//}

	// ローディング表示ON
	$('_processStatus').childNodes[0].style.top = my + 'px';
	$('_processStatus').childNodes[0].style.left = mx + 'px';
	$('_processStatus').childNodes[0].style.display = 'block';
	//$('_processStatus').style.visibility="visible";
	//$('_processStatus').innerHTML = '<div class="status" style="top: ' + my + 'px; left: ' + mx + 'px;"><img src="../img/admin/cmn/loading_mini.gif" width="13" height="13" border="0" alt="処理中" title="処理中" /></div>';
	//$('_processStatus').innerHTML = '<div class="status" style="top: ' + my + 'px; left: ' + mx + 'px;">処理中</div>';

/*
	var cnt = 0;
	var blkId;
	var AryTxt = new Array('▏', '▎', '▍', '▌', '▋', '▊', '▉', '▊', '▋', '▌', '▍', '▎');
	ProcessText = function (cnt) {
		$('_processStatus').innerHTML = '<div class="status" style="top: ' + my + 'px; left: ' + mx + 'px;">' + AryTxt[cnt] + '</div>';
		if (++cnt >= AryTxt.length) cnt = 0;
		setTimeout("ProcessText('" + cnt + "')", 100);
	}
	ProcessText(cnt);
*/

	// 値の生成
	var sendData = 'byid=' + byId;
	if (formName) sendData += '&' + Form.serialize($(formName));

	// リクエスト
	var myAjax = new Ajax.Updater (
		byId,
		uriCGI, 
		{
			method: 'post', 
			parameters: sendData, 
			//onComplete: showResponse,
			onLoaded:   showLoaded,
			onFailure:  showFailure,
			evalScripts: true
		}
	);

	function showResponse (originalRequest) {
		$(byId).innerHTML = originalRequest.responseText;
	}

	function showLoaded (originalRequest) {
		if (alertFlg) {
			$('_processStatus').innerHTML = '<div class="status" style="top: ' + my + 'px; left: ' + mx + 'px;">処理完了</div>';
			setTimeout("_clearStatus()", 900);
			_clearStatus = function resetStatus () {
				//$('_processStatus').innerHTML = '';
				//$('_processStatus').style.visibility="hidden";
				$('_processStatus').childNodes[0].style.display = 'none';
			}
		} else {
			//$('_processStatus').innerHTML = '';
			//$('_processStatus').style.visibility="hidden";
			$('_processStatus').childNodes[0].style.display = 'none';
		}
	}

	function showFailure (originalRequest) {
		$(byId).innerHTML = '<span style="color: red;">データ読み込みに失敗しました。</span>';
	}

}

//////////////////////////////////////////////////////////////////////
// ロードのみ（座標取得＆処理経過表示なし）
//////////////////////////////////////////////////////////////////////
function ajaxLoader (uriCGI, byId, formName) {

	// 値の生成
	var sendData = 'byid=' + byId;
	if (formName) sendData += '&' + Form.serialize($(formName));

	// リクエスト
	var myAjax = new Ajax.Updater (
		byId,
		uriCGI, 
		{
			method: 'post', 
			parameters: sendData, 
			//onComplete: showResponse,
			onLoaded:   showLoaded,
			onFailure:  showFailure,
			evalScripts: true
		}
	);

	function showResponse (originalRequest) {
		$(byId).innerHTML = originalRequest.responseText;
	}

	function showLoaded (originalRequest) {
	}

	function showFailure (originalRequest) {
		$(byId).innerHTML = '<span style="color: red;">データ読み込みに失敗しました。</span>';
	}

}

//////////////////////////////////////////////////////////////////////
// ステータスメッセージのみ制御
//////////////////////////////////////////////////////////////////////
function ajaxMessage (event, message) {

	var tgtMessage = message ? message : '処理完了';

	// クリック座標取得
	if (!event) { event = window.event; }
	var mx, my;
	if (document.all) { // for IE
		mx = event.clientX+(document.body.scrollLeft || document.documentElement.scrollLeft);
		my = event.clientY+(document.body.scrollTop || document.documentElement.scrollTop);
	} else {
		mx = event.pageX;
		my = event.pageY;
	}

	// ウィンドウ表示位置調整
	mx -= 17;
	my -= 18;

	// Safari用強制調調整（右上に固定）
	//if (navigator.userAgent.toUpperCase().indexOf("SAFARI") >= 0) {
	//	mx = innerWidth - (45 + 10);
	//	my = 0;
	//}

	// ローディング表示ON
	$('_processStatus').childNodes[0].style.top = my + 'px';
	$('_processStatus').childNodes[0].style.left = mx + 'px';
	$('_processStatus').childNodes[0].style.display = 'block';
	//$('_processStatus').style.visibility="visible";
	//$('_processStatus').innerHTML = '<div class="status" style="top: ' + my + 'px; left: ' + mx + 'px;"><img src="../img/admin/cmn/loading_mini.gif" width="13" height="13" border="0" alt="処理中" title="処理中" /></div>';
	//$('_processStatus').innerHTML = '<div class="status" style="top: ' + my + 'px; left: ' + mx + 'px;">処理中</div>';

/*
	var cnt = 0;
	var blkId;
	var AryTxt = new Array('▏', '▎', '▍', '▌', '▋', '▊', '▉', '▊', '▋', '▌', '▍', '▎');
	ProcessText = function (cnt) {
		$('_processStatus').innerHTML = '<div class="status" style="top: ' + my + 'px; left: ' + mx + 'px;">' + AryTxt[cnt] + '</div>';
		if (++cnt >= AryTxt.length) cnt = 0;
		setTimeout("ProcessText('" + cnt + "')", 100);
	}
	ProcessText(cnt);
*/

}
