From b15ce016cb234e91caa5266db8725741efca55c6 Mon Sep 17 00:00:00 2001 From: matscher <> Date: Tue, 7 Apr 2015 18:49:11 +0000 Subject: [PATCH] contrib/Widgets/DateTimePicker: added new widget DateTimePicker git-svn-id: https://svn.fhem.de/fhem/trunk@8395 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- .../Widgets/DateTimePicker/MIT-LICENSE.txt | 19 + .../Widgets/DateTimePicker/datetimepicker.png | Bin 0 -> 11558 bytes .../DateTimePicker/datetimepickerdate.png | Bin 0 -> 8591 bytes .../DateTimePicker/datetimepickerpopup.png | Bin 0 -> 17551 bytes .../DateTimePicker/datetimepickertime.png | Bin 0 -> 5441 bytes .../DateTimePicker/fhemweb_datetime.js | 106 + .../DateTimePicker/jquery.datetimepicker.css | 523 +++++ .../DateTimePicker/jquery.datetimepicker.js | 1933 +++++++++++++++++ .../contrib/Widgets/DateTimePicker/readme.txt | 53 + 9 files changed, 2634 insertions(+) create mode 100644 fhem/contrib/Widgets/DateTimePicker/MIT-LICENSE.txt create mode 100644 fhem/contrib/Widgets/DateTimePicker/datetimepicker.png create mode 100644 fhem/contrib/Widgets/DateTimePicker/datetimepickerdate.png create mode 100644 fhem/contrib/Widgets/DateTimePicker/datetimepickerpopup.png create mode 100644 fhem/contrib/Widgets/DateTimePicker/datetimepickertime.png create mode 100644 fhem/contrib/Widgets/DateTimePicker/fhemweb_datetime.js create mode 100644 fhem/contrib/Widgets/DateTimePicker/jquery.datetimepicker.css create mode 100644 fhem/contrib/Widgets/DateTimePicker/jquery.datetimepicker.js create mode 100644 fhem/contrib/Widgets/DateTimePicker/readme.txt diff --git a/fhem/contrib/Widgets/DateTimePicker/MIT-LICENSE.txt b/fhem/contrib/Widgets/DateTimePicker/MIT-LICENSE.txt new file mode 100644 index 000000000..2e68e7d6a --- /dev/null +++ b/fhem/contrib/Widgets/DateTimePicker/MIT-LICENSE.txt @@ -0,0 +1,19 @@ +Copyright (c) 2013 http://xdsoft.net + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. \ No newline at end of file diff --git a/fhem/contrib/Widgets/DateTimePicker/datetimepicker.png b/fhem/contrib/Widgets/DateTimePicker/datetimepicker.png new file mode 100644 index 0000000000000000000000000000000000000000..99e00ff11d5b81c9374842e0dacce9f27f7a3eef GIT binary patch literal 11558 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 T#OZ#u((ANw2TxhIxdA$AyJ!zJJiMvpl?+kU4Tw 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

