cont_util.js 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239
  1. function SetFormValue(f, n, v, sep) {
  2. var f = document.forms[f];
  3. if(!f || !f[n]) return false;
  4. switch(f[n].type) {
  5. case 'text':
  6. case 'password':
  7. case 'hidden':
  8. f[n].value = v;
  9. break;
  10. case 'textarea':
  11. f[n].text = v;
  12. break;
  13. case 'checkbox':
  14. if(f[n].value == v) f[n].checked = true;
  15. break;
  16. case 'select-one':
  17. for(var i=0; i<f[n].options.length; i++) if(f[n].options[i].value == v) f[n].options[i].selected = true;
  18. break;
  19. default:
  20. if(sep) {
  21. var val = v.split(sep);
  22. for(var i=0; i<f[n].length; i++) {
  23. for(var j=0; j<val.length; j++) {
  24. if(f[n][i].value == val[j]) f[n][i].checked = true;
  25. }
  26. }
  27. }
  28. else {
  29. for(var i=0; i<f[n].length; i++) if(f[n][i].value == v) f[n][i].checked = true;
  30. }
  31. break;
  32. }
  33. }
  34. function GetFormValue(f, n) {
  35. var f = document.forms[f];
  36. if(!f || !f[n]) return false;
  37. switch(f[n].type) {
  38. case 'text':
  39. case 'file':
  40. case 'password':
  41. case 'hidden':
  42. return f[n].value;
  43. break;
  44. case 'textarea':
  45. return f[n].text;
  46. break;
  47. case 'checkbox':
  48. if(f[n].checked == true) return f[n].value;
  49. break;
  50. case 'select-one':
  51. for(var i=0; i<f[n].options.length; i++) {
  52. if(f[n].options[i].selected == true) {
  53. return f[n].options[i].value;
  54. }
  55. }
  56. break;
  57. default:
  58. var arr = new Array();
  59. var j = 0;
  60. for(var i=0; i<f[n].length; i++) {
  61. if(f[n][i].checked == true) {
  62. arr[j] = f[n][i].value;
  63. j++;
  64. }
  65. }
  66. return arr.join(",");
  67. break;
  68. }
  69. return false;
  70. }
  71. function MoveNext(el, next, size) {
  72. var len = el.value.length;
  73. if(len == size) {
  74. next.focus();
  75. return true;
  76. }
  77. }
  78. function IsNumeric(sText)
  79. {
  80. var ValidChars = "0123456789.";
  81. var IsNumber=true;
  82. var Char;
  83. for (i = 0; i < sText.length && IsNumber == true; i++) {
  84. Char = sText.charAt(i);
  85. if (ValidChars.indexOf(Char) == -1) {
  86. IsNumber = false;
  87. }
  88. }
  89. return IsNumber;
  90. }
  91. function OnlyNumber(el) {
  92. if(!IsNumeric(el.value)) {
  93. el.value = "";
  94. el.focus();
  95. }
  96. }
  97. function changeYear(element, d, num) {
  98. if(!element) return;
  99. if(!num) num = 10;
  100. var year = parseInt(element.value * 1);
  101. if(!year) year = !d ? new Date().getFullYear() : d;
  102. year = parseInt(year * 1);
  103. var pattern = /[^0-9]/;
  104. var add = "";
  105. var head = "";
  106. if(element.options.length > 0) {
  107. add = pattern.test(element.options[element.selectedIndex].text);
  108. head = element.options[0].value == "" ? element.options[0].text : "";
  109. }
  110. element.options.length = 0; var j = 0;
  111. if(head) {
  112. element.options[0] = new Option(head, "", false);
  113. j++;
  114. }
  115. for (var i=year-num; i<=year+num; i++, j++) {
  116. element.options[j] = new Option(i + (add ? "년" : ""), i, false);
  117. if (i == year) element.options[j].selected = true;
  118. }
  119. }
  120. function in_array(needle, haystack, strict) {
  121. var found = false, key, strict = !!strict;
  122. for (key in haystack) {
  123. if ((strict && haystack[key] === needle) || (!strict && haystack[key] == needle)) {
  124. found = true;
  125. break;
  126. }
  127. }
  128. return found;
  129. }
  130. function removeAttr(formName, keys, type) {
  131. var f = document.forms[formName];
  132. if(!f) return;
  133. type = !type ? "required" : type;
  134. var arr = keys.replace(/ +/g, "").split(",");
  135. for(var i=0; i<arr.length; i++) {
  136. if(f[arr[i]]) {
  137. var el = f[arr[i]];
  138. if (el.type != "select-one" && el.length > 1) el = el[0];
  139. el.removeAttribute(type);
  140. }
  141. }
  142. }
  143. function setAttr(formName, keys, type, value) {
  144. var f = document.forms[formName];
  145. if(!f) return;
  146. var arr = keys.replace(/ +/g, "").split(",");
  147. for(var i=0; i<arr.length; i++) {
  148. if(f[arr[i]]) {
  149. var el = f[arr[i]];
  150. if (el.type != "select-one" && el.length > 1) el = el[0];
  151. el.setAttribute(type, value);
  152. //alert(el.name + ":::" + type + ":::" + el.getAttribute(type));
  153. }
  154. }
  155. }
  156. /* ex)
  157. removeAttr("form1", "aa, ba, ca");
  158. removeAttr("form1", "aa, ba, ca", "optino");
  159. setAttr("form1", "aa, ba, ca", "required", "Y");
  160. */
  161. function setDisabled(element){
  162. if(!element)return;
  163. switch(element.type) {
  164. case 'text':
  165. case 'textarea':
  166. element.className = "input_readonly";
  167. element.readOnly = true;
  168. break;
  169. case 'radio':
  170. case 'checkbox':
  171. element.disabled = true;
  172. break;
  173. case "button":
  174. element.style.display = "none";
  175. break;
  176. default:
  177. if(element.length){
  178. for(var i=0; i<element.length; i++) {
  179. element.disabled = true;
  180. }
  181. }
  182. break;
  183. }
  184. }
  185. function setEnabled(element){
  186. if(!element)return;
  187. switch(element.type) {
  188. case 'text':
  189. case 'textarea':
  190. element.className = "label";
  191. element.readOnly = false;
  192. break;
  193. case 'radio':
  194. case 'checkbox':
  195. element.disabled = false;
  196. break;
  197. case "button":
  198. element.style.display = "";
  199. break;
  200. default:
  201. if(element.length){
  202. for(var i=0; i<element.length; i++) {
  203. element.disabled = false;
  204. }
  205. }
  206. break;
  207. }
  208. }
  209. /**
  210. * 웹표준에 따른 innerHTML 때문에 만들었다.
  211. * ie9과 chrom에서는 사용자가 입력한 값이 innerHTML로 읽혀 오지 않는다.
  212. * 사용자가 화면 상에서 입력한 값은 html의 dom에 바로 반영 되는 것이 아니여서 innerHTML로 읽히지 않는다.
  213. * 따라서 javascript setAttribute 또는 innerHTML 을 이용하여 직접 셋팅해주어야 한다.
  214. * **/
  215. function val2attr(element){
  216. if(!element)return;
  217. switch(element.type) {
  218. case 'text':
  219. case 'password':
  220. case 'hidden':
  221. element.setAttribute("value", element.value);
  222. break;
  223. case 'textarea':
  224. element.innerHTML = element.value;
  225. break;
  226. case 'radio':
  227. case 'checkbox':
  228. if(element.checked)
  229. element.setAttribute("checked", "true");
  230. break;
  231. case 'select-one':
  232. for(var i=0; i<element.options.length; i++) if(element.options[i].value == element.value) element.options[i].setAttribute("selected", "true");
  233. break;
  234. default:
  235. break;
  236. }
  237. }
  238. function setAttrValue(div){
  239. var div = document.getElementById(div);
  240. var input = div.getElementsByTagName("input");
  241. for(var i = 0; i < input.length; i ++){
  242. var element = input[i];
  243. val2attr(element);
  244. }
  245. var select = div.getElementsByTagName("select");
  246. for(var i = 0; i < select.length; i ++){
  247. var element = select[i];
  248. val2attr(element);
  249. }
  250. var textarea = div.getElementsByTagName("textarea");
  251. for(var i = 0; i < textarea.length; i ++){
  252. var element = textarea[i];
  253. val2attr(element);
  254. }
  255. }
  256. /******************
  257. 숫자만 입력하기
  258. ******************/
  259. function num_only(Ev){
  260. var evCode = (window.netscape) ? Ev.which : event.keyCode;
  261. if ((evCode < 48 || evCode > 57) && (evCode < 96 || evCode > 105)&& (evCode < 37 || evCode > 40) && evCode != 8 && evCode != 9 && evCode != 13 && evCode != 46 ) {
  262. if (window.netscape) {
  263. Ev.preventDefault();
  264. } else {
  265. window.event.returnValue = false;
  266. window.event.cancelBubble = true;
  267. try{
  268. window.event.stopPropagation();
  269. window.event.preventDefault();
  270. }catch(err){/*IE11이하에서는 작동안됨*/}
  271. }
  272. }
  273. }
  274. /******************
  275. 숫자만 입력하기
  276. ******************/
  277. function num_point_only(Ev){
  278. var evCode = (window.netscape) ? Ev.which : event.keyCode;
  279. if((48 <= evCode && evCode <= 57 || 96 <= evCode && evCode <= 105 || evCode == 8 || evCode == 46) ||
  280. evCode == 37 || evCode == 39 || evCode == 27 || evCode == 8 || evCode == 9 || evCode == 110 || evCode == 190)
  281. {
  282. return;
  283. }else
  284. {
  285. if (window.netscape) {
  286. Ev.preventDefault();
  287. } else {
  288. window.event.returnValue = false;
  289. window.event.cancelBubble = true;
  290. try{
  291. window.event.stopPropagation();
  292. window.event.preventDefault();
  293. }catch(err){/*IE11이하에서는 작동안됨*/}
  294. }
  295. }
  296. }
  297. /*********************************
  298. trim 기능
  299. *********************************/
  300. String.prototype.trim = function()
  301. {
  302. return this.replace(/(^\s*)|(\s*$)/gi, "");
  303. }
  304. /*********************************
  305. replaceAll 기능
  306. *********************************/
  307. String.prototype.replaceAll = function(sVal1, sVal2)
  308. {
  309. return funcReplaceStrAll(this,sVal1,sVal2);
  310. }
  311. /*********************************
  312. replaceAll 기능
  313. *********************************/
  314. function funcReplaceStrAll( org_str, find_str, replace_str)
  315. {
  316. var pos = 0;
  317. pos = org_str.indexOf(find_str);
  318. while(pos != -1)
  319. {
  320. pre_str = org_str.substring(0, pos);
  321. post_str = org_str.substring(pos + find_str.length, org_str.length);
  322. org_str = pre_str + replace_str + post_str;
  323. pos = org_str.indexOf(find_str);
  324. }
  325. return org_str;
  326. }
  327. /*************************
  328. 유효한 월(月)인지 확인.
  329. Parameter : MM(월)
  330. Return : true / false
  331. *************************/
  332. function isValidMonth(mm)
  333. {
  334. var m = parseInt(mm,10);
  335. return (m >= 1 && m <= 12);
  336. }
  337. /***************************************
  338. 유효한 일(日)인지 확인.
  339. Parameter : YYYY, MM, DD(년, 월, 일)
  340. Return : true / false
  341. ***************************************/
  342. function isValidDay(yyyy, mm, dd)
  343. {
  344. var m = parseInt(mm,10) - 1;
  345. var d = parseInt(dd,10);
  346. var end = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
  347. if ((yyyy % 4 == 0 && yyyy % 100 != 0) || yyyy % 400 == 0)
  348. end[1] = 29;
  349. return (d >= 1 && d <= end[m]);
  350. }
  351. /***************************************
  352. 유효한 시간인지 확인.
  353. Parameter : hh(시간)
  354. Return : true / false
  355. ***************************************/
  356. function isValidHour(hh)
  357. {
  358. var hour = parseInt(hh,10);
  359. if(hour < 24)
  360. return true;
  361. else
  362. return false;
  363. }
  364. /***************************************
  365. 유효한 분인지 확인.
  366. Parameter : mm(분)
  367. Return : true / false
  368. ***************************************/
  369. function isValidMin(mm)
  370. {
  371. var min = parseInt(mm,10);
  372. if(min < 60)
  373. return true;
  374. else
  375. return false;
  376. }
  377. /**
  378. * 숫자인지 체크
  379. * true - 숫자
  380. * false - 숫자가 아님
  381. */
  382. function isNum(objValue)
  383. {
  384. var str="0123456789"
  385. if (objValue=="")
  386. {
  387. return false;
  388. }
  389. for (i=0;i<objValue.length;i++)
  390. {
  391. if (str.indexOf(objValue.charAt(i))==-1)
  392. {
  393. return false;
  394. }
  395. }
  396. return true;
  397. }
  398. /*
  399. * 유효한 날짜(Date) 인지 체크
  400. * Parameter : YYYYMMDD(년월일)
  401. * Return : true / false
  402. */
  403. function isValidDate(objValue)
  404. {
  405. if(!isNum(objValue) || objValue.length < 8)
  406. return false;
  407. year = objValue.substring(0, 4);
  408. month = objValue.substring(4, 6);
  409. day = objValue.substring(6, 8);
  410. if (parseInt(year, 10) >= 1900 && isValidMonth(month) && isValidDay(year, month, day))
  411. return true;
  412. return false;
  413. }
  414. /* --- 날짜 형식 (onKeyUp 이벤트) --- */
  415. function dateFormat(obj)
  416. {
  417. var str = obj.value.replace(/\-/gi, "");
  418. var leng = str.length;
  419. switch (leng)
  420. {
  421. case 1 :
  422. case 2 :
  423. case 3 :
  424. case 4 : obj.value = str; break;
  425. case 5 :
  426. case 6 : obj.value = str.substring(0, 4) + "-" + str.substring(4); break;
  427. case 7 :
  428. case 8 : obj.value = str.substring(0, 4) + "-" + str.substring(4, 6) + "-" + str.substring(6);
  429. break;
  430. }
  431. }
  432. /******************************************
  433. 인자로 입력된 값을 3자리 단위로 "," 추가
  434. ******************************************/
  435. function fnMakeComma()
  436. {
  437. if(event.keyCode == 37 || event.keyCode == 39)
  438. {
  439. return;
  440. }
  441. var num = event.srcElement.value;
  442. var sScale = "";
  443. if(event.srcElement.getAttribute("scale") != null)
  444. {
  445. sScale = event.srcElement.getAttribute("scale");
  446. }
  447. num = num.replaceAll(",","");
  448. if(num.length > 0 && num.substring(0,1) == ".")
  449. {
  450. alert("소숫점을 처음부터 기입하실수 없습니다.");
  451. event.srcElement.value = "";
  452. event.srcElement.Focus();
  453. return;
  454. }
  455. if(num.split(".").length > 2)
  456. {
  457. alert("소수점은 1개까지만 허용됩니다.");
  458. event.srcElement.value = "";
  459. event.srcElement.Focus();
  460. return;
  461. }
  462. var sNum = "";
  463. var sNum2 = "";
  464. var aNum;
  465. if(num.indexOf(".") != -1)
  466. {
  467. var aNum = num.split(".");
  468. sNum = aNum[0];
  469. sNum2 = aNum[1];
  470. }else
  471. {
  472. sNum = num;
  473. }
  474. if(sNum2 && sNum2.length > 3)
  475. {
  476. alert("소수점은 3자리까지 입력가능합니다.");
  477. event.srcElement.value = "";
  478. event.srcElement.Focus();
  479. return;
  480. }
  481. sNum = fnMakeComma2(sNum);
  482. if(num.indexOf(".") != -1)
  483. {
  484. event.srcElement.value = sNum + "." + sNum2;
  485. }else
  486. {
  487. event.srcElement.value = sNum;
  488. }
  489. }
  490. /******************************************
  491. 3자리 단위로 "," 추가
  492. ******************************************/
  493. function fnMakeComma2(val){
  494. var aNum;
  495. var sNum = "";
  496. var sNum2 = "";
  497. if(val.indexOf(".") != -1)
  498. {
  499. aNum = val.split(".");
  500. sNum = aNum[0];
  501. sNum2 = aNum[1];
  502. }else
  503. {
  504. sNum = val;
  505. }
  506. var new_num = "";
  507. for(i=0;i<sNum.length;i++) {
  508. new_num=sNum.substr(sNum.length-i-1,1) + new_num;
  509. if( sNum.substr(sNum.length-i-2,1) != '-' ) {
  510. if ( ((i+1) % 3 == 0 ) && ( ((i+1) != sNum.length) )) {
  511. new_num = "," + new_num ;
  512. }
  513. }
  514. }
  515. if(sNum2.length > 0)
  516. {
  517. return new_num + "." + sNum2;
  518. }else
  519. {
  520. return new_num;
  521. }
  522. }
  523. function makeComma(obj){
  524. var num = obj.value;
  525. num = num.replaceAll(",","");
  526. var aNum = num.split(".");
  527. if ( aNum.length > 2 ) {
  528. alert("소수점은 1개까지만 허용됩니다.");
  529. obj.select();
  530. return;
  531. }
  532. num = aNum[0];
  533. new_num = "";
  534. num = num + new_num;
  535. for(i=0;i<num.length;i++) {
  536. new_num=num.substr(num.length-i-1,1) + new_num;
  537. if( num.substr(num.length-i-2,1) != '-' ) {
  538. if ( ((i+1) % 3 == 0 ) && ( ((i+1) != num.length) )) {
  539. new_num = "," + new_num ;
  540. }
  541. }
  542. }
  543. if (aNum.length > 1){
  544. obj.value = new_num + "." + aNum[1];
  545. }else{
  546. obj.value = new_num;
  547. }
  548. }
  549. /***************************
  550. 버림
  551. ***************************/
  552. function getFloor(nVal, nLen)
  553. {
  554. var sVal = nVal + "";
  555. var aNum;
  556. var sNum = "";
  557. var sNum2 = "";
  558. if(sVal.indexOf(".") != -1)
  559. {
  560. aNum = sVal.split(".");
  561. sNum = aNum[0];
  562. sNum2 = aNum[1];
  563. }else
  564. {
  565. sNum = sVal;
  566. }
  567. if(sNum2.length > nLen)
  568. {
  569. sNum2 = sNum2.substring(0,nLen);
  570. var nNum3 = Number("0."+sNum2);
  571. var sNum3 = (nNum3+"").replaceAll("0.","");
  572. sNum2 = sNum3;
  573. }
  574. var sRtnVal = "";
  575. sRtnVal = sNum;
  576. if(sNum2.length > 0)
  577. {
  578. sRtnVal = sRtnVal + "." + sNum2;
  579. }
  580. return Number(sRtnVal);
  581. }
  582. // 금액 입력시 한글로 표시
  583. function fSetKoreanMoney(inputVal, displayClass)
  584. {
  585. var koreanMoney = "";
  586. var numVal = trimComma(inputVal);
  587. if ( (numVal != "") && isIntNum(numVal) )
  588. {
  589. koreanMoney = "一金 " + num2han(numVal) + "원整";
  590. }
  591. //document.getElementById(displayId).innerHTML = koreanMoney;
  592. replaceInput(koreanMoney,displayClass,__html);
  593. return;
  594. }
  595. // 금액 입력시 한글로 표시
  596. function fSetKoreanMoney2(inputVal, displayClass)
  597. {
  598. var koreanMoney = "";
  599. var numVal = trimComma(inputVal);
  600. if ( (numVal != "") )
  601. {
  602. koreanMoney = "一金 " + num2han2(numVal);
  603. }
  604. //document.getElementById(displayId).innerHTML = koreanMoney;
  605. replaceInput(koreanMoney,displayClass,__html);
  606. return;
  607. }
  608. /**
  609. * 숫자를 한글로
  610. */
  611. function num2han(num){
  612. var i, j=0, k=0;
  613. var han1 = new Array("","일","이","삼","사","오","육","칠","팔","구");
  614. var han2 = new Array("","만","억","조","경","해","시","양","구","간");
  615. var han3 = new Array("","십","백","천");
  616. var result="", hangul = num + "", pm = "";
  617. var str = new Array(), str2="";
  618. var strTmp = new Array();
  619. if(parseInt(num)==0) return "영"; //입력된 숫자가 0일 경우 처리
  620. if(hangul.substring(0,1) == "-"){ //음수 처리
  621. pm = "감 ";
  622. hangul = hangul.substring(1, hangul.length);
  623. }
  624. if(hangul.length > han2.length*4) return "too much number"; //범위를 넘는 숫자 처리 자리수 배열 han2에 자리수 단위만 추가하면 범위가 늘어남.
  625. for(i=hangul.length; i > 0; i=i-4){
  626. str[j] = hangul.substring(i-4,i); //4자리씩 끊는다.
  627. for(k=str[j].length;k>0;k--){
  628. strTmp[k] = (str[j].substring(k-1,k))?str[j].substring(k-1,k):"";
  629. strTmp[k] = han1[parseInt(strTmp[k])];
  630. if(strTmp[k]) strTmp[k] += han3[str[j].length-k];
  631. str2 = strTmp[k] + str2;
  632. }
  633. str[j] = str2;
  634. //if(str[j]) result = str[j]+han2[j]+result;
  635. //4자리마다 한칸씩 띄워서 보여주는 부분. 우선은 주석처리
  636. //result = (str[j])? " "+str[j]+han2[j]+result : " " + result;
  637. result = (str[j])? " "+str[j]+han2[j]+result : " " + result;
  638. j++; str2 = "";
  639. }
  640. return pm + result; //부호 + 숫자값
  641. }
  642. /**
  643. * 숫자를 한글로
  644. */
  645. function num2han2(num){
  646. var i, j=0, k=0;
  647. var han1 = new Array("","일","이","삼","사","오","육","칠","팔","구");
  648. var han4 = new Array("영","일","이","삼","사","오","육","칠","팔","구");
  649. var han2 = new Array("","만","억","조","경","해","시","양","구","간");
  650. var han3 = new Array("","십","백","천");
  651. var result="", hangul = num + "", pm = "" , sosu = "";
  652. var str = new Array(), str2="", str3 = new Array(), str4 = "";
  653. var strTmp = new Array();
  654. if(parseInt(num)==0) return "영"; //입력된 숫자가 0일 경우 처리
  655. if(hangul.substring(0,1) == "-"){ //음수 처리
  656. pm = "감 ";
  657. hangul = hangul.substring(1, hangul.length);
  658. }
  659. if(hangul.length > han2.length*4) return "too much number"; //범위를 넘는 숫자 처리 자리수 배열 han2에 자리수 단위만 추가하면 범위가 늘어남.
  660. var digit = hangul.indexOf('.');
  661. if(digit > 0){
  662. sosu = hangul.substring(digit, hangul.length);
  663. hangul = hangul.substring(0, digit);
  664. }
  665. for(i=hangul.length; i > 0; i=i-4){
  666. str[j] = hangul.substring(i-4,i); //4자리씩 끊는다.
  667. for(k=str[j].length;k>0;k--){
  668. strTmp[k] = (str[j].substring(k-1,k))?str[j].substring(k-1,k):"";
  669. strTmp[k] = han1[parseInt(strTmp[k])];
  670. if(strTmp[k]) strTmp[k] += han3[str[j].length-k];
  671. str2 = strTmp[k] + str2;
  672. }
  673. str[j] = str2;
  674. //if(str[j]) result = str[j]+han2[j]+result;
  675. //4자리마다 한칸씩 띄워서 보여주는 부분. 우선은 주석처리
  676. //result = (str[j])? " "+str[j]+han2[j]+result : " " + result;
  677. result = (str[j])? " "+str[j]+han2[j]+result : " " + result;
  678. j++; str2 = "";
  679. }
  680. if(sosu.length > 0 ){
  681. for(i= sosu.length; i > 1; i--){
  682. str3[j] = sosu.substring(i-1, i);
  683. for(k=str3[j].length; k>0 ;k--){
  684. strTmp[k] = (str3[j].substring(k-1,k))?str3[j].substring(k-1,k):"";
  685. str4 = han4[parseInt(strTmp[k])] + str4 ;
  686. }
  687. }
  688. str4 = "점"+ str4;
  689. }
  690. return pm + result + str4; //부호 + 숫자값
  691. }
  692. // 금액인지
  693. function isIntNum(objValue)
  694. {
  695. var str="-0123456789"
  696. if (objValue=="")
  697. {
  698. return false;
  699. }
  700. for (i=0;i<objValue.length;i++)
  701. {
  702. if (str.indexOf(objValue.charAt(i))==-1)
  703. {
  704. return false;
  705. }
  706. }
  707. return true;
  708. }
  709. /**
  710. * 문자열에서 Comma(,) 삭제
  711. *
  712. */
  713. function trimComma(inString)
  714. {
  715. var len = inString.length;
  716. var ch, outString = "c";
  717. for (i=1; i<=len; i++ )
  718. {
  719. ch = inString.substr(i-1, 1);
  720. if (ch == ",")
  721. {
  722. }
  723. else
  724. {
  725. outString = outString + ch;
  726. }
  727. }
  728. outlen = outString.length;
  729. outString = outString.substring(1,outlen);
  730. return outString;
  731. }
  732. /**
  733. * 템플릿에 있는 입력양식에서 input control을 제거한다.
  734. * 어느 곳에 입력하던 같은 값을 가지게 된다.
  735. *
  736. * @param inObj inputBox를 제거하려는 원본 Div 컨트롤객체
  737. * @param outObj inputBox를 제거한 값을 출력할 input(text, textarea) 컨트롤객체
  738. * @param isDebug 디버깅 화면 출력여부( 디버깅을 원하면 true, 아니면 false 또는 인자생략)
  739. * @return
  740. */
  741. function removeInput(inObj, outObj, isDebug)
  742. {
  743. var html = inObj.innerHTML;
  744. var form = document.createElement("form"); // control을 위한 임시 form
  745. form.innerHTML = html;
  746. var tmp = html.replace(/[\r|\n]/g, '');
  747. var style = searchStyle(html.replace(/[\r|\n]/g, '')); // innerHtml 하면 style 태그가 사라지므로 그 부분만 따로 저장한다.
  748. //변경계약합의서 달력 이미지 예외처리
  749. if(form['end_work_date_img']){
  750. form['end_work_date_img'].style.display="none";
  751. }
  752. if(form['calendar_sitedescdate']){
  753. if((form['calendar_sitedescdate'].length == "undefined") || (form['calendar_sitedescdate'].length == null)){
  754. form['calendar_sitedescdate'].style.display="none";
  755. }else{
  756. for(j=0; j<form['calendar_sitedescdate'].length; j++){
  757. form['calendar_sitedescdate'][j].style.display="none";
  758. }
  759. }
  760. }
  761. var elems = form.elements;
  762. for(var i=0;i<elems.length;i++){
  763. var aElem = elems[i];
  764. if( aElem.tagName == null || ( aElem.tagName.toLowerCase() != "input" && aElem.tagName.toLowerCase() != "textarea" && aElem.tagName.toLowerCase() != "select" ) ){
  765. continue;
  766. }
  767. // if(aElem.type.toLowerCase() != "hidden"){
  768. var pdf= aElem.getAttribute("pdf");
  769. if( pdf != null)
  770. {
  771. var id = "";
  772. var arrPdf = pdf.split(":");
  773. switch(arrPdf[0])
  774. {
  775. case "no": // 무조건 pdf 출력 안함
  776. var pNode = aElem.parentNode;
  777. while(pNode.getAttribute("id")!=arrPdf[1])
  778. pNode = pNode.parentNode;
  779. pNode.style.display = "none";
  780. break;
  781. case "op":
  782. if(aElem.value == "") // 값이 없는 경우 pdf 출력 안함.
  783. {
  784. var pNode = aElem.parentNode;
  785. while(pNode.getAttribute("id")!=arrPdf[1])
  786. pNode = pNode.parentNode;
  787. pNode.style.display = "none";
  788. }
  789. break;
  790. }
  791. }
  792. aElem.style.display = "none";
  793. if(aElem.parentNode.nodeName.toLowerCase() == "span"){
  794. if(aElem.value == ""){
  795. aElem.parentNode.innerHTML = aElem.parentNode.innerHTML + "&nbsp;"; // input을 삭제하면 elems.length 가 변하므로 정상적이지 않게 됨.
  796. }else{
  797. if(aElem.type.toLowerCase() == "checkbox" || aElem.type.toLowerCase() == "radio")
  798. {
  799. if(aElem.checked)
  800. aElem.parentNode.innerHTML = aElem.parentNode.innerHTML + '▣';
  801. else
  802. aElem.parentNode.innerHTML = aElem.parentNode.innerHTML + '□';
  803. }
  804. else if(aElem.type.toLowerCase() == "select-one")
  805. {
  806. // alert(document.getElementById(aElem.name).options.selectedIndex);
  807. // alert(aElem.options[document.getElementById(aElem.name).options.selectedIndex].text);
  808. aElem.parentNode.innerHTML = fConvertSecuStr(aElem.options[document.getElementById(aElem.name).options.selectedIndex].text);
  809. }
  810. else
  811. {
  812. // alert(aElem.parentNode.innerHTML);
  813. aElem.parentNode.innerHTML = aElem.parentNode.innerHTML + fConvertSecuStr(aElem.value);
  814. }
  815. }
  816. }
  817. // }
  818. }
  819. outObj.value = style + form.innerHTML;
  820. // alert(outObj.value);
  821. if(isDebug)
  822. {
  823. var __htmlRemoveDiv = document.createElement("div"); // control을 위한 임시 form
  824. __htmlRemoveDiv.innerHTML = form.innerHTML;
  825. document.body.insertBefore(__htmlRemoveDiv);
  826. }
  827. }
  828. // <style type=\"text/css\"> </style> 을 찾아 내용 가져오기
  829. function searchStyle(sIn)
  830. {
  831. var v_regExp = new RegExp("<STYLE[^>]*>(.*?)</STYLE>");
  832. if(v_regExp.test(sIn))
  833. {
  834. var v_result = v_regExp.exec(sIn);
  835. if(v_result != null)
  836. return v_result[0];
  837. }
  838. return "";
  839. }
  840. /**
  841. * 보안 필터에 적용받지 않도록 문자열 변환
  842. */
  843. function fConvertSecuStr(sHtmlString)
  844. {
  845. var sContents = sHtmlString;
  846. sContents = sContents.replaceAll("\n", "<br>");
  847. return sContents;
  848. }
  849. /**
  850. * class이름을 가지고 있는 객체의 값을 input 값으로 변경한다.
  851. *
  852. * @param inputObj 값을 입력한 객체
  853. * @param targetClass class ID
  854. * @param node 검색범위 (생략하면 document가 기본값
  855. * @return 대상건이 있으면 true 없으면 false
  856. */
  857. function replaceInput(inputObj, targetClass, node)
  858. {
  859. var t;
  860. var inputVal;
  861. //alert(typeof(inputObj));
  862. if(typeof(inputObj) == "object")
  863. inputVal = inputObj.value;
  864. else if(typeof(inputObj) == "string")
  865. inputVal = inputObj;
  866. if(node == null)
  867. t = getElementsByClass(targetClass);
  868. else
  869. t = getElementsByClass(targetClass, node);
  870. for(var i=0; i<t.length; i++)
  871. {
  872. if(t[i].tagName == "INPUT")
  873. t[i].value = inputVal;
  874. else if(t[i].tagName == "SPAN")
  875. {
  876. t[i].innerHTML = inputVal.replace("&","&amp;");
  877. }else if(t[i].tagName == "TEXTAREA")
  878. {
  879. t[i].value = inputVal.replace(/<br>/gi,"\r\n");
  880. //t[i].value = inputVal;
  881. }
  882. }
  883. if(t.length > 0)
  884. return 1;
  885. else
  886. return 0;
  887. }
  888. // 같은 클래스명을 가진 객체를 모두 찾아낸다.
  889. function getElementsByClass(searchClass,node,tag)
  890. {
  891. var classElements = new Array();
  892. if ( node == null ) node = document;
  893. if ( tag == null ) tag = '*' ;
  894. var els = node.getElementsByTagName(tag);
  895. var elsLen = els.length;
  896. //var pattern = new RegExp("(^|s)" +searchClass+"(s|$)");
  897. var pattern = new RegExp("(^| )" +searchClass+"( |$)");
  898. for (i = 0, j = 0; i < elsLen; i++) {
  899. if( pattern.test(els[i].className) ) {
  900. classElements[j] = els[i];
  901. j++;
  902. }
  903. }
  904. return classElements;
  905. }
  906. function tabView(index) {
  907. // 최대 6개의 sub 양식까지만
  908. for(var i=0; i<=6; i++)
  909. {
  910. if(i == index)
  911. {
  912. document.getElementById("tab_"+i).className = 'tab_on';
  913. document.getElementById("__html_"+i).style.display = '';
  914. }
  915. else
  916. {
  917. if(document.getElementById("tab_"+i) != null)
  918. {
  919. document.getElementById("tab_"+i).className = 'tab_off';
  920. document.getElementById("__html_"+i).style.display = 'none';
  921. }
  922. }
  923. }
  924. }
  925. // 문서를 배열 컨트롤로 만든다.
  926. function splitHtml(f, ctrName, bRemoveInput, fileCount)
  927. {
  928. for(var i=0; i<fileCount; i++)
  929. {
  930. if( document.getElementById("__html_"+i) !== null )
  931. {
  932. if(document.getElementById(ctrName+"_"+i)){
  933. var node = document.getElementById(ctrName+"_"+i);
  934. node.parentNode.removeChild(node);
  935. }
  936. var __htmlCtrl = document.createElement("input"); // control을 위한 임시 form
  937. __htmlCtrl.setAttribute("type", "hidden");
  938. __htmlCtrl.setAttribute("name", ctrName);
  939. __htmlCtrl.setAttribute("id", ctrName+"_"+i);
  940. //2022.08.30 textarea 크롬에서 저장 안되는 문제 해결 : CONT_TEMPLATE에 ID(textarea_숫자)등록 후 아래와 같이 조치
  941. var _textarea = document.getElementById("__html_"+i).getElementsByTagName('textarea');
  942. for ( var j = 1; j <= _textarea.length; j++) {
  943. jQuery("#textarea_"+j).text( jQuery("#textarea_"+j).val());
  944. }
  945. if(bRemoveInput) // input tag의 display를 none으로 변경(pdf용)
  946. removeInput(document.getElementById("__html_"+i), __htmlCtrl);
  947. else
  948. __htmlCtrl.value = document.getElementById("__html_"+i).innerHTML;
  949. f.insertBefore(__htmlCtrl, f.lastchild);
  950. }
  951. }
  952. }
  953. /*===================================================*/
  954. /*
  955. * 기준금액의 퍼센트 금액을 set한다.
  956. * sAmt = 기준금액
  957. * rate = %
  958. * targetClass= 대상 class
  959. */
  960. function fSetPersentAmt(sAmt, rate, targetClass, kMoneyClass){
  961. if(sAmt == "" || rate == ""){
  962. replaceInput("", targetClass,__html);
  963. replaceInput("", kMoneyClass,__html);
  964. return;
  965. }
  966. if(sAmt == 0 && rate == 0 ){
  967. replaceInput("0", targetClass,__html);
  968. return;
  969. }
  970. sAmt = sAmt.replaceAll(",","");
  971. // alert(rate);
  972. // var cVal = Number(sAmt) * Number(rate) / 100;
  973. var cVal = Math.round(Number(sAmt) * (Number(rate)/100));
  974. cVal = getFloor(cVal,0);
  975. replaceInput(fnMakeComma2(cVal+""),targetClass, __html );
  976. if(kMoneyClass){
  977. fSetKoreanMoney(fnMakeComma2(cVal+""),kMoneyClass);
  978. }
  979. }
  980. /**
  981. * 달력 컴포넌트
  982. * @param obj_str
  983. */
  984. var contCalendar_year = "";
  985. var contCalendar_month = "";
  986. var contCalendar_day = "";
  987. function contCalendar(yyyy,MM,dd)
  988. {
  989. var info = {Format:"yyyyMMdd", CalButtons : "Close",CallBack:"contCalendar_return"};
  990. IBShowCalendar("",info);
  991. contCalendar_year = yyyy;
  992. contCalendar_month = MM;
  993. contCalendar_day = dd;
  994. }
  995. function contCalendar_return(value){
  996. var f = document.forms['form1'];
  997. var year = value.substring(0,4);
  998. var month = value.substring(4,6);
  999. var day = value.substring(6,8);
  1000. replaceInput(year,contCalendar_year,__html);
  1001. replaceInput(month,contCalendar_month,__html);
  1002. replaceInput(day,contCalendar_day,__html);
  1003. }
  1004. /******************************************
  1005. 인자로 입력된 값을 3자리 단위로 "," 추가 및 변수값에 따라서 소수점 제어
  1006. ******************************************/
  1007. function fnMakeComma3(sosuNum)
  1008. {
  1009. if(event.keyCode == 37 || event.keyCode == 39)
  1010. {
  1011. return;
  1012. }
  1013. if((event.keyCode == 110) && (sosuNum == 0)){
  1014. alert("해당 통화에는 소수점 입력이 불가능 합니다.");
  1015. event.srcElement.value = "";
  1016. event.srcElement.focus();
  1017. return;
  1018. }
  1019. var num = event.srcElement.value;
  1020. var sScale = "";
  1021. if(event.srcElement.getAttribute("scale") != null)
  1022. {
  1023. sScale = event.srcElement.getAttribute("scale");
  1024. }
  1025. num = num.replaceAll(",","");
  1026. if(num.length > 0 && num.substring(0,1) == ".")
  1027. {
  1028. alert("소숫점을 처음부터 기입하실수 없습니다.");
  1029. event.srcElement.value = "";
  1030. event.srcElement.focus();
  1031. return;
  1032. }
  1033. if(num.split(".").length > 2)
  1034. {
  1035. alert("소수점은 1개까지만 허용됩니다.");
  1036. event.srcElement.value = "";
  1037. event.srcElement.focus();
  1038. return;
  1039. }
  1040. var sNum = "";
  1041. var sNum2 = "";
  1042. var aNum;
  1043. if(num.indexOf(".") != -1)
  1044. {
  1045. var aNum = num.split(".");
  1046. sNum = aNum[0];
  1047. sNum2 = aNum[1];
  1048. }else
  1049. {
  1050. sNum = num;
  1051. }
  1052. if(sNum2 && sNum2.length > sosuNum)
  1053. {
  1054. alert("소수점은 "+ sosuNum +"자리까지 입력가능합니다.");
  1055. event.srcElement.value = "";
  1056. event.srcElement.focus();
  1057. return;
  1058. }
  1059. sNum = fnMakeComma2(sNum);
  1060. if(num.indexOf(".") != -1)
  1061. {
  1062. event.srcElement.value = sNum + "." + sNum2;
  1063. }else
  1064. {
  1065. event.srcElement.value = sNum;
  1066. }
  1067. }
  1068. /*===================================================*/
  1069. /*
  1070. * 기준금액의 퍼센트 금액을 set한다.
  1071. * sAmt = 기준금액
  1072. * rate = %
  1073. * targetClass= 대상 class
  1074. */
  1075. function fSetPersentAmt2(sAmt, rate, targetClass, sosuNum){
  1076. if(sAmt == "" || rate == ""){
  1077. replaceInput("", targetClass,__html);
  1078. return;
  1079. }
  1080. if(sAmt == 0 && rate == 0 ){
  1081. replaceInput("0", targetClass,__html);
  1082. return;
  1083. }
  1084. sAmt = sAmt.replaceAll(",","");
  1085. //var cVal = Number(sAmt) * (Number(rate)/100); 2016.9.21 1349000*70/100 계산오류로 수정
  1086. var cVal = Number(sAmt) * Number(rate)/100 ;
  1087. cVal = getFloor(cVal,sosuNum);
  1088. replaceInput(fnMakeComma2(cVal+""),targetClass, __html );
  1089. }