{"version":3,"file":"static/js/vendor.legacy.ui.lib~34a28ee8.82c6b428.js","mappings":"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","sources":["../../../../node_modules/.pnpm/@bingads-webui+kendo@2014.1.318-alpha.4/node_modules/@bingads-webui/kendo/kendo.binder.js","../../../../node_modules/.pnpm/@bingads-webui+kendo@2014.1.318-alpha.4/node_modules/@bingads-webui/kendo/kendo.calendar.js","../../../../node_modules/.pnpm/@bingads-webui+kendo@2014.1.318-alpha.4/node_modules/@bingads-webui/kendo/kendo.core.js","../../../../node_modules/.pnpm/@bingads-webui+kendo@2014.1.318-alpha.4/node_modules/@bingads-webui/kendo/kendo.data.js","../../../../node_modules/.pnpm/@bingads-webui+kendo@2014.1.318-alpha.4/node_modules/@bingads-webui/kendo/kendo.data.odata.js","../../../../node_modules/.pnpm/@bingads-webui+kendo@2014.1.318-alpha.4/node_modules/@bingads-webui/kendo/kendo.data.xml.js","../../../../node_modules/.pnpm/@bingads-webui+kendo@2014.1.318-alpha.4/node_modules/@bingads-webui/kendo/kendo.datepicker.js","../../../../node_modules/.pnpm/@bingads-webui+kendo@2014.1.318-alpha.4/node_modules/@bingads-webui/kendo/kendo.draganddrop.js","../../../../node_modules/.pnpm/@bingads-webui+kendo@2014.1.318-alpha.4/node_modules/@bingads-webui/kendo/kendo.editable.js","../../../../node_modules/.pnpm/@bingads-webui+kendo@2014.1.318-alpha.4/node_modules/@bingads-webui/kendo/kendo.fx.js","../../../../node_modules/.pnpm/@bingads-webui+kendo@2014.1.318-alpha.4/node_modules/@bingads-webui/kendo/kendo.list.js","../../../../node_modules/.pnpm/@bingads-webui+kendo@2014.1.318-alpha.4/node_modules/@bingads-webui/kendo/kendo.listview.js","../../../../node_modules/.pnpm/@bingads-webui+kendo@2014.1.318-alpha.4/node_modules/@bingads-webui/kendo/kendo.mobile.scroller.js","../../../../node_modules/.pnpm/@bingads-webui+kendo@2014.1.318-alpha.4/node_modules/@bingads-webui/kendo/kendo.multiselect.js","../../../../node_modules/.pnpm/@bingads-webui+kendo@2014.1.318-alpha.4/node_modules/@bingads-webui/kendo/kendo.numerictextbox.js","../../../../node_modules/.pnpm/@bingads-webui+kendo@2014.1.318-alpha.4/node_modules/@bingads-webui/kendo/kendo.popup.js","../../../../node_modules/.pnpm/@bingads-webui+kendo@2014.1.318-alpha.4/node_modules/@bingads-webui/kendo/kendo.selectable.js","../../../../node_modules/.pnpm/@bingads-webui+kendo@2014.1.318-alpha.4/node_modules/@bingads-webui/kendo/kendo.sortable.js","../../../../node_modules/.pnpm/@bingads-webui+kendo@2014.1.318-alpha.4/node_modules/@bingads-webui/kendo/kendo.userevents.js","../../../../node_modules/.pnpm/@bingads-webui+kendo@2014.1.318-alpha.4/node_modules/@bingads-webui/kendo/kendo.validator.js","../../../../node_modules/.pnpm/@bingads-webui+kendo@2014.1.318-alpha.4/node_modules/@bingads-webui/kendo/kendo.window.js"],"sourcesContent":["/*\r\n* Kendo UI Complete v2014.1.318 (http://kendoui.com)\r\n* Copyright 2014 Telerik AD. All rights reserved.\r\n*\r\n* Kendo UI Complete commercial licenses may be obtained at\r\n* http://www.telerik.com/purchase/license-agreement/kendo-ui-complete\r\n* If you do not own a commercial license, this file shall be governed by the trial license terms.\r\n*/\r\n(function(f, define){\r\n define([ \"./kendo.core\", \"./kendo.data\" ], f);\r\n})(function(){\r\n\r\n/*jshint eqnull: true */\r\n(function ($, undefined) {\r\n var kendo = window.kendo,\r\n Observable = kendo.Observable,\r\n ObservableObject = kendo.data.ObservableObject,\r\n ObservableArray = kendo.data.ObservableArray,\r\n toString = {}.toString,\r\n binders = {},\r\n splice = Array.prototype.splice,\r\n Class = kendo.Class,\r\n innerText,\r\n proxy = $.proxy,\r\n VALUE = \"value\",\r\n SOURCE = \"source\",\r\n EVENTS = \"events\",\r\n CHECKED = \"checked\",\r\n deleteExpando = true,\r\n CHANGE = \"change\";\r\n\r\n (function() {\r\n var a = document.createElement(\"a\");\r\n\r\n if (a.innerText !== undefined) {\r\n innerText = \"innerText\";\r\n } else if (a.textContent !== undefined) {\r\n innerText = \"textContent\";\r\n }\r\n\r\n try {\r\n delete a.test;\r\n } catch(e) {\r\n deleteExpando = false;\r\n }\r\n })();\r\n\r\n var Binding = Observable.extend( {\r\n init: function(parents, path) {\r\n var that = this;\r\n\r\n Observable.fn.init.call(that);\r\n\r\n that.source = parents[0];\r\n that.parents = parents;\r\n that.path = path;\r\n that.dependencies = {};\r\n that.dependencies[path] = true;\r\n that.observable = that.source instanceof Observable;\r\n\r\n that._access = function(e) {\r\n that.dependencies[e.field] = true;\r\n };\r\n\r\n if (that.observable) {\r\n that._change = function(e) {\r\n that.change(e);\r\n };\r\n\r\n that.source.bind(CHANGE, that._change);\r\n }\r\n },\r\n\r\n _parents: function() {\r\n var parents = this.parents;\r\n var value = this.get();\r\n\r\n if (value && typeof value.parent == \"function\") {\r\n var parent = value.parent();\r\n\r\n if ($.inArray(parent, parents) < 0) {\r\n parents = [parent].concat(parents);\r\n }\r\n }\r\n\r\n return parents;\r\n },\r\n\r\n change: function(e) {\r\n var dependency,\r\n ch,\r\n field = e.field,\r\n that = this;\r\n\r\n if (that.path === \"this\") {\r\n that.trigger(CHANGE, e);\r\n } else {\r\n for (dependency in that.dependencies) {\r\n if (dependency.indexOf(field) === 0) {\r\n ch = dependency.charAt(field.length);\r\n\r\n if (!ch || ch === \".\" || ch === \"[\") {\r\n that.trigger(CHANGE, e);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n },\r\n\r\n start: function(source) {\r\n source.bind(\"get\", this._access);\r\n },\r\n\r\n stop: function(source) {\r\n source.unbind(\"get\", this._access);\r\n },\r\n\r\n get: function() {\r\n\r\n var that = this,\r\n source = that.source,\r\n index = 0,\r\n path = that.path,\r\n result = source;\r\n\r\n if (!that.observable) {\r\n return result;\r\n }\r\n\r\n that.start(that.source);\r\n\r\n result = source.get(path);\r\n\r\n // Traverse the observable hierarchy if the binding is not resolved at the current level.\r\n while (result === undefined && source) {\r\n\r\n source = that.parents[++index];\r\n\r\n if (source instanceof ObservableObject) {\r\n result = source.get(path);\r\n }\r\n }\r\n\r\n // second pass try to get the parent from the object hierarchy\r\n if (result === undefined) {\r\n source = that.source; //get the initial source\r\n\r\n while (result === undefined && source) {\r\n source = source.parent();\r\n\r\n if (source instanceof ObservableObject) {\r\n result = source.get(path);\r\n }\r\n }\r\n }\r\n\r\n // If the result is a function - invoke it\r\n if (typeof result === \"function\") {\r\n index = path.lastIndexOf(\".\");\r\n\r\n // If the function is a member of a nested observable object make that nested observable the context (this) of the function\r\n if (index > 0) {\r\n source = source.get(path.substring(0, index));\r\n }\r\n\r\n // Invoke the function\r\n that.start(source);\r\n\r\n if (source !== that.source) {\r\n result = result.call(source, that.source);\r\n } else {\r\n result = result.call(source);\r\n }\r\n\r\n that.stop(source);\r\n }\r\n\r\n // If the binding is resolved by a parent object\r\n if (source && source !== that.source) {\r\n\r\n that.currentSource = source; // save parent object\r\n\r\n // Listen for changes in the parent object\r\n source.unbind(CHANGE, that._change)\r\n .bind(CHANGE, that._change);\r\n }\r\n\r\n that.stop(that.source);\r\n\r\n return result;\r\n },\r\n\r\n set: function(value) {\r\n var source = this.currentSource || this.source;\r\n\r\n var field = kendo.getter(this.path)(source);\r\n\r\n if (typeof field === \"function\") {\r\n if (source !== this.source) {\r\n field.call(source, this.source, value);\r\n } else {\r\n field.call(source, value);\r\n }\r\n } else {\r\n source.set(this.path, value);\r\n }\r\n },\r\n\r\n destroy: function() {\r\n if (this.observable) {\r\n this.source.unbind(CHANGE, this._change);\r\n }\r\n }\r\n });\r\n\r\n var EventBinding = Binding.extend( {\r\n get: function() {\r\n var source = this.source,\r\n path = this.path,\r\n index = 0,\r\n handler;\r\n\r\n handler = source.get(path);\r\n\r\n while (!handler && source) {\r\n source = this.parents[++index];\r\n\r\n if (source instanceof ObservableObject) {\r\n handler = source.get(path);\r\n }\r\n }\r\n\r\n return proxy(handler, source);\r\n }\r\n });\r\n\r\n var TemplateBinding = Binding.extend( {\r\n init: function(source, path, template) {\r\n var that = this;\r\n\r\n Binding.fn.init.call(that, source, path);\r\n\r\n that.template = template;\r\n },\r\n\r\n render: function(value) {\r\n var html;\r\n\r\n this.start(this.source);\r\n\r\n html = kendo.render(this.template, value);\r\n\r\n this.stop(this.source);\r\n\r\n return html;\r\n }\r\n });\r\n\r\n var Binder = Class.extend({\r\n init: function(element, bindings, options) {\r\n this.element = element;\r\n this.bindings = bindings;\r\n this.options = options;\r\n },\r\n\r\n bind: function(binding, attribute) {\r\n var that = this;\r\n\r\n binding = attribute ? binding[attribute] : binding;\r\n\r\n binding.bind(CHANGE, function(e) {\r\n that.refresh(attribute || e);\r\n });\r\n\r\n that.refresh(attribute);\r\n },\r\n\r\n destroy: function() {\r\n }\r\n });\r\n\r\n binders.attr = Binder.extend({\r\n refresh: function(key) {\r\n this.element.setAttribute(key, this.bindings.attr[key].get());\r\n }\r\n });\r\n\r\n binders.style = Binder.extend({\r\n refresh: function(key) {\r\n this.element.style[key] = this.bindings.style[key].get() || \"\";\r\n }\r\n });\r\n\r\n binders.enabled = Binder.extend({\r\n refresh: function() {\r\n if (this.bindings.enabled.get()) {\r\n this.element.removeAttribute(\"disabled\");\r\n } else {\r\n this.element.setAttribute(\"disabled\", \"disabled\");\r\n }\r\n }\r\n });\r\n\r\n binders.readonly = Binder.extend({\r\n refresh: function() {\r\n if (this.bindings.readonly.get()) {\r\n this.element.setAttribute(\"readonly\", \"readonly\");\r\n } else {\r\n this.element.removeAttribute(\"readonly\");\r\n }\r\n }\r\n });\r\n\r\n binders.disabled = Binder.extend({\r\n refresh: function() {\r\n if (this.bindings.disabled.get()) {\r\n this.element.setAttribute(\"disabled\", \"disabled\");\r\n } else {\r\n this.element.removeAttribute(\"disabled\");\r\n }\r\n }\r\n });\r\n\r\n binders.events = Binder.extend({\r\n init: function(element, bindings, options) {\r\n Binder.fn.init.call(this, element, bindings, options);\r\n this.handlers = {};\r\n },\r\n\r\n refresh: function(key) {\r\n var element = $(this.element),\r\n binding = this.bindings.events[key],\r\n handler = this.handlers[key];\r\n\r\n if (handler) {\r\n element.off(key, handler);\r\n }\r\n\r\n handler = this.handlers[key] = binding.get();\r\n\r\n element.on(key, binding.source, handler);\r\n },\r\n\r\n destroy: function() {\r\n var element = $(this.element),\r\n handler;\r\n\r\n for (handler in this.handlers) {\r\n element.off(handler, this.handlers[handler]);\r\n }\r\n }\r\n });\r\n\r\n binders.text = Binder.extend({\r\n refresh: function() {\r\n var text = this.bindings.text.get();\r\n\r\n if (text == null) {\r\n text = \"\";\r\n }\r\n\r\n this.element[innerText] = text;\r\n }\r\n });\r\n\r\n binders.visible = Binder.extend({\r\n refresh: function() {\r\n if (this.bindings.visible.get()) {\r\n this.element.style.display = \"\";\r\n } else {\r\n this.element.style.display = \"none\";\r\n }\r\n }\r\n });\r\n\r\n binders.invisible = Binder.extend({\r\n refresh: function() {\r\n if (!this.bindings.invisible.get()) {\r\n this.element.style.display = \"\";\r\n } else {\r\n this.element.style.display = \"none\";\r\n }\r\n }\r\n });\r\n\r\n binders.html = Binder.extend({\r\n refresh: function() {\r\n this.element.innerHTML = this.bindings.html.get();\r\n }\r\n });\r\n\r\n binders.value = Binder.extend({\r\n init: function(element, bindings, options) {\r\n Binder.fn.init.call(this, element, bindings, options);\r\n\r\n this._change = proxy(this.change, this);\r\n this.eventName = options.valueUpdate || CHANGE;\r\n\r\n $(this.element).on(this.eventName, this._change);\r\n\r\n this._initChange = false;\r\n },\r\n\r\n change: function() {\r\n this._initChange = this.eventName != CHANGE;\r\n\r\n var value = this.element.value;\r\n\r\n var type = this.element.type;\r\n\r\n if (type == \"date\") {\r\n value = kendo.parseDate(value, \"yyyy-MM-dd\");\r\n } else if (type == \"datetime-local\") {\r\n value = kendo.parseDate(value, [\"yyyy-MM-ddTHH:mm:ss\", \"yyyy-MM-ddTHH:mm\"] );\r\n } else if (type == \"number\") {\r\n value = kendo.parseFloat(value);\r\n }\r\n\r\n this.bindings[VALUE].set(value);\r\n\r\n this._initChange = false;\r\n },\r\n\r\n refresh: function() {\r\n if (!this._initChange) {\r\n var value = this.bindings[VALUE].get();\r\n\r\n if (value == null) {\r\n value = \"\";\r\n }\r\n\r\n var type = this.element.type;\r\n\r\n if (type == \"date\") {\r\n value = kendo.toString(value, \"yyyy-MM-dd\");\r\n } else if (type == \"datetime-local\") {\r\n value = kendo.toString(value, \"yyyy-MM-ddTHH:mm:ss\");\r\n }\r\n\r\n this.element.value = value;\r\n }\r\n\r\n this._initChange = false;\r\n },\r\n\r\n destroy: function() {\r\n $(this.element).off(this.eventName, this._change);\r\n }\r\n });\r\n\r\n binders.source = Binder.extend({\r\n init: function(element, bindings, options) {\r\n Binder.fn.init.call(this, element, bindings, options);\r\n\r\n var source = this.bindings.source.get();\r\n\r\n if (source instanceof kendo.data.DataSource && options.autoBind !== false) {\r\n source.fetch();\r\n }\r\n },\r\n\r\n refresh: function(e) {\r\n var that = this,\r\n source = that.bindings.source.get();\r\n\r\n if (source instanceof ObservableArray || source instanceof kendo.data.DataSource) {\r\n e = e || {};\r\n\r\n if (e.action == \"add\") {\r\n that.add(e.index, e.items);\r\n } else if (e.action == \"remove\") {\r\n that.remove(e.index, e.items);\r\n } else if (e.action != \"itemchange\") {\r\n that.render();\r\n }\r\n } else {\r\n that.render();\r\n }\r\n },\r\n\r\n container: function() {\r\n var element = this.element;\r\n\r\n if (element.nodeName.toLowerCase() == \"table\") {\r\n if (!element.tBodies[0]) {\r\n element.appendChild(document.createElement(\"tbody\"));\r\n }\r\n element = element.tBodies[0];\r\n }\r\n\r\n return element;\r\n },\r\n\r\n template: function() {\r\n var options = this.options,\r\n template = options.template,\r\n nodeName = this.container().nodeName.toLowerCase();\r\n\r\n if (!template) {\r\n if (nodeName == \"select\") {\r\n if (options.valueField || options.textField) {\r\n template = kendo.format('',\r\n options.valueField || options.textField, options.textField || options.valueField);\r\n } else {\r\n template = \"\";\r\n }\r\n } else if (nodeName == \"tbody\") {\r\n template = \"#:data#\";\r\n } else if (nodeName == \"ul\" || nodeName == \"ol\") {\r\n template = \"
  • #:data#
  • \";\r\n } else {\r\n template = \"#:data#\";\r\n }\r\n\r\n template = kendo.template(template);\r\n }\r\n\r\n return template;\r\n },\r\n\r\n add: function(index, items) {\r\n var element = this.container(),\r\n parents,\r\n idx,\r\n length,\r\n child,\r\n clone = element.cloneNode(false),\r\n reference = element.children[index];\r\n\r\n $(clone).html(kendo.render(this.template(), items));\r\n\r\n if (clone.children.length) {\r\n parents = this.bindings.source._parents();\r\n\r\n for (idx = 0, length = items.length; idx < length; idx++) {\r\n child = clone.children[0];\r\n element.insertBefore(child, reference || null);\r\n bindElement(child, items[idx], this.options.roles, [items[idx]].concat(parents));\r\n }\r\n }\r\n },\r\n\r\n remove: function(index, items) {\r\n var idx, element = this.container();\r\n\r\n for (idx = 0; idx < items.length; idx++) {\r\n var child = element.children[index];\r\n unbindElementTree(child);\r\n element.removeChild(child);\r\n }\r\n },\r\n\r\n render: function() {\r\n var source = this.bindings.source.get(),\r\n parents,\r\n idx,\r\n length,\r\n element = this.container(),\r\n template = this.template();\r\n\r\n if (source instanceof kendo.data.DataSource) {\r\n source = source.view();\r\n }\r\n\r\n if (!(source instanceof ObservableArray) && toString.call(source) !== \"[object Array]\") {\r\n source = [source];\r\n }\r\n\r\n if (this.bindings.template) {\r\n unbindElementChildren(element);\r\n\r\n $(element).html(this.bindings.template.render(source));\r\n\r\n if (element.children.length) {\r\n parents = this.bindings.source._parents();\r\n\r\n for (idx = 0, length = source.length; idx < length; idx++) {\r\n bindElement(element.children[idx], source[idx], this.options.roles, [source[idx]].concat(parents));\r\n }\r\n }\r\n }\r\n else {\r\n $(element).html(kendo.render(template, source));\r\n }\r\n }\r\n });\r\n\r\n binders.input = {\r\n checked: Binder.extend({\r\n init: function(element, bindings, options) {\r\n Binder.fn.init.call(this, element, bindings, options);\r\n this._change = proxy(this.change, this);\r\n\r\n $(this.element).change(this._change);\r\n },\r\n change: function() {\r\n var element = this.element;\r\n var value = this.value();\r\n\r\n if (element.type == \"radio\") {\r\n this.bindings[CHECKED].set(value);\r\n } else if (element.type == \"checkbox\") {\r\n var source = this.bindings[CHECKED].get();\r\n var index;\r\n\r\n if (source instanceof ObservableArray) {\r\n value = this.element.value;\r\n\r\n if (value !== \"on\" && value !== \"off\") {\r\n index = source.indexOf(value);\r\n if (index > -1) {\r\n source.splice(index, 1);\r\n } else {\r\n source.push(value);\r\n }\r\n }\r\n } else {\r\n this.bindings[CHECKED].set(value);\r\n }\r\n }\r\n },\r\n\r\n refresh: function() {\r\n var value = this.bindings[CHECKED].get(),\r\n source = value,\r\n element = this.element;\r\n\r\n if (element.type == \"checkbox\") {\r\n if (source instanceof ObservableArray) {\r\n value = this.element.value;\r\n if (source.indexOf(value) >= 0) {\r\n value = true;\r\n }\r\n }\r\n\r\n element.checked = value === true;\r\n } else if (element.type == \"radio\" && value != null) {\r\n if (element.value === value.toString()) {\r\n element.checked = true;\r\n }\r\n }\r\n },\r\n\r\n value: function() {\r\n var element = this.element,\r\n value = element.value;\r\n\r\n if (element.type == \"checkbox\") {\r\n value = element.checked;\r\n }\r\n\r\n return value;\r\n },\r\n destroy: function() {\r\n $(this.element).off(CHANGE, this._change);\r\n }\r\n })\r\n };\r\n\r\n binders.select = {\r\n value: Binder.extend({\r\n init: function(target, bindings, options) {\r\n Binder.fn.init.call(this, target, bindings, options);\r\n\r\n this._change = proxy(this.change, this);\r\n $(this.element).change(this._change);\r\n },\r\n\r\n change: function() {\r\n var values = [],\r\n element = this.element,\r\n source,\r\n field = this.options.valueField || this.options.textField,\r\n valuePrimitive = this.options.valuePrimitive,\r\n option,\r\n valueIndex,\r\n value,\r\n idx,\r\n length;\r\n\r\n for (idx = 0, length = element.options.length; idx < length; idx++) {\r\n option = element.options[idx];\r\n\r\n if (option.selected) {\r\n value = option.attributes.value;\r\n\r\n if (value && value.specified) {\r\n value = option.value;\r\n } else {\r\n value = option.text;\r\n }\r\n\r\n values.push(value);\r\n }\r\n }\r\n\r\n if (field) {\r\n source = this.bindings.source.get();\r\n for (valueIndex = 0; valueIndex < values.length; valueIndex++) {\r\n for (idx = 0, length = source.length; idx < length; idx++) {\r\n if (source[idx].get(field) == values[valueIndex]) {\r\n values[valueIndex] = source[idx];\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n value = this.bindings[VALUE].get();\r\n if (value instanceof ObservableArray) {\r\n value.splice.apply(value, [0, value.length].concat(values));\r\n } else if (!valuePrimitive && (value instanceof ObservableObject || !field)) {\r\n this.bindings[VALUE].set(values[0]);\r\n } else {\r\n this.bindings[VALUE].set(values[0].get(field));\r\n }\r\n },\r\n refresh: function() {\r\n var optionIndex,\r\n element = this.element,\r\n options = element.options,\r\n value = this.bindings[VALUE].get(),\r\n values = value,\r\n field = this.options.valueField || this.options.textField,\r\n found = false,\r\n optionValue;\r\n\r\n if (!(values instanceof ObservableArray)) {\r\n values = new ObservableArray([value]);\r\n }\r\n\r\n element.selectedIndex = -1;\r\n\r\n for (var valueIndex = 0; valueIndex < values.length; valueIndex++) {\r\n value = values[valueIndex];\r\n\r\n if (field && value instanceof ObservableObject) {\r\n value = value.get(field);\r\n }\r\n\r\n for (optionIndex = 0; optionIndex < options.length; optionIndex++) {\r\n optionValue = options[optionIndex].value;\r\n\r\n if (optionValue === \"\" && value !== \"\") {\r\n optionValue = options[optionIndex].text;\r\n }\r\n\r\n if (optionValue == value) {\r\n options[optionIndex].selected = true;\r\n found = true;\r\n }\r\n }\r\n }\r\n },\r\n destroy: function() {\r\n $(this.element).off(CHANGE, this._change);\r\n }\r\n })\r\n };\r\n\r\n binders.widget = {\r\n events : Binder.extend({\r\n init: function(widget, bindings, options) {\r\n Binder.fn.init.call(this, widget.element[0], bindings, options);\r\n this.widget = widget;\r\n this.handlers = {};\r\n },\r\n\r\n refresh: function(key) {\r\n var binding = this.bindings.events[key],\r\n handler = this.handlers[key];\r\n\r\n if (handler) {\r\n this.widget.unbind(key, handler);\r\n }\r\n\r\n handler = binding.get();\r\n\r\n this.handlers[key] = function(e) {\r\n e.data = binding.source;\r\n\r\n handler(e);\r\n\r\n if (e.data === binding.source) {\r\n delete e.data;\r\n }\r\n };\r\n\r\n this.widget.bind(key, this.handlers[key]);\r\n },\r\n\r\n destroy: function() {\r\n var handler;\r\n\r\n for (handler in this.handlers) {\r\n this.widget.unbind(handler, this.handlers[handler]);\r\n }\r\n }\r\n }),\r\n\r\n checked: Binder.extend({\r\n init: function(widget, bindings, options) {\r\n Binder.fn.init.call(this, widget.element[0], bindings, options);\r\n\r\n this.widget = widget;\r\n this._change = proxy(this.change, this);\r\n this.widget.bind(CHANGE, this._change);\r\n },\r\n change: function() {\r\n this.bindings[CHECKED].set(this.value());\r\n },\r\n\r\n refresh: function() {\r\n this.widget.check(this.bindings[CHECKED].get() === true);\r\n },\r\n\r\n value: function() {\r\n var element = this.element,\r\n value = element.value;\r\n\r\n if (value == \"on\" || value == \"off\") {\r\n value = element.checked;\r\n }\r\n\r\n return value;\r\n },\r\n\r\n destroy: function() {\r\n this.widget.unbind(CHANGE, this._change);\r\n }\r\n }),\r\n\r\n visible: Binder.extend({\r\n init: function(widget, bindings, options) {\r\n Binder.fn.init.call(this, widget.element[0], bindings, options);\r\n\r\n this.widget = widget;\r\n },\r\n\r\n refresh: function() {\r\n var visible = this.bindings.visible.get();\r\n this.widget.wrapper[0].style.display = visible ? \"\" : \"none\";\r\n }\r\n }),\r\n\r\n invisible: Binder.extend({\r\n init: function(widget, bindings, options) {\r\n Binder.fn.init.call(this, widget.element[0], bindings, options);\r\n\r\n this.widget = widget;\r\n },\r\n\r\n refresh: function() {\r\n var invisible = this.bindings.invisible.get();\r\n this.widget.wrapper[0].style.display = invisible ? \"none\" : \"\";\r\n }\r\n }),\r\n\r\n enabled: Binder.extend({\r\n init: function(widget, bindings, options) {\r\n Binder.fn.init.call(this, widget.element[0], bindings, options);\r\n\r\n this.widget = widget;\r\n },\r\n\r\n refresh: function() {\r\n if (this.widget.enable) {\r\n this.widget.enable(this.bindings.enabled.get());\r\n }\r\n }\r\n }),\r\n\r\n disabled: Binder.extend({\r\n init: function(widget, bindings, options) {\r\n Binder.fn.init.call(this, widget.element[0], bindings, options);\r\n\r\n this.widget = widget;\r\n },\r\n\r\n refresh: function() {\r\n if (this.widget.enable) {\r\n this.widget.enable(!this.bindings.disabled.get());\r\n }\r\n }\r\n }),\r\n\r\n source: Binder.extend({\r\n init: function(widget, bindings, options) {\r\n var that = this;\r\n\r\n Binder.fn.init.call(that, widget.element[0], bindings, options);\r\n\r\n that.widget = widget;\r\n that._dataBinding = proxy(that.dataBinding, that);\r\n that._dataBound = proxy(that.dataBound, that);\r\n that._itemChange = proxy(that.itemChange, that);\r\n },\r\n\r\n itemChange: function(e) {\r\n bindElement(e.item[0], e.data, this._ns(e.ns), [e.data].concat(this.bindings.source._parents()));\r\n },\r\n\r\n dataBinding: function() {\r\n var idx,\r\n length,\r\n widget = this.widget,\r\n items = widget.items();\r\n\r\n for (idx = 0, length = items.length; idx < length; idx++) {\r\n unbindElementTree(items[idx]);\r\n }\r\n },\r\n\r\n _ns: function(ns) {\r\n ns = ns || kendo.ui;\r\n var all = [ kendo.ui, kendo.dataviz.ui, kendo.mobile.ui ];\r\n all.splice($.inArray(ns, all), 1);\r\n all.unshift(ns);\r\n\r\n return kendo.rolesFromNamespaces(all);\r\n },\r\n\r\n dataBound: function(e) {\r\n var idx,\r\n length,\r\n widget = this.widget,\r\n items = widget.items(),\r\n dataSource = widget.dataSource,\r\n view = dataSource.view(),\r\n parents,\r\n groups = dataSource.group() || [];\r\n\r\n if (items.length) {\r\n if (groups.length) {\r\n view = flattenGroups(view);\r\n }\r\n\r\n parents = this.bindings.source._parents();\r\n\r\n for (idx = 0, length = view.length; idx < length; idx++) {\r\n bindElement(items[idx], view[idx], this._ns(e.ns), [view[idx]].concat(parents));\r\n }\r\n }\r\n },\r\n\r\n refresh: function(e) {\r\n var that = this,\r\n source,\r\n widget = that.widget;\r\n\r\n e = e || {};\r\n\r\n if (!e.action) {\r\n that.destroy();\r\n\r\n widget.bind(\"dataBinding\", that._dataBinding);\r\n widget.bind(\"dataBound\", that._dataBound);\r\n widget.bind(\"itemChange\", that._itemChange);\r\n\r\n source = that.bindings.source.get();\r\n\r\n if (widget.dataSource instanceof kendo.data.DataSource && widget.dataSource != source) {\r\n if (source instanceof kendo.data.DataSource) {\r\n widget.setDataSource(source);\r\n } else if (source && source._dataSource) {\r\n widget.setDataSource(source._dataSource);\r\n } else {\r\n widget.dataSource.data(source);\r\n }\r\n }\r\n }\r\n },\r\n\r\n destroy: function() {\r\n var widget = this.widget;\r\n\r\n widget.unbind(\"dataBinding\", this._dataBinding);\r\n widget.unbind(\"dataBound\", this._dataBound);\r\n widget.unbind(\"itemChange\", this._itemChange);\r\n }\r\n }),\r\n\r\n value: Binder.extend({\r\n init: function(widget, bindings, options) {\r\n Binder.fn.init.call(this, widget.element[0], bindings, options);\r\n\r\n this.widget = widget;\r\n this._change = $.proxy(this.change, this);\r\n this.widget.first(CHANGE, this._change);\r\n\r\n var value = this.bindings.value.get();\r\n\r\n this._valueIsObservableObject = !options.valuePrimitive && (value == null || value instanceof ObservableObject);\r\n this._valueIsObservableArray = value instanceof ObservableArray;\r\n this._initChange = false;\r\n },\r\n\r\n change: function() {\r\n var value = this.widget.value(),\r\n field = this.options.dataValueField || this.options.dataTextField,\r\n isArray = toString.call(value) === \"[object Array]\",\r\n isObservableObject = this._valueIsObservableObject,\r\n valueIndex, valueLength, values = [],\r\n sourceItem, sourceValue,\r\n idx, length, source;\r\n\r\n this._initChange = true;\r\n\r\n if (field) {\r\n\r\n if (this.bindings.source) {\r\n source = this.bindings.source.get();\r\n }\r\n\r\n if (value === \"\" && (isObservableObject || this.options.valuePrimitive)) {\r\n value = null;\r\n } else {\r\n if (!source || source instanceof kendo.data.DataSource) {\r\n source = this.widget.dataSource.view();\r\n }\r\n\r\n if (isArray) {\r\n valueLength = value.length;\r\n values = value.slice(0);\r\n }\r\n\r\n for (idx = 0, length = source.length; idx < length; idx++) {\r\n sourceItem = source[idx];\r\n sourceValue = sourceItem.get(field);\r\n\r\n if (isArray) {\r\n for (valueIndex = 0; valueIndex < valueLength; valueIndex++) {\r\n if (sourceValue == values[valueIndex]) {\r\n values[valueIndex] = sourceItem;\r\n break;\r\n }\r\n }\r\n } else if (sourceValue == value) {\r\n value = isObservableObject ? sourceItem : sourceValue;\r\n break;\r\n }\r\n }\r\n\r\n if (values[0]) {\r\n if (this._valueIsObservableArray) {\r\n value = values;\r\n } else if (isObservableObject || !field) {\r\n value = values[0];\r\n } else {\r\n value = values[0].get(field);\r\n }\r\n }\r\n }\r\n }\r\n\r\n this.bindings.value.set(value);\r\n this._initChange = false;\r\n },\r\n\r\n refresh: function() {\r\n\r\n if (!this._initChange) {\r\n var field = this.options.dataValueField || this.options.dataTextField,\r\n value = this.bindings.value.get(),\r\n idx = 0, length,\r\n values = [];\r\n\r\n if (field) {\r\n if (value instanceof ObservableArray) {\r\n for (length = value.length; idx < length; idx++) {\r\n values[idx] = value[idx].get(field);\r\n }\r\n value = values;\r\n } else if (value instanceof ObservableObject) {\r\n value = value.get(field);\r\n }\r\n }\r\n this.widget.value(value);\r\n }\r\n\r\n this._initChange = false;\r\n },\r\n\r\n destroy: function() {\r\n this.widget.unbind(CHANGE, this._change);\r\n }\r\n }),\r\n\r\n multiselect: {\r\n value: Binder.extend({\r\n init: function(widget, bindings, options) {\r\n Binder.fn.init.call(this, widget.element[0], bindings, options);\r\n\r\n this.widget = widget;\r\n this._change = $.proxy(this.change, this);\r\n this.widget.first(CHANGE, this._change);\r\n this._initChange = false;\r\n },\r\n\r\n change: function() {\r\n var that = this,\r\n oldValues = that.bindings[VALUE].get(),\r\n valuePrimitive = that.options.valuePrimitive,\r\n newValues = valuePrimitive ? that.widget.value() : that.widget.dataItems();\r\n\r\n var field = this.options.dataValueField || this.options.dataTextField;\r\n\r\n newValues = newValues.slice(0);\r\n\r\n that._initChange = true;\r\n\r\n if (oldValues instanceof ObservableArray) {\r\n var remove = [];\r\n\r\n var newLength = newValues.length;\r\n\r\n var i = 0, j = 0;\r\n var old = oldValues[i];\r\n var same = false;\r\n var removeIndex;\r\n var newValue;\r\n var found;\r\n\r\n var oldIdx = 0;\r\n var oldLength = oldValues.length + 1;\r\n\r\n while (old) {\r\n found = false;\r\n for (j = 0; j < newLength; j++) {\r\n if (valuePrimitive) {\r\n same = newValues[j] == old;\r\n } else {\r\n newValue = newValues[j];\r\n\r\n newValue = newValue.get ? newValue.get(field) : newValue;\r\n same = newValue == (old.get ? old.get(field) : old);\r\n }\r\n\r\n if (same) {\r\n newValues.splice(j, 1);\r\n newLength -= 1;\r\n found = true;\r\n break;\r\n }\r\n }\r\n\r\n if (!found) {\r\n remove.push(old);\r\n splice.call(oldValues, i, 1);\r\n removeIndex = i;\r\n } else {\r\n i += 1;\r\n }\r\n\r\n old = oldValues[i];\r\n oldIdx++;\r\n\r\n if (oldIdx > oldLength) {\r\n break;\r\n }\r\n }\r\n\r\n splice.apply(oldValues, [oldValues.length, 0].concat(newValues));\r\n\r\n if (remove.length) {\r\n oldValues.trigger(\"change\", {\r\n action: \"remove\",\r\n items: remove,\r\n index: removeIndex\r\n });\r\n }\r\n\r\n if (newValues.length) {\r\n oldValues.trigger(\"change\", {\r\n action: \"add\",\r\n items: newValues,\r\n index: oldValues.length - 1\r\n });\r\n }\r\n } else {\r\n that.bindings[VALUE].set(newValues);\r\n }\r\n\r\n that._initChange = false;\r\n },\r\n\r\n refresh: function() {\r\n if (!this._initChange) {\r\n var field = this.options.dataValueField || this.options.dataTextField,\r\n value = this.bindings.value.get(),\r\n idx = 0, length,\r\n values = [],\r\n selectedValue;\r\n\r\n if (field) {\r\n if (value instanceof ObservableArray) {\r\n for (length = value.length; idx < length; idx++) {\r\n selectedValue = value[idx];\r\n values[idx] = selectedValue.get ? selectedValue.get(field) : selectedValue;\r\n }\r\n value = values;\r\n } else if (value instanceof ObservableObject) {\r\n value = value.get(field);\r\n }\r\n }\r\n\r\n this.widget.value(value);\r\n }\r\n },\r\n\r\n destroy: function() {\r\n this.widget.unbind(CHANGE, this._change);\r\n }\r\n\r\n })\r\n }\r\n };\r\n\r\n var BindingTarget = Class.extend( {\r\n init: function(target, options) {\r\n this.target = target;\r\n this.options = options;\r\n this.toDestroy = [];\r\n },\r\n\r\n bind: function(bindings) {\r\n var nodeName = this.target.nodeName.toLowerCase(),\r\n key,\r\n hasValue,\r\n hasSource,\r\n hasEvents,\r\n specificBinders = binders[nodeName] || {};\r\n\r\n for (key in bindings) {\r\n if (key == VALUE) {\r\n hasValue = true;\r\n } else if (key == SOURCE) {\r\n hasSource = true;\r\n } else if (key == EVENTS) {\r\n hasEvents = true;\r\n } else {\r\n this.applyBinding(key, bindings, specificBinders);\r\n }\r\n }\r\n\r\n if (hasSource) {\r\n this.applyBinding(SOURCE, bindings, specificBinders);\r\n }\r\n\r\n if (hasValue) {\r\n this.applyBinding(VALUE, bindings, specificBinders);\r\n }\r\n\r\n if (hasEvents) {\r\n this.applyBinding(EVENTS, bindings, specificBinders);\r\n }\r\n },\r\n\r\n applyBinding: function(name, bindings, specificBinders) {\r\n var binder = specificBinders[name] || binders[name],\r\n toDestroy = this.toDestroy,\r\n attribute,\r\n binding = bindings[name];\r\n\r\n if (binder) {\r\n binder = new binder(this.target, bindings, this.options);\r\n\r\n toDestroy.push(binder);\r\n\r\n if (binding instanceof Binding) {\r\n binder.bind(binding);\r\n toDestroy.push(binding);\r\n } else {\r\n for (attribute in binding) {\r\n binder.bind(binding, attribute);\r\n toDestroy.push(binding[attribute]);\r\n }\r\n }\r\n } else if (name !== \"template\") {\r\n throw new Error(\"The \" + name + \" binding is not supported by the \" + this.target.nodeName.toLowerCase() + \" element\");\r\n }\r\n },\r\n\r\n destroy: function() {\r\n var idx,\r\n length,\r\n toDestroy = this.toDestroy;\r\n\r\n for (idx = 0, length = toDestroy.length; idx < length; idx++) {\r\n toDestroy[idx].destroy();\r\n }\r\n }\r\n });\r\n\r\n var WidgetBindingTarget = BindingTarget.extend( {\r\n bind: function(bindings) {\r\n var that = this,\r\n binding,\r\n hasValue = false,\r\n hasSource = false,\r\n specificBinders = binders.widget[that.target.options.name.toLowerCase()] || {};\r\n\r\n for (binding in bindings) {\r\n if (binding == VALUE) {\r\n hasValue = true;\r\n } else if (binding == SOURCE) {\r\n hasSource = true;\r\n } else {\r\n that.applyBinding(binding, bindings, specificBinders);\r\n }\r\n }\r\n\r\n if (hasSource) {\r\n that.applyBinding(SOURCE, bindings, specificBinders);\r\n }\r\n\r\n if (hasValue) {\r\n that.applyBinding(VALUE, bindings, specificBinders);\r\n }\r\n },\r\n\r\n applyBinding: function(name, bindings, specificBinders) {\r\n var binder = specificBinders[name] || binders.widget[name],\r\n toDestroy = this.toDestroy,\r\n attribute,\r\n binding = bindings[name];\r\n\r\n if (binder) {\r\n binder = new binder(this.target, bindings, this.target.options);\r\n\r\n toDestroy.push(binder);\r\n\r\n\r\n if (binding instanceof Binding) {\r\n binder.bind(binding);\r\n toDestroy.push(binding);\r\n } else {\r\n for (attribute in binding) {\r\n binder.bind(binding, attribute);\r\n toDestroy.push(binding[attribute]);\r\n }\r\n }\r\n } else {\r\n throw new Error(\"The \" + name + \" binding is not supported by the \" + this.target.options.name + \" widget\");\r\n }\r\n }\r\n });\r\n\r\n function flattenGroups(data) {\r\n var idx,\r\n result = [],\r\n length,\r\n items,\r\n itemIndex;\r\n\r\n for (idx = 0, length = data.length; idx < length; idx++) {\r\n if (data[idx].hasSubgroups) {\r\n result = result.concat(flattenGroups(data[idx].items));\r\n } else {\r\n items = data[idx].items;\r\n for (itemIndex = 0; itemIndex < items.length; itemIndex++) {\r\n result.push(items[itemIndex]);\r\n }\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n function bindingTargetForRole(element, roles) {\r\n var widget = kendo.initWidget(element, {}, roles);\r\n\r\n if (widget) {\r\n return new WidgetBindingTarget(widget);\r\n }\r\n }\r\n\r\n var keyValueRegExp = /[A-Za-z0-9_\\-]+:(\\{([^}]*)\\}|[^,}]+)/g,\r\n whiteSpaceRegExp = /\\s/g;\r\n\r\n function parseBindings(bind) {\r\n var result = {},\r\n idx,\r\n length,\r\n token,\r\n colonIndex,\r\n key,\r\n value,\r\n tokens;\r\n\r\n tokens = bind.match(keyValueRegExp);\r\n\r\n for (idx = 0, length = tokens.length; idx < length; idx++) {\r\n token = tokens[idx];\r\n colonIndex = token.indexOf(\":\");\r\n\r\n key = token.substring(0, colonIndex);\r\n value = token.substring(colonIndex + 1);\r\n\r\n if (value.charAt(0) == \"{\") {\r\n value = parseBindings(value);\r\n }\r\n\r\n result[key] = value;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n function createBindings(bindings, source, type) {\r\n var binding,\r\n result = {};\r\n\r\n for (binding in bindings) {\r\n result[binding] = new type(source, bindings[binding]);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n function bindElement(element, source, roles, parents) {\r\n var role = element.getAttribute(\"data-\" + kendo.ns + \"role\"),\r\n idx,\r\n bind = element.getAttribute(\"data-\" + kendo.ns + \"bind\"),\r\n children = element.children,\r\n childrenCopy = [],\r\n deep = true,\r\n bindings,\r\n options = {},\r\n target;\r\n\r\n parents = parents || [source];\r\n\r\n if (role || bind) {\r\n unbindElement(element);\r\n }\r\n\r\n if (role) {\r\n target = bindingTargetForRole(element, roles);\r\n }\r\n\r\n if (bind) {\r\n bind = parseBindings(bind.replace(whiteSpaceRegExp, \"\"));\r\n\r\n if (!target) {\r\n options = kendo.parseOptions(element, {textField: \"\", valueField: \"\", template: \"\", valueUpdate: CHANGE, valuePrimitive: false, autoBind: true});\r\n options.roles = roles;\r\n target = new BindingTarget(element, options);\r\n }\r\n\r\n target.source = source;\r\n\r\n bindings = createBindings(bind, parents, Binding);\r\n\r\n if (options.template) {\r\n bindings.template = new TemplateBinding(parents, \"\", options.template);\r\n }\r\n\r\n if (bindings.click) {\r\n bind.events = bind.events || {};\r\n bind.events.click = bind.click;\r\n delete bindings.click;\r\n }\r\n\r\n if (bindings.source) {\r\n deep = false;\r\n }\r\n\r\n if (bind.attr) {\r\n bindings.attr = createBindings(bind.attr, parents, Binding);\r\n }\r\n\r\n if (bind.style) {\r\n bindings.style = createBindings(bind.style, parents, Binding);\r\n }\r\n\r\n if (bind.events) {\r\n bindings.events = createBindings(bind.events, parents, EventBinding);\r\n }\r\n\r\n target.bind(bindings);\r\n }\r\n\r\n if (target) {\r\n element.kendoBindingTarget = target;\r\n }\r\n\r\n if (deep && children) {\r\n // https://github.com/telerik/kendo/issues/1240 for the weirdness.\r\n for (idx = 0; idx < children.length; idx++) {\r\n childrenCopy[idx] = children[idx];\r\n }\r\n\r\n for (idx = 0; idx < childrenCopy.length; idx++) {\r\n bindElement(childrenCopy[idx], source, roles, parents);\r\n }\r\n }\r\n }\r\n\r\n function bind(dom, object) {\r\n var idx,\r\n length,\r\n node,\r\n roles = kendo.rolesFromNamespaces([].slice.call(arguments, 2));\r\n\r\n object = kendo.observable(object);\r\n dom = $(dom);\r\n\r\n for (idx = 0, length = dom.length; idx < length; idx++) {\r\n node = dom[idx];\r\n if (node.nodeType === 1) {\r\n bindElement(node, object, roles);\r\n }\r\n }\r\n }\r\n\r\n function unbindElement(element) {\r\n var bindingTarget = element.kendoBindingTarget;\r\n\r\n if (bindingTarget) {\r\n bindingTarget.destroy();\r\n\r\n if (deleteExpando) {\r\n delete element.kendoBindingTarget;\r\n } else if (element.removeAttribute) {\r\n element.removeAttribute(\"kendoBindingTarget\");\r\n } else {\r\n element.kendoBindingTarget = null;\r\n }\r\n }\r\n }\r\n\r\n function unbindElementTree(element) {\r\n unbindElement(element);\r\n\r\n unbindElementChildren(element);\r\n }\r\n\r\n function unbindElementChildren(element) {\r\n var children = element.children;\r\n\r\n if (children) {\r\n for (var idx = 0, length = children.length; idx < length; idx++) {\r\n unbindElementTree(children[idx]);\r\n }\r\n }\r\n }\r\n\r\n function unbind(dom) {\r\n var idx, length;\r\n\r\n dom = $(dom);\r\n\r\n for (idx = 0, length = dom.length; idx < length; idx++ ) {\r\n unbindElementTree(dom[idx]);\r\n }\r\n }\r\n\r\n function notify(widget, namespace) {\r\n var element = widget.element,\r\n bindingTarget = element[0].kendoBindingTarget;\r\n\r\n if (bindingTarget) {\r\n bind(element, bindingTarget.source, namespace);\r\n }\r\n }\r\n\r\n kendo.unbind = unbind;\r\n kendo.bind = bind;\r\n kendo.data.binders = binders;\r\n kendo.data.Binder = Binder;\r\n kendo.notify = notify;\r\n\r\n kendo.observable = function(object) {\r\n if (!(object instanceof ObservableObject)) {\r\n object = new ObservableObject(object);\r\n }\r\n\r\n return object;\r\n };\r\n\r\n kendo.observableHierarchy = function(array) {\r\n var dataSource = kendo.data.HierarchicalDataSource.create(array);\r\n\r\n function recursiveRead(data) {\r\n var i, children;\r\n\r\n for (i = 0; i < data.length; i++) {\r\n data[i]._initChildren();\r\n\r\n children = data[i].children;\r\n\r\n children.fetch();\r\n\r\n data[i].items = children.data();\r\n\r\n recursiveRead(data[i].items);\r\n }\r\n }\r\n\r\n dataSource.fetch();\r\n\r\n recursiveRead(dataSource.data());\r\n\r\n dataSource._data._dataSource = dataSource;\r\n\r\n return dataSource._data;\r\n };\r\n\r\n})(window.kendo.jQuery);\r\n\r\nreturn window.kendo;\r\n\r\n}, typeof define == 'function' && define.amd ? define : function(_, f){ f(); });","/*\r\n* Kendo UI Complete v2014.1.318 (http://kendoui.com)\r\n* Copyright 2014 Telerik AD. All rights reserved.\r\n*\r\n* Kendo UI Complete commercial licenses may be obtained at\r\n* http://www.telerik.com/purchase/license-agreement/kendo-ui-complete\r\n* If you do not own a commercial license, this file shall be governed by the trial license terms.\r\n*/\r\n(function(f, define){\r\n define([ \"./kendo.core\" ], f);\r\n})(function(){\r\n\r\n(function($, undefined) {\r\n var kendo = window.kendo,\r\n support = kendo.support,\r\n ui = kendo.ui,\r\n Widget = ui.Widget,\r\n keys = kendo.keys,\r\n parse = kendo.parseDate,\r\n adjustDST = kendo.date.adjustDST,\r\n extractFormat = kendo._extractFormat,\r\n template = kendo.template,\r\n getCulture = kendo.getCulture,\r\n transitions = kendo.support.transitions,\r\n transitionOrigin = transitions ? transitions.css + \"transform-origin\" : \"\",\r\n cellTemplate = template('#=data.value#', { useWithBlock: false }),\r\n emptyCellTemplate = template(' ', { useWithBlock: false }),\r\n browser = kendo.support.browser,\r\n isIE8 = browser.msie && browser.version < 9,\r\n ns = \".kendoCalendar\",\r\n CLICK = \"click\" + ns,\r\n KEYDOWN_NS = \"keydown\" + ns,\r\n ID = \"id\",\r\n MIN = \"min\",\r\n LEFT = \"left\",\r\n SLIDE = \"slideIn\",\r\n MONTH = \"month\",\r\n CENTURY = \"century\",\r\n CHANGE = \"change\",\r\n NAVIGATE = \"navigate\",\r\n VALUE = \"value\",\r\n HOVER = \"k-state-hover\",\r\n DISABLED = \"k-state-disabled\",\r\n FOCUSED = \"k-state-focused\",\r\n OTHERMONTH = \"k-other-month\",\r\n OTHERMONTHCLASS = ' class=\"' + OTHERMONTH + '\"',\r\n TODAY = \"k-nav-today\",\r\n CELLSELECTOR = \"td:has(.k-link)\",\r\n BLUR = \"blur\" + ns,\r\n FOCUS = \"focus\",\r\n FOCUS_WITH_NS = FOCUS + ns,\r\n MOUSEENTER = support.touch ? \"touchstart\" : \"mouseenter\",\r\n MOUSEENTER_WITH_NS = support.touch ? \"touchstart\" + ns : \"mouseenter\" + ns,\r\n MOUSELEAVE = support.touch ? \"touchend\" + ns + \" touchmove\" + ns : \"mouseleave\" + ns,\r\n MS_PER_MINUTE = 60000,\r\n MS_PER_DAY = 86400000,\r\n PREVARROW = \"_prevArrow\",\r\n NEXTARROW = \"_nextArrow\",\r\n ARIA_DISABLED = \"aria-disabled\",\r\n ARIA_SELECTED = \"aria-selected\",\r\n proxy = $.proxy,\r\n extend = $.extend,\r\n DATE = Date,\r\n views = {\r\n month: 0,\r\n year: 1,\r\n decade: 2,\r\n century: 3\r\n };\r\n\r\n var Calendar = Widget.extend({\r\n init: function(element, options) {\r\n var that = this, value, id;\r\n\r\n Widget.fn.init.call(that, element, options);\r\n\r\n element = that.wrapper = that.element;\r\n options = that.options;\r\n\r\n options.url = window.unescape(options.url);\r\n\r\n that._templates();\r\n\r\n that._header();\r\n\r\n that._footer(that.footer);\r\n\r\n id = element\r\n .addClass(\"k-widget k-calendar\")\r\n .on(MOUSEENTER_WITH_NS + \" \" + MOUSELEAVE, CELLSELECTOR, mousetoggle)\r\n .on(KEYDOWN_NS, \"table.k-content\", proxy(that._move, that))\r\n .on(CLICK, CELLSELECTOR, function(e) {\r\n var link = e.currentTarget.firstChild;\r\n\r\n if (link.href.indexOf(\"#\") != -1) {\r\n e.preventDefault();\r\n }\r\n\r\n that._click($(link));\r\n })\r\n .on(\"mouseup\" + ns, function() {\r\n that._focusView(that.options.focusOnNav !== false);\r\n })\r\n .attr(ID);\r\n\r\n if (id) {\r\n that._cellID = id + \"_cell_selected\";\r\n }\r\n\r\n normalize(options);\r\n value = parse(options.value, options.format, options.culture);\r\n\r\n that._index = views[options.start];\r\n that._current = new DATE(+restrictValue(value, options.min, options.max));\r\n\r\n that._addClassProxy = function() {\r\n that._active = true;\r\n that._cell.addClass(FOCUSED);\r\n };\r\n\r\n that._removeClassProxy = function() {\r\n that._active = false;\r\n that._cell.removeClass(FOCUSED);\r\n };\r\n\r\n that.value(value);\r\n\r\n kendo.notify(that);\r\n },\r\n\r\n options: {\r\n name: \"Calendar\",\r\n value: null,\r\n min: new DATE(1900, 0, 1),\r\n max: new DATE(2099, 11, 31),\r\n dates: [],\r\n url: \"\",\r\n culture: \"\",\r\n footer : \"\",\r\n format : \"\",\r\n month : {},\r\n start: MONTH,\r\n depth: MONTH,\r\n animation: {\r\n horizontal: {\r\n effects: SLIDE,\r\n reverse: true,\r\n duration: 500,\r\n divisor: 2\r\n },\r\n vertical: {\r\n effects: \"zoomIn\",\r\n duration: 400\r\n }\r\n }\r\n },\r\n\r\n events: [\r\n CHANGE,\r\n NAVIGATE\r\n ],\r\n\r\n setOptions: function(options) {\r\n var that = this;\r\n\r\n normalize(options);\r\n\r\n Widget.fn.setOptions.call(that, options);\r\n\r\n that._templates();\r\n\r\n that._footer(that.footer);\r\n that._index = views[that.options.start];\r\n\r\n that.navigate();\r\n },\r\n\r\n destroy: function() {\r\n var that = this,\r\n today = that._today;\r\n\r\n that.element.off(ns);\r\n that._title.off(ns);\r\n that[PREVARROW].off(ns);\r\n that[NEXTARROW].off(ns);\r\n\r\n kendo.destroy(that._table);\r\n\r\n if (today) {\r\n kendo.destroy(today.off(ns));\r\n }\r\n\r\n Widget.fn.destroy.call(that);\r\n },\r\n\r\n current: function() {\r\n return this._current;\r\n },\r\n\r\n view: function() {\r\n return this._view;\r\n },\r\n\r\n focus: function(table) {\r\n table = table || this._table;\r\n this._bindTable(table);\r\n table.focus();\r\n },\r\n\r\n min: function(value) {\r\n return this._option(MIN, value);\r\n },\r\n\r\n max: function(value) {\r\n return this._option(\"max\", value);\r\n },\r\n\r\n navigateToPast: function() {\r\n this._navigate(PREVARROW, -1);\r\n },\r\n\r\n navigateToFuture: function() {\r\n this._navigate(NEXTARROW, 1);\r\n },\r\n\r\n navigateUp: function() {\r\n var that = this,\r\n index = that._index;\r\n\r\n if (that._title.hasClass(DISABLED)) {\r\n return;\r\n }\r\n\r\n that.navigate(that._current, ++index);\r\n },\r\n\r\n navigateDown: function(value) {\r\n var that = this,\r\n index = that._index,\r\n depth = that.options.depth;\r\n\r\n if (!value) {\r\n return;\r\n }\r\n\r\n if (index === views[depth]) {\r\n if (+that._value != +value) {\r\n that.value(value);\r\n that.trigger(CHANGE);\r\n }\r\n return;\r\n }\r\n\r\n that.navigate(value, --index);\r\n },\r\n\r\n navigate: function(value, view) {\r\n view = isNaN(view) ? views[view] : view;\r\n\r\n var that = this,\r\n options = that.options,\r\n culture = options.culture,\r\n min = options.min,\r\n max = options.max,\r\n title = that._title,\r\n from = that._table,\r\n old = that._oldTable,\r\n selectedValue = that._value,\r\n currentValue = that._current,\r\n future = value && +value > +currentValue,\r\n vertical = view !== undefined && view !== that._index,\r\n to, currentView, compare,\r\n disabled;\r\n\r\n if (!value) {\r\n value = currentValue;\r\n }\r\n\r\n that._current = value = new DATE(+restrictValue(value, min, max));\r\n\r\n if (view === undefined) {\r\n view = that._index;\r\n } else {\r\n that._index = view;\r\n }\r\n\r\n that._view = currentView = calendar.views[view];\r\n compare = currentView.compare;\r\n\r\n disabled = view === views[CENTURY];\r\n title.toggleClass(DISABLED, disabled).attr(ARIA_DISABLED, disabled);\r\n\r\n disabled = compare(value, min) < 1;\r\n that[PREVARROW].toggleClass(DISABLED, disabled).attr(ARIA_DISABLED, disabled);\r\n\r\n disabled = compare(value, max) > -1;\r\n that[NEXTARROW].toggleClass(DISABLED, disabled).attr(ARIA_DISABLED, disabled);\r\n\r\n if (from && old && old.data(\"animating\")) {\r\n old.kendoStop(true, true);\r\n from.kendoStop(true, true);\r\n }\r\n\r\n that._oldTable = from;\r\n\r\n if (!from || that._changeView) {\r\n title.html(currentView.title(value, min, max, culture));\r\n\r\n that._table = to = $(currentView.content(extend({\r\n min: min,\r\n max: max,\r\n date: value,\r\n url: options.url,\r\n dates: options.dates,\r\n format: options.format,\r\n culture: culture\r\n }, that[currentView.name])));\r\n\r\n makeUnselectable(to);\r\n\r\n that._animate({\r\n from: from,\r\n to: to,\r\n vertical: vertical,\r\n future: future\r\n });\r\n\r\n that._focus(value);\r\n that.trigger(NAVIGATE);\r\n }\r\n\r\n if (view === views[options.depth] && selectedValue) {\r\n that._class(\"k-state-selected\", currentView.toDateString(selectedValue));\r\n }\r\n\r\n that._class(FOCUSED, currentView.toDateString(value));\r\n\r\n if (!from && that._cell) {\r\n that._cell.removeClass(FOCUSED);\r\n }\r\n\r\n that._changeView = true;\r\n },\r\n\r\n value: function(value) {\r\n var that = this,\r\n view = that._view,\r\n options = that.options,\r\n old = that._view,\r\n min = options.min,\r\n max = options.max;\r\n\r\n if (value === undefined) {\r\n return that._value;\r\n }\r\n\r\n value = parse(value, options.format, options.culture);\r\n\r\n if (value !== null) {\r\n value = new DATE(+value);\r\n\r\n if (!isInRange(value, min, max)) {\r\n value = null;\r\n }\r\n }\r\n\r\n that._value = value;\r\n\r\n if (old && value === null && that._cell) {\r\n that._cell.removeClass(\"k-state-selected\");\r\n } else {\r\n that._changeView = !value || view && view.compare(value, that._current) !== 0;\r\n that.navigate(value);\r\n }\r\n },\r\n\r\n _move: function(e) {\r\n var that = this,\r\n options = that.options,\r\n key = e.keyCode,\r\n view = that._view,\r\n index = that._index,\r\n currentValue = new DATE(+that._current),\r\n isRtl = kendo.support.isRtl(that.wrapper),\r\n value, prevent, method, temp;\r\n\r\n if (e.target === that._table[0]) {\r\n that._active = true;\r\n }\r\n\r\n if (e.ctrlKey) {\r\n if (key == keys.RIGHT && !isRtl || key == keys.LEFT && isRtl) {\r\n that.navigateToFuture();\r\n prevent = true;\r\n } else if (key == keys.LEFT && !isRtl || key == keys.RIGHT && isRtl) {\r\n that.navigateToPast();\r\n prevent = true;\r\n } else if (key == keys.UP) {\r\n that.navigateUp();\r\n prevent = true;\r\n } else if (key == keys.DOWN) {\r\n that._click($(that._cell[0].firstChild));\r\n prevent = true;\r\n }\r\n } else {\r\n if (key == keys.RIGHT && !isRtl || key == keys.LEFT && isRtl) {\r\n value = 1;\r\n prevent = true;\r\n } else if (key == keys.LEFT && !isRtl || key == keys.RIGHT && isRtl) {\r\n value = -1;\r\n prevent = true;\r\n } else if (key == keys.UP) {\r\n value = index === 0 ? -7 : -4;\r\n prevent = true;\r\n } else if (key == keys.DOWN) {\r\n value = index === 0 ? 7 : 4;\r\n prevent = true;\r\n } else if (key == keys.ENTER) {\r\n that._click($(that._cell[0].firstChild));\r\n prevent = true;\r\n } else if (key == keys.HOME || key == keys.END) {\r\n method = key == keys.HOME ? \"first\" : \"last\";\r\n temp = view[method](currentValue);\r\n currentValue = new DATE(temp.getFullYear(), temp.getMonth(), temp.getDate(), currentValue.getHours(), currentValue.getMinutes(), currentValue.getSeconds(), currentValue.getMilliseconds());\r\n prevent = true;\r\n } else if (key == keys.PAGEUP) {\r\n prevent = true;\r\n that.navigateToPast();\r\n } else if (key == keys.PAGEDOWN) {\r\n prevent = true;\r\n that.navigateToFuture();\r\n }\r\n\r\n if (value || method) {\r\n if (!method) {\r\n view.setDate(currentValue, value);\r\n }\r\n\r\n that._focus(restrictValue(currentValue, options.min, options.max));\r\n }\r\n }\r\n\r\n if (prevent) {\r\n e.preventDefault();\r\n }\r\n\r\n return that._current;\r\n },\r\n\r\n _animate: function(options) {\r\n var that = this,\r\n from = options.from,\r\n to = options.to,\r\n active = that._active;\r\n\r\n if (!from) {\r\n to.insertAfter(that.element[0].firstChild);\r\n that._bindTable(to);\r\n } else if (from.parent().data(\"animating\")) {\r\n from.parent().kendoStop(true, true).remove();\r\n from.remove();\r\n\r\n to.insertAfter(that.element[0].firstChild);\r\n that._focusView(active);\r\n } else if (!from.is(\":visible\") || that.options.animation === false) {\r\n to.insertAfter(from);\r\n from.remove();\r\n\r\n that._focusView(active);\r\n } else {\r\n that[options.vertical ? \"_vertical\" : \"_horizontal\"](from, to, options.future);\r\n }\r\n },\r\n\r\n _horizontal: function(from, to, future) {\r\n var that = this,\r\n active = that._active,\r\n horizontal = that.options.animation.horizontal,\r\n effects = horizontal.effects,\r\n viewWidth = from.outerWidth();\r\n\r\n if (effects && effects.indexOf(SLIDE) != -1) {\r\n from.add(to).css({ width: viewWidth });\r\n\r\n from.wrap(\"
    \");\r\n\r\n that._focusView(active, from);\r\n\r\n from.parent()\r\n .css({\r\n position: \"relative\",\r\n width: viewWidth * 2,\r\n \"float\": LEFT,\r\n \"margin-left\": future ? 0 : -viewWidth\r\n });\r\n\r\n to[future ? \"insertAfter\" : \"insertBefore\"](from);\r\n\r\n extend(horizontal, {\r\n effects: SLIDE + \":\" + (future ? \"right\" : LEFT),\r\n complete: function() {\r\n from.remove();\r\n to.unwrap();\r\n\r\n that._focusView(active);\r\n\r\n that._oldTable = undefined;\r\n }\r\n });\r\n\r\n from.parent().kendoStop(true, true).kendoAnimate(horizontal);\r\n }\r\n },\r\n\r\n _vertical: function(from, to) {\r\n var that = this,\r\n vertical = that.options.animation.vertical,\r\n effects = vertical.effects,\r\n active = that._active, //active state before from's blur\r\n cell, position;\r\n\r\n if (effects && effects.indexOf(\"zoom\") != -1) {\r\n to.css({\r\n position: \"absolute\",\r\n top: from.prev().outerHeight(),\r\n left: 0\r\n }).insertBefore(from);\r\n\r\n if (transitionOrigin) {\r\n cell = that._cellByDate(that._view.toDateString(that._current));\r\n position = cell.position();\r\n position = (position.left + parseInt(cell.width() / 2, 10)) + \"px\" + \" \" + (position.top + parseInt(cell.height() / 2, 10) + \"px\");\r\n to.css(transitionOrigin, position);\r\n }\r\n\r\n from.kendoStop(true, true).kendoAnimate({\r\n effects: \"fadeOut\",\r\n duration: 600,\r\n complete: function() {\r\n from.remove();\r\n\r\n to.css({\r\n position: \"static\",\r\n top: 0,\r\n left: 0\r\n });\r\n\r\n that._focusView(active);\r\n\r\n that._oldTable = undefined;\r\n }\r\n });\r\n\r\n to.kendoStop(true, true).kendoAnimate(vertical);\r\n }\r\n },\r\n\r\n _cellByDate: function(value) {\r\n return this._table.find(\"td:not(.\" + OTHERMONTH + \")\")\r\n .filter(function() {\r\n return $(this.firstChild).attr(kendo.attr(VALUE)) === value;\r\n });\r\n },\r\n\r\n _class: function(className, value) {\r\n var that = this,\r\n id = that._cellID,\r\n cell = that._cell;\r\n\r\n if (cell) {\r\n cell.removeAttr(ARIA_SELECTED)\r\n .removeAttr(\"aria-label\")\r\n .removeAttr(ID);\r\n }\r\n\r\n cell = that._table\r\n .find(\"td:not(.\" + OTHERMONTH + \")\")\r\n .removeClass(className)\r\n .filter(function() {\r\n return $(this.firstChild).attr(kendo.attr(VALUE)) === value;\r\n })\r\n .attr(ARIA_SELECTED, true);\r\n\r\n if (className === FOCUSED && !that._active && that.options.focusOnNav !== false) {\r\n className = \"\";\r\n }\r\n\r\n cell.addClass(className);\r\n\r\n if (cell[0]) {\r\n that._cell = cell;\r\n }\r\n\r\n if (id) {\r\n cell.attr(ID, id);\r\n that._table.removeAttr(\"aria-activedescendant\").attr(\"aria-activedescendant\", id);\r\n }\r\n },\r\n\r\n _bindTable: function (table) {\r\n table\r\n .on(FOCUS_WITH_NS, this._addClassProxy)\r\n .on(BLUR, this._removeClassProxy);\r\n },\r\n\r\n _click: function(link) {\r\n var that = this,\r\n options = that.options,\r\n currentValue = new Date(+that._current),\r\n value = link.attr(kendo.attr(VALUE)).split(\"/\");\r\n\r\n //Safari cannot create correctly date from \"1/1/2090\"\r\n value = new DATE(value[0], value[1], value[2]);\r\n adjustDST(value, 0);\r\n\r\n that._view.setDate(currentValue, value);\r\n\r\n that.navigateDown(restrictValue(currentValue, options.min, options.max));\r\n },\r\n\r\n _focus: function(value) {\r\n var that = this,\r\n view = that._view;\r\n\r\n if (view.compare(value, that._current) !== 0) {\r\n that.navigate(value);\r\n } else {\r\n that._current = value;\r\n that._class(FOCUSED, view.toDateString(value));\r\n }\r\n },\r\n\r\n _focusView: function(active, table) {\r\n if (active) {\r\n this.focus(table);\r\n }\r\n },\r\n\r\n _footer: function(template) {\r\n var that = this,\r\n today = getToday(),\r\n element = that.element,\r\n footer = element.find(\".k-footer\");\r\n\r\n if (!template) {\r\n that._toggle(false);\r\n footer.hide();\r\n return;\r\n }\r\n\r\n if (!footer[0]) {\r\n footer = $('
    ').appendTo(element);\r\n }\r\n\r\n that._today = footer.show()\r\n .find(\".k-link\")\r\n .html(template(today))\r\n .attr(\"title\", kendo.toString(today, \"D\", that.options.culture));\r\n\r\n that._toggle();\r\n },\r\n\r\n _header: function() {\r\n var that = this,\r\n element = that.element,\r\n links;\r\n\r\n if (!element.find(\".k-header\")[0]) {\r\n element.html('
    ' +\r\n '' +\r\n '' +\r\n '' +\r\n '
    ');\r\n }\r\n\r\n links = element.find(\".k-link\")\r\n .on(MOUSEENTER_WITH_NS + \" \" + MOUSELEAVE + \" \" + FOCUS_WITH_NS + \" \" + BLUR, mousetoggle)\r\n .click(false);\r\n\r\n that._title = links.eq(1).on(CLICK, function() { that._focusView(that.options.focusOnNav !== false); that.navigateUp(); });\r\n that[PREVARROW] = links.eq(0).on(CLICK, function() { that._focusView(that.options.focusOnNav !== false); that.navigateToPast(); });\r\n that[NEXTARROW] = links.eq(2).on(CLICK, function() { that._focusView(that.options.focusOnNav !== false); that.navigateToFuture(); });\r\n },\r\n\r\n _navigate: function(arrow, modifier) {\r\n var that = this,\r\n index = that._index + 1,\r\n currentValue = new DATE(+that._current);\r\n\r\n arrow = that[arrow];\r\n\r\n if (!arrow.hasClass(DISABLED)) {\r\n if (index > 3) {\r\n currentValue.setFullYear(currentValue.getFullYear() + 100 * modifier);\r\n } else {\r\n calendar.views[index].setDate(currentValue, modifier);\r\n }\r\n\r\n that.navigate(currentValue);\r\n }\r\n },\r\n\r\n _option: function(option, value) {\r\n var that = this,\r\n options = that.options,\r\n currentValue = that._value || that._current,\r\n isBigger;\r\n\r\n if (value === undefined) {\r\n return options[option];\r\n }\r\n\r\n value = parse(value, options.format, options.culture);\r\n\r\n if (!value) {\r\n return;\r\n }\r\n\r\n options[option] = new DATE(+value);\r\n\r\n if (option === MIN) {\r\n isBigger = value > currentValue;\r\n } else {\r\n isBigger = currentValue > value;\r\n }\r\n\r\n if (isBigger || isEqualMonth(currentValue, value)) {\r\n if (isBigger) {\r\n that._value = null;\r\n }\r\n that._changeView = true;\r\n }\r\n\r\n if (!that._changeView) {\r\n that._changeView = !!(options.month.content || options.month.empty);\r\n }\r\n\r\n that.navigate(that._value);\r\n\r\n that._toggle();\r\n },\r\n\r\n _toggle: function(toggle) {\r\n var that = this,\r\n options = that.options,\r\n link = that._today;\r\n\r\n if (toggle === undefined) {\r\n toggle = isInRange(getToday(), options.min, options.max);\r\n }\r\n\r\n if (link) {\r\n link.off(CLICK);\r\n\r\n if (toggle) {\r\n link.addClass(TODAY)\r\n .removeClass(DISABLED)\r\n .on(CLICK, proxy(that._todayClick, that));\r\n } else {\r\n link.removeClass(TODAY)\r\n .addClass(DISABLED)\r\n .on(CLICK, prevent);\r\n }\r\n }\r\n },\r\n\r\n _todayClick: function(e) {\r\n var that = this,\r\n depth = views[that.options.depth],\r\n today = getToday();\r\n\r\n e.preventDefault();\r\n\r\n if (that._view.compare(that._current, today) === 0 && that._index == depth) {\r\n that._changeView = false;\r\n }\r\n\r\n that._value = today;\r\n that.navigate(today, depth);\r\n\r\n that.trigger(CHANGE);\r\n },\r\n\r\n _templates: function() {\r\n var that = this,\r\n options = that.options,\r\n footer = options.footer,\r\n month = options.month,\r\n content = month.content,\r\n empty = month.empty;\r\n\r\n that.month = {\r\n content: template('' + (content || \"#=data.value#\") + '', { useWithBlock: !!content }),\r\n empty: template('' + (empty || \" \") + \"\", { useWithBlock: !!empty })\r\n };\r\n\r\n that.footer = footer !== false ? template(footer || '#= kendo.toString(data,\"D\",\"' + options.culture +'\") #', { useWithBlock: false }) : null;\r\n }\r\n });\r\n\r\n ui.plugin(Calendar);\r\n\r\n var calendar = {\r\n firstDayOfMonth: function (date) {\r\n return new DATE(\r\n date.getFullYear(),\r\n date.getMonth(),\r\n 1\r\n );\r\n },\r\n\r\n firstVisibleDay: function (date, calendarInfo) {\r\n calendarInfo = calendarInfo || kendo.culture().calendar;\r\n\r\n var firstDay = calendarInfo.firstDay,\r\n firstVisibleDay = new DATE(date.getFullYear(), date.getMonth(), 0, date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\r\n\r\n while (firstVisibleDay.getDay() != firstDay) {\r\n calendar.setTime(firstVisibleDay, -1 * MS_PER_DAY);\r\n }\r\n\r\n return firstVisibleDay;\r\n },\r\n\r\n setTime: function (date, time) {\r\n var tzOffsetBefore = date.getTimezoneOffset(),\r\n resultDATE = new DATE(date.getTime() + time),\r\n tzOffsetDiff = resultDATE.getTimezoneOffset() - tzOffsetBefore;\r\n\r\n date.setTime(resultDATE.getTime() + tzOffsetDiff * MS_PER_MINUTE);\r\n },\r\n views: [{\r\n name: MONTH,\r\n title: function(date, min, max, culture) {\r\n return getCalendarInfo(culture).months.names[date.getMonth()] + \" \" + date.getFullYear();\r\n },\r\n content: function(options) {\r\n var that = this,\r\n idx = 0,\r\n min = options.min,\r\n max = options.max,\r\n date = options.date,\r\n dates = options.dates,\r\n format = options.format,\r\n culture = options.culture,\r\n navigateUrl = options.url,\r\n hasUrl = navigateUrl && dates[0],\r\n currentCalendar = getCalendarInfo(culture),\r\n firstDayIdx = currentCalendar.firstDay,\r\n days = currentCalendar.days,\r\n names = shiftArray(days.names, firstDayIdx),\r\n shortNames = shiftArray(days.namesShort, firstDayIdx),\r\n start = calendar.firstVisibleDay(date, currentCalendar),\r\n firstDayOfMonth = that.first(date),\r\n lastDayOfMonth = that.last(date),\r\n toDateString = that.toDateString,\r\n today = new DATE(),\r\n html = '';\r\n\r\n for (; idx < 7; idx++) {\r\n html += '';\r\n }\r\n\r\n today = new DATE(today.getFullYear(), today.getMonth(), today.getDate());\r\n adjustDST(today, 0);\r\n today = +today;\r\n\r\n return view({\r\n cells: 42,\r\n perRow: 7,\r\n html: html += '',\r\n start: new DATE(start.getFullYear(), start.getMonth(), start.getDate()),\r\n min: new DATE(min.getFullYear(), min.getMonth(), min.getDate()),\r\n max: new DATE(max.getFullYear(), max.getMonth(), max.getDate()),\r\n content: options.content,\r\n empty: options.empty,\r\n setter: that.setDate,\r\n build: function(date) {\r\n var cssClass = [],\r\n day = date.getDay(),\r\n linkClass = \"\",\r\n url = \"#\";\r\n\r\n if (date < firstDayOfMonth || date > lastDayOfMonth) {\r\n cssClass.push(OTHERMONTH);\r\n }\r\n\r\n if (+date === today) {\r\n cssClass.push(\"k-today\");\r\n }\r\n\r\n if (day === 0 || day === 6) {\r\n cssClass.push(\"k-weekend\");\r\n }\r\n\r\n if (hasUrl && inArray(+date, dates)) {\r\n url = navigateUrl.replace(\"{0}\", kendo.toString(date, format, culture));\r\n linkClass = \" k-action-link\";\r\n }\r\n\r\n return {\r\n date: date,\r\n dates: dates,\r\n ns: kendo.ns,\r\n title: kendo.toString(date, \"D\", culture),\r\n value: date.getDate(),\r\n dateString: toDateString(date),\r\n cssClass: cssClass[0] ? ' class=\"' + cssClass.join(\" \") + '\"' : \"\",\r\n linkClass: linkClass,\r\n url: url\r\n };\r\n }\r\n });\r\n },\r\n first: function(date) {\r\n return calendar.firstDayOfMonth(date);\r\n },\r\n last: function(date) {\r\n var last = new DATE(date.getFullYear(), date.getMonth() + 1, 0),\r\n first = calendar.firstDayOfMonth(date),\r\n timeOffset = Math.abs(last.getTimezoneOffset() - first.getTimezoneOffset());\r\n\r\n if (timeOffset) {\r\n last.setHours(first.getHours() + (timeOffset / 60));\r\n }\r\n\r\n return last;\r\n },\r\n compare: function(date1, date2) {\r\n var result,\r\n month1 = date1.getMonth(),\r\n year1 = date1.getFullYear(),\r\n month2 = date2.getMonth(),\r\n year2 = date2.getFullYear();\r\n\r\n if (year1 > year2) {\r\n result = 1;\r\n } else if (year1 < year2) {\r\n result = -1;\r\n } else {\r\n result = month1 == month2 ? 0 : month1 > month2 ? 1 : -1;\r\n }\r\n\r\n return result;\r\n },\r\n setDate: function(date, value) {\r\n var hours = date.getHours();\r\n if (value instanceof DATE) {\r\n date.setFullYear(value.getFullYear(), value.getMonth(), value.getDate());\r\n } else {\r\n calendar.setTime(date, value * MS_PER_DAY);\r\n }\r\n adjustDST(date, hours);\r\n },\r\n toDateString: function(date) {\r\n return date.getFullYear() + \"/\" + date.getMonth() + \"/\" + date.getDate();\r\n }\r\n },\r\n {\r\n name: \"year\",\r\n title: function(date) {\r\n return date.getFullYear();\r\n },\r\n content: function(options) {\r\n var namesAbbr = getCalendarInfo(options.culture).months.namesAbbr,\r\n toDateString = this.toDateString,\r\n min = options.min,\r\n max = options.max;\r\n\r\n return view({\r\n min: new DATE(min.getFullYear(), min.getMonth(), 1),\r\n max: new DATE(max.getFullYear(), max.getMonth(), 1),\r\n start: new DATE(options.date.getFullYear(), 0, 1),\r\n setter: this.setDate,\r\n build: function(date) {\r\n return {\r\n value: namesAbbr[date.getMonth()],\r\n ns: kendo.ns,\r\n dateString: toDateString(date),\r\n cssClass: \"\"\r\n };\r\n }\r\n });\r\n },\r\n first: function(date) {\r\n return new DATE(date.getFullYear(), 0, date.getDate());\r\n },\r\n last: function(date) {\r\n return new DATE(date.getFullYear(), 11, date.getDate());\r\n },\r\n compare: function(date1, date2){\r\n return compare(date1, date2);\r\n },\r\n setDate: function(date, value) {\r\n var month,\r\n hours = date.getHours();\r\n\r\n if (value instanceof DATE) {\r\n month = value.getMonth();\r\n\r\n date.setFullYear(value.getFullYear(), month, date.getDate());\r\n\r\n if (month !== date.getMonth()) {\r\n date.setDate(0);\r\n }\r\n } else {\r\n month = date.getMonth() + value;\r\n\r\n date.setMonth(month);\r\n\r\n if (month > 11) {\r\n month -= 12;\r\n }\r\n\r\n if (month > 0 && date.getMonth() != month) {\r\n date.setDate(0);\r\n }\r\n }\r\n\r\n adjustDST(date, hours);\r\n },\r\n toDateString: function(date) {\r\n return date.getFullYear() + \"/\" + date.getMonth() + \"/1\";\r\n }\r\n },\r\n {\r\n name: \"decade\",\r\n title: function(date, min, max) {\r\n return title(date, min, max, 10);\r\n },\r\n content: function(options) {\r\n var year = options.date.getFullYear(),\r\n toDateString = this.toDateString;\r\n\r\n return view({\r\n start: new DATE(year - year % 10 - 1, 0, 1),\r\n min: new DATE(options.min.getFullYear(), 0, 1),\r\n max: new DATE(options.max.getFullYear(), 0, 1),\r\n setter: this.setDate,\r\n build: function(date, idx) {\r\n return {\r\n value: date.getFullYear(),\r\n ns: kendo.ns,\r\n dateString: toDateString(date),\r\n cssClass: idx === 0 || idx == 11 ? OTHERMONTHCLASS : \"\"\r\n };\r\n }\r\n });\r\n },\r\n first: function(date) {\r\n var year = date.getFullYear();\r\n return new DATE(year - year % 10, date.getMonth(), date.getDate());\r\n },\r\n last: function(date) {\r\n var year = date.getFullYear();\r\n return new DATE(year - year % 10 + 9, date.getMonth(), date.getDate());\r\n },\r\n compare: function(date1, date2) {\r\n return compare(date1, date2, 10);\r\n },\r\n setDate: function(date, value) {\r\n setDate(date, value, 1);\r\n },\r\n toDateString: function(date) {\r\n return date.getFullYear() + \"/0/1\";\r\n }\r\n },\r\n {\r\n name: CENTURY,\r\n title: function(date, min, max) {\r\n return title(date, min, max, 100);\r\n },\r\n content: function(options) {\r\n var year = options.date.getFullYear(),\r\n min = options.min.getFullYear(),\r\n max = options.max.getFullYear(),\r\n toDateString = this.toDateString,\r\n minYear = min,\r\n maxYear = max;\r\n\r\n minYear = minYear - minYear % 10;\r\n maxYear = maxYear - maxYear % 10;\r\n\r\n if (maxYear - minYear < 10) {\r\n maxYear = minYear + 9;\r\n }\r\n\r\n return view({\r\n start: new DATE(year - year % 100 - 10, 0, 1),\r\n min: new DATE(minYear, 0, 1),\r\n max: new DATE(maxYear, 0, 1),\r\n setter: this.setDate,\r\n build: function(date, idx) {\r\n var start = date.getFullYear(),\r\n end = start + 9;\r\n\r\n if (start < min) {\r\n start = min;\r\n }\r\n\r\n if (end > max) {\r\n end = max;\r\n }\r\n\r\n return {\r\n ns: kendo.ns,\r\n value: start + \" - \" + end,\r\n dateString: toDateString(date),\r\n cssClass: idx === 0 || idx == 11 ? OTHERMONTHCLASS : \"\"\r\n };\r\n }\r\n });\r\n },\r\n first: function(date) {\r\n var year = date.getFullYear();\r\n return new DATE(year - year % 100, date.getMonth(), date.getDate());\r\n },\r\n last: function(date) {\r\n var year = date.getFullYear();\r\n return new DATE(year - year % 100 + 99, date.getMonth(), date.getDate());\r\n },\r\n compare: function(date1, date2) {\r\n return compare(date1, date2, 100);\r\n },\r\n setDate: function(date, value) {\r\n setDate(date, value, 10);\r\n },\r\n toDateString: function(date) {\r\n var year = date.getFullYear();\r\n return (year - year % 10) + \"/0/1\";\r\n }\r\n }]\r\n };\r\n\r\n function title(date, min, max, modular) {\r\n var start = date.getFullYear(),\r\n minYear = min.getFullYear(),\r\n maxYear = max.getFullYear(),\r\n end;\r\n\r\n start = start - start % modular;\r\n end = start + (modular - 1);\r\n\r\n if (start < minYear) {\r\n start = minYear;\r\n }\r\n if (end > maxYear) {\r\n end = maxYear;\r\n }\r\n\r\n return start + \"-\" + end;\r\n }\r\n\r\n function view(options) {\r\n var idx = 0,\r\n data,\r\n min = options.min,\r\n max = options.max,\r\n start = options.start,\r\n setter = options.setter,\r\n build = options.build,\r\n length = options.cells || 12,\r\n cellsPerRow = options.perRow || 4,\r\n content = options.content || cellTemplate,\r\n empty = options.empty || emptyCellTemplate,\r\n html = options.html || '
    ' + shortNames[idx] + '
    ';\r\n\r\n for(; idx < length; idx++) {\r\n if (idx > 0 && idx % cellsPerRow === 0) {\r\n html += '';\r\n }\r\n\r\n data = build(start, idx);\r\n\r\n html += isInRange(start, min, max) ? content(data) : empty(data);\r\n\r\n setter(start, 1);\r\n }\r\n\r\n return html + \"
    \";\r\n }\r\n\r\n function compare(date1, date2, modifier) {\r\n var year1 = date1.getFullYear(),\r\n start = date2.getFullYear(),\r\n end = start,\r\n result = 0;\r\n\r\n if (modifier) {\r\n start = start - start % modifier;\r\n end = start - start % modifier + modifier - 1;\r\n }\r\n\r\n if (year1 > end) {\r\n result = 1;\r\n } else if (year1 < start) {\r\n result = -1;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n function getToday() {\r\n var today = new DATE();\r\n return new DATE(today.getFullYear(), today.getMonth(), today.getDate());\r\n }\r\n\r\n function restrictValue (value, min, max) {\r\n var today = getToday();\r\n\r\n if (value) {\r\n today = new DATE(+value);\r\n }\r\n\r\n if (min > today) {\r\n today = new DATE(+min);\r\n } else if (max < today) {\r\n today = new DATE(+max);\r\n }\r\n return today;\r\n }\r\n\r\n function isInRange(date, min, max) {\r\n return +date >= +min && +date <= +max;\r\n }\r\n\r\n function shiftArray(array, idx) {\r\n return array.slice(idx).concat(array.slice(0, idx));\r\n }\r\n\r\n function setDate(date, value, multiplier) {\r\n value = value instanceof DATE ? value.getFullYear() : date.getFullYear() + multiplier * value;\r\n date.setFullYear(value);\r\n }\r\n\r\n function mousetoggle(e) {\r\n $(this).toggleClass(HOVER, MOUSEENTER.indexOf(e.type) > -1 || e.type == FOCUS);\r\n }\r\n\r\n function prevent (e) {\r\n e.preventDefault();\r\n }\r\n\r\n function getCalendarInfo(culture) {\r\n return getCulture(culture).calendars.standard;\r\n }\r\n\r\n function normalize(options) {\r\n var start = views[options.start],\r\n depth = views[options.depth],\r\n culture = getCulture(options.culture);\r\n\r\n options.format = extractFormat(options.format || culture.calendars.standard.patterns.d);\r\n\r\n if (isNaN(start)) {\r\n start = 0;\r\n options.start = MONTH;\r\n }\r\n\r\n if (depth === undefined || depth > start) {\r\n options.depth = MONTH;\r\n }\r\n\r\n if (!options.dates) {\r\n options.dates = [];\r\n }\r\n }\r\n\r\n function makeUnselectable(element) {\r\n if (isIE8) {\r\n element.find(\"*\").attr(\"unselectable\", \"on\");\r\n }\r\n }\r\n\r\n function inArray(date, dates) {\r\n for(var i = 0, length = dates.length; i < length; i++) {\r\n if (date === +dates[i]) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n function isEqualDatePart(value1, value2) {\r\n if (value1) {\r\n return value1.getFullYear() === value2.getFullYear() &&\r\n value1.getMonth() === value2.getMonth() &&\r\n value1.getDate() === value2.getDate();\r\n }\r\n\r\n return false;\r\n }\r\n\r\n function isEqualMonth(value1, value2) {\r\n if (value1) {\r\n return value1.getFullYear() === value2.getFullYear() &&\r\n value1.getMonth() === value2.getMonth();\r\n }\r\n\r\n return false;\r\n }\r\n\r\n calendar.isEqualDatePart = isEqualDatePart;\r\n calendar.makeUnselectable = makeUnselectable;\r\n calendar.restrictValue = restrictValue;\r\n calendar.isInRange = isInRange;\r\n calendar.normalize = normalize;\r\n calendar.viewsEnum = views;\r\n\r\n kendo.calendar = calendar;\r\n})(window.kendo.jQuery);\r\n\r\nreturn window.kendo;\r\n\r\n}, typeof define == 'function' && define.amd ? define : function(_, f){ f(); });","/*\r\n* Kendo UI Complete v2014.1.318 (http://kendoui.com)\r\n* Copyright 2014 Telerik AD. All rights reserved.\r\n*\r\n* Kendo UI Complete commercial licenses may be obtained at\r\n* http://www.telerik.com/purchase/license-agreement/kendo-ui-complete\r\n* If you do not own a commercial license, this file shall be governed by the trial license terms.\r\n*/\r\n(function(f, define){\r\n define([], f);\r\n})(function(){\r\n\r\n/*jshint eqnull: true, loopfunc: true, evil: true, boss: true, freeze: false*/\r\n(function($, undefined) {\r\n var kendo = window.kendo = window.kendo || { cultures: {} },\r\n extend = $.extend,\r\n each = $.each,\r\n isArray = $.isArray,\r\n proxy = $.proxy,\r\n noop = $.noop,\r\n math = Math,\r\n Template,\r\n JSON = window.JSON || {},\r\n support = {},\r\n percentRegExp = /%/,\r\n formatRegExp = /\\{(\\d+)(:[^\\}]+)?\\}/g,\r\n boxShadowRegExp = /(\\d+(?:\\.?)\\d*)px\\s*(\\d+(?:\\.?)\\d*)px\\s*(\\d+(?:\\.?)\\d*)px\\s*(\\d+)?/i,\r\n numberRegExp = /^(\\+|-?)\\d+(\\.?)\\d*$/,\r\n FUNCTION = \"function\",\r\n STRING = \"string\",\r\n NUMBER = \"number\",\r\n OBJECT = \"object\",\r\n NULL = \"null\",\r\n BOOLEAN = \"boolean\",\r\n UNDEFINED = \"undefined\",\r\n getterCache = {},\r\n setterCache = {},\r\n slice = [].slice,\r\n globalize = window.Globalize;\r\n\r\n kendo.version = \"2014.1.318\";\r\n\r\n function Class() {}\r\n\r\n Class.extend = function(proto) {\r\n var base = function() {},\r\n member,\r\n that = this,\r\n subclass = proto && proto.init ? proto.init : function () {\r\n that.apply(this, arguments);\r\n },\r\n fn;\r\n\r\n base.prototype = that.prototype;\r\n fn = subclass.fn = subclass.prototype = new base();\r\n\r\n for (member in proto) {\r\n if (proto[member] != null && proto[member].constructor === Object) {\r\n // Merge object members\r\n fn[member] = extend(true, {}, base.prototype[member], proto[member]);\r\n } else {\r\n fn[member] = proto[member];\r\n }\r\n }\r\n\r\n fn.constructor = subclass;\r\n subclass.extend = that.extend;\r\n\r\n return subclass;\r\n };\r\n\r\n Class.prototype._initOptions = function(options) {\r\n this.options = deepExtend({}, this.options, options);\r\n };\r\n\r\n var isFunction = kendo.isFunction = function(fn) {\r\n return typeof fn === \"function\";\r\n };\r\n\r\n var preventDefault = function() {\r\n this._defaultPrevented = true;\r\n };\r\n\r\n var isDefaultPrevented = function() {\r\n return this._defaultPrevented === true;\r\n };\r\n\r\n var Observable = Class.extend({\r\n init: function() {\r\n this._events = {};\r\n },\r\n\r\n bind: function(eventName, handlers, one) {\r\n var that = this,\r\n idx,\r\n eventNames = typeof eventName === STRING ? [eventName] : eventName,\r\n length,\r\n original,\r\n handler,\r\n handlersIsFunction = typeof handlers === FUNCTION,\r\n events;\r\n\r\n if (handlers === undefined) {\r\n for (idx in eventName) {\r\n that.bind(idx, eventName[idx]);\r\n }\r\n return that;\r\n }\r\n\r\n for (idx = 0, length = eventNames.length; idx < length; idx++) {\r\n eventName = eventNames[idx];\r\n\r\n handler = handlersIsFunction ? handlers : handlers[eventName];\r\n\r\n if (handler) {\r\n if (one) {\r\n original = handler;\r\n handler = function() {\r\n that.unbind(eventName, handler);\r\n original.apply(that, arguments);\r\n };\r\n }\r\n events = that._events[eventName] = that._events[eventName] || [];\r\n events.push(handler);\r\n }\r\n }\r\n\r\n return that;\r\n },\r\n\r\n one: function(eventNames, handlers) {\r\n return this.bind(eventNames, handlers, true);\r\n },\r\n\r\n first: function(eventName, handlers) {\r\n var that = this,\r\n idx,\r\n eventNames = typeof eventName === STRING ? [eventName] : eventName,\r\n length,\r\n handler,\r\n handlersIsFunction = typeof handlers === FUNCTION,\r\n events;\r\n\r\n for (idx = 0, length = eventNames.length; idx < length; idx++) {\r\n eventName = eventNames[idx];\r\n\r\n handler = handlersIsFunction ? handlers : handlers[eventName];\r\n\r\n if (handler) {\r\n events = that._events[eventName] = that._events[eventName] || [];\r\n events.unshift(handler);\r\n }\r\n }\r\n\r\n return that;\r\n },\r\n\r\n trigger: function(eventName, e) {\r\n var that = this,\r\n events = that._events[eventName],\r\n idx,\r\n length;\r\n\r\n if (events) {\r\n e = e || {};\r\n\r\n e.sender = that;\r\n\r\n e._defaultPrevented = false;\r\n\r\n e.preventDefault = preventDefault;\r\n\r\n e.isDefaultPrevented = isDefaultPrevented;\r\n\r\n events = events.slice();\r\n\r\n for (idx = 0, length = events.length; idx < length; idx++) {\r\n events[idx].call(that, e);\r\n }\r\n\r\n return e._defaultPrevented === true;\r\n }\r\n\r\n return false;\r\n },\r\n\r\n unbind: function(eventName, handler) {\r\n var that = this,\r\n events = that._events[eventName],\r\n idx;\r\n\r\n if (eventName === undefined) {\r\n that._events = {};\r\n } else if (events) {\r\n if (handler) {\r\n for (idx = events.length - 1; idx >= 0; idx--) {\r\n if (events[idx] === handler) {\r\n events.splice(idx, 1);\r\n }\r\n }\r\n } else {\r\n that._events[eventName] = [];\r\n }\r\n }\r\n\r\n return that;\r\n }\r\n });\r\n\r\n\r\n function compilePart(part, stringPart) {\r\n if (stringPart) {\r\n return \"'\" +\r\n part.split(\"'\").join(\"\\\\'\")\r\n .split('\\\\\"').join('\\\\\\\\\\\\\"')\r\n .replace(/\\n/g, \"\\\\n\")\r\n .replace(/\\r/g, \"\\\\r\")\r\n .replace(/\\t/g, \"\\\\t\") + \"'\";\r\n } else {\r\n var first = part.charAt(0),\r\n rest = part.substring(1);\r\n\r\n if (first === \"=\") {\r\n return \"+(\" + rest + \")+\";\r\n } else if (first === \":\") {\r\n return \"+e(\" + rest + \")+\";\r\n } else {\r\n return \";\" + part + \";o+=\";\r\n }\r\n }\r\n }\r\n\r\n var argumentNameRegExp = /^\\w+/,\r\n encodeRegExp = /\\$\\{([^}]*)\\}/g,\r\n escapedCurlyRegExp = /\\\\\\}/g,\r\n curlyRegExp = /__CURLY__/g,\r\n escapedSharpRegExp = /\\\\#/g,\r\n sharpRegExp = /__SHARP__/g,\r\n zeros = [\"\", \"0\", \"00\", \"000\", \"0000\"];\r\n\r\n Template = {\r\n paramName: \"data\", // name of the parameter of the generated template\r\n useWithBlock: true, // whether to wrap the template in a with() block\r\n render: function(template, data) {\r\n var idx,\r\n length,\r\n html = \"\";\r\n\r\n for (idx = 0, length = data.length; idx < length; idx++) {\r\n html += template(data[idx]);\r\n }\r\n\r\n return html;\r\n },\r\n compile: function(template, options) {\r\n var settings = extend({}, this, options),\r\n paramName = settings.paramName,\r\n argumentName = paramName.match(argumentNameRegExp)[0],\r\n useWithBlock = settings.useWithBlock,\r\n functionBody = \"var o,e=kendo.htmlEncode;\",\r\n fn,\r\n parts,\r\n idx;\r\n\r\n if (isFunction(template)) {\r\n if (template.length === 2) {\r\n //looks like jQuery.template\r\n return function(d) {\r\n return template($, { data: d }).join(\"\");\r\n };\r\n }\r\n return template;\r\n }\r\n\r\n functionBody += useWithBlock ? \"with(\" + paramName + \"){\" : \"\";\r\n\r\n functionBody += \"o=\";\r\n\r\n parts = template\r\n .replace(escapedCurlyRegExp, \"__CURLY__\")\r\n .replace(encodeRegExp, \"#=e($1)#\")\r\n .replace(curlyRegExp, \"}\")\r\n .replace(escapedSharpRegExp, \"__SHARP__\")\r\n .split(\"#\");\r\n\r\n for (idx = 0; idx < parts.length; idx ++) {\r\n functionBody += compilePart(parts[idx], idx % 2 === 0);\r\n }\r\n\r\n functionBody += useWithBlock ? \";}\" : \";\";\r\n\r\n functionBody += \"return o;\";\r\n\r\n functionBody = functionBody.replace(sharpRegExp, \"#\");\r\n\r\n try {\r\n fn = new Function(argumentName, functionBody);\r\n fn._slotCount = Math.floor(parts.length / 2);\r\n return fn;\r\n } catch(e) {\r\n throw new Error(kendo.format(\"Invalid template:'{0}' Generated code:'{1}'\", template, functionBody));\r\n }\r\n }\r\n };\r\n\r\nfunction pad(number, digits, end) {\r\n number = number + \"\";\r\n digits = digits || 2;\r\n end = digits - number.length;\r\n\r\n if (end) {\r\n return zeros[digits].substring(0, end) + number;\r\n }\r\n\r\n return number;\r\n}\r\n\r\n //JSON stringify\r\n(function() {\r\n var escapable = /[\\\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g,\r\n gap,\r\n indent,\r\n meta = {\r\n \"\\b\": \"\\\\b\",\r\n \"\\t\": \"\\\\t\",\r\n \"\\n\": \"\\\\n\",\r\n \"\\f\": \"\\\\f\",\r\n \"\\r\": \"\\\\r\",\r\n \"\\\"\" : '\\\\\"',\r\n \"\\\\\": \"\\\\\\\\\"\r\n },\r\n rep,\r\n toString = {}.toString;\r\n\r\n\r\n if (typeof Date.prototype.toJSON !== FUNCTION) {\r\n\r\n Date.prototype.toJSON = function () {\r\n var that = this;\r\n\r\n return isFinite(that.valueOf()) ?\r\n pad(that.getUTCFullYear(), 4) + \"-\" +\r\n pad(that.getUTCMonth() + 1) + \"-\" +\r\n pad(that.getUTCDate()) + \"T\" +\r\n pad(that.getUTCHours()) + \":\" +\r\n pad(that.getUTCMinutes()) + \":\" +\r\n pad(that.getUTCSeconds()) + \"Z\" : null;\r\n };\r\n\r\n String.prototype.toJSON = Number.prototype.toJSON = Boolean.prototype.toJSON = function () {\r\n return this.valueOf();\r\n };\r\n }\r\n\r\n function quote(string) {\r\n escapable.lastIndex = 0;\r\n return escapable.test(string) ? \"\\\"\" + string.replace(escapable, function (a) {\r\n var c = meta[a];\r\n return typeof c === STRING ? c :\r\n \"\\\\u\" + (\"0000\" + a.charCodeAt(0).toString(16)).slice(-4);\r\n }) + \"\\\"\" : \"\\\"\" + string + \"\\\"\";\r\n }\r\n\r\n function str(key, holder) {\r\n var i,\r\n k,\r\n v,\r\n length,\r\n mind = gap,\r\n partial,\r\n value = holder[key],\r\n type;\r\n\r\n if (value && typeof value === OBJECT && typeof value.toJSON === FUNCTION) {\r\n value = value.toJSON(key);\r\n }\r\n\r\n if (typeof rep === FUNCTION) {\r\n value = rep.call(holder, key, value);\r\n }\r\n\r\n type = typeof value;\r\n if (type === STRING) {\r\n return quote(value);\r\n } else if (type === NUMBER) {\r\n return isFinite(value) ? String(value) : NULL;\r\n } else if (type === BOOLEAN || type === NULL) {\r\n return String(value);\r\n } else if (type === OBJECT) {\r\n if (!value) {\r\n return NULL;\r\n }\r\n gap += indent;\r\n partial = [];\r\n if (toString.apply(value) === \"[object Array]\") {\r\n length = value.length;\r\n for (i = 0; i < length; i++) {\r\n partial[i] = str(i, value) || NULL;\r\n }\r\n v = partial.length === 0 ? \"[]\" : gap ?\r\n \"[\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"]\" :\r\n \"[\" + partial.join(\",\") + \"]\";\r\n gap = mind;\r\n return v;\r\n }\r\n if (rep && typeof rep === OBJECT) {\r\n length = rep.length;\r\n for (i = 0; i < length; i++) {\r\n if (typeof rep[i] === STRING) {\r\n k = rep[i];\r\n v = str(k, value);\r\n if (v) {\r\n partial.push(quote(k) + (gap ? \": \" : \":\") + v);\r\n }\r\n }\r\n }\r\n } else {\r\n for (k in value) {\r\n if (Object.hasOwnProperty.call(value, k)) {\r\n v = str(k, value);\r\n if (v) {\r\n partial.push(quote(k) + (gap ? \": \" : \":\") + v);\r\n }\r\n }\r\n }\r\n }\r\n\r\n v = partial.length === 0 ? \"{}\" : gap ?\r\n \"{\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"}\" :\r\n \"{\" + partial.join(\",\") + \"}\";\r\n gap = mind;\r\n return v;\r\n }\r\n }\r\n\r\n if (typeof JSON.stringify !== FUNCTION) {\r\n JSON.stringify = function (value, replacer, space) {\r\n var i;\r\n gap = \"\";\r\n indent = \"\";\r\n\r\n if (typeof space === NUMBER) {\r\n for (i = 0; i < space; i += 1) {\r\n indent += \" \";\r\n }\r\n\r\n } else if (typeof space === STRING) {\r\n indent = space;\r\n }\r\n\r\n rep = replacer;\r\n if (replacer && typeof replacer !== FUNCTION && (typeof replacer !== OBJECT || typeof replacer.length !== NUMBER)) {\r\n throw new Error(\"JSON.stringify\");\r\n }\r\n\r\n return str(\"\", {\"\": value});\r\n };\r\n }\r\n})();\r\n\r\n// Date and Number formatting\r\n(function() {\r\n var dateFormatRegExp = /dddd|ddd|dd|d|MMMM|MMM|MM|M|yyyy|yy|HH|H|hh|h|mm|m|fff|ff|f|tt|ss|s|\"[^\"]*\"|'[^']*'/g,\r\n standardFormatRegExp = /^(n|c|p|e)(\\d*)$/i,\r\n literalRegExp = /(\\\\.)|(['][^']*[']?)|([\"][^\"]*[\"]?)/g,\r\n commaRegExp = /\\,/g,\r\n EMPTY = \"\",\r\n POINT = \".\",\r\n COMMA = \",\",\r\n SHARP = \"#\",\r\n ZERO = \"0\",\r\n PLACEHOLDER = \"??\",\r\n EN = \"en-US\",\r\n objectToString = {}.toString;\r\n\r\n //cultures\r\n kendo.cultures[\"en-US\"] = {\r\n name: EN,\r\n numberFormat: {\r\n pattern: [\"-n\"],\r\n decimals: 2,\r\n \",\": \",\",\r\n \".\": \".\",\r\n groupSize: [3],\r\n percent: {\r\n pattern: [\"-n %\", \"n %\"],\r\n decimals: 2,\r\n \",\": \",\",\r\n \".\": \".\",\r\n groupSize: [3],\r\n symbol: \"%\"\r\n },\r\n currency: {\r\n pattern: [\"($n)\", \"$n\"],\r\n decimals: 2,\r\n \",\": \",\",\r\n \".\": \".\",\r\n groupSize: [3],\r\n symbol: \"$\"\r\n }\r\n },\r\n calendars: {\r\n standard: {\r\n days: {\r\n names: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\r\n namesAbbr: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\r\n namesShort: [ \"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\" ]\r\n },\r\n months: {\r\n names: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\r\n namesAbbr: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\r\n },\r\n AM: [ \"AM\", \"am\", \"AM\" ],\r\n PM: [ \"PM\", \"pm\", \"PM\" ],\r\n patterns: {\r\n d: \"M/d/yyyy\",\r\n D: \"dddd, MMMM dd, yyyy\",\r\n F: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\r\n g: \"M/d/yyyy h:mm tt\",\r\n G: \"M/d/yyyy h:mm:ss tt\",\r\n m: \"MMMM dd\",\r\n M: \"MMMM dd\",\r\n s: \"yyyy'-'MM'-'ddTHH':'mm':'ss\",\r\n t: \"h:mm tt\",\r\n T: \"h:mm:ss tt\",\r\n u: \"yyyy'-'MM'-'dd HH':'mm':'ss'Z'\",\r\n y: \"MMMM, yyyy\",\r\n Y: \"MMMM, yyyy\"\r\n },\r\n \"/\": \"/\",\r\n \":\": \":\",\r\n firstDay: 0,\r\n twoDigitYearMax: 2029\r\n }\r\n }\r\n };\r\n\r\n\r\n function findCulture(culture) {\r\n if (culture) {\r\n if (culture.numberFormat) {\r\n return culture;\r\n }\r\n\r\n if (typeof culture === STRING) {\r\n var cultures = kendo.cultures;\r\n return cultures[culture] || cultures[culture.split(\"-\")[0]] || null;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n function getCulture(culture) {\r\n if (culture) {\r\n culture = findCulture(culture);\r\n }\r\n\r\n return culture || kendo.cultures.current;\r\n }\r\n\r\n function expandNumberFormat(numberFormat) {\r\n numberFormat.groupSizes = numberFormat.groupSize;\r\n numberFormat.percent.groupSizes = numberFormat.percent.groupSize;\r\n numberFormat.currency.groupSizes = numberFormat.currency.groupSize;\r\n }\r\n\r\n kendo.culture = function(cultureName) {\r\n var cultures = kendo.cultures, culture;\r\n\r\n if (cultureName !== undefined) {\r\n culture = findCulture(cultureName) || cultures[EN];\r\n culture.calendar = culture.calendars.standard;\r\n cultures.current = culture;\r\n\r\n if (globalize) {\r\n expandNumberFormat(culture.numberFormat);\r\n }\r\n\r\n } else {\r\n return cultures.current;\r\n }\r\n };\r\n\r\n kendo.findCulture = findCulture;\r\n kendo.getCulture = getCulture;\r\n\r\n //set current culture to en-US.\r\n kendo.culture(EN);\r\n\r\n function formatDate(date, format, culture) {\r\n culture = getCulture(culture);\r\n\r\n var calendar = culture.calendars.standard,\r\n days = calendar.days,\r\n months = calendar.months;\r\n\r\n format = calendar.patterns[format] || format;\r\n\r\n return format.replace(dateFormatRegExp, function (match) {\r\n var result;\r\n\r\n if (match === \"d\") {\r\n result = date.getDate();\r\n } else if (match === \"dd\") {\r\n result = pad(date.getDate());\r\n } else if (match === \"ddd\") {\r\n result = days.namesAbbr[date.getDay()];\r\n } else if (match === \"dddd\") {\r\n result = days.names[date.getDay()];\r\n } else if (match === \"M\") {\r\n result = date.getMonth() + 1;\r\n } else if (match === \"MM\") {\r\n result = pad(date.getMonth() + 1);\r\n } else if (match === \"MMM\") {\r\n result = months.namesAbbr[date.getMonth()];\r\n } else if (match === \"MMMM\") {\r\n result = months.names[date.getMonth()];\r\n } else if (match === \"yy\") {\r\n result = pad(date.getFullYear() % 100);\r\n } else if (match === \"yyyy\") {\r\n result = pad(date.getFullYear(), 4);\r\n } else if (match === \"h\" ) {\r\n result = date.getHours() % 12 || 12;\r\n } else if (match === \"hh\") {\r\n result = pad(date.getHours() % 12 || 12);\r\n } else if (match === \"H\") {\r\n result = date.getHours();\r\n } else if (match === \"HH\") {\r\n result = pad(date.getHours());\r\n } else if (match === \"m\") {\r\n result = date.getMinutes();\r\n } else if (match === \"mm\") {\r\n result = pad(date.getMinutes());\r\n } else if (match === \"s\") {\r\n result = date.getSeconds();\r\n } else if (match === \"ss\") {\r\n result = pad(date.getSeconds());\r\n } else if (match === \"f\") {\r\n result = math.floor(date.getMilliseconds() / 100);\r\n } else if (match === \"ff\") {\r\n result = math.floor(date.getMilliseconds() / 10);\r\n } else if (match === \"fff\") {\r\n result = date.getMilliseconds();\r\n } else if (match === \"tt\") {\r\n result = date.getHours() < 12 ? calendar.AM[0] : calendar.PM[0];\r\n }\r\n\r\n return result !== undefined ? result : match.slice(1, match.length - 1);\r\n });\r\n }\r\n\r\n //number formatting\r\n function formatNumber(number, format, culture) {\r\n culture = getCulture(culture);\r\n\r\n var numberFormat = culture.numberFormat,\r\n groupSize = numberFormat.groupSize[0],\r\n groupSeparator = numberFormat[COMMA],\r\n decimal = numberFormat[POINT],\r\n precision = numberFormat.decimals,\r\n pattern = numberFormat.pattern[0],\r\n literals = [],\r\n symbol,\r\n isCurrency, isPercent,\r\n customPrecision,\r\n formatAndPrecision,\r\n negative = number < 0,\r\n integer,\r\n fraction,\r\n integerLength,\r\n fractionLength,\r\n replacement = EMPTY,\r\n value = EMPTY,\r\n idx,\r\n length,\r\n ch,\r\n hasGroup,\r\n hasNegativeFormat,\r\n decimalIndex,\r\n sharpIndex,\r\n zeroIndex,\r\n hasZero, hasSharp,\r\n percentIndex,\r\n currencyIndex,\r\n startZeroIndex,\r\n start = -1,\r\n end;\r\n\r\n //return empty string if no number\r\n if (number === undefined) {\r\n return EMPTY;\r\n }\r\n\r\n if (!isFinite(number)) {\r\n return number;\r\n }\r\n\r\n //if no format then return number.toString() or number.toLocaleString() if culture.name is not defined\r\n if (!format) {\r\n return culture.name.length ? number.toLocaleString() : number.toString();\r\n }\r\n\r\n formatAndPrecision = standardFormatRegExp.exec(format);\r\n\r\n // standard formatting\r\n if (formatAndPrecision) {\r\n format = formatAndPrecision[1].toLowerCase();\r\n\r\n isCurrency = format === \"c\";\r\n isPercent = format === \"p\";\r\n\r\n if (isCurrency || isPercent) {\r\n //get specific number format information if format is currency or percent\r\n numberFormat = isCurrency ? numberFormat.currency : numberFormat.percent;\r\n groupSize = numberFormat.groupSize[0];\r\n groupSeparator = numberFormat[COMMA];\r\n decimal = numberFormat[POINT];\r\n precision = numberFormat.decimals;\r\n symbol = numberFormat.symbol;\r\n pattern = numberFormat.pattern[negative ? 0 : 1];\r\n }\r\n\r\n customPrecision = formatAndPrecision[2];\r\n\r\n if (customPrecision) {\r\n precision = +customPrecision;\r\n }\r\n\r\n //return number in exponential format\r\n if (format === \"e\") {\r\n return customPrecision ? number.toExponential(precision) : number.toExponential(); // toExponential() and toExponential(undefined) differ in FF #653438.\r\n }\r\n\r\n // multiply if format is percent\r\n if (isPercent) {\r\n number *= 100;\r\n }\r\n\r\n number = round(number, precision);\r\n negative = number < 0;\r\n number = number.split(POINT);\r\n\r\n integer = number[0];\r\n fraction = number[1];\r\n\r\n //exclude \"-\" if number is negative.\r\n if (negative) {\r\n integer = integer.substring(1);\r\n }\r\n\r\n value = integer;\r\n integerLength = integer.length;\r\n\r\n //add group separator to the number if it is longer enough\r\n if (integerLength >= groupSize) {\r\n value = EMPTY;\r\n for (idx = 0; idx < integerLength; idx++) {\r\n if (idx > 0 && (integerLength - idx) % groupSize === 0) {\r\n value += groupSeparator;\r\n }\r\n value += integer.charAt(idx);\r\n }\r\n }\r\n\r\n if (fraction) {\r\n value += decimal + fraction;\r\n }\r\n\r\n if (format === \"n\" && !negative) {\r\n return value;\r\n }\r\n\r\n number = EMPTY;\r\n\r\n for (idx = 0, length = pattern.length; idx < length; idx++) {\r\n ch = pattern.charAt(idx);\r\n\r\n if (ch === \"n\") {\r\n number += value;\r\n } else if (ch === \"$\" || ch === \"%\") {\r\n number += symbol;\r\n } else {\r\n number += ch;\r\n }\r\n }\r\n\r\n return number;\r\n }\r\n\r\n //custom formatting\r\n //\r\n //separate format by sections.\r\n\r\n //make number positive\r\n if (negative) {\r\n number = -number;\r\n }\r\n\r\n if (format.indexOf(\"'\") > -1 || format.indexOf(\"\\\"\") > -1 || format.indexOf(\"\\\\\") > -1) {\r\n format = format.replace(literalRegExp, function (match) {\r\n var quoteChar = match.charAt(0).replace(\"\\\\\", \"\"),\r\n literal = match.slice(1).replace(quoteChar, \"\");\r\n\r\n literals.push(literal);\r\n\r\n return PLACEHOLDER;\r\n });\r\n }\r\n\r\n format = format.split(\";\");\r\n if (negative && format[1]) {\r\n //get negative format\r\n format = format[1];\r\n hasNegativeFormat = true;\r\n } else if (number === 0) {\r\n //format for zeros\r\n format = format[2] || format[0];\r\n if (format.indexOf(SHARP) == -1 && format.indexOf(ZERO) == -1) {\r\n //return format if it is string constant.\r\n return format;\r\n }\r\n } else {\r\n format = format[0];\r\n }\r\n\r\n percentIndex = format.indexOf(\"%\");\r\n currencyIndex = format.indexOf(\"$\");\r\n\r\n isPercent = percentIndex != -1;\r\n isCurrency = currencyIndex != -1;\r\n\r\n //multiply number if the format has percent\r\n if (isPercent) {\r\n number *= 100;\r\n }\r\n\r\n if (isCurrency && format[currencyIndex - 1] === \"\\\\\") {\r\n format = format.split(\"\\\\\").join(\"\");\r\n isCurrency = false;\r\n }\r\n\r\n if (isCurrency || isPercent) {\r\n //get specific number format information if format is currency or percent\r\n numberFormat = isCurrency ? numberFormat.currency : numberFormat.percent;\r\n groupSize = numberFormat.groupSize[0];\r\n groupSeparator = numberFormat[COMMA];\r\n decimal = numberFormat[POINT];\r\n precision = numberFormat.decimals;\r\n symbol = numberFormat.symbol;\r\n }\r\n\r\n hasGroup = format.indexOf(COMMA) > -1;\r\n if (hasGroup) {\r\n format = format.replace(commaRegExp, EMPTY);\r\n }\r\n\r\n decimalIndex = format.indexOf(POINT);\r\n length = format.length;\r\n\r\n if (decimalIndex != -1) {\r\n fraction = number.toString().split(\"e\");\r\n if (fraction[1]) {\r\n fraction = round(number, Math.abs(fraction[1]));\r\n } else {\r\n fraction = fraction[0];\r\n }\r\n fraction = fraction.split(POINT)[1] || EMPTY;\r\n zeroIndex = format.lastIndexOf(ZERO) - decimalIndex;\r\n sharpIndex = format.lastIndexOf(SHARP) - decimalIndex;\r\n hasZero = zeroIndex > -1;\r\n hasSharp = sharpIndex > -1;\r\n idx = fraction.length;\r\n\r\n if (!hasZero && !hasSharp) {\r\n format = format.substring(0, decimalIndex) + format.substring(decimalIndex + 1);\r\n length = format.length;\r\n decimalIndex = -1;\r\n idx = 0;\r\n } if (hasZero && zeroIndex > sharpIndex) {\r\n idx = zeroIndex;\r\n } else if (sharpIndex > zeroIndex) {\r\n if (hasSharp && idx > sharpIndex) {\r\n idx = sharpIndex;\r\n } else if (hasZero && idx < zeroIndex) {\r\n idx = zeroIndex;\r\n }\r\n }\r\n\r\n if (idx > -1) {\r\n number = round(number, idx);\r\n }\r\n } else {\r\n number = round(number);\r\n }\r\n\r\n sharpIndex = format.indexOf(SHARP);\r\n startZeroIndex = zeroIndex = format.indexOf(ZERO);\r\n\r\n //define the index of the first digit placeholder\r\n if (sharpIndex == -1 && zeroIndex != -1) {\r\n start = zeroIndex;\r\n } else if (sharpIndex != -1 && zeroIndex == -1) {\r\n start = sharpIndex;\r\n } else {\r\n start = sharpIndex > zeroIndex ? zeroIndex : sharpIndex;\r\n }\r\n\r\n sharpIndex = format.lastIndexOf(SHARP);\r\n zeroIndex = format.lastIndexOf(ZERO);\r\n\r\n //define the index of the last digit placeholder\r\n if (sharpIndex == -1 && zeroIndex != -1) {\r\n end = zeroIndex;\r\n } else if (sharpIndex != -1 && zeroIndex == -1) {\r\n end = sharpIndex;\r\n } else {\r\n end = sharpIndex > zeroIndex ? sharpIndex : zeroIndex;\r\n }\r\n\r\n if (start == length) {\r\n end = start;\r\n }\r\n\r\n if (start != -1) {\r\n value = number.toString().split(POINT);\r\n integer = value[0];\r\n fraction = value[1] || EMPTY;\r\n\r\n integerLength = integer.length;\r\n fractionLength = fraction.length;\r\n\r\n if (negative && (number * -1) >= 0) {\r\n negative = false;\r\n }\r\n\r\n //add group separator to the number if it is longer enough\r\n if (hasGroup) {\r\n if (integerLength === groupSize && integerLength < decimalIndex - startZeroIndex) {\r\n integer = groupSeparator + integer;\r\n } else if (integerLength > groupSize) {\r\n value = EMPTY;\r\n for (idx = 0; idx < integerLength; idx++) {\r\n if (idx > 0 && (integerLength - idx) % groupSize === 0) {\r\n value += groupSeparator;\r\n }\r\n value += integer.charAt(idx);\r\n }\r\n\r\n integer = value;\r\n }\r\n }\r\n\r\n number = format.substring(0, start);\r\n\r\n if (negative && !hasNegativeFormat) {\r\n number += \"-\";\r\n }\r\n\r\n for (idx = start; idx < length; idx++) {\r\n ch = format.charAt(idx);\r\n\r\n if (decimalIndex == -1) {\r\n if (end - idx < integerLength) {\r\n number += integer;\r\n break;\r\n }\r\n } else {\r\n if (zeroIndex != -1 && zeroIndex < idx) {\r\n replacement = EMPTY;\r\n }\r\n\r\n if ((decimalIndex - idx) <= integerLength && decimalIndex - idx > -1) {\r\n number += integer;\r\n idx = decimalIndex;\r\n }\r\n\r\n if (decimalIndex === idx) {\r\n number += (fraction ? decimal : EMPTY) + fraction;\r\n idx += end - decimalIndex + 1;\r\n continue;\r\n }\r\n }\r\n\r\n if (ch === ZERO) {\r\n number += ch;\r\n replacement = ch;\r\n } else if (ch === SHARP) {\r\n number += replacement;\r\n }\r\n }\r\n\r\n if (end >= start) {\r\n number += format.substring(end + 1);\r\n }\r\n\r\n //replace symbol placeholders\r\n if (isCurrency || isPercent) {\r\n value = EMPTY;\r\n for (idx = 0, length = number.length; idx < length; idx++) {\r\n ch = number.charAt(idx);\r\n value += (ch === \"$\" || ch === \"%\") ? symbol : ch;\r\n }\r\n number = value;\r\n }\r\n\r\n length = literals.length;\r\n\r\n if (length) {\r\n for (idx = 0; idx < length; idx++) {\r\n number = number.replace(PLACEHOLDER, literals[idx]);\r\n }\r\n }\r\n }\r\n\r\n return number;\r\n }\r\n\r\n var round = function(value, precision) {\r\n precision = precision || 0;\r\n\r\n value = value.toString().split('e');\r\n value = Math.round(+(value[0] + 'e' + (value[1] ? (+value[1] + precision) : precision)));\r\n\r\n value = value.toString().split('e');\r\n value = +(value[0] + 'e' + (value[1] ? (+value[1] - precision) : -precision));\r\n\r\n return value.toFixed(precision);\r\n };\r\n\r\n var toString = function(value, fmt, culture) {\r\n if (fmt) {\r\n if (objectToString.call(value) === \"[object Date]\") {\r\n return formatDate(value, fmt, culture);\r\n } else if (typeof value === NUMBER) {\r\n return formatNumber(value, fmt, culture);\r\n }\r\n }\r\n\r\n return value !== undefined ? value : \"\";\r\n };\r\n\r\n if (globalize) {\r\n toString = function(value, format, culture) {\r\n if ($.isPlainObject(culture)) {\r\n culture = culture.name;\r\n }\r\n\r\n return globalize.format(value, format, culture);\r\n };\r\n }\r\n\r\n kendo.format = function(fmt) {\r\n var values = arguments;\r\n\r\n return fmt.replace(formatRegExp, function(match, index, placeholderFormat) {\r\n var value = values[parseInt(index, 10) + 1];\r\n\r\n return toString(value, placeholderFormat ? placeholderFormat.substring(1) : \"\");\r\n });\r\n };\r\n\r\n kendo._extractFormat = function (format) {\r\n if (format.slice(0,3) === \"{0:\") {\r\n format = format.slice(3, format.length - 1);\r\n }\r\n\r\n return format;\r\n };\r\n\r\n kendo._activeElement = function() {\r\n try {\r\n return document.activeElement;\r\n } catch(e) {\r\n return document.documentElement.activeElement;\r\n }\r\n };\r\n\r\n kendo._round = round;\r\n kendo.toString = toString;\r\n})();\r\n\r\n\r\n(function() {\r\n var nonBreakingSpaceRegExp = /\\u00A0/g,\r\n exponentRegExp = /[eE][\\-+]?[0-9]+/,\r\n shortTimeZoneRegExp = /[+|\\-]\\d{1,2}/,\r\n longTimeZoneRegExp = /[+|\\-]\\d{1,2}:\\d{2}/,\r\n dateRegExp = /^\\/Date\\((.*?)\\)\\/$/,\r\n signRegExp = /[+-]/,\r\n formatsSequence = [\"G\", \"g\", \"d\", \"F\", \"D\", \"y\", \"m\", \"T\", \"t\"],\r\n numberRegExp = {\r\n 2: /^\\d{1,2}/,\r\n 3: /^\\d{1,3}/,\r\n 4: /^\\d{4}/\r\n },\r\n objectToString = {}.toString;\r\n\r\n function outOfRange(value, start, end) {\r\n return !(value >= start && value <= end);\r\n }\r\n\r\n function designatorPredicate(designator) {\r\n return designator.charAt(0);\r\n }\r\n\r\n function mapDesignators(designators) {\r\n return $.map(designators, designatorPredicate);\r\n }\r\n\r\n //if date's day is different than the typed one - adjust\r\n function adjustDST(date, hours) {\r\n if (!hours && date.getHours() === 23) {\r\n date.setHours(date.getHours() + 2);\r\n }\r\n }\r\n\r\n function lowerArray(data) {\r\n var idx = 0,\r\n length = data.length,\r\n array = [];\r\n\r\n for (; idx < length; idx++) {\r\n array[idx] = (data[idx] + \"\").toLowerCase();\r\n }\r\n\r\n return array;\r\n }\r\n\r\n function lowerLocalInfo(localInfo) {\r\n var newLocalInfo = {}, property;\r\n\r\n for (property in localInfo) {\r\n newLocalInfo[property] = lowerArray(localInfo[property]);\r\n }\r\n\r\n return newLocalInfo;\r\n }\r\n\r\n function parseExact(value, format, culture) {\r\n if (!value) {\r\n return null;\r\n }\r\n\r\n var lookAhead = function (match) {\r\n var i = 0;\r\n while (format[idx] === match) {\r\n i++;\r\n idx++;\r\n }\r\n if (i > 0) {\r\n idx -= 1;\r\n }\r\n return i;\r\n },\r\n getNumber = function(size) {\r\n var rg = numberRegExp[size] || new RegExp('^\\\\d{1,' + size + '}'),\r\n match = value.substr(valueIdx, size).match(rg);\r\n\r\n if (match) {\r\n match = match[0];\r\n valueIdx += match.length;\r\n return parseInt(match, 10);\r\n }\r\n return null;\r\n },\r\n getIndexByName = function (names, lower) {\r\n var i = 0,\r\n length = names.length,\r\n name, nameLength,\r\n subValue;\r\n\r\n for (; i < length; i++) {\r\n name = names[i];\r\n nameLength = name.length;\r\n subValue = value.substr(valueIdx, nameLength);\r\n\r\n if (lower) {\r\n subValue = subValue.toLowerCase();\r\n }\r\n\r\n if (subValue == name) {\r\n valueIdx += nameLength;\r\n return i + 1;\r\n }\r\n }\r\n return null;\r\n },\r\n checkLiteral = function() {\r\n var result = false;\r\n if (value.charAt(valueIdx) === format[idx]) {\r\n valueIdx++;\r\n result = true;\r\n }\r\n return result;\r\n },\r\n calendar = culture.calendars.standard,\r\n year = null,\r\n month = null,\r\n day = null,\r\n hours = null,\r\n minutes = null,\r\n seconds = null,\r\n milliseconds = null,\r\n idx = 0,\r\n valueIdx = 0,\r\n literal = false,\r\n date = new Date(),\r\n twoDigitYearMax = calendar.twoDigitYearMax || 2029,\r\n defaultYear = date.getFullYear(),\r\n ch, count, length, pattern,\r\n pmHour, UTC, ISO8601, matches,\r\n amDesignators, pmDesignators,\r\n hoursOffset, minutesOffset,\r\n hasTime, match;\r\n\r\n if (!format) {\r\n format = \"d\"; //shord date format\r\n }\r\n\r\n //if format is part of the patterns get real format\r\n pattern = calendar.patterns[format];\r\n if (pattern) {\r\n format = pattern;\r\n }\r\n\r\n format = format.split(\"\");\r\n length = format.length;\r\n\r\n for (; idx < length; idx++) {\r\n ch = format[idx];\r\n\r\n if (literal) {\r\n if (ch === \"'\") {\r\n literal = false;\r\n } else {\r\n checkLiteral();\r\n }\r\n } else {\r\n if (ch === \"d\") {\r\n count = lookAhead(\"d\");\r\n if (!calendar._lowerDays) {\r\n calendar._lowerDays = lowerLocalInfo(calendar.days);\r\n }\r\n\r\n day = count < 3 ? getNumber(2) : getIndexByName(calendar._lowerDays[count == 3 ? \"namesAbbr\" : \"names\"], true);\r\n\r\n if (day === null || outOfRange(day, 1, 31)) {\r\n return null;\r\n }\r\n } else if (ch === \"M\") {\r\n count = lookAhead(\"M\");\r\n if (!calendar._lowerMonths) {\r\n calendar._lowerMonths = lowerLocalInfo(calendar.months);\r\n }\r\n month = count < 3 ? getNumber(2) : getIndexByName(calendar._lowerMonths[count == 3 ? 'namesAbbr' : 'names'], true);\r\n\r\n if (month === null || outOfRange(month, 1, 12)) {\r\n return null;\r\n }\r\n month -= 1; //because month is zero based\r\n } else if (ch === \"y\") {\r\n count = lookAhead(\"y\");\r\n year = getNumber(count);\r\n\r\n if (year === null) {\r\n return null;\r\n }\r\n\r\n if (count == 2) {\r\n if (typeof twoDigitYearMax === \"string\") {\r\n twoDigitYearMax = defaultYear + parseInt(twoDigitYearMax, 10);\r\n }\r\n\r\n year = (defaultYear - defaultYear % 100) + year;\r\n if (year > twoDigitYearMax) {\r\n year -= 100;\r\n }\r\n }\r\n } else if (ch === \"h\" ) {\r\n lookAhead(\"h\");\r\n hours = getNumber(2);\r\n if (hours == 12) {\r\n hours = 0;\r\n }\r\n if (hours === null || outOfRange(hours, 0, 11)) {\r\n return null;\r\n }\r\n } else if (ch === \"H\") {\r\n lookAhead(\"H\");\r\n hours = getNumber(2);\r\n if (hours === null || outOfRange(hours, 0, 23)) {\r\n return null;\r\n }\r\n } else if (ch === \"m\") {\r\n lookAhead(\"m\");\r\n minutes = getNumber(2);\r\n if (minutes === null || outOfRange(minutes, 0, 59)) {\r\n return null;\r\n }\r\n } else if (ch === \"s\") {\r\n lookAhead(\"s\");\r\n seconds = getNumber(2);\r\n if (seconds === null || outOfRange(seconds, 0, 59)) {\r\n return null;\r\n }\r\n } else if (ch === \"f\") {\r\n count = lookAhead(\"f\");\r\n\r\n match = value.substr(valueIdx, count).match(numberRegExp[3]);\r\n milliseconds = getNumber(count);\r\n\r\n if (milliseconds !== null) {\r\n match = match[0].length;\r\n\r\n if (match < 3) {\r\n milliseconds *= Math.pow(10, (3 - match));\r\n }\r\n\r\n if (count > 3) {\r\n milliseconds = parseInt(milliseconds.toString().substring(0, 3), 10);\r\n }\r\n }\r\n\r\n if (milliseconds === null || outOfRange(milliseconds, 0, 999)) {\r\n return null;\r\n }\r\n\r\n } else if (ch === \"t\") {\r\n count = lookAhead(\"t\");\r\n amDesignators = calendar.AM;\r\n pmDesignators = calendar.PM;\r\n\r\n if (count === 1) {\r\n amDesignators = mapDesignators(amDesignators);\r\n pmDesignators = mapDesignators(pmDesignators);\r\n }\r\n\r\n pmHour = getIndexByName(pmDesignators);\r\n if (!pmHour && !getIndexByName(amDesignators)) {\r\n return null;\r\n }\r\n }\r\n else if (ch === \"z\") {\r\n UTC = true;\r\n count = lookAhead(\"z\");\r\n\r\n if (value.substr(valueIdx, 1) === \"Z\") {\r\n if (!ISO8601) {\r\n return null;\r\n }\r\n\r\n checkLiteral();\r\n continue;\r\n }\r\n\r\n matches = value.substr(valueIdx, 6)\r\n .match(count > 2 ? longTimeZoneRegExp : shortTimeZoneRegExp);\r\n\r\n if (!matches) {\r\n return null;\r\n }\r\n\r\n matches = matches[0];\r\n valueIdx = matches.length;\r\n matches = matches.split(\":\");\r\n\r\n hoursOffset = parseInt(matches[0], 10);\r\n if (outOfRange(hoursOffset, -12, 13)) {\r\n return null;\r\n }\r\n\r\n if (count > 2) {\r\n minutesOffset = parseInt(matches[1], 10);\r\n if (isNaN(minutesOffset) || outOfRange(minutesOffset, 0, 59)) {\r\n return null;\r\n }\r\n }\r\n } else if (ch === \"T\") {\r\n ISO8601 = checkLiteral();\r\n } else if (ch === \"'\") {\r\n literal = true;\r\n checkLiteral();\r\n } else if (!checkLiteral()) {\r\n return null;\r\n }\r\n }\r\n }\r\n\r\n hasTime = hours !== null || minutes !== null || seconds || null;\r\n\r\n if (year === null && month === null && day === null && hasTime) {\r\n year = defaultYear;\r\n month = date.getMonth();\r\n day = date.getDate();\r\n } else {\r\n if (year === null) {\r\n year = defaultYear;\r\n }\r\n\r\n if (day === null) {\r\n day = 1;\r\n }\r\n }\r\n\r\n if (pmHour && hours < 12) {\r\n hours += 12;\r\n }\r\n\r\n if (UTC) {\r\n if (hoursOffset) {\r\n hours += -hoursOffset;\r\n }\r\n\r\n if (minutesOffset) {\r\n minutes += -minutesOffset;\r\n }\r\n\r\n value = new Date(Date.UTC(year, month, day, hours, minutes, seconds, milliseconds));\r\n } else {\r\n value = new Date(year, month, day, hours, minutes, seconds, milliseconds);\r\n adjustDST(value, hours);\r\n }\r\n\r\n if (year < 100) {\r\n value.setFullYear(year);\r\n }\r\n\r\n if (value.getDate() !== day && UTC === undefined) {\r\n return null;\r\n }\r\n\r\n return value;\r\n }\r\n\r\n kendo.parseDate = function(value, formats, culture) {\r\n if (objectToString.call(value) === \"[object Date]\") {\r\n return value;\r\n }\r\n\r\n var idx = 0;\r\n var date = null;\r\n var length, patterns;\r\n var tzoffset;\r\n\r\n if (value && value.indexOf(\"/D\") === 0) {\r\n date = dateRegExp.exec(value);\r\n if (date) {\r\n tzoffset = date = date[1];\r\n\r\n date = parseInt(date, 10);\r\n\r\n tzoffset = tzoffset.substring(1).split(signRegExp)[1];\r\n\r\n if (tzoffset) {\r\n date -= (parseInt(tzoffset, 10) * kendo.date.MS_PER_MINUTE);\r\n }\r\n\r\n return new Date(date);\r\n }\r\n }\r\n\r\n culture = kendo.getCulture(culture);\r\n\r\n if (!formats) {\r\n formats = [];\r\n patterns = culture.calendar.patterns;\r\n length = formatsSequence.length;\r\n\r\n for (; idx < length; idx++) {\r\n formats[idx] = patterns[formatsSequence[idx]];\r\n }\r\n\r\n idx = 0;\r\n\r\n formats = [\r\n \"yyyy/MM/dd HH:mm:ss\",\r\n \"yyyy/MM/dd HH:mm\",\r\n \"yyyy/MM/dd\",\r\n \"ddd MMM dd yyyy HH:mm:ss\",\r\n \"yyyy-MM-ddTHH:mm:ss.fffffffzzz\",\r\n \"yyyy-MM-ddTHH:mm:ss.fffzzz\",\r\n \"yyyy-MM-ddTHH:mm:sszzz\",\r\n \"yyyy-MM-ddTHH:mmzzz\",\r\n \"yyyy-MM-ddTHH:mmzz\",\r\n \"yyyy-MM-ddTHH:mm:ss\",\r\n \"yyyy-MM-ddTHH:mm\",\r\n \"yyyy-MM-dd HH:mm:ss\",\r\n \"yyyy-MM-dd HH:mm\",\r\n \"yyyy-MM-dd\",\r\n \"HH:mm:ss\",\r\n \"HH:mm\"\r\n ].concat(formats);\r\n }\r\n\r\n formats = isArray(formats) ? formats: [formats];\r\n length = formats.length;\r\n\r\n for (; idx < length; idx++) {\r\n date = parseExact(value, formats[idx], culture);\r\n if (date) {\r\n return date;\r\n }\r\n }\r\n\r\n return date;\r\n };\r\n\r\n kendo.parseInt = function(value, culture) {\r\n var result = kendo.parseFloat(value, culture);\r\n if (result) {\r\n result = result | 0;\r\n }\r\n return result;\r\n };\r\n\r\n kendo.parseFloat = function(value, culture, format) {\r\n if (!value && value !== 0) {\r\n return null;\r\n }\r\n\r\n if (typeof value === NUMBER) {\r\n return value;\r\n }\r\n\r\n value = value.toString();\r\n culture = kendo.getCulture(culture);\r\n\r\n var number = culture.numberFormat,\r\n percent = number.percent,\r\n currency = number.currency,\r\n symbol = currency.symbol,\r\n percentSymbol = percent.symbol,\r\n negative = value.indexOf(\"-\"),\r\n parts, isPercent;\r\n\r\n //handle exponential number\r\n if (exponentRegExp.test(value)) {\r\n value = parseFloat(value.replace(number[\".\"], \".\"));\r\n if (isNaN(value)) {\r\n value = null;\r\n }\r\n return value;\r\n }\r\n\r\n if (negative > 0) {\r\n return null;\r\n } else {\r\n negative = negative > -1;\r\n }\r\n\r\n if (value.indexOf(symbol) > -1 || (format && format.toLowerCase().indexOf(\"c\") > -1)) {\r\n number = currency;\r\n parts = number.pattern[0].replace(\"$\", symbol).split(\"n\");\r\n if (value.indexOf(parts[0]) > -1 && value.indexOf(parts[1]) > -1) {\r\n value = value.replace(parts[0], \"\").replace(parts[1], \"\");\r\n negative = true;\r\n }\r\n } else if (value.indexOf(percentSymbol) > -1) {\r\n isPercent = true;\r\n number = percent;\r\n symbol = percentSymbol;\r\n }\r\n\r\n value = value.replace(\"-\", \"\")\r\n .replace(symbol, \"\")\r\n .replace(nonBreakingSpaceRegExp, \" \")\r\n .split(number[\",\"].replace(nonBreakingSpaceRegExp, \" \")).join(\"\")\r\n .replace(number[\".\"], \".\");\r\n\r\n value = parseFloat(value);\r\n\r\n if (isNaN(value)) {\r\n value = null;\r\n } else if (negative) {\r\n value *= -1;\r\n }\r\n\r\n if (value && isPercent) {\r\n value /= 100;\r\n }\r\n\r\n return value;\r\n };\r\n\r\n if (globalize) {\r\n kendo.parseDate = function (value, format, culture) {\r\n if (objectToString.call(value) === \"[object Date]\") {\r\n return value;\r\n }\r\n\r\n return globalize.parseDate(value, format, culture);\r\n };\r\n\r\n kendo.parseFloat = function (value, culture) {\r\n if (typeof value === NUMBER) {\r\n return value;\r\n }\r\n\r\n if (value === undefined || value === null) {\r\n return null;\r\n }\r\n\r\n if ($.isPlainObject(culture)) {\r\n culture = culture.name;\r\n }\r\n\r\n value = globalize.parseFloat(value, culture);\r\n\r\n return isNaN(value) ? null : value;\r\n };\r\n }\r\n})();\r\n\r\n function getShadows(element) {\r\n var shadow = element.css(kendo.support.transitions.css + \"box-shadow\") || element.css(\"box-shadow\"),\r\n radius = shadow ? shadow.match(boxShadowRegExp) || [ 0, 0, 0, 0, 0 ] : [ 0, 0, 0, 0, 0 ],\r\n blur = math.max((+radius[3]), +(radius[4] || 0));\r\n\r\n return {\r\n left: (-radius[1]) + blur,\r\n right: (+radius[1]) + blur,\r\n bottom: (+radius[2]) + blur\r\n };\r\n }\r\n\r\n function wrap(element, autosize) {\r\n var browser = support.browser,\r\n percentage,\r\n isRtl = element.css(\"direction\") == \"rtl\";\r\n\r\n if (!element.parent().hasClass(\"k-animation-container\")) {\r\n var shadows = getShadows(element),\r\n width = element[0].style.width,\r\n height = element[0].style.height,\r\n percentWidth = percentRegExp.test(width),\r\n percentHeight = percentRegExp.test(height);\r\n\r\n if (browser.opera) { // Box shadow can't be retrieved in Opera\r\n shadows.left = shadows.right = shadows.bottom = 5;\r\n }\r\n\r\n percentage = percentWidth || percentHeight;\r\n\r\n if (!percentWidth && (!autosize || (autosize && width))) { width = element.outerWidth(); }\r\n if (!percentHeight && (!autosize || (autosize && height))) { height = element.outerHeight(); }\r\n\r\n element.wrap(\r\n $(\"
    \")\r\n .addClass(\"k-animation-container\")\r\n .css({\r\n width: width,\r\n height: height,\r\n marginLeft: shadows.left * (isRtl ? 1 : -1),\r\n paddingLeft: shadows.left,\r\n paddingRight: shadows.right,\r\n paddingBottom: shadows.bottom\r\n }));\r\n\r\n if (percentage) {\r\n element.css({\r\n width: \"100%\",\r\n height: \"100%\",\r\n boxSizing: \"border-box\",\r\n mozBoxSizing: \"border-box\",\r\n webkitBoxSizing: \"border-box\"\r\n });\r\n }\r\n } else {\r\n var wrapper = element.parent(\".k-animation-container\"),\r\n wrapperStyle = wrapper[0].style;\r\n\r\n if (wrapper.is(\":hidden\")) {\r\n wrapper.show();\r\n }\r\n\r\n percentage = percentRegExp.test(wrapperStyle.width) || percentRegExp.test(wrapperStyle.height);\r\n\r\n if (!percentage) {\r\n wrapper.css({\r\n width: element.outerWidth(),\r\n height: element.outerHeight(),\r\n boxSizing: \"content-box\",\r\n mozBoxSizing: \"content-box\",\r\n webkitBoxSizing: \"content-box\"\r\n });\r\n }\r\n }\r\n\r\n if (browser.msie && math.floor(browser.version) <= 7) {\r\n element.css({ zoom: 1 });\r\n element.children(\".k-menu\").width(element.width());\r\n }\r\n\r\n return element.parent();\r\n }\r\n\r\n function deepExtend(destination) {\r\n var i = 1,\r\n length = arguments.length;\r\n\r\n for (i = 1; i < length; i++) {\r\n deepExtendOne(destination, arguments[i]);\r\n }\r\n\r\n return destination;\r\n }\r\n\r\n function deepExtendOne(destination, source) {\r\n var ObservableArray = kendo.data.ObservableArray,\r\n DataSource = kendo.data.DataSource,\r\n HierarchicalDataSource = kendo.data.HierarchicalDataSource,\r\n property,\r\n propValue,\r\n propType,\r\n destProp;\r\n\r\n for (property in source) {\r\n propValue = source[property];\r\n propType = typeof propValue;\r\n if (propType === OBJECT && propValue !== null &&\r\n propValue.constructor !== Array && propValue.constructor !== ObservableArray &&\r\n propValue.constructor !== DataSource && propValue.constructor !== HierarchicalDataSource) {\r\n if (propValue instanceof Date) {\r\n destination[property] = new Date(propValue.getTime());\r\n } else if (isFunction(propValue.clone)) {\r\n destination[property] = propValue.clone();\r\n } else {\r\n destProp = destination[property];\r\n if (typeof (destProp) === OBJECT) {\r\n destination[property] = destProp || {};\r\n } else {\r\n destination[property] = {};\r\n }\r\n deepExtendOne(destination[property], propValue);\r\n }\r\n } else if (propType !== UNDEFINED) {\r\n destination[property] = propValue;\r\n }\r\n }\r\n\r\n return destination;\r\n }\r\n\r\n function testRx(agent, rxs, dflt) {\r\n for (var rx in rxs) {\r\n if (rxs.hasOwnProperty(rx) && rxs[rx].test(agent)) {\r\n return rx;\r\n }\r\n }\r\n return dflt !== undefined ? dflt : agent;\r\n }\r\n\r\n function toHyphens(str) {\r\n return str.replace(/([a-z][A-Z])/g, function (g) {\r\n return g.charAt(0) + '-' + g.charAt(1).toLowerCase();\r\n });\r\n }\r\n\r\n function toCamelCase(str) {\r\n return str.replace(/\\-(\\w)/g, function (strMatch, g1) {\r\n return g1.toUpperCase();\r\n });\r\n }\r\n\r\n function getComputedStyles(element, properties) {\r\n var styles = {}, computedStyle;\r\n\r\n if (document.defaultView && document.defaultView.getComputedStyle) {\r\n computedStyle = document.defaultView.getComputedStyle(element, \"\");\r\n\r\n if (properties) {\r\n $.each(properties, function(idx, value) {\r\n styles[value] = computedStyle.getPropertyValue(value);\r\n });\r\n }\r\n } else {\r\n computedStyle = element.currentStyle;\r\n\r\n if (properties) {\r\n $.each(properties, function(idx, value) {\r\n styles[value] = computedStyle[toCamelCase(value)];\r\n });\r\n }\r\n }\r\n\r\n if (!kendo.size(styles)) {\r\n styles = computedStyle;\r\n }\r\n\r\n return styles;\r\n }\r\n\r\n (function() {\r\n support.scrollbar = function() {\r\n var div = document.createElement(\"div\"),\r\n result;\r\n\r\n div.style.cssText = \"overflow:scroll;overflow-x:hidden;zoom:1;clear:both\";\r\n div.innerHTML = \" \";\r\n document.body.appendChild(div);\r\n\r\n result = div.offsetWidth - div.scrollWidth;\r\n\r\n document.body.removeChild(div);\r\n return result;\r\n };\r\n\r\n support.isRtl = function(element) {\r\n return $(element).closest(\".k-rtl\").length > 0;\r\n };\r\n\r\n var table = document.createElement(\"table\");\r\n\r\n // Internet Explorer does not support setting the innerHTML of TBODY and TABLE elements\r\n try {\r\n table.innerHTML = \"\";\r\n\r\n support.tbodyInnerHtml = true;\r\n } catch (e) {\r\n support.tbodyInnerHtml = false;\r\n }\r\n\r\n support.touch = \"ontouchstart\" in window;\r\n support.msPointers = window.MSPointerEvent;\r\n support.pointers = window.PointerEvent;\r\n\r\n var transitions = support.transitions = false,\r\n transforms = support.transforms = false,\r\n elementProto = \"HTMLElement\" in window ? HTMLElement.prototype : [];\r\n\r\n support.hasHW3D = (\"WebKitCSSMatrix\" in window && \"m11\" in new window.WebKitCSSMatrix()) || \"MozPerspective\" in document.documentElement.style || \"msPerspective\" in document.documentElement.style;\r\n\r\n each([ \"Moz\", \"webkit\", \"O\", \"ms\" ], function () {\r\n var prefix = this.toString(),\r\n hasTransitions = typeof table.style[prefix + \"Transition\"] === STRING;\r\n\r\n if (hasTransitions || typeof table.style[prefix + \"Transform\"] === STRING) {\r\n var lowPrefix = prefix.toLowerCase();\r\n\r\n transforms = {\r\n css: (lowPrefix != \"ms\") ? \"-\" + lowPrefix + \"-\" : \"\",\r\n prefix: prefix,\r\n event: (lowPrefix === \"o\" || lowPrefix === \"webkit\") ? lowPrefix : \"\"\r\n };\r\n\r\n if (hasTransitions) {\r\n transitions = transforms;\r\n transitions.event = transitions.event ? transitions.event + \"TransitionEnd\" : \"transitionend\";\r\n }\r\n\r\n return false;\r\n }\r\n });\r\n\r\n table = null;\r\n\r\n support.transforms = transforms;\r\n support.transitions = transitions;\r\n\r\n support.devicePixelRatio = window.devicePixelRatio === undefined ? 1 : window.devicePixelRatio;\r\n\r\n try {\r\n support.screenWidth = window.outerWidth || window.screen ? window.screen.availWidth : window.innerWidth;\r\n support.screenHeight = window.outerHeight || window.screen ? window.screen.availHeight : window.innerHeight;\r\n } catch(e) {\r\n //window.outerWidth throws error when in IE showModalDialog.\r\n support.screenWidth = window.screen.availWidth;\r\n support.screenHeight = window.screen.availHeight;\r\n }\r\n\r\n support.detectOS = function (ua) {\r\n var os = false, minorVersion, match = [],\r\n notAndroidPhone = !/mobile safari/i.test(ua),\r\n agentRxs = {\r\n fire: /(Silk)\\/(\\d+)\\.(\\d+(\\.\\d+)?)/,\r\n android: /(Android|Android.*(?:Opera|Firefox).*?\\/)\\s*(\\d+)\\.(\\d+(\\.\\d+)?)/,\r\n iphone: /(iPhone|iPod).*OS\\s+(\\d+)[\\._]([\\d\\._]+)/,\r\n ipad: /(iPad).*OS\\s+(\\d+)[\\._]([\\d_]+)/,\r\n meego: /(MeeGo).+NokiaBrowser\\/(\\d+)\\.([\\d\\._]+)/,\r\n webos: /(webOS)\\/(\\d+)\\.(\\d+(\\.\\d+)?)/,\r\n blackberry: /(BlackBerry|BB10).*?Version\\/(\\d+)\\.(\\d+(\\.\\d+)?)/,\r\n playbook: /(PlayBook).*?Tablet\\s*OS\\s*(\\d+)\\.(\\d+(\\.\\d+)?)/,\r\n wp: /(Windows Phone(?: OS)?)\\s(\\d+)\\.(\\d+(\\.\\d+)?)/,\r\n windows: /(MSIE)\\s+(\\d+)\\.(\\d+(\\.\\d+)?)/,\r\n tizen: /(tizen).*?Version\\/(\\d+)\\.(\\d+(\\.\\d+)?)/i,\r\n sailfish: /(sailfish).*rv:(\\d+)\\.(\\d+(\\.\\d+)?).*firefox/i,\r\n ffos: /(Mobile).*rv:(\\d+)\\.(\\d+(\\.\\d+)?).*Firefox/\r\n },\r\n osRxs = {\r\n ios: /^i(phone|pad|pod)$/i,\r\n android: /^android|fire$/i,\r\n blackberry: /^blackberry|playbook/i,\r\n windows: /windows/,\r\n wp: /wp/,\r\n flat: /sailfish|ffos|tizen/i,\r\n meego: /meego/\r\n },\r\n formFactorRxs = {\r\n tablet: /playbook|ipad|fire/i\r\n },\r\n browserRxs = {\r\n omini: /Opera\\sMini/i,\r\n omobile: /Opera\\sMobi/i,\r\n firefox: /Firefox|Fennec/i,\r\n mobilesafari: /version\\/.*safari/i,\r\n chrome: /chrome|crios/i,\r\n webkit: /webkit/i,\r\n ie: /MSIE|Windows\\sPhone/i\r\n };\r\n\r\n for (var agent in agentRxs) {\r\n if (agentRxs.hasOwnProperty(agent)) {\r\n match = ua.match(agentRxs[agent]);\r\n if (match) {\r\n if (agent == \"windows\" && \"plugins\" in navigator) { return false; } // Break if not Metro/Mobile Windows\r\n\r\n os = {};\r\n os.device = agent;\r\n os.tablet = testRx(agent, formFactorRxs, false);\r\n os.browser = testRx(ua, browserRxs, \"default\");\r\n os.name = testRx(agent, osRxs);\r\n os[os.name] = true;\r\n os.majorVersion = match[2];\r\n os.minorVersion = match[3].replace(\"_\", \".\");\r\n minorVersion = os.minorVersion.replace(\".\", \"\").substr(0, 2);\r\n os.flatVersion = os.majorVersion + minorVersion + (new Array(3 - (minorVersion.length < 3 ? minorVersion.length : 2)).join(\"0\"));\r\n os.cordova = typeof window.PhoneGap !== UNDEFINED || typeof window.cordova !== UNDEFINED; // Use file protocol to detect appModes.\r\n os.appMode = window.navigator.standalone || (/file|local|wmapp/).test(window.location.protocol) || os.cordova; // Use file protocol to detect appModes.\r\n\r\n if (os.android && (support.devicePixelRatio < 1.5 && os.flatVersion < 400 || notAndroidPhone) && (support.screenWidth > 800 || support.screenHeight > 800)) {\r\n os.tablet = agent;\r\n }\r\n\r\n break;\r\n }\r\n }\r\n }\r\n return os;\r\n };\r\n\r\n var mobileOS = support.mobileOS = support.detectOS(navigator.userAgent);\r\n\r\n support.wpDevicePixelRatio = mobileOS.wp ? screen.width / 320 : 0;\r\n support.kineticScrollNeeded = mobileOS && (support.touch || support.msPointers || support.pointers);\r\n\r\n support.hasNativeScrolling = false;\r\n\r\n if (mobileOS.ios || (mobileOS.android && mobileOS.majorVersion > 2) || mobileOS.wp) {\r\n support.hasNativeScrolling = mobileOS;\r\n }\r\n\r\n support.mouseAndTouchPresent = support.touch && !(support.mobileOS.ios || support.mobileOS.android);\r\n\r\n support.detectBrowser = function(ua) {\r\n var browser = false, match = [],\r\n browserRxs = {\r\n webkit: /(chrome)[ \\/]([\\w.]+)/i,\r\n safari: /(webkit)[ \\/]([\\w.]+)/i,\r\n opera: /(opera)(?:.*version|)[ \\/]([\\w.]+)/i,\r\n msie: /(msie\\s|trident.*? rv:)([\\w.]+)/i,\r\n mozilla: /(mozilla)(?:.*? rv:([\\w.]+)|)/i\r\n };\r\n\r\n for (var agent in browserRxs) {\r\n if (browserRxs.hasOwnProperty(agent)) {\r\n match = ua.match(browserRxs[agent]);\r\n if (match) {\r\n browser = {};\r\n browser[agent] = true;\r\n browser[match[1].toLowerCase()] = true;\r\n browser.version = parseInt(document.documentMode || match[2], 10);\r\n\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return browser;\r\n };\r\n\r\n support.browser = support.detectBrowser(navigator.userAgent);\r\n\r\n support.zoomLevel = function() {\r\n try {\r\n return support.touch ? (document.documentElement.clientWidth / window.innerWidth) :\r\n support.browser.msie && support.browser.version >= 10 ? ((top || window).document.documentElement.offsetWidth / (top || window).innerWidth) : 1;\r\n } catch(e) {\r\n return 1;\r\n }\r\n };\r\n\r\n support.cssBorderSpacing = typeof document.documentElement.style.borderSpacing != \"undefined\" && !(support.browser.msie && support.browser.version < 8);\r\n\r\n (function(browser) {\r\n // add browser-specific CSS class\r\n var cssClass,\r\n majorVersion = parseInt(browser.version, 10);\r\n\r\n if (browser.msie) {\r\n cssClass = \"ie\";\r\n } else if (browser.mozilla) {\r\n cssClass = \"ff\";\r\n } else if (browser.safari) {\r\n cssClass = \"safari\";\r\n } else if (browser.webkit) {\r\n cssClass = \"webkit\";\r\n } else if (browser.opera) {\r\n cssClass = \"opera\";\r\n }\r\n\r\n if (cssClass) {\r\n $(document.documentElement).addClass(\"k-\" + cssClass + \" k-\" + cssClass + majorVersion);\r\n }\r\n })(support.browser);\r\n\r\n support.eventCapture = document.documentElement.addEventListener;\r\n\r\n var input = document.createElement(\"input\");\r\n\r\n support.placeholder = \"placeholder\" in input;\r\n support.propertyChangeEvent = \"onpropertychange\" in input;\r\n\r\n support.input = (function() {\r\n var types = [\"number\", \"date\", \"time\", \"month\", \"week\", \"datetime\", \"datetime-local\"];\r\n var length = types.length;\r\n var value = \"test\";\r\n var result = {};\r\n var idx = 0;\r\n var type;\r\n\r\n for (;idx < length; idx++) {\r\n type = types[idx];\r\n input.setAttribute(\"type\", type);\r\n input.value = value;\r\n\r\n result[type.replace(\"-\", \"\")] = input.type !== \"text\" && input.value !== value;\r\n }\r\n\r\n return result;\r\n })();\r\n\r\n input.style.cssText = \"float:left;\";\r\n\r\n support.cssFloat = !!input.style.cssFloat;\r\n\r\n input = null;\r\n\r\n support.stableSort = (function() {\r\n // Chrome sort is not stable for more than *10* items\r\n // IE9+ sort is not stable for than *512* items\r\n var threshold = 513;\r\n\r\n var sorted = [{\r\n index: 0,\r\n field: \"b\"\r\n }];\r\n\r\n for (var i = 1; i < threshold; i++) {\r\n sorted.push({\r\n index: i,\r\n field: \"a\"\r\n });\r\n }\r\n\r\n sorted.sort(function(a, b) {\r\n return a.field > b.field ? 1 : (a.field < b.field ? -1 : 0);\r\n });\r\n\r\n return sorted[0].index === 1;\r\n })();\r\n\r\n support.matchesSelector = elementProto.webkitMatchesSelector || elementProto.mozMatchesSelector ||\r\n elementProto.msMatchesSelector || elementProto.oMatchesSelector || elementProto.matchesSelector ||\r\n function( selector ) {\r\n var nodeList = document.querySelectorAll ? ( this.parentNode || document ).querySelectorAll( selector ) || [] : $(selector),\r\n i = nodeList.length;\r\n\r\n while (i--) {\r\n if (nodeList[i] == this) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n };\r\n\r\n support.pushState = window.history && window.history.pushState;\r\n\r\n var documentMode = document.documentMode;\r\n\r\n support.hashChange = (\"onhashchange\" in window) && !(support.browser.msie && (!documentMode || documentMode <= 8)); // old IE detection\r\n })();\r\n\r\n\r\n function size(obj) {\r\n var result = 0, key;\r\n for (key in obj) {\r\n if (obj.hasOwnProperty(key) && key != \"toJSON\") { // Ignore fake IE7 toJSON.\r\n result++;\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n function getOffset(element, type, positioned) {\r\n if (!type) {\r\n type = \"offset\";\r\n }\r\n\r\n var result = element[type](),\r\n mobileOS = support.mobileOS;\r\n\r\n // IE10 touch zoom is living in a separate viewport\r\n if (support.browser.msie && (support.pointers || support.msPointers) && !positioned) {\r\n result.top -= (window.pageYOffset - document.documentElement.scrollTop);\r\n result.left -= (window.pageXOffset - document.documentElement.scrollLeft);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n var directions = {\r\n left: { reverse: \"right\" },\r\n right: { reverse: \"left\" },\r\n down: { reverse: \"up\" },\r\n up: { reverse: \"down\" },\r\n top: { reverse: \"bottom\" },\r\n bottom: { reverse: \"top\" },\r\n \"in\": { reverse: \"out\" },\r\n out: { reverse: \"in\" }\r\n };\r\n\r\n function parseEffects(input) {\r\n var effects = {};\r\n\r\n each((typeof input === \"string\" ? input.split(\" \") : input), function(idx) {\r\n effects[idx] = this;\r\n });\r\n\r\n return effects;\r\n }\r\n\r\n function fx(element) {\r\n return new kendo.effects.Element(element);\r\n }\r\n\r\n var effects = {};\r\n\r\n $.extend(effects, {\r\n enabled: true,\r\n Element: function(element) {\r\n this.element = $(element);\r\n },\r\n\r\n promise: function(element, options) {\r\n if (!element.is(\":visible\")) {\r\n element.css({ display: element.data(\"olddisplay\") || \"block\" }).css(\"display\");\r\n }\r\n\r\n if (options.hide) {\r\n element.data(\"olddisplay\", element.css(\"display\")).hide();\r\n }\r\n\r\n if (options.init) {\r\n options.init();\r\n }\r\n\r\n if (options.completeCallback) {\r\n options.completeCallback(element); // call the external complete callback with the element\r\n }\r\n\r\n element.dequeue();\r\n },\r\n\r\n disable: function() {\r\n this.enabled = false;\r\n this.promise = this.promiseShim;\r\n },\r\n\r\n enable: function() {\r\n this.enabled = true;\r\n this.promise = this.animatedPromise;\r\n }\r\n });\r\n\r\n effects.promiseShim = effects.promise;\r\n\r\n function prepareAnimationOptions(options, duration, reverse, complete) {\r\n if (typeof options === STRING) {\r\n // options is the list of effect names separated by space e.g. animate(element, \"fadeIn slideDown\")\r\n\r\n // only callback is provided e.g. animate(element, options, function() {});\r\n if (isFunction(duration)) {\r\n complete = duration;\r\n duration = 400;\r\n reverse = false;\r\n }\r\n\r\n if (isFunction(reverse)) {\r\n complete = reverse;\r\n reverse = false;\r\n }\r\n\r\n if (typeof duration === BOOLEAN){\r\n reverse = duration;\r\n duration = 400;\r\n }\r\n\r\n options = {\r\n effects: options,\r\n duration: duration,\r\n reverse: reverse,\r\n complete: complete\r\n };\r\n }\r\n\r\n return extend({\r\n //default options\r\n effects: {},\r\n duration: 400, //jQuery default duration\r\n reverse: false,\r\n init: noop,\r\n teardown: noop,\r\n hide: false\r\n }, options, { completeCallback: options.complete, complete: noop }); // Move external complete callback, so deferred.resolve can be always executed.\r\n\r\n }\r\n\r\n function animate(element, options, duration, reverse, complete) {\r\n var idx = 0,\r\n length = element.length,\r\n instance;\r\n\r\n for (; idx < length; idx ++) {\r\n instance = $(element[idx]);\r\n instance.queue(function() {\r\n effects.promise(instance, prepareAnimationOptions(options, duration, reverse, complete));\r\n });\r\n }\r\n\r\n return element;\r\n }\r\n\r\n function toggleClass(element, classes, options, add) {\r\n if (classes) {\r\n classes = classes.split(\" \");\r\n\r\n each(classes, function(idx, value) {\r\n element.toggleClass(value, add);\r\n });\r\n }\r\n\r\n return element;\r\n }\r\n\r\n if (!(\"kendoAnimate\" in $.fn)) {\r\n extend($.fn, {\r\n kendoStop: function(clearQueue, gotoEnd) {\r\n return this.stop(clearQueue, gotoEnd);\r\n },\r\n\r\n kendoAnimate: function(options, duration, reverse, complete) {\r\n return animate(this, options, duration, reverse, complete);\r\n },\r\n\r\n kendoAddClass: function(classes, options){\r\n return kendo.toggleClass(this, classes, options, true);\r\n },\r\n\r\n kendoRemoveClass: function(classes, options){\r\n return kendo.toggleClass(this, classes, options, false);\r\n },\r\n kendoToggleClass: function(classes, options, toggle){\r\n return kendo.toggleClass(this, classes, options, toggle);\r\n }\r\n });\r\n }\r\n\r\n var ampRegExp = /&/g,\r\n ltRegExp = //g;\r\n function htmlEncode(value) {\r\n return (\"\" + value).replace(ampRegExp, \"&\").replace(ltRegExp, \"<\").replace(gtRegExp, \">\").replace(quoteRegExp, \""\").replace(aposRegExp, \"'\");\r\n }\r\n\r\n var eventTarget = function (e) {\r\n return e.target;\r\n };\r\n\r\n if (support.touch) {\r\n\r\n eventTarget = function(e) {\r\n var touches = \"originalEvent\" in e ? e.originalEvent.changedTouches : \"changedTouches\" in e ? e.changedTouches : null;\r\n\r\n return touches ? document.elementFromPoint(touches[0].clientX, touches[0].clientY) : e.target;\r\n };\r\n\r\n each([\"swipe\", \"swipeLeft\", \"swipeRight\", \"swipeUp\", \"swipeDown\", \"doubleTap\", \"tap\"], function(m, value) {\r\n $.fn[value] = function(callback) {\r\n return this.bind(value, callback);\r\n };\r\n });\r\n }\r\n\r\n if (support.touch) {\r\n if (!support.mobileOS) {\r\n support.mousedown = \"mousedown touchstart\";\r\n support.mouseup = \"mouseup touchend\";\r\n support.mousemove = \"mousemove touchmove\";\r\n support.mousecancel = \"mouseleave touchcancel\";\r\n support.click = \"click\";\r\n support.resize = \"resize\";\r\n } else {\r\n support.mousedown = \"touchstart\";\r\n support.mouseup = \"touchend\";\r\n support.mousemove = \"touchmove\";\r\n support.mousecancel = \"touchcancel\";\r\n support.click = \"touchend\";\r\n support.resize = \"orientationchange\";\r\n }\r\n } else if (support.pointers) {\r\n support.mousemove = \"pointermove\";\r\n support.mousedown = \"pointerdown\";\r\n support.mouseup = \"pointerup\";\r\n support.mousecancel = \"pointercancel\";\r\n support.click = \"pointerup\";\r\n support.resize = \"orientationchange resize\";\r\n } else if (support.msPointers) {\r\n support.mousemove = \"MSPointerMove\";\r\n support.mousedown = \"MSPointerDown\";\r\n support.mouseup = \"MSPointerUp\";\r\n support.mousecancel = \"MSPointerCancel\";\r\n support.click = \"MSPointerUp\";\r\n support.resize = \"orientationchange resize\";\r\n } else {\r\n support.mousemove = \"mousemove\";\r\n support.mousedown = \"mousedown\";\r\n support.mouseup = \"mouseup\";\r\n support.mousecancel = \"mouseleave\";\r\n support.click = \"click\";\r\n support.resize = \"resize\";\r\n }\r\n\r\n var wrapExpression = function(members, paramName) {\r\n var result = paramName || \"d\",\r\n index,\r\n idx,\r\n length,\r\n member,\r\n count = 1;\r\n\r\n for (idx = 0, length = members.length; idx < length; idx++) {\r\n member = members[idx];\r\n if (member !== \"\") {\r\n index = member.indexOf(\"[\");\r\n\r\n if (index !== 0) {\r\n if (index == -1) {\r\n member = \".\" + member;\r\n } else {\r\n count++;\r\n member = \".\" + member.substring(0, index) + \" || {})\" + member.substring(index);\r\n }\r\n }\r\n\r\n count++;\r\n result += member + ((idx < length - 1) ? \" || {})\" : \")\");\r\n }\r\n }\r\n return new Array(count).join(\"(\") + result;\r\n },\r\n localUrlRe = /^([a-z]+:)?\\/\\//i;\r\n\r\n extend(kendo, {\r\n ui: kendo.ui || {},\r\n fx: kendo.fx || fx,\r\n effects: kendo.effects || effects,\r\n mobile: kendo.mobile || { },\r\n data: kendo.data || {},\r\n dataviz: kendo.dataviz || {ui: { roles: {}}},\r\n keys: {\r\n INSERT: 45,\r\n DELETE: 46,\r\n BACKSPACE: 8,\r\n TAB: 9,\r\n ENTER: 13,\r\n ESC: 27,\r\n LEFT: 37,\r\n UP: 38,\r\n RIGHT: 39,\r\n DOWN: 40,\r\n END: 35,\r\n HOME: 36,\r\n SPACEBAR: 32,\r\n PAGEUP: 33,\r\n PAGEDOWN: 34,\r\n F2: 113,\r\n F10: 121,\r\n F12: 123,\r\n NUMPAD_PLUS: 107,\r\n NUMPAD_MINUS: 109,\r\n NUMPAD_DOT: 110\r\n },\r\n support: kendo.support || support,\r\n animate: kendo.animate || animate,\r\n ns: \"\",\r\n attr: function(value) {\r\n return \"data-\" + kendo.ns + value;\r\n },\r\n getShadows: getShadows,\r\n wrap: wrap,\r\n deepExtend: deepExtend,\r\n getComputedStyles: getComputedStyles,\r\n size: size,\r\n toCamelCase: toCamelCase,\r\n toHyphens: toHyphens,\r\n getOffset: kendo.getOffset || getOffset,\r\n parseEffects: kendo.parseEffects || parseEffects,\r\n toggleClass: kendo.toggleClass || toggleClass,\r\n directions: kendo.directions || directions,\r\n Observable: Observable,\r\n Class: Class,\r\n Template: Template,\r\n template: proxy(Template.compile, Template),\r\n render: proxy(Template.render, Template),\r\n stringify: proxy(JSON.stringify, JSON),\r\n eventTarget: eventTarget,\r\n htmlEncode: htmlEncode,\r\n isLocalUrl: function(url) {\r\n return url && !localUrlRe.test(url);\r\n },\r\n\r\n expr: function(expression, safe, paramName) {\r\n expression = expression || \"\";\r\n\r\n if (typeof safe == STRING) {\r\n paramName = safe;\r\n safe = false;\r\n }\r\n\r\n paramName = paramName || \"d\";\r\n\r\n if (expression && expression.charAt(0) !== \"[\") {\r\n expression = \".\" + expression;\r\n }\r\n\r\n if (safe) {\r\n expression = wrapExpression(expression.split(\".\"), paramName);\r\n } else {\r\n expression = paramName + expression;\r\n }\r\n\r\n return expression;\r\n },\r\n\r\n getter: function(expression, safe) {\r\n return getterCache[expression] = getterCache[expression] || new Function(\"d\", \"return \" + kendo.expr(expression, safe));\r\n },\r\n\r\n setter: function(expression) {\r\n return setterCache[expression] = setterCache[expression] || new Function(\"d,value\", kendo.expr(expression) + \"=value\");\r\n },\r\n\r\n accessor: function(expression) {\r\n return {\r\n get: kendo.getter(expression),\r\n set: kendo.setter(expression)\r\n };\r\n },\r\n\r\n guid: function() {\r\n var id = \"\", i, random;\r\n\r\n for (i = 0; i < 32; i++) {\r\n random = math.random() * 16 | 0;\r\n\r\n if (i == 8 || i == 12 || i == 16 || i == 20) {\r\n id += \"-\";\r\n }\r\n id += (i == 12 ? 4 : (i == 16 ? (random & 3 | 8) : random)).toString(16);\r\n }\r\n\r\n return id;\r\n },\r\n\r\n roleSelector: function(role) {\r\n return role.replace(/(\\S+)/g, \"[\" + kendo.attr(\"role\") + \"=$1],\").slice(0, -1);\r\n },\r\n\r\n triggeredByInput: function(e) {\r\n return (/^(label|input|textarea|select)$/i).test(e.target.tagName);\r\n },\r\n\r\n logToConsole: function(message) {\r\n var console = window.console;\r\n\r\n if (typeof(console) != \"undefined\" && console.log) {\r\n console.log(message);\r\n }\r\n }\r\n });\r\n\r\n var Widget = Observable.extend( {\r\n init: function(element, options) {\r\n var that = this;\r\n\r\n that.element = kendo.jQuery(element).handler(that);\r\n\r\n Observable.fn.init.call(that);\r\n\r\n options = that.options = extend(true, {}, that.options, options);\r\n\r\n if (!that.element.attr(kendo.attr(\"role\"))) {\r\n that.element.attr(kendo.attr(\"role\"), (options.name || \"\").toLowerCase());\r\n }\r\n\r\n that.element.data(\"kendo\" + options.prefix + options.name, that);\r\n\r\n that.bind(that.events, options);\r\n },\r\n\r\n events: [],\r\n\r\n options: {\r\n prefix: \"\"\r\n },\r\n\r\n _hasBindingTarget: function() {\r\n return !!this.element[0].kendoBindingTarget;\r\n },\r\n\r\n _tabindex: function(target) {\r\n target = target || this.wrapper;\r\n\r\n var element = this.element,\r\n TABINDEX = \"tabindex\",\r\n tabindex = target.attr(TABINDEX) || element.attr(TABINDEX);\r\n\r\n element.removeAttr(TABINDEX);\r\n\r\n target.attr(TABINDEX, !isNaN(tabindex) ? tabindex : 0);\r\n },\r\n\r\n setOptions: function(options) {\r\n this._setEvents(options);\r\n $.extend(this.options, options);\r\n },\r\n\r\n _setEvents: function(options) {\r\n var that = this,\r\n idx = 0,\r\n length = that.events.length,\r\n e;\r\n\r\n for (; idx < length; idx ++) {\r\n e = that.events[idx];\r\n if (that.options[e] && options[e]) {\r\n that.unbind(e, that.options[e]);\r\n }\r\n }\r\n\r\n that.bind(that.events, options);\r\n },\r\n\r\n resize: function(force) {\r\n var size = this.getSize(),\r\n currentSize = this._size;\r\n\r\n if (force || !currentSize || size.width !== currentSize.width || size.height !== currentSize.height) {\r\n this._resize(size);\r\n this.trigger(\"resize\", size);\r\n this._size = size;\r\n }\r\n },\r\n\r\n getSize: function() {\r\n return kendo.dimensions(this.element);\r\n },\r\n\r\n size: function(size) {\r\n if (!size) {\r\n return this.getSize();\r\n } else {\r\n this.setSize(size);\r\n }\r\n },\r\n\r\n setSize: $.noop,\r\n _resize: $.noop,\r\n\r\n destroy: function() {\r\n var that = this;\r\n\r\n that.element.removeData(\"kendo\" + that.options.prefix + that.options.name);\r\n that.element.removeData(\"handler\");\r\n that.unbind();\r\n }\r\n });\r\n\r\n kendo.dimensions = function(element, dimensions) {\r\n var domElement = element[0];\r\n\r\n if (dimensions) {\r\n element.css(dimensions);\r\n }\r\n\r\n return { width: domElement.offsetWidth, height: domElement.offsetHeight };\r\n };\r\n\r\n kendo.notify = noop;\r\n\r\n var templateRegExp = /template$/i,\r\n jsonRegExp = /^\\s*(?:\\{(?:.|\\r\\n|\\n)*\\}|\\[(?:.|\\r\\n|\\n)*\\])\\s*$/,\r\n jsonFormatRegExp = /^\\{(\\d+)(:[^\\}]+)?\\}|^\\[[A-Za-z_]*\\]$/,\r\n dashRegExp = /([A-Z])/g;\r\n\r\n function parseOption(element, option) {\r\n var value;\r\n\r\n if (option.indexOf(\"data\") === 0) {\r\n option = option.substring(4);\r\n option = option.charAt(0).toLowerCase() + option.substring(1);\r\n }\r\n\r\n option = option.replace(dashRegExp, \"-$1\");\r\n value = element.getAttribute(\"data-\" + kendo.ns + option);\r\n\r\n if (value === null) {\r\n value = undefined;\r\n } else if (value === \"null\") {\r\n value = null;\r\n } else if (value === \"true\") {\r\n value = true;\r\n } else if (value === \"false\") {\r\n value = false;\r\n } else if (numberRegExp.test(value)) {\r\n value = parseFloat(value);\r\n } else if (jsonRegExp.test(value) && !jsonFormatRegExp.test(value)) {\r\n value = new Function(\"return (\" + value + \")\")();\r\n }\r\n\r\n return value;\r\n }\r\n\r\n function parseOptions(element, options) {\r\n var result = {},\r\n option,\r\n value;\r\n\r\n for (option in options) {\r\n value = parseOption(element, option);\r\n\r\n if (value !== undefined) {\r\n\r\n if (templateRegExp.test(option)) {\r\n value = kendo.template($(\"#\" + value).html());\r\n }\r\n\r\n result[option] = value;\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n kendo.initWidget = function(element, options, roles) {\r\n var result,\r\n option,\r\n widget,\r\n idx,\r\n length,\r\n role,\r\n value,\r\n dataSource;\r\n\r\n // Preserve backwards compatibility with (element, options, namespace) signature, where namespace was kendo.ui\r\n if (!roles) {\r\n roles = kendo.ui.roles;\r\n } else if (roles.roles) {\r\n roles = roles.roles;\r\n }\r\n\r\n element = element.nodeType ? element : element[0];\r\n\r\n role = element.getAttribute(\"data-\" + kendo.ns + \"role\");\r\n\r\n if (!role) {\r\n return;\r\n }\r\n\r\n if (role.indexOf(\".\") === -1) {\r\n widget = roles[role];\r\n } else { // full namespace path - like kendo.ui.Widget\r\n widget = kendo.getter(role)(window);\r\n }\r\n\r\n if (!widget) {\r\n return;\r\n }\r\n\r\n dataSource = parseOption(element, \"dataSource\");\r\n\r\n options = $.extend({}, parseOptions(element, widget.fn.options), options);\r\n\r\n if (dataSource) {\r\n if (typeof dataSource === STRING) {\r\n options.dataSource = kendo.getter(dataSource)(window);\r\n } else {\r\n options.dataSource = dataSource;\r\n }\r\n }\r\n\r\n for (idx = 0, length = widget.fn.events.length; idx < length; idx++) {\r\n option = widget.fn.events[idx];\r\n\r\n value = parseOption(element, option);\r\n\r\n if (value !== undefined) {\r\n options[option] = kendo.getter(value)(window);\r\n }\r\n }\r\n\r\n result = $(element).data(\"kendo\" + widget.fn.options.prefix + widget.fn.options.name);\r\n\r\n if (!result) {\r\n result = new widget(element, options);\r\n } else {\r\n result.setOptions(options);\r\n }\r\n\r\n return result;\r\n };\r\n\r\n kendo.rolesFromNamespaces = function(namespaces) {\r\n var roles = [],\r\n idx,\r\n length;\r\n\r\n if (!namespaces[0]) {\r\n namespaces = [kendo.ui, kendo.dataviz.ui];\r\n }\r\n\r\n for (idx = 0, length = namespaces.length; idx < length; idx ++) {\r\n roles[idx] = namespaces[idx].roles;\r\n }\r\n\r\n return extend.apply(null, [{}].concat(roles.reverse()));\r\n };\r\n\r\n kendo.init = function(element) {\r\n var roles = kendo.rolesFromNamespaces(slice.call(arguments, 1));\r\n\r\n $(element).find(\"[data-\" + kendo.ns + \"role]\").addBack().each(function(){\r\n kendo.initWidget(this, {}, roles);\r\n });\r\n };\r\n\r\n kendo.destroy = function(element) {\r\n $(element).find(\"[data-\" + kendo.ns + \"role]\").addBack().each(function(){\r\n var widget = kendo.widgetInstance($(this));\r\n\r\n if (widget) {\r\n widget.destroy();\r\n }\r\n });\r\n };\r\n\r\n function containmentComparer(a, b) {\r\n return $.contains(a, b) ? -1 : 1;\r\n }\r\n\r\n function resizableWidget() {\r\n var widget = $(this);\r\n return ($.inArray(widget.attr(\"data-role\"), [\"slider\", \"rangeslider\"]) > 0) || widget.is(\":visible\");\r\n }\r\n\r\n kendo.resize = function(element) {\r\n var widgets = $(element).find(\"[data-\" + kendo.ns + \"role]\").addBack().filter(resizableWidget);\r\n\r\n if (!widgets.length) {\r\n return;\r\n }\r\n\r\n // sort widgets based on their parent-child relation\r\n var widgetsArray = $.makeArray(widgets);\r\n widgetsArray.sort(containmentComparer);\r\n\r\n // resize widgets\r\n $.each(widgetsArray, function () {\r\n var widget = kendo.widgetInstance($(this));\r\n if (widget) {\r\n widget.resize();\r\n }\r\n });\r\n };\r\n\r\n kendo.parseOptions = parseOptions;\r\n\r\n extend(kendo.ui, {\r\n Widget: Widget,\r\n roles: {},\r\n progress: function(container, toggle) {\r\n var mask = container.find(\".k-loading-mask\"),\r\n support = kendo.support,\r\n browser = support.browser,\r\n isRtl, leftRight, webkitCorrection, containerScrollLeft;\r\n\r\n if (toggle) {\r\n if (!mask.length) {\r\n isRtl = support.isRtl(container);\r\n leftRight = isRtl ? \"right\" : \"left\";\r\n containerScrollLeft = container.scrollLeft();\r\n webkitCorrection = browser.webkit ? (!isRtl ? 0 : container[0].scrollWidth - container.width() - 2 * containerScrollLeft) : 0;\r\n\r\n mask = $(\"
    Loading...
    \")\r\n .width(\"100%\").height(\"100%\")\r\n .css(\"top\", container.scrollTop())\r\n .css(leftRight, Math.abs(containerScrollLeft) + webkitCorrection)\r\n .prependTo(container);\r\n }\r\n } else if (mask) {\r\n mask.remove();\r\n }\r\n },\r\n plugin: function(widget, register, prefix) {\r\n var name = widget.fn.options.name,\r\n getter;\r\n\r\n register = register || kendo.ui;\r\n prefix = prefix || \"\";\r\n\r\n register[name] = widget;\r\n\r\n register.roles[name.toLowerCase()] = widget;\r\n\r\n getter = \"getKendo\" + prefix + name;\r\n name = \"kendo\" + prefix + name;\r\n\r\n $.fn[name] = function(options) {\r\n var value = this,\r\n args;\r\n\r\n if (typeof options === STRING) {\r\n args = slice.call(arguments, 1);\r\n\r\n this.each(function(){\r\n var widget = $.data(this, name),\r\n method,\r\n result;\r\n\r\n if (!widget) {\r\n throw new Error(kendo.format(\"Cannot call method '{0}' of {1} before it is initialized\", options, name));\r\n }\r\n\r\n method = widget[options];\r\n\r\n if (typeof method !== FUNCTION) {\r\n throw new Error(kendo.format(\"Cannot find method '{0}' of {1}\", options, name));\r\n }\r\n\r\n result = method.apply(widget, args);\r\n\r\n if (result !== undefined) {\r\n value = result;\r\n return false;\r\n }\r\n });\r\n } else {\r\n this.each(function() {\r\n new widget(this, options);\r\n });\r\n }\r\n\r\n return value;\r\n };\r\n\r\n $.fn[getter] = function() {\r\n return this.data(name);\r\n };\r\n }\r\n });\r\n\r\n var ContainerNullObject = { bind: function () { return this; }, nullObject: true };\r\n\r\n var MobileWidget = Widget.extend({\r\n init: function(element, options) {\r\n Widget.fn.init.call(this, element, options);\r\n this.element.autoApplyNS();\r\n this.wrapper = this.element;\r\n this.element.addClass(\"km-widget\");\r\n },\r\n\r\n destroy: function() {\r\n Widget.fn.destroy.call(this);\r\n this.element.kendoDestroy();\r\n },\r\n\r\n options: {\r\n prefix: \"Mobile\"\r\n },\r\n\r\n events: [],\r\n\r\n view: function() {\r\n var viewElement = this.element.closest(kendo.roleSelector(\"view splitview modalview drawer\"));\r\n return kendo.widgetInstance(viewElement, kendo.mobile.ui);\r\n },\r\n\r\n viewHasNativeScrolling: function() {\r\n var view = this.view();\r\n return view && view.options.useNativeScrolling;\r\n },\r\n\r\n container: function() {\r\n var element = this.element.closest(kendo.roleSelector(\"view layout modalview drawer\"));\r\n return kendo.widgetInstance(element, kendo.mobile.ui) || ContainerNullObject;\r\n }\r\n });\r\n\r\n extend(kendo.mobile, {\r\n init: function(element) {\r\n kendo.init(element, kendo.mobile.ui, kendo.ui, kendo.dataviz.ui);\r\n },\r\n\r\n appLevelNativeScrolling: function() {\r\n return kendo.mobile.application && kendo.mobile.application.options && kendo.mobile.application.options.useNativeScrolling;\r\n },\r\n\r\n ui: {\r\n Widget: MobileWidget,\r\n roles: {},\r\n plugin: function(widget) {\r\n kendo.ui.plugin(widget, kendo.mobile.ui, \"Mobile\");\r\n }\r\n }\r\n });\r\n\r\n kendo.touchScroller = function(elements, options) {\r\n // return the first touch scroller\r\n return $(elements).map(function(idx, element) {\r\n element = $(element);\r\n if (support.kineticScrollNeeded && kendo.mobile.ui.Scroller && !element.data(\"kendoMobileScroller\")) {\r\n element.kendoMobileScroller(options);\r\n return element.data(\"kendoMobileScroller\");\r\n } else {\r\n return false;\r\n }\r\n })[0];\r\n };\r\n\r\n kendo.preventDefault = function(e) {\r\n e.preventDefault();\r\n };\r\n\r\n kendo.widgetInstance = function(element, suites) {\r\n var role = element.data(kendo.ns + \"role\"),\r\n widgets = [], i, length;\r\n\r\n if (role) {\r\n // HACK!!! mobile view scroller widgets are instantiated on data-role=\"content\" elements. We need to discover them when resizing.\r\n if (role === \"content\") {\r\n role = \"scroller\";\r\n }\r\n\r\n if (suites) {\r\n if (suites[0]) {\r\n for (i = 0, length = suites.length; i < length; i ++) {\r\n widgets.push(suites[i].roles[role]);\r\n }\r\n } else {\r\n widgets.push(suites.roles[role]);\r\n }\r\n }\r\n else {\r\n widgets = [ kendo.ui.roles[role], kendo.dataviz.ui.roles[role], kendo.mobile.ui.roles[role] ];\r\n }\r\n\r\n if (role.indexOf(\".\") >= 0) {\r\n widgets = [ kendo.getter(role)(window) ];\r\n }\r\n\r\n for (i = 0, length = widgets.length; i < length; i ++) {\r\n var widget = widgets[i];\r\n if (widget) {\r\n var instance = element.data(\"kendo\" + widget.fn.options.prefix + widget.fn.options.name);\r\n if (instance) {\r\n return instance;\r\n }\r\n }\r\n }\r\n }\r\n };\r\n\r\n kendo.onResize = function(callback) {\r\n var handler = callback;\r\n if (support.mobileOS.android) {\r\n handler = function() { setTimeout(callback, 600); };\r\n }\r\n\r\n $(window).on(support.resize, handler);\r\n return handler;\r\n };\r\n\r\n kendo.unbindResize = function(callback) {\r\n $(window).off(support.resize, callback);\r\n };\r\n\r\n kendo.attrValue = function(element, key) {\r\n return element.data(kendo.ns + key);\r\n };\r\n\r\n kendo.days = {\r\n Sunday: 0,\r\n Monday: 1,\r\n Tuesday: 2,\r\n Wednesday: 3,\r\n Thursday: 4,\r\n Friday: 5,\r\n Saturday: 6\r\n };\r\n\r\n function focusable(element, isTabIndexNotNaN) {\r\n var nodeName = element.nodeName.toLowerCase();\r\n\r\n return (/input|select|textarea|button|object/.test(nodeName) ?\r\n !element.disabled :\r\n \"a\" === nodeName ?\r\n element.href || isTabIndexNotNaN :\r\n isTabIndexNotNaN\r\n ) &&\r\n visible(element);\r\n }\r\n\r\n function visible(element) {\r\n return !$(element).parents().addBack().filter(function() {\r\n return $.css(this,\"visibility\") === \"hidden\" || $.expr.filters.hidden(this);\r\n }).length;\r\n }\r\n\r\n $.extend($.expr[ \":\" ], {\r\n kendoFocusable: function(element) {\r\n var idx = $.attr(element, \"tabindex\");\r\n return focusable(element, !isNaN(idx) && idx > -1);\r\n }\r\n });\r\n\r\n var MOUSE_EVENTS = [\"mousedown\", \"mousemove\", \"mouseenter\", \"mouseleave\", \"mouseover\", \"mouseout\", \"mouseup\", \"click\"];\r\n var EXCLUDE_BUST_CLICK_SELECTOR = \"label, input, [data-rel=external]\";\r\n\r\n var MouseEventNormalizer = {\r\n setupMouseMute: function() {\r\n var idx = 0,\r\n length = MOUSE_EVENTS.length,\r\n element = document.documentElement;\r\n\r\n if (MouseEventNormalizer.mouseTrap || !support.eventCapture) {\r\n return;\r\n }\r\n\r\n MouseEventNormalizer.mouseTrap = true;\r\n\r\n MouseEventNormalizer.bustClick = false;\r\n MouseEventNormalizer.captureMouse = false;\r\n\r\n var handler = function(e) {\r\n if (MouseEventNormalizer.captureMouse) {\r\n if (e.type === \"click\") {\r\n if (MouseEventNormalizer.bustClick && !$(e.target).is(EXCLUDE_BUST_CLICK_SELECTOR)) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n }\r\n } else {\r\n e.stopPropagation();\r\n }\r\n }\r\n };\r\n\r\n for (; idx < length; idx++) {\r\n element.addEventListener(MOUSE_EVENTS[idx], handler, true);\r\n }\r\n },\r\n\r\n muteMouse: function(e) {\r\n MouseEventNormalizer.captureMouse = true;\r\n if (e.data.bustClick) {\r\n MouseEventNormalizer.bustClick = true;\r\n }\r\n clearTimeout(MouseEventNormalizer.mouseTrapTimeoutID);\r\n },\r\n\r\n unMuteMouse: function() {\r\n clearTimeout(MouseEventNormalizer.mouseTrapTimeoutID);\r\n MouseEventNormalizer.mouseTrapTimeoutID = setTimeout(function() {\r\n MouseEventNormalizer.captureMouse = false;\r\n MouseEventNormalizer.bustClick = false;\r\n }, 400);\r\n }\r\n };\r\n\r\n var eventMap = {\r\n down: \"touchstart mousedown\",\r\n move: \"mousemove touchmove\",\r\n up: \"mouseup touchend touchcancel\",\r\n cancel: \"mouseleave touchcancel\"\r\n };\r\n\r\n if (support.touch && (support.mobileOS.ios || support.mobileOS.android)) {\r\n eventMap = {\r\n down: \"touchstart\",\r\n move: \"touchmove\",\r\n up: \"touchend touchcancel\",\r\n cancel: \"touchcancel\"\r\n };\r\n } else if (support.pointers) {\r\n eventMap = {\r\n down: \"pointerdown\",\r\n move: \"pointermove\",\r\n up: \"pointerup\",\r\n cancel: \"pointercancel pointerleave\"\r\n };\r\n } else if (support.msPointers) {\r\n eventMap = {\r\n down: \"MSPointerDown\",\r\n move: \"MSPointerMove\",\r\n up: \"MSPointerUp\",\r\n cancel: \"MSPointerCancel MSPointerLeave\"\r\n };\r\n }\r\n\r\n if (support.msPointers && !(\"onmspointerenter\" in window)) { // IE10\r\n // Create MSPointerEnter/MSPointerLeave events using mouseover/out and event-time checks\r\n $.each({\r\n MSPointerEnter: \"MSPointerOver\",\r\n MSPointerLeave: \"MSPointerOut\"\r\n }, function( orig, fix ) {\r\n $.event.special[ orig ] = {\r\n delegateType: fix,\r\n bindType: fix,\r\n\r\n handle: function( event ) {\r\n var ret,\r\n target = this,\r\n related = event.relatedTarget,\r\n handleObj = event.handleObj;\r\n\r\n // For mousenter/leave call the handler if related is outside the target.\r\n // NB: No relatedTarget if the mouse left/entered the browser window\r\n if ( !related || (related !== target && !$.contains( target, related )) ) {\r\n event.type = handleObj.origType;\r\n ret = handleObj.handler.apply( this, arguments );\r\n event.type = fix;\r\n }\r\n return ret;\r\n }\r\n };\r\n });\r\n }\r\n\r\n\r\n var getEventMap = function(e) { return (eventMap[e] || e); },\r\n eventRegEx = /([^ ]+)/g;\r\n\r\n kendo.applyEventMap = function(events, ns) {\r\n events = events.replace(eventRegEx, getEventMap);\r\n\r\n if (ns) {\r\n events = events.replace(eventRegEx, \"$1.\" + ns);\r\n }\r\n\r\n return events;\r\n };\r\n\r\n var on = $.fn.on;\r\n\r\n function kendoJQuery(selector, context) {\r\n return new kendoJQuery.fn.init(selector, context);\r\n }\r\n\r\n extend(true, kendoJQuery, $);\r\n\r\n kendoJQuery.fn = kendoJQuery.prototype = new $();\r\n\r\n kendoJQuery.fn.constructor = kendoJQuery;\r\n\r\n kendoJQuery.fn.init = function(selector, context) {\r\n if (context && context instanceof $ && !(context instanceof kendoJQuery)) {\r\n context = kendoJQuery(context);\r\n }\r\n\r\n return $.fn.init.call(this, selector, context, rootjQuery);\r\n };\r\n\r\n kendoJQuery.fn.init.prototype = kendoJQuery.fn;\r\n\r\n var rootjQuery = kendoJQuery(document);\r\n\r\n extend(kendoJQuery.fn, {\r\n handler: function(handler) {\r\n this.data(\"handler\", handler);\r\n return this;\r\n },\r\n\r\n autoApplyNS: function(ns) {\r\n this.data(\"kendoNS\", ns || kendo.guid());\r\n return this;\r\n },\r\n\r\n on: function() {\r\n var that = this,\r\n ns = that.data(\"kendoNS\");\r\n\r\n // support for event map signature\r\n if (arguments.length === 1) {\r\n return on.call(that, arguments[0]);\r\n }\r\n\r\n var context = that,\r\n args = slice.call(arguments);\r\n\r\n if (typeof args[args.length -1] === UNDEFINED) {\r\n args.pop();\r\n }\r\n\r\n var callback = args[args.length - 1],\r\n events = kendo.applyEventMap(args[0], ns);\r\n\r\n // setup mouse trap\r\n if (support.mouseAndTouchPresent && events.search(/mouse|click/) > -1 && this[0] !== document.documentElement) {\r\n MouseEventNormalizer.setupMouseMute();\r\n\r\n var selector = args.length === 2 ? null : args[1],\r\n bustClick = events.indexOf(\"click\") > -1 && events.indexOf(\"touchend\") > -1;\r\n\r\n on.call(this,\r\n {\r\n touchstart: MouseEventNormalizer.muteMouse,\r\n touchend: MouseEventNormalizer.unMuteMouse\r\n },\r\n selector,\r\n {\r\n bustClick: bustClick\r\n });\r\n }\r\n\r\n if (typeof callback === STRING) {\r\n context = that.data(\"handler\");\r\n callback = context[callback];\r\n\r\n args[args.length - 1] = function(e) {\r\n callback.call(context, e);\r\n };\r\n }\r\n\r\n args[0] = events;\r\n\r\n on.apply(that, args);\r\n\r\n return that;\r\n },\r\n\r\n kendoDestroy: function(ns) {\r\n ns = ns || this.data(\"kendoNS\");\r\n\r\n if (ns) {\r\n this.off(\".\" + ns);\r\n }\r\n\r\n return this;\r\n }\r\n });\r\n\r\n kendo.jQuery = kendoJQuery;\r\n kendo.eventMap = eventMap;\r\n\r\n kendo.timezone = (function(){\r\n 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 };\r\n var days = { Sun: 0, Mon: 1, Tue: 2, Wed: 3, Thu: 4, Fri: 5, Sat: 6 };\r\n\r\n function ruleToDate(year, rule) {\r\n var date;\r\n var targetDay;\r\n var ourDay;\r\n var month = rule[3];\r\n var on = rule[4];\r\n var time = rule[5];\r\n var cache = rule[8];\r\n\r\n if (!cache) {\r\n rule[8] = cache = {};\r\n }\r\n\r\n if (cache[year]) {\r\n return cache[year];\r\n }\r\n\r\n if (!isNaN(on)) {\r\n date = new Date(Date.UTC(year, months[month], on, time[0], time[1], time[2], 0));\r\n } else if (on.indexOf(\"last\") === 0) {\r\n date = new Date(Date.UTC(year, months[month] + 1, 1, time[0] - 24, time[1], time[2], 0));\r\n\r\n targetDay = days[on.substr(4, 3)];\r\n ourDay = date.getUTCDay();\r\n\r\n date.setUTCDate(date.getUTCDate() + targetDay - ourDay - (targetDay > ourDay ? 7 : 0));\r\n } else if (on.indexOf(\">=\") >= 0) {\r\n date = new Date(Date.UTC(year, months[month], on.substr(5), time[0], time[1], time[2], 0));\r\n\r\n targetDay = days[on.substr(0, 3)];\r\n ourDay = date.getUTCDay();\r\n\r\n date.setUTCDate(date.getUTCDate() + targetDay - ourDay + (targetDay < ourDay ? 7 : 0));\r\n }\r\n\r\n return cache[year] = date;\r\n }\r\n\r\n function findRule(utcTime, rules, zone) {\r\n rules = rules[zone];\r\n\r\n if (!rules) {\r\n var time = zone.split(\":\");\r\n var offset = 0;\r\n\r\n if (time.length > 1) {\r\n offset = time[0] * 60 + Number(time[1]);\r\n }\r\n\r\n return [-1000000, 'max', '-', 'Jan', 1, [0, 0, 0], offset, '-'];\r\n }\r\n\r\n var year = new Date(utcTime).getUTCFullYear();\r\n\r\n rules = jQuery.grep(rules, function(rule) {\r\n var from = rule[0];\r\n var to = rule[1];\r\n\r\n return from <= year && (to >= year || (from == year && to == \"only\") || to == \"max\");\r\n });\r\n\r\n rules.push(utcTime);\r\n\r\n rules.sort(function(a, b) {\r\n if (typeof a != \"number\") {\r\n a = Number(ruleToDate(year, a));\r\n }\r\n\r\n if (typeof b != \"number\") {\r\n b = Number(ruleToDate(year, b));\r\n }\r\n\r\n return a - b;\r\n });\r\n\r\n var rule = rules[jQuery.inArray(utcTime, rules) - 1] || rules[rules.length - 1];\r\n\r\n return isNaN(rule) ? rule : null;\r\n }\r\n\r\n function findZone(utcTime, zones, timezone) {\r\n var zoneRules = zones[timezone];\r\n\r\n if (typeof zoneRules === \"string\") {\r\n zoneRules = zones[zoneRules];\r\n }\r\n\r\n if (!zoneRules) {\r\n throw new Error('Timezone \"' + timezone + '\" is either incorrect, or kendo.timezones.min.js is not included.');\r\n }\r\n\r\n for (var idx = zoneRules.length - 1; idx >= 0; idx--) {\r\n var until = zoneRules[idx][3];\r\n\r\n if (until && utcTime > until) {\r\n break;\r\n }\r\n }\r\n\r\n var zone = zoneRules[idx + 1];\r\n\r\n if (!zone) {\r\n throw new Error('Timezone \"' + timezone + '\" not found on ' + utcTime + \".\");\r\n }\r\n\r\n return zone;\r\n }\r\n\r\n function zoneAndRule(utcTime, zones, rules, timezone) {\r\n if (typeof utcTime != NUMBER) {\r\n utcTime = Date.UTC(utcTime.getFullYear(), utcTime.getMonth(),\r\n utcTime.getDate(), utcTime.getHours(), utcTime.getMinutes(),\r\n utcTime.getSeconds(), utcTime.getMilliseconds());\r\n }\r\n\r\n var zone = findZone(utcTime, zones, timezone);\r\n\r\n return {\r\n zone: zone,\r\n rule: findRule(utcTime, rules, zone[1])\r\n };\r\n }\r\n\r\n function offset(utcTime, timezone) {\r\n if (timezone == \"Etc/UTC\" || timezone == \"Etc/GMT\") {\r\n return 0;\r\n }\r\n\r\n var info = zoneAndRule(utcTime, this.zones, this.rules, timezone);\r\n var zone = info.zone;\r\n var rule = info.rule;\r\n\r\n return rule? zone[0] - rule[6] : zone[0];\r\n }\r\n\r\n function abbr(utcTime, timezone) {\r\n var info = zoneAndRule(utcTime, this.zones, this.rules, timezone);\r\n var zone = info.zone;\r\n var rule = info.rule;\r\n\r\n var base = zone[2];\r\n\r\n if (base.indexOf(\"/\") >= 0) {\r\n return base.split(\"/\")[rule && +rule[6] ? 1 : 0];\r\n } else if (base.indexOf(\"%s\") >= 0) {\r\n return base.replace(\"%s\", (!rule || rule[7] == \"-\") ? '' : rule[7]);\r\n }\r\n\r\n return base;\r\n }\r\n\r\n function convert(date, fromOffset, toOffset) {\r\n if (typeof fromOffset == STRING) {\r\n fromOffset = this.offset(date, fromOffset);\r\n }\r\n\r\n if (typeof toOffset == STRING) {\r\n toOffset = this.offset(date, toOffset);\r\n }\r\n\r\n var fromLocalOffset = date.getTimezoneOffset();\r\n\r\n date = new Date(date.getTime() + (fromOffset - toOffset) * 60000);\r\n\r\n var toLocalOffset = date.getTimezoneOffset();\r\n\r\n return new Date(date.getTime() + (toLocalOffset - fromLocalOffset) * 60000);\r\n }\r\n\r\n function apply(date, timezone) {\r\n return this.convert(date, date.getTimezoneOffset(), timezone);\r\n }\r\n\r\n function remove(date, timezone) {\r\n return this.convert(date, timezone, date.getTimezoneOffset());\r\n }\r\n\r\n function toLocalDate(time) {\r\n return this.apply(new Date(time), \"Etc/UTC\");\r\n }\r\n\r\n return {\r\n zones: {},\r\n rules: {},\r\n offset: offset,\r\n convert: convert,\r\n apply: apply,\r\n remove: remove,\r\n abbr: abbr,\r\n toLocalDate: toLocalDate\r\n };\r\n })();\r\n\r\n kendo.date = (function(){\r\n var MS_PER_MINUTE = 60000,\r\n MS_PER_DAY = 86400000;\r\n\r\n function adjustDST(date, hours) {\r\n if (hours === 0 && date.getHours() === 23) {\r\n date.setHours(date.getHours() + 2);\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n function setDayOfWeek(date, day, dir) {\r\n var hours = date.getHours();\r\n\r\n dir = dir || 1;\r\n day = ((day - date.getDay()) + (7 * dir)) % 7;\r\n\r\n date.setDate(date.getDate() + day);\r\n adjustDST(date, hours);\r\n }\r\n\r\n function dayOfWeek(date, day, dir) {\r\n date = new Date(date);\r\n setDayOfWeek(date, day, dir);\r\n return date;\r\n }\r\n\r\n function firstDayOfMonth(date) {\r\n return new Date(\r\n date.getFullYear(),\r\n date.getMonth(),\r\n 1\r\n );\r\n }\r\n\r\n function lastDayOfMonth(date) {\r\n var last = new Date(date.getFullYear(), date.getMonth() + 1, 0),\r\n first = firstDayOfMonth(date),\r\n timeOffset = Math.abs(last.getTimezoneOffset() - first.getTimezoneOffset());\r\n\r\n if (timeOffset) {\r\n last.setHours(first.getHours() + (timeOffset / 60));\r\n }\r\n\r\n return last;\r\n }\r\n\r\n function getDate(date) {\r\n date = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0);\r\n adjustDST(date, 0);\r\n return date;\r\n }\r\n\r\n function toUtcTime(date) {\r\n return Date.UTC(date.getFullYear(), date.getMonth(),\r\n date.getDate(), date.getHours(), date.getMinutes(),\r\n date.getSeconds(), date.getMilliseconds());\r\n }\r\n\r\n function getMilliseconds(date) {\r\n return date.getTime() - getDate(date);\r\n }\r\n\r\n function isInTimeRange(value, min, max) {\r\n var msMin = getMilliseconds(min),\r\n msMax = getMilliseconds(max),\r\n msValue;\r\n\r\n if (!value || msMin == msMax) {\r\n return true;\r\n }\r\n\r\n if (min >= max) {\r\n max += MS_PER_DAY;\r\n }\r\n\r\n msValue = getMilliseconds(value);\r\n\r\n if (msMin > msValue) {\r\n msValue += MS_PER_DAY;\r\n }\r\n\r\n if (msMax < msMin) {\r\n msMax += MS_PER_DAY;\r\n }\r\n\r\n return msValue >= msMin && msValue <= msMax;\r\n }\r\n\r\n function isInDateRange(value, min, max) {\r\n var msMin = min.getTime(),\r\n msMax = max.getTime(),\r\n msValue;\r\n\r\n if (msMin >= msMax) {\r\n msMax += MS_PER_DAY;\r\n }\r\n\r\n msValue = value.getTime();\r\n\r\n return msValue >= msMin && msValue <= msMax;\r\n }\r\n\r\n function addDays(date, offset) {\r\n var hours = date.getHours();\r\n date = new Date(date);\r\n\r\n setTime(date, offset * MS_PER_DAY);\r\n adjustDST(date, hours);\r\n return date;\r\n }\r\n\r\n function setTime(date, milliseconds, ignoreDST) {\r\n var offset = date.getTimezoneOffset();\r\n var difference;\r\n\r\n date.setTime(date.getTime() + milliseconds);\r\n\r\n if (!ignoreDST) {\r\n difference = date.getTimezoneOffset() - offset;\r\n date.setTime(date.getTime() + difference * MS_PER_MINUTE);\r\n }\r\n }\r\n\r\n function today() {\r\n return getDate(new Date());\r\n }\r\n\r\n function isToday(date) {\r\n return getDate(date).getTime() == today().getTime();\r\n }\r\n\r\n function toInvariantTime(date) {\r\n var staticDate = new Date(1980, 1, 1, 0, 0, 0);\r\n\r\n if (date) {\r\n staticDate.setHours(date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\r\n }\r\n\r\n return staticDate;\r\n }\r\n\r\n return {\r\n adjustDST: adjustDST,\r\n dayOfWeek: dayOfWeek,\r\n setDayOfWeek: setDayOfWeek,\r\n getDate: getDate,\r\n isInDateRange: isInDateRange,\r\n isInTimeRange: isInTimeRange,\r\n isToday: isToday,\r\n nextDay: function(date) {\r\n return addDays(date, 1);\r\n },\r\n previousDay: function(date) {\r\n return addDays(date, -1);\r\n },\r\n toUtcTime: toUtcTime,\r\n MS_PER_DAY: MS_PER_DAY,\r\n MS_PER_HOUR: 60 * MS_PER_MINUTE,\r\n MS_PER_MINUTE: MS_PER_MINUTE,\r\n setTime: setTime,\r\n addDays: addDays,\r\n today: today,\r\n toInvariantTime: toInvariantTime,\r\n firstDayOfMonth: firstDayOfMonth,\r\n lastDayOfMonth: lastDayOfMonth,\r\n getMilliseconds: getMilliseconds\r\n //TODO methods: combine date portion and time portion from arguments - date1, date 2\r\n };\r\n })();\r\n\r\n\r\n kendo.stripWhitespace = function(element) {\r\n var iterator = document.createNodeIterator(element, NodeFilter.SHOW_TEXT, function(node) {\r\n return node.parentNode == element ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;\r\n }, false);\r\n\r\n while (iterator.nextNode()) {\r\n if (iterator.referenceNode && !iterator.referenceNode.textContent.trim()) {\r\n iterator.referenceNode.parentNode.removeChild(iterator.referenceNode);\r\n }\r\n }\r\n };\r\n\r\n var animationFrame = window.requestAnimationFrame ||\r\n window.webkitRequestAnimationFrame ||\r\n window.mozRequestAnimationFrame ||\r\n window.oRequestAnimationFrame ||\r\n window.msRequestAnimationFrame ||\r\n function(callback){ setTimeout(callback, 1000 / 60); };\r\n\r\n kendo.animationFrame = function(callback) {\r\n animationFrame.call(window, callback);\r\n };\r\n\r\n var animationQueue = [];\r\n\r\n kendo.queueAnimation = function(callback) {\r\n animationQueue[animationQueue.length] = callback;\r\n if (animationQueue.length === 1) {\r\n kendo.runNextAnimation();\r\n }\r\n };\r\n\r\n kendo.runNextAnimation = function() {\r\n kendo.animationFrame(function() {\r\n if (animationQueue[0]) {\r\n animationQueue.shift()();\r\n if (animationQueue[0]) {\r\n kendo.runNextAnimation();\r\n }\r\n }\r\n });\r\n };\r\n\r\n kendo.parseQueryStringParams = function(url) {\r\n var queryString = url.split('?')[1] || \"\",\r\n params = {},\r\n paramParts = queryString.split(/&|=/),\r\n length = paramParts.length,\r\n idx = 0;\r\n\r\n for (; idx < length; idx += 2) {\r\n if(paramParts[idx] !== \"\") {\r\n params[decodeURIComponent(paramParts[idx])] = decodeURIComponent(paramParts[idx + 1]);\r\n }\r\n }\r\n\r\n return params;\r\n };\r\n\r\n var OS = kendo.support.mobileOS,\r\n invalidZeroEvents = OS && OS.android,\r\n mobileChrome = (invalidZeroEvents && OS.browser == \"chrome\");\r\n\r\n kendo.elementUnderCursor = function(e) {\r\n if (mobileChrome) {\r\n return document.elementFromPoint(e.x.screen, e.y.screen);\r\n } else {\r\n return document.elementFromPoint(e.x.client, e.y.client);\r\n }\r\n };\r\n\r\n kendo.wheelDeltaY = function(jQueryEvent) {\r\n var e = jQueryEvent.originalEvent,\r\n deltaY = e.wheelDeltaY,\r\n delta;\r\n\r\n if (e.wheelDelta) { // Webkit and IE\r\n if (deltaY === undefined || deltaY) { // IE does not have deltaY, thus always scroll (horizontal scrolling is treated as vertical)\r\n delta = e.wheelDelta;\r\n }\r\n } else if (e.detail && e.axis === e.VERTICAL_AXIS) { // Firefox and Opera\r\n delta = (-e.detail) * 10;\r\n }\r\n\r\n return delta;\r\n };\r\n\r\n kendo.caret = function (element, start, end) {\r\n var rangeElement;\r\n var isPosition = start !== undefined;\r\n\r\n if (end === undefined) {\r\n end = start;\r\n }\r\n\r\n if (element[0]) {\r\n element = element[0];\r\n }\r\n\r\n if (isPosition && element.disabled) {\r\n return;\r\n }\r\n\r\n try {\r\n if (element.selectionStart !== undefined) {\r\n if (isPosition) {\r\n element.focus();\r\n element.setSelectionRange(start, end);\r\n } else {\r\n start = [element.selectionStart, element.selectionEnd];\r\n }\r\n } else if (document.selection) {\r\n if ($(element).is(\":visible\")) {\r\n element.focus();\r\n }\r\n\r\n rangeElement = element.createTextRange();\r\n\r\n if (isPosition) {\r\n rangeElement.collapse(true);\r\n rangeElement.moveStart(\"character\", start);\r\n rangeElement.moveEnd(\"character\", end - start);\r\n rangeElement.select();\r\n } else {\r\n var rangeDuplicated = rangeElement.duplicate(),\r\n selectionStart, selectionEnd;\r\n\r\n rangeElement.moveToBookmark(document.selection.createRange().getBookmark());\r\n rangeDuplicated.setEndPoint('EndToStart', rangeElement);\r\n selectionStart = rangeDuplicated.text.length;\r\n selectionEnd = selectionStart + rangeElement.text.length;\r\n\r\n start = [selectionStart, selectionEnd];\r\n }\r\n }\r\n } catch(e) {\r\n /* element is not focused or it is not in the DOM */\r\n start = [];\r\n }\r\n\r\n return start;\r\n };\r\n\r\n})(jQuery);\r\n\r\nreturn window.kendo;\r\n\r\n}, typeof define == 'function' && define.amd ? define : function(_, f){ f(); });","/*\r\n* Kendo UI Complete v2014.1.318 (http://kendoui.com)\r\n* Copyright 2014 Telerik AD. All rights reserved.\r\n*\r\n* Kendo UI Complete commercial licenses may be obtained at\r\n* http://www.telerik.com/purchase/license-agreement/kendo-ui-complete\r\n* If you do not own a commercial license, this file shall be governed by the trial license terms.\r\n*/\r\n(function(f, define){\r\n define([ \"./kendo.core\", \"./kendo.data.odata\", \"./kendo.data.xml\" ], f);\r\n})(function(){\r\n\r\n/*jshint eqnull: true, loopfunc: true, evil: true */\r\n(function($, undefined) {\r\n var extend = $.extend,\r\n proxy = $.proxy,\r\n isPlainObject = $.isPlainObject,\r\n isEmptyObject = $.isEmptyObject,\r\n isArray = $.isArray,\r\n grep = $.grep,\r\n ajax = $.ajax,\r\n map,\r\n each = $.each,\r\n noop = $.noop,\r\n kendo = window.kendo,\r\n isFunction = kendo.isFunction,\r\n Observable = kendo.Observable,\r\n Class = kendo.Class,\r\n STRING = \"string\",\r\n FUNCTION = \"function\",\r\n CREATE = \"create\",\r\n READ = \"read\",\r\n UPDATE = \"update\",\r\n DESTROY = \"destroy\",\r\n CHANGE = \"change\",\r\n SYNC = \"sync\",\r\n GET = \"get\",\r\n ERROR = \"error\",\r\n REQUESTSTART = \"requestStart\",\r\n PROGRESS = \"progress\",\r\n REQUESTEND = \"requestEnd\",\r\n crud = [CREATE, READ, UPDATE, DESTROY],\r\n identity = function(o) { return o; },\r\n getter = kendo.getter,\r\n stringify = kendo.stringify,\r\n math = Math,\r\n push = [].push,\r\n join = [].join,\r\n pop = [].pop,\r\n splice = [].splice,\r\n shift = [].shift,\r\n slice = [].slice,\r\n unshift = [].unshift,\r\n toString = {}.toString,\r\n stableSort = kendo.support.stableSort,\r\n dateRegExp = /^\\/Date\\((.*?)\\)\\/$/,\r\n newLineRegExp = /(\\r+|\\n+)/g,\r\n quoteRegExp = /(?=['\\\\])/g;\r\n\r\n var ObservableArray = Observable.extend({\r\n init: function(array, type) {\r\n var that = this;\r\n\r\n that.type = type || ObservableObject;\r\n\r\n Observable.fn.init.call(that);\r\n\r\n that.length = array.length;\r\n\r\n that.wrapAll(array, that);\r\n },\r\n\r\n toJSON: function() {\r\n var idx, length = this.length, value, json = new Array(length);\r\n\r\n for (idx = 0; idx < length; idx++){\r\n value = this[idx];\r\n\r\n if (value instanceof ObservableObject) {\r\n value = value.toJSON();\r\n }\r\n\r\n json[idx] = value;\r\n }\r\n\r\n return json;\r\n },\r\n\r\n parent: noop,\r\n\r\n wrapAll: function(source, target) {\r\n var that = this,\r\n idx,\r\n length,\r\n parent = function() {\r\n return that;\r\n };\r\n\r\n target = target || [];\r\n\r\n for (idx = 0, length = source.length; idx < length; idx++) {\r\n target[idx] = that.wrap(source[idx], parent);\r\n }\r\n\r\n return target;\r\n },\r\n\r\n wrap: function(object, parent) {\r\n var that = this,\r\n observable;\r\n\r\n if (object !== null && toString.call(object) === \"[object Object]\") {\r\n observable = object instanceof that.type || object instanceof Model;\r\n\r\n if (!observable) {\r\n object = object instanceof ObservableObject ? object.toJSON() : object;\r\n object = new that.type(object);\r\n }\r\n\r\n object.parent = parent;\r\n\r\n object.bind(CHANGE, function(e) {\r\n that.trigger(CHANGE, {\r\n field: e.field,\r\n node: e.node,\r\n index: e.index,\r\n items: e.items || [this],\r\n action: e.node ? (e.action || \"itemchange\") : \"itemchange\"\r\n });\r\n });\r\n }\r\n\r\n return object;\r\n },\r\n\r\n push: function() {\r\n var index = this.length,\r\n items = this.wrapAll(arguments),\r\n result;\r\n\r\n result = push.apply(this, items);\r\n\r\n this.trigger(CHANGE, {\r\n action: \"add\",\r\n index: index,\r\n items: items\r\n });\r\n\r\n return result;\r\n },\r\n\r\n slice: slice,\r\n\r\n join: join,\r\n\r\n pop: function() {\r\n var length = this.length, result = pop.apply(this);\r\n\r\n if (length) {\r\n this.trigger(CHANGE, {\r\n action: \"remove\",\r\n index: length - 1,\r\n items:[result]\r\n });\r\n }\r\n\r\n return result;\r\n },\r\n\r\n splice: function(index, howMany, item) {\r\n var items = this.wrapAll(slice.call(arguments, 2)),\r\n result, i, len;\r\n\r\n result = splice.apply(this, [index, howMany].concat(items));\r\n\r\n if (result.length) {\r\n this.trigger(CHANGE, {\r\n action: \"remove\",\r\n index: index,\r\n items: result\r\n });\r\n\r\n for (i = 0, len = result.length; i < len; i++) {\r\n if (result[i].children) {\r\n result[i].unbind(CHANGE);\r\n }\r\n }\r\n }\r\n\r\n if (item) {\r\n this.trigger(CHANGE, {\r\n action: \"add\",\r\n index: index,\r\n items: items\r\n });\r\n }\r\n return result;\r\n },\r\n\r\n shift: function() {\r\n var length = this.length, result = shift.apply(this);\r\n\r\n if (length) {\r\n this.trigger(CHANGE, {\r\n action: \"remove\",\r\n index: 0,\r\n items:[result]\r\n });\r\n }\r\n\r\n return result;\r\n },\r\n\r\n unshift: function() {\r\n var items = this.wrapAll(arguments),\r\n result;\r\n\r\n result = unshift.apply(this, items);\r\n\r\n this.trigger(CHANGE, {\r\n action: \"add\",\r\n index: 0,\r\n items: items\r\n });\r\n\r\n return result;\r\n },\r\n\r\n indexOf: function(item) {\r\n var that = this,\r\n idx,\r\n length;\r\n\r\n for (idx = 0, length = that.length; idx < length; idx++) {\r\n if (that[idx] === item) {\r\n return idx;\r\n }\r\n }\r\n return -1;\r\n },\r\n\r\n forEach: function(callback) {\r\n var idx = 0,\r\n length = this.length;\r\n\r\n for (; idx < length; idx++) {\r\n callback(this[idx], idx, this);\r\n }\r\n },\r\n\r\n map: function(callback) {\r\n var idx = 0,\r\n result = [],\r\n length = this.length;\r\n\r\n for (; idx < length; idx++) {\r\n result[idx] = callback(this[idx], idx, this);\r\n }\r\n\r\n return result;\r\n },\r\n\r\n filter: function(callback) {\r\n var idx = 0,\r\n result = [],\r\n item,\r\n length = this.length;\r\n\r\n for (; idx < length; idx++) {\r\n item = this[idx];\r\n if (callback(item, idx, this)) {\r\n result[result.length] = item;\r\n }\r\n }\r\n\r\n return result;\r\n },\r\n\r\n find: function(callback) {\r\n var idx = 0,\r\n item,\r\n length = this.length;\r\n\r\n for (; idx < length; idx++) {\r\n item = this[idx];\r\n if (callback(item, idx, this)) {\r\n return item;\r\n }\r\n }\r\n },\r\n\r\n every: function(callback) {\r\n var idx = 0,\r\n item,\r\n length = this.length;\r\n\r\n for (; idx < length; idx++) {\r\n item = this[idx];\r\n if (!callback(item, idx, this)) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n },\r\n\r\n some: function(callback) {\r\n var idx = 0,\r\n item,\r\n length = this.length;\r\n\r\n for (; idx < length; idx++) {\r\n item = this[idx];\r\n if (callback(item, idx, this)) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n },\r\n\r\n // non-standard collection methods\r\n remove: function(item) {\r\n this.splice(this.indexOf(item), 1);\r\n },\r\n\r\n empty: function() {\r\n this.splice(0, this.length);\r\n }\r\n });\r\n\r\n function eventHandler(context, type, field, prefix) {\r\n return function(e) {\r\n var event = {}, key;\r\n\r\n for (key in e) {\r\n event[key] = e[key];\r\n }\r\n\r\n if (prefix) {\r\n event.field = field + \".\" + e.field;\r\n } else {\r\n event.field = field;\r\n }\r\n\r\n if (type == CHANGE && context._notifyChange) {\r\n context._notifyChange(event);\r\n }\r\n\r\n context.trigger(type, event);\r\n };\r\n }\r\n\r\n var ObservableObject = Observable.extend({\r\n init: function(value) {\r\n var that = this,\r\n member,\r\n field,\r\n parent = function() {\r\n return that;\r\n };\r\n\r\n Observable.fn.init.call(this);\r\n\r\n for (field in value) {\r\n member = value[field];\r\n\r\n if (field.charAt(0) != \"_\") {\r\n member = that.wrap(member, field, parent);\r\n }\r\n\r\n that[field] = member;\r\n }\r\n\r\n that.uid = kendo.guid();\r\n },\r\n\r\n shouldSerialize: function(field) {\r\n return this.hasOwnProperty(field) && field !== \"_events\" && typeof this[field] !== FUNCTION && field !== \"uid\";\r\n },\r\n\r\n forEach: function(f) {\r\n for (var i in this) {\r\n if (this.shouldSerialize(i)) {\r\n f(this[i], i);\r\n }\r\n }\r\n },\r\n\r\n toJSON: function() {\r\n var result = {}, value, field;\r\n\r\n for (field in this) {\r\n if (this.shouldSerialize(field)) {\r\n value = this[field];\r\n\r\n if (value instanceof ObservableObject || value instanceof ObservableArray) {\r\n value = value.toJSON();\r\n }\r\n\r\n result[field] = value;\r\n }\r\n }\r\n\r\n return result;\r\n },\r\n\r\n get: function(field) {\r\n var that = this, result;\r\n\r\n that.trigger(GET, { field: field });\r\n\r\n if (field === \"this\") {\r\n result = that;\r\n } else {\r\n result = kendo.getter(field, true)(that);\r\n }\r\n\r\n return result;\r\n },\r\n\r\n _set: function(field, value) {\r\n var that = this;\r\n var composite = field.indexOf(\".\") >= 0;\r\n\r\n if (composite) {\r\n var paths = field.split(\".\"),\r\n path = \"\";\r\n\r\n while (paths.length > 1) {\r\n path += paths.shift();\r\n var obj = kendo.getter(path, true)(that);\r\n if (obj instanceof ObservableObject) {\r\n obj.set(paths.join(\".\"), value);\r\n return composite;\r\n }\r\n path += \".\";\r\n }\r\n }\r\n\r\n kendo.setter(field)(that, value);\r\n\r\n return composite;\r\n },\r\n\r\n set: function(field, value) {\r\n var that = this,\r\n current = kendo.getter(field, true)(that);\r\n\r\n if (current !== value) {\r\n\r\n if (!that.trigger(\"set\", { field: field, value: value })) {\r\n if (!that._set(field, that.wrap(value, field, function() { return that; })) || field.indexOf(\"(\") >= 0 || field.indexOf(\"[\") >= 0) {\r\n that.trigger(CHANGE, { field: field });\r\n }\r\n }\r\n }\r\n },\r\n\r\n parent: noop,\r\n\r\n wrap: function(object, field, parent) {\r\n var that = this,\r\n type = toString.call(object);\r\n\r\n if (object != null && (type === \"[object Object]\" || type === \"[object Array]\")) {\r\n var isObservableArray = object instanceof ObservableArray;\r\n var isDataSource = object instanceof DataSource;\r\n\r\n if (type === \"[object Object]\" && !isDataSource && !isObservableArray) {\r\n if (!(object instanceof ObservableObject)) {\r\n object = new ObservableObject(object);\r\n }\r\n\r\n if (object.parent() != parent()) {\r\n object.bind(GET, eventHandler(that, GET, field, true));\r\n object.bind(CHANGE, eventHandler(that, CHANGE, field, true));\r\n }\r\n } else if (type === \"[object Array]\" || isObservableArray || isDataSource) {\r\n if (!isObservableArray && !isDataSource) {\r\n object = new ObservableArray(object);\r\n }\r\n\r\n if (object.parent() != parent()) {\r\n object.bind(CHANGE, eventHandler(that, CHANGE, field, false));\r\n }\r\n }\r\n\r\n object.parent = parent;\r\n }\r\n\r\n return object;\r\n }\r\n });\r\n\r\n function equal(x, y) {\r\n if (x === y) {\r\n return true;\r\n }\r\n\r\n var xtype = $.type(x), ytype = $.type(y), field;\r\n\r\n if (xtype !== ytype) {\r\n return false;\r\n }\r\n\r\n if (xtype === \"date\") {\r\n return x.getTime() === y.getTime();\r\n }\r\n\r\n if (xtype !== \"object\" && xtype !== \"array\") {\r\n return false;\r\n }\r\n\r\n for (field in x) {\r\n if (!equal(x[field], y[field])) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n var parsers = {\r\n \"number\": function(value) {\r\n return kendo.parseFloat(value);\r\n },\r\n\r\n \"date\": function(value) {\r\n return kendo.parseDate(value);\r\n },\r\n\r\n \"boolean\": function(value) {\r\n if (typeof value === STRING) {\r\n return value.toLowerCase() === \"true\";\r\n }\r\n return value != null ? !!value : value;\r\n },\r\n\r\n \"string\": function(value) {\r\n return value != null ? (value + \"\") : value;\r\n },\r\n\r\n \"default\": function(value) {\r\n return value;\r\n }\r\n };\r\n\r\n var defaultValues = {\r\n \"string\": \"\",\r\n \"number\": 0,\r\n \"date\": new Date(),\r\n \"boolean\": false,\r\n \"default\": \"\"\r\n };\r\n\r\n function getFieldByName(obj, name) {\r\n var field,\r\n fieldName;\r\n\r\n for (fieldName in obj) {\r\n field = obj[fieldName];\r\n if (isPlainObject(field) && field.field && field.field === name) {\r\n return field;\r\n } else if (field === name) {\r\n return field;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n var Model = ObservableObject.extend({\r\n init: function(data) {\r\n var that = this;\r\n\r\n if (!data || $.isEmptyObject(data)) {\r\n data = $.extend({}, that.defaults, data);\r\n }\r\n\r\n ObservableObject.fn.init.call(that, data);\r\n\r\n that.dirty = false;\r\n\r\n if (that.idField) {\r\n that.id = that.get(that.idField);\r\n\r\n if (that.id === undefined) {\r\n that.id = that._defaultId;\r\n }\r\n }\r\n },\r\n\r\n shouldSerialize: function(field) {\r\n return ObservableObject.fn.shouldSerialize.call(this, field) && field !== \"uid\" && !(this.idField !== \"id\" && field === \"id\") && field !== \"dirty\" && field !== \"_accessors\";\r\n },\r\n\r\n _parse: function(field, value) {\r\n var that = this,\r\n fieldName = field,\r\n fields = (that.fields || {}),\r\n parse;\r\n\r\n field = fields[field];\r\n if (!field) {\r\n field = getFieldByName(fields, fieldName);\r\n }\r\n if (field) {\r\n parse = field.parse;\r\n if (!parse && field.type) {\r\n parse = parsers[field.type.toLowerCase()];\r\n }\r\n }\r\n\r\n return parse ? parse(value) : value;\r\n },\r\n\r\n _notifyChange: function(e) {\r\n var action = e.action;\r\n\r\n if (action == \"add\" || action == \"remove\") {\r\n this.dirty = true;\r\n }\r\n },\r\n\r\n editable: function(field) {\r\n field = (this.fields || {})[field];\r\n return field ? field.editable !== false : true;\r\n },\r\n\r\n set: function(field, value, initiator) {\r\n var that = this;\r\n\r\n if (that.editable(field)) {\r\n value = that._parse(field, value);\r\n\r\n if (!equal(value, that.get(field))) {\r\n that.dirty = true;\r\n ObservableObject.fn.set.call(that, field, value, initiator);\r\n }\r\n }\r\n },\r\n\r\n accept: function(data) {\r\n var that = this,\r\n parent = function() { return that; },\r\n field;\r\n\r\n for (field in data) {\r\n var value = data[field];\r\n\r\n if (field.charAt(0) != \"_\") {\r\n value = that.wrap(data[field], field, parent);\r\n }\r\n\r\n that._set(field, value);\r\n }\r\n\r\n if (that.idField) {\r\n that.id = that.get(that.idField);\r\n }\r\n\r\n that.dirty = false;\r\n },\r\n\r\n isNew: function() {\r\n return this.id === this._defaultId;\r\n }\r\n });\r\n\r\n Model.define = function(base, options) {\r\n if (options === undefined) {\r\n options = base;\r\n base = Model;\r\n }\r\n\r\n var model,\r\n proto = extend({ defaults: {} }, options),\r\n name,\r\n field,\r\n type,\r\n value,\r\n idx,\r\n length,\r\n fields = {},\r\n originalName,\r\n id = proto.id;\r\n\r\n if (id) {\r\n proto.idField = id;\r\n }\r\n\r\n if (proto.id) {\r\n delete proto.id;\r\n }\r\n\r\n if (id) {\r\n proto.defaults[id] = proto._defaultId = \"\";\r\n }\r\n\r\n if (toString.call(proto.fields) === \"[object Array]\") {\r\n for (idx = 0, length = proto.fields.length; idx < length; idx++) {\r\n field = proto.fields[idx];\r\n if (typeof field === STRING) {\r\n fields[field] = {};\r\n } else if (field.field) {\r\n fields[field.field] = field;\r\n }\r\n }\r\n proto.fields = fields;\r\n }\r\n\r\n for (name in proto.fields) {\r\n field = proto.fields[name];\r\n type = field.type || \"default\";\r\n value = null;\r\n originalName = name;\r\n\r\n name = typeof (field.field) === STRING ? field.field : name;\r\n\r\n if (!field.nullable) {\r\n value = proto.defaults[originalName !== name ? originalName : name] = field.defaultValue !== undefined ? field.defaultValue : defaultValues[type.toLowerCase()];\r\n }\r\n\r\n if (options.id === name) {\r\n proto._defaultId = value;\r\n }\r\n\r\n proto.defaults[originalName !== name ? originalName : name] = value;\r\n\r\n field.parse = field.parse || parsers[type];\r\n }\r\n\r\n model = base.extend(proto);\r\n model.define = function(options) {\r\n return Model.define(model, options);\r\n };\r\n\r\n if (proto.fields) {\r\n model.fields = proto.fields;\r\n model.idField = proto.idField;\r\n }\r\n\r\n return model;\r\n };\r\n\r\n var Comparer = {\r\n selector: function(field) {\r\n return isFunction(field) ? field : getter(field);\r\n },\r\n\r\n compare: function(field) {\r\n var selector = this.selector(field);\r\n return function (a, b) {\r\n a = selector(a);\r\n b = selector(b);\r\n\r\n if (a == null && b == null) {\r\n return 0;\r\n }\r\n\r\n if (a == null) {\r\n return -1;\r\n }\r\n\r\n if (b == null) {\r\n return 1;\r\n }\r\n\r\n if (a.localeCompare) {\r\n return a.localeCompare(b);\r\n }\r\n\r\n return a > b ? 1 : (a < b ? -1 : 0);\r\n };\r\n },\r\n\r\n create: function(sort) {\r\n var compare = sort.compare || this.compare(sort.field);\r\n\r\n if (sort.dir == \"desc\") {\r\n return function(a, b) {\r\n return compare(b, a, true);\r\n };\r\n }\r\n\r\n return compare;\r\n },\r\n\r\n combine: function(comparers) {\r\n return function(a, b) {\r\n var result = comparers[0](a, b),\r\n idx,\r\n length;\r\n\r\n for (idx = 1, length = comparers.length; idx < length; idx ++) {\r\n result = result || comparers[idx](a, b);\r\n }\r\n\r\n return result;\r\n };\r\n }\r\n };\r\n\r\n var StableComparer = extend({}, Comparer, {\r\n asc: function(field) {\r\n var selector = this.selector(field);\r\n return function (a, b) {\r\n var valueA = selector(a);\r\n var valueB = selector(b);\r\n\r\n if (valueA && valueA.getTime && valueB && valueB.getTime) {\r\n valueA = valueA.getTime();\r\n valueB = valueB.getTime();\r\n }\r\n\r\n if (valueA === valueB) {\r\n return a.__position - b.__position;\r\n }\r\n\r\n if (valueA == null) {\r\n return -1;\r\n }\r\n\r\n if (valueB == null) {\r\n return 1;\r\n }\r\n\r\n if (valueA.localeCompare) {\r\n return valueA.localeCompare(valueB);\r\n }\r\n\r\n return valueA > valueB ? 1 : -1;\r\n };\r\n },\r\n\r\n desc: function(field) {\r\n var selector = this.selector(field);\r\n return function (a, b) {\r\n var valueA = selector(a);\r\n var valueB = selector(b);\r\n\r\n if (valueA && valueA.getTime && valueB && valueB.getTime) {\r\n valueA = valueA.getTime();\r\n valueB = valueB.getTime();\r\n }\r\n\r\n if (valueA === valueB) {\r\n return a.__position - b.__position;\r\n }\r\n\r\n if (valueA == null) {\r\n return 1;\r\n }\r\n\r\n if (valueB == null) {\r\n return -1;\r\n }\r\n\r\n if (valueB.localeCompare) {\r\n return valueB.localeCompare(valueA);\r\n }\r\n\r\n return valueA < valueB ? 1 : -1;\r\n };\r\n },\r\n create: function(sort) {\r\n return this[sort.dir](sort.field);\r\n }\r\n });\r\n\r\n map = function (array, callback) {\r\n var idx, length = array.length, result = new Array(length);\r\n\r\n for (idx = 0; idx < length; idx++) {\r\n result[idx] = callback(array[idx], idx, array);\r\n }\r\n\r\n return result;\r\n };\r\n\r\n var operators = (function(){\r\n\r\n function quote(value) {\r\n return value.replace(quoteRegExp, \"\\\\\").replace(newLineRegExp, \"\");\r\n }\r\n\r\n function operator(op, a, b, ignore) {\r\n var date;\r\n\r\n if (b != null) {\r\n if (typeof b === STRING) {\r\n b = quote(b);\r\n date = dateRegExp.exec(b);\r\n if (date) {\r\n b = new Date(+date[1]);\r\n } else if (ignore) {\r\n b = \"'\" + b.toLowerCase() + \"'\";\r\n a = \"(\" + a + \" || '').toLowerCase()\";\r\n } else {\r\n b = \"'\" + b + \"'\";\r\n }\r\n }\r\n\r\n if (b.getTime) {\r\n //b looks like a Date\r\n a = \"(\" + a + \"?\" + a + \".getTime():\" + a + \")\";\r\n b = b.getTime();\r\n }\r\n }\r\n\r\n return a + \" \" + op + \" \" + b;\r\n }\r\n\r\n return {\r\n eq: function(a, b, ignore) {\r\n return operator(\"==\", a, b, ignore);\r\n },\r\n neq: function(a, b, ignore) {\r\n return operator(\"!=\", a, b, ignore);\r\n },\r\n gt: function(a, b, ignore) {\r\n return operator(\">\", a, b, ignore);\r\n },\r\n gte: function(a, b, ignore) {\r\n return operator(\">=\", a, b, ignore);\r\n },\r\n lt: function(a, b, ignore) {\r\n return operator(\"<\", a, b, ignore);\r\n },\r\n lte: function(a, b, ignore) {\r\n return operator(\"<=\", a, b, ignore);\r\n },\r\n startswith: function(a, b, ignore) {\r\n if (ignore) {\r\n a = \"(\" + a + \" || '').toLowerCase()\";\r\n if (b) {\r\n b = b.toLowerCase();\r\n }\r\n }\r\n\r\n if (b) {\r\n b = quote(b);\r\n }\r\n\r\n return a + \".lastIndexOf('\" + b + \"', 0) == 0\";\r\n },\r\n endswith: function(a, b, ignore) {\r\n if (ignore) {\r\n a = \"(\" + a + \" || '').toLowerCase()\";\r\n if (b) {\r\n b = b.toLowerCase();\r\n }\r\n }\r\n\r\n if (b) {\r\n b = quote(b);\r\n }\r\n\r\n return a + \".indexOf('\" + b + \"', \" + a + \".length - \" + (b || \"\").length + \") >= 0\";\r\n },\r\n contains: function(a, b, ignore) {\r\n if (ignore) {\r\n a = \"(\" + a + \" || '').toLowerCase()\";\r\n if (b) {\r\n b = b.toLowerCase();\r\n }\r\n }\r\n\r\n if (b) {\r\n b = quote(b);\r\n }\r\n\r\n return a + \".indexOf('\" + b + \"') >= 0\";\r\n },\r\n doesnotcontain: function(a, b, ignore) {\r\n if (ignore) {\r\n a = \"(\" + a + \" || '').toLowerCase()\";\r\n if (b) {\r\n b = b.toLowerCase();\r\n }\r\n }\r\n\r\n if (b) {\r\n b = quote(b);\r\n }\r\n\r\n return a + \".indexOf('\" + b + \"') == -1\";\r\n }\r\n };\r\n })();\r\n\r\n function Query(data) {\r\n this.data = data || [];\r\n }\r\n\r\n Query.filterExpr = function(expression) {\r\n var expressions = [],\r\n logic = { and: \" && \", or: \" || \" },\r\n idx,\r\n length,\r\n filter,\r\n expr,\r\n fieldFunctions = [],\r\n operatorFunctions = [],\r\n field,\r\n operator,\r\n filters = expression.filters;\r\n\r\n for (idx = 0, length = filters.length; idx < length; idx++) {\r\n filter = filters[idx];\r\n field = filter.field;\r\n operator = filter.operator;\r\n\r\n if (filter.filters) {\r\n expr = Query.filterExpr(filter);\r\n //Nested function fields or operators - update their index e.g. __o[0] -> __o[1]\r\n filter = expr.expression\r\n .replace(/__o\\[(\\d+)\\]/g, function(match, index) {\r\n index = +index;\r\n return \"__o[\" + (operatorFunctions.length + index) + \"]\";\r\n })\r\n .replace(/__f\\[(\\d+)\\]/g, function(match, index) {\r\n index = +index;\r\n return \"__f[\" + (fieldFunctions.length + index) + \"]\";\r\n });\r\n\r\n operatorFunctions.push.apply(operatorFunctions, expr.operators);\r\n fieldFunctions.push.apply(fieldFunctions, expr.fields);\r\n } else {\r\n if (typeof field === FUNCTION) {\r\n expr = \"__f[\" + fieldFunctions.length +\"](d)\";\r\n fieldFunctions.push(field);\r\n } else {\r\n expr = kendo.expr(field);\r\n }\r\n\r\n if (typeof operator === FUNCTION) {\r\n filter = \"__o[\" + operatorFunctions.length + \"](\" + expr + \", \" + filter.value + \")\";\r\n operatorFunctions.push(operator);\r\n } else {\r\n filter = operators[(operator || \"eq\").toLowerCase()](expr, filter.value, filter.ignoreCase !== undefined? filter.ignoreCase : true);\r\n }\r\n }\r\n\r\n expressions.push(filter);\r\n }\r\n\r\n return { expression: \"(\" + expressions.join(logic[expression.logic]) + \")\", fields: fieldFunctions, operators: operatorFunctions };\r\n };\r\n\r\n function normalizeSort(field, dir) {\r\n if (field) {\r\n var descriptor = typeof field === STRING ? { field: field, dir: dir } : field,\r\n descriptors = isArray(descriptor) ? descriptor : (descriptor !== undefined ? [descriptor] : []);\r\n\r\n return grep(descriptors, function(d) { return !!d.dir; });\r\n }\r\n }\r\n\r\n var operatorMap = {\r\n \"==\": \"eq\",\r\n equals: \"eq\",\r\n isequalto: \"eq\",\r\n equalto: \"eq\",\r\n equal: \"eq\",\r\n \"!=\": \"neq\",\r\n ne: \"neq\",\r\n notequals: \"neq\",\r\n isnotequalto: \"neq\",\r\n notequalto: \"neq\",\r\n notequal: \"neq\",\r\n \"<\": \"lt\",\r\n islessthan: \"lt\",\r\n lessthan: \"lt\",\r\n less: \"lt\",\r\n \"<=\": \"lte\",\r\n le: \"lte\",\r\n islessthanorequalto: \"lte\",\r\n lessthanequal: \"lte\",\r\n \">\": \"gt\",\r\n isgreaterthan: \"gt\",\r\n greaterthan: \"gt\",\r\n greater: \"gt\",\r\n \">=\": \"gte\",\r\n isgreaterthanorequalto: \"gte\",\r\n greaterthanequal: \"gte\",\r\n ge: \"gte\",\r\n notsubstringof: \"doesnotcontain\"\r\n };\r\n\r\n function normalizeOperator(expression) {\r\n var idx,\r\n length,\r\n filter,\r\n operator,\r\n filters = expression.filters;\r\n\r\n if (filters) {\r\n for (idx = 0, length = filters.length; idx < length; idx++) {\r\n filter = filters[idx];\r\n operator = filter.operator;\r\n\r\n if (operator && typeof operator === STRING) {\r\n filter.operator = operatorMap[operator.toLowerCase()] || operator;\r\n }\r\n\r\n normalizeOperator(filter);\r\n }\r\n }\r\n }\r\n\r\n function normalizeFilter(expression) {\r\n if (expression && !isEmptyObject(expression)) {\r\n if (isArray(expression) || !expression.filters) {\r\n expression = {\r\n logic: \"and\",\r\n filters: isArray(expression) ? expression : [expression]\r\n };\r\n }\r\n\r\n normalizeOperator(expression);\r\n\r\n return expression;\r\n }\r\n }\r\n\r\n Query.normalizeFilter = normalizeFilter;\r\n\r\n function normalizeAggregate(expressions) {\r\n return isArray(expressions) ? expressions : [expressions];\r\n }\r\n\r\n function normalizeGroup(field, dir) {\r\n var descriptor = typeof field === STRING ? { field: field, dir: dir } : field,\r\n descriptors = isArray(descriptor) ? descriptor : (descriptor !== undefined ? [descriptor] : []);\r\n\r\n return map(descriptors, function(d) { return { field: d.field, dir: d.dir || \"asc\", aggregates: d.aggregates }; });\r\n }\r\n\r\n Query.prototype = {\r\n toArray: function () {\r\n return this.data;\r\n },\r\n range: function(index, count) {\r\n return new Query(this.data.slice(index, index + count));\r\n },\r\n skip: function (count) {\r\n return new Query(this.data.slice(count));\r\n },\r\n take: function (count) {\r\n return new Query(this.data.slice(0, count));\r\n },\r\n select: function (selector) {\r\n return new Query(map(this.data, selector));\r\n },\r\n order: function(selector, dir) {\r\n var sort = { dir: dir };\r\n\r\n if (selector) {\r\n if (selector.compare) {\r\n sort.compare = selector.compare;\r\n } else {\r\n sort.field = selector;\r\n }\r\n }\r\n\r\n return new Query(this.data.slice(0).sort(Comparer.create(sort)));\r\n },\r\n orderBy: function(selector) {\r\n return this.order(selector, \"asc\");\r\n },\r\n orderByDescending: function(selector) {\r\n return this.order(selector, \"desc\");\r\n },\r\n sort: function(field, dir, comparer) {\r\n var idx,\r\n length,\r\n descriptors = normalizeSort(field, dir),\r\n comparers = [];\r\n\r\n comparer = comparer || Comparer;\r\n\r\n if (descriptors.length) {\r\n for (idx = 0, length = descriptors.length; idx < length; idx++) {\r\n comparers.push(comparer.create(descriptors[idx]));\r\n }\r\n\r\n return this.orderBy({ compare: comparer.combine(comparers) });\r\n }\r\n\r\n return this;\r\n },\r\n\r\n filter: function(expressions) {\r\n var idx,\r\n current,\r\n length,\r\n compiled,\r\n predicate,\r\n data = this.data,\r\n fields,\r\n operators,\r\n result = [],\r\n filter;\r\n\r\n expressions = normalizeFilter(expressions);\r\n\r\n if (!expressions || expressions.filters.length === 0) {\r\n return this;\r\n }\r\n\r\n compiled = Query.filterExpr(expressions);\r\n fields = compiled.fields;\r\n operators = compiled.operators;\r\n\r\n predicate = filter = new Function(\"d, __f, __o\", \"return \" + compiled.expression);\r\n\r\n if (fields.length || operators.length) {\r\n filter = function(d) {\r\n return predicate(d, fields, operators);\r\n };\r\n }\r\n\r\n for (idx = 0, length = data.length; idx < length; idx++) {\r\n current = data[idx];\r\n\r\n if (filter(current)) {\r\n result.push(current);\r\n }\r\n }\r\n return new Query(result);\r\n },\r\n\r\n group: function(descriptors, allData) {\r\n descriptors = normalizeGroup(descriptors || []);\r\n allData = allData || this.data;\r\n\r\n var that = this,\r\n result = new Query(that.data),\r\n descriptor;\r\n\r\n if (descriptors.length > 0) {\r\n descriptor = descriptors[0];\r\n result = result.groupBy(descriptor).select(function(group) {\r\n var data = new Query(allData).filter([ { field: group.field, operator: \"eq\", value: group.value, ignoreCase: false } ]);\r\n return {\r\n field: group.field,\r\n value: group.value,\r\n items: descriptors.length > 1 ? new Query(group.items).group(descriptors.slice(1), data.toArray()).toArray() : group.items,\r\n hasSubgroups: descriptors.length > 1,\r\n aggregates: data.aggregate(descriptor.aggregates)\r\n };\r\n });\r\n }\r\n return result;\r\n },\r\n\r\n groupBy: function(descriptor) {\r\n if (isEmptyObject(descriptor) || !this.data.length) {\r\n return new Query([]);\r\n }\r\n\r\n var field = descriptor.field,\r\n sorted = this._sortForGrouping(field, descriptor.dir || \"asc\"),\r\n accessor = kendo.accessor(field),\r\n item,\r\n groupValue = accessor.get(sorted[0], field),\r\n group = {\r\n field: field,\r\n value: groupValue,\r\n items: []\r\n },\r\n currentValue,\r\n idx,\r\n len,\r\n result = [group];\r\n\r\n for(idx = 0, len = sorted.length; idx < len; idx++) {\r\n item = sorted[idx];\r\n currentValue = accessor.get(item, field);\r\n if(!groupValueComparer(groupValue, currentValue)) {\r\n groupValue = currentValue;\r\n group = {\r\n field: field,\r\n value: groupValue,\r\n items: []\r\n };\r\n result.push(group);\r\n }\r\n group.items.push(item);\r\n }\r\n return new Query(result);\r\n },\r\n\r\n _sortForGrouping: function(field, dir) {\r\n var idx, length,\r\n data = this.data;\r\n\r\n if (!stableSort) {\r\n for (idx = 0, length = data.length; idx < length; idx++) {\r\n data[idx].__position = idx;\r\n }\r\n\r\n data = new Query(data).sort(field, dir, StableComparer).toArray();\r\n\r\n for (idx = 0, length = data.length; idx < length; idx++) {\r\n delete data[idx].__position;\r\n }\r\n return data;\r\n }\r\n return this.sort(field, dir).toArray();\r\n },\r\n\r\n aggregate: function (aggregates) {\r\n var idx,\r\n len,\r\n result = {};\r\n\r\n if (aggregates && aggregates.length) {\r\n for(idx = 0, len = this.data.length; idx < len; idx++) {\r\n calculateAggregate(result, aggregates, this.data[idx], idx, len);\r\n }\r\n }\r\n return result;\r\n }\r\n };\r\n\r\n function groupValueComparer(a, b) {\r\n if (a && a.getTime && b && b.getTime) {\r\n return a.getTime() === b.getTime();\r\n }\r\n return a === b;\r\n }\r\n\r\n function calculateAggregate(accumulator, aggregates, item, index, length) {\r\n aggregates = aggregates || [];\r\n var idx,\r\n aggr,\r\n functionName,\r\n len = aggregates.length;\r\n\r\n for (idx = 0; idx < len; idx++) {\r\n aggr = aggregates[idx];\r\n functionName = aggr.aggregate;\r\n var field = aggr.field;\r\n accumulator[field] = accumulator[field] || {};\r\n accumulator[field][functionName] = functions[functionName.toLowerCase()](accumulator[field][functionName], item, kendo.accessor(field), index, length);\r\n }\r\n }\r\n\r\n var functions = {\r\n sum: function(accumulator, item, accessor) {\r\n var value = accessor.get(item);\r\n\r\n if (!isNumber(accumulator)) {\r\n accumulator = value;\r\n } else if (isNumber(value)) {\r\n accumulator += value;\r\n }\r\n\r\n return accumulator;\r\n },\r\n count: function(accumulator) {\r\n return (accumulator || 0) + 1;\r\n },\r\n average: function(accumulator, item, accessor, index, length) {\r\n var value = accessor.get(item);\r\n\r\n if (!isNumber(accumulator)) {\r\n accumulator = value;\r\n } else if (isNumber(value)) {\r\n accumulator += value;\r\n }\r\n\r\n if(index == length - 1 && isNumber(accumulator)) {\r\n accumulator = accumulator / length;\r\n }\r\n return accumulator;\r\n },\r\n max: function(accumulator, item, accessor) {\r\n var value = accessor.get(item);\r\n\r\n if (!isNumber(accumulator)) {\r\n accumulator = value;\r\n }\r\n\r\n if(accumulator < value && isNumber(value)) {\r\n accumulator = value;\r\n }\r\n return accumulator;\r\n },\r\n min: function(accumulator, item, accessor) {\r\n var value = accessor.get(item);\r\n\r\n if (!isNumber(accumulator)) {\r\n accumulator = value;\r\n }\r\n\r\n if(accumulator > value && isNumber(value)) {\r\n accumulator = value;\r\n }\r\n return accumulator;\r\n }\r\n };\r\n\r\n function isNumber(val) {\r\n return typeof val === \"number\" && !isNaN(val);\r\n }\r\n\r\n function toJSON(array) {\r\n var idx, length = array.length, result = new Array(length);\r\n\r\n for (idx = 0; idx < length; idx++) {\r\n result[idx] = array[idx].toJSON();\r\n }\r\n\r\n return result;\r\n }\r\n\r\n Query.process = function(data, options) {\r\n options = options || {};\r\n\r\n var query = new Query(data),\r\n group = options.group,\r\n sort = normalizeGroup(group || []).concat(normalizeSort(options.sort || [])),\r\n total,\r\n filter = options.filter,\r\n skip = options.skip,\r\n take = options.take;\r\n\r\n if (filter) {\r\n query = query.filter(filter);\r\n total = query.toArray().length;\r\n }\r\n\r\n if (sort) {\r\n query = query.sort(sort);\r\n\r\n if (group) {\r\n data = query.toArray();\r\n }\r\n }\r\n\r\n if (skip !== undefined && take !== undefined) {\r\n query = query.range(skip, take);\r\n }\r\n\r\n if (group) {\r\n query = query.group(group, data);\r\n }\r\n\r\n return {\r\n total: total,\r\n data: query.toArray()\r\n };\r\n };\r\n\r\n function calculateAggregates(data, options) {\r\n options = options || {};\r\n\r\n var query = new Query(data),\r\n aggregates = options.aggregate,\r\n filter = options.filter;\r\n\r\n if(filter) {\r\n query = query.filter(filter);\r\n }\r\n\r\n return query.aggregate(aggregates);\r\n }\r\n\r\n var LocalTransport = Class.extend({\r\n init: function(options) {\r\n this.data = options.data;\r\n },\r\n\r\n read: function(options) {\r\n options.success(this.data);\r\n },\r\n update: function(options) {\r\n options.success(options.data);\r\n },\r\n create: function(options) {\r\n options.success(options.data);\r\n },\r\n destroy: function(options) {\r\n options.success(options.data);\r\n }\r\n });\r\n\r\n var RemoteTransport = Class.extend( {\r\n init: function(options) {\r\n var that = this, parameterMap;\r\n\r\n options = that.options = extend({}, that.options, options);\r\n\r\n each(crud, function(index, type) {\r\n if (typeof options[type] === STRING) {\r\n options[type] = {\r\n url: options[type]\r\n };\r\n }\r\n });\r\n\r\n that.cache = options.cache? Cache.create(options.cache) : {\r\n find: noop,\r\n add: noop\r\n };\r\n\r\n parameterMap = options.parameterMap;\r\n\r\n if (isFunction(options.push)) {\r\n that.push = options.push;\r\n }\r\n\r\n if (!that.push) {\r\n that.push = identity;\r\n }\r\n\r\n that.parameterMap = isFunction(parameterMap) ? parameterMap : function(options) {\r\n var result = {};\r\n\r\n each(options, function(option, value) {\r\n if (option in parameterMap) {\r\n option = parameterMap[option];\r\n if (isPlainObject(option)) {\r\n value = option.value(value);\r\n option = option.key;\r\n }\r\n }\r\n\r\n result[option] = value;\r\n });\r\n\r\n return result;\r\n };\r\n },\r\n\r\n options: {\r\n parameterMap: identity\r\n },\r\n\r\n create: function(options) {\r\n return ajax(this.setup(options, CREATE));\r\n },\r\n\r\n read: function(options) {\r\n var that = this,\r\n success,\r\n error,\r\n result,\r\n cache = that.cache;\r\n\r\n options = that.setup(options, READ);\r\n\r\n success = options.success || noop;\r\n error = options.error || noop;\r\n\r\n result = cache.find(options.data);\r\n\r\n if(result !== undefined) {\r\n success(result);\r\n } else {\r\n options.success = function(result) {\r\n cache.add(options.data, result);\r\n\r\n success(result);\r\n };\r\n\r\n $.ajax(options);\r\n }\r\n },\r\n\r\n update: function(options) {\r\n return ajax(this.setup(options, UPDATE));\r\n },\r\n\r\n destroy: function(options) {\r\n return ajax(this.setup(options, DESTROY));\r\n },\r\n\r\n setup: function(options, type) {\r\n options = options || {};\r\n\r\n var that = this,\r\n parameters,\r\n operation = that.options[type],\r\n data = isFunction(operation.data) ? operation.data(options.data) : operation.data;\r\n\r\n options = extend(true, {}, operation, options);\r\n parameters = extend(true, {}, data, options.data);\r\n\r\n options.data = that.parameterMap(parameters, type);\r\n\r\n if (isFunction(options.url)) {\r\n options.url = options.url(parameters);\r\n }\r\n\r\n return options;\r\n }\r\n });\r\n\r\n var Cache = Class.extend({\r\n init: function() {\r\n this._store = {};\r\n },\r\n add: function(key, data) {\r\n if(key !== undefined) {\r\n this._store[stringify(key)] = data;\r\n }\r\n },\r\n find: function(key) {\r\n return this._store[stringify(key)];\r\n },\r\n clear: function() {\r\n this._store = {};\r\n },\r\n remove: function(key) {\r\n delete this._store[stringify(key)];\r\n }\r\n });\r\n\r\n Cache.create = function(options) {\r\n var store = {\r\n \"inmemory\": function() { return new Cache(); }\r\n };\r\n\r\n if (isPlainObject(options) && isFunction(options.find)) {\r\n return options;\r\n }\r\n\r\n if (options === true) {\r\n return new Cache();\r\n }\r\n\r\n return store[options]();\r\n };\r\n\r\n function serializeRecords(data, getters, modelInstance, originalFieldNames, fieldNames) {\r\n var record,\r\n getter,\r\n originalName,\r\n idx,\r\n length;\r\n\r\n for (idx = 0, length = data.length; idx < length; idx++) {\r\n record = data[idx];\r\n for (getter in getters) {\r\n originalName = fieldNames[getter];\r\n\r\n if (originalName && originalName !== getter) {\r\n record[originalName] = getters[getter](record);\r\n delete record[getter];\r\n }\r\n }\r\n }\r\n }\r\n\r\n function convertRecords(data, getters, modelInstance, originalFieldNames, fieldNames) {\r\n var record,\r\n getter,\r\n originalName,\r\n idx,\r\n length;\r\n\r\n for (idx = 0, length = data.length; idx < length; idx++) {\r\n record = data[idx];\r\n for (getter in getters) {\r\n record[getter] = modelInstance._parse(getter, getters[getter](record));\r\n\r\n originalName = fieldNames[getter];\r\n if (originalName && originalName !== getter) {\r\n delete record[originalName];\r\n }\r\n }\r\n }\r\n }\r\n\r\n function convertGroup(data, getters, modelInstance, originalFieldNames, fieldNames) {\r\n var record,\r\n idx,\r\n fieldName,\r\n length;\r\n\r\n for (idx = 0, length = data.length; idx < length; idx++) {\r\n record = data[idx];\r\n\r\n fieldName = originalFieldNames[record.field];\r\n if (fieldName && fieldName != record.field) {\r\n record.field = fieldName;\r\n }\r\n\r\n record.value = modelInstance._parse(record.field, record.value);\r\n\r\n if (record.hasSubgroups) {\r\n convertGroup(record.items, getters, modelInstance, originalFieldNames, fieldNames);\r\n } else {\r\n convertRecords(record.items, getters, modelInstance, originalFieldNames, fieldNames);\r\n }\r\n }\r\n }\r\n\r\n function wrapDataAccess(originalFunction, model, converter, getters, originalFieldNames, fieldNames) {\r\n return function(data) {\r\n data = originalFunction(data);\r\n\r\n if (data && !isEmptyObject(getters)) {\r\n if (toString.call(data) !== \"[object Array]\" && !(data instanceof ObservableArray)) {\r\n data = [data];\r\n }\r\n\r\n converter(data, getters, new model(), originalFieldNames, fieldNames);\r\n }\r\n\r\n return data || [];\r\n };\r\n }\r\n\r\n var DataReader = Class.extend({\r\n init: function(schema) {\r\n var that = this, member, get, model, base;\r\n\r\n schema = schema || {};\r\n\r\n for (member in schema) {\r\n get = schema[member];\r\n\r\n that[member] = typeof get === STRING ? getter(get) : get;\r\n }\r\n\r\n base = schema.modelBase || Model;\r\n\r\n if (isPlainObject(that.model)) {\r\n that.model = model = base.define(that.model);\r\n }\r\n\r\n if (that.model) {\r\n var dataFunction = proxy(that.data, that),\r\n groupsFunction = proxy(that.groups, that),\r\n serializeFunction = proxy(that.serialize, that),\r\n originalFieldNames = {},\r\n getters = {},\r\n serializeGetters = {},\r\n fieldNames = {},\r\n shouldSerialize = false,\r\n fieldName;\r\n\r\n model = that.model;\r\n\r\n if (model.fields) {\r\n each(model.fields, function(field, value) {\r\n var fromName;\r\n\r\n fieldName = field;\r\n\r\n if (isPlainObject(value) && value.field) {\r\n fieldName = value.field;\r\n } else if (typeof value === STRING) {\r\n fieldName = value;\r\n }\r\n\r\n if (isPlainObject(value) && value.from) {\r\n fromName = value.from;\r\n }\r\n\r\n shouldSerialize = shouldSerialize || (fromName && fromName !== field) || fieldName !== field;\r\n\r\n getters[field] = getter(fromName || fieldName);\r\n serializeGetters[field] = getter(field);\r\n originalFieldNames[fromName || fieldName] = field;\r\n fieldNames[field] = fromName || fieldName;\r\n });\r\n\r\n if (!schema.serialize && shouldSerialize) {\r\n that.serialize = wrapDataAccess(serializeFunction, model, serializeRecords, serializeGetters, originalFieldNames, fieldNames);\r\n }\r\n }\r\n\r\n that.data = wrapDataAccess(dataFunction, model, convertRecords, getters, originalFieldNames, fieldNames);\r\n that.groups = wrapDataAccess(groupsFunction, model, convertGroup, getters, originalFieldNames, fieldNames);\r\n }\r\n },\r\n errors: function(data) {\r\n return data ? data.errors : null;\r\n },\r\n parse: identity,\r\n data: identity,\r\n total: function(data) {\r\n return data.length;\r\n },\r\n groups: identity,\r\n aggregates: function() {\r\n return {};\r\n },\r\n serialize: function(data) {\r\n return data;\r\n }\r\n });\r\n\r\n function mergeGroups(target, dest, skip, take) {\r\n var group,\r\n idx = 0,\r\n items;\r\n\r\n while (dest.length && take) {\r\n group = dest[idx];\r\n items = group.items;\r\n\r\n var length = items.length;\r\n\r\n if (target && target.field === group.field && target.value === group.value) {\r\n if (target.hasSubgroups && target.items.length) {\r\n mergeGroups(target.items[target.items.length - 1], group.items, skip, take);\r\n } else {\r\n items = items.slice(skip, skip + take);\r\n target.items = target.items.concat(items);\r\n }\r\n dest.splice(idx--, 1);\r\n } else if (group.hasSubgroups && items.length) {\r\n mergeGroups(group, items, skip, take);\r\n } else {\r\n items = items.slice(skip, skip + take);\r\n group.items = items;\r\n\r\n if (!group.items.length) {\r\n dest.splice(idx--, 1);\r\n }\r\n }\r\n\r\n if (items.length === 0) {\r\n skip -= length;\r\n } else {\r\n skip = 0;\r\n take -= items.length;\r\n }\r\n\r\n if (++idx >= dest.length) {\r\n break;\r\n }\r\n }\r\n\r\n if (idx < dest.length) {\r\n dest.splice(idx, dest.length - idx);\r\n }\r\n }\r\n\r\n function flattenGroups(data) {\r\n var idx, length, result = [];\r\n\r\n for (idx = 0, length = data.length; idx < length; idx++) {\r\n if (data[idx].hasSubgroups) {\r\n result = result.concat(flattenGroups(data[idx].items));\r\n } else {\r\n result = result.concat(data[idx].items.slice());\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n function wrapGroupItems(data, model) {\r\n var idx, length, group, items;\r\n if (model) {\r\n for (idx = 0, length = data.length; idx < length; idx++) {\r\n group = data[idx];\r\n items = group.items;\r\n\r\n if (group.hasSubgroups) {\r\n wrapGroupItems(items, model);\r\n } else if (items.length && !(items[0] instanceof model)) {\r\n items.type = model;\r\n items.wrapAll(items, items);\r\n }\r\n }\r\n }\r\n }\r\n\r\n function eachGroupItems(data, func) {\r\n var idx, length;\r\n\r\n for (idx = 0, length = data.length; idx < length; idx++) {\r\n if (data[idx].hasSubgroups) {\r\n if (eachGroupItems(data[idx].items, func)) {\r\n return true;\r\n }\r\n } else if (func(data[idx].items, data[idx])) {\r\n return true;\r\n }\r\n }\r\n }\r\n\r\n function removeModel(data, model) {\r\n var idx, length;\r\n\r\n for (idx = 0, length = data.length; idx < length; idx++) {\r\n if (data[idx].uid == model.uid) {\r\n model = data[idx];\r\n data.splice(idx, 1);\r\n return model;\r\n }\r\n }\r\n }\r\n\r\n function wrapInEmptyGroup(groups, model) {\r\n var parent,\r\n group,\r\n idx,\r\n length;\r\n\r\n for (idx = groups.length-1, length = 0; idx >= length; idx--) {\r\n group = groups[idx];\r\n parent = {\r\n value: model.get(group.field),\r\n field: group.field,\r\n items: parent ? [parent] : [model],\r\n hasSubgroups: !!parent,\r\n aggregates: {}\r\n };\r\n }\r\n\r\n return parent;\r\n }\r\n\r\n function indexOfPristineModel(data, model) {\r\n if (model) {\r\n return indexOf(data, function(item) {\r\n return item[model.idField] === model.id;\r\n });\r\n }\r\n return -1;\r\n }\r\n\r\n function indexOfModel(data, model) {\r\n if (model) {\r\n return indexOf(data, function(item) {\r\n return item.uid == model.uid;\r\n });\r\n }\r\n return -1;\r\n }\r\n\r\n function indexOf(data, comparer) {\r\n var idx, length;\r\n\r\n for (idx = 0, length = data.length; idx < length; idx++) {\r\n if (comparer(data[idx])) {\r\n return idx;\r\n }\r\n }\r\n\r\n return -1;\r\n }\r\n\r\n function fieldNameFromModel(fields, name) {\r\n if (fields && !isEmptyObject(fields)) {\r\n var descriptor = fields[name];\r\n var fieldName;\r\n if (isPlainObject(descriptor)) {\r\n fieldName = descriptor.from || descriptor.field || name;\r\n } else {\r\n fieldName = fields[name] || name;\r\n }\r\n\r\n if (isFunction(fieldName)) {\r\n return name;\r\n }\r\n\r\n return fieldName;\r\n }\r\n return name;\r\n }\r\n\r\n function convertFilterDescriptorsField(descriptor, model) {\r\n var idx,\r\n length,\r\n target = {};\r\n\r\n for (var field in descriptor) {\r\n if (field !== \"filters\") {\r\n target[field] = descriptor[field];\r\n }\r\n }\r\n\r\n if (descriptor.filters) {\r\n target.filters = [];\r\n for (idx = 0, length = descriptor.filters.length; idx < length; idx++) {\r\n target.filters[idx] = convertFilterDescriptorsField(descriptor.filters[idx], model);\r\n }\r\n } else {\r\n target.field = fieldNameFromModel(model.fields, target.field);\r\n }\r\n return target;\r\n }\r\n\r\n function convertDescriptorsField(descriptors, model) {\r\n var idx,\r\n length,\r\n result = [],\r\n target,\r\n descriptor;\r\n\r\n for (idx = 0, length = descriptors.length; idx < length; idx ++) {\r\n target = {};\r\n\r\n descriptor = descriptors[idx];\r\n\r\n for (var field in descriptor) {\r\n target[field] = descriptor[field];\r\n }\r\n\r\n target.field = fieldNameFromModel(model.fields, target.field);\r\n\r\n if (target.aggregates && isArray(target.aggregates)) {\r\n target.aggregates = convertDescriptorsField(target.aggregates, model);\r\n }\r\n result.push(target);\r\n }\r\n return result;\r\n }\r\n\r\n var DataSource = Observable.extend({\r\n init: function(options) {\r\n var that = this, model, data;\r\n\r\n if (options) {\r\n data = options.data;\r\n }\r\n\r\n options = that.options = extend({}, that.options, options);\r\n\r\n that._map = {};\r\n that._prefetch = {};\r\n that._data = [];\r\n that._pristineData = [];\r\n that._ranges = [];\r\n that._view = [];\r\n that._pristineTotal = 0;\r\n that._destroyed = [];\r\n that._pageSize = options.pageSize;\r\n that._page = options.page || (options.pageSize ? 1 : undefined);\r\n that._sort = normalizeSort(options.sort);\r\n that._filter = normalizeFilter(options.filter);\r\n that._group = normalizeGroup(options.group);\r\n that._aggregate = options.aggregate;\r\n that._total = options.total;\r\n\r\n Observable.fn.init.call(that);\r\n\r\n that.transport = Transport.create(options, data);\r\n\r\n if (isFunction(that.transport.push)) {\r\n that.transport.push({\r\n pushCreate: proxy(that._pushCreate, that),\r\n pushUpdate: proxy(that._pushUpdate, that),\r\n pushDestroy: proxy(that._pushDestroy, that)\r\n });\r\n }\r\n\r\n that.reader = new kendo.data.readers[options.schema.type || \"json\" ](options.schema);\r\n\r\n model = that.reader.model || {};\r\n\r\n that._data = that._observe(that._data);\r\n\r\n that.bind([\"push\", ERROR, CHANGE, REQUESTSTART, SYNC, REQUESTEND, PROGRESS], options);\r\n },\r\n\r\n options: {\r\n data: [],\r\n schema: {\r\n modelBase: Model\r\n },\r\n serverSorting: false,\r\n serverPaging: false,\r\n serverFiltering: false,\r\n serverGrouping: false,\r\n serverAggregates: false,\r\n batch: false\r\n },\r\n\r\n _isServerGrouped: function() {\r\n var group = this.group() || [];\r\n\r\n return this.options.serverGrouping && group.length;\r\n },\r\n\r\n _pushCreate: function(result) {\r\n this._push(result, \"pushCreate\");\r\n },\r\n\r\n _pushUpdate: function(result) {\r\n this._push(result, \"pushUpdate\");\r\n },\r\n\r\n _pushDestroy: function(result) {\r\n this._push(result, \"pushDestroy\");\r\n },\r\n\r\n _push: function(result, operation) {\r\n var data = this._readData(result);\r\n\r\n if (!data) {\r\n data = result;\r\n }\r\n\r\n this[operation](data);\r\n },\r\n\r\n _flatData: function(data) {\r\n if (this._isServerGrouped()) {\r\n return flattenGroups(data);\r\n }\r\n return data;\r\n },\r\n\r\n parent: noop,\r\n\r\n get: function(id) {\r\n var idx, length, data = this._flatData(this._data);\r\n\r\n for (idx = 0, length = data.length; idx < length; idx++) {\r\n if (data[idx].id == id) {\r\n return data[idx];\r\n }\r\n }\r\n },\r\n\r\n getByUid: function(id) {\r\n var idx, length, data = this._flatData(this._data);\r\n\r\n if (!data) {\r\n return;\r\n }\r\n\r\n for (idx = 0, length = data.length; idx < length; idx++) {\r\n if (data[idx].uid == id) {\r\n return data[idx];\r\n }\r\n }\r\n },\r\n\r\n indexOf: function(model) {\r\n return indexOfModel(this._data, model);\r\n },\r\n\r\n at: function(index) {\r\n return this._data[index];\r\n },\r\n\r\n data: function(value) {\r\n var that = this;\r\n if (value !== undefined) {\r\n that._data = this._observe(value);\r\n\r\n that._pristineData = value.slice(0);\r\n\r\n that._ranges = [];\r\n that._addRange(that._data);\r\n\r\n that._total = that._data.length;\r\n that._pristineTotal = that._total;\r\n\r\n that._process(that._data);\r\n } else {\r\n return that._data;\r\n }\r\n },\r\n\r\n view: function() {\r\n return this._view;\r\n },\r\n\r\n add: function(model) {\r\n return this.insert(this._data.length, model);\r\n },\r\n\r\n _createNewModel: function(model) {\r\n if (this.reader.model) {\r\n return new this.reader.model(model);\r\n }\r\n\r\n return new ObservableObject(model);\r\n },\r\n\r\n insert: function(index, model) {\r\n if (!model) {\r\n model = index;\r\n index = 0;\r\n }\r\n\r\n if (!(model instanceof Model)) {\r\n model = this._createNewModel(model);\r\n }\r\n\r\n if (this._isServerGrouped()) {\r\n this._data.splice(index, 0, wrapInEmptyGroup(this.group(), model));\r\n } else {\r\n this._data.splice(index, 0, model);\r\n }\r\n\r\n return model;\r\n },\r\n\r\n pushCreate: function(items) {\r\n if (!isArray(items)) {\r\n items = [items];\r\n }\r\n\r\n var pushed = [];\r\n\r\n for (var idx = 0; idx < items.length; idx ++) {\r\n var item = items[idx];\r\n\r\n var result = this.add(item);\r\n\r\n pushed.push(result);\r\n\r\n var pristine = result.toJSON();\r\n\r\n if (this._isServerGrouped()) {\r\n pristine = wrapInEmptyGroup(this.group(), pristine);\r\n }\r\n\r\n this._pristineData.push(pristine);\r\n }\r\n\r\n if (pushed.length) {\r\n this.trigger(\"push\", {\r\n type: \"create\",\r\n items: pushed\r\n });\r\n }\r\n },\r\n\r\n pushUpdate: function(items) {\r\n if (!isArray(items)) {\r\n items = [items];\r\n }\r\n\r\n var pushed = [];\r\n\r\n for (var idx = 0; idx < items.length; idx ++) {\r\n var item = items[idx];\r\n var model = this._createNewModel(item);\r\n\r\n var target = this.get(model.id);\r\n\r\n if (target) {\r\n pushed.push(target);\r\n\r\n target.accept(item);\r\n\r\n target.trigger(\"change\");\r\n\r\n this._updatePristineForModel(target, item);\r\n } else {\r\n this.pushCreate(item);\r\n }\r\n }\r\n\r\n if (pushed.length) {\r\n this.trigger(\"push\", {\r\n type: \"update\",\r\n items: pushed\r\n });\r\n }\r\n },\r\n\r\n pushDestroy: function(items) {\r\n if (!isArray(items)) {\r\n items = [items];\r\n }\r\n\r\n var pushed = [];\r\n var autoSync = this.options.autoSync;\r\n this.options.autoSync = false;\r\n try {\r\n for (var idx = 0; idx < items.length; idx ++) {\r\n var item = items[idx];\r\n var model = this._createNewModel(item);\r\n var found = false;\r\n\r\n this._eachItem(this._data, function(items){\r\n for (var idx = 0; idx < items.length; idx++) {\r\n if (items[idx].id === model.id) {\r\n pushed.push(items[idx]);\r\n items.splice(idx, 1);\r\n found = true;\r\n break;\r\n }\r\n }\r\n });\r\n\r\n if (found) {\r\n this._removePristineForModel(model);\r\n this._destroyed.pop();\r\n }\r\n }\r\n } finally {\r\n this.options.autoSync = autoSync;\r\n }\r\n\r\n if (pushed.length) {\r\n this.trigger(\"push\", {\r\n type: \"destroy\",\r\n items: pushed\r\n });\r\n }\r\n },\r\n\r\n remove: function(model) {\r\n var result,\r\n that = this,\r\n hasGroups = that._isServerGrouped();\r\n\r\n this._eachItem(that._data, function(items) {\r\n result = removeModel(items, model);\r\n if (result && hasGroups) {\r\n if (!result.isNew || !result.isNew()) {\r\n that._destroyed.push(result);\r\n }\r\n return true;\r\n }\r\n });\r\n\r\n this._removeModelFromRanges(model);\r\n\r\n this._updateRangesLength();\r\n\r\n return model;\r\n },\r\n\r\n sync: function() {\r\n var that = this,\r\n idx,\r\n length,\r\n created = [],\r\n updated = [],\r\n destroyed = that._destroyed,\r\n data = that._flatData(that._data);\r\n\r\n if (!that.reader.model) {\r\n return;\r\n }\r\n\r\n for (idx = 0, length = data.length; idx < length; idx++) {\r\n if (data[idx].isNew()) {\r\n created.push(data[idx]);\r\n } else if (data[idx].dirty) {\r\n updated.push(data[idx]);\r\n }\r\n }\r\n\r\n var promises = that._send(\"create\", created);\r\n\r\n promises.push.apply(promises ,that._send(\"update\", updated));\r\n promises.push.apply(promises ,that._send(\"destroy\", destroyed));\r\n\r\n $.when.apply(null, promises)\r\n .then(function() {\r\n var idx, length;\r\n\r\n for (idx = 0, length = arguments.length; idx < length; idx++){\r\n that._accept(arguments[idx]);\r\n }\r\n\r\n that._change({ action: \"sync\" });\r\n\r\n that.trigger(SYNC);\r\n });\r\n },\r\n\r\n cancelChanges: function(model) {\r\n var that = this;\r\n\r\n if (model instanceof kendo.data.Model) {\r\n that._cancelModel(model);\r\n } else {\r\n that._destroyed = [];\r\n that._data = that._observe(that._pristineData);\r\n if (that.options.serverPaging) {\r\n that._total = that._pristineTotal;\r\n }\r\n that._change();\r\n }\r\n },\r\n\r\n hasChanges: function() {\r\n var idx,\r\n length,\r\n data = this._data;\r\n\r\n if (this._destroyed.length) {\r\n return true;\r\n }\r\n\r\n for (idx = 0, length = data.length; idx < length; idx++) {\r\n if (data[idx].isNew() || data[idx].dirty) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n },\r\n\r\n _accept: function(result) {\r\n var that = this,\r\n models = result.models,\r\n response = result.response,\r\n idx = 0,\r\n serverGroup = that._isServerGrouped(),\r\n pristine = that._pristineData,\r\n type = result.type,\r\n length;\r\n\r\n that.trigger(REQUESTEND, { response: response, type: type });\r\n\r\n if (response && !isEmptyObject(response)) {\r\n response = that.reader.parse(response);\r\n\r\n if (that._handleCustomErrors(response)) {\r\n return;\r\n }\r\n\r\n response = that.reader.data(response);\r\n\r\n if (!isArray(response)) {\r\n response = [response];\r\n }\r\n } else {\r\n response = $.map(models, function(model) { return model.toJSON(); } );\r\n }\r\n\r\n if (type === \"destroy\") {\r\n that._destroyed = [];\r\n }\r\n\r\n for (idx = 0, length = models.length; idx < length; idx++) {\r\n if (type !== \"destroy\") {\r\n models[idx].accept(response[idx]);\r\n\r\n if (type === \"create\") {\r\n pristine.push(serverGroup ? wrapInEmptyGroup(that.group(), models[idx]) : response[idx]);\r\n } else if (type === \"update\") {\r\n that._updatePristineForModel(models[idx], response[idx]);\r\n }\r\n } else {\r\n that._removePristineForModel(models[idx]);\r\n }\r\n }\r\n },\r\n\r\n _updatePristineForModel: function(model, values) {\r\n this._executeOnPristineForModel(model, function(index, items) {\r\n kendo.deepExtend(items[index], values);\r\n });\r\n },\r\n\r\n _executeOnPristineForModel: function(model, callback) {\r\n this._eachPristineItem(\r\n function(items) {\r\n var index = indexOfPristineModel(items, model);\r\n if (index > -1) {\r\n callback(index, items);\r\n return true;\r\n }\r\n });\r\n },\r\n\r\n _removePristineForModel: function(model) {\r\n this._executeOnPristineForModel(model, function(index, items) {\r\n items.splice(index, 1);\r\n });\r\n },\r\n\r\n _readData: function(data) {\r\n var read = !this._isServerGrouped() ? this.reader.data : this.reader.groups;\r\n return read(data);\r\n },\r\n\r\n _eachPristineItem: function(callback) {\r\n this._eachItem(this._pristineData, callback);\r\n },\r\n\r\n _eachItem: function(data, callback) {\r\n if (data && data.length) {\r\n if (this._isServerGrouped()) {\r\n eachGroupItems(data, callback);\r\n } else {\r\n callback(data);\r\n }\r\n }\r\n },\r\n\r\n _pristineForModel: function(model) {\r\n var pristine,\r\n idx,\r\n callback = function(items) {\r\n idx = indexOfPristineModel(items, model);\r\n if (idx > -1) {\r\n pristine = items[idx];\r\n return true;\r\n }\r\n };\r\n\r\n this._eachPristineItem(callback);\r\n\r\n return pristine;\r\n },\r\n\r\n _cancelModel: function(model) {\r\n var pristine = this._pristineForModel(model),\r\n idx;\r\n\r\n this._eachItem(this._data, function(items) {\r\n idx = indexOfModel(items, model);\r\n if (idx != -1) {\r\n if (!model.isNew() && pristine) {\r\n items[idx].accept(pristine);\r\n } else {\r\n items.splice(idx, 1);\r\n }\r\n }\r\n });\r\n },\r\n\r\n _promise: function(data, models, type) {\r\n var that = this,\r\n transport = that.transport;\r\n\r\n return $.Deferred(function(deferred) {\r\n\r\n that.trigger(REQUESTSTART, { type: type });\r\n\r\n transport[type].call(transport, extend({\r\n success: function(response) {\r\n deferred.resolve({\r\n response: response,\r\n models: models,\r\n type: type\r\n });\r\n },\r\n error: function(response, status, error) {\r\n deferred.reject(response);\r\n that.error(response, status, error);\r\n }\r\n }, data)\r\n );\r\n }).promise();\r\n },\r\n\r\n _send: function(method, data) {\r\n var that = this,\r\n idx,\r\n length,\r\n promises = [],\r\n converted = that.reader.serialize(toJSON(data));\r\n\r\n if (that.options.batch) {\r\n if (data.length) {\r\n promises.push(that._promise( { data: { models: converted } }, data , method));\r\n }\r\n } else {\r\n for (idx = 0, length = data.length; idx < length; idx++) {\r\n promises.push(that._promise( { data: converted[idx] }, [ data[idx] ], method));\r\n }\r\n }\r\n\r\n return promises;\r\n },\r\n\r\n read: function(data) {\r\n var that = this, params = that._params(data);\r\n\r\n that._queueRequest(params, function() {\r\n if (!that.trigger(REQUESTSTART, { type: \"read\" })) {\r\n that.trigger(PROGRESS);\r\n\r\n that._ranges = [];\r\n that.transport.read({\r\n data: params,\r\n success: proxy(that.success, that),\r\n error: proxy(that.error, that)\r\n });\r\n } else {\r\n that._dequeueRequest();\r\n }\r\n });\r\n },\r\n\r\n success: function(data) {\r\n var that = this,\r\n options = that.options;\r\n\r\n that.trigger(REQUESTEND, { response: data, type: \"read\" });\r\n\r\n data = that.reader.parse(data);\r\n\r\n if (that._handleCustomErrors(data)) {\r\n that._dequeueRequest();\r\n return;\r\n }\r\n\r\n that._total = that.reader.total(data);\r\n that._pristineTotal = that._total;\r\n\r\n if (that._aggregate && options.serverAggregates) {\r\n that._aggregateResult = that.reader.aggregates(data);\r\n }\r\n\r\n data = that._readData(data);\r\n\r\n that._pristineData = data.slice(0);\r\n\r\n that._data = that._observe(data);\r\n\r\n that._addRange(that._data);\r\n\r\n that._process(that._data);\r\n that._dequeueRequest();\r\n },\r\n\r\n _addRange: function(data) {\r\n var that = this,\r\n start = that._skip || 0,\r\n end = start + that._flatData(data).length;\r\n\r\n that._ranges.push({ start: start, end: end, data: data });\r\n that._ranges.sort( function(x, y) { return x.start - y.start; } );\r\n },\r\n\r\n error: function(xhr, status, errorThrown) {\r\n this._dequeueRequest();\r\n this.trigger(REQUESTEND, { });\r\n this.trigger(ERROR, { xhr: xhr, status: status, errorThrown: errorThrown });\r\n },\r\n\r\n _params: function(data) {\r\n var that = this,\r\n options = extend({\r\n take: that.take(),\r\n skip: that.skip(),\r\n page: that.page(),\r\n pageSize: that.pageSize(),\r\n sort: that._sort,\r\n filter: that._filter,\r\n group: that._group,\r\n aggregate: that._aggregate\r\n }, data);\r\n\r\n if (!that.options.serverPaging) {\r\n delete options.take;\r\n delete options.skip;\r\n delete options.page;\r\n delete options.pageSize;\r\n }\r\n\r\n if (!that.options.serverGrouping) {\r\n delete options.group;\r\n } else if (that.reader.model && options.group) {\r\n options.group = convertDescriptorsField(options.group, that.reader.model);\r\n }\r\n\r\n if (!that.options.serverFiltering) {\r\n delete options.filter;\r\n } else if (that.reader.model && options.filter) {\r\n options.filter = convertFilterDescriptorsField(options.filter, that.reader.model);\r\n }\r\n\r\n if (!that.options.serverSorting) {\r\n delete options.sort;\r\n } else if (that.reader.model && options.sort) {\r\n options.sort = convertDescriptorsField(options.sort, that.reader.model);\r\n }\r\n\r\n if (!that.options.serverAggregates) {\r\n delete options.aggregate;\r\n } else if (that.reader.model && options.aggregate) {\r\n options.aggregate = convertDescriptorsField(options.aggregate, that.reader.model);\r\n }\r\n\r\n return options;\r\n },\r\n\r\n _queueRequest: function(options, callback) {\r\n var that = this;\r\n if (!that._requestInProgress) {\r\n that._requestInProgress = true;\r\n that._pending = undefined;\r\n callback();\r\n } else {\r\n that._pending = { callback: proxy(callback, that), options: options };\r\n }\r\n },\r\n\r\n _dequeueRequest: function() {\r\n var that = this;\r\n that._requestInProgress = false;\r\n if (that._pending) {\r\n that._queueRequest(that._pending.options, that._pending.callback);\r\n }\r\n },\r\n\r\n _handleCustomErrors: function(response) {\r\n if (this.reader.errors) {\r\n var errors = this.reader.errors(response);\r\n if (errors) {\r\n this.trigger(ERROR, { xhr: null, status: \"customerror\", errorThrown: \"custom error\", errors: errors });\r\n return true;\r\n }\r\n }\r\n return false;\r\n },\r\n _observe: function(data) {\r\n var that = this,\r\n model = that.reader.model,\r\n wrap = false;\r\n\r\n if (model && data.length) {\r\n wrap = !(data[0] instanceof model);\r\n }\r\n\r\n if (data instanceof ObservableArray) {\r\n if (wrap) {\r\n data.type = that.reader.model;\r\n data.wrapAll(data, data);\r\n }\r\n } else {\r\n data = new ObservableArray(data, that.reader.model);\r\n data.parent = function() { return that.parent(); };\r\n }\r\n\r\n if (that._isServerGrouped()) {\r\n wrapGroupItems(data, model);\r\n }\r\n\r\n if (that._changeHandler && that._data && that._data instanceof ObservableArray) {\r\n that._data.unbind(CHANGE, that._changeHandler);\r\n } else {\r\n that._changeHandler = proxy(that._change, that);\r\n }\r\n\r\n return data.bind(CHANGE, that._changeHandler);\r\n },\r\n\r\n _change: function(e) {\r\n var that = this, idx, length, action = e ? e.action : \"\";\r\n\r\n if (action === \"remove\") {\r\n for (idx = 0, length = e.items.length; idx < length; idx++) {\r\n if (!e.items[idx].isNew || !e.items[idx].isNew()) {\r\n that._destroyed.push(e.items[idx]);\r\n }\r\n }\r\n }\r\n\r\n if (that.options.autoSync && (action === \"add\" || action === \"remove\" || action === \"itemchange\")) {\r\n that.sync();\r\n } else {\r\n var total = parseInt(that._total || that._pristineTotal, 10);\r\n if (action === \"add\") {\r\n total += e.items.length;\r\n } else if (action === \"remove\") {\r\n total -= e.items.length;\r\n } else if (action !== \"itemchange\" && action !== \"sync\" && !that.options.serverPaging) {\r\n total = that._pristineTotal;\r\n } else if (action === \"sync\") {\r\n total = that._pristineTotal = parseInt(that._total, 10);\r\n }\r\n\r\n that._total = total;\r\n\r\n that._process(that._data, e);\r\n }\r\n },\r\n\r\n _process: function (data, e) {\r\n var that = this,\r\n options = {},\r\n result;\r\n\r\n if (that.options.serverPaging !== true) {\r\n options.skip = that._skip;\r\n options.take = that._take || that._pageSize;\r\n\r\n if(options.skip === undefined && that._page !== undefined && that._pageSize !== undefined) {\r\n options.skip = (that._page - 1) * that._pageSize;\r\n }\r\n }\r\n\r\n if (that.options.serverSorting !== true) {\r\n options.sort = that._sort;\r\n }\r\n\r\n if (that.options.serverFiltering !== true) {\r\n options.filter = that._filter;\r\n }\r\n\r\n if (that.options.serverGrouping !== true) {\r\n options.group = that._group;\r\n }\r\n\r\n if (that.options.serverAggregates !== true) {\r\n options.aggregate = that._aggregate;\r\n that._aggregateResult = calculateAggregates(data, options);\r\n }\r\n\r\n result = Query.process(data, options);\r\n\r\n that._view = result.data;\r\n\r\n if (result.total !== undefined && !that.options.serverFiltering) {\r\n that._total = result.total;\r\n }\r\n\r\n e = e || {};\r\n\r\n e.items = e.items || that._view;\r\n\r\n that.trigger(CHANGE, e);\r\n },\r\n\r\n _mergeState: function(options) {\r\n var that = this;\r\n\r\n if (options !== undefined) {\r\n that._pageSize = options.pageSize;\r\n that._page = options.page;\r\n that._sort = options.sort;\r\n that._filter = options.filter;\r\n that._group = options.group;\r\n that._aggregate = options.aggregate;\r\n that._skip = options.skip;\r\n that._take = options.take;\r\n\r\n if(that._skip === undefined) {\r\n that._skip = that.skip();\r\n options.skip = that.skip();\r\n }\r\n\r\n if(that._take === undefined && that._pageSize !== undefined) {\r\n that._take = that._pageSize;\r\n options.take = that._take;\r\n }\r\n\r\n if (options.sort) {\r\n that._sort = options.sort = normalizeSort(options.sort);\r\n }\r\n\r\n if (options.filter) {\r\n that._filter = options.filter = normalizeFilter(options.filter);\r\n }\r\n\r\n if (options.group) {\r\n that._group = options.group = normalizeGroup(options.group);\r\n }\r\n if (options.aggregate) {\r\n that._aggregate = options.aggregate = normalizeAggregate(options.aggregate);\r\n }\r\n }\r\n return options;\r\n },\r\n\r\n query: function(options) {\r\n var that = this,\r\n result,\r\n remote = that.options.serverSorting || that.options.serverPaging || that.options.serverFiltering || that.options.serverGrouping || that.options.serverAggregates;\r\n\r\n if (remote || ((that._data === undefined || that._data.length === 0) && !that._destroyed.length)) {\r\n that.read(that._mergeState(options));\r\n } else {\r\n if (!that.trigger(REQUESTSTART, { type: \"read\" })) {\r\n that.trigger(PROGRESS);\r\n\r\n result = Query.process(that._data, that._mergeState(options));\r\n\r\n if (!that.options.serverFiltering) {\r\n if (result.total !== undefined) {\r\n that._total = result.total;\r\n } else {\r\n that._total = that._data.length;\r\n }\r\n }\r\n\r\n that._view = result.data;\r\n that._aggregateResult = calculateAggregates(that._data, options);\r\n that.trigger(REQUESTEND, { });\r\n that.trigger(CHANGE, { items: result.data });\r\n }\r\n }\r\n },\r\n\r\n fetch: function(callback) {\r\n var that = this;\r\n\r\n return $.Deferred(function(deferred) {\r\n var success = function(e) {\r\n that.unbind(ERROR, error);\r\n\r\n deferred.resolve();\r\n\r\n if (callback) {\r\n callback.call(that, e);\r\n }\r\n };\r\n\r\n var error = function(e) {\r\n deferred.reject(e);\r\n };\r\n\r\n that.one(CHANGE, success);\r\n that.one(ERROR, error);\r\n that._query();\r\n }).promise();\r\n },\r\n\r\n _query: function(options) {\r\n var that = this;\r\n\r\n that.query(extend({}, {\r\n page: that.page(),\r\n pageSize: that.pageSize(),\r\n sort: that.sort(),\r\n filter: that.filter(),\r\n group: that.group(),\r\n aggregate: that.aggregate()\r\n }, options));\r\n },\r\n\r\n next: function(options) {\r\n var that = this,\r\n page = that.page(),\r\n total = that.total();\r\n\r\n options = options || {};\r\n\r\n if (!page || (total && page + 1 > that.totalPages())) {\r\n return;\r\n }\r\n\r\n that._skip = page * that.take();\r\n\r\n page += 1;\r\n options.page = page;\r\n\r\n that._query(options);\r\n\r\n return page;\r\n },\r\n\r\n prev: function(options) {\r\n var that = this,\r\n page = that.page();\r\n\r\n options = options || {};\r\n\r\n if (!page || page === 1) {\r\n return;\r\n }\r\n\r\n that._skip = that._skip - that.take();\r\n\r\n page -= 1;\r\n options.page = page;\r\n\r\n that._query(options);\r\n\r\n return page;\r\n },\r\n\r\n page: function(val) {\r\n var that = this,\r\n skip;\r\n\r\n if(val !== undefined) {\r\n val = math.max(math.min(math.max(val, 1), that.totalPages()), 1);\r\n that._query({ page: val });\r\n return;\r\n }\r\n skip = that.skip();\r\n\r\n return skip !== undefined ? math.round((skip || 0) / (that.take() || 1)) + 1 : undefined;\r\n },\r\n\r\n pageSize: function(val) {\r\n var that = this;\r\n\r\n if(val !== undefined) {\r\n that._query({ pageSize: val, page: 1 });\r\n return;\r\n }\r\n\r\n return that.take();\r\n },\r\n\r\n sort: function(val) {\r\n var that = this;\r\n\r\n if(val !== undefined) {\r\n that._query({ sort: val });\r\n return;\r\n }\r\n\r\n return that._sort;\r\n },\r\n\r\n filter: function(val) {\r\n var that = this;\r\n\r\n if (val === undefined) {\r\n return that._filter;\r\n }\r\n\r\n that._query({ filter: val, page: 1 });\r\n },\r\n\r\n group: function(val) {\r\n var that = this;\r\n\r\n if(val !== undefined) {\r\n that._query({ group: val });\r\n return;\r\n }\r\n\r\n return that._group;\r\n },\r\n\r\n total: function() {\r\n return parseInt(this._total || 0, 10);\r\n },\r\n\r\n aggregate: function(val) {\r\n var that = this;\r\n\r\n if(val !== undefined) {\r\n that._query({ aggregate: val });\r\n return;\r\n }\r\n\r\n return that._aggregate;\r\n },\r\n\r\n aggregates: function() {\r\n return this._aggregateResult;\r\n },\r\n\r\n totalPages: function() {\r\n var that = this,\r\n pageSize = that.pageSize() || that.total();\r\n\r\n return math.ceil((that.total() || 0) / pageSize);\r\n },\r\n\r\n inRange: function(skip, take) {\r\n var that = this,\r\n end = math.min(skip + take, that.total());\r\n\r\n if (!that.options.serverPaging && that.data.length > 0) {\r\n return true;\r\n }\r\n\r\n return that._findRange(skip, end).length > 0;\r\n },\r\n\r\n lastRange: function() {\r\n var ranges = this._ranges;\r\n return ranges[ranges.length - 1] || { start: 0, end: 0, data: [] };\r\n },\r\n\r\n firstItemUid: function() {\r\n var ranges = this._ranges;\r\n return ranges.length && ranges[0].data.length && ranges[0].data[0].uid;\r\n },\r\n\r\n range: function(skip, take) {\r\n skip = math.min(skip || 0, this.total());\r\n\r\n var that = this,\r\n pageSkip = math.max(math.floor(skip / take), 0) * take,\r\n size = math.min(pageSkip + take, that.total()),\r\n data;\r\n\r\n data = that._findRange(skip, math.min(skip + take, that.total()));\r\n\r\n if (data.length) {\r\n that._skip = skip > that.skip() ? math.min(size, (that.totalPages() - 1) * that.take()) : pageSkip;\r\n\r\n that._take = take;\r\n\r\n var paging = that.options.serverPaging;\r\n var sorting = that.options.serverSorting;\r\n var filtering = that.options.serverFiltering;\r\n try {\r\n that.options.serverPaging = true;\r\n if (!that._isServerGrouped() && !(that.group() && that.group().length)) {\r\n that.options.serverSorting = true;\r\n }\r\n that.options.serverFiltering = true;\r\n if (paging) {\r\n that._data = data = that._observe(data);\r\n }\r\n that._process(data);\r\n } finally {\r\n that.options.serverPaging = paging;\r\n that.options.serverSorting = sorting;\r\n that.options.serverFiltering = filtering;\r\n }\r\n\r\n return;\r\n }\r\n\r\n if (take !== undefined) {\r\n if (!that._rangeExists(pageSkip, size)) {\r\n that.prefetch(pageSkip, take, function() {\r\n if (skip > pageSkip && size < that.total() && !that._rangeExists(size, math.min(size + take, that.total()))) {\r\n that.prefetch(size, take, function() {\r\n that.range(skip, take);\r\n });\r\n } else {\r\n that.range(skip, take);\r\n }\r\n });\r\n } else if (pageSkip < skip) {\r\n that.prefetch(size, take, function() {\r\n that.range(skip, take);\r\n });\r\n }\r\n }\r\n },\r\n\r\n _findRange: function(start, end) {\r\n var that = this,\r\n ranges = that._ranges,\r\n range,\r\n data = [],\r\n skipIdx,\r\n takeIdx,\r\n startIndex,\r\n endIndex,\r\n rangeData,\r\n rangeEnd,\r\n processed,\r\n options = that.options,\r\n remote = options.serverSorting || options.serverPaging || options.serverFiltering || options.serverGrouping || options.serverAggregates,\r\n flatData,\r\n count,\r\n length;\r\n\r\n for (skipIdx = 0, length = ranges.length; skipIdx < length; skipIdx++) {\r\n range = ranges[skipIdx];\r\n if (start >= range.start && start <= range.end) {\r\n count = 0;\r\n\r\n for (takeIdx = skipIdx; takeIdx < length; takeIdx++) {\r\n range = ranges[takeIdx];\r\n flatData = that._flatData(range.data);\r\n\r\n if (flatData.length && start + count >= range.start) {\r\n rangeData = range.data;\r\n rangeEnd = range.end;\r\n\r\n if (!remote) {\r\n var sort = normalizeGroup(that.group() || []).concat(normalizeSort(that.sort() || []));\r\n processed = Query.process(range.data, { sort: sort, filter: that.filter() });\r\n flatData = rangeData = processed.data;\r\n\r\n if (processed.total !== undefined) {\r\n rangeEnd = processed.total;\r\n }\r\n }\r\n\r\n startIndex = 0;\r\n if (start + count > range.start) {\r\n startIndex = (start + count) - range.start;\r\n }\r\n endIndex = flatData.length;\r\n if (rangeEnd > end) {\r\n endIndex = endIndex - (rangeEnd - end);\r\n }\r\n count += endIndex - startIndex;\r\n data = that._mergeGroups(data, rangeData, startIndex, endIndex);\r\n\r\n if (end <= range.end && count == end - start) {\r\n return data;\r\n }\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n return [];\r\n },\r\n\r\n _mergeGroups: function(data, range, skip, take) {\r\n if (this._isServerGrouped()) {\r\n var temp = range.toJSON(),\r\n prevGroup;\r\n\r\n if (data.length) {\r\n prevGroup = data[data.length - 1];\r\n }\r\n\r\n mergeGroups(prevGroup, temp, skip, take);\r\n\r\n return data.concat(temp);\r\n }\r\n return data.concat(range.slice(skip, take));\r\n },\r\n\r\n skip: function() {\r\n var that = this;\r\n\r\n if (that._skip === undefined) {\r\n return (that._page !== undefined ? (that._page - 1) * (that.take() || 1) : undefined);\r\n }\r\n return that._skip;\r\n },\r\n\r\n take: function() {\r\n return this._take || this._pageSize;\r\n },\r\n\r\n _prefetchSuccessHandler: function (skip, size, callback) {\r\n var that = this;\r\n\r\n return function(data) {\r\n var found = false,\r\n range = { start: skip, end: size, data: [] },\r\n idx,\r\n length,\r\n temp;\r\n\r\n that._dequeueRequest();\r\n\r\n that.trigger(REQUESTEND, { response: data, type: \"read\" });\r\n\r\n data = that.reader.parse(data);\r\n\r\n temp = that._readData(data);\r\n\r\n if (temp.length) {\r\n for (idx = 0, length = that._ranges.length; idx < length; idx++) {\r\n if (that._ranges[idx].start === skip) {\r\n found = true;\r\n range = that._ranges[idx];\r\n break;\r\n }\r\n }\r\n if (!found) {\r\n that._ranges.push(range);\r\n }\r\n }\r\n\r\n range.data = that._observe(temp);\r\n range.end = range.start + that._flatData(range.data).length;\r\n that._ranges.sort( function(x, y) { return x.start - y.start; } );\r\n that._total = that.reader.total(data);\r\n\r\n if (callback && temp.length) {\r\n callback();\r\n } else {\r\n that.trigger(CHANGE, {});\r\n }\r\n };\r\n },\r\n\r\n prefetch: function(skip, take, callback) {\r\n var that = this,\r\n size = math.min(skip + take, that.total()),\r\n options = {\r\n take: take,\r\n skip: skip,\r\n page: skip / take + 1,\r\n pageSize: take,\r\n sort: that._sort,\r\n filter: that._filter,\r\n group: that._group,\r\n aggregate: that._aggregate\r\n };\r\n\r\n if (!that._rangeExists(skip, size)) {\r\n clearTimeout(that._timeout);\r\n\r\n that._timeout = setTimeout(function() {\r\n that._queueRequest(options, function() {\r\n if (!that.trigger(REQUESTSTART, { type: \"read\" })) {\r\n that.transport.read({\r\n data: that._params(options),\r\n success: that._prefetchSuccessHandler(skip, size, callback)\r\n });\r\n } else {\r\n that._dequeueRequest();\r\n }\r\n });\r\n }, 100);\r\n } else if (callback) {\r\n callback();\r\n }\r\n },\r\n\r\n _rangeExists: function(start, end) {\r\n var that = this,\r\n ranges = that._ranges,\r\n idx,\r\n length;\r\n\r\n for (idx = 0, length = ranges.length; idx < length; idx++) {\r\n if (ranges[idx].start <= start && ranges[idx].end >= end) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n },\r\n\r\n _removeModelFromRanges: function(model) {\r\n var result,\r\n found,\r\n range;\r\n\r\n for (var idx = 0, length = this._ranges.length; idx < length; idx++) {\r\n range = this._ranges[idx];\r\n\r\n this._eachItem(range.data, function(items) {\r\n result = removeModel(items, model);\r\n if (result) {\r\n found = true;\r\n }\r\n });\r\n\r\n if (found) {\r\n break;\r\n }\r\n }\r\n },\r\n\r\n _updateRangesLength: function() {\r\n var startOffset = 0,\r\n range,\r\n rangeLength;\r\n\r\n for (var idx = 0, length = this._ranges.length; idx < length; idx++) {\r\n range = this._ranges[idx];\r\n range.start = range.start - startOffset;\r\n\r\n rangeLength = this._flatData(range.data).length;\r\n startOffset = range.end - rangeLength;\r\n range.end = range.start + rangeLength;\r\n }\r\n }\r\n });\r\n\r\n var Transport = {};\r\n\r\n Transport.create = function(options, data) {\r\n var transport,\r\n transportOptions = options.transport;\r\n\r\n if (transportOptions) {\r\n transportOptions.read = typeof transportOptions.read === STRING ? { url: transportOptions.read } : transportOptions.read;\r\n\r\n if (options.type) {\r\n if (kendo.data.transports[options.type] && !isPlainObject(kendo.data.transports[options.type])) {\r\n transport = new kendo.data.transports[options.type](extend(transportOptions, { data: data }));\r\n } else {\r\n transportOptions = extend(true, {}, kendo.data.transports[options.type], transportOptions);\r\n }\r\n\r\n options.schema = extend(true, {}, kendo.data.schemas[options.type], options.schema);\r\n }\r\n\r\n if (!transport) {\r\n transport = isFunction(transportOptions.read) ? transportOptions : new RemoteTransport(transportOptions);\r\n }\r\n } else {\r\n transport = new LocalTransport({ data: options.data });\r\n }\r\n return transport;\r\n };\r\n\r\n DataSource.create = function(options) {\r\n if (isArray(options) || options instanceof ObservableArray) {\r\n options = { data: options };\r\n }\r\n\r\n var dataSource = options || {},\r\n data = dataSource.data,\r\n fields = dataSource.fields,\r\n table = dataSource.table,\r\n select = dataSource.select,\r\n idx,\r\n length,\r\n model = {},\r\n field;\r\n\r\n if (!data && fields && !dataSource.transport) {\r\n if (table) {\r\n data = inferTable(table, fields);\r\n } else if (select) {\r\n data = inferSelect(select, fields);\r\n }\r\n }\r\n\r\n if (kendo.data.Model && fields && (!dataSource.schema || !dataSource.schema.model)) {\r\n for (idx = 0, length = fields.length; idx < length; idx++) {\r\n field = fields[idx];\r\n if (field.type) {\r\n model[field.field] = field;\r\n }\r\n }\r\n\r\n if (!isEmptyObject(model)) {\r\n dataSource.schema = extend(true, dataSource.schema, { model: { fields: model } });\r\n }\r\n }\r\n\r\n dataSource.data = data;\r\n table = null;\r\n dataSource.table = null;\r\n\r\n return dataSource instanceof DataSource ? dataSource : new DataSource(dataSource);\r\n };\r\n\r\n function inferSelect(select, fields) {\r\n var options = $(select)[0].children,\r\n idx,\r\n length,\r\n data = [],\r\n record,\r\n firstField = fields[0],\r\n secondField = fields[1],\r\n value,\r\n option;\r\n\r\n for (idx = 0, length = options.length; idx < length; idx++) {\r\n record = {};\r\n option = options[idx];\r\n\r\n if (option.disabled) {\r\n continue;\r\n }\r\n\r\n record[firstField.field] = option.text;\r\n\r\n value = option.attributes.value;\r\n\r\n if (value && value.specified) {\r\n value = option.value;\r\n } else {\r\n value = option.text;\r\n }\r\n\r\n record[secondField.field] = value;\r\n\r\n data.push(record);\r\n }\r\n\r\n return data;\r\n }\r\n\r\n function inferTable(table, fields) {\r\n var tbody = $(table)[0].tBodies[0],\r\n rows = tbody ? tbody.rows : [],\r\n idx,\r\n length,\r\n fieldIndex,\r\n fieldCount = fields.length,\r\n data = [],\r\n cells,\r\n record,\r\n cell,\r\n empty;\r\n\r\n for (idx = 0, length = rows.length; idx < length; idx++) {\r\n record = {};\r\n empty = true;\r\n cells = rows[idx].cells;\r\n\r\n for (fieldIndex = 0; fieldIndex < fieldCount; fieldIndex++) {\r\n cell = cells[fieldIndex];\r\n if(cell.nodeName.toLowerCase() !== \"th\") {\r\n empty = false;\r\n record[fields[fieldIndex].field] = cell.innerHTML;\r\n }\r\n }\r\n if(!empty) {\r\n data.push(record);\r\n }\r\n }\r\n\r\n return data;\r\n }\r\n\r\n var Node = Model.define({\r\n init: function(value) {\r\n var that = this,\r\n hasChildren = that.hasChildren || value && value.hasChildren,\r\n childrenField = \"items\",\r\n childrenOptions = {};\r\n\r\n kendo.data.Model.fn.init.call(that, value);\r\n\r\n if (typeof that.children === STRING) {\r\n childrenField = that.children;\r\n }\r\n\r\n childrenOptions = {\r\n schema: {\r\n data: childrenField,\r\n model: {\r\n hasChildren: hasChildren,\r\n id: that.idField\r\n }\r\n }\r\n };\r\n\r\n if (typeof that.children !== STRING) {\r\n extend(childrenOptions, that.children);\r\n }\r\n\r\n childrenOptions.data = value;\r\n\r\n if (!hasChildren) {\r\n hasChildren = childrenOptions.schema.data;\r\n }\r\n\r\n if (typeof hasChildren === STRING) {\r\n hasChildren = kendo.getter(hasChildren);\r\n }\r\n\r\n if (isFunction(hasChildren)) {\r\n that.hasChildren = !!hasChildren.call(that, that);\r\n }\r\n\r\n that._childrenOptions = childrenOptions;\r\n\r\n if (that.hasChildren) {\r\n that._initChildren();\r\n }\r\n\r\n that._loaded = !!(value && (value[childrenField] || value._loaded));\r\n },\r\n\r\n _initChildren: function() {\r\n var that = this;\r\n var children, transport, parameterMap;\r\n\r\n if (!(that.children instanceof HierarchicalDataSource)) {\r\n children = that.children = new HierarchicalDataSource(that._childrenOptions);\r\n\r\n transport = children.transport;\r\n parameterMap = transport.parameterMap;\r\n\r\n transport.parameterMap = function(data) {\r\n data[that.idField || \"id\"] = that.id;\r\n\r\n if (parameterMap) {\r\n data = parameterMap(data);\r\n }\r\n\r\n return data;\r\n };\r\n\r\n children.parent = function(){\r\n return that;\r\n };\r\n\r\n children.bind(CHANGE, function(e){\r\n e.node = e.node || that;\r\n that.trigger(CHANGE, e);\r\n });\r\n\r\n children.bind(ERROR, function(e){\r\n var collection = that.parent();\r\n\r\n if (collection) {\r\n e.node = e.node || that;\r\n collection.trigger(ERROR, e);\r\n }\r\n });\r\n\r\n that._updateChildrenField();\r\n }\r\n },\r\n\r\n append: function(model) {\r\n this._initChildren();\r\n this.loaded(true);\r\n this.children.add(model);\r\n },\r\n\r\n hasChildren: false,\r\n\r\n level: function() {\r\n var parentNode = this.parentNode(),\r\n level = 0;\r\n\r\n while (parentNode && parentNode.parentNode) {\r\n level++;\r\n parentNode = parentNode.parentNode ? parentNode.parentNode() : null;\r\n }\r\n\r\n return level;\r\n },\r\n\r\n _updateChildrenField: function() {\r\n var fieldName = this._childrenOptions.schema.data;\r\n\r\n this[fieldName || \"items\"] = this.children.data();\r\n },\r\n\r\n _childrenLoaded: function() {\r\n this._loaded = true;\r\n\r\n this._updateChildrenField();\r\n },\r\n\r\n load: function() {\r\n var options = {};\r\n var method = \"_query\";\r\n var children;\r\n\r\n if (this.hasChildren) {\r\n this._initChildren();\r\n\r\n children = this.children;\r\n\r\n options[this.idField || \"id\"] = this.id;\r\n\r\n if (!this._loaded) {\r\n children._data = undefined;\r\n method = \"read\";\r\n }\r\n\r\n children.one(CHANGE, proxy(this._childrenLoaded, this));\r\n children[method](options);\r\n } else {\r\n this.loaded(true);\r\n }\r\n },\r\n\r\n parentNode: function() {\r\n var array = this.parent();\r\n\r\n return array.parent();\r\n },\r\n\r\n loaded: function(value) {\r\n if (value !== undefined) {\r\n this._loaded = value;\r\n } else {\r\n return this._loaded;\r\n }\r\n },\r\n\r\n shouldSerialize: function(field) {\r\n return Model.fn.shouldSerialize.call(this, field) &&\r\n field !== \"children\" &&\r\n field !== \"_loaded\" &&\r\n field !== \"hasChildren\" &&\r\n field !== \"_childrenOptions\";\r\n }\r\n });\r\n\r\n function dataMethod(name) {\r\n return function() {\r\n var data = this._data,\r\n result = DataSource.fn[name].apply(this, slice.call(arguments));\r\n\r\n if (this._data != data) {\r\n this._attachBubbleHandlers();\r\n }\r\n\r\n return result;\r\n };\r\n }\r\n\r\n var HierarchicalDataSource = DataSource.extend({\r\n init: function(options) {\r\n var node = Node.define({\r\n children: options\r\n });\r\n\r\n DataSource.fn.init.call(this, extend(true, {}, { schema: { modelBase: node, model: node } }, options));\r\n\r\n this._attachBubbleHandlers();\r\n },\r\n\r\n _attachBubbleHandlers: function() {\r\n var that = this;\r\n\r\n that._data.bind(ERROR, function(e) {\r\n that.trigger(ERROR, e);\r\n });\r\n },\r\n\r\n remove: function(node){\r\n var parentNode = node.parentNode(),\r\n dataSource = this,\r\n result;\r\n\r\n if (parentNode && parentNode._initChildren) {\r\n dataSource = parentNode.children;\r\n }\r\n\r\n result = DataSource.fn.remove.call(dataSource, node);\r\n\r\n if (parentNode && !dataSource.data().length) {\r\n parentNode.hasChildren = false;\r\n }\r\n\r\n return result;\r\n },\r\n\r\n success: dataMethod(\"success\"),\r\n\r\n data: dataMethod(\"data\"),\r\n\r\n insert: function(index, model) {\r\n var parentNode = this.parent();\r\n\r\n if (parentNode && parentNode._initChildren) {\r\n parentNode.hasChildren = true;\r\n parentNode._initChildren();\r\n }\r\n\r\n return DataSource.fn.insert.call(this, index, model);\r\n },\r\n\r\n _find: function(method, value) {\r\n var idx, length, node, data, children;\r\n\r\n node = DataSource.fn[method].call(this, value);\r\n\r\n if (node) {\r\n return node;\r\n }\r\n\r\n data = this._flatData(this.data());\r\n\r\n if (!data) {\r\n return;\r\n }\r\n\r\n for (idx = 0, length = data.length; idx < length; idx++) {\r\n children = data[idx].children;\r\n\r\n if (!(children instanceof HierarchicalDataSource)) {\r\n continue;\r\n }\r\n\r\n node = children[method](value);\r\n\r\n if (node) {\r\n return node;\r\n }\r\n }\r\n },\r\n\r\n get: function(id) {\r\n return this._find(\"get\", id);\r\n },\r\n\r\n getByUid: function(uid) {\r\n return this._find(\"getByUid\", uid);\r\n }\r\n });\r\n\r\n function inferList(list, fields) {\r\n var items = $(list).children(),\r\n idx,\r\n length,\r\n data = [],\r\n record,\r\n textField = fields[0].field,\r\n urlField = fields[1] && fields[1].field,\r\n spriteCssClassField = fields[2] && fields[2].field,\r\n imageUrlField = fields[3] && fields[3].field,\r\n item,\r\n id,\r\n textChild,\r\n className,\r\n children;\r\n\r\n function elements(collection, tagName) {\r\n return collection.filter(tagName).add(collection.find(tagName));\r\n }\r\n\r\n for (idx = 0, length = items.length; idx < length; idx++) {\r\n record = { _loaded: true };\r\n item = items.eq(idx);\r\n\r\n textChild = item[0].firstChild;\r\n children = item.children();\r\n list = children.filter(\"ul\");\r\n children = children.filter(\":not(ul)\");\r\n\r\n id = item.attr(\"data-id\");\r\n\r\n if (id) {\r\n record.id = id;\r\n }\r\n\r\n if (textChild) {\r\n record[textField] = textChild.nodeType == 3 ? textChild.nodeValue : children.text();\r\n }\r\n\r\n if (urlField) {\r\n record[urlField] = elements(children, \"a\").attr(\"href\");\r\n }\r\n\r\n if (imageUrlField) {\r\n record[imageUrlField] = elements(children, \"img\").attr(\"src\");\r\n }\r\n\r\n if (spriteCssClassField) {\r\n className = elements(children, \".k-sprite\").prop(\"className\");\r\n record[spriteCssClassField] = className && $.trim(className.replace(\"k-sprite\", \"\"));\r\n }\r\n\r\n if (list.length) {\r\n record.items = inferList(list.eq(0), fields);\r\n }\r\n\r\n if (item.attr(\"data-hasChildren\") == \"true\") {\r\n record.hasChildren = true;\r\n }\r\n\r\n data.push(record);\r\n }\r\n\r\n return data;\r\n }\r\n\r\n HierarchicalDataSource.create = function(options) {\r\n options = options && options.push ? { data: options } : options;\r\n\r\n var dataSource = options || {},\r\n data = dataSource.data,\r\n fields = dataSource.fields,\r\n list = dataSource.list;\r\n\r\n if (data && data._dataSource) {\r\n return data._dataSource;\r\n }\r\n\r\n if (!data && fields && !dataSource.transport) {\r\n if (list) {\r\n data = inferList(list, fields);\r\n }\r\n }\r\n\r\n dataSource.data = data;\r\n\r\n return dataSource instanceof HierarchicalDataSource ? dataSource : new HierarchicalDataSource(dataSource);\r\n };\r\n\r\n var Buffer = kendo.Observable.extend({\r\n init: function(dataSource, viewSize, disablePrefetch) {\r\n kendo.Observable.fn.init.call(this);\r\n\r\n this._prefetching = false;\r\n this.dataSource = dataSource;\r\n this.prefetch = !disablePrefetch;\r\n\r\n var buffer = this;\r\n\r\n dataSource.bind(\"change\", function() {\r\n buffer._change();\r\n });\r\n\r\n this._syncWithDataSource();\r\n\r\n this.setViewSize(viewSize);\r\n },\r\n\r\n setViewSize: function(viewSize) {\r\n this.viewSize = viewSize;\r\n this._recalculate();\r\n },\r\n\r\n at: function(index) {\r\n var pageSize = this.pageSize, item;\r\n\r\n if (index >= this.total()) {\r\n this.trigger(\"endreached\", {index: index });\r\n return;\r\n }\r\n\r\n if (!this.useRanges) {\r\n return this.dataSource.view()[index];\r\n }\r\n if (this.useRanges) {\r\n // out of range request\r\n if (index < this.dataOffset || index > this.skip + pageSize) {\r\n var offset = Math.floor(index / pageSize) * pageSize;\r\n this.range(offset);\r\n }\r\n\r\n // prefetch\r\n if (index === this.prefetchThreshold) {\r\n this._prefetch();\r\n }\r\n\r\n // mid-range jump - prefetchThreshold and nextPageThreshold may be equal, do not change to else if\r\n if (index === this.midPageThreshold) {\r\n this.range(this.nextMidRange);\r\n }\r\n // next range jump\r\n else if (index === this.nextPageThreshold) {\r\n this.range(this.nextFullRange);\r\n }\r\n // pull-back\r\n else if (index === this.pullBackThreshold) {\r\n if (this.offset === this.skip) { // from full range to mid range\r\n this.range(this.previousMidRange);\r\n } else { // from mid range to full range\r\n this.range(this.previousFullRange);\r\n }\r\n }\r\n\r\n item = this.dataSource.at(index - this.dataOffset);\r\n }\r\n\r\n if (item === undefined) {\r\n this.trigger(\"endreached\", { index: index });\r\n }\r\n\r\n return item;\r\n },\r\n\r\n indexOf: function(item) {\r\n return this.dataSource.data().indexOf(item) + this.dataOffset;\r\n },\r\n\r\n total: function() {\r\n return parseInt(this.dataSource.total(), 10);\r\n },\r\n\r\n next: function() {\r\n var buffer = this,\r\n pageSize = buffer.pageSize,\r\n offset = buffer.skip - buffer.viewSize, // this calculation relies that the buffer has already jumped into the mid range segment\r\n pageSkip = math.max(math.floor(offset / pageSize), 0) * pageSize + pageSize;\r\n\r\n this.offset = offset;\r\n this.dataSource.prefetch(pageSkip, pageSize, function() {\r\n buffer._goToRange(offset, true);\r\n });\r\n },\r\n\r\n range: function(offset) {\r\n if (this.offset === offset) {\r\n return;\r\n }\r\n\r\n var buffer = this,\r\n pageSize = this.pageSize,\r\n pageSkip = math.max(math.floor(offset / pageSize), 0) * pageSize + pageSize,\r\n dataSource = this.dataSource;\r\n\r\n this.offset = offset;\r\n this._recalculate();\r\n if (dataSource.inRange(offset, pageSize)) {\r\n this._goToRange(offset);\r\n } else if (this.prefetch) {\r\n dataSource.prefetch(pageSkip, pageSize, function() {\r\n buffer._goToRange(offset, true);\r\n });\r\n }\r\n },\r\n\r\n syncDataSource: function() {\r\n var offset = this.offset;\r\n this.offset = null;\r\n this.range(offset);\r\n },\r\n\r\n destroy: function() {\r\n this.unbind();\r\n },\r\n\r\n _prefetch: function() {\r\n var buffer = this,\r\n pageSize = this.pageSize,\r\n prefetchOffset = this.skip + pageSize,\r\n dataSource = this.dataSource;\r\n\r\n if (!dataSource.inRange(prefetchOffset, pageSize) && !this._prefetching && this.prefetch) {\r\n this._prefetching = true;\r\n this.trigger(\"prefetching\", { skip: prefetchOffset, take: pageSize });\r\n\r\n dataSource.prefetch(prefetchOffset, pageSize, function() {\r\n buffer._prefetching = false;\r\n buffer.trigger(\"prefetched\", { skip: prefetchOffset, take: pageSize });\r\n });\r\n }\r\n },\r\n\r\n _goToRange: function(offset, expanding) {\r\n if (this.offset !== offset) {\r\n return;\r\n }\r\n\r\n this.dataOffset = offset;\r\n this._expanding = expanding;\r\n this.dataSource.range(offset, this.pageSize);\r\n },\r\n\r\n _change: function() {\r\n var dataSource = this.dataSource,\r\n firstItemUid = dataSource.firstItemUid();\r\n\r\n this.length = this.useRanges ? dataSource.lastRange().end : dataSource.view().length;\r\n\r\n if (this._firstItemUid !== firstItemUid || !this.useRanges) {\r\n this._syncWithDataSource();\r\n this._recalculate();\r\n this.trigger(\"reset\", { offset: this.offset });\r\n }\r\n\r\n this.trigger(\"resize\");\r\n\r\n if (this._expanding) {\r\n this.trigger(\"expand\");\r\n }\r\n\r\n delete this._expanding;\r\n },\r\n\r\n _syncWithDataSource: function() {\r\n var dataSource = this.dataSource;\r\n\r\n this._firstItemUid = dataSource.firstItemUid();\r\n this.dataOffset = this.offset = dataSource.skip() || 0;\r\n this.pageSize = dataSource.pageSize();\r\n this.useRanges = dataSource.options.serverPaging;\r\n },\r\n\r\n _recalculate: function() {\r\n var pageSize = this.pageSize,\r\n offset = this.offset,\r\n viewSize = this.viewSize,\r\n skip = Math.ceil(offset / pageSize) * pageSize;\r\n\r\n this.skip = skip;\r\n this.midPageThreshold = skip + pageSize - 1;\r\n this.nextPageThreshold = skip + viewSize - 1;\r\n this.prefetchThreshold = skip + Math.floor(pageSize / 3 * 2);\r\n this.pullBackThreshold = this.offset - 1;\r\n\r\n this.nextMidRange = skip + pageSize - viewSize;\r\n this.nextFullRange = skip;\r\n this.previousMidRange = offset - viewSize;\r\n this.previousFullRange = skip - pageSize;\r\n }\r\n });\r\n\r\n var BatchBuffer = kendo.Observable.extend({\r\n init: function(dataSource, batchSize) {\r\n var batchBuffer = this;\r\n\r\n kendo.Observable.fn.init.call(batchBuffer);\r\n\r\n this.dataSource = dataSource;\r\n this.batchSize = batchSize;\r\n this._total = 0;\r\n\r\n this.buffer = new Buffer(dataSource, batchSize * 3);\r\n\r\n this.buffer.bind({\r\n \"endreached\": function (e) {\r\n batchBuffer.trigger(\"endreached\", { index: e.index });\r\n },\r\n \"prefetching\": function (e) {\r\n batchBuffer.trigger(\"prefetching\", { skip: e.skip, take: e.take });\r\n },\r\n \"prefetched\": function (e) {\r\n batchBuffer.trigger(\"prefetched\", { skip: e.skip, take: e.take });\r\n },\r\n \"reset\": function () {\r\n batchBuffer._total = 0;\r\n batchBuffer.trigger(\"reset\");\r\n },\r\n \"resize\": function () {\r\n batchBuffer._total = Math.ceil(this.length / batchBuffer.batchSize);\r\n batchBuffer.trigger(\"resize\", { total: batchBuffer.total(), offset: this.offset });\r\n }\r\n });\r\n },\r\n\r\n syncDataSource: function() {\r\n this.buffer.syncDataSource();\r\n },\r\n\r\n at: function(index) {\r\n var buffer = this.buffer,\r\n skip = index * this.batchSize,\r\n take = this.batchSize,\r\n view = [],\r\n item;\r\n\r\n if (buffer.offset > skip) {\r\n buffer.at(buffer.offset - 1);\r\n }\r\n\r\n for (var i = 0; i < take; i++) {\r\n item = buffer.at(skip + i);\r\n\r\n if (item === undefined) {\r\n break;\r\n }\r\n\r\n view.push(item);\r\n }\r\n\r\n return view;\r\n },\r\n\r\n total: function() {\r\n return this._total;\r\n },\r\n\r\n destroy: function() {\r\n this.buffer.destroy();\r\n this.unbind();\r\n }\r\n });\r\n\r\n extend(true, kendo.data, {\r\n readers: {\r\n json: DataReader\r\n },\r\n Query: Query,\r\n DataSource: DataSource,\r\n HierarchicalDataSource: HierarchicalDataSource,\r\n Node: Node,\r\n ObservableObject: ObservableObject,\r\n ObservableArray: ObservableArray,\r\n LocalTransport: LocalTransport,\r\n RemoteTransport: RemoteTransport,\r\n Cache: Cache,\r\n DataReader: DataReader,\r\n Model: Model,\r\n Buffer: Buffer,\r\n BatchBuffer: BatchBuffer\r\n });\r\n})(window.kendo.jQuery);\r\n\r\nreturn window.kendo;\r\n\r\n}, typeof define == 'function' && define.amd ? define : function(_, f){ f(); });","/*\r\n* Kendo UI Complete v2014.1.318 (http://kendoui.com)\r\n* Copyright 2014 Telerik AD. All rights reserved.\r\n*\r\n* Kendo UI Complete commercial licenses may be obtained at\r\n* http://www.telerik.com/purchase/license-agreement/kendo-ui-complete\r\n* If you do not own a commercial license, this file shall be governed by the trial license terms.\r\n*/\r\n(function(f, define){\r\n define([ \"./kendo.core\" ], f);\r\n})(function(){\r\n\r\n(function($, undefined) {\r\n var kendo = window.kendo,\r\n extend = $.extend,\r\n odataFilters = {\r\n eq: \"eq\",\r\n neq: \"ne\",\r\n gt: \"gt\",\r\n gte: \"ge\",\r\n lt: \"lt\",\r\n lte: \"le\",\r\n contains : \"substringof\",\r\n doesnotcontain: \"substringof\",\r\n endswith: \"endswith\",\r\n startswith: \"startswith\"\r\n },\r\n mappers = {\r\n pageSize: $.noop,\r\n page: $.noop,\r\n filter: function(params, filter) {\r\n if (filter) {\r\n params.$filter = toOdataFilter(filter);\r\n }\r\n },\r\n sort: function(params, orderby) {\r\n var expr = $.map(orderby, function(value) {\r\n var order = value.field.replace(/\\./g, \"/\");\r\n\r\n if (value.dir === \"desc\") {\r\n order += \" desc\";\r\n }\r\n\r\n return order;\r\n }).join(\",\");\r\n\r\n if (expr) {\r\n params.$orderby = expr;\r\n }\r\n },\r\n skip: function(params, skip) {\r\n if (skip) {\r\n params.$skip = skip;\r\n }\r\n },\r\n take: function(params, take) {\r\n if (take) {\r\n params.$top = take;\r\n }\r\n }\r\n },\r\n defaultDataType = {\r\n read: {\r\n dataType: \"jsonp\"\r\n }\r\n };\r\n\r\n function toOdataFilter(filter) {\r\n var result = [],\r\n logic = filter.logic || \"and\",\r\n idx,\r\n length,\r\n field,\r\n type,\r\n format,\r\n operator,\r\n value,\r\n ignoreCase,\r\n filters = filter.filters;\r\n\r\n for (idx = 0, length = filters.length; idx < length; idx++) {\r\n filter = filters[idx];\r\n field = filter.field;\r\n value = filter.value;\r\n operator = filter.operator;\r\n\r\n if (filter.filters) {\r\n filter = toOdataFilter(filter);\r\n } else {\r\n ignoreCase = filter.ignoreCase;\r\n field = field.replace(/\\./g, \"/\");\r\n filter = odataFilters[operator];\r\n\r\n if (filter && value !== undefined) {\r\n type = $.type(value);\r\n if (type === \"string\") {\r\n format = \"'{1}'\";\r\n value = value.replace(/'/g, \"''\");\r\n\r\n if (ignoreCase === true) {\r\n field = \"tolower(\" + field + \")\";\r\n }\r\n\r\n } else if (type === \"date\") {\r\n format = \"datetime'{1:yyyy-MM-ddTHH:mm:ss}'\";\r\n } else {\r\n format = \"{1}\";\r\n }\r\n\r\n if (filter.length > 3) {\r\n if (filter !== \"substringof\") {\r\n format = \"{0}({2},\" + format + \")\";\r\n } else {\r\n format = \"{0}(\" + format + \",{2})\";\r\n if (operator === \"doesnotcontain\") {\r\n format += \" eq false\";\r\n }\r\n }\r\n } else {\r\n format = \"{2} {0} \" + format;\r\n }\r\n\r\n filter = kendo.format(format, filter, value, field);\r\n }\r\n }\r\n\r\n result.push(filter);\r\n }\r\n\r\n filter = result.join(\" \" + logic + \" \");\r\n\r\n if (result.length > 1) {\r\n filter = \"(\" + filter + \")\";\r\n }\r\n\r\n return filter;\r\n }\r\n\r\n extend(true, kendo.data, {\r\n schemas: {\r\n odata: {\r\n type: \"json\",\r\n data: function(data) {\r\n return data.d.results || [data.d];\r\n },\r\n total: \"d.__count\"\r\n }\r\n },\r\n transports: {\r\n odata: {\r\n read: {\r\n cache: true, // to prevent jQuery from adding cache buster\r\n dataType: \"jsonp\",\r\n jsonp: \"$callback\"\r\n },\r\n update: {\r\n cache: true,\r\n dataType: \"json\",\r\n contentType: \"application/json\", // to inform the server the the request body is JSON encoded\r\n type: \"PUT\" // can be PUT or MERGE\r\n },\r\n create: {\r\n cache: true,\r\n dataType: \"json\",\r\n contentType: \"application/json\",\r\n type: \"POST\" // must be POST to create new entity\r\n },\r\n destroy: {\r\n cache: true,\r\n dataType: \"json\",\r\n type: \"DELETE\"\r\n },\r\n parameterMap: function(options, type) {\r\n var params,\r\n value,\r\n option,\r\n dataType;\r\n\r\n options = options || {};\r\n type = type || \"read\";\r\n dataType = (this.options || defaultDataType)[type];\r\n dataType = dataType ? dataType.dataType : \"json\";\r\n\r\n if (type === \"read\") {\r\n params = {\r\n $inlinecount: \"allpages\"\r\n };\r\n\r\n if (dataType != \"json\") {\r\n params.$format = \"json\";\r\n }\r\n\r\n for (option in options) {\r\n if (mappers[option]) {\r\n mappers[option](params, options[option]);\r\n } else {\r\n params[option] = options[option];\r\n }\r\n }\r\n } else {\r\n if (dataType !== \"json\") {\r\n throw new Error(\"Only json dataType can be used for \" + type + \" operation.\");\r\n }\r\n\r\n if (type !== \"destroy\") {\r\n for (option in options) {\r\n value = options[option];\r\n if (typeof value === \"number\") {\r\n options[option] = value + \"\";\r\n }\r\n }\r\n\r\n params = kendo.stringify(options);\r\n }\r\n }\r\n\r\n return params;\r\n }\r\n }\r\n }\r\n });\r\n})(window.kendo.jQuery);\r\n\r\nreturn window.kendo;\r\n\r\n}, typeof define == 'function' && define.amd ? define : function(_, f){ f(); });","/*\r\n* Kendo UI Complete v2014.1.318 (http://kendoui.com)\r\n* Copyright 2014 Telerik AD. All rights reserved.\r\n*\r\n* Kendo UI Complete commercial licenses may be obtained at\r\n* http://www.telerik.com/purchase/license-agreement/kendo-ui-complete\r\n* If you do not own a commercial license, this file shall be governed by the trial license terms.\r\n*/\r\n(function(f, define){\r\n define([ \"./kendo.core\" ], f);\r\n})(function(){\r\n\r\n/*jshint eqnull: true, boss: true */\r\n(function($, undefined) {\r\n var kendo = window.kendo,\r\n isArray = $.isArray,\r\n isPlainObject = $.isPlainObject,\r\n map = $.map,\r\n each = $.each,\r\n extend = $.extend,\r\n getter = kendo.getter,\r\n Class = kendo.Class;\r\n\r\n var XmlDataReader = Class.extend({\r\n init: function(options) {\r\n var that = this,\r\n total = options.total,\r\n model = options.model,\r\n parse = options.parse,\r\n errors = options.errors,\r\n serialize = options.serialize,\r\n data = options.data;\r\n\r\n if (model) {\r\n if (isPlainObject(model)) {\r\n var base = options.modelBase || kendo.data.Model;\r\n\r\n if (model.fields) {\r\n each(model.fields, function(field, value) {\r\n if (isPlainObject(value) && value.field) {\r\n value = extend(value, { field: that.getter(value.field) });\r\n } else {\r\n value = { field: that.getter(value) };\r\n }\r\n model.fields[field] = value;\r\n });\r\n }\r\n\r\n var id = model.id;\r\n if (id) {\r\n var idField = {};\r\n\r\n idField[that.xpathToMember(id, true)] = { field : that.getter(id) };\r\n model.fields = extend(idField, model.fields);\r\n model.id = that.xpathToMember(id);\r\n }\r\n model = base.define(model);\r\n }\r\n\r\n that.model = model;\r\n }\r\n\r\n if (total) {\r\n if (typeof total == \"string\") {\r\n total = that.getter(total);\r\n that.total = function(data) {\r\n return parseInt(total(data), 10);\r\n };\r\n } else if (typeof total == \"function\"){\r\n that.total = total;\r\n }\r\n }\r\n\r\n if (errors) {\r\n if (typeof errors == \"string\") {\r\n errors = that.getter(errors);\r\n that.errors = function(data) {\r\n return errors(data) || null;\r\n };\r\n } else if (typeof errors == \"function\"){\r\n that.errors = errors;\r\n }\r\n }\r\n\r\n if (data) {\r\n if (typeof data == \"string\") {\r\n data = that.xpathToMember(data);\r\n that.data = function(value) {\r\n var result = that.evaluate(value, data),\r\n modelInstance;\r\n\r\n result = isArray(result) ? result : [result];\r\n\r\n if (that.model && model.fields) {\r\n modelInstance = new that.model();\r\n\r\n return map(result, function(value) {\r\n if (value) {\r\n var record = {}, field;\r\n\r\n for (field in model.fields) {\r\n record[field] = modelInstance._parse(field, model.fields[field].field(value));\r\n }\r\n\r\n return record;\r\n }\r\n });\r\n }\r\n\r\n return result;\r\n };\r\n } else if (typeof data == \"function\") {\r\n that.data = data;\r\n }\r\n }\r\n\r\n if (typeof parse == \"function\") {\r\n var xmlParse = that.parse;\r\n\r\n that.parse = function(data) {\r\n var xml = parse.call(that, data);\r\n return xmlParse.call(that, xml);\r\n };\r\n }\r\n\r\n if (typeof serialize == \"function\") {\r\n that.serialize = serialize;\r\n }\r\n },\r\n total: function(result) {\r\n return this.data(result).length;\r\n },\r\n errors: function(data) {\r\n return data ? data.errors : null;\r\n },\r\n serialize: function(data) {\r\n return data;\r\n },\r\n parseDOM: function(element) {\r\n var result = {},\r\n parsedNode,\r\n node,\r\n nodeType,\r\n nodeName,\r\n member,\r\n attribute,\r\n attributes = element.attributes,\r\n attributeCount = attributes.length,\r\n idx;\r\n\r\n for (idx = 0; idx < attributeCount; idx++) {\r\n attribute = attributes[idx];\r\n result[\"@\" + attribute.nodeName] = attribute.nodeValue;\r\n }\r\n\r\n for (node = element.firstChild; node; node = node.nextSibling) {\r\n nodeType = node.nodeType;\r\n\r\n if (nodeType === 3 || nodeType === 4) {\r\n // text nodes or CDATA are stored as #text field\r\n result[\"#text\"] = node.nodeValue;\r\n } else if (nodeType === 1) {\r\n // elements are stored as fields\r\n parsedNode = this.parseDOM(node);\r\n\r\n nodeName = node.nodeName;\r\n\r\n member = result[nodeName];\r\n\r\n if (isArray(member)) {\r\n // elements of same nodeName are stored as array\r\n member.push(parsedNode);\r\n } else if (member !== undefined) {\r\n member = [member, parsedNode];\r\n } else {\r\n member = parsedNode;\r\n }\r\n\r\n result[nodeName] = member;\r\n }\r\n }\r\n return result;\r\n },\r\n\r\n evaluate: function(value, expression) {\r\n var members = expression.split(\".\"),\r\n member,\r\n result,\r\n length,\r\n intermediateResult,\r\n idx;\r\n\r\n while (member = members.shift()) {\r\n value = value[member];\r\n\r\n if (isArray(value)) {\r\n result = [];\r\n expression = members.join(\".\");\r\n\r\n for (idx = 0, length = value.length; idx < length; idx++) {\r\n intermediateResult = this.evaluate(value[idx], expression);\r\n\r\n intermediateResult = isArray(intermediateResult) ? intermediateResult : [intermediateResult];\r\n\r\n result.push.apply(result, intermediateResult);\r\n }\r\n\r\n return result;\r\n }\r\n }\r\n\r\n return value;\r\n },\r\n\r\n parse: function(xml) {\r\n var documentElement,\r\n tree,\r\n result = {};\r\n\r\n documentElement = xml.documentElement || $.parseXML(xml).documentElement;\r\n\r\n tree = this.parseDOM(documentElement);\r\n\r\n result[documentElement.nodeName] = tree;\r\n\r\n return result;\r\n },\r\n\r\n xpathToMember: function(member, raw) {\r\n if (!member) {\r\n return \"\";\r\n }\r\n\r\n member = member.replace(/^\\//, \"\") // remove the first \"/\"\r\n .replace(/\\//g, \".\"); // replace all \"/\" with \".\"\r\n\r\n if (member.indexOf(\"@\") >= 0) {\r\n // replace @attribute with '[\"@attribute\"]'\r\n return member.replace(/\\.?(@.*)/, raw? '$1':'[\"$1\"]');\r\n }\r\n\r\n if (member.indexOf(\"text()\") >= 0) {\r\n // replace \".text()\" with '[\"#text\"]'\r\n return member.replace(/(\\.?text\\(\\))/, raw? '#text':'[\"#text\"]');\r\n }\r\n\r\n return member;\r\n },\r\n getter: function(member) {\r\n return getter(this.xpathToMember(member), true);\r\n }\r\n });\r\n\r\n $.extend(true, kendo.data, {\r\n XmlDataReader: XmlDataReader,\r\n readers: {\r\n xml: XmlDataReader\r\n }\r\n });\r\n})(window.kendo.jQuery);\r\n\r\nreturn window.kendo;\r\n\r\n}, typeof define == 'function' && define.amd ? define : function(_, f){ f(); });","/*\r\n* Kendo UI Complete v2014.1.318 (http://kendoui.com)\r\n* Copyright 2014 Telerik AD. All rights reserved.\r\n*\r\n* Kendo UI Complete commercial licenses may be obtained at\r\n* http://www.telerik.com/purchase/license-agreement/kendo-ui-complete\r\n* If you do not own a commercial license, this file shall be governed by the trial license terms.\r\n*/\r\n(function(f, define){\r\n define([ \"./kendo.calendar\", \"./kendo.popup\" ], f);\r\n})(function(){\r\n\r\n(function($, undefined) {\r\n var kendo = window.kendo,\r\n ui = kendo.ui,\r\n Widget = ui.Widget,\r\n parse = kendo.parseDate,\r\n keys = kendo.keys,\r\n template = kendo.template,\r\n activeElement = kendo._activeElement,\r\n DIV = \"
    \",\r\n SPAN = \"\",\r\n ns = \".kendoDatePicker\",\r\n CLICK = \"click\" + ns,\r\n OPEN = \"open\",\r\n CLOSE = \"close\",\r\n CHANGE = \"change\",\r\n DATEVIEW = \"dateView\",\r\n DISABLED = \"disabled\",\r\n READONLY = \"readonly\",\r\n DEFAULT = \"k-state-default\",\r\n FOCUSED = \"k-state-focused\",\r\n SELECTED = \"k-state-selected\",\r\n STATEDISABLED = \"k-state-disabled\",\r\n HOVER = \"k-state-hover\",\r\n KEYDOWN = \"keydown\" + ns,\r\n HOVEREVENTS = \"mouseenter\" + ns + \" mouseleave\" + ns,\r\n MOUSEDOWN = \"mousedown\" + ns,\r\n ID = \"id\",\r\n MIN = \"min\",\r\n MAX = \"max\",\r\n MONTH = \"month\",\r\n ARIA_DISABLED = \"aria-disabled\",\r\n ARIA_EXPANDED = \"aria-expanded\",\r\n ARIA_HIDDEN = \"aria-hidden\",\r\n ARIA_READONLY = \"aria-readonly\",\r\n calendar = kendo.calendar,\r\n isInRange = calendar.isInRange,\r\n restrictValue = calendar.restrictValue,\r\n isEqualDatePart = calendar.isEqualDatePart,\r\n extend = $.extend,\r\n proxy = $.proxy,\r\n DATE = Date;\r\n\r\n function normalize(options) {\r\n var parseFormats = options.parseFormats,\r\n format = options.format;\r\n\r\n calendar.normalize(options);\r\n\r\n parseFormats = $.isArray(parseFormats) ? parseFormats : [parseFormats];\r\n if ($.inArray(format, parseFormats) === -1) {\r\n parseFormats.splice(0, 0, options.format);\r\n }\r\n\r\n options.parseFormats = parseFormats;\r\n }\r\n\r\n function preventDefault(e) {\r\n e.preventDefault();\r\n }\r\n\r\n var DateView = function(options) {\r\n var that = this, id,\r\n body = document.body,\r\n div = $(DIV).attr(ARIA_HIDDEN, \"true\")\r\n .addClass(\"k-calendar-container\")\r\n .appendTo(body);\r\n\r\n that.options = options = options || {};\r\n id = options.id;\r\n\r\n if (id) {\r\n id += \"_dateview\";\r\n\r\n div.attr(ID, id);\r\n that._dateViewID = id;\r\n }\r\n\r\n that.popup = new ui.Popup(div, extend(options.popup, options, { name: \"Popup\", isRtl: kendo.support.isRtl(options.anchor) }));\r\n that.div = div;\r\n\r\n that.value(options.value);\r\n };\r\n\r\n DateView.prototype = {\r\n _calendar: function() {\r\n var that = this;\r\n var calendar = that.calendar;\r\n var options = that.options;\r\n var div;\r\n\r\n if (!calendar) {\r\n div = $(DIV).attr(ID, kendo.guid())\r\n .appendTo(that.popup.element)\r\n .on(MOUSEDOWN, preventDefault)\r\n .on(CLICK, \"td:has(.k-link)\", proxy(that._click, that));\r\n\r\n that.calendar = calendar = new ui.Calendar(div);\r\n that._setOptions(options);\r\n\r\n kendo.calendar.makeUnselectable(calendar.element);\r\n\r\n calendar.navigate(that._value || that._current, options.start);\r\n\r\n that.value(that._value);\r\n }\r\n },\r\n\r\n _setOptions: function(options) {\r\n this.calendar.setOptions({\r\n focusOnNav: false,\r\n change: options.change,\r\n culture: options.culture,\r\n dates: options.dates,\r\n depth: options.depth,\r\n footer: options.footer,\r\n format: options.format,\r\n max: options.max,\r\n min: options.min,\r\n month: options.month,\r\n start: options.start\r\n });\r\n },\r\n\r\n setOptions: function(options) {\r\n var old = this.options;\r\n\r\n this.options = extend(old, options, {\r\n change: old.change,\r\n close: old.close,\r\n open: old.open\r\n });\r\n\r\n if (this.calendar) {\r\n this._setOptions(this.options);\r\n }\r\n },\r\n\r\n destroy: function() {\r\n this.popup.destroy();\r\n },\r\n\r\n open: function() {\r\n var that = this;\r\n\r\n that._calendar();\r\n that.popup.open();\r\n },\r\n\r\n close: function() {\r\n this.popup.close();\r\n },\r\n\r\n min: function(value) {\r\n this._option(MIN, value);\r\n },\r\n\r\n max: function(value) {\r\n this._option(MAX, value);\r\n },\r\n\r\n toggle: function() {\r\n var that = this;\r\n\r\n that[that.popup.visible() ? CLOSE : OPEN]();\r\n },\r\n\r\n move: function(e) {\r\n var that = this,\r\n key = e.keyCode,\r\n calendar = that.calendar,\r\n selectIsClicked = e.ctrlKey && key == keys.DOWN || key == keys.ENTER;\r\n\r\n if (key == keys.ESC) {\r\n that.close();\r\n return;\r\n }\r\n\r\n if (e.altKey) {\r\n if (key == keys.DOWN) {\r\n that.open();\r\n e.preventDefault();\r\n } else if (key == keys.UP) {\r\n that.close();\r\n e.preventDefault();\r\n }\r\n return;\r\n }\r\n\r\n if (!that.popup.visible()){\r\n return;\r\n }\r\n\r\n if (selectIsClicked && calendar._cell.hasClass(SELECTED)) {\r\n that.close();\r\n e.preventDefault();\r\n return;\r\n }\r\n\r\n that._current = calendar._move(e);\r\n },\r\n\r\n current: function(date) {\r\n this._current = date;\r\n this.calendar._focus(date);\r\n },\r\n\r\n value: function(value) {\r\n var that = this,\r\n calendar = that.calendar,\r\n options = that.options;\r\n\r\n that._value = value;\r\n that._current = new DATE(+restrictValue(value, options.min, options.max));\r\n\r\n if (calendar) {\r\n calendar.value(value);\r\n }\r\n },\r\n\r\n _click: function(e) {\r\n if (e.currentTarget.className.indexOf(SELECTED) !== -1) {\r\n this.close();\r\n }\r\n },\r\n\r\n _option: function(option, value) {\r\n var that = this;\r\n var calendar = that.calendar;\r\n\r\n that.options[option] = value;\r\n\r\n if (calendar) {\r\n calendar[option](value);\r\n }\r\n }\r\n };\r\n\r\n DateView.normalize = normalize;\r\n\r\n kendo.DateView = DateView;\r\n\r\n var DatePicker = Widget.extend({\r\n init: function(element, options) {\r\n var that = this,\r\n disabled,\r\n div;\r\n\r\n Widget.fn.init.call(that, element, options);\r\n element = that.element;\r\n options = that.options;\r\n\r\n options.min = parse(element.attr(\"min\")) || parse(options.min);\r\n options.max = parse(element.attr(\"max\")) || parse(options.max);\r\n\r\n normalize(options);\r\n\r\n that._wrapper();\r\n\r\n that.dateView = new DateView(extend({}, options, {\r\n id: element.attr(ID),\r\n anchor: that.wrapper,\r\n change: function() {\r\n // calendar is the current scope\r\n that._change(this.value());\r\n that.close();\r\n },\r\n close: function(e) {\r\n if (that.trigger(CLOSE)) {\r\n e.preventDefault();\r\n } else {\r\n element.attr(ARIA_EXPANDED, false);\r\n div.attr(ARIA_HIDDEN, true);\r\n }\r\n },\r\n open: function(e) {\r\n var options = that.options,\r\n date;\r\n\r\n if (that.trigger(OPEN)) {\r\n e.preventDefault();\r\n } else {\r\n if (that.element.val() !== that._oldText) {\r\n date = parse(element.val(), options.parseFormats, options.culture);\r\n\r\n that.dateView[date ? \"current\" : \"value\"](date);\r\n }\r\n\r\n element.attr(ARIA_EXPANDED, true);\r\n div.attr(ARIA_HIDDEN, false);\r\n\r\n that._updateARIA(date);\r\n\r\n }\r\n }\r\n }));\r\n div = that.dateView.div;\r\n\r\n that._icon();\r\n\r\n try {\r\n element[0].setAttribute(\"type\", \"text\");\r\n } catch(e) {\r\n element[0].type = \"text\";\r\n }\r\n\r\n element\r\n .addClass(\"k-input\")\r\n .attr({\r\n role: \"combobox\",\r\n \"aria-expanded\": false,\r\n \"aria-owns\": that.dateView._dateViewID\r\n });\r\n\r\n that._reset();\r\n that._template();\r\n\r\n disabled = element.is(\"[disabled]\");\r\n if (disabled) {\r\n that.enable(false);\r\n } else {\r\n that.readonly(element.is(\"[readonly]\"));\r\n }\r\n\r\n that._old = that._update(options.value || that.element.val());\r\n that._oldText = element.val();\r\n\r\n kendo.notify(that);\r\n },\r\n events: [\r\n OPEN,\r\n CLOSE,\r\n CHANGE],\r\n options: {\r\n name: \"DatePicker\",\r\n value: null,\r\n footer: \"\",\r\n format: \"\",\r\n culture: \"\",\r\n parseFormats: [],\r\n min: new Date(1900, 0, 1),\r\n max: new Date(2099, 11, 31),\r\n start: MONTH,\r\n depth: MONTH,\r\n animation: {},\r\n month : {},\r\n dates: [],\r\n ARIATemplate: 'Current focused date is #=kendo.toString(data.current, \"D\")#'\r\n },\r\n\r\n setOptions: function(options) {\r\n var that = this;\r\n var value = that._value;\r\n\r\n Widget.fn.setOptions.call(that, options);\r\n\r\n options = that.options;\r\n\r\n options.min = parse(options.min);\r\n options.max = parse(options.max);\r\n\r\n normalize(options);\r\n\r\n that.dateView.setOptions(options);\r\n\r\n if (value) {\r\n that.element.val(kendo.toString(value, options.format, options.culture));\r\n that._updateARIA(value);\r\n }\r\n },\r\n\r\n _editable: function(options) {\r\n var that = this,\r\n icon = that._dateIcon.off(ns),\r\n element = that.element.off(ns),\r\n wrapper = that._inputWrapper.off(ns),\r\n readonly = options.readonly,\r\n disable = options.disable;\r\n\r\n if (!readonly && !disable) {\r\n wrapper\r\n .addClass(DEFAULT)\r\n .removeClass(STATEDISABLED)\r\n .on(HOVEREVENTS, that._toggleHover);\r\n\r\n element.removeAttr(DISABLED)\r\n .removeAttr(READONLY)\r\n .attr(ARIA_DISABLED, false)\r\n .attr(ARIA_READONLY, false)\r\n .on(\"keydown\" + ns, proxy(that._keydown, that))\r\n .on(\"blur\" + ns, proxy(that._blur, that))\r\n .on(\"focus\" + ns, function() {\r\n that._inputWrapper.addClass(FOCUSED);\r\n });\r\n\r\n icon.on(CLICK, proxy(that._click, that))\r\n .on(MOUSEDOWN, preventDefault);\r\n } else {\r\n wrapper\r\n .addClass(disable ? STATEDISABLED : DEFAULT)\r\n .removeClass(disable ? DEFAULT : STATEDISABLED);\r\n\r\n element.attr(DISABLED, disable)\r\n .attr(READONLY, readonly)\r\n .attr(ARIA_DISABLED, disable)\r\n .attr(ARIA_READONLY, readonly);\r\n }\r\n },\r\n\r\n readonly: function(readonly) {\r\n this._editable({\r\n readonly: readonly === undefined ? true : readonly,\r\n disable: false\r\n });\r\n },\r\n\r\n enable: function(enable) {\r\n this._editable({\r\n readonly: false,\r\n disable: !(enable = enable === undefined ? true : enable)\r\n });\r\n },\r\n\r\n destroy: function() {\r\n var that = this;\r\n\r\n Widget.fn.destroy.call(that);\r\n\r\n that.dateView.destroy();\r\n\r\n that.element.off(ns);\r\n that._dateIcon.off(ns);\r\n that._inputWrapper.off(ns);\r\n\r\n if (that._form) {\r\n that._form.off(\"reset\", that._resetHandler);\r\n }\r\n },\r\n\r\n open: function() {\r\n this.dateView.open();\r\n },\r\n\r\n close: function() {\r\n this.dateView.close();\r\n },\r\n\r\n min: function(value) {\r\n return this._option(MIN, value);\r\n },\r\n\r\n max: function(value) {\r\n return this._option(MAX, value);\r\n },\r\n\r\n value: function(value) {\r\n var that = this;\r\n\r\n if (value === undefined) {\r\n return that._value;\r\n }\r\n\r\n that._old = that._update(value);\r\n\r\n if (that._old === null) {\r\n that.element.val(\"\");\r\n }\r\n\r\n that._oldText = that.element.val();\r\n },\r\n\r\n _toggleHover: function(e) {\r\n $(e.currentTarget).toggleClass(HOVER, e.type === \"mouseenter\");\r\n },\r\n\r\n _blur: function() {\r\n var that = this,\r\n value = that.element.val();\r\n\r\n that.close();\r\n if (value !== that._oldText) {\r\n that._change(value);\r\n }\r\n\r\n that._inputWrapper.removeClass(FOCUSED);\r\n },\r\n\r\n _click: function() {\r\n var that = this,\r\n element = that.element;\r\n\r\n that.dateView.toggle();\r\n\r\n if (!kendo.support.touch && element[0] !== activeElement()) {\r\n element.focus();\r\n }\r\n },\r\n\r\n _change: function(value) {\r\n var that = this;\r\n\r\n value = that._update(value);\r\n\r\n if (+that._old != +value) {\r\n that._old = value;\r\n that._oldText = that.element.val();\r\n\r\n that.trigger(CHANGE);\r\n\r\n // trigger the DOM change event so any subscriber gets notified\r\n that.element.trigger(CHANGE);\r\n }\r\n },\r\n\r\n _keydown: function(e) {\r\n var that = this,\r\n dateView = that.dateView,\r\n value = that.element.val();\r\n\r\n if (!dateView.popup.visible() && e.keyCode == keys.ENTER && value !== that._oldText) {\r\n that._change(value);\r\n } else {\r\n dateView.move(e);\r\n that._updateARIA(dateView._current);\r\n }\r\n },\r\n\r\n _icon: function() {\r\n var that = this,\r\n element = that.element,\r\n icon;\r\n\r\n icon = element.next(\"span.k-select\");\r\n\r\n if (!icon[0]) {\r\n icon = $('select').insertAfter(element);\r\n }\r\n\r\n that._dateIcon = icon.attr({\r\n \"role\": \"button\",\r\n \"aria-controls\": that.dateView._dateViewID\r\n });\r\n },\r\n\r\n _option: function(option, value) {\r\n var that = this,\r\n options = that.options;\r\n\r\n if (value === undefined) {\r\n return options[option];\r\n }\r\n\r\n value = parse(value, options.parseFormats, options.culture);\r\n\r\n if (!value) {\r\n return;\r\n }\r\n\r\n options[option] = new DATE(+value);\r\n that.dateView[option](value);\r\n },\r\n\r\n _update: function(value) {\r\n var that = this,\r\n options = that.options,\r\n min = options.min,\r\n max = options.max,\r\n date = parse(value, options.parseFormats, options.culture),\r\n formattedValue;\r\n\r\n if (+date === +that._value) {\r\n formattedValue = kendo.toString(date, options.format, options.culture);\r\n\r\n if (formattedValue !== value) {\r\n that.element.val(date === null ? value : formattedValue);\r\n }\r\n\r\n return date;\r\n }\r\n\r\n if (date !== null && isEqualDatePart(date, min)) {\r\n date = restrictValue(date, min, max);\r\n } else if (!isInRange(date, min, max)) {\r\n date = null;\r\n }\r\n\r\n that._value = date;\r\n that.dateView.value(date);\r\n that.element.val(date ? kendo.toString(date, options.format, options.culture) : value);\r\n that._updateARIA(date);\r\n\r\n return date;\r\n },\r\n\r\n _wrapper: function() {\r\n var that = this,\r\n element = that.element,\r\n wrapper;\r\n\r\n wrapper = element.parents(\".k-datepicker\");\r\n\r\n if (!wrapper[0]) {\r\n wrapper = element.wrap(SPAN).parent().addClass(\"k-picker-wrap k-state-default\");\r\n wrapper = wrapper.wrap(SPAN).parent();\r\n }\r\n\r\n wrapper[0].style.cssText = element[0].style.cssText;\r\n element.css({\r\n width: \"100%\",\r\n height: element[0].style.height\r\n });\r\n\r\n that.wrapper = wrapper.addClass(\"k-widget k-datepicker k-header\")\r\n .addClass(element[0].className);\r\n\r\n that._inputWrapper = $(wrapper[0].firstChild);\r\n },\r\n\r\n _reset: function() {\r\n var that = this,\r\n element = that.element,\r\n formId = element.attr(\"form\"),\r\n form = formId ? $(\"#\" + formId) : element.closest(\"form\");\r\n\r\n if (form[0]) {\r\n that._resetHandler = function() {\r\n that.value(element[0].defaultValue);\r\n };\r\n\r\n that._form = form.on(\"reset\", that._resetHandler);\r\n }\r\n },\r\n\r\n _template: function() {\r\n this._ariaTemplate = template(this.options.ARIATemplate);\r\n },\r\n\r\n _updateARIA: function(date) {\r\n var cell;\r\n var that = this;\r\n var calendar = that.dateView.calendar;\r\n\r\n that.element.removeAttr(\"aria-activedescendant\");\r\n\r\n if (calendar) {\r\n cell = calendar._cell;\r\n cell.attr(\"aria-label\", that._ariaTemplate({ current: date || calendar.current() }));\r\n\r\n that.element.attr(\"aria-activedescendant\", cell.attr(\"id\"));\r\n }\r\n }\r\n });\r\n\r\n ui.plugin(DatePicker);\r\n\r\n})(window.kendo.jQuery);\r\n\r\nreturn window.kendo;\r\n\r\n}, typeof define == 'function' && define.amd ? define : function(_, f){ f(); });","/*\r\n* Kendo UI Complete v2014.1.318 (http://kendoui.com)\r\n* Copyright 2014 Telerik AD. All rights reserved.\r\n*\r\n* Kendo UI Complete commercial licenses may be obtained at\r\n* http://www.telerik.com/purchase/license-agreement/kendo-ui-complete\r\n* If you do not own a commercial license, this file shall be governed by the trial license terms.\r\n*\r\n* this file comes from v2014.1.416\r\n*/\r\n(function(f, define){\r\n define([ \"./kendo.core\", \"./kendo.userevents\" ], f);\r\n})(function(){\r\n\r\n(function ($, undefined) {\r\n var kendo = window.kendo,\r\n support = kendo.support,\r\n document = window.document,\r\n Class = kendo.Class,\r\n Widget = kendo.ui.Widget,\r\n Observable = kendo.Observable,\r\n UserEvents = kendo.UserEvents,\r\n proxy = $.proxy,\r\n extend = $.extend,\r\n getOffset = kendo.getOffset,\r\n draggables = {},\r\n dropTargets = {},\r\n dropAreas = {},\r\n lastDropTarget,\r\n elementUnderCursor = kendo.elementUnderCursor,\r\n KEYUP = \"keyup\",\r\n CHANGE = \"change\",\r\n\r\n // Draggable events\r\n DRAGSTART = \"dragstart\",\r\n HOLD = \"hold\",\r\n DRAG = \"drag\",\r\n DRAGEND = \"dragend\",\r\n DRAGCANCEL = \"dragcancel\",\r\n\r\n // DropTarget events\r\n DRAGENTER = \"dragenter\",\r\n DRAGLEAVE = \"dragleave\",\r\n DROP = \"drop\";\r\n\r\n function contains(parent, child) {\r\n try {\r\n return $.contains(parent, child) || parent == child;\r\n } catch (e) {\r\n return false;\r\n }\r\n }\r\n\r\n function numericCssPropery(element, property) {\r\n return parseInt(element.css(property), 10) || 0;\r\n }\r\n\r\n function within(value, range) {\r\n return Math.min(Math.max(value, range.min), range.max);\r\n }\r\n\r\n function containerBoundaries(container, element) {\r\n var offset = getOffset(container),\r\n minX = offset.left + numericCssPropery(container, \"borderLeftWidth\") + numericCssPropery(container, \"paddingLeft\"),\r\n minY = offset.top + numericCssPropery(container, \"borderTopWidth\") + numericCssPropery(container, \"paddingTop\"),\r\n maxX = minX + container.width() - element.outerWidth(true),\r\n maxY = minY + container.height() - element.outerHeight(true);\r\n\r\n return {\r\n x: { min: minX, max: maxX },\r\n y: { min: minY, max: maxY }\r\n };\r\n }\r\n\r\n function checkTarget(target, targets, areas) {\r\n var theTarget, theFilter, i = 0,\r\n targetLen = targets && targets.length,\r\n areaLen = areas && areas.length;\r\n\r\n while (target && target.parentNode) {\r\n for (i = 0; i < targetLen; i ++) {\r\n theTarget = targets[i];\r\n if (theTarget.element[0] === target) {\r\n return { target: theTarget, targetElement: target };\r\n }\r\n }\r\n\r\n for (i = 0; i < areaLen; i ++) {\r\n theFilter = areas[i];\r\n if (support.matchesSelector.call(target, theFilter.options.filter)) {\r\n return { target: theFilter, targetElement: target };\r\n }\r\n }\r\n\r\n target = target.parentNode;\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n var TapCapture = Observable.extend({\r\n init: function(element, options) {\r\n var that = this,\r\n domElement = element[0];\r\n\r\n that.capture = false;\r\n\r\n if (domElement.addEventListener) {\r\n $.each(kendo.eventMap.down.split(\" \"), function() {\r\n domElement.addEventListener(this, proxy(that._press, that), true);\r\n });\r\n $.each(kendo.eventMap.up.split(\" \"), function() {\r\n domElement.addEventListener(this, proxy(that._release, that), true);\r\n });\r\n } else {\r\n $.each(kendo.eventMap.down.split(\" \"), function() {\r\n domElement.attachEvent(this, proxy(that._press, that));\r\n });\r\n $.each(kendo.eventMap.up.split(\" \"), function() {\r\n domElement.attachEvent(this, proxy(that._release, that));\r\n });\r\n }\r\n\r\n Observable.fn.init.call(that);\r\n\r\n that.bind([\"press\", \"release\"], options || {});\r\n },\r\n\r\n captureNext: function() {\r\n this.capture = true;\r\n },\r\n\r\n cancelCapture: function() {\r\n this.capture = false;\r\n },\r\n\r\n _press: function(e) {\r\n var that = this;\r\n that.trigger(\"press\");\r\n if (that.capture) {\r\n e.preventDefault();\r\n }\r\n },\r\n\r\n _release: function(e) {\r\n var that = this;\r\n that.trigger(\"release\");\r\n\r\n if (that.capture) {\r\n e.preventDefault();\r\n that.cancelCapture();\r\n }\r\n }\r\n });\r\n\r\n var PaneDimension = Observable.extend({\r\n init: function(options) {\r\n var that = this;\r\n Observable.fn.init.call(that);\r\n\r\n that.forcedEnabled = false;\r\n\r\n $.extend(that, options);\r\n\r\n that.scale = 1;\r\n\r\n if (that.horizontal) {\r\n that.measure = \"offsetWidth\";\r\n that.scrollSize = \"scrollWidth\";\r\n that.axis = \"x\";\r\n } else {\r\n that.measure = \"offsetHeight\";\r\n that.scrollSize = \"scrollHeight\";\r\n that.axis = \"y\";\r\n }\r\n },\r\n\r\n makeVirtual: function() {\r\n $.extend(this, {\r\n virtual: true,\r\n forcedEnabled: true,\r\n _virtualMin: 0,\r\n _virtualMax: 0\r\n });\r\n },\r\n\r\n virtualSize: function(min, max) {\r\n if (this._virtualMin !== min || this._virtualMax !== max) {\r\n this._virtualMin = min;\r\n this._virtualMax = max;\r\n this.update();\r\n }\r\n },\r\n\r\n outOfBounds: function(offset) {\r\n return offset > this.max || offset < this.min;\r\n },\r\n\r\n forceEnabled: function() {\r\n this.forcedEnabled = true;\r\n },\r\n\r\n getSize: function() {\r\n return this.container[0][this.measure];\r\n },\r\n\r\n getTotal: function() {\r\n return this.element[0][this.scrollSize];\r\n },\r\n\r\n rescale: function(scale) {\r\n this.scale = scale;\r\n },\r\n\r\n update: function(silent) {\r\n var that = this,\r\n total = that.virtual ? that._virtualMax : that.getTotal(),\r\n scaledTotal = total * that.scale,\r\n size = that.getSize();\r\n\r\n that.max = that.virtual ? -that._virtualMin : 0;\r\n that.size = size;\r\n that.total = scaledTotal;\r\n that.min = Math.min(that.max, size - scaledTotal);\r\n that.minScale = size / total;\r\n that.centerOffset = (scaledTotal - size) / 2;\r\n\r\n that.enabled = that.forcedEnabled || (scaledTotal > size);\r\n\r\n if (!silent) {\r\n that.trigger(CHANGE, that);\r\n }\r\n }\r\n });\r\n\r\n var PaneDimensions = Observable.extend({\r\n init: function(options) {\r\n var that = this;\r\n\r\n Observable.fn.init.call(that);\r\n\r\n that.x = new PaneDimension(extend({horizontal: true}, options));\r\n that.y = new PaneDimension(extend({horizontal: false}, options));\r\n that.container = options.container;\r\n that.forcedMinScale = options.minScale;\r\n that.maxScale = options.maxScale || 100;\r\n\r\n that.bind(CHANGE, options);\r\n },\r\n\r\n rescale: function(newScale) {\r\n this.x.rescale(newScale);\r\n this.y.rescale(newScale);\r\n this.refresh();\r\n },\r\n\r\n centerCoordinates: function() {\r\n return { x: Math.min(0, -this.x.centerOffset), y: Math.min(0, -this.y.centerOffset) };\r\n },\r\n\r\n refresh: function() {\r\n var that = this;\r\n that.x.update();\r\n that.y.update();\r\n that.enabled = that.x.enabled || that.y.enabled;\r\n that.minScale = that.forcedMinScale || Math.min(that.x.minScale, that.y.minScale);\r\n that.fitScale = Math.max(that.x.minScale, that.y.minScale);\r\n that.trigger(CHANGE);\r\n }\r\n });\r\n\r\n var PaneAxis = Observable.extend({\r\n init: function(options) {\r\n var that = this;\r\n extend(that, options);\r\n Observable.fn.init.call(that);\r\n },\r\n\r\n outOfBounds: function() {\r\n return this.dimension.outOfBounds(this.movable[this.axis]);\r\n },\r\n dragMove: function(delta) {\r\n var that = this,\r\n dimension = that.dimension,\r\n axis = that.axis,\r\n movable = that.movable,\r\n position = movable[axis] + delta;\r\n\r\n if (!dimension.enabled) {\r\n return;\r\n }\r\n\r\n if ((position < dimension.min && delta < 0) || (position > dimension.max && delta > 0)) {\r\n delta *= that.resistance;\r\n }\r\n\r\n movable.translateAxis(axis, delta);\r\n that.trigger(CHANGE, that);\r\n }\r\n });\r\n\r\n var Pane = Class.extend({\r\n\r\n init: function(options) {\r\n var that = this,\r\n x,\r\n y,\r\n resistance,\r\n movable;\r\n\r\n extend(that, {elastic: true}, options);\r\n\r\n resistance = that.elastic ? 0.5 : 0;\r\n movable = that.movable;\r\n\r\n that.x = x = new PaneAxis({\r\n axis: \"x\",\r\n dimension: that.dimensions.x,\r\n resistance: resistance,\r\n movable: movable\r\n });\r\n\r\n that.y = y = new PaneAxis({\r\n axis: \"y\",\r\n dimension: that.dimensions.y,\r\n resistance: resistance,\r\n movable: movable\r\n });\r\n\r\n that.userEvents.bind([\"move\", \"end\", \"gesturestart\", \"gesturechange\"], {\r\n gesturestart: function(e) {\r\n that.gesture = e;\r\n that.offset = that.dimensions.container.offset();\r\n },\r\n\r\n gesturechange: function(e) {\r\n var previousGesture = that.gesture,\r\n previousCenter = previousGesture.center,\r\n\r\n center = e.center,\r\n\r\n scaleDelta = e.distance / previousGesture.distance,\r\n\r\n minScale = that.dimensions.minScale,\r\n maxScale = that.dimensions.maxScale,\r\n coordinates;\r\n\r\n if (movable.scale <= minScale && scaleDelta < 1) {\r\n // 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 scaleDelta += (1 - scaleDelta) * 0.8;\r\n }\r\n\r\n if (movable.scale * scaleDelta >= maxScale) {\r\n scaleDelta = maxScale / movable.scale;\r\n }\r\n\r\n var offsetX = movable.x + that.offset.left,\r\n offsetY = movable.y + that.offset.top;\r\n\r\n coordinates = {\r\n x: (offsetX - previousCenter.x) * scaleDelta + center.x - offsetX,\r\n y: (offsetY - previousCenter.y) * scaleDelta + center.y - offsetY\r\n };\r\n\r\n movable.scaleWith(scaleDelta);\r\n\r\n x.dragMove(coordinates.x);\r\n y.dragMove(coordinates.y);\r\n\r\n that.dimensions.rescale(movable.scale);\r\n that.gesture = e;\r\n e.preventDefault();\r\n },\r\n\r\n move: function(e) {\r\n if (e.event.target.tagName.match(/textarea|input/i)) {\r\n return;\r\n }\r\n\r\n if (x.dimension.enabled || y.dimension.enabled) {\r\n x.dragMove(e.x.delta);\r\n y.dragMove(e.y.delta);\r\n e.preventDefault();\r\n } else {\r\n e.touch.skip();\r\n }\r\n },\r\n\r\n end: function(e) {\r\n e.preventDefault();\r\n }\r\n });\r\n }\r\n });\r\n\r\n var TRANSFORM_STYLE = support.transitions.prefix + \"Transform\",\r\n translate;\r\n\r\n\r\n if (support.hasHW3D) {\r\n translate = function(x, y, scale) {\r\n return \"translate3d(\" + x + \"px,\" + y +\"px,0) scale(\" + scale + \")\";\r\n };\r\n } else {\r\n translate = function(x, y, scale) {\r\n return \"translate(\" + x + \"px,\" + y +\"px) scale(\" + scale + \")\";\r\n };\r\n }\r\n\r\n var Movable = Observable.extend({\r\n init: function(element) {\r\n var that = this;\r\n\r\n Observable.fn.init.call(that);\r\n\r\n that.element = $(element);\r\n that.element[0].style.webkitTransformOrigin = \"left top\";\r\n that.x = 0;\r\n that.y = 0;\r\n that.scale = 1;\r\n that._saveCoordinates(translate(that.x, that.y, that.scale));\r\n },\r\n\r\n translateAxis: function(axis, by) {\r\n this[axis] += by;\r\n this.refresh();\r\n },\r\n\r\n scaleTo: function(scale) {\r\n this.scale = scale;\r\n this.refresh();\r\n },\r\n\r\n scaleWith: function(scaleDelta) {\r\n this.scale *= scaleDelta;\r\n this.refresh();\r\n },\r\n\r\n translate: function(coordinates) {\r\n this.x += coordinates.x;\r\n this.y += coordinates.y;\r\n this.refresh();\r\n },\r\n\r\n moveAxis: function(axis, value) {\r\n this[axis] = value;\r\n this.refresh();\r\n },\r\n\r\n moveTo: function(coordinates) {\r\n extend(this, coordinates);\r\n this.refresh();\r\n },\r\n\r\n refresh: function() {\r\n var that = this,\r\n x = that.x,\r\n y = that.y,\r\n newCoordinates;\r\n\r\n if (that.round) {\r\n x = Math.round(x);\r\n y = Math.round(y);\r\n }\r\n\r\n newCoordinates = translate(x, y, that.scale);\r\n\r\n if (newCoordinates != that.coordinates) {\r\n if (kendo.support.browser.msie && kendo.support.browser.version < 10) {\r\n that.element[0].style.position = \"absolute\";\r\n that.element[0].style.left = that.x + \"px\";\r\n that.element[0].style.top = that.y + \"px\";\r\n } else {\r\n that.element[0].style[TRANSFORM_STYLE] = newCoordinates;\r\n }\r\n that._saveCoordinates(newCoordinates);\r\n that.trigger(CHANGE);\r\n }\r\n },\r\n\r\n _saveCoordinates: function(coordinates) {\r\n this.coordinates = coordinates;\r\n }\r\n });\r\n\r\n var DropTarget = Widget.extend({\r\n init: function(element, options) {\r\n var that = this;\r\n\r\n Widget.fn.init.call(that, element, options);\r\n\r\n var group = that.options.group;\r\n\r\n if (!(group in dropTargets)) {\r\n dropTargets[group] = [ that ];\r\n } else {\r\n dropTargets[group].push( that );\r\n }\r\n },\r\n\r\n events: [\r\n DRAGENTER,\r\n DRAGLEAVE,\r\n DROP\r\n ],\r\n\r\n options: {\r\n name: \"DropTarget\",\r\n group: \"default\"\r\n },\r\n\r\n destroy: function() {\r\n var groupName = this.options.group,\r\n group = dropTargets[groupName] || dropAreas[groupName],\r\n i;\r\n\r\n if (group.length > 1) {\r\n Widget.fn.destroy.call(this);\r\n\r\n for (i = 0; i < group.length; i++) {\r\n if (group[i] == this) {\r\n group.splice(i, 1);\r\n break;\r\n }\r\n }\r\n } else {\r\n DropTarget.destroyGroup(groupName);\r\n }\r\n },\r\n\r\n _trigger: function(eventName, e) {\r\n var that = this,\r\n draggable = draggables[that.options.group];\r\n\r\n if (draggable) {\r\n return that.trigger(eventName, extend({}, e.event, {\r\n draggable: draggable,\r\n dropTarget: e.dropTarget\r\n }));\r\n }\r\n },\r\n\r\n _over: function(e) {\r\n this._trigger(DRAGENTER, e);\r\n },\r\n\r\n _out: function(e) {\r\n this._trigger(DRAGLEAVE, e);\r\n },\r\n\r\n _drop: function(e) {\r\n var that = this,\r\n draggable = draggables[that.options.group];\r\n\r\n if (draggable) {\r\n draggable.dropped = !that._trigger(DROP, e);\r\n }\r\n }\r\n });\r\n\r\n DropTarget.destroyGroup = function(groupName) {\r\n var group = dropTargets[groupName] || dropAreas[groupName],\r\n i;\r\n\r\n if (group) {\r\n for (i = 0; i < group.length; i++) {\r\n Widget.fn.destroy.call(group[i]);\r\n }\r\n\r\n group.length = 0;\r\n delete dropTargets[groupName];\r\n delete dropAreas[groupName];\r\n }\r\n };\r\n\r\n DropTarget._cache = dropTargets;\r\n\r\n var DropTargetArea = DropTarget.extend({\r\n init: function(element, options) {\r\n var that = this;\r\n\r\n Widget.fn.init.call(that, element, options);\r\n\r\n var group = that.options.group;\r\n\r\n if (!(group in dropAreas)) {\r\n dropAreas[group] = [ that ];\r\n } else {\r\n dropAreas[group].push( that );\r\n }\r\n },\r\n\r\n options: {\r\n name: \"DropTargetArea\",\r\n group: \"default\",\r\n filter: null\r\n }\r\n });\r\n\r\n var Draggable = Widget.extend({\r\n init: function (element, options) {\r\n var that = this;\r\n\r\n Widget.fn.init.call(that, element, options);\r\n\r\n that._activated = false;\r\n\r\n that.userEvents = new UserEvents(that.element, {\r\n global: true,\r\n allowSelection: true,\r\n stopPropagation: true,\r\n filter: that.options.filter,\r\n threshold: that.options.distance,\r\n start: proxy(that._start, that),\r\n hold: proxy(that._hold, that),\r\n move: proxy(that._drag, that),\r\n end: proxy(that._end, that),\r\n cancel: proxy(that._cancel, that),\r\n select: proxy(that._select, that)\r\n });\r\n\r\n that._afterEndHandler = proxy(that._afterEnd, that);\r\n that.captureEscape = function(e) {\r\n if (e.keyCode === kendo.keys.ESC) {\r\n that._trigger(DRAGCANCEL, {event: e});\r\n that.userEvents.cancel();\r\n }\r\n };\r\n },\r\n\r\n events: [\r\n HOLD,\r\n DRAGSTART,\r\n DRAG,\r\n DRAGEND,\r\n DRAGCANCEL\r\n ],\r\n\r\n options: {\r\n name: \"Draggable\",\r\n distance: 5,\r\n group: \"default\",\r\n cursorOffset: null,\r\n axis: null,\r\n container: null,\r\n filter: null,\r\n ignore: null,\r\n holdToDrag: false,\r\n dropped: false\r\n },\r\n\r\n cancelHold: function() {\r\n this._activated = false;\r\n },\r\n\r\n _updateHint: function(e) {\r\n var that = this,\r\n coordinates,\r\n options = that.options,\r\n boundaries = that.boundaries,\r\n axis = options.axis,\r\n cursorOffset = that.options.cursorOffset;\r\n\r\n if (cursorOffset) {\r\n coordinates = { left: e.x.location + cursorOffset.left, top: e.y.location + cursorOffset.top };\r\n } else {\r\n that.hintOffset.left += e.x.delta;\r\n that.hintOffset.top += e.y.delta;\r\n coordinates = $.extend({}, that.hintOffset);\r\n }\r\n\r\n if (boundaries) {\r\n coordinates.top = within(coordinates.top, boundaries.y);\r\n coordinates.left = within(coordinates.left, boundaries.x);\r\n }\r\n\r\n if (axis === \"x\") {\r\n delete coordinates.top;\r\n } else if (axis === \"y\") {\r\n delete coordinates.left;\r\n }\r\n\r\n that.hint.css(coordinates);\r\n },\r\n\r\n _shouldIgnoreTarget: function(target) {\r\n var ignoreSelector = this.options.ignore;\r\n return ignoreSelector && $(target).is(ignoreSelector);\r\n },\r\n _select: function(e) {\r\n if (!this._shouldIgnoreTarget(e.event.target)) {\r\n e.preventDefault();\r\n }\r\n },\r\n _start: function(e) {\r\n var that = this,\r\n options = that.options,\r\n container = options.container,\r\n hint = options.hint;\r\n\r\n if (this._shouldIgnoreTarget(e.touch.initialTouch) || (options.holdToDrag && !that._activated)) {\r\n that.userEvents.cancel();\r\n return;\r\n }\r\n\r\n that.currentTarget = e.target;\r\n that.currentTargetOffset = getOffset(that.currentTarget);\r\n\r\n if (hint) {\r\n if (that.hint) {\r\n that.hint.stop(true, true).remove();\r\n }\r\n\r\n that.hint = kendo.isFunction(hint) ? $(hint.call(that, that.currentTarget)) : hint;\r\n\r\n var offset = getOffset(that.currentTarget);\r\n that.hintOffset = offset;\r\n\r\n that.hint.css( {\r\n position: \"absolute\",\r\n zIndex: 20000, // the Window's z-index is 10000 and can be raised because of z-stacking\r\n left: offset.left,\r\n top: offset.top\r\n })\r\n .appendTo(document.body);\r\n }\r\n\r\n draggables[options.group] = that;\r\n\r\n that.dropped = false;\r\n\r\n if (container) {\r\n that.boundaries = containerBoundaries(container, that.hint);\r\n }\r\n\r\n if (that._trigger(DRAGSTART, e)) {\r\n that.userEvents.cancel();\r\n that._afterEnd();\r\n }\r\n\r\n $(document).on(KEYUP, that.captureEscape);\r\n },\r\n\r\n _hold: function(e) {\r\n this.currentTarget = e.target;\r\n\r\n if (this._trigger(HOLD, e)) {\r\n this.userEvents.cancel();\r\n } else {\r\n this._activated = true;\r\n }\r\n },\r\n\r\n _drag: function(e) {\r\n var that = this;\r\n\r\n e.preventDefault();\r\n\r\n that._withDropTarget(e, function(target, targetElement) {\r\n if (!target) {\r\n if (lastDropTarget) {\r\n lastDropTarget._trigger(DRAGLEAVE, extend(e, { dropTarget: $(lastDropTarget.targetElement) }));\r\n lastDropTarget = null;\r\n }\r\n return;\r\n }\r\n\r\n if (lastDropTarget) {\r\n if (targetElement === lastDropTarget.targetElement) {\r\n return;\r\n }\r\n\r\n lastDropTarget._trigger(DRAGLEAVE, extend(e, { dropTarget: $(lastDropTarget.targetElement) }));\r\n }\r\n\r\n target._trigger(DRAGENTER, extend(e, { dropTarget: $(targetElement) }));\r\n lastDropTarget = extend(target, { targetElement: targetElement });\r\n });\r\n\r\n that._trigger(DRAG, e);\r\n\r\n if (that.hint) {\r\n that._updateHint(e);\r\n }\r\n },\r\n\r\n _end: function(e) {\r\n var that = this;\r\n\r\n that._withDropTarget(e, function(target, targetElement) {\r\n if (target) {\r\n target._drop(extend({}, e, { dropTarget: $(targetElement) }));\r\n lastDropTarget = null;\r\n }\r\n });\r\n\r\n that._trigger(DRAGEND, e);\r\n that._cancel(e.event);\r\n },\r\n\r\n _cancel: function() {\r\n var that = this;\r\n\r\n that._activated = false;\r\n\r\n if (that.hint && !that.dropped) {\r\n setTimeout(function() {\r\n that.hint.stop(true, true).animate(that.currentTargetOffset, \"fast\", that._afterEndHandler);\r\n }, 0);\r\n\r\n } else {\r\n that._afterEnd();\r\n }\r\n },\r\n\r\n _trigger: function(eventName, e) {\r\n var that = this;\r\n\r\n return that.trigger(\r\n eventName, extend(\r\n {},\r\n e.event,\r\n {\r\n x: e.x,\r\n y: e.y,\r\n currentTarget: that.currentTarget,\r\n dropTarget: e.dropTarget\r\n }\r\n ));\r\n },\r\n\r\n _withDropTarget: function(e, callback) {\r\n var that = this,\r\n target, result,\r\n options = that.options,\r\n targets = dropTargets[options.group],\r\n areas = dropAreas[options.group];\r\n\r\n if (targets && targets.length || areas && areas.length) {\r\n\r\n target = elementUnderCursor(e);\r\n\r\n if (that.hint && contains(that.hint[0], target)) {\r\n that.hint.hide();\r\n target = elementUnderCursor(e);\r\n // IE8 does not return the element in iframe from first attempt\r\n if (!target) {\r\n target = elementUnderCursor(e);\r\n }\r\n that.hint.show();\r\n }\r\n\r\n result = checkTarget(target, targets, areas);\r\n\r\n if (result) {\r\n callback(result.target, result.targetElement);\r\n } else {\r\n callback();\r\n }\r\n }\r\n },\r\n\r\n destroy: function() {\r\n var that = this;\r\n\r\n Widget.fn.destroy.call(that);\r\n\r\n that._afterEnd();\r\n\r\n that.userEvents.destroy();\r\n\r\n that.currentTarget = null;\r\n },\r\n\r\n _afterEnd: function() {\r\n var that = this;\r\n\r\n if (that.hint) {\r\n that.hint.remove();\r\n }\r\n\r\n delete draggables[that.options.group];\r\n\r\n that.trigger(\"destroy\");\r\n $(document).off(KEYUP, that.captureEscape);\r\n }\r\n });\r\n\r\n kendo.ui.plugin(DropTarget);\r\n kendo.ui.plugin(DropTargetArea);\r\n kendo.ui.plugin(Draggable);\r\n kendo.TapCapture = TapCapture;\r\n kendo.containerBoundaries = containerBoundaries;\r\n\r\n extend(kendo.ui, {\r\n Pane: Pane,\r\n PaneDimensions: PaneDimensions,\r\n Movable: Movable\r\n });\r\n\r\n })(window.kendo.jQuery);\r\n\r\nreturn window.kendo;\r\n\r\n}, typeof define == 'function' && define.amd ? define : function(_, f){ f(); });","/*\r\n* Kendo UI Complete v2014.1.318 (http://kendoui.com)\r\n* Copyright 2014 Telerik AD. All rights reserved.\r\n*\r\n* Kendo UI Complete commercial licenses may be obtained at\r\n* http://www.telerik.com/purchase/license-agreement/kendo-ui-complete\r\n* If you do not own a commercial license, this file shall be governed by the trial license terms.\r\n*/\r\n(function(f, define){\r\n define([ \"./kendo.datepicker\", \"./kendo.numerictextbox\", \"./kendo.validator\", \"./kendo.binder\" ], f);\r\n})(function(){\r\n\r\n/* jshint eqnull: true */\r\n(function($, undefined) {\r\n var kendo = window.kendo,\r\n ui = kendo.ui,\r\n Widget = ui.Widget,\r\n extend = $.extend,\r\n oldIE = kendo.support.browser.msie && kendo.support.browser.version < 9,\r\n isFunction = kendo.isFunction,\r\n isPlainObject = $.isPlainObject,\r\n inArray = $.inArray,\r\n nameSpecialCharRegExp = /(\"|\\%|'|\\[|\\]|\\$|\\.|\\,|\\:|\\;|\\+|\\*|\\&|\\!|\\#|\\(|\\)|<|>|\\=|\\?|\\@|\\^|\\{|\\}|\\~|\\/|\\||`)/g,\r\n ERRORTEMPLATE = '
    ' +\r\n '#=message#
    ',\r\n CHANGE = \"change\";\r\n\r\n var specialRules = [\"url\", \"email\", \"number\", \"date\", \"boolean\"];\r\n\r\n function fieldType(field) {\r\n field = field != null ? field : \"\";\r\n return field.type || $.type(field) || \"string\";\r\n }\r\n\r\n function convertToValueBinding(container) {\r\n container.find(\":input:not(:button, [\" + kendo.attr(\"role\") + \"=upload], [\" + kendo.attr(\"skip\") + \"], [type=file]), select\").each(function() {\r\n var bindAttr = kendo.attr(\"bind\"),\r\n binding = this.getAttribute(bindAttr) || \"\",\r\n bindingName = this.type === \"checkbox\" || this.type === \"radio\" ? \"checked:\" : \"value:\",\r\n fieldName = this.name;\r\n\r\n if (binding.indexOf(bindingName) === -1 && fieldName) {\r\n binding += (binding.length ? \",\" : \"\") + bindingName + fieldName;\r\n\r\n $(this).attr(bindAttr, binding);\r\n }\r\n });\r\n }\r\n\r\n function createAttributes(options) {\r\n var field = (options.model.fields || options.model)[options.field],\r\n type = fieldType(field),\r\n validation = field ? field.validation : {},\r\n ruleName,\r\n DATATYPE = kendo.attr(\"type\"),\r\n BINDING = kendo.attr(\"bind\"),\r\n rule,\r\n attr = {\r\n name: options.field\r\n };\r\n\r\n for (ruleName in validation) {\r\n rule = validation[ruleName];\r\n\r\n if (inArray(ruleName, specialRules) >= 0) {\r\n attr[DATATYPE] = ruleName;\r\n } else if (!isFunction(rule)) {\r\n attr[ruleName] = isPlainObject(rule) ? rule.value || ruleName : rule;\r\n }\r\n\r\n attr[kendo.attr(ruleName + \"-msg\")] = rule.message;\r\n }\r\n\r\n if (inArray(type, specialRules) >= 0) {\r\n attr[DATATYPE] = type;\r\n }\r\n\r\n attr[BINDING] = (type === \"boolean\" ? \"checked:\" : \"value:\") + options.field;\r\n\r\n return attr;\r\n }\r\n\r\n function convertItems(items) {\r\n var idx,\r\n length,\r\n item,\r\n value,\r\n text,\r\n result;\r\n\r\n if (items && items.length) {\r\n result = [];\r\n for (idx = 0, length = items.length; idx < length; idx++) {\r\n item = items[idx];\r\n text = item.text || item.value || item;\r\n value = item.value == null ? (item.text || item) : item.value;\r\n\r\n result[idx] = { text: text, value: value };\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n var editors = {\r\n \"number\": function(container, options) {\r\n var attr = createAttributes(options);\r\n $('').attr(attr).appendTo(container).kendoNumericTextBox({ format: options.format });\r\n $('').hide().appendTo(container);\r\n },\r\n \"date\": function(container, options) {\r\n var attr = createAttributes(options),\r\n format = options.format;\r\n\r\n if (format) {\r\n format = kendo._extractFormat(format);\r\n }\r\n\r\n attr[kendo.attr(\"format\")] = format;\r\n\r\n $('').attr(attr).appendTo(container).kendoDatePicker({ format: options.format });\r\n $('').hide().appendTo(container);\r\n },\r\n \"string\": function(container, options) {\r\n var attr = createAttributes(options);\r\n\r\n $('').attr(attr).appendTo(container);\r\n },\r\n \"boolean\": function(container, options) {\r\n var attr = createAttributes(options);\r\n $('').attr(attr).appendTo(container);\r\n },\r\n \"values\": function(container, options) {\r\n var attr = createAttributes(options);\r\n $('').appendTo(that._innerWrapper);\r\n }\r\n\r\n that.element.removeAttr(\"accesskey\");\r\n that._focused = that.input = input.attr({\r\n \"accesskey\": accessKey,\r\n \"role\": \"listbox\",\r\n \"aria-expanded\": false\r\n });\r\n },\r\n\r\n _tagList: function() {\r\n var that = this,\r\n tagList = that._innerWrapper.children(\"ul\");\r\n\r\n if (!tagList[0]) {\r\n tagList = $('
      ').appendTo(that._innerWrapper);\r\n }\r\n\r\n that.tagList = tagList;\r\n },\r\n\r\n _loader: function() {\r\n this._loading = $('').insertAfter(this.input);\r\n },\r\n\r\n _textContainer: function() {\r\n var computedStyles = kendo.getComputedStyles(this.input[0], styles);\r\n\r\n computedStyles.position = \"absolute\";\r\n computedStyles.visibility = \"hidden\";\r\n computedStyles.top = -3333;\r\n computedStyles.left = -3333;\r\n\r\n this._span = $(\"\").css(computedStyles).appendTo(this.wrapper);\r\n },\r\n\r\n _wrapper: function() {\r\n var that = this,\r\n element = that.element,\r\n wrapper = element.parent(\"span.k-multiselect\");\r\n\r\n if (!wrapper[0]) {\r\n wrapper = element.wrap('
      ').parent();\r\n wrapper[0].style.cssText = element[0].style.cssText;\r\n\r\n $('
      ').insertBefore(element);\r\n }\r\n\r\n that.wrapper = wrapper.addClass(element[0].className).css(\"display\", \"\");\r\n that._innerWrapper = $(wrapper[0].firstChild);\r\n }\r\n });\r\n\r\n function compare(a, b) {\r\n var length;\r\n\r\n if ((a === null && b !== null) || (a !== null && b === null)) {\r\n return false;\r\n }\r\n\r\n length = a.length;\r\n if (length !== b.length) {\r\n return false;\r\n }\r\n\r\n while (length--) {\r\n if (a[length] !== b[length]) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n function first(ul) {\r\n var item = ul.firstChild;\r\n\r\n if (item && item.style.display === \"none\") {\r\n item = sibling(item, NEXT);\r\n }\r\n\r\n if (item) {\r\n return $(item);\r\n }\r\n\r\n return item;\r\n }\r\n\r\n function last(ul) {\r\n var item = ul.lastChild;\r\n\r\n if (item && item.style.display === \"none\") {\r\n item = sibling(item, PREV);\r\n }\r\n\r\n if (item) {\r\n return $(item);\r\n }\r\n\r\n return item;\r\n }\r\n\r\n function sibling(item, direction) {\r\n item = item[direction];\r\n\r\n if (item && item.style.display === \"none\") {\r\n item = sibling(item, direction);\r\n }\r\n\r\n return item;\r\n }\r\n\r\n ui.plugin(MultiSelect);\r\n\r\n})(window.kendo.jQuery);\r\n\r\nreturn window.kendo;\r\n\r\n}, typeof define == 'function' && define.amd ? define : function(_, f){ f(); });","/*\r\n* Kendo UI Complete v2014.1.318 (http://kendoui.com)\r\n* Copyright 2014 Telerik AD. All rights reserved.\r\n*\r\n* Kendo UI Complete commercial licenses may be obtained at\r\n* http://www.telerik.com/purchase/license-agreement/kendo-ui-complete\r\n* If you do not own a commercial license, this file shall be governed by the trial license terms.\r\n*/\r\n(function(f, define){\r\n define([ \"./kendo.core\", \"./kendo.userevents\" ], f);\r\n})(function(){\r\n\r\n(function($, undefined) {\r\n var kendo = window.kendo,\r\n caret = kendo.caret,\r\n keys = kendo.keys,\r\n ui = kendo.ui,\r\n Widget = ui.Widget,\r\n activeElement = kendo._activeElement,\r\n extractFormat = kendo._extractFormat,\r\n parse = kendo.parseFloat,\r\n placeholderSupported = kendo.support.placeholder,\r\n getCulture = kendo.getCulture,\r\n round = kendo._round,\r\n CHANGE = \"change\",\r\n DISABLED = \"disabled\",\r\n READONLY = \"readonly\",\r\n INPUT = \"k-input\",\r\n SPIN = \"spin\",\r\n ns = \".kendoNumericTextBox\",\r\n TOUCHEND = \"touchend\",\r\n MOUSELEAVE = \"mouseleave\" + ns,\r\n HOVEREVENTS = \"mouseenter\" + ns + \" \" + MOUSELEAVE,\r\n DEFAULT = \"k-state-default\",\r\n FOCUSED = \"k-state-focused\",\r\n HOVER = \"k-state-hover\",\r\n FOCUS = \"focus\",\r\n POINT = \".\",\r\n SELECTED = \"k-state-selected\",\r\n STATEDISABLED = \"k-state-disabled\",\r\n ARIA_DISABLED = \"aria-disabled\",\r\n ARIA_READONLY = \"aria-readonly\",\r\n INTEGER_REGEXP = /^(-)?(\\d*)$/,\r\n NULL = null,\r\n proxy = $.proxy;\r\n\r\n var NumericTextBox = Widget.extend({\r\n init: function(element, options) {\r\n var that = this,\r\n isStep = options && options.step !== undefined,\r\n min, max, step, value, disabled;\r\n\r\n Widget.fn.init.call(that, element, options);\r\n\r\n options = that.options;\r\n element = that.element\r\n .on(\"blur\" + ns, proxy(that._focusout, that))\r\n .attr(\"role\", \"spinbutton\");\r\n\r\n options.placeholder = options.placeholder || element.attr(\"placeholder\");\r\n\r\n that._reset();\r\n that._wrapper();\r\n that._arrows();\r\n that._input();\r\n\r\n if (!kendo.support.mobileOS) {\r\n that._text.on(FOCUS + ns, proxy(that._click, that));\r\n } else {\r\n that._text.on(TOUCHEND + ns + \" \" + FOCUS + ns, function(e) {\r\n that._toggleText(false);\r\n if (e.type === FOCUS) {\r\n element.focus();\r\n }\r\n });\r\n }\r\n\r\n min = that.min(element.attr(\"min\"));\r\n max = that.max(element.attr(\"max\"));\r\n step = that._parse(element.attr(\"step\"));\r\n\r\n if (options.min === NULL && min !== NULL) {\r\n options.min = min;\r\n }\r\n\r\n if (options.max === NULL && max !== NULL) {\r\n options.max = max;\r\n }\r\n\r\n if (!isStep && step !== NULL) {\r\n options.step = step;\r\n }\r\n\r\n element.attr(\"aria-valuemin\", options.min)\r\n .attr(\"aria-valuemax\", options.max);\r\n\r\n options.format = extractFormat(options.format);\r\n\r\n value = options.value;\r\n that.value(value !== NULL ? value : element.val());\r\n\r\n disabled = element.is(\"[disabled]\");\r\n if (disabled) {\r\n that.enable(false);\r\n } else {\r\n that.readonly(element.is(\"[readonly]\"));\r\n }\r\n\r\n kendo.notify(that);\r\n },\r\n\r\n options: {\r\n name: \"NumericTextBox\",\r\n decimals: NULL,\r\n min: NULL,\r\n max: NULL,\r\n value: NULL,\r\n step: 1,\r\n culture: \"\",\r\n format: \"n\",\r\n spinners: true,\r\n placeholder: \"\",\r\n upArrowText: \"Increase value\",\r\n downArrowText: \"Decrease value\"\r\n },\r\n events: [\r\n CHANGE,\r\n SPIN\r\n ],\r\n\r\n _editable: function(options) {\r\n var that = this,\r\n element = that.element,\r\n disable = options.disable,\r\n readonly = options.readonly,\r\n text = that._text.add(element),\r\n wrapper = that._inputWrapper.off(HOVEREVENTS);\r\n\r\n that._toggleText(true);\r\n\r\n that._upArrowEventHandler.unbind(\"press\");\r\n that._downArrowEventHandler.unbind(\"press\");\r\n element.off(\"keydown\" + ns).off(\"keypress\" + ns).off(\"paste\" + ns);\r\n\r\n if (!readonly && !disable) {\r\n wrapper\r\n .addClass(DEFAULT)\r\n .removeClass(STATEDISABLED)\r\n .on(HOVEREVENTS, that._toggleHover);\r\n\r\n text.removeAttr(DISABLED)\r\n .removeAttr(READONLY)\r\n .attr(ARIA_DISABLED, false)\r\n .attr(ARIA_READONLY, false);\r\n\r\n that._upArrowEventHandler.bind(\"press\", function(e) {\r\n e.preventDefault();\r\n that._spin(1);\r\n that._upArrow.addClass(SELECTED);\r\n });\r\n\r\n that._downArrowEventHandler.bind(\"press\", function(e) {\r\n e.preventDefault();\r\n that._spin(-1);\r\n that._downArrow.addClass(SELECTED);\r\n });\r\n\r\n that.element\r\n .on(\"keydown\" + ns, proxy(that._keydown, that))\r\n .on(\"keypress\" + ns, proxy(that._keypress, that))\r\n .on(\"paste\" + ns, proxy(that._paste, that));\r\n\r\n } else {\r\n wrapper\r\n .addClass(disable ? STATEDISABLED : DEFAULT)\r\n .removeClass(disable ? DEFAULT : STATEDISABLED);\r\n\r\n text.attr(DISABLED, disable)\r\n .attr(READONLY, readonly)\r\n .attr(ARIA_DISABLED, disable)\r\n .attr(ARIA_READONLY, readonly);\r\n }\r\n },\r\n\r\n readonly: function(readonly) {\r\n this._editable({\r\n readonly: readonly === undefined ? true : readonly,\r\n disable: false\r\n });\r\n },\r\n\r\n enable: function(enable) {\r\n this._editable({\r\n readonly: false,\r\n disable: !(enable = enable === undefined ? true : enable)\r\n });\r\n },\r\n\r\n destroy: function() {\r\n var that = this;\r\n\r\n that.element\r\n .add(that._text)\r\n .add(that._upArrow)\r\n .add(that._downArrow)\r\n .add(that._inputWrapper)\r\n .off(ns);\r\n\r\n that._upArrowEventHandler.destroy();\r\n that._downArrowEventHandler.destroy();\r\n\r\n if (that._form) {\r\n that._form.off(\"reset\", that._resetHandler);\r\n }\r\n\r\n Widget.fn.destroy.call(that);\r\n },\r\n\r\n min: function(value) {\r\n return this._option(\"min\", value);\r\n },\r\n\r\n max: function(value) {\r\n return this._option(\"max\", value);\r\n },\r\n\r\n step: function(value) {\r\n return this._option(\"step\", value);\r\n },\r\n\r\n value: function(value) {\r\n var that = this, adjusted;\r\n\r\n if (value === undefined) {\r\n return that._value;\r\n }\r\n\r\n value = that._parse(value);\r\n adjusted = that._adjust(value);\r\n\r\n if (value !== adjusted) {\r\n return;\r\n }\r\n\r\n that._update(value);\r\n that._old = that._value;\r\n },\r\n\r\n focus: function() {\r\n this._focusin();\r\n },\r\n\r\n _adjust: function(value) {\r\n var that = this,\r\n options = that.options,\r\n min = options.min,\r\n max = options.max;\r\n\r\n if (value === NULL) {\r\n return value;\r\n }\r\n\r\n if (min !== NULL && value < min) {\r\n value = min;\r\n } else if (max !== NULL && value > max) {\r\n value = max;\r\n }\r\n\r\n return value;\r\n },\r\n\r\n _arrows: function() {\r\n var that = this,\r\n arrows,\r\n _release = function() {\r\n clearTimeout( that._spinning );\r\n arrows.removeClass(SELECTED);\r\n },\r\n options = that.options,\r\n spinners = options.spinners,\r\n element = that.element;\r\n\r\n arrows = element.siblings(\".k-icon\");\r\n\r\n if (!arrows[0]) {\r\n arrows = $(buttonHtml(\"n\", options.upArrowText) + buttonHtml(\"s\", options.downArrowText))\r\n .insertAfter(element);\r\n\r\n arrows.wrapAll('');\r\n }\r\n\r\n if (!spinners) {\r\n arrows.parent().toggle(spinners);\r\n that._inputWrapper.addClass(\"k-expand-padding\");\r\n }\r\n\r\n that._upArrow = arrows.eq(0);\r\n that._upArrowEventHandler = new kendo.UserEvents(that._upArrow, { release: _release });\r\n that._downArrow = arrows.eq(1);\r\n that._downArrowEventHandler = new kendo.UserEvents(that._downArrow, { release: _release });\r\n },\r\n\r\n _blur: function() {\r\n var that = this;\r\n\r\n that._toggleText(true);\r\n that._change(that.element.val());\r\n },\r\n\r\n _click: function(e) {\r\n var that = this;\r\n\r\n clearTimeout(that._focusing);\r\n that._focusing = setTimeout(function() {\r\n var input = e.target,\r\n idx = caret(input)[0],\r\n value = input.value.substring(0, idx),\r\n format = that._format(that.options.format),\r\n group = format[\",\"],\r\n result, groupRegExp, extractRegExp,\r\n caretPosition = 0;\r\n\r\n if (group) {\r\n groupRegExp = new RegExp(\"\\\\\" + group, \"g\");\r\n extractRegExp = new RegExp(\"([\\\\d\\\\\" + group + \"]+)(\\\\\" + format[POINT] + \")?(\\\\d+)?\");\r\n }\r\n\r\n if (extractRegExp) {\r\n result = extractRegExp.exec(value);\r\n }\r\n\r\n if (result) {\r\n caretPosition = result[0].replace(groupRegExp, \"\").length;\r\n\r\n if (value.indexOf(\"(\") != -1 && that._value < 0) {\r\n caretPosition++;\r\n }\r\n }\r\n\r\n that._focusin();\r\n\r\n caret(that.element[0], caretPosition);\r\n });\r\n },\r\n\r\n _change: function(value) {\r\n var that = this;\r\n\r\n that._update(value);\r\n value = that._value;\r\n\r\n if (that._old != value) {\r\n that._old = value;\r\n that.trigger(CHANGE);\r\n\r\n // trigger the DOM change event so any subscriber gets notified\r\n that.element.trigger(CHANGE);\r\n }\r\n },\r\n\r\n _culture: function(culture) {\r\n return culture || getCulture(this.options.culture);\r\n },\r\n\r\n _focusin: function() {\r\n var that = this;\r\n that._inputWrapper.addClass(FOCUSED);\r\n that._toggleText(false);\r\n that.element[0].focus();\r\n },\r\n\r\n _focusout: function() {\r\n var that = this;\r\n\r\n clearTimeout(that._focusing);\r\n that._inputWrapper.removeClass(FOCUSED).removeClass(HOVER);\r\n that._blur();\r\n },\r\n\r\n _format: function(format, culture) {\r\n var numberFormat = this._culture(culture).numberFormat;\r\n\r\n format = format.toLowerCase();\r\n\r\n if (format.indexOf(\"c\") > -1) {\r\n numberFormat = numberFormat.currency;\r\n } else if (format.indexOf(\"p\") > -1) {\r\n numberFormat = numberFormat.percent;\r\n }\r\n\r\n return numberFormat;\r\n },\r\n\r\n _input: function() {\r\n var that = this,\r\n CLASSNAME = \"k-formatted-value\",\r\n element = that.element.addClass(INPUT).show()[0],\r\n accessKey = element.accessKey,\r\n wrapper = that.wrapper,\r\n text;\r\n\r\n text = wrapper.find(POINT + CLASSNAME);\r\n\r\n if (!text[0]) {\r\n text = $('').insertBefore(element).addClass(CLASSNAME);\r\n }\r\n\r\n try {\r\n element.setAttribute(\"type\", \"text\");\r\n } catch(e) {\r\n element.type = \"text\";\r\n }\r\n\r\n text[0].tabIndex = element.tabIndex;\r\n text[0].style.cssText = element.style.cssText;\r\n text.prop(\"placeholder\", that.options.placeholder);\r\n\r\n if (accessKey) {\r\n text.attr(\"accesskey\", accessKey);\r\n element.accessKey = \"\";\r\n }\r\n\r\n that._text = text.addClass(element.className);\r\n },\r\n\r\n _keydown: function(e) {\r\n var that = this,\r\n key = e.keyCode;\r\n\r\n that._key = key;\r\n\r\n if (key == keys.DOWN) {\r\n that._step(-1);\r\n } else if (key == keys.UP) {\r\n that._step(1);\r\n } else if (key == keys.ENTER) {\r\n that._change(that.element.val());\r\n }\r\n },\r\n\r\n _keypress: function(e) {\r\n if (e.which === 0 || e.keyCode === keys.BACKSPACE || e.keyCode === keys.ENTER) {\r\n return;\r\n }\r\n\r\n var that = this;\r\n var min = that.options.min;\r\n var element = that.element;\r\n var selection = caret(element);\r\n var selectionStart = selection[0];\r\n var selectionEnd = selection[1];\r\n var character = String.fromCharCode(e.which);\r\n var numberFormat = that._format(that.options.format);\r\n var isNumPadDecimal = that._key === keys.NUMPAD_DOT;\r\n var value = element.val();\r\n var isValid;\r\n\r\n if (isNumPadDecimal) {\r\n character = numberFormat[POINT];\r\n }\r\n\r\n value = value.substring(0, selectionStart) + character + value.substring(selectionEnd);\r\n isValid = that._numericRegex(numberFormat).test(value);\r\n\r\n if (isValid && isNumPadDecimal) {\r\n element.val(value);\r\n caret(element, selectionStart + character.length);\r\n\r\n e.preventDefault();\r\n } else if ((min !== null && min >= 0 && value.charAt(0) === \"-\") || !isValid) {\r\n e.preventDefault();\r\n }\r\n\r\n that._key = 0;\r\n },\r\n\r\n _numericRegex: function(numberFormat) {\r\n var that = this;\r\n var separator = numberFormat[POINT];\r\n var precision = that.options.decimals;\r\n\r\n if (separator === POINT) {\r\n separator = \"\\\\\" + separator;\r\n }\r\n\r\n if (precision === NULL) {\r\n precision = numberFormat.decimals;\r\n }\r\n\r\n if (precision === 0) {\r\n return INTEGER_REGEXP;\r\n }\r\n\r\n if (that._separator !== separator) {\r\n that._separator = separator;\r\n that._floatRegExp = new RegExp(\"^(-)?(((\\\\d+(\" + separator + \"\\\\d*)?)|(\" + separator + \"\\\\d*)))?$\");\r\n }\r\n\r\n return that._floatRegExp;\r\n },\r\n\r\n _paste: function(e) {\r\n var that = this,\r\n element = e.target,\r\n value = element.value;\r\n\r\n setTimeout(function() {\r\n if (that._parse(element.value) === NULL) {\r\n that._update(value);\r\n }\r\n });\r\n },\r\n\r\n _option: function(option, value) {\r\n var that = this,\r\n options = that.options;\r\n\r\n if (value === undefined) {\r\n return options[option];\r\n }\r\n\r\n value = that._parse(value);\r\n\r\n if (!value && option === \"step\") {\r\n return;\r\n }\r\n\r\n options[option] = value;\r\n that.element\r\n .attr(\"aria-value\" + option, value)\r\n .attr(option, value);\r\n },\r\n\r\n _spin: function(step, timeout) {\r\n var that = this;\r\n\r\n timeout = timeout || 500;\r\n\r\n clearTimeout( that._spinning );\r\n that._spinning = setTimeout(function() {\r\n that._spin(step, 50);\r\n }, timeout );\r\n\r\n that._step(step);\r\n },\r\n\r\n _step: function(step) {\r\n var that = this,\r\n element = that.element,\r\n value = that._parse(element.val()) || 0;\r\n\r\n if (activeElement() != element[0]) {\r\n that._focusin();\r\n }\r\n\r\n value += that.options.step * step;\r\n\r\n that._update(that._adjust(value));\r\n\r\n that.trigger(SPIN);\r\n },\r\n\r\n _toggleHover: function(e) {\r\n $(e.currentTarget).toggleClass(HOVER, e.type === \"mouseenter\");\r\n },\r\n\r\n _toggleText: function(toggle) {\r\n var that = this;\r\n\r\n that._text.toggle(toggle);\r\n that.element.toggle(!toggle);\r\n },\r\n\r\n _parse: function(value, culture) {\r\n return parse(value, this._culture(culture), this.options.format);\r\n },\r\n\r\n _update: function(value) {\r\n var that = this,\r\n options = that.options,\r\n format = options.format,\r\n decimals = options.decimals,\r\n culture = that._culture(),\r\n numberFormat = that._format(format, culture),\r\n isNotNull;\r\n\r\n if (decimals === NULL) {\r\n decimals = numberFormat.decimals;\r\n }\r\n\r\n value = that._parse(value, culture);\r\n\r\n isNotNull = value !== NULL;\r\n\r\n if (isNotNull) {\r\n value = parseFloat(round(value, decimals));\r\n }\r\n\r\n that._value = value = that._adjust(value);\r\n that._placeholder(kendo.toString(value, format, culture));\r\n\r\n if (isNotNull) {\r\n value = value.toString();\r\n if (value.indexOf(\"e\") !== -1) {\r\n value = round(+value, decimals);\r\n }\r\n value = value.replace(POINT, numberFormat[POINT]);\r\n } else {\r\n value = \"\";\r\n }\r\n\r\n that.element.val(value).attr(\"aria-valuenow\", value);\r\n },\r\n\r\n _placeholder: function(value) {\r\n this._text.val(value);\r\n if (!placeholderSupported && !value) {\r\n this._text.val(this.options.placeholder);\r\n }\r\n },\r\n\r\n _wrapper: function() {\r\n var that = this,\r\n element = that.element,\r\n DOMElement = element[0],\r\n wrapper;\r\n\r\n wrapper = element.parents(\".k-numerictextbox\");\r\n\r\n if (!wrapper.is(\"span.k-numerictextbox\")) {\r\n wrapper = element.hide().wrap('').parent();\r\n wrapper = wrapper.wrap(\"\").parent();\r\n }\r\n\r\n wrapper[0].style.cssText = DOMElement.style.cssText;\r\n DOMElement.style.width = \"\";\r\n that.wrapper = wrapper.addClass(\"k-widget k-numerictextbox\")\r\n .addClass(DOMElement.className)\r\n .css(\"display\", \"\");\r\n\r\n that._inputWrapper = $(wrapper[0].firstChild);\r\n },\r\n\r\n _reset: function() {\r\n var that = this,\r\n element = that.element,\r\n formId = element.attr(\"form\"),\r\n form = formId ? $(\"#\" + formId) : element.closest(\"form\");\r\n\r\n if (form[0]) {\r\n that._resetHandler = function() {\r\n setTimeout(function() {\r\n that.value(element[0].value);\r\n });\r\n };\r\n\r\n that._form = form.on(\"reset\", that._resetHandler);\r\n }\r\n }\r\n });\r\n\r\n function buttonHtml(className, text) {\r\n return '' + text + '';\r\n }\r\n\r\n ui.plugin(NumericTextBox);\r\n})(window.kendo.jQuery);\r\n\r\nreturn window.kendo;\r\n\r\n}, typeof define == 'function' && define.amd ? define : function(_, f){ f(); });","/*\r\n* Kendo UI Complete v2014.1.318 (http://kendoui.com)\r\n* Copyright 2014 Telerik AD. All rights reserved.\r\n*\r\n* Kendo UI Complete commercial licenses may be obtained at\r\n* http://www.telerik.com/purchase/license-agreement/kendo-ui-complete\r\n* If you do not own a commercial license, this file shall be governed by the trial license terms.\r\n*/\r\n(function(f, define){\r\n define([ \"./kendo.core\" ], f);\r\n})(function(){\r\n\r\n(function($, undefined) {\r\n var kendo = window.kendo,\r\n ui = kendo.ui,\r\n Widget = ui.Widget,\r\n support = kendo.support,\r\n getOffset = kendo.getOffset,\r\n activeElement = kendo._activeElement,\r\n OPEN = \"open\",\r\n CLOSE = \"close\",\r\n DEACTIVATE = \"deactivate\",\r\n ACTIVATE = \"activate\",\r\n CENTER = \"center\",\r\n LEFT = \"left\",\r\n RIGHT = \"right\",\r\n TOP = \"top\",\r\n BOTTOM = \"bottom\",\r\n ABSOLUTE = \"absolute\",\r\n HIDDEN = \"hidden\",\r\n BODY = \"body\",\r\n LOCATION = \"location\",\r\n POSITION = \"position\",\r\n VISIBLE = \"visible\",\r\n EFFECTS = \"effects\",\r\n ACTIVE = \"k-state-active\",\r\n ACTIVEBORDER = \"k-state-border\",\r\n ACTIVEBORDERREGEXP = /k-state-border-(\\w+)/,\r\n ACTIVECHILDREN = \".k-picker-wrap, .k-dropdown-wrap, .k-link\",\r\n MOUSEDOWN = \"down\",\r\n WINDOW = $(window),\r\n DOCUMENT_ELEMENT = $(document.documentElement),\r\n RESIZE_SCROLL = \"resize scroll\",\r\n cssPrefix = support.transitions.css,\r\n TRANSFORM = cssPrefix + \"transform\",\r\n extend = $.extend,\r\n NS = \".kendoPopup\",\r\n styles = [\"font-size\",\r\n \"font-family\",\r\n \"font-stretch\",\r\n \"font-style\",\r\n \"font-weight\",\r\n \"line-height\"];\r\n\r\n function contains(container, target) {\r\n return container === target || $.contains(container, target);\r\n }\r\n\r\n var Popup = Widget.extend({\r\n init: function(element, options) {\r\n var that = this, parentPopup;\r\n\r\n options = options || {};\r\n\r\n if (options.isRtl) {\r\n options.origin = options.origin || BOTTOM + \" \" + RIGHT;\r\n options.position = options.position || TOP + \" \" + RIGHT;\r\n }\r\n\r\n Widget.fn.init.call(that, element, options);\r\n\r\n element = that.element;\r\n options = that.options;\r\n\r\n that.collisions = options.collision ? options.collision.split(\" \") : [];\r\n\r\n if (that.collisions.length === 1) {\r\n that.collisions.push(that.collisions[0]);\r\n }\r\n\r\n parentPopup = $(that.options.anchor).closest(\".k-popup,.k-group\").filter(\":not([class^=km-])\"); // When popup is in another popup, make it relative.\r\n options.appendTo = $($(options.appendTo)[0] || parentPopup[0] || BODY);\r\n\r\n that.element.hide()\r\n .addClass(\"k-popup k-group k-reset\")\r\n .toggleClass(\"k-rtl\", !!options.isRtl)\r\n .css({ position : ABSOLUTE })\r\n .appendTo(options.appendTo)\r\n .on(\"mouseenter\" + NS, function() {\r\n that._hovered = true;\r\n })\r\n .on(\"mouseleave\" + NS, function() {\r\n that._hovered = false;\r\n });\r\n\r\n that.wrapper = $();\r\n\r\n if (options.animation === false) {\r\n options.animation = { open: { effects: {} }, close: { hide: true, effects: {} } };\r\n }\r\n\r\n extend(options.animation.open, {\r\n complete: function() {\r\n that.wrapper.css({ overflow: VISIBLE }); // Forcing refresh causes flickering in mobile.\r\n that.trigger(ACTIVATE);\r\n }\r\n });\r\n\r\n extend(options.animation.close, {\r\n complete: function() {\r\n that.wrapper.hide();\r\n\r\n var location = that.wrapper.data(LOCATION),\r\n anchor = $(options.anchor),\r\n direction, dirClass;\r\n\r\n if (location) {\r\n that.wrapper.css(location);\r\n }\r\n\r\n if (options.anchor != BODY) {\r\n direction = (anchor[0].className.match(ACTIVEBORDERREGEXP) || [\"\", \"down\"])[1];\r\n dirClass = ACTIVEBORDER + \"-\" + direction;\r\n\r\n anchor\r\n .removeClass(dirClass)\r\n .children(ACTIVECHILDREN)\r\n .removeClass(ACTIVE)\r\n .removeClass(dirClass);\r\n\r\n element.removeClass(ACTIVEBORDER + \"-\" + kendo.directions[direction].reverse);\r\n }\r\n\r\n that._closing = false;\r\n that.trigger(DEACTIVATE);\r\n }\r\n });\r\n\r\n that._mousedownProxy = function(e) {\r\n that._mousedown(e);\r\n };\r\n\r\n that._resizeProxy = function(e) {\r\n that._resize(e);\r\n };\r\n\r\n if (options.toggleTarget) {\r\n $(options.toggleTarget).on(options.toggleEvent + NS, $.proxy(that.toggle, that));\r\n }\r\n },\r\n\r\n events: [\r\n OPEN,\r\n ACTIVATE,\r\n CLOSE,\r\n DEACTIVATE\r\n ],\r\n\r\n options: {\r\n name: \"Popup\",\r\n toggleEvent: \"click\",\r\n origin: BOTTOM + \" \" + LEFT,\r\n position: TOP + \" \" + LEFT,\r\n anchor: BODY,\r\n collision: \"flip fit\",\r\n viewport: window,\r\n copyAnchorStyles: true,\r\n autosize: false,\r\n modal: false,\r\n animation: {\r\n open: {\r\n effects: \"slideIn:down\",\r\n transition: true,\r\n duration: 200\r\n },\r\n close: { // if close animation effects are defined, they will be used instead of open.reverse\r\n duration: 100,\r\n hide: true\r\n }\r\n }\r\n },\r\n\r\n destroy: function() {\r\n var that = this,\r\n options = that.options,\r\n element = that.element.off(NS),\r\n parent;\r\n\r\n Widget.fn.destroy.call(that);\r\n\r\n if (options.toggleTarget) {\r\n $(options.toggleTarget).off(NS);\r\n }\r\n\r\n if (!options.modal) {\r\n DOCUMENT_ELEMENT.unbind(MOUSEDOWN, that._mousedownProxy);\r\n WINDOW.unbind(RESIZE_SCROLL, that._resizeProxy);\r\n }\r\n\r\n kendo.destroy(that.element.children());\r\n element.removeData();\r\n\r\n if (options.appendTo[0] === document.body) {\r\n parent = element.parent(\".k-animation-container\");\r\n\r\n if (parent[0]) {\r\n parent.remove();\r\n } else {\r\n element.remove();\r\n }\r\n }\r\n },\r\n\r\n open: function(x, y) {\r\n var that = this,\r\n fixed = { isFixed: !isNaN(parseInt(y,10)), x: x, y: y },\r\n element = that.element,\r\n options = that.options,\r\n direction = \"down\",\r\n animation, wrapper,\r\n anchor = $(options.anchor),\r\n mobile = element[0] && element.hasClass(\"km-widget\");\r\n\r\n if (!that.visible()) {\r\n if (options.copyAnchorStyles) {\r\n if (mobile && styles[0] == \"font-size\") {\r\n styles.shift();\r\n }\r\n element.css(kendo.getComputedStyles(anchor[0], styles));\r\n }\r\n\r\n if (element.data(\"animating\") || that.trigger(OPEN)) {\r\n return;\r\n }\r\n\r\n if (!options.modal) {\r\n DOCUMENT_ELEMENT.unbind(MOUSEDOWN, that._mousedownProxy)\r\n .bind(MOUSEDOWN, that._mousedownProxy);\r\n\r\n // this binding hangs iOS in editor\r\n if (!(support.mobileOS.ios || support.mobileOS.android)) {\r\n WINDOW.unbind(RESIZE_SCROLL, that._resizeProxy)\r\n .bind(RESIZE_SCROLL, that._resizeProxy);\r\n }\r\n }\r\n\r\n that.wrapper = wrapper = kendo.wrap(element, options.autosize)\r\n .css({\r\n overflow: HIDDEN,\r\n display: \"block\",\r\n position: ABSOLUTE\r\n });\r\n\r\n if (support.mobileOS.android) {\r\n wrapper.add(anchor).css(TRANSFORM, \"translatez(0)\"); // Android is VERY slow otherwise. Should be tested in other droids as well since it may cause blur.\r\n }\r\n\r\n wrapper.css(POSITION);\r\n\r\n if ($(options.appendTo)[0] == document.body) {\r\n wrapper.css(TOP, \"-10000px\");\r\n }\r\n\r\n animation = extend(true, {}, options.animation.open);\r\n that.flipped = that._position(fixed);\r\n animation.effects = kendo.parseEffects(animation.effects, that.flipped);\r\n\r\n direction = animation.effects.slideIn ? animation.effects.slideIn.direction : direction;\r\n\r\n if (options.anchor != BODY) {\r\n var dirClass = ACTIVEBORDER + \"-\" + direction;\r\n\r\n element.addClass(ACTIVEBORDER + \"-\" + kendo.directions[direction].reverse);\r\n\r\n anchor\r\n .addClass(dirClass)\r\n .children(ACTIVECHILDREN)\r\n .addClass(ACTIVE)\r\n .addClass(dirClass);\r\n }\r\n\r\n element.data(EFFECTS, animation.effects)\r\n .kendoStop(true)\r\n .kendoAnimate(animation);\r\n }\r\n },\r\n\r\n toggle: function() {\r\n var that = this;\r\n\r\n that[that.visible() ? CLOSE : OPEN]();\r\n },\r\n\r\n visible: function() {\r\n return this.element.is(\":\" + VISIBLE);\r\n },\r\n\r\n close: function() {\r\n var that = this,\r\n options = that.options, wrap,\r\n animation, openEffects, closeEffects;\r\n\r\n if (that.visible()) {\r\n wrap = (that.wrapper[0] ? that.wrapper : kendo.wrap(that.element).hide());\r\n\r\n if (that._closing || that.trigger(CLOSE)) {\r\n return;\r\n }\r\n\r\n // Close all inclusive popups.\r\n that.element.find(\".k-popup\").each(function () {\r\n var that = $(this),\r\n popup = that.data(\"kendoPopup\");\r\n\r\n if (popup) {\r\n popup.close();\r\n }\r\n });\r\n\r\n DOCUMENT_ELEMENT.unbind(MOUSEDOWN, that._mousedownProxy);\r\n WINDOW.unbind(RESIZE_SCROLL, that._resizeProxy);\r\n\r\n animation = extend(true, {}, options.animation.close);\r\n openEffects = that.element.data(EFFECTS);\r\n closeEffects = animation.effects;\r\n\r\n if (!closeEffects && !kendo.size(closeEffects) && openEffects && kendo.size(openEffects)) {\r\n animation.effects = openEffects;\r\n animation.reverse = true;\r\n }\r\n\r\n that._closing = true;\r\n\r\n that.element.kendoStop(true);\r\n wrap.css({ overflow: HIDDEN }); // stop callback will remove hidden overflow\r\n that.element.kendoAnimate(animation);\r\n }\r\n },\r\n\r\n _resize: function(e) {\r\n var that = this;\r\n\r\n if (e.type === \"resize\") {\r\n clearTimeout(that._resizeTimeout);\r\n that._resizeTimeout = setTimeout(function() {\r\n that._position();\r\n that._resizeTimeout = null;\r\n }, 50);\r\n } else {\r\n if (!that._hovered && !contains(that.element[0], activeElement())) {\r\n that.close();\r\n }\r\n }\r\n },\r\n\r\n _mousedown: function(e) {\r\n var that = this,\r\n container = that.element[0],\r\n options = that.options,\r\n anchor = $(options.anchor)[0],\r\n toggleTarget = options.toggleTarget,\r\n target = kendo.eventTarget(e),\r\n popup = $(target).closest(\".k-popup\"),\r\n mobile = popup.parent().parent(\".km-shim\").length;\r\n\r\n popup = popup[0];\r\n if (!mobile && popup && popup !== that.element[0]){\r\n return;\r\n }\r\n\r\n // This MAY result in popup not closing in certain cases.\r\n if ($(e.target).closest(\"a\").data(\"rel\") === \"popover\") {\r\n return;\r\n }\r\n\r\n if (!contains(container, target) && !contains(anchor, target) && !(toggleTarget && contains($(toggleTarget)[0], target))) {\r\n that.close();\r\n }\r\n },\r\n\r\n _fit: function(position, size, viewPortSize) {\r\n var output = 0;\r\n\r\n if (position + size > viewPortSize) {\r\n output = viewPortSize - (position + size);\r\n }\r\n\r\n if (position < 0) {\r\n output = -position;\r\n }\r\n\r\n return output;\r\n },\r\n\r\n _flip: function(offset, size, anchorSize, viewPortSize, origin, position, boxSize) {\r\n var output = 0;\r\n boxSize = boxSize || size;\r\n\r\n if (position !== origin && position !== CENTER && origin !== CENTER) {\r\n if (offset + boxSize > viewPortSize) {\r\n output += -(anchorSize + size);\r\n }\r\n\r\n if (offset + output < 0) {\r\n output += anchorSize + size;\r\n }\r\n }\r\n return output;\r\n },\r\n\r\n _position: function(fixed) {\r\n var that = this,\r\n documentElement = $(document.documentElement),\r\n element = that.element.css(POSITION, \"\"),\r\n wrapper = that.wrapper,\r\n options = that.options,\r\n viewport = $(options.viewport),\r\n viewportOffset = viewport.offset(),\r\n anchor = $(options.anchor),\r\n origins = options.origin.toLowerCase().split(\" \"),\r\n positions = options.position.toLowerCase().split(\" \"),\r\n collisions = that.collisions,\r\n zoomLevel = support.zoomLevel(),\r\n siblingContainer, parents,\r\n parentZIndex, zIndex = 10002,\r\n idx = 0, length, viewportWidth, viewportHeight;\r\n\r\n // $(window).height() uses documentElement to get the height\r\n documentElement.css({ overflowX: \"hidden\", overflowY: \"hidden\" });\r\n viewportWidth = viewport.width();\r\n viewportHeight = viewport.height();\r\n documentElement.css({ overflowX: \"\", overflowY: \"\" });\r\n\r\n siblingContainer = anchor.parents().filter(wrapper.siblings());\r\n\r\n if (siblingContainer[0]) {\r\n parentZIndex = Number($(siblingContainer).css(\"zIndex\"));\r\n if (parentZIndex) {\r\n zIndex = parentZIndex + 1;\r\n } else {\r\n parents = anchor.parentsUntil(siblingContainer);\r\n for (length = parents.length; idx < length; idx++) {\r\n parentZIndex = Number($(parents[idx]).css(\"zIndex\"));\r\n if (parentZIndex && zIndex < parentZIndex) {\r\n zIndex = parentZIndex + 1;\r\n }\r\n }\r\n }\r\n }\r\n\r\n wrapper.css(\"zIndex\", zIndex);\r\n\r\n if (fixed && fixed.isFixed) {\r\n wrapper.css({ left: fixed.x, top: fixed.y });\r\n } else {\r\n wrapper.css(that._align(origins, positions));\r\n }\r\n\r\n var pos = getOffset(wrapper, POSITION, anchor[0] === wrapper.offsetParent()[0]),\r\n offset = getOffset(wrapper),\r\n anchorParent = anchor.offsetParent().parent(\".k-animation-container,.k-popup,.k-group\"); // If the parent is positioned, get the current positions\r\n\r\n if (anchorParent.length) {\r\n pos = getOffset(wrapper, POSITION, true);\r\n offset = getOffset(wrapper);\r\n }\r\n\r\n if (viewport[0] === window) {\r\n offset.top -= (window.pageYOffset || document.documentElement.scrollTop || 0);\r\n offset.left -= (window.pageXOffset || document.documentElement.scrollLeft || 0);\r\n }\r\n else {\r\n offset.top -= viewportOffset.top;\r\n offset.left -= viewportOffset.left;\r\n }\r\n\r\n if (!that.wrapper.data(LOCATION)) { // Needed to reset the popup location after every closure - fixes the resize bugs.\r\n wrapper.data(LOCATION, extend({}, pos));\r\n }\r\n\r\n var offsets = extend({}, offset),\r\n location = extend({}, pos);\r\n\r\n if (collisions[0] === \"fit\") {\r\n location.top += that._fit(offsets.top, wrapper.outerHeight(), viewportHeight / zoomLevel);\r\n }\r\n\r\n if (collisions[1] === \"fit\") {\r\n location.left += that._fit(offsets.left, wrapper.outerWidth(), viewportWidth / zoomLevel);\r\n }\r\n\r\n var flipPos = extend({}, location);\r\n\r\n if (collisions[0] === \"flip\") {\r\n location.top += that._flip(offsets.top, element.outerHeight(), anchor.outerHeight(), viewportHeight / zoomLevel, origins[0], positions[0], wrapper.outerHeight());\r\n }\r\n\r\n if (collisions[1] === \"flip\") {\r\n location.left += that._flip(offsets.left, element.outerWidth(), anchor.outerWidth(), viewportWidth / zoomLevel, origins[1], positions[1], wrapper.outerWidth());\r\n }\r\n\r\n element.css(POSITION, ABSOLUTE);\r\n wrapper.css(location);\r\n\r\n return (location.left != flipPos.left || location.top != flipPos.top);\r\n },\r\n\r\n _align: function(origin, position) {\r\n var that = this,\r\n element = that.wrapper,\r\n anchor = $(that.options.anchor),\r\n verticalOrigin = origin[0],\r\n horizontalOrigin = origin[1],\r\n verticalPosition = position[0],\r\n horizontalPosition = position[1],\r\n anchorOffset = getOffset(anchor),\r\n appendTo = $(that.options.appendTo),\r\n appendToOffset,\r\n width = element.outerWidth(),\r\n height = element.outerHeight(),\r\n anchorWidth = anchor.outerWidth(),\r\n anchorHeight = anchor.outerHeight(),\r\n top = anchorOffset.top,\r\n left = anchorOffset.left,\r\n round = Math.round;\r\n\r\n if (appendTo[0] != document.body) {\r\n appendToOffset = getOffset(appendTo);\r\n top -= appendToOffset.top;\r\n left -= appendToOffset.left;\r\n }\r\n\r\n\r\n if (verticalOrigin === BOTTOM) {\r\n top += anchorHeight;\r\n }\r\n\r\n if (verticalOrigin === CENTER) {\r\n top += round(anchorHeight / 2);\r\n }\r\n\r\n if (verticalPosition === BOTTOM) {\r\n top -= height;\r\n }\r\n\r\n if (verticalPosition === CENTER) {\r\n top -= round(height / 2);\r\n }\r\n\r\n if (horizontalOrigin === RIGHT) {\r\n left += anchorWidth;\r\n }\r\n\r\n if (horizontalOrigin === CENTER) {\r\n left += round(anchorWidth / 2);\r\n }\r\n\r\n if (horizontalPosition === RIGHT) {\r\n left -= width;\r\n }\r\n\r\n if (horizontalPosition === CENTER) {\r\n left -= round(width / 2);\r\n }\r\n\r\n return {\r\n top: top,\r\n left: left\r\n };\r\n }\r\n });\r\n\r\n ui.plugin(Popup);\r\n})(window.kendo.jQuery);\r\n\r\nreturn window.kendo;\r\n\r\n}, typeof define == 'function' && define.amd ? define : function(_, f){ f(); });","/*\r\n* Kendo UI Complete v2014.1.318 (http://kendoui.com)\r\n* Copyright 2014 Telerik AD. All rights reserved.\r\n*\r\n* Kendo UI Complete commercial licenses may be obtained at\r\n* http://www.telerik.com/purchase/license-agreement/kendo-ui-complete\r\n* If you do not own a commercial license, this file shall be governed by the trial license terms.\r\n*/\r\n(function(f, define){\r\n define([ \"./kendo.core\", \"./kendo.userevents\" ], f);\r\n})(function(){\r\n\r\n(function ($, undefined) {\r\n var kendo = window.kendo,\r\n Widget = kendo.ui.Widget,\r\n proxy = $.proxy,\r\n abs = Math.abs,\r\n shift = Array.prototype.shift,\r\n ARIASELECTED = \"aria-selected\",\r\n SELECTED = \"k-state-selected\",\r\n ACTIVE = \"k-state-selecting\",\r\n SELECTABLE = \"k-selectable\",\r\n CHANGE = \"change\",\r\n NS = \".kendoSelectable\",\r\n UNSELECTING = \"k-state-unselecting\",\r\n supportEventDelegation = false;\r\n\r\n (function($) {\r\n (function() {\r\n $('
      ')\r\n .on(\"click\", \">*\", function() {\r\n supportEventDelegation = true;\r\n })\r\n .find(\"span\")\r\n .click()\r\n .end()\r\n .off();\r\n })();\r\n })($);\r\n\r\n var Selectable = Widget.extend({\r\n init: function(element, options) {\r\n var that = this,\r\n multiple;\r\n\r\n Widget.fn.init.call(that, element, options);\r\n\r\n that._marquee = $(\"
      \");\r\n that._lastActive = null;\r\n that.element.addClass(SELECTABLE);\r\n\r\n that.relatedTarget = that.options.relatedTarget;\r\n\r\n multiple = that.options.multiple;\r\n that.userEvents = new kendo.UserEvents(that.element, {\r\n global: true,\r\n allowSelection: true,\r\n filter: (!supportEventDelegation ? \".\" + SELECTABLE + \" \" : \"\") + that.options.filter,\r\n tap: proxy(that._tap, that)\r\n });\r\n\r\n if (multiple) {\r\n that.userEvents\r\n .bind(\"start\", proxy(that._start, that))\r\n .bind(\"move\", proxy(that._move, that))\r\n .bind(\"end\", proxy(that._end, that))\r\n .bind(\"select\", proxy(that._select, that));\r\n }\r\n },\r\n\r\n events: [CHANGE],\r\n\r\n options: {\r\n name: \"Selectable\",\r\n filter: \">*\",\r\n multiple: false,\r\n relatedTarget: $.noop\r\n },\r\n\r\n _isElement: function(target) {\r\n var elements = this.element;\r\n var idx, length = elements.length, result = false;\r\n\r\n target = target[0];\r\n\r\n for (idx = 0; idx < length; idx ++) {\r\n if (elements[idx] === target) {\r\n result = true;\r\n break;\r\n }\r\n }\r\n\r\n return result;\r\n },\r\n\r\n _tap: function(e) {\r\n var target = $(e.target),\r\n that = this,\r\n ctrlKey = e.event.ctrlKey || e.event.metaKey,\r\n multiple = that.options.multiple,\r\n shiftKey = multiple && e.event.shiftKey,\r\n selected,\r\n whichCode = e.event.which,\r\n buttonCode = e.event.button;\r\n\r\n //in case of hierarchy or right-click\r\n if (!that._isElement(target.closest(\".\" + SELECTABLE)) || whichCode && whichCode == 3 || buttonCode && buttonCode == 2) {\r\n return;\r\n }\r\n\r\n selected = target.hasClass(SELECTED);\r\n if (!multiple || !ctrlKey) {\r\n that.clear();\r\n }\r\n\r\n target = target.add(that.relatedTarget(target));\r\n\r\n if (shiftKey) {\r\n that.selectRange(that._firstSelectee(), target);\r\n } else {\r\n if (selected && ctrlKey) {\r\n that._unselect(target);\r\n that._notify(CHANGE);\r\n } else {\r\n that.value(target);\r\n }\r\n\r\n that._lastActive = that._downTarget = target;\r\n }\r\n },\r\n\r\n _start: function(e) {\r\n var that = this,\r\n target = $(e.target),\r\n selected = target.hasClass(SELECTED),\r\n currentElement,\r\n ctrlKey = e.event.ctrlKey || e.event.metaKey;\r\n\r\n that._downTarget = target;\r\n\r\n //in case of hierarchy\r\n if (!that._isElement(target.closest(\".\" + SELECTABLE))) {\r\n that.userEvents.cancel();\r\n return;\r\n }\r\n\r\n if (that.options.useAllItems) {\r\n that._items = that.element.find(that.options.filter);\r\n } else {\r\n currentElement = target.closest(that.element);\r\n that._items = currentElement.find(that.options.filter);\r\n }\r\n\r\n that._marquee\r\n .appendTo(document.body)\r\n .css({\r\n left: e.x.client + 1,\r\n top: e.y.client + 1,\r\n width: 0,\r\n height: 0\r\n });\r\n\r\n if (!ctrlKey) {\r\n that.clear();\r\n }\r\n\r\n target = target.add(that.relatedTarget(target));\r\n if (selected) {\r\n that._selectElement(target, true);\r\n if (ctrlKey) {\r\n target.addClass(UNSELECTING);\r\n }\r\n }\r\n },\r\n\r\n _move: function(e) {\r\n var that = this,\r\n position = {\r\n left: e.x.startLocation > e.x.location ? e.x.location : e.x.startLocation,\r\n top: e.y.startLocation > e.y.location ? e.y.location : e.y.startLocation,\r\n width: abs(e.x.initialDelta),\r\n height: abs(e.y.initialDelta)\r\n };\r\n\r\n that._marquee.css(position);\r\n\r\n that._invalidateSelectables(position, (e.event.ctrlKey || e.event.metaKey));\r\n\r\n e.preventDefault();\r\n },\r\n\r\n _end: function() {\r\n var that = this;\r\n\r\n that._marquee.remove();\r\n\r\n that._unselect(that.element\r\n .find(that.options.filter + \".\" + UNSELECTING))\r\n .removeClass(UNSELECTING);\r\n\r\n\r\n var target = that.element.find(that.options.filter + \".\" + ACTIVE);\r\n target = target.add(that.relatedTarget(target));\r\n\r\n that.value(target);\r\n that._lastActive = that._downTarget;\r\n that._items = null;\r\n },\r\n\r\n\r\n _invalidateSelectables: function(position, ctrlKey) {\r\n var idx,\r\n length,\r\n target = this._downTarget[0],\r\n items = this._items,\r\n related,\r\n toSelect;\r\n\r\n for (idx = 0, length = items.length; idx < length; idx ++) {\r\n toSelect = items.eq(idx);\r\n related = toSelect.add(this.relatedTarget(toSelect));\r\n\r\n if (collision(toSelect, position)) {\r\n if(toSelect.hasClass(SELECTED)) {\r\n if(ctrlKey && target !== toSelect[0]) {\r\n related.removeClass(SELECTED).addClass(UNSELECTING);\r\n }\r\n } else if (!toSelect.hasClass(ACTIVE) && !toSelect.hasClass(UNSELECTING)) {\r\n related.addClass(ACTIVE);\r\n }\r\n } else {\r\n if (toSelect.hasClass(ACTIVE)) {\r\n related.removeClass(ACTIVE);\r\n } else if(ctrlKey && toSelect.hasClass(UNSELECTING)) {\r\n related.removeClass(UNSELECTING).addClass(SELECTED);\r\n }\r\n }\r\n }\r\n },\r\n\r\n value: function(val) {\r\n var that = this,\r\n selectElement = proxy(that._selectElement, that);\r\n\r\n if(val) {\r\n val.each(function() {\r\n selectElement(this);\r\n });\r\n\r\n that._notify(CHANGE);\r\n return;\r\n }\r\n\r\n return that.element.find(that.options.filter + \".\" + SELECTED);\r\n },\r\n\r\n _firstSelectee: function() {\r\n var that = this,\r\n selected;\r\n\r\n if(that._lastActive !== null) {\r\n return that._lastActive;\r\n }\r\n\r\n selected = that.value();\r\n return selected.length > 0 ?\r\n selected[0] :\r\n that.element.find(that.options.filter)[0];\r\n },\r\n\r\n _selectElement: function(element, preventNotify) {\r\n var toSelect = $(element),\r\n isPrevented = !preventNotify && this._notify(\"select\", { element: element });\r\n\r\n toSelect.removeClass(ACTIVE);\r\n if(!isPrevented) {\r\n toSelect.addClass(SELECTED);\r\n\r\n if (this.options.aria) {\r\n toSelect.attr(ARIASELECTED, true);\r\n }\r\n }\r\n },\r\n\r\n _notify: function(name, args) {\r\n args = args || { };\r\n return this.trigger(name, args);\r\n },\r\n\r\n _unselect: function(element) {\r\n element.removeClass(SELECTED);\r\n\r\n if (this.options.aria) {\r\n element.attr(ARIASELECTED, false);\r\n }\r\n\r\n return element;\r\n },\r\n\r\n _select: function(e) {\r\n var selector = \"input,a,textarea,.k-multiselect-wrap,select\",\r\n msie = kendo.support.browser.msie;\r\n if ($(e.event.target).is(selector)) {\r\n this.userEvents.cancel();\r\n this._downTarget = null;\r\n } else if (!msie || (msie && !$(kendo._activeElement()).is(selector))) {\r\n e.preventDefault();\r\n }\r\n },\r\n\r\n clear: function() {\r\n var items = this.element.find(this.options.filter + \".\" + SELECTED);\r\n this._unselect(items);\r\n },\r\n\r\n selectRange: function(start, end) {\r\n var that = this,\r\n idx,\r\n tmp,\r\n items;\r\n\r\n that.clear();\r\n\r\n if (that.element.length > 1) {\r\n items = that.options.continuousItems();\r\n }\r\n\r\n if (!items || !items.length) {\r\n items = that.element.find(that.options.filter);\r\n }\r\n\r\n start = $.inArray($(start)[0], items);\r\n end = $.inArray($(end)[0], items);\r\n\r\n if (start > end) {\r\n tmp = start;\r\n start = end;\r\n end = tmp;\r\n }\r\n\r\n if (!that.options.useAllItems) {\r\n end += that.element.length - 1;\r\n }\r\n\r\n for (idx = start; idx <= end; idx ++ ) {\r\n that._selectElement(items[idx]);\r\n }\r\n\r\n that._notify(CHANGE);\r\n },\r\n\r\n destroy: function() {\r\n var that = this;\r\n\r\n Widget.fn.destroy.call(that);\r\n\r\n that.element.off(NS);\r\n\r\n that.userEvents.destroy();\r\n\r\n that._marquee = that._lastActive = that.element = that.userEvents = null;\r\n }\r\n });\r\n\r\n function collision(element, position) {\r\n var elementPosition = kendo.getOffset(element),\r\n right = position.left + position.width,\r\n bottom = position.top + position.height;\r\n\r\n elementPosition.right = elementPosition.left + element.outerWidth();\r\n elementPosition.bottom = elementPosition.top + element.outerHeight();\r\n\r\n return !(elementPosition.left > right||\r\n elementPosition.right < position.left ||\r\n elementPosition.top > bottom ||\r\n elementPosition.bottom < position.top);\r\n }\r\n\r\n kendo.ui.plugin(Selectable);\r\n\r\n})(window.kendo.jQuery);\r\n\r\nreturn window.kendo;\r\n\r\n}, typeof define == 'function' && define.amd ? define : function(_, f){ f(); });","/*\r\n* Kendo UI Complete v2014.1.318 (http://kendoui.com)\r\n* Copyright 2014 Telerik AD. All rights reserved.\r\n*\r\n* Kendo UI Complete commercial licenses may be obtained at\r\n* http://www.telerik.com/purchase/license-agreement/kendo-ui-complete\r\n* If you do not own a commercial license, this file shall be governed by the trial license terms.\r\n*\r\n* this file comes from v2014.1.416\r\n*/\r\n(function(f, define){\r\n define([ \"./kendo.draganddrop\" ], f);\r\n})(function(){\r\n\r\n(function($, undefined) {\r\n var kendo = window.kendo,\r\n Widget = kendo.ui.Widget,\r\n\r\n START = \"start\",\r\n BEFORE_MOVE = \"beforeMove\",\r\n MOVE = \"move\",\r\n END = \"end\",\r\n CHANGE = \"change\",\r\n CANCEL = \"cancel\",\r\n\r\n ACTION_SORT = \"sort\",\r\n ACTION_REMOVE = \"remove\",\r\n ACTION_RECEIVE = \"receive\",\r\n\r\n DEFAULT_FILTER = \">*\",\r\n MISSING_INDEX = -1;\r\n\r\n function containsOrEqualTo(parent, child) {\r\n try {\r\n return $.contains(parent, child) || parent == child;\r\n } catch (e) {\r\n return false;\r\n }\r\n }\r\n\r\n function defaultHint(element) {\r\n return element.clone();\r\n }\r\n\r\n function defaultPlaceholder(element) {\r\n return element.clone().removeAttr(\"id\").css(\"visibility\", \"hidden\");\r\n }\r\n\r\n var Sortable = Widget.extend({\r\n init: function(element, options) {\r\n var that = this;\r\n\r\n Widget.fn.init.call(that, element, options);\r\n\r\n if(!that.options.placeholder) {\r\n that.options.placeholder = defaultPlaceholder;\r\n }\r\n\r\n if(!that.options.hint) {\r\n that.options.hint = defaultHint;\r\n }\r\n\r\n that._draggable = that._createDraggable();\r\n that.floating = false;\r\n },\r\n\r\n events: [\r\n START,\r\n BEFORE_MOVE,\r\n MOVE,\r\n END,\r\n CHANGE,\r\n CANCEL\r\n ],\r\n\r\n options: {\r\n name: \"Sortable\",\r\n hint: null,\r\n placeholder: null,\r\n filter: DEFAULT_FILTER,\r\n holdToDrag: false,\r\n disabled: null,\r\n container: null,\r\n connectWith: null,\r\n handler: null,\r\n cursorOffset: null,\r\n axis: null,\r\n ignore: null,\r\n cursor: \"auto\"\r\n },\r\n\r\n destroy: function() {\r\n this._draggable.destroy();\r\n Widget.fn.destroy.call(this);\r\n },\r\n\r\n _createDraggable: function() {\r\n var that = this,\r\n element = that.element,\r\n options = that.options;\r\n\r\n return new kendo.ui.Draggable(element, {\r\n filter: options.filter,\r\n hint: kendo.isFunction(options.hint) ? options.hint : $(options.hint),\r\n holdToDrag: options.holdToDrag,\r\n container: options.container ? $(options.container) : null,\r\n cursorOffset: options.cursorOffset,\r\n axis: options.axis,\r\n ignore: options.ignore,\r\n dragstart: $.proxy(that._dragstart, that),\r\n dragcancel: $.proxy(that._dragcancel, that),\r\n drag: $.proxy(that._drag, that),\r\n dragend: $.proxy(that._dragend, that)\r\n });\r\n },\r\n\r\n _dragstart: function(e) {\r\n var draggedElement = this.draggedElement = e.currentTarget,\r\n target = e.target || kendo.elementUnderCursor(e),\r\n disabled = this.options.disabled,\r\n handler = this.options.handler,\r\n _placeholder = this.options.placeholder,\r\n placeholder = this.placeholder = kendo.isFunction(_placeholder) ? $(_placeholder.call(this, draggedElement)) : $(_placeholder);\r\n\r\n if(disabled && draggedElement.is(disabled)) {\r\n e.preventDefault();\r\n } else if(handler && !$(target).is(handler)) {\r\n e.preventDefault();\r\n } else {\r\n\r\n if(this.trigger(START, { item: draggedElement, draggableEvent: e })) {\r\n e.preventDefault();\r\n } else {\r\n this.floating = this._isFloating(draggedElement);\r\n draggedElement.css(\"display\", \"none\");\r\n draggedElement.before(placeholder);\r\n\r\n this._setCursor();\r\n }\r\n\r\n }\r\n },\r\n\r\n _dragcancel: function(e) {\r\n this._cancel();\r\n this.trigger(CANCEL, { item: this.draggedElement });\r\n\r\n this._resetCursor();\r\n },\r\n\r\n _drag: function(e) {\r\n var draggedElement = this.draggedElement,\r\n target = this._findTarget(e),\r\n targetCenter,\r\n cursorOffset = { left: e.x.location, top: e.y.location },\r\n offsetDelta,\r\n axisDelta = { x: e.x.delta, y: e.y.delta },\r\n direction,\r\n sibling,\r\n getSibling,\r\n axis = this.options.axis,\r\n eventData = { item: draggedElement, list: this, draggableEvent: e };\r\n\r\n if(axis === \"x\" || axis === \"y\") {\r\n this._movementByAxis(axis, cursorOffset, axisDelta[axis], eventData);\r\n return;\r\n }\r\n\r\n if(target) {\r\n targetCenter = this._getElementCenter(target.element);\r\n\r\n offsetDelta = {\r\n left: Math.round(cursorOffset.left - targetCenter.left),\r\n top: Math.round(cursorOffset.top - targetCenter.top)\r\n };\r\n\r\n $.extend(eventData, { target: target.element });\r\n\r\n if(target.appendToBottom) {\r\n this._movePlaceholder(target, null, eventData);\r\n return;\r\n }\r\n\r\n if(target.appendAfterHidden) {\r\n this._movePlaceholder(target, \"next\", eventData);\r\n }\r\n if(this.floating) { //horizontal\r\n if(axisDelta.x < 0 && offsetDelta.left < 0) {\r\n direction = \"prev\";\r\n } else if(axisDelta.x > 0 && offsetDelta.left > 0) {\r\n direction = \"next\";\r\n }\r\n } else { //vertical\r\n if(axisDelta.y < 0 && offsetDelta.top < 0) {\r\n direction = \"prev\";\r\n } else if(axisDelta.y > 0 && offsetDelta.top > 0) {\r\n direction = \"next\";\r\n }\r\n }\r\n\r\n if(direction) {\r\n getSibling = (direction === \"prev\") ? jQuery.fn.prev : jQuery.fn.next;\r\n\r\n sibling = getSibling.call(target.element);\r\n\r\n //find the prev/next visible sibling\r\n while(sibling.length && !sibling.is(\":visible\")) {\r\n sibling = getSibling.call(sibling);\r\n }\r\n\r\n if(sibling[0] != this.placeholder[0]) {\r\n this._movePlaceholder(target, direction, eventData);\r\n }\r\n }\r\n }\r\n },\r\n\r\n _dragend: function(e) {\r\n var placeholder = this.placeholder,\r\n draggedElement = this.draggedElement,\r\n draggedIndex = this.indexOf(draggedElement),\r\n placeholderIndex = this.indexOf(placeholder),\r\n connectWith = this.options.connectWith,\r\n connectedList,\r\n isDefaultPrevented,\r\n eventData,\r\n connectedListEventData;\r\n\r\n this._resetCursor();\r\n\r\n eventData = {\r\n action: ACTION_SORT,\r\n item: draggedElement,\r\n oldIndex: draggedIndex,\r\n newIndex: placeholderIndex,\r\n draggableEvent: e\r\n };\r\n\r\n if(placeholderIndex >= 0) {\r\n isDefaultPrevented = this.trigger(END, eventData);\r\n } else {\r\n connectedList = placeholder.parents(connectWith).getKendoSortable();\r\n\r\n eventData.action = ACTION_REMOVE;\r\n connectedListEventData = $.extend({}, eventData, {\r\n action: ACTION_RECEIVE,\r\n oldIndex: MISSING_INDEX,\r\n newIndex: connectedList.indexOf(placeholder)\r\n });\r\n\r\n isDefaultPrevented = !(!this.trigger(END, eventData) && !connectedList.trigger(END, connectedListEventData));\r\n }\r\n\r\n if(isDefaultPrevented || placeholderIndex === draggedIndex) {\r\n this._cancel();\r\n return;\r\n }\r\n\r\n placeholder.replaceWith(draggedElement);\r\n\r\n draggedElement.show();\r\n this._draggable.dropped = true;\r\n\r\n eventData = {\r\n action: this.indexOf(draggedElement) != MISSING_INDEX ? ACTION_SORT : ACTION_REMOVE,\r\n item: draggedElement,\r\n oldIndex: draggedIndex,\r\n newIndex: this.indexOf(draggedElement),\r\n draggableEvent: e\r\n };\r\n\r\n this.trigger(CHANGE, eventData);\r\n\r\n if(connectedList) {\r\n connectedListEventData = $.extend({}, eventData, {\r\n action: ACTION_RECEIVE,\r\n oldIndex: MISSING_INDEX,\r\n newIndex: connectedList.indexOf(draggedElement)\r\n });\r\n\r\n connectedList.trigger(CHANGE, connectedListEventData);\r\n }\r\n\r\n },\r\n\r\n _findTarget: function(e) {\r\n var element = this._findElementUnderCursor(e),\r\n items,\r\n connectWith = this.options.connectWith,\r\n node;\r\n\r\n if($.contains(this.element[0], element)) { //the element is part of the sortable container\r\n items = this.items();\r\n node = items.filter(element)[0] || items.has(element)[0];\r\n\r\n return node ? { element: $(node), sortable: this } : null;\r\n } else if (this.element[0] == element && this._isEmpty()) {\r\n return { element: this.element, sortable: this, appendToBottom: true };\r\n } else if (this.element[0] == element && this._isLastHidden()) {\r\n node = this.items().eq(0);\r\n return { element: node , sortable: this, appendAfterHidden: true };\r\n } else if (connectWith) { //connected lists are present\r\n return this._searchConnectedTargets(element, e);\r\n }\r\n },\r\n\r\n _findElementUnderCursor: function(e) {\r\n var elementUnderCursor = kendo.elementUnderCursor(e),\r\n draggable = e.sender,\r\n disabled = this.options.disabled,\r\n filter = this.options.filter,\r\n items = this.items();\r\n\r\n if(containsOrEqualTo(draggable.hint[0], elementUnderCursor)) {\r\n draggable.hint.hide();\r\n elementUnderCursor = kendo.elementUnderCursor(e);\r\n // IE8 does not return the element in iframe from first attempt\r\n if (!elementUnderCursor) {\r\n elementUnderCursor = kendo.elementUnderCursor(e);\r\n }\r\n draggable.hint.show();\r\n }\r\n\r\n return elementUnderCursor;\r\n },\r\n\r\n _searchConnectedTargets: function(element, e) {\r\n var connected = $(this.options.connectWith),\r\n sortableInstance,\r\n items,\r\n node;\r\n\r\n for (var i = 0; i < connected.length; i++) {\r\n sortableInstance = connected.eq(i).getKendoSortable();\r\n\r\n if($.contains(connected[i], element)) {\r\n if(sortableInstance) {\r\n items = sortableInstance.items();\r\n node = items.filter(element)[0] || items.has(element)[0];\r\n\r\n if(node) {\r\n sortableInstance.placeholder = this.placeholder;\r\n return { element: $(node), sortable: sortableInstance };\r\n } else {\r\n return null;\r\n }\r\n }\r\n } else if(connected[i] == element) {\r\n if(sortableInstance && sortableInstance._isEmpty()) {\r\n return { element: connected.eq(i), sortable: sortableInstance, appendToBottom: true };\r\n } else if (this._isCursorAfterLast(sortableInstance, e)) {\r\n node = sortableInstance.items().last();\r\n return { element: node, sortable: sortableInstance };\r\n }\r\n }\r\n }\r\n\r\n },\r\n\r\n _isCursorAfterLast: function(sortable, e) {\r\n var lastItem = sortable.items().last(),\r\n cursorOffset = { left: e.x.location, top: e.y.location },\r\n lastItemOffset,\r\n delta;\r\n\r\n lastItemOffset = kendo.getOffset(lastItem);\r\n lastItemOffset.top += lastItem.outerHeight();\r\n lastItemOffset.left += lastItem.outerWidth();\r\n\r\n if(this.floating) { //horizontal\r\n delta = lastItemOffset.left - cursorOffset.left;\r\n } else { //vertical\r\n delta = lastItemOffset.top - cursorOffset.top;\r\n }\r\n\r\n return delta < 0 ? true : false;\r\n },\r\n\r\n _movementByAxis: function(axis, cursorOffset, delta, eventData) {\r\n var cursorPosition = (axis === \"x\") ? cursorOffset.left : cursorOffset.top,\r\n target = (delta < 0) ? this.placeholder.prev() : this.placeholder.next(),\r\n targetCenter;\r\n\r\n if (target.length && !target.is(\":visible\")) {\r\n target = (delta <0) ? target.prev() : target.next();\r\n }\r\n\r\n $.extend(eventData, { target: target });\r\n targetCenter = this._getElementCenter(target);\r\n\r\n if (targetCenter) {\r\n targetCenter = (axis === \"x\") ? targetCenter.left : targetCenter.top;\r\n }\r\n\r\n if (target.length && delta < 0 && cursorPosition - targetCenter < 0) { //prev\r\n this._movePlaceholder({ element: target, sortable: this }, \"prev\", eventData);\r\n } else if (target.length && delta > 0 && cursorPosition - targetCenter > 0) { //next\r\n this._movePlaceholder({ element: target, sortable: this }, \"next\", eventData);\r\n }\r\n },\r\n\r\n _movePlaceholder: function(target, direction, eventData) {\r\n var placeholder = this.placeholder;\r\n\r\n if (!target.sortable.trigger(BEFORE_MOVE, eventData)) {\r\n\r\n if (!direction) {\r\n target.element.append(placeholder);\r\n } else if (direction === \"prev\") {\r\n target.element.before(placeholder);\r\n } else if (direction === \"next\") {\r\n target.element.after(placeholder);\r\n }\r\n\r\n target.sortable.trigger(MOVE, eventData);\r\n }\r\n },\r\n\r\n _setCursor: function() {\r\n var cursor = this.options.cursor,\r\n body;\r\n\r\n if(cursor && cursor !== \"auto\") {\r\n body = $(document.body);\r\n\r\n this._originalCursorType = body.css(\"cursor\");\r\n body.css({ \"cursor\": cursor });\r\n\r\n if(!this._cursorStylesheet) {\r\n this._cursorStylesheet = $(\"\");\r\n }\r\n\r\n this._cursorStylesheet.appendTo(body);\r\n }\r\n },\r\n\r\n _resetCursor: function() {\r\n if(this._originalCursorType) {\r\n $(document.body).css(\"cursor\", this._originalCursorType);\r\n this._originalCursorType = null;\r\n\r\n this._cursorStylesheet.remove();\r\n }\r\n },\r\n\r\n _getElementCenter: function(element) {\r\n var center = element.length ? kendo.getOffset(element) : null;\r\n if(center) {\r\n center.top += element.outerHeight() / 2;\r\n center.left += element.outerWidth() / 2;\r\n }\r\n\r\n return center;\r\n },\r\n\r\n _isFloating: function(item) {\r\n return (/left|right/).test(item.css(\"float\")) || (/inline|table-cell/).test(item.css(\"display\"));\r\n },\r\n\r\n _cancel: function() {\r\n this.draggedElement.show();\r\n this.placeholder.remove();\r\n },\r\n\r\n _items: function() {\r\n var filter = this.options.filter,\r\n items;\r\n\r\n if(filter) {\r\n items = this.element.find(filter);\r\n } else {\r\n items = this.element.children();\r\n }\r\n\r\n return items;\r\n },\r\n\r\n indexOf: function(element) {\r\n var items = this._items(),\r\n placeholder = this.placeholder,\r\n draggedElement = this.draggedElement;\r\n\r\n if(placeholder && element[0] == placeholder[0]) {\r\n return items.not(draggedElement).index(element);\r\n } else {\r\n return items.not(placeholder).index(element);\r\n }\r\n },\r\n\r\n items: function() {\r\n var placeholder = this.placeholder,\r\n items = this._items();\r\n\r\n if(placeholder) {\r\n items = items.not(placeholder);\r\n }\r\n\r\n return items;\r\n },\r\n\r\n _isEmpty: function() {\r\n return !this.items().length;\r\n },\r\n _isLastHidden: function() {\r\n return this.items().length === 1 && this.items().is(\":hidden\");\r\n }\r\n\r\n });\r\n\r\n kendo.ui.plugin(Sortable);\r\n})(window.kendo.jQuery);\r\n\r\nreturn window.kendo;\r\n\r\n}, typeof define == 'function' && define.amd ? define : function(_, f){ f(); });","/*\r\n* Kendo UI Complete v2014.1.318 (http://kendoui.com)\r\n* Copyright 2014 Telerik AD. All rights reserved.\r\n*\r\n* Kendo UI Complete commercial licenses may be obtained at\r\n* http://www.telerik.com/purchase/license-agreement/kendo-ui-complete\r\n* If you do not own a commercial license, this file shall be governed by the trial license terms.\r\n*/\r\n(function(f, define){\r\n define([ \"./kendo.core\" ], f);\r\n})(function(){\r\n\r\n(function ($, undefined) {\r\n var kendo = window.kendo,\r\n support = kendo.support,\r\n document = window.document,\r\n Class = kendo.Class,\r\n Observable = kendo.Observable,\r\n now = $.now,\r\n extend = $.extend,\r\n OS = support.mobileOS,\r\n invalidZeroEvents = OS && OS.android,\r\n DEFAULT_MIN_HOLD = 800,\r\n DEFAULT_THRESHOLD = support.browser.msie ? 5 : 0, // WP8 and W8 are very sensitive and always report move.\r\n\r\n // UserEvents events\r\n PRESS = \"press\",\r\n HOLD = \"hold\",\r\n SELECT = \"select\",\r\n START = \"start\",\r\n MOVE = \"move\",\r\n END = \"end\",\r\n CANCEL = \"cancel\",\r\n TAP = \"tap\",\r\n RELEASE = \"release\",\r\n GESTURESTART = \"gesturestart\",\r\n GESTURECHANGE = \"gesturechange\",\r\n GESTUREEND = \"gestureend\",\r\n GESTURETAP = \"gesturetap\";\r\n\r\n function touchDelta(touch1, touch2) {\r\n var x1 = touch1.x.location,\r\n y1 = touch1.y.location,\r\n x2 = touch2.x.location,\r\n y2 = touch2.y.location,\r\n dx = x1 - x2,\r\n dy = y1 - y2;\r\n\r\n return {\r\n center: {\r\n x: (x1 + x2) / 2,\r\n y: (y1 + y2) / 2\r\n },\r\n\r\n distance: Math.sqrt(dx*dx + dy*dy)\r\n };\r\n }\r\n\r\n function getTouches(e) {\r\n var touches = [],\r\n originalEvent = e.originalEvent,\r\n currentTarget = e.currentTarget,\r\n idx = 0, length,\r\n changedTouches,\r\n touch;\r\n\r\n if (e.api) {\r\n touches.push({\r\n id: 2, // hardcoded ID for API call;\r\n event: e,\r\n target: e.target,\r\n currentTarget: e.target,\r\n location: e\r\n });\r\n }\r\n else if (e.type.match(/touch/)) {\r\n changedTouches = originalEvent ? originalEvent.changedTouches : [];\r\n for (length = changedTouches.length; idx < length; idx ++) {\r\n touch = changedTouches[idx];\r\n touches.push({\r\n location: touch,\r\n event: e,\r\n target: touch.target,\r\n currentTarget: currentTarget,\r\n id: touch.identifier\r\n });\r\n }\r\n }\r\n else if (support.pointers || support.msPointers) {\r\n touches.push({\r\n location: originalEvent,\r\n event: e,\r\n target: e.target,\r\n currentTarget: currentTarget,\r\n id: originalEvent.pointerId\r\n });\r\n } else {\r\n touches.push({\r\n id: 1, // hardcoded ID for mouse event;\r\n event: e,\r\n target: e.target,\r\n currentTarget: currentTarget,\r\n location: e\r\n });\r\n }\r\n\r\n return touches;\r\n }\r\n\r\n var TouchAxis = Class.extend({\r\n init: function(axis, location) {\r\n var that = this;\r\n\r\n that.axis = axis;\r\n\r\n that._updateLocationData(location);\r\n\r\n that.startLocation = that.location;\r\n that.velocity = that.delta = 0;\r\n that.timeStamp = now();\r\n },\r\n\r\n move: function(location) {\r\n var that = this,\r\n offset = location[\"page\" + that.axis],\r\n timeStamp = now(),\r\n timeDelta = (timeStamp - that.timeStamp) || 1; // Firing manually events in tests can make this 0;\r\n\r\n if (!offset && invalidZeroEvents) {\r\n return;\r\n }\r\n\r\n that.delta = offset - that.location;\r\n\r\n that._updateLocationData(location);\r\n\r\n that.initialDelta = offset - that.startLocation;\r\n that.velocity = that.delta / timeDelta;\r\n that.timeStamp = timeStamp;\r\n },\r\n\r\n _updateLocationData: function(location) {\r\n var that = this, axis = that.axis;\r\n\r\n that.location = location[\"page\" + axis];\r\n that.client = location[\"client\" + axis];\r\n that.screen = location[\"screen\" + axis];\r\n }\r\n });\r\n\r\n var Touch = Class.extend({\r\n init: function(userEvents, target, touchInfo) {\r\n extend(this, {\r\n x: new TouchAxis(\"X\", touchInfo.location),\r\n y: new TouchAxis(\"Y\", touchInfo.location),\r\n userEvents: userEvents,\r\n target: target,\r\n currentTarget: touchInfo.currentTarget,\r\n initialTouch: touchInfo.target,\r\n id: touchInfo.id,\r\n pressEvent: touchInfo,\r\n _moved: false,\r\n _finished: false\r\n });\r\n },\r\n\r\n press: function() {\r\n this._holdTimeout = setTimeout($.proxy(this, \"_hold\"), this.userEvents.minHold);\r\n this._trigger(PRESS, this.pressEvent);\r\n },\r\n\r\n _hold: function() {\r\n this._trigger(HOLD, this.pressEvent);\r\n },\r\n\r\n move: function(touchInfo) {\r\n var that = this;\r\n\r\n if (that._finished) { return; }\r\n\r\n that.x.move(touchInfo.location);\r\n that.y.move(touchInfo.location);\r\n\r\n if (!that._moved) {\r\n if (that._withinIgnoreThreshold()) {\r\n return;\r\n }\r\n\r\n if (!UserEvents.current || UserEvents.current === that.userEvents) {\r\n that._start(touchInfo);\r\n } else {\r\n return that.dispose();\r\n }\r\n }\r\n\r\n // Event handlers may cancel the drag in the START event handler, hence the double check for pressed.\r\n if (!that._finished) {\r\n that._trigger(MOVE, touchInfo);\r\n }\r\n },\r\n\r\n end: function(touchInfo) {\r\n var that = this;\r\n\r\n that.endTime = now();\r\n\r\n if (that._finished) { return; }\r\n\r\n // Mark the object as finished if there are blocking operations in the event handlers (alert/confirm)\r\n that._finished = true;\r\n\r\n if (that._moved) {\r\n that._trigger(END, touchInfo);\r\n } else {\r\n that._trigger(TAP, touchInfo);\r\n }\r\n\r\n clearTimeout(that._holdTimeout);\r\n that._trigger(RELEASE, touchInfo);\r\n\r\n that.dispose();\r\n },\r\n\r\n dispose: function() {\r\n var userEvents = this.userEvents,\r\n activeTouches = userEvents.touches;\r\n\r\n this._finished = true;\r\n this.pressEvent = null;\r\n clearTimeout(this._holdTimeout);\r\n\r\n activeTouches.splice($.inArray(this, activeTouches), 1);\r\n },\r\n\r\n skip: function() {\r\n this.dispose();\r\n },\r\n\r\n cancel: function() {\r\n this.dispose();\r\n },\r\n\r\n isMoved: function() {\r\n return this._moved;\r\n },\r\n\r\n _start: function(touchInfo) {\r\n clearTimeout(this._holdTimeout);\r\n\r\n this.startTime = now();\r\n this._moved = true;\r\n this._trigger(START, touchInfo);\r\n },\r\n\r\n _trigger: function(name, touchInfo) {\r\n var that = this,\r\n jQueryEvent = touchInfo.event,\r\n data = {\r\n touch: that,\r\n x: that.x,\r\n y: that.y,\r\n target: that.target,\r\n event: jQueryEvent\r\n };\r\n\r\n if(that.userEvents.notify(name, data)) {\r\n jQueryEvent.preventDefault();\r\n }\r\n },\r\n\r\n _withinIgnoreThreshold: function() {\r\n var xDelta = this.x.initialDelta,\r\n yDelta = this.y.initialDelta;\r\n\r\n return Math.sqrt(xDelta * xDelta + yDelta * yDelta) <= this.userEvents.threshold;\r\n }\r\n });\r\n\r\n function preventTrigger(e) {\r\n e.preventDefault();\r\n\r\n var target = $(e.data.root), // Determine the correct parent to receive the event and bubble.\r\n parent = target.closest(\".k-widget\").parent();\r\n\r\n if (!parent[0]) {\r\n parent = target.parent();\r\n }\r\n\r\n var fakeEventData = $.extend(true, {}, e, { target: target[0] });\r\n parent.trigger($.Event(e.type, fakeEventData));\r\n }\r\n\r\n function withEachUpEvent(callback) {\r\n var downEvents = kendo.eventMap.up.split(\" \"),\r\n idx = 0,\r\n length = downEvents.length;\r\n\r\n for(; idx < length; idx ++) {\r\n callback(downEvents[idx]);\r\n }\r\n }\r\n\r\n var UserEvents = Observable.extend({\r\n init: function(element, options) {\r\n var that = this,\r\n filter,\r\n ns = kendo.guid();\r\n\r\n options = options || {};\r\n filter = that.filter = options.filter;\r\n that.threshold = options.threshold || DEFAULT_THRESHOLD;\r\n that.minHold = options.minHold || DEFAULT_MIN_HOLD;\r\n that.touches = [];\r\n that._maxTouches = options.multiTouch ? 2 : 1;\r\n that.allowSelection = options.allowSelection;\r\n that.captureUpIfMoved = options.captureUpIfMoved;\r\n that.eventNS = ns;\r\n\r\n element = $(element).handler(that);\r\n Observable.fn.init.call(that);\r\n\r\n extend(that, {\r\n element: element,\r\n surface: options.global ? $(document.documentElement) : $(options.surface || element),\r\n stopPropagation: options.stopPropagation,\r\n pressed: false\r\n });\r\n\r\n that.surface.handler(that)\r\n .on(kendo.applyEventMap(\"move\", ns), \"_move\")\r\n .on(kendo.applyEventMap(\"up cancel\", ns), \"_end\");\r\n\r\n element.on(kendo.applyEventMap(\"down\", ns), filter, \"_start\");\r\n\r\n if (support.pointers || support.msPointers) {\r\n element.css(\"-ms-touch-action\", \"pinch-zoom double-tap-zoom\");\r\n }\r\n\r\n if (options.preventDragEvent) {\r\n element.on(kendo.applyEventMap(\"dragstart\", ns), kendo.preventDefault);\r\n }\r\n\r\n element.on(kendo.applyEventMap(\"mousedown selectstart\", ns), filter, { root: element }, \"_select\");\r\n\r\n if (that.captureUpIfMoved && support.eventCapture) {\r\n var surfaceElement = that.surface[0],\r\n preventIfMovingProxy = $.proxy(that.preventIfMoving, that);\r\n\r\n withEachUpEvent(function(eventName) {\r\n surfaceElement.addEventListener(eventName, preventIfMovingProxy, true);\r\n });\r\n }\r\n\r\n that.bind([\r\n PRESS,\r\n HOLD,\r\n TAP,\r\n START,\r\n MOVE,\r\n END,\r\n RELEASE,\r\n CANCEL,\r\n GESTURESTART,\r\n GESTURECHANGE,\r\n GESTUREEND,\r\n GESTURETAP,\r\n SELECT\r\n ], options);\r\n },\r\n\r\n preventIfMoving: function(e) {\r\n if (this._isMoved()) {\r\n e.preventDefault();\r\n }\r\n },\r\n\r\n destroy: function() {\r\n var that = this;\r\n\r\n if (that._destroyed) {\r\n return;\r\n }\r\n\r\n that._destroyed = true;\r\n\r\n if (that.captureUpIfMoved && support.eventCapture) {\r\n var surfaceElement = that.surface[0];\r\n withEachUpEvent(function(eventName) {\r\n surfaceElement.removeEventListener(eventName, that.preventIfMoving);\r\n });\r\n }\r\n\r\n that.element.kendoDestroy(that.eventNS);\r\n that.surface.kendoDestroy(that.eventNS);\r\n that.element.removeData(\"handler\");\r\n that.surface.removeData(\"handler\");\r\n that._disposeAll();\r\n\r\n that.unbind();\r\n delete that.surface;\r\n delete that.element;\r\n delete that.currentTarget;\r\n },\r\n\r\n capture: function() {\r\n UserEvents.current = this;\r\n },\r\n\r\n cancel: function() {\r\n this._disposeAll();\r\n this.trigger(CANCEL);\r\n },\r\n\r\n notify: function(eventName, data) {\r\n var that = this,\r\n touches = that.touches;\r\n\r\n if (this._isMultiTouch()) {\r\n switch(eventName) {\r\n case MOVE:\r\n eventName = GESTURECHANGE;\r\n break;\r\n case END:\r\n eventName = GESTUREEND;\r\n break;\r\n case TAP:\r\n eventName = GESTURETAP;\r\n break;\r\n }\r\n\r\n extend(data, {touches: touches}, touchDelta(touches[0], touches[1]));\r\n }\r\n\r\n return this.trigger(eventName, data);\r\n },\r\n\r\n // API\r\n press: function(x, y, target) {\r\n this._apiCall(\"_start\", x, y, target);\r\n },\r\n\r\n move: function(x, y) {\r\n this._apiCall(\"_move\", x, y);\r\n },\r\n\r\n end: function(x, y) {\r\n this._apiCall(\"_end\", x, y);\r\n },\r\n\r\n _isMultiTouch: function() {\r\n return this.touches.length > 1;\r\n },\r\n\r\n _maxTouchesReached: function() {\r\n return this.touches.length >= this._maxTouches;\r\n },\r\n\r\n _disposeAll: function() {\r\n var touches = this.touches;\r\n while (touches.length > 0) {\r\n touches.pop().dispose();\r\n }\r\n },\r\n\r\n _isMoved: function() {\r\n return $.grep(this.touches, function(touch) {\r\n return touch.isMoved();\r\n }).length;\r\n },\r\n\r\n _select: function(e) {\r\n if (!this.allowSelection || this.trigger(SELECT, { event: e })) {\r\n preventTrigger(e);\r\n }\r\n },\r\n\r\n _start: function(e) {\r\n var that = this,\r\n idx = 0,\r\n filter = that.filter,\r\n target,\r\n touches = getTouches(e),\r\n length = touches.length,\r\n touch,\r\n which = e.which;\r\n\r\n if (which && which > 1){\r\n return;\r\n }\r\n\r\n if (that._maxTouchesReached()) {\r\n return;\r\n }\r\n\r\n UserEvents.current = null;\r\n\r\n that.currentTarget = e.currentTarget;\r\n\r\n if (that.stopPropagation) {\r\n e.stopPropagation();\r\n }\r\n\r\n for (; idx < length; idx ++) {\r\n if (that._maxTouchesReached()) {\r\n break;\r\n }\r\n\r\n touch = touches[idx];\r\n\r\n if (filter) {\r\n target = $(touch.currentTarget); // target.is(filter) ? target : target.closest(filter, that.element);\r\n } else {\r\n target = that.element;\r\n }\r\n\r\n if (!target.length) {\r\n continue;\r\n }\r\n\r\n touch = new Touch(that, target, touch);\r\n that.touches.push(touch);\r\n touch.press();\r\n\r\n if (that._isMultiTouch()) {\r\n that.notify(\"gesturestart\", {});\r\n }\r\n }\r\n },\r\n\r\n _move: function(e) {\r\n this._eachTouch(\"move\", e);\r\n },\r\n\r\n _end: function(e) {\r\n this._eachTouch(\"end\", e);\r\n },\r\n\r\n _eachTouch: function(methodName, e) {\r\n var that = this,\r\n dict = {},\r\n touches = getTouches(e),\r\n activeTouches = that.touches,\r\n idx,\r\n touch,\r\n touchInfo,\r\n matchingTouch;\r\n\r\n for (idx = 0; idx < activeTouches.length; idx ++) {\r\n touch = activeTouches[idx];\r\n dict[touch.id] = touch;\r\n }\r\n\r\n for (idx = 0; idx < touches.length; idx ++) {\r\n touchInfo = touches[idx];\r\n matchingTouch = dict[touchInfo.id];\r\n\r\n if (matchingTouch) {\r\n matchingTouch[methodName](touchInfo);\r\n }\r\n }\r\n },\r\n\r\n _apiCall: function(type, x, y, target) {\r\n this[type]({\r\n api: true,\r\n pageX: x,\r\n pageY: y,\r\n clientX: x,\r\n clientY: y,\r\n target: $(target || this.element)[0],\r\n stopPropagation: $.noop,\r\n preventDefault: $.noop\r\n });\r\n }\r\n });\r\n\r\n UserEvents.minHold = function(value) {\r\n DEFAULT_MIN_HOLD = value;\r\n };\r\n\r\n kendo.getTouches = getTouches;\r\n kendo.touchDelta = touchDelta;\r\n kendo.UserEvents = UserEvents;\r\n })(window.kendo.jQuery);\r\n\r\nreturn window.kendo;\r\n\r\n}, typeof define == 'function' && define.amd ? define : function(_, f){ f(); });","/*\r\n* Kendo UI Complete v2014.1.318 (http://kendoui.com)\r\n* Copyright 2014 Telerik AD. All rights reserved.\r\n*\r\n* Kendo UI Complete commercial licenses may be obtained at\r\n* http://www.telerik.com/purchase/license-agreement/kendo-ui-complete\r\n* If you do not own a commercial license, this file shall be governed by the trial license terms.\r\n*/\r\n(function(f, define){\r\n define([ \"./kendo.core\" ], f);\r\n})(function(){\r\n\r\n/* jshint eqnull: true */\r\n(function($, undefined) {\r\n var kendo = window.kendo,\r\n Widget = kendo.ui.Widget,\r\n NS = \".kendoValidator\",\r\n INVALIDMSG = \"k-invalid-msg\",\r\n invalidMsgRegExp = new RegExp(INVALIDMSG,'i'),\r\n INVALIDINPUT = \"k-invalid\",\r\n emailRegExp = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([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])))$/i,\r\n 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,\r\n INPUTSELECTOR = \":input:not(:button,[type=submit],[type=reset],[disabled],[readonly])\",\r\n CHECKBOXSELECTOR = \":checkbox:not([disabled],[readonly])\",\r\n NUMBERINPUTSELECTOR = \"[type=number],[type=range]\",\r\n BLUR = \"blur\",\r\n NAME = \"name\",\r\n FORM = \"form\",\r\n NOVALIDATE = \"novalidate\",\r\n proxy = $.proxy,\r\n patternMatcher = function(value, pattern) {\r\n if (typeof pattern === \"string\") {\r\n pattern = new RegExp('^(?:' + pattern + ')$');\r\n }\r\n return pattern.test(value);\r\n },\r\n matcher = function(input, selector, pattern) {\r\n var value = input.val();\r\n\r\n if (input.filter(selector).length && value !== \"\") {\r\n return patternMatcher(value, pattern);\r\n }\r\n return true;\r\n },\r\n hasAttribute = function(input, name) {\r\n if (input.length) {\r\n return input[0].attributes[name] != null;\r\n }\r\n return false;\r\n };\r\n\r\n if (!kendo.ui.validator) {\r\n kendo.ui.validator = { rules: {}, messages: {} };\r\n }\r\n\r\n function resolveRules(element) {\r\n var resolvers = kendo.ui.validator.ruleResolvers || {},\r\n rules = {},\r\n name;\r\n\r\n for (name in resolvers) {\r\n $.extend(true, rules, resolvers[name].resolve(element));\r\n }\r\n return rules;\r\n }\r\n\r\n function decode(value) {\r\n return value.replace(/&/g, '&')\r\n .replace(/"/g, '\"')\r\n .replace(/'/g, \"'\")\r\n .replace(/</g, '<')\r\n .replace(/>/g, '>');\r\n }\r\n\r\n function numberOfDecimalDigits(value) {\r\n value = (value + \"\").split('.');\r\n if (value.length > 1) {\r\n return value[1].length;\r\n }\r\n return 0;\r\n }\r\n\r\n function parseHtml(text) {\r\n if ($.parseHTML) {\r\n return $($.parseHTML(text));\r\n }\r\n return $(text);\r\n }\r\n\r\n function searchForMessageContainer(elements, fieldName) {\r\n var containers = $(),\r\n element,\r\n attr;\r\n\r\n for (var idx = 0, length = elements.length; idx < length; idx++) {\r\n element = elements[idx];\r\n if (invalidMsgRegExp.test(element.className)) {\r\n attr = element.getAttribute(kendo.attr(\"for\"));\r\n if (attr === fieldName) {\r\n containers = containers.add(element);\r\n }\r\n }\r\n }\r\n return containers;\r\n }\r\n\r\n var Validator = Widget.extend({\r\n init: function(element, options) {\r\n var that = this,\r\n resolved = resolveRules(element);\r\n\r\n options = options || {};\r\n\r\n options.rules = $.extend({}, kendo.ui.validator.rules, resolved.rules, options.rules);\r\n options.messages = $.extend({}, kendo.ui.validator.messages, resolved.messages, options.messages);\r\n\r\n Widget.fn.init.call(that, element, options);\r\n\r\n that._errorTemplate = kendo.template(that.options.errorTemplate);\r\n\r\n if (that.element.is(FORM)) {\r\n that.element.attr(NOVALIDATE, NOVALIDATE);\r\n }\r\n\r\n that._errors = {};\r\n that._attachEvents();\r\n },\r\n\r\n events: [ \"validate\" ],\r\n\r\n options: {\r\n name: \"Validator\",\r\n errorTemplate: '' +\r\n ' #=message#',\r\n messages: {\r\n required: \"{0} is required\",\r\n pattern: \"{0} is not valid\",\r\n min: \"{0} should be greater than or equal to {1}\",\r\n max: \"{0} should be smaller than or equal to {1}\",\r\n step: \"{0} is not valid\",\r\n email: \"{0} is not valid email\",\r\n url: \"{0} is not valid URL\",\r\n date: \"{0} is not valid date\"\r\n },\r\n rules: {\r\n required: function(input) {\r\n var checkbox = input.filter(\"[type=checkbox]\").length && !input.is(\":checked\"),\r\n value = input.val();\r\n\r\n return !(hasAttribute(input, \"required\") && (value === \"\" || !value || checkbox));\r\n },\r\n pattern: function(input) {\r\n if (input.filter(\"[type=text],[type=email],[type=url],[type=tel],[type=search],[type=password]\").filter(\"[pattern]\").length && input.val() !== \"\") {\r\n return patternMatcher(input.val(), input.attr(\"pattern\"));\r\n }\r\n return true;\r\n },\r\n min: function(input) {\r\n if (input.filter(NUMBERINPUTSELECTOR + \",[\" + kendo.attr(\"type\") + \"=number]\").filter(\"[min]\").length && input.val() !== \"\") {\r\n var min = parseFloat(input.attr(\"min\")) || 0,\r\n val = kendo.parseFloat(input.val());\r\n\r\n return min <= val;\r\n }\r\n return true;\r\n },\r\n max: function(input) {\r\n if (input.filter(NUMBERINPUTSELECTOR + \",[\" + kendo.attr(\"type\") + \"=number]\").filter(\"[max]\").length && input.val() !== \"\") {\r\n var max = parseFloat(input.attr(\"max\")) || 0,\r\n val = kendo.parseFloat(input.val());\r\n\r\n return max >= val;\r\n }\r\n return true;\r\n },\r\n step: function(input) {\r\n if (input.filter(NUMBERINPUTSELECTOR + \",[\" + kendo.attr(\"type\") + \"=number]\").filter(\"[step]\").length && input.val() !== \"\") {\r\n var min = parseFloat(input.attr(\"min\")) || 0,\r\n step = parseFloat(input.attr(\"step\")) || 1,\r\n val = parseFloat(input.val()),\r\n decimals = numberOfDecimalDigits(step),\r\n raise;\r\n\r\n if (decimals) {\r\n raise = Math.pow(10, decimals);\r\n return (((val-min)*raise)%(step*raise)) / Math.pow(100, decimals) === 0;\r\n }\r\n return ((val-min)%step) === 0;\r\n }\r\n return true;\r\n },\r\n email: function(input) {\r\n return matcher(input, \"[type=email],[\" + kendo.attr(\"type\") + \"=email]\", emailRegExp);\r\n },\r\n url: function(input) {\r\n return matcher(input, \"[type=url],[\" + kendo.attr(\"type\") + \"=url]\", urlRegExp);\r\n },\r\n date: function(input) {\r\n if (input.filter(\"[type^=date],[\" + kendo.attr(\"type\") + \"=date]\").length && input.val() !== \"\") {\r\n return kendo.parseDate(input.val(), input.attr(kendo.attr(\"format\"))) !== null;\r\n }\r\n return true;\r\n }\r\n },\r\n validateOnBlur: true\r\n },\r\n\r\n destroy: function() {\r\n Widget.fn.destroy.call(this);\r\n\r\n this.element.off(NS);\r\n },\r\n\r\n _submit: function(e) {\r\n if (!this.validate()) {\r\n e.stopPropagation();\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n return false;\r\n }\r\n return true;\r\n },\r\n\r\n _attachEvents: function() {\r\n var that = this;\r\n\r\n if (that.element.is(FORM)) {\r\n that.element.on(\"submit\" + NS, proxy(that._submit, that));\r\n }\r\n\r\n if (that.options.validateOnBlur) {\r\n if (!that.element.is(INPUTSELECTOR)) {\r\n that.element.on(BLUR + NS, INPUTSELECTOR, function() {\r\n that.validateInput($(this));\r\n });\r\n\r\n that.element.on(\"click\" + NS, CHECKBOXSELECTOR, function() {\r\n that.validateInput($(this));\r\n });\r\n } else {\r\n that.element.on(BLUR + NS, function() {\r\n that.validateInput(that.element);\r\n });\r\n\r\n if (that.element.is(CHECKBOXSELECTOR)) {\r\n that.element.on(\"click\" + NS, function() {\r\n that.validateInput(that.element);\r\n });\r\n }\r\n }\r\n }\r\n },\r\n\r\n validate: function() {\r\n var inputs;\r\n var idx;\r\n var result = false;\r\n var length;\r\n\r\n this._errors = {};\r\n\r\n if (!this.element.is(INPUTSELECTOR)) {\r\n var invalid = false;\r\n\r\n inputs = this.element.find(INPUTSELECTOR);\r\n\r\n for (idx = 0, length = inputs.length; idx < length; idx++) {\r\n if (!this.validateInput(inputs.eq(idx))) {\r\n invalid = true;\r\n }\r\n }\r\n\r\n result = !invalid;\r\n } else {\r\n result = this.validateInput(this.element);\r\n }\r\n\r\n this.trigger(\"validate\", { valid: result });\r\n\r\n return result;\r\n },\r\n\r\n validateInput: function(input) {\r\n input = $(input);\r\n\r\n var that = this,\r\n template = that._errorTemplate,\r\n result = that._checkValidity(input),\r\n valid = result.valid,\r\n className = \".\" + INVALIDMSG,\r\n fieldName = (input.attr(NAME) || \"\"),\r\n lbl = that._findMessageContainer(fieldName).add(input.next(className)).hide(),\r\n messageText;\r\n\r\n input.removeAttr(\"aria-invalid\");\r\n\r\n if (!valid) {\r\n messageText = that._extractMessage(input, result.key);\r\n that._errors[fieldName] = messageText;\r\n var messageLabel = parseHtml(template({ message: decode(messageText) }));\r\n\r\n that._decorateMessageContainer(messageLabel, fieldName);\r\n\r\n if (!lbl.replaceWith(messageLabel).length) {\r\n messageLabel.insertAfter(input);\r\n }\r\n messageLabel.show();\r\n\r\n input.attr(\"aria-invalid\", true);\r\n }\r\n\r\n input.toggleClass(INVALIDINPUT, !valid);\r\n\r\n return valid;\r\n },\r\n\r\n hideMessages: function() {\r\n var that = this,\r\n className = \".\" + INVALIDMSG,\r\n element = that.element;\r\n\r\n if (!element.is(INPUTSELECTOR)) {\r\n element.find(className).hide();\r\n } else {\r\n element.next(className).hide();\r\n }\r\n },\r\n\r\n _findMessageContainer: function(fieldName) {\r\n var locators = kendo.ui.validator.messageLocators,\r\n name,\r\n containers = $();\r\n\r\n for (var idx = 0, length = this.element.length; idx < length; idx++) {\r\n containers = containers.add(searchForMessageContainer(this.element[idx].getElementsByTagName(\"*\"), fieldName));\r\n }\r\n\r\n for (name in locators) {\r\n containers = containers.add(locators[name].locate(this.element, fieldName));\r\n }\r\n\r\n return containers;\r\n },\r\n\r\n _decorateMessageContainer: function(container, fieldName) {\r\n var locators = kendo.ui.validator.messageLocators,\r\n name;\r\n\r\n container.addClass(INVALIDMSG)\r\n .attr(kendo.attr(\"for\"), fieldName || \"\");\r\n\r\n for (name in locators) {\r\n locators[name].decorate(container, fieldName);\r\n }\r\n\r\n container.attr(\"role\", \"alert\");\r\n },\r\n\r\n _extractMessage: function(input, ruleKey) {\r\n var that = this,\r\n customMessage = that.options.messages[ruleKey],\r\n fieldName = input.attr(NAME);\r\n\r\n customMessage = kendo.isFunction(customMessage) ? customMessage(input) : customMessage;\r\n\r\n return kendo.format(input.attr(kendo.attr(ruleKey + \"-msg\")) || input.attr(\"validationMessage\") || input.attr(\"title\") || customMessage || \"\", fieldName, input.attr(ruleKey));\r\n },\r\n\r\n _checkValidity: function(input) {\r\n var rules = this.options.rules,\r\n rule;\r\n\r\n for (rule in rules) {\r\n if (!rules[rule](input)) {\r\n return { valid: false, key: rule };\r\n }\r\n }\r\n\r\n return { valid: true };\r\n },\r\n\r\n errors: function() {\r\n var results = [],\r\n errors = this._errors,\r\n error;\r\n\r\n for (error in errors) {\r\n results.push(errors[error]);\r\n }\r\n return results;\r\n }\r\n });\r\n\r\n kendo.ui.plugin(Validator);\r\n})(window.kendo.jQuery);\r\n\r\nreturn window.kendo;\r\n\r\n}, typeof define == 'function' && define.amd ? define : function(_, f){ f(); });","/*\r\n* Kendo UI Complete v2014.1.318 (http://kendoui.com)\r\n* Copyright 2014 Telerik AD. All rights reserved.\r\n*\r\n* Kendo UI Complete commercial licenses may be obtained at\r\n* http://www.telerik.com/purchase/license-agreement/kendo-ui-complete\r\n* If you do not own a commercial license, this file shall be governed by the trial license terms.\r\n*/\r\n(function(f, define){\r\n define([ \"./kendo.draganddrop\" ], f);\r\n})(function(){\r\n\r\n(function($, undefined) {\r\n var kendo = window.kendo,\r\n Widget = kendo.ui.Widget,\r\n Draggable = kendo.ui.Draggable,\r\n isPlainObject = $.isPlainObject,\r\n activeElement = kendo._activeElement,\r\n proxy = $.proxy,\r\n extend = $.extend,\r\n each = $.each,\r\n template = kendo.template,\r\n BODY = \"body\",\r\n templates,\r\n NS = \".kendoWindow\",\r\n // classNames\r\n KWINDOW = \".k-window\",\r\n KWINDOWTITLE = \".k-window-title\",\r\n KWINDOWTITLEBAR = KWINDOWTITLE + \"bar\",\r\n KWINDOWCONTENT = \".k-window-content\",\r\n KWINDOWRESIZEHANDLES = \".k-resize-handle\",\r\n KOVERLAY = \".k-overlay\",\r\n KCONTENTFRAME = \"k-content-frame\",\r\n LOADING = \"k-loading\",\r\n KHOVERSTATE = \"k-state-hover\",\r\n KFOCUSEDSTATE = \"k-state-focused\",\r\n MAXIMIZEDSTATE = \"k-window-maximized\",\r\n // constants\r\n VISIBLE = \":visible\",\r\n HIDDEN = \"hidden\",\r\n CURSOR = \"cursor\",\r\n // events\r\n OPEN = \"open\",\r\n ACTIVATE = \"activate\",\r\n DEACTIVATE = \"deactivate\",\r\n CLOSE = \"close\",\r\n REFRESH = \"refresh\",\r\n RESIZE = \"resize\",\r\n DRAGSTART = \"dragstart\",\r\n DRAGEND = \"dragend\",\r\n ERROR = \"error\",\r\n OVERFLOW = \"overflow\",\r\n ZINDEX = \"zIndex\",\r\n MINIMIZE_MAXIMIZE = \".k-window-actions .k-i-minimize,.k-window-actions .k-i-maximize\",\r\n KPIN = \".k-i-pin\",\r\n KUNPIN = \".k-i-unpin\",\r\n PIN_UNPIN = KPIN + \",\" + KUNPIN,\r\n TITLEBAR_BUTTONS = \".k-window-titlebar .k-window-action\",\r\n REFRESHICON = \".k-window-titlebar .k-i-refresh\",\r\n isLocalUrl = kendo.isLocalUrl;\r\n\r\n function defined(x) {\r\n return (typeof x != \"undefined\");\r\n }\r\n\r\n function constrain(value, low, high) {\r\n return Math.max(Math.min(parseInt(value, 10), high === Infinity ? high : parseInt(high, 10)), parseInt(low, 10));\r\n }\r\n\r\n function sizingAction(actionId, callback) {\r\n return function() {\r\n var that = this,\r\n wrapper = that.wrapper,\r\n style = wrapper[0].style,\r\n options = that.options;\r\n\r\n if (options.isMaximized || options.isMinimized) {\r\n return;\r\n }\r\n\r\n that.restoreOptions = {\r\n width: style.width,\r\n height: style.height\r\n };\r\n\r\n wrapper\r\n .children(KWINDOWRESIZEHANDLES).hide().end()\r\n .children(KWINDOWTITLEBAR).find(MINIMIZE_MAXIMIZE).parent().hide()\r\n .eq(0).before(templates.action({ name: \"Restore\" }));\r\n\r\n callback.call(that);\r\n\r\n if (actionId == \"maximize\") {\r\n that.wrapper.children(KWINDOWTITLEBAR).find(PIN_UNPIN).parent().hide();\r\n } else {\r\n that.wrapper.children(KWINDOWTITLEBAR).find(PIN_UNPIN).parent().show();\r\n }\r\n\r\n return that;\r\n };\r\n }\r\n\r\n function executableScript() {\r\n return !this.type || this.type.toLowerCase().indexOf(\"script\") >= 0;\r\n }\r\n\r\n var Window = Widget.extend({\r\n init: function(element, options) {\r\n var that = this,\r\n wrapper,\r\n offset = {},\r\n visibility, display, position,\r\n isVisible = false,\r\n content,\r\n windowContent,\r\n suppressActions = options && options.actions && !options.actions.length,\r\n id;\r\n\r\n Widget.fn.init.call(that, element, options);\r\n options = that.options;\r\n position = options.position;\r\n element = that.element;\r\n content = options.content;\r\n\r\n if (suppressActions) {\r\n options.actions = [];\r\n }\r\n\r\n that.appendTo = $(options.appendTo);\r\n\r\n that._animations();\r\n\r\n if (content && !isPlainObject(content)) {\r\n content = options.content = { url: content };\r\n }\r\n\r\n // remove script blocks to prevent double-execution\r\n element.find(\"script\").filter(executableScript).remove();\r\n\r\n if (!element.parent().is(that.appendTo) && (position.top === undefined || position.left === undefined)) {\r\n if (element.is(VISIBLE)) {\r\n offset = element.offset();\r\n isVisible = true;\r\n } else {\r\n visibility = element.css(\"visibility\");\r\n display = element.css(\"display\");\r\n\r\n element.css({ visibility: HIDDEN, display: \"\" });\r\n offset = element.offset();\r\n element.css({ visibility: visibility, display: display });\r\n }\r\n\r\n if (position.top === undefined) {\r\n position.top = offset.top;\r\n }\r\n if (position.left === undefined) {\r\n position.left = offset.left;\r\n }\r\n }\r\n\r\n if (!defined(options.visible) || options.visible === null) {\r\n options.visible = element.is(VISIBLE);\r\n }\r\n\r\n wrapper = that.wrapper = element.closest(KWINDOW);\r\n\r\n if (!element.is(\".k-content\") || !wrapper[0]) {\r\n element.addClass(\"k-window-content k-content\");\r\n that._createWindow(element, options);\r\n wrapper = that.wrapper = element.closest(KWINDOW);\r\n\r\n that._dimensions();\r\n }\r\n\r\n that._position();\r\n\r\n if (options.pinned) {\r\n that.pin(true);\r\n }\r\n\r\n if (content) {\r\n that.refresh(content);\r\n }\r\n\r\n if (options.visible) {\r\n that.toFront();\r\n }\r\n\r\n windowContent = wrapper.children(KWINDOWCONTENT);\r\n that._tabindex(windowContent);\r\n\r\n if (options.visible && options.modal) {\r\n that._overlay(wrapper.is(VISIBLE)).css({ opacity: 0.5 });\r\n }\r\n\r\n wrapper\r\n .on(\"mouseenter\" + NS, TITLEBAR_BUTTONS, proxy(that._buttonEnter, that))\r\n .on(\"mouseleave\" + NS, TITLEBAR_BUTTONS, proxy(that._buttonLeave, that))\r\n .on(\"click\" + NS, \"> \" + TITLEBAR_BUTTONS, proxy(that._windowActionHandler, that));\r\n\r\n windowContent\r\n .on(\"keydown\" + NS, proxy(that._keydown, that))\r\n .on(\"focus\" + NS, proxy(that._focus, that))\r\n .on(\"blur\" + NS, proxy(that._blur, that));\r\n\r\n this._resizable();\r\n\r\n this._draggable();\r\n\r\n id = element.attr(\"id\");\r\n if (id) {\r\n id = id + \"_wnd_title\";\r\n wrapper.children(KWINDOWTITLEBAR)\r\n .children(KWINDOWTITLE)\r\n .attr(\"id\", id);\r\n\r\n windowContent\r\n .attr({\r\n \"role\": \"dialog\",\r\n \"aria-labelledby\": id\r\n });\r\n }\r\n\r\n wrapper.add(wrapper.children(\".k-resize-handle,\" + KWINDOWTITLEBAR))\r\n .on(\"mousedown\" + NS, proxy(that.toFront, that));\r\n\r\n that.touchScroller = kendo.touchScroller(element);\r\n\r\n that._resizeHandler = proxy(that._onDocumentResize, that);\r\n\r\n $(window).on(\"resize\", that._resizeHandler);\r\n\r\n if (options.visible) {\r\n that.trigger(OPEN);\r\n that.trigger(ACTIVATE);\r\n }\r\n\r\n kendo.notify(that);\r\n },\r\n\r\n _buttonEnter: function() {\r\n $(this).addClass(KHOVERSTATE);\r\n },\r\n\r\n _buttonLeave: function() {\r\n $(this).removeClass(KHOVERSTATE);\r\n },\r\n\r\n _focus: function() {\r\n this.wrapper.addClass(KFOCUSEDSTATE);\r\n },\r\n\r\n _blur: function() {\r\n this.wrapper.removeClass(KFOCUSEDSTATE);\r\n },\r\n\r\n _dimensions: function() {\r\n var wrapper = this.wrapper;\r\n var options = this.options;\r\n var width = options.width;\r\n var height = options.height;\r\n var maxHeight = options.maxHeight;\r\n var dimensions = [\"minWidth\",\"minHeight\",\"maxWidth\",\"maxHeight\"];\r\n\r\n this.title(options.title);\r\n\r\n for (var i = 0; i < dimensions.length; i++) {\r\n var value = options[dimensions[i]];\r\n if (value && value != Infinity) {\r\n wrapper.css(dimensions[i], value);\r\n }\r\n }\r\n\r\n if (maxHeight && maxHeight != Infinity) {\r\n this.element.css(\"maxHeight\", maxHeight);\r\n }\r\n\r\n if (width) {\r\n if (width.toString().indexOf(\"%\") > 0) {\r\n wrapper.width(width);\r\n } else {\r\n wrapper.width(constrain(width, options.minWidth, options.maxWidth));\r\n }\r\n }\r\n\r\n if (height) {\r\n if (height.toString().indexOf(\"%\") > 0) {\r\n wrapper.height(height);\r\n } else {\r\n wrapper.height(constrain(height, options.minHeight, options.maxHeight));\r\n }\r\n }\r\n\r\n if (!options.visible) {\r\n wrapper.hide();\r\n }\r\n },\r\n\r\n _position: function() {\r\n var wrapper = this.wrapper,\r\n position = this.options.position;\r\n\r\n if (position.top === 0) {\r\n position.top = position.top.toString();\r\n }\r\n\r\n if (position.left === 0) {\r\n position.left = position.left.toString();\r\n }\r\n\r\n wrapper.css({\r\n top: position.top || \"\",\r\n left: position.left || \"\"\r\n });\r\n },\r\n\r\n _animations: function() {\r\n var options = this.options;\r\n\r\n if (options.animation === false) {\r\n options.animation = { open: { effects: {} }, close: { hide: true, effects: {} } };\r\n }\r\n },\r\n\r\n _resize: function() {\r\n kendo.resize(this.element.children());\r\n },\r\n\r\n _resizable: function() {\r\n var resizable = this.options.resizable;\r\n var wrapper = this.wrapper;\r\n\r\n if (this.resizing) {\r\n wrapper\r\n .off(\"dblclick\" + NS)\r\n .children(KWINDOWRESIZEHANDLES).remove();\r\n\r\n this.resizing.destroy();\r\n this.resizing = null;\r\n }\r\n\r\n if (resizable) {\r\n wrapper.on(\"dblclick\" + NS, KWINDOWTITLEBAR, proxy(function(e) {\r\n if (!$(e.target).closest(\".k-window-action\").length) {\r\n this.toggleMaximization();\r\n }\r\n }, this));\r\n\r\n each(\"n e s w se sw ne nw\".split(\" \"), function(index, handler) {\r\n wrapper.append(templates.resizeHandle(handler));\r\n });\r\n\r\n this.resizing = new WindowResizing(this);\r\n }\r\n\r\n wrapper = null;\r\n },\r\n\r\n _draggable: function() {\r\n var draggable = this.options.draggable;\r\n\r\n if (this.dragging) {\r\n this.dragging.destroy();\r\n this.dragging = null;\r\n }\r\n if (draggable) {\r\n this.dragging = new WindowDragging(this, draggable.dragHandle || KWINDOWTITLEBAR);\r\n }\r\n },\r\n\r\n setOptions: function(options) {\r\n Widget.fn.setOptions.call(this, options);\r\n this._animations();\r\n this._dimensions();\r\n this._position();\r\n this._resizable();\r\n this._draggable();\r\n },\r\n\r\n events:[\r\n OPEN,\r\n ACTIVATE,\r\n DEACTIVATE,\r\n CLOSE,\r\n REFRESH,\r\n RESIZE,\r\n DRAGSTART,\r\n DRAGEND,\r\n ERROR\r\n ],\r\n\r\n options: {\r\n name: \"Window\",\r\n animation: {\r\n open: {\r\n effects: { zoom: { direction: \"in\" }, fade: { direction: \"in\" } },\r\n duration: 350\r\n },\r\n close: {\r\n effects: { zoom: { direction: \"out\", properties: { scale: 0.7 } }, fade: { direction: \"out\" } },\r\n duration: 350,\r\n hide: true\r\n }\r\n },\r\n title: \"\",\r\n actions: [\"Close\"],\r\n autoFocus: true,\r\n modal: false,\r\n resizable: true,\r\n draggable: true,\r\n minWidth: 90,\r\n minHeight: 50,\r\n maxWidth: Infinity,\r\n maxHeight: Infinity,\r\n pinned: false,\r\n position: {},\r\n content: null,\r\n visible: null,\r\n height: null,\r\n width: null,\r\n appendTo: \"body\"\r\n },\r\n\r\n _closable: function() {\r\n return $.inArray(\"close\", $.map(this.options.actions, function(x) { return x.toLowerCase(); })) > -1;\r\n },\r\n\r\n _keydown: function(e) {\r\n var that = this,\r\n options = that.options,\r\n keys = kendo.keys,\r\n keyCode = e.keyCode,\r\n wrapper = that.wrapper,\r\n offset, handled,\r\n distance = 10,\r\n isMaximized = that.options.isMaximized,\r\n newWidth, newHeight, w, h;\r\n\r\n if (e.target != e.currentTarget || that._closing) {\r\n return;\r\n }\r\n\r\n if (keyCode == keys.ESC && that._closable()) {\r\n that._close(false);\r\n }\r\n\r\n if (options.draggable && !e.ctrlKey && !isMaximized) {\r\n offset = kendo.getOffset(wrapper);\r\n\r\n if (keyCode == keys.UP) {\r\n handled = wrapper.css(\"top\", offset.top - distance);\r\n } else if (keyCode == keys.DOWN) {\r\n handled = wrapper.css(\"top\", offset.top + distance);\r\n } else if (keyCode == keys.LEFT) {\r\n handled = wrapper.css(\"left\", offset.left - distance);\r\n } else if (keyCode == keys.RIGHT) {\r\n handled = wrapper.css(\"left\", offset.left + distance);\r\n }\r\n }\r\n\r\n if (options.resizable && e.ctrlKey && !isMaximized) {\r\n if (keyCode == keys.UP) {\r\n handled = true;\r\n newHeight = wrapper.height() - distance;\r\n } else if (keyCode == keys.DOWN) {\r\n handled = true;\r\n newHeight = wrapper.height() + distance;\r\n } if (keyCode == keys.LEFT) {\r\n handled = true;\r\n newWidth = wrapper.width() - distance;\r\n } else if (keyCode == keys.RIGHT) {\r\n handled = true;\r\n newWidth = wrapper.width() + distance;\r\n }\r\n\r\n if (handled) {\r\n w = constrain(newWidth, options.minWidth, options.maxWidth);\r\n h = constrain(newHeight, options.minHeight, options.maxHeight);\r\n\r\n if (!isNaN(w)) {\r\n wrapper.width(w);\r\n that.options.width = w + \"px\";\r\n }\r\n if (!isNaN(h)) {\r\n wrapper.height(h);\r\n that.options.height = h + \"px\";\r\n }\r\n\r\n that.resize();\r\n }\r\n }\r\n\r\n if (handled) {\r\n e.preventDefault();\r\n }\r\n },\r\n\r\n _overlay: function (visible) {\r\n var overlay = this.appendTo.children(KOVERLAY),\r\n wrapper = this.wrapper;\r\n\r\n if (!overlay.length) {\r\n overlay = $(\"
      \");\r\n }\r\n\r\n overlay\r\n .insertBefore(wrapper[0])\r\n .toggle(visible)\r\n .css(ZINDEX, parseInt(wrapper.css(ZINDEX), 10) - 1);\r\n\r\n return overlay;\r\n },\r\n\r\n _actionForIcon: function(icon) {\r\n var iconClass = /\\bk-i-\\w+\\b/.exec(icon[0].className)[0];\r\n\r\n return {\r\n \"k-i-close\": \"_close\",\r\n \"k-i-maximize\": \"maximize\",\r\n \"k-i-minimize\": \"minimize\",\r\n \"k-i-restore\": \"restore\",\r\n \"k-i-refresh\": \"refresh\",\r\n \"k-i-pin\": \"pin\",\r\n \"k-i-unpin\": \"unpin\"\r\n }[iconClass];\r\n },\r\n\r\n _windowActionHandler: function (e) {\r\n if (this._closing) {\r\n return;\r\n }\r\n\r\n var icon = $(e.target).closest(\".k-window-action\").find(\".k-icon\");\r\n var action = this._actionForIcon(icon);\r\n\r\n if (action) {\r\n e.preventDefault();\r\n this[action]();\r\n return false;\r\n }\r\n },\r\n\r\n _modals: function() {\r\n var that = this;\r\n\r\n var zStack = $(KWINDOW).filter(function() {\r\n var dom = $(this);\r\n var object = that._object(dom);\r\n var options = object && object.options;\r\n\r\n return options && options.modal && options.visible && dom.is(VISIBLE);\r\n }).sort(function(a, b){\r\n return +$(a).css(\"zIndex\") - +$(b).css(\"zIndex\");\r\n });\r\n\r\n that = null;\r\n\r\n return zStack;\r\n },\r\n\r\n _object: function(element) {\r\n var content = element.children(KWINDOWCONTENT);\r\n\r\n return content.data(\"kendoWindow\") || content.data(\"kendo\" + this.options.name);\r\n },\r\n\r\n center: function () {\r\n var that = this,\r\n position = that.options.position,\r\n wrapper = that.wrapper,\r\n documentWindow = $(window),\r\n scrollTop = 0,\r\n scrollLeft = 0,\r\n newTop, newLeft;\r\n\r\n if (that.options.isMaximized) {\r\n return that;\r\n }\r\n\r\n if (!that.options.pinned) {\r\n scrollTop = documentWindow.scrollTop();\r\n scrollLeft = documentWindow.scrollLeft();\r\n }\r\n\r\n newLeft = scrollLeft + Math.max(0, (documentWindow.width() - wrapper.width()) / 2);\r\n newTop = scrollTop + Math.max(0, (documentWindow.height() - wrapper.height()) / 2);\r\n\r\n wrapper.css({\r\n left: newLeft,\r\n top: newTop\r\n });\r\n\r\n position.top = newTop;\r\n position.left = newLeft;\r\n\r\n return that;\r\n },\r\n\r\n title: function (text) {\r\n var that = this,\r\n wrapper = that.wrapper,\r\n options = that.options,\r\n titleBar = wrapper.children(KWINDOWTITLEBAR),\r\n title = titleBar.children(KWINDOWTITLE),\r\n titleBarHeight = titleBar.outerHeight();\r\n\r\n if (!arguments.length) {\r\n return title.text();\r\n }\r\n\r\n if (text === false) {\r\n wrapper.addClass(\"k-window-titleless\");\r\n titleBar.remove();\r\n } else {\r\n if (!titleBar.length) {\r\n wrapper.prepend(templates.titlebar(extend(templates, options)));\r\n }\r\n\r\n wrapper.css(\"padding-top\", titleBarHeight);\r\n titleBar.css(\"margin-top\", -titleBarHeight);\r\n }\r\n\r\n title.text(text);\r\n that.options.title = text;\r\n\r\n return that;\r\n },\r\n\r\n content: function (html) {\r\n var content = this.wrapper.children(KWINDOWCONTENT),\r\n scrollContainer = content.children(\".km-scroll-container\");\r\n\r\n content = scrollContainer[0] ? scrollContainer : content;\r\n\r\n if (!defined(html)) {\r\n return content.html();\r\n }\r\n\r\n kendo.destroy(this.element.children());\r\n\r\n content.empty().html(html);\r\n return this;\r\n },\r\n\r\n open: function () {\r\n var that = this,\r\n wrapper = that.wrapper,\r\n options = that.options,\r\n showOptions = options.animation.open,\r\n contentElement = wrapper.children(KWINDOWCONTENT),\r\n overlay;\r\n\r\n if (!that.trigger(OPEN)) {\r\n if (that._closing) {\r\n wrapper.kendoStop(true, true);\r\n }\r\n\r\n that._closing = false;\r\n\r\n that.toFront();\r\n\r\n if (options.autoFocus) {\r\n that.element.focus();\r\n }\r\n\r\n options.visible = true;\r\n\r\n if (options.modal) {\r\n overlay = that._overlay(false);\r\n\r\n overlay.kendoStop(true, true);\r\n\r\n if (showOptions.duration && kendo.effects.Fade) {\r\n var overlayFx = kendo.fx(overlay).fadeIn();\r\n overlayFx.duration(showOptions.duration || 0);\r\n overlayFx.endValue(0.5);\r\n overlayFx.play();\r\n } else {\r\n overlay.css(\"opacity\", 0.5);\r\n }\r\n\r\n overlay.show();\r\n }\r\n\r\n if (!wrapper.is(VISIBLE)) {\r\n contentElement.css(OVERFLOW, HIDDEN);\r\n wrapper.show().kendoStop().kendoAnimate({\r\n effects: showOptions.effects,\r\n duration: showOptions.duration,\r\n complete: proxy(this._activate, this)\r\n });\r\n }\r\n }\r\n\r\n if (options.isMaximized) {\r\n that._documentScrollTop = $(document).scrollTop();\r\n $(\"html, body\").css(OVERFLOW, HIDDEN);\r\n }\r\n\r\n return that;\r\n },\r\n\r\n _activate: function() {\r\n if (this.options.autoFocus) {\r\n this.element.focus();\r\n }\r\n this.trigger(ACTIVATE);\r\n this.wrapper.children(KWINDOWCONTENT).css(OVERFLOW, \"\");\r\n },\r\n\r\n _removeOverlay: function(suppressAnimation) {\r\n var modals = this._modals();\r\n var options = this.options;\r\n var hideOverlay = options.modal && !modals.length;\r\n var overlay = options.modal ? this._overlay(true) : $(undefined);\r\n var hideOptions = options.animation.close;\r\n\r\n if (hideOverlay) {\r\n if (!suppressAnimation && hideOptions.duration && kendo.effects.Fade) {\r\n var overlayFx = kendo.fx(overlay).fadeOut();\r\n overlayFx.duration(hideOptions.duration || 0);\r\n overlayFx.startValue(0.5);\r\n overlayFx.play();\r\n } else {\r\n this._overlay(false).remove();\r\n }\r\n } else if (modals.length) {\r\n this._object(modals.last())._overlay(true);\r\n }\r\n },\r\n\r\n _close: function(systemTriggered) {\r\n var that = this,\r\n wrapper = that.wrapper,\r\n options = that.options,\r\n showOptions = options.animation.open,\r\n hideOptions = options.animation.close;\r\n\r\n if (wrapper.is(VISIBLE) && !that.trigger(CLOSE, { userTriggered: !systemTriggered })) {\r\n that._closing = true;\r\n options.visible = false;\r\n\r\n $(KWINDOW).each(function(i, element) {\r\n var contentElement = $(element).children(KWINDOWCONTENT);\r\n\r\n // Remove overlay set by toFront\r\n if (element != wrapper && contentElement.find(\"> .\" + KCONTENTFRAME).length > 0) {\r\n contentElement.children(KOVERLAY).remove();\r\n }\r\n });\r\n\r\n this._removeOverlay();\r\n\r\n wrapper.kendoStop().kendoAnimate({\r\n effects: hideOptions.effects || showOptions.effects,\r\n reverse: hideOptions.reverse === true,\r\n duration: hideOptions.duration,\r\n complete: proxy(this._deactivate, this)\r\n });\r\n }\r\n\r\n if (that.options.isMaximized) {\r\n $(\"html, body\").css(OVERFLOW, \"\");\r\n if (that._documentScrollTop && that._documentScrollTop > 0) {\r\n $(document).scrollTop(that._documentScrollTop);\r\n }\r\n }\r\n },\r\n\r\n _deactivate: function() {\r\n this.wrapper.hide().css(\"opacity\",\"\");\r\n this.trigger(DEACTIVATE);\r\n var lastModal = this._object(this._modals().last());\r\n if (lastModal) {\r\n lastModal.toFront();\r\n }\r\n },\r\n\r\n close: function () {\r\n this._close(true);\r\n return this;\r\n },\r\n\r\n _actionable: function(element) {\r\n return $(element).is(TITLEBAR_BUTTONS + \",\" + TITLEBAR_BUTTONS + \" .k-icon,:input,a\");\r\n },\r\n\r\n _shouldFocus: function(target) {\r\n var active = activeElement(),\r\n element = this.element;\r\n\r\n return this.options.autoFocus &&\r\n !$(active).is(element) &&\r\n !this._actionable(target) &&\r\n (!element.find(active).length || !element.find(target).length);\r\n },\r\n\r\n toFront: function (e) {\r\n var that = this,\r\n wrapper = that.wrapper,\r\n currentWindow = wrapper[0],\r\n zIndex = +wrapper.css(ZINDEX),\r\n originalZIndex = zIndex,\r\n target = (e && e.target) || null;\r\n\r\n $(KWINDOW).each(function(i, element) {\r\n var windowObject = $(element),\r\n zIndexNew = windowObject.css(ZINDEX),\r\n contentElement = windowObject.children(KWINDOWCONTENT);\r\n\r\n if (!isNaN(zIndexNew)) {\r\n zIndex = Math.max(+zIndexNew, zIndex);\r\n }\r\n\r\n // Add overlay to windows with iframes and lower z-index to prevent\r\n // trapping of events when resizing / dragging\r\n if (element != currentWindow && contentElement.find(\"> .\" + KCONTENTFRAME).length > 0) {\r\n contentElement.append(templates.overlay);\r\n }\r\n });\r\n\r\n if (!wrapper[0].style.zIndex || originalZIndex < zIndex) {\r\n wrapper.css(ZINDEX, zIndex + 2);\r\n }\r\n that.element.find(\"> .k-overlay\").remove();\r\n\r\n if (that._shouldFocus(target)) {\r\n that.element.focus();\r\n\r\n var scrollTop = $(window).scrollTop(),\r\n windowTop = parseInt(wrapper.position().top, 10);\r\n\r\n if (windowTop > 0 && windowTop < scrollTop) {\r\n if (scrollTop > 0) {\r\n $(window).scrollTop(windowTop);\r\n } else {\r\n wrapper.css(\"top\", scrollTop);\r\n }\r\n }\r\n }\r\n\r\n wrapper = null;\r\n\r\n return that;\r\n },\r\n\r\n toggleMaximization: function () {\r\n if (this._closing) {\r\n return this;\r\n }\r\n\r\n return this[this.options.isMaximized ? \"restore\" : \"maximize\"]();\r\n },\r\n\r\n restore: function () {\r\n var that = this;\r\n var options = that.options;\r\n var minHeight = options.minHeight;\r\n var restoreOptions = that.restoreOptions;\r\n\r\n if (!options.isMaximized && !options.isMinimized) {\r\n return that;\r\n }\r\n\r\n if (minHeight && minHeight != Infinity) {\r\n that.wrapper.css(\"min-height\", minHeight);\r\n }\r\n\r\n that.wrapper\r\n .css({\r\n position: options.pinned ? \"fixed\" : \"absolute\",\r\n left: restoreOptions.left,\r\n top: restoreOptions.top,\r\n width: restoreOptions.width,\r\n height: restoreOptions.height\r\n })\r\n .removeClass(MAXIMIZEDSTATE)\r\n .find(\".k-window-content,.k-resize-handle\").show().end()\r\n .find(\".k-window-titlebar .k-i-restore\").parent().remove().end().end()\r\n .find(MINIMIZE_MAXIMIZE).parent().show().end().end()\r\n .find(PIN_UNPIN).parent().show();\r\n\r\n that.options.width = restoreOptions.width;\r\n that.options.height = restoreOptions.height;\r\n\r\n $(\"html, body\").css(OVERFLOW, \"\");\r\n if (this._documentScrollTop && this._documentScrollTop > 0) {\r\n $(document).scrollTop(this._documentScrollTop);\r\n }\r\n\r\n options.isMaximized = options.isMinimized = false;\r\n\r\n that.resize();\r\n\r\n return that;\r\n },\r\n\r\n maximize: sizingAction(\"maximize\", function() {\r\n var that = this,\r\n wrapper = that.wrapper,\r\n position = wrapper.position();\r\n\r\n extend(that.restoreOptions, {\r\n left: position.left,\r\n top: position.top\r\n });\r\n\r\n wrapper.css({\r\n left: 0,\r\n top: 0,\r\n position: \"fixed\"\r\n })\r\n .addClass(MAXIMIZEDSTATE);\r\n\r\n this._documentScrollTop = $(document).scrollTop();\r\n $(\"html, body\").css(OVERFLOW, HIDDEN);\r\n\r\n that.options.isMaximized = true;\r\n\r\n that._onDocumentResize();\r\n }),\r\n\r\n minimize: sizingAction(\"minimize\", function() {\r\n var that = this;\r\n\r\n that.wrapper.css({\r\n height: \"\",\r\n minHeight: \"\"\r\n });\r\n\r\n that.element.hide();\r\n\r\n that.options.isMinimized = true;\r\n }),\r\n\r\n pin: function(force) {\r\n var that = this,\r\n win = $(window),\r\n wrapper = that.wrapper,\r\n top = parseInt(wrapper.css(\"top\"), 10),\r\n left = parseInt(wrapper.css(\"left\"), 10);\r\n\r\n if (force || !that.options.pinned && !that.options.isMaximized) {\r\n wrapper.css({position: \"fixed\", top: top - win.scrollTop(), left: left - win.scrollLeft()});\r\n wrapper.children(KWINDOWTITLEBAR).find(KPIN).addClass(\"k-i-unpin\").removeClass(\"k-i-pin\");\r\n\r\n that.options.pinned = true;\r\n }\r\n },\r\n\r\n unpin: function() {\r\n var that = this,\r\n win = $(window),\r\n wrapper = that.wrapper,\r\n top = parseInt(wrapper.css(\"top\"), 10),\r\n left = parseInt(wrapper.css(\"left\"), 10);\r\n\r\n if (that.options.pinned && !that.options.isMaximized) {\r\n wrapper.css({position: \"\", top: top + win.scrollTop(), left: left + win.scrollLeft()});\r\n wrapper.children(KWINDOWTITLEBAR).find(KUNPIN).addClass(\"k-i-pin\").removeClass(\"k-i-unpin\");\r\n\r\n that.options.pinned = false;\r\n }\r\n },\r\n\r\n _onDocumentResize: function () {\r\n var that = this,\r\n wrapper = that.wrapper,\r\n wnd = $(window),\r\n w, h;\r\n\r\n if (!that.options.isMaximized) {\r\n return;\r\n }\r\n\r\n w = wnd.width();\r\n h = wnd.height() - parseInt(wrapper.css(\"padding-top\"), 10);\r\n\r\n wrapper.css({\r\n width: w,\r\n height: h\r\n });\r\n that.options.width = w;\r\n that.options.height = h;\r\n\r\n that.resize();\r\n },\r\n\r\n refresh: function (options) {\r\n var that = this,\r\n initOptions = that.options,\r\n element = $(that.element),\r\n iframe,\r\n showIframe,\r\n url;\r\n\r\n if (!isPlainObject(options)) {\r\n options = { url: options };\r\n }\r\n\r\n options = extend({}, initOptions.content, options);\r\n\r\n showIframe = defined(initOptions.iframe) ? initOptions.iframe : options.iframe;\r\n\r\n url = options.url;\r\n\r\n if (url) {\r\n if (!defined(showIframe)) {\r\n showIframe = !isLocalUrl(url);\r\n }\r\n\r\n if (!showIframe) {\r\n // perform AJAX request\r\n that._ajaxRequest(options);\r\n } else {\r\n iframe = element.find(\".\" + KCONTENTFRAME)[0];\r\n\r\n if (iframe) {\r\n // refresh existing iframe\r\n iframe.src = url || iframe.src;\r\n } else {\r\n // render new iframe\r\n element.html(templates.contentFrame(extend({}, initOptions, { content: options })));\r\n }\r\n\r\n element.find(\".\" + KCONTENTFRAME)\r\n .unbind(\"load\" + NS)\r\n .on(\"load\" + NS, proxy(this._triggerRefresh, this));\r\n }\r\n } else {\r\n if (options.template) {\r\n // refresh template\r\n that.content(template(options.template)({}));\r\n }\r\n\r\n that.trigger(REFRESH);\r\n }\r\n\r\n element.toggleClass(\"k-window-iframecontent\", showIframe);\r\n\r\n return that;\r\n },\r\n\r\n _triggerRefresh: function() {\r\n this.trigger(REFRESH);\r\n },\r\n\r\n _ajaxComplete: function() {\r\n clearTimeout(this._loadingIconTimeout);\r\n this.wrapper.find(REFRESHICON).removeClass(LOADING);\r\n },\r\n\r\n _ajaxError: function (xhr, status) {\r\n this.trigger(ERROR, { status: status, xhr: xhr });\r\n },\r\n\r\n _ajaxSuccess: function (contentTemplate) {\r\n return function (data) {\r\n if (contentTemplate) {\r\n data = template(contentTemplate)(data || {});\r\n }\r\n\r\n this.content(data);\r\n this.element.prop(\"scrollTop\", 0);\r\n\r\n this.trigger(REFRESH);\r\n };\r\n },\r\n\r\n _showLoading: function() {\r\n this.wrapper.find(REFRESHICON).addClass(LOADING);\r\n },\r\n\r\n _ajaxRequest: function (options) {\r\n this._loadingIconTimeout = setTimeout(proxy(this._showLoading, this), 100);\r\n\r\n $.ajax(extend({\r\n type: \"GET\",\r\n dataType: \"html\",\r\n cache: false,\r\n error: proxy(this._ajaxError, this),\r\n complete: proxy(this._ajaxComplete, this),\r\n success: proxy(this._ajaxSuccess(options.template), this)\r\n }, options));\r\n },\r\n\r\n destroy: function () {\r\n if (this.resizing) {\r\n this.resizing.destroy();\r\n }\r\n\r\n if (this.dragging) {\r\n this.dragging.destroy();\r\n }\r\n\r\n this.wrapper.off(NS)\r\n .children(KWINDOWCONTENT).off(NS).end()\r\n .find(\".k-resize-handle,.k-window-titlebar\").off(NS);\r\n\r\n $(window).off(\"resize\", this._resizeHandler);\r\n\r\n clearTimeout(this._loadingIconTimeout);\r\n\r\n Widget.fn.destroy.call(this);\r\n\r\n this.unbind(undefined);\r\n\r\n kendo.destroy(this.wrapper);\r\n\r\n this._removeOverlay(true);\r\n\r\n this.wrapper.empty().remove();\r\n\r\n this.wrapper = this.appendTo = this.element = $();\r\n },\r\n\r\n _createWindow: function() {\r\n var contentHtml = this.element,\r\n options = this.options,\r\n iframeSrcAttributes,\r\n wrapper,\r\n isRtl = kendo.support.isRtl(contentHtml);\r\n\r\n if (options.scrollable === false) {\r\n contentHtml.attr(\"style\", \"overflow:hidden;\");\r\n }\r\n\r\n wrapper = $(templates.wrapper(options));\r\n\r\n if (options.title !== false) {\r\n wrapper.append(templates.titlebar(extend(templates, options)));\r\n }\r\n\r\n // Collect the src attributes of all iframes and then set them to empty string.\r\n // This seems to fix this IE9 \"feature\": http://msdn.microsoft.com/en-us/library/gg622929%28v=VS.85%29.aspx?ppud=4\r\n iframeSrcAttributes = contentHtml.find(\"iframe:not(.k-content)\").map(function() {\r\n var src = this.getAttribute(\"src\");\r\n this.src = \"\";\r\n return src;\r\n });\r\n\r\n // Make sure the wrapper is appended to the body only once. IE9+ will throw exceptions if you move iframes in DOM\r\n wrapper\r\n .toggleClass(\"k-rtl\", isRtl)\r\n .appendTo(this.appendTo)\r\n .append(contentHtml)\r\n .find(\"iframe:not(.k-content)\").each(function(index) {\r\n // Restore the src attribute of the iframes when they are part of the live DOM tree\r\n this.src = iframeSrcAttributes[index];\r\n });\r\n\r\n wrapper.find(\".k-window-title\")\r\n .css(isRtl ? \"left\" : \"right\", wrapper.find(\".k-window-actions\").outerWidth() + 10);\r\n\r\n contentHtml.show();\r\n\r\n contentHtml.find(\"[data-role=editor]\").each(function() {\r\n var editor = $(this).data(\"kendoEditor\");\r\n\r\n if (editor) {\r\n editor.refresh();\r\n }\r\n });\r\n\r\n wrapper = contentHtml = null;\r\n }\r\n });\r\n\r\n templates = {\r\n wrapper: template(\"
      \"),\r\n action: template(\r\n \"\" +\r\n \"#= name #\" +\r\n \"\"\r\n ),\r\n titlebar: template(\r\n \"
       \" +\r\n \"#= title #\" +\r\n \"
      \" +\r\n \"# for (var i = 0; i < actions.length; i++) { #\" +\r\n \"#= action({ name: actions[i] }) #\" +\r\n \"# } #\" +\r\n \"
      \" +\r\n \"
      \"\r\n ),\r\n overlay: \"
      \",\r\n contentFrame: template(\r\n \"\"\r\n ),\r\n resizeHandle: template(\"
      \")\r\n };\r\n\r\n\r\n function WindowResizing(wnd) {\r\n this.owner = wnd;\r\n this._draggable = new Draggable(wnd.wrapper, {\r\n filter: KWINDOWRESIZEHANDLES,\r\n group: wnd.wrapper.id + \"-resizing\",\r\n dragstart: proxy(this.dragstart, this),\r\n drag: proxy(this.drag, this),\r\n dragend: proxy(this.dragend, this)\r\n });\r\n }\r\n\r\n WindowResizing.prototype = {\r\n dragstart: function (e) {\r\n var wnd = this.owner;\r\n var wrapper = wnd.wrapper;\r\n\r\n this.elementPadding = parseInt(wnd.wrapper.css(\"padding-top\"), 10);\r\n this.initialCursorPosition = kendo.getOffset(wrapper, \"position\");\r\n\r\n this.resizeDirection = e.currentTarget.prop(\"className\").replace(\"k-resize-handle k-resize-\", \"\");\r\n\r\n this.initialSize = {\r\n width: wrapper.width(),\r\n height: wrapper.height()\r\n };\r\n\r\n this.containerOffset = kendo.getOffset(wnd.appendTo);\r\n\r\n wrapper\r\n .append(templates.overlay)\r\n .children(KWINDOWRESIZEHANDLES).not(e.currentTarget).hide();\r\n\r\n $(BODY).css(CURSOR, e.currentTarget.css(CURSOR));\r\n },\r\n drag: function (e) {\r\n var that = this,\r\n wnd = that.owner,\r\n wrapper = wnd.wrapper,\r\n options = wnd.options,\r\n direction = that.resizeDirection,\r\n containerOffset = that.containerOffset,\r\n initialPosition = that.initialCursorPosition,\r\n initialSize = that.initialSize,\r\n newWidth, newHeight,\r\n windowBottom, windowRight,\r\n x = Math.max(e.x.location, containerOffset.left),\r\n y = Math.max(e.y.location, containerOffset.top);\r\n\r\n if (direction.indexOf(\"e\") >= 0) {\r\n newWidth = x - initialPosition.left;\r\n\r\n wrapper.width(constrain(newWidth, options.minWidth, options.maxWidth));\r\n } else if (direction.indexOf(\"w\") >= 0) {\r\n windowRight = initialPosition.left + initialSize.width;\r\n newWidth = constrain(windowRight - x, options.minWidth, options.maxWidth);\r\n\r\n wrapper.css({\r\n left: windowRight - newWidth - containerOffset.left,\r\n width: newWidth\r\n });\r\n }\r\n\r\n if (direction.indexOf(\"s\") >= 0) {\r\n newHeight = y - initialPosition.top - that.elementPadding;\r\n\r\n wrapper.height(constrain(newHeight, options.minHeight, options.maxHeight));\r\n } else if (direction.indexOf(\"n\") >= 0) {\r\n windowBottom = initialPosition.top + initialSize.height;\r\n newHeight = constrain(windowBottom - y, options.minHeight, options.maxHeight);\r\n\r\n wrapper.css({\r\n top: windowBottom - newHeight - containerOffset.top,\r\n height: newHeight\r\n });\r\n }\r\n\r\n if (newWidth) {\r\n wnd.options.width = newWidth + \"px\";\r\n }\r\n if (newHeight) {\r\n wnd.options.height = newHeight + \"px\";\r\n }\r\n\r\n wnd.resize();\r\n },\r\n dragend: function (e) {\r\n var that = this,\r\n wnd = that.owner,\r\n wrapper = wnd.wrapper;\r\n\r\n wrapper\r\n .find(KOVERLAY).remove().end()\r\n .children(KWINDOWRESIZEHANDLES).not(e.currentTarget).show();\r\n\r\n $(BODY).css(CURSOR, \"\");\r\n\r\n if (wnd.touchScroller) {\r\n wnd.touchScroller.reset();\r\n }\r\n if (e.keyCode == 27) {\r\n wrapper.css(that.initialCursorPosition)\r\n .css(that.initialSize);\r\n }\r\n\r\n return false;\r\n },\r\n destroy: function() {\r\n if (this._draggable) {\r\n this._draggable.destroy();\r\n }\r\n\r\n this._draggable = this.owner = null;\r\n }\r\n };\r\n\r\n function WindowDragging(wnd, dragHandle) {\r\n this.owner = wnd;\r\n this._draggable = new Draggable(wnd.wrapper, {\r\n filter: dragHandle,\r\n group: wnd.wrapper.id + \"-moving\",\r\n dragstart: proxy(this.dragstart, this),\r\n drag: proxy(this.drag, this),\r\n dragend: proxy(this.dragend, this),\r\n dragcancel: proxy(this.dragcancel, this)\r\n });\r\n\r\n this._draggable.userEvents.stopPropagation = false;\r\n }\r\n\r\n WindowDragging.prototype = {\r\n dragstart: function (e) {\r\n var wnd = this.owner,\r\n element = wnd.element,\r\n actions = element.find(\".k-window-actions\"),\r\n containerOffset = kendo.getOffset(wnd.appendTo);\r\n\r\n wnd.trigger(DRAGSTART);\r\n\r\n wnd.initialWindowPosition = kendo.getOffset(wnd.wrapper, \"position\");\r\n\r\n wnd.startPosition = {\r\n left: e.x.client - wnd.initialWindowPosition.left,\r\n top: e.y.client - wnd.initialWindowPosition.top\r\n };\r\n\r\n if (actions.length > 0) {\r\n wnd.minLeftPosition = actions.outerWidth() + parseInt(actions.css(\"right\"), 10) - element.outerWidth();\r\n } else {\r\n wnd.minLeftPosition = 20 - element.outerWidth(); // at least 20px remain visible\r\n }\r\n\r\n wnd.minLeftPosition -= containerOffset.left;\r\n wnd.minTopPosition = -containerOffset.top;\r\n\r\n wnd.wrapper\r\n .append(templates.overlay)\r\n .children(KWINDOWRESIZEHANDLES).hide();\r\n\r\n $(BODY).css(CURSOR, e.currentTarget.css(CURSOR));\r\n },\r\n\r\n drag: function (e) {\r\n var wnd = this.owner,\r\n position = wnd.options.position,\r\n newTop = Math.max(e.y.client - wnd.startPosition.top, wnd.minTopPosition),\r\n newLeft = Math.max(e.x.client - wnd.startPosition.left, wnd.minLeftPosition),\r\n coordinates = {\r\n left: newLeft,\r\n top: newTop\r\n };\r\n\r\n $(wnd.wrapper).css(coordinates);\r\n position.top = newTop;\r\n position.left = newLeft;\r\n },\r\n\r\n _finishDrag: function() {\r\n var wnd = this.owner;\r\n\r\n wnd.wrapper\r\n .children(KWINDOWRESIZEHANDLES).toggle(!wnd.options.isMinimized).end()\r\n .find(KOVERLAY).remove();\r\n\r\n $(BODY).css(CURSOR, \"\");\r\n },\r\n\r\n dragcancel: function (e) {\r\n this._finishDrag();\r\n\r\n e.currentTarget.closest(KWINDOW).css(this.owner.initialWindowPosition);\r\n },\r\n\r\n dragend: function () {\r\n this._finishDrag();\r\n\r\n this.owner.trigger(DRAGEND);\r\n\r\n return false;\r\n },\r\n destroy: function() {\r\n if (this._draggable) {\r\n this._draggable.destroy();\r\n }\r\n\r\n this._draggable = this.owner = null;\r\n }\r\n };\r\n\r\n kendo.ui.plugin(Window);\r\n\r\n})(window.kendo.jQuery);\r\n\r\nreturn window.kendo;\r\n\r\n}, typeof define == 'function' && define.amd ? define : function(_, f){ f(); });"],"names":["$","undefined","innerText","kendo","window","Observable","ObservableObject","data","ObservableArray","toString","binders","splice","Array","prototype","Class","proxy","VALUE","SOURCE","EVENTS","CHECKED","deleteExpando","CHANGE","a","document","createElement","textContent","test","e","Binding","extend","init","parents","path","that","this","fn","call","source","dependencies","observable","_access","field","_change","change","bind","_parents","value","get","parent","inArray","concat","dependency","ch","trigger","indexOf","charAt","length","start","stop","unbind","index","result","lastIndexOf","substring","currentSource","set","getter","destroy","EventBinding","handler","TemplateBinding","template","render","html","Binder","element","bindings","options","binding","attribute","refresh","attr","key","setAttribute","style","enabled","removeAttribute","readonly","disabled","events","handlers","off","on","text","visible","display","invisible","innerHTML","eventName","valueUpdate","_initChange","type","parseDate","parseFloat","DataSource","autoBind","fetch","action","add","items","remove","container","nodeName","toLowerCase","tBodies","appendChild","valueField","textField","format","idx","child","clone","cloneNode","reference","children","insertBefore","bindElement","roles","unbindElementTree","removeChild","view","unbindElementChildren","input","checked","push","select","target","option","valueIndex","values","valuePrimitive","selected","attributes","specified","apply","optionIndex","optionValue","selectedIndex","widget","check","wrapper","enable","_dataBinding","dataBinding","_dataBound","dataBound","_itemChange","itemChange","item","_ns","ns","ui","all","dataviz","mobile","unshift","rolesFromNamespaces","dataSource","groups","group","flattenGroups","setDataSource","_dataSource","first","_valueIsObservableObject","_valueIsObservableArray","valueLength","sourceItem","sourceValue","dataValueField","dataTextField","isArray","isObservableObject","slice","multiselect","oldValues","newValues","dataItems","removeIndex","newValue","found","newLength","i","j","old","oldIdx","oldLength","selectedValue","BindingTarget","toDestroy","hasValue","hasSource","hasEvents","specificBinders","applyBinding","name","binder","Error","WidgetBindingTarget","itemIndex","hasSubgroups","bindingTargetForRole","initWidget","keyValueRegExp","whiteSpaceRegExp","parseBindings","token","colonIndex","tokens","match","createBindings","role","getAttribute","childrenCopy","deep","unbindElement","replace","parseOptions","click","kendoBindingTarget","dom","object","node","arguments","nodeType","bindingTarget","notify","namespace","observableHierarchy","array","HierarchicalDataSource","create","recursiveRead","_initChildren","_data","jQuery","support","Widget","keys","parse","adjustDST","date","extractFormat","_extractFormat","getCulture","transitions","transitionOrigin","css","cellTemplate","useWithBlock","emptyCellTemplate","browser","isIE8","msie","version","CLICK","KEYDOWN_NS","ID","MIN","LEFT","SLIDE","MONTH","CENTURY","NAVIGATE","HOVER","DISABLED","FOCUSED","OTHERMONTH","OTHERMONTHCLASS","TODAY","CELLSELECTOR","BLUR","FOCUS","FOCUS_WITH_NS","MOUSEENTER","touch","MOUSEENTER_WITH_NS","MOUSELEAVE","MS_PER_MINUTE","MS_PER_DAY","PREVARROW","NEXTARROW","ARIA_DISABLED","ARIA_SELECTED","DATE","Date","views","month","year","decade","century","Calendar","id","url","unescape","_templates","_header","_footer","footer","addClass","mousetoggle","_move","link","currentTarget","firstChild","href","preventDefault","_click","_focusView","focusOnNav","_cellID","normalize","culture","_index","_current","restrictValue","min","max","_addClassProxy","_active","_cell","_removeClassProxy","removeClass","dates","depth","animation","horizontal","effects","reverse","duration","divisor","vertical","setOptions","navigate","today","_today","_title","_table","current","_view","focus","table","_bindTable","_option","navigateToPast","_navigate","navigateToFuture","navigateUp","hasClass","navigateDown","_value","isNaN","to","currentView","compare","title","from","_oldTable","currentValue","future","calendar","toggleClass","kendoStop","_changeView","content","makeUnselectable","_animate","_focus","_class","toDateString","isInRange","prevent","method","temp","keyCode","isRtl","ctrlKey","RIGHT","UP","DOWN","ENTER","HOME","END","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","getMilliseconds","PAGEUP","PAGEDOWN","setDate","active","insertAfter","is","_horizontal","viewWidth","outerWidth","width","wrap","position","complete","unwrap","kendoAnimate","_vertical","cell","top","prev","outerHeight","left","_cellByDate","parseInt","height","find","filter","className","removeAttr","split","getToday","_toggle","hide","appendTo","show","links","eq","arrow","modifier","setFullYear","isBigger","isEqualMonth","empty","toggle","_todayClick","plugin","firstDayOfMonth","firstVisibleDay","calendarInfo","firstDay","getDay","setTime","time","tzOffsetBefore","getTimezoneOffset","resultDATE","getTime","tzOffsetDiff","getCalendarInfo","months","names","navigateUrl","hasUrl","currentCalendar","firstDayIdx","days","shiftArray","shortNames","namesShort","lastDayOfMonth","last","cells","perRow","setter","build","cssClass","day","linkClass","dateString","join","timeOffset","Math","abs","setHours","date1","date2","month1","year1","month2","year2","hours","namesAbbr","setMonth","minYear","maxYear","end","modular","cellsPerRow","multiplier","calendars","standard","patterns","d","isEqualDatePart","value1","value2","viewsEnum","Template","cultures","each","noop","math","JSON","percentRegExp","formatRegExp","boxShadowRegExp","numberRegExp","FUNCTION","STRING","NUMBER","OBJECT","NULL","BOOLEAN","UNDEFINED","getterCache","setterCache","globalize","Globalize","proto","member","base","subclass","constructor","Object","_initOptions","deepExtend","isFunction","_defaultPrevented","isDefaultPrevented","_events","one","original","eventNames","handlersIsFunction","sender","compilePart","part","stringPart","rest","argumentNameRegExp","encodeRegExp","escapedCurlyRegExp","curlyRegExp","escapedSharpRegExp","sharpRegExp","zeros","pad","number","digits","getShadows","shadow","radius","blur","right","bottom","autosize","percentage","wrapperStyle","boxSizing","mozBoxSizing","webkitBoxSizing","shadows","percentWidth","percentHeight","opera","marginLeft","paddingLeft","paddingRight","paddingBottom","floor","zoom","destination","deepExtendOne","property","propValue","propType","destProp","testRx","agent","rxs","dflt","rx","hasOwnProperty","toHyphens","str","g","toCamelCase","strMatch","g1","toUpperCase","getComputedStyles","properties","computedStyle","styles","defaultView","getComputedStyle","getPropertyValue","currentStyle","size","obj","getOffset","positioned","mobileOS","pointers","msPointers","pageYOffset","documentElement","scrollTop","pageXOffset","scrollLeft","paramName","compile","parts","settings","argumentName","functionBody","Function","_slotCount","gap","indent","rep","escapable","meta","quote","string","lastIndex","c","charCodeAt","holder","k","v","partial","mind","toJSON","isFinite","String","valueOf","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","Number","Boolean","stringify","replacer","space","dateFormatRegExp","standardFormatRegExp","literalRegExp","commaRegExp","EMPTY","POINT","COMMA","SHARP","ZERO","PLACEHOLDER","EN","objectToString","findCulture","numberFormat","expandNumberFormat","groupSizes","groupSize","percent","currency","formatDate","AM","PM","formatNumber","symbol","isCurrency","isPercent","customPrecision","formatAndPrecision","integer","fraction","integerLength","hasGroup","hasNegativeFormat","decimalIndex","sharpIndex","zeroIndex","hasZero","hasSharp","currencyIndex","startZeroIndex","groupSeparator","decimal","precision","decimals","pattern","literals","negative","replacement","toLocaleString","exec","toExponential","round","quoteChar","literal","D","F","G","m","M","s","t","T","u","y","Y","twoDigitYearMax","cultureName","toFixed","fmt","isPlainObject","placeholderFormat","_activeElement","activeElement","_round","nonBreakingSpaceRegExp","exponentRegExp","shortTimeZoneRegExp","longTimeZoneRegExp","dateRegExp","signRegExp","formatsSequence","outOfRange","designatorPredicate","designator","mapDesignators","designators","map","lowerArray","lowerLocalInfo","localInfo","newLocalInfo","parseExact","count","pmHour","UTC","ISO8601","matches","amDesignators","pmDesignators","hoursOffset","minutesOffset","lookAhead","getNumber","rg","RegExp","substr","valueIdx","getIndexByName","lower","nameLength","subValue","checkLiteral","minutes","seconds","milliseconds","defaultYear","_lowerDays","_lowerMonths","pow","formats","tzoffset","percentSymbol","scrollbar","div","cssText","body","offsetWidth","scrollWidth","closest","tbodyInnerHtml","MSPointerEvent","PointerEvent","transforms","elementProto","HTMLElement","hasHW3D","WebKitCSSMatrix","prefix","hasTransitions","lowPrefix","event","devicePixelRatio","screenWidth","screen","availWidth","innerWidth","screenHeight","availHeight","innerHeight","detectOS","ua","minorVersion","os","notAndroidPhone","agentRxs","fire","android","iphone","ipad","meego","webos","blackberry","playbook","wp","windows","tizen","sailfish","ffos","osRxs","ios","flat","formFactorRxs","tablet","browserRxs","omini","omobile","firefox","mobilesafari","chrome","webkit","ie","navigator","device","majorVersion","flatVersion","cordova","PhoneGap","appMode","standalone","location","protocol","userAgent","wpDevicePixelRatio","kineticScrollNeeded","hasNativeScrolling","mouseAndTouchPresent","detectBrowser","safari","mozilla","documentMode","zoomLevel","clientWidth","cssBorderSpacing","borderSpacing","eventCapture","addEventListener","placeholder","propertyChangeEvent","types","cssFloat","stableSort","threshold","sorted","sort","b","matchesSelector","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","selector","nodeList","querySelectorAll","parentNode","pushState","history","hashChange","directions","down","up","out","parseEffects","fx","Element","prepareAnimationOptions","teardown","completeCallback","animate","instance","queue","promise","classes","dequeue","disable","promiseShim","animatedPromise","clearQueue","gotoEnd","kendoAddClass","kendoRemoveClass","kendoToggleClass","ampRegExp","ltRegExp","quoteRegExp","aposRegExp","gtRegExp","htmlEncode","eventTarget","touches","originalEvent","changedTouches","elementFromPoint","clientX","clientY","callback","mousedown","mouseup","mousemove","mousecancel","resize","wrapExpression","members","localUrlRe","INSERT","DELETE","BACKSPACE","TAB","ESC","SPACEBAR","F2","F10","F12","NUMPAD_PLUS","NUMPAD_MINUS","NUMPAD_DOT","isLocalUrl","expr","expression","safe","accessor","guid","random","roleSelector","triggeredByInput","tagName","logToConsole","message","console","log","_hasBindingTarget","_tabindex","TABINDEX","tabindex","_setEvents","force","getSize","currentSize","_size","_resize","dimensions","setSize","removeData","domElement","offsetHeight","templateRegExp","jsonRegExp","jsonFormatRegExp","dashRegExp","parseOption","containmentComparer","contains","resizableWidget","namespaces","addBack","widgetInstance","widgets","widgetsArray","makeArray","progress","leftRight","webkitCorrection","containerScrollLeft","mask","prependTo","register","args","ContainerNullObject","nullObject","MobileWidget","autoApplyNS","kendoDestroy","viewElement","viewHasNativeScrolling","useNativeScrolling","focusable","isTabIndexNotNaN","filters","hidden","appLevelNativeScrolling","application","touchScroller","elements","Scroller","kendoMobileScroller","suites","onResize","setTimeout","unbindResize","attrValue","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","kendoFocusable","MOUSE_EVENTS","EXCLUDE_BUST_CLICK_SELECTOR","MouseEventNormalizer","setupMouseMute","mouseTrap","bustClick","captureMouse","stopPropagation","muteMouse","clearTimeout","mouseTrapTimeoutID","unMuteMouse","eventMap","move","cancel","MSPointerEnter","MSPointerLeave","orig","fix","special","delegateType","bindType","handle","ret","related","relatedTarget","handleObj","origType","getEventMap","eventRegEx","applyEventMap","kendoJQuery","context","rootjQuery","pop","search","touchstart","touchend","timezone","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec","Sun","Mon","Tue","Wed","Thu","Fri","Sat","ruleToDate","rule","targetDay","ourDay","cache","getUTCDay","setUTCDate","findRule","utcTime","rules","zone","offset","grep","findZone","zones","zoneRules","until","zoneAndRule","info","abbr","convert","fromOffset","toOffset","fromLocalOffset","toLocalOffset","toLocalDate","setDayOfWeek","dir","dayOfWeek","toUtcTime","isInTimeRange","msValue","msMin","msMax","isInDateRange","addDays","ignoreDST","difference","isToday","toInvariantTime","staticDate","nextDay","previousDay","MS_PER_HOUR","stripWhitespace","iterator","createNodeIterator","NodeFilter","SHOW_TEXT","FILTER_ACCEPT","FILTER_REJECT","nextNode","referenceNode","trim","animationFrame","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","animationQueue","queueAnimation","runNextAnimation","shift","parseQueryStringParams","params","paramParts","decodeURIComponent","OS","mobileChrome","elementUnderCursor","x","client","wheelDeltaY","jQueryEvent","delta","deltaY","wheelDelta","detail","axis","VERTICAL_AXIS","caret","rangeElement","isPosition","selectionStart","setSelectionRange","selectionEnd","selection","createTextRange","collapse","moveStart","moveEnd","rangeDuplicated","duplicate","moveToBookmark","createRange","getBookmark","setEndPoint","isEmptyObject","ajax","CREATE","READ","UPDATE","DESTROY","SYNC","GET","ERROR","REQUESTSTART","PROGRESS","REQUESTEND","crud","identity","o","newLineRegExp","wrapAll","json","Model","howMany","len","forEach","every","some","eventHandler","_notifyChange","uid","shouldSerialize","f","_set","composite","paths","isObservableArray","isDataSource","equal","xtype","parsers","defaultValues","getFieldByName","fieldName","defaults","dirty","idField","_defaultId","_parse","fields","editable","initiator","accept","isNew","define","model","originalName","nullable","defaultValue","Comparer","localeCompare","combine","comparers","StableComparer","asc","valueA","valueB","__position","desc","operators","operator","op","ignore","neq","gt","gte","lt","lte","startswith","endswith","doesnotcontain","Query","normalizeSort","descriptor","descriptors","filterExpr","expressions","logic","and","or","fieldFunctions","operatorFunctions","ignoreCase","operatorMap","equals","isequalto","equalto","ne","notequals","isnotequalto","notequalto","notequal","islessthan","lessthan","less","le","islessthanorequalto","lessthanequal","isgreaterthan","greaterthan","greater","isgreaterthanorequalto","greaterthanequal","ge","notsubstringof","normalizeOperator","normalizeFilter","normalizeAggregate","normalizeGroup","aggregates","groupValueComparer","calculateAggregate","accumulator","aggr","functionName","aggregate","functions","toArray","range","skip","take","order","orderBy","orderByDescending","comparer","compiled","predicate","allData","groupBy","_sortForGrouping","groupValue","sum","isNumber","average","val","calculateAggregates","query","process","total","LocalTransport","read","success","update","RemoteTransport","parameterMap","Cache","setup","error","parameters","operation","_store","clear","serializeRecords","getters","modelInstance","originalFieldNames","fieldNames","record","convertRecords","convertGroup","wrapDataAccess","originalFunction","converter","store","DataReader","schema","modelBase","dataFunction","groupsFunction","serializeFunction","serialize","serializeGetters","fromName","errors","mergeGroups","dest","wrapGroupItems","eachGroupItems","func","removeModel","wrapInEmptyGroup","indexOfPristineModel","indexOfModel","fieldNameFromModel","convertFilterDescriptorsField","convertDescriptorsField","_map","_prefetch","_pristineData","_ranges","_pristineTotal","_destroyed","_pageSize","pageSize","_page","page","_sort","_filter","_group","_aggregate","_total","transport","Transport","pushCreate","_pushCreate","pushUpdate","_pushUpdate","pushDestroy","_pushDestroy","reader","readers","_observe","serverSorting","serverPaging","serverFiltering","serverGrouping","serverAggregates","batch","_isServerGrouped","_push","_readData","_flatData","getByUid","at","_addRange","_process","insert","_createNewModel","pushed","pristine","_updatePristineForModel","autoSync","_eachItem","_removePristineForModel","hasGroups","_removeModelFromRanges","_updateRangesLength","sync","created","updated","destroyed","promises","_send","when","then","_accept","cancelChanges","_cancelModel","hasChanges","models","response","serverGroup","_handleCustomErrors","_executeOnPristineForModel","_eachPristineItem","_pristineForModel","_promise","Deferred","deferred","resolve","status","reject","converted","_params","_queueRequest","_dequeueRequest","_aggregateResult","_skip","xhr","errorThrown","_requestInProgress","_pending","_changeHandler","_take","_mergeState","_query","next","totalPages","ceil","inRange","_findRange","lastRange","ranges","firstItemUid","pageSkip","paging","sorting","filtering","_rangeExists","prefetch","skipIdx","takeIdx","startIndex","endIndex","rangeData","rangeEnd","processed","flatData","remote","_mergeGroups","prevGroup","_prefetchSuccessHandler","_timeout","rangeLength","startOffset","inferSelect","firstField","secondField","inferTable","fieldIndex","tbody","rows","fieldCount","transportOptions","transports","schemas","Node","hasChildren","childrenField","childrenOptions","_childrenOptions","_loaded","collection","_updateChildrenField","append","loaded","level","_childrenLoaded","load","dataMethod","_attachBubbleHandlers","_find","inferList","list","textChild","urlField","spriteCssClassField","imageUrlField","nodeValue","prop","Buffer","viewSize","disablePrefetch","_prefetching","buffer","_syncWithDataSource","setViewSize","_recalculate","useRanges","dataOffset","prefetchThreshold","midPageThreshold","nextMidRange","nextPageThreshold","nextFullRange","pullBackThreshold","previousMidRange","previousFullRange","_goToRange","syncDataSource","prefetchOffset","expanding","_expanding","_firstItemUid","BatchBuffer","batchSize","batchBuffer","odataFilters","mappers","$filter","toOdataFilter","orderby","$orderby","$skip","$top","defaultDataType","dataType","odata","results","jsonp","contentType","$inlinecount","$format","XmlDataReader","xpathToMember","evaluate","xmlParse","xml","parseDOM","parsedNode","attributeCount","nextSibling","intermediateResult","tree","parseXML","raw","DIV","SPAN","OPEN","CLOSE","READONLY","DEFAULT","SELECTED","STATEDISABLED","HOVEREVENTS","MOUSEDOWN","MAX","ARIA_EXPANDED","ARIA_HIDDEN","ARIA_READONLY","parseFormats","DateView","_dateViewID","popup","Popup","anchor","_calendar","_setOptions","close","open","selectIsClicked","altKey","DatePicker","_wrapper","dateView","_oldText","_updateARIA","_icon","_reset","_template","_old","_update","ARIATemplate","_editable","icon","_dateIcon","_inputWrapper","_toggleHover","_keydown","_blur","_form","_resetHandler","formattedValue","formId","form","_ariaTemplate","lastDropTarget","UserEvents","draggables","dropTargets","dropAreas","KEYUP","DRAGSTART","HOLD","DRAG","DRAGEND","DRAGCANCEL","DRAGENTER","DRAGLEAVE","DROP","numericCssPropery","within","containerBoundaries","minX","minY","checkTarget","targets","areas","theTarget","theFilter","targetLen","areaLen","targetElement","translate","TapCapture","capture","_press","_release","attachEvent","captureNext","cancelCapture","PaneDimension","forcedEnabled","scale","measure","scrollSize","makeVirtual","virtual","_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","gesturechange","coordinates","previousGesture","previousCenter","center","scaleDelta","distance","offsetX","offsetY","scaleWith","TRANSFORM_STYLE","Movable","webkitTransformOrigin","_saveCoordinates","by","scaleTo","moveAxis","moveTo","newCoordinates","DropTarget","groupName","destroyGroup","_trigger","draggable","dropTarget","_over","_out","_drop","dropped","_cache","DropTargetArea","Draggable","_activated","global","allowSelection","_start","hold","_hold","_drag","_end","_cancel","_select","_afterEndHandler","_afterEnd","captureEscape","cursorOffset","holdToDrag","cancelHold","_updateHint","boundaries","hintOffset","hint","_shouldIgnoreTarget","ignoreSelector","initialTouch","currentTargetOffset","zIndex","_withDropTarget","oldIE","nameSpecialCharRegExp","ERRORTEMPLATE","specialRules","fieldType","convertToValueBinding","bindAttr","bindingName","createAttributes","ruleName","validation","DATATYPE","BINDING","convertItems","editors","kendoNumericTextBox","kendoDatePicker","addValidationRules","modelField","Editable","_validateProxy","_validate","clearContainer","errorTemplate","editor","isObject","isCustomEditor","isBoolean","preventChangeTrigger","_validationEventInProgress","validatable","validateInput","validate","modelFields","Validator","validateOnBlur","scaleProperties","scalex","scaley","scale3d","translateProperties","translatex","translatey","translate3d","hasZoom","matrix3dRegExp","cssParamsRegExp","translateXRegExp","oldEffectsRegExp","singleEffectRegExp","unitRegExp","transformProps","transform2d","transform2units","skew","cssPrefix","BLANK","PX","NONE","AUTO","WIDTH","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","acc","propertyName","strip3DTransforms","normalizeCSS","lowerKey","isTransformed","transformation","cssValues","transform","computed","atan2","exclusive","ease","mirror","redirectedEffect","effect","$1","$2","direction","effectBody","timeoutID","delay","oldKeys","stopTransitionCalled","stopTransition","speeds","merge","unique","taskKeys","retainPosition","EffectSet","restore","run","jdx","childrenLength","setReverse","addRestoreProperties","prepare","effectName","reset","restoreCallback","effectClass","effectSet","parsedEffects","capitalize","useTransition","multiple","single","isFixed","originalPosition","dX","dY","marginTop","Effect","_direction","_additionalEffects","_reverse","play","additional","_duration","compositeRun","_complete","shouldHide","word","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","realLength","overflow","TRANSFER_START_STATE","currentScale","targetOffset","x1","y1","x2","y2","x3","y3","Z1","Z2","X","transformOrigin","CLIPS","ROTATIONS","clipInHalf","_container","rotation","_clipInHalf","clip","face","_face","temporary","opacity","back","reverseDirection","faceClone","backClone","staticPage","turningPage","transformStyle","RESTORE_OVERFLOW","transitionClass","_previous","_transitionClass","_both","_element","_containerClass","containerClass","isAbsolute","both","Animation","_tickProxy","_tick","_started","tick","done","onEnd","onCancel","Transition","timePassed","startDate","initial","_easeProxy","easeOutExpo","easeOutBack","LI","LOADING","SELECT","quotRegExp","alternativeNames","List","_isSelect","ul","tabIndex","_optionID","_accessors","_initValue","headerTemplate","_focused","_filterSource","removeFiltersForField","header","prepend","_accessor","_ignoreCase","candidate","_scroll","_unbindDataSource","_touchScroller","dataItem","_text","_aria","suggest","_bound","_oldIndex","_enable","li","userTriggered","_triggerCascade","_dataValue","_height","popups","scrollHeight","_adjustListWidth","computedWidth","borderLeftWidth","borderRightWidth","fontFamily","_popup","focused","_makeUnselectable","touchEnabled","MSPointers","yDimension","headerHeight","itemOffsetTop","offsetTop","itemOffsetHeight","ulScrollTop","ulOffsetHeight","clientHeight","bottomDistance","scrollTo","hasDataSource","_refreshHandler","_progressHandler","_requestEndHandler","_errorHandler","siblings","Select","_initial","isSelect","_hideBusy","_busy","_arrow","_showBusy","_request","_requestEnd","_get","pressed","methodName","_state","_fetch","lastChild","previousSibling","_typing","_selectItem","notBound","_selectedValue","_fetchItems","hasItems","cascadeFrom","_options","optionLabel","dataText","dataValue","_cascade","parentElement","cascade","cascadeFromField","_userTriggered","_clearSelection","filterValue","CANCEL","DATABOUND","DATABINDING","FOCUSSELECTOR","KEDITITEM","EDIT","REMOVE","SAVE","NS","ListView","_itemId","_navigatable","_selectable","_pageable","_crudHandlers","selectable","navigatable","altTemplate","editTemplate","_item","_progress","_error","_destroyEditable","replaceWith","pagerId","pageable","pager","Pager","multi","Selectable","aria","_scrollTo","UseJQueryoffset","SCROLL","scrollDirectionFunc","elementOffset","elementDimension","containerScrollAmount","containerDimension","clickCallback","canHandle","isTextBox","editItem","save","focusAgain","edit","clearSelection","_modelFromElement","_closeEditable","valid","kendoEditable","clickNS","SNAPBACK_DURATION","SCROLLBAR_OPACITY","FRICTION","VELOCITY_MULTIPLIER","MAX_VELOCITY","OUT_OF_BOUNDS_FRICTION","ANIMATED_SCROLLER_PRECISION","RELEASECLASS","REFRESHCLASS","PULL","RESIZE","MOUSE_WHEEL_ID","ZoomSnapBack","tapCapture","DragInertia","freeze","_moveTo","_outOfBounds","_snapBack","velocity","velocityMultiplier","friction","snapBack","AnimatedScroller","_updateCoordinates","setCoordinates","ScrollBar","elementSize","scrollMovable","paneSize","sizeRatio","visibility","_native","useNative","scrollElement","fixedContainer","wrapInner","inner","avoidScrolling","preventDragEvent","captureUpIfMoved","multiTouch","velocityX","velocityY","horizontalSwipe","verticalSwipe","pane","zoomSnapBack","animatedScroller","mousewheelScrolling","pulled","_initAxis","_wheelEnd","_wheel","_wheelY","pullToRefresh","_initPullToRefresh","_wheelScroll","press","_wheelTimeout","pullOffset","pullTemplate","releaseTemplate","refreshTemplate","_scale","zoomOut","animatedScrollTo","pullHandled","refreshHint","hintContainer","yinertia","xinertia","_paneChange","_dragEnd","scrollBar","ACCEPT","FILTER","NEXT","PREV","HIDE","FOCUSEDCLASS","HIDDENCLASS","HOVERCLASS","KEYDOWN","MultiSelect","_tagList","_input","_textContainer","_loader","_tagID","tagList","_values","_dataItems","_placeholder","_retrieveData","_initialValues","autoClose","highlightFirst","minLength","maxSelectedItems","itemTemplate","tagTemplate","currentTag","_currentTag","notInput","_search","_unselect","_close","_visibleItems","_position","_open","_allowSelection","_render","_setInitialValues","inputValue","dataItemIndex","tags","_mapValues","tag","sibling","_loading","_prev","textWidth","wrapperWidth","span","_span","visibleItems","_selected","textAccessor","valueAccessor","textTemplate","accessKey","_innerWrapper","computedStyles","placeholderSupported","INPUT","SPIN","TOUCHEND","INTEGER_REGEXP","NumericTextBox","isStep","_focusout","_arrows","_toggleText","spinners","upArrowText","downArrowText","_upArrowEventHandler","_downArrowEventHandler","_spin","_upArrow","_downArrow","_keypress","_paste","_adjust","_focusin","arrows","_spinning","buttonHtml","release","_focusing","groupRegExp","extractRegExp","_format","caretPosition","_culture","CLASSNAME","_key","_step","which","isValid","character","fromCharCode","isNumPadDecimal","_numericRegex","separator","_separator","_floatRegExp","timeout","isNotNull","DOMElement","DEACTIVATE","ACTIVATE","CENTER","TOP","BOTTOM","ABSOLUTE","BODY","LOCATION","VISIBLE","EFFECTS","ACTIVE","ACTIVEBORDER","ACTIVEBORDERREGEXP","ACTIVECHILDREN","WINDOW","DOCUMENT_ELEMENT","RESIZE_SCROLL","parentPopup","collisions","collision","_hovered","dirClass","_closing","_mousedownProxy","_mousedown","_resizeProxy","toggleTarget","toggleEvent","viewport","copyAnchorStyles","modal","fixed","flipped","openEffects","closeEffects","_resizeTimeout","_fit","viewPortSize","output","_flip","anchorSize","boxSize","siblingContainer","parentZIndex","viewportWidth","viewportHeight","viewportOffset","origins","positions","overflowX","overflowY","parentsUntil","_align","pos","offsetParent","offsets","flipPos","appendToOffset","verticalOrigin","horizontalOrigin","verticalPosition","horizontalPosition","anchorOffset","anchorWidth","anchorHeight","ARIASELECTED","SELECTABLE","UNSELECTING","supportEventDelegation","_marquee","_lastActive","tap","_tap","_isElement","metaKey","shiftKey","whichCode","buttonCode","button","selectRange","_firstSelectee","_notify","_downTarget","currentElement","useAllItems","_items","_selectElement","startLocation","initialDelta","_invalidateSelectables","toSelect","selectElement","preventNotify","isPrevented","continuousItems","elementPosition","START","BEFORE_MOVE","MOVE","ACTION_SORT","ACTION_REMOVE","ACTION_RECEIVE","DEFAULT_FILTER","MISSING_INDEX","containsOrEqualTo","defaultHint","defaultPlaceholder","Sortable","_draggable","_createDraggable","floating","connectWith","cursor","dragstart","_dragstart","dragcancel","_dragcancel","drag","dragend","_dragend","draggedElement","draggableEvent","_isFloating","before","_setCursor","_resetCursor","targetCenter","offsetDelta","getSibling","_findTarget","axisDelta","eventData","_getElementCenter","appendToBottom","_movePlaceholder","appendAfterHidden","_movementByAxis","connectedList","connectedListEventData","draggedIndex","placeholderIndex","oldIndex","newIndex","getKendoSortable","_findElementUnderCursor","has","sortable","_isEmpty","_isLastHidden","_searchConnectedTargets","sortableInstance","connected","_isCursorAfterLast","lastItemOffset","lastItem","cursorPosition","after","_originalCursorType","_cursorStylesheet","not","invalidZeroEvents","DEFAULT_MIN_HOLD","DEFAULT_THRESHOLD","PRESS","TAP","RELEASE","GESTURESTART","GESTURECHANGE","GESTUREEND","GESTURETAP","touchDelta","touch1","touch2","dx","dy","sqrt","getTouches","api","identifier","pointerId","TouchAxis","_updateLocationData","timeStamp","timeDelta","Touch","touchInfo","pressEvent","_moved","_finished","_holdTimeout","minHold","_withinIgnoreThreshold","dispose","endTime","activeTouches","isMoved","startTime","xDelta","yDelta","preventTrigger","root","fakeEventData","Event","withEachUpEvent","downEvents","_maxTouches","eventNS","surface","surfaceElement","preventIfMovingProxy","preventIfMoving","_isMoved","removeEventListener","_disposeAll","_isMultiTouch","_apiCall","_maxTouchesReached","_eachTouch","matchingTouch","dict","pageX","pageY","INVALIDMSG","invalidMsgRegExp","INVALIDINPUT","emailRegExp","urlRegExp","INPUTSELECTOR","CHECKBOXSELECTOR","NUMBERINPUTSELECTOR","NAME","FORM","NOVALIDATE","patternMatcher","matcher","hasAttribute","resolveRules","resolvers","validator","ruleResolvers","decode","numberOfDecimalDigits","parseHtml","parseHTML","searchForMessageContainer","containers","messages","resolved","_errorTemplate","_errors","_attachEvents","required","email","checkbox","raise","_submit","stopImmediatePropagation","inputs","invalid","messageText","_checkValidity","lbl","_findMessageContainer","_extractMessage","messageLabel","_decorateMessageContainer","hideMessages","locators","messageLocators","getElementsByTagName","locate","decorate","ruleKey","customMessage","templates","KWINDOW","KWINDOWTITLE","KWINDOWTITLEBAR","KWINDOWCONTENT","KWINDOWRESIZEHANDLES","KOVERLAY","KCONTENTFRAME","KHOVERSTATE","KFOCUSEDSTATE","MAXIMIZEDSTATE","CURSOR","REFRESH","ZINDEX","MINIMIZE_MAXIMIZE","KPIN","KUNPIN","PIN_UNPIN","TITLEBAR_BUTTONS","REFRESHICON","defined","constrain","low","high","Infinity","sizingAction","actionId","isMaximized","isMinimized","restoreOptions","executableScript","Window","windowContent","suppressActions","actions","_animations","_createWindow","_dimensions","pinned","pin","toFront","_overlay","_buttonEnter","_buttonLeave","_windowActionHandler","_resizable","_resizeHandler","_onDocumentResize","maxHeight","minWidth","maxWidth","minHeight","resizable","resizing","toggleMaximization","resizeHandle","WindowResizing","dragging","WindowDragging","dragHandle","fade","autoFocus","_closable","handled","newWidth","newHeight","w","h","overlay","_actionForIcon","_modals","zStack","_object","newTop","newLeft","documentWindow","titleBar","titleBarHeight","titlebar","scrollContainer","showOptions","contentElement","Fade","overlayFx","fadeIn","_activate","_documentScrollTop","_removeOverlay","suppressAnimation","modals","hideOverlay","hideOptions","fadeOut","systemTriggered","_deactivate","lastModal","_actionable","_shouldFocus","currentWindow","originalZIndex","windowObject","zIndexNew","windowTop","maximize","minimize","win","unpin","wnd","iframe","showIframe","initOptions","src","contentFrame","_triggerRefresh","_ajaxRequest","_ajaxComplete","_loadingIconTimeout","_ajaxError","_ajaxSuccess","contentTemplate","_showLoading","iframeSrcAttributes","contentHtml","scrollable","owner","elementPadding","initialCursorPosition","resizeDirection","initialSize","containerOffset","windowBottom","windowRight","initialPosition","initialWindowPosition","startPosition","minLeftPosition","minTopPosition","_finishDrag"],"sourceRoot":""}