hehih 2024-09-19
엑셀 업로드 파일용량 확인
@08ca5447bae3768290a20d07653ea17b6a2022c3
src/main/java/itn/com/cmm/filter/XssFilter.java
--- src/main/java/itn/com/cmm/filter/XssFilter.java
+++ src/main/java/itn/com/cmm/filter/XssFilter.java
@@ -1,48 +1,48 @@
-/*
- * Copyright 2008-2009 MOPAS(Ministry of Public Administration and Security).
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package itn.com.cmm.filter;
-
-import java.io.IOException;
-
-import javax.servlet.Filter;
-import javax.servlet.FilterChain;
-import javax.servlet.FilterConfig;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServletRequest;
-
-public class XssFilter implements Filter{
-
-	@SuppressWarnings("unused")
-	private FilterConfig config;
-
-	public void doFilter(ServletRequest request, ServletResponse response,
-			FilterChain chain) throws IOException, ServletException {
-		ServletContext context = config.getServletContext();
-		chain.doFilter(new XssFilterRequestWrapper((HttpServletRequest)request), response);
-		//chain.doFilter(new XssFilterRequestWrapper((HttpServletRequest)request , response , context ), response);
-	}
-
-	public void init(FilterConfig config) throws ServletException {
-		this.config = config;
-	}
-
-	public void destroy() {
-		this.config = null;
-	}
-}
+/*
+ * Copyright 2008-2009 MOPAS(Ministry of Public Administration and Security).
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package itn.com.cmm.filter;
+
+import java.io.IOException;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+
+public class XssFilter implements Filter{
+
+	@SuppressWarnings("unused")
+	private FilterConfig config;
+
+	public void doFilter(ServletRequest request, ServletResponse response,
+			FilterChain chain) throws IOException, ServletException {
+		ServletContext context = config.getServletContext();
+		chain.doFilter(new XssFilterRequestWrapper((HttpServletRequest)request), response);
+		//chain.doFilter(new XssFilterRequestWrapper((HttpServletRequest)request , response , context ), response);
+	}
+
+	public void init(FilterConfig config) throws ServletException {
+		this.config = config;
+	}
+
+	public void destroy() {
+		this.config = null;
+	}
+}
src/main/java/itn/let/mjo/addr/service/AddrGroupService.java
--- src/main/java/itn/let/mjo/addr/service/AddrGroupService.java
+++ src/main/java/itn/let/mjo/addr/service/AddrGroupService.java
@@ -1,54 +1,54 @@
-package itn.let.mjo.addr.service;
-
-import java.util.List;
-
-import itn.let.mail.service.StatusResponse;
-
-/**
- * 주소록 관리를 위한 서비스 인터페이스  클래스
- * @author ITN
- * @since 2021.04.08
- * @version 1.0
- * @see
- *
- * <pre>
- * << 개정이력(Modification Information) >>
- *   수정일      수정자          수정내용
- *  -------    --------    ---------------------------
- *  2021.04.08  ITN          최초 생성
- *  </pre>
- */
-public interface AddrGroupService {
-
-	public List<AddrGroupVO> selectAddrGroupList(AddrGroupVO addrGroupVO) throws Exception;
-	
-	public AddrGroupVO selectAddrGroupDetail(AddrGroupVO addrGroupVO) throws Exception;
-	
-	// 주소록 그룹 카운트 조회(전체)
-	public AddrGroupVO selectAddrGroupTotCnt(AddrGroupVO addrGroupVO) throws Exception;
-
-	// 주소록 그룹 카운트 조회(그룹미지정)
-	public AddrGroupVO selectAddrGroupNogrpCnt(AddrGroupVO addrGroupVO) throws Exception;
-
-	// 주소록 그룹 카운트 조회(자주보내는 번호)
-	public AddrGroupVO selectAddrGroupBookmarkCnt(AddrGroupVO addrGroupVO) throws Exception;
-	
-	public String insertAddrGroup(AddrGroupVO addrGroupVO) throws Exception;
-
-	public int updateAddrGroup(AddrGroupVO addrGroupVO) throws Exception;
-
-	public int deleteAddrGroup(AddrGroupVO addrGroupVO) throws Exception;
-	
-	public int deleteAddrGroupByAdmin(AddrGroupVO addrGroupVO) throws Exception;
-	
-	public int deleteAddrGroupByAdminAll(AddrGroupVO addrGroupVO) throws Exception;
-	
-	public int selectDuplAddrGroupCnt(AddrGroupVO addrGroupVO) throws Exception;
-
-	public int selectMaxOrderNumber(AddrGroupVO addrGroupVO) throws Exception;
-	
-	public void mergeAddrGroupAjax(AddrGroupVO addrGroupVO, AddrVO addrVO) throws Exception;
-	
-	public void copyAddrGroupAjax(AddrGroupVO addrGroupVO, AddrVO addrVO) throws Exception;
-
-}
+package itn.let.mjo.addr.service;
+
+import java.util.List;
+
+import itn.let.mail.service.StatusResponse;
+
+/**
+ * 주소록 관리를 위한 서비스 인터페이스  클래스
+ * @author ITN
+ * @since 2021.04.08
+ * @version 1.0
+ * @see
+ *
+ * <pre>
+ * << 개정이력(Modification Information) >>
+ *   수정일      수정자          수정내용
+ *  -------    --------    ---------------------------
+ *  2021.04.08  ITN          최초 생성
+ *  </pre>
+ */
+public interface AddrGroupService {
+
+	public List<AddrGroupVO> selectAddrGroupList(AddrGroupVO addrGroupVO) throws Exception;
+	
+	public AddrGroupVO selectAddrGroupDetail(AddrGroupVO addrGroupVO) throws Exception;
+	
+	// 주소록 그룹 카운트 조회(전체)
+	public AddrGroupVO selectAddrGroupTotCnt(AddrGroupVO addrGroupVO) throws Exception;
+
+	// 주소록 그룹 카운트 조회(그룹미지정)
+	public AddrGroupVO selectAddrGroupNogrpCnt(AddrGroupVO addrGroupVO) throws Exception;
+
+	// 주소록 그룹 카운트 조회(자주보내는 번호)
+	public AddrGroupVO selectAddrGroupBookmarkCnt(AddrGroupVO addrGroupVO) throws Exception;
+	
+	public String insertAddrGroup(AddrGroupVO addrGroupVO) throws Exception;
+
+	public int updateAddrGroup(AddrGroupVO addrGroupVO) throws Exception;
+
+	public int deleteAddrGroup(AddrGroupVO addrGroupVO) throws Exception;
+	
+	public int deleteAddrGroupByAdmin(AddrGroupVO addrGroupVO) throws Exception;
+	
+	public int deleteAddrGroupByAdminAll(AddrGroupVO addrGroupVO) throws Exception;
+	
+	public int selectDuplAddrGroupCnt(AddrGroupVO addrGroupVO) throws Exception;
+
+	public int selectMaxOrderNumber(AddrGroupVO addrGroupVO) throws Exception;
+	
+	public void mergeAddrGroupAjax(AddrGroupVO addrGroupVO, AddrVO addrVO) throws Exception;
+	
+	public void copyAddrGroupAjax(AddrGroupVO addrGroupVO, AddrVO addrVO) throws Exception;
+
+}
src/main/java/itn/let/mjo/pay/service/impl/MjonPayDAO.java
--- src/main/java/itn/let/mjo/pay/service/impl/MjonPayDAO.java
+++ src/main/java/itn/let/mjo/pay/service/impl/MjonPayDAO.java
@@ -1,357 +1,357 @@
-package itn.let.mjo.pay.service.impl;
-
-import java.util.List;
-
-import org.springframework.stereotype.Repository;
-
-import egovframework.rte.psl.dataaccess.EgovAbstractDAO;
-import itn.let.mjo.pay.service.MjonPayVO;
-import itn.let.mjo.pay.service.MjonVaMsgLogVO;
-import itn.let.mjo.pay.service.RefundVO;
-import itn.let.mjo.pay.service.StVcVO;
-@Repository("mjonPayDAO")
-public class MjonPayDAO extends EgovAbstractDAO {
-
-	@SuppressWarnings("unchecked")
-	public List<MjonPayVO> selectPayList(MjonPayVO mjonPayVO) throws Exception{
-		return (List<MjonPayVO>)list("mjonPayDAO.selectPayList", mjonPayVO);
-	}
-
-	@SuppressWarnings("unchecked")
-	public List<MjonPayVO> selectCashList(MjonPayVO mjonPayVO) throws Exception{
-		return (List<MjonPayVO>)list("mjonPayDAO.selectCashList", mjonPayVO);
-	}
-	
-	@SuppressWarnings("unchecked")
-	public List<MjonPayVO> selectCashRemainList(MjonPayVO mjonPayVO) throws Exception{
-		return (List<MjonPayVO>)list("mjonPayDAO.selectCashRemainList", mjonPayVO);
-	}	
-	
-	@SuppressWarnings("unchecked")
-	public List<MjonPayVO> selectCashRemainNewList(MjonPayVO mjonPayVO) throws Exception{
-		return (List<MjonPayVO>)list("mjonPayDAO.selectCashRemainNewList", mjonPayVO);
-	}	
-	
-	public int selectCashRemainNewCnt(MjonPayVO mjonPayVO) throws Exception{
-		return (int) select("mjonPayDAO.selectCashRemainNewCnt", mjonPayVO);
-	}
-	
-	
-	@SuppressWarnings("unchecked")
-	public List<MjonPayVO> selectMemberCashList(MjonPayVO mjonPayVO) throws Exception{
-		return (List<MjonPayVO>)list("mjonPayDAO.selectMemberCashList", mjonPayVO);
-	}
-
-	public MjonPayVO selectCashVO(MjonPayVO mjonPayVO) throws Exception{
-		return (MjonPayVO)select("mjonPayDAO.selectCashVO", mjonPayVO);
-	}
-
-	public void insertCash(MjonPayVO mjonPayVO) throws Exception{
-		
-		try {
-		
-			insert("mjonPayDAO.insertCash", mjonPayVO);
-			
-		} catch (Exception e) {
-			
-			e.printStackTrace();
-		}
-		
-		
-	}
-
-	public void updateCash(MjonPayVO mjonPayVO) throws Exception{
-		update("mjonPayDAO.updateCash", mjonPayVO);
-	}
-
-	public void deleteCash(MjonPayVO mjonPayVO) throws Exception{
-		update("mjonPayDAO.deleteCash", mjonPayVO);
-	}
-
-	public void insertMjPg(MjonPayVO mjonPayVO)  throws Exception{
-		insert("mjonPayDAO.insertMjPg", mjonPayVO);
-	}
-
-	public void insertMjTax(MjonPayVO mjonPayVO) throws Exception {
-		insert("mjonPayDAO.insertMjTax", mjonPayVO);
-	}
-
-	public void updateMemberCash(MjonPayVO mjonPayVO) throws Exception {
-		insert("mjonPayDAO.updateMemberCash", mjonPayVO);
-  	}
-
-	public void updateMemberPoint(MjonPayVO mjonPayVO) throws Exception {
-		insert("mjonPayDAO.updateMemberPoint", mjonPayVO);
-	}
-
-	public void insertPoint(MjonPayVO mjonPayVO) throws Exception {
-		insert("mjonPayDAO.insertPoint", mjonPayVO);
-		
-	}
-
-	public MjonPayVO selectPayVO(MjonPayVO mjonPayVO) throws Exception{
-		return (MjonPayVO)select("mjonPayDAO.selectPayVO", mjonPayVO);
-	}
-
-	@SuppressWarnings("unchecked")
-	public List<MjonPayVO> selectPointList(MjonPayVO mjonPayVO) throws Exception{
-		return (List<MjonPayVO>)list("mjonPayDAO.selectPointList", mjonPayVO);
-	}
-
-	// 가상계좌(세틀뱅크) 입금내역 조회 by pk
-	public StVcVO selectVacsByPk(StVcVO stVcVO) throws Exception{
-		return (StVcVO)select("mjonPayDAO.selectVacsByPk", stVcVO);
-	}
-	
-	// 가상계좌(세틀뱅크) 회원ID 조회 by 입금자명
-	public StVcVO selectMberIdByIacctNm(StVcVO stVcVO) throws Exception{
-		return (StVcVO)select("mjonPayDAO.selectMberIdByIacctNm", stVcVO);
-	}
-	
-	// 가상계좌(세틀뱅크) 충전내역 요청여부 by 가상계좌입금정보
-	public StVcVO selectVaChargeByVc(StVcVO stVcVO) throws Exception{
-		return (StVcVO)select("mjonPayDAO.selectVaChargeByVc", stVcVO);
-	}
-	
-	// 가상계좌(세틀뱅크) 입금 자동충전 충전내역 등록
-	public void insertVaCharge(StVcVO stVcVO) throws Exception{
-		insert("mjonPayDAO.insertVaCharge", stVcVO);
-	}
-	
-	// 가상계좌(세틀뱅크) 입금 자동충전 충전내역 수정
-	public void updateVaCharge(StVcVO stVcVO) throws Exception{
-		update("mjonPayDAO.updateVaCharge", stVcVO);
-	}
-
-	public MjonPayVO selectPointVO(MjonPayVO mjonPayVO) throws Exception{
-		return (MjonPayVO)select("mjonPayDAO.selectPointVO", mjonPayVO);
-	}
-
-	public void deletePoint(MjonPayVO mjonPayVO) throws Exception{
-		update("mjonPayDAO.deletePoint", mjonPayVO);
-	}
-
-	@SuppressWarnings("unchecked")
-	public List<MjonPayVO> selectUsedCashTotCnt(MjonPayVO mjonPayVO) throws Exception{
-		return (List<MjonPayVO>)list("mjonPayDAO.selectUsedCashTotCnt", mjonPayVO);
-	}
-	
-	//전용계좌 문자발송 로그 기록 입력
-	public int insertVaMsgLogInfo(MjonVaMsgLogVO mjonVaMsgLogVO) throws Exception{
-		return update("mjonPayDAO.insertVaMsgLogInfo", mjonVaMsgLogVO);
-	}
-	
-	//일일 전용계좌 문자발성 건수 불러오기
-	public MjonVaMsgLogVO selectMyAcctSendCnt(MjonVaMsgLogVO mjonVaMsgLogVO) throws Exception {
-		return (MjonVaMsgLogVO) select("mjonPayDAO.selectMyAcctSendCnt", mjonVaMsgLogVO);
-	}
-
-	// 모바일(KG 모빌리언스) 인서트
-	public void insertKgm(MjonPayVO mjonPayVO) throws Exception{
-		insert("mjonPayDAO.insertKgm", mjonPayVO);
-	}	
-	
-	// 모바일(KG 모빌리언스) VO
-	public MjonPayVO selectKgmVO(MjonPayVO mjonPayVO) throws Exception{
-		return (MjonPayVO)select("mjonPayDAO.selectKgmVO", mjonPayVO);
-	}	
-	
-	public void insertPointUse(MjonPayVO mjonPayVO) throws Exception {
-		insert("mjonPayDAO.insertPointUse", mjonPayVO);
-		
-	}	
-
-	@SuppressWarnings("unchecked")
-	public List<MjonPayVO> selectPointUseList(MjonPayVO mjonPayVO) throws Exception{
-		return (List<MjonPayVO>)list("mjonPayDAO.selectPointUseList", mjonPayVO);
-	}
-	
-	@SuppressWarnings("unchecked")
-	public MjonPayVO selectPointUseDetail(MjonPayVO mjonPayVO) throws Exception{
-		return (MjonPayVO)select("mjonPayDAO.selectPointUseDetail", mjonPayVO);
-	}
-	
-	public void updatePointUse(MjonPayVO mjonPayVO) throws Exception{
-		update("mjonPayDAO.updatePointUse", mjonPayVO);
-	}
-	
-	public String selectSumPayMoney(String userId) throws Exception{
-		return (String) select("mjonPayDAO.selectSumPayMoney", userId);
-	}
-	
-	public String selectAgentSumPayMoney(String userId) throws Exception{
-		return (String) select("mjonPayDAO.selectAgentSumPayMoney", userId);
-	}
-	
-	public String selectSumPoint(String userId) throws Exception{
-		return (String) select("mjonPayDAO.selectSumPoint", userId);
-	}
-	
-	@SuppressWarnings("unchecked")
-	public List<MjonPayVO> selectPayListForRefund(MjonPayVO mjonPayVO) throws Exception{
-		return (List<MjonPayVO>)list("mjonPayDAO.selectPayListForRefund", mjonPayVO);
-	}
-	
-	public int updateMjonPgStatus(RefundVO refundVO) throws Exception {
-		return update("mjonPayDAO.updateMjonPgStatus", refundVO);
-	}
-
-	@SuppressWarnings("unchecked")
-	public List<MjonPayVO> selectPayDayChart(MjonPayVO mjonPayVO) throws Exception{
-		return (List<MjonPayVO>)list("mjonPayDAO.selectPayDayChart", mjonPayVO);
-	}
-	
-	@SuppressWarnings("unchecked")
-	public List<MjonPayVO> selectPayMonthChart(MjonPayVO mjonPayVO) throws Exception{
-		return (List<MjonPayVO>)list("mjonPayDAO.selectPayMonthChart", mjonPayVO);
-	}
-	
-	@SuppressWarnings("unchecked")
-	public List<MjonPayVO> selectPayDayChartDashboard(MjonPayVO mjonPayVO) throws Exception{
-		return (List<MjonPayVO>)list("mjonPayDAO.selectPayDayChartDashboard", mjonPayVO);
-	}
-	
-	@SuppressWarnings("unchecked")
-	public List<MjonPayVO> selectPayMonthChartDashboard(MjonPayVO mjonPayVO) throws Exception{
-		return (List<MjonPayVO>)list("mjonPayDAO.selectPayMonthChartDashboard", mjonPayVO);
-	}
-	
-	public MjonPayVO selectPayYearChart(MjonPayVO mjonPayVO) throws Exception{
-		return (MjonPayVO)select("mjonPayDAO.selectPayYearChart", mjonPayVO);
-	}
-	
-	public int selectMemerPayCount(String userId) throws Exception{
-		return (int) select("mjonPayDAO.selectMemerPayCount", userId);
-	}
-
-	public int selectPayCountByTid(String tid) throws Exception{
-		return (int) select("mjonPayDAO.selectPayCountByTid", tid);
-	}
-	
-	public MjonPayVO selectPrvMonthUseCash(String mberId) throws Exception{
-		return (MjonPayVO)select("mjonPayDAO.selectPrvMonthUseCash", mberId);
-	}
-	
-	public int updateMjonPgStatusAfterPay(MjonPayVO mjonPayVO) throws Exception {
-		return update("mjonPayDAO.updateMjonPgStatusAfterPay", mjonPayVO);
-	}
-
-	//첫결제 정보 불러오기
-	public MjonPayVO selectFrstPayInfoByUserId(String userId) throws Exception{
-		return (MjonPayVO) select("mjonPayDAO.selectFrstPayInfoByUserId", userId);
-	}
-	
-	//첫결제 충전 포인트 정보 불러오기
-	public MjonPayVO selectFrstPointInfoByUserId(MjonPayVO mjonPayVO) throws Exception{
-		return (MjonPayVO) select("mjonPayDAO.selectFrstPointInfoByUserId", mjonPayVO);
-	}
-	
-	public MjonPayVO selectPayInfoByMoid(String moid) throws Exception{
-		return (MjonPayVO) select("mjonPayDAO.selectPayInfoByMoid", moid);
-	}	
-	
-	public String selectOneYearPayCnt(String userId) throws Exception{
-		return (String)select("mjonPayDAO.selectOneYearPayCnt", userId);
-	}
-	
-	
-	public int selectCashPointSendIdCnt(String userId) throws Exception{
-		return (int) select("mjonPayDAO.selectCashPointSendIdCnt", userId);
-	}
-	
-	public MjonPayVO selectCashPoint(String userId) throws Exception{
-		return (MjonPayVO) select("mjonPayDAO.selectCashPoint", userId);
-	}
-	
-	public void insertMjCashPointSend(MjonPayVO mjonPayVO)  throws Exception{
-		insert("mjonPayDAO.insertMjCashPointSend", mjonPayVO);
-	}
-	
-	public String selectCashPointUniqId(String mberId) throws Exception{
-		return (String)select("mjonPayDAO.selectCashPointUniqId", mberId);
-	}
-	
-	@SuppressWarnings("unchecked")
-	public List<MjonPayVO> selectCashPointSendList(MjonPayVO mjonPayVO) throws Exception{
-		return (List<MjonPayVO>)list("mjonPayDAO.selectCashPointSendList", mjonPayVO);
-	}
-	
-	// 문자 발송단가 할인여부
-	public int selectMsgSalePriceCnt(String userId) throws Exception{
-		return (int) select("mjonPayDAO.selectMsgSalePriceCnt", userId);
-	}
-
-	@SuppressWarnings("unchecked")
-	public List<MjonPayVO> selectUsedCashWithKakaoTotCnt(MjonPayVO mjonPayVO) throws Exception{
-		return (List<MjonPayVO>)list("mjonPayDAO.selectUsedCashWithKakaoTotCnt", mjonPayVO);
-	}
-	
-	@SuppressWarnings("unchecked")
-	public List<MjonPayVO> selectCashInfoList(String userId) throws Exception{
-		return (List<MjonPayVO>)list("mjonPayDAO.selectCashInfoList", userId);
-	}
-	
-	@SuppressWarnings("unchecked")
-	public List<MjonPayVO> selectPointInfoList(String userId) throws Exception{
-		return (List<MjonPayVO>)list("mjonPayDAO.selectPointInfoList", userId);
-	}
-	
-	public String selectPointLatestOnePoint(String userId) {
-		
-		return (String) select("mjonPayDAO.selectPointLatestOnePoint", userId);
-		
-	}
-	
-	//누적 사용금액 조회 (캐시 테이블에서 현재까지 사용된 금액 합산 - 캐시 테이블에서 "-"로 사용된 금액만 합산)
-	public String selectTotalSumCashForAfterPay(String userId) throws Exception{
-		
-		String result = "";
-		
-		try {
-			
-			result = (String) select("mjonPayDAO.selectTotalSumCashForAfterPay", userId);
-			
-		} catch (Exception e) {
-			System.out.println("selectTotalSumCashForAfterPay DAO Error!!! " + e);
-		}
-		
-		return result;
-		
-	}
-	
-	
-	//누적 사용 포인트 조회 (포인트 테이블에서 현재까지 사용된 포인트 합산  - 회원 포인트 정보 업데이트시 사용되는 쿼리 이용)
-	public String selectTotalSumPointForAfterPay(String userId) throws Exception{
-		
-		String result = "";
-		
-		try {
-			
-			result = (String) select("mjonPayDAO.selectTotalSumPointForAfterPay", userId);
-			
-		} catch (Exception e) {
-			System.out.println("selectTotalSumPointForAfterPay DAO Error!!! " + e);
-		}
-		
-		return result;
-		
-	}
-	
-	//누적 납부금액 조회 (후불회원이 사용금액을 실 납부한 금액 합산 - 미납 금액 제외한 총 합산 금액)
-	public String selectTotSumPaymentAfterPay(String userId) throws Exception{
-		
-		String result = "";
-		
-		try {
-			
-			result = (String) select("mjonPayDAO.selectTotSumPaymentAfterPay", userId);
-			
-		} catch (Exception e) {
-			System.out.println("selectTotSumPaymentAfterPay DAO Error!!! " + e);
-		}
-		
-		return result;
-		
-	}
-	
-}
+package itn.let.mjo.pay.service.impl;
+
+import java.util.List;
+
+import org.springframework.stereotype.Repository;
+
+import egovframework.rte.psl.dataaccess.EgovAbstractDAO;
+import itn.let.mjo.pay.service.MjonPayVO;
+import itn.let.mjo.pay.service.MjonVaMsgLogVO;
+import itn.let.mjo.pay.service.RefundVO;
+import itn.let.mjo.pay.service.StVcVO;
+@Repository("mjonPayDAO")
+public class MjonPayDAO extends EgovAbstractDAO {
+
+	@SuppressWarnings("unchecked")
+	public List<MjonPayVO> selectPayList(MjonPayVO mjonPayVO) throws Exception{
+		return (List<MjonPayVO>)list("mjonPayDAO.selectPayList", mjonPayVO);
+	}
+
+	@SuppressWarnings("unchecked")
+	public List<MjonPayVO> selectCashList(MjonPayVO mjonPayVO) throws Exception{
+		return (List<MjonPayVO>)list("mjonPayDAO.selectCashList", mjonPayVO);
+	}
+	
+	@SuppressWarnings("unchecked")
+	public List<MjonPayVO> selectCashRemainList(MjonPayVO mjonPayVO) throws Exception{
+		return (List<MjonPayVO>)list("mjonPayDAO.selectCashRemainList", mjonPayVO);
+	}	
+	
+	@SuppressWarnings("unchecked")
+	public List<MjonPayVO> selectCashRemainNewList(MjonPayVO mjonPayVO) throws Exception{
+		return (List<MjonPayVO>)list("mjonPayDAO.selectCashRemainNewList", mjonPayVO);
+	}	
+	
+	public int selectCashRemainNewCnt(MjonPayVO mjonPayVO) throws Exception{
+		return (int) select("mjonPayDAO.selectCashRemainNewCnt", mjonPayVO);
+	}
+	
+	
+	@SuppressWarnings("unchecked")
+	public List<MjonPayVO> selectMemberCashList(MjonPayVO mjonPayVO) throws Exception{
+		return (List<MjonPayVO>)list("mjonPayDAO.selectMemberCashList", mjonPayVO);
+	}
+
+	public MjonPayVO selectCashVO(MjonPayVO mjonPayVO) throws Exception{
+		return (MjonPayVO)select("mjonPayDAO.selectCashVO", mjonPayVO);
+	}
+
+	public void insertCash(MjonPayVO mjonPayVO) throws Exception{
+		
+		try {
+		
+			insert("mjonPayDAO.insertCash", mjonPayVO);
+			
+		} catch (Exception e) {
+			
+			e.printStackTrace();
+		}
+		
+		
+	}
+
+	public void updateCash(MjonPayVO mjonPayVO) throws Exception{
+		update("mjonPayDAO.updateCash", mjonPayVO);
+	}
+
+	public void deleteCash(MjonPayVO mjonPayVO) throws Exception{
+		update("mjonPayDAO.deleteCash", mjonPayVO);
+	}
+
+	public void insertMjPg(MjonPayVO mjonPayVO)  throws Exception{
+		insert("mjonPayDAO.insertMjPg", mjonPayVO);
+	}
+
+	public void insertMjTax(MjonPayVO mjonPayVO) throws Exception {
+		insert("mjonPayDAO.insertMjTax", mjonPayVO);
+	}
+
+	public void updateMemberCash(MjonPayVO mjonPayVO) throws Exception {
+		insert("mjonPayDAO.updateMemberCash", mjonPayVO);
+  	}
+
+	public void updateMemberPoint(MjonPayVO mjonPayVO) throws Exception {
+		insert("mjonPayDAO.updateMemberPoint", mjonPayVO);
+	}
+
+	public void insertPoint(MjonPayVO mjonPayVO) throws Exception {
+		insert("mjonPayDAO.insertPoint", mjonPayVO);
+		
+	}
+
+	public MjonPayVO selectPayVO(MjonPayVO mjonPayVO) throws Exception{
+		return (MjonPayVO)select("mjonPayDAO.selectPayVO", mjonPayVO);
+	}
+
+	@SuppressWarnings("unchecked")
+	public List<MjonPayVO> selectPointList(MjonPayVO mjonPayVO) throws Exception{
+		return (List<MjonPayVO>)list("mjonPayDAO.selectPointList", mjonPayVO);
+	}
+
+	// 가상계좌(세틀뱅크) 입금내역 조회 by pk
+	public StVcVO selectVacsByPk(StVcVO stVcVO) throws Exception{
+		return (StVcVO)select("mjonPayDAO.selectVacsByPk", stVcVO);
+	}
+	
+	// 가상계좌(세틀뱅크) 회원ID 조회 by 입금자명
+	public StVcVO selectMberIdByIacctNm(StVcVO stVcVO) throws Exception{
+		return (StVcVO)select("mjonPayDAO.selectMberIdByIacctNm", stVcVO);
+	}
+	
+	// 가상계좌(세틀뱅크) 충전내역 요청여부 by 가상계좌입금정보
+	public StVcVO selectVaChargeByVc(StVcVO stVcVO) throws Exception{
+		return (StVcVO)select("mjonPayDAO.selectVaChargeByVc", stVcVO);
+	}
+	
+	// 가상계좌(세틀뱅크) 입금 자동충전 충전내역 등록
+	public void insertVaCharge(StVcVO stVcVO) throws Exception{
+		insert("mjonPayDAO.insertVaCharge", stVcVO);
+	}
+	
+	// 가상계좌(세틀뱅크) 입금 자동충전 충전내역 수정
+	public void updateVaCharge(StVcVO stVcVO) throws Exception{
+		update("mjonPayDAO.updateVaCharge", stVcVO);
+	}
+
+	public MjonPayVO selectPointVO(MjonPayVO mjonPayVO) throws Exception{
+		return (MjonPayVO)select("mjonPayDAO.selectPointVO", mjonPayVO);
+	}
+
+	public void deletePoint(MjonPayVO mjonPayVO) throws Exception{
+		update("mjonPayDAO.deletePoint", mjonPayVO);
+	}
+
+	@SuppressWarnings("unchecked")
+	public List<MjonPayVO> selectUsedCashTotCnt(MjonPayVO mjonPayVO) throws Exception{
+		return (List<MjonPayVO>)list("mjonPayDAO.selectUsedCashTotCnt", mjonPayVO);
+	}
+	
+	//전용계좌 문자발송 로그 기록 입력
+	public int insertVaMsgLogInfo(MjonVaMsgLogVO mjonVaMsgLogVO) throws Exception{
+		return update("mjonPayDAO.insertVaMsgLogInfo", mjonVaMsgLogVO);
+	}
+	
+	//일일 전용계좌 문자발성 건수 불러오기
+	public MjonVaMsgLogVO selectMyAcctSendCnt(MjonVaMsgLogVO mjonVaMsgLogVO) throws Exception {
+		return (MjonVaMsgLogVO) select("mjonPayDAO.selectMyAcctSendCnt", mjonVaMsgLogVO);
+	}
+
+	// 모바일(KG 모빌리언스) 인서트
+	public void insertKgm(MjonPayVO mjonPayVO) throws Exception{
+		insert("mjonPayDAO.insertKgm", mjonPayVO);
+	}	
+	
+	// 모바일(KG 모빌리언스) VO
+	public MjonPayVO selectKgmVO(MjonPayVO mjonPayVO) throws Exception{
+		return (MjonPayVO)select("mjonPayDAO.selectKgmVO", mjonPayVO);
+	}	
+	
+	public void insertPointUse(MjonPayVO mjonPayVO) throws Exception {
+		insert("mjonPayDAO.insertPointUse", mjonPayVO);
+		
+	}	
+
+	@SuppressWarnings("unchecked")
+	public List<MjonPayVO> selectPointUseList(MjonPayVO mjonPayVO) throws Exception{
+		return (List<MjonPayVO>)list("mjonPayDAO.selectPointUseList", mjonPayVO);
+	}
+	
+	@SuppressWarnings("unchecked")
+	public MjonPayVO selectPointUseDetail(MjonPayVO mjonPayVO) throws Exception{
+		return (MjonPayVO)select("mjonPayDAO.selectPointUseDetail", mjonPayVO);
+	}
+	
+	public void updatePointUse(MjonPayVO mjonPayVO) throws Exception{
+		update("mjonPayDAO.updatePointUse", mjonPayVO);
+	}
+	
+	public String selectSumPayMoney(String userId) throws Exception{
+		return (String) select("mjonPayDAO.selectSumPayMoney", userId);
+	}
+	
+	public String selectAgentSumPayMoney(String userId) throws Exception{
+		return (String) select("mjonPayDAO.selectAgentSumPayMoney", userId);
+	}
+	
+	public String selectSumPoint(String userId) throws Exception{
+		return (String) select("mjonPayDAO.selectSumPoint", userId);
+	}
+	
+	@SuppressWarnings("unchecked")
+	public List<MjonPayVO> selectPayListForRefund(MjonPayVO mjonPayVO) throws Exception{
+		return (List<MjonPayVO>)list("mjonPayDAO.selectPayListForRefund", mjonPayVO);
+	}
+	
+	public int updateMjonPgStatus(RefundVO refundVO) throws Exception {
+		return update("mjonPayDAO.updateMjonPgStatus", refundVO);
+	}
+
+	@SuppressWarnings("unchecked")
+	public List<MjonPayVO> selectPayDayChart(MjonPayVO mjonPayVO) throws Exception{
+		return (List<MjonPayVO>)list("mjonPayDAO.selectPayDayChart", mjonPayVO);
+	}
+	
+	@SuppressWarnings("unchecked")
+	public List<MjonPayVO> selectPayMonthChart(MjonPayVO mjonPayVO) throws Exception{
+		return (List<MjonPayVO>)list("mjonPayDAO.selectPayMonthChart", mjonPayVO);
+	}
+	
+	@SuppressWarnings("unchecked")
+	public List<MjonPayVO> selectPayDayChartDashboard(MjonPayVO mjonPayVO) throws Exception{
+		return (List<MjonPayVO>)list("mjonPayDAO.selectPayDayChartDashboard", mjonPayVO);
+	}
+	
+	@SuppressWarnings("unchecked")
+	public List<MjonPayVO> selectPayMonthChartDashboard(MjonPayVO mjonPayVO) throws Exception{
+		return (List<MjonPayVO>)list("mjonPayDAO.selectPayMonthChartDashboard", mjonPayVO);
+	}
+	
+	public MjonPayVO selectPayYearChart(MjonPayVO mjonPayVO) throws Exception{
+		return (MjonPayVO)select("mjonPayDAO.selectPayYearChart", mjonPayVO);
+	}
+	
+	public int selectMemerPayCount(String userId) throws Exception{
+		return (int) select("mjonPayDAO.selectMemerPayCount", userId);
+	}
+
+	public int selectPayCountByTid(String tid) throws Exception{
+		return (int) select("mjonPayDAO.selectPayCountByTid", tid);
+	}
+	
+	public MjonPayVO selectPrvMonthUseCash(String mberId) throws Exception{
+		return (MjonPayVO)select("mjonPayDAO.selectPrvMonthUseCash", mberId);
+	}
+	
+	public int updateMjonPgStatusAfterPay(MjonPayVO mjonPayVO) throws Exception {
+		return update("mjonPayDAO.updateMjonPgStatusAfterPay", mjonPayVO);
+	}
+
+	//첫결제 정보 불러오기
+	public MjonPayVO selectFrstPayInfoByUserId(String userId) throws Exception{
+		return (MjonPayVO) select("mjonPayDAO.selectFrstPayInfoByUserId", userId);
+	}
+	
+	//첫결제 충전 포인트 정보 불러오기
+	public MjonPayVO selectFrstPointInfoByUserId(MjonPayVO mjonPayVO) throws Exception{
+		return (MjonPayVO) select("mjonPayDAO.selectFrstPointInfoByUserId", mjonPayVO);
+	}
+	
+	public MjonPayVO selectPayInfoByMoid(String moid) throws Exception{
+		return (MjonPayVO) select("mjonPayDAO.selectPayInfoByMoid", moid);
+	}	
+	
+	public String selectOneYearPayCnt(String userId) throws Exception{
+		return (String)select("mjonPayDAO.selectOneYearPayCnt", userId);
+	}
+	
+	
+	public int selectCashPointSendIdCnt(String userId) throws Exception{
+		return (int) select("mjonPayDAO.selectCashPointSendIdCnt", userId);
+	}
+	
+	public MjonPayVO selectCashPoint(String userId) throws Exception{
+		return (MjonPayVO) select("mjonPayDAO.selectCashPoint", userId);
+	}
+	
+	public void insertMjCashPointSend(MjonPayVO mjonPayVO)  throws Exception{
+		insert("mjonPayDAO.insertMjCashPointSend", mjonPayVO);
+	}
+	
+	public String selectCashPointUniqId(String mberId) throws Exception{
+		return (String)select("mjonPayDAO.selectCashPointUniqId", mberId);
+	}
+	
+	@SuppressWarnings("unchecked")
+	public List<MjonPayVO> selectCashPointSendList(MjonPayVO mjonPayVO) throws Exception{
+		return (List<MjonPayVO>)list("mjonPayDAO.selectCashPointSendList", mjonPayVO);
+	}
+	
+	// 문자 발송단가 할인여부
+	public int selectMsgSalePriceCnt(String userId) throws Exception{
+		return (int) select("mjonPayDAO.selectMsgSalePriceCnt", userId);
+	}
+
+	@SuppressWarnings("unchecked")
+	public List<MjonPayVO> selectUsedCashWithKakaoTotCnt(MjonPayVO mjonPayVO) throws Exception{
+		return (List<MjonPayVO>)list("mjonPayDAO.selectUsedCashWithKakaoTotCnt", mjonPayVO);
+	}
+	
+	@SuppressWarnings("unchecked")
+	public List<MjonPayVO> selectCashInfoList(String userId) throws Exception{
+		return (List<MjonPayVO>)list("mjonPayDAO.selectCashInfoList", userId);
+	}
+	
+	@SuppressWarnings("unchecked")
+	public List<MjonPayVO> selectPointInfoList(String userId) throws Exception{
+		return (List<MjonPayVO>)list("mjonPayDAO.selectPointInfoList", userId);
+	}
+	
+	public String selectPointLatestOnePoint(String userId) {
+		
+		return (String) select("mjonPayDAO.selectPointLatestOnePoint", userId);
+		
+	}
+	
+	//누적 사용금액 조회 (캐시 테이블에서 현재까지 사용된 금액 합산 - 캐시 테이블에서 "-"로 사용된 금액만 합산)
+	public String selectTotalSumCashForAfterPay(String userId) throws Exception{
+		
+		String result = "";
+		
+		try {
+			
+			result = (String) select("mjonPayDAO.selectTotalSumCashForAfterPay", userId);
+			
+		} catch (Exception e) {
+			System.out.println("selectTotalSumCashForAfterPay DAO Error!!! " + e);
+		}
+		
+		return result;
+		
+	}
+	
+	
+	//누적 사용 포인트 조회 (포인트 테이블에서 현재까지 사용된 포인트 합산  - 회원 포인트 정보 업데이트시 사용되는 쿼리 이용)
+	public String selectTotalSumPointForAfterPay(String userId) throws Exception{
+		
+		String result = "";
+		
+		try {
+			
+			result = (String) select("mjonPayDAO.selectTotalSumPointForAfterPay", userId);
+			
+		} catch (Exception e) {
+			System.out.println("selectTotalSumPointForAfterPay DAO Error!!! " + e);
+		}
+		
+		return result;
+		
+	}
+	
+	//누적 납부금액 조회 (후불회원이 사용금액을 실 납부한 금액 합산 - 미납 금액 제외한 총 합산 금액)
+	public String selectTotSumPaymentAfterPay(String userId) throws Exception{
+		
+		String result = "";
+		
+		try {
+			
+			result = (String) select("mjonPayDAO.selectTotSumPaymentAfterPay", userId);
+			
+		} catch (Exception e) {
+			System.out.println("selectTotSumPaymentAfterPay DAO Error!!! " + e);
+		}
+		
+		return result;
+		
+	}
+	
+}
src/main/resources/egovframework/spring/com/context-security.xml
--- src/main/resources/egovframework/spring/com/context-security.xml
+++ src/main/resources/egovframework/spring/com/context-security.xml
@@ -1,94 +1,94 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xmlns:egov-security="http://www.egovframe.go.kr/schema/egov-security"
-	xmlns:security="http://www.springframework.org/schema/security"
-	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
-        http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-4.2.xsd
-		http://www.egovframe.go.kr/schema/egov-security http://www.egovframe.go.kr/schema/egov-security/egov-security-3.7.xsd">
-
-    <security:http pattern="/css/**" security="none"/>
-	<security:http pattern="/html/**" security="none"/>
-    <security:http pattern="/images/**" security="none"/>
- 	<security:http pattern="/js/**" security="none"/>
- 	<security:http pattern="/resource/**" security="none"/>
- 	<security:http pattern="\A/WEB-INF/jsp/.*\Z" request-matcher="regex" security="none"/>
- 	
-    <egov-security:config id="securityConfig"
-        loginUrl="/uat/uia/actionMain.do"
-        logoutSuccessUrl="/uat/uia/actionMain.do"
-        loginFailureUrl="/uat/uia/actionSecurityLogin.do?login_error=1"
-        accessDeniedUrl="/sec/ram/accessDenied.do"		
-		
-        dataSource="egov.dataSource"
-        			
-        jdbcUsersByUsernameQuery="SELECT USER_ID, ESNTL_ID AS PASSWORD, 1 ENABLED, USER_NM, USER_ZIP, 
-        							USER_ADRES, USER_EMAIL, USER_SE,  '-' ORGNZT_ID, ESNTL_ID, MBTLNUM AS MOBLPHONNO,
-        							'-' ORGNZT_NM, AUTHOR_CODE AS AUTHORITY, DEPT
-        							FROM COMVNUSERMASTER A 
-        							INNER JOIN LETTNEMPLYRSCRTYESTBS B ON A.ESNTL_ID = B.SCRTY_DTRMN_TRGET_ID 
-        							WHERE CONCAT(USER_SE, USER_ID) = ?"
-        
-        jdbcAuthoritiesByUsernameQuery="SELECT A.SCRTY_DTRMN_TRGET_ID USER_ID, A.AUTHOR_CODE AUTHORITY 
-        							FROM LETTNEMPLYRSCRTYESTBS A, COMVNUSERMASTER B 
-        							WHERE A.SCRTY_DTRMN_TRGET_ID = B.ESNTL_ID AND B.USER_ID = ?"
-        							
-        jdbcMapClass="itn.let.uat.uia.service.impl.EgovSessionMapping"
-
-        requestMatcherType="regex"
-        hash="plaintext"
-        hashBase64="false"
-		
-		concurrentMaxSessons="999"
-		concurrentExpiredUrl="/"
-
-		defaultTargetUrl="/uat/uia/actionMain.do"
-		
-    />
-
-<!--원 소스 -->
-<!-- defaultTargetUrl="/uat/uia/actionMain.do" -->
-
- 	<!--  sqlHierarchicalRoles="
-       		SELECT a.CHLDRN_ROLE child, a.PARNTS_ROLE parent 
-       		FROM LETTNROLES_HIERARCHY a LEFT JOIN LETTNROLES_HIERARCHY b on (a.CHLDRN_ROLE = b.PARNTS_ROLE)" -->
-       		
-    <egov-security:secured-object-config id="securedObjectConfig"
-    	roleHierarchyString="
-			ROLE_ADMIN > ROLE_USER_MEMBER
-			ROLE_USER_MEMBER > ROLE_ANONYMOUS"
-			
-       sqlRolesAndUrl="
-       		SELECT a.ROLE_PTTRN url, b.AUTHOR_CODE authority 
-       		FROM LETTNROLEINFO a, LETTNAUTHORROLERELATE b 
-       		WHERE a.ROLE_CODE = b.ROLE_CODE AND a.ROLE_TY = 'url'  
-       		ORDER BY a.ROLE_SORT"
-       		
-       sqlRolesAndMethod="
-       		SELECT a.ROLE_PTTRN method, b.AUTHOR_CODE authority 
-       		FROM LETTNROLEINFO a, LETTNAUTHORROLERELATE b 
-       		WHERE a.ROLE_CODE = b.ROLE_CODE AND a.ROLE_TY = 'method'
-       		ORDER BY a.ROLE_SORT"
-       
-       sqlRolesAndPointcut="
-       		SELECT a.ROLE_PTTRN pointcut, b.AUTHOR_CODE authority 
-       		FROM LETTNROLEINFO a, LETTNAUTHORROLERELATE b 
-       		WHERE a.ROLE_CODE = b.ROLE_CODE AND a.ROLE_TY = 'pointcut'
-       		ORDER BY a.ROLE_SORT"
-
-       sqlRegexMatchedRequestMapping="
-       		SELECT a.resource_pattern uri, b.authority authority 
-       		FROM LETTNROLEINFO a, LETTNAUTHORROLERELATE b 
-       		WHERE a.ROLE_CODE = b.ROLE_CODE AND a.ROLE_TY = 'regex'
-       		ORDER BY a.ROLE_SORT"
-       
-    />
-
-	<egov-security:initializer id="initializer" supportMethod="true" supportPointcut="false" />
-
-    <!-- URL에 세미콜론(semicolon)허용 여부(기본값/false) -->
-	<bean id="egovStrictHttpFirewall" class="org.springframework.security.web.firewall.StrictHttpFirewall">
-		<property name="allowSemicolon" value="true"/>
-	</bean>
-	<security:http-firewall ref="egovStrictHttpFirewall"/>
-		
-</beans>
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xmlns:egov-security="http://www.egovframe.go.kr/schema/egov-security"
+	xmlns:security="http://www.springframework.org/schema/security"
+	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
+        http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-4.2.xsd
+		http://www.egovframe.go.kr/schema/egov-security http://www.egovframe.go.kr/schema/egov-security/egov-security-3.7.xsd">
+
+    <security:http pattern="/css/**" security="none"/>
+	<security:http pattern="/html/**" security="none"/>
+    <security:http pattern="/images/**" security="none"/>
+ 	<security:http pattern="/js/**" security="none"/>
+ 	<security:http pattern="/resource/**" security="none"/>
+ 	<security:http pattern="\A/WEB-INF/jsp/.*\Z" request-matcher="regex" security="none"/>
+ 	
+    <egov-security:config id="securityConfig"
+        loginUrl="/uat/uia/actionMain.do"
+        logoutSuccessUrl="/uat/uia/actionMain.do"
+        loginFailureUrl="/uat/uia/actionSecurityLogin.do?login_error=1"
+        accessDeniedUrl="/sec/ram/accessDenied.do"		
+		
+        dataSource="egov.dataSource"
+        			
+        jdbcUsersByUsernameQuery="SELECT USER_ID, ESNTL_ID AS PASSWORD, 1 ENABLED, USER_NM, USER_ZIP, 
+        							USER_ADRES, USER_EMAIL, USER_SE,  '-' ORGNZT_ID, ESNTL_ID, MBTLNUM AS MOBLPHONNO,
+        							'-' ORGNZT_NM, AUTHOR_CODE AS AUTHORITY, DEPT
+        							FROM COMVNUSERMASTER A 
+        							INNER JOIN LETTNEMPLYRSCRTYESTBS B ON A.ESNTL_ID = B.SCRTY_DTRMN_TRGET_ID 
+        							WHERE CONCAT(USER_SE, USER_ID) = ?"
+        
+        jdbcAuthoritiesByUsernameQuery="SELECT A.SCRTY_DTRMN_TRGET_ID USER_ID, A.AUTHOR_CODE AUTHORITY 
+        							FROM LETTNEMPLYRSCRTYESTBS A, COMVNUSERMASTER B 
+        							WHERE A.SCRTY_DTRMN_TRGET_ID = B.ESNTL_ID AND B.USER_ID = ?"
+        							
+        jdbcMapClass="itn.let.uat.uia.service.impl.EgovSessionMapping"
+
+        requestMatcherType="regex"
+        hash="plaintext"
+        hashBase64="false"
+		
+		concurrentMaxSessons="999"
+		concurrentExpiredUrl="/"
+
+		defaultTargetUrl="/uat/uia/actionMain.do"
+		
+    />
+
+<!--원 소스 -->
+<!-- defaultTargetUrl="/uat/uia/actionMain.do" -->
+
+ 	<!--  sqlHierarchicalRoles="
+       		SELECT a.CHLDRN_ROLE child, a.PARNTS_ROLE parent 
+       		FROM LETTNROLES_HIERARCHY a LEFT JOIN LETTNROLES_HIERARCHY b on (a.CHLDRN_ROLE = b.PARNTS_ROLE)" -->
+       		
+    <egov-security:secured-object-config id="securedObjectConfig"
+    	roleHierarchyString="
+			ROLE_ADMIN > ROLE_USER_MEMBER
+			ROLE_USER_MEMBER > ROLE_ANONYMOUS"
+			
+       sqlRolesAndUrl="
+       		SELECT a.ROLE_PTTRN url, b.AUTHOR_CODE authority 
+       		FROM LETTNROLEINFO a, LETTNAUTHORROLERELATE b 
+       		WHERE a.ROLE_CODE = b.ROLE_CODE AND a.ROLE_TY = 'url'  
+       		ORDER BY a.ROLE_SORT"
+       		
+       sqlRolesAndMethod="
+       		SELECT a.ROLE_PTTRN method, b.AUTHOR_CODE authority 
+       		FROM LETTNROLEINFO a, LETTNAUTHORROLERELATE b 
+       		WHERE a.ROLE_CODE = b.ROLE_CODE AND a.ROLE_TY = 'method'
+       		ORDER BY a.ROLE_SORT"
+       
+       sqlRolesAndPointcut="
+       		SELECT a.ROLE_PTTRN pointcut, b.AUTHOR_CODE authority 
+       		FROM LETTNROLEINFO a, LETTNAUTHORROLERELATE b 
+       		WHERE a.ROLE_CODE = b.ROLE_CODE AND a.ROLE_TY = 'pointcut'
+       		ORDER BY a.ROLE_SORT"
+
+       sqlRegexMatchedRequestMapping="
+       		SELECT a.resource_pattern uri, b.authority authority 
+       		FROM LETTNROLEINFO a, LETTNAUTHORROLERELATE b 
+       		WHERE a.ROLE_CODE = b.ROLE_CODE AND a.ROLE_TY = 'regex'
+       		ORDER BY a.ROLE_SORT"
+       
+    />
+
+	<egov-security:initializer id="initializer" supportMethod="true" supportPointcut="false" />
+
+    <!-- URL에 세미콜론(semicolon)허용 여부(기본값/false) -->
+	<bean id="egovStrictHttpFirewall" class="org.springframework.security.web.firewall.StrictHttpFirewall">
+		<property name="allowSemicolon" value="true"/>
+	</bean>
+	<security:http-firewall ref="egovStrictHttpFirewall"/>
+		
+</beans>
src/main/webapp/WEB-INF/jsp/cop/bbs/EgovNoticeRegist.jsp
--- src/main/webapp/WEB-INF/jsp/cop/bbs/EgovNoticeRegist.jsp
+++ src/main/webapp/WEB-INF/jsp/cop/bbs/EgovNoticeRegist.jsp
@@ -1,483 +1,483 @@
-<%--
-  Class Name : EgovNoticeRegist.jsp
-  Description : 게시물  생성 화면
-  Modification Information
- 
-      수정일         수정자                   수정내용
-    -------    --------    ---------------------------
-     2009.03.24   이삼섭              최초 생성
-     2011.08.31   JJY       경량환경 버전 생성
- 
-    author   : 공통서비스 개발팀 이삼섭
-    since    : 2009.03.24
---%>
-<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
-<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
-<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
-<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
-<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
-<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator"%>
-<%@ taglib prefix="ckeditor" uri="http://ckeditor.com"%>
-<!DOCTYPE html>
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<meta http-equiv="content-language" content="ko">
-<script type="text/javascript" src="<c:url value='/js/EgovBBSMng.js' />"></script>
-<script type="text/javascript" src="<c:url value='/js/EgovMultiFileItn.js'/>"></script> <!-- 파일첨부, 썸네일이미지 있으면 미리보기 -->
-<%-- <script type="text/javascript" src="<c:url value='/js/EgovMultiFile.js'/>"></script> --%>
-<script type="text/javascript" src="<c:url value='/js/EgovCalPopup.js'/>"></script>
-<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
-<validator:javascript formName="board" staticJavascript="false" xhtml="true" cdata="false" />
-<script type="text/javascript">
-$( document ).ready(function() {
-});
-
-function goList() {
-	document.searchForm.submit(); 
-}
-
-function fn_egov_regist_notice() {
-	CKEDITOR.instances.nttCn.updateElement();
-	if (!validateBoard(document.board))
-		return;
-
-	//금지어 확인
-	/* var prohibitCheck = false;
-	var form = document.board ;
-	form.checkProhibitCn.value = form.nttSj.value + form.nttCn.value ; 
-	var data = new FormData(form);
-	$.ajax({
-	type: "POST",
-	     url: "/uss/ion/cnf/prohiCheckAjax.do",
-	     async:false,
-	     data: data,
-	     dataType:'json',
-	     processData: false,
-	     contentType: false,
-	     cache: false,
-	     timeout: 600000,
-	     success: function (returnData, status) {
-	     	if(status == 'success'){
-		    	if(returnData.result == 'fail'){
-		        }else if(returnData.result == 'auth_fail'){
-		        }else if(returnData.result =='success'){
-		        	if(null != returnData.prohibitVO.prohibitCn){
-		        		alert( returnData.prohibitVO.prohibitCn + " 단어는 금지어로 등록되어 있는 단어입니다." );
-		        		prohibitCheck = true;
-		        	}
-	           	}
-           }else{
-	           	//alert("등록에 실패하였습니다.");
-           }
-       },
-       error: function (e) {
-           //alert("등록에 실패하였습니다.");
-       }
-	});
-  
-	if(prohibitCheck){
-		return;
-	} */
-	
-	<c:if test="${bdMstr.bbsId == 'BBSMSTR_000000000731' }"> 
-			{
-				if($('#ntceBgndeYYYMMDD').val() == ''){
-					alert(" 시작일은 필수입니다.");
-					return;
-				}
-				if($('#ntceEnddeYYYMMDD').val() == ''){
-					alert(" 종료일은 필수입니다.");
-					return;
-				}
-				
-				var iChkBeginDe = Number(($('#ntceBgndeYYYMMDD').val()+$('#ntceBgndeHH').val()+$('#ntceBgndeMM').val()).replaceAll("-","")   );
-				var iChkEndDe =  Number(($('#ntceEnddeYYYMMDD').val()+$('#ntceEnddeHH').val()+$('#ntceEnddeMM').val()).replaceAll("-","")   );
-
-				if(iChkBeginDe > iChkEndDe || iChkEndDe < iChkBeginDe ){
-					alert("게시시작일자는 게시종료일자 보다 클수 없고,\n게시종료일자는 게시시작일자 보다 작을수 없습니다. ");
-					return;
-				}
-				$('#ntceBgnde').val(iChkBeginDe) ;
-				$('#ntceEndde').val(iChkEndDe) ;
-			}
-	</c:if>
-	
-	if (confirm('<spring:message code="common.regist.msg" />')) {
-		goSave();
-	}
-}
-
-function goList() {
-	document.searchForm.action = "<c:url value='/cop/bbs/selectBoardList.do'/>";
-	document.searchForm.submit();
-}
-
-function fn_egov_regist_preview() {
-	var PCC_window = window.open('', 'PCCV3Window', 'width=850, height=570, resizable=1, scrollbars=yes, status=0, titlebar=0, toolbar=0, left=350, top=50' );
-	
-	var previewImgs = "";
-	var i = 0;
-	
-	$("#DIV_IMG_VIEW").find("img").each(function() {
-		previewImgs += $(this).get(0).src + "^";
-		i++;
-	});
-	
-	document.board.previewImgs.value = previewImgs;
-	document.board.action = "<c:url value='/cop/bbs/bbsPreview.do'/>";
-	document.board.target = "PCCV3Window";
-	document.board.submit();
-}
-</script>
-<title><c:out value='${bdMstr.bbsNm}' /> - 글 등록</title>
-<style>
-.uploaded_obj{width: 100%;}
-</style>
-</head>
-<body>
-	<form:form commandName="searchForm" name="searchForm" method="get" action="">
-		<input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}'/>" />
-		<input name="searchCnd" type="hidden" value="<c:out value='${searchVO.searchCnd}'/>" />
-		<input name="searchWrd" type="hidden" value="<c:out value='${searchVO.searchWrd}'/>" />
-		<input name="bbsId" type="hidden" value="<c:out value='${searchVO.bbsId}'/>" />
-	</form:form>
-			
-	<form:form commandName="board" name="board" method="post" enctype="multipart/form-data">
-	<input type="hidden" name="pageIndex" value="<c:out value='${searchVO.pageIndex}'/>" />
-	<input type="hidden" name="searchCnd" value="<c:out value='${searchVO.searchCnd}'/>" />
-	<input type="hidden" name="searchWrd" value="<c:out value='${searchVO.searchWrd}'/>" />
-	<input type="hidden" name="bbsId" value="<c:out value='${bdMstr.bbsId}'/>" />
-	<input type="hidden" name="previewImgs" value="" />
-	<input type="hidden" name="checkProhibitCn" value="" />
-	<input type="hidden" name="siteId" value="<c:out value='${bdMstr.siteId}'/>"  />
-	<input type="hidden" name="pageType" id="pageType" value="insert" />
-	
-	<input id="ntceBgnde" name="ntceBgnde" type="hidden" value="">
-	<input id="ntceEndde" name="ntceEndde" type="hidden" value="">
-	
-	<!-- 드래그앤 드롭 파라미터 -->
-	<input type="hidden" name="limitcount" value="${bdMstr.posblAtchFileNumber}" />
-	<div class="contWrap">
-		<div class="pageTitle">
-			<div class="pageIcon"><img src="/pb/img/pageTitIcon4.png" alt=""></div>
-			<h2 class="titType1 c_222222 fwBold"><c:out value='${bdMstr.bbsNm}' />- 글 등록  (${bdMstr.menuNm})</h2>
-			<p class="tType6 c_999999">게시판 글을 생성/수정 할 수 있습니다.</p>
-		</div>
-		<div class="pageCont">
-			<table class="tbType2">
-				<colgroup>
-					<col style="width: 20%">
-					<col style="width: 80%">
-				</colgroup>
-				<tbody>
-					<c:if test="${Transfer}">
-						<tr>
-							<th>
-								<label for="secretAt">임시수정</label>
-							</th>
-							<td>
-								등록일 :
-								<input style="width: 10%;" id="frstRegisterPnttm" name="frstRegisterPnttm" title="제목" type="text" value="${board.frstRegisterPnttm}">
-								2000-01-05 (형식)
-								<br>
-								총 
-								<input style="width: 10%;" id="inqireCo" name="inqireCo" title="제목" type="text" value="${board.inqireCo}">
-								123 (형식)
-								<br>
-								등록자 : 
-								<input style="width: 10%;" id="ntcrNm" name="ntcrNm" title="제목" type="text" value="${board.ntcrNm}">
-								아무개 (형식)
-							</td>
-						</tr>
-						</c:if>
-					<tr>
-						<th><span class="reqArea">
-							<span class="reqArea">${bdMstr.bbsTyCode eq 'BBST07' ? "항목" : bdMstr.menuNo eq '9510000' ? "질문" : "제목"}</span>
-							</span>
-							<c:out value="${msgNttSj}" />
-						</th>
-						<td colspan="3">
-							<form:input path="nttSj" title="${msgNttSj}" />
-							<form:errors path="nttSj" />
-						</td>
-					</tr>
-					<tr>
-						<th><span class="reqArea">
-							${brdMstrVO.menuNo eq '9510000' ? "답변" : "내용"}
-						</span></th>
-						<td colspan="3">
-							<form:textarea path="nttCn" class="textarea" cols="500" rows="20" />
-							<ckeditor:replace replace="nttCn" basePath="${pageContext.request.contextPath}/html/egovframework/com/cmm/utl/ckeditor/" />
-							<form:errors path="nttCn" />
-						</td>
-					</tr>
-					<c:if test="${'BBSMSTR_000000000731' eq bdMstr.bbsId }"><!-- 이벤트 게시판 -->
-					<tr>
-						<th><span class="reqArea">기간</span></th>
-						<td colspan="3">
-							<input type="hidden" name="cal_url" id="cal_url" value="/sym/cmm/EgovNormalCalPopup.do">
-						    <input style="width:auto;" type="text" class="date_format" name="ntceBgndeYYYMMDD" id="ntceBgndeYYYMMDD" size="4" maxlength="4" readonly="">
-						    <a href="#" onclick="javascript:fn_egov_NormalCalendar(document.forms.board, document.forms.board.ntceBgndeYYYMMDD);">
-						   	 	<input type="button" class="calBtn">
-					    	</a>
-							<select id="ntceBgndeHH" name="ntceBgndeHH" class="date_format">
-							<c:forEach var="result" items="${ntceBgndeHH}" varStatus="status">
-								<option value="${result.code}">${result.codeNm}</option>	
-							</c:forEach>
-							</select>시
-							<select id="ntceBgndeMM" name="ntceBgndeMM" class="date_format">
-							<c:forEach var="result" items="${ntceBgndeMM}" varStatus="status">
-								<option value="${result.code}">${result.codeNm}</option>	
-							</c:forEach>
-							</select>분
-							&nbsp;&nbsp;~&nbsp;&nbsp;
-					    	<input style="width:auto;" type="text" class="date_format" name="ntceEnddeYYYMMDD" id="ntceEnddeYYYMMDD" size="4" maxlength="4" readonly="">
-						    <a href="#" onclick="javascript:fn_egov_NormalCalendar(document.forms.board, document.forms.board.ntceEnddeYYYMMDD);">
-						   	 	<input type="button" class="calBtn">
-					    	</a>
-							<select id="ntceEnddeHH" name="ntceEnddeHH" class="date_format">
-							<c:forEach var="result" items="${ntceEnddeHH}" varStatus="status">
-								<option value="${result.code}">${result.codeNm}</option>	
-							</c:forEach>
-							</select>시
-							<select id="ntceEnddeMM" name="ntceEnddeMM" class="date_format">
-							<c:forEach var="result" items="${ntceEnddeMM}" varStatus="status">
-								<option value="${result.code}">${result.codeNm}</option>	
-							</c:forEach>
-							</select>분
-						</td>
-					</tr>
-					</c:if>
-					
-					<c:if test="${'BBST07' eq bdMstr.bbsTyCode }"><!-- 사전정보공표 -->
-					<tr>
-						<th><span class="reqArea">주기</span></th>
-						<td colspan="3">
-							<input id="pubPeriod" name="pubPeriod" type="text" value="">
-						</td>
-					</tr>
-					
-					<tr>
-						<th><span class="reqArea">시기</span></th>
-						<td colspan="3">
-							<input id="pubTime" name="pubTime" type="text" value="">
-						</td>
-					</tr>
-					
-					<tr>
-						<th><span class="reqArea">방법(링크)</span></th>
-						<td colspan="3">
-							<input id="pubLink" name="pubLink" type="text" value="">
-						</td>
-					</tr>
-					
-					<tr>
-						<th><span class="reqArea">담당부서</span></th>
-						<td colspan="3">
-							<input id="pubLoc" name="pubLoc" type="text" value="">
-						</td>
-					</tr>
-					
-					</c:if>
-					
-					<c:if test="${bdMstr.fileAtchPosblAt == 'Y'}">
-					<tr>
-						<th>파일 첨부</th>
-						<td class="upload_area">
-							<div class="file_upload_box no_img_box fileWrap">
-								<table>	
-									<colgroup>
-										<col style="width: 60%">
-										<col style="width: 10%">
-										<col style="width: 20%">
-										<col style="width: 10%">
-									</colgroup>
-									<thead>
-										<tr>
-										<th>파일명</th>
-										<th>크기</th>
-										<th>등록일시</th>
-										<th>삭제</th>
-										</tr>
-									</thead>
-								</table>
-							</div>
-							<div class="fileWrap fileAfter file_list_div">
-								<table>
-									<colgroup>
-										<col style="width: 60%">
-										<col style="width: 10%">
-										<col style="width: 20%">
-										<col style="width: 10%">
-									</colgroup>
-									<thead>
-										<tr>
-											<th>파일명</th>
-											<th>크기</th>
-											<th>등록일시</th>
-											<th>삭제</th>
-										</tr>
-									</thead>
-									<tbody id="tbody_fiielist">
-										<c:forEach var="fileList" items="${fileList}" varStatus="status">
-		                        			<tr class="item_${fileList.fmsImageFile}_${fileList.fileSn} uploaded_obj">
-												<input type="hidden" name="fileSize" class="item_file_size" value="${fileList.fileSize}">
-												<td class="file_name">
-													<img src="/direct/img/upload_hwp_img.png" alt="" />
-													<span class="file_name_text">${fileList.orignlFileNm}</span>
-												</td>
-												<td>
-													<span class="file_size_text" value="<c:out value="${fileList.fileSize}"/>"></span>
-													
-												</td>
-												<td>
-													<c:out value="${fileList.regdt}"/>
-												</td>
-												<td>
-													<input type="button" class="delBtn" onclick="delAtchFile('${fileList.fmsImageFile}', '${fileList.fileSn}'); return false;">
-												</td>
-											</tr>
-		                        		</c:forEach>
-									</tbody>
-								</table>
-							</div>
-							<div class="fileInfo file_list_div">
-								<ul class="inline">
-									<li>
-										<p>최대 <span class="c_e40000 fwBold limitcount_li">${bdMstr.posblAtchFileNumber}</span>개 | <span class="c_e40000 fwBold upload_number">50MB</span>제한</p>
-									</li>
-									<li>
-										<p><span class="c_456ded fwBold totalfileCount">1</span>개 | <span class="c_456ded fwBold totalfileSize">72.01KB</span></p>
-									</li>
-								</ul>
-							</div>
-							<div class="uploadBtm">
-								<input type="file" id="file_temp" name="file_temp" class="uploadFile">
-							</div>
-						</td>
-					</tr>
-					</c:if>
-					<c:if test="${!empty fmsFileList[0].fmsId }">
-					<tr>
-						<th class="td_title1"><span class="star_t"></span>첨부이미지 링크</th>
-						<td colspan="3">
-							<c:forEach var="result" items="${fmsFileList}" varStatus="status">
-								<c:if test="${result.fileExtsn eq 'jpg' || 
-									result.fileExtsn eq 'jpeg' || 
-									result.fileExtsn eq 'png' || 
-									result.fileExtsn eq 'bmp' || 
-									result.fileExtsn eq 'gif' || 
-									result.fileExtsn eq 'img' }">
-									<span class="item_${result.fmsImageFile}_${result.fileSn}">
-									<a href='${result.fmsLink}' target="_blank">${result.fmsLink}</a>
-										  (${result.orignlFileNm})
-									</br>
-									</span>
-								</c:if>
-							</c:forEach>
-						</td>
-					</tr>
-					<tr>
-						<th class="td_title1"><span class="star_t"></span>첨부다운로드 링크</th>
-						<td colspan="3">
-							<c:forEach var="result" items="${fmsFileList}" varStatus="status">
-								<span class="item_${result.fmsImageFile}_${result.fileSn}">
-								<a href='${result.fmsDownLink}'>${result.fmsDownLink}</a>
-								<c:if test="${listExist}">(</c:if>
-								${result.orignlFileNm}
-								<c:if test="${listExist}">)</c:if>
-								</br>
-								</span>
-							</c:forEach>
-						</td>
-					</tr>
-					
-										
-					<tr>
-						<th class="td_title1"><span class="star_t"></span>최종수정일</th>
-						<td colspan="3">
-							${fmsFileList[0].moddt }
-						</td>
-					</tr>
-					<tr>
-						<th class="td_title1"><span class="star_t"></span>작성자</th>
-						<td colspan="3">
-							${fmsFileList[0].registerId }
-						</td>
-					</tr>
-					</c:if>
-					
-					<!-- 공지 여부  -->
-					<c:choose>
-						<c:when test="${bdMstr.noticeYn == 'Y'}">
-							<c:set var="title">공지여부/공지기간 </c:set>
-							<tr>
-								<th>
-									<label for="noticeAtTitle">${title}</label>
-								</th>
-								<td>
-									<input type="checkbox" name="noticeAt" id="noticeAt" value="Y">
-									<span  style="padding-left: 10px;">/</span> 
-									
-									<input type="hidden" name="cal_url" id="cal_url" value="/sym/cmm/EgovNormalCalPopup.do">
-								    <input style="width:auto;margin-left: 10px;" type="text" class="date_format" name="ntceBgndeYYYMMDD" id="ntceBgndeYYYMMDD" size="4" maxlength="4" readonly="">
-								    <a href="#" onclick="javascript:fn_egov_NormalCalendar(document.forms.board, document.forms.board.ntceBgndeYYYMMDD);">
-								   	 	<input type="button" class="calBtn">
-							    	</a>
-									<select id="ntceBgndeHH" name="ntceBgndeHH" class="date_format">
-									<c:forEach var="result" items="${ntceBgndeHH}" varStatus="status">
-										<option value="${result.code}">${result.codeNm}</option>	
-									</c:forEach>
-									</select>시
-									<select id="ntceBgndeMM" name="ntceBgndeMM" class="date_format">
-									<c:forEach var="result" items="${ntceBgndeMM}" varStatus="status">
-										<option value="${result.code}">${result.codeNm}</option>	
-									</c:forEach>
-									</select>분
-									&nbsp;&nbsp;~&nbsp;&nbsp;
-							    	<input style="width:auto;" type="text" class="date_format" name="ntceEnddeYYYMMDD" id="ntceEnddeYYYMMDD" size="4" maxlength="4" readonly="">
-								    <a href="#" onclick="javascript:fn_egov_NormalCalendar(document.forms.board, document.forms.board.ntceEnddeYYYMMDD);">
-								   	 	<input type="button" class="calBtn">
-							    	</a>
-									<select id="ntceEnddeHH" name="ntceEnddeHH" class="date_format">
-									<c:forEach var="result" items="${ntceEnddeHH}" varStatus="status">
-										<option value="${result.code}">${result.codeNm}</option>	
-									</c:forEach>
-									</select>시
-									<select id="ntceEnddeMM" name="ntceEnddeMM" class="date_format">
-									<c:forEach var="result" items="${ntceEnddeMM}" varStatus="status">
-										<option value="${result.code}">${result.codeNm}</option>	
-									</c:forEach>
-									</select>분
-								</td>
-							</tr>
-						</c:when>
-						<c:otherwise>
-							<form:hidden path="noticeAt" value="N" />
-						</c:otherwise>
-					</c:choose>
-					<!-- 공지 여부  -->
-					
-				</tbody>
-			</table>
-			<div class="btnWrap">
-				<input type="button" class="btnType1 bg_888888" value="목 록" onclick="goList(); return false;">
-				<input type="button" class="btnType1 bg_888888" value="미리보기" onclick="fn_egov_regist_preview(); return false;">
-				<c:if test="${!empty fmsFileList[0].fmsId }">
-					<input type="button" class="btnType1" value="삭 제" onclick="fn_fmsfile_delete(); return false;">
-					<input type="button" class="btnType1" value="수 정" onclick="goSave('fmsFile_U'); return false;">
-				</c:if>
-				<c:if test="${empty fmsFileList[0].fmsId }">
-					<input type="button" class="btnType1" value="저 장" onclick="fn_egov_regist_notice(); return false;">
-				</c:if>
-			</div>
-	 	</div>
-	</div>
-</form:form>
-
-	<!-- //content 끝 -->
-</body>
-</html>
-
+<%--
+  Class Name : EgovNoticeRegist.jsp
+  Description : 게시물  생성 화면
+  Modification Information
+ 
+      수정일         수정자                   수정내용
+    -------    --------    ---------------------------
+     2009.03.24   이삼섭              최초 생성
+     2011.08.31   JJY       경량환경 버전 생성
+ 
+    author   : 공통서비스 개발팀 이삼섭
+    since    : 2009.03.24
+--%>
+<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
+<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator"%>
+<%@ taglib prefix="ckeditor" uri="http://ckeditor.com"%>
+<!DOCTYPE html>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<meta http-equiv="content-language" content="ko">
+<script type="text/javascript" src="<c:url value='/js/EgovBBSMng.js' />"></script>
+<script type="text/javascript" src="<c:url value='/js/EgovMultiFileItn.js'/>"></script> <!-- 파일첨부, 썸네일이미지 있으면 미리보기 -->
+<%-- <script type="text/javascript" src="<c:url value='/js/EgovMultiFile.js'/>"></script> --%>
+<script type="text/javascript" src="<c:url value='/js/EgovCalPopup.js'/>"></script>
+<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+<validator:javascript formName="board" staticJavascript="false" xhtml="true" cdata="false" />
+<script type="text/javascript">
+$( document ).ready(function() {
+});
+
+function goList() {
+	document.searchForm.submit(); 
+}
+
+function fn_egov_regist_notice() {
+	CKEDITOR.instances.nttCn.updateElement();
+	if (!validateBoard(document.board))
+		return;
+
+	//금지어 확인
+	/* var prohibitCheck = false;
+	var form = document.board ;
+	form.checkProhibitCn.value = form.nttSj.value + form.nttCn.value ; 
+	var data = new FormData(form);
+	$.ajax({
+	type: "POST",
+	     url: "/uss/ion/cnf/prohiCheckAjax.do",
+	     async:false,
+	     data: data,
+	     dataType:'json',
+	     processData: false,
+	     contentType: false,
+	     cache: false,
+	     timeout: 600000,
+	     success: function (returnData, status) {
+	     	if(status == 'success'){
+		    	if(returnData.result == 'fail'){
+		        }else if(returnData.result == 'auth_fail'){
+		        }else if(returnData.result =='success'){
+		        	if(null != returnData.prohibitVO.prohibitCn){
+		        		alert( returnData.prohibitVO.prohibitCn + " 단어는 금지어로 등록되어 있는 단어입니다." );
+		        		prohibitCheck = true;
+		        	}
+	           	}
+           }else{
+	           	//alert("등록에 실패하였습니다.");
+           }
+       },
+       error: function (e) {
+           //alert("등록에 실패하였습니다.");
+       }
+	});
+  
+	if(prohibitCheck){
+		return;
+	} */
+	
+	<c:if test="${bdMstr.bbsId == 'BBSMSTR_000000000731' }"> 
+			{
+				if($('#ntceBgndeYYYMMDD').val() == ''){
+					alert(" 시작일은 필수입니다.");
+					return;
+				}
+				if($('#ntceEnddeYYYMMDD').val() == ''){
+					alert(" 종료일은 필수입니다.");
+					return;
+				}
+				
+				var iChkBeginDe = Number(($('#ntceBgndeYYYMMDD').val()+$('#ntceBgndeHH').val()+$('#ntceBgndeMM').val()).replaceAll("-","")   );
+				var iChkEndDe =  Number(($('#ntceEnddeYYYMMDD').val()+$('#ntceEnddeHH').val()+$('#ntceEnddeMM').val()).replaceAll("-","")   );
+
+				if(iChkBeginDe > iChkEndDe || iChkEndDe < iChkBeginDe ){
+					alert("게시시작일자는 게시종료일자 보다 클수 없고,\n게시종료일자는 게시시작일자 보다 작을수 없습니다. ");
+					return;
+				}
+				$('#ntceBgnde').val(iChkBeginDe) ;
+				$('#ntceEndde').val(iChkEndDe) ;
+			}
+	</c:if>
+	
+	if (confirm('<spring:message code="common.regist.msg" />')) {
+		goSave();
+	}
+}
+
+function goList() {
+	document.searchForm.action = "<c:url value='/cop/bbs/selectBoardList.do'/>";
+	document.searchForm.submit();
+}
+
+function fn_egov_regist_preview() {
+	var PCC_window = window.open('', 'PCCV3Window', 'width=850, height=570, resizable=1, scrollbars=yes, status=0, titlebar=0, toolbar=0, left=350, top=50' );
+	
+	var previewImgs = "";
+	var i = 0;
+	
+	$("#DIV_IMG_VIEW").find("img").each(function() {
+		previewImgs += $(this).get(0).src + "^";
+		i++;
+	});
+	
+	document.board.previewImgs.value = previewImgs;
+	document.board.action = "<c:url value='/cop/bbs/bbsPreview.do'/>";
+	document.board.target = "PCCV3Window";
+	document.board.submit();
+}
+</script>
+<title><c:out value='${bdMstr.bbsNm}' /> - 글 등록</title>
+<style>
+.uploaded_obj{width: 100%;}
+</style>
+</head>
+<body>
+	<form:form commandName="searchForm" name="searchForm" method="get" action="">
+		<input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}'/>" />
+		<input name="searchCnd" type="hidden" value="<c:out value='${searchVO.searchCnd}'/>" />
+		<input name="searchWrd" type="hidden" value="<c:out value='${searchVO.searchWrd}'/>" />
+		<input name="bbsId" type="hidden" value="<c:out value='${searchVO.bbsId}'/>" />
+	</form:form>
+			
+	<form:form commandName="board" name="board" method="post" enctype="multipart/form-data">
+	<input type="hidden" name="pageIndex" value="<c:out value='${searchVO.pageIndex}'/>" />
+	<input type="hidden" name="searchCnd" value="<c:out value='${searchVO.searchCnd}'/>" />
+	<input type="hidden" name="searchWrd" value="<c:out value='${searchVO.searchWrd}'/>" />
+	<input type="hidden" name="bbsId" value="<c:out value='${bdMstr.bbsId}'/>" />
+	<input type="hidden" name="previewImgs" value="" />
+	<input type="hidden" name="checkProhibitCn" value="" />
+	<input type="hidden" name="siteId" value="<c:out value='${bdMstr.siteId}'/>"  />
+	<input type="hidden" name="pageType" id="pageType" value="insert" />
+	
+	<input id="ntceBgnde" name="ntceBgnde" type="hidden" value="">
+	<input id="ntceEndde" name="ntceEndde" type="hidden" value="">
+	
+	<!-- 드래그앤 드롭 파라미터 -->
+	<input type="hidden" name="limitcount" value="${bdMstr.posblAtchFileNumber}" />
+	<div class="contWrap">
+		<div class="pageTitle">
+			<div class="pageIcon"><img src="/pb/img/pageTitIcon4.png" alt=""></div>
+			<h2 class="titType1 c_222222 fwBold"><c:out value='${bdMstr.bbsNm}' />- 글 등록  (${bdMstr.menuNm})</h2>
+			<p class="tType6 c_999999">게시판 글을 생성/수정 할 수 있습니다.</p>
+		</div>
+		<div class="pageCont">
+			<table class="tbType2">
+				<colgroup>
+					<col style="width: 20%">
+					<col style="width: 80%">
+				</colgroup>
+				<tbody>
+					<c:if test="${Transfer}">
+						<tr>
+							<th>
+								<label for="secretAt">임시수정</label>
+							</th>
+							<td>
+								등록일 :
+								<input style="width: 10%;" id="frstRegisterPnttm" name="frstRegisterPnttm" title="제목" type="text" value="${board.frstRegisterPnttm}">
+								2000-01-05 (형식)
+								<br>
+								총 
+								<input style="width: 10%;" id="inqireCo" name="inqireCo" title="제목" type="text" value="${board.inqireCo}">
+								123 (형식)
+								<br>
+								등록자 : 
+								<input style="width: 10%;" id="ntcrNm" name="ntcrNm" title="제목" type="text" value="${board.ntcrNm}">
+								아무개 (형식)
+							</td>
+						</tr>
+						</c:if>
+					<tr>
+						<th><span class="reqArea">
+							<span class="reqArea">${bdMstr.bbsTyCode eq 'BBST07' ? "항목" : bdMstr.menuNo eq '9510000' ? "질문" : "제목"}</span>
+							</span>
+							<c:out value="${msgNttSj}" />
+						</th>
+						<td colspan="3">
+							<form:input path="nttSj" title="${msgNttSj}" />
+							<form:errors path="nttSj" />
+						</td>
+					</tr>
+					<tr>
+						<th><span class="reqArea">
+							${brdMstrVO.menuNo eq '9510000' ? "답변" : "내용"}
+						</span></th>
+						<td colspan="3">
+							<form:textarea path="nttCn" class="textarea" cols="500" rows="20" />
+							<ckeditor:replace replace="nttCn" basePath="${pageContext.request.contextPath}/html/egovframework/com/cmm/utl/ckeditor/" />
+							<form:errors path="nttCn" />
+						</td>
+					</tr>
+					<c:if test="${'BBSMSTR_000000000731' eq bdMstr.bbsId }"><!-- 이벤트 게시판 -->
+					<tr>
+						<th><span class="reqArea">기간</span></th>
+						<td colspan="3">
+							<input type="hidden" name="cal_url" id="cal_url" value="/sym/cmm/EgovNormalCalPopup.do">
+						    <input style="width:auto;" type="text" class="date_format" name="ntceBgndeYYYMMDD" id="ntceBgndeYYYMMDD" size="4" maxlength="4" readonly="">
+						    <a href="#" onclick="javascript:fn_egov_NormalCalendar(document.forms.board, document.forms.board.ntceBgndeYYYMMDD);">
+						   	 	<input type="button" class="calBtn">
+					    	</a>
+							<select id="ntceBgndeHH" name="ntceBgndeHH" class="date_format">
+							<c:forEach var="result" items="${ntceBgndeHH}" varStatus="status">
+								<option value="${result.code}">${result.codeNm}</option>	
+							</c:forEach>
+							</select>시
+							<select id="ntceBgndeMM" name="ntceBgndeMM" class="date_format">
+							<c:forEach var="result" items="${ntceBgndeMM}" varStatus="status">
+								<option value="${result.code}">${result.codeNm}</option>	
+							</c:forEach>
+							</select>분
+							&nbsp;&nbsp;~&nbsp;&nbsp;
+					    	<input style="width:auto;" type="text" class="date_format" name="ntceEnddeYYYMMDD" id="ntceEnddeYYYMMDD" size="4" maxlength="4" readonly="">
+						    <a href="#" onclick="javascript:fn_egov_NormalCalendar(document.forms.board, document.forms.board.ntceEnddeYYYMMDD);">
+						   	 	<input type="button" class="calBtn">
+					    	</a>
+							<select id="ntceEnddeHH" name="ntceEnddeHH" class="date_format">
+							<c:forEach var="result" items="${ntceEnddeHH}" varStatus="status">
+								<option value="${result.code}">${result.codeNm}</option>	
+							</c:forEach>
+							</select>시
+							<select id="ntceEnddeMM" name="ntceEnddeMM" class="date_format">
+							<c:forEach var="result" items="${ntceEnddeMM}" varStatus="status">
+								<option value="${result.code}">${result.codeNm}</option>	
+							</c:forEach>
+							</select>분
+						</td>
+					</tr>
+					</c:if>
+					
+					<c:if test="${'BBST07' eq bdMstr.bbsTyCode }"><!-- 사전정보공표 -->
+					<tr>
+						<th><span class="reqArea">주기</span></th>
+						<td colspan="3">
+							<input id="pubPeriod" name="pubPeriod" type="text" value="">
+						</td>
+					</tr>
+					
+					<tr>
+						<th><span class="reqArea">시기</span></th>
+						<td colspan="3">
+							<input id="pubTime" name="pubTime" type="text" value="">
+						</td>
+					</tr>
+					
+					<tr>
+						<th><span class="reqArea">방법(링크)</span></th>
+						<td colspan="3">
+							<input id="pubLink" name="pubLink" type="text" value="">
+						</td>
+					</tr>
+					
+					<tr>
+						<th><span class="reqArea">담당부서</span></th>
+						<td colspan="3">
+							<input id="pubLoc" name="pubLoc" type="text" value="">
+						</td>
+					</tr>
+					
+					</c:if>
+					
+					<c:if test="${bdMstr.fileAtchPosblAt == 'Y'}">
+					<tr>
+						<th>파일 첨부</th>
+						<td class="upload_area">
+							<div class="file_upload_box no_img_box fileWrap">
+								<table>	
+									<colgroup>
+										<col style="width: 60%">
+										<col style="width: 10%">
+										<col style="width: 20%">
+										<col style="width: 10%">
+									</colgroup>
+									<thead>
+										<tr>
+										<th>파일명</th>
+										<th>크기</th>
+										<th>등록일시</th>
+										<th>삭제</th>
+										</tr>
+									</thead>
+								</table>
+							</div>
+							<div class="fileWrap fileAfter file_list_div">
+								<table>
+									<colgroup>
+										<col style="width: 60%">
+										<col style="width: 10%">
+										<col style="width: 20%">
+										<col style="width: 10%">
+									</colgroup>
+									<thead>
+										<tr>
+											<th>파일명</th>
+											<th>크기</th>
+											<th>등록일시</th>
+											<th>삭제</th>
+										</tr>
+									</thead>
+									<tbody id="tbody_fiielist">
+										<c:forEach var="fileList" items="${fileList}" varStatus="status">
+		                        			<tr class="item_${fileList.fmsImageFile}_${fileList.fileSn} uploaded_obj">
+												<input type="hidden" name="fileSize" class="item_file_size" value="${fileList.fileSize}">
+												<td class="file_name">
+													<img src="/direct/img/upload_hwp_img.png" alt="" />
+													<span class="file_name_text">${fileList.orignlFileNm}</span>
+												</td>
+												<td>
+													<span class="file_size_text" value="<c:out value="${fileList.fileSize}"/>"></span>
+													
+												</td>
+												<td>
+													<c:out value="${fileList.regdt}"/>
+												</td>
+												<td>
+													<input type="button" class="delBtn" onclick="delAtchFile('${fileList.fmsImageFile}', '${fileList.fileSn}'); return false;">
+												</td>
+											</tr>
+		                        		</c:forEach>
+									</tbody>
+								</table>
+							</div>
+							<div class="fileInfo file_list_div">
+								<ul class="inline">
+									<li>
+										<p>최대 <span class="c_e40000 fwBold limitcount_li">${bdMstr.posblAtchFileNumber}</span>개 | <span class="c_e40000 fwBold upload_number">50MB</span>제한</p>
+									</li>
+									<li>
+										<p><span class="c_456ded fwBold totalfileCount">1</span>개 | <span class="c_456ded fwBold totalfileSize">72.01KB</span></p>
+									</li>
+								</ul>
+							</div>
+							<div class="uploadBtm">
+								<input type="file" id="file_temp" name="file_temp" class="uploadFile">
+							</div>
+						</td>
+					</tr>
+					</c:if>
+					<c:if test="${!empty fmsFileList[0].fmsId }">
+					<tr>
+						<th class="td_title1"><span class="star_t"></span>첨부이미지 링크</th>
+						<td colspan="3">
+							<c:forEach var="result" items="${fmsFileList}" varStatus="status">
+								<c:if test="${result.fileExtsn eq 'jpg' || 
+									result.fileExtsn eq 'jpeg' || 
+									result.fileExtsn eq 'png' || 
+									result.fileExtsn eq 'bmp' || 
+									result.fileExtsn eq 'gif' || 
+									result.fileExtsn eq 'img' }">
+									<span class="item_${result.fmsImageFile}_${result.fileSn}">
+									<a href='${result.fmsLink}' target="_blank">${result.fmsLink}</a>
+										  (${result.orignlFileNm})
+									</br>
+									</span>
+								</c:if>
+							</c:forEach>
+						</td>
+					</tr>
+					<tr>
+						<th class="td_title1"><span class="star_t"></span>첨부다운로드 링크</th>
+						<td colspan="3">
+							<c:forEach var="result" items="${fmsFileList}" varStatus="status">
+								<span class="item_${result.fmsImageFile}_${result.fileSn}">
+								<a href='${result.fmsDownLink}'>${result.fmsDownLink}</a>
+								<c:if test="${listExist}">(</c:if>
+								${result.orignlFileNm}
+								<c:if test="${listExist}">)</c:if>
+								</br>
+								</span>
+							</c:forEach>
+						</td>
+					</tr>
+					
+										
+					<tr>
+						<th class="td_title1"><span class="star_t"></span>최종수정일</th>
+						<td colspan="3">
+							${fmsFileList[0].moddt }
+						</td>
+					</tr>
+					<tr>
+						<th class="td_title1"><span class="star_t"></span>작성자</th>
+						<td colspan="3">
+							${fmsFileList[0].registerId }
+						</td>
+					</tr>
+					</c:if>
+					
+					<!-- 공지 여부  -->
+					<c:choose>
+						<c:when test="${bdMstr.noticeYn == 'Y'}">
+							<c:set var="title">공지여부/공지기간 </c:set>
+							<tr>
+								<th>
+									<label for="noticeAtTitle">${title}</label>
+								</th>
+								<td>
+									<input type="checkbox" name="noticeAt" id="noticeAt" value="Y">
+									<span  style="padding-left: 10px;">/</span> 
+									
+									<input type="hidden" name="cal_url" id="cal_url" value="/sym/cmm/EgovNormalCalPopup.do">
+								    <input style="width:auto;margin-left: 10px;" type="text" class="date_format" name="ntceBgndeYYYMMDD" id="ntceBgndeYYYMMDD" size="4" maxlength="4" readonly="">
+								    <a href="#" onclick="javascript:fn_egov_NormalCalendar(document.forms.board, document.forms.board.ntceBgndeYYYMMDD);">
+								   	 	<input type="button" class="calBtn">
+							    	</a>
+									<select id="ntceBgndeHH" name="ntceBgndeHH" class="date_format">
+									<c:forEach var="result" items="${ntceBgndeHH}" varStatus="status">
+										<option value="${result.code}">${result.codeNm}</option>	
+									</c:forEach>
+									</select>시
+									<select id="ntceBgndeMM" name="ntceBgndeMM" class="date_format">
+									<c:forEach var="result" items="${ntceBgndeMM}" varStatus="status">
+										<option value="${result.code}">${result.codeNm}</option>	
+									</c:forEach>
+									</select>분
+									&nbsp;&nbsp;~&nbsp;&nbsp;
+							    	<input style="width:auto;" type="text" class="date_format" name="ntceEnddeYYYMMDD" id="ntceEnddeYYYMMDD" size="4" maxlength="4" readonly="">
+								    <a href="#" onclick="javascript:fn_egov_NormalCalendar(document.forms.board, document.forms.board.ntceEnddeYYYMMDD);">
+								   	 	<input type="button" class="calBtn">
+							    	</a>
+									<select id="ntceEnddeHH" name="ntceEnddeHH" class="date_format">
+									<c:forEach var="result" items="${ntceEnddeHH}" varStatus="status">
+										<option value="${result.code}">${result.codeNm}</option>	
+									</c:forEach>
+									</select>시
+									<select id="ntceEnddeMM" name="ntceEnddeMM" class="date_format">
+									<c:forEach var="result" items="${ntceEnddeMM}" varStatus="status">
+										<option value="${result.code}">${result.codeNm}</option>	
+									</c:forEach>
+									</select>분
+								</td>
+							</tr>
+						</c:when>
+						<c:otherwise>
+							<form:hidden path="noticeAt" value="N" />
+						</c:otherwise>
+					</c:choose>
+					<!-- 공지 여부  -->
+					
+				</tbody>
+			</table>
+			<div class="btnWrap">
+				<input type="button" class="btnType1 bg_888888" value="목 록" onclick="goList(); return false;">
+				<input type="button" class="btnType1 bg_888888" value="미리보기" onclick="fn_egov_regist_preview(); return false;">
+				<c:if test="${!empty fmsFileList[0].fmsId }">
+					<input type="button" class="btnType1" value="삭 제" onclick="fn_fmsfile_delete(); return false;">
+					<input type="button" class="btnType1" value="수 정" onclick="goSave('fmsFile_U'); return false;">
+				</c:if>
+				<c:if test="${empty fmsFileList[0].fmsId }">
+					<input type="button" class="btnType1" value="저 장" onclick="fn_egov_regist_notice(); return false;">
+				</c:if>
+			</div>
+	 	</div>
+	</div>
+</form:form>
+
+	<!-- //content 끝 -->
+</body>
+</html>
+
src/main/webapp/WEB-INF/jsp/layout/popLayout.jsp
--- src/main/webapp/WEB-INF/jsp/layout/popLayout.jsp
+++ src/main/webapp/WEB-INF/jsp/layout/popLayout.jsp
@@ -1,26 +1,26 @@
-<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-<%@ taglib prefix="decorator" uri="http://www.opensymphony.com/sitemesh/decorator" %>
-
-<%@ taglib prefix="compress" uri="http://htmlcompressor.googlecode.com/taglib/compressor"%>
-
-<!DOCTYPE html>
-<html lang="kr">
-<head>
-	<meta charset="UTF-8">
-	<meta http-equiv="X-UA-Compatible" content="IE=edge" />
-	<!-- <meta name="viewport" content="width=device-width, initial-scale=1.0"> -->
-	<link rel="stylesheet" href="/publish/testcss/css/reset.css">
-	<link rel="stylesheet" href="/publish/testcss/css/font.css">
-	<link rel="stylesheet" href="/publish/testcss/css/sample.css">
-	<link rel="stylesheet" href="/pb/css/popup.css">
-	<script src="/publish/js/jquery-3.5.0.js"></script>
-	<script src="/publish/js/common.js"></script>
-</head>
-<script type="text/javascript" src="<c:url value='/js/EgovCmmUtl.js'/>" ></script>
-<script src="/js/ncms_common.js"></script>
-<decorator:head />
-<!-- body 시작 -->
-<decorator:body />
-<!-- body 끝 -->
+<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="decorator" uri="http://www.opensymphony.com/sitemesh/decorator" %>
+
+<%@ taglib prefix="compress" uri="http://htmlcompressor.googlecode.com/taglib/compressor"%>
+
+<!DOCTYPE html>
+<html lang="kr">
+<head>
+	<meta charset="UTF-8">
+	<meta http-equiv="X-UA-Compatible" content="IE=edge" />
+	<!-- <meta name="viewport" content="width=device-width, initial-scale=1.0"> -->
+	<link rel="stylesheet" href="/publish/testcss/css/reset.css">
+	<link rel="stylesheet" href="/publish/testcss/css/font.css">
+	<link rel="stylesheet" href="/publish/testcss/css/sample.css">
+	<link rel="stylesheet" href="/pb/css/popup.css">
+	<script src="/publish/js/jquery-3.5.0.js"></script>
+	<script src="/publish/js/common.js"></script>
+</head>
+<script type="text/javascript" src="<c:url value='/js/EgovCmmUtl.js'/>" ></script>
+<script src="/js/ncms_common.js"></script>
+<decorator:head />
+<!-- body 시작 -->
+<decorator:body />
+<!-- body 끝 -->
 </html>
(No newline at end of file)
src/main/webapp/WEB-INF/jsp/web/addr/include/addrListforExcel.jsp
--- src/main/webapp/WEB-INF/jsp/web/addr/include/addrListforExcel.jsp
+++ src/main/webapp/WEB-INF/jsp/web/addr/include/addrListforExcel.jsp
@@ -317,6 +317,13 @@
 	fn_errorPopClean(); // 에러 popup 초기화
 	fn_rowCntInit();
 	if (file) {
+		// 파일 크기 체크 (20MB)
+		const maxSize = 20 * 1024 * 1024; // 20MB in bytes
+		if (file.size > maxSize) {
+			alert('파일 크기는 20MB를 초과할 수 없습니다.');
+			return;
+		}
+
 		fn_loadAddActive();
 		var reader = new FileReader();
 		var extension = file.name.split('.').pop().toLowerCase();
@@ -506,7 +513,7 @@
 	               <!-- 엑셀입력 -->
 	               <div class="popCont current pop_more_cont" id="popCont_1">
 	                   <div class="titBox">
-							<p>- 주소록은 한 번에 최대 30만건까지 등록(EXCEL파일, 최대용량 3MB) 가능합니다. </p>
+							<p>- 주소록은 한 번에 최대 30만건까지 등록(EXCEL파일, 최대용량 20MB) 가능합니다. </p>
 							<p>- 엑셀 파일에 비밀번호 설정, 제한된 보기, 수식 등이 설정되어 있는 경우 업로드가 불가합니다.</p>
 							<p>- 구분선(|), 역슬래시(\, ₩), 큰따옴표(") 등 발송불가 특수문자는 저장되지 않습니다.</p>
 							<p>- 이름 200byte, [*1*]~[*4*] 200byte, 메모 250byte까지 입력 가능합니다.</p>
src/main/webapp/WEB-INF/jsp/web/cop/bbs/EgovNoticePhotoInqire.jsp
--- src/main/webapp/WEB-INF/jsp/web/cop/bbs/EgovNoticePhotoInqire.jsp
+++ src/main/webapp/WEB-INF/jsp/web/cop/bbs/EgovNoticePhotoInqire.jsp
@@ -1,302 +1,302 @@
-<%--
-  Class Name : EgovNoticeInqire.jsp
-  Description : (사용자)게시물 조회 화면
-  Modification Information
- 
-      수정일      수정자              수정내용
-     ----------  --------    ---------------------------
-     2009.03.23   이삼섭        최초 생성
-     2009.06.26   한성곤        2단계 기능 추가 (댓글관리, 만족도조사)
-     2011.08.31   JJY       	경량환경 버전 생성
-     2013.05.23   이기하       	상세보기 오류수정
- 
-    author   : 공통서비스 개발팀 이삼섭
-    since    : 2009.03.23
---%>
-<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
-<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
-<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
-<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
-<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
-<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator"%>
-<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
-<%pageContext.setAttribute("crlf", "\r\n"); %>
-<head>
-<script src="/publish/js/content.js"></script>
-<script type="text/javascript">
-$(document).ready(function(){
-});
-
-
-var listPage = $(location).attr('href').split($(location).attr('host'))[1].split('Detail.do')[0]+'List.do'+'?bbsId=${brdMstrVO.bbsId}'  ;
-var detailPage = $(location).attr('href').split($(location).attr('host'))[1].split('?')[0] ;
-  function fn_egov_select_noticeList(pageNo) {
-      /* document.searchForm.action = listPage ;
-      document.searchForm.submit(); */
-      //nttId가 쿼리스트링으로 넘어가는 이유로 인한 listForm 사용.
-      document.listFullForm.action = listPage ;
-      document.listFullForm.submit();
-  }
-  
-  function fn_egov_select_detail(bbsId , nttId) { //이전/다음글 상세
-  	if(listPage.indexOf("contentBbsList.do") > 0){ //컨텐츠 bbs 페이지경우
-  		location.href=detailPage+"?bbsId="+bbsId + "&nttId="+nttId+"&menuNo="+$('#menuNo').val() ;
-  		return
-  	}
-  	
-  	//location.href=detailPage+"?bbsId="+bbsId + "&nttId="+nttId ;
-
-	document.listFullForm.bbsId.value = bbsId;
-	document.listFullForm.nttId.value = nttId;
-	document.listFullForm.seCmmnCdId.value = bbsId;
-	document.listFullForm.method = "get";
-	document.listFullForm.action = detailPage;
-	document.listFullForm.submit();  	  	
-  }
-  
-  function fn_egov_delete_notice() {
-      if (confirm('<spring:message code="common.delete.msg" />')) {
-          document.searchForm.action = "<c:url value='/web/cop/bbs/deleteBoardArticle.do'/>";
-          document.searchForm.submit();
-      }   
-  }
-  
-  function fn_egov_moveUpdt_notice(){
-  	document.searchForm.action = "<c:url value='/web/cop/bbs/forUpdateBoardArticle.do'/>";
-      document.searchForm.method = "get";
-      document.searchForm.submit();          
-  }
-</script>
-
-<!-- 댓글 작성 스크립트  -->
-<c:if test="${brdMstrVO.addYn == 'Y'}">
-	<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
-	<validator:javascript formName="articleComment" staticJavascript="false" xhtml="true" cdata="false" />
-	<script type="text/javascript">
-// 댓글 등록
-function fn_egov_insert_commentList() {
-	var form = document.getElementById("articleCommentVO");
-	if (!validateArticleComment(form)){
-		return;
-	}
-	if (confirm('<spring:message code="common.regist.msg" />')) {
-		form.submit();
-	}
-}
-
-// 댓글 수정
-function fn_egov_updt_commentList() {
-	var form = document.getElementById("articleCommentVO");
-	if (!validateArticleComment(form)){
-		return;
-	}
-
-	if (confirm('<spring:message code="common.update.msg" />')) {
-		form.modified.value = "true";
-		form.action = "<c:url value='/${siteId}/web/cop/cmt/updateArticleComment.do'/>";
-		form.submit();
-	}
-}
-
-// 댓글 수정 화면
-function fn_egov_selectCommentForupdt(commentNo) {
-	var form = document.getElementById("articleCommentVO");
-	//form.subPageIndex.value = pageNo;
-	form.commentNo.value = commentNo;
-	form.action = "<c:url value='/web/cop/bbsWeb/selectBoardArticle.do'/>";
-	form.submit();
-}
-
-// 댓글 삭제
-function fn_egov_deleteCommentList(commentNo) {
-	var form = document.getElementById("articleCommentVO");
-	if (confirm('<spring:message code="common.delete.msg" />')) {
-		form.modified.value = "true";
-		form.commentNo.value = commentNo;
-		form.action = "<c:url value='/${siteId}/web/cop/cmt/deleteArticleComment.do'/>";
-		form.submit();
-	}
-}
-
-/* 댓글페이징 */
-function fn_egov_select_commentList(pageNo) {
-	var form = document.getElementById("articleCommentVO");
-	// form.subPageIndex.value = pageNo;
-	form.commentNo.value = '';
-	form.action = "<c:url value='/${siteId}/web/cop/bbsWeb/selectBoardArticle.do'/>";
-	form.submit();
-}
-</script>
-</c:if>
-<style type="text/css">
-.view_wrap .view_cont {padding-bottom:0;border-bottom:0 none;}
-</style>
-</head>
-<body>
-<!-- contents 영역 -->
-	<form:form commandName="searchForm" name="searchForm" method="get" action="<c:url value='/web/cop/bbsWeb/selectBoardList.do'/>">
-		<input type="hidden" name="seCmmnCdId" value="${searchVO.seCmmnCdId}">
-		<input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}'/>"/>
-		<input name="searchCnd" type="hidden" value="<c:out value='${searchVO.searchCnd}'/>"/>
-		<input name="searchWrd" type="hidden" value="<c:out value='${searchVO.searchWrd}'/>"/>
-		<input name="bbsId" type="hidden" value="<c:out value='${result.bbsId}'/>" />
-		<input name="nttId" type="hidden" value="<c:out value='${result.nttId}'/>" />
-		<input type="hidden" id= "ntcrNm" name="ntcrNm" value=""/>
-		<input type="hidden" id= "menuNo" name="menuNo" value="<c:out value='${masterVO.menuNo}'/>" />
-	</form:form>
-	<form:form commandName="listForm" name="listForm" method="get" action="<c:url value='/web/cop/bbsWeb/selectBoardList.do'/>">
-		<input type="hidden" name="seCmmnCdId" value="${searchVO.seCmmnCdId}">
-		<input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}'/>"/>
-		<input name="searchCnd" type="hidden" value="<c:out value='${searchVO.searchCnd}'/>"/>
-		<input name="searchWrd" type="hidden" value="<c:out value='${searchVO.searchWrd}'/>"/>
-		<input name="bbsId" type="hidden" value="<c:out value='${searchVO.bbsId}'/>" />
-	</form:form>
-	<form:form commandName="listFullForm" name="listFullForm" method="get" action="<c:url value='/web/cop/bbsWeb/selectBoardList.do'/>">
-		<input name="bbsId" type="hidden" value="<c:out value='${searchVO.bbsId}'/>" />
-		<input name="nttId" type="hidden" value="<c:out value='${searchVO.nttId}'/>" />
-		<input type="hidden" name="seCmmnCdId" value="${searchVO.seCmmnCdId}">
-		<input type="hidden" name="frstRegisterId" value="${searchVO.frstRegisterId}"/>
-		<input type="hidden" name="viewsYn" value="">
-		<input type="hidden" name="menuNo" value="">
-		<input type="hidden" name="searchBgnDe" value="${searchVO.searchBgnDe}">
-		<input type="hidden" name="searchEndDe" value="${searchVO.searchEndDe}">
-		<input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}'/>"/>
-		<input type="hidden" name="searchSortCnd" value="${searchVO.searchSortCnd}" />
-		<input type="hidden" name="searchSortOrd" value="${searchVO.searchSortOrd}" />
-		<input name="searchCnd" type="hidden" value="<c:out value='${searchVO.searchCnd}'/>"/>
-		<input name="searchWrd" type="hidden" value="<c:out value='${searchVO.searchWrd}'/>"/>
-		<input type="hidden" name="pageUnit" value="${searchVO.pageUnit}" />		
-	</form:form>	
-        <div class="inner">
-            <!-- send top -->
-            <div class="send_top">
-                <!-- tab button -->
-                <ul class="tabType4">
-					<li class="tab"><button type="button" onclick="TabType5(this,'1');location.href='/web/cop/bbs/NoticeList.do'">공지사항</button></li>
-					<li class="tab"><button type="button" onclick="TabType5(this,'2');location.href='/web/cop/bbs/TermsList.do'">이용약관</button></li>
-					<li class="tab"><button type="button" onclick="TabType5(this,'3');location.href='/web/cop/bbs/FaqList.do'">자주하는 질문</button></li>
-					<li class="tab"><button type="button" onclick="TabType5(this,'4');location.href='/web/cop/bbs/QnaList.do'">1:1 문의</button></li>
-					<li class="tab"><button type="button" onclick="TabType5(this,'5');location.href='/web/cop/bbs/SuggestList.do'">불편신고</button></li>
-					<li class="tab active"><button type="button" onclick="TabType5(this,'6');location.href='/web/cop/bbs/EventList.do'">이벤트</button></li>
-				</ul><!--// tab button -->
-				<!-- 고객센터 - 상세페이지 -->
-                <div class="serv_content current" id="tab5_1">
-                    <div class="heading">
-                        <h2>${brdMstrVO.bbsNm}</h2>
-                    </div>
-                    <div class="list_cont" id="listTab_1">
-                        <div class="view_wrap">
-                            <div class="view_head">
-                                <div class="title"><p><c:out value="${result.nttSj}" /></p></div>
-                                <ul class="ext_info">
-                                    <li><i></i><c:out value="${result.frstRegisterPnttm}" /></li>
-                                    <li><i></i>운영자<%-- <c:out value="${result.frstRegisterNm}" /> --%></li>
-                                </ul>
-                            </div>
-                            <div class="view_cont">
-                                <div class="cont_in"> 
-                                    <%-- <div class="img_cont">
-                                        <c:if test="${not empty fileList}">
-											<c:forEach var="result" items="${fileList}" varStatus="status">
-													<img src='<c:url value='/cmm/fms/getImage.do'/>?atchFileId=<c:out value="${result.atchFileId}"/>&fileSn=<c:out value="${result.fileSn}"/>' alt="<c:out value='${nttSj}' />_<c:out value='${status.index+1}' />">
-											</c:forEach>
-										</c:if>
-                                    </div> --%>
-									<c:out value="${result.nttCn}" escapeXml="false" />
-                                </div>
-                                <%-- <div class="attachedFile2">
-                                    
-                                    <c:if test="${result.atchFileCnt > 0}">
-							            <ul class="attach">
-							            	<li><c:import url="/cmm/fms/selectBBSFileInfsMjon.do" charEncoding="utf-8">
-												<c:param name="param_atchFileId" value="${result.atchFileId}" />
-											</c:import>
-											</li>
-							            </ul>
-						            </c:if>
-						           
-						            
-                                    <!-- <div class="attachedFile_in">
-                                        <a href="#none"><i></i>2021년 인증서 교체작업 서비스 이용 제한 안내.pdf</a>
-                                    </div>
-                                    <div class="attachedFile_in">
-                                        <a href="#none"><i></i>2021년 인증서 교체작업 서비스 이용 제한 안내.hwp</a>
-                                    </div> -->
-                                </div> --%>
-                            </div>
-                            <c:if test="${resultCnt > 0 and resultList[0].commentCn != ''}">
-                            <div class="view_answer">
-                                <div class="view_asnwer_head">
-                                    <ul class="ext_info">
-                                        <li><i></i><c:out value="${resultList[0].frstRegisterPnttm}" /></li>
-                                        <li><i></i><c:out value="${resultList[0].frstRegisterNm}" /></li>
-                                    </ul>
-                                </div>
-                                <div class="view_asnwer_body">
-                                    <div class="answer_title"><i></i></div>
-                                    <div class="answer_cont">
-                                    	<c:out value="${resultList[0].commentCn}" />
-                                    </div>
-                                </div>
-                        </div>
-                        </c:if>
-                        </div>
-                        
-                        <div class="view_btnWrap">
-	                        <c:if test="${'9997200' eq brdMstrVO.menuNo && empty answerList && 'T' ne result.secretAt}">
-								<button type="button" class="btnType btnType1" onclick="javascript:fn_egov_moveUpdt_notice(); return false;">수정</button>
-								<button type="button" class="btnType btnType2" onclick="javascript:fn_egov_delete_notice('1'); return false;">삭제</button>
-							</c:if>
-                            <button type="button" class="btnType" onclick="javascript:fn_egov_select_noticeList(); return false;">목록</button>
-                        </div>
-                        <ul class="list_prev-next">
-                            <li class="list_prev">
-                                <div><span>이전글<i></i></span></div>
-                                <div>
-                                	<c:choose>
-										<c:when test="${empty prevNttIdNSj}">
-											이전글이 없습니다.
-										</c:when>
-										<c:otherwise>
-											<c:set var="prevNttId" value="${fn:split(prevNttIdNSj, '|')[0]}" />
-											<c:set var="prevNttSj" value="${fn:split(prevNttIdNSj, '|')[1]}" />
-											<c:set var="prevNttDate" value="${fn:split(prevNttIdNSj, '|')[2]}" />
-											<a href="#" onclick="fn_egov_select_detail('<c:out value='${result.bbsId}'/>' , '<c:out value='${prevNttId}'/>'); return false;" title="현재창 이전글이동">
-												<c:out value="${prevNttSj}" />
-											</a>
-											<span class="nb_date"><c:out value="${prevNttDate}" /></span>
-										</c:otherwise>
-									</c:choose>	
-                                	<!-- <a href="#none">[공지] 세금계산서 발행 안내</a> -->
-                                </div>
-                            </li>
-                            <li class="list_next">
-                                <div><span>다음글<i></i></span></div>
-                                <div>
-                                	<c:choose>
-										<c:when test="${empty nextNttIdNSj}">
-											다음글이 없습니다.
-										</c:when>
-										<c:otherwise>
-											<c:set var="nextNttId" value="${fn:split(nextNttIdNSj, '|')[0]}" />
-											<c:set var="nextNttSj" value="${fn:split(nextNttIdNSj, '|')[1]}" />
-											<c:set var="nextNttDate" value="${fn:split(nextNttIdNSj, '|')[2]}" />
-											<a href="#" onclick="fn_egov_select_detail('<c:out value='${result.bbsId}'/>' , '<c:out value='${nextNttId}'/>'); return false;" title="현재창 다음글이동">
-												<c:out value="${nextNttSj}" />
-											</a>
-											<span class="nb_date"><c:out value="${nextNttDate}" /></span>
-										</c:otherwise>
-									</c:choose>
-                                	<!-- <a href="#none">[공지] 문자온 6월 30일 정식 서비스 오픈 안내</a> -->
-                                <div>
-                            </li>
-                        </ul>
-                    </div>
-                    </div>
-				</div><!-- 고객센터 - 상세페이지 -->
-				
-            </div><!--// send top -->
-        
-</body>
-
+<%--
+  Class Name : EgovNoticeInqire.jsp
+  Description : (사용자)게시물 조회 화면
+  Modification Information
+ 
+      수정일      수정자              수정내용
+     ----------  --------    ---------------------------
+     2009.03.23   이삼섭        최초 생성
+     2009.06.26   한성곤        2단계 기능 추가 (댓글관리, 만족도조사)
+     2011.08.31   JJY       	경량환경 버전 생성
+     2013.05.23   이기하       	상세보기 오류수정
+ 
+    author   : 공통서비스 개발팀 이삼섭
+    since    : 2009.03.23
+--%>
+<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
+<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator"%>
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
+<%pageContext.setAttribute("crlf", "\r\n"); %>
+<head>
+<script src="/publish/js/content.js"></script>
+<script type="text/javascript">
+$(document).ready(function(){
+});
+
+
+var listPage = $(location).attr('href').split($(location).attr('host'))[1].split('Detail.do')[0]+'List.do'+'?bbsId=${brdMstrVO.bbsId}'  ;
+var detailPage = $(location).attr('href').split($(location).attr('host'))[1].split('?')[0] ;
+  function fn_egov_select_noticeList(pageNo) {
+      /* document.searchForm.action = listPage ;
+      document.searchForm.submit(); */
+      //nttId가 쿼리스트링으로 넘어가는 이유로 인한 listForm 사용.
+      document.listFullForm.action = listPage ;
+      document.listFullForm.submit();
+  }
+  
+  function fn_egov_select_detail(bbsId , nttId) { //이전/다음글 상세
+  	if(listPage.indexOf("contentBbsList.do") > 0){ //컨텐츠 bbs 페이지경우
+  		location.href=detailPage+"?bbsId="+bbsId + "&nttId="+nttId+"&menuNo="+$('#menuNo').val() ;
+  		return
+  	}
+  	
+  	//location.href=detailPage+"?bbsId="+bbsId + "&nttId="+nttId ;
+
+	document.listFullForm.bbsId.value = bbsId;
+	document.listFullForm.nttId.value = nttId;
+	document.listFullForm.seCmmnCdId.value = bbsId;
+	document.listFullForm.method = "get";
+	document.listFullForm.action = detailPage;
+	document.listFullForm.submit();  	  	
+  }
+  
+  function fn_egov_delete_notice() {
+      if (confirm('<spring:message code="common.delete.msg" />')) {
+          document.searchForm.action = "<c:url value='/web/cop/bbs/deleteBoardArticle.do'/>";
+          document.searchForm.submit();
+      }   
+  }
+  
+  function fn_egov_moveUpdt_notice(){
+  	document.searchForm.action = "<c:url value='/web/cop/bbs/forUpdateBoardArticle.do'/>";
+      document.searchForm.method = "get";
+      document.searchForm.submit();          
+  }
+</script>
+
+<!-- 댓글 작성 스크립트  -->
+<c:if test="${brdMstrVO.addYn == 'Y'}">
+	<script type="text/javascript" src="<c:url value="/validator.do"/>"></script>
+	<validator:javascript formName="articleComment" staticJavascript="false" xhtml="true" cdata="false" />
+	<script type="text/javascript">
+// 댓글 등록
+function fn_egov_insert_commentList() {
+	var form = document.getElementById("articleCommentVO");
+	if (!validateArticleComment(form)){
+		return;
+	}
+	if (confirm('<spring:message code="common.regist.msg" />')) {
+		form.submit();
+	}
+}
+
+// 댓글 수정
+function fn_egov_updt_commentList() {
+	var form = document.getElementById("articleCommentVO");
+	if (!validateArticleComment(form)){
+		return;
+	}
+
+	if (confirm('<spring:message code="common.update.msg" />')) {
+		form.modified.value = "true";
+		form.action = "<c:url value='/${siteId}/web/cop/cmt/updateArticleComment.do'/>";
+		form.submit();
+	}
+}
+
+// 댓글 수정 화면
+function fn_egov_selectCommentForupdt(commentNo) {
+	var form = document.getElementById("articleCommentVO");
+	//form.subPageIndex.value = pageNo;
+	form.commentNo.value = commentNo;
+	form.action = "<c:url value='/web/cop/bbsWeb/selectBoardArticle.do'/>";
+	form.submit();
+}
+
+// 댓글 삭제
+function fn_egov_deleteCommentList(commentNo) {
+	var form = document.getElementById("articleCommentVO");
+	if (confirm('<spring:message code="common.delete.msg" />')) {
+		form.modified.value = "true";
+		form.commentNo.value = commentNo;
+		form.action = "<c:url value='/${siteId}/web/cop/cmt/deleteArticleComment.do'/>";
+		form.submit();
+	}
+}
+
+/* 댓글페이징 */
+function fn_egov_select_commentList(pageNo) {
+	var form = document.getElementById("articleCommentVO");
+	// form.subPageIndex.value = pageNo;
+	form.commentNo.value = '';
+	form.action = "<c:url value='/${siteId}/web/cop/bbsWeb/selectBoardArticle.do'/>";
+	form.submit();
+}
+</script>
+</c:if>
+<style type="text/css">
+.view_wrap .view_cont {padding-bottom:0;border-bottom:0 none;}
+</style>
+</head>
+<body>
+<!-- contents 영역 -->
+	<form:form commandName="searchForm" name="searchForm" method="get" action="<c:url value='/web/cop/bbsWeb/selectBoardList.do'/>">
+		<input type="hidden" name="seCmmnCdId" value="${searchVO.seCmmnCdId}">
+		<input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}'/>"/>
+		<input name="searchCnd" type="hidden" value="<c:out value='${searchVO.searchCnd}'/>"/>
+		<input name="searchWrd" type="hidden" value="<c:out value='${searchVO.searchWrd}'/>"/>
+		<input name="bbsId" type="hidden" value="<c:out value='${result.bbsId}'/>" />
+		<input name="nttId" type="hidden" value="<c:out value='${result.nttId}'/>" />
+		<input type="hidden" id= "ntcrNm" name="ntcrNm" value=""/>
+		<input type="hidden" id= "menuNo" name="menuNo" value="<c:out value='${masterVO.menuNo}'/>" />
+	</form:form>
+	<form:form commandName="listForm" name="listForm" method="get" action="<c:url value='/web/cop/bbsWeb/selectBoardList.do'/>">
+		<input type="hidden" name="seCmmnCdId" value="${searchVO.seCmmnCdId}">
+		<input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}'/>"/>
+		<input name="searchCnd" type="hidden" value="<c:out value='${searchVO.searchCnd}'/>"/>
+		<input name="searchWrd" type="hidden" value="<c:out value='${searchVO.searchWrd}'/>"/>
+		<input name="bbsId" type="hidden" value="<c:out value='${searchVO.bbsId}'/>" />
+	</form:form>
+	<form:form commandName="listFullForm" name="listFullForm" method="get" action="<c:url value='/web/cop/bbsWeb/selectBoardList.do'/>">
+		<input name="bbsId" type="hidden" value="<c:out value='${searchVO.bbsId}'/>" />
+		<input name="nttId" type="hidden" value="<c:out value='${searchVO.nttId}'/>" />
+		<input type="hidden" name="seCmmnCdId" value="${searchVO.seCmmnCdId}">
+		<input type="hidden" name="frstRegisterId" value="${searchVO.frstRegisterId}"/>
+		<input type="hidden" name="viewsYn" value="">
+		<input type="hidden" name="menuNo" value="">
+		<input type="hidden" name="searchBgnDe" value="${searchVO.searchBgnDe}">
+		<input type="hidden" name="searchEndDe" value="${searchVO.searchEndDe}">
+		<input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}'/>"/>
+		<input type="hidden" name="searchSortCnd" value="${searchVO.searchSortCnd}" />
+		<input type="hidden" name="searchSortOrd" value="${searchVO.searchSortOrd}" />
+		<input name="searchCnd" type="hidden" value="<c:out value='${searchVO.searchCnd}'/>"/>
+		<input name="searchWrd" type="hidden" value="<c:out value='${searchVO.searchWrd}'/>"/>
+		<input type="hidden" name="pageUnit" value="${searchVO.pageUnit}" />		
+	</form:form>	
+        <div class="inner">
+            <!-- send top -->
+            <div class="send_top">
+                <!-- tab button -->
+                <ul class="tabType4">
+					<li class="tab"><button type="button" onclick="TabType5(this,'1');location.href='/web/cop/bbs/NoticeList.do'">공지사항</button></li>
+					<li class="tab"><button type="button" onclick="TabType5(this,'2');location.href='/web/cop/bbs/TermsList.do'">이용약관</button></li>
+					<li class="tab"><button type="button" onclick="TabType5(this,'3');location.href='/web/cop/bbs/FaqList.do'">자주하는 질문</button></li>
+					<li class="tab"><button type="button" onclick="TabType5(this,'4');location.href='/web/cop/bbs/QnaList.do'">1:1 문의</button></li>
+					<li class="tab"><button type="button" onclick="TabType5(this,'5');location.href='/web/cop/bbs/SuggestList.do'">불편신고</button></li>
+					<li class="tab active"><button type="button" onclick="TabType5(this,'6');location.href='/web/cop/bbs/EventList.do'">이벤트</button></li>
+				</ul><!--// tab button -->
+				<!-- 고객센터 - 상세페이지 -->
+                <div class="serv_content current" id="tab5_1">
+                    <div class="heading">
+                        <h2>${brdMstrVO.bbsNm}</h2>
+                    </div>
+                    <div class="list_cont" id="listTab_1">
+                        <div class="view_wrap">
+                            <div class="view_head">
+                                <div class="title"><p><c:out value="${result.nttSj}" /></p></div>
+                                <ul class="ext_info">
+                                    <li><i></i><c:out value="${result.frstRegisterPnttm}" /></li>
+                                    <li><i></i>운영자<%-- <c:out value="${result.frstRegisterNm}" /> --%></li>
+                                </ul>
+                            </div>
+                            <div class="view_cont">
+                                <div class="cont_in"> 
+                                    <%-- <div class="img_cont">
+                                        <c:if test="${not empty fileList}">
+											<c:forEach var="result" items="${fileList}" varStatus="status">
+													<img src='<c:url value='/cmm/fms/getImage.do'/>?atchFileId=<c:out value="${result.atchFileId}"/>&fileSn=<c:out value="${result.fileSn}"/>' alt="<c:out value='${nttSj}' />_<c:out value='${status.index+1}' />">
+											</c:forEach>
+										</c:if>
+                                    </div> --%>
+									<c:out value="${result.nttCn}" escapeXml="false" />
+                                </div>
+                                <%-- <div class="attachedFile2">
+                                    
+                                    <c:if test="${result.atchFileCnt > 0}">
+							            <ul class="attach">
+							            	<li><c:import url="/cmm/fms/selectBBSFileInfsMjon.do" charEncoding="utf-8">
+												<c:param name="param_atchFileId" value="${result.atchFileId}" />
+											</c:import>
+											</li>
+							            </ul>
+						            </c:if>
+						           
+						            
+                                    <!-- <div class="attachedFile_in">
+                                        <a href="#none"><i></i>2021년 인증서 교체작업 서비스 이용 제한 안내.pdf</a>
+                                    </div>
+                                    <div class="attachedFile_in">
+                                        <a href="#none"><i></i>2021년 인증서 교체작업 서비스 이용 제한 안내.hwp</a>
+                                    </div> -->
+                                </div> --%>
+                            </div>
+                            <c:if test="${resultCnt > 0 and resultList[0].commentCn != ''}">
+                            <div class="view_answer">
+                                <div class="view_asnwer_head">
+                                    <ul class="ext_info">
+                                        <li><i></i><c:out value="${resultList[0].frstRegisterPnttm}" /></li>
+                                        <li><i></i><c:out value="${resultList[0].frstRegisterNm}" /></li>
+                                    </ul>
+                                </div>
+                                <div class="view_asnwer_body">
+                                    <div class="answer_title"><i></i></div>
+                                    <div class="answer_cont">
+                                    	<c:out value="${resultList[0].commentCn}" />
+                                    </div>
+                                </div>
+                        </div>
+                        </c:if>
+                        </div>
+                        
+                        <div class="view_btnWrap">
+	                        <c:if test="${'9997200' eq brdMstrVO.menuNo && empty answerList && 'T' ne result.secretAt}">
+								<button type="button" class="btnType btnType1" onclick="javascript:fn_egov_moveUpdt_notice(); return false;">수정</button>
+								<button type="button" class="btnType btnType2" onclick="javascript:fn_egov_delete_notice('1'); return false;">삭제</button>
+							</c:if>
+                            <button type="button" class="btnType" onclick="javascript:fn_egov_select_noticeList(); return false;">목록</button>
+                        </div>
+                        <ul class="list_prev-next">
+                            <li class="list_prev">
+                                <div><span>이전글<i></i></span></div>
+                                <div>
+                                	<c:choose>
+										<c:when test="${empty prevNttIdNSj}">
+											이전글이 없습니다.
+										</c:when>
+										<c:otherwise>
+											<c:set var="prevNttId" value="${fn:split(prevNttIdNSj, '|')[0]}" />
+											<c:set var="prevNttSj" value="${fn:split(prevNttIdNSj, '|')[1]}" />
+											<c:set var="prevNttDate" value="${fn:split(prevNttIdNSj, '|')[2]}" />
+											<a href="#" onclick="fn_egov_select_detail('<c:out value='${result.bbsId}'/>' , '<c:out value='${prevNttId}'/>'); return false;" title="현재창 이전글이동">
+												<c:out value="${prevNttSj}" />
+											</a>
+											<span class="nb_date"><c:out value="${prevNttDate}" /></span>
+										</c:otherwise>
+									</c:choose>	
+                                	<!-- <a href="#none">[공지] 세금계산서 발행 안내</a> -->
+                                </div>
+                            </li>
+                            <li class="list_next">
+                                <div><span>다음글<i></i></span></div>
+                                <div>
+                                	<c:choose>
+										<c:when test="${empty nextNttIdNSj}">
+											다음글이 없습니다.
+										</c:when>
+										<c:otherwise>
+											<c:set var="nextNttId" value="${fn:split(nextNttIdNSj, '|')[0]}" />
+											<c:set var="nextNttSj" value="${fn:split(nextNttIdNSj, '|')[1]}" />
+											<c:set var="nextNttDate" value="${fn:split(nextNttIdNSj, '|')[2]}" />
+											<a href="#" onclick="fn_egov_select_detail('<c:out value='${result.bbsId}'/>' , '<c:out value='${nextNttId}'/>'); return false;" title="현재창 다음글이동">
+												<c:out value="${nextNttSj}" />
+											</a>
+											<span class="nb_date"><c:out value="${nextNttDate}" /></span>
+										</c:otherwise>
+									</c:choose>
+                                	<!-- <a href="#none">[공지] 문자온 6월 30일 정식 서비스 오픈 안내</a> -->
+                                <div>
+                            </li>
+                        </ul>
+                    </div>
+                    </div>
+				</div><!-- 고객센터 - 상세페이지 -->
+				
+            </div><!--// send top -->
+        
+</body>
+
src/main/webapp/WEB-INF/jsp/web/custom/MsgCustomView.jsp
--- src/main/webapp/WEB-INF/jsp/web/custom/MsgCustomView.jsp
+++ src/main/webapp/WEB-INF/jsp/web/custom/MsgCustomView.jsp
@@ -1,482 +1,482 @@
-<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
-<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
-<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
-<!DOCTYPE html>
-<html lang="ko">
-
-<head>
-<meta charset="UTF-8">
-<meta http-equiv="X-UA-Compatible" content="IE=edge">
-<title>문자온</title>
-
-<script type="text/javascript">
-var pageType = '${msgcampain}';
-var loginVO = '${loginVO}';
-var popCustomScrT=0;
-$(document).ready(function(){
-	
-	// 맞춤제작 셈플 리스트	
-	customSampleListAjax(1);
-	
-	customPopup();
-	customPopupDetail();
-	
-	// 맞춤제작 팝업 내보관함 리스트 로그인이 완료된 경우에만 로드되도록
-	if(loginVO != "" && loginVO != null){
-		myCustomListAjax(1);
-	}
-	
-	// 전체,기업, 개인 선택 옵션 처리
-	$('.tDep1_mType').click(function(){
-		
-		var mType = $(this).find('.on_active').text();
-		var form = document.customSampleForm;
-		
-		if(mType == "전체"){
-			
-			form.memberType.value = "";
-			
-		}else if(mType == "기업"){
-			
-			form.memberType.value = "B";
-			
-		}else{
-			
-			form.memberType.value = "P";
-			
-		}
-		
-		//문자 리스트 불러오기
-		form.letterType.value = "C";
-		form.categoryCode.value = "";
-		form.hashTag.value = "";
-		form.pageIndex.value = 1;
-		
-		//문자 리스트 불러오기
-		customSampleListAjax(1);
-	});
-	
-	$('.tDep1_cateCode').click(function(){ // 카테고리 선택 시 옵션 처리
-		
-		var cateCode = $(this).find('.on').attr("value");
-		var form = document.customSampleForm;
-		
-		if(cateCode == "all"){ //전체 선택시
-			cateCode = "";	
-		} else {
-			//카테고리 코드 클릭 시 해쉬태그 초기화 후 전체 선택
-			form.hashTag.value="";
-			$('.tDep2_hashTag').find('.on').removeClass('on');
-			$('.tDep2_hashTag').find('.hashAll').addClass('on');
-		}
-		
-		form.categoryCode.value = cateCode;
-		form.pageIndex.value = 1;
-		
-		// 맞춤제작 셈플 리스트
-		var pageUnit = $("#CPageUnit").val();
-		customSampleListAjax(1);
-	});
-	
-	$('.tDep2_hashTag').click(function(){ //해시 태그 선택 시 옵션 처리
-		var hashTag = $(this).find('.on').attr("value");
-		var form = document.customSampleForm;
-		
-		//해쉬태그 클릭 시 카테고리코드 초기화 후 전체 선택
-		form.categoryCode.value="";
-		$('.tDep1_cateCode').find('.on').removeClass('on');
-		$('.tDep1_cateCode').find('.cateAll').addClass('on');
-		
-		form.hashTag.value = hashTag;
-		form.pageIndex.value = 1;
-		
-		//문자 리스트 불러오기
-		customSampleListAjax(1);
-	});
-	
-	if(pageType == "msgcampain"){
-		$(".tDep1_cateCode a").each(function(index, item){
-			if($(this).text() == "선거"){
-				$('.tDep1_cateCode').find('.on').removeClass('on');
-				$(this).addClass('on');
-			}
-		})
-	}
-});
-
-function fnCPageUnit(){
-	var pageUnit = $("#CPageUnit").val();
-	document.customSampleForm.pageUnit.value = pageUnit;
-	customSampleListAjax(1);
-}
-
-function fnMPageUnit(){
-	var pageUnit = $("#myPageUnit").val();
-	document.myCustomForm.pageUnit.value = pageUnit;
-	customSampleListAjax(1);
-}
-
-// 맞춤제작 셈플 리스트 
-function customSampleListAjax(pageNo){
-	document.customSampleForm.pageIndex.value = pageNo;
-	var sendData= $(document.customSampleForm).serializeArray();
-	$("#customSampleLoad").load("/web/mjon/custom/selectMsgCustomSampleListAjax.do", sendData ,function(response, status, xhr){
-		photoLayerView();
-	});
-}
-
-//맞춤제작 내보관함 리스트 
-function myCustomListAjax(pageNo){
-	
-	if(!fn_G_cmndataValueChk("startDate", "endDate", 12)){
-		return;
-	};
-	
-	document.myCustomForm.pageIndex.value = pageNo;
-	var sendData= $(document.myCustomForm).serializeArray();
-	$("#myCustomLoad").load("/web/mjon/custom/selectMsgMyCustomListAjax.do", sendData ,function(response, status, xhr){
-		photoLayerView();
-	});
-}
-
-//맞춤제작 내보관함 정렬 조회
-function fnMyCustomSearchListOrd(){
-	
-	var form = document.myCustomForm;
-	var sortOrd = form.searchSortOrd.value;
-	
-	if(sortOrd == 'desc'){
-		
-		form.searchSortOrd.value = 'asc';
-		$('#sortCnd').text('등록순');
-		
-	}else{
-		
-		form.searchSortOrd.value = 'desc';
-		$('#sortCnd').text('최근순');
-		
-	}
-	
-	//내문자함 내용 검색하기
-	myCustomListAjax(1);
-	
-}
-//맞춤제작 등록 Popup 
-function customPopup(){
-	$("#customPopup").load("/web/mjon/custom/selectMsgCustomPopupAjax.do", "" ,function(response, status, xhr){
-		popupImgList(1);
-	});
-}
-
-function openMsgCustomPopup() {
-	if(loginVO == "" || loginVO == null){
-		alert("로그인 후 이용이 가능합니다.");
-		return false;
-	} else {
-		$("#customPopupOpen").trigger("click");
-	}
-	$("#customType04").hide();
-	popCustomScrT=$(window).scrollTop();
-	popScrTarget();
-}
-
-//맞춤제작 등록 Popup 
-function customPopupDetail(){
-	$("#customPopupDetail").load("/web/mjon/custom/MsgCustomVeiwPopupAjax.do", "" ,function(response, status, xhr){
-		
-	});
-}
-
-function linkPhoPage(pageNo){
-	customSampleListAjax(pageNo);
-}
-
-function myCustomPage(pageNo){
-	myCustomListAjax(pageNo);
-}
-
-function fnCustomImgSendMsg(atchFileId, fileSn, strImgPath){
-	
-	var form = document.customImgSendForm;
-	
-	form.atchFileId1.value = atchFileId;
-	form.fileSn.value = fileSn;
-	form.strImgPath.value = strImgPath;
-	form.customImgFlag.value = "Y";
-	
-	form.action = "<c:url value='/web/mjon/msgdata/selectMsgDataView.do'/>";
-	form.submit();
-	
-}
-
-$(function(){
-	sitemapTabView();
-});
-function sitemapTabView(){
-	var oldUrl=window.location.href;
-	var idx=oldUrl.slice(-1);
-	var n=oldUrl.indexOf('?');
-	var changeUrl=oldUrl.slice(0,n);
-	
-	/* if(typeof (history.pushState) != 'undefined' && oldUrl.indexOf('?') !== -1){
-		history.pushState(null, null, changeUrl);
-	}else{} */
-	if(oldUrl.indexOf('?') !== -1){
-		$('.tabType4 li').removeClass('active').eq(idx-1).addClass('active');
-		$('.custom_content').removeClass('current');
-		$('.custom_content.custom'+idx).addClass('current');
-		
-		TabType4(this, idx);
-	}
-}
-
-$(window).on('load',function(){
-	setTimeout(function(){
-		popScrTarget();
-	},500);
-});
-
-function popScrTarget(){
-	var closeTarget=$('.custom_layer .tooltip-close');
-	closeTarget.attr('onclick','popScrCloseSetting();');
-}
-
-function popScrCloseSetting(){
-	setTimeout(function(){
-		$(window).scrollTop(popCustomScrT);	
-	},1);
-}
-</script>
-</head>
-<body>
-	<!-- content 영역 -->
-	<div class="inner">
-		<input type="hidden" id="msgcampain" value="${msgcampain}"/>
-		<!-- 공통 visal -->
-		<div class="custom_visual">
-			<div class="custom_visual_image"></div>
-		</div>
-		<!-- send top -->
-		<div class="send_top">
-			<!-- tab button -->
-			<ul class="tabType4">
-				<li class="tab active">
-					<button type="button" onclick="TabType4(this,'1');">맞춤제작 샘플</button>
-				</li>
-				<li class="tab">
-					<button type="button" onclick="TabType4(this,'2');">제작방법 및 이용안내</button>
-				</li>
-				<li class="tab">
-					<button type="button" onclick="TabType4(this,'3');">내보관함</button>
-				</li>
-			</ul>
-			<form id="customImgSendForm" name="customImgSendForm" method="post">
-				<input type="hidden" id="atchFileId1" name="atchFileId1" value=""/>
-				<input type="hidden" id="fileSn" name="fileSn" value=""/>
-				<input type="hidden" id="strImgPath" name="strImgPath" value=""/>
-				<input type="hidden" id="customImgFlag" name="customImgFlag" value="N"/>
-			</form>
-			<!--// tab button -->
-			<form id="customSampleForm" name="customSampleForm" method="post">
-				<input type="hidden" name="pageIndex" />
-				<input type="hidden" name="hashTag" id="hashTag" />
-				<input type="hidden" name="letterType" id="letterType" />
-				<input type="hidden" name="memberType" id="memberType" />
-				<input type="hidden" name="pageUnit" id="pageUnit" value="${searchVO.pageUnit}"/>
-				<input type="hidden" name="categoryCode" id="categoryCode" 
-				<c:if test="${msgcampain eq 'msgcampain'}">
-				value="${searchVO.categoryCode}"
-				</c:if>
-				/>
-				<!-- tab content1 맞춤제작 샘플 -->
-				<div class="custom_content current custom1" id="tab4_1"> 
-					<div class="area_tabs">
-						<div class="top_tab">
-							<!-- <div class="tab_depth1 tDep1_mType">
-								<a href="#none" class="on" value="">전체</a>
-								<a href="#none" value="B">기업</a>
-								<a href="#none" class="on" value="P">개인</a>
-								<div class="on_active">전체</div>
-							</div> -->
-							<div class="customReq">
-								<input type="hidden" id="customPopupOpen" data-tooltip="popup01">
-								<button type="button" onclick="openMsgCustomPopup(); return false;"><i></i>맞춤제작 요청</button>
-							</div>
-							<select name="CPageUnit" id="CPageUnit" class="selType2" onChange="fnCPageUnit(); return false;">
-								<option value="10">2줄보기</option>
-								<option value="20">4줄보기</option>
-								<option value="30">6줄보기</option>
-							</select>
-						</div>
-						<div class="bottom_tab">
-							<div class="tab_depth3 tDep1_cateCode">
-								<a href="#none" class="on cateAll" value="">All</a>
-								<a href="#none" value="best">BEST</a>
-								<c:forEach var="cateList" items="${cateCodeList}" varStatus="status">
-									<a href="#none" value="<c:out value='${cateList.cateCode}'/>"><c:out value="${cateList.cateNm}"/></a>
-								</c:forEach>
-							</div>
-							<div class="tab_depth4 tDep2_hashTag">
-								<a href="#none" class="on hashAll" value="">전체</a>
-								<c:forEach var="hashList" items="${hashTagList}" varStatus="status">
-									<a href="#none" value="${hashList.hashNm}">#<c:out value="${hashList.hashNm}"/></a>
-								</c:forEach>
-							</div>
-						</div>
-					</div>
-					<div id="customSampleLoad">
-					</div>
-				</div>
-				<!--// tab content1 맞춤제작 샘플 -->
-			</form>
-			<!-- tab content2 제작방법 및 이용안내 -->
-			<div class="custom_content custom2" id="tab4_2">
-				<div class="heading">
-					<h2>제작방법 및 이용안내</h2>
-				</div>
-				<div class="cont_top">
-					<table>
-						<caption>제작방법 및 이용안내에 대한 구분, 용도, 가격, 제공방법 표</caption>
-						<colgroup>
-							<col style="width: 520px;">
-							<col style="width: 15%;">
-							<col style="width: 15%;">
-							<col style="width: 25%;">
-						</colgroup>
-						<thead>
-							<tr>
-								<th scope="col">구분</th>
-								<th scope="col">용도</th>
-								<th scope="col">가격<span>(VAT별도)</span></th>
-								<th scope="col">구분</th>
-							</tr>
-						</thead>
-						<tbody>
-							<tr>
-								<td>문자온 샘플 수정(글자, 색상, 폰트 등)</td>
-								<td>문자/카톡</td>
-								<td>${customSamplePrice}원</td>
-								<td>내보관함/카톡/이메일</td>
-							</tr>
-							<tr>
-								<td>이미지 편집(첨부이미지 1장)</td>
-								<td>문자/카톡</td>
-								<td>${customEditPrice}원</td>
-								<td>내보관함/카톡/이메일</td>
-							</tr>
-							<tr>
-								<td>이미지 편집(첨부이미지 3장이하)</td>
-								<td>문자/카톡</td>
-								<td>${customEdit3Price}원</td>
-								<td>내보관함/카톡/이메일</td>
-							</tr>
-							<tr>
-								<td>텍스트 단순수정</td>
-								<td>문자/카톡</td>
-								<td>${customTextPrice}원</td>
-								<td>내보관함/카톡/이메일</td>
-							</tr>
-						</tbody>
-					</table>
-					<div class="custom_notice">
-						<div>
-							<i></i>
-							<p>유의사항</p>
-						</div>
-						<ul>
-							<li>
-								<p>- 모든 완성본은 1장만 제공됩니다.</p>
-								<p>- 제작 완료 후 추가 수정 시 별도 비용이 발생됩니다.</p>
-							</li>
-							<li>
-								<p>- 제작기간은 영업일 기준 1~3일 정도 소요됩니다.</p>
-								<p>- 제작 완료된 이미지는 내보관함에 자동 저장됩니다.</p>
-							</li>
-							<li>
-								<p>- PSD 원본 파일은 제공하지 않습니다.</p>
-								<p>- 제작비용은 신청 시 즉시 차감됩니다.</p>
-							</li>
-						</ul>
-					</div>
-				</div>
-				<div class="cont_bottom">
-					<div class="custom_step">
-						<div class="step_title">
-							<p><span>샘플</span> 제작 요청방법</p>
-							<span class="summary">전문 디자이너가 직접 제작하는 고퀄리티 맞춤제작 서비스</span>
-						</div>
-						<ol>
-							<li>
-								<div class="step">STEP <strong>01</strong></div>
-								<div class="text">문자온 문자 샘플 목록에서<br><strong>원하는 이미지 선택</strong></div>
-							</li>
-							<li>
-								<div class="step">STEP <strong>02</strong></div>
-								<div class="text">작업 요청내역 입력 후<br><strong>신청하기 버튼 클릭</strong></div>
-							</li>
-							<li>
-								<div class="step">STEP <strong>03</strong></div>
-								<div class="text"><strong>내보관함</strong>에서<br>완성된 이미지 확인<span>(문자, 카톡 등)</span></div>
-							</li>
-						</ol>
-					</div>
-				</div>
-			</div>
-			<!--// tab content2 제작방법 및 이용안내  -->
-			
-			<!-- tab content3 내 보관함 -->
-			<form id="myCustomForm" name="myCustomForm" method="post">
-				<input type="hidden" name="pageIndex" />
-				<input type="hidden" name="pageUnit" id="pageUnit"  value="${searchVO.pageUnit}"/>
-				<input name="searchSortOrd" type="hidden" value="desc"/>
-				<div class="custom_content custom3" id="tab4_3">
-					<div class="search_wrap clearfix">
-						<div class="btn_left">
-							<span>· 기간</span>
-							<div class="calendar_wrap">
-								<input type="text" class="startDate inp calendar" title="검색 시작일" id="startDate" name="searchStartDate" value="${myStartDate}" data-datecontrol="true">
-								<span class="dateEtc">~</span>
-								<input type="text" class="endDate inp calendar" title="검색 종료일" id="endDate" name="searchEndDate" value="${myEndDate}" data-datecontrol="true">
-							</div>
-							<div class="search">
-<!-- 								<label for="searchWord" class="label"></label> -->
-<!-- 								<input type="text" id="searchWord" name="searchWord" placeholder="내보관함 검색" onfocus="this.placeholder=''" onblur="this.placeholder='내보관함 검색'"> -->
-								<button type="button" class="btnType btnType2" onclick="javascript:myCustomListAjax(1); return false;">검색</button>
-							</div>
-						</div>
-						<div class="btn_right">
-							<button type="button" id="sortOrd" name="sortOrd" onClick="javascript:fnMyCustomSearchListOrd(); return false;"><span id="sortCnd">최근순</span><i></i></button>
-							<!-- <label for="" class="label">검색조건 선택</label>
-							<select name="" id="" class="selType2">
-								<option value="">전체보기</option>
-								<option value="">전체보기</option>
-								<option value="">전체보기</option>
-							</select> -->
-							<label for="pageUnit" class="label"></label>
-							<select name="myPageUnit" id="myPageUnit" class="selType2" onChange="fnMPageUnit(); return false;">
-								<option value="10">2줄보기</option>
-								<option value="20">4줄보기</option>
-								<option value="30">6줄보기</option>
-							</select>
-						</div>
-					</div>
-					<div id="myCustomLoad">
-					</div>
-				</div>
-			</form>
-			<!--//tab content3 내 보관함 -->
-			<!-- 맞춤제작 요청 레이어 팝업 -->
-			<div class="tooltip-wrap" id="customPopup">
-			</div>
-			<!--// 맞춤제작 요청 레이어 팝업 -->
-			<!-- 내 보관함 상세보기 레이어 팝업 -->
-			<div class="tooltip-wrap" id="customPopupDetail">
-			</div>
-			<!--// 내 보관함 상세보기 레이어 팝업 -->
-		</div>
-		<!--// send top -->
-	</div>
-	<!--// content 영역 -->
-</body>
-</html>
+<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
+<!DOCTYPE html>
+<html lang="ko">
+
+<head>
+<meta charset="UTF-8">
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<title>문자온</title>
+
+<script type="text/javascript">
+var pageType = '${msgcampain}';
+var loginVO = '${loginVO}';
+var popCustomScrT=0;
+$(document).ready(function(){
+	
+	// 맞춤제작 셈플 리스트	
+	customSampleListAjax(1);
+	
+	customPopup();
+	customPopupDetail();
+	
+	// 맞춤제작 팝업 내보관함 리스트 로그인이 완료된 경우에만 로드되도록
+	if(loginVO != "" && loginVO != null){
+		myCustomListAjax(1);
+	}
+	
+	// 전체,기업, 개인 선택 옵션 처리
+	$('.tDep1_mType').click(function(){
+		
+		var mType = $(this).find('.on_active').text();
+		var form = document.customSampleForm;
+		
+		if(mType == "전체"){
+			
+			form.memberType.value = "";
+			
+		}else if(mType == "기업"){
+			
+			form.memberType.value = "B";
+			
+		}else{
+			
+			form.memberType.value = "P";
+			
+		}
+		
+		//문자 리스트 불러오기
+		form.letterType.value = "C";
+		form.categoryCode.value = "";
+		form.hashTag.value = "";
+		form.pageIndex.value = 1;
+		
+		//문자 리스트 불러오기
+		customSampleListAjax(1);
+	});
+	
+	$('.tDep1_cateCode').click(function(){ // 카테고리 선택 시 옵션 처리
+		
+		var cateCode = $(this).find('.on').attr("value");
+		var form = document.customSampleForm;
+		
+		if(cateCode == "all"){ //전체 선택시
+			cateCode = "";	
+		} else {
+			//카테고리 코드 클릭 시 해쉬태그 초기화 후 전체 선택
+			form.hashTag.value="";
+			$('.tDep2_hashTag').find('.on').removeClass('on');
+			$('.tDep2_hashTag').find('.hashAll').addClass('on');
+		}
+		
+		form.categoryCode.value = cateCode;
+		form.pageIndex.value = 1;
+		
+		// 맞춤제작 셈플 리스트
+		var pageUnit = $("#CPageUnit").val();
+		customSampleListAjax(1);
+	});
+	
+	$('.tDep2_hashTag').click(function(){ //해시 태그 선택 시 옵션 처리
+		var hashTag = $(this).find('.on').attr("value");
+		var form = document.customSampleForm;
+		
+		//해쉬태그 클릭 시 카테고리코드 초기화 후 전체 선택
+		form.categoryCode.value="";
+		$('.tDep1_cateCode').find('.on').removeClass('on');
+		$('.tDep1_cateCode').find('.cateAll').addClass('on');
+		
+		form.hashTag.value = hashTag;
+		form.pageIndex.value = 1;
+		
+		//문자 리스트 불러오기
+		customSampleListAjax(1);
+	});
+	
+	if(pageType == "msgcampain"){
+		$(".tDep1_cateCode a").each(function(index, item){
+			if($(this).text() == "선거"){
+				$('.tDep1_cateCode').find('.on').removeClass('on');
+				$(this).addClass('on');
+			}
+		})
+	}
+});
+
+function fnCPageUnit(){
+	var pageUnit = $("#CPageUnit").val();
+	document.customSampleForm.pageUnit.value = pageUnit;
+	customSampleListAjax(1);
+}
+
+function fnMPageUnit(){
+	var pageUnit = $("#myPageUnit").val();
+	document.myCustomForm.pageUnit.value = pageUnit;
+	customSampleListAjax(1);
+}
+
+// 맞춤제작 셈플 리스트 
+function customSampleListAjax(pageNo){
+	document.customSampleForm.pageIndex.value = pageNo;
+	var sendData= $(document.customSampleForm).serializeArray();
+	$("#customSampleLoad").load("/web/mjon/custom/selectMsgCustomSampleListAjax.do", sendData ,function(response, status, xhr){
+		photoLayerView();
+	});
+}
+
+//맞춤제작 내보관함 리스트 
+function myCustomListAjax(pageNo){
+	
+	if(!fn_G_cmndataValueChk("startDate", "endDate", 12)){
+		return;
+	};
+	
+	document.myCustomForm.pageIndex.value = pageNo;
+	var sendData= $(document.myCustomForm).serializeArray();
+	$("#myCustomLoad").load("/web/mjon/custom/selectMsgMyCustomListAjax.do", sendData ,function(response, status, xhr){
+		photoLayerView();
+	});
+}
+
+//맞춤제작 내보관함 정렬 조회
+function fnMyCustomSearchListOrd(){
+	
+	var form = document.myCustomForm;
+	var sortOrd = form.searchSortOrd.value;
+	
+	if(sortOrd == 'desc'){
+		
+		form.searchSortOrd.value = 'asc';
+		$('#sortCnd').text('등록순');
+		
+	}else{
+		
+		form.searchSortOrd.value = 'desc';
+		$('#sortCnd').text('최근순');
+		
+	}
+	
+	//내문자함 내용 검색하기
+	myCustomListAjax(1);
+	
+}
+//맞춤제작 등록 Popup 
+function customPopup(){
+	$("#customPopup").load("/web/mjon/custom/selectMsgCustomPopupAjax.do", "" ,function(response, status, xhr){
+		popupImgList(1);
+	});
+}
+
+function openMsgCustomPopup() {
+	if(loginVO == "" || loginVO == null){
+		alert("로그인 후 이용이 가능합니다.");
+		return false;
+	} else {
+		$("#customPopupOpen").trigger("click");
+	}
+	$("#customType04").hide();
+	popCustomScrT=$(window).scrollTop();
+	popScrTarget();
+}
+
+//맞춤제작 등록 Popup 
+function customPopupDetail(){
+	$("#customPopupDetail").load("/web/mjon/custom/MsgCustomVeiwPopupAjax.do", "" ,function(response, status, xhr){
+		
+	});
+}
+
+function linkPhoPage(pageNo){
+	customSampleListAjax(pageNo);
+}
+
+function myCustomPage(pageNo){
+	myCustomListAjax(pageNo);
+}
+
+function fnCustomImgSendMsg(atchFileId, fileSn, strImgPath){
+	
+	var form = document.customImgSendForm;
+	
+	form.atchFileId1.value = atchFileId;
+	form.fileSn.value = fileSn;
+	form.strImgPath.value = strImgPath;
+	form.customImgFlag.value = "Y";
+	
+	form.action = "<c:url value='/web/mjon/msgdata/selectMsgDataView.do'/>";
+	form.submit();
+	
+}
+
+$(function(){
+	sitemapTabView();
+});
+function sitemapTabView(){
+	var oldUrl=window.location.href;
+	var idx=oldUrl.slice(-1);
+	var n=oldUrl.indexOf('?');
+	var changeUrl=oldUrl.slice(0,n);
+	
+	/* if(typeof (history.pushState) != 'undefined' && oldUrl.indexOf('?') !== -1){
+		history.pushState(null, null, changeUrl);
+	}else{} */
+	if(oldUrl.indexOf('?') !== -1){
+		$('.tabType4 li').removeClass('active').eq(idx-1).addClass('active');
+		$('.custom_content').removeClass('current');
+		$('.custom_content.custom'+idx).addClass('current');
+		
+		TabType4(this, idx);
+	}
+}
+
+$(window).on('load',function(){
+	setTimeout(function(){
+		popScrTarget();
+	},500);
+});
+
+function popScrTarget(){
+	var closeTarget=$('.custom_layer .tooltip-close');
+	closeTarget.attr('onclick','popScrCloseSetting();');
+}
+
+function popScrCloseSetting(){
+	setTimeout(function(){
+		$(window).scrollTop(popCustomScrT);	
+	},1);
+}
+</script>
+</head>
+<body>
+	<!-- content 영역 -->
+	<div class="inner">
+		<input type="hidden" id="msgcampain" value="${msgcampain}"/>
+		<!-- 공통 visal -->
+		<div class="custom_visual">
+			<div class="custom_visual_image"></div>
+		</div>
+		<!-- send top -->
+		<div class="send_top">
+			<!-- tab button -->
+			<ul class="tabType4">
+				<li class="tab active">
+					<button type="button" onclick="TabType4(this,'1');">맞춤제작 샘플</button>
+				</li>
+				<li class="tab">
+					<button type="button" onclick="TabType4(this,'2');">제작방법 및 이용안내</button>
+				</li>
+				<li class="tab">
+					<button type="button" onclick="TabType4(this,'3');">내보관함</button>
+				</li>
+			</ul>
+			<form id="customImgSendForm" name="customImgSendForm" method="post">
+				<input type="hidden" id="atchFileId1" name="atchFileId1" value=""/>
+				<input type="hidden" id="fileSn" name="fileSn" value=""/>
+				<input type="hidden" id="strImgPath" name="strImgPath" value=""/>
+				<input type="hidden" id="customImgFlag" name="customImgFlag" value="N"/>
+			</form>
+			<!--// tab button -->
+			<form id="customSampleForm" name="customSampleForm" method="post">
+				<input type="hidden" name="pageIndex" />
+				<input type="hidden" name="hashTag" id="hashTag" />
+				<input type="hidden" name="letterType" id="letterType" />
+				<input type="hidden" name="memberType" id="memberType" />
+				<input type="hidden" name="pageUnit" id="pageUnit" value="${searchVO.pageUnit}"/>
+				<input type="hidden" name="categoryCode" id="categoryCode" 
+				<c:if test="${msgcampain eq 'msgcampain'}">
+				value="${searchVO.categoryCode}"
+				</c:if>
+				/>
+				<!-- tab content1 맞춤제작 샘플 -->
+				<div class="custom_content current custom1" id="tab4_1"> 
+					<div class="area_tabs">
+						<div class="top_tab">
+							<!-- <div class="tab_depth1 tDep1_mType">
+								<a href="#none" class="on" value="">전체</a>
+								<a href="#none" value="B">기업</a>
+								<a href="#none" class="on" value="P">개인</a>
+								<div class="on_active">전체</div>
+							</div> -->
+							<div class="customReq">
+								<input type="hidden" id="customPopupOpen" data-tooltip="popup01">
+								<button type="button" onclick="openMsgCustomPopup(); return false;"><i></i>맞춤제작 요청</button>
+							</div>
+							<select name="CPageUnit" id="CPageUnit" class="selType2" onChange="fnCPageUnit(); return false;">
+								<option value="10">2줄보기</option>
+								<option value="20">4줄보기</option>
+								<option value="30">6줄보기</option>
+							</select>
+						</div>
+						<div class="bottom_tab">
+							<div class="tab_depth3 tDep1_cateCode">
+								<a href="#none" class="on cateAll" value="">All</a>
+								<a href="#none" value="best">BEST</a>
+								<c:forEach var="cateList" items="${cateCodeList}" varStatus="status">
+									<a href="#none" value="<c:out value='${cateList.cateCode}'/>"><c:out value="${cateList.cateNm}"/></a>
+								</c:forEach>
+							</div>
+							<div class="tab_depth4 tDep2_hashTag">
+								<a href="#none" class="on hashAll" value="">전체</a>
+								<c:forEach var="hashList" items="${hashTagList}" varStatus="status">
+									<a href="#none" value="${hashList.hashNm}">#<c:out value="${hashList.hashNm}"/></a>
+								</c:forEach>
+							</div>
+						</div>
+					</div>
+					<div id="customSampleLoad">
+					</div>
+				</div>
+				<!--// tab content1 맞춤제작 샘플 -->
+			</form>
+			<!-- tab content2 제작방법 및 이용안내 -->
+			<div class="custom_content custom2" id="tab4_2">
+				<div class="heading">
+					<h2>제작방법 및 이용안내</h2>
+				</div>
+				<div class="cont_top">
+					<table>
+						<caption>제작방법 및 이용안내에 대한 구분, 용도, 가격, 제공방법 표</caption>
+						<colgroup>
+							<col style="width: 520px;">
+							<col style="width: 15%;">
+							<col style="width: 15%;">
+							<col style="width: 25%;">
+						</colgroup>
+						<thead>
+							<tr>
+								<th scope="col">구분</th>
+								<th scope="col">용도</th>
+								<th scope="col">가격<span>(VAT별도)</span></th>
+								<th scope="col">구분</th>
+							</tr>
+						</thead>
+						<tbody>
+							<tr>
+								<td>문자온 샘플 수정(글자, 색상, 폰트 등)</td>
+								<td>문자/카톡</td>
+								<td>${customSamplePrice}원</td>
+								<td>내보관함/카톡/이메일</td>
+							</tr>
+							<tr>
+								<td>이미지 편집(첨부이미지 1장)</td>
+								<td>문자/카톡</td>
+								<td>${customEditPrice}원</td>
+								<td>내보관함/카톡/이메일</td>
+							</tr>
+							<tr>
+								<td>이미지 편집(첨부이미지 3장이하)</td>
+								<td>문자/카톡</td>
+								<td>${customEdit3Price}원</td>
+								<td>내보관함/카톡/이메일</td>
+							</tr>
+							<tr>
+								<td>텍스트 단순수정</td>
+								<td>문자/카톡</td>
+								<td>${customTextPrice}원</td>
+								<td>내보관함/카톡/이메일</td>
+							</tr>
+						</tbody>
+					</table>
+					<div class="custom_notice">
+						<div>
+							<i></i>
+							<p>유의사항</p>
+						</div>
+						<ul>
+							<li>
+								<p>- 모든 완성본은 1장만 제공됩니다.</p>
+								<p>- 제작 완료 후 추가 수정 시 별도 비용이 발생됩니다.</p>
+							</li>
+							<li>
+								<p>- 제작기간은 영업일 기준 1~3일 정도 소요됩니다.</p>
+								<p>- 제작 완료된 이미지는 내보관함에 자동 저장됩니다.</p>
+							</li>
+							<li>
+								<p>- PSD 원본 파일은 제공하지 않습니다.</p>
+								<p>- 제작비용은 신청 시 즉시 차감됩니다.</p>
+							</li>
+						</ul>
+					</div>
+				</div>
+				<div class="cont_bottom">
+					<div class="custom_step">
+						<div class="step_title">
+							<p><span>샘플</span> 제작 요청방법</p>
+							<span class="summary">전문 디자이너가 직접 제작하는 고퀄리티 맞춤제작 서비스</span>
+						</div>
+						<ol>
+							<li>
+								<div class="step">STEP <strong>01</strong></div>
+								<div class="text">문자온 문자 샘플 목록에서<br><strong>원하는 이미지 선택</strong></div>
+							</li>
+							<li>
+								<div class="step">STEP <strong>02</strong></div>
+								<div class="text">작업 요청내역 입력 후<br><strong>신청하기 버튼 클릭</strong></div>
+							</li>
+							<li>
+								<div class="step">STEP <strong>03</strong></div>
+								<div class="text"><strong>내보관함</strong>에서<br>완성된 이미지 확인<span>(문자, 카톡 등)</span></div>
+							</li>
+						</ol>
+					</div>
+				</div>
+			</div>
+			<!--// tab content2 제작방법 및 이용안내  -->
+			
+			<!-- tab content3 내 보관함 -->
+			<form id="myCustomForm" name="myCustomForm" method="post">
+				<input type="hidden" name="pageIndex" />
+				<input type="hidden" name="pageUnit" id="pageUnit"  value="${searchVO.pageUnit}"/>
+				<input name="searchSortOrd" type="hidden" value="desc"/>
+				<div class="custom_content custom3" id="tab4_3">
+					<div class="search_wrap clearfix">
+						<div class="btn_left">
+							<span>· 기간</span>
+							<div class="calendar_wrap">
+								<input type="text" class="startDate inp calendar" title="검색 시작일" id="startDate" name="searchStartDate" value="${myStartDate}" data-datecontrol="true">
+								<span class="dateEtc">~</span>
+								<input type="text" class="endDate inp calendar" title="검색 종료일" id="endDate" name="searchEndDate" value="${myEndDate}" data-datecontrol="true">
+							</div>
+							<div class="search">
+<!-- 								<label for="searchWord" class="label"></label> -->
+<!-- 								<input type="text" id="searchWord" name="searchWord" placeholder="내보관함 검색" onfocus="this.placeholder=''" onblur="this.placeholder='내보관함 검색'"> -->
+								<button type="button" class="btnType btnType2" onclick="javascript:myCustomListAjax(1); return false;">검색</button>
+							</div>
+						</div>
+						<div class="btn_right">
+							<button type="button" id="sortOrd" name="sortOrd" onClick="javascript:fnMyCustomSearchListOrd(); return false;"><span id="sortCnd">최근순</span><i></i></button>
+							<!-- <label for="" class="label">검색조건 선택</label>
+							<select name="" id="" class="selType2">
+								<option value="">전체보기</option>
+								<option value="">전체보기</option>
+								<option value="">전체보기</option>
+							</select> -->
+							<label for="pageUnit" class="label"></label>
+							<select name="myPageUnit" id="myPageUnit" class="selType2" onChange="fnMPageUnit(); return false;">
+								<option value="10">2줄보기</option>
+								<option value="20">4줄보기</option>
+								<option value="30">6줄보기</option>
+							</select>
+						</div>
+					</div>
+					<div id="myCustomLoad">
+					</div>
+				</div>
+			</form>
+			<!--//tab content3 내 보관함 -->
+			<!-- 맞춤제작 요청 레이어 팝업 -->
+			<div class="tooltip-wrap" id="customPopup">
+			</div>
+			<!--// 맞춤제작 요청 레이어 팝업 -->
+			<!-- 내 보관함 상세보기 레이어 팝업 -->
+			<div class="tooltip-wrap" id="customPopupDetail">
+			</div>
+			<!--// 내 보관함 상세보기 레이어 팝업 -->
+		</div>
+		<!--// send top -->
+	</div>
+	<!--// content 영역 -->
+</body>
+</html>
src/main/webapp/WEB-INF/jsp/web/msgdata/include/msgDataIncludeExcel.jsp
--- src/main/webapp/WEB-INF/jsp/web/msgdata/include/msgDataIncludeExcel.jsp
+++ src/main/webapp/WEB-INF/jsp/web/msgdata/include/msgDataIncludeExcel.jsp
@@ -1,904 +1,904 @@
-<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
-<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
-<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
-
-<script type="text/javascript" src="<c:url value='/publish/js/content.js'/>"></script>
-
-<script type="text/javascript">
-
-var $tableExcel = null; //엑셀입력 탭
-var $tableError = null; //엑셀입력 탭
-$(document).ready(function(){
-
-	//Tabulator AJAX Data Loading
-	$tableError = new Tabulator("#tabulator_error", {
-		height:"255px",
-		width:"100%",
-	    layout:"fitColumns",
-	    autoColumns:false,
-	    headerHozAlign:"center", 
-	    validationMode:"highlight",
-	    clipboard:false,
-	    clipboardCopySelector:"table",
-	    clipboardPasteAction:"insert", // insert, update, replace
-	    placeholder:"등록 팝업에서 휴대폰을 선택 후 확인해주세요.", //fit columns to width of table (optional)
-	 	columns:[ //Define Table Columns
-		 	{title:"이름", field:"name", hozAlign:"center", headerHozAlign: "center", width:125},
-		 	{title:"휴대폰", field:"phone", hozAlign:"center", headerHozAlign: "center", width:158},
-		 	{title:"미등록 결과", field:"result", hozAlign:"center", headerHozAlign: "center", width:125}
-	 	]
-	});
-	
-
-	//Tabulator AJAX Data Loading
-	$tableExcel = new Tabulator("#tabulator_excel", {
-		height:"255px",
-		width:"100%",
-	    layout:"fitColumns",
-	    autoColumns:false,
-	    headerHozAlign:"center", 
-	    validationMode:"highlight",
-	    clipboard:false,
-	    clipboardCopySelector:"table",
-	    clipboardPasteAction:"insert", // insert, update, replace
-	    placeholder:"Excel 파일을 업로드 해주세요.", //fit columns to width of table (optional)
-	 	columns:[ //Define Table Columns
-	 		{formatter:"rowSelection", titleFormatter:"rowSelection",clipboard:false, headerHozAlign:"center", hozAlign:"center", headerSort:false, cellClick:function(e, cell){
-	 	        cell.getRow().toggleSelect();
-		 		}
-		 	}, 
-			{formatter:"rownum", align:"center" ,title:"No", hozAlign:"center", headerHozAlign:"center", width:60},
-		 	{title:"A", field:"A", hozAlign:"center", headerHozAlign: "center", width:140, validator:["maxLength:100", "string"]},
-		 	{title:"B", field:"B", hozAlign:"center", headerHozAlign: "center", width:140, validator:["maxLength:100", "string"]},
-		 	{title:"C", field:"C", hozAlign:"center", headerHozAlign: "center", width:140, validator:["maxLength:100", "string"]},
-		 	{title:"D", field:"D", hozAlign:"center", headerHozAlign: "center", width:140, validator:["maxLength:100", "string"]},
-		 	{title:"E", field:"E", hozAlign:"center", headerHozAlign: "center", width:140, validator:["maxLength:100", "string"]},
-		 	{title:"F", field:"F", hozAlign:"center", headerHozAlign: "center", width:140, validator:["maxLength:100", "string"]}
-	 	],
-	 	validationFailed:function(cell, value, parameters){ // 유효성 체크 함수 
-	        var valid = cell.isValid();
-	 		if(!valid){
-	 			alert("양식에 맞지 않는 정보가 입력되었습니다.");
-	 			
-	 			//해당 셀 데이터 삭제
-	 			cell.setValue("");
-	 		}
-	 		return value % parameters.phone;
-	    },
-	});
-
-    $("#excelFile").on("change", function(event) {
-    	var fileInfo =  event.target.files;
-        if(fileInfo.length > 0){
-            excelFileChange(fileInfo[0]);
-        } else {
-            fn_loadRemoveActive(); // 파일이 선택되지 않은 경우 로딩 상태 제거
-            setTimeout(() => { $(this).val(''); }, 0);  // 파일 선택 초기화
-        }
-    });
-	
-
-
-    $(document).on('click', '#btnAddrMassClose', function() {
-    	// 대량등록 닫기
-    	setAddrMassClose();
-    });
-    
-
-    $(document).on('click', '#closeBtn', function() {
-    	// 대량등록 닫기
-    	setAddrMassClose();
-    });
-    
-
- // 엑셀등록 닫기
-	function setAddrMassClose() {
-		$tableExcel.clearData();
-		$("#excelRowTotCnt").text(0); //총건수 수정
-		$("#excelRowDupCnt").text(0); //중복건수 수정
-		$("#excelRowErrorCnt").text(0); //중복건수 수정
-		dupliPhoneDataRealList.length = 0;	// 중복 휴대폰번호 초기화
-		addrMassDupliSaveList = null;
-		
-		
-		// popup 영역
-		$tableError.clearData();
-		// 중복 카운트
-		$("#errorPopDupCnt").text(0);
-		// 에러 카운트
-		$("#errorPopErrorCnt").text(0);
-		// 
-		$("#errorPopTotCnt").text(0);
-
-		
-	}
-    
-  //#############################################################################################
-  //파일업로드 드래그앤 드롭
-  //#############################################################################################
-  var objDragAndDrop = $(".upload_area");
-  $(document).on("dragenter",".upload_area",function(e){
-    e.stopPropagation();
-    e.preventDefault();
-    //$(this).css('border', '2px solid #0B85A1');
-  });
-  $(document).on("dragover",".upload_area",function(e){
-    e.stopPropagation();
-    e.preventDefault();
-  });
-  $(document).on("drop",".upload_area",function(e){
-  	fn_loadAddActive();
-  	e.preventDefault();
-  	var files = e.originalEvent.dataTransfer.files;
-  	excelFileChange(files[0]);
-  });
-
-  $(document).on('dragenter', function (e){
-    e.stopPropagation();
-    e.preventDefault();
-  });
-  $(document).on('dragover', function (e){
-  	e.stopPropagation();
-  	e.preventDefault();
-  //objDragAndDrop.css('border', '2px dotted #0B85A1');
-  });
-  $(document).on('drop', function (e){
-    e.stopPropagation();
-    e.preventDefault();
-  });
-  //파일 드래그앤드롭 종료
-	
-	
-	
-	
-
-	//타이틀 select 선택 이벤트
-	 $('.field-selector').on('change', function() {
-		fn_loadAddActive();
-
-		setTimeout(() => { 
-			var selectedFields = [];
-			var isDuplicate = false;
-	
-			if($tableExcel.getData().length < 1){
-				alert('데이터 입력 후 선택해 주세요.');
-				$(this).val(""); 
-				fn_loadRemoveActive();
-				return false;
-			}
-			
-			// 중복체크
-			$('.field-selector').each(function() {
-				var selectedField = $(this).val();
-				if (selectedField) {
-					if (selectedFields.includes(selectedField)) {
-						alert("중복된 필드를 선택할 수 없습니다.");
-						$(this).val(""); // 중복 필드를 선택한 경우 빈 값으로 초기화
-						isDuplicate = true;
-						return false; // 반복문 종료
-					}
-					selectedFields.push(selectedField);
-				}
-			});
-	
-	
-			// 
-			updateTableFields($tableExcel);
-			
-			// 필드가 휴대폰이면 열 중복체크
-			if($(this).val() == 'addrPhoneNo'){
-				fn_phoneDupl($tableExcel);
-			}
-			fn_loadRemoveActive();
-
-		}, 0); // 지연 없이 즉시 실행되도록 0ms 지연을 설정
-		
-		
-	});
-	
-  
-
-	// 받는사람 선택삭제 버튼 처리해주기
-	$('#in_select_del').click(function(){
-		
-		if($tableExcel == null || $tableExcel == ""){
-			
-			alert("받는사람을 추가해 주세요.");
-			return false;
-		
-		}
-		
-		var selectedData = $tableExcel.getSelectedRows();
-		
-		if(selectedData == "" || selectedData == null){
-			
-			alert("삭제할 연락처를 선택해주세요.");
-			return false;
-		
-		}else{ // 선택한 Row 데이터 삭제하기
-			
-			if(confirm("선택하신 받는 사람을 삭제하시겠습니까?")){
-				
-				// 선택 데이터 삭제
-			    selectedData.forEach(row => row.delete());
-			    
-			    
-				totRows = $tableExcel.getRows().length;
-			    $("#excelRowTotCnt").text(totRows);
-			    
-				
-			}
-
-		}
-		
-	});
-
-	// 추가버튼
-	$('#btnAddrMassReg').click(function(){
-		
-		if($tableExcel.getData().length < 1){
-			alert("한 개 이상의 연락처를 입력하세요");
-			return false;
-		}
-//	 	else if (selectedData.length > 20000) {
-//	 		alert("2만줄 이상의 업로드는 데이터 부하로 업로드 할수 없습니다.");
-//	 		return false;
-//	 	}
-		
-		
-		// tableExcel 그룹의 select 요소들을 확인
-//	 	var isPhoneSelected = false;
-//	 	var isNameSelected = false;
-		var columns = $tableExcel.getColumns();
-		var isAddrPhoneNoSelected = columns.some(column => column.getField() === 'addrPhoneNo');
-
-		if (!isAddrPhoneNoSelected) {
-//			    isPhoneSelected = true;
-			alert('휴대폰이 선택되지 않았습니다.');
-			return false;
-
-		} 
-		
-		var addrData = $tableExcel.getData().map((row, index) => ({
-		    name: row.addrNm,
-		    phone: removeDash(row.addrPhoneNo),
-		    rep1: row.addrInfo1,
-		    rep2: row.addrInfo2,
-		    rep3: row.addrInfo3,
-		    rep4: row.addrInfo4,
-		}));
-
-		
-		
-		
-		
-
-		// 기존 tableL의 데이터를 가져옵니다.
-		var existingData = tableL.getData();
-		// 기존 데이터와 새로운 데이터를 합칩니다.
-		var combinedData = existingData.concat(addrData);
-		// 합쳐진 데이터를 tableL에 설정합니다.
-		tableL.setData(combinedData);
-		
-		// 미리보기 버튼 활성화
-		updateButtons(0);
-		
-		var totRows = tableL.getRows().length; 
-		updateTotCnt(totRows); //전체 데이터 갯수 구하기
-		console.log('totRows : ', totRows);
-		var smsTxtArea = $('#smsTxtArea').val();
-		if(smsTxtArea.indexOf("[*이름*]")  > -1 
-				|| smsTxtArea.indexOf("[*1*]") > -1
-				|| smsTxtArea.indexOf("[*2*]") > -1
-				|| smsTxtArea.indexOf("[*3*]") > -1
-				|| smsTxtArea.indexOf("[*4*]") > -1){
-			
-			fnReplCell();
-			
-		}else{
-			
-			//결제 금액 구하기
-		    totalPriceSum(totRows);
-			
-		} 
-		
-		setAddrMassClose();
-		$('#closeBtn').click();
-	});
-		
-  
-
-	//받는사람 전체삭제 버튼 처리
-	$('#allDel').click(function(){
-		var data = $tableExcel.getRows();	
-		$tableExcel.clearData();
-		$("#excelRowTotCnt").text(0); //총건수 수정
-		$("#excelRowDupCnt").text(0); //중복건수 수정
-		dupliPhoneDataRealList.length = 0;	// 중복 휴대폰번호 초기화
-		
-		// select box 초기화
-		$('.field-selector').each(function() { $(this).val(''); });
-		
-	});
-	
-  
-  
-});
-
-
-
-function excelFileChange(file) {
-	if (file) {
-		fn_loadAddActive();
-		var reader = new FileReader();
-		var extension = file.name.split('.').pop().toLowerCase();
-		reader.onload = function(e) {
-			setTimeout(() => { // 파일 읽기 완료 후 실행되도록 함
-				if (extension === 'xlsx') {
-					var data = new Uint8Array(e.target.result);
-					var workbook = XLSX.read(data, {type: 'array'});
-					var firstSheet = workbook.Sheets[workbook.SheetNames[0]];
-					var jsonData = XLSX.utils.sheet_to_json(firstSheet, {header: 1});
-					processExcelData(jsonData);
-				} else if (extension === 'txt') {
-					var textData = e.target.result;
-					processTextData(textData);
-				} else {
-					alert('지원되지 않는 파일 형식입니다.');
-				}
-				fn_loadRemoveActive();
-			}, 0); // 지연 없이 즉시 실행되도록 0ms 지연을 설정
-		};
-		if (extension === 'xlsx') {
-			reader.readAsArrayBuffer(file);
-		} else if (extension === 'txt') {
-			reader.readAsText(file);
-		}
-	}
-}
-
-
-// 엑셀 데이터 처리 함수
-function processExcelData(data) {
- var keys = ['A', 'B', 'C', 'D', 'E', 'F', 'G'];
- var tableData = [];
- var totalRows = data.length - 2; // 전체 데이터 수 (1, 2행 제외)
-
-
- // 3번째 행부터 입력 
- data.slice(0).forEach((row, index) => {
-     var rowData = {};
-     keys.forEach((key, idx) => { // index 변수명 변경 (내부와 외부에서 사용되므로 충돌 방지)
-//      console.log('row[idx] : ', row[idx]);
-//          rowData[key] = row[idx] ? row[idx].trim() : ""; // 각 컬럼에 대해 기본값을 설정
-         rowData[key] = (typeof row[idx] === 'string') ? row[idx].trim() : row[idx];
-     });
-     tableData.push(rowData);
-
- });
-
- updateTable(tableData);
-}
-
-
-// 텍스트 데이터 처리 함수
-function processTextData(text) {
-	var lines = text.split('\n'); // 각 줄을 배열로 분리
-	var keys = ['A', 'B', 'C', 'D', 'E', 'F', 'G'];
-	var tableData = [];
-	
-	lines.forEach(line => {
-		var rowData = {};
-		var row = line.split(','); // 쉼표로 분리
-		keys.forEach((key, index) => {
-			rowData[key] = row[index] ? row[index].trim() : ""; // 각 컬럼에 대해 기본값을 설정
-		});
-		tableData.push(rowData);
-	});
-	
-	updateTable(tableData);
-}
-
-//공통 테이블 업데이트 함수
-function updateTable(tableData) {
-	$tableExcel.setColumns([ //Define Table Columns
- 		{formatter:"rowSelection", titleFormatter:"rowSelection",clipboard:false, headerHozAlign:"center", hozAlign:"center", headerSort:false, cellClick:function(e, cell){
- 	        cell.getRow().toggleSelect();
-	 		}
-	 	}, 
-		{formatter:"rownum", align:"center" ,title:"No", hozAlign:"center", headerHozAlign:"center", width:60},
-	 	{title:"A", field:"A", hozAlign:"center", headerHozAlign: "center", width:140, validator:["maxLength:100", "string"]},
-	 	{title:"B", field:"B", hozAlign:"center", headerHozAlign: "center", width:140, validator:["maxLength:100", "string"]},
-	 	{title:"C", field:"C", hozAlign:"center", headerHozAlign: "center", width:140, validator:["maxLength:100", "string"]},
-	 	{title:"D", field:"D", hozAlign:"center", headerHozAlign: "center", width:140, validator:["maxLength:100", "string"]},
-	 	{title:"E", field:"E", hozAlign:"center", headerHozAlign: "center", width:140, validator:["maxLength:100", "string"]},
-	 	{title:"F", field:"F", hozAlign:"center", headerHozAlign: "center", width:140, validator:["maxLength:100", "string"]}
- 	]);
-
-	$tableExcel.setData(tableData).then(() => {
-		// excelRowTotCnt 업데이트
-		document.getElementById("excelRowTotCnt").innerText = tableData.length;
-	});
-	
-	fn_loadRemoveActive();
-}
-
-
-
-/* 
-* 타이틀 select 선택할때마다 실행해서         
-* 데이터테이블 필드값 수정                  
-*/
-function updateTableFields($objTabul) {
-	var currentData = $objTabul.getData();
-	var columns = [
-		{formatter: "rowSelection", titleFormatter: "rowSelection", clipboard: false, hozAlign: "center", headerHozAlign: "center", headerSort: false, cellClick: function(e, cell) {
-			cell.getRow().toggleSelect();
-		}}
-		,{formatter:"rownum", align:"center", title:"No", hozAlign:"center", headerHozAlign:"center", width:60}
-	];
-
-	var fieldMapping = [];
-	$('.field-selector').each(function(index) {
-		var selectedField = $(this).val();
-		//  ASCII 문자 코드 사용 - 65=A, 66=B ...
-		var field = String.fromCharCode(65 + index);
-		if (selectedField) {
-			columns.push({
-				title: field
-				, field: selectedField
-				, hozAlign: "center"
-				, headerHozAlign: "center"
-// 				, editor: "input"
-				, editor: false
-				, width: 140
-				, validator: ["maxLength:100", "string"]
-			});
-			fieldMapping.push(selectedField);
-		} else {
-			columns.push({
-				title: field
-				, field: field
-				, hozAlign: "center"
-				, headerHozAlign: "center"
-				, editor: false
-// 				, editor: "input"
-				, width: 140
-				, validator: ["maxLength:100", "string"]
-			});
-			fieldMapping.push(field);
-		}
-	});
-
-	var updatedData = currentData.map(row => {
-		var newRow = {};
-		fieldMapping.forEach((field, index) => {
-			newRow[field] = row[Object.keys(row)[index]] || "";
-		});
-		return newRow;
-	});
-
-	$objTabul.setColumns(columns);
-	$objTabul.setData(updatedData);
-}
-
-
-/**
- * @ 핸드폰 중복 데이터
- * */
-function fn_phoneDupl($objTabul) {
-	 
-	$tableError.clearData();
-	
-	var data = $objTabul.getData();
-	var phoneNumberChk = false;
-	var existingNumbers = new Set(); // 배열에서 Set으로 변경
-	
-	let errorCount = 0; // 중복 번호 개수를 저장할 변수
-	let duplicateCount = 0; // 중복 번호 개수를 저장할 변수
-	
-	const errors = [];  // 오류 데이터를 저장할 배열
-	const duplicates = [];  // 오류 데이터를 저장할 배열
-	const newData = []; // 유효한 데이터만 저장할 새로운 배열
-	
-	data.forEach((row, index) => {
-		if (index % 10000 === 0) {
-		    console.log('i : ', index);
-		}
-		
-		const number = row.addrPhoneNo;
-		const formattedNumber = formatPhoneNumber(number); // 번호 표준화
-		const cleanedNumber = formattedNumber.replace(/[^0-9]/g, ''); // 숫자만 남김
-		
-		if (!existingNumbers.has(cleanedNumber)) { // 중복 번호 체크
-		    if (isValidPhoneNumber(formattedNumber)) { // 유효성 검사
-		        row.addrPhoneNo = formattedNumber;
-		        existingNumbers.add(cleanedNumber); // 추가된 번호를 기존 목록에 추가
-		        newData.push(row); // 유효한 데이터만 새로운 배열에 추가
-		    } else {
-		        // 오류: 유효성 통과 못함
-		        errorCount++;
-		        $tableError.addRow({ 
-		            name: row.addrNm, // 이름
-		            phone: row.addrPhoneNo, // 폰번호
-		            result: "오류" // 결과 메시지 추가
-		        });
-		        errors.push({ 
-		            name: row.addrNm, // 이름
-		            phone: row.addrPhoneNo, // 폰번호
-		            result: "오류" // 결과 메시지 추가
-		        });
-		    }
-		} else {
-		    // 중복
-		    duplicateCount++; // 중복 번호가 발견될 때마다 카운트를 증가
-		    $tableError.addRow({ 
-		        name: row.addrNm, // 이름
-		        phone: row.addrPhoneNo, // 폰번호
-		        result: "중복" // 결과 메시지 추가
-		    });
-		    duplicates.push({ 
-		       name: row.addrNm, // 이름
-		       phone: row.addrPhoneNo, // 폰번호
-		       result: "중복" // 결과 메시지 추가
-		   });
-		}
-	});
-	
-	// data 배열을 newData 배열로 대체
-	data = newData;
-	
-
-	// 수정된 데이터로 테이블 업데이트
-	$objTabul.setData(data);
-	// 오류 총 카운트
-    $("#excelRowTotCnt").text($objTabul.getDataCount());
-	// 중복 카운트
-	$("#excelRowDupCnt").text(duplicateCount);
-	// 에러 카운트
-	$("#excelRowErrorCnt").text(errorCount);
-	
-	// popup 영역
-	// 중복 카운트
-	$("#errorPopDupCnt").text(duplicateCount);
-	// 에러 카운트
-	$("#errorPopErrorCnt").text(errorCount);
-	// 
-	$("#errorPopTotCnt").text(duplicateCount+errorCount);
-	
-	
-	var errorData = errors.concat(duplicates);
-	 // 오류 및 중복 데이터를 한 번에 추가
-	$tableError.setData(errorData);
-	
-	if(errorCount > 0){
-		alert('휴대폰 형식에 맞지 않는 데이터는 삭제 후 업로드 됩니다.\nex) 발송불가 특수문자, 자릿수 오류 등');
-	}
-	
-	
-	
-}
-
-function fn_dupliPopupShow(){
-
-	$("#tableExcelDupliBtn").show();
-}
-
-function makeAddrMassDupliPop(dupliPhoneDataRealList) {
-	var sHtml = "";
-	sHtml += "<div class='' style='overflow-x:auto; height:350px;'>";
-	sHtml += "<table class='tType4'>";
-	sHtml += "		<colgroup>";
-	sHtml += "			<col style='width:auto' />";
-	sHtml += "		</colgroup>";
-	sHtml += "		<thead>";
-	sHtml += "			<tr>";
-	sHtml += "				<th>중복 휴대폰번호 (" + numberWithCommas(dupliPhoneDataRealList.length) + "개)</th>";
-	sHtml += "			</tr>";
-	sHtml += "		</thead>";
-	sHtml += "		<tbody>";
-	for (var i = 0; i < dupliPhoneDataRealList.length; i++) {
-		sHtml += "		<tr>";
-		sHtml += "			<td>" + dupliPhoneDataRealList[i] + "</td>";
-		sHtml += "		</tr>";
-	}
-	sHtml += "		</tbody>";
-	sHtml += "	</table>";
-	sHtml += "	</div>";
-
-	$("#addrMassDupli_layer").html(sHtml);
-	fn_dupliPopupShow();
-	
-}
-
-
-function fn_dupliPopupShow(){
-	$('#tableExcelDupliBtn').show();
-}
-
-//한국의 핸드폰 번호 형식 검사 함수
-function isValidKoreanPhoneNumber(phone) {
-    // 하이픈(-)을 제거하고 숫자만 남긴 후 검사
-    var cleaned = phone.replace(/-/g, '');
-    // 010, 011, 016, 017, 018, 019로 시작하고 10~11자리인 경우 유효
-    var valid = /^(010|011|016|017|018|019)\d{7,8}$/.test(cleaned);
-    return valid;
-}
-
-
-
-
-// 상단 설명 더보기 
-function popMore(e){
-	$(e).closest(".pop_more_cont").toggleClass("pop_more_click");
-	
-	if($(e).closest(".pop_more_cont").is(".pop_more_click")){
-		$(e).html('숨기기');
-		$(e).append('<i></i>');
-	}else {
-		$(e).html('더보기');
-		$(e).append('<i></i>');
-	}
-}
-
-</script>
-
-<!-- 중복전화번호 data-tooltip:addrMassDupli_layer -->
-<div class="tooltip-wrap">
-	<div class="popup-com addrMassDupli_layer" tabindex="0" data-tooltip-con="addrMassDupli_layer" data-focus="addrMassDupli_layer" data-focus-prev="addrMassDupli_layer-close" style="width: 270px; height: 500px;">
-		<div class="popup_heading">
-			<p>중복 휴대폰번호</p>
-			<button type="button" class="tooltip-close" data-focus="addrMassDupli_layer-close" onclick="setAddrDupliClose();"><img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button>
-		</div>
-		<div class="layer_in" style="padding:20px 0px;" id="addrMassDupli_layer">
-		</div>
-		
-		<div class="popup_btn_wrap2" style="margin-top: 0px;">
-			<button type="button" class="tooltip-close" data-focus="addrMassDupli_layer-close" data-focus-next="addrMassDupli_layer">닫기</button>
-		</div>		
-		
-	</div>		
-</div>
-
-
-<!-- 주소록 상세 결과 팝업 data-tooltip:adr_popup14 -->
-	<div class="tooltip-wrap">
-		<div class="popup-com adr_layer adr_popup14" tabindex="0" data-tooltip-con="adr_popup14" data-focus="adr_popup14" data-focus-prev="adr_popu14-close" style="width: 450px;">
-			<div class="popup_heading">
-				<p>주소록 상세 결과</p>
-				<button type="button" class="tooltip-close" data-focus="adr_popup14-close"><img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button>
-			</div>
-			<div class="layer_in" style="padding:30px 20px;">
-				<div class="table_top">
-					<p>
-						총 <span class="c_e40000" id="errorPopTotCnt">0</span>건 
-						/ 중복 <span class="c_002c9a" id="errorPopDupCnt">0</span>건
-						/ 오류 <span class="c_002c9a" id="errorPopErrorCnt">0</span>건</p>
-						<button type="button" class="excel_btn btnType" id="errorExcelBtn"><i class="downroad"></i>엑셀 다운로드</button>
-				</div>
-				<div class="tb_wrap adr_list" id="tabulator_error">
-				<!-- $tableError 참고  -->
-                </div>
-                <ul class="cf_text_ul">
-                    <li>*중복번호는 하나의 번호만 등록됩니다.</li>
-                    <li>*휴대폰 형식에 맞지 않는 데이터는 삭제 후 업로드 됩니다.</li>
-                    <li>ex) 발송불가 특수문자, 자릿수 오류 등</li>
-                </ul>
-                <div class="popup_btn_wrap2">
-<!--                     <button type="button">저장</button> -->
-                    <button type="button" class="tooltip-close" data-focus="adr_popup14-close" data-focus-next="adr_popup14">닫기</button>                      
-                </div>
-			</div>
-		</div>
-	</div>
-
-<!--// 중복전화번호 팝업 -->
-				<div class="popup_heading">
-					<p>엑셀 불러오기</p>
-					<button type="button" class="tooltip-close" id="closeBtn" data-focus="popup02-close"><img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button>
-			   </div>
-				<div class="layer_in" style="padding: 25px 30px;">
-<!-- 					<div class="list_tab_wrap2"> -->
-						<!-- tab button -->
-<!-- 						<ul class="list_tab" id="tbTabl">  -->
-<!-- 							<li class="tab active" data-tabul="tableExcel"><button type="button" onclick="popupTab(this,'1'); fn_tabToggle('1');">엑셀입력</button></li> -->
-<!-- 							<li class="tab" data-tabul="tableClip"><button type="button" onclick="popupTab(this,'2'); fn_tabToggle('2');">붙여넣기</button></li> -->
-<!-- 							<li class="tab" data-tabul="tableSelf"><button type="button" onclick="popupTab(this,'3'); fn_tabToggle('3');">직접입력</button></li> -->
-<!-- 						</ul>// tab button -->
-<!-- 					</div> -->
-					<!-- 엑셀입력 -->
-					<div class="popCont current pop_more_cont" id="popCont_1">
-						<div class="titBox">
-							<p>- 주소록은 한 번에 최대 30만건까지 등록(EXCEL파일, 최대용량 3MB) 가능합니다. </p>
-							<p>- 엑셀 파일에 비밀번호 설정, 제한된 보기, 수식 등이 설정되어 있는 경우 업로드가 불가합니다.</p>
-							<p>- 구분선(|), 역슬래시(\, ₩), 큰따옴표(") 등 발송불가 특수문자는 저장되지 않습니다.</p>
-							<p>- 이름 200byte, [*1*]~[*4*] 200byte, 메모 250byte까지 입력 가능합니다.</p>
-							<p>- 주소록 등록이 어려우신 경우에는 <a href="<c:url value='/web/mjon/addragency/selectAddrAgencyList.do'/>" style="font-weight: bold; color: blue;">주소록 입력대행</a> 메뉴를 이용하실 수 있습니다. </p>
-						</div>
-						<div class="pop_more_wrap">
-								<button type="button" class="pop_more" onclick="popMore(this);">더보기<i></i></button>
-						</div>
-					</div><!--// 엑셀입력 -->
-
-					<!-- 공통 -->
-					<div>
-		                <table class="layer_tType1">
-		                    <caption>엑셀입력 표</caption>
-		                    <colgroup>
-		                        <col style="width: 95px">
-		                        <col style="width: auto">
-		                    </colgroup>
-		                    <tbody>
-		                        <tr>
-		                            <!-- <th>그룹 선택</th>
-		                            <td>
-		                                <label for="" class="label">그룹 선택</label>
-		                                <select id="addrGrpIdInfo" name="addrGrpIdInfo">
-		                                </select>
-	                                    <label for="" class="label">그룹명 입력</label>
-	                                    <input type="text" id="addrGrpNm" name="addrGrpNm" placeholder="새 그룹명을 입력해주세요." onfocus="this.placeholder=''" onblur="this.placeholder='새 그룹명을 입력해주세요.'"class="inputLight" style="width: 300px;">
-		                                <input type="file" id="excelFile" accept=".xls, .xlsx, .txt" style="display:none"/>
-		                                <button type="button" class="excel_btn2 btnType c3"><i class="uproad"></i>엑셀, TXT파일 업로드</button>
-		                            </td> -->
-		                            <td colspan="2" style="padding:20px 0;">
-		                            	<div class="file_upload_wrap" style="width:100%;display:flex;">
-						                	<div class="file_add upload_area">
-												<p><img src="/publish/images/content/file_add.png" alt="파일 붙여넣기">마우스로 엑셀, TXT파일을 여기에 끌어다 놓으세요</p>
-											</div>
-											<input type="file" id="excelFile" accept=".xls, .xlsx, .txt" style="display:none"/>
-					                        <button type="button" class="excel_btn2 btnType c3"><i class="uproad"></i>엑셀, TXT파일 업로드</button>
-						                </div>
-		                            </td>
-		                        </tr>
-		                    </tbody>
-		                </table>
-	                </div>
-	                
-					
-					<div class="excel_middle2">
-						<p>
-							총 <span class="c_e40000 fwBold" id="excelRowTotCnt">0</span>건 
-							/ 중복 <span class="c_002c9a fwBold" id="excelRowDupCnt">0</span>건
-							/ 오류 <span class="c_002c9a fwBold" id="excelRowErrorCnt">0</span>건
-							<button type="button" class="btn_list_detail" data-tooltip="adr_popup14"><img src="/publish/images/search.png"></button>
-						</p>
-<!-- 							&nbsp;  -->
-<!-- 							<button type="button" class="btnType btnType6" data-tooltip="addrMassDupli_layer" id="tableExcelDupliBtn">중복번호</button> -->
-<!-- 							&nbsp; -->
-<!-- 							<button type="button" class="btnType btnType6" data-tooltip="addrMassSaveDupli_layer" onclick="GetAddrMassSaveDupli()" id="btnAddrMassSaveDupli">중복번호</button> -->
-						</p>
-<!-- 						<button type="button" class="btnType btnType6 addCallToF">번호추가</button> -->
-					</div>
-					
-					
-					
-
-                    <div class="adr_excel" style="margin-top: 13px;">
-                        <!-- thead -->
-                        <div class="adr_hd select_adr_hd" data-group="tableExcel">
-                            <div style="width: 100px;"></div>
-                            <div style="width: 140px;">
-                            	<label for="" class="label"></label>
-								<select class="field-selector">
-									<option value="">선택하기</option>
-									<option value="addrNm">이름</option>
-									<option value="addrPhoneNo">휴대폰</option>
-									<option value="addrInfo1">[*1*]</option>
-									<option value="addrInfo2">[*2*]</option>
-									<option value="addrInfo3">[*3*]</option>
-									<option value="addrInfo4">[*4*]</option>
-<!-- 									<option value="addrComment">메모</option> -->
-								</select>
-                            </div>
-                            <div style="width: 140px;">
-                                <label for="" class="label"></label>
-								<select class="field-selector">
-									<option value="">선택하기</option>
-									<option value="addrNm">이름</option>
-									<option value="addrPhoneNo">휴대폰</option>
-									<option value="addrInfo1">[*1*]</option>
-									<option value="addrInfo2">[*2*]</option>
-									<option value="addrInfo3">[*3*]</option>
-									<option value="addrInfo4">[*4*]</option>
-<!-- 									<option value="addrComment">메모</option> -->
-								</select>
-                            </div>
-                            <div style="width: 140px;">
-                                <label for="" class="label"></label>
-								<select class="field-selector">
-									<option value="">선택하기</option>
-									<option value="addrNm">이름</option>
-									<option value="addrPhoneNo">휴대폰</option>
-									<option value="addrInfo1">[*1*]</option>
-									<option value="addrInfo2">[*2*]</option>
-									<option value="addrInfo3">[*3*]</option>
-									<option value="addrInfo4">[*4*]</option>
-<!-- 									<option value="addrComment">메모</option> -->
-								</select>
-                            </div>
-                            <div style="width: 140px;">
-                                <label for="" class="label"></label>
-								<select class="field-selector">
-									<option value="">선택하기</option>
-									<option value="addrNm">이름</option>
-									<option value="addrPhoneNo">휴대폰</option>
-									<option value="addrInfo1">[*1*]</option>
-									<option value="addrInfo2">[*2*]</option>
-									<option value="addrInfo3">[*3*]</option>
-									<option value="addrInfo4">[*4*]</option>
-<!-- 									<option value="addrComment">메모</option> -->
-								</select>
-                            </div>
-                            <div style="width: 140px;">
-                                <label for="" class="label"></label>
-								<select class="field-selector">
-									<option value="">선택하기</option>
-									<option value="addrNm">이름</option>
-									<option value="addrPhoneNo">휴대폰</option>
-									<option value="addrInfo1">[*1*]</option>
-									<option value="addrInfo2">[*2*]</option>
-									<option value="addrInfo3">[*3*]</option>
-									<option value="addrInfo4">[*4*]</option>
-<!-- 									<option value="addrComment">메모</option> -->
-								</select>
-                            </div>
-                            <div style="width: 140px;">
-                                <label for="" class="label"></label>
-								<select class="field-selector">
-									<option value="">선택하기</option>
-									<option value="addrNm">이름</option>
-									<option value="addrPhoneNo">휴대폰</option>
-									<option value="addrInfo1">[*1*]</option>
-									<option value="addrInfo2">[*2*]</option>
-									<option value="addrInfo3">[*3*]</option>
-									<option value="addrInfo4">[*4*]</option>
-<!-- 									<option value="addrComment">메모</option> -->
-								</select>
-                            </div>
-                            <!-- <div style="width: 125px;">
-                                <label for="" class="label"></label>
-								<select class="field-selector">
-									<option value="">선택하기</option>
-									<option value="addrNm">이름</option>
-									<option value="addrPhoneNo">휴대폰</option>
-									<option value="addrInfo1">[*1*]</option>
-									<option value="addrInfo2">[*2*]</option>
-									<option value="addrInfo3">[*3*]</option>
-									<option value="addrInfo4">[*4*]</option>
-									<option value="addrComment">메모</option>
-								</select>
-                            </div> -->
-                        </div>
-                     </div>					
-					
-					<div class="drag_drop_wrap callList_includ_box" id="tabulator_excel">
-<!-- 						<img src="/publish/images/content/excel.jpg" style="width: 100%;"> -->
-					</div>
-					<div class="excel_middle">
-						<div class="select_btnWrap clearfix">
-							<div>
-								<button type="button" id="allDel"><i class="remove_img"></i>전체삭제</button>
-								<button type="button" id="in_select_del"><i class="remove_img"></i>선택삭제</button>
-							</div>
-	
-						</div>
-					</div><!--// 공통 -->     
-	
-					<!-- 붙여놓기 설명 -->
-<!-- 	                <div class="req_area"> -->
-<!-- 	                  	<div class="text_box"> -->
-<!-- 	                    	- 휴대폰 번호가 입력된 txt 파일을 열어 복사(Ctrl+c) + 붙여넣기(Ctrl+v)로도 입력하실 수 있습니다.<br> -->
-<!-- 							- 휴대폰 번호는 필수입력 항목입니다.<br> -->
-<!-- 							- 이름,휴대폰 번호,[*1*],[*2*],[*3*],[*4*],메모 순서대로 입력해주세요.(예 : 010-1234-5678,홍길동,변수1…메모)<br> -->
-<!-- 							- 이름은 24byte, [*1*]~[*4*] 40byte, 메모는 250byte까지 입력 가능합니다.<br> -->
-<!-- 							- '오류 검사'를 통해 등록된 데이터에 전화번호 입력 오류를 확인하실 수 있습니다. -->
-<!-- 						</div> -->
-<!-- 	                </div> -->
-					<div class="popup_btn_wrap2" style="margin: 0 auto 30px auto;">
-						<button type="button" id="btnAddrMassReg">추가</button>
-						<button type="button" id="btnAddrMassClose" class="tooltip-close" data-focus="adr_popup01-close"  data-focus-next="popup02">닫기</button>                      
-					</div>
-				
+<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
+
+<script type="text/javascript" src="<c:url value='/publish/js/content.js'/>"></script>
+
+<script type="text/javascript">
+
+var $tableExcel = null; //엑셀입력 탭
+var $tableError = null; //엑셀입력 탭
+$(document).ready(function(){
+
+	//Tabulator AJAX Data Loading
+	$tableError = new Tabulator("#tabulator_error", {
+		height:"255px",
+		width:"100%",
+	    layout:"fitColumns",
+	    autoColumns:false,
+	    headerHozAlign:"center", 
+	    validationMode:"highlight",
+	    clipboard:false,
+	    clipboardCopySelector:"table",
+	    clipboardPasteAction:"insert", // insert, update, replace
+	    placeholder:"등록 팝업에서 휴대폰을 선택 후 확인해주세요.", //fit columns to width of table (optional)
+	 	columns:[ //Define Table Columns
+		 	{title:"이름", field:"name", hozAlign:"center", headerHozAlign: "center", width:125},
+		 	{title:"휴대폰", field:"phone", hozAlign:"center", headerHozAlign: "center", width:158},
+		 	{title:"미등록 결과", field:"result", hozAlign:"center", headerHozAlign: "center", width:125}
+	 	]
+	});
+	
+
+	//Tabulator AJAX Data Loading
+	$tableExcel = new Tabulator("#tabulator_excel", {
+		height:"255px",
+		width:"100%",
+	    layout:"fitColumns",
+	    autoColumns:false,
+	    headerHozAlign:"center", 
+	    validationMode:"highlight",
+	    clipboard:false,
+	    clipboardCopySelector:"table",
+	    clipboardPasteAction:"insert", // insert, update, replace
+	    placeholder:"Excel 파일을 업로드 해주세요.", //fit columns to width of table (optional)
+	 	columns:[ //Define Table Columns
+	 		{formatter:"rowSelection", titleFormatter:"rowSelection",clipboard:false, headerHozAlign:"center", hozAlign:"center", headerSort:false, cellClick:function(e, cell){
+	 	        cell.getRow().toggleSelect();
+		 		}
+		 	}, 
+			{formatter:"rownum", align:"center" ,title:"No", hozAlign:"center", headerHozAlign:"center", width:60},
+		 	{title:"A", field:"A", hozAlign:"center", headerHozAlign: "center", width:140, validator:["maxLength:100", "string"]},
+		 	{title:"B", field:"B", hozAlign:"center", headerHozAlign: "center", width:140, validator:["maxLength:100", "string"]},
+		 	{title:"C", field:"C", hozAlign:"center", headerHozAlign: "center", width:140, validator:["maxLength:100", "string"]},
+		 	{title:"D", field:"D", hozAlign:"center", headerHozAlign: "center", width:140, validator:["maxLength:100", "string"]},
+		 	{title:"E", field:"E", hozAlign:"center", headerHozAlign: "center", width:140, validator:["maxLength:100", "string"]},
+		 	{title:"F", field:"F", hozAlign:"center", headerHozAlign: "center", width:140, validator:["maxLength:100", "string"]}
+	 	],
+	 	validationFailed:function(cell, value, parameters){ // 유효성 체크 함수 
+	        var valid = cell.isValid();
+	 		if(!valid){
+	 			alert("양식에 맞지 않는 정보가 입력되었습니다.");
+	 			
+	 			//해당 셀 데이터 삭제
+	 			cell.setValue("");
+	 		}
+	 		return value % parameters.phone;
+	    },
+	});
+
+    $("#excelFile").on("change", function(event) {
+    	var fileInfo =  event.target.files;
+        if(fileInfo.length > 0){
+            excelFileChange(fileInfo[0]);
+        } else {
+            fn_loadRemoveActive(); // 파일이 선택되지 않은 경우 로딩 상태 제거
+            setTimeout(() => { $(this).val(''); }, 0);  // 파일 선택 초기화
+        }
+    });
+	
+
+
+    $(document).on('click', '#btnAddrMassClose', function() {
+    	// 대량등록 닫기
+    	setAddrMassClose();
+    });
+    
+
+    $(document).on('click', '#closeBtn', function() {
+    	// 대량등록 닫기
+    	setAddrMassClose();
+    });
+    
+
+ // 엑셀등록 닫기
+	function setAddrMassClose() {
+		$tableExcel.clearData();
+		$("#excelRowTotCnt").text(0); //총건수 수정
+		$("#excelRowDupCnt").text(0); //중복건수 수정
+		$("#excelRowErrorCnt").text(0); //중복건수 수정
+		dupliPhoneDataRealList.length = 0;	// 중복 휴대폰번호 초기화
+		addrMassDupliSaveList = null;
+		
+		
+		// popup 영역
+		$tableError.clearData();
+		// 중복 카운트
+		$("#errorPopDupCnt").text(0);
+		// 에러 카운트
+		$("#errorPopErrorCnt").text(0);
+		// 
+		$("#errorPopTotCnt").text(0);
+
+		
+	}
+    
+  //#############################################################################################
+  //파일업로드 드래그앤 드롭
+  //#############################################################################################
+  var objDragAndDrop = $(".upload_area");
+  $(document).on("dragenter",".upload_area",function(e){
+    e.stopPropagation();
+    e.preventDefault();
+    //$(this).css('border', '2px solid #0B85A1');
+  });
+  $(document).on("dragover",".upload_area",function(e){
+    e.stopPropagation();
+    e.preventDefault();
+  });
+  $(document).on("drop",".upload_area",function(e){
+  	fn_loadAddActive();
+  	e.preventDefault();
+  	var files = e.originalEvent.dataTransfer.files;
+  	excelFileChange(files[0]);
+  });
+
+  $(document).on('dragenter', function (e){
+    e.stopPropagation();
+    e.preventDefault();
+  });
+  $(document).on('dragover', function (e){
+  	e.stopPropagation();
+  	e.preventDefault();
+  //objDragAndDrop.css('border', '2px dotted #0B85A1');
+  });
+  $(document).on('drop', function (e){
+    e.stopPropagation();
+    e.preventDefault();
+  });
+  //파일 드래그앤드롭 종료
+	
+	
+	
+	
+
+	//타이틀 select 선택 이벤트
+	 $('.field-selector').on('change', function() {
+		fn_loadAddActive();
+
+		setTimeout(() => { 
+			var selectedFields = [];
+			var isDuplicate = false;
+	
+			if($tableExcel.getData().length < 1){
+				alert('데이터 입력 후 선택해 주세요.');
+				$(this).val(""); 
+				fn_loadRemoveActive();
+				return false;
+			}
+			
+			// 중복체크
+			$('.field-selector').each(function() {
+				var selectedField = $(this).val();
+				if (selectedField) {
+					if (selectedFields.includes(selectedField)) {
+						alert("중복된 필드를 선택할 수 없습니다.");
+						$(this).val(""); // 중복 필드를 선택한 경우 빈 값으로 초기화
+						isDuplicate = true;
+						return false; // 반복문 종료
+					}
+					selectedFields.push(selectedField);
+				}
+			});
+	
+	
+			// 
+			updateTableFields($tableExcel);
+			
+			// 필드가 휴대폰이면 열 중복체크
+			if($(this).val() == 'addrPhoneNo'){
+				fn_phoneDupl($tableExcel);
+			}
+			fn_loadRemoveActive();
+
+		}, 0); // 지연 없이 즉시 실행되도록 0ms 지연을 설정
+		
+		
+	});
+	
+  
+
+	// 받는사람 선택삭제 버튼 처리해주기
+	$('#in_select_del').click(function(){
+		
+		if($tableExcel == null || $tableExcel == ""){
+			
+			alert("받는사람을 추가해 주세요.");
+			return false;
+		
+		}
+		
+		var selectedData = $tableExcel.getSelectedRows();
+		
+		if(selectedData == "" || selectedData == null){
+			
+			alert("삭제할 연락처를 선택해주세요.");
+			return false;
+		
+		}else{ // 선택한 Row 데이터 삭제하기
+			
+			if(confirm("선택하신 받는 사람을 삭제하시겠습니까?")){
+				
+				// 선택 데이터 삭제
+			    selectedData.forEach(row => row.delete());
+			    
+			    
+				totRows = $tableExcel.getRows().length;
+			    $("#excelRowTotCnt").text(totRows);
+			    
+				
+			}
+
+		}
+		
+	});
+
+	// 추가버튼
+	$('#btnAddrMassReg').click(function(){
+		
+		if($tableExcel.getData().length < 1){
+			alert("한 개 이상의 연락처를 입력하세요");
+			return false;
+		}
+//	 	else if (selectedData.length > 20000) {
+//	 		alert("2만줄 이상의 업로드는 데이터 부하로 업로드 할수 없습니다.");
+//	 		return false;
+//	 	}
+		
+		
+		// tableExcel 그룹의 select 요소들을 확인
+//	 	var isPhoneSelected = false;
+//	 	var isNameSelected = false;
+		var columns = $tableExcel.getColumns();
+		var isAddrPhoneNoSelected = columns.some(column => column.getField() === 'addrPhoneNo');
+
+		if (!isAddrPhoneNoSelected) {
+//			    isPhoneSelected = true;
+			alert('휴대폰이 선택되지 않았습니다.');
+			return false;
+
+		} 
+		
+		var addrData = $tableExcel.getData().map((row, index) => ({
+		    name: row.addrNm,
+		    phone: removeDash(row.addrPhoneNo),
+		    rep1: row.addrInfo1,
+		    rep2: row.addrInfo2,
+		    rep3: row.addrInfo3,
+		    rep4: row.addrInfo4,
+		}));
+
+		
+		
+		
+		
+
+		// 기존 tableL의 데이터를 가져옵니다.
+		var existingData = tableL.getData();
+		// 기존 데이터와 새로운 데이터를 합칩니다.
+		var combinedData = existingData.concat(addrData);
+		// 합쳐진 데이터를 tableL에 설정합니다.
+		tableL.setData(combinedData);
+		
+		// 미리보기 버튼 활성화
+		updateButtons(0);
+		
+		var totRows = tableL.getRows().length; 
+		updateTotCnt(totRows); //전체 데이터 갯수 구하기
+		console.log('totRows : ', totRows);
+		var smsTxtArea = $('#smsTxtArea').val();
+		if(smsTxtArea.indexOf("[*이름*]")  > -1 
+				|| smsTxtArea.indexOf("[*1*]") > -1
+				|| smsTxtArea.indexOf("[*2*]") > -1
+				|| smsTxtArea.indexOf("[*3*]") > -1
+				|| smsTxtArea.indexOf("[*4*]") > -1){
+			
+			fnReplCell();
+			
+		}else{
+			
+			//결제 금액 구하기
+		    totalPriceSum(totRows);
+			
+		} 
+		
+		setAddrMassClose();
+		$('#closeBtn').click();
+	});
+		
+  
+
+	//받는사람 전체삭제 버튼 처리
+	$('#allDel').click(function(){
+		var data = $tableExcel.getRows();	
+		$tableExcel.clearData();
+		$("#excelRowTotCnt").text(0); //총건수 수정
+		$("#excelRowDupCnt").text(0); //중복건수 수정
+		dupliPhoneDataRealList.length = 0;	// 중복 휴대폰번호 초기화
+		
+		// select box 초기화
+		$('.field-selector').each(function() { $(this).val(''); });
+		
+	});
+	
+  
+  
+});
+
+
+
+function excelFileChange(file) {
+	if (file) {
+		fn_loadAddActive();
+		var reader = new FileReader();
+		var extension = file.name.split('.').pop().toLowerCase();
+		reader.onload = function(e) {
+			setTimeout(() => { // 파일 읽기 완료 후 실행되도록 함
+				if (extension === 'xlsx') {
+					var data = new Uint8Array(e.target.result);
+					var workbook = XLSX.read(data, {type: 'array'});
+					var firstSheet = workbook.Sheets[workbook.SheetNames[0]];
+					var jsonData = XLSX.utils.sheet_to_json(firstSheet, {header: 1});
+					processExcelData(jsonData);
+				} else if (extension === 'txt') {
+					var textData = e.target.result;
+					processTextData(textData);
+				} else {
+					alert('지원되지 않는 파일 형식입니다.');
+				}
+				fn_loadRemoveActive();
+			}, 0); // 지연 없이 즉시 실행되도록 0ms 지연을 설정
+		};
+		if (extension === 'xlsx') {
+			reader.readAsArrayBuffer(file);
+		} else if (extension === 'txt') {
+			reader.readAsText(file);
+		}
+	}
+}
+
+
+// 엑셀 데이터 처리 함수
+function processExcelData(data) {
+ var keys = ['A', 'B', 'C', 'D', 'E', 'F', 'G'];
+ var tableData = [];
+ var totalRows = data.length - 2; // 전체 데이터 수 (1, 2행 제외)
+
+
+ // 3번째 행부터 입력 
+ data.slice(0).forEach((row, index) => {
+     var rowData = {};
+     keys.forEach((key, idx) => { // index 변수명 변경 (내부와 외부에서 사용되므로 충돌 방지)
+//      console.log('row[idx] : ', row[idx]);
+//          rowData[key] = row[idx] ? row[idx].trim() : ""; // 각 컬럼에 대해 기본값을 설정
+         rowData[key] = (typeof row[idx] === 'string') ? row[idx].trim() : row[idx];
+     });
+     tableData.push(rowData);
+
+ });
+
+ updateTable(tableData);
+}
+
+
+// 텍스트 데이터 처리 함수
+function processTextData(text) {
+	var lines = text.split('\n'); // 각 줄을 배열로 분리
+	var keys = ['A', 'B', 'C', 'D', 'E', 'F', 'G'];
+	var tableData = [];
+	
+	lines.forEach(line => {
+		var rowData = {};
+		var row = line.split(','); // 쉼표로 분리
+		keys.forEach((key, index) => {
+			rowData[key] = row[index] ? row[index].trim() : ""; // 각 컬럼에 대해 기본값을 설정
+		});
+		tableData.push(rowData);
+	});
+	
+	updateTable(tableData);
+}
+
+//공통 테이블 업데이트 함수
+function updateTable(tableData) {
+	$tableExcel.setColumns([ //Define Table Columns
+ 		{formatter:"rowSelection", titleFormatter:"rowSelection",clipboard:false, headerHozAlign:"center", hozAlign:"center", headerSort:false, cellClick:function(e, cell){
+ 	        cell.getRow().toggleSelect();
+	 		}
+	 	}, 
+		{formatter:"rownum", align:"center" ,title:"No", hozAlign:"center", headerHozAlign:"center", width:60},
+	 	{title:"A", field:"A", hozAlign:"center", headerHozAlign: "center", width:140, validator:["maxLength:100", "string"]},
+	 	{title:"B", field:"B", hozAlign:"center", headerHozAlign: "center", width:140, validator:["maxLength:100", "string"]},
+	 	{title:"C", field:"C", hozAlign:"center", headerHozAlign: "center", width:140, validator:["maxLength:100", "string"]},
+	 	{title:"D", field:"D", hozAlign:"center", headerHozAlign: "center", width:140, validator:["maxLength:100", "string"]},
+	 	{title:"E", field:"E", hozAlign:"center", headerHozAlign: "center", width:140, validator:["maxLength:100", "string"]},
+	 	{title:"F", field:"F", hozAlign:"center", headerHozAlign: "center", width:140, validator:["maxLength:100", "string"]}
+ 	]);
+
+	$tableExcel.setData(tableData).then(() => {
+		// excelRowTotCnt 업데이트
+		document.getElementById("excelRowTotCnt").innerText = tableData.length;
+	});
+	
+	fn_loadRemoveActive();
+}
+
+
+
+/* 
+* 타이틀 select 선택할때마다 실행해서         
+* 데이터테이블 필드값 수정                  
+*/
+function updateTableFields($objTabul) {
+	var currentData = $objTabul.getData();
+	var columns = [
+		{formatter: "rowSelection", titleFormatter: "rowSelection", clipboard: false, hozAlign: "center", headerHozAlign: "center", headerSort: false, cellClick: function(e, cell) {
+			cell.getRow().toggleSelect();
+		}}
+		,{formatter:"rownum", align:"center", title:"No", hozAlign:"center", headerHozAlign:"center", width:60}
+	];
+
+	var fieldMapping = [];
+	$('.field-selector').each(function(index) {
+		var selectedField = $(this).val();
+		//  ASCII 문자 코드 사용 - 65=A, 66=B ...
+		var field = String.fromCharCode(65 + index);
+		if (selectedField) {
+			columns.push({
+				title: field
+				, field: selectedField
+				, hozAlign: "center"
+				, headerHozAlign: "center"
+// 				, editor: "input"
+				, editor: false
+				, width: 140
+				, validator: ["maxLength:100", "string"]
+			});
+			fieldMapping.push(selectedField);
+		} else {
+			columns.push({
+				title: field
+				, field: field
+				, hozAlign: "center"
+				, headerHozAlign: "center"
+				, editor: false
+// 				, editor: "input"
+				, width: 140
+				, validator: ["maxLength:100", "string"]
+			});
+			fieldMapping.push(field);
+		}
+	});
+
+	var updatedData = currentData.map(row => {
+		var newRow = {};
+		fieldMapping.forEach((field, index) => {
+			newRow[field] = row[Object.keys(row)[index]] || "";
+		});
+		return newRow;
+	});
+
+	$objTabul.setColumns(columns);
+	$objTabul.setData(updatedData);
+}
+
+
+/**
+ * @ 핸드폰 중복 데이터
+ * */
+function fn_phoneDupl($objTabul) {
+	 
+	$tableError.clearData();
+	
+	var data = $objTabul.getData();
+	var phoneNumberChk = false;
+	var existingNumbers = new Set(); // 배열에서 Set으로 변경
+	
+	let errorCount = 0; // 중복 번호 개수를 저장할 변수
+	let duplicateCount = 0; // 중복 번호 개수를 저장할 변수
+	
+	const errors = [];  // 오류 데이터를 저장할 배열
+	const duplicates = [];  // 오류 데이터를 저장할 배열
+	const newData = []; // 유효한 데이터만 저장할 새로운 배열
+	
+	data.forEach((row, index) => {
+		if (index % 10000 === 0) {
+		    console.log('i : ', index);
+		}
+		
+		const number = row.addrPhoneNo;
+		const formattedNumber = formatPhoneNumber(number); // 번호 표준화
+		const cleanedNumber = formattedNumber.replace(/[^0-9]/g, ''); // 숫자만 남김
+		
+		if (!existingNumbers.has(cleanedNumber)) { // 중복 번호 체크
+		    if (isValidPhoneNumber(formattedNumber)) { // 유효성 검사
+		        row.addrPhoneNo = formattedNumber;
+		        existingNumbers.add(cleanedNumber); // 추가된 번호를 기존 목록에 추가
+		        newData.push(row); // 유효한 데이터만 새로운 배열에 추가
+		    } else {
+		        // 오류: 유효성 통과 못함
+		        errorCount++;
+		        $tableError.addRow({ 
+		            name: row.addrNm, // 이름
+		            phone: row.addrPhoneNo, // 폰번호
+		            result: "오류" // 결과 메시지 추가
+		        });
+		        errors.push({ 
+		            name: row.addrNm, // 이름
+		            phone: row.addrPhoneNo, // 폰번호
+		            result: "오류" // 결과 메시지 추가
+		        });
+		    }
+		} else {
+		    // 중복
+		    duplicateCount++; // 중복 번호가 발견될 때마다 카운트를 증가
+		    $tableError.addRow({ 
+		        name: row.addrNm, // 이름
+		        phone: row.addrPhoneNo, // 폰번호
+		        result: "중복" // 결과 메시지 추가
+		    });
+		    duplicates.push({ 
+		       name: row.addrNm, // 이름
+		       phone: row.addrPhoneNo, // 폰번호
+		       result: "중복" // 결과 메시지 추가
+		   });
+		}
+	});
+	
+	// data 배열을 newData 배열로 대체
+	data = newData;
+	
+
+	// 수정된 데이터로 테이블 업데이트
+	$objTabul.setData(data);
+	// 오류 총 카운트
+    $("#excelRowTotCnt").text($objTabul.getDataCount());
+	// 중복 카운트
+	$("#excelRowDupCnt").text(duplicateCount);
+	// 에러 카운트
+	$("#excelRowErrorCnt").text(errorCount);
+	
+	// popup 영역
+	// 중복 카운트
+	$("#errorPopDupCnt").text(duplicateCount);
+	// 에러 카운트
+	$("#errorPopErrorCnt").text(errorCount);
+	// 
+	$("#errorPopTotCnt").text(duplicateCount+errorCount);
+	
+	
+	var errorData = errors.concat(duplicates);
+	 // 오류 및 중복 데이터를 한 번에 추가
+	$tableError.setData(errorData);
+	
+	if(errorCount > 0){
+		alert('휴대폰 형식에 맞지 않는 데이터는 삭제 후 업로드 됩니다.\nex) 발송불가 특수문자, 자릿수 오류 등');
+	}
+	
+	
+	
+}
+
+function fn_dupliPopupShow(){
+
+	$("#tableExcelDupliBtn").show();
+}
+
+function makeAddrMassDupliPop(dupliPhoneDataRealList) {
+	var sHtml = "";
+	sHtml += "<div class='' style='overflow-x:auto; height:350px;'>";
+	sHtml += "<table class='tType4'>";
+	sHtml += "		<colgroup>";
+	sHtml += "			<col style='width:auto' />";
+	sHtml += "		</colgroup>";
+	sHtml += "		<thead>";
+	sHtml += "			<tr>";
+	sHtml += "				<th>중복 휴대폰번호 (" + numberWithCommas(dupliPhoneDataRealList.length) + "개)</th>";
+	sHtml += "			</tr>";
+	sHtml += "		</thead>";
+	sHtml += "		<tbody>";
+	for (var i = 0; i < dupliPhoneDataRealList.length; i++) {
+		sHtml += "		<tr>";
+		sHtml += "			<td>" + dupliPhoneDataRealList[i] + "</td>";
+		sHtml += "		</tr>";
+	}
+	sHtml += "		</tbody>";
+	sHtml += "	</table>";
+	sHtml += "	</div>";
+
+	$("#addrMassDupli_layer").html(sHtml);
+	fn_dupliPopupShow();
+	
+}
+
+
+function fn_dupliPopupShow(){
+	$('#tableExcelDupliBtn').show();
+}
+
+//한국의 핸드폰 번호 형식 검사 함수
+function isValidKoreanPhoneNumber(phone) {
+    // 하이픈(-)을 제거하고 숫자만 남긴 후 검사
+    var cleaned = phone.replace(/-/g, '');
+    // 010, 011, 016, 017, 018, 019로 시작하고 10~11자리인 경우 유효
+    var valid = /^(010|011|016|017|018|019)\d{7,8}$/.test(cleaned);
+    return valid;
+}
+
+
+
+
+// 상단 설명 더보기 
+function popMore(e){
+	$(e).closest(".pop_more_cont").toggleClass("pop_more_click");
+	
+	if($(e).closest(".pop_more_cont").is(".pop_more_click")){
+		$(e).html('숨기기');
+		$(e).append('<i></i>');
+	}else {
+		$(e).html('더보기');
+		$(e).append('<i></i>');
+	}
+}
+
+</script>
+
+<!-- 중복전화번호 data-tooltip:addrMassDupli_layer -->
+<div class="tooltip-wrap">
+	<div class="popup-com addrMassDupli_layer" tabindex="0" data-tooltip-con="addrMassDupli_layer" data-focus="addrMassDupli_layer" data-focus-prev="addrMassDupli_layer-close" style="width: 270px; height: 500px;">
+		<div class="popup_heading">
+			<p>중복 휴대폰번호</p>
+			<button type="button" class="tooltip-close" data-focus="addrMassDupli_layer-close" onclick="setAddrDupliClose();"><img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button>
+		</div>
+		<div class="layer_in" style="padding:20px 0px;" id="addrMassDupli_layer">
+		</div>
+		
+		<div class="popup_btn_wrap2" style="margin-top: 0px;">
+			<button type="button" class="tooltip-close" data-focus="addrMassDupli_layer-close" data-focus-next="addrMassDupli_layer">닫기</button>
+		</div>		
+		
+	</div>		
+</div>
+
+
+<!-- 주소록 상세 결과 팝업 data-tooltip:adr_popup14 -->
+	<div class="tooltip-wrap">
+		<div class="popup-com adr_layer adr_popup14" tabindex="0" data-tooltip-con="adr_popup14" data-focus="adr_popup14" data-focus-prev="adr_popu14-close" style="width: 450px;">
+			<div class="popup_heading">
+				<p>주소록 상세 결과</p>
+				<button type="button" class="tooltip-close" data-focus="adr_popup14-close"><img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button>
+			</div>
+			<div class="layer_in" style="padding:30px 20px;">
+				<div class="table_top">
+					<p>
+						총 <span class="c_e40000" id="errorPopTotCnt">0</span>건 
+						/ 중복 <span class="c_002c9a" id="errorPopDupCnt">0</span>건
+						/ 오류 <span class="c_002c9a" id="errorPopErrorCnt">0</span>건</p>
+						<button type="button" class="excel_btn btnType" id="errorExcelBtn"><i class="downroad"></i>엑셀 다운로드</button>
+				</div>
+				<div class="tb_wrap adr_list" id="tabulator_error">
+				<!-- $tableError 참고  -->
+                </div>
+                <ul class="cf_text_ul">
+                    <li>*중복번호는 하나의 번호만 등록됩니다.</li>
+                    <li>*휴대폰 형식에 맞지 않는 데이터는 삭제 후 업로드 됩니다.</li>
+                    <li>ex) 발송불가 특수문자, 자릿수 오류 등</li>
+                </ul>
+                <div class="popup_btn_wrap2">
+<!--                     <button type="button">저장</button> -->
+                    <button type="button" class="tooltip-close" data-focus="adr_popup14-close" data-focus-next="adr_popup14">닫기</button>                      
+                </div>
+			</div>
+		</div>
+	</div>
+
+<!--// 중복전화번호 팝업 -->
+				<div class="popup_heading">
+					<p>엑셀 불러오기</p>
+					<button type="button" class="tooltip-close" id="closeBtn" data-focus="popup02-close"><img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button>
+			   </div>
+				<div class="layer_in" style="padding: 25px 30px;">
+<!-- 					<div class="list_tab_wrap2"> -->
+						<!-- tab button -->
+<!-- 						<ul class="list_tab" id="tbTabl">  -->
+<!-- 							<li class="tab active" data-tabul="tableExcel"><button type="button" onclick="popupTab(this,'1'); fn_tabToggle('1');">엑셀입력</button></li> -->
+<!-- 							<li class="tab" data-tabul="tableClip"><button type="button" onclick="popupTab(this,'2'); fn_tabToggle('2');">붙여넣기</button></li> -->
+<!-- 							<li class="tab" data-tabul="tableSelf"><button type="button" onclick="popupTab(this,'3'); fn_tabToggle('3');">직접입력</button></li> -->
+<!-- 						</ul>// tab button -->
+<!-- 					</div> -->
+					<!-- 엑셀입력 -->
+					<div class="popCont current pop_more_cont" id="popCont_1">
+						<div class="titBox">
+							<p>- 주소록은 한 번에 최대 30만건까지 등록(EXCEL파일, 최대용량 3MB) 가능합니다. </p>
+							<p>- 엑셀 파일에 비밀번호 설정, 제한된 보기, 수식 등이 설정되어 있는 경우 업로드가 불가합니다.</p>
+							<p>- 구분선(|), 역슬래시(\, ₩), 큰따옴표(") 등 발송불가 특수문자는 저장되지 않습니다.</p>
+							<p>- 이름 200byte, [*1*]~[*4*] 200byte, 메모 250byte까지 입력 가능합니다.</p>
+							<p>- 주소록 등록이 어려우신 경우에는 <a href="<c:url value='/web/mjon/addragency/selectAddrAgencyList.do'/>" style="font-weight: bold; color: blue;">주소록 입력대행</a> 메뉴를 이용하실 수 있습니다. </p>
+						</div>
+						<div class="pop_more_wrap">
+								<button type="button" class="pop_more" onclick="popMore(this);">더보기<i></i></button>
+						</div>
+					</div><!--// 엑셀입력 -->
+
+					<!-- 공통 -->
+					<div>
+		                <table class="layer_tType1">
+		                    <caption>엑셀입력 표</caption>
+		                    <colgroup>
+		                        <col style="width: 95px">
+		                        <col style="width: auto">
+		                    </colgroup>
+		                    <tbody>
+		                        <tr>
+		                            <!-- <th>그룹 선택</th>
+		                            <td>
+		                                <label for="" class="label">그룹 선택</label>
+		                                <select id="addrGrpIdInfo" name="addrGrpIdInfo">
+		                                </select>
+	                                    <label for="" class="label">그룹명 입력</label>
+	                                    <input type="text" id="addrGrpNm" name="addrGrpNm" placeholder="새 그룹명을 입력해주세요." onfocus="this.placeholder=''" onblur="this.placeholder='새 그룹명을 입력해주세요.'"class="inputLight" style="width: 300px;">
+		                                <input type="file" id="excelFile" accept=".xls, .xlsx, .txt" style="display:none"/>
+		                                <button type="button" class="excel_btn2 btnType c3"><i class="uproad"></i>엑셀, TXT파일 업로드</button>
+		                            </td> -->
+		                            <td colspan="2" style="padding:20px 0;">
+		                            	<div class="file_upload_wrap" style="width:100%;display:flex;">
+						                	<div class="file_add upload_area">
+												<p><img src="/publish/images/content/file_add.png" alt="파일 붙여넣기">마우스로 엑셀, TXT파일을 여기에 끌어다 놓으세요</p>
+											</div>
+											<input type="file" id="excelFile" accept=".xls, .xlsx, .txt" style="display:none"/>
+					                        <button type="button" class="excel_btn2 btnType c3"><i class="uproad"></i>엑셀, TXT파일 업로드</button>
+						                </div>
+		                            </td>
+		                        </tr>
+		                    </tbody>
+		                </table>
+	                </div>
+	                
+					
+					<div class="excel_middle2">
+						<p>
+							총 <span class="c_e40000 fwBold" id="excelRowTotCnt">0</span>건 
+							/ 중복 <span class="c_002c9a fwBold" id="excelRowDupCnt">0</span>건
+							/ 오류 <span class="c_002c9a fwBold" id="excelRowErrorCnt">0</span>건
+							<button type="button" class="btn_list_detail" data-tooltip="adr_popup14"><img src="/publish/images/search.png"></button>
+						</p>
+<!-- 							&nbsp;  -->
+<!-- 							<button type="button" class="btnType btnType6" data-tooltip="addrMassDupli_layer" id="tableExcelDupliBtn">중복번호</button> -->
+<!-- 							&nbsp; -->
+<!-- 							<button type="button" class="btnType btnType6" data-tooltip="addrMassSaveDupli_layer" onclick="GetAddrMassSaveDupli()" id="btnAddrMassSaveDupli">중복번호</button> -->
+						</p>
+<!-- 						<button type="button" class="btnType btnType6 addCallToF">번호추가</button> -->
+					</div>
+					
+					
+					
+
+                    <div class="adr_excel" style="margin-top: 13px;">
+                        <!-- thead -->
+                        <div class="adr_hd select_adr_hd" data-group="tableExcel">
+                            <div style="width: 100px;"></div>
+                            <div style="width: 140px;">
+                            	<label for="" class="label"></label>
+								<select class="field-selector">
+									<option value="">선택하기</option>
+									<option value="addrNm">이름</option>
+									<option value="addrPhoneNo">휴대폰</option>
+									<option value="addrInfo1">[*1*]</option>
+									<option value="addrInfo2">[*2*]</option>
+									<option value="addrInfo3">[*3*]</option>
+									<option value="addrInfo4">[*4*]</option>
+<!-- 									<option value="addrComment">메모</option> -->
+								</select>
+                            </div>
+                            <div style="width: 140px;">
+                                <label for="" class="label"></label>
+								<select class="field-selector">
+									<option value="">선택하기</option>
+									<option value="addrNm">이름</option>
+									<option value="addrPhoneNo">휴대폰</option>
+									<option value="addrInfo1">[*1*]</option>
+									<option value="addrInfo2">[*2*]</option>
+									<option value="addrInfo3">[*3*]</option>
+									<option value="addrInfo4">[*4*]</option>
+<!-- 									<option value="addrComment">메모</option> -->
+								</select>
+                            </div>
+                            <div style="width: 140px;">
+                                <label for="" class="label"></label>
+								<select class="field-selector">
+									<option value="">선택하기</option>
+									<option value="addrNm">이름</option>
+									<option value="addrPhoneNo">휴대폰</option>
+									<option value="addrInfo1">[*1*]</option>
+									<option value="addrInfo2">[*2*]</option>
+									<option value="addrInfo3">[*3*]</option>
+									<option value="addrInfo4">[*4*]</option>
+<!-- 									<option value="addrComment">메모</option> -->
+								</select>
+                            </div>
+                            <div style="width: 140px;">
+                                <label for="" class="label"></label>
+								<select class="field-selector">
+									<option value="">선택하기</option>
+									<option value="addrNm">이름</option>
+									<option value="addrPhoneNo">휴대폰</option>
+									<option value="addrInfo1">[*1*]</option>
+									<option value="addrInfo2">[*2*]</option>
+									<option value="addrInfo3">[*3*]</option>
+									<option value="addrInfo4">[*4*]</option>
+<!-- 									<option value="addrComment">메모</option> -->
+								</select>
+                            </div>
+                            <div style="width: 140px;">
+                                <label for="" class="label"></label>
+								<select class="field-selector">
+									<option value="">선택하기</option>
+									<option value="addrNm">이름</option>
+									<option value="addrPhoneNo">휴대폰</option>
+									<option value="addrInfo1">[*1*]</option>
+									<option value="addrInfo2">[*2*]</option>
+									<option value="addrInfo3">[*3*]</option>
+									<option value="addrInfo4">[*4*]</option>
+<!-- 									<option value="addrComment">메모</option> -->
+								</select>
+                            </div>
+                            <div style="width: 140px;">
+                                <label for="" class="label"></label>
+								<select class="field-selector">
+									<option value="">선택하기</option>
+									<option value="addrNm">이름</option>
+									<option value="addrPhoneNo">휴대폰</option>
+									<option value="addrInfo1">[*1*]</option>
+									<option value="addrInfo2">[*2*]</option>
+									<option value="addrInfo3">[*3*]</option>
+									<option value="addrInfo4">[*4*]</option>
+<!-- 									<option value="addrComment">메모</option> -->
+								</select>
+                            </div>
+                            <!-- <div style="width: 125px;">
+                                <label for="" class="label"></label>
+								<select class="field-selector">
+									<option value="">선택하기</option>
+									<option value="addrNm">이름</option>
+									<option value="addrPhoneNo">휴대폰</option>
+									<option value="addrInfo1">[*1*]</option>
+									<option value="addrInfo2">[*2*]</option>
+									<option value="addrInfo3">[*3*]</option>
+									<option value="addrInfo4">[*4*]</option>
+									<option value="addrComment">메모</option>
+								</select>
+                            </div> -->
+                        </div>
+                     </div>					
+					
+					<div class="drag_drop_wrap callList_includ_box" id="tabulator_excel">
+<!-- 						<img src="/publish/images/content/excel.jpg" style="width: 100%;"> -->
+					</div>
+					<div class="excel_middle">
+						<div class="select_btnWrap clearfix">
+							<div>
+								<button type="button" id="allDel"><i class="remove_img"></i>전체삭제</button>
+								<button type="button" id="in_select_del"><i class="remove_img"></i>선택삭제</button>
+							</div>
+	
+						</div>
+					</div><!--// 공통 -->     
+	
+					<!-- 붙여놓기 설명 -->
+<!-- 	                <div class="req_area"> -->
+<!-- 	                  	<div class="text_box"> -->
+<!-- 	                    	- 휴대폰 번호가 입력된 txt 파일을 열어 복사(Ctrl+c) + 붙여넣기(Ctrl+v)로도 입력하실 수 있습니다.<br> -->
+<!-- 							- 휴대폰 번호는 필수입력 항목입니다.<br> -->
+<!-- 							- 이름,휴대폰 번호,[*1*],[*2*],[*3*],[*4*],메모 순서대로 입력해주세요.(예 : 010-1234-5678,홍길동,변수1…메모)<br> -->
+<!-- 							- 이름은 24byte, [*1*]~[*4*] 40byte, 메모는 250byte까지 입력 가능합니다.<br> -->
+<!-- 							- '오류 검사'를 통해 등록된 데이터에 전화번호 입력 오류를 확인하실 수 있습니다. -->
+<!-- 						</div> -->
+<!-- 	                </div> -->
+					<div class="popup_btn_wrap2" style="margin: 0 auto 30px auto;">
+						<button type="button" id="btnAddrMassReg">추가</button>
+						<button type="button" id="btnAddrMassClose" class="tooltip-close" data-focus="adr_popup01-close"  data-focus-next="popup02">닫기</button>                      
+					</div>
+				
 				</div>
(No newline at end of file)
src/main/webapp/WEB-INF/jsp/web/pay/PayGuide.jsp
--- src/main/webapp/WEB-INF/jsp/web/pay/PayGuide.jsp
+++ src/main/webapp/WEB-INF/jsp/web/pay/PayGuide.jsp
@@ -1,867 +1,867 @@
-<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-
-<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
-
-<script>
-// 문자 단가
-var shortPrice = "${shortPrice}";
-var longPrice = "${longPrice}";
-var picturePrice = "${picturePrice}";
-var picturePrice2 = "${picturePrice2}";
-var picturePrice3 = "${picturePrice3}";
-var kakaoAtPrice = "${kakaoAtPrice}";
-var faxPrice = "${faxPrice}";
-
-var smsList = new Array();		// 품목추가 Array
-var supplySumPrice = 0;		// 공급가액
-var vatSumPrice = 0;		// 부가세액
-var totSumPrice = 0;		// 합계
-
-// 탭이동
-var tabType = "${tabType}";
-
-$(document).ready(function () {
-	
-	// 품목정보 추가
-	getSmsItemAdd();
-	
-	// 품목 Change Event
-	$("#smsItem").change(function(){
-		$("#unitPrice").val($("#smsItem option:selected").val());
-
-		var optNm = $("#smsItem option:selected").text();
-		if(optNm.includes('팩스')){
-			$('#faxPages').show();
-		}else{
-			$('#faxPages').hide();
-		}
-	});
-	
-	// 품목추가 Click Event
-	$("#btnItemAdd").click(function(){
-		// 품목추가
-		setItemAdd();
-	});	
-	
-	// 품목삭제 Click Event
-	$("#btnItemDel").click(function(){
-		// 품목삭제
-		setItemDel();
-		
-		//품목추가 Html
-		setItemAddHtml();		
-	});		
-	
-	// 부가세별도 여부 Change Event
-	$("#isVat").change(function(){
-		//품목추가 Html
-		setItemAddHtml();		
-	});
-	
-	// 견적내기화면으로 이동
-	if (tabType == "2") {
-		$("#btnEstimate").trigger("click");
-	}
-	
-	//등급제 시행 ON/OFF 체크(비로그인)
-	//getMberSettingDetailByNotLogin();
-		
-	// 등급제 대상 여부
-	//getMberGrdChk();
-	
-});
-
-//품목정보 추가
-function getSmsItemAdd() {
-	var sHtml = "";	
-	sHtml += "<option value='" + shortPrice + "'>단문(SMS)</option>";
-	sHtml += "<option value='" + longPrice + "'>장문(LMS)</option>";
-	sHtml += "<option value='" + picturePrice + "'>그림문자(1장)</option>";
-	sHtml += "<option value='" + picturePrice2 + "'>그림문자(2장)</option>";
-	sHtml += "<option value='" + picturePrice3 + "'>그림문자(3장)</option>";
-	sHtml += "<option value='" + kakaoAtPrice + "'>카톡(알림톡)</option>";
-	sHtml += "<option value='" + faxPrice + "'>팩스</option>";
-
-	$("#smsItem").append(sHtml);
-	
-	// 단가 초기값
-	$("#unitPrice").val($("#smsItem option:selected").val());
-}
-	
-
-// 품목추가
-function setItemAdd() {
-	var caseNumber = $("#caseNumber").val().trim().replaceAll(",", "");
-	var casePage = $("#casePage").val().trim().replaceAll(",", "");
-	
-	if (caseNumber == null || caseNumber == "" || caseNumber == undefined) {
-		alert("건수를 입력하세요.");
-		return false;
-	}
-	else if (isNaN(caseNumber) == true) {
-		alert("건수는 숫자를 입력하세요.");
-		return false;		
-	}
-	
-	// 객체 생성 
-	var data = new Object(); 
-	data.smsItemName = $("#smsItem option:selected").text();		// 품목명
-	data.unitPrice = $("#unitPrice").val();		// 단가
-	data.unitPricePlusVat = $("#unitPrice").val();		// 단가
-	data.caseNumber = caseNumber;	// 건수
-	data.supplyPrice = $("#unitPrice").val() * caseNumber;
-	data.totPrice = $("#unitPrice").val() * caseNumber;	// 금액
-	
-	var itmNm = data.smsItemName 
-	if(itmNm.includes('팩스')){//팩스인 경우 매수 곱해주기
-		data.casePage = casePage;
-		data.supplyPrice = $("#unitPrice").val() * (caseNumber * casePage);
-		data.totPrice = $("#unitPrice").val() * (caseNumber * casePage);	// 금액
-	}
-	
-	// 리스트에 생성된 객체 삽입 
-	smsList.push(data); 
-	
-	//품목추가 Html
-	setItemAddHtml();
-	}
-	
-//품목추가 Html
-function setItemAddHtml() {
-	var isVat = $("#isVat option:selected").val();
-	
-	// 부가세 케이스별 다시계산
-	smsList.forEach(function(element) {
-		var itmNm = element.smsItemName;
-
-		if (isVat == 1) {
-			
-			if(itmNm.includes('팩스')){//팩스인 경우 건수 * 매수에 대한 금액의 부가세를 계산해야함.
-				// 부가세 포함
-				element.vatPrice = Math.round(element.unitPrice * 0.1 * (element.caseNumber * element.casePage));
-			}else{
-				// 부가세 포함
-				element.vatPrice = Math.round(element.unitPrice * 0.1 * element.caseNumber);
-				//element.unitPricePlusVat = parseInt(element.unitPrice, 10) + Math.round(element.unitPrice * 0.1);
-			}
-			
-		}
-		else {
-			// 부가세 별도(부가세 : 0)
-			element.vatPrice = 0;
-		}
-		
-		if(itmNm.includes('팩스')){//팩스인 경우 건수 * 매수에 대한 금액의 부가세를 계산해야함.
-			element.totVatPrice = (element.unitPrice * (element.caseNumber * element.casePage)) + element.vatPrice;	// 금액
-		}else{
-			element.totVatPrice = (element.unitPrice * element.caseNumber) + element.vatPrice;	// 금액		
-		}
-	})	
-	
-	vatSumPrice = 0;
-	supplySumPrice = 0;
-	totSumPrice = 0;
-	
-	var sHtml = "";
-	smsList.forEach(function(element) {
-		supplySumPrice += element.supplyPrice;
-		totSumPrice += element.totPrice;
-		
-		sHtml += "<div class='tType3_bd'>";
-		sHtml += "    <div>";
-		sHtml += "        <label for='' class='label'>한 줄 전체 선택</label>";
-		sHtml += "        <input type='checkbox' id='chkEach' name='chkEach'>";
-		sHtml += "    </div>";
-		sHtml += "    <div>" + element.smsItemName + "</div>";
-		if (isVat == 1) {
-			// 부가세 포함
-			sHtml += "    <div>" + element.unitPricePlusVat + "</div>";			
-		}
-		else {
-			sHtml += "    <div>" + element.unitPrice + "</div>";	
-		}
-		if(element.smsItemName.includes('팩스')){
-			sHtml += "    <div>" + numberWithCommas(element.caseNumber * element.casePage) + "</div>";
-		}
-		else {
-			sHtml += "    <div>" + numberWithCommas(element.caseNumber) + "</div>";
-		}
-		sHtml += "    <div>" + numberWithCommas(element.supplyPrice) + "</div>";
-		sHtml += "    <div>" + numberWithCommas(element.vatPrice) + "</div>";
-		sHtml += "    <div>" + numberWithCommas(element.totVatPrice) + "</div>";
-		sHtml += "</div>";
-	})
-	
-	$("#itemList").html(sHtml);
-	
-	// Sum
-	setEstimateSum();
-	}
-	
-// Sum
-function setEstimateSum() {
-	var isVat = $("#isVat option:selected").val();
-	console.log("setEstimateSum")
-	if (isVat == 1) {
-		// 부가세 포함
-		vatSumPrice = Math.round(supplySumPrice * 0.1);	
-		totSumPrice = totSumPrice + vatSumPrice;
-	}
-	else {
-		// 부가세 별도(부가세 : 0)
-		vatSumPrice = 0;
-		supplySumPrice = supplySumPrice - vatSumPrice;;
-	}
-	
-	$("#supplySumPriceStr").html(numberWithCommas(supplySumPrice));
-	$("#totSumPriceStr").html(numberWithCommas(totSumPrice));
-	/* if($("#isVat option:selected").val() == '0'){
-		$("#isVatStr").html($("#isVat option:selected").text() + '(' + numberWithCommas(vatSumPrice) + ')');	
-	}else{
-		$("#isVatStr").html($("#isVat option:selected").text());
-	} */
-	$("#isVatStr").html(numberWithCommas(vatSumPrice));
-	
-	$("#smsList").val(JSON.stringify(smsList));
-	$("#supplySumPrice").val(supplySumPrice);
-	$("#vatSumPrice").val(vatSumPrice);
-	$("#totSumPrice").val(totSumPrice);
-	
-}
-
-// 품목 삭제
-function setItemDel() {
-	//체크박스 체크
-	var smsListLen = smsList.length;
-	while (smsListLen--) {
-		if ($('input[name=chkEach]').eq(smsListLen).is(':checked') == true) {
-			smsList.splice(smsListLen, 1);	
-		} 
-	}	
-}
-	
-//유효성 검사
-function ValidationCheck() {
-	var title = $("#title").val().trim();
-	var recipientName = $("#recipientName").val().trim();
-	var managerName = $("#managerName").val().trim();
-	var mobile = $("#mobile").val().trim();
-	var publishDate = $("#publishDate").val().trim();
-	
-	if (title == null || title == "" || title == undefined) {
-		alert("제목을 입력하세요.");
-		$("#title").focus();
-		return false;
-	}		
-	else if (recipientName == null || recipientName == "" || recipientName == undefined) {
-		alert("수신자(기업명)을 입력하세요.");
-		$("#recipientName").focus();
-		return false;
-	}	
-	else if (managerName == null || managerName == "" || managerName == undefined) {
-		alert("담당자(성명)을 입력하세요.");
-		$("#managerName").focus();
-		return false;
-	}	
-	else if (mobile == null || mobile == "" || mobile == undefined) {
-		alert("연락처를 입력하세요.");
-		$("#mobile").focus();
-		return false;
-	}	
-	else if (publishDate == null || publishDate == "" || publishDate == undefined) {
-		alert("발행일을 입력하세요.");
-		$("#publishDate").focus();
-		return false;
-	}		
-	else if (smsList.length == 0) {
-		alert("품목정보를 하나이상 추가해주세요.");
-		return false;
-	}		
-}
-
-/* 인쇄미리보기 클릭 시 견적서 새창 팝업 오픈  */
-function showEst() {
-
-	// 유효성 검사
-	if (ValidationCheck() == false) return false;
-	
-	//만들려는 팝업의 크기
-	var popup_wid = 820;
-	var popup_ht = 900;
-	
-	//중앙 정렬을 위해 윈도우 스크린의 width,height 구하는 변수 만듦
-	var popup_left = (window.screen.width / 2) - (popup_wid / 2);
-	var popup_top =(window.screen.height / 2) - (popup_ht / 2);
-
-	// From Submit
-	var myForm = document.popForm;
-	var url = "/web/pay/PayEstimateAjax.do";
-	window.open('' ,'popForm', 'scrollbars=1, width='+ popup_wid +', height='+ popup_ht +', left=' + popup_left + ', top='+ popup_top);
-	myForm.action =url; 
-	myForm.method="post";
-	myForm.target="popForm";
-	myForm.testVal = 'test';
-	myForm.submit();
-}
-
-function inputNumberFormatPay(obj) {
-	$(obj).val($(obj).val().replace(/[^0-9]/g,""));
-	
-	$('#caseNumber').val(numberWithCommas(obj.value));
-}
-
-
-function inputPagesNumberFormatPay(obj) {
-	$(obj).val($(obj).val().replace(/[^0-9]/g,""));
-	
-	$(obj).val(numberWithCommas(obj.value));
-}
-function inputPagesNumber(obj) {
-	$(obj).val($(obj).val().replace(/[^0-9]/g,""));
-}
-
-function fn_gunClear(){
-	$('#caseNumber').val('');
-}
-
-
-//체크박스 전체선택/해제
-$(document).on("click", "#chkAll", function(e) {
-	var isChecked = $(this).is(":checked");
-	$("input[name=chkEach]:checkbox").prop("checked", isChecked);
-});	
-
-/* 윈도우팝업 열기 */
-function infoPop(pageUrl){
-	document.infoPopForm.pageType.value = pageUrl;
-	document.infoPopForm.action = "/web/pop/infoPop.do";
-	document.infoPopForm.method = "post"; 
-	window.open("about:blank", 'infoPop', 'width=790, height=280, top=100, left=100, fullscreen=no, menubar=no, status=no, toolbar=no, titlebar=yes, location=no, scrollbars=1');
-	document.infoPopForm.target = "infoPop";
-	document.infoPopForm.submit();
-}
-
-
-//등급제 시행 ON/OFF 체크(비로그인)
-function getMberSettingDetailByNotLogin() {
-	$.ajax({
-        type: "POST",
-        url: "/web/grd/mberSettDetailByNotLoginAjax.do",
-        data: {},
-        dataType:'json',
-        async: false,
-        success: function (data) {
-			if (data.isSuccess) {
-				// 문자(등급별 요금 안내)
-				$("#mberGrdSettingArea").show();
-			} 
-			else {
-				//alert("Msg : " + data.msg);
-			}
-		},
-        error: function (e) { 
-        	//alert("ERROR : " + JSON.stringify(e)); 
-        }
-    });				
-}		
-
-// 등급제 대상 여부
-function getMberGrdChk() {
-	$.ajax({
-        type: "POST",
-        url: "/web/grd/mberGrdChkAjax.do",
-        data: {},
-        dataType:'json',
-        async: false,
-        success: function (data) {
-			if (data.isSuccess) {
-				// 등급제 누적결제액 세부내역
-				$("#grdShowArea").html("(등급 : " + data.rtnMberGrdVO.grdSetNm + ")");
-				$("#levelSubTitle").html("(" + data.rtnMberGrdVO.grdDate + " ~ 현재)");				
-			} 
-			else {
-				//alert("Msg : " + data.msg);
-			}
-		},
-        error: function (e) { 
-        	//alert("ERROR : " + JSON.stringify(e)); 
-        }
-    });				
-}		
-
-</script>
-
-<form name="popForm" method="post">
-	<input type="hidden" name="smsList" id="smsList" value="" />
-	<input type="hidden" name="supplySumPrice" id="supplySumPrice" value="" />
-	<input type="hidden" name="vatSumPrice" id="vatSumPrice" value="" />
-	<input type="hidden" name="totSumPrice" id="totSumPrice" value="" />
-		
-		<!-- content 영역 -->
-	<div class="inner">
-		<!-- send top -->
-		<div class="send_top">
-			<!-- tab button -->
-			<ul class="tabType4">
-				<li class="tab active"><button type="button">요금안내/견적내기</button></li>
-				<li class="tab"><button type="button" onclick="location.href='/web/member/pay/PayView.do'">결제하기</button></li>
-				<li class="tab"><button type="button" onclick="location.href='/web/member/pay/PayList.do'">요금 결제내역</button></li>
-				<li class="tab"><button type="button" onclick="location.href='/web/member/pay/PayUserSWList.do'">요금 사용내역</button></li>
-				<li class="tab"><button type="button" onclick="location.href='/web/member/pay/BillPub.do'">세금계산서 발행 등록</button></li>
-			</ul>
-			<!--// tab button -->
-			<!-- 결제관리 - 요금안내/견적내기 -->
-			<div class="serv_content charg_cont current" id="tab5_1">
-				<div class="heading">
-					<h2>요금안내/견적내기</h2>
-					<button type="button" class="button info" onclick="infoPop('PayGuide');">사용안내</button>
-				</div>
-				<!-- tab button -->
-				<div class="pay_tab_wrap">
-					<ul class="tabType1">
-						<li class="tab active">
-							<button type="button" onclick="TabType1(this,'1')">요금안내</button>
-						</li>
-						<li class="tab">
-							<button type="button" onclick="TabType1(this,'2')" id="btnEstimate">견적내기</button>
-						</li>
-					</ul>
-				</div>
-				<!--// tab button -->
-				<!-- 결제관리 - 요금안내/견적내기 - 요금안내 -->
-				<div class="fee_cont current fee_wrap" id="tab1_1">
-					<div>
-						<p class="tType1_title">
-							<img src="/publish/images/content/icon_fee1.png" alt="문자이미지"> 문자<span class="level_first" id="grdShowArea"></span>
-						</p>
-						<table class="tType2">
-							<caption></caption>
-							<colgroup>
-								<col style="width: 18%;">
-								<col style="width: auto;">
-								<col style="width: 32%;">
-							</colgroup>
-							<thead>
-								<tr>
-									<th>구분</th>
-									<th>특징</th>
-									<th>가격</th>
-								</tr>
-							</thead>
-							<tbody>
-								<tr>
-									<th>단문(SMS)</th>
-									<td>90Byte 이하 단문 메시지(이미지 첨부 불가)</td>
-									<td><span>${shortPrice}</span>원</td>
-								</tr>
-								<tr>
-									<th>장문(LMS)</th>
-									<td>91~2,000Byte 이하 장문메시지(이미지 첨부 불가)</td>
-									<td><span>${longPrice}</span>원</td>
-								</tr>
-								<tr>
-									<th>그림문자(MMS)</th>
-									<td>2,000Byte 이하 문자 및 이미지를 포함하는그림메시지(이미지 최대 3장 첨부 가능) </td>
-									<td>1장 : <span>${picturePrice}</span>원 / 2장 : <span>${picturePrice2}<span>원/ 3장 : <span>${picturePrice3}</span>원</td>
-								</tr>
-							</tbody>
-						</table>
-						<span class="reqTxt4">* 텍스트 용량(Byte)에 대한 안내 : 한글2Byte, 영문·숫자 1Byte를 차지.</span>
-					
-						<!--문자_등급별 요금 안내 추가 시작-->
-						<div id="mberGrdSettingArea" style="display: none;">
-							<p class="tType1_title level"><img src="/publish/images/content/icon_fee1.png" alt="문자이미지"> 문자<span>(등급별 요금 안내)</span></p>
-							<table class="tType2 tType2_level">
-								<caption></caption>
-								<colgroup>
-									<col style="width: 13%;">
-									<col style="width: auto;">
-									<col style="width: 11%;">
-									<col style="width: 11%;">
-									<col style="width: 11%;">
-									<col style="width: 11%;">
-									<col style="width: 11%;">
-								</colgroup>
-								<thead>
-									<tr>
-										<th>등급</th>
-										<th class="th_second">누적결제액<span id="levelSubTitle"></span></th>
-										<th>단문</th>
-										<th>장문</th>
-										<th>그림(1장)</th>
-										<th>그림(2장)</th>
-										<th>그림(3장)</th>
-									</tr>
-								</thead>
-								<tbody>
-				    				<c:forEach var="result" items="${mberGrdSettingList}" varStatus="status">
-									<tr class="level_table">
-										<th><c:out value="${result.grdSetNm}"/></th>
-										<td class="level_price"><c:out value="${result.stdAmtComma}"/></td>
-										<td><c:out value="${result.shortPrice}"/></td>
-										<td><c:out value="${result.longPrice}"/></td>
-										<td><c:out value="${result.picturePrice}"/></td>
-										<td><c:out value="${result.picture2Price}"/></td>
-										<td><c:out value="${result.picture3Price}"/></td>
-									</tr>
-									</c:forEach>													
-								</tbody>
-							</table>
-							<span class="reqTxt4">
-								* 등급별 요금제는 당사의 정책 및 운영의 필요상 수정, 중단 또는 변경될 수 있습니다. <br>
-								* 누적결제액은 등급별 요금제 적용일로부터 적립된 결제금액을 말하며, 누적결제액에 따라 등급은 자동으로 적용됩니다. <br>
-								* "첫결제 이벤트" 등 이벤트 결제금액은 등급별 요금제 누적결제액에서 제외됩니다. <br>
-							</span> 
-							<p class="reqTxt4 reqTxt4_last">
-								* 문자피싱, 스미싱, 주식, 도박, 로또, 스팸, 사기, 협박, 범죄, 유사투자, 유사수신 등을 목적으로 하거나 교사 또는 방조하는 내용의 정보, 발신번호 조작 등으로 인지되는 문자에 대해서는 사전 또는 즉시 발송을 차단하고
-   								이용을 정지시킬 수 있으며, 이에 대한 어떠한 환불이나 보상을 실시하지 않습니다. 또한, 상기 문자를 발송한 회원에 대해서는 그 즉시 등급별 요금제 혜택을 취소합니다. 
-							</p>
-						</div>
-						<!--문자_등급별 요금 안내 추가 끝-->					
-					
-						<p class="tType1_title"><img src="/publish/images/content/icon_fee2.png" alt="알림톡 아이콘 이미지"> 알림톡</p>
-						<table class="tType2">
-							<colgroup>
-								<col style="width: 20%;">
-								<col style="width: 60%;">
-								<col style="width: 20%;">
-							</colgroup>
-							<thead>
-								<tr>
-									<th>구분</th>
-									<th>특징</th>
-									<th>가격</th>
-								</tr>
-							</thead>
-							<tbody>
-								<tr>
-									<th>알림톡</th>
-									<td>카카오톡을 통해 친구 추가 여부와 관계 없이 휴대폰 번호로 발송이 가능한 정보성 메시지<br>(1,000자 이하의 텍스트 및 이미지 중 카카오 사전 승인 건에 한하여 발송 가능)</td>
-									<td>1장 : <span>${kakaoAtPrice}</span>원</td>
-								</tr>
-							</tbody>
-						</table>
-						<span class="reqTxt4">* 텍스트 용량(Byte)에 대한 안내 : 한글2Byte, 영문·숫자 1Byte를 차지.</span>
-						
-						<p class="tType1_title"><img src="/publish/images/content/icon_fee_fax.png" alt="팩스 아이콘 이미지"> 팩스</p>
-						<table class="tType2">
-							<colgroup>
-								<col style="width: 20%;">
-								<col style="width: 60%;">
-								<col style="width: 20%;">
-							</colgroup>
-							<thead>
-								<tr>
-									<th>구분</th>
-									<th>특징(전송가능확장자)</th>
-									<th>가격</th>
-								</tr>
-							</thead>
-							<tbody>
-								<tr>
-									<th>팩스</th>
-									<td>전송 가능 파일(hwp, pdf, ppt, xls, xlsx, doc, jpg, jpeg, bmp, txt, gif, hwpml, tif, gul)</td>
-									<td>1매 : <span>${faxPrice}</span>원</td>
-								</tr>
-							</tbody>
-						</table>
-						
-						<p class="tType1_title"><img src="/publish/images/content/icon_fee3.png" alt="그림문자 맞춤제작 이미지"> 그림문자 맞춤제작</p>
-						<table class="tType2">
-							<caption></caption>
-							<colgroup>
-								<col style="width: 80%;">
-								<col style="width: 20%;">
-							</colgroup>
-							<thead>
-								<tr>
-									<th>구분</th>
-									<th>가격</th>
-								</tr>
-							</thead>
-							<tbody>
-								<tr>
-									<th>문자온 샘플 수정(글자, 색상, 폰트 등)</th>
-									<td><span>${customSamplePrice}</span>원</td>
-								</tr>
-								<tr>
-									<th>이미지 편집(첨부이미지 1장)</th>
-									<td><span>${customEditPrice}</span>원</td>
-								</tr>
-								<tr>
-									<th>이미지 편집(첨부이미지 3장이하)</th>
-									<td><span>${customEdit3Price}</span>원</td>
-								</tr>
-								<tr>
-									<th>텍스트 단순수정</th>
-									<td><span>${customTextPrice}</span>원</td>
-								</tr>
-							</tbody>
-						</table>
-						<span class="reqTxt4">* 텍스트 단순수정 요청은 맞춤제작이 완료된 그림문자의 수정 시에만 가능합니다.</span>
-						
-						<div class="banner">
-							<p>대량발송 고객 가격협의 가능</p>
-							<ul>
-								<li><img src="/publish/images/content/banner_call01.png" alt=""><p>전화 <strong>1551-8011</strong><p></li>
-								<li><img src="/publish/images/content/banner_email01.png" alt=""><p>이메일<span>help@iten.co.kr</span> <button type="button" onclick="location.href='mailto:help@iten.co.kr'">상담하기</button></li>
-								<li><img src="/publish/images/content/banner_kakao01.png" alt=""><p>카카오톡<span>munjaon</span><a href="http://pf.kakao.com/_PxoTtb/chat" target="_blank">상담하기</a><p></li>
-							</ul>
-						</div>
-					</div>
-				</div>
-				<!--// 결제관리 - 요금안내/견적내기 - 요금안내 -->
-			
-				<!-- 결제관리 - 요금안내/견적내기 - 견적내기 -->
-				<div class="fee_cont" id="tab1_2">
-					<ul class="clause_list">
-						<li class="list_open on">
-							<div class="clause_list_head">
-								<div class="list_head_in">
-									<span><i></i>요금안내</span>
-									<button type="button" onclick="clause_list(this);"><i></i></button>
-								</div>
-							</div>
-							<div class="clause_list_body">
-								<table class="refund_info">
-									<caption>요금 안내</caption>
-									<colgroup>
-										<col style="width: 13%;">
-										<col style="width: auto;">
-										<col style="width: 25%;">
-									</colgroup>
-									<thead>
-										<tr>
-											<th>구분</th>
-											<th>특징</th>
-											<th>금액</th>
-										</tr>
-									</thead>
-									<tbody>
-										<tr>
-											<td>단문(SMS)</td>
-											<td>90Byte 이하 단문 메시지(이미지 첨부 불가)</td>
-											<td><span>${shortPrice}</span>원</td>
-										</tr>
-										<tr>
-											<td>장문(LMS)</td>
-											<td>91~2,000Byte 이하 장문메시지(이미지 첨부 불가)</td>
-											<td><span>${longPrice}</span>원</td>
-										<tr>
-											<td>그림문자(MMS)</td>
-											<td>2,000Byte 이하 문자 및 이미지를 포함하는 그림메시지(이미지 최대 3장 첨부 가능)</td>
-											<td>1장 : <span>${picturePrice}</span>원 / 2장 : <span>${picturePrice2}</span>원 / 3장 : <span>${picturePrice3}</span>원</td>
-										</tr>
-										<tr>
-											<td>카카오(알림톡)</td>
-											<td>카카오톡을 통해 친구 추가 여부와 관계 없이 휴대폰 번호로 발송이 가능한 정보성 메시지(1,000자 이하의 텍스트 및 이미지 중 카카오 사전 승인 건에 한하여 발송 가능)</td>
-											<td><span>${kakaoAtPrice}</span>원</td>
-										</tr>
-										<tr>
-											<td>팩스</td>
-											<td>전송 가능 파일(hwp, pdf, ppt, xls, xlsx, doc, jpg, jpeg, bmp, txt, gif, hwpml, tif, htm, html, gul)</td>
-											<td><span>${faxPrice}</span>원</td>
-										</tr>
-										<tr>
-											<td>맞춤제작</td>
-											<td>문자온 샘플 수정(글자, 색상, 폰트 등)</td>
-											<td><span>${customSamplePrice}</span>원</td>
-										</tr>
-										<tr>
-											<td>맞춤제작</td>
-											<td>이미지 편집(첨부이미지 1장)</td>
-											<td><span>${customEditPrice}</span>원</td>
-										</tr>
-										<tr>
-											<td>맞춤제작</td>
-											<td>이미지 편집(첨부이미지 3장이하)</td>
-											<td><span>${customEdit3Price}</span>원</td>
-										</tr>
-										<tr>
-											<td>맞춤제작</td>
-											<td>텍스트 단순수정</td>
-											<td><span>${customTextPrice}</span>원</td>
-										</tr>
-									</tbody>
-								</table>
-							</div>
-						</li>
-					</ul>
-					<div>
-						<p class="tType1_title">일반정보</p>
-						<table class="tType1">
-							<caption></caption>
-							<colgroup>
-								<col style="width: 150px;">
-								<col style="width: auto;">
-							</colgroup>
-							<tbody>
-								<tr>
-									<th>제목</th>
-									<td>
-										<label for="" class="label">견적내기 제목</label>
-										<input type="text" id="title" name="title" placeholder="견적서" onfocus="this.placeholder=''" onblur="this.placeholder='견적서'" style="width: 400px;" maxlength="20">
-									</td>
-								</tr>
-								<tr>
-									<th>수신자(기업명)</th>
-									<td>
-										<label for="" class="label">수신자(기업명) 입력</label>
-										<input type="text" id="recipientName" name="recipientName" style="width: 400px;" maxlength="18">
-									</td>
-								</tr>
-								<tr>
-									<th>담당자(성명)</th>
-									<td>
-										<label for="" class="label">담당자(성명) 입력</label>
-										<input type="text" id="managerName" name="managerName" style="width: 400px;" maxlength="18">
-									</td>
-								</tr>
-								<tr>
-									<th>연락처</th>
-									<td>
-										<label for="" class="label">연락처 입력</label>
-										<input type="text" onkeyup="inputPagesNumber(this)"; maxlength="11" id="mobile" name="mobile" style="width: 400px;">
-									</td>
-								</tr>
-								<tr>
-								<th>발행일</th>
-								<td>
-									<div class="calendar_wrap">
-										<input type="text" class="calendar" title="발행일" id="publishDate" name="publishDate">
-									</div>
-								</td>
-								</tr>
-							</tbody>
-						</table>
-						
-						<p class="tType1_title">품목정보</p>
-						<table class="tType1 itemInfo">
-							<caption></caption>
-							<colgroup>
-								<col style="width: 150px;">
-								<col style="width: auto;">
-							</colgroup>
-							<tbody>
-								<tr>
-									<th>구분</th>
-									<td>
-										<label for="" class="label">품목 선택</label>
-										<select id="smsItem" name="smsItem" onchange="fn_gunClear();" style="width: 210px;">
-										</select>
-										<label for="" class="label">품목 별 단가</label>
-										<input type="text" id="unitPrice" name="unitPrice" value="0" placeholder="" readonly class="readonly">
-										<p class="input_in">원</p>
-									</td>
-								</tr>
-								<tr>
-									<th>건수</th>
-									<td class="publish_btn">
-										<label for="" class="label">건수 입력</label>
-										<input type="text" id="caseNumber" numberOnly maxlength="10"  name="caseNumber" style="width: 210px;" onkeyup="inputNumberFormatPay(this)">
-										<p class="input_in">건</p>
-										<div>
-											<button type="button" class="btnType" id="btnItemAdd">품목추가<i class="arrow_img"></i></button>
-										</div>
-									</td>
-								</tr>
-								<tr id="faxPages" style="display:none;">
-                                    <th>매수</th>
-                                    <td class="publish_btn">
-                                        <label for="" class="label">매수 입력</label>
-                                        <input type="text" id="casePage" name="casePage" style="width: 210px;" onkeyup="inputPagesNumberFormatPay(this)">
-                                        <p class="input_in">매</p>
-                                    </td>
-                                </tr>
-							</tbody>
-						</table>
-						<div class="search_group_bottom2">
-							<div class="btnWrap1">
-								<button type="button" class="btnType" id="btnItemDel"><i class="remove_img"></i>선택삭제</button>
-							</div>
-						</div>
-						<!-- table -->
-						<div class="tType3 payDetail">
-							<!-- thead -->
-							<div class="tType3_hd">
-								<div>
-									<label for="" class="label">전체 선택</label>
-									<input type="checkbox" id="chkAll">
-								</div>
-								<div>품목</div>
-								<div>단가(원)</div>
-								<div>건수(건)</div>
-								<div>공급가액(원)</div>
-								<div>세액(부가세)</div>
-								<div>금액(원)</div>
-							</div>
-							<!-- tbody -->
-							<div class="tType3_bd_wrap" id="itemList">
-								<div class="tType3_bd">
-									<div></div>
-									<div></div>
-									<div></div>
-									<div></div>
-									<div></div>
-									<div></div>
-									<div></div>
-								</div>
-							</div>
-						</div>
-						<!--// table -->
-						<div class="tb_wrap totalPrice_tb">
-							<table class="tType4">
-								<colgroup>
-									<col style="width: 25%;">
-									<col style="width: 25%;">
-									<col style="width: 30%;">
-									<col style="width: 15%;">
-								</colgroup>
-								<thead>
-									<tr>
-										<th>공급가액</th>
-										<th>세액(부가세)</th>
-										<th>합계</th>
-										<th>비고</th>
-									</tr>
-								</thead>
-								<tbody>
-									<tr>
-										<td>
-											<span id="supplySumPriceStr"></span>
-										</td>
-										<td>
-											<span id="isVatStr"></span>
-										</td>
-										<td>
-											<span id="totSumPriceStr"></span>
-										</td>
-										<td style="text-align: center;">
-											<label for="" class="label">부가세 포함,별도 선택</label>
-											<select id="isVat" name="isVat" class="selType2">
-												<option value="0">부가세 별도</option>
-												<option value="1" selected>부가세 포함</option>
-											</select>
-										</td>
-									</tr>
-								</tbody>
-							</table>
-						</div>
-						<!-- //주소록리스트 -->
-						<div style="text-align: center;">
-							<button class="btnType btnType16" onclick="showEst(); return false;">발행하기</button>
-						</div>
-					</div>
-				</div>
-				<!-- 결제관리 - 요금안내/견적내기 - 견적내기 -->
-			</div>
-		</div>
-		<!-- 결제관리 - 요금안내/견적내기 --> 
-	</div>
-	<!--// send top -->
-</form>
-<form name="infoPopForm" id="infoPopForm" method="post">
-	<input type="hidden" name="pageType" id="pageType" value=""/> 
-</form>
+<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
+
+<script>
+// 문자 단가
+var shortPrice = "${shortPrice}";
+var longPrice = "${longPrice}";
+var picturePrice = "${picturePrice}";
+var picturePrice2 = "${picturePrice2}";
+var picturePrice3 = "${picturePrice3}";
+var kakaoAtPrice = "${kakaoAtPrice}";
+var faxPrice = "${faxPrice}";
+
+var smsList = new Array();		// 품목추가 Array
+var supplySumPrice = 0;		// 공급가액
+var vatSumPrice = 0;		// 부가세액
+var totSumPrice = 0;		// 합계
+
+// 탭이동
+var tabType = "${tabType}";
+
+$(document).ready(function () {
+	
+	// 품목정보 추가
+	getSmsItemAdd();
+	
+	// 품목 Change Event
+	$("#smsItem").change(function(){
+		$("#unitPrice").val($("#smsItem option:selected").val());
+
+		var optNm = $("#smsItem option:selected").text();
+		if(optNm.includes('팩스')){
+			$('#faxPages').show();
+		}else{
+			$('#faxPages').hide();
+		}
+	});
+	
+	// 품목추가 Click Event
+	$("#btnItemAdd").click(function(){
+		// 품목추가
+		setItemAdd();
+	});	
+	
+	// 품목삭제 Click Event
+	$("#btnItemDel").click(function(){
+		// 품목삭제
+		setItemDel();
+		
+		//품목추가 Html
+		setItemAddHtml();		
+	});		
+	
+	// 부가세별도 여부 Change Event
+	$("#isVat").change(function(){
+		//품목추가 Html
+		setItemAddHtml();		
+	});
+	
+	// 견적내기화면으로 이동
+	if (tabType == "2") {
+		$("#btnEstimate").trigger("click");
+	}
+	
+	//등급제 시행 ON/OFF 체크(비로그인)
+	//getMberSettingDetailByNotLogin();
+		
+	// 등급제 대상 여부
+	//getMberGrdChk();
+	
+});
+
+//품목정보 추가
+function getSmsItemAdd() {
+	var sHtml = "";	
+	sHtml += "<option value='" + shortPrice + "'>단문(SMS)</option>";
+	sHtml += "<option value='" + longPrice + "'>장문(LMS)</option>";
+	sHtml += "<option value='" + picturePrice + "'>그림문자(1장)</option>";
+	sHtml += "<option value='" + picturePrice2 + "'>그림문자(2장)</option>";
+	sHtml += "<option value='" + picturePrice3 + "'>그림문자(3장)</option>";
+	sHtml += "<option value='" + kakaoAtPrice + "'>카톡(알림톡)</option>";
+	sHtml += "<option value='" + faxPrice + "'>팩스</option>";
+
+	$("#smsItem").append(sHtml);
+	
+	// 단가 초기값
+	$("#unitPrice").val($("#smsItem option:selected").val());
+}
+	
+
+// 품목추가
+function setItemAdd() {
+	var caseNumber = $("#caseNumber").val().trim().replaceAll(",", "");
+	var casePage = $("#casePage").val().trim().replaceAll(",", "");
+	
+	if (caseNumber == null || caseNumber == "" || caseNumber == undefined) {
+		alert("건수를 입력하세요.");
+		return false;
+	}
+	else if (isNaN(caseNumber) == true) {
+		alert("건수는 숫자를 입력하세요.");
+		return false;		
+	}
+	
+	// 객체 생성 
+	var data = new Object(); 
+	data.smsItemName = $("#smsItem option:selected").text();		// 품목명
+	data.unitPrice = $("#unitPrice").val();		// 단가
+	data.unitPricePlusVat = $("#unitPrice").val();		// 단가
+	data.caseNumber = caseNumber;	// 건수
+	data.supplyPrice = $("#unitPrice").val() * caseNumber;
+	data.totPrice = $("#unitPrice").val() * caseNumber;	// 금액
+	
+	var itmNm = data.smsItemName 
+	if(itmNm.includes('팩스')){//팩스인 경우 매수 곱해주기
+		data.casePage = casePage;
+		data.supplyPrice = $("#unitPrice").val() * (caseNumber * casePage);
+		data.totPrice = $("#unitPrice").val() * (caseNumber * casePage);	// 금액
+	}
+	
+	// 리스트에 생성된 객체 삽입 
+	smsList.push(data); 
+	
+	//품목추가 Html
+	setItemAddHtml();
+	}
+	
+//품목추가 Html
+function setItemAddHtml() {
+	var isVat = $("#isVat option:selected").val();
+	
+	// 부가세 케이스별 다시계산
+	smsList.forEach(function(element) {
+		var itmNm = element.smsItemName;
+
+		if (isVat == 1) {
+			
+			if(itmNm.includes('팩스')){//팩스인 경우 건수 * 매수에 대한 금액의 부가세를 계산해야함.
+				// 부가세 포함
+				element.vatPrice = Math.round(element.unitPrice * 0.1 * (element.caseNumber * element.casePage));
+			}else{
+				// 부가세 포함
+				element.vatPrice = Math.round(element.unitPrice * 0.1 * element.caseNumber);
+				//element.unitPricePlusVat = parseInt(element.unitPrice, 10) + Math.round(element.unitPrice * 0.1);
+			}
+			
+		}
+		else {
+			// 부가세 별도(부가세 : 0)
+			element.vatPrice = 0;
+		}
+		
+		if(itmNm.includes('팩스')){//팩스인 경우 건수 * 매수에 대한 금액의 부가세를 계산해야함.
+			element.totVatPrice = (element.unitPrice * (element.caseNumber * element.casePage)) + element.vatPrice;	// 금액
+		}else{
+			element.totVatPrice = (element.unitPrice * element.caseNumber) + element.vatPrice;	// 금액		
+		}
+	})	
+	
+	vatSumPrice = 0;
+	supplySumPrice = 0;
+	totSumPrice = 0;
+	
+	var sHtml = "";
+	smsList.forEach(function(element) {
+		supplySumPrice += element.supplyPrice;
+		totSumPrice += element.totPrice;
+		
+		sHtml += "<div class='tType3_bd'>";
+		sHtml += "    <div>";
+		sHtml += "        <label for='' class='label'>한 줄 전체 선택</label>";
+		sHtml += "        <input type='checkbox' id='chkEach' name='chkEach'>";
+		sHtml += "    </div>";
+		sHtml += "    <div>" + element.smsItemName + "</div>";
+		if (isVat == 1) {
+			// 부가세 포함
+			sHtml += "    <div>" + element.unitPricePlusVat + "</div>";			
+		}
+		else {
+			sHtml += "    <div>" + element.unitPrice + "</div>";	
+		}
+		if(element.smsItemName.includes('팩스')){
+			sHtml += "    <div>" + numberWithCommas(element.caseNumber * element.casePage) + "</div>";
+		}
+		else {
+			sHtml += "    <div>" + numberWithCommas(element.caseNumber) + "</div>";
+		}
+		sHtml += "    <div>" + numberWithCommas(element.supplyPrice) + "</div>";
+		sHtml += "    <div>" + numberWithCommas(element.vatPrice) + "</div>";
+		sHtml += "    <div>" + numberWithCommas(element.totVatPrice) + "</div>";
+		sHtml += "</div>";
+	})
+	
+	$("#itemList").html(sHtml);
+	
+	// Sum
+	setEstimateSum();
+	}
+	
+// Sum
+function setEstimateSum() {
+	var isVat = $("#isVat option:selected").val();
+	console.log("setEstimateSum")
+	if (isVat == 1) {
+		// 부가세 포함
+		vatSumPrice = Math.round(supplySumPrice * 0.1);	
+		totSumPrice = totSumPrice + vatSumPrice;
+	}
+	else {
+		// 부가세 별도(부가세 : 0)
+		vatSumPrice = 0;
+		supplySumPrice = supplySumPrice - vatSumPrice;;
+	}
+	
+	$("#supplySumPriceStr").html(numberWithCommas(supplySumPrice));
+	$("#totSumPriceStr").html(numberWithCommas(totSumPrice));
+	/* if($("#isVat option:selected").val() == '0'){
+		$("#isVatStr").html($("#isVat option:selected").text() + '(' + numberWithCommas(vatSumPrice) + ')');	
+	}else{
+		$("#isVatStr").html($("#isVat option:selected").text());
+	} */
+	$("#isVatStr").html(numberWithCommas(vatSumPrice));
+	
+	$("#smsList").val(JSON.stringify(smsList));
+	$("#supplySumPrice").val(supplySumPrice);
+	$("#vatSumPrice").val(vatSumPrice);
+	$("#totSumPrice").val(totSumPrice);
+	
+}
+
+// 품목 삭제
+function setItemDel() {
+	//체크박스 체크
+	var smsListLen = smsList.length;
+	while (smsListLen--) {
+		if ($('input[name=chkEach]').eq(smsListLen).is(':checked') == true) {
+			smsList.splice(smsListLen, 1);	
+		} 
+	}	
+}
+	
+//유효성 검사
+function ValidationCheck() {
+	var title = $("#title").val().trim();
+	var recipientName = $("#recipientName").val().trim();
+	var managerName = $("#managerName").val().trim();
+	var mobile = $("#mobile").val().trim();
+	var publishDate = $("#publishDate").val().trim();
+	
+	if (title == null || title == "" || title == undefined) {
+		alert("제목을 입력하세요.");
+		$("#title").focus();
+		return false;
+	}		
+	else if (recipientName == null || recipientName == "" || recipientName == undefined) {
+		alert("수신자(기업명)을 입력하세요.");
+		$("#recipientName").focus();
+		return false;
+	}	
+	else if (managerName == null || managerName == "" || managerName == undefined) {
+		alert("담당자(성명)을 입력하세요.");
+		$("#managerName").focus();
+		return false;
+	}	
+	else if (mobile == null || mobile == "" || mobile == undefined) {
+		alert("연락처를 입력하세요.");
+		$("#mobile").focus();
+		return false;
+	}	
+	else if (publishDate == null || publishDate == "" || publishDate == undefined) {
+		alert("발행일을 입력하세요.");
+		$("#publishDate").focus();
+		return false;
+	}		
+	else if (smsList.length == 0) {
+		alert("품목정보를 하나이상 추가해주세요.");
+		return false;
+	}		
+}
+
+/* 인쇄미리보기 클릭 시 견적서 새창 팝업 오픈  */
+function showEst() {
+
+	// 유효성 검사
+	if (ValidationCheck() == false) return false;
+	
+	//만들려는 팝업의 크기
+	var popup_wid = 820;
+	var popup_ht = 900;
+	
+	//중앙 정렬을 위해 윈도우 스크린의 width,height 구하는 변수 만듦
+	var popup_left = (window.screen.width / 2) - (popup_wid / 2);
+	var popup_top =(window.screen.height / 2) - (popup_ht / 2);
+
+	// From Submit
+	var myForm = document.popForm;
+	var url = "/web/pay/PayEstimateAjax.do";
+	window.open('' ,'popForm', 'scrollbars=1, width='+ popup_wid +', height='+ popup_ht +', left=' + popup_left + ', top='+ popup_top);
+	myForm.action =url; 
+	myForm.method="post";
+	myForm.target="popForm";
+	myForm.testVal = 'test';
+	myForm.submit();
+}
+
+function inputNumberFormatPay(obj) {
+	$(obj).val($(obj).val().replace(/[^0-9]/g,""));
+	
+	$('#caseNumber').val(numberWithCommas(obj.value));
+}
+
+
+function inputPagesNumberFormatPay(obj) {
+	$(obj).val($(obj).val().replace(/[^0-9]/g,""));
+	
+	$(obj).val(numberWithCommas(obj.value));
+}
+function inputPagesNumber(obj) {
+	$(obj).val($(obj).val().replace(/[^0-9]/g,""));
+}
+
+function fn_gunClear(){
+	$('#caseNumber').val('');
+}
+
+
+//체크박스 전체선택/해제
+$(document).on("click", "#chkAll", function(e) {
+	var isChecked = $(this).is(":checked");
+	$("input[name=chkEach]:checkbox").prop("checked", isChecked);
+});	
+
+/* 윈도우팝업 열기 */
+function infoPop(pageUrl){
+	document.infoPopForm.pageType.value = pageUrl;
+	document.infoPopForm.action = "/web/pop/infoPop.do";
+	document.infoPopForm.method = "post"; 
+	window.open("about:blank", 'infoPop', 'width=790, height=280, top=100, left=100, fullscreen=no, menubar=no, status=no, toolbar=no, titlebar=yes, location=no, scrollbars=1');
+	document.infoPopForm.target = "infoPop";
+	document.infoPopForm.submit();
+}
+
+
+//등급제 시행 ON/OFF 체크(비로그인)
+function getMberSettingDetailByNotLogin() {
+	$.ajax({
+        type: "POST",
+        url: "/web/grd/mberSettDetailByNotLoginAjax.do",
+        data: {},
+        dataType:'json',
+        async: false,
+        success: function (data) {
+			if (data.isSuccess) {
+				// 문자(등급별 요금 안내)
+				$("#mberGrdSettingArea").show();
+			} 
+			else {
+				//alert("Msg : " + data.msg);
+			}
+		},
+        error: function (e) { 
+        	//alert("ERROR : " + JSON.stringify(e)); 
+        }
+    });				
+}		
+
+// 등급제 대상 여부
+function getMberGrdChk() {
+	$.ajax({
+        type: "POST",
+        url: "/web/grd/mberGrdChkAjax.do",
+        data: {},
+        dataType:'json',
+        async: false,
+        success: function (data) {
+			if (data.isSuccess) {
+				// 등급제 누적결제액 세부내역
+				$("#grdShowArea").html("(등급 : " + data.rtnMberGrdVO.grdSetNm + ")");
+				$("#levelSubTitle").html("(" + data.rtnMberGrdVO.grdDate + " ~ 현재)");				
+			} 
+			else {
+				//alert("Msg : " + data.msg);
+			}
+		},
+        error: function (e) { 
+        	//alert("ERROR : " + JSON.stringify(e)); 
+        }
+    });				
+}		
+
+</script>
+
+<form name="popForm" method="post">
+	<input type="hidden" name="smsList" id="smsList" value="" />
+	<input type="hidden" name="supplySumPrice" id="supplySumPrice" value="" />
+	<input type="hidden" name="vatSumPrice" id="vatSumPrice" value="" />
+	<input type="hidden" name="totSumPrice" id="totSumPrice" value="" />
+		
+		<!-- content 영역 -->
+	<div class="inner">
+		<!-- send top -->
+		<div class="send_top">
+			<!-- tab button -->
+			<ul class="tabType4">
+				<li class="tab active"><button type="button">요금안내/견적내기</button></li>
+				<li class="tab"><button type="button" onclick="location.href='/web/member/pay/PayView.do'">결제하기</button></li>
+				<li class="tab"><button type="button" onclick="location.href='/web/member/pay/PayList.do'">요금 결제내역</button></li>
+				<li class="tab"><button type="button" onclick="location.href='/web/member/pay/PayUserSWList.do'">요금 사용내역</button></li>
+				<li class="tab"><button type="button" onclick="location.href='/web/member/pay/BillPub.do'">세금계산서 발행 등록</button></li>
+			</ul>
+			<!--// tab button -->
+			<!-- 결제관리 - 요금안내/견적내기 -->
+			<div class="serv_content charg_cont current" id="tab5_1">
+				<div class="heading">
+					<h2>요금안내/견적내기</h2>
+					<button type="button" class="button info" onclick="infoPop('PayGuide');">사용안내</button>
+				</div>
+				<!-- tab button -->
+				<div class="pay_tab_wrap">
+					<ul class="tabType1">
+						<li class="tab active">
+							<button type="button" onclick="TabType1(this,'1')">요금안내</button>
+						</li>
+						<li class="tab">
+							<button type="button" onclick="TabType1(this,'2')" id="btnEstimate">견적내기</button>
+						</li>
+					</ul>
+				</div>
+				<!--// tab button -->
+				<!-- 결제관리 - 요금안내/견적내기 - 요금안내 -->
+				<div class="fee_cont current fee_wrap" id="tab1_1">
+					<div>
+						<p class="tType1_title">
+							<img src="/publish/images/content/icon_fee1.png" alt="문자이미지"> 문자<span class="level_first" id="grdShowArea"></span>
+						</p>
+						<table class="tType2">
+							<caption></caption>
+							<colgroup>
+								<col style="width: 18%;">
+								<col style="width: auto;">
+								<col style="width: 32%;">
+							</colgroup>
+							<thead>
+								<tr>
+									<th>구분</th>
+									<th>특징</th>
+									<th>가격</th>
+								</tr>
+							</thead>
+							<tbody>
+								<tr>
+									<th>단문(SMS)</th>
+									<td>90Byte 이하 단문 메시지(이미지 첨부 불가)</td>
+									<td><span>${shortPrice}</span>원</td>
+								</tr>
+								<tr>
+									<th>장문(LMS)</th>
+									<td>91~2,000Byte 이하 장문메시지(이미지 첨부 불가)</td>
+									<td><span>${longPrice}</span>원</td>
+								</tr>
+								<tr>
+									<th>그림문자(MMS)</th>
+									<td>2,000Byte 이하 문자 및 이미지를 포함하는그림메시지(이미지 최대 3장 첨부 가능) </td>
+									<td>1장 : <span>${picturePrice}</span>원 / 2장 : <span>${picturePrice2}<span>원/ 3장 : <span>${picturePrice3}</span>원</td>
+								</tr>
+							</tbody>
+						</table>
+						<span class="reqTxt4">* 텍스트 용량(Byte)에 대한 안내 : 한글2Byte, 영문·숫자 1Byte를 차지.</span>
+					
+						<!--문자_등급별 요금 안내 추가 시작-->
+						<div id="mberGrdSettingArea" style="display: none;">
+							<p class="tType1_title level"><img src="/publish/images/content/icon_fee1.png" alt="문자이미지"> 문자<span>(등급별 요금 안내)</span></p>
+							<table class="tType2 tType2_level">
+								<caption></caption>
+								<colgroup>
+									<col style="width: 13%;">
+									<col style="width: auto;">
+									<col style="width: 11%;">
+									<col style="width: 11%;">
+									<col style="width: 11%;">
+									<col style="width: 11%;">
+									<col style="width: 11%;">
+								</colgroup>
+								<thead>
+									<tr>
+										<th>등급</th>
+										<th class="th_second">누적결제액<span id="levelSubTitle"></span></th>
+										<th>단문</th>
+										<th>장문</th>
+										<th>그림(1장)</th>
+										<th>그림(2장)</th>
+										<th>그림(3장)</th>
+									</tr>
+								</thead>
+								<tbody>
+				    				<c:forEach var="result" items="${mberGrdSettingList}" varStatus="status">
+									<tr class="level_table">
+										<th><c:out value="${result.grdSetNm}"/></th>
+										<td class="level_price"><c:out value="${result.stdAmtComma}"/></td>
+										<td><c:out value="${result.shortPrice}"/></td>
+										<td><c:out value="${result.longPrice}"/></td>
+										<td><c:out value="${result.picturePrice}"/></td>
+										<td><c:out value="${result.picture2Price}"/></td>
+										<td><c:out value="${result.picture3Price}"/></td>
+									</tr>
+									</c:forEach>													
+								</tbody>
+							</table>
+							<span class="reqTxt4">
+								* 등급별 요금제는 당사의 정책 및 운영의 필요상 수정, 중단 또는 변경될 수 있습니다. <br>
+								* 누적결제액은 등급별 요금제 적용일로부터 적립된 결제금액을 말하며, 누적결제액에 따라 등급은 자동으로 적용됩니다. <br>
+								* "첫결제 이벤트" 등 이벤트 결제금액은 등급별 요금제 누적결제액에서 제외됩니다. <br>
+							</span> 
+							<p class="reqTxt4 reqTxt4_last">
+								* 문자피싱, 스미싱, 주식, 도박, 로또, 스팸, 사기, 협박, 범죄, 유사투자, 유사수신 등을 목적으로 하거나 교사 또는 방조하는 내용의 정보, 발신번호 조작 등으로 인지되는 문자에 대해서는 사전 또는 즉시 발송을 차단하고
+   								이용을 정지시킬 수 있으며, 이에 대한 어떠한 환불이나 보상을 실시하지 않습니다. 또한, 상기 문자를 발송한 회원에 대해서는 그 즉시 등급별 요금제 혜택을 취소합니다. 
+							</p>
+						</div>
+						<!--문자_등급별 요금 안내 추가 끝-->					
+					
+						<p class="tType1_title"><img src="/publish/images/content/icon_fee2.png" alt="알림톡 아이콘 이미지"> 알림톡</p>
+						<table class="tType2">
+							<colgroup>
+								<col style="width: 20%;">
+								<col style="width: 60%;">
+								<col style="width: 20%;">
+							</colgroup>
+							<thead>
+								<tr>
+									<th>구분</th>
+									<th>특징</th>
+									<th>가격</th>
+								</tr>
+							</thead>
+							<tbody>
+								<tr>
+									<th>알림톡</th>
+									<td>카카오톡을 통해 친구 추가 여부와 관계 없이 휴대폰 번호로 발송이 가능한 정보성 메시지<br>(1,000자 이하의 텍스트 및 이미지 중 카카오 사전 승인 건에 한하여 발송 가능)</td>
+									<td>1장 : <span>${kakaoAtPrice}</span>원</td>
+								</tr>
+							</tbody>
+						</table>
+						<span class="reqTxt4">* 텍스트 용량(Byte)에 대한 안내 : 한글2Byte, 영문·숫자 1Byte를 차지.</span>
+						
+						<p class="tType1_title"><img src="/publish/images/content/icon_fee_fax.png" alt="팩스 아이콘 이미지"> 팩스</p>
+						<table class="tType2">
+							<colgroup>
+								<col style="width: 20%;">
+								<col style="width: 60%;">
+								<col style="width: 20%;">
+							</colgroup>
+							<thead>
+								<tr>
+									<th>구분</th>
+									<th>특징(전송가능확장자)</th>
+									<th>가격</th>
+								</tr>
+							</thead>
+							<tbody>
+								<tr>
+									<th>팩스</th>
+									<td>전송 가능 파일(hwp, pdf, ppt, xls, xlsx, doc, jpg, jpeg, bmp, txt, gif, hwpml, tif, gul)</td>
+									<td>1매 : <span>${faxPrice}</span>원</td>
+								</tr>
+							</tbody>
+						</table>
+						
+						<p class="tType1_title"><img src="/publish/images/content/icon_fee3.png" alt="그림문자 맞춤제작 이미지"> 그림문자 맞춤제작</p>
+						<table class="tType2">
+							<caption></caption>
+							<colgroup>
+								<col style="width: 80%;">
+								<col style="width: 20%;">
+							</colgroup>
+							<thead>
+								<tr>
+									<th>구분</th>
+									<th>가격</th>
+								</tr>
+							</thead>
+							<tbody>
+								<tr>
+									<th>문자온 샘플 수정(글자, 색상, 폰트 등)</th>
+									<td><span>${customSamplePrice}</span>원</td>
+								</tr>
+								<tr>
+									<th>이미지 편집(첨부이미지 1장)</th>
+									<td><span>${customEditPrice}</span>원</td>
+								</tr>
+								<tr>
+									<th>이미지 편집(첨부이미지 3장이하)</th>
+									<td><span>${customEdit3Price}</span>원</td>
+								</tr>
+								<tr>
+									<th>텍스트 단순수정</th>
+									<td><span>${customTextPrice}</span>원</td>
+								</tr>
+							</tbody>
+						</table>
+						<span class="reqTxt4">* 텍스트 단순수정 요청은 맞춤제작이 완료된 그림문자의 수정 시에만 가능합니다.</span>
+						
+						<div class="banner">
+							<p>대량발송 고객 가격협의 가능</p>
+							<ul>
+								<li><img src="/publish/images/content/banner_call01.png" alt=""><p>전화 <strong>1551-8011</strong><p></li>
+								<li><img src="/publish/images/content/banner_email01.png" alt=""><p>이메일<span>help@iten.co.kr</span> <button type="button" onclick="location.href='mailto:help@iten.co.kr'">상담하기</button></li>
+								<li><img src="/publish/images/content/banner_kakao01.png" alt=""><p>카카오톡<span>munjaon</span><a href="http://pf.kakao.com/_PxoTtb/chat" target="_blank">상담하기</a><p></li>
+							</ul>
+						</div>
+					</div>
+				</div>
+				<!--// 결제관리 - 요금안내/견적내기 - 요금안내 -->
+			
+				<!-- 결제관리 - 요금안내/견적내기 - 견적내기 -->
+				<div class="fee_cont" id="tab1_2">
+					<ul class="clause_list">
+						<li class="list_open on">
+							<div class="clause_list_head">
+								<div class="list_head_in">
+									<span><i></i>요금안내</span>
+									<button type="button" onclick="clause_list(this);"><i></i></button>
+								</div>
+							</div>
+							<div class="clause_list_body">
+								<table class="refund_info">
+									<caption>요금 안내</caption>
+									<colgroup>
+										<col style="width: 13%;">
+										<col style="width: auto;">
+										<col style="width: 25%;">
+									</colgroup>
+									<thead>
+										<tr>
+											<th>구분</th>
+											<th>특징</th>
+											<th>금액</th>
+										</tr>
+									</thead>
+									<tbody>
+										<tr>
+											<td>단문(SMS)</td>
+											<td>90Byte 이하 단문 메시지(이미지 첨부 불가)</td>
+											<td><span>${shortPrice}</span>원</td>
+										</tr>
+										<tr>
+											<td>장문(LMS)</td>
+											<td>91~2,000Byte 이하 장문메시지(이미지 첨부 불가)</td>
+											<td><span>${longPrice}</span>원</td>
+										<tr>
+											<td>그림문자(MMS)</td>
+											<td>2,000Byte 이하 문자 및 이미지를 포함하는 그림메시지(이미지 최대 3장 첨부 가능)</td>
+											<td>1장 : <span>${picturePrice}</span>원 / 2장 : <span>${picturePrice2}</span>원 / 3장 : <span>${picturePrice3}</span>원</td>
+										</tr>
+										<tr>
+											<td>카카오(알림톡)</td>
+											<td>카카오톡을 통해 친구 추가 여부와 관계 없이 휴대폰 번호로 발송이 가능한 정보성 메시지(1,000자 이하의 텍스트 및 이미지 중 카카오 사전 승인 건에 한하여 발송 가능)</td>
+											<td><span>${kakaoAtPrice}</span>원</td>
+										</tr>
+										<tr>
+											<td>팩스</td>
+											<td>전송 가능 파일(hwp, pdf, ppt, xls, xlsx, doc, jpg, jpeg, bmp, txt, gif, hwpml, tif, htm, html, gul)</td>
+											<td><span>${faxPrice}</span>원</td>
+										</tr>
+										<tr>
+											<td>맞춤제작</td>
+											<td>문자온 샘플 수정(글자, 색상, 폰트 등)</td>
+											<td><span>${customSamplePrice}</span>원</td>
+										</tr>
+										<tr>
+											<td>맞춤제작</td>
+											<td>이미지 편집(첨부이미지 1장)</td>
+											<td><span>${customEditPrice}</span>원</td>
+										</tr>
+										<tr>
+											<td>맞춤제작</td>
+											<td>이미지 편집(첨부이미지 3장이하)</td>
+											<td><span>${customEdit3Price}</span>원</td>
+										</tr>
+										<tr>
+											<td>맞춤제작</td>
+											<td>텍스트 단순수정</td>
+											<td><span>${customTextPrice}</span>원</td>
+										</tr>
+									</tbody>
+								</table>
+							</div>
+						</li>
+					</ul>
+					<div>
+						<p class="tType1_title">일반정보</p>
+						<table class="tType1">
+							<caption></caption>
+							<colgroup>
+								<col style="width: 150px;">
+								<col style="width: auto;">
+							</colgroup>
+							<tbody>
+								<tr>
+									<th>제목</th>
+									<td>
+										<label for="" class="label">견적내기 제목</label>
+										<input type="text" id="title" name="title" placeholder="견적서" onfocus="this.placeholder=''" onblur="this.placeholder='견적서'" style="width: 400px;" maxlength="20">
+									</td>
+								</tr>
+								<tr>
+									<th>수신자(기업명)</th>
+									<td>
+										<label for="" class="label">수신자(기업명) 입력</label>
+										<input type="text" id="recipientName" name="recipientName" style="width: 400px;" maxlength="18">
+									</td>
+								</tr>
+								<tr>
+									<th>담당자(성명)</th>
+									<td>
+										<label for="" class="label">담당자(성명) 입력</label>
+										<input type="text" id="managerName" name="managerName" style="width: 400px;" maxlength="18">
+									</td>
+								</tr>
+								<tr>
+									<th>연락처</th>
+									<td>
+										<label for="" class="label">연락처 입력</label>
+										<input type="text" onkeyup="inputPagesNumber(this)"; maxlength="11" id="mobile" name="mobile" style="width: 400px;">
+									</td>
+								</tr>
+								<tr>
+								<th>발행일</th>
+								<td>
+									<div class="calendar_wrap">
+										<input type="text" class="calendar" title="발행일" id="publishDate" name="publishDate">
+									</div>
+								</td>
+								</tr>
+							</tbody>
+						</table>
+						
+						<p class="tType1_title">품목정보</p>
+						<table class="tType1 itemInfo">
+							<caption></caption>
+							<colgroup>
+								<col style="width: 150px;">
+								<col style="width: auto;">
+							</colgroup>
+							<tbody>
+								<tr>
+									<th>구분</th>
+									<td>
+										<label for="" class="label">품목 선택</label>
+										<select id="smsItem" name="smsItem" onchange="fn_gunClear();" style="width: 210px;">
+										</select>
+										<label for="" class="label">품목 별 단가</label>
+										<input type="text" id="unitPrice" name="unitPrice" value="0" placeholder="" readonly class="readonly">
+										<p class="input_in">원</p>
+									</td>
+								</tr>
+								<tr>
+									<th>건수</th>
+									<td class="publish_btn">
+										<label for="" class="label">건수 입력</label>
+										<input type="text" id="caseNumber" numberOnly maxlength="10"  name="caseNumber" style="width: 210px;" onkeyup="inputNumberFormatPay(this)">
+										<p class="input_in">건</p>
+										<div>
+											<button type="button" class="btnType" id="btnItemAdd">품목추가<i class="arrow_img"></i></button>
+										</div>
+									</td>
+								</tr>
+								<tr id="faxPages" style="display:none;">
+                                    <th>매수</th>
+                                    <td class="publish_btn">
+                                        <label for="" class="label">매수 입력</label>
+                                        <input type="text" id="casePage" name="casePage" style="width: 210px;" onkeyup="inputPagesNumberFormatPay(this)">
+                                        <p class="input_in">매</p>
+                                    </td>
+                                </tr>
+							</tbody>
+						</table>
+						<div class="search_group_bottom2">
+							<div class="btnWrap1">
+								<button type="button" class="btnType" id="btnItemDel"><i class="remove_img"></i>선택삭제</button>
+							</div>
+						</div>
+						<!-- table -->
+						<div class="tType3 payDetail">
+							<!-- thead -->
+							<div class="tType3_hd">
+								<div>
+									<label for="" class="label">전체 선택</label>
+									<input type="checkbox" id="chkAll">
+								</div>
+								<div>품목</div>
+								<div>단가(원)</div>
+								<div>건수(건)</div>
+								<div>공급가액(원)</div>
+								<div>세액(부가세)</div>
+								<div>금액(원)</div>
+							</div>
+							<!-- tbody -->
+							<div class="tType3_bd_wrap" id="itemList">
+								<div class="tType3_bd">
+									<div></div>
+									<div></div>
+									<div></div>
+									<div></div>
+									<div></div>
+									<div></div>
+									<div></div>
+								</div>
+							</div>
+						</div>
+						<!--// table -->
+						<div class="tb_wrap totalPrice_tb">
+							<table class="tType4">
+								<colgroup>
+									<col style="width: 25%;">
+									<col style="width: 25%;">
+									<col style="width: 30%;">
+									<col style="width: 15%;">
+								</colgroup>
+								<thead>
+									<tr>
+										<th>공급가액</th>
+										<th>세액(부가세)</th>
+										<th>합계</th>
+										<th>비고</th>
+									</tr>
+								</thead>
+								<tbody>
+									<tr>
+										<td>
+											<span id="supplySumPriceStr"></span>
+										</td>
+										<td>
+											<span id="isVatStr"></span>
+										</td>
+										<td>
+											<span id="totSumPriceStr"></span>
+										</td>
+										<td style="text-align: center;">
+											<label for="" class="label">부가세 포함,별도 선택</label>
+											<select id="isVat" name="isVat" class="selType2">
+												<option value="0">부가세 별도</option>
+												<option value="1" selected>부가세 포함</option>
+											</select>
+										</td>
+									</tr>
+								</tbody>
+							</table>
+						</div>
+						<!-- //주소록리스트 -->
+						<div style="text-align: center;">
+							<button class="btnType btnType16" onclick="showEst(); return false;">발행하기</button>
+						</div>
+					</div>
+				</div>
+				<!-- 결제관리 - 요금안내/견적내기 - 견적내기 -->
+			</div>
+		</div>
+		<!-- 결제관리 - 요금안내/견적내기 --> 
+	</div>
+	<!--// send top -->
+</form>
+<form name="infoPopForm" id="infoPopForm" method="post">
+	<input type="hidden" name="pageType" id="pageType" value=""/> 
+</form>
src/main/webapp/js/MJUtill.js
--- src/main/webapp/js/MJUtill.js
+++ src/main/webapp/js/MJUtill.js
@@ -1,974 +1,974 @@
-/**
- * 휴대폰번호 유효성 체크
- * true, false 반환
- * 대시 유무 상관없음
- */
-function checkHpNum(str) {
-	
-	var regExp = /^(050[2345678]{1}|01[016789]{1})-?[0-9]{3,4}-?[0-9]{4}$/;
-	//var regExp = /^(01[016789]{1}|070|02|0[3-9]{1}[0-9]{1})-?[0-9]{3,4}-?[0-9]{4}$/; //지역번호(일반전화) 형식까지 체크해주는 정규식
-	return regExp.test(str);
-}
-
-/**
- * 휴대폰번호만 유효성 체크
- * true, false 반환
- * 대시 유무 상관없음
- */
-function checkOnlyHpNum(str) {
-	
-	//var regExp = /^(050[234567]{1}|01[016789]{1})-?[0-9]{3,4}-?[0-9]{4}$/;
-	var regExp = /^(01[016789]{1})-?[0-9]{3,4}-?[0-9]{4}$/; //지역번호(일반전화) 형식까지 체크해주는 정규식
-	return regExp.test(str);
-}
-
-/**
- * 팩스 번호 유효성 체크
- * true, false 반환
- * 앞 3자리를 체크 함
- * -- 전국 지역번호
- * 	02	서울특별시
-	031	경기도
-	032	인천광역시
-	033	강원도
-	041	충청남도
-	042	대전광역시
-	043	충청북도
-	044	세종특별자치시
-	051	부산광역시
-	052	울산광역시
-	053	대구광역시
-	054	경상북도
-	055	경상남도
-	061	전라남도
-	062	광주광역시
-	063	전라북도
-	064	제주특별자치도
-	
-	-- 타사부가번호
-	030*
-	050*
-	060
-	070
-	080
-	1**
-	
-	위 번호로 시작하는 팩스 번호만 허용함.
- */
-function checkFaxNum(str) {
-	str = removeDash(str);
-	var subNum = str.substring(0,3);
-	var regExp = /^(02[0-9]{1}|030|050|060|070|080|0[3-6]{1}[1-5]{1}|1[0-9]{1}[0-9]{1})$/; //지역번호(일반전화) 형식까지 체크해주는 정규식
-	return regExp.test(subNum);
-}
-
-/*
- * 일반전화 유효성 체크
- * true, false 반환
- * 
- * */
-function checkNorPhoneNum(str){
-	
-	var regExp = /^(02|0[3-9]{1}[0-9]{1})-?[0-9]{3,4}-?[0-9]{4}$/;
-	
-	/**
-	 * 기간통신사업자 공통 부가서비스 번호 체크
-	 * 번호 사업자
-		1588,1577,1899 KT
-		1544,1644,1661,1800 ,1833 LG유플러스
-		1566,1600,1670 SK브로드밴드
-		1688,1666 온세텔레콤
-		1599 SK텔링크
-		1877 한국케이블텔레콤
-		1855 CJ헬로비전
-		1661 alleh KT
-	 * 
-	 * */
-	
-	if(str.substring(0,2) == "15"){
-		
-		regExp = /^(15[0-9]{2})-?[0-9]{4}$/;
-		
-	}else if(str.substring(0,2) == "16"){
-		
-		regExp = /^(16[0-9]{2})-?[0-9]{4}$/;
-		
-	}else if(str.substring(0,2) == "18"){
-		
-		regExp = /^(18[0-9]{2})-?[0-9]{4}$/;
-		
-	}
-	
-	return regExp.test(str);
-}
-
-/*
- * 일반전화 / 핸드폰 번호 종류 확인
- * true, false 반환
- * 
- * */
-function checkTelHpType(str){
-	
-	var subCall = str.substring(0,3);	// 전화번호 앞 3자리 받아오기
-	var strType = "";				 	// 결과 반환
-	
-	if(subCall != '010' 
-		&& subCall != '011' 
-		&& subCall != '016' 
-		&& subCall != '017'){//일반전화 번호이면
-		
-		strType = "Tel";
-		
-	}else{
-		
-		strType = "Hp";
-	}
-	
-	return strType;
-}
-
-
-/**
- * 휴대폰번호 대시('-') 제거
- */
-function removeDash(str) {
-	var regExp = new RegExp('-', 'g');
-	return str.replace(regExp, '');
-}
-
-/**
- * 휴대폰번호 대시('-') 추가
- * 대시 유무 상관없음
- * 유효성 맞지 않을시 변환안됨.
- */
-function addDash(str) {
-	return str.replace(/(^01[016789]{1}|070)([0-9]{3}|[0-9]{4})([0-9]{4})$/,"$1-$2-$3").replace("--", "-");
-}
-
-/**
- * ReplaceAll (by javascript prototype)
- * 정규식 패턴에서 \는 두 개 사용 
- */
-String.prototype.replaceAll = function(pattern, changeString) {
-	var regExp = new RegExp(pattern, 'g');
-	return this.replace(regExp, changeString);
-};
-
-/**
- * 이메일 유효성 체크
- * true, false 반환
- * 
- */
-function checkEmail(str) {
-	var regExp = /^[A-Za-z0-9_\.\-]+@[A-Za-z0-9\-]+\.[A-Za-z0-9\-]+/;
-	return regExp.test(str);
-}
-
-/**
- * XSS 체크하기
- * 
- * 
- */
-
-function XSSCheck(str, level) {
-    if (level == undefined || level == 0) {
-        str = str.replace(/\<|\>|\"|\'|\%|\;|\(|\)|\&|\+|\-/g,"");
-    } else if (level != undefined && level == 1) {
-        str = str.replace(/\</g, "&lt;");
-        str = str.replace(/\>/g, "&gt;");
-    }
-    return str;
-}
-
-
-//숫자 천단위 콤마 찍어주기
-function numberWithCommas(x) { 
-	return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); 
-}
-
-function comma(num){ 
-	var len, point, str; 
-	num = num + ""; 
-	point = num.length % 3; 
-	len = num.length; 
-	str = num.substring(0, point); 
-	while (point < len) { 
-		if (str != "") str += ","; 
-		str += num.substring(point, point + 3); 
-		point += 3; 
-		} 
-	return str; 
-}
-
-
-function totalPriceSum(totRows){
-	
-	var contents = $('#smsTxtArea').val();	//입력 문자 내용
-	var msgType = conTypeCheck(contents);	//입력 문자 길이 체크
-	var collNumCnt = parseInt(totRows); 	//받는사람 건수
-	var price = 0;							//개별 건수 금액
-	var totalPrice = 0;						//전체 금액
-	//var strDot = [];
-	//var subPrice = "";
-	//var spPrice = "";
-	var totalStr = "0";							//전체 합계 금액
-	var userMoney = $('#hdUserMoney').text(); 	//헤더 영역 보유 금액 불러오기
-	var msgCnt = 0;								//발송 가능 문자 건수
-	var imgCnt = $("#imgCnt").val(); // 현재 페이지에 첨부된 이미지 갯수
-	
-	if(!userMoney > 0){
-		
-		userMoney = 0;
-		
-	}
-	//헤더 영역 보유 금액 콤마 문자 제거
-	if(userMoney != ''){
-		
-		userMoney = userMoney.replaceAll("," , "");
-		
-	}
-	
-	/*if(msgType == "P"){//그림문자
-		
-		//그림 이미지 갯수에 따른 금액 계산
-		if(imgCnt > 2){//그림 3장일경우
-			price = parseFloat($('#p3Price').val());
-		}else if(imgCnt > 1){//그림 2장일경우
-			price = parseFloat($('#p2Price').val());
-		}else{//그림 1장일 경우
-			price = parseFloat($('#pPrice').val());
-		}
-		
-		msgCnt = parseFloat(userMoney) / price;
-	
-	}else if(msgType == "M"){//장문 문자
-		
-		price = parseFloat($('#mPrice').val());
-		msgCnt = parseFloat(userMoney) / price;
-		
-	}else{//단문문자
-		
-		price = parseFloat($('#sPrice').val());
-		msgCnt = parseFloat(userMoney) / price;
-	
-	}*/
-	
-	//금액 소수점 제거 하여 적용 20220623 소수점 버림 처리
-	if(msgType == "P"){//그림문자
-		
-		//그림 이미지 갯수에 따른 금액 계산
-		if(imgCnt > 2){//그림 3장일경우
-			price = $('#p3Price').val();
-		}else if(imgCnt > 1){//그림 2장일경우
-			price = $('#p2Price').val();
-		}else{//그림 1장일 경우
-			price = $('#pPrice').val();
-		}
-		
-		msgCnt = userMoney / price;
-	
-	}else if(msgType == "M"){//장문 문자
-		
-		price = $('#mPrice').val();
-		msgCnt = userMoney / price;
-		
-	}else{//단문문자
-		
-		price = $('#sPrice').val();
-		msgCnt = userMoney / price;
-	
-	}
-	
-	totalPrice = price * collNumCnt;
-	
-	// 소수점 첫째자리 까지 표시
-	totalPrice = totalPrice.toFixed(1);
-	
-	if(totalPrice > 0){
-		
-		//totalStr = totalPrice.toFixed(2);
-		totalStr = totalPrice;
-		
-	}
-	
-	//개별 문자 단가 파라미터에 입력
-	$('#eachPrice').val(numberWithCommas(price));
-	
-	
-	//결제금액 합계 파라이터에 입력
-	$('#totPrice').val(numberWithCommas(totalStr));
-	
-	//결제금액 합계 화면에 표시
-	$('#totalPriceTxt').text(numberWithCommas(totalStr));
-	
-	//현재 문자 전송 가능 갯수 표시
-	$('.nowMsgCnt').text(numberWithCommas(msgCnt.toFixed()));
-	
-	if(msgType == 'P'){
-		
-		$('#nowMsgType').text("그림");
-		
-	}else if(msgType == 'M'){
-		
-		$('#nowMsgType').text("장문");
-	
-	}else{
-		
-		$('#nowMsgType').text("단문");
-		
-	}
-	
-	$('#repPriceTxt').hide();
-	
-	return totalStr;
-	
-}
-
-function replTotalPriceSum(msg_short, msg_long, totRows){
-	
-	var shortPrice = 0;		//단문 개별 건수 금액
-	var longPrice = 0;		//장문 개별 건수 금액
-	var imgPrice = 0;		//그림문자 개별 건수 금액
-	var totalPrice = 0;		//전체 금액
-	var totalStr = "0";		//전체 합계 금액
-	var contents = $('#smsTxtArea').val();	//입력 문자 내용
-	var msgType = conTypeCheck(contents);	//입력 문자 길이 체크
-	var userMoney = $('#hdUserMoney').text(); 	//헤더 영역 보유 금액 불러오기
-	var msgCnt = 0;								//발송 가능 문자 건수
-	var imgCnt = $("#imgCnt").val(); // 현재 페이지에 첨부된 이미지 갯수
-	var collNumCnt = parseInt(totRows); 	//받는사람 건수
-	var totalCntTxt = "";
-	
-	//금액 소수점 제거하여 금액 처리
-	if(msgType == "P"){//그림문자
-		
-		//그림 이미지 갯수에 따른 금액 계산
-		if(imgCnt > 2){//그림 3장일경우
-			imgPrice = $('#p3Price').val();
-		}else if(imgCnt > 1){//그림 2장일경우
-			imgPrice = $('#p2Price').val();
-			
-		}else{//그림 1장일 경우
-			imgPrice = $('#pPrice').val();
-		}
-		
-		msgCnt = userMoney.replaceAll(",","") / imgPrice;
-		
-		var imgTotPrice = imgPrice * collNumCnt; 
-		imgTotPrice = Math.round(imgTotPrice * 100) / 100;	//소수점 2자리 반올리 처리해주기
-		
-		totalPrice =  totalPrice + imgTotPrice;
-		
-		//input hidden 개별 문자 단가 파라미터에 입력
-		$('#eachPrice').val(numberWithCommas(imgPrice));
-		
-		//input hidden 결제금액 합계 파라이터에 입력
-		$('#totPrice').val(numberWithCommas(totalStr));
-		
-		//결제금액 합계 화면에 표시
-		$('#totalPriceTxt').text(numberWithCommas(totalStr));
-		
-		//현재 문자 전송 가능 갯수 표시
-		$('.nowMsgCnt').text(numberWithCommas(msgCnt.toFixed()));
-		
-		//변환문자 건수 내용 표기
-		totalCntTxt = "그림 : <strong>" + totRows + "</strong> 건";;
-		
-	}else{
-		
-		if(msg_long > 0){//장문 문자
-			
-			longPrice = $('#mPrice').val();
-			var longTotPrice = longPrice * msg_long; 
-			longTotPrice = Math.round(longTotPrice * 100) / 100;	//소수점 2자리 반올리 처리해주기
-			
-			totalPrice = totalPrice + longTotPrice;
-			
-			//input hidden 개별 문자 단가 파라미터에 입력
-			$('#eachPrice').val(numberWithCommas(longPrice));
-			
-			//변환문자 건수 내용 표기
-			totalCntTxt = "장문 : <strong>" + msg_long + "</strong> 건";
-			
-			//변환장문 건수 Hidden 폼에 넣어주기
-			$('#longMsgCnt').val(msg_long);
-			
-		}else{
-			
-			//변환장문 건수 Hidden 폼에 넣어주기
-			$('#longMsgCnt').val(msg_long);
-			
-		}
-
-		if(msg_short > 0){//단문문자
-			
-			shortPrice = $('#sPrice').val();
-			var shortTotPrice = shortPrice * msg_short; 
-			shortTotPrice = Math.round(shortTotPrice * 100) / 100;	//소수점 2자리 반올리 처리해주기
-
-			totalPrice = totalPrice + shortTotPrice;
-			
-			//input hidden 개별 문자 단가 파라미터에 입력
-			$('#eachPrice').val(numberWithCommas(shortPrice));
-			
-			if(msg_long > 0){
-				
-				//변환문자 건수 내용 표기
-				totalCntTxt = totalCntTxt + "/ 단문 : <strong>" + msg_short + "</strong> 건";
-				
-			}else{
-				
-				//변환문자 건수 내용 표기
-				totalCntTxt = "단문 : <strong>" + msg_short + "</strong> 건";
-				
-			}
-			
-			//변환단문 건수 Hidden 폼에 넣어주기
-			$('#shortMsgCnt').val(msg_short);
-		
-		}else{
-			
-			//변환단문 건수 Hidden 폼에 넣어주기
-			$('#shortMsgCnt').val(msg_short);
-			
-		}
-		
-	}
-	
-	
-	if(totalPrice > 0){
-		
-		//totalStr = totalPrice.toFixed(2);
-		totalStr = totalPrice;
-		
-	}
-	
-	//input hidden 결제금액 합계 파라이터에 입력
-	$('#totPrice').val(numberWithCommas(totalStr));
-	
-	//결제금액 합계 화면에 표시
-	$('#totalPriceTxt').text(numberWithCommas(totalStr));
-	
-	//결제금액 합계 파라이터에 입력
-	$('#totPrice').val(numberWithCommas(totalStr));
-	
-	//특정문구 일괄 변환으로 인한 단/장문 건수 표시
-	$('#repPriceTxt').show();
-	$('#repPriceTxt').html("(" + totalCntTxt + ")");
-	
-	if(msgType == 'P'){
-		
-		$('#nowMsgType').text("그림");
-		
-	}else if(msgType == 'M'){
-		
-		$('#nowMsgType').text("장문");
-	
-	}else{
-		
-		$('#nowMsgType').text("단문");
-		
-	}
-	
-	return totalStr;
-	
-}
-
-//예약 날짜 체크 함수
-function getGday(date) {												/*	현재와 이전 날자의 차이를 년-개월-일 형태로 가져오기 	*/
-	var now = new Date().getTime();								// 현재 날짜를 시간으로 변환
-	var d = new Date(date.substring(0, 10)).getTime();			// 이전 날짜를 시간으로 변환 
-	var gap = now - d;											// 현재 날짜와 이전 날짜의 차이를 밀리초 시간으로 구한다.
-	var result = Math.floor(gap/(1000 * 60 * 60 * 24));			// 날짜 차이를 일수로 계산
-	
-	var year = Math.floor(result / 365);						// 현재 날짜 년 - 개월 - 일 수로 표현하기
-	var month = Math.floor(result % 365 / 30);					
-	var day = result % 365 % 30;
-	
-	return result;
-	
-	//각 년도, 월, 일을 따로 리턴하려면 아래를 사용하면 됨
-	/* return {
-		year: year,
-		month: month,
-		day: day
-	}; */
-}
-
-/*
- * 예약 날짜 오류 체크 함수
- * 날짜, 시간, 분 파라미터 전달
- * 현재 날짜와 파라미터 시간의 분 간격 계산해주기
- * */
-function getGapDayTime(paramDate,paramHours,paramMin) {												/*	현재와 이전 날자의 차이를 년-개월-일 형태로 가져오기 	*/
-	
-	var now = new Date();
-	
-	//현재시간 구분하기
-	var year = now.getFullYear();
-	var month = now.getMonth() + 1 ;
-	var day = now.getDate();
-	var hours = now.getHours();
-	var min = now.getMinutes();
-	
-	//비교시간
-	var stDt = paramDate.split("/");
-	var stYear = stDt[0];
-	var stMonth = stDt[1];
-	var stDay = stDt[2];
-	
-	var nowDate = new Date(year, month-1, day, hours, min);
-	var stDate = new Date(stYear, stMonth-1, stDay, paramHours, paramMin);
-	var elapsedMSec = stDate.getTime() - nowDate.getTime();
-	var elapseMin = elapsedMSec / 1000 / 60;
-	
-	elapseMin = parseInt(elapseMin);
-	
-	return elapseMin;
-	
-	//각 년도, 월, 일을 따로 리턴하려면 아래를 사용하면 됨
-	/* return {
-		year: year,
-		month: month,
-		day: day
-	}; */
-}
-
-// 중복 주소 체크하기
-/*function dupliAddrData(data){
-	
-	var chk = true; //중복값 유무
-	var uniqData = []; // 중복값 삭제 후 데이터 저장
-	var dupCnt = 0;
-	
-	//첨부 주소 정보에서 연락처가 중복되는 경우 하나만 남기고 나머지는 삭제 하고 보여줌
-	$.each(data, function(i, item){
-		
-		chk = true; //중복값 유무
-		
-		$.each(uniqData, function(j, item2){
-			
-			if(item.phone == item2.phone){
-				
-				chk = false;
-				dupCnt = dupCnt + 1;
-				console.log("++++++++++++++ dupCnt ::: "+ dupCnt);
-				
-			}
-			
-		});			
-		
-		if(chk){
-			
-			uniqData.push(item);
-			
-		}
-		
-	});	
-	
-	$("#rowDupCnt").text(dupCnt);
-	return uniqData;
-	
-}*/
-
-var dupliPhoneDataRealList = [];
-
-//중복 전화번호 체크하기
-function dupliPhoneData(data){
-	
-	var chk = true; //중복값 유무
-	var uniqData = []; // 중복값 삭제 후 데이터 저장
-	var dupCnt = 0;
-	
-	//첨부 주소 정보에서 연락처가 중복되는 경우 하나만 남기고 나머지는 삭제 하고 보여줌
-	$.each(data, function(i, item){
-		
-		chk = true; //중복값 유무
-		
-		$.each(uniqData, function(j, item2){
-			if(item.phone.length > 0){
-				if(item.phone == item2.phone){
-					
-					chk = false;
-					dupCnt = dupCnt + 1;
-					
-				}
-			}
-			
-		});			
-		
-		if(chk){
-			uniqData.push(item);
-		}
-		else {
-			// Get 중복 연락처 
-			GetDupliPhoneDataReal(item.phone);
-		}
-		
-	});	
-	
-	//중복건수 텍스트 입력해 주기
-	$("#rowDupCnt").text(dupCnt);
-
-	// 중복번호 버튼 노출
-	if($("#btnAddrMassDupli").length > 0) {
-		$("#btnAddrMassDupli").show();
-	}
-
-	// 중복번호(기존 주소록) 버튼 노출
-	if($("#btnAddrMassSaveDupli").length > 0) {
-		$("#btnAddrMassSaveDupli").hide();
-	}
-	
-	return uniqData;
-}
-
-
-//연락처 중복검사 속도 개선 버전
-function getSpupDupliPhoneDataChk(data){
-	
-	var dataLen = data.length;
-	const arrUnique = data.filter((character, idx, arr)=>{
-	    return arr.findIndex((item) => item.phone === character.phone) === idx
-	});
-
-	var uniqLen = arrUnique.length;
-	var dupCnt = dataLen - uniqLen;
-	//중복건수 텍스트 입력해 주기
-	$("#rowDupCnt").text(dupCnt);
-	
-	return arrUnique;
-}
-
-// Get 중복 연락처 
-function GetDupliPhoneDataReal(item) {
-	var isDuplicate = false;
-	if (dupliPhoneDataRealList.length == 0) {
-		dupliPhoneDataRealList.push(item);
-	}
-	else {
-		for (var i = 0; i < dupliPhoneDataRealList.length; i++)	{
-			if (dupliPhoneDataRealList[i] == item) {
-				isDuplicate = true;
-			}
-		}
-		
-		if (isDuplicate) {
-			return;
-		}
-		else {
-			dupliPhoneDataRealList.push(item);
-		}
-	}
-}	
-
-//중복 전화번호 체크하여 중복 갯수 리턴하기
-function dupliPhoneDataChk(data){
-	
-	var chk = true; //중복값 유무
-	var uniqData = []; // 중복값 삭제 후 데이터 저장
-	var dupCnt = 0;
-	
-	//첨부 주소 정보에서 연락처가 중복되는 경우 하나만 남기고 나머지는 삭제 하고 보여줌
-	$.each(data, function(i, item){
-		
-		chk = true; //중복값 유무
-		
-		$.each(uniqData, function(j, item2){
-			
-			if(item.phone.length > 0){
-				
-				if(item.phone == item2.phone){
-					
-					chk = false;
-					dupCnt = dupCnt + 1;
-					
-				}
-				
-			}
-			
-		});		
-		
-		if(chk){
-			
-			uniqData.push(item);
-			
-		}
-		
-	});	
-
-	return dupCnt;
-	
-}
-
-//특정 바이트수 만큼 문자열 잘라서 반환해주기
-function strUnderLineSubstring(str, maxLength){
-	
-	for(b=i=0;c=str.charCodeAt(i);) {
-
-		b+=c>>7?2:1;
-
-		if (b > maxLength)
-
-		break;
-
-		i++;
-
-	}
-	
-	return str.substring(0,i);
-	
-}
-
-
-//특정 글자수 만큼 문자열 잘라서 반환해주기
-function strMaxLengthSubstring(str, maxLength){
-	
-	for(b=i=0;c=str.charCodeAt(i);) {
-
-		if (i > maxLength)
-
-		break;
-
-		i++;
-
-	}
-	
-	return str.substring(0,i);
-	
-}
-
-//문자열 글자수 반환해주기(한글, 영문, 특수문자, 엔터와 상관없이 글자수로 체크함)
-function strMaxCharacterCnt(str){
-	
-	var totLen = 0;
-	for(b=i=0;c=str.charCodeAt(i);) {
-		i++;
-		totLen = i;
-	}
-	return totLen;
-}
-
-//문자입력 첫번째 글자가 한글, 숫자, 영문자가 아니면 경고 표시
-function strFirstCharCheck(str){
-	
-	var pattern1 = /[0-9]/;
-	var pattern2 = /[a-zA-Z]/;
-	var pattern3 = /[ㄱ-ㅎ|ㅏ-ㅣ|가-힣]/;
-	
-	var spChar = 0;
-	for(var i=0; i<str.length; i++){
-		
-		if (!pattern1.test(str.charAt(i)) && !pattern2.test(str.charAt(i)) && !pattern3.test(str.charAt(i))) {
-			spChar++;
-		}else{
-			break;
-		}
-
-	}
-
-	var repStr = str.substring(0,spChar);
-	return repStr;
-	
-}
-
-function strChinJpnCheck(str){
-	
-	var rtnStr = "";
-	for(var i=0; i < str.length; i++){
-		
-		var cont = str.charAt(i);
-		
-		if(str.charAt(i) >= '\u4E00' && str.charAt(i) <= '\u9FFF'){//한중일 공통한자일 경우 
-			
-			if(rtnStr.length == 0){
-				rtnStr = cont;
-			}else{
-				rtnStr = rtnStr + ", " + cont;
-			}
-			
-		}else if(str.charAt(i) >= '\u2E80' && str.charAt(i) <= '\u2EFF'){//한자부수
-			
-			if(rtnStr.length == 0){
-				rtnStr = cont;
-			}else{
-				rtnStr = rtnStr + ", " + cont;
-			}
-			
-		}else if(str.charAt(i) >= '\u3400' && str.charAt(i) <= '\u4DB5'){//한자확장A
-			
-			if(rtnStr.length == 0){
-				rtnStr = cont;
-			}else{
-				rtnStr = rtnStr + ", " + cont;
-			}
-			
-		}
-		
-	}
-	
-	return rtnStr;
-}
-
-//받아온 str 에 이모지가 포함되어있는지 체크하여 갯수로 반환
-function kakaoTemplateEmojiCheck (str) {
-	var regex = /[\u{1F004}-\u{1F9E6}]|[\u{1F600}-\u{1F9D0}]/gu;
-	var usedEmoji = "";
-	var returnFlag = true;
-	
-	var splitMsg = str.split(/.*?/u);
-
-	for(var i=0; i < splitMsg.length; i++){
- 		if(splitMsg[i].match(regex)) {
-			usedEmoji =  usedEmoji + splitMsg[i];
-			returnFlag = false;
-		}
-	}
-	if(!returnFlag) alert("알림톡 내용에 이모지는 사용할 수 없습니다.\n이모지 삭제후 등록해주세요.\n(" + usedEmoji + ")");
-	
-	return returnFlag;
-}
-
-//받아온 str 에 이모지가 포함되어있는지 체크하여 갯수로 반환
-function emojiCheck (str) {
-	var regex = /[\u{1F004}-\u{1F9E6}]|[\u{1F600}-\u{1F9D0}]/gu;
-	var usedEmoji = "";
-	var returnFlag = true;
-	
-	var splitMsg = str.split(/.*?/u);
-
-	for(var i=0; i < splitMsg.length; i++){
- 		if(splitMsg[i].match(regex)) {
-			usedEmoji =  usedEmoji + splitMsg[i];
-			returnFlag = false;
-		}
-	}
-	if(!returnFlag) alert("문자 제목, 내용에 이모지는 사용할 수 없습니다.\n이모지 삭제후 발송해주세요.\n(" + usedEmoji + ")");
-	
-	return returnFlag;
-}
-
-function addrEmojiCheck (str) {
-	var regex = /[\u{1F004}-\u{1F9E6}]|[\u{1F600}-\u{1F9D0}]/gu;
-	var usedEmoji = "";
-	var returnFlag = true;
-	
-	var splitMsg = str.split(/.*?/u);
-
-	for(var i=0; i < splitMsg.length; i++){
- 		if(splitMsg[i].match(regex)) {
-			usedEmoji =  usedEmoji + splitMsg[i];
-			returnFlag = false;
-		}
-	}
-
-	if(!returnFlag) {
-    	//로딩창 hide
-    	$('.loading_layer').removeClass('active');
-    	
-		alert("주소록 저장 목록 중 이모지를 사용할 수 없습니다.\n이모지 삭제후 발송해주세요.\n(" + usedEmoji + ")");
-	}
-	
-	return returnFlag;
-}
-
-// 제목이 치환 문구 체크
-function getSpacialStringChk(mmsSubject){
-	
-	var returnStr = false;
-	
-	if(mmsSubject.indexOf("[*이름*]") > -1 || mmsSubject.indexOf("[*1*]") > -1 || mmsSubject.indexOf("[*2*]") > -1 || mmsSubject.indexOf("[*3*]") > -1 || mmsSubject.indexOf("[*4*]") > -1){
-		returnStr = true;
-	}
-	
-	return returnStr;
-	
-}
-
-//커서 위치에 삽입
-function setCursorInsertText(pTxtArea, pAddTxt) {
-	var txtArea = document.getElementById(pTxtArea);
-	var txtValue = txtArea.value;
-	var selectPos = txtArea.selectionStart; // 커서 위치 지정
-	var beforeTxt = txtValue.substring(0, selectPos);  // 기존텍스트 ~ 커서시작점 까지의 문자
-	var afterTxt = txtValue.substring(txtArea.selectionEnd, txtValue.length);   // 커서끝지점 ~ 기존텍스트 까지의 문자
-	var addTxt = pAddTxt; // 추가 입력 할 텍스트
-	txtArea.value = beforeTxt + addTxt + afterTxt;
-
-	selectPos = selectPos + addTxt.length;
-	txtArea.selectionStart = selectPos; // 커서 시작점을 추가 삽입된 텍스트 이후로 지정
-	txtArea.selectionEnd = selectPos; // 커서 끝지점을 추가 삽입된 텍스트 이후로 지정
-	txtArea.focus();
-}
-
-//받는사람 목록의 체크박스가 20개가 모두 체크 되었는지 확인
-function fnCallToChkAllCnt(){
-	
-	var chkCnt = 0;
-	var totChkCnt = $("input:checkbox[name='chkCallTo']").length;
-	var btnAllVal = $("#checkAll").val();
-	
-	//체크박스 체크된 갯수 구하기
-	$("input:checkbox[name='chkCallTo']").each(function () {
-		if($(this).is(':checked')){
-			chkCnt++;
-		};
-	});
-	
-	//전체선택 체크 여부 값 변경해 주기
-	//현재 체크된 체크박스 갯수와 전체 체크박스 갯수 비교하기
-	if(totChkCnt > 0 && totChkCnt == chkCnt){
-
-		if(btnAllVal == 'N'){
-	    	$("#checkAll").val("Y");
-	    	$("#checkAll").text("선택해제");
-	    }else{
-	    	$("#checkAll").val("N");
-	    	$("#checkAll").text("전체선택");
-	    }
-	    
-	}else{
-		
-		$("#checkAll").val("N");
-    	$("#checkAll").text("전체선택");
-		
-	}
-	
-}
-
-//선거문자 20건 수신자 목록 추가된 건수 및 발송 금액 변경해주기
-function fnChkCallToChange(){
-	
-	var callToCnt = 0;
-	$("input[name=chkCallTo]").each(function(){
-		
-		var chkSts = $(this).is(':checked');
-		if(chkSts){
-			callToCnt++;
-		}
-	});
-	
-	//체크박스가 모두 체크 되어있는지 확인 하기
-	fnCallToChkAllCnt();
-	
-	updateTotCnt(callToCnt); //전체 데이터 갯수 구하기
-	totalPriceSum(callToCnt);
-	
-}
-
-//Tabulator 주소록 그룹 목록일 경우 각 그룹 주소 갯수 합산해주기
-function getTabulatorLAddrGrpCnt(){
-	
-	var selectedData = tableL.getRows();
-	var totAddrCnt = 0;
-	for(var i=0; i < selectedData.length; i++){
-		
-		//일괄변환 문자에 콤마(,)가 들어가있으면 배열로 넘길때 문제가 발생하여 특수문자(§)로 치환하여 넘겨주도록 한다.
-		var addrGrpCnt = tableL.getRows()[i].getData().addrGrpCnt;
-		
-		totAddrCnt = Number(totAddrCnt) + Number(addrGrpCnt);
-		
-	}
-	
-	return totAddrCnt;
+/**
+ * 휴대폰번호 유효성 체크
+ * true, false 반환
+ * 대시 유무 상관없음
+ */
+function checkHpNum(str) {
+	
+	var regExp = /^(050[2345678]{1}|01[016789]{1})-?[0-9]{3,4}-?[0-9]{4}$/;
+	//var regExp = /^(01[016789]{1}|070|02|0[3-9]{1}[0-9]{1})-?[0-9]{3,4}-?[0-9]{4}$/; //지역번호(일반전화) 형식까지 체크해주는 정규식
+	return regExp.test(str);
+}
+
+/**
+ * 휴대폰번호만 유효성 체크
+ * true, false 반환
+ * 대시 유무 상관없음
+ */
+function checkOnlyHpNum(str) {
+	
+	//var regExp = /^(050[234567]{1}|01[016789]{1})-?[0-9]{3,4}-?[0-9]{4}$/;
+	var regExp = /^(01[016789]{1})-?[0-9]{3,4}-?[0-9]{4}$/; //지역번호(일반전화) 형식까지 체크해주는 정규식
+	return regExp.test(str);
+}
+
+/**
+ * 팩스 번호 유효성 체크
+ * true, false 반환
+ * 앞 3자리를 체크 함
+ * -- 전국 지역번호
+ * 	02	서울특별시
+	031	경기도
+	032	인천광역시
+	033	강원도
+	041	충청남도
+	042	대전광역시
+	043	충청북도
+	044	세종특별자치시
+	051	부산광역시
+	052	울산광역시
+	053	대구광역시
+	054	경상북도
+	055	경상남도
+	061	전라남도
+	062	광주광역시
+	063	전라북도
+	064	제주특별자치도
+	
+	-- 타사부가번호
+	030*
+	050*
+	060
+	070
+	080
+	1**
+	
+	위 번호로 시작하는 팩스 번호만 허용함.
+ */
+function checkFaxNum(str) {
+	str = removeDash(str);
+	var subNum = str.substring(0,3);
+	var regExp = /^(02[0-9]{1}|030|050|060|070|080|0[3-6]{1}[1-5]{1}|1[0-9]{1}[0-9]{1})$/; //지역번호(일반전화) 형식까지 체크해주는 정규식
+	return regExp.test(subNum);
+}
+
+/*
+ * 일반전화 유효성 체크
+ * true, false 반환
+ * 
+ * */
+function checkNorPhoneNum(str){
+	
+	var regExp = /^(02|0[3-9]{1}[0-9]{1})-?[0-9]{3,4}-?[0-9]{4}$/;
+	
+	/**
+	 * 기간통신사업자 공통 부가서비스 번호 체크
+	 * 번호 사업자
+		1588,1577,1899 KT
+		1544,1644,1661,1800 ,1833 LG유플러스
+		1566,1600,1670 SK브로드밴드
+		1688,1666 온세텔레콤
+		1599 SK텔링크
+		1877 한국케이블텔레콤
+		1855 CJ헬로비전
+		1661 alleh KT
+	 * 
+	 * */
+	
+	if(str.substring(0,2) == "15"){
+		
+		regExp = /^(15[0-9]{2})-?[0-9]{4}$/;
+		
+	}else if(str.substring(0,2) == "16"){
+		
+		regExp = /^(16[0-9]{2})-?[0-9]{4}$/;
+		
+	}else if(str.substring(0,2) == "18"){
+		
+		regExp = /^(18[0-9]{2})-?[0-9]{4}$/;
+		
+	}
+	
+	return regExp.test(str);
+}
+
+/*
+ * 일반전화 / 핸드폰 번호 종류 확인
+ * true, false 반환
+ * 
+ * */
+function checkTelHpType(str){
+	
+	var subCall = str.substring(0,3);	// 전화번호 앞 3자리 받아오기
+	var strType = "";				 	// 결과 반환
+	
+	if(subCall != '010' 
+		&& subCall != '011' 
+		&& subCall != '016' 
+		&& subCall != '017'){//일반전화 번호이면
+		
+		strType = "Tel";
+		
+	}else{
+		
+		strType = "Hp";
+	}
+	
+	return strType;
+}
+
+
+/**
+ * 휴대폰번호 대시('-') 제거
+ */
+function removeDash(str) {
+	var regExp = new RegExp('-', 'g');
+	return str.replace(regExp, '');
+}
+
+/**
+ * 휴대폰번호 대시('-') 추가
+ * 대시 유무 상관없음
+ * 유효성 맞지 않을시 변환안됨.
+ */
+function addDash(str) {
+	return str.replace(/(^01[016789]{1}|070)([0-9]{3}|[0-9]{4})([0-9]{4})$/,"$1-$2-$3").replace("--", "-");
+}
+
+/**
+ * ReplaceAll (by javascript prototype)
+ * 정규식 패턴에서 \는 두 개 사용 
+ */
+String.prototype.replaceAll = function(pattern, changeString) {
+	var regExp = new RegExp(pattern, 'g');
+	return this.replace(regExp, changeString);
+};
+
+/**
+ * 이메일 유효성 체크
+ * true, false 반환
+ * 
+ */
+function checkEmail(str) {
+	var regExp = /^[A-Za-z0-9_\.\-]+@[A-Za-z0-9\-]+\.[A-Za-z0-9\-]+/;
+	return regExp.test(str);
+}
+
+/**
+ * XSS 체크하기
+ * 
+ * 
+ */
+
+function XSSCheck(str, level) {
+    if (level == undefined || level == 0) {
+        str = str.replace(/\<|\>|\"|\'|\%|\;|\(|\)|\&|\+|\-/g,"");
+    } else if (level != undefined && level == 1) {
+        str = str.replace(/\</g, "&lt;");
+        str = str.replace(/\>/g, "&gt;");
+    }
+    return str;
+}
+
+
+//숫자 천단위 콤마 찍어주기
+function numberWithCommas(x) { 
+	return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); 
+}
+
+function comma(num){ 
+	var len, point, str; 
+	num = num + ""; 
+	point = num.length % 3; 
+	len = num.length; 
+	str = num.substring(0, point); 
+	while (point < len) { 
+		if (str != "") str += ","; 
+		str += num.substring(point, point + 3); 
+		point += 3; 
+		} 
+	return str; 
+}
+
+
+function totalPriceSum(totRows){
+	
+	var contents = $('#smsTxtArea').val();	//입력 문자 내용
+	var msgType = conTypeCheck(contents);	//입력 문자 길이 체크
+	var collNumCnt = parseInt(totRows); 	//받는사람 건수
+	var price = 0;							//개별 건수 금액
+	var totalPrice = 0;						//전체 금액
+	//var strDot = [];
+	//var subPrice = "";
+	//var spPrice = "";
+	var totalStr = "0";							//전체 합계 금액
+	var userMoney = $('#hdUserMoney').text(); 	//헤더 영역 보유 금액 불러오기
+	var msgCnt = 0;								//발송 가능 문자 건수
+	var imgCnt = $("#imgCnt").val(); // 현재 페이지에 첨부된 이미지 갯수
+	
+	if(!userMoney > 0){
+		
+		userMoney = 0;
+		
+	}
+	//헤더 영역 보유 금액 콤마 문자 제거
+	if(userMoney != ''){
+		
+		userMoney = userMoney.replaceAll("," , "");
+		
+	}
+	
+	/*if(msgType == "P"){//그림문자
+		
+		//그림 이미지 갯수에 따른 금액 계산
+		if(imgCnt > 2){//그림 3장일경우
+			price = parseFloat($('#p3Price').val());
+		}else if(imgCnt > 1){//그림 2장일경우
+			price = parseFloat($('#p2Price').val());
+		}else{//그림 1장일 경우
+			price = parseFloat($('#pPrice').val());
+		}
+		
+		msgCnt = parseFloat(userMoney) / price;
+	
+	}else if(msgType == "M"){//장문 문자
+		
+		price = parseFloat($('#mPrice').val());
+		msgCnt = parseFloat(userMoney) / price;
+		
+	}else{//단문문자
+		
+		price = parseFloat($('#sPrice').val());
+		msgCnt = parseFloat(userMoney) / price;
+	
+	}*/
+	
+	//금액 소수점 제거 하여 적용 20220623 소수점 버림 처리
+	if(msgType == "P"){//그림문자
+		
+		//그림 이미지 갯수에 따른 금액 계산
+		if(imgCnt > 2){//그림 3장일경우
+			price = $('#p3Price').val();
+		}else if(imgCnt > 1){//그림 2장일경우
+			price = $('#p2Price').val();
+		}else{//그림 1장일 경우
+			price = $('#pPrice').val();
+		}
+		
+		msgCnt = userMoney / price;
+	
+	}else if(msgType == "M"){//장문 문자
+		
+		price = $('#mPrice').val();
+		msgCnt = userMoney / price;
+		
+	}else{//단문문자
+		
+		price = $('#sPrice').val();
+		msgCnt = userMoney / price;
+	
+	}
+	
+	totalPrice = price * collNumCnt;
+	
+	// 소수점 첫째자리 까지 표시
+	totalPrice = totalPrice.toFixed(1);
+	
+	if(totalPrice > 0){
+		
+		//totalStr = totalPrice.toFixed(2);
+		totalStr = totalPrice;
+		
+	}
+	
+	//개별 문자 단가 파라미터에 입력
+	$('#eachPrice').val(numberWithCommas(price));
+	
+	
+	//결제금액 합계 파라이터에 입력
+	$('#totPrice').val(numberWithCommas(totalStr));
+	
+	//결제금액 합계 화면에 표시
+	$('#totalPriceTxt').text(numberWithCommas(totalStr));
+	
+	//현재 문자 전송 가능 갯수 표시
+	$('.nowMsgCnt').text(numberWithCommas(msgCnt.toFixed()));
+	
+	if(msgType == 'P'){
+		
+		$('#nowMsgType').text("그림");
+		
+	}else if(msgType == 'M'){
+		
+		$('#nowMsgType').text("장문");
+	
+	}else{
+		
+		$('#nowMsgType').text("단문");
+		
+	}
+	
+	$('#repPriceTxt').hide();
+	
+	return totalStr;
+	
+}
+
+function replTotalPriceSum(msg_short, msg_long, totRows){
+	
+	var shortPrice = 0;		//단문 개별 건수 금액
+	var longPrice = 0;		//장문 개별 건수 금액
+	var imgPrice = 0;		//그림문자 개별 건수 금액
+	var totalPrice = 0;		//전체 금액
+	var totalStr = "0";		//전체 합계 금액
+	var contents = $('#smsTxtArea').val();	//입력 문자 내용
+	var msgType = conTypeCheck(contents);	//입력 문자 길이 체크
+	var userMoney = $('#hdUserMoney').text(); 	//헤더 영역 보유 금액 불러오기
+	var msgCnt = 0;								//발송 가능 문자 건수
+	var imgCnt = $("#imgCnt").val(); // 현재 페이지에 첨부된 이미지 갯수
+	var collNumCnt = parseInt(totRows); 	//받는사람 건수
+	var totalCntTxt = "";
+	
+	//금액 소수점 제거하여 금액 처리
+	if(msgType == "P"){//그림문자
+		
+		//그림 이미지 갯수에 따른 금액 계산
+		if(imgCnt > 2){//그림 3장일경우
+			imgPrice = $('#p3Price').val();
+		}else if(imgCnt > 1){//그림 2장일경우
+			imgPrice = $('#p2Price').val();
+			
+		}else{//그림 1장일 경우
+			imgPrice = $('#pPrice').val();
+		}
+		
+		msgCnt = userMoney.replaceAll(",","") / imgPrice;
+		
+		var imgTotPrice = imgPrice * collNumCnt; 
+		imgTotPrice = Math.round(imgTotPrice * 100) / 100;	//소수점 2자리 반올리 처리해주기
+		
+		totalPrice =  totalPrice + imgTotPrice;
+		
+		//input hidden 개별 문자 단가 파라미터에 입력
+		$('#eachPrice').val(numberWithCommas(imgPrice));
+		
+		//input hidden 결제금액 합계 파라이터에 입력
+		$('#totPrice').val(numberWithCommas(totalStr));
+		
+		//결제금액 합계 화면에 표시
+		$('#totalPriceTxt').text(numberWithCommas(totalStr));
+		
+		//현재 문자 전송 가능 갯수 표시
+		$('.nowMsgCnt').text(numberWithCommas(msgCnt.toFixed()));
+		
+		//변환문자 건수 내용 표기
+		totalCntTxt = "그림 : <strong>" + totRows + "</strong> 건";;
+		
+	}else{
+		
+		if(msg_long > 0){//장문 문자
+			
+			longPrice = $('#mPrice').val();
+			var longTotPrice = longPrice * msg_long; 
+			longTotPrice = Math.round(longTotPrice * 100) / 100;	//소수점 2자리 반올리 처리해주기
+			
+			totalPrice = totalPrice + longTotPrice;
+			
+			//input hidden 개별 문자 단가 파라미터에 입력
+			$('#eachPrice').val(numberWithCommas(longPrice));
+			
+			//변환문자 건수 내용 표기
+			totalCntTxt = "장문 : <strong>" + msg_long + "</strong> 건";
+			
+			//변환장문 건수 Hidden 폼에 넣어주기
+			$('#longMsgCnt').val(msg_long);
+			
+		}else{
+			
+			//변환장문 건수 Hidden 폼에 넣어주기
+			$('#longMsgCnt').val(msg_long);
+			
+		}
+
+		if(msg_short > 0){//단문문자
+			
+			shortPrice = $('#sPrice').val();
+			var shortTotPrice = shortPrice * msg_short; 
+			shortTotPrice = Math.round(shortTotPrice * 100) / 100;	//소수점 2자리 반올리 처리해주기
+
+			totalPrice = totalPrice + shortTotPrice;
+			
+			//input hidden 개별 문자 단가 파라미터에 입력
+			$('#eachPrice').val(numberWithCommas(shortPrice));
+			
+			if(msg_long > 0){
+				
+				//변환문자 건수 내용 표기
+				totalCntTxt = totalCntTxt + "/ 단문 : <strong>" + msg_short + "</strong> 건";
+				
+			}else{
+				
+				//변환문자 건수 내용 표기
+				totalCntTxt = "단문 : <strong>" + msg_short + "</strong> 건";
+				
+			}
+			
+			//변환단문 건수 Hidden 폼에 넣어주기
+			$('#shortMsgCnt').val(msg_short);
+		
+		}else{
+			
+			//변환단문 건수 Hidden 폼에 넣어주기
+			$('#shortMsgCnt').val(msg_short);
+			
+		}
+		
+	}
+	
+	
+	if(totalPrice > 0){
+		
+		//totalStr = totalPrice.toFixed(2);
+		totalStr = totalPrice;
+		
+	}
+	
+	//input hidden 결제금액 합계 파라이터에 입력
+	$('#totPrice').val(numberWithCommas(totalStr));
+	
+	//결제금액 합계 화면에 표시
+	$('#totalPriceTxt').text(numberWithCommas(totalStr));
+	
+	//결제금액 합계 파라이터에 입력
+	$('#totPrice').val(numberWithCommas(totalStr));
+	
+	//특정문구 일괄 변환으로 인한 단/장문 건수 표시
+	$('#repPriceTxt').show();
+	$('#repPriceTxt').html("(" + totalCntTxt + ")");
+	
+	if(msgType == 'P'){
+		
+		$('#nowMsgType').text("그림");
+		
+	}else if(msgType == 'M'){
+		
+		$('#nowMsgType').text("장문");
+	
+	}else{
+		
+		$('#nowMsgType').text("단문");
+		
+	}
+	
+	return totalStr;
+	
+}
+
+//예약 날짜 체크 함수
+function getGday(date) {												/*	현재와 이전 날자의 차이를 년-개월-일 형태로 가져오기 	*/
+	var now = new Date().getTime();								// 현재 날짜를 시간으로 변환
+	var d = new Date(date.substring(0, 10)).getTime();			// 이전 날짜를 시간으로 변환 
+	var gap = now - d;											// 현재 날짜와 이전 날짜의 차이를 밀리초 시간으로 구한다.
+	var result = Math.floor(gap/(1000 * 60 * 60 * 24));			// 날짜 차이를 일수로 계산
+	
+	var year = Math.floor(result / 365);						// 현재 날짜 년 - 개월 - 일 수로 표현하기
+	var month = Math.floor(result % 365 / 30);					
+	var day = result % 365 % 30;
+	
+	return result;
+	
+	//각 년도, 월, 일을 따로 리턴하려면 아래를 사용하면 됨
+	/* return {
+		year: year,
+		month: month,
+		day: day
+	}; */
+}
+
+/*
+ * 예약 날짜 오류 체크 함수
+ * 날짜, 시간, 분 파라미터 전달
+ * 현재 날짜와 파라미터 시간의 분 간격 계산해주기
+ * */
+function getGapDayTime(paramDate,paramHours,paramMin) {												/*	현재와 이전 날자의 차이를 년-개월-일 형태로 가져오기 	*/
+	
+	var now = new Date();
+	
+	//현재시간 구분하기
+	var year = now.getFullYear();
+	var month = now.getMonth() + 1 ;
+	var day = now.getDate();
+	var hours = now.getHours();
+	var min = now.getMinutes();
+	
+	//비교시간
+	var stDt = paramDate.split("/");
+	var stYear = stDt[0];
+	var stMonth = stDt[1];
+	var stDay = stDt[2];
+	
+	var nowDate = new Date(year, month-1, day, hours, min);
+	var stDate = new Date(stYear, stMonth-1, stDay, paramHours, paramMin);
+	var elapsedMSec = stDate.getTime() - nowDate.getTime();
+	var elapseMin = elapsedMSec / 1000 / 60;
+	
+	elapseMin = parseInt(elapseMin);
+	
+	return elapseMin;
+	
+	//각 년도, 월, 일을 따로 리턴하려면 아래를 사용하면 됨
+	/* return {
+		year: year,
+		month: month,
+		day: day
+	}; */
+}
+
+// 중복 주소 체크하기
+/*function dupliAddrData(data){
+	
+	var chk = true; //중복값 유무
+	var uniqData = []; // 중복값 삭제 후 데이터 저장
+	var dupCnt = 0;
+	
+	//첨부 주소 정보에서 연락처가 중복되는 경우 하나만 남기고 나머지는 삭제 하고 보여줌
+	$.each(data, function(i, item){
+		
+		chk = true; //중복값 유무
+		
+		$.each(uniqData, function(j, item2){
+			
+			if(item.phone == item2.phone){
+				
+				chk = false;
+				dupCnt = dupCnt + 1;
+				console.log("++++++++++++++ dupCnt ::: "+ dupCnt);
+				
+			}
+			
+		});			
+		
+		if(chk){
+			
+			uniqData.push(item);
+			
+		}
+		
+	});	
+	
+	$("#rowDupCnt").text(dupCnt);
+	return uniqData;
+	
+}*/
+
+var dupliPhoneDataRealList = [];
+
+//중복 전화번호 체크하기
+function dupliPhoneData(data){
+	
+	var chk = true; //중복값 유무
+	var uniqData = []; // 중복값 삭제 후 데이터 저장
+	var dupCnt = 0;
+	
+	//첨부 주소 정보에서 연락처가 중복되는 경우 하나만 남기고 나머지는 삭제 하고 보여줌
+	$.each(data, function(i, item){
+		
+		chk = true; //중복값 유무
+		
+		$.each(uniqData, function(j, item2){
+			if(item.phone.length > 0){
+				if(item.phone == item2.phone){
+					
+					chk = false;
+					dupCnt = dupCnt + 1;
+					
+				}
+			}
+			
+		});			
+		
+		if(chk){
+			uniqData.push(item);
+		}
+		else {
+			// Get 중복 연락처 
+			GetDupliPhoneDataReal(item.phone);
+		}
+		
+	});	
+	
+	//중복건수 텍스트 입력해 주기
+	$("#rowDupCnt").text(dupCnt);
+
+	// 중복번호 버튼 노출
+	if($("#btnAddrMassDupli").length > 0) {
+		$("#btnAddrMassDupli").show();
+	}
+
+	// 중복번호(기존 주소록) 버튼 노출
+	if($("#btnAddrMassSaveDupli").length > 0) {
+		$("#btnAddrMassSaveDupli").hide();
+	}
+	
+	return uniqData;
+}
+
+
+//연락처 중복검사 속도 개선 버전
+function getSpupDupliPhoneDataChk(data){
+	
+	var dataLen = data.length;
+	const arrUnique = data.filter((character, idx, arr)=>{
+	    return arr.findIndex((item) => item.phone === character.phone) === idx
+	});
+
+	var uniqLen = arrUnique.length;
+	var dupCnt = dataLen - uniqLen;
+	//중복건수 텍스트 입력해 주기
+	$("#rowDupCnt").text(dupCnt);
+	
+	return arrUnique;
+}
+
+// Get 중복 연락처 
+function GetDupliPhoneDataReal(item) {
+	var isDuplicate = false;
+	if (dupliPhoneDataRealList.length == 0) {
+		dupliPhoneDataRealList.push(item);
+	}
+	else {
+		for (var i = 0; i < dupliPhoneDataRealList.length; i++)	{
+			if (dupliPhoneDataRealList[i] == item) {
+				isDuplicate = true;
+			}
+		}
+		
+		if (isDuplicate) {
+			return;
+		}
+		else {
+			dupliPhoneDataRealList.push(item);
+		}
+	}
+}	
+
+//중복 전화번호 체크하여 중복 갯수 리턴하기
+function dupliPhoneDataChk(data){
+	
+	var chk = true; //중복값 유무
+	var uniqData = []; // 중복값 삭제 후 데이터 저장
+	var dupCnt = 0;
+	
+	//첨부 주소 정보에서 연락처가 중복되는 경우 하나만 남기고 나머지는 삭제 하고 보여줌
+	$.each(data, function(i, item){
+		
+		chk = true; //중복값 유무
+		
+		$.each(uniqData, function(j, item2){
+			
+			if(item.phone.length > 0){
+				
+				if(item.phone == item2.phone){
+					
+					chk = false;
+					dupCnt = dupCnt + 1;
+					
+				}
+				
+			}
+			
+		});		
+		
+		if(chk){
+			
+			uniqData.push(item);
+			
+		}
+		
+	});	
+
+	return dupCnt;
+	
+}
+
+//특정 바이트수 만큼 문자열 잘라서 반환해주기
+function strUnderLineSubstring(str, maxLength){
+	
+	for(b=i=0;c=str.charCodeAt(i);) {
+
+		b+=c>>7?2:1;
+
+		if (b > maxLength)
+
+		break;
+
+		i++;
+
+	}
+	
+	return str.substring(0,i);
+	
+}
+
+
+//특정 글자수 만큼 문자열 잘라서 반환해주기
+function strMaxLengthSubstring(str, maxLength){
+	
+	for(b=i=0;c=str.charCodeAt(i);) {
+
+		if (i > maxLength)
+
+		break;
+
+		i++;
+
+	}
+	
+	return str.substring(0,i);
+	
+}
+
+//문자열 글자수 반환해주기(한글, 영문, 특수문자, 엔터와 상관없이 글자수로 체크함)
+function strMaxCharacterCnt(str){
+	
+	var totLen = 0;
+	for(b=i=0;c=str.charCodeAt(i);) {
+		i++;
+		totLen = i;
+	}
+	return totLen;
+}
+
+//문자입력 첫번째 글자가 한글, 숫자, 영문자가 아니면 경고 표시
+function strFirstCharCheck(str){
+	
+	var pattern1 = /[0-9]/;
+	var pattern2 = /[a-zA-Z]/;
+	var pattern3 = /[ㄱ-ㅎ|ㅏ-ㅣ|가-힣]/;
+	
+	var spChar = 0;
+	for(var i=0; i<str.length; i++){
+		
+		if (!pattern1.test(str.charAt(i)) && !pattern2.test(str.charAt(i)) && !pattern3.test(str.charAt(i))) {
+			spChar++;
+		}else{
+			break;
+		}
+
+	}
+
+	var repStr = str.substring(0,spChar);
+	return repStr;
+	
+}
+
+function strChinJpnCheck(str){
+	
+	var rtnStr = "";
+	for(var i=0; i < str.length; i++){
+		
+		var cont = str.charAt(i);
+		
+		if(str.charAt(i) >= '\u4E00' && str.charAt(i) <= '\u9FFF'){//한중일 공통한자일 경우 
+			
+			if(rtnStr.length == 0){
+				rtnStr = cont;
+			}else{
+				rtnStr = rtnStr + ", " + cont;
+			}
+			
+		}else if(str.charAt(i) >= '\u2E80' && str.charAt(i) <= '\u2EFF'){//한자부수
+			
+			if(rtnStr.length == 0){
+				rtnStr = cont;
+			}else{
+				rtnStr = rtnStr + ", " + cont;
+			}
+			
+		}else if(str.charAt(i) >= '\u3400' && str.charAt(i) <= '\u4DB5'){//한자확장A
+			
+			if(rtnStr.length == 0){
+				rtnStr = cont;
+			}else{
+				rtnStr = rtnStr + ", " + cont;
+			}
+			
+		}
+		
+	}
+	
+	return rtnStr;
+}
+
+//받아온 str 에 이모지가 포함되어있는지 체크하여 갯수로 반환
+function kakaoTemplateEmojiCheck (str) {
+	var regex = /[\u{1F004}-\u{1F9E6}]|[\u{1F600}-\u{1F9D0}]/gu;
+	var usedEmoji = "";
+	var returnFlag = true;
+	
+	var splitMsg = str.split(/.*?/u);
+
+	for(var i=0; i < splitMsg.length; i++){
+ 		if(splitMsg[i].match(regex)) {
+			usedEmoji =  usedEmoji + splitMsg[i];
+			returnFlag = false;
+		}
+	}
+	if(!returnFlag) alert("알림톡 내용에 이모지는 사용할 수 없습니다.\n이모지 삭제후 등록해주세요.\n(" + usedEmoji + ")");
+	
+	return returnFlag;
+}
+
+//받아온 str 에 이모지가 포함되어있는지 체크하여 갯수로 반환
+function emojiCheck (str) {
+	var regex = /[\u{1F004}-\u{1F9E6}]|[\u{1F600}-\u{1F9D0}]/gu;
+	var usedEmoji = "";
+	var returnFlag = true;
+	
+	var splitMsg = str.split(/.*?/u);
+
+	for(var i=0; i < splitMsg.length; i++){
+ 		if(splitMsg[i].match(regex)) {
+			usedEmoji =  usedEmoji + splitMsg[i];
+			returnFlag = false;
+		}
+	}
+	if(!returnFlag) alert("문자 제목, 내용에 이모지는 사용할 수 없습니다.\n이모지 삭제후 발송해주세요.\n(" + usedEmoji + ")");
+	
+	return returnFlag;
+}
+
+function addrEmojiCheck (str) {
+	var regex = /[\u{1F004}-\u{1F9E6}]|[\u{1F600}-\u{1F9D0}]/gu;
+	var usedEmoji = "";
+	var returnFlag = true;
+	
+	var splitMsg = str.split(/.*?/u);
+
+	for(var i=0; i < splitMsg.length; i++){
+ 		if(splitMsg[i].match(regex)) {
+			usedEmoji =  usedEmoji + splitMsg[i];
+			returnFlag = false;
+		}
+	}
+
+	if(!returnFlag) {
+    	//로딩창 hide
+    	$('.loading_layer').removeClass('active');
+    	
+		alert("주소록 저장 목록 중 이모지를 사용할 수 없습니다.\n이모지 삭제후 발송해주세요.\n(" + usedEmoji + ")");
+	}
+	
+	return returnFlag;
+}
+
+// 제목이 치환 문구 체크
+function getSpacialStringChk(mmsSubject){
+	
+	var returnStr = false;
+	
+	if(mmsSubject.indexOf("[*이름*]") > -1 || mmsSubject.indexOf("[*1*]") > -1 || mmsSubject.indexOf("[*2*]") > -1 || mmsSubject.indexOf("[*3*]") > -1 || mmsSubject.indexOf("[*4*]") > -1){
+		returnStr = true;
+	}
+	
+	return returnStr;
+	
+}
+
+//커서 위치에 삽입
+function setCursorInsertText(pTxtArea, pAddTxt) {
+	var txtArea = document.getElementById(pTxtArea);
+	var txtValue = txtArea.value;
+	var selectPos = txtArea.selectionStart; // 커서 위치 지정
+	var beforeTxt = txtValue.substring(0, selectPos);  // 기존텍스트 ~ 커서시작점 까지의 문자
+	var afterTxt = txtValue.substring(txtArea.selectionEnd, txtValue.length);   // 커서끝지점 ~ 기존텍스트 까지의 문자
+	var addTxt = pAddTxt; // 추가 입력 할 텍스트
+	txtArea.value = beforeTxt + addTxt + afterTxt;
+
+	selectPos = selectPos + addTxt.length;
+	txtArea.selectionStart = selectPos; // 커서 시작점을 추가 삽입된 텍스트 이후로 지정
+	txtArea.selectionEnd = selectPos; // 커서 끝지점을 추가 삽입된 텍스트 이후로 지정
+	txtArea.focus();
+}
+
+//받는사람 목록의 체크박스가 20개가 모두 체크 되었는지 확인
+function fnCallToChkAllCnt(){
+	
+	var chkCnt = 0;
+	var totChkCnt = $("input:checkbox[name='chkCallTo']").length;
+	var btnAllVal = $("#checkAll").val();
+	
+	//체크박스 체크된 갯수 구하기
+	$("input:checkbox[name='chkCallTo']").each(function () {
+		if($(this).is(':checked')){
+			chkCnt++;
+		};
+	});
+	
+	//전체선택 체크 여부 값 변경해 주기
+	//현재 체크된 체크박스 갯수와 전체 체크박스 갯수 비교하기
+	if(totChkCnt > 0 && totChkCnt == chkCnt){
+
+		if(btnAllVal == 'N'){
+	    	$("#checkAll").val("Y");
+	    	$("#checkAll").text("선택해제");
+	    }else{
+	    	$("#checkAll").val("N");
+	    	$("#checkAll").text("전체선택");
+	    }
+	    
+	}else{
+		
+		$("#checkAll").val("N");
+    	$("#checkAll").text("전체선택");
+		
+	}
+	
+}
+
+//선거문자 20건 수신자 목록 추가된 건수 및 발송 금액 변경해주기
+function fnChkCallToChange(){
+	
+	var callToCnt = 0;
+	$("input[name=chkCallTo]").each(function(){
+		
+		var chkSts = $(this).is(':checked');
+		if(chkSts){
+			callToCnt++;
+		}
+	});
+	
+	//체크박스가 모두 체크 되어있는지 확인 하기
+	fnCallToChkAllCnt();
+	
+	updateTotCnt(callToCnt); //전체 데이터 갯수 구하기
+	totalPriceSum(callToCnt);
+	
+}
+
+//Tabulator 주소록 그룹 목록일 경우 각 그룹 주소 갯수 합산해주기
+function getTabulatorLAddrGrpCnt(){
+	
+	var selectedData = tableL.getRows();
+	var totAddrCnt = 0;
+	for(var i=0; i < selectedData.length; i++){
+		
+		//일괄변환 문자에 콤마(,)가 들어가있으면 배열로 넘길때 문제가 발생하여 특수문자(§)로 치환하여 넘겨주도록 한다.
+		var addrGrpCnt = tableL.getRows()[i].getData().addrGrpCnt;
+		
+		totAddrCnt = Number(totAddrCnt) + Number(addrGrpCnt);
+		
+	}
+	
+	return totAddrCnt;
 }
(No newline at end of file)
Add a comment
List