var sc_DTcalender = new function(){ var Self = this; this.r_date = ''; // 결과 날짜 this.r_time = ''; // 결과 시각 var isIE = false; var AgntUsr=navigator.userAgent.toLowerCase(); if(AgntUsr.indexOf('msie')!=-1){ isIE = true; } this.addEvent = function(o, evt, f){ if(o.addEventListener){ o.addEventListener(evt, f, false); } else if(o.attachEvent){ if(evt=="mousedown"){ o = document; } o.attachEvent("on" + evt, f); } else { } }; var today = new Date(); this.sel_y = today.getFullYear(); this.sel_m = today.getMonth()+1; this.sel_d = today.getDate(); this.sel_hh = today.getHours(); this.sel_mm = today.getMinutes(); this.sel_ss = today.getSeconds(); this.T_ID = {}; this.offsetX = 0; this.offsetY = 0; this.zf = function(str, len){ if(len==null){ len=2; } return ('0000'+str).slice(-len); }; this.mouseDown = function(e){ if(Self.container != null && Self.container.style && Self.container.style.display != 'none'){ var target = e.target || e.srcElement; var isInsideCalendar = Self.container.contains(target); var isInsideInput = (Self.tarDate && Self.tarDate === target) || (Self.tarTime && Self.tarTime === target); if(isInsideCalendar || isInsideInput){ // 달력 안쪽이나 연결된 입력창을 클릭했으므로 달력을 닫지 않고 유지합니다. } else { Self.Close(); } } }; this.getObjPos = function(obj){ var left = 0; var top = 0; var width = obj.offsetWidth; var height = obj.offsetHeight; var elem = obj; // 1. 문서 최상단 기준으로 순수 CSS 좌표를 전부 더합니다. (Zoom 배율 무시) while(elem) { left += elem.offsetLeft || 0; top += elem.offsetTop || 0; elem = elem.offsetParent; } // 2. 중간에 스크롤바가 있는 내부 레이어(.estimate_box_inner 등)가 있다면 그 스크롤만큼 빼줍니다. elem = obj.parentNode; while(elem && elem.tagName !== 'BODY' && elem.tagName !== 'HTML') { if(elem.scrollTop) top -= elem.scrollTop; if(elem.scrollLeft) left -= elem.scrollLeft; elem = elem.parentNode; } return { left: left, top: top, width: width, height: height }; }; this.container = null; // 화면에 표시될 레이어 this.tarDate = null; // 날짜가 들어갈 대상 한곳에 날짜시각이 들어 간다면 그 대상 this.tarTime = null; // 시각이 들어갈 대상 this.onDateSelect = null; // 날짜선택후 창 닫기직전 실행할 함수 this.onCloseCancle = null; // 취소클릭후 창닫기직전 실행 함수 this.Lunar = null; // 음력 데이터 this.on = function(f){ Self.onDateSelect = f; return this; } this.Close = function(){ if(Self.container!=null && Self.container.style && Self.container.style.display!='none'){ if(Self.onCloseCancle!=null){ Self.onCloseCancle(Self); } Self.container.style.display = 'none'; } }; this.setDayClose = function(day){ Self.sel_d = parseInt(day); Self.r_date = Self.zf(Self.sel_y,4)+"-"+Self.zf(Self.sel_m)+"-"+Self.zf(Self.sel_d); Self.tarDate.value = Self.r_date; if(Self.tarTime!=null){ Self.r_time = Self.zf(Self.sel_hh)+":"+Self.zf(Self.sel_mm); Self.tarTime.value = Self.r_time; } if(Self.onDateSelect!=null){ Self.onDateSelect(Self); } Self.container.style.display = 'none'; }; this.setDayClear = function(){ Self.tarDate.value = ''; if(Self.tarTime!=null){ Self.tarTime.value = ''; } Self.r_date = ''; Self.r_time = ''; if(Self.onDateSelect!=null){ Self.onDateSelect(Self); } Self.container.style.display = 'none'; }; this.drawOneDay = function(o, day){ return day; };// 공휴일 표시 등 오버라이딩하여 사용 가능함 this.onOverDay = function(o, day){ // 달력의 날짜위에 마우스가 올라온 경우 오버라이딩하여 사용 가능함 return '음력 ' + Self.Lunar.ssolar2lunar[ day-1 ].month + '.' + Self.Lunar.ssolar2lunar[ day-1 ].day + (Self.Lunar.ssolar2lunar[ day -1].yoon?'윤':''); }; this.onOutDay = function(o, day){ return ''; } // 달력의 날짜위에서 마우스가 나간 경우 오버라이딩하여 사용 가능함 this.valid_date = function(y, m, d){ if(isNaN(y) || isNaN(m) || isNaN(d)) return false; var month_last = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; if((y%400==0)||((y%4==0)&&(y%100!=0))){month_last[1]=29;} else { month_last[1]=28;} if(y>2050 || y<1881) return false; if(m>12 || m<1) return false; if(d>month_last[m-1] || m<1) return false; return true; }; this.OpenD = function(o, select_fnc, close_fnc, init1_value){ if(typeof o == 'string'){ o = document.getElementById(o); } if(!o){ return false; } Self.tarDate = o; Self.tarTime = null; Self.onDateSelect = select_fnc; Self.onCloseCancle = close_fnc; if(Self.container==null){ Self._makeContainer(); } Self.container.o_table.width = "250"; Self.container.o_content.height = "200"; var today = new Date(); Self.sel_y = today.getFullYear(); Self.sel_m = today.getMonth()+1; Self.sel_d = today.getDate(); Self.sel_hh = today.getHours(); Self.sel_mm = today.getMinutes(); var s1 = Self.tarDate.value; if(init1_value!=null){ s1 = init1_value; } if(s1!=''){ s1 = s1.split(/[\-\. ]+/g); var y = s1[0] * 1; if(isNaN(y)){ y = today.getFullYear(); } var m = typeof s1[1]=='undefined' ? today.getMonth()+1 : s1[1] * 1; if(isNaN(m)){ m = today.getMonth()+1; } var d = typeof s1[2]=='undefined' ? today.getDate() : s1[2] * 1; if(isNaN(d)){ d = today.getDate(); } if(!Self.valid_date(y, m, d)){ y = today.getFullYear(); m = today.getMonth()+1; d = today.getDate(); } Self.sel_y = y; Self.sel_m = m; Self.sel_d = d; } Self.makeYearBtn(); Self.container.o_content.innerHTML = ''; Self.container.o_content.appendChild(Self._makeCalender()); Self.setCalenderReDraw(); Self._open_container(Self.tarDate); return this; }; this.OpenT = function(o, select_fnc, close_fnc, init2_value){ if(typeof o == 'string'){ o = document.getElementById(o); } if(!o){ return false; } Self.tarDate = null; Self.tarTime = o; Self.onDateSelect = select_fnc; Self.onCloseCancle = close_fnc; if(Self.container==null){ Self._makeContainer(); } Self.container.o_table.width = "180"; Self.container.o_content.height = "180"; var today = new Date(); Self.sel_y = today.getFullYear(); Self.sel_m = today.getMonth()+1; Self.sel_d = today.getDate(); Self.sel_hh = today.getHours(); Self.sel_mm = 0; var s2 = Self.tarTime.value; if(init2_value!=null){ s2 = init2_value; } if(s2!=""){ s2 = s2.split(/[\-\. :]+/g); var hh = s2[0] * 1; if(isNaN(hh)){ hh = today.getHours(); } var mm = typeof s2[1]=='undefined' ? 0 : s2[1]*1; if(isNaN(mm)){ mm = 0; } if(hh<0 || hh>23 || mm<0 || mm>59){ hh = today.getHours(); mm = 0; } Self.sel_hh = hh; Self.sel_mm = mm; } Self.makeYearBtn('시각선택'); Self.container.o_content.innerHTML = ''; Self.container.o_content.appendChild( Self._makeTime() ); Self._open_container(Self.tarTime); return this; }; this.OpenDT = function(o, select_fnc, close_fnc, init12_value){ if(typeof o == 'string'){ o = document.getElementById(o); } if(!o){ return false; } Self.tarDate = o; Self.tarTime = null; var today = new Date(); Self.sel_y = today.getFullYear(); Self.sel_m = today.getMonth()+1; Self.sel_d = today.getDate(); Self.sel_hh = today.getHours(); Self.sel_mm = 0; var s12 = Self.tarDate.value; if(init12_value!=null){ s12 = init12_value; } if(s12!=''){ s12 = s12.split(/[ ]+/g); } var tmp_o = {value: ''}; var setFunc = function(o){ o.tarDate.value = o.tarDate.value + ' ' + o.tarTime.value; if(select_fnc!=null) select_fnc(o); }; Self.OpenDTS(o, tmp_o, setFunc, close_fnc, s12[0], s12[1]); return this; }; this.OpenDTS = function(o1, o2, select_fnc, close_fnc, init1_value, init2_value){ if(typeof o1 == 'string'){ o1 = document.getElementById(o1); } if(typeof o2 == 'string'){ o2 = document.getElementById(o2); } if(!o1 || !o2){ return false; } Self.tarDate = o1; Self.tarTime = o2; Self.onDateSelect = select_fnc; Self.onCloseCancle = close_fnc; if(Self.container==null){ Self._makeContainer(); } Self.container.o_table.width = "385"; Self.container.o_content.height = "200"; var today = new Date(); Self.sel_y = today.getFullYear(); Self.sel_m = today.getMonth()+1; Self.sel_d = today.getDate(); Self.sel_hh = today.getHours(); Self.sel_mm = 0; var s1 = Self.tarDate.value; if(init1_value!=null){ s1 = init1_value; } if(s1!=''){ s1 = s1.split(/[\-\. ]+/g); var y = s1[0] * 1; if(isNaN(y)){ y = today.getFullYear(); } var m = typeof s1[1]=='undefined' ? today.getMonth()+1 : s1[1] * 1; if(isNaN(m)){ m = today.getMonth()+1; } var d = typeof s1[2]=='undefined' ? today.getDate() : s1[2] * 1; if(isNaN(d)){ d = today.getDate(); } if(!Self.valid_date(y, m, d)){ y = today.getFullYear(); m = today.getMonth()+1; d = today.getDate(); } Self.sel_y = y; Self.sel_m = m; Self.sel_d = d; } var s2 = Self.tarTime.value; if(init2_value!=null){ s2 = init2_value; } if(s2!=""){ s2 = s2.split(/[\-\. :]+/g); var hh = s2[0] * 1; if(isNaN(hh)){ hh = today.getHours(); } var mm = typeof s2[1]=='undefined' ? 0 : s2[1]*1; if(isNaN(mm)){ mm = 0; } if(hh<0 || hh>23 || mm<0 || mm>59){ hh = today.getHours(); mm = 0; } Self.sel_hh = hh; Self.sel_mm = mm; } Self.makeYearBtn(); var table = document.createElement('table'); table.width = "100%"; table.cellPadding = "2"; table.cellSpacing = "0"; table.border = "0"; var tbody = document.createElement('tbody'); table.appendChild(tbody); var tr = document.createElement('tr'); tbody.appendChild(tr); tr.vAlign = "top"; var td = document.createElement('td'); tr.appendChild(td); td.appendChild(Self._makeCalender()); td = document.createElement('td'); tr.appendChild(td); td.align = "center"; td.width = "130"; td.appendChild( Self._makeTime(1) ); Self.container.o_content.innerHTML = ''; Self.container.o_content.appendChild(table); Self.setCalenderReDraw(); Self._open_container(Self.tarDate); return this; }; this.offset = function(x, y, fnc){ Self.offsetX = x; Self.offsetY = y; var n= arguments.length; switch(n){ default: return false; break; case 4: fnc(arguments[3]); break; case 5: fnc(arguments[3], arguments[4]); break; case 6: fnc(arguments[3], arguments[4], arguments[5]); break; case 7: fnc(arguments[3], arguments[4], arguments[5], arguments[6]); break; case 8: fnc(arguments[3], arguments[4], arguments[5], arguments[6], arguments[7]); break; case 9: fnc(arguments[3], arguments[4], arguments[5], arguments[6], arguments[7], arguments[8]); break; } return this; }; this.getMaxHeight = function() { var D = document; return Math.max( D.body.scrollHeight, D.documentElement.scrollHeight, D.body.offsetHeight, D.documentElement.offsetHeight, D.body.clientHeight, D.documentElement.clientHeight ); }; this.getMaxWidth = function() { var D = document; return Math.max( D.body.scrollWidth, D.documentElement.scrollWidth, D.body.offsetWidth, D.documentElement.offsetWidth, D.body.clientWidth, D.documentElement.clientWidth ); }; this._open_container = function(o){ // absolute를 유지하여 문서(body)에 착 붙여줍니다. Self.container.style.position = 'absolute'; Self.container.style.display = 'block'; var t_ptr = Self.getObjPos(o); var m_w = Self.container.offsetWidth; var m_h = Self.container.offsetHeight; // 계산된 순수 CSS 좌표에 달력을 배치 (배율 계산 일절 없음) var _t = t_ptr.top + t_ptr.height + 2; var _l = t_ptr.left; _l += Self.offsetX; _t += Self.offsetY; // 경계선 보정 (body 크기 기준) var b_w = Math.max(document.body.scrollWidth, document.documentElement.scrollWidth); var b_h = Math.max(document.body.scrollHeight, document.documentElement.scrollHeight); if(_t + m_h > b_h) _t = t_ptr.top - m_h - 2; if(_l + m_w > b_w) _l = b_w - m_w - 5; if(_t < 0) _t = 0; if(_l < 0) _l = 0; Self.container.style.left = _l + 'px'; Self.container.style.top = _t + 'px'; Self.offsetX = 0; Self.offsetY = 0; Self.container.focus(); }; this._makeCalender = function(){ var div = document.createElement('div'); div.className = "dtcalendar-frame"; var table = document.createElement('table'); div.appendChild(table); table.className = "dtcalendar-header"; var tbody = document.createElement('tbody'); table.appendChild(tbody); var tr = document.createElement('tr'); tbody.appendChild(tr); var td = document.createElement('td'); tr.appendChild(td); td.width = 24; var btn = Self._makeCButton('◁', 1, 24, 26); btn.onclick = function(e){ Self.sel_m--; if(Self.sel_m<1){ Self.sel_m = 12; Self.sel_y--; } Self.setCalenderReDraw(); }; td.appendChild(btn); var td_m = document.createElement('td'); tr.appendChild(td_m); td_m.align = "center"; td_m.width = "45"; td_m.style.fontSize = "20px"; td_m.style.fontWeight = "bold"; td_m.style.color = "#cc6600"; td_m.innerHTML = Self.zf(Self.sel_m); td = document.createElement('td'); tr.appendChild(td); td.width = "16"; td.innerHTML = "월" td = document.createElement('td'); tr.appendChild(td); td.width = 24; btn = Self._makeCButton('▷', 1, 24, 26); btn.onclick = function(e){ Self.sel_m++; if(Self.sel_m>12){ Self.sel_m = 1; Self.sel_y++; } Self.setCalenderReDraw(); }; td.appendChild(btn); td = document.createElement('td'); tr.appendChild(td); td.width = "10"; td = document.createElement('td'); tr.appendChild(td); td.width = "45"; btn = Self._makeCButton('이달', 9, 40, 26); btn.onclick=function(e){ var today = new Date(); Self.sel_y = today.getFullYear(); Self.sel_m = today.getMonth()+1; Self.sel_d = today.getDate(); Self.sel_hh = today.getHours(); Self.sel_mm = today.getMinutes(); Self.setCalenderReDraw(); }; td.appendChild(btn); td = document.createElement('td'); tr.appendChild(td); td.width = "10"; td = document.createElement('td'); tr.appendChild(td); td.align = "right"; btn = Self._makeCButton('제거', 9, 40, 26); btn.onclick=function(e){ Self.setDayClear(); }; td.appendChild(btn); Self.T_ID.m = td_m; var cal_box = document.createElement('div'); div.appendChild(cal_box); Self.T_ID.cal_box = cal_box; return div; }; this.getWeek_MonthLength = function(y, m, d){ var month_last = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; if((y%400==0)||((y%4==0)&&(y%100!=0))){month_last[1]=29;} else { month_last[1]=28;} var yy = y-1; var s = yy * 365; var yun = parseInt(yy/4) - parseInt(yy/100) + parseInt(yy/400) - parseInt(yy/4000); s += yun; for(var i=0; i0){ mm = (mm + m) % 60; }else{ mm = (60 - ((60-mm) - m) % 60) % 60; } if(m<-1 || m>1) mm = parseInt(mm / m) * m; Self.sel_mm = mm; Self.setTimeReDrawValue(); }; this.addHours = function(h){ var hh = Self.sel_hh; if(h>0){ hh = (hh + h) % 24; }else{ hh = (24 - ((24-hh) - h) % 24) % 24; } if(h<-1 || h>1){ hh = parseInt(hh / h) * h; } Self.sel_hh = hh; Self.sel_mm = 0; Self.setTimeReDrawValue(); }; this._makeTime = function(menu){ var ttable = document.createElement('table'); ttable.cellPadding = '0'; ttable.cellSpacing="0"; ttable.border="0"; var ttbody = document.createElement('tbody'); ttable.appendChild(ttbody); var ttr = document.createElement('tr'); ttbody.appendChild(ttr); var ttd = document.createElement('td'); ttr.appendChild(ttd); var table = document.createElement('table'); ttd.appendChild(table); table.width = "120"; table.cellPadding = '0'; table.cellSpacing="0"; table.border="0"; var tbody = document.createElement('tbody'); table.appendChild(tbody); var tr = document.createElement('tr'); tbody.appendChild(tr); tr.align = "center"; var td = document.createElement('td'); tr.appendChild(td); td.width = "20"; td.rowSpan = "3"; td.innerHTML = ' '; td = document.createElement('td'); tr.appendChild(td); td.width = "30"; td.height = "60"; var btn = Self._makeCButton('△', 1); td.appendChild(btn); btn.onclick = function(e){ Self.addHours(1); }; btn.style.marginTop = '2px'; td = document.createElement('td'); tr.appendChild(td); td.width = "20"; td = document.createElement('td'); tr.appendChild(td); td.width = "30"; btn = Self._makeCButton('▲', 0); td.appendChild(btn); btn.onclick = function(e){ Self.addMinutes(15); }; td.appendChild(document.createElement('br')); td = document.createElement('td'); tr.appendChild(td); td.width = "20"; td.rowSpan = "3"; td.innerHTML = ' '; tr = document.createElement('tr'); tbody.appendChild(tr); tr.align = "center"; td = document.createElement('td'); tr.appendChild(td); td.width = "30"; td.height = "40"; td.style.fontSize = "30px"; td.style.fontWeight = "bold"; var div_hh = document.createElement('div'); td.appendChild(div_hh); div_hh.innerHTML = Self.zf(Self.sel_hh); td = document.createElement('td'); tr.appendChild(td); td.width = "20"; td.height = "40"; td.style.fontSize = "30px"; td.style.fontWeight = "bold"; td.innerHTML = ":"; td = document.createElement('td'); tr.appendChild(td); td.width = "30"; td.height = "40"; td.style.fontSize = "30px"; td.style.fontWeight = "bold"; var div_mm = document.createElement('div'); td.appendChild(div_mm); div_mm.innerHTML = Self.zf(Self.sel_mm); tr = document.createElement('tr'); tbody.appendChild(tr); tr.align = "center"; td = document.createElement('td'); tr.appendChild(td); td.width = "30"; td.height = "60"; btn = Self._makeCButton('▽', 1); td.appendChild(btn); btn.onclick = function(e){ Self.addHours(-1); };td.appendChild(document.createElement('br')); td = document.createElement('td'); tr.appendChild(td); td.width = "20"; td = document.createElement('td'); tr.appendChild(td); td.width = "30"; btn = Self._makeCButton('▼', 0); td.appendChild(btn); btn.onclick = function(e){ Self.addMinutes(-15); }; btn.style.marginTop = '2px'; tr = document.createElement('tr'); tbody.appendChild(tr); tr.align = "center"; td = document.createElement('td'); tr.appendChild(td); td.width = "20"; td.innerHTML = ' '; td = document.createElement('td'); tr.appendChild(td); td.width = "80"; td.width = "43"; td.colSpan = '3'; td.vAlign = 'bottom'; if(menu!=null){ btn = Self._makeCButton('Ok', 2, 70, 24); td.appendChild(btn); btn.onclick = function(e){ Self.setDayClose(Self.sel_d); }; btn.style.marginBottom = '5px'; } td = document.createElement('td'); tr.appendChild(td); td.width = "20"; td.innerHTML = ' '; if(menu==null){ ttd = document.createElement('td'); ttr.appendChild(ttd); td.width = "40"; ttd.align = "center"; ttd.vAlign = 'middle'; btn = Self._makeCButton('Ok', 2, 40, 60); ttd.appendChild(btn); btn.onclick = function(e){ Self.setTimeClose(); }; ttd.appendChild(document.createElement('br')); btn = Self._makeCButton('제거', 9, 40, 24); ttd.appendChild(btn); btn.onclick = function(e){ Self.setTimeClear(); }; btn.style.marginTop = '8px'; btn.style.marginBottom = '5px'; } Self.T_ID.hh = div_hh; Self.T_ID.mm = div_mm; return ttable; }; this._makeCButton = function(v, ct, w, h){ var btn = document.createElement('button'); if(w==null) w = 30; if(h==null) h = 23; btn.className = "btn"; if(ct==0){ // 많이 이동 btn.classList.add('ct0'); }else if(ct==1){ // 1씩이동 btn.classList.add('ct1'); }else if(ct==2){ // 선택확인 btn.classList.add('ct2'); } btn.style.width = w + 'px'; btn.style.height = h + 'px'; btn.innerHTML = v; return btn; }; this._makeContainer = function(){ if(Self.container!=null){ document.body.removeChild(Self.container); } Self.container = document.createElement('div'); Self.container.className = "dtcalendar-container"; document.body.appendChild(Self.container); if(!document.getElementById('dtcalendar-style')){ const style = document.createElement('style'); style.id = 'dtcalendar-style'; style.textContent = ` .dtcalendar-container { position: absolute; z-index: 1000000; box-shadow: 5px 5px 15px #888; background:#fff; } .dtcalendar-outer-table { border-collapse:collapse; border:1px solid #000; } .dtcalendar-outer-table > tbody > tr > td { padding:3px; border:1px solid #000; } .dtcalendar-title-box { background-color: #d7dbea; } .dtcalendar-title-table { border-collapse:collapse; width: 100%; border-spacing: 0; } .dtcalendar-title-table .close-btn { width:30px; line-height:100%; background: #e8e8e8; text-align:center; cursor:pointer; border:1px solid #808080; } .dtcalendar-title-table .close-btn:hover { background: #ffcc00; } .dtcalendar-year-table { border-collapse:collapse; } .dtcalendar-container .btn { background:#ffffff; font-size:11px; border: 1px solid #606060; color:#000; border-radius:3px; outline-none; } .dtcalendar-container .btn:hover { background:#ffe0e0; } .dtcalendar-container .btn.ct0 { background:#e4ebeb; } .dtcalendar-container .btn.ct0:hover { background:#ff9393; } .dtcalendar-container .btn.ct1 { background:#e9e9e9; } .dtcalendar-container .btn.ct1:hover { background:#ff9393; } .dtcalendar-container .btn.ct2 { background:#a4dbff; } .dtcalendar-container .btn.ct2:hover { background:#ff9393; } .dtcalendar-frame {} .dtcalendar-header { border-collapse:collapse; width:100%; } .dtcalendar-body { border-collapse:collapse; width:100%; border:2px solid #e8e8e8; margin-top: 3px } .dtcalendar-body > tbody > tr > td { border:1px solid #e8e8e8; text-align:center; } .dtcalendar-body > tbody > tr > td:not(.blk-inf) { width:14%; height:26px; } .dtcalendar-body > tbody > tr > td.dat { cursor:pointer; } .dtcalendar-body > tbody > tr > td.dat:hover { background:#ffcc33; } .dtcalendar-body > tbody > tr > td.sun { color: #cc0000; } .dtcalendar-body > tbody > tr > td.sat { color: #0066cc; } .dtcalendar-body > tbody > tr > td.nor { color: #666666; } .dtcalendar-body > tbody > tr > td.none { color: #e0e0e0; } .dtcalendar-body > tbody > tr > td.sel { background: #9bebff; } .dtcalendar-body > tbody > tr > td.blk-inf { text-align:left; padding-left:2px; padding-top:1px; } .dtcalendar-body > tbody > tr.title > td { background:#f0f0f0; text-align:center; font-size:13px; font-weight:bold; } `; document.head.appendChild(style); } var table = document.createElement('table'); table.className = "dtcalendar-outer-table"; table.width = "250"; var tbody = document.createElement('tbody'); table.appendChild(tbody); var tr = document.createElement('tr'); tbody.appendChild(tr); var td = document.createElement('td'); tr.appendChild(td); td.className = "dtcalendar-title-box"; var itable = document.createElement('table'); itable.className = "dtcalendar-title-table"; var itbody = document.createElement('tbody'); itable.appendChild(itbody); td.appendChild(itable); itable.border = "0"; itable.cellPadding = "0"; itable.cellSpacing = "0"; itable.width = "100%"; var itr = document.createElement('tr'); itbody.appendChild(itr); var title_td = document.createElement('td'); itr.appendChild(title_td); title_td.height = "30"; title_td.innerHTML = " "; var itd = document.createElement('td'); itr.appendChild(itd); itd.className = "close-btn"; itd.onclick = function(e){ Self.Close(); }; itd.innerHTML = '×'; tr = document.createElement('tr'); tbody.appendChild(tr); tr.vAlign = "top"; var content_td = document.createElement('td'); tr.appendChild(content_td); content_td.height = "200"; Self.container.appendChild(table); Self.container.o_table = table; Self.container.o_title = title_td; Self.container.o_content = content_td; }; this.makeYearBtn = function(s){ if(s!=null){ Self.container.o_title.innerHTML = s; return; } Self.container.o_title.innerHTML = ''; var table = document.createElement('table'); table.className = ".dtcalendar-year-table"; var tbody = document.createElement('tbody'); table.appendChild(tbody); var tr = document.createElement('tr'); tbody.appendChild(tr); var td = document.createElement('td'); tr.appendChild(td); td.width = "24"; var btn = Self._makeCButton('◁', 0, 24, 26); btn.onclick = function(e){ Self.sel_y--; if(Self.sel_y<1881) Self.sel_y = 1881; Self.setCalenderReDraw(); }; td.appendChild(btn); var td_yy = document.createElement('td'); tr.appendChild(td_yy); td_yy.align = "center"; td_yy.width = "50" td_yy.style.fontSize = "16px"; td_yy.style.fontWeight = "bold"; td_yy.style.color = "#0066cc"; td_yy.innerHTML = Self.zf(Self.sel_y, 4); td = document.createElement('td'); tr.appendChild(td); td.width = "16"; td.innerHTML = "년" td = document.createElement('td'); tr.appendChild(td); td.width = "24"; btn = Self._makeCButton('▷', 0, 24, 26); btn.onclick = function(e){ Self.sel_y++; if(Self.sel_y>2050) Self.sel_y = 2050; Self.setCalenderReDraw(); }; td.appendChild(btn); Self.T_ID.y = td_yy; Self.container.o_title.appendChild(table); } }; /*** 음력 ***/ var sc_LUNAR = function(y, m){ this.ssolar2lunar; //음력 구한 데이터보관 this.lunar_data = { "year":"", "month":"", "day":"", "yoon":false }; this.month_last = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; this.LunarTable = [ // 1881-2050년까지의 음력 데이터 //1881 "1212122322121", "1212121221220", "1121121222120", "2112132122122", "2112112121220", "2121211212120", "2212321121212", "2122121121210", "2122121212120", "1232122121212", //1891 "1212121221220", "1121123221222", "1121121212220", "1212112121220", "2121231212121", "2221211212120", "1221212121210", "2123221212121", "2121212212120", "1211212232212", //1901 "1211212122210", "2121121212220", "1212132112212", "2212112112210", "2212211212120", "1221412121212", "1212122121210", "2112212122120", "1231212122212", "1211212122210", //1911 "2121123122122", "2121121122120", "2212112112120", "2212231212112", "2122121212120", "1212122121210", "2132122122121", "2112121222120", "1211212322122", "1211211221220", //1921 "2121121121220", "2122132112122", "1221212121120", "2121221212110", "2122321221212", "1121212212210", "2112121221220", "1231211221222", "1211211212220", "1221123121221", //1931 "2221121121210", "2221212112120", "1221241212112", "1212212212120", "1121212212210", "2114121212221", "2112112122210", "2211211412212", "2211211212120", "2212121121210", //1941 "2212214112121", "2122122121120", "1212122122120", "1121412122122", "1121121222120", "2112112122120", "2231211212122", "2121211212120", "2212121321212", "2122121121210", //1951 "2122121212120", "1212142121212", "1211221221220", "1121121221220", "2114112121222", "1212112121220", "2121211232122", "1221211212120", "1221212121210", "2121223212121", //1961 "2121212212120", "1211212212210", "2121321212221", "2121121212220", "1212112112210", "2223211211221", "2212211212120", "1221212321212", "1212122121210", "2112212122120", //1971 "1211232122212", "1211212122210", "2121121122210", "2212312112212", "2212112112120", "2212121232112", "2122121212110", "2212122121210", "2112124122121", "2112121221220", //1981 "1211211221220", "2121321122122", "2121121121220", "2122112112322", "1221212112120", "1221221212110", "2122123221212", "1121212212210", "2112121221220", "1211231212222", //1991 "1211211212220", "1221121121220", "1223212112121", "2221212112120", "1221221232112", "1212212122120", "1121212212210", "2112132212221", "2112112122210", "2211211212210", //2001 "2221321121212", "2212121121210", "2212212112120", "1232212122112", "1212122122110", "2121212322122", "1121121222120", "2112112122120", "2211231212122", "2121211212120", //2011 "2122121121210", "2124212112121", "2122121212120", "1212121223212", "1211212221210", "2121121221220", "2112132121222", "1212112121220", "2121211212120", "2122321121212", //2021 "1221212121210", "2121221212120", "1232121221212", "1211212212210", "2121123212221", "2121121212220", "1212112112220", "1221231211221", "2212211211220", "1212212121210", //2031 "2123212212121", "2112122122120", "1211212322212", "1211212122210", "2121121122120", "2212114112122", "2212112112120", "2212121211210", "2212232121211", "2122122121210", //2041 "2112122122120", "1231212122212", "1211211221220", "2121121321222", "2121121121220", "2122112112120", "2122141211212", "1221221212110", "2121221221210", "2114121221221" ]; this.solar2lunar = function(year, month, day){ if(year<1881 || year>2050){ this.lunar_data.year = ""; this.lunar_data.month = ""; this.lunar_data.day = ""; this.lunar_data.yoon = false; return this.lunar_data; } var first_day = 686685; if( (year%400==0) || ((year%4==0)&&(year%100!=0)) ){ this.month_last[1]=29; } else { this.month_last[1]=28; } var sum = 0; for(var i=0; i 2) { break; } yun++; } while(yun <= 12); return yun - 1; }; this.make_lunar = function(year, month){ this.ssolar2lunar = new Array(); if(year<1881 || year>2050) { this.lunar_data.year=""; this.lunar_data.month=""; this.lunar_data.day=""; this.lunar_data.yoon=false; for(var i=0; i<31; i++) this.ssolar2lunar[i] = this.lunar_data; return false; } if( (year%400==0)|| ((year%4==0)&&(year%100!=0)) ){ this.month_last[1]=29; } else { this.month_last[1]=28; } var solar_day = 1; this.lunar_data = this.solar2lunar(year, month, solar_day); this.lunar_data.month--; // 계산을 위하여 월을 0부터로 변경 var one_lunar = {"year":"", "month":"", "day":"", "last":"", "yoon":false}; do{ one_lunar.year = this.lunar_data.year; one_lunar.month = this.lunar_data.month + 1; // 결과는 1월 부터이다. one_lunar.day = this.lunar_data.day; one_lunar.yoon = this.lunar_data.yoon; one_lunar.last = this.nDaysMonth(); this.ssolar2lunar[solar_day-1] = {"year":one_lunar.year, "month":one_lunar.month, "day":one_lunar.day, "last":one_lunar.last, "yoon":one_lunar.yoon}; if(this.lunar_data.day >= this.nDaysMonth()) { if(this.lunar_data.month < 11) { if((this.lunar_data.month == this.YunMonth()) && !this.lunar_data.yoon){ this.lunar_data.yoon = true; this.lunar_data.day = 1; } else { this.lunar_data.month++; this.lunar_data.yoon = false; this.lunar_data.day = 1; } } else { this.lunar_data.year++; this.lunar_data.month = 0; this.lunar_data.day = 1; } } else { this.lunar_data.day++; } }while(++solar_day <= this.month_last[month-1]); }; this.get_lunar = function(day){ day--; return this.solar2lunar[day]; } this.toString = function(){ if(this.ssolar2lunar.length>0){ var s = ''; for(var i=0; i { year: ' + this.ssolar2lunar[i].year + ', month: ' + this.ssolar2lunar[i].month + ', day: ' + this.ssolar2lunar[i].day + ', yoon: ' + this.ssolar2lunar[i].yoon + '}\n'; } return s; }else{ return ""; } } this.make_lunar(y, m); }; sc_DTcalender.addEvent(window, "mousedown", sc_DTcalender.mouseDown);