
<%    /**
     * **********************************************************@@ Program
     * Name : doc_regist.jsp Description	: /집계자/내문서함/등록함/문서 등록 Author	: 강원중
     * Create Date	: 2004.10.11 History	:
     * @@***********************************************************
     */
%>
<%@ page contentType="text/html; charset=UTF-8"
         import="java.net.URLEncoder"
         import="kr.co.kihyun.beans.user.HttpSSOLogin"
         import="java.util.*"
         import="java.net.URLDecoder"
         import="java.io.StringReader"
         import="javax.swing.text.html.parser.ParserDelegator"
         import="kr.co.kihyun.lang.MString"
         import="kr.co.kihyun.lang.MInteger"
         import="kr.co.kihyun.lang.Encoder"
         import="kr.co.kihyun.util.Stopwatch"
         import="kr.co.kihyun.text.html.HtmlUtil"
         import="kr.co.kihyun.text.excel.CalculationForm"
         import="kr.co.kihyun.text.html.TagFilter"
         import="kr.co.kihyun.text.html.ServletUtil"
         import="kr.co.kihyun.text.html.CallbackHandler"
         import="kr.co.kihyun.moumi.Moumi"
         import="kr.co.kihyun.moumi.doc.MDoc"
         import="kr.co.kihyun.moumi.doc.table.MTable"
         import="kr.co.kihyun.moumi.doc.table.MTableType"
         import="kr.co.kihyun.moumi.doc.table.TableDefine"
         import="kr.co.kihyun.moumi.doc.table.TableCreation"
         import="kr.co.kihyun.moumi.doc.table.item.MItem"
         import="kr.co.kihyun.moumi.doc.table.item.MItemInfo"
         import="kr.co.kihyun.lang.MInteger"
         import="kr.co.kihyun.lang.MLong"
         import="kr.co.kihyun.beans.totsys.doc.table.item.ItemList"%>
