<%@ 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 form = document.msgForm;
	var totPriceOnly = stringReplaceAll(form.totPrice.value, ",", "");
	var userMoneyOnly = stringReplaceAll(form.myPrice.value, ",", "");

	// test 주석
	/* 
	if(parseFloat(userMoneyOnly) < parseFloat(totPriceOnly)){
		alert("문자 발송에 필요한 회원님의 보유 잔액이 부족 합니다.");
		return false;
	} 
	*/

	// 폼 유효성 검사
	if (!validateForm(form)) return false;
	
	var spamStatus = false;
	var exceptSpamYn = $("#exceptSpamYn").val(); //금지어 필터링 예외 여부 - N 일 경우만 스팸 검사를 진행
	
	
	var blineCodeYn = $("#blineCode").val();
	if(blineCodeYn != 'N'){
		if(!blineSendCheck(blineCodeYn)){	//문자온 conf-check
			alert("현재 문자 발송하기 기능 점검 중입니다.\n\n잠시 후 다시 시도해주세요.");
			return false;
		}
	}
	
	
	if(!confirm("문자를 전송하시겠습니까?")){
		return false;
	}

	//총 결제금액 천단위 콤마 삭제 후 전송
	var totPrice = form.totPrice.value;
	form.totPrice.value = totPrice.replace(",","");
	
	
	//이벤트 진행중 회원의 경우 이벤트 잔여금액 비교 처리 필요.
	//이벤트 캐시가 부족한 경우 이벤트 캐시로 발송 가능한 만큼만 이벤트 금액으로 발송 처리해줌.
	//이 후 나머지 발송 건수는 이벤트 캐시가 아닌 일반 단가로 발송 처리를 진행 함.
	var eventStatus = form.eventStatus.value;
	
	if(eventStatus == 'Y'){ //이벤트 진행 대상자이면 문자종류에 이벤트로 구분
		
		form.eventYn.value = "Y"; //이벤트문자 종류 설정
		
	}
	
	var eventRemainCash = parseFloat(form.eventRemainCash.value);
	console.log('eventStatus : ', eventStatus);
	
	if(eventStatus == 'Y' 
				&& parseFloat(eventRemainCash) < parseFloat(totPriceOnly))
	{
		console.log('eventRemainCash : ', eventRemainCash);
		if(!confirm("고객님의 이벤트 캐시 잔액(" + eventRemainCash + "원) 부족으로 요청하신 문자("+numberWithCommas($selectedData.length)+"건)를 모두 발송할 수 없습니다. 이벤트 캐시 초과 건에 대해서는 일반 단가를 적용하여 발송하시겠습니까?")){
			return false;
		}
	}

	console.log(' !!! imgFilePath : ', imgFilePath);
		
	// img 처리 영역
	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'){
						console.log('returnData : ',returnData)
						// 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.reserveYn.value = reserYn; // 즉시 / 예약 문자 선택 여부 
	form.templateYnAdvc.value = templateYn;
	console.log('imgFilePath : ', imgFilePath);
	console.log('imgFilePath : ', JSON.stringify(imgFilePath));
	console.log('imgFileId : ', imgFileId);
	console.log('imgFileId : ', JSON.stringify(imgFileId));
	form.imgFilePathAdvc.value = imgFilePath;
	form.imgFileIdAdvc.value =  imgFileId;
// 	form.imgFilePath.value = JSON.stringify(imgFilePath).replace(/\\/g, '');
// 	form.imgFileId.value =  JSON.stringify(imgFileId).replace(/\\/g, '');
	form.callFrom.value = removeDash($('#callFromList').val()); // 발신번호 대쉬(-) 문자 없애주기

	//광고 종류 설정
	var adverYn = $("input[name='send_adYn']:checked").val();
	if(adverYn == 'Y'){
		form.msgKind.value = "A"; //광고문자 종류 설정
	}else{
		form.msgKind.value = "N"; //일반문자 종류 설정
	}
	
	// 예약 확인
	var reserYn = $("input[name=reserYn]:checked").val(); // 예약 발송 여부 확인
	form.reserveYn.value = reserYn; // 즉시 / 예약 문자 선택 여부 
	
	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 = "";
		
	}
	
	

	//발송 Ajax 호출해주기
	sendMsgAjax_advc();
}






