var __START_TBL_TAG = "<表>";
var __END_TBL_TAG = "</表>";
var __TBL_DATA_CRLF = "\r\n";
var __TBL_DATA_CR = "\r";
var __TBL_DATA_LF = "\n";
var __TBL_DATA_BR = "<br/>";
var __TBL_DATA_DELIMIT = ":";
var __TBL_KEY_STRING = "_table_key";
var __TBL_VALUE_STRING = "_table_value";
var __TBL_DATA_FORMAT = new Array(
	new Array("居室面積", "定員", "居室設備", "キッチン設備／備品", "バスルーム設備／備品", "備考"),
	new Array("医療機関名", "住所", "最寄駅", "電話番号", "診療科目", "診療時間", "備考"),
	new Array("ビザ申請対象者", "ビザ申請費用", "ビザ取得後の滞在条件", "備考"),
	new Array("病院名", "病院住所", "最寄駅", "電話番号", "診療科目", "診療時間", "備考")
);



/**
 * 
 * idで指定したDIV内を、typeで指定した配列のデータを元に
 * 「項目名」「テキストエリア」を生成する。
 * これは、テンプレート選択/変更時に呼ばれることを想定しています。
 * 
 * @param id divのIDを指定します。
 * @param type データが格納された配列の添え字を指定します。
 * 
 */
function __SET_TBL(id, type) {
//alert(document.regist.h_matrix1.value);
	var inner = "";
	for(i=0; i<__TBL_DATA_FORMAT[type].length; i++) {
		inner += 
			"<tr><td><span id="+id+__TBL_KEY_STRING+i+" style=text-align:right>" +
			__TBL_DATA_FORMAT[type][i] + "</span></td><td>" +
			"<textarea id="+id+__TBL_VALUE_STRING+i+" cols=90 rows=2></textarea></td></tr>";
	}
	if(inner!="") document.getElementById(id).innerHTML = "<table>"+inner+"</table>";
}



/**
 * 
 * idで指定したDIV内にある「項目名」「テキストエリア」のデータを、
 * <表>...</表>形式のデータに変換します。
 * 
 * これは、データ更新時の使用を想定しています。
 * @param id  divのIDを指定します。
 * 
 */
function __CONV_TBL(id) {
	var result = "";
	var inner = "";
	for(i=0; i<100; i++) {
		var keyElms = document.getElementById(id+__TBL_KEY_STRING+i);
		var valueElms = document.getElementById(id+__TBL_VALUE_STRING+i);
		if(!keyElms || !valueElms) break;
		var key = keyElms.innerHTML;
		var value = valueElms.value;
		value = (value.split(__TBL_DATA_CRLF)).join(__TBL_DATA_BR);
		value = (value.split(__TBL_DATA_CR)).join(__TBL_DATA_BR);
		value = (value.split(__TBL_DATA_LF)).join(__TBL_DATA_BR);
		inner += key + __TBL_DATA_DELIMIT + value + __TBL_DATA_LF;
	}
	if(inner!="") result = __START_TBL_TAG+__TBL_DATA_LF+inner+__END_TBL_TAG;
	return result;
}



/**
 * 
 * <表>...</表>形式のデータを、「項目名」と「テキストアリア」の状態に復元します。
 * これは、既存データ更新時の初期表示にて使用することを想定しています。
 * 
 * @param id    divのIDを指定します。
 * @param data  <表>...</表>形式のデータを指定します。
 * 
 */
