//
// jQuery表示反映プラグイン
//

/**
 * 連想配列で渡されたマップに対して、キーをクラス名、値を引数JSONオブジェクトのパスとして、
 * 以下の要素のクラス名マッチした箇所に値を差し込みます。
 * 単一データの場合はこちらを利用してください。
 * 配列データの場合はreplaceAttachMultiJsonを利用してください。
 * 
 * @param attachMap 変換マップ
 * @param dataObj JSONオブジェクト
 * @return 処理結果　true:成功 / false:失敗
 */
jQuery.fn.replaceAttachJson = function() {
	var attachMap = arguments[0];
	var dataObj = arguments[1];
	jQuery.each(this.children(), jQueryAttachReplaceAttachJsonChild, [attachMap, dataObj]);
	return this;
}

/**
 * replaceAttachJson実処理ファンクション。
 * 
 * @param attachMap 変換マップ
 * @param dataObj JSONオブジェクト
 * @return 処理結果　true:成功 / false:失敗
 */
function jQueryAttachReplaceAttachJsonChild(attachMap, dataObj) {
	var jqObj = jQuery(this);
	for (var key in attachMap) {
		if (jqObj.hasClass(key)) {
			jqObj.text( eval("dataObj." + attachMap[key]));
		}
	}
	if (jqObj.children && jqObj.children()) {
		jQuery.each(jqObj.children(), jQueryAttachReplaceAttachJsonChild, [attachMap, dataObj]);
	}
	return this;
}

/**
 * 連想配列で渡されたマップに対して、キーをクラス名、値を引数JSONオブジェクトのパスとして、<br />
 * 以下の要素のクラス名マッチした箇所に値を差し込みます。<br />
 * 配列データの場合はこちらを利用してください。
 * 単一データの場合はreplaceAttachJsonを利用してください。
 * 
 * @param attachMap 変換マップ
 * @param dataObj JSONオブジェクト
 * @param rowMark 行を表すクラス名(最初にこれにマッチした行が複製される)
 * @param arrayMark JSON中で対応する行データ箇所を表す
 * @param copyRowMark 複製した行に対して付与するclass属性
 * @return 処理結果　true:成功 / false:失敗
 */
jQuery.fn.replaceAttachMultiJson = function() {
	var attachMap = arguments[0];
	var dataObj = arguments[1];
	var rowMark = arguments[2];
	var arrayMark = arguments[3];
	var copyRowMark = arguments[4];
	
	var baseRow = jQuery(this).find("." + rowMark);
	if (baseRow[1]) {
		baseRow = baseRow[0];
	}
	var parentElement = jQuery(baseRow).parent();
	
	
	var arrayData;
	if (!arrayMark || arrayMark.length == 0) {
		arrayData = dataObj;
	} else {
		arrayData = eval("dataObj." + arrayMark);
	}
	var appendRowArray = new Array();
	var apcnt = 0;
	
	for (i = 0; i < arrayData.length; i++ ) {
		var editRow = jQuery(baseRow).clone();
		jQuery.each(editRow.children(), jQueryAttachReplaceAttachJsonChild, [attachMap, arrayData[i]]);
		if (copyRowMark) {
			editRow.addClass(copyRowMark);
		}
		appendRowArray[apcnt++] = editRow;
	}
	for (var row in appendRowArray) {
		jQuery(parentElement).append(appendRowArray[row]);
	}
		
	return this;
}


