//util.datetime (function ($, undefined) { var ms = $.mobiscroll; ms.datetime = { defaults: { shortyearcutoff: '+10', monthnames: ['january', 'february', 'march', 'april', 'may', 'june', 'july', 'august', 'september', 'october', 'november', 'december'], monthnamesshort: ['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec'], daynames: ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'], daynamesshort: ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'], daynamesmin: ['s', 'm', 't', 'w', 't', 'f', 's'], monthtext: 'month', amtext: 'am', pmtext: 'pm', getyear: function (d) { return d.getfullyear(); }, getmonth: function (d) { return d.getmonth(); }, getday: function (d) { return d.getdate(); }, getdate: function (y, m, d, h, i, s) { return new date(y, m, d, h || 0, i || 0, s || 0); }, getmaxdayofmonth: function (y, m) { return 32 - new date(y, m, 32).getdate(); }, getweeknumber: function (d) { // copy date so don't modify original d = new date(d); d.sethours(0, 0, 0); // set to nearest thursday: current date + 4 - current day number // make sunday's day number 7 d.setdate(d.getdate() + 4 - (d.getday() || 7)); // get first day of year var yearstart = new date(d.getfullyear(), 0, 1); // calculate full weeks to nearest thursday return math.ceil((((d - yearstart) / 86400000) + 1) / 7); } }, /** * format a date into a string value with a specified format. * @param {string} format output format. * @param {date} date date to format. * @param {object} [settings={}] settings. * @return {string} returns the formatted date string. */ formatdate: function (format, date, settings) { if (!date) { return null; } var s = $.extend({}, ms.datetime.defaults, settings), look = function (m) { // check whether a format character is doubled var n = 0; while (i + 1 < format.length && format.charat(i + 1) == m) { n++; i++; } return n; }, f1 = function (m, val, len) { // format a number, with leading zero if necessary var n = '' + val; if (look(m)) { while (n.length < len) { n = '0' + n; } } return n; }, f2 = function (m, val, s, l) { // format a name, short or long as requested return (look(m) ? l[val] : s[val]); }, i, year, output = '', literal = false; for (i = 0; i < format.length; i++) { if (literal) { if (format.charat(i) == "'" && !look("'")) { literal = false; } else { output += format.charat(i); } } else { switch (format.charat(i)) { case 'd': output += f1('d', s.getday(date), 2); break; case 'd': output += f2('d', date.getday(), s.daynamesshort, s.daynames); break; case 'o': output += f1('o', (date.gettime() - new date(date.getfullyear(), 0, 0).gettime()) / 86400000, 3); break; case 'm': output += f1('m', s.getmonth(date) + 1, 2); break; case 'm': output += f2('m', s.getmonth(date), s.monthnamesshort, s.monthnames); break; case 'y': year = s.getyear(date); output += (look('y') ? year : (year % 100 < 10 ? '0' : '') + year % 100); //output += (look('y') ? date.getfullyear() : (date.getyear() % 100 < 10 ? '0' : '') + date.getyear() % 100); break; case 'h': var h = date.gethours(); output += f1('h', (h > 12 ? (h - 12) : (h === 0 ? 12 : h)), 2); break; case 'h': output += f1('h', date.gethours(), 2); break; case 'i': output += f1('i', date.getminutes(), 2); break; case 's': output += f1('s', date.getseconds(), 2); break; case 'a': output += date.gethours() > 11 ? s.pmtext : s.amtext; break; case 'a': output += date.gethours() > 11 ? s.pmtext.touppercase() : s.amtext.touppercase(); break; case "'": if (look("'")) { output += "'"; } else { literal = true; } break; default: output += format.charat(i); } } } return output; }, /** * extract a date from a string value with a specified format. * @param {string} format input format. * @param {string} value string to parse. * @param {object} [settings={}] settings. * @return {date} returns the extracted date. */ parsedate: function (format, value, settings) { var s = $.extend({}, ms.datetime.defaults, settings), def = s.defaultvalue || new date(); if (!format || !value) { return def; } // if already a date object if (value.gettime) { return value; } value = (typeof value == 'object' ? value.tostring() : value + ''); var shortyearcutoff = s.shortyearcutoff, year = s.getyear(def), month = s.getmonth(def) + 1, day = s.getday(def), doy = -1, hours = def.gethours(), minutes = def.getminutes(), seconds = 0, //def.getseconds(), ampm = -1, literal = false, // check whether a format character is doubled lookahead = function (match) { var matches = (iformat + 1 < format.length && format.charat(iformat + 1) == match); if (matches) { iformat++; } return matches; }, getnumber = function (match) { // extract a number from the string value lookahead(match); var size = (match == '@' ? 14 : (match == '!' ? 20 : (match == 'y' ? 4 : (match == 'o' ? 3 : 2)))), digits = new regexp('^\\d{1,' + size + '}'), num = value.substr(ivalue).match(digits); if (!num) { return 0; } ivalue += num[0].length; return parseint(num[0], 10); }, getname = function (match, s, l) { // extract a name from the string value and convert to an index var names = (lookahead(match) ? l : s), i; for (i = 0; i < names.length; i++) { if (value.substr(ivalue, names[i].length).tolowercase() == names[i].tolowercase()) { ivalue += names[i].length; return i + 1; } } return 0; }, checkliteral = function () { ivalue++; }, ivalue = 0, iformat; for (iformat = 0; iformat < format.length; iformat++) { if (literal) { if (format.charat(iformat) == "'" && !lookahead("'")) { literal = false; } else { checkliteral(); } } else { switch (format.charat(iformat)) { case 'd': day = getnumber('d'); break; case 'd': getname('d', s.daynamesshort, s.daynames); break; case 'o': doy = getnumber('o'); break; case 'm': month = getnumber('m'); break; case 'm': month = getname('m', s.monthnamesshort, s.monthnames); break; case 'y': year = getnumber('y'); break; case 'h': hours = getnumber('h'); break; case 'h': hours = getnumber('h'); break; case 'i': minutes = getnumber('i'); break; case 's': seconds = getnumber('s'); break; case 'a': ampm = getname('a', [s.amtext, s.pmtext], [s.amtext, s.pmtext]) - 1; break; case 'a': ampm = getname('a', [s.amtext, s.pmtext], [s.amtext, s.pmtext]) - 1; break; case "'": if (lookahead("'")) { checkliteral(); } else { literal = true; } break; default: checkliteral(); } } } if (year < 100) { year += new date().getfullyear() - new date().getfullyear() % 100 + (year <= (typeof shortyearcutoff != 'string' ? shortyearcutoff : new date().getfullyear() % 100 + parseint(shortyearcutoff, 10)) ? 0 : -100); } if (doy > -1) { month = 1; day = doy; do { var dim = 32 - new date(year, month - 1, 32).getdate(); if (day <= dim) { break; } month++; day -= dim; } while (true); } hours = (ampm == -1) ? hours : ((ampm && hours < 12) ? (hours + 12) : (!ampm && hours == 12 ? 0 : hours)); var date = s.getdate(year, month - 1, day, hours, minutes, seconds); if (s.getyear(date) != year || s.getmonth(date) + 1 != month || s.getday(date) != day) { return def; // invalid date } return date; } }; // @deprecated since 2.11.0, backward compatibility code // --- ms.formatdate = ms.datetime.formatdate; ms.parsedate = ms.datetime.parsedate; // --- })(jquery); //datetimebase (function ($, undefined) { var ms = $.mobiscroll, datetime = ms.datetime, date = new date(), defaults = { startyear: date.getfullyear() - 100, endyear: date.getfullyear() + 9, separator: ' ', // localization dateformat: 'mm/dd/yy', dateorder: 'mmddy', timewheels: 'hhiia', timeformat: 'hh:ii a', daytext: 'day', yeartext: 'year', hourtext: 'hours', minutetext: 'minutes', ampmtext: ' ', sectext: 'seconds', nowtext: 'now' }, /** * @class mobiscroll.datetime * @extends mobiscroll * mobiscroll datetime component */ preset = function (inst) { var that = $(this), html5def = {}, format; // force format for html5 date inputs (experimental) if (that.is('input')) { switch (that.attr('type')) { case 'date': format = 'yy-mm-dd'; break; case 'datetime': format = 'yy-mm-ddthh:ii:ssz'; break; case 'datetime-local': format = 'yy-mm-ddthh:ii:ss'; break; case 'month': format = 'yy-mm'; html5def.dateorder = 'mmyy'; break; case 'time': format = 'hh:ii:ss'; break; } // check for min/max attributes var min = that.attr('min'), max = that.attr('max'); if (min) { html5def.mindate = datetime.parsedate(format, min); } if (max) { html5def.maxdate = datetime.parsedate(format, max); } } // set year-month-day order var i, k, keys, values, wg, start, end, hastime, mins, maxs, orig = $.extend({}, inst.settings), s = $.extend(inst.settings, ms.datetime.defaults, defaults, html5def, orig), offset = 0, validvalues = [], wheels = [], ord = [], o = {}, f = { y: getyear, m: getmonth, d: getday, h: gethour, i: getminute, s: getsecond, a: getampm }, invalid = s.invalid, valid = s.valid, p = s.preset, dord = s.dateorder, tord = s.timewheels, regen = dord.match(/d/), ampm = tord.match(/a/i), hampm = tord.match(/h/), hformat = p == 'datetime' ? s.dateformat + s.separator + s.timeformat : p == 'time' ? s.timeformat : s.dateformat, defd = new date(), steps = s.steps || {}, steph = steps.hour || s.stephour || 1, stepm = steps.minute || s.stepminute || 1, steps = steps.second || s.stepsecond || 1, zerobased = steps.zerobased, mind = s.mindate || new date(s.startyear, 0, 1), maxd = s.maxdate || new date(s.endyear, 11, 31, 23, 59, 59), minh = zerobased ? 0 : mind.gethours() % steph, minm = zerobased ? 0 : mind.getminutes() % stepm, mins = zerobased ? 0 : mind.getseconds() % steps, maxh = getmax(steph, minh, (hampm ? 11 : 23)), maxm = getmax(stepm, minm, 59), maxs = getmax(stepm, minm, 59); format = format || hformat; if (p.match(/date/i)) { // determine the order of year, month, day wheels $.each(['y', 'm', 'd'], function (j, v) { i = dord.search(new regexp(v, 'i')); if (i > -1) { ord.push({ o: i, v: v }); } }); ord.sort(function (a, b) { return a.o > b.o ? 1 : -1; }); $.each(ord, function (i, v) { o[v.v] = i; }); wg = []; for (k = 0; k < 3; k++) { if (k == o.y) { offset++; values = []; keys = []; start = s.getyear(mind); end = s.getyear(maxd); for (i = start; i <= end; i++) { keys.push(i); values.push((dord.match(/yy/i) ? i : (i + '').substr(2, 2)) + (s.yearsuffix || '')); } addwheel(wg, keys, values, s.yeartext); } else if (k == o.m) { offset++; values = []; keys = []; for (i = 0; i < 12; i++) { var str = dord.replace(/[dy]/gi, '').replace(/mm/, (i < 9 ? '0' + (i + 1) : i + 1) + (s.monthsuffix || '')).replace(/m/, i + 1 + (s.monthsuffix || '')); keys.push(i); values.push(str.match(/mm/) ? str.replace(/mm/, '' + s.monthnames[i] + '') : str.replace(/m/, '' + s.monthnamesshort[i] + '')); } addwheel(wg, keys, values, s.monthtext); } else if (k == o.d) { offset++; values = []; keys = []; for (i = 1; i < 32; i++) { keys.push(i); values.push((dord.match(/dd/i) && i < 10 ? '0' + i : i) + (s.daysuffix || '')); } addwheel(wg, keys, values, s.daytext); } } wheels.push(wg); } if (p.match(/time/i)) { hastime = true; // determine the order of hours, minutes, seconds wheels ord = []; $.each(['h', 'i', 's', 'a'], function (i, v) { i = tord.search(new regexp(v, 'i')); if (i > -1) { ord.push({ o: i, v: v }); } }); ord.sort(function (a, b) { return a.o > b.o ? 1 : -1; }); $.each(ord, function (i, v) { o[v.v] = offset + i; }); wg = []; for (k = offset; k < offset + 4; k++) { if (k == o.h) { offset++; values = []; keys = []; for (i = minh; i < (hampm ? 12 : 24); i += steph) { keys.push(i); values.push(hampm && i === 0 ? 12 : tord.match(/hh/i) && i < 10 ? '0' + i : i); } addwheel(wg, keys, values, s.hourtext); } else if (k == o.i) { offset++; values = []; keys = []; for (i = minm; i < 60; i += stepm) { keys.push(i); values.push(tord.match(/ii/) && i < 10 ? '0' + i : i); } addwheel(wg, keys, values, s.minutetext); } else if (k == o.s) { offset++; values = []; keys = []; for (i = mins; i < 60; i += steps) { keys.push(i); values.push(tord.match(/ss/) && i < 10 ? '0' + i : i); } addwheel(wg, keys, values, s.sectext); } else if (k == o.a) { offset++; var upper = tord.match(/a/); addwheel(wg, [0, 1], upper ? [s.amtext.touppercase(), s.pmtext.touppercase()] : [s.amtext, s.pmtext], s.ampmtext); } } wheels.push(wg); } function get(d, i, def) { if (o[i] !== undefined) { return +d[o[i]]; } if (def !== undefined) { return def; } return f[i](defd); } function addwheel(wg, k, v, lbl) { wg.push({ values: v, keys: k, label: lbl }); } function step(v, st, min, max) { return math.min(max, math.floor(v / st) * st + min); } function getyear(d) { return s.getyear(d); } function getmonth(d) { return s.getmonth(d); } function getday(d) { return s.getday(d); } function gethour(d) { var hour = d.gethours(); hour = hampm && hour >= 12 ? hour - 12 : hour; return step(hour, steph, minh, maxh); } function getminute(d) { return step(d.getminutes(), stepm, minm, maxm); } function getsecond(d) { return step(d.getseconds(), steps, mins, maxs); } function getampm(d) { return ampm && d.gethours() > 11 ? 1 : 0; } function getdate(d) { if (d === null) { return d; } var hour = get(d, 'h', 0); return s.getdate(get(d, 'y'), get(d, 'm'), get(d, 'd', 1), get(d, 'a', 0) ? hour + 12 : hour, get(d, 'i', 0), get(d, 's', 0)); } function getmax(step, min, max) { return math.floor((max - min) / step) * step + min; } function getclosestvaliddate(d, dir) { var next, prev, nextvalid = false, prevvalid = false, up = 0, down = 0; if (isvalid(d)) { return d; } if (d < mind) { d = mind; } if (d > maxd) { d = maxd; } next = d; prev = d; if (dir !== 2) { nextvalid = isvalid(next); while (!nextvalid && next < maxd) { next = new date(next.gettime() + 1000 * 60 * 60 * 24); nextvalid = isvalid(next); up++; } } if (dir !== 1) { prevvalid = isvalid(prev); while (!prevvalid && prev > mind) { prev = new date(prev.gettime() - 1000 * 60 * 60 * 24); prevvalid = isvalid(prev); down++; } } if (dir === 1 && nextvalid) { return next; } if (dir === 2 && prevvalid) { return prev; } return down < up && prevvalid ? prev : next; } function isvalid(d) { if (d < mind) { return false; } if (d > maxd) { return false; } if (isinobj(d, valid)) { return true; } if (isinobj(d, invalid)) { return false; } return true; } function isinobj(d, obj) { var curr, j, v; if (obj) { for (j = 0; j < obj.length; j++) { curr = obj[j]; v = curr + ''; if (!curr.start) { if (curr.gettime) { // exact date if (d.getfullyear() == curr.getfullyear() && d.getmonth() == curr.getmonth() && d.getdate() == curr.getdate()) { return true; } } else if (!v.match(/w/i)) { // day of month v = v.split('/'); if (v[1]) { if ((v[0] - 1) == d.getmonth() && v[1] == d.getdate()) { return true; } } else if (v[0] == d.getdate()) { return true; } } else { // day of week v = +v.replace('w', ''); if (v == d.getday()) { return true; } } } } } return false; } function validatedates(obj, y, m, first, maxdays, idx, val) { var j, d, v; if (obj) { for (j = 0; j < obj.length; j++) { d = obj[j]; v = d + ''; if (!d.start) { if (d.gettime) { // exact date if (s.getyear(d) == y && s.getmonth(d) == m) { idx[s.getday(d) - 1] = val; } } else if (!v.match(/w/i)) { // day of month v = v.split('/'); if (v[1]) { if (v[0] - 1 == m) { idx[v[1] - 1] = val; } } else { idx[v[0] - 1] = val; } } else { // day of week v = +v.replace('w', ''); for (k = v - first; k < maxdays; k += 7) { if (k >= 0) { idx[k] = val; } } } } } } } function validatetimes(vobj, i, v, temp, y, m, d, target, valid) { var dd, ss, str, parts1, parts2, prop1, prop2, v1, v2, j, i1, i2, add, remove, all, hours1, hours2, hours3, spec = {}, steps = { h: steph, i: stepm, s: steps, a: 1 }, day = s.getdate(y, m, d), w = ['a', 'h', 'i', 's']; if (vobj) { $.each(vobj, function (i, obj) { if (obj.start) { obj.apply = false; dd = obj.d; ss = dd + ''; str = ss.split('/'); if (dd && ((dd.gettime && y == s.getyear(dd) && m == s.getmonth(dd) && d == s.getday(dd)) || // exact date (!ss.match(/w/i) && ((str[1] && d == str[1] && m == str[0] - 1) || (!str[1] && d == str[0]))) || // day of month (ss.match(/w/i) && day.getday() == +ss.replace('w', '')) // day of week )) { obj.apply = true; spec[day] = true; // prevent applying generic rule on day, if specific exists } } }); $.each(vobj, function (x, obj) { add = 0; remove = 0; i1 = 0; i2 = undefined; prop1 = true; prop2 = true; all = false; if (obj.start && (obj.apply || (!obj.d && !spec[day]))) { // define time parts parts1 = obj.start.split(':'); parts2 = obj.end.split(':'); for (j = 0; j < 3; j++) { if (parts1[j] === undefined) { parts1[j] = 0; } if (parts2[j] === undefined) { parts2[j] = 59; } parts1[j] = +parts1[j]; parts2[j] = +parts2[j]; } parts1.unshift(parts1[0] > 11 ? 1 : 0); parts2.unshift(parts2[0] > 11 ? 1 : 0); if (hampm) { if (parts1[1] >= 12) { parts1[1] = parts1[1] - 12; } if (parts2[1] >= 12) { parts2[1] = parts2[1] - 12; } } // look behind for (j = 0; j < i; j++) { if (validvalues[j] !== undefined) { v1 = step(parts1[j], steps[w[j]], mins[w[j]], maxs[w[j]]); v2 = step(parts2[j], steps[w[j]], mins[w[j]], maxs[w[j]]); hours1 = 0; hours2 = 0; hours3 = 0; if (hampm && j == 1) { hours1 = parts1[0] ? 12 : 0; hours2 = parts2[0] ? 12 : 0; hours3 = validvalues[0] ? 12 : 0; } if (!prop1) { v1 = 0; } if (!prop2) { v2 = maxs[w[j]]; } if ((prop1 || prop2) && (v1 + hours1 < validvalues[j] + hours3 && validvalues[j] + hours3 < v2 + hours2)) { all = true; } if (validvalues[j] != v1) { prop1 = false; } if (validvalues[j] != v2) { prop2 = false; } } } // look ahead if (!valid) { for (j = i + 1; j < 4; j++) { if (parts1[j] > 0) { add = steps[v]; } if (parts2[j] < maxs[w[j]]) { remove = steps[v]; } } } if (!all) { // calculate min and max values v1 = step(parts1[i], steps[v], mins[v], maxs[v]) + add; v2 = step(parts2[i], steps[v], mins[v], maxs[v]) - remove; if (prop1) { i1 = getvalidindex(target, v1, maxs[v], 0); } if (prop2) { i2 = getvalidindex(target, v2, maxs[v], 1); } } // disable values if (prop1 || prop2 || all) { if (valid) { $('.dw-li', target).slice(i1, i2).addclass('dw-v'); } else { $('.dw-li', target).slice(i1, i2).removeclass('dw-v'); } } } }); } } function getindex(t, v) { return $('.dw-li', t).index($('.dw-li[data-val="' + v + '"]', t)); } function getvalidindex(t, v, max, add) { if (v < 0) { return 0; } if (v > max) { return $('.dw-li', t).length; } return getindex(t, v) + add; } function getarray(d) { var i, ret = []; if (d === null || d === undefined) { return d; } for (i in o) { ret[o[i]] = f[i](d); } return ret; } function convertranges(arr) { var i, v, start, ret = []; if (arr) { for (i = 0; i < arr.length; i++) { v = arr[i]; if (v.start && v.start.gettime) { start = new date(v.start); while (start <= v.end) { ret.push(new date(start.getfullyear(), start.getmonth(), start.getdate())); start.setdate(start.getdate() + 1); } } else { ret.push(v); } } return ret; } return arr; } // extended methods // --- inst.getval = function (temp) { return inst._hasvalue || temp ? getdate(inst.getarrayval(temp)) : null; }; /** * sets the selected date * * @param {date} d date to select. * @param {boolean} [fill=false] also set the value of the associated input element. default is true. * @param {number} [time=0] animation time to scroll to the selected date. * @param {boolean} [temp=false] set temporary value only. * @param {boolean} [change=fill] trigger change on input element. */ inst.setdate = function (d, fill, time, temp, change) { inst.setarrayval(getarray(d), fill, change, temp, time); }; /** * returns the selected date. * * @param {boolean} [temp=false] if true, return the currently shown date on the picker, otherwise the last selected one. * @return {date} */ inst.getdate = inst.getval; // --- // initializations // --- inst.format = hformat; inst.order = o; inst.handlers.now = function () { inst.setdate(new date(), false, 0.3, true, true); }; inst.buttons.now = { text: s.nowtext, handler: 'now' }; invalid = convertranges(invalid); valid = convertranges(valid); // normalize min and max dates for comparing later (set default values where there are no values from wheels) mind = getdate(getarray(mind)); maxd = getdate(getarray(maxd)); mins = { y: mind.getfullyear(), m: 0, d: 1, h: minh, i: minm, s: mins, a: 0 }; maxs = { y: maxd.getfullyear(), m: 11, d: 31, h: maxh, i: maxm, s: maxs, a: 1 }; // --- return { wheels: wheels, headertext: s.headertext ? function () { return datetime.formatdate(hformat, getdate(inst.getarrayval(true)), s); } : false, formatresult: function (d) { return datetime.formatdate(format, getdate(d), s); }, parsevalue: function (val) { return getarray(val ? datetime.parsedate(format, val, s) : (s.defaultvalue || new date())); }, validate: function (dw, i, time, dir) { var validated = getclosestvaliddate(getdate(inst.getarrayval(true)), dir), temp = getarray(validated), y = get(temp, 'y'), m = get(temp, 'm'), minprop = true, maxprop = true; $.each(['y', 'm', 'd', 'a', 'h', 'i', 's'], function (x, i) { if (o[i] !== undefined) { var min = mins[i], max = maxs[i], maxdays = 31, val = get(temp, i), t = $('.dw-ul', dw).eq(o[i]); if (i == 'd') { maxdays = s.getmaxdayofmonth(y, m); max = maxdays; if (regen) { $('.dw-li', t).each(function () { var that = $(this), d = that.data('val'), w = s.getdate(y, m, d).getday(), str = dord.replace(/[my]/gi, '').replace(/dd/, (d < 10 ? '0' + d : d) + (s.daysuffix || '')).replace(/d/, d + (s.daysuffix || '')); $('.dw-i', that).html(str.match(/dd/) ? str.replace(/dd/, '' + s.daynames[w] + '') : str.replace(/d/, '' + s.daynamesshort[w] + '')); }); } } if (minprop && mind) { min = f[i](mind); } if (maxprop && maxd) { max = f[i](maxd); } if (i != 'y') { var i1 = getindex(t, min), i2 = getindex(t, max); $('.dw-li', t).removeclass('dw-v').slice(i1, i2 + 1).addclass('dw-v'); if (i == 'd') { // hide days not in month $('.dw-li', t).removeclass('dw-h').slice(maxdays).addclass('dw-h'); } } if (val < min) { val = min; } if (val > max) { val = max; } if (minprop) { minprop = val == min; } if (maxprop) { maxprop = val == max; } // disable some days if (i == 'd') { var first = s.getdate(y, m, 1).getday(), idx = {}; // set invalid indexes validatedates(invalid, y, m, first, maxdays, idx, 1); // delete indexes which are valid validatedates(valid, y, m, first, maxdays, idx, 0); $.each(idx, function (i, v) { if (v) { $('.dw-li', t).eq(i).removeclass('dw-v'); } }); } } }); // invalid times if (hastime) { $.each(['a', 'h', 'i', 's'], function (i, v) { var val = get(temp, v), d = get(temp, 'd'), t = $('.dw-ul', dw).eq(o[v]); if (o[v] !== undefined) { validatetimes(invalid, i, v, temp, y, m, d, t, 0); validatetimes(valid, i, v, temp, y, m, d, t, 1); // get valid value validvalues[i] = +inst.getvalidcell(val, t, dir).val; } }); } inst._tempwheelarray = temp; } }; }; $.each(['date', 'time', 'datetime'], function (i, v) { ms.presets.scroller[v] = preset; }); })(jquery); //datetime (function ($) { $.each(['date', 'time', 'datetime'], function (i, v) { $.mobiscroll.presetshort(v); }); })(jquery);