{"version":3,"file":"kendo.core.min.js","names":["factory","define","amd","packageMetadata","name","productName","productCodes","publishDate","version","replace","licensingDocsUrl","$","window","undefined$1","Template","kendo","cultures","extend","each","isArray","Array","noop","math","Math","JSON","support","percentRegExp","formatRegExp","boxShadowRegExp","numberRegExp","FUNCTION","STRING","NUMBER","OBJECT","NULL","BOOLEAN","UNDEFINED","ARIA_LABELLEDBY","ARIA_LABEL","getterCache","setterCache","slice","cssPropertiesNames","noDepricateExtend","src","copyIsArray","copy","options","clone","arguments$1","arguments","target","i","length","deep","this","jQuery","isPlainObject","Class","proto","member","fn","base","that","subclass","init","apply","prototype","constructor","Object","_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","push","first","unshift","trigger","e","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","outerWidth","_outerWidth","outerHeight","_outerHeight","wrapper","parent","wrapperStyle","style","is","css","display","position","test","width","height","boxSizing","mozBoxSizing","webkitBoxSizing","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","a","c","charCodeAt","key","holder","k","v","partial","type","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","D","F","g","G","m","M","s","t","T","u","y","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","count","pmHour","UTC","matches","amDesignators","pmDesignators","hoursOffset","minutesOffset","lookAhead","getNumber","rg","substr","valueIdx","getIndexByName","lower","nameLength","subValue","matchLength","matchIdx","checkLiteral","year","month","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","closest","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","addEventListener","input","placeholder","propertyChangeEvent","types","setAttribute","cssFloat","stableSort","sorted","field","sort","b","matchesSelector","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","selector","nodeList","querySelectorAll","parentNode","matchMedia","pushState","history","hashChange","customElements","mobileChrome","crios","msPointers","MSPointerEvent","pointers","PointerEvent","kineticScrollNeeded","effects","prepareAnimationOptions","duration","complete","teardown","hide","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","add","directions","down","up","in","out","htmlEncode","unescape","decodeURIComponent","error","_","m1","m2","fromCharCode","isLocalUrl","url","expr","expression","safe","members","wrapExpression","exprToArray","fields","indexAccessor","getter","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","angular","dataSource","componentTypes","componentType","defaults","_hasBindingTarget","kendoBindingTarget","_tabindex","TABINDEX","tabindex","removeAttr","setOptions","_clearCssClasses","_setEvents","_applyCssClasses","force","getSize","currentSize","_size","_resize","dimensions","setSize","destroy","removeData","_destroy","_muteAngularRebind","_muteRebind","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","_angularItems","cmd","elements","items","dataItem","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","filter","widgetsArray","makeArray","widgetInstance","progress","container","leftRight","webkitCorrection","containerScrollLeft","mask","scrollTop","opacity","loading","prependTo","remove","plugin","register","widgetEntry","args","method","ContainerNullObject","nullObject","MobileWidget","autoApplyNS","kendoDestroy","view","viewElement","viewHasNativeScrolling","useNativeScrolling","eq","focusable","isTabIndexNotNaN","nodeName","disabled","href","pseudos","visible","parents","appLevelNativeScrolling","application","themes","views","touchScroller","useNative","Scroller","kendoMobileScroller","suites","elementData","editorToolbar","onResize","setTimeout","unbindResize","off","attrValue","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","kendoFocusable","MOUSE_EVENTS","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","isInDateRange","msValue","msMin","msMax","isInTimeRange","isToday","nextDay","previousDay","toUtcTime","MS_PER_HOUR","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","x","client","wheelDeltaY","jQueryEvent","delta","deltaY","wheelDelta","detail","axis","VERTICAL_AXIS","throttle","delay","timeout","lastExecTime","throttled","elapsed","caret","rangeElement","isPosition","selectionStart","focus","setSelectionRange","selectionEnd","selection","createTextRange","collapse","moveStart","moveEnd","select","rangeDuplicated","duplicate","moveToBookmark","createRange","getBookmark","setEndPoint","text","compileMobileDirective","scope","injector","invoke","$compile","$$phase","$digest","antiForgeryTokens","tokens","csrf_token","csrf_param","cycleForm","form","firstElement","lastElement","keyCode","shiftKey","focusElement","scrollTopPositions","scrollableParents","parentsUntil","setActive","focusNextElement","focussable","getWidgetFocusableElement","nextFocusable","addAttribute","attribute","removeAttribute","toggleAttribute","matchesMedia","mediaQuery","media","_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","registerPrefix","propertyToCssClassMap","getValidCssClass","whenAll","resolveValues","remaining","deferred","Deferred","failed","rejectContexts","rejectValues","resolveContexts","updateFunc","contexts","notifyWith","done","fail","resolveWith","postToProxy","dataURI","fileName","proxyURL","proxyTarget","action","contentType","base64","appendTo","submit","fileSaver","downloadAttribute","saveAsBlob","blob","atob","Uint8Array","Blob","buffer","msSaveBlob","saveAsDataURI","URL","createObjectURL","download","createEvent","initMouseEvent","dispatchEvent","revokeObjectURL","saveAs","save","forceProxy","proxyModelSetters","observable","forEach","defineProperty","dirty","getSeriesColors","series","colors","item","isElement","HTMLDocument","setDefaults","path","curr","DEBUG_KENDO_TEMPLATES","class2type","_i","setScriptKey"],"sources":["kendo.core.js"],"mappings":"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","sourcesContent":["(function (factory) {\n typeof define === 'function' && define.amd ? define(['jquery'], factory) :\n factory();\n})((function () {\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', 'KENDOUI', 'KENDOUICOMPLETE'],\n publishDate: 0,\n version: '2023.1.117'.replace(/^\\s+|\\s+$/g, ''),\n licensingDocsUrl: 'https://docs.telerik.com/kendo-ui/intro/installation/using-license-code'\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 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 = \"2023.1.117\".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 = /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[\"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 = 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\") {\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\") {\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 parseExact(value, format, culture, strict) {\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 = numberRegExp[size] || new RegExp('^\\\\d{1,' + size + '}'),\n match = value.substr(valueIdx, size).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) {\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);\n if (date) {\n return date;\n }\n }\n\n return date;\n }\n\n kendo.parseDate = function(value, formats, culture) {\n return internalParseDate(value, formats, culture, false);\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) {\n var percentage,\n outerWidth = kendo._outerWidth,\n outerHeight = kendo._outerHeight,\n parent = element.parent(),\n windowOuterWidth = outerWidth(window);\n\n parent.removeClass(\"k-animation-container-sm\");\n\n if (!parent.hasClass(\"k-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-animation-container\")\n .attr(\"role\", \"region\")\n .css({\n width: width,\n height: height\n }));\n parent = element.parent();\n\n if (percentage) {\n element.css({\n width: \"100%\",\n height: \"100%\",\n boxSizing: \"border-box\",\n mozBoxSizing: \"border-box\",\n webkitBoxSizing: \"border-box\"\n });\n }\n } else {\n wrapResize(element, autosize);\n }\n\n if (windowOuterWidth < outerWidth(parent)) {\n parent.addClass(\"k-animation-container-sm\");\n\n wrapResize(element, autosize);\n }\n\n return parent;\n }\n\n function wrapResize(element, autosize) {\n var percentage,\n outerWidth = kendo._outerWidth,\n outerHeight = kendo._outerHeight,\n wrapper = element.parent(\".k-animation-container\"),\n wrapperStyle = wrapper[0].style;\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 wrapper.css({\n width: autosize ? outerWidth(element) + 1 : outerWidth(element),\n height: outerHeight(element),\n boxSizing: \"content-box\",\n mozBoxSizing: \"content-box\",\n webkitBoxSizing: \"content-box\"\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\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 var FIELD_REGEX = /\\[(?:(\\d+)|['\"](.*?)['\"])\\]|((?:(?!\\[.*?\\]|\\.).)+)/g;\n var fields = [];\n\n expression.replace(FIELD_REGEX, function (_, index, indexAccessor, field) {\n fields.push(kendo.isPresent(index) ? index : (indexAccessor || field));\n return undefined$1;\n });\n\n return fields;\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 validatePackage();\n\n that.element = kendo.jQuery(element).handler(that);\n\n that.angular(\"init\", options);\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 angular: function() {},\n\n _muteAngularRebind: function(callback) {\n this._muteRebind = true;\n\n callback.call(this);\n\n this._muteRebind = false;\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 // Angular consumes these.\n dataItems: function() {\n return this.dataSource.flatView();\n },\n\n _angularItems: function(cmd) {\n var that = this;\n that.angular(cmd, function() {\n return {\n elements: that.items(),\n data: $.map(that.dataItems(), function(dataItem) {\n return { dataItem: dataItem };\n })\n };\n });\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 appLevelNativeScrolling: function() {\n return kendo.mobile.application && kendo.mobile.application.options && kendo.mobile.application.options.useNativeScrolling;\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 // kendoEditorToolbar is not a public plugin, thus it does not exist in kendo.ui.roles.\n // Therefore, this is needed in order to be resized when placed in Kendo Window.\n if (role === \"editortoolbar\") {\n var editorToolbar = element.data(\"kendoEditorToolbar\");\n if (editorToolbar) {\n return editorToolbar;\n }\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 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 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.compileMobileDirective = function(element, scope) {\n var angular = window.angular;\n\n element.attr(\"data-\" + kendo.ns + \"role\", element[0].tagName.toLowerCase().replace('kendo-mobile-', '').replace('-', ''));\n\n angular.element(element).injector().invoke([\"$compile\", function($compile) {\n $compile(element)(scope);\n\n if (!/^\\$(digest|apply)$/.test(scope.$$phase)) {\n scope.$digest();\n }\n }]);\n\n return kendo.widgetInstance(element, kendo.mobile.ui);\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', 'horizontal', 'vertical' ];\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 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-resize-\";\n } else if (propName === \"overflow\") {\n prefix = \"k-overflow-\";\n } else {\n prefix = widgetProperties[PREFIX];\n }\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 // 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 })();\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() {},setScriptKey: function() {} };\n\n window.KendoLicensing = {\n setScriptKey: KendoLicensing.setScriptKey\n };\n\n function validatePackage() {\n KendoLicensing.validatePackage(packageMetadata);\n }\n\n })(jQuery, window);\n\n}));\n"]}