$j = jQuery.noConflict(); /** * Key Code Define */ function Key(){}; Key.prototype = { BACKSPACE : 8, TAB : 9, ENTER : 13, SHIFT : 16, LCTRL : 17, LALT : 18, RALT : 21, RCTRL : 25, ESC : 27, FS : 28, GS : 29, RS : 30, US : 31, SPACE : 32, PAGEUP : 33, PAGEDOWN : 34, END : 35, HOME : 36, LEFT : 37, UP : 38, RIGHT : 39, DOWN : 40, INSERT : 45, DELETE : 46, F5 : 116 }; /** * Character Reference Define */ function Char(){}; Char.prototype = { NULL : String.fromCharCode('0'), /* \u0000 null */ SOH : String.fromCharCode('1'), /* \u0001 start of heading */ STX : String.fromCharCode('2'), /* \u0002 start of text */ ETX : String.fromCharCode('3'), /* \u0003 end of text */ EOT : String.fromCharCode('4'), /* \u0004 end of transmission */ ENQ : String.fromCharCode('5'), /* \u0005 enquiry */ ACK : String.fromCharCode('6'), /* \u0006 acknowledge */ BEL : String.fromCharCode('7'), /* \u0007 bel */ BS : String.fromCharCode('8'), /* \u0008 backspace */ TAB : String.fromCharCode('9'), /* \u0009 horizontal tab */ LF : String.fromCharCode('10'), /* \u000A NL line feed, new line */ VT : String.fromCharCode('11'), /* \u000B vertical tab */ FF : String.fromCharCode('12'), /* \u000C NP form feed, new page */ CR : String.fromCharCode('13'), /* \u000D carriage Return */ SO : String.fromCharCode('14'), /* \u000E shift out */ SI : String.fromCharCode('15'), /* \u000F shift in */ DLE : String.fromCharCode('16'), /* \u0010 data link escape */ DC1 : String.fromCharCode('17'), /* \u0011 device control 1 */ DC2 : String.fromCharCode('18'), /* \u0012 device control 2 */ DC3 : String.fromCharCode('19'), /* \u0013 device control 3 */ DC4 : String.fromCharCode('20'), /* \u0014 device control 4 */ NAK : String.fromCharCode('21'), /* \u0015 negative acknowledge */ SYN : String.fromCharCode('22'), /* \u0016 synchronous idle */ ETB : String.fromCharCode('23'), /* \u0017 end of trans. block */ CAN : String.fromCharCode('24'), /* \u0018 cancel */ EM : String.fromCharCode('25'), /* \u0019 end of medium */ SUB : String.fromCharCode('26'), /* \u001A substitute */ ESC : String.fromCharCode('27'), /* \u001B escape */ FS : String.fromCharCode('28'), /* \u001C file separator */ GS : String.fromCharCode('29'), /* \u001D group separator */ RS : String.fromCharCode('30'), /* \u001E record separator */ US : String.fromCharCode('31'), /* \u001F unit separator */ SPACE : String.fromCharCode('32') /* \u0020 space */ }; /** * 값 없는 문자열인 경우 true를 반환, 그렇지 않은 경우 false를 반환한다. * 인자의 갯수가 1개이고 값 없는 문자열이 아닌 경우 해당 문자열을 반환한다. * 인자의 갯수가 1개이고 값 없는 문자열인 경우 첫번째 인자의 값을 반환한다. * * @param {String} value * @return {Boolean} */ String.prototype.isEmpty = function(value) { switch(arguments.length) { case 0 : return this.length <= 0 ? true : false; case 1 : return this.isEmpty() ? value : this; default : alert('지원하지 않는 기능 입니다. Usage \nString.isEmpty([value])'); return null; } }; /** * 공백문자로만 이루어진 문자열인 경우 true를 반환한다. * * @return {Boolean} */ String.prototype.isSpace = function() { return Validate.isEmpty(this.match(/[^\s]+/g)); }; /** * 공백문자가 포함되어 있는 경우 true를 반환한다. * * @return {Boolean} */ String.prototype.hasSpace = function() { return Validate.isEmpty(this.match(/\s+/g)); }; /** * 공백문자를 삭제한 문자열을 반환한다. * * @return {String} */ String.prototype.removeSpace = function() { return this.replace(/\s+/g,''); }; /** * 숫자형 문자로만 이루어진 문자열인 경우 true를 반환한다. * * @return {Boolean} */ String.prototype.isNumber = function() { return Validate.isEmpty(this.match(/[^\d]+/g)); }; /** * 숫자형 문자가 포함되어 있는 경우 true를 반환한다. * * @return {Boolean} */ String.prototype.hasNumber = function() { return !Validate.isEmpty(this.match(/\d+/g)); }; /** * 숫자형 문자를 삭제한 문자열을 반환한다. * * @return {String} */ String.prototype.removeNumber = function() { return this.replace(/\d+/g,''); }; /** * 한글로만 이루어진 문자열인 경우 true를 반환한다. * * @return {Boolean} */ String.prototype.isKorean = function() { var regExp = new RegExp('[^'+String.fromCharCode(12593,45,12643,44032,45,55203)+']+','gm'); return Validate.isEmpty(this.match(regExp)); }; /** * 한글이 포함되어 있는 경우 true를 반환한다. * * @return {Boolean} */ String.prototype.hasKorean = function() { var regExp = new RegExp('['+String.fromCharCode(12593,45,12643,44032,45,55203)+']+','gm'); return !Validate.isEmpty(this.match(regExp)); }; /** * 한글을 삭제한 문자열을 반환한다. * * @return {String} */ String.prototype.removeKorean = function() { var regExp = new RegExp('['+String.fromCharCode(12593,45,12643,44032,45,55203)+']+','gm'); return this.replace(regExp,''); }; /** * 영문으로 이루어진 문자열인 경우만 true를 반환한다. * * @return {Boolean} */ String.prototype.isEnglish = function() { return Validate.isEmpty(this.match(/[^a-zA-Z]+/g)); }; /** * 영문이 포함되어 있는 경우 true를 반환한다. * * @return {Boolean} */ String.prototype.hasEnglish = function() { return !Validate.isEmpty(this.match(/[a-zA-Z]+/g)); }; /** * 영문을 삭제한 문자열을 반환한다. * * @return {String} */ String.prototype.removeEnglish = function() { return this.replace(/[a-zA-Z]+/g,''); }; /** * 문장 구성 문자(공백, 숫자, 한글, 영문)로 이루어진 문자열인 경우만 true를 반환한다. * * @return {Boolean} */ String.prototype.isWord = function() { var regExp = new RegExp('[^\s\da-zA-Z'+String.fromCharCode(12593,45,12643,44032,45,55203)+']+','gm'); return Validate.isEmpty(this.match(regExp)); }; /** * 문장 구성 문자(공백, 숫자, 한글, 영문)가 포함되어 있는 문자열인 경우 true를 반환한다. * * @return {Boolean} */ String.prototype.hasWord = function() { var regExp = new RegExp('[\s\da-zA-Z'+String.fromCharCode(12593,45,12643,44032,45,55203)+']+','gm'); return !Validate.isEmpty(this.match(regExp)); }; /** * 해당 문자열에서 문장 구성 문자(공백, 숫자, 한글, 영문)를 삭제한 문자열을 반환한다. * * @return {String} */ String.prototype.removeWord = function() { var regExp = new RegExp('[\s\da-zA-Z'+String.fromCharCode(12593,45,12643,44032,45,55203)+']+','gm'); return this.replace(regExp,''); }; /** * 특수문자(문장 구성 문자 이외의 문자)로 이루어진 문자열인 경우만 true를 반환한다. * * @return {Boolean} */ String.prototype.isSpecial = function() { var regExp = new RegExp('[\s\da-zA-Z'+String.fromCharCode(12593,45,12643,44032,45,55203)+']+','gm'); return Validate.isEmpty(this.match(regExp)); }; /** * 특수문자(문장 구성 문자 이외의 문자)가 포함되어 있는 문자열인 경우 true를 반환한다. * * @return {Boolean} */ String.prototype.hasSpecial = function() { var regExp = new RegExp('[^\s\da-zA-Z'+String.fromCharCode(12593,45,12643,44032,45,55203)+']+','gm'); return !Validate.isEmpty(this.match(regExp)); }; /** * 해당 문자열에서 특수문자(문장 구성 문자 이외의 문자)를 삭제한 문자열을 반환한다. * * @return {String} */ String.prototype.removeSpecial = function() { var regExp = new RegExp('[^\s\da-zA-Z'+String.fromCharCode(12593,45,12643,44032,45,55203)+']+','gm'); return this.replace(regExp,''); }; /** * 선행문자가 일치 할 경우 true 반환 * * @param {String} prefix * @return {Boolean} */ String.prototype.matchPrefix = function(prefix) { var regExp = new RegExp('^'+prefix,'gm'); return !Validate.isEmpty(value.match(regExp)); }; /** * 문자열 끝이 일치 할 경우 true 반환 * * @param {String} suffix * @return {Boolean} */ String.prototype.matchSuffix = function(suffix) { var regExp = new RegExp(suffix+'$','gm'); return !Validate.isEmpty(this.match(regExp)); }; /** * %S 문자를 순차적으로 arguments의 값으로 치환한다. * * @return {String} */ String.prototype.printf = function() { var retValue = this; for(var index = 0; index < arguments.length; index++) { retValue = retValue.replace(/%S/m,arguments[index]); } return retValue; }; /** * 문자열 앞/뒤의 공백을 제거하여 반환한다. * * @return {String} */ String.prototype.trim = function() { return this.replace(/(^\s+)|(\s+$)/gm,''); }; /** * 문자열의 선두 문자를 대문자로 변경하여 반환한다. * * @return {String} */ String.prototype.toFirstUpperCase = function() { if(!this.isEmpty()) { return this.charAt(0).toUpperCase()+this.slice(1); } return this; }; /** * 대소문자 구별없이 값이 동일하면 true를 반환한다. * * @return {String} */ String.prototype.equalsIgnoreCase = function(object) { if(typeof object != 'string') return false; if(this != null && object != null) { return this.toUpperCase() == object.toUpperCase(); } else if(this == object) { return true; } else { return false; } }; /** * URL 주소 형식의 plain text를 '?' 이후의 파라미터 부분을 인코딩하여 반환한다. * 일반 문자열 일 경우 문자열 전체를 인코딩하여 반환한다. * * @return {String} */ String.prototype.encodeURI = function() { var retValue = ''; var param = this; var indexOf = this.indexOf('?'); if(indexOf >= 0) { retValue = this.substring(0,indexOf+1); param = this.slice(indexOf+1); } if(!param.isEmpty()) { param = param.replace(/&(([^&=]+)=)/gi,Char.US+'$1'); var params = param.split(Char.US); for(var index = 0; index < params.length; index++) { indexOf = params[index].indexOf('='); if(indexOf >= 0) { var name = params[index].substring(0,indexOf); var value = params[index].slice(indexOf+1); if(index != 0) retValue += '&'; retValue += encodeURIComponent(name)+'='+encodeURIComponent(value); } else { retValue += encodeURIComponent(params[index]); } } } return retValue; }; /** * String.encodeURI()로 인코딩 된 값을 디코딩하여 반환한다. * * @return {String} */ String.prototype.decodeURI = function() { var retValue = ''; var param = this; var indexOf = this.indexOf('?'); if(indexOf >= 0) { retValue = this.substring(0,indexOf+1); param = this.slice(indexOf+1); } if(!param.isEmpty()) { var params = param.split('&'); for(var index = 0; index < params.length; index++) { indexOf = params[index].indexOf('='); if(indexOf >= 0) { var name = params[index].substring(0,indexOf); var value = params[index].slice(indexOf+1); if(index != 0) retValue += '&'; retValue += decodeURIComponent(name)+'='+decodeURIComponent(value); } else { retValue += decodeURIComponent(params[index]); } } } return retValue; }; /** * 첫째날 요일을 반환 한다. * * @return {Number} */ Date.prototype.getFirstDay = function() { var tempDate = new Date(this.getFullYear(), this.getMonth(), 1); return tempDate.getDay(); }; /** * 마지막 날짜를 반환 한다. * * @return {Number} */ Date.prototype.getLastDate = function() { var tempDate = new Date(this.getFullYear(), this.getMonth()+1, 0); return tempDate.getDate(); }; /** * 주의 갯수를 반환 한다. * * @return {Number} */ Date.prototype.getWeeks = function() { var lastPosition = this.getFirstDay() + this.getLastDate(); return parseInt((lastPosition / 7) + (lastPosition % 7 != 0 ? 1 : 0)); }; function Validate(){}; Validate.prototype = new Object(); /** * object가 null인 경우 true를 반환한다. * 두번째 argument가 있을 경우 결과가 true 이면 두번째 argument를 반환한다. */ Validate.isNull = function(object, value) { switch(arguments.length) { case 1 : return object == null ? true : false; case 2 : return this.isNull(object) ? value : object; default : alert('지원하지 않는 기능 입니다. Usage \nValidate.isNull(object[, value])'); return null; } }; /** * object가 null 이거나 문자열 또는 배열인 경우 길이가 0인 경우 true를 반환한다. * 두번째 argument가 있을 경우 결과가 true 이면 두번째 argument를 반환한다. */ Validate.isEmpty = function(object, value) { switch(arguments.length) { case 1 : return (object == null || (typeof object == 'string' && object.length <= 0)) ? true : false; case 2 : return this.isEmpty(object) ? value : object; default : alert('지원하지 않는 기능 입니다. Usage \nValidate.isEmpty(object[, value])'); return null; } }; /** * 유효한 주민등록번호인 경우만 true를 반환한다. [R]esident [R]egistration [N]umber */ Validate.isRRN = function(value) { var weightCode = '234567892345'; var keyValue = 0; if(!this.isEmpty(arguments[0]) && (arguments[0].length == 13) && this.isNumber(arguments[0])) { for(var index = 0; index < 12; index++) keyValue += (arguments[0].charAt(index) * weightCode.charAt(index)); if(arguments[0].charAt(12) == (11-(keyValue%11))) return true; } return false; }; /* plain text(key1=value1&key2=value2...)형식으로 작성된 param 의 이름 및 값을 인코딩하여 반환한다. */ function encode(param) { var retValue = ''; var indexOf = param.indexOf('?'); if(indexOf >= 0) { retValue = param.substring(0,indexOf+1); param = param.slice(indexOf+1); } if(!Validate.isEmpty(param)) { param = param.replace(/&(([^&=]+)=)/gi,Char.US+'$1'); var params = param.split(Char.US); for(var index = 0; index < params.length; index++) { indexOf = params[index].indexOf('='); if(indexOf >= 0) { var name = params[index].substring(0,indexOf); var value = params[index].slice(indexOf+1); if(index != 0) retValue += '&'; retValue += encodeURIComponent(name)+'='+encodeURIComponent(value); } else { retValue += encodeURIComponent(params[index]); } } } return retValue; } /** * encode 함수를 사용해서 인코딩 된 값을 디코딩한다. */ function decode(param) { var retValue = ''; var indexOf = param.indexOf('?'); if(indexOf >= 0) { retValue = param.substring(0,indexOf+1); param = param.slice(indexOf+1); } if(!Validate.isEmpty(param)) { var params = param.split('&'); for(var index = 0; index < params.length; index++) { indexOf = params[index].indexOf('='); if(indexOf >= 0) { var name = params[index].substring(0,indexOf); var value = params[index].slice(indexOf+1); if(index != 0) retValue += '&'; retValue += decodeURIComponent(name)+'='+decodeURIComponent(value); } else { retValue += decodeURIComponent(params[index]); } } } return retValue; } Request = { protocol : document.URL.replace(/^(([^:]+):\/\/)([^:\/]+)(:([0-9]+))?((\/.*)\/([^\?]*))(\?(.*))?$/gi,'$1'), domain : document.URL.replace(/^(([^:]+):\/\/)([^:\/]+)(:([0-9]+))?((\/.*)\/([^\?]*))(\?(.*))?$/gi,'$3'), port : document.URL.replace(/^(([^:]+):\/\/)([^:\/]+)(:([0-9]+))?((\/.*)\/([^\?]*))(\?(.*))?$/gi,'$5'), URI : document.URL.replace(/^(([^:]+):\/\/)([^:\/]+)(:([0-9]+))?((\/.*)\/([^\?]*))(\?(.*))?$/gi,'$6'), path : document.URL.replace(/^(([^:]+):\/\/)([^:\/]+)(:([0-9]+))?((\/.*)\/([^\?]*))(\?(.*))?$/gi,'$7'), file : document.URL.replace(/^(([^:]+):\/\/)([^:\/]+)(:([0-9]+))?((\/.*)\/([^\?]*))(\?(.*))?$/gi,'$8'), queryString : document.URL.replace(/^(([^:]+):\/\/)([^:\/]+)(:([0-9]+))?((\/.*)\/([^\?]*))(\?(.*))?$/gi,'$10'), parameters : new Array(), getParameter : function(key) { return this.parameters[key]; }, forward : function(file, removeParamName) { var regExp = new RegExp(removeParamName+'=[^&]*&*','gi'); forward('get',this.path+'/'+file+'?'+decode(this.queryString).replace(regExp,'')); } }; if(Request.queryString.length > 0) { var parameters = Request.queryString.replace(/&(([^&=]+)=)/gi,Char.US+'$1').split(Char.US); for(var index = 0; index < parameters.length; index++) { var indexOf = parameters[index].indexOf('='); if(indexOf >= 0) { var name = parameters[index].substring(0,indexOf); var value = parameters[index].slice(indexOf+1); Request.parameters[name] = decodeURIComponent(value); } } } function Cookie(){} Cookie.prototype = new Object(); Cookie = { /* 쿠키에 값을 저장한다. */ set : function(key, value, expirehours) { var cookie = key + '=' + escape(value) + '; '; cookie += 'path=/; '; if(!Validate.isNull(expirehours)) { var today = new Date(); today.setTime(today.getTime() + (1000*60*60*expirehours)); cookie += 'expires=' + today.toGMTString() + ';'; } document.cookie = cookie; }, /* 쿠키에서 key의 값을 찾아 반환한다. 존재하지 않는 경우 null을 반환한다. */ get : function(key) { var retValue = null; var cookie = document.cookie; var start_idx = cookie.indexOf(key + '='); if(start_idx >= 0) { start_idx += key.length + 1; var end_idx = cookie.indexOf(';', start_idx); if(end_idx < 0) end_idx = cookie.length; retValue = unescape(cookie.substring(start_idx,end_idx)); } return retValue; }, /* 쿠키에서 key에 해당하는 값을 삭제한다. */ del : function(key) { var today = new Date(); today.setTime(today.getTime()-100); document.cookie = key + '=; path=/; expires=' + today.toGMTString() + ';'; } }; /** * form 객체를 통해 서비스 요청을 한다. * mothod : 전송방식으로 'get' 또는 'post'을 사용 할 수 있으며, form 객체의 method 속성과 동일하게 동작한다. * 주의. post, get 방식을 제외한 어떠한 전송방식도 지원하지 않으며, 지원형식이 아닐 경우 기본 값으로 설정된다. 기본 값은 get 방식이다. * url : 서비스 요청 주소 파라미터이다. * 일반적인 http 주소형식을 사용하며, 복수의 값을 전송할 경우 'key1=value1&key2=value2...'와 같이 & 문자로 연결해 준다. * 단, value 값에 & 문자를 사용할 경우 %26으로 대체 사용하여야 한다. * target : 서비스 요청에 대한 응답 페이지를 출력할 목적지를 설정하며, form 객체의 target 속성과 동일하게 동작한다. * onSubmit : 서비스 요청 즉시(페이지 분기 전) 실행할 handler 함수를 정의한다. form 객체의 onSubmit 이벤트와 동일하게 동작한다. * 단, handler함수는 return 값을 가져야 하고 항상 boolean 타입 이어야 한다. */ function forward(method,url,target,onSubmit) { var inputCnt = 0; /* input 객체를 생성한다. */ this.createInput = function(type, name, value) { var input = document.createElement('input'); input.setAttribute('id', 'tmp_'+inputCnt++); input.setAttribute('type', type); input.setAttribute('name', name); input.setAttribute('value', value); return input; }; /* form 객체를 생성한다.*/ this.createForm = function(method,action,target,onSubmit) { method = Validate.isEmpty(method.match(/^(get|post)$/gi)) ? 'get' : method.match(/^(get|post)$/gi).toString().toLowerCase(); var form = document.createElement('form'); form.setAttribute('method', method); form.setAttribute('action', action); if(!Validate.isEmpty(target)) form.setAttribute('target', target); if(!Validate.isEmpty(onSubmit)) form.setAttribute('onSubmit', onSubmit); return form; }; var indexOf = url.indexOf('?'); var action = ''; var param = ''; if(indexOf >= 0) { action = url.substring(0,indexOf); param = url.slice(indexOf+1).replace(/&(amp;)*/gi,'&'); } var form = createForm(method,action,target); if(!Validate.isEmpty(param)) { param = param.replace(/&(([^&=]+)=)/gi,Char.US+'$1'); var params = param.split(Char.US); for(var index = 0; index < params.length; index++) { indexOf = params[index].indexOf('='); form.appendChild(createInput('hidden',params[index].substring(0,indexOf),params[index].slice(indexOf+1).replace(/%26/gi,'&').replace(/%25/gi,'%'))); } } document.getElementsByTagName('body')[0].appendChild(form); if(Validate.isEmpty(onSubmit)) form.submit(); else if(typeof onSubmit == 'function' && onSubmit()) form.submit(); else if(typeof onSubmit == 'string') { if(eval(onSubmit)) form.submit(); } return form; } function convertCurrencyFormat(value) { var mod = value.length % 3; var grpCnt = value.length/3 + (mod > 0 ? 1 : 0); var regExp = '(\\d{'+(mod == 0 ? 3 : mod)+'})'; var regExpOut = "$1"; for(var i = 2; i <= grpCnt; i++) { regExp += "(\\d{3})"; regExpOut += ',$'+i; } regExp = new RegExp(regExp+'$','gi'); return value.replace(/\D*/gi,'').replace(regExp,regExpOut); }