이호영 이호영 2024-09-23
문자전송 jsp 백업
@f1b873cb9c401e7b28466e669b683e8d51b1edc8
 
src/main/webapp/WEB-INF/jsp/web/msgdata/MsgDataView_advcBack_20240923.jsp (added)
+++ src/main/webapp/WEB-INF/jsp/web/msgdata/MsgDataView_advcBack_20240923.jsp
@@ -0,0 +1,2525 @@
+<%@ 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" %>
+<%@ page import="itn.com.cmm.LoginVO" %>
+
+<!-- <script src="/publish/js/content.js"></script> -->
+
+<script type="text/javascript">
+
+var _regExp1 = /(^02.{0}|^01.{1}|^[0-9]{3})-?([0-9]{3,4})-?([0-9]{4})$/;
+
+var imgFilePath = []; // 최종 선택한 이미지 경로 저장 변수
+var imgFileId = []; // 최종 선택한 파일 아이디 저장 변수
+var templateYn = []; // 템플릿 사용 여부 저장 변수
+var tableL = null; //좌측 받는 사람 주소록 Tabulator 변수
+var tableR = null; //우측 주소록 불러오기 Tabulator 변수
+var tableAddr = null; //주소록 불러오기 팝업 Tabulator 변수
+
+var loginVO = '${loginVO}';
+
+var popCustomScrT=0;	// 맞춤제작 요청 JSPark => 2023.02.21 추가
+var msgResendAllFlag = "${msgResendAllFlag}";
+var msgResendAllGroupId = "${msgResendAllGroupId}";
+var msgResendAllAdvertiseYn = "${msgResendAllAdvertiseYn}";
+var msgResendAllReplaceYn = "${msgResendAllReplaceYn}";
+
+$(document).ready(function(){
+	var tsMoreSampleYn = "${moreSampleYn}";
+	var tsMainImgFlag = "${mainImgVO.mainImgFlag}";
+	var tsMainLetterFlag = "${mainLetterVO.mainLetterFlag}";
+		
+	//메인화면에서 샘플 더보기로 왔을 시 문자타입, 카테고리 세팅
+	if(tsMoreSampleYn == 'Y'){
+		document.letterForm.letterType.value = '${searchVO.mainLetterTypeFlag}';
+		document.letterForm.categoryCode.value = "${cateCodeVO.cateNo}";
+	}
+	//메인화면에서 그림문자샘플 클릭으로 왔을 시 문자타입, 카테고리 세팅
+	if(tsMainImgFlag == 'Y'){
+		document.letterForm.letterType.value = '${searchVO.mainLetterTypeFlag}';
+		document.letterForm.categoryCode.value = "${cateCodeVO.cateNo}";
+	}
+	//메인화면에서 단문장문 문자샘플 클릭으로 왔을 시 문자타입, 카테고리 세팅
+	if(tsMainLetterFlag == 'Y'){
+		document.letterForm.letterType.value = '${searchVO.mainLetterTypeFlag}';
+		document.letterForm.categoryCode.value = "${cateCodeVO.cateNo}";
+	}	
+	
+
+	//문자 발송 화면 폼 불러오기
+	listMsgDataView();
+	
+	//최 하단  문자 샘플 탭 리스트 내용 불러오기
+	fnLetterListAjax(1);
+	
+	//최 하단 그림문자 탭 리스트 내용 불러오기
+	fnPhotoListAjax(1);
+	
+	// 내보관함 리스트 로그인이 완료된 경우에만 로드되도록
+	if(loginVO != "" && loginVO != null){
+		//최 하단 내문자함 탭 리스트 내용 불러오기
+		fnMyMsgListAjax(1);
+	}
+	
+	//그림문자 샘플 탭 활성화 시키기
+	TabType2($('.tabType2 li').eq(1), '2');
+	
+	//document.ready 마지막에 그림문자를 조회하기 때문에 letterForm.letterType이 P로 고정되는데, 메인에서 왔을 경우 letterType을 다시 원복하기 위한 작업
+	if(tsMoreSampleYn == 'Y'){
+		document.letterForm.letterType.value = '${searchVO.mainLetterTypeFlag}';
+		document.letterForm.categoryCode.value = "${cateCodeVO.cateNo}";
+	}
+	if(tsMainImgFlag == 'Y'){
+		document.letterForm.letterType.value = '${searchVO.mainLetterTypeFlag}';
+		document.letterForm.categoryCode.value = "${cateCodeVO.cateNo}";
+	}
+	if(tsMainLetterFlag == 'Y'){
+		document.letterForm.letterType.value = '${searchVO.mainLetterTypeFlag}';
+		document.letterForm.categoryCode.value = "${cateCodeVO.cateNo}";
+	}
+	
+	// 맞춤제작 요청 JSPark => 2023.02.21 추가
+	//맞춤제작 등록 Popup 
+	//customPopup();	
+});
+
+// 문자 그룹정보 => 재전송용
+function getMjMsgGroupInfoByResend() {
+	$.ajax({
+		type: "POST",
+		url: "/web/mjon/msgdata/selectMjMsgGroupInfoByResendAjax.do",
+		data: {"msgResendAllGroupId" : msgResendAllGroupId},
+		dataType:'json',
+		async: false,
+		success: function (data) {
+			//alert(JSON.stringify(data));
+			if(data.isSuccess == true){
+				var msgData = data.resultMsgInfo;
+				var fileData = data.resultMsgAddPhotoInfo;
+				
+				// 발신번호
+				var reCallFrom = $.trim(removeDash($("#callFromList option:selected").val()));
+				if ($.trim(removeDash(msgData.callFrom)) != reCallFrom) {
+					alert("발신번호가 이전에 발송한 번호가 아닙니다.\n발신번호를 확인해주세요.")
+				}
+				
+				var smsTxt = msgData.smsTxt;
+				var subject = msgData.subject;
+				var fileId = "";
+				var filePath = "";
+				var len = fileData.length;
+				
+				// 기존 내용 지워주기
+				//$(".btnReset").trigger("click");
+				$('.delLi').each(function(){
+					$(this).remove();
+				});
+				
+				$('.preBoxF').each(function(){
+					$(this).remove();
+				});
+
+				$('#imgCnt').val(0);
+				
+				// 기존 imgFileId, imgFilePath 배열에 있는 내용 초기화 해주기
+				imgFilePath = [];
+				imgFileId = [];
+
+				// 문자제목
+				if (msgData.subject != null && msgData.subject != "") {
+					$('.msg_title').addClass('active');
+					$("input:radio[name='title_status']:radio[value='Y']").prop('checked', true); // 선택하기
+					$('.textbox').show();
+					$("#mmsSubject").val(subject);	
+				}
+				
+				// 문자내용
+				if (smsTxt.indexOf("(광고)") == 0) {
+					$('#send_adYnY').prop('checked', true);
+					
+					//광고 상하단 내용 넣어주기
+					advMsgInsert();				
+					
+					// 광고 기본정보 제거
+					smsTxt = $.trim(smsTxt.replace("(광고)", ""));
+					var smsTxtLastIdxCnt = smsTxt.lastIndexOf("무료거부");
+					if (smsTxtLastIdxCnt != -1) {
+						smsTxt = $.trim(smsTxt.substring(0, smsTxtLastIdxCnt));	
+					}					
+				}
+				$('#smsTxtArea').val(smsTxt);	
+				
+				// 첨부 이미지가 있는경우 이미지 처리해주기
+				if(len > 0) {
+					for(var i=0; i < len; i++) {
+						var num = i + 1;
+						var imgId = fileData[i].atchFileId;
+						var imgSn = fileData[i].fileSn;
+						var fileStreCours = fileData[i].fileStreCours;
+						var streFileNm = fileData[i].streFileNm;
+						var fileExtsn = fileData[i].fileExtsn;
+						
+						/* var imgSrc = fileStreCours + "/" + streFileNm + "." + fileExtsn; */
+						var imgSrc = '/cmm/fms/getImage2.do?atchFileId=' + imgId + '&fileSn=' + imgSn;
+						myMsgImageControl(imgSrc, "edit_n", "Template", imgId);
+					}
+					
+					fnByteString($('#smsTxtArea').val());
+				}
+				else {
+					fnByteString($('#smsTxtArea').val());
+				}
+				
+				// 문자전송 상단으로 이동
+				var sendOfT=$('.send_top').offset().top;
+				$('html,body').stop().animate({'scrollTop':sendOfT-60},250);		
+				
+			} else {
+				//alert("Message : " + msg);
+			}
+		},
+		error: function (e) { 
+			//alert("저장에 실패하였습니다."); 
+			//console.log("ERROR : ", e); 
+		}
+	});
+}
+
+// 문자 상세정보 => 재전송용
+function getMjMsgListByResend() {
+	$.ajax({
+		type: "POST",
+		url: "/web/mjon/msgdata/selectMjMsgListByResendAjax.do",
+		data: {"msgResendAllGroupId" : msgResendAllGroupId},
+		dataType:'json',
+		async: false,
+		success: function (data) {
+			if(data.isSuccess == true){
+				var listCnt = data.resultList.length;
+				
+				//수신자 처리 변수
+				var callToList = [];	//수신자 처리 리스트
+				var tableData = [];		//수신자 tabulator 처리 변수
+				
+				for(var i = 0; i < listCnt; i++){ // 수신자 리스트 Tabulator에 입력해 주기
+					callToList[i] = data.resultList[i].callTo;
+					tableData.push({phone: removeDash(callToList[i])});
+				}
+				
+				if(tableData.length > 0){
+					tableL.addData(dupliPhoneData(tableData)); // 받는사람 목록에 주소 정보 입력하기
+
+					totRows = tableL.getRows().length; 
+					updateTotCnt(totRows); //전체 데이터 갯수 구하기
+					
+					//결제 금액 구하기
+				    totalPriceSum(totRows);		
+				}				
+				
+			} else {
+				//alert("Message : " + msg);
+			}
+		},
+		error: function (e) { 
+			//alert("저장에 실패하였습니다."); 
+			//console.log("ERROR : ", e); 
+		}
+	});
+}
+
+// 문자발송 URL Move 
+function goMsgUrlMove() {
+	document.location.href = "/web/mjon/msgdata/selectMsgDataView.do";
+}
+
+function listMsgDataView(){
+	
+	var sendData = $(document.searchForm).serializeArray() ;
+	$(".contentArea").load("/web/mjon/msgdata/selectMsgDataSMLViewAjax.do", sendData ,function(response, status, xhr){
+		
+		//문자 재전송 및 주소록 전달 처리를 위해 사용
+		$("#msgForm").ready(function(){	//문자 내용 폼이 로드된 후 실행
+			
+			//헤더 문자검색 결과 처리
+			var headerMsgSearchFlag = '${headerMsgSearchVO.headerMsgSearchFlag}';
+			
+			if(headerMsgSearchFlag == 'Y'){
+				
+				var letterType = '${headerMsgSearchVO.msgType}';
+				var form = document.letterForm;
+				var searchKeyword = '${headerMsgSearchVO.searchKeyword}';
+				form.letterType.value = letterType;
+				form.searchKeyword.value = searchKeyword;
+				
+				if(letterType == 'P'){
+					
+					//최 하단 그림문자 탭 리스트 내용 불러오기
+					fnPhotoListAjax(1);
+					
+					//문자 샘플 탭 활성화 시키기
+					TabType2($('.tabType2 li').eq(1), '2');
+					//하단 리스트 탭으로 이동 시키기
+					var offset = $('.tabType2').offset();
+				    $('html').animate({scrollTop : offset.top}, 400);
+					
+				}else if(letterType == 'L' || letterType == 'S' ){
+					
+					//문자 샘플 탭 활성화 시키기
+					TabType2($('.tabType2 li').eq(0), '1');
+					
+					//최 하단  문자 샘플 탭 리스트 내용 불러오기
+					fnLetterListAjax(1);
+					if(letterType == 'S'){
+						
+						$('.tDep1_letType a').eq(0).addClass('on');
+						$('.tDep1_letType a:last-child').removeClass('on');
+						
+					}else{
+						
+						$('.tDep1_letType a').eq(0).removeClass('on');
+						$('.tDep1_letType a:last-child').addClass('on');
+						
+					}
+										
+					//하단 리스트 탭으로 이동 시키기
+					var offset = $('.tabType2').offset();
+				    $('html').animate({scrollTop : offset.top}, 400);
+					
+				}
+				
+				
+			}
+			
+			
+			//메인화면 더많은 샘플보기 버튼 선택시 처리
+			var moreSamFlag = '${moreSampleYn}';
+			
+			if(moreSamFlag == 'Y'){
+			
+				//문자 샘플 탭 활성화 시키기
+				var mainLetterTypeFlag = '${searchVO.mainLetterTypeFlag}';
+				var letterTab = '0';
+				var cateNo = "${cateCodeVO.cateNo}";
+				if(mainLetterTypeFlag == 'P'){
+					TabType2($('.tabType2 li').eq(1), '2');
+				}else{
+					TabType2($('.tabType2 li').eq(letterTab), '1');
+				}
+				//장문 일 시 tDep1_letType 탭 세팅
+				if(mainLetterTypeFlag == 'L'){
+					$('.tDep1_letType a').removeClass('on');
+					$('.tDep1_letType a').eq(1).addClass('on');
+				}
+					
+				//카테고리 탭 활성화 처리
+				if(mainLetterTypeFlag == 'P'){ //그림문자 샘플로 이동 왔을 시 
+					$('.tDep2_cateCode').find('.on').removeClass('on');
+					$('.tDep2_cateCode a').each(function(index){
+						if($(this).attr('value') == cateNo){
+							$(this).addClass('on');
+						}
+					})
+				}
+				if(mainLetterTypeFlag != 'P'){ //단문,장문 샘플로 왔을 시 
+					$('.tDep1_cateCode').find('.on').removeClass('on');	
+					$('.tDep1_cateCode a').each(function(index){
+						if($(this).attr('value') == cateNo){
+							$(this).addClass('on');
+						}
+					})
+				}
+
+				
+				//하단 리스트 탭으로 이동 시키기
+				var offset = $('.tabType2').offset();
+			    $('html').animate({scrollTop : offset.top}, 400);
+			    
+				
+			}
+			
+			
+			//메인화면 그림문자 이미지 선택시 처리
+			var mainImgFlag = '${mainImgVO.mainImgFlag}';
+			if(mainImgFlag == 'Y'){
+				//카테고리 처리
+				var cateNo = "${cateCodeVO.cateNo}";
+				$('.tDep2_cateCode').find('.on').removeClass('on');
+				$('.tDep2_cateCode a').each(function(index){
+					if($(this).attr('value') == cateNo){
+						$(this).addClass('on');
+					}
+				})				
+				
+				
+				var atchFileId = '${mainImgVO.atchFileId1}';
+				var fileSn = '${mainImgVO.fileSn}';
+				var strImgPath = '${mainImgVO.strImgPath}';
+				
+				fnCustomImgSendMsg(atchFileId, fileSn, strImgPath);
+				
+			}
+			
+			//메인화면 인기문자 메세지 선택시 처리
+			var mainLetterFlag = '${mainLetterVO.mainLetterFlag}';
+			if(mainLetterFlag == 'Y'){
+				var letterTab = '0';
+				//문자샘플 활성화 처리
+				TabType2($('.tabType2 li').eq(0), '1');
+				//단문,장문 탭 활성화 처리
+				var mainLetterTypeFlag = '${searchVO.mainLetterTypeFlag}';
+				if(mainLetterTypeFlag == 'L'){
+					$('.tDep1_letType a').removeClass('on');
+					$('.tDep1_letType a').eq(1).addClass('on');
+				}
+				//카테고리 활성화 처리
+				var cateNo = "${cateCodeVO.cateNo}";
+				$('.tDep1_cateCode').find('.on').removeClass('on');	
+				$('.tDep1_cateCode a').each(function(index){
+					if($(this).attr('value') == cateNo){
+						$(this).addClass('on');
+					}
+				})
+				var smsTxt = '${mainLetterVO.smsTxt}';
+				if(smsTxt != null){
+					
+					smsTxt = smsTxt.replaceAll("<br/>", "\n");	//줄발꿈문자 변환하기
+					$("#smsTxtArea").val(smsTxt);
+					fnByteString(smsTxt);
+					
+				}
+				
+			}
+			
+			//맞춤제작 내보관함 이미지 선택시 처리
+			var customImgFlag = '${customImgVO.customImgFlag}';
+			if(customImgFlag == 'Y'){
+				
+				var atchFileId = '${customImgVO.atchFileId1}';
+				var fileSn = '${customImgVO.fileSn}';
+				var strImgPath = '${customImgVO.strImgPath}';
+				
+				fnCustomImgSendMsg(atchFileId, fileSn, strImgPath);
+				
+			}
+			
+			//문자 재전송 처리
+			var msgResendFlag = '${reSendMsgVO.msgResendFlag}';
+			var msgSeqList = [];
+			msgSeqList = '${reSendMsgVO.msgSeqList}';
+			if(msgSeqList.length > 0){
+					
+				fnMsgResend(msgResendFlag, msgSeqList);
+				
+			}
+			
+			//주소록에서 주소를 전송한 경우 처리
+			var moveAddrFlag = '${addrVO.moveAddrFlag}';
+			var addrIdList = [];
+			addrIdList = '${addrVO.addrIdList}';
+			if(addrIdList.length > 0) {
+				fnAddrSet(moveAddrFlag, addrIdList);
+			}
+			
+			// 문자 재전송 New
+			if (msgResendAllFlag == "Y") {
+				if (msgResendAllReplaceYn != "Y") {
+					// 문자 그룹정보 => 재전송용
+					getMjMsgGroupInfoByResend();
+				}
+
+				// 문자 상세정보 => 재전송용
+				getMjMsgListByResend();
+			}			
+			
+		});		
+		
+	}).slideDown();
+}
+
+function fnCustomImgSendMsg(atchFileId, fileSn, filePath){
+	
+	
+	var imgId = "";
+	var imgSrc = "";
+	
+	/* imgSrc = filePath.replace("/usr/local/tomcat_mjon/webapps/mjon",""); */
+	/* imgSrc = filePath; */
+	imgId = atchFileId;
+	
+	imgSrc = '/cmm/fms/getImage2.do?atchFileId=' + atchFileId + '&fileSn=' + fileSn;
+	
+	myMsgImageControl(imgSrc, "edit_n", "Template", imgId);
+	
+}
+
+function fnMsgResend(msgResendFlag, msgSeqList){
+	
+	if(msgResendFlag == 'Y'){ // 문자재전송에서 넘어오는 경우 
+		
+		var form = document.msgResendForm;
+		form.msgSeqList.value = msgSeqList;
+		
+		var data = new FormData(form);
+		url = "/web/mjon/msgdata/selectReSendMsgDataListAjax.do";
+		
+		$.ajax({
+	        type: "POST",
+	        url: url,
+	        data: data,
+	        dataType:'json',
+	        async: false,
+	        processData: false,
+	        contentType: false,
+	        cache: false,
+	        success: function (returnData, status) {
+				if(status == 'success'){ // status 확인 필요한가. 석세스 안뜨면 에러 가지 않나
+					if("fail"==returnData.result){
+						
+						alert(returnData.message);
+						return false;
+						
+					}else if("loginFail"==returnData.result){
+						
+						alert(returnData.message);
+						return false;
+						
+					}else if(returnData.resultListCnt == '0'){
+						
+						alert("재전송 문자내용이 없습니다.");
+						return false;
+						
+					}else{
+						
+						var data = returnData;
+						var listCnt = returnData.resultListCnt;
+						var photoInfo = returnData.resultMsgPhotoInfo;
+						//수신자 처리 변수
+						var callToList = [];	//수신자 처리 리스트
+						var tableData = [];		//수신자 tabulator 처리 변수
+						
+						//var subject = data.resultList[0].subject;	//제목
+						//var smsTxt = data.resultList[0].smsTxt;		//문자내용
+						//var fileCnt = data.resultList[0].fileCnt;		//그림문자 이미지 갯수
+						//var filePath1 = data.resultList[0].fileType1;	//이미지1 파일 경로
+						//var filePath2 = data.resultList[0].fileType2;	//이미지2 파일 경로
+						//var filePath3 = data.resultList[0].fileType3;	//이미지3 파일 경로
+						//var atchFileId1 = photoInfo.atchFileId1;		//이미지1 파일 번호
+						//var atchFileId2 = photoInfo.atchFileId2;		//이미지2 파일 번호
+						//var atchFileId3 = photoInfo.atchFileId3;		//이미지3 파일 번호
+						
+						
+						for(var i = 0; i < listCnt; i++){ // 수신자 리스트 Tabulator에 입력해 주기
+							
+							callToList[i] = data.resultList[i].callTo;
+							tableData.push({phone: removeDash(callToList[i])});
+							
+						}
+						
+						if(tableData.length > 0){
+							
+							tableL.addData(dupliPhoneData(tableData)); // 받는사람 목록에 주소 정보 입력하기
+							
+							//totRows = tableL.getRows().length; 
+							//updateTotCnt(totRows); //전체 데이터 갯수 구하기
+							
+							//결제 금액 구하기
+						    //totalPriceSum(totRows); 
+							
+						}
+						
+						return false;
+						
+					}
+				
+				} else if(status== 'fail'){
+					alert(returnData.message);
+				}
+			},
+	        error: function (e) { alert("문자 재전송 번호 등록에 실패하였습니다."); console.log("ERROR : ", e); }
+	    });
+		
+	}
+	
+}
+
+
+function fnAddrSet(moveAddrFlag, addrIdList){
+	
+	if(moveAddrFlag == 'Y'){ // 주소록에서 넘어오는 경우 
+		
+		var form = document.moveAddrForm;
+		form.addrIdList.value = addrIdList;
+		
+		var data = new FormData(form);
+		url = "/web/mjon/addr/selectAddrDataListAjax.do";
+		
+		$.ajax({
+	        type: "POST",
+	        url: url,
+	        data: data,
+	        dataType:'json',
+	        async: true,
+	        processData: false,
+	        contentType: false,
+	        cache: false,
+	        success: function (returnData, status) {
+				if(status == 'success'){ // status 확인 필요한가. 석세스 안뜨면 에러 가지 않나
+					if("fail"==returnData.result){
+						
+						alert(returnData.message);
+						return false;
+						
+					}else if("loginFail"==returnData.result){
+						
+						alert(returnData.message);
+						return false;
+						
+					}else if(returnData.resultListCnt == '0'){
+						
+						alert("전달된 주소록이 없습니다.");
+						return false;
+						
+					}else{
+						
+						var listCnt = returnData.resultListCnt;
+						
+						//수신자 처리 변수
+						var tableData = [];		//수신자 tabulator 처리 변수
+						
+						for(var i = 0; i < listCnt; i++){ // 수신자 리스트 Tabulator에 입력해 주기
+							
+							tableData.push({
+								name: returnData.resultList[i].addrNm
+								,phone: removeDash(returnData.resultList[i].addrPhoneNo)
+								,rep1: returnData.resultList[i].addrInfo1
+								,rep2: returnData.resultList[i].addrInfo2
+								,rep3: returnData.resultList[i].addrInfo3
+								,rep4: returnData.resultList[i].addrInfo4
+								});
+							
+						}
+						
+						tableL.addData(dupliPhoneData(tableData)); // 받는사람 목록에 주소 정보 입력하기
+						
+						totRows = tableL.getRows().length; 
+						updateTotCnt(totRows); //전체 데이터 갯수 구하기
+						
+						//결제 금액 구하기
+					    totalPriceSum(totRows);
+						
+						return false;
+						
+					}
+				
+				} else if(status== 'fail'){
+					alert(returnData.message);
+				}
+			},
+	        error: function (e) { 
+	        	alert("주소록 가져오기에 실패하였습니다."); 
+	        	console.log("ERROR : ", e); 
+	        },
+			beforeSend : function(xmlHttpRequest) {
+	        	//로딩창 show
+	        	$('.loading_layer').addClass('active');				
+			},	        	        
+	        complete : function(xhr, textStatus) {
+	        	//로딩창 hide
+	        	$('.loading_layer').removeClass('active');
+			}	      
+	    });
+		
+	}
+	
+}
+
+function fnLetterListAjax(index){
+	var form = document.letterForm;
+	var letterType = form.letterType.value;
+	
+	if($('.tDep1_letType a').eq(0).hasClass('on')) {
+		form.letterType.value='S';
+	} else if ($('.tDep1_letType a').eq(1).hasClass('on')) {
+		form.letterType.value='L';
+	}
+	
+	//검색자 입력 검색 시 카테고리, 해쉬태그 전체  초기화
+	if(form.searchKeyword.value != '') {
+		form.categoryCode.value = "";
+		form.hashTag.value = "";
+		
+		$('.tDep1_cateCode').find('.on').removeClass('on');
+		$('.tDep1_cateCode').find('.cateAll').addClass('on');
+		$('.tDep1_hashTag').find('.on').removeClass('on');
+		$('.tDep1_hashTag').find('.hashAll').addClass('on');
+	}else{
+		//해시태그가 선택되어 있을 경우 해당 태그 검색어를 전달해줌
+		var strTagTxt = $('.tDep1_hashTag').find('.on').text().replace("#","");
+		if(strTagTxt == "전체"){
+			form.hashTag.value = "";
+		}else{
+			form.hashTag.value = strTagTxt;
+		}
+	}
+	
+	form.pageIndex.value = index;
+	form.letterType.value = letterType;
+	var sendData = $(document.letterForm).serializeArray();
+	//하위 카테고리
+	$("#tDep1_depThrCateCode").load("/web/mjon/msgdata/selectCateConfThrDptListAjax.do", sendData ,function(response, status, xhr){
+		if(document.letterForm.searchKeyword.value == ''){
+			$('.bottom_content .area_total_count').hide();
+		}
+		if(form.hashTag.value != ''){
+			if($('#letterLoad .nodata_box').length > 0){
+				$('#letterLoad .nodata_box').hide().next('.nodata_box.hashTag').show();
+			}
+		}
+		
+	});
+	//문자샘플
+	$("#letterLoad").load("/web/mjon/msgdata/selectLetterDataListAjax.do", sendData ,function(response, status, xhr){
+		if(document.letterForm.searchKeyword.value == ''){
+			$('.bottom_content .area_total_count').hide();
+		}
+		if(form.hashTag.value != ''){
+			if($('#letterLoad .nodata_box').length > 0){
+				$('#letterLoad .nodata_box').hide().next('.nodata_box.hashTag').show();
+			}
+		}
+		
+	});
+	
+}
+
+function fnPhotoListAjax(index){
+	var form = document.letterForm;
+	//검색자 입력 검색 시 카테고리, 해쉬태그 전체  초기화
+	if(form.searchKeyword.value != '') {
+		form.categoryCode.value = "";
+		form.hashTag.value = "";
+		
+		$('.tDep2_cateCode').find('.on').removeClass('on');
+		$('.tDep2_cateCode').find('.cateAll').addClass('on');
+		$('.tDep2_hashTag').find('.on').removeClass('on');
+		$('.tDep2_hashTag').find('.hashAll').addClass('on');
+	}else{
+		//해시태그가 선택되어 있을 경우 해당 태그 검색어를 전달해줌
+		var strTagTxt = $('.tDep2_hashTag').find('.on').text().replace("#","");
+		if(strTagTxt == "전체"){
+			form.hashTag.value = "";
+		}else{
+			form.hashTag.value = strTagTxt;
+		}
+	}
+	form.letterType.value = 'P';
+	form.pageIndex.value = index;
+	var sendData = $(document.letterForm).serializeArray();
+	//하위 카테고리
+	$("#tDep2_depThrCateCode").load("/web/mjon/msgdata/selectCateConfThrDptListAjax.do", sendData ,function(response, status, xhr){
+		if(document.letterForm.searchKeyword.value == ''){
+			$('.bottom_content .area_total_count').hide();
+		}
+		if(form.hashTag.value != ''){
+			if($('#letterLoad .nodata_box').length > 0){
+				$('#letterLoad .nodata_box').hide().next('.nodata_box.hashTag').show();
+			}
+		}
+		
+	});	
+	
+	$("#photoLoad").load("/web/mjon/msgdata/selectPhotoDataListAjax.do", sendData ,function(response, status, xhr){
+		photoLayerView();
+		if(document.letterForm.searchKeyword.value == ''){
+			$('.bottom_content .area_total_count').hide();
+		}
+		if(form.hashTag.value != ''){
+			if($('#photoLoad .nodata_box').length > 0){
+				$('#photoLoad .nodata_box').hide().next('.nodata_box.hashTag').show();
+			}
+		}
+	});
+	
+}
+
+function fnMyMsgListAjax(index){
+	
+	if(loginVO == "" || loginVO == null){
+		//alert("로그인 후 사용이 가능합니다.");
+		location.href="/web/user/login/login.do";
+		return false;
+	}else{
+		document.myMsgForm.pageIndex.value = index;
+		var sendData = $(document.myMsgForm).serializeArray();
+		$("#myMsgLoad").load("/web/mjon/msgdata/selectMyMsgDataListAjax.do", sendData ,function(response, status, xhr){
+			/* $(".msg_cont").mCustomScrollbar({
+				axis: 'y',
+				scrollbarPosition: "inside",
+				theme: "dark",
+				autoHideScrollbar: false
+			}); */
+			
+		});
+	}
+}
+
+function fnMyMsgSearchListAjax(index){
+	
+	document.myMsgForm.pageIndex.value = index;
+	var sendData = $(document.myMsgForm).serializeArray();
+	$("#myMsgLoad").load("/web/mjon/msgdata/selectMyMsgDataListAjax.do", sendData ,function(response, status, xhr){
+		
+		/* $(".msg_cont").mCustomScrollbar({
+			axis: 'y',
+			scrollbarPosition: "inside",
+			theme: "dark",
+			autoHideScrollbar: false
+		}); */
+		
+	});
+	
+}
+
+function fnMsgExcelDataView(){
+	
+	/* var sendData = $(document.searchForm).serializeArray() ;
+	
+	//엑셀 문자 탭 활성화 시키기
+	TabType1($('.tabType1 li').eq(1), '2');
+	
+	$(".contentExcelArea").load("/web/mjon/msgdata/selectMsgExcelDataViewAjax.do", sendData ,function(response, status, xhr){
+	}); */
+	
+	location.href="/web/mjon/msgdata/excel/selectMsgExcelDataView.do";
+	
+}
+
+function fn_saveMyMsg(){ // 내 문자 보관함 저장
+	
+	var form = document.msgForm;
+	var myImgFileId = [];			//신규 이미지 추가 파일 Id 저장 변수
+	var adverYn = $("input[name='send_adYn']:checked").val(); //광고 체크여부
+	
+	/*
+		이미지 에디터를 사용하여 추가한 경우 이미지 업로드 처리 - 단 에디터에서 템플릿을 선택한 경우는 업로드안함
+		신규 이미지 추가를 한 경우만 이미지 파일 업로드 처리함
+	*/
+	$('.thumb_wrap').find('.thumb_img').each(function(idx, el) {
+		
+		if($("#delLi"+idx).hasClass("Template")){ //이미지 에디터 템플릿 이미지 선택 여부 확인
+			templateYn.push("Y"); 
+		} else {
+			templateYn.push("N"); 
+		}
+		
+		if($(el).hasClass("edit_y")) { //에디터를 사용했고
+			//이미지 변환
+			const imgBase64 = $(el).attr("src");
+			const decodImg = atob(imgBase64.split(',')[1]);  // base64~ 부분을 제외하고 데이터 디코딩
+			
+	
+			let array = [];
+			for (let i = 0; i < decodImg.length; i++) {
+			  array.push(decodImg.charCodeAt(i));
+			}
+
+			const file = new Blob([new Uint8Array(array)], {type: 'image/jpeg'});
+			const fileName = 'canvas_img_' + new Date().getMilliseconds() + '.jpg';
+			let formData = new FormData();
+			formData.append('file', file, fileName);
+			
+			$.ajax({
+				type: 'post',
+				url: '/web/mjon/msgdata/insertEditImageAjax.do',
+				cache: false,
+				data: formData,
+				dataType:'json',
+				processData: false,
+				contentType: false,
+				async: false,
+				success: function (returnData, status) {
+					if(status == 'success'){
+						// imgFilePath 에 배열로 담아주기(이미지 순서대로)
+						//console.log(imgFilePath);
+						//imgFilePath.push(returnData.filefullPath);
+						myImgFileId.push(returnData.atchFileId);
+						
+					} else if(status== 'fail'){
+						alert(returnData.message);
+					}
+				},
+				error: function (e) { alert("이미지 업로드에 실패하였습니다."); console.log("ERROR : ", e); }
+			});
+			
+		} else {
+			//에디터 안거친 템플릿 이미지면 바로 src 때림
+			imgFilePath.push($(el).attr("src"));
+		}	
+	});
+	
+	if(myImgFileId.length > 0 && imgFileId.length > 0){ //기존 샘플 이미지와 이미지 에디터 둘다 사용한 경우
+		
+		var tempImgId = [];
+		
+		tempImgId.push(myImgFileId);
+		tempImgId.push(imgFileId);
+		form.imgFileId.value = tempImgId; 
+		
+	}else if(myImgFileId.length > 0){	//이미지 에디터에서 신규 등록한 이미지 
+		
+		form.imgFileId.value = myImgFileId; 
+		
+	}else{	//샘플 이미지 선택만 했을경우(이미지 에디터 사용 안했을때)
+		
+		form.imgFileId.value = imgFileId; 
+	}
+	
+	//광고 문자 내용 합쳐주기
+	if(adverYn == 'Y'){
+		
+		var adTxt = $('.ad_txt').text();
+		var denyTxt = $('.deny_txt').text();
+		var smsTxt = form.smsTxtArea.value;
+		
+		//var adverTxt = adTxt + '\n\n' + smsTxt + '\n\n' + denyTxt;
+		var adverTxt = smsTxt;
+		form.smsTxt.value = adverTxt;
+		
+	}else{
+		
+		var smsTxt = form.smsTxtArea.value;
+		form.smsTxt.value = smsTxt;
+		
+	}
+	
+	//문자 종류 설정(S:단문 , L:장문 , P:그림)
+	var photoSts = $('.delLi').length;
+	var conLeng = conByteLeng(form.smsTxt.value); // 내용 문자 입력 바이트 수 계산하기
+	
+	if(photoSts > 0){
+		
+		form.msgType.value = 'P';
+		
+	}else if(conLeng > 90){
+	
+		form.msgType.value = 'L';
+		
+	}else{
+		
+		form.msgType.value = 'S';
+		
+	}
+	
+	if(photoSts == '0' && conLeng == '0'){
+		
+		alert("문자내용을 입력해 주세요.");
+		return false;
+		
+	}
+	
+	var data = new FormData(form);
+	url = "/web/mjon/msgdata/insertMyMsgDataAjax.do";
+	
+	$.ajax({
+        type: "POST",
+        url: url,
+        data: data,
+        dataType:'json',
+        async: false,
+        processData: false,
+        contentType: false,
+        cache: false,
+        success: function (returnData, status) {
+			if(status == 'success'){ // status 확인 필요한가. 석세스 안뜨면 에러 가지 않나
+				if("fail"==returnData.result){
+					
+					alert(returnData.message);
+					return false;
+					
+				}else{
+					
+					alert("내 문자함에 저장되었습니다.");
+					
+					//내 문자함 탭 활성화 시키기
+					TabType2($('.tabType2 li').eq(3), '4');
+					var offset = $('.tabType2').offset();
+				    $('html, body').animate({scrollTop : offset.top-140}, 400);
+					
+					//최 하단 내문자함 탭 리스트 내용 불러오기
+					var sendData = $(document.myMsgForm).serializeArray();
+					$("#myMsgLoad").load("/web/mjon/msgdata/selectMyMsgDataListAjax.do", sendData ,function(response, status, xhr){
+					});
+					
+				}
+			
+			} else if(status== 'fail'){
+				alert(returnData.message);
+			}
+		},
+        error: function (e) { alert("문자 저장에 실패하였습니다."); console.log("ERROR : ", e); }
+    });
+	
+}
+
+//내 문자함으로 탭이동
+function fnGoMyMsg(){
+	
+	//내 문자함 탭 활성화 시키기
+	TabType2($('.tabType2 li').eq(3), '4');
+	
+	var offset = $('.tabType2').offset();
+    $('html, body').animate({scrollTop : offset.top-140}, 400);
+	
+}
+
+
+// MJ_MSG_GROUP_DATA 누락데이터 체크
+function getMsgGroupDataErrorCheck() {
+	var isError = false;
+	
+	$.ajax({
+	    type: "POST",
+	    url: "/web/mjon/msgdata/selectMsgGroupNotExistInfoAjax.do",
+	    data: {},
+	    dataType:'json',
+	    async: false,
+	    success: function (data) {
+			if (data.isSuccess) { 
+				if (data.isError == true) {
+					isError = true;
+				}
+			} 
+		},
+	    error: function (e) {
+	    	
+	    }
+	});	
+
+	return isError;
+}
+
+function checkConf() {
+	var confCheck = false;
+	
+	$.ajax({
+		type: "POST",
+		url: "/web/mjon/conf/selectMjonMsgUseConfAjax.do",
+		data: {},
+		dataType:'json',
+		async: false,
+		success: function (returnData, status) {
+			if(returnData.result == "fail") {
+				console.log(returnData.message);
+			}else if(returnData.result == "success"){
+				confCheck = true;
+			}
+		}
+		,error: function (e) {console.log("ERROR : ", e); }
+	});	
+	
+	return confCheck;
+}
+function blineSendCheck(blineCode) {
+	
+	var confCheck = false;
+	
+	$.ajax({
+		type: "POST",
+		url: "/web/mjon/conf/selectBlineSendCheckAjax.do",
+		data: {"agentCode":blineCode},
+		dataType:'json',
+		async: false,
+		success: function (returnData, status) {
+			if(returnData.result == "fail") {
+				console.log(returnData.message);
+			}else if(returnData.result == "success"){
+				confCheck = true;
+			}
+		}
+		,error: function (e) {console.log("ERROR : ", e); }
+	});	
+	
+	return confCheck;
+}
+
+//문자발송 처리 함수
+function fn_sendMsgData(){
+	
+	if(!checkConf()){	//문자온 conf-check
+		alert("현재 문자 발송하기 기능 점검 중입니다.\n\n1분 후 다시 시도해주세요.");
+		return false;
+	}
+	
+	var testString = document.msgForm.smsTxtArea.value;
+
+	var form = document.msgForm;
+	
+	//회원 보유 잔액 비교
+	var totPriceOnly = stringReplaceAll(form.totPrice.value, ",", "");
+	var userMoneyOnly = stringReplaceAll(form.myPrice.value, ",", "");
+	if(parseFloat(userMoneyOnly) < parseFloat(totPriceOnly)){
+		alert("문자 발송에 필요한 회원님의 보유 잔액이 부족 합니다.");
+		return false;
+	}
+	
+	var loginVO = '${LoginVO}';
+	var adverYn = $("input[name='send_adYn']:checked").val();
+	var spamStatus = false;
+	var exceptSpamYn = $("#exceptSpamYn").val(); //금지어 필터링 예외 여부 - N 일 경우만 스팸 검사를 진행
+	
+	//이벤트 진행중 회원의 경우 이벤트 잔여금액 비교 처리 필요.
+	/* var eventStatus = form.eventStatus.value;
+	var eventRemainCash = parseFloat(form.eventRemainCash.value);
+	
+	if(eventStatus == 'Y'){
+		
+		if(parseFloat(eventRemainCash) < parseFloat(totPriceOnly)){
+			
+			alert("고객님의 이벤트 캐시 잔액은 " + eventRemainCash + "원으로 입력하신 수량의 문자를 전부 발송할 수 없습니다. 잔액 이하로 발송건수를 재설정하시기 바랍니다.");
+			return false;
+		}
+		
+	} */
+	
+	if(loginVO == "" || loginVO == null){
+		
+		alert("문자발송 서비스는 로그인 후 이용 가능합니다.");
+		return false;
+		
+	}
+
+	
+	var blineCodeYn = $("#blineCode").val();
+	if(blineCodeYn != 'N'){
+		if(!blineSendCheck(blineCodeYn)){	//문자온 conf-check
+			alert("현재 문자 발송하기 기능 점검 중입니다.\n\n잠시 후 다시 시도해주세요.");
+			return false;
+		}
+	}
+	
+	//MJ_MSG_GROUP_DATA 누락데이터 체크
+	//if (getMsgGroupDataErrorCheck() == false) {
+	//	alert("고객님께서 발송한 최근문자가 발송결과에 표시되지않아, 문자발송이 임시로 차단되었습니다.\n문자온 고객센터에 문의해주세요.");
+	//	return false;	 	
+	//}
+	
+	if(form.callFromList.value == ""){
+		
+		alert("발신번호를 입력해 주세요.");
+		return false;
+		
+	}
+	
+	var titleStatus = form.title_status.value;
+	if(titleStatus == 'N'){//장문 제목 사용안함으로 선택시 제목에 있는 데이터 지워주기
+		
+		form.mmsSubject.value = "";
+		
+	}else{//장문 제목에 치환문자 포함된 경우 입력 못하도록 처리.
+		
+		var mmsSubject = form.mmsSubject.value;
+		if(getSpacialStringChk(mmsSubject)){
+			alert("문자 제목에는 치환문자(엑셀 내 *이름*, *1*, *2*, *3*, *4* 등)를 사용하실 수 없습니다.");
+			return false;
+		}
+	
+	}
+	
+	//문자내용 첫글자에 특수기호 포함 여부 체크
+	var strCont = form.smsTxtArea.value;
+	var rtnStr = strChinJpnCheck(strCont);
+	
+	//문자제목에 이모지가 있는지 체크
+	var titleStatusYn = $("input[name='title_status']:checked").val();
+	if(titleStatusYn == 'Y') {
+		if(!emojiCheck(form.mmsSubject.value)) return false;
+	}
+	
+	//문자내용에 이모지가 있는지 체크 
+	if(!emojiCheck(strCont)) return false;
+	
+	if(rtnStr.length > 0){
+		
+		alert("입력하신 문구 중 \" " + rtnStr + " \" 는 일부 휴대폰에서 표기되지 않을 수 있습니다.");
+		
+	}
+	
+	/* var strCont = form.smsTxtArea.value;
+	var repStr = strFirstCharCheck(strCont);
+	
+	if(repStr.length > 0){
+		
+		alert("문자 내용 첫 글자는 특수기호가 들어갈 수 없습니다.");
+		$('#smsTxtArea').val(strCont.replace(repStr, ""));
+		fnByteString(strCont.replace(repStr, ""));
+		return false;
+		
+	} */
+	
+	if(imgFilePath.length == 0){ // 그림문자일 경우 내용이 없어도 됨 , 장문 문자일 경우만 문자내용 체크함
+		
+		if(form.smsTxtArea.value == ""){
+			
+			alert("문자 내용을 입력해 주세요.");
+			return false;
+			
+		}
+		
+	}
+	
+	
+	//광고 문자 내용 합쳐주기
+	if(adverYn == 'Y'){
+		
+		var adTxt = $('.ad_txt').text();
+		var denyTxt = $('.deny_txt').text();
+		var smsTxt = form.smsTxtArea.value;
+		
+		var adverTxt = adTxt + smsTxt + '\n' + denyTxt;
+		form.smsTxt.value = adverTxt;
+		form.msgKind.value = "A"; //광고문자 종류 설정
+		
+	}else{
+		
+		var smsTxt = form.smsTxtArea.value;
+		form.smsTxt.value = smsTxt;
+		form.msgKind.value = "N"; //일반문자 종류 설정
+		
+	}
+	
+	//수신번호 리스트 체크하기
+	var numCnt = 0;
+	var nameList = [];		//치환문자 이름
+	var phoneNum = [];	//받는사람
+	var rep1List = [];		//치환문자1
+	var rep2List = [];		//치환문자2
+	var rep3List = [];		//치환문자3
+	var rep4List = [];		//치환문자4
+	
+	var selectedData = tableL.getRows();
+	
+	if(selectedData == "" || selectedData == null){
+		
+		alert("받는사람 주소를 한 건 이상 입력해주세요.");
+		return false;
+	
+	}else{ // 선택한 Row '-' 문자 삭제하기
+		
+		for(var i=0; i < selectedData.length; i++){
+			
+			//일괄변환 문자에 콤마(,)가 들어가있으면 배열로 넘길때 문제가 발생하여 특수문자(§)로 치환하여 넘겨주도록 한다.
+			var name = tableL.getRows()[i].getData().name;
+			var phone = removeDash(tableL.getRows()[i].getData().phone);
+			var rep1 = tableL.getRows()[i].getData().rep1;
+			var rep2 = tableL.getRows()[i].getData().rep2;
+			var rep3 = tableL.getRows()[i].getData().rep3;
+			var rep4 = tableL.getRows()[i].getData().rep4;
+			
+			if(phone == ""){
+				
+				alert("수신 목록에 핸드폰 번호가 없는 항목이 있습니다.");
+				return false;
+				
+			}else if(!checkHpNum(phone)){
+				
+				alert("수신 목록에 잘 못된 핸드폰 번호가 있습니다. 핸드폰 번호 : " + phone + " 입니다.");
+				return false;
+				
+			}else{
+				
+				if(typeof(name) != 'undefined' && name != null && name !=""){
+					if(!emojiCheck(name)){//이모지 체크 해주기
+						return false;
+					}
+					nameList[i] = name.replaceAll(",","§");
+				}
+
+				phoneNum[i] = phone;
+				
+				if(typeof(rep1) != 'undefined' && rep1 != null){
+					if(!emojiCheck(rep1)){//이모지 체크 해주기
+						return false;
+					}
+					rep1List[i] = rep1.replaceAll(",","§");
+				}
+				if(typeof(rep2) != 'undefined' && rep2 != null){
+					if(!emojiCheck(rep2)){//이모지 체크 해주기
+						return false;
+					}
+					rep2List[i] = rep2.replaceAll(",","§");
+				}
+				if(typeof(rep3) != 'undefined' && rep3 != null){
+					if(!emojiCheck(rep3)){//이모지 체크 해주기
+						return false;
+					}
+					rep3List[i] = rep3.replaceAll(",","§");
+				}
+				if(typeof(rep4) != 'undefined' && rep4 != null){
+					if(!emojiCheck(rep4)){//이모지 체크 해주기
+						return false;
+					}
+					rep4List[i] = rep4.replaceAll(",","§");
+				}
+				
+			}
+			
+		}
+	
+	}
+	
+	var reserYn = $("input[name=reserYn]:checked").val(); // 예약 발송 여부 확인
+	
+	if(reserYn == 'Y'){
+		
+		var date = $(".resDate").val();//form.msgResDate.value;
+		var hour = form.msgResHour.value;
+		var min = form.msgResMin.value;
+		
+		if(date == ""){
+			
+			alert("예약전송 날짜를 선택해 주세요.");
+			return false;
+			
+		}else{
+			
+			var now = new Date();
+			var reqDate = date + " " + hour + ":" + min + ":00";
+			var gapDate = getGapDayTime(date, hour, min);
+			
+			if(gapDate < 0){ // 음수이면 이전날짜, 크면 이후 날짜.
+				alert("예약 날짜는 현재 시간 이후의 날짜 및 시간을 선택해 주세요.");
+				return false;
+			}else{
+				form.reqDate.value = reqDate;	//예약일자 파라미터 저장
+			}
+		}
+
+	}else{
+		
+		form.reqDate.value = "";
+		
+	}
+	
+	var fileLinks = document.getElementsByName("fileLinks");
+	
+	var conLeng = conByteLeng($('#smsTxt').val()); // 내용 문자 입력 바이트 수 계산하기
+	
+	if(conLeng > 2000){
+		
+		alert("문자 내용은 2000byte를 넘을 수 없습니다.");
+		return false;
+		
+	}
+
+	
+	if(confirm("문자를 전송하시겠습니까?")){
+		imgFilePath = [];
+		$('.thumb_wrap').find('.thumb_img').each(function(idx, el) {
+			if($("#delLi"+idx).hasClass("Template")){
+				templateYn.push("Y");
+			} else {
+				templateYn.push("N");
+			}
+			
+			if($(el).hasClass("edit_y")) {
+				//이미지 변환
+				const imgBase64 = $(el).attr("src");
+				const decodImg = atob(imgBase64.split(',')[1]);  // base64~ 부분을 제외하고 데이터 디코딩
+				
+		
+				let array = [];
+				for (let i = 0; i < decodImg.length; i++) {
+				  array.push(decodImg.charCodeAt(i));
+				}
+
+				const file = new Blob([new Uint8Array(array)], {type: 'image/jpeg'});
+				const fileName = 'canvas_img_' + new Date().getMilliseconds() + '.jpg';
+				let formData = new FormData();
+				formData.append('file', file, fileName);
+
+				$.ajax({
+					type: 'post',
+					url: '/web/mjon/msgdata/insertEditImageAjax.do',
+					cache: false,
+					data: formData,
+					dataType:'json',
+					processData: false,
+					contentType: false,
+					async: false,
+					success: function (returnData, status) {
+						if(status == 'success'){
+							// imgFilePath 에 배열로 담아주기(이미지 순서대로)
+							//console.log(imgFilePath);
+							imgFilePath.push(returnData.filefullPath);
+							imgFileId.push(returnData.atchFileId);
+							
+						} else if(status== 'fail'){
+							alert(returnData.message);
+						}
+					},
+					error: function (e) { alert("이미지 업로드에 실패하였습니다."); console.log("ERROR : ", e); }
+				});
+
+			} else {
+
+				if(imgFilePath.length != imgFileId.length){
+					//에디터 안거친 템플릿 이미지면 바로 src 때림
+					imgFilePath.push($(el).attr("src"));
+				}
+				
+			}	
+		});
+		
+		form.imgFilePath.value = imgFilePath; // 저장한 이미지 경로 담아주기
+		form.callToList.value = phoneNum; //수신자번호 리스트 저장해주기
+		form.callFrom.value = removeDash(form.callFromList.value); // 발신번호 대쉬(-) 문자 없애주기
+		form.reserveYn.value = reserYn; // 즉시 / 예약 문자 선택 여부 
+		form.templateYn.value = templateYn;
+		form.imgFileId.value = imgFileId;
+		form.nameList.value = nameList;
+		form.rep1List.value = rep1List;
+		form.rep2List.value = rep2List;
+		form.rep3List.value = rep3List;
+		form.rep4List.value = rep4List;
+		
+		//총 결제금액 천단위 콤마 삭제 후 전송
+		var totPrice = form.totPrice.value;
+		totPrice = totPrice.replace(",","");
+		form.totPrice.value = totPrice;
+		
+		//문자내용이 입력된 경우 스팸 필터링 실행
+		if(!form.smsTxtArea.value == "" && exceptSpamYn == "N"){
+			
+			var spmData = new FormData(form);
+			url = "/web/mjon/msgdata/selectSpamTxtChkAjax.do";
+			
+			$.ajax({
+		        type: "POST",
+		        url: url,
+		        data: spmData,
+		        dataType:'json',
+		        async: false,
+		        processData: false,
+		        contentType: false,
+		        cache: false,
+		        success: function (returnData, status) {
+					if(status == 'success'){ // status 확인 필요한가. 석세스 안뜨면 에러 가지 않나
+						
+						if("fail" == returnData.result){
+							
+							alert(returnData.message);
+							return false;
+							
+						}else if("loginFail" == returnData.result){
+							
+							alert(returnData.message);
+							return false;
+								
+						}else if("spams" == returnData.result){
+							
+// 							var spmFilterTxt = returnData.spmFilterTxt;
+							spamStatus = true;
+							
+// 							form.spamKeyword.value = spmFilterTxt;
+							form.spamStatus.value='Y';
+						}else{
+							form.spamKeyword.value = '';
+							form.spamStatus.value='N';
+							
+						}
+						
+					} else if(status== 'fail'){
+						alert(returnData.message);
+						return false;
+					}
+				},
+		        error: function (e) { alert("문자 발송에 실패하였습니다."); console.log("ERROR : ", e); return false;}
+		    });
+			
+		}
+		
+		
+		//이벤트 진행중 회원의 경우 이벤트 잔여금액 비교 처리 필요.
+		//이벤트 캐시가 부족한 경우 이벤트 캐시로 발송 가능한 만큼만 이벤트 금액으로 발송 처리해줌.
+		//이 후 나머지 발송 건수는 이벤트 캐시가 아닌 일반 단가로 발송 처리를 진행 함.
+		var eventStatus = form.eventStatus.value;
+		
+		if(eventStatus == 'Y'){ //이벤트 진행 대상자이면 문자종류에 이벤트로 구분
+			
+			form.eventYn.value = "Y"; //이벤트문자 종류 설정
+			
+		}
+		
+		var eventRemainCash = parseFloat(form.eventRemainCash.value);
+		
+		if(eventStatus == 'Y'){
+			
+			if(parseFloat(eventRemainCash) < parseFloat(totPriceOnly)){
+				
+				if(confirm("고객님의 이벤트 캐시 잔액(" + eventRemainCash + "원) 부족으로 요청하신 문자("+numberWithCommas(phoneNum.length)+"건)를 모두 발송할 수 없습니다. 이벤트 캐시 초과 건에 대해서는 일반 단가를 적용하여 발송하시겠습니까?")){
+					
+					var smsTxtArea = $('#smsTxtArea').val();
+					var evnMsgType = $("#msgType").val();
+					var evnEachPrice = $("#eachPrice").val();	//form 에 저장된 이벤트 개별 단가 불러오기
+					var evnSendCnt = Math.floor(eventRemainCash / evnEachPrice);
+					var norEachPrice = 0;
+					var imgCnt = $("#imgCnt").val();	//그림 이미지 갯수
+					var txtReplYn = $("#txtReplYn").val();	//치환문자 포함 여부 
+					var evnPhoneNumCnt = Number($("#evnPhoneNumCnt").val());	//치환문자 체크하면서 단/장문 건수 카운팅하면서 이벤트 금액으로 발송가능한 수신자 갯수 정보
+					var myPrice = parseFloat($("#myPrice").val());	//회원보유 잔여 캐시 금액
+
+					//수신목록 저장 배열 변수 
+					var evnPhoneNum = [];	//이벤트 단가 받는사람
+					var norPhoneNum = [];	//일반 단가 받는 사람
+					
+					//치환문자 포함 문자 저장 배열 변수(이벤트 문자 저장)
+					var evnName = [];
+					var evnRep1 = [];
+					var evnRep2 = [];
+					var evnRep3 = [];
+					var evnRep4 = [];
+					
+					//치환문자 포함 문자 저장 배열 변수(일반 문자 저장)
+					var norName = [];
+					var norRep1 = [];
+					var norRep2 = [];
+					var norRep3 = [];
+					var norRep4 = [];
+					
+					
+					/**
+					Desc:	1. 그림, 치환, 일반 문자에 대해서 각각 이벤트 단가로 전송할 리스트 와 일반단가로 전송할 리스트를 분리 하는 로직
+							2. 그림 및 일반 문자는 단순 이벤트 금액으로 보낼수 있는 건수를 계산하여 리스트[0] 부터 발송 건수만큼 추출하여 evnPhoneNum 배열에 입력 후 이벤트 금액으로 발송 진행
+							3. 이벤트 발송이 완료되면, 이벤트 건수를 제외한 나머지 건수를 norPhoneNum 배열에 입력 후 일반 금액으로 발송 진행
+							4. 일반 발송시에 전송 단가(eachPrice), 전체금액(totPrice) 등 변수 정보 변경
+							=====
+							5. 그림문자가 아닌 치환문자인 경우 치환 처리를 진행하면서 단문, 장문을 구분하고 이때 이벤트 금액에서 단문, 장문 가격을 차감하여 보낼 수량을 카운팅 함.
+							6. 치환 체크가 완료되면 치환시 나온 카운트 갯수만큼 이벤트 배열과 일반 배열에 분리처리 후 전송함.
+							7. 이벤트 발송 처리후 일반 단가 문자 발송시 보유 캐시 부족시 팝업으로 현재까지 발송된 이벤트 건수와 발송하지 못하는 일반단가 건수 정보를 표시해줌. 문자 발송은 중단 된다.
+					Param Array : evnPhoneNum, norPhoneNum
+					function :  getNorEachPrice - 메세지 타입(msgType)에 따른 단문, 장문, 그림문자 개별 단가 금액 확인
+								sendMsgAjax 	- 문자 발송 요청 Ajax 처리
+					*/
+
+					//그림문자인 경우
+					if(imgCnt > 0){
+						
+						//이벤트 가격으로 전송 할 받는 사람 리스트 저장처리
+						for(var i=0; i< evnSendCnt; i++){
+							evnPhoneNum[i]= phoneNum[i];
+							
+							//그림문자에 치환문자가 포함된 경우
+							if(txtReplYn == 'Y'){
+								
+								evnPhoneNum[i] = phoneNum[i];
+								evnName[i] = nameList[i];
+								evnRep1[i] = rep1List[i];
+								evnRep2[i] = rep2List[i];
+								evnRep3[i] = rep3List[i];
+								evnRep4[i] = rep4List[i];
+								
+							}
+						}
+						
+						//일반 가격으로 전송 할 받는 사람 리스트 저장처리
+						for(var j=0; j < phoneNum.length - evnSendCnt; j++){
+							norPhoneNum[j]= phoneNum[j + evnSendCnt];
+							
+							//그림문자에 치환문자가 포함된 경우
+							if(txtReplYn == 'Y'){
+								
+								norPhoneNum[j]= phoneNum[j + evnSendCnt];
+								norName[j] = nameList[j + evnSendCnt];
+								norRep1[j] = rep1List[j + evnSendCnt];
+								norRep2[j] = rep2List[j + evnSendCnt];
+								norRep3[j] = rep3List[j + evnSendCnt];
+								norRep4[j] = rep4List[j + evnSendCnt];
+								
+							}
+							
+						};
+						
+						
+					}else if(txtReplYn == 'Y'){//치환 문자가 있는 경우 , 그림문자에 치환이 있는 경우 그림문자 가격으로 발송
+						
+						//이벤트 가격으로 전송 할 받는 사람 리스트 저장처리
+						for(var i=0; i< evnPhoneNumCnt; i++){
+							evnPhoneNum[i] = phoneNum[i];
+							evnName[i] = nameList[i];
+							evnRep1[i] = rep1List[i];
+							evnRep2[i] = rep2List[i];
+							evnRep3[i] = rep3List[i];
+							evnRep4[i] = rep4List[i];
+						}
+						
+						//일반 가격으로 전송 할 받는 사람 리스트 저장처리
+						for(var j=0; j < phoneNum.length - evnPhoneNumCnt; j++){
+							norPhoneNum[j]= phoneNum[j + evnPhoneNumCnt];
+							norName[j] = nameList[j + evnPhoneNumCnt];
+							norRep1[j] = rep1List[j + evnPhoneNumCnt];
+							norRep2[j] = rep2List[j + evnPhoneNumCnt];
+							norRep3[j] = rep3List[j + evnPhoneNumCnt];
+							norRep4[j] = rep4List[j + evnPhoneNumCnt];
+							
+						};
+						
+					}else{//치환문자 없는 경우 처리
+						
+						//이벤트 가격으로 전송 할 받는 사람 리스트 저장처리
+						for(var i=0; i< evnSendCnt; i++){
+							evnPhoneNum[i]= phoneNum[i];
+						}
+						
+						//일반 가격으로 전송 할 받는 사람 리스트 저장처리
+						for(var j=0; j < phoneNum.length - evnSendCnt; j++){
+							norPhoneNum[j]= phoneNum[j + evnSendCnt];
+						};
+					}
+						
+					var orgShortMsgCnt = $("#shortMsgCnt").val();	//단문 총 건수 백업
+					var orgLongMsgCnt = $("#longMsgCnt").val();		//장문 총 건수 백업
+					//이벤트 단가 문자 전송 처리 시작
+					if(evnPhoneNum.length > 0){
+						
+						form.callToList.value = evnPhoneNum; //수신자번호 리스트 저장해주기
+						form.totPrice.value = evnEachPrice * evnSendCnt;	//이벤트 단가 총 결제금액 셋팅해주기
+						form.eventStatus.value = 'Y';
+						form.eventYn.value = 'Y';
+						
+						
+						var evnTotPrice = parseFloat(form.totPrice.value); 
+						
+						if(myPrice < evnTotPrice){
+						
+							alert("문자 발송에 필요한 회원님의 보유 잔액이 부족 합니다.evn");
+							return false;
+							
+						}else{
+							
+							myPrice = myPrice - evnTotPrice;
+							
+						}
+						
+						//치환문자가 있는 경우 변수 정보 담아주기(그림문자 아닌경우)
+						if(txtReplYn == 'Y' &&  imgCnt < 1){
+							
+							var evnShortMsgCnt = $("#evnShortMsgCnt").val();
+							var evnLongMsgCnt = $("#evnLongMsgCnt").val();
+							
+							form.shortMsgCnt.value = evnShortMsgCnt;
+							form.longMsgCnt.value = evnLongMsgCnt;
+							form.nameList.value = evnName;
+							form.rep1List.value = evnRep1;
+							form.rep2List.value = evnRep2;
+							form.rep3List.value = evnRep3;
+							form.rep4List.value = evnRep4;
+							
+						}else if(txtReplYn == 'Y' &&  imgCnt > 0){//치환문자가 있는 경우 변수 정보 담아주기(그림문자인 경우)
+							
+							form.nameList.value = evnName;
+							form.rep1List.value = evnRep1;
+							form.rep2List.value = evnRep2;
+							form.rep3List.value = evnRep3;
+							form.rep4List.value = evnRep4;
+							
+						}
+						
+						//이벤트 발송 실행 해주기
+						var form = document.msgForm;
+						
+						var data = new FormData(form);
+						url = "/web/mjon/msgdata/sendMsgDataAjax.do";
+						
+						$.ajax({
+					        type: "POST",
+					        url: url,
+					        data: data,
+					        dataType:'json',
+					        async: true,
+					        processData: false,
+					        contentType: false,
+					        cache: false,
+					        success: function (returnData, status) {
+								if(status == 'success'){ // status 확인 필요한가. 석세스 안뜨면 에러 가지 않나
+									if("fail" == returnData.result){
+										
+										alert(returnData.message);
+										return false;
+										
+									}else if("loginFail" == returnData.result){
+										
+										alert(returnData.message);
+										return false;
+											
+									}else if("smsLengFail" == returnData.result){
+										
+										alert(returnData.message);
+										return false;
+											
+									}else if("imgSourceFail" == returnData.result){
+										
+										$('.pop_msg_fails').css({'display':'block','opacity':'1','left':'50%','top':'50%','transform':'translate(-50%,-50%)'});
+										$('.pop_msg_fails .msg_text').html(returnData.message);
+										$('.mask').addClass('on');
+										
+									}else if("spamKeyWordFail" == returnData.result){//스팸 및 스미싱 단어가 들어간 문자 발송시 회원 이용정지 처리
+										
+										$('.pop_msg_spam').css({'display':'block','opacity':'1','left':'50%','top':'50%','transform':'translate(-50%,-50%)'});
+										$('.pop_msg_spam .msg_text').html(returnData.message);
+										$('.mask').addClass('on');
+										
+									}else if("statusFail" == returnData.result){
+										
+										alert(returnData.message);
+										//문자발송 URL Move
+										goMsgUrlMove();
+										return false;
+										
+									}else{
+										
+										var smsCnt = returnData.resultSts;
+										var blockCnt = returnData.resultBlockSts;
+										
+										//이벤트 발송 처리가 완료 되면 나머지 일반 캐시로 발송할 문자 처리를 진행해 준다.
+										var norPhoneNumCnt = norPhoneNum.length; 
+										if(norPhoneNumCnt > 0){
+											
+											var norEachPrice = getNorEachPrice(evnMsgType); //일반 개별 단가 금액 셋팅해주기
+											
+											form.callToList.value = norPhoneNum;	//수신자번호 리스트 저장해주기
+											form.eachPrice.value =  norEachPrice;	//일반 개별 단가 금액 셋팅해주기
+											form.totPrice.value = norEachPrice * norPhoneNumCnt;	//일반 단가 총 결제 금액 셋팅해주기
+											form.sPrice.value = $("#norsPrice").val();
+											form.mPrice.value = $("#normPrice").val();
+											form.pPrice.value = $("#norpPrice").val();
+											form.p2Price.value = $("#norp2Price").val();
+											form.p3Price.value = $("#norp3Price").val();
+											form.eventStatus.value = 'N';
+											form.eventYn.value = 'N';
+											
+											var norTotPrice = parseFloat(form.totPrice.value); 
+											
+											if(myPrice < norTotPrice){//보유캐시 부족시 알림 레이어 팝업 보여주기, 발송된 이벤트 건수 및 미발송 일반 방송 건수 정보 표시해줌
+											
+												var failMsg = "이벤트 캐시 잔액으로 발송한 문자("+smsCnt+"건)의 발송이 완료되었으나 일반 문자 발송("+norPhoneNumCnt+"건)에 필요한 회원님의 보유 잔액이 부족 합니다.";
+												
+												$('.loading_layer').removeClass('active');
+
+												$('.pop_msg_fails').css({'display':'block','opacity':'1','left':'50%','top':'50%','transform':'translate(-50%,-50%)'});
+												$('.pop_msg_fails .msg_text').html(failMsg);
+												$('.mask').addClass('on');
+												
+												return false;
+												
+											}
+											
+											//치환문자가 있는 경우 변수 정보 담아주기(그림문자가 아닌경우)
+											if(txtReplYn == 'Y' &&  imgCnt < 1){
+												
+												//치환문자 단/장문 혼용된 경우 각 타입별 건수를 재 계산해준다.
+												//총 단/장문 각각 건수에서 이벤트로 발송한 건수를 빼준다.
+												var evnShortMsgCnt = $("#evnShortMsgCnt").val();
+												var evnLongMsgCnt = $("#evnLongMsgCnt").val();
+												
+												//일반 장문/단문 발송 건수 계산해주기 총 건수에서 이벤트로 발송해준 건수를 빼준다.
+												var shortMsgCnt = Number(orgShortMsgCnt) - Number(evnShortMsgCnt);
+												var longMsgCnt = Number(orgLongMsgCnt) - Number(evnLongMsgCnt);
+												
+												
+												//계산 값이 음수로 나오는 경우 0건으로 간주한다.
+												if(shortMsgCnt <= 0){
+													
+													shortMsgCnt = 0;
+													
+												}
+												
+												if(longMsgCnt <= 0){
+													
+													longMsgCnt = 0;
+													
+												}
+												
+												form.shortMsgCnt.value = shortMsgCnt;
+												form.longMsgCnt.value = longMsgCnt;
+												
+												form.nameList.value = norName;
+												form.rep1List.value = norRep1;
+												form.rep2List.value = norRep2;
+												form.rep3List.value = norRep3;
+												form.rep4List.value = norRep4;
+												
+											}else if(txtReplYn == 'Y' &&  imgCnt > 0){//치환문자가 있는 경우 변수 정보 담아주기(그림문자인 경우)
+												
+												form.nameList.value = norName;
+												form.rep1List.value = norRep1;
+												form.rep2List.value = norRep2;
+												form.rep3List.value = norRep3;
+												form.rep4List.value = norRep4;
+												
+											}
+											
+											sendMsgAjax(smsCnt, blockCnt);
+										}
+										
+									}
+									
+								} else if(status== 'fail'){
+									alert(returnData.message);
+								}
+							},
+							beforeSend : function(xmlHttpRequest) {
+					        	//로딩창 show
+					        	$('.loading_layer').addClass('active');				
+							},	        	        
+					        complete : function(xhr, textStatus) {
+					        	//로딩창 hide
+					        	//$('.loading_layer').removeClass('active');
+							},	      			
+					        error: function (e) { alert("문자 발송에 실패하였습니다."); console.log("ERROR : ", e); }
+					    });
+						
+					}else{
+						
+						//이벤트 건수로 발송 할 수 없는 경우 일반 캐시 단가로 발송처리하기
+						if(norPhoneNum.length > 0){
+							
+							form.callToList.value = norPhoneNum; //수신자번호 리스트 저장해주기
+							form.eachPrice.value = getNorEachPrice(evnMsgType); //일반 개별 단가 금액 셋팅해주기
+							form.sPrice.value = $("#norsPrice").val();
+							form.mPrice.value = $("#normPrice").val();
+							form.pPrice.value = $("#norpPrice").val();
+							form.p2Price.value = $("#norp2Price").val();
+							form.p3Price.value = $("#norp3Price").val();
+							form.eventStatus.value = 'N';
+							form.eventYn.value = 'N';
+							
+							sendMsgAjax(0,0);
+							
+						}else{
+							
+							alert("문자 전송 중 오류가 발생하였습니다.!!");
+							return false;
+							
+						}
+						
+					}
+					
+					return false;
+				}else{
+					
+					return false;
+					
+				}
+				
+			}else{
+				
+				//발송 Ajax 호출해주기
+				sendMsgAjax(0,0);
+				
+			}
+			
+		}else{
+			
+			//발송 Ajax 호출해주기
+			sendMsgAjax(0,0);
+			
+		}		
+		
+	}
+	
+}
+
+
+//이벤트가 아닌 일반 개별 단가 셋팅해주기
+function getNorEachPrice(evnMsgType){
+	
+	var norEachPrice = 0;
+	var evnImgCnt = $("#imgCnt").val();
+	
+	//일반 단가로 변경해주기
+	if(evnMsgType == '4'){
+		
+		norEachPrice = $("#norsPrice").val();
+		console.log("norEachPrice Short::: "+norEachPrice);
+		
+	}else if(evnMsgType == '6'){
+		
+		if(evnImgCnt == 0){//장문 가격
+			
+			norEachPrice = $("#normPrice").val();
+			console.log("norEachPrice Long ::: "+norEachPrice);
+			
+		}else if(evnImgCnt == 1){
+			
+			norEachPrice = $("#norpPrice").val();
+			console.log("norEachPrice p1 ::: "+norEachPrice);
+			
+		}else if(evnImgCnt == 2){
+			
+			norEachPrice = $("#norp2Price").val();
+			console.log("norEachPrice p2 ::: "+norEachPrice);
+			
+		}else if(evnImgCnt == 3){
+			
+			norEachPrice = $("#norp3Price").val();
+			console.log("norEachPrice p3 ::: "+norEachPrice);
+			
+		}
+		
+	}
+	
+	return norEachPrice;
+}
+
+
+function sendMsgAjax(paramSmsCnt, paramBlockCnt){
+	
+	var form = document.msgForm;
+	var reserYn = $("#reserveYn").val();
+	
+	var data = new FormData(form);
+	url = "/web/mjon/msgdata/sendMsgDataAjax.do";
+	
+	$.ajax({
+        type: "POST",
+        url: url,
+        data: data,
+        dataType:'json',
+        async: true,
+        processData: false,
+        contentType: false,
+        cache: false,
+        success: function (returnData, status) {
+			if(status == 'success'){ // status 확인 필요한가. 석세스 안뜨면 에러 가지 않나
+				if("fail" == returnData.result){
+					
+					alert(returnData.message);
+					return false;
+					
+				}else if("loginFail" == returnData.result){
+					
+					alert(returnData.message);
+					return false;
+						
+				}else if("smsLengFail" == returnData.result){
+					
+					alert(returnData.message);
+					return false;
+						
+				}else if("imgSourceFail" == returnData.result){
+					
+					$('.pop_msg_fails').css({'display':'block','opacity':'1','left':'50%','top':'50%','transform':'translate(-50%,-50%)'});
+					$('.pop_msg_fails .msg_text').html(returnData.message);
+					$('.mask').addClass('on');
+					
+				}else if("spamKeyWordFail" == returnData.result){//스팸 및 스미싱 단어가 들어간 문자 발송시 회원 이용정지 처리
+					
+					$('.pop_msg_spam').css({'display':'block','opacity':'1','left':'50%','top':'50%','transform':'translate(-50%,-50%)'});
+					$('.pop_msg_spam .msg_text').html(returnData.message);
+					$('.mask').addClass('on');
+					
+				}else if("statusFail" == returnData.result){
+					
+					alert(returnData.message);
+					//문자발송 URL Move
+					goMsgUrlMove();
+					return false;
+					
+				}else{
+					
+					var smsCnt = Number(returnData.resultSts);
+					var blockCnt = Number(returnData.resultBlockSts);
+					
+					smsCnt = Number(smsCnt) + Number(paramSmsCnt);
+					blockCnt = Number(blockCnt) + Number(paramBlockCnt);
+					
+					if((smsCnt + blockCnt) == 0){
+						
+						$('.pop_msg_spam').css({'display':'block','opacity':'1','left':'50%','top':'50%','transform':'translate(-50%,-50%)'});
+						$('.pop_msg_spam .msg_text').html("문자 발송(예약)에 실패하였습니다.<br/> 다시 시도해주세요. <br/>* 정상적으로 발송 시도하였으나 실패하신 경우 혹시 문자내용에 사용불가 이모지 <br/>또는 복사-붙여넣기로 인한 보이지 않는 특수문자가 포함되었는지 확인 후 다시 시도해주세요.");
+						$('.mask').addClass('on');
+						
+					}else{
+						
+						$('.pop_msg_success').css({'display':'block','opacity':'1','left':'50%','top':'50%','transform':'translate(-50%,-50%)'});
+						//예약발송 건의 경우 결과 팝업 문구 변경
+						if(reserYn == 'Y'){
+							$('.pop_msg_success .msg_text').html("예약 성공 : <strong>"+ smsCnt + "</strong>건,수신거부 : <span>" + blockCnt + "</span>건의<br>문자가 예약 되었습니다.");
+						}else{
+							$('.pop_msg_success .msg_text').html("발송 성공 : <strong>"+ smsCnt + "</strong>건,수신거부 : <span>" + blockCnt + "</span>건의<br>문자가 발송 되었습니다.");
+						}
+						
+						$('.mask').addClass('on');
+						
+					}
+					
+				}
+				
+			} else if(status== 'fail'){
+				alert(returnData.message);
+			}
+		},
+		beforeSend : function(xmlHttpRequest) {
+        	//로딩창 show
+        	$('.loading_layer').addClass('active');				
+		},	        	        
+        complete : function(xhr, textStatus) {
+        	//로딩창 hide
+        	$('.loading_layer').removeClass('active');
+		},	      			
+        error: function (e) { alert("문자 발송에 실패하였습니다."); console.log("ERROR : ", e); }
+    });
+	
+}
+
+function linkPage(pageNo){
+	fnLetterListAjax(pageNo);
+}
+
+
+function linkPhoPage(pageNo){
+	fnPhotoListAjax(pageNo);
+}
+
+function myMsgPage(pageNo){
+	fnMyMsgListAjax(pageNo);
+}
+
+function fnMyMsgCheckDelete(){
+	
+	var msgId = [];
+	if($("input:checkbox[name='myMsgDel']").is(":checked")==false){
+		alert("선택된 항목이 없습니다.");
+		return;
+	}
+	
+	$("input:checkbox[name='myMsgDel']:checked").each(function(index){
+		
+		msgId[index] = $(this).val();
+		
+	});
+	
+	if(msgId.length > 0){
+		
+		document.myMsgForm.msgIdList.value = msgId;
+		var sendData =  $(document.myMsgForm).serializeArray();
+		
+		$("#myMsgLoad").load("/web/mjon/msgdata/deleteMyMsgDataListAjax.do", sendData ,function(response, status, xhr){
+			
+			//문자 내용 스크롤 적용
+			/* $(".msg_cont").mCustomScrollbar({
+				axis: 'y',
+				scrollbarPosition: "inside",
+				theme: "dark",
+				autoHideScrollbar: false
+			}); */
+			
+		});
+		
+	}else{
+		
+		alert("삭제할 문자를 선택해 주세요.");
+		return false;
+		
+	}
+	
+}
+
+//문자 샘플 2줄, 4줄 보기 기능 
+function fnLPageUnit(){
+	
+	var form = document.letterForm;
+	var pageUnit = form.LPageUnit.value;
+	
+	form.pageUnit.value = pageUnit;
+	fnLetterListAjax(1);
+	
+}
+
+//그림문자 샘플 2줄, 4줄 보기 기능 
+function fnPhPageUnit(){
+	
+	var form = document.letterForm;
+	var pageUnit = form.PhPageUnit.value;
+	
+	form.pageUnit.value = pageUnit;
+	fnPhotoListAjax(1);
+	
+}
+
+//내문자함 2줄 4줄보기 기능
+function fnMsgPageUnit(){
+	
+	var form = document.myMsgForm;
+	var pageUnit = form.msgPageUnit.value;
+	
+	form.pageUnit.value = pageUnit;
+	fnMyMsgListAjax(1);
+	
+}
+
+function fnMyMsgSearchListOrd(){
+	
+	var form = document.myMsgForm;
+	var sortOrd = form.searchSortOrd.value;
+	
+	if(sortOrd == 'desc'){
+		
+		form.searchSortOrd.value = 'asc';
+		$('#sortCnd').text('등록순');
+		
+	}else{
+		
+		form.searchSortOrd.value = 'desc';
+		$('#sortCnd').text('최근순');
+		
+	}
+	
+	//내문자함 내용 검색하기
+	fnMyMsgSearchListAjax(1);
+	
+}
+
+function msgSuccessClose(obj){
+	$(obj).closest('.pop_msg_success').attr('style','');
+	//문자발송 URL Move
+	goMsgUrlMove();
+	$('html').scrollTop(0);
+}
+
+function msgFailsClose(obj){
+	$(obj).closest('.pop_msg_fails').attr('style','');
+}
+
+function msgSpamClose(obj){
+	$(obj).closest('.pop_msg_spam').attr('style','');
+	//location.href="/web/uat/uia/actionLogout.do";
+}
+
+function msgResultLink(){
+	var reserYn = $("input[name=reserYn]:checked").val(); // 예약 발송 여부 확인
+	if(reserYn == 'Y'){
+		
+		location.href="/web/mjon/reservmsg/selectReservMsgView.do";
+		
+	}else{
+		
+		location.href="/web/mjon/msgsent/selectMsgSentView.do";
+		
+	}
+	
+}
+
+//START
+//맞춤제작 요청 JSPark => 2023.02.21 추가
+//맞춤제작 등록 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();
+}
+
+$(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);
+}
+//END
+</script>
+
+	<div class="tooltip-wrap">
+		<!-- 문자발송 성공 레이어팝업 -->
+		<div class="popup-com pop_msg_success">
+			<div class="popup_heading">
+				<p>문자 전송 결과</p>
+				<button type="button" class="tooltip-close" onclick="msgSuccessClose(this);"><img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button>
+			</div>
+			<div class="layer_in">
+				<div class="msg_text">발송 성공 : <strong>1</strong> 건,수신거부 : <span>0</span>건의<br>문자가 발송 되었습니다.</div>
+			</div>
+			<div class="popup_btn">
+				<button type="button" onclick="msgResultLink(); return false;">문자 발송결과 바로가기</button>                      
+				<button type="button" class="tooltip-close" onclick="msgSuccessClose(this);">확인</button>                      
+			</div>
+		</div>
+	</div>
+	<div class="tooltip-wrap">
+		<!-- 문자발송 실패 레이어팝업 -->
+		<div class="popup-com pop_msg_fails">
+			<div class="popup_heading">
+				<p>문자 전송 결과</p>
+				<button type="button" class="tooltip-close" onclick="msgFailsClose(this);"><img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button>
+			</div>
+			<div class="layer_in">
+				<div class="msg_text">발송 성공 : <strong>1</strong> 건,수신거부 : <span>0</span>건의<br>문자가 발송 되었습니다.</div>
+			</div>
+			<div class="popup_btn">
+				<button type="button" class="tooltip-close" onclick="msgFailsClose(this);">확인</button>                      
+			</div>
+		</div>
+	</div>
+	<div class="tooltip-wrap">
+		<!-- 문자발송 스팸 이용정지 레이어팝업 -->
+		<div class="popup-com pop_msg_spam">
+			<div class="popup_heading">
+				<p>문자 전송 결과</p>
+				<button type="button" class="tooltip-close" onclick="msgSpamClose(this);"><img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button>
+			</div>
+			<div class="layer_in">
+				<div class="msg_text"></div>
+			</div>
+			<div class="popup_btn">
+				<button type="button" class="tooltip-close" onclick="msgSpamClose(this);">확인</button>                      
+			</div>
+		</div>
+	</div>
+    <div class="inner">
+        <!-- send top -->
+        <div class="send_top">
+            <!-- tab button -->
+            <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');">대량 문자(엑셀·TXT)</button> -->
+                	<button type="button" onclick="javascript:fnMsgExcelDataView(); return false;">대량 문자(엑셀·TXT)</button>
+                </li>
+            </ul><!--// tab button -->
+			<!-- tab content1 -->
+			<!-- <span id="contentArea"></span> -->
+			<div class="top_content current contentArea" id="tab1_1" style="min-height: 555px;"></div>
+			
+			<!-- tab content2 -->
+			<!-- <span id="contentExcelArea"></span> -->
+			<!-- <div class="top_content current get_excel contentExcelArea" id="tab1_2"></div> -->
+		</div><!--// send top -->
+	<!-- send bottom -->
+	<div class="send_bottom">
+		<!-- tab button -->
+		<ul class="tabType2 selectedTab" id="tabType2" name="tabType2">
+			<li class="tab active">
+				<button type="button" class="" onclick="TabType2(this,'1');">문자 샘플</button>
+			</li>
+			<li class="tab">
+				<button type="button" onclick="TabType2(this,'2');">그림문자 샘플</button>
+			</li>
+			<li class="tab">
+				<button type="button" onclick="TabType2(this,'3');">지도/약도 추가</button>
+			</li>
+			<li class="tab">
+				<button type="button" onclick="TabType2(this,'4');">내 문자함</button>
+			</li>
+		</ul>
+		<!--// tab button -->
+		<!-- tab content1 -->
+		<form id="letterForm" name="letterForm" method="post">
+			<input type="hidden" id="letterType" name="letterType" value="<c:out value='${letterVO.letterType}'/>"/>
+			<input type="hidden" id="memberType" name="memberType" value="<c:out value='${letterVO.memberType}'/>"/>
+			<input type="hidden" id="categoryCode" name="categoryCode" value="<c:out value='${letterVO.categoryCode}'/>"/>
+			<input type="hidden" id="hashTag" name="hashTag" value="<c:out value='${letterVO.hashTag}'/>"/>
+			<input type="hidden" id="pageIndex" name="pageIndex" value="<c:out value='${letterVO.pageIndex}' default='1' /> "/>
+			<input type="hidden" id="pageUnit" name="pageUnit" value="<c:out value='${letterVO.pageUnit}'/>"/>
+			<input type="hidden" id="upperCateNo" name="upperCateNo" value=""/>
+		
+			<div class="search_sample">
+				<input type="text" id="searchKeyword" name="searchKeyword" value="<c:out value='${letterVO.searchKeyword}'/>" placeholder="문자샘플 검색하기" onfocus="this.placeholder=''" onblur="this.placeholder='문자샘플 검색하기'" maxlength="10">
+				<button class="btnSearchF"><img src="/publish/images/search02.png" alt=""></button>
+			</div>
+			<!-- tab content1 -->
+			<div class="bottom_content current" id="tab2_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" value="P">개인</a>
+							<div class="on_active">전체</div>
+						</div> -->
+						<div class="tab_depth2 tDep1_letType">
+							<a href="#none" class="on" value="S">단문문자</a>
+							<a href="#none" value="L">장문문자</a>
+						</div>
+						<select name="LPageUnit" id="LPageUnit" class="selType2" onChange="fnLPageUnit(); return false;">
+							<option value="10">2줄보기</option>
+							<option value="20">4줄보기</option>
+							<option value="30">6줄보기</option>
+						</select>
+						<div class="customReq">
+							<%-- 맞춤제작 요청 JSPark => 2023.02.21 추가 --%>
+							<%--
+							<input type="hidden" id="customPopupOpen" data-tooltip="popup01">
+							<button type="button" onclick="openMsgCustomPopup(); return false;"><i></i>맞춤제작 요청</button>					
+							--%>		
+							<button type="button" onClick="location.href='/web/mjon/custom/selectMsgCustomView.do'"><i></i>맞춤제작 요청</button>
+						</div>
+					</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 tDep1_threeCateCode" id="tDep1_depThrCateCode"> <!-- 해쉬태그 삭제 및 하위 카테고리 추가로 인해 class="tDep1_hashTag" 삭제 -->
+							<!-- 하위 카테고리(3뎁스)로 대체 -->
+							<%-- <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="letterLoad">
+				</div>
+			</div><!--// tab content1 -->
+			<!--// tab content2 -->
+			<div class="bottom_content" id="tab2_2">
+				<div class="area_tabs">
+					<div class="top_tab">
+						<!-- <div class="tab_depth1 tDep2_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="tab_depth2 tDep2_letType">
+							<a href="#none" class="on" value="P">그림문자</a>
+						</div>
+						<select name="PhPageUnit" id="PhPageUnit" class="selType2" onChange="fnPhPageUnit(); return false;">
+							<option value="10">2줄보기</option>
+							<option value="20">4줄보기</option>
+							<option value="30">6줄보기</option>
+						</select>
+						<div class="customReq">
+							<%-- 맞춤제작 요청 JSPark => 2023.02.21 추가 --%>
+							<%--
+							<input type="hidden" id="customPopupOpen" data-tooltip="popup01">
+							<button type="button" onclick="openMsgCustomPopup(); return false;"><i></i>맞춤제작 요청</button>					
+							--%>		
+							<button type="button" onClick="location.href='/web/mjon/custom/selectMsgCustomView.do'"><i></i>맞춤제작 요청</button>
+						</div>
+					</div>
+					<div class="bottom_tab">
+						<div class="tab_depth3 tDep2_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_threeCateCode" id="tDep2_depThrCateCode"><!-- 해쉬태그 삭제 및 하위 카테고리 추가로 인해 class="tDep2_hashTag" 삭제 -->
+							<!-- 하위 카테고리(3뎁스)로 대체 -->
+							<%-- <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="photoLoad">
+			    </div>
+				<!-- pagination -->
+			</div><!--// tab content2 -->
+		</form>
+		
+		<!--tab content3 -->
+		<div class="bottom_content" id="tab2_3">
+			<div class="map_search">
+				<label for="" class="label"></label>
+				<div class="mapWrap">
+					<script src="//t1.daumcdn.net/mapjsapi/bundle/postcode/prod/postcode.v2.js"></script>
+					<script type="text/javascript" src="//dapi.kakao.com/v2/maps/sdk.js?appkey=7fc7b80a3e32ac964da92f6aa3d6000d&libraries=services"></script>
+					<input type="text" id="sample5_address" placeholder="도로명 또는 지번을 입력해주세요." onfocus="this.placeholder=''" onblur="this.placeholder='도로명 또는 지번을 입력해주세요.'">
+					<button type="button" class="btnType map_check" onclick="sample5_execDaumPostcode()">확인</button>
+					<button type="button" class="btnType map_add" onclick="insertajax();">약도링크 추가</button>
+					<p><span class="vMiddle">*</span> 지도링크는 입력메시지 끝부분에 추가됩니다.</p>
+					<div id="map" style="width:100%;height:450px; margin-top: 10px;">&nbsp;</div>
+					
+					<div class="mapInfo">
+					</div>
+				</div>
+			</div>
+			<script>
+			    var mapContainer = document.getElementById('map'), // 지도를 표시할 div
+			        mapOption = {
+			            center: new daum.maps.LatLng(37.613898152040385, 127.15319231152851), // 지도의 중심좌표
+			            level: 5 // 지도의 확대 레벨
+			        };
+			
+			    //지도를 미리 생성
+			    var map = new daum.maps.Map(mapContainer, mapOption);
+			    //주소-좌표 변환 객체를 생성
+			    var geocoder = new daum.maps.services.Geocoder();
+			    //마커를 미리 생성
+			    var marker = new daum.maps.Marker({
+			        position: new daum.maps.LatLng(37.613898152040385, 127.15319231152851),
+			        map: map
+			    });
+			    var testcoords = new daum.maps.LatLng(37.613898152040385, 127.15319231152851);
+			    setTimeout(function(){ 
+			    	map.relayout();
+			    	map.setCenter(testcoords);
+			    }, 5000);
+			    
+				//lat 위도 lng 경도
+			    var paramLat;
+			    var paramLng;
+			    
+			    function sample5_execDaumPostcode() {
+			        new daum.Postcode({
+			            oncomplete: function(data) {
+			                var addr = data.address; // 최종 주소 변수
+			
+			                // 주소 정보를 해당 필드에 넣는다.
+			                document.getElementById("sample5_address").value = addr;
+			                // 주소로 상세 정보를 검색
+			                geocoder.addressSearch(data.address, function(results, status) {
+			                    // 정상적으로 검색이 완료됐으면
+			                    if (status === daum.maps.services.Status.OK) {
+			
+			                        var result = results[0]; //첫번째 결과의 값을 활용
+			
+			                        // 해당 주소에 대한 좌표를 받아서
+			                        var coords = new daum.maps.LatLng(result.y, result.x);
+			                        // 지도를 보여준다.
+			                        mapContainer.style.display = "block";
+			                        map.relayout();
+			                        // 지도 중심을 변경한다.
+			                        map.setCenter(coords);
+			                        // 마커를 결과값으로 받은 위치로 옮긴다.
+			                        marker.setPosition(coords)
+			                        paramLat = result.y;
+			                        paramLng = result.x;
+			                        
+			                    }
+			                });
+			            }
+			        }).open({
+			        	q: document.getElementById("sample5_address").value
+			        });
+			    }
+			    
+			    function insertajax(){
+			    	if(typeof paramLat == 'undefined' ||typeof paramLng == 'undifined'){
+			    		alert("주소를 검색해 주세요.");
+			    		return;
+			    	}
+			    	var mapInsertConfirm = confirm('약도를 추가하시겠습니까?');
+			    	
+			    	if(mapInsertConfirm){
+				    	$.ajax({
+				            cache : false,
+				            url : "<c:url value='/MapUrlInsertAjax.do'/>", 
+				            type : 'POST', 
+				            data : {
+				            	"mapLat" : paramLat,
+				            	"mapLng" : paramLng
+				            },
+				            dataType:'json',
+				            success : function(returnData, status){
+				    			if(status == "success") {
+				    				if (returnData.url != 0) {
+				    					var smsTxttmp = $('#smsTxtArea').val();
+				    					
+				    					/* document.getElementById("testarea").value = returnData.url + "/MapUrl.do?seq=" + returnData.seq; */
+				    					$('#smsTxtArea').val(smsTxttmp+returnData.url + "/MapUrl.do?seq=" + returnData.seq);
+				    					
+				    					smsTxttmp = $('#smsTxtArea').val();
+				    					
+				    					fnByteString(smsTxttmp);
+				    				}
+				    			}else{ alert("ERROR!");return;} 
+				    		},
+				    
+				            error : function(request , status, error){
+				    			alert("code:"+request.status+"\n"+"message:"+request.responseText+"\n"+"error:"+error);
+				    			
+				            }
+				        });
+			    	}
+			    	else{
+			    		alert("취소되었습니다.");
+			    	}
+			    } 
+			</script>
+		</div><!--// tab content3 -->
+		<!-- tab content4 -->
+		<form id="myMsgForm" name="myMsgForm" method="post">
+			<input name="pageIndex" type="hidden" value="1"/>
+			<input name="msgIdList" type="hidden" value=""/>
+			<input name="pageUnit" type="hidden" value=""/>
+			<input name="searchSortOrd" type="hidden" value="desc"/>
+			
+			<div class="bottom_content" id="tab2_4">
+				<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="myMsgStDt" value="" data-datecontrol="true">
+								<span class="dateEtc">~</span>
+								<input type="text" class="endDate inp calendar" title="검색 종료일" id="endDate" name="myMsgEndDt" value="" data-datecontrol="true">
+							</div>
+		                    <div class="search">
+		                        <label for="searchWord" class="label"></label>
+		                        <input type="text" id="searchWord" name="searchKeyword" placeholder="내 문자함 검색" onfocus="this.placeholder=''" onblur="this.placeholder='내보관함 검색'" maxlength="10">
+		                    <button type="button" class="btnType btnType2" onclick="javascript:fnMyMsgSearchListAjax(1); return false;">검색</button>
+		                </div>
+		            </div>
+		            <div class="btn_right">
+		                <button type="button" id="sortOrd" name="sortOrd" onClick="javascript:fnMyMsgSearchListOrd(); return false;"><span id="sortCnd">최근순</span><i></i></button>
+		                <select name="msgType" id="msgType1" class="selType2" onChange="fnMyMsgSearchListAjax(1); return false;">
+		                    <option value="">전체보기</option>
+		                    <option value="S">단문문자</option>
+		                    <option value="L">장문문자</option>
+		                    <option value="P">그림문자</option>
+		                </select>
+		                <select name="msgPageUnit" id="msgPageUnit" class="selType2" onChange="fnMsgPageUnit(); return false;">
+		                    <option value="10">2줄보기</option>
+		                    <option value="20">4줄보기</option>
+		                    <option value="30">6줄보기</option>
+		                </select>
+		            </div>
+		        </div>
+				<div id="myMsgLoad">
+				</div>
+			</div><!--// tab content4 -->
+		</form>
+	</div><!-- inner close -->
+	
+	<!-- 맞춤제작 요청 레이어 팝업 -->
+	<div class="tooltip-wrap" id="customPopup">
+	</div>
+	<!--// 맞춤제작 요청 레이어 팝업 -->		
+</div>
+<form id="msgResendForm" name="msgResendForm" method="post">
+	<input name="msgResendFlag" type="hidden" value="N"/>
+	<input name="msgSeqList" type="hidden" value=""/>
+</form>
+<form id="moveAddrForm" name="moveAddrForm" method="post">
+	<input name="moveAddrFlag" type="hidden" value="N"/>
+	<input name="addrIdList" type="hidden" value=""/>
+</form>
Add a comment
List