Вход Регистрация
Файл: js/jquery.datetimepicker.full.js
Строк: 3058
<?php
/*!
 * @copyright Copyright &copy; Kartik Visweswaran, Krajee.com, 2014 - 2015
 * @version 1.3.3
 *
 * Date formatter utility library that allows formatting date/time variables or Date objects using PHP DateTime format.
 * @see http://php.net/manual/en/function.date.php
 *
 * For more JQuery plugins visit http://plugins.krajee.com
 * For more Yii related demos visit http://demos.krajee.com
 */
var DateFormatter;
(function () {
    
"use strict";

    var 
_compare_lpad_extenddefaultSettingsDAYHOUR;
    
DAY 1000 60 60 24;
    
HOUR 3600;

    
_compare = function (str1str2) {
        return 
typeof(str1) === 'string' && typeof(str2) === 'string' && str1.toLowerCase() === str2.toLowerCase();
    };
    
_lpad = function (valuelengthchar) {
        var 
chr char || '0'val value.toString();
        return 
val.length length _lpad(chr vallength) : val;
    };
    
_extend = function (out) {
        var 
iobj;
        
out out || {};
        for (
1arguments.lengthi++) {
            
obj arguments[i];
            if (!
obj) {
                continue;
            }
            for (var 
key in obj) {
                if (
obj.hasOwnProperty(key)) {
                    if (
typeof obj[key] === 'object') {
                        
_extend(out[key], obj[key]);
                    } else {
                        
out[key] = obj[key];
                    }
                }
            }
        }
        return 
out;
    };
    
defaultSettings = {
        
dateSettings: {
            
days: ['Sunday''Monday''Tuesday''Wednesday''Thursday''Friday''Saturday'],
            
daysShort: ['Sun''Mon''Tue''Wed''Thu''Fri''Sat'],
            
months: [
                
'January''February''March''April''May''June''July',
                
'August''September''October''November''December'
            
],
            
monthsShort: ['Jan''Feb''Mar''Apr''May''Jun''Jul''Aug''Sep''Oct''Nov''Dec'],
            
meridiem: ['AM''PM'],
            
ordinal: function (number) {
                var 
number 10suffixes = {1'st'2'nd'3'rd'};
                return 
Math.floor(number 100 10) === || !suffixes[n] ? 'th' suffixes[n];
            }
        },
        
separators: /[ -+/.T:@]/g,
        
validParts: /[dDjlNSwzWFmMntLoYyaABgGhHisueTIOPZcrU]/g,
        
intParts: /[djwNzmnyYhHgGis]/g,
        
tzParts: /b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|PrevailingTime|(?:GMT|UTC)(?:[-+]d{4})?)b/g,
        
tzClip: /[^-+dA-Z]/g
    
};

    
DateFormatter = function (options) {
        var 
self thisconfig _extend(defaultSettingsoptions);
        
self.dateSettings config.dateSettings;
        
self.separators config.separators;
        
self.validParts config.validParts;
        
self.intParts config.intParts;
        
self.tzParts config.tzParts;
        
self.tzClip config.tzClip;
    };

    
DateFormatter.prototype = {
        
constructorDateFormatter,
        
parseDate: function (vDatevFormat) {
            var 
self thisvFormatPartsvDatePartsivDateFlag falsevTimeFlag falsevDatePartiDatePart,
                
vSettings self.dateSettingsvMonthvMeriIndexvMeriOffsetlenmer,
                
out = {datenullyearnullmonthnulldaynullhour0min0sec0};
            if (!
vDate) {
                return 
undefined;
            }
            if (
vDate instanceof Date) {
                return 
vDate;
            }
            if (
typeof vDate === 'number') {
                return new 
Date(vDate);
            }
            if (
vFormat === 'U') {
                
parseInt(vDate);
                return 
? new Date(1000) : vDate;
            }
            if (
typeof vDate !== 'string') {
                return 
'';
            }
            
vFormatParts vFormat.match(self.validParts);
            if (!
vFormatParts || vFormatParts.length === 0) {
                throw new 
Error("Invalid date format definition.");
            }
            
vDateParts vDate.replace(self.separators'').split('');
            for (
0vDateParts.lengthi++) {
                
vDatePart vDateParts[i];
                
iDatePart parseInt(vDatePart);
                switch (
vFormatParts[i]) {
                    case 
'y':
                    case 
'Y':
                        
len vDatePart.length;
                        if (
len === 2) {
                            
out.year parseInt((iDatePart 70 '20' '19') + vDatePart);
                        } else if (
len === 4) {
                            
out.year iDatePart;
                        }
                        
vDateFlag true;
                        break;
                    case 
'm':
                    case 
'n':
                    case 
'M':
                    case 
'F':
                        if (
isNaN(vDatePart)) {
                            
vMonth vSettings.monthsShort.indexOf(vDatePart);
                            if (
vMonth > -1) {
                                
out.month vMonth 1;
                            }
                            
vMonth vSettings.months.indexOf(vDatePart);
                            if (
vMonth > -1) {
                                
out.month vMonth 1;
                            }
                        } else {
                            if (
iDatePart >= && iDatePart <= 12) {
                                
out.month iDatePart;
                            }
                        }
                        
vDateFlag true;
                        break;
                    case 
'd':
                    case 
'j':
                        if (
iDatePart >= && iDatePart <= 31) {
                            
out.day iDatePart;
                        }
                        
vDateFlag true;
                        break;
                    case 
'g':
                    case 
'h':
                        
vMeriIndex = (vFormatParts.indexOf('a') > -1) ? vFormatParts.indexOf('a') :
                            (
vFormatParts.indexOf('A') > -1) ? vFormatParts.indexOf('A') : -1;
                        
mer vDateParts[vMeriIndex];
                        if (
vMeriIndex > -1) {
                            
vMeriOffset _compare(mervSettings.meridiem[0]) ? :
                                (
_compare(mervSettings.meridiem[1]) ? 12 : -1);
                            if (
iDatePart >= && iDatePart <= 12 && vMeriOffset > -1) {
                                
out.hour iDatePart vMeriOffset 1;
                            } else if (
iDatePart >= && iDatePart <= 23) {
                                
out.hour iDatePart;
                            }
                        } else if (
iDatePart >= && iDatePart <= 23) {
                            
out.hour iDatePart;
                        }
                        
vTimeFlag true;
                        break;
                    case 
'G':
                    case 
'H':
                        if (
iDatePart >= && iDatePart <= 23) {
                            
out.hour iDatePart;
                        }
                        
vTimeFlag true;
                        break;
                    case 
'i':
                        if (
iDatePart >= && iDatePart <= 59) {
                            
out.min iDatePart;
                        }
                        
vTimeFlag true;
                        break;
                    case 
's':
                        if (
iDatePart >= && iDatePart <= 59) {
                            
out.sec iDatePart;
                        }
                        
vTimeFlag true;
                        break;
                }
            }
            if (
vDateFlag === true && out.year && out.month && out.day) {
                
out.date = new Date(out.yearout.month 1out.dayout.hourout.minout.sec0);
            } else {
                if (
vTimeFlag !== true) {
                    return 
false;
                }
                
out.date = new Date(000out.hourout.minout.sec0);
            }
            return 
out.date;
        },
        
guessDate: function (vDateStrvFormat) {
            if (
typeof vDateStr !== 'string') {
                return 
vDateStr;
            }
            var 
self thisvParts vDateStr.replace(self.separators'').split(''), vPattern = /^[djmn]/g,
                
vFormatParts vFormat.match(self.validParts), vDate = new Date(), vDigit 0vYeariiPartiSec;

            if (!
vPattern.test(vFormatParts[0])) {
                return 
vDateStr;
            }

            for (
0vParts.lengthi++) {
                
vDigit 2;
                
iPart vParts[i];
                
iSec parseInt(iPart.substr(02));
                switch (
i) {
                    case 
0:
                        if (
vFormatParts[0] === 'm' || vFormatParts[0] === 'n') {
                            
vDate.setMonth(iSec 1);
                        } else {
                            
vDate.setDate(iSec);
                        }
                        break;
                    case 
1:
                        if (
vFormatParts[0] === 'm' || vFormatParts[0] === 'n') {
                            
vDate.setDate(iSec);
                        } else {
                            
vDate.setMonth(iSec 1);
                        }
                        break;
                    case 
2:
                        
vYear vDate.getFullYear();
                        if (
iPart.length 4) {
                            
vDate.setFullYear(parseInt(vYear.toString().substr(0iPart.length) + iPart));
                            
vDigit iPart.length;
                        } else {
                            
vDate.setFullYear parseInt(iPart.substr(04));
                            
vDigit 4;
                        }
                        break;
                    case 
3:
                        
vDate.setHours(iSec);
                        break;
                    case 
4:
                        
vDate.setMinutes(iSec);
                        break;
                    case 
5:
                        
vDate.setSeconds(iSec);
                        break;
                }
                if (
iPart.substr(vDigit).length 0) {
                    
vParts.splice(10iPart.substr(vDigit));
                }
            }
            return 
vDate;
        },
        
parseFormat: function (vCharvDate) {
            var 
self thisvSettings self.dateSettingsfmtbackspace = /\?(.?)/gidoFormat = function (ts) {
                return 
fmt[t] ? fmt[t]() : s;
            };
            
fmt = {
                
/////////
                // DAY //
                /////////
                /**
                 * Day of month with leading 0: `01..31`
                 * @return {string}
                 */
                
d: function () {
                    return 
_lpad(fmt.j(), 2);
                },
                
/**
                 * Shorthand day name: `Mon...Sun`
                 * @return {string}
                 */
                
D: function () {
                    return 
vSettings.daysShort[fmt.w()];
                },
                
/**
                 * Day of month: `1..31`
                 * @return {number}
                 */
                
j: function () {
                    return 
vDate.getDate();
                },
                
/**
                 * Full day name: `Monday...Sunday`
                 * @return {number}
                 */
                
l: function () {
                    return 
vSettings.days[fmt.w()];
                },
                
/**
                 * ISO-8601 day of week: `1[Mon]..7[Sun]`
                 * @return {number}
                 */
                
N: function () {
                    return 
fmt.w() || 7;
                },
                
/**
                 * Day of week: `0[Sun]..6[Sat]`
                 * @return {number}
                 */
                
w: function () {
                    return 
vDate.getDay();
                },
                
/**
                 * Day of year: `0..365`
                 * @return {number}
                 */
                
z: function () {
                    var 
= new Date(fmt.Y(), fmt.n() - 1fmt.j()), = new Date(fmt.Y(), 01);
                    return 
Math.round((b) / DAY);
                },

                
//////////
                // WEEK //
                //////////
                /**
                 * ISO-8601 week number
                 * @return {number}
                 */
                
W: function () {
                    var 
= new Date(fmt.Y(), fmt.n() - 1fmt.j() - fmt.N() + 3), = new Date(a.getFullYear(), 04);
                    return 
_lpad(Math.round((b) / DAY 7), 2);
                },

                
///////////
                // MONTH //
                ///////////
                /**
                 * Full month name: `January...December`
                 * @return {string}
                 */
                
F: function () {
                    return 
vSettings.months[vDate.getMonth()];
                },
                
/**
                 * Month w/leading 0: `01..12`
                 * @return {string}
                 */
                
m: function () {
                    return 
_lpad(fmt.n(), 2);
                },
                
/**
                 * Shorthand month name; `Jan...Dec`
                 * @return {string}
                 */
                
M: function () {
                    return 
vSettings.monthsShort[vDate.getMonth()];
                },
                
/**
                 * Month: `1...12`
                 * @return {number}
                 */
                
n: function () {
                    return 
vDate.getMonth() + 1;
                },
                
/**
                 * Days in month: `28...31`
                 * @return {number}
                 */
                
t: function () {
                    return (new 
Date(fmt.Y(), fmt.n(), 0)).getDate();
                },

                
//////////
                // YEAR //
                //////////
                /**
                 * Is leap year? `0 or 1`
                 * @return {number}
                 */
                
L: function () {
                    var 
fmt.Y();
                    return (
=== && 100 !== || 400 === 0) ? 0;
                },
                
/**
                 * ISO-8601 year
                 * @return {number}
                 */
                
o: function () {
                    var 
fmt.n(), fmt.W(), fmt.Y();
                    return 
+ (=== 12 && === && ? -0);
                },
                
/**
                 * Full year: `e.g. 1980...2010`
                 * @return {number}
                 */
                
Y: function () {
                    return 
vDate.getFullYear();
                },
                
/**
                 * Last two digits of year: `00...99`
                 * @return {string}
                 */
                
y: function () {
                    return 
fmt.Y().toString().slice(-2);
                },

                
//////////
                // TIME //
                //////////
                /**
                 * Meridian lower: `am or pm`
                 * @return {string}
                 */
                
a: function () {
                    return 
fmt.A().toLowerCase();
                },
                
/**
                 * Meridian upper: `AM or PM`
                 * @return {string}
                 */
                
A: function () {
                    var 
fmt.G() < 12 1;
                    return 
vSettings.meridiem[n];
                },
                
/**
                 * Swatch Internet time: `000..999`
                 * @return {string}
                 */
                
B: function () {
                    var 
vDate.getUTCHours() * HOURvDate.getUTCMinutes() * 60vDate.getUTCSeconds();
                    return 
_lpad(Math.floor((HOUR) / 86.4) % 10003);
                },
                
/**
                 * 12-Hours: `1..12`
                 * @return {number}
                 */
                
g: function () {
                    return 
fmt.G() % 12 || 12;
                },
                
/**
                 * 24-Hours: `0..23`
                 * @return {number}
                 */
                
G: function () {
                    return 
vDate.getHours();
                },
                
/**
                 * 12-Hours with leading 0: `01..12`
                 * @return {string}
                 */
                
h: function () {
                    return 
_lpad(fmt.g(), 2);
                },
                
/**
                 * 24-Hours w/leading 0: `00..23`
                 * @return {string}
                 */
                
H: function () {
                    return 
_lpad(fmt.G(), 2);
                },
                
/**
                 * Minutes w/leading 0: `00..59`
                 * @return {string}
                 */
                
i: function () {
                    return 
_lpad(vDate.getMinutes(), 2);
                },
                
/**
                 * Seconds w/leading 0: `00..59`
                 * @return {string}
                 */
                
s: function () {
                    return 
_lpad(vDate.getSeconds(), 2);
                },
                
/**
                 * Microseconds: `000000-999000`
                 * @return {string}
                 */
                
u: function () {
                    return 
_lpad(vDate.getMilliseconds() * 10006);
                },

                
//////////////
                // TIMEZONE //
                //////////////
                /**
                 * Timezone identifier: `e.g. Atlantic/Azores, ...`
                 * @return {string}
                 */
                
e: function () {
                    var 
str = /((.*))/.exec(String(vDate))[1];
                    return 
str || 'Coordinated Universal Time';
                },
                
/**
                 * Timezone abbreviation: `e.g. EST, MDT, ...`
                 * @return {string}
                 */
                
T: function () {
                    var 
str = (String(vDate).match(self.tzParts) || [""]).pop().replace(self.tzClip"");
                    return 
str || 'UTC';
                },
                
/**
                 * DST observed? `0 or 1`
                 * @return {number}
                 */
                
I: function () {
                    var 
= new Date(fmt.Y(), 0), Date.UTC(fmt.Y(), 0),
                        
= new Date(fmt.Y(), 6), Date.UTC(fmt.Y(), 6);
                    return ((
c) !== (d)) ? 0;
                },
                
/**
                 * Difference to GMT in hour format: `e.g. +0200`
                 * @return {string}
                 */
                
O: function () {
                    var 
tzo vDate.getTimezoneOffset(), Math.abs(tzo);
                    return (
tzo '-' '+') + _lpad(Math.floor(60) * 100 604);
                },
                
/**
                 * Difference to GMT with colon: `e.g. +02:00`
                 * @return {string}
                 */
                
P: function () {
                    var 
fmt.O();
                    return (
O.substr(03) + ':' O.substr(32));
                },
                
/**
                 * Timezone offset in seconds: `-43200...50400`
                 * @return {number}
                 */
                
Z: function () {
                    return -
vDate.getTimezoneOffset() * 60;
                },

                
////////////////////
                // FULL DATE TIME //
                ////////////////////
                /**
                 * ISO-8601 date
                 * @return {string}
                 */
                
c: function () {
                    return 
'Y-m-d\TH:i:sP'.replace(backspacedoFormat);
                },
                
/**
                 * RFC 2822 date
                 * @return {string}
                 */
                
r: function () {
                    return 
'D, d M Y H:i:s O'.replace(backspacedoFormat);
                },
                
/**
                 * Seconds since UNIX epoch
                 * @return {number}
                 */
                
U: function () {
                    return 
vDate.getTime() / 1000 || 0;
                }
            };
            return 
doFormat(vCharvChar);
        },
        
formatDate: function (vDatevFormat) {
            var 
self thisinlenstrvCharvDateStr '';
            if (
typeof vDate === 'string') {
                
vDate self.parseDate(vDatevFormat);
                if (
vDate === false) {
                    return 
false;
                }
            }
            if (
vDate instanceof Date) {
                
len vFormat.length;
                for (
0leni++) {
                    
vChar vFormat.charAt(i);
                    if (
vChar === 'S') {
                        continue;
                    }
                    
str self.parseFormat(vCharvDate);
                    if (
!== (len 1) && self.intParts.test(vChar) && vFormat.charAt(1) === 'S') {
                        
parseInt(str);
                        
str += self.dateSettings.ordinal(n);
                    }
                    
vDateStr += str;
                }
                return 
vDateStr;
            }
            return 
'';
        }
    };
})();
/* global DateFormatter */
/**
 * @preserve jQuery DateTimePicker plugin v2.4.5
 * @homepage http://xdsoft.net/jqplugins/datetimepicker/
 * (c) 2014, Chupurnov Valeriy.
 */