function sendMsgAjax_advc(){
    // 타블레이터 호출
    var $selectedData = tableL.getData(); // 데이터 가져오기

	 // 폼 데이터를 배열로 직렬화
	 var form = $('#msgForm');
	 var formDataArray = form.serializeArray();
	
	 // 배열을 객체로 변환
	 var formData = {};
	 $.each(formDataArray, function(index, field) {
	     formData[field.name] = field.value;
	 });
	
	 // 빈 값 제거
	 removeEmptyValues(formData);

	// 선택된 데이터 추가
	formData["mjonMsgSendVOList"] = $selectedData;
	
	// JSON 데이터 확인
	console.log("최종 formData:", JSON.stringify(formData));
	
	
	var url = "/web/mjon/msgdata/sendMsgDataAjax_advc.do";
	 // 시작 시간
	const startTime = new Date();
	 
	$.ajax({
		type: "POST",
		url: url,
		data: JSON.stringify(formData),
		contentType: 'application/json',
		dataType: 'json',
		success: function (data) {
			
			 // 종료 시간
			const endTime = new Date();
			const elapsed = (endTime - startTime) / 1000; // 밀리초 -> 초로 변환
			console.log(`경과 시간: ${elapsed}초`);
			
			console.log('data : ', data);
			/*  message:"특정문구 일괄변환 치환문자 데이터가 없습니다."
				status:"BAD_REQUEST" */
			
			var status = data.status;
			if("OK" == status){
				
				var smsCnt = Number(data.object.resultSts);
				var blockCnt = Number(data.object.resultBlockSts);
				
				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%)'});
					//예약발송 건의 경우 결과 팝업 문구 변경
					
					var reserYn = $("input[name=reserYn]:checked").val(); 
					var resText = (reserYn === 'Y') ? '예약' : '발송';
					/* 
					if(reserYn == 'Y')
					{
						resText = "예약";
					}
					else
					{
						resText = "발송";
					} 
					*/
					$('.pop_msg_success .msg_text').html(resText+" 성공 : <strong>"+ smsCnt + "</strong>건,수신거부 : <span>" + blockCnt + "</span>건의<br>문자가 "+resText+" 되었습니다.");
					
					$('.mask').addClass('on');
					
				}
				
				
			}else if("BAD_REQUEST" == status){

				alert(data.message);
				return false;
					
			}else if("UNAUTHORIZED" == status){
				
				alert(data.message);
				//문자발송 URL Move
				goMsgUrlMove();
				return false;
				
			}else if("NO_CONTENT" == status){
				
				$('.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');
				
			}
				
		},
		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 validateForm(form) {
	
	if(form.callFromList.value == ""){
		
		alert("발신번호를 입력해 주세요.");
		return false;
		
	}

	if (form.title_status.value === 'N') {
		form.mmsSubject.value = "";
	} else if (getSpacialStringChk(form.mmsSubject.value)) {
		alert("문자 제목에는 치환문자(엑셀 내 *이름*, *1*, *2*, *3*, *4* 등)를 사용하실 수 없습니다.");
		return false;
	}

	//문자제목에 이모지가 있는지 체크
	var titleStatusYn = $("input[name='title_status']:checked").val();
	if(titleStatusYn == 'Y') {
		if(!emojiCheck(form.mmsSubject.value)) return false;
	}

	// 문자내용에 이모지가 있는지 체크 
	var strCont = form.smsTxtArea.value;
	if (!emojiCheck(strCont)) return false;
	
	var rtnStr = strChinJpnCheck(strCont);
	if(rtnStr.length > 0){
		alert("입력하신 문구 중 \" " + rtnStr + " \" 는 일부 휴대폰에서 표기되지 않을 수 있습니다.");
	}
	
	if (imgFilePath.length === 0 && !form.smsTxtArea.value) {
		alert("문자 내용을 입력해 주세요.");
		return false;
	}
	return true;
}

//이벤트가 아닌 일반 개별 단가 셋팅해주기
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;
}

//빈 값이나 null 값을 제거하는 함수
function removeEmptyValues(obj) {
    Object.keys(obj).forEach(function(key) {
        if (obj[key] === null || obj[key] === '') {
            delete obj[key];
        }
    });
}


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>
