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