/*global document,window,jQuery,setTimeout,clearTimeout,HighlightedDate,getCurrentValue*/
;(function (factory) {
    if ( 
typeof define === 'function' && define.amd ) {
        
// AMD. Register as an anonymous module.
        
define(['jquery''jquery-mousewheel''date-functions'], factory);
    } else if (
typeof exports === 'object') {
        
// Node/CommonJS style for Browserify
        
module.exports factory;
    } else {
        
// Browser globals
        
factory(jQuery);
    }
}(function ($) {
    
'use strict';
    var 
default_options  = {
        
i18n: {
            
ar: { // Arabic
                
months: [
                    
"كانون الثاني""شباط""آذار""نيسان""مايو""حزيران""تموز""آب""أيلول""تشرين الأول""تشرين الثاني""كانون الأول"
                
],
                
dayOfWeekShort: [
                    
"ن""ث""ع""خ""ج""س""ح"
                
],
                
dayOfWeek: ["الأحد""الاثنين""الثلاثاء""الأربعاء""الخميس""الجمعة""السبت""الأحد"]
            },
            
ro: { // Romanian
                
months: [
                    
"Ianuarie""Februarie""Martie""Aprilie""Mai""Iunie""Iulie""August""Septembrie""Octombrie""Noiembrie""Decembrie"
                
],
                
dayOfWeekShort: [
                    
"Du""Lu""Ma""Mi""Jo""Vi""Sâ"
                
],
                
dayOfWeek: ["Duminică""Luni""Marţi""Miercuri""Joi""Vineri""Sâmbătă"]
            },
            
id: { // Indonesian
                
months: [
                    
"Januari""Februari""Maret""April""Mei""Juni""Juli""Agustus""September""Oktober""November""Desember"
                
],
                
dayOfWeekShort: [
                    
"Min""Sen""Sel""Rab""Kam""Jum""Sab"
                
],
                
dayOfWeek: ["Minggu""Senin""Selasa""Rabu""Kamis""Jumat""Sabtu"]
            },
            
is: { // Icelandic
                
months: [
                    
"Janúar""Febrúar""Mars""Apríl""Maí""Júní""Júlí""Ágúst""September""Október""Nóvember""Desember"
                
],
                
dayOfWeekShort: [
                    
"Sun""Mán""Þrið""Mið""Fim""Fös""Lau"
                
],
                
dayOfWeek: ["Sunnudagur""Mánudagur""Þriðjudagur""Miðvikudagur""Fimmtudagur""Föstudagur""Laugardagur"]
            },
            
bg: { // Bulgarian
                
months: [
                    
"Януари""Февруари""Март""Април""Май""Юни""Юли""Август""Септември""Октомври""Ноември""Декември"
                
],
                
dayOfWeekShort: [
                    
"Нд""Пн""Вт""Ср""Чт""Пт""Сб"
                
],
                
dayOfWeek: ["Неделя""Понеделник""Вторник""Сряда""Четвъртък""Петък""Събота"]
            },
            
fa: { // Persian/Farsi
                
months: [
                    
'فروردین''اردیبهشت''خرداد''تیر''مرداد''شهریور''مهر''آبان''آذر''دی''بهمن''اسفند'
                
],
                
dayOfWeekShort: [
                    
'یکشنبه''دوشنبه''سه شنبه''چهارشنبه''پنجشنبه''جمعه''شنبه'
                
],
                
dayOfWeek: ["یک‌شنبه""دوشنبه""سه‌شنبه""چهارشنبه""پنج‌شنبه""جمعه""شنبه""یک‌شنبه"]
            },
            
ru: { // Russian
                
months: [
                    
'Январь''Февраль''Март''Апрель''Май''Июнь''Июль''Август''Сентябрь''Октябрь''Ноябрь''Декабрь'
                
],
                
dayOfWeekShort: [
                    
"Вс""Пн""Вт""Ср""Чт""Пт""Сб"
                
],
                
dayOfWeek: ["Воскресенье""Понедельник""Вторник""Среда""Четверг""Пятница""Суббота"]
            },
            
uk: { // Ukrainian
                
months: [
                    
'Січень''Лютий''Березень''Квітень''Травень''Червень''Липень''Серпень''Вересень''Жовтень''Листопад''Грудень'
                
],
                
dayOfWeekShort: [
                    
"Ндл""Пнд""Втр""Срд""Чтв""Птн""Сбт"
                
],
                
dayOfWeek: ["Неділя""Понеділок""Вівторок""Середа""Четвер""П'ятниця""Субота"]
            },
            
en: { // English
                
months: [
                    
"January""February""March""April""May""June""July""August""September""October""November""December"
                
],
                
dayOfWeekShort: [
                    
"Sun""Mon""Tue""Wed""Thu""Fri""Sat"
                
],
                
dayOfWeek: ["Sunday""Monday""Tuesday""Wednesday""Thursday""Friday""Saturday"]
            },
            
el: { // Ελληνικά
                
months: [
                    
"Ιανουάριος""Φεβρουάριος""Μάρτιος""Απρίλιος""Μάιος""Ιούνιος""Ιούλιος""Αύγουστος""Σεπτέμβριος""Οκτώβριος""Νοέμβριος""Δεκέμβριος"
                
],
                
dayOfWeekShort: [
                    
"Κυρ""Δευ""Τρι""Τετ""Πεμ""Παρ""Σαβ"
                
],
                
dayOfWeek: ["Κυριακή""Δευτέρα""Τρίτη""Τετάρτη""Πέμπτη""Παρασκευή""Σάββατο"]
            },
            
de: { // German
                
months: [
                    
'Januar''Februar''März''April''Mai''Juni''Juli''August''September''Oktober''November''Dezember'
                
],
                
dayOfWeekShort: [
                    
"So""Mo""Di""Mi""Do""Fr""Sa"
                
],
                
dayOfWeek: ["Sonntag""Montag""Dienstag""Mittwoch""Donnerstag""Freitag""Samstag"]
            },
            
nl: { // Dutch
                
months: [
                    
"januari""februari""maart""april""mei""juni""juli""augustus""september""oktober""november""december"
                
],
                
dayOfWeekShort: [
                    
"zo""ma""di""wo""do""vr""za"
                
],
                
dayOfWeek: ["zondag""maandag""dinsdag""woensdag""donderdag""vrijdag""zaterdag"]
            },
            
tr: { // Turkish
                
months: [
                    
"Ocak""Şubat""Mart""Nisan""Mayıs""Haziran""Temmuz""Ağustos""Eylül""Ekim""Kasım""Aralık"
                
],
                
dayOfWeekShort: [
                    
"Paz""Pts""Sal""Çar""Per""Cum""Cts"
                
],
                
dayOfWeek: ["Pazar""Pazartesi""Salı""Çarşamba""Perşembe""Cuma""Cumartesi"]
            },
            
fr: { //French
                
months: [
                    
"Janvier""Février""Mars""Avril""Mai""Juin""Juillet""Août""Septembre""Octobre""Novembre""Décembre"
                
],
                
dayOfWeekShort: [
                    
"Dim""Lun""Mar""Mer""Jeu""Ven""Sam"
                
],
                
dayOfWeek: ["dimanche""lundi""mardi""mercredi""jeudi""vendredi""samedi"]
            },
            
es: { // Spanish
                
months: [
                    
"Enero""Febrero""Marzo""Abril""Mayo""Junio""Julio""Agosto""Septiembre""Octubre""Noviembre""Diciembre"
                
],
                
dayOfWeekShort: [
                    
"Dom""Lun""Mar""Mié""Jue""Vie""Sáb"
                
],
                
dayOfWeek: ["Domingo""Lunes""Martes""Miércoles""Jueves""Viernes""Sábado"]
            },
            
th: { // Thai
                
months: [
                    
'มกราคม''กุมภาพันธ์''มีนาคม''เมษายน''พฤษภาคม''มิถุนายน''กรกฎาคม''สิงหาคม''กันยายน''ตุลาคม''พฤศจิกายน''ธันวาคม'
                
],
                
dayOfWeekShort: [
                    
'อา.''จ.''อ.''พ.''พฤ.''ศ.''ส.'
                
],
                
dayOfWeek: ["อาทิตย์""จันทร์""อังคาร""พุธ""พฤหัส""ศุกร์""เสาร์""อาทิตย์"]
            },
            
pl: { // Polish
                
months: [
                    
"styczeń""luty""marzec""kwiecień""maj""czerwiec""lipiec""sierpień""wrzesień""październik""listopad""grudzień"
                
],
                
dayOfWeekShort: [
                    
"nd""pn""wt""śr""cz""pt""sb"
                
],
                
dayOfWeek: ["niedziela""poniedziałek""wtorek""środa""czwartek""piątek""sobota"]
            },
            
pt: { // Portuguese
                
months: [
                    
"Janeiro""Fevereiro""Março""Abril""Maio""Junho""Julho""Agosto""Setembro""Outubro""Novembro""Dezembro"
                
],
                
dayOfWeekShort: [
                    
"Dom""Seg""Ter""Qua""Qui""Sex""Sab"
                
],
                
dayOfWeek: ["Domingo""Segunda""Terça""Quarta""Quinta""Sexta""Sábado"]
            },
            
ch: { // Simplified Chinese
                
months: [
                    
"一月""二月""三月""四月""五月""六月""七月""八月""九月""十月""十一月""十二月"
                
],
                
dayOfWeekShort: [
                    
"日""一""二""三""四""五""六"
                
]
            },
            
se: { // Swedish
                
months: [
                    
"Januari""Februari""Mars""April""Maj""Juni""Juli""Augusti""September",  "Oktober""November""December"
                
],
                
dayOfWeekShort: [
                    
"Sön""Mån""Tis""Ons""Tor""Fre""Lör"
                
]
            },
            
kr: { // Korean
                
months: [
                    
"1월""2월""3월""4월""5월""6월""7월""8월""9월""10월""11월""12월"
                
],
                
dayOfWeekShort: [
                    
"일""월""화""수""목""금""토"
                
],
                
dayOfWeek: ["일요일""월요일""화요일""수요일""목요일""금요일""토요일"]
            },
            
it: { // Italian
                
months: [
                    
"Gennaio""Febbraio""Marzo""Aprile""Maggio""Giugno""Luglio""Agosto""Settembre""Ottobre""Novembre""Dicembre"
                
],
                
dayOfWeekShort: [
                    
"Dom""Lun""Mar""Mer""Gio""Ven""Sab"
                
],
                
dayOfWeek: ["Domenica""Lunedì""Martedì""Mercoledì""Giovedì""Venerdì""Sabato"]
            },
            
da: { // Dansk
                
months: [
                    
"January""Februar""Marts""April""Maj""Juni""July""August""September""Oktober""November""December"
                
],
                
dayOfWeekShort: [
                    
"Søn""Man""Tir""Ons""Tor""Fre""Lør"
                
],
                
dayOfWeek: ["søndag""mandag""tirsdag""onsdag""torsdag""fredag""lørdag"]
            },
            
no: { // Norwegian
                
months: [
                    
"Januar""Februar""Mars""April""Mai""Juni""Juli""August""September""Oktober""November""Desember"
                
],
                
dayOfWeekShort: [
                    
"Søn""Man""Tir""Ons""Tor""Fre""Lør"
                
],
                
dayOfWeek: ['Søndag''Mandag''Tirsdag''Onsdag''Torsdag''Fredag''Lørdag']
            },
            
ja: { // Japanese
                
months: [
                    
"1月""2月""3月""4月""5月""6月""7月""8月""9月""10月""11月""12月"
                
],
                
dayOfWeekShort: [
                    
"日""月""火""水""木""金""土"
                
],
                
dayOfWeek: ["日曜""月曜""火曜""水曜""木曜""金曜""土曜"]
            },
            
vi: { // Vietnamese
                
months: [
                    
"Tháng 1""Tháng 2""Tháng 3""Tháng 4""Tháng 5""Tháng 6""Tháng 7""Tháng 8""Tháng 9""Tháng 10""Tháng 11""Tháng 12"
                
],
                
dayOfWeekShort: [
                    
"CN""T2""T3""T4""T5""T6""T7"
                
],
                
dayOfWeek: ["Chủ nhật""Thứ hai""Thứ ba""Thứ tư""Thứ năm""Thứ sáu""Thứ bảy"]
            },
            
sl: { // Slovenščina
                
months: [
                    
"Januar""Februar""Marec""April""Maj""Junij""Julij""Avgust""September""Oktober""November""December"
                
],
                
dayOfWeekShort: [
                    
"Ned""Pon""Tor""Sre""Čet""Pet""Sob"
                
],
                
dayOfWeek: ["Nedelja""Ponedeljek""Torek""Sreda""Četrtek""Petek""Sobota"]
            },
            
cs: { // Čeština
                
months: [
                    
"Leden""Únor""Březen""Duben""Květen""Červen""Červenec""Srpen""Září""Říjen""Listopad""Prosinec"
                
],
                
dayOfWeekShort: [
                    
"Ne""Po""Út""St""Čt""Pá""So"
                
]
            },
            
hu: { // Hungarian
                
months: [
                    
"Január""Február""Március""Április""Május""Június""Július""Augusztus""Szeptember""Október""November""December"
                
],
                
dayOfWeekShort: [
                    
"Va""Hé""Ke""Sze""Cs""Pé""Szo"
                
],
                
dayOfWeek: ["vasárnap""hétfő""kedd""szerda""csütörtök""péntek""szombat"]
            },
            
az: { //Azerbaijanian (Azeri)
                
months: [
                    
"Yanvar""Fevral""Mart""Aprel""May""Iyun""Iyul""Avqust""Sentyabr""Oktyabr""Noyabr""Dekabr"
                
],
                
dayOfWeekShort: [
                    
"B""Be""Ça""Ç""Ca""C""Ş"
                
],
                
dayOfWeek: ["Bazar""Bazar ertəsi""Çərşənbə axşamı""Çərşənbə""Cümə axşamı""Cümə""Şənbə"]
            },
            
bs: { //Bosanski
                
months: [
                    
"Januar""Februar""Mart""April""Maj""Jun""Jul""Avgust""Septembar""Oktobar""Novembar""Decembar"
                
],
                
dayOfWeekShort: [
                    
"Ned""Pon""Uto""Sri""Čet""Pet""Sub"
                
],
                
dayOfWeek: ["Nedjelja","Ponedjeljak""Utorak""Srijeda""Četvrtak""Petak""Subota"]
            },
            
ca: { //Català
                
months: [
                    
"Gener""Febrer""Març""Abril""Maig""Juny""Juliol""Agost""Setembre""Octubre""Novembre""Desembre"
                
],
                
dayOfWeekShort: [
                    
"Dg""Dl""Dt""Dc""Dj""Dv""Ds"
                
],
                
dayOfWeek: ["Diumenge""Dilluns""Dimarts""Dimecres""Dijous""Divendres""Dissabte"]
            },
            
'en-GB': { //English (British)
                
months: [
                    
"January""February""March""April""May""June""July""August""September""October""November""December"
                
],
                
dayOfWeekShort: [
                    
"Sun""Mon""Tue""Wed""Thu""Fri""Sat"
                
],
                
dayOfWeek: ["Sunday""Monday""Tuesday""Wednesday""Thursday""Friday""Saturday"]
            },
            
et: { //"Eesti"
                
months: [
                    
"Jaanuar""Veebruar""Märts""Aprill""Mai""Juuni""Juuli""August""September""Oktoober""November""Detsember"
                
],
                
dayOfWeekShort: [
                    
"P""E""T""K""N""R""L"
                
],
                
dayOfWeek: ["Pühapäev""Esmaspäev""Teisipäev""Kolmapäev""Neljapäev""Reede""Laupäev"]
            },
            
eu: { //Euskara
                
months: [
                    
"Urtarrila""Otsaila""Martxoa""Apirila""Maiatza""Ekaina""Uztaila""Abuztua""Iraila""Urria""Azaroa""Abendua"
                
],
                
dayOfWeekShort: [
                    
"Ig.""Al.""Ar.""Az.""Og.""Or.""La."
                
],
                
dayOfWeek: ['Igandea''Astelehena''Asteartea''Asteazkena''Osteguna''Ostirala''Larunbata']
            },
            
fi: { //Finnish (Suomi)
                
months: [
                    
"Tammikuu""Helmikuu""Maaliskuu""Huhtikuu""Toukokuu""Kesäkuu""Heinäkuu""Elokuu""Syyskuu""Lokakuu""Marraskuu""Joulukuu"
                
],
                
dayOfWeekShort: [
                    
"Su""Ma""Ti""Ke""To""Pe""La"
                
],
                
dayOfWeek: ["sunnuntai""maanantai""tiistai""keskiviikko""torstai""perjantai""lauantai"]
            },
            
gl: { //Galego
                
months: [
                    
"Xan""Feb""Maz""Abr""Mai""Xun""Xul""Ago""Set""Out""Nov""Dec"
                
],
                
dayOfWeekShort: [
                    
"Dom""Lun""Mar""Mer""Xov""Ven""Sab"
                
],
                
dayOfWeek: ["Domingo""Luns""Martes""Mércores""Xoves""Venres""Sábado"]
            },
            
hr: { //Hrvatski
                
months: [
                    
"Siječanj""Veljača""Ožujak""Travanj""Svibanj""Lipanj""Srpanj""Kolovoz""Rujan""Listopad""Studeni""Prosinac"
                
],
                
dayOfWeekShort: [
                    
"Ned""Pon""Uto""Sri""Čet""Pet""Sub"
                
],
                
dayOfWeek: ["Nedjelja""Ponedjeljak""Utorak""Srijeda""Četvrtak""Petak""Subota"]
            },
            
ko: { //Korean (한국어)
                
months: [
                    
"1월""2월""3월""4월""5월""6월""7월""8월""9월""10월""11월""12월"
                
],
                
dayOfWeekShort: [
                    
"일""월""화""수""목""금""토"
                
],
                
dayOfWeek: ["일요일""월요일""화요일""수요일""목요일""금요일""토요일"]
            },
            
lt: { //Lithuanian (lietuvių)
                
months: [
                    
"Sausio""Vasario""Kovo""Balandžio""Gegužės""Birželio""Liepos""Rugpjūčio""Rugsėjo""Spalio""Lapkričio""Gruodžio"
                
],
                
dayOfWeekShort: [
                    
"Sek""Pir""Ant""Tre""Ket""Pen""Šeš"
                
],
                
dayOfWeek: ["Sekmadienis""Pirmadienis""Antradienis""Trečiadienis""Ketvirtadienis""Penktadienis""Šeštadienis"]
            },
            
lv: { //Latvian (Latviešu)
                
months: [
                    
"Janvāris""Februāris""Marts""Aprīlis ""Maijs""Jūnijs""Jūlijs""Augusts""Septembris""Oktobris""Novembris""Decembris"
                
],
                
dayOfWeekShort: [
                    
"Sv""Pr""Ot""Tr""Ct""Pk""St"
                
],
                
dayOfWeek: ["Svētdiena""Pirmdiena""Otrdiena""Trešdiena""Ceturtdiena""Piektdiena""Sestdiena"]
            },
            
mk: { //Macedonian (Македонски)
                
months: [
                    
"јануари""февруари""март""април""мај""јуни""јули""август""септември""октомври""ноември""декември"
                
],
                
dayOfWeekShort: [
                    
"нед""пон""вто""сре""чет""пет""саб"
                
],
                
dayOfWeek: ["Недела""Понеделник""Вторник""Среда""Четврток""Петок""Сабота"]
            },
            
mn: { //Mongolian (Монгол)
                
months: [
                    
"1-р сар""2-р сар""3-р сар""4-р сар""5-р сар""6-р сар""7-р сар""8-р сар""9-р сар""10-р сар""11-р сар""12-р сар"
                
],
                
dayOfWeekShort: [
                    
"Дав""Мяг""Лха""Пүр""Бсн""Бям""Ням"
                
],
                
dayOfWeek: ["Даваа""Мягмар""Лхагва""Пүрэв""Баасан""Бямба""Ням"]
            },
            
'pt-BR': { //Português(Brasil)
                
months: [
                    
"Janeiro""Fevereiro""Março""Abril""Maio""Junho""Julho""Agosto""Setembro""Outubro""Novembro""Dezembro"
                
],
                
dayOfWeekShort: [
                    
"Dom""Seg""Ter""Qua""Qui""Sex""Sáb"
                
],
                
dayOfWeek: ["Domingo""Segunda""Terça""Quarta""Quinta""Sexta""Sábado"]
            },
            
sk: { //Slovenčina
                
months: [
                    
"Január""Február""Marec""Apríl""Máj""Jún""Júl""August""September""Október""November""December"
                
],
                
dayOfWeekShort: [
                    
"Ne""Po""Ut""St""Št""Pi""So"
                
],
                
dayOfWeek: ["Nedeľa""Pondelok""Utorok""Streda""Štvrtok""Piatok""Sobota"]
            },
            
sq: { //Albanian (Shqip)
                
months: [
                    
"Janar""Shkurt""Mars""Prill""Maj""Qershor""Korrik""Gusht""Shtator""Tetor""Nëntor""Dhjetor"
                
],
                
dayOfWeekShort: [
                    
"Die""Hën""Mar""Mër""Enj""Pre""Shtu"
                
],
                
dayOfWeek: ["E Diel""E Hënë""E Martē""E Mërkurë""E Enjte""E Premte""E Shtunë"]
            },
            
'sr-YU': { //Serbian (Srpski)
                
months: [
                    
"Januar""Februar""Mart""April""Maj""Jun""Jul""Avgust""Septembar""Oktobar""Novembar""Decembar"
                
],
                
dayOfWeekShort: [
                    
"Ned""Pon""Uto""Sre""čet""Pet""Sub"
                
],
                
dayOfWeek: ["Nedelja","Ponedeljak""Utorak""Sreda""Četvrtak""Petak""Subota"]
            },
            
sr: { //Serbian Cyrillic (Српски)
                
months: [
                    
"јануар""фебруар""март""април""мај""јун""јул""август""септембар""октобар""новембар""децембар"
                
],
                
dayOfWeekShort: [
                    
"нед""пон""уто""сре""чет""пет""суб"
                
],
                
dayOfWeek: ["Недеља","Понедељак""Уторак""Среда""Четвртак""Петак""Субота"]
            },
            
sv: { //Svenska
                
months: [
                    
"Januari""Februari""Mars""April""Maj""Juni""Juli""Augusti""September""Oktober""November""December"
                
],
                
dayOfWeekShort: [
                    
"Sön""Mån""Tis""Ons""Tor""Fre""Lör"
                
],
                
dayOfWeek: ["Söndag""Måndag""Tisdag""Onsdag""Torsdag""Fredag""Lördag"]
            },
            
'zh-TW': { //Traditional Chinese (繁體中文)
                
months: [
                    
"一月""二月""三月""四月""五月""六月""七月""八月""九月""十月""十一月""十二月"
                
],
                
dayOfWeekShort: [
                    
"日""一""二""三""四""五""六"
                
],
                
dayOfWeek: ["星期日""星期一""星期二""星期三""星期四""星期五""星期六"]
            },
            
zh: { //Simplified Chinese (简体中文)
                
months: [
                    
"一月""二月""三月""四月""五月""六月""七月""八月""九月""十月""十一月""十二月"
                
],
                
dayOfWeekShort: [
                    
"日""一""二""三""四""五""六"
                
],
                
dayOfWeek: ["星期日""星期一""星期二""星期三""星期四""星期五""星期六"]
            },
            
he: { //Hebrew (עברית)
                
months: [
                    
'ינואר''פברואר''מרץ''אפריל''מאי''יוני''יולי''אוגוסט''ספטמבר''אוקטובר''נובמבר''דצמבר'
                
],
                
dayOfWeekShort: [
                    
'א'', 'ב'''ג'', 'ד'''ה'', 'ו'''שבת'
                
],
                
dayOfWeek: ["ראשון""שני""שלישי""רביעי""חמישי""שישי""שבת""ראשון"]
            },
            
hy: { // Armenian
                
months: [
                    
"Հունվար""Փետրվար""Մարտ""Ապրիլ""Մայիս""Հունիս""Հուլիս""Օգոստոս""Սեպտեմբեր""Հոկտեմբեր""Նոյեմբեր""Դեկտեմբեր"
                
],
                
dayOfWeekShort: [
                    
"Կի""Երկ""Երք""Չոր""Հնգ""Ուրբ""Շբթ"
                
],
                
dayOfWeek: ["Կիրակի""Երկուշաբթի""Երեքշաբթի""Չորեքշաբթի""Հինգշաբթի""Ուրբաթ""Շաբաթ"]
            },
            
kg: { // Kyrgyz
                
months: [
                    
'Үчтүн айы''Бирдин айы''Жалган Куран''Чын Куран''Бугу''Кулжа''Теке''Баш Оона''Аяк Оона''Тогуздун айы''Жетинин айы''Бештин айы'
                
],
                
dayOfWeekShort: [
                    
"Жек""Дүй""Шей""Шар""Бей""Жум""Ише"
                
],
                
dayOfWeek: [
                    
"Жекшемб""Дүйшөмб""Шейшемб""Шаршемб""Бейшемби""Жума""Ишенб"
                
]
            },
            
rm: { // Romansh
                
months: [
                    
"Schaner""Favrer""Mars""Avrigl""Matg""Zercladur""Fanadur""Avust""Settember""October""November""December"
                
],
                
dayOfWeekShort: [
                    
"Du""Gli""Ma""Me""Gie""Ve""So"
                
],
                
dayOfWeek: [
                    
"Dumengia""Glindesdi""Mardi""Mesemna""Gievgia""Venderdi""Sonda"
                
]
            },
        },
        
value'',
        
rtlfalse,

        
format:    'Y/m/d H:i',
        
formatTime:    'H:i',
        
formatDate:    'Y/m/d',

        
startDate:    false// new Date(), '1986/12/08', '-1970/01/05','-1970/01/05',
        
step60,
        
monthChangeSpinnertrue,

        
closeOnDateSelectfalse,
        
closeOnTimeSelecttrue,
        
closeOnWithoutClicktrue,
        
closeOnInputClicktrue,

        
timepickertrue,
        
datepickertrue,
        
weeksfalse,

        
defaultTimefalse,    // use formatTime format (ex. '10:00' for formatTime:    'H:i')
        
defaultDatefalse,    // use formatDate format (ex new Date() or '1986/12/08' or '-1970/01/05' or '-1970/01/05')

        
minDatefalse,
        
maxDatefalse,
        
minTimefalse,
        
maxTimefalse,
        
disabledMinTimefalse,
        
disabledMaxTimefalse,

        
allowTimes: [],
        
openedfalse,
        
initTimetrue,
        
inlinefalse,
        
theme'',

        
onSelectDate: function () {},
        
onSelectTime: function () {},
        
onChangeMonth: function () {},
        
onChangeYear: function () {},
        
onChangeDateTime: function () {},
        
onShow: function () {},
        
onClose: function () {},
        
onGenerate: function () {},

        
withoutCopyrighttrue,
        
inverseButtonfalse,
        
hours12false,
        
next'xdsoft_next',
        
prev 'xdsoft_prev',
        
dayOfWeekStart0,
        
parentID'body',
        
timeHeightInTimePicker25,
        
timepickerScrollbartrue,
        
todayButtontrue,
        
prevButtontrue,
        
nextButtontrue,
        
defaultSelecttrue,

        
scrollMonthtrue,
        
scrollTimetrue,
        
scrollInputtrue,

        
lazyInitfalse,
        
maskfalse,
        
validateOnBlurtrue,
        
allowBlanktrue,
        
yearStart1950,
        
yearEnd2050,
        
monthStart0,
        
monthEnd11,
        
style'',
        
id'',
        
fixedfalse,
        
roundTime'round'// ceil, floor
        
className'',
        
weekends: [],
        
highlightedDates: [],
        
highlightedPeriods: [],
        
disabledDates : [],
        
disabledWeekDays: [],
        
yearOffset0,
        
beforeShowDaynull,

        
enterLikeTabtrue,
        
showApplyButtonfalse
    
};

    var 
dateHelper null,
        
globalLocaleDefault 'en',
        
globalLocale 'en';
    
    var 
dateFormatterOptionsDefault = {
        
meridiem: ['AM''PM']
    };
    
    var 
initDateFormatter = function(){
        var 
locale default_options.i18n[globalLocale],
            
opts = {
                
dayslocale.dayOfWeek,
                
daysShortlocale.dayOfWeekShort,
                
monthslocale.months,
                
monthsShort: $.map(locale.months, function(n){ return n.substring(03) }),            
            };
        
         
dateHelper = new DateFormatter({
            
dateSettings: $.extend({}, dateFormatterOptionsDefaultopts)
        });
    };
        
    
// for locale settings
    
$.datetimepicker = {
        
setLocale: function(locale){
            var 
newLocale default_options.i18n[locale]?locale:globalLocaleDefault;
            if(
globalLocale != newLocale){
                
globalLocale newLocale;
                
// reinit date formatter
                
initDateFormatter();
            }
        },
        
RFC_2822'D, d M Y H:i:s O',
        
ATOM'Y-m-dTH:i:sP',
        
ISO_8601'Y-m-dTH:i:sO',
        
RFC_822'D, d M y H:i:s O',
        
RFC_850'l, d-M-y H:i:s T',
        
RFC_1036'D, d M y H:i:s O',
        
RFC_1123'D, d M Y H:i:s O',
        
RSS'D, d M Y H:i:s O',
        
W3C'Y-m-dTH:i:sP'
    
};
    
    
// first init date formatter
    
initDateFormatter();

    
// fix for ie8
    
if (!window.getComputedStyle) {
        
window.getComputedStyle = function (elpseudo) {
            
this.el el;
            
this.getPropertyValue = function (prop) {
                var 
re = /(-([a-z]){1})/g;
                if (
prop === 'float') {
                    
prop 'styleFloat';
                }
                if (
re.test(prop)) {
                    
prop prop.replace(re, function (abc) {
                        return 
c.toUpperCase();
                    });
                }
                return 
el.currentStyle[prop] || null;
            };
            return 
this;
        };
    }
    if (!Array.
prototype.indexOf) {
        Array.
prototype.indexOf = function (objstart) {
            var 
ij;
            for (
= (start || 0), this.lengthj+= 1) {
                if (
this[i] === obj) { return i; }
            }
            return -
1;
        };
    }
    
Date.prototype.countDaysInMonth = function () {
        return new 
Date(this.getFullYear(), this.getMonth() + 10).getDate();
    };
    $.fn.
xdsoftScroller = function (percent) {
        return 
this.each(function () {
            var 
timeboxparent = $(this),
                
pointerEventToXY = function (e) {
                    var 
out = {x0y0},
                        
touch;
                    if (
e.type === 'touchstart' || e.type === 'touchmove' || e.type === 'touchend' || e.type === 'touchcancel') {
                        
touch  e.originalEvent.touches[0] || e.originalEvent.changedTouches[0];
                        
out.touch.clientX;
                        
out.touch.clientY;
                    } else if (
e.type === 'mousedown' || e.type === 'mouseup' || e.type === 'mousemove' || e.type === 'mouseover' || e.type === 'mouseout' || e.type === 'mouseenter' || e.type === 'mouseleave') {
                        
out.e.clientX;
                        
out.e.clientY;
                    }
                    return 
out;
                },
                
move 0,
                
timebox,
                
parentHeight,
                
height,
                
scrollbar,
                
scroller,
                
maximumOffset 100,
                
start false,
                
startY 0,
                
startTop 0,
                
h1 0,
                
touchStart false,
                
startTopScroll 0,
                
calcOffset = function () {};
            if (
percent === 'hide') {
                
timeboxparent.find('.xdsoft_scrollbar').hide();
                return;
            }
            if (!$(
this).hasClass('xdsoft_scroller_box')) {
                
timebox timeboxparent.children().eq(0);
                
parentHeight timeboxparent[0].clientHeight;
                
height timebox[0].offsetHeight;
                
scrollbar = $('<div class="xdsoft_scrollbar"></div>');
                
scroller = $('<div class="xdsoft_scroller"></div>');
                
scrollbar.append(scroller);

                
timeboxparent.addClass('xdsoft_scroller_box').append(scrollbar);
                
calcOffset = function calcOffset(event) {
                    var 
offset pointerEventToXY(event).startY startTopScroll;
                    if (
offset 0) {
                        
offset 0;
                    }
                    if (
offset scroller[0].offsetHeight h1) {
                        
offset h1 scroller[0].offsetHeight;
                    }
                    
timeboxparent.trigger('scroll_element.xdsoft_scroller', [maximumOffset offset maximumOffset 0]);
                };

                
scroller
                    
.on('touchstart.xdsoft_scroller mousedown.xdsoft_scroller', function (event) {
                        if (!
parentHeight) {
                            
timeboxparent.trigger('resize_scroll.xdsoft_scroller', [percent]);
                        }

                        
startY pointerEventToXY(event).y;
                        
startTopScroll parseInt(scroller.css('margin-top'), 10);
                        
h1 scrollbar[0].offsetHeight;

                        if (
event.type === 'mousedown' || event.type === 'touchstart') {
                            if (
document) {
                                $(
document.body).addClass('xdsoft_noselect');
                            }
                            $([
document.bodywindow]).on('touchend mouseup.xdsoft_scroller', function arguments_callee() {
                                $([
document.bodywindow]).off('touchend mouseup.xdsoft_scroller'arguments_callee)
                                    .
off('mousemove.xdsoft_scroller'calcOffset)
                                    .
removeClass('xdsoft_noselect');
                            });
                            $(
document.body).on('mousemove.xdsoft_scroller'calcOffset);
                        } else {
                            
touchStart true;
                            
event.stopPropagation();
                            
event.preventDefault();
                        }
                    })
                    .
on('touchmove', function (event) {
                        if (
touchStart) {
                            
event.preventDefault();
                            
calcOffset(event);
                        }
                    })
                    .
on('touchend touchcancel', function (event) {
                        
touchStart =  false;
                        
startTopScroll 0;
                    });

                
timeboxparent
                    
.on('scroll_element.xdsoft_scroller', function (eventpercentage) {
                        if (!
parentHeight) {
                            
timeboxparent.trigger('resize_scroll.xdsoft_scroller', [percentagetrue]);
                        }
                        
percentage percentage : (percentage || isNaN(percentage)) ? percentage;

                        
scroller.css('margin-top'maximumOffset percentage);

                        
setTimeout(function () {
                            
timebox.css('marginTop', -parseInt((timebox[0].offsetHeight parentHeight) * percentage10));
                        }, 
10);
                    })
                    .
on('resize_scroll.xdsoft_scroller', function (eventpercentagenoTriggerScroll) {
                        var 
percentsh;
                        
parentHeight timeboxparent[0].clientHeight;
                        
height timebox[0].offsetHeight;
                        
percent parentHeight height;
                        
sh percent scrollbar[0].offsetHeight;
                        if (
percent 1) {
                            
scroller.hide();
                        } else {
                            
scroller.show();
                            
scroller.css('height'parseInt(sh 10 sh 1010));
                            
maximumOffset scrollbar[0].offsetHeight scroller[0].offsetHeight;
                            if (
noTriggerScroll !== true) {
                                
timeboxparent.trigger('scroll_element.xdsoft_scroller', [percentage || Math.abs(parseInt(timebox.css('marginTop'), 10)) / (height parentHeight)]);
                            }
                        }
                    });

                
timeboxparent.on('mousewheel', function (event) {
                    var 
top Math.abs(parseInt(timebox.css('marginTop'), 10));

                    
top top - (event.deltaY 20);
                    if (
top 0) {
                        
top 0;
                    }

                    
timeboxparent.trigger('scroll_element.xdsoft_scroller', [top / (height parentHeight)]);
                    
event.stopPropagation();
                    return 
false;
                });

                
timeboxparent.on('touchstart', function (event) {
                    
start pointerEventToXY(event);
                    
startTop Math.abs(parseInt(timebox.css('marginTop'), 10));
                });

                
timeboxparent.on('touchmove', function (event) {
                    if (
start) {
                        
event.preventDefault();
                        var 
coord pointerEventToXY(event);
                        
timeboxparent.trigger('scroll_element.xdsoft_scroller', [(startTop - (coord.start.y)) / (height parentHeight)]);
                    }
                });

                
timeboxparent.on('touchend touchcancel', function (event) {
                    
start false;
                    
startTop 0;
                });
            }
            
timeboxparent.trigger('resize_scroll.xdsoft_scroller', [percent]);
        });
    };

    $.fn.
datetimepicker = function (opt) {
        var 
KEY0 48,
            
KEY9 57,
            
_KEY0 96,
            
_KEY9 105,
            
CTRLKEY 17,
            
DEL 46,
            
ENTER 13,
            
ESC 27,
            
BACKSPACE 8,
            
ARROWLEFT 37,
            
ARROWUP 38,
            
ARROWRIGHT 39,
            
ARROWDOWN 40,
            
TAB 9,
            
F5 116,
            
AKEY 65,
            
CKEY 67,
            
VKEY 86,
            
ZKEY 90,
            
YKEY 89,
            
ctrlDown    =    false,
            
options = ($.isPlainObject(opt) || !opt) ? $.extend(true, {}, default_optionsopt) : $.extend(true, {}, default_options),

            
lazyInitTimer 0,
            
createDateTimePicker,
            
destroyDateTimePicker,

            
lazyInit = function (input) {
                
input
                    
.on('open.xdsoft focusin.xdsoft mousedown.xdsoft touchstart', function initOnActionCallback(event) {
                        if (
input.is(':disabled') || input.data('xdsoft_datetimepicker')) {
                            return;
                        }
                        
clearTimeout(lazyInitTimer);
                        
lazyInitTimer setTimeout(function () {

                            if (!
input.data('xdsoft_datetimepicker')) {
                                
createDateTimePicker(input);
                            }
                            
input
                                
.off('open.xdsoft focusin.xdsoft mousedown.xdsoft touchstart'initOnActionCallback)
                                .
trigger('open.xdsoft');
                        }, 
100);
                    });
            };

        
createDateTimePicker = function (input) {
            var 
datetimepicker = $('<div class="xdsoft_datetimepicker xdsoft_noselect"></div>'),
                
xdsoft_copyright = $('<div class="xdsoft_copyright"><a target="_blank" href="http://xdsoft.net/jqplugins/datetimepicker/">xdsoft.net</a></div>'),
                
datepicker = $('<div class="xdsoft_datepicker active"></div>'),
                
mounth_picker = $('<div class="xdsoft_mounthpicker"><button type="button" class="xdsoft_prev"></button><button type="button" class="xdsoft_today_button"></button>' +
                    
'<div class="xdsoft_label xdsoft_month"><span></span><i></i></div>' +
                    
'<div class="xdsoft_label xdsoft_year"><span></span><i></i></div>' +
                    
'<button type="button" class="xdsoft_next"></button></div>'),
                
calendar = $('<div class="xdsoft_calendar"></div>'),
                
timepicker = $('<div class="xdsoft_timepicker active"><button type="button" class="xdsoft_prev"></button><div class="xdsoft_time_box"></div><button type="button" class="xdsoft_next"></button></div>'),
                
timeboxparent timepicker.find('.xdsoft_time_box').eq(0),
                
timebox = $('<div class="xdsoft_time_variant"></div>'),
                
applyButton = $('<button type="button" class="xdsoft_save_selected blue-gradient-button">Save Selected</button>'),
                
/*scrollbar = $('<div class="xdsoft_scrollbar"></div>'),
                scroller = $('<div class="xdsoft_scroller"></div>'),*/
                
monthselect = $('<div class="xdsoft_select xdsoft_monthselect"><div></div></div>'),
                
yearselect = $('<div class="xdsoft_select xdsoft_yearselect"><div></div></div>'),
                
triggerAfterOpen false,
                
XDSoft_datetime,
                
//scroll_element,
                
xchangeTimer,
                
timerclick,
                
current_time_index,
                
setPos,
                
timer 0,
                
timer1 0,
                
_xdsoft_datetime;

            if (
options.id) {
                
datetimepicker.attr('id'options.id);
            }
            if (
options.style) {
                
datetimepicker.attr('style'options.style);
            }
            if (
options.weeks) {
                
datetimepicker.addClass('xdsoft_showweeks');
            }
            if (
options.rtl) {
                
datetimepicker.addClass('xdsoft_rtl');
            }

            
datetimepicker.addClass('xdsoft_' options.theme);
            
datetimepicker.addClass(options.className);

            
mounth_picker
                
.find('.xdsoft_month span')
                    .
after(monthselect);
            
mounth_picker
                
.find('.xdsoft_year span')
                    .
after(yearselect);

            
mounth_picker
                
.find('.xdsoft_month,.xdsoft_year')
                    .
on('touchstart mousedown.xdsoft', function (event) {
                    var 
select = $(this).find('.xdsoft_select').eq(0),
                        
val 0,
                        
top 0,
                        
visible select.is(':visible'),
                        
items,
                        
i;

                    
mounth_picker
                        
.find('.xdsoft_select')
                            .
hide();
                    if (
_xdsoft_datetime.currentTime) {
                        
val _xdsoft_datetime.currentTime[$(this).hasClass('xdsoft_month') ? 'getMonth' 'getFullYear']();
                    }

                    
select[visible 'hide' 'show']();
                    for (
items select.find('div.xdsoft_option'), 0items.length+= 1) {
                        if (
items.eq(i).data('value') === val) {
                            break;
                        } else {
                            
top += items[0].offsetHeight;
                        }
                    }

                    
select.xdsoftScroller(top / (select.children()[0].offsetHeight - (select[0].clientHeight)));
                    
event.stopPropagation();
                    return 
false;
                });

            
mounth_picker
                
.find('.xdsoft_select')
                    .
xdsoftScroller()
                .
on('touchstart mousedown.xdsoft', function (event) {
                    
event.stopPropagation();
                    
event.preventDefault();
                })
                .
on('touchstart mousedown.xdsoft''.xdsoft_option', function (event) {
                    if (
_xdsoft_datetime.currentTime === undefined || _xdsoft_datetime.currentTime === null) {
                        
_xdsoft_datetime.currentTime _xdsoft_datetime.now();
                    }

                    var 
year _xdsoft_datetime.currentTime.getFullYear();
                    if (
_xdsoft_datetime && _xdsoft_datetime.currentTime) {
                        
_xdsoft_datetime.currentTime[$(this).parent().parent().hasClass('xdsoft_monthselect') ? 'setMonth' 'setFullYear']($(this).data('value'));
                    }

                    $(
this).parent().parent().hide();

                    
datetimepicker.trigger('xchange.xdsoft');
                    if (
options.onChangeMonth && $.isFunction(options.onChangeMonth)) {
                        
options.onChangeMonth.call(datetimepicker_xdsoft_datetime.currentTimedatetimepicker.data('input'));
                    }

                    if (
year !== _xdsoft_datetime.currentTime.getFullYear() && $.isFunction(options.onChangeYear)) {
                        
options.onChangeYear.call(datetimepicker_xdsoft_datetime.currentTimedatetimepicker.data('input'));
                    }
                });

            
datetimepicker.setOptions = function (_options) {
                var 
highlightedDates = {},
                    
getCaretPos = function (input) {
                        try {
                            if (
document.selection && document.selection.createRange) {
                                var 
range document.selection.createRange();
                                return 
range.getBookmark().charCodeAt(2) - 2;
                            }
                            if (
input.setSelectionRange) {
                                return 
input.selectionStart;
                            }
                        } catch (
e) {
                            return 
0;
                        }
                    },
                    
setCaretPos = function (nodepos) {
                        
node = (typeof node === "string" || node instanceof String) ? document.getElementById(node) : node;
                        if (!
node) {
                            return 
false;
                        }
                        if (
node.createTextRange) {
                            var 
textRange node.createTextRange();
                            
textRange.collapse(true);
                            
textRange.moveEnd('character'pos);
                            
textRange.moveStart('character'pos);
                            
textRange.select();
                            return 
true;
                        }
                        if (
node.setSelectionRange) {
                            
node.setSelectionRange(pospos);
                            return 
true;
                        }
                        return 
false;
                    },
                    
isValidValue = function (maskvalue) {
                        var 
reg mask
                            
.replace(/([[]/{}()-.+]{1})/g'\$1')
                            .
replace(/_/g'{digit+}')
                            .
replace(/([0-9]{1})/g'{digit$1}')
                            .
replace(/{digit([0-9]{1})}/g'[0-$1_]{1}')
                            .
replace(/{digit[+]}/g'[0-9_]{1}');
                        return (new 
RegExp(reg)).test(value);
                    };
                
options = $.extend(true, {}, options_options);

                if (
_options.allowTimes && $.isArray(_options.allowTimes) && _options.allowTimes.length) {
                    
options.allowTimes = $.extend(true, [], _options.allowTimes);
                }

                if (
_options.weekends && $.isArray(_options.weekends) && _options.weekends.length) {
                    
options.weekends = $.extend(true, [], _options.weekends);
                }

                if (
_options.highlightedDates && $.isArray(_options.highlightedDates) && _options.highlightedDates.length) {
                    $.
each(_options.highlightedDates, function (indexvalue) {
                        var 
splitData = $.map(value.split(','), $.trim),
                            
exDesc,
                            
hDate = new HighlightedDate(dateHelper.parseDate(splitData[0], options.formatDate), splitData[1], splitData[2]), // date, desc, style
                            
keyDate dateHelper.formatDate(hDate.dateoptions.formatDate);
                        if (
highlightedDates[keyDate] !== undefined) {
                            
exDesc highlightedDates[keyDate].desc;
                            if (
exDesc && exDesc.length && hDate.desc && hDate.desc.length) {
                                
highlightedDates[keyDate].desc exDesc "n" hDate.desc;
                            }
                        } else {
                            
highlightedDates[keyDate] = hDate;
                        }
                    });

                    
options.highlightedDates = $.extend(true, [], highlightedDates);
                }

                if (
_options.highlightedPeriods && $.isArray(_options.highlightedPeriods) && _options.highlightedPeriods.length) {
                    
highlightedDates = $.extend(true, [], options.highlightedDates);
                    $.
each(_options.highlightedPeriods, function (indexvalue) {
                        var 
dateTest// start date
                            
dateEnd,
                            
desc,
                            
hDate,
                            
keyDate,
                            
exDesc,
                            
style;
                        if ($.
isArray(value)) {
                            
dateTest value[0];
                            
dateEnd value[1];
                            
desc value[2];
                            
style value[3];
                        }
                        else {
                            var 
splitData = $.map(value.split(','), $.trim);
                            
dateTest dateHelper.parseDate(splitData[0], options.formatDate);
                            
dateEnd dateHelper.parseDate(splitData[1], options.formatDate);
                            
desc splitData[2];
                            
style splitData[3];
                        }

                        while (
dateTest <= dateEnd) {
                            
hDate = new HighlightedDate(dateTestdescstyle);
                            
keyDate dateHelper.formatDate(dateTestoptions.formatDate);
                            
dateTest.setDate(dateTest.getDate() + 1);
                            if (
highlightedDates[keyDate] !== undefined) {
                                
exDesc highlightedDates[keyDate].desc;
                                if (
exDesc && exDesc.length && hDate.desc && hDate.desc.length) {
                                    
highlightedDates[keyDate].desc exDesc "n" hDate.desc;
                                }
                            } else {
                                
highlightedDates[keyDate] = hDate;
                            }
                        }
                    });

                    
options.highlightedDates = $.extend(true, [], highlightedDates);
                }

                if (
_options.disabledDates && $.isArray(_options.disabledDates) && _options.disabledDates.length) {
                    
options.disabledDates = $.extend(true, [], _options.disabledDates);
                }

                if (
_options.disabledWeekDays && $.isArray(_options.disabledWeekDays) && _options.disabledWeekDays.length) {
                    
options.disabledWeekDays = $.extend(true, [], _options.disabledWeekDays);
                }

                if ((
options.open || options.opened) && (!options.inline)) {
                    
input.trigger('open.xdsoft');
                }

                if (
options.inline) {
                    
triggerAfterOpen true;
                    
datetimepicker.addClass('xdsoft_inline');
                    
input.after(datetimepicker).hide();
                }

                if (
options.inverseButton) {
                    
options.next 'xdsoft_prev';
                    
options.prev 'xdsoft_next';
                }

                if (
options.datepicker) {
                    
datepicker.addClass('active');
                } else {
                    
datepicker.removeClass('active');
                }

                if (
options.timepicker) {
                    
timepicker.addClass('active');
                } else {
                    
timepicker.removeClass('active');
                }

                if (
options.value) {
                    
_xdsoft_datetime.setCurrentTime(options.value);
                    if (
input && input.val) {
                        
input.val(_xdsoft_datetime.str);
                    }
                }

                if (
isNaN(options.dayOfWeekStart)) {
                    
options.dayOfWeekStart 0;
                } else {
                    
options.dayOfWeekStart parseInt(options.dayOfWeekStart10) % 7;
                }

                if (!
options.timepickerScrollbar) {
                    
timeboxparent.xdsoftScroller('hide');
                }

                if (
options.minDate && /^[+-](.*)$/.test(options.minDate)) {
                    
options.minDate dateHelper.formatDate(_xdsoft_datetime.strToDateTime(options.minDate), options.formatDate);
                }

                if (
options.maxDate &&  /^[+-](.*)$/.test(options.maxDate)) {
                    
options.maxDate dateHelper.formatDate(_xdsoft_datetime.strToDateTime(options.maxDate), options.formatDate);
                }

                
applyButton.toggle(options.showApplyButton);

                
mounth_picker
                    
.find('.xdsoft_today_button')
                        .
css('visibility', !options.todayButton 'hidden' 'visible');

                
mounth_picker
                    
.find('.' options.prev)
                        .
css('visibility', !options.prevButton 'hidden' 'visible');

                
mounth_picker
                    
.find('.' options.next)
                        .
css('visibility', !options.nextButton 'hidden' 'visible');

                if (
options.mask) {
                    
input.off('keydown.xdsoft');

                    if (
options.mask === true) {
                        
options.mask options.format
                            
.replace(/Y/g'9999')
                            .
replace(/F/g'9999')
                            .
replace(/m/g'19')
                            .
replace(/d/g'39')
                            .
replace(/H/g'29')
                            .
replace(/i/g'59')
                            .
replace(/s/g'59');
                    }

                    if ($.
type(options.mask) === 'string') {
                        if (!
isValidValue(options.maskinput.val())) {
                            
input.val(options.mask.replace(/[0-9]/g'_'));
                            
setCaretPos(input[0], 0);
                        }

                        
input.on('keydown.xdsoft', function (event) {
                            var 
val this.value,
                                
key event.which,
                                
pos,
                                
digit;

                            if (((
key >= KEY0 && key <= KEY9) || (key >= _KEY0 && key <= _KEY9)) || (key === BACKSPACE || key === DEL)) {
                                
pos getCaretPos(this);
                                
digit = (key !== BACKSPACE && key !== DEL) ? String.fromCharCode((_KEY0 <= key && key <= _KEY9) ? key KEY0 key) : '_';

                                if ((
key === BACKSPACE || key === DEL) && pos) {
                                    
pos -= 1;
                                    
digit '_';
                                }

                                while (/[^
0-9_]/.test(options.mask.substr(pos1)) && pos options.mask.length && pos 0) {
                                    
pos += (key === BACKSPACE || key === DEL) ? -1;
                                }

                                
val val.substr(0pos) + digit val.substr(pos 1);
                                if ($.
trim(val) === '') {
                                    
val options.mask.replace(/[0-9]/g'_');
                                } else {
                                    if (
pos === options.mask.length) {
                                        
event.preventDefault();
                                        return 
false;
                                    }
                                }

                                
pos += (key === BACKSPACE || key === DEL) ? 1;
                                while (/[^
0-9_]/.test(options.mask.substr(pos1)) && pos options.mask.length && pos 0) {
                                    
pos += (key === BACKSPACE || key === DEL) ? -1;
                                }

                                if (
isValidValue(options.maskval)) {
                                    
this.value val;
                                    
setCaretPos(thispos);
                                } else if ($.
trim(val) === '') {
                                    
this.value options.mask.replace(/[0-9]/g'_');
                                } else {
                                    
input.trigger('error_input.xdsoft');
                                }
                            } else {
                                if (([
AKEYCKEYVKEYZKEYYKEY].indexOf(key) !== -&& ctrlDown) || [ESCARROWUPARROWDOWNARROWLEFTARROWRIGHTF5CTRLKEYTABENTER].indexOf(key) !== -1) {
                                    return 
true;
                                }
                            }

                            
event.preventDefault();
                            return 
false;
                        });
                    }
                }
                if (
options.validateOnBlur) {
                    
input
                        
.off('blur.xdsoft')
                        .
on('blur.xdsoft', function () {
                            if (
options.allowBlank && !$.trim($(this).val()).length) {
                                $(
this).val(null);
                                
datetimepicker.data('xdsoft_datetime').empty();
                            } else if (!
dateHelper.parseDate($(this).val(), options.format)) {
                                var 
splittedHours   = +([$(this).val()[0], $(this).val()[1]].join('')),
                                    
splittedMinutes = +([$(this).val()[2], $(this).val()[3]].join(''));

                                
// parse the numbers as 0312 => 03:12
                                
if (!options.datepicker && options.timepicker && splittedHours >= && splittedHours 24 && splittedMinutes >= && splittedMinutes 60) {
                                    $(
this).val([splittedHourssplittedMinutes].map(function (item) {
                                        return 
item item '0' item;
                                    }).
join(':'));
                                } else {
                                    $(
this).val(dateHelper.formatDate(_xdsoft_datetime.now(), options.format));
                                }

                                
datetimepicker.data('xdsoft_datetime').setCurrentTime($(this).val());
                            } else {
                                
datetimepicker.data('xdsoft_datetime').setCurrentTime($(this).val());
                            }

                            
datetimepicker.trigger('changedatetime.xdsoft');
                        });
                }
                
options.dayOfWeekStartPrev = (options.dayOfWeekStart === 0) ? options.dayOfWeekStart 1;

                
datetimepicker
                    
.trigger('xchange.xdsoft')
                    .
trigger('afterOpen.xdsoft');
            };

            
datetimepicker
                
.data('options'options)
                .
on('touchstart mousedown.xdsoft', function (event) {
                    
event.stopPropagation();
                    
event.preventDefault();
                    
yearselect.hide();
                    
monthselect.hide();
                    return 
false;
                });

            
//scroll_element = timepicker.find('.xdsoft_time_box');
            
timeboxparent.append(timebox);
            
timeboxparent.xdsoftScroller();

            
datetimepicker.on('afterOpen.xdsoft', function () {
                
timeboxparent.xdsoftScroller();
            });

            
datetimepicker
                
.append(datepicker)
                .
append(timepicker);

            if (
options.withoutCopyright !== true) {
                
datetimepicker
                    
.append(xdsoft_copyright);
            }

            
datepicker
                
.append(mounth_picker)
                .
append(calendar)
                .
append(applyButton);

            $(
options.parentID)
                .
append(datetimepicker);

            
XDSoft_datetime = function () {
                var 
_this this;
                
_this.now = function (norecursion) {
                    var 
= new Date(),
                        
date,
                        
time;

                    if (!
norecursion && options.defaultDate) {
                        
date _this.strToDateTime(options.defaultDate);
                        
d.setFullYear(date.getFullYear());
                        
d.setMonth(date.getMonth());
                        
d.setDate(date.getDate());
                    }

                    if (
options.yearOffset) {
                        
d.setFullYear(d.getFullYear() + options.yearOffset);
                    }

                    if (!
norecursion && options.defaultTime) {
                        
time _this.strtotime(options.defaultTime);
                        
d.setHours(time.getHours());
                        
d.setMinutes(time.getMinutes());
                    }
                    return 
d;
                };

                
_this.isValidDate = function (d) {
                    if (
Object.prototype.toString.call(d) !== "[object Date]") {
                        return 
false;
                    }
                    return !
isNaN(d.getTime());
                };

                
_this.setCurrentTime = function (dTime) {
                    
_this.currentTime = (typeof dTime === 'string') ? _this.strToDateTime(dTime) : _this.isValidDate(dTime) ? dTime _this.now();
                    
datetimepicker.trigger('xchange.xdsoft');
                };

                
_this.empty = function () {
                    
_this.currentTime null;
                };

                
_this.getCurrentTime = function (dTime) {
                    return 
_this.currentTime;
                };

                
_this.nextMonth = function () {

                    if (
_this.currentTime === undefined || _this.currentTime === null) {
                        
_this.currentTime _this.now();
                    }

                    var 
month _this.currentTime.getMonth() + 1,
                        
year;
                    if (
month === 12) {
                        
_this.currentTime.setFullYear(_this.currentTime.getFullYear() + 1);
                        
month 0;
                    }

                    
year _this.currentTime.getFullYear();

                    
_this.currentTime.setDate(
                        
Math.min(
                            new 
Date(_this.currentTime.getFullYear(), month 10).getDate(),
                            
_this.currentTime.getDate()
                        )
                    );
                    
_this.currentTime.setMonth(month);

                    if (
options.onChangeMonth && $.isFunction(options.onChangeMonth)) {
                        
options.onChangeMonth.call(datetimepicker_xdsoft_datetime.currentTimedatetimepicker.data('input'));
                    }

                    if (
year !== _this.currentTime.getFullYear() && $.isFunction(options.onChangeYear)) {
                        
options.onChangeYear.call(datetimepicker_xdsoft_datetime.currentTimedatetimepicker.data('input'));
                    }

                    
datetimepicker.trigger('xchange.xdsoft');
                    return 
month;
                };

                
_this.prevMonth = function () {

                    if (
_this.currentTime === undefined || _this.currentTime === null) {
                        
_this.currentTime _this.now();
                    }

                    var 
month _this.currentTime.getMonth() - 1;
                    if (
month === -1) {
                        
_this.currentTime.setFullYear(_this.currentTime.getFullYear() - 1);
                        
month 11;
                    }
                    
_this.currentTime.setDate(
                        
Math.min(
                            new 
Date(_this.currentTime.getFullYear(), month 10).getDate(),
                            
_this.currentTime.getDate()
                        )
                    );
                    
_this.currentTime.setMonth(month);
                    if (
options.onChangeMonth && $.isFunction(options.onChangeMonth)) {
                        
options.onChangeMonth.call(datetimepicker_xdsoft_datetime.currentTimedatetimepicker.data('input'));
                    }
                    
datetimepicker.trigger('xchange.xdsoft');
                    return 
month;
                };

                
_this.getWeekOfYear = function (datetime) {
                    var 
onejan = new Date(datetime.getFullYear(), 01);
                    return 
Math.ceil((((datetime onejan) / 86400000) + onejan.getDay() + 1) / 7);
                };

                
_this.strToDateTime = function (sDateTime) {
                    var 
tmpDate = [], timeOffsetcurrentTime;

                    if (
sDateTime && sDateTime instanceof Date && _this.isValidDate(sDateTime)) {
                        return 
sDateTime;
                    }

                    
tmpDate = /^(+|-)(.*)$/.exec(sDateTime);
                    if (
tmpDate) {
                        
tmpDate[2] = dateHelper.parseDate(tmpDate[2], options.formatDate);
                    }
                    if (
tmpDate  && tmpDate[2]) {
                        
timeOffset tmpDate[2].getTime() - (tmpDate[2].getTimezoneOffset()) * 60000;
                        
currentTime = new Date((_this.now(true)).getTime() + parseInt(tmpDate[1] + '1'10) * timeOffset);
                    } else {
                        
currentTime sDateTime dateHelper.parseDate(sDateTimeoptions.format) : _this.now();
                    }

                    if (!
_this.isValidDate(currentTime)) {
                        
currentTime _this.now();
                    }

                    return 
currentTime;
                };

                
_this.strToDate = function (sDate) {
                    if (
sDate && sDate instanceof Date && _this.isValidDate(sDate)) {
                        return 
sDate;
                    }

                    var 
currentTime sDate dateHelper.parseDate(sDateoptions.formatDate) : _this.now(true);
                    if (!
_this.isValidDate(currentTime)) {
                        
currentTime _this.now(true);
                    }
                    return 
currentTime;
                };

                
_this.strtotime = function (sTime) {
                    if (
sTime && sTime instanceof Date && _this.isValidDate(sTime)) {
                        return 
sTime;
                    }
                    var 
currentTime sTime dateHelper.parseDate(sTimeoptions.formatTime) : _this.now(true);
                    if (!
_this.isValidDate(currentTime)) {
                        
currentTime _this.now(true);
                    }
                    return 
currentTime;
                };

                
_this.str = function () {
                    return 
dateHelper.formatDate(_this.currentTimeoptions.format);
                };
                
_this.currentTime this.now();
            };

            
_xdsoft_datetime = new XDSoft_datetime();

            
applyButton.on('touchend click', function (e) {//pathbrite
                
e.preventDefault();
                
datetimepicker.data('changed'true);
                
_xdsoft_datetime.setCurrentTime(getCurrentValue());
                
input.val(_xdsoft_datetime.str());
                
datetimepicker.trigger('close.xdsoft');
            });
            
mounth_picker
                
.find('.xdsoft_today_button')
                .
on('touchend mousedown.xdsoft', function () {
                    
datetimepicker.data('changed'true);
                    
_xdsoft_datetime.setCurrentTime(0);
                    
datetimepicker.trigger('afterOpen.xdsoft');
                }).
on('dblclick.xdsoft', function () {
                    var 
currentDate _xdsoft_datetime.getCurrentTime(), minDatemaxDate;
                    
currentDate = new Date(currentDate.getFullYear(), currentDate.getMonth(), currentDate.getDate());
                    
minDate _xdsoft_datetime.strToDate(options.minDate);
                    
minDate = new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate());
                    if (
currentDate minDate) {
                        return;
                    }
                    
maxDate _xdsoft_datetime.strToDate(options.maxDate);
                    
maxDate = new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate());
                    if (
currentDate maxDate) {
                        return;
                    }
                    
input.val(_xdsoft_datetime.str());
                    
input.trigger('change');
                    
datetimepicker.trigger('close.xdsoft');
                });
            
mounth_picker
                
.find('.xdsoft_prev,.xdsoft_next')
                .
on('touchend mousedown.xdsoft', function () {
                    var 
$this = $(this),
                        
timer 0,
                        
stop false;

                    (function 
arguments_callee1(v) {
                        if (
$this.hasClass(options.next)) {
                            
_xdsoft_datetime.nextMonth();
                        } else if (
$this.hasClass(options.prev)) {
                            
_xdsoft_datetime.prevMonth();
                        }
                        if (
options.monthChangeSpinner) {
                            if (!
stop) {
                                
timer setTimeout(arguments_callee1|| 100);
                            }
                        }
                    }(
500));

                    $([
document.bodywindow]).on('touchend mouseup.xdsoft', function arguments_callee2() {
                        
clearTimeout(timer);
                        
stop true;
                        $([
document.bodywindow]).off('touchend mouseup.xdsoft'arguments_callee2);
                    });
                });

            
timepicker
                
.find('.xdsoft_prev,.xdsoft_next')
                .
on('touchend mousedown.xdsoft', function () {
                    var 
$this = $(this),
                        
timer 0,
                        
stop false,
                        
period 110;
                    (function 
arguments_callee4(v) {
                        var 
pheight timeboxparent[0].clientHeight,
                            
height timebox[0].offsetHeight,
                            
top Math.abs(parseInt(timebox.css('marginTop'), 10));
                        if (
$this.hasClass(options.next) && (height pheight) - options.timeHeightInTimePicker >= top) {
                            
timebox.css('marginTop''-' + (top options.timeHeightInTimePicker) + 'px');
                        } else if (
$this.hasClass(options.prev) && top options.timeHeightInTimePicker >= 0) {
                            
timebox.css('marginTop''-' + (top options.timeHeightInTimePicker) + 'px');
                        }
                        
timeboxparent.trigger('scroll_element.xdsoft_scroller', [Math.abs(parseInt(timebox.css('marginTop'), 10) / (height pheight))]);
                        
period = (period 10) ? 10 period 10;
                        if (!
stop) {
                            
timer setTimeout(arguments_callee4|| period);
                        }
                    }(
500));
                    $([
document.bodywindow]).on('touchend mouseup.xdsoft', function arguments_callee5() {
                        
clearTimeout(timer);
                        
stop true;
                        $([
document.bodywindow])
                            .
off('touchend mouseup.xdsoft'arguments_callee5);
                    });
                });

            
xchangeTimer 0;
            
// base handler - generating a calendar and timepicker
            
datetimepicker
                
.on('xchange.xdsoft', function (event) {
                    
clearTimeout(xchangeTimer);
                    
xchangeTimer setTimeout(function () {

                        if (
_xdsoft_datetime.currentTime === undefined || _xdsoft_datetime.currentTime === null) {
                            
_xdsoft_datetime.currentTime _xdsoft_datetime.now();
                        }

                        var 
table =    '',
                            
start = new Date(_xdsoft_datetime.currentTime.getFullYear(), _xdsoft_datetime.currentTime.getMonth(), 11200),
                            
0,
                            
j,
                            
today _xdsoft_datetime.now(),
                            
maxDate false,
                            
minDate false,
                            
hDate,
                            
day,
                            
d,
                            
y,
                            
m,
                            
w,
                            
classes = [],
                            
customDateSettings,
                            
newRow true,
                            
time '',
                            
'',
                            
line_time,
                            
description;

                        while (
start.getDay() !== options.dayOfWeekStart) {
                            
start.setDate(start.getDate() - 1);
                        }

                        
table += '<table><thead><tr>';

                        if (
options.weeks) {
                            
table += '<th></th>';
                        }

                        for (
07+= 1) {
                            
table += '<th>' options.i18n[globalLocale].dayOfWeekShort[(options.dayOfWeekStart) % 7] + '</th>';
                        }

                        
table += '</tr></thead>';
                        
table += '<tbody>';

                        if (
options.maxDate !== false) {
                            
maxDate _xdsoft_datetime.strToDate(options.maxDate);
                            
maxDate = new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate(), 235959999);
                        }

                        if (
options.minDate !== false) {
                            
minDate _xdsoft_datetime.strToDate(options.minDate);
                            
minDate = new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate());
                        }

                        while (
_xdsoft_datetime.currentTime.countDaysInMonth() || start.getDay() !== options.dayOfWeekStart || _xdsoft_datetime.currentTime.getMonth() === start.getMonth()) {
                            
classes = [];
                            
+= 1;

                            
day start.getDay();
                            
start.getDate();
                            
start.getFullYear();
                            
start.getMonth();
                            
_xdsoft_datetime.getWeekOfYear(start);
                            
description '';

                            
classes.push('xdsoft_date');

                            if (
options.beforeShowDay && $.isFunction(options.beforeShowDay.call)) {
                                
customDateSettings options.beforeShowDay.call(datetimepickerstart);
                            } else {
                                
customDateSettings null;
                            }

                            if ((
maxDate !== false && start maxDate) || (minDate !== false && start minDate) || (customDateSettings && customDateSettings[0] === false)) {
                                
classes.push('xdsoft_disabled');
                            } else if (
options.disabledDates.indexOf(dateHelper.formatDate(startoptions.formatDate)) !== -1) {
                                
classes.push('xdsoft_disabled');
                            } else if (
options.disabledWeekDays.indexOf(day) !== -1) {
                                
classes.push('xdsoft_disabled');
                            }

                            if (
customDateSettings && customDateSettings[1] !== "") {
                                
classes.push(customDateSettings[1]);
                            }

                            if (
_xdsoft_datetime.currentTime.getMonth() !== m) {
                                
classes.push('xdsoft_other_month');
                            }

                            if ((
options.defaultSelect || datetimepicker.data('changed')) && dateHelper.formatDate(_xdsoft_datetime.currentTimeoptions.formatDate) === dateHelper.formatDate(startoptions.formatDate)) {
                                
classes.push('xdsoft_current');
                            }

                            if (
dateHelper.formatDate(todayoptions.formatDate) === dateHelper.formatDate(startoptions.formatDate)) {
                                
classes.push('xdsoft_today');
                            }

                            if (
start.getDay() === || start.getDay() === || options.weekends.indexOf(dateHelper.formatDate(startoptions.formatDate)) !== -1) {
                                
classes.push('xdsoft_weekend');
                            }

                            if (
options.highlightedDates[dateHelper.formatDate(startoptions.formatDate)] !== undefined) {
                                
hDate options.highlightedDates[dateHelper.formatDate(startoptions.formatDate)];
                                
classes.push(hDate.style === undefined 'xdsoft_highlighted_default' hDate.style);
                                
description hDate.desc === undefined '' hDate.desc;
                            }

                            if (
options.beforeShowDay && $.isFunction(options.beforeShowDay)) {
                                
classes.push(options.beforeShowDay(start));
                            }

                            if (
newRow) {
                                
table += '<tr>';
                                
newRow false;
                                if (
options.weeks) {
                                    
table += '<th>' '</th>';
                                }
                            }

                            
table += '<td data-date="' '" data-month="' '" data-year="' '"' ' class="xdsoft_date xdsoft_day_of_week' start.getDay() + ' ' classes.join(' ') + '" title="' description '">' +
                                        
'<div>' '</div>' +
                                    
'</td>';

                            if (
start.getDay() === options.dayOfWeekStartPrev) {
                                
table += '</tr>';
                                
newRow true;
                            }

                            
start.setDate(1);
                        }
                        
table += '</tbody></table>';

                        
calendar.html(table);

                        
mounth_picker.find('.xdsoft_label span').eq(0).text(options.i18n[globalLocale].months[_xdsoft_datetime.currentTime.getMonth()]);
                        
mounth_picker.find('.xdsoft_label span').eq(1).text(_xdsoft_datetime.currentTime.getFullYear());

                        
// generate timebox
                        
time '';
                        
'';
                        
'';

                        
line_time = function line_time(hm) {
                            var 
now _xdsoft_datetime.now(), optionDateTimecurrent_time,
                                
isALlowTimesInit options.allowTimes && $.isArray(options.allowTimes) && options.allowTimes.length;
                            
now.setHours(h);
                            
parseInt(now.getHours(), 10);
                            
now.setMinutes(m);
                            
parseInt(now.getMinutes(), 10);
                            
optionDateTime = new Date(_xdsoft_datetime.currentTime);
                            
optionDateTime.setHours(h);
                            
optionDateTime.setMinutes(m);
                            
classes = [];
                            if ((
options.minDateTime !== false && options.minDateTime optionDateTime) || (options.maxTime !== false && _xdsoft_datetime.strtotime(options.maxTime).getTime() < now.getTime()) || (options.minTime !== false && _xdsoft_datetime.strtotime(options.minTime).getTime() > now.getTime())) {
                                
classes.push('xdsoft_disabled');
                            }
                            if ((
options.minDateTime !== false && options.minDateTime optionDateTime) || ((options.disabledMinTime !== false && now.getTime() > _xdsoft_datetime.strtotime(options.disabledMinTime).getTime()) && (options.disabledMaxTime !== false && now.getTime() < _xdsoft_datetime.strtotime(options.disabledMaxTime).getTime()))) {
                                
classes.push('xdsoft_disabled');
                            }

                            
current_time = new Date(_xdsoft_datetime.currentTime);
                            
current_time.setHours(parseInt(_xdsoft_datetime.currentTime.getHours(), 10));

                            if (!
isALlowTimesInit) {
                                
current_time.setMinutes(Math[options.roundTime](_xdsoft_datetime.currentTime.getMinutes() / options.step) * options.step);
                            }

                            if ((
options.initTime || options.defaultSelect || datetimepicker.data('changed')) && current_time.getHours() === parseInt(h10) && ((!isALlowTimesInit && options.step 59) || current_time.getMinutes() === parseInt(m10))) {
                                if (
options.defaultSelect || datetimepicker.data('changed')) {
                                    
classes.push('xdsoft_current');
                                } else if (
options.initTime) {
                                    
classes.push('xdsoft_init_time');
                                }
                            }
                            if (
parseInt(today.getHours(), 10) === parseInt(h10) && parseInt(today.getMinutes(), 10) === parseInt(m10)) {
                                
classes.push('xdsoft_today');
                            }
                            
time += '<div class="xdsoft_time ' classes.join(' ') + '" data-hour="' '" data-minute="' '">' dateHelper.formatDate(nowoptions.formatTime) + '</div>';
                        };

                        if (!
options.allowTimes || !$.isArray(options.allowTimes) || !options.allowTimes.length) {
                            for (
00< (options.hours12 12 24); += 1) {
                                for (
060+= options.step) {
                                    
= (10 '0' '') + i;
                                    
= (10 '0' '') + j;
                                    
line_time(hm);
                                }
                            }
                        } else {
                            for (
0options.allowTimes.length+= 1) {
                                
_xdsoft_datetime.strtotime(options.allowTimes[i]).getHours();
                                
_xdsoft_datetime.strtotime(options.allowTimes[i]).getMinutes();
                                
line_time(hm);
                            }
                        }

                        
timebox.html(time);

                        
opt '';
                        
0;

                        for (
parseInt(options.yearStart10) + options.yearOffset<= parseInt(options.yearEnd10) + options.yearOffset+= 1) {
                            
opt += '<div class="xdsoft_option ' + (_xdsoft_datetime.currentTime.getFullYear() === 'xdsoft_current' '') + '" data-value="' '">' '</div>';
                        }
                        
yearselect.children().eq(0)
                                                .
html(opt);

                        for (
parseInt(options.monthStart10), opt ''<= parseInt(options.monthEnd10); += 1) {
                            
opt += '<div class="xdsoft_option ' + (_xdsoft_datetime.currentTime.getMonth() === 'xdsoft_current' '') + '" data-value="' '">' options.i18n[globalLocale].months[i] + '</div>';
                        }
                        
monthselect.children().eq(0).html(opt);
                        $(
datetimepicker)
                            .
trigger('generate.xdsoft');
                    }, 
10);
                    
event.stopPropagation();
                })
                .
on('afterOpen.xdsoft', function () {
                    if (
options.timepicker) {
                        var 
classTypepheightheighttop;
                        if (
timebox.find('.xdsoft_current').length) {
                            
classType '.xdsoft_current';
                        } else if (
timebox.find('.xdsoft_init_time').length) {
                            
classType '.xdsoft_init_time';
                        }
                        if (
classType) {
                            
pheight timeboxparent[0].clientHeight;
                            
height timebox[0].offsetHeight;
                            
top timebox.find(classType).index() * options.timeHeightInTimePicker 1;
                            if ((
height pheight) < top) {
                                
top height pheight;
                            }
                            
timeboxparent.trigger('scroll_element.xdsoft_scroller', [parseInt(top10) / (height pheight)]);
                        } else {
                            
timeboxparent.trigger('scroll_element.xdsoft_scroller', [0]);
                        }
                    }
                });

            
timerclick 0;
            
calendar
                
.on('touchend click.xdsoft''td', function (xdevent) {
                    
xdevent.stopPropagation();  // Prevents closing of Pop-ups, Modals and Flyouts in Bootstrap
                    
timerclick += 1;
                    var 
$this = $(this),
                        
currentTime _xdsoft_datetime.currentTime;

                    if (
currentTime === undefined || currentTime === null) {
                        
_xdsoft_datetime.currentTime _xdsoft_datetime.now();
                        
currentTime _xdsoft_datetime.currentTime;
                    }

                    if (
$this.hasClass('xdsoft_disabled')) {
                        return 
false;
                    }

                    
currentTime.setDate(1);
                    
currentTime.setFullYear($this.data('year'));
                    
currentTime.setMonth($this.data('month'));
                    
currentTime.setDate($this.data('date'));

                    
datetimepicker.trigger('select.xdsoft', [currentTime]);

                    
input.val(_xdsoft_datetime.str());

                    if (
options.onSelectDate &&    $.isFunction(options.onSelectDate)) {
                        
options.onSelectDate.call(datetimepicker_xdsoft_datetime.currentTimedatetimepicker.data('input'), xdevent);
                    }

                    
datetimepicker.data('changed'true);
                    
datetimepicker.trigger('xchange.xdsoft');
                    
datetimepicker.trigger('changedatetime.xdsoft');
                    if ((
timerclick || (options.closeOnDateSelect === true || (options.closeOnDateSelect === false && !options.timepicker))) && !options.inline) {
                        
datetimepicker.trigger('close.xdsoft');
                    }
                    
setTimeout(function () {
                        
timerclick 0;
                    }, 
200);
                });

            
timebox
                
.on('touchend click.xdsoft''div', function (xdevent) {
                    
xdevent.stopPropagation();
                    var 
$this = $(this),
                        
currentTime _xdsoft_datetime.currentTime;

                    if (
currentTime === undefined || currentTime === null) {
                        
_xdsoft_datetime.currentTime _xdsoft_datetime.now();
                        
currentTime _xdsoft_datetime.currentTime;
                    }

                    if (
$this.hasClass('xdsoft_disabled')) {
                        return 
false;
                    }
                    
currentTime.setHours($this.data('hour'));
                    
currentTime.setMinutes($this.data('minute'));
                    
datetimepicker.trigger('select.xdsoft', [currentTime]);

                    
datetimepicker.data('input').val(_xdsoft_datetime.str());

                    if (
options.onSelectTime && $.isFunction(options.onSelectTime)) {
                        
options.onSelectTime.call(datetimepicker_xdsoft_datetime.currentTimedatetimepicker.data('input'), xdevent);
                    }
                    
datetimepicker.data('changed'true);
                    
datetimepicker.trigger('xchange.xdsoft');
                    
datetimepicker.trigger('changedatetime.xdsoft');
                    if (
options.inline !== true && options.closeOnTimeSelect === true) {
                        
datetimepicker.trigger('close.xdsoft');
                    }
                });


            
datepicker
                
.on('mousewheel.xdsoft', function (event) {
                    if (!
options.scrollMonth) {
                        return 
true;
                    }
                    if (
event.deltaY 0) {
                        
_xdsoft_datetime.nextMonth();
                    } else {
                        
_xdsoft_datetime.prevMonth();
                    }
                    return 
false;
                });

            
input
                
.on('mousewheel.xdsoft', function (event) {
                    if (!
options.scrollInput) {
                        return 
true;
                    }
                    if (!
options.datepicker && options.timepicker) {
                        
current_time_index timebox.find('.xdsoft_current').length timebox.find('.xdsoft_current').eq(0).index() : 0;
                        if (
current_time_index event.deltaY >= && current_time_index event.deltaY timebox.children().length) {
                            
current_time_index += event.deltaY;
                        }
                        if (
timebox.children().eq(current_time_index).length) {
                            
timebox.children().eq(current_time_index).trigger('mousedown');
                        }
                        return 
false;
                    }
                    if (
options.datepicker && !options.timepicker) {
                        
datepicker.trigger(event, [event.deltaYevent.deltaXevent.deltaY]);
                        if (
input.val) {
                            
input.val(_xdsoft_datetime.str());
                        }
                        
datetimepicker.trigger('changedatetime.xdsoft');
                        return 
false;
                    }
                });

            
datetimepicker
                
.on('changedatetime.xdsoft', function (event) {
                    if (
options.onChangeDateTime && $.isFunction(options.onChangeDateTime)) {
                        var 
$input datetimepicker.data('input');
                        
options.onChangeDateTime.call(datetimepicker_xdsoft_datetime.currentTime$inputevent);
                        
delete options.value;
                        
$input.trigger('change');
                    }
                })
                .
on('generate.xdsoft', function () {
                    if (
options.onGenerate && $.isFunction(options.onGenerate)) {
                        
options.onGenerate.call(datetimepicker_xdsoft_datetime.currentTimedatetimepicker.data('input'));
                    }
                    if (
triggerAfterOpen) {
                        
datetimepicker.trigger('afterOpen.xdsoft');
                        
triggerAfterOpen false;
                    }
                })
                .
on('click.xdsoft', function (xdevent) {
                    
xdevent.stopPropagation();
                });

            
current_time_index 0;

            
setPos = function () {
                var 
offset datetimepicker.data('input').offset(), datetimepickerelement datetimepicker.data('input')[0], top offset.top datetimepickerelement.offsetHeight 1left offset.leftposition "absolute"node;
                if (
datetimepicker.data('input').parent().css('direction') == 'rtl')
                    
left -= (datetimepicker.outerWidth() - datetimepicker.data('input').outerWidth());
                if (
options.fixed) {
                    
top -= $(window).scrollTop();
                    
left -= $(window).scrollLeft();
                    
position "fixed";
                } else {
                    if (
top datetimepickerelement.offsetHeight > $(window).height() + $(window).scrollTop()) {
                        
top offset.top datetimepickerelement.offsetHeight 1;
                    }
                    if (
top 0) {
                        
top 0;
                    }
                    if (
left datetimepickerelement.offsetWidth > $(window).width()) {
                        
left = $(window).width() - datetimepickerelement.offsetWidth;
                    }
                }

                
node datetimepicker[0];
                do {
                    
node node.parentNode;
                    if (
window.getComputedStyle(node).getPropertyValue('position') === 'relative' && $(window).width() >= node.offsetWidth) {
                        
left left - (($(window).width() - node.offsetWidth) / 2);
                        break;
                    }
                } while (
node.nodeName !== 'HTML');
                
datetimepicker.css({
                    
leftleft,
                    
toptop,
                    
positionposition
                
});
            };
            
datetimepicker
                
.on('open.xdsoft', function (event) {
                    var 
onShow true;
                    if (
options.onShow && $.isFunction(options.onShow)) {
                        
onShow options.onShow.call(datetimepicker_xdsoft_datetime.currentTimedatetimepicker.data('input'), event);
                    }
                    if (
onShow !== false) {
                        
datetimepicker.show();
                        
setPos();
                        $(
window)
                            .
off('resize.xdsoft'setPos)
                            .
on('resize.xdsoft'setPos);

                        if (
options.closeOnWithoutClick) {
                            $([
document.bodywindow]).on('touchstart mousedown.xdsoft', function arguments_callee6() {
                                
datetimepicker.trigger('close.xdsoft');
                                $([
document.bodywindow]).off('touchstart mousedown.xdsoft'arguments_callee6);
                            });
                        }
                    }
                })
                .
on('close.xdsoft', function (event) {
                    var 
onClose true;
                    
mounth_picker
                        
.find('.xdsoft_month,.xdsoft_year')
                            .
find('.xdsoft_select')
                                .
hide();
                    if (
options.onClose && $.isFunction(options.onClose)) {
                        
onClose options.onClose.call(datetimepicker_xdsoft_datetime.currentTimedatetimepicker.data('input'), event);
                    }
                    if (
onClose !== false && !options.opened && !options.inline) {
                        
datetimepicker.hide();
                    }
                    
event.stopPropagation();
                })
                .
on('toggle.xdsoft', function (event) {
                    if (
datetimepicker.is(':visible')) {
                        
datetimepicker.trigger('close.xdsoft');
                    } else {
                        
datetimepicker.trigger('open.xdsoft');
                    }
                })
                .
data('input'input);

            
timer 0;
            
timer1 0;

            
datetimepicker.data('xdsoft_datetime'_xdsoft_datetime);
            
datetimepicker.setOptions(options);

            function 
getCurrentValue() {
                var 
ct falsetime;

                if (
options.startDate) {
                    
ct _xdsoft_datetime.strToDate(options.startDate);
                } else {
                    
ct options.value || ((input && input.val && input.val()) ? input.val() : '');
                    if (
ct) {
                        
ct _xdsoft_datetime.strToDateTime(ct);
                    } else if (
options.defaultDate) {
                        
ct _xdsoft_datetime.strToDateTime(options.defaultDate);
                        if (
options.defaultTime) {
                            
time _xdsoft_datetime.strtotime(options.defaultTime);
                            
ct.setHours(time.getHours());
                            
ct.setMinutes(time.getMinutes());
                        }
                    }
                }

                if (
ct && _xdsoft_datetime.isValidDate(ct)) {
                    
datetimepicker.data('changed'true);
                } else {
                    
ct '';
                }

                return 
ct || 0;
            }

            
_xdsoft_datetime.setCurrentTime(getCurrentValue());

            
input
                
.data('xdsoft_datetimepicker'datetimepicker)
                .
on('open.xdsoft focusin.xdsoft mousedown.xdsoft touchstart', function (event) {
                    if (
input.is(':disabled') || (input.data('xdsoft_datetimepicker').is(':visible') && options.closeOnInputClick)) {
                        return;
                    }
                    
clearTimeout(timer);
                    
timer setTimeout(function () {
                        if (
input.is(':disabled')) {
                            return;
                        }

                        
triggerAfterOpen true;
                        
_xdsoft_datetime.setCurrentTime(getCurrentValue());

                        
datetimepicker.trigger('open.xdsoft');
                    }, 
100);
                })
                .
on('keydown.xdsoft', function (event) {
                    var 
val this.valueelementSelector,
                        
key event.which;
                    if ([
ENTER].indexOf(key) !== -&& options.enterLikeTab) {
                        
elementSelector = $("input:visible,textarea:visible,button:visible,a:visible");
                        
datetimepicker.trigger('close.xdsoft');
                        
elementSelector.eq(elementSelector.index(this) + 1).focus();
                        return 
false;
                    }
                    if ([
TAB].indexOf(key) !== -1) {
                        
datetimepicker.trigger('close.xdsoft');
                        return 
true;
                    }
                });
        };
        
