1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600 |
- <?xml version="1.0" encoding="utf-8"?>
- <!--
- - 수정이력
- - 2012.03.26 / 최초작성 / 정지훈
- - 2012.04.19 / 수정작성 / 정지훈 / 다국어처리(한국,중국,미국)
- -->
- <!--
- @name nuCalendar
- @desc
- -->
- <FDL version="1.5">
- <TypeDefinition url="..\..\..\default_typedef.xml"/>
- <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">
- <Layouts>
- <Layout height="20" width="95">
- <PopupDiv id="pd_calendar" text="PopupDiv01" visible="false" position="absolute 116 43 315 263">
- <Layouts>
- <Layout>
- <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">
- <Formats>
- <Format id="default">
- <Columns>
- <Column size="80"/>
- <Column size="80"/>
- <Column size="80"/>
- <Column size="80"/>
- <Column size="80"/>
- <Column size="80"/>
- <Column size="80"/>
- </Columns>
- <Rows>
- <Row size="24" band="head"/>
- <Row size="23"/>
- </Rows>
- <Band id="head">
- <Cell class="sun" text="expr:gridHeaderDay("일")"/>
- <Cell col="1" text="expr:gridHeaderDay("월")"/>
- <Cell col="2" text="expr:gridHeaderDay("화")"/>
- <Cell col="3" text="expr:gridHeaderDay("수")"/>
- <Cell col="4" text="expr:gridHeaderDay("목")"/>
- <Cell col="5" text="expr:gridHeaderDay("금")"/>
- <Cell col="6" class="sat" text="expr:gridHeaderDay("토")"/>
- </Band>
- <Band id="body">
- <Cell displaytype="normal" style="background:EXPR(gridTodayExpr(date0));background2:EXPR(gridTodayExpr(date0));color:EXPR(gridTodayFontColor(date0,"col0"));color2:EXPR(gridTodayFontColor(date0,"col0"));font:EXPR(gridTodayFontStyle(date0));" text="bind:day0"/>
- <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"/>
- <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"/>
- <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"/>
- <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"/>
- <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"/>
- <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"/>
- </Band>
- </Format>
- </Formats>
- </Grid>
- <Div id="dv_header" taborder="5" scrollbars="none" class="dv_calMonth" position="absolute 0 0 199 28">
- <Layouts>
- <Layout>
- <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"/>
- <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"/>
- <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"/>
- <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"/>
- <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"/>
- <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"/>
- </Layout>
- </Layouts>
- </Div>
- <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"/>
- <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"/>
- <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=""/>
- <!--
- <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;"/>
- -->
- <Button id="btn_today" taborder="10" text="오늘" onclick="pd_calendar_btn_today_onclick" class="btn2" position="absolute 4 195 48 215"/>
- </Layout>
- </Layouts>
- </PopupDiv>
- <Div id="dv_calendar" taborder="1" position="absolute 0 0 95 20" anchor="all">
- <Layouts>
- <Layout>
- <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"/>
- <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"/>
- </Layout>
- </Layouts>
- </Div>
- </Layout>
- </Layouts>
- <Objects>
- <Dataset id="ds_calendar" preload="true" firefirstcount="0" firenextcount="0" useclientlayout="false" updatecontrol="true" enableevent="true">
- <ColumnInfo>
- <Column type="STRING" size="256" id="day0"/>
- <Column type="STRING" size="256" id="day1"/>
- <Column type="STRING" size="256" id="day2"/>
- <Column type="STRING" size="256" id="day3"/>
- <Column type="STRING" size="256" id="day4"/>
- <Column type="STRING" size="256" id="day5"/>
- <Column type="STRING" size="256" id="day6"/>
- <Column id="date0" type="STRING" size="256"/>
- <Column id="date1" type="STRING" size="256"/>
- <Column id="date2" type="STRING" size="256"/>
- <Column id="date3" type="STRING" size="256"/>
- <Column id="date4" type="STRING" size="256"/>
- <Column id="date5" type="STRING" size="256"/>
- <Column id="date6" type="STRING" size="256"/>
- </ColumnInfo>
- <Rows/>
- </Dataset>
- <Dataset id="ds_month" firefirstcount="0" firenextcount="0" useclientlayout="false" updatecontrol="true" enableevent="true" loadkeymode="keep" loadfiltermode="keep" reversesubsum="false">
- <ColumnInfo>
- <Column id="code" type="STRING" size="256"/>
- <Column id="value" type="STRING" size="256"/>
- </ColumnInfo>
- <Rows>
- <Row>
- <Col id="code">0</Col>
- <Col id="value">01</Col>
- </Row>
- <Row>
- <Col id="code">1</Col>
- <Col id="value">02</Col>
- </Row>
- <Row>
- <Col id="code">2</Col>
- <Col id="value">03</Col>
- </Row>
- <Row>
- <Col id="code">3</Col>
- <Col id="value">04</Col>
- </Row>
- <Row>
- <Col id="code">4</Col>
- <Col id="value">05</Col>
- </Row>
- <Row>
- <Col id="code">5</Col>
- <Col id="value">06</Col>
- </Row>
- <Row>
- <Col id="code">6</Col>
- <Col id="value">07</Col>
- </Row>
- <Row>
- <Col id="code">7</Col>
- <Col id="value">08</Col>
- </Row>
- <Row>
- <Col id="code">8</Col>
- <Col id="value">09</Col>
- </Row>
- <Row>
- <Col id="code">9</Col>
- <Col id="value">10</Col>
- </Row>
- <Row>
- <Col id="code">10</Col>
- <Col id="value">11</Col>
- </Row>
- <Row>
- <Col id="code">11</Col>
- <Col id="value">12</Col>
- </Row>
- </Rows>
- </Dataset>
- <Dataset id="ds_year" firefirstcount="0" firenextcount="0" useclientlayout="false" updatecontrol="true" enableevent="true" loadkeymode="keep" loadfiltermode="keep" reversesubsum="false">
- <ColumnInfo>
- <Column id="code" type="STRING" size="256"/>
- <Column id="value" type="STRING" size="256"/>
- </ColumnInfo>
- </Dataset>
- <Dataset id="ds_holiday" firefirstcount="0" firenextcount="0" useclientlayout="false" updatecontrol="true" enableevent="true" loadkeymode="keep" loadfiltermode="keep" reversesubsum="false">
- <ColumnInfo>
- <Column id="date" type="DATE" size="256"/>
- <Column id="name" type="STRING" size="256"/>
- </ColumnInfo>
- </Dataset>
- </Objects>
- <Bind/>
- <Script type="xscript4.0"><![CDATA[/**
- * Program ID :
- * Program Name : nU2.0 기록 서식에서만 사용하는 calendar control
- * Author : 이봉욱
- * Created On : 2016.04.27
- * 화면 설명 :
- * 관련 화면/서비스 :
- * 관련테이블 :
- * 수정이력 :
- ************************************************************************************************
- * 수정일 이 름 사유
- ************************************************************************************************
- * 2016-04-27 이봉욱 최초 작성(SSZZC00100_nuCalendar를 복사하여 기록 / 서식에서만 사용하도록 기능 수정)
- ************************************************************************************************
- */
- /************************************************************************************************
- * 공통 라이브러리 INCLUDE 영역
- ************************************************************************************************/
- //include "sz_syscommonweb::dateHelper.xjs";
- //include "sz_syscommonweb::syscommon.xjs";
- String.prototype.getMedirecToDate = getMedirecToDate;
- /************************************************************************************************
- * UserEvent
- ************************************************************************************************/
- var ontextchanged = new UserEvent;
- /************************************************************************************************
- * FORM 변수 선언 영역
- ************************************************************************************************/
- var yyyymm;
- var arrHolList = new Array("0101","0301","0505","0606","0815","1003","1009","1225");
- var isChanged = false;
- var _move_date;
- var gLocale = "ko_KR";
- var _required;
- var _msgkey;
- /*public*/
- //var _format = "YYYY-MM-DD";
- //var _maskinclude = "false";
- /*private*/
- var gFormat; //실제포맷
- var gValidateFormat; //밸리데이션용포맷
- var gArrFormatIndx = []; //포맷에서 '#'값의 위치를 array로 저장
- /************************************************************************************************
- * FORM EVENT 영역
- ************************************************************************************************/
- function basicCalendar_onload(obj:Form, e:LoadEventInfo)
- {
- var nYear, nMonth;
- var startYear = 10;
- var midYear = 1;
-
- //휴일정보 세팅 추가 2015.10.19 by 이봉욱
- try{
- ds_holiday.copyData(gds_holidayinfo);
- } catch(e){
- trace("SSZZC00101 :: Exception( ds_holiday copy error )");
- }
-
- yyyymm = getCurrentDate().substr(0,6);
-
- // 달력그리기
- drawCalendar(ds_calendar, pd_calendar.gd_calendar, yyyymm);
-
- //년도 콤보박스 작성
- nYear = parseInt(getCurrentDate().substr(0,4));
- nMonth = pd_calendar.dv_header.st_month.text.substr(0, 2);
- for(i=0; i<=10; i++)
- {
- ds_year.addRow();
- ds_year.setColumn(i, "code", i);
- ds_year.setColumn(i, "value", nYear-startYear);
- startYear = startYear - 1;
- }
- for(i=11; i<=20; i++)
- {
- ds_year.addRow();
- ds_year.setColumn(i, "code", i);
- ds_year.setColumn(i, "value", nYear+midYear);
- midYear = midYear + 1;
- }
-
- //Combo로 해당년도 초기설정
- pd_calendar.cb_year.text = nYear;
- //Combo로 해당월 초기설정
- pd_calendar.cb_month.text = nMonth;
-
- dv_calendar.txtDate.style.align = this.style.align;
- dv_calendar.txtDate.style.color = this.style.color;
- dv_calendar.txtDate.style.font = this.style.font;
-
- if(this.class == "ed_mask_medirec_est"){
- dv_calendar.class = "ed_mask_medirec_est";
- dv_calendar.txtDate.class = "ed_mask_medirec_est2";
- dv_calendar.txtDate.style.background = "transparent URL('IMG::default/img_edt_medirec_est.png') no-repeat";
- }
- else if(this.class == "ed_mask_medirec"){
- dv_calendar.class = "ed_mask_medirec_est";
- dv_calendar.txtDate.class = "ed_mask_medirec_est2";
- }
-
- gFormat = _format.replace(/Y|M|D/g, "#");
- gValidateFormat = _format.replace(/[^Y|M|D]/g, "");
-
- for(var i = 0 ; i < gFormat.length; i++){
- if( gFormat.charAt(i) == "#")
- gArrFormatIndx.push(i);
- }
-
- if(_setcurdate == "true")
- setToday();
-
- //달력버튼 위치 설정
- dv_calendar.bt_calendar.position.y = (dv_calendar.position.height - dv_calendar.bt_calendar.position.height)/2;
- }
- /************************************************************************************************
- * FORM 공통 FUNCTION 영역
- ************************************************************************************************/
- /**
- * @---------------------------------------------------
- * @desc : 요일구하기
- * @param : sValue - yyyyMMdd형태의 날짜 ( 예 : "20121122" )
- * @return : 성공 - 요일(0=일요일, ~ , 6=토요일)
- 실패 - -1
- * @---------------------------------------------------
- */
- function getDayLocal(sDate)
- {
- if( isNull(sDate) ) return -1;
-
- var oDate = new Date(date2XP(sDate));
- return oDate.getDay();
- }
- /**
- * @---------------------------------------------------
- * @desc : Date기본 Format( = yyyyMMdd[hhmiss])를 XP Date기본 Format( = yyyy-MM-dd[ hh:mi:ss] ) 으로 바꾸어줌
- * @param : sValue - yyyyMMdd[hhmiss]형태의 일자 ( 예 : "20121122" 또는 "20121122010203")
- * @return : 성공 - XP Date기본 Format( 예 : "2012-11-22" 또는 "2012-11-22 01:02:03")
- 실패 - ""
- * @---------------------------------------------------
- */
- function date2XP(sDate)
- {
- var ret;
-
- if( isNull(sDate) ) return "";
-
- if( sDate.length != 8 && sDate.length != 14 )
- return "";
- ret = sDate.substr(0, 4) + "-" + sDate.substr(4, 2)+ "-" + sDate.substr(6, 2);
- if( sDate.length > 8 )
- ret += " " + sDate.substr(8,2) + ":" + sDate.substr(10,2) + ":" + sDate.substr(12,2);
-
- return ret;
- }
- /**
- * @---------------------------------------------------
- * @desc : 해당월의 마지막 날짜를 숫자로 구하기
- * @param : sValue - yyyyMMdd형태의 날짜 ( 예 : "20121122" )
- * @return : 성공 - 마지막 날짜 숫자값 ( 예 : 30 )
- 실패 - -1
- * @---------------------------------------------------
- */
- function lastDateNum(sDate)
- {
- var nMonth, nLastDate;
- if( isNull(sDate) ) return -1;
-
- nMonth = parseInt(sDate.substr(4,2), 10);
- if( nMonth == 1 || nMonth == 3 || nMonth == 5 || nMonth == 7 || nMonth == 8 || nMonth == 10 || nMonth == 12 )
- nLastDate = 31;
- else if( nMonth == 2 )
- {
- if( isLeapYear(sDate) == true )
- nLastDate = 29;
- else
- nLastDate = 28;
- }
- else
- nLastDate = 30;
-
- return nLastDate;
- }
- /**
- * @---------------------------------------------------
- * @desc : 입력된 날자에 nOffset 으로 지정된 만큼의 월을 증감
- * @param : sDate - 날짜 ( 예 : "20121122" )
- nOffset - 월 증감값 ( 예 : 1 또는 -1 )
- * @return : 성공 - yyyyMMdd형태의 증감된 날짜 ( 예 : "20121202" 또는 "20121022" )
- 실패 - ""
- * @---------------------------------------------------
- */
- function addMonth(sDate, nOffsetYear, nOffsetMonth)
- {
- if( isNull(sDate) || isNull(nOffsetYear) || isNull(nOffsetMonth)) return "";
-
- var nYear = parseInt(sDate.substr(0, 4))+nOffsetYear;
- var nMonth = parseInt(sDate.substr(4, 2))+nOffsetMonth;
- var nDate = parseInt(sDate.substr(6, 2));
- var nLastDate, sRet;
- sRet = makeDate(nYear, nMonth, 1);
- nLastDate = lastDateNum(sRet);
- sRet = sRet.substr(0,6);
- if( nDate > nLastDate )
- sRet += nLastDate.toString();
- else
- sRet += nDate.toString();
-
- return sRet;
- }
- /**
- * @---------------------------------------------------
- * @desc : 숫자로 된 년, 월, 일을 yyyyMMdd형의 문자열 날짜로 만든다.
- * @param : nYear - 년도 ( 예 : 2012 )
- nMonth - 월 ( 예 : 11 )
- nDate - 일 ( 예 : 22 )
- * @return : 성공 - yyyyMMdd형태의 날짜 ( 예 : "20121122" )
- 실패 - ""
- * @---------------------------------------------------
- */
- function makeDate(nYear, nMonth, nDate)
- {
- if( isNull(nYear) || isNull(nMonth) || isNull(nDate) ) return "";
-
- var objDate = new Date(nYear, nMonth-1, nDate);
- var sYear = objDate.getFullYear().toString();
- var sMonth = getStringRight("0" + (objDate.getMonth() + 1), 2);
- var sDate = getStringRight("0" + objDate.getDate(), 2);
- return sYear + sMonth + sDate;
- }
- /**
- * @---------------------------------------------------
- * @desc : 윤년여부 확인
- * @param : sDate - yyyyMMdd형태의 날짜 ( 예 : "20121122" )
- * @return : true - sDate가 윤년인 경우
- false - sDate가 윤년이 아닌 경우와 sDate가 입력되지 않은 경우
- * @---------------------------------------------------
- */
- function isLeapYear(sDate)
- {
- var ret;
- var nY;
-
- if( isNull(sDate) ) return false;
-
- nY = parseInt(sDate.substring(0,4), 10);
- if ((nY % 4) == 0)
- {
- if ((nY % 100) != 0 || (nY % 400) == 0)
- ret = true;
- else
- ret = false;
- }
- else
- ret = false;
-
- return ret;
- }
- /**
- * @---------------------------------------------------
- * @desc : 문자열의 오른쪽부분을 지정한 길이만큼 Return
- * @param : strString - 오른부분을 얻어올 원본 문자열
- nSize - 얻어올 크기. [Default Value = 0]
- * @return : rtnVal - 오른쪽 부분이 얻어진 문자열
- * @---------------------------------------------------
- */
- function getStringRight(strString, nSize)
- {
- var nStart = String(strString).length;
- var nEnd = Number(nStart) - Number(nSize);
- var rtnVal = strString.substring(nStart, nEnd);
- return rtnVal;
- }
- function setCalendarHeaderPosition() {
- // 연도
- var strYearLeft = 40;
- var strYearRight = 106;
- var strYearTop = 2;
- var strYearBottom = 22;
- // 월
- var strMonthLeft = 106;
- var strMonthRight = 154;
- var strMonthTop = 2;
- var strMonthBottom = 22;
- if (gLocale != "ko_KR")
- {
- // 연도
- pd_calendar.dv_header.st_year.position.left = strMonthLeft - 9;
- pd_calendar.dv_header.st_year.position.right = strMonthRight;
- pd_calendar.dv_header.st_year.position.top = strMonthTop;
- pd_calendar.dv_header.st_year.position.bottom = strMonthBottom;
- pd_calendar.dv_header.st_year.style.align.halign = "left";
- // 월
- pd_calendar.dv_header.st_month.position.left = strYearLeft;
- pd_calendar.dv_header.st_month.position.right = strYearRight - 9;
- pd_calendar.dv_header.st_month.position.top = strYearTop;
- pd_calendar.dv_header.st_month.position.bottom = strYearBottom;
- pd_calendar.dv_header.st_month.style.align.halign = "right";
- }
- }
- /**
- * @---------------------------------------------------
- * @desc : 달력 그리기
- * @param : ds_calendar_obj - 데이터셋 오브젝트
- grid_obj - 그리드 오브젝트
- yyyymm
- * @---------------------------------------------------
- */
- function drawCalendar(ds_calendar_obj, grid_obj, yyyymm)
- {
- var day, row, iStartWeekNum, iLastDay;
- var yyyymm = yyyymm.substr(0 ,6);
-
- setCalendarHeaderPosition();
-
- grid_obj._yyyymm = yyyymm;
-
- // 년도 설정
- if (gLocale == "ko_KR") //다국어설정
- pd_calendar.dv_header.st_year.text = yyyymm.substr(0, 4) + ".";
- else
- pd_calendar.dv_header.st_year.text = yyyymm.substr(0, 4);
-
- pd_calendar.cb_year.text = yyyymm.substr(0, 4);
-
- // 월 설정
- if (gLocale == "ko_KR") //다국어설정
- pd_calendar.dv_header.st_month.text = yyyymm.substr(4, 2);
- else if (gLocale == "en_US")
- pd_calendar.dv_header.st_month.text = yyyymm.substr(4, 2) + ".";
- else if (gLocale == "zh_CN")
- pd_calendar.dv_header.st_month.text = yyyymm.substr(4, 2) + "月";
- pd_calendar.cb_month.text = yyyymm.substr(4, 2);
-
- // Dataset 만들기
- ds_calendar_obj.clearData();
- iStartWeekNum = getDayLocal(yyyymm+"01");
- iLastDay = lastDateNum(yyyymm+"01");
- iLastWeekNum = getDayLocal(yyyymm+iLastDay) + 1; //마지막 날짜 다음날로 와야 됨
-
- row = ds_calendar_obj.addRow();
-
- for( var i = 1, day = iStartWeekNum ; i <= iLastDay ; i++ )
- {
- // 달력 Data설정
- ds_calendar_obj.setColumn(row, "day" +day , i);
- ds_calendar_obj.setColumn(row, "date"+day , yyyymm + String(i).padLeft(2, '0'));
-
- // 달력 Data Row추가
- day = (day+1)%7;
- if( day == 0 && i != iLastDay )
- row = ds_calendar_obj.addRow();
- }
-
-
- //------------------------------------------------------------------------
- //0.비어있는값을 채우자.
- if( ds_calendar_obj.rowcount > 0 ) {
-
- //1. 첫줄에 비어있는값을 전달로 채움
- var sPrev_yyyymm = addMonth(yyyymm + "01", 0, -1).substr(0, 6);
- var iPrevDay = lastDateNum(sPrev_yyyymm + "01");
-
- for( var i=iStartWeekNum-1; i>=0; i-- ) {
- ds_calendar_obj.setColumn(0, "day" +i, iPrevDay);
- ds_calendar_obj.setColumn(0, "date"+i, sPrev_yyyymm + String( iPrevDay ).padLeft(2, '0'));
- iPrevDay--;
- }
-
- //2. 5번째줄에서 끝나면 비어있는 6번째줄을 다음달로 채우자.
- var sNext_yyyymm = addMonth(yyyymm + "01", 0, 1).substr(0, 6);
- var iNextDay = 1;
-
- if( ds_calendar_obj.rowcount == 5 ) {
- for( var i=iLastWeekNum; i<=6; i++ ){
- ds_calendar_obj.setColumn(row, "day" +i, iNextDay);
- ds_calendar_obj.setColumn(row, "date"+i, sNext_yyyymm + String( iNextDay ).padLeft(2, '0'));
- iNextDay++;
- }
-
- //5번째줄을 다채우면 6번째 줄을 만들자.
- row = ds_calendar_obj.addRow();
- iLastWeekNum = 0; //6번째줄은 처음부터 다채움
- }
-
- //3. 6번째줄에서 끝나면 비어있는 공간을 다음달로 채우자.
- if( ds_calendar_obj.rowcount == 6 ) {
- for( var i=iLastWeekNum; i<=6; i++ ){
- ds_calendar_obj.setColumn(row, "day" +i, iNextDay);
- ds_calendar_obj.setColumn(row, "date"+i, sNext_yyyymm + String( iNextDay ).padLeft(2, '0'));
- iNextDay++;
- }
- }
- }
- }
- /**
- * @---------------------------------------------------
- * @desc : Calendar MM-dd형태로 변경함
- * @param :
- * @---------------------------------------------------
- */
- function setMaskMMdd() {
- dv_calendar.txtDate.position.width = "60";
- dv_calendar.bt_calendar.position.x = dv_calendar.bt_calendar.position.x - 36;
- dv_calendar.txtDate.mask = "##-##";
- }
- /**
- * @---------------------------------------------------
- * @desc : Grid Expression - 헤더다국어처리(한국어,중국어,영어)
- * @param : sDate - 요일
- * @return : sDate - 해당국가 요일
- * @---------------------------------------------------
- */
- function gridHeaderDay(sDate)
- {
- switch (sDate) {
- case "일":
- if (gLocale == "zh_CN")
- sDate = "天";
- else if (gLocale == "en_US")
- sDate = "sun";
- break;
- case "월":
- if (gLocale == "zh_CN")
- sDate = "一";
- else if (gLocale == "en_US")
- sDate = "mon";
- break;
- case "화":
- if (gLocale == "zh_CN")
- sDate = "二";
- else if (gLocale == "en_US")
- sDate = "tue";
- break;
- case "수":
- if (gLocale == "zh_CN")
- sDate = "三";
- else if (gLocale == "en_US")
- sDate = "wed";
- break;
- case "목":
- if (gLocale == "zh_CN")
- sDate = "四";
- else if (gLocale == "en_US")
- sDate = "thu";
- break;
- case "금":
- if (gLocale == "zh_CN")
- sDate = "五";
- else if (gLocale == "en_US")
- sDate = "fri";
- break;
- case "토":
- if (gLocale == "zh_CN")
- sDate = "六";
- else if (gLocale == "en_US")
- sDate = "sat";
- break;
- }
- return sDate;
- }
- /**
- * @---------------------------------------------------
- * @desc : Grid Expression - 날짜배경색지정
- * @param : sDate - 요일
- * @return : 배경이미지경로명
- * @---------------------------------------------------
- */
- function gridTodayExpr(sDate)
- {
- var yyyymmdd = String(sDate);
-
- //선택된 셀 표시
- if ( !isNull(getDate()) && getDate().replace("-","") == yyyymmdd )
- return "url('theme://images/img_termCalffBg.png')";
-
- //오늘날짜 설정
- if( yyyymmdd == getCurrentDate() )
- return "";//"url('theme://images/img_termcalBg.png')";
- }
- /**
- * @---------------------------------------------------
- * @desc : Grid Expression - 날짜폰트색지정
- * @param : sDate - 요일
- colId
- * @return : 폰트색
- * @---------------------------------------------------
- */
- function gridTodayFontColor(sDate,colId)
- {
- var yyyymmdd = String(sDate);
- var flgHoliday = false;
-
- //trace( sDate + " " + colId );
- //고정공휴일체크(신정,삼일절,어린이날,현충일,광복절,개천절,크리스마스)
- for (i=0; i<arrHolList.length; i++)
- {
- //trace(arrHolList[i]);
- if (yyyymmdd.substr(4,4) == arrHolList[i])
- flgHoliday = true;
- }
- //변동공휴일체크(설날,석가탄신일,추석)
- for (j=0; j<ds_holiday.rowcount; j++)
- {
- //trace(ds_holiday.getColumn(j, "date"));
- if ( yyyymmdd == ds_holiday.getColumn(j, "date") )
- flgHoliday = true;
- }
- //현재 속해있는 달이 아닐때
- if( yyyymmdd.substr(0, 6) != pd_calendar.gd_calendar._yyyymm )
- return "#b0b0b0";
- //일요일이거나 공휴일일 경우
- else if( (colId == "col0") || (flgHoliday == true) )
- return "#df5e00";
-
- //오늘일 경우
- else if( yyyymmdd == getCurrentDate() )
- return "#003399";
- else if( yyyymmdd == _move_date )
- return "#ffffff";
- //선택된 셀 표시
- else if( !isNull(getDate()) && yyyymmdd == getDate().replace("-","") )
- return "#ffffff";
- else
- return "#616161";
- }
- /**
- * @---------------------------------------------------
- * @desc : Grid Expression - 날짜폰트스타일지정
- * @param : sDate - 요일
- * @return : 폰트스타일
- * @---------------------------------------------------
- */
- function gridTodayFontStyle(sDate)
- {
- var yyyymmdd = String(sDate);
-
- if(yyyymmdd == getCurrentDate())
- return "Tahoma,8,bold";
-
- //선택된 셀 표시
- if ( !isNull(getDate()) && getDate().replace("-","") == yyyymmdd )
- return "Tahoma,8,bold";
- }
- /**
- * @desc 값이 변경될때 마다 함수를 호출한다.
- */
- function callBindFunction() {
- //trace("sFunctionName:" + sFunctionName + ":" + isChanged);
- /*
- if( !isNull(gFunctionName) && isChanged ) {
- isChanged = false;
-
- var sDate = getDate();
- try {
- eval(gFunctionName + "(" +sDate+ ");");
- } catch(e) {
- }
- }
- */
- if( isChanged ){
- //미래일자 설정 금지 항목을
- if(_deniedfuturedate == "true"){
- if( dv_calendar.txtDate.value.length == gValidateFormat.length ) { //입력이 완결되었을때
- var inptDt = dv_calendar.txtDate.value.getMedirecToDate(gValidateFormat);
- var curDt = new Date();
- if( inptDt > curDt ){
- //setToday();
- //dv_calendar.txtDate.setCaretPos(-1);
- alert("미래일자로 입력되었습니다. 다시 한번 확인하시기 바랍니다.");
- }
- }
- }
-
-
- isChanged = false;
- var e = new EventInfo;
- this.ontextchanged.fireEvent(this, e);
- }
- }
- function replaceDate( sVal ) {
- if( isNull(sVal) ) sVal = "";
-
- sVal = sVal.replace("-", "");
- return sVal;
- }
- /**
- * 날짜 선택 후 처리
- */
- function fn_setDate(sSelectedDate)
- {
- if(!isNull(sSelectedDate)){
- if( dv_calendar.txtDate.value != sSelectedDate ) isChanged = true;
-
- //선택한 값 넣어두기
- dv_calendar.txtDate.mask = gFormat;
- dv_calendar.txtDate.value = sSelectedDate.getMedirecToDate().getDateFormat(gValidateFormat);;
- pd_calendar.gd_calendar._selecteddate = sSelectedDate;
- callBindFunction();
- }
- //처리되고 난 뒤에 닫자
- pd_calendar.cb_year.visible = false;
- pd_calendar.cb_month.visible = false;
- pd_calendar.closePopup();
- }
- /**
- * @---------------------------------------------------
- * @desc : 사용자 페이지에서 날짜 취득(nUCalendar 컨트롤의 함수 수정)
- * @return : 날짜
- * @---------------------------------------------------
- */
- function getDate() {
- //return isNull(dv_calendar.txtDate.value)?"": String(dv_calendar.txtDate.value).replace(/-/g, "");
- var ret = "";
- if( _maskinclude == "true" ) {
- ret = dv_calendar.txtDate.text;
- } else {
- if(dv_calendar.txtDate.text.length > 0){
- var sMask = dv_calendar.txtDate.mask;
- var inptFormat = _format.substr(0, sMask.length);
- var cntMaskChar = sMask.match(/#/g).length ;
-
- //포맷순서를 YMD순서로 변경
- var retFormat = gValidateFormat.substr(0, cntMaskChar).replace(/([^Y]*)(Y*)([^Y]*)/, "$2$1$3")
- .replace(/([^D]*)(D*)([^D]*)/, "$1$3$2");
- ret = dv_calendar.txtDate.text.getMedirecToDate(inptFormat).getDateFormat(retFormat).replace(/\D/g, "");
- }
- }
- return ret;
- }
- /**
- * @---------------------------------------------------
- * @desc : 사용자 페이지에서 날짜 설정(nUCalendar 컨트롤의 함수 수정)
- * @param : sDateVal - 날짜
- * @---------------------------------------------------
- */
- function setDate( value ) {
-
- /*
- 1.0데이터에 maskinclude의 값과 다른 데이터그 들어가는 경우가
- 종종 있어서 maskinclude값이 아닌 그냥 데이터만 가지고 데이터를 저장한다.
- */
- var isMask = (/\D/.exec(value) != null);
-
- value = value.replace(/\D/g, "");
-
- if(!isMask){
- var cntValue = value.length;
- var setFormat = gValidateFormat.substr(0, cntValue);
- //포맷순서를 YMD순서로 변경
- var inptFormat = setFormat.replace(/([^Y]*)(Y*)([^Y]*)/, "$2$1$3")
- .replace(/([^D]*)(D*)([^D]*)/, "$1$3$2");
-
- if(setFormat != inptFormat)
- value = value.getMedirecToDate(inptFormat).getDateFormat(setFormat);
- }
-
- fnSetValue(value);
- }
- function setToday(){
- fn_setDate(getCurrentDate());
- }
- function fnSetValue(value){
-
- var pos = value.length;
- if( gArrFormatIndx.length <= pos ) {
- dv_calendar.txtDate.mask = gFormat;
- } else {
- var indx = gArrFormatIndx[pos - 1] + 1;
-
- //사이값이 '-'나 '/'경우 다음글자가 나타나야 나타나고..
- //그 외의 값(년월일 같은)이면 입력과 동시에 나타난다.
- var nextMaskChar = gFormat.substr(indx, 1);
- if( /[^#|\-|\/]/.test(nextMaskChar) )
- indx = gArrFormatIndx[pos];
-
- dv_calendar.txtDate.mask = gFormat.substr(0, indx).replace(/\s$/, "");
- }
-
- dv_calendar.txtDate.value = value;
-
- callBindFunction();
- }
- /************************************************************************************************
- * CONTROL EVENT 영역
- ************************************************************************************************/
- /**
- * @---------------------------------------------------
- * @desc : dv_calendar_bt_calendar_onclick이벤트(팝업표시)
- * @param : obj:Button
- e:ClickEventInfo
- * @---------------------------------------------------
- */
- function dv_calendar_bt_calendar_onclick(obj:Button, e:ClickEventInfo)
- {
- //달력 입력일자 기준으로 초기화-----------------------------------
- var sMask = dv_calendar.txtDate.mask;
- var sDateVal;
- if( isNull(sMask) ){
- sDateVal = getCurrentDate().getMedirecToDate().getDateFormat('YYYYMM');
- } else {
- var inptFormat = _format.substr(0, sMask.length);
- var cntMaskChar = sMask.match(/#/g).length;
- sDateVal = dv_calendar.txtDate.text.getMedirecToDate(inptFormat).getDateFormat('YYYYMM');
- }
- //var sYYYYMM = "";
-
- /*
- if( !isNull(sDateVal) && sDateVal.length == 8 ) {
- sYYYYMM = sDateVal.substr(0, 6);
-
- } else if( !isNull(sDateVal) && sDateVal.length == 4 ) {
- sYYYYMM = getCurrentDate().substr(0,4) + sDateVal.substr(0, 2);
- } else {
- sYYYYMM = getCurrentDate().substr(0,6);
- }
- */
- drawCalendar(ds_calendar, pd_calendar.gd_calendar, sDateVal);
- //달력 입력일자 기준으로 초기화-----------------------------------
-
- var nX = system.clientToScreenX(dv_calendar.txtDate,0);
- var nY = system.clientToScreenY(dv_calendar.txtDate,dv_calendar.txtDate.position.height);
-
- pd_calendar.trackPopup(nX,nY);
- }
- /**
- * @---------------------------------------------------
- * @desc : pd_calendar_dv_header_bt_previousYear_onclick이벤트(◀◀)
- * @param : obj:Button
- e:ClickEventInfo
- * @---------------------------------------------------
- */
- function pd_calendar_dv_header_bt_previousYear_onclick(obj:Button, e:ClickEventInfo)
- {
- yyyymm = pd_calendar.gd_calendar._yyyymm;
-
- var add_date = addMonth(yyyymm+"01", -1 ,0);
- yyyymm = add_date.substr(0, 6);
-
- drawCalendar(ds_calendar, pd_calendar.gd_calendar, yyyymm);
- }
- /**
- * @---------------------------------------------------
- * @desc : pd_calendar_dv_header_bt_previousMonth_onclick이벤트(◀)
- * @param : obj:Button
- e:ClickEventInfo
- * @---------------------------------------------------
- */
- function pd_calendar_dv_header_bt_previousMonth_onclick(obj:Button, e:ClickEventInfo)
- {
- yyyymm = pd_calendar.gd_calendar._yyyymm;
- var add_date = addMonth(yyyymm+"01", 0, -1);
- yyyymm = add_date.substr(0, 6);
-
- drawCalendar(ds_calendar, pd_calendar.gd_calendar, yyyymm);
- }
- /**
- * @---------------------------------------------------
- * @desc : pd_calendar_dv_header_bt_nextMonth_onclick이벤트(▶)
- * @param : obj:Button
- e:ClickEventInfo
- * @---------------------------------------------------
- */
- function pd_calendar_dv_header_bt_nextMonth_onclick(obj:Button, e:ClickEventInfo)
- {
- yyyymm = pd_calendar.gd_calendar._yyyymm;
- var add_date = addMonth(yyyymm+"01", 0, 1);
- yyyymm = add_date.substr(0, 6);
-
- drawCalendar(ds_calendar, pd_calendar.gd_calendar, yyyymm);
- }
- /**
- * @---------------------------------------------------
- * @desc : PopupDiv00_Div02_Button03_onclick이벤트(▶▶)
- * @param : obj:Button
- e:ClickEventInfo
- * @---------------------------------------------------
- */
- function pd_calendar_dv_header_bt_nextYear_onclick(obj:Button, e:ClickEventInfo)
- {
- yyyymm = pd_calendar.gd_calendar._yyyymm;
- var add_date = addMonth(yyyymm+"01", 1, 0);
- yyyymm = add_date.substr(0, 6);
- drawCalendar(ds_calendar, pd_calendar.gd_calendar, yyyymm);
- }
- /**
- * @---------------------------------------------------
- * @desc : PopupDiv00_Div02_Static15_onclick이벤트(Year설정)
- * @param : obj:Static
- e:ClickEventInfo
- * @---------------------------------------------------
- */
- function pd_calendar_dv_header_st_year_onclick(obj:Static, e:ClickEventInfo)
- {
- //위치 잡기
- pd_calendar.cb_year.position.left = obj.position.left +11;
- pd_calendar.cb_year.position.top = obj.position.top +1;
- pd_calendar.cb_year.position.width = obj.position.width -13;
- pd_calendar.cb_year.position.height = obj.position.height -2;
-
- //Combo로 포커스 주고, visible변경
- pd_calendar.cb_year.moveToPrev(pd_calendar.dv_header);
- pd_calendar.cb_year.visible = true;
- pd_calendar.cb_year.setFocus();
- pd_calendar.cb_year.setCaretPos(0);
- }
- /**
- * @---------------------------------------------------
- * @desc : PopupDiv00_Div02_Static00_onclick이벤트(Month설정)
- * @param : obj:Static
- e:ClickEventInfo
- * @---------------------------------------------------
- */
- function pd_calendar_dv_header_st_month_onclick(obj:Static, e:ClickEventInfo)
- {
- //위치 잡기
- pd_calendar.cb_month.position.left = obj.position.left;
- pd_calendar.cb_month.position.top = obj.position.top +1;
- pd_calendar.cb_month.position.width = obj.position.width -8;
- pd_calendar.cb_month.position.height = obj.position.height -2;
- //Combo로 포커스 주고, visible변경
- pd_calendar.cb_month.moveToPrev(pd_calendar.dv_header);
- pd_calendar.cb_month.visible = true;
- pd_calendar.cb_month.setFocus();
- pd_calendar.cb_month.setCaretPos(0);
- }
- /**
- * @---------------------------------------------------
- * @desc : pd_calendar_gd_calendar_oncellclick이벤트
- * @param : obj:Grid
- e:GridClickEventInfo
- * @---------------------------------------------------
- */
- function pd_calendar_gd_calendar_oncellclick(obj:Grid, e:GridClickEventInfo)
- {
- var sSelectedDate = ds_calendar.getColumn( e.row, "date" + e.cell );
-
- fn_setDate(sSelectedDate);
- /*
- if (!isNull(sSelectedDate))
- {
- if( dv_calendar.txtDate.value != sSelectedDate ) isChanged = true;
-
- dv_calendar.txtDate.mask = gFormat;
- dv_calendar.txtDate.value = sSelectedDate.getMedirecToDate().getDateFormat(gValidateFormat);
-
- pd_calendar.gd_calendar._selecteddate = sSelectedDate;
-
- callBindFunction(gFunctionName); //함수호출
- }
-
- //처리되고 난 뒤에 닫자.
- pd_calendar.cb_year.visible = false;
- pd_calendar.cb_month.visible = false;
- pd_calendar.closePopup();
- */
- }
- /*
- function pd_calendar_gd_calendar_onmousemove(obj:Grid, e:GridMouseEventInfo)
- {
- var sSelectedDate = ds_calendar.getColumn( e.row, "date" + e.cell );
-
- _move_date = sSelectedDate;
- }
- function pd_calendar_gd_calendar_onmouseleave(obj:Grid, e:MouseEventInfo)
- {
- _move_date = "";
- }
- */
- /**
- * @---------------------------------------------------
- * @desc : pd_calendar_cb_year_onitemchanged이벤트
- * @param : obj:Combo
- e:ItemChangeEventInfo
- * @---------------------------------------------------
- */
- function pd_calendar_cb_year_onitemchanged(obj:Combo, e:ItemChangeEventInfo)
- {
- yyyymm = e.posttext + pd_calendar.dv_header.st_month.text;
- yyyymm = yyyymm.substr(0, 6);
- drawCalendar(ds_calendar, pd_calendar.gd_calendar, yyyymm);
- pd_calendar.cb_year.visible = false;
- }
- /**
- * @---------------------------------------------------
- * @desc : pd_calendar_cb_month_onitemchanged이벤트
- * @param : obj:Combo
- e:ItemChangeEventInfo
- * @---------------------------------------------------
- */
- function pd_calendar_cb_month_onitemchanged(obj:Combo, e:ItemChangeEventInfo)
- {
- yyyymm = pd_calendar.dv_header.st_year.text.substr(0, 4) + e.posttext;
- yyyymm = yyyymm.substr(0, 6);
- drawCalendar(ds_calendar, pd_calendar.gd_calendar, yyyymm);
-
- pd_calendar.cb_month.visible = false;
- }
- /**
- * @desc 달력을 사용할 것인지 여부 설정
- * @param isEnable
- */
- function setEnable( isEnable ) {
- if( isNull(isEnable) ) isEnable = true;
-
- if( isEnable ) {
- dv_calendar.txtDate.enable = false;
- dv_calendar.bt_calendar.enable = false;
- } else {
- dv_calendar.txtDate.enable = true;
- dv_calendar.bt_calendar.enable = true;
- }
- this.enable = isEnable;
- }
- /**
- * @desc 달력을 읽기 전용으로 할것인지 여부 설정
- * @param isReadonly
- */
- function setReadonly( isReadonly ) {
- if( isNull(isReadonly) ) isReadonly = true;
-
- if( isReadonly ) {
- dv_calendar.txtDate.readonly = true;
- dv_calendar.bt_calendar.enable = false;
- } else {
- dv_calendar.txtDate.readonly = false;
- dv_calendar.bt_calendar.enable = true;
- }
- this.readonly = isReadonly;
- }
- /**
- * @desc 달력을 필수 전용으로 할것인지 여부 설정
- * @param isRequired
- */
- function setRequired( isRequired, sMsgKey ) {
- if( isNull(isRequired) ) isRequired = true;
-
- _required = isRequired;
- _msgkey = sMsgKey;
-
- if( isRequired ) {
- dv_calendar.txtDate.class = "ed_mask_est";
- } else {
- dv_calendar.txtDate.class = "";
- }
- }
- /**
- * calendar 에 focus 를 지정하자.
- */
- function setFocus() {
- dv_calendar.txtDate.setFocus();
- }
- function basicCalendar_onsetfocus(obj:Form, e:SetFocusEventInfo){
- setFocus();
- }
- /**
- * @desc 달력 날짜 정합성 체크
- * @param sDate 입력받은 달력날짜
- */
- function getIsDate(sDate){
- //날짜가 4자리(MMdd), 8자리(yyyyMMdd)가 아닐 경우
- if (!(String(sDate).trim().length == 4
- || String(sDate).trim().length == 8)) return false;
-
- if (String(sDate).trim().length == 8){
- var nYear = toNumber(sDate.toString().substr(0,4));
- var nMonth = toNumber(sDate.toString().substr(4,2));
- var nDate = toNumber(sDate.toString().substr(6,2));
-
- //입력받은 년월일이 값이 없을 경우
- if (isNull(nYear) || isNull(nMonth) || isNull(nDate)) return false;
-
- //입력받은 월이 범위를 초과할 경우
- if (nMonth > 12 || nMonth < 1) return false;
-
- //입력받은 월의 마지막일이 31일 경우
- if (nMonth == 1
- || nMonth == 3
- || nMonth == 5
- || nMonth == 7
- || nMonth == 8
- || nMonth == 10
- || nMonth == 12){
- if (nDate > 31 || nDate < 1) return false;
- } else if (nMonth == 2){ //윤달 체크
- if (((nYear%4 == 0) && (nYear%100 != 0)) || (nYear%400 == 0)){
- if (nDate > 29 || nDate < 1) return false;
- } else {
- if (nDate > 28 || nDate < 1) return false;
- }
- //입력받은 월의 마지막일이 30일 경우
- } else if (nMonth == 4
- || nMonth == 6
- || nMonth == 9
- || nMonth == 11){
- if (nDate > 30 || nDate < 1) return false;
- }
- } else if (String(sDate).trim().length == 4){
- var nMonth = toNumber(sDate.toString().substr(0,2));
- var nDate = toNumber(sDate.toString().substr(2,2));
-
- //입력받은 월일이 값이 없을 경우
- if (isNull(nMonth) || isNull(nDate)) return false;
-
- //입력받은 월이 범위를 초과할 경우
- if (nMonth > 12 || nMonth < 1) return false;
-
- //입력받은 월의 마지막일이 31일 경우
- if (nMonth == 1
- || nMonth == 3
- || nMonth == 5
- || nMonth == 7
- || nMonth == 8
- || nMonth == 10
- || nMonth == 12){
- if (nDate > 31 || nDate < 1) return false;
- } else if (nMonth == 2){ //윤달 체크
- if (nDate > 29 || nDate < 1) return false;
- //입력받은 월의 마지막일이 30일 경우
- } else if (nMonth == 4
- || nMonth == 6
- || nMonth == 9
- || nMonth == 11){
- if (nDate > 30 || nDate < 1) return false;
- }
- }
- return true;
- }
- function getMaskLength(val){
- var sVal = new String(val);
- val = new String(val);
- if (val == null || val == "null" || sVal.trim().length <= 0 || escape(val) == "undefined"){
- return 0;
- } else {
- return val.length;
- }
- }
- function dv_calendar_onkeydown(obj:MaskEdit, e:KeyEventInfo)
- {
- //삭제키들을 처리한다.
- if(e.keycode == 8 || e.keycode == 46 || (e.ctrlKey && (e.keycode == 88 || e.keycode == 86))) {
-
- var value = obj.text;
- var caretPos = obj.getSelect();
-
- /*
- 커서의 위치가 마지막이고 딜리트키를 눌렀을때
- 커서의 위치가 처음이고 백스페이스를 눌렀을때는 아무것도 안한다.
- */
- if( (caretPos[0] == obj.text.length && e.keycode == 46)
- || (caretPos[1] == 0 && e.keycode == 8) )
- return;
-
-
- isChanged = true;
-
- if(caretPos[0] != caretPos[1]){ //선택영역이 있을때
- if ( e.ctrlKey && e.keycode == 88 ) { // ctrl + x
- system.setClipboard("CF_TEXT", value.substring(caretPos[0], caretPos[1]));
- }
- value = value.substring(0, caretPos[0]) + value.substring(caretPos[1], value.length);
- } else if( e.keycode == 8 ){ //백스페이스
- value = value.substring(0, --caretPos[0]) + value.substring(caretPos[1], value.length);
- } else if ( e.keycode == 46 ) { //딜리트
- value = value.substring(0, caretPos[0]) + value.substring(++caretPos[1], value.length);
- }/* else if ( e.ctrlKey && e.keycode == 88 ) { // ctrl + x
- return false;
- } else if ( e.ctrlKey && e.keycode == 86) { // ctrl + v
- var pasteData = system.getClipboard("CF_TEXT");
- pasteData = pasteData.replace(/\D/g, "");
-
- for(var i = 0 ; i < pasteData.length ; i++)
- fnTxtChange(pasteData.charAt(i));
-
- return false;
- }
- */
-
- value = value.replace(/\D/g, "");
-
- fnSetValue(value);
-
- //obj.setCaretPos( caretPos[0] );
- var isSetPos = false;
- if(e.keycode == 8){
- for(var i = gArrFormatIndx.length -1 ; i >= 0 ; i--){
- if(gArrFormatIndx[i] == caretPos[0]){
- obj.setCaretPos( gArrFormatIndx[i-1] + 1 );
- isSetPos = true;
- break;
- }
- /* 이런다고 코스트가 줄것 같지 않아서 주석처리
- else if ( gArrFormatIndx[i] < caretPos[0] ) {
- break;
- }
- */
- }
- }
-
- if(!isSetPos){
- obj.setCaretPos( caretPos[0] )
- }
- }
- }
- function dv_calendar_onkillfocus(obj:MaskEdit, e:KillFocusEventInfo)
- {
- callBindFunction();
- }
- function pd_calendar_btn_today_onclick(obj:Button, e:ClickEventInfo)
- {
- setToday();
- //dv_calendar.txtDate.mask = gFormat;
- //dv_calendar.txtDate.value = getCurrentDate().toDate().getDateFormat(gValidateFormat);
- }
- function dv_calendar_txtDate_ontextchange(obj:MaskEdit, e:TextChangeEventInfo)
- {
- for(var i = 0; i < e.chartext.length; i++){
- var charText = e.chartext.charAt(i);
- if( /\d/.test(charText) ) {
- if( !fnTxtChange(charText) ){
- break;
- }
- }
- }
-
- //이미 value를 변화시킨상황이므로 ontextchange는 false로 반환해서 추가 이벤트를 막는다.
- return false;
- }
- function fnTxtChange(chartext){
-
- var obj = dv_calendar.txtDate;
-
- var caretPos = obj.getSelect();
-
- var value = obj.value;
-
- if( !isNull(value) ){
-
- //이미 포맷이 완결된 상태에서 받는 입력은 무시한다
- if( obj.value.length == gValidateFormat.length && caretPos[0] == caretPos[1] )
- return false;
-
- value = obj.text;
- value = value.substring(0, caretPos[0]) + chartext + value.substring(caretPos[1], value.length);
- value = value.replace(/\D/, "");
- } else {
- value = chartext;
- }
-
- isChanged = true;
-
- var validateFormatLastChar = gValidateFormat.substr(value.length - 1, 1);
-
- var validateFormatLength = gValidateFormat.lastIndexOf(validateFormatLastChar) + 1;
- var validateFormat = gValidateFormat.substr(0, validateFormatLength);
-
- //trace( "validateFormat : " + validateFormat );
-
- var validateValue = value;
-
- while(validateValue.length < validateFormatLength){
- if(chartext == "0")
- validateValue += "1";
- else
- validateValue += "0";
- }
-
- //날짜밸리데이션을 통과하면 값을 셋팅하고 포맷을 변화시킨다.
- if(fnIsValidDateTime(validateValue, validateFormat) ){
- fnSetValue(value);
-
- //캐럿포지션다시 정상위치로 박아놓자.
- obj.setCaretPos( obj.text.indexOf(chartext, caretPos[0]) + 1 );
- } else {
- return false;
- }
-
-
- return true;
- }
- /*
- function dv_calendar_txtDate_ontextchange(obj:MaskEdit, e:TextChangeEventInfo)
- {
- trace("@@@@@@" + e.chartext);
- //입력키가 숫자가 아니면 아무것도 안한다
- if ( e.chartext == "" || /\D/.test(e.chartext) ){
- return false;
- }
-
- var caretPos = obj.getSelect();
-
- var value = obj.value;
-
- if( !isNull(value) ){
-
- //이미 포맷이 완결된 상태에서 받는 입력은 무시한다
- if( obj.value.length == gValidateFormat.length && caretPos[0] == caretPos[1] )
- return false;
-
- value = obj.text;
- value = value.substring(0, caretPos[0]) + e.chartext + value.substring(caretPos[1], value.length);
- value = value.replace(/\D/, "");
- } else {
- value = e.chartext;
- }
-
- isChanged = true;
- var validateFormatLastChar = gValidateFormat.substr(value.length - 1, 1);
-
- var validateFormatLength = gValidateFormat.lastIndexOf(validateFormatLastChar) + 1;
- var validateFormat = gValidateFormat.substr(0, validateFormatLength);
-
- //trace( "validateFormat : " + validateFormat );
-
- var validateValue = value;
-
- while(validateValue.length < validateFormatLength){
- if(e.chartext == "0")
- validateValue += "1";
- else
- validateValue += "0";
- }
-
- //날짜밸리데이션을 통과하면 값을 셋팅하고 포맷을 변화시킨다.
- if(fnIsValidDateTime(validateValue, validateFormat) ){
- fnSetValue(value);
-
- //캐럿포지션다시 정상위치로 박아놓자.
- obj.setCaretPos( obj.text.indexOf(e.chartext, caretPos[0]) + 1 );
- }
-
- //이미 value를 변화시킨상황이므로 ontextchange는 false로 반환해서 추가 이벤트를 막는다.
- return false;
- }
- /**
- * @desc : 유효한 날짜, 시간 인지 점검
- * @param : pDateString - 날짜 문자열
- * @param : pFormat - 아래 Syntex 참조
- * <pre>
- * # syntex
- *
- * YYYY : hour in am/pm (1~12)
- * MM : month in year(number)
- * MON : month in year(text) 예) "January"
- * DD : day in month
- * DAY : day in week 예) "Sunday"
- * HH : hour in am/pm (1~12)
- * hh : hour in day (0~23)
- * mm : minute in hour
- * ss : second in minute
- * SS : millisecond in second
- * a : am/pm 예) "AM"
- *
- * 사용예> isValidDateTime("20030229", "YYYYMMDD")
- * isValidDateTime("11:61", "hh:mm");
- *
- * </pre>
- * @return : true/false
- * @---------------------------------------------------
- */
- function fnIsValidDateTime(pDateString, pFormat)
- {
- var dt = pDateString.getMedirecToDate(pFormat).getDateFormat(pFormat);
- return (pDateString == dt);
- }
- /**
- * @desc : 문자열 날짜를 Date로 반환(기록 / 서식 달력 컨트롤인 SSZZC00101_nUMedirecCalendar.xfdl에서만 사용하기 위함.)
- * <pre>
- * var date = "2002-03-05".toDate("YYYY-MM-DD")
- * </pre>
- * @param : pPattern - Date를 표현하고 있는 현재의 String을 pattern으로 표현한다.
- * <pre>
- * # syntex
- *
- * YYYY : year(4자리)
- * YY : year(2자리)
- * MM : month in year(number)
- * DD : day in month
- * hh : hour in day (0~23)
- * mm : minute in hour
- * ss : second in minute
- * SS : millisecond in second
- *
- * <font color=red>주의)</font> 이 중에서 YYYY(YY), MM, DD 는 반드시 있어야 한다.
- * </pre>
- * @return : 변환된 Date Object.
- * @---------------------------------------------------
- */
- function getMedirecToDate(pPattern)
- {
- var index = -1;
- var year = "2016";
- var month = "01";
- var day = "01";
- var hour = 0;
- var min = 0;
- var sec = 0;
- var ms = 0;
-
- if( isNull(pPattern) ) pPattern = "YYYYMMDD";
-
- if ((index = pPattern.indexOf("YYYY")) > -1 ) {
- year = this.substr(index, 4);
- } else if ((index = pPattern.indexOf("YY")) > -1 ) {
- year = "20" + this.substr(index, 2);
- }
-
- if( (index = pPattern.indexOf("MM")) > -1 ){
- month = this.substr(index, 2);
- }
- if( (index = pPattern.indexOf("DD")) > -1 ){
- day = this.substr(index, 2);
- }
- if ((index = pPattern.indexOf("hh")) != -1 ) {
- hour = this.substr(index, 2);
- }
- if ((index = pPattern.indexOf("mm")) != -1 ) {
- min = this.substr(index, 2);
- }
- if ((index = pPattern.indexOf("ss")) != -1 ) {
- sec = this.substr(index, 2);
- }
- if ((index = pPattern.indexOf("SS")) != -1 ) {
- ms = this.substr(index, 2);
- }
- return new Date(year, month - 1, day, hour, min, sec, ms);
- }
- ]]></Script>
- </Form>
- </FDL>
|