/********************************************************************* * 1. 업무 시스템 명 : 농심 기업 사이트 * 2. 단위 시스템 명 : 공통 * 3. 원도우 명 : 공통 * 4. 프로그램 개요 : 공통 javascript * 5. 작 성 자 : 조승연 * 6. 작 성 일 : 2010. 05. 03 * 7. 주 의 사 항 : * 8. 버 전 : v1.0 * 9. 변 경 자 : * 10. 요청서번호 : * 11. 변 경 사 유 : *********************************************************************/ /** *팝업관련. */ popUp = function (){ this.url = ""; this.id = ""; this.widht = ""; this.height = ""; } popUp.prototype = { setParam : function (url ,name ,width ,height){ this.url = url; this.id = name; this.widht = width; this.height = height; this.winOpen(); }, winOpen : function(){ window.open(this.url,this.name,'width='+this.widht+',height='+this.height+',top='+this.scXValue()+',left='+this.scYValue()+',toobar=no,scrollbar,menubar=no,status=no ,directories=no,'); }, scXValue : function(){ var cw = screen.availWidth; // 화면 너비 var sw = this.width; // 띄울 창의 너비 return (cw-sw)/2; }, scYValue : function(){ var ch = screen.availHeight; // 화면 높이 var sh = this.height; // 띄울 창의 높이 return (ch-sh)/2; } } /** * 날짜 */ chDate = function(){ this.inputDate = ""; } chDate.prototype = { /** * 날짜 형태인지 아닌지를 체크 * @param inputDate * @return true/false */ isDate : function(inputDate){ this.inputDate = inputDate; return this.CheckDate(); }, CheckDate : function(){ if(this.inputDate == null || this.inputDate=="" || this.inputDate.length < 8){ return false; } return this.dateCheck(this.inputDate.substring(0,4),this.inputDate.substring(4,6),this.inputDate.substring(6,8)); }, dateCheck : function (yy,mm,dd){ var lastDay = 0; var monthNo = 0; // Non-Leap year Month days.. DOMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; // Leap year Month days.. lDOMonth = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; if (yy < 1900) { return false; } if (mm < 1 || mm >12) { return false; } monthNo = mm - 1; /* 윤년 Check */ if ((yy % 4) == 0) { if ((yy % 100) == 0 && (yy % 400) != 0) { lastDay = DOMonth[monthNo]; } else { lastDay = lDOMonth[monthNo]; } } else { lastDay = DOMonth[monthNo]; } if (dd < 1 || dd > lastDay) { return false; } return true; }, /** * 현재 날짜를 구하는 메소드 (YYYY-MM-DD)형식 * @return 현재 날짜를 리턴 */ getDate : function (){ return this.getYear()+'-'+this.getMonth()+'-'+this.getDay(); }, getYear : function(){ return (new Date()).getYear(); }, getMonth : function(){ var month = (new Date()).getMonth()+1; if(month<10) month = "0"+month; return month; }, getDay : function(){ var day = (new Date()).getDate(); if(day<10) day = "0"+day; return day; }, /** * 날짜 From~To 체크 * @param fdate * @param tdate * @return */ date_check_ft : function (fdate,tdate) { if(this.isDate(fdate) && this.isDate(tdate)){ var Fyyyy = fdate.substring(0,4); var Fmm = fdate.substring(4,6); var Fdd = fdate.substring(6,8); var Tyyyy = tdate.substring(0,4); var Tmm = tdate.substring(4,6); var Tdd = tdate.substring(6,8); var datef = Fyyyy+"/"+Fmm+"/"+Fdd; var datet = Tyyyy+"/"+Tmm+"/"+Tdd; if (datef>datet) { return false; } return true; }else{ return false; } } } /** * 문자 숫자 체크 */ str_ch = function (){ } str_ch.prototype = { /** * 문자열 타입체크 * type : 체크할 문자타입 (A,N,AN) * val : 체크할 문자열 * @param type * @param val * @return */ checkAN : function ( type, val ) { var regExpr; if ( type == 'A' ) { // 알파벳만... regExpr = /^[a-zA-Z]+$/; } else if ( type == 'N' ) { // 숫자만... regExpr = /^[0-9]+$/; } else if ( type == 'AN' ) { // 알파벳, 숫자만... regExpr = /^[a-zA-Z0-9]+$/; } if ( !regExpr.test( val ) ) { return false; } return true; }, /** * 문자의 앞뒤 공백 제거 함수 * @param inString * @return */ trim : function (inString){ var i; var istrLen = String(inString).length; var bFrontChk = false; var bRearChk = false; var iFront = -1; var iRear = istrLen; var j = istrLen-1; inString = String(inString); for (i=0; i < istrLen; i++) { if(!bFrontChk){ if(inString.charAt(i) != " "){ iFront = i; bFrontChk = true; } } if(!bRearChk){ if(inString.charAt(j) != " "){ iRear = j+1 bRearChk = true; } } j-- } if(iFront == -1) { return ""; }else { return inString.substring(iFront,iRear); } }, /** * 널체크를 위한 공통 스크립트 * @param InObj * @param InMsg * @return */ NullCheckT : function (InObj, InMsg) { if (InObj.value == "") { alert(InMsg + "입력하세요"); InObj.focus(); InObj.select(); return true; } return false; }, /** * 널체크를 위한 공통 스크립트(select) * @param InObj * @param InMsg * @return */ NullCheckS : function (InObj, InMsg) { if (InObj.value == "") { alert(InMsg + " 선택하세요"); InObj.focus(); return true; } return false; }, /** * textarea 글자수 제한 * @param aro_name * @param ari_max * @return */ fc_chk_byte : function (aro_name,ari_max) { var ls_str = aro_name.value; // 이벤트가 일어난 컨트롤의 value 값 var li_str_len = ls_str.length; // 전체길이 var li_max = ari_max; // 제한할 글자수 크기 var i = 0; // for문에 사용 var li_byte = 0; // 한글일경우는 2 그밗에는 1을 더함 var li_len = 0; // substring하기 위해서 사용 var ls_one_char = ""; // 한글자씩 검사한다 var ls_str2 = ""; // 글자수를 초과하면 제한할수 글자전까지만 보여준다. for(i=0; i< li_str_len; i++) { ls_one_char = ls_str.charAt(i); // 한글자추출 // 한글이면 2를 더한다. if (escape(ls_one_char).length > 4) { li_byte += 2; // 그밖의 경우는 1을 더한다. } else { li_byte++; } // 전체 크기가 li_max를 넘지않으면 if(li_byte <= li_max) { li_len = i + 1; } } // 전체길이를 초과하면 if(li_byte > li_max) { alert( li_max + " 글자를 초과 입력할수 없습니다. \n 초과된 내용은 자동으로 삭제 됩니다. "); ls_str2 = ls_str.substr(0, li_len); aro_name.value = ls_str2; return true; } return false; }, /** * 숫자만 입력가능하게 하는 함수 * @param object * @return */ chkNum : function (form){ var digits="0123456789"; var temp for (var i=0;i 128) { alert('영문과 숫자조합으로 입력해주십시요.'); x.value=""; x.focus(); return; } } }, /** * 체크박스 전체선택 함수 * @param theForm * @return */ check : function (theForm){ cbox = theForm.menuChk; if(cbox.length) { // 여러 개일 경우 for(var i = 0; i 필수 항목일때 REQUIRED='REQUIRED' 명시 * 입력 길이 체크 MAXBYTE='10' * 형식 체크 email, userid, hangul, number, engonly, jumin, bizno * @param form객체 * @return */ formCheck : function (form){ for (i = 0; i < form.elements.length; i++ ) { var el = form.elements[i]; el.value = el.value.trim(); /**필수항목 선택 * 예) */ if (el.getAttribute("REQUIRED") != null) { if (el.value == null || el.value == "") { return this.doError(el,this.NO_BLANK,""); } } /**입력길이 제한 * 예) */ if (el.getAttribute("MAXBYTE") != null && el.value != "") { var len = 0; for(j=0; j 128) ? 2 : 1 //한글 한글자당 3바이트씩 계산 } if (len > parseInt(el.getAttribute("MAXBYTE"))) { maxbyte = el.getAttribute("MAXBYTE"); return this.doError(el,TOO_LONG,""); } } /** 입력항목에 맞는 형식체크 * 예. 이메일 체크인 경우) * 기타 체크는 특수패턴 함수 참조 */ if (el.getAttribute("OPTION") != null && el.value != "") { if(el.getAttribute("OPTION") == "email" ){ return this.isValidEmail(el); }else if(el.getAttribute("OPTION") == "userid" ){ return this.isValidUserid(el); }else if(el.getAttribute("OPTION") == "hangul" ){ return this.hasHangul(el); }else if(el.getAttribute("OPTION") == "number" ){ return this.isNumeric(el); }else if(el.getAttribute("OPTION") == "engonly" ){ return this.alphaOnly(el); }else if(el.getAttribute("OPTION") == "jumin" ){ return this.isValidJumin(el); }else if(el.getAttribute("OPTION") == "bizno" ){ return this.isValidBizNo(el); } } } return true; }, josa : function(str,tail){ return (str.hasFinalConsonant()) ? tail.substring(0,1) : tail.substring(1,2); }, /** * 이메일 형식 체크 * @param el * @return */ isValidEmail : function (el) { var pattern = /^[_a-zA-Z0-9-\.]+@[\.a-zA-Z0-9-]+\.[a-zA-Z]+$/; return (pattern.test(el.value)) ? true : this.doError(el,NOT_VALID,"del"); }, /** * 아이디 체크 * @param el * @return */ isValidUserid : function (el) { var pattern = /^[a-zA-Z]{1}[a-zA-Z0-9_]{4,11}$/; return (pattern.test(el.value)) ? true : this.doError(el,"{name+은는} 5자이상 12자 미만이어야 하고,\n 영문,숫자, _ 문자만 사용할 수 있습니다","del"); }, /** * 한글포함여부 체크(한글을 반드시 포함해야 하는 경우) * @param el * @return */ hasHangul : function (el) { var pattern = /[가-히]/; return (pattern.test(el.value)) ? true : this.doError(el,"{name+은는} 반드시 한글을 포함해야 합니다","del"); }, /** * 한글포함여부 체크(영문만 입력해야 하는 경우) * @param el * @return */ alphaOnly : function (el) { var pattern = /^[a-zA-Z]+$/; return (pattern.test(el.value)) ? true : this.doError(el,NOT_VALID,"del"); }, /** * 숫자 형식 체크(숫자만 입력해야 하는 경우) * @param el * @return */ isNumeric : function (el) { var pattern = /^[-0-9]+$/; return (pattern.test(el.value)) ? true : this.doError(el,"{name+은는} 반드시 숫자로만 입력해야 합니다","del"); }, /** * 주민번호 유효성 체크 * @param el * @return */ isValidJumin : function (el) { var pattern = /^([0-9]{6})-?([0-9]{7})$/; var num = el.value; if (!pattern.test(num)) return this.doError(el,NOT_VALID,"del"); num = RegExp.$1 + RegExp.$2; var sum = 0; var last = num.charCodeAt(12) - 0x30; var bases = "234567892345"; for (i=0; i<12; i++) { if (isNaN(num.substring(i,i+1))) return this.doError(el,NOT_VALID,"del"); sum += (num.charCodeAt(i) - 0x30) * (bases.charCodeAt(i) - 0x30); } var mod = sum % 11; return ((11 - mod) % 10 == last) ? true : this.doError(el,NOT_VALID,"del"); }, /** * 사업자번호 유효성 체크 * @param el * @return */ isValidBizNo : function (el) { var pattern = /([0-9]{3})-?([0-9]{2})-?([0-9]{5})/; var num = el.value; if (!pattern.test(num)) return this.doError(el,NOT_VALID,"del"); num = RegExp.$1 + RegExp.$2 + RegExp.$3; var cVal = 0; for (var i=0; i<8; i++) { var cKeyNum = parseInt(((_tmp = i % 3) == 0) ? 1 : ( _tmp == 1 ) ? 3 : 7); cVal += (parseFloat(num.substring(i,i+1)) * cKeyNum) % 10; } var li_temp = parseFloat(num.substring(i,i+1)) * 5 + '0'; cVal += parseFloat(li_temp.substring(0,1)) + parseFloat(li_temp.substring(1,2)); return (parseInt(num.substring(9,10)) == 10-(cVal % 10)%10) ? true : this.doError(el,NOT_VALID,"del"); }, doError : function(el,type,action){ var pattern = /{([a-zA-Z0-9_]+)\+?([가-히]{2})?}/; var name = (hname = el.getAttribute("HNAME")) ? hname : el.getAttribute("NAME"); pattern.exec(type); var tail = (RegExp.$2) ? this.josa(eval(RegExp.$1),RegExp.$2) : ""; alert(type.replace(pattern,eval(RegExp.$1) + tail)); if (action == "sel") { el.select(); } else if (action == "del") { el.value = ""; } el.focus(); return false; } } /** * 리스트 공통 함수 */ pageList = function(frmName){ this.frmName = frmName; //폼 객체를 받는다 } pageList.prototype = { /** * 페이징 처리 인수 값이 하나인 경우 * @param page * @return */ goPage : function(page){ document.getElementById("txtPage").value = page; this.frmName.submit(); return true; }, /** * 페이징 처리 인수 값이 두개인 경우 * @param vPage, vBlock * @return */ goPage : function (vPage, vBlock) { document.getElementById("txtSelectPage").value = vPage; document.getElementById("txtSelectBlock").value = vBlock; this.frmName.submit(); return true; } } /** * 메일 발송 */ mail_send = function (){ this.vChildWin = new Array(1); } mail_send.prototype = { OpenWindow : function(vGubn, vUrl, vWinInfo, vWinName){ if (this.vChildWin[vGubn] != null) this.vChildWin[vGubn].close(); this.vChildWin[vGubn] = window.open(vUrl,vWinName,vWinInfo); if (this.vChildWin[vGubn].opener == null) this.vChildWin[vGubn].opener = window; }, AllMail : function(){ var vUrl,vWinInfo,vWinName; vWinInfo = " toolbar=no,location=no ,directories=no,status=no, "; vWinInfo += " menubar=no,scrollbars=no,resizable=no ,copyhistory=no,"; vWinInfo += " width=500,height=420,left=370,top=200"; vWinName = "MailALL"; if(document.getElementById("txtMCount").value == "0") { alert("메일 발송할 대상이 없습니다."); return false; } vUrl = "/cmm/pMail.jsp?txtType=QUERY&txtTo=" + document.getElementById("txtMailSQL").value; this.OpenWindow(1,vUrl,vWinInfo,vWinName); }, SendMail : function(){ var vUrl,vWinInfo,vWinName; vWinInfo = " toolbar=no,location=no ,directories=no,status=no, "; vWinInfo += " menubar=no,scrollbars=no,resizable=no ,copyhistory=no,"; vWinInfo += " width=500,height=420,left=370,top=200"; vWinName = "MailOne"; var vMailList = ""; var vStr = ""; var vForm = ""; var vCnt = Number(document.getElementById("txtMCount").value); // 현재 생성된 객체의 Count var vOkCnt = 0; // 체크 Count 초기화... for (var i = 1; i < vCnt ; i++) { // 객체의 갯수 만큼.. vStr = "document.getElementById('chkMail" + i+"')"; // 객체변수 생성... vForm = eval(vStr); // 객체로 재평가.. if (vForm.checked == true && vForm.value != "" ) { // Click여부 Check vOkCnt += 1; // Click 객수 Count vMailList += vForm.value + ";"; // 선택된 제품코드를 구분자를 두어 저장한다.. } } if (vOkCnt == 0) { alert("메일이 없으면 발송할수 없습니다."); return false; } vUrl = "/cmm/pMail.jsp?txtType=EMAIL&txtTo="+vMailList; this.OpenWindow(2,vUrl,vWinInfo,vWinName); }, SendMailMaster : function () { var vUrl,vWinInfo,vWinName; vWinInfo = " toolbar=no,location=no ,directories=no,status=no, "; vWinInfo += " menubar=no,scrollbars=no,resizable=no ,copyhistory=no,"; vWinInfo += " width=510,height=372,left=370,top=200"; vWinName = "MailOne"; var vMailList = ""; vUrl = "/cmm/pMail.jsp?txtType=ADMIN&txtTo="+vMailList; this.OpenWindow(2,vUrl,vWinInfo,vWinName); }, SendBrchMail : function (charge) { var vUrl,vWinInfo,vWinName; vWinInfo = " toolbar=no,location=no ,directories=no,status=no, "; vWinInfo += " menubar=no,scrollbars=no,resizable=no ,copyhistory=no,"; vWinInfo += " width=510,height=372,left=370,top=200"; vWinName = "MailOne"; var vMailList = charge; vUrl = "/cmm/pMail.jsp?txtType=EMAIL&txtTo="+vMailList; this.OpenWindow(2,vUrl,vWinInfo,vWinName); } } var Mails = new mail_send();