destroyDateTimePicker = function (input) {
            var 
datetimepicker input.data('xdsoft_datetimepicker');
            if (
datetimepicker) {
                
datetimepicker.data('xdsoft_datetime'null);
                
datetimepicker.remove();
                
input
                    
.data('xdsoft_datetimepicker'null)
                    .
off('.xdsoft');
                $(
window).off('resize.xdsoft');
                $([
windowdocument.body]).off('mousedown.xdsoft touchstart');
                if (
input.unmousewheel) {
                    
input.unmousewheel();
                }
            }
        };
        $(
document)
            .
off('keydown.xdsoftctrl keyup.xdsoftctrl')
            .
on('keydown.xdsoftctrl', function (e) {
                if (
e.keyCode === CTRLKEY) {
                    
ctrlDown true;
                }
            })
            .
on('keyup.xdsoftctrl', function (e) {
                if (
e.keyCode === CTRLKEY) {
                    
ctrlDown false;
                }
            });
        return 
this.each(function () {
            var 
datetimepicker = $(this).data('xdsoft_datetimepicker'), $input;
            if (
datetimepicker) {
                if ($.
type(opt) === 'string') {
                    switch (
opt) {
                    case 
'show':
                        $(
this).select().focus();
                        
datetimepicker.trigger('open.xdsoft');
                        break;
                    case 
'hide':
                        
datetimepicker.trigger('close.xdsoft');
                        break;
                    case 
'toggle':
                        
datetimepicker.trigger('toggle.xdsoft');
                        break;
                    case 
'destroy':
                        
destroyDateTimePicker($(this));
                        break;
                    case 
'reset':
                        
this.value this.defaultValue;
                        if (!
this.value || !datetimepicker.data('xdsoft_datetime').isValidDate(dateHelper.parseDate(this.valueoptions.format))) {
                            
datetimepicker.data('changed'false);
                        }
                        
datetimepicker.data('xdsoft_datetime').setCurrentTime(this.value);
                        break;
                    case 
'validate':
                        
$input datetimepicker.data('input');
                        
$input.trigger('blur.xdsoft');
                        break;
                    }
                } else {
                    
datetimepicker
                        
.setOptions(opt);
                }
                return 
0;
            }
            if ($.
type(opt) !== 'string') {
                if (!
options.lazyInit || options.open || options.inline) {
                    
createDateTimePicker($(this));
                } else {
                    
lazyInit($(this));
                }
            }
        });
    };
    $.fn.
