My97 DatePicker 4.5

   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 }

 

posted @ 2016-07-01 09:48  我是猴子  阅读(316)  评论(0)    收藏  举报