{"version":3,"file":"d3f440c7a98c16ff6427.js","mappings":"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","sources":["webpack://asp.net/webpack/runtime/chunk loaded","webpack://asp.net/./node_modules/@progress/kendo-ui/js/aspnetmvc/kendo.combobox.aspnetmvc.js","webpack://asp.net/./node_modules/@progress/kendo-ui/js/aspnetmvc/kendo.data.aspnetmvc.js","webpack://asp.net/./node_modules/@progress/kendo-ui/js/aspnetmvc/kendo.dropdownlist.aspnetmvc.js","webpack://asp.net/./node_modules/@progress/kendo-ui/js/aspnetmvc/kendo.dropdowntree.aspnetmvc.js","webpack://asp.net/./node_modules/@progress/kendo-ui/js/aspnetmvc/kendo.filemanager.aspnetmvc.js","webpack://asp.net/./node_modules/@progress/kendo-ui/js/aspnetmvc/kendo.imagebrowser.aspnetmvc.js","webpack://asp.net/./node_modules/@progress/kendo-ui/js/aspnetmvc/kendo.multicolumncombobox.aspnetmvc.js","webpack://asp.net/./node_modules/@progress/kendo-ui/js/aspnetmvc/kendo.multiselect.aspnetmvc.js","webpack://asp.net/./node_modules/@progress/kendo-ui/js/aspnetmvc/kendo.validator.aspnetmvc.js","webpack://asp.net/./node_modules/@progress/kendo-ui/js/cultures/kendo.culture.de.js","webpack://asp.net/./node_modules/@progress/kendo-ui/js/cultures/kendo.culture.en.js","webpack://asp.net/./node_modules/@progress/kendo-ui/js/cultures/kendo.culture.es.js","webpack://asp.net/./node_modules/@progress/kendo-ui/js/dropdowntree/treeview.js","webpack://asp.net/./node_modules/@progress/kendo-ui/js/kendo.aspnetmvc.js","webpack://asp.net/./node_modules/@progress/kendo-ui/js/kendo.calendar.js","webpack://asp.net/./node_modules/@progress/kendo-ui/js/kendo.combobox.js","webpack://asp.net/./node_modules/@progress/kendo-ui/js/kendo.core.js","webpack://asp.net/./node_modules/@progress/kendo-ui/js/kendo.data.js","webpack://asp.net/./node_modules/@progress/kendo-ui/js/kendo.data.odata.js","webpack://asp.net/./node_modules/@progress/kendo-ui/js/kendo.data.xml.js","webpack://asp.net/./node_modules/@progress/kendo-ui/js/kendo.dateinput.js","webpack://asp.net/./node_modules/@progress/kendo-ui/js/kendo.datepicker.js","webpack://asp.net/./node_modules/@progress/kendo-ui/js/kendo.draganddrop.js","webpack://asp.net/./node_modules/@progress/kendo-ui/js/kendo.dropdownlist.js","webpack://asp.net/./node_modules/@progress/kendo-ui/js/kendo.dropdowntree.js","webpack://asp.net/./node_modules/@progress/kendo-ui/js/kendo.floatinglabel.js","webpack://asp.net/./node_modules/@progress/kendo-ui/js/kendo.fx.js","webpack://asp.net/./node_modules/@progress/kendo-ui/js/kendo.list.js","webpack://asp.net/./node_modules/@progress/kendo-ui/js/kendo.mobile.scroller.js","webpack://asp.net/./node_modules/@progress/kendo-ui/js/kendo.multiselect.js","webpack://asp.net/./node_modules/@progress/kendo-ui/js/kendo.numerictextbox.js","webpack://asp.net/./node_modules/@progress/kendo-ui/js/kendo.popup.js","webpack://asp.net/./node_modules/@progress/kendo-ui/js/kendo.selectable.js","webpack://asp.net/./node_modules/@progress/kendo-ui/js/kendo.treeview.draganddrop.js","webpack://asp.net/./node_modules/@progress/kendo-ui/js/kendo.treeview.js","webpack://asp.net/./node_modules/@progress/kendo-ui/js/kendo.userevents.js","webpack://asp.net/./node_modules/@progress/kendo-ui/js/kendo.validator.js","webpack://asp.net/./node_modules/@progress/kendo-ui/js/kendo.virtuallist.js","webpack://asp.net/./Areas/_Public/Views/Location/TableBooking.js","webpack://asp.net/webpack/bootstrap","webpack://asp.net/webpack/runtime/compat get default export","webpack://asp.net/webpack/runtime/define property getters","webpack://asp.net/webpack/runtime/global","webpack://asp.net/webpack/runtime/hasOwnProperty shorthand","webpack://asp.net/webpack/runtime/node module decorator","webpack://asp.net/webpack/runtime/runtimeId","webpack://asp.net/webpack/runtime/jsonp chunk loading","webpack://asp.net/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(1);\n\tmodule.exports = __webpack_require__(1);\n\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function(f, define){\r\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(2) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (f), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\r\n\t})(function(){\r\n\r\n\t(function ($, undefined) {\r\n\t var kendo = window.kendo,\r\n\t ui = kendo.ui;\r\n\r\n\t if (ui && ui.ComboBox) {\r\n\t ui.ComboBox.requestData = function (selector) {\r\n\t var combobox = $(selector).data(\"kendoComboBox\");\r\n\r\n\t if (!combobox) {\r\n\t return;\r\n\t }\r\n\r\n\t var filter = combobox.dataSource.filter();\r\n\t var value = combobox.input.val();\r\n\r\n\t if (!filter || !filter.filters.length) {\r\n\t value = \"\";\r\n\t }\r\n\r\n\t return { text: value };\r\n\t };\r\n\t }\r\n\r\n\t})(window.kendo.jQuery);\r\n\r\n\t}, __webpack_require__(3));\r\n\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./kendo.data.aspnetmvc\");\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports) {\n\n\tmodule.exports = function() { throw new Error(\"define cannot be used indirect\"); };\r\n\n\n/***/ })\n/******/ ]);","module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(4);\n\tmodule.exports = __webpack_require__(4);\n\n\n/***/ }),\n/* 1 */,\n/* 2 */,\n/* 3 */\n/***/ (function(module, exports) {\n\n\tmodule.exports = function() { throw new Error(\"define cannot be used indirect\"); };\r\n\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function(f, define){\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(5), __webpack_require__(6), __webpack_require__(7), __webpack_require__(8) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (f), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t})(function(){\n\n\t(function ($, undefined) {\n\t var kendo = window.kendo,\n\t escapeQuoteRegExp = /'/ig,\n\t extend = $.extend,\n\t isArray = $.isArray,\n\t isPlainObject = $.isPlainObject,\n\t POINT = \".\";\n\n\t function parameterMap(options, operation, serializationOptions) {\n\t var result = {};\n\n\t if (options.sort) {\n\t result[this.options.prefix + \"sort\"] = $.map(options.sort, function(sort) {\n\t return sort.field + \"-\" + sort.dir;\n\t }).join(\"~\");\n\n\t delete options.sort;\n\t } else {\n\t result[this.options.prefix + \"sort\"] = \"\";\n\t }\n\n\t if (options.page) {\n\t result[this.options.prefix + \"page\"] = options.page;\n\n\t delete options.page;\n\t }\n\n\t if (options.pageSize) {\n\t result[this.options.prefix + \"pageSize\"] = options.pageSize;\n\n\t delete options.pageSize;\n\t }\n\n\t if (options.group) {\n\t result[this.options.prefix + \"group\"] = $.map(options.group, function(group) {\n\t return group.field + \"-\" + group.dir;\n\t }).join(\"~\");\n\n\t delete options.group;\n\t } else {\n\t result[this.options.prefix + \"group\"] = \"\";\n\t }\n\n\t if (options.aggregate) {\n\t result[this.options.prefix + \"aggregate\"] = $.map(options.aggregate, function(aggregate) {\n\t return aggregate.field + \"-\" + aggregate.aggregate;\n\t }).join(\"~\");\n\n\t delete options.aggregate;\n\t }\n\n\t if (options.filter) {\n\t result[this.options.prefix + \"filter\"] = serializeFilter(options.filter, serializationOptions.encode);\n\n\t delete options.filter;\n\t } else {\n\t result[this.options.prefix + \"filter\"] = \"\";\n\t delete options.filter;\n\t }\n\n\t if (!options.groupPaging) {\n\t delete options.take;\n\t delete options.skip;\n\t }\n\n\t var serializer = new Serializer(serializationOptions);\n\t serializer.serialize(result, options, \"\");\n\n\t return result;\n\t }\n\n\t var Serializer = function(options) {\n\t options = options || {};\n\t this.culture = options.culture || kendo.culture();\n\t this.stringifyDates = options.stringifyDates;\n\t this.decimalSeparator = this.culture.numberFormat[POINT];\n\t };\n\n\t Serializer.prototype = Serializer.fn = {\n\t serialize: function(result, data, prefix) {\n\t var valuePrefix;\n\t for (var key in data) {\n\t valuePrefix = prefix ? prefix + \".\" + key : key;\n\t this.serializeField(result, data[key], data, key, valuePrefix);\n\t }\n\t },\n\n\t serializeField: function (result, value, data, key, prefix) {\n\t if (isArray(value)) {\n\t this.serializeArray(result, value, prefix);\n\t } else if (isPlainObject(value)) {\n\t this.serialize(result, value, prefix);\n\t } else {\n\t if (result[prefix] === undefined) {\n\t result[prefix] = data[key] = this.serializeValue(value);\n\t }\n\t }\n\t },\n\n\t serializeArray: function (result, data, prefix) {\n\t var value, key, valuePrefix;\n\t for (var sourceIndex = 0, destinationIndex = 0; sourceIndex < data.length; sourceIndex++) {\n\t value = data[sourceIndex];\n\t key = \"[\" + destinationIndex + \"]\";\n\t valuePrefix = prefix + key;\n\n\t this.serializeField(result, value, data, key, valuePrefix);\n\n\t destinationIndex++;\n\t }\n\t },\n\n\t serializeValue: function (value) {\n\t if (value instanceof Date) {\n\t if (this.stringifyDates) {\n\t value = kendo.stringify(value).replace(/\"/g, \"\");\n\t } else {\n\t value = kendo.toString(value, \"G\", this.culture.name);\n\t }\n\t } else if (typeof value === \"number\") {\n\t value = value.toString().replace(POINT, this.decimalSeparator);\n\t }\n\t return value;\n\t }\n\t };\n\n\t function serializeFilter(filter, encode) {\n\t if (filter.filters) {\n\t return $.map(filter.filters, function(f) {\n\t var hasChildren = f.filters && f.filters.length > 1,\n\t result = serializeFilter(f, encode);\n\n\t if (result && hasChildren) {\n\t result = \"(\" + result + \")\";\n\t }\n\n\t return result;\n\t }).join(\"~\" + filter.logic + \"~\");\n\t }\n\n\t if (filter.field) {\n\t return filter.field + \"~\" + filter.operator + \"~\" + encodeFilterValue(filter.value, encode);\n\t } else {\n\t return undefined;\n\t }\n\t }\n\n\t function encodeFilterValue(value, encode) {\n\t if (typeof value === \"string\") {\n\t if (value.indexOf('Date(') > -1) {\n\t value = new Date(parseInt(value.replace(/^\\/Date\\((.*?)\\)\\/$/, '$1'), 10));\n\t } else {\n\t value = value.replace(escapeQuoteRegExp, \"''\");\n\n\t if (encode) {\n\t value = encodeURIComponent(value);\n\t }\n\n\t return \"'\" + value + \"'\";\n\t }\n\t }\n\n\t if (value && value.getTime) {\n\t return \"datetime'\" + kendo.format(\"{0:yyyy-MM-ddTHH-mm-ss}\", value) + \"'\";\n\t }\n\t return value;\n\t }\n\n\t function valueOrDefault(value, defaultValue) {\n\t return typeof value !== \"undefined\" ? value : defaultValue;\n\t }\n\n\t function translateGroup(group) {\n\t var hasSubgroups = group.HasSubgroups || group.hasSubgroups || false;\n\t var items = group.Items || group.items;\n\t var itemCount = group.ItemCount || group.itemCount;\n\t var subgroupCount = group.SubgroupCount || group.subgroupCount;\n\n\t return {\n\t value: valueOrDefault(group.Key, valueOrDefault(group.key, group.value)),\n\t field: group.Member || group.member || group.field,\n\t hasSubgroups: hasSubgroups,\n\t aggregates: translateAggregate(group.Aggregates || group.aggregates),\n\t items: hasSubgroups ? $.map(items, translateGroup) : items,\n\t itemCount: itemCount,\n\t subgroupCount: subgroupCount,\n\t uid: kendo.guid()\n\t };\n\t }\n\n\t function translateAggregateResults(aggregate) {\n\t var obj = {};\n\t obj[aggregate.AggregateMethodName.toLowerCase()] = aggregate.Value;\n\n\t return obj;\n\t }\n\n\t function translateAggregate(aggregates) {\n\t var functionResult = {},\n\t key,\n\t functionName,\n\t aggregate;\n\n\t for (key in aggregates) {\n\t functionResult = {};\n\t aggregate = aggregates[key];\n\n\t for (functionName in aggregate) {\n\t functionResult[functionName.toLowerCase()] = aggregate[functionName];\n\t }\n\n\t aggregates[key] = functionResult;\n\t }\n\n\t return aggregates;\n\t }\n\n\t function convertAggregates(aggregates) {\n\t var idx, length, aggregate;\n\t var result = {};\n\n\t for (idx = 0, length = aggregates.length; idx < length; idx++) {\n\t aggregate = aggregates[idx];\n\t result[aggregate.Member] = extend(true, result[aggregate.Member], translateAggregateResults(aggregate));\n\t }\n\n\t return result;\n\t }\n\n\t extend(true, kendo.data, {\n\t schemas: {\n\t \"aspnetmvc-ajax\": {\n\t groups: function(data) {\n\t return $.map(this._dataAccessFunction(data), translateGroup);\n\t },\n\t aggregates: function(data) {\n\t data = data.d || data;\n\t var aggregates = data.AggregateResults || [];\n\n\t if (!$.isArray(aggregates)) {\n\t for (var key in aggregates) {\n\t aggregates[key] = convertAggregates(aggregates[key]);\n\t }\n\n\t return aggregates;\n\t }\n\n\t return convertAggregates(aggregates);\n\t }\n\t }\n\t }\n\t });\n\n\t extend(true, kendo.data, {\n\t transports: {\n\t \"aspnetmvc-ajax\": kendo.data.RemoteTransport.extend({\n\t init: function(options) {\n\t var that = this,\n\t stringifyDates = (options || {}).stringifyDates;\n\n\t kendo.data.RemoteTransport.fn.init.call(this,\n\t extend(true, {}, this.options, options, {\n\t parameterMap: function(options, operation) {\n\t return parameterMap.call(that, options, operation, {\n\t encode: false,\n\t stringifyDates: stringifyDates\n\t });\n\t }\n\t })\n\t );\n\t },\n\t read: function(options) {\n\t var data = this.options.data,\n\t url = this.options.read.url;\n\n\t if (isPlainObject(data)) {\n\t if (url) {\n\t this.options.data = null;\n\t }\n\n\t if (!data.Data.length && url) {\n\t kendo.data.RemoteTransport.fn.read.call(this, options);\n\t } else {\n\t options.success(data);\n\t }\n\t } else {\n\t kendo.data.RemoteTransport.fn.read.call(this, options);\n\t }\n\t },\n\t options: {\n\t read: {\n\t type: \"POST\"\n\t },\n\t update: {\n\t type: \"POST\"\n\t },\n\t create: {\n\t type: \"POST\"\n\t },\n\t destroy: {\n\t type: \"POST\"\n\t },\n\t parameterMap: parameterMap,\n\t prefix: \"\"\n\t }\n\t })\n\t }\n\t });\n\n\t extend(true, kendo.data, {\n\t schemas: {\n\t \"webapi\": kendo.data.schemas[\"aspnetmvc-ajax\"]\n\t }\n\t });\n\n\t extend(true, kendo.data, {\n\t transports: {\n\t \"webapi\": kendo.data.RemoteTransport.extend({\n\t init: function(options) {\n\t var that = this;\n\t var stringifyDates = (options || {}).stringifyDates;\n\t var culture = kendo.cultures[options.culture] || kendo.cultures[\"en-US\"];\n\n\t if (options.update) {\n\t var updateUrl = typeof options.update === \"string\" ? options.update : options.update.url;\n\n\t options.update = extend(options.update, {url: function (data) {\n\t return kendo.format(updateUrl, data[options.idField]);\n\t }});\n\t }\n\n\t if (options.destroy) {\n\t var destroyUrl = typeof options.destroy === \"string\" ? options.destroy : options.destroy.url;\n\n\t options.destroy = extend(options.destroy, {url: function (data) {\n\t return kendo.format(destroyUrl, data[options.idField]);\n\t }});\n\t }\n\n\t if(options.create && typeof options.create === \"string\") {\n\t options.create = {\n\t url: options.create\n\t };\n\t }\n\n\t kendo.data.RemoteTransport.fn.init.call(this,\n\t extend(true, {}, this.options, options, {\n\t parameterMap: function(options, operation) {\n\t return parameterMap.call(that, options, operation, {\n\t encode: false,\n\t stringifyDates: stringifyDates,\n\t culture: culture\n\t });\n\t }\n\t })\n\t );\n\t },\n\t read: function(options) {\n\t var data = this.options.data,\n\t url = this.options.read.url;\n\n\t if (isPlainObject(data)) {\n\t if (url) {\n\t this.options.data = null;\n\t }\n\n\t if (!data.Data.length && url) {\n\t kendo.data.RemoteTransport.fn.read.call(this, options);\n\t } else {\n\t options.success(data);\n\t }\n\t } else {\n\t kendo.data.RemoteTransport.fn.read.call(this, options);\n\t }\n\t },\n\t options: {\n\t read: {\n\t type: \"GET\"\n\t },\n\t update: {\n\t type: \"PUT\"\n\t },\n\t create: {\n\t type: \"POST\"\n\t },\n\t destroy: {\n\t type: \"DELETE\"\n\t },\n\t parameterMap: parameterMap,\n\t prefix: \"\"\n\t }\n\t })\n\t }\n\t });\n\n\t extend(true, kendo.data, {\n\t transports: {\n\t \"aspnetmvc-server\": kendo.data.RemoteTransport.extend({\n\t init: function(options) {\n\t var that = this;\n\n\t kendo.data.RemoteTransport.fn.init.call(this,\n\t extend(options, {\n\t parameterMap: function(options, operation) {\n\t return parameterMap.call(that, options, operation, {\n\t encode: true\n\t });\n\t }\n\t }\n\t ));\n\t },\n\t read: function(options) {\n\t var url,\n\t prefix = this.options.prefix,\n\t params = [prefix + \"sort\",\n\t prefix + \"page\",\n\t prefix + \"pageSize\",\n\t prefix + \"group\",\n\t prefix + \"aggregate\",\n\t prefix + \"filter\"],\n\t regExp = new RegExp(\"(\" + params.join('|') + \")=[^&]*&?\", \"g\"),\n\t query;\n\n\t query = location.search.replace(regExp, \"\").replace(\"?\", \"\");\n\n\t if (query.length && !(/&$/.test(query))) {\n\t query += \"&\";\n\t }\n\n\t options = this.setup(options, \"read\");\n\n\t url = options.url;\n\n\t if (url.indexOf(\"?\") >= 0) {\n\t query = query.replace(/(.*?=.*?)&/g, function(match){\n\t if(url.indexOf(match.substr(0, match.indexOf(\"=\"))) >= 0){\n\t return \"\";\n\t }\n\t return match;\n\t });\n\t url += \"&\" + query;\n\t } else {\n\t url += \"?\" + query;\n\t }\n\n\t url += $.map(options.data, function(value, key) {\n\t return key + \"=\" + value;\n\t }).join(\"&\");\n\n\t location.href = url;\n\t }\n\t })\n\t }\n\t });\n\t})(window.kendo.jQuery);\n\n\t}, __webpack_require__(3));\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"../kendo.data\");\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"../kendo.combobox\");\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"../kendo.multiselect\");\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"../kendo.validator\");\n\n/***/ })\n/******/ ]);","module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(9);\n\tmodule.exports = __webpack_require__(9);\n\n\n/***/ }),\n/* 1 */,\n/* 2 */\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./kendo.data.aspnetmvc\");\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports) {\n\n\tmodule.exports = function() { throw new Error(\"define cannot be used indirect\"); };\r\n\n\n/***/ }),\n/* 4 */,\n/* 5 */,\n/* 6 */,\n/* 7 */,\n/* 8 */,\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function(f, define){\r\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(2) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (f), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\r\n\t})(function(){\r\n\r\n\t(function ($, undefined) {\r\n\t var kendo = window.kendo,\r\n\t ui = kendo.ui;\r\n\r\n\t if (ui && ui.DropDownList) {\r\n\t ui.DropDownList.requestData = function (selector) {\r\n\t var dropdownlist = $(selector).data(\"kendoDropDownList\");\r\n\r\n\t if (!dropdownlist) {\r\n\t return;\r\n\t }\r\n\r\n\t var filter = dropdownlist.dataSource.filter();\r\n\t var filterInput = dropdownlist.filterInput;\r\n\t var value = filterInput ? filterInput.val() : \"\";\r\n\r\n\t if (!filter || !filter.filters.length) {\r\n\t value = \"\";\r\n\t }\r\n\r\n\t return { text: value };\r\n\t };\r\n\t }\r\n\r\n\t})(window.kendo.jQuery);\r\n\r\n\t}, __webpack_require__(3));\r\n\n\n/***/ })\n/******/ ]);","module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(10);\n\tmodule.exports = __webpack_require__(10);\n\n\n/***/ }),\n/* 1 */,\n/* 2 */\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./kendo.data.aspnetmvc\");\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports) {\n\n\tmodule.exports = function() { throw new Error(\"define cannot be used indirect\"); };\r\n\n\n/***/ }),\n/* 4 */,\n/* 5 */,\n/* 6 */,\n/* 7 */,\n/* 8 */,\n/* 9 */,\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function(f, define){\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(2) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (f), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t})(function(){\n\n\t(function ($, undefined) {\n\t var kendo = window.kendo,\n\t ui = kendo.ui;\n\n\t if (ui && ui.DropDownTree) {\n\t ui.DropDownTree.requestData = function (selector) {\n\t var dropdowntree = $(selector).data(\"kendoDropDownTree\");\n\n\t if (!dropdowntree) {\n\t return;\n\t }\n\n\t var filter = dropdowntree.dataSource.filter();\n\t var filterInput = dropdowntree.filterInput;\n\t var value = filterInput ? filterInput.val() : \"\";\n\n\t if (!filter || !filter.filters.length) {\n\t value = \"\";\n\t }\n\n\t return { text: value };\n\t };\n\t }\n\n\t})(window.kendo.jQuery);\n\n\t}, __webpack_require__(3));\n\n\n/***/ })\n/******/ ]);","module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(11);\n\tmodule.exports = __webpack_require__(11);\n\n\n/***/ }),\n/* 1 */,\n/* 2 */\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./kendo.data.aspnetmvc\");\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports) {\n\n\tmodule.exports = function() { throw new Error(\"define cannot be used indirect\"); };\r\n\n\n/***/ }),\n/* 4 */,\n/* 5 */,\n/* 6 */,\n/* 7 */,\n/* 8 */,\n/* 9 */,\n/* 10 */,\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function(f, define){\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(2) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (f), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t})(function(){\n\n\t(function ($, undefined) {\n\t var kendo = window.kendo,\n\t extend = $.extend;\n\n\t extend(true, kendo.data, {\n\t schemas: {\n\t \"filemanager\": {\n\t data: function(data) {\n\t return data || [];\n\t },\n\t model: {\n\t id: \"path\",\n\t hasChildren: \"hasDirectories\",\n\t fields: {\n\t name: {field: \"Name\", editable: true, type: \"String\", defaultValue: \"New Folder\" },\n\t size: {field: \"Size\", editable: false, type: \"Number\"},\n\t path: {field: \"Path\", editable: false, type: \"String\"},\n\t extension: {field: \"Extension\", editable: false, type: \"String\"},\n\t isDirectory: {field: \"IsDirectory\", editable: false, defaultValue: true, type: \"Boolean\"},\n\t hasDirectories: {field: \"HasDirectories\", editable: false, defaultValue: false, type: \"Boolean\"},\n\t created: {field: \"Created\", type: \"Date\", editable: false},\n\t createdUtc: {field: \"CreatedUtc\", type: \"Date\", editable: false },\n\t modified: {field: \"Modified\", type: \"Date\", editable: false},\n\t modifiedUtc: {field: \"ModifiedUtc\", type: \"Date\", editable: false }\n\t }\n\t }\n\t }\n\t }\n\t });\n\t})(window.kendo.jQuery);\n\n\t}, __webpack_require__(3));\n\n\n/***/ })\n/******/ ]);","module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(12);\n\tmodule.exports = __webpack_require__(12);\n\n\n/***/ }),\n\n/***/ 3:\n/***/ (function(module, exports) {\n\n\tmodule.exports = function() { throw new Error(\"define cannot be used indirect\"); };\r\n\n\n/***/ }),\n\n/***/ 12:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function(f, define){\r\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(13) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (f), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\r\n\t})(function(){\r\n\r\n\t(function ($, undefined) {\r\n\t var kendo = window.kendo,\r\n\t extend = $.extend,\r\n\t isFunction = $.isFunction;\r\n\r\n\t extend(true, kendo.data, {\r\n\t schemas: {\r\n\t \"imagebrowser-aspnetmvc\": {\r\n\t data: function(data) {\r\n\t return data || [];\r\n\t },\r\n\t model: {\r\n\t id: \"name\",\r\n\t fields: {\r\n\t name: { field: \"Name\" },\r\n\t size: { field: \"Size\" },\r\n\t type: { field: \"EntryType\", parse: function(value) { return value == 0 ? \"f\" : \"d\"; } } // jshint ignore:line, afraid to break something with strict equality\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t });\r\n\r\n\t extend(true, kendo.data, {\r\n\t schemas: {\r\n\t \"filebrowser-aspnetmvc\": kendo.data.schemas[\"imagebrowser-aspnetmvc\"]\r\n\t }\r\n\t });\r\n\r\n\t extend(true, kendo.data, {\r\n\t transports: {\r\n\t \"imagebrowser-aspnetmvc\": kendo.data.RemoteTransport.extend({\r\n\t init: function(options) {\r\n\t kendo.data.RemoteTransport.fn.init.call(this, $.extend(true, {}, this.options, options));\r\n\t },\r\n\t _call: function(type, options) {\r\n\t options.data = $.extend({}, options.data, { path: this.options.path() });\r\n\r\n\t if (isFunction(this.options[type])) {\r\n\t this.options[type].call(this, options);\r\n\t } else {\r\n\t kendo.data.RemoteTransport.fn[type].call(this, options);\r\n\t }\r\n\t },\r\n\t read: function(options) {\r\n\t this._call(\"read\", options);\r\n\t },\r\n\t create: function(options) {\r\n\t this._call(\"create\", options);\r\n\t },\r\n\t destroy: function(options) {\r\n\t this._call(\"destroy\", options);\r\n\t },\r\n\t update: function() {\r\n\t //updates are handled by the upload\r\n\t },\r\n\t options: {\r\n\t read: {\r\n\t type: \"POST\"\r\n\t },\r\n\t update: {\r\n\t type: \"POST\"\r\n\t },\r\n\t create: {\r\n\t type: \"POST\"\r\n\t },\r\n\t destroy: {\r\n\t type: \"POST\"\r\n\t },\r\n\t parameterMap: function(options, type) {\r\n\t if (type != \"read\") {\r\n\t options.EntryType = options.EntryType === \"f\" ? 0 : 1;\r\n\t }\r\n\t return options;\r\n\t }\r\n\t }\r\n\t })\r\n\t }\r\n\t });\r\n\r\n\t extend(true, kendo.data, {\r\n\t transports: {\r\n\t \"filebrowser-aspnetmvc\": kendo.data.transports[\"imagebrowser-aspnetmvc\"]\r\n\t }\r\n\t });\r\n\r\n\t})(window.kendo.jQuery);\r\n\r\n\t}, __webpack_require__(3));\r\n\n\n/***/ }),\n\n/***/ 13:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./kendo.multiselect.aspnetmvc\");\n\n/***/ })\n\n/******/ });","module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(14);\n\tmodule.exports = __webpack_require__(14);\n\n\n/***/ }),\n\n/***/ 2:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./kendo.data.aspnetmvc\");\n\n/***/ }),\n\n/***/ 3:\n/***/ (function(module, exports) {\n\n\tmodule.exports = function() { throw new Error(\"define cannot be used indirect\"); };\r\n\n\n/***/ }),\n\n/***/ 14:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function(f, define){\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(2) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (f), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t})(function(){\n\n\t(function ($, undefined) {\n\t var kendo = window.kendo,\n\t ui = kendo.ui;\n\n\t if (ui && ui.MultiColumnComboBox) {\n\t ui.MultiColumnComboBox.requestData = function (selector) {\n\n\t var multicolumncombobox = $(selector).data(\"kendoMultiColumnComboBox\");\n\n\t if (!multicolumncombobox) {\n\t return;\n\t }\n\n\t var filter = multicolumncombobox.dataSource.filter();\n\t var value = multicolumncombobox.input.val();\n\n\t if (!filter || !filter.filters.length) {\n\t value = \"\";\n\t }\n\n\t return { text: value };\n\t };\n\t }\n\n\t})(window.kendo.jQuery);\n\n\t}, __webpack_require__(3));\n\n\n/***/ })\n\n/******/ });","module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(15);\n\tmodule.exports = __webpack_require__(15);\n\n\n/***/ }),\n\n/***/ 3:\n/***/ (function(module, exports) {\n\n\tmodule.exports = function() { throw new Error(\"define cannot be used indirect\"); };\r\n\n\n/***/ }),\n\n/***/ 15:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function(f, define){\r\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(16) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (f), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\r\n\t})(function(){\r\n\r\n\t(function ($, undefined) {\r\n\t var kendo = window.kendo,\r\n\t ui = kendo.ui;\r\n\r\n\t if (ui && ui.MultiSelect) {\r\n\t ui.MultiSelect.requestData = function (selector) {\r\n\t var multiselect = $(selector).data(\"kendoMultiSelect\");\r\n\r\n\t if (!multiselect) {\r\n\t return;\r\n\t }\r\n\r\n\t var text = multiselect.input.val();\r\n\r\n\t return { text: text !== multiselect.options.placeholder ? text : \"\" };\r\n\t };\r\n\t }\r\n\r\n\t})(window.kendo.jQuery);\r\n\r\n\t}, __webpack_require__(3));\r\n\n\n/***/ }),\n\n/***/ 16:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./kendo.combobox.aspnetmvc\");\n\n/***/ })\n\n/******/ });","module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(17);\n\tmodule.exports = __webpack_require__(17);\n\n\n/***/ }),\n\n/***/ 3:\n/***/ (function(module, exports) {\n\n\tmodule.exports = function() { throw new Error(\"define cannot be used indirect\"); };\r\n\n\n/***/ }),\n\n/***/ 17:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function(f, define){\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(18) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (f), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t})(function(){\n\n\t(function ($, undefined) {\n\t var nameSpecialCharRegExp = /(\"|\\%|'|\\[|\\]|\\$|\\.|\\,|\\:|\\;|\\+|\\*|\\&|\\!|\\#|\\(|\\)|<|>|\\=|\\?|\\@|\\^|\\{|\\}|\\~|\\/|\\||`)/g;\n\t var SWITCHSELECTOR = \".k-switch\";\n\n\t function generateMessages() {\n\t var name,\n\t messages = {};\n\n\t for (name in validationRules) {\n\t messages[\"mvc\" + name] = createMessage(name);\n\t }\n\t return messages;\n\t }\n\n\t function generateRules() {\n\t var name,\n\t rules = {};\n\n\t for (name in validationRules) {\n\t rules[\"mvc\" + name] = createRule(name);\n\t }\n\t return rules;\n\t }\n\n\t function extractParams(input, ruleName) {\n\t var params = {},\n\t index,\n\t data = input.data(),\n\t length = ruleName.length,\n\t rule,\n\t key,\n\t start;\n\n\t for (key in data) {\n\t rule = key.toLowerCase();\n\t index = rule.indexOf(ruleName);\n\t if (index > -1) {\n\t start = rule === \"valserver\" ? index : index + length;\n\t rule = rule.substring(start, key.length);\n\n\t if (rule) {\n\t params[rule] = data[key];\n\t }\n\t }\n\t }\n\t return params;\n\t }\n\n\t function rulesFromData(metadata) {\n\t var idx,\n\t length,\n\t fields = metadata.Fields || [],\n\t rules = {};\n\n\t for (idx = 0, length = fields.length; idx < length; idx++) {\n\t $.extend(true, rules, rulesForField(fields[idx]));\n\t }\n\t return rules;\n\t }\n\n\t function rulesForField(field) {\n\t var rules = {},\n\t messages = {},\n\t fieldName = field.FieldName,\n\t fieldRules = field.ValidationRules,\n\t validationType,\n\t validationParams,\n\t idx,\n\t length;\n\n\t for (idx = 0, length = fieldRules.length; idx < length; idx++) {\n\t validationType = fieldRules[idx].ValidationType;\n\t validationParams = fieldRules[idx].ValidationParameters;\n\n\t rules[fieldName + validationType] = createMetaRule(fieldName, validationType, validationParams);\n\n\t messages[fieldName + validationType] = createMetaMessage(fieldRules[idx].ErrorMessage);\n\t }\n\t return { rules: rules, messages: messages };\n\t }\n\n\t function createMessage(rule) {\n\t return function (input) {\n\t return input.attr(\"data-val-\" + rule);\n\t };\n\t }\n\n\t function createRule(ruleName) {\n\t return function (input) {\n\t if (input.filter(\"[data-val-\" + ruleName + \"]\").length) {\n\t return validationRules[ruleName](input, extractParams(input, ruleName));\n\t }\n\t return true;\n\t };\n\t }\n\n\t function createMetaMessage(message) {\n\t return function() { return message; };\n\t }\n\n\t function createMetaRule(fieldName, type, params) {\n\t return function (input) {\n\t if (input.filter(\"[name=\" + fieldName + \"]\").length) {\n\t return validationRules[type](input, params);\n\t }\n\t return true;\n\t };\n\t }\n\n\t function patternMatcher(value, pattern) {\n\t if (typeof pattern === \"string\") {\n\t pattern = new RegExp('^(?:' + pattern + ')$');\n\t }\n\t return pattern.test(value);\n\t }\n\n\t var validationRules = {\n\t required: function (input) {\n\t var value = input.val(),\n\t checkbox = input.filter(\"[type=checkbox]\"),\n\t name;\n\n\t if (checkbox.length) {\n\t name = checkbox[0].name.replace(nameSpecialCharRegExp, \"\\\\$1\");\n\t var hiddenSelector = \"input:hidden[name='\" + name + \"']\";\n\n\t if (checkbox.closest(SWITCHSELECTOR).length) {\n\t checkbox = checkbox.closest(SWITCHSELECTOR);\n\t }\n\n\t var hidden = checkbox.next(hiddenSelector);\n\n\t if (!hidden.length) {\n\t hidden = checkbox.next(\"label.k-checkbox-label\").next(hiddenSelector);\n\t }\n\n\t if (hidden.length) {\n\t value = hidden.val();\n\t } else {\n\t value = input.prop(\"checked\") === true;\n\t }\n\t }\n\n\t return !(value === \"\" || !value || value.length === 0);\n\t },\n\t number: function (input) {\n\t /* jshint eqnull:true */\n\t return input.val() === \"\" || input.val() == null || kendo.parseFloat(input.val()) !== null;\n\t },\n\t regex: function (input, params) {\n\t if (input.val() !== \"\") {\n\t return patternMatcher(input.val(), params.pattern);\n\t }\n\t return true;\n\t },\n\t range: function(input, params) {\n\t if (input.val() !== \"\") {\n\t return this.min(input, params) && this.max(input, params);\n\t }\n\t return true;\n\t },\n\t min: function(input, params) {\n\t var min = parseFloat(params.min) || 0,\n\t val = kendo.parseFloat(input.val());\n\n\t return min <= val;\n\t },\n\t max: function(input, params) {\n\t var max = parseFloat(params.max) || 0,\n\t val = kendo.parseFloat(input.val());\n\n\t return val <= max;\n\t },\n\t date: function(input) {\n\t return input.val() === \"\" || kendo.parseDate(input.val()) !== null;\n\t },\n\t length: function(input, params) {\n\t if (input.val() !== \"\") {\n\t var len = kendo.trim(input.val()).length;\n\t return (!params.min || len >= (params.min || 0)) && (!params.max || len <= (params.max || 0));\n\t }\n\t return true;\n\t },\n\t server: function(input, params) {\n\t if (params.server) {\n\t return false;\n\t }\n\n\t return true;\n\t }\n\t };\n\n\t $.extend(true, kendo.ui.validator, {\n\t rules: generateRules(),\n\t messages: generateMessages(),\n\t messageLocators: {\n\t mvcLocator: {\n\t locate: function (element, fieldName) {\n\t fieldName = fieldName.replace(nameSpecialCharRegExp, \"\\\\$1\");\n\t return element.find(\".field-validation-valid[data-valmsg-for='\" + fieldName + \"'], .field-validation-error[data-valmsg-for='\" + fieldName + \"']\");\n\t },\n\t decorate: function (message, fieldName) {\n\t message.addClass(\"field-validation-error\").attr(\"data-valmsg-for\", fieldName || \"\");\n\t }\n\t },\n\t mvcMetadataLocator: {\n\t locate: function (element, fieldName) {\n\t fieldName = fieldName.replace(nameSpecialCharRegExp, \"\\\\$1\");\n\t return element.find(\"#\" + fieldName + \"_validationMessage.field-validation-valid\");\n\t },\n\t decorate: function (message, fieldName) {\n\t message.addClass(\"field-validation-error\").attr(\"id\", fieldName + \"_validationMessage\");\n\t }\n\t }\n\t },\n\t ruleResolvers: {\n\t mvcMetaDataResolver: {\n\t resolve: function (element) {\n\t var metadata = window.mvcClientValidationMetadata || [];\n\n\t if (metadata.length) {\n\t element = $(element);\n\t for (var idx = 0; idx < metadata.length; idx++) {\n\t if (metadata[idx].FormId == element.attr(\"id\")) {\n\t return rulesFromData(metadata[idx]);\n\t }\n\t }\n\t }\n\t return {};\n\t }\n\t }\n\t },\n\t validateOnInit: function(element) {\n\t return !!element.find(\"input[data-val-server]\").length;\n\t },\n\t allowSubmit: function(element, errors) {\n\t return !!errors && errors.length === element.find(\"input[data-val-server]\").length;\n\t }\n\t });\n\t})(window.kendo.jQuery);\n\n\t}, __webpack_require__(3));\n\n\n/***/ }),\n\n/***/ 18:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./kendo.imagebrowser.aspnetmvc\");\n\n/***/ })\n\n/******/ });","module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(138);\n\tmodule.exports = __webpack_require__(138);\n\n\n/***/ }),\n\n/***/ 138:\n/***/ (function(module, exports) {\n\n\t(function( window, undefined ) {\n\t kendo.cultures[\"de\"] = {\n\t name: \"de\",\n\t numberFormat: {\n\t pattern: [\"-n\"],\n\t decimals: 2,\n\t \",\": \".\",\n\t \".\": \",\",\n\t groupSize: [3],\n\t percent: {\n\t pattern: [\"-n %\",\"n %\"],\n\t decimals: 2,\n\t \",\": \".\",\n\t \".\": \",\",\n\t groupSize: [3],\n\t symbol: \"%\"\n\t },\n\t currency: {\n\t name: \"\",\n\t abbr: \"\",\n\t pattern: [\"-n $\",\"n $\"],\n\t decimals: 2,\n\t \",\": \".\",\n\t \".\": \",\",\n\t groupSize: [3],\n\t symbol: \"€\"\n\t }\n\t },\n\t calendars: {\n\t standard: {\n\t days: {\n\t names: [\"Sonntag\",\"Montag\",\"Dienstag\",\"Mittwoch\",\"Donnerstag\",\"Freitag\",\"Samstag\"],\n\t namesAbbr: [\"So\",\"Mo\",\"Di\",\"Mi\",\"Do\",\"Fr\",\"Sa\"],\n\t namesShort: [\"So\",\"Mo\",\"Di\",\"Mi\",\"Do\",\"Fr\",\"Sa\"]\n\t },\n\t months: {\n\t names: [\"Januar\",\"Februar\",\"März\",\"April\",\"Mai\",\"Juni\",\"Juli\",\"August\",\"September\",\"Oktober\",\"November\",\"Dezember\"],\n\t namesAbbr: [\"Jan\",\"Feb\",\"Mrz\",\"Apr\",\"Mai\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Okt\",\"Nov\",\"Dez\"]\n\t },\n\t AM: [\"\"],\n\t PM: [\"\"],\n\t patterns: {\n\t d: \"dd.MM.yyyy\",\n\t D: \"dddd, d. MMMM yyyy\",\n\t F: \"dddd, d. MMMM yyyy HH:mm:ss\",\n\t g: \"dd.MM.yyyy HH:mm\",\n\t G: \"dd.MM.yyyy HH:mm:ss\",\n\t m: \"d. MMMM\",\n\t M: \"d. MMMM\",\n\t s: \"yyyy'-'MM'-'dd'T'HH':'mm':'ss\",\n\t t: \"HH:mm\",\n\t T: \"HH:mm:ss\",\n\t u: \"yyyy'-'MM'-'dd HH':'mm':'ss'Z'\",\n\t y: \"MMMM yyyy\",\n\t Y: \"MMMM yyyy\"\n\t },\n\t \"/\": \".\",\n\t \":\": \":\",\n\t firstDay: 1\n\t }\n\t }\n\t }\n\t})(this);\n\n\n/***/ })\n\n/******/ });","module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(165);\n\tmodule.exports = __webpack_require__(165);\n\n\n/***/ }),\n\n/***/ 165:\n/***/ (function(module, exports) {\n\n\t(function( window, undefined ) {\n\t kendo.cultures[\"en\"] = {\n\t name: \"en\",\n\t numberFormat: {\n\t pattern: [\"-n\"],\n\t decimals: 2,\n\t \",\": \",\",\n\t \".\": \".\",\n\t groupSize: [3],\n\t percent: {\n\t pattern: [\"-n %\",\"n %\"],\n\t decimals: 2,\n\t \",\": \",\",\n\t \".\": \".\",\n\t groupSize: [3],\n\t symbol: \"%\"\n\t },\n\t currency: {\n\t name: \"\",\n\t abbr: \"\",\n\t pattern: [\"($n)\",\"$n\"],\n\t decimals: 2,\n\t \",\": \",\",\n\t \".\": \".\",\n\t groupSize: [3],\n\t symbol: \"$\"\n\t }\n\t },\n\t calendars: {\n\t standard: {\n\t days: {\n\t names: [\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],\n\t namesAbbr: [\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],\n\t namesShort: [\"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"]\n\t },\n\t months: {\n\t names: [\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],\n\t namesAbbr: [\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"]\n\t },\n\t AM: [\"AM\",\"am\",\"AM\"],\n\t PM: [\"PM\",\"pm\",\"PM\"],\n\t patterns: {\n\t d: \"M/d/yyyy\",\n\t D: \"dddd, MMMM d, yyyy\",\n\t F: \"dddd, MMMM d, yyyy h:mm:ss tt\",\n\t g: \"M/d/yyyy h:mm tt\",\n\t G: \"M/d/yyyy h:mm:ss tt\",\n\t m: \"MMMM d\",\n\t M: \"MMMM d\",\n\t s: \"yyyy'-'MM'-'dd'T'HH':'mm':'ss\",\n\t t: \"h:mm tt\",\n\t T: \"h:mm:ss tt\",\n\t u: \"yyyy'-'MM'-'dd HH':'mm':'ss'Z'\",\n\t y: \"MMMM yyyy\",\n\t Y: \"MMMM yyyy\"\n\t },\n\t \"/\": \"/\",\n\t \":\": \":\",\n\t firstDay: 0\n\t }\n\t }\n\t }\n\t})(this);\n\n\n/***/ })\n\n/******/ });","module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(273);\n\tmodule.exports = __webpack_require__(273);\n\n\n/***/ }),\n\n/***/ 273:\n/***/ (function(module, exports) {\n\n\t(function( window, undefined ) {\n\t kendo.cultures[\"es\"] = {\n\t name: \"es\",\n\t numberFormat: {\n\t pattern: [\"-n\"],\n\t decimals: 2,\n\t \",\": \".\",\n\t \".\": \",\",\n\t groupSize: [3],\n\t percent: {\n\t pattern: [\"-n %\",\"n %\"],\n\t decimals: 2,\n\t \",\": \".\",\n\t \".\": \",\",\n\t groupSize: [3],\n\t symbol: \"%\"\n\t },\n\t currency: {\n\t name: \"\",\n\t abbr: \"\",\n\t pattern: [\"-n $\",\"n $\"],\n\t decimals: 2,\n\t \",\": \".\",\n\t \".\": \",\",\n\t groupSize: [3],\n\t symbol: \"€\"\n\t }\n\t },\n\t calendars: {\n\t standard: {\n\t days: {\n\t names: [\"domingo\",\"lunes\",\"martes\",\"miércoles\",\"jueves\",\"viernes\",\"sábado\"],\n\t namesAbbr: [\"do.\",\"lu.\",\"ma.\",\"mi.\",\"ju.\",\"vi.\",\"sá.\"],\n\t namesShort: [\"D\",\"L\",\"M\",\"X\",\"J\",\"V\",\"S\"]\n\t },\n\t months: {\n\t names: [\"enero\",\"febrero\",\"marzo\",\"abril\",\"mayo\",\"junio\",\"julio\",\"agosto\",\"septiembre\",\"octubre\",\"noviembre\",\"diciembre\"],\n\t namesAbbr: [\"ene.\",\"feb.\",\"mar.\",\"abr.\",\"may.\",\"jun.\",\"jul.\",\"ago.\",\"sep.\",\"oct.\",\"nov.\",\"dic.\"]\n\t },\n\t AM: [\"\"],\n\t PM: [\"\"],\n\t patterns: {\n\t d: \"dd/MM/yyyy\",\n\t D: \"dddd, d' de 'MMMM' de 'yyyy\",\n\t F: \"dddd, d' de 'MMMM' de 'yyyy H:mm:ss\",\n\t g: \"dd/MM/yyyy H:mm\",\n\t G: \"dd/MM/yyyy H:mm:ss\",\n\t m: \"d 'de' MMMM\",\n\t M: \"d 'de' MMMM\",\n\t s: \"yyyy'-'MM'-'dd'T'HH':'mm':'ss\",\n\t t: \"H:mm\",\n\t T: \"H:mm:ss\",\n\t u: \"yyyy'-'MM'-'dd HH':'mm':'ss'Z'\",\n\t y: \"MMMM' de 'yyyy\",\n\t Y: \"MMMM' de 'yyyy\"\n\t },\n\t \"/\": \"/\",\n\t \":\": \":\",\n\t firstDay: 1\n\t }\n\t }\n\t }\n\t})(this);\n\n\n/***/ })\n\n/******/ });","module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(931);\n\tmodule.exports = __webpack_require__(931);\n\n\n/***/ }),\n\n/***/ 3:\n/***/ (function(module, exports) {\n\n\tmodule.exports = function() { throw new Error(\"define cannot be used indirect\"); };\r\n\n\n/***/ }),\n\n/***/ 931:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function(f, define){\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(932) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (f), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t})(function(){\n\n\t(function($, undefined) {\n\n\t var kendo = window.kendo,\n\t ui = kendo.ui,\n\t keys = kendo.keys,\n\t DISABLED = \"k-state-disabled\",\n\t SELECT = \"select\",\n\t CHECKED = \"checked\",\n\t proxy = $.proxy,\n\t DATABOUND = \"dataBound\",\n\t CLICK = \"click\",\n\t NS = \".kendoTreeView\",\n\t INDETERMINATE = \"indeterminate\",\n\t NAVIGATE = \"navigate\",\n\t subGroup,\n\t TreeView = ui.TreeView;\n\n\t function contentChild(filter) {\n\t return function(node) {\n\t var result = node.children(\".k-animation-container\");\n\n\t if (!result.length) {\n\t result = node;\n\t }\n\n\t return result.children(filter);\n\t };\n\t }\n\n\t subGroup = contentChild(\".k-group\");\n\n\t var Tree = TreeView.extend({\n\t init: function(element, options, dropdowntree) {\n\t var that = this;\n\n\t that.dropdowntree = dropdowntree;\n\t that._nodesToLoad = 0;\n\n\t TreeView.fn.init.call(that, element, options);\n\t if(that.dropdowntree._isMultipleSelection()){\n\t that.wrapper.on(CLICK + NS, '.k-in.k-state-selected', proxy(that._clickSelectedItem, that));\n\t }\n\t },\n\n\t _checkOnSelect: function (e) {\n\t if (!e.isDefaultPrevented()) {\n\t var dataItem = this.dataItem(e.node);\n\n\t dataItem.set(\"checked\", !dataItem.checked);\n\t }\n\t },\n\n\t _setCheckedValue: function (node, value){\n\t node.set(CHECKED, value);\n\t },\n\n\t _click: function (e) {\n\t var that = this;\n\n\t if(that.dropdowntree._isMultipleSelection()){\n\t that.one(\"select\", that._checkOnSelect);\n\t }\n\t TreeView.fn._click.call(that, e);\n\t },\n\n\t _clickSelectedItem: function (e) {\n\t var that = this,\n\t node = $(e.currentTarget);\n\n\t that.one(\"select\", that._checkOnSelect);\n\t if (!that._trigger(SELECT, node)) {\n\t that.dataItem(node).set(\"selected\", false);\n\t }\n\t },\n\n\t defaultrefresh: function(e) {\n\t var that = this;\n\t var node = e.node;\n\t var action = e.action;\n\t var items = e.items;\n\t var parentNode = this.wrapper;\n\t var options = this.options;\n\t var loadOnDemand = options.loadOnDemand;\n\t var checkChildren = options.checkboxes && options.checkboxes.checkChildren;\n\t var i;\n\n\t if (this._skip) {\n\t return;\n\t }\n\n\t if (e.field) {\n\t if (!items[0] || !items[0].level) {\n\t return;\n\t }\n\n\t return this._updateNodes(items, e.field);\n\t }\n\n\t if (node) {\n\t parentNode = this.findByUid(node.uid);\n\t this._progress(parentNode, false);\n\t }\n\n\t if (checkChildren && action != \"remove\") {\n\t var bubble = false;\n\n\t for (i = 0; i < items.length; i++) {\n\t if (\"checked\" in items[i]) {\n\t bubble = true;\n\t break;\n\t }\n\t }\n\n\t if (!bubble && node && node.checked) {\n\t for (i = 0; i < items.length; i++) {\n\t items[i].checked = true;\n\t }\n\t }\n\t }\n\n\t if (action == \"add\") {\n\t this._appendItems(e.index, items, parentNode);\n\t } else if (action == \"remove\") {\n\t this._remove(this.findByUid(items[0].uid), false);\n\t } else if (action == \"itemchange\") {\n\t this._updateNodes(items);\n\t } else if (action == \"itemloaded\") {\n\t this._nodesToLoad --;\n\t this._refreshChildren(parentNode, items, e.index);\n\t } else {\n\t this._refreshRoot(items);\n\t }\n\n\t if (action != \"remove\") {\n\t for (i = 0; i < items.length; i++) {\n\t if (!loadOnDemand || items[i].expanded) {\n\t if(items[i].hasChildren){\n\t that._nodesToLoad ++;\n\t }\n\t items[i].load();\n\t }\n\t }\n\t }\n\t if(this._nodesToLoad === 0){\n\t this.dropdowntree.trigger(\"allNodesAreLoaded\");\n\t }\n\t this.trigger(DATABOUND, { node: node ? parentNode : undefined });\n\t this.dropdowntree._treeViewDataBound({ node: node ? parentNode : undefined, sender: this });\n\t if (this.options.checkboxes.checkChildren) {\n\t this.updateIndeterminate();\n\t }\n\t },\n\n\t _previousVisible: function(node) {\n\t var that = this,\n\t lastChild,\n\t result;\n\n\t if (!node.length || node.prev().length) {\n\t if (node.length) {\n\t result = node.prev();\n\t } else {\n\t result = that.root.children().last();\n\t }\n\n\t while (that._expanded(result)) {\n\t lastChild = subGroup(result).children().last();\n\n\t if (!lastChild.length) {\n\t break;\n\t }\n\n\t result = lastChild;\n\t }\n\t } else {\n\t result = that.parent(node) || node;\n\n\t if(!result.length){\n\t if (that.dropdowntree.checkAll && that.dropdowntree.checkAll.is(\":visible\")) {\n\t that.dropdowntree.checkAll.find(\".k-checkbox\").focus();\n\t } else if(that.dropdowntree.filterInput){\n\t that.dropdowntree.filterInput.focus();\n\t } else {\n\t that.dropdowntree.wrapper.focus();\n\t }\n\t }\n\t }\n\n\t return result;\n\t },\n\n\t _keydown: function(e) {\n\t var that = this,\n\t key = e.keyCode,\n\t target,\n\t focused = that.current(),\n\t expanded = that._expanded(focused),\n\t checkbox = focused.find(\".k-checkbox-wrapper:first :checkbox\"),\n\t rtl = kendo.support.isRtl(that.element);\n\n\t if (e.target != e.currentTarget) {\n\t return;\n\t }\n\n\t if ((!rtl && key == keys.RIGHT) || (rtl && key == keys.LEFT)) {\n\t if (expanded) {\n\t target = that._nextVisible(focused);\n\t } else if (!focused.find(\".k-in:first\").hasClass(DISABLED)) {\n\t that.expand(focused);\n\t }\n\t } else if ((!rtl && key == keys.LEFT) || (rtl && key == keys.RIGHT)) {\n\t if (expanded && !focused.find(\".k-in:first\").hasClass(DISABLED)) {\n\t that.collapse(focused);\n\t } else {\n\t target = that.parent(focused);\n\n\t if (!that._enabled(target)) {\n\t target = undefined;\n\t }\n\t }\n\t } else if (key == keys.DOWN) {\n\t target = that._nextVisible(focused);\n\t } else if (key == keys.UP && !e.altKey) {\n\t target = that._previousVisible(focused);\n\t } else if (key == keys.HOME) {\n\t target = that._nextVisible($());\n\t } else if (key == keys.END) {\n\t target = that._previousVisible($());\n\t } else if (key == keys.ENTER && !focused.find(\".k-in:first\").hasClass(DISABLED)) {\n\t if (!focused.find(\".k-in:first\").hasClass(\"k-state-selected\")) {\n\t if (!that._trigger(SELECT, focused)) {\n\t that.select(focused);\n\t }\n\t }\n\t } else if (key == keys.SPACEBAR && checkbox.length && !focused.find(\".k-in:first\").hasClass(DISABLED)) {\n\t checkbox.prop(CHECKED, !checkbox.prop(CHECKED))\n\t .data(INDETERMINATE, false)\n\t .prop(INDETERMINATE, false);\n\n\t that._checkboxChange({ target: checkbox });\n\n\t target = focused;\n\t } else if ((e.altKey && key === keys.UP) || key === keys.ESC) {\n\t that._closePopup();\n\t } else if ( key === keys.TAB) {\n\t e.preventDefault();\n\t that._closePopup();\n\t }\n\n\t if (target) {\n\t e.preventDefault();\n\n\t if (focused[0] != target[0]) {\n\t that._trigger(NAVIGATE, target);\n\t that.current(target);\n\t }\n\t }\n\t },\n\n\t _closePopup: function() {\n\t this.dropdowntree.close();\n\t this.dropdowntree.wrapper.focus();\n\t },\n\n\t refresh: function(e){\n\t this.defaultrefresh(e);\n\n\t if(this.dropdowntree.options.skipUpdateOnBind){\n\t return;\n\t }\n\n\t if (e.action === \"itemchange\") {\n\t if (this.dropdowntree._isMultipleSelection()) {\n\t if(e.field === \"checked\"){\n\t this.dropdowntree._checkValue(e.items[0]);\n\t }\n\t } else {\n\t if(e.field !== \"checked\" && e.field !== \"expanded\" && e.items[0].selected){\n\t this.dropdowntree._selectValue(e.items[0]);\n\t }\n\t }\n\t } else {\n\t this.dropdowntree.refresh(e);\n\t }\n\t }\n\n\t });\n\n\t kendo.ui._dropdowntree = Tree;\n\n\t})(window.kendo.jQuery);\n\n\treturn window.kendo;\n\n\t}, __webpack_require__(3));\n\n\n/***/ }),\n\n/***/ 932:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"../kendo.treeview\");\n\n/***/ })\n\n/******/ });","module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(1019);\n\n\n/***/ }),\n\n/***/ 3:\n/***/ (function(module, exports) {\n\n\tmodule.exports = function() { throw new Error(\"define cannot be used indirect\"); };\r\n\n\n/***/ }),\n\n/***/ 1019:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function(f, define){\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [\n\t __webpack_require__(1027), __webpack_require__(1021), __webpack_require__(1022), __webpack_require__(1023), __webpack_require__(1024), __webpack_require__(1025),\n\n\t __webpack_require__(1026),\n\t __webpack_require__(1020),\n\t __webpack_require__(1028),\n\t __webpack_require__(1029),\n\t __webpack_require__(1030),\n\t __webpack_require__(1031),\n\t __webpack_require__(1032),\n\t __webpack_require__(1033),\n\t __webpack_require__(1034)\n\t ], __WEBPACK_AMD_DEFINE_FACTORY__ = (f), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t})(function(){\n\n\tvar __meta__ = { // jshint ignore:line\n\t id: \"aspnetmvc\",\n\t name: \"ASP.NET MVC\",\n\t category: \"wrappers\",\n\t description: \"Scripts required by Telerik UI for ASP.NET MVC\",\n\t depends: [ \"data\", \"combobox\", \"multicolumncombobox\", \"dropdownlist\", \"multiselect\", \"validator\" ]\n\t};\n\n\t(function($, undefined) {\n\t var extend = $.extend;\n\n\t $(function() { kendo.__documentIsReady = true; });\n\n\t function syncReady(cb) {\n\t if(kendo.__documentIsReady) { //sync operation\n\t cb();\n\t }\n\t else { //async operation\n\t $(cb);\n\t }\n\t }\n\n\t extend(kendo, {\n\t syncReady: syncReady\n\t });\n\t})(window.kendo.jQuery);\n\n\t}, __webpack_require__(3));\n\n\n/***/ }),\n\n/***/ 1020:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./aspnetmvc/kendo.combobox.aspnetmvc\");\n\n/***/ }),\n\n/***/ 1021:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./kendo.combobox\");\n\n/***/ }),\n\n/***/ 1022:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./kendo.dropdownlist\");\n\n/***/ }),\n\n/***/ 1023:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./kendo.dropdowntree\");\n\n/***/ }),\n\n/***/ 1024:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./kendo.multiselect\");\n\n/***/ }),\n\n/***/ 1025:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./kendo.validator\");\n\n/***/ }),\n\n/***/ 1026:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./aspnetmvc/kendo.data.aspnetmvc\");\n\n/***/ }),\n\n/***/ 1027:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./kendo.data\");\n\n/***/ }),\n\n/***/ 1028:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./aspnetmvc/kendo.multicolumncombobox.aspnetmvc\");\n\n/***/ }),\n\n/***/ 1029:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./aspnetmvc/kendo.dropdownlist.aspnetmvc\");\n\n/***/ }),\n\n/***/ 1030:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./aspnetmvc/kendo.dropdowntree.aspnetmvc\");\n\n/***/ }),\n\n/***/ 1031:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./aspnetmvc/kendo.multiselect.aspnetmvc\");\n\n/***/ }),\n\n/***/ 1032:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./aspnetmvc/kendo.imagebrowser.aspnetmvc\");\n\n/***/ }),\n\n/***/ 1033:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./aspnetmvc/kendo.validator.aspnetmvc\");\n\n/***/ }),\n\n/***/ 1034:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./aspnetmvc/kendo.filemanager.aspnetmvc\");\n\n/***/ })\n\n/******/ });","module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(1045);\n\n\n/***/ }),\n\n/***/ 3:\n/***/ (function(module, exports) {\n\n\tmodule.exports = function() { throw new Error(\"define cannot be used indirect\"); };\r\n\n\n/***/ }),\n\n/***/ 1018:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./kendo.core\");\n\n/***/ }),\n\n/***/ 1045:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function(f, define){\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(1018), __webpack_require__(1046) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (f), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t})(function(){\n\n\tvar __meta__ = { // jshint ignore:line\n\t id: \"calendar\",\n\t name: \"Calendar\",\n\t category: \"web\",\n\t description: \"The Calendar widget renders a graphical calendar that supports navigation and selection.\",\n\t depends: [ \"core\", \"selectable\" ]\n\t};\n\n\t(function($, undefined) {\n\t var kendo = window.kendo,\n\t support = kendo.support,\n\t ui = kendo.ui,\n\t Widget = ui.Widget,\n\t keys = kendo.keys,\n\t parse = kendo.parseDate,\n\t adjustDST = kendo.date.adjustDST,\n\t weekInYear = kendo.date.weekInYear,\n\t Selectable = kendo.ui.Selectable,\n\t extractFormat = kendo._extractFormat,\n\t template = kendo.template,\n\t getCulture = kendo.getCulture,\n\t transitions = kendo.support.transitions,\n\t transitionOrigin = transitions ? transitions.css + \"transform-origin\" : \"\",\n\t cellTemplate = template('#=data.value#', { useWithBlock: false }),\n\t emptyCellTemplate = template('', { useWithBlock: false }),\n\t otherMonthCellTemplate = template(' ', { useWithBlock: false }),\n\t weekNumberTemplate = template('#= data.weekNumber #', { useWithBlock: false }),\n\t browser = kendo.support.browser,\n\t isIE8 = browser.msie && browser.version < 9,\n\t outerWidth = kendo._outerWidth,\n\t ns = \".kendoCalendar\",\n\t CLICK = \"click\" + ns,\n\t KEYDOWN_NS = \"keydown\" + ns,\n\t ID = \"id\",\n\t MIN = \"min\",\n\t LEFT = \"left\",\n\t SLIDE = \"slideIn\",\n\t MONTH = \"month\",\n\t CENTURY = \"century\",\n\t CHANGE = \"change\",\n\t NAVIGATE = \"navigate\",\n\t VALUE = \"value\",\n\t HOVER = \"k-state-hover\",\n\t DISABLED = \"k-state-disabled\",\n\t FOCUSED = \"k-state-focused\",\n\t OTHERMONTH = \"k-other-month\",\n\t OTHERMONTHCLASS = ' class=\"' + OTHERMONTH + '\"',\n\t OUTOFRANGE = \"k-out-of-range\",\n\t TODAY = \"k-nav-today\",\n\t CELLSELECTOR = \"td:has(.k-link)\",\n\t CELLSELECTORVALID = \"td:has(.k-link):not(.\" + DISABLED + \"):not(.\" + OUTOFRANGE + \")\",\n\t WEEKCOLUMNSELECTOR = \"td:not(:has(.k-link))\",\n\t SELECTED = \"k-state-selected\",\n\t BLUR = \"blur\" + ns,\n\t FOCUS = \"focus\",\n\t FOCUS_WITH_NS = FOCUS + ns,\n\t MOUSEENTER = support.touch ? \"touchstart\" : \"mouseenter\",\n\t MOUSEENTER_WITH_NS = support.touch ? \"touchstart\" + ns : \"mouseenter\" + ns,\n\t MOUSELEAVE = support.touch ? \"touchend\" + ns + \" touchmove\" + ns : \"mouseleave\" + ns,\n\t MS_PER_MINUTE = 60000,\n\t MS_PER_DAY = 86400000,\n\t PREVARROW = \"_prevArrow\",\n\t NEXTARROW = \"_nextArrow\",\n\t ARIA_DISABLED = \"aria-disabled\",\n\t ARIA_SELECTED = \"aria-selected\",\n\t ARIA_LABEL = \"aria-label\",\n\t proxy = $.proxy,\n\t extend = $.extend,\n\t DATE = Date,\n\t views = {\n\t month: 0,\n\t year: 1,\n\t decade: 2,\n\t century: 3\n\t },\n\t HEADERSELECTOR = '.k-header, .k-calendar-header',\n\t CLASSIC_HEADER_TEMPLATE = '
' +\n\t '' +\n\t '' +\n\t '' +\n\t '
',\n\t MODERN_HEADER_TEMPLATE = '
' +\n\t '' +\n\t '' +\n\t '' +\n\t '' +\n\t '' +\n\t '#=messages.today#' +\n\t '' +\n\t '' +\n\t '' +\n\t '' +\n\t '
';\n\n\t var Calendar = Widget.extend({\n\t init: function(element, options) {\n\t var that = this, value, id;\n\t options = options || {};\n\t options.componentType = options.componentType || \"classic\";\n\t Widget.fn.init.call(that, element, options);\n\n\t element = that.wrapper = that.element;\n\t options = that.options;\n\n\t options.url = kendo.unescape(options.url);\n\n\t that.options.disableDates = getDisabledExpr(that.options.disableDates);\n\n\t that._templates();\n\n\t that._selectable();\n\n\t that._header();\n\n\t that._viewWrapper();\n\n\t if (that.options.hasFooter) {\n\t that._footer(that.footer);\n\t }\n\n\t id = element\n\t .addClass(\"k-widget k-calendar \" + (options.weekNumber ? \" k-week-number\" : \"\"))\n\t .on(MOUSEENTER_WITH_NS + \" \" + MOUSELEAVE, CELLSELECTOR, mousetoggle)\n\t .on(KEYDOWN_NS, \"table.k-content\", proxy(that._move, that))\n\t .on(CLICK + \" touchend\", CELLSELECTOR, function(e) {\n\t var link = e.currentTarget.firstChild,\n\t value = toDateObject(link);\n\n\t if (link.href.indexOf(\"#\") != -1) {\n\t e.preventDefault();\n\t }\n\n\t if (that._view.name == \"month\" && that.options.disableDates(value)) {\n\t return;\n\t }\n\t if(that._view.name != \"month\" || options.selectable == \"single\") {\n\t that._click($(link));\n\t }\n\t })\n\t .on(\"mouseup\" + ns, \"table.k-content, .k-footer\", function() {\n\t that._focusView(that.options.focusOnNav !== false);\n\t })\n\t .attr(ID);\n\n\t if (id) {\n\t that._cellID = id + \"_cell_selected\";\n\t }\n\n\t if(that._isMultipleSelection() && that.options.weekNumber) {\n\t element.on(CLICK, WEEKCOLUMNSELECTOR, function(e) {\n\t var first = $(e.currentTarget).closest(\"tr\").find(CELLSELECTORVALID).first(),\n\t last = that.selectable._lastActive = $(e.currentTarget).closest(\"tr\").find(CELLSELECTORVALID).last();\n\t that.selectable.selectRange(first, last, { event: e});\n\t that._current = that._value = toDateObject(last.find(\"a\"));\n\t that._class(FOCUSED, that._current);\n\t });\n\t }\n\n\t normalize(options);\n\t value = parse(options.value, options.format, options.culture);\n\t that._selectDates = [];\n\n\t that._index = views[options.start];\n\n\t that._current = new DATE(+restrictValue(value, options.min, options.max));\n\n\t that._addClassProxy = function() {\n\t that._active = true;\n\n\t if (that._cell.hasClass(DISABLED)) {\n\t var todayString = that._view.toDateString(getToday());\n\t that._cell = that._cellByDate(todayString);\n\t }\n\n\t that._cell.addClass(FOCUSED);\n\t };\n\n\t that._removeClassProxy = function() {\n\t that._active = false;\n\t that._cell.removeClass(FOCUSED);\n\t };\n\n\t that.value(value);\n\n\t if(that._isMultipleSelection() && options.selectDates.length > 0) {\n\t that.selectDates(options.selectDates);\n\t }\n\t kendo.notify(that);\n\t },\n\n\t options: {\n\t name: \"Calendar\",\n\t value: null,\n\t min: new DATE(1900, 0, 1),\n\t max: new DATE(2099, 11, 31),\n\t dates: [],\n\t disableDates: null,\n\t url: \"\",\n\t culture: \"\",\n\t footer : \"\",\n\t format : \"\",\n\t month : {},\n\t weekNumber: false,\n\t selectable: \"single\",\n\t selectDates: [],\n\t start: MONTH,\n\t depth: MONTH,\n\t animation: {\n\t horizontal: {\n\t effects: SLIDE,\n\t reverse: true,\n\t duration: 500,\n\t divisor: 2\n\t },\n\t vertical: {\n\t effects: \"zoomIn\",\n\t duration: 400\n\t }\n\t },\n\t messages: {\n\t weekColumnHeader: \"\",\n\t today: \"Today\"\n\t }\n\t },\n\n\t events: [\n\t CHANGE,\n\t NAVIGATE\n\t ],\n\n\t componentTypes: {\n\t \"classic\": {\n\t header: {\n\t template: CLASSIC_HEADER_TEMPLATE\n\t },\n\t hasFooter: true,\n\t linksSelector: \".k-link\",\n\t contentClasses: \"k-content\"\n\t },\n\t \"modern\": {\n\t header: {\n\t template: MODERN_HEADER_TEMPLATE\n\t },\n\t hasFooter: false,\n\t linksSelector: \".k-button\",\n\t contentClasses: \"k-content k-calendar-content\"\n\t }\n\t },\n\n\t setOptions: function(options) {\n\t var that = this;\n\n\t normalize(options);\n\n\t options.disableDates = getDisabledExpr(options.disableDates);\n\t that._destroySelectable();\n\n\t Widget.fn.setOptions.call(that, options);\n\n\t that._templates();\n\n\t that._selectable();\n\n\t that._viewWrapper();\n\n\t if (that.options.hasFooter) {\n\t that._footer(that.footer);\n\t } else {\n\t that.element.find(\".k-footer\").hide();\n\t }\n\t that._index = views[that.options.start];\n\n\t that.navigate();\n\n\t if(options.weekNumber) {\n\t that.element.addClass('k-week-number');\n\t }\n\t },\n\n\t destroy: function() {\n\t var that = this,\n\t today = that._today;\n\n\t that.element.off(ns);\n\t that._title.off(ns);\n\t that[PREVARROW].off(ns);\n\t that[NEXTARROW].off(ns);\n\t that._destroySelectable();\n\t kendo.destroy(that._table);\n\n\t if (today) {\n\t kendo.destroy(today.off(ns));\n\t }\n\n\t Widget.fn.destroy.call(that);\n\t },\n\n\t current: function() {\n\t return this._current;\n\t },\n\n\t view: function() {\n\t return this._view;\n\t },\n\n\t focus: function(table) {\n\t table = table || this._table;\n\t this._bindTable(table);\n\t table.trigger(\"focus\");\n\t },\n\n\t min: function(value) {\n\t return this._option(MIN, value);\n\t },\n\n\t max: function(value) {\n\t return this._option(\"max\", value);\n\t },\n\n\t navigateToPast: function() {\n\t this._navigate(PREVARROW, -1);\n\t },\n\n\t navigateToFuture: function() {\n\t this._navigate(NEXTARROW, 1);\n\t },\n\n\t navigateUp: function() {\n\t var that = this,\n\t index = that._index;\n\n\t if (that._title.hasClass(DISABLED)) {\n\t return;\n\t }\n\n\t that.navigate(that._current, ++index);\n\t },\n\n\t navigateDown: function(value) {\n\t var that = this,\n\t index = that._index,\n\t depth = that.options.depth;\n\n\t if (!value) {\n\t return;\n\t }\n\n\t if (index === views[depth]) {\n\t if (!isEqualDate(that._value, that._current) || !isEqualDate(that._value, value)) {\n\t that.value(value);\n\t that.trigger(CHANGE);\n\t }\n\t return;\n\t }\n\n\t that.navigate(value, --index);\n\t },\n\n\t navigate: function(value, view) {\n\t view = isNaN(view) ? views[view] : view;\n\n\t var that = this,\n\t options = that.options,\n\t culture = options.culture,\n\t min = options.min,\n\t max = options.max,\n\t title = that._title,\n\t from = that._table,\n\t old = that._oldTable,\n\t currentValue = that._current,\n\t future = value && +value > +currentValue,\n\t vertical = view !== undefined && view !== that._index,\n\t to, currentView, compare,\n\t disabled,\n\t viewWrapper = that.element.children(\".k-calendar-view\");\n\n\t if (!value) {\n\t value = currentValue;\n\t }\n\n\t that._current = value = new DATE(+restrictValue(value, min, max));\n\n\t if (view === undefined) {\n\t view = that._index;\n\t } else {\n\t that._index = view;\n\t }\n\n\t that._view = currentView = calendar.views[view];\n\t compare = currentView.compare;\n\n\t disabled = view === views[CENTURY];\n\t title.toggleClass(DISABLED, disabled).attr(ARIA_DISABLED, disabled);\n\n\t disabled = compare(value, min) < 1;\n\t that[PREVARROW].toggleClass(DISABLED, disabled).attr(ARIA_DISABLED, disabled);\n\t if (that[PREVARROW].hasClass(DISABLED)) {\n\t that[PREVARROW].removeClass(HOVER);\n\t }\n\n\t disabled = compare(value, max) > -1;\n\t that[NEXTARROW].toggleClass(DISABLED, disabled).attr(ARIA_DISABLED, disabled);\n\t if (that[NEXTARROW].hasClass(DISABLED)) {\n\t that[NEXTARROW].removeClass(HOVER);\n\t }\n\n\t if (from && old && old.data(\"animating\")) {\n\t old.kendoStop(true, true);\n\t from.kendoStop(true, true);\n\t }\n\n\t that._oldTable = from;\n\n\t if (!from || that._changeView) {\n\t title.html(currentView.title(value, min, max, culture));\n\n\t that._table = to = $(currentView.content(extend({\n\t min: min,\n\t max: max,\n\t date: value,\n\t url: options.url,\n\t dates: options.dates,\n\t format: options.format,\n\t otherMonth : true,\n\t culture: culture,\n\t disableDates: options.disableDates,\n\t isWeekColumnVisible: options.weekNumber,\n\t messages: options.messages,\n\t contentClasses: that.options.contentClasses\n\t }, that[currentView.name])));\n\n\t addClassToViewContainer(to, currentView.name);\n\t makeUnselectable(to);\n\t var replace = from && from.data(\"start\") === to.data(\"start\");\n\t that._animate({\n\t from: from,\n\t to: to,\n\t vertical: vertical,\n\t future: future,\n\t replace: replace\n\t });\n\n\t if(that.options.componentType === \"modern\"){\n\t viewWrapper.removeClass(\"k-calendar-monthview k-calendar-yearview k-calendar-decadeview k-calendar-centuryview\");\n\t viewWrapper.addClass(\"k-calendar-\" + currentView.name + \"view\");\n\t }\n\n\t that.trigger(NAVIGATE);\n\n\t that._focus(value);\n\t }\n\n\t if (view === views[options.depth] && that._selectDates.length > 0) {\n\t that._visualizeSelectedDatesInView();\n\t }\n\n\t if(that.options.selectable === \"single\") {\n\t if (view === views[options.depth] && that._value && !that.options.disableDates(that._value)) {\n\t that._class(\"k-state-selected\", that._value);\n\t }\n\t }\n\n\t that._class(FOCUSED, value);\n\n\t if (!from && that._cell) {\n\t that._cell.removeClass(FOCUSED);\n\t }\n\n\t that._changeView = true;\n\t },\n\n\t selectDates: function(dates) {\n\t var that = this,\n\t validSelectedDates,\n\t datesUnique;\n\n\t if(dates === undefined) {\n\t return that._selectDates;\n\t }\n\n\t datesUnique = dates\n\t .map(function (date) { return date.getTime(); })\n\t .filter(function (date, position, array) {\n\t return array.indexOf(date) === position;\n\t })\n\t .map(function (time) { return new Date(time); });\n\n\t validSelectedDates = $.grep(datesUnique, function(value) {\n\t if(value) {\n\t return +that._validateValue(new Date(value.setHours(0, 0, 0, 0))) === +value;\n\t }\n\t });\n\t that._selectDates = validSelectedDates.length > 0 ? validSelectedDates : (datesUnique.length === 0 ? datesUnique : that._selectDates);\n\t that._visualizeSelectedDatesInView();\n\t },\n\n\t value: function(value) {\n\t var that = this,\n\t old = that._view,\n\t view = that._view;\n\n\t if (value === undefined) {\n\t return that._value;\n\t }\n\n\t value = that._validateValue(value);\n\t if (value && that._isMultipleSelection()) {\n\t var date = new Date(+value);\n\t date.setHours(0, 0, 0, 0);\n\t that._selectDates = [date];\n\t that.selectable._lastActive = null;\n\t }\n\t if (old && value === null && that._cell) {\n\t that._cell.removeClass(SELECTED);\n\t } else {\n\t that._changeView = !value || view && view.compare(value, that._current) !== 0;\n\t that.navigate(value);\n\t }\n\t },\n\n\t _validateValue: function(value) {\n\t var that = this,\n\t options = that.options,\n\t min = options.min,\n\t max = options.max;\n\n\t if (value === null) {\n\t that._current = createDate(that._current.getFullYear(), that._current.getMonth(), that._current.getDate());\n\t }\n\n\t value = parse(value, options.format, options.culture);\n\n\t if (value !== null) {\n\t value = new DATE(+value);\n\n\t if (!isInRange(value, min, max)) {\n\t value = null;\n\t }\n\t }\n\n\t if (value === null || !that.options.disableDates(new Date(+value))) {\n\t that._value = value;\n\t } else if (that._value === undefined) {\n\t that._value = null;\n\t }\n\n\t return that._value;\n\t },\n\n\t _visualizeSelectedDatesInView: function() {\n\t var that = this;\n\t var selectedDates = {};\n\t $.each(that._selectDates, function(index, value) {\n\t selectedDates[kendo.calendar.views[0].toDateString(value)] = value;\n\t });\n\t that.selectable.clear();\n\t var cells = that._table\n\t .find(CELLSELECTOR)\n\t .filter(function(index, element) {\n\t return selectedDates[$(element.firstChild).attr(kendo.attr(VALUE))];\n\t });\n\t if(cells.length > 0) {\n\t that.selectable._selectElement(cells, true);\n\t }\n\t },\n\n\t _isMultipleSelection: function() {\n\t var that = this;\n\t return that.options.selectable === \"multiple\";\n\t },\n\n\t _selectable: function() {\n\t var that = this;\n\t if(!that._isMultipleSelection()) {\n\t return;\n\t }\n\n\t var selectable = that.options.selectable,\n\t selectableOptions = Selectable.parseOptions(selectable);\n\n\t if (selectableOptions.multiple) {\n\t that.element.attr(\"aria-multiselectable\", \"true\");\n\t }\n\t that.selectable = new Selectable(that.wrapper, {\n\t aria: true,\n\t //excludes the anchor element\n\t inputSelectors: \"input,textarea,.k-multiselect-wrap,select,button,.k-button>span,.k-button>img,span.k-icon.k-i-arrow-60-down,span.k-icon.k-i-arrow-60-up\",\n\t multiple: selectableOptions.multiple,\n\t filter: \"table.k-month:eq(0) \" + CELLSELECTORVALID,\n\t change: proxy(that._onSelect, that),\n\t relatedTarget: proxy(that._onRelatedTarget, that)\n\t });\n\t },\n\n\t _onRelatedTarget: function(target) {\n\t var that = this;\n\n\t if(that.selectable.options.multiple && target.is(CELLSELECTORVALID)) {\n\t that._current = toDateObject(target.find(\"a\"));\n\t that._class(FOCUSED, toDateObject(target.find(\"a\")));\n\t }\n\n\t },\n\n\t _onSelect: function(e) {\n\t var that = this,\n\t eventArgs = e,\n\t selectableOptions = Selectable.parseOptions(that.options.selectable);\n\n\t if(!selectableOptions.multiple) {\n\t if($(eventArgs.event.currentTarget).is(\"td\") && !$(eventArgs.event.currentTarget).hasClass(\"k-state-selected\")) {\n\t $(eventArgs.event.currentTarget).addClass(\"k-state-selected\");\n\t }\n\t else {\n\t that._click($(eventArgs.event.currentTarget).find(\"a\"));\n\t }\n\t return;\n\t }\n\n\t if(eventArgs.event.ctrlKey || eventArgs.event.metaKey) {\n\t if($(eventArgs.event.currentTarget).is(CELLSELECTORVALID)) {\n\t that._toggleSelection($(eventArgs.event.currentTarget));\n\t }\n\t else {\n\t that._cellsBySelector(CELLSELECTORVALID).each(function(index, element){\n\t var value = toDateObject($(element).find(\"a\"));\n\t that._deselect(value);\n\t });\n\t that._addSelectedCellsToArray();\n\t }\n\t }\n\t else if (eventArgs.event.shiftKey) {\n\t that._rangeSelection(that._cell);\n\t }\n\t else if($(eventArgs.event.currentTarget).is(CELLSELECTOR)) {\n\t that.value(toDateObject($(eventArgs.event.currentTarget).find(\"a\")));\n\t }\n\t else {\n\t that._selectDates = [];\n\t that._addSelectedCellsToArray();\n\t }\n\t that.trigger(CHANGE);\n\t },\n\n\t _destroySelectable: function() {\n\t var that = this;\n\n\t if (that.selectable) {\n\t that.selectable.destroy();\n\t that.selectable = null;\n\t }\n\t },\n\n\t //when ctrl key is clicked\n\t _toggleSelection: function(currentCell) {\n\t var that = this,\n\t date = toDateObject(currentCell.find(\"a\"));\n\t if(currentCell.hasClass(\"k-state-selected\")) {\n\t that._selectDates.push(date);\n\t }\n\t else {\n\t that._deselect(date);\n\t }\n\t },\n\n\t //shift selection\n\t _rangeSelection: function(toDateCell, startDate) {\n\t var that = this,\n\t fromDate = startDate || toDateObject(that.selectable.value().first().find(\"a\")),\n\t toDate = toDateObject(toDateCell.find(\"a\")),\n\t daysDifference;\n\n\t if(that.selectable._lastActive || that._value) {\n\t fromDate = that.selectable._lastActive? toDateObject(that.selectable._lastActive.find(\"a\")): new Date(+that._value);\n\t } else {\n\t that.selectable._lastActive = startDate? that._cellByDate(that._view.toDateString(startDate), CELLSELECTORVALID): that.selectable.value().first();\n\t }\n\n\t that._selectDates = [];\n\t daysDifference = daysBetweenTwoDates(fromDate, toDate);\n\t addDaysToArray(that._selectDates, daysDifference, fromDate, that.options.disableDates);\n\n\t that._visualizeSelectedDatesInView();\n\t },\n\n\t _cellsBySelector: function(selector) {\n\t var that = this;\n\t return that._table.find(selector);\n\t },\n\n\t _addSelectedCellsToArray: function() {\n\t var that = this;\n\t that.selectable.value().each(function(index, item) {\n\t var date = toDateObject($(item.firstChild));\n\t if(!that.options.disableDates(date)) {\n\t that._selectDates.push(date);\n\t }\n\t });\n\t },\n\n\t _deselect: function(date) {\n\t var that = this;\n\t var currentDateIndex = that._selectDates.map(Number).indexOf(+date);\n\t if(currentDateIndex != -1) {\n\t that._selectDates.splice(currentDateIndex, 1);\n\t }\n\t },\n\n\t _dateInView: function(date) {\n\t var that = this,\n\t firstDateInView = toDateObject(that._cellsBySelector(CELLSELECTORVALID + \":first\").find(\"a\")),\n\t lastDateInView = toDateObject(that._cellsBySelector(CELLSELECTORVALID + \":last\").find(\"a\"));\n\n\t return +date <= +lastDateInView && +date >= +firstDateInView;\n\t },\n\n\t _isNavigatable: function(currentValue, cellIndex) {\n\t var that = this;\n\t var isDisabled = that.options.disableDates;\n\t var cell;\n\t var index;\n\n\t if (that._view.name == \"month\") {\n\t return !isDisabled(currentValue);\n\t } else {\n\t index = that.wrapper.find(\".\"+FOCUSED).index();\n\t cell = that.wrapper.find(\".k-content td:eq(\"+(index+cellIndex)+\")\");\n\t return cell.is(CELLSELECTORVALID) || !isDisabled(currentValue);\n\t }\n\t },\n\n\t _move: function(e) {\n\t var that = this,\n\t options = that.options,\n\t key = e.keyCode,\n\t view = that._view,\n\t index = that._index,\n\t min = that.options.min,\n\t max = that.options.max,\n\t currentValue = new DATE(+that._current),\n\t isRtl = kendo.support.isRtl(that.wrapper),\n\t isDisabled = that.options.disableDates,\n\t value, prevent, method, temp;\n\n\t if (e.target === that._table[0]) {\n\t that._active = true;\n\t }\n\n\t if (key == keys.RIGHT && !isRtl || key == keys.LEFT && isRtl) {\n\t value = 1;\n\t prevent = true;\n\t } else if (key == keys.LEFT && !isRtl || key == keys.RIGHT && isRtl) {\n\t value = -1;\n\t prevent = true;\n\t } else if (key == keys.UP) {\n\t value = index === 0 ? -7 : -4;\n\t prevent = true;\n\t } else if (key == keys.DOWN) {\n\t value = index === 0 ? 7 : 4;\n\t prevent = true;\n\t }\n\t else if(key == keys.SPACEBAR) {\n\t value = 0;\n\t prevent = true;\n\t }\n\t else if (key == keys.HOME || key == keys.END) {\n\t method = key == keys.HOME ? \"first\" : \"last\";\n\t temp = view[method](currentValue);\n\t currentValue = new DATE(temp.getFullYear(), temp.getMonth(), temp.getDate(), currentValue.getHours(), currentValue.getMinutes(), currentValue.getSeconds(), currentValue.getMilliseconds());\n\t currentValue.setFullYear(temp.getFullYear());\n\t prevent = true;\n\t }\n\n\t if (e.ctrlKey || e.metaKey) {\n\t if (key == keys.RIGHT && !isRtl || key == keys.LEFT && isRtl) {\n\t that.navigateToFuture();\n\t prevent = true;\n\t } else if (key == keys.LEFT && !isRtl || key == keys.RIGHT && isRtl) {\n\t that.navigateToPast();\n\t prevent = true;\n\t } else if (key == keys.UP) {\n\t that.navigateUp();\n\t prevent = true;\n\t } else if (key == keys.DOWN) {\n\t that._click($(that._cell[0].firstChild));\n\t prevent = true;\n\t }\n\t else if ((key == keys.ENTER || key == keys.SPACEBAR) && that._isMultipleSelection()) {\n\t that._keyboardToggleSelection(e);\n\n\t var focusedDate = toDateObject($(that._cell[0]).find(\"a\"));\n\t that._class(FOCUSED, focusedDate);\n\n\t }\n\t } else if(e.shiftKey) {\n\t if (value !== undefined || method) {\n\t if (!method) {\n\t view.setDate(currentValue, value);\n\t }\n\n\t if (!isInRange(currentValue, min, max)) {\n\t currentValue = restrictValue(currentValue, options.min, options.max);\n\t }\n\n\t if (isDisabled(currentValue)) {\n\t currentValue = that._nextNavigatable(currentValue, value);\n\t }\n\n\t min = createDate(min.getFullYear(), min.getMonth(), min.getDate());\n\t if(that._isMultipleSelection()) {\n\t that._keyboardRangeSelection(e, currentValue);\n\t }\n\t else {\n\t that._focus(currentValue);\n\t }\n\t }\n\t } else {\n\t if (key == keys.ENTER || key == keys.SPACEBAR) {\n\t if(view.name == \"month\" && that._isMultipleSelection()) {\n\t that.value(toDateObject($(that._cell.find(\"a\"))));\n\t that.selectable._lastActive = $(that._cell[0]);\n\t that.trigger(CHANGE);\n\t }\n\t else {\n\t that._click($(that._cell[0].firstChild));\n\t }\n\t prevent = true;\n\t } else if (key == keys.PAGEUP) {\n\t prevent = true;\n\t that.navigateToPast();\n\t } else if (key == keys.PAGEDOWN) {\n\t prevent = true;\n\t that.navigateToFuture();\n\t }\n\n\t if (value || method) {\n\t if (!method) {\n\t view.setDate(currentValue, value);\n\t }\n\n\t min = createDate(min.getFullYear(), min.getMonth(), min.getDate());\n\n\t if (!isInRange(currentValue, min, max)) {\n\t currentValue = restrictValue(currentValue, options.min, options.max);\n\t }\n\n\t if (!that._isNavigatable(currentValue, value)) {\n\t currentValue = that._nextNavigatable(currentValue, value);\n\t }\n\n\t if(that._isMultipleSelection()) {\n\t if(!that._dateInView(currentValue)) {\n\t that.navigate(currentValue);\n\t }\n\t else {\n\t that._current = currentValue;\n\t that._class(FOCUSED, currentValue);\n\t }\n\t }\n\t else {\n\t that._focus(currentValue);\n\t }\n\t }\n\t }\n\n\t if (prevent) {\n\t e.preventDefault();\n\t }\n\n\t return that._current;\n\t },\n\n\t _keyboardRangeSelection: function(event, currentValue) {\n\t var that = this,\n\t fromDate,\n\t daysDifference;\n\n\t if(!that._dateInView(currentValue)) {\n\t that._selectDates = [];\n\n\t fromDate = that.selectable._lastActive? toDateObject(that.selectable._lastActive.find(\"a\")): currentValue;\n\t daysDifference = daysBetweenTwoDates(fromDate, new Date(+currentValue));\n\n\t addDaysToArray(that._selectDates, daysDifference, fromDate, that.options.disableDates);\n\n\t that.navigate(currentValue);\n\t that._current = currentValue;\n\t that.selectable._lastActive = that.selectable._lastActive || that._cellByDate(that._view.toDateString(currentValue), CELLSELECTORVALID);\n\t that.trigger(CHANGE);\n\t return;\n\t }\n\t that.selectable.options.filter = that.wrapper.find(\"table\").length > 1 && +currentValue > +that._current? \"table.k-month:eq(1) \" + CELLSELECTORVALID: \"table.k-month:eq(0) \" + CELLSELECTORVALID;\n\t that._class(FOCUSED, currentValue);\n\t that._current = currentValue;\n\n\t that._rangeSelection(that._cellByDate(that._view.toDateString(currentValue), CELLSELECTORVALID), currentValue);\n\n\t that.trigger(CHANGE);\n\n\t that.selectable.options.filter = \"table.k-month:eq(0) \" + CELLSELECTORVALID;\n\t },\n\n\t _keyboardToggleSelection: function(event) {\n\t var that = this;\n\n\t event.currentTarget = that._cell[0];\n\t that.selectable._lastActive = $(that._cell[0]);\n\n\t if ($(that._cell[0]).hasClass(SELECTED)) {\n\t that.selectable._unselect($(that._cell[0]));\n\t that.selectable.trigger(CHANGE, { event: event});\n\t }\n\t else {\n\t that.selectable.value($(that._cell[0]), { event: event});\n\t }\n\t },\n\n\t _nextNavigatable: function(currentValue, value) {\n\t var that = this,\n\t disabled = true,\n\t view = that._view,\n\t min = that.options.min,\n\t max = that.options.max,\n\t isDisabled = that.options.disableDates,\n\t navigatableDate = new Date(currentValue.getTime());\n\n\t view.setDate(navigatableDate, -value);\n\n\t while (disabled) {\n\t view.setDate(currentValue, value);\n\n\t if (!isInRange(currentValue, min, max)) {\n\t currentValue = navigatableDate;\n\t break;\n\t }\n\t disabled = isDisabled(currentValue);\n\t }\n\t return currentValue;\n\t },\n\n\t _animate: function(options) {\n\t var that = this;\n\t var from = options.from;\n\t var to = options.to;\n\t var active = that._active;\n\t var viewWrapper = that.element.children(\".k-calendar-view\");\n\n\t if (!from) {\n\t viewWrapper.append(to);\n\t that._bindTable(to);\n\t } else if (from.parent().data(\"animating\")) {\n\t from.off(ns);\n\t from.parent().kendoStop(true, true).remove();\n\t from.remove();\n\n\t viewWrapper.append(to);\n\t that._focusView(active);\n\t } else if (!from.is(\":visible\") || that.options.animation === false || options.replace) {\n\t to.insertAfter(from);\n\t from.off(ns).remove();\n\n\t that._focusView(active);\n\t } else {\n\t that[options.vertical ? \"_vertical\" : \"_horizontal\"](from, to, options.future);\n\t }\n\t },\n\n\t _horizontal: function(from, to, future) {\n\t var that = this,\n\t active = that._active,\n\t horizontal = that.options.animation.horizontal,\n\t effects = horizontal.effects,\n\t viewWidth = outerWidth(from);\n\n\t if (effects && effects.indexOf(SLIDE) != -1) {\n\t from.add(to).css({ width: viewWidth });\n\n\t from.wrap(\"
\");\n\n\t that._focusView(active, from);\n\n\t from.parent()\n\t .css({\n\t position: \"relative\",\n\t width: viewWidth * 2,\n\t \"float\": LEFT,\n\t \"margin-left\": future ? 0 : -viewWidth\n\t });\n\n\t to[future ? \"insertAfter\" : \"insertBefore\"](from);\n\n\t extend(horizontal, {\n\t effects: SLIDE + \":\" + (future ? \"right\" : LEFT),\n\t complete: function() {\n\t from.off(ns).remove();\n\t that._oldTable = null;\n\n\t to.unwrap();\n\n\t that._focusView(active);\n\n\t }\n\t });\n\n\t from.parent().kendoStop(true, true).kendoAnimate(horizontal);\n\t }\n\t },\n\n\t _vertical: function(from, to) {\n\t var that = this,\n\t vertical = that.options.animation.vertical,\n\t effects = vertical.effects,\n\t active = that._active, //active state before from's blur\n\t cell, position;\n\n\t if (effects && effects.indexOf(\"zoom\") != -1) {\n\t to.insertBefore(from);\n\n\t from.css({\n\t position: \"absolute\",\n\t width: to.width()\n\t });\n\n\t if (transitionOrigin) {\n\t cell = that._cellByDate(that._view.toDateString(that._current));\n\t position = cell.position();\n\t position = (position.left + parseInt(cell.width() / 2, 10)) + \"px\" + \" \" + (position.top + parseInt(cell.height() / 2, 10) + \"px\");\n\t to.css(transitionOrigin, position);\n\t }\n\n\t from.kendoStop(true, true).kendoAnimate({\n\t effects: \"fadeOut\",\n\t duration: 600,\n\t complete: function() {\n\t from.off(ns).remove();\n\t that._oldTable = null;\n\n\t that._focusView(active);\n\t }\n\t });\n\n\t to.kendoStop(true, true).kendoAnimate(vertical);\n\t }\n\t },\n\n\t _cellByDate: function(value, selector) {\n\t return this._table.find(selector ? selector : \"td:not(.\" + OTHERMONTH + \")\")\n\t .filter(function() {\n\t return $(this.firstChild).attr(kendo.attr(VALUE)) === value;\n\t });\n\t },\n\n\t _class: function(className, date) {\n\t var that = this,\n\t id = that._cellID,\n\t cell = that._cell,\n\t value = that._view.toDateString(date),\n\t disabledDate;\n\n\t if (cell && cell.length) {\n\t cell[0].removeAttribute(ARIA_SELECTED);\n\t cell[0].removeAttribute(ARIA_LABEL);\n\t cell[0].removeAttribute(ID);\n\t //.removeClass(className);\n\t }\n\n\t if (date && that._view.name == \"month\") {\n\t disabledDate = that.options.disableDates(date);\n\t }\n\t that._cellsBySelector(that._isMultipleSelection() ? CELLSELECTOR: \"td:not(.\" + OTHERMONTH + \")\").removeClass(className);\n\t cell = that._cellByDate(value, that.options.selectable == \"multiple\" ? CELLSELECTOR: \"td:not(.\" + OTHERMONTH + \")\")\n\t .attr(ARIA_SELECTED, true);\n\n\t if (className === FOCUSED && !that._active && that.options.focusOnNav !== false || disabledDate) {\n\t className = \"\";\n\t }\n\n\t cell.addClass(className);\n\n\t if (cell[0]) {\n\t that._cell = cell;\n\t }\n\n\t if (id) {\n\t cell.attr(ID, id);\n\t that._table[0].removeAttribute(\"aria-activedescendant\");\n\t that._table.attr(\"aria-activedescendant\", id);\n\t }\n\t },\n\n\t _bindTable: function (table) {\n\t table\n\t .on(FOCUS_WITH_NS, this._addClassProxy)\n\t .on(BLUR, this._removeClassProxy);\n\t },\n\n\t _click: function(link) {\n\t var that = this,\n\t options = that.options,\n\t currentValue = new Date(+that._current),\n\t value = toDateObject(link);\n\n\t adjustDST(value, 0);\n\n\t if (that._view.name == \"month\" && that.options.disableDates(value)) {\n\t value = that._value;\n\t }\n\n\t that._view.setDate(currentValue, value);\n\n\t that.navigateDown(restrictValue(currentValue, options.min, options.max));\n\t },\n\n\t _focus: function(value) {\n\t var that = this,\n\t view = that._view;\n\n\t if (view.compare(value, that._current) !== 0) {\n\t that.navigate(value);\n\t } else {\n\t that._current = value;\n\t that._class(FOCUSED, value);\n\t }\n\t },\n\n\t _focusView: function(active, table) {\n\t if (active) {\n\t this.focus(table);\n\t }\n\t },\n\n\t _viewWrapper: function() {\n\t var that = this;\n\t var element = that.element;\n\t var viewWrapper = element.children(\".k-calendar-view\");\n\n\t if (!viewWrapper[0]) {\n\t viewWrapper = $(\"
\").insertAfter(element.find(HEADERSELECTOR));\n\t }\n\t },\n\n\t _footer: function(template) {\n\t var that = this,\n\t today = getToday(),\n\t element = that.element,\n\t footer = element.find(\".k-footer\");\n\n\t if (!template) {\n\t that._toggle(false);\n\t footer.hide();\n\t return;\n\t }\n\n\t if (!footer[0]) {\n\t footer = $('
').appendTo(element);\n\t }\n\n\t that._today = footer.show()\n\t .find(\".k-link\")\n\t .html(template(today))\n\t .attr(\"title\", kendo.toString(today, \"D\", that.options.culture));\n\n\t that._toggle();\n\t },\n\n\t _header: function() {\n\t var that = this,\n\t element = that.element,\n\t linksSelector = that.options.linksSelector;\n\n\t if (!element.find(HEADERSELECTOR)[0]) {\n\t element.html(kendo.template(that.options.header.template)(that.options));\n\t }\n\n\t element.find(linksSelector)\n\t .on(MOUSEENTER_WITH_NS + \" \" + MOUSELEAVE + \" \" + FOCUS_WITH_NS + \" \" + BLUR, mousetoggle)\n\t .on(CLICK + \" touchend\" + ns, function() { return false; } );\n\n\t that._title = element.find('[' + kendo.attr(\"action\") + '=\"nav-up\"]').on(CLICK + \" touchend\" + ns, function () {\n\t that._active = that.options.focusOnNav !== false;\n\t that.navigateUp();\n\t });\n\t that[PREVARROW] = element.find('[' + kendo.attr(\"action\") + '=\"prev\"]').on(CLICK + \" touchend\" + ns, function () {\n\t that._active = that.options.focusOnNav !== false;\n\t that.navigateToPast();\n\t });\n\t that[NEXTARROW] = element.find('[' + kendo.attr(\"action\") + '=\"next\"]').on(CLICK + \" touchend\" + ns, function () {\n\t that._active = that.options.focusOnNav !== false;\n\t that.navigateToFuture();\n\t });\n\t element.find('[' + kendo.attr(\"action\") + '=\"today\"]').on(CLICK + \" touchend\" + ns, proxy(that._todayClick, that));\n\n\t },\n\n\t _navigate: function(arrow, modifier) {\n\t var that = this,\n\t index = that._index + 1,\n\t currentValue = new DATE(+that._current);\n\n\t if (that._isMultipleSelection()) {\n\t var firstDayCurrentMonth = that._table.find(\"td:not(.k-other-month):not(.k-out-of-range)\").has(\".k-link\").first();\n\t currentValue = toDateObject(firstDayCurrentMonth.find(\"a\"));\n\t that._current = new Date(+currentValue);\n\t }\n\n\t arrow = that[arrow];\n\n\t if (!arrow.hasClass(DISABLED)) {\n\t if (index > 3) {\n\t currentValue.setFullYear(currentValue.getFullYear() + 100 * modifier);\n\t } else {\n\t calendar.views[index].setDate(currentValue, modifier);\n\t }\n\n\t that.navigate(currentValue);\n\t }\n\t },\n\n\t _option: function(option, value) {\n\t var that = this,\n\t options = that.options,\n\t currentValue = that._value || that._current,\n\t isBigger;\n\n\t if (value === undefined) {\n\t return options[option];\n\t }\n\n\t value = parse(value, options.format, options.culture);\n\n\t if (!value) {\n\t return;\n\t }\n\n\t options[option] = new DATE(+value);\n\n\t if (option === MIN) {\n\t isBigger = value > currentValue;\n\t } else {\n\t isBigger = currentValue > value;\n\t }\n\n\t if (isBigger || isEqualMonth(currentValue, value)) {\n\t if (isBigger) {\n\t that._value = null;\n\t }\n\t that._changeView = true;\n\t }\n\n\t if (!that._changeView) {\n\t that._changeView = !!(options.month.content || options.month.empty);\n\t }\n\n\t that.navigate(that._value);\n\n\t that._toggle();\n\t },\n\n\t _toggle: function(toggle) {\n\t var that = this,\n\t options = that.options,\n\t isTodayDisabled = that.options.disableDates(getToday()),\n\t link = that._today;\n\n\t if (toggle === undefined) {\n\t toggle = isInRange(getToday(), options.min, options.max);\n\t }\n\n\t if (link) {\n\t link.off(CLICK);\n\n\t if (toggle && !isTodayDisabled) {\n\t link.addClass(TODAY)\n\t .removeClass(DISABLED)\n\t .on(CLICK, proxy(that._todayClick, that));\n\t } else {\n\t link.removeClass(TODAY)\n\t .addClass(DISABLED)\n\t .on(CLICK, prevent);\n\t }\n\t }\n\t },\n\n\t _todayClick: function(e) {\n\t var that = this,\n\t depth = views[that.options.depth],\n\t disabled = that.options.disableDates,\n\t today = getToday();\n\n\t e.preventDefault();\n\n\t if (disabled(today)) {\n\t return;\n\t }\n\n\t if (that._view.compare(that._current, today) === 0 && that._index == depth) {\n\t that._changeView = false;\n\t }\n\n\t if(that._isMultipleSelection()) {\n\t that._selectDates = [today];\n\t that.selectable._lastActive = null;\n\t }\n\n\t that._value = today;\n\t that.navigate(today, depth);\n\n\t that.trigger(CHANGE);\n\t },\n\n\t _templates: function() {\n\t var that = this,\n\t options = that.options,\n\t footer = options.footer,\n\t month = options.month,\n\t content = month.content,\n\t weekNumber = month.weekNumber,\n\t empty = month.empty,\n\t footerTemplate = '#= kendo.toString(data,\"D\",\"' + options.culture +'\") #';\n\n\t that.month = {\n\t content: template('' + (content || \"#=data.value#\") + '', { useWithBlock: !!content }),\n\t empty: template('' + (empty || \" \") + \"\", { useWithBlock: !!empty }),\n\t weekNumber: template('' + (weekNumber || \"#= data.weekNumber #\") + \"\", { useWithBlock: !!weekNumber })\n\t };\n\n\t if (footer && footer !== true) {\n\t footerTemplate = footer;\n\t }\n\n\t that.footer = footer !== false ? template(footerTemplate, { useWithBlock: false }) : null;\n\t }\n\t });\n\n\t ui.plugin(Calendar);\n\n\t var calendar = {\n\t firstDayOfMonth: function (date) {\n\t return createDate(\n\t date.getFullYear(),\n\t date.getMonth(),\n\t 1\n\t );\n\t },\n\n\t firstVisibleDay: function (date, calendarInfo) {\n\t calendarInfo = calendarInfo || kendo.culture().calendar;\n\n\t var firstDay = calendarInfo.firstDay,\n\t firstVisibleDay = new DATE(date.getFullYear(), date.getMonth(), 1, date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n\t firstVisibleDay.setFullYear(date.getFullYear());\n\n\t while (firstVisibleDay.getDay() != firstDay) {\n\t calendar.setTime(firstVisibleDay, -1 * MS_PER_DAY);\n\t }\n\n\t return firstVisibleDay;\n\t },\n\n\t setTime: function (date, time) {\n\t var tzOffsetBefore = date.getTimezoneOffset(),\n\t resultDATE = new DATE(date.getTime() + time),\n\t tzOffsetDiff = resultDATE.getTimezoneOffset() - tzOffsetBefore;\n\n\t date.setTime(resultDATE.getTime() + tzOffsetDiff * MS_PER_MINUTE);\n\t },\n\t views: [{\n\t name: MONTH,\n\t title: function(date, min, max, culture) {\n\t return getCalendarInfo(culture).months.names[date.getMonth()] + \" \" + date.getFullYear();\n\t },\n\t content: function(options) {\n\t var that = this,\n\t idx = 0,\n\t min = options.min,\n\t max = options.max,\n\t date = options.date,\n\t dates = options.dates,\n\t format = options.format,\n\t culture = options.culture,\n\t navigateUrl = options.url,\n\t showHeader = options.showHeader,\n\t otherMonth = options.otherMonth,\n\t isWeekColumnVisible = options.isWeekColumnVisible,\n\t hasUrl = navigateUrl && dates[0],\n\t currentCalendar = getCalendarInfo(culture),\n\t firstDayIdx = currentCalendar.firstDay,\n\t days = currentCalendar.days,\n\t names = shiftArray(days.names, firstDayIdx),\n\t shortNames = shiftArray(days.namesShort, firstDayIdx),\n\t start = calendar.firstVisibleDay(date, currentCalendar),\n\t firstDayOfMonth = that.first(date),\n\t lastDayOfMonth = that.last(date),\n\t toDateString = that.toDateString,\n\t today = getToday(),\n\t contentClasses = options.contentClasses,\n\t html = '';\n\t if (showHeader) {\n\t html += '';\n\t } else {\n\t html += '';\n\t }\n\t if (isWeekColumnVisible) {\n\t html += '';\n\t }\n\n\t for (; idx < 7; idx++) {\n\t html += '';\n\t }\n\n\t adjustDST(today, 0);\n\t today = +today;\n\n\t return view({\n\t cells: 42,\n\t perRow: 7,\n\t html: html += '',\n\t start: start,\n\t isWeekColumnVisible: isWeekColumnVisible,\n\t weekNumber: options.weekNumber,\n\t min: createDate(min.getFullYear(), min.getMonth(), min.getDate()),\n\t max: createDate(max.getFullYear(), max.getMonth(), max.getDate()),\n\t otherMonth : otherMonth,\n\t content: options.content,\n\t lastDayOfMonth : lastDayOfMonth,\n\t empty: options.empty,\n\t setter: that.setDate,\n\t disableDates: options.disableDates,\n\t build: function(date, idx, disableDates) {\n\t var cssClass = [],\n\t day = date.getDay(),\n\t linkClass = \"\",\n\t url = \"#\";\n\n\t if (date < firstDayOfMonth || date > lastDayOfMonth) {\n\t cssClass.push(OTHERMONTH);\n\t }\n\n\t if (disableDates(date)) {\n\t cssClass.push(DISABLED);\n\t }\n\n\t if (+date === today) {\n\t cssClass.push(\"k-today\");\n\t }\n\n\t if (day === 0 || day === 6) {\n\t cssClass.push(\"k-weekend\");\n\t }\n\n\t if (hasUrl && inArray(+date, dates)) {\n\t url = navigateUrl.replace(\"{0}\", kendo.toString(date, format, culture));\n\t linkClass = \" k-action-link\";\n\t }\n\n\t return {\n\t date: date,\n\t dates: dates,\n\t ns: kendo.ns,\n\t title: kendo.toString(date, \"D\", culture),\n\t value: date.getDate(),\n\t dateString: toDateString(date),\n\t cssClass: cssClass[0] ? ' class=\"' + cssClass.join(\" \") + '\"' : \"\",\n\t linkClass: linkClass,\n\t url: url\n\t };\n\t },\n\t weekNumberBuild: function(date) {\n\t return {\n\t weekNumber: weekInYear(date, kendo.culture().calendar.firstDay),\n\t currentDate: date\n\t };\n\t }\n\t });\n\t },\n\t first: function(date) {\n\t return calendar.firstDayOfMonth(date);\n\t },\n\t last: function(date) {\n\t var last = createDate(date.getFullYear(), date.getMonth() + 1, 0),\n\t first = calendar.firstDayOfMonth(date),\n\t timeOffset = Math.abs(last.getTimezoneOffset() - first.getTimezoneOffset());\n\n\t if (timeOffset) {\n\t last.setHours(first.getHours() + (timeOffset / 60));\n\t }\n\n\t return last;\n\t },\n\t compare: function(date1, date2) {\n\t var result,\n\t month1 = date1.getMonth(),\n\t year1 = date1.getFullYear(),\n\t month2 = date2.getMonth(),\n\t year2 = date2.getFullYear();\n\n\t if (year1 > year2) {\n\t result = 1;\n\t } else if (year1 < year2) {\n\t result = -1;\n\t } else {\n\t result = month1 == month2 ? 0 : month1 > month2 ? 1 : -1;\n\t }\n\n\t return result;\n\t },\n\t setDate: function(date, value) {\n\t var hours = date.getHours();\n\t if (value instanceof DATE) {\n\t date.setFullYear(value.getFullYear(), value.getMonth(), value.getDate());\n\t } else {\n\t calendar.setTime(date, value * MS_PER_DAY);\n\t }\n\t adjustDST(date, hours);\n\t },\n\t toDateString: function(date) {\n\t return date.getFullYear() + \"/\" + date.getMonth() + \"/\" + date.getDate();\n\t }\n\t },\n\t {\n\t name: \"year\",\n\t title: function(date) {\n\t return date.getFullYear();\n\t },\n\t content: function(options) {\n\t var namesAbbr = getCalendarInfo(options.culture).months.namesAbbr,\n\t toDateString = this.toDateString,\n\t min = options.min,\n\t max = options.max,\n\t html = \"\";\n\n\t if (options.showHeader) {\n\t html += '
' + this.title(date, min, max, culture) + '
' + options.messages.weekColumnHeader + '' + shortNames[idx] + '
';\n\t }\n\n\t return view({\n\t min: createDate(min.getFullYear(), min.getMonth(), 1),\n\t max: createDate(max.getFullYear(), max.getMonth(), 1),\n\t start: createDate(options.date.getFullYear(), 0, 1),\n\t html: html,\n\t setter: this.setDate,\n\t build: function(date) {\n\t return {\n\t value: namesAbbr[date.getMonth()],\n\t ns: kendo.ns,\n\t dateString: toDateString(date),\n\t cssClass: \"\"\n\t };\n\t }\n\t });\n\t },\n\t first: function(date) {\n\t return createDate(date.getFullYear(), 0, date.getDate());\n\t },\n\t last: function(date) {\n\t return createDate(date.getFullYear(), 11, date.getDate());\n\t },\n\t compare: function(date1, date2){\n\t return compare(date1, date2);\n\t },\n\t setDate: function(date, value) {\n\t var month,\n\t hours = date.getHours();\n\n\t if (value instanceof DATE) {\n\t month = value.getMonth();\n\n\t date.setFullYear(value.getFullYear(), month, date.getDate());\n\n\t if (month !== date.getMonth()) {\n\t date.setDate(0);\n\t }\n\t } else {\n\t month = date.getMonth() + value;\n\n\t date.setMonth(month);\n\n\t if (month > 11) {\n\t month -= 12;\n\t }\n\n\t if (month > 0 && date.getMonth() != month) {\n\t date.setDate(0);\n\t }\n\t }\n\n\t adjustDST(date, hours);\n\t },\n\t toDateString: function(date) {\n\t return date.getFullYear() + \"/\" + date.getMonth() + \"/1\";\n\t }\n\t },\n\t {\n\t name: \"decade\",\n\t title: function(date, min, max) {\n\t return title(date, min, max, 10);\n\t },\n\t content: function(options) {\n\t var year = options.date.getFullYear(),\n\t toDateString = this.toDateString,\n\t html = \"\";\n\n\t if (options.showHeader) {\n\t html += '
';\n\t html += this.title(options.date);\n\t html += '
';\n\t }\n\n\t return view({\n\t start: createDate(year - year % 10 - 1, 0, 1),\n\t min: createDate(options.min.getFullYear(), 0, 1),\n\t max: createDate(options.max.getFullYear(), 0, 1),\n\t otherMonth : options.otherMonth,\n\t html : html,\n\t setter: this.setDate,\n\t build: function(date, idx) {\n\t return {\n\t value: date.getFullYear(),\n\t ns: kendo.ns,\n\t dateString: toDateString(date),\n\t cssClass: idx === 0 || idx == 11 ? OTHERMONTHCLASS : \"\"\n\t };\n\t }\n\t });\n\t },\n\t first: function(date) {\n\t var year = date.getFullYear();\n\t return createDate(year - year % 10, date.getMonth(), date.getDate());\n\t },\n\t last: function(date) {\n\t var year = date.getFullYear();\n\t return createDate(year - year % 10 + 9, date.getMonth(), date.getDate());\n\t },\n\t compare: function(date1, date2) {\n\t return compare(date1, date2, 10);\n\t },\n\t setDate: function(date, value) {\n\t setDate(date, value, 1);\n\t },\n\t toDateString: function(date) {\n\t return date.getFullYear() + \"/0/1\";\n\t }\n\t },\n\t {\n\t name: CENTURY,\n\t title: function(date, min, max) {\n\t return title(date, min, max, 100);\n\t },\n\t content: function(options) {\n\t var year = options.date.getFullYear(),\n\t min = options.min.getFullYear(),\n\t max = options.max.getFullYear(),\n\t toDateString = this.toDateString,\n\t minYear = min,\n\t maxYear = max,\n\t html = \"\";\n\n\t minYear = minYear - minYear % 10;\n\t maxYear = maxYear - maxYear % 10;\n\n\t if (maxYear - minYear < 10) {\n\t maxYear = minYear + 9;\n\t }\n\n\t if (options.showHeader) {\n\t html += '
';\n\t html += this.title(options.date, options.min, options.max);\n\t html += '
';\n\t }\n\n\t return view({\n\t start: createDate(year - year % 100 - 10, 0, 1),\n\t min: createDate(minYear, 0, 1),\n\t max: createDate(maxYear, 0, 1),\n\t otherMonth : options.otherMonth,\n\t html : html,\n\t setter: this.setDate,\n\t build: function(date, idx) {\n\t var start = date.getFullYear(),\n\t end = start + 9;\n\n\t if (start < min) {\n\t start = min;\n\t }\n\n\t if (end > max) {\n\t end = max;\n\t }\n\n\t return {\n\t ns: kendo.ns,\n\t value: start + \" - \" + end,\n\t dateString: toDateString(date),\n\t cssClass: idx === 0 || idx == 11 ? OTHERMONTHCLASS : \"\"\n\t };\n\t }\n\t });\n\t },\n\t first: function(date) {\n\t var year = date.getFullYear();\n\t return createDate(year - year % 100, date.getMonth(), date.getDate());\n\t },\n\t last: function(date) {\n\t var year = date.getFullYear();\n\t return createDate(year - year % 100 + 99, date.getMonth(), date.getDate());\n\t },\n\t compare: function(date1, date2) {\n\t return compare(date1, date2, 100);\n\t },\n\t setDate: function(date, value) {\n\t setDate(date, value, 10);\n\t },\n\t toDateString: function(date) {\n\t var year = date.getFullYear();\n\t return (year - year % 10) + \"/0/1\";\n\t }\n\t }]\n\t };\n\n\t function title(date, min, max, modular) {\n\t var start = date.getFullYear(),\n\t minYear = min.getFullYear(),\n\t maxYear = max.getFullYear(),\n\t end;\n\n\t start = start - start % modular;\n\t end = start + (modular - 1);\n\n\t if (start < minYear) {\n\t start = minYear;\n\t }\n\t if (end > maxYear) {\n\t end = maxYear;\n\t }\n\n\t return start + \"-\" + end;\n\t }\n\n\t function view(options) {\n\t var idx = 0,\n\t data,\n\t min = options.min,\n\t max = options.max,\n\t start = options.start,\n\t setter = options.setter,\n\t build = options.build,\n\t weekNumberBuild = options.weekNumberBuild,\n\t length = options.cells || 12,\n\t isWeekColumnVisible = options.isWeekColumnVisible,\n\t cellsPerRow = options.perRow || 4,\n\t otherMonth = options.otherMonth,\n\t lastDayOfMonth = options.lastDayOfMonth,\n\t weekNumber = options.weekNumber || weekNumberTemplate,\n\t content = options.content || cellTemplate,\n\t empty = options.empty || emptyCellTemplate,\n\t otherMonthTemplate = options.otherMonthCellTemplate || otherMonthCellTemplate,\n\t html = options.html || '
';\n\t html += this.title(options.date, options.min, options.max);\n\t html += '
';\n\t if(isWeekColumnVisible) {\n\t html += weekNumber(weekNumberBuild(start));\n\t }\n\n\n\t for(; idx < length; idx++) {\n\t if (idx > 0 && idx % cellsPerRow === 0) {\n\t html += '';\n\t if (isWeekColumnVisible) {\n\t html += otherMonth || (+start <= +lastDayOfMonth) ? weekNumber(weekNumberBuild(start)) : weekNumber({ weekNumber : \" \"});\n\t }\n\t }\n\n\t start = createDate(start.getFullYear(), start.getMonth(), start.getDate());\n\t adjustDST(start, 0);\n\n\t data = build(start, idx, options.disableDates);\n\n\t html += (data.cssClass.indexOf(OTHERMONTH) !== -1 && !otherMonth) ? otherMonthTemplate(data) : isInRange(start, min, max) ? content(data) : empty(data);\n\n\t setter(start, 1);\n\t }\n\n\t return html + \"
\";\n\t }\n\n\t function compare(date1, date2, modifier) {\n\t var year1 = date1.getFullYear(),\n\t start = date2.getFullYear(),\n\t end = start,\n\t result = 0;\n\n\t if (modifier) {\n\t start = start - start % modifier;\n\t end = start - start % modifier + modifier - 1;\n\t }\n\n\t if (year1 > end) {\n\t result = 1;\n\t } else if (year1 < start) {\n\t result = -1;\n\t }\n\n\t return result;\n\t }\n\n\t function getToday() {\n\t var today = new DATE();\n\t return new DATE(today.getFullYear(), today.getMonth(), today.getDate());\n\t }\n\n\t function restrictValue (value, min, max) {\n\t var today = getToday();\n\n\t if (value) {\n\t today = new DATE(+value);\n\t }\n\n\t if (min > today) {\n\t today = new DATE(+min);\n\t } else if (max < today) {\n\t today = new DATE(+max);\n\t }\n\t return today;\n\t }\n\n\t function isInRange(date, min, max) {\n\t return +date >= +min && +date <= +max;\n\t }\n\n\t function shiftArray(array, idx) {\n\t return array.slice(idx).concat(array.slice(0, idx));\n\t }\n\n\t function setDate(date, value, multiplier) {\n\t value = value instanceof DATE ? value.getFullYear() : date.getFullYear() + multiplier * value;\n\t date.setFullYear(value);\n\t }\n\n\t function daysBetweenTwoDates(startDate, endDate) {\n\t if(+endDate < +startDate) {\n\t var temp = +startDate;\n\t calendar.views[0].setDate(startDate, endDate);\n\t calendar.views[0].setDate(endDate, new Date(temp));\n\t }\n\t var fromDateUTC = Date.UTC(startDate.getFullYear(), startDate.getMonth(), startDate.getDate());\n\t var endDateUTC = Date.UTC(endDate.getFullYear(), endDate.getMonth(), endDate.getDate());\n\n\t return Math.ceil((+endDateUTC - +fromDateUTC) / kendo.date.MS_PER_DAY);\n\t }\n\n\t function addDaysToArray(array, numberOfDays, fromDate, disableDates) {\n\t for(var i = 0; i <= numberOfDays; i++) {\n\t var nextDay = new Date(fromDate.getTime());\n\t nextDay = new Date(nextDay.setDate(nextDay.getDate() + i));\n\t if(!disableDates(nextDay)) {\n\t array.push(nextDay);\n\t }\n\t }\n\t }\n\n\t function mousetoggle(e) {\n\t var disabled = $(this).hasClass(\"k-state-disabled\");\n\n\t if (!disabled) {\n\t $(this).toggleClass(HOVER, MOUSEENTER.indexOf(e.type) > -1 || e.type == FOCUS);\n\t }\n\t }\n\n\t function prevent (e) {\n\t e.preventDefault();\n\t }\n\n\t // creates date with full year\n\t function createDate(year, month, date) {\n\t var dateObject = new DATE(year, month, date);\n\t dateObject.setFullYear(year, month, date);\n\t return dateObject;\n\t }\n\n\t function getCalendarInfo(culture) {\n\t return getCulture(culture).calendars.standard;\n\t }\n\n\t function normalize(options) {\n\t var start = views[options.start],\n\t depth = views[options.depth],\n\t culture = getCulture(options.culture);\n\n\t options.format = extractFormat(options.format || culture.calendars.standard.patterns.d);\n\n\t if (isNaN(start)) {\n\t start = 0;\n\t options.start = MONTH;\n\t }\n\n\t if (depth === undefined || depth > start) {\n\t options.depth = MONTH;\n\t }\n\n\t if (options.dates === null) {\n\t options.dates = [];\n\t }\n\t }\n\n\t function makeUnselectable(element) {\n\t if (isIE8) {\n\t element.find(\"*\").attr(\"unselectable\", \"on\");\n\t }\n\t }\n\n\t function addClassToViewContainer(element, currentView) {\n\t element.addClass(\"k-\" + currentView);\n\t }\n\n\t function inArray(date, dates) {\n\t for(var i = 0, length = dates.length; i < length; i++) {\n\t if (date === +dates[i]) {\n\t return true;\n\t }\n\t }\n\t return false;\n\t }\n\n\t function isEqualDatePart(value1, value2) {\n\t if (value1) {\n\t return value1.getFullYear() === value2.getFullYear() &&\n\t value1.getMonth() === value2.getMonth() &&\n\t value1.getDate() === value2.getDate();\n\t }\n\n\t return false;\n\t }\n\n\t function isEqualMonth(value1, value2) {\n\t if (value1) {\n\t return value1.getFullYear() === value2.getFullYear() &&\n\t value1.getMonth() === value2.getMonth();\n\t }\n\n\t return false;\n\t }\n\n\n\t function getDisabledExpr(option) {\n\t if (kendo.isFunction(option)) {\n\t return option;\n\t }\n\n\t if ($.isArray(option)) {\n\t return createDisabledExpr(option);\n\t }\n\t return $.noop;\n\t }\n\n\t function convertDatesArray(dates) {\n\t var result = [];\n\t for (var i = 0; i < dates.length; i++) {\n\t result.push(dates[i].setHours(0, 0, 0, 0));\n\t }\n\t return result;\n\t }\n\n\t function createDisabledExpr(dates) {\n\t var body, callback,\n\t disabledDates = [],\n\t days = [\"su\", \"mo\", \"tu\", \"we\", \"th\", \"fr\", \"sa\"],\n\t searchExpression = \"if (found) {\"+\n\t \" return true \" +\n\t \"} else {\" +\n\t \"return false\" +\n\t \"}\";\n\n\t if (dates[0] instanceof DATE) {\n\t disabledDates = convertDatesArray(dates);\n\t body = \"var found = date && window.kendo.jQuery.inArray(date.setHours(0, 0, 0, 0),[\"+ disabledDates +\"]) > -1;\" + searchExpression;\n\t } else {\n\t for (var i = 0; i < dates.length; i++) {\n\t var day = dates[i].slice(0,2).toLowerCase();\n\t var index = $.inArray(day, days);\n\t if (index > -1) {\n\t disabledDates.push(index);\n\t }\n\t }\n\t body = \"var found = date && window.kendo.jQuery.inArray(date.getDay(),[\"+ disabledDates +\"]) > -1;\" + searchExpression;\n\t }\n\n\t callback = new Function(\"date\", body); //jshint ignore:line\n\n\t return callback;\n\t }\n\n\t function isEqualDate(oldValue, newValue) {\n\t if (oldValue instanceof Date && newValue instanceof Date) {\n\t oldValue = oldValue.getTime();\n\t newValue = newValue.getTime();\n\t }\n\n\t return oldValue === newValue;\n\t }\n\n\t function toDateObject(link) {\n\t var value = $(link).attr(kendo.attr(VALUE)).split(\"/\");\n\t //Safari cannot create correctly date from \"1/1/2090\"\n\t value = createDate(value[0], value[1], value[2]);\n\n\t return value;\n\t }\n\n\t calendar.isEqualDatePart = isEqualDatePart;\n\t calendar.isEqualDate = isEqualDate;\n\t calendar.makeUnselectable = makeUnselectable;\n\t calendar.restrictValue = restrictValue;\n\t calendar.isInRange = isInRange;\n\t calendar.addClassToViewContainer = addClassToViewContainer;\n\t calendar.normalize = normalize;\n\t calendar.viewsEnum = views;\n\t calendar.disabled = getDisabledExpr;\n\t calendar.toDateObject = toDateObject;\n\t calendar.getToday = getToday;\n\t calendar.createDate = createDate;\n\n\t kendo.calendar = calendar;\n\t})(window.kendo.jQuery);\n\n\treturn window.kendo;\n\n\t}, __webpack_require__(3));\n\n\n/***/ }),\n\n/***/ 1046:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./kendo.selectable\");\n\n/***/ })\n\n/******/ });","module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(1062);\n\n\n/***/ }),\n\n/***/ 3:\n/***/ (function(module, exports) {\n\n\tmodule.exports = function() { throw new Error(\"define cannot be used indirect\"); };\r\n\n\n/***/ }),\n\n/***/ 1036:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./kendo.list\");\n\n/***/ }),\n\n/***/ 1037:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./kendo.mobile.scroller\");\n\n/***/ }),\n\n/***/ 1038:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./kendo.virtuallist\");\n\n/***/ }),\n\n/***/ 1062:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function(f, define){\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(1036), __webpack_require__(1037), __webpack_require__(1038) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (f), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t})(function(){\n\n\tvar __meta__ = { // jshint ignore:line\n\t id: \"combobox\",\n\t name: \"ComboBox\",\n\t category: \"web\",\n\t description: \"The ComboBox widget allows the selection from pre-defined values or entering a new value.\",\n\t depends: [ \"list\" ],\n\t features: [ {\n\t id: \"mobile-scroller\",\n\t name: \"Mobile scroller\",\n\t description: \"Support for kinetic scrolling in mobile device\",\n\t depends: [ \"mobile.scroller\" ]\n\t }, {\n\t id: \"virtualization\",\n\t name: \"VirtualList\",\n\t description: \"Support for virtualization\",\n\t depends: [ \"virtuallist\" ]\n\t } ]\n\t};\n\n\t(function($, undefined) {\n\t var kendo = window.kendo,\n\t ui = kendo.ui,\n\t List = ui.List,\n\t Select = ui.Select,\n\t caret = kendo.caret,\n\t support = kendo.support,\n\t placeholderSupported = support.placeholder,\n\t activeElement = kendo._activeElement,\n\t keys = kendo.keys,\n\t ns = \".kendoComboBox\",\n\t nsFocusEvent = ns + \"FocusEvent\",\n\t CLICK = \"click\" + ns,\n\t MOUSEDOWN = \"mousedown\" + ns,\n\t DISABLED = \"disabled\",\n\t READONLY = \"readonly\",\n\t CHANGE = \"change\",\n\t LOADING = \"k-i-loading\",\n\t DEFAULT = \"k-state-default\",\n\t FOCUSED = \"k-state-focused\",\n\t STATEDISABLED = \"k-state-disabled\",\n\t ARIA_DISABLED = \"aria-disabled\",\n\t AUTOCOMPLETEVALUE = \"off\",\n\t STATE_FILTER = \"filter\",\n\t STATE_ACCEPT = \"accept\",\n\t STATE_REBIND = \"rebind\",\n\t HOVEREVENTS = \"mouseenter\" + ns + \" mouseleave\" + ns,\n\t proxy = $.proxy,\n\t newLineRegEx = /(\\r\\n|\\n|\\r)/gm;\n\n\t var ComboBox = Select.extend({\n\t init: function(element, options) {\n\t var that = this, text, disabled;\n\n\t that.ns = ns;\n\n\t options = $.isArray(options) ? { dataSource: options } : options;\n\n\t Select.fn.init.call(that, element, options);\n\n\t options = that.options;\n\t element = that.element.on(\"focus\" + ns, proxy(that._focusHandler, that));\n\n\t options.placeholder = options.placeholder || element.attr(\"placeholder\");\n\n\t that._reset();\n\n\t that._wrapper();\n\n\t that._input();\n\n\t that._clearButton();\n\n\t that._tabindex(that.input);\n\n\t that._popup();\n\n\t that._dataSource();\n\t that._ignoreCase();\n\n\t that._enable();\n\n\t that._attachFocusEvents();\n\n\t that._oldIndex = that.selectedIndex = -1;\n\n\t that._aria();\n\n\t that._initialIndex = options.index;\n\n\t that.requireValueMapper(that.options);\n\t that._initList();\n\n\t that._cascade();\n\n\t if (options.autoBind) {\n\t that._filterSource();\n\t } else {\n\t text = options.text;\n\n\t if (!text && that._isSelect) {\n\t text = element.children(\":selected\").text();\n\t }\n\n\t if (text) {\n\t that._setText(text);\n\t }\n\t }\n\n\t if (!text) {\n\t that._placeholder();\n\t }\n\n\t disabled = $(that.element).parents(\"fieldset\").is(':disabled');\n\n\t if (disabled) {\n\t that.enable(false);\n\t }\n\n\t kendo.notify(that);\n\t that._toggleCloseVisibility();\n\t },\n\n\t options: {\n\t name: \"ComboBox\",\n\t enabled: true,\n\t index: -1,\n\t text: null,\n\t value: null,\n\t autoBind: true,\n\t delay: 200,\n\t dataTextField: \"\",\n\t dataValueField: \"\",\n\t minLength: 1,\n\t enforceMinLength: false,\n\t height: 200,\n\t highlightFirst: true,\n\t filter: \"none\",\n\t placeholder: \"\",\n\t suggest: false,\n\t cascadeFrom: \"\",\n\t cascadeFromField: \"\",\n\t cascadeFromParentField: \"\",\n\t ignoreCase: true,\n\t animation: {},\n\t virtual: false,\n\t template: null,\n\t groupTemplate: \"#:data#\",\n\t fixedGroupTemplate: \"#:data#\",\n\t clearButton: true,\n\t syncValueAndText: true,\n\t autoWidth: false,\n\t popup: null\n\t },\n\n\t events:[\n\t \"open\",\n\t \"close\",\n\t CHANGE,\n\t \"select\",\n\t \"filtering\",\n\t \"dataBinding\",\n\t \"dataBound\",\n\t \"cascade\",\n\t \"set\"\n\t ],\n\n\t setOptions: function(options) {\n\t var listOptions = this._listOptions(options);\n\n\t Select.fn.setOptions.call(this, options);\n\n\t this.listView.setOptions(listOptions);\n\n\t this._accessors();\n\t this._aria();\n\t this._clearButton();\n\t },\n\n\t destroy: function() {\n\t var that = this;\n\n\t that.input.off(ns);\n\t that.input.off(nsFocusEvent);\n\t that.element.off(ns);\n\t that.wrapper.off(ns);\n\t that._inputWrapper.off(ns);\n\t clearTimeout(that._pasteTimeout);\n\n\t that._arrow.off(CLICK + \" \" + MOUSEDOWN);\n\t that._clear.off(CLICK + \" \" + MOUSEDOWN);\n\n\t Select.fn.destroy.call(that);\n\t },\n\n\t _change: function() {\n\t var that = this;\n\t var text = that.text();\n\t var hasText = text && text !== that._oldText && text !== that.options.placeholder;\n\t var index = that.selectedIndex;\n\t var isCustom = index === -1;\n\n\t if (!that.options.syncValueAndText && !that.value() && isCustom && hasText) {\n\t that._old = \"\";\n\t that._oldIndex = index;\n\t that._oldText = text;\n\n\t if (!that._typing) {\n\t // trigger the DOM change event so any subscriber gets notified\n\t that.element.trigger(CHANGE);\n\t }\n\n\t that.trigger(CHANGE);\n\t that._typing = false;\n\t return;\n\t }\n\n\t Select.fn._change.call(that);\n\t that._toggleCloseVisibility();\n\t },\n\n\t _attachFocusEvents: function() {\n\t var that = this;\n\t that.input.on(\"focus\" + nsFocusEvent, proxy(that._inputFocus, that))\n\t .on(\"focusout\" + nsFocusEvent, proxy(that._inputFocusout, that));\n\t },\n\n\t _focusHandler: function(e) {\n\t if(e.target === this.element[0]) {\n\t this.input.focus();\n\t }\n\t },\n\n\t _arrowClick: function() {\n\t this._toggle();\n\t },\n\n\t _inputFocus: function() {\n\t this._inputWrapper.addClass(FOCUSED);\n\t this._placeholder(false);\n\t },\n\n\t _inputFocusout: function() {\n\t var that = this;\n\t var value = that.value();\n\n\t that._userTriggered = true;\n\t that._inputWrapper.removeClass(FOCUSED);\n\t clearTimeout(that._typingTimeout);\n\t that._typingTimeout = null;\n\n\t that.text(that.text());\n\n\t var item = that._focus();\n\t var dataItem = this.listView.dataItemByIndex(this.listView.getElementIndex(item));\n\n\t if (value !== that.value() && that.trigger(\"select\", { dataItem: dataItem, item: item })) {\n\t that.value(value);\n\t return;\n\t }\n\n\t that._placeholder();\n\t that._valueBeforeCascade = that._old;\n\t that._blur();\n\n\t that.element.blur();\n\t },\n\n\t _inputPaste: function() {\n\t var that = this;\n\t clearTimeout(that._pasteTimeout);\n\t that._pasteTimeout = null;\n\n\t that._pasteTimeout = setTimeout(function() {\n\t that.search();\n\t });\n\t },\n\n\t _editable: function(options) {\n\t var that = this,\n\t disable = options.disable,\n\t readonly = options.readonly,\n\t wrapper = that._inputWrapper.off(ns),\n\t input = that.element.add(that.input.off(ns)),\n\t arrow = that._arrow.off(CLICK + \" \" + MOUSEDOWN),\n\t clear = that._clear;\n\n\t if (!readonly && !disable) {\n\t wrapper\n\t .addClass(DEFAULT)\n\t .removeClass(STATEDISABLED)\n\t .on(HOVEREVENTS, that._toggleHover);\n\n\t input.removeAttr(DISABLED)\n\t .removeAttr(READONLY)\n\t .attr(ARIA_DISABLED, false);\n\n\t arrow.on(CLICK, proxy(that._arrowClick, that))\n\t .on(MOUSEDOWN, function(e) { e.preventDefault(); });\n\n\t clear.on(CLICK + \" touchend\" + ns, proxy(that._clearValue, that));\n\n\t that.input\n\t .on(\"keydown\" + ns, proxy(that._keydown, that))\n\t .on(\"input\" + ns, proxy(that._search, that))\n\t .on(\"paste\" + ns, proxy(that._inputPaste, that));\n\n\t that.wrapper.on(CLICK + ns, proxy(that._focusHandler, that));\n\t } else {\n\t wrapper\n\t .addClass(disable ? STATEDISABLED : DEFAULT)\n\t .removeClass(disable ? DEFAULT : STATEDISABLED);\n\n\t input.attr(DISABLED, disable)\n\t .attr(READONLY, readonly)\n\t .attr(ARIA_DISABLED, disable);\n\t }\n\n\t that._toggleCloseVisibility();\n\t },\n\n\t open: function() {\n\t var that = this;\n\t var state = that._state;\n\t var isFiltered = that.dataSource.filter() ? that.dataSource.filter().filters.length > 0 : false;\n\t var reinitialized = !that.ul.find(that.listView.focus()).length;\n\n\t if (that.popup.visible()) {\n\t return;\n\t }\n\n\t if ((!that.listView.bound() && state !== STATE_FILTER) || state === STATE_ACCEPT) {\n\t that._open = true;\n\t that._state = STATE_REBIND;\n\t if ((that.options.minLength !== 1 && !isFiltered) || (isFiltered && that.value() && that.selectedIndex === -1 )) {\n\t that.refresh();\n\t that._openPopup();\n\t if (!this.options.virtual) {\n\t that.listView.bound(false);\n\t }\n\t } else {\n\t that._filterSource();\n\t }\n\t } else if (that._allowOpening()) {\n\t // In some cases when the popup is opened resize is triggered which will cause it to close\n\t // Setting the below flag will prevent this from happening\n\t that.popup._hovered = true;\n\t that._openPopup();\n\t if(that.options.virtual) {\n\t that._focusItem();\n\t } else if (reinitialized && that.options.highlightFirst) {\n\t that.listView.focus(0);\n\t }\n\t }\n\t },\n\n\t _scrollToFocusedItem: function() {\n\t var listView = this.listView;\n\n\t listView.scrollToIndex(listView.getElementIndex(listView.focus()));\n\t },\n\n\t _openPopup: function() {\n\t this.popup.one(\"activate\", proxy(this._scrollToFocusedItem, this));\n\t this.popup.open();\n\t },\n\n\t _updateSelectionState: function() {\n\t var that = this;\n\t var text = that.options.text;\n\t var value = that.options.value;\n\n\t if (that.listView.isFiltered()) {\n\t return;\n\t }\n\n\t if (that.selectedIndex === -1) {\n\t if (text === undefined || text === null) {\n\t text = value;\n\t }\n\n\t that._accessor(value);\n\t that.input.val(text || that.input.val());\n\t that._placeholder();\n\t } else if (that._oldIndex === -1) {\n\t that._oldIndex = that.selectedIndex;\n\t }\n\t },\n\n\t _buildOptions: function(data) {\n\t var that = this;\n\t if (!that._isSelect) {\n\t return;\n\t }\n\n\t var custom = that._customOption;\n\n\t if (that._state === STATE_REBIND) {\n\t that._state = \"\";\n\t }\n\n\t that._customOption = undefined;\n\t that._options(data, \"\", that.value());\n\n\t if (custom && custom[0].selected && !that.listView._emptySearch) {\n\t that._custom(custom.val());\n\t }\n\t },\n\n\t _updateSelection: function() {\n\t var that = this;\n\t var listView = that.listView;\n\t var initialIndex = that._initialIndex;\n\t var hasInitialIndex = initialIndex !== null && initialIndex > -1;\n\t var filtered = that._state === STATE_FILTER;\n\n\t if (filtered) {\n\t $(listView.focus()).removeClass(\"k-state-selected\");\n\t return;\n\t }\n\n\t if (that._fetch) {\n\t return;\n\t }\n\n\t if (!listView.value().length) {\n\t if (hasInitialIndex) {\n\t that.select(initialIndex);\n\t } else if (that._accessor()) {\n\t listView.value(that._accessor());\n\t }\n\t }\n\n\t that._initialIndex = null;\n\t var dataItem = listView.selectedDataItems()[0];\n\n\t if (!dataItem) {\n\t return;\n\t }\n\n\t if (that._value(dataItem) !== that.value()) {\n\t that._custom(that._value(dataItem));\n\t } else if (that._value(dataItem) !== that.element[0].value){\n\t that._accessor(that._value(dataItem));\n\t }\n\n\t if (that.text() && that.text() !== that._text(dataItem)) {\n\t that._selectValue(dataItem);\n\t }\n\t },\n\n\t _updateItemFocus: function() {\n\t var listView = this.listView;\n\n\t if (!this.options.highlightFirst) {\n\t listView.focus(-1);\n\t } else if (!listView.focus() && !listView.focusIndex()) {\n\t listView.focus(0);\n\t }\n\t },\n\n\t _listBound: function() {\n\t var that = this;\n\t var isActive = that.input[0] === activeElement();\n\n\t var data = that.dataSource.flatView();\n\t var skip = that.listView.skip();\n\t var length = data.length;\n\t var groupsLength = that.dataSource._group ? that.dataSource._group.length : 0;\n\t var isFirstPage = skip === undefined || skip === 0;\n\n\t that._presetValue = false;\n\n\t that._renderFooter();\n\t that._renderNoData();\n\t that._toggleNoData(!length);\n\t that._toggleHeader(!!groupsLength && !!length);\n\n\t that._resizePopup();\n\n\t that.popup.position();\n\n\t that._buildOptions(data);\n\n\t that._makeUnselectable();\n\n\t that._updateSelection();\n\n\t if (data.length && isFirstPage) {\n\t that._updateItemFocus();\n\n\t if (that.options.suggest && isActive && that.input.val()) {\n\t that.suggest(data[0]);\n\t }\n\t }\n\n\t if (that._open) {\n\t that._open = false;\n\n\t if (that._typingTimeout && !isActive) {\n\t that.popup.close();\n\t } else {\n\t that.toggle(that._allowOpening());\n\t }\n\n\t that._typingTimeout = null;\n\t }\n\n\t that._hideBusy();\n\t that.trigger(\"dataBound\");\n\t },\n\n\t _listChange: function() {\n\t this._selectValue(this.listView.selectedDataItems()[0]);\n\n\t if (this._presetValue) {\n\t this._oldIndex = this.selectedIndex;\n\t }\n\t },\n\n\t _get: function(candidate) {\n\t var data, found, idx;\n\n\t if (typeof candidate === \"function\") {\n\t data = this.dataSource.flatView();\n\n\t for (idx = 0; idx < data.length; idx++) {\n\t if (candidate(data[idx])) {\n\t candidate = idx;\n\t found = true;\n\t break;\n\t }\n\t }\n\n\t if (!found) {\n\t candidate = -1;\n\t }\n\t }\n\n\t return candidate;\n\t },\n\n\t _select: function(candidate, keepState) {\n\t var that = this;\n\n\t candidate = that._get(candidate);\n\n\t if (candidate === -1) {\n\t that.input[0].value = \"\";\n\t that._accessor(\"\");\n\t }\n\n\t return that.listView.select(candidate).done(function() {\n\t if (!keepState && that._state === STATE_FILTER) {\n\t that._state = STATE_ACCEPT;\n\t }\n\t that._toggleCloseVisibility();\n\t });\n\t },\n\n\t _selectValue: function(dataItem) {\n\t var idx = this.listView.select();\n\t var value = \"\";\n\t var text = \"\";\n\n\t idx = idx[idx.length - 1];\n\t if (idx === undefined) {\n\t idx = -1;\n\t }\n\n\t this.selectedIndex = idx;\n\n\t if (this.listView.isFiltered() && idx !== -1) {\n\t this._valueBeforeCascade = this._old;\n\t }\n\n\t if (idx === -1 && !dataItem) {\n\t if (this.options.syncValueAndText) {\n\t if (this.options.dataTextField === this.options.dataValueField) {\n\t text = this._accessor();\n\t } else {\n\t text = this.input[0].value;\n\t }\n\t value = text;\n\t }\n\t else {\n\t text = this.text();\n\t }\n\t this.listView.focus(-1);\n\t } else {\n\t if (dataItem || dataItem === 0) {\n\t value = this._dataValue(dataItem);\n\t text = this._text(dataItem);\n\t }\n\n\t if (value === null) {\n\t value = \"\";\n\t }\n\t }\n\n\t this._setDomInputValue(text);\n\t this._accessor(value !== undefined ? value : text, idx);\n\n\t this._placeholder();\n\t this._triggerCascade();\n\t },\n\n\t _setDomInputValue: function(text){\n\t var that = this;\n\t var currentCaret = caret(this.input);\n\t var caretStart;\n\n\t if(currentCaret && currentCaret.length){\n\t caretStart = currentCaret[0];\n\t }\n\n\t this._prev = this.input[0].value = text;\n\n\t if(caretStart && this.selectedIndex === -1){\n\t var mobile = support.mobileOS;\n\t if(mobile.wp || mobile.android) {// without the timeout the caret is at the end of the input\n\t setTimeout(function() { that.input[0].setSelectionRange(caretStart, caretStart); }, 0);\n\t }\n\t else {\n\t this.input[0].setSelectionRange(caretStart, caretStart);\n\t }\n\t }\n\t },\n\n\t refresh: function() {\n\t this.listView.refresh();\n\t },\n\n\t _toggleCloseVisibility: function() {\n\t var preventShow = this.element.is(\":disabled\") || this.element.is(\"[readonly]\");\n\n\t if (this.text() && !preventShow) {\n\t this._showClear();\n\t } else {\n\t this._hideClear();\n\t }\n\t },\n\n\t suggest: function(word) {\n\t var that = this;\n\t var element = that.input[0];\n\t var value = that.text();\n\t var caretIdx = caret(element)[0];\n\t var key = that._last;\n\t var idx;\n\t var accentFoldingFiltering = that.dataSource.options.accentFoldingFiltering;\n\n\t if (key == keys.BACKSPACE || key == keys.DELETE) {\n\t that._last = undefined;\n\t return;\n\t }\n\n\t word = word || \"\";\n\n\t if (typeof word !== \"string\") {\n\t if (word[0]) {\n\t word = that.dataSource.view()[List.inArray(word[0], that.ul[0])];\n\t }\n\n\t word = word ? that._text(word) : \"\";\n\t }\n\n\t if (caretIdx <= 0) {\n\t caretIdx = (accentFoldingFiltering ? value.toLocaleLowerCase(accentFoldingFiltering) : value.toLowerCase()).indexOf(accentFoldingFiltering ? word.toLocaleLowerCase(accentFoldingFiltering) : word.toLowerCase()) + 1;\n\t }\n\n\t if (word) {\n\t word = word.toString();\n\t idx = (accentFoldingFiltering ? word.toLocaleLowerCase(accentFoldingFiltering) : word.toLowerCase()).indexOf(accentFoldingFiltering ? value.toLocaleLowerCase(accentFoldingFiltering) : value.toLowerCase());\n\t if (idx > -1) {\n\t value += word.substring(idx + value.length);\n\t }\n\t } else {\n\t value = value.substring(0, caretIdx);\n\t }\n\n\t if (value.length !== caretIdx || !word) {\n\t element.value = value;\n\t if (element === activeElement()) {\n\t caret(element, caretIdx, value.length);\n\t }\n\t }\n\t },\n\n\t text: function (text) {\n\t text = text === null ? \"\" : text;\n\n\t var that = this;\n\t var input = that.input[0];\n\t var ignoreCase = that.options.ignoreCase;\n\t var loweredText = text;\n\t var dataItem;\n\t var value;\n\n\t if (text === undefined) {\n\t return input.value;\n\t }\n\n\t if (that.options.autoBind === false && !that.listView.bound()) {\n\t that._setText(text);\n\t return;\n\t }\n\n\t dataItem = that.dataItem();\n\n\t if (dataItem && that._text(dataItem).replace && that._text(dataItem).replace(newLineRegEx,\"\") === text) {\n\t value = that._value(dataItem);\n\n\t if (value === List.unifyType(that._old, typeof value)) {\n\t that._triggerCascade();\n\t return;\n\t }\n\t }\n\n\t if (ignoreCase) {\n\t loweredText = loweredText.toLowerCase();\n\t }\n\n\t if(that.dataItem() && that._text(that.dataItem()) === text){\n\t return;\n\t }\n\n\t that._select(function(data) {\n\t data = that._text(data);\n\t if (ignoreCase) {\n\t data = (data + \"\").toLowerCase();\n\t }\n\n\t return data === loweredText;\n\t }).done(function() {\n\t if (that.selectedIndex < 0) {\n\t input.value = text;\n\n\t if (that.options.syncValueAndText) {\n\t that._accessor(text);\n\t }\n\n\t that._cascadeTriggered = true;\n\t that._triggerCascade();\n\t }\n\n\t that._prev = input.value;\n\t });\n\n\t that._toggleCloseVisibility();\n\t },\n\n\t toggle: function(toggle) {\n\t this._toggle(toggle, true);\n\t },\n\n\t value: function(value) {\n\t var that = this;\n\t var options = that.options;\n\t var listView = that.listView;\n\n\t if (value === undefined) {\n\t value = that._accessor() || that.listView.value()[0];\n\t return value === undefined || value === null ? \"\" : value;\n\t }\n\n\t that.requireValueMapper(that.options, value);\n\n\t that.trigger(\"set\", { value: value });\n\n\t if (value === options.value && that.input.val() === options.text &&\n\t !that.options.cascadeFrom) {\n\t return;\n\t }\n\n\t that._accessor(value);\n\n\t if (that._isFilterEnabled() && listView.bound() && listView.isFiltered()) {\n\t that._clearFilter();\n\t } else {\n\t that._fetchData();\n\t }\n\n\t listView\n\t .value(value)\n\t .done(function() {\n\t if (that.selectedIndex === -1 && (!listView._selectedDataItems || !listView._selectedDataItems.length)) {\n\t that._accessor(value);\n\t that.input.val(value);\n\t that._placeholder(true);\n\t }\n\n\t if(that._userTriggered) {\n\t that._old = that._accessor();\n\t } else {\n\t that._old = that._valueBeforeCascade = that._accessor();\n\t }\n\n\t that._oldIndex = that.selectedIndex;\n\n\t that._prev = that._oldText = that.input.val();\n\n\t if (that._state === STATE_FILTER) {\n\t that._state = STATE_ACCEPT;\n\t }\n\t that._toggleCloseVisibility();\n\t });\n\t },\n\n\t _hideBusy: function () {\n\t var that = this;\n\t clearTimeout(that._busy);\n\t that._arrowIcon.removeClass(LOADING);\n\t that._focused.attr(\"aria-busy\", false);\n\t that._busy = null;\n\t that._toggleCloseVisibility();\n\t },\n\n\t _click: function(e) {\n\t var that = this;\n\t var item = e.item;\n\t var dataItem = that.listView.dataItemByIndex(that.listView.getElementIndex(item));\n\t var shouldTrigger = true;\n\t e.preventDefault();\n\n\t if(dataItem){\n\t shouldTrigger = that._value(dataItem) !== List.unifyType(that.value(), typeof that._value(dataItem));\n\n\t if(!shouldTrigger){\n\t that.input.val(that._text(dataItem));\n\t }\n\t }\n\n\t if (shouldTrigger && that.trigger(\"select\", { dataItem: dataItem, item: item })) {\n\t that.close();\n\t return;\n\t }\n\n\t that._userTriggered = true;\n\n\t that._select(item).done(function() {\n\t that._blur();\n\t });\n\t },\n\n\t _syncValueAndText: function () {\n\t return this.options.syncValueAndText;\n\t },\n\n\t _inputValue: function() {\n\t return this.text();\n\t },\n\n\t _searchByWord: function(word) {\n\t var that = this;\n\t var options = that.options;\n\t var dataSource = that.dataSource;\n\t var ignoreCase = options.ignoreCase;\n\t var predicate = function (dataItem) {\n\t var text = that._text(dataItem);\n\t if (text !== undefined) {\n\t text = text + \"\";\n\t if (text !== \"\" && word === \"\") {\n\t return false;\n\t }\n\n\t if (ignoreCase) {\n\t text = text.toLowerCase();\n\t }\n\n\t return text.indexOf(word) === 0;\n\t }\n\t };\n\n\t if (ignoreCase) {\n\t word = word.toLowerCase();\n\t }\n\n\t if (!that.ul[0].firstChild) {\n\t dataSource.one(CHANGE, function () {\n\t if (dataSource.view()[0]) {\n\t that.search(word);\n\t }\n\t }).fetch();\n\t return;\n\t }\n\n\t this.listView.focus(this._get(predicate));\n\n\t var current = this.listView.focus();\n\n\t if (current) {\n\t if (options.suggest) {\n\t that.suggest(current);\n\t }\n\n\t this.open();\n\t }\n\n\t if (this.options.highlightFirst && !word) {\n\t this.listView.focusFirst();\n\t }\n\t },\n\n\t _input: function() {\n\t var that = this,\n\t element = that.element.removeClass(\"k-input\")[0],\n\t accessKey = element.accessKey,\n\t wrapper = that.wrapper,\n\t SELECTOR = \"input.k-input\",\n\t name = element.name || \"\",\n\t input,\n\t maxLength;\n\n\t if (name) {\n\t name = 'name=\"' + name + '_input\" ';\n\t }\n\n\t input = wrapper.find(SELECTOR);\n\n\t if (!input[0]) {\n\t wrapper.append('')\n\t .append(that.element);\n\n\t input = wrapper.find(SELECTOR);\n\t }\n\n\t input[0].style.cssText = element.style.cssText;\n\t input[0].title = element.title;\n\n\t maxLength = parseInt(this.element.prop(\"maxlength\") || this.element.attr(\"maxlength\"), 10);\n\t if (maxLength > -1) {\n\t input[0].maxLength = maxLength;\n\t }\n\n\t input.addClass(element.className)\n\t .css({\n\t width: \"\",\n\t height: element.style.height\n\t })\n\t .attr({\n\t \"role\": \"combobox\",\n\t \"aria-expanded\": false\n\t })\n\t .show();\n\n\t if (placeholderSupported) {\n\t input.attr(\"placeholder\", that.options.placeholder);\n\t }\n\n\t if (accessKey) {\n\t element.accessKey = \"\";\n\t input[0].accessKey = accessKey;\n\t }\n\n\t that._focused = that.input = input;\n\t that._inputWrapper = $(wrapper[0].firstChild);\n\t that._arrow = wrapper.find(\".k-select\")\n\t .attr({\n\t \"role\": \"button\",\n\t \"tabIndex\": -1\n\t });\n\t that._arrowIcon = that._arrow.find(\".k-icon\");\n\n\t if (element.id) {\n\t that._arrow.attr(\"aria-controls\", that.ul[0].id);\n\t }\n\t },\n\n\t _clearButton: function() {\n\t List.fn._clearButton.call(this);\n\n\t if (this.options.clearButton) {\n\t this._clear.insertAfter(this.input);\n\t this.wrapper.addClass(\"k-combobox-clearable\");\n\t }\n\t },\n\n\t _keydown: function(e) {\n\t var that = this,\n\t key = e.keyCode;\n\n\t that._last = key;\n\n\t clearTimeout(that._typingTimeout);\n\t that._typingTimeout = null;\n\n\t if (key === keys.HOME) {\n\t that._firstItem();\n\t } else if (key === keys.END) {\n\t that._lastItem();\n\t } else if (key === keys.ENTER || (key === keys.TAB && that.popup.visible())) {\n\t var current = that.listView.focus();\n\t var dataItem = that.dataItem();\n\t var shouldTrigger = true;\n\n\t if (!that.popup.visible() && (!dataItem || that.text() !== that._text(dataItem))) {\n\t current = null;\n\t }\n\n\t if (current) {\n\t if (that.popup.visible()) {\n\t e.preventDefault();\n\t }\n\n\t dataItem = that.listView.dataItemByIndex(that.listView.getElementIndex(current));\n\n\t if(dataItem){\n\t shouldTrigger = that._value(dataItem) !== List.unifyType(that.value(), typeof that._value(dataItem));\n\t }\n\n\t if (shouldTrigger && that.trigger(\"select\", { dataItem: dataItem, item: current })) {\n\t return;\n\t }\n\n\t that._userTriggered = true;\n\n\t that._select(current).done(function() {\n\t that._blur();\n\t that._valueBeforeCascade = that._old = that.value();\n\t });\n\t } else {\n\t if(that._syncValueAndText() || that._isSelect){\n\t that._accessor(that.input.val());\n\t }\n\n\t if (that.options.highlightFirst) {\n\t that.listView.value(that.input.val());\n\t that._blur();\n\t } else {\n\t that._oldText = that.text();\n\t }\n\t }\n\t } else if (key != keys.TAB && !that._move(e)) {\n\t that._search();\n\t } else if (key === keys.ESC && !that.popup.visible() && that.text()) {\n\t that._clearValue();\n\t }\n\t },\n\n\t _placeholder: function(show) {\n\t if (placeholderSupported) {\n\t return;\n\t }\n\n\t var that = this,\n\t input = that.input,\n\t placeholder = that.options.placeholder,\n\t value;\n\n\t if (placeholder) {\n\t value = that.value();\n\n\t if (show === undefined) {\n\t show = !value;\n\t }\n\n\t input.toggleClass(\"k-readonly\", show);\n\n\t if (!show) {\n\t if (!value) {\n\t placeholder = \"\";\n\t } else {\n\t return;\n\t }\n\t }\n\n\t input.val(placeholder);\n\n\t if (!placeholder && input[0] === activeElement()) {\n\t caret(input[0], 0, 0);\n\t }\n\t }\n\t },\n\n\t _search: function() {\n\t var that = this;\n\n\t clearTimeout(that._typingTimeout);\n\n\t that._typingTimeout = setTimeout(function() {\n\t var value = that.text();\n\n\t if (value !== \"\" && that._prev !== value) {\n\t that._prev = value;\n\n\t if (that.options.filter === \"none\" && that.options.virtual) {\n\t that.listView.select(-1);\n\t }\n\n\t that.search(value);\n\n\t that._toggleCloseVisibility();\n\t }\n\t else if (value === \"\" && that._prev !== \"\") {\n\t that._clearValue();\n\t that.search(\"\");\n\t }\n\n\t that._typingTimeout = null;\n\t }, that.options.delay);\n\t },\n\n\t _setText: function(text) {\n\t this.input.val(text);\n\t this._prev = text;\n\t },\n\n\t _wrapper: function() {\n\t var that = this,\n\t element = that.element,\n\t wrapper = element.parent();\n\n\t if (!wrapper.is(\"span.k-widget\")) {\n\t wrapper = element.hide().wrap(\"\").parent();\n\t wrapper[0].style.cssText = element[0].style.cssText;\n\t }\n\n\t that.wrapper = wrapper.addClass(\"k-widget k-combobox\")\n\t .addClass(element[0].className)\n\t .removeClass('input-validation-error')\n\t .css(\"display\", \"\");\n\t },\n\n\t _clearSelection: function(parent, isFiltered) {\n\t var that = this;\n\t var hasValue = parent.value();\n\t var custom = hasValue && parent.selectedIndex === -1;\n\n\t if (this.selectedIndex == -1 && this.value()) {\n\t return;\n\t }\n\n\t if (isFiltered || !hasValue || custom) {\n\t that.options.value = \"\";\n\t that.value(\"\");\n\t }\n\t },\n\n\t _preselect: function(value, text) {\n\t this.input.val(text);\n\t this._accessor(value);\n\n\t this._old = this._accessor();\n\t this._oldIndex = this.selectedIndex;\n\n\t this.listView.setValue(value);\n\t this._placeholder();\n\n\t this._initialIndex = null;\n\t this._presetValue = true;\n\t this._toggleCloseVisibility();\n\t },\n\n\t _clearText: function() {\n\t this._old = this.value();\n\t this.text(\"\");\n\t },\n\n\t _clearValue: function() {\n\t Select.fn._clearValue.call(this);\n\t this.input.focus();\n\t }\n\t });\n\n\t ui.plugin(ComboBox);\n\t})(window.kendo.jQuery);\n\n\treturn window.kendo;\n\n\t}, __webpack_require__(3));\n\n\n/***/ })\n\n/******/ });","module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(1063);\n\n\n/***/ }),\n\n/***/ 3:\n/***/ (function(module, exports) {\n\n\tmodule.exports = function() { throw new Error(\"define cannot be used indirect\"); };\r\n\n\n/***/ }),\n\n/***/ 1017:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"jquery\");\n\n/***/ }),\n\n/***/ 1063:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/* WEBPACK VAR INJECTION */(function(jQuery) {(function(f, define){\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(1017)], __WEBPACK_AMD_DEFINE_FACTORY__ = (f), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t})(function(){\n\n\tvar __meta__ = { // jshint ignore:line\n\t id: \"core\",\n\t name: \"Core\",\n\t category: \"framework\",\n\t description: \"The core of the Kendo framework.\"\n\t};\n\n\t/*jshint eqnull: true, loopfunc: true, evil: true, boss: true, freeze: false*/\n\t(function($, window, undefined) {\n\t var kendo = window.kendo = window.kendo || { cultures: {} },\n\t extend = $.extend,\n\t each = $.each,\n\t isArray = $.isArray,\n\t proxy = $.proxy,\n\t noop = $.noop,\n\t math = Math,\n\t Template,\n\t JSON = window.JSON || {},\n\t support = {},\n\t percentRegExp = /%/,\n\t formatRegExp = /\\{(\\d+)(:[^\\}]+)?\\}/g,\n\t boxShadowRegExp = /(\\d+(?:\\.?)\\d*)px\\s*(\\d+(?:\\.?)\\d*)px\\s*(\\d+(?:\\.?)\\d*)px\\s*(\\d+)?/i,\n\t numberRegExp = /^(\\+|-?)\\d+(\\.?)\\d*$/,\n\t FUNCTION = \"function\",\n\t STRING = \"string\",\n\t NUMBER = \"number\",\n\t OBJECT = \"object\",\n\t NULL = \"null\",\n\t BOOLEAN = \"boolean\",\n\t UNDEFINED = \"undefined\",\n\t getterCache = {},\n\t setterCache = {},\n\t slice = [].slice,\n\t // avoid extending the depricated properties in latest verions of jQuery\n\t noDepricateExtend = function() {\n\t var src, copyIsArray, copy, name, options, clone,\n\t target = arguments[ 0 ] || {},\n\t i = 1,\n\t length = arguments.length,\n\t deep = false;\n\n\t // Handle a deep copy situation\n\t if ( typeof target === \"boolean\" ) {\n\t deep = target;\n\n\t // skip the boolean and the target\n\t target = arguments[ i ] || {};\n\t i++;\n\t }\n\n\t // Handle case when target is a string or something (possible in deep copy)\n\t if ( typeof target !== \"object\" && !jQuery.isFunction( target ) ) {\n\t target = {};\n\t }\n\n\t // extend jQuery itself if only one argument is passed\n\t if ( i === length ) {\n\t target = this;\n\t i--;\n\t }\n\n\t for ( ; i < length; i++ ) {\n\n\t // Only deal with non-null/undefined values\n\t if ( ( options = arguments[ i ] ) != null ) {\n\n\t // Extend the base object\n\t for ( name in options ) {\n\t // filters, concat and : properties are depricated in the jQuery 3.3.0\n\t // accessing these properties throw a warning when jQuery migrate is included\n\t if (name == \"filters\" || name == \"concat\" || name == \":\") {\n\t continue;\n\t }\n\t src = target[ name ];\n\t copy = options[ name ];\n\n\t // Prevent never-ending loop\n\t if ( target === copy ) {\n\t continue;\n\t }\n\n\t // Recurse if we're merging plain objects or arrays\n\t if ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t ( copyIsArray = jQuery.isArray( copy ) ) ) ) {\n\n\t if ( copyIsArray ) {\n\t copyIsArray = false;\n\t clone = src && jQuery.isArray( src ) ? src : [];\n\n\t } else {\n\t clone = src && jQuery.isPlainObject( src ) ? src : {};\n\t }\n\n\t // Never move original objects, clone them\n\t target[ name ] = noDepricateExtend( deep, clone, copy );\n\n\t // Don't bring in undefined values\n\t } else if ( copy !== undefined ) {\n\t target[ name ] = copy;\n\t }\n\t }\n\t }\n\t }\n\n\t // Return the modified object\n\t return target;\n\t };\n\n\t kendo.version = \"2020.2.617\".replace(/^\\s+|\\s+$/g, '');\n\n\t function Class() {}\n\n\t Class.extend = function(proto) {\n\t var base = function() {},\n\t member,\n\t that = this,\n\t subclass = proto && proto.init ? proto.init : function () {\n\t that.apply(this, arguments);\n\t },\n\t fn;\n\n\t base.prototype = that.prototype;\n\t fn = subclass.fn = subclass.prototype = new base();\n\n\t for (member in proto) {\n\t if (proto[member] != null && proto[member].constructor === Object) {\n\t // Merge object members\n\t fn[member] = extend(true, {}, base.prototype[member], proto[member]);\n\t } else {\n\t fn[member] = proto[member];\n\t }\n\t }\n\n\t fn.constructor = subclass;\n\t subclass.extend = that.extend;\n\n\t return subclass;\n\t };\n\n\t Class.prototype._initOptions = function(options) {\n\t this.options = deepExtend({}, this.options, options);\n\t };\n\n\t var isFunction = kendo.isFunction = function(fn) {\n\t return typeof fn === \"function\";\n\t };\n\n\t var preventDefault = function() {\n\t this._defaultPrevented = true;\n\t };\n\n\t var isDefaultPrevented = function() {\n\t return this._defaultPrevented === true;\n\t };\n\n\t var Observable = Class.extend({\n\t init: function() {\n\t this._events = {};\n\t },\n\n\t bind: function(eventName, handlers, one) {\n\t var that = this,\n\t idx,\n\t eventNames = typeof eventName === STRING ? [eventName] : eventName,\n\t length,\n\t original,\n\t handler,\n\t handlersIsFunction = typeof handlers === FUNCTION,\n\t events;\n\n\t if (handlers === undefined) {\n\t for (idx in eventName) {\n\t that.bind(idx, eventName[idx]);\n\t }\n\t return that;\n\t }\n\n\t for (idx = 0, length = eventNames.length; idx < length; idx++) {\n\t eventName = eventNames[idx];\n\n\t handler = handlersIsFunction ? handlers : handlers[eventName];\n\n\t if (handler) {\n\t if (one) {\n\t original = handler;\n\t handler = function() {\n\t that.unbind(eventName, handler);\n\t original.apply(that, arguments);\n\t };\n\t handler.original = original;\n\t }\n\t events = that._events[eventName] = that._events[eventName] || [];\n\t events.push(handler);\n\t }\n\t }\n\n\t return that;\n\t },\n\n\t one: function(eventNames, handlers) {\n\t return this.bind(eventNames, handlers, true);\n\t },\n\n\t first: function(eventName, handlers) {\n\t var that = this,\n\t idx,\n\t eventNames = typeof eventName === STRING ? [eventName] : eventName,\n\t length,\n\t handler,\n\t handlersIsFunction = typeof handlers === FUNCTION,\n\t events;\n\n\t for (idx = 0, length = eventNames.length; idx < length; idx++) {\n\t eventName = eventNames[idx];\n\n\t handler = handlersIsFunction ? handlers : handlers[eventName];\n\n\t if (handler) {\n\t events = that._events[eventName] = that._events[eventName] || [];\n\t events.unshift(handler);\n\t }\n\t }\n\n\t return that;\n\t },\n\n\t trigger: function(eventName, e) {\n\t var that = this,\n\t events = that._events[eventName],\n\t idx,\n\t length;\n\n\t if (events) {\n\t e = e || {};\n\n\t e.sender = that;\n\n\t e._defaultPrevented = false;\n\n\t e.preventDefault = preventDefault;\n\n\t e.isDefaultPrevented = isDefaultPrevented;\n\n\t events = events.slice();\n\n\t for (idx = 0, length = events.length; idx < length; idx++) {\n\t events[idx].call(that, e);\n\t }\n\n\t return e._defaultPrevented === true;\n\t }\n\n\t return false;\n\t },\n\n\t unbind: function(eventName, handler) {\n\t var that = this,\n\t events = that._events[eventName],\n\t idx;\n\n\t if (eventName === undefined) {\n\t that._events = {};\n\t } else if (events) {\n\t if (handler) {\n\t for (idx = events.length - 1; idx >= 0; idx--) {\n\t if (events[idx] === handler || events[idx].original === handler) {\n\t events.splice(idx, 1);\n\t }\n\t }\n\t } else {\n\t that._events[eventName] = [];\n\t }\n\t }\n\n\t return that;\n\t }\n\t });\n\n\n\t function compilePart(part, stringPart) {\n\t if (stringPart) {\n\t return \"'\" +\n\t part.split(\"'\").join(\"\\\\'\")\n\t .split('\\\\\"').join('\\\\\\\\\\\\\"')\n\t .replace(/\\n/g, \"\\\\n\")\n\t .replace(/\\r/g, \"\\\\r\")\n\t .replace(/\\t/g, \"\\\\t\") + \"'\";\n\t } else {\n\t var first = part.charAt(0),\n\t rest = part.substring(1);\n\n\t if (first === \"=\") {\n\t return \"+(\" + rest + \")+\";\n\t } else if (first === \":\") {\n\t return \"+$kendoHtmlEncode(\" + rest + \")+\";\n\t } else {\n\t return \";\" + part + \";$kendoOutput+=\";\n\t }\n\t }\n\t }\n\n\t var argumentNameRegExp = /^\\w+/,\n\t encodeRegExp = /\\$\\{([^}]*)\\}/g,\n\t escapedCurlyRegExp = /\\\\\\}/g,\n\t curlyRegExp = /__CURLY__/g,\n\t escapedSharpRegExp = /\\\\#/g,\n\t sharpRegExp = /__SHARP__/g,\n\t zeros = [\"\", \"0\", \"00\", \"000\", \"0000\"];\n\n\t Template = {\n\t paramName: \"data\", // name of the parameter of the generated template\n\t useWithBlock: true, // whether to wrap the template in a with() block\n\t render: function(template, data) {\n\t var idx,\n\t length,\n\t html = \"\";\n\n\t for (idx = 0, length = data.length; idx < length; idx++) {\n\t html += template(data[idx]);\n\t }\n\n\t return html;\n\t },\n\t compile: function(template, options) {\n\t var settings = extend({}, this, options),\n\t paramName = settings.paramName,\n\t argumentName = paramName.match(argumentNameRegExp)[0],\n\t useWithBlock = settings.useWithBlock,\n\t functionBody = \"var $kendoOutput, $kendoHtmlEncode = kendo.htmlEncode;\",\n\t fn,\n\t parts,\n\t idx;\n\n\t if (isFunction(template)) {\n\t return template;\n\t }\n\n\t functionBody += useWithBlock ? \"with(\" + paramName + \"){\" : \"\";\n\n\t functionBody += \"$kendoOutput=\";\n\n\t parts = template\n\t .replace(escapedCurlyRegExp, \"__CURLY__\")\n\t .replace(encodeRegExp, \"#=$kendoHtmlEncode($1)#\")\n\t .replace(curlyRegExp, \"}\")\n\t .replace(escapedSharpRegExp, \"__SHARP__\")\n\t .split(\"#\");\n\n\t for (idx = 0; idx < parts.length; idx ++) {\n\t functionBody += compilePart(parts[idx], idx % 2 === 0);\n\t }\n\n\t functionBody += useWithBlock ? \";}\" : \";\";\n\n\t functionBody += \"return $kendoOutput;\";\n\n\t functionBody = functionBody.replace(sharpRegExp, \"#\");\n\n\t try {\n\t fn = new Function(argumentName, functionBody);\n\t fn._slotCount = Math.floor(parts.length / 2);\n\t return fn;\n\t } catch(e) {\n\t throw new Error(kendo.format(\"Invalid template:'{0}' Generated code:'{1}'\", template, functionBody));\n\t }\n\t }\n\t };\n\n\tfunction pad(number, digits, end) {\n\t number = number + \"\";\n\t digits = digits || 2;\n\t end = digits - number.length;\n\n\t if (end) {\n\t return zeros[digits].substring(0, end) + number;\n\t }\n\n\t return number;\n\t}\n\n\t //JSON stringify\n\t(function() {\n\t var escapable = /[\\\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g,\n\t gap,\n\t indent,\n\t meta = {\n\t \"\\b\": \"\\\\b\",\n\t \"\\t\": \"\\\\t\",\n\t \"\\n\": \"\\\\n\",\n\t \"\\f\": \"\\\\f\",\n\t \"\\r\": \"\\\\r\",\n\t \"\\\"\" : '\\\\\"',\n\t \"\\\\\": \"\\\\\\\\\"\n\t },\n\t rep,\n\t toString = {}.toString;\n\n\n\t if (typeof Date.prototype.toJSON !== FUNCTION) {\n\n\t Date.prototype.toJSON = function () {\n\t var that = this;\n\n\t return isFinite(that.valueOf()) ?\n\t pad(that.getUTCFullYear(), 4) + \"-\" +\n\t pad(that.getUTCMonth() + 1) + \"-\" +\n\t pad(that.getUTCDate()) + \"T\" +\n\t pad(that.getUTCHours()) + \":\" +\n\t pad(that.getUTCMinutes()) + \":\" +\n\t pad(that.getUTCSeconds()) + \"Z\" : null;\n\t };\n\n\t String.prototype.toJSON = Number.prototype.toJSON = Boolean.prototype.toJSON = function () {\n\t return this.valueOf();\n\t };\n\t }\n\n\t function quote(string) {\n\t escapable.lastIndex = 0;\n\t return escapable.test(string) ? \"\\\"\" + string.replace(escapable, function (a) {\n\t var c = meta[a];\n\t return typeof c === STRING ? c :\n\t \"\\\\u\" + (\"0000\" + a.charCodeAt(0).toString(16)).slice(-4);\n\t }) + \"\\\"\" : \"\\\"\" + string + \"\\\"\";\n\t }\n\n\t function str(key, holder) {\n\t var i,\n\t k,\n\t v,\n\t length,\n\t mind = gap,\n\t partial,\n\t value = holder[key],\n\t type;\n\n\t if (value && typeof value === OBJECT && typeof value.toJSON === FUNCTION) {\n\t value = value.toJSON(key);\n\t }\n\n\t if (typeof rep === FUNCTION) {\n\t value = rep.call(holder, key, value);\n\t }\n\n\t type = typeof value;\n\t if (type === STRING) {\n\t return quote(value);\n\t } else if (type === NUMBER) {\n\t return isFinite(value) ? String(value) : NULL;\n\t } else if (type === BOOLEAN || type === NULL) {\n\t return String(value);\n\t } else if (type === OBJECT) {\n\t if (!value) {\n\t return NULL;\n\t }\n\t gap += indent;\n\t partial = [];\n\t if (toString.apply(value) === \"[object Array]\") {\n\t length = value.length;\n\t for (i = 0; i < length; i++) {\n\t partial[i] = str(i, value) || NULL;\n\t }\n\t v = partial.length === 0 ? \"[]\" : gap ?\n\t \"[\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"]\" :\n\t \"[\" + partial.join(\",\") + \"]\";\n\t gap = mind;\n\t return v;\n\t }\n\t if (rep && typeof rep === OBJECT) {\n\t length = rep.length;\n\t for (i = 0; i < length; i++) {\n\t if (typeof rep[i] === STRING) {\n\t k = rep[i];\n\t v = str(k, value);\n\t if (v) {\n\t partial.push(quote(k) + (gap ? \": \" : \":\") + v);\n\t }\n\t }\n\t }\n\t } else {\n\t for (k in value) {\n\t if (Object.hasOwnProperty.call(value, k)) {\n\t v = str(k, value);\n\t if (v) {\n\t partial.push(quote(k) + (gap ? \": \" : \":\") + v);\n\t }\n\t }\n\t }\n\t }\n\n\t v = partial.length === 0 ? \"{}\" : gap ?\n\t \"{\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"}\" :\n\t \"{\" + partial.join(\",\") + \"}\";\n\t gap = mind;\n\t return v;\n\t }\n\t }\n\n\t if (typeof JSON.stringify !== FUNCTION) {\n\t JSON.stringify = function (value, replacer, space) {\n\t var i;\n\t gap = \"\";\n\t indent = \"\";\n\n\t if (typeof space === NUMBER) {\n\t for (i = 0; i < space; i += 1) {\n\t indent += \" \";\n\t }\n\n\t } else if (typeof space === STRING) {\n\t indent = space;\n\t }\n\n\t rep = replacer;\n\t if (replacer && typeof replacer !== FUNCTION && (typeof replacer !== OBJECT || typeof replacer.length !== NUMBER)) {\n\t throw new Error(\"JSON.stringify\");\n\t }\n\n\t return str(\"\", {\"\": value});\n\t };\n\t }\n\t})();\n\n\t// Date and Number formatting\n\t(function() {\n\t var dateFormatRegExp = /dddd|ddd|dd|d|MMMM|MMM|MM|M|yyyy|yy|HH|H|hh|h|mm|m|fff|ff|f|tt|ss|s|zzz|zz|z|\"[^\"]*\"|'[^']*'/g,\n\t standardFormatRegExp = /^(n|c|p|e)(\\d*)$/i,\n\t literalRegExp = /(\\\\.)|(['][^']*[']?)|([\"][^\"]*[\"]?)/g,\n\t commaRegExp = /\\,/g,\n\t EMPTY = \"\",\n\t POINT = \".\",\n\t COMMA = \",\",\n\t SHARP = \"#\",\n\t ZERO = \"0\",\n\t PLACEHOLDER = \"??\",\n\t EN = \"en-US\",\n\t objectToString = {}.toString;\n\n\t //cultures\n\t kendo.cultures[\"en-US\"] = {\n\t name: EN,\n\t numberFormat: {\n\t pattern: [\"-n\"],\n\t decimals: 2,\n\t \",\": \",\",\n\t \".\": \".\",\n\t groupSize: [3],\n\t percent: {\n\t pattern: [\"-n %\", \"n %\"],\n\t decimals: 2,\n\t \",\": \",\",\n\t \".\": \".\",\n\t groupSize: [3],\n\t symbol: \"%\"\n\t },\n\t currency: {\n\t name: \"US Dollar\",\n\t abbr: \"USD\",\n\t pattern: [\"($n)\", \"$n\"],\n\t decimals: 2,\n\t \",\": \",\",\n\t \".\": \".\",\n\t groupSize: [3],\n\t symbol: \"$\"\n\t }\n\t },\n\t calendars: {\n\t standard: {\n\t days: {\n\t names: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n\t namesAbbr: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n\t namesShort: [ \"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\" ]\n\t },\n\t months: {\n\t names: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n\t namesAbbr: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n\t },\n\t AM: [ \"AM\", \"am\", \"AM\" ],\n\t PM: [ \"PM\", \"pm\", \"PM\" ],\n\t patterns: {\n\t d: \"M/d/yyyy\",\n\t D: \"dddd, MMMM dd, yyyy\",\n\t F: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t g: \"M/d/yyyy h:mm tt\",\n\t G: \"M/d/yyyy h:mm:ss tt\",\n\t m: \"MMMM dd\",\n\t M: \"MMMM dd\",\n\t s: \"yyyy'-'MM'-'ddTHH':'mm':'ss\",\n\t t: \"h:mm tt\",\n\t T: \"h:mm:ss tt\",\n\t u: \"yyyy'-'MM'-'dd HH':'mm':'ss'Z'\",\n\t y: \"MMMM, yyyy\",\n\t Y: \"MMMM, yyyy\"\n\t },\n\t \"/\": \"/\",\n\t \":\": \":\",\n\t firstDay: 0,\n\t twoDigitYearMax: 2029\n\t }\n\t }\n\t };\n\n\n\t function findCulture(culture) {\n\t if (culture) {\n\t if (culture.numberFormat) {\n\t return culture;\n\t }\n\n\t if (typeof culture === STRING) {\n\t var cultures = kendo.cultures;\n\t return cultures[culture] || cultures[culture.split(\"-\")[0]] || null;\n\t }\n\n\t return null;\n\t }\n\n\t return null;\n\t }\n\n\t function getCulture(culture) {\n\t if (culture) {\n\t culture = findCulture(culture);\n\t }\n\n\t return culture || kendo.cultures.current;\n\t }\n\n\t kendo.culture = function(cultureName) {\n\t var cultures = kendo.cultures, culture;\n\n\t if (cultureName !== undefined) {\n\t culture = findCulture(cultureName) || cultures[EN];\n\t culture.calendar = culture.calendars.standard;\n\t cultures.current = culture;\n\t } else {\n\t return cultures.current;\n\t }\n\t };\n\n\t kendo.findCulture = findCulture;\n\t kendo.getCulture = getCulture;\n\n\t //set current culture to en-US.\n\t kendo.culture(EN);\n\n\t function formatDate(date, format, culture) {\n\t culture = getCulture(culture);\n\n\t var calendar = culture.calendars.standard,\n\t days = calendar.days,\n\t months = calendar.months;\n\n\t format = calendar.patterns[format] || format;\n\n\t return format.replace(dateFormatRegExp, function (match) {\n\t var minutes;\n\t var result;\n\t var sign;\n\n\t if (match === \"d\") {\n\t result = date.getDate();\n\t } else if (match === \"dd\") {\n\t result = pad(date.getDate());\n\t } else if (match === \"ddd\") {\n\t result = days.namesAbbr[date.getDay()];\n\t } else if (match === \"dddd\") {\n\t result = days.names[date.getDay()];\n\t } else if (match === \"M\") {\n\t result = date.getMonth() + 1;\n\t } else if (match === \"MM\") {\n\t result = pad(date.getMonth() + 1);\n\t } else if (match === \"MMM\") {\n\t result = months.namesAbbr[date.getMonth()];\n\t } else if (match === \"MMMM\") {\n\t result = months.names[date.getMonth()];\n\t } else if (match === \"yy\") {\n\t result = pad(date.getFullYear() % 100);\n\t } else if (match === \"yyyy\") {\n\t result = pad(date.getFullYear(), 4);\n\t } else if (match === \"h\" ) {\n\t result = date.getHours() % 12 || 12;\n\t } else if (match === \"hh\") {\n\t result = pad(date.getHours() % 12 || 12);\n\t } else if (match === \"H\") {\n\t result = date.getHours();\n\t } else if (match === \"HH\") {\n\t result = pad(date.getHours());\n\t } else if (match === \"m\") {\n\t result = date.getMinutes();\n\t } else if (match === \"mm\") {\n\t result = pad(date.getMinutes());\n\t } else if (match === \"s\") {\n\t result = date.getSeconds();\n\t } else if (match === \"ss\") {\n\t result = pad(date.getSeconds());\n\t } else if (match === \"f\") {\n\t result = math.floor(date.getMilliseconds() / 100);\n\t } else if (match === \"ff\") {\n\t result = date.getMilliseconds();\n\t if (result > 99) {\n\t result = math.floor(result / 10);\n\t }\n\t result = pad(result);\n\t } else if (match === \"fff\") {\n\t result = pad(date.getMilliseconds(), 3);\n\t } else if (match === \"tt\") {\n\t result = date.getHours() < 12 ? calendar.AM[0] : calendar.PM[0];\n\t } else if (match === \"zzz\") {\n\t minutes = date.getTimezoneOffset();\n\t sign = minutes < 0;\n\n\t result = math.abs(minutes / 60).toString().split(\".\")[0];\n\t minutes = math.abs(minutes) - (result * 60);\n\n\t result = (sign ? \"+\" : \"-\") + pad(result);\n\t result += \":\" + pad(minutes);\n\t } else if (match === \"zz\" || match === \"z\") {\n\t result = date.getTimezoneOffset() / 60;\n\t sign = result < 0;\n\n\t result = math.abs(result).toString().split(\".\")[0];\n\t result = (sign ? \"+\" : \"-\") + (match === \"zz\" ? pad(result) : result);\n\t }\n\n\t return result !== undefined ? result : match.slice(1, match.length - 1);\n\t });\n\t }\n\n\t //number formatting\n\t function formatNumber(number, format, culture) {\n\t culture = getCulture(culture);\n\n\t var numberFormat = culture.numberFormat,\n\t decimal = numberFormat[POINT],\n\t precision = numberFormat.decimals,\n\t pattern = numberFormat.pattern[0],\n\t literals = [],\n\t symbol,\n\t isCurrency, isPercent,\n\t customPrecision,\n\t formatAndPrecision,\n\t negative = number < 0,\n\t integer,\n\t fraction,\n\t integerLength,\n\t fractionLength,\n\t replacement = EMPTY,\n\t value = EMPTY,\n\t idx,\n\t length,\n\t ch,\n\t hasGroup,\n\t hasNegativeFormat,\n\t decimalIndex,\n\t sharpIndex,\n\t zeroIndex,\n\t hasZero, hasSharp,\n\t percentIndex,\n\t currencyIndex,\n\t startZeroIndex,\n\t start = -1,\n\t end;\n\n\t //return empty string if no number\n\t if (number === undefined) {\n\t return EMPTY;\n\t }\n\n\t if (!isFinite(number)) {\n\t return number;\n\t }\n\n\t //if no format then return number.toString() or number.toLocaleString() if culture.name is not defined\n\t if (!format) {\n\t return culture.name.length ? number.toLocaleString() : number.toString();\n\t }\n\n\t formatAndPrecision = standardFormatRegExp.exec(format);\n\n\t // standard formatting\n\t if (formatAndPrecision) {\n\t format = formatAndPrecision[1].toLowerCase();\n\n\t isCurrency = format === \"c\";\n\t isPercent = format === \"p\";\n\n\t if (isCurrency || isPercent) {\n\t //get specific number format information if format is currency or percent\n\t numberFormat = isCurrency ? numberFormat.currency : numberFormat.percent;\n\t decimal = numberFormat[POINT];\n\t precision = numberFormat.decimals;\n\t symbol = numberFormat.symbol;\n\t pattern = numberFormat.pattern[negative ? 0 : 1];\n\t }\n\n\t customPrecision = formatAndPrecision[2];\n\n\t if (customPrecision) {\n\t precision = +customPrecision;\n\t }\n\n\t //return number in exponential format\n\t if (format === \"e\") {\n\t var exp = customPrecision ? number.toExponential(precision) : number.toExponential(); // toExponential() and toExponential(undefined) differ in FF #653438.\n\n\t return exp.replace(POINT, numberFormat[POINT]);\n\t }\n\n\t // multiply if format is percent\n\t if (isPercent) {\n\t number *= 100;\n\t }\n\n\t number = round(number, precision);\n\t negative = number < 0;\n\t number = number.split(POINT);\n\n\t integer = number[0];\n\t fraction = number[1];\n\n\t //exclude \"-\" if number is negative.\n\t if (negative) {\n\t integer = integer.substring(1);\n\t }\n\n\t value = groupInteger(integer, 0, integer.length, numberFormat);\n\n\t if (fraction) {\n\t value += decimal + fraction;\n\t }\n\n\t if (format === \"n\" && !negative) {\n\t return value;\n\t }\n\n\t number = EMPTY;\n\n\t for (idx = 0, length = pattern.length; idx < length; idx++) {\n\t ch = pattern.charAt(idx);\n\n\t if (ch === \"n\") {\n\t number += value;\n\t } else if (ch === \"$\" || ch === \"%\") {\n\t number += symbol;\n\t } else {\n\t number += ch;\n\t }\n\t }\n\n\t return number;\n\t }\n\n\t //custom formatting\n\t //\n\t //separate format by sections.\n\n\t if (format.indexOf(\"'\") > -1 || format.indexOf(\"\\\"\") > -1 || format.indexOf(\"\\\\\") > -1) {\n\t format = format.replace(literalRegExp, function (match) {\n\t var quoteChar = match.charAt(0).replace(\"\\\\\", \"\"),\n\t literal = match.slice(1).replace(quoteChar, \"\");\n\n\t literals.push(literal);\n\n\t return PLACEHOLDER;\n\t });\n\t }\n\n\t format = format.split(\";\");\n\t if (negative && format[1]) {\n\t //get negative format\n\t format = format[1];\n\t hasNegativeFormat = true;\n\t } else if (number === 0 && format[2]) {\n\t //format for zeros\n\t format = format[2];\n\t if (format.indexOf(SHARP) == -1 && format.indexOf(ZERO) == -1) {\n\t //return format if it is string constant.\n\t return format;\n\t }\n\t } else {\n\t format = format[0];\n\t }\n\n\t percentIndex = format.indexOf(\"%\");\n\t currencyIndex = format.indexOf(\"$\");\n\n\t isPercent = percentIndex != -1;\n\t isCurrency = currencyIndex != -1;\n\n\t //multiply number if the format has percent\n\t if (isPercent) {\n\t number *= 100;\n\t }\n\n\t if (isCurrency && format[currencyIndex - 1] === \"\\\\\") {\n\t format = format.split(\"\\\\\").join(\"\");\n\t isCurrency = false;\n\t }\n\n\t if (isCurrency || isPercent) {\n\t //get specific number format information if format is currency or percent\n\t numberFormat = isCurrency ? numberFormat.currency : numberFormat.percent;\n\t decimal = numberFormat[POINT];\n\t precision = numberFormat.decimals;\n\t symbol = numberFormat.symbol;\n\t }\n\n\t hasGroup = format.indexOf(COMMA) > -1;\n\t if (hasGroup) {\n\t format = format.replace(commaRegExp, EMPTY);\n\t }\n\n\t decimalIndex = format.indexOf(POINT);\n\t length = format.length;\n\n\t if (decimalIndex != -1) {\n\t fraction = number.toString().split(\"e\");\n\t if (fraction[1]) {\n\t fraction = round(number, Math.abs(fraction[1]));\n\t } else {\n\t fraction = fraction[0];\n\t }\n\t fraction = fraction.split(POINT)[1] || EMPTY;\n\t zeroIndex = format.lastIndexOf(ZERO) - decimalIndex;\n\t sharpIndex = format.lastIndexOf(SHARP) - decimalIndex;\n\t hasZero = zeroIndex > -1;\n\t hasSharp = sharpIndex > -1;\n\t idx = fraction.length;\n\n\t if (!hasZero && !hasSharp) {\n\t format = format.substring(0, decimalIndex) + format.substring(decimalIndex + 1);\n\t length = format.length;\n\t decimalIndex = -1;\n\t idx = 0;\n\t }\n\n\t if (hasZero && zeroIndex > sharpIndex) {\n\t idx = zeroIndex;\n\t } else if (sharpIndex > zeroIndex) {\n\t if (hasSharp && idx > sharpIndex) {\n\t var rounded = round(number, sharpIndex, negative);\n\n\t while (rounded.charAt(rounded.length - 1) === ZERO && sharpIndex > 0 && sharpIndex > zeroIndex) {\n\t sharpIndex--;\n\n\t rounded = round(number, sharpIndex, negative);\n\t }\n\n\t idx = sharpIndex;\n\t } else if (hasZero && idx < zeroIndex) {\n\t idx = zeroIndex;\n\t }\n\t }\n\t }\n\n\t number = round(number, idx, negative);\n\n\t sharpIndex = format.indexOf(SHARP);\n\t startZeroIndex = zeroIndex = format.indexOf(ZERO);\n\n\t //define the index of the first digit placeholder\n\t if (sharpIndex == -1 && zeroIndex != -1) {\n\t start = zeroIndex;\n\t } else if (sharpIndex != -1 && zeroIndex == -1) {\n\t start = sharpIndex;\n\t } else {\n\t start = sharpIndex > zeroIndex ? zeroIndex : sharpIndex;\n\t }\n\n\t sharpIndex = format.lastIndexOf(SHARP);\n\t zeroIndex = format.lastIndexOf(ZERO);\n\n\t //define the index of the last digit placeholder\n\t if (sharpIndex == -1 && zeroIndex != -1) {\n\t end = zeroIndex;\n\t } else if (sharpIndex != -1 && zeroIndex == -1) {\n\t end = sharpIndex;\n\t } else {\n\t end = sharpIndex > zeroIndex ? sharpIndex : zeroIndex;\n\t }\n\n\t if (start == length) {\n\t end = start;\n\t }\n\n\t if (start != -1) {\n\t value = number.toString().split(POINT);\n\t integer = value[0];\n\t fraction = value[1] || EMPTY;\n\n\t integerLength = integer.length;\n\t fractionLength = fraction.length;\n\n\t if (negative && (number * -1) >= 0) {\n\t negative = false;\n\t }\n\n\t number = format.substring(0, start);\n\n\t if (negative && !hasNegativeFormat) {\n\t number += \"-\";\n\t }\n\n\t for (idx = start; idx < length; idx++) {\n\t ch = format.charAt(idx);\n\n\t if (decimalIndex == -1) {\n\t if (end - idx < integerLength) {\n\t number += integer;\n\t break;\n\t }\n\t } else {\n\t if (zeroIndex != -1 && zeroIndex < idx) {\n\t replacement = EMPTY;\n\t }\n\n\t if ((decimalIndex - idx) <= integerLength && decimalIndex - idx > -1) {\n\t number += integer;\n\t idx = decimalIndex;\n\t }\n\n\t if (decimalIndex === idx) {\n\t number += (fraction ? decimal : EMPTY) + fraction;\n\t idx += end - decimalIndex + 1;\n\t continue;\n\t }\n\t }\n\n\t if (ch === ZERO) {\n\t number += ch;\n\t replacement = ch;\n\t } else if (ch === SHARP) {\n\t number += replacement;\n\t }\n\t }\n\n\t if (hasGroup) {\n\t number = groupInteger(number, start + (negative && !hasNegativeFormat ? 1 : 0), Math.max(end, (integerLength + start)), numberFormat);\n\t }\n\n\t if (end >= start) {\n\t number += format.substring(end + 1);\n\t }\n\n\t //replace symbol placeholders\n\t if (isCurrency || isPercent) {\n\t value = EMPTY;\n\t for (idx = 0, length = number.length; idx < length; idx++) {\n\t ch = number.charAt(idx);\n\t value += (ch === \"$\" || ch === \"%\") ? symbol : ch;\n\t }\n\t number = value;\n\t }\n\n\t length = literals.length;\n\n\t if (length) {\n\t for (idx = 0; idx < length; idx++) {\n\t number = number.replace(PLACEHOLDER, literals[idx]);\n\t }\n\t }\n\t }\n\n\t return number;\n\t }\n\n\t var groupInteger = function(number, start, end, numberFormat) {\n\t var decimalIndex = number.indexOf(numberFormat[POINT]);\n\t var groupSizes = numberFormat.groupSize.slice();\n\t var groupSize = groupSizes.shift();\n\t var integer, integerLength;\n\t var idx, parts, value;\n\t var newGroupSize;\n\n\t end = decimalIndex !== -1 ? decimalIndex : end + 1;\n\n\t integer = number.substring(start, end);\n\t integerLength = integer.length;\n\n\t if (integerLength >= groupSize) {\n\t idx = integerLength;\n\t parts = [];\n\n\t while (idx > -1) {\n\t value = integer.substring(idx - groupSize, idx);\n\t if (value) {\n\t parts.push(value);\n\t }\n\t idx -= groupSize;\n\t newGroupSize = groupSizes.shift();\n\t groupSize = newGroupSize !== undefined ? newGroupSize : groupSize;\n\n\t if (groupSize === 0) {\n\t if (idx > 0) {\n\t parts.push(integer.substring(0, idx));\n\t }\n\t break;\n\t }\n\t }\n\n\t integer = parts.reverse().join(numberFormat[COMMA]);\n\t number = number.substring(0, start) + integer + number.substring(end);\n\t }\n\n\t return number;\n\t };\n\n\t var round = function(value, precision, negative) {\n\t precision = precision || 0;\n\n\t value = value.toString().split('e');\n\t value = Math.round(+(value[0] + 'e' + (value[1] ? (+value[1] + precision) : precision)));\n\n\t if (negative) {\n\t value = -value;\n\t }\n\n\t value = value.toString().split('e');\n\t value = +(value[0] + 'e' + (value[1] ? (+value[1] - precision) : -precision));\n\n\t return value.toFixed(Math.min(precision, 20));\n\t };\n\n\t var toString = function(value, fmt, culture) {\n\t if (fmt) {\n\t if (objectToString.call(value) === \"[object Date]\") {\n\t return formatDate(value, fmt, culture);\n\t } else if (typeof value === NUMBER) {\n\t return formatNumber(value, fmt, culture);\n\t }\n\t }\n\n\t return value !== undefined ? value : \"\";\n\t };\n\n\t kendo.format = function(fmt) {\n\t var values = arguments;\n\n\t return fmt.replace(formatRegExp, function(match, index, placeholderFormat) {\n\t var value = values[parseInt(index, 10) + 1];\n\n\t return toString(value, placeholderFormat ? placeholderFormat.substring(1) : \"\");\n\t });\n\t };\n\n\t kendo._extractFormat = function (format) {\n\t if (format.slice(0,3) === \"{0:\") {\n\t format = format.slice(3, format.length - 1);\n\t }\n\n\t return format;\n\t };\n\n\t kendo._activeElement = function() {\n\t try {\n\t return document.activeElement;\n\t } catch(e) {\n\t return document.documentElement.activeElement;\n\t }\n\t };\n\n\t kendo._round = round;\n\t kendo._outerWidth = function (element, includeMargin) { return $(element).outerWidth(includeMargin || false) || 0; };\n\t kendo._outerHeight = function (element, includeMargin) { return $(element).outerHeight(includeMargin || false) || 0; };\n\t kendo.toString = toString;\n\t})();\n\n\n\t(function() {\n\t var nonBreakingSpaceRegExp = /\\u00A0/g,\n\t exponentRegExp = /[eE][\\-+]?[0-9]+/,\n\t shortTimeZoneRegExp = /[+|\\-]\\d{1,2}/,\n\t longTimeZoneRegExp = /[+|\\-]\\d{1,2}:?\\d{2}/,\n\t dateRegExp = /^\\/Date\\((.*?)\\)\\/$/,\n\t offsetRegExp = /[+-]\\d*/,\n\t FORMATS_SEQUENCE = [ [], [ \"G\", \"g\", \"F\" ], [ \"D\", \"d\", \"y\", \"m\", \"T\", \"t\" ] ],\n\t STANDARD_FORMATS = [\n\t [\n\t \"yyyy-MM-ddTHH:mm:ss.fffffffzzz\",\n\t \"yyyy-MM-ddTHH:mm:ss.fffffff\",\n\t \"yyyy-MM-ddTHH:mm:ss.fffzzz\",\n\t \"yyyy-MM-ddTHH:mm:ss.fff\",\n\t \"ddd MMM dd yyyy HH:mm:ss\",\n\t \"yyyy-MM-ddTHH:mm:sszzz\",\n\t \"yyyy-MM-ddTHH:mmzzz\",\n\t \"yyyy-MM-ddTHH:mmzz\",\n\t \"yyyy-MM-ddTHH:mm:ss\",\n\t \"yyyy-MM-dd HH:mm:ss\",\n\t \"yyyy/MM/dd HH:mm:ss\"\n\t ], [\n\t \"yyyy-MM-ddTHH:mm\",\n\t \"yyyy-MM-dd HH:mm\",\n\t \"yyyy/MM/dd HH:mm\"\n\t ], [\n\t \"yyyy/MM/dd\",\n\t \"yyyy-MM-dd\",\n\t \"HH:mm:ss\",\n\t \"HH:mm\"\n\t ]\n\t ],\n\t numberRegExp = {\n\t 2: /^\\d{1,2}/,\n\t 3: /^\\d{1,3}/,\n\t 4: /^\\d{4}/\n\t },\n\t objectToString = {}.toString;\n\n\t function outOfRange(value, start, end) {\n\t return !(value >= start && value <= end);\n\t }\n\n\t function designatorPredicate(designator) {\n\t return designator.charAt(0);\n\t }\n\n\t function mapDesignators(designators) {\n\t return $.map(designators, designatorPredicate);\n\t }\n\n\t //if date's day is different than the typed one - adjust\n\t function adjustDST(date, hours) {\n\t if (!hours && date.getHours() === 23) {\n\t date.setHours(date.getHours() + 2);\n\t }\n\t }\n\n\t function lowerArray(data) {\n\t var idx = 0,\n\t length = data.length,\n\t array = [];\n\n\t for (; idx < length; idx++) {\n\t array[idx] = (data[idx] + \"\").toLowerCase();\n\t }\n\n\t return array;\n\t }\n\n\t function lowerLocalInfo(localInfo) {\n\t var newLocalInfo = {}, property;\n\n\t for (property in localInfo) {\n\t newLocalInfo[property] = lowerArray(localInfo[property]);\n\t }\n\n\t return newLocalInfo;\n\t }\n\n\t function parseExact(value, format, culture, strict) {\n\t if (!value) {\n\t return null;\n\t }\n\n\t var lookAhead = function (match) {\n\t var i = 0;\n\t while (format[idx] === match) {\n\t i++;\n\t idx++;\n\t }\n\t if (i > 0) {\n\t idx -= 1;\n\t }\n\t return i;\n\t },\n\t getNumber = function(size) {\n\t var rg = numberRegExp[size] || new RegExp('^\\\\d{1,' + size + '}'),\n\t match = value.substr(valueIdx, size).match(rg);\n\n\t if (match) {\n\t match = match[0];\n\t valueIdx += match.length;\n\t return parseInt(match, 10);\n\t }\n\t return null;\n\t },\n\t getIndexByName = function (names, lower) {\n\t var i = 0,\n\t length = names.length,\n\t name, nameLength,\n\t matchLength = 0,\n\t matchIdx = 0,\n\t subValue;\n\n\t for (; i < length; i++) {\n\t name = names[i];\n\t nameLength = name.length;\n\t subValue = value.substr(valueIdx, nameLength);\n\n\t if (lower) {\n\t subValue = subValue.toLowerCase();\n\t }\n\n\t if (subValue == name && nameLength > matchLength) {\n\t matchLength = nameLength;\n\t matchIdx = i;\n\t }\n\t }\n\n\t if (matchLength) {\n\t valueIdx += matchLength;\n\t return matchIdx + 1;\n\t }\n\n\t return null;\n\t },\n\t checkLiteral = function() {\n\t var result = false;\n\t if (value.charAt(valueIdx) === format[idx]) {\n\t valueIdx++;\n\t result = true;\n\t }\n\t return result;\n\t },\n\t calendar = culture.calendars.standard,\n\t year = null,\n\t month = null,\n\t day = null,\n\t hours = null,\n\t minutes = null,\n\t seconds = null,\n\t milliseconds = null,\n\t idx = 0,\n\t valueIdx = 0,\n\t literal = false,\n\t date = new Date(),\n\t twoDigitYearMax = calendar.twoDigitYearMax || 2029,\n\t defaultYear = date.getFullYear(),\n\t ch, count, length, pattern,\n\t pmHour, UTC, matches,\n\t amDesignators, pmDesignators,\n\t hoursOffset, minutesOffset,\n\t hasTime, match;\n\n\t if (!format) {\n\t format = \"d\"; //shord date format\n\t }\n\n\t //if format is part of the patterns get real format\n\t pattern = calendar.patterns[format];\n\t if (pattern) {\n\t format = pattern;\n\t }\n\n\t format = format.split(\"\");\n\t length = format.length;\n\n\t for (; idx < length; idx++) {\n\t ch = format[idx];\n\n\t if (literal) {\n\t if (ch === \"'\") {\n\t literal = false;\n\t } else {\n\t checkLiteral();\n\t }\n\t } else {\n\t if (ch === \"d\") {\n\t count = lookAhead(\"d\");\n\t if (!calendar._lowerDays) {\n\t calendar._lowerDays = lowerLocalInfo(calendar.days);\n\t }\n\n\t if (day !== null && count > 2) {\n\t continue;\n\t }\n\n\t day = count < 3 ? getNumber(2) : getIndexByName(calendar._lowerDays[count == 3 ? \"namesAbbr\" : \"names\"], true);\n\n\t if (day === null || outOfRange(day, 1, 31)) {\n\t return null;\n\t }\n\t } else if (ch === \"M\") {\n\t count = lookAhead(\"M\");\n\t if (!calendar._lowerMonths) {\n\t calendar._lowerMonths = lowerLocalInfo(calendar.months);\n\t }\n\t month = count < 3 ? getNumber(2) : getIndexByName(calendar._lowerMonths[count == 3 ? 'namesAbbr' : 'names'], true);\n\n\t if (month === null || outOfRange(month, 1, 12)) {\n\t return null;\n\t }\n\t month -= 1; //because month is zero based\n\t } else if (ch === \"y\") {\n\t count = lookAhead(\"y\");\n\t year = getNumber(count);\n\n\t if (year === null) {\n\t return null;\n\t }\n\n\t if (count == 2) {\n\t if (typeof twoDigitYearMax === \"string\") {\n\t twoDigitYearMax = defaultYear + parseInt(twoDigitYearMax, 10);\n\t }\n\n\t year = (defaultYear - defaultYear % 100) + year;\n\t if (year > twoDigitYearMax) {\n\t year -= 100;\n\t }\n\t }\n\t } else if (ch === \"h\" ) {\n\t lookAhead(\"h\");\n\t hours = getNumber(2);\n\t if (hours == 12) {\n\t hours = 0;\n\t }\n\t if (hours === null || outOfRange(hours, 0, 11)) {\n\t return null;\n\t }\n\t } else if (ch === \"H\") {\n\t lookAhead(\"H\");\n\t hours = getNumber(2);\n\t if (hours === null || outOfRange(hours, 0, 23)) {\n\t return null;\n\t }\n\t } else if (ch === \"m\") {\n\t lookAhead(\"m\");\n\t minutes = getNumber(2);\n\t if (minutes === null || outOfRange(minutes, 0, 59)) {\n\t return null;\n\t }\n\t } else if (ch === \"s\") {\n\t lookAhead(\"s\");\n\t seconds = getNumber(2);\n\t if (seconds === null || outOfRange(seconds, 0, 59)) {\n\t return null;\n\t }\n\t } else if (ch === \"f\") {\n\t count = lookAhead(\"f\");\n\n\t match = value.substr(valueIdx, count).match(numberRegExp[3]);\n\t milliseconds = getNumber(count); //move value index position\n\n\t if (milliseconds !== null) {\n\t milliseconds = parseFloat(\"0.\" + match[0], 10);\n\t milliseconds = kendo._round(milliseconds, 3);\n\t milliseconds *= 1000;\n\t }\n\n\t if (milliseconds === null || outOfRange(milliseconds, 0, 999)) {\n\t return null;\n\t }\n\n\t } else if (ch === \"t\") {\n\t count = lookAhead(\"t\");\n\t amDesignators = calendar.AM;\n\t pmDesignators = calendar.PM;\n\n\t if (count === 1) {\n\t amDesignators = mapDesignators(amDesignators);\n\t pmDesignators = mapDesignators(pmDesignators);\n\t }\n\n\t pmHour = getIndexByName(pmDesignators);\n\t if (!pmHour && !getIndexByName(amDesignators)) {\n\t return null;\n\t }\n\t }\n\t else if (ch === \"z\") {\n\t UTC = true;\n\t count = lookAhead(\"z\");\n\n\t if (value.substr(valueIdx, 1) === \"Z\") {\n\t checkLiteral();\n\t continue;\n\t }\n\n\t matches = value.substr(valueIdx, 6)\n\t .match(count > 2 ? longTimeZoneRegExp : shortTimeZoneRegExp);\n\n\t if (!matches) {\n\t return null;\n\t }\n\n\t matches = matches[0].split(\":\");\n\n\t hoursOffset = matches[0];\n\t minutesOffset = matches[1];\n\n\t if (!minutesOffset && hoursOffset.length > 3) { //(+|-)[hh][mm] format is used\n\t valueIdx = hoursOffset.length - 2;\n\t minutesOffset = hoursOffset.substring(valueIdx);\n\t hoursOffset = hoursOffset.substring(0, valueIdx);\n\t }\n\n\t hoursOffset = parseInt(hoursOffset, 10);\n\t if (outOfRange(hoursOffset, -12, 13)) {\n\t return null;\n\t }\n\n\t if (count > 2) {\n\t minutesOffset = matches[0][0] + minutesOffset;\n\t minutesOffset = parseInt(minutesOffset, 10);\n\t if (isNaN(minutesOffset) || outOfRange(minutesOffset, -59, 59)) {\n\t return null;\n\t }\n\t }\n\t } else if (ch === \"'\") {\n\t literal = true;\n\t checkLiteral();\n\t } else if (!checkLiteral()) {\n\t return null;\n\t }\n\t }\n\t }\n\n\t // if more characters follow, assume wrong format\n\t // https://github.com/telerik/kendo-ui-core/issues/3476\n\t if (strict && !/^\\s*$/.test(value.substr(valueIdx))) {\n\t return null;\n\t }\n\n\t hasTime = hours !== null || minutes !== null || seconds || null;\n\n\t if (year === null && month === null && day === null && hasTime) {\n\t year = defaultYear;\n\t month = date.getMonth();\n\t day = date.getDate();\n\t } else {\n\t if (year === null) {\n\t year = defaultYear;\n\t }\n\n\t if (day === null) {\n\t day = 1;\n\t }\n\t }\n\n\t if (pmHour && hours < 12) {\n\t hours += 12;\n\t }\n\n\t if (UTC) {\n\t if (hoursOffset) {\n\t hours += -hoursOffset;\n\t }\n\n\t if (minutesOffset) {\n\t minutes += -minutesOffset;\n\t }\n\n\t value = new Date(Date.UTC(year, month, day, hours, minutes, seconds, milliseconds));\n\t } else {\n\t value = new Date(year, month, day, hours, minutes, seconds, milliseconds);\n\t adjustDST(value, hours);\n\t }\n\n\t if (year < 100) {\n\t value.setFullYear(year);\n\t }\n\n\t if (value.getDate() !== day && UTC === undefined) {\n\t return null;\n\t }\n\n\t return value;\n\t }\n\n\t function parseMicrosoftFormatOffset(offset) {\n\t var sign = offset.substr(0, 1) === \"-\" ? -1 : 1;\n\n\t offset = offset.substring(1);\n\t offset = (parseInt(offset.substr(0, 2), 10) * 60) + parseInt(offset.substring(2), 10);\n\n\t return sign * offset;\n\t }\n\n\t function getDefaultFormats(culture) {\n\t var length = math.max(FORMATS_SEQUENCE.length, STANDARD_FORMATS.length);\n\t var calendar = culture.calendar || culture.calendars.standard;\n\t var patterns = calendar.patterns;\n\t var cultureFormats, formatIdx, idx;\n\t var formats = [];\n\n\t for (idx = 0; idx < length; idx++) {\n\t cultureFormats = FORMATS_SEQUENCE[idx];\n\t for (formatIdx = 0; formatIdx < cultureFormats.length; formatIdx++) {\n\t formats.push(patterns[cultureFormats[formatIdx]]);\n\t }\n\t formats = formats.concat(STANDARD_FORMATS[idx]);\n\t }\n\n\t return formats;\n\t }\n\n\t function internalParseDate(value, formats, culture, strict) {\n\t if (objectToString.call(value) === \"[object Date]\") {\n\t return value;\n\t }\n\n\t var idx = 0;\n\t var date = null;\n\t var length;\n\t var tzoffset;\n\n\t if (value && value.indexOf(\"/D\") === 0) {\n\t date = dateRegExp.exec(value);\n\t if (date) {\n\t date = date[1];\n\t tzoffset = offsetRegExp.exec(date.substring(1));\n\n\t date = new Date(parseInt(date, 10));\n\n\t if (tzoffset) {\n\t tzoffset = parseMicrosoftFormatOffset(tzoffset[0]);\n\t date = kendo.timezone.apply(date, 0);\n\t date = kendo.timezone.convert(date, 0, -1 * tzoffset);\n\t }\n\n\t return date;\n\t }\n\t }\n\n\t culture = kendo.getCulture(culture);\n\n\t if (!formats) {\n\t formats = getDefaultFormats(culture);\n\t }\n\n\t formats = isArray(formats) ? formats: [formats];\n\t length = formats.length;\n\n\t for (; idx < length; idx++) {\n\t date = parseExact(value, formats[idx], culture, strict);\n\t if (date) {\n\t return date;\n\t }\n\t }\n\n\t return date;\n\t }\n\n\t kendo.parseDate = function(value, formats, culture) {\n\t return internalParseDate(value, formats, culture, false);\n\t };\n\n\t kendo.parseExactDate = function(value, formats, culture) {\n\t return internalParseDate(value, formats, culture, true);\n\t };\n\n\t kendo.parseInt = function(value, culture) {\n\t var result = kendo.parseFloat(value, culture);\n\t if (result) {\n\t result = result | 0;\n\t }\n\t return result;\n\t };\n\n\t kendo.parseFloat = function(value, culture, format) {\n\t if (!value && value !== 0) {\n\t return null;\n\t }\n\n\t if (typeof value === NUMBER) {\n\t return value;\n\t }\n\n\t value = value.toString();\n\t culture = kendo.getCulture(culture);\n\n\t var number = culture.numberFormat,\n\t percent = number.percent,\n\t currency = number.currency,\n\t symbol = currency.symbol,\n\t percentSymbol = percent.symbol,\n\t negative = value.indexOf(\"-\"),\n\t parts, isPercent;\n\n\t //handle exponential number\n\t if (exponentRegExp.test(value)) {\n\t value = parseFloat(value.replace(number[\".\"], \".\"));\n\t if (isNaN(value)) {\n\t value = null;\n\t }\n\t return value;\n\t }\n\n\t if (negative > 0) {\n\t return null;\n\t } else {\n\t negative = negative > -1;\n\t }\n\n\t if (value.indexOf(symbol) > -1 || (format && format.toLowerCase().indexOf(\"c\") > -1)) {\n\t number = currency;\n\t parts = number.pattern[0].replace(\"$\", symbol).split(\"n\");\n\t if (value.indexOf(parts[0]) > -1 && value.indexOf(parts[1]) > -1) {\n\t value = value.replace(parts[0], \"\").replace(parts[1], \"\");\n\t negative = true;\n\t }\n\t } else if (value.indexOf(percentSymbol) > -1) {\n\t isPercent = true;\n\t number = percent;\n\t symbol = percentSymbol;\n\t }\n\n\t value = value.replace(\"-\", \"\")\n\t .replace(symbol, \"\")\n\t .replace(nonBreakingSpaceRegExp, \" \")\n\t .split(number[\",\"].replace(nonBreakingSpaceRegExp, \" \")).join(\"\")\n\t .replace(number[\".\"], \".\");\n\n\t value = parseFloat(value);\n\n\t if (isNaN(value)) {\n\t value = null;\n\t } else if (negative) {\n\t value *= -1;\n\t }\n\n\t if (value && isPercent) {\n\t value /= 100;\n\t }\n\n\t return value;\n\t };\n\t})();\n\n\t function getShadows(element) {\n\t var shadow = element.css(kendo.support.transitions.css + \"box-shadow\") || element.css(\"box-shadow\"),\n\t radius = shadow ? shadow.match(boxShadowRegExp) || [ 0, 0, 0, 0, 0 ] : [ 0, 0, 0, 0, 0 ],\n\t blur = math.max((+radius[3]), +(radius[4] || 0));\n\n\t return {\n\t left: (-radius[1]) + blur,\n\t right: (+radius[1]) + blur,\n\t bottom: (+radius[2]) + blur\n\t };\n\t }\n\n\t function wrap(element, autosize) {\n\t var browser = support.browser,\n\t percentage,\n\t outerWidth = kendo._outerWidth,\n\t outerHeight = kendo._outerHeight,\n\t parent = element.parent(),\n\t windowOuterWidth = outerWidth(window);\n\n\t parent.removeClass(\"k-animation-container-sm\");\n\n\t if (!parent.hasClass(\"k-animation-container\")) {\n\t var width = element[0].style.width,\n\t height = element[0].style.height,\n\t percentWidth = percentRegExp.test(width),\n\t percentHeight = percentRegExp.test(height),\n\t forceWidth = element.hasClass(\"k-tooltip\") || element.is(\".k-menu-horizontal.k-context-menu\");\n\n\t percentage = percentWidth || percentHeight;\n\n\t if (!percentWidth && (!autosize || (autosize && width) || forceWidth)) { width = autosize ? outerWidth(element) + 1 : outerWidth(element); }\n\t if (!percentHeight && (!autosize || (autosize && height)) || element.is(\".k-menu-horizontal.k-context-menu\")) { height = outerHeight(element); }\n\n\t element.wrap(\n\t $(\"
\")\n\t .addClass(\"k-animation-container\")\n\t .css({\n\t width: width,\n\t height: height\n\t }));\n\t parent = element.parent();\n\n\t if (percentage) {\n\t element.css({\n\t width: \"100%\",\n\t height: \"100%\",\n\t boxSizing: \"border-box\",\n\t mozBoxSizing: \"border-box\",\n\t webkitBoxSizing: \"border-box\"\n\t });\n\t }\n\t } else {\n\t wrapResize(element, autosize);\n\t }\n\n\t if(windowOuterWidth < outerWidth(parent)){\n\t parent.addClass(\"k-animation-container-sm\");\n\n\t wrapResize(element, autosize);\n\t }\n\n\t if (browser.msie && math.floor(browser.version) <= 7) {\n\t element.css({ zoom: 1 });\n\t element.children(\".k-menu\").width(element.width());\n\t }\n\n\t return parent;\n\t }\n\n\t function wrapResize(element, autosize) {\n\t var percentage,\n\t outerWidth = kendo._outerWidth,\n\t outerHeight = kendo._outerHeight,\n\t wrapper = element.parent(\".k-animation-container\"),\n\t wrapperStyle = wrapper[0].style;\n\n\t if (wrapper.is(\":hidden\")) {\n\t wrapper.css({\n\t display: \"\",\n\t position: \"\"\n\t });\n\t }\n\n\t percentage = percentRegExp.test(wrapperStyle.width) || percentRegExp.test(wrapperStyle.height);\n\n\t if (!percentage) {\n\t wrapper.css({\n\t width: autosize ? outerWidth(element) + 1 : outerWidth(element),\n\t height: outerHeight(element),\n\t boxSizing: \"content-box\",\n\t mozBoxSizing: \"content-box\",\n\t webkitBoxSizing: \"content-box\"\n\t });\n\t }\n\t }\n\n\t function deepExtend(destination) {\n\t var i = 1,\n\t length = arguments.length;\n\n\t for (i = 1; i < length; i++) {\n\t deepExtendOne(destination, arguments[i]);\n\t }\n\n\t return destination;\n\t }\n\n\t function deepExtendOne(destination, source) {\n\t var ObservableArray = kendo.data.ObservableArray,\n\t LazyObservableArray = kendo.data.LazyObservableArray,\n\t DataSource = kendo.data.DataSource,\n\t HierarchicalDataSource = kendo.data.HierarchicalDataSource,\n\t property,\n\t propValue,\n\t propType,\n\t propInit,\n\t destProp;\n\n\t for (property in source) {\n\t propValue = source[property];\n\t propType = typeof propValue;\n\n\t if (propType === OBJECT && propValue !== null) {\n\t propInit = propValue.constructor;\n\t } else {\n\t propInit = null;\n\t }\n\n\t if (propInit &&\n\t propInit !== Array && propInit !== ObservableArray && propInit !== LazyObservableArray &&\n\t propInit !== DataSource && propInit !== HierarchicalDataSource && propInit !== RegExp &&\n\t (!kendo.isFunction(window.ArrayBuffer) || propInit !== ArrayBuffer)) {\n\n\t if (propValue instanceof Date) {\n\t destination[property] = new Date(propValue.getTime());\n\t } else if (isFunction(propValue.clone)) {\n\t destination[property] = propValue.clone();\n\t } else {\n\t destProp = destination[property];\n\t if (typeof (destProp) === OBJECT) {\n\t destination[property] = destProp || {};\n\t } else {\n\t destination[property] = {};\n\t }\n\t deepExtendOne(destination[property], propValue);\n\t }\n\t } else if (propType !== UNDEFINED) {\n\t destination[property] = propValue;\n\t }\n\t }\n\n\t return destination;\n\t }\n\n\t function testRx(agent, rxs, dflt) {\n\t for (var rx in rxs) {\n\t if (rxs.hasOwnProperty(rx) && rxs[rx].test(agent)) {\n\t return rx;\n\t }\n\t }\n\t return dflt !== undefined ? dflt : agent;\n\t }\n\n\t function toHyphens(str) {\n\t return str.replace(/([a-z][A-Z])/g, function (g) {\n\t return g.charAt(0) + '-' + g.charAt(1).toLowerCase();\n\t });\n\t }\n\n\t function toCamelCase(str) {\n\t return str.replace(/\\-(\\w)/g, function (strMatch, g1) {\n\t return g1.toUpperCase();\n\t });\n\t }\n\n\t function getComputedStyles(element, properties) {\n\t var styles = {}, computedStyle;\n\n\t if (document.defaultView && document.defaultView.getComputedStyle) {\n\t computedStyle = document.defaultView.getComputedStyle(element, \"\");\n\n\t if (properties) {\n\t $.each(properties, function(idx, value) {\n\t styles[value] = computedStyle.getPropertyValue(value);\n\t });\n\t }\n\t } else {\n\t computedStyle = element.currentStyle;\n\n\t if (properties) {\n\t $.each(properties, function(idx, value) {\n\t styles[value] = computedStyle[toCamelCase(value)];\n\t });\n\t }\n\t }\n\n\t if (!kendo.size(styles)) {\n\t styles = computedStyle;\n\t }\n\n\t return styles;\n\t }\n\n\t function isScrollable(element) {\n\t if (element && element.className && typeof(element.className) === \"string\" && element.className.indexOf(\"k-auto-scrollable\") > -1) {\n\t return true;\n\t }\n\n\t var overflow = getComputedStyles(element, [\"overflow\"]).overflow;\n\t return overflow == \"auto\" || overflow == \"scroll\";\n\t }\n\n\t function scrollLeft(element, value) {\n\t var webkit = support.browser.webkit;\n\t var mozila = support.browser.mozilla;\n\t var el = element instanceof $ ? element[0] : element;\n\t var isRtl;\n\n\t if (!element) {\n\t return;\n\t }\n\n\t isRtl = support.isRtl(element);\n\n\t if (value !== undefined) {\n\t if (isRtl && webkit) {\n\t el.scrollLeft = el.scrollWidth - el.clientWidth - value;\n\t } else if (isRtl && mozila) {\n\t el.scrollLeft = -value;\n\t } else {\n\t el.scrollLeft = value;\n\t }\n\t } else {\n\t if (isRtl && webkit) {\n\t return el.scrollWidth - el.clientWidth - el.scrollLeft;\n\t } else {\n\t return Math.abs(el.scrollLeft);\n\t }\n\t }\n\t }\n\n\t (function () {\n\t support._scrollbar = undefined;\n\n\t support.scrollbar = function (refresh) {\n\t if (!isNaN(support._scrollbar) && !refresh) {\n\t return support._scrollbar;\n\t } else {\n\t var div = document.createElement(\"div\"),\n\t result;\n\n\t div.style.cssText = \"overflow:scroll;overflow-x:hidden;zoom:1;clear:both;display:block\";\n\t div.innerHTML = \" \";\n\t document.body.appendChild(div);\n\n\t support._scrollbar = result = div.offsetWidth - div.scrollWidth;\n\n\t document.body.removeChild(div);\n\n\t return result;\n\t }\n\t };\n\n\t support.isRtl = function(element) {\n\t return $(element).closest(\".k-rtl\").length > 0;\n\t };\n\n\t var table = document.createElement(\"table\");\n\n\t // Internet Explorer does not support setting the innerHTML of TBODY and TABLE elements\n\t try {\n\t table.innerHTML = \"\";\n\n\t support.tbodyInnerHtml = true;\n\t } catch (e) {\n\t support.tbodyInnerHtml = false;\n\t }\n\n\t support.touch = \"ontouchstart\" in window;\n\n\t var docStyle = document.documentElement.style;\n\t var transitions = support.transitions = false,\n\t transforms = support.transforms = false,\n\t elementProto = \"HTMLElement\" in window ? HTMLElement.prototype : [];\n\n\t support.hasHW3D = (\"WebKitCSSMatrix\" in window && \"m11\" in new window.WebKitCSSMatrix()) || \"MozPerspective\" in docStyle || \"msPerspective\" in docStyle;\n\t support.cssFlexbox = (\"flexWrap\" in docStyle) || (\"WebkitFlexWrap\" in docStyle) || (\"msFlexWrap\" in docStyle);\n\n\t each([ \"Moz\", \"webkit\", \"O\", \"ms\" ], function () {\n\t var prefix = this.toString(),\n\t hasTransitions = typeof table.style[prefix + \"Transition\"] === STRING;\n\n\t if (hasTransitions || typeof table.style[prefix + \"Transform\"] === STRING) {\n\t var lowPrefix = prefix.toLowerCase();\n\n\t transforms = {\n\t css: (lowPrefix != \"ms\") ? \"-\" + lowPrefix + \"-\" : \"\",\n\t prefix: prefix,\n\t event: (lowPrefix === \"o\" || lowPrefix === \"webkit\") ? lowPrefix : \"\"\n\t };\n\n\t if (hasTransitions) {\n\t transitions = transforms;\n\t transitions.event = transitions.event ? transitions.event + \"TransitionEnd\" : \"transitionend\";\n\t }\n\n\t return false;\n\t }\n\t });\n\n\t table = null;\n\n\t support.transforms = transforms;\n\t support.transitions = transitions;\n\n\t support.devicePixelRatio = window.devicePixelRatio === undefined ? 1 : window.devicePixelRatio;\n\n\t try {\n\t support.screenWidth = window.outerWidth || window.screen ? window.screen.availWidth : window.innerWidth;\n\t support.screenHeight = window.outerHeight || window.screen ? window.screen.availHeight : window.innerHeight;\n\t } catch(e) {\n\t //window.outerWidth throws error when in IE showModalDialog.\n\t support.screenWidth = window.screen.availWidth;\n\t support.screenHeight = window.screen.availHeight;\n\t }\n\n\t support.detectOS = function (ua) {\n\t var os = false, minorVersion, match = [],\n\t notAndroidPhone = !/mobile safari/i.test(ua),\n\t agentRxs = {\n\t wp: /(Windows Phone(?: OS)?)\\s(\\d+)\\.(\\d+(\\.\\d+)?)/,\n\t fire: /(Silk)\\/(\\d+)\\.(\\d+(\\.\\d+)?)/,\n\t android: /(Android|Android.*(?:Opera|Firefox).*?\\/)\\s*(\\d+)\\.?(\\d+(\\.\\d+)?)?/,\n\t iphone: /(iPhone|iPod).*OS\\s+(\\d+)[\\._]([\\d\\._]+)/,\n\t ipad: /(iPad).*OS\\s+(\\d+)[\\._]([\\d_]+)/,\n\t meego: /(MeeGo).+NokiaBrowser\\/(\\d+)\\.([\\d\\._]+)/,\n\t webos: /(webOS)\\/(\\d+)\\.(\\d+(\\.\\d+)?)/,\n\t blackberry: /(BlackBerry|BB10).*?Version\\/(\\d+)\\.(\\d+(\\.\\d+)?)/,\n\t playbook: /(PlayBook).*?Tablet\\s*OS\\s*(\\d+)\\.(\\d+(\\.\\d+)?)/,\n\t windows: /(MSIE)\\s+(\\d+)\\.(\\d+(\\.\\d+)?)/,\n\t tizen: /(tizen).*?Version\\/(\\d+)\\.(\\d+(\\.\\d+)?)/i,\n\t sailfish: /(sailfish).*rv:(\\d+)\\.(\\d+(\\.\\d+)?).*firefox/i,\n\t ffos: /(Mobile).*rv:(\\d+)\\.(\\d+(\\.\\d+)?).*Firefox/\n\t },\n\t osRxs = {\n\t ios: /^i(phone|pad|pod)$/i,\n\t android: /^android|fire$/i,\n\t blackberry: /^blackberry|playbook/i,\n\t windows: /windows/,\n\t wp: /wp/,\n\t flat: /sailfish|ffos|tizen/i,\n\t meego: /meego/\n\t },\n\t formFactorRxs = {\n\t tablet: /playbook|ipad|fire/i\n\t },\n\t browserRxs = {\n\t omini: /Opera\\sMini/i,\n\t omobile: /Opera\\sMobi/i,\n\t firefox: /Firefox|Fennec/i,\n\t mobilesafari: /version\\/.*safari/i,\n\t ie: /MSIE|Windows\\sPhone/i,\n\t chrome: /chrome|crios/i,\n\t webkit: /webkit/i\n\t };\n\n\t for (var agent in agentRxs) {\n\t if (agentRxs.hasOwnProperty(agent)) {\n\t match = ua.match(agentRxs[agent]);\n\t if (match) {\n\t if (agent == \"windows\" && \"plugins\" in navigator) { return false; } // Break if not Metro/Mobile Windows\n\n\t os = {};\n\t os.device = agent;\n\t os.tablet = testRx(agent, formFactorRxs, false);\n\t os.browser = testRx(ua, browserRxs, \"default\");\n\t os.name = testRx(agent, osRxs);\n\t os[os.name] = true;\n\t os.majorVersion = match[2];\n\t os.minorVersion = (match[3] || \"0\").replace(\"_\", \".\");\n\t minorVersion = os.minorVersion.replace(\".\", \"\").substr(0, 2);\n\t os.flatVersion = os.majorVersion + minorVersion + (new Array(3 - (minorVersion.length < 3 ? minorVersion.length : 2)).join(\"0\"));\n\t os.cordova = typeof window.PhoneGap !== UNDEFINED || typeof window.cordova !== UNDEFINED; // Use file protocol to detect appModes.\n\t os.appMode = window.navigator.standalone || (/file|local|wmapp/).test(window.location.protocol) || os.cordova; // Use file protocol to detect appModes.\n\n\t if (os.android && (support.devicePixelRatio < 1.5 && os.flatVersion < 400 || notAndroidPhone) && (support.screenWidth > 800 || support.screenHeight > 800)) {\n\t os.tablet = agent;\n\t }\n\n\t break;\n\t }\n\t }\n\t }\n\t return os;\n\t };\n\n\t var mobileOS = support.mobileOS = support.detectOS(navigator.userAgent);\n\n\t support.wpDevicePixelRatio = mobileOS.wp ? screen.width / 320 : 0;\n\n\t support.hasNativeScrolling = false;\n\n\t if (mobileOS.ios || (mobileOS.android && mobileOS.majorVersion > 2) || mobileOS.wp) {\n\t support.hasNativeScrolling = mobileOS;\n\t }\n\n\t support.delayedClick = function() {\n\n\t // only the mobile devices with touch events do this.\n\t if (support.touch) {\n\t // All iOS devices so far (by the time I am writing this, iOS 9.0.2 is the latest),\n\t // delay their click events.\n\t if (mobileOS.ios) {\n\t return true;\n\t }\n\n\t if (mobileOS.android) {\n\n\t if (!support.browser.chrome) { // older webkits and webviews delay the click\n\t return true;\n\t }\n\n\t // from here on, we deal with Chrome on Android.\n\t if (support.browser.version < 32) {\n\t return false;\n\t }\n\n\t // Chrome 32+ does conditional fast clicks if the view port is not user scalable.\n\t return !($(\"meta[name=viewport]\").attr(\"content\") || \"\").match(/user-scalable=no/i);\n\t }\n\t }\n\n\t return false;\n\t };\n\n\t support.mouseAndTouchPresent = support.touch && !(support.mobileOS.ios || support.mobileOS.android);\n\n\t support.detectBrowser = function(ua) {\n\t var browser = false, match = [],\n\t browserRxs = {\n\t edge: /(edge)[ \\/]([\\w.]+)/i,\n\t webkit: /(chrome|crios)[ \\/]([\\w.]+)/i,\n\t safari: /(webkit)[ \\/]([\\w.]+)/i,\n\t opera: /(opera)(?:.*version|)[ \\/]([\\w.]+)/i,\n\t msie: /(msie\\s|trident.*? rv:)([\\w.]+)/i,\n\t mozilla: /(mozilla)(?:.*? rv:([\\w.]+)|)/i\n\t };\n\n\t for (var agent in browserRxs) {\n\t if (browserRxs.hasOwnProperty(agent)) {\n\t match = ua.match(browserRxs[agent]);\n\t if (match) {\n\t browser = {};\n\t browser[agent] = true;\n\t browser[match[1].toLowerCase().split(\" \")[0].split(\"/\")[0]] = true;\n\t browser.version = parseInt(document.documentMode || match[2], 10);\n\n\t break;\n\t }\n\t }\n\t }\n\n\t return browser;\n\t };\n\n\t support.browser = support.detectBrowser(navigator.userAgent);\n\n\t support.detectClipboardAccess = function() {\n\t var commands = {\n\t copy: document.queryCommandSupported ? document.queryCommandSupported(\"copy\") : false,\n\t cut: document.queryCommandSupported ? document.queryCommandSupported(\"cut\") : false,\n\t paste : document.queryCommandSupported ? document.queryCommandSupported(\"paste\") : false\n\t };\n\n\t if (support.browser.chrome) {\n\t //not using queryCommandSupported due to chromium issues 476508 and 542948\n\t commands.paste = false;\n\t if(support.browser.version >= 43) {\n\t commands.copy = true;\n\t commands.cut = true;\n\t }\n\t }\n\n\t return commands;\n\t };\n\n\t support.clipboard = support.detectClipboardAccess();\n\n\t support.zoomLevel = function() {\n\t try {\n\t var browser = support.browser;\n\t var ie11WidthCorrection = 0;\n\t var docEl = document.documentElement;\n\n\t if (browser.msie && browser.version == 11 && docEl.scrollHeight > docEl.clientHeight && !support.touch) {\n\t ie11WidthCorrection = support.scrollbar();\n\t }\n\n\t return support.touch ? (docEl.clientWidth / window.innerWidth) :\n\t browser.msie && browser.version >= 10 ? (((top || window).document.documentElement.offsetWidth + ie11WidthCorrection) / (top || window).innerWidth) : 1;\n\t } catch(e) {\n\t return 1;\n\t }\n\t };\n\n\t support.cssBorderSpacing = typeof docStyle.borderSpacing != \"undefined\" && !(support.browser.msie && support.browser.version < 8);\n\n\t (function(browser) {\n\t // add browser-specific CSS class\n\t var cssClass = \"\",\n\t docElement = $(document.documentElement),\n\t majorVersion = parseInt(browser.version, 10);\n\n\t if (browser.msie) {\n\t cssClass = \"ie\";\n\t } else if (browser.mozilla) {\n\t cssClass = \"ff\";\n\t } else if (browser.safari) {\n\t cssClass = \"safari\";\n\t } else if (browser.webkit) {\n\t cssClass = \"webkit\";\n\t } else if (browser.opera) {\n\t cssClass = \"opera\";\n\t } else if (browser.edge) {\n\t cssClass = \"edge\";\n\t }\n\n\t if (cssClass) {\n\t cssClass = \"k-\" + cssClass + \" k-\" + cssClass + majorVersion;\n\t }\n\t if (support.mobileOS) {\n\t cssClass += \" k-mobile\";\n\t }\n\n\t if (!support.cssFlexbox) {\n\t cssClass += \" k-no-flexbox\";\n\t }\n\n\t docElement.addClass(cssClass);\n\t })(support.browser);\n\n\t support.eventCapture = document.documentElement.addEventListener;\n\n\t var input = document.createElement(\"input\");\n\n\t support.placeholder = \"placeholder\" in input;\n\t support.propertyChangeEvent = \"onpropertychange\" in input;\n\n\t support.input = (function() {\n\t var types = [\"number\", \"date\", \"time\", \"month\", \"week\", \"datetime\", \"datetime-local\"];\n\t var length = types.length;\n\t var value = \"test\";\n\t var result = {};\n\t var idx = 0;\n\t var type;\n\n\t for (;idx < length; idx++) {\n\t type = types[idx];\n\t input.setAttribute(\"type\", type);\n\t input.value = value;\n\n\t result[type.replace(\"-\", \"\")] = input.type !== \"text\" && input.value !== value;\n\t }\n\n\t return result;\n\t })();\n\n\t input.style.cssText = \"float:left;\";\n\n\t support.cssFloat = !!input.style.cssFloat;\n\n\t input = null;\n\n\t support.stableSort = (function() {\n\t // Chrome sort is not stable for more than *10* items\n\t // IE9+ sort is not stable for than *512* items\n\t var threshold = 513;\n\n\t var sorted = [{\n\t index: 0,\n\t field: \"b\"\n\t }];\n\n\t for (var i = 1; i < threshold; i++) {\n\t sorted.push({\n\t index: i,\n\t field: \"a\"\n\t });\n\t }\n\n\t sorted.sort(function(a, b) {\n\t return a.field > b.field ? 1 : (a.field < b.field ? -1 : 0);\n\t });\n\n\t return sorted[0].index === 1;\n\t })();\n\n\t support.matchesSelector = elementProto.webkitMatchesSelector || elementProto.mozMatchesSelector ||\n\t elementProto.msMatchesSelector || elementProto.oMatchesSelector ||\n\t elementProto.matchesSelector || elementProto.matches ||\n\t function( selector ) {\n\t var nodeList = document.querySelectorAll ? ( this.parentNode || document ).querySelectorAll( selector ) || [] : $(selector),\n\t i = nodeList.length;\n\n\t while (i--) {\n\t if (nodeList[i] == this) {\n\t return true;\n\t }\n\t }\n\n\t return false;\n\t };\n\n\t support.matchMedia = \"matchMedia\" in window;\n\n\t support.pushState = window.history && window.history.pushState;\n\n\t var documentMode = document.documentMode;\n\n\t support.hashChange = (\"onhashchange\" in window) && !(support.browser.msie && (!documentMode || documentMode <= 8)); // old IE detection\n\n\t support.customElements = (\"registerElement\" in window.document);\n\n\t var chrome = support.browser.chrome,\n\t mobileChrome = support.browser.crios,\n\t mozilla = support.browser.mozilla,\n\t safari = support.browser.safari;\n\t support.msPointers = !chrome && window.MSPointerEvent;\n\t support.pointers = !chrome && !mobileChrome && !mozilla && !safari && window.PointerEvent;\n\t support.kineticScrollNeeded = mobileOS && (support.touch || support.msPointers || support.pointers);\n\t })();\n\n\n\t function size(obj) {\n\t var result = 0, key;\n\t for (key in obj) {\n\t if (obj.hasOwnProperty(key) && key != \"toJSON\") { // Ignore fake IE7 toJSON.\n\t result++;\n\t }\n\t }\n\n\t return result;\n\t }\n\n\t function getOffset(element, type, positioned) {\n\t if (!type) {\n\t type = \"offset\";\n\t }\n\n\t var offset = element[type]();\n\t // clone ClientRect object to JS object (jQuery3)\n\t var result = {\n\t top: offset.top,\n\t right: offset.right,\n\t bottom: offset.bottom,\n\t left: offset.left\n\t };\n\n\t // IE10 touch zoom is living in a separate viewport\n\t if (support.browser.msie && (support.pointers || support.msPointers) && !positioned) {\n\t var sign = support.isRtl(element) ? 1 : -1;\n\n\t result.top -= (window.pageYOffset - (document.documentElement.scrollTop));\n\t result.left -= (window.pageXOffset + (sign * document.documentElement.scrollLeft));\n\t }\n\n\t return result;\n\t }\n\n\t var directions = {\n\t left: { reverse: \"right\" },\n\t right: { reverse: \"left\" },\n\t down: { reverse: \"up\" },\n\t up: { reverse: \"down\" },\n\t top: { reverse: \"bottom\" },\n\t bottom: { reverse: \"top\" },\n\t \"in\": { reverse: \"out\" },\n\t out: { reverse: \"in\" }\n\t };\n\n\t function parseEffects(input) {\n\t var effects = {};\n\n\t each((typeof input === \"string\" ? input.split(\" \") : input), function(idx) {\n\t effects[idx] = this;\n\t });\n\n\t return effects;\n\t }\n\n\t function fx(element) {\n\t return new kendo.effects.Element(element);\n\t }\n\n\t var effects = {};\n\n\t $.extend(effects, {\n\t enabled: true,\n\t Element: function(element) {\n\t this.element = $(element);\n\t },\n\n\t promise: function(element, options) {\n\t if (!element.is(\":visible\")) {\n\t element.css({ display: element.data(\"olddisplay\") || \"block\" }).css(\"display\");\n\t }\n\n\t if (options.hide) {\n\t element.data(\"olddisplay\", element.css(\"display\")).hide();\n\t }\n\n\t if (options.init) {\n\t options.init();\n\t }\n\n\t if (options.completeCallback) {\n\t options.completeCallback(element); // call the external complete callback with the element\n\t }\n\n\t element.dequeue();\n\t },\n\n\t disable: function() {\n\t this.enabled = false;\n\t this.promise = this.promiseShim;\n\t },\n\n\t enable: function() {\n\t this.enabled = true;\n\t this.promise = this.animatedPromise;\n\t }\n\t });\n\n\t effects.promiseShim = effects.promise;\n\n\t function prepareAnimationOptions(options, duration, reverse, complete) {\n\t if (typeof options === STRING) {\n\t // options is the list of effect names separated by space e.g. animate(element, \"fadeIn slideDown\")\n\n\t // only callback is provided e.g. animate(element, options, function() {});\n\t if (isFunction(duration)) {\n\t complete = duration;\n\t duration = 400;\n\t reverse = false;\n\t }\n\n\t if (isFunction(reverse)) {\n\t complete = reverse;\n\t reverse = false;\n\t }\n\n\t if (typeof duration === BOOLEAN){\n\t reverse = duration;\n\t duration = 400;\n\t }\n\n\t options = {\n\t effects: options,\n\t duration: duration,\n\t reverse: reverse,\n\t complete: complete\n\t };\n\t }\n\n\t return extend({\n\t //default options\n\t effects: {},\n\t duration: 400, //jQuery default duration\n\t reverse: false,\n\t init: noop,\n\t teardown: noop,\n\t hide: false\n\t }, options, { completeCallback: options.complete, complete: noop }); // Move external complete callback, so deferred.resolve can be always executed.\n\n\t }\n\n\t function animate(element, options, duration, reverse, complete) {\n\t var idx = 0,\n\t length = element.length,\n\t instance;\n\n\t for (; idx < length; idx ++) {\n\t instance = $(element[idx]);\n\t instance.queue(function() {\n\t effects.promise(instance, prepareAnimationOptions(options, duration, reverse, complete));\n\t });\n\t }\n\n\t return element;\n\t }\n\n\t function toggleClass(element, classes, options, add) {\n\t if (classes) {\n\t classes = classes.split(\" \");\n\n\t each(classes, function(idx, value) {\n\t element.toggleClass(value, add);\n\t });\n\t }\n\n\t return element;\n\t }\n\n\t if (!(\"kendoAnimate\" in $.fn)) {\n\t extend($.fn, {\n\t kendoStop: function(clearQueue, gotoEnd) {\n\t return this.stop(clearQueue, gotoEnd);\n\t },\n\n\t kendoAnimate: function(options, duration, reverse, complete) {\n\t return animate(this, options, duration, reverse, complete);\n\t },\n\n\t kendoAddClass: function(classes, options){\n\t return kendo.toggleClass(this, classes, options, true);\n\t },\n\n\t kendoRemoveClass: function(classes, options){\n\t return kendo.toggleClass(this, classes, options, false);\n\t },\n\t kendoToggleClass: function(classes, options, toggle){\n\t return kendo.toggleClass(this, classes, options, toggle);\n\t }\n\t });\n\t }\n\n\t var ampRegExp = /&/g,\n\t ltRegExp = //g;\n\t function htmlEncode(value) {\n\t return (\"\" + value).replace(ampRegExp, \"&\").replace(ltRegExp, \"<\").replace(gtRegExp, \">\").replace(quoteRegExp, \""\").replace(aposRegExp, \"'\");\n\t }\n\n\t function unescape(value) {\n\t var template;\n\n\t try {\n\t template = window.decodeURIComponent(value);\n\t } catch(error) {\n\t // If the string contains Unicode characters\n\t // the decodeURIComponent() will throw an error.\n\t // Therefore: convert to UTF-8 character\n\t template = value.replace(/%u([\\dA-F]{4})|%([\\dA-F]{2})/gi, function(_, m1, m2) {\n\t return String.fromCharCode(parseInt(\"0x\" + (m1 || m2), 16));\n\t });\n\t }\n\n\t return template;\n\t }\n\n\t var eventTarget = function (e) {\n\t return e.target;\n\t };\n\n\t if (support.touch) {\n\n\t eventTarget = function(e) {\n\t var touches = \"originalEvent\" in e ? e.originalEvent.changedTouches : \"changedTouches\" in e ? e.changedTouches : null;\n\n\t return touches ? document.elementFromPoint(touches[0].clientX, touches[0].clientY) : e.target;\n\t };\n\n\t each([\"swipe\", \"swipeLeft\", \"swipeRight\", \"swipeUp\", \"swipeDown\", \"doubleTap\", \"tap\"], function(m, value) {\n\t $.fn[value] = function(callback) {\n\t return this.bind(value, callback);\n\t };\n\t });\n\t }\n\n\t if (support.touch) {\n\t if (!support.mobileOS) {\n\t support.mousedown = \"mousedown touchstart\";\n\t support.mouseup = \"mouseup touchend\";\n\t support.mousemove = \"mousemove touchmove\";\n\t support.mousecancel = \"mouseleave touchcancel\";\n\t support.click = \"click\";\n\t support.resize = \"resize\";\n\t } else {\n\t support.mousedown = \"touchstart\";\n\t support.mouseup = \"touchend\";\n\t support.mousemove = \"touchmove\";\n\t support.mousecancel = \"touchcancel\";\n\t support.click = \"touchend\";\n\t support.resize = \"orientationchange\";\n\t }\n\t } else if (support.pointers) {\n\t support.mousemove = \"pointermove\";\n\t support.mousedown = \"pointerdown\";\n\t support.mouseup = \"pointerup\";\n\t support.mousecancel = \"pointercancel\";\n\t support.click = \"pointerup\";\n\t support.resize = \"orientationchange resize\";\n\t } else if (support.msPointers) {\n\t support.mousemove = \"MSPointerMove\";\n\t support.mousedown = \"MSPointerDown\";\n\t support.mouseup = \"MSPointerUp\";\n\t support.mousecancel = \"MSPointerCancel\";\n\t support.click = \"MSPointerUp\";\n\t support.resize = \"orientationchange resize\";\n\t } else {\n\t support.mousemove = \"mousemove\";\n\t support.mousedown = \"mousedown\";\n\t support.mouseup = \"mouseup\";\n\t support.mousecancel = \"mouseleave\";\n\t support.click = \"click\";\n\t support.resize = \"resize\";\n\t }\n\n\t var wrapExpression = function(members, paramName) {\n\t var result = paramName || \"d\",\n\t index,\n\t idx,\n\t length,\n\t member,\n\t count = 1;\n\n\t for (idx = 0, length = members.length; idx < length; idx++) {\n\t member = members[idx];\n\t if (member !== \"\") {\n\t index = member.indexOf(\"[\");\n\n\t if (index !== 0) {\n\t if (index == -1) {\n\t member = \".\" + member;\n\t } else {\n\t count++;\n\t member = \".\" + member.substring(0, index) + \" || {})\" + member.substring(index);\n\t }\n\t }\n\n\t count++;\n\t result += member + ((idx < length - 1) ? \" || {})\" : \")\");\n\t }\n\t }\n\t return new Array(count).join(\"(\") + result;\n\t },\n\t localUrlRe = /^([a-z]+:)?\\/\\//i;\n\n\t extend(kendo, {\n\t widgets: [],\n\t _widgetRegisteredCallbacks: [],\n\t ui: kendo.ui || {},\n\t fx: kendo.fx || fx,\n\t effects: kendo.effects || effects,\n\t mobile: kendo.mobile || { },\n\t data: kendo.data || {},\n\t dataviz: kendo.dataviz || {},\n\t drawing: kendo.drawing || {},\n\t spreadsheet: { messages: {} },\n\t keys: {\n\t INSERT: 45,\n\t DELETE: 46,\n\t BACKSPACE: 8,\n\t TAB: 9,\n\t ENTER: 13,\n\t ESC: 27,\n\t LEFT: 37,\n\t UP: 38,\n\t RIGHT: 39,\n\t DOWN: 40,\n\t END: 35,\n\t HOME: 36,\n\t SPACEBAR: 32,\n\t PAGEUP: 33,\n\t PAGEDOWN: 34,\n\t F2: 113,\n\t F10: 121,\n\t F12: 123,\n\t NUMPAD_PLUS: 107,\n\t NUMPAD_MINUS: 109,\n\t NUMPAD_DOT: 110\n\t },\n\t support: kendo.support || support,\n\t animate: kendo.animate || animate,\n\t ns: \"\",\n\t attr: function(value) {\n\t return \"data-\" + kendo.ns + value;\n\t },\n\t getShadows: getShadows,\n\t wrap: wrap,\n\t deepExtend: deepExtend,\n\t getComputedStyles: getComputedStyles,\n\t isScrollable: isScrollable,\n\t scrollLeft: scrollLeft,\n\t size: size,\n\t toCamelCase: toCamelCase,\n\t toHyphens: toHyphens,\n\t getOffset: kendo.getOffset || getOffset,\n\t parseEffects: kendo.parseEffects || parseEffects,\n\t toggleClass: kendo.toggleClass || toggleClass,\n\t directions: kendo.directions || directions,\n\t Observable: Observable,\n\t Class: Class,\n\t Template: Template,\n\t template: proxy(Template.compile, Template),\n\t render: proxy(Template.render, Template),\n\t stringify: proxy(JSON.stringify, JSON),\n\t eventTarget: eventTarget,\n\t htmlEncode: htmlEncode,\n\t unescape: unescape,\n\t isLocalUrl: function(url) {\n\t return url && !localUrlRe.test(url);\n\t },\n\n\t expr: function(expression, safe, paramName) {\n\t expression = expression || \"\";\n\n\t if (typeof safe == STRING) {\n\t paramName = safe;\n\t safe = false;\n\t }\n\n\t paramName = paramName || \"d\";\n\n\t if (expression && expression.charAt(0) !== \"[\") {\n\t expression = \".\" + expression;\n\t }\n\n\t if (safe) {\n\t expression = expression.replace(/\"([^.]*)\\.([^\"]*)\"/g,'\"$1_$DOT$_$2\"');\n\t expression = expression.replace(/'([^.]*)\\.([^']*)'/g,\"'$1_$DOT$_$2'\");\n\t expression = wrapExpression(expression.split(\".\"), paramName);\n\t expression = expression.replace(/_\\$DOT\\$_/g, \".\");\n\t } else {\n\t expression = paramName + expression;\n\t }\n\n\t return expression;\n\t },\n\n\t getter: function(expression, safe) {\n\t var key = expression + safe;\n\t return getterCache[key] = getterCache[key] || new Function(\"d\", \"return \" + kendo.expr(expression, safe));\n\t },\n\n\t setter: function(expression) {\n\t return setterCache[expression] = setterCache[expression] || new Function(\"d,value\", kendo.expr(expression) + \"=value\");\n\t },\n\n\t accessor: function(expression) {\n\t return {\n\t get: kendo.getter(expression),\n\t set: kendo.setter(expression)\n\t };\n\t },\n\n\t guid: function() {\n\t var id = \"\", i, random;\n\n\t for (i = 0; i < 32; i++) {\n\t random = math.random() * 16 | 0;\n\n\t if (i == 8 || i == 12 || i == 16 || i == 20) {\n\t id += \"-\";\n\t }\n\t id += (i == 12 ? 4 : (i == 16 ? (random & 3 | 8) : random)).toString(16);\n\t }\n\n\t return id;\n\t },\n\n\t roleSelector: function(role) {\n\t return role.replace(/(\\S+)/g, \"[\" + kendo.attr(\"role\") + \"=$1],\").slice(0, -1);\n\t },\n\n\t directiveSelector: function(directives) {\n\t var selectors = directives.split(\" \");\n\n\t if (selectors) {\n\t for (var i = 0; i < selectors.length; i++) {\n\t if (selectors[i] != \"view\") {\n\t selectors[i] = selectors[i].replace(/(\\w*)(view|bar|strip|over)$/, \"$1-$2\");\n\t }\n\t }\n\t }\n\n\t return selectors.join(\" \").replace(/(\\S+)/g, \"kendo-mobile-$1,\").slice(0, -1);\n\t },\n\n\t triggeredByInput: function(e) {\n\t return (/^(label|input|textarea|select)$/i).test(e.target.tagName);\n\t },\n\n\t onWidgetRegistered: function(callback) {\n\t for (var i = 0, len = kendo.widgets.length; i < len; i++) {\n\t callback(kendo.widgets[i]);\n\t }\n\n\t kendo._widgetRegisteredCallbacks.push(callback);\n\t },\n\n\t logToConsole: function(message, type) {\n\t var console = window.console;\n\n\t if (!kendo.suppressLog && typeof(console) != \"undefined\" && console.log) {\n\t console[type || \"log\"](message);\n\t }\n\t }\n\t });\n\n\t var Widget = Observable.extend( {\n\t init: function(element, options) {\n\t var that = this;\n\n\t that.element = kendo.jQuery(element).handler(that);\n\n\t that.angular(\"init\", options);\n\n\t Observable.fn.init.call(that);\n\n\t var dataSource = options ? options.dataSource : null;\n\t var props;\n\n\t if (options) {\n\t props = (that.componentTypes || {})[(options || {}).componentType];\n\t }\n\n\t if (dataSource) {\n\t // avoid deep cloning the data source\n\t options = extend({}, options, { dataSource: {} });\n\t }\n\n\t options = that.options = extend(true, {}, that.options, that.defaults, props || {}, options);\n\n\t if (dataSource) {\n\t options.dataSource = dataSource;\n\t }\n\n\t if (!that.element.attr(kendo.attr(\"role\"))) {\n\t that.element.attr(kendo.attr(\"role\"), (options.name || \"\").toLowerCase());\n\t }\n\n\t that.element.data(\"kendo\" + options.prefix + options.name, that);\n\n\t that.bind(that.events, options);\n\t },\n\n\t events: [],\n\n\t options: {\n\t prefix: \"\"\n\t },\n\n\t _hasBindingTarget: function() {\n\t return !!this.element[0].kendoBindingTarget;\n\t },\n\n\t _tabindex: function(target) {\n\t target = target || this.wrapper;\n\n\t var element = this.element,\n\t TABINDEX = \"tabindex\",\n\t tabindex = target.attr(TABINDEX) || element.attr(TABINDEX);\n\n\t element.removeAttr(TABINDEX);\n\n\t target.attr(TABINDEX, !isNaN(tabindex) ? tabindex : 0);\n\t },\n\n\t setOptions: function(options) {\n\t this._setEvents(options);\n\t $.extend(this.options, options);\n\t },\n\n\t _setEvents: function(options) {\n\t var that = this,\n\t idx = 0,\n\t length = that.events.length,\n\t e;\n\n\t for (; idx < length; idx ++) {\n\t e = that.events[idx];\n\t if (that.options[e] && options[e]) {\n\t that.unbind(e, that.options[e]);\n\t if (that._events && that._events[e]) {\n\t delete that._events[e];\n\t }\n\t }\n\t }\n\n\t that.bind(that.events, options);\n\t },\n\n\t resize: function(force) {\n\t var size = this.getSize(),\n\t currentSize = this._size;\n\n\t if (force || (size.width > 0 || size.height > 0) && (!currentSize || size.width !== currentSize.width || size.height !== currentSize.height)) {\n\t this._size = size;\n\t this._resize(size, force);\n\t this.trigger(\"resize\", size);\n\t }\n\t },\n\n\t getSize: function() {\n\t return kendo.dimensions(this.element);\n\t },\n\n\t size: function(size) {\n\t if (!size) {\n\t return this.getSize();\n\t } else {\n\t this.setSize(size);\n\t }\n\t },\n\n\t setSize: $.noop,\n\t _resize: $.noop,\n\n\t destroy: function() {\n\t var that = this;\n\n\t that.element.removeData(\"kendo\" + that.options.prefix + that.options.name);\n\t that.element.removeData(\"handler\");\n\t that.unbind();\n\t },\n\t _destroy: function() {\n\t this.destroy();\n\t },\n\t angular: function(){},\n\n\t _muteAngularRebind: function(callback) {\n\t this._muteRebind = true;\n\n\t callback.call(this);\n\n\t this._muteRebind = false;\n\t }\n\t });\n\n\t var DataBoundWidget = Widget.extend({\n\t // Angular consumes these.\n\t dataItems: function() {\n\t return this.dataSource.flatView();\n\t },\n\n\t _angularItems: function(cmd) {\n\t var that = this;\n\t that.angular(cmd, function(){\n\t return {\n\t elements: that.items(),\n\t data: $.map(that.dataItems(), function(dataItem){\n\t return { dataItem: dataItem };\n\t })\n\t };\n\t });\n\t }\n\t });\n\n\t kendo.dimensions = function(element, dimensions) {\n\t var domElement = element[0];\n\n\t if (dimensions) {\n\t element.css(dimensions);\n\t }\n\n\t return { width: domElement.offsetWidth, height: domElement.offsetHeight };\n\t };\n\n\t kendo.notify = noop;\n\n\t var templateRegExp = /template$/i,\n\t jsonRegExp = /^\\s*(?:\\{(?:.|\\r\\n|\\n)*\\}|\\[(?:.|\\r\\n|\\n)*\\])\\s*$/,\n\t jsonFormatRegExp = /^\\{(\\d+)(:[^\\}]+)?\\}|^\\[[A-Za-z_]+\\]$/,\n\t dashRegExp = /([A-Z])/g;\n\n\t function parseOption(element, option) {\n\t var value;\n\n\t if (option.indexOf(\"data\") === 0) {\n\t option = option.substring(4);\n\t option = option.charAt(0).toLowerCase() + option.substring(1);\n\t }\n\n\t option = option.replace(dashRegExp, \"-$1\");\n\t value = element.getAttribute(\"data-\" + kendo.ns + option);\n\n\t if (value === null) {\n\t value = undefined;\n\t } else if (value === \"null\") {\n\t value = null;\n\t } else if (value === \"true\") {\n\t value = true;\n\t } else if (value === \"false\") {\n\t value = false;\n\t } else if (numberRegExp.test(value) && option != \"mask\") {\n\t value = parseFloat(value);\n\t } else if (jsonRegExp.test(value) && !jsonFormatRegExp.test(value)) {\n\t value = new Function(\"return (\" + value + \")\")();\n\t }\n\n\t return value;\n\t }\n\n\t function parseOptions(element, options, source) {\n\t var result = {},\n\t option,\n\t value,\n\t role = element.getAttribute(\"data-\" + kendo.ns + \"role\");\n\n\t for (option in options) {\n\t value = parseOption(element, option);\n\n\t if (value !== undefined) {\n\n\t if (templateRegExp.test(option) && role != \"drawer\") {\n\t if(typeof value === \"string\") {\n\t if($(\"#\" + value).length){\n\t value = kendo.template($(\"#\" + value).html());\n\t }else if (source){\n\t value = kendo.template(source[value]);\n\t }\n\t } else {\n\t value = element.getAttribute(option);\n\t }\n\t }\n\n\t result[option] = value;\n\t }\n\t }\n\n\t return result;\n\t }\n\n\t kendo.initWidget = function(element, options, roles) {\n\t var result,\n\t option,\n\t widget,\n\t idx,\n\t length,\n\t role,\n\t value,\n\t dataSource,\n\t fullPath,\n\t widgetKeyRegExp;\n\n\t // Preserve backwards compatibility with (element, options, namespace) signature, where namespace was kendo.ui\n\t if (!roles) {\n\t roles = kendo.ui.roles;\n\t } else if (roles.roles) {\n\t roles = roles.roles;\n\t }\n\n\t element = element.nodeType ? element : element[0];\n\n\t role = element.getAttribute(\"data-\" + kendo.ns + \"role\");\n\n\t if (!role) {\n\t return;\n\t }\n\n\t fullPath = role.indexOf(\".\") === -1;\n\n\t // look for any widget that may be already instantiated based on this role.\n\t // The prefix used is unknown, hence the regexp\n\t //\n\n\t if (fullPath) {\n\t widget = roles[role];\n\t } else { // full namespace path - like kendo.ui.Widget\n\t widget = kendo.getter(role)(window);\n\t }\n\n\t var data = $(element).data(),\n\t widgetKey = widget ? \"kendo\" + widget.fn.options.prefix + widget.fn.options.name : \"\";\n\n\t if (fullPath) {\n\t widgetKeyRegExp = new RegExp(\"^kendo.*\" + role + \"$\", \"i\");\n\t } else { // full namespace path - like kendo.ui.Widget\n\t widgetKeyRegExp = new RegExp(\"^\" + widgetKey + \"$\", \"i\");\n\t }\n\n\t for(var key in data) {\n\t if (key.match(widgetKeyRegExp)) {\n\t // we have detected a widget of the same kind - save its reference, we will set its options\n\t if (key === widgetKey) {\n\t result = data[key];\n\t } else {\n\t return data[key];\n\t }\n\t }\n\t }\n\n\t if (!widget) {\n\t return;\n\t }\n\n\t dataSource = parseOption(element, \"dataSource\");\n\n\t options = $.extend({}, parseOptions(element, $.extend({}, widget.fn.options, widget.fn.defaults) ), options);\n\n\t if (dataSource) {\n\t if (typeof dataSource === STRING) {\n\t options.dataSource = kendo.getter(dataSource)(window);\n\t } else {\n\t options.dataSource = dataSource;\n\t }\n\t }\n\n\t for (idx = 0, length = widget.fn.events.length; idx < length; idx++) {\n\t option = widget.fn.events[idx];\n\n\t value = parseOption(element, option);\n\n\t if (value !== undefined) {\n\t options[option] = kendo.getter(value)(window);\n\t }\n\t }\n\n\t if (!result) {\n\t result = new widget(element, options);\n\t } else if (!$.isEmptyObject(options)) {\n\t result.setOptions(options);\n\t }\n\n\t return result;\n\t };\n\n\t kendo.rolesFromNamespaces = function(namespaces) {\n\t var roles = [],\n\t idx,\n\t length;\n\n\t if (!namespaces[0]) {\n\t namespaces = [kendo.ui, kendo.dataviz.ui];\n\t }\n\n\t for (idx = 0, length = namespaces.length; idx < length; idx ++) {\n\t roles[idx] = namespaces[idx].roles;\n\t }\n\n\t return extend.apply(null, [{}].concat(roles.reverse()));\n\t };\n\n\t kendo.init = function(element) {\n\t var roles = kendo.rolesFromNamespaces(slice.call(arguments, 1));\n\n\t $(element).find(\"[data-\" + kendo.ns + \"role]\").addBack().each(function(){\n\t kendo.initWidget(this, {}, roles);\n\t });\n\t };\n\n\t kendo.destroy = function(element) {\n\t $(element).find(\"[data-\" + kendo.ns + \"role]\").addBack().each(function(){\n\t var data = $(this).data();\n\n\t for (var key in data) {\n\t if (key.indexOf(\"kendo\") === 0 && typeof data[key].destroy === FUNCTION) {\n\t data[key].destroy();\n\t }\n\t }\n\t });\n\t };\n\n\t function containmentComparer(a, b) {\n\t return $.contains(a, b) ? -1 : 1;\n\t }\n\n\t function resizableWidget() {\n\t var widget = $(this);\n\t return ($.inArray(widget.attr(\"data-\" + kendo.ns + \"role\"), [\"slider\", \"rangeslider\", \"breadcrumb\"]) > -1) || widget.is(\":visible\");\n\t }\n\n\t kendo.resize = function(element, force) {\n\t var widgets = $(element).find(\"[data-\" + kendo.ns + \"role]\").addBack().filter(resizableWidget);\n\n\t if (!widgets.length) {\n\t return;\n\t }\n\n\t // sort widgets based on their parent-child relation\n\t var widgetsArray = $.makeArray(widgets);\n\t widgetsArray.sort(containmentComparer);\n\n\t // resize widgets\n\t $.each(widgetsArray, function () {\n\t var widget = kendo.widgetInstance($(this));\n\t if (widget) {\n\t widget.resize(force);\n\t }\n\t });\n\t };\n\n\t kendo.parseOptions = parseOptions;\n\n\t extend(kendo.ui, {\n\t Widget: Widget,\n\t DataBoundWidget: DataBoundWidget,\n\t roles: {},\n\t progress: function(container, toggle, options) {\n\t var mask = container.find(\".k-loading-mask\"),\n\t support = kendo.support,\n\t browser = support.browser,\n\t isRtl, leftRight, webkitCorrection, containerScrollLeft, cssClass;\n\n\t options = $.extend({}, {\n\t width: \"100%\",\n\t height: \"100%\",\n\t top: container.scrollTop(),\n\t opacity: false\n\t }, options);\n\n\t cssClass = options.opacity ? 'k-loading-mask k-opaque' : 'k-loading-mask';\n\n\t if (toggle) {\n\t if (!mask.length) {\n\t isRtl = support.isRtl(container);\n\t leftRight = isRtl ? \"right\" : \"left\";\n\t containerScrollLeft = container.scrollLeft();\n\t webkitCorrection = browser.webkit ? (!isRtl ? 0 : container[0].scrollWidth - container.width() - 2 * containerScrollLeft) : 0;\n\n\t mask = $(kendo.format(\"
{1}
\", cssClass, kendo.ui.progress.messages.loading))\n\t .width(options.width).height(options.height)\n\t .css(\"top\", options.top)\n\t .css(leftRight, Math.abs(containerScrollLeft) + webkitCorrection)\n\t .prependTo(container);\n\t }\n\t } else if (mask) {\n\t mask.remove();\n\t }\n\t },\n\t plugin: function(widget, register, prefix) {\n\t var name = widget.fn.options.name,\n\t getter;\n\n\t register = register || kendo.ui;\n\t prefix = prefix || \"\";\n\n\t register[name] = widget;\n\n\t register.roles[name.toLowerCase()] = widget;\n\n\t getter = \"getKendo\" + prefix + name;\n\t name = \"kendo\" + prefix + name;\n\n\t var widgetEntry = { name: name, widget: widget, prefix: prefix || \"\" };\n\t kendo.widgets.push(widgetEntry);\n\n\t for (var i = 0, len = kendo._widgetRegisteredCallbacks.length; i < len; i++) {\n\t kendo._widgetRegisteredCallbacks[i](widgetEntry);\n\t }\n\n\t $.fn[name] = function(options) {\n\t var value = this,\n\t args;\n\n\t if (typeof options === STRING) {\n\t args = slice.call(arguments, 1);\n\n\t this.each(function(){\n\t var widget = $.data(this, name),\n\t method,\n\t result;\n\n\t if (!widget) {\n\t throw new Error(kendo.format(\"Cannot call method '{0}' of {1} before it is initialized\", options, name));\n\t }\n\n\t method = widget[options];\n\n\t if (typeof method !== FUNCTION) {\n\t throw new Error(kendo.format(\"Cannot find method '{0}' of {1}\", options, name));\n\t }\n\n\t result = method.apply(widget, args);\n\n\t if (result !== undefined) {\n\t value = result;\n\t return false;\n\t }\n\t });\n\t } else {\n\t this.each(function() {\n\t return new widget(this, options);\n\t });\n\t }\n\n\t return value;\n\t };\n\n\t $.fn[name].widget = widget;\n\n\t $.fn[getter] = function() {\n\t return this.data(name);\n\t };\n\t }\n\t });\n\n\t kendo.ui.progress.messages = {\n\t loading: \"Loading...\"\n\t };\n\n\t var ContainerNullObject = { bind: function () { return this; }, nullObject: true, options: {} };\n\n\t var MobileWidget = Widget.extend({\n\t init: function(element, options) {\n\t Widget.fn.init.call(this, element, options);\n\t this.element.autoApplyNS();\n\t this.wrapper = this.element;\n\t this.element.addClass(\"km-widget\");\n\t },\n\n\t destroy: function() {\n\t Widget.fn.destroy.call(this);\n\t this.element.kendoDestroy();\n\t },\n\n\t options: {\n\t prefix: \"Mobile\"\n\t },\n\n\t events: [],\n\n\t view: function() {\n\t var viewElement = this.element.closest(kendo.roleSelector(\"view splitview modalview drawer\"));\n\t return kendo.widgetInstance(viewElement, kendo.mobile.ui) || ContainerNullObject;\n\t },\n\n\t viewHasNativeScrolling: function() {\n\t var view = this.view();\n\t return view && view.options.useNativeScrolling;\n\t },\n\n\t container: function() {\n\t var element = this.element.closest(kendo.roleSelector(\"view layout modalview drawer splitview\"));\n\t return kendo.widgetInstance(element.eq(0), kendo.mobile.ui) || ContainerNullObject;\n\t }\n\t });\n\n\t extend(kendo.mobile, {\n\t init: function(element) {\n\t kendo.init(element, kendo.mobile.ui, kendo.ui, kendo.dataviz.ui);\n\t },\n\n\t appLevelNativeScrolling: function() {\n\t return kendo.mobile.application && kendo.mobile.application.options && kendo.mobile.application.options.useNativeScrolling;\n\t },\n\n\t roles: {},\n\n\t ui: {\n\t Widget: MobileWidget,\n\t DataBoundWidget: DataBoundWidget.extend(MobileWidget.prototype),\n\t roles: {},\n\t plugin: function(widget) {\n\t kendo.ui.plugin(widget, kendo.mobile.ui, \"Mobile\");\n\t }\n\t }\n\t });\n\n\t deepExtend(kendo.dataviz, {\n\t init: function(element) {\n\t kendo.init(element, kendo.dataviz.ui);\n\t },\n\t ui: {\n\t roles: {},\n\t themes: {},\n\t views: [],\n\t plugin: function(widget) {\n\t kendo.ui.plugin(widget, kendo.dataviz.ui);\n\t }\n\t },\n\t roles: {}\n\t });\n\n\t kendo.touchScroller = function(elements, options) {\n\t // return the first touch scroller\n\t if (!options){ options = {}; }\n\n\t options.useNative = true;\n\n\t return $(elements).map(function(idx, element) {\n\t element = $(element);\n\t if (support.kineticScrollNeeded && kendo.mobile.ui.Scroller && !element.data(\"kendoMobileScroller\")) {\n\t element.kendoMobileScroller(options);\n\t return element.data(\"kendoMobileScroller\");\n\t } else {\n\t return false;\n\t }\n\t })[0];\n\t };\n\n\t kendo.preventDefault = function(e) {\n\t e.preventDefault();\n\t };\n\n\t kendo.widgetInstance = function(element, suites) {\n\t var role = element.data(kendo.ns + \"role\"),\n\t widgets = [], i, length,\n\t elementData = element.data(\"kendoView\");\n\n\t if (role) {\n\t // HACK!!! mobile view scroller widgets are instantiated on data-role=\"content\" elements. We need to discover them when resizing.\n\t if (role === \"content\") {\n\t role = \"scroller\";\n\t }\n\n\t // kendoEditorToolbar is not a public plugin, thus it does not exist in kendo.ui.roles.\n\t // Therefore, this is needed in order to be resized when placed in Kendo Window.\n\t if (role === \"editortoolbar\") {\n\t var editorToolbar = element.data(\"kendoEditorToolbar\");\n\t if (editorToolbar) {\n\t return editorToolbar;\n\t }\n\t }\n\n\t // kendo.View is not a ui plugin\n\n\t if (role === \"view\" && elementData) {\n\t return elementData;\n\t }\n\n\t if (suites) {\n\t if (suites[0]) {\n\t for (i = 0, length = suites.length; i < length; i ++) {\n\t widgets.push(suites[i].roles[role]);\n\t }\n\t } else {\n\t widgets.push(suites.roles[role]);\n\t }\n\t }\n\t else {\n\t widgets = [ kendo.ui.roles[role], kendo.dataviz.ui.roles[role], kendo.mobile.ui.roles[role] ];\n\t }\n\n\t if (role.indexOf(\".\") >= 0) {\n\t widgets = [ kendo.getter(role)(window) ];\n\t }\n\n\t for (i = 0, length = widgets.length; i < length; i ++) {\n\t var widget = widgets[i];\n\t if (widget) {\n\t var instance = element.data(\"kendo\" + widget.fn.options.prefix + widget.fn.options.name);\n\t if (instance) {\n\t return instance;\n\t }\n\t }\n\t }\n\t }\n\t };\n\n\t kendo.onResize = function(callback) {\n\t var handler = callback;\n\t if (support.mobileOS.android) {\n\t handler = function() { setTimeout(callback, 600); };\n\t }\n\n\t $(window).on(support.resize, handler);\n\t return handler;\n\t };\n\n\t kendo.unbindResize = function(callback) {\n\t $(window).off(support.resize, callback);\n\t };\n\n\t kendo.attrValue = function(element, key) {\n\t return element.data(kendo.ns + key);\n\t };\n\n\t kendo.days = {\n\t Sunday: 0,\n\t Monday: 1,\n\t Tuesday: 2,\n\t Wednesday: 3,\n\t Thursday: 4,\n\t Friday: 5,\n\t Saturday: 6\n\t };\n\n\t function focusable(element, isTabIndexNotNaN) {\n\t var nodeName = element.nodeName.toLowerCase();\n\n\t return (/input|select|textarea|button|object/.test(nodeName) ?\n\t !element.disabled :\n\t \"a\" === nodeName ?\n\t element.href || isTabIndexNotNaN :\n\t isTabIndexNotNaN\n\t ) &&\n\t visible(element);\n\t }\n\n\t function visible(element) {\n\t return $.expr.pseudos.visible(element) &&\n\t !$(element).parents().addBack().filter(function() {\n\t return $.css(this,\"visibility\") === \"hidden\";\n\t }).length;\n\t }\n\n\t $.extend($.expr.pseudos, {\n\t kendoFocusable: function(element) {\n\t var idx = $.attr(element, \"tabindex\");\n\t return focusable(element, !isNaN(idx) && idx > -1);\n\t }\n\t });\n\n\t var MOUSE_EVENTS = [\"mousedown\", \"mousemove\", \"mouseenter\", \"mouseleave\", \"mouseover\", \"mouseout\", \"mouseup\", \"click\"];\n\t var EXCLUDE_BUST_CLICK_SELECTOR = \"label, input, [data-rel=external]\";\n\n\t var MouseEventNormalizer = {\n\t setupMouseMute: function() {\n\t var idx = 0,\n\t length = MOUSE_EVENTS.length,\n\t element = document.documentElement;\n\n\t if (MouseEventNormalizer.mouseTrap || !support.eventCapture) {\n\t return;\n\t }\n\n\t MouseEventNormalizer.mouseTrap = true;\n\n\t MouseEventNormalizer.bustClick = false;\n\t MouseEventNormalizer.captureMouse = false;\n\n\t var handler = function(e) {\n\t if (MouseEventNormalizer.captureMouse) {\n\t if (e.type === \"click\") {\n\t if (MouseEventNormalizer.bustClick && !$(e.target).is(EXCLUDE_BUST_CLICK_SELECTOR)) {\n\t e.preventDefault();\n\t e.stopPropagation();\n\t }\n\t } else {\n\t e.stopPropagation();\n\t }\n\t }\n\t };\n\n\t for (; idx < length; idx++) {\n\t element.addEventListener(MOUSE_EVENTS[idx], handler, true);\n\t }\n\t },\n\n\t muteMouse: function(e) {\n\t MouseEventNormalizer.captureMouse = true;\n\t if (e.data.bustClick) {\n\t MouseEventNormalizer.bustClick = true;\n\t }\n\t clearTimeout(MouseEventNormalizer.mouseTrapTimeoutID);\n\t },\n\n\t unMuteMouse: function() {\n\t clearTimeout(MouseEventNormalizer.mouseTrapTimeoutID);\n\t MouseEventNormalizer.mouseTrapTimeoutID = setTimeout(function() {\n\t MouseEventNormalizer.captureMouse = false;\n\t MouseEventNormalizer.bustClick = false;\n\t }, 400);\n\t }\n\t };\n\n\t var eventMap = {\n\t down: \"touchstart mousedown\",\n\t move: \"mousemove touchmove\",\n\t up: \"mouseup touchend touchcancel\",\n\t cancel: \"mouseleave touchcancel\"\n\t };\n\n\t if (support.touch && (support.mobileOS.ios || support.mobileOS.android)) {\n\t eventMap = {\n\t down: \"touchstart\",\n\t move: \"touchmove\",\n\t up: \"touchend touchcancel\",\n\t cancel: \"touchcancel\"\n\t };\n\t } else if (support.pointers) {\n\t eventMap = {\n\t down: \"pointerdown\",\n\t move: \"pointermove\",\n\t up: \"pointerup\",\n\t cancel: \"pointercancel pointerleave\"\n\t };\n\t } else if (support.msPointers) {\n\t eventMap = {\n\t down: \"MSPointerDown\",\n\t move: \"MSPointerMove\",\n\t up: \"MSPointerUp\",\n\t cancel: \"MSPointerCancel MSPointerLeave\"\n\t };\n\t }\n\n\t if (support.msPointers && !(\"onmspointerenter\" in window)) { // IE10\n\t // Create MSPointerEnter/MSPointerLeave events using mouseover/out and event-time checks\n\t $.each({\n\t MSPointerEnter: \"MSPointerOver\",\n\t MSPointerLeave: \"MSPointerOut\"\n\t }, function( orig, fix ) {\n\t $.event.special[ orig ] = {\n\t delegateType: fix,\n\t bindType: fix,\n\n\t handle: function( event ) {\n\t var ret,\n\t target = this,\n\t related = event.relatedTarget,\n\t handleObj = event.handleObj;\n\n\t // For mousenter/leave call the handler if related is outside the target.\n\t // NB: No relatedTarget if the mouse left/entered the browser window\n\t if ( !related || (related !== target && !$.contains( target, related )) ) {\n\t event.type = handleObj.origType;\n\t ret = handleObj.handler.apply( this, arguments );\n\t event.type = fix;\n\t }\n\t return ret;\n\t }\n\t };\n\t });\n\t }\n\n\n\t var getEventMap = function(e) { return (eventMap[e] || e); },\n\t eventRegEx = /([^ ]+)/g;\n\n\t kendo.applyEventMap = function(events, ns) {\n\t events = events.replace(eventRegEx, getEventMap);\n\n\t if (ns) {\n\t events = events.replace(eventRegEx, \"$1.\" + ns);\n\t }\n\n\t return events;\n\t };\n\n\t kendo.keyDownHandler = function(e, widget) {\n\t var events = widget._events.kendoKeydown;\n\n\t if(!events){\n\t return true;\n\t }\n\n\t events = events.slice();\n\t e.sender = widget;\n\t e.preventKendoKeydown = false;\n\t for (var idx = 0, length = events.length; idx < length; idx++) {\n\t events[idx].call(widget, e);\n\t }\n\n\t return !e.preventKendoKeydown;\n\t };\n\n\t var on = $.fn.on;\n\n\t function kendoJQuery(selector, context) {\n\t return new kendoJQuery.fn.init(selector, context);\n\t }\n\n\t noDepricateExtend(true, kendoJQuery, $);\n\n\t kendoJQuery.fn = kendoJQuery.prototype = new $();\n\n\t kendoJQuery.fn.constructor = kendoJQuery;\n\n\t kendoJQuery.fn.init = function(selector, context) {\n\t if (context && context instanceof $ && !(context instanceof kendoJQuery)) {\n\t context = kendoJQuery(context);\n\t }\n\n\t return $.fn.init.call(this, selector, context, rootjQuery);\n\t };\n\n\t kendoJQuery.fn.init.prototype = kendoJQuery.fn;\n\n\t var rootjQuery = kendoJQuery(document);\n\n\t extend(kendoJQuery.fn, {\n\t handler: function(handler) {\n\t this.data(\"handler\", handler);\n\t return this;\n\t },\n\n\t autoApplyNS: function(ns) {\n\t this.data(\"kendoNS\", ns || kendo.guid());\n\t return this;\n\t },\n\n\t on: function() {\n\t var that = this,\n\t ns = that.data(\"kendoNS\");\n\n\t // support for event map signature\n\t if (arguments.length === 1) {\n\t return on.call(that, arguments[0]);\n\t }\n\n\t var context = that,\n\t args = slice.call(arguments);\n\n\t if (typeof args[args.length -1] === UNDEFINED) {\n\t args.pop();\n\t }\n\n\t var callback = args[args.length - 1],\n\t events = kendo.applyEventMap(args[0], ns);\n\n\t // setup mouse trap\n\t if (support.mouseAndTouchPresent && events.search(/mouse|click/) > -1 && this[0] !== document.documentElement) {\n\t MouseEventNormalizer.setupMouseMute();\n\n\t var selector = args.length === 2 ? null : args[1],\n\t bustClick = events.indexOf(\"click\") > -1 && events.indexOf(\"touchend\") > -1;\n\n\t on.call(this,\n\t {\n\t touchstart: MouseEventNormalizer.muteMouse,\n\t touchend: MouseEventNormalizer.unMuteMouse\n\t },\n\t selector,\n\t {\n\t bustClick: bustClick\n\t });\n\t }\n\n\t if(arguments[0].indexOf(\"keydown\") !== -1 && args[1] && args[1].options){\n\t args[0] = events;\n\t var widget = args[1];\n\t var keyDownCallBack = args[args.length - 1];\n\t args[args.length - 1]= function(e){\n\t if(kendo.keyDownHandler(e, widget)){\n\t return keyDownCallBack.apply(this, [e]);\n\t }\n\t };\n\t on.apply(that, args);\n\t return that;\n\t }\n\n\t if (typeof callback === STRING) {\n\t context = that.data(\"handler\");\n\t callback = context[callback];\n\n\t args[args.length - 1] = function(e) {\n\t callback.call(context, e);\n\t };\n\t }\n\n\t args[0] = events;\n\n\t on.apply(that, args);\n\n\t return that;\n\t },\n\n\t kendoDestroy: function(ns) {\n\t ns = ns || this.data(\"kendoNS\");\n\n\t if (ns) {\n\t this.off(\".\" + ns);\n\t }\n\n\t return this;\n\t }\n\t });\n\n\t kendo.jQuery = kendoJQuery;\n\t kendo.eventMap = eventMap;\n\n\t kendo.timezone = (function(){\n\t var months = { Jan: 0, Feb: 1, Mar: 2, Apr: 3, May: 4, Jun: 5, Jul: 6, Aug: 7, Sep: 8, Oct: 9, Nov: 10, Dec: 11 };\n\t var days = { Sun: 0, Mon: 1, Tue: 2, Wed: 3, Thu: 4, Fri: 5, Sat: 6 };\n\n\t function ruleToDate(year, rule) {\n\t var date;\n\t var targetDay;\n\t var ourDay;\n\t var month = rule[3];\n\t var on = rule[4];\n\t var time = rule[5];\n\t var cache = rule[8];\n\n\t if (!cache) {\n\t rule[8] = cache = {};\n\t }\n\n\t if (cache[year]) {\n\t return cache[year];\n\t }\n\n\t if (!isNaN(on)) {\n\t date = new Date(Date.UTC(year, months[month], on, time[0], time[1], time[2], 0));\n\t } else if (on.indexOf(\"last\") === 0) {\n\t date = new Date(Date.UTC(year, months[month] + 1, 1, time[0] - 24, time[1], time[2], 0));\n\n\t targetDay = days[on.substr(4, 3)];\n\t ourDay = date.getUTCDay();\n\n\t date.setUTCDate(date.getUTCDate() + targetDay - ourDay - (targetDay > ourDay ? 7 : 0));\n\t } else if (on.indexOf(\">=\") >= 0) {\n\t date = new Date(Date.UTC(year, months[month], on.substr(5), time[0], time[1], time[2], 0));\n\n\t targetDay = days[on.substr(0, 3)];\n\t ourDay = date.getUTCDay();\n\n\t date.setUTCDate(date.getUTCDate() + targetDay - ourDay + (targetDay < ourDay ? 7 : 0));\n\t } else if (on.indexOf(\"<=\") >= 0) {\n\t date = new Date(Date.UTC(year, months[month], on.substr(5), time[0], time[1], time[2], 0));\n\n\t targetDay = days[on.substr(0, 3)];\n\t ourDay = date.getUTCDay();\n\n\t date.setUTCDate(date.getUTCDate() + targetDay - ourDay - (targetDay > ourDay ? 7 : 0));\n\t }\n\n\t return cache[year] = date;\n\t }\n\n\t function findRule(utcTime, rules, zone) {\n\t rules = rules[zone];\n\n\t if (!rules) {\n\t var time = zone.split(\":\");\n\t var offset = 0;\n\n\t if (time.length > 1) {\n\t offset = time[0] * 60 + Number(time[1]);\n\t }\n\n\t return [-1000000, 'max', '-', 'Jan', 1, [0, 0, 0], offset, '-'];\n\t }\n\n\t var year = new Date(utcTime).getUTCFullYear();\n\n\t rules = jQuery.grep(rules, function(rule) {\n\t var from = rule[0];\n\t var to = rule[1];\n\n\t return from <= year && (to >= year || (from == year && to == \"only\") || to == \"max\");\n\t });\n\n\t rules.push(utcTime);\n\n\t rules.sort(function(a, b) {\n\t if (typeof a != \"number\") {\n\t a = Number(ruleToDate(year, a));\n\t }\n\n\t if (typeof b != \"number\") {\n\t b = Number(ruleToDate(year, b));\n\t }\n\n\t return a - b;\n\t });\n\n\t var rule = rules[jQuery.inArray(utcTime, rules) - 1] || rules[rules.length - 1];\n\n\t return isNaN(rule) ? rule : null;\n\t }\n\n\t function findZone(utcTime, zones, timezone) {\n\t var zoneRules = zones[timezone];\n\n\t if (typeof zoneRules === \"string\") {\n\t zoneRules = zones[zoneRules];\n\t }\n\n\t if (!zoneRules) {\n\t throw new Error('Timezone \"' + timezone + '\" is either incorrect, or kendo.timezones.min.js is not included.');\n\t }\n\n\t for (var idx = zoneRules.length - 1; idx >= 0; idx--) {\n\t var until = zoneRules[idx][3];\n\n\t if (until && utcTime > until) {\n\t break;\n\t }\n\t }\n\n\t var zone = zoneRules[idx + 1];\n\n\t if (!zone) {\n\t throw new Error('Timezone \"' + timezone + '\" not found on ' + utcTime + \".\");\n\t }\n\n\t return zone;\n\t }\n\n\t function zoneAndRule(utcTime, zones, rules, timezone) {\n\t if (typeof utcTime != NUMBER) {\n\t utcTime = Date.UTC(utcTime.getFullYear(), utcTime.getMonth(),\n\t utcTime.getDate(), utcTime.getHours(), utcTime.getMinutes(),\n\t utcTime.getSeconds(), utcTime.getMilliseconds());\n\t }\n\n\t var zone = findZone(utcTime, zones, timezone);\n\n\t return {\n\t zone: zone,\n\t rule: findRule(utcTime, rules, zone[1])\n\t };\n\t }\n\n\t function offset(utcTime, timezone) {\n\t if (timezone == \"Etc/UTC\" || timezone == \"Etc/GMT\") {\n\t return 0;\n\t }\n\n\t var info = zoneAndRule(utcTime, this.zones, this.rules, timezone);\n\t var zone = info.zone;\n\t var rule = info.rule;\n\n\t return kendo.parseFloat(rule? zone[0] - rule[6] : zone[0]);\n\t }\n\n\t function abbr(utcTime, timezone) {\n\t var info = zoneAndRule(utcTime, this.zones, this.rules, timezone);\n\t var zone = info.zone;\n\t var rule = info.rule;\n\n\t var base = zone[2];\n\n\t if (base.indexOf(\"/\") >= 0) {\n\t return base.split(\"/\")[rule && +rule[6] ? 1 : 0];\n\t } else if (base.indexOf(\"%s\") >= 0) {\n\t return base.replace(\"%s\", (!rule || rule[7] == \"-\") ? '' : rule[7]);\n\t }\n\n\t return base;\n\t }\n\n\t function convert(date, fromOffset, toOffset) {\n\t var tempToOffset = toOffset;\n\t var diff;\n\n\t if (typeof fromOffset == STRING) {\n\t fromOffset = this.offset(date, fromOffset);\n\t }\n\n\t if (typeof toOffset == STRING) {\n\t toOffset = this.offset(date, toOffset);\n\t }\n\n\t var fromLocalOffset = date.getTimezoneOffset();\n\n\t date = new Date(date.getTime() + (fromOffset - toOffset) * 60000);\n\n\t var toLocalOffset = date.getTimezoneOffset();\n\n\t if (typeof tempToOffset == STRING) {\n\t tempToOffset = this.offset(date, tempToOffset);\n\t }\n\n\t diff = (toLocalOffset - fromLocalOffset) + (toOffset - tempToOffset);\n\n\t return new Date(date.getTime() + diff * 60000);\n\t }\n\n\t function apply(date, timezone) {\n\t return this.convert(date, date.getTimezoneOffset(), timezone);\n\t }\n\n\t function remove(date, timezone) {\n\t return this.convert(date, timezone, date.getTimezoneOffset());\n\t }\n\n\t function toLocalDate(time) {\n\t return this.apply(new Date(time), \"Etc/UTC\");\n\t }\n\n\t return {\n\t zones: {},\n\t rules: {},\n\t offset: offset,\n\t convert: convert,\n\t apply: apply,\n\t remove: remove,\n\t abbr: abbr,\n\t toLocalDate: toLocalDate\n\t };\n\t })();\n\n\t kendo.date = (function(){\n\t var MS_PER_MINUTE = 60000,\n\t MS_PER_DAY = 86400000;\n\n\t function adjustDST(date, hours) {\n\t if (hours === 0 && date.getHours() === 23) {\n\t date.setHours(date.getHours() + 2);\n\t return true;\n\t }\n\n\t return false;\n\t }\n\n\t function setDayOfWeek(date, day, dir) {\n\t var hours = date.getHours();\n\n\t dir = dir || 1;\n\t day = ((day - date.getDay()) + (7 * dir)) % 7;\n\n\t date.setDate(date.getDate() + day);\n\t adjustDST(date, hours);\n\t }\n\n\t function dayOfWeek(date, day, dir) {\n\t date = new Date(date);\n\t setDayOfWeek(date, day, dir);\n\t return date;\n\t }\n\n\t function firstDayOfMonth(date) {\n\t return new Date(\n\t date.getFullYear(),\n\t date.getMonth(),\n\t 1\n\t );\n\t }\n\n\t function lastDayOfMonth(date) {\n\t var last = new Date(date.getFullYear(), date.getMonth() + 1, 0),\n\t first = firstDayOfMonth(date),\n\t timeOffset = Math.abs(last.getTimezoneOffset() - first.getTimezoneOffset());\n\n\t if (timeOffset) {\n\t last.setHours(first.getHours() + (timeOffset / 60));\n\t }\n\n\t return last;\n\t }\n\n\t function moveDateToWeekStart(date, weekStartDay) {\n\t if (weekStartDay !== 1) {\n\t return addDays(dayOfWeek(date, weekStartDay, -1), 4);\n\t }\n\n\t return addDays(date, (4 - (date.getDay() || 7)));\n\t }\n\n\t function calcWeekInYear(date, weekStartDay) {\n\t var firstWeekInYear = new Date(date.getFullYear(), 0, 1, -6);\n\n\t var newDate = moveDateToWeekStart(date, weekStartDay);\n\n\t var diffInMS = newDate.getTime() - firstWeekInYear.getTime();\n\n\t var days = Math.floor(diffInMS / MS_PER_DAY);\n\n\t return 1 + Math.floor(days / 7);\n\t }\n\n\t function weekInYear(date, weekStartDay) {\n\t if(weekStartDay === undefined) {\n\t weekStartDay = kendo.culture().calendar.firstDay;\n\t }\n\n\t var prevWeekDate = addDays(date, -7);\n\t var nextWeekDate = addDays(date, 7);\n\n\t var weekNumber = calcWeekInYear(date, weekStartDay);\n\n\t if (weekNumber === 0) {\n\t return calcWeekInYear(prevWeekDate, weekStartDay) + 1;\n\t }\n\n\t if (weekNumber === 53 && calcWeekInYear(nextWeekDate, weekStartDay) > 1) {\n\t return 1;\n\t }\n\n\t return weekNumber;\n\t }\n\n\t function getDate(date) {\n\t date = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0);\n\t adjustDST(date, 0);\n\t return date;\n\t }\n\n\t function toUtcTime(date) {\n\t return Date.UTC(date.getFullYear(), date.getMonth(),\n\t date.getDate(), date.getHours(), date.getMinutes(),\n\t date.getSeconds(), date.getMilliseconds());\n\t }\n\n\t function getMilliseconds(date) {\n\t return toInvariantTime(date).getTime() - getDate(toInvariantTime(date));\n\t }\n\n\t function isInTimeRange(value, min, max) {\n\t var msMin = getMilliseconds(min),\n\t msMax = getMilliseconds(max),\n\t msValue;\n\n\t if (!value || msMin == msMax) {\n\t return true;\n\t }\n\n\t if (min >= max) {\n\t max += MS_PER_DAY;\n\t }\n\n\t msValue = getMilliseconds(value);\n\n\t if (msMin > msValue) {\n\t msValue += MS_PER_DAY;\n\t }\n\n\t if (msMax < msMin) {\n\t msMax += MS_PER_DAY;\n\t }\n\n\t return msValue >= msMin && msValue <= msMax;\n\t }\n\n\t function isInDateRange(value, min, max) {\n\t var msMin = min.getTime(),\n\t msMax = max.getTime(),\n\t msValue;\n\n\t if (msMin >= msMax) {\n\t msMax += MS_PER_DAY;\n\t }\n\n\t msValue = value.getTime();\n\n\t return msValue >= msMin && msValue <= msMax;\n\t }\n\n\t function addDays(date, offset) {\n\t var hours = date.getHours();\n\t date = new Date(date);\n\n\t setTime(date, offset * MS_PER_DAY);\n\t adjustDST(date, hours);\n\t return date;\n\t }\n\n\t function setTime(date, milliseconds, ignoreDST) {\n\t var offset = date.getTimezoneOffset();\n\t var difference;\n\n\t date.setTime(date.getTime() + milliseconds);\n\n\t if (!ignoreDST) {\n\t difference = date.getTimezoneOffset() - offset;\n\t date.setTime(date.getTime() + difference * MS_PER_MINUTE);\n\t }\n\t }\n\n\t function setHours(date, time) {\n\t date = new Date(date.getFullYear(), date.getMonth(), date.getDate(), time.getHours(), time.getMinutes(), time.getSeconds(), time.getMilliseconds());\n\t adjustDST(date, time.getHours());\n\t return date;\n\t }\n\n\t function today() {\n\t return getDate(new Date());\n\t }\n\n\t function isToday(date) {\n\t return getDate(date).getTime() == today().getTime();\n\t }\n\n\t function toInvariantTime(date) {\n\t var staticDate = new Date(1980, 1, 1, 0, 0, 0);\n\n\t if (date) {\n\t staticDate.setHours(date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n\t }\n\n\t return staticDate;\n\t }\n\n\t return {\n\t adjustDST: adjustDST,\n\t dayOfWeek: dayOfWeek,\n\t setDayOfWeek: setDayOfWeek,\n\t getDate: getDate,\n\t isInDateRange: isInDateRange,\n\t isInTimeRange: isInTimeRange,\n\t isToday: isToday,\n\t nextDay: function(date) {\n\t return addDays(date, 1);\n\t },\n\t previousDay: function(date) {\n\t return addDays(date, -1);\n\t },\n\t toUtcTime: toUtcTime,\n\t MS_PER_DAY: MS_PER_DAY,\n\t MS_PER_HOUR: 60 * MS_PER_MINUTE,\n\t MS_PER_MINUTE: MS_PER_MINUTE,\n\t setTime: setTime,\n\t setHours: setHours,\n\t addDays: addDays,\n\t today: today,\n\t toInvariantTime: toInvariantTime,\n\t firstDayOfMonth: firstDayOfMonth,\n\t lastDayOfMonth: lastDayOfMonth,\n\t weekInYear: weekInYear,\n\t getMilliseconds: getMilliseconds\n\t };\n\t })();\n\n\n\t kendo.stripWhitespace = function(element) {\n\t if (document.createNodeIterator) {\n\t var iterator = document.createNodeIterator(element, NodeFilter.SHOW_TEXT, function(node) {\n\t return node.parentNode == element ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;\n\t }, false);\n\n\t while (iterator.nextNode()) {\n\t if (iterator.referenceNode && !iterator.referenceNode.textContent.trim()) {\n\t iterator.referenceNode.parentNode.removeChild(iterator.referenceNode);\n\t }\n\t }\n\t } else { // IE7/8 support\n\t for (var i = 0; i < element.childNodes.length; i++) {\n\t var child = element.childNodes[i];\n\n\t if (child.nodeType == 3 && !/\\S/.test(child.nodeValue)) {\n\t element.removeChild(child);\n\t i--;\n\t }\n\n\t if (child.nodeType == 1) {\n\t kendo.stripWhitespace(child);\n\t }\n\t }\n\t }\n\t };\n\n\t var animationFrame = window.requestAnimationFrame ||\n\t window.webkitRequestAnimationFrame ||\n\t window.mozRequestAnimationFrame ||\n\t window.oRequestAnimationFrame ||\n\t window.msRequestAnimationFrame ||\n\t function(callback){ setTimeout(callback, 1000 / 60); };\n\n\t kendo.animationFrame = function(callback) {\n\t animationFrame.call(window, callback);\n\t };\n\n\t var animationQueue = [];\n\n\t kendo.queueAnimation = function(callback) {\n\t animationQueue[animationQueue.length] = callback;\n\t if (animationQueue.length === 1) {\n\t kendo.runNextAnimation();\n\t }\n\t };\n\n\t kendo.runNextAnimation = function() {\n\t kendo.animationFrame(function() {\n\t if (animationQueue[0]) {\n\t animationQueue.shift()();\n\t if (animationQueue[0]) {\n\t kendo.runNextAnimation();\n\t }\n\t }\n\t });\n\t };\n\n\t kendo.parseQueryStringParams = function(url) {\n\t var queryString = url.split('?')[1] || \"\",\n\t params = {},\n\t paramParts = queryString.split(/&|=/),\n\t length = paramParts.length,\n\t idx = 0;\n\n\t for (; idx < length; idx += 2) {\n\t if(paramParts[idx] !== \"\") {\n\t params[decodeURIComponent(paramParts[idx])] = decodeURIComponent(paramParts[idx + 1]);\n\t }\n\t }\n\n\t return params;\n\t };\n\n\t kendo.elementUnderCursor = function(e) {\n\t if (typeof e.x.client != \"undefined\") {\n\t return document.elementFromPoint(e.x.client, e.y.client);\n\t }\n\t };\n\n\t kendo.wheelDeltaY = function(jQueryEvent) {\n\t var e = jQueryEvent.originalEvent,\n\t deltaY = e.wheelDeltaY,\n\t delta;\n\n\t if (e.wheelDelta) { // Webkit and IE\n\t if (deltaY === undefined || deltaY) { // IE does not have deltaY, thus always scroll (horizontal scrolling is treated as vertical)\n\t delta = e.wheelDelta;\n\t }\n\t } else if (e.detail && e.axis === e.VERTICAL_AXIS) { // Firefox and Opera\n\t delta = (-e.detail) * 10;\n\t }\n\n\t return delta;\n\t };\n\n\t kendo.throttle = function(fn, delay) {\n\t var timeout;\n\t var lastExecTime = 0;\n\n\t if (!delay || delay <= 0) {\n\t return fn;\n\t }\n\n\t var throttled = function() {\n\t var that = this;\n\t var elapsed = +new Date() - lastExecTime;\n\t var args = arguments;\n\n\t function exec() {\n\t fn.apply(that, args);\n\t lastExecTime = +new Date();\n\t }\n\n\t // first execution\n\t if (!lastExecTime) {\n\t return exec();\n\t }\n\n\t if (timeout) {\n\t clearTimeout(timeout);\n\t }\n\n\t if (elapsed > delay) {\n\t exec();\n\t } else {\n\t timeout = setTimeout(exec, delay - elapsed);\n\t }\n\t };\n\n\t throttled.cancel = function() {\n\t clearTimeout(timeout);\n\t };\n\n\t return throttled;\n\t };\n\n\n\t kendo.caret = function (element, start, end) {\n\t var rangeElement;\n\t var isPosition = start !== undefined;\n\n\t if (end === undefined) {\n\t end = start;\n\t }\n\n\t if (element[0]) {\n\t element = element[0];\n\t }\n\n\t if (isPosition && element.disabled) {\n\t return;\n\t }\n\n\t try {\n\t if (element.selectionStart !== undefined) {\n\t if (isPosition) {\n\t element.focus();\n\t var mobile = support.mobileOS;\n\t if(mobile.wp || mobile.android) {// without the timeout the caret is at the end of the input\n\t setTimeout(function() { element.setSelectionRange(start, end); }, 0);\n\t }\n\t else {\n\t element.setSelectionRange(start, end);\n\t }\n\t } else {\n\t start = [element.selectionStart, element.selectionEnd];\n\t }\n\t } else if (document.selection) {\n\t if ($(element).is(\":visible\")) {\n\t element.focus();\n\t }\n\n\t rangeElement = element.createTextRange();\n\n\t if (isPosition) {\n\t rangeElement.collapse(true);\n\t rangeElement.moveStart(\"character\", start);\n\t rangeElement.moveEnd(\"character\", end - start);\n\t rangeElement.select();\n\t } else {\n\t var rangeDuplicated = rangeElement.duplicate(),\n\t selectionStart, selectionEnd;\n\n\t rangeElement.moveToBookmark(document.selection.createRange().getBookmark());\n\t rangeDuplicated.setEndPoint('EndToStart', rangeElement);\n\t selectionStart = rangeDuplicated.text.length;\n\t selectionEnd = selectionStart + rangeElement.text.length;\n\n\t start = [selectionStart, selectionEnd];\n\t }\n\t }\n\t } catch(e) {\n\t /* element is not focused or it is not in the DOM */\n\t start = [];\n\t }\n\n\t return start;\n\t };\n\n\t kendo.compileMobileDirective = function(element, scope) {\n\t var angular = window.angular;\n\n\t element.attr(\"data-\" + kendo.ns + \"role\", element[0].tagName.toLowerCase().replace('kendo-mobile-', '').replace('-', ''));\n\n\t angular.element(element).injector().invoke([\"$compile\", function($compile) {\n\t $compile(element)(scope);\n\n\t if (!/^\\$(digest|apply)$/.test(scope.$$phase)) {\n\t scope.$digest();\n\t }\n\t }]);\n\n\t return kendo.widgetInstance(element, kendo.mobile.ui);\n\t };\n\n\t kendo.antiForgeryTokens = function() {\n\t var tokens = { },\n\t csrf_token = $(\"meta[name=csrf-token],meta[name=_csrf]\").attr(\"content\"),\n\t csrf_param = $(\"meta[name=csrf-param],meta[name=_csrf_header]\").attr(\"content\");\n\n\t $(\"input[name^='__RequestVerificationToken']\").each(function() {\n\t tokens[this.name] = this.value;\n\t });\n\n\t if (csrf_param !== undefined && csrf_token !== undefined) {\n\t tokens[csrf_param] = csrf_token;\n\t }\n\n\t return tokens;\n\t };\n\n\t kendo.cycleForm = function(form) {\n\t var firstElement = form.find(\"input, .k-widget\").first();\n\t var lastElement = form.find(\"button, .k-button\").last();\n\n\t function focus(el) {\n\t var widget = kendo.widgetInstance(el);\n\n\t if (widget && widget.focus) {\n\t widget.focus();\n\t } else {\n\t el.focus();\n\t }\n\t }\n\n\t lastElement.on(\"keydown\", function(e) {\n\t if (e.keyCode == kendo.keys.TAB && !e.shiftKey) {\n\t e.preventDefault();\n\t focus(firstElement);\n\t }\n\t });\n\n\t firstElement.on(\"keydown\", function(e) {\n\t if (e.keyCode == kendo.keys.TAB && e.shiftKey) {\n\t e.preventDefault();\n\t focus(lastElement);\n\t }\n\t });\n\t };\n\n\t kendo.focusElement = function(element) {\n\t var scrollTopPositions = [];\n\t var scrollableParents = element.parentsUntil(\"body\")\n\t .filter(function(index, element) {\n\t var computedStyle = kendo.getComputedStyles(element, [\"overflow\"]);\n\t return computedStyle.overflow !== \"visible\";\n\t })\n\t .add(window);\n\n\t scrollableParents.each(function(index, parent) {\n\t scrollTopPositions[index] = $(parent).scrollTop();\n\t });\n\n\t try {\n\t //The setActive method does not cause the document to scroll to the active object in the current page\n\t element[0].setActive();\n\t } catch (e) {\n\t element[0].focus();\n\t }\n\n\t scrollableParents.each(function(index, parent) {\n\t $(parent).scrollTop(scrollTopPositions[index]);\n\t });\n\t };\n\n\t kendo.focusNextElement = function () {\n\t if (document.activeElement) {\n\t var focussable = $(\":kendoFocusable\");\n\t var index = focussable.index(document.activeElement);\n\n\t if(index > -1) {\n\t var nextElement = focussable[index + 1] || focussable[0];\n\t nextElement.focus();\n\t }\n\t }\n\t };\n\n\t kendo.trim = function(value) {\n\t if(!!value) {\n\t return value.toString().trim();\n\t } else {\n\t return \"\";\n\t }\n\t };\n\n\t kendo.getWidgetFocusableElement = function(element) {\n\t var nextFocusable = element.closest(\":kendoFocusable\"),\n\t widgetInstance = kendo.widgetInstance(element),\n\t target;\n\n\t if (nextFocusable.length) {\n\t target = nextFocusable;\n\t } else if (widgetInstance) {\n\t target = widgetInstance.options.name === 'Editor' ?\n\t $(widgetInstance.body) :\n\t widgetInstance.wrapper.find(\":kendoFocusable\").first();\n\t } else {\n\t target = element;\n\t }\n\n\t return target;\n\t };\n\n\t kendo.addAttribute = function(element, attribute, value) {\n\t var current = element.attr(attribute) || \"\";\n\n\t if (current.indexOf(value) < 0) {\n\t element.attr(attribute, (current + \" \" + value).trim());\n\t }\n\t };\n\n\t kendo.removeAttribute = function(element, attribute, value) {\n\t var current = element.attr(attribute) || \"\";\n\n\t element.attr(attribute, current.replace(value, \"\").trim());\n\t };\n\n\t kendo.toggleAttribute = function(element, attribute, value) {\n\t var current = element.attr(attribute) || \"\";\n\n\t if (current.indexOf(value) < 0) {\n\t kendo.addAttribute(element, attribute, value);\n\t } else {\n\t kendo.removeAttribute(element, attribute, value);\n\t }\n\t };\n\n\t kendo.matchesMedia = function(mediaQuery) {\n\t var media = kendo._bootstrapToMedia(mediaQuery) || mediaQuery;\n\t return support.matchMedia && window.matchMedia(media).matches;\n\t };\n\n\t kendo._bootstrapToMedia = function(bootstrapMedia) {\n\t return {\n\t \"xs\": \"(max-width: 576px)\",\n\t \"sm\": \"(min-width: 576px)\",\n\t \"md\": \"(min-width: 768px)\",\n\t \"lg\": \"(min-width: 992px)\",\n\t \"xl\": \"(min-width: 1200px)\"\n\t }[bootstrapMedia];\n\t };\n\n\t kendo.fileGroupMap = {\n\t audio: [\".aif\", \".iff\", \".m3u\", \".m4a\", \".mid\", \".mp3\", \".mpa\", \".wav\", \".wma\", \".ogg\", \".wav\", \".wma\", \".wpl\"],\n\t video: [\".3g2\", \".3gp\", \".avi\", \".asf\", \".flv\", \".m4u\", \".rm\", \".h264\", \".m4v\", \".mkv\", \".mov\", \".mp4\", \".mpg\",\n\t \".rm\", \".swf\", \".vob\", \".wmv\"],\n\t image: [\".ai\", \".dds\", \".heic\", \".jpe\", \"jfif\", \".jif\", \".jp2\", \".jps\", \".eps\", \".bmp\", \".gif\", \".jpeg\",\n\t \".jpg\", \".png\", \".ps\", \".psd\", \".svg\", \".svgz\", \".tif\", \".tiff\"],\n\t txt: [\".doc\", \".docx\", \".log\", \".pages\", \".tex\", \".wpd\", \".wps\", \".odt\", \".rtf\", \".text\", \".txt\", \".wks\"],\n\t presentation: [\".key\", \".odp\", \".pps\", \".ppt\", \".pptx\"],\n\t data: [\".xlr\", \".xls\", \".xlsx\"],\n\t programming: [\".tmp\", \".bak\", \".msi\", \".cab\", \".cpl\", \".cur\", \".dll\", \".dmp\", \".drv\", \".icns\", \".ico\", \".link\",\n\t \".sys\", \".cfg\", \".ini\", \".asp\", \".aspx\", \".cer\", \".csr\", \".css\", \".dcr\", \".htm\", \".html\", \".js\",\n\t \".php\", \".rss\", \".xhtml\"],\n\t pdf: [\".pdf\"],\n\t config: [\".apk\", \".app\", \".bat\", \".cgi\", \".com\", \".exe\", \".gadget\", \".jar\", \".wsf\"],\n\t zip: [\".7z\", \".cbr\", \".gz\", \".sitx\", \".arj\", \".deb\", \".pkg\", \".rar\", \".rpm\", \".tar.gz\", \".z\", \".zip\", \".zipx\"],\n\t \"disc-image\": [\".dmg\", \".iso\", \".toast\", \".vcd\", \".bin\", \".cue\", \".mdf\"]\n\t };\n\n\t kendo.getFileGroup = function(extension, withPrefix) {\n\t var fileTypeMap = kendo.fileGroupMap;\n\t var groups = Object.keys(fileTypeMap);\n\t var type = \"file\";\n\n\t if (extension === undefined || !extension.length) {\n\t return type;\n\t }\n\n\t for (var i = 0; i < groups.length; i += 1) {\n\t var extensions = fileTypeMap[groups[i]];\n\n\t if (extensions.indexOf(extension.toLowerCase()) > -1) {\n\t return withPrefix ? \"file-\" + groups[i] : groups[i];\n\t }\n\t }\n\n\t return type;\n\t };\n\n\t kendo.getFileSizeMessage = function(size) {\n\t var sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];\n\n\t if (size === 0) {\n\t return '0 Byte';\n\t }\n\n\t var i = parseInt(Math.floor(Math.log(size) / Math.log(1024)), 10);\n\t return Math.round(size / Math.pow(1024, i), 2) + ' ' + sizes[i];\n\t };\n\n\t kendo.selectorFromClasses = function(classes) {\n\t return \".\"+classes.split(\" \").join(\".\");\n\t };\n\n\t // kendo.saveAs -----------------------------------------------\n\t (function() {\n\t function postToProxy(dataURI, fileName, proxyURL, proxyTarget) {\n\t var form = $(\"
\").attr({\n\t action: proxyURL,\n\t method: \"POST\",\n\t target: proxyTarget\n\t });\n\n\t var data = kendo.antiForgeryTokens();\n\t data.fileName = fileName;\n\n\t var parts = dataURI.split(\";base64,\");\n\t data.contentType = parts[0].replace(\"data:\", \"\");\n\t data.base64 = parts[1];\n\n\t for (var name in data) {\n\t if (data.hasOwnProperty(name)) {\n\t $('').attr({\n\t value: data[name],\n\t name: name,\n\t type: \"hidden\"\n\t }).appendTo(form);\n\t }\n\t }\n\n\t form.appendTo(\"body\").submit().remove();\n\t }\n\n\t var fileSaver = document.createElement(\"a\");\n\t var downloadAttribute = \"download\" in fileSaver && !kendo.support.browser.edge;\n\n\t function saveAsBlob(dataURI, fileName) {\n\t var blob = dataURI; // could be a Blob object\n\n\t if (typeof dataURI == \"string\") {\n\t var parts = dataURI.split(\";base64,\");\n\t var contentType = parts[0];\n\t var base64 = atob(parts[1]);\n\t var array = new Uint8Array(base64.length);\n\n\t for (var idx = 0; idx < base64.length; idx++) {\n\t array[idx] = base64.charCodeAt(idx);\n\t }\n\t blob = new Blob([array.buffer], { type: contentType });\n\t }\n\n\t navigator.msSaveBlob(blob, fileName);\n\t }\n\n\t function saveAsDataURI(dataURI, fileName) {\n\t if (window.Blob && dataURI instanceof Blob) {\n\t dataURI = URL.createObjectURL(dataURI);\n\t }\n\n\t fileSaver.download = fileName;\n\t fileSaver.href = dataURI;\n\n\t var e = document.createEvent(\"MouseEvents\");\n\t e.initMouseEvent(\"click\", true, false, window,\n\t 0, 0, 0, 0, 0, false, false, false, false, 0, null);\n\n\t fileSaver.dispatchEvent(e);\n\t setTimeout(function(){\n\t URL.revokeObjectURL(dataURI);\n\t });\n\t }\n\n\t kendo.saveAs = function(options) {\n\t var save = postToProxy;\n\n\t if (!options.forceProxy) {\n\t if (downloadAttribute) {\n\t save = saveAsDataURI;\n\t } else if (navigator.msSaveBlob) {\n\t save = saveAsBlob;\n\t }\n\t }\n\n\t save(options.dataURI, options.fileName, options.proxyURL, options.proxyTarget);\n\t };\n\t })();\n\n\t // kendo proxySetters\n\t kendo.proxyModelSetters = function proxyModelSetters(data) {\n\t var observable = {};\n\n\t Object.keys(data || {}).forEach(function(property) {\n\t Object.defineProperty(observable, property, {\n\t get: function() {\n\t return data[property];\n\t },\n\t set: function(value) {\n\t data[property] = value;\n\t data.dirty = true;\n\t }\n\t });\n\t });\n\n\t return observable;\n\t };\n\n\n\t // Kendo defaults\n\t (function() {\n\n\t kendo.defaults = kendo.defaults || {};\n\t kendo.setDefaults = function(key, value) {\n\t var path = key.split(\".\");\n\t var curr = kendo.defaults;\n\n\t key = path.pop();\n\n\t path.forEach(function(part) {\n\t if (curr[part] === undefined) {\n\t curr[part] = {};\n\t }\n\n\t curr = curr[part];\n\t });\n\n\t if (value.constructor === Object) {\n\t curr[key] = deepExtend({}, curr[key], value);\n\t } else {\n\t curr[key] = value;\n\t }\n\t };\n\n\t })();\n\n\t})(jQuery, window);\n\n\treturn window.kendo;\n\n\t}, __webpack_require__(3));\n\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1017)))\n\n/***/ })\n\n/******/ });","module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(1064);\n\n\n/***/ }),\n\n/***/ 3:\n/***/ (function(module, exports) {\n\n\tmodule.exports = function() { throw new Error(\"define cannot be used indirect\"); };\r\n\n\n/***/ }),\n\n/***/ 1018:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./kendo.core\");\n\n/***/ }),\n\n/***/ 1064:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function(f, define){\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(1018), __webpack_require__(1065), __webpack_require__(1066) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (f), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t})(function(){\n\n\tvar __meta__ = { // jshint ignore:line\n\t id: \"data\",\n\t name: \"Data source\",\n\t category: \"framework\",\n\t description: \"Powerful component for using local and remote data.Fully supports CRUD, Sorting, Paging, Filtering, Grouping, and Aggregates.\",\n\t depends: [ \"core\" ],\n\t features: [ {\n\t id: \"data-odata\",\n\t name: \"OData\",\n\t description: \"Support for accessing Open Data Protocol (OData) services.\",\n\t depends: [ \"data.odata\" ]\n\t }, {\n\t id: \"data-signalr\",\n\t name: \"SignalR\",\n\t description: \"Support for binding to SignalR hubs.\",\n\t depends: [ \"data.signalr\" ]\n\t }, {\n\t id: \"data-XML\",\n\t name: \"XML\",\n\t description: \"Support for binding to XML.\",\n\t depends: [ \"data.xml\" ]\n\t }]\n\t};\n\n\t/*jshint eqnull: true, loopfunc: true, evil: true */\n\t(function($, undefined) {\n\t var extend = $.extend,\n\t proxy = $.proxy,\n\t isPlainObject = $.isPlainObject,\n\t isEmptyObject = $.isEmptyObject,\n\t isArray = $.isArray,\n\t grep = $.grep,\n\t ajax = $.ajax,\n\t map,\n\t each = $.each,\n\t noop = $.noop,\n\t kendo = window.kendo,\n\t isFunction = kendo.isFunction,\n\t Observable = kendo.Observable,\n\t Class = kendo.Class,\n\t STRING = \"string\",\n\t FUNCTION = \"function\",\n\t ASCENDING = \"asc\",\n\t CREATE = \"create\",\n\t READ = \"read\",\n\t UPDATE = \"update\",\n\t DESTROY = \"destroy\",\n\t CHANGE = \"change\",\n\t SYNC = \"sync\",\n\t GET = \"get\",\n\t ERROR = \"error\",\n\t REQUESTSTART = \"requestStart\",\n\t PROGRESS = \"progress\",\n\t REQUESTEND = \"requestEnd\",\n\t crud = [CREATE, READ, UPDATE, DESTROY],\n\t identity = function(o) { return o; },\n\t getter = kendo.getter,\n\t stringify = kendo.stringify,\n\t math = Math,\n\t push = [].push,\n\t join = [].join,\n\t pop = [].pop,\n\t splice = [].splice,\n\t shift = [].shift,\n\t slice = [].slice,\n\t unshift = [].unshift,\n\t toString = {}.toString,\n\t stableSort = kendo.support.stableSort,\n\t dateRegExp = /^\\/Date\\((.*?)\\)\\/$/;\n\n\t var ObservableArray = Observable.extend({\n\t init: function(array, type) {\n\t var that = this;\n\n\t that.type = type || ObservableObject;\n\n\t Observable.fn.init.call(that);\n\n\t that.length = array.length;\n\n\t that.wrapAll(array, that);\n\t },\n\n\t at: function(index) {\n\t return this[index];\n\t },\n\n\t toJSON: function(serializeFunctions) {\n\t var idx, length = this.length, value, json = new Array(length);\n\n\t for (idx = 0; idx < length; idx++){\n\t value = this[idx];\n\n\t if (value instanceof ObservableObject) {\n\t value = value.toJSON(serializeFunctions);\n\t }\n\n\t json[idx] = value;\n\t }\n\n\t return json;\n\t },\n\n\t parent: noop,\n\n\t wrapAll: function(source, target) {\n\t var that = this,\n\t idx,\n\t length,\n\t parent = function() {\n\t return that;\n\t };\n\n\t target = target || [];\n\n\t for (idx = 0, length = source.length; idx < length; idx++) {\n\t target[idx] = that.wrap(source[idx], parent);\n\t }\n\n\t return target;\n\t },\n\n\t wrap: function(object, parent) {\n\t var that = this,\n\t observable;\n\n\t if (object !== null && toString.call(object) === \"[object Object]\") {\n\t observable = object instanceof that.type || object instanceof Model;\n\n\t if (!observable) {\n\t object = object instanceof ObservableObject ? object.toJSON() : object;\n\t object = new that.type(object);\n\t }\n\n\t object.parent = parent;\n\n\t object.bind(CHANGE, function(e) {\n\t that.trigger(CHANGE, {\n\t field: e.field,\n\t node: e.node,\n\t index: e.index,\n\t items: e.items || [this],\n\t action: e.node ? (e.action || \"itemloaded\") : \"itemchange\"\n\t });\n\t });\n\t }\n\n\t return object;\n\t },\n\n\t push: function() {\n\t var index = this.length,\n\t items = this.wrapAll(arguments),\n\t result;\n\n\t result = push.apply(this, items);\n\n\t if (!this.omitChangeEvent) {\n\t this.trigger(CHANGE, {\n\t action: \"add\",\n\t index: index,\n\t items: items\n\t });\n\t }\n\n\t return result;\n\t },\n\n\t slice: slice,\n\n\t sort: [].sort,\n\n\t join: join,\n\n\t pop: function() {\n\t var length = this.length, result = pop.apply(this);\n\n\t if (length) {\n\t this.trigger(CHANGE, {\n\t action: \"remove\",\n\t index: length - 1,\n\t items:[result]\n\t });\n\t }\n\n\t return result;\n\t },\n\n\t splice: function(index, howMany, item) {\n\t var items = this.wrapAll(slice.call(arguments, 2)),\n\t result, i, len;\n\n\t result = splice.apply(this, [index, howMany].concat(items));\n\n\t if (result.length) {\n\t this.trigger(CHANGE, {\n\t action: \"remove\",\n\t index: index,\n\t items: result\n\t });\n\n\t for (i = 0, len = result.length; i < len; i++) {\n\t if (result[i] && result[i].children) {\n\t result[i].unbind(CHANGE);\n\t }\n\t }\n\t }\n\n\t if (item) {\n\t this.trigger(CHANGE, {\n\t action: \"add\",\n\t index: index,\n\t items: items\n\t });\n\t }\n\t return result;\n\t },\n\n\t shift: function() {\n\t var length = this.length, result = shift.apply(this);\n\n\t if (length) {\n\t this.trigger(CHANGE, {\n\t action: \"remove\",\n\t index: 0,\n\t items:[result]\n\t });\n\t }\n\n\t return result;\n\t },\n\n\t unshift: function() {\n\t var items = this.wrapAll(arguments),\n\t result;\n\n\t result = unshift.apply(this, items);\n\n\t this.trigger(CHANGE, {\n\t action: \"add\",\n\t index: 0,\n\t items: items\n\t });\n\n\t return result;\n\t },\n\n\t indexOf: function(item) {\n\t var that = this,\n\t idx,\n\t length;\n\n\t for (idx = 0, length = that.length; idx < length; idx++) {\n\t if (that[idx] === item) {\n\t return idx;\n\t }\n\t }\n\t return -1;\n\t },\n\n\t forEach: function(callback, thisArg) {\n\t var idx = 0;\n\t var length = this.length;\n\t var context = thisArg || window;\n\n\t for (; idx < length; idx++) {\n\t callback.call(context, this[idx], idx, this);\n\t }\n\t },\n\n\t map: function(callback, thisArg) {\n\t var idx = 0;\n\t var result = [];\n\t var length = this.length;\n\t var context = thisArg || window;\n\n\t for (; idx < length; idx++) {\n\t result[idx] = callback.call(context, this[idx], idx, this);\n\t }\n\n\t return result;\n\t },\n\n\t reduce: function(callback) {\n\t var idx = 0,\n\t result,\n\t length = this.length;\n\n\t if (arguments.length == 2) {\n\t result = arguments[1];\n\t } else if (idx < length) {\n\t result = this[idx++];\n\t }\n\n\t for (; idx < length; idx++) {\n\t result = callback(result, this[idx], idx, this);\n\t }\n\n\t return result;\n\t },\n\n\t reduceRight: function(callback) {\n\t var idx = this.length - 1,\n\t result;\n\n\t if (arguments.length == 2) {\n\t result = arguments[1];\n\t } else if (idx > 0) {\n\t result = this[idx--];\n\t }\n\n\t for (; idx >= 0; idx--) {\n\t result = callback(result, this[idx], idx, this);\n\t }\n\n\t return result;\n\t },\n\n\t filter: function(callback, thisArg) {\n\t var idx = 0;\n\t var result = [];\n\t var item;\n\t var length = this.length;\n\t var context = thisArg || window;\n\n\t for (; idx < length; idx++) {\n\t item = this[idx];\n\t if (callback.call(context, item, idx, this)) {\n\t result[result.length] = item;\n\t }\n\t }\n\n\t return result;\n\t },\n\n\t find: function(callback, thisArg) {\n\t var idx = 0;\n\t var item;\n\t var length = this.length;\n\t var context = thisArg || window;\n\n\t for (; idx < length; idx++) {\n\t item = this[idx];\n\t if (callback.call(context, item, idx, this)) {\n\t return item;\n\t }\n\t }\n\t },\n\n\t every: function(callback, thisArg) {\n\t var idx = 0;\n\t var item;\n\t var length = this.length;\n\t var context = thisArg || window;\n\n\t for (; idx < length; idx++) {\n\t item = this[idx];\n\t if (!callback.call(context, item, idx, this)) {\n\t return false;\n\t }\n\t }\n\n\t return true;\n\t },\n\n\t some: function(callback, thisArg) {\n\t var idx = 0;\n\t var item;\n\t var length = this.length;\n\t var context = thisArg || window;\n\n\t for (; idx < length; idx++) {\n\t item = this[idx];\n\t if (callback.call(context, item, idx, this)) {\n\t return true;\n\t }\n\t }\n\n\t return false;\n\t },\n\n\t // non-standard collection methods\n\t remove: function(item) {\n\t var idx = this.indexOf(item);\n\n\t if (idx !== -1) {\n\t this.splice(idx, 1);\n\t }\n\t },\n\n\t empty: function() {\n\t this.splice(0, this.length);\n\t }\n\t });\n\n\t // Polyfill for Symbol.iterator\n\t if (typeof Symbol !== \"undefined\" && Symbol.iterator && !ObservableArray.prototype[Symbol.iterator]) {\n\t ObservableArray.prototype[Symbol.iterator] = [][Symbol.iterator];\n\t }\n\n\t var LazyObservableArray = ObservableArray.extend({\n\t init: function (data, type, events) {\n\t Observable.fn.init.call(this);\n\n\t this.type = type || ObservableObject;\n\n\t if (events) {\n\t this._events = events;\n\t }\n\n\t for (var idx = 0; idx < data.length; idx++) {\n\t this[idx] = data[idx];\n\t }\n\n\t this.length = idx;\n\t this._parent = proxy(function() { return this; }, this);\n\t },\n\t at: function(index) {\n\t var item = this[index];\n\n\t if (!(item instanceof this.type)) {\n\t item = this[index] = this.wrap(item, this._parent);\n\t } else {\n\t item.parent = this._parent;\n\t }\n\n\t return item;\n\t }\n\t });\n\n\t function eventHandler(context, type, field, prefix) {\n\t return function(e) {\n\t var event = {}, key;\n\n\t for (key in e) {\n\t event[key] = e[key];\n\t }\n\n\t if (prefix) {\n\t event.field = field + \".\" + e.field;\n\t } else {\n\t event.field = field;\n\t }\n\n\t if (type == CHANGE && context._notifyChange) {\n\t context._notifyChange(event);\n\t }\n\n\t context.trigger(type, event);\n\t };\n\t }\n\n\t var ObservableObject = Observable.extend({\n\t init: function(value) {\n\t var that = this,\n\t member,\n\t field,\n\t parent = function() {\n\t return that;\n\t };\n\n\t Observable.fn.init.call(this);\n\n\t this._handlers = {};\n\n\t for (field in value) {\n\t member = value[field];\n\n\t if (typeof member === \"object\" && member && !member.getTime && field.charAt(0) != \"_\") {\n\t member = that.wrap(member, field, parent);\n\t }\n\n\t that[field] = member;\n\t }\n\n\t that.uid = kendo.guid();\n\t },\n\n\t shouldSerialize: function(field, serializeFunctions) {\n\t return this.hasOwnProperty(field) && field !== \"_handlers\" && field !== \"_events\" && ((serializeFunctions && serializeFunctions[field]) || typeof this[field] !== FUNCTION) && field !== \"uid\";\n\t },\n\n\t forEach: function(f) {\n\t for (var i in this) {\n\t if (this.shouldSerialize(i)) {\n\t f(this[i], i);\n\t }\n\t }\n\t },\n\n\t toJSON: function (serializeFunctions) {\n\t var result = {}, value, field;\n\n\t for (field in this) {\n\t if (this.shouldSerialize(field, serializeFunctions)) {\n\t value = this[field];\n\n\t if (value instanceof ObservableObject || value instanceof ObservableArray) {\n\t value = value.toJSON(serializeFunctions);\n\t }\n\n\t result[field] = value;\n\t }\n\t }\n\n\t return result;\n\t },\n\n\t get: function(field) {\n\t var that = this, result;\n\n\t that.trigger(GET, { field: field });\n\n\t if (field === \"this\") {\n\t result = that;\n\t } else {\n\t result = kendo.getter(field, true)(that);\n\t }\n\n\t return result;\n\t },\n\n\t _set: function(field, value) {\n\t var that = this;\n\t var composite = field.indexOf(\".\") >= 0;\n\n\t if (composite) {\n\t var paths = field.split(\".\"),\n\t path = \"\";\n\n\t while (paths.length > 1) {\n\t path += paths.shift();\n\t var obj = kendo.getter(path, true)(that);\n\t if (obj instanceof ObservableObject) {\n\t obj.set(paths.join(\".\"), value);\n\t return composite;\n\t }\n\t path += \".\";\n\t }\n\t }\n\n\t kendo.setter(field)(that, value);\n\n\t return composite;\n\t },\n\n\t set: function(field, value) {\n\t var that = this,\n\t isSetPrevented = false,\n\t composite = field.indexOf(\".\") >= 0,\n\t current = kendo.getter(field, true)(that);\n\n\t if (current !== value) {\n\t if (current instanceof Observable && this._handlers[field]) {\n\t if (this._handlers[field].get) {\n\t current.unbind(GET, this._handlers[field].get);\n\t }\n\t current.unbind(CHANGE, this._handlers[field].change);\n\t }\n\n\t isSetPrevented = that.trigger(\"set\", { field: field, value: value });\n\n\t if (!isSetPrevented) {\n\t if (!composite) {\n\t value = that.wrap(value, field, function() { return that; });\n\t }\n\t if (!that._set(field, value) || field.indexOf(\"(\") >= 0 || field.indexOf(\"[\") >= 0) {\n\t that.trigger(CHANGE, { field: field });\n\t }\n\t }\n\t }\n\n\t return isSetPrevented;\n\t },\n\n\t parent: noop,\n\n\t wrap: function(object, field, parent) {\n\t var that = this;\n\t var get;\n\t var change;\n\t var type = toString.call(object);\n\n\t if (object != null && (type === \"[object Object]\" || type === \"[object Array]\")) {\n\t var isObservableArray = object instanceof ObservableArray;\n\t var isDataSource = object instanceof DataSource;\n\n\t if (type === \"[object Object]\" && !isDataSource && !isObservableArray) {\n\t if (!(object instanceof ObservableObject)) {\n\t object = new ObservableObject(object);\n\t }\n\n\t get = eventHandler(that, GET, field, true);\n\t object.bind(GET, get);\n\t change = eventHandler(that, CHANGE, field, true);\n\t object.bind(CHANGE, change);\n\n\t that._handlers[field] = { get: get, change: change };\n\t } else if (type === \"[object Array]\" || isObservableArray || isDataSource) {\n\t if (!isObservableArray && !isDataSource) {\n\t object = new ObservableArray(object);\n\t }\n\n\t change = eventHandler(that, CHANGE, field, false);\n\n\t object.bind(CHANGE, change);\n\n\t that._handlers[field] = { change: change };\n\t }\n\n\t object.parent = parent;\n\t }\n\n\t return object;\n\t }\n\t });\n\n\t function equal(x, y) {\n\t if (x === y) {\n\t return true;\n\t }\n\n\t var xtype = $.type(x), ytype = $.type(y), field;\n\n\t if (xtype !== ytype) {\n\t return false;\n\t }\n\n\t if (xtype === \"date\") {\n\t return x.getTime() === y.getTime();\n\t }\n\n\t if (xtype !== \"object\" && xtype !== \"array\") {\n\t return false;\n\t }\n\n\t for (field in x) {\n\t if (!equal(x[field], y[field])) {\n\t return false;\n\t }\n\t }\n\n\t return true;\n\t }\n\n\t var parsers = {\n\t \"number\": function(value) {\n\t if (typeof value === STRING && value.toLowerCase() === \"null\") {\n\t return null;\n\t }\n\t return kendo.parseFloat(value);\n\t },\n\n\t \"date\": function(value) {\n\t if (typeof value === STRING && value.toLowerCase() === \"null\") {\n\t return null;\n\t }\n\t return kendo.parseDate(value);\n\t },\n\n\t \"boolean\": function(value) {\n\t if (typeof value === STRING) {\n\t if (value.toLowerCase() === \"null\") {\n\t return null;\n\t } else {\n\t return value.toLowerCase() === \"true\";\n\t }\n\t }\n\t return value != null ? !!value : value;\n\t },\n\n\t \"string\": function(value) {\n\t if (typeof value === STRING && value.toLowerCase() === \"null\") {\n\t return null;\n\t }\n\t return value != null ? (value + \"\") : value;\n\t },\n\n\t \"default\": function(value) {\n\t return value;\n\t }\n\t };\n\n\t var defaultValues = {\n\t \"string\": \"\",\n\t \"number\": 0,\n\t \"date\": new Date(),\n\t \"boolean\": false,\n\t \"default\": \"\"\n\t };\n\n\t function getFieldByName(obj, name) {\n\t var field,\n\t fieldName;\n\n\t for (fieldName in obj) {\n\t field = obj[fieldName];\n\t if (isPlainObject(field) && field.field && field.field === name) {\n\t return field;\n\t } else if (field === name) {\n\t return field;\n\t }\n\t }\n\t return null;\n\t }\n\n\t var Model = ObservableObject.extend({\n\t init: function(data) {\n\t var that = this;\n\n\t if (!data || $.isEmptyObject(data)) {\n\t data = $.extend({}, that.defaults, data);\n\n\t if (that._initializers) {\n\t for (var idx = 0; idx < that._initializers.length; idx++) {\n\t var name = that._initializers[idx];\n\t data[name] = that.defaults[name]();\n\t }\n\t }\n\t }\n\n\t ObservableObject.fn.init.call(that, data);\n\n\t that.dirty = false;\n\t that.dirtyFields = {};\n\n\t if (that.idField) {\n\t that.id = that.get(that.idField);\n\n\t if (that.id === undefined) {\n\t that.id = that._defaultId;\n\t }\n\t }\n\t },\n\n\t shouldSerialize: function(field) {\n\t return ObservableObject.fn.shouldSerialize.call(this, field) &&\n\t field !== \"uid\" && !(this.idField !== \"id\" && field === \"id\") &&\n\t field !== \"dirty\" && field !== \"dirtyFields\" && field !== \"_accessors\";\n\t },\n\n\t _parse: function(field, value) {\n\t var that = this,\n\t fieldName = field,\n\t fields = (that.fields || {}),\n\t parse;\n\n\t field = fields[field];\n\t if (!field) {\n\t field = getFieldByName(fields, fieldName);\n\t }\n\t if (field) {\n\t parse = field.parse;\n\t if (!parse && field.type) {\n\t parse = parsers[field.type.toLowerCase()];\n\t }\n\t }\n\n\t return parse ? parse(value) : value;\n\t },\n\n\t _notifyChange: function(e) {\n\t var action = e.action;\n\n\t if (action == \"add\" || action == \"remove\") {\n\t this.dirty = true;\n\t this.dirtyFields[e.field] = true;\n\t }\n\t },\n\n\t editable: function(field) {\n\t field = (this.fields || {})[field];\n\t return field ? field.editable !== false : true;\n\t },\n\n\t set: function(field, value) {\n\t var that = this;\n\t var dirty = that.dirty;\n\n\t if (that.editable(field)) {\n\t value = that._parse(field, value);\n\n\t if (!equal(value, that.get(field))) {\n\t that.dirty = true;\n\t that.dirtyFields[field] = true;\n\n\t if (ObservableObject.fn.set.call(that, field, value) && !dirty) {\n\t that.dirty = dirty;\n\n\t if (!that.dirty) {\n\t that.dirtyFields[field] = false;\n\t }\n\t }\n\t } else {\n\t that.trigger(\"equalSet\", { field: field, value: value });\n\t }\n\t }\n\t },\n\n\t accept: function(data) {\n\t var that = this,\n\t parent = function() { return that; },\n\t field;\n\n\t for (field in data) {\n\t var value = data[field];\n\n\t if (field.charAt(0) != \"_\") {\n\t value = that.wrap(data[field], field, parent);\n\t }\n\n\t that._set(field, value);\n\t }\n\n\t if (that.idField) {\n\t that.id = that.get(that.idField);\n\t }\n\n\t that.dirty = false;\n\t that.dirtyFields = {};\n\t },\n\n\t isNew: function() {\n\t return this.id === this._defaultId;\n\t }\n\t });\n\n\t Model.define = function(base, options) {\n\t if (options === undefined) {\n\t options = base;\n\t base = Model;\n\t }\n\n\t var model,\n\t proto = extend({ defaults: {} }, options),\n\t name,\n\t field,\n\t type,\n\t value,\n\t idx,\n\t length,\n\t fields = {},\n\t originalName,\n\t id = proto.id,\n\t functionFields = [];\n\n\t if (id) {\n\t proto.idField = id;\n\t }\n\n\t if (proto.id) {\n\t delete proto.id;\n\t }\n\n\t if (id) {\n\t proto.defaults[id] = proto._defaultId = \"\";\n\t }\n\n\t if (toString.call(proto.fields) === \"[object Array]\") {\n\t for (idx = 0, length = proto.fields.length; idx < length; idx++) {\n\t field = proto.fields[idx];\n\t if (typeof field === STRING) {\n\t fields[field] = {};\n\t } else if (field.field) {\n\t fields[field.field] = field;\n\t }\n\t }\n\t proto.fields = fields;\n\t }\n\n\t for (name in proto.fields) {\n\t field = proto.fields[name];\n\t type = field.type || \"default\";\n\t value = null;\n\t originalName = name;\n\n\t name = typeof (field.field) === STRING ? field.field : name;\n\n\t if (!field.nullable) {\n\t value = proto.defaults[originalName !== name ? originalName : name] = field.defaultValue !== undefined ? field.defaultValue : defaultValues[type.toLowerCase()];\n\n\t if (typeof value === \"function\") {\n\t functionFields.push(name);\n\t }\n\t }\n\n\t if (options.id === name) {\n\t proto._defaultId = value;\n\t }\n\n\t proto.defaults[originalName !== name ? originalName : name] = value;\n\n\t field.parse = field.parse || parsers[type];\n\t }\n\n\t if (functionFields.length > 0) {\n\t proto._initializers = functionFields;\n\t }\n\n\t model = base.extend(proto);\n\t model.define = function(options) {\n\t return Model.define(model, options);\n\t };\n\n\t if (proto.fields) {\n\t model.fields = proto.fields;\n\t model.idField = proto.idField;\n\t }\n\n\t return model;\n\t };\n\n\t var Comparer = {\n\t selector: function(field) {\n\t return isFunction(field) ? field : getter(field);\n\t },\n\n\t compare: function(field) {\n\t var selector = this.selector(field);\n\t return function (a, b) {\n\t a = selector(a);\n\t b = selector(b);\n\n\t if (a == null && b == null) {\n\t return 0;\n\t }\n\n\t if (a == null) {\n\t return -1;\n\t }\n\n\t if (b == null) {\n\t return 1;\n\t }\n\n\t if (a.localeCompare) {\n\t return a.localeCompare(b);\n\t }\n\n\t return a > b ? 1 : (a < b ? -1 : 0);\n\t };\n\t },\n\n\t create: function(sort) {\n\t var compare = sort.compare || this.compare(sort.field);\n\n\t if (sort.dir == \"desc\") {\n\t return function(a, b) {\n\t return compare(b, a, true);\n\t };\n\t }\n\n\t return compare;\n\t },\n\n\t combine: function(comparers) {\n\t return function(a, b) {\n\t var result = comparers[0](a, b),\n\t idx,\n\t length;\n\n\t for (idx = 1, length = comparers.length; idx < length; idx ++) {\n\t result = result || comparers[idx](a, b);\n\t }\n\n\t return result;\n\t };\n\t }\n\t };\n\n\t var StableComparer = extend({}, Comparer, {\n\t asc: function(field) {\n\t var selector = this.selector(field);\n\t return function (a, b) {\n\t var valueA = selector(a);\n\t var valueB = selector(b);\n\n\t if (valueA && valueA.getTime && valueB && valueB.getTime) {\n\t valueA = valueA.getTime();\n\t valueB = valueB.getTime();\n\t }\n\n\t if (valueA === valueB) {\n\t return a.__position - b.__position;\n\t }\n\n\t if (valueA == null) {\n\t return -1;\n\t }\n\n\t if (valueB == null) {\n\t return 1;\n\t }\n\n\t if (valueA.localeCompare) {\n\t return valueA.localeCompare(valueB);\n\t }\n\n\t return valueA > valueB ? 1 : -1;\n\t };\n\t },\n\n\t desc: function(field) {\n\t var selector = this.selector(field);\n\t return function (a, b) {\n\t var valueA = selector(a);\n\t var valueB = selector(b);\n\n\t if (valueA && valueA.getTime && valueB && valueB.getTime) {\n\t valueA = valueA.getTime();\n\t valueB = valueB.getTime();\n\t }\n\n\t if (valueA === valueB) {\n\t return a.__position - b.__position;\n\t }\n\n\t if (valueA == null) {\n\t return 1;\n\t }\n\n\t if (valueB == null) {\n\t return -1;\n\t }\n\n\t if (valueB.localeCompare) {\n\t return valueB.localeCompare(valueA);\n\t }\n\n\t return valueA < valueB ? 1 : -1;\n\t };\n\t },\n\t create: function(sort) {\n\t return this[sort.dir](sort.field);\n\t }\n\t });\n\n\t map = function (array, callback) {\n\t var idx, length = array.length, result = new Array(length);\n\n\t for (idx = 0; idx < length; idx++) {\n\t result[idx] = callback(array[idx], idx, array);\n\t }\n\n\t return result;\n\t };\n\n\t var operators = (function(){\n\n\t function quote(str) {\n\t if (typeof str == \"string\") {\n\t str = str.replace(/[\\r\\n]+/g, \"\");\n\t }\n\t return JSON.stringify(str);\n\t }\n\n\t function textOp(impl) {\n\t return function(a, b, ignore, accentFoldingFiltering) {\n\t b += \"\";\n\t if (ignore) {\n\t a = \"(\" + a + \" + '').toString()\" + ((accentFoldingFiltering) ? \".toLocaleLowerCase('\" + accentFoldingFiltering +\"')\" : \".toLowerCase()\");\n\t b = ((accentFoldingFiltering) ? b.toLocaleLowerCase(accentFoldingFiltering) : b.toLowerCase());\n\t }\n\t return impl(a, quote(b), ignore);\n\t };\n\t }\n\n\t function operator(op, a, b, ignore, accentFoldingFiltering) {\n\t if (b != null) {\n\t if (typeof b === STRING) {\n\t var date = dateRegExp.exec(b);\n\t if (date) {\n\t b = new Date(+date[1]);\n\t } else if (ignore) {\n\t b = quote(((accentFoldingFiltering) ? b.toLocaleLowerCase(accentFoldingFiltering) : b.toLowerCase()));\n\t a = \"((\" + a + \" || '')+'')\" + ((accentFoldingFiltering) ? \".toLocaleLowerCase('\" + accentFoldingFiltering +\"')\" : \".toLowerCase()\");\n\t } else {\n\t b = quote(b);\n\t }\n\t }\n\n\t if (b.getTime) {\n\t //b looks like a Date\n\t a = \"(\" + a + \"&&\" + a + \".getTime?\" + a + \".getTime():\" + a + \")\";\n\t b = b.getTime();\n\t }\n\t }\n\n\t return a + \" \" + op + \" \" + b;\n\t }\n\n\t function getMatchRegexp(pattern) {\n\t // take a pattern, as supported by Excel match filter, and\n\t // convert it to the equivalent JS regular expression.\n\t // Excel patterns support:\n\t //\n\t // * - match any sequence of characters\n\t // ? - match a single character\n\t //\n\t // to match a literal * or ?, they must be prefixed by a tilde (~)\n\t for (var rx = \"/^\", esc = false, i = 0; i < pattern.length; ++i) {\n\t var ch = pattern.charAt(i);\n\t if (esc) {\n\t rx += \"\\\\\" + ch;\n\t } else if (ch == \"~\") {\n\t esc = true;\n\t continue;\n\t } else if (ch == \"*\") {\n\t rx += \".*\";\n\t } else if (ch == \"?\") {\n\t rx += \".\";\n\t } else if (\".+^$()[]{}|\\\\/\\n\\r\\u2028\\u2029\\xA0\".indexOf(ch) >= 0) {\n\t rx += \"\\\\\" + ch;\n\t } else {\n\t rx += ch;\n\t }\n\t esc = false;\n\t }\n\t return rx + \"$/\";\n\t }\n\n\t return {\n\t quote: function(value) {\n\t if (value && value.getTime) {\n\t return \"new Date(\" + value.getTime() + \")\";\n\t }\n\t return quote(value);\n\t },\n\t eq: function(a, b, ignore, accentFoldingFiltering) {\n\t return operator(\"==\", a, b, ignore, accentFoldingFiltering);\n\t },\n\t neq: function(a, b, ignore, accentFoldingFiltering) {\n\t return operator(\"!=\", a, b, ignore, accentFoldingFiltering);\n\t },\n\t gt: function(a, b, ignore) {\n\t return operator(\">\", a, b, ignore);\n\t },\n\t gte: function(a, b, ignore) {\n\t return operator(\">=\", a, b, ignore);\n\t },\n\t lt: function(a, b, ignore) {\n\t return operator(\"<\", a, b, ignore);\n\t },\n\t lte: function(a, b, ignore) {\n\t return operator(\"<=\", a, b, ignore);\n\t },\n\t startswith: textOp(function(a, b) {\n\t return a + \".lastIndexOf(\" + b + \", 0) == 0\";\n\t }),\n\t doesnotstartwith: textOp(function(a, b) {\n\t return a + \".lastIndexOf(\" + b + \", 0) == -1\";\n\t }),\n\t endswith: textOp(function(a, b) {\n\t var n = b ? b.length - 2 : 0;\n\t return a + \".indexOf(\" + b + \", \" + a + \".length - \" + n + \") >= 0\";\n\t }),\n\t doesnotendwith: textOp(function(a, b) {\n\t var n = b ? b.length - 2 : 0;\n\t return a + \".indexOf(\" + b + \", \" + a + \".length - \" + n + \") < 0\";\n\t }),\n\t contains: textOp(function(a, b) {\n\t return a + \".indexOf(\" + b + \") >= 0\";\n\t }),\n\t doesnotcontain: textOp(function(a, b) {\n\t return a + \".indexOf(\" + b + \") == -1\";\n\t }),\n\t matches: textOp(function(a, b){\n\t b = b.substring(1, b.length - 1);\n\t return getMatchRegexp(b) + \".test(\" + a + \")\";\n\t }),\n\t doesnotmatch: textOp(function(a, b){\n\t b = b.substring(1, b.length - 1);\n\t return \"!\" + getMatchRegexp(b) + \".test(\" + a + \")\";\n\t }),\n\t isempty: function(a) {\n\t return a + \" === ''\";\n\t },\n\t isnotempty: function(a) {\n\t return a + \" !== ''\";\n\t },\n\t isnull: function(a) {\n\t return \"(\" + a + \" == null)\";\n\t },\n\t isnotnull: function(a) {\n\t return \"(\" + a + \" != null)\";\n\t },\n\t isnullorempty: function(a) {\n\t return \"(\" + a + \" === null) || (\" + a + \" === '')\";\n\t },\n\t isnotnullorempty: function(a) {\n\t return \"(\" + a + \" !== null) && (\" + a + \" !== '')\";\n\t }\n\t };\n\t })();\n\n\t function Query(data) {\n\t this.data = data || [];\n\t }\n\n\t Query.filterExpr = function(expression) {\n\t var expressions = [],\n\t logic = { and: \" && \", or: \" || \" },\n\t idx,\n\t length,\n\t filter,\n\t expr,\n\t fieldFunctions = [],\n\t operatorFunctions = [],\n\t field,\n\t operator,\n\t filters = expression.filters;\n\n\t for (idx = 0, length = filters.length; idx < length; idx++) {\n\t filter = filters[idx];\n\t field = filter.field;\n\t operator = filter.operator;\n\n\t if (filter.filters) {\n\t expr = Query.filterExpr(filter);\n\t //Nested function fields or operators - update their index e.g. __o[0] -> __o[1]\n\t filter = expr.expression\n\t .replace(/__o\\[(\\d+)\\]/g, function(match, index) {\n\t index = +index;\n\t return \"__o[\" + (operatorFunctions.length + index) + \"]\";\n\t })\n\t .replace(/__f\\[(\\d+)\\]/g, function(match, index) {\n\t index = +index;\n\t return \"__f[\" + (fieldFunctions.length + index) + \"]\";\n\t });\n\n\t operatorFunctions.push.apply(operatorFunctions, expr.operators);\n\t fieldFunctions.push.apply(fieldFunctions, expr.fields);\n\t } else {\n\t if (typeof field === FUNCTION) {\n\t expr = \"__f[\" + fieldFunctions.length +\"](d)\";\n\t fieldFunctions.push(field);\n\t } else {\n\t expr = kendo.expr(field);\n\t }\n\n\t if (typeof operator === FUNCTION) {\n\t filter = \"__o[\" + operatorFunctions.length + \"](\" + expr + \", \" + operators.quote(filter.value) + \")\";\n\t operatorFunctions.push(operator);\n\t } else {\n\t filter = operators[(operator || \"eq\").toLowerCase()](expr, filter.value, filter.ignoreCase !== undefined? filter.ignoreCase : true, expression.accentFoldingFiltering);\n\t }\n\t }\n\n\t expressions.push(filter);\n\t }\n\n\t return { expression: \"(\" + expressions.join(logic[expression.logic]) + \")\", fields: fieldFunctions, operators: operatorFunctions };\n\t };\n\n\t function normalizeSort(field, dir) {\n\t if (field) {\n\t var descriptor = typeof field === STRING ? { field: field, dir: dir } : field,\n\t descriptors = isArray(descriptor) ? descriptor : (descriptor !== undefined ? [descriptor] : []);\n\n\t return grep(descriptors, function(d) { return !!d.dir; });\n\t }\n\t }\n\n\t function sortFields(sorts, dir) {\n\t var sortObject = {};\n\n\t if (sorts) {\n\t var descriptor = typeof sorts === STRING ? { field: sorts, dir: dir } : sorts,\n\t descriptors = isArray(descriptor) ? descriptor : (descriptor !== undefined ? [descriptor] : []);\n\n\t for (var i = 0; i < descriptors.length; i++) {\n\t sortObject[descriptors[i].field] = { dir: descriptors[i].dir, index: i + 1 };\n\t }\n\t }\n\n\t return sortObject;\n\t }\n\n\t var operatorMap = {\n\t \"==\": \"eq\",\n\t equals: \"eq\",\n\t isequalto: \"eq\",\n\t equalto: \"eq\",\n\t equal: \"eq\",\n\t \"!=\": \"neq\",\n\t ne: \"neq\",\n\t notequals: \"neq\",\n\t isnotequalto: \"neq\",\n\t notequalto: \"neq\",\n\t notequal: \"neq\",\n\t \"<\": \"lt\",\n\t islessthan: \"lt\",\n\t lessthan: \"lt\",\n\t less: \"lt\",\n\t \"<=\": \"lte\",\n\t le: \"lte\",\n\t islessthanorequalto: \"lte\",\n\t lessthanequal: \"lte\",\n\t \">\": \"gt\",\n\t isgreaterthan: \"gt\",\n\t greaterthan: \"gt\",\n\t greater: \"gt\",\n\t \">=\": \"gte\",\n\t isgreaterthanorequalto: \"gte\",\n\t greaterthanequal: \"gte\",\n\t ge: \"gte\",\n\t notsubstringof: \"doesnotcontain\",\n\t isnull: \"isnull\",\n\t isempty: \"isempty\",\n\t isnotempty: \"isnotempty\"\n\t };\n\n\t function normalizeOperator(expression) {\n\t var idx,\n\t length,\n\t filter,\n\t operator,\n\t filters = expression.filters;\n\n\t if (filters) {\n\t for (idx = 0, length = filters.length; idx < length; idx++) {\n\t filter = filters[idx];\n\t operator = filter.operator;\n\n\t if (operator && typeof operator === STRING) {\n\t filter.operator = operatorMap[operator.toLowerCase()] || operator;\n\t }\n\n\t normalizeOperator(filter);\n\t }\n\t }\n\t }\n\n\t function normalizeFilter(expression) {\n\t if (expression && !isEmptyObject(expression)) {\n\t if (isArray(expression) || !expression.filters) {\n\t expression = {\n\t logic: \"and\",\n\t filters: isArray(expression) ? expression : [expression]\n\t };\n\t }\n\n\t normalizeOperator(expression);\n\n\t return expression;\n\t }\n\t }\n\n\t Query.normalizeFilter = normalizeFilter;\n\n\t function compareDescriptor(f1, f2) {\n\t if (f1.logic || f2.logic) {\n\t return false;\n\t }\n\n\t return f1.field === f2.field && f1.value === f2.value && f1.operator === f2.operator;\n\t }\n\n\t function normalizeDescriptor(filter) {\n\t filter = filter || {};\n\n\t if (isEmptyObject(filter)) {\n\t return { logic: \"and\", filters: [] };\n\t }\n\n\t return normalizeFilter(filter);\n\t }\n\n\t function fieldComparer(a, b) {\n\t if (b.logic || (a.field > b.field)) {\n\t return 1;\n\t } else if (a.field < b.field) {\n\t return -1;\n\t } else {\n\t return 0;\n\t }\n\t }\n\n\t function compareFilters(expr1, expr2) {\n\t expr1 = normalizeDescriptor(expr1);\n\t expr2 = normalizeDescriptor(expr2);\n\n\t if (expr1.logic !== expr2.logic) {\n\t return false;\n\t }\n\n\t var f1, f2;\n\t var filters1 = (expr1.filters || []).slice();\n\t var filters2 = (expr2.filters || []).slice();\n\n\t if (filters1.length !== filters2.length) {\n\t return false;\n\t }\n\n\t filters1 = filters1.sort(fieldComparer);\n\t filters2 = filters2.sort(fieldComparer);\n\n\t for (var idx = 0; idx < filters1.length; idx++) {\n\t f1 = filters1[idx];\n\t f2 = filters2[idx];\n\n\t if (f1.logic && f2.logic) {\n\t if (!compareFilters(f1, f2)) {\n\t return false;\n\t }\n\t } else if (!compareDescriptor(f1, f2)) {\n\t return false;\n\t }\n\t }\n\n\t return true;\n\t }\n\n\t Query.compareFilters = compareFilters;\n\n\t function normalizeAggregate(expressions) {\n\t return isArray(expressions) ? expressions : [expressions];\n\t }\n\n\t function normalizeGroup(field, dir, compare, skipItemSorting) {\n\t var descriptor = typeof field === STRING ? { field: field, dir: dir, compare: compare, skipItemSorting : skipItemSorting } : field,\n\t descriptors = isArray(descriptor) ? descriptor : (descriptor !== undefined ? [descriptor] : []);\n\n\t return map(descriptors, function(d) {\n\t return {\n\t field: d.field,\n\t dir: d.dir || \"asc\",\n\t aggregates: d.aggregates,\n\t compare: d.compare,\n\t skipItemSorting: d.skipItemSorting\n\t };\n\t });\n\t }\n\n\t function normalizeGroupWithoutCompare(field, dir, compare) {\n\t var descriptors = normalizeGroup(field, dir, compare);\n\n\t for (var i = 0; i < descriptors.length; i++) {\n\t delete descriptors[i].compare;\n\t }\n\n\t return descriptors;\n\t }\n\n\t function anyGroupDescriptorHasCompare(groupDescriptors) {\n\t var descriptors = isArray(groupDescriptors) ? groupDescriptors : [groupDescriptors];\n\n\t for (var i = 0; i < descriptors.length; i++) {\n\t if (descriptors[i] && isFunction(descriptors[i].compare)) {\n\t return true;\n\t }\n\t }\n\n\t return false;\n\t }\n\n\t Query.prototype = {\n\t toArray: function () {\n\t return this.data;\n\t },\n\t range: function(index, count) {\n\t return new Query(this.data.slice(index, index + count));\n\t },\n\t skip: function (count) {\n\t return new Query(this.data.slice(count));\n\t },\n\t take: function (count) {\n\t return new Query(this.data.slice(0, count));\n\t },\n\t select: function (selector) {\n\t return new Query(map(this.data, selector));\n\t },\n\t order: function(selector, dir, inPlace) {\n\t var sort = { dir: dir };\n\n\t if (selector) {\n\t if (selector.compare) {\n\t sort.compare = selector.compare;\n\t } else {\n\t sort.field = selector;\n\t }\n\t }\n\n\t if (inPlace) {\n\t return new Query(this.data.sort(Comparer.create(sort)));\n\t }\n\n\t return new Query(this.data.slice(0).sort(Comparer.create(sort)));\n\t },\n\t orderBy: function(selector, inPlace) {\n\t return this.order(selector, \"asc\", inPlace);\n\t },\n\t orderByDescending: function(selector, inPlace) {\n\t return this.order(selector, \"desc\", inPlace);\n\t },\n\t sort: function(field, dir, comparer, inPlace) {\n\t var idx,\n\t length,\n\t descriptors = normalizeSort(field, dir),\n\t comparers = [];\n\n\t comparer = comparer || Comparer;\n\n\t if (descriptors.length) {\n\t for (idx = 0, length = descriptors.length; idx < length; idx++) {\n\t comparers.push(comparer.create(descriptors[idx]));\n\t }\n\n\t return this.orderBy({ compare: comparer.combine(comparers) }, inPlace);\n\t }\n\n\t return this;\n\t },\n\n\t filter: function(expressions) {\n\t var idx,\n\t current,\n\t length,\n\t compiled,\n\t predicate,\n\t data = this.data,\n\t fields,\n\t operators,\n\t result = [],\n\t filter;\n\n\t expressions = normalizeFilter(expressions);\n\n\t if (!expressions || expressions.filters.length === 0) {\n\t return this;\n\t }\n\n\t compiled = Query.filterExpr(expressions);\n\t fields = compiled.fields;\n\t operators = compiled.operators;\n\n\t predicate = filter = new Function(\"d, __f, __o\", \"return \" + compiled.expression);\n\n\t if (fields.length || operators.length) {\n\t filter = function(d) {\n\t return predicate(d, fields, operators);\n\t };\n\t }\n\n\n\t for (idx = 0, length = data.length; idx < length; idx++) {\n\t current = data[idx];\n\n\t if (filter(current)) {\n\t result.push(current);\n\t }\n\t }\n\n\t return new Query(result);\n\t },\n\n\t group: function(descriptors, allData, options) {\n\t descriptors = normalizeGroup(descriptors || []);\n\t allData = allData || this.data;\n\n\t var that = this,\n\t result = new Query(that.data),\n\t descriptor;\n\n\t if (descriptors.length > 0) {\n\t descriptor = descriptors[0];\n\n\t if (options && options.groupPaging) {\n\t result = new Query(allData).groupAllData(descriptor, allData).select(function (group) {\n\t var data = new Query(allData).filter([{\n\t field: group.field,\n\t operator: \"eq\",\n\t value: group.value,\n\t ignoreCase: false\n\t }]);\n\t var items = descriptors.length > 1 ? new Query(group.items).group(descriptors.slice(1), data.toArray(), options).toArray() : group.items;\n\t return {\n\t field: group.field,\n\t value: group.value,\n\t hasSubgroups: descriptors.length > 1,\n\t items: items,\n\t aggregates: data.aggregate(descriptor.aggregates),\n\t uid: kendo.guid(),\n\t itemCount: items.length,\n\t subgroupCount: items.length\n\t };\n\t });\n\n\t } else {\n\t result = result.groupBy(descriptor).select(function(group) {\n\t var data = new Query(allData).filter([ { field: group.field, operator: \"eq\", value: group.value, ignoreCase: false } ]);\n\t return {\n\t field: group.field,\n\t value: group.value,\n\t items: descriptors.length > 1 ? new Query(group.items).group(descriptors.slice(1), data.toArray()).toArray() : group.items,\n\t hasSubgroups: descriptors.length > 1,\n\t aggregates: data.aggregate(descriptor.aggregates)\n\t };\n\t });\n\t }\n\t }\n\t return result;\n\t },\n\n\t groupBy: function(descriptor) {\n\t var that = this;\n\n\t if (isEmptyObject(descriptor) || !this.data.length) {\n\t return new Query([]);\n\t }\n\n\t var field = descriptor.field,\n\t sorted = descriptor.skipItemSorting ? this.data : this._sortForGrouping(field, descriptor.dir || \"asc\"),\n\t accessor = kendo.accessor(field),\n\t item,\n\t groupValue = accessor.get(sorted[0], field),\n\t group = {\n\t field: field,\n\t value: groupValue,\n\t items: []\n\t },\n\t currentValue,\n\t idx,\n\t len,\n\t result = [group];\n\n\t for(idx = 0, len = sorted.length; idx < len; idx++) {\n\t item = sorted[idx];\n\t currentValue = accessor.get(item, field);\n\t if(!groupValueComparer(groupValue, currentValue)) {\n\t groupValue = currentValue;\n\t group = {\n\t field: field,\n\t value: groupValue,\n\t items: []\n\t };\n\t result.push(group);\n\t }\n\t group.items.push(item);\n\t }\n\n\t result = that._sortGroups(result, descriptor);\n\n\t return new Query(result);\n\t },\n\n\t groupAllData: function (descriptor, allData) {\n\t if (isEmptyObject(descriptor) || this.data && !this.data.length) {\n\t return new Query([]);\n\t }\n\n\t var field = descriptor.field,\n\t sorted = descriptor.skipItemSorting ? allData : new Query(allData).sort(field, descriptor.dir || \"asc\", StableComparer).toArray(),\n\t accessor = kendo.accessor(field),\n\t item,\n\t groupValue = accessor.get(sorted[0], field),\n\t group = {\n\t field: field,\n\t value: groupValue,\n\t items: []\n\t },\n\t currentValue,\n\t idx,\n\t len,\n\t result = [group];\n\n\t for (idx = 0, len = sorted.length; idx < len; idx++) {\n\t item = sorted[idx];\n\t currentValue = accessor.get(item, field);\n\t if (!groupValueComparer(groupValue, currentValue)) {\n\t groupValue = currentValue;\n\t group = {\n\t field: field,\n\t value: groupValue,\n\t items: []\n\t };\n\t result.push(group);\n\t }\n\t group.items.push(item);\n\t }\n\n\t result = this._sortGroups(result, descriptor);\n\n\t return new Query(result);\n\t },\n\n\t _sortForGrouping: function(field, dir) {\n\t var idx, length,\n\t data = this.data;\n\n\t if (!stableSort) {\n\t for (idx = 0, length = data.length; idx < length; idx++) {\n\t data[idx].__position = idx;\n\t }\n\n\t data = new Query(data).sort(field, dir, StableComparer).toArray();\n\n\t for (idx = 0, length = data.length; idx < length; idx++) {\n\t delete data[idx].__position;\n\t }\n\t return data;\n\t }\n\n\t return this.sort(field, dir).toArray();\n\t },\n\n\t _sortGroups: function(groups, descriptor) {\n\t var result = groups;\n\n\t if (descriptor && isFunction(descriptor.compare)) {\n\t result = new Query(result).order({ compare: descriptor.compare }, descriptor.dir || ASCENDING).toArray();\n\t }\n\n\t return result;\n\t },\n\n\t aggregate: function (aggregates) {\n\t var idx,\n\t len,\n\t result = {},\n\t state = {};\n\n\t if (aggregates && aggregates.length) {\n\t for(idx = 0, len = this.data.length; idx < len; idx++) {\n\t calculateAggregate(result, aggregates, this.data[idx], idx, len, state);\n\t }\n\t }\n\t return result;\n\t }\n\t };\n\n\t function groupValueComparer(a, b) {\n\t if (a && a.getTime && b && b.getTime) {\n\t return a.getTime() === b.getTime();\n\t }\n\t return a === b;\n\t }\n\n\t function calculateAggregate(accumulator, aggregates, item, index, length, state) {\n\t aggregates = aggregates || [];\n\t var idx,\n\t aggr,\n\t functionName,\n\t len = aggregates.length;\n\n\t for (idx = 0; idx < len; idx++) {\n\t aggr = aggregates[idx];\n\t functionName = aggr.aggregate;\n\t var field = aggr.field;\n\t accumulator[field] = accumulator[field] || {};\n\t state[field] = state[field] || {};\n\t state[field][functionName] = state[field][functionName] || {};\n\t accumulator[field][functionName] = functions[functionName.toLowerCase()](accumulator[field][functionName], item, kendo.accessor(field), index, length, state[field][functionName]);\n\t }\n\t }\n\n\t var functions = {\n\t sum: function(accumulator, item, accessor) {\n\t var value = accessor.get(item);\n\n\t if (!isNumber(accumulator)) {\n\t accumulator = value;\n\t } else if (isNumber(value)) {\n\t accumulator += value;\n\t }\n\n\t return accumulator;\n\t },\n\t count: function(accumulator) {\n\t return (accumulator || 0) + 1;\n\t },\n\t average: function(accumulator, item, accessor, index, length, state) {\n\t var value = accessor.get(item);\n\n\t if (state.count === undefined) {\n\t state.count = 0;\n\t }\n\n\t if (!isNumber(accumulator)) {\n\t accumulator = value;\n\t } else if (isNumber(value)) {\n\t accumulator += value;\n\t }\n\n\t if (isNumber(value)) {\n\t state.count++;\n\t }\n\n\t if(index == length - 1 && isNumber(accumulator)) {\n\t accumulator = accumulator / state.count;\n\t }\n\t return accumulator;\n\t },\n\t max: function(accumulator, item, accessor) {\n\t var value = accessor.get(item);\n\n\t if (!isNumber(accumulator) && !isDate(accumulator)) {\n\t accumulator = value;\n\t }\n\n\t if(accumulator < value && (isNumber(value) || isDate(value))) {\n\t accumulator = value;\n\t }\n\t return accumulator;\n\t },\n\t min: function(accumulator, item, accessor) {\n\t var value = accessor.get(item);\n\n\t if (!isNumber(accumulator) && !isDate(accumulator)) {\n\t accumulator = value;\n\t }\n\n\t if(accumulator > value && (isNumber(value) || isDate(value))) {\n\t accumulator = value;\n\t }\n\t return accumulator;\n\t }\n\t };\n\n\t function isNumber(val) {\n\t return typeof val === \"number\" && !isNaN(val);\n\t }\n\n\t function isDate(val) {\n\t return val && val.getTime;\n\t }\n\n\t function toJSON(array) {\n\t var idx, length = array.length, result = new Array(length);\n\n\t for (idx = 0; idx < length; idx++) {\n\t result[idx] = array[idx].toJSON();\n\t }\n\n\t return result;\n\t }\n\n\t Query.normalizeGroup = normalizeGroup;\n\t Query.normalizeSort = normalizeSort;\n\n\t Query.process = function(data, options, inPlace) {\n\t options = options || {};\n\n\t var group = options.group;\n\t var customGroupSort = anyGroupDescriptorHasCompare(normalizeGroup(group || []));\n\t var query = new Query(data),\n\t groupDescriptorsWithoutCompare = normalizeGroupWithoutCompare(group || []),\n\t normalizedSort = normalizeSort(options.sort || []),\n\t sort = customGroupSort ? normalizedSort : groupDescriptorsWithoutCompare.concat(normalizedSort),\n\t groupDescriptorsWithoutSort,\n\t total,\n\t filterCallback = options.filterCallback,\n\t filter = options.filter,\n\t skip = options.skip,\n\t take = options.take;\n\n\t if (sort && inPlace) {\n\t query = query.sort(sort, undefined, undefined, inPlace);\n\t }\n\n\t if (filter) {\n\t query = query.filter(filter);\n\n\t if (filterCallback) {\n\t query = filterCallback(query);\n\t }\n\n\t total = query.toArray().length;\n\t }\n\n\t if (sort) {\n\t if (!inPlace) {\n\t query = query.sort(sort);\n\t }\n\n\t if (group) {\n\t data = query.toArray();\n\t }\n\t }\n\n\t if (customGroupSort) {\n\t query = query.group(group, data);\n\n\t if (skip !== undefined && take !== undefined) {\n\t query = new Query(flatGroups(query.toArray())).range(skip, take);\n\n\t groupDescriptorsWithoutSort = map(groupDescriptorsWithoutCompare, function(groupDescriptor) {\n\t return extend({}, groupDescriptor, {\n\t skipItemSorting: true\n\t });\n\t });\n\n\t query = query.group(groupDescriptorsWithoutSort, data);\n\t }\n\t } else {\n\t if (skip !== undefined && take !== undefined) {\n\t query = query.range(skip, take);\n\t }\n\n\t if (group) {\n\t query = query.group(group, data, options);\n\t }\n\t }\n\n\t return {\n\t total: total,\n\t data: query.toArray()\n\t };\n\t };\n\n\t var LocalTransport = Class.extend({\n\t init: function(options) {\n\t this.data = options.data;\n\t },\n\n\t read: function(options) {\n\t options.success(this.data);\n\t },\n\t update: function(options) {\n\t options.success(options.data);\n\t },\n\t create: function(options) {\n\t options.success(options.data);\n\t },\n\t destroy: function(options) {\n\t options.success(options.data);\n\t }\n\t });\n\n\t var RemoteTransport = Class.extend( {\n\t init: function(options) {\n\t var that = this, parameterMap;\n\n\t options = that.options = extend({}, that.options, options);\n\n\t each(crud, function(index, type) {\n\t if (typeof options[type] === STRING) {\n\t options[type] = {\n\t url: options[type]\n\t };\n\t }\n\t });\n\n\t that.cache = options.cache? Cache.create(options.cache) : {\n\t find: noop,\n\t add: noop\n\t };\n\n\t parameterMap = options.parameterMap;\n\n\t if (options.submit) {\n\t that.submit = options.submit;\n\t }\n\n\t if (isFunction(options.push)) {\n\t that.push = options.push;\n\t }\n\n\t if (!that.push) {\n\t that.push = identity;\n\t }\n\n\t that.parameterMap = isFunction(parameterMap) ? parameterMap : function(options) {\n\t var result = {};\n\n\t each(options, function(option, value) {\n\t if (option in parameterMap) {\n\t option = parameterMap[option];\n\t if (isPlainObject(option)) {\n\t value = option.value(value);\n\t option = option.key;\n\t }\n\t }\n\n\t result[option] = value;\n\t });\n\n\t return result;\n\t };\n\t },\n\n\t options: {\n\t parameterMap: identity\n\t },\n\n\t create: function(options) {\n\t return ajax(this.setup(options, CREATE));\n\t },\n\n\t read: function(options) {\n\t var that = this,\n\t success,\n\t error,\n\t result,\n\t cache = that.cache;\n\n\t options = that.setup(options, READ);\n\n\t success = options.success || noop;\n\t error = options.error || noop;\n\n\t result = cache.find(options.data);\n\n\t if(result !== undefined) {\n\t success(result);\n\t } else {\n\t options.success = function(result) {\n\t cache.add(options.data, result);\n\n\t success(result);\n\t };\n\n\t $.ajax(options);\n\t }\n\t },\n\n\t update: function(options) {\n\t return ajax(this.setup(options, UPDATE));\n\t },\n\n\t destroy: function(options) {\n\t return ajax(this.setup(options, DESTROY));\n\t },\n\n\t setup: function(options, type) {\n\t options = options || {};\n\n\t var that = this,\n\t parameters,\n\t operation = that.options[type],\n\t data = isFunction(operation.data) ? operation.data(options.data) : operation.data;\n\n\t options = extend(true, {}, operation, options);\n\t parameters = extend(true, {}, data, options.data);\n\n\t options.data = that.parameterMap(parameters, type);\n\n\t if (isFunction(options.url)) {\n\t options.url = options.url(parameters);\n\t }\n\n\t return options;\n\t }\n\t });\n\n\t var Cache = Class.extend({\n\t init: function() {\n\t this._store = {};\n\t },\n\t add: function(key, data) {\n\t if(key !== undefined) {\n\t this._store[stringify(key)] = data;\n\t }\n\t },\n\t find: function(key) {\n\t return this._store[stringify(key)];\n\t },\n\t clear: function() {\n\t this._store = {};\n\t },\n\t remove: function(key) {\n\t delete this._store[stringify(key)];\n\t }\n\t });\n\n\t Cache.create = function(options) {\n\t var store = {\n\t \"inmemory\": function() { return new Cache(); }\n\t };\n\n\t if (isPlainObject(options) && isFunction(options.find)) {\n\t return options;\n\t }\n\n\t if (options === true) {\n\t return new Cache();\n\t }\n\n\t return store[options]();\n\t };\n\n\t function serializeRecords(data, getters, modelInstance, originalFieldNames, fieldNames) {\n\t var record,\n\t getter,\n\t originalName,\n\t idx,\n\t setters = {},\n\t length;\n\n\t for (idx = 0, length = data.length; idx < length; idx++) {\n\t record = data[idx];\n\t for (getter in getters) {\n\t originalName = fieldNames[getter];\n\n\t if (originalName && originalName !== getter) {\n\t if (!setters[originalName]) {\n\t setters[originalName] = kendo.setter(originalName);\n\t }\n\t setters[originalName](record, getters[getter](record));\n\t delete record[getter];\n\t }\n\t }\n\t }\n\t }\n\n\t function convertRecords(data, getters, modelInstance, originalFieldNames, fieldNames) {\n\t var record,\n\t getter,\n\t originalName,\n\t idx,\n\t length;\n\n\t for (idx = 0, length = data.length; idx < length; idx++) {\n\t record = data[idx];\n\t for (getter in getters) {\n\t record[getter] = modelInstance._parse(getter, getters[getter](record));\n\n\t originalName = fieldNames[getter];\n\t if (originalName && originalName !== getter) {\n\t delete record[originalName];\n\t }\n\t }\n\t }\n\t }\n\n\t function convertGroup(data, getters, modelInstance, originalFieldNames, fieldNames) {\n\t var record,\n\t idx,\n\t fieldName,\n\t length;\n\n\t for (idx = 0, length = data.length; idx < length; idx++) {\n\t record = data[idx];\n\n\t fieldName = originalFieldNames[record.field];\n\t if (fieldName && fieldName != record.field) {\n\t record.field = fieldName;\n\t }\n\n\t record.value = modelInstance._parse(record.field, record.value);\n\n\t if (record.items) {\n\t if (record.hasSubgroups) {\n\t convertGroup(record.items, getters, modelInstance, originalFieldNames, fieldNames);\n\t } else {\n\t convertRecords(record.items, getters, modelInstance, originalFieldNames, fieldNames);\n\t }\n\t }\n\t }\n\t }\n\n\t function wrapDataAccess(originalFunction, model, converter, getters, originalFieldNames, fieldNames) {\n\t return function(data) {\n\t data = originalFunction(data);\n\n\t return wrapDataAccessBase(model, converter, getters, originalFieldNames, fieldNames)(data);\n\t };\n\t }\n\n\t function wrapDataAccessBase(model, converter, getters, originalFieldNames, fieldNames) {\n\t return function(data) {\n\n\t if (data && !isEmptyObject(getters)) {\n\t if (toString.call(data) !== \"[object Array]\" && !(data instanceof ObservableArray)) {\n\t data = [data];\n\t }\n\n\t converter(data, getters, new model(), originalFieldNames, fieldNames);\n\t }\n\n\t return data || [];\n\t };\n\t }\n\n\t var DataReader = Class.extend({\n\t init: function(schema) {\n\t var that = this, member, get, model, base;\n\n\t schema = schema || {};\n\n\t for (member in schema) {\n\t get = schema[member];\n\n\t that[member] = typeof get === STRING ? getter(get) : get;\n\t }\n\n\t base = schema.modelBase || Model;\n\n\t if (isPlainObject(that.model)) {\n\t that.model = model = base.define(that.model);\n\t }\n\n\t var dataFunction = proxy(that.data, that);\n\n\t that._dataAccessFunction = dataFunction;\n\n\t if (that.model) {\n\t var groupsFunction = proxy(that.groups, that),\n\t serializeFunction = proxy(that.serialize, that),\n\t originalFieldNames = {},\n\t getters = {},\n\t serializeGetters = {},\n\t fieldNames = {},\n\t shouldSerialize = false,\n\t fieldName,\n\t name;\n\n\t model = that.model;\n\n\t if (model.fields) {\n\t each(model.fields, function(field, value) {\n\t var fromName;\n\n\t fieldName = field;\n\n\t if (isPlainObject(value) && value.field) {\n\t fieldName = value.field;\n\t } else if (typeof value === STRING) {\n\t fieldName = value;\n\t }\n\n\t if (isPlainObject(value) && value.from) {\n\t fromName = value.from;\n\t }\n\n\t shouldSerialize = shouldSerialize || (fromName && fromName !== field) || fieldName !== field;\n\t name = fromName || fieldName;\n\t getters[field] = name.indexOf(\".\") !== -1 ? getter(name, true) : getter(name);\n\t serializeGetters[field] = getter(field);\n\t originalFieldNames[fromName || fieldName] = field;\n\t fieldNames[field] = fromName || fieldName;\n\t });\n\n\t if (!schema.serialize && shouldSerialize) {\n\t that.serialize = wrapDataAccess(serializeFunction, model, serializeRecords, serializeGetters, originalFieldNames, fieldNames);\n\t }\n\t }\n\n\t that._dataAccessFunction = dataFunction;\n\t that._wrapDataAccessBase = wrapDataAccessBase(model, convertRecords, getters, originalFieldNames, fieldNames);\n\t that.data = wrapDataAccess(dataFunction, model, convertRecords, getters, originalFieldNames, fieldNames);\n\t that.groups = wrapDataAccess(groupsFunction, model, convertGroup, getters, originalFieldNames, fieldNames);\n\t }\n\t },\n\t errors: function(data) {\n\t return data ? data.errors : null;\n\t },\n\t parse: identity,\n\t data: identity,\n\t total: function(data) {\n\t return data.length;\n\t },\n\t groups: identity,\n\t aggregates: function() {\n\t return {};\n\t },\n\t serialize: function(data) {\n\t return data;\n\t }\n\t });\n\n\t function fillLastGroup(originalGroup, newGroup) {\n\t var currOriginal;\n\t var currentNew;\n\n\t if (newGroup.items && newGroup.items.length) {\n\t for (var i = 0; i < newGroup.items.length; i++) {\n\t currOriginal = originalGroup.items[i];\n\t currentNew = newGroup.items[i];\n\t if (currOriginal && currentNew) {\n\t if (currOriginal.hasSubgroups) {\n\t fillLastGroup(currOriginal, currentNew);\n\t } else if (currOriginal.field && currOriginal.value == currentNew.value) {\n\t currOriginal.items.push.apply(currOriginal.items, currentNew.items);\n\t } else {\n\t originalGroup.items.push.apply(originalGroup.items, [currentNew]);\n\t }\n\t } else if (currentNew) {\n\t originalGroup.items.push.apply(originalGroup.items, [currentNew]);\n\t }\n\t }\n\t }\n\t }\n\t function mergeGroups(target, dest, skip, take) {\n\t var group,\n\t idx = 0,\n\t items;\n\n\t while (dest.length && take) {\n\t group = dest[idx];\n\t items = group.items;\n\n\t var length = items.length;\n\n\t if (target && target.field === group.field && target.value === group.value) {\n\t if (target.hasSubgroups && target.items.length) {\n\t mergeGroups(target.items[target.items.length - 1], group.items, skip, take);\n\t } else {\n\t items = items.slice(skip, skip + take);\n\t target.items = target.items.concat(items);\n\t }\n\t dest.splice(idx--, 1);\n\t } else if (group.hasSubgroups && items.length) {\n\t mergeGroups(group, items, skip, take);\n\t if (!group.items.length) {\n\t dest.splice(idx--, 1);\n\t }\n\t } else {\n\t items = items.slice(skip, skip + take);\n\t group.items = items;\n\n\t if (!group.items.length) {\n\t dest.splice(idx--, 1);\n\t }\n\t }\n\n\t if (items.length === 0) {\n\t skip -= length;\n\t } else {\n\t skip = 0;\n\t take -= items.length;\n\t }\n\n\t if (++idx >= dest.length) {\n\t break;\n\t }\n\t }\n\n\t if (idx < dest.length) {\n\t dest.splice(idx, dest.length - idx);\n\t }\n\t }\n\n\t function flatGroups(groups, indexFunction) {\n\t var result = [];\n\t var groupsLength = (groups || []).length;\n\t var group;\n\t var items;\n\t var indexFn = isFunction(indexFunction) ? indexFunction : function(array, index) {\n\t return array[index];\n\t };\n\n\t for (var groupIndex = 0; groupIndex < groupsLength; groupIndex++) {\n\t group = indexFn(groups, groupIndex);\n\n\t if (group.hasSubgroups) {\n\t result = result.concat(flatGroups(group.items));\n\t } else {\n\t items = group.items;\n\n\t for (var itemIndex = 0; itemIndex < items.length; itemIndex++) {\n\t result.push(indexFn(items, itemIndex));\n\t }\n\t }\n\t }\n\t return result;\n\t }\n\n\t function flattenGroups(data) {\n\t var idx,\n\t result = [],\n\t length,\n\t items,\n\t itemIndex;\n\n\t for (idx = 0, length = data.length; idx < length; idx++) {\n\t var group = data.at(idx);\n\t if (group.items) {\n\t if (group.hasSubgroups) {\n\t result = result.concat(flattenGroups(group.items));\n\t } else {\n\t items = group.items;\n\t for (itemIndex = 0; itemIndex < items.length; itemIndex++) {\n\t result.push(items.at(itemIndex));\n\t }\n\t }\n\t }\n\t }\n\t return result;\n\t }\n\n\t function wrapGroupItems(data, model) {\n\t var idx, length, group;\n\t if (model) {\n\t for (idx = 0, length = data.length; idx < length; idx++) {\n\t group = data.at(idx);\n\t if (group.items) {\n\t if (group.hasSubgroups) {\n\t wrapGroupItems(group.items, model);\n\t } else {\n\t group.items = new LazyObservableArray(group.items, model, group.items._events);\n\t }\n\t }\n\t }\n\t }\n\t }\n\n\t function eachGroupItems(data, func) {\n\t for (var idx = 0; idx < data.length; idx++) {\n\t if (data[idx].hasSubgroups) {\n\t if (eachGroupItems(data[idx].items, func)) {\n\t return true;\n\t }\n\t } else if (func(data[idx].items, data[idx])) {\n\t return true;\n\t }\n\t }\n\t }\n\n\t function replaceInRanges(ranges, data, item, observable) {\n\t for (var idx = 0; idx < ranges.length; idx++) {\n\t if (ranges[idx].data === data) {\n\t break;\n\t }\n\t if (replaceInRange(ranges[idx].data, item, observable)) {\n\t break;\n\t }\n\t }\n\t }\n\n\t function replaceInRange(items, item, observable) {\n\t for (var idx = 0, length = items.length; idx < length; idx++) {\n\t if (items[idx] && items[idx].hasSubgroups) {\n\t return replaceInRange(items[idx].items, item, observable);\n\t } else if (items[idx] === item || items[idx] === observable) {\n\t items[idx] = observable;\n\t return true;\n\t }\n\t }\n\t }\n\n\t function replaceWithObservable(view, data, ranges, type, serverGrouping) {\n\t for (var viewIndex = 0, length = view.length; viewIndex < length; viewIndex++) {\n\t var item = view[viewIndex];\n\n\t if (!item || item instanceof type) {\n\t continue;\n\t }\n\n\t if (item.hasSubgroups !== undefined && !serverGrouping) {\n\t replaceWithObservable(item.items, data, ranges, type, serverGrouping);\n\t } else {\n\t for (var idx = 0; idx < data.length; idx++) {\n\t if (data[idx] === item) {\n\t view[viewIndex] = data.at(idx);\n\t replaceInRanges(ranges, data, item, view[viewIndex]);\n\t break;\n\t }\n\t }\n\t }\n\t }\n\t }\n\n\t function removeModel(data, model) {\n\t if (!data) {\n\t return;\n\t }\n\t var length = data.length;\n\t var dataItem;\n\t var idx;\n\n\t for (idx = 0; idx < length; idx++) {\n\t dataItem = data[idx];\n\n\t if (dataItem.uid && dataItem.uid == model.uid) {\n\t data.splice(idx, 1);\n\t return dataItem;\n\t }\n\t }\n\t }\n\n\t function indexOfPristineModel(data, model) {\n\t if (model) {\n\t return indexOf(data, function(item) {\n\t return (item.uid && item.uid == model.uid) || (item[model.idField] === model.id && model.id !== model._defaultId);\n\t });\n\t }\n\t return -1;\n\t }\n\n\t function indexOfModel(data, model) {\n\t if (model) {\n\t return indexOf(data, function(item) {\n\t return item.uid == model.uid;\n\t });\n\t }\n\t return -1;\n\t }\n\n\t function indexOf(data, comparer) {\n\t var idx, length;\n\t if (!data) {\n\t return;\n\t }\n\n\t for (idx = 0, length = data.length; idx < length; idx++) {\n\t if (comparer(data[idx])) {\n\t return idx;\n\t }\n\t }\n\n\t return -1;\n\t }\n\n\t function fieldNameFromModel(fields, name) {\n\t if (fields && !isEmptyObject(fields)) {\n\t var descriptor = fields[name];\n\t var fieldName;\n\t if (isPlainObject(descriptor)) {\n\t fieldName = descriptor.from || descriptor.field || name;\n\t } else {\n\t fieldName = fields[name] || name;\n\t }\n\n\t if (isFunction(fieldName)) {\n\t return name;\n\t }\n\n\t return fieldName;\n\t }\n\t return name;\n\t }\n\n\t function convertFilterDescriptorsField(descriptor, model) {\n\t var idx,\n\t length,\n\t target = {};\n\n\t for (var field in descriptor) {\n\t if (field !== \"filters\") {\n\t target[field] = descriptor[field];\n\t }\n\t }\n\n\t if (descriptor.filters) {\n\t target.filters = [];\n\t for (idx = 0, length = descriptor.filters.length; idx < length; idx++) {\n\t target.filters[idx] = convertFilterDescriptorsField(descriptor.filters[idx], model);\n\t }\n\t } else {\n\t target.field = fieldNameFromModel(model.fields, target.field);\n\t }\n\t return target;\n\t }\n\n\t function convertDescriptorsField(descriptors, model) {\n\t var idx,\n\t length,\n\t result = [],\n\t target,\n\t descriptor;\n\n\t for (idx = 0, length = descriptors.length; idx < length; idx ++) {\n\t target = {};\n\n\t descriptor = descriptors[idx];\n\n\t for (var field in descriptor) {\n\t target[field] = descriptor[field];\n\t }\n\n\t target.field = fieldNameFromModel(model.fields, target.field);\n\n\t if (target.aggregates && isArray(target.aggregates)) {\n\t target.aggregates = convertDescriptorsField(target.aggregates, model);\n\t }\n\t result.push(target);\n\t }\n\t return result;\n\t }\n\n\t var DataSource = Observable.extend({\n\t init: function(options) {\n\t var that = this, model, data;\n\n\t if (options) {\n\t data = options.data;\n\t }\n\n\t options = that.options = extend({}, that.options, options);\n\n\t that._map = {};\n\t that._prefetch = {};\n\t that._data = [];\n\t that._pristineData = [];\n\t that._ranges = [];\n\t that._view = [];\n\t that._pristineTotal = 0;\n\t that._destroyed = [];\n\t that._pageSize = options.pageSize;\n\t that._page = options.page || (options.pageSize ? 1 : undefined);\n\t that._sort = normalizeSort(options.sort);\n\t that._filter = normalizeFilter(options.filter);\n\t that._group = normalizeGroup(options.group);\n\t that._aggregate = options.aggregate;\n\t that._total = options.total;\n\t that._groupPaging = options.groupPaging;\n\n\t if (that._groupPaging) {\n\t that._groupsState = {};\n\t }\n\t that._shouldDetachObservableParents = true;\n\n\t Observable.fn.init.call(that);\n\n\t that.transport = Transport.create(options, data, that);\n\n\t if (isFunction(that.transport.push)) {\n\t that.transport.push({\n\t pushCreate: proxy(that._pushCreate, that),\n\t pushUpdate: proxy(that._pushUpdate, that),\n\t pushDestroy: proxy(that._pushDestroy, that)\n\t });\n\t }\n\n\t if (options.offlineStorage != null) {\n\t if (typeof options.offlineStorage == \"string\") {\n\t var key = options.offlineStorage;\n\n\t that._storage = {\n\t getItem: function() {\n\t return JSON.parse(localStorage.getItem(key));\n\t },\n\t setItem: function(item) {\n\t localStorage.setItem(key, stringify(that.reader.serialize(item)));\n\t }\n\t };\n\t } else {\n\t that._storage = options.offlineStorage;\n\t }\n\t }\n\n\t that.reader = new kendo.data.readers[options.schema.type || \"json\" ](options.schema);\n\n\t model = that.reader.model || {};\n\n\t that._detachObservableParents();\n\n\t that._data = that._observe(that._data);\n\t that._online = true;\n\n\t that.bind([\"push\", ERROR, CHANGE, REQUESTSTART, SYNC, REQUESTEND, PROGRESS], options);\n\t },\n\n\t options: {\n\t data: null,\n\t schema: {\n\t modelBase: Model\n\t },\n\t offlineStorage: null,\n\t serverSorting: false,\n\t serverPaging: false,\n\t serverFiltering: false,\n\t serverGrouping: false,\n\t serverAggregates: false,\n\t batch: false,\n\t inPlaceSort: false\n\t },\n\n\t clone: function() {\n\t return this;\n\t },\n\n\t online: function(value) {\n\t if (value !== undefined) {\n\t if (this._online != value) {\n\t this._online = value;\n\n\t if (value) {\n\t return this.sync();\n\t }\n\t }\n\n\t return $.Deferred().resolve().promise();\n\t } else {\n\t return this._online;\n\t }\n\t },\n\n\t offlineData: function(state) {\n\t if (this.options.offlineStorage == null) {\n\t return null;\n\t }\n\n\t if (state !== undefined) {\n\t return this._storage.setItem(state);\n\t }\n\n\t return this._storage.getItem() || [];\n\t },\n\n\t _isServerGrouped: function() {\n\t var group = this.group() || [];\n\n\t return this.options.serverGrouping && group.length;\n\t },\n\n\t _isServerGroupPaged: function(){\n\t return this._isServerGrouped() && this._groupPaging;\n\t },\n\n\t _isGroupPaged: function(){\n\t var group = this.group() || [];\n\n\t return this._groupPaging && group.length;\n\t },\n\n\t _pushCreate: function(result) {\n\t this._push(result, \"pushCreate\");\n\t },\n\n\t _pushUpdate: function(result) {\n\t this._push(result, \"pushUpdate\");\n\t },\n\n\t _pushDestroy: function(result) {\n\t this._push(result, \"pushDestroy\");\n\t },\n\n\t _push: function(result, operation) {\n\t var data = this._readData(result);\n\n\t if (!data) {\n\t data = result;\n\t }\n\n\t this[operation](data);\n\t },\n\n\t _flatData: function(data, skip) {\n\t if (data) {\n\t if (this._isServerGrouped()) {\n\t return flattenGroups(data);\n\t }\n\n\t if (!skip) {\n\t for (var idx = 0; idx < data.length; idx++) {\n\t data.at(idx);\n\t }\n\t }\n\t }\n\n\t return data;\n\t },\n\n\t parent: noop,\n\n\t get: function(id) {\n\t var idx, length, data = this._flatData(this._data, this.options.useRanges);\n\n\t for (idx = 0, length = data.length; idx < length; idx++) {\n\t if (data[idx].id == id) {\n\t return data[idx];\n\t }\n\t }\n\t },\n\n\t getByUid: function(id) {\n\t return this._getByUid(id, this._data);\n\t },\n\n\t _getByUid: function(id, dataItems) {\n\t var idx, length, data = this._flatData(dataItems, this.options.useRanges);\n\n\t if (!data) {\n\t return;\n\t }\n\n\t for (idx = 0, length = data.length; idx < length; idx++) {\n\t if (data[idx].uid == id) {\n\t return data[idx];\n\t }\n\t }\n\t },\n\n\t indexOf: function(model) {\n\t return indexOfModel(this._data, model);\n\t },\n\n\t at: function(index) {\n\t return this._data.at(index);\n\t },\n\n\t data: function(value) {\n\t var that = this;\n\t if (value !== undefined) {\n\t that._detachObservableParents();\n\t that._data = this._observe(value);\n\n\t that._pristineData = value.slice(0);\n\n\t that._storeData();\n\n\t that._ranges = [];\n\t that.trigger(\"reset\");\n\t that._addRange(that._data);\n\n\t that._total = that._data.length;\n\t that._pristineTotal = that._total;\n\n\t that._process(that._data);\n\t } else {\n\t if (that._data) {\n\t for (var idx = 0; idx < that._data.length; idx++) {\n\t that._data.at(idx);\n\t }\n\t }\n\n\t return that._data;\n\t }\n\t },\n\n\t view: function(value) {\n\t if (value === undefined) {\n\t return this._view;\n\t } else {\n\t this._view = this._observeView(value);\n\t }\n\t },\n\n\t _observeView: function(data) {\n\t var that = this;\n\t replaceWithObservable(data, that._data, that._ranges, that.reader.model || ObservableObject, that._isServerGrouped());\n\n\t var view = new LazyObservableArray(data, that.reader.model);\n\t view.parent = function() { return that.parent(); };\n\t return view;\n\t },\n\n\t flatView: function() {\n\t var groups = this.group() || [];\n\n\t if (groups.length) {\n\t return flattenGroups(this._view);\n\t } else {\n\t return this._view;\n\t }\n\t },\n\n\t add: function(model) {\n\t return this.insert(this._data.length, model);\n\t },\n\n\t _createNewModel: function(model) {\n\t if (this.reader.model) {\n\t return new this.reader.model(model);\n\t }\n\n\t if (model instanceof ObservableObject) {\n\t return model;\n\t }\n\n\t return new ObservableObject(model);\n\t },\n\n\t insert: function(index, model) {\n\t if (!model) {\n\t model = index;\n\t index = 0;\n\t }\n\n\t if (!(model instanceof Model)) {\n\t model = this._createNewModel(model);\n\t }\n\n\t if (this._isServerGrouped()) {\n\t this._data.splice(index, 0, this._wrapInEmptyGroup(model));\n\t } else {\n\t this._data.splice(index, 0, model);\n\t }\n\n\t this._insertModelInRange(index, model);\n\n\t return model;\n\t },\n\n\t pushInsert: function(index, items) {\n\t var that = this;\n\t var rangeSpan = that._getCurrentRangeSpan();\n\n\t if (!items) {\n\t items = index;\n\t index = 0;\n\t }\n\n\t if (!isArray(items)) {\n\t items = [items];\n\t }\n\n\t var pushed = [];\n\t var autoSync = this.options.autoSync;\n\t this.options.autoSync = false;\n\n\t try {\n\t for (var idx = 0; idx < items.length; idx ++) {\n\t var item = items[idx];\n\n\t var result = this.insert(index, item);\n\n\t pushed.push(result);\n\n\t var pristine = result.toJSON();\n\n\t if (this._isServerGrouped()) {\n\t pristine = this._wrapInEmptyGroup(pristine);\n\t }\n\n\t this._pristineData.push(pristine);\n\n\t if (rangeSpan && rangeSpan.length) {\n\t $(rangeSpan).last()[0].pristineData.push(pristine);\n\t }\n\n\t index++;\n\t }\n\t } finally {\n\t this.options.autoSync = autoSync;\n\t }\n\n\t if (pushed.length) {\n\t this.trigger(\"push\", {\n\t type: \"create\",\n\t items: pushed\n\t });\n\t }\n\t },\n\n\t pushCreate: function(items) {\n\t this.pushInsert(this._data.length, items);\n\t },\n\n\t pushUpdate: function(items) {\n\t if (!isArray(items)) {\n\t items = [items];\n\t }\n\n\t var pushed = [];\n\n\t for (var idx = 0; idx < items.length; idx ++) {\n\t var item = items[idx];\n\t var model = this._createNewModel(item);\n\n\t var target = this.get(model.id);\n\n\t if (target) {\n\t pushed.push(target);\n\n\t target.accept(item);\n\n\t target.trigger(CHANGE);\n\n\t this._updatePristineForModel(target, item);\n\t } else {\n\t this.pushCreate(item);\n\t }\n\t }\n\n\t if (pushed.length) {\n\t this.trigger(\"push\", {\n\t type: \"update\",\n\t items: pushed\n\t });\n\t }\n\t },\n\n\t pushDestroy: function(items) {\n\t var pushed = this._removeItems(items);\n\n\t if (pushed.length) {\n\t this.trigger(\"push\", {\n\t type: \"destroy\",\n\t items: pushed\n\t });\n\t }\n\t },\n\n\t _removeItems: function(items, removePristine) {\n\t if (!isArray(items)) {\n\t items = [items];\n\t }\n\n\t var shouldRemovePristine = typeof removePristine !== \"undefined\" ? removePristine : true;\n\n\t var destroyed = [];\n\t var autoSync = this.options.autoSync;\n\t this.options.autoSync = false;\n\t try {\n\t for (var idx = 0; idx < items.length; idx ++) {\n\t var item = items[idx];\n\t var model = this._createNewModel(item);\n\t var found = false;\n\n\t this._eachItem(this._data, function(items){\n\t for (var idx = 0; idx < items.length; idx++) {\n\t var item = items.at(idx);\n\t if (item.id === model.id) {\n\t destroyed.push(item);\n\t items.splice(idx, 1);\n\t found = true;\n\t break;\n\t }\n\t }\n\t });\n\n\t if (found && shouldRemovePristine) {\n\t this._removePristineForModel(model);\n\t this._destroyed.pop();\n\t }\n\t }\n\t } finally {\n\t this.options.autoSync = autoSync;\n\t }\n\n\t return destroyed;\n\t },\n\n\t remove: function(model) {\n\t var result,\n\t that = this,\n\t hasGroups = that._isServerGrouped();\n\n\t this._eachItem(that._data, function(items) {\n\t result = removeModel(items, model);\n\n\t if (result && hasGroups) {\n\t if (!result.isNew || !result.isNew()) {\n\t that._destroyed.push(result);\n\t }\n\t return true;\n\t }\n\t });\n\n\t this._removeModelFromRanges(model);\n\n\t return model;\n\t },\n\n\t destroyed: function() {\n\t return this._destroyed;\n\t },\n\n\t created: function() {\n\t var idx,\n\t length,\n\t result = [],\n\t data = this._flatData(this._data, this.options.useRanges);\n\n\t for (idx = 0, length = data.length; idx < length; idx++) {\n\t if (data[idx].isNew && data[idx].isNew()) {\n\t result.push(data[idx]);\n\t }\n\t }\n\t return result;\n\t },\n\n\t updated: function() {\n\t var idx,\n\t length,\n\t result = [],\n\t data = this._flatData(this._data, this.options.useRanges);\n\n\t for (idx = 0, length = data.length; idx < length; idx++) {\n\t if ((data[idx].isNew && !data[idx].isNew()) && data[idx].dirty) {\n\t result.push(data[idx]);\n\t }\n\t }\n\t return result;\n\t },\n\n\t sync: function() {\n\t var that = this,\n\t created = [],\n\t updated = [],\n\t destroyed = that._destroyed;\n\n\t var promise = $.Deferred().resolve().promise();\n\n\t if (that.online()) {\n\n\t if (!that.reader.model) {\n\t return promise;\n\t }\n\n\t created = that.created();\n\t updated = that.updated();\n\n\t var promises = [];\n\n\t if (that.options.batch && that.transport.submit) {\n\t promises = that._sendSubmit(created, updated, destroyed);\n\t } else {\n\t promises.push.apply(promises, that._send(\"create\", created));\n\t promises.push.apply(promises, that._send(\"update\", updated));\n\t promises.push.apply(promises, that._send(\"destroy\", destroyed));\n\t }\n\n\t promise = $.when\n\t .apply(null, promises)\n\t .then(function() {\n\t var idx, length;\n\n\t for (idx = 0, length = arguments.length; idx < length; idx++){\n\t if (arguments[idx]) {\n\t that._accept(arguments[idx]);\n\t }\n\t }\n\n\t that._storeData(true);\n\n\t that._syncEnd();\n\n\t that._change({ action: \"sync\" });\n\n\t that.trigger(SYNC);\n\n\t if (that._isServerGroupPaged()) {\n\t that.read();\n\t }\n\t });\n\t } else {\n\t that._storeData(true);\n\n\t that._syncEnd();\n\n\t that._change({ action: \"sync\" });\n\t }\n\n\t return promise;\n\t },\n\n\t _syncEnd: noop,\n\n\t cancelChanges: function(model) {\n\t var that = this;\n\n\t if (model instanceof kendo.data.Model) {\n\t that._cancelModel(model);\n\t } else {\n\t that._destroyed = [];\n\t that._detachObservableParents();\n\t that._data = that._observe(that._pristineData);\n\t if (that.options.serverPaging) {\n\t that._total = that._pristineTotal;\n\t }\n\n\t that._ranges = [];\n\t that._addRange(that._data, 0);\n\n\t that._changesCanceled();\n\n\t that._change();\n\n\t that._markOfflineUpdatesAsDirty();\n\n\t if (that._isServerGrouped()) {\n\t that.read();\n\t }\n\t }\n\t },\n\n\t _changesCanceled: noop,\n\n\t _markOfflineUpdatesAsDirty: function() {\n\t var that = this;\n\n\t if (that.options.offlineStorage != null) {\n\t that._eachItem(that._data, function(items) {\n\t for (var idx = 0; idx < items.length; idx++) {\n\t var item = items.at(idx);\n\t if (item.__state__ == \"update\" || item.__state__ == \"create\") {\n\t item.dirty = true;\n\t }\n\t }\n\t });\n\t }\n\t },\n\n\t hasChanges: function() {\n\t var idx,\n\t length,\n\t data = this._flatData(this._data, this.options.useRanges);\n\n\t if (this._destroyed.length) {\n\t return true;\n\t }\n\n\t for (idx = 0, length = data.length; idx < length; idx++) {\n\t if ((data[idx].isNew && data[idx].isNew()) || data[idx].dirty) {\n\t return true;\n\t }\n\t }\n\n\t return false;\n\t },\n\n\t _accept: function(result) {\n\t var that = this,\n\t models = result.models,\n\t response = result.response,\n\t idx = 0,\n\t serverGroup = that._isServerGrouped(),\n\t pristine = that._pristineData,\n\t type = result.type,\n\t length;\n\n\t that.trigger(REQUESTEND, { response: response, type: type });\n\n\t if (response && !isEmptyObject(response)) {\n\t response = that.reader.parse(response);\n\n\t if (that._handleCustomErrors(response)) {\n\t return;\n\t }\n\n\t response = that.reader.data(response);\n\n\t if (!isArray(response)) {\n\t response = [response];\n\t }\n\t } else {\n\t response = $.map(models, function(model) { return model.toJSON(); } );\n\t }\n\n\t if (type === \"destroy\") {\n\t that._destroyed = [];\n\t }\n\n\t for (idx = 0, length = models.length; idx < length; idx++) {\n\t if (type !== \"destroy\") {\n\t models[idx].accept(response[idx]);\n\n\t if (type === \"create\") {\n\t pristine.push(serverGroup ? that._wrapInEmptyGroup(models[idx].toJSON()) : response[idx]);\n\t } else if (type === \"update\") {\n\t that._updatePristineForModel(models[idx], response[idx]);\n\t }\n\t } else {\n\t that._removePristineForModel(models[idx]);\n\t }\n\t }\n\t },\n\n\t _updatePristineForModel: function(model, values) {\n\t this._executeOnPristineForModel(model, function(index, items) {\n\t kendo.deepExtend(items[index], values);\n\t });\n\t },\n\n\t _executeOnPristineForModel: function(model, callback) {\n\t this._eachPristineItem(\n\t function(items) {\n\t var index = indexOfPristineModel(items, model);\n\t if (index > -1) {\n\t callback(index, items);\n\t return true;\n\t }\n\t });\n\t },\n\n\t _removePristineForModel: function(model) {\n\t this._executeOnPristineForModel(model, function(index, items) {\n\t items.splice(index, 1);\n\t });\n\t },\n\n\t _readData: function(data) {\n\t var read = !this._isServerGrouped() ? this.reader.data : this.reader.groups;\n\t return read.call(this.reader, data);\n\t },\n\n\t _eachPristineItem: function(callback) {\n\t var that = this;\n\t var options = that.options;\n\t var rangeSpan = that._getCurrentRangeSpan();\n\n\t that._eachItem(that._pristineData, callback);\n\n\t if (options.serverPaging && options.useRanges) {\n\t each(rangeSpan, function(i, range) {\n\t that._eachItem(range.pristineData, callback);\n\t });\n\t }\n\t },\n\n\t _eachItem: function(data, callback) {\n\t if (data && data.length) {\n\t if (this._isServerGrouped()) {\n\t eachGroupItems(data, callback);\n\t } else {\n\t callback(data);\n\t }\n\t }\n\t },\n\n\t _pristineForModel: function(model) {\n\t var pristine,\n\t idx,\n\t callback = function(items) {\n\t idx = indexOfPristineModel(items, model);\n\t if (idx > -1) {\n\t pristine = items[idx];\n\t return true;\n\t }\n\t };\n\n\t this._eachPristineItem(callback);\n\n\t return pristine;\n\t },\n\n\t _cancelModel: function(model) {\n\t var that = this;\n\t var pristine = this._pristineForModel(model);\n\n\t this._eachItem(this._data, function(items) {\n\t var idx = indexOfModel(items, model);\n\t if (idx >= 0) {\n\t if (pristine && (!model.isNew() || pristine.__state__)) {\n\t items[idx].accept(pristine);\n\n\t if (pristine.__state__ == \"update\") {\n\t items[idx].dirty = true;\n\t }\n\n\t } else {\n\t that._modelCanceled(model);\n\n\t items.splice(idx, 1);\n\n\t that._removeModelFromRanges(model);\n\t }\n\t }\n\t });\n\t },\n\n\t _modelCanceled: noop,\n\n\t _submit: function(promises, data) {\n\t var that = this;\n\n\t that.trigger(REQUESTSTART, { type: \"submit\" });\n\n\t that.trigger(PROGRESS);\n\n\t that.transport.submit(extend({\n\t success: function(response, type) {\n\t var promise = $.grep(promises, function(x) {\n\t return x.type == type;\n\t })[0];\n\n\t if (promise) {\n\t promise.resolve({\n\t response: response,\n\t models: promise.models,\n\t type: type\n\t });\n\t }\n\t },\n\t error: function(response, status, error) {\n\t for (var idx = 0; idx < promises.length; idx++) {\n\t promises[idx].reject(response);\n\t }\n\n\t that.error(response, status, error);\n\t }\n\t }, data));\n\t },\n\n\t _sendSubmit: function(created, updated, destroyed) {\n\t var that = this,\n\t promises = [];\n\n\t if (that.options.batch) {\n\t if (created.length) {\n\t promises.push($.Deferred(function(deferred) {\n\t deferred.type = \"create\";\n\t deferred.models = created;\n\t }));\n\t }\n\n\t if (updated.length) {\n\t promises.push($.Deferred(function(deferred) {\n\t deferred.type = \"update\";\n\t deferred.models = updated;\n\t }));\n\t }\n\n\t if (destroyed.length) {\n\t promises.push($.Deferred(function(deferred) {\n\t deferred.type = \"destroy\";\n\t deferred.models = destroyed;\n\t }));\n\t }\n\n\t that._submit(promises, {\n\t data: {\n\t created: that.reader.serialize(toJSON(created)),\n\t updated: that.reader.serialize(toJSON(updated)),\n\t destroyed: that.reader.serialize(toJSON(destroyed))\n\t }\n\t });\n\t }\n\n\t return promises;\n\t },\n\n\t _promise: function(data, models, type) {\n\t var that = this;\n\n\t return $.Deferred(function(deferred) {\n\t that.trigger(REQUESTSTART, { type: type });\n\n\t that.trigger(PROGRESS);\n\n\t that.transport[type].call(that.transport, extend({\n\t success: function(response) {\n\t deferred.resolve({\n\t response: response,\n\t models: models,\n\t type: type\n\t });\n\t },\n\t error: function(response, status, error) {\n\t deferred.reject(response);\n\t that.error(response, status, error);\n\t }\n\t }, data));\n\t }).promise();\n\t },\n\n\t _send: function(method, data) {\n\t var that = this,\n\t idx,\n\t length,\n\t promises = [],\n\t converted = that.reader.serialize(toJSON(data));\n\n\t if (that.options.batch) {\n\t if (data.length) {\n\t promises.push(that._promise( { data: { models: converted } }, data , method));\n\t }\n\t } else {\n\t for (idx = 0, length = data.length; idx < length; idx++) {\n\t promises.push(that._promise( { data: converted[idx] }, [ data[idx] ], method));\n\t }\n\t }\n\n\t return promises;\n\t },\n\n\t read: function(data) {\n\t var that = this, params = that._params(data);\n\t var deferred = $.Deferred();\n\n\t that._queueRequest(params, function() {\n\t var isPrevented = that.trigger(REQUESTSTART, { type: \"read\" });\n\t if (!isPrevented) {\n\t that.trigger(PROGRESS);\n\n\t that._ranges = [];\n\t that.trigger(\"reset\");\n\t if (that.online()) {\n\t that.transport.read({\n\t data: params,\n\t success: function(data) {\n\t that._ranges = [];\n\t that.success(data, params);\n\n\t deferred.resolve();\n\t },\n\t error: function() {\n\t var args = slice.call(arguments);\n\n\t that.error.apply(that, args);\n\n\t deferred.reject.apply(deferred, args);\n\t }\n\t });\n\t } else if (that.options.offlineStorage != null){\n\t that.success(that.offlineData(), params);\n\n\t deferred.resolve();\n\t }\n\t } else {\n\t that._dequeueRequest();\n\n\t deferred.resolve(isPrevented);\n\t }\n\t });\n\n\t return deferred.promise();\n\t },\n\n\t _readAggregates: function(data) {\n\t return this.reader.aggregates(data);\n\t },\n\n\t success: function(data) {\n\t var that = this,\n\t options = that.options,\n\t items,\n\t replaceSubset;\n\n\t that.trigger(REQUESTEND, { response: data, type: \"read\" });\n\n\t if (that.online()) {\n\t data = that.reader.parse(data);\n\n\t if (that._handleCustomErrors(data)) {\n\t that._dequeueRequest();\n\t return;\n\t }\n\n\t that._total = that.reader.total(data);\n\n\t if (that._isServerGroupPaged()) {\n\t that._serverGroupsTotal = that._total;\n\t }\n\n\t if (that._pageSize > that._total) {\n\t that._pageSize = that._total;\n\t if (that.options.pageSize && that.options.pageSize > that._pageSize) {\n\t that._pageSize = that.options.pageSize;\n\t }\n\t }\n\n\t if (that._aggregate && options.serverAggregates) {\n\t that._aggregateResult = that._readAggregates(data);\n\t }\n\n\t data = that._readData(data);\n\n\t that._destroyed = [];\n\t } else {\n\t data = that._readData(data);\n\n\t items = [];\n\t var itemIds = {};\n\t var model = that.reader.model;\n\t var idField = model ? model.idField : \"id\";\n\t var idx;\n\n\t for (idx = 0; idx < this._destroyed.length; idx++) {\n\t var id = this._destroyed[idx][idField];\n\t itemIds[id] = id;\n\t }\n\n\t for (idx = 0; idx < data.length; idx++) {\n\t var item = data[idx];\n\t var state = item.__state__;\n\t if (state == \"destroy\") {\n\t if (!itemIds[item[idField]]) {\n\t this._destroyed.push(this._createNewModel(item));\n\t }\n\t } else {\n\t items.push(item);\n\t }\n\t }\n\n\t data = items;\n\n\t that._total = data.length;\n\t }\n\n\t that._pristineTotal = that._total;\n\t replaceSubset = that._skip && that._data.length && that._skip < that._data.length;\n\n\t if (that.options.endless) {\n\t if (replaceSubset) {\n\t that._pristineData.splice(that._skip, that._pristineData.length);\n\t }\n\t items = data.slice(0);\n\t for (var j = 0; j < items.length; j++) {\n\t that._pristineData.push(items[j]);\n\t }\n\t } else {\n\t that._pristineData = data.slice(0);\n\t }\n\n\t that._detachObservableParents();\n\n\t if (that.options.endless) {\n\t that._data.unbind(CHANGE, that._changeHandler);\n\n\t if (that._isServerGrouped() && that._data[that._data.length - 1].value === data[0].value) {\n\t fillLastGroup(that._data[that._data.length - 1], data[0]);\n\t data.shift();\n\t }\n\n\t data = that._observe(data);\n\t if (replaceSubset) {\n\t that._data.splice(that._skip, that._data.length);\n\t }\n\t for (var i = 0; i < data.length; i++) {\n\t that._data.push(data[i]);\n\t }\n\t that._data.bind(CHANGE, that._changeHandler);\n\t } else {\n\t that._data = that._observe(data);\n\t }\n\n\t that._markOfflineUpdatesAsDirty();\n\n\t that._storeData();\n\n\t that._addRange(that._data);\n\n\t that._process(that._data);\n\n\t that._dequeueRequest();\n\t },\n\n\t _detachObservableParents: function() {\n\t if (this._data && this._shouldDetachObservableParents) {\n\t for (var idx = 0; idx < this._data.length; idx++) {\n\t if (this._data[idx].parent) {\n\t this._data[idx].parent = noop;\n\t }\n\t }\n\t }\n\t },\n\n\t _storeData: function(updatePristine) {\n\t var serverGrouping = this._isServerGrouped();\n\t var model = this.reader.model;\n\n\t function items(data) {\n\t var state = [];\n\n\t for (var idx = 0; idx < data.length; idx++) {\n\t var dataItem = data.at(idx);\n\t var item = dataItem.toJSON();\n\n\t if (serverGrouping && dataItem.items) {\n\t item.items = items(dataItem.items);\n\t } else {\n\t item.uid = dataItem.uid;\n\n\t if (model) {\n\t if (dataItem.isNew()) {\n\t item.__state__ = \"create\";\n\t } else if (dataItem.dirty) {\n\t item.__state__ = \"update\";\n\t }\n\t }\n\t }\n\t state.push(item);\n\t }\n\n\t return state;\n\t }\n\n\t if (this.options.offlineStorage != null) {\n\t var state = items(this._data);\n\n\t var destroyed = [];\n\n\t for (var idx = 0; idx < this._destroyed.length; idx++) {\n\t var item = this._destroyed[idx].toJSON();\n\t item.__state__ = \"destroy\";\n\t destroyed.push(item);\n\t }\n\n\t this.offlineData(state.concat(destroyed));\n\n\t if (updatePristine) {\n\t this._pristineData = this.reader.reader ? this.reader.reader._wrapDataAccessBase(state) : this.reader._wrapDataAccessBase(state);\n\t }\n\t }\n\t },\n\n\t _addRange: function (data, skip) {\n\t var that = this,\n\t start = typeof (skip) !== \"undefined\" ? skip : (that._skip || 0),\n\t end,\n\t range = {\n\t data: data,\n\t pristineData: data.toJSON(),\n\t timestamp: that._timeStamp()\n\t };\n\n\t if (this._isGroupPaged()) {\n\t end = start + data.length;\n\t range.outerStart = start;\n\t range.outerEnd = end;\n\t } else {\n\t end = start + that._flatData(data, true).length;\n\t }\n\n\t range.start = start;\n\t range.end = end;\n\t that._ranges.push(range);\n\t that._sortRanges();\n\n\t if (that._isGroupPaged()) {\n\t if (!that._groupsFlat) {\n\t that._groupsFlat = [];\n\t }\n\t that._appendToGroupsFlat(range.data);\n\t that._updateOuterRangesLength();\n\t }\n\t },\n\n\t _appendToGroupsFlat: function (data) {\n\t var length = data.length;\n\n\t for (var i = 0; i < length; i++) {\n\t this._groupsFlat.push(data[i]);\n\t }\n\t },\n\n\t _getGroupByUid: function(uid){\n\t var length = this._groupsFlat.length;\n\t var group;\n\n\t for (var i = 0; i < length; i++) {\n\t group = this._groupsFlat[i];\n\t if (group.uid === uid) {\n\t return group;\n\t }\n\t }\n\t },\n\n\t _sortRanges: function() {\n\t this._ranges.sort(function(x, y) {\n\t return x.start - y.start;\n\t });\n\t },\n\n\t error: function(xhr, status, errorThrown) {\n\t this._dequeueRequest();\n\t this.trigger(REQUESTEND, { });\n\t this.trigger(ERROR, { xhr: xhr, status: status, errorThrown: errorThrown });\n\t },\n\n\t _params: function(data) {\n\t var that = this,\n\t options = extend({\n\t take: that.take(),\n\t skip: that.skip(),\n\t page: that.page(),\n\t pageSize: that.pageSize(),\n\t sort: that._sort,\n\t filter: that._filter,\n\t group: that._group,\n\t aggregate: that._aggregate,\n\t groupPaging: !!that._groupPaging\n\t }, data);\n\n\t if (!that.options.serverPaging) {\n\t delete options.take;\n\t delete options.skip;\n\t delete options.page;\n\t delete options.pageSize;\n\t }\n\n\t if (!that.options.serverGrouping) {\n\t delete options.group;\n\t } else if (that.reader.model && options.group) {\n\t options.group = convertDescriptorsField(options.group, that.reader.model);\n\t }\n\n\t if (!that.options.serverFiltering) {\n\t delete options.filter;\n\t } else if (that.reader.model && options.filter) {\n\t options.filter = convertFilterDescriptorsField(options.filter, that.reader.model);\n\t }\n\n\t if (!that.options.serverSorting) {\n\t delete options.sort;\n\t } else if (that.reader.model && options.sort) {\n\t options.sort = convertDescriptorsField(options.sort, that.reader.model);\n\t }\n\n\t if (!that.options.serverAggregates) {\n\t delete options.aggregate;\n\t } else if (that.reader.model && options.aggregate) {\n\t options.aggregate = convertDescriptorsField(options.aggregate, that.reader.model);\n\t }\n\n\t if (!that.options.groupPaging) {\n\t delete options.groupPaging;\n\t }\n\n\t return options;\n\t },\n\n\t _queueRequest: function(options, callback) {\n\t var that = this;\n\t if (!that._requestInProgress) {\n\t that._requestInProgress = true;\n\t that._pending = undefined;\n\t callback();\n\t } else {\n\t that._pending = { callback: proxy(callback, that), options: options };\n\t }\n\t },\n\n\t _dequeueRequest: function() {\n\t var that = this;\n\t that._requestInProgress = false;\n\t if (that._pending) {\n\t that._queueRequest(that._pending.options, that._pending.callback);\n\t }\n\t },\n\n\t _handleCustomErrors: function(response) {\n\t if (this.reader.errors) {\n\t var errors = this.reader.errors(response);\n\t if (errors) {\n\t this.trigger(ERROR, { xhr: null, status: \"customerror\", errorThrown: \"custom error\", errors: errors });\n\t return true;\n\t }\n\t }\n\t return false;\n\t },\n\n\t _shouldWrap: function(data) {\n\t var model = this.reader.model;\n\n\t if (model && data.length) {\n\t return !(data[0] instanceof model);\n\t }\n\n\t return false;\n\t },\n\n\t _observe: function(data) {\n\t var that = this,\n\t model = that.reader.model;\n\n\t that._shouldDetachObservableParents = true;\n\n\t if (data instanceof ObservableArray) {\n\t that._shouldDetachObservableParents = false;\n\t if (that._shouldWrap(data)) {\n\t data.type = that.reader.model;\n\t data.wrapAll(data, data);\n\t }\n\t } else {\n\t var arrayType = that.pageSize() && !that.options.serverPaging ? LazyObservableArray : ObservableArray;\n\t data = new arrayType(data, that.reader.model);\n\t data.parent = function() { return that.parent(); };\n\t }\n\n\t if (that._isServerGrouped()) {\n\t wrapGroupItems(data, model);\n\t }\n\n\t if (that._changeHandler && that._data && that._data instanceof ObservableArray &&\n\t !(that.options.useRanges && that.options.serverPaging)) {\n\t that._data.unbind(CHANGE, that._changeHandler);\n\t } else {\n\t that._changeHandler = proxy(that._change, that);\n\t }\n\n\t return data.bind(CHANGE, that._changeHandler);\n\t },\n\n\t _updateTotalForAction: function(action, items) {\n\t var that = this;\n\n\t var total = parseInt(that._total, 10);\n\n\t if (!isNumber(that._total)) {\n\t total = parseInt(that._pristineTotal, 10);\n\t }\n\t if (action === \"add\") {\n\t total += items.length;\n\t } else if (action === \"remove\") {\n\t total -= items.length;\n\t } else if (action !== \"itemchange\" && action !== \"sync\" && !that.options.serverPaging) {\n\t total = that._pristineTotal;\n\t } else if (action === \"sync\") {\n\t total = that._pristineTotal = parseInt(that._total, 10);\n\t }\n\n\t that._total = total;\n\t },\n\n\t _change: function(e) {\n\t var that = this, idx, length, action = e ? e.action : \"\";\n\n\t if (action === \"remove\") {\n\t for (idx = 0, length = e.items.length; idx < length; idx++) {\n\t if (!e.items[idx].isNew || !e.items[idx].isNew()) {\n\t that._destroyed.push(e.items[idx]);\n\t }\n\t }\n\t }\n\n\t if (that.options.autoSync && (action === \"add\" || action === \"remove\" || action === \"itemchange\")) {\n\n\t var handler = function(args) {\n\t if (args.action === \"sync\") {\n\t that.unbind(\"change\", handler);\n\t that._updateTotalForAction(action, e.items);\n\t }\n\t };\n\n\t that.first(\"change\", handler);\n\n\t that.sync();\n\n\t } else {\n\t that._updateTotalForAction(action, e ? e.items : []);\n\n\t that._process(that._data, e);\n\t }\n\t },\n\n\t _calculateAggregates: function (data, options) {\n\t options = options || {};\n\n\t var query = new Query(data),\n\t aggregates = options.aggregate,\n\t filter = options.filter;\n\n\t if (filter) {\n\t query = query.filter(filter);\n\t }\n\n\t return query.aggregate(aggregates);\n\t },\n\n\t _process: function (data, e) {\n\t var that = this,\n\t options = {},\n\t result;\n\n\t if (that.options.serverPaging !== true) {\n\t options.skip = that._skip;\n\t options.take = that._take || that._pageSize;\n\n\t if(options.skip === undefined && that._page !== undefined && that._pageSize !== undefined) {\n\t options.skip = (that._page - 1) * that._pageSize;\n\t }\n\n\t if (that.options.useRanges) {\n\t options.skip = that.currentRangeStart();\n\t }\n\t }\n\n\t if (that.options.serverSorting !== true) {\n\t options.sort = that._sort;\n\t }\n\n\t if (that.options.serverFiltering !== true) {\n\t options.filter = that._filter;\n\t }\n\n\t if (that.options.serverGrouping !== true) {\n\t options.group = that._group;\n\t }\n\n\t if (that.options.serverAggregates !== true) {\n\t options.aggregate = that._aggregate;\n\t }\n\n\t if (that.options.serverGrouping) {\n\t that._clearEmptyGroups(data);\n\t }\n\n\t options.groupPaging = that._groupPaging;\n\n\t if (that._isGroupPaged() && e && (e.action === \"page\" || e.action === \"expandGroup\" || e.action === \"collapseGroup\")) {\n\t result = that._queryProcess(data, {\n\t aggregate: that._aggregate\n\t });\n\t } else {\n\t result = that._queryProcess(data, options);\n\t }\n\n\t if (that.options.serverAggregates !== true) {\n\t // for performance reasons, calculate aggregates for part of the data only after query process\n\t // this is necessary in the TreeList when paging\n\t that._aggregateResult = that._calculateAggregates(result.dataToAggregate || data, options);\n\t }\n\n\t that._setView(result, options, e);\n\n\t that._setFilterTotal(result.total, false);\n\n\t e = e || {};\n\n\t e.items = e.items || that._view;\n\n\t that.trigger(CHANGE, e);\n\t },\n\n\t _setView: function (result, options, e) {\n\t var that = this;\n\n\t if (that._isGroupPaged() && !that._isServerGrouped()) {\n\t if (e && (e.action === \"page\" || e.action === \"expandGroup\" || e.action === \"collapseGroup\")) {\n\t that.view(result.data);\n\t that._updateOuterRangesLength();\n\t } else {\n\t that._ranges = [];\n\t var query = new Query(result.data);\n\t that._addRange(that._observe(result.data));\n\n\t if (options.skip > (result.data.length / options.take + 1)) {\n\t options.skip = 0;\n\t }\n\n\t that.view(query.range(options.skip, options.take).toArray());\n\t }\n\n\t } else {\n\t that.view(result.data);\n\t }\n\t },\n\n\t _clearEmptyGroups: function(data) {\n\t for (var idx = data.length - 1; idx >=0; idx--) {\n\t var group = data[idx];\n\t if (group.hasSubgroups) {\n\t this._clearEmptyGroups(group.items);\n\t } else {\n\t if (group.items && !group.items.length) {\n\t splice.apply(group.parent(), [idx, 1]);\n\t }\n\t }\n\t }\n\t },\n\n\t _queryProcess: function(data, options) {\n\t if (this.options.inPlaceSort) {\n\t return Query.process(data, options, this.options.inPlaceSort);\n\t }\n\t else {\n\t return Query.process(data, options);\n\t }\n\t },\n\n\t _mergeState: function(options) {\n\t var that = this;\n\n\t if (options !== undefined) {\n\t that._pageSize = options.pageSize;\n\t that._page = options.page;\n\t that._sort = options.sort;\n\t that._filter = options.filter;\n\t that._group = options.group;\n\t that._aggregate = options.aggregate;\n\t that._skip = that._currentRangeStart = options.skip;\n\t that._take = options.take;\n\n\t if(that._skip === undefined) {\n\t that._skip = that._currentRangeStart = that.skip();\n\t options.skip = that.skip();\n\t }\n\n\t if(that._take === undefined && that._pageSize !== undefined) {\n\t that._take = that._pageSize;\n\t options.take = that._take;\n\t }\n\n\t if (options.sort) {\n\t that._sort = options.sort = normalizeSort(options.sort);\n\t that._sortFields = sortFields(options.sort);\n\t }\n\n\t if (options.filter) {\n\t that._filter = options.filter = (that.options.accentFoldingFiltering && !$.isEmptyObject(options.filter)) ? $.extend({}, normalizeFilter(options.filter), { accentFoldingFiltering: that.options.accentFoldingFiltering}) : normalizeFilter(options.filter);\n\t }\n\n\t if (options.group) {\n\t that._group = options.group = normalizeGroup(options.group);\n\t }\n\t if (options.aggregate) {\n\t that._aggregate = options.aggregate = normalizeAggregate(options.aggregate);\n\t }\n\t }\n\t return options;\n\t },\n\n\t query: function(options) {\n\t var result;\n\t var remote = this.options.serverSorting || this.options.serverPaging || this.options.serverFiltering || this.options.serverGrouping || this.options.serverAggregates;\n\n\t if (remote || ((this._data === undefined || this._data.length === 0) && !this._destroyed.length)) {\n\t if (this.options.endless) {\n\t var moreItemsCount = options.pageSize - this.pageSize();\n\t if (moreItemsCount > 0) {\n\t moreItemsCount = this.pageSize();\n\t options.page = options.pageSize / moreItemsCount;\n\t options.pageSize = moreItemsCount;\n\t } else {\n\t options.page = 1;\n\t this.options.endless = false;\n\t }\n\t }\n\t return this.read(this._mergeState(options));\n\t }\n\n\t var isPrevented = this.trigger(REQUESTSTART, { type: \"read\" });\n\t if (!isPrevented) {\n\t this.trigger(PROGRESS);\n\t if (options) {\n\t options.groupPaging = this._groupPaging;\n\t }\n\t result = this._queryProcess(this._data, this._mergeState(options));\n\n\t this._setFilterTotal(result.total, true);\n\n\t this._aggregateResult = this._calculateAggregates(result.dataToAggregate || this._data, options);\n\t this._setView(result, options);\n\t this.trigger(REQUESTEND, { type: \"read\" });\n\t this.trigger(CHANGE, { items: result.data, action: options ? options.action : \"\" });\n\t }\n\n\t return $.Deferred().resolve(isPrevented).promise();\n\t },\n\n\t _hasExpandedSubGroups: function (group) {\n\t var result = false;\n\t var length = group.items ? group.items.length : 0;\n\n\t if (!group.hasSubgroups) {\n\t return false;\n\t }\n\n\t for (var i = 0; i < length; i++) {\n\t if (this._groupsState[group.items[i].uid]) {\n\t result = true;\n\t break;\n\t }\n\t }\n\t return result;\n\t },\n\n\t _findGroupedRange: function (data, result, options, parents, callback) {\n\t var that = this;\n\t var length = data.length;\n\t var group;\n\t var current;\n\t var itemsLength;\n\t var hasNotRequestedItems;\n\t var groupCount;\n\t var itemsToSkip;\n\n\t for (var i = 0; i < length; i++) {\n\t group = data[i];\n\n\t if (options.taken >= options.take) {\n\t break;\n\t }\n\n\t if (!that._getGroupByUid(group.uid)) {\n\t that._groupsFlat.push(group);\n\t }\n\n\t if (that._groupsState[group.uid]) {\n\t if (that._isServerGroupPaged()) {\n\t if (group.hasSubgroups && !group.subgroupCount) {\n\t that.getGroupSubGroupCount(group, options, parents, callback);\n\t that._fetchingGroupItems = true;\n\t return;\n\t }\n\t groupCount = (group.subgroupCount || group.itemCount) + 1;\n\t itemsToSkip = options.skip - options.skipped;\n\t hasNotRequestedItems = !group.items || (group.items.length - itemsToSkip) < (options.take - options.taken);\n\n\t if (!that._hasExpandedSubGroups(group) && itemsToSkip > groupCount) {\n\t options.skipped += groupCount;\n\t continue;\n\t }\n\n\t if ((group.hasSubgroups && (!group.items || hasNotRequestedItems && group.items.length < group.subgroupCount)) ||\n\t (!group.hasSubgroups && (!group.items || hasNotRequestedItems && group.items.length < group.itemCount))) {\n\t that.getGroupItems(group, options, parents, callback);\n\t that._fetchingGroupItems = true;\n\t return;\n\t }\n\t }\n\n\t if (options.includeParents && options.skipped < options.skip) {\n\t options.skipped++;\n\t group.excludeHeader = true;\n\t } else if (options.includeParents) {\n\t options.taken++;\n\t }\n\n\t if (group.hasSubgroups && group.items && group.items.length) {\n\t group.currentItems = [];\n\n\t if (!parents) {\n\t parents = [];\n\t }\n\t parents.push(group);\n\n\t that._findGroupedRange(group.items, group.currentItems, options, parents, callback);\n\t parents.pop();\n\n\t if (group.currentItems.length || options.taken > 0) {\n\t result.push(group);\n\t } else {\n\t group.excludeHeader = false;\n\t }\n\t } else {\n\t current = [];\n\t itemsLength = group.items.length;\n\n\t for (var j = 0; j < itemsLength; j++) {\n\t if (options.skipped < options.skip) {\n\t options.skipped++;\n\t continue;\n\t }\n\n\t if (options.taken >= options.take) {\n\t break;\n\t }\n\t current.push(group.items[j]);\n\t options.taken++;\n\t }\n\n\t if (current.length || options.taken > 0) {\n\t group.currentItems = current;\n\t result.push(group);\n\t } else {\n\t group.excludeHeader = false;\n\t }\n\t }\n\t } else {\n\t if (options.skipped < options.skip) {\n\t options.skipped++;\n\t continue;\n\t }\n\t result.push(group);\n\t options.taken++;\n\t }\n\t }\n\t },\n\n\t getGroupItems: function (group, options, parents, callback) {\n\t var that = this;\n\t var skip;\n\t var take;\n\t var filter;\n\t var data;\n\t var subgroups;\n\n\t if (!group.items) {\n\t group.items = [];\n\t }\n\n\t skip = group.items.length;\n\t take = that.take();\n\t filter = this._composeItemsFilter(group, parents);\n\t data = {\n\t page: math.floor((skip || 0) / (take || 1)) || 1,\n\t pageSize: take,\n\t skip: skip,\n\t take: take,\n\t filter: filter,\n\t aggregate: that._aggregate,\n\t sort: that._sort\n\t };\n\t subgroups = that.findSubgroups(group);\n\n\t if (subgroups && subgroups.length) {\n\t data.group = subgroups;\n\t data.groupPaging = true;\n\t }\n\n\t clearTimeout(that._timeout);\n\t that._timeout = setTimeout(function () {\n\t that._queueRequest(data, function () {\n\t if (!that.trigger(REQUESTSTART, {\n\t type: \"read\"\n\t })) {\n\t that.transport.read({\n\t data: data,\n\t success: that._groupItemsSuccessHandler(group, options.skip, that.take(), callback),\n\t error: function () {\n\t var args = slice.call(arguments);\n\t that.error.apply(that, args);\n\t }\n\t });\n\t } else {\n\t that._dequeueRequest();\n\t }\n\t });\n\t }, 100);\n\t },\n\n\t getGroupSubGroupCount: function (group, options, parents, callback) {\n\t var that = this;\n\t var filter;\n\t var groupIndex;\n\t var data;\n\n\t if (!group.items) {\n\t group.items = [];\n\t }\n\n\t filter = this._composeItemsFilter(group, parents);\n\t groupIndex = this._group.map(function (g) {\n\t return g.field;\n\t }).indexOf(group.field);\n\t data = {\n\t filter: filter,\n\t group: [that._group[groupIndex + 1]],\n\t groupPaging: true,\n\t includeSubGroupCount: true\n\t };\n\n\t clearTimeout(that._timeout);\n\t that._timeout = setTimeout(function () {\n\t that._queueRequest(data, function () {\n\t if (!that.trigger(REQUESTSTART, {\n\t type: \"read\"\n\t })) {\n\t that.transport.read({\n\t data: data,\n\t success: that._subGroupCountSuccessHandler(group, options.skip, that.take(), callback),\n\t error: function () {\n\t var args = slice.call(arguments);\n\t that.error.apply(that, args);\n\t }\n\t });\n\t } else {\n\t that._dequeueRequest();\n\t }\n\t });\n\t }, 100);\n\t },\n\n\t _subGroupCountSuccessHandler: function (group, skip, take, callback) {\n\t var that = this;\n\t callback = isFunction(callback) ? callback : noop;\n\t var totalField = that.options.schema && that.options.schema.total ? that.options.schema.total : \"Total\";\n\n\t return function (data) {\n\n\t that._dequeueRequest();\n\n\t that.trigger(REQUESTEND, {\n\t response: data,\n\t type: \"read\"\n\t });\n\t that._fetchingGroupItems = false;\n\t group.subgroupCount = data[totalField];\n\t that.range(skip, take, callback, \"expandGroup\");\n\t };\n\t },\n\n\t _groupItemsSuccessHandler: function (group, skip, take, callback) {\n\t var that = this;\n\t var timestamp = that._timeStamp();\n\t callback = isFunction(callback) ? callback : noop;\n\n\t return function (data) {\n\t var temp;\n\t var model = Model.define(that.options.schema.model);\n\n\t that._dequeueRequest();\n\n\t that.trigger(REQUESTEND, {\n\t response: data,\n\t type: \"read\"\n\t });\n\n\t data = that.reader.parse(data);\n\n\t if (group.hasSubgroups) {\n\t temp = that.reader.groups(data);\n\t } else {\n\t temp = that.reader.data(data);\n\t temp = temp.map(function (item) {\n\t return new model(item);\n\t });\n\t }\n\n\t group.items.omitChangeEvent = true;\n\t for (var i = 0; i < temp.length; i++) {\n\t group.items.push(temp[i]);\n\t }\n\t group.items.omitChangeEvent = false;\n\n\t that._updateRangePristineData(group);\n\t that._fetchingGroupItems = false;\n\t that._serverGroupsTotal += temp.length;\n\t that.range(skip, take, callback, \"expandGroup\");\n\n\t if (timestamp >= that._currentRequestTimeStamp || !that._skipRequestsInProgress) {\n\t that.trigger(CHANGE, {});\n\t }\n\t };\n\n\t },\n\n\t findSubgroups: function (group) {\n\t var indexOfCurrentGroup = this._group.map(function (g) {\n\t return g.field;\n\t }).indexOf(group.field);\n\n\t return this._group.slice(indexOfCurrentGroup + 1, this._group.length);\n\t },\n\n\t _composeItemsFilter: function (group, parents) {\n\t var filter = this.filter() || {\n\t logic: \"and\",\n\t filters: []\n\t };\n\n\t filter = extend(true, {}, filter);\n\t filter.filters.push({\n\t field: group.field,\n\t operator: \"eq\",\n\t value: group.value\n\t });\n\n\t if (parents) {\n\t for (var i = 0; i < parents.length; i++) {\n\t filter.filters.push({\n\t field: parents[i].field,\n\t operator: \"eq\",\n\t value: parents[i].value\n\t });\n\t }\n\t }\n\n\t return filter;\n\t },\n\n\t _updateRangePristineData: function (group) {\n\t var that = this;\n\t var ranges = that._ranges;\n\t var rangesLength = ranges.length;\n\t var temp;\n\t var currentGroup;\n\t var range;\n\t var dataLength;\n\t var indexes;\n\n\t for (var i = 0; i < rangesLength; i++) {\n\t range = ranges[i];\n\t dataLength = range.data.length;\n\t indexes = [];\n\n\t for (var j = 0; j < dataLength; j++) {\n\t currentGroup = range.data[j];\n\t indexes.push(j);\n\n\t if ((currentGroup.uid === group.uid) || (currentGroup.hasSubgroups && currentGroup.items.length && that._containsSubGroup(currentGroup, group, indexes))) {\n\t break;\n\t }\n\t indexes.pop();\n\t }\n\n\t if (indexes.length) {\n\t temp = ranges[i].pristineData;\n\n\t while (indexes.length > 1) {\n\t temp = temp[indexes.splice(0, 1)[0]].items;\n\t }\n\t temp[indexes[0]] = that._cloneGroup(group);\n\t break;\n\t }\n\t }\n\t },\n\n\t _containsSubGroup: function (group, subgroup, indexes) {\n\t var that = this;\n\t var length = group.items.length;\n\t var currentSubGroup;\n\n\t if (group.hasSubgroups && length) {\n\t for (var i = 0; i < length; i++) {\n\t currentSubGroup = group.items[i];\n\t indexes.push(i);\n\t if (currentSubGroup.uid === subgroup.uid) {\n\t return true;\n\t } else if (currentSubGroup.hasSubgroups && currentSubGroup.items.length) {\n\t return that._containsSubGroup(currentSubGroup, subgroup, indexes);\n\t }\n\t indexes.pop();\n\t }\n\t }\n\n\t },\n\n\t _cloneGroup: function (group) {\n\t var that = this;\n\t group = typeof group.toJSON == \"function\" ? group.toJSON() : group;\n\n\t if (group.items && group.items.length) {\n\t group.items = group.items.map(function (item) {\n\t return that._cloneGroup(item);\n\t });\n\t }\n\n\t return group;\n\t },\n\n\t _setFilterTotal: function(filterTotal, setDefaultValue) {\n\t var that = this;\n\n\t if (!that.options.serverFiltering) {\n\t if (filterTotal !== undefined) {\n\t that._total = filterTotal;\n\t } else if (setDefaultValue) {\n\t that._total = that._data.length;\n\t }\n\t }\n\t },\n\n\t fetch: function(callback) {\n\t var that = this;\n\t var fn = function(isPrevented) {\n\t if (isPrevented !== true && isFunction(callback)) {\n\t callback.call(that);\n\t }\n\t };\n\n\t return this._query().done(fn);\n\t },\n\n\t _query: function(options) {\n\t var that = this;\n\n\t return that.query(extend({}, {\n\t page: that.page(),\n\t pageSize: that.pageSize(),\n\t sort: that.sort(),\n\t filter: that.filter(),\n\t group: that.group(),\n\t aggregate: that.aggregate()\n\t }, options));\n\t },\n\n\t next: function(options) {\n\t var that = this,\n\t page = that.page(),\n\t total = that.total();\n\n\t options = options || {};\n\n\t if (!page || (total && page + 1 > that.totalPages())) {\n\t return;\n\t }\n\n\t that._skip = that._currentRangeStart = page * that.take();\n\n\t page += 1;\n\t options.page = page;\n\n\t that._query(options);\n\n\t return page;\n\t },\n\n\t prev: function(options) {\n\t var that = this,\n\t page = that.page();\n\n\t options = options || {};\n\n\t if (!page || page === 1) {\n\t return;\n\t }\n\n\t that._skip = that._currentRangeStart = that._skip - that.take();\n\n\t page -= 1;\n\t options.page = page;\n\n\t that._query(options);\n\n\t return page;\n\t },\n\n\t page: function(val) {\n\t var that = this,\n\t skip;\n\n\t if(val !== undefined) {\n\t val = math.max(math.min(math.max(val, 1), that.totalPages()), 1);\n\t var take = that.take();\n\n\t if (that._isGroupPaged()) {\n\t val -= 1;\n\t that.range(val * take, take, null, \"page\");\n\t return;\n\t }\n\t that._query(that._pageableQueryOptions({ page: val }));\n\t return;\n\t }\n\t skip = that.skip();\n\n\t return skip !== undefined ? math.round((skip || 0) / (that.take() || 1)) + 1 : undefined;\n\t },\n\n\t pageSize: function(val) {\n\t var that = this;\n\n\t if (val !== undefined) {\n\t that._query(that._pageableQueryOptions({ pageSize: val, page: 1 }));\n\t return;\n\t }\n\n\t return that.take();\n\t },\n\n\t sort: function(val) {\n\t var that = this;\n\n\t if(val !== undefined) {\n\t that.trigger(\"sort\");\n\t that._query({ sort: val });\n\t return;\n\t }\n\n\t return that._sort;\n\t },\n\n\t filter: function(val) {\n\t var that = this;\n\n\t if (val === undefined) {\n\t return that._filter;\n\t }\n\n\t that.trigger(\"reset\");\n\t that._query({ filter: val, page: 1 });\n\t },\n\n\t group: function(val) {\n\t var that = this;\n\n\t if(val !== undefined) {\n\t that._query({ group: val });\n\t return;\n\t }\n\n\t return that._group;\n\t },\n\n\t getGroupsFlat: function (data) {\n\t var idx,\n\t result = [],\n\t length;\n\n\t for (idx = 0, length = data.length; idx < length; idx++) {\n\t var group = data[idx];\n\t if (group.hasSubgroups) {\n\t result = result.concat(this.getGroupsFlat(group.items));\n\t }\n\n\t result.push(group);\n\t }\n\n\t return result;\n\t },\n\n\t total: function() {\n\t return parseInt(this._total || 0, 10);\n\t },\n\n\t groupsTotal: function (includeExpanded) {\n\t var that = this;\n\n\t if (!that._group.length) {\n\t return that.total();\n\t }\n\n\t if (that._isServerGrouped()) {\n\t if (that._serverGroupsTotal) {\n\t return that._serverGroupsTotal;\n\t }\n\t that._serverGroupsTotal = that.total();\n\n\t return that._serverGroupsTotal;\n\t }\n\n\t return that._calculateGroupsTotal(that._ranges.length ? that._ranges[0].data : [], includeExpanded);\n\t },\n\n\t _calculateGroupsTotal: function (groups, includeExpanded, itemsField, ignoreState) {\n\t var that = this;\n\t itemsField = itemsField || \"items\";\n\t var total;\n\t var length;\n\n\t if (that._group.length && groups) {\n\t total = 0;\n\t length = groups.length;\n\n\t for (var i = 0; i < length; i++) {\n\t total += that.groupCount(groups[i], includeExpanded, itemsField, ignoreState);\n\t }\n\t that._groupsTotal = total;\n\t return total;\n\t }\n\n\t that._groupsTotal = that._data.length;\n\t return that._groupsTotal;\n\t },\n\n\t groupCount: function (group, includeExpanded, itemsField, ignoreState) {\n\t var that = this;\n\t var total = 0;\n\n\t if (group.hasSubgroups && that._groupsState[group.uid]) {\n\t if (includeExpanded && !group.excludeHeader || ignoreState) {\n\t total += 1;\n\t }\n\n\t group[itemsField].forEach(function (subgroup) {\n\t total += that.groupCount(subgroup, includeExpanded, itemsField, ignoreState);\n\t });\n\t } else {\n\t if (that._groupsState[group.uid]) {\n\t if (includeExpanded && !group.excludeHeader || ignoreState) {\n\t total++;\n\t }\n\t total += group[itemsField] ? group[itemsField].length : 0;\n\t } else {\n\t total++;\n\t }\n\t }\n\t return total;\n\t },\n\n\t countGroupRange: function (range) {\n\t var total = 0;\n\t var length = range.length;\n\n\t for (var i = 0; i < length; i++) {\n\t total += this.groupCount(range[i], true);\n\t }\n\n\t return total;\n\t },\n\n\t aggregate: function(val) {\n\t var that = this;\n\n\t if(val !== undefined) {\n\t that._query({ aggregate: val });\n\t return;\n\t }\n\n\t return that._aggregate;\n\t },\n\n\t aggregates: function() {\n\t var result = this._aggregateResult;\n\n\t if (isEmptyObject(result)) {\n\t result = this._emptyAggregates(this.aggregate());\n\t }\n\n\t return result;\n\t },\n\n\t _emptyAggregates: function(aggregates) {\n\t var result = {};\n\n\t if (!isEmptyObject(aggregates)) {\n\t var aggregate = {};\n\n\t if (!isArray(aggregates)){\n\t aggregates = [aggregates];\n\t }\n\n\t for (var idx = 0; idx = length; idx--) {\n\t group = groups[idx];\n\t parent = {\n\t value: model.get ? model.get(group.field) : model[group.field],\n\t field: group.field,\n\t items: parent ? [parent] : [model],\n\t hasSubgroups: !!parent,\n\t aggregates: this._emptyAggregates(group.aggregates)\n\t };\n\t }\n\n\t return parent;\n\t },\n\n\t totalPages: function() {\n\t var that = this,\n\t pageSize = that.pageSize() || that.total(),\n\t total = that._isGroupPaged() ? that.groupsTotal(true) : that.total();\n\n\t return math.ceil((total || 0) / pageSize);\n\t },\n\n\t inRange: function(skip, take) {\n\t var that = this,\n\t end = math.min(skip + take, that.total());\n\n\t if (!that.options.serverPaging && that._data.length > 0) {\n\t return true;\n\t }\n\n\t return that._findRange(skip, end).length > 0;\n\t },\n\n\t lastRange: function() {\n\t var ranges = this._ranges;\n\t return ranges[ranges.length - 1] || { start: 0, end: 0, data: [] };\n\t },\n\n\t firstItemUid: function() {\n\t var ranges = this._ranges;\n\t return ranges.length && ranges[0].data.length && ranges[0].data[0].uid;\n\t },\n\n\t enableRequestsInProgress: function() {\n\t this._skipRequestsInProgress = false;\n\t },\n\n\t _timeStamp: function() {\n\t return new Date().getTime();\n\t },\n\n\t range: function(skip, take, callback, action) {\n\t this._currentRequestTimeStamp = this._timeStamp();\n\t this._skipRequestsInProgress = true;\n\t var total = this._isGroupPaged() ? this.groupsTotal(true) : this.total();\n\n\t if (action === \"expandGroup\" || action === \"collapseGroup\") {\n\t this._updateOuterRangesLength();\n\t }\n\n\t skip = math.min(skip || 0, total);\n\t callback = isFunction(callback) ? callback : noop;\n\n\t var that = this,\n\t pageSkip = math.max(math.floor(skip / take), 0) * take,\n\t size = math.min(pageSkip + take, total),\n\t data;\n\n\t data = that._findRange(skip, math.min(skip + take, total), callback);\n\n\t if ((data.length || total === 0) && !that._fetchingGroupItems) {\n\t that._processRangeData(data, skip, take, that._originalPageSkip || pageSkip, that._originalSize || size, {\n\t action: action\n\t });\n\t that._originalPageSkip = null;\n\t that._originalSize = null;\n\t callback();\n\t return;\n\t }\n\n\t if (that._isGroupPaged()) {\n\t that._originalPageSkip = pageSkip;\n\t that._originalSize = size;\n\n\t pageSkip = math.max(math.floor(that._adjustPageSkip(skip, take) / take), 0) * take;\n\t size = math.min(pageSkip + take, total);\n\t }\n\n\t if (take !== undefined && !that._fetchingGroupItems) {\n\t if ((that._isGroupPaged() && !that._groupRangeExists(pageSkip, take)) || !that._rangeExists(pageSkip, size)) {\n\t that.prefetch(pageSkip, take, function() {\n\t if (skip > pageSkip && size < that.total() && !that._rangeExists(size, math.min(size + take, that.total()))) {\n\t that.prefetch(size, take, function() {\n\t that.range(skip, take, callback );\n\t });\n\t } else {\n\t that.range(skip, take, callback);\n\t }\n\t });\n\t } else if (pageSkip < skip) {\n\t that.prefetch(size, take, function() {\n\t that.range(skip, take, callback );\n\t });\n\t }\n\t }\n\t },\n\n\t _findRange: function(start, end, callback) {\n\t var that = this,\n\t ranges = that._ranges,\n\t range,\n\t data = [],\n\t skipIdx,\n\t takeIdx,\n\t startIndex,\n\t endIndex,\n\t rangeData,\n\t rangeEnd,\n\t processed,\n\t options = that.options,\n\t remote = options.serverSorting || options.serverPaging || options.serverFiltering || options.serverGrouping || options.serverAggregates,\n\t flatData,\n\t count,\n\t length,\n\t groupMapOptions = {\n\t take: end - start,\n\t skip: start,\n\t skipped: 0,\n\t taken: 0,\n\t includeParents: true\n\t },\n\t prevRangeEnd,\n\t isGroupPaged = that._isGroupPaged(),\n\t startField = isGroupPaged ? \"outerStart\" : \"start\",\n\t endField = isGroupPaged ? \"outerEnd\" : \"end\",\n\t currentDataLength;\n\n\t for (skipIdx = 0, length = ranges.length; skipIdx < length; skipIdx++) {\n\t range = ranges[skipIdx];\n\n\t if (isGroupPaged) {\n\t if (range.outerStart >= end) {\n\t return [];\n\t }\n\n\t if (start > range.outerEnd) {\n\t groupMapOptions.skipped += range.outerEnd - (prevRangeEnd || 0);\n\t prevRangeEnd = range.outerEnd;\n\t continue;\n\t }\n\n\t if (typeof prevRangeEnd !== \"undefined\" && prevRangeEnd != range.outerStart) {\n\t groupMapOptions.skipped += range.outerStart - prevRangeEnd;\n\t }\n\n\t if (groupMapOptions.skipped > groupMapOptions.skip) {\n\t return [];\n\t }\n\n\t if (typeof prevRangeEnd === \"undefined\" && start > 0 && range.start > 0) {\n\t groupMapOptions.skipped = range.outerStart;\n\t }\n\n\t takeIdx = skipIdx;\n\t while (true) {\n\t this._findGroupedRange(range.data, data, groupMapOptions, null, callback);\n\t currentDataLength = that._calculateGroupsTotal(data, true, \"currentItems\");\n\n\t if (currentDataLength >= groupMapOptions.take) {\n\t return data;\n\t }\n\n\t if (that._fetchingGroupItems) {\n\t return [];\n\t }\n\t takeIdx++;\n\n\t if (ranges[takeIdx] && ranges[takeIdx].outerStart === range.outerEnd) {\n\t range = ranges[takeIdx];\n\t } else {\n\t break;\n\t }\n\t }\n\t } else if (start >= range[startField] && start <= range[endField]) {\n\t count = 0;\n\n\t for (takeIdx = skipIdx; takeIdx < length; takeIdx++) {\n\t range = ranges[takeIdx];\n\t flatData = that._flatData(range.data, true);\n\n\t if (flatData.length && start + count >= range.start) {\n\t rangeData = range.data;\n\t rangeEnd = range.end;\n\n\t if (!remote) {\n\t if (options.inPlaceSort) {\n\t processed = that._queryProcess(range.data, { filter: that.filter() });\n\t } else {\n\t var sort = normalizeGroupWithoutCompare(that.group() || []).concat(normalizeSort(that.sort() || []));\n\t processed = that._queryProcess(range.data, { sort: sort, filter: that.filter() });\n\t }\n\t flatData = rangeData = processed.data;\n\n\t if (processed.total !== undefined) {\n\t rangeEnd = processed.total;\n\t }\n\t }\n\n\t startIndex = 0;\n\t if (start + count > range.start) {\n\t startIndex = (start + count) - range.start;\n\t }\n\t endIndex = flatData.length;\n\t if (rangeEnd > end) {\n\t endIndex = endIndex - (rangeEnd - end);\n\t }\n\t count += endIndex - startIndex;\n\t data = that._mergeGroups(data, rangeData, startIndex, endIndex);\n\n\t if (end <= range.end && count == end - start) {\n\t return data;\n\t }\n\t }\n\t }\n\t break;\n\t }\n\t prevRangeEnd = range.outerEnd;\n\t }\n\t return [];\n\t },\n\n\t _getRangesMismatch: function (pageSkip) {\n\t var that = this;\n\t var ranges = that._ranges;\n\t var mismatch = 0;\n\t var i = 0;\n\n\t while (true) {\n\t var range = ranges[i];\n\t if (!range || range.outerStart > pageSkip) {\n\t break;\n\t }\n\n\t if (range.outerEnd != range.end) {\n\t mismatch = range.outerEnd - range.end;\n\t }\n\t i++;\n\t }\n\n\t return mismatch;\n\t },\n\n\t _mergeGroups: function(data, range, skip, take) {\n\t if (this._isServerGrouped()) {\n\t var temp = range.toJSON(),\n\t prevGroup;\n\n\t if (data.length) {\n\t prevGroup = data[data.length - 1];\n\t }\n\n\t mergeGroups(prevGroup, temp, skip, take);\n\n\t return data.concat(temp);\n\t }\n\t return data.concat(range.slice(skip, take));\n\t },\n\n\t _processRangeData: function(data, skip, take, pageSkip, size, eventData) {\n\t var that = this;\n\n\t that._pending = undefined;\n\n\t that._skip = skip > that.skip() && !that._omitPrefetch ? math.min(size, (that.totalPages() - 1) * that.take()) : pageSkip;\n\n\t that._currentRangeStart = skip;\n\n\t that._take = take;\n\n\t var paging = that.options.serverPaging;\n\t var sorting = that.options.serverSorting;\n\t var filtering = that.options.serverFiltering;\n\t var aggregates = that.options.serverAggregates;\n\t try {\n\t that.options.serverPaging = true;\n\t if (!that._isServerGrouped() && !(that.group() && that.group().length)) {\n\t that.options.serverSorting = true;\n\t }\n\t that.options.serverFiltering = true;\n\t that.options.serverPaging = true;\n\t that.options.serverAggregates = true;\n\n\t if (paging) {\n\t that._detachObservableParents();\n\t that._data = data = that._observe(data);\n\t }\n\t that._process(data, eventData);\n\t } finally {\n\t that.options.serverPaging = paging;\n\t that.options.serverSorting = sorting;\n\t that.options.serverFiltering = filtering;\n\t that.options.serverAggregates = aggregates;\n\t }\n\t },\n\n\t skip: function() {\n\t var that = this;\n\n\t if (that._skip === undefined) {\n\t return (that._page !== undefined ? (that._page - 1) * (that.take() || 1) : undefined);\n\t }\n\t return that._skip;\n\t },\n\n\t currentRangeStart: function() {\n\t return this._currentRangeStart || 0;\n\t },\n\n\t take: function() {\n\t return this._take || this._pageSize;\n\t },\n\n\t _prefetchSuccessHandler: function (skip, size, callback, force) {\n\t var that = this;\n\t var timestamp = that._timeStamp();\n\n\t return function(data) {\n\t var found = false,\n\t range = { start: skip, end: size, data: [], timestamp: that._timeStamp() },\n\t idx,\n\t length,\n\t temp;\n\n\t that._dequeueRequest();\n\n\t that.trigger(REQUESTEND, { response: data, type: \"read\" });\n\n\t data = that.reader.parse(data);\n\n\t temp = that._readData(data);\n\n\t if (temp.length) {\n\t for (idx = 0, length = that._ranges.length; idx < length; idx++) {\n\t if (that._ranges[idx].start === skip) {\n\t found = true;\n\t range = that._ranges[idx];\n\n\t if (!that._isGroupPaged()) {\n\t range.pristineData = temp;\n\t range.data = that._observe(temp);\n\t range.end = range.start + that._flatData(range.data, true).length;\n\t that._sortRanges();\n\t }\n\n\t break;\n\t }\n\t }\n\n\t if (!found) {\n\t that._addRange(that._observe(temp), skip);\n\t }\n\t }\n\n\t that._total = that.reader.total(data);\n\n\t if (force || (timestamp >= that._currentRequestTimeStamp || !that._skipRequestsInProgress)) {\n\t if (callback && temp.length) {\n\t callback();\n\t } else {\n\t that.trigger(CHANGE, {});\n\t }\n\t }\n\t };\n\t },\n\n\t prefetch: function(skip, take, callback) {\n\t var that = this,\n\t size = math.min(skip + take, that.total()),\n\t options = {\n\t take: take,\n\t skip: skip,\n\t page: skip / take + 1,\n\t pageSize: take,\n\t sort: that._sort,\n\t filter: that._filter,\n\t group: that._group,\n\t aggregate: that._aggregate\n\t };\n\n\n\t if ((that._isGroupPaged() && !that._isServerGrouped() && that._groupRangeExists(skip, size))) {\n\t if (callback) {\n\t callback();\n\t }\n\t return;\n\t }\n\n\t if ((that._isServerGroupPaged() && !that._groupRangeExists(skip, size)) || !that._rangeExists(skip, size)) {\n\t clearTimeout(that._timeout);\n\n\t that._timeout = setTimeout(function() {\n\t that._queueRequest(options, function() {\n\t if (!that.trigger(REQUESTSTART, { type: \"read\" })) {\n\t if (that._omitPrefetch) {\n\t that.trigger(PROGRESS);\n\t }\n\t that.transport.read({\n\t data: that._params(options),\n\t success: that._prefetchSuccessHandler(skip, size, callback),\n\t error: function() {\n\t var args = slice.call(arguments);\n\t that.error.apply(that, args);\n\t }\n\t });\n\t } else {\n\t that._dequeueRequest();\n\t }\n\t });\n\t }, 100);\n\t } else if (callback) {\n\t callback();\n\t }\n\t },\n\n\t _multiplePrefetch: function(skip, take, callback) {\n\t var that = this,\n\t size = math.min(skip + take, that.total()),\n\t options = {\n\t take: take,\n\t skip: skip,\n\t page: skip / take + 1,\n\t pageSize: take,\n\t sort: that._sort,\n\t filter: that._filter,\n\t group: that._group,\n\t aggregate: that._aggregate\n\t };\n\n\t if (!that._rangeExists(skip, size)) {\n\t if (!that.trigger(REQUESTSTART, { type: \"read\" })) {\n\t that.transport.read({\n\t data: that._params(options),\n\t success: that._prefetchSuccessHandler(skip, size, callback, true)\n\t });\n\t }\n\t } else if (callback) {\n\t callback();\n\t }\n\t },\n\n\t _adjustPageSkip: function (start, take) {\n\t var that = this;\n\t var prevRange = that._getPrevRange(start);\n\t var result;\n\t var total = that.total();\n\t var mismatch;\n\n\t if (prevRange) {\n\t mismatch = that._getRangesMismatch(start);\n\n\t if (!mismatch) {\n\t return start;\n\t }\n\t start -= mismatch;\n\t }\n\t result = math.max(math.floor(start / take), 0) * take;\n\n\t if (result > total) {\n\t while (true) {\n\t result -= take;\n\t if (result < total) {\n\t break;\n\t }\n\t }\n\t }\n\t return result;\n\t },\n\n\t _getNextRange: function (end) {\n\t var that = this,\n\t ranges = that._ranges,\n\t idx,\n\t length;\n\n\t for (idx = 0, length = ranges.length; idx < length; idx++) {\n\t if (ranges[idx].start <= end && ranges[idx].end >= end) {\n\t return ranges[idx];\n\t }\n\t }\n\t },\n\n\t _getPrevRange: function (start) {\n\t var that = this,\n\t ranges = that._ranges,\n\t idx,\n\t range,\n\t length = ranges.length;\n\n\t for (idx = length - 1; idx >= 0; idx--) {\n\t if (ranges[idx].outerStart <= start) {\n\t range = ranges[idx];\n\t break;\n\t }\n\n\t }\n\n\t return range;\n\t },\n\n\t _rangeExists: function(start, end) {\n\t var that = this,\n\t ranges = that._ranges,\n\t idx,\n\t length;\n\n\t for (idx = 0, length = ranges.length; idx < length; idx++) {\n\t if (ranges[idx].start <= start && ranges[idx].end >= end) {\n\t return true;\n\t }\n\t }\n\n\t return false;\n\t },\n\n\t _groupRangeExists: function (start, end) {\n\t var that = this,\n\t ranges = that._ranges,\n\t idx,\n\t length,\n\t availableItemsCount = 0,\n\t total = that.groupsTotal(true);\n\n\t if (end > total && !that._isServerGrouped()) {\n\t end = total;\n\t }\n\n\t for (idx = 0, length = ranges.length; idx < length; idx++) {\n\t var range = ranges[idx];\n\t if (range.outerStart <= start && range.outerEnd >= start) {\n\t availableItemsCount += range.outerEnd - start;\n\t } else if (range.outerStart <= end && range.outerEnd >= end) {\n\t availableItemsCount += end - range.outerStart;\n\t }\n\t }\n\n\t return availableItemsCount >= end - start;\n\t },\n\n\t _getCurrentRangeSpan: function() {\n\t var that = this;\n\t var ranges = that._ranges;\n\t var start = that.currentRangeStart();\n\t var end = start + (that.take() || 0);\n\t var rangeSpan = [];\n\t var range;\n\t var idx;\n\t var length = ranges.length;\n\n\t for (idx = 0; idx < length; idx++) {\n\t range = ranges[idx];\n\n\t if ((range.start <= start && range.end >= start) || (range.start >= start && range.start <= end)) {\n\t rangeSpan.push(range);\n\t }\n\t }\n\n\t return rangeSpan;\n\t },\n\n\t _removeModelFromRanges: function(model) {\n\t var that = this;\n\t var range;\n\n\t for (var idx = 0, length = this._ranges.length; idx < length; idx++) {\n\t range = this._ranges[idx];\n\n\t that._removeModelFromRange(range, model);\n\t }\n\n\t that._updateRangesLength();\n\t },\n\n\t _removeModelFromRange: function(range, model) {\n\t this._eachItem(range.data, function(data) {\n\t if (!data) {\n\t return;\n\t }\n\t for (var idx = 0; idx < data.length; idx++) {\n\t var dataItem = data[idx];\n\n\t if (dataItem.uid && dataItem.uid == model.uid) {\n\t [].splice.call(data, idx, 1);\n\t break;\n\t }\n\t }\n\t });\n\t },\n\n\t _insertModelInRange: function(index, model) {\n\t var that = this;\n\t var ranges = that._ranges || [];\n\t var rangesLength = ranges.length;\n\t var range;\n\t var i;\n\n\t for (i = 0; i < rangesLength; i++) {\n\t range = ranges[i];\n\n\t if (range.start <= index && range.end >= index) {\n\t if (!that._getByUid(model.uid, range.data)) {\n\t if (that._isServerGrouped()) {\n\t range.data.splice(index, 0, that._wrapInEmptyGroup(model));\n\t } else {\n\t range.data.splice(index, 0, model);\n\t }\n\t }\n\n\t break;\n\t }\n\t }\n\n\t that._updateRangesLength();\n\t },\n\n\t _updateRangesLength: function() {\n\t var that = this;\n\t var ranges = that._ranges || [];\n\t var rangesLength = ranges.length;\n\t var mismatchFound = false;\n\t var mismatchLength = 0;\n\t var lengthDifference = 0;\n\t var rangeLength;\n\t var range;\n\t var i;\n\n\t for (i = 0; i < rangesLength; i++) {\n\t range = ranges[i];\n\t rangeLength = that._isGroupPaged() ? range.data.length : that._flatData(range.data, true).length;\n\t lengthDifference = rangeLength - math.abs(range.end - range.start);\n\n\t if (!mismatchFound && lengthDifference !== 0) {\n\t mismatchFound = true;\n\t mismatchLength = lengthDifference;\n\t range.end += mismatchLength;\n\t continue;\n\t }\n\n\t if (mismatchFound) {\n\t range.start += mismatchLength;\n\t range.end += mismatchLength;\n\t }\n\t }\n\t },\n\n\t _updateOuterRangesLength: function () {\n\t var that = this;\n\t var ranges = that._ranges || [];\n\t var rangesLength = ranges.length;\n\t var mismatchLength = 0;\n\t var range;\n\t var i;\n\t var prevRange;\n\t var rangeLength;\n\n\t for (i = 0; i < rangesLength; i++) {\n\t range = ranges[i];\n\t rangeLength = that._isGroupPaged() ? that._calculateGroupsTotal(range.data, true, \"items\", true) : that._flatData(range.data, true).length;\n\n\t if (prevRange) {\n\t if (prevRange.end != range.start) {\n\t mismatchLength = range.start - prevRange.end;\n\t }\n\t range.outerStart = prevRange.outerEnd + mismatchLength;\n\t mismatchLength = 0;\n\t } else {\n\t range.outerStart = range.start;\n\t }\n\n\t range.outerEnd = range.outerStart + rangeLength;\n\t prevRange = range;\n\t }\n\t }\n\t });\n\n\t var Transport = {};\n\n\t Transport.create = function(options, data, dataSource) {\n\t var transport,\n\t transportOptions = options.transport ? $.extend({}, options.transport) : null;\n\n\t if (transportOptions) {\n\t transportOptions.read = typeof transportOptions.read === STRING ? { url: transportOptions.read } : transportOptions.read;\n\n\t if (options.type === \"jsdo\") {\n\t transportOptions.dataSource = dataSource;\n\t }\n\n\t if (options.type) {\n\t kendo.data.transports = kendo.data.transports || {};\n\t kendo.data.schemas = kendo.data.schemas || {};\n\n\t if (!kendo.data.transports[options.type]) {\n\t kendo.logToConsole(\"Unknown DataSource transport type '\" + options.type + \"'.\\nVerify that registration scripts for this type are included after Kendo UI on the page.\", \"warn\");\n\t } else if (!isPlainObject(kendo.data.transports[options.type])) {\n\t transport = new kendo.data.transports[options.type](extend(transportOptions, { data: data }));\n\t } else {\n\t transportOptions = extend(true, {}, kendo.data.transports[options.type], transportOptions);\n\t }\n\n\t options.schema = extend(true, {}, kendo.data.schemas[options.type], options.schema);\n\t }\n\n\t if (!transport) {\n\t transport = isFunction(transportOptions.read) ? transportOptions : new RemoteTransport(transportOptions);\n\t }\n\t } else {\n\t transport = new LocalTransport({ data: options.data || [] });\n\t }\n\t return transport;\n\t };\n\n\t DataSource.create = function(options) {\n\t if (isArray(options) || options instanceof ObservableArray) {\n\t options = { data: options };\n\t }\n\n\t var dataSource = options || {},\n\t data = dataSource.data,\n\t fields = dataSource.fields,\n\t table = dataSource.table,\n\t select = dataSource.select,\n\t idx,\n\t length,\n\t model = {},\n\t field;\n\n\t if (!data && fields && !dataSource.transport) {\n\t if (table) {\n\t data = inferTable(table, fields);\n\t } else if (select) {\n\t data = inferSelect(select, fields);\n\n\t if (dataSource.group === undefined && data[0] && data[0].optgroup !== undefined) {\n\t dataSource.group = \"optgroup\";\n\t }\n\t }\n\t }\n\n\t if (kendo.data.Model && fields && (!dataSource.schema || !dataSource.schema.model)) {\n\t for (idx = 0, length = fields.length; idx < length; idx++) {\n\t field = fields[idx];\n\t if (field.type) {\n\t model[field.field] = field;\n\t }\n\t }\n\n\t if (!isEmptyObject(model)) {\n\t dataSource.schema = extend(true, dataSource.schema, { model: { fields: model } });\n\t }\n\t }\n\n\t dataSource.data = data;\n\n\t select = null;\n\t dataSource.select = null;\n\t table = null;\n\t dataSource.table = null;\n\n\t return dataSource instanceof DataSource ? dataSource : new DataSource(dataSource);\n\t };\n\n\t function inferSelect(select, fields) {\n\t select = $(select)[0];\n\t var options = select.options;\n\t var firstField = fields[0];\n\t var secondField = fields[1];\n\n\t var data = [];\n\t var idx, length;\n\t var optgroup;\n\t var option;\n\t var record;\n\t var value;\n\n\t for (idx = 0, length = options.length; idx < length; idx++) {\n\t record = {};\n\t option = options[idx];\n\t optgroup = option.parentNode;\n\n\t if (optgroup === select) {\n\t optgroup = null;\n\t }\n\n\t if (option.disabled || (optgroup && optgroup.disabled)) {\n\t continue;\n\t }\n\n\t if (optgroup) {\n\t record.optgroup = optgroup.label;\n\t }\n\n\t record[firstField.field] = option.text;\n\n\t value = option.attributes.value;\n\n\t if (value && value.specified) {\n\t value = option.value;\n\t } else {\n\t value = option.text;\n\t }\n\n\t record[secondField.field] = value;\n\n\t data.push(record);\n\t }\n\n\t return data;\n\t }\n\n\t function inferTable(table, fields) {\n\t var tbody = $(table)[0].tBodies[0],\n\t rows = tbody ? tbody.rows : [],\n\t idx,\n\t length,\n\t fieldIndex,\n\t fieldCount = fields.length,\n\t data = [],\n\t cells,\n\t record,\n\t cell,\n\t empty;\n\n\t for (idx = 0, length = rows.length; idx < length; idx++) {\n\t record = {};\n\t empty = true;\n\t cells = rows[idx].cells;\n\n\t for (fieldIndex = 0; fieldIndex < fieldCount; fieldIndex++) {\n\t cell = cells[fieldIndex];\n\t if(cell.nodeName.toLowerCase() !== \"th\") {\n\t empty = false;\n\t record[fields[fieldIndex].field] = cell.innerHTML;\n\t }\n\t }\n\t if(!empty) {\n\t data.push(record);\n\t }\n\t }\n\n\t return data;\n\t }\n\n\t var Node = Model.define({\n\t idField: \"id\",\n\n\t init: function(value) {\n\t var that = this,\n\t hasChildren = that.hasChildren || value && value.hasChildren,\n\t childrenField = \"items\",\n\t childrenOptions = {};\n\n\t kendo.data.Model.fn.init.call(that, value);\n\n\t if (typeof that.children === STRING) {\n\t childrenField = that.children;\n\t }\n\n\t childrenOptions = {\n\t schema: {\n\t data: childrenField,\n\t model: {\n\t hasChildren: hasChildren,\n\t id: that.idField,\n\t fields: that.fields\n\t }\n\t }\n\t };\n\n\t if (typeof that.children !== STRING) {\n\t extend(childrenOptions, that.children);\n\t }\n\n\t childrenOptions.data = value;\n\n\t if (!hasChildren) {\n\t hasChildren = childrenOptions.schema.data;\n\t }\n\n\t if (typeof hasChildren === STRING) {\n\t hasChildren = kendo.getter(hasChildren);\n\t }\n\n\t if (isFunction(hasChildren)) {\n\t var hasChildrenObject = hasChildren.call(that, that);\n\n\t if(hasChildrenObject && hasChildrenObject.length === 0){\n\t that.hasChildren = false;\n\t } else{\n\t that.hasChildren = !!hasChildrenObject;\n\t }\n\t }\n\n\t that._childrenOptions = childrenOptions;\n\n\t if (that.hasChildren) {\n\t that._initChildren();\n\t }\n\n\t that._loaded = !!(value && value._loaded);\n\t },\n\n\t _initChildren: function() {\n\t var that = this;\n\t var children, transport, parameterMap;\n\n\t if (!(that.children instanceof HierarchicalDataSource)) {\n\t children = that.children = new HierarchicalDataSource(that._childrenOptions);\n\n\t transport = children.transport;\n\t parameterMap = transport.parameterMap;\n\n\t transport.parameterMap = function(data, type) {\n\t data[that.idField || \"id\"] = that.id;\n\n\t if (parameterMap) {\n\t data = parameterMap.call(that, data, type);\n\t }\n\n\t return data;\n\t };\n\n\t children.parent = function(){\n\t return that;\n\t };\n\n\t children.bind(CHANGE, function(e){\n\t e.node = e.node || that;\n\t that.trigger(CHANGE, e);\n\t });\n\n\t children.bind(ERROR, function(e){\n\t var collection = that.parent();\n\n\t if (collection) {\n\t e.node = e.node || that;\n\t collection.trigger(ERROR, e);\n\t }\n\t });\n\n\t that._updateChildrenField();\n\t }\n\t },\n\n\t append: function(model) {\n\t this._initChildren();\n\t this.loaded(true);\n\t this.children.add(model);\n\t },\n\n\t hasChildren: false,\n\n\t level: function() {\n\t var parentNode = this.parentNode(),\n\t level = 0;\n\n\t while (parentNode && parentNode.parentNode) {\n\t level++;\n\t parentNode = parentNode.parentNode ? parentNode.parentNode() : null;\n\t }\n\n\t return level;\n\t },\n\n\t _updateChildrenField: function() {\n\t var fieldName = this._childrenOptions.schema.data;\n\n\t this[fieldName || \"items\"] = this.children.data();\n\t },\n\n\t _childrenLoaded: function() {\n\t this._loaded = true;\n\n\t this._updateChildrenField();\n\t },\n\n\t load: function() {\n\t var options = {};\n\t var method = \"_query\";\n\t var children, promise;\n\n\t if (this.hasChildren) {\n\t this._initChildren();\n\n\t children = this.children;\n\n\t options[this.idField || \"id\"] = this.id;\n\n\t if (!this._loaded) {\n\t children._data = undefined;\n\t method = \"read\";\n\t }\n\n\t children.one(CHANGE, proxy(this._childrenLoaded, this));\n\n\t if(this._matchFilter){\n\t options.filter = { field: '_matchFilter', operator: 'eq', value: true };\n\t }\n\n\t promise = children[method](options);\n\t } else {\n\t this.loaded(true);\n\t }\n\n\t return promise || $.Deferred().resolve().promise();\n\t },\n\n\t parentNode: function() {\n\t var array = this.parent();\n\n\t return array.parent();\n\t },\n\n\t loaded: function(value) {\n\t if (value !== undefined) {\n\t this._loaded = value;\n\t } else {\n\t return this._loaded;\n\t }\n\t },\n\n\t shouldSerialize: function(field) {\n\t return Model.fn.shouldSerialize.call(this, field) &&\n\t field !== \"children\" &&\n\t field !== \"_loaded\" &&\n\t field !== \"hasChildren\" &&\n\t field !== \"_childrenOptions\";\n\t }\n\t });\n\n\t function dataMethod(name) {\n\t return function() {\n\t var data = this._data,\n\t result = DataSource.fn[name].apply(this, slice.call(arguments));\n\n\t if (this._data != data) {\n\t this._attachBubbleHandlers();\n\t }\n\n\t return result;\n\t };\n\t }\n\n\t var HierarchicalDataSource = DataSource.extend({\n\t init: function(options) {\n\t var node = Node.define({\n\t children: options\n\t });\n\n\t if(options.filter && !options.serverFiltering){\n\t this._hierarchicalFilter = options.filter;\n\t options.filter = null;\n\t }\n\n\t DataSource.fn.init.call(this, extend(true, {}, { schema: { modelBase: node, model: node } }, options));\n\n\t this._attachBubbleHandlers();\n\t },\n\n\t _attachBubbleHandlers: function() {\n\t var that = this;\n\n\t that._data.bind(ERROR, function(e) {\n\t that.trigger(ERROR, e);\n\t });\n\t },\n\n\t read: function(data) {\n\t var result = DataSource.fn.read.call(this, data);\n\n\t if(this._hierarchicalFilter){\n\t if(this._data && this._data.length > 0){\n\t this.filter(this._hierarchicalFilter);\n\t }else{\n\t this.options.filter = this._hierarchicalFilter;\n\t this._filter = normalizeFilter(this.options.filter);\n\t this._hierarchicalFilter = null;\n\t }\n\t }\n\n\t return result;\n\t },\n\n\t remove: function(node){\n\t var parentNode = node.parentNode(),\n\t dataSource = this,\n\t result;\n\n\t if (parentNode && parentNode._initChildren) {\n\t dataSource = parentNode.children;\n\t }\n\n\t result = DataSource.fn.remove.call(dataSource, node);\n\n\t if (parentNode && !dataSource.data().length) {\n\t parentNode.hasChildren = false;\n\t }\n\n\t return result;\n\t },\n\n\t success: dataMethod(\"success\"),\n\n\t data: dataMethod(\"data\"),\n\n\t insert: function(index, model) {\n\t var parentNode = this.parent();\n\n\t if (parentNode && parentNode._initChildren) {\n\t parentNode.hasChildren = true;\n\t parentNode._initChildren();\n\t }\n\n\t return DataSource.fn.insert.call(this, index, model);\n\t },\n\n\t filter: function(val) {\n\t if (val === undefined) {\n\t return this._filter;\n\t }\n\n\t if(!this.options.serverFiltering && this._markHierarchicalQuery(val)){\n\t val = { logic: \"or\", filters: [val, {field:'_matchFilter', operator: 'equals', value: true }]};\n\t }\n\n\t this.trigger(\"reset\");\n\t this._query({ filter: val, page: 1 });\n\t },\n\n\t _markHierarchicalQuery: function(expressions){\n\t var compiled;\n\t var predicate;\n\t var fields;\n\t var operators;\n\t var filter;\n\t var accentFoldingFiltering = this.options.accentFoldingFiltering;\n\n\t expressions = accentFoldingFiltering ? $.extend({}, normalizeFilter(expressions), { accentFoldingFiltering: accentFoldingFiltering}) : normalizeFilter(expressions);\n\n\t if (!expressions || expressions.filters.length === 0) {\n\t this._updateHierarchicalFilter(function(){return true;});\n\t return false;\n\t }\n\n\t compiled = Query.filterExpr(expressions);\n\t fields = compiled.fields;\n\t operators = compiled.operators;\n\n\t predicate = filter = new Function(\"d, __f, __o\", \"return \" + compiled.expression);\n\n\t if (fields.length || operators.length) {\n\t filter = function(d) {\n\t return predicate(d, fields, operators);\n\t };\n\t }\n\n\t this._updateHierarchicalFilter(filter);\n\t return true;\n\t },\n\n\t _updateHierarchicalFilter: function(filter){\n\t var current;\n\t var data = this._data;\n\t var result = false;\n\n\t for (var idx = 0; idx < data.length; idx++) {\n\t current = data[idx];\n\n\t if(current.hasChildren){\n\t current._matchFilter = current.children._updateHierarchicalFilter(filter);\n\t if(!current._matchFilter){\n\t current._matchFilter = filter(current);\n\t }\n\t }else{\n\t current._matchFilter = filter(current);\n\t }\n\n\t if(current._matchFilter){\n\t result = true;\n\t }\n\t }\n\t return result;\n\t },\n\n\t _find: function(method, value) {\n\t var idx, length, node, children;\n\t var data = this._data;\n\n\t if (!data) {\n\t return;\n\t }\n\n\t node = DataSource.fn[method].call(this, value);\n\n\t if (node) {\n\t return node;\n\t }\n\n\t data = this._flatData(this._data);\n\n\t for (idx = 0, length = data.length; idx < length; idx++) {\n\t children = data[idx].children;\n\n\t if (!(children instanceof HierarchicalDataSource)) {\n\t continue;\n\t }\n\n\t node = children[method](value);\n\n\t if (node) {\n\t return node;\n\t }\n\t }\n\t },\n\n\t get: function(id) {\n\t return this._find(\"get\", id);\n\t },\n\n\t getByUid: function(uid) {\n\t return this._find(\"getByUid\", uid);\n\t }\n\t });\n\n\t function inferList(list, fields) {\n\t var items = $(list).children(),\n\t idx,\n\t length,\n\t data = [],\n\t record,\n\t textField = fields[0].field,\n\t urlField = fields[1] && fields[1].field,\n\t spriteCssClassField = fields[2] && fields[2].field,\n\t imageUrlField = fields[3] && fields[3].field,\n\t item,\n\t id,\n\t textChild,\n\t className,\n\t children;\n\n\t function elements(collection, tagName) {\n\t return collection.filter(tagName).add(collection.find(tagName));\n\t }\n\n\t for (idx = 0, length = items.length; idx < length; idx++) {\n\t record = { _loaded: true };\n\t item = items.eq(idx);\n\n\t textChild = item[0].firstChild;\n\t children = item.children();\n\t list = children.filter(\"ul\");\n\t children = children.filter(\":not(ul)\");\n\n\t id = item.attr(\"data-id\");\n\n\t if (id) {\n\t record.id = id;\n\t }\n\n\t if (textChild) {\n\t record[textField] = textChild.nodeType == 3 ? textChild.nodeValue : children.text();\n\t }\n\n\t if (urlField) {\n\t record[urlField] = elements(children, \"a\").attr(\"href\");\n\t }\n\n\t if (imageUrlField) {\n\t record[imageUrlField] = elements(children, \"img\").attr(\"src\");\n\t }\n\n\t if (spriteCssClassField) {\n\t className = elements(children, \".k-sprite\").prop(\"className\");\n\t record[spriteCssClassField] = className && kendo.trim(className.replace(\"k-sprite\", \"\"));\n\t }\n\n\t if (list.length) {\n\t record.items = inferList(list.eq(0), fields);\n\t }\n\n\t if (item.attr(\"data-hasChildren\") == \"true\") {\n\t record.hasChildren = true;\n\t }\n\n\t data.push(record);\n\t }\n\n\t return data;\n\t }\n\n\t HierarchicalDataSource.create = function(options) {\n\t options = options && options.push ? { data: options } : options;\n\n\t var dataSource = options || {},\n\t data = dataSource.data,\n\t fields = dataSource.fields,\n\t list = dataSource.list;\n\n\t if (data && data._dataSource) {\n\t return data._dataSource;\n\t }\n\n\t if (!data && fields && !dataSource.transport) {\n\t if (list) {\n\t data = inferList(list, fields);\n\t }\n\t }\n\n\t dataSource.data = data;\n\n\t return dataSource instanceof HierarchicalDataSource ? dataSource : new HierarchicalDataSource(dataSource);\n\t };\n\n\t var Buffer = kendo.Observable.extend({\n\t init: function(dataSource, viewSize, disablePrefetch) {\n\t kendo.Observable.fn.init.call(this);\n\n\t this._prefetching = false;\n\t this.dataSource = dataSource;\n\t this.prefetch = !disablePrefetch;\n\n\t var buffer = this;\n\n\t dataSource.bind(\"change\", function() {\n\t buffer._change();\n\t });\n\n\t dataSource.bind(\"reset\", function() {\n\t buffer._reset();\n\t });\n\n\t this._syncWithDataSource();\n\n\t this.setViewSize(viewSize);\n\t },\n\n\t setViewSize: function(viewSize) {\n\t this.viewSize = viewSize;\n\t this._recalculate();\n\t },\n\n\t at: function(index) {\n\t var pageSize = this.pageSize,\n\t itemPresent = true;\n\n\t if (index >= this.total()) {\n\t this.trigger(\"endreached\", {index: index });\n\t return null;\n\t }\n\n\t if (!this.useRanges) {\n\t return this.dataSource.view()[index];\n\t }\n\t if (this.useRanges) {\n\t // out of range request\n\t if (index < this.dataOffset || index >= this.skip + pageSize) {\n\t itemPresent = this.range(Math.floor(index / pageSize) * pageSize);\n\t }\n\n\t // prefetch\n\t if (index === this.prefetchThreshold) {\n\t this._prefetch();\n\t }\n\n\t // mid-range jump - prefetchThreshold and nextPageThreshold may be equal, do not change to else if\n\t if (index === this.midPageThreshold) {\n\t this.range(this.nextMidRange, true);\n\t }\n\t // next range jump\n\t else if (index === this.nextPageThreshold) {\n\t this.range(this.nextFullRange);\n\t }\n\t // pull-back\n\t else if (index === this.pullBackThreshold) {\n\t if (this.offset === this.skip) { // from full range to mid range\n\t this.range(this.previousMidRange);\n\t } else { // from mid range to full range\n\t this.range(this.previousFullRange);\n\t }\n\t }\n\n\t if (itemPresent) {\n\t return this.dataSource.at(index - this.dataOffset);\n\t } else {\n\t this.trigger(\"endreached\", { index: index });\n\t return null;\n\t }\n\t }\n\t },\n\n\t indexOf: function(item) {\n\t return this.dataSource.data().indexOf(item) + this.dataOffset;\n\t },\n\n\t total: function() {\n\t return parseInt(this.dataSource.total(), 10);\n\t },\n\n\t next: function() {\n\t var buffer = this,\n\t pageSize = buffer.pageSize,\n\t offset = buffer.skip - buffer.viewSize + pageSize,\n\t pageSkip = math.max(math.floor(offset / pageSize), 0) * pageSize;\n\n\t this.offset = offset;\n\t this.dataSource.prefetch(pageSkip, pageSize, function() {\n\t buffer._goToRange(offset, true);\n\t });\n\t },\n\n\t range: function(offset, nextRange) {\n\t if (this.offset === offset) {\n\t return true;\n\t }\n\n\t var buffer = this,\n\t pageSize = this.pageSize,\n\t pageSkip = math.max(math.floor(offset / pageSize), 0) * pageSize,\n\t dataSource = this.dataSource;\n\n\t if (nextRange) {\n\t pageSkip += pageSize;\n\t }\n\n\t if (dataSource.inRange(offset, pageSize)) {\n\t this.offset = offset;\n\t this._recalculate();\n\t this._goToRange(offset);\n\t return true;\n\t } else if (this.prefetch) {\n\t dataSource.prefetch(pageSkip, pageSize, function() {\n\t buffer.offset = offset;\n\t buffer._recalculate();\n\t buffer._goToRange(offset, true);\n\t });\n\t return false;\n\t }\n\n\t return true;\n\t },\n\n\t syncDataSource: function() {\n\t var offset = this.offset;\n\t this.offset = null;\n\t this.range(offset);\n\t },\n\n\t destroy: function() {\n\t this.unbind();\n\t },\n\n\t _prefetch: function() {\n\t var buffer = this,\n\t pageSize = this.pageSize,\n\t prefetchOffset = this.skip + pageSize,\n\t dataSource = this.dataSource;\n\n\t if (!dataSource.inRange(prefetchOffset, pageSize) && !this._prefetching && this.prefetch) {\n\t this._prefetching = true;\n\t this.trigger(\"prefetching\", { skip: prefetchOffset, take: pageSize });\n\n\t dataSource.prefetch(prefetchOffset, pageSize, function() {\n\t buffer._prefetching = false;\n\t buffer.trigger(\"prefetched\", { skip: prefetchOffset, take: pageSize });\n\t });\n\t }\n\t },\n\n\t _goToRange: function(offset, expanding) {\n\t if (this.offset !== offset) {\n\t return;\n\t }\n\n\t this.dataOffset = offset;\n\t this._expanding = expanding;\n\t this.dataSource.range(offset, this.pageSize);\n\t this.dataSource.enableRequestsInProgress();\n\t },\n\n\t _reset: function() {\n\t this._syncPending = true;\n\t },\n\n\t _change: function() {\n\t var dataSource = this.dataSource;\n\n\t this.length = this.useRanges ? dataSource.lastRange().end : dataSource.view().length;\n\n\t if (this._syncPending) {\n\t this._syncWithDataSource();\n\t this._recalculate();\n\t this._syncPending = false;\n\t this.trigger(\"reset\", { offset: this.offset });\n\t }\n\n\t this.trigger(\"resize\");\n\n\t if (this._expanding) {\n\t this.trigger(\"expand\");\n\t }\n\n\t delete this._expanding;\n\t },\n\n\t _syncWithDataSource: function() {\n\t var dataSource = this.dataSource;\n\n\t this._firstItemUid = dataSource.firstItemUid();\n\t this.dataOffset = this.offset = dataSource.skip() || 0;\n\t this.pageSize = dataSource.pageSize();\n\t this.useRanges = dataSource.options.serverPaging;\n\t },\n\n\t _recalculate: function() {\n\t var pageSize = this.pageSize,\n\t offset = this.offset,\n\t viewSize = this.viewSize,\n\t skip = Math.ceil(offset / pageSize) * pageSize;\n\n\t this.skip = skip;\n\t this.midPageThreshold = skip + pageSize - 1;\n\t this.nextPageThreshold = skip + viewSize - 1;\n\t this.prefetchThreshold = skip + Math.floor(pageSize / 3 * 2);\n\t this.pullBackThreshold = this.offset - 1;\n\n\t this.nextMidRange = skip + pageSize - viewSize;\n\t this.nextFullRange = skip;\n\t this.previousMidRange = offset - viewSize;\n\t this.previousFullRange = skip - pageSize;\n\t }\n\t });\n\n\t var BatchBuffer = kendo.Observable.extend({\n\t init: function(dataSource, batchSize) {\n\t var batchBuffer = this;\n\n\t kendo.Observable.fn.init.call(batchBuffer);\n\n\t this.dataSource = dataSource;\n\t this.batchSize = batchSize;\n\t this._total = 0;\n\n\t this.buffer = new Buffer(dataSource, batchSize * 3);\n\n\t this.buffer.bind({\n\t \"endreached\": function (e) {\n\t batchBuffer.trigger(\"endreached\", { index: e.index });\n\t },\n\t \"prefetching\": function (e) {\n\t batchBuffer.trigger(\"prefetching\", { skip: e.skip, take: e.take });\n\t },\n\t \"prefetched\": function (e) {\n\t batchBuffer.trigger(\"prefetched\", { skip: e.skip, take: e.take });\n\t },\n\t \"reset\": function () {\n\t batchBuffer._total = 0;\n\t batchBuffer.trigger(\"reset\");\n\t },\n\t \"resize\": function () {\n\t batchBuffer._total = Math.ceil(this.length / batchBuffer.batchSize);\n\t batchBuffer.trigger(\"resize\", { total: batchBuffer.total(), offset: this.offset });\n\t }\n\t });\n\t },\n\n\t syncDataSource: function() {\n\t this.buffer.syncDataSource();\n\t },\n\n\t at: function(index) {\n\t var buffer = this.buffer,\n\t skip = index * this.batchSize,\n\t take = this.batchSize,\n\t view = [],\n\t item;\n\n\t if (buffer.offset > skip) {\n\t buffer.at(buffer.offset - 1);\n\t }\n\n\t for (var i = 0; i < take; i++) {\n\t item = buffer.at(skip + i);\n\n\t if (item === null) {\n\t break;\n\t }\n\n\t view.push(item);\n\t }\n\n\t return view;\n\t },\n\n\t total: function() {\n\t return this._total;\n\t },\n\n\t destroy: function() {\n\t this.buffer.destroy();\n\t this.unbind();\n\t }\n\t });\n\n\t extend(true, kendo.data, {\n\t readers: {\n\t json: DataReader\n\t },\n\t Query: Query,\n\t DataSource: DataSource,\n\t HierarchicalDataSource: HierarchicalDataSource,\n\t Node: Node,\n\t ObservableObject: ObservableObject,\n\t ObservableArray: ObservableArray,\n\t LazyObservableArray: LazyObservableArray,\n\t LocalTransport: LocalTransport,\n\t RemoteTransport: RemoteTransport,\n\t Cache: Cache,\n\t DataReader: DataReader,\n\t Model: Model,\n\t Buffer: Buffer,\n\t BatchBuffer: BatchBuffer\n\t });\n\t})(window.kendo.jQuery);\n\n\treturn window.kendo;\n\n\t}, __webpack_require__(3));\n\n\n/***/ }),\n\n/***/ 1065:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./kendo.data.odata\");\n\n/***/ }),\n\n/***/ 1066:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./kendo.data.xml\");\n\n/***/ })\n\n/******/ });","module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(1067);\n\n\n/***/ }),\n\n/***/ 3:\n/***/ (function(module, exports) {\n\n\tmodule.exports = function() { throw new Error(\"define cannot be used indirect\"); };\r\n\n\n/***/ }),\n\n/***/ 1018:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./kendo.core\");\n\n/***/ }),\n\n/***/ 1067:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function(f, define){\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(1018) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (f), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t})(function(){\n\n\tvar __meta__ = { // jshint ignore:line\n\t id: \"data.odata\",\n\t name: \"OData\",\n\t category: \"framework\",\n\t depends: [ \"core\" ],\n\t hidden: true\n\t};\n\n\t(function($, undefined) {\n\t var kendo = window.kendo,\n\t extend = $.extend,\n\t NEWLINE = \"\\r\\n\",\n\t DOUBLELINE = \"\\r\\n\\r\\n\",\n\t isFunction = kendo.isFunction,\n\t odataFilters = {\n\t eq: \"eq\",\n\t neq: \"ne\",\n\t gt: \"gt\",\n\t gte: \"ge\",\n\t lt: \"lt\",\n\t lte: \"le\",\n\t contains : \"substringof\",\n\t doesnotcontain: \"substringof\",\n\t endswith: \"endswith\",\n\t startswith: \"startswith\",\n\t isnull: \"eq\",\n\t isnotnull: \"ne\",\n\t isnullorempty: \"eq\",\n\t isnotnullorempty: \"ne\",\n\t isempty: \"eq\",\n\t isnotempty: \"ne\"\n\t },\n\t odataFiltersVersionFour = extend({}, odataFilters, {\n\t contains: \"contains\"\n\t }),\n\t mappers = {\n\t pageSize: $.noop,\n\t page: $.noop,\n\t filter: function(params, filter, useVersionFour) {\n\t if (filter) {\n\t filter = toOdataFilter(filter, useVersionFour);\n\t if (filter) {\n\t params.$filter = filter;\n\t }\n\t }\n\t },\n\t sort: function(params, orderby) {\n\t var expr = $.map(orderby, function(value) {\n\t var order = value.field.replace(/\\./g, \"/\");\n\n\t if (value.dir === \"desc\") {\n\t order += \" desc\";\n\t }\n\n\t return order;\n\t }).join(\",\");\n\n\t if (expr) {\n\t params.$orderby = expr;\n\t }\n\t },\n\t skip: function(params, skip) {\n\t if (skip) {\n\t params.$skip = skip;\n\t }\n\t },\n\t take: function(params, take) {\n\t if (take) {\n\t params.$top = take;\n\t }\n\t }\n\t },\n\t defaultDataType = {\n\t read: {\n\t dataType: \"jsonp\"\n\t }\n\t };\n\n\t function toOdataFilter(filter, useOdataFour) {\n\t var result = [],\n\t logic = filter.logic || \"and\",\n\t idx,\n\t length,\n\t field,\n\t type,\n\t format,\n\t operator,\n\t value,\n\t ignoreCase,\n\t filters = filter.filters;\n\n\t for (idx = 0, length = filters.length; idx < length; idx++) {\n\t filter = filters[idx];\n\t field = filter.field;\n\t value = filter.value;\n\t operator = filter.operator;\n\n\t if (filter.filters) {\n\t filter = toOdataFilter(filter, useOdataFour);\n\t } else {\n\t ignoreCase = filter.ignoreCase;\n\t field = field.replace(/\\./g, \"/\");\n\t filter = odataFilters[operator];\n\t if (useOdataFour) {\n\t filter = odataFiltersVersionFour[operator];\n\t }\n\n\t if (operator === \"isnullorempty\") {\n\t filter = kendo.format(\"{0} {1} null or {0} {1} ''\", field, filter);\n\t } else if(operator === \"isnotnullorempty\") {\n\t filter = kendo.format(\"{0} {1} null and {0} {1} ''\", field, filter);\n\t } else if (operator === \"isnull\" || operator === \"isnotnull\") {\n\t filter = kendo.format(\"{0} {1} null\", field, filter);\n\t } else if (operator === \"isempty\" || operator === \"isnotempty\") {\n\t filter = kendo.format(\"{0} {1} ''\", field, filter);\n\t } else if (filter && value !== undefined) {\n\t type = $.type(value);\n\t if (type === \"string\") {\n\t format = \"'{1}'\";\n\t value = value.replace(/'/g, \"''\");\n\n\t if (ignoreCase === true) {\n\t field = \"tolower(\" + field + \")\";\n\t }\n\n\t } else if (type === \"date\") {\n\t if (useOdataFour) {\n\t format = \"{1:yyyy-MM-ddTHH:mm:ss+00:00}\";\n\t value = kendo.timezone.apply(value, 'Etc/UTC');\n\t } else {\n\t format = \"datetime'{1:yyyy-MM-ddTHH:mm:ss}'\";\n\t }\n\t } else {\n\t format = \"{1}\";\n\t }\n\n\t if (filter.length > 3) {\n\t if (filter !== \"substringof\") {\n\t format = \"{0}({2},\" + format + \")\";\n\t } else {\n\t format = \"{0}(\" + format + \",{2})\";\n\t if (operator === \"doesnotcontain\") {\n\t if (useOdataFour) {\n\t format = \"{0}({2},'{1}') eq -1\";\n\t filter = \"indexof\";\n\t } else {\n\t format += \" eq false\";\n\t }\n\t }\n\t }\n\t } else {\n\t format = \"{2} {0} \" + format;\n\t }\n\n\t filter = kendo.format(format, filter, value, field);\n\t }\n\t }\n\n\t result.push(filter);\n\t }\n\n\t filter = result.join(\" \" + logic + \" \");\n\n\t if (result.length > 1) {\n\t filter = \"(\" + filter + \")\";\n\t }\n\n\t return filter;\n\t }\n\n\t function stripMetadata(obj) {\n\t for (var name in obj) {\n\t if(name.indexOf(\"@odata\") === 0) {\n\t delete obj[name];\n\t }\n\t }\n\t }\n\n\t function hex16() {\n\t return Math.floor((1 + Math.random()) * 0x10000).toString(16).substr(1);\n\t }\n\n\t function createBoundary(prefix) {\n\t return prefix + hex16() + '-' + hex16() + '-' + hex16();\n\t }\n\n\t function createDelimeter(boundary, close) {\n\t var result = NEWLINE + \"--\" + boundary;\n\n\t if (close) {\n\t result += \"--\";\n\t }\n\n\t return result;\n\t }\n\n\t function createCommand(transport, item, httpVerb, command) {\n\t var transportUrl = transport.options[command].url;\n\t var commandPrefix = kendo.format(\"{0} \", httpVerb);\n\n\t if (isFunction(transportUrl)) {\n\t return commandPrefix + transportUrl(item);\n\t } else {\n\t return commandPrefix + transportUrl;\n\t }\n\t }\n\n\t function getOperationHeader(changeset, changeId) {\n\t var header = \"\";\n\n\t header += createDelimeter(changeset, false);\n\t header += NEWLINE + 'Content-Type: application/http';\n\t header += NEWLINE + 'Content-Transfer-Encoding: binary';\n\t header += NEWLINE + 'Content-ID: ' + changeId;\n\n\t return header;\n\t }\n\n\t function getOperationContent(item) {\n\t var content = \"\";\n\n\t content += NEWLINE + \"Content-Type: application/json;odata=minimalmetadata\";\n\t content += NEWLINE + \"Prefer: return=representation\";\n\t content += DOUBLELINE + kendo.stringify(item);\n\n\t return content;\n\t }\n\n\t function getOperations(collection, changeset, changeId, command, transport, skipContent) {\n\t var requestBody = \"\";\n\n\t for (var i = 0; i < collection.length; i++) {\n\t requestBody += getOperationHeader(changeset, changeId);\n\t requestBody += DOUBLELINE + createCommand(transport, collection[i], transport.options[command].type, command) + ' HTTP/1.1';\n\t if (!skipContent) {\n\t requestBody += getOperationContent(collection[i]);\n\t }\n\t requestBody += NEWLINE;\n\t changeId++;\n\t }\n\n\t return requestBody;\n\t }\n\n\t function processCollection(colection, boundary, changeset, changeId, transport, command, skipContent) {\n\t var requestBody = \"\";\n\n\t requestBody += getBoundary(boundary, changeset);\n\t requestBody += getOperations(colection, changeset, changeId, command, transport, skipContent);\n\t requestBody += createDelimeter(changeset, true);\n\t requestBody += NEWLINE;\n\n\t return requestBody;\n\t }\n\n\t function getBoundary(boundary,changeset) {\n\t var requestBody = \"\";\n\n\t requestBody += \"--\" + boundary + NEWLINE;\n\t requestBody += \"Content-Type: multipart/mixed; boundary=\" + changeset + NEWLINE;\n\n\t return requestBody;\n\t }\n\n\t function createBatchRequest(transport, colections) {\n\t var options = {};\n\t var boundary = createBoundary(\"sf_batch_\");\n\t var requestBody = \"\";\n\t var changeId = 0;\n\t var batchURL = transport.options.batch.url;\n\t var changeset = createBoundary(\"sf_changeset_\");\n\n\t options.type = transport.options.batch.type;\n\t options.url = isFunction(batchURL) ? batchURL() : batchURL;\n\t options.headers = {\n\t \"Content-Type\": \"multipart/mixed; boundary=\" + boundary\n\t };\n\n\t if (colections.updated.length) {\n\t requestBody += processCollection(colections.updated, boundary, changeset, changeId, transport, \"update\", false);\n\t changeId += colections.updated.length;\n\t changeset = createBoundary(\"sf_changeset_\");\n\t }\n\n\t if (colections.destroyed.length) {\n\t requestBody += processCollection(colections.destroyed, boundary, changeset, changeId, transport, \"destroy\", true);\n\t changeId += colections.destroyed.length;\n\t changeset = createBoundary(\"sf_changeset_\");\n\t }\n\n\t if (colections.created.length) {\n\t requestBody += processCollection(colections.created, boundary, changeset, changeId, transport, \"create\", false);\n\t }\n\n\t requestBody += createDelimeter(boundary, true);\n\n\t options.data = requestBody;\n\n\t return options;\n\t }\n\n\t function parseBatchResponse(responseText) {\n\t var responseMarkers = responseText.match(/--changesetresponse_[a-z0-9-]+$/gm);\n\t var markerIndex = 0;\n\t var collections = [];\n\t var changeBody;\n\t var status;\n\t var code;\n\t var marker;\n\t var jsonModel;\n\n\t collections.push({ models: [], passed: true });\n\n\t for (var i = 0; i < responseMarkers.length; i++) {\n\t marker = responseMarkers[i];\n\t if (marker.lastIndexOf('--', marker.length - 1)) {\n\t if (i < responseMarkers.length - 1) {\n\t collections.push({ models: [], passed: true });\n\t }\n\t continue;\n\t }\n\n\t if (!markerIndex) {\n\t markerIndex = responseText.indexOf(marker);\n\t } else {\n\t markerIndex = responseText.indexOf(marker, markerIndex + marker.length);\n\t }\n\n\t changeBody = responseText.substring(markerIndex, responseText.indexOf(\"--\", markerIndex + 1));\n\t status = changeBody.match(/^HTTP\\/1\\.\\d (\\d{3}) (.*)$/gm).pop();\n\t code = kendo.parseFloat(status.match(/\\d{3}/g).pop());\n\n\t if (code >= 200 && code <= 299) {\n\t jsonModel = changeBody.match(/\\{.*\\}/gm);\n\t if (jsonModel) {\n\t collections[collections.length - 1].models.push(JSON.parse(jsonModel[0]));\n\t }\n\t } else {\n\t collections[collections.length - 1].passed = false;\n\t }\n\n\t }\n\n\t return collections;\n\t }\n\n\t extend(true, kendo.data, {\n\t schemas: {\n\t odata: {\n\t type: \"json\",\n\t data: function(data) {\n\t return data.d.results || [data.d];\n\t },\n\t total: \"d.__count\"\n\t }\n\t },\n\t transports: {\n\t odata: {\n\t read: {\n\t cache: true, // to prevent jQuery from adding cache buster\n\t dataType: \"jsonp\",\n\t jsonp: \"$callback\"\n\t },\n\t update: {\n\t cache: true,\n\t dataType: \"json\",\n\t contentType: \"application/json\", // to inform the server the the request body is JSON encoded\n\t type: \"PUT\" // can be PUT or MERGE\n\t },\n\t create: {\n\t cache: true,\n\t dataType: \"json\",\n\t contentType: \"application/json\",\n\t type: \"POST\" // must be POST to create new entity\n\t },\n\t destroy: {\n\t cache: true,\n\t dataType: \"json\",\n\t type: \"DELETE\"\n\t },\n\t parameterMap: function(options, type, useVersionFour) {\n\t var params,\n\t value,\n\t option,\n\t dataType;\n\n\t options = options || {};\n\t type = type || \"read\";\n\t dataType = (this.options || defaultDataType)[type];\n\t dataType = dataType ? dataType.dataType : \"json\";\n\n\t if (type === \"read\") {\n\t params = {\n\t $inlinecount: \"allpages\"\n\t };\n\n\t if (dataType != \"json\") {\n\t params.$format = \"json\";\n\t }\n\n\t for (option in options) {\n\t if (mappers[option]) {\n\t mappers[option](params, options[option], useVersionFour);\n\t } else {\n\t params[option] = options[option];\n\t }\n\t }\n\t } else {\n\t if (dataType !== \"json\") {\n\t throw new Error(\"Only json dataType can be used for \" + type + \" operation.\");\n\t }\n\n\t if (type !== \"destroy\") {\n\t for (option in options) {\n\t value = options[option];\n\t if (typeof value === \"number\") {\n\t options[option] = value + \"\";\n\t }\n\t }\n\n\t params = kendo.stringify(options);\n\t }\n\t }\n\n\t return params;\n\t }\n\t }\n\t }\n\t });\n\n\t extend(true, kendo.data, {\n\t schemas: {\n\t \"odata-v4\": {\n\t type: \"json\",\n\t data: function(data) {\n\t if ($.isArray(data)) {\n\t for (var i = 0; i < data.length; i++) {\n\t stripMetadata(data[i]);\n\t }\n\t return data;\n\t } else {\n\t data = $.extend({}, data);\n\t stripMetadata(data);\n\n\t if (data.value) {\n\t return data.value;\n\t }\n\t return [data];\n\t }\n\t },\n\t total: function(data) {\n\t return data[\"@odata.count\"];\n\t }\n\t }\n\t },\n\t transports: {\n\t \"odata-v4\": {\n\t batch: {\n\t type: \"POST\"\n\t },\n\t read: {\n\t cache: true, // to prevent jQuery from adding cache buster\n\t dataType: \"json\"\n\t },\n\t update: {\n\t cache: true,\n\t dataType: \"json\",\n\t contentType: \"application/json;IEEE754Compatible=true\", // to inform the server the the request body is JSON encoded\n\t type: \"PUT\" // can be PUT or MERGE\n\t },\n\t create: {\n\t cache: true,\n\t dataType: \"json\",\n\t contentType: \"application/json;IEEE754Compatible=true\",\n\t type: \"POST\" // must be POST to create new entity\n\t },\n\t destroy: {\n\t cache: true,\n\t dataType: \"json\",\n\t type: \"DELETE\"\n\t },\n\t parameterMap: function(options, type) {\n\t var result = kendo.data.transports.odata.parameterMap(options, type, true);\n\t if (type == \"read\") {\n\t result.$count = true;\n\t delete result.$inlinecount;\n\t }\n\n\t return result;\n\t },\n\t submit: function(e) {\n\t var that = this;\n\t var options = createBatchRequest(that, e.data);\n\t var collections = e.data;\n\n\t if (!collections.updated.length && !collections.destroyed.length && !collections.created.length) {\n\t return;\n\t }\n\n\t $.ajax(extend(true, {}, {\n\t success: function (response) {\n\t var responses = parseBatchResponse(response);\n\t var index = 0;\n\t var current;\n\n\t if (collections.updated.length) {\n\t current = responses[index];\n\t if (current.passed) {\n\t // Pass either the obtained models or an empty array if only status codes are returned.\n\t e.success(current.models.length ? current.models : [], \"update\");\n\t }\n\t index++;\n\t }\n\t if (collections.destroyed.length) {\n\t current = responses[index];\n\t if (current.passed) {\n\t // For delete operations OData returns only status codes.\n\t // Passing empty array to datasource will force it to correctly remove the deleted items from the pristine collection.\n\t e.success([], \"destroy\");\n\t }\n\t index++;\n\t }\n\t if (collections.created.length) {\n\t current = responses[index];\n\t if (current.passed) {\n\t e.success(current.models, \"create\");\n\t }\n\t }\n\t },\n\t error: function (response, status, error) {\n\t e.error(response, status, error);\n\t }\n\t }, options));\n\t }\n\t }\n\t }\n\t });\n\n\t})(window.kendo.jQuery);\n\n\treturn window.kendo;\n\n\t}, __webpack_require__(3));\n\n\n/***/ })\n\n/******/ });","module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(1069);\n\n\n/***/ }),\n\n/***/ 3:\n/***/ (function(module, exports) {\n\n\tmodule.exports = function() { throw new Error(\"define cannot be used indirect\"); };\r\n\n\n/***/ }),\n\n/***/ 1018:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./kendo.core\");\n\n/***/ }),\n\n/***/ 1069:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function(f, define){\r\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(1018) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (f), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\r\n\t})(function(){\r\n\r\n\tvar __meta__ = { // jshint ignore:line\r\n\t id: \"data.xml\",\r\n\t name: \"XML\",\r\n\t category: \"framework\",\r\n\t depends: [ \"core\" ],\r\n\t hidden: true\r\n\t};\r\n\r\n\t/*jshint eqnull: true, boss: true */\r\n\t(function($, undefined) {\r\n\t var kendo = window.kendo,\r\n\t isArray = $.isArray,\r\n\t isPlainObject = $.isPlainObject,\r\n\t map = $.map,\r\n\t each = $.each,\r\n\t extend = $.extend,\r\n\t getter = kendo.getter,\r\n\t Class = kendo.Class;\r\n\r\n\t var XmlDataReader = Class.extend({\r\n\t init: function(options) {\r\n\t var that = this,\r\n\t total = options.total,\r\n\t model = options.model,\r\n\t parse = options.parse,\r\n\t errors = options.errors,\r\n\t serialize = options.serialize,\r\n\t data = options.data;\r\n\r\n\t if (model) {\r\n\t if (isPlainObject(model)) {\r\n\t var base = options.modelBase || kendo.data.Model;\r\n\r\n\t if (model.fields) {\r\n\t each(model.fields, function(field, value) {\r\n\t if (isPlainObject(value) && value.field) {\r\n\t if (!$.isFunction(value.field)) {\r\n\t value = extend(value, { field: that.getter(value.field) });\r\n\t }\r\n\t } else {\r\n\t value = { field: that.getter(value) };\r\n\t }\r\n\t model.fields[field] = value;\r\n\t });\r\n\t }\r\n\r\n\t var id = model.id;\r\n\t if (id) {\r\n\t var idField = {};\r\n\r\n\t idField[that.xpathToMember(id, true)] = { field : that.getter(id) };\r\n\t model.fields = extend(idField, model.fields);\r\n\t model.id = that.xpathToMember(id);\r\n\t }\r\n\t model = base.define(model);\r\n\t }\r\n\r\n\t that.model = model;\r\n\t }\r\n\r\n\t if (total) {\r\n\t if (typeof total == \"string\") {\r\n\t total = that.getter(total);\r\n\t that.total = function(data) {\r\n\t return parseInt(total(data), 10);\r\n\t };\r\n\t } else if (typeof total == \"function\"){\r\n\t that.total = total;\r\n\t }\r\n\t }\r\n\r\n\t if (errors) {\r\n\t if (typeof errors == \"string\") {\r\n\t errors = that.getter(errors);\r\n\t that.errors = function(data) {\r\n\t return errors(data) || null;\r\n\t };\r\n\t } else if (typeof errors == \"function\"){\r\n\t that.errors = errors;\r\n\t }\r\n\t }\r\n\r\n\t if (data) {\r\n\t if (typeof data == \"string\") {\r\n\t data = that.xpathToMember(data);\r\n\t that.data = function(value) {\r\n\t var result = that.evaluate(value, data),\r\n\t modelInstance;\r\n\r\n\t result = isArray(result) ? result : [result];\r\n\r\n\t if (that.model && model.fields) {\r\n\t modelInstance = new that.model();\r\n\r\n\t return map(result, function(value) {\r\n\t if (value) {\r\n\t var record = {}, field;\r\n\r\n\t for (field in model.fields) {\r\n\t record[field] = modelInstance._parse(field, model.fields[field].field(value));\r\n\t }\r\n\r\n\t return record;\r\n\t }\r\n\t });\r\n\t }\r\n\r\n\t return result;\r\n\t };\r\n\t } else if (typeof data == \"function\") {\r\n\t that.data = data;\r\n\t }\r\n\t }\r\n\r\n\t if (typeof parse == \"function\") {\r\n\t var xmlParse = that.parse;\r\n\r\n\t that.parse = function(data) {\r\n\t var xml = parse.call(that, data);\r\n\t return xmlParse.call(that, xml);\r\n\t };\r\n\t }\r\n\r\n\t if (typeof serialize == \"function\") {\r\n\t that.serialize = serialize;\r\n\t }\r\n\t },\r\n\t total: function(result) {\r\n\t return this.data(result).length;\r\n\t },\r\n\t errors: function(data) {\r\n\t return data ? data.errors : null;\r\n\t },\r\n\t serialize: function(data) {\r\n\t return data;\r\n\t },\r\n\t parseDOM: function(element) {\r\n\t var result = {},\r\n\t parsedNode,\r\n\t node,\r\n\t nodeType,\r\n\t nodeName,\r\n\t member,\r\n\t attribute,\r\n\t attributes = element.attributes,\r\n\t attributeCount = attributes.length,\r\n\t idx;\r\n\r\n\t for (idx = 0; idx < attributeCount; idx++) {\r\n\t attribute = attributes[idx];\r\n\t result[\"@\" + attribute.nodeName] = attribute.nodeValue;\r\n\t }\r\n\r\n\t for (node = element.firstChild; node; node = node.nextSibling) {\r\n\t nodeType = node.nodeType;\r\n\r\n\t if (nodeType === 3 || nodeType === 4) {\r\n\t // text nodes or CDATA are stored as #text field\r\n\t result[\"#text\"] = node.nodeValue;\r\n\t } else if (nodeType === 1) {\r\n\t // elements are stored as fields\r\n\t parsedNode = this.parseDOM(node);\r\n\r\n\t nodeName = node.nodeName;\r\n\r\n\t member = result[nodeName];\r\n\r\n\t if (isArray(member)) {\r\n\t // elements of same nodeName are stored as array\r\n\t member.push(parsedNode);\r\n\t } else if (member !== undefined) {\r\n\t member = [member, parsedNode];\r\n\t } else {\r\n\t member = parsedNode;\r\n\t }\r\n\r\n\t result[nodeName] = member;\r\n\t }\r\n\t }\r\n\t return result;\r\n\t },\r\n\r\n\t evaluate: function(value, expression) {\r\n\t var members = expression.split(\".\"),\r\n\t member,\r\n\t result,\r\n\t length,\r\n\t intermediateResult,\r\n\t idx;\r\n\r\n\t while (member = members.shift()) {\r\n\t value = value[member];\r\n\r\n\t if (isArray(value)) {\r\n\t result = [];\r\n\t expression = members.join(\".\");\r\n\r\n\t for (idx = 0, length = value.length; idx < length; idx++) {\r\n\t intermediateResult = this.evaluate(value[idx], expression);\r\n\r\n\t intermediateResult = isArray(intermediateResult) ? intermediateResult : [intermediateResult];\r\n\r\n\t result.push.apply(result, intermediateResult);\r\n\t }\r\n\r\n\t return result;\r\n\t }\r\n\t }\r\n\r\n\t return value;\r\n\t },\r\n\r\n\t parse: function(xml) {\r\n\t var documentElement,\r\n\t tree,\r\n\t result = {};\r\n\r\n\t documentElement = xml.documentElement || $.parseXML(xml).documentElement;\r\n\r\n\t tree = this.parseDOM(documentElement);\r\n\r\n\t result[documentElement.nodeName] = tree;\r\n\r\n\t return result;\r\n\t },\r\n\r\n\t xpathToMember: function(member, raw) {\r\n\t if (!member) {\r\n\t return \"\";\r\n\t }\r\n\r\n\t member = member.replace(/^\\//, \"\") // remove the first \"/\"\r\n\t .replace(/\\//g, \".\"); // replace all \"/\" with \".\"\r\n\r\n\t if (member.indexOf(\"@\") >= 0) {\r\n\t // replace @attribute with '[\"@attribute\"]'\r\n\t return member.replace(/\\.?(@.*)/, raw? '$1':'[\"$1\"]');\r\n\t }\r\n\r\n\t if (member.indexOf(\"text()\") >= 0) {\r\n\t // replace \".text()\" with '[\"#text\"]'\r\n\t return member.replace(/(\\.?text\\(\\))/, raw? '#text':'[\"#text\"]');\r\n\t }\r\n\r\n\t return member;\r\n\t },\r\n\t getter: function(member) {\r\n\t return getter(this.xpathToMember(member), true);\r\n\t }\r\n\t });\r\n\r\n\t $.extend(true, kendo.data, {\r\n\t XmlDataReader: XmlDataReader,\r\n\t readers: {\r\n\t xml: XmlDataReader\r\n\t }\r\n\t });\r\n\t})(window.kendo.jQuery);\r\n\r\n\treturn window.kendo;\r\n\r\n\t}, __webpack_require__(3));\r\n\n\n/***/ })\n\n/******/ });","module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(1132);\n\n\n/***/ }),\n\n/***/ 3:\n/***/ (function(module, exports) {\n\n\tmodule.exports = function() { throw new Error(\"define cannot be used indirect\"); };\r\n\n\n/***/ }),\n\n/***/ 1018:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./kendo.core\");\n\n/***/ }),\n\n/***/ 1132:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function(f, define){\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(1018) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (f), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t})(function(){\n\n\tvar __meta__ = { // jshint ignore:line\n\t id: \"dateinput\",\n\t name: \"DateInput\",\n\t category: \"web\",\n\t description: \"The DateInput widget allows to edit date by typing.\",\n\t depends: [ \"core\" ]\n\t};\n\n\t(function ($, undefined) {\n\t var global = window;\n\t var kendo = global.kendo;\n\t var caret = kendo.caret;\n\t var ui = kendo.ui;\n\t var Widget = ui.Widget;\n\t var keys = kendo.keys;\n\t var ns = \".kendoDateInput\";\n\t var proxy = $.proxy;\n\t var objectToString = {}.toString;\n\n\t var INPUT_EVENT_NAME = (kendo.support.propertyChangeEvent ? \"propertychange.kendoDateInput input\" : \"input\") + ns;\n\n\t var STATEDISABLED = \"k-state-disabled\";\n\t var STATEDEFAULT = \"k-state-default\";\n\t // var STATEFOCUSED = \"k-state-focused\";\n\t // var STATEHOVER = \"k-state-hover\";\n\t var STATEINVALID = \"k-state-invalid\";\n\n\t var DISABLED = \"disabled\";\n\t var READONLY = \"readonly\";\n\t var CHANGE = \"change\";\n\n\t var knownSymbols = \"dMyHhmftsz\";\n\n\t var DateInput = Widget.extend({\n\t init: function (element, options) {\n\t var that = this;\n\n\t Widget.fn.init.call(that, element, options);\n\t element = that.element;\n\n\t options = that.options;\n\t options.format = kendo._extractFormat(options.format || kendo.getCulture(options.culture).calendars.standard.patterns.d);\n\t options.min = kendo.parseDate(element.attr(\"min\")) || kendo.parseDate(options.min);\n\t options.max = kendo.parseDate(element.attr(\"max\")) || kendo.parseDate(options.max);\n\n\t var insidePicker = ((element.parent().attr(\"class\") || \"\").indexOf(\"k-picker-wrap\") >= 0);\n\t if (insidePicker) {\n\t that.wrapper = element.parent();\n\t } else {\n\t that.wrapper = element.wrap(\"\").parent();\n\t that.wrapper.addClass(element[0].className).removeClass('input-validation-error');\n\t that.wrapper[0].style.cssText = element[0].style.cssText;\n\t element.css({\n\t width: \"100%\",\n\t height: element[0].style.height\n\t });\n\t }\n\n\t that._inputWrapper = $(that.wrapper[0]);\n\n\t $(\"\").insertAfter(element);\n\n\t that._form();\n\n\t that.element\n\t .addClass(insidePicker ? \" \" : \"k-textbox\")\n\t .attr(\"autocomplete\", \"off\")\n\t .on(\"focusout\" + ns, function () {\n\t that._change();\n\t });\n\n\t try {\n\t element[0].setAttribute(\"type\", \"text\");\n\t } catch (e) {\n\t element[0].type = \"text\";\n\t }\n\n\t var disabled = element.is(\"[disabled]\") || $(that.element).parents(\"fieldset\").is(':disabled');\n\n\t if (disabled) {\n\t that.enable(false);\n\t } else {\n\t that.readonly(element.is(\"[readonly]\"));\n\t }\n\n\t that.value(that.options.value || element.val());\n\n\t kendo.notify(that);\n\t },\n\n\t options: {\n\t name: \"DateInput\",\n\t culture: \"\",\n\t value: \"\",\n\t format: \"\",\n\t min: new Date(1900, 0, 1),\n\t max: new Date(2099, 11, 31),\n\t messages: {\n\t \"year\": \"year\",\n\t \"month\": \"month\",\n\t \"day\": \"day\",\n\t \"weekday\": \"day of the week\",\n\t \"hour\": \"hours\",\n\t \"minute\": \"minutes\",\n\t \"second\": \"seconds\",\n\t \"dayperiod\": \"AM/PM\"\n\t }\n\t },\n\n\t events: [\n\t CHANGE\n\t ],\n\n\t min: function (value) {\n\t if (value !== undefined) {\n\t this.options.min = value;\n\t } else {\n\t return this.options.min;\n\t }\n\t },\n\n\t max: function (value) {\n\t if (value !== undefined) {\n\t this.options.max = value;\n\t } else {\n\t return this.options.max;\n\t }\n\t },\n\n\t setOptions: function (options) {\n\t var that = this;\n\t Widget.fn.setOptions.call(that, options);\n\t this._unbindInput();\n\t this._bindInput();\n\t this._updateElementValue();\n\t },\n\n\t destroy: function () {\n\t var that = this;\n\t that.element.off(ns);\n\n\t if (that._formElement) {\n\t that._formElement.off(\"reset\", that._resetHandler);\n\t }\n\n\t Widget.fn.destroy.call(that);\n\t },\n\n\t value: function (value) {\n\t if (value === undefined) {\n\t return this._dateTime.getDateObject();\n\t }\n\n\t if (value === null) {\n\t value = \"\";\n\t }\n\n\t if (objectToString.call(value) !== \"[object Date]\") {\n\t value = kendo.parseDate(value, this.options.format, this.options.culture);\n\t }\n\n\t if (value && !value.getTime()) {\n\t value = null;\n\t }\n\n\t this._dateTime = new customDateTime(value, this.options.format, this.options.culture, this.options.messages);\n\n\t this._updateElementValue();\n\t this._oldValue = value;\n\t },\n\n\t _updateElementValue: function () {\n\t var stringAndFromat = this._dateTime.toPair(this.options.format, this.options.culture, this.options.messages);\n\t this.element.val(stringAndFromat[0]);\n\t this._oldText = stringAndFromat[0];\n\t this._format = stringAndFromat[1];\n\t },\n\n\t readonly: function (readonly) {\n\t this._editable({\n\t readonly: readonly === undefined ? true : readonly,\n\t disable: false\n\t });\n\t },\n\n\t enable: function (enable) {\n\t this._editable({\n\t readonly: false,\n\t disable: !(enable = enable === undefined ? true : enable)\n\t });\n\t },\n\n\t _bindInput: function () {\n\t var that = this;\n\t that.element\n\t .on(\"focusout\" + ns, function () {\n\t that._change();\n\t })\n\t .on(\"paste\" + ns, proxy(that._paste, that))\n\t .on(\"keydown\" + ns, proxy(that._keydown, that))\n\t .on(INPUT_EVENT_NAME, proxy(that._input, that))\n\t .on(\"mouseup\" + ns, proxy(that._mouseUp, that))\n\t .on(\"DOMMouseScroll\" + ns + \" mousewheel\" + ns, proxy(that._scroll, that));\n\t },\n\n\t _unbindInput: function () {\n\t this.element\n\t .off(\"keydown\" + ns)\n\t .off(\"paste\" + ns)\n\t .off(\"focusout\" + ns)\n\t .off(INPUT_EVENT_NAME)\n\t .off(\"mouseup\" + ns)\n\t .off(\"DOMMouseScroll\" + ns + \" mousewheel\" + ns);\n\t },\n\n\t _editable: function (options) {\n\t var that = this;\n\t var element = that.element;\n\t var disable = options.disable;\n\t var readonly = options.readonly;\n\t var wrapper = that.wrapper;\n\n\t that._unbindInput();\n\n\t if (!readonly && !disable) {\n\t wrapper.addClass(STATEDEFAULT)\n\t .removeClass(STATEDISABLED);\n\t if(element && element.length) {\n\t element[0].removeAttribute(DISABLED);\n\t element[0].removeAttribute(READONLY);\n\t }\n\n\t that._bindInput();\n\t } else {\n\t if (disable) {\n\t wrapper.addClass(STATEDISABLED)\n\t .removeClass(STATEDEFAULT);\n\t element.attr(DISABLED, disable);\n\t if(element && element.length) {\n\t element[0].removeAttribute(READONLY);\n\t }\n\t }\n\t if (readonly) {\n\t element.attr(READONLY, readonly);\n\t }\n\t }\n\t },\n\n\t _change: function () {\n\t var that = this;\n\t var oldValue = that._oldValue;\n\t var value = that.value();\n\n\t if (value && that.min() && value < that.min()) {\n\t that.value(that.min());\n\t value = that.value();\n\t }\n\t if (value && that.max() && value > that.max()) {\n\t that.value(that.max());\n\t value = that.value();\n\t }\n\n\t if (oldValue && value && value.getTime() !== oldValue.getTime() ||\n\t oldValue && !value ||\n\t !oldValue && value\n\t ) {\n\t that._oldValue = value;\n\t that.trigger(CHANGE);\n\t that.element.trigger(CHANGE);\n\t }\n\t },\n\n\t _input: function () {\n\t var that = this;\n\t var element = that.element[0];\n\t var blinkInvalid = false;\n\n\t if (kendo._activeElement() !== element) {\n\t return;\n\t }\n\n\t var diff = approximateStringMatching(\n\t this._oldText,\n\t this._format,\n\t this.element[0].value,\n\t caret(this.element[0])[0]);\n\n\t var navigationOnly = (diff.length === 1 && diff[0][1] === \" \");\n\t if (!navigationOnly) {\n\t for (var i = 0; i < diff.length; i++) {\n\t var valid = this._dateTime.parsePart(diff[i][0], diff[i][1]);\n\t blinkInvalid = blinkInvalid || !valid;\n\t }\n\t }\n\t this._updateElementValue();\n\n\t if (diff.length && diff[0][0] !== \" \") {\n\t this._selectSegment(diff[0][0]);\n\n\t //android fix\n\t if (!navigationOnly) {\n\t var difSym = diff[0][0];\n\t setTimeout(function () { that._selectSegment(difSym); });\n\t }\n\t }\n\t if (navigationOnly) {\n\t var newEvent = { keyCode: 39, preventDefault: function () { } };\n\t this._keydown(newEvent);\n\t }\n\t if (blinkInvalid) {\n\t clearTimeout(that._blinkInvalidTimeout);\n\t var stateInvalid = STATEINVALID;\n\t that.wrapper.addClass(STATEINVALID);\n\t that._blinkInvalidTimeout = setTimeout(function () { that.wrapper.removeClass(stateInvalid); }, 100);\n\t }\n\t },\n\n\t _mouseUp: function () {\n\t var selection = caret(this.element[0]);\n\t if (selection[0] === selection[1]) {\n\t this._selectNearestSegment();\n\t }\n\t },\n\n\t _scroll: function (e) {\n\t if (kendo._activeElement() !== this.element[0] || this.element.is(\"[readonly]\")) {\n\t return;\n\t }\n\t e = window.event || e;\n\n\t var newEvent = { keyCode: 37, preventDefault: function () { } };\n\n\t if (e.shiftKey) {\n\t newEvent.keyCode = (e.wheelDelta || -e.detail) > 0 ? 37 : 39;\n\t } else {\n\t newEvent.keyCode = (e.wheelDelta || -e.detail) > 0 ? 38 : 40;\n\t }\n\t this._keydown(newEvent);\n\t e.returnValue = false;\n\t if (e.preventDefault) {\n\t e.preventDefault();\n\t }\n\t if (e.stopPropagation) {\n\t e.stopPropagation();\n\t }\n\t },\n\n\t _form: function () {\n\t var that = this;\n\t var element = that.element;\n\t var formId = element.attr(\"form\");\n\t var form = formId ? $(\"#\" + formId) : element.closest(\"form\");\n\t var initialValue = element[0].value;\n\n\t if (!initialValue && that.options.value) {\n\t initialValue = that.options.value;\n\t }\n\n\t if (form[0]) {\n\t that._resetHandler = function () {\n\t setTimeout(function () {\n\t that.value(initialValue);\n\t });\n\t };\n\n\t that._formElement = form.on(\"reset\", that._resetHandler);\n\t }\n\t },\n\n\t _paste: function (e) {\n\t e.preventDefault();\n\t },\n\n\t _keydown: function (e) {\n\t var key = e.keyCode;\n\t var selection;\n\t if (key == 37 || key == 39) { //left/right\n\t e.preventDefault();\n\t selection = caret(this.element[0]);\n\t if (selection[0] != selection[1]) {\n\t this._selectNearestSegment();\n\t }\n\t var dir = (key == 37) ? -1 : 1;\n\t var index = (dir == -1) ? caret(this.element[0])[0] - 1 : caret(this.element[0])[1] + 1;\n\t while (index >= 0 && index < this._format.length) {\n\t if (knownSymbols.indexOf(this._format[index]) >= 0) {\n\t this._selectSegment(this._format[index]);\n\t break;\n\t }\n\t index += dir;\n\t }\n\t }\n\t if (key == 38 || key == 40) { //up/down\n\t e.preventDefault();\n\t selection = caret(this.element[0]);\n\t var symbol = this._format[selection[0]];\n\t if (knownSymbols.indexOf(symbol) >= 0) {\n\t var interval = 1;\n\t if (symbol == 'm') {\n\t interval = this.options.interval || 1;\n\t }\n\t this._dateTime.modifyPart(symbol, key == 38 ? interval * 1 : interval * -1);\n\t this._updateElementValue();\n\t this._selectSegment(symbol);\n\t this.element.trigger(CHANGE);\n\t }\n\t }\n\t if (kendo.support.browser.msie && kendo.support.browser.version < 10) {\n\t var keycode = e.keyCode ? e.keyCode : e.which;\n\t if (keycode === 8 || keycode === 46) {\n\t var that = this;\n\t setTimeout(function () {\n\t that._input();\n\t }, 0);\n\t }\n\t }\n\t if (key === keys.ENTER){\n\t this._change();\n\t }\n\t },\n\n\t _selectNearestSegment: function () {\n\t var selection = caret(this.element[0]);\n\t var start = selection[0];\n\t for (var i = start, j = start - 1; i < this._format.length || j >= 0; i++ , j--) {\n\t if (i < this._format.length && knownSymbols.indexOf(this._format[i]) !== -1) {\n\t this._selectSegment(this._format[i]);\n\t return;\n\t }\n\t if (j >= 0 && knownSymbols.indexOf(this._format[j]) !== -1) {\n\t this._selectSegment(this._format[j]);\n\t return;\n\t }\n\t }\n\t },\n\n\t _selectSegment: function (symbol) {\n\t var begin = -1, end = 0;\n\t for (var i = 0; i < this._format.length; i++) {\n\t if (this._format[i] === symbol) {\n\t end = i + 1;\n\t if (begin === -1) {\n\t begin = i;\n\t }\n\t }\n\t }\n\t if (begin < 0) {\n\t begin = 0;\n\t }\n\t caret(this.element, begin, end);\n\t }\n\n\t });\n\n\t ui.plugin(DateInput);\n\n\t var customDateTime = function (initDate, initFormat, initCulture, initMessages) {\n\n\t var value = null;\n\t var year = true, month = true, date = true, hours = true, minutes = true, seconds = true, milliseconds = true;\n\t var typedMonthPart = \"\";\n\t var typedDayPeriodPart = \"\";\n\t var placeholders = {};\n\n\t //TODO: rewrite pad method\n\t var zeros = [\"\", \"0\", \"00\", \"000\", \"0000\"];\n\t function pad(number, digits, end) {\n\t number = number + \"\";\n\t digits = digits || 2;\n\t end = digits - number.length;\n\n\t if (end) {\n\t return zeros[digits].substring(0, end) + number;\n\t }\n\n\t return number;\n\t }\n\t var dateFormatRegExp = /dddd|ddd|dd|d|MMMM|MMM|MM|M|yyyy|yy|HH|H|hh|h|mm|m|fff|ff|f|tt|ss|s|zzz|zz|z|\"[^\"]*\"|'[^']*'/g;\n\t var months = null, calendar = null, days = null, returnsFormat = false;\n\t var matcher = function (match) {\n\t var mins, sign;\n\t var result;\n\n\t switch (match) {\n\t case (\"d\"): result = date ? value.getDate() : placeholders.day; break;\n\t case (\"dd\"): result = date ? pad(value.getDate()) : placeholders.day; break;\n\t case (\"ddd\"): result = date && month && year ? days.namesAbbr[value.getDay()] : placeholders.weekday; break;\n\t case (\"dddd\"): result = date && month && year ? days.names[value.getDay()] : placeholders.weekday; break;\n\n\t case (\"M\"): result = month ? value.getMonth() + 1 : placeholders.month; break;\n\t case (\"MM\"): result = month ? pad(value.getMonth() + 1) : placeholders.month; break;\n\t case (\"MMM\"): result = month ? months.namesAbbr[value.getMonth()] : placeholders.month; break;\n\t case (\"MMMM\"): result = month ? months.names[value.getMonth()] : placeholders.month; break;\n\n\t case (\"yy\"): result = year ? pad(value.getFullYear() % 100) : placeholders.year; break;\n\t case (\"yyyy\"): result = year ? pad(value.getFullYear(), 4) : placeholders.year; break;\n\n\t case (\"h\"): result = hours ? value.getHours() % 12 || 12 : placeholders.hour; break;\n\t case (\"hh\"): result = hours ? pad(value.getHours() % 12 || 12) : placeholders.hour; break;\n\t case (\"H\"): result = hours ? value.getHours() : placeholders.hour; break;\n\t case (\"HH\"): result = hours ? pad(value.getHours()) : placeholders.hour; break;\n\n\t case (\"m\"): result = minutes ? value.getMinutes() : placeholders.minute; break;\n\t case (\"mm\"): result = minutes ? pad(value.getMinutes()) : placeholders.minute; break;\n\t case (\"s\"): result = seconds ? value.getSeconds() : placeholders.second; break;\n\t case (\"ss\"): result = seconds ? pad(value.getSeconds()) : placeholders.second; break;\n\t case (\"f\"): result = milliseconds ? Math.floor(value.getMilliseconds() / 100) : milliseconds; break;\n\t case (\"ff\"):\n\t result = value.getMilliseconds();\n\t if (result > 99) {\n\t result = Math.floor(result / 10);\n\t }\n\t result = milliseconds ? pad(result) : match;\n\t break;\n\t case (\"fff\"): result = milliseconds ? pad(value.getMilliseconds(), 3) : match; break;\n\t case (\"tt\"): result = hours ? (value.getHours() < 12 ? calendar.AM[0] : calendar.PM[0]) : placeholders.dayperiod; break;\n\t case (\"zzz\"):\n\t mins = value.getTimezoneOffset();\n\t sign = mins < 0;\n\t result = Math.abs(mins / 60).toString().split(\".\")[0];\n\t mins = Math.abs(mins) - (result * 60);\n\t result = (sign ? \"+\" : \"-\") + pad(result);\n\t result += \":\" + pad(mins);\n\t break;\n\t case (\"z\"):\n\t case (\"zz\"):\n\t result = value.getTimezoneOffset() / 60;\n\t sign = result < 0;\n\t result = Math.abs(result).toString().split(\".\")[0];\n\t result = (sign ? \"+\" : \"-\") + (match === \"zz\" ? pad(result) : result);\n\t break;\n\t }\n\t result = (result !== undefined ? result : match.slice(1, match.length - 1));\n\n\t if (returnsFormat) {\n\t result = \"\" + result;\n\t var formatResult = \"\";\n\t if (match == \"ddd\") { match = \"EEE\"; }\n\t if (match == \"dddd\") { match = \"EEEE\"; }\n\t for (var i = 0; i < result.length; i++) {\n\t formatResult += match[0];\n\t }\n\t return formatResult;\n\t } else {\n\t return result;\n\t }\n\t };\n\n\t function generateMatcher(retFormat) {\n\t returnsFormat = retFormat;\n\t return matcher;\n\t }\n\n\t function setExisting(symbol, val) {\n\t switch (symbol) {\n\t case \"y\": year = val; break;\n\t case \"M\": month = val;\n\t if (!val) {\n\t value.setMonth(0);\n\t typedMonthPart = \"\";\n\t }\n\t break;\n\t case \"d\": date = val; break;\n\t case \"H\":\n\t case \"h\": hours = val;\n\t if (!val) {\n\t typedDayPeriodPart = \"\";\n\t }\n\t break;\n\t case \"m\": minutes = val; break;\n\t case \"s\": seconds = val; break;\n\t default: return;\n\t }\n\t }\n\n\t this.setValue = function (val) {\n\t date = val;\n\t };\n\n\t this.getValue = function () {\n\t return date;\n\t };\n\n\t this.modifyPart = function (symbol, offset) {\n\t var newValue = new Date((value && value.getTime) ? value.getTime() : value);\n\t switch (symbol) {\n\t case \"y\": newValue.setFullYear(newValue.getFullYear() + offset); break;\n\t case \"M\":\n\t var newMonth = newValue.getMonth() + offset;\n\t newValue.setMonth(newMonth);\n\t if (newValue.getMonth() % 12 !== (newMonth + 12) % 12) {\n\t //handle case when new month does not have such date\n\t newValue.setDate(1);\n\t newValue.setMonth(newMonth);\n\t }\n\t break;\n\t case \"d\":\n\t case \"E\": newValue.setDate(newValue.getDate() + offset); break;\n\t case \"H\":\n\t case \"h\": newValue.setHours(newValue.getHours() + offset); break;\n\t case \"m\": newValue.setMinutes(newValue.getMinutes() + offset); break;\n\t case \"s\": newValue.setSeconds(newValue.getSeconds() + offset); break;\n\t case \"t\": newValue.setHours((newValue.getHours() + 12) % 24); break;\n\t default: break;\n\t }\n\t if (newValue.getFullYear() > 0) {\n\t setExisting(symbol, true);\n\t value = newValue;\n\t }\n\t };\n\n\t this.parsePart = function (symbol, currentChar) {\n\t if (!currentChar) {\n\t setExisting(symbol, false);\n\t return true;\n\t }\n\t var newValue = new Date((value && value.getTime) ? value.getTime() : value);\n\t var newHours;\n\t switch (symbol) {\n\t case \"d\":\n\t var newDate = (date ? newValue.getDate() * 10 : 0) + parseInt(currentChar, 10);\n\t if (isNaN(newDate)) { return; }\n\t while (newDate > 31) {\n\t newDate = parseInt(newDate.toString().slice(1), 10);\n\t }\n\t if (newDate < 1) {\n\t date = false;\n\t } else {\n\t newValue.setDate(newDate);\n\t if (newValue.getMonth() !== value.getMonth()) {\n\t return;\n\t }\n\t date = true;\n\t }\n\t break;\n\t case \"M\":\n\t var newMonth = (month ? (newValue.getMonth() + 1) * 10 : 0) + parseInt(currentChar, 10);\n\t if (!isNaN(newMonth)) {\n\t while (newMonth > 12) {\n\t newMonth = parseInt(newMonth.toString().slice(1), 10);\n\t }\n\t if (newMonth < 1) {\n\t month = false;\n\t } else {\n\t newValue.setMonth(newMonth - 1);\n\t if (newValue.getMonth() !== newMonth - 1) {\n\t newValue.setDate(1);\n\t newValue.setMonth(newMonth - 1);\n\t }\n\t month = true;\n\t }\n\t }\n\t else {\n\t var monthNames = calendar.months.names;\n\t typedMonthPart += currentChar.toLowerCase();\n\n\t while (typedMonthPart.length > 0) {\n\t for (var i = 0; i < monthNames.length; i++) {\n\t if (monthNames[i].toLowerCase().indexOf(typedMonthPart) === 0) {\n\t newValue.setMonth(i);\n\t month = true;\n\t value = newValue;\n\t return true;\n\t }\n\t }\n\t typedMonthPart = typedMonthPart.substring(1, typedMonthPart.length);\n\t }\n\t return false;\n\t }\n\t break;\n\t case \"y\":\n\t var newYear = (year ? (newValue.getFullYear()) * 10 : 0) + parseInt(currentChar, 10);\n\t if (isNaN(newYear)) {return;}\n\t while (newYear > 9999) {\n\t newYear = parseInt(newYear.toString().slice(1), 10);\n\t }\n\t if (newYear < 1) {\n\t year = false;\n\t } else {\n\t newValue.setFullYear(newYear);\n\t year = true;\n\t }\n\t break;\n\t case \"h\":\n\t newHours = (hours ? (newValue.getHours() % 12 || 12) * 10 : 0) + parseInt(currentChar, 10);\n\t if (isNaN(newHours)) { return; }\n\t while (newHours > 12) {\n\t newHours = parseInt(newHours.toString().slice(1), 10);\n\t }\n\t newValue.setHours(Math.floor(newValue.getHours() / 12) * 12 + newHours % 12);\n\t hours = true;\n\t break;\n\t case \"H\":\n\t newHours = (hours ? (newValue.getHours()) * 10 : 0) + parseInt(currentChar, 10);\n\t if (isNaN(newHours)) { return; }\n\t while (newHours > 23) {\n\t newHours = parseInt(newHours.toString().slice(1), 10);\n\t }\n\t newValue.setHours(newHours);\n\t hours = true;\n\t break;\n\t case \"m\":\n\t var newMinutes = (minutes ? (newValue.getMinutes()) * 10 : 0) + parseInt(currentChar, 10);\n\t if (isNaN(newMinutes)) { return; }\n\t while (newMinutes > 59) {\n\t newMinutes = parseInt(newMinutes.toString().slice(1), 10);\n\t }\n\t newValue.setMinutes(newMinutes);\n\t minutes = true;\n\t break;\n\t case \"s\":\n\t var newSeconds = (seconds ? (newValue.getSeconds()) * 10 : 0) + parseInt(currentChar, 10);\n\t if (isNaN(newSeconds)) { return; }\n\t while (newSeconds > 59) {\n\t newSeconds = parseInt(newSeconds.toString().slice(1), 10);\n\t }\n\t newValue.setSeconds(newSeconds);\n\t seconds = true;\n\t break;\n\t case \"t\":\n\t if (hours) {\n\t typedDayPeriodPart += currentChar.toLowerCase();\n\t while (typedDayPeriodPart.length > 0) {\n\t if (calendar.AM[0].toLowerCase().indexOf(typedDayPeriodPart) === 0 && newValue.getHours() >= 12 ||\n\t calendar.PM[0].toLowerCase().indexOf(typedDayPeriodPart) === 0 && newValue.getHours() < 12) {\n\t newValue.setHours((newValue.getHours() + 12) % 24);\n\t value = newValue;\n\t return true;\n\t }\n\t typedDayPeriodPart = typedDayPeriodPart.substring(1, typedDayPeriodPart.length);\n\t }\n\t return false;\n\t }\n\t break;\n\t default: break;\n\t }\n\t value = newValue;\n\t return true;\n\t };\n\n\t this.toPair = function (format, culture , messages) {\n\t if (!format) {\n\t return [\"\", \"\"];\n\t }\n\t culture = kendo.getCulture(culture);\n\t calendar = culture.calendars.standard;\n\t format = calendar.patterns[format] || format;\n\t days = calendar.days;\n\t months = calendar.months;\n\t placeholders = messages;\n\t return [\n\t format.replace(dateFormatRegExp, generateMatcher(false)),\n\t format.replace(dateFormatRegExp, generateMatcher(true))\n\t ];\n\t };\n\n\t this.getDateObject = function () {\n\t return (year && month && date && hours && minutes && seconds && milliseconds) ?\n\t new Date(value.getTime()) : null;\n\t };\n\n\t if (!initDate) {\n\t value = new Date();\n\t var sampleFormat = this.toPair(initFormat, initCulture, initMessages)[1];\n\t for (var i = 0; i < sampleFormat.length; i++) {\n\t setExisting(sampleFormat[i], false);\n\t }\n\t } else {\n\t value = new Date(initDate.getTime());\n\t }\n\t };\n\n\t function approximateStringMatching(oldText, oldFormat, newText, caret){\n\t var oldTextSeparator = oldText[caret + oldText.length - newText.length];\n\t oldText = oldText.substring(0, caret + oldText.length - newText.length);\n\t newText = newText.substring(0, caret);\n\t var diff = [];\n\t var i;\n\t //handle typing single character over the same selection\n\t if (oldText === newText && caret > 0) {\n\t diff.push([oldFormat[caret - 1], newText[caret - 1]]);\n\t return diff;\n\t }\n\t if (oldText.indexOf(newText) === 0 && (newText.length === 0 || oldFormat[newText.length - 1] !== oldFormat[newText.length])) {\n\t //handle delete/backspace\n\t var deletedSymbol = \"\";\n\t for (i = newText.length; i < oldText.length; i++) {\n\t if (oldFormat[i] !== deletedSymbol && knownSymbols.indexOf(oldFormat[i]) >= 0) {\n\t deletedSymbol = oldFormat[i];\n\t diff.push([deletedSymbol, \"\"]);\n\t }\n\t }\n\t return diff;\n\t }\n\n\t //handle entering space or separator, for nagivation to next item\n\t if (newText[newText.length - 1] === \" \" || newText[newText.length - 1] === oldTextSeparator) {\n\t return [[oldFormat[caret - 1], \" \"]];\n\t }\n\n\t //handle inserting text (new text is longer than previous)\n\t //handle typing over literal as well\n\t if (newText.indexOf(oldText) === 0 || knownSymbols.indexOf(oldFormat[caret - 1]) === -1) {\n\t var symbol = oldFormat[0];\n\t for (i = Math.max(0, oldText.length - 1); i < oldFormat.length; i++) {\n\t if (knownSymbols.indexOf(oldFormat[i]) >= 0) {\n\t symbol = oldFormat[i];\n\t break;\n\t }\n\t }\n\t return [[symbol, newText[caret - 1]]];\n\t }\n\t //handle typing over correctly selected part\n\t return [[oldFormat[caret - 1], newText[caret - 1]]];\n\t}\n\n\t})(window.kendo.jQuery);\n\n\treturn window.kendo;\n\n\t}, __webpack_require__(3));\n\n\n/***/ })\n\n/******/ });","module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(1133);\n\n\n/***/ }),\n\n/***/ 3:\n/***/ (function(module, exports) {\n\n\tmodule.exports = function() { throw new Error(\"define cannot be used indirect\"); };\r\n\n\n/***/ }),\n\n/***/ 1054:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./kendo.popup\");\n\n/***/ }),\n\n/***/ 1133:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function(f, define){\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(1134), __webpack_require__(1054), __webpack_require__(1135) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (f), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t})(function(){\n\n\tvar __meta__ = { // jshint ignore:line\n\t id: \"datepicker\",\n\t name: \"DatePicker\",\n\t category: \"web\",\n\t description: \"The DatePicker widget allows the user to select a date from a calendar or by direct input.\",\n\t depends: [ \"calendar\", \"popup\" ]\n\t};\n\n\t(function($, undefined) {\n\t var kendo = window.kendo,\n\t ui = kendo.ui,\n\t Widget = ui.Widget,\n\t parse = kendo.parseDate,\n\t keys = kendo.keys,\n\t support = kendo.support,\n\t template = kendo.template,\n\t activeElement = kendo._activeElement,\n\t DIV = \"
\",\n\t SPAN = \"\",\n\t ns = \".kendoDatePicker\",\n\t CLICK = \"click\" + ns,\n\t UP = support.mouseAndTouchPresent ? kendo.applyEventMap(\"up\", ns.slice(1)) : CLICK,\n\t OPEN = \"open\",\n\t CLOSE = \"close\",\n\t CHANGE = \"change\",\n\t DISABLED = \"disabled\",\n\t READONLY = \"readonly\",\n\t DEFAULT = \"k-state-default\",\n\t FOCUSED = \"k-state-focused\",\n\t SELECTED = \"k-state-selected\",\n\t STATEDISABLED = \"k-state-disabled\",\n\t HOVER = \"k-state-hover\",\n\t HOVEREVENTS = \"mouseenter\" + ns + \" mouseleave\" + ns,\n\t MOUSEDOWN = \"mousedown\" + ns,\n\t ID = \"id\",\n\t MIN = \"min\",\n\t MAX = \"max\",\n\t MONTH = \"month\",\n\t ARIA_DISABLED = \"aria-disabled\",\n\t ARIA_EXPANDED = \"aria-expanded\",\n\t ARIA_HIDDEN = \"aria-hidden\",\n\t calendar = kendo.calendar,\n\t isInRange = calendar.isInRange,\n\t restrictValue = calendar.restrictValue,\n\t isEqualDatePart = calendar.isEqualDatePart,\n\t extend = $.extend,\n\t proxy = $.proxy,\n\t DATE = Date;\n\n\t function normalize(options) {\n\t var parseFormats = options.parseFormats,\n\t format = options.format;\n\n\t calendar.normalize(options);\n\n\n\t parseFormats = $.isArray(parseFormats) ? parseFormats : [parseFormats];\n\n\t if (!parseFormats.length) {\n\t parseFormats.push(\"yyyy-MM-dd\");\n\t }\n\n\t if ($.inArray(format, parseFormats) === -1) {\n\t parseFormats.splice(0, 0, options.format);\n\t }\n\n\t options.parseFormats = parseFormats;\n\t }\n\n\t function preventDefault(e) {\n\t e.preventDefault();\n\t }\n\n\t var DateView = function(options) {\n\t var that = this, id,\n\t body = document.body,\n\t div = $(DIV).attr(ARIA_HIDDEN, \"true\")\n\t .addClass(\"k-calendar-container\");\n\n\t that.options = options = options || {};\n\t id = options.id;\n\n\t if(!options.omitPopup){\n\t div.appendTo(body);\n\t that.popup = new ui.Popup(div, extend(options.popup, options, { name: \"Popup\", isRtl: kendo.support.isRtl(options.anchor) }));\n\t } else {\n\t div = options.dateDiv;\n\t }\n\t if (id) {\n\t id += \"_dateview\";\n\n\t div.attr(ID, id);\n\t that._dateViewID = id;\n\t }\n\t that.div = div;\n\n\t that.value(options.value);\n\t };\n\n\t DateView.prototype = {\n\t _calendar: function() {\n\t var that = this;\n\t var calendar = that.calendar;\n\t var options = that.options;\n\t var div;\n\n\t if (!calendar) {\n\t div = $(DIV).attr(ID, kendo.guid())\n\t .appendTo(options.omitPopup ? options.dateDiv : that.popup.element)\n\t .on(MOUSEDOWN, preventDefault)\n\t .on(CLICK, \"td:has(.k-link)\", proxy(that._click, that));\n\n\t that.calendar = calendar = new ui.Calendar(div, { componentType: options.componentType });\n\t that._setOptions(options);\n\n\t kendo.calendar.makeUnselectable(calendar.element);\n\n\t calendar.navigate(that._value || that._current, options.start);\n\n\t that.value(that._value);\n\t }\n\t },\n\n\t _setOptions: function(options) {\n\t this.calendar.setOptions({\n\t focusOnNav: false,\n\t change: options.change,\n\t culture: options.culture,\n\t dates: options.dates,\n\t depth: options.depth,\n\t footer: options.footer,\n\t format: options.format,\n\t max: options.max,\n\t min: options.min,\n\t month: options.month,\n\t weekNumber: options.weekNumber,\n\t start: options.start,\n\t disableDates: options.disableDates\n\t });\n\t },\n\n\t setOptions: function(options) {\n\t var old = this.options;\n\t var disableDates = options.disableDates;\n\n\t if (disableDates) {\n\t options.disableDates = calendar.disabled(disableDates);\n\t }\n\n\t this.options = extend(old, options, {\n\t change: old.change,\n\t close: old.close,\n\t open: old.open\n\t });\n\n\t if (this.calendar) {\n\t this._setOptions(this.options);\n\t }\n\t },\n\n\t destroy: function() {\n\t if(this.popup){\n\t this.popup.destroy();\n\t }\n\t },\n\n\t open: function() {\n\t var that = this;\n\t var popupHovered;\n\n\t that._calendar();\n\n\t // In some cases when the popup is opened resize is triggered which will cause it to close\n\t // Setting the below flag will prevent this from happening\n\t // Reference: https://github.com/telerik/kendo/pull/7553\n\t popupHovered = that.popup._hovered;\n\t that.popup._hovered = true;\n\n\t that.popup.open();\n\n\t setTimeout(function() {\n\t that.popup._hovered = popupHovered;\n\t }, 1);\n\t },\n\n\t close: function() {\n\t this.popup.close();\n\t },\n\n\t min: function(value) {\n\t this._option(MIN, value);\n\t },\n\n\t max: function(value) {\n\t this._option(MAX, value);\n\t },\n\n\t toggle: function() {\n\t var that = this;\n\n\t that[that.popup.visible() ? CLOSE : OPEN]();\n\t },\n\n\t move: function(e) {\n\t var that = this,\n\t key = e.keyCode,\n\t calendar = that.calendar,\n\t selectIsClicked = e.ctrlKey && key == keys.DOWN || key == keys.ENTER,\n\t handled = false;\n\n\t if (e.altKey) {\n\t if (key == keys.DOWN) {\n\t that.open();\n\t e.preventDefault();\n\t handled = true;\n\t } else if (key == keys.UP) {\n\t that.close();\n\t e.preventDefault();\n\t handled = true;\n\t }\n\n\t } else if (that.popup && that.popup.visible()) {\n\n\t if (key == keys.ESC || (selectIsClicked && calendar._cell.hasClass(SELECTED))) {\n\t that.close();\n\t e.preventDefault();\n\t return true;\n\t }\n\t //spacebar selects a date in the calendar\n\t if (key != keys.SPACEBAR) {\n\t that._current = calendar._move(e);\n\t }\n\n\t handled = true;\n\t }\n\n\t return handled;\n\t },\n\n\t current: function(date) {\n\t this._current = date;\n\t if (this.calendar) {\n\t this.calendar._focus(date);\n\t }\n\t },\n\n\t value: function(value) {\n\t var that = this,\n\t calendar = that.calendar,\n\t options = that.options,\n\t disabledDate = options.disableDates;\n\n\t if (disabledDate && disabledDate(value)) {\n\t value = null;\n\t }\n\n\t that._value = value;\n\t that._current = new DATE(+restrictValue(value, options.min, options.max));\n\n\t if (calendar) {\n\t calendar.value(value);\n\t }\n\t },\n\n\t _click: function(e) {\n\n\t if (e.currentTarget.className.indexOf(SELECTED) !== -1) {\n\t this.calendar.trigger(\"change\");\n\t this.close();\n\t }\n\t },\n\n\t _option: function(option, value) {\n\t var that = this;\n\t var calendar = that.calendar;\n\n\t that.options[option] = value;\n\n\t if (calendar) {\n\t calendar[option](value);\n\t }\n\t }\n\t };\n\n\t DateView.normalize = normalize;\n\n\t kendo.DateView = DateView;\n\n\t var DatePicker = Widget.extend({\n\t init: function(element, options) {\n\t var that = this,\n\t disabled,\n\t div;\n\n\t Widget.fn.init.call(that, element, options);\n\t element = that.element;\n\t options = that.options;\n\n\t options.disableDates = kendo.calendar.disabled(options.disableDates);\n\n\t options.min = parse(element.attr(\"min\")) || parse(options.min);\n\t options.max = parse(element.attr(\"max\")) || parse(options.max);\n\n\t normalize(options);\n\n\t that._initialOptions = extend({}, options);\n\n\t that._wrapper();\n\n\t that.dateView = new DateView(extend({}, options, {\n\t id: element.attr(ID),\n\t anchor: that.wrapper,\n\t change: function() {\n\t // calendar is the current scope\n\t that._change(this.value());\n\t that.close();\n\t },\n\t close: function(e) {\n\t if (that.trigger(CLOSE)) {\n\t e.preventDefault();\n\t } else {\n\t element.attr(ARIA_EXPANDED, false);\n\t div.attr(ARIA_HIDDEN, true);\n\t }\n\t },\n\t open: function(e) {\n\t var options = that.options,\n\t date;\n\n\t if (that.trigger(OPEN)) {\n\t e.preventDefault();\n\t } else {\n\t if (that.element.val() !== that._oldText) {\n\t date = parse(element.val(), options.parseFormats, options.culture);\n\n\t that.dateView[date ? \"current\" : \"value\"](date);\n\t }\n\n\t element.attr(ARIA_EXPANDED, true);\n\t div.attr(ARIA_HIDDEN, false);\n\n\t that._updateARIA(date);\n\n\t }\n\t }\n\t }));\n\t div = that.dateView.div;\n\n\t that._icon();\n\n\t try {\n\t element[0].setAttribute(\"type\", \"text\");\n\t } catch(e) {\n\t element[0].type = \"text\";\n\t }\n\n\t element\n\t .addClass(\"k-input\")\n\t .attr({\n\t role: \"combobox\",\n\t \"aria-expanded\": false,\n\t \"aria-owns\": that.dateView._dateViewID,\n\t \"autocomplete\": \"off\"\n\t });\n\t that._reset();\n\t that._template();\n\n\t disabled = element.is(\"[disabled]\") || $(that.element).parents(\"fieldset\").is(':disabled');\n\t if (disabled) {\n\t that.enable(false);\n\t } else {\n\t that.readonly(element.is(\"[readonly]\"));\n\t }\n\n\t that._createDateInput(options);\n\n\t that._old = that._update(options.value || that.element.val());\n\t that._oldText = element.val();\n\n\t kendo.notify(that);\n\t },\n\t events: [\n\t OPEN,\n\t CLOSE,\n\t CHANGE],\n\t options: {\n\t name: \"DatePicker\",\n\t value: null,\n\t footer: \"\",\n\t format: \"\",\n\t culture: \"\",\n\t parseFormats: [],\n\t min: new Date(1900, 0, 1),\n\t max: new Date(2099, 11, 31),\n\t start: MONTH,\n\t depth: MONTH,\n\t animation: {},\n\t month: {},\n\t dates: [],\n\t disableDates: null,\n\t ARIATemplate: 'Current focused date is #=kendo.toString(data.current, \"D\")#',\n\t dateInput: false,\n\t weekNumber: false\n\t },\n\n\t setOptions: function(options) {\n\t var that = this;\n\t var value = that._value;\n\n\t Widget.fn.setOptions.call(that, options);\n\n\t options = that.options;\n\n\t options.min = parse(options.min);\n\t options.max = parse(options.max);\n\n\t normalize(options);\n\n\t that.dateView.setOptions(options);\n\t that._createDateInput(options);\n\n\t if (!that._dateInput) {\n\t that.element.val(kendo.toString(value, options.format, options.culture));\n\t }\n\n\t if (value) {\n\t that._updateARIA(value);\n\t }\n\t },\n\n\t _editable: function(options) {\n\t var that = this,\n\t icon = that._dateIcon.off(ns),\n\t element = that.element.off(ns),\n\t wrapper = that._inputWrapper.off(ns),\n\t readonly = options.readonly,\n\t disable = options.disable;\n\n\t if (!readonly && !disable) {\n\t wrapper\n\t .addClass(DEFAULT)\n\t .removeClass(STATEDISABLED)\n\t .on(HOVEREVENTS, that._toggleHover);\n\t if(element && element.length) {\n\t element[0].removeAttribute(DISABLED);\n\t element[0].removeAttribute(READONLY);\n\t }\n\t element.attr(ARIA_DISABLED, false)\n\t .on(\"keydown\" + ns, proxy(that._keydown, that))\n\t .on(\"focusout\" + ns, proxy(that._blur, that))\n\t .on(\"focus\" + ns, function() {\n\t that._inputWrapper.addClass(FOCUSED);\n\t });\n\n\t icon.on(UP, proxy(that._click, that))\n\t .on(MOUSEDOWN, preventDefault);\n\t } else {\n\t wrapper\n\t .addClass(disable ? STATEDISABLED : DEFAULT)\n\t .removeClass(disable ? DEFAULT : STATEDISABLED);\n\n\t element.attr(DISABLED, disable)\n\t .attr(READONLY, readonly)\n\t .attr(ARIA_DISABLED, disable);\n\t }\n\t },\n\n\t readonly: function(readonly) {\n\t this._editable({\n\t readonly: readonly === undefined ? true : readonly,\n\t disable: false\n\t });\n\t if (this._dateInput) {\n\t this._dateInput._editable({\n\t readonly: readonly === undefined ? true : readonly,\n\t disable: false\n\t });\n\t }\n\t },\n\n\t enable: function(enable) {\n\t this._editable({\n\t readonly: false,\n\t disable: !(enable = enable === undefined ? true : enable)\n\t });\n\t if (this._dateInput) {\n\t this._dateInput._editable({\n\t readonly: false,\n\t disable: !(enable = enable === undefined ? true : enable)\n\t });\n\t }\n\t },\n\n\t destroy: function() {\n\t var that = this;\n\n\t Widget.fn.destroy.call(that);\n\n\t that.dateView.destroy();\n\n\t that.element.off(ns);\n\t that._dateIcon.off(ns);\n\t that._inputWrapper.off(ns);\n\n\t if (that._form) {\n\t that._form.off(\"reset\", that._resetHandler);\n\t }\n\t },\n\n\t open: function() {\n\t this.dateView.open();\n\t },\n\n\t close: function() {\n\t this.dateView.close();\n\t },\n\n\t min: function(value) {\n\t return this._option(MIN, value);\n\t },\n\n\t max: function(value) {\n\t return this._option(MAX, value);\n\t },\n\n\t value: function(value) {\n\t var that = this;\n\n\t if (value === undefined) {\n\t return that._value;\n\t }\n\n\t that._old = that._update(value);\n\n\t if (that._old === null) {\n\t that.element.val(\"\");\n\t }\n\n\t that._oldText = that.element.val();\n\t },\n\n\t _toggleHover: function(e) {\n\t $(e.currentTarget).toggleClass(HOVER, e.type === \"mouseenter\");\n\t },\n\n\t _blur: function() {\n\t var that = this,\n\t value = that.element.val();\n\n\t that.close();\n\t if (value !== that._oldText) {\n\t that._change(value);\n\t if (!value) {\n\t that.dateView.current(kendo.calendar.getToday());\n\t }\n\t }\n\n\t that._inputWrapper.removeClass(FOCUSED);\n\t },\n\n\t _click: function(e) {\n\t var that = this;\n\n\t that.dateView.toggle();\n\t that._focusElement(e.type);\n\t },\n\n\t _focusElement: function(eventType) {\n\t var element = this.element;\n\n\t if ((!support.touch || (support.mouseAndTouchPresent && !(eventType || \"\").match(/touch/i))) && element[0] !== activeElement()) {\n\t element.trigger(\"focus\");\n\t }\n\t },\n\n\t _change: function(value) {\n\t var that = this,\n\t oldValue = that.element.val(),\n\t dateChanged;\n\n\t value = that._update(value);\n\t dateChanged = !kendo.calendar.isEqualDate(that._old, value);\n\n\t var valueUpdated = dateChanged && !that._typing;\n\t var textFormatted = oldValue !== that.element.val();\n\n\t if (valueUpdated || textFormatted) {\n\t that.element.trigger(CHANGE);\n\t }\n\n\t if (dateChanged) {\n\t that._old = value;\n\t that._oldText = that.element.val();\n\n\t that.trigger(CHANGE);\n\t }\n\n\t that._typing = false;\n\t },\n\n\t _keydown: function(e) {\n\t var that = this,\n\t dateView = that.dateView,\n\t value = that.element.val(),\n\t handled = false;\n\n\t if (!dateView.popup.visible() && e.keyCode == keys.ENTER && value !== that._oldText) {\n\t that._change(value);\n\t } else {\n\t handled = dateView.move(e);\n\t that._updateARIA(dateView._current);\n\n\t if (!handled) {\n\t that._typing = true;\n\t } else if (that._dateInput && e.stopImmediatePropagation) {\n\t e.stopImmediatePropagation();\n\t }\n\t }\n\t },\n\n\t _icon: function() {\n\t var that = this,\n\t element = that.element,\n\t icon;\n\n\t icon = element.next(\"span.k-select\");\n\n\t if (!icon[0]) {\n\t icon = $('').insertAfter(element);\n\t }\n\n\t that._dateIcon = icon.attr({\n\t \"role\": \"button\",\n\t \"aria-controls\": that.dateView._dateViewID\n\t });\n\t },\n\n\t _option: function(option, value) {\n\t var that = this,\n\t options = that.options;\n\n\t if (value === undefined) {\n\t return options[option];\n\t }\n\n\t value = parse(value, options.parseFormats, options.culture);\n\n\t if (!value) {\n\t return;\n\t }\n\n\t options[option] = new DATE(+value);\n\t that.dateView[option](value);\n\t },\n\n\t _update: function(value) {\n\t var that = this,\n\t options = that.options,\n\t min = options.min,\n\t max = options.max,\n\t current = that._value,\n\t date = parse(value, options.parseFormats, options.culture),\n\t isSameType = (date === null && current === null) || (date instanceof Date && current instanceof Date),\n\t formattedValue;\n\n\t if (options.disableDates(date)) {\n\t date = null;\n\t if (!that._old && !that.element.val()) {\n\t value = null;\n\t }\n\t }\n\n\t if (+date === +current && isSameType) {\n\t formattedValue = kendo.toString(date, options.format, options.culture);\n\n\t if (formattedValue !== value) {\n\t that.element.val(date === null ? value : formattedValue);\n\t }\n\n\t return date;\n\t }\n\n\t if (date !== null && isEqualDatePart(date, min)) {\n\t date = restrictValue(date, min, max);\n\t } else if (!isInRange(date, min, max)) {\n\t date = null;\n\t }\n\n\t that._value = date;\n\t that.dateView.value(date);\n\t if (that._dateInput && date) {\n\t that._dateInput.value(date || value);\n\t } else {\n\t that.element.val(kendo.toString(date || value, options.format, options.culture));\n\t }\n\t that._updateARIA(date);\n\n\t return date;\n\t },\n\n\t _wrapper: function() {\n\t var that = this,\n\t element = that.element,\n\t wrapper;\n\n\t wrapper = element.parents(\".k-datepicker\");\n\n\t if (!wrapper[0]) {\n\t wrapper = element.wrap(SPAN).parent().addClass(\"k-picker-wrap k-state-default\");\n\t wrapper = wrapper.wrap(SPAN).parent();\n\t }\n\n\t wrapper[0].style.cssText = element[0].style.cssText;\n\t element.css({\n\t width: \"100%\",\n\t height: element[0].style.height\n\t });\n\n\t that.wrapper = wrapper.addClass(\"k-widget k-datepicker\")\n\t .addClass(element[0].className).removeClass('input-validation-error');\n\n\t that._inputWrapper = $(wrapper[0].firstChild);\n\t },\n\n\t _reset: function() {\n\t var that = this,\n\t element = that.element,\n\t formId = element.attr(\"form\"),\n\t options = that.options,\n\t disabledDate = options.disableDates,\n\t parseFormats = options.parseFormats.length ? options.parseFormats : null,\n\t optionsValue = that._initialOptions.value,\n\t form = formId ? $(\"#\" + formId) : element.closest(\"form\"),\n\t initialValue = element[0].defaultValue;\n\n\t if (optionsValue && (disabledDate && disabledDate(optionsValue))) {\n\t optionsValue = null;\n\t }\n\n\t if ((!initialValue || !kendo.parseDate(initialValue, parseFormats, options.culture)) && optionsValue) {\n\t element.attr(\"value\", kendo.toString(optionsValue, options.format, options.culture));\n\t }\n\n\t if (form[0]) {\n\t that._resetHandler = function() {\n\t that.value(optionsValue || element[0].defaultValue);\n\t that.max(that._initialOptions.max);\n\t that.min(that._initialOptions.min);\n\t };\n\n\t that._form = form.on(\"reset\", that._resetHandler);\n\t }\n\t },\n\n\t _template: function() {\n\t this._ariaTemplate = template(this.options.ARIATemplate);\n\t },\n\n\t _createDateInput: function(options) {\n\t if (this._dateInput) {\n\t this._dateInput.destroy();\n\t this._dateInput = null;\n\t }\n\n\t if (options.dateInput ) {\n\t this._dateInput = new ui.DateInput(this.element, {\n\t culture: options.culture,\n\t format: options.format,\n\t min: options.min,\n\t max: options.max\n\t });\n\t }\n\t },\n\n\t _updateARIA: function(date) {\n\t var cell;\n\t var that = this;\n\t var calendar = that.dateView.calendar;\n\t if(that.element && that.element.length) {\n\t that.element[0].removeAttribute(\"aria-activedescendant\");\n\t }\n\t if (calendar) {\n\t cell = calendar._cell;\n\t cell.attr(\"aria-label\", that._ariaTemplate({ current: date || calendar.current() }));\n\n\t that.element.attr(\"aria-activedescendant\", cell.attr(\"id\"));\n\t }\n\t }\n\t });\n\n\t ui.plugin(DatePicker);\n\n\t})(window.kendo.jQuery);\n\n\treturn window.kendo;\n\n\t}, __webpack_require__(3));\n\n\n/***/ }),\n\n/***/ 1134:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./kendo.calendar\");\n\n/***/ }),\n\n/***/ 1135:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./kendo.dateinput\");\n\n/***/ })\n\n/******/ });","module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(1143);\n\n\n/***/ }),\n\n/***/ 3:\n/***/ (function(module, exports) {\n\n\tmodule.exports = function() { throw new Error(\"define cannot be used indirect\"); };\r\n\n\n/***/ }),\n\n/***/ 1018:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./kendo.core\");\n\n/***/ }),\n\n/***/ 1056:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./kendo.userevents\");\n\n/***/ }),\n\n/***/ 1143:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function(f, define){\r\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(1018), __webpack_require__(1056) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (f), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\r\n\t})(function(){\r\n\r\n\tvar __meta__ = { // jshint ignore:line\r\n\t id: \"draganddrop\",\r\n\t name: \"Drag & drop\",\r\n\t category: \"framework\",\r\n\t description: \"Drag & drop functionality for any DOM element.\",\r\n\t depends: [ \"core\", \"userevents\" ]\r\n\t};\r\n\r\n\t(function ($, undefined) {\r\n\t var kendo = window.kendo,\r\n\t support = kendo.support,\r\n\t document = window.document,\r\n\t $window = $(window),\r\n\t Class = kendo.Class,\r\n\t Widget = kendo.ui.Widget,\r\n\t Observable = kendo.Observable,\r\n\t UserEvents = kendo.UserEvents,\r\n\t proxy = $.proxy,\r\n\t extend = $.extend,\r\n\t getOffset = kendo.getOffset,\r\n\t draggables = {},\r\n\t dropTargets = {},\r\n\t dropAreas = {},\r\n\t lastDropTarget,\r\n\t elementUnderCursor = kendo.elementUnderCursor,\r\n\t KEYUP = \"keyup\",\r\n\t CHANGE = \"change\",\r\n\r\n\t // Draggable events\r\n\t DRAGSTART = \"dragstart\",\r\n\t HOLD = \"hold\",\r\n\t DRAG = \"drag\",\r\n\t DRAGEND = \"dragend\",\r\n\t DRAGCANCEL = \"dragcancel\",\r\n\t HINTDESTROYED = \"hintDestroyed\",\r\n\r\n\t // DropTarget events\r\n\t DRAGENTER = \"dragenter\",\r\n\t DRAGLEAVE = \"dragleave\",\r\n\t DROP = \"drop\";\r\n\r\n\t function contains(parent, child) {\r\n\t try {\r\n\t return $.contains(parent, child) || parent == child;\r\n\t } catch (e) {\r\n\t return false;\r\n\t }\r\n\t }\r\n\r\n\t function numericCssPropery(element, property) {\r\n\t return parseInt(element.css(property), 10) || 0;\r\n\t }\r\n\r\n\t function within(value, range) {\r\n\t return Math.min(Math.max(value, range.min), range.max);\r\n\t }\r\n\r\n\t function containerBoundaries(container, element) {\r\n\t var offset = getOffset(container),\r\n\t outerWidth = kendo._outerWidth,\r\n\t outerHeight = kendo._outerHeight,\r\n\t minX = offset.left + numericCssPropery(container, \"borderLeftWidth\") + numericCssPropery(container, \"paddingLeft\"),\r\n\t minY = offset.top + numericCssPropery(container, \"borderTopWidth\") + numericCssPropery(container, \"paddingTop\"),\r\n\t maxX = minX + container.width() - outerWidth(element, true),\r\n\t maxY = minY + container.height() - outerHeight(element, true);\r\n\r\n\t return {\r\n\t x: { min: minX, max: maxX },\r\n\t y: { min: minY, max: maxY }\r\n\t };\r\n\t }\r\n\r\n\t function checkTarget(target, targets, areas) {\r\n\t var theTarget, theFilter, i = 0,\r\n\t targetLen = targets && targets.length,\r\n\t areaLen = areas && areas.length;\r\n\r\n\t while (target && target.parentNode) {\r\n\t for (i = 0; i < targetLen; i ++) {\r\n\t theTarget = targets[i];\r\n\t if (theTarget.element[0] === target) {\r\n\t return { target: theTarget, targetElement: target };\r\n\t }\r\n\t }\r\n\r\n\t for (i = 0; i < areaLen; i ++) {\r\n\t theFilter = areas[i];\r\n\t if ($.contains(theFilter.element[0], target) && support.matchesSelector.call(target, theFilter.options.filter)) {\r\n\t return { target: theFilter, targetElement: target };\r\n\t }\r\n\t }\r\n\r\n\t target = target.parentNode;\r\n\t }\r\n\r\n\t return undefined;\r\n\t }\r\n\r\n\t var TapCapture = Observable.extend({\r\n\t init: function(element, options) {\r\n\t var that = this,\r\n\t domElement = element[0];\r\n\r\n\t that.capture = false;\r\n\r\n\t if (domElement.addEventListener) {\r\n\t $.each(kendo.eventMap.down.split(\" \"), function() {\r\n\t domElement.addEventListener(this, proxy(that._press, that), true);\r\n\t });\r\n\t $.each(kendo.eventMap.up.split(\" \"), function() {\r\n\t domElement.addEventListener(this, proxy(that._release, that), true);\r\n\t });\r\n\t } else {\r\n\t $.each(kendo.eventMap.down.split(\" \"), function() {\r\n\t domElement.attachEvent(this, proxy(that._press, that));\r\n\t });\r\n\t $.each(kendo.eventMap.up.split(\" \"), function() {\r\n\t domElement.attachEvent(this, proxy(that._release, that));\r\n\t });\r\n\t }\r\n\r\n\t Observable.fn.init.call(that);\r\n\r\n\t that.bind([\"press\", \"release\"], options || {});\r\n\t },\r\n\r\n\t captureNext: function() {\r\n\t this.capture = true;\r\n\t },\r\n\r\n\t cancelCapture: function() {\r\n\t this.capture = false;\r\n\t },\r\n\r\n\t _press: function(e) {\r\n\t var that = this;\r\n\t that.trigger(\"press\");\r\n\t if (that.capture) {\r\n\t e.preventDefault();\r\n\t }\r\n\t },\r\n\r\n\t _release: function(e) {\r\n\t var that = this;\r\n\t that.trigger(\"release\");\r\n\r\n\t if (that.capture) {\r\n\t e.preventDefault();\r\n\t that.cancelCapture();\r\n\t }\r\n\t }\r\n\t });\r\n\r\n\t var PaneDimension = Observable.extend({\r\n\t init: function(options) {\r\n\t var that = this;\r\n\t Observable.fn.init.call(that);\r\n\r\n\t that.forcedEnabled = false;\r\n\r\n\t $.extend(that, options);\r\n\r\n\t that.scale = 1;\r\n\r\n\t if (that.horizontal) {\r\n\t that.measure = \"offsetWidth\";\r\n\t that.scrollSize = \"scrollWidth\";\r\n\t that.axis = \"x\";\r\n\t } else {\r\n\t that.measure = \"offsetHeight\";\r\n\t that.scrollSize = \"scrollHeight\";\r\n\t that.axis = \"y\";\r\n\t }\r\n\t },\r\n\r\n\t makeVirtual: function() {\r\n\t $.extend(this, {\r\n\t virtual: true,\r\n\t forcedEnabled: true,\r\n\t _virtualMin: 0,\r\n\t _virtualMax: 0\r\n\t });\r\n\t },\r\n\r\n\t virtualSize: function(min, max) {\r\n\t if (this._virtualMin !== min || this._virtualMax !== max) {\r\n\t this._virtualMin = min;\r\n\t this._virtualMax = max;\r\n\t this.update();\r\n\t }\r\n\t },\r\n\r\n\t outOfBounds: function(offset) {\r\n\t return offset > this.max || offset < this.min;\r\n\t },\r\n\r\n\t forceEnabled: function() {\r\n\t this.forcedEnabled = true;\r\n\t },\r\n\r\n\t getSize: function() {\r\n\t return this.container[0][this.measure];\r\n\t },\r\n\r\n\t getTotal: function() {\r\n\t return this.element[0][this.scrollSize];\r\n\t },\r\n\r\n\t rescale: function(scale) {\r\n\t this.scale = scale;\r\n\t },\r\n\r\n\t update: function(silent) {\r\n\t var that = this,\r\n\t total = that.virtual ? that._virtualMax : that.getTotal(),\r\n\t scaledTotal = total * that.scale,\r\n\t size = that.getSize();\r\n\r\n\t if (total === 0 && !that.forcedEnabled) {\r\n\t return; // we are not visible.\r\n\t }\r\n\r\n\t that.max = that.virtual ? -that._virtualMin : 0;\r\n\t that.size = size;\r\n\t that.total = scaledTotal;\r\n\t that.min = Math.min(that.max, size - scaledTotal);\r\n\t that.minScale = size / total;\r\n\t that.centerOffset = (scaledTotal - size) / 2;\r\n\r\n\t that.enabled = that.forcedEnabled || (scaledTotal > size);\r\n\r\n\t if (!silent) {\r\n\t that.trigger(CHANGE, that);\r\n\t }\r\n\t }\r\n\t });\r\n\r\n\t var PaneDimensions = Observable.extend({\r\n\t init: function(options) {\r\n\t var that = this;\r\n\r\n\t Observable.fn.init.call(that);\r\n\r\n\t that.x = new PaneDimension(extend({horizontal: true}, options));\r\n\t that.y = new PaneDimension(extend({horizontal: false}, options));\r\n\t that.container = options.container;\r\n\t that.forcedMinScale = options.minScale;\r\n\t that.maxScale = options.maxScale || 100;\r\n\r\n\t that.bind(CHANGE, options);\r\n\t },\r\n\r\n\t rescale: function(newScale) {\r\n\t this.x.rescale(newScale);\r\n\t this.y.rescale(newScale);\r\n\t this.refresh();\r\n\t },\r\n\r\n\t centerCoordinates: function() {\r\n\t return { x: Math.min(0, -this.x.centerOffset), y: Math.min(0, -this.y.centerOffset) };\r\n\t },\r\n\r\n\t refresh: function() {\r\n\t var that = this;\r\n\t that.x.update();\r\n\t that.y.update();\r\n\t that.enabled = that.x.enabled || that.y.enabled;\r\n\t that.minScale = that.forcedMinScale || Math.min(that.x.minScale, that.y.minScale);\r\n\t that.fitScale = Math.max(that.x.minScale, that.y.minScale);\r\n\t that.trigger(CHANGE);\r\n\t }\r\n\t });\r\n\r\n\t var PaneAxis = Observable.extend({\r\n\t init: function(options) {\r\n\t var that = this;\r\n\t extend(that, options);\r\n\t Observable.fn.init.call(that);\r\n\t },\r\n\r\n\t outOfBounds: function() {\r\n\t return this.dimension.outOfBounds(this.movable[this.axis]);\r\n\t },\r\n\r\n\t dragMove: function(delta) {\r\n\t var that = this,\r\n\t dimension = that.dimension,\r\n\t axis = that.axis,\r\n\t movable = that.movable,\r\n\t position = movable[axis] + delta;\r\n\r\n\t if (!dimension.enabled) {\r\n\t return;\r\n\t }\r\n\r\n\t if ((position < dimension.min && delta < 0) || (position > dimension.max && delta > 0)) {\r\n\t delta *= that.resistance;\r\n\t }\r\n\r\n\t movable.translateAxis(axis, delta);\r\n\t that.trigger(CHANGE, that);\r\n\t }\r\n\t });\r\n\r\n\t var Pane = Class.extend({\r\n\r\n\t init: function(options) {\r\n\t var that = this,\r\n\t x,\r\n\t y,\r\n\t resistance,\r\n\t movable;\r\n\r\n\t extend(that, {elastic: true}, options);\r\n\r\n\t resistance = that.elastic ? 0.5 : 0;\r\n\t movable = that.movable;\r\n\r\n\t that.x = x = new PaneAxis({\r\n\t axis: \"x\",\r\n\t dimension: that.dimensions.x,\r\n\t resistance: resistance,\r\n\t movable: movable\r\n\t });\r\n\r\n\t that.y = y = new PaneAxis({\r\n\t axis: \"y\",\r\n\t dimension: that.dimensions.y,\r\n\t resistance: resistance,\r\n\t movable: movable\r\n\t });\r\n\r\n\t that.userEvents.bind([\"press\", \"move\", \"end\", \"gesturestart\", \"gesturechange\"], {\r\n\t gesturestart: function(e) {\r\n\t that.gesture = e;\r\n\t that.offset = that.dimensions.container.offset();\r\n\t },\r\n\r\n\t press: function(e) {\r\n\t if ($(e.event.target).closest(\"a\").is(\"[data-navigate-on-press=true]\")) {\r\n\t e.sender.cancel();\r\n\t }\r\n\t },\r\n\r\n\t gesturechange: function(e) {\r\n\t var previousGesture = that.gesture,\r\n\t previousCenter = previousGesture.center,\r\n\r\n\t center = e.center,\r\n\r\n\t scaleDelta = e.distance / previousGesture.distance,\r\n\r\n\t minScale = that.dimensions.minScale,\r\n\t maxScale = that.dimensions.maxScale,\r\n\t coordinates;\r\n\r\n\t if (movable.scale <= minScale && scaleDelta < 1) {\r\n\t // Resist shrinking. Instead of shrinking from 1 to 0.5, it will shrink to 0.5 + (1 /* minScale */ - 0.5) * 0.8 = 0.9;\r\n\t scaleDelta += (1 - scaleDelta) * 0.8;\r\n\t }\r\n\r\n\t if (movable.scale * scaleDelta >= maxScale) {\r\n\t scaleDelta = maxScale / movable.scale;\r\n\t }\r\n\r\n\t var offsetX = movable.x + that.offset.left,\r\n\t offsetY = movable.y + that.offset.top;\r\n\r\n\t coordinates = {\r\n\t x: (offsetX - previousCenter.x) * scaleDelta + center.x - offsetX,\r\n\t y: (offsetY - previousCenter.y) * scaleDelta + center.y - offsetY\r\n\t };\r\n\r\n\t movable.scaleWith(scaleDelta);\r\n\r\n\t x.dragMove(coordinates.x);\r\n\t y.dragMove(coordinates.y);\r\n\r\n\t that.dimensions.rescale(movable.scale);\r\n\t that.gesture = e;\r\n\t e.preventDefault();\r\n\t },\r\n\r\n\t move: function(e) {\r\n\t if (e.event.target.tagName.match(/textarea|input/i)) {\r\n\t return;\r\n\t }\r\n\r\n\t if (x.dimension.enabled || y.dimension.enabled) {\r\n\t x.dragMove(e.x.delta);\r\n\t y.dragMove(e.y.delta);\r\n\t e.preventDefault();\r\n\t } else {\r\n\t e.touch.skip();\r\n\t }\r\n\t },\r\n\r\n\t end: function(e) {\r\n\t e.preventDefault();\r\n\t }\r\n\t });\r\n\t }\r\n\t });\r\n\r\n\t var TRANSFORM_STYLE = support.transitions.prefix + \"Transform\",\r\n\t translate;\r\n\r\n\r\n\t if (support.hasHW3D) {\r\n\t translate = function(x, y, scale) {\r\n\t return \"translate3d(\" + x + \"px,\" + y +\"px,0) scale(\" + scale + \")\";\r\n\t };\r\n\t } else {\r\n\t translate = function(x, y, scale) {\r\n\t return \"translate(\" + x + \"px,\" + y +\"px) scale(\" + scale + \")\";\r\n\t };\r\n\t }\r\n\r\n\t var Movable = Observable.extend({\r\n\t init: function(element) {\r\n\t var that = this;\r\n\r\n\t Observable.fn.init.call(that);\r\n\r\n\t that.element = $(element);\r\n\t that.element[0].style.webkitTransformOrigin = \"left top\";\r\n\t that.x = 0;\r\n\t that.y = 0;\r\n\t that.scale = 1;\r\n\t that._saveCoordinates(translate(that.x, that.y, that.scale));\r\n\t },\r\n\r\n\t translateAxis: function(axis, by) {\r\n\t this[axis] += by;\r\n\t this.refresh();\r\n\t },\r\n\r\n\t scaleTo: function(scale) {\r\n\t this.scale = scale;\r\n\t this.refresh();\r\n\t },\r\n\r\n\t scaleWith: function(scaleDelta) {\r\n\t this.scale *= scaleDelta;\r\n\t this.refresh();\r\n\t },\r\n\r\n\t translate: function(coordinates) {\r\n\t this.x += coordinates.x;\r\n\t this.y += coordinates.y;\r\n\t this.refresh();\r\n\t },\r\n\r\n\t moveAxis: function(axis, value) {\r\n\t this[axis] = value;\r\n\t this.refresh();\r\n\t },\r\n\r\n\t moveTo: function(coordinates) {\r\n\t extend(this, coordinates);\r\n\t this.refresh();\r\n\t },\r\n\r\n\t refresh: function() {\r\n\t var that = this,\r\n\t x = that.x,\r\n\t y = that.y,\r\n\t newCoordinates;\r\n\r\n\t if (that.round) {\r\n\t x = Math.round(x);\r\n\t y = Math.round(y);\r\n\t }\r\n\r\n\t newCoordinates = translate(x, y, that.scale);\r\n\r\n\t if (newCoordinates != that.coordinates) {\r\n\t if (kendo.support.browser.msie && kendo.support.browser.version < 10) {\r\n\t that.element[0].style.position = \"absolute\";\r\n\t that.element[0].style.left = that.x + \"px\";\r\n\t that.element[0].style.top = that.y + \"px\";\r\n\r\n\t } else {\r\n\t that.element[0].style[TRANSFORM_STYLE] = newCoordinates;\r\n\t }\r\n\t that._saveCoordinates(newCoordinates);\r\n\t that.trigger(CHANGE);\r\n\t }\r\n\t },\r\n\r\n\t _saveCoordinates: function(coordinates) {\r\n\t this.coordinates = coordinates;\r\n\t }\r\n\t });\r\n\r\n\t function destroyDroppable(collection, widget) {\r\n\t var groupName = widget.options.group,\r\n\t droppables = collection[groupName],\r\n\t i;\r\n\r\n\t Widget.fn.destroy.call(widget);\r\n\r\n\t if (droppables.length > 1) {\r\n\t for (i = 0; i < droppables.length; i++) {\r\n\t if (droppables[i] == widget) {\r\n\t droppables.splice(i, 1);\r\n\t break;\r\n\t }\r\n\t }\r\n\t } else {\r\n\t droppables.length = 0; // WTF, porting this from the previous destroyGroup\r\n\t delete collection[groupName];\r\n\t }\r\n\t }\r\n\r\n\t var DropTarget = Widget.extend({\r\n\t init: function(element, options) {\r\n\t var that = this;\r\n\r\n\t Widget.fn.init.call(that, element, options);\r\n\r\n\t var group = that.options.group;\r\n\r\n\t if (!(group in dropTargets)) {\r\n\t dropTargets[group] = [ that ];\r\n\t } else {\r\n\t dropTargets[group].push( that );\r\n\t }\r\n\t },\r\n\r\n\t events: [\r\n\t DRAGENTER,\r\n\t DRAGLEAVE,\r\n\t DROP\r\n\t ],\r\n\r\n\t options: {\r\n\t name: \"DropTarget\",\r\n\t group: \"default\"\r\n\t },\r\n\r\n\t destroy: function() {\r\n\t destroyDroppable(dropTargets, this);\r\n\t },\r\n\r\n\t _trigger: function(eventName, e) {\r\n\t var that = this,\r\n\t draggable = draggables[that.options.group];\r\n\r\n\t if (draggable) {\r\n\t return that.trigger(eventName, extend({}, e.event, {\r\n\t draggable: draggable,\r\n\t dropTarget: e.dropTarget\r\n\t }));\r\n\t }\r\n\t },\r\n\r\n\t _over: function(e) {\r\n\t this._trigger(DRAGENTER, e);\r\n\t },\r\n\r\n\t _out: function(e) {\r\n\t this._trigger(DRAGLEAVE, e);\r\n\t },\r\n\r\n\t _drop: function(e) {\r\n\t var that = this,\r\n\t draggable = draggables[that.options.group];\r\n\r\n\t if (draggable) {\r\n\t draggable.dropped = !that._trigger(DROP, e);\r\n\t }\r\n\t }\r\n\t });\r\n\r\n\t DropTarget.destroyGroup = function(groupName) {\r\n\t var group = dropTargets[groupName] || dropAreas[groupName],\r\n\t i;\r\n\r\n\t if (group) {\r\n\t for (i = 0; i < group.length; i++) {\r\n\t Widget.fn.destroy.call(group[i]);\r\n\t }\r\n\r\n\t group.length = 0;\r\n\t delete dropTargets[groupName];\r\n\t delete dropAreas[groupName];\r\n\t }\r\n\t };\r\n\r\n\t DropTarget._cache = dropTargets;\r\n\r\n\t var DropTargetArea = DropTarget.extend({\r\n\t init: function(element, options) {\r\n\t var that = this;\r\n\r\n\t Widget.fn.init.call(that, element, options);\r\n\r\n\t var group = that.options.group;\r\n\r\n\t if (!(group in dropAreas)) {\r\n\t dropAreas[group] = [ that ];\r\n\t } else {\r\n\t dropAreas[group].push( that );\r\n\t }\r\n\t },\r\n\r\n\t destroy: function() {\r\n\t destroyDroppable(dropAreas, this);\r\n\t },\r\n\r\n\t options: {\r\n\t name: \"DropTargetArea\",\r\n\t group: \"default\",\r\n\t filter: null\r\n\t }\r\n\t });\r\n\r\n\t var Draggable = Widget.extend({\r\n\t init: function (element, options) {\r\n\t var that = this;\r\n\r\n\t Widget.fn.init.call(that, element, options);\r\n\r\n\t that._activated = false;\r\n\r\n\t that.userEvents = new UserEvents(that.element, {\r\n\t global: true,\r\n\t allowSelection: true,\r\n\t filter: that.options.filter,\r\n\t threshold: that.options.distance,\r\n\t start: proxy(that._start, that),\r\n\t hold: proxy(that._hold, that),\r\n\t move: proxy(that._drag, that),\r\n\t end: proxy(that._end, that),\r\n\t cancel: proxy(that._cancel, that),\r\n\t select: proxy(that._select, that)\r\n\t });\r\n\r\n\t if (kendo.support.touch) {\r\n\t that.element.find(that.options.filter).css('touch-action', 'none');\r\n\t }\r\n\r\n\t that._afterEndHandler = proxy(that._afterEnd, that);\r\n\t that._captureEscape = proxy(that._captureEscape, that);\r\n\t },\r\n\r\n\t events: [\r\n\t HOLD,\r\n\t DRAGSTART,\r\n\t DRAG,\r\n\t DRAGEND,\r\n\t DRAGCANCEL,\r\n\t HINTDESTROYED\r\n\t ],\r\n\r\n\t options: {\r\n\t name: \"Draggable\",\r\n\t distance: ( kendo.support.touch ? 0 : 5),\r\n\t group: \"default\",\r\n\t cursorOffset: null,\r\n\t axis: null,\r\n\t container: null,\r\n\t filter: null,\r\n\t ignore: null,\r\n\t holdToDrag: false,\r\n\t autoScroll: false,\r\n\t dropped: false\r\n\t },\r\n\r\n\t cancelHold: function() {\r\n\t this._activated = false;\r\n\t },\r\n\r\n\t _captureEscape: function(e) {\r\n\t var that = this;\r\n\r\n\t if (e.keyCode === kendo.keys.ESC) {\r\n\t that._trigger(DRAGCANCEL, { event: e });\r\n\t that.userEvents.cancel();\r\n\t }\r\n\t },\r\n\r\n\t _updateHint: function(e) {\r\n\t var that = this,\r\n\t coordinates,\r\n\t options = that.options,\r\n\t boundaries = that.boundaries,\r\n\t axis = options.axis,\r\n\t cursorOffset = that.options.cursorOffset;\r\n\r\n\t if (cursorOffset) {\r\n\t coordinates = { left: e.x.location + cursorOffset.left, top: e.y.location + cursorOffset.top };\r\n\t } else {\r\n\t that.hintOffset.left += e.x.delta;\r\n\t that.hintOffset.top += e.y.delta;\r\n\t coordinates = $.extend({}, that.hintOffset);\r\n\t }\r\n\r\n\t if (boundaries) {\r\n\t coordinates.top = within(coordinates.top, boundaries.y);\r\n\t coordinates.left = within(coordinates.left, boundaries.x);\r\n\t }\r\n\r\n\t if (axis === \"x\") {\r\n\t delete coordinates.top;\r\n\t } else if (axis === \"y\") {\r\n\t delete coordinates.left;\r\n\t }\r\n\r\n\t that.hint.css(coordinates);\r\n\t },\r\n\r\n\t _shouldIgnoreTarget: function(target) {\r\n\t var ignoreSelector = this.options.ignore;\r\n\t return ignoreSelector && $(target).is(ignoreSelector);\r\n\t },\r\n\r\n\t _select: function(e) {\r\n\t if (!this._shouldIgnoreTarget(e.event.target)) {\r\n\t e.preventDefault();\r\n\t }\r\n\t },\r\n\r\n\t _start: function(e) {\r\n\t var that = this,\r\n\t options = that.options,\r\n\t container = options.container ? $(options.container): null,\r\n\t hint = options.hint;\r\n\r\n\t if (this._shouldIgnoreTarget(e.touch.initialTouch) || (options.holdToDrag && !that._activated)) {\r\n\t that.userEvents.cancel();\r\n\t return;\r\n\t }\r\n\r\n\t that.currentTarget = e.target;\r\n\t that.currentTargetOffset = getOffset(that.currentTarget);\r\n\r\n\t if (hint) {\r\n\t if (that.hint) {\r\n\t that.hint.stop(true, true).remove();\r\n\t }\r\n\r\n\t that.hint = kendo.isFunction(hint) ? $(hint.call(that, that.currentTarget)) : hint;\r\n\r\n\t var offset = getOffset(that.currentTarget);\r\n\t that.hintOffset = offset;\r\n\r\n\t that.hint.css( {\r\n\t position: \"absolute\",\r\n\t zIndex: 20000, // the Window's z-index is 10000 and can be raised because of z-stacking\r\n\t left: offset.left,\r\n\t top: offset.top\r\n\t })\r\n\t .appendTo(document.body);\r\n\r\n\t that.angular(\"compile\", function(){\r\n\t that.hint.removeAttr(\"ng-repeat\");\r\n\t var scopeTarget = $(e.target);\r\n\r\n\t while (!scopeTarget.data(\"$$kendoScope\") && scopeTarget.length) {\r\n\t scopeTarget = scopeTarget.parent();\r\n\t }\r\n\r\n\t return {\r\n\t elements: that.hint.get(),\r\n\t scopeFrom: scopeTarget.data(\"$$kendoScope\")\r\n\t };\r\n\t });\r\n\t }\r\n\r\n\t draggables[options.group] = that;\r\n\r\n\t that.dropped = false;\r\n\r\n\t if (container) {\r\n\t that.boundaries = containerBoundaries(container, that.hint);\r\n\t }\r\n\r\n\t $(document).on(KEYUP, that._captureEscape);\r\n\r\n\t if (that._trigger(DRAGSTART, e)) {\r\n\t that.userEvents.cancel();\r\n\t that._afterEnd();\r\n\t }\r\n\r\n\t that.userEvents.capture();\r\n\t },\r\n\r\n\t _hold: function(e) {\r\n\t this.currentTarget = e.target;\r\n\r\n\t if (this._trigger(HOLD, e)) {\r\n\t this.userEvents.cancel();\r\n\t } else {\r\n\t this._activated = true;\r\n\t }\r\n\t },\r\n\r\n\t _drag: function(e) {\r\n\t e.preventDefault();\r\n\r\n\t var cursorElement = this._elementUnderCursor(e);\r\n\r\n\t if (this.options.autoScroll && this._cursorElement !== cursorElement) {\r\n\t this._scrollableParent = findScrollableParent(cursorElement);\r\n\t this._cursorElement = cursorElement;\r\n\t }\r\n\r\n\t this._lastEvent = e;\r\n\t this._processMovement(e, cursorElement);\r\n\r\n\t if (this.options.autoScroll) {\r\n\t // chrome seems to trigger mousemove when mouse is moved outside of the window (over the Chrome), too.\r\n\t if (this._scrollableParent[0]) {\r\n\t var velocity = autoScrollVelocity(e.x.location, e.y.location, scrollableViewPort(this._scrollableParent));\r\n\r\n\r\n\t this._scrollCompenstation = $.extend({}, this.hintOffset);\r\n\t this._scrollVelocity = velocity;\r\n\r\n\t if (velocity.y === 0 && velocity.x === 0) {\r\n\t clearInterval(this._scrollInterval);\r\n\t this._scrollInterval = null;\r\n\t } else if(!this._scrollInterval) {\r\n\t this._scrollInterval = setInterval($.proxy(this, \"_autoScroll\"), 50);\r\n\t }\r\n\t }\r\n\t }\r\n\r\n\t if (this.hint) {\r\n\t this._updateHint(e);\r\n\t }\r\n\t },\r\n\r\n\t _processMovement: function(e, cursorElement) {\r\n\t this._withDropTarget(cursorElement, function(target, targetElement) {\r\n\t if (!target) {\r\n\t if (lastDropTarget) {\r\n\t lastDropTarget._trigger(DRAGLEAVE, extend(e, { dropTarget: $(lastDropTarget.targetElement) }));\r\n\t lastDropTarget = null;\r\n\t }\r\n\t return;\r\n\t }\r\n\r\n\t if (lastDropTarget) {\r\n\t if (targetElement === lastDropTarget.targetElement) {\r\n\t return;\r\n\t }\r\n\r\n\t lastDropTarget._trigger(DRAGLEAVE, extend(e, { dropTarget: $(lastDropTarget.targetElement) }));\r\n\t }\r\n\r\n\t target._trigger(DRAGENTER, extend(e, { dropTarget: $(targetElement) }));\r\n\t lastDropTarget = extend(target, { targetElement: targetElement });\r\n\t });\r\n\r\n\t this._trigger(DRAG, extend(e, { dropTarget: lastDropTarget, elementUnderCursor: cursorElement }));\r\n\t },\r\n\r\n\t _autoScroll: function() {\r\n\t var parent = this._scrollableParent[0],\r\n\t velocity = this._scrollVelocity,\r\n\t compensation = this._scrollCompenstation;\r\n\r\n\t if (!parent) {\r\n\t return;\r\n\t }\r\n\r\n\t var cursorElement = this._elementUnderCursor(this._lastEvent);\r\n\t this._processMovement(this._lastEvent, cursorElement);\r\n\r\n\t var yIsScrollable, xIsScrollable;\r\n\r\n\t var isRootNode = parent === scrollableRoot()[0];\r\n\r\n\t if (isRootNode) {\r\n\t yIsScrollable = document.body.scrollHeight > $window.height();\r\n\t xIsScrollable = document.body.scrollWidth > $window.width();\r\n\t } else {\r\n\t yIsScrollable = parent.offsetHeight <= parent.scrollHeight;\r\n\t xIsScrollable = parent.offsetWidth <= parent.scrollWidth;\r\n\t }\r\n\r\n\t var yDelta = parent.scrollTop + velocity.y;\r\n\t var yInBounds = yIsScrollable && yDelta > 0 && yDelta < parent.scrollHeight;\r\n\r\n\t var xDelta = parent.scrollLeft + velocity.x;\r\n\t var xInBounds = xIsScrollable && xDelta > 0 && xDelta < parent.scrollWidth;\r\n\r\n\t if (yInBounds) {\r\n\t parent.scrollTop += velocity.y;\r\n\t }\r\n\r\n\t if (xInBounds) {\r\n\t parent.scrollLeft += velocity.x;\r\n\t }\r\n\r\n\t if (this.hint && isRootNode && (xInBounds || yInBounds)) {\r\n\t if (yInBounds) {\r\n\t compensation.top += velocity.y;\r\n\t }\r\n\r\n\t if (xInBounds) {\r\n\t compensation.left += velocity.x;\r\n\t }\r\n\r\n\t this.hint.css(compensation);\r\n\t }\r\n\t },\r\n\r\n\t _end: function(e) {\r\n\t this._withDropTarget(this._elementUnderCursor(e), function(target, targetElement) {\r\n\t if (target) {\r\n\t target._drop(extend({}, e, { dropTarget: $(targetElement) }));\r\n\t lastDropTarget = null;\r\n\t }\r\n\t });\r\n\r\n\t this._cancel(this._trigger(DRAGEND, e));\r\n\t },\r\n\r\n\t _cancel: function(isDefaultPrevented) {\r\n\t var that = this;\r\n\r\n\t that._scrollableParent = null;\r\n\t this._cursorElement = null;\r\n\t clearInterval(this._scrollInterval);\r\n\t that._activated = false;\r\n\r\n\t if (that.hint && !that.dropped) {\r\n\t setTimeout(function() {\r\n\t that.hint.stop(true, true);\r\n\r\n\t if (isDefaultPrevented) {\r\n\t that._afterEndHandler();\r\n\t } else {\r\n\t that.hint.animate(that.currentTargetOffset, \"fast\", that._afterEndHandler);\r\n\t }\r\n\t }, 0);\r\n\r\n\t } else {\r\n\t that._afterEnd();\r\n\t }\r\n\t },\r\n\r\n\t _trigger: function(eventName, e) {\r\n\t var that = this;\r\n\r\n\t return that.trigger(\r\n\t eventName, extend(\r\n\t {},\r\n\t e.event,\r\n\t {\r\n\t x: e.x,\r\n\t y: e.y,\r\n\t currentTarget: that.currentTarget,\r\n\t initialTarget: e.touch ? e.touch.initialTouch : null,\r\n\t dropTarget: e.dropTarget,\r\n\t elementUnderCursor: e.elementUnderCursor\r\n\t }\r\n\t ));\r\n\t },\r\n\r\n\t _elementUnderCursor: function(e) {\r\n\t var target = elementUnderCursor(e),\r\n\t hint = this.hint;\r\n\r\n\t if (hint && contains(hint[0], target)) {\r\n\t hint.hide();\r\n\t target = elementUnderCursor(e);\r\n\t // IE8 does not return the element in iframe from first attempt\r\n\t if (!target) {\r\n\t target = elementUnderCursor(e);\r\n\t }\r\n\t hint.show();\r\n\t }\r\n\r\n\t return target;\r\n\t },\r\n\r\n\t _withDropTarget: function(element, callback) {\r\n\t var result,\r\n\t group = this.options.group,\r\n\t targets = dropTargets[group],\r\n\t areas = dropAreas[group];\r\n\r\n\t if (targets && targets.length || areas && areas.length) {\r\n\t result = checkTarget(element, targets, areas);\r\n\r\n\t if (result) {\r\n\t callback(result.target, result.targetElement);\r\n\t } else {\r\n\t callback();\r\n\t }\r\n\t }\r\n\t },\r\n\r\n\t destroy: function() {\r\n\t var that = this;\r\n\r\n\t Widget.fn.destroy.call(that);\r\n\r\n\t that._afterEnd();\r\n\r\n\t that.userEvents.destroy();\r\n\r\n\t this._scrollableParent = null;\r\n\t this._cursorElement = null;\r\n\t clearInterval(this._scrollInterval);\r\n\r\n\t that.currentTarget = null;\r\n\t },\r\n\r\n\t _afterEnd: function() {\r\n\t var that = this;\r\n\r\n\t if (that.hint) {\r\n\t that.hint.remove();\r\n\t }\r\n\r\n\t delete draggables[that.options.group];\r\n\r\n\t that.trigger(\"destroy\");\r\n\t that.trigger(HINTDESTROYED);\r\n\t $(document).off(KEYUP, that._captureEscape);\r\n\t }\r\n\t });\r\n\r\n\t kendo.ui.plugin(DropTarget);\r\n\t kendo.ui.plugin(DropTargetArea);\r\n\t kendo.ui.plugin(Draggable);\r\n\t kendo.TapCapture = TapCapture;\r\n\t kendo.containerBoundaries = containerBoundaries;\r\n\r\n\t extend(kendo.ui, {\r\n\t Pane: Pane,\r\n\t PaneDimensions: PaneDimensions,\r\n\t Movable: Movable\r\n\t });\r\n\r\n\t function scrollableViewPort(element) {\r\n\t var root = scrollableRoot()[0],\r\n\t offset,\r\n\t top,\r\n\t left;\r\n\r\n\t if (element[0] === root) {\r\n\t top = root.scrollTop;\r\n\t left = root.scrollLeft;\r\n\r\n\t return {\r\n\t top: top,\r\n\t left: left,\r\n\t bottom: top + $window.height(),\r\n\t right: left + $window.width()\r\n\t };\r\n\t } else {\r\n\t offset = element.offset();\r\n\t offset.bottom = offset.top + element.height();\r\n\t offset.right = offset.left + element.width();\r\n\t return offset;\r\n\t }\r\n\t }\r\n\r\n\t function scrollableRoot() {\r\n\t return $(kendo.support.browser.edge || kendo.support.browser.safari ? document.body : document.documentElement);\r\n\t }\r\n\r\n\t function findScrollableParent(element) {\r\n\t var root = scrollableRoot();\r\n\r\n\t if (!element || element === document.body || element === document.documentElement) {\r\n\t return root;\r\n\t }\r\n\r\n\t var parent = $(element)[0];\r\n\r\n\t while (parent && !kendo.isScrollable(parent) && parent !== document.body) {\r\n\t parent = parent.parentNode;\r\n\t }\r\n\r\n\t if (parent === document.body) {\r\n\t return root;\r\n\t }\r\n\r\n\t return $(parent);\r\n\t }\r\n\r\n\t function autoScrollVelocity(mouseX, mouseY, rect) {\r\n\t var velocity = { x: 0, y: 0 };\r\n\r\n\t var AUTO_SCROLL_AREA = 50;\r\n\r\n\t if (mouseX - rect.left < AUTO_SCROLL_AREA) {\r\n\t velocity.x = -(AUTO_SCROLL_AREA - (mouseX - rect.left));\r\n\t } else if (rect.right - mouseX < AUTO_SCROLL_AREA) {\r\n\t velocity.x = AUTO_SCROLL_AREA - (rect.right - mouseX);\r\n\t }\r\n\r\n\t if (mouseY - rect.top < AUTO_SCROLL_AREA) {\r\n\t velocity.y = -(AUTO_SCROLL_AREA - (mouseY - rect.top));\r\n\t } else if (rect.bottom - mouseY < AUTO_SCROLL_AREA) {\r\n\t velocity.y = AUTO_SCROLL_AREA - (rect.bottom - mouseY);\r\n\t }\r\n\r\n\t return velocity;\r\n\t }\r\n\r\n\t // export for testing\r\n\t kendo.ui.Draggable.utils = {\r\n\t autoScrollVelocity: autoScrollVelocity,\r\n\t scrollableViewPort: scrollableViewPort,\r\n\t findScrollableParent: findScrollableParent\r\n\t };\r\n\r\n\t })(window.kendo.jQuery);\r\n\r\n\treturn window.kendo;\r\n\r\n\t}, __webpack_require__(3));\r\n\n\n/***/ })\n\n/******/ });","module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(1151);\n\n\n/***/ }),\n\n/***/ 3:\n/***/ (function(module, exports) {\n\n\tmodule.exports = function() { throw new Error(\"define cannot be used indirect\"); };\r\n\n\n/***/ }),\n\n/***/ 1036:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./kendo.list\");\n\n/***/ }),\n\n/***/ 1037:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./kendo.mobile.scroller\");\n\n/***/ }),\n\n/***/ 1038:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./kendo.virtuallist\");\n\n/***/ }),\n\n/***/ 1151:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function(f, define){\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(1036), __webpack_require__(1037), __webpack_require__(1038) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (f), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t})(function(){\n\n\tvar __meta__ = { // jshint ignore:line\n\t id: \"dropdownlist\",\n\t name: \"DropDownList\",\n\t category: \"web\",\n\t description: \"The DropDownList widget displays a list of values and allows the selection of a single value from the list.\",\n\t depends: [ \"list\" ],\n\t features: [ {\n\t id: \"mobile-scroller\",\n\t name: \"Mobile scroller\",\n\t description: \"Support for kinetic scrolling in mobile device\",\n\t depends: [ \"mobile.scroller\" ]\n\t }, {\n\t id: \"virtualization\",\n\t name: \"VirtualList\",\n\t description: \"Support for virtualization\",\n\t depends: [ \"virtuallist\" ]\n\t } ]\n\t};\n\n\t(function($, undefined) {\n\t var kendo = window.kendo,\n\t ui = kendo.ui,\n\t List = ui.List,\n\t Select = ui.Select,\n\t support = kendo.support,\n\t activeElement = kendo._activeElement,\n\t ObservableObject = kendo.data.ObservableObject,\n\t keys = kendo.keys,\n\t ns = \".kendoDropDownList\",\n\t nsFocusEvent = ns + \"FocusEvent\",\n\t DISABLED = \"disabled\",\n\t READONLY = \"readonly\",\n\t CHANGE = \"change\",\n\t FOCUSED = \"k-state-focused\",\n\t DEFAULT = \"k-state-default\",\n\t STATEDISABLED = \"k-state-disabled\",\n\t ARIA_DISABLED = \"aria-disabled\",\n\t CLICKEVENTS = \"click\" + ns + \" touchend\" + ns,\n\t HOVEREVENTS = \"mouseenter\" + ns + \" mouseleave\" + ns,\n\t TABINDEX = \"tabindex\",\n\t STATE_FILTER = \"filter\",\n\t STATE_ACCEPT = \"accept\",\n\t MSG_INVALID_OPTION_LABEL = \"The `optionLabel` option is not valid due to missing fields. Define a custom optionLabel as shown here http://docs.telerik.com/kendo-ui/api/javascript/ui/dropdownlist#configuration-optionLabel\",\n\t proxy = $.proxy;\n\n\t var DropDownList = Select.extend( {\n\t init: function(element, options) {\n\t var that = this;\n\t var index = options && options.index;\n\t var optionLabel, text, disabled;\n\n\t that.ns = ns;\n\t options = $.isArray(options) ? { dataSource: options } : options;\n\n\t Select.fn.init.call(that, element, options);\n\n\t options = that.options;\n\t element = that.element.on(\"focus\" + ns, proxy(that._focusHandler, that));\n\n\t that._focusInputHandler = $.proxy(that._focusInput, that);\n\n\t that.optionLabel = $();\n\t that._optionLabel();\n\n\t that._inputTemplate();\n\n\t that._reset();\n\n\t that._prev = \"\";\n\t that._word = \"\";\n\n\t that._wrapper();\n\n\t that._tabindex();\n\t that.wrapper.data(TABINDEX, that.wrapper.attr(TABINDEX));\n\n\t that._span();\n\n\t that._popup();\n\n\t that._mobile();\n\n\t that._dataSource();\n\n\t that._ignoreCase();\n\n\t that._filterHeader();\n\n\t that._aria();\n\n\t //should read changed value of closed dropdownlist\n\t that.wrapper.attr(\"aria-live\", \"polite\");\n\n\t that._enable();\n\n\t that._attachFocusHandlers();\n\n\t that._oldIndex = that.selectedIndex = -1;\n\n\t if (index !== undefined) {\n\t options.index = index;\n\t }\n\n\t that._initialIndex = options.index;\n\n\t that.requireValueMapper(that.options);\n\t that._initList();\n\n\t that._cascade();\n\n\t that.one(\"set\", function(e) {\n\t if (!e.sender.listView.bound() && that.hasOptionLabel()) {\n\t that._textAccessor(that._optionLabelText());\n\t }\n\t });\n\n\t if (options.autoBind) {\n\t that.dataSource.fetch();\n\t } else if (that.selectedIndex === -1) { //selectedIndex !== -1 when cascade functionality happens instantly\n\t text = options.text || \"\";\n\t if (!text) {\n\t optionLabel = options.optionLabel;\n\n\t if (optionLabel && options.index === 0) {\n\t text = optionLabel;\n\t } else if (that._isSelect) {\n\t text = element.children(\":selected\").text();\n\t }\n\t }\n\n\t that._textAccessor(text);\n\t }\n\n\t disabled = $(that.element).parents(\"fieldset\").is(':disabled');\n\n\t if (disabled) {\n\t that.enable(false);\n\t }\n\n\t that.listView.bind(\"click\", function(e) { e.preventDefault(); });\n\n\t kendo.notify(that);\n\t },\n\n\t options: {\n\t name: \"DropDownList\",\n\t enabled: true,\n\t autoBind: true,\n\t index: 0,\n\t text: null,\n\t value: null,\n\t delay: 500,\n\t height: 200,\n\t dataTextField: \"\",\n\t dataValueField: \"\",\n\t optionLabel: \"\",\n\t cascadeFrom: \"\",\n\t cascadeFromField: \"\",\n\t cascadeFromParentField: \"\",\n\t ignoreCase: true,\n\t animation: {},\n\t filter: \"none\",\n\t minLength: 1,\n\t enforceMinLength: false,\n\t virtual: false,\n\t template: null,\n\t valueTemplate: null,\n\t optionLabelTemplate: null,\n\t groupTemplate: \"#:data#\",\n\t fixedGroupTemplate: \"#:data#\",\n\t autoWidth: false,\n\t popup: null\n\t },\n\n\t events: [\n\t \"open\",\n\t \"close\",\n\t CHANGE,\n\t \"select\",\n\t \"filtering\",\n\t \"dataBinding\",\n\t \"dataBound\",\n\t \"cascade\",\n\t \"set\",\n\t \"kendoKeydown\"\n\t ],\n\n\t setOptions: function(options) {\n\t Select.fn.setOptions.call(this, options);\n\n\t this.listView.setOptions(this._listOptions(options));\n\n\t this._optionLabel();\n\t this._inputTemplate();\n\t this._accessors();\n\t this._filterHeader();\n\t this._enable();\n\t this._aria();\n\n\t if (!this.value() && this.hasOptionLabel()) {\n\t this.select(0);\n\t }\n\t },\n\n\t destroy: function() {\n\t var that = this;\n\n\t Select.fn.destroy.call(that);\n\n\t that.wrapper.off(ns);\n\t that.wrapper.off(nsFocusEvent);\n\t that.element.off(ns);\n\t that._inputWrapper.off(ns);\n\n\t that._arrow.off();\n\t that._arrow = null;\n\t that._arrowIcon = null;\n\n\t that.optionLabel.off();\n\n\t if(that.filterInput){\n\t that.filterInput.off(nsFocusEvent);\n\t }\n\t },\n\n\t open: function() {\n\t var that = this;\n\t var isFiltered = that.dataSource.filter() ? that.dataSource.filter().filters.length > 0 : false;\n\n\t if (that.popup.visible()) {\n\t return;\n\t }\n\n\t if (!that.listView.bound() || that._state === STATE_ACCEPT) {\n\t that._open = true;\n\t that._state = \"rebind\";\n\n\t if (that.filterInput) {\n\t that.filterInput.val(\"\");\n\t that._prev = \"\";\n\t }\n\n\t if (that.filterInput && that.options.minLength !== 1 && !isFiltered) {\n\t that.refresh();\n\t that.popup.one(\"activate\", that._focusInputHandler);\n\t that.popup.open();\n\t that._resizeFilterInput();\n\t } else {\n\t that._filterSource();\n\t }\n\t } else if (that._allowOpening()) {\n\t that._focusFilter = true;\n\t that.popup.one(\"activate\", that._focusInputHandler);\n\t // In some cases when the popup is opened resize is triggered which will cause it to close\n\t // Setting the below flag will prevent this from happening\n\t that.popup._hovered = true;\n\t that.popup.open();\n\t that._resizeFilterInput();\n\t that._focusItem();\n\t }\n\t },\n\n\t _focusInput: function () {\n\t this._focusElement(this.filterInput);\n\t },\n\n\t _resizeFilterInput: function () {\n\t var filterInput = this.filterInput;\n\t var originalPrevent = this._prevent;\n\n\t if (!filterInput) {\n\t return;\n\t }\n\n\t var isInputActive = this.filterInput[0] === activeElement();\n\t var caret = kendo.caret(this.filterInput[0])[0];\n\n\t this._prevent = true;\n\n\t filterInput.css(\"display\", \"none\")\n\t .css(\"width\", this.popup.element.css(\"width\"))\n\t .css(\"display\", \"inline-block\");\n\n\t if (isInputActive) {\n\t filterInput.focus();\n\t kendo.caret(filterInput[0], caret);\n\t }\n\n\t this._prevent = originalPrevent;\n\t },\n\n\t _allowOpening: function() {\n\t return this.hasOptionLabel() || this.filterInput || Select.fn._allowOpening.call(this);\n\t },\n\n\t toggle: function(toggle) {\n\t this._toggle(toggle, true);\n\t },\n\n\t current: function(candidate) {\n\t var current;\n\n\t if (candidate === undefined) {\n\t current = this.listView.focus();\n\n\t if (!current && this.selectedIndex === 0 && this.hasOptionLabel()) {\n\t return this.optionLabel;\n\t }\n\n\t return current;\n\t }\n\n\t this._focus(candidate);\n\t },\n\n\t dataItem: function(index) {\n\t var that = this;\n\t var dataItem = null;\n\n\t if (index === null) { return index; }\n\n\t if (index === undefined) {\n\t dataItem = that.listView.selectedDataItems()[0];\n\t } else {\n\t if (typeof index !== \"number\") {\n\t if (that.options.virtual) {\n\t return that.dataSource.getByUid($(index).data(\"uid\"));\n\t }\n\t if (index.hasClass(\"k-list-optionlabel\")) {\n\t index = -1;\n\t } else {\n\t index = $(that.items()).index(index);\n\t }\n\t } else if (that.hasOptionLabel()) {\n\t index -= 1;\n\t }\n\n\t dataItem = that.dataSource.flatView()[index];\n\t }\n\n\t if (!dataItem) {\n\t dataItem = that._optionLabelDataItem();\n\t }\n\n\t return dataItem;\n\t },\n\n\t refresh: function() {\n\t this.listView.refresh();\n\t },\n\n\t text: function (text) {\n\t var that = this;\n\t var loweredText;\n\t var ignoreCase = that.options.ignoreCase;\n\n\t text = text === null ? \"\" : text;\n\n\t if (text !== undefined) {\n\t if (typeof text !== \"string\") {\n\t that._textAccessor(text);\n\t return;\n\t }\n\n\t loweredText = ignoreCase ? text.toLowerCase() : text;\n\n\t that._select(function(data) {\n\t data = that._text(data);\n\n\t if (ignoreCase) {\n\t data = (data + \"\").toLowerCase();\n\t }\n\n\t return data === loweredText;\n\t }).done(function() {\n\t that._textAccessor(that.dataItem() || text);\n\t });\n\n\t } else {\n\t return that._textAccessor();\n\t }\n\t },\n\n\t _clearFilter: function() {\n\t $(this.filterInput).val(\"\");\n\t Select.fn._clearFilter.call(this);\n\t },\n\n\t value: function(value) {\n\t var that = this;\n\t var listView = that.listView;\n\t var dataSource = that.dataSource;\n\n\t if (value === undefined) {\n\t value = that._accessor() || that.listView.value()[0];\n\t return value === undefined || value === null ? \"\" : value;\n\t }\n\n\t that.requireValueMapper(that.options, value);\n\n\t if (value || !that.hasOptionLabel()) {\n\t that._initialIndex = null;\n\t }\n\n\t this.trigger(\"set\", { value: value });\n\n\t if (that._request && that.options.cascadeFrom && that.listView.bound()) {\n\t if (that._valueSetter) {\n\t dataSource.unbind(CHANGE, that._valueSetter);\n\t }\n\n\t that._valueSetter = proxy(function() { that.value(value); }, that);\n\n\t dataSource.one(CHANGE, that._valueSetter);\n\t return;\n\t }\n\n\t if (that._isFilterEnabled() && listView.bound() && listView.isFiltered()) {\n\t that._clearFilter();\n\t } else {\n\t that._fetchData();\n\t }\n\n\t listView.value(value).done(function() {\n\t that._old = that._valueBeforeCascade = that._accessor();\n\t that._oldIndex = that.selectedIndex;\n\t });\n\t },\n\n\t hasOptionLabel: function() {\n\t return this.optionLabel && !!this.optionLabel[0];\n\t },\n\n\t _optionLabel: function() {\n\t var that = this;\n\t var options = that.options;\n\t var optionLabel = options.optionLabel;\n\t var template = options.optionLabelTemplate;\n\n\t if (!optionLabel) {\n\t that.optionLabel.off().remove();\n\t that.optionLabel = $();\n\t return;\n\t }\n\n\t if (!template) {\n\t template = \"#:\";\n\n\t if (typeof optionLabel === \"string\") {\n\t template += \"data\";\n\t } else {\n\t template += kendo.expr(options.dataTextField, \"data\");\n\t }\n\n\t template += \"#\";\n\t }\n\n\t if (typeof template !== \"function\") {\n\t template = kendo.template(template);\n\t }\n\n\t that.optionLabelTemplate = template;\n\n\t if (!that.hasOptionLabel()) {\n\t that.optionLabel = $('
').prependTo(that.list);\n\t }\n\n\t that.optionLabel.html(template(optionLabel))\n\t .off()\n\t .on(CLICKEVENTS, proxy(that._click, that))\n\t .on(HOVEREVENTS, that._toggleHover);\n\n\t that.angular(\"compile\", function() {\n\t return { elements: that.optionLabel, data: [{ dataItem: that._optionLabelDataItem() }] };\n\t });\n\t },\n\n\t _optionLabelText: function() {\n\t var optionLabel = this.options.optionLabel;\n\t return (typeof optionLabel === \"string\") ? optionLabel : this._text(optionLabel);\n\t },\n\n\t _optionLabelDataItem: function() {\n\t var that = this;\n\t var optionLabel = that.options.optionLabel;\n\n\t if (that.hasOptionLabel()) {\n\t return $.isPlainObject(optionLabel) ? new ObservableObject(optionLabel) : that._assignInstance(that._optionLabelText(), \"\");\n\t }\n\n\t return undefined;\n\t },\n\n\t _buildOptions: function(data) {\n\t var that = this;\n\t if (!that._isSelect) {\n\t return;\n\t }\n\n\t var value = that.listView.value()[0];\n\t var optionLabel = that._optionLabelDataItem();\n\t var optionLabelValue = optionLabel && that._value(optionLabel);\n\n\t if (value === undefined || value === null) {\n\t value = \"\";\n\t }\n\n\t if (optionLabel) {\n\t if (optionLabelValue === undefined || optionLabelValue === null) {\n\t optionLabelValue = \"\";\n\t }\n\n\t optionLabel = '\";\n\t }\n\n\t that._options(data, optionLabel, value);\n\n\t if (value !== List.unifyType(that._accessor(), typeof value)) {\n\t that._customOption = null;\n\t that._custom(value);\n\t }\n\t },\n\n\t _listBound: function() {\n\n\t var that = this;\n\t var initialIndex = that._initialIndex;\n\t var filtered = that._state === STATE_FILTER;\n\n\t var data = that.dataSource.flatView();\n\t var dataItem;\n\n\t that._presetValue = false;\n\n\t that._renderFooter();\n\t that._renderNoData();\n\t that._toggleNoData(!data.length);\n\n\t that._resizePopup(true);\n\n\t that.popup.position();\n\n\t that._buildOptions(data);\n\n\t that._makeUnselectable();\n\n\t if (!filtered) {\n\t if (that._open) {\n\t that.toggle(that._allowOpening());\n\t }\n\n\t that._open = false;\n\n\t if (!that._fetch) {\n\t if (data.length) {\n\t if (!that.listView.value().length && initialIndex > -1 && initialIndex !== null) {\n\t that.select(initialIndex);\n\t }\n\n\t that._initialIndex = null;\n\t dataItem = that.listView.selectedDataItems()[0];\n\t if (dataItem && that.text() !== that._text(dataItem)) {\n\t that._selectValue(dataItem);\n\t }\n\t } else if (that._textAccessor() !== that._optionLabelText()) {\n\t that.listView.value(\"\");\n\t that._selectValue(null);\n\t that._oldIndex = that.selectedIndex;\n\t }\n\t }\n\t }\n\n\t that._hideBusy();\n\t that.trigger(\"dataBound\");\n\t },\n\n\t _listChange: function() {\n\t this._selectValue(this.listView.selectedDataItems()[0]);\n\n\t if (this._presetValue || (this._old && this._oldIndex === -1)) {\n\t this._oldIndex = this.selectedIndex;\n\t }\n\t },\n\n\t _filterPaste: function() {\n\t this._search();\n\t },\n\n\t _attachFocusHandlers: function() {\n\t var that = this;\n\t var wrapper = that.wrapper;\n\n\t wrapper.on(\"focusin\" + nsFocusEvent, proxy(that._focusinHandler, that))\n\t .on(\"focusout\" + nsFocusEvent, proxy(that._focusoutHandler, that));\n\t if(that.filterInput) {\n\t that.filterInput.on(\"focusin\" + nsFocusEvent, proxy(that._focusinHandler, that))\n\t .on(\"focusout\" + nsFocusEvent, proxy(that._focusoutHandler, that));\n\t }\n\t },\n\n\t _focusHandler: function() {\n\t this.wrapper.focus();\n\t },\n\n\t _focusinHandler: function() {\n\t this._inputWrapper.addClass(FOCUSED);\n\t this._prevent = false;\n\t },\n\n\t _focusoutHandler: function() {\n\t var that = this;\n\t var isIFrame = window.self !== window.top;\n\n\t if (!that._prevent) {\n\t clearTimeout(that._typingTimeout);\n\n\t if (support.mobileOS.ios && isIFrame) {\n\t that._change();\n\t } else {\n\t that._blur();\n\t }\n\n\t that._inputWrapper.removeClass(FOCUSED);\n\t that._prevent = true;\n\t that._open = false;\n\t that.element.blur();\n\t }\n\t },\n\n\t _wrapperMousedown: function() {\n\t this._prevent = !!this.filterInput;\n\t },\n\n\t _wrapperClick: function(e) {\n\t e.preventDefault();\n\t this.popup.unbind(\"activate\", this._focusInputHandler);\n\t this._focused = this.wrapper;\n\t this._prevent = false;\n\t this._toggle();\n\t },\n\n\t _editable: function(options) {\n\t var that = this;\n\t var element = that.element;\n\t var disable = options.disable;\n\t var readonly = options.readonly;\n\t var wrapper = that.wrapper.add(that.filterInput).off(ns);\n\t var dropDownWrapper = that._inputWrapper.off(HOVEREVENTS);\n\n\t if (!readonly && !disable) {\n\t element.removeAttr(DISABLED).removeAttr(READONLY);\n\n\t dropDownWrapper\n\t .addClass(DEFAULT)\n\t .removeClass(STATEDISABLED)\n\t .on(HOVEREVENTS, that._toggleHover);\n\n\t wrapper\n\t .attr(TABINDEX, wrapper.data(TABINDEX))\n\t .attr(ARIA_DISABLED, false)\n\t .on(\"keydown\" + ns, that, proxy(that._keydown, that))\n\t .on(kendo.support.mousedown + ns, proxy(that._wrapperMousedown, that))\n\t .on(\"paste\" + ns, proxy(that._filterPaste, that));\n\n\t that.wrapper.on(\"click\" + ns, proxy(that._wrapperClick, that));\n\n\t if (!that.filterInput) {\n\t wrapper.on(\"keypress\" + ns, proxy(that._keypress, that));\n\t } else {\n\t wrapper.on(\"input\" + ns, proxy(that._search, that));\n\t }\n\n\t } else if (disable) {\n\t wrapper.removeAttr(TABINDEX);\n\t dropDownWrapper\n\t .addClass(STATEDISABLED)\n\t .removeClass(DEFAULT);\n\t } else {\n\t dropDownWrapper\n\t .addClass(DEFAULT)\n\t .removeClass(STATEDISABLED);\n\t }\n\n\t element.attr(DISABLED, disable)\n\t .attr(READONLY, readonly);\n\n\t wrapper.attr(ARIA_DISABLED, disable);\n\t },\n\n\t _keydown: function(e) {\n\t var that = this;\n\t var key = e.keyCode;\n\t var altKey = e.altKey;\n\t var isInputActive;\n\t var handled;\n\n\t var isPopupVisible = that.popup.visible();\n\n\t if (that.filterInput) {\n\t isInputActive = that.filterInput[0] === activeElement();\n\t }\n\n\t if (key === keys.LEFT) {\n\t key = keys.UP;\n\t handled = true;\n\t } else if (key === keys.RIGHT) {\n\t key = keys.DOWN;\n\t handled = true;\n\t }\n\n\t if (handled && isInputActive) {\n\t return;\n\t }\n\n\t e.keyCode = key;\n\n\t if ((altKey && key === keys.UP) || key === keys.ESC) {\n\t that._focusElement(that.wrapper);\n\t }\n\n\t if (that._state === STATE_FILTER && key === keys.ESC) {\n\t that._clearFilter();\n\t that._open = false;\n\t that._state = STATE_ACCEPT;\n\t }\n\n\t if (key === keys.ENTER && that._typingTimeout && that.filterInput && isPopupVisible) {\n\t e.preventDefault();\n\t return;\n\t }\n\n\t if (key === keys.SPACEBAR && !isInputActive) {\n\t that.toggle(!isPopupVisible);\n\t e.preventDefault();\n\t }\n\n\t handled = that._move(e);\n\n\t if (handled) {\n\t return;\n\t }\n\n\t if (!isPopupVisible || !that.filterInput) {\n\t var current = that._focus();\n\n\t if (key === keys.HOME) {\n\t handled = true;\n\t that._firstItem();\n\t } else if (key === keys.END) {\n\t handled = true;\n\t that._lastItem();\n\t }\n\n\t if (handled) {\n\t if (that.trigger(\"select\", { dataItem: that._getElementDataItem(that._focus()), item: that._focus() })) {\n\t that._focus(current);\n\t return;\n\t }\n\n\t that._select(that._focus(), true).done(function() {\n\t if (!isPopupVisible) {\n\t that._blur();\n\t }\n\t });\n\t e.preventDefault();\n\t }\n\t }\n\n\t if (!altKey && !handled && that.filterInput) {\n\t that._search();\n\t }\n\t },\n\n\t _matchText: function(text, word) {\n\t var ignoreCase = this.options.ignoreCase;\n\n\t if (text === undefined || text === null) {\n\t return false;\n\t }\n\n\t text = text + \"\";\n\n\t if (ignoreCase) {\n\t text = text.toLowerCase();\n\t }\n\n\t return text.indexOf(word) === 0;\n\t },\n\n\t _shuffleData: function(data, splitIndex) {\n\t var optionDataItem = this._optionLabelDataItem();\n\n\t if (optionDataItem) {\n\t data = [optionDataItem].concat(data);\n\t }\n\n\t return data.slice(splitIndex).concat(data.slice(0, splitIndex));\n\t },\n\n\t _selectNext: function() {\n\t var that = this;\n\t var data = that.dataSource.flatView();\n\t var dataLength = data.length + (that.hasOptionLabel() ? 1 : 0);\n\t var isInLoop = sameCharsOnly(that._word, that._last);\n\t var startIndex = that.selectedIndex;\n\t var oldFocusedItem;\n\t var text;\n\n\t if (startIndex === -1) {\n\t startIndex = 0;\n\t } else {\n\t startIndex += isInLoop ? 1 : 0;\n\t startIndex = normalizeIndex(startIndex, dataLength);\n\t }\n\n\t data = data.toJSON ? data.toJSON() : data.slice();\n\t data = that._shuffleData(data, startIndex);\n\n\t for (var idx = 0; idx < dataLength; idx++) {\n\t text = that._text(data[idx]);\n\n\t if (isInLoop && that._matchText(text, that._last)) {\n\t break;\n\t } else if (that._matchText(text, that._word)) {\n\t break;\n\t }\n\t }\n\n\t if (idx !== dataLength) {\n\t oldFocusedItem = that._focus();\n\n\t that._select(normalizeIndex(startIndex + idx, dataLength)).done(function() {\n\t var done = function() {\n\t if (!that.popup.visible()) {\n\t that._change();\n\t }\n\t };\n\n\t if (that.trigger(\"select\", { dataItem: that._getElementDataItem(that._focus()), item: that._focus() })) {\n\t that._select(oldFocusedItem).done(done);\n\t } else {\n\t done();\n\t }\n\t });\n\t }\n\t },\n\n\t _keypress: function(e) {\n\t var that = this;\n\n\t if (e.which === 0 || e.keyCode === kendo.keys.ENTER) {\n\t return;\n\t }\n\n\t var character = String.fromCharCode(e.charCode || e.keyCode);\n\n\t if (that.options.ignoreCase) {\n\t character = character.toLowerCase();\n\t }\n\n\t if (character === \" \") {\n\t e.preventDefault();\n\t }\n\n\t that._word += character;\n\t that._last = character;\n\n\t that._search();\n\t },\n\n\t _popupOpen: function() {\n\t var popup = this.popup;\n\n\t popup.wrapper = kendo.wrap(popup.element);\n\n\t if (popup.element.closest(\".km-root\")[0]) {\n\t popup.wrapper.addClass(\"km-popup km-widget\");\n\t this.wrapper.addClass(\"km-widget\");\n\t }\n\t },\n\n\t _popup: function() {\n\t Select.fn._popup.call(this);\n\t this.popup.one(\"open\", proxy(this._popupOpen, this));\n\t },\n\n\t _getElementDataItem: function(element) {\n\t if (!element || !element[0]) {\n\t return null;\n\t }\n\n\t if (element[0] === this.optionLabel[0]) {\n\t return this._optionLabelDataItem();\n\t }\n\n\t return this.listView.dataItemByIndex(this.listView.getElementIndex(element));\n\t },\n\n\t _click: function (e) {\n\t var that = this;\n\t var item = e.item || $(e.currentTarget);\n\n\t e.preventDefault();\n\n\t if (that.trigger(\"select\", { dataItem: that._getElementDataItem(item), item: item })) {\n\t that.close();\n\t return;\n\t }\n\n\t that._userTriggered = true;\n\n\t that._select(item).done(function() {\n\t that._blur();\n\t that._focusElement(that.wrapper);\n\t });\n\t },\n\n\t _focusElement: function(element) {\n\t var active = activeElement();\n\t var wrapper = this.wrapper;\n\t var filterInput = this.filterInput;\n\t var compareElement = element === filterInput ? wrapper : filterInput;\n\t var touchEnabled = support.mobileOS && (support.touch || support.MSPointers || support.pointers);\n\n\t if (filterInput && filterInput[0] === element[0] && touchEnabled) {\n\t return;\n\t }\n\n\t if (filterInput && (compareElement[0] === active || this._focusFilter)) {\n\t this._focusFilter = false;\n\t this._prevent = true;\n\t this._focused = element.focus();\n\t }\n\t },\n\n\t _searchByWord: function(word) {\n\t if (!word) {\n\t return;\n\t }\n\n\t var that = this;\n\t var ignoreCase = that.options.ignoreCase;\n\n\t if (ignoreCase) {\n\t word = word.toLowerCase();\n\t }\n\n\t that._select(function(dataItem) {\n\t return that._matchText(that._text(dataItem), word);\n\t });\n\t },\n\n\t _inputValue: function() {\n\t return this.text();\n\t },\n\n\t _search: function() {\n\t var that = this;\n\t var dataSource = that.dataSource;\n\n\t clearTimeout(that._typingTimeout);\n\n\t if (that._isFilterEnabled()) {\n\t that._typingTimeout = setTimeout(function() {\n\t var value = that.filterInput.val();\n\n\t if (that._prev !== value) {\n\t that._prev = value;\n\t that.search(value);\n\t that._resizeFilterInput();\n\t }\n\n\t that._typingTimeout = null;\n\t }, that.options.delay);\n\t } else {\n\t that._typingTimeout = setTimeout(function() {\n\t that._word = \"\";\n\t }, that.options.delay);\n\n\t if (!that.listView.bound()) {\n\t dataSource.fetch().done(function () {\n\t that._selectNext();\n\t });\n\t return;\n\t }\n\n\t that._selectNext();\n\t }\n\t },\n\n\t _get: function(candidate) {\n\t var data, found, idx;\n\t var isFunction = typeof candidate === \"function\";\n\t var jQueryCandidate = !isFunction ? $(candidate) : $();\n\n\t if (this.hasOptionLabel()) {\n\t if (typeof candidate === \"number\") {\n\t if (candidate > -1) {\n\t candidate -= 1;\n\t }\n\t } else if (jQueryCandidate.hasClass(\"k-list-optionlabel\")) {\n\t candidate = -1;\n\t }\n\t }\n\n\t if (isFunction) {\n\t data = this.dataSource.flatView();\n\n\t for (idx = 0; idx < data.length; idx++) {\n\t if (candidate(data[idx])) {\n\t candidate = idx;\n\t found = true;\n\t break;\n\t }\n\t }\n\n\t if (!found) {\n\t candidate = -1;\n\t }\n\t }\n\n\t return candidate;\n\t },\n\n\t _firstItem: function() {\n\t if (this.hasOptionLabel()) {\n\t this._focus(this.optionLabel);\n\t } else {\n\t this.listView.focusFirst();\n\t }\n\t },\n\n\t _lastItem: function() {\n\t this._resetOptionLabel();\n\t this.listView.focusLast();\n\t },\n\n\t _nextItem: function() {\n\t var focusIndex;\n\n\t if (this.optionLabel.hasClass(\"k-state-focused\")) {\n\t this._resetOptionLabel();\n\t this.listView.focusFirst();\n\t focusIndex = 1;\n\t } else {\n\t focusIndex = this.listView.focusNext();\n\t }\n\n\t return focusIndex;\n\t },\n\n\t _prevItem: function() {\n\t var focusIndex;\n\n\t if (this.optionLabel.hasClass(\"k-state-focused\")) {\n\t return;\n\t }\n\n\t focusIndex = this.listView.focusPrev();\n\n\t if (!this.listView.focus() && !this.options.virtual) {\n\t this._focus(this.optionLabel);\n\t }\n\n\t return focusIndex;\n\t },\n\n\t _focusItem: function() {\n\t var options = this.options;\n\t var listView = this.listView;\n\t var focusedItem = listView.focus();\n\t var index = listView.select();\n\n\t index = index[index.length - 1];\n\n\t if (index === undefined && options.highlightFirst && !focusedItem) {\n\t index = 0;\n\t }\n\n\t if (index !== undefined) {\n\t listView.focus(index);\n\t } else {\n\t if (options.optionLabel && (!options.virtual || options.virtual.mapValueTo !== \"dataItem\")) {\n\t this._focus(this.optionLabel);\n\t this._select(this.optionLabel);\n\t this.listView.content.scrollTop(0);\n\t } else {\n\t listView.scrollToIndex(0);\n\t }\n\t }\n\t },\n\n\t _resetOptionLabel: function(additionalClass) {\n\t this.optionLabel.removeClass(\"k-state-focused\" + (additionalClass || \"\")).removeAttr(\"id\");\n\t },\n\n\t _focus: function(candidate) {\n\t var listView = this.listView;\n\t var optionLabel = this.optionLabel;\n\n\t if (candidate === undefined) {\n\t candidate = listView.focus();\n\n\t if (!candidate && optionLabel.hasClass(\"k-state-focused\")) {\n\t candidate = optionLabel;\n\t }\n\n\t return candidate;\n\t }\n\n\t this._resetOptionLabel();\n\n\t candidate = this._get(candidate);\n\n\t listView.focus(candidate);\n\n\t if (candidate === -1) {\n\t optionLabel.addClass(\"k-state-focused\")\n\t .attr(\"id\", listView._optionID);\n\n\t this._focused.add(this.filterInput)\n\t .removeAttr(\"aria-activedescendant\")\n\t .attr(\"aria-activedescendant\", listView._optionID);\n\t }\n\t },\n\n\t _select: function(candidate, keepState) {\n\t var that = this;\n\n\t candidate = that._get(candidate);\n\n\t return that.listView.select(candidate).done(function() {\n\t if (!keepState && that._state === STATE_FILTER) {\n\t that._state = STATE_ACCEPT;\n\t }\n\n\t if (candidate === -1) {\n\t that._selectValue(null);\n\t }\n\t });\n\t },\n\n\t _selectValue: function(dataItem) {\n\t var that = this;\n\t var optionLabel = that.options.optionLabel;\n\t var idx = that.listView.select();\n\n\t var value = \"\";\n\t var text = \"\";\n\n\t idx = idx[idx.length - 1];\n\t if (idx === undefined) {\n\t idx = -1;\n\t }\n\n\t this._resetOptionLabel(\" k-state-selected\");\n\n\t if (dataItem || dataItem === 0) {\n\t text = dataItem;\n\t value = that._dataValue(dataItem);\n\t if (optionLabel) {\n\t idx += 1;\n\t }\n\t } else if (optionLabel) {\n\t that._focus(that.optionLabel.addClass(\"k-state-selected\"));\n\n\t text = that._optionLabelText();\n\n\t if (typeof optionLabel === \"string\") {\n\t value = \"\";\n\t } else {\n\t value = that._value(optionLabel);\n\t }\n\n\t idx = 0;\n\t }\n\n\t that.selectedIndex = idx;\n\n\t if (value === null) {\n\t value = \"\";\n\t }\n\n\t that._textAccessor(text);\n\t that._accessor(value, idx);\n\n\t that._triggerCascade();\n\t },\n\n\t _mobile: function() {\n\t var that = this,\n\t popup = that.popup,\n\t mobileOS = support.mobileOS,\n\t root = popup.element.parents(\".km-root\").eq(0);\n\n\t if (root.length && mobileOS) {\n\t popup.options.animation.open.effects = (mobileOS.android || mobileOS.meego) ? \"fadeIn\" : (mobileOS.ios || mobileOS.wp) ? \"slideIn:up\" : popup.options.animation.open.effects;\n\t }\n\t },\n\n\t _filterHeader: function() {\n\t var icon;\n\n\t if (this.filterInput) {\n\t this.filterInput\n\t .off(ns)\n\t .parent()\n\t .remove();\n\n\t this.filterInput = null;\n\t }\n\n\t if (this._isFilterEnabled()) {\n\t icon = '';\n\n\t this.filterInput = $('')\n\t .attr({\n\t placeholder: this.element.attr(\"placeholder\"),\n\t title: this.element.attr(\"title\"),\n\t role: \"listbox\",\n\t \"aria-haspopup\": true,\n\t \"aria-expanded\": false\n\t });\n\t this.list\n\t .prepend($('')\n\t .append(this.filterInput.add(icon)));\n\t }\n\t },\n\n\t _span: function() {\n\t var that = this,\n\t wrapper = that.wrapper,\n\t SELECTOR = \"span.k-input\",\n\t span;\n\n\t span = wrapper.find(SELECTOR);\n\n\t if (!span[0]) {\n\t wrapper.append(' ')\n\t .append(that.element);\n\n\t span = wrapper.find(SELECTOR);\n\t }\n\n\t that.span = span;\n\t that._inputWrapper = $(wrapper[0].firstChild);\n\t that._arrow = wrapper.find(\".k-select\");\n\t that._arrowIcon = that._arrow.find(\".k-icon\");\n\t },\n\n\t _wrapper: function() {\n\t var that = this,\n\t element = that.element,\n\t DOMelement = element[0],\n\t wrapper;\n\n\t wrapper = element.parent();\n\n\t if (!wrapper.is(\"span.k-widget\")) {\n\t wrapper = element.wrap(\"\").parent();\n\t wrapper[0].style.cssText = DOMelement.style.cssText;\n\t wrapper[0].title = DOMelement.title;\n\t }\n\n\t that._focused = that.wrapper = wrapper\n\t .addClass(\"k-widget k-dropdown\")\n\t .addClass(DOMelement.className)\n\t .removeClass('input-validation-error')\n\t .css(\"display\", \"\")\n\t .attr({\n\t accesskey: element.attr(\"accesskey\"),\n\t unselectable: \"on\",\n\t role: \"listbox\",\n\t \"aria-haspopup\": true,\n\t \"aria-expanded\": false\n\t });\n\n\t element.hide().removeAttr(\"accesskey\");\n\t },\n\n\t _clearSelection: function(parent) {\n\t this.select(parent.value() ? 0 : -1);\n\t },\n\n\t _inputTemplate: function() {\n\t var that = this,\n\t template = that.options.valueTemplate;\n\n\n\t if (!template) {\n\t template = $.proxy(kendo.template('#:this._text(data)#', { useWithBlock: false }), that);\n\t } else {\n\t template = kendo.template(template);\n\t }\n\n\t that.valueTemplate = template;\n\n\t if (that.hasOptionLabel() && !that.options.optionLabelTemplate) {\n\t try {\n\t that.valueTemplate(that._optionLabelDataItem());\n\t } catch(e) {\n\t throw new Error(MSG_INVALID_OPTION_LABEL);\n\t }\n\t }\n\t },\n\n\t _textAccessor: function(text) {\n\t var dataItem = null;\n\t var template = this.valueTemplate;\n\t var optionLabelText = this._optionLabelText();\n\t var span = this.span;\n\n\t if (text === undefined) {\n\t return span.text();\n\t }\n\n\t if ($.isPlainObject(text) || text instanceof ObservableObject) {\n\t dataItem = text;\n\t } else if (optionLabelText && optionLabelText === text) {\n\t dataItem = this.options.optionLabel;\n\t }\n\n\t if (!dataItem) {\n\t dataItem = this._assignInstance(text, this._accessor());\n\t }\n\n\t if (this.hasOptionLabel()) {\n\t if (dataItem === optionLabelText || this._text(dataItem) === optionLabelText) {\n\t template = this.optionLabelTemplate;\n\n\t if (typeof this.options.optionLabel === \"string\" && !this.options.optionLabelTemplate) {\n\t dataItem = optionLabelText;\n\t }\n\t }\n\t }\n\n\t var getElements = function(){\n\t return {\n\t elements: span.get(),\n\t data: [ { dataItem: dataItem } ]\n\t };\n\t };\n\n\t this.angular(\"cleanup\", getElements);\n\n\t try {\n\t span.html(template(dataItem));\n\t } catch(e) {\n\t //dataItem has missing fields required in custom template\n\t span.html(\"\");\n\t }\n\n\t this.angular(\"compile\", getElements);\n\t },\n\n\t _preselect: function(value, text) {\n\t if (!value && !text) {\n\t text = this._optionLabelText();\n\t }\n\n\t this._accessor(value);\n\t this._textAccessor(text);\n\n\t this._old = this._accessor();\n\t this._oldIndex = this.selectedIndex;\n\n\t this.listView.setValue(value);\n\n\t this._initialIndex = null;\n\t this._presetValue = true;\n\t },\n\n\t _assignInstance: function(text, value) {\n\t var dataTextField = this.options.dataTextField;\n\t var dataItem = {};\n\n\t if (dataTextField) {\n\t assign(dataItem, dataTextField.split(\".\"), text);\n\t assign(dataItem, this.options.dataValueField.split(\".\"), value);\n\t dataItem = new ObservableObject(dataItem);\n\t } else {\n\t dataItem = text;\n\t }\n\n\t return dataItem;\n\t }\n\t });\n\n\t function assign(instance, fields, value) {\n\t var idx = 0,\n\t lastIndex = fields.length - 1,\n\t field;\n\n\t for (; idx < lastIndex; ++idx) {\n\t field = fields[idx];\n\n\t if (!(field in instance)) {\n\t instance[field] = {};\n\t }\n\n\t instance = instance[field];\n\t }\n\n\t instance[fields[lastIndex]] = value;\n\t }\n\n\t function normalizeIndex(index, length) {\n\t if (index >= length) {\n\t index -= length;\n\t }\n\t return index;\n\t }\n\n\t function sameCharsOnly(word, character) {\n\t for (var idx = 0; idx < word.length; idx++) {\n\t if (word.charAt(idx) !== character) {\n\t return false;\n\t }\n\t }\n\t return true;\n\t }\n\n\t ui.plugin(DropDownList);\n\t})(window.kendo.jQuery);\n\n\treturn window.kendo;\n\n\t}, __webpack_require__(3));\n\n\n/***/ })\n\n/******/ });","module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(1152);\n\n\n/***/ }),\n\n/***/ 3:\n/***/ (function(module, exports) {\n\n\tmodule.exports = function() { throw new Error(\"define cannot be used indirect\"); };\r\n\n\n/***/ }),\n\n/***/ 1054:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./kendo.popup\");\n\n/***/ }),\n\n/***/ 1152:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function(f, define){\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(1153), __webpack_require__(1054) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (f), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t})(function(){\n\n\tvar __meta__ = { // jshint ignore:line\n\t id: \"dropdowntree\",\n\t name: \"DropDownTree\",\n\t category: \"web\",\n\t description: \"The DropDownTree widget displays a hierarchy of items and allows the selection of single or multiple items.\",\n\t depends: [ \"treeview\", \"popup\" ]\n\t};\n\n\t(function($, undefined) {\n\t var kendo = window.kendo,\n\t ui = kendo.ui,\n\t Widget = ui.Widget,\n\t TreeView = ui._dropdowntree,\n\t ObservableArray = kendo.data.ObservableArray,\n\t ObservableObject = kendo.data.ObservableObject,\n\t extend = $.extend,\n\t activeElement = kendo._activeElement,\n\t ns = \".kendoDropDownTree\",\n\t keys = kendo.keys,\n\t support = kendo.support,\n\t HIDDENCLASS = \"k-hidden\",\n\t WIDTH = \"width\",\n\t browser = support.browser,\n\t outerWidth = kendo._outerWidth,\n\t DOT = \".\",\n\t DISABLED = \"disabled\",\n\t READONLY = \"readonly\",\n\t STATEDISABLED = \"k-state-disabled\",\n\t ARIA_DISABLED = \"aria-disabled\",\n\t HOVER = \"k-state-hover\",\n\t FOCUSED = \"k-state-focused\",\n\t HOVEREVENTS = \"mouseenter\" + ns + \" mouseleave\" + ns,\n\t TABINDEX = \"tabindex\",\n\t CLICK = \"click\",\n\t OPEN = \"open\",\n\t CLOSE = \"close\",\n\t CHANGE = \"change\",\n\t quotRegExp = /\"/g,\n\t proxy = $.proxy;\n\n\t var DropDownTree = kendo.ui.Widget.extend( {\n\t init: function(element, options) {\n\t this.ns = ns;\n\n\t kendo.ui.Widget.fn.init.call(this, element, options);\n\t this._selection = this._getSelection();\n\t this._focusInputHandler = $.proxy(this._focusInput, this);\n\t this._initial = this.element.val();\n\n\t this._values = [];\n\n\t var value = this.options.value;\n\n\t if (value === null || !value.length) {\n\t this._noInitialValue = true;\n\t }\n\n\t if (!this._isNullorUndefined(value)) {\n\t this._valueMethodCalled = true;\n\t this._values = $.isArray(value) ? value.slice(0) : [value];\n\t }\n\n\t this._inputTemplate();\n\n\t this._accessors();\n\t this._setTreeViewOptions(this.options);\n\t this._dataSource();\n\t this._selection._initWrapper();\n\t this._placeholder(true);\n\t this._tabindex();\n\t this.wrapper.data(TABINDEX, this.wrapper.attr(TABINDEX));\n\n\t this.tree = $('
')\n\t .attr({\n\t tabIndex: -1,\n\t \"aria-hidden\": true\n\t });\n\n\t this.list = $(\"
\")\n\t .append(this.tree);\n\n\t this._header();\n\t this._noData();\n\t this._footer();\n\t this._reset();\n\t this._popup();\n\t this.popup.one(\"open\", proxy(this._popupOpen, this));\n\t this._clearButton();\n\t this._filterHeader();\n\t this._treeview();\n\n\t this._renderFooter();\n\n\t this._checkAll();\n\t this._enable();\n\t this._toggleCloseVisibility();\n\n\t if (!this.options.autoBind) {\n\t var text = options.text || \"\";\n\t if (!this._isNullorUndefined(options.value)) {\n\t this._preselect(options.value);\n\t } else if (text) {\n\t this._textAccessor(text);\n\t } else if (options.placeholder) {\n\t this._placeholder(true);\n\t }\n\t }\n\n\t var disabled = $(this.element).parents(\"fieldset\").is(':disabled');\n\n\t if (disabled) {\n\t this.enable(false);\n\t }\n\t this._valueMethodCalled = false;\n\t kendo.notify(this);\n\t },\n\n\t _preselect: function(data, value){\n\t this._selection._preselect(data, value);\n\t },\n\n\t _setTreeViewOptions: function(options) {\n\t var treeviewOptions = {\n\t autoBind: options.autoBind,\n\t checkboxes: options.checkboxes,\n\t dataImageUrlField: options.dataImageUrlField,\n\t dataSpriteCssClassField: options.dataSpriteCssClassField,\n\t dataTextField: options.dataTextField,\n\t dataUrlField: options.dataUrlField,\n\t loadOnDemand: options.loadOnDemand\n\t };\n\n\t this.options.treeview = $.extend({}, treeviewOptions, this.options.treeview);\n\n\t if (options.template) {\n\t this.options.treeview.template = options.template;\n\t }\n\t },\n\n\t _dataSource: function() {\n\t var rootDataSource = this.options.dataSource;\n\n\t this.dataSource = kendo.data.HierarchicalDataSource.create(rootDataSource);\n\t if (rootDataSource) {\n\t $.extend(this.options.treeview,{\n\t dataSource: this.dataSource\n\t });\n\t }\n\t },\n\n\t _popupOpen: function() {\n\t var popup = this.popup;\n\t popup.wrapper = kendo.wrap(popup.element);\n\t },\n\n\t _getSelection: function() {\n\t if (this._isMultipleSelection()) {\n\t return new ui.DropDownTree.MultipleSelection(this);\n\t } else {\n\t return new ui.DropDownTree.SingleSelection(this);\n\t }\n\t },\n\n\t setDataSource: function(dataSource) {\n\t this._isDataSourceSet = true;\n\t if(this._tags){\n\t this._noInitialValue = true;\n\t this.setValue([]);\n\t this._tags.empty();\n\t this.span.show();\n\t this._multipleTags.empty();\n\t }\n\t this.dataSource = dataSource;\n\t this.treeview.setDataSource(dataSource);\n\t this._isDataSourceSet = false;\n\t },\n\n\t _isMultipleSelection: function() {\n\t return this.options && (this.options.treeview.checkboxes || this.options.checkboxes);\n\t },\n\n\t options: {\n\t name: \"DropDownTree\",\n\t animation: {},\n\t autoBind: true,\n\t autoClose: true,\n\t autoWidth: false,\n\t clearButton: true,\n\t dataTextField: \"\",\n\t dataValueField: \"\",\n\t dataImageUrlField: \"\",\n\t dataSpriteCssClassField: \"\",\n\t dataUrlField: \"\",\n\t delay: 500,\n\t enabled: true,\n\t enforceMinLength: false,\n\t filter: \"none\",\n\t height: 200,\n\t ignoreCase: true,\n\t index: 0,\n\t loadOnDemand: false,\n\t messages: {\n\t \"singleTag\": \"item(s) selected\",\n\t \"clear\": \"clear\",\n\t \"deleteTag\": \"delete\",\n\t \"noData\": \"No data found.\"\n\t },\n\t minLength: 1,\n\t checkboxes: false,\n\t noDataTemplate: true,\n\t placeholder: \"\",\n\t checkAll:false,\n\t checkAllTemplate: \"Check all\",\n\t tagMode: \"multiple\",\n\t template: null,\n\t text: null,\n\t treeview: {},\n\t valuePrimitive: false,\n\t footerTemplate: \"\",\n\t headerTemplate: \"\",\n\t value: null,\n\t valueTemplate: null,\n\t popup: null\n\t },\n\n\t events: [\n\t \"open\",\n\t \"close\",\n\t \"dataBound\",\n\t CHANGE,\n\t \"select\",\n\t \"filtering\"\n\t ],\n\n\t focus: function() {\n\t this.wrapper.focus();\n\t },\n\n\t dataItem: function (node){\n\t return this.treeview.dataItem(node);\n\t },\n\n\t readonly: function(readonly) {\n\t this._editable({\n\t readonly: readonly === undefined ? true : readonly,\n\t disable: false\n\t });\n\t this._toggleCloseVisibility();\n\t },\n\n\t enable: function(enable) {\n\t this._editable({\n\t readonly: false,\n\t disable: !(enable = enable === undefined ? true : enable)\n\t });\n\t this._toggleCloseVisibility();\n\t },\n\n\t toggle: function(open) {\n\t this._toggle(open);\n\t },\n\n\t open: function() {\n\t var popup = this.popup;\n\n\t if(!this.options.autoBind && !this.dataSource.data().length){\n\t this.treeview._progress(true);\n\t if(this._isFilterEnabled()){\n\t this._search();\n\t } else {\n\t this.dataSource.fetch();\n\t }\n\t }\n\n\t if (popup.visible() || !this._allowOpening()) {\n\t return;\n\t }\n\n\t if(this._isMultipleSelection()){\n\t popup.element.addClass(\"k-multiple-selection\");\n\t }\n\t popup.element.addClass(\"k-popup-dropdowntree\");\n\n\t popup.one(\"activate\", this._focusInputHandler);\n\t popup._hovered = true;\n\t popup.open();\n\t },\n\n\t close: function() {\n\t this.popup.close();\n\t },\n\n\t search: function(word) {\n\t var options = this.options;\n\t var filter;\n\t clearTimeout(this._typingTimeout);\n\n\t if ((!options.enforceMinLength && !word.length) || word.length >= options.minLength) {\n\t filter = this._getFilter(word);\n\t if(this.trigger(\"filtering\", { filter: filter }) ||\n\t $.isArray(this.options.dataTextField)){\n\t return;\n\t }\n\n\t this._filtering = true;\n\t this.treeview.dataSource.filter(filter);\n\t }\n\t },\n\n\t _getFilter: function (word){\n\t return {\n\t field: this.options.dataTextField,\n\t operator: this.options.filter,\n\t value: word,\n\t ignoreCase: this.options.ignoreCase\n\t };\n\t },\n\n\t refresh: function() {\n\t var data = this.treeview.dataSource.flatView();\n\t this._renderFooter();\n\t this._renderNoData();\n\t if (this.filterInput && this.checkAll) {\n\t this.checkAll.toggle(!this.filterInput.val().length);\n\t }\n\n\t this.tree.toggle(!!data.length);\n\t $(this.noData).toggle(!data.length);\n\t },\n\n\t setOptions: function(options) {\n\t Widget.fn.setOptions.call(this, options);\n\n\t this._setTreeViewOptions(options);\n\t this._dataSource();\n\t if (this.options.treeview) {\n\t this.treeview.setOptions(this.options.treeview);\n\t }\n\n\t if (options.height && this.tree) {\n\t this.tree.css('max-height', options.height);\n\t }\n\n\t this._header();\n\t this._noData();\n\t this._footer();\n\n\t this._renderFooter();\n\t this._renderNoData();\n\t if (this.span && (this._isMultipleSelection() || this.span.hasClass(\"k-readonly\"))) {\n\t this._placeholder(true);\n\t }\n\t this._inputTemplate();\n\t this._accessors();\n\t this._filterHeader();\n\t this._checkAll();\n\t this._enable();\n\t if (options && (options.enable || options.enabled)) {\n\t this.enable(true);\n\t }\n\t this._clearButton();\n\t },\n\n\t destroy: function() {\n\t kendo.ui.Widget.fn.destroy.call(this);\n\t if(this.treeview){\n\t this.treeview.destroy();\n\t }\n\t this.popup.destroy();\n\n\t this.wrapper.off(ns);\n\t this._clear.off(ns);\n\t this._inputWrapper.off(ns);\n\t if (this.filterInput) {\n\t this.filterInput.off(ns);\n\t }\n\n\t if(this.tagList){\n\t this.tagList.off(ns);\n\t }\n\n\t kendo.unbind(this.tagList);\n\t if (this.options.checkAll && this.checkAll) {\n\t this.checkAll.off(ns);\n\t }\n\n\t if (this._form) {\n\t this._form.off(\"reset\", this._resetHandler);\n\t }\n\t },\n\n\t setValue: function(value) {\n\t value = $.isArray(value) || value instanceof ObservableArray ? value.slice(0) : [value];\n\n\t this._values = value;\n\t },\n\n\t items: function() {\n\t return this.treeview.items();\n\t },\n\n\t value: function(value) {\n\t var that = this;\n\n\t if(value){\n\t if(that.filterInput && that.dataSource._filter){\n\t that._filtering = true;\n\t that.dataSource.filter({});\n\t } else if (!that.dataSource.data().length || !that.treeview.dataSource.data().length){\n\t that.dataSource.fetch(function() {\n\t if(that.options.loadOnDemand){\n\t that._selection._setValue(value);\n\t } else {\n\t that.one('allNodesAreLoaded', function(){\n\t that._selection._setValue(value);\n\t });\n\t }\n\t });\n\n\t return;\n\t }\n\t }\n\n\t return that._selection._setValue(value);\n\t },\n\n\t text: function(text) {\n\t var loweredText;\n\t var ignoreCase = this.options.ignoreCase;\n\n\t text = text === null ? \"\" : text;\n\n\t if (text !== undefined && !this._isMultipleSelection()) {\n\t if (typeof text !== \"string\") {\n\t this._textAccessor(text);\n\t return;\n\t }\n\n\t loweredText = ignoreCase ? text : text.toLowerCase();\n\n\t this._selectItemByText(loweredText);\n\n\t this._textAccessor(loweredText);\n\t } else {\n\t return this._textAccessor();\n\t }\n\t },\n\n\t _header: function() {\n\t var list = this;\n\t var header = $(list.header);\n\t var template = list.options.headerTemplate;\n\n\t this._angularElement(header, \"cleanup\");\n\t kendo.destroy(header);\n\t header.remove();\n\n\t if (!template) {\n\t list.header = null;\n\t return;\n\t }\n\n\t var headerTemplate = typeof template !== \"function\" ? kendo.template(template) : template;\n\t header = $(headerTemplate({}));\n\n\t list.header = header[0] ? header : null;\n\t list.list.prepend(header);\n\n\t this._angularElement(list.header, \"compile\");\n\t },\n\n\t _noData: function() {\n\t var list = this;\n\t var noData = $(list.noData);\n\t var template = list.options.noDataTemplate === true ? list.options.messages.noData : list.options.noDataTemplate;\n\n\t list.angular(\"cleanup\", function() { return { elements: noData }; });\n\t kendo.destroy(noData);\n\t noData.remove();\n\n\t if (!template) {\n\t list.noData = null;\n\t return;\n\t }\n\n\t list.noData = $('
').appendTo(list.list);\n\t list.noDataTemplate = typeof template !== \"function\" ? kendo.template(template) : template;\n\t },\n\n\t _renderNoData: function() {\n\t var list = this;\n\t var noData = list.noData;\n\n\t if (!noData) {\n\t return;\n\t }\n\n\t this._angularElement(noData, \"cleanup\");\n\t noData.children(\":first\").html(list.noDataTemplate({ instance: list }));\n\t this._angularElement(noData, \"compile\");\n\t },\n\n\t _footer: function() {\n\t var list = this;\n\t var footer = $(list.footer);\n\t var template = list.options.footerTemplate;\n\n\t this._angularElement(footer, \"cleanup\");\n\t kendo.destroy(footer);\n\t footer.remove();\n\n\t if (!template) {\n\t list.footer = null;\n\t return;\n\t }\n\n\t list.footer = $('
').appendTo(list.list);\n\t list.footerTemplate = typeof template !== \"function\" ? kendo.template(template) : template;\n\t },\n\n\t _renderFooter: function() {\n\t var list = this;\n\t var footer = list.footer;\n\n\t if (!footer) {\n\t return;\n\t }\n\n\t this._angularElement(footer, \"cleanup\");\n\t footer.html(list.footerTemplate({ instance: list }));\n\t this._angularElement(footer, \"compile\");\n\t },\n\n\t _enable: function() {\n\t var that = this,\n\t options = that.options,\n\t disabled = that.element.is(\"[disabled]\");\n\n\t if (options.enable !== undefined) {\n\t options.enabled = options.enable;\n\t }\n\n\t if (!options.enabled || disabled) {\n\t that.enable(false);\n\t } else {\n\t that.readonly(that.element.is(\"[readonly]\"));\n\t }\n\t },\n\n\t _adjustListWidth: function() {\n\t var that = this,\n\t list = that.list,\n\t width = list[0].style.width,\n\t wrapper = that.wrapper,\n\t computedStyle, computedWidth;\n\n\t if (!list.data(WIDTH) && width) {\n\t return;\n\t }\n\n\t computedStyle = window.getComputedStyle ? window.getComputedStyle(wrapper[0], null) : 0;\n\t computedWidth = parseFloat(computedStyle && computedStyle.width) || outerWidth(wrapper);\n\n\t if (computedStyle && browser.msie) { // getComputedStyle returns different box in IE.\n\t computedWidth += parseFloat(computedStyle.paddingLeft) + parseFloat(computedStyle.paddingRight) + parseFloat(computedStyle.borderLeftWidth) + parseFloat(computedStyle.borderRightWidth);\n\t }\n\n\t if (list.css(\"box-sizing\") !== \"border-box\") {\n\t width = computedWidth - (outerWidth(list) - list.width());\n\t } else {\n\t width = computedWidth;\n\t }\n\n\t list.css({\n\t fontFamily: wrapper.css(\"font-family\"),\n\t width: that.options.autoWidth ? \"auto\" : width,\n\t minWidth: width,\n\t whiteSpace: that.options.autoWidth ? \"nowrap\" : \"normal\"\n\t })\n\t .data(WIDTH, width);\n\n\t return true;\n\t },\n\n\t _reset: function() {\n\t var that = this,\n\t element = that.element,\n\t formId = element.attr(\"form\"),\n\t form = formId ? $(\"#\" + formId) : element.closest(\"form\");\n\n\t if (form[0]) {\n\t that._resetHandler = function() {\n\t setTimeout(function() {\n\t that.value(that._initial);\n\t });\n\t };\n\n\t that._form = form.on(\"reset\", that._resetHandler);\n\t }\n\t },\n\n\t _popup: function() {\n\t var list = this;\n\n\t list.popup = new ui.Popup(list.list, extend({}, list.options.popup, {\n\t anchor: list.wrapper,\n\t open: proxy(list._openHandler, list),\n\t close: proxy(list._closeHandler, list),\n\t animation: list.options.animation,\n\t isRtl: support.isRtl(list.wrapper),\n\t autosize :list.options.autoWidth\n\t }));\n\t },\n\n\t _angularElement: function(element, action) {\n\t if (!element) {\n\t return;\n\t }\n\n\t this.angular(action, function() {\n\t return { elements: element };\n\t });\n\t },\n\n\t _allowOpening: function() {\n\t return this.options.noDataTemplate || this.treeview.dataSource.flatView().length;\n\t },\n\n\t _placeholder: function(show) {\n\t if (this.span) {\n\t this.span.toggleClass(\"k-readonly\", show).text(show? this.options.placeholder: \"\");\n\t }\n\t },\n\n\t _currentValue: function(dataItem) {\n\t var currentValue = this._value(dataItem);\n\t if (!currentValue && currentValue !== 0) {\n\t currentValue = dataItem;\n\t }\n\n\t return currentValue;\n\t },\n\n\t _checkValue: function(dataItem) {\n\t var value = \"\";\n\t var indexOfValue = -1;\n\t var currentValue = this.value();\n\t var isMultiple = this.options.tagMode === \"multiple\";\n\n\t if (dataItem || dataItem === 0) {\n\t if(dataItem.level){\n\t dataItem._level = dataItem.level();\n\t }\n\n\t value = this._currentValue(dataItem);\n\n\t indexOfValue = currentValue.indexOf(value);\n\t }\n\n\t if (dataItem.checked) {\n\t var alreadyAddedTag = $.grep(this._tags, function( item ) {\n\t return item.uid === dataItem._tagUid;\n\t });\n\n\t if (alreadyAddedTag.length){\n\t return;\n\t }\n\n\t var itemToAdd = new ObservableObject(dataItem.toJSON());\n\t dataItem._tagUid = itemToAdd.uid;\n\t this._tags.push(itemToAdd);\n\n\t if (this._tags.length === 1) {\n\t this.span.hide();\n\n\t if (!isMultiple) {\n\t this._multipleTags.push(itemToAdd);\n\t }\n\t }\n\n\t if (indexOfValue === -1) {\n\t currentValue.push(value);\n\t this.setValue(currentValue);\n\t }\n\t } else {\n\t var itemToRemove = this._tags.find(function(item){\n\t return item.uid === dataItem._tagUid;\n\t });\n\n\t var idx = this._tags.indexOf(itemToRemove);\n\n\t if (idx !== -1) {\n\t this._tags.splice(idx, 1);\n\t } else {\n\t this._treeViewCheckAllCheck(dataItem);\n\t return;\n\t }\n\n\t if (this._tags.length === 0) {\n\t this.span.show();\n\t if (!isMultiple) {\n\t this._multipleTags.splice(0, 1);\n\t }\n\t }\n\t if (indexOfValue !== -1) {\n\t currentValue.splice(indexOfValue, 1);\n\t this.setValue(currentValue);\n\t }\n\t }\n\n\t this._treeViewCheckAllCheck(dataItem);\n\t if (!this._preventChangeTrigger && !this._valueMethodCalled && !this._noInitialValue) {\n\t this.trigger(CHANGE);\n\t }\n\n\t if (this.options.autoClose && this.popup.visible()) {\n\t this.close();\n\t this.wrapper.focus();\n\t }\n\t this.popup.position();\n\t this._toggleCloseVisibility();\n\t this._updateSelectedOptions();\n\t },\n\n\t _updateSelectedOptions: function(){\n\t if(this.element[0].tagName.toLowerCase() !== 'select'){\n\t return;\n\t }\n\n\t var selectedItems = this._tags;\n\t var options = '';\n\t var dataItem = null;\n\t var value = null;\n\n\t if (selectedItems.length) {\n\t for (var idx = 0; idx < selectedItems.length; idx++) {\n\t dataItem = selectedItems[idx];\n\n\t value = this._value(dataItem);\n\t options += this._option(value, this._text(dataItem), true);\n\t }\n\t }\n\n\t this.element.html(options);\n\t },\n\n\t _option: function(dataValue, dataText, selected) {\n\t var option = \"\";\n\n\t if (dataText !== undefined) {\n\t option += kendo.htmlEncode(dataText);\n\t }\n\n\t return option += \"\";\n\t },\n\n\t _selectValue: function(dataItem) {\n\t var value = \"\";\n\t var text = \"\";\n\n\t if (dataItem || dataItem === 0) {\n\t if(dataItem.level){\n\t dataItem._level = dataItem.level();\n\t }\n\t text = this._text(dataItem) || dataItem;\n\t value = this._currentValue(dataItem);\n\t }\n\n\t if (value === null) {\n\t value = \"\";\n\t }\n\t this.setValue(value);\n\t this._textAccessor(text, dataItem);\n\t this._accessor(value);\n\n\t if(!this._preventChangeTrigger && !this._valueMethodCalled){\n\t this.trigger(CHANGE);\n\t }\n\t this._valueMethodCalled = false;\n\n\t if (this.options.autoClose && this.popup.visible()) {\n\t this.close();\n\t this.wrapper.focus();\n\t }\n\t this.popup.position();\n\t this._toggleCloseVisibility();\n\t },\n\n\t _clearClick: function(e) {\n\t e.stopPropagation();\n\t this.wrapper.focus();\n\t this._clearTextAndValue();\n\t },\n\n\t _clearTextAndValue: function() {\n\t this.setValue([]);\n\t this._clearInput();\n\t this._clearText();\n\t this._selection._clearValue();\n\t this.popup.position();\n\t this._toggleCloseVisibility();\n\t },\n\n\t _clearText: function() {\n\t if (this.options.placeholder) {\n\t this._placeholder(true);\n\t } else {\n\t if (this.span) {\n\t this.span.html(\"\");\n\t }\n\t }\n\t },\n\n\t _inputTemplate: function() {\n\t var template = this.options.valueTemplate;\n\n\t if (!template) {\n\t template = $.proxy(kendo.template('#:this._text(data)#', { useWithBlock: false }), this);\n\t } else {\n\t template = kendo.template(template);\n\t }\n\n\t this.valueTemplate = template;\n\t },\n\n\t _assignInstance: function(text, value) {\n\t var dataTextField = this.options.dataTextField;\n\t var dataItem = {};\n\n\t if (dataTextField) {\n\t assign(dataItem, dataTextField.split(DOT), text);\n\t assign(dataItem, this.options.dataValueField.split(DOT), value);\n\t dataItem = new ObservableObject(dataItem);\n\t } else {\n\t dataItem = text;\n\t }\n\n\t return dataItem;\n\t },\n\n\t _textAccessor: function(text, dataItem) {\n\t var valueTemplate = this.valueTemplate;\n\t var span = this.span;\n\n\t if (text === undefined) {\n\t return span.text();\n\t }\n\n\t span.removeClass(\"k-readonly\");\n\n\t if (!dataItem && ($.isPlainObject(text) || text instanceof ObservableObject)) {\n\t dataItem = text;\n\t }\n\n\t if (!dataItem) {\n\t dataItem = this._assignInstance(text, this._accessor());\n\t }\n\n\t var getElements = function() {\n\t return {\n\t elements: span.get(),\n\t data: [ { dataItem: dataItem } ]\n\t };\n\t };\n\n\t this.angular(\"cleanup\", getElements);\n\n\t try {\n\t span.html(valueTemplate(dataItem));\n\t } catch(e) {\n\t //dataItem has missing fields required in custom template\n\t if (span) {\n\t span.html(\"\");\n\t }\n\t }\n\n\t this.angular(\"compile\", getElements);\n\t },\n\n\t _accessors: function() {\n\t var element = this.element;\n\t var options = this.options;\n\t var getter = kendo.getter;\n\t var textField = element.attr(kendo.attr(\"text-field\"));\n\t var valueField = element.attr(kendo.attr(\"value-field\"));\n\n\t var getterFunction = function (field) {\n\t if ($.isArray(field)) {\n\t var count = field.length;\n\t var levels = $.map(field, function(x) {\n\t return function(d){ return d[x];};\n\t });\n\n\t return function (dataItem) {\n\t var level = dataItem._level;\n\n\t if(!level && level !== 0){\n\t return;\n\t }\n\n\t return levels[Math.min(level, count-1)](dataItem);\n\t };\n\t } else {\n\t return getter(field);\n\t }\n\t };\n\n\t if (!options.dataTextField && textField) {\n\t options.dataTextField = textField;\n\t }\n\n\t if (!options.dataValueField && valueField) {\n\t options.dataValueField = valueField;\n\t }\n\n\t options.dataTextField = options.dataTextField || \"text\";\n\t options.dataValueField = options.dataValueField || \"value\";\n\n\t this._text = getterFunction(options.dataTextField);\n\t this._value = getterFunction(options.dataValueField);\n\t },\n\n\t _accessor: function(value, idx) {\n\t return this._accessorInput(value, idx);\n\t },\n\n\t _accessorInput: function(value) {\n\t var element = this.element[0];\n\n\t if (value === undefined) {\n\t return element.value;\n\t } else {\n\t if (value === null) {\n\t value = \"\";\n\t }\n\t element.value = value;\n\t }\n\t },\n\n\t _clearInput: function() {\n\t var element = this.element[0];\n\t element.value = \"\";\n\t },\n\n\t _clearButton: function() {\n\t var clearTitle = this.options.messages.clear;\n\n\t if(!this._clear){\n\t this._clear = $('').attr({\n\t \"role\": \"button\",\n\t \"tabIndex\": -1\n\t });\n\t }\n\n\t if (this.options.clearButton) {\n\t this._clear.insertAfter(this.span);\n\t this.wrapper.addClass(\"k-dropdowntree-clearable\");\n\t } else {\n\t if (!this.options.clearButton) {\n\t this._clear.remove();\n\t }\n\t }\n\t },\n\n\t _toggleCloseVisibility: function() {\n\t var isReadOnly = this.element.attr(READONLY);\n\t var hasValue = (this.value() && !this._isMultipleSelection()) || this.value().length;\n\t var valueDoesNotEqualPlaceHolder = this.element.val() && this.element.val() !== this.options.placeholder;\n\n\t if ((!isReadOnly && (hasValue || valueDoesNotEqualPlaceHolder))) {\n\t this._showClear();\n\t } else {\n\t this._hideClear();\n\t }\n\t },\n\n\t _showClear: function() {\n\t if(this._clear) {\n\t this._clear.removeClass(HIDDENCLASS);\n\t }\n\t },\n\n\t _hideClear: function() {\n\t if(this._clear) {\n\t this._clear.addClass(HIDDENCLASS);\n\t }\n\t },\n\n\t _openHandler: function(e) {\n\t this._adjustListWidth();\n\n\t if (this.trigger(OPEN)) {\n\t e.preventDefault();\n\t } else {\n\t this.wrapper.attr(\"aria-expanded\", true);\n\t this.tree.attr(\"aria-hidden\", false).attr(\"role\", \"tree\");\n\t }\n\t },\n\n\t _closeHandler: function(e) {\n\t if (this.trigger(CLOSE)) {\n\t e.preventDefault();\n\t } else {\n\t this.wrapper.attr(\"aria-expanded\", false);\n\t this.tree.attr(\"aria-hidden\", true);\n\t }\n\t },\n\n\t _treeview: function() {\n\t var that = this;\n\t if (that.options.height) {\n\t that.tree.css('max-height',that.options.height);\n\t }\n\t that.tree.attr('id', kendo.guid());\n\t that.treeview = new TreeView(that.tree, extend({}, that.options.treeview), that);\n\t that.dataSource = that.treeview.dataSource;\n\n\t that.treeview.bind(\"select\",function(e) {\n\t that.trigger(\"select\", e);\n\t });\n\t },\n\n\t _treeViewDataBound: function(e) {\n\t if (e.node && this._prev && this._prev.length) {\n\t e.sender.expand(e.node);\n\t }\n\n\t if(this._filtering){\n\t if(!e.node){\n\t this._filtering = false;\n\t }\n\n\t if (!this._isMultipleSelection()) {\n\t this._deselectItem(e);\n\t }\n\t return;\n\t }\n\n\t if (!this.treeview) {\n\t this.treeview = e.sender;\n\t }\n\n\t if (!e.node) {\n\t var rootItems = e.sender.dataSource.data();\n\n\t this._checkLoadedItems(rootItems);\n\t if(this._noInitialValue){\n\t this._noInitialValue = false;\n\t }\n\t } else {\n\t var rootItem = e.sender.dataItem(e.node);\n\t if (rootItem) {\n\t var subItems = rootItem.children.data();\n\t this._checkLoadedItems(subItems);\n\t }\n\t }\n\t this.trigger(\"dataBound\", e);\n\t },\n\n\t _deselectItem: function(e){\n\t var items = [];\n\t if (!e.node) {\n\t items = e.sender.dataSource.data();\n\t } else {\n\t var rootItem = e.sender.dataItem(e.node);\n\t if (rootItem) {\n\t items = rootItem.children.data();\n\t }\n\t }\n\n\t for (var i = 0; i < items.length; i++) {\n\t if (items[i].selected &&\n\t !this._valueComparer(items[i], this.value())) {\n\t items[i].set(\"selected\", false);\n\t }\n\t }\n\t },\n\n\t _checkLoadedItems: function(items) {\n\t var value = this.value();\n\n\t if(!items){\n\t return;\n\t }\n\n\t for (var idx = 0; idx < items.length; idx++) {\n\t this._selection._checkLoadedItem(items[idx], value);\n\t }\n\t },\n\n\t _treeViewCheckAllCheck: function(dataItem) {\n\t if (this.options.checkAll && this.checkAll) {\n\t this._getAllChecked();\n\n\t if (dataItem.checked) {\n\t this._checkCheckAll();\n\t } else {\n\t this._uncheckCheckAll();\n\t }\n\t }\n\t },\n\n\t _checkCheckAll: function() {\n\t var checkAllCheckbox = this.checkAll.find('.k-checkbox');\n\n\t if (this._allItemsAreChecked) {\n\t checkAllCheckbox.prop('checked', true)\n\t .prop('indeterminate', false);\n\t } else {\n\t checkAllCheckbox.prop('indeterminate', true);\n\t }\n\t },\n\n\t _uncheckCheckAll: function() {\n\t var checkAllCheckbox = this.checkAll.find('.k-checkbox');\n\n\t if (this._allItemsAreUnchecked) {\n\t checkAllCheckbox.prop('checked', false)\n\t .prop('indeterminate', false);\n\t } else {\n\t checkAllCheckbox.prop('indeterminate', true);\n\t }\n\t },\n\n\t _filterHeader: function() {\n\t var icon;\n\n\t if (this.filterInput) {\n\t this.filterInput\n\t .off(ns)\n\t .parent()\n\t .remove();\n\n\t this.filterInput = null;\n\t }\n\n\t if (this._isFilterEnabled()) {\n\t this._disableCheckChildren();\n\n\t icon = '';\n\n\t this.filterInput = $('')\n\t .attr({\n\t placeholder: this.element.attr(\"placeholder\"),\n\t title: this.element.attr(\"title\"),\n\t role: \"listbox\",\n\t \"aria-haspopup\": true,\n\t \"aria-expanded\": false\n\t });\n\n\t this.filterInput.on(\"input\" , proxy(this._filterChange, this));\n\t $('').insertBefore(this.tree)\n\t .append(this.filterInput.add(icon));\n\t }\n\t },\n\n\t _filterChange: function() {\n\t if (this.filterInput) {\n\t this._search();\n\t }\n\t },\n\n\t _disableCheckChildren: function() {\n\t if (this._isMultipleSelection() && this.options.treeview.checkboxes && this.options.treeview.checkboxes.checkChildren) {\n\t this.options.treeview.checkboxes.checkChildren = false;\n\t }\n\t },\n\n\t _checkAll: function() {\n\t if (this.checkAll) {\n\t this.checkAll.find(\".k-checkbox-label, .k-checkbox\")\n\t .off(ns);\n\t this.checkAll.remove();\n\n\t this.checkAll = null;\n\t }\n\n\t if (this._isMultipleSelection() && this.options.checkAll) {\n\t this.checkAll = $('
Check All
').insertBefore(this.tree);\n\t this.checkAll.find(\".k-checkbox-label\").html(kendo.template(this.options.checkAllTemplate)({ instance: this }));\n\t this.checkAll.find(\".k-checkbox-label\").on(CLICK + ns, proxy(this._clickCheckAll, this));\n\t this.checkAll.find(\".k-checkbox\")\n\t .on(\"change\" + ns, proxy(this._changeCheckAll, this))\n\t .on(\"keydown\" + ns, proxy(this._keydownCheckAll, this));\n\t this._disabledCheckedItems = [];\n\t this._disabledUnCheckedItems = [];\n\n\t this._getAllChecked();\n\n\t if (!this._allItemsAreUnchecked) {\n\t this._checkCheckAll();\n\t }\n\t }\n\t },\n\n\t _changeCheckAll: function() {\n\t var checkAllCheckbox = this.checkAll.find('.k-checkbox');\n\t var isChecked = checkAllCheckbox.prop('checked');\n\n\t this._updateCheckAll(isChecked);\n\t },\n\n\t _updateCheckAll: function(isChecked) {\n\t var checkAllCheckbox = this.checkAll.find('.k-checkbox');\n\t this._toggleCheckAllItems(isChecked);\n\t checkAllCheckbox.prop('checked', isChecked);\n\t if (this._disabledCheckedItems.length && this._disabledUnCheckedItems.length) {\n\t checkAllCheckbox.prop('indeterminate', true);\n\t } else if (this._disabledCheckedItems.length) {\n\t checkAllCheckbox.prop('indeterminate', !isChecked);\n\t } else if (this._disabledUnCheckedItems.length) {\n\t checkAllCheckbox.prop('indeterminate', isChecked);\n\t } else {\n\t checkAllCheckbox.prop('indeterminate', false);\n\t }\n\t this._disabledCheckedItems = [];\n\t this._disabledUnCheckedItems = [];\n\t },\n\n\t _keydownCheckAll: function(e) {\n\t var key = e.keyCode;\n\t var altKey = e.altKey;\n\n\t if ((altKey && key === keys.UP) || key === keys.ESC || key === keys.TAB) {\n\t this.close();\n\t this.wrapper.focus();\n\t e.preventDefault();\n\t return;\n\t }\n\n\t if (key === keys.UP) {\n\t if (this.filterInput) {\n\t this.filterInput.focus();\n\t } else {\n\t this.wrapper.focus();\n\t }\n\n\t e.preventDefault();\n\t }\n\n\t if (key === keys.DOWN) {\n\t if (this.tree && this.tree.is(\":visible\")) {\n\t this.tree.focus();\n\t }\n\n\t e.preventDefault();\n\t }\n\n\t if (key === keys.SPACEBAR && (browser.msie || browser.edge)) {\n\t this._clickCheckAll();\n\t e.preventDefault();\n\t }\n\t },\n\n\t _clickCheckAll: function() {\n\t var checkAllCheckbox = this.checkAll.find('.k-checkbox');\n\t var isChecked = checkAllCheckbox.prop('checked');\n\n\t this._updateCheckAll(!isChecked);\n\n\t checkAllCheckbox.focus();\n\n\t },\n\t //treeview\n\t _dfs: function(items, action, prop) {\n\t for (var idx = 0; idx < items.length; idx++) {\n\t if (!this[action](items[idx], prop)) {\n\t break;\n\t }\n\t this._traverceChildren(items[idx], action, prop);\n\t }\n\t },\n\n\t _uncheckItemByUid: function(uid) {\n\t this._dfs(this.dataSource.data(), '_uncheckItemEqualsUid', uid);\n\t },\n\n\t _uncheckItemEqualsUid: function(item, uid) {\n\t if (item.enabled !== false && item._tagUid == uid) {\n\t item.set(\"checked\", false);\n\t return false;\n\t }\n\t return true;\n\t },\n\n\t _selectItemByText: function(text) {\n\t this._dfs(this.dataSource.data(), '_itemEqualsText', text);\n\t },\n\n\t _itemEqualsText: function(item, text) {\n\t if (item.enabled !== false && this._text(item) === text) {\n\t this.treeview.select(this.treeview.findByUid(item.uid));\n\t this._selectValue(item);\n\t return false;\n\t }\n\t return true;\n\t },\n\n\t _selectItemByValue: function(value) {\n\t this._dfs(this.dataSource.data(), '_itemEqualsValue', value);\n\t },\n\n\t _itemEqualsValue: function(item, value) {\n\t if (item.enabled !== false && this._valueComparer(item, value)) {\n\n\t this.treeview.select(this.treeview.findByUid(item.uid));\n\n\t return false;\n\t }\n\t return true;\n\t },\n\n\t _checkItemByValue: function(value) {\n\t var items = this.treeview.dataItems();\n\t for (var idx = 0; idx < value.length; idx++) {\n\t this._dfs(items, '_checkItemEqualsValue', value[idx]);\n\t }\n\t },\n\n\t _checkItemEqualsValue: function(item, value) {\n\t if (item.enabled !== false && this._valueComparer(item, value)) {\n\t item.set(\"checked\", true);\n\t return false;\n\t }\n\t return true;\n\t },\n\n\t _valueComparer: function(item, value) {\n\t var itemValue = this._value(item);\n\t var itemText;\n\n\t if (!this._isNullorUndefined(itemValue)) {\n\t if(this._isNullorUndefined(value)){\n\t return false;\n\t }\n\n\t var newValue = this._value(value);\n\n\t if(newValue){\n\t return itemValue == newValue;\n\t }else{\n\t return itemValue == value;\n\t }\n\t }\n\n\t itemText = this._text(item);\n\t if (itemText) {\n\t if (this._text(value)) {\n\t return itemText == this._text(value);\n\t } else {\n\t return itemText == value;\n\t }\n\t }\n\n\t return false;\n\t },\n\n\t _isNullorUndefined: function(value){\n\t return value === undefined || value === null;\n\t },\n\n\t _getAllChecked: function() {\n\t this._allCheckedItems = [];\n\t this._allItemsAreChecked = true;\n\t this._allItemsAreUnchecked = true;\n\n\t this._dfs(this.dataSource.data(), '_getAllCheckedItems');\n\n\t return this._allCheckedItems;\n\t },\n\n\t _getAllCheckedItems: function(item) {\n\t if (this._allItemsAreChecked) {\n\t this._allItemsAreChecked = item.checked;\n\t }\n\n\t if (this._allItemsAreUnchecked) {\n\t this._allItemsAreUnchecked = !item.checked;\n\t }\n\n\t if (item.checked) {\n\t this._allCheckedItems.push(item);\n\t }\n\t return true;\n\t },\n\n\t _traverceChildren: function(item, action, prop) {\n\t var childrenField = (item._childrenOptions && item._childrenOptions.schema) ? item._childrenOptions.schema.data : null;\n\t var subItems = item[childrenField] || item.items || item.children;\n\n\t if (!subItems) {\n\t return;\n\t }\n\n\t this._dfs(subItems, action, prop);\n\t },\n\n\t _toggleCheckAllItems: function(checked) {\n\t this._dfs(this.dataSource.data(), '_checkAllCheckItem', checked);\n\t },\n\n\t _checkAllCheckItem: function(item, checked) {\n\t if (item.enabled === false) {\n\t if (item.checked) {\n\t this._disabledCheckedItems.push(item);\n\t } else {\n\t this._disabledUnCheckedItems.push(item);\n\t }\n\t } else {\n\t item.set(\"checked\", checked);\n\t }\n\t return true;\n\t },\n\n\t _isFilterEnabled: function() {\n\t var filter = this.options.filter;\n\t return filter && filter !== \"none\";\n\t },\n\n\t _editable: function(options) {\n\t var that = this;\n\t var element = that.element;\n\t var disable = options.disable;\n\t var readonly = options.readonly;\n\t var wrapper = that.wrapper.add(that.filterInput).off(ns);\n\t var dropDownWrapper = that._inputWrapper.off(HOVEREVENTS);\n\t if (that._isMultipleSelection()) {\n\t that.tagList.off(CLICK + ns);\n\t }\n\t if (!readonly && !disable) {\n\t element.removeAttr(DISABLED).removeAttr(READONLY);\n\n\t dropDownWrapper\n\t .removeClass(STATEDISABLED)\n\t .on(HOVEREVENTS, that._toggleHover);\n\n\t that._clear.on(\"click\" + ns, proxy(that._clearClick, that));\n\t wrapper\n\t .attr(TABINDEX, wrapper.data(TABINDEX))\n\t .attr(ARIA_DISABLED, false)\n\t .on(\"keydown\" + ns, proxy(that._keydown, that))\n\t .on(\"focusin\" + ns, proxy(that._focusinHandler, that))\n\t .on(\"focusout\" + ns, proxy(that._focusoutHandler, that));\n\n\t that.wrapper.on(CLICK + ns, proxy(that._wrapperClick, that));\n\n\t if (this._isMultipleSelection()) {\n\t that.tagList.on(CLICK + ns, \"li.k-button\", function(e) {\n\t $(e.currentTarget).addClass(FOCUSED);\n\t });\n\n\t that.tagList.on(CLICK + ns, \".k-select\", function(e) {\n\t that._removeTagClick(e);\n\t });\n\t }\n\t } else if (disable) {\n\t wrapper.removeAttr(TABINDEX);\n\t dropDownWrapper\n\t .addClass(STATEDISABLED);\n\t } else {\n\t wrapper\n\t .attr(TABINDEX, wrapper.data(TABINDEX));\n\n\t dropDownWrapper\n\t .removeClass(STATEDISABLED);\n\n\t wrapper\n\t .on(\"focusin\" + ns, proxy(that._focusinHandler, that))\n\t .on(\"focusout\" + ns, proxy(that._focusoutHandler, that));\n\t }\n\n\t element.attr(DISABLED, disable)\n\t .attr(READONLY, readonly);\n\n\t wrapper.attr(ARIA_DISABLED, disable);\n\t },\n\n\t _focusinHandler: function() {\n\t this._inputWrapper.addClass(FOCUSED);\n\t this._prevent = false;\n\t },\n\n\t _focusoutHandler: function() {\n\t var that = this;\n\n\t if (this._isMultipleSelection()) {\n\t this.tagList.find(DOT + FOCUSED).removeClass(FOCUSED);\n\t }\n\t if (!that._prevent) {\n\t this._inputWrapper.removeClass(FOCUSED);\n\t that._prevent = true;\n\t that.element.blur();\n\t }\n\t },\n\n\t _toggle: function(open) {\n\t open = open !== undefined ? open : !this.popup.visible();\n\n\t this[open ? OPEN : CLOSE]();\n\t },\n\n\t _wrapperClick: function(e) {\n\t e.preventDefault();\n\t this.popup.unbind(\"activate\", this._focusInputHandler);\n\t this._focused = this.wrapper;\n\t this._prevent = false;\n\t this._toggle();\n\t },\n\n\t _toggleHover: function(e) {\n\t $(e.currentTarget).toggleClass(HOVER, e.type === \"mouseenter\");\n\t },\n\n\t _focusInput: function() {\n\t if (this.filterInput) {\n\t this.filterInput.focus();\n\t } else if (this.checkAll) {\n\t this.checkAll.find(\".k-checkbox\").focus();\n\t } else if (this.tree.is(\":visible\")) {\n\t this.tree.focus();\n\t }\n\t },\n\n\t _keydown: function(e) {\n\t var key = e.keyCode;\n\t var altKey = e.altKey;\n\t var isFilterInputActive;\n\t var isWrapperActive;\n\t var focused, tagItem;\n\n\t var isPopupVisible = this.popup.visible();\n\n\t if (this.filterInput) {\n\t isFilterInputActive = this.filterInput[0] === activeElement();\n\t }\n\n\t if (this.wrapper) {\n\t isWrapperActive = this.wrapper[0] === activeElement();\n\t }\n\n\t if(isWrapperActive){\n\t if (key === keys.ESC) {\n\t this._clearTextAndValue();\n\t e.preventDefault();\n\t return;\n\t }\n\n\t if(this._isMultipleSelection()){\n\t if (key === keys.LEFT) {\n\t this._focusPrevTag();\n\t e.preventDefault();\n\t return;\n\t }\n\n\t if (key === keys.RIGHT) {\n\t this._focusNextTag();\n\t e.preventDefault();\n\t return;\n\t }\n\n\t if (key === keys.HOME) {\n\t this._focusFirstTag();\n\t e.preventDefault();\n\t return;\n\t }\n\n\t if (key === keys.END) {\n\t this._focusLastTag();\n\t e.preventDefault();\n\t return;\n\t }\n\n\t if (key === keys.DELETE) {\n\t focused = this.tagList.find(DOT + FOCUSED).first();\n\t if(focused.length){\n\t tagItem = this._tags[focused.index()];\n\t this._removeTag(tagItem);\n\t }\n\t e.preventDefault();\n\t return;\n\t }\n\n\t if (key === keys.BACKSPACE) {\n\t focused = this.tagList.find(DOT + FOCUSED).first();\n\t if (focused.length) {\n\t tagItem = this._tags[focused.index()];\n\t this._removeTag(tagItem);\n\t } else {\n\t focused = this._focusLastTag();\n\t if (focused.length) {\n\t tagItem = this._tags[focused.index()];\n\t this._removeTag(tagItem);\n\t }\n\t }\n\t e.preventDefault();\n\t return;\n\t }\n\t }\n\t }\n\n\n\t if (isFilterInputActive) {\n\t if (key === keys.ESC) {\n\t this._clearFilter();\n\t }\n\n\t if ((key === keys.UP) && !altKey) {\n\t this.wrapper.focus();\n\t e.preventDefault();\n\t }\n\n\t if(browser.msie && browser.version < 10){\n\t if (key === keys.BACKSPACE || key === keys.DELETE) {\n\t this._search();\n\t }\n\t }\n\n\t if(key === keys.TAB){\n\t this.close();\n\t this.wrapper.focus();\n\t e.preventDefault();\n\t return;\n\t }\n\t }\n\n\t if ((altKey && key === keys.UP) || key === keys.ESC) {\n\t this.close();\n\t this.wrapper.focus();\n\t e.preventDefault();\n\t return;\n\t }\n\n\t if (key === keys.ENTER && this._typingTimeout && this.filterInput && isPopupVisible) {\n\t e.preventDefault();\n\t return;\n\t }\n\n\t if (key === keys.SPACEBAR && !isFilterInputActive) {\n\t this._toggle(!isPopupVisible);\n\t e.preventDefault();\n\t }\n\n\t if ((altKey && key === keys.DOWN) && !isPopupVisible) {\n\t this.open();\n\t e.preventDefault();\n\t }\n\n\t if ((key === keys.DOWN) && isPopupVisible) {\n\t if (this.filterInput && !isFilterInputActive) {\n\t this.filterInput.focus();\n\t } else if (this.checkAll && this.checkAll.is(\":visible\")) {\n\t this.checkAll.find('input').focus();\n\t } else if(this.tree.is(\":visible\")) {\n\t this.tree.focus();\n\t }\n\t e.preventDefault();\n\t }\n\n\t if(key === keys.TAB && isPopupVisible){\n\t this.close();\n\t this.wrapper.focus();\n\t e.preventDefault();\n\t }\n\t },\n\n\t _focusPrevTag: function() {\n\t var focused = this.tagList.find(DOT + FOCUSED);\n\t if (focused.length) {\n\t var activedescendant = this.wrapper.attr(\"aria-activedescendant\");\n\t focused.first()\n\t .removeClass(FOCUSED)\n\t .removeAttr(\"id\")\n\t .prev().addClass(FOCUSED)\n\t .attr(\"id\", activedescendant);\n\t this.wrapper.attr(\"aria-activedescendant\", activedescendant);\n\t } else {\n\t this._focusLastTag();\n\t }\n\t },\n\n\t _focusNextTag: function() {\n\t var focused = this.tagList.find(DOT + FOCUSED);\n\t if (focused.length) {\n\t var activedescendant = this.wrapper.attr(\"aria-activedescendant\");\n\t focused.first().removeClass(FOCUSED).removeAttr(\"id\")\n\t .next().addClass(FOCUSED)\n\t .attr(\"id\", activedescendant);\n\t this.wrapper.attr(\"aria-activedescendant\", activedescendant);\n\t } else {\n\t this._focusFirstTag();\n\t }\n\t },\n\n\t _focusFirstTag: function() {\n\t var activedescendant = this.wrapper.attr(\"aria-activedescendant\");\n\t this._clearDisabledTag();\n\n\t var firstTag = this.tagList.children('li').first().addClass(FOCUSED)\n\t .attr(\"id\", activedescendant);\n\t this.wrapper.attr(\"aria-activedescendant\", activedescendant);\n\n\t return firstTag;\n\t },\n\n\t _focusLastTag: function() {\n\t var activedescendant = this.wrapper.attr(\"aria-activedescendant\");\n\t this._clearDisabledTag();\n\t var lastTag = this.tagList.children('li').last().addClass(FOCUSED)\n\t .attr(\"id\", activedescendant);\n\t this.wrapper.attr(\"aria-activedescendant\", activedescendant);\n\n\t return lastTag;\n\t },\n\n\t _clearDisabledTag: function() {\n\t this.tagList.find(DOT + FOCUSED).removeClass(FOCUSED).removeAttr(\"id\");\n\t },\n\n\t _search: function() {\n\t var that = this;\n\t clearTimeout(that._typingTimeout);\n\n\t that._typingTimeout = setTimeout(function() {\n\t var value = that.filterInput.val();\n\n\t if (that._prev !== value) {\n\t that._prev = value;\n\t that.search(value);\n\t }\n\n\t that._typingTimeout = null;\n\t }, that.options.delay);\n\t },\n\n\t _clearFilter: function() {\n\t if(this.filterInput.val().length){\n\t this.filterInput.val(\"\");\n\t this._prev = \"\";\n\t this._filtering = true;\n\t this.treeview.dataSource.filter({});\n\t }\n\t },\n\n\t _removeTagClick: function(e) {\n\t e.stopPropagation();\n\t var tagItem = this._tags[$(e.currentTarget.parentElement).index()];\n\t this._removeTag(tagItem);\n\t },\n\n\t _removeTag: function(tagItem) {\n\t if(!tagItem){\n\t return;\n\t }\n\n\t var uid = tagItem.uid;\n\t this._uncheckItemByUid(uid);\n\t }\n\t });\n\n\t function assign(instance, fields, value) {\n\t var idx = 0,\n\t lastIndex = fields.length - 1,\n\t field;\n\n\t for (; idx < lastIndex; ++idx) {\n\t field = fields[idx];\n\n\t if (!(field in instance)) {\n\t instance[field] = {};\n\t }\n\n\t instance = instance[field];\n\t }\n\n\t instance[fields[lastIndex]] = value;\n\t }\n\n\t ui.plugin(DropDownTree);\n\n\t var SingleSelection = kendo.Class.extend({\n\t init: function(view) {\n\t this._dropdowntree = view;\n\t },\n\n\t _initWrapper: function() {\n\t this._wrapper();\n\t this._span();\n\t },\n\n\t _preselect: function(data){\n\t var dropdowntree = this._dropdowntree;\n\n\t dropdowntree._selectValue(data);\n\t },\n\n\t _wrapper: function() {\n\t var dropdowntree = this._dropdowntree,\n\t element = dropdowntree.element,\n\t DOMelement = element[0],\n\t wrapper;\n\n\t wrapper = element.parent();\n\n\t if (!wrapper.is(\"span.k-widget\")) {\n\t wrapper = element.wrap(\"\").parent();\n\t wrapper[0].style.cssText = DOMelement.style.cssText;\n\t wrapper[0].title = DOMelement.title;\n\t }\n\n\t dropdowntree._focused = dropdowntree.wrapper = wrapper\n\t .addClass(\"k-widget k-dropdowntree\")\n\t .addClass(DOMelement.className)\n\t .removeClass('input-validation-error')\n\t .css(\"display\", \"\")\n\t .attr({\n\t accesskey: element.attr(\"accesskey\"),\n\t unselectable: \"on\",\n\t role: \"listbox\",\n\t \"aria-haspopup\": true,\n\t \"aria-expanded\": false\n\t });\n\n\t element.hide().removeAttr(\"accesskey\");\n\t },\n\n\t _span: function() {\n\t var dropdowntree = this._dropdowntree,\n\t wrapper = dropdowntree.wrapper,\n\t SELECTOR = \"span.k-input\",\n\t span;\n\n\t span = wrapper.find(SELECTOR);\n\n\t if (!span[0]) {\n\t wrapper.append(' ')\n\t .append(dropdowntree.element);\n\n\t span = wrapper.find(SELECTOR);\n\t }\n\n\t dropdowntree.span = span;\n\t dropdowntree._inputWrapper = $(wrapper[0].firstChild);\n\t dropdowntree._arrow = wrapper.find(\".k-select\");\n\t dropdowntree._arrowIcon = dropdowntree._arrow.find(\".k-icon\");\n\t },\n\n\t _setValue: function(value) {\n\t var dropdowntree = this._dropdowntree;\n\t var currentValue;\n\n\t if (value === undefined || value === null) {\n\t currentValue = dropdowntree._values.slice()[0];\n\t value = (typeof currentValue === \"object\") ? currentValue : dropdowntree._accessor() || currentValue;\n\t return value === undefined || value === null ? \"\" : value;\n\t }\n\t dropdowntree._valueMethodCalled = true;\n\t if (value.length === 0) {\n\t dropdowntree._clearTextAndValue();\n\t dropdowntree._valueMethodCalled = false;\n\t return;\n\t }\n\n\t dropdowntree._selectItemByValue(value);\n\t dropdowntree._toggleCloseVisibility();\n\t },\n\n\t _clearValue: function() {\n\t var dropdowntree = this._dropdowntree;\n\t var selectedNode = dropdowntree.treeview.select();\n\n\t if (dropdowntree.treeview.dataItem(selectedNode)) {\n\t dropdowntree.treeview.dataItem(selectedNode).set('selected', false);\n\t if(!dropdowntree._valueMethodCalled){\n\t dropdowntree.trigger(CHANGE);\n\t }\n\t }\n\t },\n\n\t _checkLoadedItem: function(tempItem, value) {\n\t var dropdowntree = this._dropdowntree;\n\n\t if (!dropdowntree._isNullorUndefined(value) && value!==\"\") {\n\t if(dropdowntree._valueComparer(tempItem, value)){\n\t dropdowntree._preventChangeTrigger = true;\n\t tempItem.set(\"selected\", true);\n\t dropdowntree._preventChangeTrigger = false;\n\t } else if (tempItem.selected){\n\t dropdowntree.treeview.select(dropdowntree.treeview.findByUid(tempItem.uid));\n\t }\n\n\t } else if (!value && tempItem.selected){\n\t dropdowntree.treeview.select(dropdowntree.treeview.findByUid(tempItem.uid));\n\t }\n\t }\n\t });\n\n\t var MultipleSelection = kendo.Class.extend({\n\t init: function(view) {\n\t this._dropdowntree = view;\n\t },\n\n\t _initWrapper: function() {\n\t var dropdowntree = this._dropdowntree;\n\n\t this._tagTemplate();\n\t dropdowntree.element.attr(\"multiple\", \"multiple\").hide();\n\t this._wrapper();\n\t dropdowntree._tags = new ObservableArray([]);\n\t dropdowntree._multipleTags = new ObservableArray([]);\n\t this._tagList();\n\t dropdowntree.span = $(' ').insertAfter(dropdowntree.tagList);\n\t dropdowntree._inputWrapper = $(dropdowntree.wrapper[0].firstChild);\n\t },\n\n\t _preselect: function(data, value){\n\t var dropdowntree = this._dropdowntree;\n\t var valueToSelect = value || dropdowntree.options.value;\n\n\t if (!$.isArray(data) && !(data instanceof kendo.data.ObservableArray)) {\n\t data = [data];\n\t }\n\n\t if ($.isPlainObject(data[0]) || data[0] instanceof kendo.data.ObservableObject || !dropdowntree.options.dataValueField) {\n\t dropdowntree.dataSource.data(data);\n\n\t dropdowntree.value(valueToSelect);\n\t }\n\t },\n\n\t _tagTemplate: function() {\n\t var dropdowntree = this._dropdowntree;\n\t var options = dropdowntree.options;\n\t var tagTemplate = options.valueTemplate;\n\t var isMultiple = options.tagMode === \"multiple\";\n\t var singleTag = options.messages.singleTag;\n\n\t tagTemplate = tagTemplate ? kendo.template(tagTemplate) : dropdowntree.valueTemplate;\n\n\t dropdowntree.valueTemplate = function(data) {\n\t if (isMultiple) {\n\t return '
  • ' +\n\t '' + tagTemplate(data) + '' +\n\t '' +\n\t '' +\n\t '' +\n\t '
  • ';\n\t }\n\n\t return '
  • ' +\n\t '' +\n\t ' ' + singleTag +'' +\n\t '
  • ';\n\t };\n\t },\n\n\t _wrapper: function() {\n\t var dropdowntree = this._dropdowntree,\n\t element = dropdowntree.element,\n\t wrapper = element.parent(\"span.k-dropdowntree\");\n\n\t if (!wrapper[0]) {\n\t wrapper = element.wrap('
    ').parent();\n\t wrapper[0].style.cssText = element[0].style.cssText;\n\t wrapper[0].title = element[0].title;\n\n\t $('
    ').insertBefore(element);\n\t }\n\n\t dropdowntree.wrapper = wrapper.addClass(element[0].className).css(\"display\", \"\")\n\t .attr({\n\t role: \"listbox\",\n\t \"aria-activedescendant\": kendo.guid(),\n\t \"aria-haspopup\": true,\n\t \"aria-expanded\": false\n\t });\n\t dropdowntree._innerWrapper = $(wrapper[0].firstChild);\n\t },\n\n\t _tagList: function() {\n\t var dropdowntree = this._dropdowntree,\n\t tagList = dropdowntree._innerWrapper.children(\"ul\");\n\n\t if (!tagList[0]) {\n\t var isMultiple = dropdowntree.options.tagMode === \"multiple\";\n\t var tagCollection = isMultiple ? \"tags\": \"multipleTag\";\n\t tagList = $('
      ').appendTo(dropdowntree._innerWrapper);\n\t }\n\n\t dropdowntree.tagList = tagList;\n\t dropdowntree.tagList.attr('id', kendo.guid() + \"_tagList\");\n\t dropdowntree.wrapper.attr(\"aria-owns\", dropdowntree.tagList.attr('id'));\n\t var viewModel = kendo.observable({\n\t multipleTag: dropdowntree._multipleTags,\n\t tags: dropdowntree._tags,\n\t tagTemplate: dropdowntree.valueTemplate\n\t });\n\t kendo.bind(dropdowntree.tagList, viewModel);\n\t dropdowntree.tagList.attr(\"data-stop\", true);\n\t },\n\n\t _setValue: function(value) {\n\t var dropdowntree = this._dropdowntree;\n\t var oldValues = dropdowntree._values;\n\t if (value === undefined || value === null) {\n\t return dropdowntree._values.slice();\n\t }\n\n\t dropdowntree.setValue(value);\n\t dropdowntree._valueMethodCalled = true;\n\t if (value.length) {\n\t this._removeValues(oldValues, value);\n\n\t dropdowntree._checkItemByValue(value);\n\t } else {\n\t dropdowntree._clearTextAndValue();\n\t }\n\n\t dropdowntree._valueMethodCalled = false;\n\t dropdowntree._toggleCloseVisibility();\n\t },\n\n\t _removeValues: function(oldValues, value) {\n\t var dropdowntree = this._dropdowntree;\n\t var removedValues = this._getNewValues(oldValues, value);\n\n\t for (var idx = 0; idx < removedValues.length; idx++) {\n\t for (var j = 0; j < dropdowntree._tags.length; j++) {\n\t if (dropdowntree._valueComparer(dropdowntree._tags[j],removedValues[idx])){\n\t dropdowntree._uncheckItemByUid(dropdowntree._tags[j].uid);\n\t }\n\t }\n\t }\n\t },\n\n\t _getNewValues: function(oldValues, value){\n\t var removedValues = [];\n\n\t for (var idx = 0; idx < oldValues.length; idx++) {\n\t if(value.indexOf(oldValues[idx]) === -1){\n\t removedValues.push(oldValues[idx]);\n\t }\n\t }\n\n\t return removedValues;\n\t },\n\n\t _clearValue: function() {\n\t var dropdowntree = this._dropdowntree;\n\t var tagsArray = dropdowntree._tags.slice();\n\n\t for (var idx = 0; idx < tagsArray.length; idx++) {\n\t var uid = tagsArray[idx].uid;\n\t dropdowntree._preventChangeTrigger = true;\n\t dropdowntree._uncheckItemByUid(uid);\n\t }\n\n\t if (tagsArray.length) {\n\t dropdowntree._preventChangeTrigger = false;\n\t if(!dropdowntree._valueMethodCalled){\n\t dropdowntree.trigger(CHANGE);\n\t }\n\t }\n\t },\n\n\t _checkLoadedItem: function(tempItem, value) {\n\t var dropdowntree = this._dropdowntree;\n\n\t if (dropdowntree._noInitialValue && tempItem.checked) {\n\t dropdowntree._checkValue(tempItem);\n\t return;\n\t }\n\n\t if ((value.length || this._isDataSourceSet) &&\n\t (value.indexOf(dropdowntree._currentValue(tempItem)) !== -1 || value.indexOf(tempItem)) !== -1 &&\n\t !this._findTag(dropdowntree._currentValue(tempItem))) {\n\t if (tempItem.checked) {\n\t dropdowntree._checkValue(tempItem);\n\t } else {\n\t dropdowntree._preventChangeTrigger = true;\n\t tempItem.set(\"checked\", true);\n\t dropdowntree._preventChangeTrigger = false;\n\t }\n\t }\n\t },\n\n\t _findTag: function(tempItemValue) {\n\t var dropdowntree = this._dropdowntree;\n\n\t return dropdowntree._tags.find(function(item) {\n\t return dropdowntree._valueComparer(item, tempItemValue);\n\t });\n\t }\n\t });\n\n\t kendo.ui.DropDownTree.SingleSelection = SingleSelection;\n\t kendo.ui.DropDownTree.MultipleSelection = MultipleSelection;\n\n\t})(window.kendo.jQuery);\n\n\treturn window.kendo;\n\n\t}, __webpack_require__(3));\n\n\n/***/ }),\n\n/***/ 1153:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./dropdowntree/treeview\");\n\n/***/ })\n\n/******/ });","module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(1215);\n\n\n/***/ }),\n\n/***/ 3:\n/***/ (function(module, exports) {\n\n\tmodule.exports = function() { throw new Error(\"define cannot be used indirect\"); };\r\n\n\n/***/ }),\n\n/***/ 1018:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./kendo.core\");\n\n/***/ }),\n\n/***/ 1215:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (f, define) {\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(1018)], __WEBPACK_AMD_DEFINE_FACTORY__ = (f), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t})(function () {\n\n\tvar __meta__ = {// jshint ignore:line\n\t id: \"floatinglabel\",\n\t name: \"FloatingLabel\",\n\t category: \"framework\",\n\t depends: [\"core\"],\n\t hidden: true\n\t};\n\n\t(function ($, undefined) {\n\t var kendo = window.kendo,\n\t Widget = kendo.ui.Widget,\n\t ui = kendo.ui,\n\t NS = \".kendoFloatingLabel\",\n\t FLOATINGLABELCONTAINER = \"k-floating-label-container\",\n\t EMPTY = \"k-state-empty\",\n\t FOCUSED = \"k-state-focused\",\n\t STATEDISABLED = \"k-state-disabled\",\n\t NOCLICKCLASS = \"k-no-click\",\n\t proxy = $.proxy;\n\n\t var FloatingLabel = Widget.extend({\n\t init: function (element, options) {\n\t var that = this;\n\n\t Widget.fn.init.call(that, element, options);\n\t options = $.extend(true, {}, options);\n\n\t that.refresh();\n\t that._editable({\n\t readonly: that.options.widget.options.readonly !== undefined ? that.options.widget.options.readonly : false,\n\t disable: that.options.widget.options.enable !== undefined ? !(that.options.widget.options.enable) : false\n\t });\n\n\t that.element.addClass(FLOATINGLABELCONTAINER);\n\n\t kendo.notify(that);\n\t },\n\n\t options: {\n\t name: 'FloatingLabel',\n\t widget: null\n\t },\n\n\t readonly: function(readonly) {\n\t this._editable({\n\t readonly: readonly === undefined ? true : readonly,\n\t disable: false\n\t });\n\t },\n\n\t enable: function(enable) {\n\t this._editable({\n\t readonly: false,\n\t disable: !(enable = enable === undefined ? true : enable)\n\t });\n\t },\n\n\t refresh: function () {\n\t var that = this;\n\t var element = that.element;\n\n\t element\n\t .removeClass(EMPTY)\n\t .removeClass(FOCUSED);\n\n\n\t if (!that.options.widget.element.val()) {\n\t element.addClass(EMPTY);\n\t }\n\n\t if (document.activeElement === that.options.widget.element[0]) {\n\t element.addClass(FOCUSED);\n\t }\n\t },\n\n\t destroy: function() {\n\t var that = this;\n\n\t that.element.off(NS);\n\t Widget.fn.destroy.call(that);\n\t },\n\n\t _editable: function(options) {\n\t var that = this;\n\t var element = that.element;\n\t var disable = options.disable;\n\t var readonly = options.readonly;\n\n\t element.off(NS);\n\n\t if (!readonly && !disable) {\n\t element\n\t .removeClass(STATEDISABLED)\n\t .removeClass(NOCLICKCLASS);\n\n\t element.on(\"focusin\" + NS, proxy(that.refresh, that));\n\t element.on(\"focusout\" + NS, proxy(that.refresh, that));\n\t } else {\n\t element\n\t .toggleClass(STATEDISABLED, disable)\n\t .toggleClass(NOCLICKCLASS, readonly);\n\t }\n\t }\n\t });\n\t ui.plugin(FloatingLabel);\n\t})(window.kendo.jQuery);\n\n\treturn window.kendo;\n\n\t}, __webpack_require__(3));\n\n\n/***/ })\n\n/******/ });","module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(1218);\n\n\n/***/ }),\n\n/***/ 3:\n/***/ (function(module, exports) {\n\n\tmodule.exports = function() { throw new Error(\"define cannot be used indirect\"); };\r\n\n\n/***/ }),\n\n/***/ 1018:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./kendo.core\");\n\n/***/ }),\n\n/***/ 1218:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function(f, define){\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(1018) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (f), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t})(function(){\n\n\tvar __meta__ = { // jshint ignore:line\n\t id: \"fx\",\n\t name: \"Effects\",\n\t category: \"framework\",\n\t description: \"Required for animation effects in all Kendo UI widgets.\",\n\t depends: [ \"core\" ]\n\t};\n\n\t(function($, undefined) {\n\t var kendo = window.kendo,\n\t fx = kendo.effects,\n\t each = $.each,\n\t extend = $.extend,\n\t proxy = $.proxy,\n\t support = kendo.support,\n\t browser = support.browser,\n\t transforms = support.transforms,\n\t transitions = support.transitions,\n\t scaleProperties = { scale: 0, scalex: 0, scaley: 0, scale3d: 0 },\n\t translateProperties = { translate: 0, translatex: 0, translatey: 0, translate3d: 0 },\n\t hasZoom = (typeof document.documentElement.style.zoom !== \"undefined\") && !transforms,\n\t matrix3dRegExp = /matrix3?d?\\s*\\(.*,\\s*([\\d\\.\\-]+)\\w*?,\\s*([\\d\\.\\-]+)\\w*?,\\s*([\\d\\.\\-]+)\\w*?,\\s*([\\d\\.\\-]+)\\w*?/i,\n\t cssParamsRegExp = /^(-?[\\d\\.\\-]+)?[\\w\\s]*,?\\s*(-?[\\d\\.\\-]+)?[\\w\\s]*/i,\n\t translateXRegExp = /translatex?$/i,\n\t oldEffectsRegExp = /(zoom|fade|expand)(\\w+)/,\n\t singleEffectRegExp = /(zoom|fade|expand)/,\n\t unitRegExp = /[xy]$/i,\n\t transformProps = [\"perspective\", \"rotate\", \"rotatex\", \"rotatey\", \"rotatez\", \"rotate3d\", \"scale\", \"scalex\", \"scaley\", \"scalez\", \"scale3d\", \"skew\", \"skewx\", \"skewy\", \"translate\", \"translatex\", \"translatey\", \"translatez\", \"translate3d\", \"matrix\", \"matrix3d\"],\n\t transform2d = [\"rotate\", \"scale\", \"scalex\", \"scaley\", \"skew\", \"skewx\", \"skewy\", \"translate\", \"translatex\", \"translatey\", \"matrix\"],\n\t transform2units = { \"rotate\": \"deg\", scale: \"\", skew: \"px\", translate: \"px\" },\n\t cssPrefix = transforms.css,\n\t round = Math.round,\n\t BLANK = \"\",\n\t PX = \"px\",\n\t NONE = \"none\",\n\t AUTO = \"auto\",\n\t WIDTH = \"width\",\n\t HEIGHT = \"height\",\n\t HIDDEN = \"hidden\",\n\t ORIGIN = \"origin\",\n\t ABORT_ID = \"abortId\",\n\t OVERFLOW = \"overflow\",\n\t TRANSLATE = \"translate\",\n\t POSITION = \"position\",\n\t COMPLETE_CALLBACK = \"completeCallback\",\n\t TRANSITION = cssPrefix + \"transition\",\n\t TRANSFORM = cssPrefix + \"transform\",\n\t BACKFACE = cssPrefix + \"backface-visibility\",\n\t PERSPECTIVE = cssPrefix + \"perspective\",\n\t DEFAULT_PERSPECTIVE = \"1500px\",\n\t TRANSFORM_PERSPECTIVE = \"perspective(\" + DEFAULT_PERSPECTIVE + \")\",\n\t directions = {\n\t left: {\n\t reverse: \"right\",\n\t property: \"left\",\n\t transition: \"translatex\",\n\t vertical: false,\n\t modifier: -1\n\t },\n\t right: {\n\t reverse: \"left\",\n\t property: \"left\",\n\t transition: \"translatex\",\n\t vertical: false,\n\t modifier: 1\n\t },\n\t down: {\n\t reverse: \"up\",\n\t property: \"top\",\n\t transition: \"translatey\",\n\t vertical: true,\n\t modifier: 1\n\t },\n\t up: {\n\t reverse: \"down\",\n\t property: \"top\",\n\t transition: \"translatey\",\n\t vertical: true,\n\t modifier: -1\n\t },\n\t top: {\n\t reverse: \"bottom\"\n\t },\n\t bottom: {\n\t reverse: \"top\"\n\t },\n\t \"in\": {\n\t reverse: \"out\",\n\t modifier: -1\n\t },\n\t out: {\n\t reverse: \"in\",\n\t modifier: 1\n\t },\n\n\t vertical: {\n\t reverse: \"vertical\"\n\t },\n\n\t horizontal: {\n\t reverse: \"horizontal\"\n\t }\n\t };\n\n\t kendo.directions = directions;\n\n\t extend($.fn, {\n\t kendoStop: function(clearQueue, gotoEnd) {\n\t if (transitions) {\n\t return fx.stopQueue(this, clearQueue || false, gotoEnd || false);\n\t } else {\n\t return this.stop(clearQueue, gotoEnd);\n\t }\n\t }\n\t });\n\n\t /* jQuery support for all transform animations (FF 3.5/3.6, Opera 10.x, IE9 */\n\n\t if (transforms && !transitions) {\n\t each(transform2d, function(idx, value) {\n\t $.fn[value] = function(val) {\n\t if (typeof val == \"undefined\") {\n\t return animationProperty(this, value);\n\t } else {\n\t var that = $(this)[0],\n\t transformValue = value + \"(\" + val + transform2units[value.replace(unitRegExp, \"\")] + \")\";\n\n\t if (that.style.cssText.indexOf(TRANSFORM) == -1) {\n\t $(this).css(TRANSFORM, transformValue);\n\t } else {\n\t that.style.cssText = that.style.cssText.replace(new RegExp(value + \"\\\\(.*?\\\\)\", \"i\"), transformValue);\n\t }\n\t }\n\t return this;\n\t };\n\n\t $.fx.step[value] = function (fx) {\n\t $(fx.elem)[value](fx.now);\n\t };\n\t });\n\n\t var curProxy = $.fx.prototype.cur;\n\t $.fx.prototype.cur = function () {\n\t if (transform2d.indexOf(this.prop) != -1) {\n\t return parseFloat($(this.elem)[this.prop]());\n\t }\n\n\t return curProxy.apply(this, arguments);\n\t };\n\t }\n\n\t kendo.toggleClass = function(element, classes, options, add) {\n\t if (classes) {\n\t classes = classes.split(\" \");\n\n\t if (transitions) {\n\t options = extend({\n\t exclusive: \"all\",\n\t duration: 400,\n\t ease: \"ease-out\"\n\t }, options);\n\n\t element.css(TRANSITION, options.exclusive + \" \" + options.duration + \"ms \" + options.ease);\n\t setTimeout(function() {\n\t element.css(TRANSITION, \"\").css(HEIGHT);\n\t }, options.duration); // TODO: this should fire a kendoAnimate session instead.\n\t }\n\n\t each(classes, function(idx, value) {\n\t element.toggleClass(value, add);\n\t });\n\t }\n\n\t return element;\n\t };\n\n\t kendo.parseEffects = function(input, mirror) {\n\t var effects = {};\n\n\t if (typeof input === \"string\") {\n\t each(input.split(\" \"), function(idx, value) {\n\t var redirectedEffect = !singleEffectRegExp.test(value),\n\t resolved = value.replace(oldEffectsRegExp, function(match, $1, $2) {\n\t return $1 + \":\" + $2.toLowerCase();\n\t }), // Support for old zoomIn/fadeOut style, now deprecated.\n\t effect = resolved.split(\":\"),\n\t direction = effect[1],\n\t effectBody = {};\n\n\t if (effect.length > 1) {\n\t effectBody.direction = (mirror && redirectedEffect ? directions[direction].reverse : direction);\n\t }\n\n\t effects[effect[0]] = effectBody;\n\t });\n\t } else {\n\t each(input, function(idx) {\n\t var direction = this.direction;\n\n\t if (direction && mirror && !singleEffectRegExp.test(idx)) {\n\t this.direction = directions[direction].reverse;\n\t }\n\n\t effects[idx] = this;\n\t });\n\t }\n\n\t return effects;\n\t };\n\n\t function parseInteger(value) {\n\t return parseInt(value, 10);\n\t }\n\n\t function parseCSS(element, property) {\n\t return parseInteger(element.css(property));\n\t }\n\n\t function keys(obj) {\n\t var acc = [];\n\t for (var propertyName in obj) {\n\t acc.push(propertyName);\n\t }\n\t return acc;\n\t }\n\n\t function strip3DTransforms(properties) {\n\t for (var key in properties) {\n\t if (transformProps.indexOf(key) != -1 && transform2d.indexOf(key) == -1) {\n\t delete properties[key];\n\t }\n\t }\n\n\t return properties;\n\t }\n\n\t function normalizeCSS(element, properties) {\n\t var transformation = [], cssValues = {}, lowerKey, key, value, isTransformed;\n\n\t for (key in properties) {\n\t lowerKey = key.toLowerCase();\n\t isTransformed = transforms && transformProps.indexOf(lowerKey) != -1;\n\n\t if (!support.hasHW3D && isTransformed && transform2d.indexOf(lowerKey) == -1) {\n\t delete properties[key];\n\t } else {\n\t value = properties[key];\n\n\t if (isTransformed) {\n\t transformation.push(key + \"(\" + value + \")\");\n\t } else {\n\t cssValues[key] = value;\n\t }\n\t }\n\t }\n\n\t if (transformation.length) {\n\t cssValues[TRANSFORM] = transformation.join(\" \");\n\t }\n\n\t return cssValues;\n\t }\n\n\t if (transitions) {\n\t extend(fx, {\n\t transition: function(element, properties, options) {\n\t var css,\n\t delay = 0,\n\t oldKeys = element.data(\"keys\") || [],\n\t timeoutID;\n\n\t options = extend({\n\t duration: 200,\n\t ease: \"ease-out\",\n\t complete: null,\n\t exclusive: \"all\"\n\t },\n\t options\n\t );\n\n\t var stopTransitionCalled = false;\n\n\t var stopTransition = function() {\n\t if (!stopTransitionCalled) {\n\t stopTransitionCalled = true;\n\n\t if (timeoutID) {\n\t clearTimeout(timeoutID);\n\t timeoutID = null;\n\t }\n\n\t element\n\t .removeData(ABORT_ID)\n\t .dequeue()\n\t .css(TRANSITION, \"\")\n\t .css(TRANSITION);\n\n\t options.complete.call(element);\n\t }\n\t };\n\n\t options.duration = $.fx ? $.fx.speeds[options.duration] || options.duration : options.duration;\n\n\t css = normalizeCSS(element, properties);\n\n\t $.merge(oldKeys, keys(css));\n\n\t if ($.hasOwnProperty(\"uniqueSort\")) {\n\t element\n\t .data(\"keys\", $.uniqueSort(oldKeys))\n\t .height();\n\t } else {\n\t element\n\t .data(\"keys\", $.unique(oldKeys))\n\t .height();\n\t }\n\n\t element.css(TRANSITION, options.exclusive + \" \" + options.duration + \"ms \" + options.ease).css(TRANSITION);\n\t element.css(css).css(TRANSFORM);\n\n\t /**\n\t * Use transitionEnd event for browsers who support it - but duplicate it with setTimeout, as the transitionEnd event will not be triggered if no CSS properties change.\n\t * This should be cleaned up at some point (widget by widget), and refactored to widgets not relying on the complete callback if no transition occurs.\n\t *\n\t * For IE9 and below, resort to setTimeout.\n\t */\n\t if (transitions.event) {\n\t element.one(transitions.event, stopTransition);\n\t if (options.duration !== 0) {\n\t delay = 500;\n\t }\n\t }\n\n\t timeoutID = setTimeout(stopTransition, options.duration + delay);\n\t element.data(ABORT_ID, timeoutID);\n\t element.data(COMPLETE_CALLBACK, stopTransition);\n\t },\n\n\t stopQueue: function(element, clearQueue, gotoEnd) {\n\t var cssValues,\n\t taskKeys = element.data(\"keys\"),\n\t retainPosition = (!gotoEnd && taskKeys),\n\t completeCallback = element.data(COMPLETE_CALLBACK);\n\n\t if (retainPosition) {\n\t cssValues = kendo.getComputedStyles(element[0], taskKeys);\n\t }\n\n\t if (completeCallback) {\n\t completeCallback();\n\t }\n\n\t if (retainPosition) {\n\t element.css(cssValues);\n\t }\n\n\t return element\n\t .removeData(\"keys\")\n\t .stop(clearQueue);\n\t }\n\t });\n\t }\n\n\t function animationProperty(element, property) {\n\t if (transforms) {\n\t var transform = element.css(TRANSFORM);\n\t if (transform == NONE) {\n\t return property == \"scale\" ? 1 : 0;\n\t }\n\n\t var match = transform.match(new RegExp(property + \"\\\\s*\\\\(([\\\\d\\\\w\\\\.]+)\")),\n\t computed = 0;\n\n\t if (match) {\n\t computed = parseInteger(match[1]);\n\t } else {\n\t match = transform.match(matrix3dRegExp) || [0, 0, 0, 0, 0];\n\t property = property.toLowerCase();\n\n\t if (translateXRegExp.test(property)) {\n\t computed = parseFloat(match[3] / match[2]);\n\t } else if (property == \"translatey\") {\n\t computed = parseFloat(match[4] / match[2]);\n\t } else if (property == \"scale\") {\n\t computed = parseFloat(match[2]);\n\t } else if (property == \"rotate\") {\n\t computed = parseFloat(Math.atan2(match[2], match[1]));\n\t }\n\t }\n\n\t return computed;\n\t } else {\n\t return parseFloat(element.css(property));\n\t }\n\t }\n\n\t var EffectSet = kendo.Class.extend({\n\t init: function(element, options) {\n\t var that = this;\n\n\t that.element = element;\n\t that.effects = [];\n\t that.options = options;\n\t that.restore = [];\n\t },\n\n\t run: function(effects) {\n\t var that = this,\n\t effect,\n\t idx, jdx,\n\t length = effects.length,\n\t element = that.element,\n\t options = that.options,\n\t deferred = $.Deferred(),\n\t start = {},\n\t end = {},\n\t target,\n\t children,\n\t childrenLength;\n\n\t that.effects = effects;\n\n\t deferred.done($.proxy(that, \"complete\"));\n\n\t element.data(\"animating\", true);\n\n\t for (idx = 0; idx < length; idx ++) {\n\t effect = effects[idx];\n\n\t effect.setReverse(options.reverse);\n\t effect.setOptions(options);\n\n\t that.addRestoreProperties(effect.restore);\n\n\t effect.prepare(start, end);\n\n\t children = effect.children();\n\n\t for (jdx = 0, childrenLength = children.length; jdx < childrenLength; jdx ++) {\n\t children[jdx].duration(options.duration).run();\n\t }\n\t }\n\n\t // legacy support for options.properties\n\t for (var effectName in options.effects) {\n\t extend(end, options.effects[effectName].properties);\n\t }\n\n\t // Show the element initially\n\t if (!element.is(\":visible\")) {\n\t extend(start, { display: element.data(\"olddisplay\") || \"block\" });\n\t }\n\n\t if (transforms && !options.reset) {\n\t target = element.data(\"targetTransform\");\n\n\t if (target) {\n\t start = extend(target, start);\n\t }\n\t }\n\n\t start = normalizeCSS(element, start);\n\n\t if (transforms && !transitions) {\n\t start = strip3DTransforms(start);\n\t }\n\n\t element.css(start)\n\t .css(TRANSFORM); // Nudge\n\n\t for (idx = 0; idx < length; idx ++) {\n\t effects[idx].setup();\n\t }\n\n\t if (options.init) {\n\t options.init();\n\t }\n\n\t element.data(\"targetTransform\", end);\n\t fx.animate(element, end, extend({}, options, { complete: deferred.resolve }));\n\n\t return deferred.promise();\n\t },\n\n\t stop: function() {\n\t $(this.element).kendoStop(true, true);\n\t },\n\n\t addRestoreProperties: function(restore) {\n\t var element = this.element,\n\t value,\n\t i = 0,\n\t length = restore.length;\n\n\t for (; i < length; i ++) {\n\t value = restore[i];\n\n\t this.restore.push(value);\n\n\t if (!element.data(value)) {\n\t element.data(value, element.css(value));\n\t }\n\t }\n\t },\n\n\t restoreCallback: function() {\n\t var element = this.element;\n\n\t for (var i = 0, length = this.restore.length; i < length; i ++) {\n\t var value = this.restore[i];\n\t element.css(value, element.data(value));\n\t }\n\t },\n\n\t complete: function() {\n\t var that = this,\n\t idx = 0,\n\t element = that.element,\n\t options = that.options,\n\t effects = that.effects,\n\t length = effects.length;\n\n\t element\n\t .removeData(\"animating\")\n\t .dequeue(); // call next animation from the queue\n\n\t if (options.hide) {\n\t element.data(\"olddisplay\", element.css(\"display\")).hide();\n\t }\n\n\t this.restoreCallback();\n\n\t if (hasZoom && !transforms) {\n\t setTimeout($.proxy(this, \"restoreCallback\"), 0); // Again jQuery callback in IE8-\n\t }\n\n\t for (; idx < length; idx ++) {\n\t effects[idx].teardown();\n\t }\n\n\t if (options.completeCallback) {\n\t options.completeCallback(element);\n\t }\n\t }\n\t });\n\n\t fx.promise = function(element, options) {\n\t var effects = [],\n\t effectClass,\n\t effectSet = new EffectSet(element, options),\n\t parsedEffects = kendo.parseEffects(options.effects),\n\t effect;\n\n\t options.effects = parsedEffects;\n\n\t for (var effectName in parsedEffects) {\n\t effectClass = fx[capitalize(effectName)];\n\n\t if (effectClass) {\n\t effect = new effectClass(element, parsedEffects[effectName].direction);\n\t effects.push(effect);\n\t }\n\t }\n\n\t if (effects[0]) {\n\t effectSet.run(effects);\n\t } else { // Not sure how would an fx promise reach this state - means that you call kendoAnimate with no valid effects? Why?\n\t if (!element.is(\":visible\")) {\n\t element.css({ display: element.data(\"olddisplay\") || \"block\" }).css(\"display\");\n\t }\n\n\t if (options.init) {\n\t options.init();\n\t }\n\n\t element.dequeue();\n\t effectSet.complete();\n\t }\n\t };\n\n\t extend(fx, {\n\t animate: function(elements, properties, options) {\n\t var useTransition = options.transition !== false;\n\t delete options.transition;\n\n\t if (transitions && \"transition\" in fx && useTransition) {\n\t fx.transition(elements, properties, options);\n\t } else {\n\t if (transforms) {\n\t elements.animate(strip3DTransforms(properties), { queue: false, show: false, hide: false, duration: options.duration, complete: options.complete }); // Stop animate from showing/hiding the element to be able to hide it later on.\n\t } else {\n\t elements.each(function() {\n\t var element = $(this),\n\t multiple = {};\n\n\t each(transformProps, function(idx, value) { // remove transforms to avoid IE and older browsers confusion\n\t var params,\n\t currentValue = properties ? properties[value]+ \" \" : null; // We need to match\n\n\t if (currentValue) {\n\t var single = properties;\n\n\t if (value in scaleProperties && properties[value] !== undefined) {\n\t params = currentValue.match(cssParamsRegExp);\n\t if (transforms) {\n\t extend(single, { scale: +params[0] });\n\t }\n\t } else {\n\t if (value in translateProperties && properties[value] !== undefined) {\n\t var position = element.css(POSITION),\n\t isFixed = (position == \"absolute\" || position == \"fixed\");\n\n\t if (!element.data(TRANSLATE)) {\n\t if (isFixed) {\n\t element.data(TRANSLATE, {\n\t top: parseCSS(element, \"top\") || 0,\n\t left: parseCSS(element, \"left\") || 0,\n\t bottom: parseCSS(element, \"bottom\"),\n\t right: parseCSS(element, \"right\")\n\t });\n\t } else {\n\t element.data(TRANSLATE, {\n\t top: parseCSS(element, \"marginTop\") || 0,\n\t left: parseCSS(element, \"marginLeft\") || 0\n\t });\n\t }\n\t }\n\n\t var originalPosition = element.data(TRANSLATE);\n\n\t params = currentValue.match(cssParamsRegExp);\n\t if (params) {\n\n\t var dX = value == TRANSLATE + \"y\" ? +null : +params[1],\n\t dY = value == TRANSLATE + \"y\" ? +params[1] : +params[2];\n\n\t if (isFixed) {\n\t if (!isNaN(originalPosition.right)) {\n\t if (!isNaN(dX)) { extend(single, { right: originalPosition.right - dX }); }\n\t } else {\n\t if (!isNaN(dX)) { extend(single, { left: originalPosition.left + dX }); }\n\t }\n\n\t if (!isNaN(originalPosition.bottom)) {\n\t if (!isNaN(dY)) { extend(single, { bottom: originalPosition.bottom - dY }); }\n\t } else {\n\t if (!isNaN(dY)) { extend(single, { top: originalPosition.top + dY }); }\n\t }\n\t } else {\n\t if (!isNaN(dX)) { extend(single, { marginLeft: originalPosition.left + dX }); }\n\t if (!isNaN(dY)) { extend(single, { marginTop: originalPosition.top + dY }); }\n\t }\n\t }\n\t }\n\t }\n\n\t if (!transforms && value != \"scale\" && value in single) {\n\t delete single[value];\n\t }\n\n\t if (single) {\n\t extend(multiple, single);\n\t }\n\t }\n\t });\n\n\t if (browser.msie) {\n\t delete multiple.scale;\n\t }\n\n\t element.animate(multiple, { queue: false, show: false, hide: false, duration: options.duration, complete: options.complete }); // Stop animate from showing/hiding the element to be able to hide it later on.\n\t });\n\t }\n\t }\n\t }\n\t });\n\n\t fx.animatedPromise = fx.promise;\n\n\t var Effect = kendo.Class.extend({\n\t init: function(element, direction) {\n\t var that = this;\n\t that.element = element;\n\t that._direction = direction;\n\t that.options = {};\n\t that._additionalEffects = [];\n\n\t if (!that.restore) {\n\t that.restore = [];\n\t }\n\t },\n\n\t// Public API\n\t reverse: function() {\n\t this._reverse = true;\n\t return this.run();\n\t },\n\n\t play: function() {\n\t this._reverse = false;\n\t return this.run();\n\t },\n\n\t add: function(additional) {\n\t this._additionalEffects.push(additional);\n\t return this;\n\t },\n\n\t direction: function(value) {\n\t this._direction = value;\n\t return this;\n\t },\n\n\t duration: function(duration) {\n\t this._duration = duration;\n\t return this;\n\t },\n\n\t compositeRun: function() {\n\t var that = this,\n\t effectSet = new EffectSet(that.element, { reverse: that._reverse, duration: that._duration }),\n\t effects = that._additionalEffects.concat([ that ]);\n\n\t return effectSet.run(effects);\n\t },\n\n\t run: function() {\n\t if (this._additionalEffects && this._additionalEffects[0]) {\n\t return this.compositeRun();\n\t }\n\n\t var that = this,\n\t element = that.element,\n\t idx = 0,\n\t restore = that.restore,\n\t length = restore.length,\n\t value,\n\t deferred = $.Deferred(),\n\t start = {},\n\t end = {},\n\t target,\n\t children = that.children(),\n\t childrenLength = children.length;\n\n\t deferred.done($.proxy(that, \"_complete\"));\n\n\t element.data(\"animating\", true);\n\n\t for (idx = 0; idx < length; idx ++) {\n\t value = restore[idx];\n\n\t if (!element.data(value)) {\n\t element.data(value, element.css(value));\n\t }\n\t }\n\n\t for (idx = 0; idx < childrenLength; idx ++) {\n\t children[idx].duration(that._duration).run();\n\t }\n\n\t that.prepare(start, end);\n\n\t if (!element.is(\":visible\")) {\n\t extend(start, { display: element.data(\"olddisplay\") || \"block\" });\n\t }\n\n\t if (transforms) {\n\t target = element.data(\"targetTransform\");\n\n\t if (target) {\n\t start = extend(target, start);\n\t }\n\t }\n\n\t start = normalizeCSS(element, start);\n\n\t if (transforms && !transitions) {\n\t start = strip3DTransforms(start);\n\t }\n\n\t element.css(start).css(TRANSFORM); // Trick webkit into re-rendering\n\n\t that.setup();\n\n\t element.data(\"targetTransform\", end);\n\t fx.animate(element, end, { duration: that._duration, complete: deferred.resolve });\n\n\t return deferred.promise();\n\t },\n\n\t stop: function() {\n\t var idx = 0,\n\t children = this.children(),\n\t childrenLength = children.length;\n\n\t for (idx = 0; idx < childrenLength; idx ++) {\n\t children[idx].stop();\n\t }\n\n\t $(this.element).kendoStop(true, true);\n\t return this;\n\t },\n\n\t restoreCallback: function() {\n\t var element = this.element;\n\n\t for (var i = 0, length = this.restore.length; i < length; i ++) {\n\t var value = this.restore[i];\n\t element.css(value, element.data(value));\n\t }\n\t },\n\n\t _complete: function() {\n\t var that = this,\n\t element = that.element;\n\n\t element\n\t .removeData(\"animating\")\n\t .dequeue(); // call next animation from the queue\n\n\t that.restoreCallback();\n\n\t if (that.shouldHide()) {\n\t element.data(\"olddisplay\", element.css(\"display\")).hide();\n\t }\n\n\t if (hasZoom && !transforms) {\n\t setTimeout($.proxy(that, \"restoreCallback\"), 0); // Again jQuery callback in IE8-\n\t }\n\n\t that.teardown();\n\t },\n\n\t /////////////////////////// Support for kendo.animate;\n\t setOptions: function(options) {\n\t extend(true, this.options, options);\n\t },\n\n\t children: function() {\n\t return [];\n\t },\n\n\t shouldHide: $.noop,\n\n\t setup: $.noop,\n\t prepare: $.noop,\n\t teardown: $.noop,\n\t directions: [],\n\n\t setReverse: function(reverse) {\n\t this._reverse = reverse;\n\t return this;\n\t }\n\t });\n\n\t function capitalize(word) {\n\t return word.charAt(0).toUpperCase() + word.substring(1);\n\t }\n\n\t function createEffect(name, definition) {\n\t var effectClass = Effect.extend(definition),\n\t directions = effectClass.prototype.directions;\n\n\t fx[capitalize(name)] = effectClass;\n\n\t fx.Element.prototype[name] = function(direction, opt1, opt2, opt3) {\n\t return new effectClass(this.element, direction, opt1, opt2, opt3);\n\t };\n\n\t each(directions, function(idx, theDirection) {\n\t fx.Element.prototype[name + capitalize(theDirection)] = function(opt1, opt2, opt3) {\n\t return new effectClass(this.element, theDirection, opt1, opt2, opt3);\n\t };\n\t });\n\t }\n\n\t var FOUR_DIRECTIONS = [\"left\", \"right\", \"up\", \"down\"],\n\t IN_OUT = [\"in\", \"out\"];\n\n\t createEffect(\"slideIn\", {\n\t directions: FOUR_DIRECTIONS,\n\n\t divisor: function(value) {\n\t this.options.divisor = value;\n\t return this;\n\t },\n\n\t prepare: function(start, end) {\n\t var that = this,\n\t tmp,\n\t element = that.element,\n\t outerWidth = kendo._outerWidth,\n\t outerHeight = kendo._outerHeight,\n\t direction = directions[that._direction],\n\t offset = -direction.modifier * (direction.vertical ? outerHeight(element) : outerWidth(element)),\n\t startValue = offset / (that.options && that.options.divisor || 1) + PX,\n\t endValue = \"0px\";\n\n\t if (that._reverse) {\n\t tmp = start;\n\t start = end;\n\t end = tmp;\n\t }\n\n\t if (transforms) {\n\t start[direction.transition] = startValue;\n\t end[direction.transition] = endValue;\n\t } else {\n\t start[direction.property] = startValue;\n\t end[direction.property] = endValue;\n\t }\n\t }\n\t });\n\n\t createEffect(\"tile\", {\n\t directions: FOUR_DIRECTIONS,\n\n\t init: function(element, direction, previous) {\n\t Effect.prototype.init.call(this, element, direction);\n\t this.options = { previous: previous };\n\t },\n\n\t previousDivisor: function(value) {\n\t this.options.previousDivisor = value;\n\t return this;\n\t },\n\n\t children: function() {\n\t var that = this,\n\t reverse = that._reverse,\n\t previous = that.options.previous,\n\t divisor = that.options.previousDivisor || 1,\n\t dir = that._direction;\n\n\t var children = [ kendo.fx(that.element).slideIn(dir).setReverse(reverse) ];\n\n\t if (previous) {\n\t children.push( kendo.fx(previous).slideIn(directions[dir].reverse).divisor(divisor).setReverse(!reverse) );\n\t }\n\n\t return children;\n\t }\n\t });\n\n\t function createToggleEffect(name, property, defaultStart, defaultEnd) {\n\t createEffect(name, {\n\t directions: IN_OUT,\n\n\t startValue: function(value) {\n\t this._startValue = value;\n\t return this;\n\t },\n\n\t endValue: function(value) {\n\t this._endValue = value;\n\t return this;\n\t },\n\n\t shouldHide: function() {\n\t return this._shouldHide;\n\t },\n\n\t prepare: function(start, end) {\n\t var that = this,\n\t startValue,\n\t endValue,\n\t out = this._direction === \"out\",\n\t startDataValue = that.element.data(property),\n\t startDataValueIsSet = !(isNaN(startDataValue) || startDataValue == defaultStart);\n\n\t if (startDataValueIsSet) {\n\t startValue = startDataValue;\n\t } else if (typeof this._startValue !== \"undefined\") {\n\t startValue = this._startValue;\n\t } else {\n\t startValue = out ? defaultStart : defaultEnd;\n\t }\n\n\t if (typeof this._endValue !== \"undefined\") {\n\t endValue = this._endValue;\n\t } else {\n\t endValue = out ? defaultEnd : defaultStart;\n\t }\n\n\t if (this._reverse) {\n\t start[property] = endValue;\n\t end[property] = startValue;\n\t } else {\n\t start[property] = startValue;\n\t end[property] = endValue;\n\t }\n\n\t that._shouldHide = end[property] === defaultEnd;\n\t }\n\t });\n\t }\n\n\t createToggleEffect(\"fade\", \"opacity\", 1, 0);\n\t createToggleEffect(\"zoom\", \"scale\", 1, 0.01);\n\n\t createEffect(\"slideMargin\", {\n\t prepare: function(start, end) {\n\t var that = this,\n\t element = that.element,\n\t options = that.options,\n\t origin = element.data(ORIGIN),\n\t offset = options.offset,\n\t margin,\n\t reverse = that._reverse;\n\n\t if (!reverse && origin === null) {\n\t element.data(ORIGIN, parseFloat(element.css(\"margin-\" + options.axis)));\n\t }\n\n\t margin = (element.data(ORIGIN) || 0);\n\t end[\"margin-\" + options.axis] = !reverse ? margin + offset : margin;\n\t }\n\t });\n\n\t createEffect(\"slideTo\", {\n\t prepare: function(start, end) {\n\t var that = this,\n\t element = that.element,\n\t options = that.options,\n\t offset = options.offset.split(\",\"),\n\t reverse = that._reverse;\n\n\t if (transforms) {\n\t end.translatex = !reverse ? offset[0] : 0;\n\t end.translatey = !reverse ? offset[1] : 0;\n\t } else {\n\t end.left = !reverse ? offset[0] : 0;\n\t end.top = !reverse ? offset[1] : 0;\n\t }\n\t element.css(\"left\");\n\t }\n\t });\n\n\t createEffect(\"expand\", {\n\t directions: [\"horizontal\", \"vertical\"],\n\n\t restore: [ OVERFLOW ],\n\n\t prepare: function(start, end) {\n\t var that = this,\n\t element = that.element,\n\t options = that.options,\n\t reverse = that._reverse,\n\t property = that._direction === \"vertical\" ? HEIGHT : WIDTH,\n\t setLength = element[0].style[property],\n\t oldLength = element.data(property),\n\t length = parseFloat(oldLength || setLength),\n\t realLength = round(element.css(property, AUTO)[property]());\n\n\t start.overflow = HIDDEN;\n\n\t length = (options && options.reset) ? realLength || length : length || realLength;\n\n\t end[property] = (reverse ? 0 : length) + PX;\n\t start[property] = (reverse ? length : 0) + PX;\n\n\t if (oldLength === undefined) {\n\t element.data(property, setLength);\n\t }\n\t },\n\n\t shouldHide: function() {\n\t return this._reverse;\n\t },\n\n\t teardown: function() {\n\t var that = this,\n\t element = that.element,\n\t property = that._direction === \"vertical\" ? HEIGHT : WIDTH,\n\t length = element.data(property);\n\n\t if (length == AUTO || length === BLANK) {\n\t setTimeout(function() { element.css(property, AUTO).css(property); }, 0); // jQuery animate complete callback in IE is called before the last animation step!\n\t }\n\t }\n\t });\n\n\t var TRANSFER_START_STATE = { position: \"absolute\", marginLeft: 0, marginTop: 0, scale: 1 };\n\t /**\n\t * Intersection point formulas are taken from here - http://zonalandeducation.com/mmts/intersections/intersectionOfTwoLines1/intersectionOfTwoLines1.html\n\t * Formula for a linear function from two points from here - http://demo.activemath.org/ActiveMath2/search/show.cmd?id=mbase://AC_UK_calculus/functions/ex_linear_equation_two_points\n\t * The transform origin point is the intersection point of the two lines from the top left corners/top right corners of the element and target.\n\t * The math and variables below MAY BE SIMPLIFIED (zeroes removed), but this would make the formula too cryptic.\n\t */\n\t createEffect(\"transfer\", {\n\t init: function(element, target) {\n\t this.element = element;\n\t this.options = { target: target };\n\t this.restore = [];\n\t },\n\n\t setup: function() {\n\t this.element.appendTo(document.body);\n\t },\n\n\t prepare: function(start, end) {\n\t var that = this,\n\t element = that.element,\n\t outerBox = fx.box(element),\n\t innerBox = fx.box(that.options.target),\n\t currentScale = animationProperty(element, \"scale\"),\n\t scale = fx.fillScale(innerBox, outerBox),\n\t transformOrigin = fx.transformOrigin(innerBox, outerBox);\n\n\t extend(start, TRANSFER_START_STATE);\n\t end.scale = 1;\n\n\t element.css(TRANSFORM, \"scale(1)\").css(TRANSFORM);\n\t element.css(TRANSFORM, \"scale(\" + currentScale + \")\");\n\n\t start.top = outerBox.top;\n\t start.left = outerBox.left;\n\t start.transformOrigin = transformOrigin.x + PX + \" \" + transformOrigin.y + PX;\n\n\t if (that._reverse) {\n\t start.scale = scale;\n\t } else {\n\t end.scale = scale;\n\t }\n\t }\n\t });\n\n\n\t var CLIPS = {\n\t top: \"rect(auto auto $size auto)\",\n\t bottom: \"rect($size auto auto auto)\",\n\t left: \"rect(auto $size auto auto)\",\n\t right: \"rect(auto auto auto $size)\"\n\t };\n\n\t var ROTATIONS = {\n\t top: { start: \"rotatex(0deg)\", end: \"rotatex(180deg)\" },\n\t bottom: { start: \"rotatex(-180deg)\", end: \"rotatex(0deg)\" },\n\t left: { start: \"rotatey(0deg)\", end: \"rotatey(-180deg)\" },\n\t right: { start: \"rotatey(180deg)\", end: \"rotatey(0deg)\" }\n\t };\n\n\t function clipInHalf(container, direction) {\n\t var vertical = kendo.directions[direction].vertical,\n\t size = (container[vertical ? HEIGHT : WIDTH]() / 2) + \"px\";\n\n\t return CLIPS[direction].replace(\"$size\", size);\n\t }\n\n\t createEffect(\"turningPage\", {\n\t directions: FOUR_DIRECTIONS,\n\n\t init: function(element, direction, container) {\n\t Effect.prototype.init.call(this, element, direction);\n\t this._container = container;\n\t },\n\n\t prepare: function(start, end) {\n\t var that = this,\n\t reverse = that._reverse,\n\t direction = reverse ? directions[that._direction].reverse : that._direction,\n\t rotation = ROTATIONS[direction];\n\n\t start.zIndex = 1;\n\n\t if (that._clipInHalf) {\n\t start.clip = clipInHalf(that._container, kendo.directions[direction].reverse);\n\t }\n\n\t start[BACKFACE] = HIDDEN;\n\n\t end[TRANSFORM] = TRANSFORM_PERSPECTIVE + (reverse ? rotation.start : rotation.end);\n\t start[TRANSFORM] = TRANSFORM_PERSPECTIVE + (reverse ? rotation.end : rotation.start);\n\t },\n\n\t setup: function() {\n\t this._container.append(this.element);\n\t },\n\n\t face: function(value) {\n\t this._face = value;\n\t return this;\n\t },\n\n\t shouldHide: function() {\n\t var that = this,\n\t reverse = that._reverse,\n\t face = that._face;\n\n\t return (reverse && !face) || (!reverse && face);\n\t },\n\n\t clipInHalf: function(value) {\n\t this._clipInHalf = value;\n\t return this;\n\t },\n\n\t temporary: function() {\n\t this.element.addClass('temp-page');\n\t return this;\n\t }\n\t });\n\n\t createEffect(\"staticPage\", {\n\t directions: FOUR_DIRECTIONS,\n\n\t init: function(element, direction, container) {\n\t Effect.prototype.init.call(this, element, direction);\n\t this._container = container;\n\t },\n\n\t restore: [\"clip\"],\n\n\t prepare: function(start, end) {\n\t var that = this,\n\t direction = that._reverse ? directions[that._direction].reverse : that._direction;\n\n\t start.clip = clipInHalf(that._container, direction);\n\t start.opacity = 0.999;\n\t end.opacity = 1;\n\t },\n\n\t shouldHide: function() {\n\t var that = this,\n\t reverse = that._reverse,\n\t face = that._face;\n\n\t return (reverse && !face) || (!reverse && face);\n\t },\n\n\t face: function(value) {\n\t this._face = value;\n\t return this;\n\t }\n\t });\n\n\t createEffect(\"pageturn\", {\n\t directions: [\"horizontal\", \"vertical\"],\n\n\t init: function(element, direction, face, back) {\n\t Effect.prototype.init.call(this, element, direction);\n\t this.options = {};\n\t this.options.face = face;\n\t this.options.back = back;\n\t },\n\n\t children: function() {\n\t var that = this,\n\t options = that.options,\n\t direction = that._direction === \"horizontal\" ? \"left\" : \"top\",\n\t reverseDirection = kendo.directions[direction].reverse,\n\t reverse = that._reverse,\n\t temp,\n\t faceClone = options.face.clone(true).removeAttr(\"id\"),\n\t backClone = options.back.clone(true).removeAttr(\"id\"),\n\t element = that.element;\n\n\t if (reverse) {\n\t temp = direction;\n\t direction = reverseDirection;\n\t reverseDirection = temp;\n\t }\n\n\t return [\n\t kendo.fx(options.face).staticPage(direction, element).face(true).setReverse(reverse),\n\t kendo.fx(options.back).staticPage(reverseDirection, element).setReverse(reverse),\n\t kendo.fx(faceClone).turningPage(direction, element).face(true).clipInHalf(true).temporary().setReverse(reverse),\n\t kendo.fx(backClone).turningPage(reverseDirection, element).clipInHalf(true).temporary().setReverse(reverse)\n\t ];\n\t },\n\n\t prepare: function(start, end) {\n\t start[PERSPECTIVE] = DEFAULT_PERSPECTIVE;\n\t start.transformStyle = \"preserve-3d\";\n\t // hack to trigger transition end.\n\t start.opacity = 0.999;\n\t end.opacity = 1;\n\t },\n\n\t teardown: function() {\n\t this.element.find(\".temp-page\").remove();\n\t }\n\t });\n\n\t createEffect(\"flip\", {\n\t directions: [\"horizontal\", \"vertical\"],\n\n\t init: function(element, direction, face, back) {\n\t Effect.prototype.init.call(this, element, direction);\n\t this.options = {};\n\t this.options.face = face;\n\t this.options.back = back;\n\t },\n\n\t children: function() {\n\t var that = this,\n\t options = that.options,\n\t direction = that._direction === \"horizontal\" ? \"left\" : \"top\",\n\t reverseDirection = kendo.directions[direction].reverse,\n\t reverse = that._reverse,\n\t temp,\n\t element = that.element;\n\n\t if (reverse) {\n\t temp = direction;\n\t direction = reverseDirection;\n\t reverseDirection = temp;\n\t }\n\n\t return [\n\t kendo.fx(options.face).turningPage(direction, element).face(true).setReverse(reverse),\n\t kendo.fx(options.back).turningPage(reverseDirection, element).setReverse(reverse)\n\t ];\n\t },\n\n\t prepare: function(start) {\n\t start[PERSPECTIVE] = DEFAULT_PERSPECTIVE;\n\t start.transformStyle = \"preserve-3d\";\n\t }\n\t });\n\n\t var RESTORE_OVERFLOW = !support.mobileOS.android;\n\t var IGNORE_TRANSITION_EVENT_SELECTOR = \".km-touch-scrollbar, .km-actionsheet-wrapper\";\n\n\t createEffect(\"replace\", {\n\t _before: $.noop,\n\t _after: $.noop,\n\t init: function(element, previous, transitionClass) {\n\t Effect.prototype.init.call(this, element);\n\t this._previous = $(previous);\n\t this._transitionClass = transitionClass;\n\t },\n\n\t duration: function() {\n\t throw new Error(\"The replace effect does not support duration setting; the effect duration may be customized through the transition class rule\");\n\t },\n\n\t beforeTransition: function(callback) {\n\t this._before = callback;\n\t return this;\n\t },\n\n\t afterTransition: function(callback) {\n\t this._after = callback;\n\t return this;\n\t },\n\n\t _both: function() {\n\t return $().add(this._element).add(this._previous);\n\t },\n\n\t _containerClass: function() {\n\t var direction = this._direction,\n\t containerClass = \"k-fx k-fx-start k-fx-\" + this._transitionClass;\n\n\t if (direction) {\n\t containerClass += \" k-fx-\" + direction;\n\t }\n\n\t if (this._reverse) {\n\t containerClass += \" k-fx-reverse\";\n\t }\n\n\t return containerClass;\n\t },\n\n\t complete: function(e) {\n\t if (!this.deferred || (e && $(e.target).is(IGNORE_TRANSITION_EVENT_SELECTOR))) {\n\t return;\n\t }\n\n\t var container = this.container;\n\n\t container\n\t .removeClass(\"k-fx-end\")\n\t .removeClass(this._containerClass())\n\t .off(transitions.event, this.completeProxy);\n\n\t this._previous.hide().removeClass(\"k-fx-current\");\n\t this.element.removeClass(\"k-fx-next\");\n\n\t if (RESTORE_OVERFLOW) {\n\t container.css(OVERFLOW, \"\");\n\t }\n\n\t if (!this.isAbsolute) {\n\t this._both().css(POSITION, \"\");\n\t }\n\n\t this.deferred.resolve();\n\t delete this.deferred;\n\t },\n\n\t run: function() {\n\t if (this._additionalEffects && this._additionalEffects[0]) {\n\t return this.compositeRun();\n\t }\n\n\t var that = this,\n\t element = that.element,\n\t previous = that._previous,\n\t container = element.parents().filter(previous.parents()).first(),\n\t both = that._both(),\n\t deferred = $.Deferred(),\n\t originalPosition = element.css(POSITION),\n\t originalOverflow;\n\n\t // edge case for grid/scheduler, where the previous is already destroyed.\n\t if (!container.length) {\n\t container = element.parent();\n\t }\n\n\t this.container = container;\n\t this.deferred = deferred;\n\t this.isAbsolute = originalPosition == \"absolute\";\n\n\t if (!this.isAbsolute) {\n\t both.css(POSITION, \"absolute\");\n\t }\n\n\t if (RESTORE_OVERFLOW) {\n\t originalOverflow = container.css(OVERFLOW);\n\t container.css(OVERFLOW, \"hidden\");\n\t }\n\n\t if (!transitions) {\n\t this.complete();\n\t } else {\n\t element.addClass(\"k-fx-hidden\");\n\n\t container.addClass(this._containerClass());\n\n\t this.completeProxy = $.proxy(this, \"complete\");\n\t container.on(transitions.event, this.completeProxy);\n\n\t kendo.animationFrame(function() {\n\t element.removeClass(\"k-fx-hidden\").addClass(\"k-fx-next\");\n\t previous.css(\"display\", \"\").addClass(\"k-fx-current\");\n\t that._before(previous, element);\n\t kendo.animationFrame(function() {\n\t container.removeClass(\"k-fx-start\").addClass(\"k-fx-end\");\n\t that._after(previous, element);\n\t });\n\t });\n\t }\n\n\t return deferred.promise();\n\t },\n\n\t stop: function() {\n\t this.complete();\n\t }\n\t });\n\n\t var Animation = kendo.Class.extend({\n\t init: function() {\n\t var that = this;\n\t that._tickProxy = proxy(that._tick, that);\n\t that._started = false;\n\t },\n\n\t tick: $.noop,\n\t done: $.noop,\n\t onEnd: $.noop,\n\t onCancel: $.noop,\n\n\t start: function() {\n\t if (!this.enabled()) {\n\t return;\n\t }\n\n\t if (!this.done()) {\n\t this._started = true;\n\t kendo.animationFrame(this._tickProxy);\n\t } else {\n\t this.onEnd();\n\t }\n\t },\n\n\t enabled: function() {\n\t return true;\n\t },\n\n\t cancel: function() {\n\t this._started = false;\n\t this.onCancel();\n\t },\n\n\t _tick: function() {\n\t var that = this;\n\t if (!that._started) { return; }\n\n\t that.tick();\n\n\t if (!that.done()) {\n\t kendo.animationFrame(that._tickProxy);\n\t } else {\n\t that._started = false;\n\t that.onEnd();\n\t }\n\t }\n\t });\n\n\t var Transition = Animation.extend({\n\t init: function(options) {\n\t var that = this;\n\t extend(that, options);\n\t Animation.fn.init.call(that);\n\t },\n\n\t done: function() {\n\t return this.timePassed() >= this.duration;\n\t },\n\n\t timePassed: function() {\n\t return Math.min(this.duration, (new Date()) - this.startDate);\n\t },\n\n\t moveTo: function(options) {\n\t var that = this,\n\t movable = that.movable;\n\n\t that.initial = movable[that.axis];\n\t that.delta = options.location - that.initial;\n\n\t that.duration = typeof options.duration == \"number\" ? options.duration : 300;\n\n\t that.tick = that._easeProxy(options.ease);\n\n\t that.startDate = new Date();\n\t that.start();\n\t },\n\n\t _easeProxy: function(ease) {\n\t var that = this;\n\n\t return function() {\n\t that.movable.moveAxis(that.axis, ease(that.timePassed(), that.initial, that.delta, that.duration));\n\t };\n\t }\n\t });\n\n\t extend(Transition, {\n\t easeOutExpo: function (t, b, c, d) {\n\t return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;\n\t },\n\n\t easeOutBack: function (t, b, c, d, s) {\n\t s = 1.70158;\n\t return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;\n\t }\n\t });\n\n\t fx.Animation = Animation;\n\t fx.Transition = Transition;\n\t fx.createEffect = createEffect;\n\n\t fx.box = function(element) {\n\t element = $(element);\n\t var result = element.offset();\n\t result.width = kendo._outerWidth(element);\n\t result.height = kendo._outerHeight(element);\n\t return result;\n\t };\n\n\t fx.transformOrigin = function(inner, outer) {\n\t var x = (inner.left - outer.left) * outer.width / (outer.width - inner.width),\n\t y = (inner.top - outer.top) * outer.height / (outer.height - inner.height);\n\n\t return {\n\t x: isNaN(x) ? 0 : x,\n\t y: isNaN(y) ? 0 : y\n\t };\n\t };\n\n\t fx.fillScale = function(inner, outer) {\n\t return Math.min(inner.width / outer.width, inner.height / outer.height);\n\t };\n\n\t fx.fitScale = function(inner, outer) {\n\t return Math.max(inner.width / outer.width, inner.height / outer.height);\n\t };\n\t})(window.kendo.jQuery);\n\n\treturn window.kendo;\n\n\t}, __webpack_require__(3));\n\n\n/***/ })\n\n/******/ });","module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(1243);\n\n\n/***/ }),\n\n/***/ 3:\n/***/ (function(module, exports) {\n\n\tmodule.exports = function() { throw new Error(\"define cannot be used indirect\"); };\r\n\n\n/***/ }),\n\n/***/ 1027:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./kendo.data\");\n\n/***/ }),\n\n/***/ 1054:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./kendo.popup\");\n\n/***/ }),\n\n/***/ 1243:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function(f, define){\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(1027), __webpack_require__(1054) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (f), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t})(function(){\n\n\tvar __meta__ = { // jshint ignore:line\n\t id: \"list\",\n\t name: \"List\",\n\t category: \"framework\",\n\t depends: [ \"data\", \"popup\" ],\n\t hidden: true\n\t};\n\n\t/*jshint evil: true*/\n\t(function($, undefined) {\n\t var kendo = window.kendo,\n\t ui = kendo.ui,\n\t outerHeight = kendo._outerHeight,\n\t percentageUnitsRegex = /^\\d+(\\.\\d+)?%$/i,\n\t Widget = ui.Widget,\n\t keys = kendo.keys,\n\t support = kendo.support,\n\t htmlEncode = kendo.htmlEncode,\n\t activeElement = kendo._activeElement,\n\t outerWidth = kendo._outerWidth,\n\t ObservableArray = kendo.data.ObservableArray,\n\t ID = \"id\",\n\t CHANGE = \"change\",\n\t FOCUSED = \"k-state-focused\",\n\t HOVER = \"k-state-hover\",\n\t LOADING = \"k-i-loading\",\n\t GROUPHEADER = \".k-group-header\",\n\t ITEMSELECTOR = \".k-item\",\n\t LABELIDPART = \"_label\",\n\t OPEN = \"open\",\n\t CLOSE = \"close\",\n\t CASCADE = \"cascade\",\n\t SELECT = \"select\",\n\t SELECTED = \"selected\",\n\t REQUESTSTART = \"requestStart\",\n\t REQUESTEND = \"requestEnd\",\n\t BLUR = \"blur\",\n\t FOCUS = \"focus\",\n\t FOCUSOUT = \"focusout\",\n\t extend = $.extend,\n\t proxy = $.proxy,\n\t isArray = $.isArray,\n\t browser = support.browser,\n\t HIDDENCLASS = \"k-hidden\",\n\t WIDTH = \"width\",\n\t isIE = browser.msie,\n\t isIE8 = isIE && browser.version < 9,\n\t quotRegExp = /\"/g,\n\t alternativeNames = {\n\t \"ComboBox\": [ \"DropDownList\", \"MultiColumnComboBox\" ],\n\t \"DropDownList\": [ \"ComboBox\", \"MultiColumnComboBox\" ],\n\t \"MultiColumnComboBox\": [ \"ComboBox\", \"DropDownList\" ]\n\t };\n\n\t var List = kendo.ui.DataBoundWidget.extend({\n\t init: function(element, options) {\n\t var that = this,\n\t ns = that.ns,\n\t id;\n\n\t Widget.fn.init.call(that, element, options);\n\t element = that.element;\n\t options = that.options;\n\n\t that._isSelect = element.is(SELECT);\n\n\t if (that._isSelect && that.element[0].length) {\n\t if (!options.dataSource) {\n\t options.dataTextField = options.dataTextField || \"text\";\n\t options.dataValueField = options.dataValueField || \"value\";\n\t }\n\t }\n\n\t that.ul = $('
        ')\n\t .attr({\n\t tabIndex: -1,\n\t \"aria-hidden\": true\n\t });\n\n\t that.list = $(\"
        \")\n\t .append(that.ul)\n\t .on(\"mousedown\" + ns, proxy(that._listMousedown, that));\n\n\t id = element.attr(ID);\n\n\t if (!id) {\n\t id = kendo.guid();\n\t }\n\n\t that.list.attr(ID, id + \"-list\");\n\t that.ul.attr(ID, id + \"_listbox\");\n\n\t if (options.columns && options.columns.length) {\n\t that.ul.removeClass(\"k-list\").addClass(\"k-grid-list\");\n\t that._columnsHeader();\n\t }\n\n\t that._header();\n\t that._noData();\n\t that._footer();\n\t that._accessors();\n\t that._initValue();\n\t },\n\n\t options: {\n\t valuePrimitive: false,\n\t footerTemplate: \"\",\n\t headerTemplate: \"\",\n\t noDataTemplate: true,\n\t messages: {\n\t \"noData\": \"No data found.\",\n\t \"clear\": \"clear\"\n\t }\n\t },\n\n\t setOptions: function(options) {\n\t Widget.fn.setOptions.call(this, options);\n\n\t if (options && options.enable !== undefined) {\n\t options.enabled = options.enable;\n\t }\n\n\t if (options.columns && options.columns.length) {\n\t this._columnsHeader();\n\t }\n\n\t this._header();\n\t this._noData();\n\t this._footer();\n\n\t this._renderFooter();\n\t this._renderNoData();\n\t },\n\n\t focus: function() {\n\t this._focused.focus();\n\t },\n\n\t readonly: function(readonly) {\n\t this._editable({\n\t readonly: readonly === undefined ? true : readonly,\n\t disable: false\n\t });\n\t },\n\n\t enable: function(enable) {\n\t this._editable({\n\t readonly: false,\n\t disable: !(enable = enable === undefined ? true : enable)\n\t });\n\t },\n\n\t _header: function() {\n\t var list = this;\n\t var header = $(list.header);\n\t var template = list.options.headerTemplate;\n\n\t this._angularElement(header, \"cleanup\");\n\t kendo.destroy(header);\n\t header.remove();\n\n\t if (!template) {\n\t list.header = null;\n\t return;\n\t }\n\n\t var headerTemplate = typeof template !== \"function\" ? kendo.template(template) : template;\n\t header = $(headerTemplate({}));\n\n\t list.header = header[0] ? header : null;\n\t list.list.prepend(header);\n\n\t this._angularElement(list.header, \"compile\");\n\t },\n\n\t _columnsHeader: function() {\n\t var list = this;\n\t var columnsHeader = $(list.columnsHeader);\n\n\t this._angularElement(columnsHeader, \"cleanup\");\n\t kendo.destroy(columnsHeader);\n\t columnsHeader.remove();\n\n\t var header = \"
        \";\n\t var colGroup = \"\";\n\t var row = \"\";\n\n\t for (var idx = 0; idx < this.options.columns.length; idx++) {\n\t var currentColumn = this.options.columns[idx];\n\t var title = currentColumn.title || currentColumn.field || \"\";\n\t var template = currentColumn.headerTemplate || title;\n\t var columnsHeaderTemplate = typeof template !== \"function\" ? kendo.template(template) : template;\n\t var currentWidth = currentColumn.width;\n\t var currentWidthInt = parseInt(currentWidth, 10);\n\t var widthStyle = '';\n\n\t if (currentWidth && !isNaN(currentWidthInt)) {\n\t widthStyle += \"style='width:\";\n\t widthStyle += currentWidthInt;\n\t widthStyle += percentageUnitsRegex.test(currentWidth) ? \"%\" : \"px\";\n\t widthStyle += \";'\";\n\t }\n\n\t colGroup += \"\";\n\n\t row += \"\";\n\t }\n\t colGroup += \"\";\n\t row += \"\";\n\t header += colGroup;\n\t header += row;\n\t header += \"
        \";\n\t row += columnsHeaderTemplate(currentColumn);\n\t row += \"
        \";\n\n\t list.columnsHeader = columnsHeader = $(header);\n\t list.list.prepend(columnsHeader);\n\n\t this._angularElement(list.columnsHeader, \"compile\");\n\t },\n\n\t _noData: function() {\n\t var list = this;\n\t var noData = $(list.noData);\n\t var template = list.options.noDataTemplate === true ? list.options.messages.noData : list.options.noDataTemplate;\n\n\t list.angular(\"cleanup\", function() { return { elements: noData }; });\n\t kendo.destroy(noData);\n\t noData.remove();\n\n\t if (!template) {\n\t list.noData = null;\n\t return;\n\t }\n\n\t list.noData = $('
        ').appendTo(list.list);\n\t list.noDataTemplate = typeof template !== \"function\" ? kendo.template(template) : template;\n\t },\n\n\t _footer: function() {\n\t var list = this;\n\t var footer = $(list.footer);\n\t var template = list.options.footerTemplate;\n\n\t this._angularElement(footer, \"cleanup\");\n\t kendo.destroy(footer);\n\t footer.remove();\n\n\t if (!template) {\n\t list.footer = null;\n\t return;\n\t }\n\n\t list.footer = $('
        ').appendTo(list.list);\n\t list.footerTemplate = typeof template !== \"function\" ? kendo.template(template) : template;\n\t },\n\n\t _listOptions: function(options) {\n\t var that = this;\n\t var currentOptions = that.options;\n\t var virtual = currentOptions.virtual;\n\t var changeEventOption = {change: proxy(that._listChange, that)};\n\t var listBoundHandler = proxy(that._listBound, that);\n\n\t virtual = typeof virtual === \"object\" ? virtual : {};\n\n\t options = $.extend({\n\t autoBind: false,\n\t selectable: true,\n\t dataSource: that.dataSource,\n\t click: proxy(that._click, that),\n\t activate: proxy(that._activateItem, that),\n\t columns: currentOptions.columns,\n\t deactivate: proxy(that._deactivateItem, that),\n\t dataBinding: function() {\n\t that.trigger(\"dataBinding\");\n\t },\n\t dataBound: listBoundHandler,\n\t height: currentOptions.height,\n\t dataValueField: currentOptions.dataValueField,\n\t dataTextField: currentOptions.dataTextField,\n\t groupTemplate: currentOptions.groupTemplate,\n\t fixedGroupTemplate: currentOptions.fixedGroupTemplate,\n\t template: currentOptions.template\n\t }, options, virtual, changeEventOption);\n\n\t if (!options.template) {\n\t options.template = \"#:\" + kendo.expr(options.dataTextField, \"data\") + \"#\";\n\t }\n\n\t if (currentOptions.$angular) {\n\t options.$angular = currentOptions.$angular;\n\t }\n\n\t return options;\n\t },\n\n\t _initList: function() {\n\t var that = this;\n\t var listOptions = that._listOptions({\n\t selectedItemChange: proxy(that._listChange, that)\n\t });\n\n\t if (!that.options.virtual) {\n\t that.listView = new kendo.ui.StaticList(that.ul, listOptions);\n\t } else {\n\t that.listView = new kendo.ui.VirtualList(that.ul, listOptions);\n\t }\n\n\t that.listView.bind(\"listBound\", proxy(that._listBound, that));\n\t that._setListValue();\n\t },\n\n\t _setListValue: function(value) {\n\t value = value || this.options.value;\n\n\t if (value !== undefined) {\n\t this.listView.value(value)\n\t .done(proxy(this._updateSelectionState, this));\n\t }\n\t },\n\n\t _updateSelectionState: $.noop,\n\n\t _listMousedown: function(e) {\n\t if (!this.filterInput || this.filterInput[0] !== e.target) {\n\t e.preventDefault();\n\t }\n\t },\n\n\t _isFilterEnabled: function() {\n\t var filter = this.options.filter;\n\t return filter && filter !== \"none\";\n\t },\n\n\t _hideClear: function() {\n\t var list = this;\n\n\t if (list._clear) {\n\t list._clear.addClass(HIDDENCLASS);\n\t }\n\t },\n\n\t _showClear: function() {\n\t if (this._clear) {\n\t this._clear.removeClass(HIDDENCLASS);\n\t }\n\t },\n\n\t _clearValue: function() {\n\t this._clearText();\n\t this._accessor(\"\");\n\t this.listView.value([]);\n\n\t if (this._isSelect) {\n\t this._customOption = undefined;\n\t }\n\n\t if (this._isFilterEnabled() && !this.options.enforceMinLength) {\n\t this._filter({word: \"\", open: false});\n\n\t if (this.options.highlightFirst) {\n\t this.listView.focus(0);\n\t }\n\t }\n\t this._change();\n\t },\n\n\t _clearText: function() {\n\t this.text(\"\");\n\t },\n\n\t _clearFilter: function() {\n\t if (!this.options.virtual) {\n\t this.listView.bound(false);\n\t }\n\n\t this._filterSource();\n\t },\n\n\t _filterSource: function(filter, force) {\n\t var that = this;\n\t var options = that.options;\n\t var isMultiColumnFiltering = options.filterFields && filter && filter.logic && filter.filters && filter.filters.length;\n\t var dataSource = that.dataSource;\n\t var expression = extend({}, dataSource.filter() || {});\n\t var resetPageSettings = filter || (expression.filters && expression.filters.length && !filter);\n\n\t var removed = removeFiltersForField(expression, options.dataTextField);\n\n\t this._clearFilterExpressions(expression);\n\n\t if ((filter || removed) && that.trigger(\"filtering\", { filter: filter })) {\n\t return;\n\t }\n\n\t var newExpression = {\n\t filters: [],\n\t logic: \"and\"\n\t };\n\n\t if (isMultiColumnFiltering) {\n\t newExpression.filters.push(filter);\n\t } else {\n\t this._pushFilterExpression(newExpression, filter);\n\t }\n\n\t if (isValidFilterExpr(expression)) {\n\t if (newExpression.logic === expression.logic) {\n\t newExpression.filters = newExpression.filters.concat(expression.filters);\n\t } else {\n\t newExpression.filters.push(expression);\n\t }\n\t }\n\n\t if (that._cascading) {\n\t this.listView.setDSFilter(newExpression);\n\t }\n\n\t var dataSourceState = extend({}, {\n\t page: resetPageSettings ? 1 : dataSource.page(),\n\t pageSize: resetPageSettings ? dataSource.options.pageSize : dataSource.pageSize(),\n\t sort: dataSource.sort(),\n\t filter: dataSource.filter(),\n\t group: dataSource.group(),\n\t aggregate: dataSource.aggregate()\n\t }, { filter: newExpression });\n\n\t return dataSource[force ? \"read\" : \"query\"](dataSource._mergeState(dataSourceState));\n\t },\n\n\t _pushFilterExpression: function (newExpression, filter) {\n\t if (isValidFilterExpr(filter) && filter.value !== \"\") {\n\t newExpression.filters.push(filter);\n\t }\n\t },\n\n\t _clearFilterExpressions: function (expression) {\n\t if (!expression.filters) {\n\t return;\n\t }\n\n\t var filtersToRemove;\n\n\t for(var i = 0; i < expression.filters.length; i++) {\n\t if (\"fromFilter\" in expression.filters[i]) {\n\t filtersToRemove = i;\n\t }\n\t }\n\n\t if (!isNaN(filtersToRemove)){\n\t expression.filters.splice(filtersToRemove, 1);\n\t }\n\t },\n\n\t _angularElement: function(element, action) {\n\t if (!element) {\n\t return;\n\t }\n\n\t this.angular(action, function() {\n\t return { elements: element };\n\t });\n\t },\n\n\t _renderNoData: function() {\n\t var list = this;\n\t var noData = list.noData;\n\n\t if (!noData) {\n\t return;\n\t }\n\n\t this._angularElement(noData, \"cleanup\");\n\t noData.children(\":first\").html(list.noDataTemplate({ instance: list }));\n\t this._angularElement(noData, \"compile\");\n\t },\n\n\t _toggleNoData: function(show) {\n\t $(this.noData).toggle(show);\n\t },\n\n\t _toggleHeader: function(show) {\n\t var groupHeader = this.listView.content.prev(GROUPHEADER);\n\t groupHeader.toggle(show);\n\t },\n\n\t _renderFooter: function() {\n\t var list = this;\n\t var footer = list.footer;\n\n\t if (!footer) {\n\t return;\n\t }\n\n\t this._angularElement(footer, \"cleanup\");\n\t footer.html(list.footerTemplate({ instance: list }));\n\t this._angularElement(footer, \"compile\");\n\t },\n\n\t _allowOpening: function() {\n\t return this.options.noDataTemplate || this.dataSource.flatView().length;\n\t },\n\n\t _initValue: function() {\n\t var that = this,\n\t value = that.options.value;\n\n\t if (value !== null) {\n\t that.element.val(value);\n\t } else {\n\t value = that._accessor();\n\t that.options.value = value;\n\t }\n\n\t that._old = value;\n\t },\n\n\t _ignoreCase: function() {\n\t var that = this,\n\t model = that.dataSource.reader.model,\n\t field;\n\n\t if (model && model.fields) {\n\t field = model.fields[that.options.dataTextField];\n\n\t if (field && field.type && field.type !== \"string\") {\n\t that.options.ignoreCase = false;\n\t }\n\t }\n\t },\n\n\t _focus: function(candidate) {\n\t return this.listView.focus(candidate);\n\t },\n\n\t _filter: function(options) {\n\t var that = this;\n\t var widgetOptions = that.options;\n\t var word = options.word;\n\t var filterFields = widgetOptions.filterFields;\n\t var field = widgetOptions.dataTextField;\n\t var expression;\n\n\t if (filterFields && filterFields.length) {\n\t expression = {\n\t logic: \"or\",\n\t filters: [],\n\t fromFilter: true\n\t };\n\t for(var i = 0; i < filterFields.length; i++) {\n\t this._pushFilterExpression(expression, that._buildExpression(word, filterFields[i]));\n\t }\n\t } else {\n\t expression = that._buildExpression(word, field);\n\t }\n\n\t that._open = options.open;\n\t that._filterSource(expression);\n\t },\n\n\t _buildExpression: function(value, field) {\n\t var that = this;\n\t var widgetOptions = that.options;\n\t var ignoreCase = widgetOptions.ignoreCase;\n\t var accentFoldingFiltering = that.dataSource.options.accentFoldingFiltering;\n\n\t return {\n\t value: ignoreCase ? (accentFoldingFiltering ? value.toLocaleLowerCase(accentFoldingFiltering) : value.toLowerCase()) : value,\n\t field: field,\n\t operator: widgetOptions.filter,\n\t ignoreCase: ignoreCase\n\t };\n\t },\n\n\t _clearButton: function() {\n\t var list = this;\n\t var clearTitle = list.options.messages.clear;\n\n\t if (!list._clear){\n\t list._clear = $('').attr({\n\t \"role\": \"button\",\n\t \"tabIndex\": -1\n\t });\n\t }\n\n\t if (!list.options.clearButton) {\n\t list._clear.remove();\n\t }\n\t this._hideClear();\n\t },\n\n\t search: function(word) {\n\t var options = this.options;\n\n\t word = typeof word === \"string\" ? word : this._inputValue();\n\n\t clearTimeout(this._typingTimeout);\n\n\t if ((!options.enforceMinLength && !word.length) || word.length >= options.minLength) {\n\t this._state = \"filter\";\n\t if (this.listView){\n\t this.listView._emptySearch = !kendo.trim(word).length;\n\t }\n\n\t if (!this._isFilterEnabled()) {\n\t this._searchByWord(word);\n\t } else {\n\t this._filter({word: word, open: true});\n\t }\n\t }\n\t },\n\n\t current: function(candidate) {\n\t return this._focus(candidate);\n\t },\n\n\t items: function() {\n\t return this.ul[0].children;\n\t },\n\n\t destroy: function() {\n\t var that = this;\n\t var ns = that.ns;\n\n\t Widget.fn.destroy.call(that);\n\n\t that._unbindDataSource();\n\n\t that.listView.destroy();\n\t that.list.off(ns);\n\n\t that.popup.destroy();\n\n\t if (that._form) {\n\t that._form.off(\"reset\", that._resetHandler);\n\t }\n\t },\n\n\t dataItem: function(index) {\n\t var that = this;\n\n\t if (index === undefined) {\n\t return that.listView.selectedDataItems()[0];\n\t }\n\n\t if (typeof index !== \"number\") {\n\t if (that.options.virtual) {\n\t return that.dataSource.getByUid($(index).data(\"uid\"));\n\t }\n\n\t index = $(that.items()).index(index);\n\t }\n\n\t return that.dataSource.flatView()[index];\n\t },\n\n\t _activateItem: function() {\n\t var current = this.listView.focus();\n\t if (current) {\n\t this._focused.add(this.filterInput).attr(\"aria-activedescendant\", current.attr(\"id\"));\n\t }\n\t },\n\n\t _deactivateItem: function() {\n\t this._focused.add(this.filterInput).removeAttr(\"aria-activedescendant\");\n\t },\n\n\t _accessors: function() {\n\t var that = this;\n\t var element = that.element;\n\t var options = that.options;\n\t var getter = kendo.getter;\n\t var textField = element.attr(kendo.attr(\"text-field\"));\n\t var valueField = element.attr(kendo.attr(\"value-field\"));\n\n\t if (!options.dataTextField && textField) {\n\t options.dataTextField = textField;\n\t }\n\n\t if (!options.dataValueField && valueField) {\n\t options.dataValueField = valueField;\n\t }\n\n\t that._text = getter(options.dataTextField);\n\t that._value = getter(options.dataValueField);\n\t },\n\n\t _aria: function(id) {\n\t var that = this,\n\t options = that.options,\n\t element = that._focused.add(that.filterInput);\n\n\t if (options.suggest !== undefined) {\n\t element.attr(\"aria-autocomplete\", options.suggest ? \"both\" : \"list\");\n\t }\n\n\t id = id ? id + \" \" + that.ul[0].id : that.ul[0].id;\n\n\t element.attr(\"aria-owns\", id);\n\n\t that.ul.attr(\"aria-live\", !that._isFilterEnabled() ? \"off\" : \"polite\");\n\n\t that._ariaLabel();\n\t },\n\n\t _ariaLabel: function(){\n\t var that = this;\n\t var focusedElm = that._focused;\n\t var inputElm = that.element;\n\t var inputId = inputElm.attr(\"id\");\n\t var labelElm = $(\"label[for=\\\"\" + inputId + \"\\\"]\");\n\t var ariaLabel = inputElm.attr(\"aria-label\");\n\t var ariaLabelledBy = inputElm.attr(\"aria-labelledby\");\n\n\t if (focusedElm === inputElm) {\n\t return;\n\t }\n\n\t if (ariaLabel) {\n\t focusedElm.attr(\"aria-label\", ariaLabel);\n\t } else if (ariaLabelledBy){\n\t focusedElm.attr(\"aria-labelledby\", ariaLabelledBy);\n\t } else if (labelElm.length){\n\t var labelId = labelElm.attr(\"id\") || that._generateLabelId(labelElm, inputId || kendo.guid());\n\t focusedElm.attr(\"aria-labelledby\", labelId);\n\t }\n\t },\n\n\t _generateLabelId: function(label, inputId){\n\t var labelId = inputId + LABELIDPART;\n\t label.attr(\"id\", labelId);\n\n\t return labelId;\n\t },\n\n\t _blur: function() {\n\t var that = this;\n\n\t that._change();\n\t that.close();\n\t that._userTriggered = false;\n\t },\n\n\t _change: function() {\n\t var that = this;\n\t var index = that.selectedIndex;\n\t var optionValue = that.options.value;\n\t var value = that.value();\n\t var trigger;\n\n\t if (that._isSelect && !that.listView.bound() && optionValue) {\n\t value = optionValue;\n\t }\n\n\t if (value !== unifyType(that._old, typeof value) &&\n\t value !== unifyType(that._oldText, typeof value)) { // _oldText should be compared for ComboBox when arbitrary text is added https://github.com/telerik/kendo-ui-core/issues/4496\n\t trigger = true;\n\t } else if (that._valueBeforeCascade !== undefined && that._valueBeforeCascade !== unifyType(that._old, typeof that._valueBeforeCascade) && that._userTriggered) {\n\t trigger = true;\n\t } else if (index !== undefined && index !== that._oldIndex && !that.listView.isFiltered()) {\n\t trigger = true;\n\t }\n\n\t if (trigger) {\n\n\t if (that._old === null || that._old === \"\" || value === \"\") {\n\t that._valueBeforeCascade = that._old = value;\n\t } else {\n\t if (that.dataItem()) {\n\t that._valueBeforeCascade = that._old = that.options.dataValueField ? that.dataItem()[that.options.dataValueField] : that.dataItem();\n\t } else {\n\t that._valueBeforeCascade = that._old = null;\n\t }\n\t }\n\t that._oldIndex = index;\n\t // _oldText should be compared for ComboBox when arbitrary text is added https://github.com/telerik/kendo-ui-core/issues/4496\n\t that._oldText = that.text && that.text();\n\n\t if (!that._typing) {\n\t // trigger the DOM change event so any subscriber gets notified\n\t that.element.trigger(CHANGE);\n\t }\n\n\t that.trigger(CHANGE);\n\t }\n\n\t that.typing = false;\n\t },\n\n\t _data: function() {\n\t return this.dataSource.view();\n\t },\n\n\t _enable: function() {\n\t var that = this,\n\t options = that.options,\n\t disabled = that.element.is(\"[disabled]\");\n\n\t if (options.enable !== undefined) {\n\t options.enabled = options.enable;\n\t }\n\n\t if (!options.enabled || disabled) {\n\t that.enable(false);\n\t } else {\n\t that.readonly(that.element.is(\"[readonly]\"));\n\t }\n\t },\n\n\t _dataValue: function(dataItem) {\n\t var value = this._value(dataItem);\n\n\t if (value === undefined) {\n\t value = this._text(dataItem);\n\t }\n\n\t return value;\n\t },\n\n\t _offsetHeight: function() {\n\t var offsetHeight = 0;\n\t var siblings = this.listView.content.prevAll(\":visible\");\n\n\t siblings.each(function() {\n\t var element = $(this);\n\n\t offsetHeight += outerHeight(element, true);\n\t });\n\n\t return offsetHeight;\n\t },\n\n\t _height: function(length) {\n\t var that = this;\n\t var list = that.list;\n\t var height = that.options.height;\n\t var visible = that.popup.visible();\n\t var offsetTop;\n\t var popups;\n\t var footerHeight;\n\n\t if (length || that.options.noDataTemplate) {\n\t popups = list.add(list.parent(\".k-animation-container\")).show();\n\n\t if (!list.is(\":visible\")) {\n\t popups.hide();\n\t return;\n\t }\n\n\t height = that.listView.content[0].scrollHeight > height ? height : \"auto\";\n\n\t popups.height(height);\n\n\t if (height !== \"auto\") {\n\t offsetTop = that._offsetHeight();\n\t footerHeight = outerHeight($(that.footer)) || 0;\n\t height = height - offsetTop - footerHeight;\n\t }\n\n\t that.listView.content.height(height);\n\n\t if (!visible) {\n\t popups.hide();\n\t }\n\t }\n\n\t return height;\n\t },\n\n\t _openHandler: function(e) {\n\t this._adjustListWidth();\n\n\t if (this.trigger(OPEN)) {\n\t e.preventDefault();\n\t } else {\n\t this._focused.attr(\"aria-expanded\", true);\n\t this.ul.attr(\"aria-hidden\", false);\n\t }\n\t },\n\n\t _adjustListWidth: function() {\n\t var that = this,\n\t list = that.list,\n\t width = list[0].style.width,\n\t wrapper = that.wrapper,\n\t computedStyle, computedWidth;\n\n\t if (!list.data(WIDTH) && width) {\n\t return;\n\t }\n\n\t computedStyle = window.getComputedStyle ? window.getComputedStyle(wrapper[0], null) : 0;\n\t computedWidth = parseFloat(computedStyle && computedStyle.width) || outerWidth(wrapper);\n\n\t if (computedStyle && browser.msie) { // getComputedStyle returns different box in IE.\n\t computedWidth += parseFloat(computedStyle.paddingLeft) + parseFloat(computedStyle.paddingRight) + parseFloat(computedStyle.borderLeftWidth) + parseFloat(computedStyle.borderRightWidth);\n\t }\n\n\t if (list.css(\"box-sizing\") !== \"border-box\") {\n\t width = computedWidth - (outerWidth(list) - list.width());\n\t } else {\n\t width = computedWidth;\n\t }\n\n\t list.css({\n\t fontFamily: wrapper.css(\"font-family\"),\n\t width: that.options.autoWidth ? \"auto\" : width,\n\t minWidth: width,\n\t whiteSpace: that.options.autoWidth ? \"nowrap\" : \"normal\"\n\t })\n\t .data(WIDTH, width);\n\n\t return true;\n\t },\n\n\t _closeHandler: function(e) {\n\t if (this.trigger(CLOSE)) {\n\t e.preventDefault();\n\t } else {\n\t this._focused.attr(\"aria-expanded\", false);\n\t this.ul.attr(\"aria-hidden\", true);\n\t }\n\t },\n\n\t _focusItem: function() {\n\t var listView = this.listView;\n\t var noFocusedItem = !listView.focus();\n\t var index = last(listView.select());\n\n\t if (index === undefined && this.options.highlightFirst && noFocusedItem) {\n\t index = 0;\n\t }\n\n\t if (index !== undefined) {\n\t listView.focus(index);\n\t } else if (noFocusedItem) {\n\t listView.scrollToIndex(0);\n\t }\n\t },\n\n\t _calculateGroupPadding: function(height) {\n\t var li = this.ul.children(\".k-first:first\");\n\t var groupHeader = this.listView.content.prev(GROUPHEADER);\n\t var padding = 0;\n\t var direction = 'right';\n\n\t if (groupHeader[0] && groupHeader[0].style.display !== \"none\") {\n\t if (height !== \"auto\") {\n\t padding = kendo.support.scrollbar();\n\t }\n\n\t if(this.element.parents('.k-rtl').length) {\n\t direction = 'left';\n\t }\n\n\t padding += parseFloat(li.css(\"border-\" + direction + \"-width\"), 10) + parseFloat(li.children(\".k-group\").css(\"padding-\" + direction), 10);\n\t groupHeader.css(\"padding-\" + direction, padding);\n\t }\n\t },\n\n\t _calculatePopupHeight: function(force) {\n\t var height = this._height(this.dataSource.flatView().length || force);\n\t this._calculateGroupPadding(height);\n\t this._calculateColumnsHeaderPadding(height);\n\t },\n\n\t _calculateColumnsHeaderPadding: function(height){\n\t if (this.options.columns && this.options.columns.length) {\n\t var list = this;\n\t var isRtl = support.isRtl(list.wrapper);\n\t var scrollbar = kendo.support.scrollbar();\n\n\t list.columnsHeader.css((isRtl ? \"padding-left\" : \"padding-right\"), height !== \"auto\" ? scrollbar : 0);\n\t }\n\t },\n\n\t _refreshScroll: function () {\n\t var listView = this.listView;\n\t var enableYScroll = listView.element.height() > listView.content.height();\n\n\t if (this.options.autoWidth) {\n\t listView.content.css({\n\t overflowX: \"hidden\",\n\t overflowY: enableYScroll ? \"scroll\" : \"auto\"\n\t });\n\t }\n\t },\n\n\t _resizePopup: function(force) {\n\t if (this.options.virtual) {\n\t return;\n\t }\n\n\t if (!this.popup.element.is(\":visible\")) {\n\t this.popup.one(\"open\", (function(force) {\n\t return proxy(function() {\n\t this._calculatePopupHeight(force);\n\t }, this);\n\t }).call(this, force));\n\n\t this.popup.one(\"activate\", proxy(this._refreshScroll, this));\n\t } else {\n\t this._calculatePopupHeight(force);\n\t }\n\t },\n\n\t _popup: function() {\n\t var list = this;\n\n\t list.popup = new ui.Popup(list.list, extend({}, list.options.popup, {\n\t anchor: list.wrapper,\n\t open: proxy(list._openHandler, list),\n\t close: proxy(list._closeHandler, list),\n\t animation: list.options.animation,\n\t isRtl: support.isRtl(list.wrapper),\n\t autosize :list.options.autoWidth\n\t }));\n\t },\n\n\t _makeUnselectable: function() {\n\t if (isIE8) {\n\t this.list.find(\"*\").not(\".k-textbox\").attr(\"unselectable\", \"on\");\n\t }\n\t },\n\n\t _toggleHover: function(e) {\n\t $(e.currentTarget).toggleClass(HOVER, e.type === \"mouseenter\");\n\t },\n\n\t _toggle: function(open, preventFocus) {\n\t var that = this;\n\t var touchEnabled = support.mobileOS && (support.touch || support.MSPointers || support.pointers);\n\n\t open = open !== undefined? open : !that.popup.visible();\n\n\t if (!preventFocus && !touchEnabled && that._focused[0] !== activeElement()) {\n\t that._prevent = true;\n\t that._focused.focus();\n\t that._prevent = false;\n\t }\n\n\t that[open ? OPEN : CLOSE]();\n\t },\n\n\t _triggerCascade: function() {\n\t var that = this;\n\n\t if (!that._cascadeTriggered || that.value() !== unifyType(that._cascadedValue, typeof that.value())) {\n\t that._cascadedValue = that.value();\n\t that._cascadeTriggered = true;\n\t that.trigger(CASCADE, { userTriggered: that._userTriggered });\n\t }\n\t },\n\n\t _triggerChange: function() {\n\t if (this._valueBeforeCascade !== this.value()) {\n\t this.trigger(CHANGE);\n\t }\n\t },\n\n\t _unbindDataSource: function() {\n\t var that = this;\n\n\t that.dataSource.unbind(REQUESTSTART, that._requestStartHandler)\n\t .unbind(REQUESTEND, that._requestEndHandler)\n\t .unbind(\"error\", that._errorHandler);\n\t },\n\n\t requireValueMapper: function(options, value) {\n\t var hasValue = (options.value instanceof Array ? options.value.length : options.value) || (value instanceof Array ? value.length : value);\n\t if (hasValue && options.virtual && typeof options.virtual.valueMapper !== \"function\") {\n\t throw new Error(\"ValueMapper is not provided while the value is being set. See http://docs.telerik.com/kendo-ui/controls/editors/combobox/virtualization#the-valuemapper-function\");\n\t }\n\t }\n\t });\n\n\t function unifyType(value, type) {\n\t if (value !== undefined && value !== \"\" && value !== null) {\n\t if (type === \"boolean\") {\n\t if (typeof value !== \"boolean\") {\n\t value = value.toLowerCase() === \"true\";\n\t }\n\t value = Boolean(value);\n\t } else if (type === \"number\") {\n\t value = Number(value);\n\t } else if (type === \"string\") {\n\t value = value.toString();\n\t }\n\t }\n\n\t return value;\n\t }\n\n\t extend(List, {\n\t inArray: function(node, parentNode) {\n\t var idx, length, siblings = parentNode.children;\n\n\t if (!node || node.parentNode !== parentNode) {\n\t return -1;\n\t }\n\n\t for (idx = 0, length = siblings.length; idx < length; idx++) {\n\t if (node === siblings[idx]) {\n\t return idx;\n\t }\n\t }\n\n\t return -1;\n\t },\n\t unifyType: unifyType\n\t });\n\n\t kendo.ui.List = List;\n\n\t ui.Select = List.extend({\n\t init: function(element, options) {\n\t List.fn.init.call(this, element, options);\n\t this._initial = this.element.val();\n\t },\n\n\t setDataSource: function(dataSource) {\n\t var that = this;\n\t var parent;\n\n\t that.options.dataSource = dataSource;\n\n\t that._dataSource();\n\n\t if (that.listView.bound()) {\n\t that._initialIndex = null;\n\t that.listView._current = null;\n\t }\n\n\t that.listView.setDataSource(that.dataSource);\n\n\t if (that.options.autoBind) {\n\t that.dataSource.fetch();\n\t }\n\n\t parent = that._parentWidget();\n\n\t if (parent) {\n\t that._cascadeSelect(parent);\n\t }\n\t },\n\n\t close: function() {\n\t this.popup.close();\n\t },\n\n\t select: function(candidate) {\n\t var that = this;\n\n\t if (candidate === undefined) {\n\t return that.selectedIndex;\n\t } else {\n\t return that._select(candidate).done(function() {\n\t that._cascadeValue = that._old = that._accessor();\n\t that._oldIndex = that.selectedIndex;\n\t });\n\t }\n\t },\n\n\t _accessor: function(value, idx) {\n\t return this[this._isSelect ? \"_accessorSelect\" : \"_accessorInput\"](value, idx);\n\t },\n\n\t _accessorInput: function(value) {\n\t var element = this.element[0];\n\n\t if (value === undefined) {\n\t return element.value;\n\t } else {\n\t if (value === null) {\n\t value = \"\";\n\t }\n\t element.value = value;\n\t }\n\t },\n\n\t _accessorSelect: function(value, idx) {\n\t var element = this.element[0];\n\t var hasValue;\n\n\t if (value === undefined) {\n\t return getSelectedOption(element).value || \"\";\n\t }\n\n\t getSelectedOption(element).selected = false;\n\n\t if (idx === undefined) {\n\t idx = -1;\n\t }\n\n\t hasValue = (value !== null && value !== \"\");\n\n\t if (hasValue && idx == -1) {\n\t this._custom(value);\n\t } else {\n\t if (value) {\n\t element.value = value;\n\t } else {\n\t element.selectedIndex = idx;\n\t }\n\t }\n\t },\n\n\t _syncValueAndText: function () {\n\t return true;\n\t },\n\n\t _custom: function(value) {\n\t var that = this;\n\t var element = that.element;\n\t var custom = that._customOption;\n\n\t if (!custom) {\n\t custom = $(\"\";\n\t options += option;\n\t }\n\n\t element.html(options);\n\n\t if (value !== undefined) {\n\t htmlElement.value = value;\n\t if (htmlElement.value && !value) {\n\t htmlElement.selectedIndex = -1;\n\t }\n\t }\n\n\t if (htmlElement.selectedIndex !== -1) {\n\t option = getSelectedOption(htmlElement);\n\n\t if (option) {\n\t option.setAttribute(SELECTED, SELECTED);\n\t }\n\t }\n\t },\n\n\t _reset: function() {\n\t var that = this,\n\t element = that.element,\n\t formId = element.attr(\"form\"),\n\t form = formId ? $(\"#\" + formId) : element.closest(\"form\");\n\n\t if (form[0]) {\n\t that._resetHandler = function() {\n\t setTimeout(function() {\n\t that.value(that._initial);\n\t });\n\t };\n\n\t that._form = form.on(\"reset\", that._resetHandler);\n\t }\n\t },\n\n\t _parentWidget: function() {\n\t var name = this.options.name;\n\n\t if (!this.options.cascadeFrom) {\n\t return;\n\t }\n\n\t var parentElement = $(\"#\" + this.options.cascadeFrom);\n\t var parent = parentElement.data(\"kendo\" + name);\n\n\t if (!parent) {\n\t for(var i = 0; i < alternativeNames[name].length; i+=1) {\n\t parent = parentElement.data(\"kendo\" + alternativeNames[name][i]);\n\n\t if (!!parent) {\n\t break;\n\t }\n\t }\n\t }\n\n\t return parent;\n\t },\n\n\t _cascade: function() {\n\t var that = this;\n\t var options = that.options;\n\t var cascade = options.cascadeFrom;\n\t var parent;\n\n\t if (cascade) {\n\t parent = that._parentWidget();\n\n\t if (!parent) {\n\t return;\n\t }\n\n\t that._cascadeHandlerProxy = proxy(that._cascadeHandler, that);\n\t that._cascadeFilterRequests = [];\n\n\t options.autoBind = false;\n\n\t parent.bind(\"set\", function() { //will cascade\n\t that.one(\"set\", function(e) { //get your value\n\t that._selectedValue = e.value || that._accessor();\n\t });\n\t });\n\n\t parent.first(CASCADE, that._cascadeHandlerProxy);\n\n\t //refresh was called\n\t if (parent.listView.bound()) {\n\t that._toggleCascadeOnFocus();\n\t that._cascadeSelect(parent);\n\t } else {\n\t parent.one(\"dataBound\", function() {\n\t that._toggleCascadeOnFocus();\n\t if (parent.popup.visible()) {\n\t parent._focused.focus();\n\t }\n\t });\n\n\t if (!parent.value()) {\n\t that.enable(false);\n\t }\n\t }\n\t }\n\t },\n\n\t _toggleCascadeOnFocus: function() {\n\t var that = this;\n\t var parent = that._parentWidget();\n\t var focusout = isIE && parent instanceof ui.DropDownList ? BLUR : FOCUSOUT;\n\n\t parent._focused.add(parent.filterInput).bind(FOCUS, function() {\n\t parent.unbind(CASCADE, that._cascadeHandlerProxy);\n\t parent.first(CHANGE, that._cascadeHandlerProxy);\n\t });\n\n\t parent._focused.add(parent.filterInput).bind(focusout, function() {\n\t parent.unbind(CHANGE, that._cascadeHandlerProxy);\n\t parent.first(CASCADE, that._cascadeHandlerProxy);\n\t });\n\t },\n\n\t _cascadeHandler: function(e) {\n\t var parent = this._parentWidget();\n\t var valueBeforeCascade = this.value();\n\n\t this._userTriggered = e.userTriggered || parent._userTriggered;\n\n\t if (this.listView.bound()) {\n\t this._clearSelection(parent, true);\n\t }\n\n\t this._cascadeSelect(parent, valueBeforeCascade);\n\t },\n\n\t _cascadeChange: function(parent) {\n\t var that = this;\n\t var value = that._accessor() || that._selectedValue;\n\n\t if (!that._cascadeFilterRequests.length) {\n\t that._selectedValue = null;\n\t }\n\n\t if (that._userTriggered) {\n\t that._clearSelection(parent, true);\n\t } else if (value) {\n\t if (value !== unifyType(that.listView.value()[0], typeof value)) {\n\t that.value(value);\n\t }\n\n\t if (!that.dataSource.view()[0] || that.selectedIndex === -1) {\n\t that._clearSelection(parent, true);\n\t }\n\t } else if (that.dataSource.flatView().length) {\n\t that.select(that.options.index);\n\t }\n\n\t that.enable();\n\t that._triggerCascade();\n\t that._triggerChange();\n\t that._userTriggered = false;\n\t },\n\n\t _cascadeSelect: function(parent, valueBeforeCascade) {\n\t var that = this;\n\t var dataItem = parent.dataItem();\n\t var filterValue = dataItem ? dataItem[that.options.cascadeFromParentField] || parent._value(dataItem) : null;\n\t var valueField = that.options.cascadeFromField || parent.options.dataValueField;\n\t var expressions;\n\n\t that._valueBeforeCascade = valueBeforeCascade !== undefined ? valueBeforeCascade : that.value();\n\n\t if (filterValue || filterValue === 0) {\n\t expressions = that.dataSource.filter() || {};\n\t removeFiltersForField(expressions, valueField);\n\n\t var handler = function () {\n\t var currentHandler = that._cascadeFilterRequests.shift();\n\t if (currentHandler) {\n\t that.unbind('dataBound', currentHandler);\n\t }\n\n\t currentHandler = that._cascadeFilterRequests[0];\n\t if (currentHandler) {\n\t that.first('dataBound', currentHandler);\n\t }\n\n\t that._cascadeChange(parent);\n\t };\n\n\t that._cascadeFilterRequests.push(handler);\n\n\t if (that._cascadeFilterRequests.length === 1) {\n\t that.first('dataBound', handler);\n\t }\n\n\t that._cascading = true;\n\t that._filterSource({\n\t field: valueField,\n\t operator: \"eq\",\n\t value: filterValue\n\t });\n\t that._cascading = false;\n\t } else {\n\t that.enable(false);\n\t that._clearSelection(parent);\n\t that._triggerCascade();\n\t that._triggerChange();\n\t that._userTriggered = false;\n\t }\n\t }\n\t });\n\n\t var STATIC_LIST_NS = \".StaticList\";\n\n\t var StaticList = kendo.ui.DataBoundWidget.extend({\n\t init: function(element, options) {\n\t Widget.fn.init.call(this, element, options);\n\n\t this.element.attr(\"role\", \"listbox\")\n\t .on(\"click\" + STATIC_LIST_NS, \"li\", proxy(this._click, this))\n\t .on(\"mouseenter\" + STATIC_LIST_NS, \"li\", function() { $(this).addClass(HOVER); })\n\t .on(\"mouseleave\" + STATIC_LIST_NS, \"li\", function() { $(this).removeClass(HOVER); });\n\n\t if (support.touch) {\n\t this._touchHandlers();\n\t }\n\n\t if (this.options.selectable === \"multiple\") {\n\t this.element.attr(\"aria-multiselectable\", true);\n\t }\n\n\t this.content = this.element.wrap(\"
        \").parent();\n\t this.header = this.content.before('
        ').prev();\n\n\t this.bound(false);\n\n\t this._optionID = kendo.guid();\n\n\t this._selectedIndices = [];\n\n\t this._view = [];\n\t this._dataItems = [];\n\t this._values = [];\n\n\t var value = this.options.value;\n\n\t if (value) {\n\t this._values = $.isArray(value) ? value.slice(0) : [value];\n\t }\n\n\t this._getter();\n\t this._templates();\n\n\t this.setDataSource(this.options.dataSource);\n\n\t this._onScroll = proxy(function() {\n\t var that = this;\n\t clearTimeout(that._scrollId);\n\n\t that._scrollId = setTimeout(function() {\n\t that._renderHeader();\n\t }, 50);\n\t }, this);\n\t },\n\n\t options: {\n\t name: \"StaticList\",\n\t dataValueField: null,\n\t valuePrimitive: false,\n\t selectable: true,\n\t template: null,\n\t groupTemplate: null,\n\t fixedGroupTemplate: null\n\t },\n\n\t events: [\n\t \"click\",\n\t CHANGE,\n\t \"activate\",\n\t \"deactivate\",\n\t \"dataBinding\",\n\t \"dataBound\",\n\t \"selectedItemChange\"\n\t ],\n\n\t setDataSource: function(source) {\n\t var that = this;\n\t var dataSource = source || {};\n\t var value;\n\n\t dataSource = $.isArray(dataSource) ? { data: dataSource } : dataSource;\n\t dataSource = kendo.data.DataSource.create(dataSource);\n\n\t if (that.dataSource) {\n\t that.dataSource.unbind(CHANGE, that._refreshHandler);\n\n\t value = that.value();\n\n\t that.value([]);\n\t that.bound(false);\n\n\t that.value(value);\n\t } else {\n\t that._refreshHandler = proxy(that.refresh, that);\n\t }\n\n\t that.setDSFilter(dataSource.filter());\n\n\t that.dataSource = dataSource.bind(CHANGE, that._refreshHandler);\n\t that._fixedHeader();\n\t },\n\n\t _touchHandlers: function () {\n\t var that = this;\n\t var startY;\n\t var endY;\n\t var tapPosition = function (event) {\n\t return (event.originalEvent || event).changedTouches[0].pageY;\n\t };\n\n\t that.element.on(\"touchstart\" + STATIC_LIST_NS, function (e) {\n\t startY = tapPosition(e);\n\t });\n\n\t that.element.on(\"touchend\" + STATIC_LIST_NS, function (e) {\n\t if (e.isDefaultPrevented()) {\n\t return;\n\t }\n\n\t endY = tapPosition(e);\n\n\t if (Math.abs(endY - startY) < 10) {\n\t that._touchTriggered = true;\n\t that._triggerClick($(e.target).closest(ITEMSELECTOR).get(0));\n\t }\n\t });\n\t },\n\n\t skip: function() {\n\t return this.dataSource.skip();\n\t },\n\n\t setOptions: function(options) {\n\t Widget.fn.setOptions.call(this, options);\n\n\t this._getter();\n\t this._templates();\n\t this._render();\n\t },\n\n\t destroy: function() {\n\t this.element.off(STATIC_LIST_NS);\n\n\t if (this._refreshHandler) {\n\t this.dataSource.unbind(CHANGE, this._refreshHandler);\n\t }\n\n\t clearTimeout(this._scrollId);\n\n\t Widget.fn.destroy.call(this);\n\t },\n\n\t dataItemByIndex: function(index) {\n\t return this.dataSource.flatView()[index];\n\t },\n\n\t screenHeight: function() {\n\t return this.content[0].clientHeight;\n\t },\n\n\t scrollToIndex: function(index) {\n\t var item = this.element[0].children[index];\n\n\t if (item) {\n\t this.scroll(item);\n\t }\n\t },\n\n\t scrollWith: function(value) {\n\t this.content.scrollTop(this.content.scrollTop() + value);\n\t },\n\n\t scroll: function (item) {\n\t if (!item) {\n\t return;\n\t }\n\n\t if (item[0]) {\n\t item = item[0];\n\t }\n\n\t var content = this.content[0],\n\t itemOffsetTop = item.offsetTop,\n\t itemOffsetHeight = item.offsetHeight,\n\t contentScrollTop = content.scrollTop,\n\t contentOffsetHeight = content.clientHeight,\n\t bottomDistance = itemOffsetTop + itemOffsetHeight;\n\n\t if (contentScrollTop > itemOffsetTop) {\n\t contentScrollTop = itemOffsetTop;\n\t } else if (bottomDistance > (contentScrollTop + contentOffsetHeight)) {\n\t contentScrollTop = (bottomDistance - contentOffsetHeight);\n\t }\n\n\t content.scrollTop = contentScrollTop;\n\t },\n\n\t selectedDataItems: function(dataItems) {\n\t if (dataItems === undefined) {\n\t return this._dataItems.slice();\n\t }\n\n\t this._dataItems = dataItems;\n\t this._values = this._getValues(dataItems);\n\t },\n\n\t _getValues: function(dataItems) {\n\t var getter = this._valueGetter;\n\n\t return $.map(dataItems, function(dataItem) {\n\t return getter(dataItem);\n\t });\n\t },\n\n\t focusNext: function() {\n\t var current = this.focus();\n\n\t if (!current) {\n\t current = 0;\n\t } else {\n\t current = current.next();\n\t }\n\n\t this.focus(current);\n\t },\n\n\t focusPrev: function() {\n\t var current = this.focus();\n\n\t if (!current) {\n\t current = this.element[0].children.length - 1;\n\t } else {\n\t current = current.prev();\n\t }\n\n\t this.focus(current);\n\t },\n\n\t focusFirst: function() {\n\t this.focus(this.element[0].children[0]);\n\t },\n\n\t focusLast: function() {\n\t this.focus(last(this.element[0].children));\n\t },\n\n\t focus: function(candidate) {\n\t var that = this;\n\t var id = that._optionID;\n\t var hasCandidate;\n\n\t if (candidate === undefined) {\n\t return that._current;\n\t }\n\n\t candidate = last(that._get(candidate));\n\t candidate = $(this.element[0].children[candidate]);\n\n\t if (that._current) {\n\t that._current\n\t .removeClass(FOCUSED)\n\t .removeAttr(ID);\n\n\t that.trigger(\"deactivate\");\n\t }\n\n\t hasCandidate = !!candidate[0];\n\n\t if (hasCandidate) {\n\t candidate.addClass(FOCUSED);\n\t that.scroll(candidate);\n\n\t candidate.attr(\"id\", id);\n\t }\n\n\t that._current = hasCandidate ? candidate : null;\n\t that.trigger(\"activate\");\n\t },\n\n\t focusIndex: function() {\n\t return this.focus() ? this.focus().index() : undefined;\n\t },\n\n\t skipUpdate: function(skipUpdate) {\n\t this._skipUpdate = skipUpdate;\n\t },\n\n\t select: function(indices) {\n\t var that = this;\n\t var selectable = that.options.selectable;\n\t var singleSelection = selectable !== \"multiple\" && selectable !== false;\n\t var selectedIndices = that._selectedIndices;\n\t var uiSelectedIndices = [this.element.find(\".k-state-selected\").index()];\n\n\t var added = [];\n\t var removed = [];\n\t var result;\n\n\t if (indices === undefined) {\n\t return selectedIndices.slice();\n\t }\n\n\t indices = that._get(indices);\n\n\t if (indices.length === 1 && indices[0] === -1) {\n\t indices = [];\n\t }\n\n\t var deferred = $.Deferred().resolve();\n\t var filtered = that.isFiltered();\n\n\t if (filtered && !singleSelection && that._deselectFiltered(indices)) {\n\t return deferred;\n\t }\n\n\t if (singleSelection && !filtered &&\n\t $.inArray(last(indices), selectedIndices) !== -1 && $.inArray(last(indices), uiSelectedIndices) !== -1) {\n\n\t if (that._dataItems.length && that._view.length) {\n\t that._dataItems = [that._view[selectedIndices[0]].item];\n\t }\n\n\t return deferred;\n\t }\n\n\t result = that._deselect(indices);\n\n\t removed = result.removed;\n\t indices = result.indices;\n\n\t if (indices.length) {\n\t if (singleSelection) {\n\t indices = [last(indices)];\n\t }\n\n\t added = that._select(indices);\n\t }\n\n\t if (added.length || removed.length) {\n\t that._valueComparer = null;\n\t that.trigger(CHANGE, {\n\t added: added,\n\t removed: removed\n\t });\n\t }\n\n\t return deferred;\n\t },\n\n\t removeAt: function(position) {\n\t this._selectedIndices.splice(position, 1);\n\t this._values.splice(position, 1);\n\t this._valueComparer = null;\n\n\t return {\n\t position: position,\n\t dataItem: this._dataItems.splice(position, 1)[0]\n\t };\n\t },\n\n\t setValue: function(value) {\n\t value = $.isArray(value) || value instanceof ObservableArray ? value.slice(0) : [value];\n\n\t this._values = value;\n\n\t this._valueComparer = null;\n\t },\n\n\t value: function(value) {\n\t var that = this;\n\t var deferred = that._valueDeferred;\n\t var indices;\n\n\t if (value === undefined) {\n\t return that._values.slice();\n\t }\n\n\t that.setValue(value);\n\n\t if (!deferred || deferred.state() === \"resolved\") {\n\t that._valueDeferred = deferred = $.Deferred();\n\t }\n\n\t if (that.bound()) {\n\t indices = that._valueIndices(that._values);\n\n\t if (that.options.selectable === \"multiple\") {\n\t that.select(-1);\n\t }\n\n\t that.select(indices);\n\n\t deferred.resolve();\n\t }\n\n\t that._skipUpdate = false;\n\n\t return deferred;\n\t },\n\n\t items: function() {\n\t return this.element.children(ITEMSELECTOR);\n\t },\n\n\t _click: function(e) {\n\t if (this._touchTriggered)\n\t {\n\t this._touchTriggered = false;\n\t return;\n\t }\n\n\t if (!e.isDefaultPrevented()) {\n\t this._triggerClick(e.currentTarget);\n\t }\n\t },\n\n\t _triggerClick: function (item) {\n\t if (!this.trigger(\"click\", { item: $(item) })) {\n\t this.select(item);\n\t }\n\t },\n\n\t _valueExpr: function(type, values) {\n\t var that = this;\n\t var idx = 0;\n\n\t var body;\n\t var comparer;\n\t var normalized = [];\n\n\t if (!that._valueComparer || that._valueType !== type) {\n\t that._valueType = type;\n\n\t for (; idx < values.length; idx++) {\n\t normalized.push(unifyType(values[idx], type));\n\t }\n\n\t body = \"for (var idx = 0; idx < \" + normalized.length + \"; idx++) {\" +\n\t \" if (current === values[idx]) {\" +\n\t \" return idx;\" +\n\t \" }\" +\n\t \"} \" +\n\t \"return -1;\";\n\n\t comparer = new Function(\"current\", \"values\", body);\n\n\t that._valueComparer = function(current) {\n\t return comparer(current, normalized);\n\t };\n\t }\n\n\t return that._valueComparer;\n\t },\n\n\t _dataItemPosition: function(dataItem, values) {\n\t var value = this._valueGetter(dataItem);\n\n\t var valueExpr = this._valueExpr(typeof value, values);\n\n\t return valueExpr(value);\n\t },\n\n\t _getter: function() {\n\t this._valueGetter = kendo.getter(this.options.dataValueField);\n\t },\n\n\t _deselect: function(indices) {\n\t var that = this;\n\t var children = that.element[0].children;\n\t var selectable = that.options.selectable;\n\t var selectedIndices = that._selectedIndices;\n\t var dataItems = that._dataItems;\n\t var values = that._values;\n\t var removed = [];\n\t var i = 0;\n\t var j;\n\n\t var index, selectedIndex;\n\t var removedIndices = 0;\n\n\t indices = indices.slice();\n\n\t if (selectable === true || !indices.length) {\n\t for (; i < selectedIndices.length; i++) {\n\t $(children[selectedIndices[i]]).removeClass(\"k-state-selected\").attr(\"aria-selected\", false);\n\n\t removed.push({\n\t position: i,\n\t dataItem: dataItems[i]\n\t });\n\t }\n\n\t that._values = [];\n\t that._dataItems = [];\n\t that._selectedIndices = [];\n\t } else if (selectable === \"multiple\") {\n\t for (; i < indices.length; i++) {\n\t index = indices[i];\n\n\t if (!$(children[index]).hasClass(\"k-state-selected\")) {\n\t continue;\n\t }\n\n\t for (j = 0; j < selectedIndices.length; j++) {\n\t selectedIndex = selectedIndices[j];\n\n\t if (selectedIndex === index) {\n\t $(children[selectedIndex]).removeClass(\"k-state-selected\").attr(\"aria-selected\", false);\n\t var dataItem = this._view[index].item;\n\t var position = this._dataItemPosition(dataItem, this._values);\n\n\t removed.push({\n\t position: position,\n\t dataItem: dataItem\n\t });\n\n\t dataItems.splice(j, 1);\n\t selectedIndices.splice(j, 1);\n\t indices.splice(i, 1);\n\t values.splice(j, 1);\n\n\t removedIndices += 1;\n\t i -= 1;\n\t j -= 1;\n\t break;\n\t }\n\t }\n\t }\n\t }\n\n\t return {\n\t indices: indices,\n\t removed: removed\n\t };\n\t },\n\n\t _deselectFiltered: function(indices) {\n\t var children = this.element[0].children;\n\t var dataItem, index, position;\n\t var removed = [];\n\t var idx = 0;\n\n\t for (; idx < indices.length; idx++) {\n\t index = indices[idx];\n\n\t dataItem = this._view[index].item;\n\t position = this._dataItemPosition(dataItem, this._values);\n\n\t if (position > -1) {\n\t removed.push(this.removeAt(position));\n\t $(children[index]).removeClass(\"k-state-selected\");\n\t }\n\t }\n\n\t if (removed.length) {\n\t this.trigger(CHANGE, {\n\t added: [],\n\t removed: removed\n\t });\n\n\t return true;\n\t }\n\n\t return false;\n\t },\n\n\t _select: function(indices) {\n\t var that = this;\n\t var children = that.element[0].children;\n\t var data = that._view;\n\t var dataItem, index;\n\t var added = [];\n\t var idx = 0;\n\n\t if (last(indices) !== -1) {\n\t that.focus(indices);\n\t }\n\n\t for (; idx < indices.length; idx++) {\n\t index = indices[idx];\n\t dataItem = data[index];\n\n\t if (index === -1 || !dataItem) {\n\t continue;\n\t }\n\n\t dataItem = dataItem.item;\n\n\t that._selectedIndices.push(index);\n\t that._dataItems.push(dataItem);\n\t that._values.push(that._valueGetter(dataItem));\n\n\t $(children[index]).addClass(\"k-state-selected\").attr(\"aria-selected\", true);\n\n\t added.push({\n\t dataItem: dataItem\n\t });\n\t }\n\n\t return added;\n\t },\n\n\t getElementIndex: function(element) {\n\t return $(element).data(\"offset-index\");\n\t },\n\n\t _get: function(candidate) {\n\t if (typeof candidate === \"number\") {\n\t candidate = [candidate];\n\t } else if (!isArray(candidate)) {\n\t candidate = this.getElementIndex(candidate);\n\t candidate = [candidate !== undefined ? candidate : -1];\n\t }\n\n\t return candidate;\n\t },\n\n\t _template: function() {\n\t var that = this;\n\t var options = that.options;\n\t var template = options.template;\n\n\t if (!template) {\n\t template = kendo.template('
      • ${' + kendo.expr(options.dataTextField, \"data\") + \"}
      • \", { useWithBlock: false });\n\t } else {\n\t template = kendo.template(template);\n\t template = function(data) {\n\t return '
      • ' + template(data) + \"
      • \";\n\t };\n\t }\n\n\t return template;\n\t },\n\n\t _templates: function() {\n\t var template;\n\t var options = this.options;\n\t var templates = {\n\t template: options.template,\n\t groupTemplate: options.groupTemplate,\n\t fixedGroupTemplate: options.fixedGroupTemplate\n\t };\n\n\t if (options.columns) {\n\t for (var i = 0; i < options.columns.length; i++) {\n\t var currentColumn = options.columns[i];\n\t var templateText = currentColumn.field ? currentColumn.field.toString(): \"text\";\n\n\t templates[\"column\"+ i] = currentColumn.template || \"#: \" + templateText + \"#\";\n\t }\n\t }\n\n\t for (var key in templates) {\n\t template = templates[key];\n\t if (template && typeof template !== \"function\") {\n\t templates[key] = kendo.template(template);\n\t }\n\t }\n\n\t this.templates = templates;\n\t },\n\n\t _normalizeIndices: function(indices) {\n\t var newIndices = [];\n\t var idx = 0;\n\n\t for (; idx < indices.length; idx++) {\n\t if (indices[idx] !== undefined) {\n\t newIndices.push(indices[idx]);\n\t }\n\t }\n\n\t return newIndices;\n\t },\n\n\t _valueIndices: function(values, indices) {\n\t var data = this._view;\n\t var idx = 0;\n\t var index;\n\n\t indices = indices ? indices.slice() : [];\n\n\t if (!values.length) {\n\t return [];\n\t }\n\n\t for (; idx < data.length; idx++) {\n\t index = this._dataItemPosition(data[idx].item, values);\n\n\t if (index !== -1) {\n\t indices[index] = idx;\n\t }\n\t }\n\n\t return this._normalizeIndices(indices);\n\t },\n\n\t _firstVisibleItem: function() {\n\t var element = this.element[0];\n\t var content = this.content[0];\n\t var scrollTop = content.scrollTop;\n\t var itemHeight = $(element.children[0]).height();\n\t var itemIndex = Math.floor(scrollTop / itemHeight) || 0;\n\t var item = element.children[itemIndex] || element.lastChild;\n\t var forward = item.offsetTop < scrollTop;\n\n\t while (item) {\n\t if (forward) {\n\t if ((item.offsetTop + itemHeight) > scrollTop || !item.nextSibling) {\n\t break;\n\t }\n\n\t item = item.nextSibling;\n\t } else {\n\t if (item.offsetTop <= scrollTop || !item.previousSibling) {\n\t break;\n\t }\n\n\t item = item.previousSibling;\n\t }\n\t }\n\n\t return this._view[$(item).data(\"offset-index\")];\n\t },\n\n\t _fixedHeader: function() {\n\t if (this.isGrouped() && this.templates.fixedGroupTemplate) {\n\t this.header.show();\n\t this.content.scroll(this._onScroll);\n\t } else {\n\t this.header.hide();\n\t this.content.off(\"scroll\", this._onScroll);\n\t }\n\t },\n\n\t _renderHeader: function() {\n\t var template = this.templates.fixedGroupTemplate;\n\t if (!template) {\n\t return;\n\t }\n\n\t var visibleItem = this._firstVisibleItem();\n\n\t if (visibleItem && visibleItem.group.toString().length) {\n\t this.header.html(template(visibleItem.group));\n\t }\n\t },\n\n\t _renderItem: function(context) {\n\t var item = '
      • ';\n\t if (hasColumns) {\n\t item += this._renderColumns(dataItem);\n\t } else {\n\t item += this.templates.template(dataItem);\n\t }\n\n\t if (notFirstItem && context.newGroup) {\n\t if (hasColumns) {\n\t item += '
        ' + this.templates.groupTemplate(context.group) + '
        ';\n\t } else {\n\t item += '
        ' + this.templates.groupTemplate(context.group) + '
        ';\n\t }\n\t } else if (isGrouped && hasColumns) {\n\t item += \"
        \";\n\t }\n\n\t return item + \"
      • \";\n\t },\n\n\t _renderColumns: function(dataItem) {\n\t var item = \"\";\n\n\t for (var i = 0; i < this.options.columns.length; i++) {\n\t var currentWidth = this.options.columns[i].width;\n\t var currentWidthInt = parseInt(currentWidth, 10);\n\t var widthStyle = '';\n\n\t if (currentWidth && !isNaN(currentWidthInt)) {\n\t widthStyle += \"style='width:\";\n\t widthStyle += currentWidthInt;\n\t widthStyle += percentageUnitsRegex.test(currentWidth) ? \"%\" : \"px\";\n\t widthStyle += \";'\";\n\t }\n\t item += \"\";\n\t item += this.templates[\"column\"+ i](dataItem);\n\t item += \"\";\n\t }\n\n\t return item;\n\t },\n\n\t _render: function() {\n\t var html = \"\";\n\n\t var i = 0;\n\t var idx = 0;\n\t var context;\n\t var dataContext = [];\n\t var view = this.dataSource.view();\n\t var values = this.value();\n\n\t var group, newGroup, j;\n\t var isGrouped = this.isGrouped();\n\n\t if (isGrouped) {\n\t for (i = 0; i < view.length; i++) {\n\t group = view[i];\n\t newGroup = true;\n\n\t for (j = 0; j < group.items.length; j++) {\n\t context = {\n\t selected: this._selected(group.items[j], values),\n\t item: group.items[j],\n\t group: group.value,\n\t newGroup: newGroup,\n\t isLastGroupedItem: j === group.items.length - 1,\n\t index: idx };\n\t dataContext[idx] = context;\n\t idx += 1;\n\n\t html += this._renderItem(context);\n\t newGroup = false;\n\t }\n\t }\n\t } else {\n\t for (i = 0; i < view.length; i++) {\n\t context = { selected: this._selected(view[i], values), item: view[i], index: i };\n\n\t dataContext[i] = context;\n\n\t html += this._renderItem(context);\n\t }\n\t }\n\n\t this._view = dataContext;\n\n\t this.element[0].innerHTML = html;\n\n\t if (isGrouped && dataContext.length) {\n\t this._renderHeader();\n\t }\n\t },\n\n\t _selected: function(dataItem, values) {\n\t var select = !this.isFiltered() || this.options.selectable === \"multiple\";\n\t return select && this._dataItemPosition(dataItem, values) !== -1;\n\t },\n\n\t setDSFilter: function(filter) {\n\t this._lastDSFilter = extend({}, filter);\n\t },\n\n\t isFiltered: function() {\n\t if (!this._lastDSFilter) {\n\t this.setDSFilter(this.dataSource.filter());\n\t }\n\n\t return !kendo.data.Query.compareFilters(this.dataSource.filter(), this._lastDSFilter);\n\t },\n\n\t refresh: function(e) {\n\t var that = this;\n\t var action = e && e.action;\n\t var skipUpdateOnBind = that.options.skipUpdateOnBind;\n\t var isItemChange = action === \"itemchange\";\n\t var result;\n\n\t that.trigger(\"dataBinding\");\n\t that._angularItems(\"cleanup\");\n\n\t that._fixedHeader();\n\n\t that._render();\n\n\t that.bound(true);\n\n\t if (isItemChange || action === \"remove\") {\n\t result = mapChangedItems(that._dataItems, e.items);\n\n\t if (result.changed.length) {\n\t if (isItemChange) {\n\t that.trigger(\"selectedItemChange\", {\n\t items: result.changed\n\t });\n\t } else {\n\t that.value(that._getValues(result.unchanged));\n\t }\n\t }\n\t } else if (that.isFiltered() || that._skipUpdate || that._emptySearch) {\n\t that.focus(0);\n\t if (that._skipUpdate) {\n\t that._skipUpdate = false;\n\t that._selectedIndices = that._valueIndices(that._values, that._selectedIndices);\n\t }\n\t } else if (!skipUpdateOnBind && (!action || action === \"add\")) {\n\t that.value(that._values);\n\t }\n\n\t if (that._valueDeferred) {\n\t that._valueDeferred.resolve();\n\t }\n\n\t that._angularItems(\"compile\");\n\t that.trigger(\"dataBound\");\n\t },\n\n\t bound: function(bound) {\n\t if (bound === undefined) {\n\t return this._bound;\n\t }\n\n\t this._bound = bound;\n\t },\n\n\t isGrouped: function() {\n\t return (this.dataSource.group() || []).length;\n\t }\n\t });\n\n\t ui.plugin(StaticList);\n\n\t function last(list) {\n\t return list[list.length - 1];\n\t }\n\n\t function getSelectedOption(select) {\n\t var index = select.selectedIndex;\n\t return index > -1 ? select.options[index] : {};\n\t }\n\n\t function mapChangedItems(selected, itemsToMatch) {\n\t var itemsLength = itemsToMatch.length;\n\t var selectedLength = selected.length;\n\t var dataItem;\n\t var found;\n\t var i, j;\n\n\t var changed = [];\n\t var unchanged = [];\n\n\t if (selectedLength) {\n\t for (i = 0; i < selectedLength; i++) {\n\t dataItem = selected[i];\n\t found = false;\n\n\t for (j = 0; j < itemsLength; j++) {\n\t if (dataItem === itemsToMatch[j]) {\n\t found = true;\n\t changed.push({ index: i, item: dataItem });\n\t break;\n\t }\n\t }\n\n\t if (!found) {\n\t unchanged.push(dataItem);\n\t }\n\t }\n\t }\n\n\t return {\n\t changed: changed,\n\t unchanged: unchanged\n\t };\n\t }\n\n\t function isValidFilterExpr(expression) {\n\t if (!expression || $.isEmptyObject(expression)) {\n\t return false;\n\t }\n\n\t if (expression.filters && !expression.filters.length) {\n\t return false;\n\t }\n\n\t return true;\n\t }\n\n\t function removeFiltersForField(expression, field) {\n\t var filters;\n\t var found = false;\n\n\t if (expression.filters) {\n\t filters = $.grep(expression.filters, function(filter) {\n\t found = removeFiltersForField(filter, field);\n\t if (filter.filters) {\n\t return filter.filters.length;\n\t } else {\n\t return filter.field != field;\n\t }\n\t });\n\n\t if (!found && expression.filters.length !== filters.length) {\n\t found = true;\n\t }\n\n\t expression.filters = filters;\n\t }\n\n\t return found;\n\t }\n\n\t})(window.kendo.jQuery);\n\n\treturn window.kendo;\n\n\t}, __webpack_require__(3));\n\n\n/***/ })\n\n/******/ });","module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(1282);\n\n\n/***/ }),\n\n/***/ 3:\n/***/ (function(module, exports) {\n\n\tmodule.exports = function() { throw new Error(\"define cannot be used indirect\"); };\r\n\n\n/***/ }),\n\n/***/ 1072:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./kendo.fx\");\n\n/***/ }),\n\n/***/ 1077:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./kendo.draganddrop\");\n\n/***/ }),\n\n/***/ 1282:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function(f, define){\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(1072), __webpack_require__(1077) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (f), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t})(function(){\n\n\tvar __meta__ = { // jshint ignore:line\n\t id: \"mobile.scroller\",\n\t name: \"Scroller\",\n\t category: \"mobile\",\n\t description: \"The Kendo Mobile Scroller widget enables touch friendly kinetic scrolling for the contents of a given DOM element.\",\n\t depends: [ \"fx\", \"draganddrop\" ]\n\t};\n\n\t(function($, undefined) {\n\t var kendo = window.kendo,\n\t mobile = kendo.mobile,\n\t fx = kendo.effects,\n\t ui = mobile.ui,\n\t proxy = $.proxy,\n\t extend = $.extend,\n\t Widget = ui.Widget,\n\t Class = kendo.Class,\n\t Movable = kendo.ui.Movable,\n\t Pane = kendo.ui.Pane,\n\t PaneDimensions = kendo.ui.PaneDimensions,\n\t Transition = fx.Transition,\n\t Animation = fx.Animation,\n\t abs = Math.abs,\n\t SNAPBACK_DURATION = 500,\n\t SCROLLBAR_OPACITY = 0.7,\n\t FRICTION = 0.96,\n\t VELOCITY_MULTIPLIER = 10,\n\t MAX_VELOCITY = 55,\n\t OUT_OF_BOUNDS_FRICTION = 0.5,\n\t ANIMATED_SCROLLER_PRECISION = 5,\n\t RELEASECLASS = \"km-scroller-release\",\n\t REFRESHCLASS = \"km-scroller-refresh\",\n\t PULL = \"pull\",\n\t CHANGE = \"change\",\n\t RESIZE = \"resize\",\n\t SCROLL = \"scroll\",\n\t MOUSE_WHEEL_ID = 2;\n\n\t var ZoomSnapBack = Animation.extend({\n\t init: function(options) {\n\t var that = this;\n\t Animation.fn.init.call(that);\n\t extend(that, options);\n\n\t that.userEvents.bind(\"gestureend\", proxy(that.start, that));\n\t that.tapCapture.bind(\"press\", proxy(that.cancel, that));\n\t },\n\n\t enabled: function() {\n\t return this.movable.scale < this.dimensions.minScale;\n\t },\n\n\t done: function() {\n\t return this.dimensions.minScale - this.movable.scale < 0.01;\n\t },\n\n\t tick: function() {\n\t var movable = this.movable;\n\t movable.scaleWith(1.1);\n\t this.dimensions.rescale(movable.scale);\n\t },\n\n\t onEnd: function() {\n\t var movable = this.movable;\n\t movable.scaleTo(this.dimensions.minScale);\n\t this.dimensions.rescale(movable.scale);\n\t }\n\t });\n\n\t var DragInertia = Animation.extend({\n\t init: function(options) {\n\t var that = this;\n\n\t Animation.fn.init.call(that);\n\n\t extend(that, options, {\n\t transition: new Transition({\n\t axis: options.axis,\n\t movable: options.movable,\n\t onEnd: function() { that._end(); }\n\t })\n\t });\n\n\t that.tapCapture.bind(\"press\", function() { that.cancel(); });\n\t that.userEvents.bind(\"end\", proxy(that.start, that));\n\t that.userEvents.bind(\"gestureend\", proxy(that.start, that));\n\t that.userEvents.bind(\"tap\", proxy(that.onEnd, that));\n\t },\n\n\t onCancel: function() {\n\t this.transition.cancel();\n\t },\n\n\t freeze: function(location) {\n\t var that = this;\n\t that.cancel();\n\t that._moveTo(location);\n\t },\n\n\t onEnd: function() {\n\t var that = this;\n\t if (that.paneAxis.outOfBounds()) {\n\t that._snapBack();\n\t } else {\n\t that._end();\n\t }\n\t },\n\n\t done: function() {\n\t return abs(this.velocity) < 1;\n\t },\n\n\t start: function(e) {\n\t var that = this,\n\t velocity;\n\n\t if (!that.dimension.enabled) { return; }\n\n\t if (that.paneAxis.outOfBounds()) {\n\t if(that.transition._started){\n\t that.transition.cancel();\n\t that.velocity = Math.min(e.touch[that.axis].velocity * that.velocityMultiplier, MAX_VELOCITY);\n\n\t Animation.fn.start.call(that);\n\t }else{\n\t that._snapBack();\n\t }\n\t } else {\n\t velocity = e.touch.id === MOUSE_WHEEL_ID ? 0 : e.touch[that.axis].velocity;\n\t that.velocity = Math.max(Math.min(velocity * that.velocityMultiplier, MAX_VELOCITY), -MAX_VELOCITY);\n\n\t that.tapCapture.captureNext();\n\t Animation.fn.start.call(that);\n\t }\n\t },\n\n\t tick: function() {\n\t var that = this,\n\t dimension = that.dimension,\n\t friction = that.paneAxis.outOfBounds() ? OUT_OF_BOUNDS_FRICTION : that.friction,\n\t delta = (that.velocity *= friction),\n\t location = that.movable[that.axis] + delta;\n\n\t if (!that.elastic && dimension.outOfBounds(location)) {\n\t location = Math.max(Math.min(location, dimension.max), dimension.min);\n\t that.velocity = 0;\n\t }\n\n\t that.movable.moveAxis(that.axis, location);\n\t },\n\n\t _end: function() {\n\t this.tapCapture.cancelCapture();\n\t this.end();\n\t },\n\n\t _snapBack: function() {\n\t var that = this,\n\t dimension = that.dimension,\n\t snapBack = that.movable[that.axis] > dimension.max ? dimension.max : dimension.min;\n\t that._moveTo(snapBack);\n\t },\n\n\t _moveTo: function(location) {\n\t this.transition.moveTo({ location: location, duration: SNAPBACK_DURATION, ease: Transition.easeOutExpo });\n\t }\n\t });\n\n\t var AnimatedScroller = Animation.extend({\n\t init: function(options) {\n\t var that = this;\n\n\t kendo.effects.Animation.fn.init.call(this);\n\n\t extend(that, options, {\n\t origin: {},\n\t destination: {},\n\t offset: {}\n\t });\n\t },\n\n\t tick: function() {\n\t this._updateCoordinates();\n\t this.moveTo(this.origin);\n\t },\n\n\t done: function() {\n\t return abs(this.offset.y) < ANIMATED_SCROLLER_PRECISION && abs(this.offset.x) < ANIMATED_SCROLLER_PRECISION;\n\t },\n\n\t onEnd: function() {\n\t this.moveTo(this.destination);\n\t if (this.callback) {\n\t this.callback.call();\n\t }\n\t },\n\n\t setCoordinates: function(from, to) {\n\t this.offset = {};\n\t this.origin = from;\n\t this.destination = to;\n\t },\n\n\t setCallback: function(callback) {\n\t if (callback && kendo.isFunction(callback)) {\n\t this.callback = callback;\n\t } else {\n\t callback = undefined;\n\t }\n\t },\n\n\t _updateCoordinates: function() {\n\t this.offset = {\n\t x: (this.destination.x - this.origin.x) / 4,\n\t y: (this.destination.y - this.origin.y) / 4\n\t };\n\n\t this.origin = {\n\t y: this.origin.y + this.offset.y,\n\t x: this.origin.x + this.offset.x\n\t };\n\t }\n\t });\n\n\t var ScrollBar = Class.extend({\n\t init: function(options) {\n\t var that = this,\n\t horizontal = options.axis === \"x\",\n\t element = $('
        ');\n\n\t extend(that, options, {\n\t element: element,\n\t elementSize: 0,\n\t movable: new Movable(element),\n\t scrollMovable: options.movable,\n\t alwaysVisible: options.alwaysVisible,\n\t size: horizontal ? \"width\" : \"height\"\n\t });\n\n\t that.scrollMovable.bind(CHANGE, proxy(that.refresh, that));\n\t that.container.append(element);\n\t if (options.alwaysVisible) {\n\t that.show();\n\t }\n\t },\n\n\t refresh: function() {\n\t var that = this,\n\t axis = that.axis,\n\t dimension = that.dimension,\n\t paneSize = dimension.size,\n\t scrollMovable = that.scrollMovable,\n\t sizeRatio = paneSize / dimension.total,\n\t position = Math.round(-scrollMovable[axis] * sizeRatio),\n\t size = Math.round(paneSize * sizeRatio);\n\n\t if (sizeRatio >= 1) {\n\t this.element.css(\"display\", \"none\");\n\t } else {\n\t this.element.css(\"display\", \"\");\n\t }\n\n\t if (position + size > paneSize) {\n\t size = paneSize - position;\n\t } else if (position < 0) {\n\t size += position;\n\t position = 0;\n\t }\n\n\t if (that.elementSize != size) {\n\t that.element.css(that.size, size + \"px\");\n\t that.elementSize = size;\n\t }\n\n\t that.movable.moveAxis(axis, position);\n\t },\n\n\t show: function() {\n\t this.element.css({opacity: SCROLLBAR_OPACITY, visibility: \"visible\"});\n\t },\n\n\t hide: function() {\n\t if (!this.alwaysVisible) {\n\t this.element.css({opacity: 0});\n\t }\n\t }\n\t });\n\n\t var Scroller = Widget.extend({\n\t init: function(element, options) {\n\t var that = this;\n\t Widget.fn.init.call(that, element, options);\n\n\t element = that.element;\n\n\t that._native = that.options.useNative && kendo.support.hasNativeScrolling;\n\t if (that._native) {\n\t element.addClass(\"km-native-scroller\")\n\t .prepend('
        ');\n\n\t extend(that, {\n\t scrollElement: element,\n\t fixedContainer: element.children().first()\n\t });\n\n\t return;\n\t }\n\n\t element\n\t .css(\"overflow\", \"hidden\")\n\t .addClass(\"km-scroll-wrapper\")\n\t .wrapInner('
        ')\n\t .prepend('
        ');\n\n\t var inner = element.children().eq(1),\n\n\t tapCapture = new kendo.TapCapture(element),\n\n\t movable = new Movable(inner),\n\n\t dimensions = new PaneDimensions({\n\t element: inner,\n\t container: element,\n\t forcedEnabled: that.options.zoom\n\t }),\n\n\t avoidScrolling = this.options.avoidScrolling,\n\n\t userEvents = new kendo.UserEvents(element, {\n\t touchAction: \"pan-y\",\n\t fastTap: true,\n\t allowSelection: true,\n\t preventDragEvent: true,\n\t captureUpIfMoved: true,\n\t multiTouch: that.options.zoom,\n\t supportDoubleTap: that.options.supportDoubleTap,\n\t start: function(e) {\n\t dimensions.refresh();\n\n\t var velocityX = abs(e.x.velocity),\n\t velocityY = abs(e.y.velocity),\n\t horizontalSwipe = velocityX * 2 >= velocityY,\n\t originatedFromFixedContainer = $.contains(that.fixedContainer[0], e.event.target),\n\t verticalSwipe = velocityY * 2 >= velocityX;\n\n\n\t if (!originatedFromFixedContainer && !avoidScrolling(e) && that.enabled && (dimensions.x.enabled && horizontalSwipe || dimensions.y.enabled && verticalSwipe)) {\n\t userEvents.capture();\n\t } else {\n\t userEvents.cancel();\n\t }\n\t }\n\t }),\n\n\t pane = new Pane({\n\t movable: movable,\n\t dimensions: dimensions,\n\t userEvents: userEvents,\n\t elastic: that.options.elastic\n\t }),\n\n\t zoomSnapBack = new ZoomSnapBack({\n\t movable: movable,\n\t dimensions: dimensions,\n\t userEvents: userEvents,\n\t tapCapture: tapCapture\n\t }),\n\n\t animatedScroller = new AnimatedScroller({\n\t moveTo: function(coordinates) {\n\t that.scrollTo(coordinates.x, coordinates.y);\n\t }\n\t });\n\n\t movable.bind(CHANGE, function() {\n\t that.scrollTop = - movable.y;\n\t that.scrollLeft = - movable.x;\n\n\t that.trigger(SCROLL, {\n\t scrollTop: that.scrollTop,\n\t scrollLeft: that.scrollLeft\n\t });\n\t });\n\n\t if (that.options.mousewheelScrolling) {\n\t element.on(\"DOMMouseScroll mousewheel\", proxy(this, \"_wheelScroll\"));\n\t }\n\n\t extend(that, {\n\t movable: movable,\n\t dimensions: dimensions,\n\t zoomSnapBack: zoomSnapBack,\n\t animatedScroller: animatedScroller,\n\t userEvents: userEvents,\n\t pane: pane,\n\t tapCapture: tapCapture,\n\t pulled: false,\n\t enabled: true,\n\t scrollElement: inner,\n\t scrollTop: 0,\n\t scrollLeft: 0,\n\t fixedContainer: element.children().first()\n\t });\n\n\t that._initAxis(\"x\");\n\t that._initAxis(\"y\");\n\n\t // build closure\n\t that._wheelEnd = function() {\n\t that._wheel = false;\n\t that.userEvents.end(0, that._wheelY);\n\t };\n\n\t dimensions.refresh();\n\n\t if (that.options.pullToRefresh) {\n\t that._initPullToRefresh();\n\t }\n\t },\n\n\t _wheelScroll: function(e) {\n\t if (e.ctrlKey) {\n\t return;\n\t }\n\n\t if (!this._wheel) {\n\t this._wheel = true;\n\t this._wheelY = 0;\n\t this.userEvents.press(0, this._wheelY);\n\t }\n\n\t clearTimeout(this._wheelTimeout);\n\t this._wheelTimeout = setTimeout(this._wheelEnd, 50);\n\n\t var delta = kendo.wheelDeltaY(e);\n\n\t if (delta) {\n\t this._wheelY += delta;\n\t this.userEvents.move(0, this._wheelY);\n\t }\n\n\t e.preventDefault();\n\t },\n\n\t makeVirtual: function() {\n\t this.dimensions.y.makeVirtual();\n\t },\n\n\t virtualSize: function(min, max) {\n\t this.dimensions.y.virtualSize(min, max);\n\t },\n\n\t height: function() {\n\t return this.dimensions.y.size;\n\t },\n\n\t scrollHeight: function() {\n\t return this.scrollElement[0].scrollHeight;\n\t },\n\n\t scrollWidth: function() {\n\t return this.scrollElement[0].scrollWidth;\n\t },\n\n\t options: {\n\t name: \"Scroller\",\n\t zoom: false,\n\t pullOffset: 140,\n\t visibleScrollHints: false,\n\t elastic: true,\n\t useNative: false,\n\t mousewheelScrolling: true,\n\t avoidScrolling: function() { return false; },\n\t pullToRefresh: false,\n\t messages: {\n\t pullTemplate: \"Pull to refresh\",\n\t releaseTemplate: \"Release to refresh\",\n\t refreshTemplate: \"Refreshing\"\n\t }\n\t },\n\n\t events: [\n\t PULL,\n\t SCROLL,\n\t RESIZE\n\t ],\n\n\t _resize: function() {\n\t if (!this._native) {\n\t this.contentResized();\n\t }\n\t },\n\n\t setOptions: function(options) {\n\t var that = this;\n\t Widget.fn.setOptions.call(that, options);\n\t if (options.pullToRefresh) {\n\t that._initPullToRefresh();\n\t }\n\t },\n\n\t reset: function() {\n\t if (this._native) {\n\t this.scrollElement.scrollTop(0);\n\t } else {\n\t this.movable.moveTo({x: 0, y: 0});\n\t this._scale(1);\n\t }\n\t },\n\n\t contentResized: function() {\n\t this.dimensions.refresh();\n\t if (this.pane.x.outOfBounds()) {\n\t this.movable.moveAxis(\"x\", this.dimensions.x.min);\n\t }\n\n\t if (this.pane.y.outOfBounds()) {\n\t this.movable.moveAxis(\"y\", this.dimensions.y.min);\n\t }\n\t },\n\n\t zoomOut: function() {\n\t var dimensions = this.dimensions;\n\t dimensions.refresh();\n\t this._scale(dimensions.fitScale);\n\t this.movable.moveTo(dimensions.centerCoordinates());\n\t },\n\n\t enable: function() {\n\t this.enabled = true;\n\t },\n\n\t disable: function() {\n\t this.enabled = false;\n\t },\n\n\t scrollTo: function(x, y) {\n\t if (this._native) {\n\t this.scrollElement.scrollLeft(abs(x));\n\t this.scrollElement.scrollTop(abs(y));\n\t } else {\n\t this.dimensions.refresh();\n\t this.movable.moveTo({x: x, y: y});\n\t }\n\t },\n\n\t animatedScrollTo: function(x, y, callback) {\n\t var from,\n\t to;\n\n\t if(this._native) {\n\t this.scrollTo(x, y);\n\t } else {\n\t from = { x: this.movable.x, y: this.movable.y };\n\t to = { x: x, y: y };\n\n\t this.animatedScroller.setCoordinates(from, to);\n\t this.animatedScroller.setCallback(callback);\n\t this.animatedScroller.start();\n\t }\n\t },\n\n\t pullHandled: function() {\n\t var that = this;\n\t that.refreshHint.removeClass(REFRESHCLASS);\n\t that.hintContainer.html(that.pullTemplate({}));\n\t that.yinertia.onEnd();\n\t that.xinertia.onEnd();\n\t that.userEvents.cancel();\n\t },\n\n\t destroy: function() {\n\t Widget.fn.destroy.call(this);\n\t if (this.userEvents) {\n\t this.userEvents.destroy();\n\t }\n\t },\n\n\t _scale: function(scale) {\n\t this.dimensions.rescale(scale);\n\t this.movable.scaleTo(scale);\n\t },\n\n\t _initPullToRefresh: function() {\n\t var that = this;\n\n\t that.dimensions.y.forceEnabled();\n\t that.pullTemplate = kendo.template(that.options.messages.pullTemplate);\n\t that.releaseTemplate = kendo.template(that.options.messages.releaseTemplate);\n\t that.refreshTemplate = kendo.template(that.options.messages.refreshTemplate);\n\n\t that.scrollElement.prepend('' + that.pullTemplate({}) + '');\n\t that.refreshHint = that.scrollElement.children().first();\n\t that.hintContainer = that.refreshHint.children(\".km-template\");\n\n\t that.pane.y.bind(\"change\", proxy(that._paneChange, that));\n\t that.userEvents.bind(\"end\", proxy(that._dragEnd, that));\n\t },\n\n\t _dragEnd: function() {\n\t var that = this;\n\n\t if(!that.pulled) {\n\t return;\n\t }\n\n\t that.pulled = false;\n\t that.refreshHint.removeClass(RELEASECLASS).addClass(REFRESHCLASS);\n\t that.hintContainer.html(that.refreshTemplate({}));\n\t that.yinertia.freeze(that.options.pullOffset / 2);\n\t that.trigger(\"pull\");\n\t },\n\n\t _paneChange: function() {\n\t var that = this;\n\n\t if (that.movable.y / OUT_OF_BOUNDS_FRICTION > that.options.pullOffset) {\n\t if (!that.pulled) {\n\t that.pulled = true;\n\t that.refreshHint.removeClass(REFRESHCLASS).addClass(RELEASECLASS);\n\t that.hintContainer.html(that.releaseTemplate({}));\n\t }\n\t } else if (that.pulled) {\n\t that.pulled = false;\n\t that.refreshHint.removeClass(RELEASECLASS);\n\t that.hintContainer.html(that.pullTemplate({}));\n\t }\n\t },\n\n\t _initAxis: function(axis) {\n\t var that = this,\n\t movable = that.movable,\n\t dimension = that.dimensions[axis],\n\t tapCapture = that.tapCapture,\n\t paneAxis = that.pane[axis],\n\t scrollBar = new ScrollBar({\n\t axis: axis,\n\t movable: movable,\n\t dimension: dimension,\n\t container: that.element,\n\t alwaysVisible: that.options.visibleScrollHints\n\t });\n\n\t dimension.bind(CHANGE, function() {\n\t scrollBar.refresh();\n\t });\n\n\t paneAxis.bind(CHANGE, function() {\n\t scrollBar.show();\n\t });\n\n\t that[axis + \"inertia\"] = new DragInertia({\n\t axis: axis,\n\t paneAxis: paneAxis,\n\t movable: movable,\n\t tapCapture: tapCapture,\n\t userEvents: that.userEvents,\n\t dimension: dimension,\n\t elastic: that.options.elastic,\n\t friction: that.options.friction || FRICTION,\n\t velocityMultiplier: that.options.velocityMultiplier || VELOCITY_MULTIPLIER,\n\t end: function() {\n\t scrollBar.hide();\n\t that.trigger(\"scrollEnd\", {\n\t axis: axis,\n\t scrollTop: that.scrollTop,\n\t scrollLeft: that.scrollLeft\n\t });\n\t }\n\t });\n\t }\n\t });\n\n\t ui.plugin(Scroller);\n\t})(window.kendo.jQuery);\n\n\treturn window.kendo;\n\n\t}, __webpack_require__(3));\n\n\n/***/ })\n\n/******/ });","module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(1290);\n\n\n/***/ }),\n\n/***/ 3:\n/***/ (function(module, exports) {\n\n\tmodule.exports = function() { throw new Error(\"define cannot be used indirect\"); };\r\n\n\n/***/ }),\n\n/***/ 1036:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./kendo.list\");\n\n/***/ }),\n\n/***/ 1037:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./kendo.mobile.scroller\");\n\n/***/ }),\n\n/***/ 1038:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./kendo.virtuallist\");\n\n/***/ }),\n\n/***/ 1290:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function(f, define){\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(1036), __webpack_require__(1037), __webpack_require__(1038) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (f), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t})(function(){\n\n\tvar __meta__ = { // jshint ignore:line\n\t id: \"multiselect\",\n\t name: \"MultiSelect\",\n\t category: \"web\",\n\t description: \"The MultiSelect widget allows the selection from pre-defined values.\",\n\t depends: [ \"list\" ],\n\t features: [ {\n\t id: \"mobile-scroller\",\n\t name: \"Mobile scroller\",\n\t description: \"Support for kinetic scrolling in mobile device\",\n\t depends: [ \"mobile.scroller\" ]\n\t }, {\n\t id: \"virtualization\",\n\t name: \"VirtualList\",\n\t description: \"Support for virtualization\",\n\t depends: [ \"virtuallist\" ]\n\t } ]\n\t};\n\n\t(function($, undefined) {\n\t var kendo = window.kendo,\n\t ui = kendo.ui,\n\t List = ui.List,\n\t keys = $.extend({ A: 65 }, kendo.keys),\n\t activeElement = kendo._activeElement,\n\t ObservableArray = kendo.data.ObservableArray,\n\t proxy = $.proxy,\n\t ID = \"id\",\n\t LI = \"li\",\n\t ACCEPT = \"accept\",\n\t FILTER = \"filter\",\n\t REBIND = \"rebind\",\n\t OPEN = \"open\",\n\t CLOSE = \"close\",\n\t CHANGE = \"change\",\n\t PROGRESS = \"progress\",\n\t SELECT = \"select\",\n\t DESELECT = \"deselect\",\n\t ARIA_DISABLED = \"aria-disabled\",\n\t FOCUSEDCLASS = \"k-state-focused\",\n\t SELECTEDCLASS = \"k-state-selected\",\n\t HIDDENCLASS = \"k-hidden\",\n\t HOVERCLASS = \"k-state-hover\",\n\t STATEDISABLED = \"k-state-disabled\",\n\t NOCLICKCLASS = \"k-no-click\",\n\t DISABLED = \"disabled\",\n\t READONLY = \"readonly\",\n\t AUTOCOMPLETEVALUE = \"off\",\n\t ns = \".kendoMultiSelect\",\n\t CLICK = \"click\" + ns,\n\t KEYDOWN = \"keydown\" + ns,\n\t MOUSEENTER = \"mouseenter\" + ns,\n\t MOUSELEAVE = \"mouseleave\" + ns,\n\t HOVEREVENTS = MOUSEENTER + \" \" + MOUSELEAVE,\n\t quotRegExp = /\"/g,\n\t isArray = $.isArray,\n\t styles = [\"font-family\",\n\t \"font-size\",\n\t \"font-stretch\",\n\t \"font-style\",\n\t \"font-weight\",\n\t \"letter-spacing\",\n\t \"text-transform\",\n\t \"line-height\"];\n\n\t var MultiSelect = List.extend({\n\t init: function(element, options) {\n\t var that = this, id, disabled;\n\n\t that.ns = ns;\n\t List.fn.init.call(that, element, options);\n\n\t that._optionsMap = {};\n\t that._customOptions = {};\n\n\t that._wrapper();\n\t that._tagList();\n\t that._input();\n\t that._textContainer();\n\t that._loader();\n\t that._clearButton();\n\n\t that._tabindex(that.input);\n\n\t element = that.element.attr(\"multiple\", \"multiple\").hide();\n\t options = that.options;\n\n\t if (!options.placeholder) {\n\t options.placeholder = element.data(\"placeholder\");\n\t }\n\n\t id = element.attr(ID);\n\n\t if (id) {\n\t that._tagID = id + \"_tag_active\";\n\n\t id = id + \"_taglist\";\n\t that.tagList.attr(ID, id);\n\n\t that.input.attr(\"aria-describedby\", id);\n\t }\n\n\t that._initialOpen = true;\n\t that._ariaLabel();\n\t that._ariaSetLive();\n\t that._dataSource();\n\t that._ignoreCase();\n\t that._popup();\n\n\t that._tagTemplate();\n\t that.requireValueMapper(that.options);\n\t that._initList();\n\n\t that._reset();\n\t that._enable();\n\t that._placeholder();\n\n\t if (options.autoBind) {\n\t that.dataSource.fetch();\n\t } else if (options.value) {\n\t that._preselect(options.value);\n\t }\n\n\t disabled = $(that.element).parents(\"fieldset\").is(':disabled');\n\n\t if (disabled) {\n\t that.enable(false);\n\t }\n\n\t that._ariaSetSize(that.value().length);\n\n\t kendo.notify(that);\n\t that._toggleCloseVisibility();\n\t },\n\n\t options: {\n\t name: \"MultiSelect\",\n\t tagMode: \"multiple\",\n\t enabled: true,\n\t autoBind: true,\n\t autoClose: true,\n\t highlightFirst: true,\n\t dataTextField: \"\",\n\t dataValueField: \"\",\n\t filter: \"startswith\",\n\t ignoreCase: true,\n\t minLength: 1,\n\t messages: {\n\t \"singleTag\": \"item(s) selected\",\n\t \"clear\": \"clear\",\n\t \"deleteTag\": \"delete\",\n\t \"noData\": \"No data found.\"\n\t },\n\t enforceMinLength: false,\n\t delay: 100,\n\t value: null,\n\t maxSelectedItems: null,\n\t placeholder: \"\",\n\t height: 200,\n\t animation: {},\n\t virtual: false,\n\t itemTemplate: \"\",\n\t tagTemplate: \"\",\n\t groupTemplate: \"#:data#\",\n\t fixedGroupTemplate: \"#:data#\",\n\t clearButton: true,\n\t autoWidth: false,\n\t popup: null\n\t },\n\n\t events: [\n\t OPEN,\n\t CLOSE,\n\t CHANGE,\n\t SELECT,\n\t DESELECT,\n\t \"filtering\",\n\t \"dataBinding\",\n\t \"dataBound\"\n\t ],\n\n\t setDataSource: function(dataSource) {\n\t this.options.dataSource = dataSource;\n\n\t this._state = \"\";\n\t this._dataSource();\n\n\t this.persistTagList = false;\n\t this.listView.setDataSource(this.dataSource);\n\n\t if (this.options.autoBind) {\n\t this.dataSource.fetch();\n\t }\n\t },\n\n\t setOptions: function(options) {\n\t var listOptions = this._listOptions(options);\n\n\t List.fn.setOptions.call(this, options);\n\n\t this.listView.setOptions(listOptions);\n\n\t this._accessors();\n\t this._aria(this.tagList.attr(ID));\n\t this._tagTemplate();\n\t this._placeholder();\n\t this._clearButton();\n\t },\n\n\t currentTag: function(candidate) {\n\t var that = this;\n\n\t if (candidate !== undefined) {\n\t if (that._currentTag) {\n\t that._currentTag\n\t .removeClass(FOCUSEDCLASS)\n\t .removeAttr(ID);\n\n\t that._currentTag.find(\".k-select\").attr(\"aria-hidden\", true);\n\n\t that.input.removeAttr(\"aria-activedescendant\");\n\t }\n\n\t if (candidate) {\n\t candidate.addClass(FOCUSEDCLASS).attr(ID, that._tagID);\n\n\t candidate.find(\".k-select\").removeAttr(\"aria-hidden\");\n\n\t that.input.attr(\"aria-activedescendant\", that._tagID);\n\t }\n\n\t that._currentTag = candidate;\n\t } else {\n\t return that._currentTag;\n\t }\n\t },\n\n\t dataItems: function() {\n\t return this.listView.selectedDataItems();\n\t },\n\n\t destroy: function() {\n\t var that = this,\n\t ns = that.ns;\n\n\t clearTimeout(that._busy);\n\t clearTimeout(that._typingTimeout);\n\n\t that.wrapper.off(ns);\n\t that.tagList.off(ns);\n\t that.input.off(ns);\n\t that._clear.off(ns);\n\n\t List.fn.destroy.call(that);\n\t },\n\n\t _activateItem: function() {\n\t if (this.popup.visible()) {\n\t List.fn._activateItem.call(this);\n\t }\n\t this.currentTag(null);\n\t },\n\n\t _listOptions: function(options) {\n\t var that = this;\n\t var listOptions = List.fn._listOptions.call(that, $.extend(options, {\n\t selectedItemChange: proxy(that._selectedItemChange, that),\n\t selectable: \"multiple\"\n\t }));\n\n\t var itemTemplate = this.options.itemTemplate || this.options.template;\n\t var template = listOptions.itemTemplate || itemTemplate || listOptions.template;\n\n\t if (!template) {\n\t template = \"#:\" + kendo.expr(listOptions.dataTextField, \"data\") + \"#\";\n\t }\n\n\t listOptions.template = template;\n\n\t return listOptions;\n\t },\n\n\t _setListValue: function() {\n\t List.fn._setListValue.call(this, this._initialValues.slice(0));\n\t },\n\n\t _listChange: function(e) {\n\t var data = this.dataSource.flatView();\n\t var optionsMap = this._optionsMap;\n\t var valueGetter = this._value;\n\n\t if (this._state === REBIND) {\n\t this._state = \"\";\n\t }\n\n\t for (var i = 0; i < e.added.length; i++) {\n\t if (optionsMap[valueGetter(e.added[i].dataItem)] === undefined) {\n\t this._render(data); //render select element \";\n\t },\n\n\t _render: function(data) {\n\t var selectedItems = this.listView.selectedDataItems();\n\t var values = this.listView.value();\n\t var length = data.length;\n\t var selectedIndex;\n\t var options = \"\";\n\t var dataItem;\n\t var value;\n\t var idx;\n\n\t if (values.length !== selectedItems.length) {\n\t selectedItems = this._buildSelectedItems(values);\n\t }\n\n\t var custom = {};\n\t var optionsMap = {};\n\n\t for (idx = 0; idx < length; idx++) {\n\t dataItem = data[idx];\n\t value = this._value(dataItem);\n\n\t selectedIndex = this._selectedItemIndex(value, selectedItems);\n\t if (selectedIndex !== -1) {\n\t selectedItems.splice(selectedIndex, 1);\n\t }\n\n\t optionsMap[value] = idx;\n\t options += this._option(value, this._text(dataItem), selectedIndex !== -1);\n\t }\n\n\t if (selectedItems.length) {\n\t for (idx = 0; idx < selectedItems.length; idx++) {\n\t dataItem = selectedItems[idx];\n\n\t value = this._value(dataItem);\n\t custom[value] = length;\n\t optionsMap[value] = length;\n\n\t length += 1;\n\t options += this._option(value, this._text(dataItem), true);\n\t }\n\t }\n\n\t this._customOptions = custom;\n\t this._optionsMap = optionsMap;\n\n\t this.element.html(options);\n\t },\n\n\t _buildSelectedItems: function(values) {\n\t var valueField = this.options.dataValueField;\n\t var textField = this.options.dataTextField;\n\t var result = [];\n\t var item;\n\n\t for (var idx = 0; idx < values.length; idx++) {\n\t item = {};\n\t item[valueField] = values[idx];\n\t item[textField] = values[idx];\n\n\t result.push(item);\n\t }\n\n\t return result;\n\t },\n\n\t _selectedItemIndex: function(value, selectedItems) {\n\t var valueGetter = this._value;\n\t var idx = 0;\n\n\t for (; idx < selectedItems.length; idx++) {\n\t if (value === valueGetter(selectedItems[idx])) {\n\t return idx;\n\t }\n\t }\n\n\t return -1;\n\t },\n\n\t _search: function() {\n\t var that = this;\n\n\t clearTimeout(that._typingTimeout);\n\n\t that._typingTimeout = setTimeout(function() {\n\t var value = that._inputValue();\n\t if (that._prev !== value) {\n\t that._prev = value;\n\t that.search(value);\n\t that._toggleCloseVisibility();\n\t }\n\t }, that.options.delay);\n\t },\n\n\t _toggleCloseVisibility: function() {\n\t if (this.value().length || (this.input.val() && this.input.val() !== this.options.placeholder)) {\n\t this._showClear();\n\t } else {\n\t this._hideClear();\n\t }\n\t },\n\n\t _allowOpening: function() {\n\t return this._allowSelection() && List.fn._allowOpening.call(this);\n\t },\n\n\t _allowSelection: function() {\n\t var max = this.options.maxSelectedItems;\n\t return max === null || max > this.listView.value().length;\n\t },\n\n\t _angularTagItems: function(cmd) {\n\t var that = this;\n\n\t that.angular(cmd, function() {\n\t return {\n\t elements: that.tagList[0].children,\n\t data: $.map(that.dataItems(), function(dataItem) {\n\t return { dataItem: dataItem };\n\t })\n\t };\n\t });\n\t },\n\n\t updatePersistTagList: function(added, removed){\n\t if(this.persistTagList.added &&\n\t this.persistTagList.added.length === removed.length &&\n\t this.persistTagList.removed &&\n\t this.persistTagList.removed.length === added.length){\n\t this.persistTagList = false;\n\t }else{\n\t this.listView._removedAddedIndexes = this._old.slice();\n\t this.persistTagList = {\n\t added: added,\n\t removed: removed\n\t };\n\t }\n\t },\n\n\t _selectValue: function (added, removed) {\n\t var that = this;\n\t var total = that.dataSource.total();\n\t var tagList = that.tagList;\n\t var getter = that._value;\n\t var removedItem;\n\t var addedItem;\n\t var idx;\n\n\t if(this.persistTagList){\n\t this.updatePersistTagList(added, removed);\n\n\t return;\n\t }\n\n\t that._angularTagItems(\"cleanup\");\n\n\t if (that.options.tagMode === \"multiple\") {\n\t for (idx = removed.length - 1; idx > -1; idx--) {\n\t removedItem = removed[idx];\n\n\t if (tagList.children().length) {\n\t tagList[0].removeChild(tagList[0].children[removedItem.position]);\n\t that._setOption(getter(removedItem.dataItem), false);\n\t }\n\t }\n\n\t for (idx = 0; idx < added.length; idx++) {\n\t addedItem = added[idx];\n\n\t tagList.append(that.tagTemplate(addedItem.dataItem));\n\n\t that._setOption(getter(addedItem.dataItem), true);\n\t }\n\t } else {\n\t if (!that._maxTotal || that._maxTotal < total) {\n\t that._maxTotal = total;\n\t }\n\n\t this._updateTagListHTML();\n\n\t for (idx = removed.length - 1; idx > -1; idx--) {\n\t that._setOption(getter(removed[idx].dataItem), false);\n\t }\n\n\t for (idx = 0; idx < added.length; idx++) {\n\t that._setOption(getter(added[idx].dataItem), true);\n\t }\n\t }\n\n\t that._angularTagItems(\"compile\");\n\t that._placeholder();\n\t },\n\n\t _updateTagListHTML: function(){\n\t var that = this;\n\t var values = that.value();\n\t var total = that.dataSource.total();\n\t var tagList = that.tagList;\n\n\t tagList.html(\"\");\n\n\t if (values.length) {\n\t tagList.append(that.tagTemplate({\n\t values: values,\n\t dataItems: that.dataItems(),\n\t maxTotal: that._maxTotal,\n\t currentTotal: total\n\t }));\n\t }\n\t },\n\n\t _select: function(candidate) {\n\t var resolved = $.Deferred().resolve();\n\n\t if (!candidate) {\n\t return resolved;\n\t }\n\n\t var that = this;\n\t var listView = that.listView;\n\t var dataItem = listView.dataItemByIndex(listView.getElementIndex(candidate));\n\t var isSelected = candidate.hasClass(\"k-state-selected\");\n\n\t if (that._state === REBIND) {\n\t that._state = \"\";\n\t }\n\n\t if (!that._allowSelection() && !isSelected) {\n\t return resolved;\n\t }\n\n\t if (that.trigger(isSelected ? DESELECT : SELECT, { dataItem: dataItem, item: candidate })) {\n\t that._close();\n\t return resolved;\n\t }\n\n\t that.persistTagList = false;\n\t return listView.select(candidate).done(function() {\n\t that._placeholder();\n\n\t if (that._state === FILTER) {\n\t that._state = ACCEPT;\n\t listView.skipUpdate(true);\n\t }\n\t });\n\t },\n\n\t _selectRange: function (startIndex, endIndex) {\n\t var that = this;\n\t var listView = this.listView;\n\t var maxSelectedItems = this.options.maxSelectedItems;\n\t var indices = this._getSelectedIndices().slice();\n\t var indicesToSelect = [];\n\t var i;\n\n\t var selectIndices = function(indices) {\n\t listView.select(indices).done(function() {\n\t indices.forEach(function(index) {\n\t var dataItem = listView.dataItemByIndex(index);\n\t var candidate = listView.element.children()[index];\n\t var isSelected = $(candidate).hasClass(\"k-state-selected\");\n\n\t that.trigger(isSelected ? SELECT : DESELECT, {dataItem: dataItem, item: $(candidate)});\n\t });\n\t that._change();\n\t });\n\t };\n\n\t if (indices.length - 1 === endIndex - startIndex) {\n\t return selectIndices(indices);\n\t }\n\n\t if (startIndex < endIndex) {\n\t for (i = startIndex; i <= endIndex; i++) {\n\t indicesToSelect.push(i);\n\t }\n\t } else {\n\t for (i = startIndex; i >= endIndex; i--) {\n\t indicesToSelect.push(i);\n\t }\n\t }\n\n\t if (maxSelectedItems !== null && indicesToSelect.length > maxSelectedItems) {\n\t indicesToSelect = indicesToSelect.slice(0, maxSelectedItems);\n\t }\n\n\t for (i = 0; i < indicesToSelect.length; i++) {\n\t var index = indicesToSelect[i];\n\n\t if (this._getSelectedIndices().indexOf(index) == -1) {\n\t indices.push(index);\n\t } else {\n\t indices.splice(indices.indexOf(index), 1);\n\t }\n\t }\n\n\t if (!indices.length) {\n\t return;\n\t }\n\n\t that.persistTagList = false;\n\t return selectIndices(indices);\n\t },\n\n\t _input: function() {\n\t var that = this;\n\t var element = that.element;\n\t var accessKey = element[0].accessKey;\n\t var input = that._inputWrapper.children(\"input.k-input\");\n\n\t if (!input[0]) {\n\t input = $('').appendTo(that._inputWrapper);\n\t }\n\n\t element.removeAttr(\"accesskey\");\n\n\t that._focused = that.input = input.attr({\n\t \"accesskey\": accessKey,\n\t \"autocomplete\": AUTOCOMPLETEVALUE,\n\t \"role\": \"listbox\",\n\t \"title\": element[0].title,\n\t \"aria-expanded\": false,\n\t \"aria-haspopup\": \"listbox\",\n\t \"aria-autocomplete\": \"list\"\n\t });\n\t },\n\n\t _tagList: function() {\n\t var that = this,\n\t tagList = that._inputWrapper.children(\"ul\");\n\n\t if (!tagList[0]) {\n\t tagList = $('
          ').appendTo(that._inputWrapper);\n\t }\n\n\t that.tagList = tagList;\n\t },\n\n\t _tagTemplate: function() {\n\t var that = this;\n\t var options = that.options;\n\t var tagTemplate = options.tagTemplate;\n\t var hasDataSource = options.dataSource;\n\t var isMultiple = options.tagMode === \"multiple\";\n\t var singleTag = options.messages.singleTag;\n\t var defaultTemplate;\n\n\t if (that.element[0].length && !hasDataSource) {\n\t options.dataTextField = options.dataTextField || \"text\";\n\t options.dataValueField = options.dataValueField || \"value\";\n\t }\n\n\t defaultTemplate = isMultiple ? kendo.template(\"#:\" + kendo.expr(options.dataTextField, \"data\") + \"#\", { useWithBlock: false }) : kendo.template(\"#:values.length# \" + singleTag);\n\n\t that.tagTextTemplate = tagTemplate = tagTemplate ? kendo.template(tagTemplate) : defaultTemplate;\n\n\t that.tagTemplate = function(data) {\n\t return '
        • ' +\n\t tagTemplate(data) + '' +\n\t '' +\n\t '
        • ';\n\t };\n\t },\n\n\t _loader: function() {\n\t this._loading = $('').insertAfter(this.input);\n\t },\n\n\t _clearButton: function() {\n\t List.fn._clearButton.call(this);\n\n\t if (this.options.clearButton) {\n\t this._clear.insertAfter(this.input);\n\t this.wrapper.addClass(\"k-multiselect-clearable\");\n\t }\n\t },\n\n\t _textContainer: function() {\n\t var computedStyles = kendo.getComputedStyles(this.input[0], styles);\n\n\t computedStyles.position = \"absolute\";\n\t computedStyles.visibility = \"hidden\";\n\t computedStyles.top = -3333;\n\t computedStyles.left = -3333;\n\n\t this._span = $(\"\").css(computedStyles).appendTo(this.wrapper);\n\t },\n\n\t _wrapper: function() {\n\t var that = this,\n\t element = that.element,\n\t wrapper = element.parent(\"span.k-multiselect\");\n\n\t if (!wrapper[0]) {\n\t wrapper = element.wrap('
          ').parent();\n\t wrapper[0].style.cssText = element[0].style.cssText;\n\t wrapper[0].title = element[0].title;\n\n\t $('
          ').insertBefore(element);\n\t }\n\n\t that.wrapper = wrapper.addClass(element[0].className).removeClass('input-validation-error').css(\"display\", \"\");\n\t that._inputWrapper = $(wrapper[0].firstChild);\n\t },\n\n\t _ariaSetSize: function(value) {\n\t var that = this;\n\t var selectedItems = that.tagList.children();\n\n\t if(value && selectedItems.length) {\n\t selectedItems.attr(\"aria-setsize\", value);\n\t }\n\t },\n\n\t _ariaSetLive: function() {\n\t var that = this;\n\n\t that.ul.attr(\"aria-live\", !that._isFilterEnabled() ? \"off\" : \"polite\");\n\t }\n\t });\n\n\t function compare(a, b) {\n\t var length;\n\n\t if ((a === null && b !== null) || (a !== null && b === null)) {\n\t return false;\n\t }\n\n\t length = a.length;\n\t if (length !== b.length) {\n\t return false;\n\t }\n\n\t while (length--) {\n\t if (a[length] !== b[length]) {\n\t return false;\n\t }\n\t }\n\n\t return true;\n\t }\n\n\t ui.plugin(MultiSelect);\n\n\t})(window.kendo.jQuery);\n\n\treturn window.kendo;\n\n\t}, __webpack_require__(3));\n\n\n/***/ })\n\n/******/ });","module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(1293);\n\n\n/***/ }),\n\n/***/ 3:\n/***/ (function(module, exports) {\n\n\tmodule.exports = function() { throw new Error(\"define cannot be used indirect\"); };\r\n\n\n/***/ }),\n\n/***/ 1018:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./kendo.core\");\n\n/***/ }),\n\n/***/ 1056:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./kendo.userevents\");\n\n/***/ }),\n\n/***/ 1247:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./kendo.floatinglabel\");\n\n/***/ }),\n\n/***/ 1293:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function(f, define){\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(1018), __webpack_require__(1056), __webpack_require__(1247) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (f), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t})(function(){\n\n\tvar __meta__ = { // jshint ignore:line\n\t id: \"numerictextbox\",\n\t name: \"NumericTextBox\",\n\t category: \"web\",\n\t description: \"The NumericTextBox widget can format and display numeric, percentage or currency textbox.\",\n\t depends: [ \"core\", \"userevents\", \"floatinglabel\" ]\n\t};\n\n\t(function($, undefined) {\n\t var kendo = window.kendo,\n\t caret = kendo.caret,\n\t keys = kendo.keys,\n\t ui = kendo.ui,\n\t Widget = ui.Widget,\n\t activeElement = kendo._activeElement,\n\t extractFormat = kendo._extractFormat,\n\t parse = kendo.parseFloat,\n\t placeholderSupported = kendo.support.placeholder,\n\t getCulture = kendo.getCulture,\n\t CHANGE = \"change\",\n\t DISABLED = \"disabled\",\n\t READONLY = \"readonly\",\n\t INPUT = \"k-input\",\n\t SPIN = \"spin\",\n\t ns = \".kendoNumericTextBox\",\n\t TOUCHEND = \"touchend\",\n\t MOUSELEAVE = \"mouseleave\" + ns,\n\t HOVEREVENTS = \"mouseenter\" + ns + \" \" + MOUSELEAVE,\n\t DEFAULT = \"k-state-default\",\n\t FOCUSED = \"k-state-focused\",\n\t HOVER = \"k-state-hover\",\n\t FOCUS = \"focus\",\n\t POINT = \".\",\n\t CLASS_ICON = \"k-icon\",\n\t LABELCLASSES = \"k-label k-input-label\",\n\t SELECTED = \"k-state-selected\",\n\t STATEDISABLED = \"k-state-disabled\",\n\t STATE_INVALID = \"k-state-invalid\",\n\t ARIA_DISABLED = \"aria-disabled\",\n\t INTEGER_REGEXP = /^(-)?(\\d*)$/,\n\t NULL = null,\n\t proxy = $.proxy,\n\t isPlainObject = $.isPlainObject,\n\t extend = $.extend;\n\n\t var NumericTextBox = Widget.extend({\n\t init: function(element, options) {\n\t var that = this,\n\t isStep = options && options.step !== undefined,\n\t min, max, step, value, disabled;\n\t var inputType;\n\n\t Widget.fn.init.call(that, element, options);\n\n\t options = that.options;\n\t element = that.element\n\t .on(\"focusout\" + ns, proxy(that._focusout, that))\n\t .attr(\"role\", \"spinbutton\");\n\n\t options.placeholder = options.placeholder || element.attr(\"placeholder\");\n\n\t min = that.min(element.attr(\"min\"));\n\t max = that.max(element.attr(\"max\"));\n\t step = that._parse(element.attr(\"step\"));\n\n\t if (options.min === NULL && min !== NULL) {\n\t options.min = min;\n\t }\n\n\t if (options.max === NULL && max !== NULL) {\n\t options.max = max;\n\t }\n\n\t if (!isStep && step !== NULL) {\n\t options.step = step;\n\t }\n\n\t that._initialOptions = extend({}, options);\n\n\t inputType = element.attr(\"type\");\n\n\t that._reset();\n\t that._wrapper();\n\t that._arrows();\n\t that._validation();\n\t that._input();\n\n\t if (!kendo.support.mobileOS) {\n\t that._text.on(FOCUS + ns, proxy(that._click, that));\n\t } else {\n\t that._text.on(TOUCHEND + ns + \" \" + FOCUS + ns, function() {\n\t if (kendo.support.browser.edge) {\n\t that._text.one(FOCUS + ns, function() {\n\t that._toggleText(false);\n\t element.focus();\n\t });\n\t } else {\n\t that._toggleText(false);\n\t element.focus();\n\t }\n\t });\n\t }\n\n\t element.attr(\"aria-valuemin\", options.min !== NULL ? options.min*options.factor : options.min)\n\t .attr(\"aria-valuemax\", options.max !== NULL ? options.max*options.factor : options.max);\n\n\t options.format = extractFormat(options.format);\n\n\t value = options.value;\n\n\t if (value == NULL) {\n\t if (inputType == \"number\") {\n\t value = parseFloat(element.val());\n\t } else {\n\t value = element.val();\n\t }\n\t }\n\n\t that.value(value);\n\n\t disabled = element.is(\"[disabled]\") || $(that.element).parents(\"fieldset\").is(':disabled');\n\n\t if (disabled) {\n\t that.enable(false);\n\t } else {\n\t that.readonly(element.is(\"[readonly]\"));\n\t }\n\n\t that.angular(\"compile\", function(){\n\t return {\n\t elements: that._text.get()\n\t };\n\t });\n\n\t that._label();\n\n\t kendo.notify(that);\n\t },\n\n\t options: {\n\t name: \"NumericTextBox\",\n\t decimals: NULL,\n\t restrictDecimals: false,\n\t min: NULL,\n\t max: NULL,\n\t value: NULL,\n\t step: 1,\n\t round: true,\n\t culture: \"\",\n\t format: \"n\",\n\t spinners: true,\n\t placeholder: \"\",\n\t factor: 1,\n\t upArrowText: \"Increase value\",\n\t downArrowText: \"Decrease value\",\n\t label: null\n\t },\n\t events: [\n\t CHANGE,\n\t SPIN\n\t ],\n\n\t _editable: function(options) {\n\t var that = this,\n\t element = that.element,\n\t disable = options.disable,\n\t readonly = options.readonly,\n\t text = that._text.add(element),\n\t wrapper = that._inputWrapper.off(HOVEREVENTS);\n\n\t that._toggleText(true);\n\n\t that._upArrowEventHandler.unbind(\"press\");\n\t that._downArrowEventHandler.unbind(\"press\");\n\t element\n\t .off(\"keydown\" + ns)\n\t .off(\"keyup\" + ns)\n\t .off(\"input\" + ns)\n\t .off(\"paste\" + ns);\n\n\t if (that._inputLabel) {\n\t that._inputLabel.off(ns);\n\t }\n\n\t if (!readonly && !disable) {\n\t wrapper\n\t .addClass(DEFAULT)\n\t .removeClass(STATEDISABLED)\n\t .on(HOVEREVENTS, that._toggleHover);\n\n\t text.removeAttr(DISABLED)\n\t .removeAttr(READONLY)\n\t .attr(ARIA_DISABLED, false);\n\n\t that._upArrowEventHandler.bind(\"press\", function(e) {\n\t e.preventDefault();\n\t that._spin(1);\n\t that._upArrow.addClass(SELECTED);\n\t });\n\n\t that._downArrowEventHandler.bind(\"press\", function(e) {\n\t e.preventDefault();\n\t that._spin(-1);\n\t that._downArrow.addClass(SELECTED);\n\t });\n\n\t that.element\n\t .on(\"keydown\" + ns, proxy(that._keydown, that))\n\t .on(\"keyup\" + ns, proxy(that._keyup, that))\n\t .on(\"paste\" + ns, proxy(that._paste, that))\n\t .on(\"input\" + ns, proxy(that._inputHandler, that));\n\n\t if (that._inputLabel) {\n\t that._inputLabel.on(\"click\" + ns, proxy(that.focus, that));\n\t }\n\n\t } else {\n\t wrapper\n\t .addClass(disable ? STATEDISABLED : DEFAULT)\n\t .removeClass(disable ? DEFAULT : STATEDISABLED);\n\n\t text.attr(DISABLED, disable)\n\t .attr(READONLY, readonly)\n\t .attr(ARIA_DISABLED, disable);\n\t }\n\t },\n\n\t readonly: function(readonly) {\n\t var that = this;\n\n\t this._editable({\n\t readonly: readonly === undefined ? true : readonly,\n\t disable: false\n\t });\n\n\t if (that.floatingLabel) {\n\t that.floatingLabel.readonly(readonly === undefined ? true : readonly);\n\t }\n\t },\n\n\t enable: function(enable) {\n\t var that = this;\n\n\t this._editable({\n\t readonly: false,\n\t disable: !(enable = enable === undefined ? true : enable)\n\t });\n\n\t if (that.floatingLabel) {\n\t that.floatingLabel.enable(enable = enable === undefined ? true : enable);\n\t }\n\t },\n\n\t setOptions: function (options) {\n\t var that = this;\n\t Widget.fn.setOptions.call(that, options);\n\n\t that._arrowsWrap.toggle(that.options.spinners);\n\t that._inputWrapper.toggleClass(\"k-expand-padding\", !that.options.spinners);\n\t that._text.prop(\"placeholder\", that.options.placeholder);\n\t that._placeholder(that.options.placeholder);\n\t that.element.attr({\n\t \"aria-valuemin\": that.options.min !== NULL ? that.options.min*that.options.factor : that.options.min,\n\t \"aria-valuemax\": that.options.max !== NULL ? that.options.max*that.options.factor : that.options.max\n\t });\n\n\t that.options.format = extractFormat(that.options.format);\n\n\t if (options.value !== undefined) {\n\t that.value(options.value);\n\t }\n\t },\n\n\t destroy: function() {\n\t var that = this;\n\n\t if (that._inputLabel) {\n\t that._inputLabel.off(ns);\n\n\t if (that.floatingLabel) {\n\t that.floatingLabel.destroy();\n\t }\n\t }\n\n\t that.element\n\t .add(that._text)\n\t .add(that._upArrow)\n\t .add(that._downArrow)\n\t .add(that._inputWrapper)\n\t .off(ns);\n\n\t that._upArrowEventHandler.destroy();\n\t that._downArrowEventHandler.destroy();\n\n\t if (that._form) {\n\t that._form.off(\"reset\", that._resetHandler);\n\t }\n\n\t Widget.fn.destroy.call(that);\n\t },\n\n\t min: function(value) {\n\t return this._option(\"min\", value);\n\t },\n\n\t max: function(value) {\n\t return this._option(\"max\", value);\n\t },\n\n\t step: function(value) {\n\t return this._option(\"step\", value);\n\t },\n\n\t value: function(value) {\n\t var that = this, adjusted;\n\n\t if (value === undefined) {\n\t return that._value;\n\t }\n\n\t value = that._parse(value);\n\t adjusted = that._adjust(value);\n\n\t if (value !== adjusted) {\n\t return;\n\t }\n\n\t that._update(value);\n\t that._old = that._value;\n\t },\n\n\t focus: function() {\n\t this._focusin();\n\t },\n\n\t _adjust: function(value) {\n\t var that = this,\n\t options = that.options,\n\t min = options.min,\n\t max = options.max;\n\n\t if (value === NULL) {\n\t return value;\n\t }\n\n\t if (min !== NULL && value < min) {\n\t value = min;\n\t } else if (max !== NULL && value > max) {\n\t value = max;\n\t }\n\n\t return value;\n\t },\n\n\t _arrows: function() {\n\t var that = this,\n\t arrows,\n\t _release = function() {\n\t clearTimeout( that._spinning );\n\t arrows.removeClass(SELECTED);\n\t },\n\t options = that.options,\n\t spinners = options.spinners,\n\t element = that.element;\n\n\t arrows = element.siblings(\".\" + CLASS_ICON);\n\n\t if (!arrows[0]) {\n\t arrows = $(buttonHtml(\"increase\", options.upArrowText) + buttonHtml(\"decrease\", options.downArrowText))\n\t .insertAfter(element);\n\n\t that._arrowsWrap = arrows.wrapAll('').parent();\n\t }\n\n\t if (!spinners) {\n\t arrows.parent().toggle(spinners);\n\t that._inputWrapper.addClass(\"k-expand-padding\");\n\t }\n\n\t that._upArrow = arrows.eq(0);\n\t that._upArrowEventHandler = new kendo.UserEvents(that._upArrow, { release: _release });\n\t that._downArrow = arrows.eq(1);\n\t that._downArrowEventHandler = new kendo.UserEvents(that._downArrow, { release: _release });\n\t },\n\n\t _validation: function () {\n\t var that = this;\n\t var element = that.element;\n\n\t that._validationIcon = $(\"\")\n\t .hide()\n\t .insertAfter(element);\n\t },\n\n\t _blur: function() {\n\t var that = this;\n\n\t that._toggleText(true);\n\n\t that._change(that.element.val());\n\t },\n\n\t _click: function(e) {\n\t var that = this;\n\n\t clearTimeout(that._focusing);\n\t that._focusing = setTimeout(function() {\n\t var input = e.target,\n\t idx = caret(input)[0],\n\t value = input.value.substring(0, idx),\n\t format = that._format(that.options.format),\n\t group = format[\",\"],\n\t result, groupRegExp, extractRegExp,\n\t caretPosition = 0;\n\n\t if (group) {\n\t groupRegExp = new RegExp(\"\\\\\" + group, \"g\");\n\t extractRegExp = new RegExp(\"(^(-)$)|(^(-)?([\\\\d\\\\\" + group + \"]+)(\\\\\" + format[POINT] + \")?(\\\\d+)?)\");\n\t }\n\n\t if (extractRegExp) {\n\t result = extractRegExp.exec(value);\n\t }\n\n\t if (result) {\n\t caretPosition = result[0].replace(groupRegExp, \"\").length;\n\n\t if (value.indexOf(\"(\") != -1 && that._value < 0) {\n\t caretPosition++;\n\t }\n\t }\n\n\t that._focusin();\n\n\t caret(that.element[0], caretPosition);\n\t });\n\t },\n\n\t _change: function(value) {\n\t var that = this,\n\t factor = that.options.factor;\n\n\t if(factor && factor !== 1){\n\t value = kendo.parseFloat(value);\n\t if(value !== null) {\n\t value = value/factor;\n\t }\n\t }\n\n\t that._update(value);\n\t value = that._value;\n\n\t if (that._old != value) {\n\t that._old = value;\n\n\t if (!that._typing) {\n\t // trigger the DOM change event so any subscriber gets notified\n\t that.element.trigger(CHANGE);\n\t }\n\n\t that.trigger(CHANGE);\n\t }\n\n\t that._typing = false;\n\t },\n\n\t _culture: function(culture) {\n\t return culture || getCulture(this.options.culture);\n\t },\n\n\t _focusin: function() {\n\t var that = this;\n\t that._inputWrapper.addClass(FOCUSED);\n\t that._toggleText(false);\n\t that.element[0].focus();\n\t },\n\n\t _focusout: function() {\n\t var that = this;\n\n\t clearTimeout(that._focusing);\n\t that._inputWrapper.removeClass(FOCUSED).removeClass(HOVER);\n\t that._blur();\n\t that._removeInvalidState();\n\t },\n\n\t _format: function(format, culture) {\n\t var numberFormat = this._culture(culture).numberFormat;\n\n\t format = format.toLowerCase();\n\n\t if (format.indexOf(\"c\") > -1) {\n\t numberFormat = numberFormat.currency;\n\t } else if (format.indexOf(\"p\") > -1) {\n\t numberFormat = numberFormat.percent;\n\t }\n\n\t return numberFormat;\n\t },\n\n\t _input: function() {\n\t var that = this,\n\t options = that.options,\n\t CLASSNAME = \"k-formatted-value\",\n\t element = that.element.addClass(INPUT).show()[0],\n\t accessKey = element.accessKey,\n\t wrapper = that.wrapper,\n\t text;\n\n\t text = wrapper.find(POINT + CLASSNAME);\n\n\t if (!text[0]) {\n\t text = $('').insertBefore(element).addClass(CLASSNAME).attr(\"aria-hidden\", \"true\");\n\t }\n\n\t try {\n\t element.setAttribute(\"type\", \"text\");\n\t } catch(e) {\n\t element.type = \"text\";\n\t }\n\n\t text[0].title = element.title;\n\t text[0].tabIndex = element.tabIndex;\n\t text[0].style.cssText = element.style.cssText;\n\t text.prop(\"placeholder\", options.placeholder);\n\n\t if (accessKey) {\n\t text.attr(\"accesskey\", accessKey);\n\t element.accessKey = \"\";\n\t }\n\n\n\t that._text = text.addClass(element.className)\n\t .attr({\n\t \"role\": \"spinbutton\",\n\t \"aria-valuemin\": options.min !== NULL ? options.min*options.factor : options.min,\n\t \"aria-valuemax\": options.max !== NULL ? options.max*options.factor : options.max,\n\t \"autocomplete\": \"off\"\n\t });\n\t },\n\n\t _keydown: function(e) {\n\t var that = this,\n\t key = e.keyCode;\n\n\t if (key === keys.NUMPAD_DOT) {\n\t that._numPadDot = true;\n\t }\n\n\t if (key == keys.DOWN) {\n\t that._step(-1);\n\t return;\n\t } else if (key == keys.UP) {\n\t that._step(1);\n\t return;\n\t } else if (key == keys.ENTER) {\n\t that._change(that.element.val());\n\t return;\n\t }\n\n\t if (key != keys.TAB) {\n\t that._typing = true;\n\t }\n\t that._cachedCaret = caret(that.element);\n\t },\n\n\t _keyup: function () {\n\t this._removeInvalidState();\n\t },\n\n\t _inputHandler: function () {\n\t var element = this.element;\n\t var value = element.val();\n\t var min = this.options.min;\n\t var numberFormat = this._format(this.options.format);\n\t var decimalSeparator = numberFormat[POINT];\n\t var minInvalid = (min !== null && min >= 0 && value.charAt(0) === \"-\");\n\t \n\t if (this._numPadDot && decimalSeparator !== POINT) {\n\t value = value.replace(POINT, decimalSeparator);\n\t this.element.val(value);\n\t this._numPadDot = false;\n\t }\n\n\t if (this._numericRegex(numberFormat).test(value) && !minInvalid) {\n\t this._oldText = value;\n\t } else {\n\t this._blinkInvalidState();\n\t this.element.val(this._oldText);\n\t if (this._cachedCaret) {\n\t caret(element, this._cachedCaret[0]);\n\t this._cachedCaret = null;\n\t }\n\t }\n\t },\n\n\t _blinkInvalidState: function () {\n\t var that = this;\n\n\t that._addInvalidState();\n\t clearTimeout(that._invalidStateTimeout);\n\t that._invalidStateTimeout = setTimeout(proxy(that._removeInvalidState, that), 100);\n\t },\n\n\t _addInvalidState: function () {\n\t var that = this;\n\t that._inputWrapper.addClass(STATE_INVALID);\n\t that._validationIcon.show();\n\t },\n\n\t _removeInvalidState: function () {\n\t var that = this;\n\t that._inputWrapper.removeClass(STATE_INVALID);\n\t that._validationIcon.hide();\n\t that._invalidStateTimeout = null;\n\t },\n\n\t _numericRegex: function(numberFormat) {\n\t var that = this;\n\t var separator = numberFormat[POINT];\n\t var precision = that.options.decimals;\n\t var fractionRule = \"*\";\n\n\t if (separator === POINT) {\n\t separator = \"\\\\\" + separator;\n\t }\n\n\t if (precision === NULL) {\n\t precision = numberFormat.decimals;\n\t }\n\n\t if (precision === 0 && that.options.restrictDecimals) {\n\t return INTEGER_REGEXP;\n\t }\n\n\t if (that.options.restrictDecimals) {\n\t fractionRule = \"{0,\" + precision + \"}\";\n\t }\n\n\t if (that._separator !== separator) {\n\t that._separator = separator;\n\t that._floatRegExp = new RegExp(\"^(-)?(((\\\\d+(\" + separator + \"\\\\d\" + fractionRule + \")?)|(\" + separator + \"\\\\d\" + fractionRule + \")))?$\");\n\t }\n\n\t return that._floatRegExp;\n\t },\n\n\t _paste: function(e) {\n\t var that = this;\n\t var element = e.target;\n\t var value = element.value;\n\t var numberFormat = that._format(that.options.format);\n\n\t setTimeout(function() {\n\t var result = that._parse(element.value);\n\n\t if (result === NULL) {\n\t that._update(value);\n\t } else {\n\t element.value = result.toString().replace(POINT, numberFormat[POINT]);\n\t if (that._adjust(result) !== result || !that._numericRegex(numberFormat).test(element.value)) {\n\t that._update(value);\n\t }\n\t }\n\t });\n\t },\n\n\t _option: function(option, value) {\n\t var that = this,\n\t element = that.element,\n\t options = that.options;\n\n\t if (value === undefined) {\n\t return options[option];\n\t }\n\n\t value = that._parse(value);\n\n\t if (!value && option === \"step\") {\n\t return;\n\t }\n\n\t options[option] = value;\n\t element\n\t .add(that._text)\n\t .attr(\"aria-value\" + option, value);\n\n\t element.attr(option, value);\n\t },\n\n\t _spin: function(step, timeout) {\n\t var that = this;\n\n\t timeout = timeout || 500;\n\n\t clearTimeout( that._spinning );\n\t that._spinning = setTimeout(function() {\n\t that._spin(step, 50);\n\t }, timeout );\n\n\t that._step(step);\n\t },\n\n\t _step: function(step) {\n\t var that = this,\n\t element = that.element,\n\t originalValue = that._value,\n\t value = that._parse(element.val()) || 0,\n\t precision = that.options.decimals || 2;\n\n\t if (activeElement() != element[0]) {\n\t that._focusin();\n\t }\n\n\t if(that.options.factor && value) {\n\t value = value/that.options.factor;\n\t }\n\n\t value = +(value + that.options.step * step).toFixed(precision);\n\t value = that._adjust(value);\n\t that._update(value);\n\t that._typing = false;\n\n\t if (originalValue !== value) {\n\t that.trigger(SPIN);\n\t }\n\t },\n\n\t _toggleHover: function(e) {\n\t $(e.currentTarget).toggleClass(HOVER, e.type === \"mouseenter\");\n\t },\n\n\t _toggleText: function(toggle) {\n\t var that = this;\n\n\t that._text.toggle(toggle);\n\t that.element.toggle(!toggle);\n\t },\n\n\t _parse: function(value, culture) {\n\t return parse(value, this._culture(culture), this.options.format);\n\t },\n\n\t _round: function(value, precision) {\n\t var rounder = this.options.round ? kendo._round : truncate;\n\n\t return rounder(value, precision);\n\t },\n\n\t _update: function(value) {\n\t var that = this,\n\t options = that.options,\n\t factor = options.factor,\n\t format = options.format,\n\t decimals = options.decimals,\n\t culture = that._culture(),\n\t numberFormat = that._format(format, culture),\n\t isNotNull;\n\n\t if (decimals === NULL) {\n\t decimals = numberFormat.decimals;\n\t }\n\n\t value = that._parse(value, culture);\n\n\t isNotNull = value !== NULL;\n\n\t if (isNotNull) {\n\t value = parseFloat(that._round(value, decimals), 10);\n\t }\n\n\t that._value = value = that._adjust(value);\n\t that._placeholder(kendo.toString(value, format, culture));\n\n\t if (isNotNull) {\n\t if(factor) {\n\t value = parseFloat(that._round(value*factor, decimals), 10);\n\t }\n\t value = value.toString();\n\t if (value.indexOf(\"e\") !== -1) {\n\t value = that._round(+value, decimals);\n\t }\n\t value = value.replace(POINT, numberFormat[POINT]);\n\t } else {\n\t value = null;\n\t }\n\n\t that.element.val(value);\n\t that._oldText = value;\n\t that.element.add(that._text).attr(\"aria-valuenow\", value);\n\t },\n\n\t _placeholder: function(value) {\n\t var input = this._text;\n\n\t input.val(value);\n\t if (!placeholderSupported && !value) {\n\t input.val(this.options.placeholder);\n\t }\n\n\t input.attr(\"title\", this.element.attr(\"title\") || input.val());\n\t },\n\n\t _label: function() {\n\t var that = this;\n\t var element = that.element;\n\t var options = that.options;\n\t var id = element.attr(\"id\");\n\t var floating;\n\t var labelText;\n\n\t if (options.label !== null) {\n\t floating = isPlainObject(options.label) ? options.label.floating : false;\n\t labelText = isPlainObject(options.label) ? options.label.content : options.label;\n\n\t if (floating) {\n\t that._floatingLabelContainer = that.wrapper.wrap(\"\").parent();\n\t that.floatingLabel = new kendo.ui.FloatingLabel(that._floatingLabelContainer, { widget: that });\n\t }\n\n\t if (kendo.isFunction(labelText)) {\n\t labelText = labelText.call(that);\n\t }\n\n\t if (!labelText) {\n\t labelText = \"\";\n\t }\n\n\t if (!id) {\n\t id = options.name + \"_\" + kendo.guid();\n\t element.attr(\"id\", id);\n\t }\n\n\t that._inputLabel = $(\"'\").insertBefore(that.wrapper);\n\n\t if ((that.element.attr(\"disabled\") === undefined) && (that.element.attr(\"readonly\") === undefined)) {\n\t that._inputLabel.on(\"click\" + ns, proxy(that.focus, that));\n\t }\n\t }\n\t },\n\n\t _wrapper: function() {\n\t var that = this,\n\t element = that.element,\n\t DOMElement = element[0],\n\t wrapper;\n\n\t wrapper = element.parents(\".k-numerictextbox\");\n\n\t if (!wrapper.is(\"span.k-numerictextbox\")) {\n\t wrapper = element.hide().wrap('').parent();\n\t wrapper = wrapper.wrap(\"\").parent();\n\t }\n\n\t wrapper[0].style.cssText = DOMElement.style.cssText;\n\t DOMElement.style.width = \"\";\n\t that.wrapper = wrapper.addClass(\"k-widget k-numerictextbox\")\n\t .addClass(DOMElement.className)\n\t .removeClass('input-validation-error')\n\t .css(\"display\", \"\");\n\n\t that._inputWrapper = $(wrapper[0].firstChild);\n\t },\n\n\t _reset: function() {\n\t var that = this,\n\t element = that.element,\n\t formId = element.attr(\"form\"),\n\t form = formId ? $(\"#\" + formId) : element.closest(\"form\");\n\n\t if (form[0]) {\n\t that._resetHandler = function() {\n\t setTimeout(function() {\n\t that.value(element[0].value);\n\t that.max(that._initialOptions.max);\n\t that.min(that._initialOptions.min);\n\t });\n\t };\n\n\t that._form = form.on(\"reset\", that._resetHandler);\n\t }\n\t }\n\t });\n\n\t function buttonHtml(direction, text) {\n\t var className = \"k-i-arrow-\" + (direction === \"increase\" ? \"60-up\" : \"60-down\");\n\n\t return (\n\t '' +\n\t '' +\n\t ''\n\t );\n\t }\n\n\t function truncate(value, precision) {\n\t var parts = parseFloat(value, 10).toString().split(POINT);\n\n\t if (parts[1]) {\n\t parts[1] = parts[1].substring(0, precision);\n\t }\n\n\t return parts.join(POINT);\n\n\t }\n\n\t ui.plugin(NumericTextBox);\n\t})(window.kendo.jQuery);\n\n\treturn window.kendo;\n\n\t}, __webpack_require__(3));\n\n\n/***/ })\n\n/******/ });","module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(1315);\n\n\n/***/ }),\n\n/***/ 3:\n/***/ (function(module, exports) {\n\n\tmodule.exports = function() { throw new Error(\"define cannot be used indirect\"); };\r\n\n\n/***/ }),\n\n/***/ 1018:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./kendo.core\");\n\n/***/ }),\n\n/***/ 1315:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function(f, define){\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(1018) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (f), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t})(function(){\n\n\tvar __meta__ = { // jshint ignore:line\n\t id: \"popup\",\n\t name: \"Pop-up\",\n\t category: \"framework\",\n\t depends: [ \"core\" ],\n\t advanced: true\n\t};\n\n\t(function($, undefined) {\n\t var kendo = window.kendo,\n\t ui = kendo.ui,\n\t Widget = ui.Widget,\n\t Class = kendo.Class,\n\t support = kendo.support,\n\t getOffset = kendo.getOffset,\n\t outerWidth = kendo._outerWidth,\n\t outerHeight = kendo._outerHeight,\n\t OPEN = \"open\",\n\t CLOSE = \"close\",\n\t DEACTIVATE = \"deactivate\",\n\t ACTIVATE = \"activate\",\n\t CENTER = \"center\",\n\t LEFT = \"left\",\n\t RIGHT = \"right\",\n\t TOP = \"top\",\n\t BOTTOM = \"bottom\",\n\t ABSOLUTE = \"absolute\",\n\t HIDDEN = \"hidden\",\n\t BODY = \"body\",\n\t LOCATION = \"location\",\n\t POSITION = \"position\",\n\t VISIBLE = \"visible\",\n\t EFFECTS = \"effects\",\n\t ACTIVE = \"k-state-active\",\n\t ACTIVEBORDER = \"k-state-border\",\n\t ACTIVEBORDERREGEXP = /k-state-border-(\\w+)/,\n\t ACTIVECHILDREN = \".k-picker-wrap, .k-dropdown-wrap, .k-link\",\n\t MOUSEDOWN = \"down\",\n\t DOCUMENT_ELEMENT = $(document.documentElement),\n\t proxy = $.proxy,\n\t WINDOW = $(window),\n\t SCROLL = \"scroll\",\n\t cssPrefix = support.transitions.css,\n\t TRANSFORM = cssPrefix + \"transform\",\n\t extend = $.extend,\n\t NS = \".kendoPopup\",\n\t styles = [\"font-size\",\n\t \"font-family\",\n\t \"font-stretch\",\n\t \"font-style\",\n\t \"font-weight\",\n\t \"line-height\"];\n\n\t function contains(container, target) {\n\t if (!container || !target) {\n\t return false;\n\t }\n\t return container === target || $.contains(container, target);\n\t }\n\n\t var Popup = Widget.extend({\n\t init: function(element, options) {\n\t var that = this, parentPopup;\n\n\t options = options || {};\n\n\t if (options.isRtl) {\n\t options.origin = options.origin || BOTTOM + \" \" + RIGHT;\n\t options.position = options.position || TOP + \" \" + RIGHT;\n\t }\n\n\t Widget.fn.init.call(that, element, options);\n\n\t element = that.element;\n\t options = that.options;\n\n\t that.collisions = options.collision ? options.collision.split(\" \") : [];\n\t that.downEvent = kendo.applyEventMap(MOUSEDOWN, kendo.guid());\n\n\t if (that.collisions.length === 1) {\n\t that.collisions.push(that.collisions[0]);\n\t }\n\n\t parentPopup = $(that.options.anchor).closest(\".k-popup,.k-group\").filter(\":not([class^=km-])\"); // When popup is in another popup, make it relative.\n\n\t options.appendTo = $($(options.appendTo)[0] || parentPopup[0] || document.body);\n\n\t that.element.hide()\n\t .addClass(\"k-popup k-group k-reset\")\n\t .toggleClass(\"k-rtl\", !!options.isRtl)\n\t .css({ position : ABSOLUTE })\n\t .appendTo(options.appendTo)\n\t .attr(\"aria-hidden\", true)\n\t .on(\"mouseenter\" + NS, function() {\n\t that._hovered = true;\n\t })\n\t .on(\"wheel\" + NS, function(e) {\n\t var list = $(e.target).find(\".k-list\");\n\t var scrollArea = list.parent();\n\t if (list.length && list.is(\":visible\") && ((scrollArea.scrollTop() === 0 && e.originalEvent.deltaY < 0) ||\n\t (scrollArea.scrollTop() === scrollArea.prop('scrollHeight') - scrollArea.prop('offsetHeight') && e.originalEvent.deltaY > 0))) {\n\t e.preventDefault();\n\t }\n\t })\n\t .on(\"mouseleave\" + NS, function() {\n\t that._hovered = false;\n\t });\n\n\t that.wrapper = $();\n\n\t if (options.animation === false) {\n\t options.animation = { open: { effects: {} }, close: { hide: true, effects: {} } };\n\t }\n\n\t extend(options.animation.open, {\n\t complete: function() {\n\t that.wrapper.css({ overflow: VISIBLE }); // Forcing refresh causes flickering in mobile.\n\t that._activated = true;\n\t that._trigger(ACTIVATE);\n\t }\n\t });\n\n\t extend(options.animation.close, {\n\t complete: function() {\n\t that._animationClose();\n\t }\n\t });\n\n\t that._mousedownProxy = function(e) {\n\t that._mousedown(e);\n\t };\n\n\t if (support.mobileOS.android) {\n\t that._resizeProxy = function(e) {\n\t setTimeout(function() {\n\t that._resize(e);\n\t }, 600); //Logic from kendo.onResize\n\t };\n\t } else {\n\t that._resizeProxy = function(e) {\n\t that._resize(e);\n\t };\n\t }\n\n\t if (options.toggleTarget) {\n\t $(options.toggleTarget).on(options.toggleEvent + NS, $.proxy(that.toggle, that));\n\t }\n\t },\n\n\t events: [\n\t OPEN,\n\t ACTIVATE,\n\t CLOSE,\n\t DEACTIVATE\n\t ],\n\n\t options: {\n\t name: \"Popup\",\n\t toggleEvent: \"click\",\n\t origin: BOTTOM + \" \" + LEFT,\n\t position: TOP + \" \" + LEFT,\n\t anchor: BODY,\n\t appendTo: null,\n\t collision: \"flip fit\",\n\t viewport: window,\n\t copyAnchorStyles: true,\n\t autosize: false,\n\t modal: false,\n\t adjustSize: {\n\t width: 0,\n\t height: 0\n\t },\n\t animation: {\n\t open: {\n\t effects: \"slideIn:down\",\n\t transition: true,\n\t duration: 200\n\t },\n\t close: { // if close animation effects are defined, they will be used instead of open.reverse\n\t duration: 100,\n\t hide: true\n\t }\n\t }\n\t },\n\n\t _animationClose: function() {\n\t var that = this;\n\t var location = that.wrapper.data(LOCATION);\n\n\t that.wrapper.hide();\n\n\t if (location) {\n\t that.wrapper.css(location);\n\t }\n\n\t if (that.options.anchor != BODY) {\n\t that._hideDirClass();\n\t }\n\n\t that._closing = false;\n\t that._trigger(DEACTIVATE);\n\t },\n\n\t destroy: function() {\n\t var that = this,\n\t options = that.options,\n\t element = that.element.off(NS),\n\t parent;\n\n\t Widget.fn.destroy.call(that);\n\n\t if (options.toggleTarget) {\n\t $(options.toggleTarget).off(NS);\n\t }\n\n\t if (!options.modal) {\n\t DOCUMENT_ELEMENT.off(that.downEvent, that._mousedownProxy);\n\t that._toggleResize(false);\n\t }\n\n\t kendo.destroy(that.element.children());\n\t element.removeData();\n\n\t if (options.appendTo[0] === document.body) {\n\t parent = element.parent(\".k-animation-container\");\n\n\t if (parent[0]) {\n\t parent.remove();\n\t } else {\n\t element.remove();\n\t }\n\t }\n\t },\n\n\t open: function(x, y) {\n\t var that = this,\n\t fixed = { isFixed: !isNaN(parseInt(y,10)), x: x, y: y },\n\t element = that.element,\n\t options = that.options,\n\t animation, wrapper,\n\t anchor = $(options.anchor),\n\t mobile = element[0] && element.hasClass(\"km-widget\");\n\n\t if (!that.visible()) {\n\t if (options.copyAnchorStyles) {\n\t if (mobile && styles[0] == \"font-size\") {\n\t styles.shift();\n\t }\n\t element.css(kendo.getComputedStyles(anchor[0], styles));\n\t }\n\n\t if (element.data(\"animating\") || that._trigger(OPEN)) {\n\t return;\n\t }\n\n\t that._activated = false;\n\n\t if (!options.modal) {\n\t DOCUMENT_ELEMENT.off(that.downEvent, that._mousedownProxy)\n\t .on(that.downEvent, that._mousedownProxy);\n\n\t // this binding hangs iOS in editor\n\t // all elements in IE7/8 fire resize event, causing mayhem\n\t that._toggleResize(false);\n\t that._toggleResize(true);\n\t }\n\n\t that.wrapper = wrapper = kendo.wrap(element, options.autosize)\n\t .css({\n\t overflow: HIDDEN,\n\t display: \"block\",\n\t position: ABSOLUTE\n\t })\n\t .attr(\"aria-hidden\", false);\n\n\t if (support.mobileOS.android) {\n\t wrapper.css(TRANSFORM, \"translatez(0)\"); // Android is VERY slow otherwise. Should be tested in other droids as well since it may cause blur.\n\t }\n\n\t wrapper.css(POSITION);\n\n\t if ($(options.appendTo)[0] == document.body) {\n\t wrapper.css(TOP, \"-10000px\");\n\t }\n\n\t that.flipped = that._position(fixed);\n\t animation = that._openAnimation();\n\n\t if (options.anchor != BODY) {\n\t that._showDirClass(animation);\n\t }\n\n\t if (!element.is(\":visible\") && element.data(\"olddisplay\") === undefined) {\n\t element.show();\n\t element.data(\"olddisplay\", element.css(\"display\"));\n\t element.hide();\n\t }\n\n\t element.data(EFFECTS, animation.effects)\n\t .kendoStop(true)\n\t .kendoAnimate(animation)\n\t .attr(\"aria-hidden\", false);\n\t }\n\t },\n\n\t _location: function(isFixed) {\n\t var that = this,\n\t element = that.element,\n\t options = that.options,\n\t wrapper,\n\t anchor = $(options.anchor),\n\t mobile = element[0] && element.hasClass(\"km-widget\");\n\n\t if (options.copyAnchorStyles) {\n\t if (mobile && styles[0] == \"font-size\") {\n\t styles.shift();\n\t }\n\t element.css(kendo.getComputedStyles(anchor[0], styles));\n\t }\n\n\t that.wrapper = wrapper = kendo.wrap(element, options.autosize)\n\t .css({\n\t overflow: HIDDEN,\n\t display: \"block\",\n\t position: ABSOLUTE\n\t });\n\n\t if (support.mobileOS.android) {\n\t wrapper.css(TRANSFORM, \"translatez(0)\"); // Android is VERY slow otherwise. Should be tested in other droids as well since it may cause blur.\n\t }\n\n\t wrapper.css(POSITION);\n\n\t if ($(options.appendTo)[0] == document.body) {\n\t wrapper.css(TOP, \"-10000px\");\n\t }\n\n\t that._position(isFixed || {});\n\n\t var offset = wrapper.offset();\n\t return {\n\t width: kendo._outerWidth(wrapper),\n\t height: kendo._outerHeight(wrapper),\n\t left: offset.left,\n\t top: offset.top\n\t };\n\t },\n\n\t _openAnimation: function() {\n\t var animation = extend(true, {}, this.options.animation.open);\n\t animation.effects = kendo.parseEffects(animation.effects, this.flipped);\n\n\t return animation;\n\t },\n\n\t _hideDirClass: function() {\n\t var anchor = $(this.options.anchor);\n\t var direction = ((anchor.attr(\"class\") || \"\").match(ACTIVEBORDERREGEXP) || [\"\", \"down\"])[1];\n\t var dirClass = ACTIVEBORDER + \"-\" + direction;\n\n\t anchor\n\t .removeClass(dirClass)\n\t .children(ACTIVECHILDREN)\n\t .removeClass(ACTIVE)\n\t .removeClass(dirClass);\n\n\t this.element.removeClass(ACTIVEBORDER + \"-\" + kendo.directions[direction].reverse);\n\t },\n\n\t _showDirClass: function(animation) {\n\t var direction = animation.effects.slideIn ? animation.effects.slideIn.direction : \"down\";\n\t var dirClass = ACTIVEBORDER + \"-\" + direction;\n\n\t $(this.options.anchor)\n\t .addClass(dirClass)\n\t .children(ACTIVECHILDREN)\n\t .addClass(ACTIVE)\n\t .addClass(dirClass);\n\n\t this.element.addClass(ACTIVEBORDER + \"-\" + kendo.directions[direction].reverse);\n\t },\n\n\t position: function() {\n\t if (this.visible()) {\n\t this.flipped = this._position();\n\t //this._hideDirClass();\n\t //this._showDirClass(this._openAnimation());\n\t }\n\t },\n\n\t toggle: function() {\n\t var that = this;\n\n\t that[that.visible() ? CLOSE : OPEN]();\n\t },\n\n\t visible: function() {\n\t return this.element.is(\":\" + VISIBLE);\n\t },\n\n\t close: function(skipEffects) {\n\t var that = this,\n\t options = that.options, wrap,\n\t animation, openEffects, closeEffects;\n\n\t if (that.visible()) {\n\t wrap = (that.wrapper[0] ? that.wrapper : kendo.wrap(that.element).hide());\n\n\t that._toggleResize(false);\n\n\t if (that._closing || that._trigger(CLOSE)) {\n\t that._toggleResize(true);\n\t return;\n\t }\n\n\t // Close all inclusive popups.\n\t that.element.find(\".k-popup\").each(function () {\n\t var that = $(this),\n\t popup = that.data(\"kendoPopup\");\n\n\t if (popup) {\n\t popup.close(skipEffects);\n\t }\n\t });\n\n\t DOCUMENT_ELEMENT.off(that.downEvent, that._mousedownProxy);\n\n\t if (skipEffects) {\n\t animation = { hide: true, effects: {} };\n\t } else {\n\t animation = extend(true, {}, options.animation.close);\n\t openEffects = that.element.data(EFFECTS);\n\t closeEffects = animation.effects;\n\n\t if (!closeEffects && !kendo.size(closeEffects) && openEffects && kendo.size(openEffects)) {\n\t animation.effects = openEffects;\n\t animation.reverse = true;\n\t }\n\n\t that._closing = true;\n\t }\n\n\t that.element\n\t .kendoStop(true)\n\t .attr(\"aria-hidden\", true);\n\t wrap\n\t .css({ overflow: HIDDEN }) // stop callback will remove hidden overflow\n\t .attr(\"aria-hidden\", true);\n\t that.element.kendoAnimate(animation);\n\n\t if (skipEffects) {\n\t that._animationClose();\n\t }\n\t }\n\t },\n\n\t _trigger: function(ev) {\n\t return this.trigger(ev, { type: ev });\n\t },\n\n\t _resize: function(e) {\n\t var that = this;\n\n\t if (support.resize.indexOf(e.type) !== -1) {\n\t clearTimeout(that._resizeTimeout);\n\t that._resizeTimeout = setTimeout(function() {\n\t that._position();\n\t that._resizeTimeout = null;\n\t }, 50);\n\t } else {\n\t if (!that._hovered || (that._activated && that.element.hasClass(\"k-list-container\"))) {\n\t that.close();\n\t }\n\t }\n\t },\n\n\t _toggleResize: function(toggle) {\n\t var method = toggle ? \"on\" : \"off\";\n\t var eventNames = support.resize;\n\n\t if (!(support.mobileOS.ios || support.mobileOS.android || support.browser.safari)) {\n\t eventNames += \" \" + SCROLL;\n\t }\n\n\t if (toggle && !this.scrollableParents) {\n\t this.scrollableParents = this._scrollableParents();\n\t }\n\n\t if (this.scrollableParents && this.scrollableParents.length) {\n\t this.scrollableParents[method](SCROLL, this._resizeProxy);\n\t }\n\n\t WINDOW[method](eventNames, this._resizeProxy);\n\t },\n\n\t _mousedown: function(e) {\n\t var that = this,\n\t container = that.element[0],\n\t options = that.options,\n\t anchor = $(options.anchor)[0],\n\t toggleTarget = options.toggleTarget,\n\t target = kendo.eventTarget(e),\n\t popup = $(target).closest(\".k-popup\"),\n\t mobile = popup.parent().parent(\".km-shim\").length;\n\n\t popup = popup[0];\n\t if (!mobile && popup && popup !== that.element[0]){\n\t return;\n\t }\n\n\t // This MAY result in popup not closing in certain cases.\n\t if ($(e.target).closest(\"a\").data(\"rel\") === \"popover\") {\n\t return;\n\t }\n\n\t if (!contains(container, target) && !contains(anchor, target) && !(toggleTarget && contains($(toggleTarget)[0], target))) {\n\t that.close();\n\t }\n\t },\n\n\t _fit: function(position, size, viewPortSize) {\n\t var output = 0;\n\n\t if (position + size > viewPortSize) {\n\t output = viewPortSize - (position + size);\n\t }\n\n\t if (position < 0) {\n\t output = -position;\n\t }\n\n\t return output;\n\t },\n\n\t _flip: function(offset, size, anchorSize, viewPortSize, origin, position, boxSize) {\n\t var output = 0;\n\t boxSize = boxSize || size;\n\n\t if (position !== origin && position !== CENTER && origin !== CENTER) {\n\t if (offset + boxSize > viewPortSize) {\n\t output += -(anchorSize + size);\n\t }\n\n\t if (offset + output < 0) {\n\t output += anchorSize + size;\n\t }\n\t }\n\t return output;\n\t },\n\n\t _scrollableParents: function() {\n\t return $(this.options.anchor)\n\t .parentsUntil(\"body\")\n\t .filter(function(index, element) {\n\t return kendo.isScrollable(element);\n\t });\n\t },\n\n\t _position: function(fixed) {\n\t var that = this,\n\t //element = that.element.css(POSITION, \"\"), /* fixes telerik/kendo-ui-core#790, comes from telerik/kendo#615 */\n\t element = that.element,\n\t wrapper = that.wrapper,\n\t options = that.options,\n\t viewport = $(options.viewport),\n\t zoomLevel = support.zoomLevel(),\n\t isWindow = !!((viewport[0] == window) && window.innerWidth && (zoomLevel <= 1.02)),\n\t anchor = $(options.anchor),\n\t origins = options.origin.toLowerCase().split(\" \"),\n\t positions = options.position.toLowerCase().split(\" \"),\n\t collisions = that.collisions,\n\t siblingContainer, parents,\n\t parentZIndex, zIndex = 10002,\n\t idx = 0,\n\t docEl = document.documentElement,\n\t length, viewportOffset, viewportWidth, viewportHeight;\n\n\t if (options.viewport === window) {\n\t viewportOffset = {\n\t top: (window.pageYOffset || document.documentElement.scrollTop || 0),\n\t left: (window.pageXOffset || document.documentElement.scrollLeft || 0)\n\t };\n\t } else {\n\t viewportOffset = viewport.offset();\n\t }\n\n\t if (isWindow) {\n\t viewportWidth = window.innerWidth;\n\t viewportHeight = window.innerHeight;\n\t } else {\n\t viewportWidth = viewport.width();\n\t viewportHeight = viewport.height();\n\t }\n\n\t if (isWindow && docEl.scrollHeight - docEl.clientHeight > 0) {\n\t var sign = options.isRtl ? -1 : 1;\n\n\t viewportWidth -= sign * kendo.support.scrollbar();\n\t }\n\n\t siblingContainer = anchor.parents().filter(wrapper.siblings());\n\n\t if (siblingContainer[0]) {\n\t parentZIndex = Math.max(Number(siblingContainer.css(\"zIndex\")), 0);\n\n\t // set z-index to be more than that of the container/sibling\n\t // compensate with more units for window z-stack\n\t if (parentZIndex) {\n\t zIndex = parentZIndex + 10;\n\t } else {\n\t parents = anchor.parentsUntil(siblingContainer);\n\t for (length = parents.length; idx < length; idx++) {\n\t parentZIndex = Number($(parents[idx]).css(\"zIndex\"));\n\t if (parentZIndex && zIndex < parentZIndex) {\n\t zIndex = parentZIndex + 10;\n\t }\n\t }\n\t }\n\t }\n\n\t wrapper.css(\"zIndex\", zIndex);\n\n\t if (fixed && fixed.isFixed) {\n\t wrapper.css({ left: fixed.x, top: fixed.y });\n\t } else {\n\t wrapper.css(that._align(origins, positions));\n\t }\n\n\t var pos = getOffset(wrapper, POSITION, anchor[0] === wrapper.offsetParent()[0]),\n\t offset = getOffset(wrapper),\n\t anchorParent = anchor.offsetParent().parent(\".k-animation-container,.k-popup,.k-group\"); // If the parent is positioned, get the current positions\n\n\t if (anchorParent.length) {\n\t pos = getOffset(wrapper, POSITION, true);\n\t offset = getOffset(wrapper);\n\t }\n\n\t offset.top -= viewportOffset.top;\n\t offset.left -= viewportOffset.left;\n\n\t if (!that.wrapper.data(LOCATION)) { // Needed to reset the popup location after every closure - fixes the resize bugs.\n\t wrapper.data(LOCATION, extend({}, pos));\n\t }\n\n\t var offsets = extend({}, offset),\n\t location = extend({}, pos),\n\t adjustSize = options.adjustSize;\n\n\t if (collisions[0] === \"fit\") {\n\t location.top += that._fit(offsets.top, outerHeight(wrapper) + adjustSize.height, viewportHeight / zoomLevel);\n\t }\n\n\t if (collisions[1] === \"fit\") {\n\t location.left += that._fit(offsets.left, outerWidth(wrapper) + adjustSize.width, viewportWidth / zoomLevel);\n\t }\n\n\t var flipPos = extend({}, location);\n\t var elementHeight = outerHeight(element);\n\t var wrapperHeight = outerHeight(wrapper);\n\n\t if (!wrapper.height() && elementHeight) {\n\t wrapperHeight = wrapperHeight + elementHeight;\n\t }\n\n\t if (collisions[0] === \"flip\") {\n\t location.top += that._flip(offsets.top, elementHeight, outerHeight(anchor), viewportHeight / zoomLevel, origins[0], positions[0], wrapperHeight);\n\t }\n\n\t if (collisions[1] === \"flip\") {\n\t location.left += that._flip(offsets.left, outerWidth(element), outerWidth(anchor), viewportWidth / zoomLevel, origins[1], positions[1], outerWidth(wrapper));\n\t }\n\n\t element.css(POSITION, ABSOLUTE);\n\t wrapper.css(location);\n\n\t return (location.left != flipPos.left || location.top != flipPos.top);\n\t },\n\n\t _align: function(origin, position) {\n\t var that = this,\n\t element = that.wrapper,\n\t anchor = $(that.options.anchor),\n\t verticalOrigin = origin[0],\n\t horizontalOrigin = origin[1],\n\t verticalPosition = position[0],\n\t horizontalPosition = position[1],\n\t anchorOffset = getOffset(anchor),\n\t appendTo = $(that.options.appendTo),\n\t appendToOffset,\n\t width = outerWidth(element),\n\t height = outerHeight(element) || outerHeight(element.children().first()),\n\t anchorWidth = outerWidth(anchor),\n\t anchorHeight = outerHeight(anchor),\n\t top = anchorOffset.top,\n\t left = anchorOffset.left,\n\t round = Math.round;\n\n\t if (appendTo[0] != document.body) {\n\t appendToOffset = getOffset(appendTo);\n\t top -= appendToOffset.top;\n\t left -= appendToOffset.left;\n\t }\n\n\n\t if (verticalOrigin === BOTTOM) {\n\t top += anchorHeight;\n\t }\n\n\t if (verticalOrigin === CENTER) {\n\t top += round(anchorHeight / 2);\n\t }\n\n\t if (verticalPosition === BOTTOM) {\n\t top -= height;\n\t }\n\n\t if (verticalPosition === CENTER) {\n\t top -= round(height / 2);\n\t }\n\n\t if (horizontalOrigin === RIGHT) {\n\t left += anchorWidth;\n\t }\n\n\t if (horizontalOrigin === CENTER) {\n\t left += round(anchorWidth / 2);\n\t }\n\n\t if (horizontalPosition === RIGHT) {\n\t left -= width;\n\t }\n\n\t if (horizontalPosition === CENTER) {\n\t left -= round(width / 2);\n\t }\n\n\t return {\n\t top: top,\n\t left: left\n\t };\n\t }\n\t });\n\n\t ui.plugin(Popup);\n\n\t var stableSort = kendo.support.stableSort;\n\t var tabKeyTrapNS = \"kendoTabKeyTrap\";\n\t var focusableNodesSelector = \"a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, [tabindex], *[contenteditable]\";\n\t var TabKeyTrap = Class.extend({\n\t init: function(element) {\n\t this.element = $(element);\n\t this.element.autoApplyNS(tabKeyTrapNS);\n\t },\n\n\t trap: function() {\n\t this.element.on(\"keydown\", proxy(this._keepInTrap, this));\n\t },\n\n\t removeTrap: function() {\n\t this.element.kendoDestroy(tabKeyTrapNS);\n\t },\n\n\t destroy: function() {\n\t this.element.kendoDestroy(tabKeyTrapNS);\n\t this.element = undefined;\n\t },\n\n\t shouldTrap: function () {\n\t return true;\n\t },\n\n\t _keepInTrap: function(e) {\n\t if (e.which !== 9 || !this.shouldTrap() || e.isDefaultPrevented()) {\n\t return;\n\t }\n\n\t var elements = this._focusableElements();\n\t var sortedElements = this._sortFocusableElements(elements);\n\t var next = this._nextFocusable(e, sortedElements);\n\n\t this._focus(next);\n\n\t e.preventDefault();\n\t },\n\t _focusableElements: function(){\n\t var elements = this.element.find(focusableNodesSelector).filter(function(i, item){\n\t return item.tabIndex >= 0 && $(item).is(':visible') && !$(item).is('[disabled]');\n\t });\n\n\t if (this.element.is(\"[tabindex]\")) {\n\t elements.push(this.element[0]);\n\t }\n\n\t return elements;\n\t },\n\t _sortFocusableElements: function(elements){\n\t var sortedElements;\n\n\t if (stableSort) {\n\t sortedElements = elements.sort(function(prev, next) {\n\t return prev.tabIndex - next.tabIndex;\n\t });\n\t } else {\n\t var attrName = \"__k_index\";\n\t elements.each(function(i, item){\n\t item.setAttribute(attrName, i);\n\t });\n\n\t sortedElements = elements.sort(function(prev, next) {\n\t return prev.tabIndex === next.tabIndex ?\n\t parseInt(prev.getAttribute(attrName), 10) - parseInt(next.getAttribute(attrName), 10) :\n\t prev.tabIndex - next.tabIndex;\n\t });\n\n\t elements.removeAttr(attrName);\n\t }\n\n\t return sortedElements;\n\t },\n\t _nextFocusable: function(e, elements){\n\t var count = elements.length;\n\t var current = elements.index(e.target);\n\n\t return elements.get((current + (e.shiftKey ? -1 : 1)) % count);\n\t },\n\t _focus: function(element){\n\t if (element.nodeName == \"IFRAME\") {\n\t element.contentWindow.document.body.focus();\n\t return;\n\t }\n\n\t element.focus();\n\n\t if (element.nodeName == \"INPUT\" && element.setSelectionRange && this._haveSelectionRange(element)) {\n\t element.setSelectionRange(0, element.value.length);\n\t }\n\t },\n\t _haveSelectionRange: function(element){\n\t var elementType = element.type.toLowerCase();\n\n\t return elementType === \"text\" || elementType === \"search\" ||\n\t elementType === \"url\" || elementType === \"tel\" ||\n\t elementType === \"password\";\n\t }\n\t });\n\t ui.Popup.TabKeyTrap = TabKeyTrap;\n\t})(window.kendo.jQuery);\n\n\n\n\treturn window.kendo;\n\n\t}, __webpack_require__(3));\n\n\n/***/ })\n\n/******/ });","module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(1338);\n\n\n/***/ }),\n\n/***/ 3:\n/***/ (function(module, exports) {\n\n\tmodule.exports = function() { throw new Error(\"define cannot be used indirect\"); };\r\n\n\n/***/ }),\n\n/***/ 1018:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./kendo.core\");\n\n/***/ }),\n\n/***/ 1056:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./kendo.userevents\");\n\n/***/ }),\n\n/***/ 1338:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function(f, define){\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(1018), __webpack_require__(1056) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (f), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t})(function(){\n\n\tvar __meta__ = { // jshint ignore:line\n\t id: \"selectable\",\n\t name: \"Selectable\",\n\t category: \"framework\",\n\t depends: [ \"core\", \"userevents\" ],\n\t advanced: true\n\t};\n\n\t(function ($, undefined) {\n\t var kendo = window.kendo,\n\t Widget = kendo.ui.Widget,\n\t proxy = $.proxy,\n\t abs = Math.abs,\n\t ARIASELECTED = \"aria-selected\",\n\t SELECTED = \"k-state-selected\",\n\t ACTIVE = \"k-state-selecting\",\n\t SELECTABLE = \"k-selectable\",\n\t CHANGE = \"change\",\n\t NS = \".kendoSelectable\",\n\t UNSELECT = \"unselect\",\n\t UNSELECTING = \"k-state-unselecting\",\n\t INPUTSELECTOR = \"input,a,textarea,.k-multiselect-wrap,select,button,.k-button>span,.k-button>img,span.k-icon.k-i-arrow-60-down,span.k-icon.k-i-arrow-60-up,label.k-checkbox-label.k-no-text,.k-icon.k-i-collapse,.k-icon.k-i-expand,span.k-numeric-wrap,.k-focusable\",\n\t msie = kendo.support.browser.msie,\n\t supportEventDelegation = false;\n\n\t (function($) {\n\t (function() {\n\t $('
          ')\n\t .on(\"click\", \">*\", function() {\n\t supportEventDelegation = true;\n\t })\n\t .find(\"span\")\n\t .trigger(\"click\")\n\t .end()\n\t .off();\n\t })();\n\t })($);\n\n\t var Selectable = Widget.extend({\n\t init: function(element, options) {\n\t var that = this,\n\t multiple;\n\n\t Widget.fn.init.call(that, element, options);\n\n\t that._marquee = $(\"
          \");\n\t that._lastActive = null;\n\t that.element.addClass(SELECTABLE);\n\n\t that.relatedTarget = that.options.relatedTarget;\n\n\t multiple = that.options.multiple;\n\n\t if (this.options.aria && multiple) {\n\t that.element.attr(\"aria-multiselectable\", true);\n\t }\n\n\t that.userEvents = new kendo.UserEvents(that.element, {\n\t global: true,\n\t allowSelection: true,\n\t filter: (!supportEventDelegation ? \".\" + SELECTABLE + \" \" : \"\") + that.options.filter,\n\t tap: proxy(that._tap, that),\n\t touchAction: multiple ? \"none\" : \"pan-x pan-y\"\n\t });\n\n\t if (multiple) {\n\t that.userEvents\n\t .bind(\"start\", proxy(that._start, that))\n\t .bind(\"move\", proxy(that._move, that))\n\t .bind(\"end\", proxy(that._end, that))\n\t .bind(\"select\", proxy(that._select, that));\n\t }\n\t },\n\n\t events: [CHANGE, UNSELECT],\n\n\t options: {\n\t name: \"Selectable\",\n\t filter: \">*\",\n\t inputSelectors: INPUTSELECTOR,\n\t multiple: false,\n\t relatedTarget: $.noop\n\t },\n\n\t _isElement: function(target) {\n\t var elements = this.element;\n\t var idx, length = elements.length, result = false;\n\n\t target = target[0];\n\n\t for (idx = 0; idx < length; idx ++) {\n\t if (elements[idx] === target) {\n\t result = true;\n\t break;\n\t }\n\t }\n\n\t return result;\n\t },\n\n\t _tap: function(e) {\n\t var target = $(e.target),\n\t that = this,\n\t ctrlKey = e.event.ctrlKey || e.event.metaKey,\n\t multiple = that.options.multiple,\n\t shiftKey = multiple && e.event.shiftKey,\n\t selected,\n\t whichCode = e.event.which,\n\t buttonCode = e.event.button;\n\n\t //in case of hierarchy or right-click\n\t if (!that._isElement(target.closest(\".\" + SELECTABLE)) || whichCode && whichCode == 3 || buttonCode && buttonCode == 2) {\n\t return;\n\t }\n\n\t if (!this._allowSelection(e.event.target)) {\n\t return;\n\t }\n\n\t selected = target.hasClass(SELECTED);\n\t if (!multiple || !ctrlKey) {\n\t that.clear();\n\t }\n\n\t target = target.add(that.relatedTarget(target));\n\n\t if (shiftKey) {\n\t that.selectRange(that._firstSelectee(), target, e);\n\t } else {\n\t if (selected && ctrlKey) {\n\t that._unselect(target);\n\t that._notify(CHANGE, e);\n\t } else {\n\t that.value(target, e);\n\t }\n\n\t that._lastActive = that._downTarget = target;\n\t }\n\t },\n\n\t _start: function(e) {\n\t var that = this,\n\t target = $(e.target),\n\t selected = target.hasClass(SELECTED),\n\t currentElement,\n\t ctrlKey = e.event.ctrlKey || e.event.metaKey;\n\n\t if (!this._allowSelection(e.event.target)) {\n\t return;\n\t }\n\n\t that._downTarget = target;\n\n\t //in case of hierarchy\n\t if (!that._isElement(target.closest(\".\" + SELECTABLE))) {\n\t that.userEvents.cancel();\n\t return;\n\t }\n\n\t if (that.options.useAllItems) {\n\t that._items = that.element.find(that.options.filter);\n\t } else {\n\t currentElement = target.closest(that.element);\n\t that._items = currentElement.find(that.options.filter);\n\t }\n\n\t e.sender.capture();\n\n\t that._marquee\n\t .appendTo(document.body)\n\t .css({\n\t left: e.x.client + 1,\n\t top: e.y.client + 1,\n\t width: 0,\n\t height: 0\n\t });\n\n\t if (!ctrlKey) {\n\t that.clear();\n\t }\n\n\t target = target.add(that.relatedTarget(target));\n\t if (selected) {\n\t that._selectElement(target, true);\n\t if (ctrlKey) {\n\t target.addClass(UNSELECTING);\n\t }\n\t }\n\t },\n\n\t _move: function(e) {\n\t var that = this,\n\t position = {\n\t left: e.x.startLocation > e.x.location ? e.x.location : e.x.startLocation,\n\t top: e.y.startLocation > e.y.location ? e.y.location : e.y.startLocation,\n\t width: abs(e.x.initialDelta),\n\t height: abs(e.y.initialDelta)\n\t };\n\n\t that._marquee.css(position);\n\n\t that._invalidateSelectables(position, (e.event.ctrlKey || e.event.metaKey));\n\n\t e.preventDefault();\n\t },\n\n\t _end: function(e) {\n\t var that = this;\n\n\t that._marquee.remove();\n\n\t that._unselect(that.element\n\t .find(that.options.filter + \".\" + UNSELECTING))\n\t .removeClass(UNSELECTING);\n\n\n\t var target = that.element.find(that.options.filter + \".\" + ACTIVE);\n\t target = target.add(that.relatedTarget(target));\n\n\t that.value(target, e);\n\t that._lastActive = that._downTarget;\n\t that._items = null;\n\t },\n\n\t _invalidateSelectables: function(position, ctrlKey) {\n\t var idx,\n\t length,\n\t target = this._downTarget[0],\n\t items = this._items,\n\t related,\n\t toSelect;\n\n\t for (idx = 0, length = items.length; idx < length; idx ++) {\n\t toSelect = items.eq(idx);\n\t related = toSelect.add(this.relatedTarget(toSelect));\n\n\t if (collision(toSelect, position)) {\n\t if(toSelect.hasClass(SELECTED)) {\n\t if(ctrlKey && target !== toSelect[0]) {\n\t related.removeClass(SELECTED).addClass(UNSELECTING);\n\t }\n\t } else if (!toSelect.hasClass(ACTIVE) && !toSelect.hasClass(UNSELECTING)) {\n\t related.addClass(ACTIVE);\n\t }\n\t } else {\n\t if (toSelect.hasClass(ACTIVE)) {\n\t related.removeClass(ACTIVE);\n\t } else if(ctrlKey && toSelect.hasClass(UNSELECTING)) {\n\t related.removeClass(UNSELECTING).addClass(SELECTED);\n\t }\n\t }\n\t }\n\t },\n\n\t value: function(val, e) {\n\t var that = this,\n\t selectElement = proxy(that._selectElement, that);\n\n\t if(val) {\n\t val.each(function() {\n\t selectElement(this);\n\t });\n\n\t that._notify(CHANGE, e);\n\t return;\n\t }\n\n\t return that.element.find(that.options.filter + \".\" + SELECTED);\n\t },\n\n\t _firstSelectee: function() {\n\t var that = this,\n\t selected;\n\n\t if(that._lastActive !== null) {\n\t return that._lastActive;\n\t }\n\n\t selected = that.value();\n\t return selected.length > 0 ?\n\t selected[0] :\n\t that.element.find(that.options.filter)[0];\n\t },\n\n\t _selectElement: function(element, preventNotify) {\n\t var toSelect = $(element),\n\t isPrevented = !preventNotify && this._notify(\"select\", { element: element });\n\n\t toSelect.removeClass(ACTIVE);\n\t if(!isPrevented) {\n\t toSelect.addClass(SELECTED);\n\n\t if (this.options.aria) {\n\t toSelect.attr(ARIASELECTED, true);\n\t }\n\t }\n\t },\n\n\t _notify: function(name, args) {\n\t args = args || { };\n\t return this.trigger(name, args);\n\t },\n\n\t _unselect: function(element) {\n\t if (this.trigger(UNSELECT, { element: element})) {\n\t return;\n\t }\n\n\t element.removeClass(SELECTED);\n\n\t if (this.options.aria) {\n\t element.attr(ARIASELECTED, false);\n\t }\n\n\t return element;\n\t },\n\n\t _select: function(e) {\n\t if (this._allowSelection(e.event.target)) {\n\t if (!msie || (msie && !$(kendo._activeElement()).is(this.options.inputSelectors))) {\n\t e.preventDefault();\n\t }\n\t }\n\t },\n\n\t _allowSelection: function(target) {\n\t if ($(target).is(this.options.inputSelectors)) {\n\t this.userEvents.cancel();\n\t this._downTarget = null;\n\t return false;\n\t }\n\n\t return true;\n\t },\n\n\t resetTouchEvents: function() {\n\t this.userEvents.cancel();\n\t },\n\n\t clear: function() {\n\t var items = this.element.find(this.options.filter + \".\" + SELECTED);\n\t this._unselect(items);\n\t },\n\n\t selectRange: function(start, end, e) {\n\t var that = this,\n\t idx,\n\t tmp,\n\t items;\n\n\t that.clear();\n\n\t if (that.element.length > 1) {\n\t items = that.options.continuousItems();\n\t }\n\n\t if (!items || !items.length) {\n\t items = that.element.find(that.options.filter);\n\t }\n\n\t start = $.inArray($(start)[0], items);\n\t end = $.inArray($(end)[0], items);\n\n\t if (start > end) {\n\t tmp = start;\n\t start = end;\n\t end = tmp;\n\t }\n\n\t if (!that.options.useAllItems) {\n\t end += that.element.length - 1;\n\t }\n\n\t for (idx = start; idx <= end; idx ++ ) {\n\t that._selectElement(items[idx]);\n\t }\n\n\t that._notify(CHANGE, e);\n\t },\n\n\t destroy: function() {\n\t var that = this;\n\n\t Widget.fn.destroy.call(that);\n\n\t that.element.off(NS);\n\n\t that.userEvents.destroy();\n\n\t that._marquee = that._lastActive = that.element = that.userEvents = null;\n\t }\n\t });\n\n\t Selectable.parseOptions = function(selectable) {\n\t var asLowerString = typeof selectable === \"string\" && selectable.toLowerCase();\n\n\t return {\n\t multiple: asLowerString && asLowerString.indexOf(\"multiple\") > -1,\n\t cell: asLowerString && asLowerString.indexOf(\"cell\") > -1\n\t };\n\t };\n\n\t function collision(element, position) {\n\t if (!element.is(\":visible\")) {\n\t return false;\n\t }\n\n\t var elementPosition = kendo.getOffset(element),\n\t right = position.left + position.width,\n\t bottom = position.top + position.height;\n\n\t elementPosition.right = elementPosition.left + kendo._outerWidth(element);\n\t elementPosition.bottom = elementPosition.top + kendo._outerHeight(element);\n\n\t return !(elementPosition.left > right||\n\t elementPosition.right < position.left ||\n\t elementPosition.top > bottom ||\n\t elementPosition.bottom < position.top);\n\t }\n\n\t kendo.ui.plugin(Selectable);\n\n\t})(window.kendo.jQuery);\n\n\treturn window.kendo;\n\n\t}, __webpack_require__(3));\n\n\n/***/ })\n\n/******/ });","module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(1395);\n\n\n/***/ }),\n\n/***/ 3:\n/***/ (function(module, exports) {\n\n\tmodule.exports = function() { throw new Error(\"define cannot be used indirect\"); };\r\n\n\n/***/ }),\n\n/***/ 1027:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./kendo.data\");\n\n/***/ }),\n\n/***/ 1077:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./kendo.draganddrop\");\n\n/***/ }),\n\n/***/ 1395:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function(f, define){\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(1027), __webpack_require__(1077) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (f), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t})(function(){\n\n\tvar __meta__ = { // jshint ignore:line\n\t id: \"treeview.draganddrop\",\n\t name: \"Hierarchical Drag & Drop\",\n\t category: \"framework\",\n\t depends: [ \"core\", \"draganddrop\" ],\n\t advanced: true\n\t};\n\n\t(function($, undefined){\n\t var kendo = window.kendo;\n\t var ui = kendo.ui;\n\t var proxy = $.proxy;\n\t var extend = $.extend;\n\t var VISIBILITY = \"visibility\";\n\t var KSTATEHOVER = \"k-state-hover\";\n\t var INPUTSELECTOR = \"input,a:not(.k-in),textarea,.k-multiselect-wrap,select,button,a.k-button>.k-icon,button.k-button>.k-icon,span.k-icon.k-i-arrow-60-right,span.k-icon.k-i-arrow-45-down-right\";\n\n\t ui.HierarchicalDragAndDrop = kendo.Class.extend({\n\t init: function (element, options) {\n\t this.element = element;\n\t this.hovered = element;\n\t this.options = extend({\n\t dragstart: $.noop, drag: $.noop, drop: $.noop, dragend: $.noop\n\t }, options);\n\n\t this._draggable = new ui.Draggable(element, {\n\t ignore: INPUTSELECTOR,\n\t filter: options.filter,\n\t autoScroll: options.autoScroll,\n\t cursorOffset: {\n\t left: 10,\n\t top: kendo.support.mobileOS ? -40 / kendo.support.zoomLevel() : 10\n\t },\n\t hint: proxy(this._hint, this),\n\t dragstart: proxy(this.dragstart, this),\n\t dragcancel: proxy(this.dragcancel, this),\n\t drag: proxy(this.drag, this),\n\t dragend: proxy(this.dragend, this),\n\t $angular: options.$angular\n\t });\n\t },\n\n\t _hint: function(element) {\n\t return \"
          \" +\n\t \"\" +\n\t this.options.hintText(element) +\n\t \"
          \";\n\t },\n\n\t _removeTouchHover: function() {\n\t if (kendo.support.touch && this.hovered) {\n\t this.hovered.find(\".\" + KSTATEHOVER).removeClass(KSTATEHOVER);\n\t this.hovered = false;\n\t }\n\t },\n\n\t _hintStatus: function(newStatus) {\n\t var statusElement = this._draggable.hint.find(\".k-drag-status\")[0];\n\n\t if (newStatus) {\n\t statusElement.className = \"k-icon k-drag-status \" + newStatus;\n\t } else {\n\t return kendo.trim(statusElement.className.replace(/(p|k)-(icon|drag-status)/g, \"\"));\n\t }\n\t },\n\n\t dragstart: function (e) {\n\t this.source = e.currentTarget.closest(this.options.itemSelector);\n\n\t if (this.options.dragstart(this.source)) {\n\t e.preventDefault();\n\t }\n\n\t if (this.options.reorderable) {\n\t this.dropHint = $(\"
          \")\n\t .css(VISIBILITY, \"hidden\")\n\t .appendTo(this.element);\n\t } else {\n\t this.dropHint = $();\n\t }\n\t },\n\n\t drag: function (e) {\n\t var options = this.options;\n\t var source = this.source;\n\t var target = this.dropTarget = $(kendo.eventTarget(e));\n\t var container = target.closest(options.allowedContainers);\n\t var hoveredItem, itemHeight, itemTop, itemContent, delta;\n\t var insertOnTop, insertOnBottom, addChild;\n\t var itemData, position, status;\n\n\t if (!container.length) {\n\t // dragging outside of allowed elements\n\t status = \"k-i-cancel\";\n\t this._removeTouchHover();\n\t } else if (source[0] == target[0] || options.contains(source[0], target[0])) {\n\t // dragging item within itself\n\t status = \"k-i-cancel\";\n\t } else {\n\t // moving or reordering item\n\t status = \"k-i-insert-middle\";\n\n\t itemData = options.itemFromTarget(target);\n\t hoveredItem = itemData.item;\n\n\t if (hoveredItem.length) {\n\t this._removeTouchHover();\n\t itemHeight = kendo._outerHeight(hoveredItem);\n\t itemContent = itemData.content;\n\n\t if (options.reorderable) {\n\t delta = itemHeight / (itemContent.length > 0 ? 4 : 2);\n\t itemTop = kendo.getOffset(hoveredItem).top;\n\n\t insertOnTop = e.y.location < (itemTop + delta);\n\t insertOnBottom = (itemTop + itemHeight - delta) < e.y.location;\n\t addChild = itemContent.length && !insertOnTop && !insertOnBottom;\n\t } else {\n\t addChild = true;\n\t insertOnTop = false;\n\t insertOnBottom = false;\n\t }\n\n\t this.hovered = addChild ? container : false;\n\n\t this.dropHint.css(VISIBILITY, addChild ? \"hidden\" : \"visible\");\n\n\t if (this._lastHover && this._lastHover[0] != itemContent[0]) {\n\t this._lastHover.removeClass(KSTATEHOVER);\n\t }\n\n\t this._lastHover = itemContent.toggleClass(KSTATEHOVER, addChild);\n\n\t if (addChild) {\n\t status = \"k-i-plus\";\n\t } else {\n\t position = hoveredItem.position();\n\t position.top += insertOnTop ? 0 : itemHeight;\n\n\t this.dropHint.css(position)\n\t [insertOnTop ? \"prependTo\" : \"appendTo\"]\n\t (options.dropHintContainer(hoveredItem));\n\n\t if (insertOnTop && itemData.first) {\n\t status = \"k-i-insert-up\";\n\t }\n\n\t if (insertOnBottom && itemData.last) {\n\t status = \"k-i-insert-down\";\n\t }\n\t }\n\t } else if (target[0] != this.dropHint[0]) {\n\t if (this._lastHover) {\n\t this._lastHover.removeClass(KSTATEHOVER);\n\t }\n\n\t if (!$.contains(this.element[0], container[0])) {\n\t // moving node to different element\n\t status = \"k-i-plus\";\n\t } else {\n\t status = \"k-i-cancel\";\n\t }\n\t }\n\t }\n\n\t this.options.drag({\n\t originalEvent: e.originalEvent,\n\t source: source,\n\t target: target,\n\t pageY: e.y.location,\n\t pageX: e.x.location,\n\t status: status.substring(2),\n\t setStatus: function(value) {\n\t status = value;\n\t }\n\t });\n\n\t if (status.indexOf(\"k-i-insert\") !== 0) {\n\t this.dropHint.css(VISIBILITY, \"hidden\");\n\t }\n\n\t this._hintStatus(status);\n\t },\n\n\t dragcancel: function() {\n\t this.dropHint.remove();\n\t },\n\n\t dragend: function (e) {\n\t var position = \"over\",\n\t source = this.source,\n\t destination,\n\t dropHint = this.dropHint,\n\t dropTarget = this.dropTarget,\n\t eventArgs, dropPrevented;\n\n\t if (dropHint.css(VISIBILITY) == \"visible\") {\n\t position = this.options.dropPositionFrom(dropHint);\n\t destination = dropHint.closest(this.options.itemSelector);\n\t } else if (dropTarget) {\n\t destination = dropTarget.closest(this.options.itemSelector);\n\n\t // moving node to root element\n\t if (!destination.length) {\n\t destination = dropTarget.closest(this.options.allowedContainers);\n\t }\n\t }\n\n\t eventArgs = {\n\t originalEvent: e.originalEvent,\n\t source: source[0],\n\t destination: destination[0],\n\t valid: this._hintStatus() != \"k-i-cancel\",\n\t setValid: function(newValid) {\n\t this.valid = newValid;\n\t },\n\t dropTarget: dropTarget[0],\n\t position: position\n\t };\n\n\t dropPrevented = this.options.drop(eventArgs);\n\n\t dropHint.remove();\n\t this._removeTouchHover();\n\t if (this._lastHover) {\n\t this._lastHover.removeClass(KSTATEHOVER);\n\t }\n\n\t if (!eventArgs.valid || dropPrevented) {\n\t this._draggable.dropped = eventArgs.valid;\n\t return;\n\t }\n\n\t this._draggable.dropped = true;\n\n\t this.options.dragend({\n\t originalEvent: e.originalEvent,\n\t source: source,\n\t destination: destination,\n\t position: position\n\t });\n\t },\n\n\t destroy: function() {\n\t this._lastHover = this.hovered = null;\n\t this._draggable.destroy();\n\t }\n\t });\n\n\t})(window.kendo.jQuery);\n\n\treturn window.kendo;\n\n\t}, __webpack_require__(3));\n\n\n/***/ })\n\n/******/ });","module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(1394);\n\n\n/***/ }),\n\n/***/ 3:\n/***/ (function(module, exports) {\n\n\tmodule.exports = function() { throw new Error(\"define cannot be used indirect\"); };\r\n\n\n/***/ }),\n\n/***/ 1017:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"jquery\");\n\n/***/ }),\n\n/***/ 1027:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./kendo.data\");\n\n/***/ }),\n\n/***/ 1393:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./kendo.treeview.draganddrop\");\n\n/***/ }),\n\n/***/ 1394:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/* WEBPACK VAR INJECTION */(function(jQuery) {(function(f, define){\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(1027), __webpack_require__(1393) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (f), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t})(function(){\n\n\tvar __meta__ = { // jshint ignore:line\n\t id: \"treeview\",\n\t name: \"TreeView\",\n\t category: \"web\",\n\t description: \"The TreeView widget displays hierarchical data in a traditional tree structure,with support for interactive drag-and-drop operations.\",\n\t depends: [ \"data\" ],\n\t features: [{\n\t id: \"treeview-dragging\",\n\t name: \"Drag & Drop\",\n\t description: \"Support for drag & drop\",\n\t depends: [ \"treeview.draganddrop\" ]\n\t }]\n\t};\n\n\t/*jshint eqnull: true */\n\t(function($, undefined){\n\t var kendo = window.kendo,\n\t ui = kendo.ui,\n\t data = kendo.data,\n\t extend = $.extend,\n\t template = kendo.template,\n\t isArray = $.isArray,\n\t Widget = ui.Widget,\n\t HierarchicalDataSource = data.HierarchicalDataSource,\n\t proxy = $.proxy,\n\t keys = kendo.keys,\n\t NS = \".kendoTreeView\",\n\t TEMP_NS = \".kendoTreeViewTemp\",\n\t SELECT = \"select\",\n\t CHECK = \"check\",\n\t NAVIGATE = \"navigate\",\n\t EXPAND = \"expand\",\n\t CHANGE = \"change\",\n\t ERROR = \"error\",\n\t CHECKED = \"checked\",\n\t INDETERMINATE = \"indeterminate\",\n\t COLLAPSE = \"collapse\",\n\t DRAGSTART = \"dragstart\",\n\t DRAG = \"drag\",\n\t DROP = \"drop\",\n\t DRAGEND = \"dragend\",\n\t DATABOUND = \"dataBound\",\n\t CLICK = \"click\",\n\t UNDEFINED = \"undefined\",\n\t KSTATEHOVER = \"k-state-hover\",\n\t KTREEVIEW = \"k-treeview\",\n\t VISIBLE = \":visible\",\n\t NODE = \".k-item\",\n\t STRING = \"string\",\n\t ARIACHECKED = \"aria-checked\",\n\t ARIASELECTED = \"aria-selected\",\n\t ARIADISABLED = \"aria-disabled\",\n\t ARIAEXPANDED = \"aria-expanded\",\n\t DISABLED = \"k-state-disabled\",\n\t TreeView,\n\t subGroup, nodeContents, nodeIcon,\n\t spriteRe,\n\t bindings = {\n\t text: \"dataTextField\",\n\t url: \"dataUrlField\",\n\t spriteCssClass: \"dataSpriteCssClassField\",\n\t imageUrl: \"dataImageUrlField\"\n\t },\n\t isJQueryInstance = function(obj) {\n\t return (obj instanceof kendo.jQuery) || (window.jQuery && obj instanceof window.jQuery);\n\t },\n\t isDomElement = function (o){\n\t return (\n\t typeof HTMLElement === \"object\" ? o instanceof HTMLElement : //DOM2\n\t o && typeof o === \"object\" && o.nodeType === 1 && typeof o.nodeName === STRING\n\t );\n\t };\n\n\t function contentChild(filter) {\n\t return function(node) {\n\t var result = node.children(\".k-animation-container\");\n\n\t if (!result.length) {\n\t result = node;\n\t }\n\n\t return result.children(filter);\n\t };\n\t }\n\n\t function templateNoWith(code) {\n\t return kendo.template(code, { useWithBlock: false });\n\t }\n\n\t subGroup = contentChild(\".k-group\");\n\t nodeContents = contentChild(\".k-group,.k-content\");\n\t nodeIcon = function(node) {\n\t return node.children(\"div\").children(\".k-icon\");\n\t };\n\n\t function checkboxes(node) {\n\t return node.find(\".k-checkbox-wrapper:first input[type=checkbox]\");\n\t }\n\n\t function insertAction(indexOffset) {\n\t return function (nodeData, referenceNode) {\n\t referenceNode = referenceNode.closest(NODE);\n\n\t var group = referenceNode.parent(),\n\t parentNode;\n\n\t if (group.parent().is(\"li\")) {\n\t parentNode = group.parent();\n\t }\n\n\t return this._dataSourceMove(nodeData, group, parentNode, function (dataSource, model) {\n\t var referenceItem = this.dataItem(referenceNode);\n\t var referenceNodeIndex = referenceItem ? referenceItem.parent().indexOf(referenceItem) : referenceNode.index();\n\n\t return this._insert(dataSource.data(), model, referenceNodeIndex + indexOffset);\n\t });\n\t };\n\t }\n\n\t spriteRe = /k-sprite/;\n\n\t function moveContents(node, container) {\n\t var tmp;\n\n\t while (node && node.nodeName.toLowerCase() != \"ul\") {\n\t tmp = node;\n\t node = node.nextSibling;\n\n\t if (tmp.nodeType == 3) {\n\t tmp.nodeValue = kendo.trim(tmp.nodeValue);\n\t }\n\n\t if (spriteRe.test(tmp.className)) {\n\t container.insertBefore(tmp, container.firstChild);\n\t } else {\n\t container.appendChild(tmp);\n\t }\n\t }\n\t }\n\n\t function updateNodeHtml(node) {\n\t var wrapper = node.children(\"div\"),\n\t group = node.children(\"ul\"),\n\t toggleButton = wrapper.children(\".k-icon\"),\n\t checkbox = node.children(\"input[type=checkbox]\"),\n\t innerWrapper = wrapper.children(\".k-in\");\n\n\t if (node.hasClass(\"k-treeview\")) {\n\t return;\n\t }\n\n\t if (!wrapper.length) {\n\t wrapper = $(\"
          \").prependTo(node);\n\t }\n\n\t if (!toggleButton.length && group.length) {\n\t toggleButton = $(\"\").prependTo(wrapper);\n\t } else if (!group.length || !group.children().length) {\n\t toggleButton.remove();\n\t group.remove();\n\t }\n\n\t if (checkbox.length) {\n\t $(\"\").appendTo(wrapper).append(checkbox);\n\t }\n\n\t if (!innerWrapper.length) {\n\t innerWrapper = node.children(\"a\").eq(0).addClass(\"k-in k-link\");\n\n\t if (!innerWrapper.length) {\n\t innerWrapper = $(\"\");\n\t }\n\n\t innerWrapper.appendTo(wrapper);\n\n\t if (wrapper.length) {\n\t moveContents(wrapper[0].nextSibling, innerWrapper[0]);\n\t }\n\t }\n\t }\n\n\t TreeView = kendo.ui.DataBoundWidget.extend({\n\t init: function (element, options) {\n\t var that = this,\n\t inferred = false,\n\t hasDataSource = options && !!options.dataSource,\n\t list;\n\n\t if (isArray(options)) {\n\t options = { dataSource: options };\n\t }\n\n\t if (options && typeof options.loadOnDemand == UNDEFINED && isArray(options.dataSource)) {\n\t options.loadOnDemand = false;\n\t }\n\n\t Widget.prototype.init.call(that, element, options);\n\n\t element = that.element;\n\t options = that.options;\n\n\t that._dataSourceUids = {};\n\n\t list = (element.is(\"ul\") && element) ||\n\t (element.hasClass(KTREEVIEW) && element.children(\"ul\"));\n\n\t inferred = !hasDataSource && list.length;\n\n\t if (inferred) {\n\t options.dataSource.list = list;\n\t }\n\n\t that._animation();\n\n\t that._accessors();\n\n\t that._templates();\n\n\t // render treeview if it's not already rendered\n\t if (!element.hasClass(KTREEVIEW)) {\n\t that._wrapper();\n\n\t if (list) {\n\t that.root = element;\n\t that._group(that.wrapper);\n\t }\n\t } else {\n\t // otherwise just initialize properties\n\t that.wrapper = element;\n\t that.root = element.children(\"ul\").eq(0);\n\t }\n\n\t that._tabindex();\n\n\t that.wrapper.attr(\"role\", \"tree\");\n\n\t that._dataSource(inferred);\n\n\t that._attachEvents();\n\n\t that._dragging();\n\n\t if (!inferred) {\n\t if (options.autoBind) {\n\t that._progress(true);\n\t that.dataSource.fetch();\n\t }\n\t } else {\n\t that._syncHtmlAndDataSource();\n\t }\n\n\t if (options.checkboxes && options.checkboxes.checkChildren) {\n\t that.updateIndeterminate();\n\t }\n\n\t if (that.element[0].id) {\n\t that._ariaId = kendo.format(\"{0}_tv_active\", that.element[0].id);\n\t }\n\n\t kendo.notify(that);\n\t },\n\n\t _attachEvents: function() {\n\t var that = this,\n\t clickableItems = \".k-in:not(.k-state-selected,.k-state-disabled)\",\n\t MOUSEENTER = \"mouseenter\";\n\n\t that.wrapper\n\t .on(MOUSEENTER + NS, \".k-in.k-state-selected\", function(e) { e.preventDefault(); })\n\t .on(MOUSEENTER + NS, clickableItems, function () { $(this).addClass(KSTATEHOVER); })\n\t .on(\"mouseleave\" + NS, clickableItems, function () { $(this).removeClass(KSTATEHOVER); })\n\t .on(CLICK + NS, clickableItems, proxy(that._click, that))\n\t .on(\"dblclick\" + NS, \".k-in:not(.k-state-disabled)\", proxy(that._toggleButtonClick, that))\n\t .on(CLICK + NS, \".k-i-expand,.k-i-collapse\", proxy(that._toggleButtonClick, that))\n\t .on(\"keydown\" + NS, proxy(that._keydown, that))\n\t .on(\"keypress\" + NS, proxy(that._keypress, that))\n\t .on(\"focus\" + NS, proxy(that._focus, that))\n\t .on(\"blur\" + NS, proxy(that._blur, that))\n\t .on(\"mousedown\" + NS, \".k-in,.k-checkbox-wrapper :checkbox,.k-i-expand,.k-i-collapse\", proxy(that._mousedown, that))\n\t .on(\"change\" + NS, \".k-checkbox-wrapper :checkbox\", proxy(that._checkboxChange, that))\n\t .on(\"click\" + NS, \".checkbox-span\", proxy(that._checkboxLabelClick, that))\n\t .on(\"click\" + NS, \".k-request-retry\", proxy(that._retryRequest, that))\n\t .on(\"click\" + NS, \".k-link.k-state-disabled\", function(e) { e.preventDefault(); })\n\t .on(\"click\" + NS, function(e) {\n\t var target = $(e.target);\n\n\t if (!target.is(\":kendoFocusable\") && !target.find(\"input,select,textarea,button,object\").is(\":kendoFocusable\")) {\n\t that.focus();\n\t }\n\t });\n\t },\n\n\t _checkboxLabelClick: function(e) {\n\t var checkbox = $(e.target.previousSibling);\n\n\t if (checkbox.is(\"[disabled]\")) {\n\t return;\n\t }\n\n\t checkbox.prop('checked', !checkbox.prop('checked'));\n\t checkbox.trigger('change');\n\t },\n\n\t _syncHtmlAndDataSource: function (root, dataSource) {\n\t root = root || this.root;\n\t dataSource = dataSource || this.dataSource;\n\t var data = dataSource.view(),\n\t uidAttr = kendo.attr(\"uid\"),\n\t expandedAttr = kendo.attr(\"expanded\"),\n\t checkboxesEnabled = this.options.checkboxes,\n\t items = root.children(\"li\"),\n\t i,\n\t item,\n\t dataItem,\n\t uid,\n\t itemCheckbox;\n\n\t for (i = 0; i < items.length; i++) {\n\t dataItem = data[i];\n\t uid = dataItem.uid;\n\t item = items.eq(i);\n\t item.attr(\"role\", \"treeitem\")\n\t .attr(uidAttr, uid)\n\t .attr(ARIASELECTED, item.hasClass(\"k-state-selected\"));\n\n\t dataItem.expanded = item.attr(expandedAttr) === \"true\";\n\n\t if (checkboxesEnabled) {\n\t itemCheckbox = checkboxes(item);\n\t dataItem.checked = itemCheckbox.prop(CHECKED);\n\t itemCheckbox.attr(\"id\", \"_\" + uid);\n\t itemCheckbox.next(\".k-checkbox-label\").attr(\"for\", \"_\" + uid);\n\t }\n\n\t this._syncHtmlAndDataSource(item.children(\"ul\"), dataItem.children);\n\t }\n\t },\n\n\t _animation: function() {\n\t var options = this.options,\n\t animationOptions = options.animation,\n\t hasCollapseAnimation = animationOptions.collapse && \"effects\" in animationOptions.collapse,\n\t collapse = extend({}, animationOptions.expand, animationOptions.collapse);\n\n\t if (!hasCollapseAnimation) {\n\t collapse = extend(collapse, {reverse: true});\n\t }\n\n\t if (animationOptions === false) {\n\t animationOptions = {\n\t expand: { effects: {} },\n\t collapse: { hide: true, effects: {} }\n\t };\n\t }\n\n\t animationOptions.collapse = extend(collapse, {hide: true});\n\t options.animation = animationOptions;\n\t },\n\n\t _dragging: function() {\n\t var enabled = this.options.dragAndDrop;\n\t var dragging = this.dragging;\n\n\t if (enabled && !dragging) {\n\t var widget = this;\n\n\t this.dragging = new ui.HierarchicalDragAndDrop(this.element, {\n\t reorderable: true,\n\t $angular: this.options.$angular,\n\t autoScroll: this.options.autoScroll,\n\t filter: \"div:not(.k-state-disabled) .k-in\",\n\t allowedContainers: \".k-treeview\",\n\t itemSelector: \".k-treeview .k-item\",\n\t hintText: proxy(this._hintText, this),\n\t contains: function(source, destination) {\n\t return $.contains(source, destination);\n\t },\n\t dropHintContainer: function(item) {\n\t return item;\n\t },\n\t itemFromTarget: function(target) {\n\t var item = target.closest(\".k-top,.k-mid,.k-bot\");\n\t return {\n\t item: item,\n\t content: target.closest(\".k-in\"),\n\t first: item.hasClass(\"k-top\"),\n\t last: item.hasClass(\"k-bot\")\n\t };\n\t },\n\t dropPositionFrom: function(dropHint) {\n\t return dropHint.prevAll(\".k-in\").length > 0 ? \"after\" : \"before\";\n\t },\n\t dragstart: function(source) {\n\t return widget.trigger(DRAGSTART, { sourceNode: source[0] });\n\t },\n\t drag: function(options) {\n\t widget.trigger(DRAG, {\n\t originalEvent: options.originalEvent,\n\t sourceNode: options.source[0],\n\t dropTarget: options.target[0],\n\t pageY: options.pageY,\n\t pageX: options.pageX,\n\t statusClass: options.status,\n\t setStatusClass: options.setStatus\n\t });\n\t },\n\t drop: function(options) {\n\t var dropTarget = $(options.dropTarget);\n\t var navigationTarget = dropTarget.closest(\"a\");\n\n\t if(navigationTarget && navigationTarget.attr(\"href\")) {\n\t widget._tempPreventNavigation(navigationTarget);\n\t }\n\n\t return widget.trigger(DROP, {\n\t originalEvent: options.originalEvent,\n\t sourceNode: options.source,\n\t destinationNode: options.destination,\n\t valid: options.valid,\n\t setValid: function(state) {\n\t this.valid = state;\n\t options.setValid(state);\n\t },\n\t dropTarget: options.dropTarget,\n\t dropPosition: options.position\n\t });\n\t },\n\t dragend: function(options) {\n\t var source = options.source;\n\t var destination = options.destination;\n\t var position = options.position;\n\n\t function triggerDragEnd(source) {\n\t if (widget.options.checkboxes && widget.options.checkboxes.checkChildren) {\n\t widget.updateIndeterminate();\n\t }\n\n\t widget.trigger(DRAGEND, {\n\t originalEvent: options.originalEvent,\n\t sourceNode: source && source[0],\n\t destinationNode: destination[0],\n\t dropPosition: position\n\t });\n\t }\n\n\t // perform reorder / move\n\t // different handling is necessary because append might be async in remote bound tree\n\t if (position == \"over\") {\n\t widget.append(source, destination, triggerDragEnd);\n\t } else {\n\t if (position == \"before\") {\n\t source = widget.insertBefore(source, destination);\n\t } else if (position == \"after\") {\n\t source = widget.insertAfter(source, destination);\n\t }\n\n\t triggerDragEnd(source);\n\t }\n\t }\n\t });\n\t } else if (!enabled && dragging) {\n\t dragging.destroy();\n\t this.dragging = null;\n\t }\n\t },\n\n\t _tempPreventNavigation: function(node) {\n\t node.on(CLICK + NS + TEMP_NS, function (ev) {\n\t ev.preventDefault();\n\t node.off(CLICK + NS + TEMP_NS);\n\t });\n\t },\n\n\t _hintText: function(node) {\n\t return this.templates.dragClue({\n\t item: this.dataItem(node),\n\t treeview: this.options\n\t });\n\t },\n\n\t _templates: function() {\n\t var that = this,\n\t options = that.options,\n\t fieldAccessor = proxy(that._fieldAccessor, that);\n\n\t if (options.template && typeof options.template == STRING) {\n\t options.template = template(options.template);\n\t } else if (!options.template) {\n\t options.template = templateNoWith(\n\t \"# var text = \" + fieldAccessor(\"text\") + \"(data.item); #\" +\n\t \"# if (typeof data.item.encoded != 'undefined' && data.item.encoded === false) {#\" +\n\t \"#= text #\" +\n\t \"# } else { #\" +\n\t \"#: text #\" +\n\t \"# } #\"\n\t );\n\t }\n\n\t that._checkboxes();\n\n\t that.templates = {\n\t setAttributes: function (item) {\n\t var result = \"\";\n\t var attributes = item.attr || {};\n\n\t for (var attr in attributes) {\n\t if(attributes.hasOwnProperty(attr) && attr !== \"class\") {\n\t result += attr + \"=\\\"\" + attributes[attr] + \"\\\" \";\n\t }\n\t }\n\n\t return result;\n\t },\n\t wrapperCssClass: function (group, item) {\n\t var result = \"k-item\",\n\t index = item.index;\n\n\t if (group.firstLevel && index === 0) {\n\t result += \" k-first\";\n\t }\n\n\t if (index == group.length-1) {\n\t result += \" k-last\";\n\t }\n\n\t return result;\n\t },\n\t cssClass: function(group, item) {\n\t var result = \"\",\n\t index = item.index,\n\t groupLength = group.length - 1;\n\n\t if (group.firstLevel && index === 0) {\n\t result += \"k-top \";\n\t }\n\n\t if (index === 0 && index != groupLength) {\n\t result += \"k-top\";\n\t } else if (index == groupLength) {\n\t result += \"k-bot\";\n\t } else {\n\t result += \"k-mid\";\n\t }\n\n\t return result;\n\t },\n\t textClass: function(item, isLink) {\n\t var result = \"k-in\";\n\n\t if (isLink) {\n\t result += \" k-link\";\n\t }\n\n\t if (item.enabled === false) {\n\t result += \" k-state-disabled\";\n\t }\n\n\t if (item.selected === true) {\n\t result += \" k-state-selected\";\n\t }\n\n\t return result;\n\t },\n\t toggleButtonClass: function(item) {\n\t var result = \"k-icon\";\n\n\t if (item.expanded !== true) {\n\t result += \" k-i-expand\";\n\t } else {\n\t result += \" k-i-collapse\";\n\t }\n\n\t return result;\n\t },\n\t groupAttributes: function(group) {\n\t var attributes = \"\";\n\n\t if (!group.firstLevel) {\n\t attributes = \"role='group'\";\n\t }\n\n\t return attributes + (group.expanded !== true ? \" style='display:none'\" : \"\");\n\t },\n\t groupCssClass: function(group) {\n\t var cssClass = \"k-group\";\n\n\t if (group.firstLevel) {\n\t cssClass += \" k-treeview-lines\";\n\t }\n\n\t return cssClass;\n\t },\n\t dragClue: templateNoWith(\n\t \"#= data.treeview.template(data) #\"\n\t ),\n\t group: templateNoWith(\n\t \"
            \" +\n\t \"#= data.renderItems(data) #\" +\n\t \"
          \"\n\t ),\n\t itemContent: templateNoWith(\n\t \"# var imageUrl = \" + fieldAccessor(\"imageUrl\") + \"(data.item); #\" +\n\t \"# var spriteCssClass = \" + fieldAccessor(\"spriteCssClass\") + \"(data.item); #\" +\n\t \"# if (imageUrl) { #\" +\n\t \"\" +\n\t \"# } #\" +\n\n\t \"# if (spriteCssClass) { #\" +\n\t \"\" +\n\t \"# } #\" +\n\n\t \"#= data.treeview.template(data) #\"\n\t ),\n\t itemElement: templateNoWith(\n\t \"# var item = data.item, r = data.r; #\" +\n\t \"# var url = \" + fieldAccessor(\"url\") + \"(item); #\" +\n\t \"
          \" +\n\t \"# if (item.hasChildren) { #\" +\n\t \"\" +\n\t \"# } #\" +\n\n\t \"# if (data.treeview.checkboxes) { #\" +\n\t \"\" +\n\t \"#= data.treeview.checkboxes.template(data) #\" +\n\t \"\" +\n\t \"# } #\" +\n\n\t \"# var tag = url ? 'a' : 'span'; #\" +\n\t \"# var textAttr = url ? ' href=\\\\'' + url + '\\\\'' : ''; #\" +\n\n\t \"<#=tag# class='#= r.textClass(item, !!url) #'#= textAttr #>\" +\n\t \"#= r.itemContent(data) #\" +\n\t \"\" +\n\t \"
          \"\n\t ),\n\t item: templateNoWith(\n\t \"# var item = data.item, r = data.r; #\" +\n\t \"
        • \" +\n\t \"#= r.itemElement(data) #\" +\n\t \"
        • \"\n\t ),\n\t loading: templateNoWith(\n\t \"
          #: data.messages.loading #\"\n\t ),\n\t retry: templateNoWith(\n\t \"#: data.messages.requestFailed # \" +\n\t \"\"\n\t )\n\t };\n\t },\n\n\t items: function() {\n\t return this.element.find(\".k-item > div:first-child\");\n\t },\n\n\t setDataSource: function(dataSource) {\n\t var options = this.options;\n\n\t options.dataSource = dataSource;\n\n\t this._dataSourceUids = {};\n\n\t this._dataSource();\n\n\t if (options.checkboxes && options.checkboxes.checkChildren) {\n\t this.dataSource.one(\"change\", $.proxy(this.updateIndeterminate, this, null));\n\t }\n\n\t if (this.options.autoBind) {\n\t this.dataSource.fetch();\n\t }\n\t },\n\n\t _bindDataSource: function() {\n\t this._refreshHandler = proxy(this.refresh, this);\n\t this._errorHandler = proxy(this._error, this);\n\n\t this.dataSource.bind(CHANGE, this._refreshHandler);\n\t this.dataSource.bind(ERROR, this._errorHandler);\n\t },\n\n\t _unbindDataSource: function() {\n\t var dataSource = this.dataSource;\n\n\t if (dataSource) {\n\t dataSource.unbind(CHANGE, this._refreshHandler);\n\t dataSource.unbind(ERROR, this._errorHandler);\n\t }\n\t },\n\n\t _dataSource: function(silentRead) {\n\t var that = this,\n\t options = that.options,\n\t dataSource = options.dataSource;\n\n\t function recursiveRead(data) {\n\t for (var i = 0; i < data.length; i++) {\n\t data[i]._initChildren();\n\n\t data[i].children.fetch();\n\n\t recursiveRead(data[i].children.view());\n\t }\n\t }\n\n\t dataSource = isArray(dataSource) ? { data: dataSource } : dataSource;\n\n\t that._unbindDataSource();\n\n\t if (!dataSource.fields) {\n\t dataSource.fields = [\n\t { field: \"text\" },\n\t { field: \"url\" },\n\t { field: \"spriteCssClass\" },\n\t { field: \"imageUrl\" }\n\t ];\n\t }\n\n\t that.dataSource = dataSource = HierarchicalDataSource.create(dataSource);\n\n\t if (silentRead) {\n\t dataSource.fetch();\n\n\t recursiveRead(dataSource.view());\n\t }\n\n\t that._bindDataSource();\n\t },\n\n\t events: [\n\t DRAGSTART,\n\t DRAG,\n\t DROP,\n\t DRAGEND,\n\n\t DATABOUND,\n\n\t EXPAND,\n\t COLLAPSE,\n\t SELECT,\n\t CHANGE,\n\t NAVIGATE,\n\t CHECK\n\t ],\n\n\t options: {\n\t name: \"TreeView\",\n\t dataSource: {},\n\t animation: {\n\t expand: {\n\t effects: \"expand:vertical\",\n\t duration: 200\n\t }, collapse: {\n\t duration: 100\n\t }\n\t },\n\t messages: {\n\t loading: \"Loading...\",\n\t requestFailed: \"Request failed.\",\n\t retry: \"Retry\"\n\t },\n\t dragAndDrop: false,\n\t checkboxes: false,\n\t autoBind: true,\n\t autoScroll: false,\n\t loadOnDemand: true,\n\t template: \"\",\n\t dataTextField: null\n\t },\n\n\t _accessors: function() {\n\t var that = this,\n\t options = that.options,\n\t i, field, textField,\n\t element = that.element;\n\n\t for (i in bindings) {\n\t field = options[bindings[i]];\n\t textField = element.attr(kendo.attr(i + \"-field\"));\n\n\t if (!field && textField) {\n\t field = textField;\n\t }\n\n\t if (!field) {\n\t field = i;\n\t }\n\n\t if (!isArray(field)) {\n\t field = [field];\n\t }\n\n\t options[bindings[i]] = field;\n\t }\n\t },\n\n\t // generates accessor function for a given field name, honoring the data*Field arrays\n\t _fieldAccessor: function(fieldName) {\n\t var fieldBindings = this.options[bindings[fieldName]],\n\t count = fieldBindings.length,\n\t result = \"(function(item) {\";\n\n\t if (count === 0) {\n\t result += \"return item['\" + fieldName + \"'];\";\n\t } else {\n\t result += \"var levels = [\" +\n\t $.map(fieldBindings, function(x) {\n\t return \"function(d){ return \" + kendo.expr(x) + \"}\";\n\t }).join(\",\") + \"];\";\n\n\t result += \"return levels[Math.min(item.level(), \" + count + \"-1)](item)\";\n\t }\n\n\t result += \"})\";\n\n\t return result;\n\t },\n\n\t setOptions: function(options) {\n\t Widget.fn.setOptions.call(this, options);\n\n\t this._animation();\n\n\t this._dragging();\n\n\t this._templates();\n\t },\n\n\t _trigger: function (eventName, node) {\n\t return this.trigger(eventName, {\n\t node: node.closest(NODE)[0]\n\t });\n\t },\n\n\t _setChecked: function(datasource, value) {\n\t if (!datasource || !$.isFunction(datasource.view)) {\n\t return;\n\t }\n\n\t for (var i = 0, nodes = datasource.view(); i < nodes.length; i++) {\n\t if(nodes[i].enabled !== false){\n\t this._setCheckedValue(nodes[i], value);\n\t }\n\n\t if (nodes[i].children) {\n\t this._setChecked(nodes[i].children, value);\n\t }\n\t }\n\t },\n\n\t _setCheckedValue: function (node, value){\n\t node[CHECKED] = value;\n\t },\n\n\t _setIndeterminate: function(node) {\n\t var group = subGroup(node),\n\t siblings, length,\n\t all = true,\n\t i;\n\n\t if (!group.length) {\n\t return;\n\t }\n\n\t siblings = checkboxes(group.children());\n\n\t length = siblings.length;\n\n\t if (!length) {\n\t return;\n\t } else if (length > 1) {\n\t for (i = 1; i < length; i++) {\n\t if (siblings[i].checked != siblings[i-1].checked ||\n\t siblings[i].indeterminate || siblings[i-1].indeterminate) {\n\t all = false;\n\t break;\n\t }\n\t }\n\t } else {\n\t all = !siblings[0].indeterminate;\n\t }\n\n\t node.attr(ARIACHECKED, all ? siblings[0].checked : \"mixed\");\n\n\t return checkboxes(node)\n\t .data(INDETERMINATE, !all)\n\t .prop(INDETERMINATE, !all)\n\t .prop(CHECKED, all && siblings[0].checked);\n\t },\n\n\t updateIndeterminate: function(node) {\n\t // top-down update of inital indeterminate state for all nodes\n\t node = node || this.wrapper;\n\n\t var subnodes = subGroup(node).children();\n\t var i;\n\t var checkbox;\n\t var dataItem;\n\n\t if (subnodes.length) {\n\t for (i = 0; i < subnodes.length; i++) {\n\t this.updateIndeterminate(subnodes.eq(i));\n\t }\n\n\t if (node.is(\".k-treeview\")) {\n\t return;\n\t }\n\n\t checkbox = this._setIndeterminate(node);\n\n\t dataItem = this.dataItem(node);\n\n\t if (checkbox && checkbox.prop(CHECKED)) {\n\t dataItem.checked = true;\n\t } else {\n\t if (dataItem) {\n\t delete dataItem.checked;\n\t }\n\t }\n\t }\n\t },\n\n\t _bubbleIndeterminate: function(node, skipDownward) {\n\t // bottom-up setting of indeterminate state of parent nodes\n\t if (!node.length) {\n\t return;\n\t }\n\n\t if (!skipDownward) {\n\t //update the indeterminate state of the node itself\n\t this.updateIndeterminate(node);\n\t }\n\n\t var parentNode = this.parent(node),\n\t checkbox;\n\n\t if (parentNode.length) {\n\t this._setIndeterminate(parentNode);\n\n\t checkbox = parentNode.children(\"div\").find(\".k-checkbox-wrapper input[type=checkbox]\");\n\n\t this._skip = true;\n\t if (checkbox.prop(INDETERMINATE) === false) {\n\t this.dataItem(parentNode).set(CHECKED, checkbox.prop(CHECKED));\n\t } else {\n\t // delete this.dataItem(parentNode).checked;\n\t this.dataItem(parentNode).set(CHECKED, false);\n\t }\n\n\t this._skip = false;\n\n\t this._bubbleIndeterminate(parentNode, true);\n\t }\n\t },\n\n\t _checkboxChange: function(e) {\n\t var that = this;\n\t var checkbox = $(e.target);\n\t var isChecked = checkbox.prop(CHECKED);\n\t var node = checkbox.closest(NODE);\n\t var dataItem = this.dataItem(node);\n\n\t if (this._preventChange) {\n\t return;\n\t }\n\n\t if (dataItem.checked != isChecked) {\n\t dataItem.set(CHECKED, isChecked);\n\t node.attr(ARIACHECKED, isChecked);\n\t this._trigger(CHECK, node);\n\t }\n\n\t if (checkbox.is(\":focus\")) {\n\t that._trigger(NAVIGATE, node);\n\t that.focus();\n\t }\n\t },\n\n\t _toggleButtonClick: function (e) {\n\t var node = $(e.currentTarget).closest(NODE);\n\n\t if (node.is(\"[aria-disabled='true']\")) {\n\t return;\n\t }\n\n\t this.toggle(node);\n\t },\n\n\t _mousedown: function(e) {\n\t var that = this;\n\t var currentTarget = $(e.currentTarget);\n\t var node = $(e.currentTarget).closest(NODE);\n\t var browser = kendo.support.browser;\n\n\t if (node.is(\"[aria-disabled='true']\")) {\n\t return;\n\t }\n\n\t //IE does not trigger change for indeterminate checkboxes\n\t if ((browser.msie || browser.edge) && currentTarget.is(\":checkbox\")) {\n\t if (currentTarget.prop(INDETERMINATE)) {\n\t that._preventChange = false;\n\n\t currentTarget.prop(CHECKED, !currentTarget.prop(CHECKED));\n\t currentTarget.trigger(CHANGE);\n\n\t currentTarget.on(CLICK + NS, function (e) {\n\t e.preventDefault();\n\t });\n\n\t that._preventChange = true;\n\t } else {\n\t currentTarget.off(CLICK + NS);\n\t that._preventChange = false;\n\t }\n\t }\n\n\t that._clickTarget = node;\n\t that.current(node);\n\t },\n\n\t _focusable: function (node) {\n\t return node && node.length && node.is(\":visible\") && !node.find(\".k-in:first\").hasClass(DISABLED);\n\t },\n\n\t _focus: function() {\n\t var current = this.select(),\n\t clickTarget = this._clickTarget;\n\n\t // suppress initial focus state on touch devices (until keyboard is used)\n\t if (kendo.support.touch) {\n\t return;\n\t }\n\n\t if (clickTarget && clickTarget.length) {\n\t current = clickTarget;\n\t }\n\n\t if (!this._focusable(current)) {\n\t current = this.current();\n\t }\n\n\t if (!this._focusable(current)) {\n\t current = this._nextVisible($());\n\t }\n\n\t this.current(current);\n\t },\n\n\t focus: function() {\n\t var wrapper = this.wrapper,\n\t scrollContainer = wrapper[0],\n\t containers = [],\n\t offsets = [],\n\t documentElement = document.documentElement,\n\t i;\n\n\t do {\n\t scrollContainer = scrollContainer.parentNode;\n\n\t if (scrollContainer.scrollHeight > scrollContainer.clientHeight) {\n\t containers.push(scrollContainer);\n\t offsets.push(scrollContainer.scrollTop);\n\t }\n\t } while (scrollContainer != documentElement);\n\n\t kendo.focusElement(wrapper);\n\n\t for (i = 0; i < containers.length; i++) {\n\t containers[i].scrollTop = offsets[i];\n\t }\n\t },\n\n\t _blur: function() {\n\t this.current().find(\".k-in:first\").removeClass(\"k-state-focused\");\n\t },\n\n\t _enabled: function(node) {\n\t return !node.children(\"div\").children(\".k-in\").hasClass(DISABLED);\n\t },\n\n\t parent: function(node) {\n\t var wrapperRe = /\\bk-treeview\\b/,\n\t itemRe = /\\bk-item\\b/,\n\t result,\n\t skipSelf;\n\n\t if (typeof node == STRING) {\n\t node = this.element.find(node);\n\t }\n\n\t if (!isDomElement(node)) {\n\t node = node[0];\n\t }\n\n\t skipSelf = itemRe.test(node.className);\n\n\t do {\n\t node = node.parentNode;\n\n\t if (itemRe.test(node.className)) {\n\t if (skipSelf) {\n\t result = node;\n\t } else {\n\t skipSelf = true;\n\t }\n\t }\n\t } while (!wrapperRe.test(node.className) && !result);\n\n\t return $(result);\n\t },\n\n\t _nextVisible: function(node) {\n\t var that = this,\n\t expanded = that._expanded(node),\n\t result;\n\n\t function nextParent(node) {\n\t while (node.length && !node.next().length) {\n\t node = that.parent(node);\n\t }\n\n\t if (node.next().length) {\n\t return node.next();\n\t } else {\n\t return node;\n\t }\n\t }\n\n\t if (!node.length || !node.is(\":visible\")) {\n\t result = that.root.children().eq(0);\n\t } else if (expanded) {\n\t result = subGroup(node).children().first();\n\n\t // expanded node with no children\n\t if (!result.length) {\n\t result = nextParent(node);\n\t }\n\t } else {\n\t result = nextParent(node);\n\t }\n\n\t return result;\n\t },\n\n\t _previousVisible: function(node) {\n\t var that = this,\n\t lastChild,\n\t result;\n\n\t if (!node.length || node.prev().length) {\n\t if (node.length) {\n\t result = node.prev();\n\t } else {\n\t result = that.root.children().last();\n\t }\n\n\t while (that._expanded(result)) {\n\t lastChild = subGroup(result).children().last();\n\n\t if (!lastChild.length) {\n\t break;\n\t }\n\n\t result = lastChild;\n\t }\n\t } else {\n\t result = that.parent(node) || node;\n\t }\n\n\t return result;\n\t },\n\n\t _keydown: function(e) {\n\t var that = this,\n\t key = e.keyCode,\n\t target,\n\t focused = that.current(),\n\t expanded = that._expanded(focused),\n\t checkbox = focused.find(\".k-checkbox-wrapper:first :checkbox\"),\n\t rtl = kendo.support.isRtl(that.element);\n\n\t if (e.target != e.currentTarget) {\n\t return;\n\t }\n\n\t if ((!rtl && key == keys.RIGHT) || (rtl && key == keys.LEFT)) {\n\t if (expanded) {\n\t target = that._nextVisible(focused);\n\t } else if (!focused.find(\".k-in:first\").hasClass(DISABLED)) {\n\t that.expand(focused);\n\t }\n\t } else if ((!rtl && key == keys.LEFT) || (rtl && key == keys.RIGHT)) {\n\t if (expanded && !focused.find(\".k-in:first\").hasClass(DISABLED)) {\n\t that.collapse(focused);\n\t } else {\n\t target = that.parent(focused);\n\n\t if (!that._enabled(target)) {\n\t target = undefined;\n\t }\n\t }\n\t } else if (key == keys.DOWN) {\n\t target = that._nextVisible(focused);\n\t } else if (key == keys.UP) {\n\t target = that._previousVisible(focused);\n\t } else if (key == keys.HOME) {\n\t target = that._nextVisible($());\n\t } else if (key == keys.END) {\n\t target = that._previousVisible($());\n\t } else if (key == keys.ENTER && !focused.find(\".k-in:first\").hasClass(DISABLED)) {\n\t if (!focused.find(\".k-in:first\").hasClass(\"k-state-selected\")) {\n\t if (!that._trigger(SELECT, focused)) {\n\t that.select(focused);\n\t }\n\t }\n\t } else if (key == keys.SPACEBAR && checkbox.length) {\n\t if(!focused.find(\".k-in:first\").hasClass(DISABLED)){\n\t checkbox.prop(CHECKED, !checkbox.prop(CHECKED))\n\t .data(INDETERMINATE, false)\n\t .prop(INDETERMINATE, false);\n\n\t that._checkboxChange({ target: checkbox });\n\t }\n\t target = focused;\n\t }\n\n\t if (target) {\n\t e.preventDefault();\n\n\t if (focused[0] != target[0]) {\n\t that._trigger(NAVIGATE, target);\n\t that.current(target);\n\t }\n\t }\n\t },\n\n\t _keypress: function (e) {\n\t var that = this;\n\t var delay = 300;\n\t var focusedNode = that.current().get(0);\n\t var matchToFocus;\n\t var key = e.key;\n\t var isPrintable = key.length === 1;\n\n\t if (!isPrintable) {\n\t return;\n\t }\n\n\t if (!that._match) {\n\t that._match = \"\";\n\t }\n\n\t that._match += key;\n\t clearTimeout(that._matchTimer);\n\t that._matchTimer = setTimeout(function() {\n\t that._match = \"\";\n\t }, delay);\n\n\t matchToFocus = focusedNode &&\n\t that._matchNextByText(\n\t Array.prototype.indexOf.call(that.element.find(\".k-item\"),\n\t focusedNode), that._match\n\t );\n\n\t if (!matchToFocus.length) {\n\t matchToFocus = that._matchNextByText(-1, that._match);\n\t }\n\n\t if (matchToFocus.get(0) && matchToFocus.get(0) !== focusedNode) {\n\t that._trigger(NAVIGATE, matchToFocus);\n\t that.current(matchToFocus);\n\t }\n\t },\n\n\t _matchNextByText: function(startIndex, text) {\n\t var element = this.element;\n\t var textNodes = element.find(\".k-in\").filter(function(i, element) {\n\t return (i > startIndex &&\n\t $(element).is(\":visible\") &&\n\t $(element).text().toLowerCase().indexOf(text) === 0);\n\t });\n\n\t return textNodes.eq(0).closest(NODE);\n\t },\n\n\t _click: function (e) {\n\t var that = this,\n\t node = $(e.currentTarget),\n\t contents = nodeContents(node.closest(NODE)),\n\t href = node.attr(\"href\"),\n\t shouldNavigate;\n\n\t if (href) {\n\t shouldNavigate = href == \"#\" || href.indexOf(\"#\" + this.element.id + \"-\") >= 0;\n\t } else {\n\t shouldNavigate = contents.length && !contents.children().length;\n\t }\n\n\t if (shouldNavigate) {\n\t e.preventDefault();\n\t }\n\n\t if (!node.hasClass(\".k-state-selected\") && !that._trigger(SELECT, node)) {\n\t that.select(node);\n\t }\n\t },\n\n\t _wrapper: function() {\n\t var that = this,\n\t element = that.element,\n\t wrapper, root,\n\t wrapperClasses = \"k-widget k-treeview\";\n\n\t if (element.is(\"ul\")) {\n\t wrapper = element.wrap('
          ').parent();\n\t root = element;\n\t } else {\n\t wrapper = element;\n\t root = wrapper.children(\"ul\").eq(0);\n\t }\n\n\t that.wrapper = wrapper.addClass(wrapperClasses);\n\t that.root = root;\n\t },\n\n\t _getSelectedNode: function() {\n\t return this.element.find(\".k-state-selected\").closest(NODE);\n\t },\n\n\t _group: function(item) {\n\t var that = this,\n\t firstLevel = item.hasClass(KTREEVIEW),\n\t group = {\n\t firstLevel: firstLevel,\n\t expanded: firstLevel || that._expanded(item)\n\t },\n\t groupElement = item.children(\"ul\");\n\n\t groupElement\n\t .addClass(that.templates.groupCssClass(group))\n\t .css(\"display\", group.expanded ? \"\" : \"none\");\n\n\t if(!firstLevel) {\n\t groupElement.attr(\"role\", \"group\");\n\t }\n\n\t that._nodes(groupElement, group);\n\t },\n\n\t _nodes: function(groupElement, groupData) {\n\t var that = this,\n\t nodes = groupElement.children(\"li\"),\n\t nodeData;\n\n\t groupData = extend({ length: nodes.length }, groupData);\n\n\t nodes.each(function(i, node) {\n\t node = $(node);\n\n\t nodeData = { index: i, expanded: that._expanded(node) };\n\n\t updateNodeHtml(node);\n\n\t that._updateNodeClasses(node, groupData, nodeData);\n\n\t // iterate over child nodes\n\t that._group(node);\n\t });\n\t },\n\n\t _checkboxes: function() {\n\t var options = this.options;\n\t var checkboxes = options.checkboxes;\n\t var defaultTemplate;\n\n\t if (checkboxes) {\n\t defaultTemplate = \"\";\n\n\t checkboxes = extend({\n\t template: defaultTemplate\n\t }, options.checkboxes);\n\n\t if (typeof checkboxes.template == STRING) {\n\t checkboxes.template = template(checkboxes.template);\n\t }\n\n\t options.checkboxes = checkboxes;\n\t }\n\t },\n\n\t _updateNodeClasses: function (node, groupData, nodeData) {\n\t var wrapper = node.children(\"div\"),\n\t group = node.children(\"ul\"),\n\t templates = this.templates;\n\n\t if (node.hasClass(\"k-treeview\")) {\n\t return;\n\t }\n\n\t nodeData = nodeData || {};\n\t nodeData.expanded = typeof nodeData.expanded != UNDEFINED ? nodeData.expanded : this._expanded(node);\n\t nodeData.index = typeof nodeData.index != UNDEFINED ? nodeData.index : node.index();\n\t nodeData.enabled = typeof nodeData.enabled != UNDEFINED ? nodeData.enabled : !wrapper.children(\".k-in\").hasClass(\"k-state-disabled\");\n\n\t groupData = groupData || {};\n\t groupData.firstLevel = typeof groupData.firstLevel != UNDEFINED ? groupData.firstLevel : node.parent().parent().hasClass(KTREEVIEW);\n\t groupData.length = typeof groupData.length != UNDEFINED ? groupData.length : node.parent().children().length;\n\n\t // li\n\t node.removeClass(\"k-first k-last\")\n\t .addClass(templates.wrapperCssClass(groupData, nodeData));\n\n\t // div\n\t wrapper.removeClass(\"k-top k-mid k-bot\")\n\t .addClass(templates.cssClass(groupData, nodeData));\n\n\t // span / a\n\t var textWrap = wrapper.children(\".k-in\");\n\t var isLink = textWrap[0] && textWrap[0].nodeName.toLowerCase() == \"a\";\n\t textWrap.removeClass(\"k-in k-link k-state-default k-state-disabled\")\n\t .addClass(templates.textClass(nodeData, isLink));\n\n\t // toggle button\n\t if (group.length || node.attr(\"data-hasChildren\") == \"true\") {\n\t wrapper.children(\".k-icon\").removeClass(\"k-i-expand k-i-collapse\")\n\t .addClass(templates.toggleButtonClass(nodeData));\n\n\t group.addClass(\"k-group\");\n\t }\n\t },\n\n\n\t _processNodes: function(nodes, callback) {\n\t var that = this;\n\t var items = that.element.find(nodes);\n\t for (var i = 0; i < items.length; i++) {\n\t callback.call(that, i, $(items[i]).closest(NODE));\n\t }\n\t },\n\n\t dataItem: function(node) {\n\t var uid = $(node).closest(NODE).attr(kendo.attr(\"uid\")),\n\t dataSource = this.dataSource;\n\n\t return dataSource && dataSource.getByUid(uid);\n\t },\n\n\t _dataItem: function(node) {\n\t var uid = $(node).closest(NODE).attr(kendo.attr(\"uid\")),\n\t dataSource = this.dataSource;\n\n\t return dataSource && this._dataSourceUids[uid];\n\t },\n\n\t _insertNode: function(nodeData, index, parentNode, insertCallback, collapsed) {\n\t var that = this,\n\t group = subGroup(parentNode),\n\t updatedGroupLength = group.children().length + 1,\n\t childrenData,\n\t groupData = {\n\t firstLevel: parentNode.hasClass(KTREEVIEW),\n\t expanded: !collapsed,\n\t length: updatedGroupLength\n\t }, node, i, item, nodeHtml = \"\", firstChild, lastChild,\n\t append = function(item, group) {\n\t item.appendTo(group);\n\t };\n\n\t for (i = 0; i < nodeData.length; i++) {\n\t item = nodeData[i];\n\n\t item.index = index + i;\n\n\t nodeHtml += that._renderItem({\n\t group: groupData,\n\t item: item\n\t });\n\t }\n\n\t node = $(nodeHtml);\n\n\t if (!node.length) {\n\t return;\n\t }\n\n\t that.angular(\"compile\", function(){\n\t return {\n\t elements: node.get(),\n\t data: nodeData.map(function(item){\n\t return { dataItem: item };\n\t })\n\t };\n\t });\n\n\t if (!group.length) {\n\t group = $(that._renderGroup({\n\t group: groupData\n\t })).appendTo(parentNode);\n\t }\n\n\t insertCallback(node, group);\n\n\t if (parentNode.hasClass(\"k-item\")) {\n\t updateNodeHtml(parentNode);\n\t that._updateNodeClasses(parentNode, groupData, {expanded: !collapsed});\n\t }\n\n\t firstChild = node.prev().first();\n\t lastChild = node.next().last();\n\n\t that._updateNodeClasses(firstChild, {}, {expanded: firstChild.attr(kendo.attr(\"expanded\")) == \"true\"});\n\t that._updateNodeClasses(lastChild, {}, {expanded: lastChild.attr(kendo.attr(\"expanded\")) == \"true\"});\n\n\t // render sub-nodes\n\t for (i = 0; i < nodeData.length; i++) {\n\t item = nodeData[i];\n\n\t if (item.hasChildren) {\n\t childrenData = item.children.data();\n\n\t if (childrenData.length) {\n\t that._insertNode(childrenData, item.index, node.eq(i), append, !item.expanded);\n\t }\n\t }\n\t }\n\n\t return node;\n\t },\n\n\t _updateNodes: function(items, field) {\n\t var that = this;\n\t var i, node, nodeWrapper, item, isChecked, isCollapsed;\n\t var context = { treeview: that.options, item: item };\n\t var render = field != \"expanded\" && field != \"checked\";\n\n\t function setCheckedState(root, state) {\n\t if (root.is(\".k-group\")) {\n\t root.find(\".k-item:not([aria-disabled])\").attr(ARIACHECKED, state);\n\t }\n\n\t root.find(\".k-checkbox-wrapper input[type=checkbox]:not([disabled])\")\n\t .prop(CHECKED, state)\n\t .data(INDETERMINATE, false)\n\t .prop(INDETERMINATE, false);\n\t }\n\n\t if (field == \"selected\") {\n\t item = items[0];\n\n\t node = that.findByUid(item.uid).find(\".k-in:first\")\n\t .removeClass(\"k-state-hover\")\n\t .toggleClass(\"k-state-selected\", item[field])\n\t .end();\n\n\t if (item[field]) {\n\t that.current(node);\n\t }\n\n\t node.attr(ARIASELECTED, !!item[field]);\n\t } else {\n\t var elements = $.map(items, function(item) {\n\t return that.findByUid(item.uid).children(\"div\");\n\t });\n\n\t if (render) {\n\t that.angular(\"cleanup\", function() { return { elements: elements }; });\n\t }\n\n\t for (i = 0; i < items.length; i++) {\n\t context.item = item = items[i];\n\t nodeWrapper = elements[i];\n\t node = nodeWrapper.parent();\n\n\t if (render) {\n\t nodeWrapper.children(\".k-in\")\n\t .html(that.templates.itemContent(context));\n\t }\n\n\t if (field == CHECKED) {\n\t isChecked = item[field];\n\n\t setCheckedState(nodeWrapper, isChecked);\n\n\t node.attr(ARIACHECKED, isChecked);\n\n\t if (that.options.checkboxes.checkChildren) {\n\t setCheckedState(node.children(\".k-group\"), isChecked);\n\n\t that._setChecked(item.children, isChecked);\n\n\t that._bubbleIndeterminate(node);\n\t }\n\t } else if (field == \"expanded\") {\n\t that._toggle(node, item, item[field]);\n\t } else if (field == \"enabled\") {\n\t node.find(\".k-checkbox-wrapper input[type=checkbox]\").prop(\"disabled\", !item[field]);\n\n\t isCollapsed = !nodeContents(node).is(VISIBLE);\n\n\t node.removeAttr(ARIADISABLED);\n\n\t if (!item[field]) {\n\t if (item.selected) {\n\t item.set(\"selected\", false);\n\t }\n\n\t if (item.expanded) {\n\t item.set(\"expanded\", false);\n\t }\n\n\t isCollapsed = true;\n\t node.attr(ARIASELECTED, false)\n\t .attr(ARIADISABLED, true);\n\t }\n\n\t that._updateNodeClasses(node, {}, { enabled: item[field], expanded: !isCollapsed });\n\t }\n\n\t if (nodeWrapper.length) {\n\t if (item._events && item._events.change) {\n\t item._events.change.splice(1);\n\t }\n\t this.trigger(\"itemChange\", { item: nodeWrapper, data: item, ns: ui });\n\t }\n\t }\n\n\t if (render) {\n\t that.angular(\"compile\", function(){\n\t return {\n\t elements: elements,\n\t data: $.map(items, function(item) {\n\t return [{ dataItem: item }];\n\t })\n\t };\n\t });\n\t }\n\t }\n\t },\n\n\t _appendItems: function(index, items, parentNode) {\n\t var group = subGroup(parentNode);\n\t var children = group.children();\n\t var collapsed = !this._expanded(parentNode);\n\n\t if(this.element === parentNode){\n\t var dataItems = this.dataSource.data();\n\t var viewItems = this.dataSource.view();\n\t var rootItems = viewItems.length < dataItems.length ? viewItems : dataItems;\n\t index = rootItems.indexOf(items[0]);\n\t } else if (items.length){\n\t index = items[0].parent().indexOf(items[0]);\n\t }\n\n\t if (typeof index == UNDEFINED) {\n\t index = children.length;\n\t }\n\n\t this._insertNode(items, index, parentNode, function(item, group) {\n\t // insert node into DOM\n\t if (index >= children.length) {\n\t item.appendTo(group);\n\t } else {\n\t item.insertBefore(children.eq(index));\n\t }\n\t }, collapsed);\n\n\t if (!collapsed) {\n\t this._updateNodeClasses(parentNode, {}, {expanded: !collapsed});\n\t subGroup(parentNode).css(\"display\", \"block\");\n\t }\n\t },\n\n\t _refreshChildren: function(parentNode, items, index) {\n\t var i, children, child;\n\t var options = this.options;\n\t var loadOnDemand = options.loadOnDemand;\n\t var checkChildren = options.checkboxes && options.checkboxes.checkChildren;\n\n\t subGroup(parentNode).empty();\n\n\t if (!items.length) {\n\t updateNodeHtml(parentNode);\n\t } else {\n\t this._appendItems(index, items, parentNode);\n\n\t children = subGroup(parentNode).children();\n\n\t if (loadOnDemand && checkChildren) {\n\t this._bubbleIndeterminate(children.last());\n\t }\n\n\t for (i = 0; i < children.length; i++) {\n\t child = children.eq(i);\n\t this.trigger(\"itemChange\", {\n\t item: child.children(\"div\"),\n\t data: items[i],\n\t ns: ui\n\t });\n\t }\n\t }\n\t },\n\n\t _refreshRoot: function(items) {\n\t var groupHtml = this._renderGroup({\n\t items: items,\n\t group: {\n\t firstLevel: true,\n\t expanded: true\n\t }\n\t });\n\n\t if (this.root.length) {\n\t this._angularItems(\"cleanup\");\n\n\t var group = $(groupHtml);\n\n\t this.root\n\t .attr(\"class\", group.attr(\"class\"))\n\t .html(group.html());\n\t } else {\n\t this.root = this.wrapper.html(groupHtml).children(\"ul\");\n\t }\n\n\t var elements = this.root.children(\".k-item\");\n\t for (var i = 0; i < items.length; i++) {\n\t this.trigger(\"itemChange\", {\n\t item: elements.eq(i),\n\t data: items[i],\n\t ns: ui\n\t });\n\t }\n\t this._angularItems(\"compile\");\n\t },\n\n\t refresh: function(e) {\n\t var node = e.node;\n\t var action = e.action;\n\t var items = e.items;\n\t var parentNode = this.wrapper;\n\t var options = this.options;\n\t var loadOnDemand = options.loadOnDemand;\n\t var checkChildren = options.checkboxes && options.checkboxes.checkChildren;\n\t var i;\n\n\t if (this._skip) {\n\t return;\n\t }\n\n\t for (i = 0; i < items.length; i++) {\n\t this._dataSourceUids[items[i].uid] = items[i];\n\t }\n\n\t if (e.field) {\n\t if (!items[0] || !items[0].level) {\n\t return;\n\t }\n\n\t return this._updateNodes(items, e.field);\n\t }\n\n\t if (node) {\n\t parentNode = this.findByUid(node.uid);\n\t this._progress(parentNode, false);\n\t }\n\n\t if (checkChildren && action != \"remove\") {\n\t var bubble = false;\n\n\t for (i = 0; i < items.length; i++) {\n\t if (\"checked\" in items[i]) {\n\t bubble = true;\n\t break;\n\t }\n\t }\n\n\t if (!bubble && node && node.checked) {\n\t for (i = 0; i < items.length; i++) {\n\t items[i].checked = true;\n\t }\n\t }\n\t }\n\n\t if (action == \"add\") {\n\t this._appendItems(e.index, items, parentNode);\n\t } else if (action == \"remove\") {\n\t this._remove(this.findByUid(items[0].uid), false);\n\t } else if (action == \"itemchange\") {\n\t this._updateNodes(items);\n\t } else if (action == \"itemloaded\") {\n\t this._refreshChildren(parentNode, items, e.index);\n\t } else {\n\t this._refreshRoot(items);\n\t }\n\n\t if (action != \"remove\") {\n\t for (i = 0; i < items.length; i++) {\n\t if (!loadOnDemand || items[i].expanded || items[i]._loaded) {\n\t items[i].load();\n\t }\n\t }\n\t }\n\n\t this.trigger(DATABOUND, { node: node ? parentNode : undefined });\n\t if (this.dataSource.filter() && this.options.checkboxes.checkChildren) {\n\t this.updateIndeterminate(parentNode);\n\t }\n\t },\n\n\t _error: function(e) {\n\t var node = e.node && this.findByUid(e.node.uid);\n\t var retryHtml = this.templates.retry({ messages: this.options.messages });\n\n\t if (node) {\n\t this._progress(node, false);\n\t this._expanded(node, false);\n\t nodeIcon(node).addClass(\"k-i-reload\");\n\t e.node.loaded(false);\n\t } else {\n\t this._progress(false);\n\t this.element.html(retryHtml);\n\t }\n\t },\n\n\t _retryRequest: function(e) {\n\t e.preventDefault();\n\n\t this.dataSource.fetch();\n\t },\n\n\t expand: function (nodes) {\n\t this._processNodes(nodes, function (index, item) {\n\t this.toggle(item, true);\n\t });\n\t },\n\n\t collapse: function (nodes) {\n\t this._processNodes(nodes, function (index, item) {\n\t this.toggle(item, false);\n\t });\n\t },\n\n\t enable: function (nodes, enable) {\n\t if (typeof nodes === \"boolean\") {\n\t enable = nodes;\n\t nodes = this.items();\n\t } else {\n\t enable = arguments.length == 2 ? !!enable : true;\n\t }\n\n\t this._processNodes(nodes, function (index, item) {\n\t this.dataItem(item).set(\"enabled\", enable);\n\t });\n\t },\n\n\t current: function(node) {\n\t var that = this,\n\t current = that._current,\n\t element = that.element,\n\t id = that._ariaId;\n\n\t if (arguments.length > 0 && node && node.length) {\n\t if (current) {\n\t if (current[0].id === id) {\n\t current.removeAttr(\"id\");\n\t }\n\n\t current.find(\".k-in:first\").removeClass(\"k-state-focused\");\n\t }\n\n\t current = that._current = $(node, element).closest(NODE);\n\n\t current.find(\".k-in:first\").addClass(\"k-state-focused\");\n\n\t id = current[0].id || id;\n\n\t if (id) {\n\t that.wrapper.removeAttr(\"aria-activedescendant\");\n\t current.attr(\"id\", id);\n\t that.wrapper.attr(\"aria-activedescendant\", id);\n\t }\n\n\t return;\n\t }\n\n\t if (!current) {\n\t current = that._nextVisible($());\n\t }\n\n\t return current;\n\t },\n\n\t select: function (node) {\n\t var that = this,\n\t element = that.element;\n\n\t if (!arguments.length) {\n\t return element.find(\".k-state-selected\").closest(NODE);\n\t }\n\n\t node = $(node, element).closest(NODE);\n\n\t element.find(\".k-state-selected\").each(function() {\n\t var dataItem = that.dataItem(this);\n\t if (dataItem) {\n\t dataItem.set(\"selected\", false);\n\t delete dataItem.selected;\n\t } else {\n\t $(this).removeClass(\"k-state-selected\");\n\t }\n\t });\n\n\t if (node.length) {\n\t that.dataItem(node).set(\"selected\", true);\n\t that._clickTarget = node;\n\t }\n\n\t that.trigger(CHANGE);\n\t },\n\n\t _toggle: function(node, dataItem, expand) {\n\t var options = this.options;\n\t var contents = nodeContents(node);\n\t var direction = expand ? \"expand\" : \"collapse\";\n\t var loaded;\n\n\t if (contents.data(\"animating\")) {\n\t return;\n\t }\n\n\t loaded = dataItem && dataItem.loaded();\n\n\t if (expand && !loaded) {\n\t if (options.loadOnDemand) {\n\t this._progress(node, true);\n\t }\n\n\t contents.remove();\n\t dataItem.load();\n\t } else {\n\t this._updateNodeClasses(node, {}, { expanded: expand });\n\n\t if (!expand) {\n\t contents.css(\"height\", contents.height()).css(\"height\");\n\t }\n\n\t contents\n\t .kendoStop(true, true)\n\t .kendoAnimate(extend(\n\t { reset: true },\n\t options.animation[direction],\n\t { complete: function() {\n\t if (expand) {\n\t contents.css(\"height\", \"\");\n\t }\n\t } }\n\t ));\n\t }\n\n\t },\n\n\t toggle: function (node, expand) {\n\t node = $(node);\n\n\t if (!nodeIcon(node).is(\".k-i-expand, .k-i-collapse\")) {\n\t return;\n\t }\n\n\t if (arguments.length == 1) {\n\t expand = !this._expanded(node);\n\t }\n\n\t this._expanded(node, expand);\n\t },\n\n\t destroy: function() {\n\t var that = this;\n\n\t Widget.fn.destroy.call(that);\n\n\t that.wrapper.off(NS);\n\t that.wrapper.find(\".k-checkbox-wrapper :checkbox\").off(NS);\n\n\t that._unbindDataSource();\n\n\t if (that.dragging) {\n\t that.dragging.destroy();\n\t }\n\n\t that._dataSourceUids = {};\n\n\t kendo.destroy(that.element);\n\n\t that.root = that.wrapper = that.element = null;\n\t },\n\n\t _expanded: function(node, value, force) {\n\t var expandedAttr = kendo.attr(\"expanded\");\n\t var dataItem;\n\t var expanded = value;\n\t var direction = expanded ? \"expand\" : \"collapse\";\n\n\t if (arguments.length == 1) {\n\t dataItem = this._dataItem(node);\n\t return node.attr(expandedAttr) === \"true\" || (dataItem && dataItem.expanded);\n\t }\n\n\t dataItem = this.dataItem(node);\n\n\t if (nodeContents(node).data(\"animating\")) {\n\t return;\n\t }\n\n\t if (force || !this._trigger(direction, node)) {\n\t if (expanded) {\n\t node.attr(expandedAttr, \"true\");\n\t node.attr(ARIAEXPANDED, \"true\");\n\t } else {\n\t node.removeAttr(expandedAttr);\n\t node.attr(ARIAEXPANDED, \"false\");\n\t }\n\n\t if (dataItem) {\n\t dataItem.set(\"expanded\", expanded);\n\t // necessary when expanding an item yields an error and the item is not expanded as a result\n\t expanded = dataItem.expanded;\n\t }\n\t }\n\t },\n\n\t _progress: function(node, showProgress) {\n\t var element = this.element;\n\t var loadingText = this.templates.loading({ messages: this.options.messages });\n\n\t if (arguments.length == 1) {\n\t showProgress = node;\n\n\t if (showProgress) {\n\t element.html(loadingText);\n\t } else {\n\t element.empty();\n\t }\n\t } else {\n\t nodeIcon(node).toggleClass(\"k-i-loading\", showProgress).removeClass(\"k-i-reload\");\n\t }\n\t },\n\n\t text: function (node, text) {\n\t var dataItem = this.dataItem(node),\n\t fieldBindings = this.options[bindings.text],\n\t level = dataItem.level(),\n\t length = fieldBindings.length,\n\t field = fieldBindings[Math.min(level, length-1)];\n\n\t if (text) {\n\t dataItem.set(field, text);\n\t } else {\n\t return dataItem[field];\n\t }\n\t },\n\n\t _objectOrSelf: function (node) {\n\t return $(node).closest(\"[data-role=treeview]\").data(\"kendoTreeView\") || this;\n\t },\n\n\t _dataSourceMove: function(nodeData, group, parentNode, callback) {\n\t var referenceDataItem,\n\t destTreeview = this._objectOrSelf(parentNode || group),\n\t destDataSource = destTreeview.dataSource;\n\t var loadPromise = $.Deferred().resolve().promise();\n\n\t if (parentNode && parentNode[0] != destTreeview.element[0]) {\n\t referenceDataItem = destTreeview.dataItem(parentNode);\n\n\t if (!referenceDataItem.loaded()) {\n\t destTreeview._progress(parentNode, true);\n\t loadPromise = referenceDataItem.load();\n\t }\n\n\t if (parentNode != this.root) {\n\t destDataSource = referenceDataItem.children;\n\n\t if (!destDataSource || !(destDataSource instanceof HierarchicalDataSource)) {\n\t referenceDataItem._initChildren();\n\t referenceDataItem.loaded(true);\n\t destDataSource = referenceDataItem.children;\n\t }\n\t }\n\t }\n\n\t nodeData = this._toObservableData(nodeData);\n\n\t return callback.call(destTreeview, destDataSource, nodeData, loadPromise);\n\t },\n\n\t _toObservableData: function(node) {\n\t var dataItem = node, dataSource, uid;\n\n\t if (isJQueryInstance(node) || isDomElement(node)) {\n\t dataSource = this._objectOrSelf(node).dataSource;\n\t uid = $(node).attr(kendo.attr(\"uid\"));\n\t dataItem = dataSource.getByUid(uid);\n\n\t if (dataItem) {\n\t dataItem = dataSource.remove(dataItem);\n\t }\n\t }\n\n\t return dataItem;\n\t },\n\n\t _insert: function(data, model, index) {\n\t if (!(model instanceof kendo.data.ObservableArray)) {\n\t if (!isArray(model)) {\n\t model = [model];\n\t }\n\t } else {\n\t // items will be converted to new Node instances\n\t model = model.toJSON();\n\t }\n\n\t var parentNode = data.parent();\n\n\t if (parentNode && parentNode._initChildren) {\n\t parentNode.hasChildren = true;\n\t parentNode._initChildren();\n\t }\n\n\t data.splice.apply(data, [ index, 0 ].concat(model));\n\n\t return this.findByUid(data[index].uid);\n\t },\n\n\t insertAfter: insertAction(1),\n\n\t insertBefore: insertAction(0),\n\n\t append: function (nodeData, parentNode, success) {\n\t var group = this.root;\n\n\t if(parentNode && nodeData instanceof jQuery && parentNode[0] === nodeData[0]){\n\t return;\n\t }\n\n\t parentNode = parentNode && parentNode.length ? parentNode : null;\n\n\t if (parentNode) {\n\t group = subGroup(parentNode);\n\t }\n\n\t return this._dataSourceMove(nodeData, group, parentNode, function (dataSource, model, loadModel) {\n\t var inserted;\n\t var that = this;\n\n\t function add() {\n\t if (parentNode) {\n\t that._expanded(parentNode, true, true);\n\t }\n\n\t var data = dataSource.data(),\n\t index = Math.max(data.length, 0);\n\n\t return that._insert(data, model, index);\n\t }\n\n\t loadModel.done(function() {\n\t inserted = add();\n\t success = success || $.noop;\n\t success(inserted);\n\t });\n\n\t return inserted || null;\n\t });\n\t },\n\n\t _remove: function (node, keepData) {\n\t var that = this,\n\t parentNode,\n\t prevSibling, nextSibling;\n\n\t node = $(node, that.element);\n\n\t this.angular(\"cleanup\", function(){\n\t return { elements: node.get() };\n\t });\n\n\t parentNode = node.parent().parent();\n\t prevSibling = node.prev();\n\t nextSibling = node.next();\n\n\t node[keepData ? \"detach\" : \"remove\"]();\n\n\t if (parentNode.hasClass(\"k-item\")) {\n\t updateNodeHtml(parentNode);\n\t that._updateNodeClasses(parentNode);\n\t }\n\n\t that._updateNodeClasses(prevSibling);\n\t that._updateNodeClasses(nextSibling);\n\n\t return node;\n\t },\n\n\t remove: function (node) {\n\t var dataItem = this.dataItem(node);\n\t if (dataItem) {\n\t this.dataSource.remove(dataItem);\n\t }\n\t },\n\n\t detach: function (node) {\n\t return this._remove(node, true);\n\t },\n\n\t findByText: function(text) {\n\t return $(this.element).find(\".k-in\").filter(function(i, element) {\n\t return $(element).text() == text;\n\t }).closest(NODE);\n\t },\n\n\t findByUid: function(uid) {\n\t var items = this.element.find(\".k-item\");\n\t var uidAttr = kendo.attr(\"uid\");\n\t var result;\n\n\t for (var i = 0; i < items.length; i++) {\n\t if (items[i].getAttribute(uidAttr) == uid) {\n\t result = items[i];\n\t break;\n\t }\n\t }\n\n\t return $(result);\n\t },\n\n\t expandPath: function(path, complete) {\n\t var treeview = this;\n\t var nodeIds = path.slice(0);\n\t var callback = complete || $.noop;\n\n\t function proceed() {\n\t nodeIds.shift();\n\n\t if (nodeIds.length) {\n\t expand(nodeIds[0]).then(proceed);\n\t } else {\n\t callback.call(treeview);\n\t }\n\t }\n\n\t function expand(id) {\n\t var result = $.Deferred();\n\t var node = treeview.dataSource.get(id);\n\t var expandedAttr = kendo.attr(\"expanded\");\n\t var nodeElement;\n\n\t if (node) {\n\t nodeElement = treeview.findByUid(node.uid);\n\n\t if (node.loaded()) {\n\t node.set(\"expanded\", true);\n\t nodeElement.attr(expandedAttr, true);\n\t nodeElement.attr(ARIAEXPANDED, true);\n\t result.resolve();\n\t } else {\n\t // manually show progress of the node\n\t // should be moved to `refresh`\n\t // if the datasource starts triggering a `requestStart` event for nodes\n\t treeview._progress(nodeElement, true);\n\n\t node.load().then(function() {\n\t node.set(\"expanded\", true);\n\t nodeElement.attr(expandedAttr, true);\n\t nodeElement.attr(ARIAEXPANDED, true);\n\t result.resolve();\n\t });\n\t }\n\t } else {\n\t result.resolve();\n\t }\n\n\t return result.promise();\n\t }\n\n\t // expand async nodes\n\t expand(nodeIds[0]).then(proceed);\n\t },\n\n\t _parentIds: function(node) {\n\t var parent = node && node.parentNode();\n\t var parents = [];\n\t while (parent && parent.parentNode) {\n\t parents.unshift(parent.id);\n\t parent = parent.parentNode();\n\t }\n\n\t return parents;\n\t },\n\n\t expandTo: function(node) {\n\t if (!(node instanceof kendo.data.Node)) {\n\t node = this.dataSource.get(node);\n\t }\n\n\t var parents = this._parentIds(node);\n\n\t this.expandPath(parents);\n\t },\n\n\t _renderItem: function (options) {\n\t if (!options.group) {\n\t options.group = {};\n\t }\n\n\t options.treeview = this.options;\n\n\t options.r = this.templates;\n\n\t return this.templates.item(options);\n\t },\n\n\t _renderGroup: function (options) {\n\t var that = this;\n\n\t options.renderItems = function(options) {\n\t var html = \"\",\n\t i = 0,\n\t items = options.items,\n\t len = items ? items.length : 0,\n\t group = options.group;\n\n\t group.length = len;\n\n\t for (; i < len; i++) {\n\t options.group = group;\n\t options.item = items[i];\n\t options.item.index = i;\n\t html += that._renderItem(options);\n\t }\n\n\t return html;\n\t };\n\n\t options.r = that.templates;\n\n\t return that.templates.group(options);\n\t }\n\t });\n\n\t ui.plugin(TreeView);\n\t})(window.kendo.jQuery);\n\n\treturn window.kendo;\n\n\t}, __webpack_require__(3));\n\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1017)))\n\n/***/ })\n\n/******/ });","module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(1406);\n\n\n/***/ }),\n\n/***/ 3:\n/***/ (function(module, exports) {\n\n\tmodule.exports = function() { throw new Error(\"define cannot be used indirect\"); };\r\n\n\n/***/ }),\n\n/***/ 1018:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./kendo.core\");\n\n/***/ }),\n\n/***/ 1406:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function(f, define){\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(1018) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (f), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t})(function(){\n\n\tvar __meta__ = { // jshint ignore:line\n\t id: \"userevents\",\n\t name: \"User Events\",\n\t category: \"framework\",\n\t depends: [ \"core\" ],\n\t hidden: true\n\t};\n\n\t(function ($, undefined) {\n\t var kendo = window.kendo,\n\t support = kendo.support,\n\t Class = kendo.Class,\n\t Observable = kendo.Observable,\n\t now = $.now,\n\t extend = $.extend,\n\t OS = support.mobileOS,\n\t invalidZeroEvents = OS && OS.android,\n\t DEFAULT_MIN_HOLD = 800,\n\t CLICK_DELAY = 300,\n\t DEFAULT_THRESHOLD = support.browser.msie ? 5 : 0, // WP8 and W8 are very sensitive and always report move.\n\n\t // UserEvents events\n\t PRESS = \"press\",\n\t HOLD = \"hold\",\n\t SELECT = \"select\",\n\t START = \"start\",\n\t MOVE = \"move\",\n\t END = \"end\",\n\t CANCEL = \"cancel\",\n\t TAP = \"tap\",\n\t DOUBLETAP = \"doubleTap\",\n\t RELEASE = \"release\",\n\t GESTURESTART = \"gesturestart\",\n\t GESTURECHANGE = \"gesturechange\",\n\t GESTUREEND = \"gestureend\",\n\t GESTURETAP = \"gesturetap\";\n\n\t var THRESHOLD = {\n\t \"api\": 0,\n\t \"touch\": 0,\n\t \"mouse\": 9,\n\t \"pointer\": 9\n\t };\n\n\t var ENABLE_GLOBAL_SURFACE = (!support.touch || support.mouseAndTouchPresent);\n\n\t function touchDelta(touch1, touch2) {\n\t var x1 = touch1.x.location,\n\t y1 = touch1.y.location,\n\t x2 = touch2.x.location,\n\t y2 = touch2.y.location,\n\t dx = x1 - x2,\n\t dy = y1 - y2;\n\n\t return {\n\t center: {\n\t x: (x1 + x2) / 2,\n\t y: (y1 + y2) / 2\n\t },\n\n\t distance: Math.sqrt(dx*dx + dy*dy)\n\t };\n\t }\n\n\t function getTouches(e) {\n\t var touches = [],\n\t originalEvent = e.originalEvent,\n\t currentTarget = e.currentTarget,\n\t idx = 0, length,\n\t changedTouches,\n\t touch;\n\n\t if (e.api) {\n\t touches.push({\n\t id: 2, // hardcoded ID for API call;\n\t event: e,\n\t target: e.target,\n\t currentTarget: e.target,\n\t location: e,\n\t type: \"api\"\n\t });\n\t }\n\t else if (e.type.match(/touch/)) {\n\t changedTouches = originalEvent ? originalEvent.changedTouches : [];\n\t for (length = changedTouches.length; idx < length; idx ++) {\n\t touch = changedTouches[idx];\n\t touches.push({\n\t location: touch,\n\t event: e,\n\t target: touch.target,\n\t currentTarget: currentTarget,\n\t id: touch.identifier,\n\t type: \"touch\"\n\t });\n\t }\n\t }\n\t else if (support.pointers || support.msPointers) {\n\t touches.push({\n\t location: originalEvent,\n\t event: e,\n\t target: e.target,\n\t currentTarget: currentTarget,\n\t id: originalEvent.pointerId,\n\t type: \"pointer\"\n\t });\n\t } else {\n\t touches.push({\n\t id: 1, // hardcoded ID for mouse event;\n\t event: e,\n\t target: e.target,\n\t currentTarget: currentTarget,\n\t location: e,\n\t type: \"mouse\"\n\t });\n\t }\n\n\t return touches;\n\t }\n\n\t var TouchAxis = Class.extend({\n\t init: function(axis, location) {\n\t var that = this;\n\n\t that.axis = axis;\n\n\t that._updateLocationData(location);\n\n\t that.startLocation = that.location;\n\t that.velocity = that.delta = 0;\n\t that.timeStamp = now();\n\t },\n\n\t move: function(location) {\n\t var that = this,\n\t offset = location[\"page\" + that.axis],\n\t timeStamp = now(),\n\t timeDelta = (timeStamp - that.timeStamp) || 1; // Firing manually events in tests can make this 0;\n\n\t if (!offset && invalidZeroEvents) {\n\t return;\n\t }\n\n\t that.delta = offset - that.location;\n\n\t that._updateLocationData(location);\n\n\t that.initialDelta = offset - that.startLocation;\n\t that.velocity = that.delta / timeDelta;\n\t that.timeStamp = timeStamp;\n\t },\n\n\t _updateLocationData: function(location) {\n\t var that = this, axis = that.axis;\n\n\t that.location = location[\"page\" + axis];\n\t that.client = location[\"client\" + axis];\n\t that.screen = location[\"screen\" + axis];\n\t }\n\t });\n\n\t var Touch = Class.extend({\n\t init: function(userEvents, target, touchInfo) {\n\t extend(this, {\n\t x: new TouchAxis(\"X\", touchInfo.location),\n\t y: new TouchAxis(\"Y\", touchInfo.location),\n\t type: touchInfo.type,\n\t useClickAsTap: userEvents.useClickAsTap,\n\t threshold: userEvents.threshold || THRESHOLD[touchInfo.type],\n\t userEvents: userEvents,\n\t target: target,\n\t currentTarget: touchInfo.currentTarget,\n\t initialTouch: touchInfo.target,\n\t id: touchInfo.id,\n\t pressEvent: touchInfo,\n\t _clicks: userEvents._clicks,\n\t supportDoubleTap: userEvents.supportDoubleTap,\n\t _moved: false,\n\t _finished: false\n\t });\n\t },\n\n\t press: function() {\n\t this._holdTimeout = setTimeout($.proxy(this, \"_hold\"), this.userEvents.minHold);\n\t this._trigger(PRESS, this.pressEvent);\n\t },\n\n\t _tap: function(touchInfo) {\n\t var that = this;\n\t that.userEvents._clicks++;\n\t if (that.userEvents._clicks == 1) {\n\t that._clickTimeout = setTimeout(function() {\n\t if (that.userEvents._clicks == 1) {\n\t that._trigger(TAP, touchInfo);\n\t }\n\t else {\n\t that._trigger(DOUBLETAP, touchInfo);\n\t }\n\t that.userEvents._clicks = 0;\n\t }, CLICK_DELAY);\n\t }\n\t },\n\n\t _hold: function() {\n\t this._trigger(HOLD, this.pressEvent);\n\t },\n\n\t move: function(touchInfo) {\n\t var that = this;\n\t var preventMove = touchInfo.type !== \"api\" && that.userEvents._shouldNotMove;\n\n\t if (that._finished || preventMove) { return; }\n\n\t that.x.move(touchInfo.location);\n\t that.y.move(touchInfo.location);\n\n\t if (!that._moved) {\n\t if (that._withinIgnoreThreshold()) {\n\t return;\n\t }\n\n\t if (!UserEvents.current || UserEvents.current === that.userEvents) {\n\t that._start(touchInfo);\n\t } else {\n\t return that.dispose();\n\t }\n\t }\n\n\t // Event handlers may cancel the drag in the START event handler, hence the double check for pressed.\n\t if (!that._finished) {\n\t that._trigger(MOVE, touchInfo);\n\t }\n\t },\n\n\t end: function(touchInfo) {\n\t this.endTime = now();\n\n\t if (this._finished) { return; }\n\n\t // Mark the object as finished if there are blocking operations in the event handlers (alert/confirm)\n\t this._finished = true;\n\n\t this._trigger(RELEASE, touchInfo); // Release should be fired before TAP (as click is after mouseup/touchend)\n\n\t if (this._moved) {\n\t this._trigger(END, touchInfo);\n\t } else {\n\t if (!this.useClickAsTap) {\n\t if (this.supportDoubleTap) {\n\t this._tap(touchInfo);\n\t }\n\t else {\n\t this._trigger(TAP, touchInfo);\n\t }\n\t }\n\t }\n\n\t clearTimeout(this._holdTimeout);\n\n\t this.dispose();\n\t },\n\n\t dispose: function() {\n\t var userEvents = this.userEvents,\n\t activeTouches = userEvents.touches;\n\n\t this._finished = true;\n\t this.pressEvent = null;\n\t clearTimeout(this._holdTimeout);\n\n\t activeTouches.splice($.inArray(this, activeTouches), 1);\n\t },\n\n\t skip: function() {\n\t this.dispose();\n\t },\n\n\t cancel: function() {\n\t this.dispose();\n\t },\n\n\t isMoved: function() {\n\t return this._moved;\n\t },\n\n\t _start: function(touchInfo) {\n\t clearTimeout(this._holdTimeout);\n\n\t this.startTime = now();\n\t this._moved = true;\n\t this._trigger(START, touchInfo);\n\t },\n\n\t _trigger: function(name, touchInfo) {\n\t var that = this,\n\t jQueryEvent = touchInfo.event,\n\t data = {\n\t touch: that,\n\t x: that.x,\n\t y: that.y,\n\t target: that.target,\n\t event: jQueryEvent\n\t };\n\n\t if(that.userEvents.notify(name, data)) {\n\t jQueryEvent.preventDefault();\n\t }\n\t },\n\n\t _withinIgnoreThreshold: function() {\n\t var xDelta = this.x.initialDelta,\n\t yDelta = this.y.initialDelta;\n\n\t return Math.sqrt(xDelta * xDelta + yDelta * yDelta) <= this.threshold;\n\t }\n\t });\n\n\t function withEachUpEvent(callback) {\n\t var downEvents = kendo.eventMap.up.split(\" \"),\n\t idx = 0,\n\t length = downEvents.length;\n\n\t for(; idx < length; idx ++) {\n\t callback(downEvents[idx]);\n\t }\n\t }\n\n\t var UserEvents = Observable.extend({\n\t init: function(element, options) {\n\t var that = this,\n\t filter,\n\t ns = kendo.guid();\n\n\t options = options || {};\n\t filter = that.filter = options.filter;\n\t that.threshold = options.threshold || DEFAULT_THRESHOLD;\n\t that.minHold = options.minHold || DEFAULT_MIN_HOLD;\n\t that.touches = [];\n\t that._maxTouches = options.multiTouch ? 2 : 1;\n\t that.allowSelection = options.allowSelection;\n\t that.captureUpIfMoved = options.captureUpIfMoved;\n\t that.useClickAsTap = !options.fastTap && !support.delayedClick();\n\t that.eventNS = ns;\n\t that._clicks = 0;\n\t that.supportDoubleTap = options.supportDoubleTap;\n\n\t element = $(element).handler(that);\n\t Observable.fn.init.call(that);\n\n\t extend(that, {\n\t element: element,\n\t // the touch events lock to the element anyway, so no need for the global setting\n\t surface: options.global && ENABLE_GLOBAL_SURFACE ? $(element[0].ownerDocument.documentElement) : $(options.surface || element),\n\t stopPropagation: options.stopPropagation,\n\t pressed: false\n\t });\n\n\t that.surface.handler(that)\n\t .on(kendo.applyEventMap(\"move\", ns), \"_move\")\n\t .on(kendo.applyEventMap(\"up cancel\", ns), \"_end\");\n\n\t element.on(kendo.applyEventMap(\"down\", ns), filter, \"_start\");\n\n\t if (that.useClickAsTap) {\n\t element.on(kendo.applyEventMap(\"click\", ns), filter, \"_click\");\n\t }\n\n\t if (support.pointers || support.msPointers) {\n\t //touch-action:none will not work for IE10\n\t if (support.browser.version < 11) {\n\t var defaultAction = \"pinch-zoom double-tap-zoom\";\n\t element.css(\"-ms-touch-action\", options.touchAction && options.touchAction != \"none\" ? defaultAction + \" \" + options.touchAction : defaultAction);\n\t } else {\n\t element.css(\"touch-action\", options.touchAction || \"none\");\n\t }\n\t }\n\n\t if (options.preventDragEvent) {\n\t element.on(kendo.applyEventMap(\"dragstart\", ns), kendo.preventDefault);\n\t }\n\n\t element.on(kendo.applyEventMap(\"mousedown\", ns), filter, { root: element }, \"_select\");\n\n\t if (that.captureUpIfMoved && support.eventCapture) {\n\t var surfaceElement = that.surface[0],\n\t preventIfMovingProxy = $.proxy(that.preventIfMoving, that);\n\n\t withEachUpEvent(function(eventName) {\n\t surfaceElement.addEventListener(eventName, preventIfMovingProxy, true);\n\t });\n\t }\n\n\t that.bind([\n\t PRESS,\n\t HOLD,\n\t TAP,\n\t DOUBLETAP,\n\t START,\n\t MOVE,\n\t END,\n\t RELEASE,\n\t CANCEL,\n\t GESTURESTART,\n\t GESTURECHANGE,\n\t GESTUREEND,\n\t GESTURETAP,\n\t SELECT\n\t ], options);\n\t },\n\n\t preventIfMoving: function(e) {\n\t if (this._isMoved()) {\n\t e.preventDefault();\n\t }\n\t },\n\n\t destroy: function() {\n\t var that = this;\n\n\t if (that._destroyed) {\n\t return;\n\t }\n\n\t that._destroyed = true;\n\n\t if (that.captureUpIfMoved && support.eventCapture) {\n\t var surfaceElement = that.surface[0];\n\t withEachUpEvent(function(eventName) {\n\t surfaceElement.removeEventListener(eventName, that.preventIfMoving);\n\t });\n\t }\n\n\t that.element.kendoDestroy(that.eventNS);\n\t that.surface.kendoDestroy(that.eventNS);\n\t that.element.removeData(\"handler\");\n\t that.surface.removeData(\"handler\");\n\t that._disposeAll();\n\n\t that.unbind();\n\t delete that.surface;\n\t delete that.element;\n\t delete that.currentTarget;\n\t },\n\n\t capture: function() {\n\t UserEvents.current = this;\n\t },\n\n\t cancel: function() {\n\t this._disposeAll();\n\t this.trigger(CANCEL);\n\t },\n\n\t notify: function(eventName, data) {\n\t var that = this,\n\t touches = that.touches;\n\n\t if (this._isMultiTouch()) {\n\t switch(eventName) {\n\t case MOVE:\n\t eventName = GESTURECHANGE;\n\t break;\n\t case END:\n\t eventName = GESTUREEND;\n\t break;\n\t case TAP:\n\t eventName = GESTURETAP;\n\t break;\n\t }\n\n\t extend(data, {touches: touches}, touchDelta(touches[0], touches[1]));\n\t }\n\n\t return this.trigger(eventName, extend(data, {type: eventName}));\n\t },\n\n\t // API\n\t press: function(x, y, target) {\n\t this._apiCall(\"_start\", x, y, target);\n\t },\n\n\t move: function(x, y) {\n\t this._apiCall(\"_move\", x, y);\n\t },\n\n\t end: function(x, y) {\n\t this._apiCall(\"_end\", x, y);\n\t },\n\n\t _isMultiTouch: function() {\n\t return this.touches.length > 1;\n\t },\n\n\t _maxTouchesReached: function() {\n\t return this.touches.length >= this._maxTouches;\n\t },\n\n\t _disposeAll: function() {\n\t var touches = this.touches;\n\t while (touches.length > 0) {\n\t touches.pop().dispose();\n\t }\n\t },\n\n\t _isMoved: function() {\n\t return $.grep(this.touches, function(touch) {\n\t return touch.isMoved();\n\t }).length;\n\t },\n\n\t _select: function(e) {\n\t if (!this.allowSelection || this.trigger(SELECT, { event: e })) {\n\t e.preventDefault();\n\t }\n\t },\n\n\t _start: function(e) {\n\t var that = this,\n\t idx = 0,\n\t filter = that.filter,\n\t target,\n\t touches = getTouches(e),\n\t length = touches.length,\n\t touch,\n\t which = e.which;\n\n\t if ((which && which > 1) || (that._maxTouchesReached())){\n\t return;\n\t }\n\n\t UserEvents.current = null;\n\n\t that.currentTarget = e.currentTarget;\n\n\t if (that.stopPropagation) {\n\t e.stopPropagation();\n\t }\n\n\t for (; idx < length; idx ++) {\n\t if (that._maxTouchesReached()) {\n\t break;\n\t }\n\n\t touch = touches[idx];\n\n\t if (filter) {\n\t target = $(touch.currentTarget); // target.is(filter) ? target : target.closest(filter, that.element);\n\t } else {\n\t target = that.element;\n\t }\n\n\t if (!target.length) {\n\t continue;\n\t }\n\n\t touch = new Touch(that, target, touch);\n\t that.touches.push(touch);\n\t touch.press();\n\n\t if (that._isMultiTouch()) {\n\t that.notify(\"gesturestart\", {});\n\t }\n\t }\n\t },\n\n\t _move: function(e) {\n\t this._eachTouch(\"move\", e);\n\t },\n\n\t _end: function(e) {\n\t this._eachTouch(\"end\", e);\n\t },\n\n\t _click: function(e) {\n\t var data = {\n\t touch: {\n\t initialTouch: e.target,\n\t target: $(e.currentTarget),\n\t endTime: now(),\n\t x: {\n\t location: e.pageX,\n\t client: e.clientX\n\t },\n\t y: {\n\t location: e.pageY,\n\t client: e.clientY\n\t }\n\t },\n\t x: e.pageX,\n\t y: e.pageY,\n\t target: $(e.currentTarget),\n\t event: e,\n\t type: \"tap\"\n\t };\n\n\t if (this.trigger(\"tap\", data)) {\n\t e.preventDefault();\n\t }\n\t },\n\n\t _eachTouch: function(methodName, e) {\n\t var that = this,\n\t dict = {},\n\t touches = getTouches(e),\n\t activeTouches = that.touches,\n\t idx,\n\t touch,\n\t touchInfo,\n\t matchingTouch;\n\n\t for (idx = 0; idx < activeTouches.length; idx ++) {\n\t touch = activeTouches[idx];\n\t dict[touch.id] = touch;\n\t }\n\n\t for (idx = 0; idx < touches.length; idx ++) {\n\t touchInfo = touches[idx];\n\t matchingTouch = dict[touchInfo.id];\n\n\t if (matchingTouch) {\n\t matchingTouch[methodName](touchInfo);\n\t }\n\t }\n\t },\n\n\t _apiCall: function(type, x, y, target) {\n\t this[type]({\n\t api: true,\n\t pageX: x,\n\t pageY: y,\n\t clientX: x,\n\t clientY: y,\n\t target: $(target || this.element)[0],\n\t stopPropagation: $.noop,\n\t preventDefault: $.noop\n\t });\n\t }\n\t });\n\n\t UserEvents.defaultThreshold = function(value) {\n\t DEFAULT_THRESHOLD = value;\n\t };\n\n\t UserEvents.minHold = function(value) {\n\t DEFAULT_MIN_HOLD = value;\n\t };\n\n\t kendo.getTouches = getTouches;\n\t kendo.touchDelta = touchDelta;\n\t kendo.UserEvents = UserEvents;\n\t })(window.kendo.jQuery);\n\n\treturn window.kendo;\n\n\t}, __webpack_require__(3));\n\n\n/***/ })\n\n/******/ });","module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(1407);\n\n\n/***/ }),\n\n/***/ 3:\n/***/ (function(module, exports) {\n\n\tmodule.exports = function() { throw new Error(\"define cannot be used indirect\"); };\r\n\n\n/***/ }),\n\n/***/ 1018:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./kendo.core\");\n\n/***/ }),\n\n/***/ 1407:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function(f, define){\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(1018) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (f), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t})(function(){\n\n\tvar __meta__ = { // jshint ignore:line\n\t id: \"validator\",\n\t name: \"Validator\",\n\t category: \"web\",\n\t description: \"The Validator offers an easy way to do a client-side form validation.\",\n\t depends: [ \"core\" ]\n\t};\n\n\t/* jshint eqnull: true */\n\t(function($, undefined) {\n\t var kendo = window.kendo,\n\t Widget = kendo.ui.Widget,\n\t NS = \".kendoValidator\",\n\t INVALIDMSG = \"k-invalid-msg\",\n\t invalidMsgRegExp = new RegExp(INVALIDMSG,'i'),\n\t INVALIDINPUT = \"k-invalid\",\n\t VALIDINPUT = \"k-valid\",\n\t VALIDATIONSUMMARY = \"k-validation-summary\",\n\t INVALIDLABEL = \"k-text-error\",\n\t MESSAGEBOX = \"k-messagebox k-messagebox-error\",\n\t ARIAINVALID = \"aria-invalid\",\n\t ARIADESCRIBEDBY = \"aria-describedby\",\n\t emailRegExp = /^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/i,\n\t urlRegExp = /^(https?|ftp):\\/\\/(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(\\#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i,\n\t INPUTSELECTOR = \":input:not(:button,[type=submit],[type=reset],[disabled],[readonly])\",\n\t CHECKBOXSELECTOR = \":checkbox:not([disabled],[readonly])\",\n\t NUMBERINPUTSELECTOR = \"[type=number],[type=range]\",\n\t BLUR = \"blur\",\n\t NAME = \"name\",\n\t FORM = \"form\",\n\t NOVALIDATE = \"novalidate\",\n\t //events\n\t VALIDATE = \"validate\",\n\t CHANGE = \"change\",\n\t VALIDATE_INPUT = \"validateInput\",\n\t proxy = $.proxy,\n\t patternMatcher = function(value, pattern) {\n\t if (typeof pattern === \"string\") {\n\t pattern = new RegExp('^(?:' + pattern + ')$');\n\t }\n\t return pattern.test(value);\n\t },\n\t matcher = function(input, selector, pattern) {\n\t var value = input.val();\n\n\t if (input.filter(selector).length && value !== \"\") {\n\t return patternMatcher(value, pattern);\n\t }\n\t return true;\n\t },\n\t hasAttribute = function(input, name) {\n\t if (input.length) {\n\t return input[0].attributes[name] != null;\n\t }\n\t return false;\n\t };\n\n\t if (!kendo.ui.validator) {\n\t kendo.ui.validator = { rules: {}, messages: {}, allowSubmit: $.noop, validateOnInit: $.noop };\n\t }\n\n\t function resolveRules(element) {\n\t var resolvers = kendo.ui.validator.ruleResolvers || {},\n\t rules = {},\n\t name;\n\n\t for (name in resolvers) {\n\t $.extend(true, rules, resolvers[name].resolve(element));\n\t }\n\t return rules;\n\t }\n\n\t function decode(value) {\n\t return value.replace(/&/g, '&')\n\t .replace(/"/g, '\"')\n\t .replace(/'/g, \"'\")\n\t .replace(/</g, '<')\n\t .replace(/>/g, '>');\n\t }\n\n\t function numberOfDecimalDigits(value) {\n\t value = (value + \"\").split('.');\n\t if (value.length > 1) {\n\t return value[1].length;\n\t }\n\t return 0;\n\t }\n\n\t function parseHtml(text) {\n\t if ($.parseHTML) {\n\t return $($.parseHTML(text));\n\t }\n\t return $(text);\n\t }\n\n\t function searchForMessageContainer(elements, fieldName) {\n\t var containers = $(),\n\t element,\n\t attr;\n\n\t for (var idx = 0, length = elements.length; idx < length; idx++) {\n\t element = elements[idx];\n\t if (invalidMsgRegExp.test(element.className)) {\n\t attr = element.getAttribute(kendo.attr(\"for\"));\n\t if (attr === fieldName) {\n\t containers = containers.add(element);\n\t }\n\t }\n\t }\n\t return containers;\n\t }\n\n\t var SUMMARYTEMPLATE = '';\n\n\t var Validator = Widget.extend({\n\t init: function(element, options) {\n\t var that = this,\n\t resolved = resolveRules(element),\n\t validateAttributeSelector = \"[\" + kendo.attr(\"validate\") + \"!=false]\";\n\n\t options = options || {};\n\n\t options.rules = $.extend({}, kendo.ui.validator.rules, resolved.rules, options.rules);\n\t options.messages = $.extend({}, kendo.ui.validator.messages, resolved.messages, options.messages);\n\n\t Widget.fn.init.call(that, element, options);\n\n\t that._errorTemplate = kendo.template(that.options.errorTemplate);\n\t that._summaryTemplate = kendo.template(that.options.validationSummary.template || SUMMARYTEMPLATE);\n\n\t if (that.element.is(FORM)) {\n\t that.element.attr(NOVALIDATE, NOVALIDATE);\n\t }\n\n\t that._inputSelector = INPUTSELECTOR + validateAttributeSelector;\n\t that._checkboxSelector = CHECKBOXSELECTOR + validateAttributeSelector;\n\n\t that._errors = {};\n\t that._attachEvents();\n\t that._isValidated = false;\n\n\t if (that._validateOnInit()) {\n\t that.validate();\n\t }\n\t },\n\n\t events: [ VALIDATE, CHANGE, VALIDATE_INPUT ],\n\n\t options: {\n\t name: \"Validator\",\n\t errorTemplate: '#= message #',\n\t messages: {\n\t required: \"{0} is required\",\n\t pattern: \"{0} is not valid\",\n\t min: \"{0} should be greater than or equal to {1}\",\n\t max: \"{0} should be smaller than or equal to {1}\",\n\t step: \"{0} is not valid\",\n\t email: \"{0} is not valid email\",\n\t url: \"{0} is not valid URL\",\n\t date: \"{0} is not valid date\",\n\t dateCompare: \"End date should be greater than or equal to the start date\"\n\t },\n\t rules: {\n\t required: function(input) {\n\t var checkbox = input.filter(\"[type=checkbox]\").length && !input.is(\":checked\"),\n\t value = input.val();\n\n\t return !(hasAttribute(input, \"required\") && (!value || value === \"\" || value.length === 0 || checkbox));\n\t },\n\t pattern: function(input) {\n\t if (input.filter(\"[type=text],[type=email],[type=url],[type=tel],[type=search],[type=password]\").filter(\"[pattern]\").length && input.val() !== \"\") {\n\t return patternMatcher(input.val(), input.attr(\"pattern\"));\n\t }\n\t return true;\n\t },\n\t min: function(input) {\n\t if (input.filter(NUMBERINPUTSELECTOR + \",[\" + kendo.attr(\"type\") + \"=number]\").filter(\"[min]\").length && input.val() !== \"\") {\n\t var min = parseFloat(input.attr(\"min\")) || 0,\n\t val = kendo.parseFloat(input.val());\n\n\t return min <= val;\n\t }\n\t return true;\n\t },\n\t max: function(input) {\n\t if (input.filter(NUMBERINPUTSELECTOR + \",[\" + kendo.attr(\"type\") + \"=number]\").filter(\"[max]\").length && input.val() !== \"\") {\n\t var max = parseFloat(input.attr(\"max\")) || 0,\n\t val = kendo.parseFloat(input.val());\n\n\t return max >= val;\n\t }\n\t return true;\n\t },\n\t step: function(input) {\n\t if (input.filter(NUMBERINPUTSELECTOR + \",[\" + kendo.attr(\"type\") + \"=number]\").filter(\"[step]\").length && input.val() !== \"\") {\n\t var min = parseFloat(input.attr(\"min\")) || 0,\n\t step = parseFloat(input.attr(\"step\")) || 1,\n\t val = parseFloat(input.val()),\n\t decimals = numberOfDecimalDigits(step),\n\t raise;\n\n\t if (decimals) {\n\t raise = Math.pow(10, decimals);\n\t return ((Math.floor((val-min)*raise))%(step*raise)) / Math.pow(100, decimals) === 0;\n\t }\n\t return ((val-min)%step) === 0;\n\t }\n\t return true;\n\t },\n\t email: function(input) {\n\t return matcher(input, \"[type=email],[\" + kendo.attr(\"type\") + \"=email]\", emailRegExp);\n\t },\n\t url: function(input) {\n\t return matcher(input, \"[type=url],[\" + kendo.attr(\"type\") + \"=url]\", urlRegExp);\n\t },\n\t date: function(input) {\n\t if (input.filter(\"[type^=date],[\" + kendo.attr(\"type\") + \"=date]\").length && input.val() !== \"\") {\n\t return kendo.parseDate(input.val(), input.attr(kendo.attr(\"format\"))) !== null;\n\t }\n\t return true;\n\t }\n\t },\n\t validateOnBlur: true,\n\t validationSummary: false\n\t },\n\n\t _allowSubmit: function() {\n\t return kendo.ui.validator.allowSubmit(this.element, this.errors());\n\t },\n\n\t _validateOnInit: function() {\n\t return kendo.ui.validator.validateOnInit(this.element);\n\t },\n\n\t destroy: function() {\n\t Widget.fn.destroy.call(this);\n\n\t this.element.off(NS);\n\n\t if (this.validationSummary) {\n\t this.validationSummary.off(NS);\n\t this.validationSummary = null;\n\t }\n\t },\n\n\t value: function() {\n\t if (!this._isValidated) {\n\t return false;\n\t }\n\n\t return this.errors().length === 0;\n\t },\n\n\t _submit: function(e) {\n\t if (!this.validate() && !this._allowSubmit()) {\n\t e.stopPropagation();\n\t e.stopImmediatePropagation();\n\t e.preventDefault();\n\t return false;\n\t }\n\t return true;\n\t },\n\n\t _checkElement: function(element) {\n\t var state = this.value();\n\n\t this.validateInput(element);\n\n\t if (this.value() !== state) {\n\t this.trigger(CHANGE);\n\t }\n\t },\n\n\t _attachEvents: function() {\n\t var that = this;\n\n\t if (that.element.is(FORM)) {\n\t that.element.on(\"submit\" + NS, proxy(that._submit, that));\n\t }\n\n\t if (that.options.validateOnBlur) {\n\t if (!that.element.is(INPUTSELECTOR)) {\n\t that.element.on(BLUR + NS, that._inputSelector, function() {\n\t that._checkElement($(this));\n\t });\n\n\t that.element.on(\"click\" + NS, that._checkboxSelector, function() {\n\t that._checkElement($(this));\n\t });\n\t } else {\n\t that.element.on(BLUR + NS, function() {\n\t that._checkElement(that.element);\n\t });\n\n\t if (that.element.is(CHECKBOXSELECTOR)) {\n\t that.element.on(\"click\" + NS, function() {\n\t that._checkElement(that.element);\n\t });\n\t }\n\t }\n\t }\n\t },\n\n\t validate: function() {\n\t var inputs;\n\t var idx;\n\t var result = false;\n\t var length;\n\n\t var isValid = this.value();\n\n\t this._errors = {};\n\n\t if (!this.element.is(INPUTSELECTOR)) {\n\t var invalid = false;\n\n\t inputs = this.element.find(this._inputSelector);\n\n\t for (idx = 0, length = inputs.length; idx < length; idx++) {\n\t if (!this.validateInput(inputs.eq(idx))) {\n\t invalid = true;\n\t }\n\t }\n\n\t result = !invalid;\n\t } else {\n\t result = this.validateInput(this.element);\n\t }\n\n\t if (this.options.validationSummary && !isValid) {\n\t this.showValidationSummary();\n\t }\n\n\t this.trigger(VALIDATE, { valid: result, errors: this.errors() });\n\n\t if (isValid !== result) {\n\t this.trigger(CHANGE);\n\t }\n\n\t return result;\n\t },\n\n\t validateInput: function(input) {\n\t input = $(input);\n\n\t this._isValidated = true;\n\n\t var that = this,\n\t template = that._errorTemplate,\n\t result = that._checkValidity(input),\n\t valid = result.valid,\n\t className = \".\" + INVALIDMSG,\n\t fieldName = (input.attr(NAME) || \"\"),\n\t lbl = that._findMessageContainer(fieldName).add(input.next(className).filter(function() {\n\t var element = $(this);\n\t if (element.filter(\"[\" + kendo.attr(\"for\") + \"]\").length) {\n\t return element.attr(kendo.attr(\"for\")) === fieldName;\n\t }\n\n\t return true;\n\n\t })).addClass(\"k-hidden\"),\n\t messageText = !valid ? that._extractMessage(input, result.key) : \"\",\n\t messageLabel = !valid ? parseHtml(template({ message: decode(messageText), field: fieldName })) : \"\",\n\t wasValid = !input.attr(ARIAINVALID);\n\n\t input.removeAttr(ARIAINVALID);\n\n\t if (!valid) {\n\t that._errors[fieldName] = messageText;\n\t var lblId = lbl.attr('id');\n\n\t that._decorateMessageContainer(messageLabel, fieldName);\n\n\n\t if (lblId) {\n\t messageLabel.attr('id', lblId);\n\t }\n\n\t if (lbl.length !== 0) {\n\t lbl.replaceWith(messageLabel);\n\t } else {\n\t var widgetInstance = kendo.widgetInstance(input);\n\t var parentElement = input.parent().get(0);\n\t var nextElement = input.next().get(0);\n\n\t if (parentElement && parentElement.nodeName === \"LABEL\") {\n\t // Input inside label\n\t messageLabel.insertAfter(parentElement);\n\t } else if (nextElement && nextElement.nodeName === \"LABEL\") {\n\t // Input before label\n\t messageLabel.insertAfter(nextElement);\n\t } else if (widgetInstance && widgetInstance.wrapper) {\n\t messageLabel.insertAfter(widgetInstance.wrapper);\n\t } else {\n\t messageLabel.insertAfter(input);\n\t }\n\t }\n\n\t messageLabel.removeClass(\"k-hidden\");\n\n\t input.attr(ARIAINVALID, true);\n\t } else {\n\t delete that._errors[fieldName];\n\t }\n\n\t if (wasValid !== valid) {\n\t this.trigger(VALIDATE_INPUT, { valid: valid, input: input, error: messageText, field: fieldName });\n\t }\n\n\t input.toggleClass(INVALIDINPUT, !valid);\n\t input.toggleClass(VALIDINPUT, valid);\n\n\t if (kendo.widgetInstance(input)) {\n\t var inputWrap = kendo.widgetInstance(input)._inputWrapper;\n\t var inputLabel = kendo.widgetInstance(input)._inputLabel;\n\n\t if (inputWrap) {\n\t inputWrap.toggleClass(INVALIDINPUT, !valid);\n\t inputWrap.toggleClass(VALIDINPUT, valid);\n\t }\n\t if (inputLabel) {\n\t inputLabel.toggleClass(INVALIDLABEL, !valid);\n\t }\n\t }\n\n\t if (wasValid !== valid) {\n\t var errorId = messageLabel ? messageLabel.attr(\"id\") : lbl.attr(\"id\");\n\n\t that._associateMessageContainer(input, errorId);\n\n\t if (this.options.validationSummary && this.options.validateOnBlur) {\n\t this.showValidationSummary();\n\t }\n\t }\n\n\t return valid;\n\t },\n\n\t hideMessages: function() {\n\t var that = this,\n\t className = \".\" + INVALIDMSG,\n\t element = that.element;\n\n\t that._disassociateMessageContainers();\n\n\t if (!element.is(INPUTSELECTOR)) {\n\t element.find(className).addClass(\"k-hidden\");\n\t } else {\n\t element.next(className).addClass(\"k-hidden\");\n\t }\n\t },\n\n\t reset: function() {\n\t var that = this,\n\t inputs = that.element.find(\".\" + INVALIDINPUT);\n\n\t that._errors = [];\n\n\t that.hideMessages();\n\n\t that.hideValidationSummary();\n\n\t inputs.removeAttr(ARIAINVALID);\n\t inputs.removeClass(INVALIDINPUT);\n\t },\n\n\t _findMessageContainer: function(fieldName) {\n\t var locators = kendo.ui.validator.messageLocators,\n\t name,\n\t containers = $();\n\n\t for (var idx = 0, length = this.element.length; idx < length; idx++) {\n\t containers = containers.add(searchForMessageContainer(this.element[idx].getElementsByTagName(\"*\"), fieldName));\n\t }\n\n\t for (name in locators) {\n\t containers = containers.add(locators[name].locate(this.element, fieldName));\n\t }\n\n\t return containers;\n\t },\n\n\t _decorateMessageContainer: function(container, fieldName) {\n\t var locators = kendo.ui.validator.messageLocators,\n\t name;\n\n\t container.addClass(INVALIDMSG)\n\t .attr(kendo.attr(\"for\"), fieldName || \"\");\n\n\t if (!container.attr(\"id\")) {\n\t container.attr(\"id\", fieldName + \"-error\");\n\t }\n\n\t for (name in locators) {\n\t locators[name].decorate(container, fieldName);\n\t }\n\t },\n\n\t _extractMessage: function(input, ruleKey) {\n\t var that = this,\n\t customMessage = that.options.messages[ruleKey],\n\t fieldName = input.attr(NAME),\n\t nonDefaultMessage;\n\n\t if (!kendo.ui.Validator.prototype.options.messages[ruleKey]) {\n\t nonDefaultMessage = kendo.isFunction(customMessage) ? customMessage(input) : customMessage;\n\t }\n\n\t customMessage = kendo.isFunction(customMessage) ? customMessage(input) : customMessage;\n\n\t return kendo.format(input.attr(kendo.attr(ruleKey + \"-msg\")) || input.attr(\"validationMessage\") || nonDefaultMessage || customMessage || input.attr(\"title\") || \"\",\n\t fieldName,\n\t input.attr(ruleKey) || input.attr(kendo.attr(ruleKey)));\n\t },\n\n\t _checkValidity: function(input) {\n\t var rules = this.options.rules,\n\t rule;\n\n\t for (rule in rules) {\n\t if (!rules[rule].call(this, input)) {\n\t return { valid: false, key: rule };\n\t }\n\t }\n\n\t return { valid: true };\n\t },\n\n\t errors: function() {\n\t var results = [],\n\t errors = this._errors,\n\t error;\n\n\t for (error in errors) {\n\t results.push(errors[error]);\n\t }\n\t return results;\n\t },\n\n\t setOptions: function(options) {\n\t if (options.validationSummary) {\n\t this.hideValidationSummary();\n\t }\n\n\t kendo.deepExtend(this.options, options);\n\n\t this.destroy();\n\n\t this.init(this.element, this.options);\n\n\t this._setEvents(this.options);\n\t },\n\n\t _getInputNames: function() {\n\t var that = this,\n\t inputs = that.element.find(that._inputSelector),\n\t sorted = [];\n\n\t for (var idx = 0, length = inputs.length; idx < length; idx++) {\n\t var input = $(inputs[idx]);\n\n\t if (hasAttribute(input, NAME)) {\n\t sorted.push(input.attr(NAME));\n\t }\n\t }\n\n\t return sorted;\n\t },\n\n\t _associateMessageContainer: function(input, errorId) {\n\t var nextFocusable = kendo.getWidgetFocusableElement(input);\n\n\t if (!nextFocusable || !errorId) {\n\t return;\n\t }\n\n\t kendo.toggleAttribute(nextFocusable, ARIADESCRIBEDBY, errorId);\n\t },\n\n\t _disassociateMessageContainers: function() {\n\t var that = this,\n\t inputs = that.element.find(\".\" + INVALIDINPUT).addBack(),\n\t input, errorId;\n\n\t for (var i = 0; i < inputs.length; i += 1) {\n\t input = $(inputs[i]);\n\n\t if (input.is(\"input\")) {\n\t errorId = that._findMessageContainer(input.attr(NAME))\n\t .add(input.next(\".\" + INVALIDMSG))\n\t .attr(\"id\");\n\n\t that._associateMessageContainer(input, errorId);\n\t }\n\t }\n\t },\n\n\t _errorsByName: function() {\n\t var that = this,\n\t inputNames = that._getInputNames(),\n\t sorted = [];\n\n\t for (var i = 0; i < inputNames.length; i += 1) {\n\t var name = inputNames[i];\n\n\t if (that._errors[name]) {\n\t sorted.push({\n\t field: name,\n\t message: that._errors[name]\n\t });\n\t }\n\t }\n\n\t return sorted;\n\t },\n\n\t _renderSummary: function() {\n\t var that = this,\n\t options = this.options.validationSummary,\n\t element = this.element,\n\t prevElement = element.prev(),\n\t container;\n\n\t if (options.container) {\n\t container = $(options.container);\n\t } else if (prevElement && prevElement.hasClass(VALIDATIONSUMMARY)) {\n\t container = prevElement;\n\t } else {\n\t container = $(\"
          \").insertBefore(that.element);\n\t }\n\n\t container.addClass([VALIDATIONSUMMARY, MESSAGEBOX].join(\" \"));\n\t container.attr(\"role\", \"alert\");\n\n\t container.on(\"click\" + NS, proxy(that._summaryClick, that));\n\n\t return container;\n\t },\n\n\t _summaryClick: function(e) {\n\t e.preventDefault();\n\n\t var that = this,\n\t link = $(e.target),\n\t target = that.element.find(\"[name='\" + link.data(\"field\") + \"']\"),\n\t nextFocusable;\n\n\t if (!target.length) {\n\t return;\n\t }\n\n\t nextFocusable = kendo.getWidgetFocusableElement(target);\n\n\t if (nextFocusable) {\n\t nextFocusable.focus();\n\t }\n\t },\n\n\t showValidationSummary: function() {\n\t var that = this,\n\t summary = that.validationSummary,\n\t errors = that._errorsByName(),\n\t errorsList;\n\n\t if (!summary) {\n\t summary = that.validationSummary = that._renderSummary();\n\t }\n\n\t errorsList = parseHtml(that._summaryTemplate({\n\t errors: errors\n\t }));\n\n\t summary.html(errorsList);\n\n\t summary.toggleClass(\"k-hidden\", !errors.length);\n\t },\n\n\t hideValidationSummary: function() {\n\t var that = this,\n\t summary = that.validationSummary;\n\n\t if (!summary) {\n\t return;\n\t }\n\n\t summary.addClass(\"k-hidden\");\n\t }\n\t });\n\n\t kendo.ui.plugin(Validator);\n\t})(window.kendo.jQuery);\n\n\treturn window.kendo;\n\n\t}, __webpack_require__(3));\n\n\n/***/ })\n\n/******/ });","module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(1409);\n\n\n/***/ }),\n\n/***/ 3:\n/***/ (function(module, exports) {\n\n\tmodule.exports = function() { throw new Error(\"define cannot be used indirect\"); };\r\n\n\n/***/ }),\n\n/***/ 1017:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"jquery\");\n\n/***/ }),\n\n/***/ 1027:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./kendo.data\");\n\n/***/ }),\n\n/***/ 1409:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/* WEBPACK VAR INJECTION */(function(jQuery) {(function(f, define){\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(1027) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (f), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t})(function(){\n\n\tvar __meta__ = { // jshint ignore:line\n\t id: \"virtuallist\",\n\t name: \"VirtualList\",\n\t category: \"framework\",\n\t depends: [ \"data\" ],\n\t hidden: true\n\t};\n\n\t(function($, undefined) {\n\t var kendo = window.kendo,\n\t ui = kendo.ui,\n\t Widget = ui.Widget,\n\t DataBoundWidget = ui.DataBoundWidget,\n\t proxy = $.proxy,\n\t percentageUnitsRegex = /^\\d+(\\.\\d+)?%$/i,\n\t WRAPPER = \"k-virtual-wrap\",\n\t VIRTUALLIST = \"k-virtual-list\",\n\t CONTENT = \"k-virtual-content\",\n\t LIST = \"k-list\",\n\t HEADER = \"k-group-header\",\n\t VIRTUALITEM = \"k-virtual-item\",\n\t ITEM = \"k-item\",\n\t HEIGHTCONTAINER = \"k-height-container\",\n\t GROUPITEM = \"k-group\",\n\n\t SELECTED = \"k-state-selected\",\n\t FOCUSED = \"k-state-focused\",\n\t HOVER = \"k-state-hover\",\n\t CHANGE = \"change\",\n\t CLICK = \"click\",\n\t LISTBOUND = \"listBound\",\n\t ITEMCHANGE = \"itemChange\",\n\n\t ACTIVATE = \"activate\",\n\t DEACTIVATE = \"deactivate\",\n\n\t VIRTUAL_LIST_NS = \".VirtualList\";\n\n\t function lastFrom(array) {\n\t return array[array.length - 1];\n\t }\n\n\t function toArray(value) {\n\t return value instanceof Array ? value : [value];\n\t }\n\n\t function isPrimitive(dataItem) {\n\t return typeof dataItem === \"string\" || typeof dataItem === \"number\" || typeof dataItem === \"boolean\";\n\t }\n\n\t function getItemCount(screenHeight, listScreens, itemHeight) {\n\t return Math.ceil(screenHeight * listScreens / itemHeight);\n\t }\n\n\t function appendChild(parent, className, tagName) {\n\t var element = document.createElement(tagName || \"div\");\n\t if (className) {\n\t element.className = className;\n\t }\n\t parent.appendChild(element);\n\n\t return element;\n\t }\n\n\t function getDefaultItemHeight() {\n\t var mockList = $('
          '),\n\t lineHeight;\n\t mockList.css({\n\t position: \"absolute\",\n\t left: \"-200000px\",\n\t visibility: \"hidden\"\n\t });\n\t mockList.appendTo(document.body);\n\t lineHeight = parseFloat(kendo.getComputedStyles(mockList.find(\".k-item\")[0], [\"line-height\"])[\"line-height\"]);\n\t mockList.remove();\n\n\t return lineHeight;\n\t }\n\n\t function bufferSizes(screenHeight, listScreens, opposite) { //in pixels\n\t return {\n\t down: screenHeight * opposite,\n\t up: screenHeight * (listScreens - 1 - opposite)\n\t };\n\t }\n\n\t function listValidator(options, screenHeight) {\n\t var downThreshold = (options.listScreens - 1 - options.threshold) * screenHeight;\n\t var upThreshold = options.threshold * screenHeight;\n\n\t return function(list, scrollTop, lastScrollTop) {\n\t if (scrollTop > lastScrollTop) {\n\t return scrollTop - list.top < downThreshold;\n\t } else {\n\t return list.top === 0 || scrollTop - list.top > upThreshold;\n\t }\n\t };\n\t }\n\n\t function scrollCallback(element, callback) {\n\t return function(force) {\n\t return callback(element.scrollTop, force);\n\t };\n\t }\n\n\t function syncList(reorder) {\n\t return function(list, force) {\n\t reorder(list.items, list.index, force);\n\t return list;\n\t };\n\t }\n\n\t function position(element, y) {\n\t if (kendo.support.browser.msie && kendo.support.browser.version < 10) {\n\t element.style.top = y + \"px\";\n\t } else {\n\t element.style.webkitTransform = 'translateY(' + y + \"px)\";\n\t element.style.transform = 'translateY(' + y + \"px)\";\n\t }\n\t }\n\n\t function map2(callback, templates) {\n\t return function(arr1, arr2) {\n\t for (var i = 0, len = arr1.length; i < len; i++) {\n\t callback(arr1[i], arr2[i], templates);\n\t if (arr2[i].item) {\n\t this.trigger(ITEMCHANGE, { item: $(arr1[i]), data: arr2[i].item, ns: kendo.ui });\n\t }\n\t }\n\t };\n\t }\n\n\t function reshift(items, diff) {\n\t var range;\n\n\t if (diff > 0) { // down\n\t range = items.splice(0, diff);\n\t items.push.apply(items, range);\n\t } else { // up\n\t range = items.splice(diff, -diff);\n\t items.unshift.apply(items, range);\n\t }\n\n\t return range;\n\t }\n\n\t function render(element, data, templates) {\n\t var itemTemplate = templates.template;\n\n\t element = $(element);\n\n\t if (!data.item) {\n\t itemTemplate = templates.placeholderTemplate;\n\t }\n\n\t if (data.index === 0 && this.header && data.group) {\n\t this.header.html(templates.fixedGroupTemplate(data.group));\n\t }\n\n\t this.angular(\"cleanup\", function() {\n\t return { elements: [ element ]};\n\t });\n\n\t element\n\t .attr(\"data-uid\", data.item ? data.item.uid : \"\")\n\t .attr(\"data-offset-index\", data.index);\n\n\t if (this.options.columns && this.options.columns.length && data.item) {\n\t element.html(renderColumns(this.options, data.item, templates));\n\t } else {\n\t element.html(itemTemplate(data.item || {}));\n\t }\n\n\t element.toggleClass(FOCUSED, data.current);\n\t element.toggleClass(SELECTED, data.selected);\n\t element.toggleClass(\"k-first\", data.newGroup);\n\t element.toggleClass(\"k-last\", data.isLastGroupedItem);\n\t element.toggleClass(\"k-loading-item\", !data.item);\n\n\t if (data.index !== 0 && data.newGroup) {\n\t $(\"
          \")\n\t .appendTo(element)\n\t .html(templates.groupTemplate(data.group));\n\t }\n\n\t if (data.top !== undefined) {\n\t position(element[0], data.top);\n\t }\n\n\t this.angular(\"compile\", function() {\n\t return { elements: [ element ], data: [ { dataItem: data.item, group: data.group, newGroup: data.newGroup } ]};\n\t });\n\t }\n\n\t function renderColumns(options, dataItem, templates) {\n\t var item = \"\";\n\n\t for (var i = 0; i < options.columns.length; i++) {\n\t var currentWidth = options.columns[i].width;\n\t var currentWidthInt = parseInt(currentWidth, 10);\n\t var widthStyle = '';\n\n\t if(currentWidth){\n\t widthStyle += \"style='width:\";\n\t widthStyle += currentWidthInt;\n\t widthStyle += percentageUnitsRegex.test(currentWidth) ? \"%\" : \"px\";\n\t widthStyle += \";'\";\n\t }\n\t item += \"\";\n\t item += templates[\"column\"+ i](dataItem);\n\t item += \"\";\n\t }\n\n\t return item;\n\t }\n\n\t function mapChangedItems(selected, itemsToMatch) {\n\t var itemsLength = itemsToMatch.length;\n\t var selectedLength = selected.length;\n\t var dataItem;\n\t var found;\n\t var i, j;\n\n\t var changed = [];\n\t var unchanged = [];\n\n\t if (selectedLength) {\n\t for (i = 0; i < selectedLength; i++) {\n\t dataItem = selected[i];\n\t found = false;\n\n\t for (j = 0; j < itemsLength; j++) {\n\t if (dataItem === itemsToMatch[j]) {\n\t found = true;\n\t changed.push({ index: i, item: dataItem });\n\t break;\n\t }\n\t }\n\n\t if (!found) {\n\t unchanged.push(dataItem);\n\t }\n\t }\n\t }\n\n\t return {\n\t changed: changed,\n\t unchanged: unchanged\n\t };\n\t }\n\n\t function isActivePromise(promise) {\n\t return promise && promise.state() !== \"resolved\";\n\t }\n\n\t var VirtualList = DataBoundWidget.extend({\n\t init: function(element, options) {\n\t var that = this;\n\n\t that.bound(false);\n\t that._fetching = false;\n\n\t Widget.fn.init.call(that, element, options);\n\n\t if (!that.options.itemHeight) {\n\t that.options.itemHeight = getDefaultItemHeight();\n\t }\n\n\t options = that.options;\n\n\t that.element.addClass(LIST + \" \" + VIRTUALLIST).attr(\"role\", \"listbox\");\n\t that.content = that.element.wrap(\"
          \").parent();\n\t that.wrapper = that.content.wrap(\"
          \").parent();\n\t that.header = that.content.before(\"
          \").prev();\n\n\t if (options.columns && options.columns.length) {\n\t that.element.removeClass(LIST);\n\t }\n\n\t that.element.on(\"mouseenter\" + VIRTUAL_LIST_NS, \"li:not(.k-loading-item)\", function() { $(this).addClass(HOVER); })\n\t .on(\"mouseleave\" + VIRTUAL_LIST_NS, \"li\", function() { $(this).removeClass(HOVER); });\n\n\t that._values = toArray(that.options.value);\n\t that._selectedDataItems = [];\n\t that._selectedIndexes = [];\n\t that._rangesList = {};\n\t that._promisesList = [];\n\t that._optionID = kendo.guid();\n\n\t that._templates();\n\n\t that.setDataSource(options.dataSource);\n\n\t that.content.on(\"scroll\" + VIRTUAL_LIST_NS, kendo.throttle(function() {\n\t that._renderItems();\n\t that._triggerListBound();\n\t }, options.delay));\n\n\t that._selectable();\n\t },\n\n\t options: {\n\t name: \"VirtualList\",\n\t autoBind: true,\n\t delay: 100,\n\t height: null,\n\t listScreens: 4,\n\t threshold: 0.5,\n\t itemHeight: null,\n\t oppositeBuffer: 1,\n\t type: \"flat\",\n\t selectable: false,\n\t value: [],\n\t dataValueField: null,\n\t template: \"#:data#\",\n\t placeholderTemplate: \"loading...\",\n\t groupTemplate: \"#:data#\",\n\t fixedGroupTemplate: \"#:data#\",\n\t mapValueTo: \"index\",\n\t valueMapper: null\n\t },\n\n\t events: [\n\t CHANGE,\n\t CLICK,\n\t LISTBOUND,\n\t ITEMCHANGE,\n\t ACTIVATE,\n\t DEACTIVATE\n\t ],\n\n\t setOptions: function(options) {\n\t Widget.fn.setOptions.call(this, options);\n\n\t if (this._selectProxy && this.options.selectable === false) {\n\t this.element.off(CLICK, \".\" + VIRTUALITEM, this._selectProxy);\n\t } else if (!this._selectProxy && this.options.selectable) {\n\t this._selectable();\n\t }\n\n\t this._templates();\n\t this.refresh();\n\t },\n\n\t items: function() {\n\t return $(this._items);\n\t },\n\n\t destroy: function() {\n\t this.wrapper.off(VIRTUAL_LIST_NS);\n\t this.dataSource.unbind(CHANGE, this._refreshHandler);\n\t Widget.fn.destroy.call(this);\n\t },\n\n\t setDataSource: function(source) {\n\t var that = this;\n\t var dataSource = source || {};\n\t var value;\n\n\t dataSource = $.isArray(dataSource) ? {data: dataSource} : dataSource;\n\t dataSource = kendo.data.DataSource.create(dataSource);\n\n\t if (that.dataSource) {\n\t that.dataSource.unbind(CHANGE, that._refreshHandler);\n\n\t that._clean();\n\t that.bound(false);\n\n\t that._deferValueSet = true;\n\t value = that.value();\n\n\t that.value([]);\n\t that.mute(function() {\n\t that.value(value);\n\t });\n\t } else {\n\t that._refreshHandler = $.proxy(that.refresh, that);\n\t }\n\n\t that.dataSource = dataSource.bind(CHANGE, that._refreshHandler);\n\n\t that.setDSFilter(dataSource.filter());\n\n\t if (dataSource.view().length !== 0) {\n\t that.refresh();\n\t } else if (that.options.autoBind) {\n\t dataSource.fetch();\n\t }\n\t },\n\n\t skip: function() {\n\t return this.dataSource.currentRangeStart();\n\t },\n\n\t _triggerListBound: function () {\n\t var that = this;\n\t var skip = that.skip();\n\n\t if (that.bound() && !that._selectingValue && that._skip !== skip) {\n\t that._skip = skip;\n\t that.trigger(LISTBOUND);\n\t }\n\t },\n\n\t _getValues: function(dataItems) {\n\t var getter = this._valueGetter;\n\n\t return $.map(dataItems, function(dataItem) {\n\t return getter(dataItem);\n\t });\n\t },\n\n\t _highlightSelectedItems: function () {\n\t for (var i = 0; i < this._selectedDataItems.length; i++) {\n\t var item = this._getElementByDataItem(this._selectedDataItems[i]);\n\t if(item.length){\n\t item.addClass(SELECTED);\n\t }\n\t }\n\t },\n\n\t refresh: function(e) {\n\t var that = this;\n\t var action = e && e.action;\n\t var isItemChange = action === \"itemchange\";\n\t var filtered = this.isFiltered();\n\t var result;\n\n\t if (that._mute) { return; }\n\n\t that._deferValueSet = false;\n\n\t if (!that._fetching) {\n\t if (filtered) {\n\t that.focus(0);\n\t }\n\n\t that._createList();\n\t if (!action && that._values.length && !filtered &&\n\t !that.options.skipUpdateOnBind && !that._emptySearch) {\n\t that._selectingValue = true;\n\n\t that.bound(true);\n\t that.value(that._values, true).done(function () {\n\t that._selectingValue = false;\n\t that._triggerListBound();\n\t });\n\t } else {\n\t that.bound(true);\n\t that._highlightSelectedItems();\n\t that._triggerListBound();\n\t }\n\t } else {\n\t if (that._renderItems) {\n\t that._renderItems(true);\n\t }\n\n\t that._triggerListBound();\n\t }\n\n\t if (isItemChange || action === \"remove\") {\n\t result = mapChangedItems(that._selectedDataItems, e.items);\n\t if (result.changed.length) {\n\t if (isItemChange) {\n\t that.trigger(\"selectedItemChange\", {\n\t items: result.changed\n\t });\n\t } else {\n\t that.value(that._getValues(result.unchanged));\n\t }\n\t }\n\t }\n\n\t that._fetching = false;\n\t },\n\n\t removeAt: function(position) {\n\t this._selectedIndexes.splice(position, 1);\n\t this._values.splice(position, 1);\n\n\t return {\n\t position: position,\n\t dataItem: this._selectedDataItems.splice(position, 1)[0]\n\t };\n\t },\n\n\t setValue: function(value) {\n\t this._values = toArray(value);\n\t },\n\n\t value: function(value, _forcePrefetch) {\n\t var that = this;\n\n\t if (value === undefined) {\n\t return that._values.slice();\n\t }\n\n\t if (value === null) {\n\t value = [];\n\t }\n\n\t value = toArray(value);\n\n\t if (!that._valueDeferred || that._valueDeferred.state() === \"resolved\") {\n\t that._valueDeferred = $.Deferred();\n\t }\n\n\t var shouldClear = that.options.selectable === \"multiple\" && that.select().length && value.length;\n\n\t if (shouldClear || !value.length) {\n\t that.select(-1);\n\t }\n\n\t that._values = value;\n\n\t if ((that.bound() && !that._mute && !that._deferValueSet) || _forcePrefetch) {\n\t that._prefetchByValue(value);\n\t }\n\n\t return that._valueDeferred;\n\t },\n\n\t _checkValuesOrder: function (value) {\n\t if (this._removedAddedIndexes &&\n\t this._removedAddedIndexes.length === value.length) {\n\t var newValue = this._removedAddedIndexes.slice();\n\t this._removedAddedIndexes = null;\n\t return newValue;\n\t }\n\n\t return value;\n\t },\n\n\t _prefetchByValue: function(value) {\n\t var that = this,\n\t dataView = that._dataView,\n\t valueGetter = that._valueGetter,\n\t mapValueTo = that.options.mapValueTo,\n\t item, match = false,\n\t forSelection = [];\n\n\t //try to find the items in the loaded data\n\t for (var i = 0; i < value.length; i++) {\n\t for (var idx = 0; idx < dataView.length; idx++) {\n\t item = dataView[idx].item;\n\t if (item) {\n\t match = isPrimitive(item) ? value[i] === item : value[i] === valueGetter(item);\n\n\t if (match) {\n\t forSelection.push(dataView[idx].index);\n\t }\n\t }\n\t }\n\t }\n\n\t if (forSelection.length === value.length) {\n\t that._values = [];\n\t that.select(forSelection);\n\t return;\n\t }\n\n\t //prefetch the items\n\t if (typeof that.options.valueMapper === \"function\") {\n\t that.options.valueMapper({\n\t value: (this.options.selectable === \"multiple\") ? value : value[0],\n\t success: function(response) {\n\t if (mapValueTo === \"index\") {\n\t that.mapValueToIndex(response);\n\t } else if (mapValueTo === \"dataItem\") {\n\t that.mapValueToDataItem(response);\n\t }\n\t }\n\t });\n\t } else {\n\t if (!that.value()[0]) {\n\t that.select([-1]);\n\t } else {\n\t that._selectingValue = false;\n\t that._triggerListBound();\n\t }\n\t }\n\t },\n\n\t mapValueToIndex: function(indexes) {\n\t if (indexes === undefined || indexes === -1 || indexes === null) {\n\t indexes = [];\n\t } else {\n\t indexes = toArray(indexes);\n\t }\n\n\t if (!indexes.length) {\n\t indexes = [-1];\n\t } else {\n\t var removed = this._deselect([]).removed;\n\t if (removed.length) {\n\t this._triggerChange(removed, []);\n\t }\n\t }\n\n\t this.select(indexes);\n\t },\n\n\t mapValueToDataItem: function(dataItems) {\n\t var removed, added;\n\n\t if (dataItems === undefined || dataItems === null) {\n\t dataItems = [];\n\t } else {\n\t dataItems = toArray(dataItems);\n\t }\n\n\t if (!dataItems.length) {\n\t this.select([-1]);\n\t } else {\n\t removed = $.map(this._selectedDataItems, function(item, index) {\n\t return { index: index, dataItem: item };\n\t });\n\n\t added = $.map(dataItems, function(item, index) {\n\t return { index: index, dataItem: item };\n\t });\n\n\t this._selectedDataItems = dataItems;\n\n\t this._selectedIndexes = [];\n\n\t for (var i = 0; i < this._selectedDataItems.length; i++) {\n\t var item = this._getElementByDataItem(this._selectedDataItems[i]);\n\t this._selectedIndexes.push(this._getIndecies(item)[0]);\n\t item.addClass(SELECTED);\n\t }\n\n\t this._triggerChange(removed, added);\n\n\t if (this._valueDeferred) {\n\t this._valueDeferred.resolve();\n\t }\n\t }\n\t },\n\n\t deferredRange: function(index) {\n\t var dataSource = this.dataSource;\n\t var take = this.itemCount;\n\t var ranges = this._rangesList;\n\t var result = $.Deferred();\n\t var defs = [];\n\n\t var low = Math.floor(index / take) * take;\n\t var high = Math.ceil(index / take) * take;\n\n\t var pages = high === low ? [ high ] : [ low, high ];\n\n\t $.each(pages, function(_, skip) {\n\t var end = skip + take;\n\t var existingRange = ranges[skip];\n\t var deferred;\n\n\t if (!existingRange || (existingRange.end !== end)) {\n\t deferred = $.Deferred();\n\t ranges[skip] = { end: end, deferred: deferred };\n\n\t dataSource._multiplePrefetch(skip, take, function() {\n\t deferred.resolve();\n\t });\n\t } else {\n\t deferred = existingRange.deferred;\n\t }\n\n\t defs.push(deferred);\n\t });\n\n\t $.when.apply($, defs).then(function() {\n\t result.resolve();\n\t });\n\n\t return result;\n\t },\n\n\t prefetch: function(indexes) {\n\t var that = this,\n\t take = this.itemCount,\n\t isEmptyList = !that._promisesList.length;\n\n\t if (!isActivePromise(that._activeDeferred)) {\n\t that._activeDeferred = $.Deferred();\n\t that._promisesList = [];\n\t }\n\n\t $.each(indexes, function(_, index) {\n\t that._promisesList.push(that.deferredRange(that._getSkip(index, take)));\n\t });\n\n\t if (isEmptyList) {\n\t $.when.apply($, that._promisesList).done(function() {\n\t that._promisesList = [];\n\t that._activeDeferred.resolve();\n\t });\n\t }\n\n\t return that._activeDeferred;\n\t },\n\n\t _findDataItem: function(view, index) {\n\t var group;\n\n\t //find in grouped view\n\t if (this.options.type === \"group\") {\n\t for (var i = 0; i < view.length; i++) {\n\t group = view[i].items;\n\t if (group.length <= index) {\n\t index = index - group.length;\n\t } else {\n\t return group[index];\n\t }\n\t }\n\t }\n\n\t //find in flat view\n\t return view[index];\n\t },\n\n\t _getRange: function(skip, take) {\n\t return this.dataSource._findRange(skip, Math.min(skip + take, this.dataSource.total()));\n\t },\n\n\t dataItemByIndex: function(index) {\n\t var that = this;\n\t var take = that.itemCount;\n\t var skip = that._getSkip(index, take);\n\t var view = this._getRange(skip, take);\n\n\t //should not return item if data is not loaded\n\t if (!that._getRange(skip, take).length) {\n\t return null;\n\t }\n\n\t if (that.options.type === \"group\") {\n\t kendo.ui.progress($(that.wrapper), true);\n\t that.mute(function() {\n\t that.dataSource.range(skip, take, function () {\n\t kendo.ui.progress($(that.wrapper), false);\n\t });\n\t view = that.dataSource.view();\n\t });\n\t }\n\n\t return that._findDataItem(view, [index - skip]);\n\t },\n\n\t selectedDataItems: function() {\n\t return this._selectedDataItems.slice();\n\t },\n\n\t scrollWith: function(value) {\n\t this.content.scrollTop(this.content.scrollTop() + value);\n\t },\n\n\t scrollTo: function(y) {\n\t this.content.scrollTop(y); //works only if the element is visible\n\t },\n\n\t scrollToIndex: function(index) {\n\t this.scrollTo(index * this.options.itemHeight);\n\t },\n\n\t focus: function(candidate) {\n\t var element,\n\t index,\n\t data,\n\t current,\n\t itemHeight = this.options.itemHeight,\n\t id = this._optionID,\n\t triggerEvent = true;\n\n\t if (candidate === undefined) {\n\t current = this.element.find(\".\" + FOCUSED);\n\t return current.length ? current : null;\n\t }\n\n\t if (typeof candidate === \"function\") {\n\t data = this.dataSource.flatView();\n\t for (var idx = 0; idx < data.length; idx++) {\n\t if (candidate(data[idx])) {\n\t candidate = idx;\n\t break;\n\t }\n\t }\n\t }\n\n\t if (candidate instanceof Array) {\n\t candidate = lastFrom(candidate);\n\t }\n\n\t if (isNaN(candidate)) {\n\t element = $(candidate);\n\t index = parseInt($(element).attr(\"data-offset-index\"), 10);\n\t } else {\n\t index = candidate;\n\t element = this._getElementByIndex(index);\n\t }\n\n\t if (index === -1) {\n\t this.element.find(\".\" + FOCUSED).removeClass(FOCUSED);\n\t this._focusedIndex = undefined;\n\t return;\n\t }\n\n\t if (element.length) { /*focus rendered item*/\n\t if (element.hasClass(FOCUSED)) {\n\t triggerEvent = false;\n\t }\n\t if (this._focusedIndex !== undefined) {\n\t current = this._getElementByIndex(this._focusedIndex);\n\t current\n\t .removeClass(FOCUSED)\n\t .removeAttr(\"id\");\n\n\t if (triggerEvent) {\n\t this.trigger(DEACTIVATE);\n\t }\n\t }\n\n\t this._focusedIndex = index;\n\n\t element\n\t .addClass(FOCUSED)\n\t .attr(\"id\", id);\n\n\t var position = this._getElementLocation(index);\n\n\t if (position === \"top\") {\n\t this.scrollTo(index * itemHeight);\n\t } else if (position === \"bottom\") {\n\t this.scrollTo((index * itemHeight + itemHeight) - this._screenHeight);\n\t } else if (position === \"outScreen\") {\n\t this.scrollTo(index * itemHeight);\n\t }\n\n\t if (triggerEvent) {\n\t this.trigger(ACTIVATE);\n\t }\n\t } else { /*focus non rendered item*/\n\t this._focusedIndex = index;\n\t this.items().removeClass(FOCUSED);\n\t this.scrollToIndex(index);\n\t }\n\t },\n\n\t focusIndex: function() {\n\t return this._focusedIndex;\n\t },\n\n\t focusFirst: function() {\n\t this.scrollTo(0);\n\t this.focus(0);\n\t },\n\n\t focusLast: function() {\n\t var lastIndex = this.dataSource.total();\n\t this.scrollTo(this.heightContainer.offsetHeight);\n\t this.focus(lastIndex - 1);\n\t },\n\n\t focusPrev: function() {\n\t var index = this._focusedIndex;\n\t var current;\n\n\t if (!isNaN(index) && index > 0) {\n\t index -= 1;\n\t this.focus(index);\n\n\t current = this.focus();\n\t if (current && current.hasClass(\"k-loading-item\")) {\n\t index += 1;\n\t this.focus(index);\n\t }\n\n\t return index;\n\t } else {\n\t index = this.dataSource.total() - 1;\n\t this.focus(index);\n\t return index;\n\t }\n\t },\n\n\t focusNext: function() {\n\t var index = this._focusedIndex;\n\t var lastIndex = this.dataSource.total() - 1;\n\t var current;\n\n\t if (!isNaN(index) && index < lastIndex) {\n\t index += 1;\n\t this.focus(index);\n\n\t current = this.focus();\n\t if (current && current.hasClass(\"k-loading-item\")) {\n\t index -= 1;\n\t this.focus(index);\n\t }\n\n\t return index;\n\t } else {\n\t index = 0;\n\t this.focus(index);\n\t return index;\n\t }\n\t },\n\n\t _triggerChange: function(removed, added) {\n\t removed = removed || [];\n\t added = added || [];\n\n\t if (removed.length || added.length) {\n\t this.trigger(CHANGE, {\n\t removed: removed,\n\t added: added\n\t });\n\t }\n\t },\n\n\t select: function(candidate) {\n\t var that = this,\n\t indices,\n\t initialIndices,\n\t singleSelection = that.options.selectable !== \"multiple\",\n\t prefetchStarted = isActivePromise(that._activeDeferred),\n\t filtered = this.isFiltered(),\n\t isAlreadySelected,\n\t deferred,\n\t result,\n\t removed = [];\n\n\t if (candidate === undefined) {\n\t return that._selectedIndexes.slice();\n\t }\n\n\t if (!that._selectDeferred || that._selectDeferred.state() === \"resolved\") {\n\t that._selectDeferred = $.Deferred();\n\t }\n\n\t indices = that._getIndecies(candidate);\n\t isAlreadySelected = singleSelection && !filtered && lastFrom(indices) === lastFrom(this._selectedIndexes);\n\t removed = that._deselectCurrentValues(indices);\n\n\t if (removed.length || !indices.length || isAlreadySelected) {\n\t that._triggerChange(removed);\n\n\t if (that._valueDeferred) {\n\t that._valueDeferred.resolve().promise();\n\t }\n\n\t return that._selectDeferred.resolve().promise();\n\t }\n\n\t if (indices.length === 1 && indices[0] === -1) {\n\t indices = [];\n\t }\n\n\t initialIndices = indices;\n\t result = that._deselect(indices);\n\t removed = result.removed;\n\t indices = result.indices;\n\n\t if (singleSelection) {\n\t prefetchStarted = false;\n\t if (indices.length) {\n\t indices = [lastFrom(indices)];\n\t }\n\t }\n\n\t var done = function() {\n\t var added = that._select(indices);\n\n\t if (initialIndices.length === indices.length || singleSelection) {\n\t that.focus(indices);\n\t }\n\n\t that._triggerChange(removed, added);\n\n\t if (that._valueDeferred) {\n\t that._valueDeferred.resolve();\n\t }\n\n\t that._selectDeferred.resolve();\n\t };\n\n\t deferred = that.prefetch(indices);\n\n\t if (!prefetchStarted) {\n\t if (deferred) {\n\t deferred.done(done);\n\t } else {\n\t done();\n\t }\n\t }\n\n\t return that._selectDeferred.promise();\n\t },\n\n\t bound: function(bound) {\n\t if (bound === undefined) {\n\t return this._listCreated;\n\t }\n\n\t this._listCreated = bound;\n\t },\n\n\t mute: function(callback) {\n\t this._mute = true;\n\t proxy(callback(), this);\n\t this._mute = false;\n\t },\n\n\t setDSFilter: function(filter) {\n\t this._lastDSFilter = $.extend({}, filter);\n\t },\n\n\t isFiltered: function() {\n\t if (!this._lastDSFilter) {\n\t this.setDSFilter(this.dataSource.filter());\n\t }\n\n\t return !kendo.data.Query.compareFilters(this.dataSource.filter(), this._lastDSFilter);\n\t },\n\n\t skipUpdate: $.noop,\n\n\t _getElementByIndex: function(index) {\n\t return this.items().filter(function(idx, element) {\n\t return index === parseInt($(element).attr(\"data-offset-index\"), 10);\n\t });\n\t },\n\n\t _getElementByDataItem: function(dataItem) {\n\t var dataView = this._dataView,\n\t valueGetter = this._valueGetter,\n\t element, match;\n\n\t for (var i = 0; i < dataView.length; i++) {\n\t match = dataView[i].item && isPrimitive(dataView[i].item) ? dataView[i].item === dataItem : dataView[i].item && dataItem && valueGetter(dataView[i].item) == valueGetter(dataItem);\n\t if (match) {\n\t element = dataView[i];\n\t break;\n\t }\n\t }\n\n\t return element ? this._getElementByIndex(element.index) : $();\n\t },\n\n\t _clean: function() {\n\t this.result = undefined;\n\t this._lastScrollTop = undefined;\n\t this._skip = undefined;\n\t $(this.heightContainer).remove();\n\t this.heightContainer = undefined;\n\t this.element.empty();\n\t },\n\n\t _height: function() {\n\t var hasData = !!this.dataSource.view().length,\n\t height = this.options.height,\n\t itemHeight = this.options.itemHeight,\n\t total = this.dataSource.total();\n\n\t if (!hasData) {\n\t height = 0;\n\t } else if (height/itemHeight > total) {\n\t height = total * itemHeight;\n\t }\n\n\t return height;\n\t },\n\n\t setScreenHeight: function() {\n\t var height = this._height();\n\n\t this.content.height(height);\n\t this._screenHeight = height;\n\t },\n\n\t screenHeight: function() {\n\t return this._screenHeight;\n\t },\n\n\t _getElementLocation: function(index) {\n\t var scrollTop = this.content.scrollTop(),\n\t screenHeight = this._screenHeight,\n\t itemHeight = this.options.itemHeight,\n\t yPosition = index * itemHeight,\n\t yDownPostion = yPosition + itemHeight,\n\t screenEnd = scrollTop + screenHeight,\n\t position;\n\n\t if (yPosition === (scrollTop - itemHeight) || (yDownPostion > scrollTop && yPosition < scrollTop)) {\n\t position = \"top\";\n\t } else if (yPosition === screenEnd || (yPosition < screenEnd && screenEnd < yDownPostion)) {\n\t position = \"bottom\";\n\t } else if ((yPosition >= scrollTop) && (yPosition <= scrollTop + (screenHeight - itemHeight))) {\n\t position = \"inScreen\";\n\t } else {\n\t position = \"outScreen\";\n\t }\n\n\t return position;\n\t },\n\n\t _templates: function() {\n\t var options = this.options;\n\t var templates = {\n\t template: options.template,\n\t placeholderTemplate: options.placeholderTemplate,\n\t groupTemplate: options.groupTemplate,\n\t fixedGroupTemplate: options.fixedGroupTemplate\n\t };\n\n\t if (options.columns) {\n\t for (var i = 0; i < options.columns.length; i++) {\n\t var currentColumn = options.columns[i];\n\t var templateText = currentColumn.field ? currentColumn.field.toString(): \"text\";\n\n\t templates[\"column\"+ i] = currentColumn.template || \"#: \" + templateText + \"#\";\n\t }\n\t }\n\n\t for (var key in templates) {\n\t if (typeof templates[key] !== \"function\") {\n\t templates[key] = kendo.template(templates[key] || \"\");\n\t }\n\t }\n\n\t this.templates = templates;\n\t },\n\n\t _generateItems: function(element, count) {\n\t var items = [],\n\t item,\n\t itemHeight = this.options.itemHeight + \"px\";\n\n\t while(count-- > 0) {\n\t item = document.createElement(\"li\");\n\t item.tabIndex = -1;\n\t item.className = VIRTUALITEM + \" \" + ITEM;\n\t item.setAttribute(\"role\", \"option\");\n\t item.style.height = itemHeight;\n\t item.style.minHeight = itemHeight;\n\t element.appendChild(item);\n\n\t items.push(item);\n\t }\n\n\t return items;\n\t },\n\n\t _saveInitialRanges: function() {\n\t var ranges = this.dataSource._ranges;\n\t var deferred = $.Deferred();\n\t deferred.resolve();\n\n\t this._rangesList = {};\n\t for (var i = 0; i < ranges.length; i++) {\n\t this._rangesList[ranges[i].start] = { end: ranges[i].end, deferred: deferred };\n\t }\n\t },\n\n\t _createList: function() {\n\t var that = this,\n\t content = that.content.get(0),\n\t options = that.options,\n\t dataSource = that.dataSource;\n\n\t if (that.bound()) {\n\t that._clean();\n\t }\n\n\t that._saveInitialRanges();\n\t that._buildValueGetter();\n\t that.setScreenHeight();\n\t that.itemCount = getItemCount(that._screenHeight, options.listScreens, options.itemHeight);\n\n\t if (that.itemCount > dataSource.total()) {\n\t that.itemCount = dataSource.total();\n\t }\n\n\t that._items = that._generateItems(that.element[0], that.itemCount);\n\n\t that._setHeight(options.itemHeight * dataSource.total());\n\t that.options.type = (dataSource.group() || []).length ? \"group\" : \"flat\";\n\n\t if (that.options.type === \"flat\") {\n\t that.header.hide();\n\t } else {\n\t that.header.show();\n\t }\n\n\t that.getter = that._getter(function() {\n\t that._renderItems(true);\n\t });\n\n\t that._onScroll = function(scrollTop, force) {\n\t var getList = that._listItems(that.getter);\n\t return that._fixedHeader(scrollTop, getList(scrollTop, force));\n\t };\n\n\t that._renderItems = that._whenChanged(\n\t scrollCallback(content, that._onScroll),\n\t syncList(that._reorderList(that._items, $.proxy(render, that)))\n\t );\n\n\t that._renderItems();\n\t that._calculateGroupPadding(that._screenHeight);\n\t that._calculateColumnsHeaderPadding();\n\t },\n\n\t _setHeight: function(height) {\n\t var currentHeight,\n\t heightContainer = this.heightContainer;\n\n\t if (!heightContainer) {\n\t heightContainer = this.heightContainer = appendChild(this.content[0], HEIGHTCONTAINER);\n\t } else {\n\t currentHeight = heightContainer.offsetHeight;\n\t }\n\n\t if (height !== currentHeight) {\n\t heightContainer.innerHTML = \"\";\n\n\t while (height > 0) {\n\t var padHeight = Math.min(height, 250000); //IE workaround, should not create elements with height larger than 250000px\n\t appendChild(heightContainer).style.height = padHeight + \"px\";\n\t height -= padHeight;\n\t }\n\t }\n\t },\n\n\t _getter: function() {\n\t var lastRequestedRange = null,\n\t dataSource = this.dataSource,\n\t lastRangeStart = dataSource.skip(),\n\t type = this.options.type,\n\t pageSize = this.itemCount,\n\t flatGroups = {};\n\n\t if (dataSource.pageSize() < pageSize) {\n\t this.mute(function() {\n\t dataSource.pageSize(pageSize);\n\t });\n\t }\n\n\t return function(index, rangeStart) {\n\t var that = this;\n\t if (!dataSource.inRange(rangeStart, pageSize)) {\n\t if (lastRequestedRange !== rangeStart) {\n\t lastRequestedRange = rangeStart;\n\t lastRangeStart = rangeStart;\n\n\t if (that._getterDeferred) {\n\t that._getterDeferred.reject();\n\t }\n\n\t that._getterDeferred = that.deferredRange(rangeStart);\n\t that._getterDeferred.then(function() {\n\t var firstItemIndex = that._indexConstraint(that.content[0].scrollTop);\n\n\t that._getterDeferred = null;\n\n\t if (rangeStart <= firstItemIndex && firstItemIndex <= (rangeStart + pageSize)) {\n\t that._fetching = true;\n\t dataSource.range(rangeStart, pageSize);\n\t }\n\t });\n\t }\n\n\t return null;\n\t } else {\n\t if (lastRangeStart !== rangeStart) {\n\t this.mute(function() {\n\t dataSource.range(rangeStart, pageSize);\n\t lastRangeStart = rangeStart;\n\t });\n\t }\n\n\t var result;\n\t if (type === \"group\") { //grouped list\n\t if (!flatGroups[rangeStart]) {\n\t var flatGroup = flatGroups[rangeStart] = [];\n\t var groups = dataSource.view();\n\t for (var i = 0, len = groups.length; i < len; i++) {\n\t var group = groups[i];\n\t for (var j = 0, groupLength = group.items.length; j < groupLength; j++) {\n\t flatGroup.push({ item: group.items[j], group: group.value });\n\t }\n\t }\n\t }\n\n\t result = flatGroups[rangeStart][index - rangeStart];\n\t } else { //flat list\n\t result = dataSource.view()[index - rangeStart];\n\t }\n\n\t return result;\n\t }\n\t };\n\t },\n\n\t _fixedHeader: function(scrollTop, list) {\n\t var group = this.currentVisibleGroup,\n\t itemHeight = this.options.itemHeight,\n\t firstVisibleDataItemIndex = Math.floor((scrollTop - list.top) / itemHeight),\n\t firstVisibleDataItem = list.items[firstVisibleDataItemIndex];\n\n\t if (firstVisibleDataItem && firstVisibleDataItem.item) {\n\t var firstVisibleGroup = firstVisibleDataItem.group;\n\n\t if (firstVisibleGroup !== group) {\n\t var fixedGroupText = firstVisibleGroup || \"\";\n\t this.header.html(this.templates.fixedGroupTemplate(fixedGroupText));\n\t this.currentVisibleGroup = firstVisibleGroup;\n\t }\n\t }\n\n\t return list;\n\t },\n\n\t _itemMapper: function(item, index, value) {\n\t var listType = this.options.type,\n\t itemHeight = this.options.itemHeight,\n\t currentIndex = this._focusedIndex,\n\t selected = false,\n\t current = false,\n\t newGroup = false,\n\t group = null,\n\t match = false,\n\t valueGetter = this._valueGetter;\n\n\t if (listType === \"group\") {\n\t if (item) {\n\t newGroup = index === 0 || (this._currentGroup !== false && this._currentGroup !== item.group);\n\t this._currentGroup = item.group;\n\t }\n\n\t group = item ? item.group : null;\n\t item = item ? item.item : null;\n\t }\n\n\t if (this.options.mapValueTo === \"dataItem\" && this._selectedDataItems.length && item) {\n\t for (var i = 0; i < this._selectedDataItems.length; i++) {\n\t match = valueGetter(this._selectedDataItems[i]) === valueGetter(item);\n\t if (match) {\n\t selected = true;\n\t break;\n\t }\n\t }\n\t } else if (!this.isFiltered() && value.length && item) {\n\t for (var j = 0; j < value.length; j++) {\n\t match = isPrimitive(item) ? value[j] === item : value[j] === valueGetter(item);\n\t if (match) {\n\t value.splice(j , 1);\n\t selected = true;\n\t break;\n\t }\n\t }\n\t }\n\n\t if (currentIndex === index) {\n\t current = true;\n\t }\n\n\t return {\n\t item: item ? item : null,\n\t group: group,\n\t newGroup: newGroup,\n\t selected: selected,\n\t current: current,\n\t index: index,\n\t top: index * itemHeight\n\t };\n\t },\n\n\t _range: function(index) {\n\t var itemCount = this.itemCount,\n\t value = this._values.slice(),\n\t items = [],\n\t item;\n\n\t this._view = {};\n\t this._currentGroup = false;\n\n\t for (var i = index, length = index + itemCount; i < length; i++) {\n\t item = this._itemMapper(this.getter(i, index), i, value);\n\t if(items[items.length - 1]){\n\t items[items.length - 1].isLastGroupedItem = item.newGroup;\n\t }\n\t items.push(item);\n\t this._view[item.index] = item;\n\t }\n\n\t this._dataView = items;\n\t return items;\n\t },\n\n\t _getDataItemsCollection: function(scrollTop, lastScrollTop) {\n\t var items = this._range(this._listIndex(scrollTop, lastScrollTop));\n\t return {\n\t index: items.length ? items[0].index : 0,\n\t top: items.length ? items[0].top : 0,\n\t items: items\n\t };\n\t },\n\n\t _listItems: function() {\n\t var screenHeight = this._screenHeight,\n\t options = this.options;\n\n\t var theValidator = listValidator(options, screenHeight);\n\n\t return $.proxy(function(value, force) {\n\t var result = this.result,\n\t lastScrollTop = this._lastScrollTop;\n\n\t if (force || !result || !theValidator(result, value, lastScrollTop)) {\n\t result = this._getDataItemsCollection(value, lastScrollTop);\n\t }\n\n\t this._lastScrollTop = value;\n\t this.result = result;\n\n\t return result;\n\t }, this);\n\t },\n\n\t _whenChanged: function(getter, callback) {\n\t var current;\n\n\t return function(force) {\n\t var theNew = getter(force);\n\n\t if (theNew !== current) {\n\t current = theNew;\n\t callback(theNew, force);\n\t }\n\t };\n\t },\n\n\t _reorderList: function(list, reorder) {\n\t var that = this;\n\t var length = list.length;\n\t var currentOffset = -Infinity;\n\t reorder = $.proxy(map2(reorder, this.templates), this);\n\n\t return function(list2, offset, force) {\n\t var diff = offset - currentOffset;\n\t var range, range2;\n\n\t if (force || Math.abs(diff) >= length) { // full reorder\n\t range = list;\n\t range2 = list2;\n\t } else { // partial reorder\n\t range = reshift(list, diff);\n\t range2 = diff > 0 ? list2.slice(-diff) : list2.slice(0, -diff);\n\t }\n\n\t reorder(range, range2, that.bound());\n\n\t currentOffset = offset;\n\t };\n\t },\n\n\t _bufferSizes: function() {\n\t var options = this.options;\n\n\t return bufferSizes(this._screenHeight, options.listScreens, options.oppositeBuffer);\n\t },\n\n\t _indexConstraint: function(position) {\n\t var itemCount = this.itemCount,\n\t itemHeight = this.options.itemHeight,\n\t total = this.dataSource.total();\n\n\t return Math.min(Math.max(total - itemCount, 0), Math.max(0, Math.floor(position / itemHeight )));\n\t },\n\n\t _listIndex: function(scrollTop, lastScrollTop) {\n\t var buffers = this._bufferSizes(),\n\t position;\n\n\t position = scrollTop - ((scrollTop > lastScrollTop) ? buffers.down : buffers.up);\n\n\t return this._indexConstraint(position);\n\t },\n\n\t _selectable: function() {\n\t if (this.options.selectable) {\n\t this._selectProxy = $.proxy(this, \"_clickHandler\");\n\t this.element.on(CLICK + VIRTUAL_LIST_NS, \".\" + VIRTUALITEM, this._selectProxy);\n\t }\n\t },\n\n\t getElementIndex: function(element) {\n\t if (!(element instanceof jQuery)) {\n\t return undefined;\n\t }\n\n\t return parseInt(element.attr(\"data-offset-index\"), 10);\n\t },\n\n\t _getIndecies: function(candidate) {\n\t var result = [], data;\n\n\t if (typeof candidate === \"function\") {\n\t data = this.dataSource.flatView();\n\t for (var idx = 0; idx < data.length; idx++) {\n\t if (candidate(data[idx])) {\n\t result.push(idx);\n\t break;\n\t }\n\t }\n\t }\n\n\t if (typeof candidate === \"number\") {\n\t result.push(candidate);\n\t }\n\n\t var elementIndex = this.getElementIndex(candidate);\n\t if (!isNaN(elementIndex)) {\n\t result.push(elementIndex);\n\t }\n\n\t if (candidate instanceof Array) {\n\t result = candidate;\n\t }\n\n\t return result;\n\t },\n\n\t _deselect: function(indices) {\n\t var removed = [],\n\t selectedIndex,\n\t dataItem,\n\t selectedIndexes = this._selectedIndexes,\n\t selectedDataItems = this._selectedDataItems,\n\t position = 0,\n\t selectable = this.options.selectable,\n\t removedindexesCounter = 0,\n\t valueGetter = this._valueGetter,\n\t item, match,\n\t result = null;\n\n\t indices = indices.slice();\n\n\t if (selectable === true || !indices.length) { //deselect everything\n\t for (var idx = 0; idx < selectedIndexes.length; idx++) {\n\t if (selectedIndexes[idx] !== undefined) {\n\t this._getElementByIndex(selectedIndexes[idx]).removeClass(SELECTED);\n\t } else if (selectedDataItems[idx]) {\n\t this._getElementByDataItem(selectedDataItems[idx]).removeClass(SELECTED);\n\t }\n\n\t removed.push({\n\t index: selectedIndexes[idx],\n\t position: idx,\n\t dataItem: selectedDataItems[idx]\n\t });\n\t }\n\n\t this._values = [];\n\t this._selectedDataItems = [];\n\t this._selectedIndexes = [];\n\t } else if (selectable === \"multiple\") {\n\t for (var i = 0; i < indices.length; i++) {\n\t result = null;\n\t position = $.inArray(indices[i], selectedIndexes);\n\t dataItem = this.dataItemByIndex(indices[i]);\n\n\t if (position === -1 && dataItem) {\n\t for (var j = 0; j < selectedDataItems.length; j++) {\n\t match = isPrimitive(dataItem) ? selectedDataItems[j] === dataItem : valueGetter(selectedDataItems[j]) === valueGetter(dataItem);\n\t if (match) {\n\t item = this._getElementByIndex(indices[i]);\n\t result = this._deselectSingleItem(item, j, indices[i], removedindexesCounter);\n\t }\n\t }\n\t } else {\n\t selectedIndex = selectedIndexes[position];\n\n\t if (selectedIndex !== undefined) {\n\t item = this._getElementByIndex(selectedIndex);\n\t result = this._deselectSingleItem(item, position, selectedIndex, removedindexesCounter);\n\t }\n\t }\n\n\t if (result) {\n\t indices.splice(i, 1);\n\t removed.push(result);\n\n\t removedindexesCounter++;\n\t i--;\n\t }\n\t }\n\t }\n\n\t return {\n\t indices: indices,\n\t removed: removed\n\t };\n\t },\n\n\t _deselectSingleItem: function(item, position, selectedIndex, removedindexesCounter) {\n\t var dataItem;\n\n\t if (!item.hasClass(\"k-state-selected\")) {\n\t return;\n\t }\n\n\t item.removeClass(SELECTED);\n\t this._values.splice(position, 1);\n\t this._selectedIndexes.splice(position, 1);\n\t dataItem = this._selectedDataItems.splice(position, 1)[0];\n\n\t return {\n\t index: selectedIndex,\n\t position: position + removedindexesCounter,\n\t dataItem: dataItem\n\t };\n\t },\n\n\t _deselectCurrentValues: function(indices) {\n\t var children = this.element[0].children;\n\t var value, index, position;\n\t var values = this._values;\n\t var removed = [];\n\t var idx = 0;\n\t var j;\n\n\t if (this.options.selectable !== \"multiple\" || !this.isFiltered()) {\n\t return [];\n\t }\n\n\t if (indices[0] === -1) {\n\t $(children).removeClass(\"k-state-selected\");\n\t removed = $.map(this._selectedDataItems.slice(0), function(dataItem, idx) {\n\t return {\n\t dataItem: dataItem,\n\t position: idx\n\t };\n\t });\n\t this._selectedIndexes = [];\n\t this._selectedDataItems = [];\n\t this._values = [];\n\t return removed;\n\t }\n\n\t for (; idx < indices.length; idx++) {\n\t position = -1;\n\t index = indices[idx];\n\t if (this.dataItemByIndex(index)) {\n\t value = this._valueGetter(this.dataItemByIndex(index));\n\t }\n\n\t for (j = 0; j < values.length; j++) {\n\t if (value == values[j]) {\n\t position = j;\n\t break;\n\t }\n\t }\n\n\t if (position > -1) {\n\t removed.push(this.removeAt(position));\n\t $(children[index]).removeClass(\"k-state-selected\");\n\t }\n\t }\n\n\t return removed;\n\t },\n\n\t _getSkip: function(index, take) {\n\t var page = index < take ? 1 : Math.floor(index / take) + 1;\n\n\t return (page - 1) * take;\n\t },\n\n\t _select: function(indexes) {\n\t var that = this,\n\t singleSelection = this.options.selectable !== \"multiple\",\n\t dataSource = this.dataSource,\n\t dataItem, oldSkip,\n\t take = this.itemCount,\n\t valueGetter = this._valueGetter,\n\t added = [];\n\n\t if (singleSelection) {\n\t that._selectedIndexes = [];\n\t that._selectedDataItems = [];\n\t that._values = [];\n\t }\n\n\t oldSkip = dataSource.skip();\n\n\t $.each(indexes, function(_, index) {\n\t var skip = that._getSkip(index, take);\n\n\t that.mute(function() {\n\t dataSource.range(skip, take); //switch the range to get the dataItem\n\n\t dataItem = that._findDataItem(dataSource.view(), [index - skip]);\n\t that._selectedIndexes.push(index);\n\t that._selectedDataItems.push(dataItem);\n\t that._values.push(isPrimitive(dataItem) ? dataItem : valueGetter(dataItem));\n\n\t added.push({\n\t index: index,\n\t dataItem: dataItem\n\t });\n\n\t that._getElementByIndex(index).addClass(SELECTED);\n\n\t dataSource.range(oldSkip, take); //switch back the range\n\t });\n\t });\n\n\t that._values = that._checkValuesOrder(that._values);\n\n\t return added;\n\t },\n\n\t _clickHandler: function(e) {\n\t var item = $(e.currentTarget);\n\n\t if (!e.isDefaultPrevented() && item.attr(\"data-uid\")) {\n\t this.trigger(CLICK, { item: item });\n\t }\n\t },\n\n\t _buildValueGetter: function() {\n\t this._valueGetter = kendo.getter(this.options.dataValueField);\n\t },\n\n\t _calculateGroupPadding: function (height) {\n\t var firstItem = this.items().first(),\n\t groupHeader = this.header,\n\t padding = 0;\n\n\t if (groupHeader[0] && groupHeader[0].style.display !== \"none\") {\n\t if (height !== \"auto\") {\n\t padding = kendo.support.scrollbar();\n\t }\n\n\t padding += parseFloat(firstItem.css(\"border-right-width\"), 10) + parseFloat(firstItem.children(\".k-group\").css(\"right\"), 10);\n\n\t groupHeader.css(\"padding-right\", padding);\n\t }\n\t },\n\n\t _calculateColumnsHeaderPadding: function () {\n\t if(this.options.columns && this.options.columns.length){\n\t var isRtl = kendo.support.isRtl(this.wrapper);\n\t var scrollbar = kendo.support.scrollbar();\n\t var columnsHeader = this.content.parent().parent().find(\".k-grid-header\");\n\t var total = this.dataSource.total();\n\n\t columnsHeader.css((isRtl ? \"padding-left\" : \"padding-right\"), total ? scrollbar : 0);\n\t }\n\t }\n\n\t });\n\n\t kendo.ui.VirtualList = VirtualList;\n\t kendo.ui.plugin(VirtualList);\n\n\t})(window.kendo.jQuery);\n\n\treturn window.kendo;\n\n\t}, __webpack_require__(3));\n\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1017)))\n\n/***/ })\n\n/******/ });","import '../../../../Assets/kendo.forms';\r\nimport './TableBooking.scss';\r\n\r\n// Helper\r\nimport inlineForm from '../../../../Assets/scripts/forms/inlineForm';\r\n\r\nfunction bind(element) {\r\n \r\n}\r\n\r\nfunction init() {\r\n const form = $('#form-target')\r\n\r\n if (form) { inlineForm(form, bind) }\r\n}\r\n\r\n$(function () {\r\n init()\r\n})","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 494;","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t494: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkasp_net\"] = self[\"webpackChunkasp_net\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [736], () => (__webpack_require__(37144)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","module","exports","modules","installedModules","moduleId","id","loaded","call","m","c","p","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","undefined","$","ui","window","kendo","jQuery","ComboBox","requestData","selector","combobox","data","filter","dataSource","value","input","val","filters","length","text","apply","Error","escapeQuoteRegExp","extend","isArray","isPlainObject","parameterMap","options","operation","serializationOptions","result","sort","this","prefix","map","field","dir","join","page","pageSize","group","aggregate","serializeFilter","encode","groupPaging","take","skip","Serializer","serialize","culture","stringifyDates","decimalSeparator","numberFormat","f","hasChildren","logic","operator","indexOf","replace","encodeURIComponent","Date","parseInt","getTime","format","encodeFilterValue","valueOrDefault","defaultValue","translateGroup","hasSubgroups","HasSubgroups","items","Items","itemCount","ItemCount","subgroupCount","SubgroupCount","Key","key","Member","member","aggregates","translateAggregate","Aggregates","uid","guid","translateAggregateResults","obj","AggregateMethodName","toLowerCase","Value","functionName","functionResult","convertAggregates","idx","prototype","fn","valuePrefix","serializeField","serializeArray","serializeValue","sourceIndex","destinationIndex","stringify","toString","name","schemas","groups","_dataAccessFunction","d","AggregateResults","transports","RemoteTransport","init","that","read","url","Data","success","type","update","create","destroy","cultures","updateUrl","idField","destroyUrl","query","regExp","RegExp","location","search","test","setup","match","substr","href","DropDownList","dropdownlist","filterInput","DropDownTree","dropdowntree","model","fields","editable","size","path","extension","isDirectory","hasDirectories","created","createdUtc","modified","modifiedUtc","isFunction","parse","_call","EntryType","MultiColumnComboBox","multicolumncombobox","MultiSelect","multiselect","placeholder","nameSpecialCharRegExp","SWITCHSELECTOR","rulesFromData","metadata","Fields","rules","rulesForField","validationType","validationParams","messages","fieldName","FieldName","fieldRules","ValidationRules","ValidationType","ValidationParameters","createMetaRule","createMetaMessage","ErrorMessage","createMessage","rule","attr","createRule","ruleName","validationRules","index","start","params","substring","extractParams","message","required","checkbox","hiddenSelector","closest","hidden","next","prop","number","parseFloat","regex","pattern","range","min","max","date","parseDate","len","trim","server","validator","generateRules","generateMessages","messageLocators","mvcLocator","locate","element","find","decorate","addClass","mvcMetadataLocator","ruleResolvers","mvcMetaDataResolver","resolve","mvcClientValidationMetadata","FormId","validateOnInit","allowSubmit","errors","decimals","groupSize","percent","symbol","currency","abbr","calendars","standard","days","names","namesAbbr","namesShort","months","AM","PM","patterns","D","F","g","G","M","s","t","T","u","y","Y","firstDay","subGroup","keys","DISABLED","SELECT","CHECKED","proxy","INDETERMINATE","TreeView","node","children","Tree","_nodesToLoad","_isMultipleSelection","wrapper","on","CLICK","_clickSelectedItem","_checkOnSelect","e","isDefaultPrevented","dataItem","set","checked","_setCheckedValue","_click","one","currentTarget","_trigger","defaultrefresh","i","action","parentNode","loadOnDemand","checkChildren","checkboxes","_skip","level","_updateNodes","findByUid","_progress","bubble","_appendItems","_remove","_refreshChildren","_refreshRoot","expanded","load","trigger","_treeViewDataBound","sender","updateIndeterminate","_previousVisible","lastChild","prev","root","last","_expanded","parent","checkAll","is","focus","_keydown","target","keyCode","focused","current","rtl","support","isRtl","RIGHT","LEFT","_nextVisible","hasClass","expand","collapse","_enabled","DOWN","UP","altKey","HOME","END","ENTER","SPACEBAR","_checkboxChange","ESC","_closePopup","TAB","preventDefault","select","close","refresh","skipUpdateOnBind","_checkValue","selected","_selectValue","_dropdowntree","__documentIsReady","syncReady","cb","Widget","adjustDST","weekInYear","Selectable","extractFormat","_extractFormat","template","getCulture","transitions","transitionOrigin","css","cellTemplate","useWithBlock","emptyCellTemplate","otherMonthCellTemplate","weekNumberTemplate","browser","isIE8","msie","version","outerWidth","_outerWidth","ns","ID","SLIDE","MONTH","CENTURY","CHANGE","NAVIGATE","VALUE","HOVER","FOCUSED","OTHERMONTH","OTHERMONTHCLASS","TODAY","CELLSELECTOR","CELLSELECTORVALID","SELECTED","BLUR","FOCUS","FOCUS_WITH_NS","MOUSEENTER","touch","MOUSEENTER_WITH_NS","MOUSELEAVE","MS_PER_DAY","PREVARROW","NEXTARROW","ARIA_DISABLED","ARIA_SELECTED","ARIA_LABEL","DATE","views","month","year","decade","century","HEADERSELECTOR","CLASSIC_HEADER_TEMPLATE","MODERN_HEADER_TEMPLATE","Calendar","componentType","unescape","disableDates","getDisabledExpr","_templates","_selectable","_header","_viewWrapper","hasFooter","_footer","footer","weekNumber","mousetoggle","_move","link","firstChild","toDateObject","_view","selectable","_focusView","focusOnNav","_cellID","first","_lastActive","selectRange","event","_current","_value","_class","normalize","_selectDates","_index","restrictValue","_addClassProxy","_active","_cell","todayString","toDateString","getToday","_cellByDate","_removeClassProxy","removeClass","selectDates","notify","dates","depth","animation","horizontal","effects","reverse","duration","divisor","vertical","weekColumnHeader","today","events","componentTypes","header","linksSelector","contentClasses","setOptions","_destroySelectable","hide","navigate","_today","off","_title","_table","view","table","_bindTable","_option","navigateToPast","_navigate","navigateToFuture","navigateUp","navigateDown","isEqualDate","isNaN","to","currentView","compare","disabled","title","from","old","_oldTable","currentValue","future","viewWrapper","calendar","toggleClass","kendoStop","_changeView","html","content","otherMonth","isWeekColumnVisible","addClassToViewContainer","makeUnselectable","_animate","_focus","_visualizeSelectedDatesInView","validSelectedDates","datesUnique","position","array","time","grep","_validateValue","setHours","createDate","getFullYear","getMonth","getDate","isInRange","selectedDates","each","clear","cells","_selectElement","selectableOptions","parseOptions","multiple","aria","inputSelectors","change","_onSelect","relatedTarget","_onRelatedTarget","eventArgs","ctrlKey","metaKey","_toggleSelection","_cellsBySelector","_deselect","_addSelectedCellsToArray","shiftKey","_rangeSelection","currentCell","push","toDateCell","startDate","daysDifference","fromDate","toDate","daysBetweenTwoDates","addDaysToArray","item","currentDateIndex","Number","splice","_dateInView","firstDateInView","_isNavigatable","cellIndex","isDisabled","prevent","method","temp","getHours","getMinutes","getSeconds","getMilliseconds","setFullYear","_keyboardToggleSelection","focusedDate","setDate","_nextNavigatable","_keyboardRangeSelection","PAGEUP","PAGEDOWN","_unselect","navigatableDate","active","remove","append","insertAfter","_horizontal","viewWidth","add","width","wrap","complete","unwrap","kendoAnimate","_vertical","cell","insertBefore","left","top","height","className","disabledDate","removeAttribute","_toggle","appendTo","show","_todayClick","arrow","modifier","has","option","isBigger","value1","value2","empty","toggle","isTodayDisabled","footerTemplate","plugin","firstDayOfMonth","firstVisibleDay","calendarInfo","getDay","setTime","tzOffsetBefore","getTimezoneOffset","resultDATE","tzOffsetDiff","getCalendarInfo","navigateUrl","showHeader","hasUrl","currentCalendar","firstDayIdx","shiftArray","shortNames","lastDayOfMonth","perRow","setter","build","cssClass","day","linkClass","inArray","dateString","weekNumberBuild","currentDate","timeOffset","Math","abs","date1","date2","month1","year1","month2","year2","hours","setMonth","minYear","maxYear","end","modular","cellsPerRow","otherMonthTemplate","slice","concat","multiplier","endDate","fromDateUTC","UTC","endDateUTC","ceil","numberOfDays","nextDay","dateObject","body","disabledDates","searchExpression","convertDatesArray","Function","createDisabledExpr","noop","oldValue","newValue","split","isEqualDatePart","viewsEnum","List","Select","caret","placeholderSupported","activeElement","_activeElement","nsFocusEvent","MOUSEDOWN","READONLY","DEFAULT","STATEDISABLED","STATE_FILTER","STATE_ACCEPT","STATE_REBIND","newLineRegEx","_focusHandler","_reset","_wrapper","_input","_clearButton","_tabindex","_popup","_dataSource","_ignoreCase","_enable","_attachFocusEvents","_oldIndex","selectedIndex","_aria","_initialIndex","requireValueMapper","_initList","_cascade","autoBind","_filterSource","_isSelect","_setText","_placeholder","parents","enable","_toggleCloseVisibility","enabled","delay","dataTextField","dataValueField","minLength","enforceMinLength","highlightFirst","suggest","cascadeFrom","cascadeFromField","cascadeFromParentField","ignoreCase","virtual","groupTemplate","fixedGroupTemplate","clearButton","syncValueAndText","autoWidth","popup","listOptions","_listOptions","listView","_accessors","_inputWrapper","clearTimeout","_pasteTimeout","_arrow","_clear","_change","hasText","_oldText","isCustom","_old","_typing","_inputFocus","_inputFocusout","_arrowClick","_userTriggered","_typingTimeout","dataItemByIndex","getElementIndex","_valueBeforeCascade","_blur","blur","_inputPaste","setTimeout","_editable","disable","readonly","_toggleHover","removeAttr","_clearValue","_search","open","state","_state","isFiltered","reinitialized","ul","visible","bound","_open","_openPopup","_allowOpening","_hovered","_focusItem","_scrollToFocusedItem","scrollToIndex","_updateSelectionState","_accessor","_buildOptions","custom","_customOption","_options","_emptySearch","_custom","_updateSelection","initialIndex","hasInitialIndex","_fetch","selectedDataItems","_text","_updateItemFocus","focusIndex","_listBound","isActive","flatView","groupsLength","_group","isFirstPage","_presetValue","_renderFooter","_renderNoData","_toggleNoData","_toggleHeader","_resizePopup","_makeUnselectable","_hideBusy","_listChange","_get","candidate","found","_select","keepState","done","_dataValue","_setDomInputValue","_triggerCascade","caretStart","currentCaret","_prev","mobile","mobileOS","wp","android","setSelectionRange","preventShow","_showClear","_hideClear","word","caretIdx","_last","accentFoldingFiltering","BACKSPACE","DELETE","toLocaleLowerCase","loweredText","unifyType","_cascadeTriggered","_isFilterEnabled","_clearFilter","_fetchData","_selectedDataItems","_busy","_arrowIcon","_focused","shouldTrigger","_syncValueAndText","_inputValue","_searchByWord","focusFirst","fetch","maxLength","accessKey","SELECTOR","style","cssText","_firstItem","_lastItem","_clearSelection","hasValue","_preselect","setValue","_clearText","Template","math","JSON","percentRegExp","formatRegExp","boxShadowRegExp","numberRegExp","FUNCTION","STRING","NUMBER","OBJECT","NULL","BOOLEAN","UNDEFINED","getterCache","setterCache","noDepricateExtend","src","copyIsArray","copy","clone","arguments","deep","Class","proto","base","subclass","constructor","Object","_initOptions","deepExtend","_defaultPrevented","Observable","_events","bind","eventName","handlers","original","handler","eventNames","handlersIsFunction","unbind","unshift","compilePart","part","stringPart","charAt","rest","argumentNameRegExp","encodeRegExp","escapedCurlyRegExp","curlyRegExp","escapedSharpRegExp","sharpRegExp","zeros","pad","digits","wrapResize","autosize","outerHeight","_outerHeight","wrapperStyle","display","boxSizing","mozBoxSizing","webkitBoxSizing","destination","deepExtendOne","source","property","propValue","propType","propInit","destProp","ObservableArray","LazyObservableArray","DataSource","HierarchicalDataSource","Array","ArrayBuffer","testRx","agent","rxs","dflt","rx","hasOwnProperty","toCamelCase","str","strMatch","g1","toUpperCase","getComputedStyles","properties","computedStyle","styles","document","defaultView","getComputedStyle","getPropertyValue","currentStyle","paramName","render","compile","parts","settings","argumentName","functionBody","_slotCount","floor","gap","indent","rep","escapable","meta","quote","string","lastIndex","a","charCodeAt","holder","k","v","partial","mind","toJSON","isFinite","String","valueOf","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","Boolean","replacer","space","dateFormatRegExp","standardFormatRegExp","literalRegExp","commaRegExp","EMPTY","POINT","SHARP","ZERO","EN","objectToString","findCulture","twoDigitYearMax","cultureName","groupInteger","integer","integerLength","newGroupSize","decimalIndex","groupSizes","shift","round","precision","negative","toFixed","fmt","minutes","sign","formatDate","isCurrency","isPercent","customPrecision","formatAndPrecision","fraction","ch","hasGroup","hasNegativeFormat","sharpIndex","zeroIndex","hasZero","hasSharp","currencyIndex","decimal","literals","replacement","toLocaleString","exec","toExponential","quoteChar","literal","lastIndexOf","rounded","formatNumber","values","placeholderFormat","documentElement","_round","includeMargin","nonBreakingSpaceRegExp","exponentRegExp","shortTimeZoneRegExp","longTimeZoneRegExp","dateRegExp","offsetRegExp","FORMATS_SEQUENCE","STANDARD_FORMATS","outOfRange","designatorPredicate","designator","mapDesignators","designators","lowerArray","lowerLocalInfo","localInfo","newLocalInfo","parseExact","strict","count","pmHour","matches","amDesignators","pmDesignators","hoursOffset","minutesOffset","lookAhead","getNumber","rg","valueIdx","getIndexByName","lower","nameLength","subValue","matchLength","matchIdx","checkLiteral","seconds","milliseconds","defaultYear","_lowerDays","_lowerMonths","internalParseDate","formats","tzoffset","offset","timezone","convert","cultureFormats","formatIdx","getDefaultFormats","parseExactDate","percentSymbol","_scrollbar","scrollbar","div","createElement","innerHTML","appendChild","offsetWidth","scrollWidth","removeChild","tbodyInnerHtml","docStyle","transforms","elementProto","HTMLElement","hasHW3D","WebKitCSSMatrix","cssFlexbox","hasTransitions","lowPrefix","devicePixelRatio","screenWidth","screen","availWidth","innerWidth","screenHeight","availHeight","innerHeight","detectOS","ua","minorVersion","os","notAndroidPhone","agentRxs","fire","iphone","ipad","meego","webos","blackberry","playbook","windows","tizen","sailfish","ffos","osRxs","ios","flat","formFactorRxs","tablet","browserRxs","omini","omobile","firefox","mobilesafari","ie","chrome","webkit","navigator","device","majorVersion","flatVersion","cordova","PhoneGap","appMode","standalone","protocol","docElement","userAgent","wpDevicePixelRatio","hasNativeScrolling","delayedClick","mouseAndTouchPresent","detectBrowser","edge","safari","opera","mozilla","documentMode","detectClipboardAccess","commands","queryCommandSupported","cut","paste","clipboard","zoomLevel","ie11WidthCorrection","docEl","scrollHeight","clientHeight","clientWidth","cssBorderSpacing","borderSpacing","eventCapture","addEventListener","propertyChangeEvent","types","setAttribute","cssFloat","stableSort","sorted","b","matchesSelector","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","nodeList","querySelectorAll","matchMedia","pushState","history","hashChange","customElements","mobileChrome","crios","msPointers","MSPointerEvent","pointers","PointerEvent","kineticScrollNeeded","prepareAnimationOptions","teardown","completeCallback","animate","instance","queue","promise","Element","dequeue","promiseShim","animatedPromise","clearQueue","gotoEnd","stop","kendoAddClass","classes","kendoRemoveClass","kendoToggleClass","ampRegExp","ltRegExp","quoteRegExp","aposRegExp","gtRegExp","eventTarget","touches","originalEvent","changedTouches","elementFromPoint","clientX","clientY","callback","mousedown","mouseup","mousemove","mousecancel","click","resize","localUrlRe","widgets","_widgetRegisteredCallbacks","fx","dataviz","drawing","spreadsheet","INSERT","F2","F10","F12","NUMPAD_PLUS","NUMPAD_MINUS","NUMPAD_DOT","getShadows","shadow","radius","right","bottom","percentage","windowOuterWidth","percentWidth","percentHeight","forceWidth","zoom","isScrollable","overflow","scrollLeft","mozila","el","toHyphens","getOffset","positioned","pageYOffset","pageXOffset","parseEffects","directions","down","up","out","htmlEncode","decodeURIComponent","error","_","m1","m2","fromCharCode","isLocalUrl","expr","expression","safe","members","wrapExpression","getter","accessor","get","random","roleSelector","role","directiveSelector","directives","selectors","triggeredByInput","tagName","onWidgetRegistered","logToConsole","console","suppressLog","log","angular","props","defaults","_hasBindingTarget","kendoBindingTarget","TABINDEX","tabindex","_setEvents","force","getSize","currentSize","_size","_resize","dimensions","setSize","removeData","_destroy","_muteAngularRebind","_muteRebind","DataBoundWidget","dataItems","_angularItems","cmd","elements","domElement","offsetHeight","templateRegExp","jsonRegExp","jsonFormatRegExp","dashRegExp","parseOption","getAttribute","containmentComparer","contains","resizableWidget","widget","initWidget","roles","fullPath","widgetKeyRegExp","nodeType","widgetKey","isEmptyObject","rolesFromNamespaces","namespaces","addBack","widgetsArray","makeArray","widgetInstance","progress","container","leftRight","webkitCorrection","containerScrollLeft","mask","scrollTop","opacity","loading","prependTo","register","widgetEntry","args","ContainerNullObject","nullObject","MobileWidget","autoApplyNS","kendoDestroy","viewElement","viewHasNativeScrolling","useNativeScrolling","eq","focusable","isTabIndexNotNaN","nodeName","pseudos","appLevelNativeScrolling","application","themes","touchScroller","useNative","Scroller","kendoMobileScroller","suites","elementData","editorToolbar","onResize","unbindResize","attrValue","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","kendoFocusable","MOUSE_EVENTS","MouseEventNormalizer","setupMouseMute","mouseTrap","bustClick","captureMouse","stopPropagation","muteMouse","mouseTrapTimeoutID","unMuteMouse","eventMap","move","cancel","MSPointerEnter","MSPointerLeave","orig","fix","special","delegateType","bindType","handle","ret","related","handleObj","origType","getEventMap","eventRegEx","applyEventMap","keyDownHandler","kendoKeydown","preventKendoKeydown","kendoJQuery","context","rootjQuery","pop","touchstart","touchend","keyDownCallBack","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec","Sun","Mon","Tue","Wed","Thu","Fri","Sat","ruleToDate","targetDay","ourDay","cache","getUTCDay","setUTCDate","findRule","utcTime","zone","zoneAndRule","zones","zoneRules","until","findZone","info","fromOffset","toOffset","diff","tempToOffset","fromLocalOffset","toLocalOffset","toLocalDate","MS_PER_MINUTE","setDayOfWeek","dayOfWeek","calcWeekInYear","weekStartDay","firstWeekInYear","diffInMS","addDays","moveDateToWeekStart","toInvariantTime","ignoreDST","difference","staticDate","isInDateRange","msValue","msMin","msMax","isInTimeRange","isToday","previousDay","toUtcTime","MS_PER_HOUR","prevWeekDate","nextWeekDate","stripWhitespace","createNodeIterator","iterator","NodeFilter","SHOW_TEXT","FILTER_ACCEPT","FILTER_REJECT","nextNode","referenceNode","textContent","childNodes","child","nodeValue","animationFrame","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","animationQueue","queueAnimation","runNextAnimation","parseQueryStringParams","paramParts","elementUnderCursor","x","client","wheelDeltaY","jQueryEvent","delta","deltaY","wheelDelta","detail","axis","VERTICAL_AXIS","throttle","timeout","lastExecTime","throttled","elapsed","rangeElement","isPosition","selectionStart","selectionEnd","selection","createTextRange","moveStart","moveEnd","rangeDuplicated","duplicate","moveToBookmark","createRange","getBookmark","setEndPoint","compileMobileDirective","scope","injector","invoke","$compile","$$phase","$digest","antiForgeryTokens","tokens","csrf_token","csrf_param","cycleForm","form","firstElement","lastElement","focusElement","scrollTopPositions","scrollableParents","parentsUntil","setActive","focusNextElement","focussable","getWidgetFocusableElement","nextFocusable","addAttribute","attribute","toggleAttribute","matchesMedia","mediaQuery","media","_bootstrapToMedia","bootstrapMedia","fileGroupMap","audio","video","image","txt","presentation","programming","pdf","config","zip","getFileGroup","withPrefix","fileTypeMap","getFileSizeMessage","pow","selectorFromClasses","postToProxy","dataURI","fileName","proxyURL","proxyTarget","contentType","base64","submit","fileSaver","downloadAttribute","saveAsBlob","blob","atob","Uint8Array","Blob","buffer","msSaveBlob","saveAsDataURI","URL","createObjectURL","download","createEvent","initMouseEvent","dispatchEvent","revokeObjectURL","saveAs","save","forceProxy","proxyModelSetters","observable","forEach","defineProperty","dirty","setDefaults","curr","ajax","CREATE","READ","UPDATE","DESTROY","SYNC","GET","ERROR","REQUESTSTART","PROGRESS","REQUESTEND","crud","identity","o","ObservableObject","wrapAll","at","serializeFunctions","json","object","Model","omitChangeEvent","howMany","thisArg","reduce","reduceRight","every","some","Symbol","_parent","eventHandler","_notifyChange","_handlers","shouldSerialize","_set","composite","paths","isSetPrevented","isObservableArray","isDataSource","equal","xtype","parsers","defaultValues","_initializers","dirtyFields","_defaultId","_parse","getFieldByName","accept","isNew","define","originalName","functionFields","nullable","Comparer","localeCompare","combine","comparers","StableComparer","asc","valueA","valueB","__position","desc","operators","textOp","impl","ignore","op","getMatchRegexp","esc","neq","gt","gte","lt","lte","startswith","doesnotstartwith","endswith","doesnotendwith","doesnotcontain","doesnotmatch","isempty","isnotempty","isnull","isnotnull","isnullorempty","isnotnullorempty","Query","normalizeSort","descriptor","descriptors","filterExpr","expressions","fieldFunctions","operatorFunctions","and","or","operatorMap","equals","isequalto","equalto","ne","notequals","isnotequalto","notequalto","notequal","islessthan","lessthan","less","le","islessthanorequalto","lessthanequal","isgreaterthan","greaterthan","greater","isgreaterthanorequalto","greaterthanequal","ge","notsubstringof","normalizeOperator","normalizeFilter","compareDescriptor","f1","f2","normalizeDescriptor","fieldComparer","normalizeGroup","skipItemSorting","normalizeGroupWithoutCompare","groupValueComparer","calculateAggregate","accumulator","aggr","functions","compareFilters","expr1","expr2","filters1","filters2","toArray","order","inPlace","orderBy","orderByDescending","comparer","compiled","predicate","allData","groupAllData","groupBy","_sortForGrouping","groupValue","_sortGroups","sum","isNumber","average","isDate","process","groupDescriptorsWithoutSort","total","customGroupSort","groupDescriptors","anyGroupDescriptorHasCompare","groupDescriptorsWithoutCompare","normalizedSort","filterCallback","flatGroups","groupDescriptor","LocalTransport","Cache","parameters","_store","serializeRecords","getters","modelInstance","originalFieldNames","fieldNames","record","setters","convertRecords","convertGroup","wrapDataAccess","originalFunction","converter","wrapDataAccessBase","store","DataReader","schema","modelBase","dataFunction","groupsFunction","serializeFunction","serializeGetters","fromName","_wrapDataAccessBase","fillLastGroup","originalGroup","newGroup","currOriginal","currentNew","mergeGroups","dest","indexFunction","indexFn","groupIndex","itemIndex","flattenGroups","wrapGroupItems","eachGroupItems","func","replaceInRanges","ranges","replaceInRange","replaceWithObservable","serverGrouping","viewIndex","indexOfPristineModel","indexOfModel","fieldNameFromModel","convertFilterDescriptorsField","convertDescriptorsField","_map","_prefetch","_data","_pristineData","_ranges","_pristineTotal","_destroyed","_pageSize","_page","_sort","_filter","_aggregate","_total","_groupPaging","_groupsState","_shouldDetachObservableParents","transport","Transport","pushCreate","_pushCreate","pushUpdate","_pushUpdate","pushDestroy","_pushDestroy","offlineStorage","_storage","getItem","localStorage","setItem","reader","readers","_detachObservableParents","_observe","_online","serverSorting","serverPaging","serverFiltering","serverAggregates","batch","inPlaceSort","online","sync","Deferred","offlineData","_isServerGrouped","_isServerGroupPaged","_isGroupPaged","_push","_readData","_flatData","useRanges","getByUid","_getByUid","_storeData","_addRange","_process","_observeView","insert","_createNewModel","_wrapInEmptyGroup","_insertModelInRange","pushInsert","rangeSpan","_getCurrentRangeSpan","pushed","autoSync","pristine","pristineData","_updatePristineForModel","_removeItems","removePristine","shouldRemovePristine","destroyed","_eachItem","_removePristineForModel","hasGroups","removeModel","_removeModelFromRanges","updated","promises","_sendSubmit","_send","when","then","_accept","_syncEnd","cancelChanges","_cancelModel","_changesCanceled","_markOfflineUpdatesAsDirty","__state__","hasChanges","models","response","serverGroup","_handleCustomErrors","_executeOnPristineForModel","_eachPristineItem","_pristineForModel","_modelCanceled","_submit","status","reject","_promise","converted","_params","_queueRequest","isPrevented","_dequeueRequest","_readAggregates","replaceSubset","_serverGroupsTotal","_aggregateResult","itemIds","endless","j","_changeHandler","updatePristine","timestamp","_timeStamp","outerStart","outerEnd","_sortRanges","_groupsFlat","_appendToGroupsFlat","_updateOuterRangesLength","_getGroupByUid","xhr","errorThrown","_requestInProgress","_pending","_shouldWrap","_updateTotalForAction","_calculateAggregates","_take","currentRangeStart","_clearEmptyGroups","_queryProcess","dataToAggregate","_setView","_setFilterTotal","_mergeState","_currentRangeStart","_sortFields","sorts","sortObject","sortFields","moreItemsCount","_hasExpandedSubGroups","_findGroupedRange","itemsLength","hasNotRequestedItems","groupCount","itemsToSkip","taken","getGroupSubGroupCount","_fetchingGroupItems","skipped","getGroupItems","includeParents","excludeHeader","currentItems","subgroups","_composeItemsFilter","findSubgroups","_timeout","_groupItemsSuccessHandler","includeSubGroupCount","_subGroupCountSuccessHandler","totalField","_updateRangePristineData","_currentRequestTimeStamp","_skipRequestsInProgress","indexOfCurrentGroup","currentGroup","dataLength","indexes","rangesLength","_containsSubGroup","_cloneGroup","subgroup","currentSubGroup","filterTotal","setDefaultValue","_query","totalPages","_pageableQueryOptions","getGroupsFlat","groupsTotal","includeExpanded","_calculateGroupsTotal","itemsField","ignoreState","_groupsTotal","countGroupRange","_emptyAggregates","inRange","_findRange","lastRange","firstItemUid","enableRequestsInProgress","pageSkip","_processRangeData","_originalPageSkip","_originalSize","_adjustPageSkip","_groupRangeExists","_rangeExists","prefetch","skipIdx","takeIdx","startIndex","endIndex","rangeData","rangeEnd","processed","flatData","prevRangeEnd","remote","groupMapOptions","isGroupPaged","startField","endField","_mergeGroups","_getRangesMismatch","mismatch","prevGroup","eventData","_omitPrefetch","paging","sorting","filtering","_prefetchSuccessHandler","_multiplePrefetch","prevRange","_getPrevRange","_getNextRange","availableItemsCount","_removeModelFromRange","_updateRangesLength","mismatchFound","mismatchLength","lengthDifference","rangeLength","transportOptions","fieldIndex","tbody","tBodies","rows","fieldCount","inferTable","optgroup","firstField","secondField","label","attributes","specified","inferSelect","Node","childrenField","childrenOptions","hasChildrenObject","_childrenOptions","_initChildren","_loaded","collection","_updateChildrenField","_childrenLoaded","_matchFilter","dataMethod","_attachBubbleHandlers","_hierarchicalFilter","_markHierarchicalQuery","_updateHierarchicalFilter","_find","inferList","list","textChild","textField","urlField","spriteCssClassField","imageUrlField","Buffer","viewSize","disablePrefetch","_prefetching","_syncWithDataSource","setViewSize","_recalculate","itemPresent","dataOffset","prefetchThreshold","midPageThreshold","nextMidRange","nextPageThreshold","nextFullRange","pullBackThreshold","previousMidRange","previousFullRange","_goToRange","nextRange","syncDataSource","prefetchOffset","expanding","_expanding","_syncPending","_firstItemUid","BatchBuffer","batchSize","batchBuffer","NEWLINE","DOUBLELINE","odataFilters","odataFiltersVersionFour","mappers","useVersionFour","toOdataFilter","$filter","orderby","$orderby","$skip","$top","defaultDataType","dataType","useOdataFour","stripMetadata","hex16","createBoundary","createDelimeter","boundary","createCommand","httpVerb","command","transportUrl","commandPrefix","getOperationHeader","changeset","changeId","processCollection","colection","skipContent","requestBody","getBoundary","getOperations","odata","results","jsonp","$inlinecount","$format","$count","colections","batchURL","headers","createBatchRequest","collections","responses","responseText","changeBody","code","marker","jsonModel","responseMarkers","markerIndex","passed","parseBatchResponse","XmlDataReader","xpathToMember","evaluate","xmlParse","xml","parseDOM","parsedNode","attributeCount","nextSibling","intermediateResult","tree","parseXML","raw","INPUT_EVENT_NAME","STATEDEFAULT","STATEINVALID","knownSymbols","DateInput","insidePicker","_form","_unbindInput","_bindInput","_updateElementValue","_formElement","_resetHandler","_dateTime","getDateObject","customDateTime","_oldValue","stringAndFromat","toPair","_format","_paste","_mouseUp","_scroll","blinkInvalid","oldText","oldFormat","newText","oldTextSeparator","deletedSymbol","approximateStringMatching","navigationOnly","valid","parsePart","_selectSegment","difSym","_blinkInvalidTimeout","_selectNearestSegment","newEvent","returnValue","formId","initialValue","interval","modifyPart","keycode","which","begin","initDate","initFormat","initCulture","initMessages","typedMonthPart","typedDayPeriodPart","placeholders","returnsFormat","matcher","mins","weekday","hour","minute","second","dayperiod","formatResult","generateMatcher","retFormat","setExisting","getValue","newMonth","setMinutes","setSeconds","currentChar","newHours","newDate","monthNames","newYear","newMinutes","newSeconds","sampleFormat","DIV","SPAN","OPEN","CLOSE","ARIA_EXPANDED","ARIA_HIDDEN","parseFormats","DateView","omitPopup","dateDiv","Popup","anchor","_dateViewID","_calendar","_setOptions","popupHovered","selectIsClicked","handled","DatePicker","_initialOptions","dateView","_updateARIA","_icon","_template","_createDateInput","_update","ARIATemplate","dateInput","_dateInput","icon","_dateIcon","_focusElement","eventType","dateChanged","valueUpdated","textFormatted","stopImmediatePropagation","formattedValue","isSameType","optionsValue","_ariaTemplate","lastDropTarget","$window","UserEvents","draggables","dropTargets","dropAreas","KEYUP","DRAGSTART","HOLD","DRAG","DRAGEND","DRAGCANCEL","HINTDESTROYED","DRAGENTER","DRAGLEAVE","DROP","numericCssPropery","within","containerBoundaries","minX","minY","translate","TapCapture","capture","_press","_release","attachEvent","captureNext","cancelCapture","PaneDimension","forcedEnabled","scale","measure","scrollSize","makeVirtual","_virtualMin","_virtualMax","virtualSize","outOfBounds","forceEnabled","getTotal","rescale","silent","scaledTotal","minScale","centerOffset","PaneDimensions","forcedMinScale","maxScale","newScale","centerCoordinates","fitScale","PaneAxis","dimension","movable","dragMove","resistance","translateAxis","Pane","elastic","userEvents","gesturestart","gesture","press","gesturechange","coordinates","previousGesture","previousCenter","center","scaleDelta","distance","offsetX","offsetY","scaleWith","TRANSFORM_STYLE","Movable","webkitTransformOrigin","_saveCoordinates","by","scaleTo","moveAxis","moveTo","newCoordinates","destroyDroppable","groupName","droppables","DropTarget","draggable","dropTarget","_over","_out","_drop","dropped","destroyGroup","_cache","DropTargetArea","Draggable","_activated","global","allowSelection","threshold","_start","hold","_hold","_drag","_end","_cancel","_afterEndHandler","_afterEnd","_captureEscape","cursorOffset","holdToDrag","autoScroll","cancelHold","_updateHint","boundaries","hintOffset","hint","_shouldIgnoreTarget","ignoreSelector","initialTouch","currentTargetOffset","zIndex","scopeTarget","scopeFrom","cursorElement","_elementUnderCursor","_cursorElement","_scrollableParent","findScrollableParent","_lastEvent","_processMovement","velocity","autoScrollVelocity","scrollableViewPort","_scrollCompenstation","_scrollVelocity","clearInterval","_scrollInterval","setInterval","_withDropTarget","targetElement","_autoScroll","compensation","yIsScrollable","xIsScrollable","isRootNode","scrollableRoot","yDelta","yInBounds","xDelta","xInBounds","initialTarget","targets","areas","theTarget","theFilter","targetLen","areaLen","checkTarget","mouseX","mouseY","rect","AUTO_SCROLL_AREA","utils","HOVEREVENTS","optionLabel","_focusInputHandler","_focusInput","_optionLabel","_inputTemplate","_word","_span","_mobile","_filterHeader","_attachFocusHandlers","hasOptionLabel","_textAccessor","_optionLabelText","valueTemplate","optionLabelTemplate","_focusFilter","_resizeFilterInput","originalPrevent","_prevent","isInputActive","_optionLabelDataItem","_request","_valueSetter","_assignInstance","optionLabelValue","filtered","_filterPaste","_focusinHandler","_focusoutHandler","isIFrame","self","_wrapperMousedown","_wrapperClick","dropDownWrapper","_keypress","isPopupVisible","_getElementDataItem","_matchText","_shuffleData","splitIndex","optionDataItem","_selectNext","oldFocusedItem","isInLoop","character","sameCharsOnly","normalizeIndex","charCode","_popupOpen","compareElement","touchEnabled","MSPointers","jQueryCandidate","_resetOptionLabel","focusLast","_nextItem","focusNext","_prevItem","focusPrev","focusedItem","mapValueTo","additionalClass","_optionID","prepend","span","DOMelement","accesskey","unselectable","optionLabelText","getElements","assign","HIDDENCLASS","WIDTH","DOT","quotRegExp","_selection","_getSelection","_initial","_values","_noInitialValue","_isNullorUndefined","_valueMethodCalled","_setTreeViewOptions","_initWrapper","tabIndex","_noData","_treeview","_checkAll","treeviewOptions","dataImageUrlField","dataSpriteCssClassField","dataUrlField","treeview","rootDataSource","MultipleSelection","SingleSelection","setDataSource","_isDataSourceSet","_tags","_multipleTags","autoClose","noDataTemplate","checkAllTemplate","tagMode","valuePrimitive","headerTemplate","_getFilter","_filtering","noData","tagList","_setValue","_selectItemByText","_angularElement","_adjustListWidth","computedWidth","paddingLeft","paddingRight","borderLeftWidth","borderRightWidth","fontFamily","minWidth","whiteSpace","_openHandler","_closeHandler","_currentValue","indexOfValue","isMultiple","_level","_tagUid","itemToAdd","itemToRemove","_treeViewCheckAllCheck","_preventChangeTrigger","_updateSelectedOptions","selectedItems","dataValue","dataText","_clearClick","_clearTextAndValue","_clearInput","valueField","getterFunction","levels","_accessorInput","clearTitle","isReadOnly","valueDoesNotEqualPlaceHolder","_deselectItem","rootItem","subItems","_checkLoadedItems","rootItems","_valueComparer","_checkLoadedItem","_getAllChecked","_checkCheckAll","_uncheckCheckAll","checkAllCheckbox","_allItemsAreChecked","_allItemsAreUnchecked","_disableCheckChildren","_filterChange","_clickCheckAll","_changeCheckAll","_keydownCheckAll","_disabledCheckedItems","_disabledUnCheckedItems","isChecked","_updateCheckAll","_toggleCheckAllItems","_dfs","_traverceChildren","_uncheckItemByUid","_uncheckItemEqualsUid","_itemEqualsText","_selectItemByValue","_itemEqualsValue","_checkItemByValue","_checkItemEqualsValue","itemText","itemValue","_allCheckedItems","_getAllCheckedItems","_checkAllCheckItem","_removeTagClick","isFilterInputActive","isWrapperActive","tagItem","_focusPrevTag","_focusNextTag","_focusFirstTag","_focusLastTag","_removeTag","activedescendant","_clearDisabledTag","firstTag","lastTag","parentElement","selectedNode","tempItem","_tagTemplate","_tagList","valueToSelect","tagTemplate","singleTag","deleteTag","_innerWrapper","viewModel","multipleTag","tags","oldValues","_removeValues","removedValues","_getNewValues","tagsArray","_findTag","tempItemValue","NS","NOCLICKCLASS","FloatingLabel","scaleProperties","scalex","scaley","scale3d","translateProperties","translatex","translatey","translate3d","hasZoom","matrix3dRegExp","cssParamsRegExp","translateXRegExp","oldEffectsRegExp","singleEffectRegExp","unitRegExp","transformProps","transform2d","transform2units","skew","cssPrefix","PX","AUTO","HEIGHT","HIDDEN","ORIGIN","ABORT_ID","OVERFLOW","TRANSLATE","POSITION","COMPLETE_CALLBACK","TRANSITION","TRANSFORM","BACKFACE","PERSPECTIVE","DEFAULT_PERSPECTIVE","TRANSFORM_PERSPECTIVE","transition","stopQueue","animationProperty","transformValue","step","elem","now","curProxy","cur","parseInteger","parseCSS","strip3DTransforms","normalizeCSS","lowerKey","isTransformed","transformation","cssValues","transform","computed","atan2","exclusive","ease","mirror","redirectedEffect","effect","$1","$2","direction","effectBody","timeoutID","oldKeys","stopTransitionCalled","stopTransition","speeds","merge","acc","propertyName","uniqueSort","unique","taskKeys","retainPosition","EffectSet","restore","run","jdx","childrenLength","setReverse","addRestoreProperties","prepare","effectName","reset","restoreCallback","effectClass","effectSet","parsedEffects","capitalize","useTransition","single","isFixed","originalPosition","dX","dY","marginLeft","marginTop","Effect","_direction","_additionalEffects","_reverse","play","additional","_duration","compositeRun","_complete","shouldHide","createEffect","definition","opt1","opt2","opt3","theDirection","FOUR_DIRECTIONS","IN_OUT","createToggleEffect","defaultStart","defaultEnd","startValue","_startValue","endValue","_endValue","_shouldHide","startDataValue","tmp","previous","previousDivisor","slideIn","margin","origin","setLength","oldLength","realLength","TRANSFER_START_STATE","outerBox","box","innerBox","currentScale","fillScale","transformOrigin","CLIPS","ROTATIONS","clipInHalf","_container","rotation","_clipInHalf","clip","face","_face","temporary","back","reverseDirection","faceClone","backClone","staticPage","turningPage","transformStyle","RESTORE_OVERFLOW","_before","_after","transitionClass","_previous","_transitionClass","beforeTransition","afterTransition","_both","_element","_containerClass","containerClass","completeProxy","isAbsolute","both","Animation","_tickProxy","_tick","_started","tick","onEnd","onCancel","Transition","timePassed","initial","_easeProxy","easeOutExpo","easeOutBack","inner","outer","percentageUnitsRegex","LOADING","GROUPHEADER","ITEMSELECTOR","CASCADE","isIE","alternativeNames","_listMousedown","columns","_columnsHeader","_initValue","columnsHeader","colGroup","row","currentColumn","columnsHeaderTemplate","currentWidth","currentWidthInt","widthStyle","currentOptions","changeEventOption","listBoundHandler","activate","_activateItem","deactivate","_deactivateItem","dataBinding","dataBound","$angular","selectedItemChange","VirtualList","StaticList","_setListValue","isMultiColumnFiltering","filterFields","resetPageSettings","removed","removeFiltersForField","_clearFilterExpressions","newExpression","_pushFilterExpression","isValidFilterExpr","_cascading","setDSFilter","dataSourceState","filtersToRemove","widgetOptions","fromFilter","_buildExpression","_unbindDataSource","_ariaLabel","focusedElm","inputElm","inputId","labelElm","ariaLabel","ariaLabelledBy","labelId","_generateLabelId","optionValue","typing","_offsetHeight","prevAll","_height","popups","noFocusedItem","_calculateGroupPadding","li","groupHeader","padding","_calculatePopupHeight","_calculateColumnsHeaderPadding","_refreshScroll","enableYScroll","overflowX","overflowY","not","preventFocus","_cascadedValue","userTriggered","_triggerChange","_requestStartHandler","_requestEndHandler","_errorHandler","valueMapper","siblings","_parentWidget","_cascadeSelect","_cascadeValue","_accessorSelect","getSelectedOption","_showBusy","_requestEnd","_getNormalizedDataItem","isIndex","_getNormalizedSelectCandidate","normalizedCandidate","pressed","moveIndex","selectCandidate","isVirtual","activeFilter","focusout","scrollWith","hasItems","htmlElement","_cascadeHandlerProxy","_cascadeHandler","_cascadeFilterRequests","_selectedValue","_toggleCascadeOnFocus","valueBeforeCascade","_cascadeChange","filterValue","currentHandler","STATIC_LIST_NS","_touchHandlers","before","_selectedIndices","_dataItems","_getter","_onScroll","_scrollId","_renderHeader","_refreshHandler","_fixedHeader","startY","endY","tapPosition","pageY","_touchTriggered","_triggerClick","_render","scroll","itemOffsetTop","offsetTop","itemOffsetHeight","contentScrollTop","contentOffsetHeight","bottomDistance","_getValues","_valueGetter","hasCandidate","skipUpdate","_skipUpdate","indices","singleSelection","selectedIndices","uiSelectedIndices","added","_deselectFiltered","removeAt","_valueDeferred","_valueIndices","_valueExpr","normalized","_valueType","_dataItemPosition","valueExpr","templates","templateText","_normalizeIndices","newIndices","_firstVisibleItem","itemHeight","forward","previousSibling","isGrouped","visibleItem","_renderItem","notFirstItem","hasColumns","isLastGroupedItem","_renderColumns","dataContext","_selected","_lastDSFilter","isItemChange","itemsToMatch","selectedLength","changed","unchanged","mapChangedItems","_bound","RELEASECLASS","REFRESHCLASS","SCROLL","ZoomSnapBack","tapCapture","DragInertia","freeze","_moveTo","paneAxis","_snapBack","velocityMultiplier","friction","snapBack","AnimatedScroller","_updateCoordinates","setCoordinates","setCallback","ScrollBar","elementSize","scrollMovable","alwaysVisible","paneSize","sizeRatio","visibility","_native","scrollElement","fixedContainer","wrapInner","avoidScrolling","touchAction","fastTap","preventDragEvent","captureUpIfMoved","multiTouch","supportDoubleTap","velocityX","velocityY","horizontalSwipe","verticalSwipe","pane","zoomSnapBack","animatedScroller","scrollTo","mousewheelScrolling","pulled","_initAxis","_wheelEnd","_wheel","_wheelY","pullToRefresh","_initPullToRefresh","_wheelScroll","_wheelTimeout","pullOffset","visibleScrollHints","pullTemplate","releaseTemplate","refreshTemplate","contentResized","_scale","zoomOut","animatedScrollTo","pullHandled","refreshHint","hintContainer","yinertia","xinertia","_paneChange","_dragEnd","scrollBar","A","LI","ACCEPT","FILTER","REBIND","DESELECT","FOCUSEDCLASS","SELECTEDCLASS","HOVERCLASS","_optionsMap","_customOptions","_textContainer","_loader","_tagID","_initialOpen","_ariaSetLive","_ariaSetSize","maxSelectedItems","itemTemplate","persistTagList","currentTag","_currentTag","_selectedItemChange","_initialValues","optionsMap","valueGetter","tagTextTemplate","notInput","closeButton","cancelable","tag","customIndex","listViewChildren","_close","classList","_updateTagListHTML","_tagListClick","_clearSingleTagValue","_retrieveData","_activeItem","_touchScroller","inputValue","clearFilters","_normalizeValues","_setOption","_isBound","_progressHandler","_getActiveItem","_getSelectedIndices","_selectedIndexes","activeItemIdx","_multipleSelection","_selectRange","activeIndex","currentIndex","_loading","_showBusyHandler","skipCaret","caretPos","textWidth","wrapperWidth","_buildSelectedItems","_selectedItemIndex","_allowSelection","_angularTagItems","updatePersistTagList","_removedAddedIndexes","removedItem","addedItem","_maxTotal","maxTotal","currentTotal","resolved","isSelected","indicesToSelect","selectIndices","defaultTemplate","hasDataSource","computedStyles","SPIN","STATE_INVALID","INTEGER_REGEXP","NumericTextBox","inputType","isStep","_focusout","_arrows","_validation","_toggleText","factor","_label","restrictDecimals","spinners","upArrowText","downArrowText","_upArrowEventHandler","_downArrowEventHandler","_inputLabel","_spin","_upArrow","_downArrow","_keyup","_inputHandler","floatingLabel","_arrowsWrap","_adjust","_focusin","arrows","_spinning","buttonHtml","release","_validationIcon","_focusing","groupRegExp","extractRegExp","caretPosition","_culture","_removeInvalidState","CLASSNAME","_numPadDot","_cachedCaret","_step","minInvalid","_numericRegex","_blinkInvalidState","_addInvalidState","_invalidStateTimeout","separator","fractionRule","_separator","_floatRegExp","originalValue","truncate","isNotNull","floating","labelText","_floatingLabelContainer","DOMElement","DEACTIVATE","ACTIVATE","CENTER","TOP","BOTTOM","ABSOLUTE","BODY","LOCATION","VISIBLE","EFFECTS","ACTIVE","ACTIVEBORDER","ACTIVEBORDERREGEXP","ACTIVECHILDREN","DOCUMENT_ELEMENT","WINDOW","parentPopup","collisions","collision","downEvent","scrollArea","_animationClose","_mousedownProxy","_mousedown","_resizeProxy","toggleTarget","toggleEvent","viewport","copyAnchorStyles","modal","adjustSize","_hideDirClass","_closing","_toggleResize","fixed","flipped","_position","_openAnimation","_showDirClass","_location","dirClass","skipEffects","openEffects","closeEffects","ev","_resizeTimeout","_scrollableParents","_fit","viewPortSize","output","_flip","anchorSize","boxSize","siblingContainer","parentZIndex","viewportOffset","viewportWidth","viewportHeight","isWindow","origins","positions","_align","pos","offsetParent","offsets","flipPos","elementHeight","wrapperHeight","appendToOffset","verticalOrigin","horizontalOrigin","verticalPosition","horizontalPosition","anchorOffset","anchorWidth","anchorHeight","tabKeyTrapNS","TabKeyTrap","trap","_keepInTrap","removeTrap","shouldTrap","_focusableElements","sortedElements","_sortFocusableElements","_nextFocusable","attrName","_haveSelectionRange","contentWindow","elementType","ARIASELECTED","SELECTABLE","UNSELECT","UNSELECTING","supportEventDelegation","_marquee","tap","_tap","_isElement","whichCode","buttonCode","button","_firstSelectee","_notify","_downTarget","currentElement","useAllItems","_items","startLocation","initialDelta","_invalidateSelectables","toSelect","selectElement","preventNotify","resetTouchEvents","continuousItems","elementPosition","asLowerString","VISIBILITY","KSTATEHOVER","HierarchicalDragAndDrop","hovered","dragstart","drag","drop","dragend","_draggable","_hint","dragcancel","hintText","_removeTouchHover","_hintStatus","newStatus","statusElement","itemSelector","reorderable","dropHint","hoveredItem","itemTop","itemContent","insertOnTop","insertOnBottom","addChild","itemData","allowedContainers","itemFromTarget","_lastHover","dropHintContainer","pageX","setStatus","dropPrevented","dropPositionFrom","setValid","newValid","nodeContents","nodeIcon","spriteRe","TEMP_NS","CHECK","DATABOUND","KTREEVIEW","NODE","ARIACHECKED","ARIADISABLED","ARIAEXPANDED","bindings","spriteCssClass","imageUrl","isDomElement","contentChild","templateNoWith","insertAction","indexOffset","nodeData","_dataSourceMove","referenceItem","referenceNodeIndex","_insert","updateNodeHtml","toggleButton","innerWrapper","moveContents","inferred","_dataSourceUids","_animation","_attachEvents","_dragging","_syncHtmlAndDataSource","_ariaId","clickableItems","_toggleButtonClick","_checkboxLabelClick","_retryRequest","itemCheckbox","uidAttr","expandedAttr","checkboxesEnabled","animationOptions","hasCollapseAnimation","dragAndDrop","dragging","_hintText","sourceNode","statusClass","setStatusClass","navigationTarget","_tempPreventNavigation","destinationNode","dropPosition","triggerDragEnd","dragClue","fieldAccessor","_fieldAccessor","_checkboxes","setAttributes","wrapperCssClass","firstLevel","groupLength","textClass","isLink","toggleButtonClass","groupAttributes","groupCssClass","itemElement","retry","_bindDataSource","_error","silentRead","recursiveRead","requestFailed","fieldBindings","_setChecked","datasource","nodes","_setIndeterminate","all","indeterminate","subnodes","_bubbleIndeterminate","skipDownward","_preventChange","_clickTarget","_focusable","clickTarget","scrollContainer","containers","skipSelf","wrapperRe","itemRe","nextParent","matchToFocus","focusedNode","_match","_matchTimer","_matchNextByText","contents","_getSelectedNode","groupElement","_nodes","groupData","_updateNodeClasses","textWrap","_processNodes","_dataItem","_insertNode","insertCallback","collapsed","childrenData","updatedGroupLength","nodeHtml","_renderGroup","nodeWrapper","isCollapsed","setCheckedState","viewItems","groupHtml","retryHtml","showProgress","loadingText","_objectOrSelf","referenceDataItem","destTreeview","destDataSource","loadPromise","_toObservableData","loadModel","inserted","keepData","prevSibling","detach","findByText","expandPath","nodeIds","nodeElement","proceed","_parentIds","expandTo","r","renderItems","OS","invalidZeroEvents","DEFAULT_MIN_HOLD","DEFAULT_THRESHOLD","PRESS","START","MOVE","CANCEL","TAP","DOUBLETAP","RELEASE","GESTURECHANGE","GESTUREEND","GESTURETAP","THRESHOLD","ENABLE_GLOBAL_SURFACE","touchDelta","touch1","touch2","x1","y1","x2","y2","dx","dy","sqrt","getTouches","api","identifier","pointerId","TouchAxis","_updateLocationData","timeStamp","timeDelta","Touch","touchInfo","useClickAsTap","pressEvent","_clicks","_moved","_finished","_holdTimeout","minHold","_clickTimeout","preventMove","_shouldNotMove","_withinIgnoreThreshold","dispose","endTime","activeTouches","isMoved","startTime","withEachUpEvent","downEvents","_maxTouches","eventNS","surface","ownerDocument","defaultAction","surfaceElement","preventIfMovingProxy","preventIfMoving","_isMoved","removeEventListener","_disposeAll","_isMultiTouch","_apiCall","_maxTouchesReached","_eachTouch","methodName","matchingTouch","dict","defaultThreshold","INVALIDMSG","invalidMsgRegExp","INVALIDINPUT","VALIDINPUT","VALIDATIONSUMMARY","MESSAGEBOX","ARIAINVALID","emailRegExp","urlRegExp","INPUTSELECTOR","CHECKBOXSELECTOR","NUMBERINPUTSELECTOR","NAME","FORM","NOVALIDATE","VALIDATE","VALIDATE_INPUT","patternMatcher","hasAttribute","parseHtml","parseHTML","searchForMessageContainer","Validator","resolvers","resolveRules","validateAttributeSelector","_errorTemplate","errorTemplate","_summaryTemplate","validationSummary","_inputSelector","_checkboxSelector","_errors","_isValidated","_validateOnInit","validate","email","dateCompare","raise","validateOnBlur","_allowSubmit","_checkElement","validateInput","inputs","isValid","invalid","showValidationSummary","_checkValidity","lbl","_findMessageContainer","messageText","_extractMessage","messageLabel","wasValid","lblId","_decorateMessageContainer","replaceWith","nextElement","inputWrap","inputLabel","errorId","_associateMessageContainer","hideMessages","_disassociateMessageContainers","hideValidationSummary","locators","getElementsByTagName","ruleKey","nonDefaultMessage","customMessage","_getInputNames","_errorsByName","inputNames","_renderSummary","prevElement","_summaryClick","errorsList","summary","LIST","VIRTUALITEM","LISTBOUND","ITEMCHANGE","VIRTUAL_LIST_NS","lastFrom","isPrimitive","placeholderTemplate","renderColumns","webkitTransform","isActivePromise","lineHeight","mockList","_fetching","_rangesList","_promisesList","_renderItems","_triggerListBound","listScreens","oppositeBuffer","_selectProxy","_clean","_deferValueSet","mute","_selectingValue","_highlightSelectedItems","_getElementByDataItem","_mute","_createList","_forcePrefetch","_prefetchByValue","_checkValuesOrder","dataView","_dataView","forSelection","mapValueToIndex","mapValueToDataItem","_getIndecies","deferredRange","defs","low","high","pages","existingRange","isEmptyList","_activeDeferred","_getSkip","_findDataItem","_getRange","triggerEvent","_getElementByIndex","_focusedIndex","_getElementLocation","_screenHeight","heightContainer","initialIndices","isAlreadySelected","prefetchStarted","_selectDeferred","_deselectCurrentValues","_listCreated","_lastScrollTop","hasData","setScreenHeight","yPosition","yDownPostion","screenEnd","_generateItems","minHeight","_saveInitialRanges","reorder","_buildValueGetter","_setHeight","getList","_listItems","_whenChanged","_reorderList","currentHeight","padHeight","lastRequestedRange","lastRangeStart","rangeStart","flatGroup","_getterDeferred","firstItemIndex","_indexConstraint","currentVisibleGroup","firstVisibleDataItemIndex","firstVisibleDataItem","firstVisibleGroup","fixedGroupText","_itemMapper","listType","_currentGroup","_range","_getDataItemsCollection","lastScrollTop","_listIndex","theValidator","downThreshold","upThreshold","listValidator","theNew","currentOffset","arr1","arr2","list2","range2","reshift","_bufferSizes","opposite","buffers","elementIndex","selectedIndexes","removedindexesCounter","_deselectSingleItem","oldSkip","_clickHandler","firstItem","inlineForm","__webpack_module_cache__","__webpack_require__","cachedModule","__webpack_modules__","O","chunkIds","priority","notFulfilled","Infinity","fulfilled","n","__esModule","enumerable","globalThis","nmd","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""}