datetimepicker.defaults default_options;

    function 
HighlightedDate(datedescstyle) {
        
"use strict";
        
this.date date;
        
this.desc desc;
        
this.style style;
    }

}));
/*!
 * jQuery Mousewheel 3.1.13
 *
 * Copyright jQuery Foundation and other contributors
 * Released under the MIT license
 * http://jquery.org/license
 */

(function (factory) {
    if ( 
typeof define === 'function' && define.amd ) {
        
// AMD. Register as an anonymous module.
        
define(['jquery'], factory);
    } else if (
typeof exports === 'object') {
        
// Node/CommonJS style for Browserify
        
module.exports factory;
    } else {
        
// Browser globals
        
factory(jQuery);
    }
}(function ($) {

    var 
toFix  = ['wheel''mousewheel''DOMMouseScroll''MozMousePixelScroll'],
        
toBind = ( 'onwheel' in document || document.documentMode >= ) ?
                    [
'wheel'] : ['mousewheel''DomMouseScroll''MozMousePixelScroll'],
        
slice  = Array.prototype.slice,
        
nullLowestDeltaTimeoutlowestDelta;

    if ( $.
event.fixHooks ) {
        for ( var 
toFix.lengthi; ) {
            $.
event.fixHookstoFix[--i] ] = $.event.mouseHooks;
        }
    }

    var 
special = $.event.special.mousewheel = {
        
version'3.1.12',

        
setup: function() {
            if ( 
this.addEventListener ) {
                for ( var 
toBind.lengthi; ) {
                    
this.addEventListenertoBind[--i], handlerfalse );
                }
            } else {
                
this.onmousewheel handler;
            }
            
// Store the line height and page height for this particular element
            
$.data(this'mousewheel-line-height'special.getLineHeight(this));
            $.
data(this'mousewheel-page-height'special.getPageHeight(this));
        },

        
teardown: function() {
            if ( 
this.removeEventListener ) {
                for ( var 
toBind.lengthi; ) {
                    
this.removeEventListenertoBind[--i], handlerfalse );
                }
            } else {
                
this.onmousewheel null;
            }
            
// Clean up the data we added to the element
            
$.removeData(this'mousewheel-line-height');
            $.
removeData(this'mousewheel-page-height');
        },

        
getLineHeight: function(elem) {
            var 
$elem = $(elem),
                
$parent $elem['offsetParent' in $.fn ? 'offsetParent' 'parent']();
            if (!
$parent.length) {
                
$parent = $('body');
            }
            return 
parseInt($parent.css('fontSize'), 10) || parseInt($elem.css('fontSize'), 10) || 16;
        },

        
getPageHeight: function(elem) {
            return $(
elem).height();
        },

        
settings: {
            
adjustOldDeltastrue// see shouldAdjustOldDeltas() below
            
normalizeOffsettrue  // calls getBoundingClientRect for each event
        
}
    };

    $.fn.
