
kbl.JMessage=function(){this.init;this.messages;}
kbl.JMessage.prototype={get:function(id,args){if(!this.init){this.messages=new Array();this.messages["JSM-1001"]="저장하시겠습니까?";this.messages["JSM-1002"]="아이디";this.messages["JSM-1003"]="삭제하시겠습니까?";this.messages["JSM-1004"]="{0} 입력해야 합니다.";this.messages["JSM-1005"]="{0}의 크기는 {1}이여야 합니다";this.messages["JSM-1006"]="{0}의 크기는 {1}과 {2} 사이여야 합니다";this.messages["JSM-1007"]="{0}에는 다음(`~!@#$%^&*'\"\\) 특수 문자는 입력할 수 없습니다";this.messages["JSM-1008"]="{0}에는 숫자만을 입력해야 합니다";this.messages["JSM-1009"]="{0}의 숫자는 {1}이여야 합니다";this.messages["JSM-1010"]="{0}의 숫자는 {1} {2} 사이여야 합니다";this.messages["JSM-1011"]="{0} 선택해야 합니다";this.messages["JSM-1012"]="선택할 수 있는 {0}의 수는 {1} 입니다";this.messages["JSM-1013"]="선택할 수 있는 {0}의 수는 {1} {2} 사이여야 합니다";this.messages["JSM-1014"]="{0}의 금액은 {1} 이여야 합니다";this.messages["JSM-1015"]="{0}의 금액는 {1} {2} 사이여야 합니다";this.messages["JSM-1016"]="{0} 올바르게 입력하여 주십시오";this.messages["JSM-1017"]="입력하신 {0} 전자우편주소로 유효하지 않습니다.<br/> 다시 입력하여 주십시오!";this.messages["JSM-1018"]="입력하신 {0} 날짜로 유효하지 않습니다. 다시 입력하여 주십시오!";this.messages["JSM-1019"]="{0}의 날짜는 {1} 이전 이어야 합니다";this.messages["JSM-1020"]="{0}의 날짜는 {1} 이후 이어야 합니다";this.messages["JSM-1021"]="선택할 수 있는 {0}의 날짜는 {1} {2} 사이여야 합니다";this.messages["JSM-1022"]="올바른 파일명이 아닙니다. 파일을 다시 입력해 주시기 바랍니다";this.messages["JSM-1023"]="{0}에 대한 파일을 첨부해야 합니다";this.messages["JSM-1024"]="{0}에 대한 첨부 가능한 파일의 확장자는 {1} 입니다";this.messages["JSM-1025"]="{0}에 대하여 확장자가 {1}인 파일은 첨부가 금지되어 있습니다";this.messages["JSM-1026"]="입력하신 {0} Crontab 표현식으로 유효하지 않습니다.<br/> 다시 입력하여 주십시오!";this.messages["JSM-1027"]="{0}의  {1} 올바른 속성 표현식이 아닙니다";this.messages["JSM-1028"]="{0}의 속성  {1} 필요합니다";this.messages["JSM-1029"]="관련 답글도 함께 삭제됩니다. 삭제하시겠습니까?";this.messages["JSM-1030"]="입력하신 {0} 전화번호 형식에 맞지 않습니다.<br/> 다시 입력하여 주십시오";this.messages["JSM-1031"]="입력하신 {0} 한글만 입력 할 수 있습니다.<br/> 다시 입력하여 주십시오";this.messages["JSM-1032"]="입력하신 {0} 영어만 입력 할 수 있습니다.<br/> 다시 입력하여 주십시오";this.messages["JSM-1033"]="{0}의 자리수는 {1}자 이여야 합니다";this.messages["JSM-1034"]="{0}의 자리수는 {1}자에서 {2}자 사이여야 합니다";this.messages["JSM-1035"]="입력하신 {0}의 번호와 {1}의 번호가 일치하지않습니다.<br/> 다시 입력하여 주십시오";this.messages["JSM-1036"]="{0}은 {1}원 이상 {2}원 이하로 가능합니다.";this.messages["JSM-1037"]="{0}은 {1}원 이상 {2}원 이하 만원단위로 가능합니다.";this.messages["JSM-1038"]="{0}은 {1}원 이상 가능합니다.";this.messages["JSM-1039"]="{0}에 데이터가 없습니다.";this.messages["JSM-1040"]="{0}에 데이터를 선택해 주세요";this.messages["JSM-1041"]="{0}에 입력 금지 문구인 <font color='red'>{1}</font> (이)가 들어있습니다.<br/> 다시 입력하여 주십시오";this.init=true;}
var message=this.messages[id];if(!message){return id;}
if(args){if(typeof args=="object"&&args.length){for(var i=0;i<args.length;i++){var pattern=new RegExp("\\{"+i+"\\}","g");message=message.replace(pattern,args[i]);}}else{message=message.replace(/\{0\}/g,args);}}
return message;},alert:function(obj,id,args,isFocus){Ext.MessageBox.show({width:300,title:'입력오류',msg:this.get(id,args),buttons:Ext.MessageBox.OK,fn:function(e){if(isFocus){obj.focus();obj.select();}},icon:Ext.MessageBox.ERROR});}}
var messages=new kbl.JMessage();kbl.JForm=function(){this.children=new Array();}
kbl.JForm.prototype={add:function(child){this.children[this.children.length]=child;return this;},validate:function(){for(var i=0;i<this.children.length;i++){if(!this.children[i].validate()){return false;}}
return true;}}
kbl.JText=function(name,object){this.name=name;this.object=object;this.min;this.max;this.nullCheck=true;this.rangeCheck=false;this.filterCheck=false;this.regExpCheck=false;this.pattern;this.messageCode="JSM-1004";this.messageParam=[name];this.nullable=kbl.validation.nullable;this.range=kbl.validation.range;}
kbl.JText.prototype={validate:function(){var value=this.object.value;if(this.nullCheck&&kbl.validation.isNull(value)){return messages.alert(this.object,"JSM-1004",kbl.validation.ul(this.name),true);}
if(this.regExpCheck&&!kbl.validation.isNull(value)&&!this.pattern.test(value)){return messages.alert(this.object,this.messageCode,this.messageParam,true);}
if(this.rangeCheck&&!kbl.validation.isNull(value)&&!kbl.validation.checkCharacterSize(value,this.min,this.max)){if(this.min==this.max){return messages.alert(this.object,"JSM-1005",[this.name,this.min],true);}else{return messages.alert(this.object,"JSM-1006",[this.name,this.min,this.max],true);}}
if(this.filterCheck&&kbl.validation.isExistSpacialChar(value)){return messages.alert(this.object,"JSM-1007",[this.name],true);}
return true;},isTelnum:function(){this.checkRegExp(new RegExp("^0[1-9]{1,2}[-. ]?[0-9]{3,4}[-. ]?[0-9]{4}$","g"),"JSM-1030",kbl.validation.un([this.name]));return this;},isEmail:function(){this.checkRegExp(new RegExp("^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$","ig"),"JSM-1017",kbl.validation.un([this.name]));return this;},isKorean:function(){this.checkRegExp(new RegExp("^[가-힝\\s]+$","g"),"JSM-1031",kbl.validation.un([this.name]));return this;},isEnglish:function(){this.checkRegExp(new RegExp("^[A-Z0-9.,_\\s]+$","ig"),"JSM-1032",kbl.validation.un([this.name]));return this;},checkRegExp:function(reg,msgCd,msgParam){this.regExpCheck=true;this.pattern=reg;this.messageCode=msgCd;this.messageParam=msgParam;return this;},filter:function(){this.filterCheck=true;return this;}}
kbl.JNumber=function(name,object,targetElId){this.name=name;this.object=object;this.targetElId=targetElId;this.nullCheck=true;this.rangeCheck=false;this.lengthCheck=false;this.min;this.max;this.minlength;this.maxlength;this.nullable=kbl.validation.nullable;this.range=kbl.validation.range;}
kbl.JNumber.prototype={validate:function(){var value=this.object.value;if(this.nullCheck&&kbl.validation.isNull(value)){return messages.alert(this.object,"JSM-1004",kbl.validation.ul(this.name),true);}
if(isNaN(value)){return messages.alert(this.object,"JSM-1008",this.name,true);}
if(this.rangeCheck&&!kbl.validation.isNull(value)&&!kbl.validation.checkNumberSize(value,this.min,this.max)){if(this.min==this.max){return messages.alert(this.object,"JSM-1009",[this.name,this.min],true);}else{return messages.alert(this.object,"JSM-1010",[this.name,kbl.validation.wa(this.min),this.max],true);}}
if(this.lengthCheck&&!kbl.validation.isNull(value)&&!kbl.validation.checkNumberLength(value,this.minlength,this.maxlength)){if(this.minlength==this.maxlength){return messages.alert(this.object,"JSM-1033",[this.name,this.minlength],true);}else{return messages.alert(this.object,"JSM-1034",[this.name,this.minlength,this.maxlength],true);}}
return true;},limitLength:function(min,max){this.minlength=min;this.maxlength=max;this.lengthCheck=true;return this;}}
kbl.JCurrency=function(name,object,targetElId){this.name=name;this.object=object;this.targetElId=targetElId;this.nullCheck=true;this.rangeCheck=false;this.rangeMoneyCheck=false;this.lengthCheck=false;this.min;this.max;this.type;this.minlength;this.maxlength;this.nullable=kbl.validation.nullable;this.range=kbl.validation.range;this.rangeMoney=kbl.validation.rangeMoney;}
kbl.JCurrency.prototype={validate:function(){var value=this.object.value;if(this.nullCheck&&kbl.validation.isNull(value)){return messages.alert(this.object,"JSM-1004",kbl.validation.ul(this.name),true);}
if(!kbl.validation.isNull(value)&&kbl.validation.isNaN(value)){return messages.alert(this.object,"JSM-1008",this.name,true);}
if(this.rangeCheck&&!kbl.validation.isNull(value)&&!kbl.validation.checkNumberSize(value,this.min,this.max)){if(this.min==this.max){return messages.alert(this.object,"JSM-1009",[this.name,this.min],true);}else{return messages.alert(this.object,"JSM-1010",[this.name,kbl.validation.wa(this.min),this.max],true);}}
if(this.rangeMoneyCheck&&!kbl.validation.isNull(value)&&""!=kbl.validation.checkMoney(value,this.min,this.max,this.type)){var str_min=kbl.validation.getKoreaMoney(this.min);var str_max=kbl.validation.getKoreaMoney(this.max);if(this.type=="1"){return messages.alert(this.object,"JSM-1036",[this.name,str_min,str_max],true);}else if(this.type=="2"){return messages.alert(this.object,"JSM-1037",[this.name,str_min,str_max],true);}else if(this.type=="3"){return messages.alert(this.object,"JSM-1038",[this.name,str_min,str_max],true);}}
if(this.lengthCheck&&!kbl.validation.isNull(value)&&!kbl.validation.checkNumberLength(value,this.minlength,this.maxlength)){if(this.minlength==this.maxlength){return messages.alert(this.object,"JSM-1033",[this.name,this.minlength],true);}else{return messages.alert(this.object,"JSM-1034",[this.name,this.minlength,this.maxlength],true);}}
kbl.validation.makeHiddenInput(this,value,/[,]/g);return true;},limitLength:function(min,max){this.minlength=min;this.maxlength=max;this.lengthCheck=true;return this;}}
kbl.JDate=function(name,object,targetElId,re){this.DAY_OF_WEEK=new Array("일","월","화","수","목","금","토");this.name=name;this.object=object;this.nullCheck=true;this.rangeCheck=false;this.date=null;this.targetElId=targetElId;if(re){this.re=re;}else{this.re=/^\d{4}[-.\/]?\d{2}[-.\/]?\d{2}$/;}
this.min=null;this.max=null;this.format="YYYY년MM월DD일(DAY)";this.parse();this.nullable=kbl.validation.nullable;this.range=kbl.validation.range;}
kbl.JDate.prototype={validate:function(){var value=this.object.value;if(this.nullCheck&&kbl.validation.isNull(value)){return messages.alert(this.object,"JSM-1004",kbl.validation.ul(this.name),true);}
if(!this.nullCheck&&kbl.validation.isNull(value)){kbl.validation.makeHiddenInput(this,value,/[^\d]/g);return true;}
if(this.date==null){return messages.alert(this.object,"JSM-1018",kbl.validation.wa(this.name),true);}
if(this.rangeCheck){var aDate=this.toDate();var minDate,maxDate;if(this.min!=null&&this.min!=""){minDate=new kbl.JDate().parse(this.min);}else{minDate=new kbl.JDate().parse("10000101");}
if(this.max!=null&&this.max!=""){maxDate=new kbl.JDate().parse(this.max);}else{maxDate=new kbl.JDate().parse("99991231");}
if(this.min==null&&aDate>maxDate.toDate()){return messages.alert(this.object,"JSM-1019",[this.name,maxDate],true);}else if(this.max==null&&aDate<minDate.toDate()){return messages.alert(this.object,"JSM-1020",[this.name,minDate],true);}else if(aDate>maxDate.toDate()||aDate<minDate.toDate()){return messages.alert(this.object,"JSM-1021",[this.name,minDate,maxDate],true);}}
kbl.validation.makeHiddenInput(this,value,/[^\d]/g);return true;},toDate:function(){return this.date;},parse:function(){var value=this.object;if(this.parse.arguments.length>0){value=this.parse.arguments[0];}else if(this.object&&typeof this.object=="object"){value=this.object.value;}else{this.date=new Date();return this;}
this.date=null;if(value.search(this.re)>=0){value=value.replace(/[^\d]/g,"");var aDate=new Date(value.substring(0,4),value.substring(4,6)-1,value.substring(6,8));if(aDate.getFullYear()==Math.abs(value.substring(0,4))&&aDate.getMonth()==Math.abs(value.substring(4,6))-1&&aDate.getDate()==Math.abs(value.substring(6,8))){this.date=aDate;}}
return this;},toString:function(){var formatString=this.format;if(toString.arguments!=undefined&&toString.arguments.length>0){formatString=toString.arguments[0];}
var str=formatString.replace(/YYYY/g,this.getYear());str=str.replace(/MM/g,this.getMonth());str=str.replace(/DD/g,this.getDate());str=str.replace(/DAY/g,this.getDay());str=str.replace(/yy/g,new String(this.getYear()).substring(2,4));return str;},getYear:function(){return this.date==null?1000:this.date.getFullYear();},getMonth:function(){var num=(this.date==null?0:this.date.getMonth()+1);return(num<10?'0'+new String(num):num);},getDate:function(){var num=(this.date==null?0:this.date.getDate());return(num<10?'0'+new String(num):num);},getDay:function(){return(this.date==null?this.DAY_OF_WEEK[0]:this.DAY_OF_WEEK[this.date.getDay()]);}}
kbl.JCheck=function(name,object){this.name=name;this.object=object;this.min;this.max;this.nullCheck=true;this.rangeCheck;this.nullable=kbl.validation.nullable;this.range=kbl.validation.range;}
kbl.JCheck.prototype={validate:function(){var number=kbl.validation.isCheckedCnt(this.object);if(this.nullCheck&&number==0){return messages.alert(this.object,"JSM-1011",kbl.validation.ul(this.name),false);}
if(this.rangeCheck&&number!=0&&(number<this.min||number>this.max)){if(this.min==this.max){return messages.alert(this.object,"JSM-1012",[this.name,this.min],false);}else{return messages.alert(this.object,"JSM-1013",[this.name,kbl.validation.wa(this.min),this.max],false);}}
return true;}}
kbl.JSelect=function(name,object){this.name=name;this.object=object;this.min;this.max;this.nullCheck=true;this.rangeCheck;this.range=kbl.validation.range;this.nullable=kbl.validation.nullable;}
kbl.JSelect.prototype={validate:function(){var value=this.object.value;if(this.nullCheck&&kbl.validation.isNull(value)){return messages.alert(this.object,"JSM-1011",kbl.validation.ul(this.name),false);}
var number=kbl.validation.isSelectedCnt(this.object);if(this.rangeCheck&&number!=0&&(number<this.min||number>this.max)){if(this.min==this.max){return messages.alert(this.object,"JSM-1012",[this.name,this.min],false);}else{return messages.alert(this.object,"JSM-1013",[this.name,kbl.validation.wa(this.min),this.max],false);}}
return true;}}
kbl.JFile=function(name,object){this.name=name;this.object=object;this.nullCheck=true;this.allowedExtension;this.disallowedExtension;this.nullable=kbl.validation.nullable;}
kbl.JFile.prototype={validate:function(){var value=this.object.value;var re=/^[a-z]:\\(.){0,300}$/i;if(value!=""&&!value.match(re)){return messages.alert(this.object,"JSM-1022",true);}
if(this.nullCheck&&kbl.validation.isNull(value)){return messages.alert(this.object,"JSM-1023",[this.name],false);}
if(this.allowedExtension){var passed=true;var extension=kbl.validation.getFileExt(value);if(extension){for(var j=0;j<this.allowedExtension.length;j++){if(this.allowedExtension[j].toLowerCase()==extension){break;}
if(j==this.allowedExtension.length-1){passed=false;}}}
if(!passed){return messages.alert(this.object,"JSM-1024",[this.name,this.allowedExtension.join(", ")],false);}}
if(this.disallowedExtension){var passed=true;var extension=kbl.validation.getFileExt(value);if(extension){for(var j=0;j<this.disallowedExtension.length;j++){if(this.disallowedExtension[j].toLowerCase()==extension){passed=false;break;}
if(j==this.disallowedExtension.length-1){passed=true;}}}
if(!passed){return messages.alert(this.object,"JSM-1025",[this.name,this.disallowedExtension.join(", ")],false);}}
return true;},allowFileExt:function(array){this.allowedExtension=array;return this;},denyFileExt:function(array){this.disallowedExtension=array;return this;}}
kbl.validation={makeHiddenInput:function(obj,value,regExp){var replaceVal=value.replace(regExp,"");if(obj.targetElId&&document.getElementById(obj.targetElId)){document.getElementById(obj.targetElId).value=replaceVal;}else if(obj.targetElId){var cEl=document.createElement("INPUT");cEl.type="hidden";cEl.name=obj.targetElId;cEl.id=obj.targetElId;cEl.value=replaceVal;obj.object.parentNode.insertBefore(cEl,obj.object);}else{obj.object.value=replaceVal;}},nullable:function(){this.nullCheck=false;return this;},range:function(min,max){this.rangeCheck=true;this.min=min;this.max=max;return this;},rangeMoney:function(min,max,type){this.rangeMoneyCheck=true;this.min=min;this.max=max;this.type=type;return this;},checkMoney:function(value,min,max,type){if(!this.nullCheck||!kbl.validation.isNull(value)){var flag=kbl.validation.checkNumberSize(value,min,max);if(flag&&"1"==type){type="";}else if("2"==type){var money=Number(value.replace(/[,]/g,"").replace(/[.][0-9]+$/g,""));if(flag&&money%10000==0){type="";}}else if("3"==type&&flag){type="";}
return type;}},isJongsong:function(wd){var INDETERMINATE=0;var NOJONGSONG=1;var JONGSONG=2;var word=new String(wd);var numStr1="013678lmnLMN";var numStr2="2459aefhijkoqrsuvwxyzAEFHIJKOQRSUVWXYZ";if(word==null||word.length<1){return INDETERMINATE;}
var lastChar=word.charAt(word.length-1);var lastCharCode=word.charCodeAt(word.length-1);if(numStr1.indexOf(lastChar)>-1){return JONGSONG;}else if(numStr2.indexOf(lastChar)>-1){return NOJONGSONG;}
if(lastCharCode<0xac00||lastCharCode>0xda0c){return INDETERMINATE;}
else{var lastjongseong=(lastCharCode-0xAC00)%(21*28)%28;if(lastjongseong==0){return NOJONGSONG;}else{return JONGSONG;}}},ul:function(s){var ul0=new Array("(을)를","를","을");return s+ul0[kbl.validation.isJongsong(s)];},ka:function(s){var ka0=new Array("(이)가","가","이");return s+ka0[kbl.validation.isJongsong(s)];},un:function(s){var un0=new Array("(은)는","는","은");return s+un0[kbl.validation.isJongsong(s)];},wa:function(s){var arr=new Array("(와)과","와","과");return s+arr[kbl.validation.isJongsong(s)];},checkCharacterSize:function(data,min,max){var total=0;for(var i=0;i<data.length;i++){var a=data.charAt(i);if(escape(a).length>=6){total=total+2;}else{total=total+1;}}
return total>=min&&total<=max;},checkNumberSize:function(data,min,max){var parseData=data.replace(/[,]/g,"").replace(/[.][0-9]+$/g,"");if(max<=0){return parseData>=min;}else{return parseData>=min&&parseData<=max;}},checkNumberLength:function(data,min,max){var parseData=data.replace(/[,]/g,"").replace(/[.][0-9]+$/g,"");var total=parseData.length;return total>=min&&total<=max;},isNull:function(val){return!new RegExp("[^\\s]+","g").test(val);},isNaN:function(val){return!new RegExp("^[+-]?[0-9]{1,3}(?:,?[0-9]{3})*(?:\\.[0-9]{2})?$","g").test(val);},isExistSpacialChar:function(val){return new RegExp("[`~!@#$%^&*'\"]","g").test(val);},isCheckedCnt:function(list){if(list==null)return 0;var result=0;if(list.checked){return 1;}
for(var i=0;i<list.length;i++){if(list[i].checked){result++;}}
return result;},isSelectedCnt:function(item){if(item==null)return 0;var result=0;for(var i=0;i<item.length;i++){if(item[i].selected){result++;}}
return result;},getFileExt:function(value){var ext;var extension=value;var index=extension.lastIndexOf(".");if(index!=-1){ext=extension.substring(index+1).toLowerCase();}
return ext;},getKoreaMoney:function(money){var arrayNum=new Array("","일","이","삼","사","오","육","칠","팔","구");var arrayUnit=new Array("","십","백","천","만 ","십만 ","백만 ","천만 ","억 ","십억 ","백억 ","천억 ","조 ","십조 ","백조");var arrayStr=new Array();var numStr=String(money);var numStr=kbl.stripCommas(numStr);var len=numStr.length;var isValid=true;var hanStr="";if(isValid){for(i=0;i<len;i++){arrayStr[i]=numStr.substr(i,1)}
code=len;for(i=0;i<len;i++){code--;tmpUnit="";if(arrayNum[arrayStr[i]]!=""){tmpUnit=arrayUnit[code];if(code>4){if((Math.floor(code/4)==Math.floor((code-1)/4)&&arrayNum[arrayStr[i+1]]!="")||(Math.floor(code/4)==Math.floor((code-2)/4)&&arrayNum[arrayStr[i+2]]!="")){tmpUnit=arrayUnit[code].substr(0,1);}}}
hanStr+=arrayNum[arrayStr[i]]+tmpUnit;}}
return hanStr;}}