function __RESTORE(id,data) {
	var startPoint = data.indexOf(__START_TBL_TAG);
	var endPoint = -1;
	var inner = undefined;
	var outText = "";
	if(startPoint>-1) {
		endPoint = data.indexOf(__END_TBL_TAG, startPoint);
	}
	if(endPoint>-1) {
		inner = data.substring(startPoint + __START_TBL_TAG.length, endPoint);
	}
	if(inner) {
		inner = __CONV_CRLF_TO_LF(inner);
		lines = inner.split(__TBL_DATA_LF);
		var idx = 0;
		for(i=0; i<lines.length; i++) {
			var split1Start = 0;
			var split1End = lines[i].indexOf(__TBL_DATA_DELIMIT, split1Start);
			var split2Start = split1End + __TBL_DATA_DELIMIT.length;
			var split2End = lines[i].length;
			var delimited = null;
			if (split2End>=split2Start && split1End>=split1Start) {
				delimited = new Array (
					lines[i].substring(split1Start, split1End),
					lines[i].substring(split2Start, split2End)
				);
			}			

			if(delimited==null) {
				continue;
			} else {
				delimited[0] = (delimited[0]=="") ? "undefined" : delimited[0];
				//delimited[1] = (delimited[1]=="") ? "&nbsp;" : __CONV_LF_TO_BR(delimited[1]);
				delimited[1] = (delimited[1]=="") ? "" : __CONV_LF_TO_BR(delimited[1]);
			}
			outText +=
				"<tr><td><span id="+id+__TBL_KEY_STRING+idx+" style=text-align:right>" + delimited[0] + "</span></td><td>" +
				"<textarea id="+id+__TBL_VALUE_STRING+idx+" cols=90 rows=2>"+delimited[1]+"</textarea></td></tr>";
			idx++;
		}
		if(outText!="") document.getElementById(id).innerHTML = "<table>"+outText+"</table>";
	}
}



/**
 * 
 * 文字列に含まれるCRLFをLFに変換する関数。
 * 
 * @param txt 文字列。
 * @return 変換後の文字列。
 * 
 */
function __CONV_CRLF_TO_LF(txt) {
	return txt.replace(/\r\n/g, __TBL_DATA_LF);
}


/**
 * 
 * 文字列に含まれるhtml改行タグをLFに変換する関数。
 * 
 * @param txt 文字列。
 * @return 変換後の文字列。
 * 
 */
function __CONV_LF_TO_BR(txt) {
	return txt.replace(/\<br\s*\/\>|\<br\>/g, __TBL_DATA_LF);
}


// テスト用
function __TEST(id) {
	var originalText = __CONV_TBL(id);
	var startPoint = originalText.indexOf(__START_TBL_TAG);
	var endPoint = -1;
	var inner = undefined;
	var outText = "";
	if(startPoint>-1) {
		endPoint = originalText.indexOf(__END_TBL_TAG, startPoint);
	}
	if(endPoint>-1) {
		inner = originalText.substring(startPoint + __START_TBL_TAG.length, endPoint);
	}
	if(inner) {
		inner = __CONV_CRLF_TO_LF(inner);
		lines = inner.split(__TBL_DATA_LF);
		outText += "<table border=1>"  + __TBL_DATA_LF;
		for(i=0; i<lines.length; i++) {
			var delimited = lines[i].split(__TBL_DATA_DELIMIT);
			if(delimited=="") {
				continue;
			} else {
				delimited[0] = (delimited[0]=="") ? "undefined" : delimited[0];
				delimited[1] = (delimited[1]=="") ? "&nbsp;" : delimited[1];
			}
			convInner = 
				"<td>" + delimited[0] + "</td>" + __TBL_DATA_LF + 
				"<td>" + delimited[1] + "</td>" + __TBL_DATA_LF;
			outText += "<tr>"  + __TBL_DATA_LF + convInner + "</tr>" + __TBL_DATA_LF;
		}
		outText +=  "</table>"  + __TBL_DATA_LF;
	}
	document.getElementById("test").innerHTML = outText;
}



// テスト用
function __TEST2(id) {
	alert(__CONV_TBL("contents1"));
}



// テスト用
function __TEST3(id) {
	__RESTORE(id, document.getElementById("srcText").value);
}



// テスト用
function __TEST_RESET() {
	document.getElementById("test").innerHTML = "";
}