extend({
        
mousewheel: function(fn) {
            return fn ? 
this.bind('mousewheel', fn) : this.trigger('mousewheel');
        },

        
unmousewheel: function(fn) {
            return 
this.unbind('mousewheel', fn);
        }
    });


    function 
handler(event) {
        var 
orgEvent   event || window.event,
            
args       slice.call(arguments1),
            
delta      0,
            
deltaX     0,
            
deltaY     0,
            
absDelta   0,
            
offsetX    0,
            
offsetY    0;
        
event = $.event.fix(orgEvent);
        
event.type 'mousewheel';

        
// Old school scrollwheel delta
        
if ( 'detail'      in orgEvent ) { deltaY orgEvent.detail * -1;      }
        if ( 
'wheelDelta'  in orgEvent ) { deltaY orgEvent.wheelDelta;       }
        if ( 
'wheelDeltaY' in orgEvent ) { deltaY orgEvent.wheelDeltaY;      }
        if ( 
'wheelDeltaX' in orgEvent ) { deltaX orgEvent.wheelDeltaX * -1; }

        
// Firefox < 17 horizontal scrolling related to DOMMouseScroll event
        
if ( 'axis' in orgEvent && orgEvent.axis === orgEvent.HORIZONTAL_AXIS ) {
            
deltaX deltaY * -1;
            
deltaY 0;
        }

        
// Set delta to be deltaY or deltaX if deltaY is 0 for backwards compatabilitiy
        
delta deltaY === deltaX deltaY;

        
// New school wheel delta (wheel event)
        
if ( 'deltaY' in orgEvent ) {
            
deltaY orgEvent.deltaY * -1;
            
delta  deltaY;
        }
        if ( 
'deltaX' in orgEvent ) {
            
deltaX orgEvent.deltaX;
            if ( 
deltaY === ) { delta  deltaX * -1; }
        }

        
// No change actually happened, no reason to go any further
        
if ( deltaY === && deltaX === ) { return; }

        
// Need to convert lines and pages to pixels if we aren't already in pixels
        // There are three delta modes:
        //   * deltaMode 0 is by pixels, nothing to do
        //   * deltaMode 1 is by lines
        //   * deltaMode 2 is by pages
        
if ( orgEvent.deltaMode === ) {
            var 
lineHeight = $.data(this'mousewheel-line-height');
            
delta  *= lineHeight;
            
deltaY *= lineHeight;
            
deltaX *= lineHeight;
        } else if ( 
orgEvent.deltaMode === ) {
            var 
pageHeight = $.data(this'mousewheel-page-height');
            
delta  *= pageHeight;
            
deltaY *= pageHeight;
            
deltaX *= pageHeight;
        }

        
// Store lowest absolute delta to normalize the delta values
        
absDelta Math.maxMath.abs(deltaY), Math.abs(deltaX) );

        if ( !
lowestDelta || absDelta lowestDelta ) {
            
lowestDelta absDelta;

            
// Adjust older deltas if necessary
            
if ( shouldAdjustOldDeltas(orgEventabsDelta) ) {
                
lowestDelta /= 40;
            }
        }

        
