/*
 * add_mylist_sample.js
 *
 * マイリストに追加処理サンプル
 * 
 * 特定のDOM構造の際に、マイリストに追加の挙動を自動で設定
 * 1つだけ追加をするボタン、チェックボックスに応じてまとめて追加するボタンを設定
 * メッセージ表示は1つの枠組みを用い、指定時間後に自動的に隠す
 * 
 * <a class="js_add_mylist_single_trigger">追加</a>
 * （親のtrの直前のtrから、class="checkbox_id"の内側にある checkboxのidを値にセット）
 *
 * <a class="js_add_mylist_multi_trigger">まとめて追加</a>
 * （<table class="data_table">の内側にある、class="checkbox_id"の内側にある チェックされたcheckboxのidを,区切りで値にセット）
 *
 * <table class="alert_table">..<span>メッセージ内容</span></table>を結果に利用
 *
 * Ajaxの送信パラメータ（仮）
 *  q=ID
 *  q=ID,ID,ID
 *  
 * Ajaxの戻り値（仮）
 *  1行目：メッセージ
 *  2行目以降：アイテム
 *  
 * @require jquery.js
 * @require jquery.ajaxQueue.js
 * @require add_mylist.js
 *
 * @see add_mylist.js
 *
 */
$(function(){
	
	//隠すまでの時間（msec）
	var hideResultMSec = 3000;

	//隠すためのタイムアウト識別
	var hideResultTimeout = null;

	//結果表示枠
	var resultElm = $(".alert_table");
	//メッセージ表示
	var msgElm = resultElm.find("span");
	
	//トリガとなるエレメント（個別）
	var triggerSingleElm = $("a.js_add_mylist_single_trigger");

	//トリガとなるエレメント（すべて）
	var triggerMultiElm = $("a.js_add_mylist_multi_trigger");

	triggerSingleElm
		.attr("href", "javascript:void(0);")
		.addMylist({
			resultPlacement: resultElm,
			buildParams: function(triggerElm){
				//相対的に該当するcheckboxを探して、そのidを送信（仮）
				var val = triggerElm.parents("tr").prev().find("td.checkbox_td input:checkbox").attr("id");
				return { "q": val };
			},
			onSuccess: function(triggerElm, resultElm){
				//結果に応じたボタンの切り替えなど
			},
			showResult: function(triggerElm, resultElm, result){
				//結果表示
				showResult(result.message);
			},
			onError: function(triggerElm, resultElm){
				//結果表示
				showResult("エラーが発生しました");
			}
		});
	;

	triggerMultiElm
		.attr("href", "javascript:void(0);")
		.addMylist({
			resultPlacement: resultElm,
			buildParams: function(triggerElm){
				//チェック済みのcheckboxを探して、そのidを,区切りで送信（仮）
				var checkedElm = $("table.data_table td.checkbox_td input:checkbox:checked")
				var vals = [];
				checkedElm.each(function(){
					vals.push($(this).attr("id"));
				});
				return { "q": vals.join(",") };
			},
			showResult: function(triggerElm, resultElm, result){
				//結果表示
				showResult(result.message);
			},
			onSuccess: function(triggerElm, resultElm){
				//結果に応じたボタンの切り替えなど
			},
			onError: function(triggerElm, resultElm){
				//結果表示
				showResult("エラーが発生しました");
			}
		});
	;

	//最初に隠す
	hideResult();
	
	//結果表示
	function showResult(msg){
		clearTimeout(hideResultTimeout);
		//メッセージを追加
		msgElm.html(msg);
		resultElm.show();
		//指定時間後に隠す
		hideResultTimeout = setTimeout(function(){hideResult();}, hideResultMSec);
	}

	//結果を隠す
	function hideResult(){
		clearTimeout(hideResultTimeout);
		resultElm.hide();
	}
});
