1 /*
2 * My97 DatePicker 4.5
3 * SITE: http://dp.my97.net
4 * BLOG: http://my97.cnblogs.com
5 * downlod:http://www.bvbsoft.com
6 * MAIL: smallcarrot@163.com
7 */
8 var $c;
9 if ($FF) {
10 Event.prototype.__defineSetter__("returnValue",
11 function($) {
12 if (!$) this.preventDefault();
13 return $
14 });
15 Event.prototype.__defineGetter__("srcElement",
16 function() {
17 var $ = this.target;
18 while ($.nodeType != 1) $ = $.parentNode;
19 return $
20 });
21 HTMLElement.prototype.attachEvent = function($, _) {
22 var A = $.replace(/on/, "");
23 _._ieEmuEventHandler = function($) {
24 window.event = $;
25 return _()
26 };
27 this.addEventListener(A, _._ieEmuEventHandler, false)
28 }
29 }
30 function My97DP() {
31 $c = this;
32 $dp.$w = window;
33 $dt = this.date = new DPDate();
34 this.QS = [];
35 $d = document.createElement("div");
36 $d.className = "WdateDiv";
37 $d.onmousedown = hideSel;
38 $d.innerHTML = "<div id=dpTitle><div style=\"float:left\" class=\"navImg NavImgll\"></div><div style=\"float:left\" class=\"navImg NavImgl\"></div><div style=\"float:left\"><div class=\"menuSel MMenu\" style=\"z-index:1\"></div><input class=yminput tabindex=1></div><div style=\"float:left\"><div class=\"menuSel YMenu\" style=\"z-index:1\"></div><input class=yminput tabindex=2></div><div style=\"float:right\" class=\"navImg NavImgrr\"></div><div style=\"float:right\" class=\"navImg NavImgr\"></div></div><div style=\"position:absolute;overflow:hidden\"></div><div></div><div id=dpTime><div class=\"menuSel hhMenu\" style=\"z-index:1\"></div><div class=\"menuSel mmMenu\" style=\"z-index:1\"></div><div class=\"menuSel ssMenu\" style=\"z-index:1\"></div><table cellspacing=0 cellpadding=0 border=0><tr><td rowspan=2><span id=dpTimeStr></span>聽<input class=tB maxlength=2 tabindex=3><input value=\":\" class=tm readonly><input class=tE maxlength=2 tabindex=4><input value=\":\" class=tm readonly><input class=tE maxlength=2 tabindex=5></td><td><button id=dpTimeUp></button></td></tr><tr><td><button id=dpTimeDown></button></td></tr></table></div><div id=dpQS></div><div id=dpControl><input class=dpButton id=dpClearInput type=button tabindex=6> <input class=dpButton id=dpTodayInput type=button tabindex=7> <input class=dpButton id=dpOkInput type=button tabindex=8></div>";
39 attachTabEvent($d,
40 function() {
41 hideSel()
42 });
43 _();
44 this.init();
45 $();
46 $d.MI.attachEvent("onkeydown", A);
47 $d.yI.attachEvent("onkeydown", A);
48 $d.MI.onfocus = function($) {
49 this.className = "yminputfocus";
50 this.value = getA(this, "realValue");
51 this.select();
52 $c._fM();
53 showB($d.MD)
54 };
55 $d.MI.onblur = function() {
56 var $;
57 if ($lastInput == this) {
58 $dt.M = pIntDef(this.value, $dt.M);
59 $ = true
60 }
61 c_M($dt.M, $);
62 this.className = "yminput";
63 hide($d.MD)
64 };
65 $d.yI.onfocus = function() {
66 this.className = "yminputfocus";
67 this.select();
68 $c._fy();
69 showB($d.yD)
70 };
71 $d.yI.onblur = function() {
72 var $;
73 if ($lastInput == this) {
74 $dt.y = pIntDef(this.value, $dt.y);
75 $ = true
76 }
77 c_y($dt.y, $);
78 this.className = "yminput";
79 hide($d.yD)
80 };
81 $d.HI.onfocus = function() {
82 $c.currFocus = this;
83 this.select();
84 $c._fH();
85 showB($d.HD)
86 };
87 $d.HI.onblur = function() {
88 var $;
89 if ($lastInput == this) {
90 $dt.H = pIntDef(this.value, $dt.H);
91 $ = true
92 }
93 c_H($dt.H, $);
94 hide($d.HD)
95 };
96 $d.mI.onfocus = function() {
97 $c.currFocus = this;
98 this.select();
99 $c._fm();
100 showB($d.mD)
101 };
102 $d.mI.onblur = function() {
103 var $;
104 if ($lastInput == this) {
105 $dt.m = pIntDef(this.value, $dt.m);
106 $ = true
107 }
108 c_m($dt.m, $);
109 hide($d.mD)
110 };
111 $d.sI.onfocus = function() {
112 $c.currFocus = this;
113 this.select();
114 $c._fs();
115 showB($d.sD)
116 };
117 $d.sI.onblur = function() {
118 var $;
119 if ($lastInput == this) {
120 $dt.s = pIntDef(this.value, $dt.s);
121 $ = true
122 }
123 c_s($dt.s, $);
124 hide($d.sD)
125 };
126 $d.HI.attachEvent("onkeydown", A);
127 $d.mI.attachEvent("onkeydown", A);
128 $d.sI.attachEvent("onkeydown", A);
129 $d.upButton.onclick = function() {
130 updownEvent(1)
131 };
132 $d.downButton.onmousedown = function() {
133 updownEvent( - 1)
134 };
135 $d.qsDiv.onclick = function() {
136 if ($d.qsDivSel.style.display != "block") {
137 $c._fillQS();
138 showB($d.qsDivSel)
139 } else hide($d.qsDivSel)
140 };
141 attachTabEvent($d.okI,
142 function() {
143 if ($dp.dd.style.display != "none") $d.MI.focus();
144 event.returnValue = false
145 });
146 document.body.appendChild($d);
147 function _() {
148 var A = $d.getElementsByTagName("div"),
149 $ = $d.getElementsByTagName("input"),
150 B = $d.getElementsByTagName("button"),
151 _ = $d.getElementsByTagName("span");
152 $d.navLeftImg = A[1];
153 $d.leftImg = A[2];
154 $d.rightImg = A[8];
155 $d.navRightImg = A[7];
156 $d.MI = $[0];
157 $d.yI = $[1];
158 $d.titleDiv = A[0];
159 $d.MD = A[4];
160 $d.yD = A[6];
161 $d.qsDivSel = A[9];
162 $d.dDiv = A[10];
163 $d.tDiv = A[11];
164 $d.HD = A[12];
165 $d.mD = A[13];
166 $d.sD = A[14];
167 $d.qsDiv = A[15];
168 $d.bDiv = A[16];
169 $d.HI = $[2];
170 $d.mI = $[4];
171 $d.sI = $[6];
172 $d.clearI = $[7];
173 $d.todayI = $[8];
174 $d.okI = $[9];
175 $d.upButton = B[0];
176 $d.downButton = B[1];
177 $d.timeSpan = _[0]
178 }
179 function $() {
180 $d.navLeftImg.onclick = function() {
181 $ny = $ny <= 0 ? $ny - 1 : -1;
182 if ($ny % 5 == 0) $d.yI.focus();
183 c_y($dt.y - 1)
184 };
185 $d.leftImg.onclick = function() {
186 var $ = $dt.M;
187 if ($ > 1) $ -= 1;
188 else {
189 $ = 12;
190 $dt.y -= 1
191 }
192 s_y($dt.y);
193 c_M($)
194 };
195 $d.rightImg.onclick = function() {
196 var $ = $dt.M;
197 if ($ < 12) $ += 1;
198 else {
199 $ = 1;
200 $dt.y += 1
201 }
202 s_y($dt.y);
203 c_M($)
204 };
205 $d.navRightImg.onclick = function() {
206 $ny = $ny >= 0 ? $ny + 1 : 1;
207 if ($ny % 5 == 0) $d.yI.focus();
208 c_y($dt.y + 1)
209 }
210 }
211 function A() {
212 var $ = event,
213 _ = ($.which == undefined) ? $.keyCode: $.which;
214 if (!$OPERA && !((_ >= 48 && _ <= 57) || (_ >= 96 && _ <= 105) || _ == 8 || _ == 46 || _ == 37 || _ == 39 || _ == 9)) $.returnValue = false;
215 $lastInput = $.srcElement
216 }
217 }
218 My97DP.prototype = {
219 init: function() {
220 $ny = 0;
221 $dp.cal = this;
222 if ($dp.readOnly && $dp.el.readOnly != null) {
223 $dp.el.readOnly = true;
224 $dp.el.blur()
225 }
226 $();
227 this.dateFmt = $dp.dateFmt;
228 this._dealFmt();
229 this.autoPickDate = $dp.autoPickDate || (($dp.has.st) ? false: true);
230 $tdt = this.tdate = new DPDate();
231 this.ddateRe = this._initRe("disabledDates");
232 this.ddayRe = this._initRe("disabledDays");
233 this.loadDate();
234 this.minDate = this.doCustomDate($dp.minDate, $dp.minDate != $dp.defMinDate ? $dp.realFmt: $dp.realFullFmt, $dp.defMinDate);
235 this.maxDate = this.doCustomDate($dp.maxDate, $dp.maxDate != $dp.defMaxDate ? $dp.realFmt: $dp.realFullFmt, $dp.defMaxDate);
236 if (this.minDate.compareWith(this.maxDate) > 0) $dp.errMsg = $lang.err_1;
237 this._makeDateInRange();
238 $sdt = this.sdate = new DPDate($dt.y, $dt.M, $dt.d, $dt.H, $dt.m, $dt.s);
239 if (!$dp.alwaysUseStartDate && $dp.el[$dp.elProp] != "") this.update();
240 this.oldValue = $dp.el[$dp.elProp];
241 setA($d.MI, "realValue", $dt.M);
242 $d.MI.value = $lang.aMonStr[$dt.M - 1];
243 $d.yI.value = $dt.y;
244 $d.HI.value = $dt.H;
245 $d.mI.value = $dt.m;
246 $d.sI.value = $dt.s;
247 $d.timeSpan.innerHTML = $lang.timeStr;
248 $d.clearI.value = $lang.clearStr;
249 $d.todayI.value = $lang.todayStr;
250 $d.okI.value = $lang.okStr;
251 this.initShowAndHide();
252 this.initBtn();
253 if ($dp.errMsg) alert($dp.errMsg);
254 this.redraw();
255 hideSel();
256 if ($dp.el.nodeType == 1) $dp.attachEvent($dp.el, "onkeydown",
257 function($) {
258 if ($dp.el == ($.srcElement || $.target)) {
259 k = ($.which == undefined) ? $.keyCode: $.which;
260 if (k == 9) if (!$dp.cal.checkAndUpdate()) {
261 $.preventDefault ? $.preventDefault() : $.returnValue = false;
262 $dp.cal.mark(false, 2);
263 $dp.show()
264 } else {
265 $dp.cal.mark(true);
266 $dp.hide()
267 }
268 }
269 });
270 function $() {
271 var _, $;
272 for (_ = 0; ($ = document.getElementsByTagName("link")[_]); _++) if (getA($, "rel").indexOf("style") != -1 && getA($, "title")) {
273 $.disabled = true;
274 if (getA($, "title") == $dp.skin) $.disabled = false
275 }
276 }
277 },
278 splitDate: function(J, C, P, E, B, G, F, K, L) {
279 var $;
280 if (J && J.loadDate) $ = J;
281 else {
282 $ = new DPDate();
283 if (J != "") {
284 C = C || $dp.dateFmt;
285 var H, O = 0,
286 A = /yyyy|yyy|yy|y|MM|M|dd|d|HH|H|mm|m|ss|s/g,
287 N = J.split(/\W+/),
288 _ = C.match(A);
289 A.lastIndex = 0;
290 if (!L && N.length != _.length) {
291 var D = 0,
292 M = "^";
293 while ((N = A.exec(C)) !== null) {
294 D = N.index - D;
295 M += (D == 0) ? "": (".{" + D + "}");
296 D = A.lastIndex;
297 switch (N[0]) {
298 case "yyyy":
299 M += "(\\d{4})";
300 break;
301 case "yyy":
302 M += "(\\d{3})";
303 break;
304 default:
305 M += "(\\d\\d?)";
306 break
307 }
308 }
309 M += ".*$";
310 N = new RegExp(M).exec(J);
311 O = 1
312 }
313 if (N) {
314 for (H = 0; H < _.length; H++) {
315 var I = N[H + O];
316 if (I) switch (_[H]) {
317 case "y":
318 case "yy":
319 I = pIntDef(I, 0);
320 if (I < 50) I += 2000;
321 else I += 1900;
322 $.y = I;
323 break;
324 case "yyy":
325 $.y = pIntDef(I, 0) + $dp.yearOffset;
326 break;
327 default:
328 $[_[H].slice( - 1)] = I;
329 break
330 }
331 }
332 } else $.d = 32
333 }
334 }
335 $.coverDate(P, E, B, G, F, K);
336 return $
337 },
338 _initRe: function(_) {
339 var B, $ = $dp[_],
340 A = "(?:";
341 if ($) {
342 for (B = 0; B < $.length; B++) {
343 A += this.doExp($[B]);
344 if (B != $.length - 1) A += "|"
345 }
346 A = new RegExp(A + ")")
347 } else A = null;
348 return A
349 },
350 update: function() {
351 var $ = this.getDateStr();
352 if ($dp.el[$dp.elProp] != $) $dp.el[$dp.elProp] = $;
353 this.setRealValue()
354 },
355 setRealValue: function($) {
356 var _ = $dp.$($dp.vel),
357 $ = rtn($, this.getDateStr($dp.realFmt));
358 if (_) _.value = $;
359 setA($dp.el, "realValue", $)
360 },
361 doExp: function(s) {
362 var ps = "yMdHms",
363 arr, tmpEval, re = /#\{(.*?)\}/;
364 s = s + "";
365 for (var i = 0; i < ps.length; i++) s = s.replace("%" + ps.charAt(i), this.getP(ps.charAt(i), null, $tdt));
366 if (s.substring(0, 3) == "#F{") {
367 s = s.substring(3, s.length - 1);
368 if (s.indexOf("return ") < 0) s = "return " + s;
369 s = $dp.win.eval("new Function(\"" + s + "\");");
370 s = s()
371 } else while ((arr = re.exec(s)) != null) {
372 arr.lastIndex = arr.index + arr[1].length + 2;
373 tmpEval = pInt(eval(arr[1]));
374 if (tmpEval < 0) tmpEval = "9700" + ( - tmpEval);
375 s = s.substring(0, arr.index) + tmpEval + s.substring(arr.lastIndex + 1)
376 }
377 return s
378 },
379 doCustomDate: function(A, B, _) {
380 var $;
381 A = this.doExp(A);
382 if (!A || A == "") A = _;
383 if (typeof A == "object") $ = A;
384 else {
385 $ = this.splitDate(A, B, null, null, 1, 0, 0, 0, true);
386 $.y = ("" + $.y).replace(/^9700/, "-");
387 $.M = ("" + $.M).replace(/^9700/, "-");
388 $.d = ("" + $.d).replace(/^9700/, "-");
389 $.H = ("" + $.H).replace(/^9700/, "-");
390 $.m = ("" + $.m).replace(/^9700/, "-");
391 $.s = ("" + $.s).replace(/^9700/, "-");
392 if (A.indexOf("%ld") >= 0) {
393 A = A.replace(/%ld/g, "0");
394 $.d = 0;
395 $.M = pInt($.M) + 1
396 }
397 $.refresh()
398 }
399 return $
400 },
401 loadDate: function() {
402 var _, $;
403 if ($dp.alwaysUseStartDate || ($dp.startDate != "" && $dp.el[$dp.elProp] == "")) {
404 _ = this.doExp($dp.startDate);
405 $ = $dp.realFmt
406 } else {
407 _ = $dp.el[$dp.elProp];
408 $ = this.dateFmt
409 }
410 $dt.loadFromDate(this.splitDate(_, $));
411 if ($dp.has.sd && !this.isDate($dt)) {
412 $dt.y = $tdt.y;
413 $dt.M = $tdt.M;
414 $dt.d = $tdt.d
415 }
416 if ($dp.has.st && !this.isTime($dt)) {
417 $dt.H = $tdt.H;
418 $dt.m = $tdt.m;
419 $dt.s = $tdt.s
420 }
421 },
422 isDate: function($) {
423 if ($.y != null) $ = doStr($.y, 4) + "-" + $.M + "-" + $.d;
424 return $.match(/^((\d{2}(([02468][048])|([13579][26]))[\-\/\s]?((((0?[13578])|(1[02]))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\-\/\s]?((0?[1-9])|([1-2][0-9])))))|(\d{2}(([02468][1235679])|([13579][01345789]))[\-\/\s]?((((0?[13578])|(1[02]))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\-\/\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))(\s(((0?[0-9])|([1-2][0-3]))\:([0-5]?[0-9])((\s)|(\:([0-5]?[0-9])))))?$/)
425 },
426 isTime: function($) {
427 if ($.H != null) $ = $.H + ":" + $.m + ":" + $.s;
428 return $.match(/^([0-9]|([0-1][0-9])|([2][0-3])):([0-9]|([0-5][0-9])):([0-9]|([0-5][0-9]))$/)
429 },
430 _makeDateInRange: function() {
431 var _ = this.checkRange(),
432 A = true;
433 if (_ != 0) {
434 A = false;
435 var $;
436 if (_ > 0) $ = this.maxDate;
437 else $ = this.minDate;
438 if ($dp.has.sd) {
439 $dt.y = $.y;
440 $dt.M = $.M;
441 $dt.d = $.d
442 }
443 if ($dp.has.st) {
444 $dt.H = $.H;
445 $dt.m = $.m;
446 $dt.s = $.s
447 }
448 }
449 return A
450 },
451 checkRange: function(A, $) {
452 $ = $ || $dt;
453 var _ = $.compareWith(this.minDate, A);
454 if (_ > 0) {
455 _ = $.compareWith(this.maxDate, A);
456 if (_ < 0) _ = 0
457 }
458 return _
459 },
460 checkValid: function($, A, B) {
461 A = A || $dp.has.minUnit;
462 var _ = this.checkRange(A, $);
463 if (_ == 0) {
464 if (A == "d" && B == null) B = new Date($.y, $.M - 1, $.d).getDay();
465 _ = !this.testDay(B) && !this.testDate($)
466 } else _ = false;
467 return _
468 },
469 checkAndUpdate: function() {
470 var _ = $dp.el,
471 A = this,
472 $ = $dp.el[$dp.elProp];
473 if ($ != null) {
474 if ($ != "" && !$dp.readOnly) A.date.loadFromDate(A.splitDate($, A.dateFmt));
475 if ($ == "" || (A.isDate(A.date) && A.isTime(A.date) && A.checkValid(A.date))) {
476 if ($ != "") A.update();
477 else A.setRealValue("")
478 } else return false
479 }
480 return true
481 },
482 close: function() {
483 hideSel();
484 if (this.checkAndUpdate()) {
485 this.mark(true);
486 $dp.hide()
487 } else this.mark(false)
488 },
489 _fd: function() {
490 var F, D, E, L, H = new sb(),
491 G,
492 A,
493 I,
494 C,
495 K = "",
496 $ = "",
497 _ = new DPDate($dt.y, $dt.M, $dt.d, 0, 0, 0),
498 J = _.y,
499 B = _.M;
500 G = new Date(J, B - 1, 1).getDay();
501 A = 1 - G;
502 I = new Date(J, B, 0).getDay();
503 C = new Date(J, B, 0).getDate();
504 H.a("<table class=WdayTable width=100% border=0 cellspacing=0 cellpadding=0>");
505 H.a("<tr class=MTitle align=center>");
506 F = $dp.isShowWeek ? 0 : 1;
507 while (F < 8) H.a("<td>" + $lang.aWeekStr[F++] + "</td>");
508 H.a("</tr>");
509 for (F = 1, D = A; F < 7; F++) {
510 H.a("<tr>");
511 for (E = 0; E < 7; E++) {
512 _.loadDate(J, B, D++);
513 _.refresh();
514 if (_.M == B) {
515 L = true;
516 if (_.compareWith($sdt, "d") == 0) K = "Wselday";
517 else if (_.compareWith($tdt, "d") == 0) K = "Wtoday";
518 else K = (($dp.highLineWeekDay && (E == 0 || E == 6)) ? "Wwday": "Wday");
519 $ = (($dp.highLineWeekDay && (E == 0 || E == 6)) ? "WwdayOn": "WdayOn")
520 } else if ($dp.isShowOthers) {
521 L = true;
522 K = "WotherDay";
523 $ = "WotherDayOn"
524 } else L = false;
525 if ($dp.isShowWeek && E == 0 && (F < 4 || L)) H.a("<td class=Wweek>" + getWeek(_, 1) + "</td>");
526 H.a("<td align=center ");
527 if (L) {
528 if (this.checkValid(_, "d", E)) {
529 H.a("onclick=\"day_Click(" + _.y + "," + _.M + "," + _.d + ");\" ");
530 H.a("onmouseover=\"this.className='" + $ + "'\" ");
531 H.a("onmouseout=\"this.className='" + K + "'\" ")
532 } else K = "WinvalidDay";
533 H.a("class=" + K);
534 H.a(">" + _.d + "</td>")
535 } else H.a("></td>")
536 }
537 H.a("</tr>")
538 }
539 H.a("</table>");
540 return H.j()
541 },
542 testDate: function(_) {
543 var $ = this.ddateRe && this.ddateRe.test(this.getDateStr($dp.realFmt, _));
544 if ($dp.disabledDates && $dp.opposite) $ = !$;
545 return $
546 },
547 testDay: function(_) {
548 var $ = this.ddayRe && this.ddayRe.test(_);
549 if ($dp.disabledDays && $dp.opposite) $ = !$;
550 return $
551 },
552 _f: function(p, c, r, e) {
553 var s = new sb();
554 bak = $dt[p];
555 s.a("<table cellspacing=0 cellpadding=3 border=0");
556 for (var i = 0; i < r; i++) {
557 s.a("<tr nowrap=\"nowrap\">");
558 for (var j = 0; j < c; j++) {
559 s.a("<td nowrap ");
560 $dt[p] = eval(e);
561 if (this.checkValid($dt, p)) {
562 s.a("class='menu' onmouseover=\"this.className='menuOn'\" onmouseout=\"this.className='menu'\" onmousedown=\"");
563 s.a("hide($d." + p + "D);c_" + p + "(" + $dt[p] + ");$d." + p + "I.blur()\"")
564 } else s.a("class='invalidMenu'");
565 s.a(">" + (p == "M" ? $lang.aMonStr[$dt[p] - 1] : $dt[p]) + "</td>")
566 }
567 s.a("</tr>")
568 }
569 s.a("</table>");
570 $dt[p] = bak;
571 return s.j()
572 },
573 _fM: function() {
574 $d.MD.innerHTML = this._f("M", 2, 6, "i+j*6+1")
575 },
576 _fy: function(_) {
577 var B, A = $dt.y,
578 $ = new sb();
579 _ = rtn(_, A - 5);
580 $.a(this._f("y", 2, 5, _ + "+i+j*5"));
581 $.a("<table cellspacing=0 cellpadding=3 border=0 align=center><tr><td ");
582 $.a(this.minDate.y < _ ? "class='menu' onmouseover=\"this.className='menuOn'\" onmouseout=\"this.className='menu'\" onmousedown='if(event.preventDefault)event.preventDefault();event.cancelBubble=true;$c._fy(" + (_ - 10) + ")'": "class='invalidMenu'");
583 $.a(">\u2190</td><td class='menu' onmouseover=\"this.className='menuOn'\" onmouseout=\"this.className='menu'\" onmousedown=\"hide($d.yD);$d.yI.blur();\">\xd7</td><td ");
584 $.a(this.maxDate.y > _ + 10 ? "class='menu' onmouseover=\"this.className='menuOn'\" onmouseout=\"this.className='menu'\" onmousedown='if(event.preventDefault)event.preventDefault();event.cancelBubble=true;$c._fy(" + (_ + 10) + ")'": "class='invalidMenu'");
585 $.a(">\u2192</td></tr></table>");
586 $d.yD.innerHTML = $.j()
587 },
588 _fHMS: function(A, _, $) {
589 $d[A + "D"].innerHTML = this._f(A, 6, _, $)
590 },
591 _fH: function() {
592 this._fHMS("H", 4, "i * 6 + j")
593 },
594 _fm: function() {
595 this._fHMS("m", 2, "i * 30 + j * 5")
596 },
597 _fs: function() {
598 this._fHMS("s", 1, "j * 10")
599 },
600 _fillQS: function(A) {
601 this.initQS();
602 var _ = $d.qsDivSel,
603 C = _.style,
604 $ = new sb();
605 $.a("<table class=WdayTable width=\"" + $d.dDiv.offsetWidth + "px\" height=\"" + $d.dDiv.offsetHeight + "px\" border=0 cellspacing=0 cellpadding=0>");
606 $.a("<tr class=MTitle><td><div style=\"float:left\">" + $lang.quickStr + "</div>");
607 if (!A) $.a("<div style=\"float:right;cursor:pointer\" onclick=\"hideSel();hide($d.qsDivSel);\">\xd7</div>");
608 $.a("</td></tr>");
609 for (var B = 0; B < this.QS.length; B++) if (this.QS[B]) {
610 $.a("<tr><td nowrap='nowrap' class='menu' onmouseover=\"this.className='menuOn'\" onmouseout=\"this.className='menu'\" onmousedown=\"");
611 $.a("hideSel();hide($d.qsDivSel);day_Click(" + this.QS[B].y + ", " + this.QS[B].M + ", " + this.QS[B].d + "," + this.QS[B].H + "," + this.QS[B].m + "," + this.QS[B].s + ");\">");
612 $.a("聽" + this.getDateStr(null, this.QS[B]));
613 $.a("</td></tr>")
614 } else $.a("<tr><td class='menu'>聽</td></tr>");
615 $.a("</table>");
616 _.innerHTML = $.j()
617 },
618 _dealFmt: function() {
619 $(/yyyy|yyy|yy|y/);
620 $(/MM|M/);
621 $(/dd|d/);
622 $(/HH|H/);
623 $(/mm|m/);
624 $(/ss|s/);
625 $dp.has.sd = ($dp.has.y || $dp.has.M || $dp.has.d) ? true: false;
626 $dp.has.st = ($dp.has.H || $dp.has.m || $dp.has.s) ? true: false;
627 $dp.realFullFmt = $dp.realFullFmt.replace(/%Date/, $dp.realDateFmt).replace(/%Time/, $dp.realTimeFmt);
628 if ($dp.has.sd) {
629 if ($dp.has.st) $dp.realFmt = $dp.realFullFmt;
630 else $dp.realFmt = $dp.realDateFmt
631 } else $dp.realFmt = $dp.realTimeFmt;
632 function $(_) {
633 var $ = (_ + "").slice(1, 2);
634 $dp.has[$] = _.exec($dp.dateFmt) ? ($dp.has.minUnit = $, true) : false
635 }
636 },
637 initShowAndHide: function() {
638 var $ = false;
639 $dp.has.y ? ($ = true, show($d.yI, $d.navLeftImg, $d.navRightImg)) : hide($d.yI, $d.navLeftImg, $d.navRightImg);
640 $dp.has.M ? ($ = true, show($d.MI, $d.leftImg, $d.rightImg)) : hide($d.MI, $d.leftImg, $d.rightImg);
641 $ ? show($d.titleDiv) : hide($d.titleDiv);
642 if ($dp.has.st) {
643 show($d.tDiv);
644 disHMS($d.HI, $dp.has.H);
645 disHMS($d.mI, $dp.has.m);
646 disHMS($d.sI, $dp.has.s)
647 } else hide($d.tDiv);
648 shorH($d.clearI, $dp.isShowClear);
649 shorH($d.todayI, $dp.isShowToday);
650 shorH($d.qsDiv, ($dp.has.d && $dp.qsEnabled));
651 if ($dp.eCont) hide($d.bDiv)
652 },
653 mark: function(B, D) {
654 var A = $dp.el,
655 _ = $FF ? "class": "className";
656 if (B) C(A);
657 else {
658 if (D == null) D = $dp.errDealMode;
659 switch (D) {
660 case 0:
661 if (confirm($lang.errAlertMsg)) {
662 A[$dp.elProp] = this.oldValue;
663 C(A)
664 } else $(A);
665 break;
666 case 1:
667 A[$dp.elProp] = this.oldValue;
668 C(A);
669 break;
670 case 2:
671 $(A);
672 break
673 }
674 }
675 function C(A) {
676 var $ = A.className.replace(/WdateFmtErr/g, "");
677 if (A.className != $) setA(A, _, $)
678 }
679 function $($) {
680 setA($, _, $.className + " WdateFmtErr")
681 }
682 },
683 getP: function(C, _, $) {
684 $ = $ || $dt;
685 var E, B, D, A;
686 switch (C.charAt(0)) {
687 case "w":
688 A = getDay($);
689 break;
690 case "D":
691 B = [C];
692 A = $lang.aWeekStr[getDay($) + 1];
693 break;
694 case "W":
695 A = getWeek($);
696 break;
697 case "y":
698 B = ["yyyy", "yyy", "yy", "y"];
699 break;
700 default:
701 break
702 }
703 B = B || [C + C, C];
704 _ = _ || B[0];
705 for (E = 0; E < B.length; E++) {
706 A = rtn(A, $[C]);
707 D = B[E];
708 if (_.indexOf(D) >= 0) _ = _.replace(D, doStr((C == "y" && D.length < 4) ? (D.length < 3 ? $.y % 100 : ($.y + 2000 - $dp.yearOffset) % 1000) : A, D.length))
709 }
710 return _
711 },
712 getDateStr: function(_, $) {
713 $ = $ || $dt;
714 _ = _ || this.dateFmt;
715 var A = "yMdHmswWD";
716 for (var B = 0; B < A.length; B++) _ = this.getP(A.charAt(B), _, $);
717 return _
718 },
719 redraw: function() {
720 $d.dDiv.innerHTML = this._fd();
721 if (!$dp.has.d) {
722 this._fillQS(true);
723 showB($d.qsDivSel)
724 } else hide($d.qsDivSel);
725 this.autoSize()
726 },
727 autoSize: function() {
728 var $ = parent.document.getElementsByTagName("iframe");
729 for (var _ = 0; _ < $.length; _++) if ($[_].contentWindow == window) {
730 $[_].style.width = $d.offsetWidth + "px";
731 $[_].style.height = $d.offsetHeight + "px"
732 }
733 },
734 pickDate: function(D, A, $, C, B, _) {
735 $dt.y = rtn(D, $dt.y);
736 $dt.M = rtn(A, $dt.M);
737 $dt.d = rtn($, $dt.d);
738 if ($dp.has.st) {
739 $dt.H = rtn(C, $dt.H);
740 $dt.m = rtn(B, $dt.m);
741 $dt.s = rtn(_, $dt.s)
742 }
743 while (!this.isDate($dt) && $dt.d > 0) $dt.d--;
744 this.update();
745 if (!$dp.eCont) if (this.checkValid($dt)) {
746 $c.mark(true);
747 hide($dp.dd)
748 } else $c.mark(false);
749 if ($dp.onpicked) $dp.onpicked.call($dp.el, $dp);
750 else if (this.oldValue != $dp.el[$dp.elProp] && $dp.el.onchange) fireEvent($dp.el, "change")
751 },
752 initBtn: function() {
753 $d.clearI.onclick = function() {
754 var $;
755 if ($dp.onclearing) $ = $dp.onclearing.call($dp.el, $dp);
756 if (!$) {
757 $dp.el[$dp.elProp] = "";
758 $c.setRealValue("");
759 hide($dp.dd);
760 if ($dp.oncleared) $dp.oncleared.call($dp.el, $dp);
761 else if ($c.oldValue != $dp.el[$dp.elProp] && $dp.el.onchange) fireEvent($dp.el, "change")
762 }
763 };
764 $d.okI.onclick = function() {
765 day_Click()
766 };
767 if ($dp.el[$dp.elProp] == "") $d.okI.value = $lang.okStr;
768 else $d.okI.value = $lang.updateStr;
769 if (this.checkValid($tdt)) {
770 $d.todayI.disabled = false;
771 $d.todayI.onclick = function() {
772 var $ = $c.tdate;
773 day_Click($.y, $.M, $.d, $.H, $.m, $.s)
774 }
775 } else $d.todayI.disabled = true
776 },
777 initQS: function() {
778 var H, G, A, F, C = [],
779 $ = 5,
780 E = $dp.quickSel.length,
781 _ = $dp.has.minUnit;
782 if (E > $) E = $;
783 else if (_ == "m" || _ == "s") C = [0, 15, 30, 45, 59, -60, -45, -30, -15, -1];
784 else for (H = 0; H < $ * 2; H++) C[H] = $dt[_] - $ + 1 + H;
785 for (H = G = 0; H < E; H++) {
786 A = this.doCustomDate($dp.quickSel[H]);
787 if (this.checkValid(A)) this.QS[G++] = A
788 }
789 var B = "yMdHms",
790 D = [1, 1, 1, 0, 0, 0];
791 for (H = 0; H <= B.indexOf(_); H++) D[H] = $dt[B.charAt(H)];
792 for (H = 0; G < $; H++) if (H < C.length) {
793 A = new DPDate(D[0], D[1], D[2], D[3], D[4], D[5]);
794 A[_] = C[H];
795 A.refresh();
796 if (this.checkValid(A)) this.QS[G++] = A
797 } else this.QS[G++] = null
798 }
799 };
800 function sb() {
801 this.s = new Array();
802 this.i = 0;
803 this.a = function($) {
804 this.s[this.i++] = $
805 };
806 this.j = function() {
807 return this.s.join("")
808 }
809 }
810 function getWeek($, C) {
811 C = C || 0;
812 var _ = new Date($.y, $.M - 1, $.d + C),
813 B = _.getDay();
814 _.setDate(_.getDate() - (B + 6) % 7 + 3);
815 var A = _.valueOf();
816 _.setMonth(0);
817 _.setDate(4);
818 return Math.round((A - _.valueOf()) / (7 * 86400000)) + 1
819 }
820 function getDay($) {
821 var _ = new Date($.y, $.M - 1, $.d);
822 return _.getDay()
823 }
824 function show() {
825 setDisp(arguments, "")
826 }
827 function showB() {
828 setDisp(arguments, "block")
829 }
830 function hide() {
831 setDisp(arguments, "none")
832 }
833 function setDisp(_, $) {
834 for (i = 0; i < _.length; i++) _[i].style.display = $
835 }
836 function shorH(_, $) {
837 $ ? show(_) : hide(_)
838 }
839 function disHMS(_, $) {
840 if ($) _.disabled = "";
841 else {
842 _.disabled = "disabled";
843 _.value = "00"
844 }
845 }
846 function c_y(_, $) {
847 if ($ || _ != $dt.y) {
848 $dt.y = _;
849 dealRange("y");
850 $c.redraw()
851 }
852 }
853 function c_M(_, $) {
854 _ = makeInRange(_, 1, 12);
855 if ($ || _ != $dt.M) {
856 $dt.M = _;
857 dealRange("M");
858 $c.redraw()
859 } else s_M(_)
860 }
861 function day_Click(F, A, $, D, B, _) {
862 var C;
863 if ($dp.onpicking) C = $dp.onpicking.call($dp.el, $dp);
864 if (!C) {
865 var E = $sdt.y == F && $sdt.M == A && $sdt.d == $;
866 if (!E && arguments.length != 0) {
867 $sdt.y = F;
868 $sdt.M = A;
869 s_y(F);
870 s_M(A);
871 c_d($, true)
872 }
873 if ($c.autoPickDate || E || arguments.length == 0) $c.pickDate(F, A, $, rtn(D, $d.HI.value), rtn(B, $d.mI.value), rtn(_, $d.sI.value))
874 }
875 }
876 function c_d($, _) {
877 if (_ || $ != $dt.d) {
878 $dt.d = $;
879 dealRange("d");
880 $c.redraw()
881 }
882 }
883 function c_H(_, $) {
884 _ = makeInRange(_, 0, 23);
885 if ($ || _ != $dt.H) {
886 $dt.H = _;
887 dealRange("H")
888 }
889 }
890 function c_m(_, $) {
891 _ = makeInRange(_, 0, 59);
892 if ($ || _ != $dt.m) {
893 $dt.m = _;
894 dealRange("m")
895 }
896 }
897 function c_s(_, $) {
898 _ = makeInRange(_, 0, 59);
899 if ($ || _ != $dt.s) {
900 $dt.s = _;
901 dealRange("s")
902 }
903 }
904 function dealRange(type) {
905 var func, rv, v;
906 func = "s_" + type + "($dt." + type + ")";
907 rv = $c.checkRange();
908 if (rv == 0) eval(func);
909 else if (rv < 0) _setAll($c.minDate);
910 else if (rv > 0) _setAll($c.maxDate);
911 function _setAll($) {
912 s_y($.y);
913 s_M($.M);
914 s_d($.d);
915 if ($dp.has.st) {
916 s_H($.H);
917 s_m($.m);
918 s_s($.s)
919 }
920 }
921 }
922 function s_y($) {
923 $dt.y = $d.yI.value = $
924 }
925 function s_M($) {
926 $dt.M = $;
927 setA($d.MI, "realValue", $);
928 $d.MI.value = $lang.aMonStr[$ - 1]
929 }
930 function s_d($) {
931 $sdt.d = $dt.d = $
932 }
933 function s_H($) {
934 $dt.H = $d.HI.value = $
935 }
936 function s_m($) {
937 $dt.m = $d.mI.value = $
938 }
939 function s_s($) {
940 $dt.s = $d.sI.value = $
941 }
942 function setA(A, _, $) {
943 if (A.setAttribute) A.setAttribute(_, $)
944 }
945 function getA(_, $) {
946 return _.getAttribute($)
947 }
948 function makeInRange(_, $, A) {
949 if (_ < $) _ = $;
950 else if (_ > A) _ = A;
951 return _
952 }
953 function attachTabEvent($, _) {
954 $.attachEvent("onkeydown",
955 function() {
956 var $ = event,
957 A = ($.which == undefined) ? $.keyCode: $.which;
958 if (A == 9) _()
959 })
960 }
961 function doStr($, _) {
962 $ = $ + "";
963 while ($.length < _) $ = "0" + $;
964 return $
965 }
966 function hideSel() {
967 hide($d.yD, $d.MD, $d.HD, $d.mD, $d.sD)
968 }
969 function updownEvent($) {
970 if ($c.currFocus == undefined) $c.currFocus = $d.HI;
971 switch ($c.currFocus) {
972 case $d.HI:
973 c_H($dt.H + $);
974 break;
975 case $d.mI:
976 c_m($dt.m + $);
977 break;
978 case $d.sI:
979 c_s($dt.s + $);
980 break
981 }
982 }
983 function DPDate(D, A, $, C, B, _) {
984 this.loadDate = function(E, B, _, D, C, A) {
985 var $ = new Date();
986 this.y = pIntDef(E, $.getFullYear());
987 this.M = pIntDef(B, $.getMonth() + 1);
988 this.d = pIntDef(_, $.getDate());
989 this.H = pIntDef(D, $.getHours());
990 this.m = pIntDef(C, $.getMinutes());
991 this.s = pIntDef(A, $.getSeconds())
992 };
993 this.loadFromDate = function($) {
994 if ($ == null) return;
995 this.loadDate($.y, $.M, $.d, $.H, $.m, $.s)
996 };
997 this.coverDate = function(E, B, _, D, C, A) {
998 var $ = new Date();
999 this.y = pIntDef(this.y, rtn(E, $.getFullYear()));
1000 this.M = pIntDef(this.M, rtn(B, $.getMonth() + 1));
1001 this.d = $dp.has.d ? pIntDef(this.d, rtn(_, $.getDate())) : 1;
1002 this.H = pIntDef(this.H, rtn(D, $.getHours()));
1003 this.m = pIntDef(this.m, rtn(C, $.getMinutes()));
1004 this.s = pIntDef(this.s, rtn(A, $.getSeconds()))
1005 };
1006 this.compareWith = function($, C) {
1007 var A = "yMdHms",
1008 _, B;
1009 C = A.indexOf(C);
1010 C = C >= 0 ? C: 5;
1011 for (var D = 0; D <= C; D++) {
1012 B = A.charAt(D);
1013 _ = this[B] - $[B];
1014 if (_ > 0) return 1;
1015 else if (_ < 0) return - 1
1016 }
1017 return 0
1018 };
1019 this.refresh = function() {
1020 var $ = new Date(this.y, this.M - 1, this.d, this.H, this.m, this.s);
1021 this.y = $.getFullYear();
1022 this.M = $.getMonth() + 1;
1023 this.d = $.getDate();
1024 this.H = $.getHours();
1025 this.m = $.getMinutes();
1026 this.s = $.getSeconds();
1027 return ! isNaN(this.y)
1028 };
1029 this.loadDate(D, A, $, C, B, _)
1030 }
1031 function pInt($) {
1032 return parseInt($, 10)
1033 }
1034 function pIntDef(_, $) {
1035 _ = pInt(_);
1036 if (isNaN(_)) _ = $;
1037 return _
1038 }
1039 function rtn($, _) {
1040 return $ == null ? _: $
1041 }
1042 function fireEvent(A, $) {
1043 if ($IE) A.fireEvent("on" + $);
1044 else {
1045 var _ = document.createEvent("HTMLEvents");
1046 _.initEvent($, true, true);
1047 A.dispatchEvent(_)
1048 }
1049 }