// Adjust older deltas if necessary
        
if ( shouldAdjustOldDeltas(orgEventabsDelta) ) {
            
// Divide all the things by 40!
            
delta  /= 40;
            
deltaX /= 40;
            
deltaY /= 40;
        }

        
// Get a whole, normalized value for the deltas
        
delta  Mathdelta  >= 'floor' 'ceil' ](delta  lowestDelta);
        
deltaX MathdeltaX >= 'floor' 'ceil' ](deltaX lowestDelta);
        
deltaY MathdeltaY >= 'floor' 'ceil' ](deltaY lowestDelta);

        
// Normalise offsetX and offsetY properties
        
if ( special.settings.normalizeOffset && this.getBoundingClientRect ) {
            var 
boundingRect this.getBoundingClientRect();
            
offsetX event.clientX boundingRect.left;
            
offsetY event.clientY boundingRect.top;
        }

        
// Add information to the event object
        
event.deltaX deltaX;
        
event.deltaY deltaY;
        
event.deltaFactor lowestDelta;
        
event.offsetX offsetX;
        
event.offsetY offsetY;
        
// Go ahead and set deltaMode to 0 since we converted to pixels
        // Although this is a little odd since we overwrite the deltaX/Y
        // properties with normalized deltas.
        
event.deltaMode 0;

        
// Add event and delta to the front of the arguments
        
args.unshift(eventdeltadeltaXdeltaY);

        
// Clearout lowestDelta after sometime to better
        // handle multiple device types that give different
        // a different lowestDelta
        // Ex: trackpad = 3 and mouse wheel = 120
        
if (nullLowestDeltaTimeout) { clearTimeout(nullLowestDeltaTimeout); }
        
nullLowestDeltaTimeout setTimeout(nullLowestDelta200);

        return ($.
event.dispatch || $.event.handle).apply(thisargs);
    }

    function 
nullLowestDelta() {
        
lowestDelta null;
    }

    function 
shouldAdjustOldDeltas(orgEventabsDelta) {
        
// If this is an older event and the delta is divisable by 120,
        // then we are assuming that the browser is treating this as an
        // older mouse wheel event and that we should divide the deltas
        // by 40 to try and get a more usable deltaFactor.
        // Side note, this actually impacts the reported scroll distance
        // in older browsers and can cause scrolling to be slower than native.
        // Turn this off by setting $.event.special.mousewheel.settings.adjustOldDeltas to false.
        
return special.settings.adjustOldDeltas && orgEvent.type === 'mousewheel' && absDelta 120 === 0;
    }

}));
?>
Онлайн: 1
Реклама