/*************************************************************************************************
 * 프로그램명 : MTable.java 프로그램설명 : 집계문서의 표 기본정보 처리 작성자 : 강원중 작성일 : 2003.12.03 변경일 : 2004.09.16
 **************************************************************************************************/

package kr.co.kihyun.moumi.doc.table;

import java.util.List;

public class TableDefine {

	private StringBuilder strOnLoad = new StringBuilder();

	// //////////////////insertDiv요기는 양식등록일때 사용함/////////////////////////////////////////////////////////////
	public String insertDiv(String form, List<?> tdList, int iTRCount) {

		if (form == null)
			return null;
		// ban lower case form = form.toLowerCase();

		StringBuilder sInserted = new StringBuilder();
		int tdCount = 0;
		int tdStart = 0;
		int tdEnd = 0;
		form = form.replaceAll(">(&nbsp;)*( )+<", ">&nbsp;<"); // 빈 셀중에 스페이스가 들어있는 것을 '&nbsp'로 바꿔줌(한글용)
		form = form.replaceAll(">(&nbsp;)+<", ">&nbsp;<"); // 빈 셀중에 스페이스가 들어있는 것을 '&nbsp'로 바꿔줌(한글용)
		int brCheck = -1;
		int brCheck2 = -1;
		int spaceCheck = -1;
		int endTD = -1;
		int fontCheck = -1;
		String sInsert_EXCEL = "";
		String sInsert_HWP = "";
		String sInsert_TXT = "";

		while (true) {

			tdStart = form.indexOf("<td");

			if (tdStart == -1)
				break;

			brCheck = -1;
			brCheck2 = -1;
			spaceCheck = -1;
			endTD = -1;
			fontCheck = -1;

			tdEnd = form.indexOf(">", tdStart + 1);
			if (tdEnd == -1)
				break;
			endTD = form.indexOf("</td>", tdEnd + 1);

			// HWP
			brCheck = form.indexOf("<br>", tdEnd + 1);
			// HWP2002
			brCheck2 = (form.indexOf("&nbsp;", tdEnd + 1));
			// Excel 2000
			spaceCheck = (form.indexOf(("　"), tdEnd + 1));
			// Excel 97
			fontCheck = form.indexOf(("<font face=\"돋움\">&nbsp;</font>"), tdEnd + 1);

			// // 아래는 액셀XP 에서 올린 문서에서 수식입력윈도우가 가져지 보이지 않는 원인을 해결한 것임
			// modifyed by 구경모 # div태그의 특징인 줄바꾸기의 공백남기는특성을 안하기위해 span으로 변경(<div/div <span/span)
			sInsert_EXCEL = " style='cursor: pointer;'><span id='cell_" + tdCount
					+ "'><img src='../images/blank.gif' width='0' height='0' border='0'></span>";
			sInsert_HWP = " style='cursor: pointer;'><span id='cell_" + tdCount
					+ "'><img src='../images/blank.gif' width='0' height='0' border='0'></span>";
			sInsert_TXT = " style='cursor: pointer;'><span id='cell_" + tdCount
					+ "'><img src='../images/blank.gif' width='0' height='0' border='0'></span>";

			if ((tdStart < spaceCheck) && (endTD > spaceCheck)) {
				this.strOnLoad.append("changeCell(this, ");
				this.strOnLoad.append(tdCount);
				this.strOnLoad.append(");");
				sInserted.append(form.substring(0, tdEnd));
				sInserted.append(sInsert_EXCEL);// // 셀윈도우 입력하는 부분
				form = form.substring(tdEnd + 1, form.length());
			} else if ((tdStart < fontCheck) && (endTD > fontCheck)) {
				this.strOnLoad.append("changeCell(this, ");
				this.strOnLoad.append(tdCount);
				this.strOnLoad.append(");");
				sInserted.append(form.substring(0, tdEnd) + sInsert_EXCEL);// // 셀윈도우 입력하는 부분
				form = form.substring(tdEnd + 1, form.length());
			} else if ((tdStart < brCheck) && (endTD > brCheck)) {
				this.strOnLoad.append("changeCell(this, ");
				this.strOnLoad.append(tdCount);
				this.strOnLoad.append(");");
				sInserted.append(form.substring(0, tdEnd));
				sInserted.append(sInsert_HWP);// // 셀윈도우 입력하는 부분
				form = form.substring(tdEnd + 1, form.length());
			} else if ((tdStart < brCheck2) && (endTD > brCheck2)) {
				this.strOnLoad.append("changeCell(this, ");
				this.strOnLoad.append(tdCount);
				this.strOnLoad.append(");");
				sInserted.append(form.substring(0, tdEnd));
				sInserted.append(sInsert_HWP);// // 셀윈도우 입력하는 부분
				form = form.substring(tdEnd + 1, form.length());
			} else {
				sInserted.append(form.substring(0, tdEnd));
				sInserted.append(sInsert_TXT);// // 셀윈도우 입력하는 부분
				form = form.substring(tdEnd + 1, form.length());
			}
			tdCount++;
   		}

		sInserted.append(form);
		String result = sInserted.toString().replaceAll(">&nbsp;<", ">      <");
		return result;
	}

