/**
* =============================================================
* 공통선언
*/
com = {};
com.docRoot = '';
com.basic = {};
com.basic.page = 'index.jsp';
com.basic.uploadFileMbSize = 5;
com.date = new Object();
com.date.fullDate; // YYYYMMDD HH24:MI:SS
com.date.toDay; // YYYYMMDD
com.date.toMonth; // MM
com.date.toYear; // YYYY
com.date.toTime; // HH24
com.date.toMinute; // MI
com.device = new Object();
com.device.adv = "";
/**
* ===============================================================================================================================
* 업무공통
*/
com.CONST = new Object();
/**
* ===============================================================================================================================
* 유틸
*/
com.util = new Object();
/**
* input type="number" maxlength 처리
* 사용법 : maxLength="10" oninput="com.util.maxlength(this);"
*/
com.util.maxlength = function(obj){
if(obj.value.length > obj.maxLength){
obj.value = obj.value.slice(0, obj.maxLength);
//com.showLayerPop1(true, obj.maxLength + " 자리가 넘을수 없습니다.", null, null, obj.name);
}
};
/**
* 전화번호 formater
*/
com.util.formaterPhone = function(v){
return v.replace(/(^02.{0}|^01.{1}|[0-9]{3})([0-9]+)([0-9]{4})/,"$1-$2-$3");
};
/**
* 휴대전화 유효성체크
*/
com.util.isCellphone = function(v){
v = v.split('-').join('');
var regCellPhone = /^01([0|1|6|7|8|9]?)-?([0-9]{3,4})-?([0-9]{4})$/;
return regCellPhone.test(v);
};
/**
* 일반전화 유효성체크
*/
com.util.isPhone = function(v){
v = v.split('-').join('');
var regPhone = /^\d{2,3}\d{3,4}\d{4}$/;
return regPhone.test(v);
};
/**
* 검색어 마지막글자 초성여부
*/
com.util.keyword = function(v){
var com = /[ㄱ-ㅎ]/g;
var last = v.substring(v.length-1);
var res = last.replace(com, '');
return res == '' ? false : true;
};
/**
* replace all
*/
com.util.replaceAll = function(v, searchStr, replaceStr){
return v.split(searchStr).join(replaceStr);
};
/**
* 존재유무
*/
com.util.isExist = function(values) {
var bool = true;
for (idx in values) {
if (values[idx] == undefined || values[idx] == ''
|| values[idx] == null) {
bool = false;
break;
}
}
return bool;
};
/**
* locaction url 이동
*
* @url : 주소
* @obj : 값
*/
com.util.moveUrl = function(url, obj) {
var inurl = url;
if (!com.util.isEmptyObject(obj)) {
inurl += '?';
for (key in obj) {
inurl = inurl + key + '=' + obj[key] + '&';
}
inurl = inurl.substring(0, (inurl.length - 1));
}
window.location.href = inurl;
};
/**
* Object 값 판단
*
* @obj : Object
*/
com.util.isEmptyObject = function(obj) {
// null and undefined are "empty"
if (obj == undefined)
return true;
if (obj == null)
return true;
// Assume if it has a length property with a non-zero value
// that that property is correct.
if (obj.length > 0)
return false;
if (obj.length === 0)
return true;
// Otherwise, does it have any properties of its own?
// Note that this doesn't handle
// toString and valueOf enumeration bugs in IE < 9
for ( var key in obj) {
if (hasOwnProperty.call(obj, key))
return false;
}
return true;
};
/**
* formater 형식으로 값을 변형함.
*
* @value : number return 10000.00 => '10,000.00'
*/
com.util.formatThreeComma = function(value) {
return (value.toString()).replace(
/^([-+]?)(0?)(\d+)(.?)(\d+)$/g, function(match, sign, zeros, before,
decimal, after) {
var reverseString = function(string) {
return string.split('').reverse().join('');
};
var insertCommas = function(string) {
var reversed = reverseString(string);
var reversedWithCommas = reversed.match(/.{1,3}/g).join(',');
return reverseString(reversedWithCommas);
};
return sign
+ (decimal ? insertCommas(before) + decimal + after
: insertCommas(before + after));
});
};
/**
* formater 형식으로 값을 변형함.
*
* @value : 값
* @format : '####-##-##'
* @mark : '#' (생략가능)
*/
com.util.formatMake = function(value, format, mark) {
var mak = (mark == undefined) ? '#' : mark;
var chk = value.split('');
var fom = format.split('');
var cnt = -1;
var res = '';
for (idx in fom) {
if (fom[idx] == mak) {
cnt++;
res = res + chk[cnt];
} else {
res = res + fom[idx];
}
}
return res;
};
/**
* 이메일 형식 check
*
* @value : 이메일
*/
com.util.isEmailType = function(email) {
var regex=/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/;
return regex.test(email);
};
/**
* Object 의 값중 orgValue --> changeValue 변경하여 새로은 오브젝트를 리턴한다.
*/
com.util.OjectChangeValue = function(tarObj, orgValue, changeValue) {
var obj = new Object();
for ( var key in tarObj) {
if (tarObj[key] == orgValue) {
obj[key] = changeValue;
} else {
obj[key] = tarObj[key];
}
}
return obj;
};
/**
* Array 값중에 특정컬럼의 값을 찾아서 해당 Row를 리턴한다.
*
* @tarArray : 찾을 list
* @findColumn : 찾을 컬럼
* @findValue : 찾을 값
*/
com.util.findValueInArray = function(tarArray, findColumn, findValue) {
var idx = 0;
for (idx in tarArray) {
if (tarArray[idx][findColumn] == findValue) {
var reObj = tarArray[idx];
break;
}
}
return reObj;
};
/**
*
* 숫자를 증가시켜서 Array 값으로 리턴한다.
*
* @startValue : 시작값
* @interval : 증감값
* @count : 반복횟수
* @isMaxSizeFill : boolean ( true : 부족한 크기를 '0' 으로 채운다 --> '01' )
* @objectFormat : 오브젝트를 형태를 만들어서 리턴한다. ( 예: {'value':'', 'text':''} )
*/
com.util.repeatDataToArray = function(startValue, interval, count,
isMaxSizeFill, objectFormat) {
var i = 0;
var val;
if (startValue > -1) {
val = (interval < 0) ? startValue + 1 : startValue - 1;
} else {
val = startValue + 1;
}
var save = [];
var maxSize = 0;
while (i < count) {
val += interval;
maxSize = ((val.toString().length) > maxSize) ? val.toString().length
: maxSize;
save.push(val);
i++;
}
;
var fillString = function(data) {
if (maxSize == data.toString().length)
return data.toString();
var tmp = '';
var len = maxSize - data.toString().length;
for (var i = 0; i < len; i++) {
tmp += '0';
}
tmp = tmp + data;
return tmp;
};
var redata = [];
var imsi = '';
for ( var idx in save) {
if (isMaxSizeFill == undefined || isMaxSizeFill == false) {
imsi = save[idx];
} else {
imsi = fillString(save[idx]);
}
if (objectFormat == undefined) {
redata.push(imsi);
} else {
var obj = new Object();
for (key in objectFormat) {
obj[key] = imsi;
}
;
redata.push(obj);
}
}
;
return redata;
};
/**
* URL을 파싱하여 url부분과 파라미터를 Object로 담아 리턴한다.
*
* @urlString : 주소
*/
com.util.parsUrl = function(urlString) {
var split = urlString.split('?');
var url = split[0];
var params;
var resultParam = {};
if (split.length > 1) {
params = split[1].split('&');
for (var i = 0; i < params.length; i++) {
var key = params[i].split('=')[0];
var value = params[i].split('=')[1];
resultParam[key] = value;
}
}
return {
url : url,
param : resultParam
};
};
/**
* 숫자만 입력받게 한다.
*
* @className : 대상 class
*/
com.util.numberInput = function(className) {
$(className).on(
'keydown',
function(e) {
// Allow: backspace, delete, tab, escape, enter and .
if ($.inArray(e.keyCode, [ 46, 8, 9, 27, 13, 110, 190 ]) !== -1
||
// Allow: Ctrl+A
(e.keyCode == 65 && e.ctrlKey === true) ||
// Allow: home, end, left, right
(e.keyCode >= 35 && e.keyCode <= 39)) {
// let it happen, don't do anything
return;
}
// Ensure that it is a number and stop the keypress
if ((e.shiftKey || (e.keyCode < 48 || e.keyCode > 57))
&& (e.keyCode < 96 || e.keyCode > 105)) {
e.preventDefault();
}
});
};
/**
* 기본키값 제외
*/
com.util.etckey = function(e){
if ($.inArray(e.keyCode, [ 46, 8, 9, 27, 13, 110, 190 ]) !== -1
||
// Allow: Ctrl+A
(e.keyCode == 65 && e.ctrlKey === true) ||
// Allow: home, end, left, right
(e.keyCode >= 35 && e.keyCode <= 39)) {
// let it happen, don't do anything
return true;
}
return false;
};
/**
* 입력 크기를 제한 한다.
*
* @className : 대상 class
* @size :
*/
com.util.limitedInput = function() {
$('input,textarea').each(function(){
var attrval = $(this).attr('cu-locksize');
if(com.util.isNull(attrval)) return true;
var size = parseInt( attrval );
var len = 0;
$(this).keydown(function(e) {
if ($.inArray(e.keyCode, [ 46, 8, 9, 27, 13, 110, 190 ]) !== -1
||
// Allow: Ctrl+A
(e.keyCode == 65 && e.ctrlKey === true) ||
// Allow: home, end, left, right
(e.keyCode >= 35 && e.keyCode <= 39)) {
// let it happen, don't do anything
return true;
}
if($(this).attr("type") == "number"){
return true;
}
len = $(this).val().length;
if( len >= size ){
e.preventDefault();
return false;
}
});
$(this).keyup(function(e) {
if ($.inArray(e.keyCode, [ 46, 8, 9, 27, 13, 110, 190 ]) !== -1
||
// Allow: Ctrl+A
(e.keyCode == 65 && e.ctrlKey === true) ||
// Allow: home, end, left, right
(e.keyCode >= 35 && e.keyCode <= 39)) {
// let it happen, don't do anything
return true;
}
if($(this).attr("type") == "number"){
len = $(this).val().length;
if( len >= size ){
var v = $(this).val();
$(this).val(v.slice(0, size));
return false;
}
}
});
});
};
/**
* 문자와 숫자를 비교하여 숫자로 리턴한다.
*
* value : 문자, 숫자 값
*/
com.util.getNumber = function(value) {
value = value.replace(/[,]/g, '');
var num = 0;
if(value == "" || value == undefined){
} else if(isNaN(value)){
} else {
num = Number(value);
}
return num;
};
/**
* 현재 포커스의 위치(index)를 return한다.
*
* @ctrl : element( ex : this )
*/
com.util.doGetCaretPosition = function(ctrl) {
var CaretPos = 0;
// IE Support
if (document.selection) {
ctrl.focus();
var Sel = document.selection.createRange();
Sel.moveStart('character', -ctrl.value.length);
CaretPos = Sel.text.length;
}
// Firefox support
else if (ctrl.selectionStart || ctrl.selectionStart == '0')
CaretPos = ctrl.selectionStart;
return (CaretPos);
};
/**
* 지정한 위치로 포커스를 이동시킨다.
*
* @ctrl : element( ex : this )
* @pos : element( ex : index )
*/
com.util.setCaretPosition = function(ctrl, pos) {
if (ctrl.setSelectionRange) {
ctrl.focus();
ctrl.setSelectionRange(pos, pos);
} else if (ctrl.createTextRange) {
var range = ctrl.createTextRange();
range.collapse(true);
range.moveEnd('character', pos);
range.moveStart('character', pos);
range.select();
}
};
/**
* 엑셀다운로드
*
* @url : 주소
* @param :
* param
* @option : 생략가능
*/
com.util.excelDownloadSubmit = function(url, param, option) {
// if(com.conf.excelUse == 'N'){
// com.alert.ok('시스템 사용자에 의하여
엑셀 다운로드 기능이 제한 되었습니다.', true, function(){
// });
// return;
// }
$('#mainForm').html('');
var key = '';
var htm = '';
for (key in param) {
htm = '';
$('#mainForm').append(htm);
}
for (key in option) {
htm = '';
$('#mainForm').append(htm);
}
url = com.docRoot + url;
$('#mainForm').attr('action', url);
$('#mainForm').attr('method', 'POST');
$('#mainForm').attr('target', 'mainIframeTarget');
$('#mainForm').submit();
};
/**
* 엑셀다운로드(자동컨트롤러처리)
*
* @url : 주소
* @param :
* param
* @option : 생략가능
*/
com.util.excelDownloadSubmitDest = function(url, param) {
// if(com.conf.excelUse == 'N'){
// com.alert.ok('시스템 사용자에 의하여
엑셀 다운로드 기능이 제한 되었습니다.', true, function(){
// });
// return;
// }
$('#mainForm').html('');
var key = '';
var htm = '';
for (key in param) {
htm = '';
$('#mainForm').append(htm);
if (param[key] == 'param') {
for ( var idx in param[key]) {
htm = '';
$('#mainForm').append(htm);
}
}
}
url = com.docRoot + url;
$('#mainForm').attr('action', url);
$('#mainForm').attr('method', 'POST');
$('#mainForm').attr('target', 'mainIframeTarget');
$('#mainForm').submit();
};
/**
* 파일다운로드
*
* @url : 주소
* @param :
* param
*/
com.util.fileDownloadSubmit = function(url, param) {
$('#mainForm').html('');
var key = '';
var htm = '';
for (key in param) {
htm = '';
$('#mainForm').append(htm);
}
url = com.docRoot + url;
$('#mainForm').attr('action', url);
$('#mainForm').attr('method', 'POST');
$('#mainForm').attr('target', 'mainIframeTarget');
$('#mainForm').submit();
};
/**
* 파일업로드(Ajax)
*
* @fileInfo : File객체
* @orgParam : 기존(추가) 파라미터
*
*/
com.util.fileUploadAjax = function(fileInfo, orgParam) {
var obj = new Object();
var formData = new FormData();
obj = $.extend({}, orgParam, fileInfo);
for ( var property in obj) {
if (obj.hasOwnProperty(property)) {
formData.append(property, obj[property]);
}
}
return formData;
};
/**
* 쿠키 생성 및 삭제 생성: 'test', 'cookie test, 쿠키 테스트', 1 삭제: 'test', '', -1
*/
com.util.cookieSet = function(cName, cValue, cDay) {
var expire = new Date();
expire.setDate(expire.getDate() + cDay);
cookies = cName + '=' + escape(cValue) + '; path=/ ';
if (typeof cDay != 'undefined') {
cookies += ';expires=' + expire.toGMTString() + ';';
}
document.cookie = cookies;
};
/**
* 쿠키 가져오기
*
* @cName : id
*/
com.util.cookieGet = function(cName) {
cName = cName + '=';
var cookieData = document.cookie;
var start = cookieData.indexOf(cName);
var cValue = '';
if (start != -1) {
start += cName.length;
var end = cookieData.indexOf(';', start);
if (end == -1)
end = cookieData.length;
cValue = cookieData.substring(start, end);
}
return unescape(cValue);
};
/**
* 쿠기 전체를 Array로 추출한다.
*
* @param keyName :
* key로 사용될 이름 (없는경우: 'key')
* @param valueName :
* value로 사용될 이름. (없는경우: 'value') return : Array[]
*/
com.util.cookieGetArray = function(keyName, valueName) {
var reArr = [];
if (document.cookie.length > 0) {
var inArr = document.cookie.split('; ');
for ( var idx in inArr) {
var tmp = inArr[idx].split('=');
var obj = new Object();
if (keyName != undefined) {
var patt1 = new RegExp(keyName);
if (patt1.test(tmp[0])) {
obj[keyName] = tmp[0].replace(keyName, '');
}
} else {
obj['key'] = tmp[0];
}
if (valueName != undefined) {
var patt2 = new RegExp(valueName);
if (patt2.test(tmp[1])) {
obj[valueName] = tmp[1].replace(valueName, '');
}
} else {
obj['value'] = tmp[1];
}
reArr.push(obj);
}
}
return reArr;
};
/**
* 쿠기 전체를 삭제한다.
*
* @param keyName :
* key로 사용된 이름
*/
com.util.cookieDeleteAll = function(keyName) {
var inArr = [];
if (document.cookie.length > 0) {
inArr = document.cookie.split('; ');
for ( var idx in inArr) {
var tmp = inArr[idx].split('=');
if (keyName != undefined) {
var patt1 = new RegExp(keyName);
if (patt1.test(tmp[0])) {
com.util.cookieSet(tmp[0], '', -1);
}
} else {
com.util.cookieSet(tmp[0], '', -1);
}
}
}
};
/**
* 테이블의 선택된 tr의 위치를 찾아서 스크롤을 위치시킨다.
*
* @param {
* container : container(div) table : table selectIndex : selectIndex //
* tr 이 선택된 index }
*/
com.util.scrollFindTable = function(param) {
// param
var container = param['container'];
var table = param['table'];
var selectIndex = param['selectIndex'];
selectIndex = (selectIndex == 0) ? 0 : selectIndex - 2;
var w = $(container);
var row = $(table).find('tr').eq(selectIndex);
if (row.length) {
w.scrollTop(0);
w.scrollTop(row.offset().top - (w.height() / 2));
}
};
/**
* 16진수 칼라값을 10진수로 변경하여 리턴한다.
*
* @hex : '#4b4b4b'
* @return: [255,255,0]
*
*/
com.util.Hex2RGB = function(hex) {
if (hex.lastIndexOf('#') > -1) {
hex = hex.replace(/#/, '0x');
} else {
hex = '0x' + hex;
}
var r = hex >> 16;
var g = (hex & 0x00FF00) >> 8;
var b = hex & 0x0000FF;
return [ r, g, b ];
};
/**
* 문자열 길이 구하기.
* 한글은 2, 그외 1로 체크한다.
* @val : string value값
*/
com.util.charLength = function(val) {
var sb = 0;
sb = (function(s,b,i,c){for(b=i=0; c=s.charCodeAt(i++);b+=c>>11?2:c>>7?2:1); return b;})(val);
return sb;
};
com.util.dynamicSubmit = function(url, param, method, isloading) {
if(isloading==undefined || isloading==true){
com.showLoading(true);
}
$('#mainForm').html('');
var key = '';
var htm = '';
for (key in param) {
htm = '';
$('#mainForm').append(htm);
}
$('#mainForm').attr('action', url);
$('#mainForm').attr('method', method);
$('#mainForm').submit();
};
/**
* ============================================================= 유틸 - Date
*/
com.dateUtil = new Object();
/**
* 날짜를 문자열로 변환 한다.
*
* @param{ cdate : date type : 24 , 12 (default: 24) : 시간제 mask : 'YYYY-MM-DD',
* 'YYYY-MM-DD HH:MI:SS' , 'YYYYMMDDHHMI' (default: 'YYYY-MM-DD') }
* @return : 문자열 날짜 ( '2014-05-01' or '2014-05-01 14:25:35' or '201405011425' )
*/
com.dateUtil.getStringToDate = function(param) {
var cdate = param['cdate'];
var type = param['type'];
var mask = param['mask'];
type = (type == undefined) ? 24 : type;
mask = (mask == undefined) ? 'YYYY-MM-DD' : mask;
var addZero = function(val) {
if (val < 10)
val = "0" + val;
return val;
};
// 추출
var ry = cdate.getFullYear();
var rm = addZero(cdate.getMonth() + 1);
var rd = addZero(cdate.getDate());
var hours = addZero(cdate.getHours());
if (type == undefined || type == '12' || type == 12) {
hours = (hours < 13) ? 'AM' + hours : 'PM' + hours;
}
var minutes = addZero(cdate.getMinutes());
var seconds = addZero(cdate.getSeconds());
mask = mask.replace('YYYY', ry);
mask = mask.replace('MM', rm);
mask = mask.replace('DD', rd);
mask = mask.replace('HH', hours);
mask = mask.replace('MI', minutes);
mask = mask.replace('SS', seconds);
return mask;
};
/**
* 날짜계산: 기준일부터 몇일까지
*
* @baseDate : 기준일자 ( '2014-05-01' or '20140501' )
* @cDay : 증감일 ( -30 혹은 30 )
* @returnMask : default '-'
* @return : 문자열 날짜 ( '2014-05-01' or '20140501' )
*/
com.dateUtil.stringToCount = function(baseDate, cDay, returnMask) {
var reg1 = /[1-9]{1}[0-9]{3}[0-9]{2}[0-9]{2}/;
var rval = baseDate.replace(/[^0-9]/g, '');
if (!reg1.test(rval))
return '';
returnMask = (returnMask == undefined) ? '-' : returnMask;
var reg2 = /[^0-9]/g;
var ymask = reg2.exec(baseDate);
ymask = (ymask === null) ? returnMask : ymask;
rval = rval.substring(0, 4) + '-' + rval.substring(4, 6) + '-'
+ rval.substring(6, 8);
var mdate = new Date(rval);
mdate.setDate(mdate.getDate() + cDay);
var ry = mdate.getFullYear();
var rm = ((mdate.getMonth() + 1) < 10) ? '0' + (mdate.getMonth() + 1)
: (mdate.getMonth() + 1);
var rd = (mdate.getDate() < 10) ? '0' + mdate.getDate() : mdate.getDate();
return ry + ymask + rm + ymask + rd;
};
/**
* 날짜차이 계산
*
* @schk : 과거일자 ('2014-05-01' or '20140501')
* @echk : 현재일자 ('2014-04-10' or '20140410')
* @type : 'day', 'month', 'year'
* @return : 일수
*/
com.dateUtil.getDifferentDate = function(schk, echk, type) {
schk = schk.replace(/[^0-9]/gi, '');
echk = echk.replace(/[^0-9]/gi, '');
var sdate = new Date(schk.substring(0, 4), schk.substring(4, 6)-1, schk.substring(6, 8));
var edate = new Date(echk.substring(0, 4), echk.substring(4, 6)-1, echk.substring(6, 8));
var years = "";
var months = "";
var days = "";
var val = "";
if(type=='month'){
years = edate.getFullYear() - sdate.getFullYear();
months = edate.getMonth() - sdate.getMonth();
days = edate.getDate() - sdate.getDate();
val = ( years * 12 + months + (days >= 0 ? 0 : -1) ) + 1;
return val;
} else if(type=='year'){
years = edate.getFullYear() - sdate.getFullYear();
return years;
} else {
days = (edate - sdate) / 1000 / 60 / 60 / 24;
days = days * 30;
return days;
}
};
/**
* 기준날짜부터 일자를 차감(가감)한 날짜를 계산한다.
*
* @param{ startDate : new Date(year, month, day, hours, minutes, seconds,
* milliseconds) ( default: new Date() ) addDay : 숫자 (+-) type : 24 , 12
* (default: 24) : 시간제 mask : 'YYYY-MM-DD', 'YYYY-MM-DD HH:MI:SS' ,
* 'YYYYMMDDHHMI' (default: 'YYYY-MM-DD') }
* @return : object {sDate:'2014-05-02 14:25:35', eDate:'2014-05-01 14:25:35'} :
* -1 일을 한 경우
*/
com.dateUtil.getStringAddDate = function(param) {
var addDay = param['addDay'];
var startDate = param['startDate'];
var type = param['type'];
var mask = param['mask'];
addDay = (addDay == undefined || isNaN(addDay)) ? 1 : addDay;
addDay = addDay * -1;
var now1 = '';
if (startDate == undefined) {
now1 = new Date();
} else {
now1 = startDate;
}
var now2 = new Date(now1.getFullYear(), now1.getMonth(), now1.getDay(),
now1.getHours(), now1.getMinutes(), now1.getSeconds(), now1
.getMilliseconds());
now2.setDate(now1.getDate() - addDay);
var str1 = com.dateUtil.getStringToDate({
cdate : now1,
type : type,
mask : mask
});
var str2 = com.dateUtil.getStringToDate({
cdate : now2,
type : type,
mask : mask
});
return {
sDate : str1,
eDate : str2
};
};
/**
* 실시간 시계표현
*
* @param {
* selector : target selector type : 12, 24 (default 12) interval :
* 폴링간격 seconds (default 1) }
*/
com.dateUtil.autoClock = function(param) {
var selector = param['selector'];
var type = param['type'];
var interval = param['interval'];
var returnClock = function() {
var mdate = new Date();
var ry = mdate.getFullYear();
var rm = ((mdate.getMonth() + 1) < 10) ? '0' + (mdate.getMonth() + 1)
: (mdate.getMonth() + 1);
var rd = (mdate.getDate() < 10) ? '0' + mdate.getDate() : mdate
.getDate();
var revalue = '';
revalue = ry + '-' + rm + '-' + rd;
var hours = mdate.getHours();
if (type == undefined || type == '12' || type == 12) {
hours = (hours < 13) ? ' AM ' + hours : ' PM ' + hours;
} else {
hours = ' ' + hours;
}
hours += ':' + mdate.getMinutes() + ':';
hours += (mdate.getSeconds() < 10) ? '0' + mdate.getSeconds() : mdate
.getSeconds();
revalue += hours;
return revalue;
};
interval = (interval == undefined || interval == 0) ? 1 : interval;
interval = interval * 1000;
// timer
setInterval(function() {
selector = $(selector);
if (selector.prop('value')) {
selector.val(returnClock());
} else {
selector.text(returnClock());
}
}, interval);
};
/**
* null 체크
*/
com.util.isNull = function (val){
if(val == undefined || val == null || val == "") return true;
return false;
};
/**
* ========================================================================================================================== 이벤트 - Event
*/
com.event = new Object();
/**
* click & enter event 를 동시에 부여한다.
*
* @param(array)[ {selector: '', leftKeyTarget:'', rightKeyTarget:'', executeFn:
* ''}, // leftKeyTarget, rightKeyTarget, executeFn : 생략가능
* {selector: '', leftKeyTarget:'', rightKeyTarget:'', executeFn:
* ''} ]
*/
com.event.clickAndEnter = function(param) {
var sel = '';
for ( var idx in param) {
sel = param[idx]['selector'];
$(sel).on('click', function(obj) {
return function(ev) {
if (obj['executeFn'] != undefined) {
obj['executeFn']();
}
};
}(param[idx]));
$(sel).on('keydown', function(obj) {
return function(ev) {
if (ev.which == 13) {
if (obj['executeFn'] != undefined) {
obj['executeFn']();
}
}
if (ev.which == 37) {
if (obj['leftKeyTarget'] != undefined) {
$(obj['leftKeyTarget']).focus();
}
}
if (ev.which == 39) {
if (obj['rightKeyTarget'] != undefined) {
$(obj['rightKeyTarget']).focus();
}
}
};
}(param[idx]));
}
;
};
/**
* enter를 치면 포커스가 이동된다.
*
* @param(array)[ {selector: '', target: '', executeFn: ''}, // executeFn (생략가능)
* {selector: '', target: '', executeFn: ''} ]
*/
com.event.enterGoFocus = function(param) {
var sel = '';
for ( var idx in param) {
sel = param[idx]['selector'];
$(sel).on('keydown', function(obj) {
return function(ev) {
if (ev.which == 13) {
$(obj['target']).focus();
if (obj['executeFn'] != undefined) {
obj['executeFn']();
}
}
};
}(param[idx]));
}
;
};
/**
* enter를 치면 trigger가 실행된다.
*
* @param(array)[ {selector: '', target: '', eventType: ''}, {selector: '',
* target: '', eventType: ''} ]
*/
com.event.enterGoTrigger = function(param) {
var sel = '';
for ( var idx in param) {
sel = param[idx]['selector'];
$(sel).on('keydown', function(obj) {
return function(ev) {
if (ev.which == 13) {
$(obj['target']).trigger(obj['eventType']);
}
};
}(param[idx]));
}
;
};
/**
* enter를 치면 펑션이 실행된다.
*
* @param(array)[ {selector: '', executeFn: ''}, {selector: '', executeFn: ''} ]
*/
com.event.enterGoFunction = function(param) {
var sel = '';
for ( var idx in param) {
sel = param[idx]['selector'];
$(sel).on('keydown', function(obj) {
return function(ev) {
if (ev.which == 13) {
obj['executeFn']();
}
};
}(param[idx]));
}
;
};
/**
* ============================================================= list data를
* Hierarchical 형식으로 변환
*
* @keyName : code Name
* @upperKeyName : 부모code Name
* @rootName : 'root'
* @openFolder : 처음에 폴더를 오픈할지를 결정 true, false
* @data : array list data
*/
com.listToHierarchical = function(keyName, upperKeyName, rootName, openFolder,
data) {
var len = data.length;
var count = 0;
var output = [];
var i = 0;
var j = 0;
while (count < len) {
for (i = 0; i < len; i++) {
var rowi = data[i];
if (rowi[upperKeyName] == rootName && rowi['inner_reg'] != 'Y') {
rowi['inner_reg'] = 'Y';
output.push(rowi);
count++;
}
for (j = 0; j < len; j++) {
var rowj = data[j];
if (rowj['inner_reg'] != 'Y'
&& rowj[upperKeyName] == rowi[keyName]) {
rowi['expanded'] = openFolder;
rowi['folder'] = true;
if (rowi['children'] == undefined)
rowi['children'] = [];
rowj['inner_reg'] = 'Y';
rowi['children'].push(rowj);
count++;
}
}
}
}
;
return output;
};
/**
* =============================================================
* Popup init
*/
//ij 주석처리 : 사용안함?
//com.popupInit = function(url, afterFn) {
//
// url = com.docRoot + url;
// $.post(url, function(data) {
//
// $('#alBiz').html(data);
//
// var id = '#' + url;
// var ml = com.alert.size(id);
// $(id).css('margin-left', ml);
// $('#alBiz').show();
// $('#alBizBg').show();
//
// if (afterFn != undefined)
// afterFn();
// });
//};
//ij 주석처리 : 사용안함?
//com.popupShow = function(modalYn, popupId, popupExeFnName, param, okCallbackFn,
// cancelCallbackFn) {
// popupExeFnName(param, okCallbackFn, cancelCallbackFn);
//};
/**
* =============================================================
* TR리스트의 클릭시
* selected처리 & 이벤트핸들러 실행
*
* @tbodyId : tbody id
* @callbackFn : callback function
* @isHeadSort : Head sort
* @findValue : selected index or {'key':'data'}
*/
//ij 주석처리 : 사용안함?
//com.trClickRegist = function(tbodyId, callbackFn, isHeadSort, findValue) {
//
// tbodyId = com.inUtil.idcheck(tbodyId);
//
// // $(tbodyId).find("a").on("click", function(event) {
// // event.preventDefault();
// // $(this).parents('tr').siblings().removeClass('active').end().addClass('active');
// // $(this).closest('tr').siblings().removeClass('active').end().addClass('active');
// // var po = App.selector.getParam( $(this).closest('tr') );
// // if(callbackFn !='' && callbackFn != null){
// // callbackFn(po);
// // }
// // });
//
// $(tbodyId).find("td").on(
// "click",
// function(event) {
// // event.preventDefault();
// $(this).parents('tr').siblings().removeClass('active').end()
// .addClass('active');
// $(this).closest('tr').siblings().removeClass('active').end()
// .addClass('active');
// var po = App.selector.getParam($(this).closest('tr'));
// if (callbackFn != '' && callbackFn != null) {
// callbackFn(po);
// }
// });
//
// // table head sort
// if (isHeadSort) {
// // var tableObj = $(tbodyId).closest('table');
// // _nfui.fnTableHeadSort(tableObj);
// }
//
// var pkval = '';
// var inKey = '';
// var isOk = false;
// for ( var key in findValue) {
// inKey = key;
// }
// if (isNaN(findValue)) {
// var str = 'td[col-data="' + inKey + '"]';
//
// if (findValue == undefined || findValue[inKey] == null
// || findValue[inKey] == '') {
// $(tbodyId).find('tr:eq(0)').find("td:eq(0)").trigger('click');
// return false;
// }
// $(tbodyId).find(str).each(function(ii, vv) {
// pkval = $(this).text();
// if (pkval == findValue[inKey]) {
// isOk = true;
// $(this).closest('tr').find("td:eq(0)").trigger('click');
// return false;
// }
// });
// if (!isOk) {
// $(tbodyId).find('tr:eq(0)').find("td:eq(0)").trigger('click');
// }
// } else {
// $(tbodyId).find('tr:eq(' + findValue + ')').find("td:eq(0)").trigger(
// 'click');
// }
//};
/**
* ============================================================= TR리스트의 값을 찾아서
* 클릭해 준다.
*
* @tbodyId : tbody id
* @findValue : selected index or {'key':'data'}
*/
//ij 주석처리 : 사용안함?
//com.trFindValue = function(tbodyId, findValue) {
//
// tbodyId = com.inUtil.idcheck(tbodyId);
//
// var pkval = '';
// var inKey = '';
// var isOk = false;
// for ( var key in findValue) {
// inKey = key;
// }
// if (isNaN(findValue)) {
// var str = 'td[col-data="' + inKey + '"]';
//
// if (findValue == undefined || findValue[inKey] == null
// || findValue[inKey] == '') {
// $(tbodyId).find('tr:eq(0)').find("td:eq(0)").trigger('click');
// return false;
// }
// $(tbodyId).find(str).each(function(ii, vv) {
// pkval = $(this).text();
// if (pkval == findValue[inKey]) {
// isOk = true;
// $(this).closest('tr').find("td:eq(0)").trigger('click');
// return false;
// }
// });
// if (!isOk) {
// $(tbodyId).find('tr:eq(0)').find("td:eq(0)").trigger('click');
// }
// } else {
// $(tbodyId).find('tr:eq(' + findValue + ')').find("td:eq(0)").trigger(
// 'click');
// }
//};
/**
* ============================================================= TR리스트의 더블클릭시
* selected처리 & 이벤트핸들러 실행
*
* @tbodyId : tbody id
* @callbackFn : callback function
* @isHeadSort : Head sort
* @findValue : selected index or {'key':'data'}
*/
//ij 주석처리 : 사용안함?
//com.trDbClickRegist = function(tbodyId, callbackFn, isHeadSort, findValue) {
//
// tbodyId = com.inUtil.idcheck(tbodyId);
//
// $(tbodyId).find("td").dblclick(
// function(e) {
// e.stopPropagation();
// $(this).parents('tr').siblings().removeClass('active').end()
// .addClass('active');
// $(this).closest('tr').siblings().removeClass('active').end()
// .addClass('active');
// var po = App.selector.getParam($(this).closest('tr'));
// if (callbackFn != '' && callbackFn != null) {
// callbackFn(po);
// }
// });
//
// var pkval = '';
// var inKey = '';
// var isOk = false;
// for ( var key in findValue) {
// inKey = key;
// }
// if (isNaN(findValue)) {
// var str = 'td[col-data="' + inKey + '"]';
//
// if (findValue == undefined || findValue[inKey] == null
// || findValue[inKey] == '') {
// $(tbodyId).find('tr:eq(0)').find("td:eq(0)").trigger('dblclick');
// return false;
// }
// $(tbodyId).find(str).each(function(ii, vv) {
// pkval = $(this).text();
// if (pkval == findValue[inKey]) {
// isOk = true;
// $(this).closest('tr').find("td:eq(0)").trigger('dblclick');
// return false;
// }
// });
// if (!isOk) {
// $(tbodyId).find('tr:eq(0)').find("td:eq(0)").trigger('dblclick');
// }
// } else {
// $(tbodyId).find('tr:eq(' + findValue + ')').find("td:eq(0)").trigger(
// 'dblclick');
// }
//};
/**
* ============================================================= UL리스트의 li클릭시
* selected처리 & 이벤트핸들러 실행
*
* @tbodyId : tbody id
* @callbackFn : callback function
* @isHeadSort : Head sort
* @findValue : selected index or {'key':'data'}
*/
//ij 주석처리 : 사용안함?
//com.liClickRegist = function(ulId, callbackFn, isHeadSort, findValue) {
//
// ulId = com.inUtil.idcheck(ulId);
//
// $(ulId).find("li").on("click", function(event) {
// $(this).siblings().removeClass('active').end().addClass('active');
// var po = App.selector.getParam($(this));
// if (callbackFn != '' && callbackFn != null) {
// callbackFn(po);
// }
// });
//
// // $(ulId).find('li:eq(0)').trigger('click');
//
// var pkval = '';
// var inKey = '';
// for ( var key in findValue) {
// inKey = key;
// }
// if (isNaN(findValue)) {
// var str = 'input[col-data="' + inKey + '"]';
//
// if (findValue == undefined || findValue[inKey] == null
// || findValue[inKey] == '') {
// $(ulId).find('li:eq(0)').trigger('click');
// return false;
// }
// $(ulId).find(str).each(function(ii, vv) {
// pkval = $(this).val();
// if (pkval == findValue[inKey]) {
// $(this).closest('li').trigger('click');
// return false;
// }
// });
// } else {
// $(ulId).find('li:eq(' + findValue + ')').trigger('click');
// }
//};
/**
* ============================================================= TR리스트안에 select
* tag를 만들고 이벤트를 실행한다.
*
* @tbodyId : tbody id
* @columnName : td안에 설정된 col-data
* @data : select tag 에 만들어질 option 값 -> {'value':'1', text:'내용'}
*/
//ij 주석처리 : 사용안함?
//com.trCreateSelectTagChangeRegist = function(tbodyId, columnName, data) {
//
// tbodyId = com.inUtil.idcheck(tbodyId);
// var id = tbodyId + ' tr';
// var key = '';
// var kval = '';
// var idx = 0;
// var htm = '';
// var sel;
// $(id)
// .each(
// function() {
// $(this)
// .children('td')
// .each(
// function(ii, vv) {
//
// key = $(this).attr('col-data');
// if (key == columnName) {
// kval = $(this).text();
// sel = $(this).find('select');
// $(this).text('');
// for (idx in data) {
// if (kval == data[idx]['value']) {
// htm = '';
// } else {
// htm = '';
// }
// sel.append(htm);
// }
// $(this).append(sel);
// }
//
// });
// });
//};
/**
* ============================================================= TR리스트의 1 row의
* data를 가져오고, 클릭한다.
*
* @tbodyId : tbody id
* @idx : index
* @selected : 선택여부 (trigger click)
*/
//ij 주석처리 : 사용안함?
//com.trGetRowData = function(tbodyId, idx, selected) {
//
// tbodyId = com.inUtil.idcheck(tbodyId);
// if (idx == undefined)
// idx = 0;
// var id = tbodyId + ' tr';
// var data = {};
// var key = '';
// $(id).eq(idx).each(function() {
// $(this).children('td').each(function(ii, vv) {
// key = $(this).attr('col-data');
// data[key] = $(this).text();
// });
// });
// if (selected) {
// $(tbodyId).find('tr:eq(' + idx + ')').find("a:eq(0)").trigger('click');
// }
// return data;
//};
/**
* ============================================================= treeTable을 만들고
* 특정 DATA를 찾아서 1 ROW 를 리턴하고 클릭한다.
*
* @param {
* tbodyId : tbody id setColumn : ex {'cdKey':'code',
* 'upperCdKey':'upperCode', 'leafKey':'leaf', 'rootValue':'root' }
* data : data dataColumn : 컬럼 ex ['name', 'url', 'position', '',
* 'detail'] ''은 빈컬럼 hiddenColumn : 컬럼 숨기기 ex ['detail'] compColumn :
* 콤포넌트 컬럼 ex { 'position':{'select':'