KG zEztY+hhF{;e%is<4hEuiV4MC?!Kgi~J0qyTchDpO zv&LYqZd)=_?g(^h^?XJaA7GIMhqyI=XZu?o*n^Z^LN}bhKR@-hScnqn7XC}Lu{(@& zDkD8bz+rMQwRg(Ec|9WFVoxG0j|w4z(S{<$ zjaoMU2Gr#)BYQ~j=pT=%U2_A?xjiTe*+;P#a`39S8F|F&Uwju>!t?0j5>l<=XwN=5gEEU=IzTC=D)|fk`KYSI@_gNgvRAEpnJKoGlt~eHw6c+SP1yxkQ3& z_j~ybC)e*lew%#BSVHbrFJW=a^8H_5z@Mb;O0bsWr>9gMo~*nHWT9qKxJIrRiIS3? zexl_9U>B#&eo>pk1Xgt6QtxA)^ty;ql?7xT7?(WX3MW9V|=j|1AxCSwreo#WtU^X7GAX3vdne@c3SjCv-m3v*;@b7IrzL^TG(xWdmFEg)LC${DWnxl>glwL-YHqaZK z7W-ZzoYxGz=Z`0F_Cfl&{*+T9m^80=ezB&FY4opf1PCoUbWWY z)S%+pi(KFhqt>A|6roVbllu~KM48OQN;GylKc#T8?NF0mwRz&ut1wvc1yQX3nliqU zW;Fdr`WpIrxrSxnO;aQ4X+BIE8(tG``Yhmbzu)AWT3}1N;RDuztmw=(kvH}2ouoy% zp4k)&nC=ad%sy#e7+cdlJPAR`)que>WfmfT#hR ziwTr_paHe~5||lx03k#0xbFdDVFEyk$oc3EZdBvfjpyP6%fR0YL6MhMmI6x{zxjUv D!Z2Of literal 0 HcmV?d00001 diff --git a/fhem/contrib/Widgets/DateTimePicker/datetimepickertime.png b/fhem/contrib/Widgets/DateTimePicker/datetimepickertime.png new file mode 100644 index 0000000000000000000000000000000000000000..96e4ec4fba56ababe8b18c47866783e69322ab96 GIT binary patch literal 5441 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").get(0); + $(newEl).append(''); + var inp = $(newEl).find("input"); + if(elName) + $(inp).attr("name", elName); + if(currVal != undefined) + $(inp).val(currVal); + + function addBlur() { if(cmd) $(inp).blur(function() { cmd($(inp).val()) }); }; + newEl.setValueFn = function(arg){ $(inp).val(arg) }; + addBlur(); + + var options = { + lang:'de', + i18n:{ + de:{ + months:[ + "Januar","Februar","März","April", + "Mai","Juni","Juli","August", + "September","Oktober","November","Dezember", + ], + dayOfWeek:[ + "So.", "Mo", "Di", "Mi", + "Do", "Fr", "Sa.", + ] + } + }, + theme:"dark", + format:"d.m.Y H:i", + onClose: function(current_time,$input){ + console.log("set data"); + $('#datetimepicker'+devName).blur(); + ;} + }; + + for(var i1=0; i1div >div { + background: #f5f5f5; + border-top: 1px solid #ddd; + color: #666; + font-size: 12px; + text-align: center; + border-collapse: collapse; + cursor: pointer; + border-bottom-width: 0; + height: 25px; + line-height: 25px; +} + +.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box >div > div:first-child { + border-top-width: 0; +} + +.xdsoft_datetimepicker .xdsoft_today_button:hover, +.xdsoft_datetimepicker .xdsoft_next:hover, +.xdsoft_datetimepicker .xdsoft_prev:hover { + opacity: 1; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; +} + +.xdsoft_datetimepicker .xdsoft_label { + display: inline; + position: relative; + z-index: 9999; + margin: 0; + padding: 5px 3px; + font-size: 14px; + line-height: 20px; + font-weight: bold; + background-color: #fff; + float: left; + width: 182px; + text-align: center; + cursor: pointer; +} + +.xdsoft_datetimepicker .xdsoft_label:hover>span { + text-decoration: underline; +} + +.xdsoft_datetimepicker .xdsoft_label:hover i { + opacity: 1.0; +} + +.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select { + border: 1px solid #ccc; + position: absolute; + right: 0; + top: 30px; + z-index: 101; + display: none; + background: #fff; + max-height: 160px; + overflow-y: hidden; +} + +.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select.xdsoft_monthselect{ right: -7px } +.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select.xdsoft_yearselect{ right: 2px } +.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select > div > .xdsoft_option:hover { + color: #fff; + background: #ff8000; +} + +.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select > div > .xdsoft_option { + padding: 2px 10px 2px 5px; + text-decoration: none !important; +} + +.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select > div > .xdsoft_option.xdsoft_current { + background: #33aaff; + box-shadow: #178fe5 0 1px 3px 0 inset; + color: #fff; + font-weight: 700; +} + +.xdsoft_datetimepicker .xdsoft_month { + width: 100px; + text-align: right; +} + +.xdsoft_datetimepicker .xdsoft_calendar { + clear: both; +} + +.xdsoft_datetimepicker .xdsoft_year{ + width: 48px; + margin-left: 5px; +} + +.xdsoft_datetimepicker .xdsoft_calendar table { + border-collapse: collapse; + width: 100%; + +} + +.xdsoft_datetimepicker .xdsoft_calendar td > div { + padding-right: 5px; +} + +.xdsoft_datetimepicker .xdsoft_calendar th { + height: 25px; +} + +.xdsoft_datetimepicker .xdsoft_calendar td,.xdsoft_datetimepicker .xdsoft_calendar th { + width: 14.2857142%; + background: #f5f5f5; + border: 1px solid #ddd; + color: #666; + font-size: 12px; + text-align: right; + vertical-align: middle; + padding: 0; + border-collapse: collapse; + cursor: pointer; + height: 25px; +} +.xdsoft_datetimepicker.xdsoft_showweeks .xdsoft_calendar td,.xdsoft_datetimepicker.xdsoft_showweeks .xdsoft_calendar th { + width: 12.5%; +} + +.xdsoft_datetimepicker .xdsoft_calendar th { + background: #f1f1f1; +} + +.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_today { + color: #33aaff; +} + +.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_default, +.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_current, +.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box >div >div.xdsoft_current { + background: #33aaff; + box-shadow: #178fe5 0 1px 3px 0 inset; + color: #fff; + font-weight: 700; +} + +.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_other_month, +.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_disabled, +.xdsoft_datetimepicker .xdsoft_time_box >div >div.xdsoft_disabled { + opacity: 0.5; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; + cursor: default; +} + +.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_other_month.xdsoft_disabled { + opacity: 0.2; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=20)"; +} + +.xdsoft_datetimepicker .xdsoft_calendar td:hover, +.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box >div >div:hover { + color: #fff !important; + background: #ff8000 !important; + box-shadow: none !important; +} + +.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_current.xdsoft_disabled:hover, +.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box>div>div.xdsoft_current.xdsoft_disabled:hover { + background: #33aaff !important; + box-shadow: #178fe5 0 1px 3px 0 inset !important; + color: #fff !important; +} + +.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_disabled:hover, +.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box >div >div.xdsoft_disabled:hover { + color: inherit !important; + background: inherit !important; + box-shadow: inherit !important; +} + +.xdsoft_datetimepicker .xdsoft_calendar th { + font-weight: 700; + text-align: center; + color: #999; + cursor: default; +} + +.xdsoft_datetimepicker .xdsoft_copyright { + color: #ccc !important; + font-size: 10px; + clear: both; + float: none; + margin-left: 8px; +} + +.xdsoft_datetimepicker .xdsoft_copyright a { color: #eee !important } +.xdsoft_datetimepicker .xdsoft_copyright a:hover { color: #aaa !important } + +.xdsoft_time_box { + position: relative; + border: 1px solid #ccc; +} +.xdsoft_scrollbar >.xdsoft_scroller { + background: #ccc !important; + height: 20px; + border-radius: 3px; +} +.xdsoft_scrollbar { + position: absolute; + width: 7px; + right: 0; + top: 0; + bottom: 0; + cursor: pointer; +} +.xdsoft_scroller_box { + position: relative; +} + +.xdsoft_datetimepicker.xdsoft_dark { + box-shadow: 0 5px 15px -5px rgba(255, 255, 255, 0.506); + background: #000; + border-bottom: 1px solid #444; + border-left: 1px solid #333; + border-right: 1px solid #333; + border-top: 1px solid #333; + color: #ccc; +} + +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_timepicker .xdsoft_time_box { + border-bottom: 1px solid #222; +} +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_timepicker .xdsoft_time_box >div >div { + background: #0a0a0a; + border-top: 1px solid #222; + color: #999; +} + +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_label { + background-color: #000; +} +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_label > .xdsoft_select { + border: 1px solid #333; + background: #000; +} + +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_label > .xdsoft_select > div > .xdsoft_option:hover { + color: #000; + background: #007fff; +} + +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_label > .xdsoft_select > div > .xdsoft_option.xdsoft_current { + background: #cc5500; + box-shadow: #b03e00 0 1px 3px 0 inset; + color: #000; +} + +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_label i, +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_prev, +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_next, +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_today_button { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAAAeCAYAAADaW7vzAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QUExQUUzOTA0M0UyMTFFNDlBM0FFQTJENTExRDVBODYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QUExQUUzOTE0M0UyMTFFNDlBM0FFQTJENTExRDVBODYiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpBQTFBRTM4RTQzRTIxMUU0OUEzQUVBMkQ1MTFENUE4NiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpBQTFBRTM4RjQzRTIxMUU0OUEzQUVBMkQ1MTFENUE4NiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pp0VxGEAAAIASURBVHja7JrNSgMxEMebtgh+3MSLr1T1Xn2CHoSKB08+QmR8Bx9A8e7RixdB9CKCoNdexIugxFlJa7rNZneTbLIpM/CnNLsdMvNjM8l0mRCiQ9Ye61IKCAgZAUnH+mU3MMZaHYChBnJUDzWOFZdVfc5+ZFLbrWDeXPwbxIqrLLfaeS0hEBVGIRQCEiZoHQwtlGSByCCdYBl8g8egTTAWoKQMRBRBcZxYlhzhKegqMOageErsCHVkk3hXIFooDgHB1KkHIHVgzKB4ADJQ/A1jAFmAYhkQqA5TOBtocrKrgXwQA8gcFIuAIO8sQSA7hidvPwaQGZSaAYHOUWJABhWWw2EMIH9QagQERU4SArJXo0ZZL18uvaxejXt/Em8xjVBXmvFr1KVm/AJ10tRe2XnraNqaJvKE3KHuUbfK1E+VHB0q40/y3sdQSxY4FHWeKJCunP8UyDdqJZenT3ntVV5jIYCAh20vT7ioP8tpf6E2lfEMwERe+whV1MHjwZB7PBiCxcGQWwKZKD62lfGNnP/1poFAA60T7rF1UgcKd2id3KDeUS+oLWV8DfWAepOfq00CgQabi9zjcgJVYVD7PVzQUAUGAQkbNJTBICDhgwYTjDYD6XeW08ZKh+A4pYkzenOxXUbvZcWz7E8ykRMnIHGX1XPl+1m2vPYpL+2qdb8CDAARlKFEz/ZVkAAAAABJRU5ErkJggg==); +} + +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td, +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar th { + background: #0a0a0a; + border: 1px solid #222; + color: #999; +} + +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar th { + background: #0e0e0e; +} + +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td.xdsoft_today { + color: #cc5500; +} + +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td.xdsoft_default, +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td.xdsoft_current, +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_timepicker .xdsoft_time_box >div >div.xdsoft_current { + background: #cc5500; + box-shadow: #b03e00 0 1px 3px 0 inset; + color: #000; +} + +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td:hover, +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_timepicker .xdsoft_time_box >div >div:hover { + color: #000 !important; + background: #007fff !important; +} + +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar th { + color: #666; +} + +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_copyright { color: #333 !important } +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_copyright a { color: #111 !important } +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_copyright a:hover { color: #555 !important } + +.xdsoft_dark .xdsoft_time_box { + border: 1px solid #333; +} + +.xdsoft_dark .xdsoft_scrollbar >.xdsoft_scroller { + background: #333 !important; +} +.xdsoft_datetimepicker .xdsoft_save_selected { + display: block; + border: 1px solid #dddddd !important; + margin-top: 5px; + width: 100%; + color: #454551; + font-size: 13px; +} +.xdsoft_datetimepicker .blue-gradient-button { + font-family: "museo-sans", "Book Antiqua", sans-serif; + font-size: 12px; + font-weight: 300; + color: #82878c; + height: 28px; + position: relative; + padding: 4px 17px 4px 33px; + border: 1px solid #d7d8da; + background: -moz-linear-gradient(top, #fff 0%, #f4f8fa 73%); + /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fff), color-stop(73%, #f4f8fa)); + /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #fff 0%, #f4f8fa 73%); + /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, #fff 0%, #f4f8fa 73%); + /* Opera 11.10+ */ + background: -ms-linear-gradient(top, #fff 0%, #f4f8fa 73%); + /* IE10+ */ + background: linear-gradient(to bottom, #fff 0%, #f4f8fa 73%); + /* W3C */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#fff', endColorstr='#f4f8fa',GradientType=0 ); +/* IE6-9 */ +} +.xdsoft_datetimepicker .blue-gradient-button:hover, .xdsoft_datetimepicker .blue-gradient-button:focus, .xdsoft_datetimepicker .blue-gradient-button:hover span, .xdsoft_datetimepicker .blue-gradient-button:focus span { + color: #454551; + background: -moz-linear-gradient(top, #f4f8fa 0%, #FFF 73%); + /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f4f8fa), color-stop(73%, #FFF)); + /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #f4f8fa 0%, #FFF 73%); + /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, #f4f8fa 0%, #FFF 73%); + /* Opera 11.10+ */ + background: -ms-linear-gradient(top, #f4f8fa 0%, #FFF 73%); + /* IE10+ */ + background: linear-gradient(to bottom, #f4f8fa 0%, #FFF 73%); + /* W3C */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f4f8fa', endColorstr='#FFF',GradientType=0 ); + /* IE6-9 */ +} diff --git a/fhem/contrib/Widgets/DateTimePicker/jquery.datetimepicker.js b/fhem/contrib/Widgets/DateTimePicker/jquery.datetimepicker.js new file mode 100644 index 000000000..857660bf0 --- /dev/null +++ b/fhem/contrib/Widgets/DateTimePicker/jquery.datetimepicker.js @@ -0,0 +1,1933 @@ +/** + * @preserve jQuery DateTimePicker plugin v2.4.1 + * @homepage http://xdsoft.net/jqplugins/datetimepicker/ + * (c) 2014, Chupurnov Valeriy. + */ +/*global document,window,jQuery,setTimeout,clearTimeout*/ +(function ($) { + 'use strict'; + var default_options = { + i18n: { + ar: { // Arabic + months: [ + "كانون الثاني", "شباط", "آذار", "نيسان", "مايو", "حزيران", "تموز", "آب", "أيلول", "تشرين الأول", "تشرين الثاني", "كانون الأول" + ], + dayOfWeek: [ + "ن", "ث", "ع", "خ", "ج", "س", "ح" + ] + }, + ro: { // Romanian + months: [ + "ianuarie", "februarie", "martie", "aprilie", "mai", "iunie", "iulie", "august", "septembrie", "octombrie", "noiembrie", "decembrie" + ], + dayOfWeek: [ + "l", "ma", "mi", "j", "v", "s", "d" + ] + }, + id: { // Indonesian + months: [ + "Januari", "Februari", "Maret", "April", "Mei", "Juni", "Juli", "Agustus", "September", "Oktober", "November", "Desember" + ], + dayOfWeek: [ + "Sen", "Sel", "Rab", "Kam", "Jum", "Sab", "Min" + ] + }, + bg: { // Bulgarian + months: [ + "Януари", "Февруари", "Март", "Април", "Май", "Юни", "Юли", "Август", "Септември", "Октомври", "Ноември", "Декември" + ], + dayOfWeek: [ + "Нд", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб" + ] + }, + fa: { // Persian/Farsi + months: [ + 'فروردین', 'اردیبهشت', 'خرداد', 'تیر', 'مرداد', 'شهریور', 'مهر', 'آبان', 'آذر', 'دی', 'بهمن', 'اسفند' + ], + dayOfWeek: [ + 'یکشنبه', 'دوشنبه', 'سه شنبه', 'چهارشنبه', 'پنجشنبه', 'جمعه', 'شنبه' + ] + }, + ru: { // Russian + months: [ + 'Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь' + ], + dayOfWeek: [ + "Вск", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб" + ] + }, + uk: { // Ukrainian + months: [ + 'Січень', 'Лютий', 'Березень', 'Квітень', 'Травень', 'Червень', 'Липень', 'Серпень', 'Вересень', 'Жовтень', 'Листопад', 'Грудень' + ], + dayOfWeek: [ + "Ндл", "Пнд", "Втр", "Срд", "Чтв", "Птн", "Сбт" + ] + }, + en: { // English + months: [ + "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" + ], + dayOfWeek: [ + "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" + ] + }, + el: { // Ελληνικά + months: [ + "Ιανουάριος", "Φεβρουάριος", "Μάρτιος", "Απρίλιος", "Μάιος", "Ιούνιος", "Ιούλιος", "Αύγουστος", "Σεπτέμβριος", "Οκτώβριος", "Νοέμβριος", "Δεκέμβριος" + ], + dayOfWeek: [ + "Κυρ", "Δευ", "Τρι", "Τετ", "Πεμ", "Παρ", "Σαβ" + ] + }, + de: { // German + months: [ + 'Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember' + ], + dayOfWeek: [ + "So", "Mo", "Di", "Mi", "Do", "Fr", "Sa" + ] + }, + nl: { // Dutch + months: [ + "januari", "februari", "maart", "april", "mei", "juni", "juli", "augustus", "september", "oktober", "november", "december" + ], + dayOfWeek: [ + "zo", "ma", "di", "wo", "do", "vr", "za" + ] + }, + tr: { // Turkish + months: [ + "Ocak", "Şubat", "Mart", "Nisan", "Mayıs", "Haziran", "Temmuz", "Ağustos", "Eylül", "Ekim", "Kasım", "Aralık" + ], + dayOfWeek: [ + "Paz", "Pts", "Sal", "Çar", "Per", "Cum", "Cts" + ] + }, + fr: { //French + months: [ + "Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre" + ], + dayOfWeek: [ + "Dim", "Lun", "Mar", "Mer", "Jeu", "Ven", "Sam" + ] + }, + es: { // Spanish + months: [ + "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre" + ], + dayOfWeek: [ + "Dom", "Lun", "Mar", "Mié", "Jue", "Vie", "Sáb" + ] + }, + th: { // Thai + months: [ + 'มกราคม', 'กุมภาพันธ์', 'มีนาคม', 'เมษายน', 'พฤษภาคม', 'มิถุนายน', 'กรกฎาคม', 'สิงหาคม', 'กันยายน', 'ตุลาคม', 'พฤศจิกายน', 'ธันวาคม' + ], + dayOfWeek: [ + 'อา.', 'จ.', 'อ.', 'พ.', 'พฤ.', 'ศ.', 'ส.' + ] + }, + pl: { // Polish + months: [ + "styczeń", "luty", "marzec", "kwiecień", "maj", "czerwiec", "lipiec", "sierpień", "wrzesień", "październik", "listopad", "grudzień" + ], + dayOfWeek: [ + "nd", "pn", "wt", "śr", "cz", "pt", "sb" + ] + }, + pt: { // Portuguese + months: [ + "Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro" + ], + dayOfWeek: [ + "Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sab" + ] + }, + ch: { // Simplified Chinese + months: [ + "一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月" + ], + dayOfWeek: [ + "日", "一", "二", "三", "四", "五", "六" + ] + }, + se: { // Swedish + months: [ + "Januari", "Februari", "Mars", "April", "Maj", "Juni", "Juli", "Augusti", "September", "Oktober", "November", "December" + ], + dayOfWeek: [ + "Sön", "Mån", "Tis", "Ons", "Tor", "Fre", "Lör" + ] + }, + kr: { // Korean + months: [ + "1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월" + ], + dayOfWeek: [ + "일", "월", "화", "수", "목", "금", "토" + ] + }, + it: { // Italian + months: [ + "Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre" + ], + dayOfWeek: [ + "Dom", "Lun", "Mar", "Mer", "Gio", "Ven", "Sab" + ] + }, + da: { // Dansk + months: [ + "January", "Februar", "Marts", "April", "Maj", "Juni", "July", "August", "September", "Oktober", "November", "December" + ], + dayOfWeek: [ + "Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør" + ] + }, + no: { // Norwegian + months: [ + "Januar", "Februar", "Mars", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Desember" + ], + dayOfWeek: [ + "Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør" + ] + }, + ja: { // Japanese + months: [ + "1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月" + ], + dayOfWeek: [ + "日", "月", "火", "水", "木", "金", "土" + ] + }, + vi: { // Vietnamese + months: [ + "Tháng 1", "Tháng 2", "Tháng 3", "Tháng 4", "Tháng 5", "Tháng 6", "Tháng 7", "Tháng 8", "Tháng 9", "Tháng 10", "Tháng 11", "Tháng 12" + ], + dayOfWeek: [ + "CN", "T2", "T3", "T4", "T5", "T6", "T7" + ] + }, + sl: { // Slovenščina + months: [ + "Januar", "Februar", "Marec", "April", "Maj", "Junij", "Julij", "Avgust", "September", "Oktober", "November", "December" + ], + dayOfWeek: [ + "Ned", "Pon", "Tor", "Sre", "Čet", "Pet", "Sob" + ] + }, + cs: { // Čeština + months: [ + "Leden", "Únor", "Březen", "Duben", "Květen", "Červen", "Červenec", "Srpen", "Září", "Říjen", "Listopad", "Prosinec" + ], + dayOfWeek: [ + "Ne", "Po", "Út", "St", "Čt", "Pá", "So" + ] + }, + hu: { // Hungarian + months: [ + "Január", "Február", "Március", "Április", "Május", "Június", "Július", "Augusztus", "Szeptember", "Október", "November", "December" + ], + dayOfWeek: [ + "Va", "Hé", "Ke", "Sze", "Cs", "Pé", "Szo" + ] + }, + az: { //Azerbaijanian (Azeri) + months: [ + "Yanvar", "Fevral", "Mart", "Aprel", "May", "Iyun", "Iyul", "Avqust", "Sentyabr", "Oktyabr", "Noyabr", "Dekabr" + ], + dayOfWeek: [ + "B", "Be", "Ça", "Ç", "Ca", "C", "Ş" + ] + }, + bs: { //Bosanski + months: [ + "Januar", "Februar", "Mart", "April", "Maj", "Jun", "Jul", "Avgust", "Septembar", "Oktobar", "Novembar", "Decembar" + ], + dayOfWeek: [ + "Ned", "Pon", "Uto", "Sri", "Čet", "Pet", "Sub" + ] + }, + ca: { //Català + months: [ + "Gener", "Febrer", "Març", "Abril", "Maig", "Juny", "Juliol", "Agost", "Setembre", "Octubre", "Novembre", "Desembre" + ], + dayOfWeek: [ + "Dg", "Dl", "Dt", "Dc", "Dj", "Dv", "Ds" + ] + }, + 'en-GB': { //English (British) + months: [ + "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" + ], + dayOfWeek: [ + "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" + ] + }, + et: { //"Eesti" + months: [ + "Jaanuar", "Veebruar", "Märts", "Aprill", "Mai", "Juuni", "Juuli", "August", "September", "Oktoober", "November", "Detsember" + ], + dayOfWeek: [ + "P", "E", "T", "K", "N", "R", "L" + ] + }, + eu: { //Euskara + months: [ + "Urtarrila", "Otsaila", "Martxoa", "Apirila", "Maiatza", "Ekaina", "Uztaila", "Abuztua", "Iraila", "Urria", "Azaroa", "Abendua" + ], + dayOfWeek: [ + "Ig.", "Al.", "Ar.", "Az.", "Og.", "Or.", "La." + ] + }, + fi: { //Finnish (Suomi) + months: [ + "Tammikuu", "Helmikuu", "Maaliskuu", "Huhtikuu", "Toukokuu", "Kesäkuu", "Heinäkuu", "Elokuu", "Syyskuu", "Lokakuu", "Marraskuu", "Joulukuu" + ], + dayOfWeek: [ + "Su", "Ma", "Ti", "Ke", "To", "Pe", "La" + ] + }, + gl: { //Galego + months: [ + "Xan", "Feb", "Maz", "Abr", "Mai", "Xun", "Xul", "Ago", "Set", "Out", "Nov", "Dec" + ], + dayOfWeek: [ + "Dom", "Lun", "Mar", "Mer", "Xov", "Ven", "Sab" + ] + }, + hr: { //Hrvatski + months: [ + "Siječanj", "Veljača", "Ožujak", "Travanj", "Svibanj", "Lipanj", "Srpanj", "Kolovoz", "Rujan", "Listopad", "Studeni", "Prosinac" + ], + dayOfWeek: [ + "Ned", "Pon", "Uto", "Sri", "Čet", "Pet", "Sub" + ] + }, + ko: { //Korean (한국어) + months: [ + "1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월" + ], + dayOfWeek: [ + "일", "월", "화", "수", "목", "금", "토" + ] + }, + lt: { //Lithuanian (lietuvių) + months: [ + "Sausio", "Vasario", "Kovo", "Balandžio", "Gegužės", "Birželio", "Liepos", "Rugpjūčio", "Rugsėjo", "Spalio", "Lapkričio", "Gruodžio" + ], + dayOfWeek: [ + "Sek", "Pir", "Ant", "Tre", "Ket", "Pen", "Šeš" + ] + }, + lv: { //Latvian (Latviešu) + months: [ + "Janvāris", "Februāris", "Marts", "Aprīlis ", "Maijs", "Jūnijs", "Jūlijs", "Augusts", "Septembris", "Oktobris", "Novembris", "Decembris" + ], + dayOfWeek: [ + "Sv", "Pr", "Ot", "Tr", "Ct", "Pk", "St" + ] + }, + mk: { //Macedonian (Македонски) + months: [ + "јануари", "февруари", "март", "април", "мај", "јуни", "јули", "август", "септември", "октомври", "ноември", "декември" + ], + dayOfWeek: [ + "нед", "пон", "вто", "сре", "чет", "пет", "саб" + ] + }, + mn: { //Mongolian (Монгол) + months: [ + "1-р сар", "2-р сар", "3-р сар", "4-р сар", "5-р сар", "6-р сар", "7-р сар", "8-р сар", "9-р сар", "10-р сар", "11-р сар", "12-р сар" + ], + dayOfWeek: [ + "Дав", "Мяг", "Лха", "Пүр", "Бсн", "Бям", "Ням" + ] + }, + 'pt-BR': { //Português(Brasil) + months: [ + "Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro" + ], + dayOfWeek: [ + "Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb" + ] + }, + sk: { //Slovenčina + months: [ + "Január", "Február", "Marec", "Apríl", "Máj", "Jún", "Júl", "August", "September", "Október", "November", "December" + ], + dayOfWeek: [ + "Ne", "Po", "Ut", "St", "Št", "Pi", "So" + ] + }, + sq: { //Albanian (Shqip) + months: [ + "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" + ], + dayOfWeek: [ + "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" + ] + }, + 'sr-YU': { //Serbian (Srpski) + months: [ + "Januar", "Februar", "Mart", "April", "Maj", "Jun", "Jul", "Avgust", "Septembar", "Oktobar", "Novembar", "Decembar" + ], + dayOfWeek: [ + "Ned", "Pon", "Uto", "Sre", "čet", "Pet", "Sub" + ] + }, + sr: { //Serbian Cyrillic (Српски) + months: [ + "јануар", "фебруар", "март", "април", "мај", "јун", "јул", "август", "септембар", "октобар", "новембар", "децембар" + ], + dayOfWeek: [ + "нед", "пон", "уто", "сре", "чет", "пет", "суб" + ] + }, + sv: { //Svenska + months: [ + "Januari", "Februari", "Mars", "April", "Maj", "Juni", "Juli", "Augusti", "September", "Oktober", "November", "December" + ], + dayOfWeek: [ + "Sön", "Mån", "Tis", "Ons", "Tor", "Fre", "Lör" + ] + }, + 'zh-TW': { //Traditional Chinese (繁體中文) + months: [ + "一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月" + ], + dayOfWeek: [ + "日", "一", "二", "三", "四", "五", "六" + ] + }, + zh: { //Simplified Chinese (简体中文) + months: [ + "一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月" + ], + dayOfWeek: [ + "日", "一", "二", "三", "四", "五", "六" + ] + }, + he: { //Hebrew (עברית) + months: [ + 'ינואר', 'פברואר', 'מרץ', 'אפריל', 'מאי', 'יוני', 'יולי', 'אוגוסט', 'ספטמבר', 'אוקטובר', 'נובמבר', 'דצמבר' + ], + dayOfWeek: [ + 'א\'', 'ב\'', 'ג\'', 'ד\'', 'ה\'', 'ו\'', 'שבת' + ] + }, + hy: { // Armenian + months: [ + "Հունվար", "Փետրվար", "Մարտ", "Ապրիլ", "Մայիս", "Հունիս", "Հուլիս", "Օգոստոս", "Սեպտեմբեր", "Հոկտեմբեր", "Նոյեմբեր", "Դեկտեմբեր" + ], + dayOfWeek: [ + "Կի", "Երկ", "Երք", "Չոր", "Հնգ", "Ուրբ", "Շբթ" + ] + }, + kg: { // Kyrgyz + months: [ + 'Үчтүн айы', 'Бирдин айы', 'Жалган Куран', 'Чын Куран', 'Бугу', 'Кулжа', 'Теке', 'Баш Оона', 'Аяк Оона', 'Тогуздун айы', 'Жетинин айы', 'Бештин айы' + ], + dayOfWeek: [ + "Жек", "Дүй", "Шей", "Шар", "Бей", "Жум", "Ише" + ] + } + }, + value: '', + lang: 'en', + + format: 'Y/m/d H:i', + formatTime: 'H:i', + formatDate: 'Y/m/d', + + startDate: false, // new Date(), '1986/12/08', '-1970/01/05','-1970/01/05', + step: 60, + monthChangeSpinner: true, + + closeOnDateSelect: false, + closeOnTimeSelect: false, + closeOnWithoutClick: true, + closeOnInputClick: true, + + timepicker: true, + datepicker: true, + weeks: false, + + defaultTime: false, // use formatTime format (ex. '10:00' for formatTime: 'H:i') + defaultDate: false, // use formatDate format (ex new Date() or '1986/12/08' or '-1970/01/05' or '-1970/01/05') + + minDate: false, + maxDate: false, + minTime: false, + maxTime: false, + + allowTimes: [], + opened: false, + initTime: true, + inline: false, + theme: '', + + onSelectDate: function () {}, + onSelectTime: function () {}, + onChangeMonth: function () {}, + onChangeYear: function () {}, + onChangeDateTime: function () {}, + onShow: function () {}, + onClose: function () {}, + onGenerate: function () {}, + + withoutCopyright: true, + inverseButton: false, + hours12: false, + next: 'xdsoft_next', + prev : 'xdsoft_prev', + dayOfWeekStart: 0, + parentID: 'body', + timeHeightInTimePicker: 25, + timepickerScrollbar: true, + todayButton: true, + prevButton: true, + nextButton: true, + defaultSelect: true, + + scrollMonth: true, + scrollTime: true, + scrollInput: true, + + lazyInit: false, + mask: false, + validateOnBlur: true, + allowBlank: true, + yearStart: 1950, + yearEnd: 2050, + monthStart: 0, + monthEnd: 11, + style: '', + id: '', + fixed: false, + roundTime: 'round', // ceil, floor + className: '', + weekends: [], + disabledDates : [], + yearOffset: 0, + beforeShowDay: null, + + enterLikeTab: true, + showApplyButton: false + }; + // fix for ie8 + if (!Array.prototype.indexOf) { + Array.prototype.indexOf = function (obj, start) { + var i, j; + for (i = (start || 0), j = this.length; i < j; i += 1) { + if (this[i] === obj) { return i; } + } + return -1; + }; + } + Date.prototype.countDaysInMonth = function () { + return new Date(this.getFullYear(), this.getMonth() + 1, 0).getDate(); + }; + $.fn.xdsoftScroller = function (percent) { + return this.each(function () { + var timeboxparent = $(this), + pointerEventToXY = function (e) { + var out = {x: 0, y: 0}, + touch; + if (e.type === 'touchstart' || e.type === 'touchmove' || e.type === 'touchend' || e.type === 'touchcancel') { + touch = e.originalEvent.touches[0] || e.originalEvent.changedTouches[0]; + out.x = touch.clientX; + out.y = touch.clientY; + } else if (e.type === 'mousedown' || e.type === 'mouseup' || e.type === 'mousemove' || e.type === 'mouseover' || e.type === 'mouseout' || e.type === 'mouseenter' || e.type === 'mouseleave') { + out.x = e.clientX; + out.y = e.clientY; + } + return out; + }, + move = 0, + timebox, + parentHeight, + height, + scrollbar, + scroller, + maximumOffset = 100, + start = false, + startY = 0, + startTop = 0, + h1 = 0, + touchStart = false, + startTopScroll = 0, + calcOffset = function () {}; + if (percent === 'hide') { + timeboxparent.find('.xdsoft_scrollbar').hide(); + return; + } + if (!$(this).hasClass('xdsoft_scroller_box')) { + timebox = timeboxparent.children().eq(0); + parentHeight = timeboxparent[0].clientHeight; + height = timebox[0].offsetHeight; + scrollbar = $('

'); + scroller = $('
'); + scrollbar.append(scroller); + + timeboxparent.addClass('xdsoft_scroller_box').append(scrollbar); + calcOffset = function calcOffset(event) { + var offset = pointerEventToXY(event).y - startY + startTopScroll; + if (offset < 0) { + offset = 0; + } + if (offset + scroller[0].offsetHeight > h1) { + offset = h1 - scroller[0].offsetHeight; + } + timeboxparent.trigger('scroll_element.xdsoft_scroller', [maximumOffset ? offset / maximumOffset : 0]); + }; + + scroller + .on('touchstart.xdsoft_scroller mousedown.xdsoft_scroller', function (event) { + if (!parentHeight) { + timeboxparent.trigger('resize_scroll.xdsoft_scroller', [percent]); + } + + startY = pointerEventToXY(event).y; + startTopScroll = parseInt(scroller.css('margin-top'), 10); + h1 = scrollbar[0].offsetHeight; + + if (event.type === 'mousedown') { + if (document) { + $(document.body).addClass('xdsoft_noselect'); + } + $([document.body, window]).on('mouseup.xdsoft_scroller', function arguments_callee() { + $([document.body, window]).off('mouseup.xdsoft_scroller', arguments_callee) + .off('mousemove.xdsoft_scroller', calcOffset) + .removeClass('xdsoft_noselect'); + }); + $(document.body).on('mousemove.xdsoft_scroller', calcOffset); + } else { + touchStart = true; + event.stopPropagation(); + event.preventDefault(); + } + }) + .on('touchmove', function (event) { + if (touchStart) { + event.preventDefault(); + calcOffset(event); + } + }) + .on('touchend touchcancel', function (event) { + touchStart = false; + startTopScroll = 0; + }); + + timeboxparent + .on('scroll_element.xdsoft_scroller', function (event, percentage) { + if (!parentHeight) { + timeboxparent.trigger('resize_scroll.xdsoft_scroller', [percentage, true]); + } + percentage = percentage > 1 ? 1 : (percentage < 0 || isNaN(percentage)) ? 0 : percentage; + + scroller.css('margin-top', maximumOffset * percentage); + + setTimeout(function () { + timebox.css('marginTop', -parseInt((timebox[0].offsetHeight - parentHeight) * percentage, 10)); + }, 10); + }) + .on('resize_scroll.xdsoft_scroller', function (event, percentage, noTriggerScroll) { + var percent, sh; + parentHeight = timeboxparent[0].clientHeight; + height = timebox[0].offsetHeight; + percent = parentHeight / height; + sh = percent * scrollbar[0].offsetHeight; + if (percent > 1) { + scroller.hide(); + } else { + scroller.show(); + scroller.css('height', parseInt(sh > 10 ? sh : 10, 10)); + maximumOffset = scrollbar[0].offsetHeight - scroller[0].offsetHeight; + if (noTriggerScroll !== true) { + timeboxparent.trigger('scroll_element.xdsoft_scroller', [percentage || Math.abs(parseInt(timebox.css('marginTop'), 10)) / (height - parentHeight)]); + } + } + }); + + timeboxparent.on('mousewheel', function (event) { + var top = Math.abs(parseInt(timebox.css('marginTop'), 10)); + + top = top - (event.deltaY * 20); + if (top < 0) { + top = 0; + } + + timeboxparent.trigger('scroll_element.xdsoft_scroller', [top / (height - parentHeight)]); + event.stopPropagation(); + return false; + }); + + timeboxparent.on('touchstart', function (event) { + start = pointerEventToXY(event); + startTop = Math.abs(parseInt(timebox.css('marginTop'), 10)); + }); + + timeboxparent.on('touchmove', function (event) { + if (start) { + event.preventDefault(); + var coord = pointerEventToXY(event); + timeboxparent.trigger('scroll_element.xdsoft_scroller', [(startTop - (coord.y - start.y)) / (height - parentHeight)]); + } + }); + + timeboxparent.on('touchend touchcancel', function (event) { + start = false; + startTop = 0; + }); + } + timeboxparent.trigger('resize_scroll.xdsoft_scroller', [percent]); + }); + }; + + $.fn.datetimepicker = function (opt) { + var KEY0 = 48, + KEY9 = 57, + _KEY0 = 96, + _KEY9 = 105, + CTRLKEY = 17, + DEL = 46, + ENTER = 13, + ESC = 27, + BACKSPACE = 8, + ARROWLEFT = 37, + ARROWUP = 38, + ARROWRIGHT = 39, + ARROWDOWN = 40, + TAB = 9, + F5 = 116, + AKEY = 65, + CKEY = 67, + VKEY = 86, + ZKEY = 90, + YKEY = 89, + ctrlDown = false, + options = ($.isPlainObject(opt) || !opt) ? $.extend(true, {}, default_options, opt) : $.extend(true, {}, default_options), + + lazyInitTimer = 0, + createDateTimePicker, + destroyDateTimePicker, + + lazyInit = function (input) { + input + .on('open.xdsoft focusin.xdsoft mousedown.xdsoft', function initOnActionCallback(event) { + if (input.is(':disabled') || input.data('xdsoft_datetimepicker')) { + return; + } + clearTimeout(lazyInitTimer); + lazyInitTimer = setTimeout(function () { + + if (!input.data('xdsoft_datetimepicker')) { + createDateTimePicker(input); + } + input + .off('open.xdsoft focusin.xdsoft mousedown.xdsoft', initOnActionCallback) + .trigger('open.xdsoft'); + }, 100); + }); + }; + + createDateTimePicker = function (input) { + var datetimepicker = $('
'), + xdsoft_copyright = $(''), + datepicker = $('
'), + mounth_picker = $('
' + + '
' + + '
' + + '
'), + calendar = $('
'), + timepicker = $('
'), + timeboxparent = timepicker.find('.xdsoft_time_box').eq(0), + timebox = $('
'), + applyButton = $(''), + /*scrollbar = $('
'), + scroller = $('
'),*/ + monthselect = $('
'), + yearselect = $('
'), + triggerAfterOpen = false, + XDSoft_datetime, + //scroll_element, + xchangeTimer, + timerclick, + current_time_index, + setPos, + timer = 0, + timer1 = 0, + _xdsoft_datetime; + + mounth_picker + .find('.xdsoft_month span') + .after(monthselect); + mounth_picker + .find('.xdsoft_year span') + .after(yearselect); + + mounth_picker + .find('.xdsoft_month,.xdsoft_year') + .on('mousedown.xdsoft', function (event) { + var select = $(this).find('.xdsoft_select').eq(0), + val = 0, + top = 0, + visible = select.is(':visible'), + items, + i; + + mounth_picker + .find('.xdsoft_select') + .hide(); + if (_xdsoft_datetime.currentTime) { + val = _xdsoft_datetime.currentTime[$(this).hasClass('xdsoft_month') ? 'getMonth' : 'getFullYear'](); + } + + select[visible ? 'hide' : 'show'](); + for (items = select.find('div.xdsoft_option'), i = 0; i < items.length; i += 1) { + if (items.eq(i).data('value') === val) { + break; + } else { + top += items[0].offsetHeight; + } + } + + select.xdsoftScroller(top / (select.children()[0].offsetHeight - (select[0].clientHeight))); + event.stopPropagation(); + return false; + }); + + mounth_picker + .find('.xdsoft_select') + .xdsoftScroller() + .on('mousedown.xdsoft', function (event) { + event.stopPropagation(); + event.preventDefault(); + }) + .on('mousedown.xdsoft', '.xdsoft_option', function (event) { + + if (_xdsoft_datetime.currentTime === undefined || _xdsoft_datetime.currentTime === null) { + _xdsoft_datetime.currentTime = _xdsoft_datetime.now(); + } + + var year = _xdsoft_datetime.currentTime.getFullYear(); + if (_xdsoft_datetime && _xdsoft_datetime.currentTime) { + _xdsoft_datetime.currentTime[$(this).parent().parent().hasClass('xdsoft_monthselect') ? 'setMonth' : 'setFullYear']($(this).data('value')); + } + + $(this).parent().parent().hide(); + + datetimepicker.trigger('xchange.xdsoft'); + if (options.onChangeMonth && $.isFunction(options.onChangeMonth)) { + options.onChangeMonth.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input')); + } + + if (year !== _xdsoft_datetime.currentTime.getFullYear() && $.isFunction(options.onChangeYear)) { + options.onChangeYear.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input')); + } + }); + + datetimepicker.setOptions = function (_options) { + options = $.extend(true, {}, options, _options); + + if (_options.allowTimes && $.isArray(_options.allowTimes) && _options.allowTimes.length) { + options.allowTimes = $.extend(true, [], _options.allowTimes); + } + + if (_options.weekends && $.isArray(_options.weekends) && _options.weekends.length) { + options.weekends = $.extend(true, [], _options.weekends); + } + + if (_options.disabledDates && $.isArray(_options.disabledDates) && _options.disabledDates.length) { + options.disabledDates = $.extend(true, [], _options.disabledDates); + } + + if ((options.open || options.opened) && (!options.inline)) { + input.trigger('open.xdsoft'); + } + + if (options.inline) { + triggerAfterOpen = true; + datetimepicker.addClass('xdsoft_inline'); + input.after(datetimepicker).hide(); + } + + if (options.inverseButton) { + options.next = 'xdsoft_prev'; + options.prev = 'xdsoft_next'; + } + + if (options.datepicker) { + datepicker.addClass('active'); + } else { + datepicker.removeClass('active'); + } + + if (options.timepicker) { + timepicker.addClass('active'); + } else { + timepicker.removeClass('active'); + } + + if (options.value) { + if (input && input.val) { + input.val(options.value); + } + _xdsoft_datetime.setCurrentTime(options.value); + } + + if (isNaN(options.dayOfWeekStart)) { + options.dayOfWeekStart = 0; + } else { + options.dayOfWeekStart = parseInt(options.dayOfWeekStart, 10) % 7; + } + + if (!options.timepickerScrollbar) { + timeboxparent.xdsoftScroller('hide'); + } + + if (options.minDate && /^-(.*)$/.test(options.minDate)) { + options.minDate = _xdsoft_datetime.strToDateTime(options.minDate).dateFormat(options.formatDate); + } + + if (options.maxDate && /^\+(.*)$/.test(options.maxDate)) { + options.maxDate = _xdsoft_datetime.strToDateTime(options.maxDate).dateFormat(options.formatDate); + } + + applyButton.toggle(options.showApplyButton); + + mounth_picker + .find('.xdsoft_today_button') + .css('visibility', !options.todayButton ? 'hidden' : 'visible'); + + mounth_picker + .find('.' + options.prev) + .css('visibility', !options.prevButton ? 'hidden' : 'visible'); + + mounth_picker + .find('.' + options.next) + .css('visibility', !options.nextButton ? 'hidden' : 'visible'); + + if (options.mask) { + var e, + getCaretPos = function (input) { + try { + if (document.selection && document.selection.createRange) { + var range = document.selection.createRange(); + return range.getBookmark().charCodeAt(2) - 2; + } + if (input.setSelectionRange) { + return input.selectionStart; + } + } catch (e) { + return 0; + } + }, + setCaretPos = function (node, pos) { + node = (typeof node === "string" || node instanceof String) ? document.getElementById(node) : node; + if (!node) { + return false; + } + if (node.createTextRange) { + var textRange = node.createTextRange(); + textRange.collapse(true); + textRange.moveEnd('character', pos); + textRange.moveStart('character', pos); + textRange.select(); + return true; + } + if (node.setSelectionRange) { + node.setSelectionRange(pos, pos); + return true; + } + return false; + }, + isValidValue = function (mask, value) { + var reg = mask + .replace(/([\[\]\/\{\}\(\)\-\.\+]{1})/g, '\\$1') + .replace(/_/g, '{digit+}') + .replace(/([0-9]{1})/g, '{digit$1}') + .replace(/\{digit([0-9]{1})\}/g, '[0-$1_]{1}') + .replace(/\{digit[\+]\}/g, '[0-9_]{1}'); + return (new RegExp(reg)).test(value); + }; + input.off('keydown.xdsoft'); + + if (options.mask === true) { + options.mask = options.format + .replace(/Y/g, '9999') + .replace(/F/g, '9999') + .replace(/m/g, '19') + .replace(/d/g, '39') + .replace(/H/g, '29') + .replace(/i/g, '59') + .replace(/s/g, '59'); + } + + if ($.type(options.mask) === 'string') { + if (!isValidValue(options.mask, input.val())) { + input.val(options.mask.replace(/[0-9]/g, '_')); + } + + input.on('keydown.xdsoft', function (event) { + var val = this.value, + key = event.which, + pos, + digit; + + if (((key >= KEY0 && key <= KEY9) || (key >= _KEY0 && key <= _KEY9)) || (key === BACKSPACE || key === DEL)) { + pos = getCaretPos(this); + digit = (key !== BACKSPACE && key !== DEL) ? String.fromCharCode((_KEY0 <= key && key <= _KEY9) ? key - KEY0 : key) : '_'; + + if ((key === BACKSPACE || key === DEL) && pos) { + pos -= 1; + digit = '_'; + } + + while (/[^0-9_]/.test(options.mask.substr(pos, 1)) && pos < options.mask.length && pos > 0) { + pos += (key === BACKSPACE || key === DEL) ? -1 : 1; + } + + val = val.substr(0, pos) + digit + val.substr(pos + 1); + if ($.trim(val) === '') { + val = options.mask.replace(/[0-9]/g, '_'); + } else { + if (pos === options.mask.length) { + event.preventDefault(); + return false; + } + } + + pos += (key === BACKSPACE || key === DEL) ? 0 : 1; + while (/[^0-9_]/.test(options.mask.substr(pos, 1)) && pos < options.mask.length && pos > 0) { + pos += (key === BACKSPACE || key === DEL) ? -1 : 1; + } + + if (isValidValue(options.mask, val)) { + this.value = val; + setCaretPos(this, pos); + } else if ($.trim(val) === '') { + this.value = options.mask.replace(/[0-9]/g, '_'); + } else { + input.trigger('error_input.xdsoft'); + } + } else { + if (([AKEY, CKEY, VKEY, ZKEY, YKEY].indexOf(key) !== -1 && ctrlDown) || [ESC, ARROWUP, ARROWDOWN, ARROWLEFT, ARROWRIGHT, F5, CTRLKEY, TAB, ENTER].indexOf(key) !== -1) { + return true; + } + } + + event.preventDefault(); + return false; + }); + } + } + if (options.validateOnBlur) { + input + .off('blur.xdsoft') + .on('blur.xdsoft', function () { + if (options.allowBlank && !$.trim($(this).val()).length) { + $(this).val(null); + datetimepicker.data('xdsoft_datetime').empty(); + } else if (!Date.parseDate($(this).val(), options.format)) { + var splittedHours = +([$(this).val()[0], $(this).val()[1]].join('')), + splittedMinutes = +([$(this).val()[2], $(this).val()[3]].join('')); + + // parse the numbers as 0312 => 03:12 + if(!options.datepicker && options.timepicker && splittedHours >= 0 && splittedHours < 24 && splittedMinutes >= 0 && splittedMinutes < 60) { + $(this).val([splittedHours, splittedMinutes].map(function(item) { + return item > 9 ? item : '0' + item + }).join(':')); + } else { + $(this).val((_xdsoft_datetime.now()).dateFormat(options.format)); + } + + datetimepicker.data('xdsoft_datetime').setCurrentTime($(this).val()); + } else { + datetimepicker.data('xdsoft_datetime').setCurrentTime($(this).val()); + } + + datetimepicker.trigger('changedatetime.xdsoft'); + }); + } + options.dayOfWeekStartPrev = (options.dayOfWeekStart === 0) ? 6 : options.dayOfWeekStart - 1; + + datetimepicker + .trigger('xchange.xdsoft') + .trigger('afterOpen.xdsoft'); + }; + + datetimepicker + .data('options', options) + .on('mousedown.xdsoft', function (event) { + event.stopPropagation(); + event.preventDefault(); + yearselect.hide(); + monthselect.hide(); + return false; + }); + + //scroll_element = timepicker.find('.xdsoft_time_box'); + timeboxparent.append(timebox); + timeboxparent.xdsoftScroller(); + + datetimepicker.on('afterOpen.xdsoft', function () { + timeboxparent.xdsoftScroller(); + }); + + datetimepicker + .append(datepicker) + .append(timepicker); + + if (options.withoutCopyright !== true) { + datetimepicker + .append(xdsoft_copyright); + } + + datepicker + .append(mounth_picker) + .append(calendar) + .append(applyButton); + + $(options.parentID) + .append(datetimepicker); + + XDSoft_datetime = function () { + var _this = this; + _this.now = function (norecursion) { + var d = new Date(), + date, + time; + + if (!norecursion && options.defaultDate) { + date = _this.strToDate(options.defaultDate); + d.setFullYear(date.getFullYear()); + d.setMonth(date.getMonth()); + d.setDate(date.getDate()); + } + + if (options.yearOffset) { + d.setFullYear(d.getFullYear() + options.yearOffset); + } + + if (!norecursion && options.defaultTime) { + time = _this.strtotime(options.defaultTime); + d.setHours(time.getHours()); + d.setMinutes(time.getMinutes()); + } + + return d; + }; + + _this.isValidDate = function (d) { + if (Object.prototype.toString.call(d) !== "[object Date]") { + return false; + } + return !isNaN(d.getTime()); + }; + + _this.setCurrentTime = function (dTime) { + _this.currentTime = (typeof dTime === 'string') ? _this.strToDateTime(dTime) : _this.isValidDate(dTime) ? dTime : _this.now(); + datetimepicker.trigger('xchange.xdsoft'); + }; + + _this.empty = function () { + _this.currentTime = null; + }; + + _this.getCurrentTime = function (dTime) { + return _this.currentTime; + }; + + _this.nextMonth = function () { + + if (_this.currentTime === undefined || _this.currentTime === null) { + _this.currentTime = _this.now(); + } + + var month = _this.currentTime.getMonth() + 1, + year; + if (month === 12) { + _this.currentTime.setFullYear(_this.currentTime.getFullYear() + 1); + month = 0; + } + + year = _this.currentTime.getFullYear(); + + _this.currentTime.setDate( + Math.min( + new Date(_this.currentTime.getFullYear(), month + 1, 0).getDate(), + _this.currentTime.getDate() + ) + ); + _this.currentTime.setMonth(month); + + if (options.onChangeMonth && $.isFunction(options.onChangeMonth)) { + options.onChangeMonth.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input')); + } + + if (year !== _this.currentTime.getFullYear() && $.isFunction(options.onChangeYear)) { + options.onChangeYear.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input')); + } + + datetimepicker.trigger('xchange.xdsoft'); + return month; + }; + + _this.prevMonth = function () { + + if (_this.currentTime === undefined || _this.currentTime === null) { + _this.currentTime = _this.now(); + } + + var month = _this.currentTime.getMonth() - 1; + if (month === -1) { + _this.currentTime.setFullYear(_this.currentTime.getFullYear() - 1); + month = 11; + } + _this.currentTime.setDate( + Math.min( + new Date(_this.currentTime.getFullYear(), month + 1, 0).getDate(), + _this.currentTime.getDate() + ) + ); + _this.currentTime.setMonth(month); + if (options.onChangeMonth && $.isFunction(options.onChangeMonth)) { + options.onChangeMonth.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input')); + } + datetimepicker.trigger('xchange.xdsoft'); + return month; + }; + + _this.getWeekOfYear = function (datetime) { + var onejan = new Date(datetime.getFullYear(), 0, 1); + return Math.ceil((((datetime - onejan) / 86400000) + onejan.getDay() + 1) / 7); + }; + + _this.strToDateTime = function (sDateTime) { + var tmpDate = [], timeOffset, currentTime; + + if (sDateTime && sDateTime instanceof Date && _this.isValidDate(sDateTime)) { + return sDateTime; + } + + tmpDate = /^(\+|\-)(.*)$/.exec(sDateTime); + if (tmpDate) { + tmpDate[2] = Date.parseDate(tmpDate[2], options.formatDate); + } + if (tmpDate && tmpDate[2]) { + timeOffset = tmpDate[2].getTime() - (tmpDate[2].getTimezoneOffset()) * 60000; + currentTime = new Date((_xdsoft_datetime.now()).getTime() + parseInt(tmpDate[1] + '1', 10) * timeOffset); + } else { + currentTime = sDateTime ? Date.parseDate(sDateTime, options.format) : _this.now(); + } + + if (!_this.isValidDate(currentTime)) { + currentTime = _this.now(); + } + + return currentTime; + }; + + _this.strToDate = function (sDate) { + if (sDate && sDate instanceof Date && _this.isValidDate(sDate)) { + return sDate; + } + + var currentTime = sDate ? Date.parseDate(sDate, options.formatDate) : _this.now(true); + if (!_this.isValidDate(currentTime)) { + currentTime = _this.now(true); + } + return currentTime; + }; + + _this.strtotime = function (sTime) { + if (sTime && sTime instanceof Date && _this.isValidDate(sTime)) { + return sTime; + } + var currentTime = sTime ? Date.parseDate(sTime, options.formatTime) : _this.now(true); + if (!_this.isValidDate(currentTime)) { + currentTime = _this.now(true); + } + return currentTime; + }; + + _this.str = function () { + return _this.currentTime.dateFormat(options.format); + }; + _this.currentTime = this.now(); + }; + + _xdsoft_datetime = new XDSoft_datetime(); + + applyButton.on('click', function (e) {//pathbrite + e.preventDefault(); + datetimepicker.data('changed',true); + _xdsoft_datetime.setCurrentTime(getCurrentValue()); + input.val(_xdsoft_datetime.str()); + datetimepicker.trigger('close.xdsoft'); + }); + mounth_picker + .find('.xdsoft_today_button') + .on('mousedown.xdsoft', function () { + datetimepicker.data('changed', true); + _xdsoft_datetime.setCurrentTime(0); + datetimepicker.trigger('afterOpen.xdsoft'); + }).on('dblclick.xdsoft', function () { + input.val(_xdsoft_datetime.str()); + datetimepicker.trigger('close.xdsoft'); + }); + mounth_picker + .find('.xdsoft_prev,.xdsoft_next') + .on('mousedown.xdsoft', function () { + var $this = $(this), + timer = 0, + stop = false; + + (function arguments_callee1(v) { + if ($this.hasClass(options.next)) { + _xdsoft_datetime.nextMonth(); + } else if ($this.hasClass(options.prev)) { + _xdsoft_datetime.prevMonth(); + } + if (options.monthChangeSpinner) { + if (!stop) { + timer = setTimeout(arguments_callee1, v || 100); + } + } + }(500)); + + $([document.body, window]).on('mouseup.xdsoft', function arguments_callee2() { + clearTimeout(timer); + stop = true; + $([document.body, window]).off('mouseup.xdsoft', arguments_callee2); + }); + }); + + timepicker + .find('.xdsoft_prev,.xdsoft_next') + .on('mousedown.xdsoft', function () { + var $this = $(this), + timer = 0, + stop = false, + period = 110; + (function arguments_callee4(v) { + var pheight = timeboxparent[0].clientHeight, + height = timebox[0].offsetHeight, + top = Math.abs(parseInt(timebox.css('marginTop'), 10)); + if ($this.hasClass(options.next) && (height - pheight) - options.timeHeightInTimePicker >= top) { + timebox.css('marginTop', '-' + (top + options.timeHeightInTimePicker) + 'px'); + } else if ($this.hasClass(options.prev) && top - options.timeHeightInTimePicker >= 0) { + timebox.css('marginTop', '-' + (top - options.timeHeightInTimePicker) + 'px'); + } + timeboxparent.trigger('scroll_element.xdsoft_scroller', [Math.abs(parseInt(timebox.css('marginTop'), 10) / (height - pheight))]); + period = (period > 10) ? 10 : period - 10; + if (!stop) { + timer = setTimeout(arguments_callee4, v || period); + } + }(500)); + $([document.body, window]).on('mouseup.xdsoft', function arguments_callee5() { + clearTimeout(timer); + stop = true; + $([document.body, window]) + .off('mouseup.xdsoft', arguments_callee5); + }); + }); + + xchangeTimer = 0; + // base handler - generating a calendar and timepicker + datetimepicker + .on('xchange.xdsoft', function (event) { + clearTimeout(xchangeTimer); + xchangeTimer = setTimeout(function () { + + if (_xdsoft_datetime.currentTime === undefined || _xdsoft_datetime.currentTime === null) { + _xdsoft_datetime.currentTime = _xdsoft_datetime.now(); + } + + var table = '', + start = new Date(_xdsoft_datetime.currentTime.getFullYear(), _xdsoft_datetime.currentTime.getMonth(), 1, 12, 0, 0), + i = 0, + j, + today = _xdsoft_datetime.now(), + maxDate = false, + minDate = false, + d, + y, + m, + w, + classes = [], + customDateSettings, + newRow = true, + time = '', + h = '', + line_time; + + while (start.getDay() !== options.dayOfWeekStart) { + start.setDate(start.getDate() - 1); + } + + table += ''; + + if (options.weeks) { + table += ''; + } + + for (j = 0; j < 7; j += 1) { + table += ''; + } + + table += ''; + table += ''; + + if (options.maxDate !== false) { + maxDate = _xdsoft_datetime.strToDate(options.maxDate); + maxDate = new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate(), 23, 59, 59, 999); + } + + if (options.minDate !== false) { + minDate = _xdsoft_datetime.strToDate(options.minDate); + minDate = new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate()); + } + + while (i < _xdsoft_datetime.currentTime.countDaysInMonth() || start.getDay() !== options.dayOfWeekStart || _xdsoft_datetime.currentTime.getMonth() === start.getMonth()) { + classes = []; + i += 1; + + d = start.getDate(); + y = start.getFullYear(); + m = start.getMonth(); + w = _xdsoft_datetime.getWeekOfYear(start); + + classes.push('xdsoft_date'); + + if (options.beforeShowDay && $.isFunction(options.beforeShowDay.call)) { + customDateSettings = options.beforeShowDay.call(datetimepicker, start); + } else { + customDateSettings = null; + } + + if ((maxDate !== false && start > maxDate) || (minDate !== false && start < minDate) || (customDateSettings && customDateSettings[0] === false)) { + classes.push('xdsoft_disabled'); + } else if (options.disabledDates.indexOf(start.dateFormat(options.formatDate)) !== -1) { + classes.push('xdsoft_disabled'); + } + + if (customDateSettings && customDateSettings[1] !== "") { + classes.push(customDateSettings[1]); + } + + if (_xdsoft_datetime.currentTime.getMonth() !== m) { + classes.push('xdsoft_other_month'); + } + + if ((options.defaultSelect || datetimepicker.data('changed')) && _xdsoft_datetime.currentTime.dateFormat(options.formatDate) === start.dateFormat(options.formatDate)) { + classes.push('xdsoft_current'); + } + + if (today.dateFormat(options.formatDate) === start.dateFormat(options.formatDate)) { + classes.push('xdsoft_today'); + } + + if (start.getDay() === 0 || start.getDay() === 6 || ~options.weekends.indexOf(start.dateFormat(options.formatDate))) { + classes.push('xdsoft_weekend'); + } + + if (options.beforeShowDay && $.isFunction(options.beforeShowDay)) { + classes.push(options.beforeShowDay(start)); + } + + if (newRow) { + table += ''; + newRow = false; + if (options.weeks) { + table += ''; + } + } + + table += ''; + + if (start.getDay() === options.dayOfWeekStartPrev) { + table += ''; + newRow = true; + } + + start.setDate(d + 1); + } + table += '
' + options.i18n[options.lang].dayOfWeek[(j + options.dayOfWeekStart) % 7] + '
' + w + '' + + '
' + d + '
' + + '
'; + + calendar.html(table); + + mounth_picker.find('.xdsoft_label span').eq(0).text(options.i18n[options.lang].months[_xdsoft_datetime.currentTime.getMonth()]); + mounth_picker.find('.xdsoft_label span').eq(1).text(_xdsoft_datetime.currentTime.getFullYear()); + + // generate timebox + time = ''; + h = ''; + m = ''; + line_time = function line_time(h, m) { + var now = _xdsoft_datetime.now(); + now.setHours(h); + h = parseInt(now.getHours(), 10); + now.setMinutes(m); + m = parseInt(now.getMinutes(), 10); + var optionDateTime = new Date(_xdsoft_datetime.currentTime); + optionDateTime.setHours(h); + optionDateTime.setMinutes(m); + classes = []; + if((options.minDateTime !== false && options.minDateTime > optionDateTime) || (options.maxTime !== false && _xdsoft_datetime.strtotime(options.maxTime).getTime() < now.getTime()) || (options.minTime !== false && _xdsoft_datetime.strtotime(options.minTime).getTime() > now.getTime())) { + classes.push('xdsoft_disabled'); + } + + var current_time = new Date(_xdsoft_datetime.currentTime); + current_time.setHours(parseInt(_xdsoft_datetime.currentTime.getHours(), 10)); + current_time.setMinutes(Math[options.roundTime](_xdsoft_datetime.currentTime.getMinutes() / options.step) * options.step); + + if ((options.initTime || options.defaultSelect || datetimepicker.data('changed')) && current_time.getHours() === parseInt(h, 10) && (options.step > 59 || current_time.getMinutes() === parseInt(m, 10))) { + if (options.defaultSelect || datetimepicker.data('changed')) { + classes.push('xdsoft_current'); + } else if (options.initTime) { + classes.push('xdsoft_init_time'); + } + } + if (parseInt(today.getHours(), 10) === parseInt(h, 10) && parseInt(today.getMinutes(), 10) === parseInt(m, 10)) { + classes.push('xdsoft_today'); + } + time += '
' + now.dateFormat(options.formatTime) + '
'; + }; + + if (!options.allowTimes || !$.isArray(options.allowTimes) || !options.allowTimes.length) { + for (i = 0, j = 0; i < (options.hours12 ? 12 : 24); i += 1) { + for (j = 0; j < 60; j += options.step) { + h = (i < 10 ? '0' : '') + i; + m = (j < 10 ? '0' : '') + j; + line_time(h, m); + } + } + } else { + for (i = 0; i < options.allowTimes.length; i += 1) { + h = _xdsoft_datetime.strtotime(options.allowTimes[i]).getHours(); + m = _xdsoft_datetime.strtotime(options.allowTimes[i]).getMinutes(); + line_time(h, m); + } + } + + timebox.html(time); + + opt = ''; + i = 0; + + for (i = parseInt(options.yearStart, 10) + options.yearOffset; i <= parseInt(options.yearEnd, 10) + options.yearOffset; i += 1) { + opt += '
' + i + '
'; + } + yearselect.children().eq(0) + .html(opt); + + for (i = parseInt(options.monthStart), opt = ''; i <= parseInt(options.monthEnd); i += 1) { + opt += '
' + options.i18n[options.lang].months[i] + '
'; + } + monthselect.children().eq(0).html(opt); + $(datetimepicker) + .trigger('generate.xdsoft'); + }, 10); + event.stopPropagation(); + }) + .on('afterOpen.xdsoft', function () { + if (options.timepicker) { + var classType, pheight, height, top; + if (timebox.find('.xdsoft_current').length) { + classType = '.xdsoft_current'; + } else if (timebox.find('.xdsoft_init_time').length) { + classType = '.xdsoft_init_time'; + } + if (classType) { + pheight = timeboxparent[0].clientHeight; + height = timebox[0].offsetHeight; + top = timebox.find(classType).index() * options.timeHeightInTimePicker + 1; + if ((height - pheight) < top) { + top = height - pheight; + } + timeboxparent.trigger('scroll_element.xdsoft_scroller', [parseInt(top, 10) / (height - pheight)]); + } else { + timeboxparent.trigger('scroll_element.xdsoft_scroller', [0]); + } + } + }); + + timerclick = 0; + calendar + .on('click.xdsoft', 'td', function (xdevent) { + xdevent.stopPropagation(); // Prevents closing of Pop-ups, Modals and Flyouts in Bootstrap + timerclick += 1; + var $this = $(this), + currentTime = _xdsoft_datetime.currentTime; + + if (currentTime === undefined || currentTime === null) { + _xdsoft_datetime.currentTime = _xdsoft_datetime.now(); + currentTime = _xdsoft_datetime.currentTime; + } + + if ($this.hasClass('xdsoft_disabled')) { + return false; + } + + currentTime.setDate(1); + currentTime.setFullYear($this.data('year')); + currentTime.setMonth($this.data('month')); + currentTime.setDate($this.data('date')); + + datetimepicker.trigger('select.xdsoft', [currentTime]); + + input.val(_xdsoft_datetime.str()); + if ((timerclick > 1 || (options.closeOnDateSelect === true || (options.closeOnDateSelect === 0 && !options.timepicker))) && !options.inline) { + datetimepicker.trigger('close.xdsoft'); + } + + if (options.onSelectDate && $.isFunction(options.onSelectDate)) { + options.onSelectDate.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'), xdevent); + } + + datetimepicker.data('changed', true); + datetimepicker.trigger('xchange.xdsoft'); + datetimepicker.trigger('changedatetime.xdsoft'); + setTimeout(function () { + timerclick = 0; + }, 200); + }); + + timebox + .on('click.xdsoft', 'div', function (xdevent) { + xdevent.stopPropagation(); + var $this = $(this), + currentTime = _xdsoft_datetime.currentTime; + + if (currentTime === undefined || currentTime === null) { + _xdsoft_datetime.currentTime = _xdsoft_datetime.now(); + currentTime = _xdsoft_datetime.currentTime; + } + + if ($this.hasClass('xdsoft_disabled')) { + return false; + } + currentTime.setHours($this.data('hour')); + currentTime.setMinutes($this.data('minute')); + datetimepicker.trigger('select.xdsoft', [currentTime]); + + datetimepicker.data('input').val(_xdsoft_datetime.str()); + + if (options.inline !== true && options.closeOnTimeSelect === true) { + datetimepicker.trigger('close.xdsoft'); + } + + if (options.onSelectTime && $.isFunction(options.onSelectTime)) { + options.onSelectTime.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'), xdevent); + } + datetimepicker.data('changed', true); + datetimepicker.trigger('xchange.xdsoft'); + datetimepicker.trigger('changedatetime.xdsoft'); + }); + + + datepicker + .on('mousewheel.xdsoft', function (event) { + if (!options.scrollMonth) { + return true; + } + if (event.deltaY < 0) { + _xdsoft_datetime.nextMonth(); + } else { + _xdsoft_datetime.prevMonth(); + } + return false; + }); + + input + .on('mousewheel.xdsoft', function (event) { + if (!options.scrollInput) { + return true; + } + if (!options.datepicker && options.timepicker) { + current_time_index = timebox.find('.xdsoft_current').length ? timebox.find('.xdsoft_current').eq(0).index() : 0; + if (current_time_index + event.deltaY >= 0 && current_time_index + event.deltaY < timebox.children().length) { + current_time_index += event.deltaY; + } + if (timebox.children().eq(current_time_index).length) { + timebox.children().eq(current_time_index).trigger('mousedown'); + } + return false; + } + if (options.datepicker && !options.timepicker) { + datepicker.trigger(event, [event.deltaY, event.deltaX, event.deltaY]); + if (input.val) { + input.val(_xdsoft_datetime.str()); + } + datetimepicker.trigger('changedatetime.xdsoft'); + return false; + } + }); + + datetimepicker + .on('changedatetime.xdsoft', function (event) { + if (options.onChangeDateTime && $.isFunction(options.onChangeDateTime)) { + var $input = datetimepicker.data('input'); + options.onChangeDateTime.call(datetimepicker, _xdsoft_datetime.currentTime, $input, event); + delete options.value; + $input.trigger('change'); + } + }) + .on('generate.xdsoft', function () { + if (options.onGenerate && $.isFunction(options.onGenerate)) { + options.onGenerate.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input')); + } + if (triggerAfterOpen) { + datetimepicker.trigger('afterOpen.xdsoft'); + triggerAfterOpen = false; + } + }) + .on('click.xdsoft', function (xdevent) { + xdevent.stopPropagation(); + }); + + current_time_index = 0; + + setPos = function () { + var offset = datetimepicker.data('input').offset(), top = offset.top + datetimepicker.data('input')[0].offsetHeight - 1, left = offset.left, position = "absolute"; + if (options.fixed) { + top -= $(window).scrollTop(); + left -= $(window).scrollLeft(); + position = "fixed"; + } else { + if (top + datetimepicker[0].offsetHeight > $(window).height() + $(window).scrollTop()) { + top = offset.top - datetimepicker[0].offsetHeight + 1; + } + if (top < 0) { + top = 0; + } + if (left + datetimepicker[0].offsetWidth > $(window).width()) { + left = $(window).width() - datetimepicker[0].offsetWidth; + } + } + datetimepicker.css({ + left: left, + top: top, + position: position + }); + }; + datetimepicker + .on('open.xdsoft', function (event) { + var onShow = true; + if (options.onShow && $.isFunction(options.onShow)) { + onShow = options.onShow.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'), event); + } + if (onShow !== false) { + datetimepicker.show(); + setPos(); + $(window) + .off('resize.xdsoft', setPos) + .on('resize.xdsoft', setPos); + + if (options.closeOnWithoutClick) { + $([document.body, window]).on('mousedown.xdsoft', function arguments_callee6() { + datetimepicker.trigger('close.xdsoft'); + $([document.body, window]).off('mousedown.xdsoft', arguments_callee6); + }); + } + } + }) + .on('close.xdsoft', function (event) { + var onClose = true; + mounth_picker + .find('.xdsoft_month,.xdsoft_year') + .find('.xdsoft_select') + .hide(); + if (options.onClose && $.isFunction(options.onClose)) { + onClose = options.onClose.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'), event); + } + if (onClose !== false && !options.opened && !options.inline) { + datetimepicker.hide(); + } + event.stopPropagation(); + }) + .on('toggle.xdsoft', function (event) { + if (datetimepicker.is(':visible')) { + datetimepicker.trigger('close.xdsoft'); + } else { + datetimepicker.trigger('open.xdsoft'); + } + }) + .data('input', input); + + timer = 0; + timer1 = 0; + + datetimepicker.data('xdsoft_datetime', _xdsoft_datetime); + datetimepicker.setOptions(options); + + function getCurrentValue() { + + var ct = false, time; + + if (options.startDate) { + ct = _xdsoft_datetime.strToDate(options.startDate); + } else { + ct = options.value || ((input && input.val && input.val()) ? input.val() : ''); + if (ct) { + ct = _xdsoft_datetime.strToDateTime(ct); + } else if (options.defaultDate) { + ct = _xdsoft_datetime.strToDate(options.defaultDate); + if (options.defaultTime) { + time = _xdsoft_datetime.strtotime(options.defaultTime); + ct.setHours(time.getHours()); + ct.setMinutes(time.getMinutes()); + } + } + } + + if (ct && _xdsoft_datetime.isValidDate(ct)) { + datetimepicker.data('changed', true); + } else { + ct = ''; + } + + return ct || 0; + } + + _xdsoft_datetime.setCurrentTime(getCurrentValue()); + + input + .data('xdsoft_datetimepicker', datetimepicker) + .on('open.xdsoft focusin.xdsoft mousedown.xdsoft', function (event) { + if (input.is(':disabled') || (input.data('xdsoft_datetimepicker').is(':visible') && options.closeOnInputClick)) { + return; + } + clearTimeout(timer); + timer = setTimeout(function () { + if (input.is(':disabled')) { + return; + } + + triggerAfterOpen = true; + _xdsoft_datetime.setCurrentTime(getCurrentValue()); + + datetimepicker.trigger('open.xdsoft'); + }, 100); + }) + .on('keydown.xdsoft', function (event) { + var val = this.value, elementSelector, + key = event.which; + if ([ENTER].indexOf(key) !== -1 && options.enterLikeTab) { + elementSelector = $("input:visible,textarea:visible"); + datetimepicker.trigger('close.xdsoft'); + elementSelector.eq(elementSelector.index(this) + 1).focus(); + return false; + } + if ([TAB].indexOf(key) !== -1) { + datetimepicker.trigger('close.xdsoft'); + return true; + } + }); + }; + destroyDateTimePicker = function (input) { + var datetimepicker = input.data('xdsoft_datetimepicker'); + if (datetimepicker) { + datetimepicker.data('xdsoft_datetime', null); + datetimepicker.remove(); + input + .data('xdsoft_datetimepicker', null) + .off('.xdsoft'); + $(window).off('resize.xdsoft'); + $([window, document.body]).off('mousedown.xdsoft'); + if (input.unmousewheel) { + input.unmousewheel(); + } + } + }; + $(document) + .off('keydown.xdsoftctrl keyup.xdsoftctrl') + .on('keydown.xdsoftctrl', function (e) { + if (e.keyCode === CTRLKEY) { + ctrlDown = true; + } + }) + .on('keyup.xdsoftctrl', function (e) { + if (e.keyCode === CTRLKEY) { + ctrlDown = false; + } + }); + return this.each(function () { + var datetimepicker = $(this).data('xdsoft_datetimepicker'); + if (datetimepicker) { + if ($.type(opt) === 'string') { + switch (opt) { + case 'show': + $(this).select().focus(); + datetimepicker.trigger('open.xdsoft'); + break; + case 'hide': + datetimepicker.trigger('close.xdsoft'); + break; + case 'toggle': + datetimepicker.trigger('toggle.xdsoft'); + break; + case 'destroy': + destroyDateTimePicker($(this)); + break; + case 'reset': + this.value = this.defaultValue; + if (!this.value || !datetimepicker.data('xdsoft_datetime').isValidDate(Date.parseDate(this.value, options.format))) { + datetimepicker.data('changed', false); + } + datetimepicker.data('xdsoft_datetime').setCurrentTime(this.value); + break; + case 'validate': + var $input = datetimepicker.data('input'); + $input.trigger('blur.xdsoft'); + break; + } + } else { + datetimepicker + .setOptions(opt); + } + return 0; + } + if ($.type(opt) !== 'string') { + if (!options.lazyInit || options.open || options.inline) { + createDateTimePicker($(this)); + } else { + lazyInit($(this)); + } + } + }); + }; + $.fn.datetimepicker.defaults = default_options; +}(jQuery)); +(function () { + +/*! Copyright (c) 2013 Brandon Aaron (http://brandon.aaron.sh) + * Licensed under the MIT License (LICENSE.txt). + * + * Version: 3.1.12 + * + * Requires: jQuery 1.2.2+ + */ +!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):"object"==typeof exports?module.exports=a:a(jQuery)}(function(a){function b(b){var g=b||window.event,h=i.call(arguments,1),j=0,l=0,m=0,n=0,o=0,p=0;if(b=a.event.fix(g),b.type="mousewheel","detail"in g&&(m=-1*g.detail),"wheelDelta"in g&&(m=g.wheelDelta),"wheelDeltaY"in g&&(m=g.wheelDeltaY),"wheelDeltaX"in g&&(l=-1*g.wheelDeltaX),"axis"in g&&g.axis===g.HORIZONTAL_AXIS&&(l=-1*m,m=0),j=0===m?l:m,"deltaY"in g&&(m=-1*g.deltaY,j=m),"deltaX"in g&&(l=g.deltaX,0===m&&(j=-1*l)),0!==m||0!==l){if(1===g.deltaMode){var q=a.data(this,"mousewheel-line-height");j*=q,m*=q,l*=q}else if(2===g.deltaMode){var r=a.data(this,"mousewheel-page-height");j*=r,m*=r,l*=r}if(n=Math.max(Math.abs(m),Math.abs(l)),(!f||f>n)&&(f=n,d(g,n)&&(f/=40)),d(g,n)&&(j/=40,l/=40,m/=40),j=Math[j>=1?"floor":"ceil"](j/f),l=Math[l>=1?"floor":"ceil"](l/f),m=Math[m>=1?"floor":"ceil"](m/f),k.settings.normalizeOffset&&this.getBoundingClientRect){var s=this.getBoundingClientRect();o=b.clientX-s.left,p=b.clientY-s.top}return b.deltaX=l,b.deltaY=m,b.deltaFactor=f,b.offsetX=o,b.offsetY=p,b.deltaMode=0,h.unshift(b,j,l,m),e&&clearTimeout(e),e=setTimeout(c,200),(a.event.dispatch||a.event.handle).apply(this,h)}}function c(){f=null}function d(a,b){return k.settings.adjustOldDeltas&&"mousewheel"===a.type&&b%120===0}var e,f,g=["wheel","mousewheel","DOMMouseScroll","MozMousePixelScroll"],h="onwheel"in document||document.documentMode>=9?["wheel"]:["mousewheel","DomMouseScroll","MozMousePixelScroll"],i=Array.prototype.slice;if(a.event.fixHooks)for(var j=g.length;j;)a.event.fixHooks[g[--j]]=a.event.mouseHooks;var k=a.event.special.mousewheel={version:"3.1.12",setup:function(){if(this.addEventListener)for(var c=h.length;c;)this.addEventListener(h[--c],b,!1);else this.onmousewheel=b;a.data(this,"mousewheel-line-height",k.getLineHeight(this)),a.data(this,"mousewheel-page-height",k.getPageHeight(this))},teardown:function(){if(this.removeEventListener)for(var c=h.length;c;)this.removeEventListener(h[--c],b,!1);else this.onmousewheel=null;a.removeData(this,"mousewheel-line-height"),a.removeData(this,"mousewheel-page-height")},getLineHeight:function(b){var c=a(b),d=c["offsetParent"in a.fn?"offsetParent":"parent"]();return d.length||(d=a("body")),parseInt(d.css("fontSize"),10)||parseInt(c.css("fontSize"),10)||16},getPageHeight:function(b){return a(b).height()},settings:{adjustOldDeltas:!0,normalizeOffset:!0}};a.fn.extend({mousewheel:function(a){return a?this.bind("mousewheel",a):this.trigger("mousewheel")},unmousewheel:function(a){return this.unbind("mousewheel",a)}})}); + +// Parse and Format Library +//http://www.xaprb.com/blog/2005/12/12/javascript-closures-for-runtime-efficiency/ +/* + * Copyright (C) 2004 Baron Schwartz + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published by the + * Free Software Foundation, version 2.1. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more + * details. + */ +Date.parseFunctions={count:0};Date.parseRegexes=[];Date.formatFunctions={count:0};Date.prototype.dateFormat=function(b){if(b=="unixtime"){return parseInt(this.getTime()/1000);}if(Date.formatFunctions[b]==null){Date.createNewFormat(b);}var a=Date.formatFunctions[b];return this[a]();};Date.createNewFormat=function(format){var funcName="format"+Date.formatFunctions.count++;Date.formatFunctions[format]=funcName;var codePrefix="Date.prototype."+funcName+" = function() {return ";var code="";var special=false;var ch="";for(var i=0;i 0) {";var regex="";var special=false;var ch="";for(var i=0;i 0 && z > 0){\nvar doyDate = new Date(y,0);\ndoyDate.setDate(z);\nm = doyDate.getMonth();\nd = doyDate.getDate();\n}";code+="if (y > 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0)\n{return new Date(y, m, d, h, i, s);}\nelse if (y > 0 && m >= 0 && d > 0 && h >= 0 && i >= 0)\n{return new Date(y, m, d, h, i);}\nelse if (y > 0 && m >= 0 && d > 0 && h >= 0)\n{return new Date(y, m, d, h);}\nelse if (y > 0 && m >= 0 && d > 0)\n{return new Date(y, m, d);}\nelse if (y > 0 && m >= 0)\n{return new Date(y, m);}\nelse if (y > 0)\n{return new Date(y);}\n}return null;}";Date.parseRegexes[regexNum]=new RegExp("^"+regex+"$",'i');eval(code);};Date.formatCodeToRegex=function(b,a){switch(b){case"D":return{g:0,c:null,s:"(?:Sun|Mon|Tue|Wed|Thu|Fri|Sat)"};case"j":case"d":return{g:1,c:"d = parseInt(results["+a+"], 10);\n",s:"(\\d{1,2})"};case"l":return{g:0,c:null,s:"(?:"+Date.dayNames.join("|")+")"};case"S":return{g:0,c:null,s:"(?:st|nd|rd|th)"};case"w":return{g:0,c:null,s:"\\d"};case"z":return{g:1,c:"z = parseInt(results["+a+"], 10);\n",s:"(\\d{1,3})"};case"W":return{g:0,c:null,s:"(?:\\d{2})"};case"F":return{g:1,c:"m = parseInt(Date.monthNumbers[results["+a+"].substring(0, 3)], 10);\n",s:"("+Date.monthNames.join("|")+")"};case"M":return{g:1,c:"m = parseInt(Date.monthNumbers[results["+a+"]], 10);\n",s:"(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)"};case"n":case"m":return{g:1,c:"m = parseInt(results["+a+"], 10) - 1;\n",s:"(\\d{1,2})"};case"t":return{g:0,c:null,s:"\\d{1,2}"};case"L":return{g:0,c:null,s:"(?:1|0)"};case"Y":return{g:1,c:"y = parseInt(results["+a+"], 10);\n",s:"(\\d{4})"};case"y":return{g:1,c:"var ty = parseInt(results["+a+"], 10);\ny = ty > Date.y2kYear ? 1900 + ty : 2000 + ty;\n",s:"(\\d{1,2})"};case"a":return{g:1,c:"if (results["+a+"] == 'am') {\nif (h == 12) { h = 0; }\n} else { if (h < 12) { h += 12; }}",s:"(am|pm)"};case"A":return{g:1,c:"if (results["+a+"] == 'AM') {\nif (h == 12) { h = 0; }\n} else { if (h < 12) { h += 12; }}",s:"(AM|PM)"};case"g":case"G":case"h":case"H":return{g:1,c:"h = parseInt(results["+a+"], 10);\n",s:"(\\d{1,2})"};case"i":return{g:1,c:"i = parseInt(results["+a+"], 10);\n",s:"(\\d{2})"};case"s":return{g:1,c:"s = parseInt(results["+a+"], 10);\n",s:"(\\d{2})"};case"O":return{g:0,c:null,s:"[+-]\\d{4}"};case"T":return{g:0,c:null,s:"[A-Z]{3}"};case"Z":return{g:0,c:null,s:"[+-]\\d{1,5}"};default:return{g:0,c:null,s:String.escape(b)};}};Date.prototype.getTimezone=function(){return this.toString().replace(/^.*? ([A-Z]{3}) [0-9]{4}.*$/,"$1").replace(/^.*?\(([A-Z])[a-z]+ ([A-Z])[a-z]+ ([A-Z])[a-z]+\)$/,"$1$2$3");};Date.prototype.getGMTOffset=function(){return(this.getTimezoneOffset()>0?"-":"+")+String.leftPad(Math.floor(Math.abs(this.getTimezoneOffset())/60),2,"0")+String.leftPad(Math.abs(this.getTimezoneOffset())%60,2,"0");};Date.prototype.getDayOfYear=function(){var a=0;Date.daysInMonth[1]=this.isLeapYear()?29:28;for(var b=0;b default +und dark und kann zusätzlich über das eigens mitgebrachte stylesheet angepasst werden. + +Der Name ist "datetime" und die Parameter werden als eine Komma separierte Liste von Key:Value Paaren spezifiziert, +das gleiche wie beim knob widget. (theme:default,format:d.m.Y,lang:en, ... ) Eine komplette Liste ist unter der oben +angebenen URL zu finden. + +Simple Beispiele: + +define dateTimePickerInline dummy +attr dateTimePickerInline setList state:datetime,inline:true +attr dateTimePickerInline webCmd state + + +define dateTimePickerPopUp dummy +attr dateTimePickerPopUp setList state:datetime +attr dateTimePickerPopUp webCmd state + + +define dateTimePickerOnlyTime dummy +attr dateTimePickerOnlyTime setList state:datetime,datepicker:false +attr dateTimePickerOnlyTime webCmd state + + +define dateTimePickerOnlyDate dummy +attr dateTimePickerOnlyDate setList state:datetime,timepicker:false +attr dateTimePickerOnlyDate webCmd state + + +Vorläufige default Einstellungen: + + lang:"de", + i18n:{ + de:{ + months:[ + "Januar","Februar","März","April", + "Mai","Juni","Juli","August", + "September","Oktober","November","Dezember", + ], + dayOfWeek:[ + "So.", "Mo", "Di", "Mi", + "Do", "Fr", "Sa.", + ] + } + }, + theme:"dark", + format:"d.m.Y H:i" \ No newline at end of file