/* * JQuery UI DateTimePicker v1.0.4 * * Copyright (c) 2010 Daniel Harrod (http://www.projectcodegen.com/JQueryDateTimePicker.aspx) * Dual licensed under the MIT License (http://www.opensource.org/licenses/mit-license.php) * and GPL ( http://www.gnu.org/copyleft/gpl.html ) * * Portions of [JQuery UI Datepicker 1.8rc3] were modified on March 10, 2010. * Portions of [Date Format 1.2.3] were modified on March 10, 2010. * * http://www.projectcodegen.com/JQueryDateTimePicker.aspx * * Depends: * jquery.ui.core.js **/ /* * 1.0.4 * In 1.0.1 changing getYear() to getFullYear() broke the absolute year determination, which is a must have. * ff, chr, saf getYear returns number of years since 1900, some of the others return century+year * * 1.0.3 * Added Analog clock, minute overlay, hour overlay, minute, and hour hands. * New option: show24HourClock defaulted to false. * When show24HourClock is true, requires jquery.ui.datetimepicker.css * 1.0.2 * Tweaked for JQuery-UI 1.8.7 and JQuery 1.4.4 - thanks again Carl G. * 1.0.1 * Correction: * changed getYear() to getFullYear() * 1.0.0 Overview: * Additions: * Incude Hours / Minutes / AMPM dropdowns. * Absolute year determination based on absolute minimum variance to present year. * * Replacements: * Replaced [JQuery UI Datepicker 1.8rc3] inbound parsing with a simple date check Date(inbound) * * Replaced outbound formatting with format string based on [Date Format 1.2.3] * * Changed [Date Format 1.2.3] function names to play nice with [JQuery UI Datepicker 1.8rc3] * * Minor tweaks **/ /* * jQuery UI Datepicker 1.8rc3 * * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT (MIT-LICENSE.txt) * and GPL (GPL-LICENSE.txt) licenses. * * http://docs.jquery.com/UI/Datepicker * * Depends: * jquery.ui.core.js */ /* * Date Format 1.2.3 * (c) 2007-2009 Steven Levithan * MIT license * * Includes enhancements by Scott Trenda * and Kris Kowal * * Accepts a date, a mask, or a date and a mask. * Returns a formatted version of the given date. * The date defaults to the current date/time. * The mask defaults to dateFormat.masks.default. */ var CONST_AM = 'AM'; var CONST_PM = 'PM'; function datepicker_getZindex( elem ) { var position, value; while ( elem.length && elem[ 0 ] !== document ) { // Ignore z-index if position is set to a value where z-index is ignored by the browser // This makes behavior of this function consistent across browsers // WebKit always returns auto if the element is positioned position = elem.css( "position" ); if ( position === "absolute" || position === "relative" || position === "fixed" ) { // IE returns 0 when zIndex is not specified // other browsers return a string // we ignore the case of nested elements with an explicit value of 0 //
value = parseInt( elem.css( "zIndex" ), 10 ); if ( !isNaN( value ) && value !== 0 ) { return value; } } elem = elem.parent(); } return 0; } (function($) { // hide the namespace $.extend($.ui, { datetimepicker: { version: "1.0.0"} }); var PROP_NAME = 'datetimepicker'; var dpuuid = new Date().getTime(); /* Date picker manager. Use the singleton instance of this class, $.datetimepicker, to interact with the date picker. Settings for (groups of) date pickers are maintained in an instance object, allowing multiple different settings on the same page. */ function Datetimepicker() { this._dontShow = false; // don't show this dialog this.debug = false; // Change this to true to start debugging this._curInst = null; // The current instance in use this._keyEvent = false; // If the last event was a key event this._disabledInputs = []; // List of date picker inputs that have been disabled this._datepickerShowing = false; // True if the popup picker is showing , false if not this._inDialog = false; // True if showing within a "dialog", false if not this._mainDivId = 'ui-datepicker-div'; // The ID of the main datepicker division this._inlineClass = 'ui-datepicker-inline'; // The name of the inline marker class this._appendClass = 'ui-datepicker-append'; // The name of the append marker class this._triggerClass = 'ui-datepicker-trigger'; // The name of the trigger marker class this._dialogClass = 'ui-datepicker-dialog'; // The name of the dialog marker class this._disableClass = 'ui-datepicker-disabled'; // The name of the disabled covering marker class this._unselectableClass = 'ui-datepicker-unselectable'; // The name of the unselectable cell marker class this._currentClass = 'ui-datepicker-current-day'; // The name of the current day marker class this._dayOverClass = 'ui-datepicker-days-cell-over'; // The name of the day hover marker class this.regional = []; // Available regional settings, indexed by language code this.regional[''] = { // Default regional settings infoMsg: 'Click on a date to save changes', setText: 'Ok', cancelText: 'Cancel', // Display text for close link clearText: 'Clear', // Display text for close link closeText: 'Close', // Display text for close link prevText: 'Prev', // Display text for previous month link nextText: 'Next', // Display text for next month link currentText: 'Now', // Display text for current month link monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], // Names of months for drop-down and formatting monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], // For formatting dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], // For formatting dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], // For formatting dayNamesMin: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'], // Column headings for days starting at Sunday weekHeader: 'Wk', // Column header for week of the year dateFormat: 'mm/dd/yyyy hh:MM:ss TT', // See format options on parseDate /* format options. dd - Day of the month as digits; leading zero for single-digit days. ddd - Day of the week as a three-letter abbreviation. dddd - Day of the week as its full name. m - Month as digits; no leading zero for single-digit months. mm - Month as digits; leading zero for single-digit months. mmm - Month as a three-letter abbreviation. mmmm - Month as its full name. yy - Year as last two digits; leading zero for years less than 10. yyyy - Year represented by four digits. h - Hours; no leading zero for single-digit hours (12-hour clock). hh - Hours; leading zero for single-digit hours (12-hour clock). H - Hours; no leading zero for single-digit hours (24-hour clock). HH - Hours; leading zero for single-digit hours (24-hour clock). M - Minutes; no leading zero for single-digit minutes. Uppercase M unlike CF timeFormat's m to avoid conflict with months. MM - Minutes; leading zero for single-digit minutes. Uppercase MM unlike CF timeFormat's mm to avoid conflict with months. s - Seconds; no leading zero for single-digit seconds. ss - Seconds; leading zero for single-digit seconds. l or L - Milliseconds. l gives 3 digits. L gives 2 digits. t - Lowercase, single-character time marker string: a or p. No equivalent in CF. tt - Lowercase, two-character time marker string: am or pm. No equivalent in CF. T - Uppercase, single-character time marker string: A or P. Uppercase T unlike CF's t to allow for user-specified casing. TT - Uppercase, two-character time marker string: AM or PM. Uppercase TT unlike CF's tt to allow for user-specified casing. Z - US timezone abbreviation, e.g. EST or MDT. With non-US timezones or in the Opera browser, the GMT/UTC offset is returned, e.g. GMT-0500 No equivalent in CF. o - GMT/UTC timezone offset, e.g. -0500 or +0230. No equivalent in CF. S - The date's ordinal suffix (st, nd, rd, or th). Works well with d. No equivalent in CF. '…' or "…" - Literal character sequence. Surrounding quotes are removed. No equivalent in CF. UTC: - Must be the first four characters of the mask. Converts the date from local time to UTC/GMT/Zulu time before applying the mask. The "UTC:" prefix is removed. No equivalent in CF. "default": "ddd mmm dd yyyy HH:MM:ss", shortDate: "m/d/yy", mediumDate: "mmm d, yyyy", longDate: "mmmm d, yyyy", fullDate: "dddd, mmmm d, yyyy", shortTime: "h:MM TT", mediumTime: "h:MM:ss TT", longTime: "h:MM:ss TT Z", isoDate: "yyyy-mm-dd", isoTime: "HH:MM:ss", isoDateTime: "yyyy-mm-dd'T'HH:MM:ss", isoUtcDateTime: "UTC:yyyy-mm-dd'T'HH:MM:ss'Z'" */ firstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ... isRTL: false, // True if right-to-left language, false if left-to-right showMonthAfterYear: false, // True if the year select precedes month, false for month then year yearSuffix: '' // Additional text to append to the year in the month headers }; this._defaults = { // Global defaults for all the date picker instances showOn: 'focus', // 'focus' for popup on focus, // 'button' for trigger button, or 'both' for either showAnim: 'show', // Name of jQuery animation for popup showOptions: {}, // Options for enhanced animations defaultDate: null, // Used when field is blank: actual date, // +/-number for offset from today, null for today appendText: '', // Display text following the input box, e.g. showing the format buttonText: '...', // Text for trigger button buttonImage: '', // URL for trigger button image buttonImageOnly: false, // True if the image appears alone, false if it appears on a button hideIfNoPrevNext: false, // True to hide next/previous month links // if not applicable, false to just disable them navigationAsDateFormat: false, // True if date formatting applied to prev/today/next links gotoCurrent: false, // True if today link goes back to current selection instead changeMonth: false, // True if month can be selected directly, false if only prev/next changeYear: false, // True if year can be selected directly, false if only prev/next yearRange: 'c-10:c+10', // Range of years to display in drop-down, // either relative to today's year (-nn:+nn), relative to currently displayed year // (c-nn:c+nn), absolute (nnnn:nnnn), or a combination of the above (nnnn:-n) showOtherMonths: false, // True to show dates in other months, false to leave blank selectOtherMonths: false, // True to allow selection of dates in other months, false for unselectable showWeek: false, // True to show week of the year, false to not show it calculateWeek: this.iso8601Week, // How to calculate the week of the year, // takes a Date and returns the number of the week for it shortYearCutoff: '+10', // Short year values < this are in the current century, // > this are in the previous century, // string value starting with '+' for current year + value minDate: null, // The earliest selectable date, or null for no limit maxDate: null, // The latest selectable date, or null for no limit duration: '_default', // Duration of display/closure beforeShowDay: null, // Function that takes a date and returns an array with // [0] = true if selectable, false if not, [1] = custom CSS class name(s) or '', // [2] = cell title (optional), e.g. $.datetimepicker.noWeekends beforeShow: null, // Function that takes an input field and // returns a set of custom settings for the date picker onSelect: null, // Define a callback function when a date is selected onChangeMonthYear: null, // Define a callback function when the month or year is changed onClose: null, // Define a callback function when the datepicker is closed numberOfMonths: 1, // Number of months to show at a time showCurrentAtPos: 0, // The position in multipe months at which to show the current month (starting at 0) stepMonths: 1, // Number of months to step back/forward stepBigMonths: 12, // Number of months to step back/forward for the big links altField: '', // Selector for an alternate field to store selected dates into altFormat: '', // The date format to use for the alternate field constrainInput: false, // The input is constrained by the current date format showButtonPanel: false, // True to show button panel, false to not show it autoSize: false, // True to size the input for the date format, false to leave as is show24HourClock: false, //True to display an analog clock to pick time and hour showCalendar: true, // True to display calendar showTime: true, showSecond: true, minuteInterval: 1, minuteIntervalRounding: 'up', limitUserToIntervalValue: false, showAsAndorid: false, showAsAndorid24: false, }; $.extend(this._defaults, this.regional['']); var div = '
'; this.dpDiv = $(div); } $.extend(Datetimepicker.prototype, { /* Class name added to elements to indicate already configured with a date picker. */ markerClassName: 'hasDatetimepicker', /* Debug logging (if enabled). */ log: function() { if (this.debug) console.log.apply('', arguments); }, // TODO rename to "widget" when switching to widget factory _widgetDatepicker: function() { return this.dpDiv; }, /* Override the default settings for all instances of the date picker. @param settings object - the new settings to use as defaults (anonymous object) @return the manager object */ setDefaults: function(settings) { extendRemove(this._defaults, settings || {}); return this; }, /* Attach the date picker to a jQuery selection. @param target element - the target input field or division or span @param settings object - the new settings to use for this date picker instance (anonymous) */ _attachDatepicker: function(target, settings) { // check for settings on the control itself - in namespace 'date:' var inlineSettings = null; for (var attrName in this._defaults) { var attrValue = target.getAttribute('date:' + attrName); if (attrValue) { inlineSettings = inlineSettings || {}; try { inlineSettings[attrName] = eval(attrValue); } catch (err) { inlineSettings[attrName] = attrValue; } } } var nodeName = target.nodeName.toLowerCase(); var inline = (nodeName == 'div' || nodeName == 'span'); if (!target.id) target.id = 'dp' + (++this.uuid); var inst = this._newInst($(target), inline); inst.settings = $.extend({}, settings || {}, inlineSettings || {}); if (nodeName == 'input') { this._connectDatepicker(target, inst); } else if (inline) { this._inlineDatepicker(target, inst); } }, /* Create a new instance object. */ _newInst: function(target, inline) { var id = target[0].id.replace(/([^A-Za-z0-9_])/g, '\\\\$1'); // escape jQuery meta chars return { id: id, input: target, // associated target selectedDay: 0, selectedMonth: 0, selectedYear: 0, // current selection drawMonth: 0, drawYear: 0, // month being drawn inline: inline, // is datepicker inline or not dpDiv: (!inline ? this.dpDiv : // presentation div $('
')) }; }, /* Attach the date picker to an input field. */ _connectDatepicker: function(target, inst) { var input = $(target); inst.append = $([]); inst.trigger = $([]); if (input.hasClass(this.markerClassName)) return; this._attachments(input, inst); input.addClass(this.markerClassName).keydown(this._doKeyDown). keyup(this._doKeyUp). bind("setData.datepicker", function(event, key, value) { inst.settings[key] = value; }).bind("getData.datepicker", function(event, key) { return this._get(inst, key); }); this._autoSize(inst); $.data(target, PROP_NAME, inst); }, /* Make attachments based on settings. */ _attachments: function(input, inst) { var appendText = this._get(inst, 'appendText'); var isRTL = this._get(inst, 'isRTL'); if (inst.append) inst.append.remove(); if (appendText) { inst.append = $('' + appendText + ''); input[isRTL ? 'before' : 'after'](inst.append); } input.unbind('focus', this._showDatepicker); if (inst.trigger) inst.trigger.remove(); var showOn = this._get(inst, 'showOn'); if (showOn == 'focus' || showOn == 'both') // pop-up date picker when in the marked field input.focus(this._showDatepicker); if (showOn == 'button' || showOn == 'both') { // pop-up date picker when button clicked var buttonText = this._get(inst, 'buttonText'); var buttonImage = this._get(inst, 'buttonImage'); inst.trigger = $(this._get(inst, 'buttonImageOnly') ? $('').addClass(this._triggerClass). attr({ src: buttonImage, alt: buttonText, title: buttonText }) : $('').addClass(this._triggerClass). html(buttonImage == '' ? buttonText : $('').attr( { src: buttonImage, alt: buttonText, title: buttonText }))); input[isRTL ? 'before' : 'after'](inst.trigger); inst.trigger.click(function() { if ($.datetimepicker._datepickerShowing && $.datetimepicker._lastInput == input[0]) $.datetimepicker._hideDatepicker(); else $.datetimepicker._showDatepicker(input[0]); return false; }); } }, /* Apply the maximum length for the date format. */ _autoSize: function(inst) { if (this._get(inst, 'autoSize') && !inst.inline) { var date = new Date(2009, 12 - 1, 20); // Ensure double digits var dateFormat = this._get(inst, 'dateFormat'); if (dateFormat.match(/[DM]/)) { var findMax = function(names) { var max = 0; var maxI = 0; for (var i = 0; i < names.length; i++) { if (names[i].length > max) { max = names[i].length; maxI = i; } } return maxI; }; date.setMonth(findMax(this._get(inst, (dateFormat.match(/MM/) ? 'monthNames' : 'monthNamesShort')))); date.setDate(findMax(this._get(inst, (dateFormat.match(/DD/) ? 'dayNames' : 'dayNamesShort'))) + 20 - date.getDay()); } inst.input.attr('size', this._formatDate(inst, date).length); } }, /* Attach an inline date picker to a div. */ _inlineDatepicker: function(target, inst) { var divSpan = $(target); if (divSpan.hasClass(this.markerClassName)) return; divSpan.addClass(this.markerClassName).append(inst.dpDiv). bind("setData.datepicker", function(event, key, value) { inst.settings[key] = value; }).bind("getData.datepicker", function(event, key) { return this._get(inst, key); }); $.data(target, PROP_NAME, inst); this._setDate(inst, this._getDefaultDate(inst), true); this._updateDatepicker(inst); this._updateAlternate(inst); }, /* Pop-up the date picker in a "dialog" box. @param input element - ignored @param date string or Date - the initial date to display @param onSelect function - the function to call when a date is selected @param settings object - update the dialog date picker instance's settings (anonymous object) @param pos int[2] - coordinates for the dialog's position within the screen or event - with x/y coordinates or leave empty for default (screen centre) @return the manager object */ _dialogDatepicker: function(input, date, onSelect, settings, pos) { var inst = this._dialogInst; // internal instance if (!inst) { var id = 'dp' + (++this.uuid); this._dialogInput = $(''); this._dialogInput.keydown(this._doKeyDown); $('body').append(this._dialogInput); inst = this._dialogInst = this._newInst(this._dialogInput, false); inst.settings = {}; $.data(this._dialogInput[0], PROP_NAME, inst); } extendRemove(inst.settings, settings || {}); date = (date && date.constructor == Date ? this._formatDate(inst, date) : date); this._dialogInput.val(date); this._pos = (pos ? (pos.length ? pos : [pos.pageX, pos.pageY]) : null); if (!this._pos) { var browserWidth = document.documentElement.clientWidth; var browserHeight = document.documentElement.clientHeight; var scrollX = document.documentElement.scrollLeft || document.body.scrollLeft; var scrollY = document.documentElement.scrollTop || document.body.scrollTop; this._pos = // should use actual width/height below [(browserWidth / 2) - 100 + scrollX, (browserHeight / 2) - 150 + scrollY]; } // move input on screen for focus, but hidden behind dialog this._dialogInput.css('left', (this._pos[0] + 20) + 'px').css('top', this._pos[1] + 'px'); inst.settings.onSelect = onSelect; this._inDialog = true; this.dpDiv.addClass(this._dialogClass); this._showDatepicker(this._dialogInput[0]); if ($.blockUI) $.blockUI(this.dpDiv); $.data(this._dialogInput[0], PROP_NAME, inst); return this; }, /* Detach a datepicker from its control. @param target element - the target input field or division or span */ _destroyDatepicker: function(target) { var $target = $(target); var inst = $.data(target, PROP_NAME); if (!$target.hasClass(this.markerClassName)) { return; } var nodeName = target.nodeName.toLowerCase(); $.removeData(target, PROP_NAME); if (nodeName == 'input') { inst.append.remove(); inst.trigger.remove(); $target.removeClass(this.markerClassName). unbind('focus', this._showDatepicker). unbind('keydown', this._doKeyDown). unbind('keyup', this._doKeyUp); } else if (nodeName == 'div' || nodeName == 'span') $target.removeClass(this.markerClassName).empty(); }, /* Enable the date picker to a jQuery selection. @param target element - the target input field or division or span */ _enableDatepicker: function(target) { var $target = $(target); var inst = $.data(target, PROP_NAME); if (!$target.hasClass(this.markerClassName)) { return; } var nodeName = target.nodeName.toLowerCase(); if (nodeName == 'input') { target.disabled = false; inst.trigger.filter('button'). each(function() { this.disabled = false; }).end(). filter('img').css({ opacity: '1.0', cursor: '' }); } else if (nodeName == 'div' || nodeName == 'span') { var inline = $target.children('.' + this._inlineClass); inline.children().removeClass('ui-state-disabled'); } this._disabledInputs = $.map(this._disabledInputs, function(value) { return (value == target ? null : value); }); // delete entry }, /* Disable the date picker to a jQuery selection. @param target element - the target input field or division or span */ _disableDatepicker: function(target) { var $target = $(target); var inst = $.data(target, PROP_NAME); if (!$target.hasClass(this.markerClassName)) { return; } var nodeName = target.nodeName.toLowerCase(); if (nodeName == 'input') { target.disabled = true; inst.trigger.filter('button'). each(function() { this.disabled = true; }).end(). filter('img').css({ opacity: '0.5', cursor: 'default' }); } else if (nodeName == 'div' || nodeName == 'span') { var inline = $target.children('.' + this._inlineClass); inline.children().addClass('ui-state-disabled'); } this._disabledInputs = $.map(this._disabledInputs, function(value) { return (value == target ? null : value); }); // delete entry this._disabledInputs[this._disabledInputs.length] = target; }, /* Is the first field in a jQuery collection disabled as a datepicker? @param target element - the target input field or division or span @return boolean - true if disabled, false if enabled */ _isDisabledDatepicker: function(target) { if (!target) { return false; } for (var i = 0; i < this._disabledInputs.length; i++) { if (this._disabledInputs[i] == target) return true; } return false; }, /* Retrieve the instance data for the target control. @param target element - the target input field or division or span @return object - the associated instance data @throws error if a jQuery problem getting data */ _getInst: function(target) { try { return $.data(target, PROP_NAME); } catch (err) { throw 'Missing instance data for this datepicker'; } }, /* Update or retrieve the settings for a date picker attached to an input field or division. @param target element - the target input field or division or span @param name object - the new settings to update or string - the name of the setting to change or retrieve, when retrieving also 'all' for all instance settings or 'defaults' for all global defaults @param value any - the new value for the setting (omit if above is an object or to retrieve a value) */ _optionDatepicker: function(target, name, value) { var inst = this._getInst(target); if (arguments.length == 2 && typeof name == 'string') { return (name == 'defaults' ? $.extend({}, $.datetimepicker._defaults) : (inst ? (name == 'all' ? $.extend({}, inst.settings) : this._get(inst, name)) : null)); } var settings = name || {}; if (typeof name == 'string') { settings = {}; settings[name] = value; } if (inst) { if (this._curInst == inst) { this._hideDatepicker(); } var date = this._getDateDatepicker(target, true); extendRemove(inst.settings, settings); this._attachments($(target), inst); this._autoSize(inst); this._setDateDatepicker(target, date); this._updateDatepicker(inst); } }, // change method deprecated _changeDatepicker: function(target, name, value) { this._optionDatepicker(target, name, value); }, /* Redraw the date picker attached to an input field or division. @param target element - the target input field or division or span */ _refreshDatepicker: function(target) { var inst = this._getInst(target); if (inst) { this._updateDatepicker(inst); } }, /* Set the dates for a jQuery selection. @param target element - the target input field or division or span @param date Date - the new date */ _setDateDatepicker: function(target, date) { var inst = this._getInst(target); if (inst) { this._setDate(inst, date); this._updateDatepicker(inst); this._updateAlternate(inst); } }, /* Get the date(s) for the first entry in a jQuery selection. @param target element - the target input field or division or span @param noDefault boolean - true if no default date is to be used @return Date - the current date */ _getDateDatepicker: function(target, noDefault) { var inst = this._getInst(target); if (inst && !inst.inline) this._setDateFromField(inst, noDefault); return (inst ? this._getDate(inst) : null); }, /* Handle keystrokes. */ _doKeyDown: function(event) { var inst = $.datetimepicker._getInst(event.target); var handled = true; var isRTL = inst.dpDiv.is('.ui-datepicker-rtl'); inst._keyEvent = true; if ($.datetimepicker._datepickerShowing) switch (event.keyCode) { case 9: $.datetimepicker._hideDatepicker(); handled = false; break; // hide on tab out case 13: var sel = $('td.' + $.datetimepicker._dayOverClass, inst.dpDiv). add($('td.' + $.datetimepicker._currentClass, inst.dpDiv)); if (sel[0]) $.datetimepicker._selectDay(event.target, inst.selectedMonth, inst.selectedYear, sel[0], inst.currentHour, inst.currentMinute, inst.currentSecond, inst.currentAMPM); else $.datetimepicker._hideDatepicker(); return false; // don't submit the form break; // select the value on enter case 27: $.datetimepicker._hideDatepicker(); break; // hide on escape case 33: $.datetimepicker._adjustDate(event.target, (event.ctrlKey ? -$.datetimepicker._get(inst, 'stepBigMonths') : -$.datetimepicker._get(inst, 'stepMonths')), 'M'); break; // previous month/year on page up/+ ctrl case 34: $.datetimepicker._adjustDate(event.target, (event.ctrlKey ? +$.datetimepicker._get(inst, 'stepBigMonths') : +$.datetimepicker._get(inst, 'stepMonths')), 'M'); break; // next month/year on page down/+ ctrl case 35: if (event.ctrlKey || event.metaKey) $.datetimepicker._clearDate(event.target); handled = event.ctrlKey || event.metaKey; break; // clear on ctrl or command +end case 36: if (event.ctrlKey || event.metaKey) $.datetimepicker._gotoToday(event.target); handled = event.ctrlKey || event.metaKey; break; // current on ctrl or command +home case 37: if (event.ctrlKey || event.metaKey) $.datetimepicker._adjustDate(event.target, (isRTL ? +1 : -1), 'D'); handled = event.ctrlKey || event.metaKey; // -1 day on ctrl or command +left if (event.originalEvent.altKey) $.datetimepicker._adjustDate(event.target, (event.ctrlKey ? -$.datetimepicker._get(inst, 'stepBigMonths') : -$.datetimepicker._get(inst, 'stepMonths')), 'M'); // next month/year on alt +left on Mac break; case 38: if (event.ctrlKey || event.metaKey) $.datetimepicker._adjustDate(event.target, -7, 'D'); handled = event.ctrlKey || event.metaKey; break; // -1 week on ctrl or command +up case 39: if (event.ctrlKey || event.metaKey) $.datetimepicker._adjustDate(event.target, (isRTL ? -1 : +1), 'D'); handled = event.ctrlKey || event.metaKey; // +1 day on ctrl or command +right if (event.originalEvent.altKey) $.datetimepicker._adjustDate(event.target, (event.ctrlKey ? +$.datetimepicker._get(inst, 'stepBigMonths') : +$.datetimepicker._get(inst, 'stepMonths')), 'M'); // next month/year on alt +right break; case 40: if (event.ctrlKey || event.metaKey) $.datetimepicker._adjustDate(event.target, +7, 'D'); handled = event.ctrlKey || event.metaKey; break; // +1 week on ctrl or command +down default: handled = false; } else if (event.keyCode == 36 && event.ctrlKey) // display the date picker on ctrl+home $.datetimepicker._showDatepicker(this); else { handled = false; } if (handled) { event.preventDefault(); event.stopPropagation(); } }, // Javascript does not offer Left function _Left: function(str, name) { if (n <= 0) return ""; else if (n > String(str).length) return str; else return String(str).substring(0, n); }, // Determines Year, primarily for the century, by picking the closest. // 77 will choose 1977, 10 will choose 2010 _DetermineYear: function(year) { var yearLength = String(year).length; var CurrentDate = new Date(); var PresentYear = CurrentDate.getFullYear(); switch (yearLength) { case 0: alert(CurrentDate.getFullYear()); return CurrentDate.getFullYear(); break; case 1: return '200' + year; break; case 2: var FutureYear = parseInt('20' + year, 10); var PastYear = parseInt('19' + year, 10); var FutureDiff = Math.abs(FutureYear - PresentYear); var PastDiff = Math.abs(PastYear - PresentYear); if (PastDiff < FutureDiff) { return PastYear; } else { return FutureYear; } case 3: //unfortunately ff,chr,saf year returns getyear since 1900, while the other return the current year, so. var FutureYear = parseInt('20' + $.datetimepicker._Right(year, 2), 10); var PastYear = parseInt('19' + $.datetimepicker._Right(year, 2), 10); var FutureDiff = Math.abs(FutureYear - PresentYear); var PastDiff = Math.abs(PastYear - PresentYear); if (PastDiff < FutureDiff) { return PastYear; } else { return FutureYear; } break; case 4: return year; default: return _Left(year, 4); } }, //\Date-Time-Picker /* Synchronise manual entry and field/alternate field. */ _doKeyUp: function(event) { var inst = $.datetimepicker._getInst(event.target); if (inst.input.val() != inst.lastVal) { try { //Date-Time-Picker var date = new Date(); if(inst.input.val() == 'today'){ }else{ date = new Date(inst.input.val()); } if (date != "NaN") { //date.setYear($.datetimepicker._DetermineYear(date.getFullYear())); //date.setYear($.datetimepicker._DetermineYear(date.getYear())); if (date) { // only if valid $.datetimepicker._setDateFromField(inst); $.datetimepicker._updateAlternate(inst); $.datetimepicker._updateDatepicker(inst); } } } catch (event) { $.datetimepicker.log(event); } } return true; }, /* Pop-up the date picker for a given input field. @param input element - the input field attached to the date picker or event - if triggered by focus */ _showDatepicker: function(input) { input = input.target || input; if (input.nodeName.toLowerCase() != 'input') // find from button/image trigger input = $('input', input.parentNode)[0]; if ($.datetimepicker._isDisabledDatepicker(input) || $.datetimepicker._lastInput == input) // already here return; var inst = $.datetimepicker._getInst(input); if ($.datetimepicker._curInst && $.datetimepicker._curInst != inst) { $.datetimepicker._curInst.dpDiv.stop(true, true); } var beforeShow = $.datetimepicker._get(inst, 'beforeShow'); extendRemove(inst.settings, (beforeShow ? beforeShow.apply(input, [input, inst]) : {})); inst.lastVal = null; $.datetimepicker._lastInput = input; $.datetimepicker._setDateFromField(inst); if ($.datetimepicker._inDialog) // hide cursor input.value = ''; if (!$.datetimepicker._pos) { // position below input $.datetimepicker._pos = $.datetimepicker._findPos(input); $.datetimepicker._pos[1] += input.offsetHeight; // add the height } var isFixed = false; $(input).parents().each(function() { isFixed |= $(this).css('position') == 'fixed'; return !isFixed; }); if (isFixed && $.browser.opera) { // correction for Opera when fixed and scrolled $.datetimepicker._pos[0] -= document.documentElement.scrollLeft; $.datetimepicker._pos[1] -= document.documentElement.scrollTop; } var offset = { left: $.datetimepicker._pos[0], top: $.datetimepicker._pos[1] }; $.datetimepicker._pos = null; // determine sizing offscreen inst.dpDiv.css({ position: 'absolute', display: 'block', top: '-1000px' }); $.datetimepicker._updateDatepicker(inst); // fix width for dynamic number of date pickers // and adjust position before showing offset = $.datetimepicker._checkOffset(inst, offset, isFixed); inst.dpDiv.css({ position: ($.datetimepicker._inDialog && $.blockUI ? 'static' : (isFixed ? 'fixed' : 'absolute')), display: 'none', left: offset.left + 'px', top: offset.top + 'px' }); if (!inst.inline) { var showAnim = $.datetimepicker._get(inst, 'showAnim'); var duration = $.datetimepicker._get(inst, 'duration'); var postProcess = function() { $.datetimepicker._datepickerShowing = true; var borders = $.datetimepicker._getBorders(inst.dpDiv); inst.dpDiv.find('iframe.ui-datepicker-cover'). // IE6- only css({ left: -borders[0], top: -borders[1], width: inst.dpDiv.outerWidth(), height: inst.dpDiv.outerHeight() }); if($.datetimepicker._dontShow) { $.datetimepicker._hideDatepicker(); $.datetimepicker._dontShow = false; } }; inst.dpDiv.css( "z-index", datepicker_getZindex( $( input ) ) + 1 ); //inst.dpDiv.zIndex($(input).zIndex() + 1); if ($.effects && $.effects[showAnim]) inst.dpDiv.show(showAnim, $.datetimepicker._get(inst, 'showOptions'), duration, postProcess); else inst.dpDiv[showAnim || 'show']((showAnim ? duration : null), postProcess); if (!showAnim) postProcess(); if (inst.input.is(':visible') && !inst.input.is(':disabled')) inst.input.focus(); $.datetimepicker._curInst = inst; } }, _calculateMinute4Interval: function(inst, date) { if(inst == undefined){ return; } if(date != undefined){ inst.currentMinute = date.getMinutes(); } var minuteInterval = parseInt(this._get(inst, 'minuteInterval'), 10); if(!minuteInterval || minuteInterval<1 || minuteInterval>60){ minuteInterval = 1; } if(minuteInterval != 1){ var minuteIntervalRounding = this._get(inst, 'minuteIntervalRounding'); if(minuteIntervalRounding == 'down'){ var miDown = inst.currentMinute % minuteInterval; inst.currentMinute -= miDown }else if(minuteIntervalRounding == 'updown'){ var miUpDown = inst.currentMinute % minuteInterval; if(miUpDown != 0){ if(miUpDown < (minuteInterval/2)){ inst.currentMinute -= miUpDown; }else{ inst.currentMinute += minuteInterval - miUpDown; } } }else{ var miUp = inst.currentMinute % minuteInterval; if(miUp > 0){ miUp = minuteInterval - miUp; } inst.currentMinute += miUp; } } if(inst.currentMinute > 59){ if(date != undefined){ date.setMinutes(inst.currentMinute); } inst.currentMinute = 0; } }, /* Generate the date picker content. */ _updateDatepicker: function(inst) { var self = this; var borders = $.datetimepicker._getBorders(inst.dpDiv); inst.dpDiv.empty().append(this._generateHTML(inst)) .find('iframe.ui-datepicker-cover') // IE6- only .css({ left: -borders[0], top: -borders[1], width: inst.dpDiv.outerWidth(), height: inst.dpDiv.outerHeight() }) .end() .find('button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a') .bind('mouseout', function() { $(this).removeClass('ui-state-hover'); if (this.className.indexOf('ui-datepicker-prev') != -1) $(this).removeClass('ui-datepicker-prev-hover'); if (this.className.indexOf('ui-datepicker-next') != -1) $(this).removeClass('ui-datepicker-next-hover'); }) .bind('mouseover', function() { if (!self._isDisabledDatepicker(inst.inline ? inst.dpDiv.parent()[0] : inst.input[0])) { $(this).parents('.ui-datepicker-calendar').find('a').removeClass('ui-state-hover'); $(this).addClass('ui-state-hover'); if (this.className.indexOf('ui-datepicker-prev') != -1) $(this).addClass('ui-datepicker-prev-hover'); if (this.className.indexOf('ui-datepicker-next') != -1) $(this).addClass('ui-datepicker-next-hover'); } }) .end() .find('.' + this._dayOverClass + ' a') .trigger('mouseover') .end(); var numMonths = this._getNumberOfMonths(inst); var cols = numMonths[1]; var width = 17; if (cols > 1) inst.dpDiv.addClass('ui-datepicker-multi-' + cols).css('width', (width * cols) + 'em'); else inst.dpDiv.removeClass('ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4').width(''); inst.dpDiv[(numMonths[0] != 1 || numMonths[1] != 1 ? 'add' : 'remove') + 'Class']('ui-datepicker-multi'); inst.dpDiv[(this._get(inst, 'isRTL') ? 'add' : 'remove') + 'Class']('ui-datepicker-rtl'); var show24HourClock = this._get(inst, 'show24HourClock'); var showCalendar = this._get(inst, 'showCalendar'); var showAsAndorid = this._get(inst, 'showAsAndorid'); if (inst.currentHour != undefined) { if(showAsAndorid){ var monthNamesShort = this._get(inst, 'monthNamesShort'); var param = {'picker': this, 'inst': inst}; // CO-1738 var disableMinuteSecond = false; if(inst.currentHour == 24){ disableMinuteSecond = true; } $("#DP_jQuery_Minute_" + dpuuid).attr('disabled',disableMinuteSecond); $("#DP_jQuery_Second_" + dpuuid).attr('disabled',disableMinuteSecond); // Hour $("#DP_jQuery_Hour_" + dpuuid) .val(toDigitFormat(inst.currentHour)) .blur(param, function(event){ try{ var target = $('#'+event.data.inst.id); var inst = event.data.picker._getInst(target[0]); var minHour = 1; var maxHour = 12; var msgError = msg_mobipick_invalid_hour_apm; if(event.data.picker._get(inst, 'showAsAndorid24') == true){ minHour = 0; // CO-1738 if(inst.settings.dateFormat.indexOf('yy') > 0 // date format || !isMilitary24Version()){ maxHour = 23; } else{ maxHour = 24; } msgError = msg_mobipick_invalid_hour_military; } var _tmpVal = $(this).val(); if(_tmpVal < minHour || _tmpVal > maxHour){ $('#mobipick_msg_' + dpuuid).css('display','block').html('* ' + msgError); $(this).focus(); } else{ $('#mobipick_msg_' + dpuuid).css('display','none').html(''); inst.selectedHour = toDigitFormat(_tmpVal); if(inst.selectedHour == 24){ // CO-1738 inst.selectedMinute = 0; inst.selectedSecond = 0; $("#DP_jQuery_Minute_" + dpuuid).attr('disabled',true).val('00'); $("#DP_jQuery_Second_" + dpuuid).attr('disabled',true).val('00'); } else{ $("#DP_jQuery_Minute_" + dpuuid).attr('disabled',false); $("#DP_jQuery_Second_" + dpuuid).attr('disabled',false); } event.data.picker._updateDisplayFormated("#" + inst.id); } } catch(ex){ } }) .keypress(param, function(e) { try{ var keynum; if(window.event) { keynum = e.keyCode; } else if(e.which) { keynum = e.which; } if(13 == keynum){ // Enter $(this).trigger('blur'); } else{ var isNumberKey = onlyNumberDigit(this,e); if(isNumberKey){ var currentValue = this.value; var keynum; if(window.event) // IE { keynum = e.keyCode; } else if(e.which) // Netscape/Firefox/Opera { keynum = e.which; } var inputChar = String.fromCharCode(keynum); if(this.selectionStart != this.selectionEnd){ currentValue = currentValue.slice(0, this.selectionStart) + inputChar + currentValue.slice(this.selectionEnd); }else{ currentValue = currentValue.slice(0, this.selectionStart) + inputChar + currentValue.slice(this.selectionStart); } var target = $('#'+e.data.inst.id); var inst = e.data.picker._getInst(target[0]); var maxValue = 12; var minValue = 1; if(e.data.picker._get(inst, 'showAsAndorid24') == true){ // CO-1738 if(inst.settings.dateFormat.indexOf('yy') > 0 // date format || !isMilitary24Version()){ maxValue = 23; } else{ maxValue = 24; } minValue = 0; } if(currentValue < minValue || currentValue > maxValue){ return false; } } return isNumberKey; } } catch(ex){ } }) .bind("paste drop", param, function(e) { var pastedData = e.originalEvent.clipboardData.getData('text'); var currentValue = this.value; if(!isOnlyNumber(pastedData)){ e.preventDefault(); } currentValue = currentValue.slice(0, this.selectionStart) + pastedData + currentValue.slice(this.selectionEnd); var target = $('#'+e.data.inst.id); var inst = e.data.picker._getInst(target[0]); var maxValue = 12; var minValue = 1; if(e.data.picker._get(inst, 'showAsAndorid24') == true){ maxValue = 24; minValue = 0; } currentValue = parseInt(currentValue); if(currentValue < minValue || currentValue > maxValue){ e.preventDefault(); } }); // Minute $("#DP_jQuery_Minute_" + dpuuid) .val(toDigitFormat(inst.currentMinute)) .blur(param, function(event){ var target = $('#'+event.data.inst.id); var inst = event.data.picker._getInst(target[0]); var currentValue = this.value; if(currentValue == ''){ currentValue = '0'; } currentValue = parseInt(currentValue); //var minuteInterval = parseInt(event.data.picker._get(inst, 'minuteInterval'), 10); //if(!minuteInterval || minuteInterval<1 || minuteInterval>60){ // minuteInterval = 1; //} var limitUserToIntervalValue = event.data.picker._get(inst, 'limitUserToIntervalValue'); var minuteInterval; if(limitUserToIntervalValue == true){ minuteInterval = parseInt(event.data.picker._get(inst, 'minuteInterval'), 10); if(!minuteInterval || minuteInterval<1 || minuteInterval>60){ minuteInterval = 1; } }else{ minuteInterval = 1; } if(minuteInterval != 1){ var minuteIntervalRounding = event.data.picker._get(inst, 'minuteIntervalRounding'); if(minuteIntervalRounding == 'down'){ var miDown = currentValue % minuteInterval; currentValue = currentValue - miDown }else if(minuteIntervalRounding == 'updown'){ var miUpDown = currentValue % minuteInterval; if(miUpDown != 0){ if(miUpDown < (minuteInterval/2)){ currentValue = currentValue - miUpDown; }else{ currentValue = currentValue + minuteInterval - miUpDown; } } }else{ var miUp = currentValue % minuteInterval; if(miUp > 0){ miUp = minuteInterval - miUp; } currentValue = currentValue + miUp; } } if(currentValue > 59){ currentValue = 0; } inst.currentMinute = currentValue; $(this).val(inst.currentMinute); try{ var _tmpVal = $(this).val(); if(_tmpVal.length == 0 || _tmpVal > 59){ $('#mobipick_msg_' + dpuuid).css('display','block').html('* ' + msg_mobipick_invalid_minute); $(this).focus(); } else{ $('#mobipick_msg_' + dpuuid).css('display','none').html(''); inst.selectedMinute = toDigitFormat(_tmpVal); event.data.picker._updateDisplayFormated("#" + inst.id); } } catch(ex){ } }) .keypress(function(e) { try{ var keynum; if(window.event) { keynum = e.keyCode; } else if(e.which) { keynum = e.which; } if(13 == keynum){ // Enter $(this).trigger('blur'); } else{ var isNumberKey = onlyNumberDigit(this,e); if(isNumberKey){ var currentValue = this.value; var keynum; if(window.event) // IE { keynum = e.keyCode; } else if(e.which) // Netscape/Firefox/Opera { keynum = e.which; } var inputChar = String.fromCharCode(keynum); if(this.selectionStart != this.selectionEnd){ currentValue = currentValue.slice(0, this.selectionStart) + inputChar + currentValue.slice(this.selectionEnd); }else{ currentValue = currentValue.slice(0, this.selectionStart) + inputChar + currentValue.slice(this.selectionStart); } var maxValue = 59; var minValue = 0; currentValue = parseInt(currentValue); if(currentValue < minValue || currentValue > maxValue){ return false; } } return isNumberKey; } } catch(ex){ } }) .bind("paste drop", function(e) { var pastedData = e.originalEvent.clipboardData.getData('text'); var currentValue = this.value; if(!isOnlyNumber(pastedData)){ e.preventDefault(); } currentValue = currentValue.slice(0, this.selectionStart) + pastedData + currentValue.slice(this.selectionEnd); var maxValue = 59; var minValue = 0; if(currentValue < minValue || currentValue > maxValue){ return false; } currentValue = parseInt(currentValue); if(currentValue < minValue || currentValue > maxValue){ e.preventDefault(); } }); // Second $("#DP_jQuery_Second_" + dpuuid) .val(toDigitFormat(inst.currentSecond)) .blur(param, function(event){ try{ var _tmpVal = $(this).val(); if(_tmpVal.length == 0 || _tmpVal > 59){ $('#mobipick_msg_' + dpuuid).css('display','block').html('* ' + msg_mobipick_invalid_second); $(this).focus(); } else{ $('#mobipick_msg_' + dpuuid).css('display','none').html(''); var target = $('#'+event.data.inst.id); var inst = event.data.picker._getInst(target[0]); inst.selectedSecond = toDigitFormat(_tmpVal); event.data.picker._updateDisplayFormated("#" + inst.id); } } catch(ex){ } }) .keypress(function(e) { try{ var keynum; if(window.event) { keynum = e.keyCode; } else if(e.which) { keynum = e.which; } if(13 == keynum){ // Enter $(this).trigger('blur'); } else{ var isNumberKey = onlyNumberDigit(this,e); if(isNumberKey){ var currentValue = this.value; var keynum; if(window.event) // IE { keynum = e.keyCode; } else if(e.which) // Netscape/Firefox/Opera { keynum = e.which; } var inputChar = String.fromCharCode(keynum); if(this.selectionStart != this.selectionEnd){ currentValue = currentValue.slice(0, this.selectionStart) + inputChar + currentValue.slice(this.selectionEnd); }else{ currentValue = currentValue.slice(0, this.selectionStart) + inputChar + currentValue.slice(this.selectionStart); } var maxValue = 59; var minValue = 0; currentValue = parseInt(currentValue); if(currentValue < minValue || currentValue > maxValue){ return false; } } return isNumberKey; } } catch(ex){ } }) .bind("paste drop", function(e) { var pastedData = e.originalEvent.clipboardData.getData('text'); var currentValue = this.value; if(!isOnlyNumber(pastedData)){ e.preventDefault(); } currentValue = currentValue.slice(0, this.selectionStart) + pastedData + currentValue.slice(this.selectionEnd); var maxValue = 59; var minValue = 0; if(currentValue < minValue || currentValue > maxValue){ return false; } currentValue = parseInt(currentValue); if(currentValue < minValue || currentValue > maxValue){ e.preventDefault(); } }); //$("#DP_jQuery_AMPM_" + dpuuid).val(inst.currentAMPM); if(this._get(inst, 'showAsAndorid24') == true){ inst.currentAMPM = ''; }else{ if(inst.currentAMPM == CONST_AM){ $("#DP_jQuery_AM_" + dpuuid).attr('checked', true); }else{ $("#DP_jQuery_PM_" + dpuuid).attr('checked', true); } } // Month $('#mobipick-month-' + dpuuid) .val(monthNamesShort[inst.selectedMonth]) .blur(param, function(event){ var selectMonth = $(this).val(); if(selectMonth.length == 0){ selectMonth = '0'; } selectMonth = parseInt(selectMonth); if(selectMonth == 0){ selectMonth = 1; }else if(selectMonth > 12){ selectMonth = 12; } inst.selectedMonth = selectMonth - 1; $(this).val(monthNamesShort[inst.selectedMonth]); inst.currentMonth = inst.selectedMonth; event.data.picker._updateDisplayFormated("#" + inst.id); }) .keypress(function(e) { try{ var keynum; if(window.event) { keynum = e.keyCode; } else if(e.which) { keynum = e.which; } if(13 == keynum){ // Enter $(this).trigger('blur'); } else{ var isNumberKey = onlyNumberDigit(this,e); if(isNumberKey){ var currentValue = this.value; var keynum; if(window.event) // IE { keynum = e.keyCode; } else if(e.which) // Netscape/Firefox/Opera { keynum = e.which; } var inputChar = String.fromCharCode(keynum); if(this.selectionStart != this.selectionEnd){ currentValue = currentValue.slice(0, this.selectionStart) + inputChar + currentValue.slice(this.selectionEnd); }else{ currentValue = currentValue.slice(0, this.selectionStart) + inputChar + currentValue.slice(this.selectionStart); } if(parseInt(currentValue) > 12){ return false; } } return isNumberKey; } } catch(ex){ } }) .focus(function(e) { var currentValue = this.value; var currentMonth = monthNamesShort.indexOf(currentValue); if(currentMonth >= 0){ currentMonth +=1; } $(this).val(currentMonth); }) .bind("paste drop",function(e) { var pastedData = e.originalEvent.clipboardData.getData('text'); var currentValue = this.value; if(!isOnlyNumber(pastedData)){ e.preventDefault(); } currentValue = currentValue.slice(0, this.selectionStart) + pastedData + currentValue.slice(this.selectionEnd); if(parseInt(currentValue) > 12){ e.preventDefault(); } });; // Day $('#mobipick-day-' + dpuuid) .val(toDigitFormat(inst.selectedDay)) .blur(param, function(event){ if(this.value.length == 0){ $(this).val('01'); }else if(this.value.length != 2){ $(this).val(toDigitFormat(parseInt(this.value))); } if(parseInt(this.value) == 0){ $(this).val('01'); } try{ // CO-3596 var isLeapYear = false; var curYear = event.data.inst.currentYear; if(curYear % 4 == 0){ if(curYear % 100 == 0){ if(curYear % 400 == 0){ isLeapYear = true; } } else{ isLeapYear = true; } } var maxDate = 31; if(1 == event.data.inst.currentMonth){ if(isLeapYear){ maxDate = 29; } else{ maxDate = 28; } } var _tmpVal = $(this).val(); if(_tmpVal.length == 0 || _tmpVal < 1 || _tmpVal > maxDate){ $('#mobipick_msg_' + dpuuid).css('display','block').html('* ' + msg_mobipick_invalid_date); $(this).focus(); } else{ $('#mobipick_msg_' + dpuuid).css('display','none').html(''); var target = $('#'+event.data.inst.id); var inst = event.data.picker._getInst(target[0]); inst.selectedDay = _tmpVal; event.data.picker._updateDisplayFormated("#" + inst.id); } } catch(ex){ } }) .keypress(function(e) { try{ var keynum; if(window.event) { keynum = e.keyCode; } else if(e.which) { keynum = e.which; } if(13 == keynum){ // Enter $(this).trigger('blur'); } else{ var daysInMonth = $.datetimepicker._getDaysInMonth(inst.selectedYear, inst.selectedMonth); var isNumberKey = onlyNumberDigit(this,e); if(isNumberKey){ var currentValue = this.value; var keynum; if(window.event) // IE { keynum = e.keyCode; } else if(e.which) // Netscape/Firefox/Opera { keynum = e.which; } var inputChar = String.fromCharCode(keynum); if(this.selectionStart != this.selectionEnd){ currentValue = currentValue.slice(0, this.selectionStart) + inputChar + currentValue.slice(this.selectionEnd); }else{ currentValue = currentValue.slice(0, this.selectionStart) + inputChar + currentValue.slice(this.selectionStart); } if(parseInt(currentValue) > daysInMonth){ return false; } } return isNumberKey; } } catch(ex){ } }) .bind("paste drop",function(e) { var daysInMonth = $.datetimepicker._getDaysInMonth(inst.selectedYear, inst.selectedMonth); var pastedData = e.originalEvent.clipboardData.getData('text'); var currentValue = this.value; if(!isOnlyNumber(pastedData)){ e.preventDefault(); } currentValue = currentValue.slice(0, this.selectionStart) + pastedData + currentValue.slice(this.selectionEnd); if(parseInt(currentValue) > daysInMonth){ e.preventDefault(); } }); // Year $('#mobipick-year-' + dpuuid) .val(inst.selectedYear) .blur(param, function(event){ /*try{ if($(this).val().length != 4){ $('#mobipick_msg_' + dpuuid).css('display','block').html('* ' + msg_mobipick_invalid_year); $(this).focus(); } else{ $('#mobipick_msg_' + dpuuid).css('display','none').html(''); var target = $('#'+event.data.inst.id); var inst = event.data.picker._getInst(target[0]); inst.selectedYear = $(this).val(); event.data.picker._updateDisplayFormated("#" + inst.id); } } catch(ex){ }*/ var target = $('#'+event.data.inst.id); var inst = event.data.picker._getInst(target[0]); inst.selectedYear = $(this).val(); event.data.picker._updateDisplayFormated("#" + inst.id); }) .keypress(function(e) { try{ var keynum; if(window.event) { keynum = e.keyCode; } else if(e.which) { keynum = e.which; } if(13 == keynum){ // Enter $(this).trigger('blur'); } else{ var isNumberKey = onlyNumberDigit(this,e); if(isNumberKey){ var currentValue = this.value; var keynum; if(window.event) // IE { keynum = e.keyCode; } else if(e.which) // Netscape/Firefox/Opera { keynum = e.which; } var inputChar = String.fromCharCode(keynum); if(this.selectionStart != this.selectionEnd){ currentValue = currentValue.slice(0, this.selectionStart) + inputChar + currentValue.slice(this.selectionEnd); }else{ currentValue = currentValue.slice(0, this.selectionStart) + inputChar + currentValue.slice(this.selectionStart); } var maxValue = 9999; var minValue = 0; currentValue = parseInt(currentValue); if(currentValue < minValue || currentValue > maxValue){ return false; } } return isNumberKey; } } catch(ex){ } }) .bind("paste drop", function(e) { var pastedData = e.originalEvent.clipboardData.getData('text'); var currentValue = this.value; if(!isOnlyNumber(pastedData)){ e.preventDefault(); } currentValue = currentValue.slice(0, this.selectionStart) + pastedData + currentValue.slice(this.selectionEnd); var maxValue = 9999; var minValue = 0; if(currentValue < minValue || currentValue > maxValue){ return false; } currentValue = parseInt(currentValue); if(currentValue < minValue || currentValue > maxValue){ e.preventDefault(); } }); inst.selectedHour = inst.currentHour; inst.selectedAMPM = inst.currentAMPM; inst.selectedMinute = inst.currentMinute; inst.selectedSecond = inst.currentSecond; inst.currentMonth = inst.selectedMonth; this._updateDisplayFormated("#" + inst.id); }else{ $("#DP_jQuery_Hour_" + dpuuid).val(toDigitFormat(inst.currentHour)); $("#DP_jQuery_Minute_" + dpuuid).val(toDigitFormat(inst.currentMinute)); $("#DP_jQuery_Second_" + dpuuid).val(toDigitFormat(inst.currentSecond)); $("#DP_jQuery_AMPM_" + dpuuid).val(inst.currentAMPM); var Hour = inst.currentHour; if (inst.currentAMPM == CONST_PM) { Hour = parseInt(Hour, 10) + 12; } if (show24HourClock) { $.datetimepicker.DrawHours($("#DP_jQuery_clock_" + dpuuid)[0], Hour); $.datetimepicker.DrawMinutes($("#DP_jQuery_clock_" + dpuuid)[0], inst.currentMinute); $.datetimepicker.DrawSeconds($("#DP_jQuery_clock_" + dpuuid)[0], inst.currentSecond); } } } if (inst == $.datetimepicker._curInst && $.datetimepicker._datepickerShowing && inst.input && inst.input.is(':visible') && !inst.input.is(':disabled')) inst.input.focus(); if (show24HourClock) { /* Hour drop down changed change the clock */ $("#DP_jQuery_Hour_" + dpuuid).change(function(e) { var objID = this.id.split("_"); var ID = objID[objID.length - 1]; var Hour = $("#DP_jQuery_Hour_" + ID).val(); var AMPM = $("#DP_jQuery_AMPM_" + ID).val(); if (AMPM == CONST_PM) Hour = parseInt(Hour, 10) + 12; $.datetimepicker.DrawHours($("#DP_jQuery_clock_" + ID)[0], Hour); }); /* AM/PM drop down changed change the clock */ $("#DP_jQuery_AMPM_" + dpuuid).change(function(e) { var objID = this.id.split("_"); var ID = objID[objID.length - 1]; var Hour = $("#DP_jQuery_Hour_" + ID).val(); var AMPM = $("#DP_jQuery_AMPM_" + ID).val(); if (AMPM == CONST_PM) Hour = parseInt(Hour, 10) + 12; $.datetimepicker.DrawHours($("#DP_jQuery_clock_" + ID)[0], Hour); }); /* Minute drop down changed change the clock */ $("#DP_jQuery_Minute_" + dpuuid).change(function(e) { var objID = this.id.split("_"); var ID = objID[objID.length - 1]; $.datetimepicker.DrawMinutes($("#DP_jQuery_clock_" + ID)[0], $("#DP_jQuery_Minute_" + dpuuid).val()); }); /* Second drop down changed change the clock */ $("#DP_jQuery_Second_" + dpuuid).change(function(e) { var objID = this.id.split("_"); var ID = objID[objID.length - 1]; $.datetimepicker.DrawSeconds($("#DP_jQuery_clock_" + ID)[0], $("#DP_jQuery_Second_" + dpuuid).val()); }); /* Display area hilights */ $("#DP_jQuery_clock_" + dpuuid).mousemove(function(e) { var Pos = $.datetimepicker._findPos(this); var xOriginal = e.pageX - Pos[0] - 196; var yOriginal = e.pageY - Pos[1] - 196; var x = Math.abs(xOriginal); var y = Math.abs(yOriginal); var Distance = Math.sqrt((x * x) + (y * y)) if (Distance > 129 && Distance < 196) { this.children[2].style.display = ''; } else { this.children[2].style.display = 'none'; } if (Distance <= 129 && Distance > 50) { this.children[3].style.display = ''; } else { this.children[3].style.display = 'none'; } }); /* Calculate and move the appropriate minute or hour hand */ $("#DP_jQuery_clock_" + dpuuid).click(function(e) { var Pos = $.datetimepicker._findPos(this); var xOriginal = e.pageX - Pos[0] - 196; var yOriginal = e.pageY - Pos[1] - 196; /* Quadrant */ var core = 0; if (xOriginal > 0 && yOriginal < 0) { core = 1; } if (xOriginal < 0 && yOriginal < 0) { core = 2; } if (xOriginal < 0 && yOriginal > 0) { core = 3; } if (xOriginal > 0 && yOriginal > 0) { core = 4; } var x = Math.abs(xOriginal); var y = Math.abs(yOriginal); var Distance = Math.sqrt((x * x) + (y * y)) var InSecondRange = false; if (Distance > 198 && Distance < 267) { InSecondRange = true; } var InMinuteRange = false; if (Distance > 127 && Distance < 196) { InMinuteRange = true; } var InHourRange = false; if (Distance <= 129 && Distance > 50) { InHourRange = true; } var v; var Minute; var Second; k = y / Distance; /* Calculate the Math.Sin of the click position with the hour/minute/second position */ if (core == 1) { if (k > 0.987) v = '12'; if (k <= 0.987 && k > 0.922) v = '13'; if (k <= 0.922 && k > 0.785) v = '14'; if (k <= 0.785 && k > 0.600) v = '15'; if (k <= 0.600 && k > 0.374) v = '16'; if (k <= 0.374 && k > 0.152) v = '17'; if (k <= 0.152) v = '18'; if (k > 0.998) Minute = '00'; if (k <= 0.998 && k > 0.986) Minute = '01'; if (k <= 0.986 && k > 0.955) Minute = '02'; if (k <= 0.955 && k > 0.930) Minute = '03'; if (k <= 0.930 && k > 0.893) Minute = '04'; if (k <= 0.893 && k > 0.837) Minute = '05'; if (k <= 0.837 && k > 0.774) Minute = '06'; if (k <= 0.774 && k > 0.689) Minute = '07'; if (k <= 0.689 && k > 0.621) Minute = '08'; if (k <= 0.621 && k > 0.558) Minute = '09'; if (k <= 0.558 && k > 0.472) Minute = '10' if (k <= 0.472 && k > 0.356) Minute = '11' if (k <= 0.356 && k > 0.228) Minute = '12' if (k <= 0.228 && k > 0.173) Minute = '13' if (k <= 0.173 && k > 0.082) Minute = '14' if (k <= 0.082) Minute = '15' } if (core == 2) { if (k > 0.987) v = '12'; if (k <= 0.987 && k > 0.922) v = '11'; if (k <= 0.922 && k > 0.785) v = '10'; if (k <= 0.785 && k > 0.600) v = '09'; if (k <= 0.600 && k > 0.374) v = '08'; if (k <= 0.374 && k > 0.152) v = '07'; if (k <= 0.152) v = '06'; if (k > 0.998) Minute = '00'; if (k <= 0.998 && k > 0.986) Minute = '59'; if (k <= 0.986 && k > 0.955) Minute = '58'; if (k <= 0.955 && k > 0.930) Minute = '57'; if (k <= 0.930 && k > 0.893) Minute = '56'; if (k <= 0.893 && k > 0.837) Minute = '55'; if (k <= 0.837 && k > 0.774) Minute = '54'; if (k <= 0.774 && k > 0.689) Minute = '53'; if (k <= 0.689 && k > 0.621) Minute = '52'; if (k <= 0.621 && k > 0.558) Minute = '51'; if (k <= 0.558 && k > 0.472) Minute = '50' if (k <= 0.472 && k > 0.356) Minute = '49' if (k <= 0.356 && k > 0.228) Minute = '48' if (k <= 0.228 && k > 0.173) Minute = '47' if (k <= 0.173 && k > 0.082) Minute = '46' if (k <= 0.082) Minute = '45' } if (core == 3) { if (k > 0.987) v = '00'; if (k <= 0.987 && k > 0.922) v = '01'; if (k <= 0.922 && k > 0.785) v = '02'; if (k <= 0.785 && k > 0.600) v = '03'; if (k <= 0.600 && k > 0.374) v = '04'; if (k <= 0.374 && k > 0.152) v = '05'; if (k <= 0.152) v = '06'; if (k > 0.998) Minute = '30'; if (k <= 0.998 && k > 0.986) Minute = '31'; if (k <= 0.986 && k > 0.955) Minute = '32'; if (k <= 0.955 && k > 0.930) Minute = '33'; if (k <= 0.930 && k > 0.893) Minute = '34'; if (k <= 0.893 && k > 0.837) Minute = '35'; if (k <= 0.837 && k > 0.774) Minute = '36'; if (k <= 0.774 && k > 0.689) Minute = '37'; if (k <= 0.689 && k > 0.621) Minute = '38'; if (k <= 0.621 && k > 0.558) Minute = '39'; if (k <= 0.558 && k > 0.472) Minute = '40' if (k <= 0.472 && k > 0.356) Minute = '41' if (k <= 0.356 && k > 0.228) Minute = '42' if (k <= 0.228 && k > 0.173) Minute = '43' if (k <= 0.173 && k > 0.082) Minute = '44' if (k <= 0.082) Minute = '45' } if (core == 4) { if (k > 0.987) v = '00'; if (k <= 0.987 && k > 0.922) v = '23'; if (k <= 0.922 && k > 0.785) v = '22'; if (k <= 0.785 && k > 0.600) v = '21'; if (k <= 0.600 && k > 0.374) v = '20'; if (k <= 0.374 && k > 0.152) v = '19'; if (k <= 0.152) v = '18'; if (k > 0.998) Minute = '30'; if (k <= 0.998 && k > 0.986) Minute = '29'; if (k <= 0.986 && k > 0.955) Minute = '28'; if (k <= 0.955 && k > 0.930) Minute = '27'; if (k <= 0.930 && k > 0.893) Minute = '26'; if (k <= 0.893 && k > 0.837) Minute = '25'; if (k <= 0.837 && k > 0.774) Minute = '24'; if (k <= 0.774 && k > 0.689) Minute = '23'; if (k <= 0.689 && k > 0.621) Minute = '22'; if (k <= 0.621 && k > 0.558) Minute = '21'; if (k <= 0.558 && k > 0.472) Minute = '20' if (k <= 0.472 && k > 0.356) Minute = '19' if (k <= 0.356 && k > 0.228) Minute = '18' if (k <= 0.228 && k > 0.173) Minute = '17' if (k <= 0.173 && k > 0.082) Minute = '16' if (k <= 0.082) Minute = '15' } if (core == 0) { if (k == 1) { Minute = '15'; } if (k == 0) { Minute = '45'; } if (xOriginal < 0) { v = '06'; Minute = '45'; } else { v = '18'; Minute = '15'; } if (xOriginal == 0 && yOriginal == 0) { v = '12'; Minute = '00'; } if (yOriginal > 0 && xOriginal == 0) { v = '00'; Minute = '30'; } if (xOriginal == 0 && yOriginal < 0) { Minute = '00'; v = '12'; } } if (InMinuteRange) { $.datetimepicker.DrawMinutes(this, Minute); } if (InHourRange) { $.datetimepicker.DrawHours(this, v); } if (InSecondRange) { $.datetimepicker.DrawSeconds(this, Second); } }); } }, /* Changes the Hour hand to the correct image. t: the Clock instance Div v: the Hour to set it to. */ DrawHours: function(t, v) { var objID = t.id.split("_"); var ID = objID[objID.length - 1]; if (parseInt(v, 10) > 12) { $("#DP_jQuery_Hour_" + ID).val(parseInt(v, 10) - 12); $("#DP_jQuery_AMPM_" + ID).val("PM"); } else { if (v == '00') { $("#DP_jQuery_Hour_" + ID).val(parseInt('12', 10)); } else { $("#DP_jQuery_Hour_" + ID).val(parseInt(v, 10).toString()); } $("#DP_jQuery_AMPM_" + ID).val("AM"); } if (v == '00') $("#DP_jQuery_AMPM_" + ID).val("AM"); if (v == '12') $("#DP_jQuery_AMPM_" + ID).val("PM"); var HourIndex = v; if (HourIndex != '12') HourIndex = HourIndex; if (HourIndex > 11) HourIndex = HourIndex - 12; if (v == 0) HourIndex = 12; if (v == 12) HourIndex = 0; if (v > 11 || v == 0) { var IndexLocation = ((HourIndex * 269)) t.children[1].style.backgroundPosition = '0px -' + IndexLocation + 'px'; } else { HourIndex = Math.abs(12 - HourIndex); var IndexLocation = ((HourIndex * 269)) t.children[1].style.backgroundPosition = '-269px -' + IndexLocation + 'px'; } }, /* Changes the Minute hand to the correct image. t: the Clock instance Div Minute: the Minute to set it to. */ DrawMinutes: function(t, Minute) { var objID = t.id.split("_"); var ID = objID[objID.length - 1]; var Minutes = parseInt(Minute, 10).toString(); $("#DP_jQuery_Minute_" + ID).val(parseInt(Minute, 10).toString()); var ImageIndex = Minute if (ImageIndex > 30) { ImageIndex = ImageIndex - 60; ImageIndex = Math.abs(ImageIndex); t.children[0].style.backgroundPosition = '-269px -' + (ImageIndex * 269) + 'px'; } else { t.children[0].style.backgroundPosition = '0px -' + (ImageIndex * 269) + 'px'; } }, /* Changes the Second hand to the correct image. t: the Clock instance Div Second: the Second to set it to. */ DrawSeconds: function(t, Second) { var objID = t.id.split("_"); var ID = objID[objID.length - 1]; var Seconds = parseInt(Second, 10).toString(); $("#DP_jQuery_Second_" + ID).val(parseInt(Second, 10).toString()); var ImageIndex = Second if (ImageIndex > 30) { ImageIndex = ImageIndex - 60; ImageIndex = Math.abs(ImageIndex); t.children[0].style.backgroundPosition = '-269px -' + (ImageIndex * 269) + 'px'; } else { t.children[0].style.backgroundPosition = '0px -' + (ImageIndex * 269) + 'px'; } }, /* Retrieve the size of left and top borders for an element. @param elem (jQuery object) the element of interest @return (number[2]) the left and top borders */ _getBorders: function(elem) { var convert = function(value) { return { thin: 1, medium: 2, thick: 3}[value] || value; }; return [parseFloat(convert(elem.css('border-left-width'))), parseFloat(convert(elem.css('border-top-width')))]; }, /* Check positioning to remain on screen. */ _checkOffset: function(inst, offset, isFixed) { var dpWidth = inst.dpDiv.outerWidth(); var dpHeight = inst.dpDiv.outerHeight(); var inputWidth = inst.input ? inst.input.outerWidth() : 0; var inputHeight = inst.input ? inst.input.outerHeight() : 0; var viewWidth = document.documentElement.clientWidth + $(document).scrollLeft(); var viewHeight = document.documentElement.clientHeight + $(document).scrollTop(); offset.left -= (this._get(inst, 'isRTL') ? (dpWidth - inputWidth) : 0); offset.left -= (isFixed && offset.left == inst.input.offset().left) ? $(document).scrollLeft() : 0; offset.top -= (isFixed && offset.top == (inst.input.offset().top + inputHeight)) ? $(document).scrollTop() : 0; // now check if datepicker is showing outside window viewport - move to a better place if so. offset.left -= Math.min(offset.left, (offset.left + dpWidth > viewWidth && viewWidth > dpWidth) ? Math.abs(offset.left + dpWidth - viewWidth) : 0); offset.top -= Math.min(offset.top, (offset.top + dpHeight > viewHeight && viewHeight > dpHeight) ? Math.abs(dpHeight + inputHeight) : 0); return offset; }, // /* Find an object's position on the screen. */ // _findPos: function(obj) { // var inst = this._getInst(obj); // var isRTL = this._get(inst, 'isRTL'); // while (obj && (obj.type == 'hidden' || obj.nodeType != 1)) { // obj = obj[isRTL ? 'previousSibling' : 'nextSibling']; // } // var position = $(obj).offset(); // return [position.left, position.top]; // }, /* Hide the date picker from view. @param input element - the input field attached to the date picker */ _hideDatepicker: function(input) { var inst = this._curInst; if (!inst || (input && inst != $.data(input, PROP_NAME))) return; if (this._datepickerShowing) { var showAnim = this._get(inst, 'showAnim'); var duration = this._get(inst, 'duration'); var postProcess = function() { $.datetimepicker._tidyDialog(inst); this._curInst = null; }; if ($.effects && $.effects[showAnim]) inst.dpDiv.hide(showAnim, $.datetimepicker._get(inst, 'showOptions'), duration, postProcess); else inst.dpDiv[(showAnim == 'slideDown' ? 'slideUp' : (showAnim == 'fadeIn' ? 'fadeOut' : 'hide'))]((showAnim ? duration : null), postProcess); if (!showAnim) postProcess(); var onClose = this._get(inst, 'onClose'); if (onClose) onClose.apply((inst.input ? inst.input[0] : null), [(inst.input ? inst.input.val() : ''), inst]); // trigger custom callback this._datepickerShowing = false; this._lastInput = null; if (this._inDialog) { this._dialogInput.css({ position: 'absolute', left: '0', top: '-100px' }); if ($.blockUI) { $.unblockUI(); $('body').append(this.dpDiv); } } this._inDialog = false; } }, /* Tidy up after a dialog display. */ _tidyDialog: function(inst) { inst.dpDiv.removeClass(this._dialogClass).unbind('.ui-datepicker-calendar'); }, /* Close date picker if clicked elsewhere. */ _checkExternalClick: function(event) { if (!$.datetimepicker._curInst) return; var $target = $(event.target); if ($target[0].id != $.datetimepicker._mainDivId && $target.parents('#' + $.datetimepicker._mainDivId).length == 0 && !$target.hasClass($.datetimepicker.markerClassName) && !$target.hasClass($.datetimepicker._triggerClass) && $.datetimepicker._datepickerShowing && !($.datetimepicker._inDialog && $.blockUI)) $.datetimepicker._hideDatepicker(); }, /* Adjust one of the date sub-fields. */ _adjustDate: function(id, offset, period) { var target = $(id); var inst = this._getInst(target[0]); if (this._isDisabledDatepicker(target[0])) { return; } ///// 24387 inst.selectedHour = inst.currentHour = $("#DP_jQuery_Hour_" + dpuuid).val() inst.selectedMinute = inst.currentMinute = $("#DP_jQuery_Minute_" + dpuuid).val(); inst.selectedSecond = inst.currentSecond = $("#DP_jQuery_Second_" + dpuuid).val(); if(this._get(inst, 'showAsAndorid') == true){ if(this._get(inst, 'showAsAndorid24') == true){ inst.selectedAMPM = inst.currentAMPM = ''; }else{ inst.selectedAMPM = inst.currentAMPM = $("input:radio[name=DP_jQuery_AMPM_" + dpuuid + "]:checked").val(); } }else{ inst.selectedAMPM = inst.currentAMPM = $("#DP_jQuery_AMPM_" + dpuuid).val(); } ///// this._adjustInstDate(inst, offset + (period == 'M' ? this._get(inst, 'showCurrentAtPos') : 0), // undo positioning period); this._updateDatepicker(inst); }, /* Action for current link. */ _gotoToday: function(id) { var target = $(id); var inst = this._getInst(target[0]); if (this._get(inst, 'gotoCurrent') && inst.currentDay) { inst.selectedDay = inst.currentDay; inst.drawMonth = inst.selectedMonth = inst.currentMonth; inst.drawYear = inst.selectedYear = inst.currentYear; inst.selectedHour = inst.currentHour; inst.selectedMinute = inst.currentMinute; inst.selectedSecond = inst.currentSecond; inst.selectedAMPM = inst.currentAMPM; } else { var date = new Date(); inst.selectedDay = date.getDate(); inst.drawMonth = inst.selectedMonth = date.getMonth(); inst.drawYear = inst.selectedYear = date.getFullYear(); if(this._get(inst, 'showAsAndorid24') == true){ inst.currentHour = date.getHours(); inst.currentAMPM = ''; }else{ if (date.getHours() > 12) { inst.selectedHour = date.getHours() - 12; inst.selectedAMPM = "PM"; } else { inst.selectedHour = date.getHours(); inst.selectedAMPM = "AM"; } if (date.getHours() == 12) { inst.selectedAMPM = "PM"; } if (date.getHours() == 00) { inst.selectedHour = 12; } } inst.selectedMinute = date.getMinutes(); if(this._get(inst, 'showSecond') == false){ inst.selectedSecond = 0; }else{ inst.selectedSecond = date.getSeconds(); } inst.currentAMPM = inst.selectedAMPM; inst.currentDay = inst.selectedDay; inst.currentHour = inst.selectedHour; inst.currentMinute = inst.selectedMinute; inst.currentMonth = inst.selectedMonth; inst.currentSecond = inst.selectedSecond; inst.currentYear = inst.selectedYear; //this._selectDay(target, inst.selectedMonth, inst.selectedYear, '' + inst.selectedDay + '', inst.currentHour, inst.currentMinute, inst.currentSecond, inst.currentAMPM); var dateStr = this._formatDate(inst); if (inst.input) inst.input.val(dateStr); } this._notifyChange(inst); this._adjustDate(target); }, /* Action for selecting a new month/year. */ _selectMonthYear: function(id, select, period) { var target = $(id); var inst = this._getInst(target[0]); inst._selectingMonthYear = false; inst['selected' + (period == 'M' ? 'Month' : 'Year')] = inst['draw' + (period == 'M' ? 'Month' : 'Year')] = parseInt(select.options[select.selectedIndex].value, 10); this._notifyChange(inst); this._adjustDate(target); }, /* Restore input focus after not changing month/year. */ _clickMonthYear: function(id) { var target = $(id); var inst = this._getInst(target[0]); if (inst.input && inst._selectingMonthYear && !$.browser.msie) inst.input.focus(); inst._selectingMonthYear = !inst._selectingMonthYear; }, /* Action for selecting a day. */ _selectDay: function(id, month, year, td, hh, mm, am) { var target = $(id); if ($(td).hasClass(this._unselectableClass) || this._isDisabledDatepicker(target[0])) { return; } var inst = this._getInst(target[0]); inst.selectedDay = inst.currentDay = $('a', td).html(); inst.selectedMonth = inst.currentMonth = month; inst.selectedYear = inst.currentYear = year; inst.selectedHour = inst.currentHour = $("#DP_jQuery_Hour_" + dpuuid).val() inst.selectedMinute = inst.currentMinute = $("#DP_jQuery_Minute_" + dpuuid).val(); if(this._get(inst, 'showSecond') == false){ inst.selectedSecond = 0; }else{ inst.selectedSecond = inst.currentSecond = $("#DP_jQuery_Second_" + dpuuid).val(); } if(this._get(inst, 'showAsAndorid') == true){ if(this._get(inst, 'showAsAndorid24') == true){ inst.selectedAMPM = inst.currentAMPM = ''; }else{ inst.selectedAMPM = inst.currentAMPM = $("input:radio[name=DP_jQuery_AMPM_" + dpuuid + "]:checked").val(); } }else{ inst.selectedAMPM = inst.currentAMPM = $("#DP_jQuery_AMPM_" + dpuuid).val(); } try{ if(DEFAULT_DATE_FORMAT == 'dd/mm/yyyy'){ inst.selectedFullDate = inst.selectedDay + '/' + (inst.selectedMonth + 1) + '/' + inst.selectedYear + ' ' + inst.selectedHour + ':' + inst.selectedMinute + ':' + inst.selectedSecond + '.0 ' + inst.selectedAMPM; }else{ inst.selectedFullDate = (inst.selectedMonth + 1) + '/' + inst.selectedDay + '/' + inst.selectedYear + ' ' + inst.selectedHour + ':' + inst.selectedMinute + ':' + inst.selectedSecond + '.0 ' + inst.selectedAMPM; } }catch(e){ inst.selectedFullDate = (inst.selectedMonth + 1) + '/' + inst.selectedDay + '/' + inst.selectedYear + ' ' + inst.selectedHour + ':' + inst.selectedMinute + ':' + inst.selectedSecond + '.0 ' + inst.selectedAMPM; } inst.selectedFullDate_mdy = (inst.selectedMonth + 1) + '/' + inst.selectedDay + '/' + inst.selectedYear + ' ' + inst.selectedHour + ':' + inst.selectedMinute + ':' + inst.selectedSecond + '.0 ' + inst.selectedAMPM; this._selectDate(id, this._formatDate(inst, inst.currentDay, inst.currentMonth, inst.currentYear)); }, _selectTime: function(id, hh, mm, am) { var target = $(id); var inst = this._getInst(target[0]); inst.selectedDay = 1; inst.selectedMonth = 0; inst.selectedYear = 2011; inst.selectedHour = inst.currentHour = $("#DP_jQuery_Hour_" + dpuuid).val() inst.selectedMinute = inst.currentMinute = $("#DP_jQuery_Minute_" + dpuuid).val(); if(this._get(inst, 'showSecond') == false){ inst.selectedSecond = 0; }else{ inst.selectedSecond = inst.currentSecond = $("#DP_jQuery_Second_" + dpuuid).val(); } if(this._get(inst, 'showAsAndorid') == true){ if(this._get(inst, 'showAsAndorid24') == true){ inst.selectedAMPM = inst.currentAMPM = ''; }else{ inst.selectedAMPM = inst.currentAMPM = $("input:radio[name=DP_jQuery_AMPM_" + dpuuid + "]:checked").val(); } }else{ inst.selectedAMPM = inst.currentAMPM = $("#DP_jQuery_AMPM_" + dpuuid).val(); } try{ if(DEFAULT_DATE_FORMAT == 'dd/mm/yyyy'){ inst.selectedFullDate = inst.selectedDay + '/' + (inst.selectedMonth + 1) + '/' + inst.selectedYear + ' ' + inst.selectedHour + ':' + inst.selectedMinute + ':' + inst.selectedSecond + '.0 ' + inst.selectedAMPM; }else{ inst.selectedFullDate = (inst.selectedMonth + 1) + '/' + inst.selectedDay + '/' + inst.selectedYear + ' ' + inst.selectedHour + ':' + inst.selectedMinute + ':' + inst.selectedSecond + '.0 ' + inst.selectedAMPM; } }catch(e){ inst.selectedFullDate = (inst.selectedMonth + 1) + '/' + inst.selectedDay + '/' + inst.selectedYear + ' ' + inst.selectedHour + ':' + inst.selectedMinute + ':' + inst.selectedSecond + '.0 ' + inst.selectedAMPM; } inst.selectedFullDate_mdy = (inst.selectedMonth + 1) + '/' + inst.selectedDay + '/' + inst.selectedYear + ' ' + inst.selectedHour + ':' + inst.selectedMinute + ':' + inst.selectedSecond + '.0 ' + inst.selectedAMPM; this._selectDate(id, this._formatDate(inst, inst.currentDay, inst.currentMonth, inst.currentYear)); }, /* Erase the input field and hide the date picker. */ _clearDate: function(id) { var target = $(id); var inst = this._getInst(target[0]); this._selectDate(target, ''); }, /* Update the input field with the selected date. */ _selectDate: function(id, dateStr) { var target = $(id); var inst = this._getInst(target[0]); dateStr = (dateStr != null ? dateStr : this._formatDate(inst)); // CO-1738 /*if(dateStr == CONS_MILITARY_24){ dateStr = getMilitary24(); }*/ if (inst.input){ inst.input.val(dateStr); if('' == dateStr){ // 26840 inst.selectedFullDate = ''; inst.selectedFullDate_mdy = ''; } } this._updateAlternate(inst); var onSelect = this._get(inst, 'onSelect'); if (onSelect) onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]); // trigger custom callback else if (inst.input) inst.input.trigger('change'); // fire the change event if (inst.inline) this._updateDatepicker(inst); else { this._hideDatepicker(); this._lastInput = inst.input[0]; if (typeof (inst.input[0]) != 'object') inst.input.focus(); // restore focus this._lastInput = null; } }, /* Update any alternate field to synchronise with the main field. */ _updateAlternate: function(inst) { var altField = this._get(inst, 'altField'); if (altField) { // update alternate field too var altFormat = this._get(inst, 'altFormat') || this._get(inst, 'dateFormat'); var date = this._getDate(inst); var dateStr = this.formatDate(altFormat, date, this._getFormatConfig(inst)); $(altField).each(function() { $(this).val(dateStr); }); } }, /* Set as beforeShowDay function to prevent selection of weekends. @param date Date - the date to customise @return [boolean, string] - is this date selectable?, what is its CSS class? */ noWeekends: function(date) { var day = date.getDay(); return [(day > 0 && day < 6), '']; }, /* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition. @param date Date - the date to get the week for @return number - the number of the week within the year that contains this date */ iso8601Week: function(date) { var checkDate = new Date(date.getTime()); // Find Thursday of this week starting on Monday checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7)); var time = checkDate.getTime(); checkDate.setMonth(0); // Compare with Jan 1 checkDate.setDate(1); return Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1; }, /* Parse a string value into a date object. See formatDate below for the possible formats. @param format string - the expected format of the date @param value string - the date in the above format @param settings Object - attributes include: shortYearCutoff number - the cutoff year for determining the century (optional) dayNamesShort string[7] - abbreviated names of the days from Sunday (optional) dayNames string[7] - names of the days from Sunday (optional) monthNamesShort string[12] - abbreviated names of the months (optional) monthNames string[12] - names of the months (optional) @return Date - the extracted date value or null if value is blank */ parseDate: function(format, value, settings) { if (format == null || value == null) throw 'Invalid arguments'; value = (typeof value == 'object' ? value.toString() : value + ''); if (value == '') return null; var dte = new Date(); if(value == 'today'){ }else{ var parts = value.match(/(\d+)/g); for(var i=parts.length; i<7; i++){ parts[i] = 0; } value = value.toUpperCase(); switch(format){ case 'mm/dd/yyyy': return new Date(parts[2], parts[0]-1, parts[1]); case 'dd/mm/yyyy': return new Date(parts[2], parts[1]-1, parts[0]); case 'mm/dd/yyyy HH:MM:ss': case 'mm/dd/yyyy HH:MM': case 'mm/dd/yyyy hh:MM:ss': case 'mm/dd/yyyy hh:MM': case 'mm/dd/yyyy hh:MM:ss TT': case 'mm/dd/yyyy hh:MM TT': if(value.search(CONST_PM) > 0){ var hour = parseInt(parts[3]); if(hour != 12){ parts[3] = hour + 12; } }else if(value.search(CONST_AM) > 0){ var hour = parseInt(parts[3]); if(hour == 12){ parts[3] = 0; } } return new Date(parts[2], parts[0]-1, parts[1], parts[3], parts[4], parts[5], parts[6]); // months are 0-based case 'dd/mm/yyyy HH:MM': case 'dd/mm/yyyy HH:MM:ss': case 'dd/mm/yyyy hh:MM:ss': case 'dd/mm/yyyy hh:MM': case 'dd/mm/yyyy hh:MM:ss TT': case 'dd/mm/yyyy hh:MM TT': if(value.search(CONST_PM) > 0){ var hour = parseInt(parts[3]); if(hour != 12){ parts[3] = hour + 12; } }else if(value.search(CONST_AM) > 0){ var hour = parseInt(parts[3]); if(hour == 12){ parts[3] = 0; } } return new Date(parts[2], parts[1]-1, parts[0], parts[3], parts[4], parts[5], parts[6]); // months are 0-based case 'HH:MM:ss': case 'HH:MM': case 'hh:MM:ss': case 'hh:MM': case 'hh:MM:ss TT': case 'hh:MM TT': var hIndex = 0; if(value.search('/') > 0){ hIndex = 3; } if(value.search(CONST_PM) > 0){ var hour = parseInt(parts[hIndex]); if(hour != 12){ parts[hIndex] = hour + 12; } }else if(value.search(CONST_AM) > 0){ var hour = parseInt(parts[hIndex]); if(hour == 12){ parts[hIndex] = 0; } } var date = new Date(); return new Date(date.getFullYear(), date.getMonth(), date.getDate(), parts[hIndex], parts[hIndex + 1], parts[hIndex + 2], parts[hIndex + 3]); // months are 0-based } // -------------------------------------- modified by NVHung try { if(value.indexOf('/') > 0 && format.indexOf('dd') == 0){ // dd/mm/yyyy var _datePart = value; var _timePart = ''; var spaceIndex = _datePart.indexOf(' '); if(spaceIndex > 0){ _datePart = value.substring(0, spaceIndex); _timePart = value.substring(spaceIndex, value.length); } var _info = _datePart.split('/'); value = _info[1] + '/' + _info[0] + '/' + _info[2] + _timePart; // mm/dd/yyyy } } catch (e) { } // ------------------------------------------------------------ dte = new Date(value); } // dte.setYear(this._DetermineYear(dte.getFullYear())); //dte.setYear(this._DetermineYear(dte.getYear())); if (dte == "NaN") { return null; } else { return dte; } return null; }, /* Format a date object into a string value. @param format see formating @param date Date - the date value to format @Param settings igonred @return string - the date in the above format d Day of the month as digits; no leading zero for single-digit days. */ formatDate: function(format, date, settings) { if (!date) return ''; return date.format(format); }, /* Extract all possible characters from the date format. */ _possibleChars: function(format) { var chars = ''; var literal = false; // Check whether a format character is doubled var lookAhead = function(match) { var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match); if (matches) iFormat++; return matches; }; for (var iFormat = 0; iFormat < format.length; iFormat++) if (literal) if (format.charAt(iFormat) == "'" && !lookAhead("'")) literal = false; else chars += format.charAt(iFormat); else switch (format.charAt(iFormat)) { case 'd': case 'm': case 'y': case '@': chars += '0123456789'; break; case 'D': case 'M': return null; // Accept anything case "'": if (lookAhead("'")) chars += "'"; else literal = true; break; default: chars += format.charAt(iFormat); } return chars; }, /* Get a setting value, defaulting if necessary. */ _get: function(inst, name) { return inst.settings[name] !== undefined ? inst.settings[name] : this._defaults[name]; }, /* Parse existing date and initialise date picker. */ _setDateFromField: function(inst, noDefault) { if (inst.input.val() == inst.lastVal) { return; } var dateFormat = this._get(inst, 'dateFormat'); var showCalendar = this._get(inst, 'showCalendar'); var data_fm = inst.input.attr('data_fm'); var data_org = inst.input.attr('data_org_nfm'); var dates = inst.lastVal = inst.input ? inst.input.val() : null; var dateFormatTmp = dateFormat; if(data_fm == dates){ dates = inst.lastVal = inst.input ? data_org : null; if(dates != null){ /*if(dateFormat == 'dd/mm/yyyy'){ dateFormatTmp = 'mm/dd/yyyy'; }else if(dateFormat == 'dd/mm/yyyy hh:MM:ss TT'){ dateFormatTmp = 'mm/dd/yyyy hh:MM:ss TT'; }else if(dateFormat == 'dd/mm/yyyy hh:MM TT'){ dateFormatTmp = 'mm/dd/yyyy hh:MM:ss TT'; }*/ dateFormatTmp = dateFormatTmp.replace('dd/mm/yyyy', 'mm/dd/yyyy'); } } var date, defaultDate; date = defaultDate = this._getDefaultDate(inst); var settings = this._getFormatConfig(inst); try { if(!showCalendar){ if(dates != '' && dates != 'today'){ if(dates.indexOf('/')>=0){ }else{ dates = '01/01/2011 ' + dates; } } } date = this.parseDate(dateFormatTmp, dates, settings) || defaultDate; } catch (event) { this.log(event); dates = (noDefault ? '' : dates); } // CO-2957: Set default date:time filter value if('' == inst.input.val()){ var dayDuration = inst.input.attr('dayDuration'); if('begin' == dayDuration){ // Set start time the begining of the day date.setHours(0); date.setMinutes(0); date.setSeconds(1); } else if('end' == dayDuration){ // Set end time the end of the day date.setHours(23); date.setMinutes(59); date.setSeconds(59); } } this._calculateMinute4Interval(inst, date); inst.selectedDay = date.getDate(); inst.drawMonth = inst.selectedMonth = date.getMonth(); //inst.drawYear = inst.selectedYear = $.datetimepicker._DetermineYear(date.getYear()); inst.drawYear = inst.selectedYear = date.getFullYear(); inst.currentDay = (dates ? date.getDate() : 0); inst.currentMonth = (dates ? date.getMonth() : 0); if (!dates) dates = date; if(this._get(inst, 'showAsAndorid24') == true){ // CO-1738 if(inst.input.val().indexOf('24') == 0){ inst.currentHour = 24; } else{ inst.currentHour = date.getHours(); } inst.currentAMPM = ''; }else{ if (date.getHours() > 12) { inst.currentHour = date.getHours() - 12; inst.currentAMPM = "PM"; } else { inst.currentHour = date.getHours(); inst.currentAMPM = "AM"; } if (date.getHours() == 12) { inst.currentAMPM = "PM"; } if (date.getHours() == 00) { inst.currentHour = 12; } } inst.currentSecond = date.getSeconds(); if(this._get(inst, 'showSecond') == false){ inst.currentSecond = 0; }else{ inst.currentSecond = date.getSeconds(); } inst.currentYear = (dates ? date.getFullYear() : 0); //inst.currentYear = (dates ? $.datetimepicker._DetermineYear(date.getYear()) : 0); this._adjustInstDate(inst); }, /* Retrieve the default date shown on opening. */ _getDefaultDate: function(inst) { return this._restrictMinMax(inst, this._determineDate(inst, this._get(inst, 'defaultDate'), new Date())); }, /* A date may be specified as an exact value or a relative one. */ _determineDate: function(inst, date, defaultDate) { var offsetNumeric = function(offset) { var date = new Date(); date.setDate(date.getDate() + offset); return date; }; var offsetString = function(offset) { try { return $.datetimepicker.parseDate($.datetimepicker._get(inst, 'dateFormat'), offset, $.datetimepicker._getFormatConfig(inst)); } catch (e) { // Ignore } var date = (offset.toLowerCase().match(/^c/) ? $.datetimepicker._getDate(inst) : null) || new Date(); var year = date.getFullYear(); //var year = $.datetimepicker._DetermineYear(date.getYear()); var month = date.getMonth(); var day = date.getDate(); var pattern = /([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g; var matches = pattern.exec(offset); while (matches) { switch (matches[2] || 'd') { case 'd': case 'D': day += parseInt(matches[1], 10); break; case 'w': case 'W': day += parseInt(matches[1], 10) * 7; break; case 'm': case 'M': month += parseInt(matches[1], 10); day = Math.min(day, $.datetimepicker._getDaysInMonth(year, month)); break; case 'y': case 'Y': year += parseInt(matches[1], 10); day = Math.min(day, $.datetimepicker._getDaysInMonth(year, month)); break; } matches = pattern.exec(offset); } return new Date(year, month, day); }; date = (date == null ? defaultDate : (typeof date == 'string' ? offsetString(date) : (typeof date == 'number' ? (isNaN(date) ? defaultDate : offsetNumeric(date)) : date))); date = (date && date.toString() == 'Invalid Date' ? defaultDate : date); /////////////////////=^..^= // if (date) { // date.setHours(0); // date.setMinutes(0); // date.setSeconds(0); // date.setMilliseconds(0); // } return this._daylightSavingAdjust(date); }, /* Handle switch to/from daylight saving. Hours may be non-zero on daylight saving cut-over: > 12 when midnight changeover, but then cannot generate midnight datetime, so jump to 1AM, otherwise reset. @param date (Date) the date to check @return (Date) the corrected date */ _daylightSavingAdjust: function(date) { if (!date) return null; //////////////////////////=^..^= //date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0); return date; }, /* Set the date(s) directly. */ _setDate: function(inst, date, noChange) { var clear = !(date); var origMonth = inst.selectedMonth; var origYear = inst.selectedYear; date = this._restrictMinMax(inst, this._determineDate(inst, date, new Date())); inst.selectedDay = inst.currentDay = date.getDate(); inst.drawMonth = inst.selectedMonth = inst.currentMonth = date.getMonth(); inst.drawYear = inst.selectedYear = inst.currentYear = date.getFullYear(); //inst.drawYear = inst.selectedYear = inst.currentYear = $.datetimepicker._DetermineYear(date.getYear()); if ((origMonth != inst.selectedMonth || origYear != inst.selectedYear) && !noChange) this._notifyChange(inst); this._adjustInstDate(inst); if (inst.input) { inst.input.val(clear ? '' : this._formatDate(inst)); } }, /* Retrieve the date(s) directly. */ _getDate: function(inst) { var startDate = (!inst.currentYear || (inst.input && inst.input.val() == '') ? null : this._daylightSavingAdjust(new Date( inst.currentYear, inst.currentMonth, inst.currentDay))); return startDate; }, /* Generate the HTML for the current state of the date picker. */ _generateHTML: function(inst) { var show24HourClock = this._get(inst, 'show24HourClock'); var showCalendar = this._get(inst, 'showCalendar'); var showTime = this._get(inst, 'showTime'); var showSecond = this._get(inst, 'showSecond'); var showAsAndorid = this._get(inst, 'showAsAndorid'); var showAsAndorid24 = this._get(inst, 'showAsAndorid24'); if (show24HourClock) this.dpDiv.addClass('ui-datetimepicker-with-clock'); var today = new Date(); today = this._daylightSavingAdjust( new Date(today.getFullYear(), today.getMonth(), today.getDate())); // clear time var isRTL = this._get(inst, 'isRTL'); var showButtonPanel = this._get(inst, 'showButtonPanel'); var hideIfNoPrevNext = this._get(inst, 'hideIfNoPrevNext'); var navigationAsDateFormat = this._get(inst, 'navigationAsDateFormat'); var numMonths = this._getNumberOfMonths(inst); var showCurrentAtPos = this._get(inst, 'showCurrentAtPos'); var stepMonths = this._get(inst, 'stepMonths'); var isMultiMonth = (numMonths[0] != 1 || numMonths[1] != 1); var currentDate = this._daylightSavingAdjust((!inst.currentDay ? new Date(9999, 9, 9) : new Date(inst.currentYear, inst.currentMonth, inst.currentDay))); var minDate = this._getMinMaxDate(inst, 'min'); var maxDate = this._getMinMaxDate(inst, 'max'); var drawMonth = inst.drawMonth - showCurrentAtPos; var drawYear = inst.drawYear; if (drawMonth < 0) { drawMonth += 12; drawYear--; } if (maxDate) { var maxDraw = this._daylightSavingAdjust(new Date(maxDate.getFullYear(), maxDate.getMonth() - (numMonths[0] * numMonths[1]) + 1, maxDate.getDate())); maxDraw = (minDate && maxDraw < minDate ? minDate : maxDraw); //while (this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1)) > maxDraw) { //while (this._daylightSavingAdjust(new Date($.datetimepicker._DetermineYear(drawYear), drawMonth, 1)) > maxDraw) { while (this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1)) > maxDraw) { drawMonth--; if (drawMonth < 0) { drawMonth = 11; drawYear--; } } } if(showAsAndorid){ this.dpDiv.addClass('mobipick-view'); var mobipick_widget = { // // View // options: { date : null, dateFormat : "yyyy-MM-dd", dateFormatMonth : "yyyy-MM", dateFormatYear : "yyyy", inputOrder : "d m y", locale : "en", intlStdDate : true, buttonTheme : "b", popup : { dismissible: false, history: false, overlayTheme: "a", positionTo: "window", theme: "a", transition: "none" } }, _markup_header: "
" + "
" + "
    ", _markup_d: "
  • ", _markup_m: "
  • ", _markup_y: "
  • ", _markup_space: "
 
    ", _markup_hh: "
  • ", _markup_dot: "
  • :
  • ", _markup_mm: "
  • ", _markup_dot_ss: "
  • :
  • ", _markup_ss: "
  • ", _markup_ampm: "", //_markup_ampm: "
  • ", _markup_trailer: "
Date
" + "
" + "
", _applyTheme: function(p) { var buttons = { "bottom": "ul.mobipick-groups ul > li:first-child > a, ul.mobipick-time-groups ul > li:first-child > a", "top": "ul.mobipick-groups ul > li:last-child > a, ul.mobipick-time-groups ul > li:last-child > a" }; for( var key in buttons ) { p.find( buttons[ key ] ).addClass( "ui-corner-all" ) .css( "border-" + key + "-left-radius", "0") .css( "border-" + key + "-right-radius", "0"); } p.addClass( "ui-body-" + this.options.popup.theme + " ui-corner-all" ); p.find( "a" )/*.attr( "href", "#" )*/ .addClass( "ui-body-" + this.options.buttonTheme ); p.find( "ul.mobipick-buttons a" ).addClass( "ui-corner-all" ); p.find( "input" ) //.attr( "readonly", "readonly" ) .addClass( "ui-shadow-inset" ); //p.find('.mobipick-month').attr( "readonly", "readonly" ); return p; }, _createView: function() { var html = ''; html = mobipick_widget._markup_header + mobipick_widget._markup_m + mobipick_widget._markup_d + mobipick_widget._markup_y + mobipick_widget._markup_space + mobipick_widget._markup_hh + mobipick_widget._markup_dot + mobipick_widget._markup_mm + mobipick_widget._markup_dot_ss + mobipick_widget._markup_ss + mobipick_widget._markup_ampm; /*if(showCalendar){ html += mobipick_widget._markup_m + mobipick_widget._markup_d + mobipick_widget._markup_y; } if(showTime){ if(showCalendar){ html += mobipick_widget._markup_space } html += mobipick_widget._markup_hh + mobipick_widget._markup_mm + mobipick_widget._markup_ss + mobipick_widget._markup_ampm; }*/ html += mobipick_widget._markup_trailer; var $html = this._applyTheme($(html)); if(showCalendar){ $html.find('.mobipick-groups').removeClass('hideSession'); } if(showTime){ if(showCalendar){ $html.find('.mobipick-space-date-time').removeClass('hideSession'); } $html.find('.mobipick-time-groups').removeClass('hideSession'); if(!showAsAndorid24){ $html.find('.mobipick_time_ampm').removeClass('hideSession'); $html.find('.mobipick-date-formatted').removeClass('mobipick-screen-center'); } } if(!showSecond){ $html.find('.mobipick_second_group').addClass('hideSessionImp'); if(!showCalendar){ $html.find('.mobipick_hour_group').addClass('timeHHMM'); $html.find('.mobipick_minute_group').addClass('timeHHMM'); } } return $html[0].outerHTML; }, } return mobipick_widget._createView(); } inst.drawMonth = drawMonth; inst.drawYear = drawYear; var prevText = this._get(inst, 'prevText'); prevText = (!navigationAsDateFormat ? prevText : this.formatDate(prevText, this._daylightSavingAdjust(new Date(drawYear, drawMonth - stepMonths, 1)), this._getFormatConfig(inst))); var prev = (this._canAdjustMonth(inst, -1, drawYear, drawMonth) ? '' + prevText + '' : (hideIfNoPrevNext ? '' : '' + prevText + '')); var nextText = this._get(inst, 'nextText'); nextText = (!navigationAsDateFormat ? nextText : this.formatDate(nextText, this._daylightSavingAdjust(new Date(drawYear, drawMonth + stepMonths, 1)), this._getFormatConfig(inst))); var next = (this._canAdjustMonth(inst, +1, drawYear, drawMonth) ? '' + nextText + '' : (hideIfNoPrevNext ? '' : '' + nextText + '')); var currentText = this._get(inst, 'currentText'); var gotoDate = (this._get(inst, 'gotoCurrent') && inst.currentDay ? currentDate : today); currentText = (!navigationAsDateFormat ? currentText : this.formatDate(currentText, gotoDate, this._getFormatConfig(inst))); /*var controls = (!inst.inline ? '' : ''); var buttonPanel = (showButtonPanel) ? '
' + (isRTL ? controls : '') + (this._isInRange(inst, gotoDate) ? '' : '') + (isRTL ? '' : controls) + '
' : '';*/ var controls = (!inst.inline ? '' + '' + '
' + this._get(inst, 'infoMsg') + '
' : ''); var buttonPanel = (!showCalendar) ? '' : (showButtonPanel) ? '
' + (isRTL ? controls : '') + (this._isInRange(inst, gotoDate) ? '' : '') + (isRTL ? '' : controls) + '
' : ''; var setText = this._get(inst, 'setText'); /*var buttonTimePanel = (!showCalendar) ? '
' : '';*/ var buttonTimePanel = (!showCalendar) ? '
' : ''; var firstDay = parseInt(this._get(inst, 'firstDay'), 10); firstDay = (isNaN(firstDay) ? 0 : firstDay); var showWeek = this._get(inst, 'showWeek'); var dayNames = this._get(inst, 'dayNames'); var dayNamesShort = this._get(inst, 'dayNamesShort'); var dayNamesMin = this._get(inst, 'dayNamesMin'); var monthNames = this._get(inst, 'monthNames'); var monthNamesShort = this._get(inst, 'monthNamesShort'); var beforeShowDay = this._get(inst, 'beforeShowDay'); var showOtherMonths = this._get(inst, 'showOtherMonths'); var selectOtherMonths = this._get(inst, 'selectOtherMonths'); var calculateWeek = this._get(inst, 'calculateWeek') || this.iso8601Week; var defaultDate = this._getDefaultDate(inst); var html = ''; for (var row = 0; row < numMonths[0]; row++) { var group = ''; for (var col = 0; col < numMonths[1]; col++) { var selectedDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, inst.selectedDay)); var cornerClass = ' ui-corner-all'; var calender = ''; if (isMultiMonth) { calender += '
'; } if (show24HourClock) calender += '
'; calender += '
' + (/all|left/.test(cornerClass) && row == 0 ? (isRTL ? next : prev) : '') + (/all|right/.test(cornerClass) && row == 0 ? (isRTL ? prev : next) : '') + this._generateMonthYearHeader(inst, drawMonth, drawYear, minDate, maxDate, row > 0 || col > 0, monthNames, monthNamesShort) + // draw month headers '
' + ''; var thead = (showWeek ? '' : ''); for (var dow = 0; dow < 7; dow++) { // days of the week var day = (dow + firstDay) % 7; thead += '= 5 ? ' class="ui-datepicker-week-end"' : '') + '>' + '' + dayNamesMin[day] + ''; } calender += thead + ''; var daysInMonth = this._getDaysInMonth(drawYear, drawMonth); if (drawYear == inst.selectedYear && drawMonth == inst.selectedMonth) inst.selectedDay = Math.min(inst.selectedDay, daysInMonth); var leadDays = (this._getFirstDayOfMonth(drawYear, drawMonth) - firstDay + 7) % 7; var numRows = (isMultiMonth ? 6 : Math.ceil((leadDays + daysInMonth) / 7)); // calculate the number of rows to generate var printDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1 - leadDays)); for (var dRow = 0; dRow < numRows; dRow++) { // create date picker rows calender += ''; var tbody = (!showWeek ? '' : ''); for (var dow = 0; dow < 7; dow++) { // create date picker days var daySettings = (beforeShowDay ? beforeShowDay.apply((inst.input ? inst.input[0] : null), [printDate]) : [true, '']); var otherMonth = (printDate.getMonth() != drawMonth); var unselectable = (otherMonth && !selectOtherMonths) || !daySettings[0] || (minDate && printDate < minDate) || (maxDate && printDate > maxDate); tbody += ''; // display selectable date printDate.setDate(printDate.getDate() + 1); printDate = this._daylightSavingAdjust(printDate); } calender += tbody + ''; } drawMonth++; if (drawMonth > 11) { drawMonth = 0; drawYear++; } calender += '
' + this._get(inst, 'weekHeader') + '
' + this._get(inst, 'calculateWeek')(printDate) + '' + // actions (otherMonth && !showOtherMonths ? ' ' : // display for other months (unselectable ? '' + printDate.getDate() + '' : '' + printDate.getDate() + '')) + '
' + (isMultiMonth ? '
' + ((numMonths[0] > 0 && col == numMonths[1] - 1) ? '
' : '') : ''); group += calender; } html += group; // Hour Drop Down html += '
Time '; // Minute Drop Down var MinuteHTML; MinuteHTML = ''; MinuteHTML += ' : '; html += MinuteHTML; // Second Drop Down var SecondHTML; SecondHTML = ''; if(showSecond){ SecondHTML += ' : '; } for (i = 0; i < 60; i++) { SecondHTML += ''; } monthHtml += ''; } if (!showMonthAfterYear) html += monthHtml + (secondary || !(changeMonth && changeYear) ? ' ' : ''); // year selection if (secondary || !changeYear){ var displayYear = drawYear; if((''+displayYear) == 'NaN'){ displayYear = ''; } html += '' + displayYear + ''; } else { // determine range of years to display var years = this._get(inst, 'yearRange').split(':'); var thisYear = new Date().getFullYear(); var determineYear = function(value) { var year = (value.match(/c[+-].*/) ? drawYear + parseInt(value.substring(1), 10) : (value.match(/[+-].*/) ? thisYear + parseInt(value, 10) : parseInt(value, 10))); return (isNaN(year) ? thisYear : year); }; var year = determineYear(years[0]); var endYear = Math.max(year, determineYear(years[1] || '')); year = (minDate ? Math.max(year, minDate.getFullYear()) : year); endYear = (maxDate ? Math.min(endYear, maxDate.getFullYear()) : endYear); html += ''; } html += this._get(inst, 'yearSuffix'); if (showMonthAfterYear) html += (secondary || !(changeMonth && changeYear) ? ' ' : '') + monthHtml; html += '
'; // Close datepicker_header return html; }, /* Adjust one of the date sub-fields. */ _adjustInstDate: function(inst, offset, period) { var year = inst.drawYear + (period == 'Y' ? offset : 0); var month = inst.drawMonth + (period == 'M' ? offset : 0); var day = Math.min(inst.selectedDay, this._getDaysInMonth(year, month)) + (period == 'D' ? offset : 0); var date = this._restrictMinMax(inst, this._daylightSavingAdjust(new Date(year, month, day))); inst.selectedDay = date.getDate(); inst.drawMonth = inst.selectedMonth = date.getMonth(); inst.drawYear = inst.selectedYear = date.getFullYear(); if (period == 'M' || period == 'Y') this._notifyChange(inst); }, /* Ensure a date is within any min/max bounds. */ _restrictMinMax: function(inst, date) { var minDate = this._getMinMaxDate(inst, 'min'); var maxDate = this._getMinMaxDate(inst, 'max'); date = (minDate && date < minDate ? minDate : date); date = (maxDate && date > maxDate ? maxDate : date); return date; }, /* Notify change of month/year. */ _notifyChange: function(inst) { var onChange = this._get(inst, 'onChangeMonthYear'); if (onChange) onChange.apply((inst.input ? inst.input[0] : null), [inst.selectedYear, inst.selectedMonth + 1, inst]); }, /* Determine the number of months to show. */ _getNumberOfMonths: function(inst) { var numMonths = this._get(inst, 'numberOfMonths'); return (numMonths == null ? [1, 1] : (typeof numMonths == 'number' ? [1, numMonths] : numMonths)); }, /* Determine the current maximum date - ensure no time components are set. */ _getMinMaxDate: function(inst, minMax) { return this._determineDate(inst, this._get(inst, minMax + 'Date'), null); }, /* Find the number of days in a given month. */ _getDaysInMonth: function(year, month) { return 32 - new Date(year, month, 32).getDate(); }, /* Find the day of the week of the first of a month. */ _getFirstDayOfMonth: function(year, month) { return new Date(year, month, 1).getDay(); }, /* Determines if we should allow a "next/prev" month display change. */ _canAdjustMonth: function(inst, offset, curYear, curMonth) { var numMonths = this._getNumberOfMonths(inst); var date = this._daylightSavingAdjust(new Date(curYear, curMonth + (offset < 0 ? offset : numMonths[0] * numMonths[1]), 1)); if (offset < 0) date.setDate(this._getDaysInMonth(date.getFullYear(), date.getMonth())); return this._isInRange(inst, date); }, /* Is the given date in the accepted range? */ _isInRange: function(inst, date) { var minDate = this._getMinMaxDate(inst, 'min'); var maxDate = this._getMinMaxDate(inst, 'max'); return ((!minDate || date.getTime() >= minDate.getTime()) && (!maxDate || date.getTime() <= maxDate.getTime())); }, /* Provide the configuration settings for formatting/parsing. */ _getFormatConfig: function(inst) { var shortYearCutoff = this._get(inst, 'shortYearCutoff'); shortYearCutoff = (typeof shortYearCutoff != 'string' ? shortYearCutoff : new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10)); return { shortYearCutoff: shortYearCutoff, dayNamesShort: this._get(inst, 'dayNamesShort'), dayNames: this._get(inst, 'dayNames'), monthNamesShort: this._get(inst, 'monthNamesShort'), monthNames: this._get(inst, 'monthNames') }; }, /* find position on the screen */ _findPos: function findPos(obj) { /*var curleft = curtop = 0; if (obj.offsetParent) { do { curleft += obj.offsetLeft; curtop += obj.offsetTop; } while (obj = obj.offsetParent); //return [curleft, curtop]; if(curtop > 500){ return [curleft, 500]; }else{ return [curleft, curtop]; } }*/ var inst = this._getInst(obj); var isRTL = this._get(inst, 'isRTL'); while (obj && (obj.type == 'hidden' || obj.nodeType != 1)) { obj = obj[isRTL ? 'previousSibling' : 'nextSibling']; } var position = $(obj).offset(); return [position.left, position.top]; }, _Right: function(str, n) { if (n <= 0) return ""; else if (n > String(str).length) return str; else { var iLen = String(str).length; return String(str).substring(iLen, iLen - n); } }, /* Format the given date for display. */ _formatDate: function(inst, day, month, year) { if (!day) { inst.currentDay = inst.selectedDay; inst.currentMonth = inst.selectedMonth; inst.currentYear = inst.selectedYear; inst.currentHour = inst.selectedHour; inst.currentAMPM = inst.selectedAMPM; inst.currentMinute = inst.selectedMinute; inst.currentSecond = inst.selectedSecond; } var Hour = inst.currentHour; if(Hour == 24){ // CO-1738 return getMilitary24(); // CONS_MILITARY_24; } if(inst.currentAMPM != ''){ if (Hour > 12) Hour = Hour - 12; } //inst.currentMonth += 1; var MinuteString = inst.currentMinute; if (MinuteString.length == 1) MinuteString = "0" + MinuteString; var SecondString = inst.currentSecond; if (SecondString.length == 1) SecondString = "0" + SecondString; var DateString = '' + (inst.currentMonth + 1) + '/' + inst.selectedDay + '/' + inst.selectedYear + ' ' + Hour + ':' + MinuteString + ':' + SecondString + ' ' + inst.currentAMPM; var date = new Date(DateString); if(date.getDate() != inst.selectedDay){ var daysInMonth = $.datetimepicker._getDaysInMonth(inst.selectedYear, inst.selectedMonth); date.setDate(daysInMonth); inst.currentDay = daysInMonth; inst.selectedDay = daysInMonth; $('#mobipick-day-' + dpuuid).val(toDigitFormat(daysInMonth)); } return this.formatDate(this._get(inst, 'dateFormat'), date, this._getFormatConfig(inst)); }, _prevDay: function(id, objId) { var target = $(id); var inst = this._getInst(target[0]); var daysInMonth = $.datetimepicker._getDaysInMonth(inst.selectedYear, inst.selectedMonth); if(inst.selectedDay > 1){ inst.selectedDay --; }else{ inst.selectedDay = daysInMonth; } $(objId).val(toDigitFormat(inst.selectedDay)); this._updateDisplayFormated(id); }, _nextDay: function(id, objId) { var target = $(id); var inst = this._getInst(target[0]); var daysInMonth = $.datetimepicker._getDaysInMonth(inst.selectedYear, inst.selectedMonth); if(inst.selectedDay < daysInMonth){ inst.selectedDay ++; }else{ inst.selectedDay = 1; } $(objId).val(toDigitFormat(inst.selectedDay)); this._updateDisplayFormated(id); }, _prevMonth: function(id, objId) { var target = $(id); var inst = this._getInst(target[0]); if(inst.selectedMonth > 0){ inst.selectedMonth --; }else{ inst.selectedMonth = 11; } var monthNamesShort = this._get(inst, 'monthNamesShort'); $(objId).val(monthNamesShort[inst.selectedMonth]); inst.currentMonth = inst.selectedMonth; this._updateDisplayFormated(id); }, _nextMonth: function(id, objId) { var target = $(id); var inst = this._getInst(target[0]); if(inst.selectedMonth < 11){ inst.selectedMonth ++; }else{ inst.selectedMonth = 0; } var monthNamesShort = this._get(inst, 'monthNamesShort'); $(objId).val(monthNamesShort[inst.selectedMonth]); inst.currentMonth = inst.selectedMonth; this._updateDisplayFormated(id); }, _prevYear: function(id, objId) { var target = $(id); var inst = this._getInst(target[0]); inst.selectedYear --; $(objId).val(inst.selectedYear); this._updateDisplayFormated(id); }, _nextYear: function(id, objId) { var target = $(id); var inst = this._getInst(target[0]); inst.selectedYear ++; $(objId).val(inst.selectedYear); this._updateDisplayFormated(id); }, _prevHour: function(id, objId, amObjId, pmObjId) { var target = $(id); var inst = this._getInst(target[0]); var maxHour = 12; var minHour = 1; if(this._get(inst, 'showAsAndorid24') == true){ // CO-1738 if(inst.settings.dateFormat.indexOf('yy') > 0 // date format || !isMilitary24Version()){ maxHour = 23; } else{ maxHour = 24; } minHour = 0; } if(inst.selectedHour > minHour){ inst.selectedHour --; }else{ inst.selectedHour = maxHour; } $(objId).val(toDigitFormat(inst.selectedHour)); if(inst.selectedHour == 24){ // CO-1738 inst.selectedMinute = 0; inst.selectedSecond = 0; $(objId.replace('Hour','Minute')).attr('disabled',true).val('00'); $(objId.replace('Hour','Second')).attr('disabled',true).val('00'); }else{ $(objId.replace('Hour','Minute')).attr('disabled',false); $(objId.replace('Hour','Second')).attr('disabled',false); } if(maxHour == 12 && inst.selectedHour == 11){ if(inst.selectedAMPM == CONST_AM){ inst.selectedAMPM = CONST_PM; $(pmObjId).prop('checked', true); }else{ inst.selectedAMPM = CONST_AM; $(amObjId).prop('checked', true); } } this._updateDisplayFormated(id); }, _nextHour: function(id, objId, amObjId, pmObjId) { var target = $(id); var inst = this._getInst(target[0]); var maxHour = 12; var minHour = 1; if(this._get(inst, 'showAsAndorid24') == true){ // CO-1738 if(inst.settings.dateFormat.indexOf('yy') > 0 // date format || !isMilitary24Version()){ maxHour = 23; } else{ maxHour = 24; } minHour = 0; } if(inst.selectedHour < maxHour){ inst.selectedHour ++; }else{ inst.selectedHour = minHour; } $(objId).val(toDigitFormat(inst.selectedHour)); if(inst.selectedHour == 24){ // CO-1738 inst.selectedMinute = 0; inst.selectedSecond = 0; $(objId.replace('Hour','Minute')).attr('disabled',true).val('00'); $(objId.replace('Hour','Second')).attr('disabled',true).val('00'); } else{ $(objId.replace('Hour','Minute')).attr('disabled',false); $(objId.replace('Hour','Second')).attr('disabled',false); } if(maxHour == 12 && inst.selectedHour == 12){ if(inst.selectedAMPM == CONST_AM){ inst.selectedAMPM = CONST_PM; $(pmObjId).prop('checked', true); }else{ inst.selectedAMPM = CONST_AM; $(amObjId).prop('checked', true); } } this._updateDisplayFormated(id); }, _prevMinute: function(id, objId) { var target = $(id); var inst = this._getInst(target[0]); // CO-1738: Validate hour 24 if(24 == parseInt(inst.selectedHour)){ return; } //var minuteInterval = parseInt(this._get(inst, 'minuteInterval'), 10); //if(!minuteInterval || minuteInterval<1 || minuteInterval>60){ // minuteInterval = 1; //} var limitUserToIntervalValue = this._get(inst, 'limitUserToIntervalValue'); var minuteInterval; if(limitUserToIntervalValue == true){ minuteInterval = parseInt(this._get(inst, 'minuteInterval'), 10); if(!minuteInterval || minuteInterval<1 || minuteInterval>60){ minuteInterval = 1; } }else{ minuteInterval = 1; } inst.selectedMinute -= minuteInterval; if(inst.selectedMinute < 0){ inst.selectedMinute = 60 - minuteInterval; } $(objId).val(toDigitFormat(inst.selectedMinute)); this._updateDisplayFormated(id); }, _nextMinute: function(id, objId) { var target = $(id); var inst = this._getInst(target[0]); // CO-1738: Validate hour 24 if(24 == parseInt(inst.selectedHour)){ return; } if(inst.selectedMinute == '00'){ inst.selectedMinute = 0; } //var minuteInterval = parseInt(this._get(inst, 'minuteInterval'), 10); //if(!minuteInterval || minuteInterval<1 || minuteInterval>60){ // minuteInterval = 1; //} var limitUserToIntervalValue = this._get(inst, 'limitUserToIntervalValue'); var minuteInterval; if(limitUserToIntervalValue == true){ minuteInterval = parseInt(this._get(inst, 'minuteInterval'), 10); if(!minuteInterval || minuteInterval<1 || minuteInterval>60){ minuteInterval = 1; } }else{ minuteInterval = 1; } inst.selectedMinute += minuteInterval; if(inst.selectedMinute > 59){ inst.selectedMinute = 0; } $(objId).val(toDigitFormat(inst.selectedMinute)); this._updateDisplayFormated(id); }, _prevSecond: function(id, objId) { var target = $(id); var inst = this._getInst(target[0]); // CO-1738: Validate hour 24 if(24 == parseInt(inst.selectedHour)){ return; } if(inst.selectedSecond > 0){ inst.selectedSecond --; }else{ inst.selectedSecond = 59; } $(objId).val(toDigitFormat(inst.selectedSecond)); this._updateDisplayFormated(id); }, _nextSecond: function(id, objId) { var target = $(id); var inst = this._getInst(target[0]); // CO-1738: Validate hour 24 if(24 == parseInt(inst.selectedHour)){ return; } if(inst.selectedSecond < 59){ inst.selectedSecond ++; }else{ inst.selectedSecond = 0; } $(objId).val(toDigitFormat(inst.selectedSecond)); this._updateDisplayFormated(id); }, _ampm: function(id, objId, ammp) { var target = $(id); var inst = this._getInst(target[0]); /*if(inst.selectedAMPM == "PM"){ inst.selectedAMPM = "AM"; }else{ inst.selectedAMPM = "PM" } $(objId).val(inst.selectedAMPM);*/ inst.selectedAMPM = ammp; $(objId).val(inst.selectedAMPM); this._updateDisplayFormated(id); }, _ok: function(id) { var target = $(id); var inst = this._getInst(target[0]); var showCalendar = this._get(inst, 'showCalendar'); var showTime = this._get(inst, 'showTime'); inst.selectedHour = inst.currentHour = parseInt($("#DP_jQuery_Hour_" + dpuuid).val(), 10); inst.selectedMinute = inst.currentMinute = parseInt($("#DP_jQuery_Minute_" + dpuuid).val(), 10); if(this._get(inst, 'showAsAndorid') == true){ if(this._get(inst, 'showAsAndorid24') == true){ inst.selectedAMPM = inst.currentAMPM = ''; }else{ inst.selectedAMPM = inst.currentAMPM = $("input:radio[name=DP_jQuery_AMPM_" + dpuuid + "]:checked").val(); } }else{ inst.selectedAMPM = inst.currentAMPM = $("#DP_jQuery_AMPM_" + dpuuid).val(); } var minuteInterval = parseInt(this._get(inst, 'minuteInterval'), 10); if(!minuteInterval || minuteInterval<1 || minuteInterval>60){ minuteInterval = 1; } if(minuteInterval != 1){ var minuteIntervalRounding = this._get(inst, 'minuteIntervalRounding'); if(minuteIntervalRounding == 'down'){ var miDown = inst.currentMinute % minuteInterval; inst.currentMinute -= miDown }else if(minuteIntervalRounding == 'updown'){ var miUpDown = inst.currentMinute % minuteInterval; if(miUpDown != 0){ if(miUpDown < (minuteInterval/2)){ inst.currentMinute -= miUpDown; }else{ inst.currentMinute += minuteInterval - miUpDown; } } }else{ var miUp = inst.currentMinute % minuteInterval; if(miUp > 0){ miUp = minuteInterval - miUp; } inst.currentMinute += miUp; } $("#DP_jQuery_Minute_" + dpuuid).val(inst.currentMinute); } if(inst.currentMinute > 59){ inst.currentMinute = 0; inst.currentHour += 1; if(inst.currentAMPM == ''){ if(inst.currentHour>24){ inst.currentHour = 1; } }else if(inst.currentAMPM == CONST_AM){ if(inst.currentHour == 12){ inst.currentAMPM = CONST_PM; $("#DP_jQuery_PM_" + dpuuid).attr('checked', true); $("#DP_jQuery_AMPM_" + dpuuid).val(inst.currentAMPM); }else if(inst.currentHour>12){ inst.currentHour = 1; } }else{ if(inst.currentHour == 12){ inst.currentAMPM = CONST_AM; $("#DP_jQuery_AM_" + dpuuid).attr('checked', true); $("#DP_jQuery_AMPM_" + dpuuid).val(inst.currentAMPM); }else if(inst.currentHour>12){ inst.currentHour = 1; } } $("#DP_jQuery_Minute_" + dpuuid).val(inst.currentMinute); $("#DP_jQuery_Hour_" + dpuuid).val(inst.currentHour); } if(showCalendar && showTime){ var td = '"' + inst.selectedDay + '"'; this._selectDay(target, inst.selectedMonth, inst.selectedYear, td, inst.currentHour, inst.currentMinute, inst.currentSecond, inst.currentAMPM); }else if(showCalendar){ //this._selectDate(id, this._formatDate(inst, // inst.currentDay, inst.currentMonth, inst.currentYear)); var td = '"' + inst.selectedDay + '"'; this._selectDay(target, inst.selectedMonth, inst.selectedYear, td, inst.currentHour, inst.currentMinute, inst.currentSecond, inst.currentAMPM); }else if(showTime){ this._selectTime(id, inst.currentHour, inst.currentMinute, inst.currentAMPM); } }, _now: function(id) { var target = $(id); var inst = this._getInst(target[0]); var date = new Date(); this._calculateMinute4Interval(inst, date); /*inst.currentMinute = date.getMinutes(); var minuteInterval = parseInt(this._get(inst, 'minuteInterval'), 10); if(!minuteInterval || minuteInterval<1 || minuteInterval>60){ minuteInterval = 1; } if(minuteInterval != 1){ var miUp = inst.currentMinute % minuteInterval; if(miUp > 0){ miUp = minuteInterval - miUp; } inst.currentMinute += miUp; } if(inst.currentMinute > 59){ date.setMinutes(inst.currentMinute); inst.currentMinute = 0; }*/ inst.selectedDay = date.getDate(); inst.selectedMonth = date.getMonth(); inst.selectedYear = date.getFullYear(); if(this._get(inst, 'showAsAndorid24') == true){ inst.currentHour = date.getHours(); inst.currentAMPM = ''; }else{ if (date.getHours() > 12) { inst.currentHour = date.getHours() - 12; inst.currentAMPM = "PM"; } else { inst.currentHour = date.getHours(); inst.currentAMPM = "AM"; } if (date.getHours() == 12) { inst.currentAMPM = "PM"; } if (date.getHours() == 00) { inst.currentHour = 12; } } inst.currentSecond = date.getSeconds(); inst.selectedHour = inst.currentHour; inst.selectedAMPM = inst.currentAMPM; inst.selectedMinute = inst.currentMinute; inst.selectedSecond = inst.currentSecond; inst.currentMonth = inst.selectedMonth; var monthNamesShort = this._get(inst, 'monthNamesShort'); $("#DP_jQuery_Hour_" + dpuuid).val(toDigitFormat(inst.currentHour)); $("#DP_jQuery_Minute_" + dpuuid).val(toDigitFormat(inst.currentMinute)); $("#DP_jQuery_Second_" + dpuuid).val(toDigitFormat(inst.currentSecond)); $('#mobipick-month-' + dpuuid).val(monthNamesShort[inst.selectedMonth]); $('#mobipick-day-' + dpuuid).val(toDigitFormat(inst.selectedDay)); $('#mobipick-year-' + dpuuid).val(inst.selectedYear); if(this._get(inst, 'showAsAndorid') == true){ if(inst.currentAMPM == CONST_AM){ $("#DP_jQuery_AM_" + dpuuid).attr('checked', true); }else{ $("#DP_jQuery_PM_" + dpuuid).attr('checked', true); } }else{ $("#DP_jQuery_AMPM_" + dpuuid).val(inst.currentAMPM); } this._updateDisplayFormated(id); }, _updateDisplayFormated: function(id) { var target = $(id); var inst = this._getInst(target[0]); $('#mobipick_formatted_' + dpuuid).empty().text(this._formatDate(inst)); //inst.selectedDay, inst.selectedMonth, inst.selectedYear)); } }); /* jQuery extend now ignores nulls! */ function extendRemove(target, props) { $.extend(target, props); for (var name in props) if (props[name] == null || props[name] == undefined) target[name] = props[name]; return target; }; /* Determine whether an object is an array. */ function isArray(a) { return (a && (($.browser.safari && typeof a == 'object' && a.length) || (a.constructor && a.constructor.toString().match(/\Array\(\)/)))); }; /* Invoke the datepicker functionality. @param options string - a command, optionally followed by additional parameters or Object - settings for attaching new datepicker functionality @return jQuery object */ $.fn.datetimepicker = function(options) { /* Initialise the date picker. */ if (!$.datetimepicker.initialized) { $(document).mousedown($.datetimepicker._checkExternalClick). find('body').append($.datetimepicker.dpDiv); $.datetimepicker.initialized = true; } var otherArgs = Array.prototype.slice.call(arguments, 1); if (typeof options == 'string' && (options == 'isDisabled' || options == 'getDate' || options == 'widget')) return $.datetimepicker['_' + options + 'Datepicker']. apply($.datetimepicker, [this[0]].concat(otherArgs)); if (options == 'option' && arguments.length == 2 && typeof arguments[1] == 'string') return $.datetimepicker['_' + options + 'Datepicker']. apply($.datetimepicker, [this[0]].concat(otherArgs)); return this.each(function() { typeof options == 'string' ? $.datetimepicker['_' + options + 'Datepicker']. apply($.datetimepicker, [this].concat(otherArgs)) : $.datetimepicker._attachDatepicker(this, options); }); }; $.datetimepicker = new Datetimepicker(); // singleton instance $.datetimepicker.initialized = false; $.datetimepicker.uuid = new Date().getTime(); $.datetimepicker.version = "1.8rc3"; // Workaround for #4055 // Add another global to avoid noConflict issues with inline event handlers window['DP_jQuery_' + dpuuid] = $; })(jQuery); var toDigitFormat = function(value) { value = '' + value; if(value.length == 0){ return '00'; }else if(value.length == 1){ return '0' + value; } return value; } /* * Date Format 1.2.3 */ var RegexDateFormat = function() { var token = /d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\1?|[LloSZ]|"[^"]*"|'[^']*'/g, timezone = /\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g, timezoneClip = /[^-+\dA-Z]/g, pad = function(val, len) { val = String(val); len = len || 2; while (val.length < len) val = "0" + val; return val; }; // Regexes and supporting functions are cached through closure return function(date, mask, utc) { var dF = RegexDateFormat; // You can't provide utc if you skip other args (use the "UTC:" mask prefix) if (arguments.length == 1 && Object.prototype.toString.call(date) == "[object String]" && !/\d/.test(date)) { mask = date; date = undefined; } // Passing date through Date applies Date.parse, if necessary date = date ? new Date(date) : new Date; if (isNaN(date)) throw SyntaxError("invalid date"); mask = String(dF.masks[mask] || mask || dF.masks["default"]); // Allow setting the utc argument via the mask if (mask.slice(0, 4) == "UTC:") { mask = mask.slice(4); utc = true; } var _ = utc ? "getUTC" : "get", d = date[_ + "Date"](), D = date[_ + "Day"](), m = date[_ + "Month"](), y = date[_ + "FullYear"](), H = date[_ + "Hours"](), M = date[_ + "Minutes"](), s = date[_ + "Seconds"](), L = date[_ + "Milliseconds"](), o = utc ? 0 : date.getTimezoneOffset(), flags = { d: d, dd: pad(d), ddd: dF.i18n.dayNames[D], dddd: dF.i18n.dayNames[D + 7], m: m + 1, mm: pad(m + 1), mmm: dF.i18n.monthNames[m], mmmm: dF.i18n.monthNames[m + 12], yy: String(y).slice(2), yyyy: y, h: H % 12 || 12, hh: pad(H % 12 || 12), H: H, HH: pad(H), M: M, MM: pad(M), s: s, ss: pad(s), l: pad(L, 3), L: pad(L > 99 ? Math.round(L / 10) : L), t: H < 12 ? "a" : "p", tt: H < 12 ? "am" : "pm", T: H < 12 ? "A" : "P", TT: H < 12 ? "AM" : "PM", Z: utc ? "UTC" : (String(date).match(timezone) || [""]).pop().replace(timezoneClip, ""), o: (o > 0 ? "-" : "+") + pad(Math.floor(Math.abs(o) / 60) * 100 + Math.abs(o) % 60, 4), S: ["th", "st", "nd", "rd"][d % 10 > 3 ? 0 : (d % 100 - d % 10 != 10) * d % 10] }; return mask.replace(token, function($0) { return $0 in flags ? flags[$0] : $0.slice(1, $0.length - 1); }); }; } (); // Some common format strings RegexDateFormat.masks = { "default": "ddd mmm dd yyyy HH:MM:ss", shortDate: "m/d/yy", mediumDate: "mmm d, yyyy", longDate: "mmmm d, yyyy", fullDate: "dddd, mmmm d, yyyy", shortTime: "h:MM TT", mediumTime: "h:MM:ss TT", longTime: "h:MM:ss TT Z", isoDate: "yyyy-mm-dd", isoTime: "HH:MM:ss", isoDateTime: "yyyy-mm-dd'T'HH:MM:ss", isoUtcDateTime: "UTC:yyyy-mm-dd'T'HH:MM:ss'Z'" }; // Internationalization strings RegexDateFormat.i18n = { dayNames: [ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ], monthNames: [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ] }; // For convenience... Date.prototype.format = function(mask, utc) { return RegexDateFormat(this, mask, utc); };