boaCommon.js 84 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571
  1. //var host =window.document.url;
  2. //var url = host.substring(0,host.lastIndexOf("/"))+"/";
  3. //var url = "http://localhost:8088/xgmes3/"; //var url = "http://172.16.0.172:8040/"; var url = "http://10.10.0.10:8040/"; //var url = "http://172.16.0.126:8040/xgmes3/";
  4. //http://10.10.0.10:8040/
  5. /***************************************************************************************************************/
  6. /* 1. Setup Global variable & Event 글로벌 변수/ 이벤트 관련 설정
  7. /***************************************************************************************************************/
  8. /* Setup Grid-Cell Style(Adding Grid, Deleting Grid, Initailizing Gird) : 그리드 셀 스타일 설정(그리드 추가, 그리드 삭제시, 그리드 초기화 */
  9. var insertRowStyle = "#FEFFCA";
  10. var deleteRowStyle = "#FFEFE4";
  11. var initCellStyle = "#FFFFFF";
  12. function xforms_submit() { }
  13. /*
  14. * 서브미션 종료후 이벤트 처리(error 및 msg 처리)
  15. *
  16. */
  17. function xforms_submit_done(){
  18. body.disabled = false;
  19. if ( event.currentTarget != event.target ) return;
  20. commMsgBox();
  21. }
  22. /***************************************************************************************************************/
  23. /* 2. TF관련 공통함수 (공통개발)
  24. /*
  25. /* 1) commSubmit : 서브미션 실행
  26. /* 2) commSendReq : "/root/reqData"에 노드값을 복사
  27. /* 3) commCombo : 공통코드 콤보값 호출
  28. /* 4) commAddFile : 파일추가 (작업중)
  29. /* 5) commModifyFile : 파일수정(작업중)
  30. /* 6) commDelFile : 파일삭제 (작업중)
  31. /* 7) commDownLoad : 파일다운로드
  32. /* 8) commFwdPopClose : 팝업창을 닫으면서 부모창에 노드값을 넘겨준다
  33. /* 9) commMsgCall : 화면의 하단바에 메시지 생성(작업중)
  34. /* 10) commAppendData : 파일복사기능
  35. /* 11) commMultiUpdate : 그리드 멀티업데이트 시 상태값에 따라 노드생성
  36. /* 12) commDetailView : 그리드 - 폼방식 화면 상세보기
  37. /* 13) commFormSet: : 폼 - 폼 같은 인스턴스노드 복사
  38. /* 14) commGroupInit : 그룹안 컨트롤 값 초기화(삭제)
  39. /* 15) commComfirmBox : 확인경고창
  40. /* 16) commGridInit : 그리드 셀 스타일 초기화
  41. /* 17) commAddRow : 그리드 행 추가
  42. /* 18) commDelRow : 그리드 행 삭제
  43. /* 19) commPagingList : 그리드 페이지 처리(관련함수: goPage(),제약조건 그리드 조회시 total 값과 size값을 가져와야함)
  44. /* 20) commMsgBox : 메시지 알림창호출
  45. /* 21) commReqCheck : 필수입력확인
  46. /*****************************************************************************************************************/
  47. /**
  48. * @function : commSubmit
  49. * @param submitID, serviceTag, action, refresh,type
  50. * @return
  51. * @wirter :
  52. * @write date :
  53. * @modify datae : 07.08.13
  54. * @description 서브미션 실행
  55. * submitID : 서브미션ID, 글루서비스아이디
  56. * serviceTag : 글루 서비스 테그
  57. * action : url
  58. [refresh] : 서브미션이후의 refresh 여부 default 값 true
  59. [type] : 서브미션 타입지정 파일업로드시 'file' 적용 default post
  60. */
  61. function commSubmit(submitID, serviceTag, action, refresh, type) {
  62. body.disabled = true;
  63. var mediatype = "";
  64. if(!body.isChild(submitID)) {
  65. model.createChild("xforms:submission", "id:" + submitID + ";"); //서브미션 동적으로 생성
  66. }
  67. if(refresh == "" || refresh == null) {
  68. refresh = true;
  69. } else if (refresh == 'file') {
  70. mediatype = "file";
  71. refresh = true;
  72. }
  73. if(type == "" || type == null) type = mediatype;
  74. if(type == "file") {
  75. document.all(submitID).attribute("method") = "form-data-post";
  76. document.all(submitID).attribute("mediatype") = "multipart/form-data";
  77. } else {
  78. document.all(submitID).attribute("method") = "post";
  79. document.all(submitID).attribute("mediatype") = "application/x-www-form-urlencoded";
  80. }
  81. model.makeValue("/root/reqData/" + serviceTag, "1");
  82. model.makeValue("/root/reqData/ServiceName", submitID);
  83. document.all(submitID).attribute("ref") = "/root/reqData";
  84. document.all(submitID).attribute("resultref") = "/root/resData";
  85. document.all(submitID).attribute("action") = url + action;
  86. document.all(submitID).attribute("encoding") = "utf-8";
  87. model.send(submitID, refresh);
  88. }
  89. /**
  90. * @function : commSendReq
  91. * @param arguments
  92. * @return
  93. * @wirter :
  94. * @write date :
  95. * @modify datae : 07.08.13
  96. * @description "/root/reqData에 노드값을 복사한다"
  97. * arguments : 서비스에 담을 노드값
  98. */
  99. function commSendReq() {
  100. try {
  101. var length = arguments.length;
  102. model.removeNodeset("/root/reqData");
  103. model.makeNode("/root/reqData");
  104. for(var j = 0; j < length; j++) {
  105. var srcref = arguments[j];
  106. var dup_node = instance1.selectSingleNode(srcref); //두번째로 보내고 싶은 노드를 선택
  107. var dup_nodeList = dup_node.childNodes; //그 노드의 하위노드를 읽음
  108. var cnt = 1;
  109. for (var i = 0; i < dup_nodeList.length; i++) {
  110. var copy_node = srcref + "/" + dup_nodeList.item(i).nodeName; //하위노드의 인스턴스를 읽어서 노드 조합
  111. var nodeSetYn = instance1.selectNodes(copy_node);
  112. if(nodeSetYn.length>1) {
  113. model.duplicate("/root/reqData", copy_node + "[" + cnt + "]"); // 노드셑인경우 같은 노드이름의 인덱스값으로 찾아서 복사한다
  114. cnt++;
  115. } else {
  116. model.duplicate("/root/reqData", copy_node);
  117. }
  118. }
  119. }
  120. } catch (e) {
  121. model.alert("Error", "해당노드의 선택이 잘못되었습니다");
  122. return false;
  123. }
  124. }
  125. /**
  126. * @function : commCombo
  127. * @param arguments
  128. * @return
  129. * @wirter :
  130. * @write date :
  131. * @modify datae : 07.08.13
  132. * @description 공통콤보 호출("코드값"+[|A: 전체 |S : 선택 | 없으면 기냥])
  133. * commCombo("A001|A","A002|S","B002");
  134. */
  135. function commCombo() {
  136. var argCnt = arguments.length;
  137. for(i=0; i<argCnt ; i++) {
  138. var comboNode =""
  139. if(arguments[i].indexOf("|")!=-1) {
  140. comboNode =arguments[i].substr(0,arguments[i].indexOf("|"));
  141. } else {
  142. comboNode =arguments[i];
  143. }
  144. model.makeValue("/root/reqData/commCombo["+(i+1)+"]",comboNode);
  145. model.makeNode("/root/codeData/"+comboNode+"_VO");
  146. }
  147. commSubmit("comm-service","combo","glueAction.do");
  148. for(i=0; i<argCnt ; i++) {
  149. var comboNode =""
  150. if(arguments[i].indexOf("|")!=-1) {
  151. comboNode =arguments[i].substr(0,arguments[i].indexOf("|"));
  152. commAppendData("/root/codeData/"+comboNode+"_VO","/root/resData/"+comboNode+"_VO");
  153. var label =""
  154. if(arguments[i].indexOf("|A")!=-1 || arguments[i].indexOf("|a")!=-1) {
  155. label = "=전체=";
  156. } else if(arguments[i].indexOf("|S")!=-1 || arguments[i].indexOf("|s")!=-1) {
  157. label = "=선택=";
  158. } else {
  159. label ="=전체=";
  160. }
  161. model.makeValue("/root/temp/"+comboNode+"_Row/COMM_DETL_CDNM",label);
  162. model.makeValue("/root/temp/"+comboNode+"_Row/COMM_DETL_CD","");
  163. model.duplicate("/root/codeData/"+comboNode+"_VO","/root/temp/"+comboNode+"_Row","*[1]");
  164. model.removenode("/root/temp");
  165. }else { comboNode =arguments[i];
  166. commAppendData("/root/codeData/"+comboNode+"_VO","/root/resData/"+comboNode+"_VO");
  167. }
  168. }
  169. model.refresh();
  170. }
  171. /**
  172. * @param : commAddFile[파일업로드이름], fileGridName[파일그리드]
  173. * @return
  174. * @wirter :
  175. * @write date : 2007-07-20
  176. * @description : 파일 선택해서 파일 그리드에 추가한다. 데이타가 넘어가는건 아님
  177. *
  178. */
  179. function commAddFile(fileUploadName, fileGridName ){
  180. var files = window.fileDialog("open", "|", true);
  181. var filelist = files.split("|");
  182. var numberOfFiles = filelist.length;
  183. if (numberOfFiles != 0 && filelist[0] != "") {
  184. for(var i = 0 ; i < filelist.length ; i++ ) {
  185. // model.makeNode("/root/fileData/fileGrid[" + (fileGridName.rows + i) + "]/attach_file_name");
  186. model.makeValue("/root/fileData/fileGrid[" + (fileGridName.rows + i) + "]/attach_file_name", filelist[i]);
  187. // alert("File Size : " + fileUploadName.getFileSize(i));
  188. }
  189. }
  190. fileGridName.refresh();
  191. // 'upload' 버튼을 눌러 실제 업로드를 수행하기 이전에 upload1.revalidate() 를 통해 validation(유효성)
  192. // 체크를 수행한다. (여기에서 설정된 유효성은 확장자가 zip인 파일만을 업로드 할 수 있도록 하는 것이다.)
  193. fileUploadName.revalidate();
  194. }
  195. /**
  196. * @param : commModifyFile[파일업로드이름], fileGridName[파일그리드]
  197. * @return
  198. * @wirter :
  199. * @write date : 2007-07-20
  200. * @description : 선택된 파일그리드 상의 파일을 변경한다. 데이타가 넘어가는건 아님
  201. *
  202. */
  203. function commModifyFile(fileUploadName, fileGridName){
  204. var files = window.fileDialog("open", "|", true);
  205. var filelist = files.split("|");
  206. var numberOfFiles = filelist.length;
  207. if (numberOfFiles != 0 && filelist[0] != "") {
  208. for(var i = 0 ; i < filelist.length ; i++ ) {
  209. if(i==0) {
  210. model.setValue("/root/fileData/fileGrid[" + (fileGridName.row) + "]/attach_file_name", filelist[0]);
  211. alert("File Size : " + fileUploadName.getFileSize(0));
  212. } else {
  213. model.makeNode("/root/fileData/fileGrid[" + (fileGridName.rows + (i-1)) + "]/attach_file_name");
  214. model.setValue("/root/fileData/fileGrid[" + (fileGridName.rows + (i-1)) + "]/attach_file_name", filelist[i]);
  215. // alert("File Size : " + fileUploadName.getFileSize(i));
  216. }
  217. }
  218. }
  219. fileUploadName.refresh();
  220. // 'upload' 버튼을 눌러 실제 업로드를 수행하기 이전에 upload1.revalidate() 를 통해 validation(유효성)
  221. // 체크를 수행한다. (여기에서 설정된 유효성은 확장자가 zip인 파일만을 업로드 할 수 있도록 하는 것이다.)
  222. fileUploadName.revalidate();
  223. }
  224. /**
  225. * @param : commDelFile[파일그리드]
  226. * @return
  227. * @wirter :
  228. * @write date : 2007-07-20
  229. * @description : 선택된 파일그리드 상의 파일을 삭제한다. 기존 파일키는 임시 키로 저장한다.(테이블 삭제해주기 위해서)
  230. * (테이블의 정보를 삭제하기 위해서 키가 존재해야 하기 때문). 데이타가 넘어가는건 아님
  231. */
  232. function commDelFile(fileGridName){
  233. var fileKey = fileGridName.valueMatrix(fileGridName.row , fileGridName.colRef("file_id"));
  234. if(fileKey != null && fileKey != "")
  235. {
  236. model.makeNode("/root/fileData/v_file_key");
  237. model.setValue("/root/fileData/v_file_key",fileKey);
  238. }
  239. fileGridName.deleterow(fileGridName.row) ;
  240. }
  241. /**
  242. * @param : commDownLoad[파일그리드]
  243. * @return
  244. * @wirter :
  245. * @write date : 2007-07-20
  246. * @description : 선택된 파일그리드상의 파일을 다운로드한다.
  247. */
  248. // var downloadPosition = "c:/app/emis/fileupload";
  249. var downloadPosition = url+"files/";
  250. function commDownLoad(fileGridName){
  251. var currentTarget = event.target;
  252. var isCell = fileGridName.isCell(currentTarget);
  253. var clickedRowPos = fileGridName.row;
  254. var clickedColPos = fileGridName.col;
  255. var downloadFileName;
  256. var completeDownloadPosition;
  257. var filePath = fileGridName.valueMatrix(fileGridName.row,fileGridName.colRef("attach_file_name"));
  258. if (isCell && clickedRowPos > 0) {
  259. downloadFileName = fileGridName.labelMatrix(clickedRowPos, clickedColPos);
  260. completeDownloadPosition = downloadPosition+downloadFileName;
  261. completeDownloadPosition = encodeURI(completeDownloadPosition);
  262. var file = window.fileDialog("save","","",downloadFileName,"xls","엑셀 문서(*.xls)|*.xls|All Files (*.*)|*.*");
  263. model.download(completeDownloadPosition,file,false);
  264. }
  265. }
  266. /**
  267. * @param : fileName[파일명]
  268. * @return
  269. * @wirter :
  270. * @write date : 2007-08-07
  271. * @description : 파일을 다운로드한다.
  272. */
  273. function fcDirectDownLoad(fileName){
  274. var downloadFileName = fileName;
  275. var completeDownloadPosition;
  276. completeDownloadPosition = downloadPosition +"/"+ downloadFileName;
  277. var file = window.fileDialog("save","","",downloadFileName,"xls","엑셀 문서(*.xls)|*.xls|All Files (*.*)|*.*");
  278. model.download(completeDownloadPosition,file,false);
  279. }
  280. /**
  281. * @param : fileGridName[파일그리드]
  282. * @return
  283. * @wirter :
  284. * @write date : 2007-07-20
  285. * @description : 파일을 업로드한후 파일그리드에 넣어준다.
  286. */
  287. function fcCompleteFile(fileGridName){
  288. model.resetInstanceNode("/root/fileData/fileGrid");
  289. fileGridName.refresh();
  290. var isError = model.getValue("/root/resultData/Err_Msg[1]");
  291. if (isError != "") {
  292. //공통메세지 처리
  293. msgWrite(model.getValue("/root/res/Err_Msg[2]"));
  294. }
  295. // appendData("/root/fileData/fileGrid","/root/resultData/fileGrid");
  296. model.refresh();
  297. }
  298. /**
  299. * @function : commFwdPopClose()
  300. * @param : arguments 넘겨줄 인스턴스 노드값 (/root/fwdData/ 밑에 생성됨)
  301. * @return
  302. * @wirter :
  303. * @write date : 2007-07-25
  304. * @description : 부모창 노드(/root/fwdData/reqData)으로 팝업창의 노드를 넘겨주고 팝업창을 닫는다.
  305. */
  306. function commFwdPopClose() {
  307. try
  308. {
  309. var length = arguments.length;
  310. opener.model.removenode("/root/fwdData/infoData");
  311. opener.model.makeNode("/root/fwdData/infoData");
  312. for(var j = 0; j<length; j++){
  313. var node1 = instance1.selectSingleNode(arguments[j]);
  314. opener.model.duplicate("/root/fwdData/infoData",node1.cloneNode(true));
  315. }
  316. }
  317. catch (e)
  318. {
  319. model.alert("Error", "해당노드의 선택이 잘못되었습니다");
  320. return false;
  321. }
  322. window.close()
  323. }
  324. /*
  325. /**
  326. * @function : commMsgCall()
  327. * @param : arguments 메시지코드, 인자값
  328. * @return
  329. * @wirter :
  330. * @write date : 2007-07-25
  331. * @description : 메시지호출 테스트 하단 bar 에 Msg 설정
  332. */
  333. function commMsgCall() {
  334. //실제화면작업시
  335. // htmlwindow.document.Script.msgCall(msg);
  336. //테스트 작업시
  337. var msg =""
  338. var argLength = arguments.length;
  339. if (argLength>1) {
  340. var vTempArray;
  341. var vReturnString = "";
  342. vTempArray = arguments[0].split("@");
  343. if(vTempArray.length!=(argLength)) {alert('인자값의 수가 다릅니다!'); return; }
  344. for(var i=0; i<vTempArray.length-1; i++)
  345. {
  346. vReturnString += vTempArray[i] + arguments[(i+1)];
  347. }
  348. vReturnString += vTempArray[vTempArray.length-1];
  349. msg = vReturnString;
  350. } else {
  351. msg = arguments[0];
  352. }
  353. try {
  354. parent.capMsg.value= msg;
  355. }catch(e) {
  356. capMsg.value= msg;
  357. }
  358. model.refresh();
  359. }
  360. /**
  361. * @type : function
  362. * @access : public
  363. * @desc : 불리언값에 따라 옮길곳에 데이타를 날리고 옮길지, append시키고 날릴지를 판단한다.
  364. * @sig : trgXpath, srcXpath, pboolean
  365. * @param : trgXpath - 맵핑을 시킬곳의 위치
  366. * @param : srcXpath - 서버에서 내려온 데이타
  367. * @param : pboolean - trgXpath의 노드를 살릴지 지울지 판단
  368. * @return : 없음.
  369. */
  370. function commAppendData(trgXpath, srcXpath, pboolean) {
  371. if (!pboolean || pboolean == "")
  372. pboolean = "false"; // 모드가 안들어오면 default(single)로 만듬
  373. switch (pboolean) {
  374. case "true":
  375. var srcNode = instance1.selectSingleNode(srcXpath);
  376. var trgNode = instance1.selectSingleNode(trgXpath);
  377. var srNode_child = srcXpath.childNodes;
  378. var trNode_child = trgXpath.childNodes;
  379. var spl = srcXpath.split("/");
  380. var tot_path = "";
  381. var LastNode = spl[spl.length-1];
  382. for(var z = 1; z < spl.length-1; z++) {
  383. tot_path += "/"+spl[z];
  384. }
  385. var src_sub = instance1.selectSingleNode(tot_path);
  386. var src_sub_child = src_sub.childNodes;
  387. var t_spl = trgXpath.split("/");
  388. var t_tot_path = "";
  389. var t_LastNode = t_spl[t_spl.length-1];
  390. for(var h = 1; h < t_spl.length-1; h++) {
  391. t_tot_path += "/" + t_spl[h];
  392. }
  393. var trg_sub = instance1.selectSingleNode(t_tot_path);
  394. var trg_sub_child = trg_sub.childNodes;
  395. model.makeNode("/root/srctmpNode");
  396. model.copyNode("/root/srctmpNode", t_tot_path);
  397. for(var u = 0; u<trg_sub_child.length; u ++){
  398. if(trg_sub_child.item(u).tagname != t_LastNode){
  399. model.removeNodeset("/root/srctmpNode/"+trg_sub_child.item(u).tagname);
  400. }
  401. }
  402. var srctmpNode = instance1.selectSingleNode("/root/srctmpNode");
  403. var srctmpNode_child = srctmpNode.childNodes;
  404. model.makeNode("/root/backupNode");
  405. model.copyNode("/root/backupNode", tot_path);
  406. for(var u = 0; u<src_sub_child.length; u ++){
  407. if(src_sub_child.item(u).tagname != LastNode){
  408. model.removenodeset("/root/backupNode/"+src_sub_child.item(u).tagname);
  409. }
  410. }
  411. for(var i = srctmpNode_child.length; i>0; i --) {
  412. model.duplicate("/root/backupNode", "/root/srctmpNode/"+LastNode+"["+i+"]","*[1]");
  413. }
  414. model.removeNodeset(trgXpath);
  415. model.removeNodeset("/root/srctmpNode");
  416. var bkNode = instance1.selectSingleNode("/root/backupNode");
  417. var bkNode_child = bkNode.childNodes;
  418. /*
  419. for(var i = bkNode_child.length; i>0; i --) {
  420. model.duplicate(t_tot_path, "/root/backupNode/"+LastNode+"["+i+"]","*[1]");
  421. }*/
  422. for(var i =1 ; i<=bkNode_child.length; i ++) {
  423. model.duplicate(t_tot_path, "/root/backupNode/"+LastNode+"["+i+"]");
  424. }
  425. model.removeNodeset("/root/backupNode");
  426. break;
  427. case "false":
  428. var srcNode = instance1.selectSingleNode(srcXpath);
  429. var trgNode = instance1.selectSingleNode(trgXpath);
  430. var srNode_child = srcXpath.childNodes;
  431. var trNode_child = trgXpath.childNodes;
  432. var spl = srcXpath.split("/");
  433. var tot_path = "";
  434. var LastNode = spl[spl.length-1];
  435. for(var z = 1; z<spl.length-1; z++) {
  436. tot_path += "/"+spl[z];
  437. }
  438. var src_sub = instance1.selectSingleNode(tot_path);
  439. var src_sub_child = src_sub.childNodes;
  440. var t_spl = trgXpath.split("/");
  441. var t_tot_path = "";
  442. var t_LastNode = t_spl[t_spl.length-1];
  443. for(var h = 1; h<t_spl.length-1; h++) {
  444. t_tot_path += "/"+t_spl[h];
  445. }
  446. var trg_sub = instance1.selectSingleNode(t_tot_path);
  447. var trg_sub_child = trg_sub.childNodes;
  448. model.removenode(trgXpath);
  449. model.makeNode("/root/backupNode");
  450. model.copyNode("/root/backupNode", tot_path);
  451. for(var u = 0; u<src_sub_child.length; u ++){
  452. if(src_sub_child.item(u).tagname != LastNode){
  453. model.removenodeset("/root/backupNode/"+src_sub_child.item(u).tagname);
  454. }
  455. }
  456. var bkNode = instance1.selectSingleNode("/root/backupNode");
  457. var bkNode_child = bkNode.childNodes;
  458. for(var i =1 ; i<=(bkNode_child.length+1); i ++) {
  459. model.duplicate(t_tot_path, "/root/backupNode/"+LastNode+"["+i+"]");
  460. }
  461. model.removeNodeset("/root/backupNode");
  462. break;
  463. }
  464. }
  465. /**
  466. * @type : function
  467. * @access : public
  468. * @desc : 데이터그리드를 멀티업데이트할때 nodeset을 새로 구성한다.
  469. * <pre>
  470. * commMultiUpdate(gridID,"/root/dest","A",false,"rowStuts")
  471. * </pre>
  472. * @sig : gridID,newNodesetPath,multiFlag,bRebuild,newEleName
  473. * @param : gridID - 해당 데이터그리드의 아이디 또는 데이터그리드 객체.
  474. * @param : newNodesetPath - 업데이트 데이터가 저장될 노드패스 Xpath.
  475. * @param : multiFlag - 업데이트모드(A:전체, I:인서트만, U:업데이트만,D:딜리트만)
  476. * @param : bRebuild - 기존 nodeset을 새로구성:true, 기존 req에 각 row의 변경스트링만 추가.
  477. * @param : newEleName - bRebuild->true : 연산플래그(i,u,d)를 저장할 노드명,
  478. * bRebuild->flase: 변경된 각각의 ROW 업데이트스트링을 저장할 노드명
  479. * @return : boolean
  480. */
  481. function commMultiUpdate(gridID,newNodesetPath,multiFlag,bRebuild,newEleName) {
  482. var oGrid = (typeof gridID == 'string')?document.controls(gridID):gridID;
  483. var data = oGrid.getUpdateData();
  484. var rowSep = (oGrid.attribute("rowsep")=='')?'|':oGrid.attribute('rowsep');
  485. var colSep = (oGrid.attribute("colsep")=='')?'^':oGrid.attribute('colsep');
  486. var up_data = data.split(rowSep);
  487. var nHeaderLen = 2;
  488. var nodesetPath = oGrid.attribute("nodeset");
  489. if(up_data.length <= nHeaderLen){
  490. return false;
  491. }
  492. var insertFlag = 0;
  493. var updateFlag = 0;
  494. var deleteFlag = 0;
  495. var arrHeader = new Array();
  496. var arrData = new Array();
  497. var oldNodeset = model.instances(0).selectSingleNode(nodesetPath);
  498. var strNodesetName = nodesetPath.substring(nodesetPath.lastIndexOf("/")+1);
  499. model.makeNode(newNodesetPath);
  500. var parentNode = model.instances(0).selectSingleNode(newNodesetPath);
  501. for(var i=0;i<up_data.length-1;i++){
  502. var vRow = up_data[i].split(colSep);
  503. if(i==0) {
  504. arrHeader = vRow;
  505. continue;
  506. }
  507. var up_flag = vRow[0];
  508. var bInsert = (up_flag == "i" && multiFlag=="I")?true:false;
  509. var bUpdate = (up_flag == "u" && multiFlag=="U")?true:false;
  510. var bDelete = (up_flag == "d" && multiFlag=="D")?true:false;
  511. var bMulti = (multiFlag=="A")?true:false;
  512. if(bInsert){
  513. if(!bRebuild) {
  514. var rowNode = model.instances(0).createElement(newEleName);
  515. rowNode.nodeValue = up_data[i];
  516. parentNode.appendChild(rowNode);
  517. } else {
  518. arrData[insertFlag++] = vRow;
  519. }
  520. } else if(bUpdate){
  521. if(!bRebuild) {
  522. var rowNode = model.instances(0).createElement(newEleName);
  523. rowNode.nodeValue = up_data[i];
  524. parentNode.appendChild(rowNode);
  525. } else {
  526. arrData[updateFlag++] = vRow;
  527. }
  528. }else if(bDelete){
  529. if(!bRebuild) {
  530. var rowNode = model.instances(0).createElement(newEleName);
  531. rowNode.nodeValue = up_data[i];
  532. parentNode.appendChild(rowNode);
  533. } else {
  534. arrData[deleteFlag++] = vRow;
  535. }
  536. }else if(bMulti){
  537. if(!bRebuild) {
  538. var rowNode = model.instances(0).createElement(newEleName);
  539. rowNode.nodeValue = up_data[i];
  540. parentNode.appendChild(rowNode);
  541. } else {
  542. arrData[(i-1)] = vRow;
  543. }
  544. }
  545. }
  546. if(arrData.length < 1 && bRebuild) return false;
  547. if(bRebuild) {
  548. for(var i=0; i<arrData.length; i++) {
  549. var r = arrData[i];
  550. var rowNode = model.instances(0).createElement(strNodesetName);
  551. for(var j=0; j<arrHeader.length; j++) {
  552. if(j==1)
  553. continue;
  554. var colName;
  555. if(j==0) {
  556. colName = newEleName;
  557. } else {
  558. colName = arrHeader[j];
  559. }
  560. var colNode = model.instances(0).createElement(colName);
  561. colNode.nodeValue = r[j];
  562. rowNode.appendChild(colNode);
  563. }
  564. parentNode.appendChild(rowNode);
  565. var flagNode = model.instances(0).selectNodes(newNodesetPath+"/"+strNodesetName+"["+(i+1)+"]/"+newEleName);
  566. if( flagNode.length > 1 ) {
  567. for( var k = 2; k <= flagNode.length; k++ ) {
  568. model.removeNode(newNodesetPath+"/"+strNodesetName+"["+(i+1)+"]/"+newEleName+"["+k+"]");
  569. }
  570. }
  571. }
  572. }
  573. return true;
  574. }
  575. /**
  576. * @function : commDetailView
  577. * @access : public
  578. * @desc : 두개의 노드를 비교해서 같은 엘리먼트가 있으면 값을 복사한다.
  579. * @sig : datagridID, f_set
  580. * @param : f_set - 복사될 곳의 위치
  581. * @param : datagridID - 선택한 행의 그리드ID
  582. * @return : 없음.
  583. */
  584. function commDetailView(datagridID,f_set) {
  585. if( typeof datagridID == 'string' ) datagridID = document.controls(datagridID);
  586. var f_get = datagridID.attribute("nodeset")+"["+(datagridID.row-datagridID.fixedRows+1)+"]";
  587. var node = instance1.selectSingleNode(f_get);
  588. if(node != null){
  589. var nodeChild = node.childNodes;
  590. var node_detail = instance1.selectSingleNode(f_set);
  591. var nodeChild_detail = node_detail.childNodes;
  592. var tag = "";
  593. var tag_detail = "";
  594. var get_value = "";
  595. var lower_tag = "";
  596. for(var i = 0; i < nodeChild.length; i ++) {
  597. tag = nodeChild.item(i).tagname;
  598. get_value = model.getValue(f_get+ "/"+ tag);
  599. for(var y = 0 ; y < nodeChild_detail.length; y ++ ) {
  600. tag_detail = nodeChild_detail.item(y).tagname;
  601. if(tag == tag_detail) {
  602. model.setValue(f_set+ "/"+ tag_detail, get_value);
  603. }
  604. }
  605. }
  606. model.refresh();
  607. }
  608. }
  609. /**
  610. * @function : commFormSet
  611. * @access : public
  612. * @desc : 두개의 노드를 비교해서 같은 엘리먼트가 있으면 값을 복사한다.
  613. * @sig : f_get, f_set
  614. * @param : f_set - 복사될 곳의 위치
  615. * @param : f_get - 복사할곳의 위치D
  616. * @return : 없음.
  617. */
  618. function commFormSet(f_set,f_get) {
  619. var node = instance1.selectSingleNode(f_get);
  620. if(node != null){
  621. var nodeChild = node.childNodes;
  622. var node_detail = instance1.selectSingleNode(f_set);
  623. var nodeChild_detail = node_detail.childNodes;
  624. var tag = "";
  625. var tag_detail = "";
  626. var get_value = "";
  627. var lower_tag = "";
  628. for(var i = 0; i < nodeChild.length; i ++) {
  629. tag = nodeChild.item(i).tagname;
  630. get_value = model.getValue(f_get+ "/"+ tag);
  631. for(var y = 0 ; y < nodeChild_detail.length; y ++ ) {
  632. tag_detail = nodeChild_detail.item(y).tagname;
  633. if(tag == tag_detail) {
  634. model.setValue(f_set+ "/"+ tag_detail, get_value);
  635. }
  636. }
  637. }
  638. model.refresh();
  639. }
  640. }
  641. /**
  642. * @function : commGroupInit
  643. * @access : public
  644. * @desc : 그룹하위 control 초기화
  645. * @sig :
  646. * @param :groupid
  647. * @return : 없음.
  648. */
  649. function commGroupInit(groupid)
  650. {
  651. var ctrCnt = groupid.children.length;
  652. for(var j=0 ; j < ctrCnt ; j++)
  653. {
  654. var ctr = groupid.children.item( j );
  655. if(ctr.elementName == "xforms:input" || ctr.elementName == "xforms:output" || ctr.elementName =="xforms:select1") {
  656. model.setValue(ctr.attribute("ref"),"");
  657. } else if(ctr.elementName == "xforms:datagrid" )
  658. {
  659. model.removeNodeset(ctr.attribute("nodeset"));
  660. }
  661. }
  662. groupid.refresh();
  663. }
  664. /**
  665. * @function : commComfirmBox
  666. * @access : public
  667. * @desc : 윈도우 comfirm 창
  668. * @sig : str, title
  669. * @param : str - 나타낼 문자열
  670. * @param : title - 제목
  671. * @return : yes 1 , no 0
  672. */
  673. function commComfirmBox(str, title) {
  674. var MyReturn = model.alert( str, title, 0x20 | 4 );
  675. if( MyReturn == 6) return 1;
  676. else return 0;
  677. return MyReturn;
  678. }
  679. /**
  680. * @function : commGridInit
  681. * @access : public
  682. * @desc : 그리드 셀 스타일과 디세이블 상태를 초기화 시켜준다
  683. * @sig : datagrid1
  684. * @param : datagrid1 - 그리드 id
  685. * @return :
  686. */
  687. function commGridInit(datagrid1) {
  688. if( typeof datagrid1 == 'string' ) datagrid1 = document.controls(datagrid1);
  689. datagrid1.allStyle("data","background-color")= initCellStyle;
  690. datagrid1.isReadOnly(0,0,(datagrid1.rows-1),(datagrid1.cols-1))=false;
  691. }
  692. /**
  693. * @function : commAddRow
  694. * @access : public
  695. * @desc : 그리드 행추가
  696. * @sig : datagrid1
  697. * @param : datagrid1 - 그리드 id
  698. * @return :
  699. */
  700. function commAddRow(datagrid1) {
  701. if( typeof datagrid1 == 'string' ) datagrid1 = document.controls(datagrid1);
  702. datagrid1.addRow();
  703. datagrid1.rowStyle(datagrid1.rows-1,"data","background-color") =insertRowStyle;
  704. datagrid1.row=datagrid1.rows-1;
  705. datagrid1.isSelected(datagrid1.rows)=true;
  706. }
  707. /**
  708. * @function : commDelRow
  709. * @access : public
  710. * @desc : 그리드 행삭제
  711. * @sig : datagrid1
  712. * @param : datagrid1 - 그리드 id
  713. * @return :
  714. */
  715. function commDelRow(datagrid1,chkRef) {
  716. for(var i=datagrid1.rows; i>(datagrid1.fixedRows-1) ; i--) {
  717. if(datagrid1.valueMatrix(i,datagrid1.colRef(chkRef))=='true') {
  718. if( datagrid1.rowStatus(i)==1 ||datagrid1.rowStatus(i)==3 )
  719. {
  720. datagrid1.deleteRow(i);
  721. }else if(datagrid1.rowStatus(i)==4 || datagrid1.rowStatus(i)==0)
  722. {
  723. datagrid1.isReadOnly(i,0,i,(datagrid1.cols-1))=true;
  724. datagrid1.rowStyle(i,"data","background-color") = deleteRowStyle;
  725. datagrid1.addStatus(i,"delete");
  726. }
  727. }
  728. }
  729. }
  730. /**
  731. * @function : goPage
  732. * @ param : gridID - 페이징 처리할 gridID
  733. * @ param : blockSize - 페이질 블럭 크기
  734. * @ param : submissionID - 그리드를 조회하는 서브미션ID
  735. * @ param : txCode - 그리드를 조회하는 txCode
  736. * @ param : resGridNodeSet - resultRef 중 그리드의 Nodeset으로 복사될 Node
  737. * @ param : page - 이동할 페이지
  738. * desc : 지정한 페이지로 이동.
  739. */
  740. function goPage (gridID,serviceName,serviceTag,action,page,pageSize, blockSize,resGridNodeSet,funcNm,importID) {
  741. action = action+"&pageEvent=1";
  742. commSubmit(serviceName,serviceTag,action);
  743. if( typeof gridID == 'string' ) gridID = document.controls(gridID);
  744. var gridNode = gridID.attribute("nodeset");
  745. var pageNode =gridNode.substr(0,gridNode.lastIndexOf("/"))
  746. commAppendData(pageNode,resGridNodeSet); //<-- 가져온 값을 그리드 데이터에 붙인다
  747. //var page
  748. gridID.rebuild();
  749. gridID.setSeqRowHeader((page-1)*pageSize+1-gridID.fixedRows);
  750. model.makeValue("/root/pageInfo/currentPage",page);
  751. if(action.indexOf("?")!=-1) action = action.substr(0,action.indexOf("?"));
  752. commPagingList(gridID, blockSize, serviceName, serviceTag, action, resGridNodeSet, page, funcNm,importID) ;
  753. if ( funcNm != "" && funcNm != null ) {
  754. eval(funcNm + "();");
  755. }
  756. }
  757. /**
  758. * @ function : commPagingList
  759. * @ param : gridID - 페이징 처리할 gridID
  760. * @ param : blockSize - 페이질 블럭 크기
  761. * @ param : serviceName - 그리드를 조회하는 serviceName
  762. * @ param : serviceTag - 그리드를 조회하는 serviceTag
  763. * @ param : actionName - 그리드를 조회하는 actionName
  764. * @ param : resGridNodeSet - resultRef 중 그리드의 Nodeset으로 복사될 Node
  765. * @ param : page - 호출할 현재페이지
  766. * @ param : funcNm - 페이지 생성 후
  767. * @ param : importID - import가 여러개일경우 임포트 아이디를 지정해준다.
  768. * @ description : 페이징 블럭 생성
  769. */
  770. function commPagingList(gridID, blockSize, serviceName, serviceTag, actionName, resGridNodeSet, page, funcNm ,importID) {
  771. var gridId = gridID.attribute("id");
  772. if( typeof gridID == 'string' ) gridID = document.controls(gridID);
  773. if (importID != "" && importID != null && importID !='undefined') {
  774. if( typeof importID == 'string' ) importID = document.controls(importID);
  775. }
  776. var gridNode = gridID.attribute("nodeset");
  777. var pageNode =gridNode.substr(0,gridNode.lastIndexOf("/"))+"/PageSize";
  778. var totSizeNode =gridNode.substr(0,gridNode.lastIndexOf("/"))+"/ToTal";
  779. var pageSize = Number(model.getValue(pageNode));
  780. var totSize = Number(model.getValue(totSizeNode));
  781. if(instance1.selectSingleNode("/root/pageInfo/currentPage")!=null) page = Number(model.getValue("/root/pageInfo/currentPage"));
  782. var currentPage = page;
  783. var totalPageCount = Number(Math.ceil(totSize/pageSize));
  784. var totalItemCount = totSize; // 총 건수
  785. // 현재페이지 설정
  786. if ( currentPage == 0 ) currentPage = 1 ;
  787. // 페이징블럭 시작번호, 끝번호
  788. var startPageNo = ((Math.ceil(currentPage/blockSize)-1) * blockSize) + 1; // 페이징블럭 시작번호
  789. var endPageNo = Math.ceil(currentPage/blockSize) * blockSize; // 페이징블럭 끝번호
  790. if ( endPageNo > totalPageCount ) endPageNo = totalPageCount ; // 끝번호는 최대가 총페이지수
  791. var prevStart = startPageNo - blockSize ; // 이전일 경우 시작할 페이지번호
  792. if ( prevStart < 1 ) prevStart = 1; // 이전 시작 페이지는 최소 1
  793. var nextStart = startPageNo + blockSize ; // 다음일 경우 시작할 페이지번호
  794. var lastStart = (Math.ceil(totalPageCount/blockSize) - 1) * blockSize + 1 ; // 맨끝일 경우 시작할 페이지번호
  795. // 버튼들의 시작 위치 정하기
  796. var pageNoCnt = endPageNo - startPageNo + 1 ; // 페이징블럭에 생길 페이지갯수
  797. var q = 22 * pageNoCnt - 2 + 100 ; // 필요한 크기: 숫자당크기(숫자+숫자간간격) * 페이지숫자갯수 - 2(마지막 숫자간 간격) + 양옆버튼총크기(간격포함)
  798. var importSize = 0;
  799. var importSize1;
  800. if(importID!='undefined' && importID!=null && importID!=""){
  801. importSize1 = importID.attribute("width");
  802. importSize = Number(importSize1.substr(0,importSize1.indexOf("px")));
  803. } else {
  804. var ctrCnt = body.children.length;
  805. for ( var i = 0 ; i < ctrCnt ; i++ ) {
  806. var ctr = body.children.item(i);
  807. if ( ctr.elementName == "xforms:import") {
  808. importSize1 = ctr.attribute("width");
  809. importSize = Number(importSize1.substr(0,importSize1.indexOf("px")));
  810. }
  811. }
  812. }
  813. var s = Math.ceil((importSize - q) / 2) ; // 시작점 : ( 334(전체크기) - 필요한크기 ) / 2
  814. // 이전,맨앞 버튼 처리
  815. btn_nav_first.attribute("left") = s ;
  816. btn_nav_first.visible = true;
  817. s += 15 ;
  818. btn_nav_prev.attribute("left") = s ;
  819. btn_nav_prev.visible = true;
  820. s += 35 ;
  821. if ( currentPage <= blockSize ) {
  822. btn_nav_first.disabled =true;
  823. btn_nav_prev.disabled = true;
  824. } else {
  825. oFirstButton = grp_nav.children.item("btn_nav_first") ;
  826. oFirstButton.attribute("onclick") = "goPage('"+gridId+"','"+serviceName+"','"+serviceTag+"','"+actionName+"?curPageNum=1',"+1+","+pageSize+","+blockSize+",'"+resGridNodeSet+"','"+funcNm+"');" ;
  827. oPrevButton = grp_nav.children.item("btn_nav_prev") ;
  828. oPrevButton.attribute("onclick") = "goPage('"+gridId+"','"+serviceName+"','"+serviceTag+"','"+actionName+"?curPageNum="+prevStart+"',"+prevStart+","+pageSize+","+blockSize+",'"+resGridNodeSet+"','"+funcNm+"');" ;
  829. btn_nav_first.disabled = false;
  830. btn_nav_prev.disabled = false;
  831. }
  832. // 해당하는 페이지만큼 생성
  833. var j = 0;
  834. for ( var i = startPageNo ; i <= endPageNo ; i++ ) {
  835. j ++ ;
  836. if ( grp_nav.children.item("caption_nav_"+ j ) != null) {
  837. oCaption = grp_nav.children.item("caption_nav_"+j);
  838. oCaption.attribute("visibility") = "visible" ;
  839. } else {
  840. var propText = "id:caption_nav_" + (j) + ";left:" + s + "px; top:5px; width:23px; height:15px;";
  841. oCaption = grp_nav.createChild("xforms:caption", propText);
  842. }
  843. if (i==currentPage) {
  844. oCaption.attribute("font-weight") = "bold;";
  845. oCaption.attribute("onclick") = "";
  846. } else {
  847. oCaption.attribute("font-weight") ="normal;";
  848. oCaption.attribute("onclick") = "goPage('"+gridId+"','"+serviceName+"','"+serviceTag+"','"+actionName+"?curPageNum="+i+"',"+i+","+pageSize+","+blockSize+",'"+resGridNodeSet+"','"+funcNm+"');" ;
  849. }
  850. oCaption.attribute("text") = i;
  851. oCaption.attribute("left") = s;
  852. s += 15 ; // 다음 숫자의 포지션 계산(숫자의 width(23) + 2
  853. }
  854. for ( var i = (endPageNo-startPageNo+2) ; i <= blockSize; i++ ) {
  855. if ( grp_nav.children.item("caption_nav_"+ i ) != null) {
  856. oCaption = grp_nav.children.item("caption_nav_"+i);
  857. oCaption.attribute("visibility") = "hidden" ;
  858. }
  859. }
  860. // 다음,맨뒤 버튼 처리
  861. s += 15;
  862. btn_nav_next.attribute("left") = s ;
  863. btn_nav_next.visible = true;
  864. s += 33 ;
  865. btn_nav_last.attribute("left") = s ;
  866. btn_nav_last.visible = true;
  867. if ( Math.ceil(currentPage/blockSize) == Math.ceil(totalPageCount/blockSize) ) {
  868. btn_nav_next.disabled = true;
  869. btn_nav_last.disabled = true;
  870. } else {
  871. oNextButton = grp_nav.children.item("btn_nav_next") ;
  872. oNextButton.attribute("onclick") = "goPage('"+gridId+"','"+serviceName+"','"+serviceTag+"','"+actionName+"?curPageNum="+nextStart+"',"+nextStart+","+pageSize+","+blockSize+",'"+resGridNodeSet+"','"+funcNm+"');" ;
  873. oLastButton = grp_nav.children.item("btn_nav_last") ;
  874. oLastButton.attribute("onclick") = "goPage('"+gridId+"','"+serviceName+"','"+serviceTag+"','"+actionName+"?curPageNum="+lastStart+"',"+lastStart+","+pageSize+","+blockSize+",'"+resGridNodeSet+"','"+funcNm+"');" ;
  875. btn_nav_next.disabled = false;
  876. btn_nav_last.disabled = false;
  877. }
  878. }
  879. /**
  880. * @function : commMsgBox
  881. * @access : public
  882. * @desc : 메시지 알림 창
  883. * @sig : str, title
  884. * @param : arguments - 메시지코드, 인자값
  885. * @param :
  886. * @return :
  887. */
  888. function commMsgBox() {
  889. var argLength = arguments.length;
  890. if(argLength == 0) {
  891. if(instance1.selectSingleNode("/root/resData/Message") != null) {
  892. var msg = model.getValue("/root/resData/Message");
  893. if (msg != "" && msg != null && msg.length > 0) {
  894. model.alert(msg, "알림");
  895. }
  896. }
  897. } else {
  898. var msg = arguments[0];
  899. var vTempArray = msg.split("@");
  900. // vTempArray = arguments[0].split("@");
  901. var vReturnString = "";
  902. if(vTempArray.length != argLength) {
  903. alert('인자값의 수가 다릅니다!');
  904. return;
  905. }
  906. for(var i = 0; i < vTempArray.length-1 ; i++) {
  907. vReturnString += vTempArray[i] + arguments[(i+1)];
  908. }
  909. vReturnString += vTempArray[vTempArray.length-1];
  910. model.alert( vReturnString, "알림");
  911. }
  912. }
  913. /**
  914. * @function : commReqCheck
  915. * @access : public
  916. * @desc : 필수입력 확인
  917. * @sig :
  918. * @param : group ID
  919. * @param :
  920. * @return :
  921. */
  922. function commReqCheck(group1) {
  923. var chk =true;
  924. if( typeof group1 == 'string' ) group1 = document.controls(group1);
  925. var cnt = group1.children.length;
  926. for(i=0 ; i<cnt ; i++) {
  927. var ctr = group1.children.item(i);
  928. if(ctr.elementName=="xforms:input" || ctr.elementName=="xforms:select1") {
  929. if(ctr.attribute("class")=="req" && model.getValue(ctr.attribute("ref"))=="") {
  930. model.setFocus(ctr.attribute("id"));
  931. commMsgBox(bz_common_reqConfirm);
  932. chk =false;
  933. break;
  934. }
  935. }
  936. }
  937. return chk;
  938. }
  939. /**
  940. * @type : function
  941. * @access : public
  942. * @desc : Progress Bar와 관련된 함수이다.
  943. */
  944. cf_progress_bar = new function() {
  945. var N = -1;
  946. var width = 300;
  947. var height = 15;
  948. var left = 0;
  949. var top = 0;
  950. var bg_color = "white";
  951. var bd_width = "1";
  952. var bd_color = "#666699";
  953. var block_color = "#CC99FF";
  954. var speed = 100;
  955. var block_count = 17;
  956. var scroll_count = 5;
  957. var action = "";
  958. left = Math.ceil((window.width - width)/2);
  959. top = Math.ceil((window.height - height)/2);
  960. var oProgressBar, oOuterBlock, sProperty = 'id:grp_progress'+ N +';visibility:hidden;overflow:hidden;font-size:1px;border-style:solid;';
  961. sProperty += "width:" + width +";";
  962. sProperty += "height:" + height +";";
  963. sProperty += "left:" + left +";";
  964. sProperty += "top:" + top +";";
  965. sProperty += "background-color:" + bg_color +";";
  966. sProperty += "border-width:" + bd_width +";";
  967. sProperty += "border-color:" + bd_color +";";
  968. oProgressBar = body.createChild("xforms:group", sProperty);
  969. sProperty = 'id:grp_outer_block'+ N +';visibility:visible;overflow:hidden;font-size:1px;';
  970. sProperty += "background-color:" + "white" +";";
  971. sProperty += "left:-" + (height*2+1) +";";
  972. sProperty += "top:" + (0) +";";
  973. sProperty += "width:" + width +";";
  974. sProperty += "height:" + height +";";
  975. oOuterBlock = oProgressBar.createChild("xforms:group", sProperty);
  976. for(i=0;i<block_count;i++){
  977. sProperty = "id:cap_bar"+(i)+";visibility:visible;font-size:1px;";
  978. sProperty += "background-color:" + block_color +";";
  979. sProperty += "width:" + height +";";
  980. sProperty += "height:" + height +";";
  981. sProperty += "left:" + ((height*i)+i) +";";
  982. sProperty += "top:" + 0 +";";
  983. sProperty += "opacity:" + (100-i*(100/block_count)) +";";
  984. oOuterBlock.createChild("xforms:caption", sProperty);
  985. }
  986. this.bar = oProgressBar;
  987. this.block_count=block_count;
  988. this.N=N;
  989. this.left2=left;
  990. this.top2=top;
  991. this.w=width;
  992. this.h=height;
  993. this.speed=speed;
  994. this.ctr=0;
  995. this.count=scroll_count;
  996. this.action=action;
  997. this.startBar = function(bn){
  998. if(oOuterBlock.currentStyle.left+oOuterBlock.currentStyle.height+1-(cf_progress_bar.block_count*oOuterBlock.currentStyle.height+cf_progress_bar.block_count)>oOuterBlock.currentStyle.width){
  999. oOuterBlock.attribute("left") =-(oOuterBlock.currentStyle.height*2+1)+'px';
  1000. cf_progress_bar.ctr++;
  1001. if(cf_progress_bar.ctr>=cf_progress_bar.scroll_count){
  1002. eval(cf_progress_bar.action);
  1003. cf_progress_bar.ctr=0;
  1004. }
  1005. } else oOuterBlock.attribute("left")=(parseInt(oOuterBlock.currentStyle.left)+oOuterBlock.currentStyle.height+1)+'px';
  1006. }
  1007. this.togglePause = function (){
  1008. if(cf_progress_bar.tid==0){
  1009. cf_progress_bar.tid=window.setInterval('cf_progress_bar.startBar('+cf_progress_bar.N+')',cf_progress_bar.speed);
  1010. } else {
  1011. window.clearInterval(cf_progress_bar.tid);
  1012. cf_progress_bar.tid=0;
  1013. }
  1014. }
  1015. this.showBar=function(){
  1016. cf_progress_bar.moveCenter(true);
  1017. cf_progress_bar.bar.attribute("visibility")="visible";
  1018. }
  1019. this.hideBar=function() {
  1020. cf_progress_bar.bar.attribute("visibility")="hidden";
  1021. cf_progress_bar.moveCenter(false);
  1022. }
  1023. this.start = function() {
  1024. cf_progress_bar.showBar();
  1025. cf_progress_bar.tid=window.setInterval('cf_progress_bar.startBar('+N+')',cf_progress_bar.speed);
  1026. }
  1027. this.finish = function() {
  1028. cf_progress_bar.togglePause();
  1029. cf_progress_bar.hideBar();
  1030. }
  1031. this.moveCenter = function(flag) {
  1032. if(!flag) {
  1033. cf_progress_bar.left2 = cf_progress_bar.bar.attribute("left");
  1034. cf_progress_bar.top2 = cf_progress_bar.bar.attribute("top");
  1035. cf_progress_bar.bar.attribute("left") = -cf_progress_bar.bar.attribute("width");
  1036. cf_progress_bar.bar.attribute("top") = -cf_progress_bar.bar.attribute("height");
  1037. } else {
  1038. cf_progress_bar.bar.attribute("left") = cf_progress_bar.left2;
  1039. cf_progress_bar.bar.attribute("top") = cf_progress_bar.top2;
  1040. }
  1041. }
  1042. }
  1043. /**
  1044. * @type : function
  1045. * @access : public
  1046. * @desc : progress bar를 표시한다.
  1047. * <pre>
  1048. * cf_progress('S')
  1049. * </pre>
  1050. * @param : mode - progress bar 시작('S') / 끝내기('E')
  1051. * @return : boolean - 성공/실패
  1052. */
  1053. function commProgress(mode) {
  1054. try{
  1055. var progressGroup = null;
  1056. if( mode == 'S' ) {
  1057. /* create group : 파일 저장 시에 화면의 컨트롤을 클릭하는 것 방지해 줌. */
  1058. var width = 200, height = 18;
  1059. sPropertyText = 'id:progressGroup; left:50%; top:50%; width:'+width+'px; height:'+height+'px; ';
  1060. progressGroup = body.createChild("xforms:group",sPropertyText);
  1061. if( progressGroup == null ) {
  1062. //model.alert("group 생성 실패");
  1063. return false;
  1064. }
  1065. progressGroup.attribute('background-color') = 'transparent';
  1066. cf_progress_bar.start(); progressGroup.attribute('width') = width; progressGroup.attribute('height') = height;
  1067. } else if( mode == 'E' ) {
  1068. progressGroup = document.controls('progressGroup');
  1069. if( progressGroup == null ) { return false; }
  1070. cf_progress_bar.finish(); progressGroup.attribute('width') = 0; progressGroup.attribute('height') = 0;
  1071. }
  1072. } catch(e) {}
  1073. }
  1074. /***************************************************************************************************************/
  1075. /* 3 . ProtoType 관련 함수 (String)
  1076. /*
  1077. /* 1) String.prototype.ReplaceWord : 문자열중의 특정 문자 또는 단어를 찾아 원하는 문자 또는 단어로 치환
  1078. /* 2) String.prototype.CheckNum : 저장된 값이 Number 형인지 점검
  1079. /* 3) String.prototype.CheckFloat : 저장된 값이 Float 형인지 점검
  1080. /* 4) String.prototype.GetRound : 저장된 값을 지정한 자리에서 올림/반올림/버림 처리 GetRound( pPoint, pMode )
  1081. /* 5) String.prototype.GetTruncate : 소수점 버리고 정수형 String으로 생성 (음수인경우에도 마찬가지 음수표시는 유효)
  1082. /* 6) String.prototype.GetZeroString : 저장된 숫자 값에 원하는 길이만큼 '0'을 붙여 표현 GetZeroString( pLen )
  1083. /* 7) String.prototype.GetByteSize : 파라미터 값의 Byte 크기를 리턴
  1084. /* 8) String.prototype.Trim : 문자열 앞뒤에있는 공백 제거
  1085. /* 9) String.prototype.CheckByteSize : 문자열의 Byte 크기가 제한값을 벗어나는지 체크 (벗어나면 false 리턴)
  1086. /* 10) String.prototype.CheckEmpty : 값이 없는지 체크
  1087. /* 11) String.prototype.ReplaceString : 문자열중의 특정 문자 또는 단어를 찾아 원하는 문자 또는 단어로 치환
  1088. /* 12) String.prototype.TrimLeft : 문자열 앞에 있는 공백 제거
  1089. /* 13) String.prototype.TrimRight : 문자열 뒤에 있는 공백 제거
  1090. /* 14) String.prototype.ToLower : 문자열을 모두 소문자로 변환
  1091. /* 15) String.prototype.ToUpper : 문자열을 모두 대문자로 변환
  1092. /* 16) String.prototype.GetLength : 문자열의 길이를 구한다.
  1093. /* 17) String.prototype.IsNull : 주어진 값이 null인지 확인한다.
  1094. /* 18) String.prototype.AmtToHangleName : 금액을 한글금액으로 변경
  1095. *****************************************************************************************************************/
  1096. String.prototype.ReplaceWord = ReplaceWord;
  1097. String.prototype.CheckNum = CheckNum;
  1098. String.prototype.CheckFloat = CheckFloat;
  1099. String.prototype.GetRound = GetRound;
  1100. String.prototype.GetTruncate = GetTruncate;
  1101. String.prototype.GetZeroString = GetZeroString;
  1102. String.prototype.GetByteSize = GetByteSize;
  1103. String.prototype.Trim = Trim;
  1104. String.prototype.CheckByteSize = CheckByteSize;
  1105. String.prototype.CheckEmpty = CheckEmpty;
  1106. String.prototype.ReplaceString = ReplaceString;
  1107. String.prototype.TrimLeft = TrimLeft;
  1108. String.prototype.TrimRight = TrimRight;
  1109. String.prototype.ToLower = ToLower;
  1110. String.prototype.ToUpper = ToUpper;
  1111. String.prototype.GetLength = GetLength;
  1112. String.prototype.IsNull = IsNull;
  1113. String.prototype.AmtToHangleName = AmtToHangleName;
  1114. /**
  1115. * @group : String 확장
  1116. * @ver : 2004.06.30 (KUHDEV-0001)
  1117. * @by : je2kwan2.
  1118. * @---------------------------------------------------
  1119. * @type : function
  1120. * @access : public
  1121. * @desc : 문자열중의 특정 문자 또는 단어를 찾아 원하는 문자 또는 단어로 치환
  1122. * <pre>
  1123. * 1. 찾을 단어를 구분자로 분리한 문자열을 저장할 배열 변수지정
  1124. * 2. 치환하여 리턴할 내용을 담을 변수 지정
  1125. * 3. 원본 문자열을 찾을 단어를 구분자로 분리
  1126. * 4. 찾을 단어의 수만큼 loop
  1127. * - 찾을 단어 대신 대체 단어를 붙이면서 누적
  1128. * 3. 마지막 찾을 단어의 뒷부분 내용 추가.
  1129. * - 찾을 단어가 없었다면 원본 문자열 전체가 됨
  1130. * </pre>
  1131. * @param : pFindWord - 찾을 단어
  1132. * @param : pReplaceWord - 대체 단어
  1133. * @return : String - 대체하고난 문자열
  1134. * @---------------------------------------------------
  1135. */
  1136. function ReplaceWord( pFindWord, pReplaceWord )
  1137. {
  1138. var vTempArray;
  1139. var vReturnString = "";
  1140. vTempArray = this.split(pFindWord);
  1141. for(var i=0; i<vTempArray.length-1; i++)
  1142. {
  1143. vReturnString += vTempArray[i] + pReplaceWord;
  1144. }
  1145. vReturnString += vTempArray[vTempArray.length-1];
  1146. return vReturnString;
  1147. }
  1148. //numArray.max( sint,mint ) --- (X)
  1149. //numArray.max( sint, mint ) --- (O)
  1150. /**
  1151. * @group : String 확장
  1152. * @ver : 2004.06.30 (KUHDEV-0001)
  1153. * @by : je2kwan2.
  1154. * @---------------------------------------------------
  1155. * @type : function
  1156. * @access : public
  1157. * @desc : 저장된 값이 Number 형인지 점검
  1158. * @param : N/A
  1159. * @return : true/false
  1160. * @---------------------------------------------------
  1161. */
  1162. function CheckNum()
  1163. {
  1164. if( typeof( this ) == "undefined" ) return false;
  1165. if( this.length == 0 ) return false;
  1166. var vNumber = this.toString();
  1167. for( var i=0; i < vNumber.length; i++ )
  1168. {
  1169. var vTemp = vNumber.substring( i, i+1 );
  1170. // 숫자가 아니면 FALSE 리턴
  1171. if( isNaN( vTemp ) ) return false;
  1172. // 공백이면 FALSE 리턴
  1173. if( " " == vTemp ) return false;
  1174. }
  1175. return true;
  1176. }
  1177. /**
  1178. * @group : String 확장
  1179. * @ver : 2004.06.30 (KUHDEV-0001)
  1180. * @by : je2kwan2.
  1181. * @---------------------------------------------------
  1182. * @type : function
  1183. * @access : public
  1184. * @desc : 저장된 값이 Float 형인지 점검
  1185. * @param : N/A
  1186. * @return : true/false
  1187. * @---------------------------------------------------
  1188. */
  1189. function CheckFloat()
  1190. {
  1191. // 파라미터 값이 parseFloat()후에도 같으면 TRUE 리턴
  1192. if( this == parseFloat( this ) ) {
  1193. return true;
  1194. } else {
  1195. return false;
  1196. }
  1197. }
  1198. /**
  1199. * @group : String 확장
  1200. * @ver : 2004.06.30 (KUHDEV-0001)
  1201. * @by : je2kwan2.
  1202. * @---------------------------------------------------
  1203. * @type : function
  1204. * @access : public
  1205. * @desc : 저장된 값을 지정한 자리에서 올림/반올림/버림 처리
  1206. * <pre>
  1207. * 1.
  1208. * </pre>
  1209. * @param : pPoint - 올림/반올림/버림 할 위치(2:10자리, 1:1자리, -1:소수점이하 첫째자리)
  1210. * @param : pMode - 1:올림, 0:반올림, -1:버림
  1211. * @return : Number
  1212. * @---------------------------------------------------
  1213. */
  1214. function GetRound( pPoint, pMode )
  1215. {
  1216. // 파라미터 값을 수치화 하여 변수에 저장
  1217. var vNumber = eval(this);
  1218. // 소수점을 기준으로 숫자들만 취하여 배열 변수에 저장
  1219. var vTempArray = eval(this).toString().ReplaceWord("-", "").split(".");
  1220. // this 가 float 형이 아니면
  1221. if( !this.CheckFloat() )
  1222. {
  1223. //fAlertMessage(4, "파라미터");
  1224. return "";
  1225. }
  1226. // pPoint 가 float 형이 아니면
  1227. if( !pPoint.toString().CheckFloat() )
  1228. {
  1229. //fAlertMessage(4, "파라미터");
  1230. return "";
  1231. }
  1232. // 소수점 앞에서 처리하려면
  1233. if(0 < eval( pPoint ))
  1234. {
  1235. // 소수점 이상 자리수보다 크면
  1236. if( vTempArray[0].length < eval(pPoint) )
  1237. {
  1238. // 메시지 처리후 리턴
  1239. //fAlertMessage(1, "올림/반올림/버림 할 위치");
  1240. return "";
  1241. }
  1242. }
  1243. // 소수점 뒤에서 처리하려면
  1244. else if(0 > eval(pPoint))
  1245. {
  1246. // 소수점 이하값이 존재하지 않거나 자리수보다 크면
  1247. if(vTempArray.length != 2 || vTempArray[1].length < eval(pPoint)*(-1))
  1248. {
  1249. // 메시지 처리후 리턴
  1250. // fAlertMessage(1, "올림/반올림/버림 할 위치");
  1251. // return "";
  1252. return this;
  1253. }
  1254. }
  1255. // '올림'이고
  1256. if(1 == eval(pMode))
  1257. {
  1258. // 소수점 앞에서 처리하려면
  1259. if(0 < eval(pPoint))
  1260. {
  1261. // 해당 자리(pPoint)에서 올림 처리
  1262. vNumber = Math.ceil(vNumber / Math.pow(10, pPoint)) * Math.pow(10, pPoint);
  1263. return vNumber;
  1264. }
  1265. // 소수점 뒤에서 처리하려면
  1266. else if(0 > eval(pPoint))
  1267. {
  1268. // 해당 자리(pPoint)에서 올림 처리
  1269. vNumber = Math.ceil(vNumber * Math.pow(10, pPoint*(-1)-1)) / Math.pow(10, pPoint*(-1)-1);
  1270. return vNumber;
  1271. }
  1272. else
  1273. {
  1274. //fAlertMessage(4, "올림자리");
  1275. return "";
  1276. }
  1277. }
  1278. // '반올림'이고
  1279. else if(0 == eval(pMode))
  1280. {
  1281. // 소수점 앞에서 처리하려면
  1282. if(0 < eval(pPoint))
  1283. {
  1284. // 해당 자리(pPoint)에서 반올림 처리
  1285. vNumber = Math.round(vNumber / Math.pow(10, pPoint)) * Math.pow(10, pPoint);
  1286. return vNumber;
  1287. }
  1288. // 소수점 뒤에서 처리하려면
  1289. else if(0 > eval(pPoint))
  1290. {
  1291. // 해당 자리(pPoint)에서 반올림 처리
  1292. vNumber = Math.round(vNumber * Math.pow(10, pPoint*(-1)-1)) / Math.pow(10, pPoint*(-1)-1);
  1293. return vNumber;
  1294. }
  1295. else
  1296. {
  1297. //fAlertMessage(4, "올림자리");
  1298. return "";
  1299. }
  1300. }
  1301. // '버림'이고
  1302. else if(-1 == eval(pMode))
  1303. {
  1304. // 소수점 앞에서 처리하려면
  1305. if(0 < eval(pPoint))
  1306. {
  1307. // 해당 자리(pPoint)에서 내림 처리
  1308. vNumber = Math.floor(vNumber / Math.pow(10, pPoint)) * Math.pow(10, pPoint);
  1309. return vNumber;
  1310. }
  1311. // 소수점 뒤에서 처리하려면
  1312. else if(0 > eval(pPoint))
  1313. {
  1314. // 해당 자리(pPoint)에서 내림 처리
  1315. vNumber = Math.floor(vNumber * Math.pow(10, pPoint*(-1)-1)) / Math.pow(10, pPoint*(-1)-1);
  1316. return vNumber;
  1317. }
  1318. else
  1319. {
  1320. //fAlertMessage(4, "올림자리");
  1321. return "";
  1322. }
  1323. }
  1324. // 모두 아니면
  1325. else
  1326. {
  1327. // 메시지 처리후 리턴
  1328. //fAlertMessage(1, "모드('1'/'0'/'-1')");
  1329. return "";
  1330. }
  1331. }
  1332. /**
  1333. * @group : String 확장
  1334. * @ver : 2004.06.30 (KUHDEV-0001)
  1335. * @by : je2kwan2.
  1336. * @---------------------------------------------------
  1337. * @type : function
  1338. * @access : public
  1339. * @desc : 소수점 버리고 정수형 String으로 생성 (음수인경우에도 마찬가지 음수표시는 유효)
  1340. * @param : N/A
  1341. * @return : Number
  1342. * @---------------------------------------------------
  1343. */
  1344. function GetTruncate()
  1345. {
  1346. var TempArray = new Array();
  1347. TempArray = this.split(".");
  1348. return TempArray[0];
  1349. }
  1350. /**
  1351. * @group : String 확장
  1352. * @ver : 2004.06.30 (KUHDEV-0001)
  1353. * @by : je2kwan2.
  1354. * @---------------------------------------------------
  1355. * @type : function
  1356. * @access : public
  1357. * @desc : 저장된 숫자 값에 원하는 길이만큼 '0'을 붙여 표현
  1358. * @param : pLen - 돌려받을 최종문자의 길이
  1359. * @return : 지정길이보다 모자른경우 "0"값이 추가된 문자열
  1360. * @return : 지정길이보다 큰경우 원래 문자열을 반환
  1361. * @---------------------------------------------------
  1362. */
  1363. function GetZeroString( pLen )
  1364. {
  1365. var sTemp = eval(this);
  1366. if (this.length > pLen) return this;
  1367. for( var iCnt = this.length; iCnt < pLen; iCnt++){
  1368. sTemp = "0" + sTemp;
  1369. }
  1370. return sTemp;
  1371. }
  1372. /**
  1373. * @group : String 확장
  1374. * @ver : 2004.07.29 (KUHDEV-0002)
  1375. * @by : LeeHJ.
  1376. * @---------------------------------------------------
  1377. * @type : function
  1378. * @access : public
  1379. * @desc : 파라미터 값의 Byte 크기를 리턴
  1380. * @param : N/A
  1381. * @return : 파라미터 값의 Byte 크기
  1382. * @---------------------------------------------------
  1383. */
  1384. function GetByteSize()
  1385. {
  1386. // Byte 수를 저장할 변수
  1387. var vByteSize = 0;
  1388. // Value 값의 길이만큼 loop
  1389. for(var i=0; i<this.length; i++)
  1390. {
  1391. //한글이 들어오면 255보다 크다
  1392. if(this.charCodeAt(i) > 255) vByteSize += 2;
  1393. else vByteSize += 1;
  1394. }
  1395. return vByteSize;
  1396. }
  1397. /**
  1398. * @group : String 확장
  1399. * @ver : 2004.07.29 (KUHDEV-0002)
  1400. * @by : LeeHJ.
  1401. * @---------------------------------------------------
  1402. * @type : function
  1403. * @access : public
  1404. * @desc : 문자열 앞뒤에있는 공백 제거
  1405. * @param : N/A
  1406. * @return : 공백을 제거한 결과 문자열
  1407. * @---------------------------------------------------
  1408. */
  1409. function Trim()
  1410. {
  1411. var vStartPoint = 0; // subString 하기 위한 시작 포인트
  1412. var vEndPoint = this.length; // subString 하기 위한 끝 포인트
  1413. //문자열앞에 공백문자가 들어 있는 Index 추출
  1414. while( (vStartPoint < vEndPoint) && (this.charCodeAt(vStartPoint) == 32) )
  1415. {
  1416. vStartPoint++;
  1417. }
  1418. //문자열뒤에 공백문자가 들어 있는 Index 추출
  1419. while( (vStartPoint < vEndPoint) && (this.charCodeAt(vEndPoint-1) == 32) )
  1420. {
  1421. vEndPoint--;
  1422. }
  1423. // 공백을 제거했으면 subString하여 결과문자열을 리턴하고 제거한 내용이 없으면 그대로 리턴
  1424. return ( (vStartPoint > 0) || (vEndPoint < this.length) ) ? this.substring(vStartPoint, vEndPoint) : this;
  1425. }
  1426. /**
  1427. * @group : String 확장
  1428. * @ver : 2004.07.29 (KUHDEV-0002)
  1429. * @by : LeeHJ.
  1430. * @---------------------------------------------------
  1431. * @type : function
  1432. * @access : public
  1433. * @desc : 문자열의 Byte 크기가 제한값을 벗어나는지 체크 (벗어나면 false 리턴)
  1434. * @param : pSize - 제한크기
  1435. * @return : TRUE or FALSE
  1436. * @---------------------------------------------------
  1437. */
  1438. function CheckByteSize(pSize)
  1439. {
  1440. if(this.GetByteSize() <= eval(pSize)) return true;
  1441. return false;
  1442. }
  1443. /**
  1444. * @group : String 확장
  1445. * @ver : 2004.07.29 (KUHDEV-0002)
  1446. * @by : LeeHJ.
  1447. * @---------------------------------------------------
  1448. * @type : function
  1449. * @access : public
  1450. * @desc : 값이 없는지 체크
  1451. * @param : N/A
  1452. * @return : TRUE or FALSE
  1453. * @---------------------------------------------------
  1454. */
  1455. function CheckEmpty()
  1456. {
  1457. if(this.Trim() == "")
  1458. {
  1459. return false;
  1460. }
  1461. return true; // 공백이 아니라면
  1462. }
  1463. /**
  1464. * @group : String 확장
  1465. * @ver : 2004.07.29 (KUHDEV-0002)
  1466. * @by : LeeHJ.
  1467. * @---------------------------------------------------
  1468. * @type : function
  1469. * @access : public
  1470. * @desc : 문자열중의 특정 문자 또는 단어를 찾아 원하는 문자 또는 단어로 치환
  1471. * @param : pOldStr - 찾을 단어 pNewStr - 대체 단어
  1472. * @return : 대체하고난 문자열
  1473. * @---------------------------------------------------
  1474. */
  1475. function ReplaceString(pOldStr, pNewStr)
  1476. {
  1477. var vTempArray;
  1478. var vReturnString = "";
  1479. vTempArray = this.split(pOldStr);
  1480. for(var i=0; i<vTempArray.length-1; i++)
  1481. {
  1482. vReturnString += vTempArray[i] + pNewStr;
  1483. }
  1484. vReturnString += vTempArray[vTempArray.length-1];
  1485. return vReturnString;
  1486. }
  1487. /**
  1488. * @group : String 확장
  1489. * @ver : 2004.07.29 (KUHDEV-0002)
  1490. * @by : LeeHJ.
  1491. * @---------------------------------------------------
  1492. * @type : function
  1493. * @access : public
  1494. * @desc : 문자열 앞에 있는 공백 제거
  1495. * @param : N/A
  1496. * @return : 공백을 제거한 결과 문자열
  1497. * @---------------------------------------------------
  1498. */
  1499. function TrimLeft()
  1500. {
  1501. var i, j = 0;
  1502. for (i = 0; i < this.length; i++) {
  1503. if (this.charAt(i) == ' ') j = j + 1;
  1504. else break;
  1505. }
  1506. return this.substr(j, this.length - j + 1);
  1507. }
  1508. /**
  1509. * @group : String 확장
  1510. * @ver : 2004.07.29 (KUHDEV-0002)
  1511. * @by : LeeHJ.
  1512. * @---------------------------------------------------
  1513. * @type : function
  1514. * @access : public
  1515. * @desc : 문자열 뒤에 있는 공백 제거
  1516. * @param : N/A
  1517. * @return : 공백을 제거한 결과 문자열
  1518. * @---------------------------------------------------
  1519. */
  1520. function TrimRight()
  1521. {
  1522. var i, j = 0;
  1523. for (i = this.length - 1; i >= 0; i--) {
  1524. if (this.charAt(i) == ' ') j = j + 1;
  1525. else break;
  1526. }
  1527. return this.substr(0, this.length - j);
  1528. }
  1529. /**
  1530. * @group : String 확장
  1531. * @ver : 2004.07.29 (KUHDEV-0002)
  1532. * @by : LeeHJ.
  1533. * @---------------------------------------------------
  1534. * @type : function
  1535. * @access : public
  1536. * @desc : 문자열을 모두 소문자로 변환
  1537. * @param : N/A
  1538. * @return : 문자열
  1539. * @---------------------------------------------------
  1540. */
  1541. function ToLower()
  1542. {
  1543. return this.toLowerCase();
  1544. }
  1545. /**
  1546. * @group : String 확장
  1547. * @ver : 2004.07.29 (KUHDEV-0002)
  1548. * @by : LeeHJ.
  1549. * @---------------------------------------------------
  1550. * @type : function
  1551. * @access : public
  1552. * @desc : 문자열을 모두 대문자로 변환
  1553. * @param : N/A
  1554. * @return : 문자열
  1555. * @---------------------------------------------------
  1556. */
  1557. function ToUpper()
  1558. {
  1559. return this.toUpperCase();
  1560. }
  1561. /**
  1562. * @group : String 확장
  1563. * @ver : 2004.07.29 (KUHDEV-0002)
  1564. * @by : LeeHJ.
  1565. * @---------------------------------------------------
  1566. * @type : function
  1567. * @access : public
  1568. * @desc : 문자열의 길이를 구한다.
  1569. * @param : N/A
  1570. * @return : 문자열의 길이
  1571. * @---------------------------------------------------
  1572. */
  1573. function GetLength()
  1574. {
  1575. return this.length;
  1576. }
  1577. /**
  1578. * @type : function
  1579. * @access : public
  1580. * @desc : 주어진 값이 null인지 확인한다.
  1581. * <pre>
  1582. * IsNull();
  1583. * </pre>
  1584. * @sig : value
  1585. * @param : value - null 체크할 값
  1586. * @return : boolean - true/false
  1587. */
  1588. function IsNull() {
  1589. if(this.indexOf("_") != -1) {
  1590. return false;
  1591. }
  1592. var oMsg=null,bNull=true;
  1593. if(this.indexOf("_") == -1)
  1594. return false;
  1595. try {
  1596. oMsg = eval("window."+this);
  1597. bNull = (typeof oMsg == 'undefined')?true:false;
  1598. } catch(e) {
  1599. if(e =='[object Error]') {
  1600. try {
  1601. oMsg = eval(this);
  1602. if(oMsg != null) bNull = false;
  1603. } catch (e) {
  1604. bNull = true;
  1605. }
  1606. } else
  1607. bNull = false;
  1608. }
  1609. return bNull;
  1610. }
  1611. /*
  1612. * @type : function
  1613. * @access : public
  1614. * @desc : 금액을 한글금액으로 변경
  1615. * <pre>
  1616. * var amtNm = commamtToHangleName(amt);
  1617. * </pre>
  1618. * @sig : amt
  1619. * @param : amt - 한글로 바꿀 금액
  1620. * @return : string - 한글금액
  1621. */
  1622. function AmtToHangleName() {
  1623. var amt = this;
  1624. var unitNm = ["천","백","십","조","천", "백","십","억","천","백","십","만","천","백","십","원"] ;
  1625. var numNm = ["","일","이","삼","사","오","육","칠","팔","구"];
  1626. var amtNm = "";
  1627. for ( var i = 0 ; i < amt.length ; i++ ){
  1628. var num = numNm[amt.charAt(i)] ;
  1629. var idx = unitNm.length - amt.length + i ;
  1630. if ( num != "" || (idx+1)/4 == Math.ceil((idx+1)/4 )) {
  1631. amtNm += num + unitNm[idx] ;
  1632. }
  1633. }
  1634. return amtNm; //+ "정";
  1635. }
  1636. /***************************************************************************************************************/
  1637. /* 4 . Validation 관련 함수 시작
  1638. /*
  1639. /* 1) commIsValidMonth : 유효한(존재하는) 월(月)인지 체크.
  1640. /* 2) commIsValidHour : 유효한(존재하는) 시(時)인지 체크.
  1641. /* 3) commIsValidMin : 유효한(존재하는) 분(分)인지 체크.
  1642. /* 4) commIsValidSecond : 유효한(존재하는) 초(秒)인지 체크.
  1643. /* 5) commGhkCal : 날짜를 입력받는 input 컨트롤의 유효성 검사.
  1644. /* 6) commGhkMonth : 월을 입력받는 input 컨트롤의 유효성 검사
  1645. /* 7) commGhkTerm : 날짜를 입력받는 from~to input 컨트롤의 유효성 검사
  1646. /* 8) commGhkDateHM : 날짜형(일자와 시간, 분) input 컨트롤의 유효성 검사
  1647. /* 9) commGhkDateHMS : 날짜형(일자와 시간, 분, 초) input 컨트롤의 유효성 검사
  1648. /* 10) commIsNull : 주어진 값이 null인지 확인한다.
  1649. /* 11) commCheckRrnoVal : 주민번호 유효성 체크
  1650. /* 12) commCheckBrnoVal : 사업자 등록번호 유효성 체크
  1651. /* 13) commCheckCrnoVal : 법인번호 유효성 체크
  1652. /* 14) commValidateTelNo : 전화번호의 validation을 확인한다.
  1653. /* 15) commValidateEmail : 이메일주소의 validation을 확인한다.
  1654. /* 16)
  1655. /* 17)
  1656. /************************************************************************************/
  1657. /**
  1658. * @type : function
  1659. * @access : public
  1660. * @desc : 유효한(존재하는) 월(月)인지 체크.
  1661. * <pre>
  1662. * if (!commIsValidMonth("12"))
  1663. * </pre>
  1664. * @sig : mm
  1665. * @param : mm - 체크할 월
  1666. * @return : boolean - 유효여부
  1667. */
  1668. function commIsValidMonth(mm) {
  1669. var m = parseInt(mm,10);
  1670. return (m >= 1 && m <= 12);
  1671. }
  1672. /**
  1673. * @type : function
  1674. * @access : public
  1675. * @desc : 유효한(존재하는) 시(時)인지 체크.
  1676. * <pre>
  1677. * if (!commIsValidHour("12"))
  1678. * </pre>
  1679. * @sig : hh
  1680. * @param : hh - 체크할 시
  1681. * @return : boolean 유효여부
  1682. */
  1683. function commIsValidHour(hh) {
  1684. var h = parseInt(hh,10);
  1685. return (h >= 0 && h <= 23);
  1686. }
  1687. /**
  1688. * @type : function
  1689. * @access : public
  1690. * @desc : 유효한(존재하는) 분(分)인지 체크.
  1691. * <pre>
  1692. * if (!commIsValidMin("12"))
  1693. * </pre>
  1694. * @sig : mi
  1695. * @param : mi - 체크할 분
  1696. * @return : boolean - 유효여부
  1697. */
  1698. function commIsValidMin(mi) {
  1699. var m = parseInt(mi,10);
  1700. return (m >= 0 && m <= 59);
  1701. }
  1702. /**
  1703. * @type : function
  1704. * @access : public
  1705. * @desc : 유효한(존재하는) 초(秒)인지 체크.
  1706. * <pre>
  1707. * if (!commIsValidSecond("12"))
  1708. * </pre>
  1709. * @sig : ss
  1710. * @param : ss - 체크할 초
  1711. * @return : boolean - 유효여부
  1712. */
  1713. function commIsValidSecond(ss) {
  1714. var m = parseInt(ss,10);
  1715. return (m >= 0 && m <= 59);
  1716. }
  1717. /**
  1718. * @type : function
  1719. * @access : public
  1720. * @desc : 날짜를 입력받는 input 컨트롤의 유효성 검사.
  1721. * <pre>
  1722. * if (!commGhkCal("/root/input_date"))
  1723. * </pre>
  1724. * @sig : chkRef
  1725. * @param : chkRef - 체크할 control의 ref
  1726. * @return : boolean - 유효여부
  1727. */
  1728. function commGhkCal( chkRef ) {
  1729. var s = model.getValue(chkRef);
  1730. if ( s.length < 8 ) return false;
  1731. var iYear = s.substr(0,4);
  1732. var iMonth = s.substr(4,2);
  1733. var iDay = s.substr(6,2);
  1734. var monthArr = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
  1735. if( iMonth == 2 ) {
  1736. if ( ( (iYear % 4 == 0) && (iYear % 100 != 0) ) || (iYear % 400 == 0) ) {
  1737. monthArr[1] = "29";
  1738. }
  1739. }
  1740. if( iYear < 9999 && iYear > 0 && iMonth <= 12 && iMonth > 0 && iDay <= monthArr[iMonth-1] && iDay > 0 ) {
  1741. return true;
  1742. }
  1743. return false;
  1744. }
  1745. /**
  1746. * @type : function
  1747. * @access : public
  1748. * @desc : 월를 입력받는 input 컨트롤의 유효성 검사
  1749. * <pre>
  1750. * if (!commchkMonth("/root/input_month"))
  1751. * </pre>
  1752. * @sig : chkRef
  1753. * @param : chkRef - 체크할 input의 Ref
  1754. * @return : boolean - 유효여부
  1755. */
  1756. function commGhkMonth( chkRef ) {
  1757. var s = model.getValue(chkRef);
  1758. if ( s.length < 6 ) return false;
  1759. var iYear = s.substr(0,4);
  1760. var iMonth = s.substr(4,2);
  1761. if( iYear < 9999 && iYear > 0 && iMonth <= 12 && iMonth > 0 ) {
  1762. return true;
  1763. }
  1764. return false;
  1765. }
  1766. /**
  1767. * @type : function
  1768. * @access : public
  1769. * @desc : 날짜를 입력받는 from~to input 컨트롤의 유효성 검사
  1770. * <pre>
  1771. * if (!commchkTerm( "/root/inputFrom", "/root/inputTo" ))
  1772. * </pre>
  1773. * @sig : chkRefFrom, chkRefTo
  1774. * @param : chkRefFrom - 체크할 inputFrom의 Ref
  1775. * @param : chkRefTo - 체크할 inputTo의 Ref
  1776. * @return : boolean - 유효여부
  1777. */
  1778. function commGhkTerm( chkRefFrom, chkRefTo ) {
  1779. var rtnVal = false;
  1780. if ( commGhkCal(chkRefFrom) && commGhkCal(chkRefTo) ) {
  1781. if ( model.getValue(chkRefFrom) <= model.getValue(chkRefTo) ) {
  1782. rtnVal = true;
  1783. }
  1784. }
  1785. return rtnVal;
  1786. }
  1787. /**
  1788. * @type : function
  1789. * @access : public
  1790. * @desc : 날짜형(일자와 시간, 분) input 컨트롤의 유효성 검사
  1791. * <pre>
  1792. * if (!commchkDateHM("/root/inputDate"))
  1793. * </pre>
  1794. * @sig : chkRef
  1795. * @param : chkRef - 체크할 inputFrom의 Ref
  1796. * @return : boolean - 유효여부
  1797. */
  1798. function commGhkDateHM( chkRef ) {
  1799. var rtnVal = false;
  1800. var s = model.getValue(chkRef);
  1801. if ( s.length < 12 ) return false;
  1802. var iHour = s.substr(8,2);
  1803. var iMin = s.substr(10,2);
  1804. if ( commGhkCal( chkRef ) && commIsValidHour(iHour) && commIsValidMin(iMin) ) {
  1805. rtnVal = true ;
  1806. }
  1807. return rtnVal;
  1808. }
  1809. /**
  1810. * @type : function
  1811. * @access : public
  1812. * @desc : 날짜형(일자와 시간, 분, 초) input 컨트롤의 유효성 검사
  1813. * <pre>
  1814. * if (!commchkDateHMS("/root/inputDate"))
  1815. * </pre>
  1816. * @sig : chkRef
  1817. * @param : chkRef - 체크할 inputFrom의 Ref
  1818. * @return : boolean - 유효여부
  1819. */
  1820. function commGhkDateHMS( chkRef ) {
  1821. var rtnVal = false;
  1822. var s = model.getValue(chkRef);
  1823. if ( s.length < 14 ) return false;
  1824. var iHour = s.substr(8,2);
  1825. var iMin = s.substr(10,2);
  1826. var iSec = s.substr(12,2);
  1827. if ( commGhkCal( chkRef ) && commIsValidHour(iHour) && commIsValidMin(iMin) && commIsValidSecond(iSec) ) {
  1828. rtnVal = true ;
  1829. }
  1830. return rtnVal;
  1831. }
  1832. /**
  1833. * @type : function
  1834. * @access : public
  1835. * @desc : 주민번호 유효성 체크
  1836. * <pre>
  1837. * commcheckRrnoVal("6601011234567");
  1838. * </pre>
  1839. * @sig : val
  1840. * @param : val - 체크할 주민등록번호값
  1841. * @return : boolean - 유효여부
  1842. */
  1843. function commCheckRrnoVal(val) {
  1844. if ( val.length < 13 ) {
  1845. alert("주민등록번호의 자릿수가 잘못 입력되었습니다.");
  1846. return false;
  1847. }
  1848. var varCk1 = val.substring(0,6);
  1849. var varCk2 = val.substring(6);
  1850. var ckValue = new Array(13);
  1851. var ckLastid,ckMod,ckMinus,ckLast;
  1852. ckLastid = parseFloat(varCk2.substring(6,7));
  1853. ckValue[0] = parseFloat(varCk1.substring(0,1)) * 2;
  1854. ckValue[1] = parseFloat(varCk1.substring(1,2)) * 3;
  1855. ckValue[2] = parseFloat(varCk1.substring(2,3)) * 4;
  1856. ckValue[3] = parseFloat(varCk1.substring(3,4)) * 5;
  1857. ckValue[4] = parseFloat(varCk1.substring(4,5)) * 6;
  1858. ckValue[5] = parseFloat(varCk1.substring(5,6)) * 7;
  1859. ckValue[6] = parseFloat(varCk2.substring(0,1)) * 8;
  1860. ckValue[7] = parseFloat(varCk2.substring(1,2)) * 9;
  1861. ckValue[8] = parseFloat(varCk2.substring(2,3)) * 2;
  1862. ckValue[9] = parseFloat(varCk2.substring(3,4)) * 3;
  1863. ckValue[10] = parseFloat(varCk2.substring(4,5)) * 4;
  1864. ckValue[11] = parseFloat(varCk2.substring(5,6)) * 5;
  1865. ckValue[12] = 0;
  1866. for (var i = 0; i<12;i++) {
  1867. ckValue[12] = ckValue[12] + ckValue[i];
  1868. }
  1869. ckMod = ckValue[12] %11;
  1870. ckMinus = 11 - ckMod;
  1871. ckLast = ckMinus % 10;
  1872. if (ckLast != ckLastid) {
  1873. alert ("잘못된 주민등록번호입니다. 다시 확인해 주십시오");
  1874. return false;
  1875. } else {
  1876. return true;
  1877. }
  1878. }
  1879. /**
  1880. * @type : function
  1881. * @access : public
  1882. * @desc : 사업자 등록번호 유효성 체크
  1883. * <pre>
  1884. * commcheckBrnoVal("1231212345");
  1885. * </pre>
  1886. * @sig : val
  1887. * @param : val - 체크할 사업자 등록번호
  1888. * @return : boolean - 유효여부
  1889. */
  1890. function commCheckBrnoVal(val) {
  1891. if ( val.length < 10 ) {
  1892. alert("사업자등록번호의 자릿수가 잘못 입력되었습니다.");
  1893. return false;
  1894. }
  1895. var varCk1 = val.substring(0,3);
  1896. var varCk2 = val.substring(3,5);
  1897. var varCk3 = val.substring(5);
  1898. var ckValue = new Array(10);
  1899. ckValue[0] = ( parseFloat(varCk1.substring(0 ,1)) * 1 ) % 10;
  1900. ckValue[1] = ( parseFloat(varCk1.substring(1 ,2)) * 3 ) % 10;
  1901. ckValue[2] = ( parseFloat(varCk1.substring(2 ,3)) * 7 ) % 10;
  1902. ckValue[3] = ( parseFloat(varCk2.substring(0 ,1)) * 1 ) % 10;
  1903. ckValue[4] = ( parseFloat(varCk2.substring(1 ,2)) * 3 ) % 10;
  1904. ckValue[5] = ( parseFloat(varCk3.substring(0 ,1)) * 7 ) % 10;
  1905. ckValue[6] = ( parseFloat(varCk3.substring(1 ,2)) * 1 ) % 10;
  1906. ckValue[7] = ( parseFloat(varCk3.substring(2 ,3)) * 3 ) % 10;
  1907. ckTemp = parseFloat(varCk3.substring(3 ,4)) * 5 + "0";
  1908. ckValue[8] = parseFloat(ckTemp.substring(0,1)) + parseFloat(ckTemp.substring(1,2));
  1909. ckValue[9] = parseFloat(varCk3.substring(4,5));
  1910. ckLastid = ( 10 - ( ( ckValue[0]+ckValue[1]+ckValue[2]+ckValue[3]+ckValue[4]+ckValue[5]+ckValue[6]+ckValue[7]+ckValue[8] ) % 10 ) ) % 10;
  1911. if (ckValue[9] != ckLastid) {
  1912. alert ("잘못된 사업자등록번호입니다. 다시 확인해 주십시오");
  1913. return false;
  1914. } else {
  1915. return true;
  1916. }
  1917. }
  1918. /**
  1919. * @type : function
  1920. * @access : public
  1921. * @desc : 법인번호 유효성 체크
  1922. * <pre>
  1923. * commCheckCrnoVal("1231212345");
  1924. * </pre>
  1925. * @sig : varCk
  1926. * @param : varCk - 체크할 법인번호
  1927. * @return : boolean - 유효여부
  1928. */
  1929. function commCheckCrnoVal(varCk) {
  1930. if ( varCk.length < 13 ) {
  1931. alert("법인번호의 자릿수가 잘못 입력되었습니다.");
  1932. return false;
  1933. }
  1934. var checkNum = new Array("1","2","1","2","1","2","1","2","1","2","1","2");
  1935. //등기관서별 분류번호, 법인종류별 분류번호 및 일련번호를 차례로 연결한 12자리
  1936. //의 숫자를 만든다.
  1937. var newNum = new Array();
  1938. for(var i = 0; i < varCk.length -1; i++)
  1939. newNum[i] = varCk.charAt(i);
  1940. //각 숫자에 차례로 1과 2를 곱한 다.값을 모두 더하여 합을 구한다.
  1941. var multiNum = new Array();
  1942. for(var k = 0; k < newNum.length; k++)
  1943. multiNum[k] = checkNum[k] * newNum[k];
  1944. //alert("각 숫자에 차례로 1과 2를 곱한 다: "+ multiNum[11]);
  1945. //곱한 값을 모두 더하여 합을 구한다.
  1946. var addNum = 0;
  1947. for(var y = 0; y < multiNum.length; y++)
  1948. addNum = addNum + Number(multiNum[y]);
  1949. //alert("곱한 값을 모두 더하여 합을 구한다: "+ addNum);
  1950. //합을 10으로 나누어 몫과 나머지를 구한다.
  1951. var remainder;
  1952. var quota;
  1953. remainder = Number(addNum) % 10;
  1954. quota = Number(addNum) / 10;
  1955. //10에서 나머지를 뺀 값을 오류검색번호로 한다. 다만, 10에서 나머지를 뺀 값이
  1956. //10인 때에는 0을 오류검색번호로 한다.
  1957. var failCheckNum;
  1958. if( (10 - Number(remainder)) == 10 )
  1959. {
  1960. failCheckNum = 0;
  1961. }
  1962. else
  1963. {
  1964. failCheckNum = 10 - Number(remainder);
  1965. }
  1966. //alert("오류검색번호: "+ failCheckNum);
  1967. if(failCheckNum != varCk.charAt(12)) {
  1968. alert ("잘못된 법인번호입니다. 다시 확인해 주십시오");
  1969. return false;
  1970. }
  1971. return true;
  1972. }
  1973. /**
  1974. * @type : function
  1975. * @access : public
  1976. * @desc : 전화번호의 validation을 확인한다.
  1977. * <pre>
  1978. * commvalidateTelNo("12-232-2323");
  1979. * </pre>
  1980. * @sig : tel
  1981. * @param : tel - 전화번호
  1982. * @return : boolean - 유효?
  1983. */
  1984. function commValidateTelNo(tel) {
  1985. var re = new RegExp("^([0-9]{2,4})(-[0-9]{3,4})(-[0-9]{3,4})","g");
  1986. var resultFind = re.exec(tel);
  1987. return resultFind==null?false:true;
  1988. }
  1989. /**
  1990. * @type : function
  1991. * @access : public
  1992. * @desc : 이메일주소의 validation을 확인한다.
  1993. * <pre>
  1994. * commvalidateEmail("doog@moe.com");
  1995. * </pre>
  1996. * @sig : tel
  1997. * @param : tel - 전화번호
  1998. * @return : boolean - 유효?
  1999. */
  2000. function commValidateEmail(email) {
  2001. var re = new RegExp("([\.a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(([a-zA-Z0-9_-])*\.([a-zA-Z0-9_-])+)+");
  2002. var resultFind = re.exec(email);
  2003. return resultFind==null?false:true;
  2004. }
  2005. /*******************************************************************************************/
  2006. /* 5. 날짜관련 및 기타 함수
  2007. /*
  2008. /* 1) commCurDate : 현재날짜가져오기(( y-년, m-월, d-일 ym -년월 등)포맷지정가능
  2009. /* 2) commLastDay : 해당년월의 마지막 날짜를 구해온다.예)199802->28일 , 200002->29일
  2010. /* 3) commGetDay : yyyyMMdd 형식의 일자를 받아서 요일을 리턴해줌
  2011. /* 4) commCurDTime : 현재날짜 + 시간 가져오기
  2012. /* 5) commFirstDay : 현재달의 첫번째 일을 가져오는 매소드
  2013. /* 6) commLateDate : 현재날자로 부터 정해진 지난날 가져오는 매소드
  2014. /* 7)
  2015. /* 8)
  2016. /*******************************************************************************************/
  2017. /**
  2018. * @type : function
  2019. * @access : public
  2020. * @desc : getDate날짜 가져오기( y-년, m-월, d-일 ym -년월 등)
  2021. * <pre>
  2022. * if ( commgetStringLength(str) > lgth )
  2023. * </pre>
  2024. * @sig : str
  2025. * @param : str - 문자열
  2026. * @return : int - 문자열의 byte수
  2027. */
  2028. function commCurDate(optSetting){
  2029. var dte, c_dte="",month; // 화면의 Calendar 에 월초와 현재 날자를 Setting 한다
  2030. var c_year,c_month,c_day
  2031. dte = new Date();
  2032. month = (dte.getMonth() + 1)+"" ;
  2033. c_year = dte.getYear();
  2034. if(month.length==1)
  2035. {
  2036. c_month = "0"+(dte.getMonth() + 1 );
  2037. }
  2038. else
  2039. {
  2040. c_month = (dte.getMonth() + 1 );
  2041. }
  2042. var d_ay = dte.getDate()+"";
  2043. if(d_ay.length == 1)
  2044. {
  2045. c_day= "0"+(dte.getDate());
  2046. }
  2047. else
  2048. {
  2049. c_day = (dte.getDate());
  2050. }
  2051. //년월일 구하기
  2052. if(optSetting == "ymd" || optSetting == "" || optSetting == null)
  2053. {
  2054. c_dte = c_year + "" +c_month +""+ c_day;
  2055. }//<end> if(optSetting == "ymd")
  2056. else if(optSetting == "ym")
  2057. {
  2058. c_dte = c_year +""+ c_month;
  2059. }//<end> else if(optSetting == "ym")
  2060. else if(optSetting == "y")
  2061. {
  2062. c_dte = c_year;
  2063. }
  2064. else if(optSetting == "m")
  2065. {
  2066. c_dte = c_month;
  2067. }
  2068. else if(optSetting == "d")
  2069. {
  2070. c_dte = c_day;
  2071. }
  2072. else
  2073. {
  2074. c_dte = false;
  2075. }
  2076. return c_dte;
  2077. }
  2078. //해당년월의 마지막 날짜를 구해온다.예)199802->28일 , 200002->29일
  2079. function commLastDay(date){
  2080. var ny = date.substring(0,4);
  2081. var nm = date.substring(4,6);
  2082. nm = eval(nm);
  2083. var arr_d = new Array('31','28','31','30','31','30','31','31','30','31','30','31');
  2084. if(((ny % 4 == 0)&&(ny % 100 !=0)) || (ny % 400 == 0)){
  2085. arr_d[1] = 29;
  2086. }
  2087. return arr_d[nm-1];
  2088. }
  2089. /**
  2090. * @type : function
  2091. * @access : public
  2092. * @desc : yyyyMMdd 형식의 일자를 받아서 요일을 리턴해줌
  2093. * <pre>
  2094. * var day = commgetDay("20061231");
  2095. * </pre>
  2096. * @sig : yyyyMMdd
  2097. * @param : yyyyMMdd - 요일로 변환할 일자
  2098. * @return : day - 요일
  2099. */
  2100. function commGetDay(yyyyMMdd)
  2101. {
  2102. var week = new Array("일", "월", "화", "수", "목", "금", "토");
  2103. if ( yyyyMMdd.length != 8 ) return;
  2104. var year = yyyyMMdd.substring(0,4);
  2105. var month = yyyyMMdd.substring(4,6);
  2106. var date = yyyyMMdd.substring(6);
  2107. var day = new Date(parseInt(year),parseInt(month)-1,parseInt(date));
  2108. return week[day.getDay()];
  2109. } function commDiffDay(time1,time2) { var t1 = Date.UTC(time1.substring(0,4), time1.substring(4,6), time1.substring(6)); var t2 = Date.UTC(time2.substring(0,4), time2.substring(4,6), time2.substring(6)); var d, r, t3; var MinMilli = 1000 * 60 var HrMilli = MinMilli * 60 var DyMilli = HrMilli * 24 t3 = t2 - t1; r = Math.round(t3 / DyMilli); return r; }
  2110. /*-----------------------------------------------------------------------------------
  2111. * NAME : f_getDTime()
  2112. * DESC : 현재날짜+시간을 가져오는 매소드
  2113. * PARAM :
  2114. * DATE : 2006.05.10 11:38
  2115. * AUTH : wooks
  2116. *----------------------------------------------------------------------------------*/
  2117. function commCurDTime(){
  2118. var now = new Date();
  2119. var hour = now.getHours();
  2120. var minute = now.getMinutes();
  2121. var seconds = now.getSeconds();
  2122. var ampm;
  2123. now = null;
  2124. if (hour >= 12) {
  2125. hour = hour - 12;
  2126. ampm = "오후";
  2127. }
  2128. else
  2129. ampm = "오전";
  2130. hour = (hour == 0) ? 12 : hour;
  2131. if (minute < 10)
  2132. minute = "0" + minute;
  2133. if (seconds < 10)
  2134. seconds = "0" + seconds;
  2135. return hour + ":" + minute + ":"+seconds;
  2136. // return ampm+" "+hour + ":" + minute + ":"+seconds;
  2137. }
  2138. /*-----------------------------------------------------------------------------------
  2139. * NAME : commFirstDay()
  2140. * DESC : 현재달의 첫번째 일을 가져오는 매소드
  2141. * PARAM :
  2142. * DATE : 2006.05.10 11:38
  2143. * AUTH :
  2144. *----------------------------------------------------------------------------------*/
  2145. function commFirstDay(){
  2146. var curDate = "";
  2147. var d = new Date();
  2148. var monString = (d.getMonth() + 1)+"";
  2149. var dateString ="01";
  2150. if(monString.length == 1){
  2151. monString = "0" + monString;
  2152. }
  2153. curDate += d.getYear();
  2154. curDate += monString;
  2155. curDate += dateString;
  2156. return curDate;
  2157. }
  2158. /*-----------------------------------------------------------------------------------
  2159. * NAME : commLateDate()
  2160. * DESC : 현재날자로 부터 정해진 지난날 가져오는 매소드
  2161. * PARAM :
  2162. * DATE : 2006.05.10 11:38
  2163. * AUTH : wooks
  2164. *----------------------------------------------------------------------------------*/
  2165. function commLateDate(ldate){
  2166. ldate =(typeof ldate == 'string')? Number(ldate) : ldate;
  2167. var curDate = "";
  2168. var d = new Date;
  2169. d.setDate(d.getDate( ) + ldate);
  2170. var monString = (d.getMonth() + 1)+"";
  2171. var dateString = d.getDate()+"";
  2172. if(monString.length == 1){
  2173. monString = "0" + monString;
  2174. }
  2175. if(dateString.length == 1){
  2176. dateString = "0"+ dateString;
  2177. }
  2178. curDate += d.getYear();
  2179. curDate += monString;
  2180. curDate += dateString;
  2181. return curDate;
  2182. }