	public String getStrOnLoad() {
  		return strOnLoad.toString();
	}

	public static String insertDiv(String form, int[] itemNumList) {

		if (form == null)
			return null;
		StringBuilder inBuf = new StringBuilder();

		int tdCount = 0;
		int tdStart;
		int tdEnd;

		int index = 0;
		int brCheck = -1;
		int brCheck2 = -1;
		int spaceCheck = -1;
		int endTD = -1;
		int fontCheck = -1;
		String inStr = "";
		String inEXCEL = "";
		String inHWP = "";

		while (true) {
			if (index > itemNumList.length - 1)
				break;
			tdStart = form.indexOf("<td");
			if (tdStart == -1)
				break;
			tdEnd = form.indexOf(">", tdStart + 1);
			if (tdEnd == -1)
				break;

			brCheck = -1;
			brCheck2 = -1;
			spaceCheck = -1;
			endTD = -1;
			fontCheck = -1;

			endTD = form.indexOf("</td>", tdEnd + 1);

			if (tdCount == itemNumList[index]) {

				// modifyed by 구경모 # div태그의 특징인 줄바꾸기의 공백남기는특성을 안하기위해 span으로 변경(<div/div <span/span)
				inStr = "<span id='cell_" + index
						+ "'><img src='../images/blank.gif' width='0' height='0' border='0'></span>";
				inEXCEL = " style='cursor: pointer; height=65'><span id='cell_" + index
						+ "'><img src='../images/blank.gif' width='0' height='0' border='0'></span>";
				inHWP = "<span id='cell_" + index
						+ "'><img src='../images/blank.gif' width='0' height='0' border='0'></span>";
				// //////////////////////////////////

				// HWP
				brCheck = form.indexOf("<br>", tdEnd + 1);

				// HWP2002
				brCheck2 = form.indexOf("&nbsp;", tdEnd + 1);

				// Excel 2000
				spaceCheck = form.indexOf(("　"), tdEnd + 1);

				// Excel 97
				fontCheck = form.indexOf(("<font face=\"돋움\">&nbsp;</font>"), tdEnd + 1);

				if ((tdStart < spaceCheck) && (endTD > spaceCheck)) {
					inBuf.append(form.substring(0, tdEnd));
					inBuf.append(inEXCEL);// // 셀윈도우 입력하는 부분
					form = form.substring(tdEnd + 1, form.length());
				} else if ((tdStart < fontCheck) && (endTD > fontCheck)) {
					inBuf.append(form.substring(0, tdEnd));
					inBuf.append(inEXCEL);// // 셀윈도우 입력하는 부분
					form = form.substring(tdEnd + 1, form.length());
				} else if ((tdStart < brCheck) && (endTD > brCheck)) {
					inBuf.append(form.substring(0, tdEnd + 1));
					inBuf.append(inHWP);// // 셀윈도우 입력하는 부분
					form = form.substring(tdEnd + 1, form.length());
				} else if ((tdStart < brCheck2) && (endTD > brCheck2)) {
					inBuf.append(form.substring(0, tdEnd + 1));
					inBuf.append(inHWP);// // 셀윈도우 입력하는 부분
					form = form.substring(tdEnd + 1, form.length());
				} else {
					inBuf.append(form.substring(0, tdEnd + 1));
					inBuf.append(inStr);
					form = form.substring(tdEnd + 1, form.length());
				}
				index++;
			} else {
				inBuf.append(form.substring(0, tdEnd + 1));
				form = form.substring(tdEnd + 1, form.length());
			}
			tdCount++;
		}

		inBuf.append(form);
		String result = inBuf.toString().replaceAll(">&nbsp;<", "><");
		result = result.replaceAll(">　<", "><");
		result = result.replaceAll("<br></", "</");

		return result;
	}

	/**
	 * @param strOnLoad the strOnLoad to set
	 */ public void setStrOnLoad(StringBuilder strOnLoad) {
		this.strOnLoad = strOnLoad;
	}
}
