bootstrap-datetimepicker.min.js 65.3 KB
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463
!function (e) {
    if (!("indexOf" in Array.prototype)) {
        Array.prototype.indexOf = function (k, j) {
            if (j === undefined) {
                j = 0
            }
            if (j < 0) {
                j += this.length
            }
            if (j < 0) {
                j = 0
            }
            for (var l = this.length; j < l; j++) {
                if (j in this && this[j] === k) {
                    return j
                }
            }
            return -1
        }
    }
    function b(k) {
        var j = e(k);
        var i = j.add(j.parents());
        var l = false;
        i.each(function () {
            if (e(this).css("position") === "fixed") {
                l = true;
                return false
            }
        });
        return l
    }

    function h() {
        return new Date(Date.UTC.apply(Date, arguments))
    }

    function c() {
        var i = new Date();
        return h(i.getUTCFullYear(), i.getUTCMonth(), i.getUTCDate(), i.getUTCHours(), i.getUTCMinutes(), i.getUTCSeconds(), 0)
    }

    var g = function (k, j) {
        var m = this;
        this.element = e(k);
        this.container = j.container || "body";
        this.language = j.language || this.element.data("date-language") || "en";
        this.language = this.language in f ? this.language : this.language.split("-")[0];
        this.language = this.language in f ? this.language : "en";
        this.isRTL = f[this.language].rtl || false;
        this.formatType = j.formatType || this.element.data("format-type") || "standard";
        this.format = d.parseFormat(j.format || this.element.data("date-format") || f[this.language].format || d.getDefaultFormat(this.formatType, "input"), this.formatType);
        this.isInline = false;
        this.isVisible = false;
        this.isInput = this.element.is("input");
        this.fontAwesome = j.fontAwesome || this.element.data("font-awesome") || false;
        this.bootcssVer = j.bootcssVer || (this.isInput ? (this.element.is(".form-control") ? 3 : 2) : (this.bootcssVer = this.element.is(".input-group") ? 3 : 2));
        this.component = this.element.is(".date") ? (this.bootcssVer == 3 ? this.element.find(".input-group-addon .glyphicon-th, .input-group-addon .glyphicon-time, .input-group-addon .glyphicon-calendar, .input-group-addon .glyphicon-calendar, .input-group-addon .fa-calendar, .input-group-addon .fa-clock-o").parent() : this.element.find(".add-on .icon-th, .add-on .icon-time, .add-on .icon-calendar, .add-on .fa-calendar, .add-on .fa-clock-o").parent()) : false;
        this.componentReset = this.element.is(".date") ? (this.bootcssVer == 3 ? this.element.find(".input-group-addon .glyphicon-remove, .input-group-addon .fa-times").parent() : this.element.find(".add-on .icon-remove, .add-on .fa-times").parent()) : false;
        this.hasInput = this.component && this.element.find("input").length;
        if (this.component && this.component.length === 0) {
            this.component = false
        }
        this.linkField = j.linkField || this.element.data("link-field") || false;
        this.linkFormat = d.parseFormat(j.linkFormat || this.element.data("link-format") || d.getDefaultFormat(this.formatType, "link"), this.formatType);
        this.minuteStep = j.minuteStep || this.element.data("minute-step") || 5;
        this.pickerPosition = j.pickerPosition || this.element.data("picker-position") || "bottom-right";
        this.showMeridian = j.showMeridian || this.element.data("show-meridian") || false;
        this.initialDate = j.initialDate || new Date();
        this.zIndex = j.zIndex || this.element.data("z-index") || undefined;
        this.icons = {
            leftArrow: this.fontAwesome ? "fa-arrow-left" : (this.bootcssVer === 3 ? "glyphicon-arrow-left" : "icon-arrow-left"),
            rightArrow: this.fontAwesome ? "fa-arrow-right" : (this.bootcssVer === 3 ? "glyphicon-arrow-right" : "icon-arrow-right")
        };
        this.icontype = this.fontAwesome ? "fa" : "glyphicon";
        this._attachEvents();
        this.clickedOutside = function (n) {
            if (e(n.target).closest(".datetimepicker").length === 0) {
                m.hide()
            }
        };
        this.formatViewType = "datetime";
        if ("formatViewType" in j) {
            this.formatViewType = j.formatViewType
        } else {
            if ("formatViewType" in this.element.data()) {
                this.formatViewType = this.element.data("formatViewType")
            }
        }
        this.minView = 0;
        if ("minView" in j) {
            this.minView = j.minView
        } else {
            if ("minView" in this.element.data()) {
                this.minView = this.element.data("min-view")
            }
        }
        this.minView = d.convertViewMode(this.minView);
        this.maxView = d.modes.length - 1;
        if ("maxView" in j) {
            this.maxView = j.maxView
        } else {
            if ("maxView" in this.element.data()) {
                this.maxView = this.element.data("max-view")
            }
        }
        this.maxView = d.convertViewMode(this.maxView);
        this.wheelViewModeNavigation = false;
        if ("wheelViewModeNavigation" in j) {
            this.wheelViewModeNavigation = j.wheelViewModeNavigation
        } else {
            if ("wheelViewModeNavigation" in this.element.data()) {
                this.wheelViewModeNavigation = this.element.data("view-mode-wheel-navigation")
            }
        }
        this.wheelViewModeNavigationInverseDirection = false;
        if ("wheelViewModeNavigationInverseDirection" in j) {
            this.wheelViewModeNavigationInverseDirection = j.wheelViewModeNavigationInverseDirection
        } else {
            if ("wheelViewModeNavigationInverseDirection" in this.element.data()) {
                this.wheelViewModeNavigationInverseDirection = this.element.data("view-mode-wheel-navigation-inverse-dir")
            }
        }
        this.wheelViewModeNavigationDelay = 100;
        if ("wheelViewModeNavigationDelay" in j) {
            this.wheelViewModeNavigationDelay = j.wheelViewModeNavigationDelay
        } else {
            if ("wheelViewModeNavigationDelay" in this.element.data()) {
                this.wheelViewModeNavigationDelay = this.element.data("view-mode-wheel-navigation-delay")
            }
        }
        this.startViewMode = 2;
        if ("startView" in j) {
            this.startViewMode = j.startView
        } else {
            if ("startView" in this.element.data()) {
                this.startViewMode = this.element.data("start-view")
            }
        }
        this.startViewMode = d.convertViewMode(this.startViewMode);
        this.viewMode = this.startViewMode;
        this.viewSelect = this.minView;
        if ("viewSelect" in j) {
            this.viewSelect = j.viewSelect
        } else {
            if ("viewSelect" in this.element.data()) {
                this.viewSelect = this.element.data("view-select")
            }
        }
        this.viewSelect = d.convertViewMode(this.viewSelect);
        this.forceParse = true;
        if ("forceParse" in j) {
            this.forceParse = j.forceParse
        } else {
            if ("dateForceParse" in this.element.data()) {
                this.forceParse = this.element.data("date-force-parse")
            }
        }
        var l = this.bootcssVer === 3 ? d.templateV3 : d.template;
        while (l.indexOf("{iconType}") !== -1) {
            l = l.replace("{iconType}", this.icontype)
        }
        while (l.indexOf("{leftArrow}") !== -1) {
            l = l.replace("{leftArrow}", this.icons.leftArrow)
        }
        while (l.indexOf("{rightArrow}") !== -1) {
            l = l.replace("{rightArrow}", this.icons.rightArrow)
        }
        this.picker = e(l).appendTo(this.isInline ? this.element : this.container).on({
            click: e.proxy(this.click, this),
            mousedown: e.proxy(this.mousedown, this)
        });
        if (this.wheelViewModeNavigation) {
            if (e.fn.mousewheel) {
                this.picker.on({mousewheel: e.proxy(this.mousewheel, this)})
            } else {
                console.log("Mouse Wheel event is not supported. Please include the jQuery Mouse Wheel plugin before enabling this option")
            }
        }
        if (this.isInline) {
            this.picker.addClass("datetimepicker-inline")
        } else {
            this.picker.addClass("datetimepicker-dropdown-" + this.pickerPosition + " dropdown-menu")
        }
        if (this.isRTL) {
            this.picker.addClass("datetimepicker-rtl");
            var i = this.bootcssVer === 3 ? ".prev span, .next span" : ".prev i, .next i";
            this.picker.find(i).toggleClass(this.icons.leftArrow + " " + this.icons.rightArrow)
        }
        e(document).on("mousedown", this.clickedOutside);
        this.autoclose = false;
        if ("autoclose" in j) {
            this.autoclose = j.autoclose
        } else {
            if ("dateAutoclose" in this.element.data()) {
                this.autoclose = this.element.data("date-autoclose")
            }
        }
        this.keyboardNavigation = true;
        if ("keyboardNavigation" in j) {
            this.keyboardNavigation = j.keyboardNavigation
        } else {
            if ("dateKeyboardNavigation" in this.element.data()) {
                this.keyboardNavigation = this.element.data("date-keyboard-navigation")
            }
        }
        this.todayBtn = (j.todayBtn || this.element.data("date-today-btn") || false);
        this.todayHighlight = (j.todayHighlight || this.element.data("date-today-highlight") || false);
        this.weekStart = ((j.weekStart || this.element.data("date-weekstart") || f[this.language].weekStart || 0) % 7);
        this.weekEnd = ((this.weekStart + 6) % 7);
        this.startDate = -Infinity;
        this.endDate = Infinity;
        this.daysOfWeekDisabled = [];
        this.setStartDate(j.startDate || this.element.data("date-startdate"));
        this.setEndDate(j.endDate || this.element.data("date-enddate"));
        this.setDaysOfWeekDisabled(j.daysOfWeekDisabled || this.element.data("date-days-of-week-disabled"));
        this.setMinutesDisabled(j.minutesDisabled || this.element.data("date-minute-disabled"));
        this.setHoursDisabled(j.hoursDisabled || this.element.data("date-hour-disabled"));
        this.fillDow();
        this.fillMonths();
        this.update();
        this.showMode();
        if (this.isInline) {
            this.show()
        }
    };
    g.prototype = {
        constructor: g, _events: [], _attachEvents: function () {
            this._detachEvents();
            if (this.isInput) {
                this._events = [[this.element, {
                    focus: e.proxy(this.show, this),
                    keyup: e.proxy(this.update, this),
                    keydown: e.proxy(this.keydown, this)
                }]]
            } else {
                if (this.component && this.hasInput) {
                    this._events = [[this.element.find("input"), {
                        focus: e.proxy(this.show, this),
                        keyup: e.proxy(this.update, this),
                        keydown: e.proxy(this.keydown, this)
                    }], [this.component, {click: e.proxy(this.show, this)}]];
                    if (this.componentReset) {
                        this._events.push([this.componentReset, {click: e.proxy(this.reset, this)}])
                    }
                } else {
                    if (this.element.is("div")) {
                        this.isInline = true
                    } else {
                        this._events = [[this.element, {click: e.proxy(this.show, this)}]]
                    }
                }
            }
            for (var j = 0, k, l; j < this._events.length; j++) {
                k = this._events[j][0];
                l = this._events[j][1];
                k.on(l)
            }
        }, _detachEvents: function () {
            for (var j = 0, k, l; j < this._events.length; j++) {
                k = this._events[j][0];
                l = this._events[j][1];
                k.off(l)
            }
            this._events = []
        }, show: function (i) {
            this.picker.show();
            this.height = this.component ? this.component.outerHeight() : this.element.outerHeight();
            if (this.forceParse) {
                this.update()
            }
            this.place();
            e(window).on("resize", e.proxy(this.place, this));
            if (i) {
                i.stopPropagation();
                i.preventDefault()
            }
            this.isVisible = true;
            this.element.trigger({type: "show", date: this.date})
        }, hide: function (i) {
            if (!this.isVisible) {
                return
            }
            if (this.isInline) {
                return
            }
            this.picker.hide();
            e(window).off("resize", this.place);
            this.viewMode = this.startViewMode;
            this.showMode();
            if (!this.isInput) {
                e(document).off("mousedown", this.hide)
            }
            if (this.forceParse && (this.isInput && this.element.val() || this.hasInput && this.element.find("input").val())) {
                this.setValue()
            }
            this.isVisible = false;
            this.element.trigger({type: "hide", date: this.date})
        }, remove: function () {
            this._detachEvents();
            e(document).off("mousedown", this.clickedOutside);
            this.picker.remove();
            delete this.picker;
            delete this.element.data().datetimepicker
        }, getDate: function () {
            var i = this.getUTCDate();
            return new Date(i.getTime() + (i.getTimezoneOffset() * 60000))
        }, getUTCDate: function () {
            return this.date
        }, setDate: function (i) {
            this.setUTCDate(new Date(i.getTime() - (i.getTimezoneOffset() * 60000)))
        }, setUTCDate: function (i) {
            if (i >= this.startDate && i <= this.endDate) {
                this.date = i;
                this.setValue();
                this.viewDate = this.date;
                this.fill()
            } else {
                this.element.trigger({type: "outOfRange", date: i, startDate: this.startDate, endDate: this.endDate})
            }
        }, setFormat: function (j) {
            this.format = d.parseFormat(j, this.formatType);
            var i;
            if (this.isInput) {
                i = this.element
            } else {
                if (this.component) {
                    i = this.element.find("input")
                }
            }
            if (i && i.val()) {
                this.setValue()
            }
        }, setValue: function () {
            var i = this.getFormattedDate();
            if (!this.isInput) {
                if (this.component) {
                    this.element.find("input").val(i)
                }
                this.element.data("date", i)
            } else {
                this.element.val(i)
            }
            if (this.linkField) {
                e("#" + this.linkField).val(this.getFormattedDate(this.linkFormat))
            }
        }, getFormattedDate: function (i) {
            if (i == undefined) {
                i = this.format
            }
            return d.formatDate(this.date, i, this.language, this.formatType)
        }, setStartDate: function (i) {
            this.startDate = i || -Infinity;
            if (this.startDate !== -Infinity) {
                this.startDate = d.parseDate(this.startDate, this.format, this.language, this.formatType)
            }
            this.update();
            this.updateNavArrows()
        }, setEndDate: function (i) {
            this.endDate = i || Infinity;
            if (this.endDate !== Infinity) {
                this.endDate = d.parseDate(this.endDate, this.format, this.language, this.formatType)
            }
            this.update();
            this.updateNavArrows()
        }, setDaysOfWeekDisabled: function (i) {
            this.daysOfWeekDisabled = i || [];
            if (!e.isArray(this.daysOfWeekDisabled)) {
                this.daysOfWeekDisabled = this.daysOfWeekDisabled.split(/,\s*/)
            }
            this.daysOfWeekDisabled = e.map(this.daysOfWeekDisabled, function (j) {
                return parseInt(j, 10)
            });
            this.update();
            this.updateNavArrows()
        }, setMinutesDisabled: function (i) {
            this.minutesDisabled = i || [];
            if (!e.isArray(this.minutesDisabled)) {
                this.minutesDisabled = this.minutesDisabled.split(/,\s*/)
            }
            this.minutesDisabled = e.map(this.minutesDisabled, function (j) {
                return parseInt(j, 10)
            });
            this.update();
            this.updateNavArrows()
        }, setHoursDisabled: function (i) {
            this.hoursDisabled = i || [];
            if (!e.isArray(this.hoursDisabled)) {
                this.hoursDisabled = this.hoursDisabled.split(/,\s*/)
            }
            this.hoursDisabled = e.map(this.hoursDisabled, function (j) {
                return parseInt(j, 10)
            });
            this.update();
            this.updateNavArrows()
        }, place: function () {
            if (this.isInline) {
                return
            }
            if (!this.zIndex) {
                var j = 0;
                e("div").each(function () {
                    var o = parseInt(e(this).css("zIndex"), 10);
                    if (o > j) {
                        j = o
                    }
                });
                this.zIndex = j + 10
            }
            var n, m, l, k;
            if (this.container instanceof e) {
                k = this.container.offset()
            } else {
                k = e(this.container).offset()
            }
            if (this.component) {
                n = this.component.offset();
                l = n.left;
                if (this.pickerPosition == "bottom-left" || this.pickerPosition == "top-left") {
                    l += this.component.outerWidth() - this.picker.outerWidth()
                }
            } else {
                n = this.element.offset();
                l = n.left
            }
            var i = document.body.clientWidth || window.innerWidth;
            if (l + 220 > i) {
                l = i - 220
            }
            m = m - k.top + 169;
            l = l - k.left + 210;
            this.picker.css({top: m, left: l, zIndex: this.zIndex})
        }, update: function () {
            var i, j = false;
            if (arguments && arguments.length && (typeof arguments[0] === "string" || arguments[0] instanceof Date)) {
                i = arguments[0];
                j = true
            } else {
                i = (this.isInput ? this.element.val() : this.element.find("input").val()) || this.element.data("date") || this.initialDate;
                if (typeof i == "string" || i instanceof String) {
                    i = i.replace(/^\s+|\s+$/g, "")
                }
            }
            if (!i) {
                i = new Date();
                j = false
            }
            this.date = d.parseDate(i, this.format, this.language, this.formatType);
            if (j) {
                this.setValue()
            }
            if (this.date < this.startDate) {
                this.viewDate = new Date(this.startDate)
            } else {
                if (this.date > this.endDate) {
                    this.viewDate = new Date(this.endDate)
                } else {
                    this.viewDate = new Date(this.date)
                }
            }
            this.fill()
        }, fillDow: function () {
            var i = this.weekStart, j = "<tr>";
            while (i < this.weekStart + 7) {
                j += '<th class="dow">' + f[this.language].daysMin[(i++) % 7] + "</th>"
            }
            j += "</tr>";
            this.picker.find(".datetimepicker-days thead").append(j)
        }, fillMonths: function () {
            var k = "", j = 0;
            while (j < 12) {
                k += '<span class="month">' + f[this.language].monthsShort[j++] + "</span>"
            }
            this.picker.find(".datetimepicker-months td").html(k)
        }, fill: function () {
            if (this.date == null || this.viewDate == null) {
                return
            }
            var H = new Date(this.viewDate), u = H.getUTCFullYear(), I = H.getUTCMonth(), n = H.getUTCDate(), D = H.getUTCHours(), y = H.getUTCMinutes(), z = this.startDate !== -Infinity ? this.startDate.getUTCFullYear() : -Infinity, E = this.startDate !== -Infinity ? this.startDate.getUTCMonth() + 1 : -Infinity, q = this.endDate !== Infinity ? this.endDate.getUTCFullYear() : Infinity, A = this.endDate !== Infinity ? this.endDate.getUTCMonth() + 1 : Infinity, r = (new h(this.date.getUTCFullYear(), this.date.getUTCMonth(), this.date.getUTCDate())).valueOf(), G = new Date();
            this.picker.find(".datetimepicker-days thead th:eq(1)").text(f[this.language].months[I] + " " + u);
            if (this.formatViewType == "time") {
                var k = this.getFormattedDate();
                this.picker.find(".datetimepicker-hours thead th:eq(1)").text(k);
                this.picker.find(".datetimepicker-minutes thead th:eq(1)").text(k)
            } else {
                this.picker.find(".datetimepicker-hours thead th:eq(1)").text(n + " " + f[this.language].months[I] + " " + u);
                this.picker.find(".datetimepicker-minutes thead th:eq(1)").text(n + " " + f[this.language].months[I] + " " + u)
            }
            this.picker.find("tfoot th.today").text(f[this.language].today).toggle(this.todayBtn !== false);
            this.updateNavArrows();
            this.fillMonths();
            var K = h(u, I - 1, 28, 0, 0, 0, 0), C = d.getDaysInMonth(K.getUTCFullYear(), K.getUTCMonth());
            K.setUTCDate(C);
            K.setUTCDate(C - (K.getUTCDay() - this.weekStart + 7) % 7);
            var j = new Date(K);
            j.setUTCDate(j.getUTCDate() + 42);
            j = j.valueOf();
            var s = [];
            var v;
            while (K.valueOf() < j) {
                if (K.getUTCDay() == this.weekStart) {
                    s.push("<tr>")
                }
                v = "";
                if (K.getUTCFullYear() < u || (K.getUTCFullYear() == u && K.getUTCMonth() < I)) {
                    v += " old"
                } else {
                    if (K.getUTCFullYear() > u || (K.getUTCFullYear() == u && K.getUTCMonth() > I)) {
                        v += " new"
                    }
                }
                if (this.todayHighlight && K.getUTCFullYear() == G.getFullYear() && K.getUTCMonth() == G.getMonth() && K.getUTCDate() == G.getDate()) {
                    v += " today"
                }
                if (K.valueOf() == r) {
                    v += " active"
                }
                if ((K.valueOf() + 86400000) <= this.startDate || K.valueOf() > this.endDate || e.inArray(K.getUTCDay(), this.daysOfWeekDisabled) !== -1) {
                    v += " disabled"
                }
                s.push('<td class="day' + v + '">' + K.getUTCDate() + "</td>");
                if (K.getUTCDay() == this.weekEnd) {
                    s.push("</tr>")
                }
                K.setUTCDate(K.getUTCDate() + 1)
            }
            this.picker.find(".datetimepicker-days tbody").empty().append(s.join(""));
            s = [];
            var w = "", F = "", t = "";
            var l = this.hoursDisabled || [];
            for (var B = 0; B < 24; B++) {
                if (l.indexOf(B) !== -1) {
                    continue
                }
                var x = h(u, I, n, B);
                v = "";
                if ((x.valueOf() + 3600000) <= this.startDate || x.valueOf() > this.endDate) {
                    v += " disabled"
                } else {
                    if (D == B) {
                        v += " active"
                    }
                }
                if (this.showMeridian && f[this.language].meridiem.length == 2) {
                    F = (B < 12 ? f[this.language].meridiem[0] : f[this.language].meridiem[1]);
                    if (F != t) {
                        if (t != "") {
                            s.push("</fieldset>")
                        }
                        s.push('<fieldset class="hour"><legend>' + F.toUpperCase() + "</legend>")
                    }
                    t = F;
                    w = (B % 12 ? B % 12 : 12);
                    s.push('<span class="hour' + v + " hour_" + (B < 12 ? "am" : "pm") + '">' + w + "</span>");
                    if (B == 23) {
                        s.push("</fieldset>")
                    }
                } else {
                    w = B + ":00";
                    s.push('<span class="hour' + v + '">' + w + "</span>")
                }
            }
            this.picker.find(".datetimepicker-hours td").html(s.join(""));
            s = [];
            w = "", F = "", t = "";
            var m = this.minutesDisabled || [];
            for (var B = 0; B < 60; B += this.minuteStep) {
                if (m.indexOf(B) !== -1) {
                    continue
                }
                var x = h(u, I, n, D, B, 0);
                v = "";
                if (x.valueOf() < this.startDate || x.valueOf() > this.endDate) {
                    v += " disabled"
                } else {
                    if (Math.floor(y / this.minuteStep) == Math.floor(B / this.minuteStep)) {
                        v += " active"
                    }
                }
                if (this.showMeridian && f[this.language].meridiem.length == 2) {
                    F = (D < 12 ? f[this.language].meridiem[0] : f[this.language].meridiem[1]);
                    if (F != t) {
                        if (t != "") {
                            s.push("</fieldset>")
                        }
                        s.push('<fieldset class="minute"><legend>' + F.toUpperCase() + "</legend>")
                    }
                    t = F;
                    w = (D % 12 ? D % 12 : 12);
                    s.push('<span class="minute' + v + '">' + w + ":" + (B < 10 ? "0" + B : B) + "</span>");
                    if (B == 59) {
                        s.push("</fieldset>")
                    }
                } else {
                    w = B + ":00";
                    s.push('<span class="minute' + v + '">' + D + ":" + (B < 10 ? "0" + B : B) + "</span>")
                }
            }
            this.picker.find(".datetimepicker-minutes td").html(s.join(""));
            var L = this.date.getUTCFullYear();
            var p = this.picker.find(".datetimepicker-months").find("th:eq(1)").text(u).end().find("span").removeClass("active");
            if (L == u) {
                var o = p.length - 12;
                p.eq(this.date.getUTCMonth() + o).addClass("active")
            }
            if (u < z || u > q) {
                p.addClass("disabled")
            }
            if (u == z) {
                p.slice(0, E + 1).addClass("disabled")
            }
            if (u == q) {
                p.slice(A).addClass("disabled")
            }
            s = "";
            u = parseInt(u / 10, 10) * 10;
            var J = this.picker.find(".datetimepicker-years").find("th:eq(1)").text(u + "-" + (u + 9)).end().find("td");
            u -= 1;
            for (var B = -1; B < 11; B++) {
                s += '<span class="year' + (B == -1 || B == 10 ? " old" : "") + (L == u ? " active" : "") + (u < z || u > q ? " disabled" : "") + '">' + u + "</span>";
                u += 1
            }
            J.html(s);
            this.place()
        }, updateNavArrows: function () {
            var m = new Date(this.viewDate), k = m.getUTCFullYear(), l = m.getUTCMonth(), j = m.getUTCDate(), i = m.getUTCHours();
            switch (this.viewMode) {
                case 0:
                    if (this.startDate !== -Infinity && k <= this.startDate.getUTCFullYear() && l <= this.startDate.getUTCMonth() && j <= this.startDate.getUTCDate() && i <= this.startDate.getUTCHours()) {
                        this.picker.find(".prev").css({visibility: "hidden"})
                    } else {
                        this.picker.find(".prev").css({visibility: "visible"})
                    }
                    if (this.endDate !== Infinity && k >= this.endDate.getUTCFullYear() && l >= this.endDate.getUTCMonth() && j >= this.endDate.getUTCDate() && i >= this.endDate.getUTCHours()) {
                        this.picker.find(".next").css({visibility: "hidden"})
                    } else {
                        this.picker.find(".next").css({visibility: "visible"})
                    }
                    break;
                case 1:
                    if (this.startDate !== -Infinity && k <= this.startDate.getUTCFullYear() && l <= this.startDate.getUTCMonth() && j <= this.startDate.getUTCDate()) {
                        this.picker.find(".prev").css({visibility: "hidden"})
                    } else {
                        this.picker.find(".prev").css({visibility: "visible"})
                    }
                    if (this.endDate !== Infinity && k >= this.endDate.getUTCFullYear() && l >= this.endDate.getUTCMonth() && j >= this.endDate.getUTCDate()) {
                        this.picker.find(".next").css({visibility: "hidden"})
                    } else {
                        this.picker.find(".next").css({visibility: "visible"})
                    }
                    break;
                case 2:
                    if (this.startDate !== -Infinity && k <= this.startDate.getUTCFullYear() && l <= this.startDate.getUTCMonth()) {
                        this.picker.find(".prev").css({visibility: "hidden"})
                    } else {
                        this.picker.find(".prev").css({visibility: "visible"})
                    }
                    if (this.endDate !== Infinity && k >= this.endDate.getUTCFullYear() && l >= this.endDate.getUTCMonth()) {
                        this.picker.find(".next").css({visibility: "hidden"})
                    } else {
                        this.picker.find(".next").css({visibility: "visible"})
                    }
                    break;
                case 3:
                case 4:
                    if (this.startDate !== -Infinity && k <= this.startDate.getUTCFullYear()) {
                        this.picker.find(".prev").css({visibility: "hidden"})
                    } else {
                        this.picker.find(".prev").css({visibility: "visible"})
                    }
                    if (this.endDate !== Infinity && k >= this.endDate.getUTCFullYear()) {
                        this.picker.find(".next").css({visibility: "hidden"})
                    } else {
                        this.picker.find(".next").css({visibility: "visible"})
                    }
                    break
            }
        }, mousewheel: function (j) {
            j.preventDefault();
            j.stopPropagation();
            if (this.wheelPause) {
                return
            }
            this.wheelPause = true;
            var i = j.originalEvent;
            var l = i.wheelDelta;
            var k = l > 0 ? 1 : (l === 0) ? 0 : -1;
            if (this.wheelViewModeNavigationInverseDirection) {
                k = -k
            }
            this.showMode(k);
            setTimeout(e.proxy(function () {
                this.wheelPause = false
            }, this), this.wheelViewModeNavigationDelay)
        }, click: function (m) {
            m.stopPropagation();
            m.preventDefault();
            var n = e(m.target).closest("span, td, th, legend");
            if (n.is("." + this.icontype)) {
                n = e(n).parent().closest("span, td, th, legend")
            }
            if (n.length == 1) {
                if (n.is(".disabled")) {
                    this.element.trigger({
                        type: "outOfRange",
                        date: this.viewDate,
                        startDate: this.startDate,
                        endDate: this.endDate
                    });
                    return
                }
                switch (n[0].nodeName.toLowerCase()) {
                    case"th":
                        switch (n[0].className) {
                            case"switch":
                                this.showMode(1);
                                break;
                            case"prev":
                            case"next":
                                var i = d.modes[this.viewMode].navStep * (n[0].className == "prev" ? -1 : 1);
                                switch (this.viewMode) {
                                    case 0:
                                        this.viewDate = this.moveHour(this.viewDate, i);
                                        break;
                                    case 1:
                                        this.viewDate = this.moveDate(this.viewDate, i);
                                        break;
                                    case 2:
                                        this.viewDate = this.moveMonth(this.viewDate, i);
                                        break;
                                    case 3:
                                    case 4:
                                        this.viewDate = this.moveYear(this.viewDate, i);
                                        break
                                }
                                this.fill();
                                this.element.trigger({
                                    type: n[0].className + ":" + this.convertViewModeText(this.viewMode),
                                    date: this.viewDate,
                                    startDate: this.startDate,
                                    endDate: this.endDate
                                });
                                break;
                            case"today":
                                var j = new Date();
                                j = h(j.getFullYear(), j.getMonth(), j.getDate(), j.getHours(), j.getMinutes(), j.getSeconds(), 0);
                                if (j < this.startDate) {
                                    j = this.startDate
                                } else {
                                    if (j > this.endDate) {
                                        j = this.endDate
                                    }
                                }
                                this.viewMode = this.startViewMode;
                                this.showMode(0);
                                this._setDate(j);
                                this.fill();
                                if (this.autoclose) {
                                    this.hide()
                                }
                                break
                        }
                        break;
                    case"span":
                        if (!n.is(".disabled")) {
                            var p = this.viewDate.getUTCFullYear(), o = this.viewDate.getUTCMonth(), q = this.viewDate.getUTCDate(), r = this.viewDate.getUTCHours(), k = this.viewDate.getUTCMinutes(), s = this.viewDate.getUTCSeconds();
                            if (n.is(".month")) {
                                this.viewDate.setUTCDate(1);
                                o = n.parent().find("span").index(n);
                                q = this.viewDate.getUTCDate();
                                this.viewDate.setUTCMonth(o);
                                this.element.trigger({type: "changeMonth", date: this.viewDate});
                                if (this.viewSelect >= 3) {
                                    this._setDate(h(p, o, q, r, k, s, 0))
                                }
                            } else {
                                if (n.is(".year")) {
                                    this.viewDate.setUTCDate(1);
                                    p = parseInt(n.text(), 10) || 0;
                                    this.viewDate.setUTCFullYear(p);
                                    this.element.trigger({type: "changeYear", date: this.viewDate});
                                    if (this.viewSelect >= 4) {
                                        this._setDate(h(p, o, q, r, k, s, 0))
                                    }
                                } else {
                                    if (n.is(".hour")) {
                                        r = parseInt(n.text(), 10) || 0;
                                        if (n.hasClass("hour_am") || n.hasClass("hour_pm")) {
                                            if (r == 12 && n.hasClass("hour_am")) {
                                                r = 0
                                            } else {
                                                if (r != 12 && n.hasClass("hour_pm")) {
                                                    r += 12
                                                }
                                            }
                                        }
                                        this.viewDate.setUTCHours(r);
                                        this.element.trigger({type: "changeHour", date: this.viewDate});
                                        if (this.viewSelect >= 1) {
                                            this._setDate(h(p, o, q, r, k, s, 0))
                                        }
                                    } else {
                                        if (n.is(".minute")) {
                                            k = parseInt(n.text().substr(n.text().indexOf(":") + 1), 10) || 0;
                                            this.viewDate.setUTCMinutes(k);
                                            this.element.trigger({type: "changeMinute", date: this.viewDate});
                                            if (this.viewSelect >= 0) {
                                                this._setDate(h(p, o, q, r, k, s, 0))
                                            }
                                        }
                                    }
                                }
                            }
                            if (this.viewMode != 0) {
                                var l = this.viewMode;
                                this.showMode(-1);
                                this.fill();
                                if (l == this.viewMode && this.autoclose) {
                                    this.hide()
                                }
                            } else {
                                this.fill();
                                if (this.autoclose) {
                                    this.hide()
                                }
                            }
                        }
                        break;
                    case"td":
                        if (n.is(".day") && !n.is(".disabled")) {
                            var q = parseInt(n.text(), 10) || 1;
                            var p = this.viewDate.getUTCFullYear(), o = this.viewDate.getUTCMonth(), r = this.viewDate.getUTCHours(), k = this.viewDate.getUTCMinutes(), s = this.viewDate.getUTCSeconds();
                            if (n.is(".old")) {
                                if (o === 0) {
                                    o = 11;
                                    p -= 1
                                } else {
                                    o -= 1
                                }
                            } else {
                                if (n.is(".new")) {
                                    if (o == 11) {
                                        o = 0;
                                        p += 1
                                    } else {
                                        o += 1
                                    }
                                }
                            }
                            this.viewDate.setUTCFullYear(p);
                            this.viewDate.setUTCMonth(o, q);
                            this.element.trigger({type: "changeDay", date: this.viewDate});
                            if (this.viewSelect >= 2) {
                                this._setDate(h(p, o, q, r, k, s, 0))
                            }
                        }
                        var l = this.viewMode;
                        this.showMode(-1);
                        this.fill();
                        if (l == this.viewMode && this.autoclose) {
                            this.hide()
                        }
                        break
                }
            }
        }, _setDate: function (i, k) {
            if (!k || k == "date") {
                this.date = i
            }
            if (!k || k == "view") {
                this.viewDate = i
            }
            this.fill();
            this.setValue();
            var j;
            if (this.isInput) {
                j = this.element
            } else {
                if (this.component) {
                    j = this.element.find("input")
                }
            }
            if (j) {
                j.change();
                if (this.autoclose && (!k || k == "date")) {
                }
            }
            this.element.trigger({type: "changeDate", date: this.date});
            if (i == null) {
                this.date = this.viewDate
            }
        }, moveMinute: function (j, i) {
            if (!i) {
                return j
            }
            var k = new Date(j.valueOf());
            k.setUTCMinutes(k.getUTCMinutes() + (i * this.minuteStep));
            return k
        }, moveHour: function (j, i) {
            if (!i) {
                return j
            }
            var k = new Date(j.valueOf());
            k.setUTCHours(k.getUTCHours() + i);
            return k
        }, moveDate: function (j, i) {
            if (!i) {
                return j
            }
            var k = new Date(j.valueOf());
            k.setUTCDate(k.getUTCDate() + i);
            return k
        }, moveMonth: function (j, k) {
            if (!k) {
                return j
            }
            var n = new Date(j.valueOf()), r = n.getUTCDate(), o = n.getUTCMonth(), m = Math.abs(k), q, p;
            k = k > 0 ? 1 : -1;
            if (m == 1) {
                p = k == -1 ? function () {
                    return n.getUTCMonth() == o
                } : function () {
                    return n.getUTCMonth() != q
                };
                q = o + k;
                n.setUTCMonth(q);
                if (q < 0 || q > 11) {
                    q = (q + 12) % 12
                }
            } else {
                for (var l = 0; l < m; l++) {
                    n = this.moveMonth(n, k)
                }
                q = n.getUTCMonth();
                n.setUTCDate(r);
                p = function () {
                    return q != n.getUTCMonth()
                }
            }
            while (p()) {
                n.setUTCDate(--r);
                n.setUTCMonth(q)
            }
            return n
        }, moveYear: function (j, i) {
            return this.moveMonth(j, i * 12)
        }, dateWithinRange: function (i) {
            return i >= this.startDate && i <= this.endDate
        }, keydown: function (m) {
            if (this.picker.is(":not(:visible)")) {
                if (m.keyCode == 27) {
                    this.show()
                }
                return
            }
            var o = false, j, p, n, q, i;
            switch (m.keyCode) {
                case 27:
                    this.hide();
                    m.preventDefault();
                    break;
                case 37:
                case 39:
                    if (!this.keyboardNavigation) {
                        break
                    }
                    j = m.keyCode == 37 ? -1 : 1;
                    viewMode = this.viewMode;
                    if (m.ctrlKey) {
                        viewMode += 2
                    } else {
                        if (m.shiftKey) {
                            viewMode += 1
                        }
                    }
                    if (viewMode == 4) {
                        q = this.moveYear(this.date, j);
                        i = this.moveYear(this.viewDate, j)
                    } else {
                        if (viewMode == 3) {
                            q = this.moveMonth(this.date, j);
                            i = this.moveMonth(this.viewDate, j)
                        } else {
                            if (viewMode == 2) {
                                q = this.moveDate(this.date, j);
                                i = this.moveDate(this.viewDate, j)
                            } else {
                                if (viewMode == 1) {
                                    q = this.moveHour(this.date, j);
                                    i = this.moveHour(this.viewDate, j)
                                } else {
                                    if (viewMode == 0) {
                                        q = this.moveMinute(this.date, j);
                                        i = this.moveMinute(this.viewDate, j)
                                    }
                                }
                            }
                        }
                    }
                    if (this.dateWithinRange(q)) {
                        this.date = q;
                        this.viewDate = i;
                        this.setValue();
                        this.update();
                        m.preventDefault();
                        o = true
                    }
                    break;
                case 38:
                case 40:
                    if (!this.keyboardNavigation) {
                        break
                    }
                    j = m.keyCode == 38 ? -1 : 1;
                    viewMode = this.viewMode;
                    if (m.ctrlKey) {
                        viewMode += 2
                    } else {
                        if (m.shiftKey) {
                            viewMode += 1
                        }
                    }
                    if (viewMode == 4) {
                        q = this.moveYear(this.date, j);
                        i = this.moveYear(this.viewDate, j)
                    } else {
                        if (viewMode == 3) {
                            q = this.moveMonth(this.date, j);
                            i = this.moveMonth(this.viewDate, j)
                        } else {
                            if (viewMode == 2) {
                                q = this.moveDate(this.date, j * 7);
                                i = this.moveDate(this.viewDate, j * 7)
                            } else {
                                if (viewMode == 1) {
                                    if (this.showMeridian) {
                                        q = this.moveHour(this.date, j * 6);
                                        i = this.moveHour(this.viewDate, j * 6)
                                    } else {
                                        q = this.moveHour(this.date, j * 4);
                                        i = this.moveHour(this.viewDate, j * 4)
                                    }
                                } else {
                                    if (viewMode == 0) {
                                        q = this.moveMinute(this.date, j * 4);
                                        i = this.moveMinute(this.viewDate, j * 4)
                                    }
                                }
                            }
                        }
                    }
                    if (this.dateWithinRange(q)) {
                        this.date = q;
                        this.viewDate = i;
                        this.setValue();
                        this.update();
                        m.preventDefault();
                        o = true
                    }
                    break;
                case 13:
                    if (this.viewMode != 0) {
                        var l = this.viewMode;
                        this.showMode(-1);
                        this.fill();
                        if (l == this.viewMode && this.autoclose) {
                            this.hide()
                        }
                    } else {
                        this.fill();
                        if (this.autoclose) {
                            this.hide()
                        }
                    }
                    m.preventDefault();
                    break;
                case 9:
                    this.hide();
                    break
            }
            if (o) {
                var k;
                if (this.isInput) {
                    k = this.element
                } else {
                    if (this.component) {
                        k = this.element.find("input")
                    }
                }
                if (k) {
                    k.change()
                }
                this.element.trigger({type: "changeDate", date: this.date})
            }
        }, showMode: function (i) {
            if (i) {
                var j = Math.max(0, Math.min(d.modes.length - 1, this.viewMode + i));
                if (j >= this.minView && j <= this.maxView) {
                    this.element.trigger({
                        type: "changeMode",
                        date: this.viewDate,
                        oldViewMode: this.viewMode,
                        newViewMode: j
                    });
                    this.viewMode = j
                }
            }
            this.picker.find(">div").hide().filter(".datetimepicker-" + d.modes[this.viewMode].clsName).css("display", "block");
            this.updateNavArrows()
        }, reset: function (i) {
            this._setDate(null, "date")
        }, convertViewModeText: function (i) {
            switch (i) {
                case 4:
                    return "decade";
                case 3:
                    return "year";
                case 2:
                    return "month";
                case 1:
                    return "day";
                case 0:
                    return "hour"
            }
        }
    };
    var a = e.fn.datetimepicker;
    e.fn.datetimepicker = function (k) {
        var i = Array.apply(null, arguments);
        i.shift();
        var j;
        this.each(function () {
            var n = e(this), m = n.data("datetimepicker"), l = typeof k == "object" && k;
            if (!m) {
                n.data("datetimepicker", (m = new g(this, e.extend({}, e.fn.datetimepicker.defaults, l))))
            }
            if (typeof k == "string" && typeof m[k] == "function") {
                j = m[k].apply(m, i);
                if (j !== undefined) {
                    return false
                }
            }
        });
        if (j !== undefined) {
            return j
        } else {
            return this
        }
    };
    e.fn.datetimepicker.defaults = {};
    e.fn.datetimepicker.Constructor = g;
    var f = e.fn.datetimepicker.dates = {
        en: {
            days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
            daysShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"],
            daysMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"],
            months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
            monthsShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
            meridiem: ["am", "pm"],
            suffix: ["st", "nd", "rd", "th"],
            today: "Today"
        }
    };
    var d = {
        modes: [{clsName: "minutes", navFnc: "Hours", navStep: 1}, {
            clsName: "hours",
            navFnc: "Date",
            navStep: 1
        }, {clsName: "days", navFnc: "Month", navStep: 1}, {
            clsName: "months",
            navFnc: "FullYear",
            navStep: 1
        }, {clsName: "years", navFnc: "FullYear", navStep: 10}],
        isLeapYear: function (i) {
            return (((i % 4 === 0) && (i % 100 !== 0)) || (i % 400 === 0))
        },
        getDaysInMonth: function (i, j) {
            return [31, (d.isLeapYear(i) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][j]
        },
        getDefaultFormat: function (i, j) {
            if (i == "standard") {
                if (j == "input") {
                    return "yyyy-mm-dd hh:ii"
                } else {
                    return "yyyy-mm-dd hh:ii:ss"
                }
            } else {
                if (i == "php") {
                    if (j == "input") {
                        return "Y-m-d H:i"
                    } else {
                        return "Y-m-d H:i:s"
                    }
                } else {
                    throw new Error("Invalid format type.")
                }
            }
        },
        validParts: function (i) {
            if (i == "standard") {
                return /hh?|HH?|p|P|ii?|ss?|dd?|DD?|mm?|MM?|yy(?:yy)?/g
            } else {
                if (i == "php") {
                    return /[dDjlNwzFmMnStyYaABgGhHis]/g
                } else {
                    throw new Error("Invalid format type.")
                }
            }
        },
        nonpunctuation: /[^ -\/:-@\[-`{-~\t\n\rTZ]+/g,
        parseFormat: function (l, j) {
            var i = l.replace(this.validParts(j), "\0").split("\0"), k = l.match(this.validParts(j));
            if (!i || !i.length || !k || k.length == 0) {
                throw new Error("Invalid date format.")
            }
            return {separators: i, parts: k}
        },
        parseDate: function (n, w, q, u) {
            if (n instanceof Date) {
                var y = new Date(n.valueOf() - n.getTimezoneOffset() * 60000);
                y.setMilliseconds(0);
                return y
            }
            if (/^\d{4}\-\d{1,2}\-\d{1,2}$/.test(n)) {
                w = this.parseFormat("yyyy-mm-dd", u)
            }
            if (/^\d{4}\-\d{1,2}\-\d{1,2}[T ]\d{1,2}\:\d{1,2}$/.test(n)) {
                w = this.parseFormat("yyyy-mm-dd hh:ii", u)
            }
            if (/^\d{4}\-\d{1,2}\-\d{1,2}[T ]\d{1,2}\:\d{1,2}\:\d{1,2}[Z]{0,1}$/.test(n)) {
                w = this.parseFormat("yyyy-mm-dd hh:ii:ss", u)
            }
            if (/^[-+]\d+[dmwy]([\s,]+[-+]\d+[dmwy])*$/.test(n)) {
                var z = /([-+]\d+)([dmwy])/, o = n.match(/([-+]\d+)([dmwy])/g), j, m;
                n = new Date();
                for (var p = 0; p < o.length; p++) {
                    j = z.exec(o[p]);
                    m = parseInt(j[1]);
                    switch (j[2]) {
                        case"d":
                            n.setUTCDate(n.getUTCDate() + m);
                            break;
                        case"m":
                            n = g.prototype.moveMonth.call(g.prototype, n, m);
                            break;
                        case"w":
                            n.setUTCDate(n.getUTCDate() + m * 7);
                            break;
                        case"y":
                            n = g.prototype.moveYear.call(g.prototype, n, m);
                            break
                    }
                }
                return h(n.getUTCFullYear(), n.getUTCMonth(), n.getUTCDate(), n.getUTCHours(), n.getUTCMinutes(), n.getUTCSeconds(), 0)
            }
            var o = n && n.toString().match(this.nonpunctuation) || [], n = new Date(0, 0, 0, 0, 0, 0, 0), t = {}, v = ["hh", "h", "ii", "i", "ss", "s", "yyyy", "yy", "M", "MM", "m", "mm", "D", "DD", "d", "dd", "H", "HH", "p", "P"], x = {
                hh: function (s, i) {
                    return s.setUTCHours(i)
                }, h: function (s, i) {
                    return s.setUTCHours(i)
                }, HH: function (s, i) {
                    return s.setUTCHours(i == 12 ? 0 : i)
                }, H: function (s, i) {
                    return s.setUTCHours(i == 12 ? 0 : i)
                }, ii: function (s, i) {
                    return s.setUTCMinutes(i)
                }, i: function (s, i) {
                    return s.setUTCMinutes(i)
                }, ss: function (s, i) {
                    return s.setUTCSeconds(i)
                }, s: function (s, i) {
                    return s.setUTCSeconds(i)
                }, yyyy: function (s, i) {
                    return s.setUTCFullYear(i)
                }, yy: function (s, i) {
                    return s.setUTCFullYear(2000 + i)
                }, m: function (s, i) {
                    i -= 1;
                    while (i < 0) {
                        i += 12
                    }
                    i %= 12;
                    s.setUTCMonth(i);
                    while (s.getUTCMonth() != i) {
                        if (isNaN(s.getUTCMonth())) {
                            return s
                        } else {
                            s.setUTCDate(s.getUTCDate() - 1)
                        }
                    }
                    return s
                }, d: function (s, i) {
                    return s.setUTCDate(i)
                }, p: function (s, i) {
                    return s.setUTCHours(i == 1 ? s.getUTCHours() + 12 : s.getUTCHours())
                }
            }, l, r, j;
            x.M = x.MM = x.mm = x.m;
            x.dd = x.d;
            x.P = x.p;
            n = h(n.getFullYear(), n.getMonth(), n.getDate(), n.getHours(), n.getMinutes(), n.getSeconds());
            if (o.length == w.parts.length) {
                for (var p = 0, k = w.parts.length; p < k; p++) {
                    l = parseInt(o[p], 10);
                    j = w.parts[p];
                    if (isNaN(l)) {
                        switch (j) {
                            case"MM":
                                r = e(f[q].months).filter(function () {
                                    var i = this.slice(0, o[p].length), s = o[p].slice(0, i.length);
                                    return i == s
                                });
                                l = e.inArray(r[0], f[q].months) + 1;
                                break;
                            case"M":
                                r = e(f[q].monthsShort).filter(function () {
                                    var i = this.slice(0, o[p].length), s = o[p].slice(0, i.length);
                                    return i.toLowerCase() == s.toLowerCase()
                                });
                                l = e.inArray(r[0], f[q].monthsShort) + 1;
                                break;
                            case"p":
                            case"P":
                                l = e.inArray(o[p].toLowerCase(), f[q].meridiem);
                                break
                        }
                    }
                    t[j] = l
                }
                for (var p = 0, A; p < v.length; p++) {
                    A = v[p];
                    if (A in t && !isNaN(t[A])) {
                        x[A](n, t[A])
                    }
                }
            }
            return n
        },
        formatDate: function (j, o, q, m) {
            if (j == null) {
                return ""
            }
            var p;
            if (m == "standard") {
                p = {
                    yy: j.getUTCFullYear().toString().substring(2),
                    yyyy: j.getUTCFullYear(),
                    m: j.getUTCMonth() + 1,
                    M: f[q].monthsShort[j.getUTCMonth()],
                    MM: f[q].months[j.getUTCMonth()],
                    d: j.getUTCDate(),
                    D: f[q].daysShort[j.getUTCDay()],
                    DD: f[q].days[j.getUTCDay()],
                    p: (f[q].meridiem.length == 2 ? f[q].meridiem[j.getUTCHours() < 12 ? 0 : 1] : ""),
                    h: j.getUTCHours(),
                    i: j.getUTCMinutes(),
                    s: j.getUTCSeconds()
                };
                if (f[q].meridiem.length == 2) {
                    p.H = (p.h % 12 == 0 ? 12 : p.h % 12)
                } else {
                    p.H = p.h
                }
                p.HH = (p.H < 10 ? "0" : "") + p.H;
                p.P = p.p.toUpperCase();
                p.hh = (p.h < 10 ? "0" : "") + p.h;
                p.ii = (p.i < 10 ? "0" : "") + p.i;
                p.ss = (p.s < 10 ? "0" : "") + p.s;
                p.dd = (p.d < 10 ? "0" : "") + p.d;
                p.mm = (p.m < 10 ? "0" : "") + p.m
            } else {
                if (m == "php") {
                    p = {
                        y: j.getUTCFullYear().toString().substring(2),
                        Y: j.getUTCFullYear(),
                        F: f[q].months[j.getUTCMonth()],
                        M: f[q].monthsShort[j.getUTCMonth()],
                        n: j.getUTCMonth() + 1,
                        t: d.getDaysInMonth(j.getUTCFullYear(), j.getUTCMonth()),
                        j: j.getUTCDate(),
                        l: f[q].days[j.getUTCDay()],
                        D: f[q].daysShort[j.getUTCDay()],
                        w: j.getUTCDay(),
                        N: (j.getUTCDay() == 0 ? 7 : j.getUTCDay()),
                        S: (j.getUTCDate() % 10 <= f[q].suffix.length ? f[q].suffix[j.getUTCDate() % 10 - 1] : ""),
                        a: (f[q].meridiem.length == 2 ? f[q].meridiem[j.getUTCHours() < 12 ? 0 : 1] : ""),
                        g: (j.getUTCHours() % 12 == 0 ? 12 : j.getUTCHours() % 12),
                        G: j.getUTCHours(),
                        i: j.getUTCMinutes(),
                        s: j.getUTCSeconds()
                    };
                    p.m = (p.n < 10 ? "0" : "") + p.n;
                    p.d = (p.j < 10 ? "0" : "") + p.j;
                    p.A = p.a.toString().toUpperCase();
                    p.h = (p.g < 10 ? "0" : "") + p.g;
                    p.H = (p.G < 10 ? "0" : "") + p.G;
                    p.i = (p.i < 10 ? "0" : "") + p.i;
                    p.s = (p.s < 10 ? "0" : "") + p.s
                } else {
                    throw new Error("Invalid format type.")
                }
            }
            var j = [], n = e.extend([], o.separators);
            for (var l = 0, k = o.parts.length; l < k; l++) {
                if (n.length) {
                    j.push(n.shift())
                }
                j.push(p[o.parts[l]])
            }
            if (n.length) {
                j.push(n.shift())
            }
            return j.join("")
        },
        convertViewMode: function (i) {
            switch (i) {
                case 4:
                case"decade":
                    i = 4;
                    break;
                case 3:
                case"year":
                    i = 3;
                    break;
                case 2:
                case"month":
                    i = 2;
                    break;
                case 1:
                case"day":
                    i = 1;
                    break;
                case 0:
                case"hour":
                    i = 0;
                    break
            }
            return i
        },
        headTemplate: '<thead><tr><th class="prev"><i class="{iconType} {leftArrow}"/></th><th colspan="5" class="switch"></th><th class="next"><i class="{iconType} {rightArrow}"/></th></tr></thead>',
        headTemplateV3: '<thead><tr><th class="prev"><span class="{iconType} {leftArrow}"></span> </th><th colspan="5" class="switch"></th><th class="next"><span class="{iconType} {rightArrow}"></span> </th></tr></thead>',
        contTemplate: '<tbody><tr><td colspan="7"></td></tr></tbody>',
        footTemplate: '<tfoot><tr><th colspan="7" class="today"></th></tr></tfoot>'
    };
    d.template = '<div class="datetimepicker"><div class="datetimepicker-minutes"><table class=" table-condensed">' + d.headTemplate + d.contTemplate + d.footTemplate + '</table></div><div class="datetimepicker-hours"><table class=" table-condensed">' + d.headTemplate + d.contTemplate + d.footTemplate + '</table></div><div class="datetimepicker-days"><table class=" table-condensed">' + d.headTemplate + "<tbody></tbody>" + d.footTemplate + '</table></div><div class="datetimepicker-months"><table class="table-condensed">' + d.headTemplate + d.contTemplate + d.footTemplate + '</table></div><div class="datetimepicker-years"><table class="table-condensed">' + d.headTemplate + d.contTemplate + d.footTemplate + "</table></div></div>";
    d.templateV3 = '<div class="datetimepicker"><div class="datetimepicker-minutes"><table class=" table-condensed">' + d.headTemplateV3 + d.contTemplate + d.footTemplate + '</table></div><div class="datetimepicker-hours"><table class=" table-condensed">' + d.headTemplateV3 + d.contTemplate + d.footTemplate + '</table></div><div class="datetimepicker-days"><table class=" table-condensed">' + d.headTemplateV3 + "<tbody></tbody>" + d.footTemplate + '</table></div><div class="datetimepicker-months"><table class="table-condensed">' + d.headTemplateV3 + d.contTemplate + d.footTemplate + '</table></div><div class="datetimepicker-years"><table class="table-condensed">' + d.headTemplateV3 + d.contTemplate + d.footTemplate + "</table></div></div>";
    e.fn.datetimepicker.DPGlobal = d;
    e.fn.datetimepicker.noConflict = function () {
        e.fn.datetimepicker = a;
        return this
    };
    e(document).on("focus.datetimepicker.data-api click.datetimepicker.data-api", '[data-provide="datetimepicker"]', function (j) {
        var i = e(this);
        if (i.data("datetimepicker")) {
            return
        }
        j.preventDefault();
        i.datetimepicker("show")
    });
    e(function () {
        e('[data-provide="datetimepicker-inline"]').datetimepicker()
    })
}(window.jQuery);