+
+
+
diff --git a/src/main/webapp/WEB-INF/jsp/web/custom/MsgCustomView.jsp b/src/main/webapp/WEB-INF/jsp/web/custom/MsgCustomView.jsp
index 724cc51a..5321c582 100644
--- a/src/main/webapp/WEB-INF/jsp/web/custom/MsgCustomView.jsp
+++ b/src/main/webapp/WEB-INF/jsp/web/custom/MsgCustomView.jsp
@@ -1,482 +1,482 @@
-<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
-<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
-<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
-
-
-
-
-
-
-
-
+<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
+
+
+
+
+
+
+
+
diff --git a/src/main/webapp/WEB-INF/jsp/web/msgdata/include/msgDataIncludeExcel.jsp b/src/main/webapp/WEB-INF/jsp/web/msgdata/include/msgDataIncludeExcel.jsp
index 5fc5e078..72aa8d0d 100644
--- a/src/main/webapp/WEB-INF/jsp/web/msgdata/include/msgDataIncludeExcel.jsp
+++ b/src/main/webapp/WEB-INF/jsp/web/msgdata/include/msgDataIncludeExcel.jsp
@@ -1,904 +1,904 @@
-<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
-<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
-<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 주소록은 한 번에 최대 30만건까지 등록(EXCEL파일, 최대용량 3MB) 가능합니다.
-
- 엑셀 파일에 비밀번호 설정, 제한된 보기, 수식 등이 설정되어 있는 경우 업로드가 불가합니다.
-
- 구분선(|), 역슬래시(\, ₩), 큰따옴표(") 등 발송불가 특수문자는 저장되지 않습니다.
-
- 이름 200byte, [*1*]~[*4*] 200byte, 메모 250byte까지 입력 가능합니다.
-
- 주소록 등록이 어려우신 경우에는 주소록 입력대행 메뉴를 이용하실 수 있습니다.
-
-
- 더보기
-
-
-
-
-
-
- 엑셀입력 표
-
-
-
-
-
-
-
-
-
-
-
마우스로 엑셀, TXT파일을 여기에 끌어다 놓으세요
-
-
-
엑셀, TXT파일 업로드
-
-
-
-
-
-
-
-
-
-
- 총 0 건
- / 중복 0 건
- / 오류 0 건
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 선택하기
- 이름
- 휴대폰
- [*1*]
- [*2*]
- [*3*]
- [*4*]
-
-
-
-
-
-
- 선택하기
- 이름
- 휴대폰
- [*1*]
- [*2*]
- [*3*]
- [*4*]
-
-
-
-
-
-
- 선택하기
- 이름
- 휴대폰
- [*1*]
- [*2*]
- [*3*]
- [*4*]
-
-
-
-
-
-
- 선택하기
- 이름
- 휴대폰
- [*1*]
- [*2*]
- [*3*]
- [*4*]
-
-
-
-
-
-
- 선택하기
- 이름
- 휴대폰
- [*1*]
- [*2*]
- [*3*]
- [*4*]
-
-
-
-
-
-
- 선택하기
- 이름
- 휴대폰
- [*1*]
- [*2*]
- [*3*]
- [*4*]
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
- 주소록은 한 번에 최대 30만건까지 등록(EXCEL파일, 최대용량 3MB) 가능합니다.
+
- 엑셀 파일에 비밀번호 설정, 제한된 보기, 수식 등이 설정되어 있는 경우 업로드가 불가합니다.
+
- 구분선(|), 역슬래시(\, ₩), 큰따옴표(") 등 발송불가 특수문자는 저장되지 않습니다.
+
- 이름 200byte, [*1*]~[*4*] 200byte, 메모 250byte까지 입력 가능합니다.
+
- 주소록 등록이 어려우신 경우에는 주소록 입력대행 메뉴를 이용하실 수 있습니다.
+
+
+ 더보기
+
+
+
+
+
+
+ 엑셀입력 표
+
+
+
+
+
+
+
+
+
+
+
마우스로 엑셀, TXT파일을 여기에 끌어다 놓으세요
+
+
+
엑셀, TXT파일 업로드
+
+
+
+
+
+
+
+
+
+
+ 총 0 건
+ / 중복 0 건
+ / 오류 0 건
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 선택하기
+ 이름
+ 휴대폰
+ [*1*]
+ [*2*]
+ [*3*]
+ [*4*]
+
+
+
+
+
+
+ 선택하기
+ 이름
+ 휴대폰
+ [*1*]
+ [*2*]
+ [*3*]
+ [*4*]
+
+
+
+
+
+
+ 선택하기
+ 이름
+ 휴대폰
+ [*1*]
+ [*2*]
+ [*3*]
+ [*4*]
+
+
+
+
+
+
+ 선택하기
+ 이름
+ 휴대폰
+ [*1*]
+ [*2*]
+ [*3*]
+ [*4*]
+
+
+
+
+
+
+ 선택하기
+ 이름
+ 휴대폰
+ [*1*]
+ [*2*]
+ [*3*]
+ [*4*]
+
+
+
+
+
+
+ 선택하기
+ 이름
+ 휴대폰
+ [*1*]
+ [*2*]
+ [*3*]
+ [*4*]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/jsp/web/pay/PayGuide.jsp b/src/main/webapp/WEB-INF/jsp/web/pay/PayGuide.jsp
index e1f020e5..7756c219 100644
--- a/src/main/webapp/WEB-INF/jsp/web/pay/PayGuide.jsp
+++ b/src/main/webapp/WEB-INF/jsp/web/pay/PayGuide.jsp
@@ -1,867 +1,867 @@
-<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-
-
-
-
-
-
-
-
+<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+
+
+
+
+
+
+
+
diff --git a/src/main/webapp/js/MJUtill.js b/src/main/webapp/js/MJUtill.js
index faace197..78c0d0f8 100644
--- a/src/main/webapp/js/MJUtill.js
+++ b/src/main/webapp/js/MJUtill.js
@@ -1,974 +1,974 @@
-/**
- * 휴대폰번호 유효성 체크
- * true, false 반환
- * 대시 유무 상관없음
- */
-function checkHpNum(str) {
-
- var regExp = /^(050[2345678]{1}|01[016789]{1})-?[0-9]{3,4}-?[0-9]{4}$/;
- //var regExp = /^(01[016789]{1}|070|02|0[3-9]{1}[0-9]{1})-?[0-9]{3,4}-?[0-9]{4}$/; //지역번호(일반전화) 형식까지 체크해주는 정규식
- return regExp.test(str);
-}
-
-/**
- * 휴대폰번호만 유효성 체크
- * true, false 반환
- * 대시 유무 상관없음
- */
-function checkOnlyHpNum(str) {
-
- //var regExp = /^(050[234567]{1}|01[016789]{1})-?[0-9]{3,4}-?[0-9]{4}$/;
- var regExp = /^(01[016789]{1})-?[0-9]{3,4}-?[0-9]{4}$/; //지역번호(일반전화) 형식까지 체크해주는 정규식
- return regExp.test(str);
-}
-
-/**
- * 팩스 번호 유효성 체크
- * true, false 반환
- * 앞 3자리를 체크 함
- * -- 전국 지역번호
- * 02 서울특별시
- 031 경기도
- 032 인천광역시
- 033 강원도
- 041 충청남도
- 042 대전광역시
- 043 충청북도
- 044 세종특별자치시
- 051 부산광역시
- 052 울산광역시
- 053 대구광역시
- 054 경상북도
- 055 경상남도
- 061 전라남도
- 062 광주광역시
- 063 전라북도
- 064 제주특별자치도
-
- -- 타사부가번호
- 030*
- 050*
- 060
- 070
- 080
- 1**
-
- 위 번호로 시작하는 팩스 번호만 허용함.
- */
-function checkFaxNum(str) {
- str = removeDash(str);
- var subNum = str.substring(0,3);
- var regExp = /^(02[0-9]{1}|030|050|060|070|080|0[3-6]{1}[1-5]{1}|1[0-9]{1}[0-9]{1})$/; //지역번호(일반전화) 형식까지 체크해주는 정규식
- return regExp.test(subNum);
-}
-
-/*
- * 일반전화 유효성 체크
- * true, false 반환
- *
- * */
-function checkNorPhoneNum(str){
-
- var regExp = /^(02|0[3-9]{1}[0-9]{1})-?[0-9]{3,4}-?[0-9]{4}$/;
-
- /**
- * 기간통신사업자 공통 부가서비스 번호 체크
- * 번호 사업자
- 1588,1577,1899 KT
- 1544,1644,1661,1800 ,1833 LG유플러스
- 1566,1600,1670 SK브로드밴드
- 1688,1666 온세텔레콤
- 1599 SK텔링크
- 1877 한국케이블텔레콤
- 1855 CJ헬로비전
- 1661 alleh KT
- *
- * */
-
- if(str.substring(0,2) == "15"){
-
- regExp = /^(15[0-9]{2})-?[0-9]{4}$/;
-
- }else if(str.substring(0,2) == "16"){
-
- regExp = /^(16[0-9]{2})-?[0-9]{4}$/;
-
- }else if(str.substring(0,2) == "18"){
-
- regExp = /^(18[0-9]{2})-?[0-9]{4}$/;
-
- }
-
- return regExp.test(str);
-}
-
-/*
- * 일반전화 / 핸드폰 번호 종류 확인
- * true, false 반환
- *
- * */
-function checkTelHpType(str){
-
- var subCall = str.substring(0,3); // 전화번호 앞 3자리 받아오기
- var strType = ""; // 결과 반환
-
- if(subCall != '010'
- && subCall != '011'
- && subCall != '016'
- && subCall != '017'){//일반전화 번호이면
-
- strType = "Tel";
-
- }else{
-
- strType = "Hp";
- }
-
- return strType;
-}
-
-
-/**
- * 휴대폰번호 대시('-') 제거
- */
-function removeDash(str) {
- var regExp = new RegExp('-', 'g');
- return str.replace(regExp, '');
-}
-
-/**
- * 휴대폰번호 대시('-') 추가
- * 대시 유무 상관없음
- * 유효성 맞지 않을시 변환안됨.
- */
-function addDash(str) {
- return str.replace(/(^01[016789]{1}|070)([0-9]{3}|[0-9]{4})([0-9]{4})$/,"$1-$2-$3").replace("--", "-");
-}
-
-/**
- * ReplaceAll (by javascript prototype)
- * 정규식 패턴에서 \는 두 개 사용
- */
-String.prototype.replaceAll = function(pattern, changeString) {
- var regExp = new RegExp(pattern, 'g');
- return this.replace(regExp, changeString);
-};
-
-/**
- * 이메일 유효성 체크
- * true, false 반환
- *
- */
-function checkEmail(str) {
- var regExp = /^[A-Za-z0-9_\.\-]+@[A-Za-z0-9\-]+\.[A-Za-z0-9\-]+/;
- return regExp.test(str);
-}
-
-/**
- * XSS 체크하기
- *
- *
- */
-
-function XSSCheck(str, level) {
- if (level == undefined || level == 0) {
- str = str.replace(/\<|\>|\"|\'|\%|\;|\(|\)|\&|\+|\-/g,"");
- } else if (level != undefined && level == 1) {
- str = str.replace(/\/g, ">");
- }
- return str;
-}
-
-
-//숫자 천단위 콤마 찍어주기
-function numberWithCommas(x) {
- return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
-}
-
-function comma(num){
- var len, point, str;
- num = num + "";
- point = num.length % 3;
- len = num.length;
- str = num.substring(0, point);
- while (point < len) {
- if (str != "") str += ",";
- str += num.substring(point, point + 3);
- point += 3;
- }
- return str;
-}
-
-
-function totalPriceSum(totRows){
-
- var contents = $('#smsTxtArea').val(); //입력 문자 내용
- var msgType = conTypeCheck(contents); //입력 문자 길이 체크
- var collNumCnt = parseInt(totRows); //받는사람 건수
- var price = 0; //개별 건수 금액
- var totalPrice = 0; //전체 금액
- //var strDot = [];
- //var subPrice = "";
- //var spPrice = "";
- var totalStr = "0"; //전체 합계 금액
- var userMoney = $('#hdUserMoney').text(); //헤더 영역 보유 금액 불러오기
- var msgCnt = 0; //발송 가능 문자 건수
- var imgCnt = $("#imgCnt").val(); // 현재 페이지에 첨부된 이미지 갯수
-
- if(!userMoney > 0){
-
- userMoney = 0;
-
- }
- //헤더 영역 보유 금액 콤마 문자 제거
- if(userMoney != ''){
-
- userMoney = userMoney.replaceAll("," , "");
-
- }
-
- /*if(msgType == "P"){//그림문자
-
- //그림 이미지 갯수에 따른 금액 계산
- if(imgCnt > 2){//그림 3장일경우
- price = parseFloat($('#p3Price').val());
- }else if(imgCnt > 1){//그림 2장일경우
- price = parseFloat($('#p2Price').val());
- }else{//그림 1장일 경우
- price = parseFloat($('#pPrice').val());
- }
-
- msgCnt = parseFloat(userMoney) / price;
-
- }else if(msgType == "M"){//장문 문자
-
- price = parseFloat($('#mPrice').val());
- msgCnt = parseFloat(userMoney) / price;
-
- }else{//단문문자
-
- price = parseFloat($('#sPrice').val());
- msgCnt = parseFloat(userMoney) / price;
-
- }*/
-
- //금액 소수점 제거 하여 적용 20220623 소수점 버림 처리
- if(msgType == "P"){//그림문자
-
- //그림 이미지 갯수에 따른 금액 계산
- if(imgCnt > 2){//그림 3장일경우
- price = $('#p3Price').val();
- }else if(imgCnt > 1){//그림 2장일경우
- price = $('#p2Price').val();
- }else{//그림 1장일 경우
- price = $('#pPrice').val();
- }
-
- msgCnt = userMoney / price;
-
- }else if(msgType == "M"){//장문 문자
-
- price = $('#mPrice').val();
- msgCnt = userMoney / price;
-
- }else{//단문문자
-
- price = $('#sPrice').val();
- msgCnt = userMoney / price;
-
- }
-
- totalPrice = price * collNumCnt;
-
- // 소수점 첫째자리 까지 표시
- totalPrice = totalPrice.toFixed(1);
-
- if(totalPrice > 0){
-
- //totalStr = totalPrice.toFixed(2);
- totalStr = totalPrice;
-
- }
-
- //개별 문자 단가 파라미터에 입력
- $('#eachPrice').val(numberWithCommas(price));
-
-
- //결제금액 합계 파라이터에 입력
- $('#totPrice').val(numberWithCommas(totalStr));
-
- //결제금액 합계 화면에 표시
- $('#totalPriceTxt').text(numberWithCommas(totalStr));
-
- //현재 문자 전송 가능 갯수 표시
- $('.nowMsgCnt').text(numberWithCommas(msgCnt.toFixed()));
-
- if(msgType == 'P'){
-
- $('#nowMsgType').text("그림");
-
- }else if(msgType == 'M'){
-
- $('#nowMsgType').text("장문");
-
- }else{
-
- $('#nowMsgType').text("단문");
-
- }
-
- $('#repPriceTxt').hide();
-
- return totalStr;
-
-}
-
-function replTotalPriceSum(msg_short, msg_long, totRows){
-
- var shortPrice = 0; //단문 개별 건수 금액
- var longPrice = 0; //장문 개별 건수 금액
- var imgPrice = 0; //그림문자 개별 건수 금액
- var totalPrice = 0; //전체 금액
- var totalStr = "0"; //전체 합계 금액
- var contents = $('#smsTxtArea').val(); //입력 문자 내용
- var msgType = conTypeCheck(contents); //입력 문자 길이 체크
- var userMoney = $('#hdUserMoney').text(); //헤더 영역 보유 금액 불러오기
- var msgCnt = 0; //발송 가능 문자 건수
- var imgCnt = $("#imgCnt").val(); // 현재 페이지에 첨부된 이미지 갯수
- var collNumCnt = parseInt(totRows); //받는사람 건수
- var totalCntTxt = "";
-
- //금액 소수점 제거하여 금액 처리
- if(msgType == "P"){//그림문자
-
- //그림 이미지 갯수에 따른 금액 계산
- if(imgCnt > 2){//그림 3장일경우
- imgPrice = $('#p3Price').val();
- }else if(imgCnt > 1){//그림 2장일경우
- imgPrice = $('#p2Price').val();
-
- }else{//그림 1장일 경우
- imgPrice = $('#pPrice').val();
- }
-
- msgCnt = userMoney.replaceAll(",","") / imgPrice;
-
- var imgTotPrice = imgPrice * collNumCnt;
- imgTotPrice = Math.round(imgTotPrice * 100) / 100; //소수점 2자리 반올리 처리해주기
-
- totalPrice = totalPrice + imgTotPrice;
-
- //input hidden 개별 문자 단가 파라미터에 입력
- $('#eachPrice').val(numberWithCommas(imgPrice));
-
- //input hidden 결제금액 합계 파라이터에 입력
- $('#totPrice').val(numberWithCommas(totalStr));
-
- //결제금액 합계 화면에 표시
- $('#totalPriceTxt').text(numberWithCommas(totalStr));
-
- //현재 문자 전송 가능 갯수 표시
- $('.nowMsgCnt').text(numberWithCommas(msgCnt.toFixed()));
-
- //변환문자 건수 내용 표기
- totalCntTxt = "그림 :
" + totRows + " 건";;
-
- }else{
-
- if(msg_long > 0){//장문 문자
-
- longPrice = $('#mPrice').val();
- var longTotPrice = longPrice * msg_long;
- longTotPrice = Math.round(longTotPrice * 100) / 100; //소수점 2자리 반올리 처리해주기
-
- totalPrice = totalPrice + longTotPrice;
-
- //input hidden 개별 문자 단가 파라미터에 입력
- $('#eachPrice').val(numberWithCommas(longPrice));
-
- //변환문자 건수 내용 표기
- totalCntTxt = "장문 :
" + msg_long + " 건";
-
- //변환장문 건수 Hidden 폼에 넣어주기
- $('#longMsgCnt').val(msg_long);
-
- }else{
-
- //변환장문 건수 Hidden 폼에 넣어주기
- $('#longMsgCnt').val(msg_long);
-
- }
-
- if(msg_short > 0){//단문문자
-
- shortPrice = $('#sPrice').val();
- var shortTotPrice = shortPrice * msg_short;
- shortTotPrice = Math.round(shortTotPrice * 100) / 100; //소수점 2자리 반올리 처리해주기
-
- totalPrice = totalPrice + shortTotPrice;
-
- //input hidden 개별 문자 단가 파라미터에 입력
- $('#eachPrice').val(numberWithCommas(shortPrice));
-
- if(msg_long > 0){
-
- //변환문자 건수 내용 표기
- totalCntTxt = totalCntTxt + "/ 단문 :
" + msg_short + " 건";
-
- }else{
-
- //변환문자 건수 내용 표기
- totalCntTxt = "단문 :
" + msg_short + " 건";
-
- }
-
- //변환단문 건수 Hidden 폼에 넣어주기
- $('#shortMsgCnt').val(msg_short);
-
- }else{
-
- //변환단문 건수 Hidden 폼에 넣어주기
- $('#shortMsgCnt').val(msg_short);
-
- }
-
- }
-
-
- if(totalPrice > 0){
-
- //totalStr = totalPrice.toFixed(2);
- totalStr = totalPrice;
-
- }
-
- //input hidden 결제금액 합계 파라이터에 입력
- $('#totPrice').val(numberWithCommas(totalStr));
-
- //결제금액 합계 화면에 표시
- $('#totalPriceTxt').text(numberWithCommas(totalStr));
-
- //결제금액 합계 파라이터에 입력
- $('#totPrice').val(numberWithCommas(totalStr));
-
- //특정문구 일괄 변환으로 인한 단/장문 건수 표시
- $('#repPriceTxt').show();
- $('#repPriceTxt').html("(" + totalCntTxt + ")");
-
- if(msgType == 'P'){
-
- $('#nowMsgType').text("그림");
-
- }else if(msgType == 'M'){
-
- $('#nowMsgType').text("장문");
-
- }else{
-
- $('#nowMsgType').text("단문");
-
- }
-
- return totalStr;
-
-}
-
-//예약 날짜 체크 함수
-function getGday(date) { /* 현재와 이전 날자의 차이를 년-개월-일 형태로 가져오기 */
- var now = new Date().getTime(); // 현재 날짜를 시간으로 변환
- var d = new Date(date.substring(0, 10)).getTime(); // 이전 날짜를 시간으로 변환
- var gap = now - d; // 현재 날짜와 이전 날짜의 차이를 밀리초 시간으로 구한다.
- var result = Math.floor(gap/(1000 * 60 * 60 * 24)); // 날짜 차이를 일수로 계산
-
- var year = Math.floor(result / 365); // 현재 날짜 년 - 개월 - 일 수로 표현하기
- var month = Math.floor(result % 365 / 30);
- var day = result % 365 % 30;
-
- return result;
-
- //각 년도, 월, 일을 따로 리턴하려면 아래를 사용하면 됨
- /* return {
- year: year,
- month: month,
- day: day
- }; */
-}
-
-/*
- * 예약 날짜 오류 체크 함수
- * 날짜, 시간, 분 파라미터 전달
- * 현재 날짜와 파라미터 시간의 분 간격 계산해주기
- * */
-function getGapDayTime(paramDate,paramHours,paramMin) { /* 현재와 이전 날자의 차이를 년-개월-일 형태로 가져오기 */
-
- var now = new Date();
-
- //현재시간 구분하기
- var year = now.getFullYear();
- var month = now.getMonth() + 1 ;
- var day = now.getDate();
- var hours = now.getHours();
- var min = now.getMinutes();
-
- //비교시간
- var stDt = paramDate.split("/");
- var stYear = stDt[0];
- var stMonth = stDt[1];
- var stDay = stDt[2];
-
- var nowDate = new Date(year, month-1, day, hours, min);
- var stDate = new Date(stYear, stMonth-1, stDay, paramHours, paramMin);
- var elapsedMSec = stDate.getTime() - nowDate.getTime();
- var elapseMin = elapsedMSec / 1000 / 60;
-
- elapseMin = parseInt(elapseMin);
-
- return elapseMin;
-
- //각 년도, 월, 일을 따로 리턴하려면 아래를 사용하면 됨
- /* return {
- year: year,
- month: month,
- day: day
- }; */
-}
-
-// 중복 주소 체크하기
-/*function dupliAddrData(data){
-
- var chk = true; //중복값 유무
- var uniqData = []; // 중복값 삭제 후 데이터 저장
- var dupCnt = 0;
-
- //첨부 주소 정보에서 연락처가 중복되는 경우 하나만 남기고 나머지는 삭제 하고 보여줌
- $.each(data, function(i, item){
-
- chk = true; //중복값 유무
-
- $.each(uniqData, function(j, item2){
-
- if(item.phone == item2.phone){
-
- chk = false;
- dupCnt = dupCnt + 1;
- console.log("++++++++++++++ dupCnt ::: "+ dupCnt);
-
- }
-
- });
-
- if(chk){
-
- uniqData.push(item);
-
- }
-
- });
-
- $("#rowDupCnt").text(dupCnt);
- return uniqData;
-
-}*/
-
-var dupliPhoneDataRealList = [];
-
-//중복 전화번호 체크하기
-function dupliPhoneData(data){
-
- var chk = true; //중복값 유무
- var uniqData = []; // 중복값 삭제 후 데이터 저장
- var dupCnt = 0;
-
- //첨부 주소 정보에서 연락처가 중복되는 경우 하나만 남기고 나머지는 삭제 하고 보여줌
- $.each(data, function(i, item){
-
- chk = true; //중복값 유무
-
- $.each(uniqData, function(j, item2){
- if(item.phone.length > 0){
- if(item.phone == item2.phone){
-
- chk = false;
- dupCnt = dupCnt + 1;
-
- }
- }
-
- });
-
- if(chk){
- uniqData.push(item);
- }
- else {
- // Get 중복 연락처
- GetDupliPhoneDataReal(item.phone);
- }
-
- });
-
- //중복건수 텍스트 입력해 주기
- $("#rowDupCnt").text(dupCnt);
-
- // 중복번호 버튼 노출
- if($("#btnAddrMassDupli").length > 0) {
- $("#btnAddrMassDupli").show();
- }
-
- // 중복번호(기존 주소록) 버튼 노출
- if($("#btnAddrMassSaveDupli").length > 0) {
- $("#btnAddrMassSaveDupli").hide();
- }
-
- return uniqData;
-}
-
-
-//연락처 중복검사 속도 개선 버전
-function getSpupDupliPhoneDataChk(data){
-
- var dataLen = data.length;
- const arrUnique = data.filter((character, idx, arr)=>{
- return arr.findIndex((item) => item.phone === character.phone) === idx
- });
-
- var uniqLen = arrUnique.length;
- var dupCnt = dataLen - uniqLen;
- //중복건수 텍스트 입력해 주기
- $("#rowDupCnt").text(dupCnt);
-
- return arrUnique;
-}
-
-// Get 중복 연락처
-function GetDupliPhoneDataReal(item) {
- var isDuplicate = false;
- if (dupliPhoneDataRealList.length == 0) {
- dupliPhoneDataRealList.push(item);
- }
- else {
- for (var i = 0; i < dupliPhoneDataRealList.length; i++) {
- if (dupliPhoneDataRealList[i] == item) {
- isDuplicate = true;
- }
- }
-
- if (isDuplicate) {
- return;
- }
- else {
- dupliPhoneDataRealList.push(item);
- }
- }
-}
-
-//중복 전화번호 체크하여 중복 갯수 리턴하기
-function dupliPhoneDataChk(data){
-
- var chk = true; //중복값 유무
- var uniqData = []; // 중복값 삭제 후 데이터 저장
- var dupCnt = 0;
-
- //첨부 주소 정보에서 연락처가 중복되는 경우 하나만 남기고 나머지는 삭제 하고 보여줌
- $.each(data, function(i, item){
-
- chk = true; //중복값 유무
-
- $.each(uniqData, function(j, item2){
-
- if(item.phone.length > 0){
-
- if(item.phone == item2.phone){
-
- chk = false;
- dupCnt = dupCnt + 1;
-
- }
-
- }
-
- });
-
- if(chk){
-
- uniqData.push(item);
-
- }
-
- });
-
- return dupCnt;
-
-}
-
-//특정 바이트수 만큼 문자열 잘라서 반환해주기
-function strUnderLineSubstring(str, maxLength){
-
- for(b=i=0;c=str.charCodeAt(i);) {
-
- b+=c>>7?2:1;
-
- if (b > maxLength)
-
- break;
-
- i++;
-
- }
-
- return str.substring(0,i);
-
-}
-
-
-//특정 글자수 만큼 문자열 잘라서 반환해주기
-function strMaxLengthSubstring(str, maxLength){
-
- for(b=i=0;c=str.charCodeAt(i);) {
-
- if (i > maxLength)
-
- break;
-
- i++;
-
- }
-
- return str.substring(0,i);
-
-}
-
-//문자열 글자수 반환해주기(한글, 영문, 특수문자, 엔터와 상관없이 글자수로 체크함)
-function strMaxCharacterCnt(str){
-
- var totLen = 0;
- for(b=i=0;c=str.charCodeAt(i);) {
- i++;
- totLen = i;
- }
- return totLen;
-}
-
-//문자입력 첫번째 글자가 한글, 숫자, 영문자가 아니면 경고 표시
-function strFirstCharCheck(str){
-
- var pattern1 = /[0-9]/;
- var pattern2 = /[a-zA-Z]/;
- var pattern3 = /[ㄱ-ㅎ|ㅏ-ㅣ|가-힣]/;
-
- var spChar = 0;
- for(var i=0; i
= '\u4E00' && str.charAt(i) <= '\u9FFF'){//한중일 공통한자일 경우
-
- if(rtnStr.length == 0){
- rtnStr = cont;
- }else{
- rtnStr = rtnStr + ", " + cont;
- }
-
- }else if(str.charAt(i) >= '\u2E80' && str.charAt(i) <= '\u2EFF'){//한자부수
-
- if(rtnStr.length == 0){
- rtnStr = cont;
- }else{
- rtnStr = rtnStr + ", " + cont;
- }
-
- }else if(str.charAt(i) >= '\u3400' && str.charAt(i) <= '\u4DB5'){//한자확장A
-
- if(rtnStr.length == 0){
- rtnStr = cont;
- }else{
- rtnStr = rtnStr + ", " + cont;
- }
-
- }
-
- }
-
- return rtnStr;
-}
-
-//받아온 str 에 이모지가 포함되어있는지 체크하여 갯수로 반환
-function kakaoTemplateEmojiCheck (str) {
- var regex = /[\u{1F004}-\u{1F9E6}]|[\u{1F600}-\u{1F9D0}]/gu;
- var usedEmoji = "";
- var returnFlag = true;
-
- var splitMsg = str.split(/.*?/u);
-
- for(var i=0; i < splitMsg.length; i++){
- if(splitMsg[i].match(regex)) {
- usedEmoji = usedEmoji + splitMsg[i];
- returnFlag = false;
- }
- }
- if(!returnFlag) alert("알림톡 내용에 이모지는 사용할 수 없습니다.\n이모지 삭제후 등록해주세요.\n(" + usedEmoji + ")");
-
- return returnFlag;
-}
-
-//받아온 str 에 이모지가 포함되어있는지 체크하여 갯수로 반환
-function emojiCheck (str) {
- var regex = /[\u{1F004}-\u{1F9E6}]|[\u{1F600}-\u{1F9D0}]/gu;
- var usedEmoji = "";
- var returnFlag = true;
-
- var splitMsg = str.split(/.*?/u);
-
- for(var i=0; i < splitMsg.length; i++){
- if(splitMsg[i].match(regex)) {
- usedEmoji = usedEmoji + splitMsg[i];
- returnFlag = false;
- }
- }
- if(!returnFlag) alert("문자 제목, 내용에 이모지는 사용할 수 없습니다.\n이모지 삭제후 발송해주세요.\n(" + usedEmoji + ")");
-
- return returnFlag;
-}
-
-function addrEmojiCheck (str) {
- var regex = /[\u{1F004}-\u{1F9E6}]|[\u{1F600}-\u{1F9D0}]/gu;
- var usedEmoji = "";
- var returnFlag = true;
-
- var splitMsg = str.split(/.*?/u);
-
- for(var i=0; i < splitMsg.length; i++){
- if(splitMsg[i].match(regex)) {
- usedEmoji = usedEmoji + splitMsg[i];
- returnFlag = false;
- }
- }
-
- if(!returnFlag) {
- //로딩창 hide
- $('.loading_layer').removeClass('active');
-
- alert("주소록 저장 목록 중 이모지를 사용할 수 없습니다.\n이모지 삭제후 발송해주세요.\n(" + usedEmoji + ")");
- }
-
- return returnFlag;
-}
-
-// 제목이 치환 문구 체크
-function getSpacialStringChk(mmsSubject){
-
- var returnStr = false;
-
- if(mmsSubject.indexOf("[*이름*]") > -1 || mmsSubject.indexOf("[*1*]") > -1 || mmsSubject.indexOf("[*2*]") > -1 || mmsSubject.indexOf("[*3*]") > -1 || mmsSubject.indexOf("[*4*]") > -1){
- returnStr = true;
- }
-
- return returnStr;
-
-}
-
-//커서 위치에 삽입
-function setCursorInsertText(pTxtArea, pAddTxt) {
- var txtArea = document.getElementById(pTxtArea);
- var txtValue = txtArea.value;
- var selectPos = txtArea.selectionStart; // 커서 위치 지정
- var beforeTxt = txtValue.substring(0, selectPos); // 기존텍스트 ~ 커서시작점 까지의 문자
- var afterTxt = txtValue.substring(txtArea.selectionEnd, txtValue.length); // 커서끝지점 ~ 기존텍스트 까지의 문자
- var addTxt = pAddTxt; // 추가 입력 할 텍스트
- txtArea.value = beforeTxt + addTxt + afterTxt;
-
- selectPos = selectPos + addTxt.length;
- txtArea.selectionStart = selectPos; // 커서 시작점을 추가 삽입된 텍스트 이후로 지정
- txtArea.selectionEnd = selectPos; // 커서 끝지점을 추가 삽입된 텍스트 이후로 지정
- txtArea.focus();
-}
-
-//받는사람 목록의 체크박스가 20개가 모두 체크 되었는지 확인
-function fnCallToChkAllCnt(){
-
- var chkCnt = 0;
- var totChkCnt = $("input:checkbox[name='chkCallTo']").length;
- var btnAllVal = $("#checkAll").val();
-
- //체크박스 체크된 갯수 구하기
- $("input:checkbox[name='chkCallTo']").each(function () {
- if($(this).is(':checked')){
- chkCnt++;
- };
- });
-
- //전체선택 체크 여부 값 변경해 주기
- //현재 체크된 체크박스 갯수와 전체 체크박스 갯수 비교하기
- if(totChkCnt > 0 && totChkCnt == chkCnt){
-
- if(btnAllVal == 'N'){
- $("#checkAll").val("Y");
- $("#checkAll").text("선택해제");
- }else{
- $("#checkAll").val("N");
- $("#checkAll").text("전체선택");
- }
-
- }else{
-
- $("#checkAll").val("N");
- $("#checkAll").text("전체선택");
-
- }
-
-}
-
-//선거문자 20건 수신자 목록 추가된 건수 및 발송 금액 변경해주기
-function fnChkCallToChange(){
-
- var callToCnt = 0;
- $("input[name=chkCallTo]").each(function(){
-
- var chkSts = $(this).is(':checked');
- if(chkSts){
- callToCnt++;
- }
- });
-
- //체크박스가 모두 체크 되어있는지 확인 하기
- fnCallToChkAllCnt();
-
- updateTotCnt(callToCnt); //전체 데이터 갯수 구하기
- totalPriceSum(callToCnt);
-
-}
-
-//Tabulator 주소록 그룹 목록일 경우 각 그룹 주소 갯수 합산해주기
-function getTabulatorLAddrGrpCnt(){
-
- var selectedData = tableL.getRows();
- var totAddrCnt = 0;
- for(var i=0; i < selectedData.length; i++){
-
- //일괄변환 문자에 콤마(,)가 들어가있으면 배열로 넘길때 문제가 발생하여 특수문자(§)로 치환하여 넘겨주도록 한다.
- var addrGrpCnt = tableL.getRows()[i].getData().addrGrpCnt;
-
- totAddrCnt = Number(totAddrCnt) + Number(addrGrpCnt);
-
- }
-
- return totAddrCnt;
+/**
+ * 휴대폰번호 유효성 체크
+ * true, false 반환
+ * 대시 유무 상관없음
+ */
+function checkHpNum(str) {
+
+ var regExp = /^(050[2345678]{1}|01[016789]{1})-?[0-9]{3,4}-?[0-9]{4}$/;
+ //var regExp = /^(01[016789]{1}|070|02|0[3-9]{1}[0-9]{1})-?[0-9]{3,4}-?[0-9]{4}$/; //지역번호(일반전화) 형식까지 체크해주는 정규식
+ return regExp.test(str);
+}
+
+/**
+ * 휴대폰번호만 유효성 체크
+ * true, false 반환
+ * 대시 유무 상관없음
+ */
+function checkOnlyHpNum(str) {
+
+ //var regExp = /^(050[234567]{1}|01[016789]{1})-?[0-9]{3,4}-?[0-9]{4}$/;
+ var regExp = /^(01[016789]{1})-?[0-9]{3,4}-?[0-9]{4}$/; //지역번호(일반전화) 형식까지 체크해주는 정규식
+ return regExp.test(str);
+}
+
+/**
+ * 팩스 번호 유효성 체크
+ * true, false 반환
+ * 앞 3자리를 체크 함
+ * -- 전국 지역번호
+ * 02 서울특별시
+ 031 경기도
+ 032 인천광역시
+ 033 강원도
+ 041 충청남도
+ 042 대전광역시
+ 043 충청북도
+ 044 세종특별자치시
+ 051 부산광역시
+ 052 울산광역시
+ 053 대구광역시
+ 054 경상북도
+ 055 경상남도
+ 061 전라남도
+ 062 광주광역시
+ 063 전라북도
+ 064 제주특별자치도
+
+ -- 타사부가번호
+ 030*
+ 050*
+ 060
+ 070
+ 080
+ 1**
+
+ 위 번호로 시작하는 팩스 번호만 허용함.
+ */
+function checkFaxNum(str) {
+ str = removeDash(str);
+ var subNum = str.substring(0,3);
+ var regExp = /^(02[0-9]{1}|030|050|060|070|080|0[3-6]{1}[1-5]{1}|1[0-9]{1}[0-9]{1})$/; //지역번호(일반전화) 형식까지 체크해주는 정규식
+ return regExp.test(subNum);
+}
+
+/*
+ * 일반전화 유효성 체크
+ * true, false 반환
+ *
+ * */
+function checkNorPhoneNum(str){
+
+ var regExp = /^(02|0[3-9]{1}[0-9]{1})-?[0-9]{3,4}-?[0-9]{4}$/;
+
+ /**
+ * 기간통신사업자 공통 부가서비스 번호 체크
+ * 번호 사업자
+ 1588,1577,1899 KT
+ 1544,1644,1661,1800 ,1833 LG유플러스
+ 1566,1600,1670 SK브로드밴드
+ 1688,1666 온세텔레콤
+ 1599 SK텔링크
+ 1877 한국케이블텔레콤
+ 1855 CJ헬로비전
+ 1661 alleh KT
+ *
+ * */
+
+ if(str.substring(0,2) == "15"){
+
+ regExp = /^(15[0-9]{2})-?[0-9]{4}$/;
+
+ }else if(str.substring(0,2) == "16"){
+
+ regExp = /^(16[0-9]{2})-?[0-9]{4}$/;
+
+ }else if(str.substring(0,2) == "18"){
+
+ regExp = /^(18[0-9]{2})-?[0-9]{4}$/;
+
+ }
+
+ return regExp.test(str);
+}
+
+/*
+ * 일반전화 / 핸드폰 번호 종류 확인
+ * true, false 반환
+ *
+ * */
+function checkTelHpType(str){
+
+ var subCall = str.substring(0,3); // 전화번호 앞 3자리 받아오기
+ var strType = ""; // 결과 반환
+
+ if(subCall != '010'
+ && subCall != '011'
+ && subCall != '016'
+ && subCall != '017'){//일반전화 번호이면
+
+ strType = "Tel";
+
+ }else{
+
+ strType = "Hp";
+ }
+
+ return strType;
+}
+
+
+/**
+ * 휴대폰번호 대시('-') 제거
+ */
+function removeDash(str) {
+ var regExp = new RegExp('-', 'g');
+ return str.replace(regExp, '');
+}
+
+/**
+ * 휴대폰번호 대시('-') 추가
+ * 대시 유무 상관없음
+ * 유효성 맞지 않을시 변환안됨.
+ */
+function addDash(str) {
+ return str.replace(/(^01[016789]{1}|070)([0-9]{3}|[0-9]{4})([0-9]{4})$/,"$1-$2-$3").replace("--", "-");
+}
+
+/**
+ * ReplaceAll (by javascript prototype)
+ * 정규식 패턴에서 \는 두 개 사용
+ */
+String.prototype.replaceAll = function(pattern, changeString) {
+ var regExp = new RegExp(pattern, 'g');
+ return this.replace(regExp, changeString);
+};
+
+/**
+ * 이메일 유효성 체크
+ * true, false 반환
+ *
+ */
+function checkEmail(str) {
+ var regExp = /^[A-Za-z0-9_\.\-]+@[A-Za-z0-9\-]+\.[A-Za-z0-9\-]+/;
+ return regExp.test(str);
+}
+
+/**
+ * XSS 체크하기
+ *
+ *
+ */
+
+function XSSCheck(str, level) {
+ if (level == undefined || level == 0) {
+ str = str.replace(/\<|\>|\"|\'|\%|\;|\(|\)|\&|\+|\-/g,"");
+ } else if (level != undefined && level == 1) {
+ str = str.replace(/\/g, ">");
+ }
+ return str;
+}
+
+
+//숫자 천단위 콤마 찍어주기
+function numberWithCommas(x) {
+ return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
+}
+
+function comma(num){
+ var len, point, str;
+ num = num + "";
+ point = num.length % 3;
+ len = num.length;
+ str = num.substring(0, point);
+ while (point < len) {
+ if (str != "") str += ",";
+ str += num.substring(point, point + 3);
+ point += 3;
+ }
+ return str;
+}
+
+
+function totalPriceSum(totRows){
+
+ var contents = $('#smsTxtArea').val(); //입력 문자 내용
+ var msgType = conTypeCheck(contents); //입력 문자 길이 체크
+ var collNumCnt = parseInt(totRows); //받는사람 건수
+ var price = 0; //개별 건수 금액
+ var totalPrice = 0; //전체 금액
+ //var strDot = [];
+ //var subPrice = "";
+ //var spPrice = "";
+ var totalStr = "0"; //전체 합계 금액
+ var userMoney = $('#hdUserMoney').text(); //헤더 영역 보유 금액 불러오기
+ var msgCnt = 0; //발송 가능 문자 건수
+ var imgCnt = $("#imgCnt").val(); // 현재 페이지에 첨부된 이미지 갯수
+
+ if(!userMoney > 0){
+
+ userMoney = 0;
+
+ }
+ //헤더 영역 보유 금액 콤마 문자 제거
+ if(userMoney != ''){
+
+ userMoney = userMoney.replaceAll("," , "");
+
+ }
+
+ /*if(msgType == "P"){//그림문자
+
+ //그림 이미지 갯수에 따른 금액 계산
+ if(imgCnt > 2){//그림 3장일경우
+ price = parseFloat($('#p3Price').val());
+ }else if(imgCnt > 1){//그림 2장일경우
+ price = parseFloat($('#p2Price').val());
+ }else{//그림 1장일 경우
+ price = parseFloat($('#pPrice').val());
+ }
+
+ msgCnt = parseFloat(userMoney) / price;
+
+ }else if(msgType == "M"){//장문 문자
+
+ price = parseFloat($('#mPrice').val());
+ msgCnt = parseFloat(userMoney) / price;
+
+ }else{//단문문자
+
+ price = parseFloat($('#sPrice').val());
+ msgCnt = parseFloat(userMoney) / price;
+
+ }*/
+
+ //금액 소수점 제거 하여 적용 20220623 소수점 버림 처리
+ if(msgType == "P"){//그림문자
+
+ //그림 이미지 갯수에 따른 금액 계산
+ if(imgCnt > 2){//그림 3장일경우
+ price = $('#p3Price').val();
+ }else if(imgCnt > 1){//그림 2장일경우
+ price = $('#p2Price').val();
+ }else{//그림 1장일 경우
+ price = $('#pPrice').val();
+ }
+
+ msgCnt = userMoney / price;
+
+ }else if(msgType == "M"){//장문 문자
+
+ price = $('#mPrice').val();
+ msgCnt = userMoney / price;
+
+ }else{//단문문자
+
+ price = $('#sPrice').val();
+ msgCnt = userMoney / price;
+
+ }
+
+ totalPrice = price * collNumCnt;
+
+ // 소수점 첫째자리 까지 표시
+ totalPrice = totalPrice.toFixed(1);
+
+ if(totalPrice > 0){
+
+ //totalStr = totalPrice.toFixed(2);
+ totalStr = totalPrice;
+
+ }
+
+ //개별 문자 단가 파라미터에 입력
+ $('#eachPrice').val(numberWithCommas(price));
+
+
+ //결제금액 합계 파라이터에 입력
+ $('#totPrice').val(numberWithCommas(totalStr));
+
+ //결제금액 합계 화면에 표시
+ $('#totalPriceTxt').text(numberWithCommas(totalStr));
+
+ //현재 문자 전송 가능 갯수 표시
+ $('.nowMsgCnt').text(numberWithCommas(msgCnt.toFixed()));
+
+ if(msgType == 'P'){
+
+ $('#nowMsgType').text("그림");
+
+ }else if(msgType == 'M'){
+
+ $('#nowMsgType').text("장문");
+
+ }else{
+
+ $('#nowMsgType').text("단문");
+
+ }
+
+ $('#repPriceTxt').hide();
+
+ return totalStr;
+
+}
+
+function replTotalPriceSum(msg_short, msg_long, totRows){
+
+ var shortPrice = 0; //단문 개별 건수 금액
+ var longPrice = 0; //장문 개별 건수 금액
+ var imgPrice = 0; //그림문자 개별 건수 금액
+ var totalPrice = 0; //전체 금액
+ var totalStr = "0"; //전체 합계 금액
+ var contents = $('#smsTxtArea').val(); //입력 문자 내용
+ var msgType = conTypeCheck(contents); //입력 문자 길이 체크
+ var userMoney = $('#hdUserMoney').text(); //헤더 영역 보유 금액 불러오기
+ var msgCnt = 0; //발송 가능 문자 건수
+ var imgCnt = $("#imgCnt").val(); // 현재 페이지에 첨부된 이미지 갯수
+ var collNumCnt = parseInt(totRows); //받는사람 건수
+ var totalCntTxt = "";
+
+ //금액 소수점 제거하여 금액 처리
+ if(msgType == "P"){//그림문자
+
+ //그림 이미지 갯수에 따른 금액 계산
+ if(imgCnt > 2){//그림 3장일경우
+ imgPrice = $('#p3Price').val();
+ }else if(imgCnt > 1){//그림 2장일경우
+ imgPrice = $('#p2Price').val();
+
+ }else{//그림 1장일 경우
+ imgPrice = $('#pPrice').val();
+ }
+
+ msgCnt = userMoney.replaceAll(",","") / imgPrice;
+
+ var imgTotPrice = imgPrice * collNumCnt;
+ imgTotPrice = Math.round(imgTotPrice * 100) / 100; //소수점 2자리 반올리 처리해주기
+
+ totalPrice = totalPrice + imgTotPrice;
+
+ //input hidden 개별 문자 단가 파라미터에 입력
+ $('#eachPrice').val(numberWithCommas(imgPrice));
+
+ //input hidden 결제금액 합계 파라이터에 입력
+ $('#totPrice').val(numberWithCommas(totalStr));
+
+ //결제금액 합계 화면에 표시
+ $('#totalPriceTxt').text(numberWithCommas(totalStr));
+
+ //현재 문자 전송 가능 갯수 표시
+ $('.nowMsgCnt').text(numberWithCommas(msgCnt.toFixed()));
+
+ //변환문자 건수 내용 표기
+ totalCntTxt = "그림 : " + totRows + " 건";;
+
+ }else{
+
+ if(msg_long > 0){//장문 문자
+
+ longPrice = $('#mPrice').val();
+ var longTotPrice = longPrice * msg_long;
+ longTotPrice = Math.round(longTotPrice * 100) / 100; //소수점 2자리 반올리 처리해주기
+
+ totalPrice = totalPrice + longTotPrice;
+
+ //input hidden 개별 문자 단가 파라미터에 입력
+ $('#eachPrice').val(numberWithCommas(longPrice));
+
+ //변환문자 건수 내용 표기
+ totalCntTxt = "장문 : " + msg_long + " 건";
+
+ //변환장문 건수 Hidden 폼에 넣어주기
+ $('#longMsgCnt').val(msg_long);
+
+ }else{
+
+ //변환장문 건수 Hidden 폼에 넣어주기
+ $('#longMsgCnt').val(msg_long);
+
+ }
+
+ if(msg_short > 0){//단문문자
+
+ shortPrice = $('#sPrice').val();
+ var shortTotPrice = shortPrice * msg_short;
+ shortTotPrice = Math.round(shortTotPrice * 100) / 100; //소수점 2자리 반올리 처리해주기
+
+ totalPrice = totalPrice + shortTotPrice;
+
+ //input hidden 개별 문자 단가 파라미터에 입력
+ $('#eachPrice').val(numberWithCommas(shortPrice));
+
+ if(msg_long > 0){
+
+ //변환문자 건수 내용 표기
+ totalCntTxt = totalCntTxt + "/ 단문 : " + msg_short + " 건";
+
+ }else{
+
+ //변환문자 건수 내용 표기
+ totalCntTxt = "단문 : " + msg_short + " 건";
+
+ }
+
+ //변환단문 건수 Hidden 폼에 넣어주기
+ $('#shortMsgCnt').val(msg_short);
+
+ }else{
+
+ //변환단문 건수 Hidden 폼에 넣어주기
+ $('#shortMsgCnt').val(msg_short);
+
+ }
+
+ }
+
+
+ if(totalPrice > 0){
+
+ //totalStr = totalPrice.toFixed(2);
+ totalStr = totalPrice;
+
+ }
+
+ //input hidden 결제금액 합계 파라이터에 입력
+ $('#totPrice').val(numberWithCommas(totalStr));
+
+ //결제금액 합계 화면에 표시
+ $('#totalPriceTxt').text(numberWithCommas(totalStr));
+
+ //결제금액 합계 파라이터에 입력
+ $('#totPrice').val(numberWithCommas(totalStr));
+
+ //특정문구 일괄 변환으로 인한 단/장문 건수 표시
+ $('#repPriceTxt').show();
+ $('#repPriceTxt').html("(" + totalCntTxt + ")");
+
+ if(msgType == 'P'){
+
+ $('#nowMsgType').text("그림");
+
+ }else if(msgType == 'M'){
+
+ $('#nowMsgType').text("장문");
+
+ }else{
+
+ $('#nowMsgType').text("단문");
+
+ }
+
+ return totalStr;
+
+}
+
+//예약 날짜 체크 함수
+function getGday(date) { /* 현재와 이전 날자의 차이를 년-개월-일 형태로 가져오기 */
+ var now = new Date().getTime(); // 현재 날짜를 시간으로 변환
+ var d = new Date(date.substring(0, 10)).getTime(); // 이전 날짜를 시간으로 변환
+ var gap = now - d; // 현재 날짜와 이전 날짜의 차이를 밀리초 시간으로 구한다.
+ var result = Math.floor(gap/(1000 * 60 * 60 * 24)); // 날짜 차이를 일수로 계산
+
+ var year = Math.floor(result / 365); // 현재 날짜 년 - 개월 - 일 수로 표현하기
+ var month = Math.floor(result % 365 / 30);
+ var day = result % 365 % 30;
+
+ return result;
+
+ //각 년도, 월, 일을 따로 리턴하려면 아래를 사용하면 됨
+ /* return {
+ year: year,
+ month: month,
+ day: day
+ }; */
+}
+
+/*
+ * 예약 날짜 오류 체크 함수
+ * 날짜, 시간, 분 파라미터 전달
+ * 현재 날짜와 파라미터 시간의 분 간격 계산해주기
+ * */
+function getGapDayTime(paramDate,paramHours,paramMin) { /* 현재와 이전 날자의 차이를 년-개월-일 형태로 가져오기 */
+
+ var now = new Date();
+
+ //현재시간 구분하기
+ var year = now.getFullYear();
+ var month = now.getMonth() + 1 ;
+ var day = now.getDate();
+ var hours = now.getHours();
+ var min = now.getMinutes();
+
+ //비교시간
+ var stDt = paramDate.split("/");
+ var stYear = stDt[0];
+ var stMonth = stDt[1];
+ var stDay = stDt[2];
+
+ var nowDate = new Date(year, month-1, day, hours, min);
+ var stDate = new Date(stYear, stMonth-1, stDay, paramHours, paramMin);
+ var elapsedMSec = stDate.getTime() - nowDate.getTime();
+ var elapseMin = elapsedMSec / 1000 / 60;
+
+ elapseMin = parseInt(elapseMin);
+
+ return elapseMin;
+
+ //각 년도, 월, 일을 따로 리턴하려면 아래를 사용하면 됨
+ /* return {
+ year: year,
+ month: month,
+ day: day
+ }; */
+}
+
+// 중복 주소 체크하기
+/*function dupliAddrData(data){
+
+ var chk = true; //중복값 유무
+ var uniqData = []; // 중복값 삭제 후 데이터 저장
+ var dupCnt = 0;
+
+ //첨부 주소 정보에서 연락처가 중복되는 경우 하나만 남기고 나머지는 삭제 하고 보여줌
+ $.each(data, function(i, item){
+
+ chk = true; //중복값 유무
+
+ $.each(uniqData, function(j, item2){
+
+ if(item.phone == item2.phone){
+
+ chk = false;
+ dupCnt = dupCnt + 1;
+ console.log("++++++++++++++ dupCnt ::: "+ dupCnt);
+
+ }
+
+ });
+
+ if(chk){
+
+ uniqData.push(item);
+
+ }
+
+ });
+
+ $("#rowDupCnt").text(dupCnt);
+ return uniqData;
+
+}*/
+
+var dupliPhoneDataRealList = [];
+
+//중복 전화번호 체크하기
+function dupliPhoneData(data){
+
+ var chk = true; //중복값 유무
+ var uniqData = []; // 중복값 삭제 후 데이터 저장
+ var dupCnt = 0;
+
+ //첨부 주소 정보에서 연락처가 중복되는 경우 하나만 남기고 나머지는 삭제 하고 보여줌
+ $.each(data, function(i, item){
+
+ chk = true; //중복값 유무
+
+ $.each(uniqData, function(j, item2){
+ if(item.phone.length > 0){
+ if(item.phone == item2.phone){
+
+ chk = false;
+ dupCnt = dupCnt + 1;
+
+ }
+ }
+
+ });
+
+ if(chk){
+ uniqData.push(item);
+ }
+ else {
+ // Get 중복 연락처
+ GetDupliPhoneDataReal(item.phone);
+ }
+
+ });
+
+ //중복건수 텍스트 입력해 주기
+ $("#rowDupCnt").text(dupCnt);
+
+ // 중복번호 버튼 노출
+ if($("#btnAddrMassDupli").length > 0) {
+ $("#btnAddrMassDupli").show();
+ }
+
+ // 중복번호(기존 주소록) 버튼 노출
+ if($("#btnAddrMassSaveDupli").length > 0) {
+ $("#btnAddrMassSaveDupli").hide();
+ }
+
+ return uniqData;
+}
+
+
+//연락처 중복검사 속도 개선 버전
+function getSpupDupliPhoneDataChk(data){
+
+ var dataLen = data.length;
+ const arrUnique = data.filter((character, idx, arr)=>{
+ return arr.findIndex((item) => item.phone === character.phone) === idx
+ });
+
+ var uniqLen = arrUnique.length;
+ var dupCnt = dataLen - uniqLen;
+ //중복건수 텍스트 입력해 주기
+ $("#rowDupCnt").text(dupCnt);
+
+ return arrUnique;
+}
+
+// Get 중복 연락처
+function GetDupliPhoneDataReal(item) {
+ var isDuplicate = false;
+ if (dupliPhoneDataRealList.length == 0) {
+ dupliPhoneDataRealList.push(item);
+ }
+ else {
+ for (var i = 0; i < dupliPhoneDataRealList.length; i++) {
+ if (dupliPhoneDataRealList[i] == item) {
+ isDuplicate = true;
+ }
+ }
+
+ if (isDuplicate) {
+ return;
+ }
+ else {
+ dupliPhoneDataRealList.push(item);
+ }
+ }
+}
+
+//중복 전화번호 체크하여 중복 갯수 리턴하기
+function dupliPhoneDataChk(data){
+
+ var chk = true; //중복값 유무
+ var uniqData = []; // 중복값 삭제 후 데이터 저장
+ var dupCnt = 0;
+
+ //첨부 주소 정보에서 연락처가 중복되는 경우 하나만 남기고 나머지는 삭제 하고 보여줌
+ $.each(data, function(i, item){
+
+ chk = true; //중복값 유무
+
+ $.each(uniqData, function(j, item2){
+
+ if(item.phone.length > 0){
+
+ if(item.phone == item2.phone){
+
+ chk = false;
+ dupCnt = dupCnt + 1;
+
+ }
+
+ }
+
+ });
+
+ if(chk){
+
+ uniqData.push(item);
+
+ }
+
+ });
+
+ return dupCnt;
+
+}
+
+//특정 바이트수 만큼 문자열 잘라서 반환해주기
+function strUnderLineSubstring(str, maxLength){
+
+ for(b=i=0;c=str.charCodeAt(i);) {
+
+ b+=c>>7?2:1;
+
+ if (b > maxLength)
+
+ break;
+
+ i++;
+
+ }
+
+ return str.substring(0,i);
+
+}
+
+
+//특정 글자수 만큼 문자열 잘라서 반환해주기
+function strMaxLengthSubstring(str, maxLength){
+
+ for(b=i=0;c=str.charCodeAt(i);) {
+
+ if (i > maxLength)
+
+ break;
+
+ i++;
+
+ }
+
+ return str.substring(0,i);
+
+}
+
+//문자열 글자수 반환해주기(한글, 영문, 특수문자, 엔터와 상관없이 글자수로 체크함)
+function strMaxCharacterCnt(str){
+
+ var totLen = 0;
+ for(b=i=0;c=str.charCodeAt(i);) {
+ i++;
+ totLen = i;
+ }
+ return totLen;
+}
+
+//문자입력 첫번째 글자가 한글, 숫자, 영문자가 아니면 경고 표시
+function strFirstCharCheck(str){
+
+ var pattern1 = /[0-9]/;
+ var pattern2 = /[a-zA-Z]/;
+ var pattern3 = /[ㄱ-ㅎ|ㅏ-ㅣ|가-힣]/;
+
+ var spChar = 0;
+ for(var i=0; i= '\u4E00' && str.charAt(i) <= '\u9FFF'){//한중일 공통한자일 경우
+
+ if(rtnStr.length == 0){
+ rtnStr = cont;
+ }else{
+ rtnStr = rtnStr + ", " + cont;
+ }
+
+ }else if(str.charAt(i) >= '\u2E80' && str.charAt(i) <= '\u2EFF'){//한자부수
+
+ if(rtnStr.length == 0){
+ rtnStr = cont;
+ }else{
+ rtnStr = rtnStr + ", " + cont;
+ }
+
+ }else if(str.charAt(i) >= '\u3400' && str.charAt(i) <= '\u4DB5'){//한자확장A
+
+ if(rtnStr.length == 0){
+ rtnStr = cont;
+ }else{
+ rtnStr = rtnStr + ", " + cont;
+ }
+
+ }
+
+ }
+
+ return rtnStr;
+}
+
+//받아온 str 에 이모지가 포함되어있는지 체크하여 갯수로 반환
+function kakaoTemplateEmojiCheck (str) {
+ var regex = /[\u{1F004}-\u{1F9E6}]|[\u{1F600}-\u{1F9D0}]/gu;
+ var usedEmoji = "";
+ var returnFlag = true;
+
+ var splitMsg = str.split(/.*?/u);
+
+ for(var i=0; i < splitMsg.length; i++){
+ if(splitMsg[i].match(regex)) {
+ usedEmoji = usedEmoji + splitMsg[i];
+ returnFlag = false;
+ }
+ }
+ if(!returnFlag) alert("알림톡 내용에 이모지는 사용할 수 없습니다.\n이모지 삭제후 등록해주세요.\n(" + usedEmoji + ")");
+
+ return returnFlag;
+}
+
+//받아온 str 에 이모지가 포함되어있는지 체크하여 갯수로 반환
+function emojiCheck (str) {
+ var regex = /[\u{1F004}-\u{1F9E6}]|[\u{1F600}-\u{1F9D0}]/gu;
+ var usedEmoji = "";
+ var returnFlag = true;
+
+ var splitMsg = str.split(/.*?/u);
+
+ for(var i=0; i < splitMsg.length; i++){
+ if(splitMsg[i].match(regex)) {
+ usedEmoji = usedEmoji + splitMsg[i];
+ returnFlag = false;
+ }
+ }
+ if(!returnFlag) alert("문자 제목, 내용에 이모지는 사용할 수 없습니다.\n이모지 삭제후 발송해주세요.\n(" + usedEmoji + ")");
+
+ return returnFlag;
+}
+
+function addrEmojiCheck (str) {
+ var regex = /[\u{1F004}-\u{1F9E6}]|[\u{1F600}-\u{1F9D0}]/gu;
+ var usedEmoji = "";
+ var returnFlag = true;
+
+ var splitMsg = str.split(/.*?/u);
+
+ for(var i=0; i < splitMsg.length; i++){
+ if(splitMsg[i].match(regex)) {
+ usedEmoji = usedEmoji + splitMsg[i];
+ returnFlag = false;
+ }
+ }
+
+ if(!returnFlag) {
+ //로딩창 hide
+ $('.loading_layer').removeClass('active');
+
+ alert("주소록 저장 목록 중 이모지를 사용할 수 없습니다.\n이모지 삭제후 발송해주세요.\n(" + usedEmoji + ")");
+ }
+
+ return returnFlag;
+}
+
+// 제목이 치환 문구 체크
+function getSpacialStringChk(mmsSubject){
+
+ var returnStr = false;
+
+ if(mmsSubject.indexOf("[*이름*]") > -1 || mmsSubject.indexOf("[*1*]") > -1 || mmsSubject.indexOf("[*2*]") > -1 || mmsSubject.indexOf("[*3*]") > -1 || mmsSubject.indexOf("[*4*]") > -1){
+ returnStr = true;
+ }
+
+ return returnStr;
+
+}
+
+//커서 위치에 삽입
+function setCursorInsertText(pTxtArea, pAddTxt) {
+ var txtArea = document.getElementById(pTxtArea);
+ var txtValue = txtArea.value;
+ var selectPos = txtArea.selectionStart; // 커서 위치 지정
+ var beforeTxt = txtValue.substring(0, selectPos); // 기존텍스트 ~ 커서시작점 까지의 문자
+ var afterTxt = txtValue.substring(txtArea.selectionEnd, txtValue.length); // 커서끝지점 ~ 기존텍스트 까지의 문자
+ var addTxt = pAddTxt; // 추가 입력 할 텍스트
+ txtArea.value = beforeTxt + addTxt + afterTxt;
+
+ selectPos = selectPos + addTxt.length;
+ txtArea.selectionStart = selectPos; // 커서 시작점을 추가 삽입된 텍스트 이후로 지정
+ txtArea.selectionEnd = selectPos; // 커서 끝지점을 추가 삽입된 텍스트 이후로 지정
+ txtArea.focus();
+}
+
+//받는사람 목록의 체크박스가 20개가 모두 체크 되었는지 확인
+function fnCallToChkAllCnt(){
+
+ var chkCnt = 0;
+ var totChkCnt = $("input:checkbox[name='chkCallTo']").length;
+ var btnAllVal = $("#checkAll").val();
+
+ //체크박스 체크된 갯수 구하기
+ $("input:checkbox[name='chkCallTo']").each(function () {
+ if($(this).is(':checked')){
+ chkCnt++;
+ };
+ });
+
+ //전체선택 체크 여부 값 변경해 주기
+ //현재 체크된 체크박스 갯수와 전체 체크박스 갯수 비교하기
+ if(totChkCnt > 0 && totChkCnt == chkCnt){
+
+ if(btnAllVal == 'N'){
+ $("#checkAll").val("Y");
+ $("#checkAll").text("선택해제");
+ }else{
+ $("#checkAll").val("N");
+ $("#checkAll").text("전체선택");
+ }
+
+ }else{
+
+ $("#checkAll").val("N");
+ $("#checkAll").text("전체선택");
+
+ }
+
+}
+
+//선거문자 20건 수신자 목록 추가된 건수 및 발송 금액 변경해주기
+function fnChkCallToChange(){
+
+ var callToCnt = 0;
+ $("input[name=chkCallTo]").each(function(){
+
+ var chkSts = $(this).is(':checked');
+ if(chkSts){
+ callToCnt++;
+ }
+ });
+
+ //체크박스가 모두 체크 되어있는지 확인 하기
+ fnCallToChkAllCnt();
+
+ updateTotCnt(callToCnt); //전체 데이터 갯수 구하기
+ totalPriceSum(callToCnt);
+
+}
+
+//Tabulator 주소록 그룹 목록일 경우 각 그룹 주소 갯수 합산해주기
+function getTabulatorLAddrGrpCnt(){
+
+ var selectedData = tableL.getRows();
+ var totAddrCnt = 0;
+ for(var i=0; i < selectedData.length; i++){
+
+ //일괄변환 문자에 콤마(,)가 들어가있으면 배열로 넘길때 문제가 발생하여 특수문자(§)로 치환하여 넘겨주도록 한다.
+ var addrGrpCnt = tableL.getRows()[i].getData().addrGrpCnt;
+
+ totAddrCnt = Number(totAddrCnt) + Number(addrGrpCnt);
+
+ }
+
+ return totAddrCnt;
}
\ No newline at end of file