SSZZC00101_nuMedirecCalendar.xfdl 52 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!--
  3. - 수정이력
  4. - 2012.03.26 / 최초작성 / 정지훈
  5. - 2012.04.19 / 수정작성 / 정지훈 / 다국어처리(한국,중국,미국)
  6. -->
  7. <!--
  8. @name nuCalendar
  9. @desc
  10. -->
  11. <FDL version="1.5">
  12. <TypeDefinition url="..\..\..\default_typedef.xml"/>
  13. <Form id="basicCalendar" classname="multiCalendar" inheritanceid="" position="absolute 0 0 95 20" style="background:transparent;border:1 solid #333333ff ;align:left;" scrollbars="none" onload="basicCalendar_onload" readonly="false" onsetfocus="basicCalendar_onsetfocus" _format="YYYY-MM-DD" _maskinclude="false" ctrltype="ctrl" degnitemno="" refdegnitemno="" _setcurdate="" _deniedfuturedate="_false">
  14. <Layouts>
  15. <Layout height="20" width="95">
  16. <PopupDiv id="pd_calendar" text="PopupDiv01" visible="false" position="absolute 116 43 315 263">
  17. <Layouts>
  18. <Layout>
  19. <Grid id="gd_calendar" class="grd_schdule_termFr" taborder="4" binddataset="ds_calendar" scrollbars="none" useinputpanel="false" selecttype="cell" autofittype="col" position="absolute 0 27 199 192" useselcolor="false" oncellclick="pd_calendar_gd_calendar_oncellclick" style="cursor:hand;" onmousemove="pd_calendar_gd_calendar_onmousemove" onmouseleave="pd_calendar_gd_calendar_onmouseleave">
  20. <Formats>
  21. <Format id="default">
  22. <Columns>
  23. <Column size="80"/>
  24. <Column size="80"/>
  25. <Column size="80"/>
  26. <Column size="80"/>
  27. <Column size="80"/>
  28. <Column size="80"/>
  29. <Column size="80"/>
  30. </Columns>
  31. <Rows>
  32. <Row size="24" band="head"/>
  33. <Row size="23"/>
  34. </Rows>
  35. <Band id="head">
  36. <Cell class="sun" text="expr:gridHeaderDay(&quot;일&quot;)"/>
  37. <Cell col="1" text="expr:gridHeaderDay(&quot;월&quot;)"/>
  38. <Cell col="2" text="expr:gridHeaderDay(&quot;화&quot;)"/>
  39. <Cell col="3" text="expr:gridHeaderDay(&quot;수&quot;)"/>
  40. <Cell col="4" text="expr:gridHeaderDay(&quot;목&quot;)"/>
  41. <Cell col="5" text="expr:gridHeaderDay(&quot;금&quot;)"/>
  42. <Cell col="6" class="sat" text="expr:gridHeaderDay(&quot;토&quot;)"/>
  43. </Band>
  44. <Band id="body">
  45. <Cell displaytype="normal" style="background:EXPR(gridTodayExpr(date0));background2:EXPR(gridTodayExpr(date0));color:EXPR(gridTodayFontColor(date0,&quot;col0&quot;));color2:EXPR(gridTodayFontColor(date0,&quot;col0&quot;));font:EXPR(gridTodayFontStyle(date0));" text="bind:day0"/>
  46. <Cell col="1" style="background:EXPR(gridTodayExpr(date1));background2:EXPR(gridTodayExpr(date1));color:EXPR(gridTodayFontColor(date1));color2:EXPR(gridTodayFontColor(date1));font:EXPR(gridTodayFontStyle(date1));" text="bind:day1"/>
  47. <Cell col="2" style="background:EXPR(gridTodayExpr(date2));background2:EXPR(gridTodayExpr(date2));color:EXPR(gridTodayFontColor(date2));color2:EXPR(gridTodayFontColor(date2));font:EXPR(gridTodayFontStyle(date2));" text="bind:day2"/>
  48. <Cell col="3" style="background:EXPR(gridTodayExpr(date3));background2:EXPR(gridTodayExpr(date3));color:EXPR(gridTodayFontColor(date3));color2:EXPR(gridTodayFontColor(date3));font:EXPR(gridTodayFontStyle(date3));" text="bind:day3"/>
  49. <Cell col="4" style="background:EXPR(gridTodayExpr(date4));background2:EXPR(gridTodayExpr(date4));color:EXPR(gridTodayFontColor(date4));color2:EXPR(gridTodayFontColor(date4));font:EXPR(gridTodayFontStyle(date4));" text="bind:day4"/>
  50. <Cell col="5" style="background:EXPR(gridTodayExpr(date5));background2:EXPR(gridTodayExpr(date5));color:EXPR(gridTodayFontColor(date5));color2:EXPR(gridTodayFontColor(date5));font:EXPR(gridTodayFontStyle(date5));" text="bind:day5"/>
  51. <Cell col="6" style="background:EXPR(gridTodayExpr(date6));background2:EXPR(gridTodayExpr(date6));color:EXPR(gridTodayFontColor(date6));color2:EXPR(gridTodayFontColor(date6));font:EXPR(gridTodayFontStyle(date6));" text="bind:day6"/>
  52. </Band>
  53. </Format>
  54. </Formats>
  55. </Grid>
  56. <Div id="dv_header" taborder="5" scrollbars="none" class="dv_calMonth" position="absolute 0 0 199 28">
  57. <Layouts>
  58. <Layout>
  59. <Static id="st_year" text="2012." class="st_calYear" position="absolute 40 4 106 24" style="background:transparent; " _term="" onclick="pd_calendar_dv_header_st_year_onclick"/>
  60. <Button id="bt_previousMonth" taborder="16" class="bn_termcalPrev" position="absolute 24 5 42 23" _term="" _auth="" onclick="pd_calendar_dv_header_bt_previousMonth_onclick"/>
  61. <Button id="bt_nextMonth" taborder="17" class="bn_termcalNext" position="absolute 157 5 175 23" _term="" _auth="" onclick="pd_calendar_dv_header_bt_nextMonth_onclick"/>
  62. <Button id="bt_previousYear" taborder="18" class="bn_termcalFirst" position="absolute 4 5 22 23" _term="" _auth="" onclick="pd_calendar_dv_header_bt_previousYear_onclick"/>
  63. <Button id="bt_nextYear" taborder="19" class="bn_termcalLast" position="absolute 177 5 195 23" _term="" _auth="" onclick="pd_calendar_dv_header_bt_nextYear_onclick"/>
  64. <Static id="st_month" text="01" class="st_calMonth" position="absolute 106 4 154 24" style="background:transparent; " _term="" onclick="pd_calendar_dv_header_st_month_onclick"/>
  65. </Layout>
  66. </Layouts>
  67. </Div>
  68. <nuCombo id="cb_year" taborder="8" position="absolute 0 192 99 220" innerdataset="@ds_year" codecolumn="code" datacolumn="value" visible="false" onitemchanged="pd_calendar_cb_year_onitemchanged"/>
  69. <nuCombo id="cb_month" taborder="9" position="absolute 99 192 198 220" innerdataset="@ds_month" codecolumn="code" datacolumn="value" visible="false" onitemchanged="pd_calendar_cb_month_onitemchanged"/>
  70. <nuStatic id="st_bg" onclick="pd_calendar_st_bg_onclick" class="st_boxTilT" position="absolute 0 191 199 219" style="background:#ffffffff;border:1 solid #94a5b0ff ;" _term="" _type=""/>
  71. <!--
  72. <Button id="btn_today" taborder="10" text="오늘" onclick="pd_calendar_btn_today_onclick" class="bn_sht3mo" position="absolute 4 195 48 215" style="background:URL('theme://images/btn_leftdepartmo_P.png') stretch 3,3;"/>
  73. -->
  74. <Button id="btn_today" taborder="10" text="오늘" onclick="pd_calendar_btn_today_onclick" class="btn2" position="absolute 4 195 48 215"/>
  75. </Layout>
  76. </Layouts>
  77. </PopupDiv>
  78. <Div id="dv_calendar" taborder="1" position="absolute 0 0 95 20" anchor="all">
  79. <Layouts>
  80. <Layout>
  81. <MaskEdit id="txtDate" taborder="0" position="absolute 0 0 77 20" type="string" style="background:transparent;" onkeydown="dv_calendar_onkeydown" onkillfocus="dv_calendar_onkillfocus" autoselect="true" ontextchange="dv_calendar_txtDate_ontextchange" maskchar=" " anchor="all"/>
  82. <Button id="bt_calendar" taborder="1" class="bn_Cal_schdule" _auth="R" _term="btn_search" onclick="dv_calendar_bt_calendar_onclick" tabstop="false" anchor="top right" position="absolute 78 3 92 17" positiontype="position"/>
  83. </Layout>
  84. </Layouts>
  85. </Div>
  86. </Layout>
  87. </Layouts>
  88. <Objects>
  89. <Dataset id="ds_calendar" preload="true" firefirstcount="0" firenextcount="0" useclientlayout="false" updatecontrol="true" enableevent="true">
  90. <ColumnInfo>
  91. <Column type="STRING" size="256" id="day0"/>
  92. <Column type="STRING" size="256" id="day1"/>
  93. <Column type="STRING" size="256" id="day2"/>
  94. <Column type="STRING" size="256" id="day3"/>
  95. <Column type="STRING" size="256" id="day4"/>
  96. <Column type="STRING" size="256" id="day5"/>
  97. <Column type="STRING" size="256" id="day6"/>
  98. <Column id="date0" type="STRING" size="256"/>
  99. <Column id="date1" type="STRING" size="256"/>
  100. <Column id="date2" type="STRING" size="256"/>
  101. <Column id="date3" type="STRING" size="256"/>
  102. <Column id="date4" type="STRING" size="256"/>
  103. <Column id="date5" type="STRING" size="256"/>
  104. <Column id="date6" type="STRING" size="256"/>
  105. </ColumnInfo>
  106. <Rows/>
  107. </Dataset>
  108. <Dataset id="ds_month" firefirstcount="0" firenextcount="0" useclientlayout="false" updatecontrol="true" enableevent="true" loadkeymode="keep" loadfiltermode="keep" reversesubsum="false">
  109. <ColumnInfo>
  110. <Column id="code" type="STRING" size="256"/>
  111. <Column id="value" type="STRING" size="256"/>
  112. </ColumnInfo>
  113. <Rows>
  114. <Row>
  115. <Col id="code">0</Col>
  116. <Col id="value">01</Col>
  117. </Row>
  118. <Row>
  119. <Col id="code">1</Col>
  120. <Col id="value">02</Col>
  121. </Row>
  122. <Row>
  123. <Col id="code">2</Col>
  124. <Col id="value">03</Col>
  125. </Row>
  126. <Row>
  127. <Col id="code">3</Col>
  128. <Col id="value">04</Col>
  129. </Row>
  130. <Row>
  131. <Col id="code">4</Col>
  132. <Col id="value">05</Col>
  133. </Row>
  134. <Row>
  135. <Col id="code">5</Col>
  136. <Col id="value">06</Col>
  137. </Row>
  138. <Row>
  139. <Col id="code">6</Col>
  140. <Col id="value">07</Col>
  141. </Row>
  142. <Row>
  143. <Col id="code">7</Col>
  144. <Col id="value">08</Col>
  145. </Row>
  146. <Row>
  147. <Col id="code">8</Col>
  148. <Col id="value">09</Col>
  149. </Row>
  150. <Row>
  151. <Col id="code">9</Col>
  152. <Col id="value">10</Col>
  153. </Row>
  154. <Row>
  155. <Col id="code">10</Col>
  156. <Col id="value">11</Col>
  157. </Row>
  158. <Row>
  159. <Col id="code">11</Col>
  160. <Col id="value">12</Col>
  161. </Row>
  162. </Rows>
  163. </Dataset>
  164. <Dataset id="ds_year" firefirstcount="0" firenextcount="0" useclientlayout="false" updatecontrol="true" enableevent="true" loadkeymode="keep" loadfiltermode="keep" reversesubsum="false">
  165. <ColumnInfo>
  166. <Column id="code" type="STRING" size="256"/>
  167. <Column id="value" type="STRING" size="256"/>
  168. </ColumnInfo>
  169. </Dataset>
  170. <Dataset id="ds_holiday" firefirstcount="0" firenextcount="0" useclientlayout="false" updatecontrol="true" enableevent="true" loadkeymode="keep" loadfiltermode="keep" reversesubsum="false">
  171. <ColumnInfo>
  172. <Column id="date" type="DATE" size="256"/>
  173. <Column id="name" type="STRING" size="256"/>
  174. </ColumnInfo>
  175. </Dataset>
  176. </Objects>
  177. <Bind/>
  178. <Script type="xscript4.0"><![CDATA[/**
  179. * Program ID :
  180. * Program Name : nU2.0 기록 서식에서만 사용하는 calendar control
  181. * Author : 이봉욱
  182. * Created On : 2016.04.27
  183. * 화면 설명 :
  184. * 관련 화면/서비스 :
  185. * 관련테이블 :
  186. * 수정이력 :
  187. ************************************************************************************************
  188. * 수정일 이 름 사유
  189. ************************************************************************************************
  190. * 2016-04-27 이봉욱 최초 작성(SSZZC00100_nuCalendar를 복사하여 기록 / 서식에서만 사용하도록 기능 수정)
  191. ************************************************************************************************
  192. */
  193. /************************************************************************************************
  194. * 공통 라이브러리 INCLUDE 영역
  195. ************************************************************************************************/
  196. //include "sz_syscommonweb::dateHelper.xjs";
  197. //include "sz_syscommonweb::syscommon.xjs";
  198. String.prototype.getMedirecToDate = getMedirecToDate;
  199. /************************************************************************************************
  200. * UserEvent
  201. ************************************************************************************************/
  202. var ontextchanged = new UserEvent;
  203. /************************************************************************************************
  204. * FORM 변수 선언 영역
  205. ************************************************************************************************/
  206. var yyyymm;
  207. var arrHolList = new Array("0101","0301","0505","0606","0815","1003","1009","1225");
  208. var isChanged = false;
  209. var _move_date;
  210. var gLocale = "ko_KR";
  211. var _required;
  212. var _msgkey;
  213. /*public*/
  214. //var _format = "YYYY-MM-DD";
  215. //var _maskinclude = "false";
  216. /*private*/
  217. var gFormat; //실제포맷
  218. var gValidateFormat; //밸리데이션용포맷
  219. var gArrFormatIndx = []; //포맷에서 '#'값의 위치를 array로 저장
  220. /************************************************************************************************
  221. * FORM EVENT 영역
  222. ************************************************************************************************/
  223. function basicCalendar_onload(obj:Form, e:LoadEventInfo)
  224. {
  225. var nYear, nMonth;
  226. var startYear = 10;
  227. var midYear = 1;
  228. //휴일정보 세팅 추가 2015.10.19 by 이봉욱
  229. try{
  230. ds_holiday.copyData(gds_holidayinfo);
  231. } catch(e){
  232. trace("SSZZC00101 :: Exception( ds_holiday copy error )");
  233. }
  234. yyyymm = getCurrentDate().substr(0,6);
  235. // 달력그리기
  236. drawCalendar(ds_calendar, pd_calendar.gd_calendar, yyyymm);
  237. //년도 콤보박스 작성
  238. nYear = parseInt(getCurrentDate().substr(0,4));
  239. nMonth = pd_calendar.dv_header.st_month.text.substr(0, 2);
  240. for(i=0; i<=10; i++)
  241. {
  242. ds_year.addRow();
  243. ds_year.setColumn(i, "code", i);
  244. ds_year.setColumn(i, "value", nYear-startYear);
  245. startYear = startYear - 1;
  246. }
  247. for(i=11; i<=20; i++)
  248. {
  249. ds_year.addRow();
  250. ds_year.setColumn(i, "code", i);
  251. ds_year.setColumn(i, "value", nYear+midYear);
  252. midYear = midYear + 1;
  253. }
  254. //Combo로 해당년도 초기설정
  255. pd_calendar.cb_year.text = nYear;
  256. //Combo로 해당월 초기설정
  257. pd_calendar.cb_month.text = nMonth;
  258. dv_calendar.txtDate.style.align = this.style.align;
  259. dv_calendar.txtDate.style.color = this.style.color;
  260. dv_calendar.txtDate.style.font = this.style.font;
  261. if(this.class == "ed_mask_medirec_est"){
  262. dv_calendar.class = "ed_mask_medirec_est";
  263. dv_calendar.txtDate.class = "ed_mask_medirec_est2";
  264. dv_calendar.txtDate.style.background = "transparent URL('IMG::default/img_edt_medirec_est.png') no-repeat";
  265. }
  266. else if(this.class == "ed_mask_medirec"){
  267. dv_calendar.class = "ed_mask_medirec_est";
  268. dv_calendar.txtDate.class = "ed_mask_medirec_est2";
  269. }
  270. gFormat = _format.replace(/Y|M|D/g, "#");
  271. gValidateFormat = _format.replace(/[^Y|M|D]/g, "");
  272. for(var i = 0 ; i < gFormat.length; i++){
  273. if( gFormat.charAt(i) == "#")
  274. gArrFormatIndx.push(i);
  275. }
  276. if(_setcurdate == "true")
  277. setToday();
  278. //달력버튼 위치 설정
  279. dv_calendar.bt_calendar.position.y = (dv_calendar.position.height - dv_calendar.bt_calendar.position.height)/2;
  280. }
  281. /************************************************************************************************
  282. * FORM 공통 FUNCTION 영역
  283. ************************************************************************************************/
  284. /**
  285. * @---------------------------------------------------
  286. * @desc : 요일구하기
  287. * @param : sValue - yyyyMMdd형태의 날짜 ( 예 : "20121122" )
  288. * @return : 성공 - 요일(0=일요일, ~ , 6=토요일)
  289. 실패 - -1
  290. * @---------------------------------------------------
  291. */
  292. function getDayLocal(sDate)
  293. {
  294. if( isNull(sDate) ) return -1;
  295. var oDate = new Date(date2XP(sDate));
  296. return oDate.getDay();
  297. }
  298. /**
  299. * @---------------------------------------------------
  300. * @desc : Date기본 Format( = yyyyMMdd[hhmiss])를 XP Date기본 Format( = yyyy-MM-dd[ hh:mi:ss] ) 으로 바꾸어줌
  301. * @param : sValue - yyyyMMdd[hhmiss]형태의 일자 ( 예 : "20121122" 또는 "20121122010203")
  302. * @return : 성공 - XP Date기본 Format( 예 : "2012-11-22" 또는 "2012-11-22 01:02:03")
  303. 실패 - ""
  304. * @---------------------------------------------------
  305. */
  306. function date2XP(sDate)
  307. {
  308. var ret;
  309. if( isNull(sDate) ) return "";
  310. if( sDate.length != 8 && sDate.length != 14 )
  311. return "";
  312. ret = sDate.substr(0, 4) + "-" + sDate.substr(4, 2)+ "-" + sDate.substr(6, 2);
  313. if( sDate.length > 8 )
  314. ret += " " + sDate.substr(8,2) + ":" + sDate.substr(10,2) + ":" + sDate.substr(12,2);
  315. return ret;
  316. }
  317. /**
  318. * @---------------------------------------------------
  319. * @desc : 해당월의 마지막 날짜를 숫자로 구하기
  320. * @param : sValue - yyyyMMdd형태의 날짜 ( 예 : "20121122" )
  321. * @return : 성공 - 마지막 날짜 숫자값 ( 예 : 30 )
  322. 실패 - -1
  323. * @---------------------------------------------------
  324. */
  325. function lastDateNum(sDate)
  326. {
  327. var nMonth, nLastDate;
  328. if( isNull(sDate) ) return -1;
  329. nMonth = parseInt(sDate.substr(4,2), 10);
  330. if( nMonth == 1 || nMonth == 3 || nMonth == 5 || nMonth == 7 || nMonth == 8 || nMonth == 10 || nMonth == 12 )
  331. nLastDate = 31;
  332. else if( nMonth == 2 )
  333. {
  334. if( isLeapYear(sDate) == true )
  335. nLastDate = 29;
  336. else
  337. nLastDate = 28;
  338. }
  339. else
  340. nLastDate = 30;
  341. return nLastDate;
  342. }
  343. /**
  344. * @---------------------------------------------------
  345. * @desc : 입력된 날자에 nOffset 으로 지정된 만큼의 월을 증감
  346. * @param : sDate - 날짜 ( 예 : "20121122" )
  347. nOffset - 월 증감값 ( 예 : 1 또는 -1 )
  348. * @return : 성공 - yyyyMMdd형태의 증감된 날짜 ( 예 : "20121202" 또는 "20121022" )
  349. 실패 - ""
  350. * @---------------------------------------------------
  351. */
  352. function addMonth(sDate, nOffsetYear, nOffsetMonth)
  353. {
  354. if( isNull(sDate) || isNull(nOffsetYear) || isNull(nOffsetMonth)) return "";
  355. var nYear = parseInt(sDate.substr(0, 4))+nOffsetYear;
  356. var nMonth = parseInt(sDate.substr(4, 2))+nOffsetMonth;
  357. var nDate = parseInt(sDate.substr(6, 2));
  358. var nLastDate, sRet;
  359. sRet = makeDate(nYear, nMonth, 1);
  360. nLastDate = lastDateNum(sRet);
  361. sRet = sRet.substr(0,6);
  362. if( nDate > nLastDate )
  363. sRet += nLastDate.toString();
  364. else
  365. sRet += nDate.toString();
  366. return sRet;
  367. }
  368. /**
  369. * @---------------------------------------------------
  370. * @desc : 숫자로 된 년, 월, 일을 yyyyMMdd형의 문자열 날짜로 만든다.
  371. * @param : nYear - 년도 ( 예 : 2012 )
  372. nMonth - 월 ( 예 : 11 )
  373. nDate - 일 ( 예 : 22 )
  374. * @return : 성공 - yyyyMMdd형태의 날짜 ( 예 : "20121122" )
  375. 실패 - ""
  376. * @---------------------------------------------------
  377. */
  378. function makeDate(nYear, nMonth, nDate)
  379. {
  380. if( isNull(nYear) || isNull(nMonth) || isNull(nDate) ) return "";
  381. var objDate = new Date(nYear, nMonth-1, nDate);
  382. var sYear = objDate.getFullYear().toString();
  383. var sMonth = getStringRight("0" + (objDate.getMonth() + 1), 2);
  384. var sDate = getStringRight("0" + objDate.getDate(), 2);
  385. return sYear + sMonth + sDate;
  386. }
  387. /**
  388. * @---------------------------------------------------
  389. * @desc : 윤년여부 확인
  390. * @param : sDate - yyyyMMdd형태의 날짜 ( 예 : "20121122" )
  391. * @return : true - sDate가 윤년인 경우
  392. false - sDate가 윤년이 아닌 경우와 sDate가 입력되지 않은 경우
  393. * @---------------------------------------------------
  394. */
  395. function isLeapYear(sDate)
  396. {
  397. var ret;
  398. var nY;
  399. if( isNull(sDate) ) return false;
  400. nY = parseInt(sDate.substring(0,4), 10);
  401. if ((nY % 4) == 0)
  402. {
  403. if ((nY % 100) != 0 || (nY % 400) == 0)
  404. ret = true;
  405. else
  406. ret = false;
  407. }
  408. else
  409. ret = false;
  410. return ret;
  411. }
  412. /**
  413. * @---------------------------------------------------
  414. * @desc : 문자열의 오른쪽부분을 지정한 길이만큼 Return
  415. * @param : strString - 오른부분을 얻어올 원본 문자열
  416. nSize - 얻어올 크기. [Default Value = 0]
  417. * @return : rtnVal - 오른쪽 부분이 얻어진 문자열
  418. * @---------------------------------------------------
  419. */
  420. function getStringRight(strString, nSize)
  421. {
  422. var nStart = String(strString).length;
  423. var nEnd = Number(nStart) - Number(nSize);
  424. var rtnVal = strString.substring(nStart, nEnd);
  425. return rtnVal;
  426. }
  427. function setCalendarHeaderPosition() {
  428. // 연도
  429. var strYearLeft = 40;
  430. var strYearRight = 106;
  431. var strYearTop = 2;
  432. var strYearBottom = 22;
  433. // 월
  434. var strMonthLeft = 106;
  435. var strMonthRight = 154;
  436. var strMonthTop = 2;
  437. var strMonthBottom = 22;
  438. if (gLocale != "ko_KR")
  439. {
  440. // 연도
  441. pd_calendar.dv_header.st_year.position.left = strMonthLeft - 9;
  442. pd_calendar.dv_header.st_year.position.right = strMonthRight;
  443. pd_calendar.dv_header.st_year.position.top = strMonthTop;
  444. pd_calendar.dv_header.st_year.position.bottom = strMonthBottom;
  445. pd_calendar.dv_header.st_year.style.align.halign = "left";
  446. // 월
  447. pd_calendar.dv_header.st_month.position.left = strYearLeft;
  448. pd_calendar.dv_header.st_month.position.right = strYearRight - 9;
  449. pd_calendar.dv_header.st_month.position.top = strYearTop;
  450. pd_calendar.dv_header.st_month.position.bottom = strYearBottom;
  451. pd_calendar.dv_header.st_month.style.align.halign = "right";
  452. }
  453. }
  454. /**
  455. * @---------------------------------------------------
  456. * @desc : 달력 그리기
  457. * @param : ds_calendar_obj - 데이터셋 오브젝트
  458. grid_obj - 그리드 오브젝트
  459. yyyymm
  460. * @---------------------------------------------------
  461. */
  462. function drawCalendar(ds_calendar_obj, grid_obj, yyyymm)
  463. {
  464. var day, row, iStartWeekNum, iLastDay;
  465. var yyyymm = yyyymm.substr(0 ,6);
  466. setCalendarHeaderPosition();
  467. grid_obj._yyyymm = yyyymm;
  468. // 년도 설정
  469. if (gLocale == "ko_KR") //다국어설정
  470. pd_calendar.dv_header.st_year.text = yyyymm.substr(0, 4) + ".";
  471. else
  472. pd_calendar.dv_header.st_year.text = yyyymm.substr(0, 4);
  473. pd_calendar.cb_year.text = yyyymm.substr(0, 4);
  474. // 월 설정
  475. if (gLocale == "ko_KR") //다국어설정
  476. pd_calendar.dv_header.st_month.text = yyyymm.substr(4, 2);
  477. else if (gLocale == "en_US")
  478. pd_calendar.dv_header.st_month.text = yyyymm.substr(4, 2) + ".";
  479. else if (gLocale == "zh_CN")
  480. pd_calendar.dv_header.st_month.text = yyyymm.substr(4, 2) + "月";
  481. pd_calendar.cb_month.text = yyyymm.substr(4, 2);
  482. // Dataset 만들기
  483. ds_calendar_obj.clearData();
  484. iStartWeekNum = getDayLocal(yyyymm+"01");
  485. iLastDay = lastDateNum(yyyymm+"01");
  486. iLastWeekNum = getDayLocal(yyyymm+iLastDay) + 1; //마지막 날짜 다음날로 와야 됨
  487. row = ds_calendar_obj.addRow();
  488. for( var i = 1, day = iStartWeekNum ; i <= iLastDay ; i++ )
  489. {
  490. // 달력 Data설정
  491. ds_calendar_obj.setColumn(row, "day" +day , i);
  492. ds_calendar_obj.setColumn(row, "date"+day , yyyymm + String(i).padLeft(2, '0'));
  493. // 달력 Data Row추가
  494. day = (day+1)%7;
  495. if( day == 0 && i != iLastDay )
  496. row = ds_calendar_obj.addRow();
  497. }
  498. //------------------------------------------------------------------------
  499. //0.비어있는값을 채우자.
  500. if( ds_calendar_obj.rowcount > 0 ) {
  501. //1. 첫줄에 비어있는값을 전달로 채움
  502. var sPrev_yyyymm = addMonth(yyyymm + "01", 0, -1).substr(0, 6);
  503. var iPrevDay = lastDateNum(sPrev_yyyymm + "01");
  504. for( var i=iStartWeekNum-1; i>=0; i-- ) {
  505. ds_calendar_obj.setColumn(0, "day" +i, iPrevDay);
  506. ds_calendar_obj.setColumn(0, "date"+i, sPrev_yyyymm + String( iPrevDay ).padLeft(2, '0'));
  507. iPrevDay--;
  508. }
  509. //2. 5번째줄에서 끝나면 비어있는 6번째줄을 다음달로 채우자.
  510. var sNext_yyyymm = addMonth(yyyymm + "01", 0, 1).substr(0, 6);
  511. var iNextDay = 1;
  512. if( ds_calendar_obj.rowcount == 5 ) {
  513. for( var i=iLastWeekNum; i<=6; i++ ){
  514. ds_calendar_obj.setColumn(row, "day" +i, iNextDay);
  515. ds_calendar_obj.setColumn(row, "date"+i, sNext_yyyymm + String( iNextDay ).padLeft(2, '0'));
  516. iNextDay++;
  517. }
  518. //5번째줄을 다채우면 6번째 줄을 만들자.
  519. row = ds_calendar_obj.addRow();
  520. iLastWeekNum = 0; //6번째줄은 처음부터 다채움
  521. }
  522. //3. 6번째줄에서 끝나면 비어있는 공간을 다음달로 채우자.
  523. if( ds_calendar_obj.rowcount == 6 ) {
  524. for( var i=iLastWeekNum; i<=6; i++ ){
  525. ds_calendar_obj.setColumn(row, "day" +i, iNextDay);
  526. ds_calendar_obj.setColumn(row, "date"+i, sNext_yyyymm + String( iNextDay ).padLeft(2, '0'));
  527. iNextDay++;
  528. }
  529. }
  530. }
  531. }
  532. /**
  533. * @---------------------------------------------------
  534. * @desc : Calendar MM-dd형태로 변경함
  535. * @param :
  536. * @---------------------------------------------------
  537. */
  538. function setMaskMMdd() {
  539. dv_calendar.txtDate.position.width = "60";
  540. dv_calendar.bt_calendar.position.x = dv_calendar.bt_calendar.position.x - 36;
  541. dv_calendar.txtDate.mask = "##-##";
  542. }
  543. /**
  544. * @---------------------------------------------------
  545. * @desc : Grid Expression - 헤더다국어처리(한국어,중국어,영어)
  546. * @param : sDate - 요일
  547. * @return : sDate - 해당국가 요일
  548. * @---------------------------------------------------
  549. */
  550. function gridHeaderDay(sDate)
  551. {
  552. switch (sDate) {
  553. case "일":
  554. if (gLocale == "zh_CN")
  555. sDate = "天";
  556. else if (gLocale == "en_US")
  557. sDate = "sun";
  558. break;
  559. case "월":
  560. if (gLocale == "zh_CN")
  561. sDate = "一";
  562. else if (gLocale == "en_US")
  563. sDate = "mon";
  564. break;
  565. case "화":
  566. if (gLocale == "zh_CN")
  567. sDate = "二";
  568. else if (gLocale == "en_US")
  569. sDate = "tue";
  570. break;
  571. case "수":
  572. if (gLocale == "zh_CN")
  573. sDate = "三";
  574. else if (gLocale == "en_US")
  575. sDate = "wed";
  576. break;
  577. case "목":
  578. if (gLocale == "zh_CN")
  579. sDate = "四";
  580. else if (gLocale == "en_US")
  581. sDate = "thu";
  582. break;
  583. case "금":
  584. if (gLocale == "zh_CN")
  585. sDate = "五";
  586. else if (gLocale == "en_US")
  587. sDate = "fri";
  588. break;
  589. case "토":
  590. if (gLocale == "zh_CN")
  591. sDate = "六";
  592. else if (gLocale == "en_US")
  593. sDate = "sat";
  594. break;
  595. }
  596. return sDate;
  597. }
  598. /**
  599. * @---------------------------------------------------
  600. * @desc : Grid Expression - 날짜배경색지정
  601. * @param : sDate - 요일
  602. * @return : 배경이미지경로명
  603. * @---------------------------------------------------
  604. */
  605. function gridTodayExpr(sDate)
  606. {
  607. var yyyymmdd = String(sDate);
  608. //선택된 셀 표시
  609. if ( !isNull(getDate()) && getDate().replace("-","") == yyyymmdd )
  610. return "url('theme://images/img_termCalffBg.png')";
  611. //오늘날짜 설정
  612. if( yyyymmdd == getCurrentDate() )
  613. return "";//"url('theme://images/img_termcalBg.png')";
  614. }
  615. /**
  616. * @---------------------------------------------------
  617. * @desc : Grid Expression - 날짜폰트색지정
  618. * @param : sDate - 요일
  619. colId
  620. * @return : 폰트색
  621. * @---------------------------------------------------
  622. */
  623. function gridTodayFontColor(sDate,colId)
  624. {
  625. var yyyymmdd = String(sDate);
  626. var flgHoliday = false;
  627. //trace( sDate + " " + colId );
  628. //고정공휴일체크(신정,삼일절,어린이날,현충일,광복절,개천절,크리스마스)
  629. for (i=0; i<arrHolList.length; i++)
  630. {
  631. //trace(arrHolList[i]);
  632. if (yyyymmdd.substr(4,4) == arrHolList[i])
  633. flgHoliday = true;
  634. }
  635. //변동공휴일체크(설날,석가탄신일,추석)
  636. for (j=0; j<ds_holiday.rowcount; j++)
  637. {
  638. //trace(ds_holiday.getColumn(j, "date"));
  639. if ( yyyymmdd == ds_holiday.getColumn(j, "date") )
  640. flgHoliday = true;
  641. }
  642. //현재 속해있는 달이 아닐때
  643. if( yyyymmdd.substr(0, 6) != pd_calendar.gd_calendar._yyyymm )
  644. return "#b0b0b0";
  645. //일요일이거나 공휴일일 경우
  646. else if( (colId == "col0") || (flgHoliday == true) )
  647. return "#df5e00";
  648. //오늘일 경우
  649. else if( yyyymmdd == getCurrentDate() )
  650. return "#003399";
  651. else if( yyyymmdd == _move_date )
  652. return "#ffffff";
  653. //선택된 셀 표시
  654. else if( !isNull(getDate()) && yyyymmdd == getDate().replace("-","") )
  655. return "#ffffff";
  656. else
  657. return "#616161";
  658. }
  659. /**
  660. * @---------------------------------------------------
  661. * @desc : Grid Expression - 날짜폰트스타일지정
  662. * @param : sDate - 요일
  663. * @return : 폰트스타일
  664. * @---------------------------------------------------
  665. */
  666. function gridTodayFontStyle(sDate)
  667. {
  668. var yyyymmdd = String(sDate);
  669. if(yyyymmdd == getCurrentDate())
  670. return "Tahoma,8,bold";
  671. //선택된 셀 표시
  672. if ( !isNull(getDate()) && getDate().replace("-","") == yyyymmdd )
  673. return "Tahoma,8,bold";
  674. }
  675. /**
  676. * @desc 값이 변경될때 마다 함수를 호출한다.
  677. */
  678. function callBindFunction() {
  679. //trace("sFunctionName:" + sFunctionName + ":" + isChanged);
  680. /*
  681. if( !isNull(gFunctionName) && isChanged ) {
  682. isChanged = false;
  683. var sDate = getDate();
  684. try {
  685. eval(gFunctionName + "(" +sDate+ ");");
  686. } catch(e) {
  687. }
  688. }
  689. */
  690. if( isChanged ){
  691. //미래일자 설정 금지 항목을
  692. if(_deniedfuturedate == "true"){
  693. if( dv_calendar.txtDate.value.length == gValidateFormat.length ) { //입력이 완결되었을때
  694. var inptDt = dv_calendar.txtDate.value.getMedirecToDate(gValidateFormat);
  695. var curDt = new Date();
  696. if( inptDt > curDt ){
  697. //setToday();
  698. //dv_calendar.txtDate.setCaretPos(-1);
  699. alert("미래일자로 입력되었습니다. 다시 한번 확인하시기 바랍니다.");
  700. }
  701. }
  702. }
  703. isChanged = false;
  704. var e = new EventInfo;
  705. this.ontextchanged.fireEvent(this, e);
  706. }
  707. }
  708. function replaceDate( sVal ) {
  709. if( isNull(sVal) ) sVal = "";
  710. sVal = sVal.replace("-", "");
  711. return sVal;
  712. }
  713. /**
  714. * 날짜 선택 후 처리
  715. */
  716. function fn_setDate(sSelectedDate)
  717. {
  718. if(!isNull(sSelectedDate)){
  719. if( dv_calendar.txtDate.value != sSelectedDate ) isChanged = true;
  720. //선택한 값 넣어두기
  721. dv_calendar.txtDate.mask = gFormat;
  722. dv_calendar.txtDate.value = sSelectedDate.getMedirecToDate().getDateFormat(gValidateFormat);;
  723. pd_calendar.gd_calendar._selecteddate = sSelectedDate;
  724. callBindFunction();
  725. }
  726. //처리되고 난 뒤에 닫자
  727. pd_calendar.cb_year.visible = false;
  728. pd_calendar.cb_month.visible = false;
  729. pd_calendar.closePopup();
  730. }
  731. /**
  732. * @---------------------------------------------------
  733. * @desc : 사용자 페이지에서 날짜 취득(nUCalendar 컨트롤의 함수 수정)
  734. * @return : 날짜
  735. * @---------------------------------------------------
  736. */
  737. function getDate() {
  738. //return isNull(dv_calendar.txtDate.value)?"": String(dv_calendar.txtDate.value).replace(/-/g, "");
  739. var ret = "";
  740. if( _maskinclude == "true" ) {
  741. ret = dv_calendar.txtDate.text;
  742. } else {
  743. if(dv_calendar.txtDate.text.length > 0){
  744. var sMask = dv_calendar.txtDate.mask;
  745. var inptFormat = _format.substr(0, sMask.length);
  746. var cntMaskChar = sMask.match(/#/g).length ;
  747. //포맷순서를 YMD순서로 변경
  748. var retFormat = gValidateFormat.substr(0, cntMaskChar).replace(/([^Y]*)(Y*)([^Y]*)/, "$2$1$3")
  749. .replace(/([^D]*)(D*)([^D]*)/, "$1$3$2");
  750. ret = dv_calendar.txtDate.text.getMedirecToDate(inptFormat).getDateFormat(retFormat).replace(/\D/g, "");
  751. }
  752. }
  753. return ret;
  754. }
  755. /**
  756. * @---------------------------------------------------
  757. * @desc : 사용자 페이지에서 날짜 설정(nUCalendar 컨트롤의 함수 수정)
  758. * @param : sDateVal - 날짜
  759. * @---------------------------------------------------
  760. */
  761. function setDate( value ) {
  762. /*
  763. 1.0데이터에 maskinclude의 값과 다른 데이터그 들어가는 경우가
  764. 종종 있어서 maskinclude값이 아닌 그냥 데이터만 가지고 데이터를 저장한다.
  765. */
  766. var isMask = (/\D/.exec(value) != null);
  767. value = value.replace(/\D/g, "");
  768. if(!isMask){
  769. var cntValue = value.length;
  770. var setFormat = gValidateFormat.substr(0, cntValue);
  771. //포맷순서를 YMD순서로 변경
  772. var inptFormat = setFormat.replace(/([^Y]*)(Y*)([^Y]*)/, "$2$1$3")
  773. .replace(/([^D]*)(D*)([^D]*)/, "$1$3$2");
  774. if(setFormat != inptFormat)
  775. value = value.getMedirecToDate(inptFormat).getDateFormat(setFormat);
  776. }
  777. fnSetValue(value);
  778. }
  779. function setToday(){
  780. fn_setDate(getCurrentDate());
  781. }
  782. function fnSetValue(value){
  783. var pos = value.length;
  784. if( gArrFormatIndx.length <= pos ) {
  785. dv_calendar.txtDate.mask = gFormat;
  786. } else {
  787. var indx = gArrFormatIndx[pos - 1] + 1;
  788. //사이값이 '-'나 '/'경우 다음글자가 나타나야 나타나고..
  789. //그 외의 값(년월일 같은)이면 입력과 동시에 나타난다.
  790. var nextMaskChar = gFormat.substr(indx, 1);
  791. if( /[^#|\-|\/]/.test(nextMaskChar) )
  792. indx = gArrFormatIndx[pos];
  793. dv_calendar.txtDate.mask = gFormat.substr(0, indx).replace(/\s$/, "");
  794. }
  795. dv_calendar.txtDate.value = value;
  796. callBindFunction();
  797. }
  798. /************************************************************************************************
  799. * CONTROL EVENT 영역
  800. ************************************************************************************************/
  801. /**
  802. * @---------------------------------------------------
  803. * @desc : dv_calendar_bt_calendar_onclick이벤트(팝업표시)
  804. * @param : obj:Button
  805. e:ClickEventInfo
  806. * @---------------------------------------------------
  807. */
  808. function dv_calendar_bt_calendar_onclick(obj:Button, e:ClickEventInfo)
  809. {
  810. //달력 입력일자 기준으로 초기화-----------------------------------
  811. var sMask = dv_calendar.txtDate.mask;
  812. var sDateVal;
  813. if( isNull(sMask) ){
  814. sDateVal = getCurrentDate().getMedirecToDate().getDateFormat('YYYYMM');
  815. } else {
  816. var inptFormat = _format.substr(0, sMask.length);
  817. var cntMaskChar = sMask.match(/#/g).length;
  818. sDateVal = dv_calendar.txtDate.text.getMedirecToDate(inptFormat).getDateFormat('YYYYMM');
  819. }
  820. //var sYYYYMM = "";
  821. /*
  822. if( !isNull(sDateVal) && sDateVal.length == 8 ) {
  823. sYYYYMM = sDateVal.substr(0, 6);
  824. } else if( !isNull(sDateVal) && sDateVal.length == 4 ) {
  825. sYYYYMM = getCurrentDate().substr(0,4) + sDateVal.substr(0, 2);
  826. } else {
  827. sYYYYMM = getCurrentDate().substr(0,6);
  828. }
  829. */
  830. drawCalendar(ds_calendar, pd_calendar.gd_calendar, sDateVal);
  831. //달력 입력일자 기준으로 초기화-----------------------------------
  832. var nX = system.clientToScreenX(dv_calendar.txtDate,0);
  833. var nY = system.clientToScreenY(dv_calendar.txtDate,dv_calendar.txtDate.position.height);
  834. pd_calendar.trackPopup(nX,nY);
  835. }
  836. /**
  837. * @---------------------------------------------------
  838. * @desc : pd_calendar_dv_header_bt_previousYear_onclick이벤트(◀◀)
  839. * @param : obj:Button
  840. e:ClickEventInfo
  841. * @---------------------------------------------------
  842. */
  843. function pd_calendar_dv_header_bt_previousYear_onclick(obj:Button, e:ClickEventInfo)
  844. {
  845. yyyymm = pd_calendar.gd_calendar._yyyymm;
  846. var add_date = addMonth(yyyymm+"01", -1 ,0);
  847. yyyymm = add_date.substr(0, 6);
  848. drawCalendar(ds_calendar, pd_calendar.gd_calendar, yyyymm);
  849. }
  850. /**
  851. * @---------------------------------------------------
  852. * @desc : pd_calendar_dv_header_bt_previousMonth_onclick이벤트(◀)
  853. * @param : obj:Button
  854. e:ClickEventInfo
  855. * @---------------------------------------------------
  856. */
  857. function pd_calendar_dv_header_bt_previousMonth_onclick(obj:Button, e:ClickEventInfo)
  858. {
  859. yyyymm = pd_calendar.gd_calendar._yyyymm;
  860. var add_date = addMonth(yyyymm+"01", 0, -1);
  861. yyyymm = add_date.substr(0, 6);
  862. drawCalendar(ds_calendar, pd_calendar.gd_calendar, yyyymm);
  863. }
  864. /**
  865. * @---------------------------------------------------
  866. * @desc : pd_calendar_dv_header_bt_nextMonth_onclick이벤트(▶)
  867. * @param : obj:Button
  868. e:ClickEventInfo
  869. * @---------------------------------------------------
  870. */
  871. function pd_calendar_dv_header_bt_nextMonth_onclick(obj:Button, e:ClickEventInfo)
  872. {
  873. yyyymm = pd_calendar.gd_calendar._yyyymm;
  874. var add_date = addMonth(yyyymm+"01", 0, 1);
  875. yyyymm = add_date.substr(0, 6);
  876. drawCalendar(ds_calendar, pd_calendar.gd_calendar, yyyymm);
  877. }
  878. /**
  879. * @---------------------------------------------------
  880. * @desc : PopupDiv00_Div02_Button03_onclick이벤트(▶▶)
  881. * @param : obj:Button
  882. e:ClickEventInfo
  883. * @---------------------------------------------------
  884. */
  885. function pd_calendar_dv_header_bt_nextYear_onclick(obj:Button, e:ClickEventInfo)
  886. {
  887. yyyymm = pd_calendar.gd_calendar._yyyymm;
  888. var add_date = addMonth(yyyymm+"01", 1, 0);
  889. yyyymm = add_date.substr(0, 6);
  890. drawCalendar(ds_calendar, pd_calendar.gd_calendar, yyyymm);
  891. }
  892. /**
  893. * @---------------------------------------------------
  894. * @desc : PopupDiv00_Div02_Static15_onclick이벤트(Year설정)
  895. * @param : obj:Static
  896. e:ClickEventInfo
  897. * @---------------------------------------------------
  898. */
  899. function pd_calendar_dv_header_st_year_onclick(obj:Static, e:ClickEventInfo)
  900. {
  901. //위치 잡기
  902. pd_calendar.cb_year.position.left = obj.position.left +11;
  903. pd_calendar.cb_year.position.top = obj.position.top +1;
  904. pd_calendar.cb_year.position.width = obj.position.width -13;
  905. pd_calendar.cb_year.position.height = obj.position.height -2;
  906. //Combo로 포커스 주고, visible변경
  907. pd_calendar.cb_year.moveToPrev(pd_calendar.dv_header);
  908. pd_calendar.cb_year.visible = true;
  909. pd_calendar.cb_year.setFocus();
  910. pd_calendar.cb_year.setCaretPos(0);
  911. }
  912. /**
  913. * @---------------------------------------------------
  914. * @desc : PopupDiv00_Div02_Static00_onclick이벤트(Month설정)
  915. * @param : obj:Static
  916. e:ClickEventInfo
  917. * @---------------------------------------------------
  918. */
  919. function pd_calendar_dv_header_st_month_onclick(obj:Static, e:ClickEventInfo)
  920. {
  921. //위치 잡기
  922. pd_calendar.cb_month.position.left = obj.position.left;
  923. pd_calendar.cb_month.position.top = obj.position.top +1;
  924. pd_calendar.cb_month.position.width = obj.position.width -8;
  925. pd_calendar.cb_month.position.height = obj.position.height -2;
  926. //Combo로 포커스 주고, visible변경
  927. pd_calendar.cb_month.moveToPrev(pd_calendar.dv_header);
  928. pd_calendar.cb_month.visible = true;
  929. pd_calendar.cb_month.setFocus();
  930. pd_calendar.cb_month.setCaretPos(0);
  931. }
  932. /**
  933. * @---------------------------------------------------
  934. * @desc : pd_calendar_gd_calendar_oncellclick이벤트
  935. * @param : obj:Grid
  936. e:GridClickEventInfo
  937. * @---------------------------------------------------
  938. */
  939. function pd_calendar_gd_calendar_oncellclick(obj:Grid, e:GridClickEventInfo)
  940. {
  941. var sSelectedDate = ds_calendar.getColumn( e.row, "date" + e.cell );
  942. fn_setDate(sSelectedDate);
  943. /*
  944. if (!isNull(sSelectedDate))
  945. {
  946. if( dv_calendar.txtDate.value != sSelectedDate ) isChanged = true;
  947. dv_calendar.txtDate.mask = gFormat;
  948. dv_calendar.txtDate.value = sSelectedDate.getMedirecToDate().getDateFormat(gValidateFormat);
  949. pd_calendar.gd_calendar._selecteddate = sSelectedDate;
  950. callBindFunction(gFunctionName); //함수호출
  951. }
  952. //처리되고 난 뒤에 닫자.
  953. pd_calendar.cb_year.visible = false;
  954. pd_calendar.cb_month.visible = false;
  955. pd_calendar.closePopup();
  956. */
  957. }
  958. /*
  959. function pd_calendar_gd_calendar_onmousemove(obj:Grid, e:GridMouseEventInfo)
  960. {
  961. var sSelectedDate = ds_calendar.getColumn( e.row, "date" + e.cell );
  962. _move_date = sSelectedDate;
  963. }
  964. function pd_calendar_gd_calendar_onmouseleave(obj:Grid, e:MouseEventInfo)
  965. {
  966. _move_date = "";
  967. }
  968. */
  969. /**
  970. * @---------------------------------------------------
  971. * @desc : pd_calendar_cb_year_onitemchanged이벤트
  972. * @param : obj:Combo
  973. e:ItemChangeEventInfo
  974. * @---------------------------------------------------
  975. */
  976. function pd_calendar_cb_year_onitemchanged(obj:Combo, e:ItemChangeEventInfo)
  977. {
  978. yyyymm = e.posttext + pd_calendar.dv_header.st_month.text;
  979. yyyymm = yyyymm.substr(0, 6);
  980. drawCalendar(ds_calendar, pd_calendar.gd_calendar, yyyymm);
  981. pd_calendar.cb_year.visible = false;
  982. }
  983. /**
  984. * @---------------------------------------------------
  985. * @desc : pd_calendar_cb_month_onitemchanged이벤트
  986. * @param : obj:Combo
  987. e:ItemChangeEventInfo
  988. * @---------------------------------------------------
  989. */
  990. function pd_calendar_cb_month_onitemchanged(obj:Combo, e:ItemChangeEventInfo)
  991. {
  992. yyyymm = pd_calendar.dv_header.st_year.text.substr(0, 4) + e.posttext;
  993. yyyymm = yyyymm.substr(0, 6);
  994. drawCalendar(ds_calendar, pd_calendar.gd_calendar, yyyymm);
  995. pd_calendar.cb_month.visible = false;
  996. }
  997. /**
  998. * @desc 달력을 사용할 것인지 여부 설정
  999. * @param isEnable
  1000. */
  1001. function setEnable( isEnable ) {
  1002. if( isNull(isEnable) ) isEnable = true;
  1003. if( isEnable ) {
  1004. dv_calendar.txtDate.enable = false;
  1005. dv_calendar.bt_calendar.enable = false;
  1006. } else {
  1007. dv_calendar.txtDate.enable = true;
  1008. dv_calendar.bt_calendar.enable = true;
  1009. }
  1010. this.enable = isEnable;
  1011. }
  1012. /**
  1013. * @desc 달력을 읽기 전용으로 할것인지 여부 설정
  1014. * @param isReadonly
  1015. */
  1016. function setReadonly( isReadonly ) {
  1017. if( isNull(isReadonly) ) isReadonly = true;
  1018. if( isReadonly ) {
  1019. dv_calendar.txtDate.readonly = true;
  1020. dv_calendar.bt_calendar.enable = false;
  1021. } else {
  1022. dv_calendar.txtDate.readonly = false;
  1023. dv_calendar.bt_calendar.enable = true;
  1024. }
  1025. this.readonly = isReadonly;
  1026. }
  1027. /**
  1028. * @desc 달력을 필수 전용으로 할것인지 여부 설정
  1029. * @param isRequired
  1030. */
  1031. function setRequired( isRequired, sMsgKey ) {
  1032. if( isNull(isRequired) ) isRequired = true;
  1033. _required = isRequired;
  1034. _msgkey = sMsgKey;
  1035. if( isRequired ) {
  1036. dv_calendar.txtDate.class = "ed_mask_est";
  1037. } else {
  1038. dv_calendar.txtDate.class = "";
  1039. }
  1040. }
  1041. /**
  1042. * calendar 에 focus 를 지정하자.
  1043. */
  1044. function setFocus() {
  1045. dv_calendar.txtDate.setFocus();
  1046. }
  1047. function basicCalendar_onsetfocus(obj:Form, e:SetFocusEventInfo){
  1048. setFocus();
  1049. }
  1050. /**
  1051. * @desc 달력 날짜 정합성 체크
  1052. * @param sDate 입력받은 달력날짜
  1053. */
  1054. function getIsDate(sDate){
  1055. //날짜가 4자리(MMdd), 8자리(yyyyMMdd)가 아닐 경우
  1056. if (!(String(sDate).trim().length == 4
  1057. || String(sDate).trim().length == 8)) return false;
  1058. if (String(sDate).trim().length == 8){
  1059. var nYear = toNumber(sDate.toString().substr(0,4));
  1060. var nMonth = toNumber(sDate.toString().substr(4,2));
  1061. var nDate = toNumber(sDate.toString().substr(6,2));
  1062. //입력받은 년월일이 값이 없을 경우
  1063. if (isNull(nYear) || isNull(nMonth) || isNull(nDate)) return false;
  1064. //입력받은 월이 범위를 초과할 경우
  1065. if (nMonth > 12 || nMonth < 1) return false;
  1066. //입력받은 월의 마지막일이 31일 경우
  1067. if (nMonth == 1
  1068. || nMonth == 3
  1069. || nMonth == 5
  1070. || nMonth == 7
  1071. || nMonth == 8
  1072. || nMonth == 10
  1073. || nMonth == 12){
  1074. if (nDate > 31 || nDate < 1) return false;
  1075. } else if (nMonth == 2){ //윤달 체크
  1076. if (((nYear%4 == 0) && (nYear%100 != 0)) || (nYear%400 == 0)){
  1077. if (nDate > 29 || nDate < 1) return false;
  1078. } else {
  1079. if (nDate > 28 || nDate < 1) return false;
  1080. }
  1081. //입력받은 월의 마지막일이 30일 경우
  1082. } else if (nMonth == 4
  1083. || nMonth == 6
  1084. || nMonth == 9
  1085. || nMonth == 11){
  1086. if (nDate > 30 || nDate < 1) return false;
  1087. }
  1088. } else if (String(sDate).trim().length == 4){
  1089. var nMonth = toNumber(sDate.toString().substr(0,2));
  1090. var nDate = toNumber(sDate.toString().substr(2,2));
  1091. //입력받은 월일이 값이 없을 경우
  1092. if (isNull(nMonth) || isNull(nDate)) return false;
  1093. //입력받은 월이 범위를 초과할 경우
  1094. if (nMonth > 12 || nMonth < 1) return false;
  1095. //입력받은 월의 마지막일이 31일 경우
  1096. if (nMonth == 1
  1097. || nMonth == 3
  1098. || nMonth == 5
  1099. || nMonth == 7
  1100. || nMonth == 8
  1101. || nMonth == 10
  1102. || nMonth == 12){
  1103. if (nDate > 31 || nDate < 1) return false;
  1104. } else if (nMonth == 2){ //윤달 체크
  1105. if (nDate > 29 || nDate < 1) return false;
  1106. //입력받은 월의 마지막일이 30일 경우
  1107. } else if (nMonth == 4
  1108. || nMonth == 6
  1109. || nMonth == 9
  1110. || nMonth == 11){
  1111. if (nDate > 30 || nDate < 1) return false;
  1112. }
  1113. }
  1114. return true;
  1115. }
  1116. function getMaskLength(val){
  1117. var sVal = new String(val);
  1118. val = new String(val);
  1119. if (val == null || val == "null" || sVal.trim().length <= 0 || escape(val) == "undefined"){
  1120. return 0;
  1121. } else {
  1122. return val.length;
  1123. }
  1124. }
  1125. function dv_calendar_onkeydown(obj:MaskEdit, e:KeyEventInfo)
  1126. {
  1127. //삭제키들을 처리한다.
  1128. if(e.keycode == 8 || e.keycode == 46 || (e.ctrlKey && (e.keycode == 88 || e.keycode == 86))) {
  1129. var value = obj.text;
  1130. var caretPos = obj.getSelect();
  1131. /*
  1132. 커서의 위치가 마지막이고 딜리트키를 눌렀을때
  1133. 커서의 위치가 처음이고 백스페이스를 눌렀을때는 아무것도 안한다.
  1134. */
  1135. if( (caretPos[0] == obj.text.length && e.keycode == 46)
  1136. || (caretPos[1] == 0 && e.keycode == 8) )
  1137. return;
  1138. isChanged = true;
  1139. if(caretPos[0] != caretPos[1]){ //선택영역이 있을때
  1140. if ( e.ctrlKey && e.keycode == 88 ) { // ctrl + x
  1141. system.setClipboard("CF_TEXT", value.substring(caretPos[0], caretPos[1]));
  1142. }
  1143. value = value.substring(0, caretPos[0]) + value.substring(caretPos[1], value.length);
  1144. } else if( e.keycode == 8 ){ //백스페이스
  1145. value = value.substring(0, --caretPos[0]) + value.substring(caretPos[1], value.length);
  1146. } else if ( e.keycode == 46 ) { //딜리트
  1147. value = value.substring(0, caretPos[0]) + value.substring(++caretPos[1], value.length);
  1148. }/* else if ( e.ctrlKey && e.keycode == 88 ) { // ctrl + x
  1149. return false;
  1150. } else if ( e.ctrlKey && e.keycode == 86) { // ctrl + v
  1151. var pasteData = system.getClipboard("CF_TEXT");
  1152. pasteData = pasteData.replace(/\D/g, "");
  1153. for(var i = 0 ; i < pasteData.length ; i++)
  1154. fnTxtChange(pasteData.charAt(i));
  1155. return false;
  1156. }
  1157. */
  1158. value = value.replace(/\D/g, "");
  1159. fnSetValue(value);
  1160. //obj.setCaretPos( caretPos[0] );
  1161. var isSetPos = false;
  1162. if(e.keycode == 8){
  1163. for(var i = gArrFormatIndx.length -1 ; i >= 0 ; i--){
  1164. if(gArrFormatIndx[i] == caretPos[0]){
  1165. obj.setCaretPos( gArrFormatIndx[i-1] + 1 );
  1166. isSetPos = true;
  1167. break;
  1168. }
  1169. /* 이런다고 코스트가 줄것 같지 않아서 주석처리
  1170. else if ( gArrFormatIndx[i] < caretPos[0] ) {
  1171. break;
  1172. }
  1173. */
  1174. }
  1175. }
  1176. if(!isSetPos){
  1177. obj.setCaretPos( caretPos[0] )
  1178. }
  1179. }
  1180. }
  1181. function dv_calendar_onkillfocus(obj:MaskEdit, e:KillFocusEventInfo)
  1182. {
  1183. callBindFunction();
  1184. }
  1185. function pd_calendar_btn_today_onclick(obj:Button, e:ClickEventInfo)
  1186. {
  1187. setToday();
  1188. //dv_calendar.txtDate.mask = gFormat;
  1189. //dv_calendar.txtDate.value = getCurrentDate().toDate().getDateFormat(gValidateFormat);
  1190. }
  1191. function dv_calendar_txtDate_ontextchange(obj:MaskEdit, e:TextChangeEventInfo)
  1192. {
  1193. for(var i = 0; i < e.chartext.length; i++){
  1194. var charText = e.chartext.charAt(i);
  1195. if( /\d/.test(charText) ) {
  1196. if( !fnTxtChange(charText) ){
  1197. break;
  1198. }
  1199. }
  1200. }
  1201. //이미 value를 변화시킨상황이므로 ontextchange는 false로 반환해서 추가 이벤트를 막는다.
  1202. return false;
  1203. }
  1204. function fnTxtChange(chartext){
  1205. var obj = dv_calendar.txtDate;
  1206. var caretPos = obj.getSelect();
  1207. var value = obj.value;
  1208. if( !isNull(value) ){
  1209. //이미 포맷이 완결된 상태에서 받는 입력은 무시한다
  1210. if( obj.value.length == gValidateFormat.length && caretPos[0] == caretPos[1] )
  1211. return false;
  1212. value = obj.text;
  1213. value = value.substring(0, caretPos[0]) + chartext + value.substring(caretPos[1], value.length);
  1214. value = value.replace(/\D/, "");
  1215. } else {
  1216. value = chartext;
  1217. }
  1218. isChanged = true;
  1219. var validateFormatLastChar = gValidateFormat.substr(value.length - 1, 1);
  1220. var validateFormatLength = gValidateFormat.lastIndexOf(validateFormatLastChar) + 1;
  1221. var validateFormat = gValidateFormat.substr(0, validateFormatLength);
  1222. //trace( "validateFormat : " + validateFormat );
  1223. var validateValue = value;
  1224. while(validateValue.length < validateFormatLength){
  1225. if(chartext == "0")
  1226. validateValue += "1";
  1227. else
  1228. validateValue += "0";
  1229. }
  1230. //날짜밸리데이션을 통과하면 값을 셋팅하고 포맷을 변화시킨다.
  1231. if(fnIsValidDateTime(validateValue, validateFormat) ){
  1232. fnSetValue(value);
  1233. //캐럿포지션다시 정상위치로 박아놓자.
  1234. obj.setCaretPos( obj.text.indexOf(chartext, caretPos[0]) + 1 );
  1235. } else {
  1236. return false;
  1237. }
  1238. return true;
  1239. }
  1240. /*
  1241. function dv_calendar_txtDate_ontextchange(obj:MaskEdit, e:TextChangeEventInfo)
  1242. {
  1243. trace("@@@@@@" + e.chartext);
  1244. //입력키가 숫자가 아니면 아무것도 안한다
  1245. if ( e.chartext == "" || /\D/.test(e.chartext) ){
  1246. return false;
  1247. }
  1248. var caretPos = obj.getSelect();
  1249. var value = obj.value;
  1250. if( !isNull(value) ){
  1251. //이미 포맷이 완결된 상태에서 받는 입력은 무시한다
  1252. if( obj.value.length == gValidateFormat.length && caretPos[0] == caretPos[1] )
  1253. return false;
  1254. value = obj.text;
  1255. value = value.substring(0, caretPos[0]) + e.chartext + value.substring(caretPos[1], value.length);
  1256. value = value.replace(/\D/, "");
  1257. } else {
  1258. value = e.chartext;
  1259. }
  1260. isChanged = true;
  1261. var validateFormatLastChar = gValidateFormat.substr(value.length - 1, 1);
  1262. var validateFormatLength = gValidateFormat.lastIndexOf(validateFormatLastChar) + 1;
  1263. var validateFormat = gValidateFormat.substr(0, validateFormatLength);
  1264. //trace( "validateFormat : " + validateFormat );
  1265. var validateValue = value;
  1266. while(validateValue.length < validateFormatLength){
  1267. if(e.chartext == "0")
  1268. validateValue += "1";
  1269. else
  1270. validateValue += "0";
  1271. }
  1272. //날짜밸리데이션을 통과하면 값을 셋팅하고 포맷을 변화시킨다.
  1273. if(fnIsValidDateTime(validateValue, validateFormat) ){
  1274. fnSetValue(value);
  1275. //캐럿포지션다시 정상위치로 박아놓자.
  1276. obj.setCaretPos( obj.text.indexOf(e.chartext, caretPos[0]) + 1 );
  1277. }
  1278. //이미 value를 변화시킨상황이므로 ontextchange는 false로 반환해서 추가 이벤트를 막는다.
  1279. return false;
  1280. }
  1281. /**
  1282. * @desc : 유효한 날짜, 시간 인지 점검
  1283. * @param : pDateString - 날짜 문자열
  1284. * @param : pFormat - 아래 Syntex 참조
  1285. * <pre>
  1286. * # syntex
  1287. *
  1288. * YYYY : hour in am/pm (1~12)
  1289. * MM : month in year(number)
  1290. * MON : month in year(text) 예) "January"
  1291. * DD : day in month
  1292. * DAY : day in week 예) "Sunday"
  1293. * HH : hour in am/pm (1~12)
  1294. * hh : hour in day (0~23)
  1295. * mm : minute in hour
  1296. * ss : second in minute
  1297. * SS : millisecond in second
  1298. * a : am/pm 예) "AM"
  1299. *
  1300. * 사용예> isValidDateTime("20030229", "YYYYMMDD")
  1301. * isValidDateTime("11:61", "hh:mm");
  1302. *
  1303. * </pre>
  1304. * @return : true/false
  1305. * @---------------------------------------------------
  1306. */
  1307. function fnIsValidDateTime(pDateString, pFormat)
  1308. {
  1309. var dt = pDateString.getMedirecToDate(pFormat).getDateFormat(pFormat);
  1310. return (pDateString == dt);
  1311. }
  1312. /**
  1313. * @desc : 문자열 날짜를 Date로 반환(기록 / 서식 달력 컨트롤인 SSZZC00101_nUMedirecCalendar.xfdl에서만 사용하기 위함.)
  1314. * <pre>
  1315. * var date = "2002-03-05".toDate("YYYY-MM-DD")
  1316. * </pre>
  1317. * @param : pPattern - Date를 표현하고 있는 현재의 String을 pattern으로 표현한다.
  1318. * <pre>
  1319. * # syntex
  1320. *
  1321. * YYYY : year(4자리)
  1322. * YY : year(2자리)
  1323. * MM : month in year(number)
  1324. * DD : day in month
  1325. * hh : hour in day (0~23)
  1326. * mm : minute in hour
  1327. * ss : second in minute
  1328. * SS : millisecond in second
  1329. *
  1330. * <font color=red>주의)</font> 이 중에서 YYYY(YY), MM, DD 는 반드시 있어야 한다.
  1331. * </pre>
  1332. * @return : 변환된 Date Object.
  1333. * @---------------------------------------------------
  1334. */
  1335. function getMedirecToDate(pPattern)
  1336. {
  1337. var index = -1;
  1338. var year = "2016";
  1339. var month = "01";
  1340. var day = "01";
  1341. var hour = 0;
  1342. var min = 0;
  1343. var sec = 0;
  1344. var ms = 0;
  1345. if( isNull(pPattern) ) pPattern = "YYYYMMDD";
  1346. if ((index = pPattern.indexOf("YYYY")) > -1 ) {
  1347. year = this.substr(index, 4);
  1348. } else if ((index = pPattern.indexOf("YY")) > -1 ) {
  1349. year = "20" + this.substr(index, 2);
  1350. }
  1351. if( (index = pPattern.indexOf("MM")) > -1 ){
  1352. month = this.substr(index, 2);
  1353. }
  1354. if( (index = pPattern.indexOf("DD")) > -1 ){
  1355. day = this.substr(index, 2);
  1356. }
  1357. if ((index = pPattern.indexOf("hh")) != -1 ) {
  1358. hour = this.substr(index, 2);
  1359. }
  1360. if ((index = pPattern.indexOf("mm")) != -1 ) {
  1361. min = this.substr(index, 2);
  1362. }
  1363. if ((index = pPattern.indexOf("ss")) != -1 ) {
  1364. sec = this.substr(index, 2);
  1365. }
  1366. if ((index = pPattern.indexOf("SS")) != -1 ) {
  1367. ms = this.substr(index, 2);
  1368. }
  1369. return new Date(year, month - 1, day, hour, min, sec, ms);
  1370. }
  1371. ]]></Script>
  1372. </Form>
  1373. </FDL>