1482 lines
52 KiB
JavaScript
1482 lines
52 KiB
JavaScript
$(window).on("keydown", function (e) {
|
|
if (e.keyCode == 116 /*|| e.keyCode == 123*/) {
|
|
prv(); return false;
|
|
}
|
|
if (e.keyCode == 119 && typeof (save) == "function" && $("#layermessage:visible").length < 1) {
|
|
save();
|
|
}
|
|
else if (e.keyCode == 115 && typeof (del) == "function" && $("#layermessage:visible").length < 1) {
|
|
del();
|
|
}
|
|
else if (e.keyCode == 13 && $("#confirmbox:visible").length > 0) {
|
|
confirmok();
|
|
}
|
|
else if (e.keyCode == 27 && $("#confirmbox:visible").length > 0) {
|
|
confirmtoggle();
|
|
}
|
|
else if (e.keyCode == 27 && $("#layermessage:visible").length > 0) {
|
|
$(_focusitem).focus();
|
|
hidelayermsg();
|
|
}
|
|
});
|
|
$(document).ready(function () {
|
|
|
|
$("body").on("keydown", ".int, .intdot", function (e) {
|
|
|
|
}).on("keyup", ".int, .intdot, input.mobile,input[type='text'],input[type='password']", function (e) {
|
|
if (($(this).hasClass("int") || $(this).hasClass("intdot") || $(this).hasClass("mobile")) && $(this).val() !== null && $(this).val() !== '' && e.keyCode != 8 && e.keyCode != 109 && e.keyCode != 189 && e.keyCode != 46 && e.keyCode != 190 && e.keyCode != 110 && e.keyCode != 109 && e.keycode != 189 && e.keyCode != 13
|
|
&& !(e.keyCode > 47 && e.keyCode < 58) && !(e.keyCode > 95 && e.keyCode < 106)) {
|
|
$(this).val($(this).val().replace(/[^0-9.-]/g, ''));
|
|
if ($(this).hasClass("int") && isNaN(parseInt($(this).val(), 10))) {
|
|
if (!$(this).hasClass("datazero")) {
|
|
$(this).val("");
|
|
}
|
|
else {
|
|
$(this).val(0);
|
|
}
|
|
}
|
|
else if ($(this).hasClass("double") && isNaN(parseFloat($(this).val()))) {
|
|
if (!$(this).hasClass("datazero")) {
|
|
$(this).val("");
|
|
}
|
|
else {
|
|
$(this).val(0);
|
|
}
|
|
}
|
|
}
|
|
if ($(this).val() == "") {
|
|
if (($(this).attr("id") || "") != "" && ($(this).attr("placeholder") || "") != "" && $("#ph_" + $(this).attr("id")).length < 1) {
|
|
var ua = window.navigator.userAgent;
|
|
var msie = ua.indexOf("MSIE ");
|
|
if (msie < 0) {
|
|
msie = ua.indexOf("Trident/");
|
|
}
|
|
if (msie > -1) {
|
|
$("label.phplaceholder").remove();
|
|
$("<label class=\"phplaceholder\" id=\"ph_" + $(this).attr("id") + "\">" + $(this).attr("placeholder") + "<label>").insertAfter($(this));
|
|
$("#ph_" + $(this).attr("id")).css("top", ($(this).position().top + 10) + 'px');
|
|
}
|
|
}
|
|
} else {
|
|
$("label.phplaceholder").remove();
|
|
}
|
|
}).on("change", ".int, .intdot, .email, .mobile, .mobilefmt, .telfmt", function () {
|
|
if ($(this).hasClass("email")) {
|
|
$("#" + $(this).attr("data-bind")).val(vals($(this).parent().find(".emaildata" + $(this).attr("data-bind")), '@'));
|
|
}
|
|
else if ($(this).hasClass("mobile")) {
|
|
$("#" + $(this).attr("data-bind")).val(vals($(this).parent().find(".mobiledata" + $(this).attr("data-bind"))));
|
|
}
|
|
else if ($(this).hasClass("mobilefmt")) {
|
|
$(this).val(formatmobile($(this).val()));
|
|
}
|
|
else if ($(this).hasClass("telfmt")) {
|
|
$(this).val(formattel($(this).val()));
|
|
}
|
|
else if ($(this).hasClass("int") && isNaN(parseInt($(this).val(), 10))) {
|
|
if (!$(this).hasClass("datazero")) {
|
|
$(this).val("");
|
|
}
|
|
else {
|
|
$(this).val(0);
|
|
}
|
|
}
|
|
else if ($(this).hasClass("intdot") && isNaN(parseFloat($(this).val()))) {
|
|
if (!$(this).hasClass("datazero")) {
|
|
$(this).val("");
|
|
}
|
|
else {
|
|
$(this).val(0);
|
|
}
|
|
}
|
|
}).on("click", ".int, .intdot", function () {
|
|
$(this)[0].select();
|
|
}).on("focus", ".int, .intdot, input[type='text'], input[type='password']", function () {
|
|
if ($(this).hasClass("int") || $(this).hasClass("intdot")) {
|
|
$(this).val($(this).val().replace(/,/gi, ''));
|
|
}
|
|
if (($(this).attr("id") || "") != "" && ($(this).attr("placeholder") || "") != "" && $("#ph_" + $(this).attr("id")).length < 1 && $(this).val() == "") {
|
|
var ua = window.navigator.userAgent;
|
|
var msie = ua.indexOf("MSIE ");
|
|
if (msie < 0) {
|
|
msie = ua.indexOf("Trident/");
|
|
}
|
|
if (msie > -1) {
|
|
$("label.phplaceholder").remove();
|
|
$("<label class=\"phplaceholder\" id=\"ph_" + $(this).attr("id") + "\">" + $(this).attr("placeholder") + "<label>").insertAfter($(this));
|
|
$("#ph_" + $(this).attr("id")).css("top", ($(this).position().top + 10) + 'px');
|
|
}
|
|
}
|
|
}).on("focusout", "input.datepicker-input", function () {
|
|
var v = $(this).val().replace(/[^0-9]/g, '');
|
|
if (v.length != 8) {
|
|
$(this).val("");
|
|
} else {
|
|
$(this).val(v.substr(0, 4) + "-" + v.substr(4, 2) + "-" + v.substr(6));
|
|
}
|
|
}).on("focusout", ".int, .intdot, input[type='text'], input[type='password']", function () {
|
|
$("label.phplaceholder").remove();
|
|
});
|
|
$('#breadcrumb dd > span').click(function () {
|
|
if ($(this).is('.on')) {
|
|
$(this).next().slideUp(300);
|
|
$(this).removeClass('on');
|
|
} else {
|
|
$('#breadcrumb dd > ul').slideUp(300);
|
|
$('#breadcrumb dd > span').removeClass('on');
|
|
$(this).addClass('on');
|
|
$(this).next().slideDown(300);
|
|
}
|
|
});
|
|
$(document).on("click", "a", function () {
|
|
if ($(this).attr("href") == "#") {
|
|
prv();
|
|
}
|
|
});
|
|
$("body").on("keydown", "input[type=text], input[type=password]", function (e) {
|
|
if (e.keyCode == 13) {
|
|
var index = $('input[type=text], input[type=password]').index(this) + 1;
|
|
$('input[type=text], input[type=password]').eq(index).focus();
|
|
if ($(this).closest("form").length == 1) {
|
|
if ($(this).closest("form").find("input[type=text]").length == 1) {
|
|
prv();
|
|
}
|
|
}
|
|
if (($(this).attr("data-eval") || "") != "") {
|
|
eval($(this).attr("data-eval"));
|
|
}
|
|
}
|
|
}).on("click", "a.btnpage", function () {
|
|
if (!$(this).hasClass("on")) {
|
|
if ($(this).hasClass("first")) {
|
|
eval($(this).closest(".paging").attr("data-method") + "('F')");
|
|
}
|
|
else if ($(this).hasClass("prev")) {
|
|
eval($(this).closest(".paging").attr("data-method") + "('P')");
|
|
}
|
|
else if ($(this).hasClass("next")) {
|
|
eval($(this).closest(".paging").attr("data-method") + "('N')");
|
|
}
|
|
else if ($(this).hasClass("last")) {
|
|
eval($(this).closest(".paging").attr("data-method") + "('L')");
|
|
}
|
|
else {
|
|
eval($(this).closest(".paging").attr("data-method") + "('" + $(this).text()+"')");
|
|
}
|
|
}
|
|
});
|
|
$('.popClose').click(function () {
|
|
$('.popWrap').css('display', 'none');
|
|
$('html, body').removeClass('lock');
|
|
});
|
|
document.oncontextmenu = disableit;
|
|
});
|
|
var _uploadeditorimageitem;
|
|
var _uploadeditorimagecallback;
|
|
var _uploadeditorimagertn;
|
|
function checkpop() {
|
|
var cpop = open("", "checkpop", '');
|
|
if (cpop == null) {
|
|
alert("팝업이 차단되어 있습니다. 차단을 해제해 주세요.");
|
|
return false;
|
|
} else {
|
|
cpop.close();
|
|
return true;
|
|
}
|
|
}
|
|
function mpgPopClose(selector) {
|
|
$(selector || '.mpgPop').hide();
|
|
$('html, body').removeClass('lock');
|
|
}
|
|
function cbeditorupload() {
|
|
if (_uploadeditorimagertn.code == 1000) {
|
|
$(_uploadeditorimageitem).summernote('editor.insertImage', _uploadeditorimagertn.obj.uri);
|
|
}
|
|
}
|
|
function uploadeditorimage(files, el, fdata, _callback, _url) {
|
|
_url = _url || '/fcommon/UploadEditorImageUrl';
|
|
_uploadeditorimagecallback = _callback;
|
|
_uploadeditorimageitem = el;
|
|
$.ajax({
|
|
data: fdata,
|
|
type: "POST",
|
|
url: _url,
|
|
cache: false,
|
|
contentType: false,
|
|
processData: false,
|
|
success: function (result) {
|
|
_uploadeditorimagertn = result;
|
|
eval(_uploadeditorimagecallback.substr(_uploadeditorimagecallback.length - 1, 1) == ")" ? _uploadeditorimagecallback : (_uploadeditorimagecallback + "()"));
|
|
}
|
|
});
|
|
}
|
|
function gologin(url, returnurl) {
|
|
url = url || '/Account/Index';
|
|
if ((returnurl || "") != "") {
|
|
url += "?ru=" + returnurl;
|
|
}
|
|
location.href = url;
|
|
}
|
|
function gopage(fid, pid, pno, a) {
|
|
fid = fid || "mform";
|
|
pid = pid || "pagenum";
|
|
$("#" + fid).find("#" + pid).val(pno);
|
|
bglayer();
|
|
$("#"+fid).submit();
|
|
}
|
|
var _vc_cmino = 0;
|
|
var _vc_istaste = false;
|
|
var _vc_lectno = 0;
|
|
var _vc_pseq = 0;
|
|
var _vcwin;
|
|
var _vcistaste = false;
|
|
function viewcontents(cmino, istaste, lectno, pseq) {
|
|
lectno = lectno || 0;
|
|
pseq = getint(pseq);
|
|
_vc_cmino = cmino;
|
|
_vc_istaste = istaste;
|
|
_vc_lectno = lectno;
|
|
_vc_pseq = pseq;
|
|
_vcistaste = istaste;
|
|
if (ismobile()) {
|
|
confirmtoggle(true, "사용 중인 요금제에 따라 데이터 요금이 발생할 수 있습니다.", "viewcontentsok()");
|
|
} else {
|
|
viewcontentsok();
|
|
}
|
|
}
|
|
function viewcontentsok() {
|
|
if (!_vcistaste) {
|
|
//로그인체크
|
|
capp("/focommon/isauth", {}, "cbviewcontents");
|
|
} else {
|
|
cbviewcontents();
|
|
}
|
|
}
|
|
|
|
|
|
var _cdmsisopenning = 0;
|
|
|
|
// 팝업 창 참조를 전역으로 유지
|
|
let globalPopup = null;
|
|
|
|
function cbviewcontents() {
|
|
if (_vcistaste || capResult.code == 1000) {
|
|
// 백그라운드 레이어 숨기기
|
|
$("#bglayer").hide();
|
|
_cdmsisopenning = 1;
|
|
|
|
const url = `/CDMS/Play${_vc_istaste ? "Taste" : ""}?cmino=${_vc_cmino}&ismobile=${ismobile() ? '1' : '0'}&lectno=${_vc_lectno}&pseq=${_vc_pseq}`;
|
|
|
|
// 팝업 옵션
|
|
const nWidth = 1080;
|
|
const nHeight = screen.availHeight - 100;
|
|
const nLeft = Math.round((screen.availWidth - nWidth) / 2);
|
|
const nTop = Math.round((screen.availHeight - nHeight) / 2);
|
|
|
|
const popOption = `
|
|
width=${nWidth},
|
|
height=${nHeight},
|
|
top=${nTop},
|
|
left=${nLeft},
|
|
toolbar=no,
|
|
menubar=no,
|
|
location=no,
|
|
resizable=yes,
|
|
status=yes,
|
|
scrollbars=yes`.replace(/\s+/g, '');
|
|
|
|
// 이미 팝업이 열려 있는지 확인
|
|
if (globalPopup && !globalPopup.closed) {
|
|
try {
|
|
// 1초 딜레이 적용
|
|
setTimeout(() => {
|
|
globalPopup.location.href = url; // URL 업데이트 (필요에 따라)
|
|
globalPopup.focus(); // 이미 열린 팝업 창 활성화
|
|
}, 1000);
|
|
} catch (e) {
|
|
console.error("기존 팝업 접근 실패: ", e);
|
|
globalPopup = null; // 접근 실패 시 참조 정리
|
|
}
|
|
} else {
|
|
globalPopup = window.open(url, 'contentsview', popOption);
|
|
|
|
if (!globalPopup) {
|
|
msg("팝업이 차단되어 있습니다. 차단을 해제해 주세요.");
|
|
} else {
|
|
try {
|
|
globalPopup.focus(); // 포커스 이동
|
|
} catch (e) {
|
|
console.error("팝업 포커스 실패: ", e);
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
location.href = "/Account/Index?ru=" + location.href.replace(/#/gi, '');
|
|
}
|
|
}
|
|
|
|
function poppaging(id, ptc, pno) {
|
|
$("#" + id).attr("data-lastpage", 1);
|
|
if (ptc > 10) {
|
|
if (pno > 10) {
|
|
$("#" + id).append("<a href=\"#\" class=\"btnpage first\">맨앞</a>");
|
|
}
|
|
if (pno > 1) {
|
|
$("#" + id).append("<a href=\"#\" class=\"btnpage prev\">이전</a>");
|
|
}
|
|
var __lastpno = (getint(ptc / 10) + (ptc % 10 > 0 ? 1 : 0));
|
|
$("#" + id).attr("data-lastpage", __lastpno);
|
|
var pstart = getint((pno - 1) / 10) * 10 + 1;
|
|
var __paging = "<ul>";
|
|
for (var i = pstart; i < pstart + 10; i++) {
|
|
__paging += "<li class=\"" + (pno == i ? "on" : "") + "\"><a href=\"#\" class=\"btnpage \">" + i + "</a></li>";
|
|
if (i == __lastpno) {
|
|
break;
|
|
}
|
|
}
|
|
$("#" + id).append(__paging + "</ul>");
|
|
if (pno < __lastpno) {
|
|
$("#" + id).append("<a class=\"btnpage next\">다음</a>");
|
|
$("#" + id).append("<a class=\"btnpage last\">맨뒤</a>");
|
|
}
|
|
}
|
|
}
|
|
function mobilefmt(phoneNum) {
|
|
var regExp = /(01[016789])([1-9]{1}[0-9]{2,3})([0-9]{4})$/;
|
|
var myArray;
|
|
if (regExp.test(phoneNum)) {
|
|
myArray = regExp.exec(phoneNum);
|
|
return true;
|
|
}
|
|
regExp = /(01[016789])-([1-9]{1}[0-9]{2,3})-([0-9]{4})$/;
|
|
if (regExp.test(phoneNum)) {
|
|
myArray = regExp.exec(phoneNum);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
function formatmobile(phoneNum) {
|
|
phoneNum = phoneNum.replace(/-/gi, '');
|
|
if (mobilefmt(phoneNum)) {
|
|
var rtnNum;
|
|
var regExp = /(01[016789])([1-9]{1}[0-9]{2,3})([0-9]{4})$/;
|
|
var myArray;
|
|
if (regExp.test(phoneNum)) {
|
|
myArray = regExp.exec(phoneNum); rtnNum = myArray[1] + '-' + myArray[2] + '-' + myArray[3]; return rtnNum;
|
|
} else { return phoneNum; }
|
|
} else { return phoneNum; }
|
|
}
|
|
function telfmt(phoneNum) {
|
|
var regExp;
|
|
var myArray;
|
|
if (phoneNum.length == 8) {
|
|
regExp = /([1-9]{1}[0-9]{3})([0-9]{4})$/;
|
|
if (regExp.test(phoneNum)) {
|
|
myArray = regExp.exec(phoneNum);
|
|
return true;
|
|
}
|
|
regExp = /([1-9]{1}[0-9]{3})-([0-9]{4})$/;
|
|
if (regExp.test(phoneNum)) {
|
|
myArray = regExp.exec(phoneNum);
|
|
return true;
|
|
}
|
|
} else if (phoneNum.length == 9) {
|
|
regExp = /([0]{1}[2]{1})([1-9]{1}[0-9]{2})([0-9]{4})$/;
|
|
if (regExp.test(phoneNum)) {
|
|
myArray = regExp.exec(phoneNum);
|
|
return true;
|
|
}
|
|
regExp = /([0]{1}[2]{1})-([1-9]{1}[0-9]{2})-([0-9]{4})$/;
|
|
if (regExp.test(phoneNum)) {
|
|
myArray = regExp.exec(phoneNum);
|
|
return true;
|
|
}
|
|
} else if (phoneNum.length == 10) {
|
|
if (phoneNum.substr(0, 2) == "02") {
|
|
regExp = /([0]{1}[2]{1})([1-9]{1}[0-9]{3})([0-9]{4})$/;
|
|
if (regExp.test(phoneNum)) {
|
|
myArray = regExp.exec(phoneNum);
|
|
return true;
|
|
}
|
|
regExp = /([0]{1}[2]{1})-([1-9]{1}[0-9]{3})-([0-9]{4})$/;
|
|
if (regExp.test(phoneNum)) {
|
|
myArray = regExp.exec(phoneNum);
|
|
return true;
|
|
}
|
|
} else {
|
|
regExp = /([0]{1}[3-9]{1}[0-9]{1})([1-9]{1}[0-9]{2})([0-9]{4})$/;
|
|
if (regExp.test(phoneNum)) {
|
|
myArray = regExp.exec(phoneNum);
|
|
return true;
|
|
}
|
|
regExp = /([0]{1}[3-9]{1}[0-9]{1})-([1-9]{1}[0-9]{2})-([0-9]{4})$/;
|
|
if (regExp.test(phoneNum)) {
|
|
myArray = regExp.exec(phoneNum);
|
|
return true;
|
|
}
|
|
}
|
|
} else {
|
|
regExp = /([0]{1}[3-9]{1}[0-9]{1})([1-9]{1}[0-9]{3})([0-9]{4})$/;
|
|
if (regExp.test(phoneNum)) {
|
|
myArray = regExp.exec(phoneNum);
|
|
return true;
|
|
}
|
|
regExp = /([0]{1}[3-9]{1}[0-9]{1})-([1-9]{1}[0-9]{3})-([0-9]{4})$/;
|
|
if (regExp.test(phoneNum)) {
|
|
myArray = regExp.exec(phoneNum);
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
function formattel(phoneNum) {
|
|
phoneNum = phoneNum.replace(/-/gi, '');
|
|
if (telfmt(phoneNum)) {
|
|
var rtnNum;
|
|
var regExp;
|
|
var myArray;
|
|
if (phoneNum.length == 8) {
|
|
regExp = /([1-9]{1}[0-9]{3})([0-9]{4})$/;
|
|
} else if (phoneNum.length == 9) {
|
|
regExp = /([0]{1}[2]{1})([1-9]{1}[0-9]{2})([0-9]{4})$/;
|
|
} else if (phoneNum.length == 10) {
|
|
if (phoneNum.substr(0, 2) == "02") {
|
|
regExp = /([0]{1}[2]{1})([1-9]{1}[0-9]{3})([0-9]{4})$/;
|
|
} else {
|
|
regExp = /([0]{1}[3-9]{1}[0-9]{1})([1-9]{1}[0-9]{2})([0-9]{4})$/;
|
|
}
|
|
} else {
|
|
regExp = /([0]{1}[3-9]{1}[0-9]{1})([1-9]{1}[0-9]{3})([0-9]{4})$/;
|
|
}
|
|
if (regExp.test(phoneNum)) {
|
|
myArray = regExp.exec(phoneNum);
|
|
if (phoneNum.length == 8) {
|
|
return myArray[1] + '-' + myArray[2];
|
|
} else {
|
|
return myArray[1] + '-' + myArray[2] + '-' + myArray[3];
|
|
}
|
|
}
|
|
}
|
|
return phoneNum;
|
|
}
|
|
function bindComma(v) {
|
|
var fv = v.toString().replace(/,/gi, '');
|
|
var fv2 = "";
|
|
if (fv.indexOf('.') > -1) {
|
|
if (fv.split('.')[0].length > 3) {
|
|
for (var fvi = fv.split('.')[0].length - 1; fvi > -1; fvi--) {
|
|
fv2 = fv.split('.')[0].substr(fvi, 1) + (fv2 != "" && (fv2.replace(/,/gi, '').length % 3) < 1 ? "," : "") + fv2;
|
|
}
|
|
fv = fv2 + "." + fv.split('.')[1];
|
|
}
|
|
}
|
|
else if (fv.length > 3) {
|
|
for (var fvi2 = fv.length - 1; fvi2 > -1; fvi2--) {
|
|
fv2 = fv.substr(fvi2, 1) + (fv2 != "" && (fv2.replace(/,/gi, '').length % 3) < 1 ? "," : "") + fv2;
|
|
}
|
|
fv = fv2;
|
|
}
|
|
return fv;
|
|
}
|
|
function gourl(url) {
|
|
location.href = url;
|
|
}
|
|
function disableit() {return false;}
|
|
function refresh() {
|
|
bglayer();
|
|
location.href = location.href.replace('#', '');
|
|
}
|
|
function getnull(v) {
|
|
return v || "";
|
|
}
|
|
function getdb(v, norpspliter, nullto) {
|
|
nullto = nullto || "";
|
|
if ((norpspliter || false)) {
|
|
return v=="0" ? "0" : (v || nullto).toString();
|
|
}
|
|
return v == "0" ? v : (v || nullto).toString().replace(/:/gi, '').replace(/;/gi, '');
|
|
}
|
|
function getint(v) {
|
|
v = v == null ? 0 : v;
|
|
v = v.toString();
|
|
v = v.replace(/,/gi, '');
|
|
if (isNaN(parseInt(v, 10)))
|
|
return 0;
|
|
return parseInt(v, 10);
|
|
}
|
|
function prv() { try { if (event.preventDefault) { event.preventDefault(); } } catch (ex) { try { ffEvent.preventDefault(); } catch (ex2) { var exceptionmsg = ex2; } } return false; }
|
|
function gomenu(pno, ptype, url, a, no, no2) {
|
|
no = no || 0;
|
|
setv("menupageno", pno);
|
|
setv("menupagedatakey", no);
|
|
setv("menupagedatakey2", no2);
|
|
if (ptype == 3) {
|
|
if (no > 0) {
|
|
$("#menuform").attr("action", "/Board/View").submit();
|
|
} else {
|
|
$("#menuform").attr("action", "/Board/List").submit();
|
|
}
|
|
} else if (ptype == 5) {
|
|
eval(url);
|
|
} else {
|
|
bglayer();
|
|
location.href = (url == '' ? '/Home/Html' : url) + ((url == '' ? '/Home/Html' : url).indexOf('?') > -1 ? '' : '?') + 'menupageno=' + pno + '&menupagedatakey=' + no + '&menupagedatakey2=' + no2;
|
|
//$("#menuform").attr("action", url == '' ? "/Home/Html" : url).submit();
|
|
}
|
|
}
|
|
function viewlayer(pno, a, title) {
|
|
$("#mainpoptitle").text(title);
|
|
capp("/focommon/Html", { pno: pno }, "cbhtmlget");
|
|
}
|
|
function cbhtmlget() {
|
|
$("#mainpopcont").html(capResult.obj.pagehtml);
|
|
$(".mainpopwrap").show();
|
|
}
|
|
function breadcrumb(a) {
|
|
$("#ulm1 li").addClass("hidden");
|
|
$("#ulm1 li.m" + $(a).closest("li").attr("data-pno")).removeClass("hidden");
|
|
$("#ul0span").next().slideUp(300);
|
|
$("#ul0span").removeClass('on');
|
|
$("#ul0span").text($(a).text());
|
|
$("#ul1span").text('-');
|
|
$("#ul1span").addClass('on');
|
|
$("#ul1span").next().slideDown(300);
|
|
}
|
|
function val(id) {
|
|
if ($("#" + id).length < 1) {
|
|
return "";
|
|
}
|
|
return $.trim($("#" + id).val());
|
|
}
|
|
function vals(els, sepa) {
|
|
sepa = sepa || "";
|
|
var rtn = "";
|
|
$.each(els, function (i, r) {
|
|
rtn += sepa + ($(r).val() || "");
|
|
});
|
|
return rtn == "" ? rtn : rtn.substr(sepa.length);
|
|
}
|
|
function focus(id, isel) {
|
|
isel = isel || false;
|
|
id = id || "";
|
|
if (id != "") {
|
|
if (isel) {
|
|
$(id).focus();
|
|
$([document.documentElement, document.body]).animate({
|
|
scrollTop: $(id).offset().top - (ismobile() ? 80 : 120)
|
|
}, 700);
|
|
} else {
|
|
$("#" + id).focus();
|
|
$([document.documentElement, document.body]).animate({
|
|
scrollTop: $("#" + id).offset().top - (ismobile() ? 80 : 120)
|
|
}, 700);
|
|
}
|
|
}
|
|
}
|
|
var _jsislayer2, isAutoMsg, _bging, _callback, capResult, capOK, isCaping, _hideBG, _noerror;
|
|
function cap(url, formid, callback, getpost, autoMsg, noBG, jsislayer2) {
|
|
_jsislayer2 = jsislayer2 || false;
|
|
if (!isCaping) {
|
|
isAutoMsg = autoMsg || false;
|
|
_bging = noBG || false;
|
|
if (!_bging) {
|
|
ajaxing();
|
|
}
|
|
if (_jsislayer2) {
|
|
bglayer2();
|
|
}
|
|
_callback = callback;
|
|
capResult = null;
|
|
capOK = false;
|
|
isCaping = true;
|
|
clearComma();
|
|
$.ajax({
|
|
type: getpost || "post",
|
|
url: url,
|
|
data: $("#" + formid).serialize(),
|
|
success: function (r) {
|
|
isCaping = false;
|
|
capResult = r;
|
|
setcap();
|
|
}, error: function (e) {
|
|
isCaping = false;
|
|
console.log(e.responseText);
|
|
if (_jsislayer2) {
|
|
msg2("잠시 후 다시 요청해주세요.");
|
|
}
|
|
else {
|
|
msg("잠시 후 다시 요청해주세요.");
|
|
}
|
|
}, complete: function () {
|
|
ajaxing(false);
|
|
}
|
|
});
|
|
}
|
|
else {
|
|
console.log("다른 작업을 처리중입니다. 잠시후 다시 작업해주세요.");
|
|
}
|
|
}
|
|
|
|
function capp(url, p, callback, getpost, autoMsg, noBG, jsislayer2, hideBG, noerror, sync) {
|
|
_jsislayer2 = jsislayer2 || false;
|
|
_noerror = noerror || false;
|
|
_hideBG = hideBG || false;
|
|
|
|
// 동기식 요청은 권장되지 않지만, 기존 코드 호환성을 위해 유지
|
|
// 단, 경고 메시지 출력
|
|
_async = !(sync || false);
|
|
if (sync) {
|
|
console.warn("동기식 Ajax 요청은 권장되지 않으며 iOS에서 문제를 일으킬 수 있습니다.");
|
|
}
|
|
|
|
if (!isCaping) {
|
|
isAutoMsg = autoMsg || false;
|
|
_bging = noBG || false;
|
|
|
|
if (!_bging) {
|
|
ajaxing();
|
|
}
|
|
|
|
if (_jsislayer2) {
|
|
bglayer2();
|
|
}
|
|
|
|
_callback = callback;
|
|
capResult = null;
|
|
capOK = false;
|
|
isCaping = true;
|
|
|
|
// 기존 함수 호출 유지, 존재 확인 후 실행
|
|
if (typeof clearComma === 'function') {
|
|
try {
|
|
clearComma();
|
|
} catch (e) {
|
|
console.error("clearComma 함수 실행 오류:", e);
|
|
}
|
|
}
|
|
|
|
// Ajax 요청 설정
|
|
const ajaxSettings = {
|
|
type: getpost || "post",
|
|
url: url,
|
|
data: p,
|
|
async: _async,
|
|
timeout: _async ? 30000 : undefined, // 비동기 요청만 타임아웃 설정
|
|
success: function (r) {
|
|
isCaping = false;
|
|
capResult = r;
|
|
// iOS 호환성을 위한 추가 처리
|
|
setTimeout(function () {
|
|
setcap();
|
|
}, 0);
|
|
},
|
|
error: function (xhr, status, error) {
|
|
isCaping = false;
|
|
console.log("Ajax 오류:", status, error);
|
|
|
|
if (xhr.responseText) {
|
|
console.log("응답 내용:", xhr.responseText);
|
|
}
|
|
|
|
// 타임아웃 오류 별도 처리
|
|
if (status === "timeout") {
|
|
if (_jsislayer2) {
|
|
alert("요청 시간이 초과되었습니다. 다시 시도해 주세요.");
|
|
} else {
|
|
alert("요청 시간이 초과되었습니다. 다시 시도해 주세요.");
|
|
}
|
|
}
|
|
else if (!_noerror) {
|
|
if (_jsislayer2) {
|
|
alert("잠시 후 다시 요청해주세요.");
|
|
}
|
|
else {
|
|
alert("잠시 후 다시 요청해주세요.");
|
|
}
|
|
}
|
|
},
|
|
complete: function () {
|
|
// iOS에서의 지연 문제 방지를 위한 setTimeout 사용
|
|
setTimeout(function () {
|
|
ajaxing(false);
|
|
}, 0);
|
|
}
|
|
};
|
|
|
|
// iOS 특정 버전에서의 캐시 문제 방지
|
|
if (navigator.userAgent.match(/(iPad|iPhone|iPod)/g)) {
|
|
ajaxSettings.cache = false;
|
|
|
|
// URL에 타임스탬프 추가하여 캐시 방지
|
|
const timestamp = new Date().getTime();
|
|
ajaxSettings.url = ajaxSettings.url +
|
|
(ajaxSettings.url.indexOf('?') >= 0 ? '&' : '?') +
|
|
'_t=' + timestamp;
|
|
}
|
|
|
|
$.ajax(ajaxSettings);
|
|
}
|
|
else if (!_noerror) {
|
|
console.log("다른 작업을 처리중입니다. 잠시후 다시 작업해주세요.");
|
|
}
|
|
}
|
|
|
|
function capfile(url, data, callback, noeval, setBG, jsislayer2) {
|
|
// 로딩바 표시 추가
|
|
showLoadingImage();
|
|
|
|
noeval = noeval || false;
|
|
_jsislayer2 = jsislayer2 || false;
|
|
_setBG = setBG || false;
|
|
// 백그라운드 레이어 표시
|
|
if (_setBG) {
|
|
bglayer();
|
|
}
|
|
if (_jsislayer2) {
|
|
bglayer2();
|
|
}
|
|
// iOS 호환성을 위한 처리
|
|
// FormData 객체 확인 및 필요시 수정
|
|
if (data instanceof FormData) {
|
|
// iOS에서 FormData 디버깅을 위한 로그 (개발 중에만 사용)
|
|
console.log("FormData 항목 수:", [...data.entries()].length);
|
|
}
|
|
// 콜백 함수 실행 헬퍼
|
|
function executeCallback(result) {
|
|
// 로딩바 숨김 추가
|
|
hideLoadingImage();
|
|
|
|
if (_setBG) {
|
|
$("#bglayer").hide();
|
|
}
|
|
if (noeval) {
|
|
// 함수 객체로 직접 호출
|
|
if (typeof callback === 'function') {
|
|
callback(result);
|
|
}
|
|
}
|
|
else {
|
|
// 기존 방식 유지 (eval 사용)
|
|
// 보안상 권장되지 않지만 기존 코드 호환성 유지
|
|
try {
|
|
window.capResult = result; // 전역 변수로 결과 저장
|
|
if (typeof callback === 'string') {
|
|
if (callback.substr(callback.length - 1, 1) == ")") {
|
|
eval(callback);
|
|
} else {
|
|
eval(callback + "()");
|
|
}
|
|
}
|
|
} catch (e) {
|
|
console.error("콜백 실행 오류:", e);
|
|
}
|
|
}
|
|
}
|
|
var ajaxRequest = $.ajax({
|
|
type: "POST",
|
|
url: url,
|
|
contentType: false,
|
|
processData: false,
|
|
data: data,
|
|
timeout: 60000,
|
|
xhr: function () {
|
|
var xhr = $.ajaxSettings.xhr();
|
|
// 업로드 진행 상황 모니터링 (iOS에서 파일 업로드 진행 확인)
|
|
if (xhr.upload) {
|
|
xhr.upload.addEventListener('progress', function (e) {
|
|
if (e.lengthComputable) {
|
|
var percent = Math.round((e.loaded / e.total) * 100);
|
|
console.log("업로드 진행률: " + percent + "%");
|
|
}
|
|
}, false);
|
|
}
|
|
return xhr;
|
|
}
|
|
});
|
|
// 에러 처리
|
|
ajaxRequest.fail(function (jqXHR, textStatus, errorThrown) {
|
|
console.error("Ajax 요청 실패:", textStatus, errorThrown);
|
|
// 타임아웃인 경우 별도 처리
|
|
if (textStatus === "timeout") {
|
|
alert("요청 시간이 초과되었습니다. 다시 시도해 주세요.");
|
|
// 로딩바 숨김 추가 (타임아웃 시)
|
|
hideLoadingImage();
|
|
}
|
|
else {
|
|
// 기존 에러 처리 로직 유지 (하지만 에러 시 다른 처리를 권장)
|
|
executeCallback({
|
|
code: -1,
|
|
message: "요청 처리 중 오류가 발생했습니다",
|
|
error: textStatus
|
|
});
|
|
}
|
|
});
|
|
|
|
ajaxRequest.done(function (data) {
|
|
if (data && data.code == 1000) {
|
|
executeCallback(data);
|
|
}
|
|
else {
|
|
console.warn("서버 응답 코드가 1000이 아닙니다:", data);
|
|
executeCallback(data);
|
|
}
|
|
});
|
|
}
|
|
|
|
function capfileform(url, fid, callback, iseval, getpost, autoMsg, noBG, jsislayer2) {
|
|
_jsislayer2 = jsislayer2 || false;
|
|
if (!isCaping) {
|
|
// 로딩바 표시 추가
|
|
showLoadingImage();
|
|
|
|
isAutoMsg = autoMsg || false;
|
|
_bging = noBG || false;
|
|
if (!_bging) { ajaxing(); }
|
|
if (_jsislayer2) { bglayer2(); }
|
|
_callback = callback;
|
|
capResult = null;
|
|
capOK = false;
|
|
isCaping = true;
|
|
// 폼 요소 직접 참조
|
|
const form = document.getElementById(fid);
|
|
// iOS 호환성을 위한 FormData 생성 방식 개선
|
|
let formData;
|
|
try {
|
|
// 기본 FormData 생성 시도
|
|
formData = new FormData(form);
|
|
// iOS 호환성 검사 - 파일 입력 필드 확인
|
|
const fileInputs = form.querySelectorAll('input[type="file"]');
|
|
let hasFiles = false;
|
|
fileInputs.forEach(input => {
|
|
if (input.files && input.files.length > 0) {
|
|
hasFiles = true;
|
|
// 파일 입력 필드 값이 제대로 FormData에 들어갔는지 확인
|
|
const fieldName = input.name || 'file';
|
|
if (!formData.has(fieldName)) {
|
|
console.log(`iOS 호환성: 수동으로 ${fieldName} 추가`);
|
|
// 수동으로 파일 추가
|
|
for (let i = 0; i < input.files.length; i++) {
|
|
formData.append(fieldName, input.files[i]);
|
|
}
|
|
}
|
|
}
|
|
});
|
|
// 디버깅용 로그
|
|
console.log('FormData 생성 완료:', hasFiles ? '파일 포함' : '파일 없음');
|
|
} catch (error) {
|
|
console.error('FormData 생성 오류:', error);
|
|
// 대체 방식으로 FormData 생성
|
|
formData = new FormData();
|
|
// 폼 필드 수동 추가
|
|
const formElements = form.elements;
|
|
for (let i = 0; i < formElements.length; i++) {
|
|
const field = formElements[i];
|
|
const name = field.name;
|
|
if (!name) continue;
|
|
if (field.type === 'file') {
|
|
for (let j = 0; j < field.files.length; j++) {
|
|
formData.append(name, field.files[j]);
|
|
}
|
|
}
|
|
else if (field.type !== 'submit' && field.type !== 'button') {
|
|
formData.append(name, field.value);
|
|
}
|
|
}
|
|
}
|
|
// 네트워크 요청 타임아웃 설정
|
|
const ajaxTimeout = 60000; // 60초
|
|
$.ajax({
|
|
type: getpost || "post",
|
|
url: url,
|
|
data: formData,
|
|
contentType: false,
|
|
processData: false,
|
|
timeout: ajaxTimeout,
|
|
success: function (r) {
|
|
isCaping = false;
|
|
capResult = r;
|
|
setcap();
|
|
// 로딩바 숨김 추가
|
|
hideLoadingImage();
|
|
},
|
|
error: function (e) {
|
|
isCaping = false;
|
|
console.log('Ajax 오류:', e.status, e.statusText);
|
|
console.log(e.responseText);
|
|
if (e.status === 0 && e.statusText === 'timeout') {
|
|
alert("요청 시간이 초과되었습니다. 다시 시도해주세요.");
|
|
}
|
|
else if (_jsislayer2) {
|
|
alert("개발담당자에게 문의해주세요");
|
|
}
|
|
else {
|
|
alert("개발담당자에게 문의해주세요.");
|
|
}
|
|
// 로딩바 숨김 추가
|
|
hideLoadingImage();
|
|
},
|
|
complete: function () {
|
|
ajaxing(false);
|
|
// complete에도 로딩바 숨김 추가 (중복 호출 방지를 위해 다른 방법 고려 가능)
|
|
hideLoadingImage();
|
|
}
|
|
});
|
|
}
|
|
else {
|
|
console.log("다른 작업을 처리중입니다. 잠시후 다시 작업해주세요.");
|
|
}
|
|
}
|
|
|
|
function setcap() {
|
|
// 결과가 없는 경우 예외 처리
|
|
if (!capResult) {
|
|
console.error("capResult가 정의되지 않았습니다");
|
|
return;
|
|
}
|
|
|
|
if (capResult.code === 1000) {
|
|
capOK = true;
|
|
capResultObj = capResult.obj;
|
|
capResultMsg = capResult.msg;
|
|
}
|
|
|
|
// 인증 관련 오류 처리
|
|
if (capResult.code == 9991) {
|
|
alert("인증시간이 초과되어 로그아웃되었습니다.");
|
|
setTimeout(function () {
|
|
location.href = '/Account/Error?code=9991';
|
|
}, 100); // iOS에서 alert 후 즉시 리디렉션 문제 방지
|
|
}
|
|
else if (capResult.code == 9992) {
|
|
alert("로그인 정보가 일치하지 않아 다시 로그인을 진행하셔야 합니다.\n(다른 디바이스에 로그인 또는 Cookie정보를 확인할 수 없습니다.)");
|
|
setTimeout(function () {
|
|
location.href = '/Account/Error?code=9992';
|
|
}, 100); // iOS에서 alert 후 즉시 리디렉션 문제 방지
|
|
}
|
|
else {
|
|
// 자동 메시지 처리
|
|
if (isAutoMsg) {
|
|
switch (capResult.code) {
|
|
case 1000: showOK(); break;
|
|
case 9999: alert("서버접속이 원활하지 않습니다"); break;
|
|
case 9998: alert("권한이 없는 요청입니다"); break;
|
|
case 9997: alert("권한(로그인)이 없는 요청입니다"); break;
|
|
case 9996: alert("검색된 데이터가 없습니다"); break;
|
|
case 9995: alert("적용된 데이터가 없습니다"); break;
|
|
default:
|
|
// 개발 모드에서만 상세 로그 출력
|
|
console.log("응답 코드:", capResult.code);
|
|
console.log("응답 메시지:", capResult.msg);
|
|
if (capResult.obj) console.log("응답 데이터:", capResult.obj);
|
|
break;
|
|
}
|
|
}
|
|
else {
|
|
capResultMsg = capResult.code + ": " + capResult.msg;
|
|
}
|
|
|
|
// 콜백 함수 실행
|
|
if (_callback) {
|
|
try {
|
|
if (typeof _callback === "function") {
|
|
_callback(capResult);
|
|
}
|
|
else if (typeof _callback === "string") {
|
|
// 문자열 콜백 처리 - eval 사용을 최소화
|
|
if (_callback.indexOf(")") > -1) {
|
|
// 이미 괄호가 포함된 경우
|
|
window.setTimeout(function () {
|
|
try {
|
|
eval(_callback);
|
|
} catch (e) {
|
|
console.error("콜백 실행 오류:", e);
|
|
}
|
|
}, 0);
|
|
}
|
|
else {
|
|
// 괄호 추가 필요
|
|
window.setTimeout(function () {
|
|
try {
|
|
eval(_callback + "()");
|
|
} catch (e) {
|
|
console.error("콜백 실행 오류:", e);
|
|
}
|
|
}, 0);
|
|
}
|
|
}
|
|
} catch (e) {
|
|
console.error("콜백 실행 중 오류 발생:", e);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
/** 로딩이미지 보여주기 */
|
|
function showLoadingImage() {
|
|
// 이미 존재하는 경우 중복 생성 방지
|
|
if (document.getElementById('custom-loading-overlay')) {
|
|
return;
|
|
}
|
|
|
|
// 로딩 이미지 요소 생성
|
|
const loadingDiv = document.createElement('div');
|
|
loadingDiv.id = 'custom-loading-overlay';
|
|
|
|
// 인라인 스타일 대신 클래스 사용을 위한 스타일 추가
|
|
const style = document.createElement('style');
|
|
style.textContent = `
|
|
#custom-loading-overlay {
|
|
position: fixed;
|
|
top: 0;
|
|
left: 0;
|
|
width: 100%;
|
|
height: 100%;
|
|
background-color: rgba(0, 0, 0, 0.5);
|
|
display: flex;
|
|
justify-content: center;
|
|
align-items: center;
|
|
z-index: 9999;
|
|
}
|
|
|
|
#custom-loading-spinner {
|
|
width: 40px;
|
|
height: 40px;
|
|
background-color: #fff;
|
|
border-radius: 100%;
|
|
-webkit-animation: sk-scaleout 1.0s infinite ease-in-out;
|
|
animation: sk-scaleout 1.0s infinite ease-in-out;
|
|
}
|
|
|
|
@-webkit-keyframes sk-scaleout {
|
|
0% { -webkit-transform: scale(0) }
|
|
100% { -webkit-transform: scale(1.0); opacity: 0; }
|
|
}
|
|
|
|
@keyframes sk-scaleout {
|
|
0% { transform: scale(0); -webkit-transform: scale(0); }
|
|
100% { transform: scale(1.0); -webkit-transform: scale(1.0); opacity: 0; }
|
|
}
|
|
|
|
/* 애니메이션 미지원 브라우저용 대체 스타일 */
|
|
.no-animation #custom-loading-spinner {
|
|
background-color: #3498db;
|
|
border: 5px solid #f3f3f3;
|
|
}
|
|
`;
|
|
document.head.appendChild(style);
|
|
|
|
// 브라우저 애니메이션 지원 확인
|
|
const supportsAnimation = 'AnimationEvent' in window ||
|
|
'WebKitAnimationEvent' in window ||
|
|
'MozAnimationEvent' in window ||
|
|
'msAnimationEvent' in window ||
|
|
'OAnimationEvent' in window;
|
|
|
|
// 기본 로딩 스피너
|
|
const spinnerDiv = document.createElement('div');
|
|
spinnerDiv.id = 'custom-loading-spinner';
|
|
|
|
// 애니메이션을 지원하지 않는 브라우저에는 정적 스타일 적용
|
|
if (!supportsAnimation) {
|
|
loadingDiv.className = 'no-animation';
|
|
}
|
|
|
|
loadingDiv.appendChild(spinnerDiv);
|
|
document.body.appendChild(loadingDiv);
|
|
}
|
|
|
|
/** 로딩이미지 제거 */
|
|
function hideLoadingImage() {
|
|
const loadingDiv = document.getElementById('custom-loading-overlay');
|
|
if (loadingDiv) {
|
|
// 스타일 요소도 정리
|
|
const style = document.querySelector('style[id^="custom-loading-style"]');
|
|
if (style) {
|
|
document.head.removeChild(style);
|
|
}
|
|
document.body.removeChild(loadingDiv);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
function ajaxing(tf) {
|
|
if (!_jsislayer2) {
|
|
bglayer(false);
|
|
$("#bgprogress").hide();
|
|
if (tf == null || tf === true) {
|
|
bglayer();
|
|
$("#bgprogress").show();
|
|
}
|
|
}
|
|
else {
|
|
bglayer2(false);
|
|
if (tf == null || tf === true) {
|
|
bglayer();
|
|
}
|
|
}
|
|
}
|
|
function bglayer(tf) {
|
|
if (tf == null || tf === true || (_bging && !_hideBG)) {
|
|
$("#bglayer").show();
|
|
}
|
|
else {
|
|
$("#bglayer").hide();
|
|
}
|
|
}
|
|
function bglayer2(tf) {
|
|
if (tf == null || tf === true) {
|
|
$("#bglayer2").show();
|
|
}
|
|
else {
|
|
$("#bglayer2").hide();
|
|
}
|
|
}
|
|
function clearComma() {
|
|
$.each($("input.int, input.double"), function (i, c) {
|
|
$(c).val($(c).val().replace(/,/gi, ''));
|
|
});
|
|
}
|
|
|
|
var _focusitem;
|
|
var _focusitem2;
|
|
var _okm;
|
|
function msg(m, t, bging, fi, okm, okmt, hidebtn) {
|
|
okmt = okmt || 0;
|
|
hidebtn = hidebtn || false;
|
|
_okm = okm || "";
|
|
fi = fi || "";
|
|
if (fi == "x") {
|
|
_focusitem = "";
|
|
} else {
|
|
_focusitem = fi == "" ? $("input:focus, select:focus, textarea:focus") : $(fi);
|
|
}
|
|
if (hidebtn) {
|
|
$("#layermessage a.mainokbutton").hide();
|
|
}
|
|
else {
|
|
$("#layermessage a.mainokbutton").unbind("click");
|
|
$("#layermessage a.mainokbutton").on("click", function () {
|
|
if (_okm == "" && _focusitem != "") {
|
|
$(_focusitem).focus();
|
|
}
|
|
else {
|
|
eval(_okm);
|
|
}
|
|
});
|
|
}
|
|
if (okm != "" && okmt > 0) {
|
|
setTimeout(function () {
|
|
eval(_okm);
|
|
}, okmt);
|
|
}
|
|
t = t || 10;
|
|
bging = bging || false;
|
|
if ($("#layermessage a.mainokbutton").length > 0) {
|
|
$("#layermessage a.mainokbutton").focus();
|
|
}
|
|
setTimeout(function () {
|
|
bglayer();
|
|
msglayer(m, bging);
|
|
}, t);
|
|
}
|
|
function msg2(m, t, fi) {
|
|
_focusitem2 = (fi || "") == "" ? $("input:focus, select:focus, textarea:focus") : $(fi);
|
|
$("#layermessage2 a.mainokbutton2").on("click", function () {
|
|
$(_focusitem2).focus();
|
|
});
|
|
t = t || 0;
|
|
if ($("#layermessage2 a.mainokbutton2").length > 0) {
|
|
$("#layermessage2 a.mainokbutton2").focus();
|
|
}
|
|
setTimeout(function () {
|
|
bglayer2();
|
|
msglayer2(m);
|
|
}, t);
|
|
}
|
|
function msglayer(msg, bging) {
|
|
_bging = bging;
|
|
$("#layermessage div").html(msg);
|
|
$("#bglayer, #layermessage").show();
|
|
$("#layermessage a.mainokbutton").focus();
|
|
}
|
|
function msglayer2(msg) {
|
|
$("#layermessage2 div").html(msg);
|
|
$("#bglayer2, #layermessage2").show();
|
|
$("#layermessage2 a.mainokbutton2").focus();
|
|
}
|
|
function hidelayermsg() {
|
|
ajaxing(_bging);
|
|
$("#layermessage").hide();
|
|
if (!_bging) {
|
|
$("#bglayer").hide();
|
|
}
|
|
else {
|
|
$("#bgprogress").hide();
|
|
}
|
|
}
|
|
function hidelayermsg2() {
|
|
$("#layermessage2").hide();
|
|
$("#bglayer2").hide();
|
|
}
|
|
function popup(pop) {
|
|
$('.popWrap#' + pop).css('display', 'block');
|
|
$('html, body').addClass('lock');
|
|
}
|
|
function checkInt(id, focus, m) {
|
|
m = m || "";
|
|
if ($("#" + id).length < 1 || $.trim($("#" + id).val()) == "" || getBytes($.trim($("#" + id).val())) < 1 || getint(val(id)) == 0) {
|
|
if ($("#" + (id || focus)).length > 0) {
|
|
$("#" + (id || focus)).focus();
|
|
}
|
|
if (m != "") {
|
|
msg(m);
|
|
}
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
function check(id, focusid, m, ism2) {
|
|
ism2 = ism2 || false;
|
|
m = m || "";
|
|
if ($("#" + id).length < 1 || $.trim($("#" + id).val()) == "" || $.trim($("#" + id).val()) == "0" || getBytes($.trim($("#" + id).val())) < 1) {
|
|
if ($("#" + (focusid || id)).length > 0) {
|
|
if ($("#" + (focusid || id)).hasClass("datepicker-input")) {
|
|
$("#" + (focusid || id)).next("i").focus();
|
|
$("#" + (focusid || id)).next("i")[0].scrollIntoView(false);
|
|
}
|
|
else {
|
|
focus($("#" + (focusid || id)), true);
|
|
}
|
|
}
|
|
if (m != "") {
|
|
if (ism2) {
|
|
msg2(m);
|
|
}
|
|
else {
|
|
msg(m);
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
function checkn(id, focus, m) {
|
|
m = m || "";
|
|
if ($("#" + id).length < 1 || $.trim($("#" + id).val()) === "" || getBytes($.trim($("#" + id).val())) < 1 || getint(getv(id)) < 1) {
|
|
if ($("#" + (id || focus)).length > 0) {
|
|
$("#" + (id || focus)).focus();
|
|
}
|
|
if (m != "") {
|
|
msg(m);
|
|
}
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
function checkrv(name) {
|
|
if ($("input[name='" + name + "']:checked").length < 1) {
|
|
$("input[name='" + name + "']").first().focus();
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
function setrv(name, val) {
|
|
$("input[name='" + name + "'][value='" + val + "']").prop("checked", true);
|
|
}
|
|
function setv(id, val) {
|
|
$("#" + id).val(val);
|
|
}
|
|
function sett(id, text) {
|
|
$("#" + id).text(text);
|
|
}
|
|
function submit(fid, t, remainpage) {
|
|
remainpage = remainpage || false;
|
|
if (!remainpage) {
|
|
$("#PageNum").val(1);
|
|
}
|
|
t = t || 10;
|
|
setTimeout(function () {
|
|
bglayer();
|
|
$("#" + (fid || "mform")).submit();
|
|
}, t);
|
|
}
|
|
function msgadmin(t) {
|
|
setTimeout('msg("운영자에게 문의해주세요.")', t || 10);
|
|
}
|
|
function isid(v) {
|
|
//영문숫자-_ , 나머지입력시 오류반환
|
|
var regExp = /^[A-Za-z0-9-_]*$/i;
|
|
var regExp2 = /[\,.=~!@#$%^&*()\[\]+|<>?:{}]/;
|
|
if (regExp.test(v) && !regExp2.test(v)) {
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
function isemail(v) {
|
|
//이메일 검사
|
|
var regExp = /^[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*\.[a-zA-Z]{2,3}$/i;
|
|
if (regExp.test(v)) {
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
function isemail2(v) {
|
|
//이메일 검사
|
|
var regExp = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
|
|
if (regExp.test(v)) {
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function ispassword(v) {
|
|
var r = /^(?=.*[a-zA-Z])(?=.*[!@#$%^&~*+=-])(?=.*[0-9]).{8,20}$/;
|
|
return r.test(v);
|
|
}
|
|
function getBytes(v, nocrtrim) {
|
|
nocrtrim = nocrtrim == undefined || nocrtrim == null ? false : nocrtrim;
|
|
if (v == null) {
|
|
return 0;
|
|
}
|
|
v = $.trim(v);
|
|
if (!nocrtrim) {
|
|
v = v.replace(/[\r\n]/gi, '').replace(/[\n]/gi, '');
|
|
}
|
|
var stringByteLength = 0;
|
|
stringByteLength = (function (s, b, i, c) {
|
|
for (b = i = 0; c = s.charCodeAt(i++); b += c >> 11 ? 2 : c >> 7 ? 2 : 1);
|
|
return b
|
|
})(v);
|
|
return stringByteLength;
|
|
}
|
|
|
|
|
|
function isRepeatedString(str) {
|
|
// 반복 문자열 검증
|
|
const len = str.length;
|
|
|
|
for (let i = 1; i < len; i++) {
|
|
if (len % i === 0) {
|
|
const pattern = str.slice(0, i).repeat(len / i);
|
|
if (pattern === str) {
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
|
|
|
|
|
|
function confirmtoggle(b, m, cb, cbcancel) {
|
|
b = b || false;
|
|
if (b) {
|
|
_confirmokcb = "";
|
|
_confirmokcbcancel = "";
|
|
_confirmokcb = cb || "confirmokpage()";
|
|
_confirmokcbcancel = cbcancel || "";
|
|
$("#confirmboxmsg").html(m);
|
|
setTimeout(function () {
|
|
bglayer(); $("#confirmbox").show();
|
|
}, 30);
|
|
}
|
|
else {
|
|
_bging = false;
|
|
bglayer(false); $("#confirmbox").hide();
|
|
if (_confirmokcbcancel != "") {
|
|
if (_confirmokcbcancel.substr(_confirmokcbcancel.length - 1, 1) != ';' &&
|
|
_confirmokcbcancel.substr(_confirmokcbcancel.length - 1, 1) != ')' &&
|
|
_confirmokcbcancel.indexOf('(') < 0 &&
|
|
_confirmokcbcancel.indexOf(')') < 0) {
|
|
_confirmokcbcancel += "()";
|
|
}
|
|
eval(_confirmokcbcancel);
|
|
}
|
|
}
|
|
}
|
|
var _confirmokcb;
|
|
var _confirmokcbcancel;
|
|
function confirmok() {
|
|
$("#confirmbox").hide();
|
|
if (_confirmokcb != "" &&
|
|
_confirmokcb.substr(_confirmokcb.length - 1, 1) != ';' &&
|
|
_confirmokcb.substr(_confirmokcb.length - 1, 1) != ')' &&
|
|
_confirmokcb.indexOf('(') < 0 &&
|
|
_confirmokcb.indexOf(')') < 0) {
|
|
_confirmokcb += "()";
|
|
}
|
|
eval(_confirmokcb);
|
|
}
|
|
window.ismobile = function () {
|
|
var check = false;
|
|
(function (a) { if (/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0, 4))) check = true; })(navigator.userAgent || navigator.vendor || window.opera);
|
|
return check;
|
|
};
|
|
function fillzero(v, padleft, len) {
|
|
v = (v || "").toString();
|
|
var v2 = v;
|
|
if (v2.length < len) {
|
|
while (v2.length < len) {
|
|
v2 = padleft ? ('0' + v2) : (v2 + '0');
|
|
}
|
|
}
|
|
return v2;
|
|
}
|
|
function ismobilenumber(v) {
|
|
//모바일 검사
|
|
v = v.replace(/-/gi, '');
|
|
if (v.search(/[0-9]/g) < 0 || !/^[0-9]{10,11}$/.test(v)) {
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
function istelnumber(v) {
|
|
//일반전화 검사
|
|
return telfmt(v.replace(/-/gi, ''));
|
|
}
|
|
function getcheckv(name) {
|
|
var rtn = "";
|
|
$.each($("input[name='" + name + "']"), function (i, c) {
|
|
if ($(c).prop("checked")) {
|
|
rtn += "," + $(c).val();
|
|
}
|
|
});
|
|
return rtn == "" ? "" : rtn.substr(1);
|
|
}
|
|
function commaset(v) {
|
|
var fv = v.toString().replace(/,/gi, '');
|
|
var fv2 = "";
|
|
if (fv.indexOf('.') > -1) {
|
|
if (fv.split('.')[0].length > 3) {
|
|
for (var fvi = fv.split('.')[0].length - 1; fvi > -1; fvi--) {
|
|
fv2 = fv.split('.')[0].substr(fvi, 1) + (fv2 != "" && (fv2.replace(/,/gi, '').length % 3) < 1 ? "," : "") + fv2;
|
|
}
|
|
fv = fv2 + "." + fv.split('.')[1];
|
|
}
|
|
}
|
|
else if (fv.length > 3) {
|
|
for (var fvi = fv.length - 1; fvi > -1; fvi--) {
|
|
fv2 = fv.substr(fvi, 1) + (fv2 != "" && (fv2.replace(/,/gi, '').length % 3) < 1 ? "," : "") + fv2;
|
|
}
|
|
fv = fv2;
|
|
}
|
|
return fv;
|
|
}
|
|
function goremote() {
|
|
//var winl = (screen.width - 840) / 2;
|
|
//var wint = (screen.height - 410) / 2;
|
|
//var opt = 'height=410, width=840, top=' + wint + ', left=' + winl + ', scrollbars=no, location=no, noresizable';
|
|
window.open("http://939.co.kr/yicte", "_blank");
|
|
}
|
|
function checkall(c, cssclass) {
|
|
$("input[type=checkbox]." + cssclass).prop("checked", $(c).prop("checked"));
|
|
}
|
|
|
|
function strEnConvert(str) {
|
|
let rslt = str.replace(/&#/gi, "%26%23");
|
|
|
|
return rslt;
|
|
} |