{"version":3,"sources":["webpack:///./node_modules/@progress/kendo-ui/js/kendo.core.js"],"names":["module","exports","modules","installedModules","__webpack_require__","moduleId","id","loaded","call","m","c","p","0","3","Error","1059","1115","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","jQuery","f","define","apply","undefined","$","window","Template","kendo","cultures","extend","each","isArray","Array","proxy","noop","math","Math","JSON","support","percentRegExp","formatRegExp","boxShadowRegExp","numberRegExp","FUNCTION","STRING","NUMBER","OBJECT","NULL","BOOLEAN","UNDEFINED","getterCache","setterCache","slice","noDepricateExtend","src","copyIsArray","copy","name","options","clone","target","arguments","i","length","deep","this","isPlainObject","Class","version","replace","proto","member","fn","base","that","subclass","init","prototype","constructor","Object","_initOptions","deepExtend","isFunction","preventDefault","_defaultPrevented","isDefaultPrevented","Observable","_events","bind","eventName","handlers","one","idx","original","handler","events","eventNames","handlersIsFunction","unbind","push","first","unshift","trigger","e","sender","splice","compilePart","part","stringPart","split","join","charAt","rest","substring","argumentNameRegExp","encodeRegExp","escapedCurlyRegExp","curlyRegExp","escapedSharpRegExp","sharpRegExp","zeros","pad","number","digits","end","getShadows","element","shadow","css","transitions","radius","match","blur","max","left","right","bottom","wrap","autosize","percentage","outerWidth","_outerWidth","outerHeight","_outerHeight","parent","windowOuterWidth","removeClass","hasClass","wrapResize","width","style","height","percentWidth","test","percentHeight","forceWidth","is","addClass","boxSizing","mozBoxSizing","webkitBoxSizing","wrapper","wrapperStyle","display","position","destination","deepExtendOne","source","property","propValue","propType","propInit","destProp","ObservableArray","data","LazyObservableArray","DataSource","HierarchicalDataSource","RegExp","ArrayBuffer","Date","getTime","testRx","agent","rxs","dflt","rx","hasOwnProperty","toHyphens","str","g","toLowerCase","toCamelCase","strMatch","g1","toUpperCase","getComputedStyles","properties","computedStyle","styles","document","defaultView","getComputedStyle","value","getPropertyValue","currentStyle","size","isScrollable","className","indexOf","overflow","scrollLeft","el","isRtl","webkit","browser","mozila","mozilla","browserVersion","safari","scrollWidth","clientWidth","abs","obj","key","result","getOffset","type","positioned","offset","top","msie","pointers","msPointers","sign","pageYOffset","documentElement","pageXOffset","paramName","useWithBlock","render","template","html","compile","parts","settings","argumentName","functionBody","Function","_slotCount","floor","format","gap","indent","rep","escapable","meta","\"","toString","quote","string","lastIndex","a","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","culture","numberFormat","getCulture","current","formatDate","date","calendar","calendars","standard","days","months","patterns","minutes","getDate","namesAbbr","getDay","names","getMonth","getFullYear","getHours","getMinutes","getSeconds","getMilliseconds","AM","PM","getTimezoneOffset","formatNumber","symbol","isCurrency","isPercent","customPrecision","formatAndPrecision","integer","fraction","integerLength","ch","hasGroup","hasNegativeFormat","decimalIndex","sharpIndex","zeroIndex","hasZero","hasSharp","percentIndex","currencyIndex","decimal","precision","decimals","pattern","literals","negative","replacement","start","toLocaleString","exec","currency","percent","exp","toExponential","round","groupInteger","quoteChar","literal","lastIndexOf","rounded","groupSize","abbr","namesShort","d","D","F","G","M","s","t","T","u","y","Y","firstDay","twoDigitYearMax","cultureName","newGroupSize","groupSizes","shift","reverse","toFixed","min","fmt","values","index","placeholderFormat","parseInt","_extractFormat","_activeElement","activeElement","_round","includeMargin","nonBreakingSpaceRegExp","exponentRegExp","shortTimeZoneRegExp","longTimeZoneRegExp","dateRegExp","offsetRegExp","FORMATS_SEQUENCE","STANDARD_FORMATS","2","4","outOfRange","designatorPredicate","designator","mapDesignators","designators","map","adjustDST","hours","setHours","lowerArray","array","lowerLocalInfo","localInfo","newLocalInfo","parseExact","strict","count","pmHour","UTC","matches","amDesignators","pmDesignators","hoursOffset","minutesOffset","hasTime","lookAhead","getNumber","rg","substr","valueIdx","getIndexByName","lower","nameLength","subValue","matchLength","matchIdx","checkLiteral","year","month","day","seconds","milliseconds","defaultYear","_lowerDays","_lowerMonths","parseFloat","isNaN","setFullYear","parseMicrosoftFormatOffset","getDefaultFormats","cultureFormats","formatIdx","formats","concat","internalParseDate","tzoffset","timezone","convert","parseDate","parseExactDate","percentSymbol","_scrollbar","scrollbar","refresh","div","createElement","cssText","innerHTML","body","appendChild","offsetWidth","removeChild","closest","table","tbodyInnerHtml","touch","docStyle","transforms","elementProto","HTMLElement","hasHW3D","WebKitCSSMatrix","cssFlexbox","prefix","hasTransitions","lowPrefix","event","devicePixelRatio","screenWidth","screen","availWidth","innerWidth","screenHeight","availHeight","innerHeight","detectOS","ua","minorVersion","os","notAndroidPhone","agentRxs","wp","fire","android","iphone","ipad","meego","webos","blackberry","playbook","windows","tizen","sailfish","ffos","osRxs","ios","flat","formFactorRxs","tablet","browserRxs","omini","omobile","firefox","mobilesafari","ie","chrome","navigator","device","majorVersion","flatVersion","cordova","PhoneGap","appMode","standalone","location","protocol","mobileOS","userAgent","wpDevicePixelRatio","hasNativeScrolling","delayedClick","attr","mouseAndTouchPresent","detectBrowser","edge","opera","documentMode","detectClipboardAccess","commands","queryCommandSupported","cut","paste","clipboard","zoomLevel","ie11WidthCorrection","docEl","scrollHeight","clientHeight","cssClass","docElement","eventCapture","addEventListener","input","placeholder","propertyChangeEvent","types","setAttribute","cssFloat","stableSort","threshold","sorted","field","sort","b","matchesSelector","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","selector","nodeList","querySelectorAll","parentNode","matchMedia","pushState","history","hashChange","customElements","mobileChrome","crios","MSPointerEvent","PointerEvent","kineticScrollNeeded","directions","down","up","out","parseEffects","effects","fx","Element","prepareAnimationOptions","duration","complete","teardown","hide","completeCallback","animate","instance","queue","promise","toggleClass","classes","add","enabled","dequeue","disable","promiseShim","enable","animatedPromise","kendoStop","clearQueue","gotoEnd","stop","kendoAnimate","kendoAddClass","kendoRemoveClass","kendoToggleClass","toggle","ampRegExp","ltRegExp","quoteRegExp","aposRegExp","gtRegExp","htmlEncode","unescape","decodeURIComponent","error","_","m1","m2","fromCharCode","eventTarget","touches","originalEvent","changedTouches","elementFromPoint","clientX","clientY","callback","on","mousedown","mouseup","mousemove","mousecancel","click","resize","wrapExpression","members","localUrlRe","widgets","_widgetRegisteredCallbacks","ui","mobile","dataviz","drawing","spreadsheet","messages","keys","INSERT","DELETE","BACKSPACE","TAB","ENTER","ESC","LEFT","UP","RIGHT","DOWN","END","HOME","SPACEBAR","PAGEUP","PAGEDOWN","F2","F10","F12","NUMPAD_PLUS","NUMPAD_MINUS","NUMPAD_DOT","ns","isLocalUrl","url","expr","expression","safe","getter","setter","accessor","get","set","guid","random","chars","roleSelector","role","directiveSelector","directives","selectors","triggeredByInput","tagName","onWidgetRegistered","len","logToConsole","message","console","suppressLog","log","Widget","angular","props","dataSource","componentTypes","componentType","defaults","_hasBindingTarget","kendoBindingTarget","_tabindex","TABINDEX","tabindex","removeAttr","setOptions","_setEvents","force","getSize","currentSize","_size","_resize","dimensions","setSize","destroy","removeData","_destroy","_muteAngularRebind","_muteRebind","DataBoundWidget","dataItems","flatView","_angularItems","cmd","elements","items","dataItem","domElement","offsetHeight","notify","templateRegExp","jsonRegExp","jsonFormatRegExp","dashRegExp","parseOption","option","getAttribute","parseOptions","containmentComparer","contains","resizableWidget","widget","inArray","initWidget","roles","fullPath","widgetKeyRegExp","nodeType","widgetKey","isEmptyObject","rolesFromNamespaces","namespaces","find","addBack","filter","widgetsArray","makeArray","widgetInstance","progress","container","leftRight","webkitCorrection","containerScrollLeft","mask","scrollTop","opacity","loading","prependTo","remove","plugin","register","widgetEntry","args","method","ContainerNullObject","nullObject","MobileWidget","autoApplyNS","kendoDestroy","view","viewElement","viewHasNativeScrolling","useNativeScrolling","eq","focusable","isTabIndexNotNaN","nodeName","disabled","href","visible","pseudos","parents","appLevelNativeScrolling","application","themes","views","touchScroller","useNative","Scroller","kendoMobileScroller","suites","elementData","editorToolbar","onResize","setTimeout","unbindResize","off","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","keyDownHandler","kendoKeydown","preventKendoKeydown","kendoJQuery","context","rootjQuery","pop","search","touchstart","touchend","keyDownCallBack","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec","Sun","Mon","Tue","Wed","Thu","Fri","Sat","ruleToDate","rule","targetDay","ourDay","time","cache","getUTCDay","setUTCDate","findRule","utcTime","rules","zone","grep","from","to","findZone","zones","zoneRules","until","zoneAndRule","info","fromOffset","toOffset","diff","tempToOffset","fromLocalOffset","toLocalOffset","toLocalDate","MS_PER_MINUTE","MS_PER_DAY","setDayOfWeek","dir","setDate","dayOfWeek","firstDayOfMonth","lastDayOfMonth","last","timeOffset","firstDayOfYear","lastDayOfYear","moveDateToWeekStart","weekStartDay","addDays","calcWeekInYear","firstWeekInYear","newDate","diffInMS","weekInYear","prevWeekDate","nextWeekDate","weekNumber","toUtcTime","toInvariantTime","isInTimeRange","msValue","msMin","msMax","isInDateRange","setTime","ignoreDST","difference","today","isToday","staticDate","addYear","currentDate","nextDay","previousDay","MS_PER_HOUR","nextYear","previousYear","stripWhitespace","createNodeIterator","iterator","NodeFilter","SHOW_TEXT","node","FILTER_ACCEPT","FILTER_REJECT","nextNode","referenceNode","textContent","trim","childNodes","child","nodeValue","animationFrame","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","animationQueue","queueAnimation","runNextAnimation","parseQueryStringParams","queryString","params","paramParts","elementUnderCursor","x","client","wheelDeltaY","jQueryEvent","delta","deltaY","wheelDelta","detail","axis","VERTICAL_AXIS","throttle","delay","timeout","lastExecTime","throttled","elapsed","caret","rangeElement","isPosition","selectionStart","focus","setSelectionRange","selectionEnd","selection","createTextRange","collapse","moveStart","moveEnd","select","rangeDuplicated","duplicate","moveToBookmark","createRange","getBookmark","setEndPoint","text","compileMobileDirective","scope","injector","invoke","$compile","$$phase","$digest","antiForgeryTokens","tokens","csrf_token","csrf_param","cycleForm","form","firstElement","lastElement","keyCode","shiftKey","focusElement","scrollTopPositions","scrollableParents","parentsUntil","setActive","focusNextElement","focussable","nextElement","getWidgetFocusableElement","nextFocusable","addAttribute","attribute","removeAttribute","toggleAttribute","matchesMedia","mediaQuery","media","_bootstrapToMedia","bootstrapMedia","fileGroupMap","audio","video","image","txt","presentation","programming","pdf","config","zip","getFileGroup","extension","withPrefix","fileTypeMap","groups","extensions","getFileSizeMessage","sizes","pow","selectorFromClasses","themeColorValues","fillValues","postitionValues","shapeValues","sizeValues","alignValues","positionModeValues","propertyToCssClassMap","registerCssClass","propName","shorthand","registerCssClasses","arr","getValidCssClass","validValue","whenAll","resolveValues","remaining","deferred","Deferred","failed","rejectContexts","rejectValues","resolveContexts","updateFunc","contexts","notifyWith","done","fail","resolveWith","postToProxy","dataURI","fileName","proxyURL","proxyTarget","action","contentType","base64","appendTo","submit","fileSaver","downloadAttribute","saveAsBlob","blob","atob","Uint8Array","Blob","buffer","msSaveBlob","saveAsDataURI","URL","createObjectURL","download","createEvent","initMouseEvent","dispatchEvent","revokeObjectURL","saveAs","save","forceProxy","proxyModelSetters","observable","forEach","defineProperty","dirty","getSeriesColors","seriesColorsTemplate","series","colors","item","isElement","HTMLDocument","setDefaults","path","curr","class2type","_i"],"mappings":"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","file":"js/chunk-vendors~90c9c1fe.c1f87000.js","sourcesContent":["module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(1115);\n\n\n/***/ }),\n\n/***/ 3:\n/***/ (function(module, exports) {\n\n\tmodule.exports = function() { throw new Error(\"define cannot be used indirect\"); };\r\n\n\n/***/ }),\n\n/***/ 1059:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"jquery\");\n\n/***/ }),\n\n/***/ 1115:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/* WEBPACK VAR INJECTION */(function(jQuery) {(function(f, define){\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(1059)], __WEBPACK_AMD_DEFINE_FACTORY__ = (f), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t})(function(){\n\n\tvar __meta__ = { // jshint ignore:line\n\t id: \"core\",\n\t name: \"Core\",\n\t category: \"framework\",\n\t description: \"The core of the Kendo framework.\"\n\t};\n\n\t/*jshint eqnull: true, loopfunc: true, evil: true, boss: true, freeze: false*/\n\t(function($, window, undefined) {\n\t var kendo = window.kendo = window.kendo || { cultures: {} },\n\t extend = $.extend,\n\t each = $.each,\n\t isArray = Array.isArray,\n\t proxy = $.proxy,\n\t noop = $.noop,\n\t math = Math,\n\t Template,\n\t JSON = window.JSON || {},\n\t support = {},\n\t percentRegExp = /%/,\n\t formatRegExp = /\\{(\\d+)(:[^\\}]+)?\\}/g,\n\t boxShadowRegExp = /(\\d+(?:\\.?)\\d*)px\\s*(\\d+(?:\\.?)\\d*)px\\s*(\\d+(?:\\.?)\\d*)px\\s*(\\d+)?/i,\n\t numberRegExp = /^(\\+|-?)\\d+(\\.?)\\d*$/,\n\t FUNCTION = \"function\",\n\t STRING = \"string\",\n\t NUMBER = \"number\",\n\t OBJECT = \"object\",\n\t NULL = \"null\",\n\t BOOLEAN = \"boolean\",\n\t UNDEFINED = \"undefined\",\n\t getterCache = {},\n\t setterCache = {},\n\t slice = [].slice,\n\t // avoid extending the depricated properties in latest verions of jQuery\n\t noDepricateExtend = function() {\n\t var src, copyIsArray, copy, name, options, clone,\n\t target = arguments[ 0 ] || {},\n\t i = 1,\n\t length = arguments.length,\n\t deep = false;\n\n\t // Handle a deep copy situation\n\t if ( typeof target === \"boolean\" ) {\n\t deep = target;\n\n\t // skip the boolean and the target\n\t target = arguments[ i ] || {};\n\t i++;\n\t }\n\n\t // Handle case when target is a string or something (possible in deep copy)\n\t if ( typeof target !== \"object\" && typeof target !== \"function\") {\n\t target = {};\n\t }\n\n\t // extend jQuery itself if only one argument is passed\n\t if ( i === length ) {\n\t target = this;\n\t i--;\n\t }\n\n\t for ( ; i < length; i++ ) {\n\n\t // Only deal with non-null/undefined values\n\t if ( ( options = arguments[ i ] ) != null ) {\n\n\t // Extend the base object\n\t for ( name in options ) {\n\t // filters, concat and : properties are depricated in the jQuery 3.3.0\n\t // accessing these properties throw a warning when jQuery migrate is included\n\t if (name == \"filters\" || name == \"concat\" || name == \":\") {\n\t continue;\n\t }\n\t src = target[ name ];\n\t copy = options[ name ];\n\n\t // Prevent never-ending loop\n\t if ( target === copy ) {\n\t continue;\n\t }\n\n\t // Recurse if we're merging plain objects or arrays\n\t if ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t ( copyIsArray = Array.isArray( copy ) ) ) ) {\n\n\t if ( copyIsArray ) {\n\t copyIsArray = false;\n\t clone = src && Array.isArray( src ) ? src : [];\n\n\t } else {\n\t clone = src && jQuery.isPlainObject( src ) ? src : {};\n\t }\n\n\t // Never move original objects, clone them\n\t target[ name ] = noDepricateExtend( deep, clone, copy );\n\n\t // Don't bring in undefined values\n\t } else if ( copy !== undefined ) {\n\t target[ name ] = copy;\n\t }\n\t }\n\t }\n\t }\n\n\t // Return the modified object\n\t return target;\n\t };\n\n\t kendo.version = \"2021.3.1207\".replace(/^\\s+|\\s+$/g, '');\n\n\t function Class() {}\n\n\t Class.extend = function(proto) {\n\t var base = function() {},\n\t member,\n\t that = this,\n\t subclass = proto && proto.init ? proto.init : function () {\n\t that.apply(this, arguments);\n\t },\n\t fn;\n\n\t base.prototype = that.prototype;\n\t fn = subclass.fn = subclass.prototype = new base();\n\n\t for (member in proto) {\n\t if (proto[member] != null && proto[member].constructor === Object) {\n\t // Merge object members\n\t fn[member] = extend(true, {}, base.prototype[member], proto[member]);\n\t } else {\n\t fn[member] = proto[member];\n\t }\n\t }\n\n\t fn.constructor = subclass;\n\t subclass.extend = that.extend;\n\n\t return subclass;\n\t };\n\n\t Class.prototype._initOptions = function(options) {\n\t this.options = deepExtend({}, this.options, options);\n\t };\n\n\t var isFunction = kendo.isFunction = function(fn) {\n\t return typeof fn === \"function\";\n\t };\n\n\t var preventDefault = function() {\n\t this._defaultPrevented = true;\n\t };\n\n\t var isDefaultPrevented = function() {\n\t return this._defaultPrevented === true;\n\t };\n\n\t var Observable = Class.extend({\n\t init: function() {\n\t this._events = {};\n\t },\n\n\t bind: function(eventName, handlers, one) {\n\t var that = this,\n\t idx,\n\t eventNames = typeof eventName === STRING ? [eventName] : eventName,\n\t length,\n\t original,\n\t handler,\n\t handlersIsFunction = typeof handlers === FUNCTION,\n\t events;\n\n\t if (handlers === undefined) {\n\t for (idx in eventName) {\n\t that.bind(idx, eventName[idx]);\n\t }\n\t return that;\n\t }\n\n\t for (idx = 0, length = eventNames.length; idx < length; idx++) {\n\t eventName = eventNames[idx];\n\n\t handler = handlersIsFunction ? handlers : handlers[eventName];\n\n\t if (handler) {\n\t if (one) {\n\t original = handler;\n\t handler = function() {\n\t that.unbind(eventName, handler);\n\t original.apply(that, arguments);\n\t };\n\t handler.original = original;\n\t }\n\t events = that._events[eventName] = that._events[eventName] || [];\n\t events.push(handler);\n\t }\n\t }\n\n\t return that;\n\t },\n\n\t one: function(eventNames, handlers) {\n\t return this.bind(eventNames, handlers, true);\n\t },\n\n\t first: function(eventName, handlers) {\n\t var that = this,\n\t idx,\n\t eventNames = typeof eventName === STRING ? [eventName] : eventName,\n\t length,\n\t handler,\n\t handlersIsFunction = typeof handlers === FUNCTION,\n\t events;\n\n\t for (idx = 0, length = eventNames.length; idx < length; idx++) {\n\t eventName = eventNames[idx];\n\n\t handler = handlersIsFunction ? handlers : handlers[eventName];\n\n\t if (handler) {\n\t events = that._events[eventName] = that._events[eventName] || [];\n\t events.unshift(handler);\n\t }\n\t }\n\n\t return that;\n\t },\n\n\t trigger: function(eventName, e) {\n\t var that = this,\n\t events = that._events[eventName],\n\t idx,\n\t length;\n\n\t if (events) {\n\t e = e || {};\n\n\t e.sender = that;\n\n\t e._defaultPrevented = false;\n\n\t e.preventDefault = preventDefault;\n\n\t e.isDefaultPrevented = isDefaultPrevented;\n\n\t events = events.slice();\n\n\t for (idx = 0, length = events.length; idx < length; idx++) {\n\t events[idx].call(that, e);\n\t }\n\n\t return e._defaultPrevented === true;\n\t }\n\n\t return false;\n\t },\n\n\t unbind: function(eventName, handler) {\n\t var that = this,\n\t events = that._events[eventName],\n\t idx;\n\n\t if (eventName === undefined) {\n\t that._events = {};\n\t } else if (events) {\n\t if (handler) {\n\t for (idx = events.length - 1; idx >= 0; idx--) {\n\t if (events[idx] === handler || events[idx].original === handler) {\n\t events.splice(idx, 1);\n\t }\n\t }\n\t } else {\n\t that._events[eventName] = [];\n\t }\n\t }\n\n\t return that;\n\t }\n\t });\n\n\n\t function compilePart(part, stringPart) {\n\t if (stringPart) {\n\t return \"'\" +\n\t part.split(\"'\").join(\"\\\\'\")\n\t .split('\\\\\"').join('\\\\\\\\\\\\\"')\n\t .replace(/\\n/g, \"\\\\n\")\n\t .replace(/\\r/g, \"\\\\r\")\n\t .replace(/\\t/g, \"\\\\t\") + \"'\";\n\t } else {\n\t var first = part.charAt(0),\n\t rest = part.substring(1);\n\n\t if (first === \"=\") {\n\t return \"+(\" + rest + \")+\";\n\t } else if (first === \":\") {\n\t return \"+$kendoHtmlEncode(\" + rest + \")+\";\n\t } else {\n\t return \";\" + part + \";$kendoOutput+=\";\n\t }\n\t }\n\t }\n\n\t var argumentNameRegExp = /^\\w+/,\n\t encodeRegExp = /\\$\\{([^}]*)\\}/g,\n\t escapedCurlyRegExp = /\\\\\\}/g,\n\t curlyRegExp = /__CURLY__/g,\n\t escapedSharpRegExp = /\\\\#/g,\n\t sharpRegExp = /__SHARP__/g,\n\t zeros = [\"\", \"0\", \"00\", \"000\", \"0000\"];\n\n\t Template = {\n\t paramName: \"data\", // name of the parameter of the generated template\n\t useWithBlock: true, // whether to wrap the template in a with() block\n\t render: function(template, data) {\n\t var idx,\n\t length,\n\t html = \"\";\n\n\t for (idx = 0, length = data.length; idx < length; idx++) {\n\t html += template(data[idx]);\n\t }\n\n\t return html;\n\t },\n\t compile: function(template, options) {\n\t var settings = extend({}, this, options),\n\t paramName = settings.paramName,\n\t argumentName = paramName.match(argumentNameRegExp)[0],\n\t useWithBlock = settings.useWithBlock,\n\t functionBody = \"var $kendoOutput, $kendoHtmlEncode = kendo.htmlEncode;\",\n\t fn,\n\t parts,\n\t idx;\n\n\t if (isFunction(template)) {\n\t return template;\n\t }\n\n\t functionBody += useWithBlock ? \"with(\" + paramName + \"){\" : \"\";\n\n\t functionBody += \"$kendoOutput=\";\n\n\t parts = template\n\t .replace(escapedCurlyRegExp, \"__CURLY__\")\n\t .replace(encodeRegExp, \"#=$kendoHtmlEncode($1)#\")\n\t .replace(curlyRegExp, \"}\")\n\t .replace(escapedSharpRegExp, \"__SHARP__\")\n\t .split(\"#\");\n\n\t for (idx = 0; idx < parts.length; idx ++) {\n\t functionBody += compilePart(parts[idx], idx % 2 === 0);\n\t }\n\n\t functionBody += useWithBlock ? \";}\" : \";\";\n\n\t functionBody += \"return $kendoOutput;\";\n\n\t functionBody = functionBody.replace(sharpRegExp, \"#\");\n\n\t try {\n\t fn = new Function(argumentName, functionBody);\n\t fn._slotCount = Math.floor(parts.length / 2);\n\t return fn;\n\t } catch(e) {\n\t throw new Error(kendo.format(\"Invalid template:'{0}' Generated code:'{1}'\", template, functionBody));\n\t }\n\t }\n\t };\n\n\tfunction pad(number, digits, end) {\n\t number = number + \"\";\n\t digits = digits || 2;\n\t end = digits - number.length;\n\n\t if (end) {\n\t return zeros[digits].substring(0, end) + number;\n\t }\n\n\t return number;\n\t}\n\n\t //JSON stringify\n\t(function() {\n\t var escapable = /[\\\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g,\n\t gap,\n\t indent,\n\t meta = {\n\t \"\\b\": \"\\\\b\",\n\t \"\\t\": \"\\\\t\",\n\t \"\\n\": \"\\\\n\",\n\t \"\\f\": \"\\\\f\",\n\t \"\\r\": \"\\\\r\",\n\t \"\\\"\" : '\\\\\"',\n\t \"\\\\\": \"\\\\\\\\\"\n\t },\n\t rep,\n\t toString = {}.toString;\n\n\n\t if (typeof Date.prototype.toJSON !== FUNCTION) {\n\n\t Date.prototype.toJSON = function () {\n\t var that = this;\n\n\t return isFinite(that.valueOf()) ?\n\t pad(that.getUTCFullYear(), 4) + \"-\" +\n\t pad(that.getUTCMonth() + 1) + \"-\" +\n\t pad(that.getUTCDate()) + \"T\" +\n\t pad(that.getUTCHours()) + \":\" +\n\t pad(that.getUTCMinutes()) + \":\" +\n\t pad(that.getUTCSeconds()) + \"Z\" : null;\n\t };\n\n\t String.prototype.toJSON = Number.prototype.toJSON = Boolean.prototype.toJSON = function () {\n\t return this.valueOf();\n\t };\n\t }\n\n\t function quote(string) {\n\t escapable.lastIndex = 0;\n\t return escapable.test(string) ? \"\\\"\" + string.replace(escapable, function (a) {\n\t var c = meta[a];\n\t return typeof c === STRING ? c :\n\t \"\\\\u\" + (\"0000\" + a.charCodeAt(0).toString(16)).slice(-4);\n\t }) + \"\\\"\" : \"\\\"\" + string + \"\\\"\";\n\t }\n\n\t function str(key, holder) {\n\t var i,\n\t k,\n\t v,\n\t length,\n\t mind = gap,\n\t partial,\n\t value = holder[key],\n\t type;\n\n\t if (value && typeof value === OBJECT && typeof value.toJSON === FUNCTION) {\n\t value = value.toJSON(key);\n\t }\n\n\t if (typeof rep === FUNCTION) {\n\t value = rep.call(holder, key, value);\n\t }\n\n\t type = typeof value;\n\t if (type === STRING) {\n\t return quote(value);\n\t } else if (type === NUMBER) {\n\t return isFinite(value) ? String(value) : NULL;\n\t } else if (type === BOOLEAN || type === NULL) {\n\t return String(value);\n\t } else if (type === OBJECT) {\n\t if (!value) {\n\t return NULL;\n\t }\n\t gap += indent;\n\t partial = [];\n\t if (toString.apply(value) === \"[object Array]\") {\n\t length = value.length;\n\t for (i = 0; i < length; i++) {\n\t partial[i] = str(i, value) || NULL;\n\t }\n\t v = partial.length === 0 ? \"[]\" : gap ?\n\t \"[\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"]\" :\n\t \"[\" + partial.join(\",\") + \"]\";\n\t gap = mind;\n\t return v;\n\t }\n\t if (rep && typeof rep === OBJECT) {\n\t length = rep.length;\n\t for (i = 0; i < length; i++) {\n\t if (typeof rep[i] === STRING) {\n\t k = rep[i];\n\t v = str(k, value);\n\t if (v) {\n\t partial.push(quote(k) + (gap ? \": \" : \":\") + v);\n\t }\n\t }\n\t }\n\t } else {\n\t for (k in value) {\n\t if (Object.hasOwnProperty.call(value, k)) {\n\t v = str(k, value);\n\t if (v) {\n\t partial.push(quote(k) + (gap ? \": \" : \":\") + v);\n\t }\n\t }\n\t }\n\t }\n\n\t v = partial.length === 0 ? \"{}\" : gap ?\n\t \"{\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"}\" :\n\t \"{\" + partial.join(\",\") + \"}\";\n\t gap = mind;\n\t return v;\n\t }\n\t }\n\n\t if (typeof JSON.stringify !== FUNCTION) {\n\t JSON.stringify = function (value, replacer, space) {\n\t var i;\n\t gap = \"\";\n\t indent = \"\";\n\n\t if (typeof space === NUMBER) {\n\t for (i = 0; i < space; i += 1) {\n\t indent += \" \";\n\t }\n\n\t } else if (typeof space === STRING) {\n\t indent = space;\n\t }\n\n\t rep = replacer;\n\t if (replacer && typeof replacer !== FUNCTION && (typeof replacer !== OBJECT || typeof replacer.length !== NUMBER)) {\n\t throw new Error(\"JSON.stringify\");\n\t }\n\n\t return str(\"\", {\"\": value});\n\t };\n\t }\n\t})();\n\n\t// Date and Number formatting\n\t(function() {\n\t var dateFormatRegExp = /dddd|ddd|dd|d|MMMM|MMM|MM|M|yyyy|yy|HH|H|hh|h|mm|m|fff|ff|f|tt|ss|s|zzz|zz|z|\"[^\"]*\"|'[^']*'/g,\n\t standardFormatRegExp = /^(n|c|p|e)(\\d*)$/i,\n\t literalRegExp = /(\\\\.)|(['][^']*[']?)|([\"][^\"]*[\"]?)/g,\n\t commaRegExp = /\\,/g,\n\t EMPTY = \"\",\n\t POINT = \".\",\n\t COMMA = \",\",\n\t SHARP = \"#\",\n\t ZERO = \"0\",\n\t PLACEHOLDER = \"??\",\n\t EN = \"en-US\",\n\t objectToString = {}.toString;\n\n\t //cultures\n\t kendo.cultures[\"en-US\"] = {\n\t name: EN,\n\t numberFormat: {\n\t pattern: [\"-n\"],\n\t decimals: 2,\n\t \",\": \",\",\n\t \".\": \".\",\n\t groupSize: [3],\n\t percent: {\n\t pattern: [\"-n %\", \"n %\"],\n\t decimals: 2,\n\t \",\": \",\",\n\t \".\": \".\",\n\t groupSize: [3],\n\t symbol: \"%\"\n\t },\n\t currency: {\n\t name: \"US Dollar\",\n\t abbr: \"USD\",\n\t pattern: [\"($n)\", \"$n\"],\n\t decimals: 2,\n\t \",\": \",\",\n\t \".\": \".\",\n\t groupSize: [3],\n\t symbol: \"$\"\n\t }\n\t },\n\t calendars: {\n\t standard: {\n\t days: {\n\t names: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n\t namesAbbr: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n\t namesShort: [ \"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\" ]\n\t },\n\t months: {\n\t names: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n\t namesAbbr: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n\t },\n\t AM: [ \"AM\", \"am\", \"AM\" ],\n\t PM: [ \"PM\", \"pm\", \"PM\" ],\n\t patterns: {\n\t d: \"M/d/yyyy\",\n\t D: \"dddd, MMMM dd, yyyy\",\n\t F: \"dddd, MMMM dd, yyyy h:mm:ss tt\",\n\t g: \"M/d/yyyy h:mm tt\",\n\t G: \"M/d/yyyy h:mm:ss tt\",\n\t m: \"MMMM dd\",\n\t M: \"MMMM dd\",\n\t s: \"yyyy'-'MM'-'ddTHH':'mm':'ss\",\n\t t: \"h:mm tt\",\n\t T: \"h:mm:ss tt\",\n\t u: \"yyyy'-'MM'-'dd HH':'mm':'ss'Z'\",\n\t y: \"MMMM, yyyy\",\n\t Y: \"MMMM, yyyy\"\n\t },\n\t \"/\": \"/\",\n\t \":\": \":\",\n\t firstDay: 0,\n\t twoDigitYearMax: 2029\n\t }\n\t }\n\t };\n\n\n\t function findCulture(culture) {\n\t if (culture) {\n\t if (culture.numberFormat) {\n\t return culture;\n\t }\n\n\t if (typeof culture === STRING) {\n\t var cultures = kendo.cultures;\n\t return cultures[culture] || cultures[culture.split(\"-\")[0]] || null;\n\t }\n\n\t return null;\n\t }\n\n\t return null;\n\t }\n\n\t function getCulture(culture) {\n\t if (culture) {\n\t culture = findCulture(culture);\n\t }\n\n\t return culture || kendo.cultures.current;\n\t }\n\n\t kendo.culture = function(cultureName) {\n\t var cultures = kendo.cultures, culture;\n\n\t if (cultureName !== undefined) {\n\t culture = findCulture(cultureName) || cultures[EN];\n\t culture.calendar = culture.calendars.standard;\n\t cultures.current = culture;\n\t } else {\n\t return cultures.current;\n\t }\n\t };\n\n\t kendo.findCulture = findCulture;\n\t kendo.getCulture = getCulture;\n\n\t //set current culture to en-US.\n\t kendo.culture(EN);\n\n\t function formatDate(date, format, culture) {\n\t culture = getCulture(culture);\n\n\t var calendar = culture.calendars.standard,\n\t days = calendar.days,\n\t months = calendar.months;\n\n\t format = calendar.patterns[format] || format;\n\n\t return format.replace(dateFormatRegExp, function (match) {\n\t var minutes;\n\t var result;\n\t var sign;\n\n\t if (match === \"d\") {\n\t result = date.getDate();\n\t } else if (match === \"dd\") {\n\t result = pad(date.getDate());\n\t } else if (match === \"ddd\") {\n\t result = days.namesAbbr[date.getDay()];\n\t } else if (match === \"dddd\") {\n\t result = days.names[date.getDay()];\n\t } else if (match === \"M\") {\n\t result = date.getMonth() + 1;\n\t } else if (match === \"MM\") {\n\t result = pad(date.getMonth() + 1);\n\t } else if (match === \"MMM\") {\n\t result = months.namesAbbr[date.getMonth()];\n\t } else if (match === \"MMMM\") {\n\t result = months.names[date.getMonth()];\n\t } else if (match === \"yy\") {\n\t result = pad(date.getFullYear() % 100);\n\t } else if (match === \"yyyy\") {\n\t result = pad(date.getFullYear(), 4);\n\t } else if (match === \"h\" ) {\n\t result = date.getHours() % 12 || 12;\n\t } else if (match === \"hh\") {\n\t result = pad(date.getHours() % 12 || 12);\n\t } else if (match === \"H\") {\n\t result = date.getHours();\n\t } else if (match === \"HH\") {\n\t result = pad(date.getHours());\n\t } else if (match === \"m\") {\n\t result = date.getMinutes();\n\t } else if (match === \"mm\") {\n\t result = pad(date.getMinutes());\n\t } else if (match === \"s\") {\n\t result = date.getSeconds();\n\t } else if (match === \"ss\") {\n\t result = pad(date.getSeconds());\n\t } else if (match === \"f\") {\n\t result = math.floor(date.getMilliseconds() / 100);\n\t } else if (match === \"ff\") {\n\t result = date.getMilliseconds();\n\t if (result > 99) {\n\t result = math.floor(result / 10);\n\t }\n\t result = pad(result);\n\t } else if (match === \"fff\") {\n\t result = pad(date.getMilliseconds(), 3);\n\t } else if (match === \"tt\") {\n\t result = date.getHours() < 12 ? calendar.AM[0] : calendar.PM[0];\n\t } else if (match === \"zzz\") {\n\t minutes = date.getTimezoneOffset();\n\t sign = minutes < 0;\n\n\t result = math.abs(minutes / 60).toString().split(\".\")[0];\n\t minutes = math.abs(minutes) - (result * 60);\n\n\t result = (sign ? \"+\" : \"-\") + pad(result);\n\t result += \":\" + pad(minutes);\n\t } else if (match === \"zz\" || match === \"z\") {\n\t result = date.getTimezoneOffset() / 60;\n\t sign = result < 0;\n\n\t result = math.abs(result).toString().split(\".\")[0];\n\t result = (sign ? \"+\" : \"-\") + (match === \"zz\" ? pad(result) : result);\n\t }\n\n\t return result !== undefined ? result : match.slice(1, match.length - 1);\n\t });\n\t }\n\n\t //number formatting\n\t function formatNumber(number, format, culture) {\n\t culture = getCulture(culture);\n\n\t var numberFormat = culture.numberFormat,\n\t decimal = numberFormat[POINT],\n\t precision = numberFormat.decimals,\n\t pattern = numberFormat.pattern[0],\n\t literals = [],\n\t symbol,\n\t isCurrency, isPercent,\n\t customPrecision,\n\t formatAndPrecision,\n\t negative = number < 0,\n\t integer,\n\t fraction,\n\t integerLength,\n\t fractionLength,\n\t replacement = EMPTY,\n\t value = EMPTY,\n\t idx,\n\t length,\n\t ch,\n\t hasGroup,\n\t hasNegativeFormat,\n\t decimalIndex,\n\t sharpIndex,\n\t zeroIndex,\n\t hasZero, hasSharp,\n\t percentIndex,\n\t currencyIndex,\n\t startZeroIndex,\n\t start = -1,\n\t end;\n\n\t //return empty string if no number\n\t if (number === undefined) {\n\t return EMPTY;\n\t }\n\n\t if (!isFinite(number)) {\n\t return number;\n\t }\n\n\t //if no format then return number.toString() or number.toLocaleString() if culture.name is not defined\n\t if (!format) {\n\t return culture.name.length ? number.toLocaleString() : number.toString();\n\t }\n\n\t formatAndPrecision = standardFormatRegExp.exec(format);\n\n\t // standard formatting\n\t if (formatAndPrecision) {\n\t format = formatAndPrecision[1].toLowerCase();\n\n\t isCurrency = format === \"c\";\n\t isPercent = format === \"p\";\n\n\t if (isCurrency || isPercent) {\n\t //get specific number format information if format is currency or percent\n\t numberFormat = isCurrency ? numberFormat.currency : numberFormat.percent;\n\t decimal = numberFormat[POINT];\n\t precision = numberFormat.decimals;\n\t symbol = numberFormat.symbol;\n\t pattern = numberFormat.pattern[negative ? 0 : 1];\n\t }\n\n\t customPrecision = formatAndPrecision[2];\n\n\t if (customPrecision) {\n\t precision = +customPrecision;\n\t }\n\n\t //return number in exponential format\n\t if (format === \"e\") {\n\t var exp = customPrecision ? number.toExponential(precision) : number.toExponential(); // toExponential() and toExponential(undefined) differ in FF #653438.\n\n\t return exp.replace(POINT, numberFormat[POINT]);\n\t }\n\n\t // multiply if format is percent\n\t if (isPercent) {\n\t number *= 100;\n\t }\n\n\t number = round(number, precision);\n\t negative = number < 0;\n\t number = number.split(POINT);\n\n\t integer = number[0];\n\t fraction = number[1];\n\n\t //exclude \"-\" if number is negative.\n\t if (negative) {\n\t integer = integer.substring(1);\n\t }\n\n\t value = groupInteger(integer, 0, integer.length, numberFormat);\n\n\t if (fraction) {\n\t value += decimal + fraction;\n\t }\n\n\t if (format === \"n\" && !negative) {\n\t return value;\n\t }\n\n\t number = EMPTY;\n\n\t for (idx = 0, length = pattern.length; idx < length; idx++) {\n\t ch = pattern.charAt(idx);\n\n\t if (ch === \"n\") {\n\t number += value;\n\t } else if (ch === \"$\" || ch === \"%\") {\n\t number += symbol;\n\t } else {\n\t number += ch;\n\t }\n\t }\n\n\t return number;\n\t }\n\n\t //custom formatting\n\t //\n\t //separate format by sections.\n\n\t if (format.indexOf(\"'\") > -1 || format.indexOf(\"\\\"\") > -1 || format.indexOf(\"\\\\\") > -1) {\n\t format = format.replace(literalRegExp, function (match) {\n\t var quoteChar = match.charAt(0).replace(\"\\\\\", \"\"),\n\t literal = match.slice(1).replace(quoteChar, \"\");\n\n\t literals.push(literal);\n\n\t return PLACEHOLDER;\n\t });\n\t }\n\n\t format = format.split(\";\");\n\t if (negative && format[1]) {\n\t //get negative format\n\t format = format[1];\n\t hasNegativeFormat = true;\n\t } else if (number === 0 && format[2]) {\n\t //format for zeros\n\t format = format[2];\n\t if (format.indexOf(SHARP) == -1 && format.indexOf(ZERO) == -1) {\n\t //return format if it is string constant.\n\t return format;\n\t }\n\t } else {\n\t format = format[0];\n\t }\n\n\t percentIndex = format.indexOf(\"%\");\n\t currencyIndex = format.indexOf(\"$\");\n\n\t isPercent = percentIndex != -1;\n\t isCurrency = currencyIndex != -1;\n\n\t //multiply number if the format has percent\n\t if (isPercent) {\n\t number *= 100;\n\t }\n\n\t if (isCurrency && format[currencyIndex - 1] === \"\\\\\") {\n\t format = format.split(\"\\\\\").join(\"\");\n\t isCurrency = false;\n\t }\n\n\t if (isCurrency || isPercent) {\n\t //get specific number format information if format is currency or percent\n\t numberFormat = isCurrency ? numberFormat.currency : numberFormat.percent;\n\t decimal = numberFormat[POINT];\n\t precision = numberFormat.decimals;\n\t symbol = numberFormat.symbol;\n\t }\n\n\t hasGroup = format.indexOf(COMMA) > -1;\n\t if (hasGroup) {\n\t format = format.replace(commaRegExp, EMPTY);\n\t }\n\n\t decimalIndex = format.indexOf(POINT);\n\t length = format.length;\n\n\t if (decimalIndex != -1) {\n\t fraction = number.toString().split(\"e\");\n\t if (fraction[1]) {\n\t fraction = round(number, Math.abs(fraction[1]));\n\t } else {\n\t fraction = fraction[0];\n\t }\n\t fraction = fraction.split(POINT)[1] || EMPTY;\n\t zeroIndex = format.lastIndexOf(ZERO) - decimalIndex;\n\t sharpIndex = format.lastIndexOf(SHARP) - decimalIndex;\n\t hasZero = zeroIndex > -1;\n\t hasSharp = sharpIndex > -1;\n\t idx = fraction.length;\n\n\t if (!hasZero && !hasSharp) {\n\t format = format.substring(0, decimalIndex) + format.substring(decimalIndex + 1);\n\t length = format.length;\n\t decimalIndex = -1;\n\t idx = 0;\n\t }\n\n\t if (hasZero && zeroIndex > sharpIndex) {\n\t idx = zeroIndex;\n\t } else if (sharpIndex > zeroIndex) {\n\t if (hasSharp && idx > sharpIndex) {\n\t var rounded = round(number, sharpIndex, negative);\n\n\t while (rounded.charAt(rounded.length - 1) === ZERO && sharpIndex > 0 && sharpIndex > zeroIndex) {\n\t sharpIndex--;\n\n\t rounded = round(number, sharpIndex, negative);\n\t }\n\n\t idx = sharpIndex;\n\t } else if (hasZero && idx < zeroIndex) {\n\t idx = zeroIndex;\n\t }\n\t }\n\t }\n\n\t number = round(number, idx, negative);\n\n\t sharpIndex = format.indexOf(SHARP);\n\t startZeroIndex = zeroIndex = format.indexOf(ZERO);\n\n\t //define the index of the first digit placeholder\n\t if (sharpIndex == -1 && zeroIndex != -1) {\n\t start = zeroIndex;\n\t } else if (sharpIndex != -1 && zeroIndex == -1) {\n\t start = sharpIndex;\n\t } else {\n\t start = sharpIndex > zeroIndex ? zeroIndex : sharpIndex;\n\t }\n\n\t sharpIndex = format.lastIndexOf(SHARP);\n\t zeroIndex = format.lastIndexOf(ZERO);\n\n\t //define the index of the last digit placeholder\n\t if (sharpIndex == -1 && zeroIndex != -1) {\n\t end = zeroIndex;\n\t } else if (sharpIndex != -1 && zeroIndex == -1) {\n\t end = sharpIndex;\n\t } else {\n\t end = sharpIndex > zeroIndex ? sharpIndex : zeroIndex;\n\t }\n\n\t if (start == length) {\n\t end = start;\n\t }\n\n\t if (start != -1) {\n\t value = number.toString().split(POINT);\n\t integer = value[0];\n\t fraction = value[1] || EMPTY;\n\n\t integerLength = integer.length;\n\t fractionLength = fraction.length;\n\n\t if (negative && (number * -1) >= 0) {\n\t negative = false;\n\t }\n\n\t number = format.substring(0, start);\n\n\t if (negative && !hasNegativeFormat) {\n\t number += \"-\";\n\t }\n\n\t for (idx = start; idx < length; idx++) {\n\t ch = format.charAt(idx);\n\n\t if (decimalIndex == -1) {\n\t if (end - idx < integerLength) {\n\t number += integer;\n\t break;\n\t }\n\t } else {\n\t if (zeroIndex != -1 && zeroIndex < idx) {\n\t replacement = EMPTY;\n\t }\n\n\t if ((decimalIndex - idx) <= integerLength && decimalIndex - idx > -1) {\n\t number += integer;\n\t idx = decimalIndex;\n\t }\n\n\t if (decimalIndex === idx) {\n\t number += (fraction ? decimal : EMPTY) + fraction;\n\t idx += end - decimalIndex + 1;\n\t continue;\n\t }\n\t }\n\n\t if (ch === ZERO) {\n\t number += ch;\n\t replacement = ch;\n\t } else if (ch === SHARP) {\n\t number += replacement;\n\t }\n\t }\n\n\t if (hasGroup) {\n\t number = groupInteger(number, start + (negative && !hasNegativeFormat ? 1 : 0), Math.max(end, (integerLength + start)), numberFormat);\n\t }\n\n\t if (end >= start) {\n\t number += format.substring(end + 1);\n\t }\n\n\t //replace symbol placeholders\n\t if (isCurrency || isPercent) {\n\t value = EMPTY;\n\t for (idx = 0, length = number.length; idx < length; idx++) {\n\t ch = number.charAt(idx);\n\t value += (ch === \"$\" || ch === \"%\") ? symbol : ch;\n\t }\n\t number = value;\n\t }\n\n\t length = literals.length;\n\n\t if (length) {\n\t for (idx = 0; idx < length; idx++) {\n\t number = number.replace(PLACEHOLDER, literals[idx]);\n\t }\n\t }\n\t }\n\n\t return number;\n\t }\n\n\t var groupInteger = function(number, start, end, numberFormat) {\n\t var decimalIndex = number.indexOf(numberFormat[POINT]);\n\t var groupSizes = numberFormat.groupSize.slice();\n\t var groupSize = groupSizes.shift();\n\t var integer, integerLength;\n\t var idx, parts, value;\n\t var newGroupSize;\n\n\t end = decimalIndex !== -1 ? decimalIndex : end + 1;\n\n\t integer = number.substring(start, end);\n\t integerLength = integer.length;\n\n\t if (integerLength >= groupSize) {\n\t idx = integerLength;\n\t parts = [];\n\n\t while (idx > -1) {\n\t value = integer.substring(idx - groupSize, idx);\n\t if (value) {\n\t parts.push(value);\n\t }\n\t idx -= groupSize;\n\t newGroupSize = groupSizes.shift();\n\t groupSize = newGroupSize !== undefined ? newGroupSize : groupSize;\n\n\t if (groupSize === 0) {\n\t if (idx > 0) {\n\t parts.push(integer.substring(0, idx));\n\t }\n\t break;\n\t }\n\t }\n\n\t integer = parts.reverse().join(numberFormat[COMMA]);\n\t number = number.substring(0, start) + integer + number.substring(end);\n\t }\n\n\t return number;\n\t };\n\n\t var round = function(value, precision, negative) {\n\t precision = precision || 0;\n\n\t value = value.toString().split('e');\n\t value = Math.round(+(value[0] + 'e' + (value[1] ? (+value[1] + precision) : precision)));\n\n\t if (negative) {\n\t value = -value;\n\t }\n\n\t value = value.toString().split('e');\n\t value = +(value[0] + 'e' + (value[1] ? (+value[1] - precision) : -precision));\n\n\t return value.toFixed(Math.min(precision, 20));\n\t };\n\n\t var toString = function(value, fmt, culture) {\n\t if (fmt) {\n\t if (objectToString.call(value) === \"[object Date]\") {\n\t return formatDate(value, fmt, culture);\n\t } else if (typeof value === NUMBER) {\n\t return formatNumber(value, fmt, culture);\n\t }\n\t }\n\n\t return value !== undefined ? value : \"\";\n\t };\n\n\t kendo.format = function(fmt) {\n\t var values = arguments;\n\n\t return fmt.replace(formatRegExp, function(match, index, placeholderFormat) {\n\t var value = values[parseInt(index, 10) + 1];\n\n\t return toString(value, placeholderFormat ? placeholderFormat.substring(1) : \"\");\n\t });\n\t };\n\n\t kendo._extractFormat = function (format) {\n\t if (format.slice(0,3) === \"{0:\") {\n\t format = format.slice(3, format.length - 1);\n\t }\n\n\t return format;\n\t };\n\n\t kendo._activeElement = function() {\n\t try {\n\t return document.activeElement;\n\t } catch(e) {\n\t return document.documentElement.activeElement;\n\t }\n\t };\n\n\t kendo._round = round;\n\t kendo._outerWidth = function (element, includeMargin) { return $(element).outerWidth(includeMargin || false) || 0; };\n\t kendo._outerHeight = function (element, includeMargin) { return $(element).outerHeight(includeMargin || false) || 0; };\n\t kendo.toString = toString;\n\t})();\n\n\n\t(function() {\n\t var nonBreakingSpaceRegExp = /\\u00A0/g,\n\t exponentRegExp = /[eE][\\-+]?[0-9]+/,\n\t shortTimeZoneRegExp = /[+|\\-]\\d{1,2}/,\n\t longTimeZoneRegExp = /[+|\\-]\\d{1,2}:?\\d{2}/,\n\t dateRegExp = /^\\/Date\\((.*?)\\)\\/$/,\n\t offsetRegExp = /[+-]\\d*/,\n\t FORMATS_SEQUENCE = [ [], [ \"G\", \"g\", \"F\" ], [ \"D\", \"d\", \"y\", \"m\", \"T\", \"t\" ] ],\n\t STANDARD_FORMATS = [\n\t [\n\t \"yyyy-MM-ddTHH:mm:ss.fffffffzzz\",\n\t \"yyyy-MM-ddTHH:mm:ss.fffffff\",\n\t \"yyyy-MM-ddTHH:mm:ss.fffzzz\",\n\t \"yyyy-MM-ddTHH:mm:ss.fff\",\n\t \"ddd MMM dd yyyy HH:mm:ss\",\n\t \"yyyy-MM-ddTHH:mm:sszzz\",\n\t \"yyyy-MM-ddTHH:mmzzz\",\n\t \"yyyy-MM-ddTHH:mmzz\",\n\t \"yyyy-MM-ddTHH:mm:ss\",\n\t \"yyyy-MM-dd HH:mm:ss\",\n\t \"yyyy/MM/dd HH:mm:ss\"\n\t ], [\n\t \"yyyy-MM-ddTHH:mm\",\n\t \"yyyy-MM-dd HH:mm\",\n\t \"yyyy/MM/dd HH:mm\"\n\t ], [\n\t \"yyyy/MM/dd\",\n\t \"yyyy-MM-dd\",\n\t \"HH:mm:ss\",\n\t \"HH:mm\"\n\t ]\n\t ],\n\t numberRegExp = {\n\t 2: /^\\d{1,2}/,\n\t 3: /^\\d{1,3}/,\n\t 4: /^\\d{4}/\n\t },\n\t objectToString = {}.toString;\n\n\t function outOfRange(value, start, end) {\n\t return !(value >= start && value <= end);\n\t }\n\n\t function designatorPredicate(designator) {\n\t return designator.charAt(0);\n\t }\n\n\t function mapDesignators(designators) {\n\t return $.map(designators, designatorPredicate);\n\t }\n\n\t //if date's day is different than the typed one - adjust\n\t function adjustDST(date, hours) {\n\t if (!hours && date.getHours() === 23) {\n\t date.setHours(date.getHours() + 2);\n\t }\n\t }\n\n\t function lowerArray(data) {\n\t var idx = 0,\n\t length = data.length,\n\t array = [];\n\n\t for (; idx < length; idx++) {\n\t array[idx] = (data[idx] + \"\").toLowerCase();\n\t }\n\n\t return array;\n\t }\n\n\t function lowerLocalInfo(localInfo) {\n\t var newLocalInfo = {}, property;\n\n\t for (property in localInfo) {\n\t newLocalInfo[property] = lowerArray(localInfo[property]);\n\t }\n\n\t return newLocalInfo;\n\t }\n\n\t function parseExact(value, format, culture, strict) {\n\t if (!value) {\n\t return null;\n\t }\n\n\t var lookAhead = function (match) {\n\t var i = 0;\n\t while (format[idx] === match) {\n\t i++;\n\t idx++;\n\t }\n\t if (i > 0) {\n\t idx -= 1;\n\t }\n\t return i;\n\t },\n\t getNumber = function(size) {\n\t var rg = numberRegExp[size] || new RegExp('^\\\\d{1,' + size + '}'),\n\t match = value.substr(valueIdx, size).match(rg);\n\n\t if (match) {\n\t match = match[0];\n\t valueIdx += match.length;\n\t return parseInt(match, 10);\n\t }\n\t return null;\n\t },\n\t getIndexByName = function (names, lower) {\n\t var i = 0,\n\t length = names.length,\n\t name, nameLength,\n\t matchLength = 0,\n\t matchIdx = 0,\n\t subValue;\n\n\t for (; i < length; i++) {\n\t name = names[i];\n\t nameLength = name.length;\n\t subValue = value.substr(valueIdx, nameLength);\n\n\t if (lower) {\n\t subValue = subValue.toLowerCase();\n\t }\n\n\t if (subValue == name && nameLength > matchLength) {\n\t matchLength = nameLength;\n\t matchIdx = i;\n\t }\n\t }\n\n\t if (matchLength) {\n\t valueIdx += matchLength;\n\t return matchIdx + 1;\n\t }\n\n\t return null;\n\t },\n\t checkLiteral = function() {\n\t var result = false;\n\t if (value.charAt(valueIdx) === format[idx]) {\n\t valueIdx++;\n\t result = true;\n\t }\n\t return result;\n\t },\n\t calendar = culture.calendars.standard,\n\t year = null,\n\t month = null,\n\t day = null,\n\t hours = null,\n\t minutes = null,\n\t seconds = null,\n\t milliseconds = null,\n\t idx = 0,\n\t valueIdx = 0,\n\t literal = false,\n\t date = new Date(),\n\t twoDigitYearMax = calendar.twoDigitYearMax || 2029,\n\t defaultYear = date.getFullYear(),\n\t ch, count, length, pattern,\n\t pmHour, UTC, matches,\n\t amDesignators, pmDesignators,\n\t hoursOffset, minutesOffset,\n\t hasTime, match;\n\n\t if (!format) {\n\t format = \"d\"; //shord date format\n\t }\n\n\t //if format is part of the patterns get real format\n\t pattern = calendar.patterns[format];\n\t if (pattern) {\n\t format = pattern;\n\t }\n\n\t format = format.split(\"\");\n\t length = format.length;\n\n\t for (; idx < length; idx++) {\n\t ch = format[idx];\n\n\t if (literal) {\n\t if (ch === \"'\") {\n\t literal = false;\n\t } else {\n\t checkLiteral();\n\t }\n\t } else {\n\t if (ch === \"d\") {\n\t count = lookAhead(\"d\");\n\t if (!calendar._lowerDays) {\n\t calendar._lowerDays = lowerLocalInfo(calendar.days);\n\t }\n\n\t if (day !== null && count > 2) {\n\t continue;\n\t }\n\n\t day = count < 3 ? getNumber(2) : getIndexByName(calendar._lowerDays[count == 3 ? \"namesAbbr\" : \"names\"], true);\n\n\t if (day === null || outOfRange(day, 1, 31)) {\n\t return null;\n\t }\n\t } else if (ch === \"M\") {\n\t count = lookAhead(\"M\");\n\t if (!calendar._lowerMonths) {\n\t calendar._lowerMonths = lowerLocalInfo(calendar.months);\n\t }\n\t month = count < 3 ? getNumber(2) : getIndexByName(calendar._lowerMonths[count == 3 ? 'namesAbbr' : 'names'], true);\n\n\t if (month === null || outOfRange(month, 1, 12)) {\n\t return null;\n\t }\n\t month -= 1; //because month is zero based\n\t } else if (ch === \"y\") {\n\t count = lookAhead(\"y\");\n\t year = getNumber(count);\n\n\t if (year === null) {\n\t return null;\n\t }\n\n\t if (count == 2) {\n\t if (typeof twoDigitYearMax === \"string\") {\n\t twoDigitYearMax = defaultYear + parseInt(twoDigitYearMax, 10);\n\t }\n\n\t year = (defaultYear - defaultYear % 100) + year;\n\t if (year > twoDigitYearMax) {\n\t year -= 100;\n\t }\n\t }\n\t } else if (ch === \"h\" ) {\n\t lookAhead(\"h\");\n\t hours = getNumber(2);\n\t if (hours == 12) {\n\t hours = 0;\n\t }\n\t if (hours === null || outOfRange(hours, 0, 11)) {\n\t return null;\n\t }\n\t } else if (ch === \"H\") {\n\t lookAhead(\"H\");\n\t hours = getNumber(2);\n\t if (hours === null || outOfRange(hours, 0, 23)) {\n\t return null;\n\t }\n\t } else if (ch === \"m\") {\n\t lookAhead(\"m\");\n\t minutes = getNumber(2);\n\t if (minutes === null || outOfRange(minutes, 0, 59)) {\n\t return null;\n\t }\n\t } else if (ch === \"s\") {\n\t lookAhead(\"s\");\n\t seconds = getNumber(2);\n\t if (seconds === null || outOfRange(seconds, 0, 59)) {\n\t return null;\n\t }\n\t } else if (ch === \"f\") {\n\t count = lookAhead(\"f\");\n\n\t match = value.substr(valueIdx, count).match(numberRegExp[3]);\n\t milliseconds = getNumber(count); //move value index position\n\n\t if (milliseconds !== null) {\n\t milliseconds = parseFloat(\"0.\" + match[0], 10);\n\t milliseconds = kendo._round(milliseconds, 3);\n\t milliseconds *= 1000;\n\t }\n\n\t if (milliseconds === null || outOfRange(milliseconds, 0, 999)) {\n\t return null;\n\t }\n\n\t } else if (ch === \"t\") {\n\t count = lookAhead(\"t\");\n\t amDesignators = calendar.AM;\n\t pmDesignators = calendar.PM;\n\n\t if (count === 1) {\n\t amDesignators = mapDesignators(amDesignators);\n\t pmDesignators = mapDesignators(pmDesignators);\n\t }\n\n\t pmHour = getIndexByName(pmDesignators);\n\t if (!pmHour && !getIndexByName(amDesignators)) {\n\t return null;\n\t }\n\t }\n\t else if (ch === \"z\") {\n\t UTC = true;\n\t count = lookAhead(\"z\");\n\n\t if (value.substr(valueIdx, 1) === \"Z\") {\n\t checkLiteral();\n\t continue;\n\t }\n\n\t matches = value.substr(valueIdx, 6)\n\t .match(count > 2 ? longTimeZoneRegExp : shortTimeZoneRegExp);\n\n\t if (!matches) {\n\t return null;\n\t }\n\n\t matches = matches[0].split(\":\");\n\n\t hoursOffset = matches[0];\n\t minutesOffset = matches[1];\n\n\t if (!minutesOffset && hoursOffset.length > 3) { //(+|-)[hh][mm] format is used\n\t valueIdx = hoursOffset.length - 2;\n\t minutesOffset = hoursOffset.substring(valueIdx);\n\t hoursOffset = hoursOffset.substring(0, valueIdx);\n\t }\n\n\t hoursOffset = parseInt(hoursOffset, 10);\n\t if (outOfRange(hoursOffset, -12, 13)) {\n\t return null;\n\t }\n\n\t if (count > 2) {\n\t minutesOffset = matches[0][0] + minutesOffset;\n\t minutesOffset = parseInt(minutesOffset, 10);\n\t if (isNaN(minutesOffset) || outOfRange(minutesOffset, -59, 59)) {\n\t return null;\n\t }\n\t }\n\t } else if (ch === \"'\") {\n\t literal = true;\n\t checkLiteral();\n\t } else if (!checkLiteral()) {\n\t return null;\n\t }\n\t }\n\t }\n\n\t // if more characters follow, assume wrong format\n\t // https://github.com/telerik/kendo-ui-core/issues/3476\n\t if (strict && !/^\\s*$/.test(value.substr(valueIdx))) {\n\t return null;\n\t }\n\n\t hasTime = hours !== null || minutes !== null || seconds || null;\n\n\t if (year === null && month === null && day === null && hasTime) {\n\t year = defaultYear;\n\t month = date.getMonth();\n\t day = date.getDate();\n\t } else {\n\t if (year === null) {\n\t year = defaultYear;\n\t }\n\n\t if (day === null) {\n\t day = 1;\n\t }\n\t }\n\n\t if (pmHour && hours < 12) {\n\t hours += 12;\n\t }\n\n\t if (UTC) {\n\t if (hoursOffset) {\n\t hours += -hoursOffset;\n\t }\n\n\t if (minutesOffset) {\n\t minutes += -minutesOffset;\n\t }\n\n\t value = new Date(Date.UTC(year, month, day, hours, minutes, seconds, milliseconds));\n\t } else {\n\t value = new Date(year, month, day, hours, minutes, seconds, milliseconds);\n\t adjustDST(value, hours);\n\t }\n\n\t if (year < 100) {\n\t value.setFullYear(year);\n\t }\n\n\t if (value.getDate() !== day && UTC === undefined) {\n\t return null;\n\t }\n\n\t return value;\n\t }\n\n\t function parseMicrosoftFormatOffset(offset) {\n\t var sign = offset.substr(0, 1) === \"-\" ? -1 : 1;\n\n\t offset = offset.substring(1);\n\t offset = (parseInt(offset.substr(0, 2), 10) * 60) + parseInt(offset.substring(2), 10);\n\n\t return sign * offset;\n\t }\n\n\t function getDefaultFormats(culture) {\n\t var length = math.max(FORMATS_SEQUENCE.length, STANDARD_FORMATS.length);\n\t var calendar = culture.calendar || culture.calendars.standard;\n\t var patterns = calendar.patterns;\n\t var cultureFormats, formatIdx, idx;\n\t var formats = [];\n\n\t for (idx = 0; idx < length; idx++) {\n\t cultureFormats = FORMATS_SEQUENCE[idx];\n\t for (formatIdx = 0; formatIdx < cultureFormats.length; formatIdx++) {\n\t formats.push(patterns[cultureFormats[formatIdx]]);\n\t }\n\t formats = formats.concat(STANDARD_FORMATS[idx]);\n\t }\n\n\t return formats;\n\t }\n\n\t function internalParseDate(value, formats, culture, strict) {\n\t if (objectToString.call(value) === \"[object Date]\") {\n\t return value;\n\t }\n\n\t var idx = 0;\n\t var date = null;\n\t var length;\n\t var tzoffset;\n\n\t if (value && value.indexOf(\"/D\") === 0) {\n\t date = dateRegExp.exec(value);\n\t if (date) {\n\t date = date[1];\n\t tzoffset = offsetRegExp.exec(date.substring(1));\n\n\t date = new Date(parseInt(date, 10));\n\n\t if (tzoffset) {\n\t tzoffset = parseMicrosoftFormatOffset(tzoffset[0]);\n\t date = kendo.timezone.apply(date, 0);\n\t date = kendo.timezone.convert(date, 0, -1 * tzoffset);\n\t }\n\n\t return date;\n\t }\n\t }\n\n\t culture = kendo.getCulture(culture);\n\n\t if (!formats) {\n\t formats = getDefaultFormats(culture);\n\t }\n\n\t formats = isArray(formats) ? formats: [formats];\n\t length = formats.length;\n\n\t for (; idx < length; idx++) {\n\t date = parseExact(value, formats[idx], culture, strict);\n\t if (date) {\n\t return date;\n\t }\n\t }\n\n\t return date;\n\t }\n\n\t kendo.parseDate = function(value, formats, culture) {\n\t return internalParseDate(value, formats, culture, false);\n\t };\n\n\t kendo.parseExactDate = function(value, formats, culture) {\n\t return internalParseDate(value, formats, culture, true);\n\t };\n\n\t kendo.parseInt = function(value, culture) {\n\t var result = kendo.parseFloat(value, culture);\n\t if (result) {\n\t result = result | 0;\n\t }\n\t return result;\n\t };\n\n\t kendo.parseFloat = function(value, culture, format) {\n\t if (!value && value !== 0) {\n\t return null;\n\t }\n\n\t if (typeof value === NUMBER) {\n\t return value;\n\t }\n\n\t value = value.toString();\n\t culture = kendo.getCulture(culture);\n\n\t var number = culture.numberFormat,\n\t percent = number.percent,\n\t currency = number.currency,\n\t symbol = currency.symbol,\n\t percentSymbol = percent.symbol,\n\t negative = value.indexOf(\"-\"),\n\t parts, isPercent;\n\n\t //handle exponential number\n\t if (exponentRegExp.test(value)) {\n\t value = parseFloat(value.replace(number[\".\"], \".\"));\n\t if (isNaN(value)) {\n\t value = null;\n\t }\n\t return value;\n\t }\n\n\t if (negative > 0) {\n\t return null;\n\t } else {\n\t negative = negative > -1;\n\t }\n\n\t if (value.indexOf(symbol) > -1 || (format && format.toLowerCase().indexOf(\"c\") > -1)) {\n\t number = currency;\n\t parts = number.pattern[0].replace(\"$\", symbol).split(\"n\");\n\t if (value.indexOf(parts[0]) > -1 && value.indexOf(parts[1]) > -1) {\n\t value = value.replace(parts[0], \"\").replace(parts[1], \"\");\n\t negative = true;\n\t }\n\t } else if (value.indexOf(percentSymbol) > -1) {\n\t isPercent = true;\n\t number = percent;\n\t symbol = percentSymbol;\n\t }\n\n\t value = value.replace(\"-\", \"\")\n\t .replace(symbol, \"\")\n\t .replace(nonBreakingSpaceRegExp, \" \")\n\t .split(number[\",\"].replace(nonBreakingSpaceRegExp, \" \")).join(\"\")\n\t .replace(number[\".\"], \".\");\n\n\t value = parseFloat(value);\n\n\t if (isNaN(value)) {\n\t value = null;\n\t } else if (negative) {\n\t value *= -1;\n\t }\n\n\t if (value && isPercent) {\n\t value /= 100;\n\t }\n\n\t return value;\n\t };\n\t})();\n\n\t function getShadows(element) {\n\t var shadow = element.css(kendo.support.transitions.css + \"box-shadow\") || element.css(\"box-shadow\"),\n\t radius = shadow ? shadow.match(boxShadowRegExp) || [ 0, 0, 0, 0, 0 ] : [ 0, 0, 0, 0, 0 ],\n\t blur = math.max((+radius[3]), +(radius[4] || 0));\n\n\t return {\n\t left: (-radius[1]) + blur,\n\t right: (+radius[1]) + blur,\n\t bottom: (+radius[2]) + blur\n\t };\n\t }\n\n\t function wrap(element, autosize) {\n\t var percentage,\n\t outerWidth = kendo._outerWidth,\n\t outerHeight = kendo._outerHeight,\n\t parent = element.parent(),\n\t windowOuterWidth = outerWidth(window);\n\n\t parent.removeClass(\"k-animation-container-sm\");\n\n\t if (!parent.hasClass(\"k-animation-container\")) {\n\t var width = element[0].style.width,\n\t height = element[0].style.height,\n\t percentWidth = percentRegExp.test(width),\n\t percentHeight = percentRegExp.test(height),\n\t forceWidth = element.hasClass(\"k-tooltip\") || element.is(\".k-menu-horizontal.k-context-menu\");\n\n\t percentage = percentWidth || percentHeight;\n\n\t if (!percentWidth && (!autosize || (autosize && width) || forceWidth)) { width = autosize ? outerWidth(element) + 1 : outerWidth(element); }\n\t if (!percentHeight && (!autosize || (autosize && height)) || element.is(\".k-menu-horizontal.k-context-menu\")) { height = outerHeight(element); }\n\n\t element.wrap(\n\t $(\"
\")\n\t .addClass(\"k-animation-container\")\n\t .css({\n\t width: width,\n\t height: height\n\t }));\n\t parent = element.parent();\n\n\t if (percentage) {\n\t element.css({\n\t width: \"100%\",\n\t height: \"100%\",\n\t boxSizing: \"border-box\",\n\t mozBoxSizing: \"border-box\",\n\t webkitBoxSizing: \"border-box\"\n\t });\n\t }\n\t } else {\n\t wrapResize(element, autosize);\n\t }\n\n\t if(windowOuterWidth < outerWidth(parent)){\n\t parent.addClass(\"k-animation-container-sm\");\n\n\t wrapResize(element, autosize);\n\t }\n\n\t return parent;\n\t }\n\n\t function wrapResize(element, autosize) {\n\t var percentage,\n\t outerWidth = kendo._outerWidth,\n\t outerHeight = kendo._outerHeight,\n\t wrapper = element.parent(\".k-animation-container\"),\n\t wrapperStyle = wrapper[0].style;\n\n\t if (wrapper.is(\":hidden\")) {\n\t wrapper.css({\n\t display: \"\",\n\t position: \"\"\n\t });\n\t }\n\n\t percentage = percentRegExp.test(wrapperStyle.width) || percentRegExp.test(wrapperStyle.height);\n\n\t if (!percentage) {\n\t wrapper.css({\n\t width: autosize ? outerWidth(element) + 1 : outerWidth(element),\n\t height: outerHeight(element),\n\t boxSizing: \"content-box\",\n\t mozBoxSizing: \"content-box\",\n\t webkitBoxSizing: \"content-box\"\n\t });\n\t }\n\t }\n\n\t function deepExtend(destination) {\n\t var i = 1,\n\t length = arguments.length;\n\n\t for (i = 1; i < length; i++) {\n\t deepExtendOne(destination, arguments[i]);\n\t }\n\n\t return destination;\n\t }\n\n\t function deepExtendOne(destination, source) {\n\t var ObservableArray = kendo.data.ObservableArray,\n\t LazyObservableArray = kendo.data.LazyObservableArray,\n\t DataSource = kendo.data.DataSource,\n\t HierarchicalDataSource = kendo.data.HierarchicalDataSource,\n\t property,\n\t propValue,\n\t propType,\n\t propInit,\n\t destProp;\n\n\t for (property in source) {\n\t propValue = source[property];\n\t propType = typeof propValue;\n\n\t if (propType === OBJECT && propValue !== null) {\n\t propInit = propValue.constructor;\n\t } else {\n\t propInit = null;\n\t }\n\n\t if (propInit &&\n\t propInit !== Array && propInit !== ObservableArray && propInit !== LazyObservableArray &&\n\t propInit !== DataSource && propInit !== HierarchicalDataSource && propInit !== RegExp &&\n\t (!kendo.isFunction(window.ArrayBuffer) || propInit !== ArrayBuffer)) {\n\n\t if (propValue instanceof Date) {\n\t destination[property] = new Date(propValue.getTime());\n\t } else if (isFunction(propValue.clone)) {\n\t destination[property] = propValue.clone();\n\t } else {\n\t destProp = destination[property];\n\t if (typeof (destProp) === OBJECT) {\n\t destination[property] = destProp || {};\n\t } else {\n\t destination[property] = {};\n\t }\n\t deepExtendOne(destination[property], propValue);\n\t }\n\t } else if (propType !== UNDEFINED) {\n\t destination[property] = propValue;\n\t }\n\t }\n\n\t return destination;\n\t }\n\n\t function testRx(agent, rxs, dflt) {\n\t for (var rx in rxs) {\n\t if (rxs.hasOwnProperty(rx) && rxs[rx].test(agent)) {\n\t return rx;\n\t }\n\t }\n\t return dflt !== undefined ? dflt : agent;\n\t }\n\n\t function toHyphens(str) {\n\t return str.replace(/([a-z][A-Z])/g, function (g) {\n\t return g.charAt(0) + '-' + g.charAt(1).toLowerCase();\n\t });\n\t }\n\n\t function toCamelCase(str) {\n\t return str.replace(/\\-(\\w)/g, function (strMatch, g1) {\n\t return g1.toUpperCase();\n\t });\n\t }\n\n\t function getComputedStyles(element, properties) {\n\t var styles = {}, computedStyle;\n\n\t if (document.defaultView && document.defaultView.getComputedStyle) {\n\t computedStyle = document.defaultView.getComputedStyle(element, \"\");\n\n\t if (properties) {\n\t $.each(properties, function(idx, value) {\n\t styles[value] = computedStyle.getPropertyValue(value);\n\t });\n\t }\n\t } else {\n\t computedStyle = element.currentStyle;\n\n\t if (properties) {\n\t $.each(properties, function(idx, value) {\n\t styles[value] = computedStyle[toCamelCase(value)];\n\t });\n\t }\n\t }\n\n\t if (!kendo.size(styles)) {\n\t styles = computedStyle;\n\t }\n\n\t return styles;\n\t }\n\n\t function isScrollable(element) {\n\t if (element && element.className && typeof(element.className) === \"string\" && element.className.indexOf(\"k-auto-scrollable\") > -1) {\n\t return true;\n\t }\n\n\t var overflow = getComputedStyles(element, [\"overflow\"]).overflow;\n\t return overflow.indexOf(\"auto\") > -1 || overflow.indexOf(\"scroll\") > -1;\n\t }\n\n\t function scrollLeft(element, value) {\n\t var webkit = support.browser.webkit;\n\t var mozila = support.browser.mozilla;\n\t var browserVersion = support.browser.version;\n\t var el, isRtl;\n\n\t if(element instanceof $ && value !== undefined) {\n\t element.each(function(i, e) {\n\t scrollLeft(e, value);\n\t });\n\n\t return;\n\t } else {\n\t el = element instanceof $ ? element[0] : element;\n\t }\n\n\t if (!el) {\n\t return;\n\t }\n\n\t isRtl = support.isRtl(element);\n\n\t // After updating browser detection,\n\t // Test in which if should the Safari browsers go\n\t if (value !== undefined) {\n\t if (isRtl && webkit && (browserVersion < 85 || support.browser.safari)) {\n\t el.scrollLeft = el.scrollWidth - el.clientWidth - value;\n\t } else if (isRtl && (mozila || webkit) && value > 0) {\n\t el.scrollLeft = -value;\n\t } else {\n\t el.scrollLeft = value;\n\t }\n\t } else {\n\t if (isRtl && webkit && (browserVersion < 85 || support.browser.safari)) {\n\t return el.scrollWidth - el.clientWidth - el.scrollLeft;\n\t } else {\n\t return Math.abs(el.scrollLeft);\n\t }\n\t }\n\t }\n\n\t (function () {\n\t support._scrollbar = undefined;\n\n\t support.scrollbar = function (refresh) {\n\t if (!isNaN(support._scrollbar) && !refresh) {\n\t return support._scrollbar;\n\t } else {\n\t var div = document.createElement(\"div\"),\n\t result;\n\n\t div.style.cssText = \"overflow:scroll;overflow-x:hidden;zoom:1;clear:both;display:block\";\n\t div.innerHTML = \" \";\n\t document.body.appendChild(div);\n\n\t support._scrollbar = result = div.offsetWidth - div.scrollWidth;\n\n\t document.body.removeChild(div);\n\n\t return result;\n\t }\n\t };\n\n\t support.isRtl = function(element) {\n\t return $(element).closest(\".k-rtl\").length > 0;\n\t };\n\n\t var table = document.createElement(\"table\");\n\n\t // Internet Explorer does not support setting the innerHTML of TBODY and TABLE elements\n\t try {\n\t table.innerHTML = \"\";\n\n\t support.tbodyInnerHtml = true;\n\t } catch (e) {\n\t support.tbodyInnerHtml = false;\n\t }\n\n\t support.touch = \"ontouchstart\" in window;\n\n\t var docStyle = document.documentElement.style;\n\t var transitions = support.transitions = false,\n\t transforms = support.transforms = false,\n\t elementProto = \"HTMLElement\" in window ? HTMLElement.prototype : [];\n\n\t support.hasHW3D = (\"WebKitCSSMatrix\" in window && \"m11\" in new window.WebKitCSSMatrix()) || \"MozPerspective\" in docStyle || \"msPerspective\" in docStyle;\n\t support.cssFlexbox = (\"flexWrap\" in docStyle) || (\"WebkitFlexWrap\" in docStyle) || (\"msFlexWrap\" in docStyle);\n\n\t each([ \"Moz\", \"webkit\", \"O\", \"ms\" ], function () {\n\t var prefix = this.toString(),\n\t hasTransitions = typeof table.style[prefix + \"Transition\"] === STRING;\n\n\t if (hasTransitions || typeof table.style[prefix + \"Transform\"] === STRING) {\n\t var lowPrefix = prefix.toLowerCase();\n\n\t transforms = {\n\t css: (lowPrefix != \"ms\") ? \"-\" + lowPrefix + \"-\" : \"\",\n\t prefix: prefix,\n\t event: (lowPrefix === \"o\" || lowPrefix === \"webkit\") ? lowPrefix : \"\"\n\t };\n\n\t if (hasTransitions) {\n\t transitions = transforms;\n\t transitions.event = transitions.event ? transitions.event + \"TransitionEnd\" : \"transitionend\";\n\t }\n\n\t return false;\n\t }\n\t });\n\n\t table = null;\n\n\t support.transforms = transforms;\n\t support.transitions = transitions;\n\n\t support.devicePixelRatio = window.devicePixelRatio === undefined ? 1 : window.devicePixelRatio;\n\n\t try {\n\t support.screenWidth = window.outerWidth || window.screen ? window.screen.availWidth : window.innerWidth;\n\t support.screenHeight = window.outerHeight || window.screen ? window.screen.availHeight : window.innerHeight;\n\t } catch(e) {\n\t //window.outerWidth throws error when in IE showModalDialog.\n\t support.screenWidth = window.screen.availWidth;\n\t support.screenHeight = window.screen.availHeight;\n\t }\n\n\t support.detectOS = function (ua) {\n\t var os = false, minorVersion, match = [],\n\t notAndroidPhone = !/mobile safari/i.test(ua),\n\t agentRxs = {\n\t wp: /(Windows Phone(?: OS)?)\\s(\\d+)\\.(\\d+(\\.\\d+)?)/,\n\t fire: /(Silk)\\/(\\d+)\\.(\\d+(\\.\\d+)?)/,\n\t android: /(Android|Android.*(?:Opera|Firefox).*?\\/)\\s*(\\d+)\\.?(\\d+(\\.\\d+)?)?/,\n\t iphone: /(iPhone|iPod).*OS\\s+(\\d+)[\\._]([\\d\\._]+)/,\n\t ipad: /(iPad).*OS\\s+(\\d+)[\\._]([\\d_]+)/,\n\t meego: /(MeeGo).+NokiaBrowser\\/(\\d+)\\.([\\d\\._]+)/,\n\t webos: /(webOS)\\/(\\d+)\\.(\\d+(\\.\\d+)?)/,\n\t blackberry: /(BlackBerry|BB10).*?Version\\/(\\d+)\\.(\\d+(\\.\\d+)?)/,\n\t playbook: /(PlayBook).*?Tablet\\s*OS\\s*(\\d+)\\.(\\d+(\\.\\d+)?)/,\n\t windows: /(MSIE)\\s+(\\d+)\\.(\\d+(\\.\\d+)?)/,\n\t tizen: /(tizen).*?Version\\/(\\d+)\\.(\\d+(\\.\\d+)?)/i,\n\t sailfish: /(sailfish).*rv:(\\d+)\\.(\\d+(\\.\\d+)?).*firefox/i,\n\t ffos: /(Mobile).*rv:(\\d+)\\.(\\d+(\\.\\d+)?).*Firefox/\n\t },\n\t osRxs = {\n\t ios: /^i(phone|pad|pod)$/i,\n\t android: /^android|fire$/i,\n\t blackberry: /^blackberry|playbook/i,\n\t windows: /windows/,\n\t wp: /wp/,\n\t flat: /sailfish|ffos|tizen/i,\n\t meego: /meego/\n\t },\n\t formFactorRxs = {\n\t tablet: /playbook|ipad|fire/i\n\t },\n\t browserRxs = {\n\t omini: /Opera\\sMini/i,\n\t omobile: /Opera\\sMobi/i,\n\t firefox: /Firefox|Fennec/i,\n\t mobilesafari: /version\\/.*safari/i,\n\t ie: /MSIE|Windows\\sPhone/i,\n\t chrome: /chrome|crios/i,\n\t webkit: /webkit/i\n\t };\n\n\t for (var agent in agentRxs) {\n\t if (agentRxs.hasOwnProperty(agent)) {\n\t match = ua.match(agentRxs[agent]);\n\t if (match) {\n\t if (agent == \"windows\" && \"plugins\" in navigator) { return false; } // Break if not Metro/Mobile Windows\n\n\t os = {};\n\t os.device = agent;\n\t os.tablet = testRx(agent, formFactorRxs, false);\n\t os.browser = testRx(ua, browserRxs, \"default\");\n\t os.name = testRx(agent, osRxs);\n\t os[os.name] = true;\n\t os.majorVersion = match[2];\n\t os.minorVersion = (match[3] || \"0\").replace(\"_\", \".\");\n\t minorVersion = os.minorVersion.replace(\".\", \"\").substr(0, 2);\n\t os.flatVersion = os.majorVersion + minorVersion + (new Array(3 - (minorVersion.length < 3 ? minorVersion.length : 2)).join(\"0\"));\n\t os.cordova = typeof window.PhoneGap !== UNDEFINED || typeof window.cordova !== UNDEFINED; // Use file protocol to detect appModes.\n\t os.appMode = window.navigator.standalone || (/file|local|wmapp/).test(window.location.protocol) || os.cordova; // Use file protocol to detect appModes.\n\n\t if (os.android && (support.devicePixelRatio < 1.5 && os.flatVersion < 400 || notAndroidPhone) && (support.screenWidth > 800 || support.screenHeight > 800)) {\n\t os.tablet = agent;\n\t }\n\n\t break;\n\t }\n\t }\n\t }\n\t return os;\n\t };\n\n\t var mobileOS = support.mobileOS = support.detectOS(navigator.userAgent);\n\n\t support.wpDevicePixelRatio = mobileOS.wp ? screen.width / 320 : 0;\n\n\t support.hasNativeScrolling = false;\n\n\t if (mobileOS.ios || (mobileOS.android && mobileOS.majorVersion > 2) || mobileOS.wp) {\n\t support.hasNativeScrolling = mobileOS;\n\t }\n\n\t support.delayedClick = function() {\n\n\t // only the mobile devices with touch events do this.\n\t if (support.touch) {\n\t // All iOS devices so far (by the time I am writing this, iOS 9.0.2 is the latest),\n\t // delay their click events.\n\t if (mobileOS.ios) {\n\t return true;\n\t }\n\n\t if (mobileOS.android) {\n\n\t if (!support.browser.chrome) { // older webkits and webviews delay the click\n\t return true;\n\t }\n\n\t // from here on, we deal with Chrome on Android.\n\t if (support.browser.version < 32) {\n\t return false;\n\t }\n\n\t // Chrome 32+ does conditional fast clicks if the view port is not user scalable.\n\t return !($(\"meta[name=viewport]\").attr(\"content\") || \"\").match(/user-scalable=no/i);\n\t }\n\t }\n\n\t return false;\n\t };\n\n\t support.mouseAndTouchPresent = support.touch && !(support.mobileOS.ios || support.mobileOS.android);\n\n\t support.detectBrowser = function(ua) {\n\t var browser = false, match = [],\n\t browserRxs = {\n\t edge: /(edge)[ \\/]([\\w.]+)/i,\n\t webkit: /(chrome|crios)[ \\/]([\\w.]+)/i,\n\t safari: /(webkit)[ \\/]([\\w.]+)/i,\n\t opera: /(opera)(?:.*version|)[ \\/]([\\w.]+)/i,\n\t msie: /(msie\\s|trident.*? rv:)([\\w.]+)/i,\n\t mozilla: /(mozilla)(?:.*? rv:([\\w.]+)|)/i\n\t };\n\n\t for (var agent in browserRxs) {\n\t if (browserRxs.hasOwnProperty(agent)) {\n\t match = ua.match(browserRxs[agent]);\n\t if (match) {\n\t browser = {};\n\t browser[agent] = true;\n\t browser[match[1].toLowerCase().split(\" \")[0].split(\"/\")[0]] = true;\n\t browser.version = parseInt(document.documentMode || match[2], 10);\n\n\t break;\n\t }\n\t }\n\t }\n\n\t return browser;\n\t };\n\n\t support.browser = support.detectBrowser(navigator.userAgent);\n\n\t support.detectClipboardAccess = function() {\n\t var commands = {\n\t copy: document.queryCommandSupported ? document.queryCommandSupported(\"copy\") : false,\n\t cut: document.queryCommandSupported ? document.queryCommandSupported(\"cut\") : false,\n\t paste : document.queryCommandSupported ? document.queryCommandSupported(\"paste\") : false\n\t };\n\n\t if (support.browser.chrome) {\n\t //not using queryCommandSupported due to chromium issues 476508 and 542948\n\t commands.paste = false;\n\t if(support.browser.version >= 43) {\n\t commands.copy = true;\n\t commands.cut = true;\n\t }\n\t }\n\n\t return commands;\n\t };\n\n\t support.clipboard = support.detectClipboardAccess();\n\n\t support.zoomLevel = function() {\n\t try {\n\t var browser = support.browser;\n\t var ie11WidthCorrection = 0;\n\t var docEl = document.documentElement;\n\n\t if (browser.msie && browser.version == 11 && docEl.scrollHeight > docEl.clientHeight && !support.touch) {\n\t ie11WidthCorrection = support.scrollbar();\n\t }\n\n\t return support.touch ? (docEl.clientWidth / window.innerWidth) :\n\t browser.msie && browser.version >= 10 ? (((top || window).document.documentElement.offsetWidth + ie11WidthCorrection) / (top || window).innerWidth) : 1;\n\t } catch(e) {\n\t return 1;\n\t }\n\t };\n\n\t (function(browser) {\n\t // add browser-specific CSS class\n\t var cssClass = \"\",\n\t docElement = $(document.documentElement),\n\t majorVersion = parseInt(browser.version, 10);\n\n\t if (browser.msie) {\n\t cssClass = \"ie\";\n\t } else if (browser.mozilla) {\n\t cssClass = \"ff\";\n\t } else if (browser.safari) {\n\t cssClass = \"safari\";\n\t } else if (browser.webkit) {\n\t cssClass = \"webkit\";\n\t } else if (browser.opera) {\n\t cssClass = \"opera\";\n\t } else if (browser.edge) {\n\t cssClass = \"edge\";\n\t }\n\n\t if (cssClass) {\n\t cssClass = \"k-\" + cssClass + \" k-\" + cssClass + majorVersion;\n\t }\n\t if (support.mobileOS) {\n\t cssClass += \" k-mobile\";\n\t }\n\n\t if (!support.cssFlexbox) {\n\t cssClass += \" k-no-flexbox\";\n\t }\n\n\t docElement.addClass(cssClass);\n\t })(support.browser);\n\n\t support.eventCapture = document.documentElement.addEventListener;\n\n\t var input = document.createElement(\"input\");\n\n\t support.placeholder = \"placeholder\" in input;\n\t support.propertyChangeEvent = \"onpropertychange\" in input;\n\n\t support.input = (function() {\n\t var types = [\"number\", \"date\", \"time\", \"month\", \"week\", \"datetime\", \"datetime-local\"];\n\t var length = types.length;\n\t var value = \"test\";\n\t var result = {};\n\t var idx = 0;\n\t var type;\n\n\t for (;idx < length; idx++) {\n\t type = types[idx];\n\t input.setAttribute(\"type\", type);\n\t input.value = value;\n\n\t result[type.replace(\"-\", \"\")] = input.type !== \"text\" && input.value !== value;\n\t }\n\n\t return result;\n\t })();\n\n\t input.style.cssText = \"float:left;\";\n\n\t support.cssFloat = !!input.style.cssFloat;\n\n\t input = null;\n\n\t support.stableSort = (function() {\n\t // Chrome sort is not stable for more than *10* items\n\t // IE9+ sort is not stable for than *512* items\n\t var threshold = 513;\n\n\t var sorted = [{\n\t index: 0,\n\t field: \"b\"\n\t }];\n\n\t for (var i = 1; i < threshold; i++) {\n\t sorted.push({\n\t index: i,\n\t field: \"a\"\n\t });\n\t }\n\n\t sorted.sort(function(a, b) {\n\t return a.field > b.field ? 1 : (a.field < b.field ? -1 : 0);\n\t });\n\n\t return sorted[0].index === 1;\n\t })();\n\n\t support.matchesSelector = elementProto.webkitMatchesSelector || elementProto.mozMatchesSelector ||\n\t elementProto.msMatchesSelector || elementProto.oMatchesSelector ||\n\t elementProto.matchesSelector || elementProto.matches ||\n\t function( selector ) {\n\t var nodeList = document.querySelectorAll ? ( this.parentNode || document ).querySelectorAll( selector ) || [] : $(selector),\n\t i = nodeList.length;\n\n\t while (i--) {\n\t if (nodeList[i] == this) {\n\t return true;\n\t }\n\t }\n\n\t return false;\n\t };\n\n\t support.matchMedia = \"matchMedia\" in window;\n\n\t support.pushState = window.history && window.history.pushState;\n\n\t support.hashChange = \"onhashchange\" in window;\n\n\t support.customElements = \"registerElement\" in window.document;\n\n\t var chrome = support.browser.chrome,\n\t mobileChrome = support.browser.crios,\n\t mozilla = support.browser.mozilla,\n\t safari = support.browser.safari;\n\t support.msPointers = !chrome && window.MSPointerEvent;\n\t support.pointers = !chrome && !mobileChrome && !mozilla && !safari && window.PointerEvent;\n\t support.kineticScrollNeeded = mobileOS && (support.touch || support.msPointers || support.pointers);\n\t })();\n\n\n\t function size(obj) {\n\t var result = 0, key;\n\t for (key in obj) {\n\t if (obj.hasOwnProperty(key) && key != \"toJSON\") { // Ignore fake IE7 toJSON.\n\t result++;\n\t }\n\t }\n\n\t return result;\n\t }\n\n\t function getOffset(element, type, positioned) {\n\t if (!type) {\n\t type = \"offset\";\n\t }\n\n\t var offset = element[type]();\n\t // clone ClientRect object to JS object (jQuery3)\n\t var result = {\n\t top: offset.top,\n\t right: offset.right,\n\t bottom: offset.bottom,\n\t left: offset.left\n\t };\n\n\t // IE10 touch zoom is living in a separate viewport\n\t if (support.browser.msie && (support.pointers || support.msPointers) && !positioned) {\n\t var sign = support.isRtl(element) ? 1 : -1;\n\n\t result.top -= (window.pageYOffset - (document.documentElement.scrollTop));\n\t result.left -= (window.pageXOffset + (sign * document.documentElement.scrollLeft));\n\t }\n\n\t return result;\n\t }\n\n\t var directions = {\n\t left: { reverse: \"right\" },\n\t right: { reverse: \"left\" },\n\t down: { reverse: \"up\" },\n\t up: { reverse: \"down\" },\n\t top: { reverse: \"bottom\" },\n\t bottom: { reverse: \"top\" },\n\t \"in\": { reverse: \"out\" },\n\t out: { reverse: \"in\" }\n\t };\n\n\t function parseEffects(input) {\n\t var effects = {};\n\n\t each((typeof input === \"string\" ? input.split(\" \") : input), function(idx) {\n\t effects[idx] = this;\n\t });\n\n\t return effects;\n\t }\n\n\t function fx(element) {\n\t return new kendo.effects.Element(element);\n\t }\n\n\t var effects = {};\n\n\t $.extend(effects, {\n\t enabled: true,\n\t Element: function(element) {\n\t this.element = $(element);\n\t },\n\n\t promise: function(element, options) {\n\t if (!element.is(\":visible\")) {\n\t element.css({ display: element.data(\"olddisplay\") || \"block\" }).css(\"display\");\n\t }\n\n\t if (options.hide) {\n\t element.data(\"olddisplay\", element.css(\"display\")).hide();\n\t }\n\n\t if (options.init) {\n\t options.init();\n\t }\n\n\t if (options.completeCallback) {\n\t options.completeCallback(element); // call the external complete callback with the element\n\t }\n\n\t element.dequeue();\n\t },\n\n\t disable: function() {\n\t this.enabled = false;\n\t this.promise = this.promiseShim;\n\t },\n\n\t enable: function() {\n\t this.enabled = true;\n\t this.promise = this.animatedPromise;\n\t }\n\t });\n\n\t effects.promiseShim = effects.promise;\n\n\t function prepareAnimationOptions(options, duration, reverse, complete) {\n\t if (typeof options === STRING) {\n\t // options is the list of effect names separated by space e.g. animate(element, \"fadeIn slideDown\")\n\n\t // only callback is provided e.g. animate(element, options, function() {});\n\t if (isFunction(duration)) {\n\t complete = duration;\n\t duration = 400;\n\t reverse = false;\n\t }\n\n\t if (isFunction(reverse)) {\n\t complete = reverse;\n\t reverse = false;\n\t }\n\n\t if (typeof duration === BOOLEAN){\n\t reverse = duration;\n\t duration = 400;\n\t }\n\n\t options = {\n\t effects: options,\n\t duration: duration,\n\t reverse: reverse,\n\t complete: complete\n\t };\n\t }\n\n\t return extend({\n\t //default options\n\t effects: {},\n\t duration: 400, //jQuery default duration\n\t reverse: false,\n\t init: noop,\n\t teardown: noop,\n\t hide: false\n\t }, options, { completeCallback: options.complete, complete: noop }); // Move external complete callback, so deferred.resolve can be always executed.\n\n\t }\n\n\t function animate(element, options, duration, reverse, complete) {\n\t var idx = 0,\n\t length = element.length,\n\t instance;\n\n\t for (; idx < length; idx ++) {\n\t instance = $(element[idx]);\n\t instance.queue(function() {\n\t effects.promise(instance, prepareAnimationOptions(options, duration, reverse, complete));\n\t });\n\t }\n\n\t return element;\n\t }\n\n\t function toggleClass(element, classes, options, add) {\n\t if (classes) {\n\t classes = classes.split(\" \");\n\n\t each(classes, function(idx, value) {\n\t element.toggleClass(value, add);\n\t });\n\t }\n\n\t return element;\n\t }\n\n\t if (!(\"kendoAnimate\" in $.fn)) {\n\t extend($.fn, {\n\t kendoStop: function(clearQueue, gotoEnd) {\n\t return this.stop(clearQueue, gotoEnd);\n\t },\n\n\t kendoAnimate: function(options, duration, reverse, complete) {\n\t return animate(this, options, duration, reverse, complete);\n\t },\n\n\t kendoAddClass: function(classes, options){\n\t return kendo.toggleClass(this, classes, options, true);\n\t },\n\n\t kendoRemoveClass: function(classes, options){\n\t return kendo.toggleClass(this, classes, options, false);\n\t },\n\t kendoToggleClass: function(classes, options, toggle){\n\t return kendo.toggleClass(this, classes, options, toggle);\n\t }\n\t });\n\t }\n\n\t var ampRegExp = /&/g,\n\t ltRegExp = //g;\n\t function htmlEncode(value) {\n\t return (\"\" + value).replace(ampRegExp, \"&\").replace(ltRegExp, \"<\").replace(gtRegExp, \">\").replace(quoteRegExp, \""\").replace(aposRegExp, \"'\");\n\t }\n\n\t function unescape(value) {\n\t var template;\n\n\t try {\n\t template = window.decodeURIComponent(value);\n\t } catch(error) {\n\t // If the string contains Unicode characters\n\t // the decodeURIComponent() will throw an error.\n\t // Therefore: convert to UTF-8 character\n\t template = value.replace(/%u([\\dA-F]{4})|%([\\dA-F]{2})/gi, function(_, m1, m2) {\n\t return String.fromCharCode(parseInt(\"0x\" + (m1 || m2), 16));\n\t });\n\t }\n\n\t return template;\n\t }\n\n\t var eventTarget = function (e) {\n\t return e.target;\n\t };\n\n\t if (support.touch) {\n\n\t eventTarget = function(e) {\n\t var touches = \"originalEvent\" in e ? e.originalEvent.changedTouches : \"changedTouches\" in e ? e.changedTouches : null;\n\n\t return touches ? document.elementFromPoint(touches[0].clientX, touches[0].clientY) : e.target;\n\t };\n\n\t each([\"swipe\", \"swipeLeft\", \"swipeRight\", \"swipeUp\", \"swipeDown\", \"doubleTap\", \"tap\"], function(m, value) {\n\t $.fn[value] = function(callback) {\n\t return this.on(value, callback);\n\t };\n\t });\n\t }\n\n\t if (support.touch) {\n\t if (!support.mobileOS) {\n\t support.mousedown = \"mousedown touchstart\";\n\t support.mouseup = \"mouseup touchend\";\n\t support.mousemove = \"mousemove touchmove\";\n\t support.mousecancel = \"mouseleave touchcancel\";\n\t support.click = \"click\";\n\t support.resize = \"resize\";\n\t } else {\n\t support.mousedown = \"touchstart\";\n\t support.mouseup = \"touchend\";\n\t support.mousemove = \"touchmove\";\n\t support.mousecancel = \"touchcancel\";\n\t support.click = \"touchend\";\n\t support.resize = \"orientationchange\";\n\t }\n\t } else if (support.pointers) {\n\t support.mousemove = \"pointermove\";\n\t support.mousedown = \"pointerdown\";\n\t support.mouseup = \"pointerup\";\n\t support.mousecancel = \"pointercancel\";\n\t support.click = \"pointerup\";\n\t support.resize = \"orientationchange resize\";\n\t } else if (support.msPointers) {\n\t support.mousemove = \"MSPointerMove\";\n\t support.mousedown = \"MSPointerDown\";\n\t support.mouseup = \"MSPointerUp\";\n\t support.mousecancel = \"MSPointerCancel\";\n\t support.click = \"MSPointerUp\";\n\t support.resize = \"orientationchange resize\";\n\t } else {\n\t support.mousemove = \"mousemove\";\n\t support.mousedown = \"mousedown\";\n\t support.mouseup = \"mouseup\";\n\t support.mousecancel = \"mouseleave\";\n\t support.click = \"click\";\n\t support.resize = \"resize\";\n\t }\n\n\t var wrapExpression = function(members, paramName) {\n\t var result = paramName || \"d\",\n\t index,\n\t idx,\n\t length,\n\t member,\n\t count = 1;\n\n\t for (idx = 0, length = members.length; idx < length; idx++) {\n\t member = members[idx];\n\t if (member !== \"\") {\n\t index = member.indexOf(\"[\");\n\n\t if (index !== 0) {\n\t if (index == -1) {\n\t member = \".\" + member;\n\t } else {\n\t count++;\n\t member = \".\" + member.substring(0, index) + \" || {})\" + member.substring(index);\n\t }\n\t }\n\n\t count++;\n\t result += member + ((idx < length - 1) ? \" || {})\" : \")\");\n\t }\n\t }\n\t return new Array(count).join(\"(\") + result;\n\t },\n\t localUrlRe = /^([a-z]+:)?\\/\\//i;\n\n\t extend(kendo, {\n\t widgets: [],\n\t _widgetRegisteredCallbacks: [],\n\t ui: kendo.ui || {},\n\t fx: kendo.fx || fx,\n\t effects: kendo.effects || effects,\n\t mobile: kendo.mobile || { },\n\t data: kendo.data || {},\n\t dataviz: kendo.dataviz || {},\n\t drawing: kendo.drawing || {},\n\t spreadsheet: { messages: {} },\n\t keys: {\n\t INSERT: 45,\n\t DELETE: 46,\n\t BACKSPACE: 8,\n\t TAB: 9,\n\t ENTER: 13,\n\t ESC: 27,\n\t LEFT: 37,\n\t UP: 38,\n\t RIGHT: 39,\n\t DOWN: 40,\n\t END: 35,\n\t HOME: 36,\n\t SPACEBAR: 32,\n\t PAGEUP: 33,\n\t PAGEDOWN: 34,\n\t F2: 113,\n\t F10: 121,\n\t F12: 123,\n\t NUMPAD_PLUS: 107,\n\t NUMPAD_MINUS: 109,\n\t NUMPAD_DOT: 110\n\t },\n\t support: kendo.support || support,\n\t animate: kendo.animate || animate,\n\t ns: \"\",\n\t attr: function(value) {\n\t return \"data-\" + kendo.ns + value;\n\t },\n\t getShadows: getShadows,\n\t wrap: wrap,\n\t deepExtend: deepExtend,\n\t getComputedStyles: getComputedStyles,\n\t isScrollable: isScrollable,\n\t scrollLeft: scrollLeft,\n\t size: size,\n\t toCamelCase: toCamelCase,\n\t toHyphens: toHyphens,\n\t getOffset: kendo.getOffset || getOffset,\n\t parseEffects: kendo.parseEffects || parseEffects,\n\t toggleClass: kendo.toggleClass || toggleClass,\n\t directions: kendo.directions || directions,\n\t Observable: Observable,\n\t Class: Class,\n\t Template: Template,\n\t template: proxy(Template.compile, Template),\n\t render: proxy(Template.render, Template),\n\t stringify: proxy(JSON.stringify, JSON),\n\t eventTarget: eventTarget,\n\t htmlEncode: htmlEncode,\n\t unescape: unescape,\n\t isLocalUrl: function(url) {\n\t return url && !localUrlRe.test(url);\n\t },\n\n\t expr: function(expression, safe, paramName) {\n\t expression = expression || \"\";\n\n\t if (typeof safe == STRING) {\n\t paramName = safe;\n\t safe = false;\n\t }\n\n\t paramName = paramName || \"d\";\n\n\t if (expression && expression.charAt(0) !== \"[\") {\n\t expression = \".\" + expression;\n\t }\n\n\t if (safe) {\n\t expression = expression.replace(/\"([^.]*)\\.([^\"]*)\"/g,'\"$1_$DOT$_$2\"');\n\t expression = expression.replace(/'([^.]*)\\.([^']*)'/g,\"'$1_$DOT$_$2'\");\n\t expression = wrapExpression(expression.split(\".\"), paramName);\n\t expression = expression.replace(/_\\$DOT\\$_/g, \".\");\n\t } else {\n\t expression = paramName + expression;\n\t }\n\n\t return expression;\n\t },\n\n\t getter: function(expression, safe) {\n\t var key = expression + safe;\n\t return getterCache[key] = getterCache[key] || new Function(\"d\", \"return \" + kendo.expr(expression, safe));\n\t },\n\n\t setter: function(expression) {\n\t return setterCache[expression] = setterCache[expression] || new Function(\"d,value\", kendo.expr(expression) + \"=value\");\n\t },\n\n\t accessor: function(expression) {\n\t return {\n\t get: kendo.getter(expression),\n\t set: kendo.setter(expression)\n\t };\n\t },\n\n\t guid: function() {\n\t var id = \"\", i, random, chars = \"abcdef\";\n\n\t id += chars[Math.floor(Math.random() * Math.floor(chars.length))];\n\n\t for (i = 1; i < 32; i++) {\n\t random = math.random() * 16 | 0;\n\n\t if (i == 8 || i == 12 || i == 16 || i == 20) {\n\t id += \"-\";\n\t }\n\t id += (i == 12 ? 4 : (i == 16 ? (random & 3 | 8) : random)).toString(16);\n\t }\n\n\t return id;\n\t },\n\n\t roleSelector: function(role) {\n\t return role.replace(/(\\S+)/g, \"[\" + kendo.attr(\"role\") + \"=$1],\").slice(0, -1);\n\t },\n\n\t directiveSelector: function(directives) {\n\t var selectors = directives.split(\" \");\n\n\t if (selectors) {\n\t for (var i = 0; i < selectors.length; i++) {\n\t if (selectors[i] != \"view\") {\n\t selectors[i] = selectors[i].replace(/(\\w*)(view|bar|strip|over)$/, \"$1-$2\");\n\t }\n\t }\n\t }\n\n\t return selectors.join(\" \").replace(/(\\S+)/g, \"kendo-mobile-$1,\").slice(0, -1);\n\t },\n\n\t triggeredByInput: function(e) {\n\t return (/^(label|input|textarea|select)$/i).test(e.target.tagName);\n\t },\n\n\t onWidgetRegistered: function(callback) {\n\t for (var i = 0, len = kendo.widgets.length; i < len; i++) {\n\t callback(kendo.widgets[i]);\n\t }\n\n\t kendo._widgetRegisteredCallbacks.push(callback);\n\t },\n\n\t logToConsole: function(message, type) {\n\t var console = window.console;\n\n\t if (!kendo.suppressLog && typeof(console) != \"undefined\" && console.log) {\n\t console[type || \"log\"](message);\n\t }\n\t }\n\t });\n\n\t var Widget = Observable.extend( {\n\t init: function(element, options) {\n\t var that = this;\n\n\t that.element = kendo.jQuery(element).handler(that);\n\n\t that.angular(\"init\", options);\n\n\t Observable.fn.init.call(that);\n\n\t var dataSource = options ? options.dataSource : null;\n\t var props;\n\n\t if (options) {\n\t props = (that.componentTypes || {})[(options || {}).componentType];\n\t }\n\n\t if (dataSource) {\n\t // avoid deep cloning the data source\n\t options = extend({}, options, { dataSource: {} });\n\t }\n\n\t options = that.options = extend(true, {}, that.options, that.defaults, props || {}, options);\n\n\t if (dataSource) {\n\t options.dataSource = dataSource;\n\t }\n\n\t if (!that.element.attr(kendo.attr(\"role\"))) {\n\t that.element.attr(kendo.attr(\"role\"), (options.name || \"\").toLowerCase());\n\t }\n\n\t that.element.data(\"kendo\" + options.prefix + options.name, that);\n\n\t that.bind(that.events, options);\n\t },\n\n\t events: [],\n\n\t options: {\n\t prefix: \"\"\n\t },\n\n\t _hasBindingTarget: function() {\n\t return !!this.element[0].kendoBindingTarget;\n\t },\n\n\t _tabindex: function(target) {\n\t target = target || this.wrapper;\n\n\t var element = this.element,\n\t TABINDEX = \"tabindex\",\n\t tabindex = target.attr(TABINDEX) || element.attr(TABINDEX);\n\n\t element.removeAttr(TABINDEX);\n\n\t target.attr(TABINDEX, !isNaN(tabindex) ? tabindex : 0);\n\t },\n\n\t setOptions: function(options) {\n\t this._setEvents(options);\n\t $.extend(this.options, options);\n\t },\n\n\t _setEvents: function(options) {\n\t var that = this,\n\t idx = 0,\n\t length = that.events.length,\n\t e;\n\n\t for (; idx < length; idx ++) {\n\t e = that.events[idx];\n\t if (that.options[e] && options[e]) {\n\t that.unbind(e, that.options[e]);\n\t if (that._events && that._events[e]) {\n\t delete that._events[e];\n\t }\n\t }\n\t }\n\n\t that.bind(that.events, options);\n\t },\n\n\t resize: function(force) {\n\t var size = this.getSize(),\n\t currentSize = this._size;\n\n\t if (force || (size.width > 0 || size.height > 0) && (!currentSize || size.width !== currentSize.width || size.height !== currentSize.height)) {\n\t this._size = size;\n\t this._resize(size, force);\n\t this.trigger(\"resize\", size);\n\t }\n\t },\n\n\t getSize: function() {\n\t return kendo.dimensions(this.element);\n\t },\n\n\t size: function(size) {\n\t if (!size) {\n\t return this.getSize();\n\t } else {\n\t this.setSize(size);\n\t }\n\t },\n\n\t setSize: $.noop,\n\t _resize: $.noop,\n\n\t destroy: function() {\n\t var that = this;\n\n\t that.element.removeData(\"kendo\" + that.options.prefix + that.options.name);\n\t that.element.removeData(\"handler\");\n\t that.unbind();\n\t },\n\t _destroy: function() {\n\t this.destroy();\n\t },\n\t angular: function(){},\n\n\t _muteAngularRebind: function(callback) {\n\t this._muteRebind = true;\n\n\t callback.call(this);\n\n\t this._muteRebind = false;\n\t }\n\t });\n\n\t var DataBoundWidget = Widget.extend({\n\t // Angular consumes these.\n\t dataItems: function() {\n\t return this.dataSource.flatView();\n\t },\n\n\t _angularItems: function(cmd) {\n\t var that = this;\n\t that.angular(cmd, function(){\n\t return {\n\t elements: that.items(),\n\t data: $.map(that.dataItems(), function(dataItem){\n\t return { dataItem: dataItem };\n\t })\n\t };\n\t });\n\t }\n\t });\n\n\t kendo.dimensions = function(element, dimensions) {\n\t var domElement = element[0];\n\n\t if (dimensions) {\n\t element.css(dimensions);\n\t }\n\n\t return { width: domElement.offsetWidth, height: domElement.offsetHeight };\n\t };\n\n\t kendo.notify = noop;\n\n\t var templateRegExp = /template$/i,\n\t jsonRegExp = /^\\s*(?:\\{(?:.|\\r\\n|\\n)*\\}|\\[(?:.|\\r\\n|\\n)*\\])\\s*$/,\n\t jsonFormatRegExp = /^\\{(\\d+)(:[^\\}]+)?\\}|^\\[[A-Za-z_]+\\]$/,\n\t dashRegExp = /([A-Z])/g;\n\n\t function parseOption(element, option) {\n\t var value;\n\n\t if (option.indexOf(\"data\") === 0) {\n\t option = option.substring(4);\n\t option = option.charAt(0).toLowerCase() + option.substring(1);\n\t }\n\n\t option = option.replace(dashRegExp, \"-$1\");\n\t value = element.getAttribute(\"data-\" + kendo.ns + option);\n\n\t if (value === null) {\n\t value = undefined;\n\t } else if (value === \"null\") {\n\t value = null;\n\t } else if (value === \"true\") {\n\t value = true;\n\t } else if (value === \"false\") {\n\t value = false;\n\t } else if (numberRegExp.test(value) && option != \"mask\") {\n\t value = parseFloat(value);\n\t } else if (jsonRegExp.test(value) && !jsonFormatRegExp.test(value)) {\n\t value = new Function(\"return (\" + value + \")\")();\n\t }\n\n\t return value;\n\t }\n\n\t function parseOptions(element, options, source) {\n\t var result = {},\n\t option,\n\t value,\n\t role = element.getAttribute(\"data-\" + kendo.ns + \"role\");\n\n\t for (option in options) {\n\t value = parseOption(element, option);\n\n\t if (value !== undefined) {\n\n\t if (templateRegExp.test(option) && role != \"drawer\") {\n\t if(typeof value === \"string\") {\n\t if($(\"#\" + value).length){\n\t value = kendo.template($(\"#\" + value).html());\n\t }else if (source){\n\t value = kendo.template(source[value]);\n\t }\n\t } else {\n\t value = element.getAttribute(option);\n\t }\n\t }\n\n\t result[option] = value;\n\t }\n\t }\n\n\t return result;\n\t }\n\n\t kendo.initWidget = function(element, options, roles) {\n\t var result,\n\t option,\n\t widget,\n\t idx,\n\t length,\n\t role,\n\t value,\n\t dataSource,\n\t fullPath,\n\t widgetKeyRegExp;\n\n\t // Preserve backwards compatibility with (element, options, namespace) signature, where namespace was kendo.ui\n\t if (!roles) {\n\t roles = kendo.ui.roles;\n\t } else if (roles.roles) {\n\t roles = roles.roles;\n\t }\n\n\t element = element.nodeType ? element : element[0];\n\n\t role = element.getAttribute(\"data-\" + kendo.ns + \"role\");\n\n\t if (!role) {\n\t return;\n\t }\n\n\t fullPath = role.indexOf(\".\") === -1;\n\n\t // look for any widget that may be already instantiated based on this role.\n\t // The prefix used is unknown, hence the regexp\n\t //\n\n\t if (fullPath) {\n\t widget = roles[role];\n\t } else { // full namespace path - like kendo.ui.Widget\n\t widget = kendo.getter(role)(window);\n\t }\n\n\t var data = $(element).data(),\n\t widgetKey = widget ? \"kendo\" + widget.fn.options.prefix + widget.fn.options.name : \"\";\n\n\t if (fullPath) {\n\t widgetKeyRegExp = new RegExp(\"^kendo.*\" + role + \"$\", \"i\");\n\t } else { // full namespace path - like kendo.ui.Widget\n\t widgetKeyRegExp = new RegExp(\"^\" + widgetKey + \"$\", \"i\");\n\t }\n\n\t for(var key in data) {\n\t if (key.match(widgetKeyRegExp)) {\n\t // we have detected a widget of the same kind - save its reference, we will set its options\n\t if (key === widgetKey) {\n\t result = data[key];\n\t } else {\n\t return data[key];\n\t }\n\t }\n\t }\n\n\t if (!widget) {\n\t return;\n\t }\n\n\t dataSource = parseOption(element, \"dataSource\");\n\n\t options = $.extend({}, parseOptions(element, $.extend({}, widget.fn.options, widget.fn.defaults) ), options);\n\n\t if (dataSource) {\n\t if (typeof dataSource === STRING) {\n\t options.dataSource = kendo.getter(dataSource)(window);\n\t } else {\n\t options.dataSource = dataSource;\n\t }\n\t }\n\n\t for (idx = 0, length = widget.fn.events.length; idx < length; idx++) {\n\t option = widget.fn.events[idx];\n\n\t value = parseOption(element, option);\n\n\t if (value !== undefined) {\n\t options[option] = kendo.getter(value)(window);\n\t }\n\t }\n\n\t if (!result) {\n\t result = new widget(element, options);\n\t } else if (!$.isEmptyObject(options)) {\n\t result.setOptions(options);\n\t }\n\n\t return result;\n\t };\n\n\t kendo.rolesFromNamespaces = function(namespaces) {\n\t var roles = [],\n\t idx,\n\t length;\n\n\t if (!namespaces[0]) {\n\t namespaces = [kendo.ui, kendo.dataviz.ui];\n\t }\n\n\t for (idx = 0, length = namespaces.length; idx < length; idx ++) {\n\t roles[idx] = namespaces[idx].roles;\n\t }\n\n\t return extend.apply(null, [{}].concat(roles.reverse()));\n\t };\n\n\t kendo.init = function(element) {\n\t var roles = kendo.rolesFromNamespaces(slice.call(arguments, 1));\n\n\t $(element).find(\"[data-\" + kendo.ns + \"role]\").addBack().each(function(){\n\t kendo.initWidget(this, {}, roles);\n\t });\n\t };\n\n\t kendo.destroy = function(element) {\n\t $(element).find(\"[data-\" + kendo.ns + \"role]\").addBack().each(function(){\n\t var data = $(this).data();\n\n\t for (var key in data) {\n\t if (key.indexOf(\"kendo\") === 0 && typeof data[key].destroy === FUNCTION) {\n\t data[key].destroy();\n\t }\n\t }\n\t });\n\t };\n\n\t function containmentComparer(a, b) {\n\t return $.contains(a, b) ? -1 : 1;\n\t }\n\n\t function resizableWidget() {\n\t var widget = $(this);\n\t return ($.inArray(widget.attr(\"data-\" + kendo.ns + \"role\"), [\"slider\", \"rangeslider\", \"breadcrumb\"]) > -1) || widget.is(\":visible\");\n\t }\n\n\t kendo.resize = function(element, force) {\n\t var widgets = $(element).find(\"[data-\" + kendo.ns + \"role]\").addBack().filter(resizableWidget);\n\n\t if (!widgets.length) {\n\t return;\n\t }\n\n\t // sort widgets based on their parent-child relation\n\t var widgetsArray = $.makeArray(widgets);\n\t widgetsArray.sort(containmentComparer);\n\n\t // resize widgets\n\t $.each(widgetsArray, function () {\n\t var widget = kendo.widgetInstance($(this));\n\t if (widget) {\n\t widget.resize(force);\n\t }\n\t });\n\t };\n\n\t kendo.parseOptions = parseOptions;\n\n\t extend(kendo.ui, {\n\t Widget: Widget,\n\t DataBoundWidget: DataBoundWidget,\n\t roles: {},\n\t progress: function(container, toggle, options) {\n\t var mask = container.find(\".k-loading-mask\"),\n\t support = kendo.support,\n\t browser = support.browser,\n\t isRtl, leftRight, webkitCorrection, containerScrollLeft, cssClass;\n\n\t options = $.extend({}, {\n\t width: \"100%\",\n\t height: \"100%\",\n\t top: container.scrollTop(),\n\t opacity: false\n\t }, options);\n\n\t cssClass = options.opacity ? 'k-loading-mask k-opaque' : 'k-loading-mask';\n\n\t if (toggle) {\n\t if (!mask.length) {\n\t isRtl = support.isRtl(container);\n\t leftRight = isRtl ? \"right\" : \"left\";\n\t containerScrollLeft = kendo.scrollLeft(container);\n\t webkitCorrection = browser.webkit ? (!isRtl ? 0 : container[0].scrollWidth - container.width() - 2 * containerScrollLeft) : 0;\n\n\t mask = $(kendo.format(\"
{1}
\", cssClass, kendo.ui.progress.messages.loading))\n\t .width(options.width).height(options.height)\n\t .css(\"top\", options.top)\n\t .css(leftRight, Math.abs(containerScrollLeft) + webkitCorrection)\n\t .prependTo(container);\n\t }\n\t } else if (mask) {\n\t mask.remove();\n\t }\n\t },\n\t plugin: function(widget, register, prefix) {\n\t var name = widget.fn.options.name,\n\t getter;\n\n\t register = register || kendo.ui;\n\t prefix = prefix || \"\";\n\n\t register[name] = widget;\n\n\t register.roles[name.toLowerCase()] = widget;\n\n\t getter = \"getKendo\" + prefix + name;\n\t name = \"kendo\" + prefix + name;\n\n\t var widgetEntry = { name: name, widget: widget, prefix: prefix || \"\" };\n\t kendo.widgets.push(widgetEntry);\n\n\t for (var i = 0, len = kendo._widgetRegisteredCallbacks.length; i < len; i++) {\n\t kendo._widgetRegisteredCallbacks[i](widgetEntry);\n\t }\n\n\t $.fn[name] = function(options) {\n\t var value = this,\n\t args;\n\n\t if (typeof options === STRING) {\n\t args = slice.call(arguments, 1);\n\n\t this.each(function(){\n\t var widget = $.data(this, name),\n\t method,\n\t result;\n\n\t if (!widget) {\n\t throw new Error(kendo.format(\"Cannot call method '{0}' of {1} before it is initialized\", options, name));\n\t }\n\n\t method = widget[options];\n\n\t if (typeof method !== FUNCTION) {\n\t throw new Error(kendo.format(\"Cannot find method '{0}' of {1}\", options, name));\n\t }\n\n\t result = method.apply(widget, args);\n\n\t if (result !== undefined) {\n\t value = result;\n\t return false;\n\t }\n\t });\n\t } else {\n\t this.each(function() {\n\t return new widget(this, options);\n\t });\n\t }\n\n\t return value;\n\t };\n\n\t $.fn[name].widget = widget;\n\n\t $.fn[getter] = function() {\n\t return this.data(name);\n\t };\n\t }\n\t });\n\n\t kendo.ui.progress.messages = {\n\t loading: \"Loading...\"\n\t };\n\n\t var ContainerNullObject = { bind: function () { return this; }, nullObject: true, options: {} };\n\n\t var MobileWidget = Widget.extend({\n\t init: function(element, options) {\n\t Widget.fn.init.call(this, element, options);\n\t this.element.autoApplyNS();\n\t this.wrapper = this.element;\n\t this.element.addClass(\"km-widget\");\n\t },\n\n\t destroy: function() {\n\t Widget.fn.destroy.call(this);\n\t this.element.kendoDestroy();\n\t },\n\n\t options: {\n\t prefix: \"Mobile\"\n\t },\n\n\t events: [],\n\n\t view: function() {\n\t var viewElement = this.element.closest(kendo.roleSelector(\"view splitview modalview drawer\"));\n\t return kendo.widgetInstance(viewElement, kendo.mobile.ui) || ContainerNullObject;\n\t },\n\n\t viewHasNativeScrolling: function() {\n\t var view = this.view();\n\t return view && view.options.useNativeScrolling;\n\t },\n\n\t container: function() {\n\t var element = this.element.closest(kendo.roleSelector(\"view layout modalview drawer splitview\"));\n\t return kendo.widgetInstance(element.eq(0), kendo.mobile.ui) || ContainerNullObject;\n\t }\n\t });\n\n\t extend(kendo.mobile, {\n\t init: function(element) {\n\t kendo.init(element, kendo.mobile.ui, kendo.ui, kendo.dataviz.ui);\n\t },\n\n\t appLevelNativeScrolling: function() {\n\t return kendo.mobile.application && kendo.mobile.application.options && kendo.mobile.application.options.useNativeScrolling;\n\t },\n\n\t roles: {},\n\n\t ui: {\n\t Widget: MobileWidget,\n\t DataBoundWidget: DataBoundWidget.extend(MobileWidget.prototype),\n\t roles: {},\n\t plugin: function(widget) {\n\t kendo.ui.plugin(widget, kendo.mobile.ui, \"Mobile\");\n\t }\n\t }\n\t });\n\n\t deepExtend(kendo.dataviz, {\n\t init: function(element) {\n\t kendo.init(element, kendo.dataviz.ui);\n\t },\n\t ui: {\n\t roles: {},\n\t themes: {},\n\t views: [],\n\t plugin: function(widget) {\n\t kendo.ui.plugin(widget, kendo.dataviz.ui);\n\t }\n\t },\n\t roles: {}\n\t });\n\n\t kendo.touchScroller = function(elements, options) {\n\t // return the first touch scroller\n\t if (!options){ options = {}; }\n\n\t options.useNative = true;\n\n\t return $(elements).map(function(idx, element) {\n\t element = $(element);\n\t if (support.kineticScrollNeeded && kendo.mobile.ui.Scroller && !element.data(\"kendoMobileScroller\")) {\n\t element.kendoMobileScroller(options);\n\t return element.data(\"kendoMobileScroller\");\n\t } else {\n\t return false;\n\t }\n\t })[0];\n\t };\n\n\t kendo.preventDefault = function(e) {\n\t e.preventDefault();\n\t };\n\n\t kendo.widgetInstance = function(element, suites) {\n\t var role = element.data(kendo.ns + \"role\"),\n\t widgets = [], i, length,\n\t elementData = element.data(\"kendoView\");\n\n\t if (role) {\n\t // HACK!!! mobile view scroller widgets are instantiated on data-role=\"content\" elements. We need to discover them when resizing.\n\t if (role === \"content\") {\n\t role = \"scroller\";\n\t }\n\n\t // kendoEditorToolbar is not a public plugin, thus it does not exist in kendo.ui.roles.\n\t // Therefore, this is needed in order to be resized when placed in Kendo Window.\n\t if (role === \"editortoolbar\") {\n\t var editorToolbar = element.data(\"kendoEditorToolbar\");\n\t if (editorToolbar) {\n\t return editorToolbar;\n\t }\n\t }\n\n\t // kendo.View is not a ui plugin\n\n\t if (role === \"view\" && elementData) {\n\t return elementData;\n\t }\n\n\t if (suites) {\n\t if (suites[0]) {\n\t for (i = 0, length = suites.length; i < length; i ++) {\n\t widgets.push(suites[i].roles[role]);\n\t }\n\t } else {\n\t widgets.push(suites.roles[role]);\n\t }\n\t }\n\t else {\n\t widgets = [ kendo.ui.roles[role], kendo.dataviz.ui.roles[role], kendo.mobile.ui.roles[role] ];\n\t }\n\n\t if (role.indexOf(\".\") >= 0) {\n\t widgets = [ kendo.getter(role)(window) ];\n\t }\n\n\t for (i = 0, length = widgets.length; i < length; i ++) {\n\t var widget = widgets[i];\n\t if (widget) {\n\t var instance = element.data(\"kendo\" + widget.fn.options.prefix + widget.fn.options.name);\n\t if (instance) {\n\t return instance;\n\t }\n\t }\n\t }\n\t }\n\t };\n\n\t kendo.onResize = function(callback) {\n\t var handler = callback;\n\t if (support.mobileOS.android) {\n\t handler = function() { setTimeout(callback, 600); };\n\t }\n\n\t $(window).on(support.resize, handler);\n\t return handler;\n\t };\n\n\t kendo.unbindResize = function(callback) {\n\t $(window).off(support.resize, callback);\n\t };\n\n\t kendo.attrValue = function(element, key) {\n\t return element.data(kendo.ns + key);\n\t };\n\n\t kendo.days = {\n\t Sunday: 0,\n\t Monday: 1,\n\t Tuesday: 2,\n\t Wednesday: 3,\n\t Thursday: 4,\n\t Friday: 5,\n\t Saturday: 6\n\t };\n\n\t function focusable(element, isTabIndexNotNaN) {\n\t var nodeName = element.nodeName.toLowerCase();\n\n\t return (/input|select|textarea|button|object/.test(nodeName) ?\n\t !element.disabled :\n\t \"a\" === nodeName ?\n\t element.href || isTabIndexNotNaN :\n\t isTabIndexNotNaN\n\t ) &&\n\t visible(element);\n\t }\n\n\t function visible(element) {\n\t return $.expr.pseudos.visible(element) &&\n\t !$(element).parents().addBack().filter(function() {\n\t return $.css(this,\"visibility\") === \"hidden\";\n\t }).length;\n\t }\n\n\t $.extend($.expr.pseudos, {\n\t kendoFocusable: function(element) {\n\t var idx = $.attr(element, \"tabindex\");\n\t return focusable(element, !isNaN(idx) && idx > -1);\n\t }\n\t });\n\n\t var MOUSE_EVENTS = [\"mousedown\", \"mousemove\", \"mouseenter\", \"mouseleave\", \"mouseover\", \"mouseout\", \"mouseup\", \"click\"];\n\t var EXCLUDE_BUST_CLICK_SELECTOR = \"label, input, [data-rel=external]\";\n\n\t var MouseEventNormalizer = {\n\t setupMouseMute: function() {\n\t var idx = 0,\n\t length = MOUSE_EVENTS.length,\n\t element = document.documentElement;\n\n\t if (MouseEventNormalizer.mouseTrap || !support.eventCapture) {\n\t return;\n\t }\n\n\t MouseEventNormalizer.mouseTrap = true;\n\n\t MouseEventNormalizer.bustClick = false;\n\t MouseEventNormalizer.captureMouse = false;\n\n\t var handler = function(e) {\n\t if (MouseEventNormalizer.captureMouse) {\n\t if (e.type === \"click\") {\n\t if (MouseEventNormalizer.bustClick && !$(e.target).is(EXCLUDE_BUST_CLICK_SELECTOR)) {\n\t e.preventDefault();\n\t e.stopPropagation();\n\t }\n\t } else {\n\t e.stopPropagation();\n\t }\n\t }\n\t };\n\n\t for (; idx < length; idx++) {\n\t element.addEventListener(MOUSE_EVENTS[idx], handler, true);\n\t }\n\t },\n\n\t muteMouse: function(e) {\n\t MouseEventNormalizer.captureMouse = true;\n\t if (e.data.bustClick) {\n\t MouseEventNormalizer.bustClick = true;\n\t }\n\t clearTimeout(MouseEventNormalizer.mouseTrapTimeoutID);\n\t },\n\n\t unMuteMouse: function() {\n\t clearTimeout(MouseEventNormalizer.mouseTrapTimeoutID);\n\t MouseEventNormalizer.mouseTrapTimeoutID = setTimeout(function() {\n\t MouseEventNormalizer.captureMouse = false;\n\t MouseEventNormalizer.bustClick = false;\n\t }, 400);\n\t }\n\t };\n\n\t var eventMap = {\n\t down: \"touchstart mousedown\",\n\t move: \"mousemove touchmove\",\n\t up: \"mouseup touchend touchcancel\",\n\t cancel: \"mouseleave touchcancel\"\n\t };\n\n\t if (support.touch && (support.mobileOS.ios || support.mobileOS.android)) {\n\t eventMap = {\n\t down: \"touchstart\",\n\t move: \"touchmove\",\n\t up: \"touchend touchcancel\",\n\t cancel: \"touchcancel\"\n\t };\n\t } else if (support.pointers) {\n\t eventMap = {\n\t down: \"pointerdown\",\n\t move: \"pointermove\",\n\t up: \"pointerup\",\n\t cancel: \"pointercancel pointerleave\"\n\t };\n\t } else if (support.msPointers) {\n\t eventMap = {\n\t down: \"MSPointerDown\",\n\t move: \"MSPointerMove\",\n\t up: \"MSPointerUp\",\n\t cancel: \"MSPointerCancel MSPointerLeave\"\n\t };\n\t }\n\n\t if (support.msPointers && !(\"onmspointerenter\" in window)) { // IE10\n\t // Create MSPointerEnter/MSPointerLeave events using mouseover/out and event-time checks\n\t $.each({\n\t MSPointerEnter: \"MSPointerOver\",\n\t MSPointerLeave: \"MSPointerOut\"\n\t }, function( orig, fix ) {\n\t $.event.special[ orig ] = {\n\t delegateType: fix,\n\t bindType: fix,\n\n\t handle: function( event ) {\n\t var ret,\n\t target = this,\n\t related = event.relatedTarget,\n\t handleObj = event.handleObj;\n\n\t // For mousenter/leave call the handler if related is outside the target.\n\t // NB: No relatedTarget if the mouse left/entered the browser window\n\t if ( !related || (related !== target && !$.contains( target, related )) ) {\n\t event.type = handleObj.origType;\n\t ret = handleObj.handler.apply( this, arguments );\n\t event.type = fix;\n\t }\n\t return ret;\n\t }\n\t };\n\t });\n\t }\n\n\n\t var getEventMap = function(e) { return (eventMap[e] || e); },\n\t eventRegEx = /([^ ]+)/g;\n\n\t kendo.applyEventMap = function(events, ns) {\n\t events = events.replace(eventRegEx, getEventMap);\n\n\t if (ns) {\n\t events = events.replace(eventRegEx, \"$1.\" + ns);\n\t }\n\n\t return events;\n\t };\n\n\t kendo.keyDownHandler = function(e, widget) {\n\t var events = widget._events.kendoKeydown;\n\n\t if(!events){\n\t return true;\n\t }\n\n\t events = events.slice();\n\t e.sender = widget;\n\t e.preventKendoKeydown = false;\n\t for (var idx = 0, length = events.length; idx < length; idx++) {\n\t events[idx].call(widget, e);\n\t }\n\n\t return !e.preventKendoKeydown;\n\t };\n\n\t var on = $.fn.on;\n\n\t function kendoJQuery(selector, context) {\n\t return new kendoJQuery.fn.init(selector, context);\n\t }\n\n\t noDepricateExtend(true, kendoJQuery, $);\n\n\t kendoJQuery.fn = kendoJQuery.prototype = new $();\n\n\t kendoJQuery.fn.constructor = kendoJQuery;\n\n\t kendoJQuery.fn.init = function(selector, context) {\n\t if (context && context instanceof $ && !(context instanceof kendoJQuery)) {\n\t context = kendoJQuery(context);\n\t }\n\n\t return $.fn.init.call(this, selector, context, rootjQuery);\n\t };\n\n\t kendoJQuery.fn.init.prototype = kendoJQuery.fn;\n\n\t var rootjQuery = kendoJQuery(document);\n\n\t extend(kendoJQuery.fn, {\n\t handler: function(handler) {\n\t this.data(\"handler\", handler);\n\t return this;\n\t },\n\n\t autoApplyNS: function(ns) {\n\t this.data(\"kendoNS\", ns || kendo.guid());\n\t return this;\n\t },\n\n\t on: function() {\n\t var that = this,\n\t ns = that.data(\"kendoNS\");\n\n\t // support for event map signature\n\t if (arguments.length === 1) {\n\t return on.call(that, arguments[0]);\n\t }\n\n\t var context = that,\n\t args = slice.call(arguments);\n\n\t if (typeof args[args.length -1] === UNDEFINED) {\n\t args.pop();\n\t }\n\n\t var callback = args[args.length - 1],\n\t events = kendo.applyEventMap(args[0], ns);\n\n\t // setup mouse trap\n\t if (support.mouseAndTouchPresent && events.search(/mouse|click/) > -1 && this[0] !== document.documentElement) {\n\t MouseEventNormalizer.setupMouseMute();\n\n\t var selector = args.length === 2 ? null : args[1],\n\t bustClick = events.indexOf(\"click\") > -1 && events.indexOf(\"touchend\") > -1;\n\n\t on.call(this,\n\t {\n\t touchstart: MouseEventNormalizer.muteMouse,\n\t touchend: MouseEventNormalizer.unMuteMouse\n\t },\n\t selector,\n\t {\n\t bustClick: bustClick\n\t });\n\t }\n\n\t if(arguments[0].indexOf(\"keydown\") !== -1 && args[1] && args[1].options){\n\t args[0] = events;\n\t var widget = args[1];\n\t var keyDownCallBack = args[args.length - 1];\n\t args[args.length - 1]= function(e){\n\t if(kendo.keyDownHandler(e, widget)){\n\t return keyDownCallBack.apply(this, [e]);\n\t }\n\t };\n\t on.apply(that, args);\n\t return that;\n\t }\n\n\t if (typeof callback === STRING) {\n\t context = that.data(\"handler\");\n\t callback = context[callback];\n\n\t args[args.length - 1] = function(e) {\n\t callback.call(context, e);\n\t };\n\t }\n\n\t args[0] = events;\n\n\t on.apply(that, args);\n\n\t return that;\n\t },\n\n\t kendoDestroy: function(ns) {\n\t ns = ns || this.data(\"kendoNS\");\n\n\t if (ns) {\n\t this.off(\".\" + ns);\n\t }\n\n\t return this;\n\t }\n\t });\n\n\t kendo.jQuery = kendoJQuery;\n\t kendo.eventMap = eventMap;\n\n\t kendo.timezone = (function(){\n\t var months = { Jan: 0, Feb: 1, Mar: 2, Apr: 3, May: 4, Jun: 5, Jul: 6, Aug: 7, Sep: 8, Oct: 9, Nov: 10, Dec: 11 };\n\t var days = { Sun: 0, Mon: 1, Tue: 2, Wed: 3, Thu: 4, Fri: 5, Sat: 6 };\n\n\t function ruleToDate(year, rule) {\n\t var date;\n\t var targetDay;\n\t var ourDay;\n\t var month = rule[3];\n\t var on = rule[4];\n\t var time = rule[5];\n\t var cache = rule[8];\n\n\t if (!cache) {\n\t rule[8] = cache = {};\n\t }\n\n\t if (cache[year]) {\n\t return cache[year];\n\t }\n\n\t if (!isNaN(on)) {\n\t date = new Date(Date.UTC(year, months[month], on, time[0], time[1], time[2], 0));\n\t } else if (on.indexOf(\"last\") === 0) {\n\t date = new Date(Date.UTC(year, months[month] + 1, 1, time[0] - 24, time[1], time[2], 0));\n\n\t targetDay = days[on.substr(4, 3)];\n\t ourDay = date.getUTCDay();\n\n\t date.setUTCDate(date.getUTCDate() + targetDay - ourDay - (targetDay > ourDay ? 7 : 0));\n\t } else if (on.indexOf(\">=\") >= 0) {\n\t date = new Date(Date.UTC(year, months[month], on.substr(5), time[0], time[1], time[2], 0));\n\n\t targetDay = days[on.substr(0, 3)];\n\t ourDay = date.getUTCDay();\n\n\t date.setUTCDate(date.getUTCDate() + targetDay - ourDay + (targetDay < ourDay ? 7 : 0));\n\t } else if (on.indexOf(\"<=\") >= 0) {\n\t date = new Date(Date.UTC(year, months[month], on.substr(5), time[0], time[1], time[2], 0));\n\n\t targetDay = days[on.substr(0, 3)];\n\t ourDay = date.getUTCDay();\n\n\t date.setUTCDate(date.getUTCDate() + targetDay - ourDay - (targetDay > ourDay ? 7 : 0));\n\t }\n\n\t return cache[year] = date;\n\t }\n\n\t function findRule(utcTime, rules, zone) {\n\t rules = rules[zone];\n\n\t if (!rules) {\n\t var time = zone.split(\":\");\n\t var offset = 0;\n\n\t if (time.length > 1) {\n\t offset = time[0] * 60 + Number(time[1]);\n\t }\n\n\t return [-1000000, 'max', '-', 'Jan', 1, [0, 0, 0], offset, '-'];\n\t }\n\n\t var year = new Date(utcTime).getUTCFullYear();\n\n\t rules = jQuery.grep(rules, function(rule) {\n\t var from = rule[0];\n\t var to = rule[1];\n\n\t return from <= year && (to >= year || (from == year && to == \"only\") || to == \"max\");\n\t });\n\n\t rules.push(utcTime);\n\n\t rules.sort(function(a, b) {\n\t if (typeof a != \"number\") {\n\t a = Number(ruleToDate(year, a));\n\t }\n\n\t if (typeof b != \"number\") {\n\t b = Number(ruleToDate(year, b));\n\t }\n\n\t return a - b;\n\t });\n\n\t var rule = rules[jQuery.inArray(utcTime, rules) - 1] || rules[rules.length - 1];\n\n\t return isNaN(rule) ? rule : null;\n\t }\n\n\t function findZone(utcTime, zones, timezone) {\n\t var zoneRules = zones[timezone];\n\n\t if (typeof zoneRules === \"string\") {\n\t zoneRules = zones[zoneRules];\n\t }\n\n\t if (!zoneRules) {\n\t throw new Error('Timezone \"' + timezone + '\" is either incorrect, or kendo.timezones.min.js is not included.');\n\t }\n\n\t for (var idx = zoneRules.length - 1; idx >= 0; idx--) {\n\t var until = zoneRules[idx][3];\n\n\t if (until && utcTime > until) {\n\t break;\n\t }\n\t }\n\n\t var zone = zoneRules[idx + 1];\n\n\t if (!zone) {\n\t throw new Error('Timezone \"' + timezone + '\" not found on ' + utcTime + \".\");\n\t }\n\n\t return zone;\n\t }\n\n\t function zoneAndRule(utcTime, zones, rules, timezone) {\n\t if (typeof utcTime != NUMBER) {\n\t utcTime = Date.UTC(utcTime.getFullYear(), utcTime.getMonth(),\n\t utcTime.getDate(), utcTime.getHours(), utcTime.getMinutes(),\n\t utcTime.getSeconds(), utcTime.getMilliseconds());\n\t }\n\n\t var zone = findZone(utcTime, zones, timezone);\n\n\t return {\n\t zone: zone,\n\t rule: findRule(utcTime, rules, zone[1])\n\t };\n\t }\n\n\t function offset(utcTime, timezone) {\n\t if (timezone == \"Etc/UTC\" || timezone == \"Etc/GMT\") {\n\t return 0;\n\t }\n\n\t var info = zoneAndRule(utcTime, this.zones, this.rules, timezone);\n\t var zone = info.zone;\n\t var rule = info.rule;\n\n\t return kendo.parseFloat(rule? zone[0] - rule[6] : zone[0]);\n\t }\n\n\t function abbr(utcTime, timezone) {\n\t var info = zoneAndRule(utcTime, this.zones, this.rules, timezone);\n\t var zone = info.zone;\n\t var rule = info.rule;\n\n\t var base = zone[2];\n\n\t if (base.indexOf(\"/\") >= 0) {\n\t return base.split(\"/\")[rule && +rule[6] ? 1 : 0];\n\t } else if (base.indexOf(\"%s\") >= 0) {\n\t return base.replace(\"%s\", (!rule || rule[7] == \"-\") ? '' : rule[7]);\n\t }\n\n\t return base;\n\t }\n\n\t function convert(date, fromOffset, toOffset) {\n\t var tempToOffset = toOffset;\n\t var diff;\n\n\t if (typeof fromOffset == STRING) {\n\t fromOffset = this.offset(date, fromOffset);\n\t }\n\n\t if (typeof toOffset == STRING) {\n\t toOffset = this.offset(date, toOffset);\n\t }\n\n\t var fromLocalOffset = date.getTimezoneOffset();\n\n\t date = new Date(date.getTime() + (fromOffset - toOffset) * 60000);\n\n\t var toLocalOffset = date.getTimezoneOffset();\n\n\t if (typeof tempToOffset == STRING) {\n\t tempToOffset = this.offset(date, tempToOffset);\n\t }\n\n\t diff = (toLocalOffset - fromLocalOffset) + (toOffset - tempToOffset);\n\n\t return new Date(date.getTime() + diff * 60000);\n\t }\n\n\t function apply(date, timezone) {\n\t return this.convert(date, date.getTimezoneOffset(), timezone);\n\t }\n\n\t function remove(date, timezone) {\n\t return this.convert(date, timezone, date.getTimezoneOffset());\n\t }\n\n\t function toLocalDate(time) {\n\t return this.apply(new Date(time), \"Etc/UTC\");\n\t }\n\n\t return {\n\t zones: {},\n\t rules: {},\n\t offset: offset,\n\t convert: convert,\n\t apply: apply,\n\t remove: remove,\n\t abbr: abbr,\n\t toLocalDate: toLocalDate\n\t };\n\t })();\n\n\t kendo.date = (function(){\n\t var MS_PER_MINUTE = 60000,\n\t MS_PER_DAY = 86400000;\n\n\t function adjustDST(date, hours) {\n\t if (hours === 0 && date.getHours() === 23) {\n\t date.setHours(date.getHours() + 2);\n\t return true;\n\t }\n\n\t return false;\n\t }\n\n\t function setDayOfWeek(date, day, dir) {\n\t var hours = date.getHours();\n\n\t dir = dir || 1;\n\t day = ((day - date.getDay()) + (7 * dir)) % 7;\n\n\t date.setDate(date.getDate() + day);\n\t adjustDST(date, hours);\n\t }\n\n\t function dayOfWeek(date, day, dir) {\n\t date = new Date(date);\n\t setDayOfWeek(date, day, dir);\n\t return date;\n\t }\n\n\t function firstDayOfMonth(date) {\n\t return new Date(\n\t date.getFullYear(),\n\t date.getMonth(),\n\t 1\n\t );\n\t }\n\n\t function lastDayOfMonth(date) {\n\t var last = new Date(date.getFullYear(), date.getMonth() + 1, 0),\n\t first = firstDayOfMonth(date),\n\t timeOffset = Math.abs(last.getTimezoneOffset() - first.getTimezoneOffset());\n\n\t if (timeOffset) {\n\t last.setHours(first.getHours() + (timeOffset / 60));\n\t }\n\n\t return last;\n\t }\n\n\t function firstDayOfYear(date) {\n\t return new Date(date.getFullYear(), 0, 1);\n\t }\n\n\t function lastDayOfYear(date) {\n\t return new Date(date.getFullYear(), 11, 31);\n\t }\n\n\t function moveDateToWeekStart(date, weekStartDay) {\n\t if (weekStartDay !== 1) {\n\t return addDays(dayOfWeek(date, weekStartDay, -1), 4);\n\t }\n\n\t return addDays(date, (4 - (date.getDay() || 7)));\n\t }\n\n\t function calcWeekInYear(date, weekStartDay) {\n\t var firstWeekInYear = new Date(date.getFullYear(), 0, 1, -6);\n\n\t var newDate = moveDateToWeekStart(date, weekStartDay);\n\n\t var diffInMS = newDate.getTime() - firstWeekInYear.getTime();\n\n\t var days = Math.floor(diffInMS / MS_PER_DAY);\n\n\t return 1 + Math.floor(days / 7);\n\t }\n\n\t function weekInYear(date, weekStartDay) {\n\t if(weekStartDay === undefined) {\n\t weekStartDay = kendo.culture().calendar.firstDay;\n\t }\n\n\t var prevWeekDate = addDays(date, -7);\n\t var nextWeekDate = addDays(date, 7);\n\n\t var weekNumber = calcWeekInYear(date, weekStartDay);\n\n\t if (weekNumber === 0) {\n\t return calcWeekInYear(prevWeekDate, weekStartDay) + 1;\n\t }\n\n\t if (weekNumber === 53 && calcWeekInYear(nextWeekDate, weekStartDay) > 1) {\n\t return 1;\n\t }\n\n\t return weekNumber;\n\t }\n\n\t function getDate(date) {\n\t date = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0);\n\t adjustDST(date, 0);\n\t return date;\n\t }\n\n\t function toUtcTime(date) {\n\t return Date.UTC(date.getFullYear(), date.getMonth(),\n\t date.getDate(), date.getHours(), date.getMinutes(),\n\t date.getSeconds(), date.getMilliseconds());\n\t }\n\n\t function getMilliseconds(date) {\n\t return toInvariantTime(date).getTime() - getDate(toInvariantTime(date));\n\t }\n\n\t function isInTimeRange(value, min, max) {\n\t var msMin = getMilliseconds(min),\n\t msMax = getMilliseconds(max),\n\t msValue;\n\n\t if (!value || msMin == msMax) {\n\t return true;\n\t }\n\n\t if (min >= max) {\n\t max += MS_PER_DAY;\n\t }\n\n\t msValue = getMilliseconds(value);\n\n\t if (msMin > msValue) {\n\t msValue += MS_PER_DAY;\n\t }\n\n\t if (msMax < msMin) {\n\t msMax += MS_PER_DAY;\n\t }\n\n\t return msValue >= msMin && msValue <= msMax;\n\t }\n\n\t function isInDateRange(value, min, max) {\n\t var msMin = min.getTime(),\n\t msMax = max.getTime(),\n\t msValue;\n\n\t if (msMin >= msMax) {\n\t msMax += MS_PER_DAY;\n\t }\n\n\t msValue = value.getTime();\n\n\t return msValue >= msMin && msValue <= msMax;\n\t }\n\n\t function addDays(date, offset) {\n\t var hours = date.getHours();\n\t date = new Date(date);\n\n\t setTime(date, offset * MS_PER_DAY);\n\t adjustDST(date, hours);\n\t return date;\n\t }\n\n\t function setTime(date, milliseconds, ignoreDST) {\n\t var offset = date.getTimezoneOffset();\n\t var difference;\n\n\t date.setTime(date.getTime() + milliseconds);\n\n\t if (!ignoreDST) {\n\t difference = date.getTimezoneOffset() - offset;\n\t date.setTime(date.getTime() + difference * MS_PER_MINUTE);\n\t }\n\t }\n\n\t function setHours(date, time) {\n\t date = new Date(date.getFullYear(), date.getMonth(), date.getDate(), time.getHours(), time.getMinutes(), time.getSeconds(), time.getMilliseconds());\n\t adjustDST(date, time.getHours());\n\t return date;\n\t }\n\n\t function today() {\n\t return getDate(new Date());\n\t }\n\n\t function isToday(date) {\n\t return getDate(date).getTime() == today().getTime();\n\t }\n\n\t function toInvariantTime(date) {\n\t var staticDate = new Date(1980, 1, 1, 0, 0, 0);\n\n\t if (date) {\n\t staticDate.setHours(date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n\t }\n\n\t return staticDate;\n\t }\n\n\t function addYear(date, offset) {\n\t var currentDate = new Date(date);\n\n\t return new Date(currentDate.setFullYear(currentDate.getFullYear() + offset));\n\t }\n\n\t return {\n\t adjustDST: adjustDST,\n\t dayOfWeek: dayOfWeek,\n\t setDayOfWeek: setDayOfWeek,\n\t getDate: getDate,\n\t isInDateRange: isInDateRange,\n\t isInTimeRange: isInTimeRange,\n\t isToday: isToday,\n\t nextDay: function(date) {\n\t return addDays(date, 1);\n\t },\n\t previousDay: function(date) {\n\t return addDays(date, -1);\n\t },\n\t toUtcTime: toUtcTime,\n\t MS_PER_DAY: MS_PER_DAY,\n\t MS_PER_HOUR: 60 * MS_PER_MINUTE,\n\t MS_PER_MINUTE: MS_PER_MINUTE,\n\t setTime: setTime,\n\t setHours: setHours,\n\t addDays: addDays,\n\t today: today,\n\t toInvariantTime: toInvariantTime,\n\t firstDayOfMonth: firstDayOfMonth,\n\t lastDayOfMonth: lastDayOfMonth,\n\t weekInYear: weekInYear,\n\t getMilliseconds: getMilliseconds,\n\t firstDayOfYear: firstDayOfYear,\n\t lastDayOfYear: lastDayOfYear,\n\t nextYear: function(date) {\n\t return addYear(date, 1);\n\t },\n\t previousYear: function(date) {\n\t return addYear(date, -1);\n\t }\n\t };\n\t })();\n\n\n\t kendo.stripWhitespace = function(element) {\n\t if (document.createNodeIterator) {\n\t var iterator = document.createNodeIterator(element, NodeFilter.SHOW_TEXT, function(node) {\n\t return node.parentNode == element ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;\n\t }, false);\n\n\t while (iterator.nextNode()) {\n\t if (iterator.referenceNode && !iterator.referenceNode.textContent.trim()) {\n\t iterator.referenceNode.parentNode.removeChild(iterator.referenceNode);\n\t }\n\t }\n\t } else { // IE7/8 support\n\t for (var i = 0; i < element.childNodes.length; i++) {\n\t var child = element.childNodes[i];\n\n\t if (child.nodeType == 3 && !/\\S/.test(child.nodeValue)) {\n\t element.removeChild(child);\n\t i--;\n\t }\n\n\t if (child.nodeType == 1) {\n\t kendo.stripWhitespace(child);\n\t }\n\t }\n\t }\n\t };\n\n\t var animationFrame = window.requestAnimationFrame ||\n\t window.webkitRequestAnimationFrame ||\n\t window.mozRequestAnimationFrame ||\n\t window.oRequestAnimationFrame ||\n\t window.msRequestAnimationFrame ||\n\t function(callback){ setTimeout(callback, 1000 / 60); };\n\n\t kendo.animationFrame = function(callback) {\n\t animationFrame.call(window, callback);\n\t };\n\n\t var animationQueue = [];\n\n\t kendo.queueAnimation = function(callback) {\n\t animationQueue[animationQueue.length] = callback;\n\t if (animationQueue.length === 1) {\n\t kendo.runNextAnimation();\n\t }\n\t };\n\n\t kendo.runNextAnimation = function() {\n\t kendo.animationFrame(function() {\n\t if (animationQueue[0]) {\n\t animationQueue.shift()();\n\t if (animationQueue[0]) {\n\t kendo.runNextAnimation();\n\t }\n\t }\n\t });\n\t };\n\n\t kendo.parseQueryStringParams = function(url) {\n\t var queryString = url.split('?')[1] || \"\",\n\t params = {},\n\t paramParts = queryString.split(/&|=/),\n\t length = paramParts.length,\n\t idx = 0;\n\n\t for (; idx < length; idx += 2) {\n\t if(paramParts[idx] !== \"\") {\n\t params[decodeURIComponent(paramParts[idx])] = decodeURIComponent(paramParts[idx + 1]);\n\t }\n\t }\n\n\t return params;\n\t };\n\n\t kendo.elementUnderCursor = function(e) {\n\t if (typeof e.x.client != \"undefined\") {\n\t return document.elementFromPoint(e.x.client, e.y.client);\n\t }\n\t };\n\n\t kendo.wheelDeltaY = function(jQueryEvent) {\n\t var e = jQueryEvent.originalEvent,\n\t deltaY = e.wheelDeltaY,\n\t delta;\n\n\t if (e.wheelDelta) { // Webkit and IE\n\t if (deltaY === undefined || deltaY) { // IE does not have deltaY, thus always scroll (horizontal scrolling is treated as vertical)\n\t delta = e.wheelDelta;\n\t }\n\t } else if (e.detail && e.axis === e.VERTICAL_AXIS) { // Firefox and Opera\n\t delta = (-e.detail) * 10;\n\t }\n\n\t return delta;\n\t };\n\n\t kendo.throttle = function(fn, delay) {\n\t var timeout;\n\t var lastExecTime = 0;\n\n\t if (!delay || delay <= 0) {\n\t return fn;\n\t }\n\n\t var throttled = function() {\n\t var that = this;\n\t var elapsed = +new Date() - lastExecTime;\n\t var args = arguments;\n\n\t function exec() {\n\t fn.apply(that, args);\n\t lastExecTime = +new Date();\n\t }\n\n\t // first execution\n\t if (!lastExecTime) {\n\t return exec();\n\t }\n\n\t if (timeout) {\n\t clearTimeout(timeout);\n\t }\n\n\t if (elapsed > delay) {\n\t exec();\n\t } else {\n\t timeout = setTimeout(exec, delay - elapsed);\n\t }\n\t };\n\n\t throttled.cancel = function() {\n\t clearTimeout(timeout);\n\t };\n\n\t return throttled;\n\t };\n\n\n\t kendo.caret = function (element, start, end) {\n\t var rangeElement;\n\t var isPosition = start !== undefined;\n\n\t if (end === undefined) {\n\t end = start;\n\t }\n\n\t if (element[0]) {\n\t element = element[0];\n\t }\n\n\t if (isPosition && element.disabled) {\n\t return;\n\t }\n\n\t try {\n\t if (element.selectionStart !== undefined) {\n\t if (isPosition) {\n\t element.focus();\n\t var mobile = support.mobileOS;\n\t if(mobile.wp || mobile.android) {// without the timeout the caret is at the end of the input\n\t setTimeout(function() { element.setSelectionRange(start, end); }, 0);\n\t }\n\t else {\n\t element.setSelectionRange(start, end);\n\t }\n\t } else {\n\t start = [element.selectionStart, element.selectionEnd];\n\t }\n\t } else if (document.selection) {\n\t if ($(element).is(\":visible\")) {\n\t element.focus();\n\t }\n\n\t rangeElement = element.createTextRange();\n\n\t if (isPosition) {\n\t rangeElement.collapse(true);\n\t rangeElement.moveStart(\"character\", start);\n\t rangeElement.moveEnd(\"character\", end - start);\n\t rangeElement.select();\n\t } else {\n\t var rangeDuplicated = rangeElement.duplicate(),\n\t selectionStart, selectionEnd;\n\n\t rangeElement.moveToBookmark(document.selection.createRange().getBookmark());\n\t rangeDuplicated.setEndPoint('EndToStart', rangeElement);\n\t selectionStart = rangeDuplicated.text.length;\n\t selectionEnd = selectionStart + rangeElement.text.length;\n\n\t start = [selectionStart, selectionEnd];\n\t }\n\t }\n\t } catch(e) {\n\t /* element is not focused or it is not in the DOM */\n\t start = [];\n\t }\n\n\t return start;\n\t };\n\n\t kendo.compileMobileDirective = function(element, scope) {\n\t var angular = window.angular;\n\n\t element.attr(\"data-\" + kendo.ns + \"role\", element[0].tagName.toLowerCase().replace('kendo-mobile-', '').replace('-', ''));\n\n\t angular.element(element).injector().invoke([\"$compile\", function($compile) {\n\t $compile(element)(scope);\n\n\t if (!/^\\$(digest|apply)$/.test(scope.$$phase)) {\n\t scope.$digest();\n\t }\n\t }]);\n\n\t return kendo.widgetInstance(element, kendo.mobile.ui);\n\t };\n\n\t kendo.antiForgeryTokens = function() {\n\t var tokens = { },\n\t csrf_token = $(\"meta[name=csrf-token],meta[name=_csrf]\").attr(\"content\"),\n\t csrf_param = $(\"meta[name=csrf-param],meta[name=_csrf_header]\").attr(\"content\");\n\n\t $(\"input[name^='__RequestVerificationToken']\").each(function() {\n\t tokens[this.name] = this.value;\n\t });\n\n\t if (csrf_param !== undefined && csrf_token !== undefined) {\n\t tokens[csrf_param] = csrf_token;\n\t }\n\n\t return tokens;\n\t };\n\n\t kendo.cycleForm = function(form) {\n\t var firstElement = form.find(\"input, .k-widget\").first();\n\t var lastElement = form.find(\"button, .k-button\").last();\n\n\t function focus(el) {\n\t var widget = kendo.widgetInstance(el);\n\n\t if (widget && widget.focus) {\n\t widget.focus();\n\t } else {\n\t el.trigger(\"focus\");\n\t }\n\t }\n\n\t lastElement.on(\"keydown\", function(e) {\n\t if (e.keyCode == kendo.keys.TAB && !e.shiftKey) {\n\t e.preventDefault();\n\t focus(firstElement);\n\t }\n\t });\n\n\t firstElement.on(\"keydown\", function(e) {\n\t if (e.keyCode == kendo.keys.TAB && e.shiftKey) {\n\t e.preventDefault();\n\t focus(lastElement);\n\t }\n\t });\n\t };\n\n\t kendo.focusElement = function(element) {\n\t var scrollTopPositions = [];\n\t var scrollableParents = element.parentsUntil(\"body\")\n\t .filter(function(index, element) {\n\t var computedStyle = kendo.getComputedStyles(element, [\"overflow\"]);\n\t return computedStyle.overflow !== \"visible\";\n\t })\n\t .add(window);\n\n\t scrollableParents.each(function(index, parent) {\n\t scrollTopPositions[index] = $(parent).scrollTop();\n\t });\n\n\t try {\n\t //The setActive method does not cause the document to scroll to the active object in the current page\n\t element[0].setActive();\n\t } catch (e) {\n\t element[0].focus();\n\t }\n\n\t scrollableParents.each(function(index, parent) {\n\t $(parent).scrollTop(scrollTopPositions[index]);\n\t });\n\t };\n\n\t kendo.focusNextElement = function () {\n\t if (document.activeElement) {\n\t var focussable = $(\":kendoFocusable\");\n\t var index = focussable.index(document.activeElement);\n\n\t if(index > -1) {\n\t var nextElement = focussable[index + 1] || focussable[0];\n\t nextElement.focus();\n\t }\n\t }\n\t };\n\n\t kendo.trim = function(value) {\n\t if(!!value) {\n\t return value.toString().trim();\n\t } else {\n\t return \"\";\n\t }\n\t };\n\n\t kendo.getWidgetFocusableElement = function(element) {\n\t var nextFocusable = element.closest(\":kendoFocusable\"),\n\t widgetInstance = kendo.widgetInstance(element),\n\t target;\n\n\t if (nextFocusable.length) {\n\t target = nextFocusable;\n\t } else if (widgetInstance) {\n\t target = widgetInstance.options.name === 'Editor' ?\n\t $(widgetInstance.body) :\n\t widgetInstance.wrapper.find(\":kendoFocusable\").first();\n\t } else {\n\t target = element;\n\t }\n\n\t return target;\n\t };\n\n\t kendo.addAttribute = function(element, attribute, value) {\n\t var current = element.attr(attribute) || \"\";\n\n\t if (current.indexOf(value) < 0) {\n\t element.attr(attribute, (current + \" \" + value).trim());\n\t }\n\t };\n\n\t kendo.removeAttribute = function(element, attribute, value) {\n\t var current = element.attr(attribute) || \"\";\n\n\t element.attr(attribute, current.replace(value, \"\").trim());\n\t };\n\n\t kendo.toggleAttribute = function(element, attribute, value) {\n\t var current = element.attr(attribute) || \"\";\n\n\t if (current.indexOf(value) < 0) {\n\t kendo.addAttribute(element, attribute, value);\n\t } else {\n\t kendo.removeAttribute(element, attribute, value);\n\t }\n\t };\n\n\t kendo.matchesMedia = function(mediaQuery) {\n\t var media = kendo._bootstrapToMedia(mediaQuery) || mediaQuery;\n\t return support.matchMedia && window.matchMedia(media).matches;\n\t };\n\n\t kendo._bootstrapToMedia = function(bootstrapMedia) {\n\t return {\n\t \"xs\": \"(max-width: 576px)\",\n\t \"sm\": \"(min-width: 576px)\",\n\t \"md\": \"(min-width: 768px)\",\n\t \"lg\": \"(min-width: 992px)\",\n\t \"xl\": \"(min-width: 1200px)\"\n\t }[bootstrapMedia];\n\t };\n\n\t kendo.fileGroupMap = {\n\t audio: [\".aif\", \".iff\", \".m3u\", \".m4a\", \".mid\", \".mp3\", \".mpa\", \".wav\", \".wma\", \".ogg\", \".wav\", \".wma\", \".wpl\"],\n\t video: [\".3g2\", \".3gp\", \".avi\", \".asf\", \".flv\", \".m4u\", \".rm\", \".h264\", \".m4v\", \".mkv\", \".mov\", \".mp4\", \".mpg\",\n\t \".rm\", \".swf\", \".vob\", \".wmv\"],\n\t image: [\".ai\", \".dds\", \".heic\", \".jpe\", \"jfif\", \".jif\", \".jp2\", \".jps\", \".eps\", \".bmp\", \".gif\", \".jpeg\",\n\t \".jpg\", \".png\", \".ps\", \".psd\", \".svg\", \".svgz\", \".tif\", \".tiff\"],\n\t txt: [\".doc\", \".docx\", \".log\", \".pages\", \".tex\", \".wpd\", \".wps\", \".odt\", \".rtf\", \".text\", \".txt\", \".wks\"],\n\t presentation: [\".key\", \".odp\", \".pps\", \".ppt\", \".pptx\"],\n\t data: [\".xlr\", \".xls\", \".xlsx\"],\n\t programming: [\".tmp\", \".bak\", \".msi\", \".cab\", \".cpl\", \".cur\", \".dll\", \".dmp\", \".drv\", \".icns\", \".ico\", \".link\",\n\t \".sys\", \".cfg\", \".ini\", \".asp\", \".aspx\", \".cer\", \".csr\", \".css\", \".dcr\", \".htm\", \".html\", \".js\",\n\t \".php\", \".rss\", \".xhtml\"],\n\t pdf: [\".pdf\"],\n\t config: [\".apk\", \".app\", \".bat\", \".cgi\", \".com\", \".exe\", \".gadget\", \".jar\", \".wsf\"],\n\t zip: [\".7z\", \".cbr\", \".gz\", \".sitx\", \".arj\", \".deb\", \".pkg\", \".rar\", \".rpm\", \".tar.gz\", \".z\", \".zip\", \".zipx\"],\n\t \"disc-image\": [\".dmg\", \".iso\", \".toast\", \".vcd\", \".bin\", \".cue\", \".mdf\"]\n\t };\n\n\t kendo.getFileGroup = function(extension, withPrefix) {\n\t var fileTypeMap = kendo.fileGroupMap;\n\t var groups = Object.keys(fileTypeMap);\n\t var type = \"file\";\n\n\t if (extension === undefined || !extension.length) {\n\t return type;\n\t }\n\n\t for (var i = 0; i < groups.length; i += 1) {\n\t var extensions = fileTypeMap[groups[i]];\n\n\t if (extensions.indexOf(extension.toLowerCase()) > -1) {\n\t return withPrefix ? \"file-\" + groups[i] : groups[i];\n\t }\n\t }\n\n\t return type;\n\t };\n\n\t kendo.getFileSizeMessage = function(size) {\n\t var sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];\n\n\t if (size === 0) {\n\t return '0 Byte';\n\t }\n\n\t var i = parseInt(Math.floor(Math.log(size) / Math.log(1024)), 10);\n\t return Math.round(size / Math.pow(1024, i), 2) + ' ' + sizes[i];\n\t };\n\n\t kendo.selectorFromClasses = function(classes) {\n\t return \".\"+classes.split(\" \").join(\".\");\n\t };\n\n\t // Standardized Properties and CSS classes\n\n\t var themeColorValues = ['primary', 'secondary', 'tertiary', 'inherit', 'info', 'success', 'warning', 'error', 'dark', 'light', 'inverse'];\n\t var fillValues = ['solid', 'outline', 'flat'];\n\t var postitionValues = ['edge', 'outside', 'inside'];\n\t var shapeValues = ['circle', 'rectangle', 'rounded', 'dot', 'pill'];\n\t var sizeValues = [ ['small', 'sm'], ['medium', 'md'], ['large', 'lg'] ];\n\t var alignValues = [ ['top start', 'top-start'], ['top end', 'top-end'], ['bottom start', 'bottom-start'], ['bottom end', 'bottom-end'] ];\n\t var positionModeValues = [ 'fixed', 'static', 'sticky', 'absolute' ];\n\n\t kendo.propertyToCssClassMap = {};\n\n\t kendo.registerCssClass = function (propName, value, shorthand) {\n\t if (!kendo.propertyToCssClassMap[propName]) {\n\t kendo.propertyToCssClassMap[propName] = {};\n\t }\n\n\t kendo.propertyToCssClassMap[propName][value] = shorthand || value;\n\t };\n\n\t kendo.registerCssClasses = function (propName, arr) {\n\t for (var i = 0; i < arr.length; i++) {\n\t if (isArray(arr[i])) {\n\t kendo.registerCssClass(propName, arr[i][0], arr[i][1]);\n\t } else {\n\t kendo.registerCssClass(propName, arr[i]);\n\t }\n\t }\n\t };\n\n\t kendo.getValidCssClass = function (prefix, propName, value) {\n\t var validValue = kendo.propertyToCssClassMap[propName][value];\n\n\t if (validValue) {\n\t return prefix + validValue;\n\t }\n\t };\n\n\t kendo.registerCssClasses(\"themeColor\", themeColorValues);\n\t kendo.registerCssClasses(\"fill\", fillValues);\n\t kendo.registerCssClasses(\"postition\", postitionValues);\n\t kendo.registerCssClasses(\"shape\", shapeValues);\n\t kendo.registerCssClasses(\"size\", sizeValues);\n\t kendo.registerCssClasses(\"align\", alignValues);\n\t kendo.registerCssClasses(\"positionMode\", positionModeValues);\n\n\t // jQuery deferred helpers\n\n\t // influenced from: https://gist.github.com/fearphage/4341799\n\t kendo.whenAll = function(array) {\n\t var resolveValues = arguments.length == 1 && Array.isArray(array) ? array : Array.prototype.slice.call(arguments),\n\t length = resolveValues.length,\n\t remaining = length,\n\t deferred = $.Deferred(),\n\t i = 0,\n\t failed = 0,\n\t rejectContexts = Array(length),\n\t rejectValues = Array(length),\n\t resolveContexts = Array(length),\n\t value;\n\n\t function updateFunc (index, contexts, values) {\n\t return function() {\n\t if(values != resolveValues) {\n\t failed++;\n\t }\n\n\t deferred.notifyWith(\n\t contexts[index] = this,\n\t values[index] = Array.prototype.slice.call(arguments)\n\t );\n\n\t if (!(--remaining)) {\n\t deferred[(!failed ? 'resolve' : 'reject') + 'With'](contexts, values);\n\t }\n\t };\n\t }\n\n\t for (; i < length; i++) {\n\t if ((value = resolveValues[i]) && kendo.isFunction(value.promise)) {\n\t value.promise()\n\t .done(updateFunc(i, resolveContexts, resolveValues))\n\t .fail(updateFunc(i, rejectContexts, rejectValues));\n\t }\n\n\t else {\n\t deferred.notifyWith(this, value);\n\t --remaining;\n\t }\n\t }\n\n\t if (!remaining) {\n\t deferred.resolveWith(resolveContexts, resolveValues);\n\t }\n\n\t return deferred.promise();\n\t };\n\n\t // kendo.saveAs -----------------------------------------------\n\t (function() {\n\t function postToProxy(dataURI, fileName, proxyURL, proxyTarget) {\n\t var form = $(\"
\").attr({\n\t action: proxyURL,\n\t method: \"POST\",\n\t target: proxyTarget\n\t });\n\n\t var data = kendo.antiForgeryTokens();\n\t data.fileName = fileName;\n\n\t var parts = dataURI.split(\";base64,\");\n\t data.contentType = parts[0].replace(\"data:\", \"\");\n\t data.base64 = parts[1];\n\n\t for (var name in data) {\n\t if (data.hasOwnProperty(name)) {\n\t $('').attr({\n\t value: data[name],\n\t name: name,\n\t type: \"hidden\"\n\t }).appendTo(form);\n\t }\n\t }\n\n\t form.appendTo(\"body\").submit().remove();\n\t }\n\n\t var fileSaver = document.createElement(\"a\");\n\t var downloadAttribute = \"download\" in fileSaver && !kendo.support.browser.edge;\n\n\t function saveAsBlob(dataURI, fileName) {\n\t var blob = dataURI; // could be a Blob object\n\n\t if (typeof dataURI == \"string\") {\n\t var parts = dataURI.split(\";base64,\");\n\t var contentType = parts[0];\n\t var base64 = atob(parts[1]);\n\t var array = new Uint8Array(base64.length);\n\n\t for (var idx = 0; idx < base64.length; idx++) {\n\t array[idx] = base64.charCodeAt(idx);\n\t }\n\t blob = new Blob([array.buffer], { type: contentType });\n\t }\n\n\t navigator.msSaveBlob(blob, fileName);\n\t }\n\n\t function saveAsDataURI(dataURI, fileName) {\n\t if (window.Blob && dataURI instanceof Blob) {\n\t dataURI = URL.createObjectURL(dataURI);\n\t }\n\n\t fileSaver.download = fileName;\n\t fileSaver.href = dataURI;\n\n\t var e = document.createEvent(\"MouseEvents\");\n\t e.initMouseEvent(\"click\", true, false, window,\n\t 0, 0, 0, 0, 0, false, false, false, false, 0, null);\n\n\t fileSaver.dispatchEvent(e);\n\t setTimeout(function(){\n\t URL.revokeObjectURL(dataURI);\n\t });\n\t }\n\n\t kendo.saveAs = function(options) {\n\t var save = postToProxy;\n\n\t if (!options.forceProxy) {\n\t if (downloadAttribute) {\n\t save = saveAsDataURI;\n\t } else if (navigator.msSaveBlob) {\n\t save = saveAsBlob;\n\t }\n\t }\n\n\t save(options.dataURI, options.fileName, options.proxyURL, options.proxyTarget);\n\t };\n\t })();\n\n\t // kendo proxySetters\n\t kendo.proxyModelSetters = function proxyModelSetters(data) {\n\t var observable = {};\n\n\t Object.keys(data || {}).forEach(function(property) {\n\t Object.defineProperty(observable, property, {\n\t get: function() {\n\t return data[property];\n\t },\n\t set: function(value) {\n\t data[property] = value;\n\t data.dirty = true;\n\t }\n\t });\n\t });\n\n\t return observable;\n\t };\n\n\t kendo.getSeriesColors = function() {\n\t var seriesColorsTemplate = '
' +\n\t '
' +\n\t '
' +\n\t '
' +\n\t '
' +\n\t '
',\n\t series = $(seriesColorsTemplate),\n\t colors = [];\n\n\t series.appendTo($('body'));\n\n\t series.each(function(i, item) {\n\t colors.push($(item).css(\"background-color\"));\n\t });\n\n\t series.remove();\n\n\t return colors;\n\t };\n\n\t kendo.isElement = function(element) {\n\t return element instanceof Element || element instanceof HTMLDocument; // jshint ignore:line\n\t };\n\n\t // Kendo defaults\n\t (function() {\n\n\t kendo.defaults = kendo.defaults || {};\n\t kendo.setDefaults = function(key, value) {\n\t var path = key.split(\".\");\n\t var curr = kendo.defaults;\n\n\t key = path.pop();\n\n\t path.forEach(function(part) {\n\t if (curr[part] === undefined) {\n\t curr[part] = {};\n\t }\n\n\t curr = curr[part];\n\t });\n\n\t if (value.constructor === Object) {\n\t curr[key] = deepExtend({}, curr[key], value);\n\t } else {\n\t curr[key] = value;\n\t }\n\t };\n\n\t })();\n\n\t // Implement type() as it has been depricated in jQuery\n\t (function() {\n\t kendo.class2type = {};\n\n\t jQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\n\t function( _i, name ) {\n\t kendo.class2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n\t } );\n\n\t kendo.type = function(obj) {\n\t if ( obj == null ) {\n\t return obj + \"\";\n\t }\n\n\t // Support: Android <=2.3 only (functionish RegExp)\n\t return typeof obj === \"object\" || typeof obj === \"function\" ?\n\t kendo.class2type[Object.prototype.toString.call(obj)] || \"object\" :\n\t typeof obj;\n\t };\n\t }());\n\n\t})(jQuery, window);\n\n\treturn window.kendo;\n\n\t}, __webpack_require__(3));\n\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1059)))\n\n/***/ })\n\n/******/ });"],"sourceRoot":""}