<%@ include file="/totsys/common/inc/sec/secure.inc.jsp"%>
<%
	try {
        /**
         * ********* 소요시간 체크 **********
         */
        //Stopwatch stopwatch = new Stopwatch();
        //long startTime = stopwatch.start();

        /**
         * ******** session내의 userId *********
         */
        String usID = HttpSSOLogin.getLoginID(request);
        String dtID = HttpSSOLogin.getDeptID(request);

        /**
         * ******** parameter *********
         */
        Long docID = MLong.parseLong(request.getParameter("docID"), null);

        String docName = clearXSS(URLDecoder.decode(MString.checkNull(request.getParameter("docName")), "UTF-8"), "");
        String accAuth = clearXSS(request.getParameter("accAuth"), "");
        String stDate = clearXSS(request.getParameter("stDate"), "");
        String edDate = clearXSS(request.getParameter("edDate"), "");
        String deptIDs = clearXSS(URLDecoder.decode(MString.checkNull(request.getParameter("deptIDs")), "UTF-8"), "");
        String deptCount = clearXSS(request.getParameter("deptCount"), "");
        String userIDs = clearXSS(URLDecoder.decode(MString.checkNull(request.getParameter("userIDs")), "UTF-8"), "");
        String userCount = clearXSS(request.getParameter("userCount"), "");
        String repDocID = clearXSS(request.getParameter("repDocID"), "");
        String docGroupID = clearXSS(request.getParameter("docGroupID"), "");
        String isFromFormBox = request.getParameter("isFromFormBox");

        String choice = clearXSS(request.getParameter("choice"), "");
        String deptNames = clearXSS(URLDecoder.decode(MString.checkNull(request.getParameter("deptNames")), "UTF-8"), "");
        String userNames = clearXSS(URLDecoder.decode(MString.checkNull(request.getParameter("userNames")), "UTF-8"), "");

        //String tableCount  = clearXSS(request.getParameter("tableCount"),"");
        String confirmDynaTable = clearXSS(request.getParameter("isDynaTable"), "");
        String mode = clearXSS(request.getParameter("mode"), "");
        String tableDefines = clearXSS(request.getParameter("tableDefines"), "");
        String tableTypes = clearXSS(request.getParameter("tableTypes"), "");

        String itemNames = clearXSS(URLDecoder.decode(MString.checkNull(request.getParameter("itemNames")), "UTF-8"), "");
        String tableNums = clearXSS(URLDecoder.decode(MString.checkNull(request.getParameter("tableNums")), "UTF-8"), "");
        String colNums = clearXSS(URLDecoder.decode(MString.checkNull(request.getParameter("colNums")), "UTF-8"), "");
        String rowNums = clearXSS(URLDecoder.decode(MString.checkNull(request.getParameter("rowNums")), "UTF-8"), "");
        String itemSizes = clearXSS(URLDecoder.decode(MString.checkNull(request.getParameter("itemSizes")), "UTF-8"), "");
        String itemDescs = clearXSS(URLDecoder.decode(MString.checkNull(request.getParameter("itemDescs")), "UTF-8"), "");
        String itemExprs = clearXSS(URLDecoder.decode(MString.checkNull(request.getParameter("itemExprs")), "UTF-8"), "");
        String itemTypes = clearXSS(URLDecoder.decode(MString.checkNull(request.getParameter("itemTypes")), "UTF-8"), "");

        String backDash = clearXSS(request.getParameter("backDash"), "");
        String docForm = HtmlUtil.toLowerCase((String) session.getAttribute("docForm"));

        String origTableForm = MTable.getTables(docForm); //대문자 살림
        String tableForm = docForm;

        //구조가 변경되었는지 플래그 파라미터
        String changeStructure=request.getParameter("changeStructure");
		boolean isChangeStructure=false;
		try{
			isChangeStructure=Boolean.parseBoolean(changeStructure);
		}catch(Exception ex){

		}

        tableForm = tableForm.replaceAll("<p>&nbsp;", "");
        //session.removeValue("docForm"); //사용했던 session의 값을 떨군다.

        /**
         * ******** 파싱 *********
         */
        //올린 파일을 String Reader를 이용해서 읽는다.
        StringReader strReader = new StringReader(origTableForm);
        CallbackHandler cbHandler = new CallbackHandler();

        new ParserDelegator().parse(strReader, cbHandler, true);
        List<Hashtable<String, String>> tdList = cbHandler.getTDs();
        int tdCount = tdList.size();

        //표가 존재 하지 않을때..
        if (tdCount < 1) {
            out.println("<script language=javascript>\n");
            out.println("	alert('올린 파일에 표가 없습니다.');\n");
            out.println("	history.go(-1);\n");
            out.println("</script>");
            return;
        }

        //생성할 배열의 사이즈 계산
        int allRowCount = 0;
        int allColCount = 0;
        int rowCount = 0;
        int colCount = 0;
        for (int i = 0; i < tdCount; i++) {
            rowCount = Integer.parseInt(tdList.get(i).get("row"));
            colCount = Integer.parseInt(tdList.get(i).get("col"));
            if (allRowCount < rowCount) {
                allRowCount = rowCount;
            }
            if (allColCount < colCount) {
                allColCount = colCount;
            }
        }

        ++allRowCount; //배열이라 0부터 시작 한다.
        ++allColCount; //배열이라 0부터 시작 한다.

        //각각의 셀에 있는 Text 를 tdTextList 라는 배열에 저장한다.
        boolean isDynaTable = true;

        String tdName = "";
        String tableNumList = "";
        String tdText = "";
        String tdTextList[][] = new String[allRowCount][allColCount];
        StringBuffer itemValueListBuff = new StringBuffer();
        MTableType tableType = new MTableType(allRowCount);	//table type value

        Long reuseDocID = (Long) session.getAttribute("reuseDocID");
        //int[] itemTypeList = null;
        //String[] itemExprList = null;

        int[] itemNumList = null;
        String[] itemNameList = null;
        String[] itemExprList = null;
        int[] itemSizeList = null;
        String[] itemDescList = null;

        int[] itemTypeList = null;
        int[] intTableNumList = null;
        int[] rowNumList = null;
        int[] colNumList = null;
        if (!MString.isNull(itemTypes) && !itemTypes.equals("")) {

            if (confirmDynaTable.equals("false")) {
                isDynaTable = false;
            } else {
                isDynaTable = true;
            }

            MItemInfo itemInfo = new MItemInfo();

            itemInfo.itemInfo(itemNames, itemSizes, itemExprs, itemDescs, itemTypes, tableNums, colNums, rowNums, 10);
            itemNumList = itemInfo.getItemNumList();
            itemNameList = itemInfo.getItemNameList();
            itemExprList = itemInfo.getItemExprList();
            itemSizeList = itemInfo.getItemSizeList();
            itemDescList = itemInfo.getItemDescList();
            itemTypeList = itemInfo.getItemTypeList();
            intTableNumList = itemInfo.getTableNumList();
            rowNumList = itemInfo.getRowNumList();
            colNumList = itemInfo.getColNumList();

            if (backDash.equals("back")) { //make by 구경모 #이전단계로 이동시 수식값 변환내용을 유지
                itemExprs = clearXSS(URLDecoder.decode(request.getParameter("itemExprs"), "UTF-8"), "");

                //step 1. 앞글자 0: 를 없앤다.
                itemExprs = itemExprs.substring(2, itemExprs.length());

                //step 2. 번호: 를 없앤다. (step 1,2를 하는이유는 0: 과 100: 에서 0:가 공통으로 들어가는문제가 있기때문.)
                for (int i = 0; i < itemNameList.length; i++) {
                    itemExprs = itemExprs.replaceAll(MItem.LIST_DELIM + i + ":", MItem.LIST_DELIM);
                }

                //step 3. 특수문자 MItem.LIST_DELIM 기준으로 배열에 넣는다. 이때, itemTypeNameList 배열을 사용한다는것에 주의.
                itemExprList = itemExprs.split(MItem.LIST_DELIM);

                //step 4. 마지막 수식적용한 번지~배열끝까지 사이가 모두 null일때 배열이 중간에 끊기는현상 보완
                String[] itemExprList_temp = itemExprList;
                itemExprList = new String[itemNameList.length];
                for (int i = 0; i < itemNameList.length; i++) {
                    if (i < itemExprList_temp.length) {
                        itemExprList[i] = itemExprList_temp[i];
                    } else {
                        itemExprList[i] = "";
                    }
                }
            }

            for (int i = 0; i < itemNameList.length; i++) {
                itemValueListBuff.append("itemNameList[" + i + "] = '" + itemNameList[i] + "';\n");
                //itemValueListBuff.append("itemSizeList["+i+"] = '"+itemSizeList[i]+"';\n");
                itemValueListBuff.append("itemSizeList[" + i + "] = '';\n");
                itemValueListBuff.append("tableNumList[" + i + "] = '" + Integer.toString(intTableNumList[i]) + "';\n");
                itemValueListBuff.append("rowNumList[" + i + "] = '" + rowNumList[i] + "';\n");
                itemValueListBuff.append("colNumList[" + i + "] = '" + colNumList[i] + "';\n");
                itemValueListBuff.append("itemDescList[" + i + "] = '" + itemDescList[i] + "';\n");

                if (itemTypeList[i] == 1) {
                    itemValueListBuff.append("itemTypeList[" + i + "] = '문자';\n");
                } else if (itemTypeList[i] == 2) {
                    itemValueListBuff.append("itemTypeList[" + i + "] = '숫자';\n");
                } else if (itemTypeList[i] == 3) {
                    itemValueListBuff.append("itemTypeList[" + i + "] = '날짜';\n");
                } else if (itemTypeList[i] == 4) {
                    itemValueListBuff.append("itemTypeList[" + i + "] = '타이틀';\n");
                } else {
                    itemValueListBuff.append("itemTypeList[" + i + "] = '" + itemTypeList[i] + "';\n");
                }
                itemValueListBuff.append("itemExprList[" + i + "] = '" + itemExprList[i] + "';\n");

            }

        } else {
            //LJH
            String pageName = clearXSS(request.getParameter("pageName"), "");

            if (reuseDocID == null && docID != null && pageName.equals("doc_reform_config")) {
                reuseDocID = docID;
            }
            if (reuseDocID != null) {

                ItemList itemList = new ItemList();
                //v2. 13.SQL 삽입 : itemList.executeQuery()에서 prepare SQL 문으로 되어 있다.
                itemList.executeQuery(docID);
                //=================
                itemTypeList = itemList.getTypeList();
                itemExprList = itemList.getExprList();
            }
            //기존 데이터보다 적을 경우 배열크기에러 수정
            if(itemTypeList.length<tdCount){
				itemTypeList=new int[tdCount];
			}
            if(itemExprList.length<tdCount){
            	itemExprList=new String[tdCount];
            	for(int i=0;i<tdCount;i++){
            		itemExprList[i]="";
            	}
			}
            if (backDash.equals("back")) { //make by 구경모 #이전단계로 이동시 수식값 변환내용을 유지
                itemExprs = clearXSS(URLDecoder.decode(request.getParameter("itemExprs"), "UTF-8"), "");

                //step 1. 앞글자 0: 를 없앤다.
                itemExprs = itemExprs.substring(2, itemExprs.length());

                //step 2. 번호: 를 없앤다. (step 1,2를 하는이유는 0: 과 100: 에서 0:가 공통으로 들어가는문제가 있기때문.)
                for (int i = 0; i < itemNameList.length; i++) {
                    itemExprs = itemExprs.replaceAll(MItem.LIST_DELIM + i + ":", MItem.LIST_DELIM);
                }

                //step 3. 특수문자 MItem.LIST_DELIM 기준으로 배열에 넣는다. 이때, itemTypeNameList 배열을 사용한다는것에 주의.
                itemExprList = itemExprs.split(MItem.LIST_DELIM);

                //step 4. 마지막 수식적용한 번지~배열끝까지 사이가 모두 null일때 배열이 중간에 끊기는현상 보완
                String[] itemExprList_temp = itemExprList;
                itemExprList = new String[itemNameList.length];
                for (int i = 0; i < itemNameList.length; i++) {
                    if (i < itemExprList_temp.length) {
                        itemExprList[i] = itemExprList_temp[i];
                    } else {
                        itemExprList[i] = "";
                    }
                }
            }

            for (int i = 0; i < tdCount; i++) {
                tdName = tdList.get(i).get("name");
                tableNumList = tdList.get(i).get("table");
                tdText = tdList.get(i).get("text");

                // 어떤 이유에선지, 첫번째 셀이 " empty" 형식으로 넘어오기 때문...
                if (tdText.equals("empty")) {
                    tdText = "empty";
                }

                // 복사양식일때..
                // 어떤 이유에선지, 첫번째 셀이 "emptyempty" 형식으로 넘어오기 때문...
                int colNum = Integer.parseInt(tdList.get(i).get("col"));
                int rowNum = Integer.parseInt(tdList.get(i).get("row"));

                tdTextList[rowNum][colNum] = tdText;

                //Item정보를 저장할때 Excel과 같이 1부터 시작 하기 위해 1씩 추가
                ++colNum;
                ++rowNum;
                itemValueListBuff.append("itemNameList[" + i + "] = '" + tdName + "';\n");
                itemValueListBuff.append("itemSizeList[" + i + "] = '';\n");
                itemValueListBuff.append("tableNumList[" + i + "] = '" + tableNumList + "';\n");
                itemValueListBuff.append("rowNumList[" + i + "] = '" + rowNum + "';\n");
                itemValueListBuff.append("colNumList[" + i + "] = '" + colNum + "';\n");

                //// 공백인것을 empty 문자로 바꾼다.
                if (tdText != null && tdText.trim().equals("")) {
                    itemValueListBuff.append("itemDescList[" + i + "] = 'empty';\n");
                    tableType.setStartTRNum(rowNum);
                    //기존 아이템 타입 수정
                    if(isChangeStructure){
	                    itemTypeList[i]=MItem.INT;
	                    itemExprList[i]="";
                    }
                } else if (tdText != null && tdText.trim().equals("0")) {
                    itemValueListBuff.append("itemDescList[" + i + "] = 'empty';\n");
                    tableType.setStartTRNum(rowNum);
                  //기존 아이템 타입 수정
                    if(isChangeStructure){
	                    itemTypeList[i]=MItem.INT;
	                    itemExprList[i]="";
                    }
                } else {
                    tdText = tdText.replaceAll("\'", "\"");
                    if (tdText.indexOf("<") > 0 || tdText.indexOf("/>") > 0) {
                        itemValueListBuff.append("itemDescList[" + i + "] = 'empty';\n");
                    } else {
                        itemValueListBuff.append("itemDescList[" + i + "] = '" + tdText + "';\n");
                    }
                }
                //콤보박스 종류 문자설정
				try{
					if(itemExprList[i].contains("^")){
						 itemTypeList[i]=MItem.CHAR;
					}
				}catch(Exception ex){

				}
                itemValueListBuff.append("itemTypeList[" + i + "] = '" + (reuseDocID == null ? MItem.getTypeName(MItem.INT) : MItem.getTypeName(itemTypeList[i])) + "';\n");
                itemValueListBuff.append("itemExprList[" + i + "] = '" + (reuseDocID == null ? "" : itemExprList[i].replaceAll("'", "\\'")) + "';\n");
            }

            //양식이 동적인 표인지 정적인 표인지 파악
            isDynaTable = tableType.isDynaTable();
        }
        /**
         * ******** form 필터링 *********
         */
        int sumSusig = TagFilter.getSumSusig(tableForm);
        int comboBox = TagFilter.getComboBox(tableForm);

        if (!backDash.equals("back")) {//이전단계 돌아온것 아닐때만 실행함.
            if (sumSusig != -1) {
                itemValueListBuff.append(CalculationForm.getCalculationForms(tableForm));
            }
        }

        if (comboBox != -1) {
            itemValueListBuff.append(TagFilter.excelComboBoxImport(tableForm));
        }

        int tableCount = HtmlUtil.getTableCount(tableForm);

        tableForm = TagFilter.tdTextToSpace(tableForm);
        byte[] formBytes = docForm.getBytes();
        session.setAttribute("docForm", tableForm);
        TableDefine tableDefine = new TableDefine();
        String strTableInfo = tableDefine.insertDiv(tableForm, tdList, cbHandler.getTRCount());

        //out.print(itemValueListBuff.toString()); //최종점검
        //session.setAttribute("modifySuccTargetURI2", "/totsys/totper/mydocbox/formbox/doc_view.jsp");
        session.setAttribute("modifySuccTargetURI2", "/totsys/common/web/documents/form_content_modify/form_content_modify_2.jsp");
%>
<!DOCTYPE html>
<html lang="ko">
<head>
    <script src="/totsys/common/js/rollover.js"></script>
    <script src="/totsys/common/js/popup.js"></script>
    <script type="text/javascript" src="/totsys/common/js/jquery-1.12.4.min.js"></script>
    <script type="text/javascript" src="/totsys/common/js/jquery.fixFormTable.js"></script>
    <script type="text/javascript" src="/totsys/common/js/jquery.custom.indicator.js"></script>
    <link rel="stylesheet" href="/totsys/common/css/contentStyle.css" type="text/css">
	<link rel="stylesheet" href="/totsys/common/css/basic.css" type="text/css">
    <script>

    var itemCount = <%= tdList.size()%>;
    var dataItemList = new Array();
    var setWinList = new Array();
    var itemNameList = new Array();
    var itemSizeList = new Array();
    var itemDescList = new Array();
    var itemExprList = new Array();
    var itemTypeList = new Array();
    var colNumList = new Array();
    var rowNumList = new Array();
    var tableNumList = new Array();
    var tableTypeList = new Array();

    for (i = 0; i < itemCount; i++) {
        dataItemList[i] = false;
        setWinList[i] = false;
        itemSizeList[i] = '';
        itemDescList[i] = '';
        itemExprList[i] = '';
        itemTypeList[i] = '';
    }

        <%= itemValueListBuff.toString()%>

    for (var j = 1; j <= <%=tableCount%> && <%=tableCount%> > 0; j++) {
        tableTypeList[j] = 1;
    }

        <%
            if (!tableTypes.equals("") && tableTypes != null) {
                String[] typeList = tableTypes.split(",");
                for (int k = 0; k < typeList.length; k++) {
        %>
    tableTypeList[<%=k + 1%>] =<%=typeList[k]%>;
        <%
                }
            }
        %>

    //on load시 자동 실행
    //function exprSetup(){//itemExprList 변경
    if (<%= tableCount%> > 1) {//itemExprList 변경
        var rowNum = 1;
        var addRowNum = 0; //첫번째 table의 더할 행의 수가 0부터 시작하기 때문
        for (var i = 0; i < itemCount; i++) {
            if (i > 0) {
                if (tableNumList[i] > tableNumList[i - 1]) { //다음 테이블로 넘어갔다면 현재 이전의 레코드 번호가 이전 테이블까지의 레코스 수임
                    addRowNum = (rowNumList[i] - 1);
                }
            }

            if (itemExprList[i].length > 0 && itemExprList[i].indexOf("^") < 0) {	//숫짜일때
                itemExprList[i] = getCalculationForm(itemExprList[i], addRowNum, "add");
            }
        }
    }


    function getCalculationForm(str, rowNum, type) {
        //필요없는 EXPR ^
        if (isSearch(str, "^"))
            return str;

        //"SUM", "(", ")", ":", ",", "+", "-", "*", "/"
        //SUM(B9:F99)
        var alphabet = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
        var integer = '0123456789';
        var charCount = str.length;
        var charList = new Array(charCount);
        var numList = new Array(charCount);
        var befoChar = "";
        var currChar = "";
        var afterChar = "";
        if (charCount < 1)
            return str;

        //String array analysis
        //expr의 item name의 number add
        var exprbuf = "";
        var isItemNum = false;
        var tmpNum = "";

        for (var i = 0; i < charCount; i++) {

            currChar = str.substring(i, i + 1);

            if (isSearch(alphabet, currChar)) {																			//문자 일때~~~~
                if (currChar == 's' || currChar == 'S') {
                    sumNum = 1;
                    isItemNum = true;
                } else if (i > 0 && (currChar == 'u' || currChar == 'U')) {
                    sumNum = 2;
                    isItemNum = true;
                } else if (i > 1 && (currChar == 'm')) { //M관련 오류 주석 2016.07.11 By jskim
                    sumNum = 3;
                    isItemNum = false;
                } else {
                    isItemNum = true;
                }
                exprbuf += currChar;
            } else if (isSearch(integer, currChar)) {																	//숫자 일때~~~~
                if (i > 0 && isSearch(alphabet, befoChar) && isItemNum == true) {				//Item name의 첫번째 숫자라면
                    tmpNum = currChar;
                    isItemNum = true;
                } else if (i > 0 && isSearch(integer, befoChar) && isItemNum == true) {	//Item name의 두번째 이상의 숫자라면
                    tmpNum += currChar;
                    isItemNum = true;
                } else {																																//나머지
                    exprbuf += currChar;
                    isItemNum = false;
                }

                afterChar = str.substring(i + 1, i + 2);
                if ((i == (charCount - 1) || !isSearch(integer, afterChar)) && isItemNum) {	//Item name의 숫자 끝이라면
                    if (type == "add") {																										//동적표에서 보가자료 보기시 보고한 행에 따라 수식을 변경해줌
                        exprbuf += (parseInt(tmpNum) + parseInt(rowNum));
                        isItemNum = false;
                    } else if (type == "sub") {	//두개의 표를 등록할때 Form에 적용되는 수식사용
                        exprbuf += (parseInt(tmpNum) - parseInt(rowNum));
                        isItemNum = false;
                    }
                }
            } else {
                exprbuf += currChar;
                isItemNum = false;//수식 일때~~~
            }
            befoChar = currChar;
        }
        return exprbuf;
    }

    function isSearch(strs, str) {
        var count = strs.length;
        var strList = new Array(count);

        for (var i = 0; i < count; i++) {
            if (strs.substring(i, i + 1) == str) {
                return true;
            }
        }
        return false;
    }

    function changeCell(object, index) {
        if (dataItemList[index] == false) {
            dataItemList[index] = true;
            showValue(index);
        } else if (setWinList[index] == false) {
            dataItemList[index] = false;
            eval('cell_' + index).innerHTML = "<img src='/totsys/common/inc/documents/tot_doc/images/blank.gif' width='0' height=15 border='0'>";
        } else {
            setWinList[index] = false;
        }
    }

    function strreplace(oldS, newS, fullS) {
        var tmpS = '';
        for (i = 0; i < fullS.length; i++) {
            if (fullS.substring(i, i + oldS.length) == oldS) {
                tmpS = tmpS + newS;
                i = i + oldS.length - 1;
            } else {
                tmpS = tmpS + fullS.substring(i, i + 1);
            }
        }
        return tmpS;
    }

    function showValue(index) {
        eval('cell_' + index).innerHTML =
                "<table width=100% border=0 cellspacing=0 cellspacing=0 >" +
                "	<tr>" +
                "		<td>" +
                "			<table width=100% border=0 cellpadding=0 cellspacing=1>" +
                "				<tr>" +
                "					<td colspan=3  align=left>" +
                "						<a href=\"javascript:inExpNew('" + itemNameList[index] + "');\"><b><font face='Courier' color='brown'>" + itemNameList[index] + "</font></a></b><br>";

        if (itemTypeList[index] == '타이틀') {
            if (itemExprList[index] == '' || itemExprList[index] == null) {
                eval('cell_' + index).innerHTML += "<img height=15 src=\"/totsys/common/inc/documents/tot_doc/images/set4.gif\" border=0 align=center onclick=\"showSetWin(" + index + ");\" alt='" + itemExprList[index] + "'>";
            } else {
                var exprTmp = false;
                if (itemExprList[index].indexOf('^') == -1) {
                    exprTmp = false;
                } else {
                    exprTmp = true;
                }
                if (exprTmp) {
                    eval('cell_' + index).innerHTML += "<img height=15 src=\"/totsys/common/inc/documents/tot_doc/images/set_on5.gif\" border=0 align=center onclick=\"showSetWin(" + index + ");\" alt='" + itemExprList[index] + "'>";
                } else {
                    eval('cell_' + index).innerHTML += "<img height=15 src=\"/totsys/common/inc/documents/tot_doc/images/set_on4.gif\" border=0 align=center onclick=\"showSetWin(" + index + ");\" alt='" + itemExprList[index] + "'>";
                }
            }
        } else if (itemTypeList[index] == '문자') {
            if (itemExprList[index] == '' || itemExprList[index] == null) {
                eval('cell_' + index).innerHTML += "<img height=15 src=\"/totsys/common/inc/documents/tot_doc/images/set2.gif\" border=0 align=center onclick=\"showSetWin(" + index + ");\" alt='" + itemExprList[index] + "'>";
            } else {
                var exprTmp = false;
                if (itemExprList[index].indexOf('^') == -1) {
                    exprTmp = false;
                } else {
                    exprTmp = true;
                }
                if (exprTmp) {
                    eval('cell_' + index).innerHTML += "<img height=15 src=\"/totsys/common/inc/documents/tot_doc/images/set_on5.gif\" border=0 align=center onclick=\"showSetWin(" + index + ");\" alt='" + itemExprList[index] + "'>";
                } else {
                    eval('cell_' + index).innerHTML += "<img height=15 src=\"/totsys/common/inc/documents/tot_doc/images/set_on2.gif\" border=0 align=center onclick=\"showSetWin(" + index + ");\" alt='" + itemExprList[index] + "'>";
                }
            }
        } else if (itemTypeList[index] == '숫자') {
            if (itemExprList[index] == '' || itemExprList[index] == null) {
                eval('cell_' + index).innerHTML += "<img height=15 src=\"/totsys/common/inc/documents/tot_doc/images/set1.gif\" border=0 align=center onclick=\"showSetWin(" + index + ");\" alt='" + itemExprList[index] + "'>";
            } else {
                var exprTmp = false;
                if (itemExprList[index].indexOf('^') == -1) {
                    exprTmp = false;
                } else {
                    exprTmp = true;
                }
                if (exprTmp) {
                    eval('cell_' + index).innerHTML += "<img height=15 src=\"/totsys/common/inc/documents/tot_doc/images/set_on5.gif\" border=0 align=center onclick=\"showSetWin(" + index + ");\" alt='" + itemExprList[index] + "'>";
                } else {
                    eval('cell_' + index).innerHTML += "<img height=15 src=\"/totsys/common/inc/documents/tot_doc/images/set_on1.gif\" border=0 align=center onclick=\"showSetWin(" + index + ");\" alt='" + itemExprList[index] + "'>";
                }
            }
        } else if (itemTypeList[index] == '날짜') {
            if (itemExprList[index] == '' || itemExprList[index] == null) {
                eval('cell_' + index).innerHTML += "<img height=15 src=\"/totsys/common/inc/documents/tot_doc/images/set3.gif\" border=0 align=center onclick=\"showSetWin(" + index + ");\" alt='" + itemExprList[index] + "'>";
            } else {
                var exprTmp = false;
                if (itemExprList[index].indexOf('^') == -1) {
                    exprTmp = false;
                } else {
                    exprTmp = true;
                }
                if (exprTmp) {
                    eval('cell_' + index).innerHTML += "<img height=15 src=\"/totsys/common/inc/documents/tot_doc/images/set_on5.gif\" border=0 align=center onclick=\"showSetWin(" + index + ");\" alt='" + itemExprList[index] + "'>";
                } else {
                    eval('cell_' + index).innerHTML += "<img height=15 src=\"/totsys/common/inc/documents/tot_doc/images/set_on3.gif\" border=0 align=center onclick=\"showSetWin(" + index + ");\" alt='" + itemExprList[index] + "'>";
                }
            }
        }

        eval('cell_' + index).innerHTML += "</td>" +
                "</tr>" +
                "</table>";
    }

    function closeValue(index) {
        eval('cell_' + index).innerHTML = "";
    }

    var v0;
    function inExpNew(v1) {
    	if(SetWin.style.visibility=='hidden'){
    	}else{
    		var itemName = SetCell.itemName;
    		var itemExpr = SetCell.itemExpr;
    		var itemType = SetCell.itemType;

//    		console.log("입력 Type["+itemType.value+"]");
//    		console.log("입력값["+v1+"]");
//    		console.log("입력쉘["+itemName.value+"]");

    		if(itemType.value!='숫자') {
    			return;
    		} 

    		if(itemName.value==v1) {
    			alert('수식에는 자기자식을 연산할 수 없습니다.');
    			return;
    		}
    		if(v1 == "SUM(:)") {
    			if(itemExpr.value.length>0) {
    				alert("SUM함수는 단독으로만 사용가능합니다.");
    				itemExpr.value="";	
    				return;
    			}
    			else{
    				itemExpr.value = v1;	
    				console.log(1);
    			}
    		}	
    		else {
    			if(itemExpr.value=="SUM(:)"){
    				itemExpr.value="SUM("+v1+":)"
    				console.log(2);
    			}
    			else if(itemExpr.value.indexOf("SUM(")>-1){
    				itemExpr.value=itemExpr.value.replace(":)",":"+v1+")");	
    				console.log(3);
    			}
    			else {
    				itemExpr.value = itemExpr.value+v1;	
    				console.log(4);	
    			}
    		}
    	}
    }
    
    var v0;
    function inExpNew(v1) {
    	if(SetWin.style.visibility=='hidden'){
    	}else{
    		var itemName = SetCell.itemName;
    		var itemExpr = SetCell.itemExpr;
    		var itemType = SetCell.itemType;

//    		console.log("입력 Type["+itemType.value+"]");
//    		console.log("입력값["+v1+"]");
//    		console.log("입력쉘["+itemName.value+"]");

    		if(itemType.value!='숫자') {
    			return;
    		} 

    		if(itemName.value==v1) {
    			alert('수식에는 자기자식을 연산할 수 없습니다.');
    			return;
    		}
    		if(v1 == "SUM(:)") {
    			if(itemExpr.value.length>0) {
    				alert("SUM함수는 단독으로만 사용가능합니다.");
    				itemExpr.value="";	
    				return;
    			}
    			else{
    				itemExpr.value = v1;	
    				console.log(1);
    			}
    		}	
    		else {
    			if(itemExpr.value=="SUM(:)"){
    				itemExpr.value="SUM("+v1+":)"
    				console.log(2);
    			}
    			else if(itemExpr.value.indexOf("SUM(")>-1){
    				itemExpr.value=itemExpr.value.replace(":)",":"+v1+")");	
    				console.log(3);
    			}
    			else {
    				itemExpr.value = itemExpr.value+v1;	
    				console.log(4);	
    			}
    		}
    	}
    }

    function showSetWin(index) {
        setWinList[index] = true;
        SetWin.style.visibility = 'inherit';
        //SetWin.style.top = window.event.y + document.body.scrollHeight + 100;
        //SetWin.style.left = window.event.x + document.body.scrollLeft;
        // 2014.08.21 by YoungJun Cho. 서식지정 레이어 팝업 위치조절
        SetWin.style.top = (window.event.clientY + document.body.scrollTop - 30) + "px";    // 위로 30px 밀기
        SetWin.style.left = (window.event.clientX + document.body.scrollLeft + 20) + "px";  // 우측으로 20px 밀기
        SetWin.innerHTML =
                "<table nowrap border=0 cellpadding=4 cellspacing=0 bgcolor=#eeeeee>" +
                "	<tr nowrap bgcolor='#BBBBBB' style='cursor:hand;' id='ForDrag'>" +
                "		<td nowrap><font color='brown'><b>" + itemNameList[index] + "</b></font></td>" +
                "		<td nowrap align=right><right><img src='/totsys/common/inc/documents/tot_doc/images/close.gif' onmouseDown=\"this.src='/totsys/common/inc/documents/tot_doc/images/close1.gif';\" onclick=\"SetWin.style.visibility='hidden';\"></right></td>" +
                "	</tr>" +
                "	<tr nowrap>" +
                "		<td nowrap colspan=2>" +
                "				<form name='SetCell'>" +
                "			<table nowrap border=0 cellpadding=2 cellspacing=0>" +
                "				<tr nowrap >" +
                "					<td nowrap>" +
                "						<input type='hidden' name=itemSize value='3'>" +
                "						<select name='itemType' onchange=\"SetCell.itemType.value=this.value;\" style='vertical-align: middle;'>" +
                "							<option value='숫자'>숫자</option>" +
                "							<option value='문자'>문자</option>" +
                "							<option value='날짜'>날짜</option>" +
//									"							<option value='타이틀'>표제</option>"+
                "						</select>" +
                "						<input type=\"button\" style=\"cursor: hand; padding: 0 2px;\" onClick=\"inExpNew('+');\" value=\"+\" />" +
                "						<input type=\"button\" style=\"cursor: hand; padding: 0 2px;\" onClick=\"inExpNew('-');\" value=\"-\" />" +
                "						<input type=\"button\" style=\"cursor: hand; padding: 0 2px;\" onClick=\"inExpNew('*');\" value=\"*\" />" +
                "						<input type=\"button\" style=\"cursor: hand; padding: 0 2px;\" onClick=\"inExpNew('/');\" value=\"/\" />" +
                "                                               <input type=\"button\" style=\"cursor: hand; padding: 0 2px;\" onClick=\"inExpNew('SUM(:)');\" value=\"SUM(:)\" />" +
                "					</td>" +
                "				</tr>" +
                "				<tr nowrap>" +
                "					<td nowrap><input name='itemExpr' type='text' style='width:100%' class=inputtxt onkeydown='enter_catch(" + index + ")'>" +
                "					<input type=hidden name=itemDesc>" +
				"					<input type=hidden name=itemName value='"+itemNameList[index]+"'></td></tr>"+
                "				<tr nowrap>" +
                "					<td nowrap colspan=10 align=center>" +
                "						<input type=button value='설정' onclick=\"setValue(" + index + ");SetWin.style.visibility='hidden';\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" +
                "						<input type=button value='행적용' onClick=\"horApply('" + itemNameList[index] + "', " + index + ");\">" +
                "						<input type=button value='열적용' onClick=\"verApply('" + itemNameList[index] + "', " + index + ");\">" +
                "					</td>" +
                "				</tr>" +
                "			</table>" +
                "				</form>" +
                "		</td>" +
                "	</tr>" +
                "</table>";
        SetCell.itemSize.value = itemSizeList[index];
        SetCell.itemExpr.value = itemExprList[index];
        SetCell.itemType.value = itemTypeList[index];
    }

    // 설정
    function setValue(index) {
        if (isErrorExpr(SetCell.itemExpr.value, SetCell.itemType.value))
            return; //수식 오류 check
        itemTypeList[index] = SetCell.itemType.value;
        itemSizeList[index] = SetCell.itemSize.value;
        itemExprList[index] = SetCell.itemExpr.value;

        reShowValue(index);
    }

    // 숫자형식 체크
    function numCheck(expr) {
        if (expr.match(/\d+/g) == expr) {
            return true;
        } else {
            return false;
        }
    }

    // 사이값 체크
    function isBig(num1, num2) {
        if (num1 > num2) {
            return true;
        } else {
            return false;
        }
    }

    function setSum(index, expr) {
        setWinList[index] = true;
        itemDescList[index] = 'AutoSum'
        itemSizeList[index] = 10
        itemExprList[index] = expr;
        itemTypeList[index] = 0;
    }

    function beginDrag() {
        dragThis = event.srcElement;
        while (dragThis.id.indexOf("ForDrag") == -1) {
            dragThis = dragThis.parentElement;
            if (dragThis == null) {
                return;
            }
        }
        dragThis = SetWin;
        oldX = (event.clientX + document.body.scrollLeft);
        oldY = (event.clientY + document.body.scrollTop);
    }

    function dragIt() {
        if (dragThis == null) {
            return
        }
        ;

        newX = (event.clientX + document.body.scrollLeft);
        newY = (event.clientY + document.body.scrollTop);

        var distanceX = (newX - oldX);
        var distanceY = (newY - oldY);

        oldX = newX;
        oldY = newY;

        dragThis.style.pixelLeft += distanceX;
        dragThis.style.pixelTop += distanceY;

        event.returnValue = false;
    }

    function endDrag() {
        dragThis = null;
    }

    function setDrag() {
        document.onmousemove = dragIt;
        document.onmousedown = beginDrag;
        document.onmouseup = endDrag;
        oldX = oldY = newX = newY = 0, dragThis = null;
    }

    setDrag();

    //서식테스트 팝업 함수
    function preview() {
        // 초기화
        previewform.itemNames.value = '';
        previewform.itemSizes.value = '';
        previewform.itemDescs.value = '';
        previewform.itemExprs.value = '';
        previewform.itemTypes.value = '';
        previewform.colNums.value = '';
        previewform.rowNums.value = '';
        previewform.tableNums.value = '';

        var item_count = 0;
        for (i = 0; i < itemCount; i++) {
            if (itemNameList[i] != undefined) {
                previewform.itemNames.value = previewform.itemNames.value + i + ':' + itemNameList[i] + '<%= MItem.LIST_DELIM%>';
                previewform.itemSizes.value = previewform.itemSizes.value + i + ':' + itemSizeList[i] + '<%= MItem.LIST_DELIM%>';
                previewform.itemDescs.value = previewform.itemDescs.value + i + ':' + itemDescList[i] + '<%= MItem.LIST_DELIM%>';
                previewform.itemExprs.value = previewform.itemExprs.value + i + ':' + itemExprList[i] + '<%= MItem.LIST_DELIM%>';
                previewform.itemTypes.value = previewform.itemTypes.value + i + ':' + itemTypeList[i] + '<%= MItem.LIST_DELIM%>';
                previewform.colNums.value = previewform.colNums.value + i + ':' + colNumList[i] + '<%= MItem.LIST_DELIM%>';
                previewform.rowNums.value = previewform.rowNums.value + i + ':' + rowNumList[i] + '<%= MItem.LIST_DELIM%>';
                previewform.tableNums.value = previewform.tableNums.value + i + ':' + tableNumList[i] + '<%= MItem.LIST_DELIM%>';
                item_count++;
            }
        }
        previewform.tableDefines.value = '';
        for (i = 0; i <<%= tableCount%>; i++) {
            previewform.tableDefines.value = previewform.tableDefines.value + (i + 1) + ':rowdiv:rowdiv<%= MItem.LIST_DELIM%>';
        }

        if (item_count > 0) {
            var farwindow = null;
            //(url, target, width, height, align, valign, scroll, resize)
            farwindow = getOpener('', 'preview', 900, 600, 'center', 'middle', 'yes', 'yes');//window.open('','preview','width=800,height=600,left=0,top=0,status=no,scrollbars=yes,resizable=yes');
            previewform.submit();
            farwindow.focus();
        } else {
            alert('한개 이상의 입력셀을 지정하셔야 합니다.');
        }
    }

    function nextStep() {


        // 초기화
        dform.itemNames.value = '';
        dform.itemSizes.value = '';
        dform.itemDescs.value = '';
        dform.itemExprs.value = '';
        dform.itemTypes.value = '';
        dform.colNums.value = '';
        dform.rowNums.value = '';
        dform.tableNums.value = '';

        var item_count = 0;
        for (i = 0; i < itemCount; i++) {
            if (itemNameList[i] != undefined) {
                dform.itemNames.value = dform.itemNames.value + i + ':' + itemNameList[i] + '<%= MItem.LIST_DELIM%>';
                dform.itemSizes.value = dform.itemSizes.value + i + ':' + itemSizeList[i] + '<%= MItem.LIST_DELIM%>';
                dform.itemDescs.value = dform.itemDescs.value + i + ':' + itemDescList[i] + '<%= MItem.LIST_DELIM%>';
                dform.itemExprs.value = dform.itemExprs.value + i + ':' + itemExprList[i] + '<%= MItem.LIST_DELIM%>';
                dform.itemTypes.value = dform.itemTypes.value + i + ':' + itemTypeList[i] + '<%= MItem.LIST_DELIM%>';
                dform.colNums.value = dform.colNums.value + i + ':' + colNumList[i] + '<%= MItem.LIST_DELIM%>';
                dform.rowNums.value = dform.rowNums.value + i + ':' + rowNumList[i] + '<%= MItem.LIST_DELIM%>';
                dform.tableNums.value = dform.tableNums.value + i + ':' + tableNumList[i] + '<%= MItem.LIST_DELIM%>';
                item_count++;
            }
        }
        dform.tableDefines.value = '';
        for (i = 0; i <<%= tableCount%>; i++) {
            dform.tableDefines.value = dform.tableDefines.value + (i + 1) + ':rowdiv:rowdiv<%= MItem.LIST_DELIM%>';
        }



        if (item_count > 0) {
            if (confirm('제출된 자료가 모두 완전 삭제됩니다. 계속 진행하시겠습니까?')) {
                try {
                    $.customIndicator.show(window.self);    // 2014.10.08 by youngjun cho. (loading indicator 추가)
                    dform.submit();
                } catch (e) {
                    alert(e);
                }
            }

        } else {
            alert('한개 이상의 입력셀을 지정하셔야 합니다.');
        }

    }

    function beforeStep() {
        // 초기화
        dform.itemNames.value = '';
        dform.itemSizes.value = '';
        dform.itemDescs.value = '';
        dform.itemExprs.value = '';
        dform.itemTypes.value = '';
        dform.colNums.value = '';
        dform.rowNums.value = '';
        dform.tableNums.value = '';

        var item_count = 0;
        for (i = 0; i < itemCount; i++) {
            if (itemNameList[i] != undefined) {
                dform.itemNames.value = dform.itemNames.value + i + ':' + itemNameList[i] + '<%= MItem.LIST_DELIM%>';
                dform.itemSizes.value = dform.itemSizes.value + i + ':' + itemSizeList[i] + '<%= MItem.LIST_DELIM%>';
                dform.itemDescs.value = dform.itemDescs.value + i + ':' + itemDescList[i] + '<%= MItem.LIST_DELIM%>';
                dform.itemExprs.value = dform.itemExprs.value + i + ':' + itemExprList[i] + '<%= MItem.LIST_DELIM%>';
                dform.itemTypes.value = dform.itemTypes.value + i + ':' + itemTypeList[i] + '<%= MItem.LIST_DELIM%>';
                dform.colNums.value = dform.colNums.value + i + ':' + colNumList[i] + '<%= MItem.LIST_DELIM%>';
                dform.rowNums.value = dform.rowNums.value + i + ':' + rowNumList[i] + '<%= MItem.LIST_DELIM%>';
                dform.tableNums.value = dform.tableNums.value + i + ':' + tableNumList[i] + '<%= MItem.LIST_DELIM%>';
                item_count++;
            }
        }
        dform.tableDefines.value = '';
        for (i = 0; i <<%= tableCount%>; i++) {
            dform.tableDefines.value = dform.tableDefines.value + (i + 1) + ':rowdiv:rowdiv<%= MItem.LIST_DELIM%>';
        }
        dform.docName.value = '<%=URLEncoder.encode(docName, "UTF-8")%>';
        dform.submit();
    }

    function enter_catch(index) {
        if (event.keyCode == 13) {
            setValue(index);
            SetWin.style.visibility = 'hidden';
            reShowValue(index);
        }
    }

    function TotalNumberChoice() {
        for (i = 0; i < itemCount; i++) {
            if (itemNameList[i] != undefined && itemTypeList[i] != '타이틀' && itemDescList[i] == 'empty') {
                itemTypeList[i] = '숫자';
                reShowValue(i);
            }
        }
    }

    function TotalCharterChoice() {
        for (i = 0; i < itemCount; i++) {
            if (itemNameList[i] != undefined && itemTypeList[i] != '타이틀' && itemDescList[i] == 'empty') {
                itemTypeList[i] = '문자';
                reShowValue(i);
            }
        }
    }

    function TotalDateChoice() {
        for (i = 0; i < itemCount; i++) {
            if (itemNameList[i] != undefined && itemTypeList[i] != '타이틀' && itemDescList[i] == 'empty') {
                itemTypeList[i] = '날짜';
                reShowValue(i);
            }
        }
    }

    function NumberChoice(index) {
        for (i = 0; i < itemCount; i++) {
            if (itemNameList[i] != undefined && itemDescList[i] == 'empty' && itemTypeList[i] != '타이틀' && tableNumList[i] == index) {
                itemTypeList[i] = '숫자';
                reShowValue(i);
            }
        }
    }

    function CharterChoice(index) {
        for (i = 0; i < itemCount; i++) {
            if (itemNameList[i] != undefined && itemDescList[i] == 'empty' && itemTypeList[i] != '타이틀' && tableNumList[i] == index) {
                itemTypeList[i] = '문자';
                reShowValue(i);
            }
        }
    }

    function DateChoice(index) {
        for (i = 0; i < itemCount; i++) {
            if (itemNameList[i] != undefined && itemDescList[i] == 'empty' && itemTypeList[i] != '타이틀' && tableNumList[i] == index) {
                itemTypeList[i] = '날짜';
                reShowValue(i);
            }
        }
    }

    function StaticChoice(index) {
        tableTypeList[index] = 0;
    }

    function DynaChoice(index) {
        tableTypeList[index] = 1;
    }

    function Choice(index) {
        if (dform.all['dyna' + index].checked == true) {
            //if(d.checked==true){
            //alert(index+" : 0");
            tableTypeList[index] = 0;
        } else {
            //alert(index+" : 1");
            tableTypeList[index] = 1;
        }
    }

    function horApply(ItemName, index) {
        if (isErrorExpr(SetCell.itemExpr.value, SetCell.itemType.value))
            return; //수식 오류 체크
        var Charter = '';
        var Number = ItemName.substring(1, ItemName.length);
        Charter = ItemName.substring(0, 1);
        var TableSu = tableNumList[index];
        if (isNaN(Number)) {
            Number = ItemName.substring(2, ItemName.length);
            Charter = ItemName.substring(0, 2);
        }
        for (i = 0; i < itemCount; i++) {
            if (itemNameList[i] != undefined && itemDescList[i] == 'empty' && tableNumList[i] == TableSu && itemTypeList[i] != '타이틀') {
                var ChangeNumber = itemNameList[i].substring(1, itemNameList[i].length);
                var ChangeCharter = itemNameList[i].substring(0, 1);
                if (isNaN(ChangeNumber)) {
                    ChangeNumber = itemNameList[i].substring(2, itemNameList[i].length);
                    ChangeCharter = itemNameList[i].substring(0, 2);
                }
                if (Number == ChangeNumber) {
                    var ItemExpr = (SetCell.itemExpr.value).toUpperCase();
                    if (ItemExpr.indexOf("^") < 0) {
                        itemExprList[i] = ItemExpr.replace(eval('/' + Charter + '/g'), ChangeCharter);
                    } else {
                        itemExprList[i] = ItemExpr;
                    }
                    itemTypeList[i] = SetCell.itemType.value;  //숫자, 문자, 날짜 수평 설정
                    itemSizeList[i] = SetCell.itemSize.value;  //셀 크기 수평 설정
                    reShowValue(i);
                }
            }
        }
        SetWin.style.visibility = "hidden";
    }

    function verApply(ItemName, index) {
        if (isErrorExpr(SetCell.itemExpr.value, SetCell.itemType.value))
            return; //수식 오류 체크
        var Charter = '';
        var Number = ItemName.substring(1, ItemName.length);
        Charter = ItemName.substring(0, 1);
        var TableSu = tableNumList[index];

        if (isNaN(Number)) {
            Number = ItemName.substring(2, ItemName.length);
            Charter = ItemName.substring(0, 2);
        }

        for (i = 0; i < itemCount; i++) {
            if (itemNameList[i] != undefined && itemDescList[i] == 'empty' && tableNumList[i] == TableSu && itemTypeList[i] != '타이틀') {
                var ChangeNumber = itemNameList[i].substring(1, itemNameList[i].length);
                var ChangeCharter = itemNameList[i].substring(0, 1);
                if (isNaN(ChangeNumber)) {
                    ChangeNumber = itemNameList[i].substring(2, itemNameList[i].length);
                    ChangeCharter = itemNameList[i].substring(0, 2);
                }
                if (Charter == ChangeCharter) {
                    var ItemExpr = (SetCell.itemExpr.value).toUpperCase();
                    if (ItemExpr.indexOf("^") < 0) {
                        itemExprList[i] = ItemExpr.replace(eval('/' + Number + '/g'), ChangeNumber);
                    } else {
                        itemExprList[i] = ItemExpr;
                    }
                    itemTypeList[i] = SetCell.itemType.value;  //숫자, 문자, 날짜 수직 설정
                    itemSizeList[i] = SetCell.itemSize.value;  //셀 크기 수평 설정
                    reShowValue(i);
                }
            }
        }

        SetWin.style.visibility = "hidden";
    }
    </script>
    <script language='JavaScript'>
        function saveform() {
            dform.action = '/servlet/kr.co.kihyun.beans.totsys.doc.HttpDocRegister';
            dform.target = '_self';
            dform.submit();
        }

        function formTypeSetting() {
            return true;
        }

        var isTotDoc = false;
        function formTypeCheck() {
            if (!isTotDoc) {
                alert("입력셀이 하나이상 존재해야됩니다.     \n문서등록을 더이상 진행하실수 없습니다.     ");
                return;
            }
            if (exprCheck())
                return; //수식에 오류가 있다면 정지해라~~
            preview();
        }

        function formSubmit() {

            if (!isTotDoc) {
                alert("입력셀이 하나이상 존재해야됩니다.     \n문서등록을 더이상 진행하실수 없습니다.     ");
                return;
            }
            if(<%=docID%> > 1700000000 && '<%=dtID%>'.substring(0,2) != "A00"){
            	alert("교육부에서 요청한 자료는 서식수정을 지원하지 않습니다.");
            	return;
            }
            if (exprCheck())
                return; //수식에 오류가 있다면 정지해라~~

            var tableType = "";
            for (var i = 1; i <= <%=tableCount%> && <%=tableCount%> > 0; i++) {
                if (i != 1)
                    tableType += ",";
                tableType += tableTypeList[i];
            }




            //dform.action = '/servlet/kr.co.kihyun.beans.totsys.doc.HttpDocRegister';
            //dform.action = '/totsys/common/web/documents/tot_doc/inform_preview.jsp';
            dform.action = '/servlet/kr.co.kihyun.beans.totsys.doc.HttpDocReFormConfig2';
            dform.target = '_self';
            dform.tableTypes.value = tableType;

            //alert(dform.tableTypes.value);

            nextStep();
        }

        function beforeSubmit() {
            if (!isTotDoc) {
                alert("입력셀이 하나이상 존재해야됩니다.     \n문서등록을 더이상 진행하실수 없습니다.     ");
                return;
            }
            if (exprCheck())
                return; //수식에 오류가 있다면 정지해라~~

            //dform.action = '/servlet/kr.co.kihyun.beans.totsys.doc.HttpDocRegister';
            dform.action = '/totsys/totper/mydocbox/regbox/doc_regist.jsp';
            dform.target = '_self';
            //beforeStep();
            history.go(-2);
        }

        //수식 오류 checker
        function exprCheck() {
            var exprCount = itemExprList.length;
            for (var i = 0; i < exprCount; i++) {
                if (isErrorExpr(itemExprList[i], itemTypeList[i])) {
                    return true;
                }
            }
        }


        function isErrorExpr(expr, type){
        	//SUM안에 +가 있는 경우 check
        	if(expr != ""){
        		var sumIndex = expr.indexOf("SUM");
        		var plusIndex = 0;
        		plusIndex += expr.indexOf("+");
        		plusIndex += expr.indexOf("-");
        		plusIndex += expr.indexOf("*");
        		plusIndex += expr.indexOf("/");
        		plusIndex += expr.indexOf("=");

        		if(expr.indexOf("=")>-1)
        		{
        			alert(expr+" 수식이 잘못 되었습니다.  다시확인해 주세요.     \n정의한 수식중 SUM()안에 '+', '-', '*', '/', '='가 있는지 다시 확인해 주세요.    ");
        			return true;
        		}

        		if(sumIndex > -1 && plusIndex > -1){
        			alert(expr+" 수식이 잘못 되었습니다.  다시확인해 주세요.     \n정의한 수식중 SUM()안에 '+', '-', '*', '/', '='가 있는지 다시 확인해 주세요.    ");
        			return true;
        		}

                        var colonIndex = expr.indexOf(":");
                        var alphabetCount = 0;
                        var alphaBeforeCount = 0;
                        var alphaAfterCount = 0;

        		//SUM안에 아이템이 하나만 존재할때..
        		var roundInStr = "";
                        var charCount = 0;
        		var alphabet = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
//        		if(sumIndex > -1){
//        			roundInStr = expr.substring(sumIndex+3, expr.length);
//        			charCount = roundInStr.length;
//        			var isErrorExpr = false;
//        			for(var i=0; i < charCount; i++){
//                                    alert(roundInStr.substring(i, i+1));
//        				if(alphabet.indexOf(roundInStr.substring(i, i+1)) > -1 && isErrorExpr){
//        					isErrorExpr = false;
//        					break;
//        				}else{
//        					isErrorExpr = true;
//        				}
//        			}
//        		}
//        		if(isErrorExpr){
//        			alert(expr+" 수식이 잘못 되었습니다.  다시확인해 주세요.     \n정의한 수식중 SUM()안에 셀 이름이 하나만 있는지 확인해 주세요.     ");
//        			return true;
//        		}

                        if(sumIndex > -1){
                            //콜론이 없는 경우에는 알파벳+숫자가 2개 있어야 한다.
                            if(colonIndex <= -1) {
                                roundInStr = expr.substring(sumIndex+4, expr.length-1);
        			charCount = roundInStr.length;
                                for(var i=0; i < charCount; i++){
                                    if(alphabet.indexOf(roundInStr.substring(i, i+1)) > -1){
                                        if(alphabetCount == 1) { alphabetCount = 0; }
                                        alphabetCount = alphabetCount + 1;
                                    } else {
                                        if(alphabetCount == 2) { alphabetCount = 1; }
                                        alphabetCount = alphabetCount + 1;
                                    }
        			}

                                if(alphabetCount != 2){
                                    alert(expr+" 수식이 잘못 되었습니다.  다시확인해 주세요.");
                                    return true;
                                }

                            //콜론이 1개 있는 경우에는 알파벳+숫자가 2개 있어야 한다.
                            }  else {
                                //콜론의 앞쪽
                                roundInStr = expr.substring(sumIndex+4, colonIndex);
        			charCount = roundInStr.length;
                                for(var i=0; i < charCount; i++){
                                    if(alphabet.indexOf(roundInStr.substring(i, i+1)) > -1){
                                        if(alphaBeforeCount == 1) { alphaBeforeCount = 0; }
                                        alphaBeforeCount = alphaBeforeCount + 1;
                                    } else {
                                        if(alphaBeforeCount == 2) { alphaBeforeCount = 1; }
                                        alphaBeforeCount = alphaBeforeCount + 1;
                                    }
        			}

                                //콜론의 뒤쪽
                                roundInStr = expr.substring(colonIndex+1, expr.length-1);
        			charCount = roundInStr.length;
                                for(var i=0; i < charCount; i++){
                                    if(alphabet.indexOf(roundInStr.substring(i, i+1)) > -1){
                                        if(alphaAfterCount == 1) { alphaAfterCount = 0; }
                                        alphaAfterCount = alphaAfterCount + 1;
                                    } else {
                                        if(alphaAfterCount == 2) { alphaAfterCount = 1; }
                                        alphaAfterCount = alphaAfterCount + 1;
                                    }
        			}

                                if((alphaBeforeCount == 2 && alphaAfterCount != 2) || (alphaBeforeCount != 2 && alphaAfterCount == 2)) {
                                    alert(expr+" 수식이 잘못 되었습니다.  다시확인해 주세요.     \n정의한 수식중 SUM()안에 셀 이름이 하나만 있는지 확인해 주세요.     ");
                                    return true;
                                } else if(alphaBeforeCount != 2 || alphaAfterCount != 2){
                                    alert(expr+" 수식이 잘못 되었습니다.  다시확인해 주세요.");
                                    return true;
                                }
                            }
                        }

                        // 셀을 '숫자'로 선택하고, 계산식을 입력할 경우 입력가능한 문자외에는 등록하지 못하도록 체크한다. 2014.11.21 by YOUNGJUN,CHO
                        //alert(SetCell.itemType.value);
                        if (type === "숫자") {

                            // 아래 문자가 아닌 경우(정규식 앞에 ^ 으로 아닌 경우를 체크)가 존재할 경우 true 로 리턴.
                            // 영문 대문자 A-Z
                            // 숫자 0-9
                            // 괄호 ( )
                            // 사칙연산 + - * /
                            // 콜론 :
                            var regexp = /[^A-Z|0-9|\(|\)|\+|\-|\/|\*|\:]/;

                            //alert(regexp.test(expr));
                            if (regexp.test(expr) === true) {
                                alert(expr+" 수식이 잘못 되었습니다.\n\n셀을 '숫자'로 선택하신 경우에는 수식에 소수점을 사용할 수 없으며\n\r아래 문자만 사용할 수 있습니다.\n\
                                    \n** 알파벳(대문자), 숫자, 괄호, 사칙연산기호(+,-,*,/), 콜론(:) **\n\n수식을 다시 설정해 주십시오!");
                                return true;
                            }
                        }
        	}

        	//SUM없이 ','만 사용할때 사용불가
        	var comaIndex;
        	if(sumIndex == -1){
        		comaIndex = expr.indexOf(",");
        		if(comaIndex > -1){
        			alert(expr+" 수식이 잘못 되었습니다.  다시확인해 주세요.     \n정의한 수식중 ','가 있는지 확인해주세요.     \n','를 '+'로 바꿔 사용하면 정상적으로 작동합니다.");
        			return true;
        		}
        	}

        	//수식에 자기자신을 연산하는 경우 사용불가
        	if(expr.indexOf("+")==-1||expr.indexOf("-")==-1||expr.indexOf("*")==-1||expr.indexOf("/")==-1||expr.indexOf("SUM(")==-1){
        		var cellname=$(SetWin).find('td:first').text();
        		try{
        			cellname=cellname.trim();
        		}catch(e){}

        		if(expr.indexOf(cellname)>-1&&cellname!=''){
        			alert('수식에는 자기 자신을 연산할 수 없습니다.');
        			return true;
        		}
        	}
        	var totForm={};
        	totForm.itemList=[];
			for(var i=0;i<itemNameList.length;i++){
				totForm.itemList[i]={itemName:itemNameList[i],expr:itemExprList[i],type:itemTypeList[i]};
			}
        	//셀 서식 적용 중 콤보박스와 연산이 있을 경우 콤보박스 값 중에 숫자값이 아닌 값이 있는지 체크
        	//수식 일 때 숫자가 아닌 셀 이 있는 지 확인
        	var temp=expr.replace('+',',').replace('-',',').replace('*',',').replace('/',',').replace('SUM(',',').replace(':',',').replace(')',',').split(',');
        	if(temp.length>1){
        		for(var i=0;i<temp.length;i++){
        			for(var j=0;j<totForm.itemList.length;j++){
        				if(temp[i]==totForm.itemList[j].itemName){
        					var exp=totForm.itemList[j].expr;
        					if(exp.indexOf('^')>-1){
        						var explist=exp.split('^');
        						for(var k=0;k<explist.length;k++){
        							if(isNaN(explist[k])){
        								alert(totForm.itemList[j].itemName+' 의 콤보 값 중에 숫자가 아닌값이 있습니다.');
        								return true;
        							}

        						}
        					}
        					if(totForm.itemList[j].type!='숫자'&&exp.indexOf('^')==-1){
        						alert(totForm.itemList[j].itemName+' 셀은 숫자가 아니므로 수식을 적용할 수 없습니다.');
        						return true;
        					}
        				}

        			}
        		}
        	}
        }

        function checkFormSize(formBytes, deptCount) {
            var maxSize = <%= MDoc.MAX_DOC_SIZE%>;
            if ((formBytes * deptCount / 1024 / 1024) > maxSize) {
                alert("경고! 총보고시 " + maxSize + "M가 넘습니다.     \n표가 여러개라면 표를 나누어 등록하는 것이 좋습니다.     ");
            }
        }

        /*
         * 테이블 각 셀 garbage 요소를 제거하여, 레이아웃을 정돈한다.
         * 2014.09.24 by YoungJun Cho.
         */
       //수정가능한지
        $(document).ready(function() {
            $.fixViewFormTable_PTag($("#formDiv").find("table td span"), {});
            //ie10,11 호환성보기 수정 - 테두리 없어지는 문제 수정
            $('#formDiv > table').attr({'border':'1','bo':'true'}).css('border','1px solid #000')
            	.find('td').each(function(i,o){
					if($(o).closest('table').attr('bo')=='true'){
						$(this).css('border','1px solid #000');
					}
          		});
            $('#formDiv span').css('line-height','2');
          //수정불가능하게
    		if(parent.isDisabled){
	    		$('#formDiv *').unbind().removeAttr('href').removeAttr('onclick');
	    		$('[type=radio]').parent().remove();
	    		$('[name=bt_prev],[name=bt_next]').remove();
    		}
            //레이어사용
            try{
    			if(parent.parent.getPopCookie()=='no'||document.documentMode<10)return;
	            parent.parent.overrideOpen(window);
    		}catch(e){return;}


        });
        /* 자료입력 테이블 input element 뒤에 font, span 등의 불필요한 element 를 삭제처리. 끝 */
    </script>
    <body style='' onload="formTypeSetting();
        checkFormSize('<%= formBytes.length%>', '<%= deptCount%>');
        scrollObjectContent('formDiv');">
        <form name="dform"
              action="/servlet/kr.co.kihyun.beans.totsys.doc.HttpDocReFormConfig2" method="post">
            <input type="hidden" name="docID" value="<%= docID%>">
            <input type="hidden" name="docName" value="<%= docName%>">
            <input type="hidden" name="stDate" value="<%= stDate%>">
            <input type="hidden" name="edDate" value="<%= edDate%>">
            <input type="hidden" name="deptIDs" value='<%= URLEncoder.encode(deptIDs, "UTF-8")%>'>
            <input type="hidden" name="deptNames" value=<%= URLEncoder.encode(deptNames, "UTF-8")%>>
            <input type="hidden" name="userIDs" value='<%= URLEncoder.encode(userIDs, "UTF-8")%>'>
            <input type="hidden" name="userNames" value='<%= URLEncoder.encode(userNames, "UTF-8")%>'>
            <input type="hidden" name="accAuth" value="<%= accAuth%>">
            <input type="hidden" name="repDocID" value="<%= repDocID%>">
            <input type="hidden" name="docGroupID" value="<%= docGroupID%>">
            <input type="hidden" name="isFromFormBox" value="<%= isFromFormBox%>">
            <input type="hidden" name="tableCount" value="<%= tableCount%>">
            <input type="hidden" name="isDynaTable" value="<%= isDynaTable%>">
            <input type="hidden" name="mode" value="regist">
            <input type="hidden" name="tableDefines">
            <input type="hidden" name="itemNames">
            <input type="hidden" name="tableNums">
            <input type="hidden" name="colNums">
            <input type="hidden" name="rowNums">
            <input type="hidden" name="itemSizes">
            <input type="hidden" name="itemDescs">
            <input type="hidden" name="itemExprs">
            <input type="hidden" name="itemTypes">
            <input type="hidden" name="tableTypes">
            <input type="hidden" name="backDash" value="back">
            <input type="hidden" name="tableType" value="0">
            <input type="hidden" name="defItemSize" value="3">
        </form>
        <!-- 서식테스트 팝업용 폼 -->
        <form name="previewform" method="post"
					action="/totsys/common/web/documents/tot_doc/popup_inform_preview.jsp"
					target="preview">
             <input type="hidden" name="docID" value="<%=docID%>"/>
             <input type="hidden" name="docName" value='<%=URLEncoder.encode(docName, "UTF-8")%>'>
             <input type="hidden" name="prss"/>
             <input type="hidden" name="deptIDs" value='<%= clearXSS(URLDecoder.decode(MString.checkNull(request.getParameter("deptIDs")), "UTF-8"),"") %>'>
             <input type="hidden" name="deptNames" value="<%= deptNames %>">
             <input type="hidden" name="deptTypes" value="<%= clearXSS(request.getParameter("deptTypes"),"") %>">
             <input type="hidden" name="userIDs" value="<%= MString.checkNull(request.getParameter("userIDs")) %>">
             <input type="hidden" name="userNames" value="<%= MString.checkNull(request.getParameter("userNames")) %>">
             <input type="hidden" name="accAuth" value="<%= clearXSS(request.getParameter("accAuth"),"") %>">
             <input type="hidden" name="totRange" value="<%= clearXSS(request.getParameter("totRange"),"") %>">
             <input type="hidden" name="repDocID" value="<%= clearXSS(request.getParameter("repDocID"),"") %>">
             <input type="hidden" name="docGroupID" value="<%= clearXSS(request.getParameter("docGroupID"),"") %>">
             <input type="hidden" name="isFromFormBox" value="<%= request.getParameter("isFromFormBox") %>">
             <input type="hidden" name="tableCount" value="<%= tableCount %>">
             <input type="hidden" name="isDynaTable" value="<%= isDynaTable %>">
             <input type="hidden" name="mode" value="regist">
             <input type="hidden" name="tableDefines">
             <input type="hidden" name="itemNames">
             <input type="hidden" name="tableNums">
             <input type="hidden" name="colNums">
             <input type="hidden" name="rowNums">
             <input type="hidden" name="itemSizes">
             <input type="hidden" name="itemDescs">
             <input type="hidden" name="itemExprs">
             <input type="hidden" name="itemTypes">
             <input type="hidden" name="tableTypes">
             <input type="hidden" name="backDash" value="back">
             <input type="hidden" name="docForm">
             <input type="hidden" name="tableType" value="0">
             <input type="hidden" name="defItemSize" value="3">
             <input type="hidden" name="tmpSav" value="" />
		</form>
        <table>
            <tr>
                <td style="width: 100%">
                    <table style="border-left: 1px solid #ccc; border-right: 1px solid #ccc; border-bottom: 1px solid #ccc;">
                        <tr>
                            <td style="padding-top: 10px; padding-bottom: 5px; padding-left: 10px;">
                            <!-- 스크롤 안나오는거 수정 -->
                                <div id="formDiv" style="padding-top: 5; width: <%=session.getAttribute("formWidth")%>; height: <%=session.getAttribute("formHeight")%>; overflow:auto;">
                                   <%= TableCreation.insertChartOrNumber(strTableInfo, tableTypes)%>
                                </div>
                            </td>
                        </tr>
                    </table>
                    <br>
                    <table>
                        <tr class="toolbar center">
                            <td>
                            <!-- 이전단계 -->
                                <img alt="이전단계" src="/totsys/common/images/bt_preb.gif" name="bt_prev"
                                	style="cursor:pointer;"
                                 	onclick="parent.$('[name=subUpload]').show();parent.$('[name=nextifr]').hide();">
                                <a href="#" name="bt_preview" id="bt_preview" style="display:inline" onclick="preview();">
                                    <span>
                                        <img src="/totsys/common/images/bt_sesik.gif" alt="설정한 서식을 테스트합니다." />
                                    </span>
                                </a>
                                <a href="javascript:void(0);">
                                    <img onclick="formSubmit();" src="/totsys/common/images/btn_modify_completed.gif" name="bt_next" border="0">
                                </a>
                            </td>
                        </tr>
                    </table>
                </td>
            </tr>
        </table>
    </body>
</html>
<script language='JavaScript'>
    //onload시 자동 실행
    for (i = 0; i < itemCount; i++) {
        reShowValue(i);
    }
    function reShowValue(i) {
        if (itemTypeList[i] != '타이틀' && itemDescList[i] == "empty") {
            isTotDoc = true; //입력셀이 하나라도 있는지..?
            showValue(i);
        } else {
            closeValue(i);
            itemExprList[i] = '';
        }
    }
</script>
<%
    } catch (Exception ex) {
        ex.printStackTrace();
        out.println(kr.co.kihyun.text.html.ServletUtil.getJavaScript("location='/servlet/kr.co.kihyun.beans.user.HttpSSOLogin?mode=logout';"));
    } finally {
    }
%>
