{"version":3,"sources":["kendo.ui.core.js"],"names":["f","define","$","window","undefined","Class","compilePart","part","stringPart","split","join","replace","first","charAt","rest","substring","pad","number","digits","end","length","zeros","getShadows","element","shadow","css","kendo","support","transitions","radius","match","boxShadowRegExp","blur","math","max","left","right","bottom","wrap","autosize","percentage","width","height","percentWidth","percentHeight","forceWidth","browser","outerWidth","_outerWidth","outerHeight","_outerHeight","parent","windowOuterWidth","removeClass","hasClass","wrapResize","style","percentRegExp","test","is","addClass","boxSizing","mozBoxSizing","webkitBoxSizing","msie","floor","version","zoom","children","wrapper","wrapperStyle","display","position","deepExtend","destination","i","arguments","deepExtendOne","source","property","propValue","propType","propInit","destProp","ObservableArray","data","LazyObservableArray","DataSource","HierarchicalDataSource","OBJECT","constructor","Array","RegExp","isFunction","ArrayBuffer","UNDEFINED","Date","getTime","clone","testRx","agent","rxs","dflt","rx","hasOwnProperty","toHyphens","str","g","toLowerCase","toCamelCase","strMatch","g1","toUpperCase","getComputedStyles","properties","computedStyle","styles","document","defaultView","getComputedStyle","each","idx","value","getPropertyValue","currentStyle","size","isScrollable","className","indexOf","overflow","scrollLeft","el","isRtl","webkit","mozila","mozilla","browserVersion","e","safari","scrollWidth","clientWidth","Math","abs","obj","key","result","getOffset","type","positioned","offset","sign","top","pointers","msPointers","pageYOffset","documentElement","scrollTop","pageXOffset","parseEffects","input","effects","this","fx","Element","prepareAnimationOptions","options","duration","reverse","complete","STRING","BOOLEAN","extend","init","noop","teardown","hide","completeCallback","animate","instance","queue","promise","toggleClass","classes","add","htmlEncode","ampRegExp","ltRegExp","gtRegExp","quoteRegExp","aposRegExp","unescape","template","decodeURIComponent","error","_","m1","m2","String","fromCharCode","parseInt","parseOption","option","dashRegExp","getAttribute","ns","numberRegExp","parseFloat","jsonRegExp","jsonFormatRegExp","Function","parseOptions","role","templateRegExp","html","containmentComparer","a","b","contains","resizableWidget","widget","inArray","attr","focusable","isTabIndexNotNaN","nodeName","disabled","href","visible","expr","pseudos","parents","addBack","filter","kendoJQuery","selector","context","fn","Template","preventDefault","isDefaultPrevented","Observable","argumentNameRegExp","encodeRegExp","escapedCurlyRegExp","curlyRegExp","escapedSharpRegExp","sharpRegExp","directions","eventTarget","wrapExpression","localUrlRe","Widget","DataBoundWidget","ContainerNullObject","MobileWidget","MOUSE_EVENTS","EXCLUDE_BUST_CLICK_SELECTOR","MouseEventNormalizer","eventMap","getEventMap","eventRegEx","on","rootjQuery","animationFrame","animationQueue","cultures","isArray","proxy","JSON","formatRegExp","FUNCTION","NUMBER","NULL","getterCache","setterCache","slice","noDepricateExtend","src","copyIsArray","copy","name","target","deep","jQuery","isPlainObject","proto","member","base","that","subclass","apply","prototype","Object","_initOptions","_defaultPrevented","_events","bind","eventName","handlers","one","original","handler","events","eventNames","handlersIsFunction","unbind","push","unshift","trigger","sender","call","splice","paramName","useWithBlock","render","compile","parts","settings","argumentName","functionBody","_slotCount","Error","format","quote","string","escapable","lastIndex","c","meta","charCodeAt","toString","holder","k","v","partial","mind","gap","toJSON","rep","isFinite","indent","\b","\t","\n","\f","\r","\"","\\","valueOf","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","Number","Boolean","stringify","replacer","space","","findCulture","culture","numberFormat","getCulture","current","formatDate","date","calendar","calendars","standard","days","months","patterns","dateFormatRegExp","minutes","getDate","namesAbbr","getDay","names","getMonth","getFullYear","getHours","getMinutes","getSeconds","getMilliseconds","AM","PM","getTimezoneOffset","formatNumber","decimal","precision","pattern","literals","symbol","isCurrency","isPercent","customPrecision","formatAndPrecision","negative","integer","fraction","integerLength","fractionLength","replacement","ch","hasGroup","hasNegativeFormat","decimalIndex","sharpIndex","zeroIndex","hasZero","hasSharp","percentIndex","currencyIndex","startZeroIndex","start","exp","rounded","POINT","decimals","EMPTY","toLocaleString","standardFormatRegExp","exec","currency","percent","toExponential","round","groupInteger","literalRegExp","quoteChar","literal","PLACEHOLDER","SHARP","ZERO","COMMA","commaRegExp","lastIndexOf","EN","objectToString",",",".","groupSize","abbr","namesShort","d","D","F","G","m","M","s","t","T","u","y","Y","/",":","firstDay","twoDigitYearMax","cultureName","newGroupSize","groupSizes","shift","toFixed","min","fmt","values","index","placeholderFormat","_extractFormat","_activeElement","activeElement","_round","includeMargin","outOfRange","designatorPredicate","designator","mapDesignators","designators","map","adjustDST","hours","setHours","lowerArray","array","lowerLocalInfo","localInfo","newLocalInfo","parseExact","strict","count","pmHour","UTC","matches","amDesignators","pmDesignators","hoursOffset","minutesOffset","hasTime","lookAhead","getNumber","rg","substr","valueIdx","getIndexByName","lower","nameLength","subValue","matchLength","matchIdx","checkLiteral","year","month","day","seconds","milliseconds","defaultYear","_lowerDays","_lowerMonths","longTimeZoneRegExp","shortTimeZoneRegExp","isNaN","setFullYear","parseMicrosoftFormatOffset","getDefaultFormats","cultureFormats","formatIdx","FORMATS_SEQUENCE","STANDARD_FORMATS","formats","concat","internalParseDate","tzoffset","dateRegExp","offsetRegExp","timezone","convert","nonBreakingSpaceRegExp","exponentRegExp","2","3","4","parseDate","parseExactDate","percentSymbol","table","docStyle","transforms","elementProto","mobileOS","documentMode","chrome","mobileChrome","_scrollbar","scrollbar","refresh","div","createElement","cssText","innerHTML","body","appendChild","offsetWidth","removeChild","closest","tbodyInnerHtml","touch","HTMLElement","hasHW3D","WebKitCSSMatrix","cssFlexbox","lowPrefix","prefix","hasTransitions","event","devicePixelRatio","screenWidth","screen","availWidth","innerWidth","screenHeight","availHeight","innerHeight","detectOS","ua","minorVersion","os","notAndroidPhone","agentRxs","wp","fire","android","iphone","ipad","meego","webos","blackberry","playbook","windows","tizen","sailfish","ffos","osRxs","ios","flat","formFactorRxs","tablet","browserRxs","omini","omobile","firefox","mobilesafari","ie","navigator","device","majorVersion","flatVersion","cordova","PhoneGap","appMode","standalone","location","protocol","userAgent","wpDevicePixelRatio","hasNativeScrolling","delayedClick","mouseAndTouchPresent","detectBrowser","edge","opera","detectClipboardAccess","commands","queryCommandSupported","cut","paste","clipboard","zoomLevel","ie11WidthCorrection","docEl","scrollHeight","clientHeight","cssBorderSpacing","borderSpacing","cssClass","docElement","eventCapture","addEventListener","placeholder","propertyChangeEvent","types","setAttribute","cssFloat","stableSort","threshold","sorted","field","sort","matchesSelector","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","nodeList","querySelectorAll","parentNode","matchMedia","pushState","history","hashChange","customElements","crios","MSPointerEvent","PointerEvent","kineticScrollNeeded","down","up","in","out","enabled","dequeue","disable","promiseShim","enable","animatedPromise","kendoStop","clearQueue","gotoEnd","stop","kendoAnimate","kendoAddClass","kendoRemoveClass","kendoToggleClass","toggle","touches","originalEvent","changedTouches","elementFromPoint","clientX","clientY","callback","mousedown","mouseup","mousemove","mousecancel","click","resize","members","widgets","_widgetRegisteredCallbacks","ui","mobile","dataviz","drawing","spreadsheet","messages","keys","INSERT","DELETE","BACKSPACE","TAB","ENTER","ESC","LEFT","UP","RIGHT","DOWN","END","HOME","SPACEBAR","PAGEUP","PAGEDOWN","F2","F10","F12","NUMPAD_PLUS","NUMPAD_MINUS","NUMPAD_DOT","isLocalUrl","url","expression","safe","getter","setter","accessor","get","set","guid","random","id","roleSelector","directiveSelector","directives","selectors","triggeredByInput","tagName","onWidgetRegistered","len","logToConsole","message","console","suppressLog","log","dataSource","props","angular","componentTypes","componentType","defaults","_hasBindingTarget","kendoBindingTarget","_tabindex","TABINDEX","tabindex","removeAttr","setOptions","_setEvents","force","getSize","currentSize","_size","_resize","dimensions","setSize","destroy","removeData","_destroy","_muteAngularRebind","_muteRebind","dataItems","flatView","_angularItems","cmd","elements","items","dataItem","domElement","offsetHeight","notify","initWidget","roles","fullPath","widgetKeyRegExp","widgetKey","nodeType","isEmptyObject","rolesFromNamespaces","namespaces","find","widgetsArray","makeArray","widgetInstance","progress","container","leftRight","webkitCorrection","containerScrollLeft","mask","opacity","loading","prependTo","remove","plugin","register","widgetEntry","args","method","nullObject","autoApplyNS","kendoDestroy","view","viewElement","viewHasNativeScrolling","useNativeScrolling","eq","appLevelNativeScrolling","application","themes","views","touchScroller","useNative","Scroller","kendoMobileScroller","suites","editorToolbar","elementData","onResize","setTimeout","unbindResize","off","attrValue","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","kendoFocusable","setupMouseMute","mouseTrap","bustClick","captureMouse","stopPropagation","muteMouse","clearTimeout","mouseTrapTimeoutID","unMuteMouse","move","cancel","MSPointerEnter","MSPointerLeave","orig","fix","special","delegateType","bindType","handle","ret","related","relatedTarget","handleObj","origType","applyEventMap","keyDownHandler","kendoKeydown","preventKendoKeydown","keyDownCallBack","pop","search","touchstart","touchend","ruleToDate","rule","targetDay","ourDay","time","cache","getUTCDay","setUTCDate","findRule","utcTime","rules","zone","grep","from","to","findZone","zones","until","zoneRules","zoneAndRule","info","fromOffset","toOffset","diff","fromLocalOffset","toLocalOffset","tempToOffset","toLocalDate","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec","Sun","Mon","Tue","Wed","Thu","Fri","Sat","setDayOfWeek","dir","setDate","dayOfWeek","firstDayOfMonth","lastDayOfMonth","last","timeOffset","moveDateToWeekStart","weekStartDay","addDays","calcWeekInYear","firstWeekInYear","newDate","diffInMS","MS_PER_DAY","weekInYear","prevWeekDate","nextWeekDate","weekNumber","toUtcTime","toInvariantTime","isInTimeRange","msValue","msMin","msMax","isInDateRange","setTime","ignoreDST","difference","MS_PER_MINUTE","today","isToday","staticDate","nextDay","previousDay","MS_PER_HOUR","stripWhitespace","iterator","child","createNodeIterator","NodeFilter","SHOW_TEXT","node","FILTER_ACCEPT","FILTER_REJECT","nextNode","referenceNode","textContent","trim","childNodes","nodeValue","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","queueAnimation","runNextAnimation","parseQueryStringParams","queryString","params","paramParts","elementUnderCursor","x","client","wheelDeltaY","jQueryEvent","delta","deltaY","wheelDelta","detail","axis","VERTICAL_AXIS","throttle","delay","timeout","throttled","lastExecTime","elapsed","caret","rangeElement","rangeDuplicated","selectionStart","selectionEnd","isPosition","focus","setSelectionRange","selection","createTextRange","collapse","moveStart","moveEnd","select","duplicate","moveToBookmark","createRange","getBookmark","setEndPoint","text","compileMobileDirective","scope","injector","invoke","$compile","$$phase","$digest","antiForgeryTokens","tokens","csrf_token","csrf_param","cycleForm","form","firstElement","lastElement","keyCode","shiftKey","focusElement","scrollTopPositions","scrollableParents","parentsUntil","setActive","focusNextElement","focussable","nextElement","getWidgetFocusableElement","nextFocusable","addAttribute","attribute","removeAttribute","toggleAttribute","matchesMedia","mediaQuery","media","_bootstrapToMedia","bootstrapMedia","xs","sm","md","lg","xl","fileGroupMap","audio","video","image","txt","presentation","programming","pdf","config","zip","disc-image","getFileGroup","extension","withPrefix","extensions","fileTypeMap","groups","getFileSizeMessage","sizes","pow","selectorFromClasses","whenAll","updateFunc","contexts","resolveValues","failed","deferred","notifyWith","remaining","Deferred","rejectContexts","rejectValues","resolveContexts","done","fail","resolveWith","postToProxy","dataURI","fileName","proxyURL","proxyTarget","action","contentType","base64","appendTo","submit","saveAsBlob","blob","atob","Uint8Array","Blob","buffer","msSaveBlob","saveAsDataURI","URL","createObjectURL","fileSaver","download","createEvent","initMouseEvent","dispatchEvent","revokeObjectURL","downloadAttribute","saveAs","save","forceProxy","proxyModelSetters","observable","forEach","defineProperty","dirty","setDefaults","path","curr","amd","a1","a2","a3","absoluteURL","pathPrefix","regEx","host","hashDelimiter","bang","locationHash","stripRoot","root","fixHash","fixBang","CHANGE","BACK","SAME","CHECK_URL_INTERVAL","BROKEN_BACK_NAV","hashStrip","HistoryAdapter","back","forward","replaceLocation","PushStateAdapter","navigate","title","replaceState","normalize","pathname","change","normalizeCurrent","fixedUrl","hash","hashBang","HashAdapter","_id","_interval","setInterval","clearInterval","History","_started","adapter","createAdapter","historyLength","locations","silent","_navigate","backCalled","decode","_checkUrl","newLength","navigatingInExisting","prev","backButtonPressed","namedParamReplace","optional","routeToRegExp","route","ignoreCase","escapeRegExp","optionalParam","namedParam","splatParam","stripUrl","INIT","ROUTE_MISSING","Route","_callback","queryStringParams","_back","worksWith","Router","routes","_urlChangedProxy","_sameProxy","_backProxy","initEventObject","sameProxy","_same","backProxy","urlChangedProxy","_urlChanged","same","touchDelta","touch1","touch2","x1","y1","x2","y2","dx","dy","center","distance","sqrt","getTouches","currentTarget","api","identifier","pointerId","withEachUpEvent","downEvents","now","OS","invalidZeroEvents","DEFAULT_MIN_HOLD","CLICK_DELAY","DEFAULT_THRESHOLD","PRESS","HOLD","SELECT","START","MOVE","CANCEL","TAP","DOUBLETAP","RELEASE","GESTURESTART","GESTURECHANGE","GESTUREEND","GESTURETAP","THRESHOLD","mouse","pointer","ENABLE_GLOBAL_SURFACE","TouchAxis","_updateLocationData","startLocation","velocity","timeStamp","timeDelta","initialDelta","Touch","userEvents","touchInfo","useClickAsTap","initialTouch","pressEvent","_clicks","supportDoubleTap","_moved","_finished","press","_holdTimeout","minHold","_trigger","_tap","_clickTimeout","_hold","preventMove","_shouldNotMove","_withinIgnoreThreshold","UserEvents","dispose","_start","endTime","activeTouches","skip","isMoved","startTime","xDelta","yDelta","defaultAction","surfaceElement","preventIfMovingProxy","_maxTouches","multiTouch","allowSelection","captureUpIfMoved","fastTap","eventNS","surface","global","ownerDocument","pressed","touchAction","preventDragEvent","preventIfMoving","_isMoved","_destroyed","removeEventListener","_disposeAll","capture","_isMultiTouch","_apiCall","_maxTouchesReached","_select","which","_move","_eachTouch","_end","_click","pageX","pageY","methodName","matchingTouch","dict","defaultThreshold","MAX_DOUBLE_TAP_DISTANCE","eventProxy","_triggerTouch","gestureEventProxy","hold","tap","gesturestart","gesturechange","gestureend","enableSwipe","minXDelta","maxYDelta","maxDuration","doubleTapTimeout","lastTap","_dragstart","_swipestart","_swipemove","direction","toOdataFilter","useOdataFour","operator","logic","filters","odataFilters","odataFiltersVersionFour","stripMetadata","hex16","createBoundary","createDelimeter","boundary","close","NEWLINE","createCommand","transport","item","httpVerb","command","transportUrl","commandPrefix","getOperationHeader","changeset","changeId","header","getOperationContent","content","DOUBLELINE","getOperations","collection","skipContent","requestBody","processCollection","colection","getBoundary","createBatchRequest","colections","batch","batchURL","headers","Content-Type","updated","destroyed","created","parseBatchResponse","responseText","changeBody","status","code","marker","jsonModel","responseMarkers","markerIndex","collections","models","passed","parse","neq","gt","gte","lt","lte","doesnotcontain","endswith","startswith","isnull","isnotnull","isnullorempty","isnotnullorempty","isempty","isnotempty","mappers","pageSize","page","useVersionFour","$filter","orderby","order","$orderby","$skip","take","$top","defaultDataType","read","dataType","schemas","odata","results","total","transports","jsonp","update","create","parameterMap","$inlinecount","$format","odata-v4","$count","ajax","success","response","responses","XmlDataReader","idField","xmlParse","model","errors","serialize","modelBase","Model","fields","xpathToMember","modelInstance","evaluate","record","_parse","xml","parseDOM","parsedNode","attributes","attributeCount","firstChild","nextSibling","intermediateResult","tree","parseXML","raw","readers","eventHandler","_notifyChange","ownKeys","ignoreObjectKeys","getOwnPropertyNames","prop","objectKeys","getPrototypeOf","equal","xtype","ytype","getFieldByName","fieldName","Query","normalizeSort","descriptor","descriptors","sortFields","sorts","sortObject","normalizeOperator","operatorMap","normalizeFilter","compareDescriptor","f1","f2","normalizeDescriptor","fieldComparer","compareFilters","expr1","expr2","filters1","filters2","normalizeAggregate","expressions","normalizeGroup","compare","skipItemSorting","aggregates","normalizeGroupWithoutCompare","anyGroupDescriptorHasCompare","groupDescriptors","groupValueComparer","calculateAggregate","accumulator","state","aggr","functionName","aggregate","functions","isNumber","val","isDate","serializeRecords","getters","originalFieldNames","fieldNames","originalName","setters","convertRecords","convertGroup","hasSubgroups","wrapDataAccess","originalFunction","converter","wrapDataAccessBase","fillLastGroup","originalGroup","newGroup","currOriginal","currentNew","mergeGroups","dest","group","flatGroups","indexFunction","groupIndex","itemIndex","groupsLength","indexFn","flattenGroups","at","wrapGroupItems","eachGroupItems","func","replaceInRanges","ranges","replaceInRange","replaceWithObservable","serverGrouping","viewIndex","removeModel","uid","indexOfPristineModel","_defaultId","indexOfModel","comparer","fieldNameFromModel","convertFilterDescriptorsField","convertDescriptorsField","inferSelect","firstField","secondField","optgroup","label","specified","inferTable","fieldIndex","cells","cell","empty","tbody","tBodies","rows","fieldCount","dataMethod","_data","_attachBubbleHandlers","inferList","list","textChild","textField","urlField","spriteCssClassField","imageUrlField","_loaded","hasChildren","ObservableObject","parsers","defaultValues","Comparer","StableComparer","operators","LocalTransport","RemoteTransport","Cache","DataReader","Transport","Node","Buffer","BatchBuffer","ASCENDING","CREATE","READ","UPDATE","DESTROY","SYNC","GET","ERROR","REQUESTSTART","PROGRESS","REQUESTEND","crud","identity","o","wrapAll","serializeFunctions","json","object","omitChangeEvent","howMany","thisArg","reduce","reduceRight","every","some","Symbol","_parent","_handlers","shouldSerialize","_set","paths","composite","isSetPrevented","isObservableArray","isDataSource","boolean","default","_initializers","dirtyFields","editable","accept","isNew","functionFields","nullable","defaultValue","localeCompare","combine","comparers","asc","valueA","valueB","__position","desc","textOp","impl","ignore","accentFoldingFiltering","toLocaleLowerCase","op","getMatchRegexp","esc","doesnotstartwith","n","doesnotendwith","doesnotmatch","filterExpr","and","or","fieldFunctions","operatorFunctions","==","equals","isequalto","equalto","!=","ne","notequals","isnotequalto","notequalto","notequal","<","islessthan","lessthan","less","<=","le","islessthanorequalto","lessthanequal",">","isgreaterthan","greaterthan","greater",">=","isgreaterthanorequalto","greaterthanequal","ge","notsubstringof","toArray","range","inPlace","orderBy","orderByDescending","compiled","predicate","allData","groupPaging","groupAllData","itemCount","subgroupCount","groupBy","groupValue","currentValue","_sortForGrouping","_sortGroups","sum","average","process","customGroupSort","query","groupDescriptorsWithoutCompare","normalizedSort","groupDescriptorsWithoutSort","filterCallback","groupDescriptor","setup","parameters","operation","_store","clear","store","inmemory","schema","dataFunction","groupsFunction","serializeFunction","serializeGetters","_dataAccessFunction","fromName","_wrapDataAccessBase","_map","_prefetch","_pristineData","_ranges","_view","_pristineTotal","_pageSize","_page","_sort","_sortFields","_filter","_group","_aggregate","_total","_groupPaging","_groupsState","_shouldDetachObservableParents","pushCreate","_pushCreate","pushUpdate","_pushUpdate","pushDestroy","_pushDestroy","offlineStorage","_storage","getItem","localStorage","setItem","reader","_detachObservableParents","_observe","_online","serverSorting","serverPaging","serverFiltering","serverAggregates","inPlaceSort","online","sync","resolve","offlineData","_isServerGrouped","_isServerGroupPaged","_isGroupPaged","_push","_readData","_flatData","useRanges","getByUid","_getByUid","_storeData","_addRange","_process","_observeView","insert","_createNewModel","_wrapInEmptyGroup","_insertModelInRange","pushInsert","pushed","autoSync","pristine","rangeSpan","_getCurrentRangeSpan","pristineData","_updatePristineForModel","_removeItems","removePristine","shouldRemovePristine","found","_eachItem","_removePristineForModel","hasGroups","_removeModelFromRanges","promises","_sendSubmit","_send","when","then","_accept","_syncEnd","_change","cancelChanges","_cancelModel","_changesCanceled","_markOfflineUpdatesAsDirty","__state__","hasChanges","serverGroup","_handleCustomErrors","_executeOnPristineForModel","_eachPristineItem","_pristineForModel","_modelCanceled","_submit","reject","_promise","converted","_params","_queueRequest","isPrevented","_dequeueRequest","_readAggregates","replaceSubset","itemIds","j","_serverGroupsTotal","_aggregateResult","_skip","endless","_changeHandler","updatePristine","timestamp","_timeStamp","outerStart","outerEnd","_sortRanges","_groupsFlat","_appendToGroupsFlat","_updateOuterRangesLength","_getGroupByUid","xhr","errorThrown","_requestInProgress","_pending","_shouldWrap","arrayType","_updateTotalForAction","_calculateAggregates","_take","currentRangeStart","_clearEmptyGroups","_queryProcess","dataToAggregate","_setView","_setFilterTotal","_mergeState","_currentRangeStart","moreItemsCount","remote","_hasExpandedSubGroups","_findGroupedRange","itemsLength","hasNotRequestedItems","groupCount","itemsToSkip","taken","getGroupSubGroupCount","_fetchingGroupItems","skipped","getGroupItems","includeParents","excludeHeader","currentItems","subgroups","_composeItemsFilter","findSubgroups","_timeout","_groupItemsSuccessHandler","includeSubGroupCount","_subGroupCountSuccessHandler","totalField","temp","_updateRangePristineData","_currentRequestTimeStamp","_skipRequestsInProgress","indexOfCurrentGroup","currentGroup","dataLength","indexes","rangesLength","_containsSubGroup","_cloneGroup","subgroup","currentSubGroup","filterTotal","setDefaultValue","fetch","_query","next","totalPages","_pageableQueryOptions","getGroupsFlat","groupsTotal","includeExpanded","_calculateGroupsTotal","itemsField","ignoreState","_groupsTotal","countGroupRange","_emptyAggregates","ceil","inRange","_findRange","lastRange","firstItemUid","enableRequestsInProgress","pageSkip","_originalPageSkip","_originalSize","_adjustPageSkip","_groupRangeExists","_rangeExists","prefetch","_processRangeData","skipIdx","takeIdx","startIndex","endIndex","rangeData","rangeEnd","processed","flatData","prevRangeEnd","currentDataLength","groupMapOptions","isGroupPaged","startField","endField","_mergeGroups","_getRangesMismatch","mismatch","prevGroup","eventData","paging","sorting","filtering","_omitPrefetch","_prefetchSuccessHandler","_multiplePrefetch","prevRange","_getPrevRange","_getNextRange","availableItemsCount","_removeModelFromRange","_updateRangesLength","rangeLength","mismatchFound","mismatchLength","lengthDifference","transportOptions","hasChildrenObject","childrenField","childrenOptions","_childrenOptions","_initChildren","_updateChildrenField","append","loaded","level","_childrenLoaded","load","_matchFilter","_hierarchicalFilter","_markHierarchicalQuery","_updateHierarchicalFilter","_find","_dataSource","viewSize","disablePrefetch","_prefetching","_reset","_syncWithDataSource","setViewSize","_recalculate","itemPresent","dataOffset","prefetchThreshold","midPageThreshold","nextMidRange","nextPageThreshold","nextFullRange","pullBackThreshold","previousMidRange","previousFullRange","_goToRange","nextRange","syncDataSource","prefetchOffset","expanding","_expanding","_syncPending","_firstItemUid","batchSize","batchBuffer","endreached","prefetching","prefetched","reset","dataSourceBinding","bindingName","Binder","bindings","_dataBinding","dataBinding","_dataBound","dataBound","_itemChange","itemChange","bindElement","_ns","_parents","removedItems","unbindElementTree","all","addedItems","hds","addedDataItems","multiselect","dropdowntree","Select","MultiSelect","DropDownTree","treeview","retrievePrimitiveValues","dataValueField","bindingTargetForRole","WidgetBindingTarget","parseBindings","token","colonIndex","keyValueRegExp","createBindings","binding","childrenCopy","unbindElement","whiteSpaceRegExp","valueField","valueUpdate","valuePrimitive","autoBind","BindingTarget","Binding","TemplateBinding","EventBinding","dom","destroyWidget","bindingTarget","deleteExpando","destroyWidgets","unbindElementChildren","namespace","TypedBinder","arraySplice","binders","VALUE","SOURCE","EVENTS","CHECKED","CSS","dependencies","_access","dependency","currentSource","parsedValue","_parseValue","readonly","dataFormat","invisible","_initChange","cloneNode","reference","insertBefore","checked","selectedIndex","selected","valueIndex","sourceValue","optionIndex","optionValue","check","_range","_valueIsObservableObject","_valueIsObservableArray","_source","valueLength","sourceItem","dataTextField","isObservableObject","cascadeFrom","listView","bound","_preselect","old","removeIndex","newValue","oldValues","selectedNode","nonPrimitiveValues","_isMultipleSelection","_getAllChecked","newValues","selectedValue","gantt","_isBound","scheduler","grid","badge","arr","addLength","oldLength","shifted","shiftedLength","toDestroy","hasValue","hasSource","hasEvents","hasChecked","hasCss","widgetBinding","specificBinders","applyBinding","binder","observableHierarchy","recursiveRead","parseInteger","parseCSS","propertyName","acc","strip3DTransforms","transformProps","transform2d","normalizeCSS","lowerKey","isTransformed","transformation","cssValues","TRANSFORM","animationProperty","transform","computed","NONE","matrix3dRegExp","translateXRegExp","atan2","capitalize","word","createEffect","definition","effectClass","Effect","opt1","opt2","opt3","theDirection","createToggleEffect","defaultStart","defaultEnd","IN_OUT","startValue","_startValue","endValue","_endValue","shouldHide","_shouldHide","prepare","_direction","startDataValue","startDataValueIsSet","_reverse","clipInHalf","vertical","HEIGHT","WIDTH","CLIPS","curProxy","EffectSet","FOUR_DIRECTIONS","TRANSFER_START_STATE","ROTATIONS","RESTORE_OVERFLOW","IGNORE_TRANSITION_EVENT_SELECTOR","Animation","Transition","scaleProperties","scale","scalex","scaley","scale3d","translateProperties","translate","translatex","translatey","translate3d","hasZoom","cssParamsRegExp","oldEffectsRegExp","singleEffectRegExp","unitRegExp","transform2units","rotate","skew","cssPrefix","BLANK","PX","AUTO","HIDDEN","ORIGIN","ABORT_ID","OVERFLOW","TRANSLATE","POSITION","COMPLETE_CALLBACK","TRANSITION","BACKFACE","PERSPECTIVE","DEFAULT_PERSPECTIVE","TRANSFORM_PERSPECTIVE","transition","modifier","horizontal","stopQueue","transformValue","step","elem","cur","exclusive","ease","mirror","redirectedEffect","resolved","$1","$2","effect","effectBody","timeoutID","stopTransitionCalled","stopTransition","oldKeys","speeds","merge","uniqueSort","unique","taskKeys","retainPosition","restore","run","jdx","childrenLength","effectName","setReverse","addRestoreProperties","restoreCallback","effectSet","parsedEffects","useTransition","show","multiple","single","isFixed","originalPosition","dX","dY","marginLeft","marginTop","_additionalEffects","play","additional","_duration","compositeRun","_complete","divisor","tmp","previous","previousDivisor","slideIn","margin","origin","setLength","realLength","outerBox","box","innerBox","currentScale","fillScale","transformOrigin","_container","rotation","zIndex","_clipInHalf","clip","face","_face","temporary","reverseDirection","faceClone","backClone","staticPage","turningPage","transformStyle","_before","_after","transitionClass","_previous","_transitionClass","beforeTransition","afterTransition","_both","_element","_containerClass","containerClass","completeProxy","isAbsolute","originalOverflow","both","_tickProxy","_tick","tick","onEnd","onCancel","timePassed","startDate","moveTo","movable","initial","_easeProxy","moveAxis","easeOutExpo","easeOutBack","inner","outer","fitScale","parseTransition","transitionRegExp","SCRIPT","TRANSITION_START","TRANSITION_END","SHOW","HIDE","ATTACH","DETACH","sizzleErrorRegExp","bodyRegExp","LOAD_START","LOAD_COMPLETE","SHOW_START","SAME_VIEW_REQUESTED","VIEW_SHOW","VIEW_TYPE_DETERMINED","AFTER","classNames","stretchedView","footer","View","renderOnInit","_createElement","wrapInSections","_renderSections","_wrap","_evalTemplate","evalTemplate","_fragments","detachOnHide","detachOnDestroy","notInitialized","_eachFragment","ViewClone","triggerBeforeShow","triggerBeforeHide","showStart","showEnd","hideEnd","detach","purge","fragments","getElementById","contents","replaceWith","_wrapper","_createContent","_createHeader","_createFooter","ccontentElements","contentSelector","contentElement","Layout","containers","_createContainer","showIn","ViewContainer","Fragment","attach","running","after","locationID","previousEntry","theTransition","transitionData","ViewEngine","sandbox","_hideViews","rootView","layouts","viewContainer","showView","remoteViewURLPrefix","_findViewElement","reload","_createView","urlPath","wrapInner","_locate","$angular","_findViewElementById","_createSpaView","_createMobileView","defaultTransition","loader","getLayout","getLayoutProxy","modelScope","viewOptions","NS","FLOATINGLABELCONTAINER","FOCUSED","STATEDISABLED","NOCLICKCLASS","FloatingLabel","_editable","isJQueryPromise","isNativePromise","hub","signalr","callbacks","_crud","server","resolveRules","resolvers","validator","ruleResolvers","numberOfDecimalDigits","parseHtml","parseHTML","searchForMessageContainer","invalidMsgRegExp","isLabelFor","SUMMARYTEMPLATE","Validator","INVALIDMSG","INVALIDINPUT","VALIDINPUT","VALIDATIONSUMMARY","INVALIDLABEL","MESSAGEBOX","ARIAINVALID","ARIADESCRIBEDBY","emailRegExp","urlRegExp","INPUTSELECTOR","CHECKBOXSELECTOR","NUMBERINPUTSELECTOR","BLUR","NAME","FORM","NOVALIDATE","VALIDATE","VALIDATE_INPUT","patternMatcher","matcher","hasAttribute","allowSubmit","validateOnInit","validateAttributeSelector","_errorTemplate","errorTemplate","_summaryTemplate","validationSummary","_inputSelector","_checkboxSelector","_errors","_attachEvents","_isValidated","_validateOnInit","validate","required","email","dateCompare","checkbox","raise","validateOnBlur","_allowSubmit","stopImmediatePropagation","_checkElement","validateInput","inputs","invalid","isValid","showValidationSummary","valid","lbl","messageText","messageLabel","wasValid","lblId","parentElement","prevElement","inputWrap","inputLabel","errorId","_checkValidity","_findMessageContainer","_extractMessage","_decorateMessageContainer","insertAfter","_inputWrapper","_inputLabel","_associateMessageContainer","hideMessages","_disassociateMessageContainers","labels","hideValidationSummary","locators","messageLocators","getElementsByTagName","locate","decorate","ruleKey","nonDefaultMessage","customMessage","_getInputNames","_errorsByName","inputNames","_renderSummary","_summaryClick","link","errorsList","summary","numericCssPropery","within","containerBoundaries","minX","minY","maxX","maxY","checkTarget","targets","areas","theTarget","theFilter","targetLen","areaLen","targetElement","destroyDroppable","groupName","droppables","scrollableViewPort","scrollableRoot","$window","findScrollableParent","autoScrollVelocity","mouseX","mouseY","rect","AUTO_SCROLL_AREA","lastDropTarget","Movable","DropTarget","DropTargetArea","Draggable","draggables","dropTargets","dropAreas","KEYUP","DRAGSTART","DRAG","DRAGEND","DRAGCANCEL","HINTDESTROYED","DRAGENTER","DRAGLEAVE","DROP","TapCapture","_press","_release","attachEvent","captureNext","cancelCapture","PaneDimension","forcedEnabled","measure","scrollSize","makeVirtual","virtual","_virtualMin","_virtualMax","virtualSize","outOfBounds","forceEnabled","getTotal","rescale","scaledTotal","minScale","centerOffset","PaneDimensions","forcedMinScale","maxScale","newScale","centerCoordinates","PaneAxis","dimension","dragMove","resistance","translateAxis","Pane","elastic","gesture","coordinates","offsetX","offsetY","previousGesture","previousCenter","scaleDelta","scaleWith","TRANSFORM_STYLE","webkitTransformOrigin","_saveCoordinates","by","scaleTo","newCoordinates","draggable","dropTarget","_over","_out","_drop","dropped","destroyGroup","_cache","_activated","_drag","_cancel","_afterEndHandler","_afterEnd","_captureEscape","cursorOffset","holdToDrag","autoScroll","cancelHold","_updateHint","boundaries","hintOffset","hint","_shouldIgnoreTarget","ignoreSelector","currentTargetOffset","scopeTarget","scopeFrom","cursorElement","_elementUnderCursor","_cursorElement","_scrollableParent","_lastEvent","_processMovement","_scrollCompenstation","_scrollVelocity","_scrollInterval","_withDropTarget","_autoScroll","yIsScrollable","xIsScrollable","isRootNode","yInBounds","xInBounds","compensation","initialTarget","utils","SNAPBACK_DURATION","SCROLLBAR_OPACITY","FRICTION","VELOCITY_MULTIPLIER","MAX_VELOCITY","OUT_OF_BOUNDS_FRICTION","ANIMATED_SCROLLER_PRECISION","RELEASECLASS","REFRESHCLASS","PULL","RESIZE","SCROLL","MOUSE_WHEEL_ID","ZoomSnapBack","tapCapture","DragInertia","freeze","_moveTo","paneAxis","_snapBack","velocityMultiplier","friction","snapBack","AnimatedScroller","_updateCoordinates","setCoordinates","setCallback","ScrollBar","elementSize","scrollMovable","alwaysVisible","paneSize","sizeRatio","visibility","avoidScrolling","pane","zoomSnapBack","animatedScroller","_native","prepend","scrollElement","fixedContainer","velocityX","velocityY","horizontalSwipe","originatedFromFixedContainer","verticalSwipe","scrollTo","mousewheelScrolling","pulled","_initAxis","_wheelEnd","_wheel","_wheelY","pullToRefresh","_initPullToRefresh","_wheelScroll","ctrlKey","_wheelTimeout","pullOffset","visibleScrollHints","pullTemplate","releaseTemplate","refreshTemplate","contentResized","_scale","zoomOut","animatedScrollTo","pullHandled","refreshHint","hintContainer","yinertia","xinertia","_paneChange","_dragEnd","scrollBar","HORIZONTAL","VERTICAL","RESIZEEND","Resizable","orientation","_positionMouse","_position","_sizingDom","draggableElement","drag","dragcancel","dragstart","dragend","_stop","_max","hintSize","_initialElementPosition","_min","_initialMousePosition","_maxPosition","_minPosition","maxPosition","minPosition","currentPosition","invalidClass","resizing","targetPosition","containsOrEqualTo","defaultHint","defaultPlaceholder","BEFORE_MOVE","ACTION_SORT","ACTION_REMOVE","ACTION_RECEIVE","DEFAULT_FILTER","MISSING_INDEX","Sortable","_createDraggable","connectWith","cursor","moveOnDragEnter","_dragcancel","_dragend","draggedElement","_placeholder","draggableEvent","before","_setCursor","_resetCursor","targetCenter","offsetDelta","sibling","getSibling","_findTarget","axisDelta","_movementByAxis","_getElementCenter","appendToBottom","_movePlaceholder","appendAfterHidden","_isFloating","connectedList","connectedListEventData","draggedIndex","placeholderIndex","oldIndex","newIndex","getKendoSortable","_findElementUnderCursor","has","sortable","_isEmpty","_isLastHidden","_searchConnectedTargets","sortableInstance","connected","_isCursorAfterLast","lastItemOffset","lastItem","cursorPosition","_originalCursorType","_cursorStylesheet","isFloating","isTable","isHorizontalFlex","_items","not","collision","elementPosition","Selectable","ARIASELECTED","SELECTED","ACTIVE","SELECTABLE","UNSELECT","UNSELECTING","supportEventDelegation","_marquee","_lastActive","aria","inputSelectors","_isElement","metaKey","whichCode","buttonCode","button","_allowSelection","selectRange","_firstSelectee","_unselect","_notify","_downTarget","currentElement","useAllItems","_selectElement","_invalidateSelectables","toSelect","selectElement","preventNotify","resetTouchEvents","continuousItems","selectable","asLowerString","iconTemplate","svgIconTemplate","Badge","_content","_appearance","cutoutBorder","fill","icon","Infinity","align","small","medium","large","shape","themeColor","_classNames","_text","_template","_themeColor","_shape","_sizes","_fill","_cutoutBorder","_align","_visible","_updateClassNames","keepClassNames","sizeAbbr","iconTemplateFunction","_icon","color","Button","CLICK","MOUSEDOWN","MOUSEUP","MOUSEOUT","KBUTTON","KBUTTONICON","KBUTTONICONTEXT","DISABLED","DISABLEDSTATE","FOCUSEDSTATE","SELECTEDSTATE","BUTTON_DEFAULTS","iconClass","spriteCssClass","imageUrl","_badge","iconElement","_focus","_blur","_keydown","_removeActive","_addActive","_isNativeButton","span","img","isEmpty","err","badgeEelement","badgeOptions","numeric","selectOption","wrapClassName","FIRST","PREV","NEXT","LAST","SIZE","KEYDOWN","MAX_VALUE","Pager","pageSizes","pageItems","sizeClassName","_createDataSource","linkTemplate","selectTemplate","currentPageTemplate","numericSelectItemTemplate","_refreshHandler","downEvent","previousNext","_numericWrap","_numericSelect","of","allPages","itemsPerPage","DropDownList","kendoDropDownList","_refreshClick","_numericSelectChange","_resizeHandler","_getWidthSizeClass","numericItemTemplate","buttonCount","responsive","morePages","setDataSource","reminder","hasAll","selectAll","selectHtml","collapsedTotal","_collapsedTotal","tabKeyTrapNS","focusableNodesSelector","TabKeyTrap","OPEN","CLOSE","DEACTIVATE","ACTIVATE","CENTER","TOP","BOTTOM","ABSOLUTE","BODY","LOCATION","VISIBLE","EFFECTS","ACTIVEBORDER","ACTIVEBORDERREGEXP","ACTIVECHILDREN","DOCUMENT_ELEMENT","WINDOW","Popup","parentPopup","collisions","anchor","_hovered","scrollArea","animation","open","_animationClose","_mousedownProxy","_mousedown","_resizeProxy","toggleTarget","toggleEvent","viewport","copyAnchorStyles","modal","adjustSize","_hideDirClass","_closing","_toggleResize","fixed","flipped","_openAnimation","_showDirClass","_location","dirClass","skipEffects","openEffects","closeEffects","popup","ev","_resizeTimeout","_scrollableParents","_fit","viewPortSize","output","_flip","anchorSize","boxSize","siblingContainer","parentZIndex","viewportOffset","viewportWidth","viewportHeight","pos","anchorParent","offsets","flipPos","elementHeight","wrapperHeight","isWindow","origins","positions","siblings","offsetParent","appendToOffset","verticalOrigin","horizontalOrigin","verticalPosition","horizontalPosition","anchorOffset","anchorWidth","anchorHeight","trap","_keepInTrap","removeTrap","shouldTrap","sortedElements","_focusableElements","_sortFocusableElements","_nextFocusable","tabIndex","attrName","contentWindow","_haveSelectionRange","elementType","KNOTIFICATION","KICLOSE","KHIDING","INFO","SUCCESS","WARNING","WRAPPER","TEMPLATE","SAFE_TEMPLATE","Notification","_compileTemplates","templates","_guid","_isRtl","_compileStacking","stacking","pinned","hideOnClick","allowHideAfter","autoHideAfter","kendoTemplate","_compiled","templateId","_defaultCompiled","_safeCompiled","_getCompiled","defaultCompiled","paddings","paddingTop","paddingRight","paddingBottom","paddingLeft","horizontalAlignment","_popupOrigin","_popupPosition","_popupPaddings","_attachPopupEvents","attachClick","_hidePopup","closeIcon","attachDelay","_showPopup","openPopup","_triggerHide","deactivate","_togglePin","pin","win","_attachStaticEvents","_hideStatic","_showStatic","initializedNotifications","insertionMethod","getNotifications","defaultArgs","typeIcon","showText","warning","openedNotifications","guidElements","newOptions","restoreTitle","restoreTitleAttributeForElement","saveTitleAttributeForElement","saveTitleAttributes","DOCUMENT","ARIAIDSUFFIX","DESCRIBEDBY","CONTENTLOAD","KCONTENTFRAME","IFRAMETEMPLATE","POSITIONS","REVERSE","DIRCLASSES","DIMENSIONS","DEFAULTCONTENT","Tooltip","_documentKeyDownHandler","_documentKeyDown","_isShownOnMouseEnter","_showOn","showOn","_isShownOnClick","_mouseenter","autoHide","_mouseleave","_isShownOnFocus","showAfter","hideAfter","callout","_show","_appendContent","iframe","contentOptions","showIframe","_ajaxRequest","_initPopup","activate","ariaId","_positionCallout","_offset","arrow","_closeButtonClick","_closePopup","elementOffset","offsetAmount","isTopLeft","isFlipped","marginRule","toggleActive","STATE_ACTIVE","actionSheetWrap","preventClick","findFocusableSibling","candidate","OVERFLOW_ANCHOR","components","Item","ToolBarButton","OverflowButton","ButtonGroup","ToolBarButtonGroup","OverflowButtonGroup","ToolBarSplitButton","OverflowSplitButton","ToolBarSeparator","OverflowSeparator","ToolBarSpacer","TemplateItem","OverflowTemplateItem","Group","ToolBar","TOOLBAR","BUTTON","OVERFLOW_BUTTON","TOGGLE_BUTTON","BUTTON_GROUP","SPLIT_BUTTON","SEPARATOR","SPACER_CLASS","SPACER","POPUP","RESIZABLE_TOOLBAR","STATE_DISABLED","STATE_HIDDEN","GROUP_START","GROUP_END","PRIMARY","ARIA_DISABLED","ARIA_PRESSED","ICON","ICON_PREFIX","BUTTON_ICON","BUTTON_ICON_TEXT","LIST_CONTAINER","SPLIT_BUTTON_ARROW","OVERFLOW_CONTAINER","FIRST_TOOLBAR_VISIBLE","LAST_TOOLBAR_VISIBLE","TOGGLE","OVERFLOW_OPEN","OVERFLOW_CLOSE","OVERFLOW_NEVER","OVERFLOW_AUTO","OVERFLOW_ALWAYS","OVERFLOW_HIDDEN","OPTION_LIST_SUFFIX","KENDO_UID_ATTR","toolbar","overflowAnchor","overflowContainer","registerComponent","addOverflowAttr","addUidAttr","addIdAttr","addOverflowIdAttr","hidden","overflowHidden","isEnabled","twin","splitContainerId","resizable","useButtonTag","primary","togglable","addToGroup","clickHandler","toggleHandler","propagate","getParentGroup","isChild","_addGraphics","hasIcon","showIcon","createButtons","buttonConstructor","buttons","buttonGroup","mainButton","arrowButton","popupElement","createMenuButtons","createPopup","_navigatable","main","splitButton","kendoPopup","li","altKey","menuButtons","rootUid","adjustPopupWidth","computedWidth","fontFamily","min-width","separator","_groups","isMobile","_renderOverflow","overflowUserEvents","_toggleOverflow","_shrink","_buttonClick","release","_toggleOverflowAnchor","tool","overflowTool","component","itemClasses","overflowTemplate","_getItem","toolbarItem","overflowItem","isResizable","buttonGroupInstance","getSelectedFromGroup","horizontalDirection","isComplexTool","hasVisibleChildren","paddingEnd","splitContainer","urlTarget","isSplitButtonArrow","_toggle","lastHasFocus","firstHasFocus","isOnlyOverflowAnchor","lastItemNotOverflowAnchor","isFirstTool","prevFocusable","isOverflowAnchor","_getPrevFocusable","_preventNextFocus","_getNextElement","directionNumber","searchIndex","focusableItem","elementToFocus","prevElements","prevAll","containerWidth","_stretch","_markVisibles","_childrenWidth","childrenWidth","commandElement","visibleCommands","_hideItem","hiddenCommands","_showItem","itemOuterWidth","overflowItems","toolbarItems","visibleOverflowItems","visibleToolbarItems","unifyType","getSelectedOption","mapChangedItems","itemsToMatch","selectedLength","changed","unchanged","isValidFilterExpr","removeFiltersForField","STATIC_LIST_NS","StaticList","percentageUnitsRegex","ID","HOVER","LOADING","GROUPHEADER","ITEMSELECTOR","LABELIDPART","CASCADE","FOCUS","FOCUSOUT","HIDDENCLASS","isIE","isIE8","quotRegExp","alternativeNames","ComboBox","MultiColumnComboBox","List","_isSelect","ul","aria-hidden","_listMousedown","columns","_columnsHeader","_header","_noData","_footer","_accessors","_initValue","footerTemplate","headerTemplate","noDataTemplate","noData","_renderFooter","_renderNoData","_focused","_angularElement","colGroup","row","currentColumn","columnsHeaderTemplate","currentWidth","currentWidthInt","widthStyle","columnsHeader","_listOptions","currentOptions","changeEventOption","_listChange","listBoundHandler","_listBound","_activateItem","_deactivateItem","groupTemplate","fixedGroupTemplate","_initList","listOptions","selectedItemChange","VirtualList","_setListValue","_updateSelectionState","filterInput","_isFilterEnabled","_hideClear","_clear","_showClear","_clearValue","_clearText","_accessor","_customOption","enforceMinLength","highlightFirst","_clearFilter","_filterSource","newExpression","dataSourceState","isMultiColumnFiltering","filterFields","resetPageSettings","removed","_clearFilterExpressions","_pushFilterExpression","_cascading","setDSFilter","filtersToRemove","_toggleNoData","_toggleHeader","groupHeader","_allowOpening","_old","_ignoreCase","widgetOptions","fromFilter","_buildExpression","_open","_clearButton","clearTitle","clearButton","_inputValue","_typingTimeout","minLength","_state","_emptySearch","_searchByWord","_unbindDataSource","_form","_resetHandler","selectedDataItems","_value","_aria","suggest","_ariaLabel","labelId","focusedElm","inputElm","inputId","labelElm","ariaLabel","ariaLabelledBy","_generateLabelId","_userTriggered","_isValueChanged","_valueBeforeCascade","_oldIndex","isFiltered","_typing","typing","_enable","_dataValue","_offsetHeight","_height","offsetTop","popups","footerHeight","_openHandler","_adjustListWidth","borderLeftWidth","borderRightWidth","autoWidth","minWidth","whiteSpace","_closeHandler","_focusItem","noFocusedItem","scrollToIndex","_calculateGroupPadding","padding","_calculatePopupHeight","_calculateColumnsHeaderPadding","_refreshScroll","enableYScroll","overflowX","overflowY","_resizePopup","_popup","_makeUnselectable","_toggleHover","preventFocus","touchEnabled","MSPointers","_prevent","_triggerCascade","_cascadeTriggered","_cascadedValue","userTriggered","_triggerChange","_requestStartHandler","_requestEndHandler","_errorHandler","requireValueMapper","valueMapper","_initial","_initialIndex","_current","_parentWidget","_cascadeSelect","_cascadeValue","_accessorInput","_accessorSelect","_custom","_syncValueAndText","custom","_hideBusy","_busy","_arrowIcon","_showBusy","_request","_requestEnd","_firstItem","focusFirst","_lastItem","focusLast","_nextItem","focusNext","_prevItem","focusPrev","_getNormalizedDataItem","isIndex","hasOptionLabel","optionLabel","getElementIndex","dataItemByIndex","_getNormalizedSelectCandidate","normalizedCandidate","moveIndex","selectCandidate","activeFilter","shouldTrigger","isVirtual","_fetch","_get","_focusElement","focusout","scrollWith","_fetchData","hasItems","_options","dataText","dataValue","htmlElement","formId","_cascade","cascade","_cascadeHandlerProxy","_cascadeHandler","_cascadeFilterRequests","_selectedValue","_toggleCascadeOnFocus","valueBeforeCascade","_clearSelection","_cascadeChange","filterValue","cascadeFromParentField","cascadeFromField","currentHandler","_touchHandlers","_optionID","_selectedIndices","_dataItems","_values","_getter","_templates","_onScroll","_scrollId","_renderHeader","_fixedHeader","startY","endY","tapPosition","_touchTriggered","_triggerClick","_render","scroll","itemOffsetTop","itemOffsetHeight","contentScrollTop","contentOffsetHeight","bottomDistance","_getValues","_valueGetter","hasCandidate","focusIndex","skipUpdate","_skipUpdate","indices","filtered","singleSelection","selectedIndices","uiSelectedIndices","added","_deselectFiltered","_deselect","_valueComparer","removeAt","setValue","_valueDeferred","_valueIndices","_valueExpr","normalized","_valueType","_dataItemPosition","valueExpr","removedIndices","templateText","_normalizeIndices","newIndices","_firstVisibleItem","itemHeight","lastChild","previousSibling","isGrouped","visibleItem","_renderItem","notFirstItem","hasColumns","isLastGroupedItem","_renderColumns","dataContext","_selected","_lastDSFilter","skipUpdateOnBind","isItemChange","_bound","modular","minYear","maxYear","build","weekNumberBuild","isWeekColumnVisible","cellsPerRow","perRow","otherMonth","weekNumberTemplate","cellTemplate","emptyCellTemplate","otherMonthTemplate","otherMonthCellTemplate","createDate","disableDates","OTHERMONTH","isInRange","date1","date2","year1","getToday","DATE","restrictValue","shiftArray","multiplier","daysBetweenTwoDates","endDate","fromDateUTC","endDateUTC","addDaysToArray","numberOfDays","fromDate","mousetoggle","MOUSEENTER","prevent","dateObject","getCalendarInfo","depth","extractFormat","MONTH","dates","makeUnselectable","addClassToViewContainer","currentView","isEqualDatePart","value1","value2","isEqualMonth","getDisabledExpr","createDisabledExpr","convertDatesArray","disabledDates","searchExpression","isEqualDate","oldValue","toDateObject","transitionOrigin","KEYDOWN_NS","MIN","SLIDE","CENTURY","NAVIGATE","OTHERMONTHCLASS","OUTOFRANGE","TODAY","CELLSELECTOR","CELLSELECTORVALID","WEEKCOLUMNSELECTOR","FOCUS_WITH_NS","MOUSEENTER_WITH_NS","MOUSELEAVE","PREVARROW","NEXTARROW","ARIA_SELECTED","ARIA_LABEL","decade","century","HEADERSELECTOR","CLASSIC_HEADER_TEMPLATE","MODERN_HEADER_TEMPLATE","Calendar","_selectable","_viewWrapper","hasFooter","_focusView","focusOnNav","_cellID","_class","_selectDates","_index","_addClassProxy","_active","_cell","todayString","toDateString","_cellByDate","_removeClassProxy","selectDates","weekColumnHeader","classic","linksSelector","contentClasses","modern","_destroySelectable","_today","_title","_table","_bindTable","_option","navigateToPast","navigateToFuture","navigateUp","navigateDown","future","viewWrapper","_oldTable","_changeView","_animate","_visualizeSelectedDatesInView","validSelectedDates","datesUnique","_validateValue","selectedDates","selectableOptions","_onSelect","_onRelatedTarget","eventArgs","_toggleSelection","_cellsBySelector","_addSelectedCellsToArray","_rangeSelection","currentCell","toDateCell","daysDifference","toDate","currentDateIndex","_dateInView","firstDateInView","lastDateInView","_isNavigatable","cellIndex","isDisabled","focusedDate","_keyboardToggleSelection","_nextNavigatable","_keyboardRangeSelection","navigatableDate","active","_horizontal","viewWidth","float","margin-left","unwrap","_vertical","disabledDate","actionAttr","_todayClick","firstDayCurrentMonth","isBigger","isTodayDisabled","firstVisibleDay","calendarInfo","tzOffsetBefore","resultDATE","tzOffsetDiff","navigateUrl","showHeader","hasUrl","currentCalendar","firstDayIdx","shortNames","linkClass","dateString","currentDate","month1","month2","year2","setMonth","viewsEnum","approximateStringMatching","oldText","oldFormat","newText","deletedSymbol","oldTextSeparator","knownSymbols","customDateTime","INPUT_EVENT_NAME","STATEDEFAULT","STATEINVALID","READONLY","DateInput","insidePicker","weekday","hour","minute","second","dayperiod","_unbindInput","_bindInput","_updateElementValue","_formElement","_dateTime","getDateObject","_oldValue","stringAndFromat","toPair","_oldText","_format","_paste","_input","_mouseUp","_scroll","navigationOnly","difSym","newEvent","stateInvalid","blinkInvalid","parsePart","_selectSegment","_blinkInvalidTimeout","_selectNearestSegment","returnValue","initialValue","interval","keycode","modifyPart","begin","initDate","initFormat","initCulture","initMessages","generateMatcher","retFormat","returnsFormat","setExisting","typedMonthPart","typedDayPeriodPart","sampleFormat","placeholders","mins","formatResult","getValue","newMonth","setMinutes","setSeconds","currentChar","lastDateOfMonth","newHours","monthNames","newYear","newMinutes","newSeconds","parseFormats","DatePicker","DIV","SPAN","DEFAULT","HOVEREVENTS","MAX","ARIA_READONLY","ARIA_EXPANDED","ARIA_HIDDEN","DateView","omitPopup","dateDiv","_dateViewID","_calendar","_setOptions","popupHovered","selectIsClicked","handled","_initialOptions","dateView","_updateARIA","aria-expanded","aria-owns","autocomplete","_createDateInput","_update","ARIATemplate","dateInput","_dateInput","_dateIcon","eventType","dateChanged","valueUpdated","textFormatted","aria-controls","formattedValue","isSameType","optionsValue","_ariaTemplate","lastFrom","isPrimitive","getItemCount","listScreens","getDefaultItemHeight","lineHeight","mockList","bufferSizes","opposite","listValidator","downThreshold","upThreshold","lastScrollTop","scrollCallback","syncList","reorder","webkitTransform","map2","arr1","arr2","ITEMCHANGE","reshift","itemTemplate","placeholderTemplate","renderColumns","GROUPITEM","isActivePromise","VIRTUALLIST","CONTENT","LIST","HEADER","VIRTUALITEM","ITEM","HEIGHTCONTAINER","LISTBOUND","VIRTUAL_LIST_NS","_fetching","_selectedDataItems","_selectedIndexes","_rangesList","_promisesList","_renderItems","_triggerListBound","oppositeBuffer","mapValueTo","_selectProxy","_clean","_deferValueSet","mute","_selectingValue","_highlightSelectedItems","_getElementByDataItem","_mute","_createList","_forcePrefetch","shouldClear","_prefetchByValue","_checkValuesOrder","_removedAddedIndexes","dataView","_dataView","valueGetter","forSelection","mapValueToIndex","mapValueToDataItem","_getIndecies","deferredRange","defs","low","high","pages","existingRange","isEmptyList","_activeDeferred","_getSkip","_findDataItem","_getRange","triggerEvent","_getElementByIndex","_focusedIndex","_getElementLocation","_screenHeight","heightContainer","initialIndices","isAlreadySelected","prefetchStarted","_selectDeferred","_deselectCurrentValues","_listCreated","_lastScrollTop","hasData","setScreenHeight","yPosition","yDownPostion","screenEnd","_generateItems","minHeight","_saveInitialRanges","_buildValueGetter","_setHeight","getList","_listItems","_whenChanged","_reorderList","currentHeight","padHeight","lastRequestedRange","lastRangeStart","rangeStart","flatGroup","groupLength","_getterDeferred","firstItemIndex","_indexConstraint","firstVisibleGroup","fixedGroupText","currentVisibleGroup","firstVisibleDataItemIndex","firstVisibleDataItem","_itemMapper","listType","currentIndex","_currentGroup","_getDataItemsCollection","_listIndex","theValidator","theNew","currentOffset","list2","range2","_bufferSizes","buffers","elementIndex","selectedIndexes","removedindexesCounter","_deselectSingleItem","oldSkip","_clickHandler","firstItem","indexOfWordAtCaret","caretIdx","wordAtCaret","replaceWordAtCaret","defaultSeparator","words","placeholderSupported","AUTOCOMPLETEVALUE","AutoComplete","_loader","_keypress","_search","_prev","aria-haspopup","_resetFocusItemHandler","_resetFocusItem","_toggleCloseVisibility","_progressHandler","_separator","_unifySeparators","_last","wordIndex","isActive","_touchScroller","_muted","_selectValue","_defaultSeparator","itemSelected","_loading","DOMelement","assign","normalizeIndex","sameCharsOnly","character","nsFocusEvent","CLICKEVENTS","STATE_FILTER","STATE_ACCEPT","MSG_INVALID_OPTION_LABEL","_focusHandler","_focusInputHandler","_focusInput","_optionLabel","_inputTemplate","_word","_span","_mobile","_filterHeader","_attachFocusHandlers","_attachAriaActiveDescendant","_textAccessor","_optionLabelText","valueTemplate","optionLabelTemplate","_arrow","_focusFilter","_resizeFilterInput","isInputActive","originalPrevent","_optionLabelDataItem","loweredText","_valueSetter","_assignInstance","_buildOptions","optionLabelValue","initialIndex","_presetValue","_filterPaste","_focusinHandler","_focusoutHandler","isIFrame","self","_wrapperMousedown","_wrapperClick","dropDownWrapper","isPopupVisible","_getElementDataItem","_matchText","_shuffleData","splitIndex","optionDataItem","_selectNext","oldFocusedItem","isInLoop","charCode","_popupOpen","compareElement","jQueryCandidate","_resetOptionLabel","focusedItem","additionalClass","keepState","SELECTOR","accesskey","unselectable","getElements","optionLabelText","STATE_REBIND","newLineRegEx","_attachFocusEvents","_setText","syncValueAndText","_pasteTimeout","hasText","isCustom","_inputFocus","_inputFocusout","_arrowClick","_inputPaste","reinitialized","_openPopup","_scrollToFocusedItem","_updateSelection","hasInitialIndex","_updateItemFocus","isFirstPage","_setDomInputValue","caretStart","currentCaret","preventShow","maxLength","accessKey","A","LI","ACCEPT","FILTER","REBIND","DESELECT","FOCUSEDCLASS","SELECTEDCLASS","HOVERCLASS","_optionsMap","_customOptions","_tagList","_textContainer","_tagID","tagList","_initialOpen","_ariaSetLive","_tagTemplate","_ariaSetSize","tagMode","autoClose","singleTag","deleteTag","maxSelectedItems","tagTemplate","persistTagList","currentTag","_currentTag","_selectedItemChange","_initialValues","optionsMap","tagTextTemplate","notInput","closeButton","cancelable","_removeTag","tag","listViewChild","customIndex","listViewChildren","_close","classList","_updateTagListHTML","_tagListClick","_clearSingleTagValue","tags","_retrieveData","_activeItem","inputValue","clearFilters","_normalizeValues","_setOption","isEmptyArray","_getActiveItem","_getSelectedIndices","activeItemIdx","activeIndex","_multipleSelection","_selectRange","_showBusyHandler","skipCaret","caretPos","textWidth","wrapperWidth","selectedItems","_buildSelectedItems","_selectedItemIndex","_angularTagItems","updatePersistTagList","removedItem","addedItem","_updateTagListAria","_maxTotal","maxTotal","currentTotal","isSelected","indicesToSelect","selectIndices","aria-autocomplete","defaultTemplate","hasDataSource","isMultiple","computedStyles","hex","hue2rgb","p","q","parseColor","BaseColor","matchNamedColor","RGB","namedColors","Bytes","HSV","HSL","DARK_TRESHOLD","Color","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgrey","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","grey","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgrey","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","regexp","colorNames","toHSV","toRGB","toHex","toBytes","toCss","toCssRgba","rgb","r","toDisplay","other","c1","c2","NaN","h","ref","toHSL","l","resolvedColor","formatRegex","processor","channels","this$1","resolveColor","re","normalizeByte","padDigit","brightness","percBrightness","isDark","fromBytes","fromRGB","fromHSV","fromHSL","createWrapper","isHorizontal","orientationCssClass","cssClasses","tickPlacementCssClass","tickPlacement","showButtons","createButton","buttonCssClass","createSliderItems","smallStep","createTrack","dragHandleCount","firstDragHandleTitle","leftDragHandleTitle","dragHandleTitle","rightDragHandleTitle","stepValue","formatValue","calculatePrecision","power","parseAttr","defined","removeFraction","RangeSlider","MOUSE_DOWN","TRACK_MOUSE_DOWN","MOUSE_UP","TRACK_MOUSE_UP","MOVE_SELECTION","KEY_DOWN","MOUSE_OVER","DRAG_HANDLE","TRACK_SELECTOR","TICK_SELECTOR","STATE_SELECTED","STATE_FOCUSED","STATE_DEFAULT","SliderBase","rtlDirectionSign","_isHorizontal","_sizeFn","_outerSize","tooltip","_createHtml","_trackDiv","_setTrackDivWidth","_maxSelection","_sliderItemsInit","_keyMap","37","40","39","38","35","36","33","largeStep","34","_distance","_refresh","sizeBetweenTicks","pixelWidths","_calculateItemsWidth","_setItemsWidth","_setItemsTitle","_calculateSteps","_setItemsLargeTick","trackDivPosition","bordersWidth","titleNumber","limit","increment","valueWithoutFraction","itemsCount","itemWidth","trackDivSize","preciseItemsCount","pixelStep","_roundWidths","pixelWidthsArray","balance","_addAdditionalSize","additionalSize","_pixelSteps","_getValueFromPosition","mousePosition","dragableArea","halfStep","startPoint","_getFormattedValue","tooltipTemplate","_getDraggableArea","endPoint","_firstHandleDrag","_activeHandle","_lastHandleDrag","_activeHandleDrag","_updateTooltip","_focusWithMouse","_setTooltipTimeout","_removeTooltip","_tooltipTimeout","_clearTooltipTimeout","tooltipDiv","_formResetHandler","Slider","dragHandle","_selection","Selection","Drag","increaseButtonTitle","decreaseButtonTitle","mouseDownHandler","newVal","_nextValueByIndex","_valueIndex","_setValueInRange","timer","_clearTimer","_refreshAriaAttr","_tooltipDiv","moveSelection","selectionValue","selectionDiv","halfDragHanndle","rtlCorrection","owner","_activeDragHandle","_setZIndex","oldVal","_createTooltip","colloutCssClass","wnd","tooltipInnerDiv","_scrollOffset","moveTooltip","slideParams","constrainValue","noAnimation","fadeOut","dragHandles","sdhOffset","viewPortEnd","maxOverflow","firstInput","secondInput","warn","dragSelectionStart","dragSelectionEnd","activeHandleDrag","selectionStartValue","selectionEndValue","selectionStartIndex","selectionEndIndex","halfHandle","makeSelection","selectionPosition","relative","KEYS","BACKGROUNDCOLOR","ITEMSELECTEDCLASS","SIMPLEPALETTE","WEBPALETTE","WHITE","MESSAGES","noColor","clearColor","previewInput","CLICK_NS","ColorSelector","_tabIndex","_ariaId","_standalone","_triggerSelect","_updateUI","_onEnable","nohooks","_selectOnHide","ColorPalette","colors","tileSize","palette","_selectedID","ex","FlatColorPicker","_hueElements","_selectedColor","_colorAsText","_sliders","_hsvArea","autoupdate","_clearedColor","_getHSV","_applyIEFilter","_hsvEvents","_hueSlider","_opacitySlider","_hsvRect","_hsvHandle","preview","track","backgroundImage","hueChange","opacityChange","hueSlider","opacitySlider","kendoSlider","slide","rw","rh","_svChange","hsvRect","hsvHandle","hue","handlePosition","dontChangeInput","ColorPicker","_selector","innerWrapper","toolIcon","_getPopup","selOptions","_noColorIcon","_isInputTypeColor","selectorType","kendoButton","selectorColor","buttonHtml","CLASS_ICON","truncate","INPUT","SPIN","TOUCHEND","LABELCLASSES","STATE_INVALID","INTEGER_REGEXP","NumericTextBox","inputType","isStep","_focusout","_arrows","_validation","_toggleText","selectValue","factor","_label","restrictDecimals","spinners","upArrowText","downArrowText","_upArrowEventHandler","_downArrowEventHandler","_spin","_upArrow","_downArrow","_keyup","_inputHandler","floatingLabel","_arrowsWrap","aria-valuemin","aria-valuemax","adjusted","_adjust","_focusin","arrows","_spinning","_validationIcon","_focusing","groupRegExp","extractRegExp","caretPosition","selectOnFocus","_culture","_removeInvalidState","CLASSNAME","_numPadDot","_step","_cachedCaret","decimalSeparator","minInvalid","_numericRegex","_blinkInvalidState","_addInvalidState","_invalidStateTimeout","fractionRule","_floatRegExp","originalValue","rounder","isNotNull","floating","labelText","_floatingLabelContainer","DOMElement","fieldType","convertToValueBinding","bindAttr","createAttributes","ruleName","stringRule","attributeName","validation","DATATYPE","BINDING","specialRules","addIdAttribute","convertItems","getEditorTag","checkboxes","addValidationRules","modelField","renderHiddenForMvcCheckbox","addHidden","shouldRenderHidden","oldIE","nameSpecialCharRegExp","ERRORTEMPLATE","EQUAL_SET","kendoEditors","editors","kendoNumericTextBox","kendoDatePicker","kendoEditor","editor","editorOptions","tagElement","mobileEditors","Editable","_isMobile","_validateProxy","_validate","clearContainer","skipFocus","isObject","isValuesEditor","isCustomEditor","isKendoEditor","preventChangeTrigger","_validationEventInProgress","bindAttribute","bindingRegex","validatable","modelFields","KENDO_KEYDOWN","DATABOUND","DATABINDING","EMPTY_STRING","FOCUSSELECTOR","KEDITITEM","EDIT","REMOVE","SAVE","TOUCHSTART","ListView","_itemId","_layout","_pageable","_crudHandlers","_scrollable","navigatable","altTemplate","editTemplate","contentTemplate","bordered","borders","layout","flex","scrollable","_item","_bindScrollable","_progress","_error","elementClassNames","contentClassNames","contentPadding","cols","rowHeight","gutter","endlessAppend","_endlessFetchInProgress","_skipRerenderItemsCount","_destroyEditable","_focusNext","pagerId","pageable","pager","multi","overflow-y","-webkit-overflow-scrolling","originalPageSize","_endlessPageSize","_scrollTo","scrollDirectionFunc","UseJQueryoffset","elementDimension","containerScrollAmount","containerDimension","clickCallback","focusAgain","canHandle","isTextBox","editItem","edit","clearSelection","_modelFromElement","_closeEditable","kendoEditable","mousedownNs","touchstartNs","clickNs","getSortedDomIndices","isUndefined","DRAGGEDCLASS","FOCUSED_CLASS","SELECTED_STATE_CLASS","RESET","DRAG_CLUE_CLASS","DROP_HINT_CLASS","isInputElement","CommandFactory","ListBoxCommand","RemoveItemsCommand","MoveItemsCommand","MoveUpItemsCommand","MoveDownItemsCommand","TransferItemsCommand","TransferItemsToCommand","TransferItemsFromCommand","TransferAllItemsToCommand","TransferAllItemsFromCommand","kendoAttr","DASH","DOT","SPACE","HASH","KENDO_LISTBOX","DISABLED_STATE_CLASS","ENABLED_ITEM_SELECTOR","ENABLED_ITEMS_SELECTOR","TOOLBAR_CLASS","TOOL_SELECTOR","LIST_CLASS","LIST_SELECTOR","ADD","REORDER","MOVE_UP","MOVE_DOWN","TRANSFER_TO","TRANSFER_FROM","TRANSFER_ALL_TO","TRANSFER_ALL_FROM","UNIQUE_ID","COMMAND","MOVE_UP_OFFSET","MOVE_DOWN_OFFSET","TOOLBAR_POSITION_CLASS_NAMES","ListBox","_list","_createToolbar","_createNavigatable","_listTabIndex","_getList","_destroyToolbar","_target","_draggable","dropSources","tools","moveUp","moveDown","transferTo","transferFrom","transferAllTo","transferAllFrom","_unbindDataChange","_addItem","_bindDataChange","_bindDataSource","_syncElement","itemContent","_addItemAt","_insertElementAt","_keyDown","_getTabIndex","oldTarget","isInput","_getNavigatableItem","nextAll","_scrollIntoView","shouldPreventDefault","_shiftSelecting","_executeCommand","elementNode","listBox","_searchConnectedListBox","connectedListBox","closestContainer","originalElement","getKendoListBox","draggableOptions","draggedItem","_updateToolbar","_updateAllToolbars","dataItemAtIndex","itemAtIndex","listItem","_removeElement","listItems","_getItems","_removeItem","uniqueIdAttr","enabledItems","_enableItem","_dataChangeHandler","_innerWrapper","_setItemIds","viewLength","toolbarElement","toolbarOptions","toolbarInsertion","commandName","execute","_updateToolStates","listBoxElements","elementsLength","_commands","commandType","getItems","canExecute","moveItems","movedItem","indecesInDom","movedItems","itemComparer","moveAction","item1","item2","indexItem1","indexItem2","domIndices","sourceListBox","getSourceListBox","destinationListBox","getDestinationListBox","updatedSelection","getUpdatedSelection","updateSelection","itemFilter","lastEnabledItem","containsLastItem","itemToSelect","_initTemplates","_createTools","_attachEventHandlers","_detachEventHandlers","toolsLength","toolsMessages","toolList","_createToolList","defaultTools","_onToolClick","_executeToolCommand","_updateToolState","toolName","toolElement","loaderClasses","canvas","segment","loaderTypes","pulsing","segments","infinite-spinner","converging-spinner","Loader","typeData","_type","TextBox","TEXTAREACONTAINER","TextArea","_applyAttributes","stringDiffStart","str1","str2","PASTE","MaskedTextBox","_rules","_tokenize","_togglePrompt","_emptyMask","_timeoutId","_maskLength","clearPromptChar","unmaskOnPost","promptChar","0","9","#","L","?","&","C","_submitHandler","unmasked","_unmask","emptyMask","_mask","_unmaskedValue","_trackChange","_legacyIEInputHandler","__changing","inputChange","backward","contentStart","endContent","lengthDiff","__dropping","_trimStartPromptChars","_findCaretPosBackwards","__backward","__pasting","chr","chrIdx","tokenIdx","tokensLength","maskChars","getEffectDirection","parseDirection","updateItemClasses","IMG","IMAGE","LINK","DEFAULTSTATE","LINK_SELECTOR","excludedNodesRegExp","updateArrow","updateFirstLast","arrowCssClass","getArrowCssClass","MENU","updateHasAriaPopup","parentLi","getParentLiItems","storeItemSelectEventHandler","selectHandler","getItemSelectEventHandler","setItemData","popupOpenerSelector","popupGroupSelector","getChildPopups","currentPopup","overflowWrapper","childPopupOpener","opener","popupId","POPUP_OPENER_ATTR","popupParentItem","POPUP_ID_ATTR","itemPopup","animationContainerSelector","overflowMenuParents","getParents","mousewheelDelta","parentsScroll","scrollDirection","isPointerTouch","allPointers","pointerType","touchPointerTypes","isTouch","removeSpacesBetweenItems","DELAY","SCROLLSPEED","ICON_SELECTOR","TIMER","ZINDEX","POINTERDOWN","MOUSEWHEEL","SCROLLWIDTH","SCROLLHEIGHT","OFFSETWIDTH","OFFSETHEIGHT","KENDOPOPUP","HOVERSTATE","menuSelector","groupSelector","popupSelector","allItemsSelector","disabledSelector","itemSelector","availableItemsSelector","linkSelector","exclusionSelector","nextSelector","lastSelector","templateSelector","scrollButtonSelector","imageAttr","rendering","wrapperCssClass","firstLevel","itemCssAttributes","imageCssAttributes","imgAttributes","contentCssAttributes","contentAttr","defaultClasses","textClass","arrowClass","groupAttributes","expanded","groupCssClass","Menu","_updateClasses","_animations","nextItemZIndex","_initOverflow","_attachMenuEventsHandlers","openOnClick","clicked","closeOnClick","hoverDelay","popupCollision","_initData","_overflowWrapper","_preventClose","_removeHoverItem","_checkActiveElement","_mouseleavePopup","_mouseenterPopup","_documentClickHandler","_documentClick","_detachMenuEventsHandlers","backwardBtn","forwardBtn","initialWidth","initialCssWidth","_openedPopups","_scrollWrapper","scrollButton","_initScrolling","_setOverflowWrapperWidth","_toggleScrollButtons","_popupsWrapper","menuWidth","wrapperCssWidth","_reinitOverflow","overflowChanged","_destroyOverflow","popupWrapper","popupParentLi","isNumeric","mouseWheelDistance","backwardDouble","forwardDouble","scrolling","touchEvents","scrollValue","finish","mouseenterHandler","mousedownHandler","scrollSpeed","_closeChildPopups","currentScroll","_toggleDisabled","attemptGetItem","referenceItem","inserted","_insert","_childPopupElement","plain","groupData","renderGroup","renderItem","parentItems","_openAfterLoad","visiblePopups","closePopup","overflowPopup","windowHeight","setScrolling","nextZindex","parentHorizontal","_triggerEvent","maxHeight","_configurePopupOverflow","_initPopupScrolling","popupOpener","groupId","_wrapPopupElement","skipMouseEvents","_initPopupScrollButtons","scrollButtons","_closeParentPopups","_keyTriggered","_setPopupHeight","popupOuterHeight","popupOffsetTop","bottomScrollbar","canFit","_initialHeight","dontClearClose","hasChildPopupsHovered","isPopupMouseLeaved","_isRootItem","_forceClose","isEnter","_closurePrevented","hoverItem","_hoverItem","_findRootParent","hasFocus","oldHoverItem","_oldHoverItem","nonContentGroupsSelector","_itemHasChildren","pointerTouch","delegateTarget","rootMenuItems","subMenuItems","toElement","_closePopups","rootPopup","groupParent","innerPopup","_innerPopup","openHandle","childGroup","childGroupVisible","shouldCloseTheRootItem","childPopupId","formNode","itemElement","targetHref","sampleHref","isLink","isLocalLink","isTargetLink","_lastClickedElement","_parentsUntil","enterKey","itemSelectEventData","isSelectItemDefaultPrevented","isSelectDefaultPrevented","_getEventData","_moveHover","belongsToVertical","_itemBelongsToVertival","_itemDown","_itemUp","_itemEsc","menuIsVertical","nextItem","_scrollToItem","_itemRight","parentItem","_itemLeft","scrollDir","currentScrollOffset","itemSize","itemOffset","ulSize","scrollButtonSize","itemPosition","findByUid","wrapperElement","itemsToUpdate","updateProxy","_updateItem","removeProxy","_appendItems","_fieldAccessor","fieldBindings","fieldAccessor","itemWrapper","sprite","menu","renderContent","dataContentField","subGroup","renderItems","ContextMenu","_marker","_wire","_initialWidth","alignToAnchor","_showProxy","_closeProxy","_configurePopupScrolling","_setPopupWidth","windowWidth","popupOuterWidth","popupOffsetLeft","maxWidth","_closeTimeoutProxy","_showHandler","_eventOrigin","_targetChild","normalClick","sameTarget","containment","_preventProxy","_triggerProxy","updateItemHtml","toggleButton","HREF","LINKSELECTOR","GROUP","VISIBLEGROUP","EXPAND","COLLAPSE","ACTIVECLASS","GROUPS","CONTENTS","DISABLEDCLASS","SELECTEDSELECTOR","HIGHLIGHTCLASS","ACTIVEITEMSELECTOR","clickableItems","disabledItems","selectableItems","defaultState","SINGLE","contentUrl","textAttributes","encoded","ariaHidden","contentAttributes","itemIcon","PanelBar","_retryRequest","_first","expand","_angularCompile","requestFailed","retry","loadOnDemand","expandMode","_angularCompileElements","_angularCleanup","useAnimation","animBackup","_animating","_addGroupElement","_collapseAllExpanded","_toggleItem","showProgress","loadingText","_refreshRoot","rootItemsHtml","_refreshChildren","_toggleGroup","uidAttr","tempItem","_updateItems","_hasChildItems","retryHtml","_expanded","itemsHtml","nodeWrapper","currentNode","panelBar","skipChange","_updateSelected","focused","isReferenceItem","_updateItemsClasses","panels","panelsParent","_updateItemClasses","wrapElement","contentUrls","isAnchor","isVisible","notVisible","animationSettings","hasCollapseAnimation","_animationCallback","stopExpand","statusIcon","loadingIconTimeout","DEFAULTMIN","DEFAULTMAX","DEFAULTVALUE","DEFAULTCHUNKCOUNT","KPROGRESSBAR","KPROGRESSBARREVERSE","KPROGRESSBARINDETERMINATE","KPROGRESSBARCOMPLETE","KPROGRESSWRAPPER","KPROGRESSSTATUS","LABEL_POSITION_END","KCOMPLETEDCHUNK","KUPCOMINGCHUNK","PROGRESSTYPE","PERCENT","CHUNK","COMPLETE","HUNDREDPERCENT","DEFAULTANIMATIONDURATION","PRECISION","progressStatus","ProgressBar","_progressProperty","_fields","_validateType","_progressAnimation","_updateProgress","chunkCount","showStatus","_isStarted","progressWrapper","currentType","initialStatusValue","_addChunkProgressWrapper","_calculatePercentage","validated","_roundValue","_updateChunks","_onProgressUpdateAlways","_updateProgressWrapper","completedChunks","percentagesPerChunk","percentageParsed","completedChunksCount","animationDuration","_animation","animationCssOptions","_addRegularProgressWrapper","_onProgressAnimateStart","_onProgressAnimate","_onProgressAnimateComplete","always","progressStatusWrapSize","progressInPercent","progressValue","progressWrapperSize","chunkSize","_normalizeChunkSize","lastChunk","_calculateChunkSize","chunkContainer","_onePercent","ACTIVATE_EVENTS","ResponsivePanel","_toggleHandler","_toggleButtonClick","_registerBreakpoint","_mediaQuery","_registerStyle","breakpoint","head","styleSheet","createTextNode","prevented","updateTabClasses","tabs","ACTIVESTATE","TABONTOP","tabGroup","scrollButtonHtml","buttonClass","CONTENTURL","NAVIGATABLEITEMS","KEYBOARDNAVIGATABLEITEMS","HOVERABLEITEMS","DEFAULTDISTANCE","TabStrip","_contentUrls","_tabPosition","_keyDownProxy","wr","contentHolder","activateTab","_endItem","endItem","rtl","tabPosition","tab","dataEncodedField","dataContentUrlField","dataImageUrlField","dataUrlField","dataSpriteCssClass","collapsible","scrollWrap","_scrollableModeActive","_scrollPrevButton","_scrollNextButton","ajaxRequest","_create","_updateContentElements","_appendUrlItem","_moveUrlItem","_removeUrlItem","referenceTab","referenceContent","fromIndex","newTabsCreated","activeItem","activeTab","contentElements","_elementId","tabStripID","elementId","wrapperId","isInitialUpdate","tabId","contentId","currentContent","contentAnimators","tabsHeight","_setContentElementsDimensions","contentDivs","activeDiv","marginStyleProperty","_sizeScrollWrap","neighbours","oldFocusedTab","_scrollTabsToItem","deactivateTab","wrapperOffsetWidth","tabGroupScrollWidth","scrollPrevButton","scrollNextButton","mouseDown","mouseUp","isRtlScrollDirection","_scrollableAllowed","_nowScrollingTabs","marginRight","_scrollTabsByDelta","tabGroupWidth","tabGroupPadding","scrLeft","hasCloseAnimation","oldTab","isAnimationEnabled","visibleContents","isAjaxContent","showContentElement","showContent","inRequest","abort","scrollContainer","halfWidth","fakeProgress","endState","oldProgressAnimation","ajaxOptions","ajaxSettings","request","progressUpload","upload","evt","noProgress","XMLHttpRequest","lengthComputable","stopProgress","statusText","tabStrip","dst","midnight","noon","lastTimeOption","mergeDateAndTime","datePattern","addLiteral","lastPart","LITERAL","isHour12","dateNameType","formatLength","nameType","startsWith","searchString","includes","subStr","splitDateFormat","specifier","patternLength","DATE_FIELD_MAP","hour12","NAME_TYPES","standAlone","getItemHeight","getBoundingClientRect","TimeView","TimePicker","ARIA_ACTIVEDESCENDANT","HOUR","ZONE","WEEKDAY","QUARTER","Q","E","H","K","X","z","Z","quarter","era","MODERN_RENDERING_TEMPLATE","NEW_RENDERING_FOOTER","HIGHLIGHTCONTAINER","_dates","timeView","_timeViewID","_heightHandler","_createScrollList","_createClassicRenderingList","_nowClickHandler","_cancelClickHandler","_setClickHandler","_mouseOverHandler","_scrollerKeyDownHandler","lists","_focusList","_scrollTop","_updateTitle","applyValue","is12hourFormat","hoursList","minutessList","secondsList","designatorList","_scrollListToPosition","dataBind","_html","msStart","msLastTime","msInterval","useValueToRender","_createListContent","getDatesInRange","_updateListBottomOffset","listHeight","bottomOffset","_updateHoursRange","useMax","useMin","minHours","_minHours","maxHours","_maxHours","selectedDesignator","_findSelectedValue","_validateMin","_validateMax","_updateMinutesRange","minutesList","minMinutes","_minMinutes","maxMinutes","_maxMinutes","selectedHour","_updateSecondsRange","minSeconds","_minSeconds","maxSeconds","selectedMinutes","_updateDesignatorRange","_updateRanges","specifiedRange","_currentlySelected","validateDate","_maxSeconds","addTranslate","topOffset","-ms-transform","_itemClickHandler","_listScrollHandler","_scrollingTimeout","_updateCurrentlySelected","selectedSeconds","firstOccurence","maxSet","_literalTemplate","_itemTemplate","shouldPad","innerText","_distinctSelection","selectionIndex","timeDiv","_specifiedRange","millisecond","timeFormat","ARIA_OWNS","dateViewParams","timeViewParams","SINGLE_POPUP_TEMPLATE","DateTimePicker","singlePopup","_views","_icons","_midnight","_calculateMidnight","dateButtonText","timeButtonText","dateIcon","timeIcon","_timeIcon","_switchToTimeView","_switchToDateView","secondView","minDateEqual","maxDateEqual","timeViewOptions","rebind","isDateViewVisible","_applyDateValue","_toggleIcons","_applyTimeValue","_timeSelected","adjustedDate","icons","_groupChangeClick","isPercentageSize","isPixelSize","pxUnitsRegex","isFluid","calculateSize","panePropertyAccessor","triggersResize","splitter","paneConfig","PANE","PaneResizing","horizontalDefaults","verticalDefaults","_resizable","_createHint","resizeend","LAYOUTCHANGE","KPANE","PANECLASS","Splitter","_dimension","_keys","decrease","increase","_resizeStep","_initPanes","triggerHandler","_addOverlays","_panes","_removeOverlays","_togglePane","_detachEvents","panes","navigationKeys","isResizing","_triggerAction","panesConfig","_initPane","arrowType","_updateSplitBar","splitbar","previousPane","nextPane","catIconIf","iconType","condition","prevCollapsible","prevCollapsed","collapsed","nextCollapsible","nextCollapsed","_updateSplitBars","_removeSplitBars","sizedPanesWidth","sizedPanesCount","freeSizedPanes","freeSizePanesCount","freeSizePaneWidth","alternateSizingProperty","positioningProperty","sizingDomProperty","lastNonCollapsedPane","splitBars","splitBarsCount","sizingProperty","totalSize","collapsedSize","_addPane","paneElement","referencePane","mousePositioningProperty","previousPaneConfig","nextPaneConfig","prevBoundary","nextBoundary","toPx","prevMinSize","prevMaxSize","nextMinSize","nextMaxSize","ghostPosition","previousPaneNewSize","nextPaneNewSize","fluidPanesCount","constrain","buttonKeyTrigger","PopupBox","Alert","kendoAlert","Confirm","kendoConfirm","Prompt","kendoPrompt","KDIALOG","KWINDOW","KICONCLOSE","KCONTENTCLASS","KCONTENTSELECTOR","KSCROLL","KTITLELESS","KDIALOGTITLE","KDIALOGTITLEBAR","KBUTTONGROUP","KALERT","KCONFIRM","KPROMPT","KTEXTBOX","KOVERLAY","INITOPEN","TOUCHMOVE","DATADOCOVERFLOWRULE","DATAHTMLTAPYRULE","okText","promptInput","overlaySelector","DialogBase","_init","_centerCallback","_center","wrapperTemplate","_createDialog","_defaultFocus","_dimensions","_tabKeyTrap","_triggerOpen","sizeClass","actions","_createActionbar","_closable","_enableDocumentScrolling","_overlay","_setElementMaxHeight","_setElementHeight","elementMaxHeight","_uiHeight","_applyScrollClassName","hasScroll","actionbar","actionbarHeight","titlebar","titlebarHeight","overlay","_waiAriaOverlay","_removeWaiAriaOverlay","preventScroll","_stopDocumentScrolling","_overlayedNodes","jthis","hiddenValue","_closeClick","_closeKeyHandler","closable","titleId","titlebarActions","closeAction","isStretchedLayout","buttonLayout","_addButtons","actionClick","_actionClick","actionKeyHandler","_actionKeyHandler","_mergeTextWithOptions","closeBtn","actionButtons","_runActionBtn","preventClose","toFront","_triggerInitOpen","_focusDialog","otherModalsVisible","overlayFx","showOptions","_animationOptions","_modals","Fade","fadeIn","_openAnimationEnd","basicAnimation","_initOpenTriggered","originalZIndex","windowObject","zIndexNew","systemTriggered","_stopCenterOnResize","hideOptions","_removeOverlay","_closeAnimationEnd","_centerOnResize","documentWindow","newLeft","newTop","_trackResize","modals","hideOverlay","_object","$html","$body","_storeOverflowRule","_touchStart","passive","_touchMove","$target","upScroll","preventYScroll","_restoreOverflowRule","$element","_isOverflowStored","overflowRule","lastModal","zStack","encodedHtml","Dialog","alertWrapper","_ensureContentId","_ariaDescribedBy","_initFocus","_chooseEntryFocus","alert","confirmDialog","confirm","_createPrompt","promptContainer","promptInputContainer","promptDialog","prompt","toInt","normalizedValue","executableScript","getPosition","parentOverflowX","parentOverflowY","offsetLeft","WindowResizing","_preventDragging","KWINDOWRESIZEHANDLES","addOverlay","removeOverlay","WindowDragging","MODAL_NS","KWINDOWTITLE","KWINDOWTITLEBAR","KWINDOWCONTENT","KDIALOGCONTENT","KHOVERSTATE","KFOCUSEDSTATE","MAXIMIZEDSTATE","CURSOR","REFRESH","MINIMIZE","MAXIMIZE","RESIZESTART","KENDOKEYDOWN","MINIMIZE_MAXIMIZE","KPIN","KUNPIN","PIN_UNPIN","TITLEBAR_BUTTONS","REFRESHICON","WINDOWEVENTSHANDLED","zero","Window","windowContent","windowFrame","globalWindow","suppressActions","_createWindow","minTop","minLeft","maxTop","maxLeft","_buttonEnter","_buttonLeave","_windowActionHandler","_keydownContent","windowInstance","aria-labelledby","_onDocumentResize","contentBoxSizing","lrBorderWidth","tbBorderWidth","_isPinned","_updateBoundaries","containmentTop","containmentLeft","toggleMaximization","resizeHandle","dragging","_actions","windowSpecificCommands","cachedOptions","fade","autoFocus","isMaximized","isMinimized","newWidth","newHeight","w","unpin","maximize","minimize","_actionForIcon","k-i-close","k-i-window-maximize","k-i-window-minimize","k-i-window-restore","k-i-refresh","k-i-pin","k-i-unpin","_scrollIsAppended","titleBarHeight","titleBar","titleElement","containmentContext","doc","_activate","_containerScrollTop","_containerScrollLeft","suppressAnimation","defaultPrevented","_deactivate","_actionable","_shouldFocus","windowTop","currentWindow","shouldRestrictTop","restoreOptions","_sizingAction","actionId","initOptions","contentFrame","_triggerRefresh","_ajaxComplete","_loadingIconTimeout","_ajaxError","_ajaxSuccess","_showLoading","iframeSrcAttributes","contentHtml","hasMargin","wrapperPosition","relativeElMarginLeft","relativeElMarginTop","elementPadding","initialPosition","resizeDirection","initialSize","containerOffset","_relativeElMarginLeft","_relativeElMarginTop","leftRtlOffset","scrollOffset","windowBottom","windowRight","newWindowTop","initialWindowPosition","initialPointerPosition","startPosition","_finishDrag","initPopOvers","popovers","preventScrollIfNotInput","initWidgets","UI_OVERLAY","BEFORE_SHOW","AFTER_SHOW","BEFORE_HIDE","_scroller","_model","stretch","scroller","$destroy","inited","_invokeNgController","_padIfNativeScrolling","isAndroid","skin","isAndroidForced","hasPlatformIndependentSkin","topContainer","bottomContainer","scrollerContent","idAttrValue","controller","$apply","_callController","$scope","platform","previousView","errorMessage","rootNeeded","_setupLayouts","showClosure","serverNavigation","_loadView","modalViews","_getLayout","_xhr","_xhrComplete","CAPTURE_EVENTS","captureEvents","_attachCapture","changeMessage","transitionDone","EXTERNAL","DUMMY_HREF","SKIP_TRANSITION_ON_BACK_BUTTON","WIDGET_RELS","historyCallback","viewEngine","_historyNavigate","_historyReplace","closeActiveDialogs","viewShow","loadStart","loadComplete","sameViewRequested","viewTypeDetermined","_setPortraitWidth","_setupAppLinks","dialogs","navigateToInitial","portraitWidth","bindToRouter","router","attrUrl","hideLoading","showLoading","changeLoadingMessage","linkRoles","pressedButtonSelector","buttonSelectors","_mouseup","_appLinkClick","rel","delayedTouchEnd","openFor","paneContainer","ARROW","OVERLAY","DIRECTION_CLASSES","DIRECTIONS","ANIMATION","popupOptions","containerPopup","PopOver","initialOpen","SHIM","Shim","app","osname","ioswp","bb","shim","_hide","BEFORE_OPEN","WRAP","ModalView","_shim","AXIS","SWIPE_TO_OPEN","AFTER_HIDE","NULL_VIEW","Drawer","drawer","_viewShow","_attachTransition","swipeToOpen","leftPositioned","swipeToOpenViews","_moveViewTo","visibleOnCurrentView","_currentViewIncludedIn","_setAsCurrent","canMoveLeft","canMoveRight","leftSwipe","limitedPosition","newPosition","shouldShow","pastHalf","velocityThreshold","EXPANED_PANE_SHIM","SplitView","_style","_paramsHistory","expandedPaneShim","_shimUserEvents","collapsePanes","expandPanes","osCssClass","variant","setDefaultPlatform","statusBarStyle","wp8Background","noVariantSet","isOrientationHorizontal","getOrientationClass","setMinimumHeight","applyViewportHeight","HEAD","viewportTemplate","DEFAULT_OS","BERRYPHONEGAP","FONT_SIZE_COEF","CHROME","BROKEN_WEBVIEW_RESIZE","INITIALLY_HORIZONTAL","MOBILE_PLATFORMS","ios7","usedWithBlock","systemMeta","clipTemplate","ENABLE_CLIP","iconMeta","HIDEBAR","SUPPORT_SWIPE_TO_GO_BACK","HISTORY_TRANSITION","BARCOMPENSATION","STATUS_BAR_HEIGHT","SCREEN","Application","bootstrap","paneOptions","startHistory","_setupPlatform","_attachMeta","_setupElementClass","_attachHideBarHandlers","updateDocumentTitle","_setupDocumentTitle","_startHistory","hideAddressBar","browserHistory","historyTransition","retina","refreshBackgroundColorProxy","_resizeToScreenHeight","includeStatusBar","_clearExistingMeta","hideBar","defaultTitle","_hideBar","BUTTONS","CONTEXT_DATA","cancelTemplate","ActionSheet","ShimClass","_shimHideProxy","actionData","_shimHide","highlightButton","highlight","ANDROID3UP","deactivateTimeoutID","createBadge","useTap","clickOn","_userEvents","_timeoutDeactivate","badgeElement","iconSpan","BackButton","DetailButton","DISABLE","_button","selectOn","buttongroup","COLLAPSIBLE","INSET","HEADER_WRAPPER","CONTENT_WRAPPER","COLLAPSED","EXPANDED","ANIMATED","EXAPND","Collapsible","_buildHeader","inset","collapseIcon","expandIcon","iconPosition","instant","_getContentHeight","isCollapsed","whitespace","TEXT_NODE","whitespaceRegExp","addIcon","querySelector","enhanceItem","enhanceLinkItem","itemAndDetailButtons","otherNodes","enhanceCheckBoxItem","putAt","VirtualListViewItem","LOAD_ICON","VirtualListViewLoadingIndicator","VirtualListViewPressToLoadMore","VirtualListViewItemBinder","ListViewItemBinder","ListViewFilter","ITEM_SELECTOR","HIGHLIGHT_SELECTOR","GROUP_CLASS","ACTIVE_CLASS","GROUP_WRAPPER","GROUP_TEMPLATE","SEARCH_TEMPLATE","STYLED","ITEM_CHANGE","buttonRegExp","HeaderFixer","headerFixer","cacheHeaders","_shouldFixHeaders","_cacheHeaders","_scrollHandler","_fixHeader","fixedHeaders","headerPair","currentHeader","DEFAULT_PULL_PARAMETERS","RefreshHandler","pullParameters","pull","_pulled","itemConstructor","prevItem","endReached","below","totalHeight","averageItemHeight","remainingItemsCount","batchUpdate","nextIndex","initialOffset","lastDirection","above","lastTop","topBorder","bottomBorder","setDataItem","_loadIcon","_loadButton","loadMoreText","loadMore","kendoMobileButton","_hideShowButton","_showLoadButton","chromeHeight","_scrollEnd","pressToLoadMore","virtualViewSize","updateScrollerSize","updateSize","itemBinder","adding","removing","prependOnRefresh","appendOnRefresh","groupedMode","findByDataItem","_shouldShowLoading","replaceGrouped","insertAt","endlessScroll","filterable","autoFilter","searchInput","_oldFilter","_filterChange","_dataSourceChange","_refreshInput","appliedFilters","_applyFilter","scrollTreshold","scrollThreshold","_headerFixer","_itemsCache","_itemBinder","_pullToRefreshHandler","_enhanceItems","emptyDataSource","_scrollerInstance","triggerChange","replaceItem","newItem","_dim","_highlight","plainItem","dataIDAttribute","templateProxy","groupTemplateProxy","_headerTemplate","buttonElement","_styleGroups","rootItems","grouped","enhanced","createContainer","toggleTitle","centerElement","noTitle","showTitle","NavBar","leftElement","rightElement","DRAG_START","DRAG_END","ElasticPane","ScrollViewContent","VirtualScrollViewContent","Page","ScrollView","CHANGING","CURRENT_PAGE_CLASS","VIRTUAL_PAGE_CLASS","CLEANUP","VIRTUAL_PAGE_COUNT","LEFT_PAGE","CETER_PAGE","RIGHT_PAGE","LEFT_SWIPE","NUDGE","RIGHT_SWIPE","scrollView","_changeProxy","_refreshProxy","pageHTML","pageCount","ScrollViewPager","updateDimension","transitionTo","ScrollViewElasticPane","_getPages","contentHeight","enablePager","pagerOverlay","paneMoved","swipeType","bounce","snap","nextPage","approx","minSnap","maxSnap","currentPage","updatePage","forcePageUpdate","resizeTo","containerHeight","pageElements","_paged","_initPages","_buffer","_pendingPageRefresh","_pendingWidgetRefresh","_resetPages","_resetProxy","_endReachedProxy","emptyTemplate","emptyTemplateProxy","setWidth","_repositionPages","_updatePagesContent","thresholdPassed","isEndReached","_cancelMove","_moveBackward","_moveForward","setPageContent","_resetMovable","_onResize","_onReset","_onEndReached","theContent","VirtualPage","mobileContainer","transitionEnd","dragStart","dragEnd","_syncWithContent","viewInit","bounceVelocityThreshold","prevPage","_dragStart","_transitionEnd","limitValue","minLimit","maxLimit","SWITCHON","SWITCHOFF","MARGINLEFT","ACTIVE_STATE","DISABLED_STATE","RESOLVEDPREFIX","TRANSFORMSTYLE","SWITCH_MARKUP","Switch","onLabel","offLabel","background","snapPoint","_animateBackground","handleWidth","ACTIVE_STATE_CLASS","_buildButton","switchTo","_setActiveItem","switchByFullUrl","currentItem","tabstrip","withoutTimeout","$timeout","createWidget","attrs","origAttr","controllers","createIt","destroyRegister","kNgDisabled","kNgReadonly","isReadonly","kRebind","ctor","OPTIONS_NOW","exposeWidget","$emit","destroyWidgetOnScopeDestroy","setupRebind","$eval","bindToKNgDisabled","bindToKNgReadonly","kNgModel","bindToKNgModel","ngModel","bindToNgModel","ngForm","propagateClassToWidgetWrapper","kNgDelay","delayValue","parsed","unresolved","unwatch","$watch","$root","unregister","$attr","addOption","scopeValue","widgetEvents","optionsPath","kOptions","defaultOptions","dataName","eventKey","optionName","ignoredOwnProperties","ignoredAttributes","kDataSource","createDataSource","$log","kendoWidget","$parse","formValue","isForm","formRegExp","haveChangeOnElement","viewRender","onChange","currentVal","$viewValue","$modelValue","$render","formPristine","$pristine","$setViewValue","$setPristine","digest","$isEmpty","rangePickerModels","rangePickerStartModel","rangePickerEndModel","updating","valueIsCollection","currentValueLength","watchHandler","changeHandler","DateRangePicker","_startDateInput","_endDateInput","$angular_setLogicValue","$watchCollection","$setDirty","$angular_getLogicValue","deregister","$on","suspend","mo","disconnect","resume","observe","prevClassList","MutationObserver","changes","chg","currClassList","cls","rebindAttr","templateOptions","isUpload","_cleanUp","WIDGET_TEMPLATE_OPTIONS","templateContents","replaceChild","setTemplate","createDirectives","klass","make","directiveName","widgetName","module","directive","directiveFactory","shortcut","dashed","SKIP_SHORTCUTS","restrict","TAGNAMES","scopeField","kScopeField","MANUAL_DIRECTIVES","kendoWidgetInstance","isDigesting","destroyScope","defadvice","origMethod","pendingPatches","$injector","$defaultCompile","encode","encOpen","encClose","TreeList","TreeView","Scheduler","PivotGrid","PivotConfigurator","toDataSource","ds","mew","factory","kendoRenderedTimeout","RENDERED","require","$attrs","roleattr","Editor","Upload","MobileButton","MobileBackButton","MobileDetailButton","MobileListView","entry","arg","$angular_scope","$angular_init","itemScope","$$kendoScope","vars","$new","$angular_makeEventHandler","kendoEvent","elems","colIdx","locals","isString","_checkBoxSelection","angularDataItem","templateSettings","col","terminal","pre","_instance","post","kAttr","priority","TreeMap","MobileScrollView","Grid","templateDirectives","templateName","outerHTML"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;CAwBC,SAAUA,EAAGC,QACVA,OAAO,cAAe,UAAWD,IACnC,WAkuHE,MA3tHC,UAAUE,EAAGC,EAAQC,GA2ClB,QAASC,MA+GT,QAASC,GAAYC,EAAMC,GACvB,GAAIA,EACA,MAAO,IAAOD,EAAKE,MAAM,KAAMC,KAAK,OAAQD,MAAM,OAAOC,KAAK,WAAWC,QAAQ,MAAO,OAAOA,QAAQ,MAAO,OAAOA,QAAQ,MAAO,OAAS,GAE7I,IAAIC,GAAQL,EAAKM,OAAO,GAAIC,EAAOP,EAAKQ,UAAU,EAClD,OAAc,MAAVH,EACO,KAAOE,EAAO,KACJ,MAAVF,EACA,qBAAuBE,EAAO,KAE9B,IAAMP,EAAO,kBA4ChC,QAASS,GAAIC,EAAQC,EAAQC,GAIzB,MAHAF,IAAkB,GAClBC,EAASA,GAAU,EACnBC,EAAMD,EAASD,EAAOG,OAClBD,EACOE,EAAMH,GAAQH,UAAU,EAAGI,GAAOF,EAEtCA,EA2iCX,QAASK,GAAWC,GAChB,GAAIC,GAASD,EAAQE,IAAIC,GAAMC,QAAQC,YAAYH,IAAM,eAAiBF,EAAQE,IAAI,cAAeI,EAASL,EAASA,EAAOM,MAAMC,MAC5H,EACA,EACA,EACA,EACA,IAEA,EACA,EACA,EACA,EACA,GACDC,EAAOC,GAAKC,KAAKL,EAAO,KAAMA,EAAO,IAAM,GAClD,QACIM,MAAON,EAAO,GAAKG,EACnBI,OAAQP,EAAO,GAAKG,EACpBK,QAASR,EAAO,GAAKG,GAG7B,QAASM,GAAKf,EAASgB,GAAvB,GACmCC,GAGvBC,EAAgCC,EAAkCC,EAA0CC,EAA4CC,EAH5JC,EAAUnB,GAAQmB,QAAqBC,EAAarB,GAAMsB,YAAaC,EAAcvB,GAAMwB,aAAcC,EAAS5B,EAAQ4B,SAAUC,EAAmBL,EAAW5C,EAoCtK,OAnCAgD,GAAOE,YAAY,4BACdF,EAAOG,SAAS,yBAwBjBC,EAAWhC,EAASgB,IAvBhBE,EAAQlB,EAAQ,GAAGiC,MAAMf,MAAOC,EAASnB,EAAQ,GAAGiC,MAAMd,OAAQC,EAAec,GAAcC,KAAKjB,GAAQG,EAAgBa,GAAcC,KAAKhB,GAASG,EAAatB,EAAQ+B,SAAS,cAAgB/B,EAAQoC,GAAG,qCACrNnB,EAAaG,GAAgBC,GACxBD,KAAkBJ,GAAYA,GAAYE,GAASI,KACpDJ,EAAQF,EAAWQ,EAAWxB,GAAW,EAAIwB,EAAWxB,MAEvDqB,KAAmBL,GAAYA,GAAYG,IAAWnB,EAAQoC,GAAG,wCAClEjB,EAASO,EAAY1B,IAEzBA,EAAQe,KAAKpC,EAAE,UAAU0D,SAAS,yBAAyBnC,KACvDgB,MAAOA,EACPC,OAAQA,KAEZS,EAAS5B,EAAQ4B,SACbX,GACAjB,EAAQE,KACJgB,MAAO,OACPC,OAAQ,OACRmB,UAAW,aACXC,aAAc,aACdC,gBAAiB,gBAMzBX,EAAmBL,EAAWI,KAC9BA,EAAOS,SAAS,4BAChBL,EAAWhC,EAASgB,IAEpBO,EAAQkB,MAAQ/B,GAAKgC,MAAMnB,EAAQoB,UAAY,IAC/C3C,EAAQE,KAAM0C,KAAM,IACpB5C,EAAQ6C,SAAS,WAAW3B,MAAMlB,EAAQkB,UAEvCU,EAEX,QAASI,GAAWhC,EAASgB,GACzB,GAAIC,GAAYO,EAAarB,GAAMsB,YAAaC,EAAcvB,GAAMwB,aAAcmB,EAAU9C,EAAQ4B,OAAO,0BAA2BmB,EAAeD,EAAQ,GAAGb,KAC5Ja,GAAQV,GAAG,YACXU,EAAQ5C,KACJ8C,QAAS,GACTC,SAAU,KAGlBhC,EAAaiB,GAAcC,KAAKY,EAAa7B,QAAUgB,GAAcC,KAAKY,EAAa5B,QAClFF,GACD6B,EAAQ5C,KACJgB,MAAOF,EAAWQ,EAAWxB,GAAW,EAAIwB,EAAWxB,GACvDmB,OAAQO,EAAY1B,GACpBsC,UAAW,cACXC,aAAc,cACdC,gBAAiB,gBAI7B,QAASU,GAAWC,GAChB,GAAIC,GAAI,EAAGvD,EAASwD,UAAUxD,MAC9B,KAAKuD,EAAI,EAAGA,EAAIvD,EAAQuD,IACpBE,EAAcH,EAAaE,UAAUD,GAEzC,OAAOD,GAEX,QAASG,GAAcH,EAAaI,GAChC,GAAwMC,GAAUC,EAAWC,EAAUC,EAAUC,EAA7OC,EAAkB1D,GAAM2D,KAAKD,gBAAiBE,EAAsB5D,GAAM2D,KAAKC,oBAAqBC,EAAa7D,GAAM2D,KAAKE,WAAYC,EAAyB9D,GAAM2D,KAAKG,sBAChL,KAAKT,IAAYD,GACbE,EAAYF,EAAOC,GACnBE,QAAkBD,GAEdE,EADAD,IAAaQ,IAAwB,OAAdT,EACZA,EAAUU,YAEV,MAEXR,GAAYA,IAAaS,OAAST,IAAaE,GAAmBF,IAAaI,GAAuBJ,IAAaK,GAAcL,IAAaM,GAA0BN,IAAaU,QAAYlE,GAAMmE,WAAW1F,EAAO2F,cAAgBZ,IAAaY,YAc/Ob,IAAac,KACpBrB,EAAYK,GAAYC,GAdpBA,YAAqBgB,MACrBtB,EAAYK,GAAY,GAAIiB,MAAKhB,EAAUiB,WACpCJ,EAAWb,EAAUkB,OAC5BxB,EAAYK,GAAYC,EAAUkB,SAElCf,EAAWT,EAAYK,GAEnBL,EAAYK,SADLI,KAAaM,GACIN,SAI5BN,EAAcH,EAAYK,GAAWC,GAMjD,OAAON,GAEX,QAASyB,GAAOC,EAAOC,EAAKC,GACxB,IAAK,GAAIC,KAAMF,GACX,GAAIA,EAAIG,eAAeD,IAAOF,EAAIE,GAAI7C,KAAK0C,GACvC,MAAOG,EAGf,OAAOD,KAASlG,EAAYkG,EAAOF,EAEvC,QAASK,GAAUC,GACf,MAAOA,GAAI/F,QAAQ,gBAAiB,SAAUgG,GAC1C,MAAOA,GAAE9F,OAAO,GAAK,IAAM8F,EAAE9F,OAAO,GAAG+F,gBAG/C,QAASC,GAAYH,GACjB,MAAOA,GAAI/F,QAAQ,UAAW,SAAUmG,EAAUC,GAC9C,MAAOA,GAAGC,gBAGlB,QAASC,GAAkB1F,EAAS2F,GAChC,GAAiBC,GAAbC,IAmBJ,OAlBIC,UAASC,aAAeD,SAASC,YAAYC,kBAC7CJ,EAAgBE,SAASC,YAAYC,iBAAiBhG,EAAS,IAC3D2F,GACAhH,EAAEsH,KAAKN,EAAY,SAAUO,EAAKC,GAC9BN,EAAOM,GAASP,EAAcQ,iBAAiBD,OAIvDP,EAAgB5F,EAAQqG,aACpBV,GACAhH,EAAEsH,KAAKN,EAAY,SAAUO,EAAKC,GAC9BN,EAAOM,GAASP,EAAcN,EAAYa,OAIjDhG,GAAMmG,KAAKT,KACZA,EAASD,GAENC,EAEX,QAASU,GAAavG,GAClB,GAAIA,GAAWA,EAAQwG,WAA0C,gBAAtBxG,GAAQwG,WAA0BxG,EAAQwG,UAAUC,QAAQ,wBACnG,OAAO,CAEX,IAAIC,GAAWhB,EAAkB1F,GAAU,aAAa0G,QACxD,OAAmB,QAAZA,GAAkC,UAAZA,EAEjC,QAASC,GAAW3G,EAASmG,GAA7B,GAIQS,GAAIC,EAHJC,EAAS1G,GAAQmB,QAAQuF,OACzBC,EAAS3G,GAAQmB,QAAQyF,QACzBC,EAAiB7G,GAAQmB,QAAQoB,OAErC,OAAI3C,aAAmBrB,IAAKwH,IAAUtH,GAClCmB,EAAQiG,KAAK,SAAU7C,EAAG8D,GACtBP,EAAWO,EAAGf,KAElB,IAEAS,EAAK5G,YAAmBrB,GAAIqB,EAAQ,GAAKA,IAK7C6G,EAAQzG,GAAQyG,MAAM7G,GAClBmG,IAAUtH,EASNgI,GAASC,IAAWG,EAAiB,IAAM7G,GAAQmB,QAAQ4F,QACpDP,EAAGQ,YAAcR,EAAGS,YAAcT,EAAGD,WAErCW,KAAKC,IAAIX,EAAGD,aAVnBC,EAAGD,WADHE,GAASC,IAAWG,EAAiB,IAAM7G,GAAQmB,QAAQ4F,QAC3CP,EAAGQ,YAAcR,EAAGS,YAAclB,EAC3CU,IAAUE,GAAUD,IAAWX,EAAQ,GAC7BA,EAEDA,EALpB,IALJ,EAwTJ,QAASG,GAAKkB,GACV,GAAgBC,GAAZC,EAAS,CACb,KAAKD,IAAOD,GACJA,EAAIvC,eAAewC,IAAe,UAAPA,GAC3BC,GAGR,OAAOA,GAEX,QAASC,GAAU3H,EAAS4H,EAAMC,GAAlC,GAIQC,GACAJ,EAOIK,CAIR,OAfKH,KACDA,EAAO,UAEPE,EAAS9H,EAAQ4H,KACjBF,GACAM,IAAKF,EAAOE,IACZnH,MAAOiH,EAAOjH,MACdC,OAAQgH,EAAOhH,OACfF,KAAMkH,EAAOlH,MAEbR,GAAQmB,QAAQkB,OAASrC,GAAQ6H,UAAY7H,GAAQ8H,cAAgBL,IACjEE,EAAO3H,GAAQyG,MAAM7G,GAAW,KACpC0H,EAAOM,KAAOpJ,EAAOuJ,YAAcrC,SAASsC,gBAAgBC,UAC5DX,EAAO9G,MAAQhC,EAAO0J,YAAcP,EAAOjC,SAASsC,gBAAgBzB,YAEjEe,EAYX,QAASa,GAAaC,GAClB,GAAIC,KAIJ,OAHAxC,IAAsB,gBAAVuC,GAAqBA,EAAMtJ,MAAM,KAAOsJ,EAAO,SAAUtC,GACjEuC,EAAQvC,GAAOwC,OAEZD,EAEX,QAASE,GAAG3I,GACR,MAAO,IAAIG,IAAMsI,QAAQG,QAAQ5I,GAiCrC,QAAS6I,GAAwBC,EAASC,EAAUC,EAASC,GAsBzD,aArBWH,KAAYI,KACf5E,EAAWyE,KACXE,EAAWF,EACXA,EAAW,IACXC,GAAU,GAEV1E,EAAW0E,KACXC,EAAWD,EACXA,GAAU,SAEHD,KAAaI,KACpBH,EAAUD,EACVA,EAAW,KAEfD,GACIL,QAASK,EACTC,SAAUA,EACVC,QAASA,EACTC,SAAUA,IAGXG,IACHX,WACAM,SAAU,IACVC,SAAS,EACTK,KAAMC,GACNC,SAAUD,GACVE,MAAM,GACPV,GACCW,iBAAkBX,EAAQG,SAC1BA,SAAUK,KAGlB,QAASI,GAAQ1J,EAAS8I,EAASC,EAAUC,EAASC,GAElD,IADA,GAAsCU,GAAlCzD,EAAM,EAAGrG,EAASG,EAAQH,OACvBqG,EAAMrG,EAAQqG,IACjByD,EAAWhL,EAAEqB,EAAQkG,IACrByD,EAASC,MAAM,WACXnB,EAAQoB,QAAQF,EAAUd,EAAwBC,EAASC,EAAUC,EAASC,KAGtF,OAAOjJ,GAEX,QAAS8J,GAAY9J,EAAS+J,EAASjB,EAASkB,GAO5C,MANID,KACAA,EAAUA,EAAQ7K,MAAM,KACxB+G,GAAK8D,EAAS,SAAU7D,EAAKC,GACzBnG,EAAQ8J,YAAY3D,EAAO6D,MAG5BhK,EAsBX,QAASiK,GAAW9D,GAChB,OAAQ,GAAKA,GAAO/G,QAAQ8K,EAAW,SAAS9K,QAAQ+K,EAAU,QAAQ/K,QAAQgL,EAAU,QAAQhL,QAAQiL,EAAa,UAAUjL,QAAQkL,EAAY,SAE3J,QAASC,GAASpE,GACd,GAAIqE,EACJ,KACIA,EAAW5L,EAAO6L,mBAAmBtE,GACvC,MAAOuE,GACLF,EAAWrE,EAAM/G,QAAQ,iCAAkC,SAAUuL,EAAGC,EAAIC,GACxE,MAAOC,QAAOC,aAAaC,SAAS,MAAQJ,GAAMC,GAAK,OAG/D,MAAOL,GAkVX,QAASS,GAAYjL,EAASkL,GAC1B,GAAI/E,EAoBJ,OAnB+B,KAA3B+E,EAAOzE,QAAQ,UACfyE,EAASA,EAAO1L,UAAU,GAC1B0L,EAASA,EAAO5L,OAAO,GAAG+F,cAAgB6F,EAAO1L,UAAU,IAE/D0L,EAASA,EAAO9L,QAAQ+L,GAAY,OACpChF,EAAQnG,EAAQoL,aAAa,QAAUjL,GAAMkL,GAAKH,GACpC,OAAV/E,EACAA,EAAQtH,EACS,SAAVsH,EACPA,EAAQ,KACS,SAAVA,EACPA,GAAQ,EACS,UAAVA,EACPA,GAAQ,EACDmF,GAAanJ,KAAKgE,IAAoB,QAAV+E,EACnC/E,EAAQoF,WAAWpF,GACZqF,GAAWrJ,KAAKgE,KAAWsF,GAAiBtJ,KAAKgE,KACxDA,EAAYuF,SAAS,WAAavF,EAAQ,QAEvCA,EAEX,QAASwF,GAAa3L,EAAS8I,EAASvF,GACpC,GAAiB2H,GAAQ/E,EAArBuB,KAA4BkE,EAAO5L,EAAQoL,aAAa,QAAUjL,GAAMkL,GAAK,OACjF,KAAKH,IAAUpC,GACX3C,EAAQ8E,EAAYjL,EAASkL,GACzB/E,IAAUtH,IACNgN,GAAe1J,KAAK+I,IAAmB,UAARU,IACV,gBAAVzF,GACHxH,EAAE,IAAMwH,GAAOtG,OACfsG,EAAQhG,GAAMqK,SAAS7L,EAAE,IAAMwH,GAAO2F,QAC/BvI,IACP4C,EAAQhG,GAAMqK,SAASjH,EAAO4C,KAGlCA,EAAQnG,EAAQoL,aAAaF,IAGrCxD,EAAOwD,GAAU/E,EAGzB,OAAOuB,GA0FX,QAASqE,GAAoBC,EAAGC,GAC5B,MAAOtN,GAAEuN,SAASF,EAAGC,MAAU,EAEnC,QAASE,KACL,GAAIC,GAASzN,EAAE+J,KACf,OAAO/J,GAAE0N,QAAQD,EAAOE,KAAK,QAAUnM,GAAMkL,GAAK,SAC9C,SACA,cACA,mBACOe,EAAOhK,GAAG,YAmPzB,QAASmK,GAAUvM,EAASwM,GACxB,GAAIC,GAAWzM,EAAQyM,SAASpH,aAChC,QAAQ,sCAAsClD,KAAKsK,IAAazM,EAAQ0M,SAAW,MAAQD,EAAWzM,EAAQ2M,MAAQH,EAAmBA,IAAqBI,EAAQ5M,GAE1K,QAAS4M,GAAQ5M,GACb,MAAOrB,GAAEkO,KAAKC,QAAQF,QAAQ5M,KAAarB,EAAEqB,GAAS+M,UAAUC,UAAUC,OAAO,WAC7E,MAAqC,WAA9BtO,EAAEuB,IAAIwI,KAAM,gBACpB7I,OAmIP,QAASqN,GAAYC,EAAUC,GAC3B,MAAO,IAAIF,GAAYG,GAAGhE,KAAK8D,EAAUC,GAzuFhD,GACoKE,GAiE7JhJ,EAGAiJ,EAGAC,EAGAC,EA6FAC,EAA6BC,EAAiCC,EAA8BC,EAA4BC,EAA6BC,EAA4BjO,EA4lDjLkO,EAoBAvF,EAuGAyB,EAAkBC,EAAiBE,EAAoBC,EAAmBF,EAe1E6D,EA4DAC,EAmBGC,GA4IHC,GAyFAC,GA2BAxC,GAA+BL,GAAkEC,GAA4DN,GA0O7JmD,GAOAC,GA+JAC,GAUAC,GACAC,GAwCAC,GAgDAC,GAEGC,GAqBHC,GAcAC,GA+aAC,GAMAC,GAzqGA9O,GAAQvB,EAAOuB,MAAQvB,EAAOuB,QAAW+O,aAAgB9F,GAASzK,EAAEyK,OAAQnD,GAAOtH,EAAEsH,KAAMkJ,GAAUxQ,EAAEwQ,QAASC,GAAQzQ,EAAEyQ,MAAO9F,GAAO3K,EAAE2K,KAAM5I,GAAO4G,KAAgB+H,GAAOzQ,EAAOyQ,SAAYjP,MAAc8B,GAAgB,IAAKoN,GAAe,uBAAwB9O,GAAkB,sEAAuE8K,GAAe,uBAAwBiE,GAAW,WAAYrG,GAAS,SAAUsG,GAAS,SAAUtL,GAAS,SAAUuL,GAAO,OAAQtG,GAAU,UAAW3E,GAAY,YAAakL,MAAkBC,MAAkBC,MAAWA,MAAOC,GAAoB,WAC9lB,GAAIC,GAAKC,EAAaC,EAAMC,EAAMnH,EAASnE,EAAOuL,EAAS7M,UAAU,OAAUD,EAAI,EAAGvD,EAASwD,UAAUxD,OAAQsQ,GAAO,CAaxH,KAZsB,iBAAXD,KACPC,EAAOD,EACPA,EAAS7M,UAAUD,OACnBA,KAEkB,gBAAX8M,IAAwBE,OAAO9L,WAAW4L,KACjDA,MAEA9M,IAAMvD,IACNqQ,EAASxH,KACTtF,KAEGA,EAAIvD,EAAQuD,IACf,GAAgC,OAA3B0F,EAAUzF,UAAUD,IACrB,IAAK6M,IAAQnH,GACG,WAARmH,GAA6B,UAARA,GAA4B,KAARA,IAG7CH,EAAMI,EAAOD,GACbD,EAAOlH,EAAQmH,GACXC,IAAWF,IAGXG,GAAQH,IAASI,OAAOC,cAAcL,KAAUD,EAAcK,OAAOjB,QAAQa,MACzED,GACAA,GAAc,EACdpL,EAAQmL,GAAOM,OAAOjB,QAAQW,GAAOA,MAErCnL,EAAQmL,GAAOM,OAAOC,cAAcP,GAAOA,KAE/CI,EAAOD,GAAQJ,GAAkBM,EAAMxL,EAAOqL,IACvCA,IAASnR,IAChBqR,EAAOD,GAAQD,IAK/B,OAAOE,GAEf/P,IAAMwC,QAAU,cAAcvD,QAAQ,aAAc,IAGpDN,EAAMsK,OAAS,SAAUkH,GACrB,GACOC,GAEAlD,EAHHmD,EAAO,aACIC,EAAO/H,KAAMgI,EAAWJ,GAASA,EAAMjH,KAAOiH,EAAMjH,KAAO,WAClEoH,EAAKE,MAAMjI,KAAMrF,WAEzBmN,GAAKI,UAAYH,EAAKG,UACtBvD,EAAKqD,EAASrD,GAAKqD,EAASE,UAAY,GAAIJ,EAC5C,KAAKD,IAAUD,GAEPjD,EAAGkD,GADc,MAAjBD,EAAMC,IAAmBD,EAAMC,GAAQpM,cAAgB0M,OAC1CzH,IAAO,KAAUoH,EAAKI,UAAUL,GAASD,EAAMC,IAE/CD,EAAMC,EAK3B,OAFAlD,GAAGlJ,YAAcuM,EACjBA,EAAStH,OAASqH,EAAKrH,OAChBsH,GAEX5R,EAAM8R,UAAUE,aAAe,SAAUhI,GACrCJ,KAAKI,QAAU5F,KAAewF,KAAKI,QAASA,IAE5CxE,EAAanE,GAAMmE,WAAa,SAAU+I,GAC1C,MAAqB,kBAAPA,IAEdE,EAAiB,WACjB7E,KAAKqI,mBAAoB,GAEzBvD,EAAqB,WACrB,MAAO9E,MAAKqI,qBAAsB,GAElCtD,EAAa3O,EAAMsK,QACnBC,KAAM,WACFX,KAAKsI,YAETC,KAAM,SAAUC,EAAWC,EAAUC,GACjC,GAAiBlL,GAAyErG,EAAQwR,EAAUC,EAA4DC,EAApKd,EAAO/H,KAAW8I,QAAoBN,KAAchI,IAAUgI,GAAaA,EAAsCO,QAA4BN,KAAa5B,EAC9J,IAAI4B,IAAatS,EAAW,CACxB,IAAKqH,IAAOgL,GACRT,EAAKQ,KAAK/K,EAAKgL,EAAUhL,GAE7B,OAAOuK,GAEX,IAAKvK,EAAM,EAAGrG,EAAS2R,EAAW3R,OAAQqG,EAAMrG,EAAQqG,IACpDgL,EAAYM,EAAWtL,GACvBoL,EAAUG,EAAqBN,EAAWA,EAASD,GAC/CI,IACIF,IACAC,EAAWC,EACXA,EAAU,WACNb,EAAKiB,OAAOR,EAAWI,GACvBD,EAASV,MAAMF,EAAMpN,YAEzBiO,EAAQD,SAAWA,GAEvBE,EAASd,EAAKO,QAAQE,GAAaT,EAAKO,QAAQE,OAChDK,EAAOI,KAAKL,GAGpB,OAAOb,IAEXW,IAAK,SAAUI,EAAYL,GACvB,MAAOzI,MAAKuI,KAAKO,EAAYL,GAAU,IAE3C9R,MAAO,SAAU6R,EAAWC,GACxB,GAAiBjL,GAAyErG,EAAQyR,EAA4DC,EAA1Jd,EAAO/H,KAAW8I,QAAoBN,KAAchI,IAAUgI,GAAaA,EAA4BO,QAA4BN,KAAa5B,EACpJ,KAAKrJ,EAAM,EAAGrG,EAAS2R,EAAW3R,OAAQqG,EAAMrG,EAAQqG,IACpDgL,EAAYM,EAAWtL,GACvBoL,EAAUG,EAAqBN,EAAWA,EAASD,GAC/CI,IACAC,EAASd,EAAKO,QAAQE,GAAaT,EAAKO,QAAQE,OAChDK,EAAOK,QAAQN,GAGvB,OAAOb,IAEXoB,QAAS,SAAUX,EAAWhK,GAC1B,GAAmDhB,GAAKrG,EAApD4Q,EAAO/H,KAAM6I,EAASd,EAAKO,QAAQE,EACvC,IAAIK,EAAQ,CAOR,IANArK,EAAIA,MACJA,EAAE4K,OAASrB,EACXvJ,EAAE6J,mBAAoB,EACtB7J,EAAEqG,eAAiBA,EACnBrG,EAAEsG,mBAAqBA,EACvB+D,EAASA,EAAO3B,QACX1J,EAAM,EAAGrG,EAAS0R,EAAO1R,OAAQqG,EAAMrG,EAAQqG,IAChDqL,EAAOrL,GAAK6L,KAAKtB,EAAMvJ,EAE3B,OAAOA,GAAE6J,qBAAsB,EAEnC,OAAO,GAEXW,OAAQ,SAAUR,EAAWI,GACzB,GAAmDpL,GAA/CuK,EAAO/H,KAAM6I,EAASd,EAAKO,QAAQE,EACvC,IAAIA,IAAcrS,EACd4R,EAAKO,eACF,IAAIO,EACP,GAAID,EACA,IAAKpL,EAAMqL,EAAO1R,OAAS,EAAGqG,GAAO,EAAGA,IAChCqL,EAAOrL,KAASoL,GAAWC,EAAOrL,GAAKmL,WAAaC,GACpDC,EAAOS,OAAO9L,EAAK,OAI3BuK,GAAKO,QAAQE,KAGrB,OAAOT,MAiBX/C,EAAqB,OAAQC,EAAe,iBAAkBC,EAAqB,QAASC,EAAc,aAAcC,EAAqB,OAAQC,EAAc,aAAcjO,GAC7K,GACA,IACA,KACA,MACA,QAERwN,GACI2E,UAAW,OACXC,cAAc,EACdC,OAAQ,SAAU3H,EAAU1G,GACxB,GAAIoC,GAAKrG,EAAQiM,EAAO,EACxB,KAAK5F,EAAM,EAAGrG,EAASiE,EAAKjE,OAAQqG,EAAMrG,EAAQqG,IAC9C4F,GAAQtB,EAAS1G,EAAKoC,GAE1B,OAAO4F,IAEXsG,QAAS,SAAU5H,EAAU1B,GACzB,GAAgPuE,GAAIgF,EAAOnM,EAAvPoM,EAAWlJ,MAAWV,KAAMI,GAAUmJ,EAAYK,EAASL,UAAWM,EAAeN,EAAU1R,MAAMmN,GAAoB,GAAIwE,EAAeI,EAASJ,aAAcM,EAAe,wDACtL,IAAIlO,EAAWkG,GACX,MAAOA,EAKX,KAHAgI,GAAgBN,EAAe,QAAUD,EAAY,KAAO,GAC5DO,GAAgB,gBAChBH,EAAQ7H,EAASpL,QAAQwO,EAAoB,aAAaxO,QAAQuO,EAAc,2BAA2BvO,QAAQyO,EAAa,KAAKzO,QAAQ0O,EAAoB,aAAa5O,MAAM,KAC/KgH,EAAM,EAAGA,EAAMmM,EAAMxS,OAAQqG,IAC9BsM,GAAgBzT,EAAYsT,EAAMnM,GAAMA,EAAM,IAAM,EAExDsM,IAAgBN,EAAe,KAAO,IACtCM,GAAgB,uBAChBA,EAAeA,EAAapT,QAAQ2O,EAAa,IACjD,KAGI,MAFAV,GAAS3B,SAAS6G,EAAcC,GAChCnF,EAAGoF,WAAanL,KAAK5E,MAAM2P,EAAMxS,OAAS,GACnCwN,EACT,MAAOnG,GACL,KAAUwL,OAAMvS,GAAMwS,OAAO,8CAAmDnI,EAAUgI,OAarG,WAmBG,QAASI,GAAMC,GAEX,MADAC,GAAUC,UAAY,EACfD,EAAU3Q,KAAK0Q,GAAU,IAAMA,EAAOzT,QAAQ0T,EAAW,SAAU9G,GACtE,GAAIgH,GAAIC,EAAKjH,EACb,cAAcgH,KAAM9J,GAAS8J,EAAI,OAAS,OAAShH,EAAEkH,WAAW,GAAGC,SAAS,KAAKvD,YAChF,IAAM,IAAMiD,EAAS,IAE9B,QAAS1N,GAAIsC,EAAK2L,GACd,GAAIhQ,GAAGiQ,EAAGC,EAAGzT,EAAoB0T,EAA8B3L,EAA1C4L,EAAOC,EAActN,EAAQiN,EAAO3L,EAQzD,IAPItB,SAAgBA,KAAUjC,UAAiBiC,GAAMuN,SAAWnE,KAC5DpJ,EAAQA,EAAMuN,OAAOjM,UAEdkM,KAAQpE,KACfpJ,EAAQwN,EAAI5B,KAAKqB,EAAQ3L,EAAKtB,IAElCyB,QAAczB,GACVyB,IAASsB,GACT,MAAO0J,GAAMzM,EACV,IAAIyB,IAAS4H,GAChB,MAAOoE,UAASzN,GAAgBA,EAAP2E,GAAgB2E,EACtC,IAAI7H,IAASuB,IAAWvB,IAAS6H,GACpC,MAActJ,GAAP2E,EACJ,IAAIlD,IAAS1D,GAAQ,CACxB,IAAKiC,EACD,MAAOsJ,GAIX,IAFAgE,GAAOI,EACPN,KAC8B,mBAA1BJ,EAASxC,MAAMxK,GAA6B,CAE5C,IADAtG,EAASsG,EAAMtG,OACVuD,EAAI,EAAGA,EAAIvD,EAAQuD,IACpBmQ,EAAQnQ,GAAK+B,EAAI/B,EAAG+C,IAAUsJ,EAIlC,OAFA6D,GAAuB,IAAnBC,EAAQ1T,OAAe,KAAO4T,EAAM,MAAQA,EAAMF,EAAQpU,KAAK,MAAQsU,GAAO,KAAOD,EAAO,IAAM,IAAMD,EAAQpU,KAAK,KAAO,IAChIsU,EAAMD,EACCF,EAEX,GAAIK,SAAcA,KAAQzP,GAEtB,IADArE,EAAS8T,EAAI9T,OACRuD,EAAI,EAAGA,EAAIvD,EAAQuD,UACTuQ,GAAIvQ,KAAO8F,KAClBmK,EAAIM,EAAIvQ,GACRkQ,EAAInO,EAAIkO,EAAGlN,GACPmN,GACAC,EAAQ5B,KAAKiB,EAAMS,IAAMI,EAAM,KAAO,KAAOH,QAKzD,KAAKD,IAAKlN,GACF0K,OAAO5L,eAAe8M,KAAK5L,EAAOkN,KAClCC,EAAInO,EAAIkO,EAAGlN,GACPmN,GACAC,EAAQ5B,KAAKiB,EAAMS,IAAMI,EAAM,KAAO,KAAOH,GAO7D,OAFAA,GAAuB,IAAnBC,EAAQ1T,OAAe,KAAO4T,EAAM,MAAQA,EAAMF,EAAQpU,KAAK,MAAQsU,GAAO,KAAOD,EAAO,IAAM,IAAMD,EAAQpU,KAAK,KAAO,IAChIsU,EAAMD,EACCF,GA9Ef,GAA4IG,GAAKI,EAQ1IF,EARHb,EAAY,2HAAyIG,GACjJa,KAAM,MACNC,KAAM,MACNC,KAAM,MACNC,KAAM,MACNC,KAAM,MACNC,IAAK,MACLC,KAAM,QACFjB,KAAcA,eACf1O,MAAKmM,UAAU8C,SAAWnE,KACjC9K,KAAKmM,UAAU8C,OAAS,WACpB,GAAIjD,GAAO/H,IACX,OAAOkL,UAASnD,EAAK4D,WAAa5U,EAAIgR,EAAK6D,iBAAkB,GAAK,IAAM7U,EAAIgR,EAAK8D,cAAgB,GAAK,IAAM9U,EAAIgR,EAAK+D,cAAgB,IAAM/U,EAAIgR,EAAKgE,eAAiB,IAAMhV,EAAIgR,EAAKiE,iBAAmB,IAAMjV,EAAIgR,EAAKkE,iBAAmB,IAAM,MAEnP7J,OAAO8F,UAAU8C,OAASkB,OAAOhE,UAAU8C,OAASmB,QAAQjE,UAAU8C,OAAS,WAC3E,MAAOhL,MAAK2L,kBAkEThF,IAAKyF,YAAcvF,KAC1BF,GAAKyF,UAAY,SAAU3O,EAAO4O,EAAUC,GACxC,GAAI5R,EAGJ,IAFAqQ,EAAM,GACNI,EAAS,SACEmB,KAAUxF,GACjB,IAAKpM,EAAI,EAAGA,EAAI4R,EAAO5R,GAAK,EACxByQ,GAAU,eAEAmB,KAAU9L,KACxB2K,EAASmB,EAGb,IADArB,EAAMoB,EACFA,SAAmBA,KAAaxF,WAAoBwF,KAAa7Q,UAAiB6Q,GAASlV,SAAW2P,IACtG,KAAUkD,OAAM,iBAEpB,OAAOvN,GAAI,IAAM8P,GAAI9O,SAIhC,WAgIG,QAAS+O,GAAYC,GACjB,GAAIA,EAAS,CACT,GAAIA,EAAQC,aACR,MAAOD,EAEX,UAAWA,KAAYjM,GAAQ,CAC3B,GAAIgG,GAAW/O,GAAM+O,QACrB,OAAOA,GAASiG,IAAYjG,EAASiG,EAAQjW,MAAM,KAAK,KAAO,KAEnE,MAAO,MAEX,MAAO,MAEX,QAASmW,GAAWF,GAIhB,MAHIA,KACAA,EAAUD,EAAYC,IAEnBA,GAAWhV,GAAM+O,SAASoG,QAerC,QAASC,GAAWC,EAAM7C,EAAQwC,GAC9BA,EAAUE,EAAWF,EACrB,IAAIM,GAAWN,EAAQO,UAAUC,SAAUC,EAAOH,EAASG,KAAMC,EAASJ,EAASI,MAEnF,OADAlD,GAAS8C,EAASK,SAASnD,IAAWA,EAC/BA,EAAOvT,QAAQ2W,EAAkB,SAAUxV,GAAV,GAChCyV,GACAtO,EACAK,CA8DJ,OA7Dc,MAAVxH,EACAmH,EAAS8N,EAAKS,UACG,OAAV1V,EACPmH,EAASjI,EAAI+V,EAAKS,WACD,QAAV1V,EACPmH,EAASkO,EAAKM,UAAUV,EAAKW,UACZ,SAAV5V,EACPmH,EAASkO,EAAKQ,MAAMZ,EAAKW,UACR,MAAV5V,EACPmH,EAAS8N,EAAKa,WAAa,EACV,OAAV9V,EACPmH,EAASjI,EAAI+V,EAAKa,WAAa,GACd,QAAV9V,EACPmH,EAASmO,EAAOK,UAAUV,EAAKa,YACd,SAAV9V,EACPmH,EAASmO,EAAOO,MAAMZ,EAAKa,YACV,OAAV9V,EACPmH,EAASjI,EAAI+V,EAAKc,cAAgB,KACjB,SAAV/V,EACPmH,EAASjI,EAAI+V,EAAKc,cAAe,GAChB,MAAV/V,EACPmH,EAAS8N,EAAKe,WAAa,IAAM,GAChB,OAAVhW,EACPmH,EAASjI,EAAI+V,EAAKe,WAAa,IAAM,IACpB,MAAVhW,EACPmH,EAAS8N,EAAKe,WACG,OAAVhW,EACPmH,EAASjI,EAAI+V,EAAKe,YACD,MAAVhW,EACPmH,EAAS8N,EAAKgB,aACG,OAAVjW,EACPmH,EAASjI,EAAI+V,EAAKgB,cACD,MAAVjW,EACPmH,EAAS8N,EAAKiB,aACG,OAAVlW,EACPmH,EAASjI,EAAI+V,EAAKiB,cACD,MAAVlW,EACPmH,EAAShH,GAAKgC,MAAM8S,EAAKkB,kBAAoB,KAC5B,OAAVnW,GACPmH,EAAS8N,EAAKkB,kBACVhP,EAAS,KACTA,EAAShH,GAAKgC,MAAMgF,EAAS,KAEjCA,EAASjI,EAAIiI,IACI,QAAVnH,EACPmH,EAASjI,EAAI+V,EAAKkB,kBAAmB,GACpB,OAAVnW,EACPmH,EAAS8N,EAAKe,WAAa,GAAKd,EAASkB,GAAG,GAAKlB,EAASmB,GAAG,GAC5C,QAAVrW,GACPyV,EAAUR,EAAKqB,oBACf9O,EAAOiO,EAAU,EACjBtO,GAAShH,GAAAA,GAAK6G,IAAIyO,EAAU,KAAe9W,MAAM,KAAK,GACtD8W,EAAUtV,GAAK6G,IAAIyO,GAAoB,GAATtO,EAC9BA,GAAUK,EAAO,IAAM,KAAOtI,EAAIiI,GAClCA,GAAU,IAAMjI,EAAIuW,IACH,OAAVzV,GAA4B,MAAVA,IACzBmH,EAAS8N,EAAKqB,oBAAsB,GACpC9O,EAAOL,EAAS,EAChBA,GAAShH,GAAAA,GAAK6G,IAAIG,IAAmBxI,MAAM,KAAK,GAChDwI,GAAUK,EAAO,IAAM,MAAkB,OAAVxH,EAAiBd,EAAIiI,GAAUA,IAE3DA,IAAW7I,EAAY6I,EAASnH,EAAMqP,MAAM,EAAGrP,EAAMV,OAAS,KAG7E,QAASiX,GAAapX,EAAQiT,EAAQwC,GAAtC,GAEQC,GAAqC2B,EAA+BC,EAAmCC,EAAmCC,EAAeC,EAAQC,EAAYC,EAAWC,EAAiBC,EAAoBC,EAAuBC,EAASC,EAAUC,EAAeC,EAAgBC,EAAqB1R,EAAeD,EAAKrG,EAAQiY,EAAIC,EAAUC,EAAmBC,EAAcC,EAAYC,EAAWC,EAASC,EAAUC,EAAcC,EAAeC,EAAgBC,EAAY7Y,EA2Bje8Y,EAmGIC,CA7HhB,IAFAxD,EAAUE,EAAWF,GACjBC,EAAeD,EAAQC,aAAc2B,EAAU3B,EAAawD,GAAQ5B,EAAY5B,EAAayD,SAAU5B,EAAU7B,EAAa6B,QAAQ,GAAIC,KAAmFM,EAAW9X,EAAS,EAAqDmY,EAAciB,EAAO3S,EAAQ2S,EAA0JL,KAC7d/Y,IAAWb,EACX,MAAOia,EAEX,KAAKlF,SAASlU,GACV,MAAOA,EAEX,KAAKiT,EACD,MAAOwC,GAAQlF,KAAKpQ,OAASH,EAAOqZ,iBAAmBrZ,GAAAA,CAG3D,IADA6X,EAAqByB,EAAqBC,KAAKtG,GACvB,CAepB,GAdAA,EAAS4E,EAAmB,GAAGlS,cAC/B+R,EAAwB,MAAXzE,EACb0E,EAAuB,MAAX1E,GACRyE,GAAcC,KACdjC,EAAegC,EAAahC,EAAa8D,SAAW9D,EAAa+D,QACjEpC,EAAU3B,EAAawD,GACvB5B,EAAY5B,EAAayD,SACzB1B,EAAS/B,EAAa+B,OACtBF,EAAU7B,EAAa6B,QAAQO,EAAW,EAAI,IAElDF,EAAkBC,EAAmB,GACjCD,IACAN,GAAaM,GAEF,MAAX3E,EAEA,MADI+F,GAAMpB,EAAkB5X,EAAO0Z,cAAcpC,GAAatX,EAAO0Z,gBAC9DV,EAAItZ,QAAQwZ,EAAOxD,EAAawD,GAiB3C,IAfIvB,IACA3X,GAAU,KAEdA,EAAS2Z,EAAM3Z,EAAQsX,GACvBQ,EAAW9X,EAAS,EACpBA,EAASA,EAAOR,MAAM0Z,GACtBnB,EAAU/X,EAAO,GACjBgY,EAAWhY,EAAO,GACd8X,IACAC,EAAUA,EAAQjY,UAAU,IAEhC2G,EAAQmT,EAAa7B,EAAS,EAAGA,EAAQ5X,OAAQuV,GAC7CsC,IACAvR,GAAS4Q,EAAUW,GAER,MAAX/E,IAAmB6E,EACnB,MAAOrR,EAGX,KADAzG,EAASoZ,EACJ5S,EAAM,EAAGrG,EAASoX,EAAQpX,OAAQqG,EAAMrG,EAAQqG,IACjD4R,EAAKb,EAAQ3X,OAAO4G,GAEhBxG,GADO,MAAPoY,EACU3R,EACI,MAAP2R,GAAqB,MAAPA,EACXX,EAEAW,CAGlB,OAAOpY,GAUX,IARIiT,EAAOlM,QAAQ,SAAckM,EAAOlM,QAAQ,SAAakM,EAAOlM,QAAQ,YACxEkM,EAASA,EAAOvT,QAAQma,EAAe,SAAUhZ,GAC7C,GAAIiZ,GAAYjZ,EAAMjB,OAAO,GAAGF,QAAQ,KAAM,IAAKqa,EAAUlZ,EAAMqP,MAAM,GAAGxQ,QAAQoa,EAAW,GAE/F,OADAtC,GAASvF,KAAK8H,GACPC,KAGf/G,EAASA,EAAOzT,MAAM,KAClBsY,GAAY7E,EAAO,GACnBA,EAASA,EAAO,GAChBqF,GAAoB,MACjB,IAAe,IAAXtY,GAAgBiT,EAAO,IAE9B,GADAA,EAASA,EAAO,GACZA,EAAOlM,QAAQkT,QAAgBhH,EAAOlM,QAAQmT,OAC9C,MAAOjH,OAGXA,GAASA,EAAO,EAyBpB,IAvBA2F,EAAe3F,EAAOlM,QAAQ,KAC9B8R,EAAgB5F,EAAOlM,QAAQ,KAC/B4Q,EAAYiB,MACZlB,EAAamB,MACTlB,IACA3X,GAAU,KAEV0X,GAA4C,OAA9BzE,EAAO4F,EAAgB,KACrC5F,EAASA,EAAOzT,MAAM,MAAMC,KAAK,IACjCiY,GAAa,IAEbA,GAAcC,KACdjC,EAAegC,EAAahC,EAAa8D,SAAW9D,EAAa+D,QACjEpC,EAAU3B,EAAawD,GACvB5B,EAAY5B,EAAayD,SACzB1B,EAAS/B,EAAa+B,QAE1BY,EAAWpF,EAAOlM,QAAQoT,MACtB9B,IACApF,EAASA,EAAOvT,QAAQ0a,EAAahB,IAEzCb,EAAetF,EAAOlM,QAAQmS,GAC9B/Y,EAAS8S,EAAO9S,OACZoY,MAmBA,GAlBAP,GAAWhY,GAAAA,GAAkBR,MAAM,KAE/BwY,EADAA,EAAS,GACE2B,EAAM3Z,EAAQ4H,KAAKC,IAAImQ,EAAS,KAEhCA,EAAS,GAExBA,EAAWA,EAASxY,MAAM0Z,GAAO,IAAME,EACvCX,EAAYxF,EAAOoH,YAAYH,GAAQ3B,EACvCC,EAAavF,EAAOoH,YAAYJ,GAAS1B,EACzCG,EAAUD,KACVE,EAAWH,KACXhS,EAAMwR,EAAS7X,OACVuY,GAAYC,IACb1F,EAASA,EAAOnT,UAAU,EAAGyY,GAAgBtF,EAAOnT,UAAUyY,EAAe,GAC7EpY,EAAS8S,EAAO9S,OAChBoY,KACA/R,EAAM,GAENkS,GAAWD,EAAYD,EACvBhS,EAAMiS,MACH,IAAID,EAAaC,EACpB,GAAIE,GAAYnS,EAAMgS,EAAY,CAE9B,IADIS,EAAUU,EAAM3Z,EAAQwY,EAAYV,GACjCmB,EAAQrZ,OAAOqZ,EAAQ9Y,OAAS,KAAO+Z,GAAQ1B,EAAa,GAAKA,EAAaC,GACjFD,IACAS,EAAUU,EAAM3Z,EAAQwY,EAAYV,EAExCtR,GAAMgS,MACCE,IAAWlS,EAAMiS,IACxBjS,EAAMiS,EA0BlB,IAtBAzY,EAAS2Z,EAAM3Z,EAAQwG,EAAKsR,GAC5BU,EAAavF,EAAOlM,QAAQkT,GAC5BnB,EAAiBL,EAAYxF,EAAOlM,QAAQmT,GAExCnB,EADAP,OAAoBC,MACZA,EACDD,OAAoBC,MACnBD,EAEAA,EAAaC,EAAYA,EAAYD,EAEjDA,EAAavF,EAAOoH,YAAYJ,GAChCxB,EAAYxF,EAAOoH,YAAYH,GAE3Bha,EADAsY,OAAoBC,MACdA,EACCD,OAAoBC,MACrBD,EAEAA,EAAaC,EAAYD,EAAaC,EAE5CM,GAAS5Y,IACTD,EAAM6Y,GAENA,MAAa,CAab,IAZAtS,GAAQzG,GAAAA,GAAkBR,MAAM0Z,GAChCnB,EAAUtR,EAAM,GAChBuR,EAAWvR,EAAM,IAAM2S,EACvBnB,EAAgBF,EAAQ5X,OACxB+X,EAAiBF,EAAS7X,OACtB2X,GAAY9X,MAAe,IAC3B8X,GAAW,GAEf9X,EAASiT,EAAOnT,UAAU,EAAGiZ,GACzBjB,IAAaQ,IACbtY,GAAU,KAETwG,EAAMuS,EAAOvS,EAAMrG,EAAQqG,IAAO,CAEnC,GADA4R,EAAKnF,EAAOrT,OAAO4G,GACf+R,OACA,GAAIrY,EAAMsG,EAAMyR,EAAe,CAC3BjY,GAAU+X,CACV,YAUJ,IAPIU,OAAmBA,EAAYjS,IAC/B2R,EAAciB,GAEdb,EAAe/R,GAAOyR,GAAiBM,EAAe/R,OACtDxG,GAAU+X,EACVvR,EAAM+R,GAENA,IAAiB/R,EAAK,CACtBxG,IAAWgY,EAAWX,EAAU+B,GAASpB,EACzCxR,GAAOtG,EAAMqY,EAAe,CAC5B,UAGJH,IAAO8B,GACPla,GAAUoY,EACVD,EAAcC,GACPA,IAAO6B,IACdja,GAAUmY,GASlB,GANIE,IACArY,EAAS4Z,EAAa5Z,EAAQ+Y,GAASjB,IAAaQ,EAAoB,EAAI,GAAI1Q,KAAK3G,IAAIf,EAAK+X,EAAgBc,GAAQrD,IAEtHxV,GAAO6Y,IACP/Y,GAAUiT,EAAOnT,UAAUI,EAAM,IAEjCwX,GAAcC,EAAW,CAEzB,IADAlR,EAAQ2S,EACH5S,EAAM,EAAGrG,EAASH,EAAOG,OAAQqG,EAAMrG,EAAQqG,IAChD4R,EAAKpY,EAAOJ,OAAO4G,GACnBC,GAAgB,MAAP2R,GAAqB,MAAPA,EAAaX,EAASW,CAEjDpY,GAASyG,EAGb,GADAtG,EAASqX,EAASrX,OAEd,IAAKqG,EAAM,EAAGA,EAAMrG,EAAQqG,IACxBxG,EAASA,EAAON,QAAQsa,EAAaxC,EAAShR,IAI1D,MAAOxG,GAvcd,GAycO4Z,GAiCAD,EAWAlG,EApfA4C,EAAmB,gGAAiGiD,EAAuB,oBAAqBO,EAAgB,uCAAwCO,EAAc,MAAOhB,EAAQ,GAAIF,EAAQ,IAAKiB,EAAQ,IAAKF,EAAQ,IAAKC,EAAO,IAAKF,EAAc,KAAMM,EAAK,QAASC,KAAoB9G,QACtWhT,IAAM+O,SAAS,UACXe,KAAM+J,EACN5E,cACI6B,SAAU,MACV4B,SAAU,EACVqB,IAAK,IACLC,IAAK,IACLC,WAAY,GACZjB,SACIlC,SACI,OACA,OAEJ4B,SAAU,EACVqB,IAAK,IACLC,IAAK,IACLC,WAAY,GACZjD,OAAQ,KAEZ+B,UACIjJ,KAAM,YACNoK,KAAM,MACNpD,SACI,OACA,MAEJ4B,SAAU,EACVqB,IAAK,IACLC,IAAK,IACLC,WAAY,GACZjD,OAAQ,MAGhBzB,WACIC,UACIC,MACIQ,OACI,SACA,SACA,UACA,YACA,WACA,SACA,YAEJF,WACI,MACA,MACA,MACA,MACA,MACA,MACA,OAEJoE,YACI,KACA,KACA,KACA,KACA,KACA,KACA,OAGRzE,QACIO,OACI,UACA,WACA,QACA,QACA,MACA,OACA,OACA,SACA,YACA,UACA,WACA,YAEJF,WACI,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,QAGRS,IACI,KACA,KACA,MAEJC,IACI,KACA,KACA,MAEJd,UACIyE,EAAG,WACHC,EAAG,sBACHC,EAAG,iCACHrV,EAAG,mBACHsV,EAAG,sBACHC,EAAG,UACHC,EAAG,UACHC,EAAG,8BACHC,EAAG,UACHC,EAAG,aACHC,EAAG,iCACHC,EAAG,aACHC,EAAG,cAEPC,IAAK,IACLC,IAAK,IACLC,SAAU,EACVC,gBAAiB,QAuB7Bnb,GAAMgV,QAAU,SAAUoG,GACtB,GAA+BpG,GAA3BjG,EAAW/O,GAAM+O,QACrB,OAAIqM,KAAgB1c,EAKTqQ,EAASoG,SAJhBH,EAAUD,EAAYqG,IAAgBrM,EAAS8K,GAC/C7E,EAAQM,SAAWN,EAAQO,UAAUC,SACrCzG,EAASoG,QAAUH,EAFnBA,IAORhV,GAAM+U,YAAcA,EACpB/U,GAAMkV,WAAaA,EACnBlV,GAAMgV,QAAQ6E,GA0SVV,EAAe,SAAU5Z,EAAQ+Y,EAAO7Y,EAAKwV,GAA9B,GAIXqC,GAASE,EACTzR,EAAKmM,EAAOlM,EACZqV,EALAvD,EAAevY,EAAO+G,QAAQ2O,EAAawD,IAC3C6C,EAAarG,EAAagF,UAAUxK,QACpCwK,EAAYqB,EAAWC,OAO3B,IAHA9b,EAAMqY,OAAsBA,EAAerY,EAAM,EACjD6X,EAAU/X,EAAOF,UAAUiZ,EAAO7Y,GAClC+X,EAAgBF,EAAQ5X,OACpB8X,GAAiByC,EAAW,CAG5B,IAFAlU,EAAMyR,EACNtF,KACOnM,MAQH,GAPAC,EAAQsR,EAAQjY,UAAU0G,EAAMkU,EAAWlU,GACvCC,GACAkM,EAAMV,KAAKxL,GAEfD,GAAOkU,EACPoB,EAAeC,EAAWC,QAC1BtB,EAAYoB,IAAiB3c,EAAY2c,EAAepB,EACtC,IAAdA,EAAiB,CACblU,EAAM,GACNmM,EAAMV,KAAK8F,EAAQjY,UAAU,EAAG0G,GAEpC,OAGRuR,EAAUpF,EAAMrJ,UAAU7J,KAAKiW,EAAayE,IAC5Cna,EAASA,EAAOF,UAAU,EAAGiZ,GAAShB,EAAU/X,EAAOF,UAAUI,GAErE,MAAOF,IAEP2Z,EAAQ,SAAUlT,EAAO6Q,EAAWQ,GASpC,MARAR,GAAYA,GAAa,EACzB7Q,GAAQA,GAAAA,GAAiBjH,MAAM,KAC/BiH,EAAQmB,KAAK+R,QAAQlT,EAAM,GAAK,KAAOA,EAAM,IAAMA,EAAM,GAAK6Q,EAAYA,KACtEQ,IACArR,GAASA,GAEbA,GAAQA,GAAAA,GAAiBjH,MAAM,KAC/BiH,IAAUA,EAAM,GAAK,KAAOA,EAAM,IAAMA,EAAM,GAAK6Q,GAAaA,IACzD7Q,EAAMwV,QAAQrU,KAAKsU,IAAI5E,EAAW,MAEzC7D,EAAW,SAAUhN,EAAO0V,EAAK1G,GACjC,GAAI0G,EAAK,CACL,GAAmC,kBAA/B5B,EAAelI,KAAK5L,GACpB,MAAOoP,GAAWpP,EAAO0V,EAAK1G,EAC3B,UAAWhP,KAAUqJ,GACxB,MAAOsH,GAAa3Q,EAAO0V,EAAK1G,GAGxC,MAAOhP,KAAUtH,EAAYsH,EAAQ,IAEzChG,GAAMwS,OAAS,SAAUkJ,GACrB,GAAIC,GAASzY,SACb,OAAOwY,GAAIzc,QAAQkQ,GAAc,SAAU/O,EAAOwb,EAAOC,GACrD,GAAI7V,GAAQ2V,EAAO9Q,SAAS+Q,EAAO,IAAM,EACzC,OAAO5I,GAAShN,EAAO6V,EAAoBA,EAAkBxc,UAAU,GAAK,OAGpFW,GAAM8b,eAAiB,SAAUtJ,GAI7B,MAH2B,QAAvBA,EAAO/C,MAAM,EAAG,KAChB+C,EAASA,EAAO/C,MAAM,EAAG+C,EAAO9S,OAAS,IAEtC8S,GAEXxS,GAAM+b,eAAiB,WACnB,IACI,MAAOpW,UAASqW,cAClB,MAAOjV,GACL,MAAOpB,UAASsC,gBAAgB+T,gBAGxChc,GAAMic,OAAS/C,EACflZ,GAAMsB,YAAc,SAAUzB,EAASqc,GACnC,MAAO1d,GAAEqB,GAASwB,WAAW6a,IAAiB,IAAU,GAE5Dlc,GAAMwB,aAAe,SAAU3B,EAASqc,GACpC,MAAO1d,GAAEqB,GAAS0B,YAAY2a,IAAiB,IAAU,GAE7Dlc,GAAMgT,SAAWA,KAEpB,WA8CG,QAASmJ,GAAWnW,EAAOsS,EAAO7Y,GAC9B,QAASuG,GAASsS,GAAStS,GAASvG,GAExC,QAAS2c,GAAoBC,GACzB,MAAOA,GAAWld,OAAO,GAE7B,QAASmd,GAAeC,GACpB,MAAO/d,GAAEge,IAAID,EAAaH,GAE9B,QAASK,GAAUpH,EAAMqH,GAChBA,GAA6B,KAApBrH,EAAKe,YACff,EAAKsH,SAAStH,EAAKe,WAAa,GAGxC,QAASwG,GAAWjZ,GAEhB,IADA,GAAIoC,GAAM,EAAGrG,EAASiE,EAAKjE,OAAQmd,KAC5B9W,EAAMrG,EAAQqG,IACjB8W,EAAM9W,IAAQpC,EAAKoC,GAAO,IAAIb,aAElC,OAAO2X,GAEX,QAASC,GAAeC,GACpB,GAAuB1Z,GAAnB2Z,IACJ,KAAK3Z,IAAY0Z,GACbC,EAAa3Z,GAAYuZ,EAAWG,EAAU1Z,GAElD,OAAO2Z,GAEX,QAASC,GAAWjX,EAAOwM,EAAQwC,EAASkI,GACxC,IAAKlX,EACD,MAAO,KAEX,IA4CyS2R,GAAIwF,EAAOzd,EAAQoX,EAASsG,EAAQC,EAAKC,EAASC,EAAeC,EAAeC,EAAaC,EAAeC,EAASvd,EA5C1Zwd,EAAY,SAAUxd,GAElB,IADA,GAAI6C,GAAI,EACDuP,EAAOzM,KAAS3F,GACnB6C,IACA8C,GAKJ,OAHI9C,GAAI,IACJ8C,GAAO,GAEJ9C,GACR4a,EAAY,SAAU1X,GACrB,GAAI2X,GAAK3S,EAAahF,IAAajC,OAAO,UAAYiC,EAAO,KAAM/F,EAAQ4F,EAAM+X,OAAOC,EAAU7X,GAAM/F,MAAM0d,EAC9G,OAAI1d,IACAA,EAAQA,EAAM,GACd4d,GAAY5d,EAAMV,OACXmL,SAASzK,EAAO,KAEpB,MACR6d,EAAiB,SAAUhI,EAAOiI,GAEjC,IADA,GAAkCpO,GAAMqO,EAA2CC,EAA/Enb,EAAI,EAAGvD,EAASuW,EAAMvW,OAA0B2e,EAAc,EAAGC,EAAW,EACzErb,EAAIvD,EAAQuD,IACf6M,EAAOmG,EAAMhT,GACbkb,EAAarO,EAAKpQ,OAClB0e,EAAWpY,EAAM+X,OAAOC,EAAUG,GAC9BD,IACAE,EAAWA,EAASlZ,eAEpBkZ,GAAYtO,GAAQqO,EAAaE,IACjCA,EAAcF,EACdG,EAAWrb,EAGnB,OAAIob,IACAL,GAAYK,EACLC,EAAW,GAEf,MACRC,EAAe,WACd,GAAIhX,IAAS,CAKb,OAJIvB,GAAM7G,OAAO6e,KAAcxL,EAAOzM,KAClCiY,IACAzW,GAAS,GAENA,GACR+N,EAAWN,EAAQO,UAAUC,SAAUgJ,EAAO,KAAMC,EAAQ,KAAMC,EAAM,KAAMhC,EAAQ,KAAM7G,EAAU,KAAM8I,EAAU,KAAMC,EAAe,KAAM7Y,EAAM,EAAGiY,EAAW,EAAG1E,GAAU,EAAOjE,EAAO,GAAI/Q,MAAQ6W,EAAkB7F,EAAS6F,iBAAmB,KAAM0D,EAAcxJ,EAAKc,aAU1R,KATK3D,IACDA,EAAS,KAEbsE,EAAUxB,EAASK,SAASnD,GACxBsE,IACAtE,EAASsE,GAEbtE,EAASA,EAAOzT,MAAM,IACtBW,EAAS8S,EAAO9S,OACTqG,EAAMrG,EAAQqG,IAEjB,GADA4R,EAAKnF,EAAOzM,GACRuT,EACW,MAAP3B,EACA2B,GAAU,EAEViF,QAGJ,IAAW,MAAP5G,EAAY,CAKZ,GAJAwF,EAAQS,EAAU,KACbtI,EAASwJ,aACVxJ,EAASwJ,WAAahC,EAAexH,EAASG,OAEtC,OAARiJ,GAAgBvB,EAAQ,EACxB,QAGJ,IADAuB,EAAMvB,EAAQ,EAAIU,EAAU,GAAKI,EAAe3I,EAASwJ,WAAoB,GAAT3B,EAAa,YAAc,UAAU,GAC7F,OAARuB,GAAgBvC,EAAWuC,EAAK,EAAG,IACnC,MAAO,UAER,IAAW,MAAP/G,EAAY,CAMnB,GALAwF,EAAQS,EAAU,KACbtI,EAASyJ,eACVzJ,EAASyJ,aAAejC,EAAexH,EAASI,SAEpD+I,EAAQtB,EAAQ,EAAIU,EAAU,GAAKI,EAAe3I,EAASyJ,aAAsB,GAAT5B,EAAa,YAAc,UAAU,GAC/F,OAAVsB,GAAkBtC,EAAWsC,EAAO,EAAG,IACvC,MAAO,KAEXA,IAAS,MACN,IAAW,MAAP9G,EAAY,CAGnB,GAFAwF,EAAQS,EAAU,KAClBY,EAAOX,EAAUV,GACJ,OAATqB,EACA,MAAO,KAEE,IAATrB,IAC+B,gBAApBhC,KACPA,EAAkB0D,EAAchU,SAASsQ,EAAiB,KAE9DqD,EAAOK,EAAcA,EAAc,IAAML,EACrCA,EAAOrD,IACPqD,GAAQ,UAGb,IAAW,MAAP7G,GAMP,GALAiG,EAAU,KACVlB,EAAQmB,EAAU,GACL,IAATnB,IACAA,EAAQ,GAEE,OAAVA,GAAkBP,EAAWO,EAAO,EAAG,IACvC,MAAO,UAER,IAAW,MAAP/E,GAGP,GAFAiG,EAAU,KACVlB,EAAQmB,EAAU,GACJ,OAAVnB,GAAkBP,EAAWO,EAAO,EAAG,IACvC,MAAO,UAER,IAAW,MAAP/E,GAGP,GAFAiG,EAAU,KACV/H,EAAUgI,EAAU,GACJ,OAAZhI,GAAoBsG,EAAWtG,EAAS,EAAG,IAC3C,MAAO,UAER,IAAW,MAAP8B,GAGP,GAFAiG,EAAU,KACVe,EAAUd,EAAU,GACJ,OAAZc,GAAoBxC,EAAWwC,EAAS,EAAG,IAC3C,MAAO,UAER,IAAW,MAAPhH,GASP,GARAwF,EAAQS,EAAU,KAClBxd,EAAQ4F,EAAM+X,OAAOC,EAAUb,GAAO/c,MAAM+K,EAAa,IACzDyT,EAAef,EAAUV,GACJ,OAAjByB,IACAA,EAAexT,WAAW,KAAOhL,EAAM,GAAI,IAC3Cwe,EAAe5e,GAAMic,OAAO2C,EAAc,GAC1CA,GAAgB,KAEC,OAAjBA,GAAyBzC,EAAWyC,EAAc,EAAG,KACrD,MAAO,UAER,IAAW,MAAPjH,GASP,GARAwF,EAAQS,EAAU,KAClBL,EAAgBjI,EAASkB,GACzBgH,EAAgBlI,EAASmB,GACX,IAAV0G,IACAI,EAAgBjB,EAAeiB,GAC/BC,EAAgBlB,EAAekB,IAEnCJ,EAASa,EAAeT,IACnBJ,IAAWa,EAAeV,GAC3B,MAAO,UAER,IAAW,MAAP5F,EAAY,CAGnB,GAFA0F,GAAM,EACNF,EAAQS,EAAU,KACgB,MAA9B5X,EAAM+X,OAAOC,EAAU,GAAY,CACnCO,GACA,UAGJ,GADAjB,EAAUtX,EAAM+X,OAAOC,EAAU,GAAG5d,MAAM+c,EAAQ,EAAI6B,EAAqBC,IACtE3B,EACD,MAAO,KAWX,IATAA,EAAUA,EAAQ,GAAGve,MAAM,KAC3B0e,EAAcH,EAAQ,GACtBI,EAAgBJ,EAAQ,IACnBI,GAAiBD,EAAY/d,OAAS,IACvCse,EAAWP,EAAY/d,OAAS,EAChCge,EAAgBD,EAAYpe,UAAU2e,GACtCP,EAAcA,EAAYpe,UAAU,EAAG2e,IAE3CP,EAAc5S,SAAS4S,EAAa,IAChCtB,EAAWsB,MAAkB,IAC7B,MAAO,KAEX,IAAIN,EAAQ,IACRO,EAAgBJ,EAAQ,GAAG,GAAKI,EAChCA,EAAgB7S,SAAS6S,EAAe,IACpCwB,MAAMxB,IAAkBvB,EAAWuB,MAAoB,KACvD,MAAO,UAGZ,IAAW,MAAP/F,EACP2B,GAAU,EACViF,QACG,KAAKA,IACR,MAAO,KAInB,OAAIrB,KAAW,QAAQlb,KAAKgE,EAAM+X,OAAOC,IAC9B,MAEXL,EAAoB,OAAVjB,GAA8B,OAAZ7G,GAAoB8I,GAAW,KAC9C,OAATH,GAA2B,OAAVC,GAA0B,OAARC,GAAgBf,GACnDa,EAAOK,EACPJ,EAAQpJ,EAAKa,WACbwI,EAAMrJ,EAAKS,YAEE,OAAT0I,IACAA,EAAOK,GAEC,OAARH,IACAA,EAAM,IAGVtB,GAAUV,EAAQ,KAClBA,GAAS,IAETW,GACII,IACAf,IAAUe,GAEVC,IACA7H,IAAY6H,GAEhB1X,EAAQ,GAAI1B,MAAKA,KAAK+Y,IAAImB,EAAMC,EAAOC,EAAKhC,EAAO7G,EAAS8I,EAASC,MAErE5Y,EAAQ,GAAI1B,MAAKka,EAAMC,EAAOC,EAAKhC,EAAO7G,EAAS8I,EAASC,GAC5DnC,EAAUzW,EAAO0W,IAEjB8B,EAAO,KACPxY,EAAMmZ,YAAYX,GAElBxY,EAAM8P,YAAc4I,GAAOrB,IAAQ3e,EAC5B,KAEJsH,GAEX,QAASoZ,GAA2BzX,GAChC,GAAIC,GAA+B,MAAxBD,EAAOoW,OAAO,EAAG,MAAkB,CAG9C,OAFApW,GAASA,EAAOtI,UAAU,GAC1BsI,EAA6C,GAApCkD,SAASlD,EAAOoW,OAAO,EAAG,GAAI,IAAWlT,SAASlD,EAAOtI,UAAU,GAAI,IACzEuI,EAAOD,EAElB,QAAS0X,GAAkBrK,GAA3B,GAIQsK,GAAgBC,EAAWxZ,EAH3BrG,EAASa,GAAKC,IAAIgf,EAAiB9f,OAAQ+f,EAAiB/f,QAC5D4V,EAAWN,EAAQM,UAAYN,EAAQO,UAAUC,SACjDG,EAAWL,EAASK,SAEpB+J,IACJ,KAAK3Z,EAAM,EAAGA,EAAMrG,EAAQqG,IAAO,CAE/B,IADAuZ,EAAiBE,EAAiBzZ,GAC7BwZ,EAAY,EAAGA,EAAYD,EAAe5f,OAAQ6f,IACnDG,EAAQlO,KAAKmE,EAAS2J,EAAeC,IAEzCG,GAAUA,EAAQC,OAAOF,EAAiB1Z,IAE9C,MAAO2Z,GAEX,QAASE,GAAkB5Z,EAAO0Z,EAAS1K,EAASkI,GAApD,GAIQnX,GACAsP,EACA3V,EACAmgB,CANJ,IAAmC,kBAA/B/F,EAAelI,KAAK5L,GACpB,MAAOA,EAMX,IAJID,EAAM,EACNsP,EAAO,KAGPrP,GAAiC,IAAxBA,EAAMM,QAAQ,QACvB+O,EAAOyK,EAAWhH,KAAK9S,IAUnB,MARAqP,GAAOA,EAAK,GACZwK,EAAWE,EAAajH,KAAKzD,EAAKhW,UAAU,IAC5CgW,EAAO,GAAI/Q,MAAKuG,SAASwK,EAAM,KAC3BwK,IACAA,EAAWT,EAA2BS,EAAS,IAC/CxK,EAAOrV,GAAMggB,SAASxP,MAAM6E,EAAM,GAClCA,EAAOrV,GAAMggB,SAASC,QAAQ5K,EAAM,KAAQwK,IAEzCxK,CASf,KANAL,EAAUhV,GAAMkV,WAAWF,GACtB0K,IACDA,EAAUL,EAAkBrK,IAEhC0K,EAAU1Q,GAAQ0Q,GAAWA,GAAWA,GACxChgB,EAASggB,EAAQhgB,OACVqG,EAAMrG,EAAQqG,IAEjB,GADAsP,EAAO4H,EAAWjX,EAAO0Z,EAAQ3Z,GAAMiP,EAASkI,GAE5C,MAAO7H,EAGf,OAAOA,GAxWX,GAAI6K,GAAyB,UAAWC,EAAiB,mBAAoBlB,EAAsB,gBAAiBD,EAAqB,uBAAwBc,EAAa,sBAAuBC,EAAe,UAAWP,OAGnN,IACA,IACA,MAGA,IACA,IACA,IACA,IACA,IACA,MAELC,IAEK,iCACA,8BACA,6BACA,0BACA,2BACA,yBACA,sBACA,qBACA,sBACA,sBACA,wBAGA,mBACA,mBACA,qBAGA,aACA,aACA,WACA,UAELtU,GACCiV,EAAG,WACHC,EAAG,WACHC,EAAG,UACJxG,KAAoB9G,QA8T3BhT,IAAMugB,UAAY,SAAUva,EAAO0Z,EAAS1K,GACxC,MAAO4K,GAAkB5Z,EAAO0Z,EAAS1K,GAAS,IAEtDhV,GAAMwgB,eAAiB,SAAUxa,EAAO0Z,EAAS1K,GAC7C,MAAO4K,GAAkB5Z,EAAO0Z,EAAS1K,GAAS,IAEtDhV,GAAM6K,SAAW,SAAU7E,EAAOgP,GAC9B,GAAIzN,GAASvH,GAAMoL,WAAWpF,EAAOgP,EAIrC,OAHIzN,KACAA,EAAkB,EAATA,GAENA,GAEXvH,GAAMoL,WAAa,SAAUpF,EAAOgP,EAASxC,GACzC,IAAKxM,GAAmB,IAAVA,EACV,MAAO,KAEX,UAAWA,KAAUqJ,GACjB,MAAOrJ,EAEXA,GAAQA,GAAAA,EACRgP,EAAUhV,GAAMkV,WAAWF,EAC3B,IAAkL9C,GAAOgF,EAArL3X,EAASyV,EAAQC,aAAc+D,EAAUzZ,EAAOyZ,QAASD,EAAWxZ,EAAOwZ,SAAU/B,EAAS+B,EAAS/B,OAAQyJ,EAAgBzH,EAAQhC,OAAQK,EAAWrR,EAAMM,QAAQ,IAC5K,OAAI6Z,GAAene,KAAKgE,IACpBA,EAAQoF,WAAWpF,EAAM/G,QAAQM,EAAO,KAAM,MAC1C2f,MAAMlZ,KACNA,EAAQ,MAELA,GAEPqR,EAAW,EACJ,MAEPA,EAAWA,KAEXrR,EAAMM,QAAQ0Q,OAAgBxE,GAAUA,EAAOtN,cAAcoB,QAAQ,SACrE/G,EAASwZ,EACT7G,EAAQ3S,EAAOuX,QAAQ,GAAG7X,QAAQ,IAAK+X,GAAQjY,MAAM,KACjDiH,EAAMM,QAAQ4L,EAAM,QAAYlM,EAAMM,QAAQ4L,EAAM,SACpDlM,EAAQA,EAAM/G,QAAQiT,EAAM,GAAI,IAAIjT,QAAQiT,EAAM,GAAI,IACtDmF,GAAW,IAERrR,EAAMM,QAAQma,QACrBvJ,GAAY,EACZ3X,EAASyZ,EACThC,EAASyJ,GAEbza,EAAQA,EAAM/G,QAAQ,IAAK,IAAIA,QAAQ+X,EAAQ,IAAI/X,QAAQihB,EAAwB,KAAKnhB,MAAMQ,EAAO,KAAKN,QAAQihB,EAAwB,MAAMlhB,KAAK,IAAIC,QAAQM,EAAO,KAAM,KAC9KyG,EAAQoF,WAAWpF,GACfkZ,MAAMlZ,GACNA,EAAQ,KACDqR,IACPrR,OAEAA,GAASkR,IACTlR,GAAS,KAENA,OAsMd,WAAA,GAkBO0a,GAQAC,EACAzgB,EAA2C0gB,EAAyCC,EA+FpFC,EAyGAzY,EAyDA0Y,EAGAC,EAAiCC,EAAsCpa,EAAmCG,CA9R9G/G,IAAQihB,WAAaxiB,EACrBuB,GAAQkhB,UAAY,SAAUC,GAC1B,GAAKlC,MAAMjf,GAAQihB,aAAgBE,EAE5B,CACH,GAAyC7Z,GAArC8Z,EAAM1b,SAAS2b,cAAc,MAMjC,OALAD,GAAIvf,MAAMyf,QAAU,oEACpBF,EAAIG,UAAY,SAChB7b,SAAS8b,KAAKC,YAAYL,GAC1BphB,GAAQihB,WAAa3Z,EAAS8Z,EAAIM,YAAcN,EAAIpa,YACpDtB,SAAS8b,KAAKG,YAAYP,GACnB9Z,EARP,MAAOtH,IAAQihB,YAWvBjhB,GAAQyG,MAAQ,SAAU7G,GACtB,MAAOrB,GAAEqB,GAASgiB,QAAQ,UAAUniB,OAAS,GAE7CghB,EAAQ/a,SAAS2b,cAAc,QACnC,KACIZ,EAAMc,UAAY,qBAClBvhB,GAAQ6hB,gBAAiB,EAC3B,MAAO/a,GACL9G,GAAQ6hB,gBAAiB,EAE7B7hB,GAAQ8hB,MAAQ,gBAAkBtjB,GAC9BkiB,EAAWhb,SAASsC,gBAAgBnG,MACpC5B,EAAcD,GAAQC,aAAc,EAAO0gB,EAAa3gB,GAAQ2gB,YAAa,EAAOC,EAAe,eAAiBpiB,GAASujB,YAAYvR,aAC7IxQ,GAAQgiB,QAAU,mBAAqBxjB,IAAU,OAAS,IAAIA,GAAOyjB,iBAAqB,kBAAoBvB,IAAY,iBAAmBA,GAC7I1gB,GAAQkiB,WAAa,YAAcxB,IAAY,kBAAoBA,IAAY,cAAgBA,GAC/F7a,IACI,MACA,SACA,IACA,MACD,WAAA,GAGSsc,GAFJC,EAAS9Z,GAAAA,KAAiB+Z,QAAwB5B,GAAM5e,MAAMugB,EAAS,gBAAkBtZ,EAC7F,IAAIuZ,SAAyB5B,GAAM5e,MAAMugB,EAAS,eAAiBtZ,GAW/D,MAVIqZ,GAAYC,EAAOnd,cACvB0b,GACI7gB,IAAkB,MAAbqiB,EAAoB,IAAMA,EAAY,IAAM,GACjDC,OAAQA,EACRE,MAAqB,MAAdH,GAAmC,WAAdA,EAAyBA,EAAY,IAEjEE,IACApiB,EAAc0gB,EACd1gB,EAAYqiB,MAAQriB,EAAYqiB,MAAQriB,EAAYqiB,MAAQ,gBAAkB,kBAE3E,IAGf7B,EAAQ,KACRzgB,GAAQ2gB,WAAaA,EACrB3gB,GAAQC,YAAcA,EACtBD,GAAQuiB,iBAAmB/jB,EAAO+jB,mBAAqB9jB,EAAY,EAAID,EAAO+jB,gBAC9E,KACIviB,GAAQwiB,YAAchkB,EAAO4C,YAAc5C,EAAOikB,OAASjkB,EAAOikB,OAAOC,WAAalkB,EAAOmkB,WAC7F3iB,GAAQ4iB,aAAepkB,EAAO8C,aAAe9C,EAAOikB,OAASjkB,EAAOikB,OAAOI,YAAcrkB,EAAOskB,YAClG,MAAOhc,GACL9G,GAAQwiB,YAAchkB,EAAOikB,OAAOC,WACpC1iB,GAAQ4iB,aAAepkB,EAAOikB,OAAOI,YAEzC7iB,GAAQ+iB,SAAW,SAAUC,GAAV,GACCC,GA+BPxe,EA/BLye,GAAK,EAAqB/iB,KAAYgjB,GAAmB,iBAAiBphB,KAAKihB,GAAKI,GAChFC,GAAI,gDACJC,KAAM,+BACNC,QAAS,qEACTC,OAAQ,2CACRC,KAAM,kCACNC,MAAO,2CACPC,MAAO,gCACPC,WAAY,oDACZC,SAAU,kDACVC,QAAS,gCACTC,MAAO,2CACPC,SAAU,gDACVC,KAAM,8CACPC,GACCC,IAAK,sBACLZ,QAAS,kBACTK,WAAY,wBACZE,QAAS,UACTT,GAAI,KACJe,KAAM,uBACNV,MAAO,SACRW,GAAkBC,OAAQ,uBAAyBC,GAClDC,MAAO,eACPC,QAAS,eACTC,QAAS,kBACTC,aAAc,qBACdC,GAAI,uBACJ7D,OAAQ,gBACRra,OAAQ,UAEhB,KAASjC,IAAS2e,GACd,GAAIA,EAASve,eAAeJ,KACxBtE,EAAQ6iB,EAAG7iB,MAAMijB,EAAS3e,KACf,CACP,GAAa,WAATA,GAAsB,WAAaogB,WACnC,OAAO,CAEX3B,MACAA,EAAG4B,OAASrgB,EACZye,EAAGoB,OAAS9f,EAAOC,EAAO4f,GAAe,GACzCnB,EAAG/hB,QAAUqD,EAAOwe,EAAIuB,EAAY,WACpCrB,EAAGrT,KAAOrL,EAAOC,EAAOyf,GACxBhB,EAAGA,EAAGrT,OAAQ,EACdqT,EAAG6B,aAAe5kB,EAAM,GACxB+iB,EAAGD,cAAgB9iB,EAAM,IAAM,KAAKnB,QAAQ,IAAK,KACjDikB,EAAeC,EAAGD,aAAajkB,QAAQ,IAAK,IAAI8e,OAAO,EAAG,GAC1DoF,EAAG8B,YAAc9B,EAAG6B,aAAe9B,EAAmBjf,MAAM,GAAKif,EAAaxjB,OAAS,EAAIwjB,EAAaxjB,OAAS,IAAIV,KAAK,KAC1HmkB,EAAG+B,cAAiBzmB,GAAO0mB,WAAa9gB,UAAoB5F,GAAOymB,UAAY7gB,GAC/E8e,EAAGiC,QAAU3mB,EAAOqmB,UAAUO,YAAc,mBAAmBrjB,KAAKvD,EAAO6mB,SAASC,WAAapC,EAAG+B,QAChG/B,EAAGK,UAAYvjB,GAAQuiB,iBAAmB,KAAOW,EAAG8B,YAAc,KAAO7B,KAAqBnjB,GAAQwiB,YAAc,KAAOxiB,GAAQ4iB,aAAe,OAClJM,EAAGoB,OAAS7f,EAEhB,OAIZ,MAAOye,IAEPrC,EAAW7gB,GAAQ6gB,SAAW7gB,GAAQ+iB,SAAS8B,UAAUU,WAC7DvlB,GAAQwlB,mBAAqB3E,EAASwC,GAAKZ,OAAO3hB,MAAQ,IAAM,EAChEd,GAAQylB,oBAAqB,GACzB5E,EAASsD,KAAOtD,EAAS0C,SAAW1C,EAASkE,aAAe,GAAKlE,EAASwC,MAC1ErjB,GAAQylB,mBAAqB5E,GAEjC7gB,GAAQ0lB,aAAe,WACnB,GAAI1lB,GAAQ8hB,MAAO,CACf,GAAIjB,EAASsD,IACT,OAAO,CAEX,IAAItD,EAAS0C,QACT,OAAKvjB,GAAQmB,QAAQ4f,UAGjB/gB,GAAQmB,QAAQoB,QAAU,OAGrBhE,EAAE,uBAAuB2N,KAAK,YAAc,IAAI/L,MAAM,qBAGvE,OAAO,GAEXH,GAAQ2lB,qBAAuB3lB,GAAQ8hB,SAAW9hB,GAAQ6gB,SAASsD,KAAOnkB,GAAQ6gB,SAAS0C,SAC3FvjB,GAAQ4lB,cAAgB,SAAU5C,GAAV,GASXve,GARLtD,GAAU,EAAOhB,KAAYokB,GACzBsB,KAAM,uBACNnf,OAAQ,+BACRK,OAAQ,yBACR+e,MAAO,sCACPzjB,KAAM,mCACNuE,QAAS,iCAEjB,KAASnC,IAAS8f,GACd,GAAIA,EAAW1f,eAAeJ,KAC1BtE,EAAQ6iB,EAAG7iB,MAAMokB,EAAW9f,KACjB,CACPtD,KACAA,EAAQsD,IAAS,EACjBtD,EAAQhB,EAAM,GAAG8E,cAAcnG,MAAM,KAAK,GAAGA,MAAM,KAAK,KAAM,EAC9DqC,EAAQoB,QAAUqI,SAASlF,SAASob,cAAgB3gB,EAAM,GAAI,GAC9D,OAIZ,MAAOgB,IAEXnB,GAAQmB,QAAUnB,GAAQ4lB,cAAcf,UAAUU,WAClDvlB,GAAQ+lB,sBAAwB,WAC5B,GAAIC,IACApW,OAAMlK,SAASugB,uBAAwBvgB,SAASugB,sBAAsB,QACtEC,MAAKxgB,SAASugB,uBAAwBvgB,SAASugB,sBAAsB,OACrEE,QAAOzgB,SAASugB,uBAAwBvgB,SAASugB,sBAAsB,SAS3E,OAPIjmB,IAAQmB,QAAQ4f,SAChBiF,EAASG,OAAQ,EACbnmB,GAAQmB,QAAQoB,SAAW,KAC3ByjB,EAASpW,MAAO,EAChBoW,EAASE,KAAM,IAGhBF,GAEXhmB,GAAQomB,UAAYpmB,GAAQ+lB,wBAC5B/lB,GAAQqmB,UAAY,WAAA,GAERllB,GACAmlB,EACAC,CAHR,KAOI,MANIplB,GAAUnB,GAAQmB,QAClBmlB,EAAsB,EACtBC,EAAQ7gB,SAASsC,gBACjB7G,EAAQkB,MAA2B,IAAnBlB,EAAQoB,SAAiBgkB,EAAMC,aAAeD,EAAME,eAAiBzmB,GAAQ8hB,QAC7FwE,EAAsBtmB,GAAQkhB,aAE3BlhB,GAAQ8hB,MAAQyE,EAAMtf,YAAczI,EAAOmkB,WAAaxhB,EAAQkB,MAAQlB,EAAQoB,SAAW,KAAOqF,KAAOpJ,GAAQkH,SAASsC,gBAAgB0Z,YAAc4E,IAAwB1e,KAAOpJ,GAAQmkB,WAAa,EACrN,MAAO7b,GACL,MAAO,KAGf9G,GAAQ0mB,iBAAoD,IAA1BhG,EAASiG,iBAAkC3mB,GAAQmB,QAAQkB,MAAQrC,GAAQmB,QAAQoB,QAAU,GAC9H,SAAUpB,GACP,GAAIylB,GAAW,GAAIC,EAAatoB,EAAEmH,SAASsC,iBAAkB+c,EAAena,SAASzJ,EAAQoB,QAAS,GAClGpB,GAAQkB,KACRukB,EAAW,KACJzlB,EAAQyF,QACfggB,EAAW,KACJzlB,EAAQ4F,OACf6f,EAAW,SACJzlB,EAAQuF,OACfkgB,EAAW,SACJzlB,EAAQ2kB,MACfc,EAAW,QACJzlB,EAAQ0kB,OACfe,EAAW,QAEXA,IACAA,EAAW,KAAOA,EAAW,MAAQA,EAAW7B,GAEhD/kB,GAAQ6gB,WACR+F,GAAY,aAEX5mB,GAAQkiB,aACT0E,GAAY,iBAEhBC,EAAW5kB,SAAS2kB,IACtB5mB,GAAQmB,SACVnB,GAAQ8mB,aAAephB,SAASsC,gBAAgB+e,iBAC5C3e,EAAQ1C,SAAS2b,cAAc,SACnCrhB,GAAQgnB,YAAc,eAAiB5e,GACvCpI,GAAQinB,oBAAsB,oBAAsB7e,GACpDpI,GAAQoI,MAAQ,WAeZ,IAfY,GAcRZ,GAbA0f,GACA,SACA,OACA,OACA,QACA,OACA,WACA,kBAEAznB,EAASynB,EAAMznB,OACfsG,EAAQ,OACRuB,KACAxB,EAAM,EAEHA,EAAMrG,EAAQqG,IACjB0B,EAAO0f,EAAMphB,GACbsC,EAAM+e,aAAa,OAAQ3f,GAC3BY,EAAMrC,MAAQA,EACduB,EAAOE,EAAKxI,QAAQ,IAAK,KAAsB,SAAfoJ,EAAMZ,MAAmBY,EAAMrC,QAAUA,CAE7E,OAAOuB,MAEXc,EAAMvG,MAAMyf,QAAU,cACtBthB,GAAQonB,WAAahf,EAAMvG,MAAMulB,SACjChf,EAAQ,KACRpI,GAAQqnB,WAAa,WAAA,GAMRrkB,GALLskB,EAAY,IACZC,IACI5L,MAAO,EACP6L,MAAO,KAEf,KAASxkB,EAAI,EAAGA,EAAIskB,EAAWtkB,IAC3BukB,EAAOhW,MACHoK,MAAO3Y,EACPwkB,MAAO,KAMf,OAHAD,GAAOE,KAAK,SAAU7b,EAAGC,GACrB,MAAOD,GAAE4b,MAAQ3b,EAAE2b,MAAQ,EAAI5b,EAAE4b,MAAQ3b,EAAE2b,SAAa,IAEjC,IAApBD,EAAO,GAAG5L,SAErB3b,GAAQ0nB,gBAAkB9G,EAAa+G,uBAAyB/G,EAAagH,oBAAsBhH,EAAaiH,mBAAqBjH,EAAakH,kBAAoBlH,EAAa8G,iBAAmB9G,EAAavD,SAAW,SAAUtQ,GAEpO,IADA,GAAIgb,GAAWriB,SAASsiB,kBAAoB1f,KAAK2f,YAAcviB,UAAUsiB,iBAAiBjb,OAAkBxO,EAAEwO,GAAW/J,EAAI+kB,EAAStoB,OAC/HuD,KACH,GAAI+kB,EAAS/kB,IAAMsF,KACf,OAAO,CAGf,QAAO,GAEXtI,GAAQkoB,WAAa,cAAgB1pB,GACrCwB,GAAQmoB,UAAY3pB,EAAO4pB,SAAW5pB,EAAO4pB,QAAQD,UACjDrH,EAAepb,SAASob,aAC5B9gB,GAAQqoB,WAAa,gBAAkB7pB,MAAYwB,GAAQmB,QAAQkB,QAAUye,GAAgBA,GAAgB,IAC7G9gB,GAAQsoB,eAAiB,mBAAqB9pB,GAAOkH,SACjDqb,EAAS/gB,GAAQmB,QAAQ4f,OAAQC,EAAehhB,GAAQmB,QAAQonB,MAAO3hB,EAAU5G,GAAQmB,QAAQyF,QAASG,EAAS/G,GAAQmB,QAAQ4F,OACvI/G,GAAQ8H,YAAciZ,GAAUviB,EAAOgqB,eACvCxoB,GAAQ6H,UAAYkZ,IAAWC,IAAiBpa,IAAYG,GAAUvI,EAAOiqB,aAC7EzoB,GAAQ0oB,oBAAsB7H,IAAa7gB,GAAQ8hB,OAAS9hB,GAAQ8H,YAAc9H,GAAQ6H,aA6B1F+F,GACApN,MAAQoI,QAAS,SACjBnI,OAASmI,QAAS,QAClB+f,MAAQ/f,QAAS,MACjBggB,IAAMhgB,QAAS,QACfhB,KAAOgB,QAAS,UAChBlI,QAAUkI,QAAS,OACnBigB,MAAQjgB,QAAS,OACjBkgB,KAAOlgB,QAAS,OAYhBP,KACJ9J,EAAEyK,OAAOX,GACL0gB,SAAS,EACTvgB,QAAS,SAAU5I,GACf0I,KAAK1I,QAAUrB,EAAEqB,IAErB6J,QAAS,SAAU7J,EAAS8I,GACnB9I,EAAQoC,GAAG,aACZpC,EAAQE,KAAM8C,QAAShD,EAAQ8D,KAAK,eAAiB,UAAW5D,IAAI,WAEpE4I,EAAQU,MACRxJ,EAAQ8D,KAAK,aAAc9D,EAAQE,IAAI,YAAYsJ,OAEnDV,EAAQO,MACRP,EAAQO,OAERP,EAAQW,kBACRX,EAAQW,iBAAiBzJ,GAE7BA,EAAQopB,WAEZC,QAAS,WACL3gB,KAAKygB,SAAU,EACfzgB,KAAKmB,QAAUnB,KAAK4gB,aAExBC,OAAQ,WACJ7gB,KAAKygB,SAAU,EACfzgB,KAAKmB,QAAUnB,KAAK8gB,mBAG5B/gB,EAAQ6gB,YAAc7gB,EAAQoB,QAsDxB,gBAAkBlL,GAAE0O,IACtBjE,GAAOzK,EAAE0O,IACLoc,UAAW,SAAUC,EAAYC,GAC7B,MAAOjhB,MAAKkhB,KAAKF,EAAYC,IAEjCE,aAAc,SAAU/gB,EAASC,EAAUC,EAASC,GAChD,MAAOS,GAAQhB,KAAMI,EAASC,EAAUC,EAASC,IAErD6gB,cAAe,SAAU/f,EAASjB,GAC9B,MAAO3I,IAAM2J,YAAYpB,KAAMqB,EAASjB,GAAS,IAErDihB,iBAAkB,SAAUhgB,EAASjB,GACjC,MAAO3I,IAAM2J,YAAYpB,KAAMqB,EAASjB,GAAS,IAErDkhB,iBAAkB,SAAUjgB,EAASjB,EAASmhB,GAC1C,MAAO9pB,IAAM2J,YAAYpB,KAAMqB,EAASjB,EAASmhB,MAIzD/f,EAAY,KAAMC,EAAW,KAAME,EAAc,KAAMC,EAAa,KAAMF,EAAW,KAerF6D,EAAc,SAAU/G,GACxB,MAAOA,GAAEgJ,QAET9P,GAAQ8hB,QACRjU,EAAc,SAAU/G,GACpB,GAAIgjB,GAAU,iBAAmBhjB,GAAIA,EAAEijB,cAAcC,eAAiB,kBAAoBljB,GAAIA,EAAEkjB,eAAiB,IACjH,OAAOF,GAAUpkB,SAASukB,iBAAiBH,EAAQ,GAAGI,QAASJ,EAAQ,GAAGK,SAAWrjB,EAAEgJ,QAE3FjK,IACI,QACA,YACA,aACA,UACA,YACA,YACA,OACD,SAAU0U,EAAGxU,GACZxH,EAAE0O,GAAGlH,GAAS,SAAUqkB,GACpB,MAAO9hB,MAAKuI,KAAK9K,EAAOqkB,OAIhCpqB,GAAQ8hB,MACH9hB,GAAQ6gB,UAQT7gB,GAAQqqB,UAAY,aACpBrqB,GAAQsqB,QAAU,WAClBtqB,GAAQuqB,UAAY,YACpBvqB,GAAQwqB,YAAc,cACtBxqB,GAAQyqB,MAAQ,WAChBzqB,GAAQ0qB,OAAS,sBAZjB1qB,GAAQqqB,UAAY,uBACpBrqB,GAAQsqB,QAAU,mBAClBtqB,GAAQuqB,UAAY,sBACpBvqB,GAAQwqB,YAAc,yBACtBxqB,GAAQyqB,MAAQ,QAChBzqB,GAAQ0qB,OAAS,UASd1qB,GAAQ6H,UACf7H,GAAQuqB,UAAY,cACpBvqB,GAAQqqB,UAAY,cACpBrqB,GAAQsqB,QAAU,YAClBtqB,GAAQwqB,YAAc,gBACtBxqB,GAAQyqB,MAAQ,YAChBzqB,GAAQ0qB,OAAS,4BACV1qB,GAAQ8H,YACf9H,GAAQuqB,UAAY,gBACpBvqB,GAAQqqB,UAAY,gBACpBrqB,GAAQsqB,QAAU,cAClBtqB,GAAQwqB,YAAc,kBACtBxqB,GAAQyqB,MAAQ,cAChBzqB,GAAQ0qB,OAAS,6BAEjB1qB,GAAQuqB,UAAY,YACpBvqB,GAAQqqB,UAAY,YACpBrqB,GAAQsqB,QAAU,UAClBtqB,GAAQwqB,YAAc,aACtBxqB,GAAQyqB,MAAQ,QAChBzqB,GAAQ0qB,OAAS,UAEjB5c,EAAiB,SAAU6c,EAAS9Y,GAChC,GAA+B8J,GAAO7V,EAAKrG,EAAQ0Q,EAA/C7I,EAASuK,GAAa,IAAiCqL,EAAQ,CACnE,KAAKpX,EAAM,EAAGrG,EAASkrB,EAAQlrB,OAAQqG,EAAMrG,EAAQqG,IACjDqK,EAASwa,EAAQ7kB,GACF,KAAXqK,IACAwL,EAAQxL,EAAO9J,QAAQ,KACT,IAAVsV,IACIA,MACAxL,EAAS,IAAMA,GAEf+M,IACA/M,EAAS,IAAMA,EAAO/Q,UAAU,EAAGuc,GAAS,UAAYxL,EAAO/Q,UAAUuc,KAGjFuB,IACA5V,GAAU6I,GAAUrK,EAAMrG,EAAS,EAAI,UAAY,KAG3D,OAAWuE,OAAMkZ,GAAOne,KAAK,KAAOuI,GACrCyG,GAAa,mBACpB/E,GAAOjJ,IACH6qB,WACAC,8BACAC,GAAI/qB,GAAM+qB,OACVviB,GAAIxI,GAAMwI,IAAMA,EAChBF,QAAStI,GAAMsI,SAAWA,EAC1B0iB,OAAQhrB,GAAMgrB,WACdrnB,KAAM3D,GAAM2D,SACZsnB,QAASjrB,GAAMirB,YACfC,QAASlrB,GAAMkrB,YACfC,aAAeC,aACfC,MACIC,OAAQ,GACRC,OAAQ,GACRC,UAAW,EACXC,IAAK,EACLC,MAAO,GACPC,IAAK,GACLC,KAAM,GACNC,GAAI,GACJC,MAAO,GACPC,KAAM,GACNC,IAAK,GACLC,KAAM,GACNC,SAAU,GACVC,OAAQ,GACRC,SAAU,GACVC,GAAI,IACJC,IAAK,IACLC,IAAK,IACLC,YAAa,IACbC,aAAc,IACdC,WAAY,KAEhBzsB,QAASD,GAAMC,SAAWA,GAC1BsJ,QAASvJ,GAAMuJ,SAAWA,EAC1B2B,GAAI,GACJiB,KAAM,SAAUnG,GACZ,MAAO,QAAUhG,GAAMkL,GAAKlF,GAEhCpG,WAAYA,EACZgB,KAAMA,EACNmC,WAAYA,EACZwC,kBAAmBA,EACnBa,aAAcA,EACdI,WAAYA;AACZL,KAAMA,EACNhB,YAAaA,EACbJ,UAAWA,EACXyC,UAAWxH,GAAMwH,WAAaA,EAC9BY,aAAcpI,GAAMoI,cAAgBA,EACpCuB,YAAa3J,GAAM2J,aAAeA,EAClCkE,WAAY7N,GAAM6N,YAAcA,EAChCP,WAAYA,EACZ3O,MAAOA,EACPwO,SAAUA,EACV9C,SAAU4E,GAAM9B,EAAS8E,QAAS9E,GAClC6E,OAAQ/C,GAAM9B,EAAS6E,OAAQ7E,GAC/BwH,UAAW1F,GAAMC,GAAKyF,UAAWzF,IACjCpB,YAAaA,EACbhE,WAAYA,EACZM,SAAUA,EACVuiB,WAAY,SAAUC,GAClB,MAAOA,KAAQ5e,GAAWhM,KAAK4qB,IAEnClgB,KAAM,SAAUmgB,EAAYC,EAAMhb,GAkB9B,MAjBA+a,GAAaA,GAAc,SAChBC,IAAQ/jB,KACf+I,EAAYgb,EACZA,GAAO,GAEXhb,EAAYA,GAAa,IACrB+a,GAAuC,MAAzBA,EAAW1tB,OAAO,KAChC0tB,EAAa,IAAMA,GAEnBC,GACAD,EAAaA,EAAW5tB,QAAQ,sBAAuB,iBACvD4tB,EAAaA,EAAW5tB,QAAQ,sBAAuB,iBACvD4tB,EAAa9e,EAAe8e,EAAW9tB,MAAM,KAAM+S,GACnD+a,EAAaA,EAAW5tB,QAAQ,aAAc,MAE9C4tB,EAAa/a,EAAY+a,EAEtBA,GAEXE,OAAQ,SAAUF,EAAYC,GAC1B,GAAIxlB,GAAMulB,EAAaC,CACvB,OAAOvd,IAAYjI,GAAOiI,GAAYjI,IAAYiE,SAAS,IAAK,UAAYvL,GAAM0M,KAAKmgB,EAAYC,KAEvGE,OAAQ,SAAUH,GACd,MAAOrd,IAAYqd,GAAcrd,GAAYqd,IAAmBthB,SAAS,UAAWvL,GAAM0M,KAAKmgB,GAAc,WAEjHI,SAAU,SAAUJ,GAChB,OACIK,IAAKltB,GAAM+sB,OAAOF,GAClBM,IAAKntB,GAAMgtB,OAAOH,KAG1BO,KAAM,WACF,GAAanqB,GAAGoqB,EAAZC,EAAK,EACT,KAAKrqB,EAAI,EAAGA,EAAI,GAAIA,IAChBoqB,EAAyB,GAAhB9sB,GAAK8sB,SAAgB,EACrB,GAALpqB,GAAe,IAALA,GAAgB,IAALA,GAAgB,IAALA,IAChCqqB,GAAM,KAEVA,IAAY,IAALrqB,EAAU,EAAS,IAALA,EAAmB,EAAToqB,EAAa,EAAIA,GAAQra,SAAS,GAErE,OAAOsa,IAEXC,aAAc,SAAU9hB,GACpB,MAAOA,GAAKxM,QAAQ,SAAU,IAAMe,GAAMmM,KAAK,QAAU,SAASsD,MAAM,OAE5E+d,kBAAmB,SAAUC,GAAV,GAGFxqB,GAFTyqB,EAAYD,EAAW1uB,MAAM,IACjC,IAAI2uB,EACA,IAASzqB,EAAI,EAAGA,EAAIyqB,EAAUhuB,OAAQuD,IACd,QAAhByqB,EAAUzqB,KACVyqB,EAAUzqB,GAAKyqB,EAAUzqB,GAAGhE,QAAQ,8BAA+B,SAI/E,OAAOyuB,GAAU1uB,KAAK,KAAKC,QAAQ,SAAU,oBAAoBwQ,MAAM,OAE3Eke,iBAAkB,SAAU5mB,GACxB,MAAO,mCAAmC/E,KAAK+E,EAAEgJ,OAAO6d,UAE5DC,mBAAoB,SAAUxD,GAC1B,IAAK,GAAIpnB,GAAI,EAAG6qB,EAAM9tB,GAAM6qB,QAAQnrB,OAAQuD,EAAI6qB,EAAK7qB,IACjDonB,EAASrqB,GAAM6qB,QAAQ5nB,GAE3BjD,IAAM8qB,2BAA2BtZ,KAAK6Y,IAE1C0D,aAAc,SAAUC,EAASvmB,GAC7B,GAAIwmB,GAAUxvB,EAAOwvB,SAChBjuB,GAAMkuB,aAAiC,IAAXD,GAA0BA,EAAQE,KAC/DF,EAAQxmB,GAAQ,OAAOumB,MAI/B/f,GAASX,EAAWrE,QACpBC,KAAM,SAAUrJ,EAAS8I,GAAnB,GAKEylB,GACAC,EALA/d,EAAO/H,IACX+H,GAAKzQ,QAAUG,GAAMiQ,OAAOpQ,GAASsR,QAAQb,GAC7CA,EAAKge,QAAQ,OAAQ3lB,GACrB2E,EAAWJ,GAAGhE,KAAK0I,KAAKtB,GACpB8d,EAAazlB,EAAUA,EAAQylB,WAAa,KAE5CzlB,IACA0lB,GAAS/d,EAAKie,qBAAuB5lB,OAAe6lB,gBAEpDJ,IACAzlB,EAAUM,MAAWN,GAAWylB,iBAEpCzlB,EAAU2H,EAAK3H,QAAUM,IAAO,KAAUqH,EAAK3H,QAAS2H,EAAKme,SAAUJ,MAAa1lB,GAChFylB,IACAzlB,EAAQylB,WAAaA,GAEpB9d,EAAKzQ,QAAQsM,KAAKnM,GAAMmM,KAAK,UAC9BmE,EAAKzQ,QAAQsM,KAAKnM,GAAMmM,KAAK,SAAUxD,EAAQmH,MAAQ,IAAI5K,eAE/DoL,EAAKzQ,QAAQ8D,KAAK,QAAUgF,EAAQ0Z,OAAS1Z,EAAQmH,KAAMQ,GAC3DA,EAAKQ,KAAKR,EAAKc,OAAQzI,IAE3ByI,UACAzI,SAAW0Z,OAAQ,IACnBqM,kBAAmB,WACf,QAASnmB,KAAK1I,QAAQ,GAAG8uB,oBAE7BC,UAAW,SAAU7e,GACjBA,EAASA,GAAUxH,KAAK5F,OACxB,IAAI9C,GAAU0I,KAAK1I,QAASgvB,EAAW,WAAYC,EAAW/e,EAAO5D,KAAK0iB,IAAahvB,EAAQsM,KAAK0iB,EACpGhvB,GAAQkvB,WAAWF,GACnB9e,EAAO5D,KAAK0iB,EAAW3P,MAAM4P,GAAuB,EAAXA,IAE7CE,WAAY,SAAUrmB,GAClBJ,KAAK0mB,WAAWtmB,GAChBnK,EAAEyK,OAAOV,KAAKI,QAASA,IAE3BsmB,WAAY,SAAUtmB,GAElB,IADA,GAAuD5B,GAAnDuJ,EAAO/H,KAAMxC,EAAM,EAAGrG,EAAS4Q,EAAKc,OAAO1R,OACxCqG,EAAMrG,EAAQqG,IACjBgB,EAAIuJ,EAAKc,OAAOrL,GACZuK,EAAK3H,QAAQ5B,IAAM4B,EAAQ5B,KAC3BuJ,EAAKiB,OAAOxK,EAAGuJ,EAAK3H,QAAQ5B,IACxBuJ,EAAKO,SAAWP,EAAKO,QAAQ9J,UACtBuJ,GAAKO,QAAQ9J,GAIhCuJ,GAAKQ,KAAKR,EAAKc,OAAQzI,IAE3BgiB,OAAQ,SAAUuE,GACd,GAAI/oB,GAAOoC,KAAK4mB,UAAWC,EAAc7mB,KAAK8mB,OAC1CH,IAAU/oB,EAAKpF,MAAQ,GAAKoF,EAAKnF,OAAS,MAAQouB,GAAejpB,EAAKpF,QAAUquB,EAAYruB,OAASoF,EAAKnF,SAAWouB,EAAYpuB,WACjIuH,KAAK8mB,MAAQlpB,EACboC,KAAK+mB,QAAQnpB,EAAM+oB,GACnB3mB,KAAKmJ,QAAQ,SAAUvL,KAG/BgpB,QAAS,WACL,MAAOnvB,IAAMuvB,WAAWhnB,KAAK1I,UAEjCsG,KAAM,SAAUA,GACZ,MAAKA,IAGDoC,KAAKinB,QAAQrpB,GAAboC,GAFOA,KAAK4mB,WAKpBK,QAAShxB,EAAE2K,KACXmmB,QAAS9wB,EAAE2K,KACXsmB,QAAS,WACL,GAAInf,GAAO/H,IACX+H,GAAKzQ,QAAQ6vB,WAAW,QAAUpf,EAAK3H,QAAQ0Z,OAAS/R,EAAK3H,QAAQmH,MACrEQ,EAAKzQ,QAAQ6vB,WAAW,WACxBpf,EAAKiB,UAEToe,SAAU,WACNpnB,KAAKknB,WAETnB,QAAS,aAETsB,mBAAoB,SAAUvF,GAC1B9hB,KAAKsnB,aAAc,EACnBxF,EAASzY,KAAKrJ,MACdA,KAAKsnB,aAAc,KAGvB3hB,GAAkBD,GAAOhF,QACzB6mB,UAAW,WACP,MAAOvnB,MAAK6lB,WAAW2B,YAE3BC,cAAe,SAAUC,GACrB,GAAI3f,GAAO/H,IACX+H,GAAKge,QAAQ2B,EAAK,WACd,OACIC,SAAU5f,EAAK6f,QACfxsB,KAAMnF,EAAEge,IAAIlM,EAAKwf,YAAa,SAAUM,GACpC,OAASA,SAAUA,WAMvCpwB,GAAMuvB,WAAa,SAAU1vB,EAAS0vB,GAClC,GAAIc,GAAaxwB,EAAQ,EAIzB,OAHI0vB,IACA1vB,EAAQE,IAAIwvB,IAGZxuB,MAAOsvB,EAAW1O,YAClB3gB,OAAQqvB,EAAWC,eAG3BtwB,GAAMuwB,OAASpnB,GACXuC,GAAiB,aAAcL,GAAa,oDAAqDC,GAAmB,wCAAyCN,GAAa,WA6C9KhL,GAAMwwB,WAAa,SAAU3wB,EAAS8I,EAAS8nB,GAA5B,GACXlpB,GAAQwD,EAAQkB,EAAQlG,EAAKrG,EAAQ+L,EAAMzF,EAAOooB,EAAYsC,EAAUC,EAiBxEhtB,EAA0BitB,EAMrBtpB,CAfT,IAPKmpB,EAEMA,EAAMA,QACbA,EAAQA,EAAMA,OAFdA,EAAQzwB,GAAM+qB,GAAG0F,MAIrB5wB,EAAUA,EAAQgxB,SAAWhxB,EAAUA,EAAQ,GAC/C4L,EAAO5L,EAAQoL,aAAa,QAAUjL,GAAMkL,GAAK,QACjD,CAGAwlB,EAAWjlB,EAAKnF,QAAQ,UAEpB2F,EADAykB,EACSD,EAAMhlB,GAENzL,GAAM+sB,OAAOthB,GAAMhN,GAE5BkF,EAAOnF,EAAEqB,GAAS8D,OAAQitB,EAAY3kB,EAAS,QAAUA,EAAOiB,GAAGvE,QAAQ0Z,OAASpW,EAAOiB,GAAGvE,QAAQmH,KAAO,GAE7G6gB,EADAD,EACsBxsB,OAAO,WAAauH,EAAO,IAAK,KAEhCvH,OAAO,IAAM0sB,EAAY,IAAK,IAExD,KAAStpB,IAAO3D,GACZ,GAAI2D,EAAIlH,MAAMuwB,GAAkB,CAC5B,GAAIrpB,IAAQspB,EAGR,MAAOjtB,GAAK2D,EAFZC,GAAS5D,EAAK2D,GAM1B,GAAK2E,EAAL,CAYA,IATAmiB,EAAatjB,EAAYjL,EAAS,cAClC8I,EAAUnK,EAAEyK,UAAWuC,EAAa3L,EAASrB,EAAEyK,UAAWgD,EAAOiB,GAAGvE,QAASsD,EAAOiB,GAAGuhB,WAAY9lB,GAC/FylB,IAEIzlB,EAAQylB,iBADDA,KAAerlB,GACD/I,GAAM+sB,OAAOqB,GAAY3vB,GAEzB2vB,GAGxBroB,EAAM,EAAGrG,EAASuM,EAAOiB,GAAGkE,OAAO1R,OAAQqG,EAAMrG,EAAQqG,IAC1DgF,EAASkB,EAAOiB,GAAGkE,OAAOrL,GAC1BC,EAAQ8E,EAAYjL,EAASkL,GACzB/E,IAAUtH,IACViK,EAAQoC,GAAU/K,GAAM+sB,OAAO/mB,GAAOvH,GAQ9C,OALK8I,GAEO/I,EAAEsyB,cAAcnoB,IACxBpB,EAAOynB,WAAWrmB,GAFlBpB,EAAS,GAAI0E,GAAOpM,EAAS8I,GAI1BpB,KAEXvH,GAAM+wB,oBAAsB,SAAUC,GAClC,GAAgBjrB,GAAKrG,EAAjB+wB,IAOJ,KANKO,EAAW,KACZA,GACIhxB,GAAM+qB,GACN/qB,GAAMirB,QAAQF,KAGjBhlB,EAAM,EAAGrG,EAASsxB,EAAWtxB,OAAQqG,EAAMrG,EAAQqG,IACpD0qB,EAAM1qB,GAAOirB,EAAWjrB,GAAK0qB,KAEjC,OAAOxnB,IAAOuH,MAAM,UAAWmP,OAAO8Q,EAAM5nB,aAEhD7I,GAAMkJ,KAAO,SAAUrJ,GACnB,GAAI4wB,GAAQzwB,GAAM+wB,oBAAoBthB,GAAMmC,KAAK1O,UAAW,GAC5D1E,GAAEqB,GAASoxB,KAAK,SAAWjxB,GAAMkL,GAAK,SAAS2B,UAAU/G,KAAK,WAC1D9F,GAAMwwB,WAAWjoB,QAAUkoB,MAGnCzwB,GAAMyvB,QAAU,SAAU5vB,GACtBrB,EAAEqB,GAASoxB,KAAK,SAAWjxB,GAAMkL,GAAK,SAAS2B,UAAU/G,KAAK,WAAA,GAEjDwB,GADL3D,EAAOnF,EAAE+J,MAAM5E,MACnB,KAAS2D,IAAO3D,GACiB,IAAzB2D,EAAIhB,QAAQ,gBAAyB3C,GAAK2D,GAAKmoB,UAAYrgB,IAC3DzL,EAAK2D,GAAKmoB,aAgB1BzvB,GAAM2qB,OAAS,SAAU9qB,EAASqvB,GAAnB,GAKPgC,GAJArG,EAAUrsB,EAAEqB,GAASoxB,KAAK,SAAWjxB,GAAMkL,GAAK,SAAS2B,UAAUC,OAAOd,EACzE6e,GAAQnrB,SAGTwxB,EAAe1yB,EAAE2yB,UAAUtG,GAC/BqG,EAAaxJ,KAAK9b,GAClBpN,EAAEsH,KAAKorB,EAAc,WACjB,GAAIjlB,GAASjM,GAAMoxB,eAAe5yB,EAAE+J,MAChC0D,IACAA,EAAO0e,OAAOuE,OAI1BlvB,GAAMwL,aAAeA,EACrBvC,GAAOjJ,GAAM+qB,IACT9c,OAAQA,GACRC,gBAAiBA,GACjBuiB,SACAY,SAAU,SAAUC,EAAWxH,EAAQnhB,GACnC,GAAkGjC,GAAO6qB,EAAWC,EAAkBC,EAAqB5K,EAAvJ6K,EAAOJ,EAAUL,KAAK,mBAAoBhxB,EAAUD,GAAMC,QAASmB,EAAUnB,EAAQmB,OACzFuH,GAAUnK,EAAEyK,WACRlI,MAAO,OACPC,OAAQ,OACR6G,IAAKypB,EAAUppB,YACfypB,SAAS,GACVhpB,GACHke,EAAWle,EAAQgpB,QAAU,0BAA4B,iBACrD7H,EACK4H,EAAKhyB,SACNgH,EAAQzG,EAAQyG,MAAM4qB,GACtBC,EAAY7qB,EAAQ,QAAU,OAC9B+qB,EAAsBzxB,GAAMwG,WAAW8qB,GACvCE,EAAmBpwB,EAAQuF,QAAUD,EAAY4qB,EAAU,GAAGrqB,YAAcqqB,EAAUvwB,QAAU,EAAI0wB,EAAsB,EAC1HC,EAAOlzB,EAAEwB,GAAMwS,OAAO,uIAAgJqU,EAAU7mB,GAAM+qB,GAAGsG,SAASjG,SAASwG,UAAU7wB,MAAM4H,EAAQ5H,OAAOC,OAAO2H,EAAQ3H,QAAQjB,IAAI,MAAO4I,EAAQd,KAAK9H,IAAIwxB,EAAWpqB,KAAKC,IAAIqqB,GAAuBD,GAAkBK,UAAUP,IAEjWI,GACPA,EAAKI,UAGbC,OAAQ,SAAU9lB,EAAQ+lB,EAAU3P,GAA5B,GAC+B0K,GAO/BkF,EAMKhvB,EAAO6qB,EAbZhe,EAAO7D,EAAOiB,GAAGvE,QAAQmH,IAa7B,KAZAkiB,EAAWA,GAAYhyB,GAAM+qB,GAC7B1I,EAASA,GAAU,GACnB2P,EAASliB,GAAQ7D,EACjB+lB,EAASvB,MAAM3gB,EAAK5K,eAAiB+G,EACrC8gB,EAAS,WAAa1K,EAASvS,EAC/BA,EAAO,QAAUuS,EAASvS,EACtBmiB,GACAniB,KAAMA,EACN7D,OAAQA,EACRoW,OAAQA,GAAU,IAEtBriB,GAAM6qB,QAAQrZ,KAAKygB,GACVhvB,EAAI,EAAG6qB,EAAM9tB,GAAM8qB,2BAA2BprB,OAAQuD,EAAI6qB,EAAK7qB,IACpEjD,GAAM8qB,2BAA2B7nB,GAAGgvB,EAExCzzB,GAAE0O,GAAG4C,GAAQ,SAAUnH,GACnB,GAAkBupB,GAAdlsB,EAAQuC,IAuBZ,cAtBWI,KAAYI,IACnBmpB,EAAOziB,GAAMmC,KAAK1O,UAAW,GAC7BqF,KAAKzC,KAAK,WACN,GAAiCqsB,GAAQ5qB,EAArC0E,EAASzN,EAAEmF,KAAK4E,KAAMuH,EAC1B,KAAK7D,EACD,KAAUsG,OAAMvS,GAAMwS,OAAO,2DAA8D7J,EAASmH,GAGxG,IADAqiB,EAASlmB,EAAOtD,SACLwpB,KAAW/iB,GAClB,KAAUmD,OAAMvS,GAAMwS,OAAO,kCAAqC7J,EAASmH,GAG/E,IADAvI,EAAS4qB,EAAO3hB,MAAMvE,EAAQimB,GAC1B3qB,IAAW7I,EAEX,MADAsH,GAAQuB,GACD,KAIfgB,KAAKzC,KAAK,WACN,MAAO,IAAImG,GAAO1D,KAAMI,KAGzB3C,GAEXxH,EAAE0O,GAAG4C,GAAM7D,OAASA,EACpBzN,EAAE0O,GAAG6f,GAAU,WACX,MAAOxkB,MAAK5E,KAAKmM,OAI7B9P,GAAM+qB,GAAGsG,SAASjG,UAAawG,QAAS,cACpCzjB,IACA2C,KAAM,WACF,MAAOvI,OAEX6pB,YAAY,EACZzpB,YAEAyF,GAAeH,GAAOhF,QACtBC,KAAM,SAAUrJ,EAAS8I,GACrBsF,GAAOf,GAAGhE,KAAK0I,KAAKrJ,KAAM1I,EAAS8I,GACnCJ,KAAK1I,QAAQwyB,cACb9pB,KAAK5F,QAAU4F,KAAK1I,QACpB0I,KAAK1I,QAAQqC,SAAS,cAE1ButB,QAAS,WACLxhB,GAAOf,GAAGuiB,QAAQ7d,KAAKrJ,MACvBA,KAAK1I,QAAQyyB,gBAEjB3pB,SAAW0Z,OAAQ,UACnBjR,UACAmhB,KAAM,WACF,GAAIC,GAAcjqB,KAAK1I,QAAQgiB,QAAQ7hB,GAAMutB,aAAa,mCAC1D,OAAOvtB,IAAMoxB,eAAeoB,EAAaxyB,GAAMgrB,OAAOD,KAAO5c,IAEjEskB,uBAAwB,WACpB,GAAIF,GAAOhqB,KAAKgqB,MAChB,OAAOA,IAAQA,EAAK5pB,QAAQ+pB,oBAEhCpB,UAAW,WACP,GAAIzxB,GAAU0I,KAAK1I,QAAQgiB,QAAQ7hB,GAAMutB,aAAa,0CACtD,OAAOvtB,IAAMoxB,eAAevxB,EAAQ8yB,GAAG,GAAI3yB,GAAMgrB,OAAOD,KAAO5c,MAGvElF,GAAOjJ,GAAMgrB,QACT9hB,KAAM,SAAUrJ,GACZG,GAAMkJ,KAAKrJ,EAASG,GAAMgrB,OAAOD,GAAI/qB,GAAM+qB,GAAI/qB,GAAMirB,QAAQF,KAEjE6H,wBAAyB,WACrB,MAAO5yB,IAAMgrB,OAAO6H,aAAe7yB,GAAMgrB,OAAO6H,YAAYlqB,SAAW3I,GAAMgrB,OAAO6H,YAAYlqB,QAAQ+pB,oBAE5GjC,SACA1F,IACI9c,OAAQG,GACRF,gBAAiBA,GAAgBjF,OAAOmF,GAAaqC,WACrDggB,SACAsB,OAAQ,SAAU9lB,GACdjM,GAAM+qB,GAAGgH,OAAO9lB,EAAQjM,GAAMgrB,OAAOD,GAAI,cAIrDhoB,EAAW/C,GAAMirB,SACb/hB,KAAM,SAAUrJ,GACZG,GAAMkJ,KAAKrJ,EAASG,GAAMirB,QAAQF,KAEtCA,IACI0F,SACAqC,UACAC,SACAhB,OAAQ,SAAU9lB,GACdjM,GAAM+qB,GAAGgH,OAAO9lB,EAAQjM,GAAMirB,QAAQF,MAG9C0F,WAEJzwB,GAAMgzB,cAAgB,SAAU9C,EAAUvnB,GAKtC,MAJKA,KACDA,MAEJA,EAAQsqB,WAAY,EACbz0B,EAAE0xB,GAAU1T,IAAI,SAAUzW,EAAKlG,GAElC,MADAA,GAAUrB,EAAEqB,MACRI,GAAQ0oB,sBAAuB3oB,GAAMgrB,OAAOD,GAAGmI,UAAarzB,EAAQ8D,KAAK,0BACzE9D,EAAQszB,oBAAoBxqB,GACrB9I,EAAQ8D,KAAK,0BAIzB,IAEP3D,GAAMoN,eAAiB,SAAUrG,GAC7BA,EAAEqG,kBAENpN,GAAMoxB,eAAiB,SAAUvxB,EAASuzB,GAAnB,GACuCnwB,GAAGvD,EAMjD2zB,EA2BApnB,EAEIzC,EAnCZiC,EAAO5L,EAAQ8D,KAAK3D,GAAMkL,GAAK,QAAS2f,KAAyByI,EAAczzB,EAAQ8D,KAAK,YAChG,IAAI8H,EAAM,CAIN,GAHa,YAATA,IACAA,EAAO,YAEE,kBAATA,IACI4nB,EAAgBxzB,EAAQ8D,KAAK,uBAE7B,MAAO0vB,EAGf,IAAa,SAAT5nB,GAAmB6nB,EACnB,MAAOA,EAEX,IAAIF,EACA,GAAIA,EAAO,GACP,IAAKnwB,EAAI,EAAGvD,EAAS0zB,EAAO1zB,OAAQuD,EAAIvD,EAAQuD,IAC5C4nB,EAAQrZ,KAAK4hB,EAAOnwB,GAAGwtB,MAAMhlB,QAGjCof,GAAQrZ,KAAK4hB,EAAO3C,MAAMhlB,QAG9Bof,IACI7qB,GAAM+qB,GAAG0F,MAAMhlB,GACfzL,GAAMirB,QAAQF,GAAG0F,MAAMhlB,GACvBzL,GAAMgrB,OAAOD,GAAG0F,MAAMhlB,GAM9B,KAHIA,EAAKnF,QAAQ,MAAQ,IACrBukB,GAAW7qB,GAAM+sB,OAAOthB,GAAMhN,KAE7BwE,EAAI,EAAGvD,EAASmrB,EAAQnrB,OAAQuD,EAAIvD,EAAQuD,IAE7C,GADIgJ,EAAS4e,EAAQ5nB,GACjBgJ,IACIzC,EAAW3J,EAAQ8D,KAAK,QAAUsI,EAAOiB,GAAGvE,QAAQ0Z,OAASpW,EAAOiB,GAAGvE,QAAQmH,OAE/E,MAAOtG,KAM3BxJ,GAAMuzB,SAAW,SAAUlJ,GACvB,GAAIlZ,GAAUkZ,CAOd,OANIpqB,IAAQ6gB,SAAS0C,UACjBrS,EAAU,WACNqiB,WAAWnJ,EAAU,OAG7B7rB,EAAEC,GAAQkQ,GAAG1O,GAAQ0qB,OAAQxZ,GACtBA,GAEXnR,GAAMyzB,aAAe,SAAUpJ,GAC3B7rB,EAAEC,GAAQi1B,IAAIzzB,GAAQ0qB,OAAQN,IAElCrqB,GAAM2zB,UAAY,SAAU9zB,EAASyH,GACjC,MAAOzH,GAAQ8D,KAAK3D,GAAMkL,GAAK5D,IAEnCtH,GAAMyV,MACFme,OAAQ,EACRC,OAAQ,EACRC,QAAS,EACTC,UAAW,EACXC,SAAU,EACVC,OAAQ,EACRC,SAAU,GAWd11B,EAAEyK,OAAOzK,EAAEkO,KAAKC,SACZwnB,eAAgB,SAAUt0B,GACtB,GAAIkG,GAAMvH,EAAE2N,KAAKtM,EAAS,WAC1B,OAAOuM,GAAUvM,GAAUqf,MAAMnZ,IAAQA,SAG7CsI,IACA,YACA,YACA,aACA,aACA,YACA,WACA,UACA,SAEAC,GAA8B,oCAC9BC,IACA6lB,eAAgB,WAAA,GAQRjjB,GAPApL,EAAM,EAAGrG,EAAS2O,GAAa3O,OAAQG,EAAU8F,SAASsC,eAC9D,KAAIsG,GAAqB8lB,WAAcp0B,GAAQ8mB,aAkB/C,IAfAxY,GAAqB8lB,WAAY,EACjC9lB,GAAqB+lB,WAAY,EACjC/lB,GAAqBgmB,cAAe,EAChCpjB,EAAU,SAAUpK,GAChBwH,GAAqBgmB,eACN,UAAXxtB,EAAEU,KACE8G,GAAqB+lB,YAAc91B,EAAEuI,EAAEgJ,QAAQ9N,GAAGqM,MAClDvH,EAAEqG,iBACFrG,EAAEytB,mBAGNztB,EAAEytB,oBAIPzuB,EAAMrG,EAAQqG,IACjBlG,EAAQmnB,iBAAiB3Y,GAAatI,GAAMoL,GAAS,IAG7DsjB,UAAW,SAAU1tB,GACjBwH,GAAqBgmB,cAAe,EAChCxtB,EAAEpD,KAAK2wB,YACP/lB,GAAqB+lB,WAAY,GAErCI,aAAanmB,GAAqBomB,qBAEtCC,YAAa,WACTF,aAAanmB,GAAqBomB,oBAClCpmB,GAAqBomB,mBAAqBnB,WAAW,WACjDjlB,GAAqBgmB,cAAe,EACpChmB,GAAqB+lB,WAAY,GAClC,OAGP9lB,IACAoa,KAAM,uBACNiM,KAAM,sBACNhM,GAAI,+BACJiM,OAAQ,0BAER70B,GAAQ8hB,QAAU9hB,GAAQ6gB,SAASsD,KAAOnkB,GAAQ6gB,SAAS0C,SAC3DhV,IACIoa,KAAM,aACNiM,KAAM,YACNhM,GAAI,uBACJiM,OAAQ,eAEL70B,GAAQ6H,SACf0G,IACIoa,KAAM,cACNiM,KAAM,cACNhM,GAAI,YACJiM,OAAQ,8BAEL70B,GAAQ8H,aACfyG,IACIoa,KAAM,gBACNiM,KAAM,gBACNhM,GAAI,cACJiM,OAAQ,oCAGZ70B,GAAQ8H,YAAgB,oBAAsBtJ,IAC9CD,EAAEsH,MACEivB,eAAgB,gBAChBC,eAAgB,gBACjB,SAAUC,EAAMC,GACf12B,EAAE+jB,MAAM4S,QAAQF,IACZG,aAAcF,EACdG,SAAUH,EACVI,OAAQ,SAAU/S,GACd,GAAIgT,GAAKxlB,EAASxH,KAAMitB,EAAUjT,EAAMkT,cAAeC,EAAYnT,EAAMmT,SAMzE,OALKF,KAAWA,IAAYzlB,GAAWvR,EAAEuN,SAASgE,EAAQylB,MACtDjT,EAAM9a,KAAOiuB,EAAUC,SACvBJ,EAAMG,EAAUvkB,QAAQX,MAAMjI,KAAMrF,WACpCqf,EAAM9a,KAAOytB,GAEVK,MAKnB9mB,GAAc,SAAU1H,GACpB,MAAOyH,IAASzH,IAAMA,GACvB2H,GAAa,WACpB1O,GAAM41B,cAAgB,SAAUxkB,EAAQlG,GAKpC,MAJAkG,GAASA,EAAOnS,QAAQyP,GAAYD,IAChCvD,IACAkG,EAASA,EAAOnS,QAAQyP,GAAY,MAAQxD,IAEzCkG,GAEXpR,GAAM61B,eAAiB,SAAU9uB,EAAGkF,GAAb,GAQVlG,GAASrG,EAPd0R,EAASnF,EAAO4E,QAAQilB,YAC5B,KAAK1kB,EACD,OAAO,CAKX,KAHAA,EAASA,EAAO3B,QAChB1I,EAAE4K,OAAS1F,EACXlF,EAAEgvB,qBAAsB,EACfhwB,EAAM,EAAGrG,EAAS0R,EAAO1R,OAAQqG,EAAMrG,EAAQqG,IACpDqL,EAAOrL,GAAK6L,KAAK3F,EAAQlF,EAE7B,QAAQA,EAAEgvB,qBAEVpnB,GAAKnQ,EAAE0O,GAAGyB,GAIde,IAAkB,EAAM3C,EAAavO,GACrCuO,EAAYG,GAAKH,EAAY0D,UAAY,GAAIjS,GAC7CuO,EAAYG,GAAGlJ,YAAc+I,EAC7BA,EAAYG,GAAGhE,KAAO,SAAU8D,EAAUC,GAItC,MAHIA,IAAWA,YAAmBzO,MAAOyO,YAAmBF,MACxDE,EAAUF,EAAYE,IAEnBzO,EAAE0O,GAAGhE,KAAK0I,KAAKrJ,KAAMyE,EAAUC,EAAS2B,KAEnD7B,EAAYG,GAAGhE,KAAKuH,UAAY1D,EAAYG,GACxC0B,GAAa7B,EAAYpH,UAC7BsD,GAAO8D,EAAYG,IACfiE,QAAS,SAAUA,GAEf,MADA5I,MAAK5E,KAAK,UAAWwN,GACd5I,MAEX8pB,YAAa,SAAUnnB,GAEnB,MADA3C,MAAK5E,KAAK,UAAWuH,GAAMlL,GAAMotB,QAC1B7kB,MAEXoG,GAAI,WAAA,GAKI1B,GAAgBilB,EAIhB7H,EAAkCjZ,EAG9BpE,EAA+CsnB,EAQ/CroB,EACA+pB,EApBJ1lB,EAAO/H,KAAM2C,EAAKoF,EAAK3M,KAAK,UAChC,OAAyB,KAArBT,UAAUxD,OACHiP,GAAGiD,KAAKtB,EAAMpN,UAAU,KAE/B+J,EAAUqD,EAAM4hB,EAAOziB,GAAMmC,KAAK1O,iBAC3BgvB,GAAKA,EAAKxyB,OAAS,KAAO2E,IACjC6tB,EAAK+D,MAEL5L,EAAW6H,EAAKA,EAAKxyB,OAAS,GAAI0R,EAASpR,GAAM41B,cAAc1D,EAAK,GAAIhnB,GACxEjL,GAAQ2lB,sBAAwBxU,EAAO8kB,OAAO,mBAAuB3tB,KAAK,KAAO5C,SAASsC,kBAC1FsG,GAAqB6lB,iBACjBpnB,EAA2B,IAAhBklB,EAAKxyB,OAAe,KAAOwyB,EAAK,GAAIoC,EAAYljB,EAAO9K,QAAQ,aAAiB8K,EAAO9K,QAAQ,eAC9GqI,GAAGiD,KAAKrJ,MACJ4tB,WAAY5nB,GAAqBkmB,UACjC2B,SAAU7nB,GAAqBqmB,aAChC5nB,GAAYsnB,UAAWA,KAE1BpxB,UAAU,GAAGoD,QAAQ,iBAAqB4rB,EAAK,IAAMA,EAAK,GAAGvpB,SAC7DupB,EAAK,GAAK9gB,EACNnF,EAASimB,EAAK,GACd8D,EAAkB9D,EAAKA,EAAKxyB,OAAS,GACzCwyB,EAAKA,EAAKxyB,OAAS,GAAK,SAAUqH,GAC9B,GAAI/G,GAAM61B,eAAe9uB,EAAGkF,GACxB,MAAO+pB,GAAgBxlB,MAAMjI,MAAOxB,KAG5C4H,GAAG6B,MAAMF,EAAM4hB,GACR5hB,UAEA+Z,KAAathB,KACpBkE,EAAUqD,EAAK3M,KAAK,WACpB0mB,EAAWpd,EAAQod,GACnB6H,EAAKA,EAAKxyB,OAAS,GAAK,SAAUqH,GAC9BsjB,EAASzY,KAAK3E,EAASlG,KAG/BmrB,EAAK,GAAK9gB,EACVzC,GAAG6B,MAAMF,EAAM4hB,GACR5hB,KAEXgiB,aAAc,SAAUpnB,GAKpB,MAJAA,GAAKA,GAAM3C,KAAK5E,KAAK,WACjBuH,GACA3C,KAAKmrB,IAAI,IAAMxoB,GAEZ3C,QAGfvI,GAAMiQ,OAASlD,EACf/M,GAAMwO,SAAWA,GACjBxO,GAAMggB,SAAW,WAwBb,QAASqW,GAAW7X,EAAM8X,GAA1B,GACQjhB,GACAkhB,EACAC,EACA/X,EAAQ6X,EAAK,GACb3nB,EAAK2nB,EAAK,GACVG,EAAOH,EAAK,GACZI,EAAQJ,EAAK,EAIjB,OAHKI,KACDJ,EAAK,GAAKI,MAEVA,EAAMlY,GACCkY,EAAMlY,IAEZU,MAAMvQ,GAEuB,IAAvBA,EAAGrI,QAAQ,SAClB+O,EAAO,GAAI/Q,MAAKA,KAAK+Y,IAAImB,EAAM9I,EAAO+I,GAAS,EAAG,EAAGgY,EAAK,GAAK,GAAIA,EAAK,GAAIA,EAAK,GAAI,IACrFF,EAAY9gB,EAAK9G,EAAGoP,OAAO,EAAG,IAC9ByY,EAASnhB,EAAKshB,YACdthB,EAAKuhB,WAAWvhB,EAAKhB,aAAekiB,EAAYC,GAAUD,EAAYC,EAAS,EAAI,KAC5E7nB,EAAGrI,QAAQ,OAAS,GAC3B+O,EAAO,GAAI/Q,MAAKA,KAAK+Y,IAAImB,EAAM9I,EAAO+I,GAAQ9P,EAAGoP,OAAO,GAAI0Y,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAI,IACvFF,EAAY9gB,EAAK9G,EAAGoP,OAAO,EAAG,IAC9ByY,EAASnhB,EAAKshB,YACdthB,EAAKuhB,WAAWvhB,EAAKhB,aAAekiB,EAAYC,GAAUD,EAAYC,EAAS,EAAI,KAC5E7nB,EAAGrI,QAAQ,OAAS,IAC3B+O,EAAO,GAAI/Q,MAAKA,KAAK+Y,IAAImB,EAAM9I,EAAO+I,GAAQ9P,EAAGoP,OAAO,GAAI0Y,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAI,IACvFF,EAAY9gB,EAAK9G,EAAGoP,OAAO,EAAG,IAC9ByY,EAASnhB,EAAKshB,YACdthB,EAAKuhB,WAAWvhB,EAAKhB,aAAekiB,EAAYC,GAAUD,EAAYC,EAAS,EAAI,KAfnFnhB,EAAO,GAAI/Q,MAAKA,KAAK+Y,IAAImB,EAAM9I,EAAO+I,GAAQ9P,EAAI8nB,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAI,IAiB1EC,EAAMlY,GAAQnJ,GAEzB,QAASwhB,GAASC,EAASC,EAAOC,GAAlC,GAGYP,GACA9uB,EAmBJ6W,EAgBA8X,CArCJ,QADAS,EAAQA,EAAMC,KAsBVxY,EAAO,GAAIla,MAAKwyB,GAAS3iB,iBAC7B4iB,EAAQ9mB,OAAOgnB,KAAKF,EAAO,SAAUT,GAAV,GACnBY,GAAOZ,EAAK,GACZa,EAAKb,EAAK,EACd,OAAOY,IAAQ1Y,IAAS2Y,GAAM3Y,GAAQ0Y,GAAQ1Y,GAAc,QAAN2Y,GAAsB,OAANA,KAE1EJ,EAAMvlB,KAAKslB,GACXC,EAAMrP,KAAK,SAAU7b,EAAGC,GAOpB,MANgB,gBAALD,KACPA,GAAWwqB,EAAW7X,EAAM3S,IAEhB,gBAALC,KACPA,GAAWuqB,EAAW7X,EAAM1S,IAEzBD,EAAIC,IAEXwqB,EAAOS,EAAM9mB,OAAO/D,QAAQ4qB,EAASC,GAAS,IAAMA,EAAMA,EAAMr3B,OAAS,GACtEwf,MAAMoX,GAAQA,EAAO,OArCpBG,EAAOO,EAAKj4B,MAAM,KAClB4I,EAAS,EACT8uB,EAAK/2B,OAAS,IACdiI,EAAmB,GAAV8uB,EAAK,KAAiBA,EAAK,UAIpC,MACA,IACA,MACA,GAEI,EACA,EACA,GAEJ9uB,EACA,MAsBZ,QAASyvB,GAASN,EAASO,EAAOrX,GAAlC,GAQaja,GACDuxB,EAKJN,EAbAO,EAAYF,EAAMrX,EAItB,IAHyB,gBAAduX,KACPA,EAAYF,EAAME,KAEjBA,EACD,KAAUhlB,OAAM,aAAeyN,EAAW,oEAE9C,KAASja,EAAMwxB,EAAU73B,OAAS,EAAGqG,GAAO,IACpCuxB,EAAQC,EAAUxxB,GAAK,KACvBuxB,GAASR,EAAUQ,IAFoBvxB,KAO/C,GADIixB,EAAOO,EAAUxxB,EAAM,IACtBixB,EACD,KAAUzkB,OAAM,aAAeyN,EAAW,kBAAoB8W,EAAU,IAE5E,OAAOE,GAEX,QAASQ,GAAYV,EAASO,EAAON,EAAO/W,SAC7B8W,IAAWznB,KAClBynB,EAAUxyB,KAAK+Y,IAAIyZ,EAAQ3gB,cAAe2gB,EAAQ5gB,WAAY4gB,EAAQhhB,UAAWghB,EAAQ1gB,WAAY0gB,EAAQzgB,aAAcygB,EAAQxgB,aAAcwgB,EAAQvgB,mBAE7J,IAAIygB,GAAOI,EAASN,EAASO,EAAOrX,EACpC,QACIgX,KAAMA,EACNV,KAAMO,EAASC,EAASC,EAAOC,EAAK,KAG5C,QAASrvB,GAAOmvB,EAAS9W,GAAzB,GAIQyX,GACAT,EACAV,CALJ,OAAgB,WAAZtW,GAAqC,WAAZA,EAClB,GAEPyX,EAAOD,EAAYV,EAASvuB,KAAK8uB,MAAO9uB,KAAKwuB,MAAO/W,GACpDgX,EAAOS,EAAKT,KACZV,EAAOmB,EAAKnB,KACTt2B,GAAMoL,WAAWkrB,EAAOU,EAAK,GAAKV,EAAK,GAAKU,EAAK,KAE5D,QAAS9c,GAAK4c,EAAS9W,GAAvB,GACQyX,GAAOD,EAAYV,EAASvuB,KAAK8uB,MAAO9uB,KAAKwuB,MAAO/W,GACpDgX,EAAOS,EAAKT,KACZV,EAAOmB,EAAKnB,KACZjmB,EAAO2mB,EAAK,EAChB,OAAI3mB,GAAK/J,QAAQ,MAAQ,EACd+J,EAAKtR,MAAM,KAAKu3B,IAASA,EAAK,GAAK,EAAI,GACvCjmB,EAAK/J,QAAQ,OAAS,EACtB+J,EAAKpR,QAAQ,KAAOq3B,GAAmB,KAAXA,EAAK,GAAiBA,EAAK,GAAV,IAEjDjmB,EAEX,QAAS4P,GAAQ5K,EAAMqiB,EAAYC,GAAnC,GAEQC,GAOAC,EAEAC,EAVAC,EAAeJ,CAenB,cAbWD,IAAc3uB,KACrB2uB,EAAanvB,KAAKZ,OAAO0N,EAAMqiB,UAExBC,IAAY5uB,KACnB4uB,EAAWpvB,KAAKZ,OAAO0N,EAAMsiB,IAE7BE,EAAkBxiB,EAAKqB,oBAC3BrB,EAAO,GAAI/Q,MAAK+Q,EAAK9Q,UAAsC,KAAzBmzB,EAAaC,IAC3CG,EAAgBziB,EAAKqB,0BACdqhB,IAAgBhvB,KACvBgvB,EAAexvB,KAAKZ,OAAO0N,EAAM0iB,IAErCH,EAAOE,EAAgBD,GAAmBF,EAAWI,GAC9C,GAAIzzB,MAAK+Q,EAAK9Q,UAAmB,IAAPqzB,GAErC,QAASpnB,GAAM6E,EAAM2K,GACjB,MAAOzX,MAAK0X,QAAQ5K,EAAMA,EAAKqB,oBAAqBsJ,GAExD,QAAS8R,GAAOzc,EAAM2K,GAClB,MAAOzX,MAAK0X,QAAQ5K,EAAM2K,EAAU3K,EAAKqB,qBAE7C,QAASshB,GAAYvB,GACjB,MAAOluB,MAAKiI,MAAM,GAAIlM,MAAKmyB,GAAO,WAhLzB,GACT/gB,IACAuiB,IAAK,EACLC,IAAK,EACLC,IAAK,EACLC,IAAK,EACLC,IAAK,EACLC,IAAK,EACLC,IAAK,EACLC,IAAK,EACLC,IAAK,EACLC,IAAK,EACLC,IAAK,GACLC,IAAK,IAELnjB,GACAojB,IAAK,EACLC,IAAK,EACLC,IAAK,EACLC,IAAK,EACLC,IAAK,EACLC,IAAK,EACLC,IAAK,EA4JT,QACI9B,SACAN,SACApvB,OAAQA,EACRsY,QAASA,EACTzP,MAAOA,EACPshB,OAAQA,EACR5X,KAAMA,EACN8d,YAAaA,MAGrBh4B,GAAMqV,KAAO,WAET,QAASoH,GAAUpH,EAAMqH,GACrB,MAAc,KAAVA,GAAmC,KAApBrH,EAAKe,aACpBf,EAAKsH,SAAStH,EAAKe,WAAa,IACzB,GAIf,QAASgjB,GAAa/jB,EAAMqJ,EAAK2a,GAC7B,GAAI3c,GAAQrH,EAAKe,UACjBijB,GAAMA,GAAO,EACb3a,GAAOA,EAAMrJ,EAAKW,SAAW,EAAIqjB,GAAO,EACxChkB,EAAKikB,QAAQjkB,EAAKS,UAAY4I,GAC9BjC,EAAUpH,EAAMqH,GAEpB,QAAS6c,GAAUlkB,EAAMqJ,EAAK2a,GAG1B,MAFAhkB,GAAO,GAAI/Q,MAAK+Q,GAChB+jB,EAAa/jB,EAAMqJ,EAAK2a,GACjBhkB,EAEX,QAASmkB,GAAgBnkB,GACrB,MAAO,IAAI/Q,MAAK+Q,EAAKc,cAAed,EAAKa,WAAY,GAEzD,QAASujB,GAAepkB,GACpB,GAAIqkB,GAAO,GAAIp1B,MAAK+Q,EAAKc,cAAed,EAAKa,WAAa,EAAG,GAAIhX,EAAQs6B,EAAgBnkB,GAAOskB,EAAaxyB,KAAKC,IAAIsyB,EAAKhjB,oBAAsBxX,EAAMwX,oBAIvJ,OAHIijB,IACAD,EAAK/c,SAASzd,EAAMkX,WAAaujB,EAAa,IAE3CD,EAEX,QAASE,GAAoBvkB,EAAMwkB,GAC/B,MAAqB,KAAjBA,EACOC,EAAQP,EAAUlkB,EAAMwkB,MAAmB,GAE/CC,EAAQzkB,EAAM,GAAKA,EAAKW,UAAY,IAE/C,QAAS+jB,GAAe1kB,EAAMwkB,GAA9B,GACQG,GAAkB,GAAI11B,MAAK+Q,EAAKc,cAAe,EAAG,QAClD8jB,EAAUL,EAAoBvkB,EAAMwkB,GACpCK,EAAWD,EAAQ11B,UAAYy1B,EAAgBz1B,UAC/CkR,EAAOtO,KAAK5E,MAAM23B,EAAWC,EACjC,OAAO,GAAIhzB,KAAK5E,MAAMkT,EAAO,GAEjC,QAAS2kB,GAAW/kB,EAAMwkB,GAA1B,GAIQQ,GACAC,EACAC,CACJ,OANIV,KAAiBn7B,IACjBm7B,EAAe75B,GAAMgV,UAAUM,SAAS4F,UAExCmf,EAAeP,EAAQzkB,MACvBilB,EAAeR,EAAQzkB,EAAM,GAC7BklB,EAAaR,EAAe1kB,EAAMwkB,GACnB,IAAfU,EACOR,EAAeM,EAAcR,GAAgB,EAErC,KAAfU,GAAqBR,EAAeO,EAAcT,GAAgB,EAC3D,EAEJU,EAEX,QAASzkB,GAAQT,GAGb,MAFAA,GAAO,GAAI/Q,MAAK+Q,EAAKc,cAAed,EAAKa,WAAYb,EAAKS,UAAW,EAAG,EAAG,GAC3E2G,EAAUpH,EAAM,GACTA,EAEX,QAASmlB,GAAUnlB,GACf,MAAO/Q,MAAK+Y,IAAIhI,EAAKc,cAAed,EAAKa,WAAYb,EAAKS,UAAWT,EAAKe,WAAYf,EAAKgB,aAAchB,EAAKiB,aAAcjB,EAAKkB,mBAErI,QAASA,GAAgBlB,GACrB,MAAOolB,GAAgBplB,GAAM9Q,UAAYuR,EAAQ2kB,EAAgBplB,IAErE,QAASqlB,GAAc10B,EAAOyV,EAAKjb,GAC/B,GAAgEm6B,GAA5DC,EAAQrkB,EAAgBkF,GAAMof,EAAQtkB,EAAgB/V,EAC1D,QAAKwF,GAAS40B,GAASC,IAGnBpf,GAAOjb,IACPA,GAAO25B,GAEXQ,EAAUpkB,EAAgBvQ,GACtB40B,EAAQD,IACRA,GAAWR,GAEXU,EAAQD,IACRC,GAASV,GAENQ,GAAWC,GAASD,GAAWE,GAE1C,QAASC,GAAc90B,EAAOyV,EAAKjb,GAC/B,GAAkDm6B,GAA9CC,EAAQnf,EAAIlX,UAAWs2B,EAAQr6B,EAAI+D,SAKvC,OAJIq2B,IAASC,IACTA,GAASV,GAEbQ,EAAU30B,EAAMzB,UACTo2B,GAAWC,GAASD,GAAWE,EAE1C,QAASf,GAAQzkB,EAAM1N,GACnB,GAAI+U,GAAQrH,EAAKe,UAIjB,OAHAf,GAAO,GAAI/Q,MAAK+Q,GAChB0lB,EAAQ1lB,EAAM1N,EAASwyB,GACvB1d,EAAUpH,EAAMqH,GACTrH,EAEX,QAAS0lB,GAAQ1lB,EAAMuJ,EAAcoc,GAArC,GAEQC,GADAtzB,EAAS0N,EAAKqB,mBAElBrB,GAAK0lB,QAAQ1lB,EAAK9Q,UAAYqa,GACzBoc,IACDC,EAAa5lB,EAAKqB,oBAAsB/O,EACxC0N,EAAK0lB,QAAQ1lB,EAAK9Q,UAAY02B,EAAaC,IAGnD,QAASve,GAAStH,EAAMohB,GAGpB,MAFAphB,GAAO,GAAI/Q,MAAK+Q,EAAKc,cAAed,EAAKa,WAAYb,EAAKS,UAAW2gB,EAAKrgB,WAAYqgB,EAAKpgB,aAAcogB,EAAKngB,aAAcmgB,EAAKlgB,mBACjIkG,EAAUpH,EAAMohB,EAAKrgB,YACdf,EAEX,QAAS8lB,KACL,MAAOrlB,GAAQ,GAAIxR,OAEvB,QAAS82B,GAAQ/lB,GACb,MAAOS,GAAQT,GAAM9Q,WAAa42B,IAAQ52B,UAE9C,QAASk2B,GAAgBplB,GACrB,GAAIgmB,GAAa,GAAI/2B,MAAK,KAAM,EAAG,EAAG,EAAG,EAAG,EAI5C,OAHI+Q,IACAgmB,EAAW1e,SAAStH,EAAKe,WAAYf,EAAKgB,aAAchB,EAAKiB,aAAcjB,EAAKkB,mBAE7E8kB,EA9HX,GAAIH,GAAgB,IAAOf,EAAa,KAgIxC,QACI1d,UAAWA,EACX8c,UAAWA,EACXH,aAAcA,EACdtjB,QAASA,EACTglB,cAAeA,EACfJ,cAAeA,EACfU,QAASA,EACTE,QAAS,SAAUjmB,GACf,MAAOykB,GAAQzkB,EAAM,IAEzBkmB,YAAa,SAAUlmB,GACnB,MAAOykB,GAAQzkB,OAEnBmlB,UAAWA,EACXL,WAAYA,EACZqB,YAAa,GAAKN,EAClBA,cAAeA,EACfH,QAASA,EACTpe,SAAUA,EACVmd,QAASA,EACTqB,MAAOA,EACPV,gBAAiBA,EACjBjB,gBAAiBA,EACjBC,eAAgBA,EAChBW,WAAYA,EACZ7jB,gBAAiBA,MAGzBvW,GAAMy7B,gBAAkB,SAAU57B,GAAV,GAEZ67B,GASKz4B,EACD04B,CAXZ,IAAIh2B,SAASi2B,mBAIT,IAHIF,EAAW/1B,SAASi2B,mBAAmB/7B,EAASg8B,WAAWC,UAAW,SAAUC,GAChF,MAAOA,GAAK7T,YAAcroB,EAAUg8B,WAAWG,cAAgBH,WAAWI,gBAC3E,GACIP,EAASQ,YACRR,EAASS,gBAAkBT,EAASS,cAAcC,YAAYC,QAC9DX,EAASS,cAAcjU,WAAWtG,YAAY8Z,EAASS,mBAI/D,KAASl5B,EAAI,EAAGA,EAAIpD,EAAQy8B,WAAW58B,OAAQuD,IACvC04B,EAAQ97B,EAAQy8B,WAAWr5B,GACT,GAAlB04B,EAAM9K,UAAkB,KAAK7uB,KAAK25B,EAAMY,aACxC18B,EAAQ+hB,YAAY+Z,GACpB14B,KAEkB,GAAlB04B,EAAM9K,UACN7wB,GAAMy7B,gBAAgBE,IAKlC9sB,GAAiBpQ,EAAO+9B,uBAAyB/9B,EAAOg+B,6BAA+Bh+B,EAAOi+B,0BAA4Bj+B,EAAOk+B,wBAA0Bl+B,EAAOm+B,yBAA2B,SAAUvS,GACvMmJ,WAAWnJ,EAAU,IAAO,KAEhCrqB,GAAM6O,eAAiB,SAAUwb,GAC7Bxb,GAAe+C,KAAKnT,EAAQ4rB,IAE5Bvb,MACJ9O,GAAM68B,eAAiB,SAAUxS,GAC7Bvb,GAAeA,GAAepP,QAAU2qB,EACV,IAA1Bvb,GAAepP,QACfM,GAAM88B,oBAGd98B,GAAM88B,iBAAmB,WACrB98B,GAAM6O,eAAe,WACbC,GAAe,KACfA,GAAeyM,UACXzM,GAAe,IACf9O,GAAM88B,uBAKtB98B,GAAM+8B,uBAAyB,SAAUnQ,GAErC,IADA,GAAIoQ,GAAcpQ,EAAI7tB,MAAM,KAAK,IAAM,GAAIk+B,KAAaC,EAAaF,EAAYj+B,MAAM,OAAQW,EAASw9B,EAAWx9B,OAAQqG,EAAM,EAC1HA,EAAMrG,EAAQqG,GAAO,EACA,KAApBm3B,EAAWn3B,KACXk3B,EAAO3yB,mBAAmB4yB,EAAWn3B,KAASuE,mBAAmB4yB,EAAWn3B,EAAM,IAG1F,OAAOk3B,IAEXj9B,GAAMm9B,mBAAqB,SAAUp2B,GACjC,GAAyB,IAAdA,EAAEq2B,EAAEC,OACX,MAAO13B,UAASukB,iBAAiBnjB,EAAEq2B,EAAEC,OAAQt2B,EAAE+T,EAAEuiB,SAGzDr9B,GAAMs9B,YAAc,SAAUC,GAC1B,GAA2DC,GAAvDz2B,EAAIw2B,EAAYvT,cAAeyT,EAAS12B,EAAEu2B,WAQ9C,OAPIv2B,GAAE22B,YACED,IAAW/+B,GAAa++B,KACxBD,EAAQz2B,EAAE22B,YAEP32B,EAAE42B,QAAU52B,EAAE62B,OAAS72B,EAAE82B,gBAChCL,EAAoB,IAAXz2B,EAAE42B,QAERH,GAEXx9B,GAAM89B,SAAW,SAAU5wB,EAAI6wB,GAAd,GACTC,GAKAC,EAJAC,EAAe,CACnB,QAAKH,GAASA,GAAS,EACZ7wB,GAEP+wB,EAAY,WAIZ,QAASnlB,KACL5L,EAAGsD,MAAMF,EAAM4hB,GACfgM,GAAgB,GAAI55B,MANZ,GACRgM,GAAO/H,KACP41B,GAAW,GAAI75B,MAAS45B,EACxBhM,EAAOhvB,SAKX,OAAKg7B,IAGDF,GACAtJ,aAAasJ,GAEbG,EAAUJ,EACVjlB,IAEAklB,EAAUxK,WAAW1a,EAAMilB,EAAQI,GANvC,GAFWrlB,KAWfmlB,EAAUnJ,OAAS,WACfJ,aAAasJ,IAEVC,IAEXj+B,GAAMo+B,MAAQ,SAAUv+B,EAASyY,EAAO7Y,GAA1B,GACN4+B,GAeYrT,EAyBAsT,EAA4CC,EAAgBC,EAvCxEC,EAAanmB,IAAU5Z,CAO3B,IANIe,IAAQf,IACRe,EAAM6Y,GAENzY,EAAQ,KACRA,EAAUA,EAAQ,KAElB4+B,IAAc5+B,EAAQ0M,SAA1B,CAGA,IACQ1M,EAAQ0+B,iBAAmB7/B,EACvB+/B,GACA5+B,EAAQ6+B,QACJ1T,EAAS/qB,GAAQ6gB,SACjBkK,EAAO1H,IAAM0H,EAAOxH,QACpBgQ,WAAW,WACP3zB,EAAQ8+B,kBAAkBrmB,EAAO7Y,IAClC,GAEHI,EAAQ8+B,kBAAkBrmB,EAAO7Y,IAGrC6Y,GACIzY,EAAQ0+B,eACR1+B,EAAQ2+B,cAGT74B,SAASi5B,YACZpgC,EAAEqB,GAASoC,GAAG,aACdpC,EAAQ6+B,QAEZL,EAAex+B,EAAQg/B,kBACnBJ,GACAJ,EAAaS,UAAS,GACtBT,EAAaU,UAAU,YAAazmB,GACpC+lB,EAAaW,QAAQ,YAAav/B,EAAM6Y,GACxC+lB,EAAaY,WAETX,EAAkBD,EAAaa,YACnCb,EAAac,eAAex5B,SAASi5B,UAAUQ,cAAcC,eAC7Df,EAAgBgB,YAAY,aAAcjB,GAC1CE,EAAiBD,EAAgBiB,KAAK7/B,OACtC8+B,EAAeD,EAAiBF,EAAakB,KAAK7/B,OAClD4Y,GACIimB,EACAC,KAId,MAAOz3B,GACLuR,KAEJ,MAAOA,KAEXtY,GAAMw/B,uBAAyB,SAAU3/B,EAAS4/B,GAC9C,GAAInR,GAAU7vB,EAAO6vB,OAWrB,OAVAzuB,GAAQsM,KAAK,QAAUnM,GAAMkL,GAAK,OAAQrL,EAAQ,GAAG+tB,QAAQ1oB,cAAcjG,QAAQ,gBAAiB,IAAIA,QAAQ,IAAK,KACrHqvB,EAAQzuB,QAAQA,GAAS6/B,WAAWC,QAChC,WACA,SAAUC,GACNA,EAAS//B,GAAS4/B,GACb,qBAAqBz9B,KAAKy9B,EAAMI,UACjCJ,EAAMK,aAIX9/B,GAAMoxB,eAAevxB,EAASG,GAAMgrB,OAAOD,KAEtD/qB,GAAM+/B,kBAAoB,WACtB,GAAIC,MAAaC,EAAazhC,EAAE,0CAA0C2N,KAAK,WAAY+zB,EAAa1hC,EAAE,iDAAiD2N,KAAK,UAOhK,OANA3N,GAAE,6CAA+CsH,KAAK,WAClDk6B,EAAOz3B,KAAKuH,MAAQvH,KAAKvC,QAEzBk6B,IAAexhC,GAAauhC,IAAevhC,IAC3CshC,EAAOE,GAAcD,GAElBD,GAEXhgC,GAAMmgC,UAAY,SAAUC,GAGxB,QAAS1B,GAAMj4B,GACX,GAAIwF,GAASjM,GAAMoxB,eAAe3qB,EAC9BwF,IAAUA,EAAOyyB,MACjBzyB,EAAOyyB,QAEPj4B,EAAGi4B,QARG,GACV2B,GAAeD,EAAKnP,KAAK,oBAAoB/xB,QAC7CohC,EAAcF,EAAKnP,KAAK,qBAAqByI,MASjD4G,GAAY3xB,GAAG,UAAW,SAAU5H,GAC5BA,EAAEw5B,SAAWvgC,GAAMqrB,KAAKI,KAAQ1kB,EAAEy5B,WAClCz5B,EAAEqG,iBACFsxB,EAAM2B,MAGdA,EAAa1xB,GAAG,UAAW,SAAU5H,GAC7BA,EAAEw5B,SAAWvgC,GAAMqrB,KAAKI,KAAO1kB,EAAEy5B,WACjCz5B,EAAEqG,iBACFsxB,EAAM4B,OAIlBtgC,GAAMygC,aAAe,SAAU5gC,GAAV,GACb6gC,MACAC,EAAoB9gC,EAAQ+gC,aAAa,QAAQ9zB,OAAO,SAAU8O,EAAO/b,GACzE,GAAI4F,GAAgBzF,GAAMuF,kBAAkB1F,GAAU,YACtD,OAAkC,YAA3B4F,EAAcc,WACtBsD,IAAIpL,EACPkiC,GAAkB76B,KAAK,SAAU8V,EAAOna,GACpCi/B,EAAmB9kB,GAASpd,EAAEiD,GAAQyG,aAE1C,KACIrI,EAAQ,GAAGghC,YACb,MAAO95B,GACLlH,EAAQ,GAAG6+B,QAEfiC,EAAkB76B,KAAK,SAAU8V,EAAOna,GACpCjD,EAAEiD,GAAQyG,UAAUw4B,EAAmB9kB,OAG/C5b,GAAM8gC,iBAAmB,WAAA,GAEbC,GACAnlB,EAEIolB,CAJRr7B,UAASqW,gBACL+kB,EAAaviC,EAAE,mBACfod,EAAQmlB,EAAWnlB,MAAMjW,SAASqW,eAClCJ,OACIolB,EAAcD,EAAWnlB,EAAQ,IAAMmlB,EAAW,GACtDC,EAAYtC,WAIxB1+B,GAAMq8B,KAAO,SAAUr2B,GACnB,MAAMA,IACKA,GAAAA,GAAiBq2B,OAEjB,IAGfr8B,GAAMihC,0BAA4B,SAAUphC,GACxC,GAAwGkQ,GAApGmxB,EAAgBrhC,EAAQgiB,QAAQ,mBAAoBuP,EAAiBpxB,GAAMoxB,eAAevxB,EAQ9F,OANIkQ,GADAmxB,EAAcxhC,OACLwhC,EACF9P,EACkC,WAAhCA,EAAezoB,QAAQmH,KAAoBtR,EAAE4yB,EAAe3P,MAAQ2P,EAAezuB,QAAQsuB,KAAK,mBAAmB/xB,QAEnHW,GAIjBG,GAAMmhC,aAAe,SAAUthC,EAASuhC,EAAWp7B,GAC/C,GAAImP,GAAUtV,EAAQsM,KAAKi1B,IAAc,EACrCjsB,GAAQ7O,QAAQN,GAAS,GACzBnG,EAAQsM,KAAKi1B,GAAYjsB,EAAU,IAAMnP,GAAOq2B,SAGxDr8B,GAAMqhC,gBAAkB,SAAUxhC,EAASuhC,EAAWp7B,GAClD,GAAImP,GAAUtV,EAAQsM,KAAKi1B,IAAc,EACzCvhC,GAAQsM,KAAKi1B,EAAWjsB,EAAQlW,QAAQ+G,EAAO,IAAIq2B,SAEvDr8B,GAAMshC,gBAAkB,SAAUzhC,EAASuhC,EAAWp7B,GAClD,GAAImP,GAAUtV,EAAQsM,KAAKi1B,IAAc,EACrCjsB,GAAQ7O,QAAQN,GAAS,EACzBhG,GAAMmhC,aAAathC,EAASuhC,EAAWp7B,GAEvChG,GAAMqhC,gBAAgBxhC,EAASuhC,EAAWp7B,IAGlDhG,GAAMuhC,aAAe,SAAUC,GAC3B,GAAIC,GAAQzhC,GAAM0hC,kBAAkBF,IAAeA,CACnD,OAAOvhC,IAAQkoB,YAAc1pB,EAAO0pB,WAAWsZ,GAAOnkB,SAE1Dtd,GAAM0hC,kBAAoB,SAAUC,GAChC,OACIC,GAAM,qBACNC,GAAM,qBACNC,GAAM,qBACNC,GAAM,qBACNC,GAAM,uBACRL,IAEN3hC,GAAMiiC,cACFC,OACI,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,QAEJC,OACI,OACA,OACA,OACA,OACA,OACA,OACA,MACA,QACA,OACA,OACA,OACA,OACA,OACA,MACA,OACA,OACA,QAEJC,OACI,MACA,OACA,QACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,QACA,OACA,OACA,MACA,OACA,OACA,QACA,OACA,SAEJC,KACI,OACA,QACA,OACA,SACA,OACA,OACA,OACA,OACA,OACA,QACA,OACA,QAEJC,cACI,OACA,OACA,OACA,OACA,SAEJ3+B,MACI,OACA,OACA,SAEJ4+B,aACI,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,QACA,OACA,QACA,OACA,OACA,OACA,OACA,QACA,OACA,OACA,OACA,OACA,OACA,QACA,MACA,OACA,OACA,UAEJC,KAAM,QACNC,QACI,OACA,OACA,OACA,OACA,OACA,OACA,UACA,OACA,QAEJC,KACI,MACA,OACA,MACA,QACA,OACA,OACA,OACA,OACA,OACA,UACA,KACA,OACA,SAEJC,cACI,OACA,OACA,SACA,OACA,OACA,OACA,SAGR3iC,GAAM4iC,aAAe,SAAUC,EAAWC,GAArB,GAOR7/B,GACD8/B,EAPJC,EAAchjC,GAAMiiC,aACpBgB,EAASvyB,OAAO2a,KAAK2X,GACrBv7B,EAAO,MACX,IAAIo7B,IAAcnkC,IAAcmkC,EAAUnjC,OACtC,MAAO+H,EAEX,KAASxE,EAAI,EAAGA,EAAIggC,EAAOvjC,OAAQuD,GAAK,EAEpC,GADI8/B,EAAaC,EAAYC,EAAOhgC,IAChC8/B,EAAWz8B,QAAQu8B,EAAU39B,kBAC7B,M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","file":"kendo.ui.core.min.js","sourcesContent":["/*!\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n*/\n(function (f, define) {\n define('kendo.core', ['jquery'], f);\n}(function () {\n var __meta__ = {\n id: 'core',\n name: 'Core',\n category: 'framework',\n description: 'The core of the Kendo framework.'\n };\n (function ($, window, undefined) {\n var kendo = window.kendo = window.kendo || { cultures: {} }, extend = $.extend, each = $.each, isArray = $.isArray, proxy = $.proxy, noop = $.noop, math = Math, Template, JSON = window.JSON || {}, support = {}, percentRegExp = /%/, formatRegExp = /\\{(\\d+)(:[^\\}]+)?\\}/g, boxShadowRegExp = /(\\d+(?:\\.?)\\d*)px\\s*(\\d+(?:\\.?)\\d*)px\\s*(\\d+(?:\\.?)\\d*)px\\s*(\\d+)?/i, numberRegExp = /^(\\+|-?)\\d+(\\.?)\\d*$/, FUNCTION = 'function', STRING = 'string', NUMBER = 'number', OBJECT = 'object', NULL = 'null', BOOLEAN = 'boolean', UNDEFINED = 'undefined', getterCache = {}, setterCache = {}, slice = [].slice, noDepricateExtend = function () {\n var src, copyIsArray, copy, name, options, clone, target = arguments[0] || {}, i = 1, length = arguments.length, deep = false;\n if (typeof target === 'boolean') {\n deep = target;\n target = arguments[i] || {};\n i++;\n }\n if (typeof target !== 'object' && !jQuery.isFunction(target)) {\n target = {};\n }\n if (i === length) {\n target = this;\n i--;\n }\n for (; i < length; i++) {\n if ((options = arguments[i]) != null) {\n for (name in options) {\n if (name == 'filters' || name == 'concat' || name == ':') {\n continue;\n }\n src = target[name];\n copy = options[name];\n if (target === copy) {\n continue;\n }\n if (deep && copy && (jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)))) {\n if (copyIsArray) {\n copyIsArray = false;\n clone = src && jQuery.isArray(src) ? src : [];\n } else {\n clone = src && jQuery.isPlainObject(src) ? src : {};\n }\n target[name] = noDepricateExtend(deep, clone, copy);\n } else if (copy !== undefined) {\n target[name] = copy;\n }\n }\n }\n }\n return target;\n };\n kendo.version = '2020.3.1118'.replace(/^\\s+|\\s+$/g, '');\n function Class() {\n }\n Class.extend = function (proto) {\n var base = function () {\n }, member, that = this, subclass = proto && proto.init ? proto.init : function () {\n that.apply(this, arguments);\n }, fn;\n base.prototype = that.prototype;\n fn = subclass.fn = subclass.prototype = new base();\n for (member in proto) {\n if (proto[member] != null && proto[member].constructor === Object) {\n fn[member] = extend(true, {}, base.prototype[member], proto[member]);\n } else {\n fn[member] = proto[member];\n }\n }\n fn.constructor = subclass;\n subclass.extend = that.extend;\n return subclass;\n };\n Class.prototype._initOptions = function (options) {\n this.options = deepExtend({}, this.options, options);\n };\n var isFunction = kendo.isFunction = function (fn) {\n return typeof fn === 'function';\n };\n var preventDefault = function () {\n this._defaultPrevented = true;\n };\n var isDefaultPrevented = function () {\n return this._defaultPrevented === true;\n };\n var Observable = Class.extend({\n init: function () {\n this._events = {};\n },\n bind: function (eventName, handlers, one) {\n var that = this, idx, eventNames = typeof eventName === STRING ? [eventName] : eventName, length, original, handler, handlersIsFunction = typeof handlers === FUNCTION, events;\n if (handlers === undefined) {\n for (idx in eventName) {\n that.bind(idx, eventName[idx]);\n }\n return that;\n }\n for (idx = 0, length = eventNames.length; idx < length; idx++) {\n eventName = eventNames[idx];\n handler = handlersIsFunction ? handlers : handlers[eventName];\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 return that;\n },\n one: function (eventNames, handlers) {\n return this.bind(eventNames, handlers, true);\n },\n first: function (eventName, handlers) {\n var that = this, idx, eventNames = typeof eventName === STRING ? [eventName] : eventName, length, handler, handlersIsFunction = typeof handlers === FUNCTION, events;\n for (idx = 0, length = eventNames.length; idx < length; idx++) {\n eventName = eventNames[idx];\n handler = handlersIsFunction ? handlers : handlers[eventName];\n if (handler) {\n events = that._events[eventName] = that._events[eventName] || [];\n events.unshift(handler);\n }\n }\n return that;\n },\n trigger: function (eventName, e) {\n var that = this, events = that._events[eventName], idx, length;\n if (events) {\n e = e || {};\n e.sender = that;\n e._defaultPrevented = false;\n e.preventDefault = preventDefault;\n e.isDefaultPrevented = isDefaultPrevented;\n events = events.slice();\n for (idx = 0, length = events.length; idx < length; idx++) {\n events[idx].call(that, e);\n }\n return e._defaultPrevented === true;\n }\n return false;\n },\n unbind: function (eventName, handler) {\n var that = this, events = that._events[eventName], idx;\n if (eventName === undefined) {\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 return that;\n }\n });\n function compilePart(part, stringPart) {\n if (stringPart) {\n return '\\'' + part.split('\\'').join('\\\\\\'').split('\\\\\"').join('\\\\\\\\\\\\\"').replace(/\\n/g, '\\\\n').replace(/\\r/g, '\\\\r').replace(/\\t/g, '\\\\t') + '\\'';\n } else {\n var first = part.charAt(0), rest = part.substring(1);\n if (first === '=') {\n return '+(' + rest + ')+';\n } else if (first === ':') {\n return '+$kendoHtmlEncode(' + rest + ')+';\n } else {\n return ';' + part + ';$kendoOutput+=';\n }\n }\n }\n var argumentNameRegExp = /^\\w+/, encodeRegExp = /\\$\\{([^}]*)\\}/g, escapedCurlyRegExp = /\\\\\\}/g, curlyRegExp = /__CURLY__/g, escapedSharpRegExp = /\\\\#/g, sharpRegExp = /__SHARP__/g, zeros = [\n '',\n '0',\n '00',\n '000',\n '0000'\n ];\n Template = {\n paramName: 'data',\n useWithBlock: true,\n render: function (template, data) {\n var idx, length, html = '';\n for (idx = 0, length = data.length; idx < length; idx++) {\n html += template(data[idx]);\n }\n return html;\n },\n compile: function (template, options) {\n var settings = extend({}, this, options), paramName = settings.paramName, argumentName = paramName.match(argumentNameRegExp)[0], useWithBlock = settings.useWithBlock, functionBody = 'var $kendoOutput, $kendoHtmlEncode = kendo.htmlEncode;', fn, parts, idx;\n if (isFunction(template)) {\n return template;\n }\n functionBody += useWithBlock ? 'with(' + paramName + '){' : '';\n functionBody += '$kendoOutput=';\n parts = template.replace(escapedCurlyRegExp, '__CURLY__').replace(encodeRegExp, '#=$kendoHtmlEncode($1)#').replace(curlyRegExp, '}').replace(escapedSharpRegExp, '__SHARP__').split('#');\n for (idx = 0; idx < parts.length; idx++) {\n functionBody += compilePart(parts[idx], idx % 2 === 0);\n }\n functionBody += useWithBlock ? ';}' : ';';\n functionBody += 'return $kendoOutput;';\n functionBody = functionBody.replace(sharpRegExp, '#');\n try {\n fn = new Function(argumentName, functionBody);\n fn._slotCount = Math.floor(parts.length / 2);\n return fn;\n } catch (e) {\n throw new Error(kendo.format('Invalid template:\\'{0}\\' Generated code:\\'{1}\\'', template, functionBody));\n }\n }\n };\n function pad(number, digits, end) {\n number = number + '';\n digits = digits || 2;\n end = digits - number.length;\n if (end) {\n return zeros[digits].substring(0, end) + number;\n }\n return number;\n }\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, gap, indent, meta = {\n '\\b': '\\\\b',\n '\\t': '\\\\t',\n '\\n': '\\\\n',\n '\\f': '\\\\f',\n '\\r': '\\\\r',\n '\"': '\\\\\"',\n '\\\\': '\\\\\\\\'\n }, rep, toString = {}.toString;\n if (typeof Date.prototype.toJSON !== FUNCTION) {\n Date.prototype.toJSON = function () {\n var that = this;\n return isFinite(that.valueOf()) ? pad(that.getUTCFullYear(), 4) + '-' + pad(that.getUTCMonth() + 1) + '-' + pad(that.getUTCDate()) + 'T' + pad(that.getUTCHours()) + ':' + pad(that.getUTCMinutes()) + ':' + pad(that.getUTCSeconds()) + 'Z' : null;\n };\n String.prototype.toJSON = Number.prototype.toJSON = Boolean.prototype.toJSON = function () {\n return this.valueOf();\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 : '\\\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);\n }) + '\"' : '\"' + string + '\"';\n }\n function str(key, holder) {\n var i, k, v, length, mind = gap, partial, value = holder[key], type;\n if (value && typeof value === OBJECT && typeof value.toJSON === FUNCTION) {\n value = value.toJSON(key);\n }\n if (typeof rep === FUNCTION) {\n value = rep.call(holder, key, value);\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' + gap + partial.join(',\\n' + gap) + '\\n' + mind + ']' : '[' + 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 v = partial.length === 0 ? '{}' : gap ? '{\\n' + gap + partial.join(',\\n' + gap) + '\\n' + mind + '}' : '{' + partial.join(',') + '}';\n gap = mind;\n return v;\n }\n }\n if (typeof JSON.stringify !== FUNCTION) {\n JSON.stringify = function (value, replacer, space) {\n var i;\n gap = '';\n indent = '';\n if (typeof space === NUMBER) {\n for (i = 0; i < space; i += 1) {\n indent += ' ';\n }\n } else if (typeof space === STRING) {\n indent = space;\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 return str('', { '': value });\n };\n }\n }());\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, standardFormatRegExp = /^(n|c|p|e)(\\d*)$/i, literalRegExp = /(\\\\.)|(['][^']*[']?)|([\"][^\"]*[\"]?)/g, commaRegExp = /\\,/g, EMPTY = '', POINT = '.', COMMA = ',', SHARP = '#', ZERO = '0', PLACEHOLDER = '??', EN = 'en-US', objectToString = {}.toString;\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 '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 '$n'\n ],\n decimals: 2,\n ',': ',',\n '.': '.',\n groupSize: [3],\n symbol: '$'\n }\n },\n calendars: {\n standard: {\n days: {\n names: [\n 'Sunday',\n 'Monday',\n 'Tuesday',\n 'Wednesday',\n 'Thursday',\n 'Friday',\n 'Saturday'\n ],\n namesAbbr: [\n 'Sun',\n 'Mon',\n 'Tue',\n 'Wed',\n 'Thu',\n 'Fri',\n 'Sat'\n ],\n namesShort: [\n 'Su',\n 'Mo',\n 'Tu',\n 'We',\n 'Th',\n 'Fr',\n 'Sa'\n ]\n },\n months: {\n names: [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December'\n ],\n namesAbbr: [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec'\n ]\n },\n AM: [\n 'AM',\n 'am',\n 'AM'\n ],\n PM: [\n 'PM',\n 'pm',\n 'PM'\n ],\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 function findCulture(culture) {\n if (culture) {\n if (culture.numberFormat) {\n return culture;\n }\n if (typeof culture === STRING) {\n var cultures = kendo.cultures;\n return cultures[culture] || cultures[culture.split('-')[0]] || null;\n }\n return null;\n }\n return null;\n }\n function getCulture(culture) {\n if (culture) {\n culture = findCulture(culture);\n }\n return culture || kendo.cultures.current;\n }\n kendo.culture = function (cultureName) {\n var cultures = kendo.cultures, culture;\n if (cultureName !== undefined) {\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 kendo.findCulture = findCulture;\n kendo.getCulture = getCulture;\n kendo.culture(EN);\n function formatDate(date, format, culture) {\n culture = getCulture(culture);\n var calendar = culture.calendars.standard, days = calendar.days, months = calendar.months;\n format = calendar.patterns[format] || format;\n return format.replace(dateFormatRegExp, function (match) {\n var minutes;\n var result;\n var sign;\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 result = math.abs(minutes / 60).toString().split('.')[0];\n minutes = math.abs(minutes) - result * 60;\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 result = math.abs(result).toString().split('.')[0];\n result = (sign ? '+' : '-') + (match === 'zz' ? pad(result) : result);\n }\n return result !== undefined ? result : match.slice(1, match.length - 1);\n });\n }\n function formatNumber(number, format, culture) {\n culture = getCulture(culture);\n var numberFormat = culture.numberFormat, decimal = numberFormat[POINT], precision = numberFormat.decimals, pattern = numberFormat.pattern[0], literals = [], symbol, isCurrency, isPercent, customPrecision, formatAndPrecision, negative = number < 0, integer, fraction, integerLength, fractionLength, replacement = EMPTY, value = EMPTY, idx, length, ch, hasGroup, hasNegativeFormat, decimalIndex, sharpIndex, zeroIndex, hasZero, hasSharp, percentIndex, currencyIndex, startZeroIndex, start = -1, end;\n if (number === undefined) {\n return EMPTY;\n }\n if (!isFinite(number)) {\n return number;\n }\n if (!format) {\n return culture.name.length ? number.toLocaleString() : number.toString();\n }\n formatAndPrecision = standardFormatRegExp.exec(format);\n if (formatAndPrecision) {\n format = formatAndPrecision[1].toLowerCase();\n isCurrency = format === 'c';\n isPercent = format === 'p';\n if (isCurrency || isPercent) {\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 customPrecision = formatAndPrecision[2];\n if (customPrecision) {\n precision = +customPrecision;\n }\n if (format === 'e') {\n var exp = customPrecision ? number.toExponential(precision) : number.toExponential();\n return exp.replace(POINT, numberFormat[POINT]);\n }\n if (isPercent) {\n number *= 100;\n }\n number = round(number, precision);\n negative = number < 0;\n number = number.split(POINT);\n integer = number[0];\n fraction = number[1];\n if (negative) {\n integer = integer.substring(1);\n }\n value = groupInteger(integer, 0, integer.length, numberFormat);\n if (fraction) {\n value += decimal + fraction;\n }\n if (format === 'n' && !negative) {\n return value;\n }\n number = EMPTY;\n for (idx = 0, length = pattern.length; idx < length; idx++) {\n ch = pattern.charAt(idx);\n if (ch === 'n') {\n number += value;\n } else if (ch === '$' || ch === '%') {\n number += symbol;\n } else {\n number += ch;\n }\n }\n return number;\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('\\\\', ''), literal = match.slice(1).replace(quoteChar, '');\n literals.push(literal);\n return PLACEHOLDER;\n });\n }\n format = format.split(';');\n if (negative && format[1]) {\n format = format[1];\n hasNegativeFormat = true;\n } else if (number === 0 && format[2]) {\n format = format[2];\n if (format.indexOf(SHARP) == -1 && format.indexOf(ZERO) == -1) {\n return format;\n }\n } else {\n format = format[0];\n }\n percentIndex = format.indexOf('%');\n currencyIndex = format.indexOf('$');\n isPercent = percentIndex != -1;\n isCurrency = currencyIndex != -1;\n if (isPercent) {\n number *= 100;\n }\n if (isCurrency && format[currencyIndex - 1] === '\\\\') {\n format = format.split('\\\\').join('');\n isCurrency = false;\n }\n if (isCurrency || isPercent) {\n numberFormat = isCurrency ? numberFormat.currency : numberFormat.percent;\n decimal = numberFormat[POINT];\n precision = numberFormat.decimals;\n symbol = numberFormat.symbol;\n }\n hasGroup = format.indexOf(COMMA) > -1;\n if (hasGroup) {\n format = format.replace(commaRegExp, EMPTY);\n }\n decimalIndex = format.indexOf(POINT);\n length = format.length;\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 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 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 while (rounded.charAt(rounded.length - 1) === ZERO && sharpIndex > 0 && sharpIndex > zeroIndex) {\n sharpIndex--;\n rounded = round(number, sharpIndex, negative);\n }\n idx = sharpIndex;\n } else if (hasZero && idx < zeroIndex) {\n idx = zeroIndex;\n }\n }\n }\n number = round(number, idx, negative);\n sharpIndex = format.indexOf(SHARP);\n startZeroIndex = zeroIndex = format.indexOf(ZERO);\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 sharpIndex = format.lastIndexOf(SHARP);\n zeroIndex = format.lastIndexOf(ZERO);\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 if (start == length) {\n end = start;\n }\n if (start != -1) {\n value = number.toString().split(POINT);\n integer = value[0];\n fraction = value[1] || EMPTY;\n integerLength = integer.length;\n fractionLength = fraction.length;\n if (negative && number * -1 >= 0) {\n negative = false;\n }\n number = format.substring(0, start);\n if (negative && !hasNegativeFormat) {\n number += '-';\n }\n for (idx = start; idx < length; idx++) {\n ch = format.charAt(idx);\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 if (decimalIndex - idx <= integerLength && decimalIndex - idx > -1) {\n number += integer;\n idx = decimalIndex;\n }\n if (decimalIndex === idx) {\n number += (fraction ? decimal : EMPTY) + fraction;\n idx += end - decimalIndex + 1;\n continue;\n }\n }\n if (ch === ZERO) {\n number += ch;\n replacement = ch;\n } else if (ch === SHARP) {\n number += replacement;\n }\n }\n if (hasGroup) {\n number = groupInteger(number, start + (negative && !hasNegativeFormat ? 1 : 0), Math.max(end, integerLength + start), numberFormat);\n }\n if (end >= start) {\n number += format.substring(end + 1);\n }\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 length = literals.length;\n if (length) {\n for (idx = 0; idx < length; idx++) {\n number = number.replace(PLACEHOLDER, literals[idx]);\n }\n }\n }\n return number;\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 end = decimalIndex !== -1 ? decimalIndex : end + 1;\n integer = number.substring(start, end);\n integerLength = integer.length;\n if (integerLength >= groupSize) {\n idx = integerLength;\n parts = [];\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 ? newGroupSize : groupSize;\n if (groupSize === 0) {\n if (idx > 0) {\n parts.push(integer.substring(0, idx));\n }\n break;\n }\n }\n integer = parts.reverse().join(numberFormat[COMMA]);\n number = number.substring(0, start) + integer + number.substring(end);\n }\n return number;\n };\n var round = function (value, precision, negative) {\n precision = precision || 0;\n value = value.toString().split('e');\n value = Math.round(+(value[0] + 'e' + (value[1] ? +value[1] + precision : precision)));\n if (negative) {\n value = -value;\n }\n value = value.toString().split('e');\n value = +(value[0] + 'e' + (value[1] ? +value[1] - precision : -precision));\n return value.toFixed(Math.min(precision, 20));\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 return value !== undefined ? value : '';\n };\n kendo.format = function (fmt) {\n var values = arguments;\n return fmt.replace(formatRegExp, function (match, index, placeholderFormat) {\n var value = values[parseInt(index, 10) + 1];\n return toString(value, placeholderFormat ? placeholderFormat.substring(1) : '');\n });\n };\n kendo._extractFormat = function (format) {\n if (format.slice(0, 3) === '{0:') {\n format = format.slice(3, format.length - 1);\n }\n return format;\n };\n kendo._activeElement = function () {\n try {\n return document.activeElement;\n } catch (e) {\n return document.documentElement.activeElement;\n }\n };\n kendo._round = round;\n kendo._outerWidth = function (element, includeMargin) {\n return $(element).outerWidth(includeMargin || false) || 0;\n };\n kendo._outerHeight = function (element, includeMargin) {\n return $(element).outerHeight(includeMargin || false) || 0;\n };\n kendo.toString = toString;\n }());\n (function () {\n var nonBreakingSpaceRegExp = /\\u00A0/g, exponentRegExp = /[eE][\\-+]?[0-9]+/, shortTimeZoneRegExp = /[+|\\-]\\d{1,2}/, longTimeZoneRegExp = /[+|\\-]\\d{1,2}:?\\d{2}/, dateRegExp = /^\\/Date\\((.*?)\\)\\/$/, offsetRegExp = /[+-]\\d*/, FORMATS_SEQUENCE = [\n [],\n [\n 'G',\n 'g',\n 'F'\n ],\n [\n 'D',\n 'd',\n 'y',\n 'm',\n 'T',\n 't'\n ]\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 [\n 'yyyy-MM-ddTHH:mm',\n 'yyyy-MM-dd HH:mm',\n 'yyyy/MM/dd HH:mm'\n ],\n [\n 'yyyy/MM/dd',\n 'yyyy-MM-dd',\n 'HH:mm:ss',\n 'HH:mm'\n ]\n ], numberRegExp = {\n 2: /^\\d{1,2}/,\n 3: /^\\d{1,3}/,\n 4: /^\\d{4}/\n }, objectToString = {}.toString;\n function outOfRange(value, start, end) {\n return !(value >= start && value <= end);\n }\n function designatorPredicate(designator) {\n return designator.charAt(0);\n }\n function mapDesignators(designators) {\n return $.map(designators, designatorPredicate);\n }\n function adjustDST(date, hours) {\n if (!hours && date.getHours() === 23) {\n date.setHours(date.getHours() + 2);\n }\n }\n function lowerArray(data) {\n var idx = 0, length = data.length, array = [];\n for (; idx < length; idx++) {\n array[idx] = (data[idx] + '').toLowerCase();\n }\n return array;\n }\n function lowerLocalInfo(localInfo) {\n var newLocalInfo = {}, property;\n for (property in localInfo) {\n newLocalInfo[property] = lowerArray(localInfo[property]);\n }\n return newLocalInfo;\n }\n function parseExact(value, format, culture, strict) {\n if (!value) {\n return null;\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 }, getNumber = function (size) {\n var rg = numberRegExp[size] || new RegExp('^\\\\d{1,' + size + '}'), match = value.substr(valueIdx, size).match(rg);\n if (match) {\n match = match[0];\n valueIdx += match.length;\n return parseInt(match, 10);\n }\n return null;\n }, getIndexByName = function (names, lower) {\n var i = 0, length = names.length, name, nameLength, matchLength = 0, matchIdx = 0, subValue;\n for (; i < length; i++) {\n name = names[i];\n nameLength = name.length;\n subValue = value.substr(valueIdx, nameLength);\n if (lower) {\n subValue = subValue.toLowerCase();\n }\n if (subValue == name && nameLength > matchLength) {\n matchLength = nameLength;\n matchIdx = i;\n }\n }\n if (matchLength) {\n valueIdx += matchLength;\n return matchIdx + 1;\n }\n return null;\n }, checkLiteral = function () {\n var result = false;\n if (value.charAt(valueIdx) === format[idx]) {\n valueIdx++;\n result = true;\n }\n return result;\n }, calendar = culture.calendars.standard, year = null, month = null, day = null, hours = null, minutes = null, seconds = null, milliseconds = null, idx = 0, valueIdx = 0, literal = false, date = new Date(), twoDigitYearMax = calendar.twoDigitYearMax || 2029, defaultYear = date.getFullYear(), ch, count, length, pattern, pmHour, UTC, matches, amDesignators, pmDesignators, hoursOffset, minutesOffset, hasTime, match;\n if (!format) {\n format = 'd';\n }\n pattern = calendar.patterns[format];\n if (pattern) {\n format = pattern;\n }\n format = format.split('');\n length = format.length;\n for (; idx < length; idx++) {\n ch = format[idx];\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 if (day !== null && count > 2) {\n continue;\n }\n day = count < 3 ? getNumber(2) : getIndexByName(calendar._lowerDays[count == 3 ? 'namesAbbr' : 'names'], true);\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 if (month === null || outOfRange(month, 1, 12)) {\n return null;\n }\n month -= 1;\n } else if (ch === 'y') {\n count = lookAhead('y');\n year = getNumber(count);\n if (year === null) {\n return null;\n }\n if (count == 2) {\n if (typeof twoDigitYearMax === 'string') {\n twoDigitYearMax = defaultYear + parseInt(twoDigitYearMax, 10);\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 match = value.substr(valueIdx, count).match(numberRegExp[3]);\n milliseconds = getNumber(count);\n if (milliseconds !== null) {\n milliseconds = parseFloat('0.' + match[0], 10);\n milliseconds = kendo._round(milliseconds, 3);\n milliseconds *= 1000;\n }\n if (milliseconds === null || outOfRange(milliseconds, 0, 999)) {\n return null;\n }\n } else if (ch === 't') {\n count = lookAhead('t');\n amDesignators = calendar.AM;\n pmDesignators = calendar.PM;\n if (count === 1) {\n amDesignators = mapDesignators(amDesignators);\n pmDesignators = mapDesignators(pmDesignators);\n }\n pmHour = getIndexByName(pmDesignators);\n if (!pmHour && !getIndexByName(amDesignators)) {\n return null;\n }\n } else if (ch === 'z') {\n UTC = true;\n count = lookAhead('z');\n if (value.substr(valueIdx, 1) === 'Z') {\n checkLiteral();\n continue;\n }\n matches = value.substr(valueIdx, 6).match(count > 2 ? longTimeZoneRegExp : shortTimeZoneRegExp);\n if (!matches) {\n return null;\n }\n matches = matches[0].split(':');\n hoursOffset = matches[0];\n minutesOffset = matches[1];\n if (!minutesOffset && hoursOffset.length > 3) {\n valueIdx = hoursOffset.length - 2;\n minutesOffset = hoursOffset.substring(valueIdx);\n hoursOffset = hoursOffset.substring(0, valueIdx);\n }\n hoursOffset = parseInt(hoursOffset, 10);\n if (outOfRange(hoursOffset, -12, 13)) {\n return null;\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 if (strict && !/^\\s*$/.test(value.substr(valueIdx))) {\n return null;\n }\n hasTime = hours !== null || minutes !== null || seconds || null;\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 if (day === null) {\n day = 1;\n }\n }\n if (pmHour && hours < 12) {\n hours += 12;\n }\n if (UTC) {\n if (hoursOffset) {\n hours += -hoursOffset;\n }\n if (minutesOffset) {\n minutes += -minutesOffset;\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 if (year < 100) {\n value.setFullYear(year);\n }\n if (value.getDate() !== day && UTC === undefined) {\n return null;\n }\n return value;\n }\n function parseMicrosoftFormatOffset(offset) {\n var sign = offset.substr(0, 1) === '-' ? -1 : 1;\n offset = offset.substring(1);\n offset = parseInt(offset.substr(0, 2), 10) * 60 + parseInt(offset.substring(2), 10);\n return sign * offset;\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 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 return formats;\n }\n function internalParseDate(value, formats, culture, strict) {\n if (objectToString.call(value) === '[object Date]') {\n return value;\n }\n var idx = 0;\n var date = null;\n var length;\n var tzoffset;\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 date = new Date(parseInt(date, 10));\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 return date;\n }\n }\n culture = kendo.getCulture(culture);\n if (!formats) {\n formats = getDefaultFormats(culture);\n }\n formats = isArray(formats) ? formats : [formats];\n length = formats.length;\n for (; idx < length; idx++) {\n date = parseExact(value, formats[idx], culture, strict);\n if (date) {\n return date;\n }\n }\n return date;\n }\n kendo.parseDate = function (value, formats, culture) {\n return internalParseDate(value, formats, culture, false);\n };\n kendo.parseExactDate = function (value, formats, culture) {\n return internalParseDate(value, formats, culture, true);\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 kendo.parseFloat = function (value, culture, format) {\n if (!value && value !== 0) {\n return null;\n }\n if (typeof value === NUMBER) {\n return value;\n }\n value = value.toString();\n culture = kendo.getCulture(culture);\n var number = culture.numberFormat, percent = number.percent, currency = number.currency, symbol = currency.symbol, percentSymbol = percent.symbol, negative = value.indexOf('-'), parts, isPercent;\n if (exponentRegExp.test(value)) {\n value = parseFloat(value.replace(number['.'], '.'));\n if (isNaN(value)) {\n value = null;\n }\n return value;\n }\n if (negative > 0) {\n return null;\n } else {\n negative = negative > -1;\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 value = value.replace('-', '').replace(symbol, '').replace(nonBreakingSpaceRegExp, ' ').split(number[','].replace(nonBreakingSpaceRegExp, ' ')).join('').replace(number['.'], '.');\n value = parseFloat(value);\n if (isNaN(value)) {\n value = null;\n } else if (negative) {\n value *= -1;\n }\n if (value && isPercent) {\n value /= 100;\n }\n return value;\n };\n }());\n function getShadows(element) {\n var shadow = element.css(kendo.support.transitions.css + 'box-shadow') || element.css('box-shadow'), radius = shadow ? shadow.match(boxShadowRegExp) || [\n 0,\n 0,\n 0,\n 0,\n 0\n ] : [\n 0,\n 0,\n 0,\n 0,\n 0\n ], blur = math.max(+radius[3], +(radius[4] || 0));\n return {\n left: -radius[1] + blur,\n right: +radius[1] + blur,\n bottom: +radius[2] + blur\n };\n }\n function wrap(element, autosize) {\n var browser = support.browser, percentage, outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight, parent = element.parent(), windowOuterWidth = outerWidth(window);\n parent.removeClass('k-animation-container-sm');\n if (!parent.hasClass('k-animation-container')) {\n var width = element[0].style.width, height = element[0].style.height, percentWidth = percentRegExp.test(width), percentHeight = percentRegExp.test(height), forceWidth = element.hasClass('k-tooltip') || element.is('.k-menu-horizontal.k-context-menu');\n percentage = percentWidth || percentHeight;\n if (!percentWidth && (!autosize || autosize && width || forceWidth)) {\n width = autosize ? outerWidth(element) + 1 : outerWidth(element);\n }\n if (!percentHeight && (!autosize || autosize && height) || element.is('.k-menu-horizontal.k-context-menu')) {\n height = outerHeight(element);\n }\n element.wrap($('<div/>').addClass('k-animation-container').css({\n width: width,\n height: height\n }));\n parent = element.parent();\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 if (windowOuterWidth < outerWidth(parent)) {\n parent.addClass('k-animation-container-sm');\n wrapResize(element, autosize);\n }\n if (browser.msie && math.floor(browser.version) <= 7) {\n element.css({ zoom: 1 });\n element.children('.k-menu').width(element.width());\n }\n return parent;\n }\n function wrapResize(element, autosize) {\n var percentage, outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight, wrapper = element.parent('.k-animation-container'), wrapperStyle = wrapper[0].style;\n if (wrapper.is(':hidden')) {\n wrapper.css({\n display: '',\n position: ''\n });\n }\n percentage = percentRegExp.test(wrapperStyle.width) || percentRegExp.test(wrapperStyle.height);\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 function deepExtend(destination) {\n var i = 1, length = arguments.length;\n for (i = 1; i < length; i++) {\n deepExtendOne(destination, arguments[i]);\n }\n return destination;\n }\n function deepExtendOne(destination, source) {\n var ObservableArray = kendo.data.ObservableArray, LazyObservableArray = kendo.data.LazyObservableArray, DataSource = kendo.data.DataSource, HierarchicalDataSource = kendo.data.HierarchicalDataSource, property, propValue, propType, propInit, destProp;\n for (property in source) {\n propValue = source[property];\n propType = typeof propValue;\n if (propType === OBJECT && propValue !== null) {\n propInit = propValue.constructor;\n } else {\n propInit = null;\n }\n if (propInit && propInit !== Array && propInit !== ObservableArray && propInit !== LazyObservableArray && propInit !== DataSource && propInit !== HierarchicalDataSource && propInit !== RegExp && (!kendo.isFunction(window.ArrayBuffer) || propInit !== ArrayBuffer)) {\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 return destination;\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 ? dflt : agent;\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 function toCamelCase(str) {\n return str.replace(/\\-(\\w)/g, function (strMatch, g1) {\n return g1.toUpperCase();\n });\n }\n function getComputedStyles(element, properties) {\n var styles = {}, computedStyle;\n if (document.defaultView && document.defaultView.getComputedStyle) {\n computedStyle = document.defaultView.getComputedStyle(element, '');\n if (properties) {\n $.each(properties, function (idx, value) {\n styles[value] = computedStyle.getPropertyValue(value);\n });\n }\n } else {\n computedStyle = element.currentStyle;\n if (properties) {\n $.each(properties, function (idx, value) {\n styles[value] = computedStyle[toCamelCase(value)];\n });\n }\n }\n if (!kendo.size(styles)) {\n styles = computedStyle;\n }\n return styles;\n }\n function isScrollable(element) {\n if (element && element.className && typeof element.className === 'string' && element.className.indexOf('k-auto-scrollable') > -1) {\n return true;\n }\n var overflow = getComputedStyles(element, ['overflow']).overflow;\n return overflow == 'auto' || overflow == 'scroll';\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 if (element instanceof $ && value !== undefined) {\n element.each(function (i, e) {\n scrollLeft(e, value);\n });\n return;\n } else {\n el = element instanceof $ ? element[0] : element;\n }\n if (!el) {\n return;\n }\n isRtl = support.isRtl(element);\n if (value !== undefined) {\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 (function () {\n support._scrollbar = undefined;\n support.scrollbar = function (refresh) {\n if (!isNaN(support._scrollbar) && !refresh) {\n return support._scrollbar;\n } else {\n var div = document.createElement('div'), result;\n div.style.cssText = 'overflow:scroll;overflow-x:hidden;zoom:1;clear:both;display:block';\n div.innerHTML = ' ';\n document.body.appendChild(div);\n support._scrollbar = result = div.offsetWidth - div.scrollWidth;\n document.body.removeChild(div);\n return result;\n }\n };\n support.isRtl = function (element) {\n return $(element).closest('.k-rtl').length > 0;\n };\n var table = document.createElement('table');\n try {\n table.innerHTML = '<tr><td></td></tr>';\n support.tbodyInnerHtml = true;\n } catch (e) {\n support.tbodyInnerHtml = false;\n }\n support.touch = 'ontouchstart' in window;\n var docStyle = document.documentElement.style;\n var transitions = support.transitions = false, transforms = support.transforms = false, elementProto = 'HTMLElement' in window ? HTMLElement.prototype : [];\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 each([\n 'Moz',\n 'webkit',\n 'O',\n 'ms'\n ], function () {\n var prefix = this.toString(), hasTransitions = typeof table.style[prefix + 'Transition'] === STRING;\n if (hasTransitions || typeof table.style[prefix + 'Transform'] === STRING) {\n var lowPrefix = prefix.toLowerCase();\n transforms = {\n css: lowPrefix != 'ms' ? '-' + lowPrefix + '-' : '',\n prefix: prefix,\n event: lowPrefix === 'o' || lowPrefix === 'webkit' ? lowPrefix : ''\n };\n if (hasTransitions) {\n transitions = transforms;\n transitions.event = transitions.event ? transitions.event + 'TransitionEnd' : 'transitionend';\n }\n return false;\n }\n });\n table = null;\n support.transforms = transforms;\n support.transitions = transitions;\n support.devicePixelRatio = window.devicePixelRatio === undefined ? 1 : window.devicePixelRatio;\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) {\n support.screenWidth = window.screen.availWidth;\n support.screenHeight = window.screen.availHeight;\n }\n support.detectOS = function (ua) {\n var os = false, minorVersion, match = [], notAndroidPhone = !/mobile safari/i.test(ua), 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 }, 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 }, formFactorRxs = { tablet: /playbook|ipad|fire/i }, 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 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) {\n return false;\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;\n os.appMode = window.navigator.standalone || /file|local|wmapp/.test(window.location.protocol) || os.cordova;\n if (os.android && (support.devicePixelRatio < 1.5 && os.flatVersion < 400 || notAndroidPhone) && (support.screenWidth > 800 || support.screenHeight > 800)) {\n os.tablet = agent;\n }\n break;\n }\n }\n }\n return os;\n };\n var mobileOS = support.mobileOS = support.detectOS(navigator.userAgent);\n support.wpDevicePixelRatio = mobileOS.wp ? screen.width / 320 : 0;\n support.hasNativeScrolling = false;\n if (mobileOS.ios || mobileOS.android && mobileOS.majorVersion > 2 || mobileOS.wp) {\n support.hasNativeScrolling = mobileOS;\n }\n support.delayedClick = function () {\n if (support.touch) {\n if (mobileOS.ios) {\n return true;\n }\n if (mobileOS.android) {\n if (!support.browser.chrome) {\n return true;\n }\n if (support.browser.version < 32) {\n return false;\n }\n return !($('meta[name=viewport]').attr('content') || '').match(/user-scalable=no/i);\n }\n }\n return false;\n };\n support.mouseAndTouchPresent = support.touch && !(support.mobileOS.ios || support.mobileOS.android);\n support.detectBrowser = function (ua) {\n var browser = false, match = [], 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 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 break;\n }\n }\n }\n return browser;\n };\n support.browser = support.detectBrowser(navigator.userAgent);\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 if (support.browser.chrome) {\n commands.paste = false;\n if (support.browser.version >= 43) {\n commands.copy = true;\n commands.cut = true;\n }\n }\n return commands;\n };\n support.clipboard = support.detectClipboardAccess();\n support.zoomLevel = function () {\n try {\n var browser = support.browser;\n var ie11WidthCorrection = 0;\n var docEl = document.documentElement;\n if (browser.msie && browser.version == 11 && docEl.scrollHeight > docEl.clientHeight && !support.touch) {\n ie11WidthCorrection = support.scrollbar();\n }\n return support.touch ? docEl.clientWidth / window.innerWidth : browser.msie && browser.version >= 10 ? ((top || window).document.documentElement.offsetWidth + ie11WidthCorrection) / (top || window).innerWidth : 1;\n } catch (e) {\n return 1;\n }\n };\n support.cssBorderSpacing = typeof docStyle.borderSpacing != 'undefined' && !(support.browser.msie && support.browser.version < 8);\n (function (browser) {\n var cssClass = '', docElement = $(document.documentElement), majorVersion = parseInt(browser.version, 10);\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 if (cssClass) {\n cssClass = 'k-' + cssClass + ' k-' + cssClass + majorVersion;\n }\n if (support.mobileOS) {\n cssClass += ' k-mobile';\n }\n if (!support.cssFlexbox) {\n cssClass += ' k-no-flexbox';\n }\n docElement.addClass(cssClass);\n }(support.browser));\n support.eventCapture = document.documentElement.addEventListener;\n var input = document.createElement('input');\n support.placeholder = 'placeholder' in input;\n support.propertyChangeEvent = 'onpropertychange' in input;\n support.input = function () {\n var types = [\n 'number',\n 'date',\n 'time',\n 'month',\n 'week',\n 'datetime',\n 'datetime-local'\n ];\n var length = types.length;\n var value = 'test';\n var result = {};\n var idx = 0;\n var type;\n for (; idx < length; idx++) {\n type = types[idx];\n input.setAttribute('type', type);\n input.value = value;\n result[type.replace('-', '')] = input.type !== 'text' && input.value !== value;\n }\n return result;\n }();\n input.style.cssText = 'float:left;';\n support.cssFloat = !!input.style.cssFloat;\n input = null;\n support.stableSort = function () {\n var threshold = 513;\n var sorted = [{\n index: 0,\n field: 'b'\n }];\n for (var i = 1; i < threshold; i++) {\n sorted.push({\n index: i,\n field: 'a'\n });\n }\n sorted.sort(function (a, b) {\n return a.field > b.field ? 1 : a.field < b.field ? -1 : 0;\n });\n return sorted[0].index === 1;\n }();\n support.matchesSelector = elementProto.webkitMatchesSelector || elementProto.mozMatchesSelector || elementProto.msMatchesSelector || elementProto.oMatchesSelector || elementProto.matchesSelector || elementProto.matches || function (selector) {\n var nodeList = document.querySelectorAll ? (this.parentNode || document).querySelectorAll(selector) || [] : $(selector), i = nodeList.length;\n while (i--) {\n if (nodeList[i] == this) {\n return true;\n }\n }\n return false;\n };\n support.matchMedia = 'matchMedia' in window;\n support.pushState = window.history && window.history.pushState;\n var documentMode = document.documentMode;\n support.hashChange = 'onhashchange' in window && !(support.browser.msie && (!documentMode || documentMode <= 8));\n support.customElements = 'registerElement' in window.document;\n var chrome = support.browser.chrome, mobileChrome = support.browser.crios, mozilla = support.browser.mozilla, safari = support.browser.safari;\n support.msPointers = !chrome && window.MSPointerEvent;\n support.pointers = !chrome && !mobileChrome && !mozilla && !safari && window.PointerEvent;\n support.kineticScrollNeeded = mobileOS && (support.touch || support.msPointers || support.pointers);\n }());\n function size(obj) {\n var result = 0, key;\n for (key in obj) {\n if (obj.hasOwnProperty(key) && key != 'toJSON') {\n result++;\n }\n }\n return result;\n }\n function getOffset(element, type, positioned) {\n if (!type) {\n type = 'offset';\n }\n var offset = element[type]();\n var result = {\n top: offset.top,\n right: offset.right,\n bottom: offset.bottom,\n left: offset.left\n };\n if (support.browser.msie && (support.pointers || support.msPointers) && !positioned) {\n var sign = support.isRtl(element) ? 1 : -1;\n result.top -= window.pageYOffset - document.documentElement.scrollTop;\n result.left -= window.pageXOffset + sign * document.documentElement.scrollLeft;\n }\n return result;\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 function parseEffects(input) {\n var effects = {};\n each(typeof input === 'string' ? input.split(' ') : input, function (idx) {\n effects[idx] = this;\n });\n return effects;\n }\n function fx(element) {\n return new kendo.effects.Element(element);\n }\n var effects = {};\n $.extend(effects, {\n enabled: true,\n Element: function (element) {\n this.element = $(element);\n },\n promise: function (element, options) {\n if (!element.is(':visible')) {\n element.css({ display: element.data('olddisplay') || 'block' }).css('display');\n }\n if (options.hide) {\n element.data('olddisplay', element.css('display')).hide();\n }\n if (options.init) {\n options.init();\n }\n if (options.completeCallback) {\n options.completeCallback(element);\n }\n element.dequeue();\n },\n disable: function () {\n this.enabled = false;\n this.promise = this.promiseShim;\n },\n enable: function () {\n this.enabled = true;\n this.promise = this.animatedPromise;\n }\n });\n effects.promiseShim = effects.promise;\n function prepareAnimationOptions(options, duration, reverse, complete) {\n if (typeof options === STRING) {\n if (isFunction(duration)) {\n complete = duration;\n duration = 400;\n reverse = false;\n }\n if (isFunction(reverse)) {\n complete = reverse;\n reverse = false;\n }\n if (typeof duration === BOOLEAN) {\n reverse = duration;\n duration = 400;\n }\n options = {\n effects: options,\n duration: duration,\n reverse: reverse,\n complete: complete\n };\n }\n return extend({\n effects: {},\n duration: 400,\n reverse: false,\n init: noop,\n teardown: noop,\n hide: false\n }, options, {\n completeCallback: options.complete,\n complete: noop\n });\n }\n function animate(element, options, duration, reverse, complete) {\n var idx = 0, length = element.length, instance;\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 return element;\n }\n function toggleClass(element, classes, options, add) {\n if (classes) {\n classes = classes.split(' ');\n each(classes, function (idx, value) {\n element.toggleClass(value, add);\n });\n }\n return element;\n }\n if (!('kendoAnimate' in $.fn)) {\n extend($.fn, {\n kendoStop: function (clearQueue, gotoEnd) {\n return this.stop(clearQueue, gotoEnd);\n },\n kendoAnimate: function (options, duration, reverse, complete) {\n return animate(this, options, duration, reverse, complete);\n },\n kendoAddClass: function (classes, options) {\n return kendo.toggleClass(this, classes, options, true);\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 var ampRegExp = /&/g, ltRegExp = /</g, quoteRegExp = /\"/g, aposRegExp = /'/g, gtRegExp = />/g;\n function htmlEncode(value) {\n return ('' + value).replace(ampRegExp, '&').replace(ltRegExp, '<').replace(gtRegExp, '>').replace(quoteRegExp, '"').replace(aposRegExp, ''');\n }\n function unescape(value) {\n var template;\n try {\n template = window.decodeURIComponent(value);\n } catch (error) {\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 return template;\n }\n var eventTarget = function (e) {\n return e.target;\n };\n if (support.touch) {\n eventTarget = function (e) {\n var touches = 'originalEvent' in e ? e.originalEvent.changedTouches : 'changedTouches' in e ? e.changedTouches : null;\n return touches ? document.elementFromPoint(touches[0].clientX, touches[0].clientY) : e.target;\n };\n each([\n 'swipe',\n 'swipeLeft',\n 'swipeRight',\n 'swipeUp',\n 'swipeDown',\n 'doubleTap',\n 'tap'\n ], function (m, value) {\n $.fn[value] = function (callback) {\n return this.bind(value, callback);\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 var wrapExpression = function (members, paramName) {\n var result = paramName || 'd', index, idx, length, member, count = 1;\n for (idx = 0, length = members.length; idx < length; idx++) {\n member = members[idx];\n if (member !== '') {\n index = member.indexOf('[');\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 count++;\n result += member + (idx < length - 1 ? ' || {})' : ')');\n }\n }\n return new Array(count).join('(') + result;\n }, localUrlRe = /^([a-z]+:)?\\/\\//i;\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: proxy(Template.compile, Template),\n render: proxy(Template.render, Template),\n stringify: proxy(JSON.stringify, JSON),\n eventTarget: eventTarget,\n htmlEncode: htmlEncode,\n unescape: unescape,\n isLocalUrl: function (url) {\n return url && !localUrlRe.test(url);\n },\n expr: function (expression, safe, paramName) {\n expression = expression || '';\n if (typeof safe == STRING) {\n paramName = safe;\n safe = false;\n }\n paramName = paramName || 'd';\n if (expression && expression.charAt(0) !== '[') {\n expression = '.' + expression;\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 return expression;\n },\n getter: function (expression, safe) {\n var key = expression + safe;\n return getterCache[key] = getterCache[key] || new Function('d', 'return ' + kendo.expr(expression, safe));\n },\n setter: function (expression) {\n return setterCache[expression] = setterCache[expression] || new Function('d,value', kendo.expr(expression) + '=value');\n },\n accessor: function (expression) {\n return {\n get: kendo.getter(expression),\n set: kendo.setter(expression)\n };\n },\n guid: function () {\n var id = '', i, random;\n for (i = 0; i < 32; i++) {\n random = math.random() * 16 | 0;\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 return id;\n },\n roleSelector: function (role) {\n return role.replace(/(\\S+)/g, '[' + kendo.attr('role') + '=$1],').slice(0, -1);\n },\n directiveSelector: function (directives) {\n var selectors = directives.split(' ');\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 return selectors.join(' ').replace(/(\\S+)/g, 'kendo-mobile-$1,').slice(0, -1);\n },\n triggeredByInput: function (e) {\n return /^(label|input|textarea|select)$/i.test(e.target.tagName);\n },\n onWidgetRegistered: function (callback) {\n for (var i = 0, len = kendo.widgets.length; i < len; i++) {\n callback(kendo.widgets[i]);\n }\n kendo._widgetRegisteredCallbacks.push(callback);\n },\n logToConsole: function (message, type) {\n var console = window.console;\n if (!kendo.suppressLog && typeof console != 'undefined' && console.log) {\n console[type || 'log'](message);\n }\n }\n });\n var Widget = Observable.extend({\n init: function (element, options) {\n var that = this;\n that.element = kendo.jQuery(element).handler(that);\n that.angular('init', options);\n Observable.fn.init.call(that);\n var dataSource = options ? options.dataSource : null;\n var props;\n if (options) {\n props = (that.componentTypes || {})[(options || {}).componentType];\n }\n if (dataSource) {\n options = extend({}, options, { dataSource: {} });\n }\n options = that.options = extend(true, {}, that.options, that.defaults, props || {}, options);\n if (dataSource) {\n options.dataSource = dataSource;\n }\n if (!that.element.attr(kendo.attr('role'))) {\n that.element.attr(kendo.attr('role'), (options.name || '').toLowerCase());\n }\n that.element.data('kendo' + options.prefix + options.name, that);\n that.bind(that.events, options);\n },\n events: [],\n options: { prefix: '' },\n _hasBindingTarget: function () {\n return !!this.element[0].kendoBindingTarget;\n },\n _tabindex: function (target) {\n target = target || this.wrapper;\n var element = this.element, TABINDEX = 'tabindex', tabindex = target.attr(TABINDEX) || element.attr(TABINDEX);\n element.removeAttr(TABINDEX);\n target.attr(TABINDEX, !isNaN(tabindex) ? tabindex : 0);\n },\n setOptions: function (options) {\n this._setEvents(options);\n $.extend(this.options, options);\n },\n _setEvents: function (options) {\n var that = this, idx = 0, length = that.events.length, e;\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 that.bind(that.events, options);\n },\n resize: function (force) {\n var size = this.getSize(), currentSize = this._size;\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 getSize: function () {\n return kendo.dimensions(this.element);\n },\n size: function (size) {\n if (!size) {\n return this.getSize();\n } else {\n this.setSize(size);\n }\n },\n setSize: $.noop,\n _resize: $.noop,\n destroy: function () {\n var that = this;\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 callback.call(this);\n this._muteRebind = false;\n }\n });\n var DataBoundWidget = Widget.extend({\n dataItems: function () {\n return this.dataSource.flatView();\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 kendo.dimensions = function (element, dimensions) {\n var domElement = element[0];\n if (dimensions) {\n element.css(dimensions);\n }\n return {\n width: domElement.offsetWidth,\n height: domElement.offsetHeight\n };\n };\n kendo.notify = noop;\n var templateRegExp = /template$/i, jsonRegExp = /^\\s*(?:\\{(?:.|\\r\\n|\\n)*\\}|\\[(?:.|\\r\\n|\\n)*\\])\\s*$/, jsonFormatRegExp = /^\\{(\\d+)(:[^\\}]+)?\\}|^\\[[A-Za-z_]+\\]$/, dashRegExp = /([A-Z])/g;\n function parseOption(element, option) {\n var value;\n if (option.indexOf('data') === 0) {\n option = option.substring(4);\n option = option.charAt(0).toLowerCase() + option.substring(1);\n }\n option = option.replace(dashRegExp, '-$1');\n value = element.getAttribute('data-' + kendo.ns + option);\n if (value === null) {\n value = undefined;\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') {\n value = parseFloat(value);\n } else if (jsonRegExp.test(value) && !jsonFormatRegExp.test(value)) {\n value = new Function('return (' + value + ')')();\n }\n return value;\n }\n function parseOptions(element, options, source) {\n var result = {}, option, value, role = element.getAttribute('data-' + kendo.ns + 'role');\n for (option in options) {\n value = parseOption(element, option);\n if (value !== undefined) {\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 result[option] = value;\n }\n }\n return result;\n }\n kendo.initWidget = function (element, options, roles) {\n var result, option, widget, idx, length, role, value, dataSource, fullPath, widgetKeyRegExp;\n if (!roles) {\n roles = kendo.ui.roles;\n } else if (roles.roles) {\n roles = roles.roles;\n }\n element = element.nodeType ? element : element[0];\n role = element.getAttribute('data-' + kendo.ns + 'role');\n if (!role) {\n return;\n }\n fullPath = role.indexOf('.') === -1;\n if (fullPath) {\n widget = roles[role];\n } else {\n widget = kendo.getter(role)(window);\n }\n var data = $(element).data(), widgetKey = widget ? 'kendo' + widget.fn.options.prefix + widget.fn.options.name : '';\n if (fullPath) {\n widgetKeyRegExp = new RegExp('^kendo.*' + role + '$', 'i');\n } else {\n widgetKeyRegExp = new RegExp('^' + widgetKey + '$', 'i');\n }\n for (var key in data) {\n if (key.match(widgetKeyRegExp)) {\n if (key === widgetKey) {\n result = data[key];\n } else {\n return data[key];\n }\n }\n }\n if (!widget) {\n return;\n }\n dataSource = parseOption(element, 'dataSource');\n options = $.extend({}, parseOptions(element, $.extend({}, widget.fn.options, widget.fn.defaults)), options);\n if (dataSource) {\n if (typeof dataSource === STRING) {\n options.dataSource = kendo.getter(dataSource)(window);\n } else {\n options.dataSource = dataSource;\n }\n }\n for (idx = 0, length = widget.fn.events.length; idx < length; idx++) {\n option = widget.fn.events[idx];\n value = parseOption(element, option);\n if (value !== undefined) {\n options[option] = kendo.getter(value)(window);\n }\n }\n if (!result) {\n result = new widget(element, options);\n } else if (!$.isEmptyObject(options)) {\n result.setOptions(options);\n }\n return result;\n };\n kendo.rolesFromNamespaces = function (namespaces) {\n var roles = [], idx, length;\n if (!namespaces[0]) {\n namespaces = [\n kendo.ui,\n kendo.dataviz.ui\n ];\n }\n for (idx = 0, length = namespaces.length; idx < length; idx++) {\n roles[idx] = namespaces[idx].roles;\n }\n return extend.apply(null, [{}].concat(roles.reverse()));\n };\n kendo.init = function (element) {\n var roles = kendo.rolesFromNamespaces(slice.call(arguments, 1));\n $(element).find('[data-' + kendo.ns + 'role]').addBack().each(function () {\n kendo.initWidget(this, {}, roles);\n });\n };\n kendo.destroy = function (element) {\n $(element).find('[data-' + kendo.ns + 'role]').addBack().each(function () {\n var data = $(this).data();\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 function containmentComparer(a, b) {\n return $.contains(a, b) ? -1 : 1;\n }\n function resizableWidget() {\n var widget = $(this);\n return $.inArray(widget.attr('data-' + kendo.ns + 'role'), [\n 'slider',\n 'rangeslider',\n 'breadcrumb'\n ]) > -1 || widget.is(':visible');\n }\n kendo.resize = function (element, force) {\n var widgets = $(element).find('[data-' + kendo.ns + 'role]').addBack().filter(resizableWidget);\n if (!widgets.length) {\n return;\n }\n var widgetsArray = $.makeArray(widgets);\n widgetsArray.sort(containmentComparer);\n $.each(widgetsArray, function () {\n var widget = kendo.widgetInstance($(this));\n if (widget) {\n widget.resize(force);\n }\n });\n };\n kendo.parseOptions = parseOptions;\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'), support = kendo.support, browser = support.browser, isRtl, leftRight, webkitCorrection, containerScrollLeft, cssClass;\n options = $.extend({}, {\n width: '100%',\n height: '100%',\n top: container.scrollTop(),\n opacity: false\n }, options);\n cssClass = options.opacity ? 'k-loading-mask k-opaque' : 'k-loading-mask';\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 mask = $(kendo.format('<div class=\\'{0}\\'><span class=\\'k-loading-text\\'>{1}</span><div class=\\'k-loading-image\\'></div><div class=\\'k-loading-color\\'></div></div>', cssClass, kendo.ui.progress.messages.loading)).width(options.width).height(options.height).css('top', options.top).css(leftRight, Math.abs(containerScrollLeft) + webkitCorrection).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, getter;\n register = register || kendo.ui;\n prefix = prefix || '';\n register[name] = widget;\n register.roles[name.toLowerCase()] = widget;\n getter = 'getKendo' + prefix + name;\n name = 'kendo' + prefix + name;\n var widgetEntry = {\n name: name,\n widget: widget,\n prefix: prefix || ''\n };\n kendo.widgets.push(widgetEntry);\n for (var i = 0, len = kendo._widgetRegisteredCallbacks.length; i < len; i++) {\n kendo._widgetRegisteredCallbacks[i](widgetEntry);\n }\n $.fn[name] = function (options) {\n var value = this, args;\n if (typeof options === STRING) {\n args = slice.call(arguments, 1);\n this.each(function () {\n var widget = $.data(this, name), method, result;\n if (!widget) {\n throw new Error(kendo.format('Cannot call method \\'{0}\\' of {1} before it is initialized', options, name));\n }\n method = widget[options];\n if (typeof method !== FUNCTION) {\n throw new Error(kendo.format('Cannot find method \\'{0}\\' of {1}', options, name));\n }\n result = method.apply(widget, args);\n if (result !== undefined) {\n value = result;\n return false;\n }\n });\n } else {\n this.each(function () {\n return new widget(this, options);\n });\n }\n return value;\n };\n $.fn[name].widget = widget;\n $.fn[getter] = function () {\n return this.data(name);\n };\n }\n });\n kendo.ui.progress.messages = { loading: 'Loading...' };\n var ContainerNullObject = {\n bind: function () {\n return this;\n },\n nullObject: true,\n 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 destroy: function () {\n Widget.fn.destroy.call(this);\n this.element.kendoDestroy();\n },\n options: { prefix: 'Mobile' },\n events: [],\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 viewHasNativeScrolling: function () {\n var view = this.view();\n return view && view.options.useNativeScrolling;\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 extend(kendo.mobile, {\n init: function (element) {\n kendo.init(element, kendo.mobile.ui, kendo.ui, kendo.dataviz.ui);\n },\n appLevelNativeScrolling: function () {\n return kendo.mobile.application && kendo.mobile.application.options && kendo.mobile.application.options.useNativeScrolling;\n },\n roles: {},\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 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 kendo.touchScroller = function (elements, options) {\n if (!options) {\n options = {};\n }\n options.useNative = true;\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 kendo.preventDefault = function (e) {\n e.preventDefault();\n };\n kendo.widgetInstance = function (element, suites) {\n var role = element.data(kendo.ns + 'role'), widgets = [], i, length, elementData = element.data('kendoView');\n if (role) {\n if (role === 'content') {\n role = 'scroller';\n }\n if (role === 'editortoolbar') {\n var editorToolbar = element.data('kendoEditorToolbar');\n if (editorToolbar) {\n return editorToolbar;\n }\n }\n if (role === 'view' && elementData) {\n return elementData;\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 } else {\n widgets = [\n kendo.ui.roles[role],\n kendo.dataviz.ui.roles[role],\n kendo.mobile.ui.roles[role]\n ];\n }\n if (role.indexOf('.') >= 0) {\n widgets = [kendo.getter(role)(window)];\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 kendo.onResize = function (callback) {\n var handler = callback;\n if (support.mobileOS.android) {\n handler = function () {\n setTimeout(callback, 600);\n };\n }\n $(window).on(support.resize, handler);\n return handler;\n };\n kendo.unbindResize = function (callback) {\n $(window).off(support.resize, callback);\n };\n kendo.attrValue = function (element, key) {\n return element.data(kendo.ns + key);\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 function focusable(element, isTabIndexNotNaN) {\n var nodeName = element.nodeName.toLowerCase();\n return (/input|select|textarea|button|object/.test(nodeName) ? !element.disabled : 'a' === nodeName ? element.href || isTabIndexNotNaN : isTabIndexNotNaN) && visible(element);\n }\n function visible(element) {\n return $.expr.pseudos.visible(element) && !$(element).parents().addBack().filter(function () {\n return $.css(this, 'visibility') === 'hidden';\n }).length;\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 var MOUSE_EVENTS = [\n 'mousedown',\n 'mousemove',\n 'mouseenter',\n 'mouseleave',\n 'mouseover',\n 'mouseout',\n 'mouseup',\n 'click'\n ];\n var EXCLUDE_BUST_CLICK_SELECTOR = 'label, input, [data-rel=external]';\n var MouseEventNormalizer = {\n setupMouseMute: function () {\n var idx = 0, length = MOUSE_EVENTS.length, element = document.documentElement;\n if (MouseEventNormalizer.mouseTrap || !support.eventCapture) {\n return;\n }\n MouseEventNormalizer.mouseTrap = true;\n MouseEventNormalizer.bustClick = false;\n MouseEventNormalizer.captureMouse = false;\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 for (; idx < length; idx++) {\n element.addEventListener(MOUSE_EVENTS[idx], handler, true);\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 unMuteMouse: function () {\n clearTimeout(MouseEventNormalizer.mouseTrapTimeoutID);\n MouseEventNormalizer.mouseTrapTimeoutID = setTimeout(function () {\n MouseEventNormalizer.captureMouse = false;\n MouseEventNormalizer.bustClick = false;\n }, 400);\n }\n };\n var eventMap = {\n down: 'touchstart mousedown',\n move: 'mousemove touchmove',\n up: 'mouseup touchend touchcancel',\n cancel: 'mouseleave touchcancel'\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 if (support.msPointers && !('onmspointerenter' in window)) {\n $.each({\n MSPointerEnter: 'MSPointerOver',\n MSPointerLeave: 'MSPointerOut'\n }, function (orig, fix) {\n $.event.special[orig] = {\n delegateType: fix,\n bindType: fix,\n handle: function (event) {\n var ret, target = this, related = event.relatedTarget, handleObj = event.handleObj;\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 var getEventMap = function (e) {\n return eventMap[e] || e;\n }, eventRegEx = /([^ ]+)/g;\n kendo.applyEventMap = function (events, ns) {\n events = events.replace(eventRegEx, getEventMap);\n if (ns) {\n events = events.replace(eventRegEx, '$1.' + ns);\n }\n return events;\n };\n kendo.keyDownHandler = function (e, widget) {\n var events = widget._events.kendoKeydown;\n if (!events) {\n return true;\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 return !e.preventKendoKeydown;\n };\n var on = $.fn.on;\n function kendoJQuery(selector, context) {\n return new kendoJQuery.fn.init(selector, context);\n }\n noDepricateExtend(true, kendoJQuery, $);\n kendoJQuery.fn = kendoJQuery.prototype = new $();\n kendoJQuery.fn.constructor = kendoJQuery;\n kendoJQuery.fn.init = function (selector, context) {\n if (context && context instanceof $ && !(context instanceof kendoJQuery)) {\n context = kendoJQuery(context);\n }\n return $.fn.init.call(this, selector, context, rootjQuery);\n };\n kendoJQuery.fn.init.prototype = kendoJQuery.fn;\n var rootjQuery = kendoJQuery(document);\n extend(kendoJQuery.fn, {\n handler: function (handler) {\n this.data('handler', handler);\n return this;\n },\n autoApplyNS: function (ns) {\n this.data('kendoNS', ns || kendo.guid());\n return this;\n },\n on: function () {\n var that = this, ns = that.data('kendoNS');\n if (arguments.length === 1) {\n return on.call(that, arguments[0]);\n }\n var context = that, args = slice.call(arguments);\n if (typeof args[args.length - 1] === UNDEFINED) {\n args.pop();\n }\n var callback = args[args.length - 1], events = kendo.applyEventMap(args[0], ns);\n if (support.mouseAndTouchPresent && events.search(/mouse|click/) > -1 && this[0] !== document.documentElement) {\n MouseEventNormalizer.setupMouseMute();\n var selector = args.length === 2 ? null : args[1], bustClick = events.indexOf('click') > -1 && events.indexOf('touchend') > -1;\n on.call(this, {\n touchstart: MouseEventNormalizer.muteMouse,\n touchend: MouseEventNormalizer.unMuteMouse\n }, selector, { bustClick: bustClick });\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 if (typeof callback === STRING) {\n context = that.data('handler');\n callback = context[callback];\n args[args.length - 1] = function (e) {\n callback.call(context, e);\n };\n }\n args[0] = events;\n on.apply(that, args);\n return that;\n },\n kendoDestroy: function (ns) {\n ns = ns || this.data('kendoNS');\n if (ns) {\n this.off('.' + ns);\n }\n return this;\n }\n });\n kendo.jQuery = kendoJQuery;\n kendo.eventMap = eventMap;\n kendo.timezone = function () {\n var months = {\n Jan: 0,\n Feb: 1,\n Mar: 2,\n Apr: 3,\n May: 4,\n Jun: 5,\n Jul: 6,\n Aug: 7,\n Sep: 8,\n Oct: 9,\n Nov: 10,\n Dec: 11\n };\n var days = {\n Sun: 0,\n Mon: 1,\n Tue: 2,\n Wed: 3,\n Thu: 4,\n Fri: 5,\n 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 if (!cache) {\n rule[8] = cache = {};\n }\n if (cache[year]) {\n return cache[year];\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 targetDay = days[on.substr(4, 3)];\n ourDay = date.getUTCDay();\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 targetDay = days[on.substr(0, 3)];\n ourDay = date.getUTCDay();\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 targetDay = days[on.substr(0, 3)];\n ourDay = date.getUTCDay();\n date.setUTCDate(date.getUTCDate() + targetDay - ourDay - (targetDay > ourDay ? 7 : 0));\n }\n return cache[year] = date;\n }\n function findRule(utcTime, rules, zone) {\n rules = rules[zone];\n if (!rules) {\n var time = zone.split(':');\n var offset = 0;\n if (time.length > 1) {\n offset = time[0] * 60 + Number(time[1]);\n }\n return [\n -1000000,\n 'max',\n '-',\n 'Jan',\n 1,\n [\n 0,\n 0,\n 0\n ],\n offset,\n '-'\n ];\n }\n var year = new Date(utcTime).getUTCFullYear();\n rules = jQuery.grep(rules, function (rule) {\n var from = rule[0];\n var to = rule[1];\n return from <= year && (to >= year || from == year && to == 'only' || to == 'max');\n });\n rules.push(utcTime);\n rules.sort(function (a, b) {\n if (typeof a != 'number') {\n a = Number(ruleToDate(year, a));\n }\n if (typeof b != 'number') {\n b = Number(ruleToDate(year, b));\n }\n return a - b;\n });\n var rule = rules[jQuery.inArray(utcTime, rules) - 1] || rules[rules.length - 1];\n return isNaN(rule) ? rule : null;\n }\n function findZone(utcTime, zones, timezone) {\n var zoneRules = zones[timezone];\n if (typeof zoneRules === 'string') {\n zoneRules = zones[zoneRules];\n }\n if (!zoneRules) {\n throw new Error('Timezone \"' + timezone + '\" is either incorrect, or kendo.timezones.min.js is not included.');\n }\n for (var idx = zoneRules.length - 1; idx >= 0; idx--) {\n var until = zoneRules[idx][3];\n if (until && utcTime > until) {\n break;\n }\n }\n var zone = zoneRules[idx + 1];\n if (!zone) {\n throw new Error('Timezone \"' + timezone + '\" not found on ' + utcTime + '.');\n }\n return zone;\n }\n function zoneAndRule(utcTime, zones, rules, timezone) {\n if (typeof utcTime != NUMBER) {\n utcTime = Date.UTC(utcTime.getFullYear(), utcTime.getMonth(), utcTime.getDate(), utcTime.getHours(), utcTime.getMinutes(), utcTime.getSeconds(), utcTime.getMilliseconds());\n }\n var zone = findZone(utcTime, zones, timezone);\n return {\n zone: zone,\n rule: findRule(utcTime, rules, zone[1])\n };\n }\n function offset(utcTime, timezone) {\n if (timezone == 'Etc/UTC' || timezone == 'Etc/GMT') {\n return 0;\n }\n var info = zoneAndRule(utcTime, this.zones, this.rules, timezone);\n var zone = info.zone;\n var rule = info.rule;\n return kendo.parseFloat(rule ? zone[0] - rule[6] : zone[0]);\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 var base = zone[2];\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 return base;\n }\n function convert(date, fromOffset, toOffset) {\n var tempToOffset = toOffset;\n var diff;\n if (typeof fromOffset == STRING) {\n fromOffset = this.offset(date, fromOffset);\n }\n if (typeof toOffset == STRING) {\n toOffset = this.offset(date, toOffset);\n }\n var fromLocalOffset = date.getTimezoneOffset();\n date = new Date(date.getTime() + (fromOffset - toOffset) * 60000);\n var toLocalOffset = date.getTimezoneOffset();\n if (typeof tempToOffset == STRING) {\n tempToOffset = this.offset(date, tempToOffset);\n }\n diff = toLocalOffset - fromLocalOffset + (toOffset - tempToOffset);\n return new Date(date.getTime() + diff * 60000);\n }\n function apply(date, timezone) {\n return this.convert(date, date.getTimezoneOffset(), timezone);\n }\n function remove(date, timezone) {\n return this.convert(date, timezone, date.getTimezoneOffset());\n }\n function toLocalDate(time) {\n return this.apply(new Date(time), 'Etc/UTC');\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 kendo.date = function () {\n var MS_PER_MINUTE = 60000, MS_PER_DAY = 86400000;\n function adjustDST(date, hours) {\n if (hours === 0 && date.getHours() === 23) {\n date.setHours(date.getHours() + 2);\n return true;\n }\n return false;\n }\n function setDayOfWeek(date, day, dir) {\n var hours = date.getHours();\n dir = dir || 1;\n day = (day - date.getDay() + 7 * dir) % 7;\n date.setDate(date.getDate() + day);\n adjustDST(date, hours);\n }\n function dayOfWeek(date, day, dir) {\n date = new Date(date);\n setDayOfWeek(date, day, dir);\n return date;\n }\n function firstDayOfMonth(date) {\n return new Date(date.getFullYear(), date.getMonth(), 1);\n }\n function lastDayOfMonth(date) {\n var last = new Date(date.getFullYear(), date.getMonth() + 1, 0), first = firstDayOfMonth(date), timeOffset = Math.abs(last.getTimezoneOffset() - first.getTimezoneOffset());\n if (timeOffset) {\n last.setHours(first.getHours() + timeOffset / 60);\n }\n return last;\n }\n function moveDateToWeekStart(date, weekStartDay) {\n if (weekStartDay !== 1) {\n return addDays(dayOfWeek(date, weekStartDay, -1), 4);\n }\n return addDays(date, 4 - (date.getDay() || 7));\n }\n function calcWeekInYear(date, weekStartDay) {\n var firstWeekInYear = new Date(date.getFullYear(), 0, 1, -6);\n var newDate = moveDateToWeekStart(date, weekStartDay);\n var diffInMS = newDate.getTime() - firstWeekInYear.getTime();\n var days = Math.floor(diffInMS / MS_PER_DAY);\n return 1 + Math.floor(days / 7);\n }\n function weekInYear(date, weekStartDay) {\n if (weekStartDay === undefined) {\n weekStartDay = kendo.culture().calendar.firstDay;\n }\n var prevWeekDate = addDays(date, -7);\n var nextWeekDate = addDays(date, 7);\n var weekNumber = calcWeekInYear(date, weekStartDay);\n if (weekNumber === 0) {\n return calcWeekInYear(prevWeekDate, weekStartDay) + 1;\n }\n if (weekNumber === 53 && calcWeekInYear(nextWeekDate, weekStartDay) > 1) {\n return 1;\n }\n return weekNumber;\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 function toUtcTime(date) {\n return Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n }\n function getMilliseconds(date) {\n return toInvariantTime(date).getTime() - getDate(toInvariantTime(date));\n }\n function isInTimeRange(value, min, max) {\n var msMin = getMilliseconds(min), msMax = getMilliseconds(max), msValue;\n if (!value || msMin == msMax) {\n return true;\n }\n if (min >= max) {\n max += MS_PER_DAY;\n }\n msValue = getMilliseconds(value);\n if (msMin > msValue) {\n msValue += MS_PER_DAY;\n }\n if (msMax < msMin) {\n msMax += MS_PER_DAY;\n }\n return msValue >= msMin && msValue <= msMax;\n }\n function isInDateRange(value, min, max) {\n var msMin = min.getTime(), msMax = max.getTime(), msValue;\n if (msMin >= msMax) {\n msMax += MS_PER_DAY;\n }\n msValue = value.getTime();\n return msValue >= msMin && msValue <= msMax;\n }\n function addDays(date, offset) {\n var hours = date.getHours();\n date = new Date(date);\n setTime(date, offset * MS_PER_DAY);\n adjustDST(date, hours);\n return date;\n }\n function setTime(date, milliseconds, ignoreDST) {\n var offset = date.getTimezoneOffset();\n var difference;\n date.setTime(date.getTime() + milliseconds);\n if (!ignoreDST) {\n difference = date.getTimezoneOffset() - offset;\n date.setTime(date.getTime() + difference * MS_PER_MINUTE);\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 function today() {\n return getDate(new Date());\n }\n function isToday(date) {\n return getDate(date).getTime() == today().getTime();\n }\n function toInvariantTime(date) {\n var staticDate = new Date(1980, 1, 1, 0, 0, 0);\n if (date) {\n staticDate.setHours(date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n }\n return staticDate;\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 };\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 while (iterator.nextNode()) {\n if (iterator.referenceNode && !iterator.referenceNode.textContent.trim()) {\n iterator.referenceNode.parentNode.removeChild(iterator.referenceNode);\n }\n }\n } else {\n for (var i = 0; i < element.childNodes.length; i++) {\n var child = element.childNodes[i];\n if (child.nodeType == 3 && !/\\S/.test(child.nodeValue)) {\n element.removeChild(child);\n i--;\n }\n if (child.nodeType == 1) {\n kendo.stripWhitespace(child);\n }\n }\n }\n };\n var animationFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function (callback) {\n setTimeout(callback, 1000 / 60);\n };\n kendo.animationFrame = function (callback) {\n animationFrame.call(window, callback);\n };\n var animationQueue = [];\n kendo.queueAnimation = function (callback) {\n animationQueue[animationQueue.length] = callback;\n if (animationQueue.length === 1) {\n kendo.runNextAnimation();\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 kendo.parseQueryStringParams = function (url) {\n var queryString = url.split('?')[1] || '', params = {}, paramParts = queryString.split(/&|=/), length = paramParts.length, idx = 0;\n for (; idx < length; idx += 2) {\n if (paramParts[idx] !== '') {\n params[decodeURIComponent(paramParts[idx])] = decodeURIComponent(paramParts[idx + 1]);\n }\n }\n return params;\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 kendo.wheelDeltaY = function (jQueryEvent) {\n var e = jQueryEvent.originalEvent, deltaY = e.wheelDeltaY, delta;\n if (e.wheelDelta) {\n if (deltaY === undefined || deltaY) {\n delta = e.wheelDelta;\n }\n } else if (e.detail && e.axis === e.VERTICAL_AXIS) {\n delta = -e.detail * 10;\n }\n return delta;\n };\n kendo.throttle = function (fn, delay) {\n var timeout;\n var lastExecTime = 0;\n if (!delay || delay <= 0) {\n return fn;\n }\n var throttled = function () {\n var that = this;\n var elapsed = +new Date() - lastExecTime;\n var args = arguments;\n function exec() {\n fn.apply(that, args);\n lastExecTime = +new Date();\n }\n if (!lastExecTime) {\n return exec();\n }\n if (timeout) {\n clearTimeout(timeout);\n }\n if (elapsed > delay) {\n exec();\n } else {\n timeout = setTimeout(exec, delay - elapsed);\n }\n };\n throttled.cancel = function () {\n clearTimeout(timeout);\n };\n return throttled;\n };\n kendo.caret = function (element, start, end) {\n var rangeElement;\n var isPosition = start !== undefined;\n if (end === undefined) {\n end = start;\n }\n if (element[0]) {\n element = element[0];\n }\n if (isPosition && element.disabled) {\n return;\n }\n try {\n if (element.selectionStart !== undefined) {\n if (isPosition) {\n element.focus();\n var mobile = support.mobileOS;\n if (mobile.wp || mobile.android) {\n setTimeout(function () {\n element.setSelectionRange(start, end);\n }, 0);\n } else {\n element.setSelectionRange(start, end);\n }\n } else {\n start = [\n element.selectionStart,\n element.selectionEnd\n ];\n }\n } else if (document.selection) {\n if ($(element).is(':visible')) {\n element.focus();\n }\n rangeElement = element.createTextRange();\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(), selectionStart, selectionEnd;\n rangeElement.moveToBookmark(document.selection.createRange().getBookmark());\n rangeDuplicated.setEndPoint('EndToStart', rangeElement);\n selectionStart = rangeDuplicated.text.length;\n selectionEnd = selectionStart + rangeElement.text.length;\n start = [\n selectionStart,\n selectionEnd\n ];\n }\n }\n } catch (e) {\n start = [];\n }\n return start;\n };\n kendo.compileMobileDirective = function (element, scope) {\n var angular = window.angular;\n element.attr('data-' + kendo.ns + 'role', element[0].tagName.toLowerCase().replace('kendo-mobile-', '').replace('-', ''));\n angular.element(element).injector().invoke([\n '$compile',\n function ($compile) {\n $compile(element)(scope);\n if (!/^\\$(digest|apply)$/.test(scope.$$phase)) {\n scope.$digest();\n }\n }\n ]);\n return kendo.widgetInstance(element, kendo.mobile.ui);\n };\n kendo.antiForgeryTokens = function () {\n var tokens = {}, csrf_token = $('meta[name=csrf-token],meta[name=_csrf]').attr('content'), csrf_param = $('meta[name=csrf-param],meta[name=_csrf_header]').attr('content');\n $('input[name^=\\'__RequestVerificationToken\\']').each(function () {\n tokens[this.name] = this.value;\n });\n if (csrf_param !== undefined && csrf_token !== undefined) {\n tokens[csrf_param] = csrf_token;\n }\n return tokens;\n };\n kendo.cycleForm = function (form) {\n var firstElement = form.find('input, .k-widget').first();\n var lastElement = form.find('button, .k-button').last();\n function focus(el) {\n var widget = kendo.widgetInstance(el);\n if (widget && widget.focus) {\n widget.focus();\n } else {\n el.focus();\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 firstElement.on('keydown', function (e) {\n if (e.keyCode == kendo.keys.TAB && e.shiftKey) {\n e.preventDefault();\n focus(lastElement);\n }\n });\n };\n kendo.focusElement = function (element) {\n var scrollTopPositions = [];\n var scrollableParents = element.parentsUntil('body').filter(function (index, element) {\n var computedStyle = kendo.getComputedStyles(element, ['overflow']);\n return computedStyle.overflow !== 'visible';\n }).add(window);\n scrollableParents.each(function (index, parent) {\n scrollTopPositions[index] = $(parent).scrollTop();\n });\n try {\n element[0].setActive();\n } catch (e) {\n element[0].focus();\n }\n scrollableParents.each(function (index, parent) {\n $(parent).scrollTop(scrollTopPositions[index]);\n });\n };\n kendo.focusNextElement = function () {\n if (document.activeElement) {\n var focussable = $(':kendoFocusable');\n var index = focussable.index(document.activeElement);\n if (index > -1) {\n var nextElement = focussable[index + 1] || focussable[0];\n nextElement.focus();\n }\n }\n };\n kendo.trim = function (value) {\n if (!!value) {\n return value.toString().trim();\n } else {\n return '';\n }\n };\n kendo.getWidgetFocusableElement = function (element) {\n var nextFocusable = element.closest(':kendoFocusable'), widgetInstance = kendo.widgetInstance(element), target;\n if (nextFocusable.length) {\n target = nextFocusable;\n } else if (widgetInstance) {\n target = widgetInstance.options.name === 'Editor' ? $(widgetInstance.body) : widgetInstance.wrapper.find(':kendoFocusable').first();\n } else {\n target = element;\n }\n return target;\n };\n kendo.addAttribute = function (element, attribute, value) {\n var current = element.attr(attribute) || '';\n if (current.indexOf(value) < 0) {\n element.attr(attribute, (current + ' ' + value).trim());\n }\n };\n kendo.removeAttribute = function (element, attribute, value) {\n var current = element.attr(attribute) || '';\n element.attr(attribute, current.replace(value, '').trim());\n };\n kendo.toggleAttribute = function (element, attribute, value) {\n var current = element.attr(attribute) || '';\n if (current.indexOf(value) < 0) {\n kendo.addAttribute(element, attribute, value);\n } else {\n kendo.removeAttribute(element, attribute, value);\n }\n };\n kendo.matchesMedia = function (mediaQuery) {\n var media = kendo._bootstrapToMedia(mediaQuery) || mediaQuery;\n return support.matchMedia && window.matchMedia(media).matches;\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 kendo.fileGroupMap = {\n audio: [\n '.aif',\n '.iff',\n '.m3u',\n '.m4a',\n '.mid',\n '.mp3',\n '.mpa',\n '.wav',\n '.wma',\n '.ogg',\n '.wav',\n '.wma',\n '.wpl'\n ],\n video: [\n '.3g2',\n '.3gp',\n '.avi',\n '.asf',\n '.flv',\n '.m4u',\n '.rm',\n '.h264',\n '.m4v',\n '.mkv',\n '.mov',\n '.mp4',\n '.mpg',\n '.rm',\n '.swf',\n '.vob',\n '.wmv'\n ],\n image: [\n '.ai',\n '.dds',\n '.heic',\n '.jpe',\n 'jfif',\n '.jif',\n '.jp2',\n '.jps',\n '.eps',\n '.bmp',\n '.gif',\n '.jpeg',\n '.jpg',\n '.png',\n '.ps',\n '.psd',\n '.svg',\n '.svgz',\n '.tif',\n '.tiff'\n ],\n txt: [\n '.doc',\n '.docx',\n '.log',\n '.pages',\n '.tex',\n '.wpd',\n '.wps',\n '.odt',\n '.rtf',\n '.text',\n '.txt',\n '.wks'\n ],\n presentation: [\n '.key',\n '.odp',\n '.pps',\n '.ppt',\n '.pptx'\n ],\n data: [\n '.xlr',\n '.xls',\n '.xlsx'\n ],\n programming: [\n '.tmp',\n '.bak',\n '.msi',\n '.cab',\n '.cpl',\n '.cur',\n '.dll',\n '.dmp',\n '.drv',\n '.icns',\n '.ico',\n '.link',\n '.sys',\n '.cfg',\n '.ini',\n '.asp',\n '.aspx',\n '.cer',\n '.csr',\n '.css',\n '.dcr',\n '.htm',\n '.html',\n '.js',\n '.php',\n '.rss',\n '.xhtml'\n ],\n pdf: ['.pdf'],\n config: [\n '.apk',\n '.app',\n '.bat',\n '.cgi',\n '.com',\n '.exe',\n '.gadget',\n '.jar',\n '.wsf'\n ],\n zip: [\n '.7z',\n '.cbr',\n '.gz',\n '.sitx',\n '.arj',\n '.deb',\n '.pkg',\n '.rar',\n '.rpm',\n '.tar.gz',\n '.z',\n '.zip',\n '.zipx'\n ],\n 'disc-image': [\n '.dmg',\n '.iso',\n '.toast',\n '.vcd',\n '.bin',\n '.cue',\n '.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 if (extension === undefined || !extension.length) {\n return type;\n }\n for (var i = 0; i < groups.length; i += 1) {\n var extensions = fileTypeMap[groups[i]];\n if (extensions.indexOf(extension.toLowerCase()) > -1) {\n return withPrefix ? 'file-' + groups[i] : groups[i];\n }\n }\n return type;\n };\n kendo.getFileSizeMessage = function (size) {\n var sizes = [\n 'Bytes',\n 'KB',\n 'MB',\n 'GB',\n 'TB'\n ];\n if (size === 0) {\n return '0 Byte';\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 kendo.selectorFromClasses = function (classes) {\n return '.' + classes.split(' ').join('.');\n };\n kendo.whenAll = function (array) {\n var resolveValues = arguments.length == 1 && $.isArray(array) ? array : Array.prototype.slice.call(arguments), length = resolveValues.length, remaining = length, deferred = $.Deferred(), i = 0, failed = 0, rejectContexts = Array(length), rejectValues = Array(length), resolveContexts = Array(length), value;\n function updateFunc(index, contexts, values) {\n return function () {\n if (values != resolveValues) {\n failed++;\n }\n deferred.notifyWith(contexts[index] = this, values[index] = Array.prototype.slice.call(arguments));\n if (!--remaining) {\n deferred[(!failed ? 'resolve' : 'reject') + 'With'](contexts, values);\n }\n };\n }\n for (; i < length; i++) {\n if ((value = resolveValues[i]) && $.isFunction(value.promise)) {\n value.promise().done(updateFunc(i, resolveContexts, resolveValues)).fail(updateFunc(i, rejectContexts, rejectValues));\n } else {\n deferred.notifyWith(this, value);\n --remaining;\n }\n }\n if (!remaining) {\n deferred.resolveWith(resolveContexts, resolveValues);\n }\n return deferred.promise();\n };\n (function () {\n function postToProxy(dataURI, fileName, proxyURL, proxyTarget) {\n var form = $('<form>').attr({\n action: proxyURL,\n method: 'POST',\n target: proxyTarget\n });\n var data = kendo.antiForgeryTokens();\n data.fileName = fileName;\n var parts = dataURI.split(';base64,');\n data.contentType = parts[0].replace('data:', '');\n data.base64 = parts[1];\n for (var name in data) {\n if (data.hasOwnProperty(name)) {\n $('<input>').attr({\n value: data[name],\n name: name,\n type: 'hidden'\n }).appendTo(form);\n }\n }\n form.appendTo('body').submit().remove();\n }\n var fileSaver = document.createElement('a');\n var downloadAttribute = 'download' in fileSaver && !kendo.support.browser.edge;\n function saveAsBlob(dataURI, fileName) {\n var blob = dataURI;\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 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 navigator.msSaveBlob(blob, fileName);\n }\n function saveAsDataURI(dataURI, fileName) {\n if (window.Blob && dataURI instanceof Blob) {\n dataURI = URL.createObjectURL(dataURI);\n }\n fileSaver.download = fileName;\n fileSaver.href = dataURI;\n var e = document.createEvent('MouseEvents');\n e.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);\n fileSaver.dispatchEvent(e);\n setTimeout(function () {\n URL.revokeObjectURL(dataURI);\n });\n }\n kendo.saveAs = function (options) {\n var save = postToProxy;\n if (!options.forceProxy) {\n if (downloadAttribute) {\n save = saveAsDataURI;\n } else if (navigator.msSaveBlob) {\n save = saveAsBlob;\n }\n }\n save(options.dataURI, options.fileName, options.proxyURL, options.proxyTarget);\n };\n }());\n kendo.proxyModelSetters = function proxyModelSetters(data) {\n var observable = {};\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 return observable;\n };\n (function () {\n kendo.defaults = kendo.defaults || {};\n kendo.setDefaults = function (key, value) {\n var path = key.split('.');\n var curr = kendo.defaults;\n key = path.pop();\n path.forEach(function (part) {\n if (curr[part] === undefined) {\n curr[part] = {};\n }\n curr = curr[part];\n });\n if (value.constructor === Object) {\n curr[key] = deepExtend({}, curr[key], value);\n } else {\n curr[key] = value;\n }\n };\n }());\n }(jQuery, window));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.router', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'router',\n name: 'Router',\n category: 'framework',\n description: 'The Router class is responsible for tracking the application state and navigating between the application states.',\n depends: ['core'],\n hidden: false\n };\n (function ($, undefined) {\n var kendo = window.kendo, CHANGE = 'change', BACK = 'back', SAME = 'same', support = kendo.support, location = window.location, history = window.history, CHECK_URL_INTERVAL = 50, BROKEN_BACK_NAV = kendo.support.browser.msie, hashStrip = /^#*/, document = window.document;\n function absoluteURL(path, pathPrefix) {\n if (!pathPrefix) {\n return path;\n }\n if (path + '/' === pathPrefix) {\n path = pathPrefix;\n }\n var regEx = new RegExp('^' + pathPrefix, 'i');\n if (!regEx.test(path)) {\n path = pathPrefix + '/' + path;\n }\n return location.protocol + '//' + (location.host + '/' + path).replace(/\\/\\/+/g, '/');\n }\n function hashDelimiter(bang) {\n return bang ? '#!' : '#';\n }\n function locationHash(hashDelimiter) {\n var href = location.href;\n if (hashDelimiter === '#!' && href.indexOf('#') > -1 && href.indexOf('#!') < 0) {\n return null;\n }\n return href.split(hashDelimiter)[1] || '';\n }\n function stripRoot(root, url) {\n if (url.indexOf(root) === 0) {\n return url.substr(root.length).replace(/\\/\\//g, '/');\n } else {\n return url;\n }\n }\n var HistoryAdapter = kendo.Class.extend({\n back: function () {\n if (BROKEN_BACK_NAV) {\n setTimeout(function () {\n history.back();\n });\n } else {\n history.back();\n }\n },\n forward: function () {\n if (BROKEN_BACK_NAV) {\n setTimeout(function () {\n history.forward();\n });\n } else {\n history.forward();\n }\n },\n length: function () {\n return history.length;\n },\n replaceLocation: function (url) {\n location.replace(url);\n }\n });\n var PushStateAdapter = HistoryAdapter.extend({\n init: function (root) {\n this.root = root;\n },\n navigate: function (to) {\n history.pushState({}, document.title, absoluteURL(to, this.root));\n },\n replace: function (to) {\n history.replaceState({}, document.title, absoluteURL(to, this.root));\n },\n normalize: function (url) {\n return stripRoot(this.root, url);\n },\n current: function () {\n var current = location.pathname;\n if (location.search) {\n current += location.search;\n }\n return stripRoot(this.root, current);\n },\n change: function (callback) {\n $(window).bind('popstate.kendo', callback);\n },\n stop: function () {\n $(window).unbind('popstate.kendo');\n },\n normalizeCurrent: function (options) {\n var fixedUrl, root = options.root, pathname = location.pathname, hash = locationHash(hashDelimiter(options.hashBang));\n if (root === pathname + '/') {\n fixedUrl = root;\n }\n if (root === pathname && hash) {\n fixedUrl = absoluteURL(hash.replace(hashStrip, ''), root);\n }\n if (fixedUrl) {\n history.pushState({}, document.title, fixedUrl);\n }\n }\n });\n function fixHash(url) {\n return url.replace(/^(#)?/, '#');\n }\n function fixBang(url) {\n return url.replace(/^(#(!)?)?/, '#!');\n }\n var HashAdapter = HistoryAdapter.extend({\n init: function (bang) {\n this._id = kendo.guid();\n this.prefix = hashDelimiter(bang);\n this.fix = bang ? fixBang : fixHash;\n },\n navigate: function (to) {\n location.hash = this.fix(to);\n },\n replace: function (to) {\n this.replaceLocation(this.fix(to));\n },\n normalize: function (url) {\n if (url.indexOf(this.prefix) < 0) {\n return url;\n } else {\n return url.split(this.prefix)[1];\n }\n },\n change: function (callback) {\n if (support.hashChange) {\n $(window).on('hashchange.' + this._id, callback);\n } else {\n this._interval = setInterval(callback, CHECK_URL_INTERVAL);\n }\n },\n stop: function () {\n $(window).off('hashchange.' + this._id);\n clearInterval(this._interval);\n },\n current: function () {\n return locationHash(this.prefix);\n },\n normalizeCurrent: function (options) {\n var pathname = location.pathname, root = options.root;\n if (options.pushState && root !== pathname) {\n this.replaceLocation(root + this.prefix + stripRoot(root, pathname));\n return true;\n }\n return false;\n }\n });\n var History = kendo.Observable.extend({\n start: function (options) {\n options = options || {};\n this.bind([\n CHANGE,\n BACK,\n SAME\n ], options);\n if (this._started) {\n return;\n }\n this._started = true;\n options.root = options.root || '/';\n var adapter = this.createAdapter(options), current;\n if (adapter.normalizeCurrent(options)) {\n return;\n }\n current = adapter.current();\n $.extend(this, {\n adapter: adapter,\n root: options.root,\n historyLength: adapter.length(),\n current: current,\n locations: [current]\n });\n adapter.change($.proxy(this, '_checkUrl'));\n },\n createAdapter: function (options) {\n return support.pushState && options.pushState ? new PushStateAdapter(options.root) : new HashAdapter(options.hashBang);\n },\n stop: function () {\n if (!this._started) {\n return;\n }\n this.adapter.stop();\n this.unbind(CHANGE);\n this._started = false;\n },\n change: function (callback) {\n this.bind(CHANGE, callback);\n },\n replace: function (to, silent) {\n this._navigate(to, silent, function (adapter) {\n adapter.replace(to);\n this.locations[this.locations.length - 1] = this.current;\n });\n },\n navigate: function (to, silent) {\n if (to === '#:back') {\n this.backCalled = true;\n this.adapter.back();\n return;\n }\n this._navigate(to, silent, function (adapter) {\n adapter.navigate(to);\n this.locations.push(this.current);\n });\n },\n _navigate: function (to, silent, callback) {\n var adapter = this.adapter;\n to = adapter.normalize(to);\n if (this.current === to || this.current === decodeURIComponent(to)) {\n this.trigger(SAME);\n return;\n }\n if (!silent) {\n if (this.trigger(CHANGE, {\n url: to,\n decode: false\n })) {\n return;\n }\n }\n this.current = to;\n callback.call(this, adapter);\n this.historyLength = adapter.length();\n },\n _checkUrl: function () {\n var adapter = this.adapter, current = adapter.current(), newLength = adapter.length(), navigatingInExisting = this.historyLength === newLength, back = current === this.locations[this.locations.length - 2] && navigatingInExisting, backCalled = this.backCalled, prev = this.current;\n if (current === null || this.current === current || this.current === decodeURIComponent(current)) {\n return true;\n }\n this.historyLength = newLength;\n this.backCalled = false;\n this.current = current;\n if (back && this.trigger('back', {\n url: prev,\n to: current\n })) {\n adapter.forward();\n this.current = prev;\n return;\n }\n if (this.trigger(CHANGE, {\n url: current,\n backButtonPressed: !backCalled\n })) {\n if (back) {\n adapter.forward();\n } else {\n adapter.back();\n this.historyLength--;\n }\n this.current = prev;\n return;\n }\n if (back) {\n this.locations.pop();\n } else {\n this.locations.push(current);\n }\n }\n });\n kendo.History = History;\n kendo.History.HistoryAdapter = HistoryAdapter;\n kendo.History.HashAdapter = HashAdapter;\n kendo.History.PushStateAdapter = PushStateAdapter;\n kendo.absoluteURL = absoluteURL;\n kendo.history = new History();\n }(window.kendo.jQuery));\n (function () {\n var kendo = window.kendo, history = kendo.history, Observable = kendo.Observable, INIT = 'init', ROUTE_MISSING = 'routeMissing', CHANGE = 'change', BACK = 'back', SAME = 'same', optionalParam = /\\((.*?)\\)/g, namedParam = /(\\(\\?)?:\\w+/g, splatParam = /\\*\\w+/g, escapeRegExp = /[\\-{}\\[\\]+?.,\\\\\\^$|#\\s]/g;\n function namedParamReplace(match, optional) {\n return optional ? match : '([^/]+)';\n }\n function routeToRegExp(route, ignoreCase) {\n return new RegExp('^' + route.replace(escapeRegExp, '\\\\$&').replace(optionalParam, '(?:$1)?').replace(namedParam, namedParamReplace).replace(splatParam, '(.*?)') + '$', ignoreCase ? 'i' : '');\n }\n function stripUrl(url) {\n return url.replace(/(\\?.*)|(#.*)/g, '');\n }\n var Route = kendo.Class.extend({\n init: function (route, callback, ignoreCase) {\n if (!(route instanceof RegExp)) {\n route = routeToRegExp(route, ignoreCase);\n }\n this.route = route;\n this._callback = callback;\n },\n callback: function (url, back, decode) {\n var params, idx = 0, length, queryStringParams = kendo.parseQueryStringParams(url);\n queryStringParams._back = back;\n url = stripUrl(url);\n params = this.route.exec(url).slice(1);\n length = params.length;\n if (decode) {\n for (; idx < length; idx++) {\n if (typeof params[idx] !== 'undefined') {\n params[idx] = decodeURIComponent(params[idx]);\n }\n }\n }\n params.push(queryStringParams);\n this._callback.apply(null, params);\n },\n worksWith: function (url, back, decode) {\n if (this.route.test(stripUrl(url))) {\n this.callback(url, back, decode);\n return true;\n } else {\n return false;\n }\n }\n });\n var Router = Observable.extend({\n init: function (options) {\n if (!options) {\n options = {};\n }\n Observable.fn.init.call(this);\n this.routes = [];\n this.pushState = options.pushState;\n this.hashBang = options.hashBang;\n this.root = options.root;\n this.ignoreCase = options.ignoreCase !== false;\n this.bind([\n INIT,\n ROUTE_MISSING,\n CHANGE,\n SAME,\n BACK\n ], options);\n },\n destroy: function () {\n history.unbind(CHANGE, this._urlChangedProxy);\n history.unbind(SAME, this._sameProxy);\n history.unbind(BACK, this._backProxy);\n this.unbind();\n },\n start: function () {\n var that = this, sameProxy = function () {\n that._same();\n }, backProxy = function (e) {\n that._back(e);\n }, urlChangedProxy = function (e) {\n that._urlChanged(e);\n };\n history.start({\n same: sameProxy,\n change: urlChangedProxy,\n back: backProxy,\n pushState: that.pushState,\n hashBang: that.hashBang,\n root: that.root\n });\n var initEventObject = {\n url: history.current || '/',\n preventDefault: $.noop\n };\n if (!that.trigger(INIT, initEventObject)) {\n that._urlChanged(initEventObject);\n }\n this._urlChangedProxy = urlChangedProxy;\n this._backProxy = backProxy;\n },\n route: function (route, callback) {\n this.routes.push(new Route(route, callback, this.ignoreCase));\n },\n navigate: function (url, silent) {\n kendo.history.navigate(url, silent);\n },\n replace: function (url, silent) {\n kendo.history.replace(url, silent);\n },\n _back: function (e) {\n if (this.trigger(BACK, {\n url: e.url,\n to: e.to\n })) {\n e.preventDefault();\n }\n },\n _same: function () {\n this.trigger(SAME);\n },\n _urlChanged: function (e) {\n var url = e.url;\n var decode = !!e.decode;\n var back = e.backButtonPressed;\n if (!url) {\n url = '/';\n }\n if (this.trigger(CHANGE, {\n url: e.url,\n params: kendo.parseQueryStringParams(e.url),\n backButtonPressed: back\n })) {\n e.preventDefault();\n return;\n }\n var idx = 0, routes = this.routes, route, length = routes.length;\n for (; idx < length; idx++) {\n route = routes[idx];\n if (route.worksWith(url, back, decode)) {\n return;\n }\n }\n if (this.trigger(ROUTE_MISSING, {\n url: url,\n params: kendo.parseQueryStringParams(url),\n backButtonPressed: back\n })) {\n e.preventDefault();\n }\n }\n });\n kendo.Router = Router;\n }());\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.userevents', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'userevents',\n name: 'User Events',\n category: 'framework',\n depends: ['core'],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, support = kendo.support, Class = kendo.Class, Observable = kendo.Observable, now = $.now, extend = $.extend, OS = support.mobileOS, invalidZeroEvents = OS && OS.android, DEFAULT_MIN_HOLD = 800, CLICK_DELAY = 300, DEFAULT_THRESHOLD = support.browser.msie ? 5 : 0, PRESS = 'press', HOLD = 'hold', SELECT = 'select', START = 'start', MOVE = 'move', END = 'end', CANCEL = 'cancel', TAP = 'tap', DOUBLETAP = 'doubleTap', RELEASE = 'release', GESTURESTART = 'gesturestart', GESTURECHANGE = 'gesturechange', GESTUREEND = 'gestureend', GESTURETAP = 'gesturetap';\n var THRESHOLD = {\n 'api': 0,\n 'touch': 0,\n 'mouse': 9,\n 'pointer': 9\n };\n var ENABLE_GLOBAL_SURFACE = !support.touch || support.mouseAndTouchPresent;\n function touchDelta(touch1, touch2) {\n var x1 = touch1.x.location, y1 = touch1.y.location, x2 = touch2.x.location, y2 = touch2.y.location, dx = x1 - x2, dy = y1 - y2;\n return {\n center: {\n x: (x1 + x2) / 2,\n y: (y1 + y2) / 2\n },\n distance: Math.sqrt(dx * dx + dy * dy)\n };\n }\n function getTouches(e) {\n var touches = [], originalEvent = e.originalEvent, currentTarget = e.currentTarget, idx = 0, length, changedTouches, touch;\n if (e.api) {\n touches.push({\n id: 2,\n event: e,\n target: e.target,\n currentTarget: e.target,\n location: e,\n type: 'api'\n });\n } else if (e.type.match(/touch/)) {\n changedTouches = originalEvent ? originalEvent.changedTouches : [];\n for (length = changedTouches.length; idx < length; idx++) {\n touch = changedTouches[idx];\n touches.push({\n location: touch,\n event: e,\n target: touch.target,\n currentTarget: currentTarget,\n id: touch.identifier,\n type: 'touch'\n });\n }\n } else if (support.pointers || support.msPointers) {\n touches.push({\n location: originalEvent,\n event: e,\n target: e.target,\n currentTarget: currentTarget,\n id: originalEvent.pointerId,\n type: 'pointer'\n });\n } else {\n touches.push({\n id: 1,\n event: e,\n target: e.target,\n currentTarget: currentTarget,\n location: e,\n type: 'mouse'\n });\n }\n return touches;\n }\n var TouchAxis = Class.extend({\n init: function (axis, location) {\n var that = this;\n that.axis = axis;\n that._updateLocationData(location);\n that.startLocation = that.location;\n that.velocity = that.delta = 0;\n that.timeStamp = now();\n },\n move: function (location) {\n var that = this, offset = location['page' + that.axis], timeStamp = now(), timeDelta = timeStamp - that.timeStamp || 1;\n if (!offset && invalidZeroEvents) {\n return;\n }\n that.delta = offset - that.location;\n that._updateLocationData(location);\n that.initialDelta = offset - that.startLocation;\n that.velocity = that.delta / timeDelta;\n that.timeStamp = timeStamp;\n },\n _updateLocationData: function (location) {\n var that = this, axis = that.axis;\n that.location = location['page' + axis];\n that.client = location['client' + axis];\n that.screen = location['screen' + axis];\n }\n });\n var Touch = Class.extend({\n init: function (userEvents, target, touchInfo) {\n extend(this, {\n x: new TouchAxis('X', touchInfo.location),\n y: new TouchAxis('Y', touchInfo.location),\n type: touchInfo.type,\n useClickAsTap: userEvents.useClickAsTap,\n threshold: userEvents.threshold || THRESHOLD[touchInfo.type],\n userEvents: userEvents,\n target: target,\n currentTarget: touchInfo.currentTarget,\n initialTouch: touchInfo.target,\n id: touchInfo.id,\n pressEvent: touchInfo,\n _clicks: userEvents._clicks,\n supportDoubleTap: userEvents.supportDoubleTap,\n _moved: false,\n _finished: false\n });\n },\n press: function () {\n this._holdTimeout = setTimeout($.proxy(this, '_hold'), this.userEvents.minHold);\n this._trigger(PRESS, this.pressEvent);\n },\n _tap: function (touchInfo) {\n var that = this;\n that.userEvents._clicks++;\n if (that.userEvents._clicks == 1) {\n that._clickTimeout = setTimeout(function () {\n if (that.userEvents._clicks == 1) {\n that._trigger(TAP, touchInfo);\n } else {\n that._trigger(DOUBLETAP, touchInfo);\n }\n that.userEvents._clicks = 0;\n }, CLICK_DELAY);\n }\n },\n _hold: function () {\n this._trigger(HOLD, this.pressEvent);\n },\n move: function (touchInfo) {\n var that = this;\n var preventMove = touchInfo.type !== 'api' && that.userEvents._shouldNotMove;\n if (that._finished || preventMove) {\n return;\n }\n that.x.move(touchInfo.location);\n that.y.move(touchInfo.location);\n if (!that._moved) {\n if (that._withinIgnoreThreshold()) {\n return;\n }\n if (!UserEvents.current || UserEvents.current === that.userEvents) {\n that._start(touchInfo);\n } else {\n return that.dispose();\n }\n }\n if (!that._finished) {\n that._trigger(MOVE, touchInfo);\n }\n },\n end: function (touchInfo) {\n this.endTime = now();\n if (this._finished) {\n return;\n }\n this._finished = true;\n this._trigger(RELEASE, touchInfo);\n if (this._moved) {\n this._trigger(END, touchInfo);\n } else {\n if (!this.useClickAsTap) {\n if (this.supportDoubleTap) {\n this._tap(touchInfo);\n } else {\n this._trigger(TAP, touchInfo);\n }\n }\n }\n clearTimeout(this._holdTimeout);\n this.dispose();\n },\n dispose: function () {\n var userEvents = this.userEvents, activeTouches = userEvents.touches;\n this._finished = true;\n this.pressEvent = null;\n clearTimeout(this._holdTimeout);\n activeTouches.splice($.inArray(this, activeTouches), 1);\n },\n skip: function () {\n this.dispose();\n },\n cancel: function () {\n this.dispose();\n },\n isMoved: function () {\n return this._moved;\n },\n _start: function (touchInfo) {\n clearTimeout(this._holdTimeout);\n this.startTime = now();\n this._moved = true;\n this._trigger(START, touchInfo);\n },\n _trigger: function (name, touchInfo) {\n var that = this, jQueryEvent = touchInfo.event, data = {\n touch: that,\n x: that.x,\n y: that.y,\n target: that.target,\n event: jQueryEvent\n };\n if (that.userEvents.notify(name, data)) {\n jQueryEvent.preventDefault();\n }\n },\n _withinIgnoreThreshold: function () {\n var xDelta = this.x.initialDelta, yDelta = this.y.initialDelta;\n return Math.sqrt(xDelta * xDelta + yDelta * yDelta) <= this.threshold;\n }\n });\n function withEachUpEvent(callback) {\n var downEvents = kendo.eventMap.up.split(' '), idx = 0, length = downEvents.length;\n for (; idx < length; idx++) {\n callback(downEvents[idx]);\n }\n }\n var UserEvents = Observable.extend({\n init: function (element, options) {\n var that = this, filter, ns = kendo.guid();\n options = options || {};\n filter = that.filter = options.filter;\n that.threshold = options.threshold || DEFAULT_THRESHOLD;\n that.minHold = options.minHold || DEFAULT_MIN_HOLD;\n that.touches = [];\n that._maxTouches = options.multiTouch ? 2 : 1;\n that.allowSelection = options.allowSelection;\n that.captureUpIfMoved = options.captureUpIfMoved;\n that.useClickAsTap = !options.fastTap && !support.delayedClick();\n that.eventNS = ns;\n that._clicks = 0;\n that.supportDoubleTap = options.supportDoubleTap;\n element = $(element).handler(that);\n Observable.fn.init.call(that);\n extend(that, {\n element: element,\n surface: options.global && ENABLE_GLOBAL_SURFACE ? $(element[0].ownerDocument.documentElement) : $(options.surface || element),\n stopPropagation: options.stopPropagation,\n pressed: false\n });\n that.surface.handler(that).on(kendo.applyEventMap('move', ns), '_move').on(kendo.applyEventMap('up cancel', ns), '_end');\n element.on(kendo.applyEventMap('down', ns), filter, '_start');\n if (that.useClickAsTap) {\n element.on(kendo.applyEventMap('click', ns), filter, '_click');\n }\n if (support.pointers || support.msPointers) {\n if (support.browser.version < 11) {\n var defaultAction = 'pinch-zoom double-tap-zoom';\n element.css('-ms-touch-action', options.touchAction && options.touchAction != 'none' ? defaultAction + ' ' + options.touchAction : defaultAction);\n } else {\n element.css('touch-action', options.touchAction || 'none');\n }\n }\n if (options.preventDragEvent) {\n element.on(kendo.applyEventMap('dragstart', ns), kendo.preventDefault);\n }\n element.on(kendo.applyEventMap('mousedown', ns), filter, { root: element }, '_select');\n if (that.captureUpIfMoved && support.eventCapture) {\n var surfaceElement = that.surface[0], preventIfMovingProxy = $.proxy(that.preventIfMoving, that);\n withEachUpEvent(function (eventName) {\n surfaceElement.addEventListener(eventName, preventIfMovingProxy, true);\n });\n }\n that.bind([\n PRESS,\n HOLD,\n TAP,\n DOUBLETAP,\n START,\n MOVE,\n END,\n RELEASE,\n CANCEL,\n GESTURESTART,\n GESTURECHANGE,\n GESTUREEND,\n GESTURETAP,\n SELECT\n ], options);\n },\n preventIfMoving: function (e) {\n if (this._isMoved()) {\n e.preventDefault();\n }\n },\n destroy: function () {\n var that = this;\n if (that._destroyed) {\n return;\n }\n that._destroyed = true;\n if (that.captureUpIfMoved && support.eventCapture) {\n var surfaceElement = that.surface[0];\n withEachUpEvent(function (eventName) {\n surfaceElement.removeEventListener(eventName, that.preventIfMoving);\n });\n }\n that.element.kendoDestroy(that.eventNS);\n that.surface.kendoDestroy(that.eventNS);\n that.element.removeData('handler');\n that.surface.removeData('handler');\n that._disposeAll();\n that.unbind();\n delete that.surface;\n delete that.element;\n delete that.currentTarget;\n },\n capture: function () {\n UserEvents.current = this;\n },\n cancel: function () {\n this._disposeAll();\n this.trigger(CANCEL);\n },\n notify: function (eventName, data) {\n var that = this, touches = that.touches;\n if (this._isMultiTouch()) {\n switch (eventName) {\n case MOVE:\n eventName = GESTURECHANGE;\n break;\n case END:\n eventName = GESTUREEND;\n break;\n case TAP:\n eventName = GESTURETAP;\n break;\n }\n extend(data, { touches: touches }, touchDelta(touches[0], touches[1]));\n }\n return this.trigger(eventName, extend(data, { type: eventName }));\n },\n press: function (x, y, target) {\n this._apiCall('_start', x, y, target);\n },\n move: function (x, y) {\n this._apiCall('_move', x, y);\n },\n end: function (x, y) {\n this._apiCall('_end', x, y);\n },\n _isMultiTouch: function () {\n return this.touches.length > 1;\n },\n _maxTouchesReached: function () {\n return this.touches.length >= this._maxTouches;\n },\n _disposeAll: function () {\n var touches = this.touches;\n while (touches.length > 0) {\n touches.pop().dispose();\n }\n },\n _isMoved: function () {\n return $.grep(this.touches, function (touch) {\n return touch.isMoved();\n }).length;\n },\n _select: function (e) {\n if (!this.allowSelection || this.trigger(SELECT, { event: e })) {\n e.preventDefault();\n }\n },\n _start: function (e) {\n var that = this, idx = 0, filter = that.filter, target, touches = getTouches(e), length = touches.length, touch, which = e.which;\n if (which && which > 1 || that._maxTouchesReached()) {\n return;\n }\n UserEvents.current = null;\n that.currentTarget = e.currentTarget;\n if (that.stopPropagation) {\n e.stopPropagation();\n }\n for (; idx < length; idx++) {\n if (that._maxTouchesReached()) {\n break;\n }\n touch = touches[idx];\n if (filter) {\n target = $(touch.currentTarget);\n } else {\n target = that.element;\n }\n if (!target.length) {\n continue;\n }\n touch = new Touch(that, target, touch);\n that.touches.push(touch);\n touch.press();\n if (that._isMultiTouch()) {\n that.notify('gesturestart', {});\n }\n }\n },\n _move: function (e) {\n this._eachTouch('move', e);\n },\n _end: function (e) {\n this._eachTouch('end', e);\n },\n _click: function (e) {\n var data = {\n touch: {\n initialTouch: e.target,\n target: $(e.currentTarget),\n endTime: now(),\n x: {\n location: e.pageX,\n client: e.clientX\n },\n y: {\n location: e.pageY,\n client: e.clientY\n }\n },\n x: e.pageX,\n y: e.pageY,\n target: $(e.currentTarget),\n event: e,\n type: 'tap'\n };\n if (this.trigger('tap', data)) {\n e.preventDefault();\n }\n },\n _eachTouch: function (methodName, e) {\n var that = this, dict = {}, touches = getTouches(e), activeTouches = that.touches, idx, touch, touchInfo, matchingTouch;\n for (idx = 0; idx < activeTouches.length; idx++) {\n touch = activeTouches[idx];\n dict[touch.id] = touch;\n }\n for (idx = 0; idx < touches.length; idx++) {\n touchInfo = touches[idx];\n matchingTouch = dict[touchInfo.id];\n if (matchingTouch) {\n matchingTouch[methodName](touchInfo);\n }\n }\n },\n _apiCall: function (type, x, y, target) {\n this[type]({\n api: true,\n pageX: x,\n pageY: y,\n clientX: x,\n clientY: y,\n target: $(target || this.element)[0],\n stopPropagation: $.noop,\n preventDefault: $.noop\n });\n }\n });\n UserEvents.defaultThreshold = function (value) {\n DEFAULT_THRESHOLD = value;\n };\n UserEvents.minHold = function (value) {\n DEFAULT_MIN_HOLD = value;\n };\n kendo.getTouches = getTouches;\n kendo.touchDelta = touchDelta;\n kendo.UserEvents = UserEvents;\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.touch', [\n 'kendo.core',\n 'kendo.userevents'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'touch',\n name: 'Touch',\n category: 'mobile',\n description: 'The kendo Touch widget provides a cross-platform compatible API for handling user-initiated touch events, multi-touch gestures and event sequences (drag, swipe, etc.). ',\n depends: [\n 'core',\n 'userevents'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, proxy = $.proxy, abs = Math.abs, MAX_DOUBLE_TAP_DISTANCE = 20;\n var Touch = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n options = that.options;\n element = that.element;\n that.wrapper = element;\n function eventProxy(name) {\n return function (e) {\n that._triggerTouch(name, e);\n };\n }\n function gestureEventProxy(name) {\n return function (e) {\n that.trigger(name, {\n touches: e.touches,\n distance: e.distance,\n center: e.center,\n event: e.event\n });\n };\n }\n that.events = new kendo.UserEvents(element, {\n filter: options.filter,\n surface: options.surface,\n minHold: options.minHold,\n multiTouch: options.multiTouch,\n allowSelection: true,\n fastTap: options.fastTap,\n press: eventProxy('touchstart'),\n hold: eventProxy('hold'),\n tap: proxy(that, '_tap'),\n gesturestart: gestureEventProxy('gesturestart'),\n gesturechange: gestureEventProxy('gesturechange'),\n gestureend: gestureEventProxy('gestureend')\n });\n if (options.enableSwipe) {\n that.events.bind('start', proxy(that, '_swipestart'));\n that.events.bind('move', proxy(that, '_swipemove'));\n } else {\n that.events.bind('start', proxy(that, '_dragstart'));\n that.events.bind('move', eventProxy('drag'));\n that.events.bind('end', eventProxy('dragend'));\n }\n kendo.notify(that);\n },\n events: [\n 'touchstart',\n 'dragstart',\n 'drag',\n 'dragend',\n 'tap',\n 'doubletap',\n 'hold',\n 'swipe',\n 'gesturestart',\n 'gesturechange',\n 'gestureend'\n ],\n options: {\n name: 'Touch',\n surface: null,\n global: false,\n fastTap: false,\n filter: null,\n multiTouch: false,\n enableSwipe: false,\n minXDelta: 30,\n maxYDelta: 20,\n maxDuration: 1000,\n minHold: 800,\n doubleTapTimeout: 800\n },\n cancel: function () {\n this.events.cancel();\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.events.destroy();\n },\n _triggerTouch: function (type, e) {\n if (this.trigger(type, {\n touch: e.touch,\n event: e.event\n })) {\n e.preventDefault();\n }\n },\n _tap: function (e) {\n var that = this, lastTap = that.lastTap, touch = e.touch;\n if (lastTap && touch.endTime - lastTap.endTime < that.options.doubleTapTimeout && kendo.touchDelta(touch, lastTap).distance < MAX_DOUBLE_TAP_DISTANCE) {\n that._triggerTouch('doubletap', e);\n that.lastTap = null;\n } else {\n that._triggerTouch('tap', e);\n that.lastTap = touch;\n }\n },\n _dragstart: function (e) {\n this._triggerTouch('dragstart', e);\n },\n _swipestart: function (e) {\n if (abs(e.x.velocity) * 2 >= abs(e.y.velocity)) {\n e.sender.capture();\n }\n },\n _swipemove: function (e) {\n var that = this, options = that.options, touch = e.touch, duration = e.event.timeStamp - touch.startTime, direction = touch.x.initialDelta > 0 ? 'right' : 'left';\n if (abs(touch.x.initialDelta) >= options.minXDelta && abs(touch.y.initialDelta) < options.maxYDelta && duration < options.maxDuration) {\n that.trigger('swipe', {\n direction: direction,\n touch: e.touch\n });\n touch.cancel();\n }\n }\n });\n kendo.ui.plugin(Touch);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.data.odata', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'data.odata',\n name: 'OData',\n category: 'framework',\n depends: ['core'],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, extend = $.extend, NEWLINE = '\\r\\n', DOUBLELINE = '\\r\\n\\r\\n', isFunction = kendo.isFunction, odataFilters = {\n eq: 'eq',\n neq: 'ne',\n gt: 'gt',\n gte: 'ge',\n lt: 'lt',\n lte: 'le',\n contains: 'substringof',\n doesnotcontain: 'substringof',\n endswith: 'endswith',\n startswith: 'startswith',\n isnull: 'eq',\n isnotnull: 'ne',\n isnullorempty: 'eq',\n isnotnullorempty: 'ne',\n isempty: 'eq',\n isnotempty: 'ne'\n }, odataFiltersVersionFour = extend({}, odataFilters, { contains: 'contains' }), mappers = {\n pageSize: $.noop,\n page: $.noop,\n filter: function (params, filter, useVersionFour) {\n if (filter) {\n filter = toOdataFilter(filter, useVersionFour);\n if (filter) {\n params.$filter = filter;\n }\n }\n },\n sort: function (params, orderby) {\n var expr = $.map(orderby, function (value) {\n var order = value.field.replace(/\\./g, '/');\n if (value.dir === 'desc') {\n order += ' desc';\n }\n return order;\n }).join(',');\n if (expr) {\n params.$orderby = expr;\n }\n },\n skip: function (params, skip) {\n if (skip) {\n params.$skip = skip;\n }\n },\n take: function (params, take) {\n if (take) {\n params.$top = take;\n }\n }\n }, defaultDataType = { read: { dataType: 'jsonp' } };\n function toOdataFilter(filter, useOdataFour) {\n var result = [], logic = filter.logic || 'and', idx, length, field, type, format, operator, value, ignoreCase, filters = filter.filters;\n for (idx = 0, length = filters.length; idx < length; idx++) {\n filter = filters[idx];\n field = filter.field;\n value = filter.value;\n operator = filter.operator;\n if (filter.filters) {\n filter = toOdataFilter(filter, useOdataFour);\n } else {\n ignoreCase = filter.ignoreCase;\n field = field.replace(/\\./g, '/');\n filter = odataFilters[operator];\n if (useOdataFour) {\n filter = odataFiltersVersionFour[operator];\n }\n if (operator === 'isnullorempty') {\n filter = kendo.format('{0} {1} null or {0} {1} \\'\\'', field, filter);\n } else if (operator === 'isnotnullorempty') {\n filter = kendo.format('{0} {1} null and {0} {1} \\'\\'', field, filter);\n } else if (operator === 'isnull' || operator === 'isnotnull') {\n filter = kendo.format('{0} {1} null', field, filter);\n } else if (operator === 'isempty' || operator === 'isnotempty') {\n filter = kendo.format('{0} {1} \\'\\'', field, filter);\n } else if (filter && value !== undefined) {\n type = $.type(value);\n if (type === 'string') {\n format = '\\'{1}\\'';\n value = value.replace(/'/g, '\\'\\'');\n if (ignoreCase === true) {\n field = 'tolower(' + field + ')';\n }\n } else if (type === 'date') {\n if (useOdataFour) {\n format = '{1:yyyy-MM-ddTHH:mm:ss+00:00}';\n value = kendo.timezone.apply(value, 'Etc/UTC');\n } else {\n format = 'datetime\\'{1:yyyy-MM-ddTHH:mm:ss}\\'';\n }\n } else {\n format = '{1}';\n }\n if (filter.length > 3) {\n if (filter !== 'substringof') {\n format = '{0}({2},' + format + ')';\n } else {\n format = '{0}(' + format + ',{2})';\n if (operator === 'doesnotcontain') {\n if (useOdataFour) {\n format = '{0}({2},\\'{1}\\') eq -1';\n filter = 'indexof';\n } else {\n format += ' eq false';\n }\n }\n }\n } else {\n format = '{2} {0} ' + format;\n }\n filter = kendo.format(format, filter, value, field);\n }\n }\n result.push(filter);\n }\n filter = result.join(' ' + logic + ' ');\n if (result.length > 1) {\n filter = '(' + filter + ')';\n }\n return filter;\n }\n function stripMetadata(obj) {\n for (var name in obj) {\n if (name.indexOf('@odata') === 0) {\n delete obj[name];\n }\n }\n }\n function hex16() {\n return Math.floor((1 + Math.random()) * 65536).toString(16).substr(1);\n }\n function createBoundary(prefix) {\n return prefix + hex16() + '-' + hex16() + '-' + hex16();\n }\n function createDelimeter(boundary, close) {\n var result = NEWLINE + '--' + boundary;\n if (close) {\n result += '--';\n }\n return result;\n }\n function createCommand(transport, item, httpVerb, command) {\n var transportUrl = transport.options[command].url;\n var commandPrefix = kendo.format('{0} ', httpVerb);\n if (isFunction(transportUrl)) {\n return commandPrefix + transportUrl(item);\n } else {\n return commandPrefix + transportUrl;\n }\n }\n function getOperationHeader(changeset, changeId) {\n var header = '';\n header += createDelimeter(changeset, false);\n header += NEWLINE + 'Content-Type: application/http';\n header += NEWLINE + 'Content-Transfer-Encoding: binary';\n header += NEWLINE + 'Content-ID: ' + changeId;\n return header;\n }\n function getOperationContent(item) {\n var content = '';\n content += NEWLINE + 'Content-Type: application/json;odata=minimalmetadata';\n content += NEWLINE + 'Prefer: return=representation';\n content += DOUBLELINE + kendo.stringify(item);\n return content;\n }\n function getOperations(collection, changeset, changeId, command, transport, skipContent) {\n var requestBody = '';\n for (var i = 0; i < collection.length; i++) {\n requestBody += getOperationHeader(changeset, changeId);\n requestBody += DOUBLELINE + createCommand(transport, collection[i], transport.options[command].type, command) + ' HTTP/1.1';\n if (!skipContent) {\n requestBody += getOperationContent(collection[i]);\n }\n requestBody += NEWLINE;\n changeId++;\n }\n return requestBody;\n }\n function processCollection(colection, boundary, changeset, changeId, transport, command, skipContent) {\n var requestBody = '';\n requestBody += getBoundary(boundary, changeset);\n requestBody += getOperations(colection, changeset, changeId, command, transport, skipContent);\n requestBody += createDelimeter(changeset, true);\n requestBody += NEWLINE;\n return requestBody;\n }\n function getBoundary(boundary, changeset) {\n var requestBody = '';\n requestBody += '--' + boundary + NEWLINE;\n requestBody += 'Content-Type: multipart/mixed; boundary=' + changeset + NEWLINE;\n return requestBody;\n }\n function createBatchRequest(transport, colections) {\n var options = extend({}, transport.options.batch);\n var boundary = createBoundary('sf_batch_');\n var requestBody = '';\n var changeId = 0;\n var batchURL = transport.options.batch.url;\n var changeset = createBoundary('sf_changeset_');\n options.type = transport.options.batch.type;\n options.url = isFunction(batchURL) ? batchURL() : batchURL;\n options.headers = extend(options.headers || {}, { 'Content-Type': 'multipart/mixed; boundary=' + boundary });\n if (colections.updated.length) {\n requestBody += processCollection(colections.updated, boundary, changeset, changeId, transport, 'update', false);\n changeId += colections.updated.length;\n changeset = createBoundary('sf_changeset_');\n }\n if (colections.destroyed.length) {\n requestBody += processCollection(colections.destroyed, boundary, changeset, changeId, transport, 'destroy', true);\n changeId += colections.destroyed.length;\n changeset = createBoundary('sf_changeset_');\n }\n if (colections.created.length) {\n requestBody += processCollection(colections.created, boundary, changeset, changeId, transport, 'create', false);\n }\n requestBody += createDelimeter(boundary, true);\n options.data = requestBody;\n return options;\n }\n function parseBatchResponse(responseText) {\n var responseMarkers = responseText.match(/--changesetresponse_[a-z0-9-]+$/gm);\n var markerIndex = 0;\n var collections = [];\n var changeBody;\n var status;\n var code;\n var marker;\n var jsonModel;\n collections.push({\n models: [],\n passed: true\n });\n for (var i = 0; i < responseMarkers.length; i++) {\n marker = responseMarkers[i];\n if (marker.lastIndexOf('--', marker.length - 1)) {\n if (i < responseMarkers.length - 1) {\n collections.push({\n models: [],\n passed: true\n });\n }\n continue;\n }\n if (!markerIndex) {\n markerIndex = responseText.indexOf(marker);\n } else {\n markerIndex = responseText.indexOf(marker, markerIndex + marker.length);\n }\n changeBody = responseText.substring(markerIndex, responseText.indexOf('--', markerIndex + 1));\n status = changeBody.match(/^HTTP\\/1\\.\\d (\\d{3}) (.*)$/gm).pop();\n code = kendo.parseFloat(status.match(/\\d{3}/g).pop());\n if (code >= 200 && code <= 299) {\n jsonModel = changeBody.match(/\\{.*\\}/gm);\n if (jsonModel) {\n collections[collections.length - 1].models.push(JSON.parse(jsonModel[0]));\n }\n } else {\n collections[collections.length - 1].passed = false;\n }\n }\n return collections;\n }\n extend(true, kendo.data, {\n schemas: {\n odata: {\n type: 'json',\n data: function (data) {\n return data.d.results || [data.d];\n },\n total: 'd.__count'\n }\n },\n transports: {\n odata: {\n read: {\n cache: true,\n dataType: 'jsonp',\n jsonp: '$callback'\n },\n update: {\n cache: true,\n dataType: 'json',\n contentType: 'application/json',\n type: 'PUT'\n },\n create: {\n cache: true,\n dataType: 'json',\n contentType: 'application/json',\n type: 'POST'\n },\n destroy: {\n cache: true,\n dataType: 'json',\n type: 'DELETE'\n },\n parameterMap: function (options, type, useVersionFour) {\n var params, value, option, dataType;\n options = options || {};\n type = type || 'read';\n dataType = (this.options || defaultDataType)[type];\n dataType = dataType ? dataType.dataType : 'json';\n if (type === 'read') {\n params = { $inlinecount: 'allpages' };\n if (dataType != 'json') {\n params.$format = 'json';\n }\n for (option in options) {\n if (mappers[option]) {\n mappers[option](params, options[option], useVersionFour);\n } else {\n params[option] = options[option];\n }\n }\n } else {\n if (dataType !== 'json') {\n throw new Error('Only json dataType can be used for ' + type + ' operation.');\n }\n if (type !== 'destroy') {\n for (option in options) {\n value = options[option];\n if (typeof value === 'number') {\n options[option] = value + '';\n }\n }\n params = kendo.stringify(options);\n }\n }\n return params;\n }\n }\n }\n });\n extend(true, kendo.data, {\n schemas: {\n 'odata-v4': {\n type: 'json',\n data: function (data) {\n if ($.isArray(data)) {\n for (var i = 0; i < data.length; i++) {\n stripMetadata(data[i]);\n }\n return data;\n } else {\n data = $.extend({}, data);\n stripMetadata(data);\n if (data.value) {\n return data.value;\n }\n return [data];\n }\n },\n total: function (data) {\n return data['@odata.count'];\n }\n }\n },\n transports: {\n 'odata-v4': {\n batch: { type: 'POST' },\n read: {\n cache: true,\n dataType: 'json'\n },\n update: {\n cache: true,\n dataType: 'json',\n contentType: 'application/json;IEEE754Compatible=true',\n type: 'PUT'\n },\n create: {\n cache: true,\n dataType: 'json',\n contentType: 'application/json;IEEE754Compatible=true',\n type: 'POST'\n },\n destroy: {\n cache: true,\n dataType: 'json',\n type: 'DELETE'\n },\n parameterMap: function (options, type) {\n var result = kendo.data.transports.odata.parameterMap(options, type, true);\n if (type == 'read') {\n result.$count = true;\n delete result.$inlinecount;\n }\n if (result.$filter) {\n result.$filter = result.$filter.replace(/('[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}')/gi, function (x) {\n return x.substring(1, x.length - 1);\n });\n }\n return result;\n },\n submit: function (e) {\n var that = this;\n var options = createBatchRequest(that, e.data);\n var collections = e.data;\n if (!collections.updated.length && !collections.destroyed.length && !collections.created.length) {\n return;\n }\n $.ajax(extend(true, {}, {\n success: function (response) {\n var responses = parseBatchResponse(response);\n var index = 0;\n var current;\n if (collections.updated.length) {\n current = responses[index];\n if (current.passed) {\n e.success(current.models.length ? current.models : [], 'update');\n }\n index++;\n }\n if (collections.destroyed.length) {\n current = responses[index];\n if (current.passed) {\n e.success([], 'destroy');\n }\n index++;\n }\n if (collections.created.length) {\n current = responses[index];\n if (current.passed) {\n e.success(current.models, 'create');\n }\n }\n },\n error: function (response, status, error) {\n e.error(response, status, error);\n }\n }, options));\n }\n }\n }\n });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.data.xml', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'data.xml',\n name: 'XML',\n category: 'framework',\n depends: ['core'],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, isArray = $.isArray, isPlainObject = $.isPlainObject, map = $.map, each = $.each, extend = $.extend, getter = kendo.getter, Class = kendo.Class;\n var XmlDataReader = Class.extend({\n init: function (options) {\n var that = this, total = options.total, model = options.model, parse = options.parse, errors = options.errors, serialize = options.serialize, data = options.data;\n if (model) {\n if (isPlainObject(model)) {\n var base = options.modelBase || kendo.data.Model;\n if (model.fields) {\n each(model.fields, function (field, value) {\n if (isPlainObject(value) && value.field) {\n if (!$.isFunction(value.field)) {\n value = extend(value, { field: that.getter(value.field) });\n }\n } else {\n value = { field: that.getter(value) };\n }\n model.fields[field] = value;\n });\n }\n var id = model.id;\n if (id) {\n var idField = {};\n idField[that.xpathToMember(id, true)] = { field: that.getter(id) };\n model.fields = extend(idField, model.fields);\n model.id = that.xpathToMember(id);\n }\n model = base.define(model);\n }\n that.model = model;\n }\n if (total) {\n if (typeof total == 'string') {\n total = that.getter(total);\n that.total = function (data) {\n return parseInt(total(data), 10);\n };\n } else if (typeof total == 'function') {\n that.total = total;\n }\n }\n if (errors) {\n if (typeof errors == 'string') {\n errors = that.getter(errors);\n that.errors = function (data) {\n return errors(data) || null;\n };\n } else if (typeof errors == 'function') {\n that.errors = errors;\n }\n }\n if (data) {\n if (typeof data == 'string') {\n data = that.xpathToMember(data);\n that.data = function (value) {\n var result = that.evaluate(value, data), modelInstance;\n result = isArray(result) ? result : [result];\n if (that.model && model.fields) {\n modelInstance = new that.model();\n return map(result, function (value) {\n if (value) {\n var record = {}, field;\n for (field in model.fields) {\n record[field] = modelInstance._parse(field, model.fields[field].field(value));\n }\n return record;\n }\n });\n }\n return result;\n };\n } else if (typeof data == 'function') {\n that.data = data;\n }\n }\n if (typeof parse == 'function') {\n var xmlParse = that.parse;\n that.parse = function (data) {\n var xml = parse.call(that, data);\n return xmlParse.call(that, xml);\n };\n }\n if (typeof serialize == 'function') {\n that.serialize = serialize;\n }\n },\n total: function (result) {\n return this.data(result).length;\n },\n errors: function (data) {\n return data ? data.errors : null;\n },\n serialize: function (data) {\n return data;\n },\n parseDOM: function (element) {\n var result = {}, parsedNode, node, nodeType, nodeName, member, attribute, attributes = element.attributes, attributeCount = attributes.length, idx;\n for (idx = 0; idx < attributeCount; idx++) {\n attribute = attributes[idx];\n result['@' + attribute.nodeName] = attribute.nodeValue;\n }\n for (node = element.firstChild; node; node = node.nextSibling) {\n nodeType = node.nodeType;\n if (nodeType === 3 || nodeType === 4) {\n result['#text'] = node.nodeValue;\n } else if (nodeType === 1) {\n parsedNode = this.parseDOM(node);\n nodeName = node.nodeName;\n member = result[nodeName];\n if (isArray(member)) {\n member.push(parsedNode);\n } else if (member !== undefined) {\n member = [\n member,\n parsedNode\n ];\n } else {\n member = parsedNode;\n }\n result[nodeName] = member;\n }\n }\n return result;\n },\n evaluate: function (value, expression) {\n var members = expression.split('.'), member, result, length, intermediateResult, idx;\n while (member = members.shift()) {\n value = value[member];\n if (isArray(value)) {\n result = [];\n expression = members.join('.');\n for (idx = 0, length = value.length; idx < length; idx++) {\n intermediateResult = this.evaluate(value[idx], expression);\n intermediateResult = isArray(intermediateResult) ? intermediateResult : [intermediateResult];\n result.push.apply(result, intermediateResult);\n }\n return result;\n }\n }\n return value;\n },\n parse: function (xml) {\n var documentElement, tree, result = {};\n documentElement = xml.documentElement || $.parseXML(xml).documentElement;\n tree = this.parseDOM(documentElement);\n result[documentElement.nodeName] = tree;\n return result;\n },\n xpathToMember: function (member, raw) {\n if (!member) {\n return '';\n }\n member = member.replace(/^\\//, '').replace(/\\//g, '.');\n if (member.indexOf('@') >= 0) {\n return member.replace(/\\.?(@.*)/, raw ? '$1' : '[\"$1\"]');\n }\n if (member.indexOf('text()') >= 0) {\n return member.replace(/(\\.?text\\(\\))/, raw ? '#text' : '[\"#text\"]');\n }\n return member;\n },\n getter: function (member) {\n return getter(this.xpathToMember(member), true);\n }\n });\n $.extend(true, kendo.data, {\n XmlDataReader: XmlDataReader,\n readers: { xml: XmlDataReader }\n });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.data', [\n 'kendo.core',\n 'kendo.data.odata',\n 'kendo.data.xml'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'data',\n name: 'Data source',\n category: 'framework',\n description: 'Powerful component for using local and remote data.Fully supports CRUD, Sorting, Paging, Filtering, Grouping, and Aggregates.',\n depends: ['core'],\n features: [\n {\n id: 'data-odata',\n name: 'OData',\n description: 'Support for accessing Open Data Protocol (OData) services.',\n depends: ['data.odata']\n },\n {\n id: 'data-signalr',\n name: 'SignalR',\n description: 'Support for binding to SignalR hubs.',\n depends: ['data.signalr']\n },\n {\n id: 'data-XML',\n name: 'XML',\n description: 'Support for binding to XML.',\n depends: ['data.xml']\n }\n ]\n };\n (function ($, undefined) {\n var extend = $.extend, proxy = $.proxy, isPlainObject = $.isPlainObject, isEmptyObject = $.isEmptyObject, isArray = $.isArray, grep = $.grep, ajax = $.ajax, map, each = $.each, noop = $.noop, kendo = window.kendo, isFunction = kendo.isFunction, Observable = kendo.Observable, Class = kendo.Class, STRING = 'string', FUNCTION = 'function', ASCENDING = 'asc', CREATE = 'create', READ = 'read', UPDATE = 'update', DESTROY = 'destroy', CHANGE = 'change', SYNC = 'sync', GET = 'get', ERROR = 'error', REQUESTSTART = 'requestStart', PROGRESS = 'progress', REQUESTEND = 'requestEnd', crud = [\n CREATE,\n READ,\n UPDATE,\n DESTROY\n ], identity = function (o) {\n return o;\n }, getter = kendo.getter, stringify = kendo.stringify, math = Math, push = [].push, join = [].join, pop = [].pop, splice = [].splice, shift = [].shift, slice = [].slice, unshift = [].unshift, toString = {}.toString, stableSort = kendo.support.stableSort, dateRegExp = /^\\/Date\\((.*?)\\)\\/$/, objectKeys = [];\n var ObservableArray = Observable.extend({\n init: function (array, type) {\n var that = this;\n that.type = type || ObservableObject;\n Observable.fn.init.call(that);\n that.length = array.length;\n that.wrapAll(array, that);\n },\n at: function (index) {\n return this[index];\n },\n toJSON: function (serializeFunctions) {\n var idx, length = this.length, value, json = new Array(length);\n for (idx = 0; idx < length; idx++) {\n value = this[idx];\n if (value instanceof ObservableObject) {\n value = value.toJSON(serializeFunctions);\n }\n json[idx] = value;\n }\n return json;\n },\n parent: noop,\n wrapAll: function (source, target) {\n var that = this, idx, length, parent = function () {\n return that;\n };\n target = target || [];\n for (idx = 0, length = source.length; idx < length; idx++) {\n target[idx] = that.wrap(source[idx], parent);\n }\n return target;\n },\n wrap: function (object, parent) {\n var that = this, observable;\n if (object !== null && toString.call(object) === '[object Object]') {\n observable = object instanceof that.type || object instanceof Model;\n if (!observable) {\n object = object instanceof ObservableObject ? object.toJSON() : object;\n object = new that.type(object);\n }\n object.parent = parent;\n object.bind(CHANGE, function (e) {\n that.trigger(CHANGE, {\n field: e.field,\n node: e.node,\n index: e.index,\n items: e.items || [this],\n action: e.node ? e.action || 'itemloaded' : 'itemchange'\n });\n });\n }\n return object;\n },\n push: function () {\n var index = this.length, items = this.wrapAll(arguments), result;\n result = push.apply(this, items);\n if (!this.omitChangeEvent) {\n this.trigger(CHANGE, {\n action: 'add',\n index: index,\n items: items\n });\n }\n return result;\n },\n slice: slice,\n sort: [].sort,\n join: join,\n pop: function () {\n var length = this.length, result = pop.apply(this);\n if (length) {\n this.trigger(CHANGE, {\n action: 'remove',\n index: length - 1,\n items: [result]\n });\n }\n return result;\n },\n splice: function (index, howMany, item) {\n var items = this.wrapAll(slice.call(arguments, 2)), result, i, len;\n result = splice.apply(this, [\n index,\n howMany\n ].concat(items));\n if (result.length) {\n this.trigger(CHANGE, {\n action: 'remove',\n index: index,\n items: result\n });\n for (i = 0, len = result.length; i < len; i++) {\n if (result[i] && result[i].children) {\n result[i].unbind(CHANGE);\n }\n }\n }\n if (item) {\n this.trigger(CHANGE, {\n action: 'add',\n index: index,\n items: items\n });\n }\n return result;\n },\n shift: function () {\n var length = this.length, result = shift.apply(this);\n if (length) {\n this.trigger(CHANGE, {\n action: 'remove',\n index: 0,\n items: [result]\n });\n }\n return result;\n },\n unshift: function () {\n var items = this.wrapAll(arguments), result;\n result = unshift.apply(this, items);\n this.trigger(CHANGE, {\n action: 'add',\n index: 0,\n items: items\n });\n return result;\n },\n indexOf: function (item) {\n var that = this, idx, length;\n for (idx = 0, length = that.length; idx < length; idx++) {\n if (that[idx] === item) {\n return idx;\n }\n }\n return -1;\n },\n forEach: function (callback, thisArg) {\n var idx = 0;\n var length = this.length;\n var context = thisArg || window;\n for (; idx < length; idx++) {\n callback.call(context, this[idx], idx, this);\n }\n },\n map: function (callback, thisArg) {\n var idx = 0;\n var result = [];\n var length = this.length;\n var context = thisArg || window;\n for (; idx < length; idx++) {\n result[idx] = callback.call(context, this[idx], idx, this);\n }\n return result;\n },\n reduce: function (callback) {\n var idx = 0, result, length = this.length;\n if (arguments.length == 2) {\n result = arguments[1];\n } else if (idx < length) {\n result = this[idx++];\n }\n for (; idx < length; idx++) {\n result = callback(result, this[idx], idx, this);\n }\n return result;\n },\n reduceRight: function (callback) {\n var idx = this.length - 1, result;\n if (arguments.length == 2) {\n result = arguments[1];\n } else if (idx > 0) {\n result = this[idx--];\n }\n for (; idx >= 0; idx--) {\n result = callback(result, this[idx], idx, this);\n }\n return result;\n },\n filter: function (callback, thisArg) {\n var idx = 0;\n var result = [];\n var item;\n var length = this.length;\n var context = thisArg || window;\n for (; idx < length; idx++) {\n item = this[idx];\n if (callback.call(context, item, idx, this)) {\n result[result.length] = item;\n }\n }\n return result;\n },\n find: function (callback, thisArg) {\n var idx = 0;\n var item;\n var length = this.length;\n var context = thisArg || window;\n for (; idx < length; idx++) {\n item = this[idx];\n if (callback.call(context, item, idx, this)) {\n return item;\n }\n }\n },\n every: function (callback, thisArg) {\n var idx = 0;\n var item;\n var length = this.length;\n var context = thisArg || window;\n for (; idx < length; idx++) {\n item = this[idx];\n if (!callback.call(context, item, idx, this)) {\n return false;\n }\n }\n return true;\n },\n some: function (callback, thisArg) {\n var idx = 0;\n var item;\n var length = this.length;\n var context = thisArg || window;\n for (; idx < length; idx++) {\n item = this[idx];\n if (callback.call(context, item, idx, this)) {\n return true;\n }\n }\n return false;\n },\n remove: function (item) {\n var idx = this.indexOf(item);\n if (idx !== -1) {\n this.splice(idx, 1);\n }\n },\n empty: function () {\n this.splice(0, this.length);\n }\n });\n if (typeof Symbol !== 'undefined' && Symbol.iterator && !ObservableArray.prototype[Symbol.iterator]) {\n ObservableArray.prototype[Symbol.iterator] = [][Symbol.iterator];\n }\n var LazyObservableArray = ObservableArray.extend({\n init: function (data, type, events) {\n Observable.fn.init.call(this);\n this.type = type || ObservableObject;\n if (events) {\n this._events = events;\n }\n for (var idx = 0; idx < data.length; idx++) {\n this[idx] = data[idx];\n }\n this.length = idx;\n this._parent = proxy(function () {\n return this;\n }, this);\n },\n at: function (index) {\n var item = this[index];\n if (!(item instanceof this.type)) {\n item = this[index] = this.wrap(item, this._parent);\n } else {\n item.parent = this._parent;\n }\n return item;\n }\n });\n function eventHandler(context, type, field, prefix) {\n return function (e) {\n var event = {}, key;\n for (key in e) {\n event[key] = e[key];\n }\n if (prefix) {\n event.field = field + '.' + e.field;\n } else {\n event.field = field;\n }\n if (type == CHANGE && context._notifyChange) {\n context._notifyChange(event);\n }\n context.trigger(type, event);\n };\n }\n function ownKeys(value, ignoreObjectKeys) {\n var props = [];\n value = value || {};\n while (value) {\n Object.getOwnPropertyNames(value).forEach(function (prop) {\n if (props.indexOf(prop) === -1 && (!ignoreObjectKeys || objectKeys.indexOf(prop) < 0)) {\n props.push(prop);\n }\n });\n value = Object.getPrototypeOf(value);\n }\n return props;\n }\n objectKeys = ownKeys({}, false);\n var ObservableObject = Observable.extend({\n init: function (value) {\n var that = this, member, keys = ownKeys(value, true), parent = function () {\n return that;\n };\n Observable.fn.init.call(this);\n this._handlers = {};\n keys.forEach(function (field) {\n member = value[field];\n if (typeof member === 'object' && member && !member.getTime && field.charAt(0) != '_') {\n member = that.wrap(member, field, parent);\n }\n that[field] = member;\n });\n that.uid = kendo.guid();\n },\n shouldSerialize: function (field, serializeFunctions) {\n return this.hasOwnProperty(field) && field !== '_handlers' && field !== '_events' && (serializeFunctions && serializeFunctions[field] || typeof this[field] !== FUNCTION) && field !== 'uid';\n },\n forEach: function (f) {\n for (var i in this) {\n if (this.shouldSerialize(i)) {\n f(this[i], i);\n }\n }\n },\n toJSON: function (serializeFunctions) {\n var result = {}, value, field;\n for (field in this) {\n if (this.shouldSerialize(field, serializeFunctions)) {\n value = this[field];\n if (value instanceof ObservableObject || value instanceof ObservableArray) {\n value = value.toJSON(serializeFunctions);\n }\n result[field] = value;\n }\n }\n return result;\n },\n get: function (field) {\n var that = this, result;\n that.trigger(GET, { field: field });\n if (field === 'this') {\n result = that;\n } else {\n result = kendo.getter(field, true)(that);\n }\n return result;\n },\n _set: function (field, value) {\n var that = this;\n var composite = field.indexOf('.') >= 0;\n if (composite) {\n var paths = field.split('.'), path = '';\n while (paths.length > 1) {\n path += paths.shift();\n var obj = kendo.getter(path, true)(that);\n if (obj instanceof ObservableObject) {\n obj.set(paths.join('.'), value);\n return composite;\n }\n path += '.';\n }\n }\n kendo.setter(field)(that, value);\n return composite;\n },\n set: function (field, value) {\n var that = this, isSetPrevented = false, composite = field.indexOf('.') >= 0, current = kendo.getter(field, true)(that);\n if (current !== value) {\n if (current instanceof Observable && this._handlers[field]) {\n if (this._handlers[field].get) {\n current.unbind(GET, this._handlers[field].get);\n }\n current.unbind(CHANGE, this._handlers[field].change);\n }\n isSetPrevented = that.trigger('set', {\n field: field,\n value: value\n });\n if (!isSetPrevented) {\n if (!composite) {\n value = that.wrap(value, field, function () {\n return that;\n });\n }\n if (!that._set(field, value) || field.indexOf('(') >= 0 || field.indexOf('[') >= 0) {\n that.trigger(CHANGE, { field: field });\n }\n }\n }\n return isSetPrevented;\n },\n parent: noop,\n wrap: function (object, field, parent) {\n var that = this;\n var get;\n var change;\n var type = toString.call(object);\n if (object != null && (type === '[object Object]' || type === '[object Array]')) {\n var isObservableArray = object instanceof ObservableArray;\n var isDataSource = object instanceof DataSource;\n if (type === '[object Object]' && !isDataSource && !isObservableArray) {\n if (!(object instanceof ObservableObject)) {\n object = new ObservableObject(object);\n }\n get = eventHandler(that, GET, field, true);\n object.bind(GET, get);\n change = eventHandler(that, CHANGE, field, true);\n object.bind(CHANGE, change);\n that._handlers[field] = {\n get: get,\n change: change\n };\n } else if (type === '[object Array]' || isObservableArray || isDataSource) {\n if (!isObservableArray && !isDataSource) {\n object = new ObservableArray(object);\n }\n change = eventHandler(that, CHANGE, field, false);\n object.bind(CHANGE, change);\n that._handlers[field] = { change: change };\n }\n object.parent = parent;\n }\n return object;\n }\n });\n function equal(x, y) {\n if (x === y) {\n return true;\n }\n var xtype = $.type(x), ytype = $.type(y), field;\n if (xtype !== ytype) {\n return false;\n }\n if (xtype === 'date') {\n return x.getTime() === y.getTime();\n }\n if (xtype !== 'object' && xtype !== 'array') {\n return false;\n }\n for (field in x) {\n if (!equal(x[field], y[field])) {\n return false;\n }\n }\n return true;\n }\n var parsers = {\n 'number': function (value) {\n if (typeof value === STRING && value.toLowerCase() === 'null') {\n return null;\n }\n return kendo.parseFloat(value);\n },\n 'date': function (value) {\n if (typeof value === STRING && value.toLowerCase() === 'null') {\n return null;\n }\n return kendo.parseDate(value);\n },\n 'boolean': function (value) {\n if (typeof value === STRING) {\n if (value.toLowerCase() === 'null') {\n return null;\n } else {\n return value.toLowerCase() === 'true';\n }\n }\n return value != null ? !!value : value;\n },\n 'string': function (value) {\n if (typeof value === STRING && value.toLowerCase() === 'null') {\n return null;\n }\n return value != null ? value + '' : value;\n },\n 'default': function (value) {\n return value;\n }\n };\n var defaultValues = {\n 'string': '',\n 'number': 0,\n 'date': new Date(),\n 'boolean': false,\n 'default': ''\n };\n function getFieldByName(obj, name) {\n var field, fieldName;\n for (fieldName in obj) {\n field = obj[fieldName];\n if (isPlainObject(field) && field.field && field.field === name) {\n return field;\n } else if (field === name) {\n return field;\n }\n }\n return null;\n }\n var Model = ObservableObject.extend({\n init: function (data) {\n var that = this;\n if (!data || $.isEmptyObject(data)) {\n data = $.extend({}, that.defaults, data);\n if (that._initializers) {\n for (var idx = 0; idx < that._initializers.length; idx++) {\n var name = that._initializers[idx];\n data[name] = that.defaults[name]();\n }\n }\n }\n ObservableObject.fn.init.call(that, data);\n that.dirty = false;\n that.dirtyFields = {};\n if (that.idField) {\n that.id = that.get(that.idField);\n if (that.id === undefined) {\n that.id = that._defaultId;\n }\n }\n },\n shouldSerialize: function (field) {\n return ObservableObject.fn.shouldSerialize.call(this, field) && field !== 'uid' && !(this.idField !== 'id' && field === 'id') && field !== 'dirty' && field !== 'dirtyFields' && field !== '_accessors';\n },\n _parse: function (field, value) {\n var that = this, fieldName = field, fields = that.fields || {}, parse;\n field = fields[field];\n if (!field) {\n field = getFieldByName(fields, fieldName);\n }\n if (field) {\n parse = field.parse;\n if (!parse && field.type) {\n parse = parsers[field.type.toLowerCase()];\n }\n }\n return parse ? parse(value) : value;\n },\n _notifyChange: function (e) {\n var action = e.action;\n if (action == 'add' || action == 'remove') {\n this.dirty = true;\n this.dirtyFields[e.field] = true;\n }\n },\n editable: function (field) {\n field = (this.fields || {})[field];\n return field ? field.editable !== false : true;\n },\n set: function (field, value) {\n var that = this;\n var dirty = that.dirty;\n if (that.editable(field)) {\n value = that._parse(field, value);\n if (!equal(value, that.get(field))) {\n that.dirty = true;\n that.dirtyFields[field] = true;\n if (ObservableObject.fn.set.call(that, field, value) && !dirty) {\n that.dirty = dirty;\n if (!that.dirty) {\n that.dirtyFields[field] = false;\n }\n }\n } else {\n that.trigger('equalSet', {\n field: field,\n value: value\n });\n }\n }\n },\n accept: function (data) {\n var that = this, parent = function () {\n return that;\n }, field;\n for (field in data) {\n var value = data[field];\n if (field.charAt(0) != '_') {\n value = that.wrap(data[field], field, parent);\n }\n that._set(field, value);\n }\n if (that.idField) {\n that.id = that.get(that.idField);\n }\n that.dirty = false;\n that.dirtyFields = {};\n },\n isNew: function () {\n return this.id === this._defaultId;\n }\n });\n Model.define = function (base, options) {\n if (options === undefined) {\n options = base;\n base = Model;\n }\n var model, proto = extend({ defaults: {} }, options), name, field, type, value, idx, length, fields = {}, originalName, id = proto.id, functionFields = [];\n if (id) {\n proto.idField = id;\n }\n if (proto.id) {\n delete proto.id;\n }\n if (id) {\n proto.defaults[id] = proto._defaultId = '';\n }\n if (toString.call(proto.fields) === '[object Array]') {\n for (idx = 0, length = proto.fields.length; idx < length; idx++) {\n field = proto.fields[idx];\n if (typeof field === STRING) {\n fields[field] = {};\n } else if (field.field) {\n fields[field.field] = field;\n }\n }\n proto.fields = fields;\n }\n for (name in proto.fields) {\n field = proto.fields[name];\n type = field.type || 'default';\n value = null;\n originalName = name;\n name = typeof field.field === STRING ? field.field : name;\n if (!field.nullable) {\n value = proto.defaults[originalName !== name ? originalName : name] = field.defaultValue !== undefined ? field.defaultValue : defaultValues[type.toLowerCase()];\n if (typeof value === 'function') {\n functionFields.push(name);\n }\n }\n if (options.id === name) {\n proto._defaultId = value;\n }\n proto.defaults[originalName !== name ? originalName : name] = value;\n field.parse = field.parse || parsers[type];\n }\n if (functionFields.length > 0) {\n proto._initializers = functionFields;\n }\n model = base.extend(proto);\n model.define = function (options) {\n return Model.define(model, options);\n };\n if (proto.fields) {\n model.fields = proto.fields;\n model.idField = proto.idField;\n }\n return model;\n };\n var Comparer = {\n selector: function (field) {\n return isFunction(field) ? field : getter(field);\n },\n compare: function (field) {\n var selector = this.selector(field);\n return function (a, b) {\n a = selector(a);\n b = selector(b);\n if (a == null && b == null) {\n return 0;\n }\n if (a == null) {\n return -1;\n }\n if (b == null) {\n return 1;\n }\n if (a.localeCompare) {\n return a.localeCompare(b);\n }\n return a > b ? 1 : a < b ? -1 : 0;\n };\n },\n create: function (sort) {\n var compare = sort.compare || this.compare(sort.field);\n if (sort.dir == 'desc') {\n return function (a, b) {\n return compare(b, a, true);\n };\n }\n return compare;\n },\n combine: function (comparers) {\n return function (a, b) {\n var result = comparers[0](a, b), idx, length;\n for (idx = 1, length = comparers.length; idx < length; idx++) {\n result = result || comparers[idx](a, b);\n }\n return result;\n };\n }\n };\n var StableComparer = extend({}, Comparer, {\n asc: function (field) {\n var selector = this.selector(field);\n return function (a, b) {\n var valueA = selector(a);\n var valueB = selector(b);\n if (valueA && valueA.getTime && valueB && valueB.getTime) {\n valueA = valueA.getTime();\n valueB = valueB.getTime();\n }\n if (valueA === valueB) {\n return a.__position - b.__position;\n }\n if (valueA == null) {\n return -1;\n }\n if (valueB == null) {\n return 1;\n }\n if (valueA.localeCompare) {\n return valueA.localeCompare(valueB);\n }\n return valueA > valueB ? 1 : -1;\n };\n },\n desc: function (field) {\n var selector = this.selector(field);\n return function (a, b) {\n var valueA = selector(a);\n var valueB = selector(b);\n if (valueA && valueA.getTime && valueB && valueB.getTime) {\n valueA = valueA.getTime();\n valueB = valueB.getTime();\n }\n if (valueA === valueB) {\n return a.__position - b.__position;\n }\n if (valueA == null) {\n return 1;\n }\n if (valueB == null) {\n return -1;\n }\n if (valueB.localeCompare) {\n return valueB.localeCompare(valueA);\n }\n return valueA < valueB ? 1 : -1;\n };\n },\n create: function (sort) {\n return this[sort.dir](sort.field);\n }\n });\n map = function (array, callback) {\n var idx, length = array.length, result = new Array(length);\n for (idx = 0; idx < length; idx++) {\n result[idx] = callback(array[idx], idx, array);\n }\n return result;\n };\n var operators = function () {\n function quote(str) {\n if (typeof str == 'string') {\n str = str.replace(/[\\r\\n]+/g, '');\n }\n return JSON.stringify(str);\n }\n function textOp(impl) {\n return function (a, b, ignore, accentFoldingFiltering) {\n b += '';\n if (ignore) {\n a = '(' + a + ' + \\'\\').toString()' + (accentFoldingFiltering ? '.toLocaleLowerCase(\\'' + accentFoldingFiltering + '\\')' : '.toLowerCase()');\n b = accentFoldingFiltering ? b.toLocaleLowerCase(accentFoldingFiltering) : b.toLowerCase();\n }\n return impl(a, quote(b), ignore);\n };\n }\n function operator(op, a, b, ignore, accentFoldingFiltering) {\n if (b != null) {\n if (typeof b === STRING) {\n var date = dateRegExp.exec(b);\n if (date) {\n b = new Date(+date[1]);\n } else if (ignore) {\n b = quote(accentFoldingFiltering ? b.toLocaleLowerCase(accentFoldingFiltering) : b.toLowerCase());\n a = '((' + a + ' || \\'\\')+\\'\\')' + (accentFoldingFiltering ? '.toLocaleLowerCase(\\'' + accentFoldingFiltering + '\\')' : '.toLowerCase()');\n } else {\n b = quote(b);\n }\n }\n if (b.getTime) {\n a = '(' + a + '&&' + a + '.getTime?' + a + '.getTime():' + a + ')';\n b = b.getTime();\n }\n }\n return a + ' ' + op + ' ' + b;\n }\n function getMatchRegexp(pattern) {\n for (var rx = '/^', esc = false, i = 0; i < pattern.length; ++i) {\n var ch = pattern.charAt(i);\n if (esc) {\n rx += '\\\\' + ch;\n } else if (ch == '~') {\n esc = true;\n continue;\n } else if (ch == '*') {\n rx += '.*';\n } else if (ch == '?') {\n rx += '.';\n } else if ('.+^$()[]{}|\\\\/\\n\\r\\u2028\\u2029\\xA0'.indexOf(ch) >= 0) {\n rx += '\\\\' + ch;\n } else {\n rx += ch;\n }\n esc = false;\n }\n return rx + '$/';\n }\n return {\n quote: function (value) {\n if (value && value.getTime) {\n return 'new Date(' + value.getTime() + ')';\n }\n return quote(value);\n },\n eq: function (a, b, ignore, accentFoldingFiltering) {\n return operator('==', a, b, ignore, accentFoldingFiltering);\n },\n neq: function (a, b, ignore, accentFoldingFiltering) {\n return operator('!=', a, b, ignore, accentFoldingFiltering);\n },\n gt: function (a, b, ignore) {\n return operator('>', a, b, ignore);\n },\n gte: function (a, b, ignore) {\n return operator('>=', a, b, ignore);\n },\n lt: function (a, b, ignore) {\n return operator('<', a, b, ignore);\n },\n lte: function (a, b, ignore) {\n return operator('<=', a, b, ignore);\n },\n startswith: textOp(function (a, b) {\n return a + '.lastIndexOf(' + b + ', 0) == 0';\n }),\n doesnotstartwith: textOp(function (a, b) {\n return a + '.lastIndexOf(' + b + ', 0) == -1';\n }),\n endswith: textOp(function (a, b) {\n var n = b ? b.length - 2 : 0;\n return a + '.indexOf(' + b + ', ' + a + '.length - ' + n + ') >= 0';\n }),\n doesnotendwith: textOp(function (a, b) {\n var n = b ? b.length - 2 : 0;\n return a + '.indexOf(' + b + ', ' + a + '.length - ' + n + ') < 0';\n }),\n contains: textOp(function (a, b) {\n return a + '.indexOf(' + b + ') >= 0';\n }),\n doesnotcontain: textOp(function (a, b) {\n return a + '.indexOf(' + b + ') == -1';\n }),\n matches: textOp(function (a, b) {\n b = b.substring(1, b.length - 1);\n return getMatchRegexp(b) + '.test(' + a + ')';\n }),\n doesnotmatch: textOp(function (a, b) {\n b = b.substring(1, b.length - 1);\n return '!' + getMatchRegexp(b) + '.test(' + a + ')';\n }),\n isempty: function (a) {\n return a + ' === \\'\\'';\n },\n isnotempty: function (a) {\n return a + ' !== \\'\\'';\n },\n isnull: function (a) {\n return '(' + a + ' == null)';\n },\n isnotnull: function (a) {\n return '(' + a + ' != null)';\n },\n isnullorempty: function (a) {\n return '(' + a + ' === null) || (' + a + ' === \\'\\')';\n },\n isnotnullorempty: function (a) {\n return '(' + a + ' !== null) && (' + a + ' !== \\'\\')';\n }\n };\n }();\n function Query(data) {\n this.data = data || [];\n }\n Query.filterExpr = function (expression) {\n var expressions = [], logic = {\n and: ' && ',\n or: ' || '\n }, idx, length, filter, expr, fieldFunctions = [], operatorFunctions = [], field, operator, filters = expression.filters;\n for (idx = 0, length = filters.length; idx < length; idx++) {\n filter = filters[idx];\n field = filter.field;\n operator = filter.operator;\n if (filter.filters) {\n expr = Query.filterExpr(filter);\n filter = expr.expression.replace(/__o\\[(\\d+)\\]/g, function (match, index) {\n index = +index;\n return '__o[' + (operatorFunctions.length + index) + ']';\n }).replace(/__f\\[(\\d+)\\]/g, function (match, index) {\n index = +index;\n return '__f[' + (fieldFunctions.length + index) + ']';\n });\n operatorFunctions.push.apply(operatorFunctions, expr.operators);\n fieldFunctions.push.apply(fieldFunctions, expr.fields);\n } else {\n if (typeof field === FUNCTION) {\n expr = '__f[' + fieldFunctions.length + '](d)';\n fieldFunctions.push(field);\n } else {\n expr = kendo.expr(field);\n }\n if (typeof operator === FUNCTION) {\n filter = '__o[' + operatorFunctions.length + '](' + expr + ', ' + operators.quote(filter.value) + ')';\n operatorFunctions.push(operator);\n } else {\n filter = operators[(operator || 'eq').toLowerCase()](expr, filter.value, filter.ignoreCase !== undefined ? filter.ignoreCase : true, expression.accentFoldingFiltering);\n }\n }\n expressions.push(filter);\n }\n return {\n expression: '(' + expressions.join(logic[expression.logic]) + ')',\n fields: fieldFunctions,\n operators: operatorFunctions\n };\n };\n function normalizeSort(field, dir) {\n if (field) {\n var descriptor = typeof field === STRING ? {\n field: field,\n dir: dir\n } : field, descriptors = isArray(descriptor) ? descriptor : descriptor !== undefined ? [descriptor] : [];\n return grep(descriptors, function (d) {\n return !!d.dir;\n });\n }\n }\n function sortFields(sorts, dir) {\n var sortObject = {};\n if (sorts) {\n var descriptor = typeof sorts === STRING ? {\n field: sorts,\n dir: dir\n } : sorts, descriptors = isArray(descriptor) ? descriptor : descriptor !== undefined ? [descriptor] : [];\n for (var i = 0; i < descriptors.length; i++) {\n sortObject[descriptors[i].field] = {\n dir: descriptors[i].dir,\n index: i + 1\n };\n }\n }\n return sortObject;\n }\n var operatorMap = {\n '==': 'eq',\n equals: 'eq',\n isequalto: 'eq',\n equalto: 'eq',\n equal: 'eq',\n '!=': 'neq',\n ne: 'neq',\n notequals: 'neq',\n isnotequalto: 'neq',\n notequalto: 'neq',\n notequal: 'neq',\n '<': 'lt',\n islessthan: 'lt',\n lessthan: 'lt',\n less: 'lt',\n '<=': 'lte',\n le: 'lte',\n islessthanorequalto: 'lte',\n lessthanequal: 'lte',\n '>': 'gt',\n isgreaterthan: 'gt',\n greaterthan: 'gt',\n greater: 'gt',\n '>=': 'gte',\n isgreaterthanorequalto: 'gte',\n greaterthanequal: 'gte',\n ge: 'gte',\n notsubstringof: 'doesnotcontain',\n isnull: 'isnull',\n isempty: 'isempty',\n isnotempty: 'isnotempty'\n };\n function normalizeOperator(expression) {\n var idx, length, filter, operator, filters = expression.filters;\n if (filters) {\n for (idx = 0, length = filters.length; idx < length; idx++) {\n filter = filters[idx];\n operator = filter.operator;\n if (operator && typeof operator === STRING) {\n filter.operator = operatorMap[operator.toLowerCase()] || operator;\n }\n normalizeOperator(filter);\n }\n }\n }\n function normalizeFilter(expression) {\n if (expression && !isEmptyObject(expression)) {\n if (isArray(expression) || !expression.filters) {\n expression = {\n logic: 'and',\n filters: isArray(expression) ? expression : [expression]\n };\n }\n normalizeOperator(expression);\n return expression;\n }\n }\n Query.normalizeFilter = normalizeFilter;\n function compareDescriptor(f1, f2) {\n if (f1.logic || f2.logic) {\n return false;\n }\n return f1.field === f2.field && f1.value === f2.value && f1.operator === f2.operator;\n }\n function normalizeDescriptor(filter) {\n filter = filter || {};\n if (isEmptyObject(filter)) {\n return {\n logic: 'and',\n filters: []\n };\n }\n return normalizeFilter(filter);\n }\n function fieldComparer(a, b) {\n if (b.logic || a.field > b.field) {\n return 1;\n } else if (a.field < b.field) {\n return -1;\n } else {\n return 0;\n }\n }\n function compareFilters(expr1, expr2) {\n expr1 = normalizeDescriptor(expr1);\n expr2 = normalizeDescriptor(expr2);\n if (expr1.logic !== expr2.logic) {\n return false;\n }\n var f1, f2;\n var filters1 = (expr1.filters || []).slice();\n var filters2 = (expr2.filters || []).slice();\n if (filters1.length !== filters2.length) {\n return false;\n }\n filters1 = filters1.sort(fieldComparer);\n filters2 = filters2.sort(fieldComparer);\n for (var idx = 0; idx < filters1.length; idx++) {\n f1 = filters1[idx];\n f2 = filters2[idx];\n if (f1.logic && f2.logic) {\n if (!compareFilters(f1, f2)) {\n return false;\n }\n } else if (!compareDescriptor(f1, f2)) {\n return false;\n }\n }\n return true;\n }\n Query.compareFilters = compareFilters;\n function normalizeAggregate(expressions) {\n return isArray(expressions) ? expressions : [expressions];\n }\n function normalizeGroup(field, dir, compare, skipItemSorting) {\n var descriptor = typeof field === STRING ? {\n field: field,\n dir: dir,\n compare: compare,\n skipItemSorting: skipItemSorting\n } : field, descriptors = isArray(descriptor) ? descriptor : descriptor !== undefined ? [descriptor] : [];\n return map(descriptors, function (d) {\n return {\n field: d.field,\n dir: d.dir || 'asc',\n aggregates: d.aggregates,\n compare: d.compare,\n skipItemSorting: d.skipItemSorting\n };\n });\n }\n function normalizeGroupWithoutCompare(field, dir, compare) {\n var descriptors = normalizeGroup(field, dir, compare);\n for (var i = 0; i < descriptors.length; i++) {\n delete descriptors[i].compare;\n }\n return descriptors;\n }\n function anyGroupDescriptorHasCompare(groupDescriptors) {\n var descriptors = isArray(groupDescriptors) ? groupDescriptors : [groupDescriptors];\n for (var i = 0; i < descriptors.length; i++) {\n if (descriptors[i] && isFunction(descriptors[i].compare)) {\n return true;\n }\n }\n return false;\n }\n Query.prototype = {\n toArray: function () {\n return this.data;\n },\n range: function (index, count) {\n return new Query(this.data.slice(index, index + count));\n },\n skip: function (count) {\n return new Query(this.data.slice(count));\n },\n take: function (count) {\n return new Query(this.data.slice(0, count));\n },\n select: function (selector) {\n return new Query(map(this.data, selector));\n },\n order: function (selector, dir, inPlace) {\n var sort = { dir: dir };\n if (selector) {\n if (selector.compare) {\n sort.compare = selector.compare;\n } else {\n sort.field = selector;\n }\n }\n if (inPlace) {\n return new Query(this.data.sort(Comparer.create(sort)));\n }\n return new Query(this.data.slice(0).sort(Comparer.create(sort)));\n },\n orderBy: function (selector, inPlace) {\n return this.order(selector, 'asc', inPlace);\n },\n orderByDescending: function (selector, inPlace) {\n return this.order(selector, 'desc', inPlace);\n },\n sort: function (field, dir, comparer, inPlace) {\n var idx, length, descriptors = normalizeSort(field, dir), comparers = [];\n comparer = comparer || Comparer;\n if (descriptors.length) {\n for (idx = 0, length = descriptors.length; idx < length; idx++) {\n comparers.push(comparer.create(descriptors[idx]));\n }\n return this.orderBy({ compare: comparer.combine(comparers) }, inPlace);\n }\n return this;\n },\n filter: function (expressions) {\n var idx, current, length, compiled, predicate, data = this.data, fields, operators, result = [], filter;\n expressions = normalizeFilter(expressions);\n if (!expressions || expressions.filters.length === 0) {\n return this;\n }\n compiled = Query.filterExpr(expressions);\n fields = compiled.fields;\n operators = compiled.operators;\n predicate = filter = new Function('d, __f, __o', 'return ' + compiled.expression);\n if (fields.length || operators.length) {\n filter = function (d) {\n return predicate(d, fields, operators);\n };\n }\n for (idx = 0, length = data.length; idx < length; idx++) {\n current = data[idx];\n if (filter(current)) {\n result.push(current);\n }\n }\n return new Query(result);\n },\n group: function (descriptors, allData, options) {\n descriptors = normalizeGroup(descriptors || []);\n allData = allData || this.data;\n var that = this, result = new Query(that.data), descriptor;\n if (descriptors.length > 0) {\n descriptor = descriptors[0];\n if (options && options.groupPaging) {\n result = new Query(allData).groupAllData(descriptor, allData).select(function (group) {\n var data = new Query(allData).filter([{\n field: group.field,\n operator: 'eq',\n value: group.value,\n ignoreCase: false\n }]);\n var items = descriptors.length > 1 ? new Query(group.items).group(descriptors.slice(1), data.toArray(), options).toArray() : group.items;\n return {\n field: group.field,\n value: group.value,\n hasSubgroups: descriptors.length > 1,\n items: items,\n aggregates: data.aggregate(descriptor.aggregates),\n uid: kendo.guid(),\n itemCount: items.length,\n subgroupCount: items.length\n };\n });\n } else {\n result = result.groupBy(descriptor).select(function (group) {\n var data = new Query(allData).filter([{\n field: group.field,\n operator: 'eq',\n value: group.value,\n ignoreCase: false\n }]);\n return {\n field: group.field,\n value: group.value,\n items: descriptors.length > 1 ? new Query(group.items).group(descriptors.slice(1), data.toArray()).toArray() : group.items,\n hasSubgroups: descriptors.length > 1,\n aggregates: data.aggregate(descriptor.aggregates)\n };\n });\n }\n }\n return result;\n },\n groupBy: function (descriptor) {\n var that = this;\n if (isEmptyObject(descriptor) || !this.data.length) {\n return new Query([]);\n }\n var field = descriptor.field, sorted = descriptor.skipItemSorting ? this.data : this._sortForGrouping(field, descriptor.dir || 'asc'), accessor = kendo.accessor(field), item, groupValue = accessor.get(sorted[0], field), group = {\n field: field,\n value: groupValue,\n items: []\n }, currentValue, idx, len, result = [group];\n for (idx = 0, len = sorted.length; idx < len; idx++) {\n item = sorted[idx];\n currentValue = accessor.get(item, field);\n if (!groupValueComparer(groupValue, currentValue)) {\n groupValue = currentValue;\n group = {\n field: field,\n value: groupValue,\n items: []\n };\n result.push(group);\n }\n group.items.push(item);\n }\n result = that._sortGroups(result, descriptor);\n return new Query(result);\n },\n groupAllData: function (descriptor, allData) {\n if (isEmptyObject(descriptor) || this.data && !this.data.length) {\n return new Query([]);\n }\n var field = descriptor.field, sorted = descriptor.skipItemSorting ? allData : new Query(allData).sort(field, descriptor.dir || 'asc', StableComparer).toArray(), accessor = kendo.accessor(field), item, groupValue = accessor.get(sorted[0], field), group = {\n field: field,\n value: groupValue,\n items: []\n }, currentValue, idx, len, result = [group];\n for (idx = 0, len = sorted.length; idx < len; idx++) {\n item = sorted[idx];\n currentValue = accessor.get(item, field);\n if (!groupValueComparer(groupValue, currentValue)) {\n groupValue = currentValue;\n group = {\n field: field,\n value: groupValue,\n items: []\n };\n result.push(group);\n }\n group.items.push(item);\n }\n result = this._sortGroups(result, descriptor);\n return new Query(result);\n },\n _sortForGrouping: function (field, dir) {\n var idx, length, data = this.data;\n if (!stableSort) {\n for (idx = 0, length = data.length; idx < length; idx++) {\n data[idx].__position = idx;\n }\n data = new Query(data).sort(field, dir, StableComparer).toArray();\n for (idx = 0, length = data.length; idx < length; idx++) {\n delete data[idx].__position;\n }\n return data;\n }\n return this.sort(field, dir).toArray();\n },\n _sortGroups: function (groups, descriptor) {\n var result = groups;\n if (descriptor && isFunction(descriptor.compare)) {\n result = new Query(result).order({ compare: descriptor.compare }, descriptor.dir || ASCENDING).toArray();\n }\n return result;\n },\n aggregate: function (aggregates) {\n var idx, len, result = {}, state = {};\n if (aggregates && aggregates.length) {\n for (idx = 0, len = this.data.length; idx < len; idx++) {\n calculateAggregate(result, aggregates, this.data[idx], idx, len, state);\n }\n }\n return result;\n }\n };\n function groupValueComparer(a, b) {\n if (a && a.getTime && b && b.getTime) {\n return a.getTime() === b.getTime();\n }\n return a === b;\n }\n function calculateAggregate(accumulator, aggregates, item, index, length, state) {\n aggregates = aggregates || [];\n var idx, aggr, functionName, len = aggregates.length;\n for (idx = 0; idx < len; idx++) {\n aggr = aggregates[idx];\n functionName = aggr.aggregate;\n var field = aggr.field;\n accumulator[field] = accumulator[field] || {};\n state[field] = state[field] || {};\n state[field][functionName] = state[field][functionName] || {};\n accumulator[field][functionName] = functions[functionName.toLowerCase()](accumulator[field][functionName], item, kendo.accessor(field), index, length, state[field][functionName]);\n }\n }\n var functions = {\n sum: function (accumulator, item, accessor) {\n var value = accessor.get(item);\n if (!isNumber(accumulator)) {\n accumulator = value;\n } else if (isNumber(value)) {\n accumulator += value;\n }\n return accumulator;\n },\n count: function (accumulator) {\n return (accumulator || 0) + 1;\n },\n average: function (accumulator, item, accessor, index, length, state) {\n var value = accessor.get(item);\n if (state.count === undefined) {\n state.count = 0;\n }\n if (!isNumber(accumulator)) {\n accumulator = value;\n } else if (isNumber(value)) {\n accumulator += value;\n }\n if (isNumber(value)) {\n state.count++;\n }\n if (index == length - 1 && isNumber(accumulator)) {\n accumulator = accumulator / state.count;\n }\n return accumulator;\n },\n max: function (accumulator, item, accessor) {\n var value = accessor.get(item);\n if (!isNumber(accumulator) && !isDate(accumulator)) {\n accumulator = value;\n }\n if (accumulator < value && (isNumber(value) || isDate(value))) {\n accumulator = value;\n }\n return accumulator;\n },\n min: function (accumulator, item, accessor) {\n var value = accessor.get(item);\n if (!isNumber(accumulator) && !isDate(accumulator)) {\n accumulator = value;\n }\n if (accumulator > value && (isNumber(value) || isDate(value))) {\n accumulator = value;\n }\n return accumulator;\n }\n };\n function isNumber(val) {\n return typeof val === 'number' && !isNaN(val);\n }\n function isDate(val) {\n return val && val.getTime;\n }\n function toJSON(array) {\n var idx, length = array.length, result = new Array(length);\n for (idx = 0; idx < length; idx++) {\n result[idx] = array[idx].toJSON();\n }\n return result;\n }\n Query.normalizeGroup = normalizeGroup;\n Query.normalizeSort = normalizeSort;\n Query.process = function (data, options, inPlace) {\n options = options || {};\n var group = options.group;\n var customGroupSort = anyGroupDescriptorHasCompare(normalizeGroup(group || []));\n var query = new Query(data), groupDescriptorsWithoutCompare = normalizeGroupWithoutCompare(group || []), normalizedSort = normalizeSort(options.sort || []), sort = customGroupSort ? normalizedSort : groupDescriptorsWithoutCompare.concat(normalizedSort), groupDescriptorsWithoutSort, total, filterCallback = options.filterCallback, filter = options.filter, skip = options.skip, take = options.take;\n if (sort && inPlace) {\n query = query.sort(sort, undefined, undefined, inPlace);\n }\n if (filter) {\n query = query.filter(filter);\n if (filterCallback) {\n query = filterCallback(query);\n }\n total = query.toArray().length;\n }\n if (sort) {\n if (!inPlace) {\n query = query.sort(sort);\n }\n if (group) {\n data = query.toArray();\n }\n }\n if (customGroupSort) {\n query = query.group(group, data);\n if (skip !== undefined && take !== undefined) {\n query = new Query(flatGroups(query.toArray())).range(skip, take);\n groupDescriptorsWithoutSort = map(groupDescriptorsWithoutCompare, function (groupDescriptor) {\n return extend({}, groupDescriptor, { skipItemSorting: true });\n });\n query = query.group(groupDescriptorsWithoutSort, data);\n }\n } else {\n if (skip !== undefined && take !== undefined) {\n query = query.range(skip, take);\n }\n if (group) {\n query = query.group(group, data, options);\n }\n }\n return {\n total: total,\n data: query.toArray()\n };\n };\n var LocalTransport = Class.extend({\n init: function (options) {\n this.data = options.data;\n },\n read: function (options) {\n options.success(this.data);\n },\n update: function (options) {\n options.success(options.data);\n },\n create: function (options) {\n options.success(options.data);\n },\n destroy: function (options) {\n options.success(options.data);\n }\n });\n var RemoteTransport = Class.extend({\n init: function (options) {\n var that = this, parameterMap;\n options = that.options = extend({}, that.options, options);\n each(crud, function (index, type) {\n if (typeof options[type] === STRING) {\n options[type] = { url: options[type] };\n }\n });\n that.cache = options.cache ? Cache.create(options.cache) : {\n find: noop,\n add: noop\n };\n parameterMap = options.parameterMap;\n if (options.submit) {\n that.submit = options.submit;\n }\n if (isFunction(options.push)) {\n that.push = options.push;\n }\n if (!that.push) {\n that.push = identity;\n }\n that.parameterMap = isFunction(parameterMap) ? parameterMap : function (options) {\n var result = {};\n each(options, function (option, value) {\n if (option in parameterMap) {\n option = parameterMap[option];\n if (isPlainObject(option)) {\n value = option.value(value);\n option = option.key;\n }\n }\n result[option] = value;\n });\n return result;\n };\n },\n options: { parameterMap: identity },\n create: function (options) {\n return ajax(this.setup(options, CREATE));\n },\n read: function (options) {\n var that = this, success, error, result, cache = that.cache;\n options = that.setup(options, READ);\n success = options.success || noop;\n error = options.error || noop;\n result = cache.find(options.data);\n if (result !== undefined) {\n success(result);\n } else {\n options.success = function (result) {\n cache.add(options.data, result);\n success(result);\n };\n $.ajax(options);\n }\n },\n update: function (options) {\n return ajax(this.setup(options, UPDATE));\n },\n destroy: function (options) {\n return ajax(this.setup(options, DESTROY));\n },\n setup: function (options, type) {\n options = options || {};\n var that = this, parameters, operation = that.options[type], data = isFunction(operation.data) ? operation.data(options.data) : operation.data;\n options = extend(true, {}, operation, options);\n parameters = extend(true, {}, data, options.data);\n options.data = that.parameterMap(parameters, type);\n if (isFunction(options.url)) {\n options.url = options.url(parameters);\n }\n return options;\n }\n });\n var Cache = Class.extend({\n init: function () {\n this._store = {};\n },\n add: function (key, data) {\n if (key !== undefined) {\n this._store[stringify(key)] = data;\n }\n },\n find: function (key) {\n return this._store[stringify(key)];\n },\n clear: function () {\n this._store = {};\n },\n remove: function (key) {\n delete this._store[stringify(key)];\n }\n });\n Cache.create = function (options) {\n var store = {\n 'inmemory': function () {\n return new Cache();\n }\n };\n if (isPlainObject(options) && isFunction(options.find)) {\n return options;\n }\n if (options === true) {\n return new Cache();\n }\n return store[options]();\n };\n function serializeRecords(data, getters, modelInstance, originalFieldNames, fieldNames) {\n var record, getter, originalName, idx, setters = {}, length;\n for (idx = 0, length = data.length; idx < length; idx++) {\n record = data[idx];\n for (getter in getters) {\n originalName = fieldNames[getter];\n if (originalName && originalName !== getter) {\n if (!setters[originalName]) {\n setters[originalName] = kendo.setter(originalName);\n }\n setters[originalName](record, getters[getter](record));\n delete record[getter];\n }\n }\n }\n }\n function convertRecords(data, getters, modelInstance, originalFieldNames, fieldNames) {\n var record, getter, originalName, idx, length;\n for (idx = 0, length = data.length; idx < length; idx++) {\n record = data[idx];\n for (getter in getters) {\n record[getter] = modelInstance._parse(getter, getters[getter](record));\n originalName = fieldNames[getter];\n if (originalName && originalName !== getter) {\n delete record[originalName];\n }\n }\n }\n }\n function convertGroup(data, getters, modelInstance, originalFieldNames, fieldNames) {\n var record, idx, fieldName, length;\n for (idx = 0, length = data.length; idx < length; idx++) {\n record = data[idx];\n fieldName = originalFieldNames[record.field];\n if (fieldName && fieldName != record.field) {\n record.field = fieldName;\n }\n record.value = modelInstance._parse(record.field, record.value);\n if (record.items) {\n if (record.hasSubgroups) {\n convertGroup(record.items, getters, modelInstance, originalFieldNames, fieldNames);\n } else {\n convertRecords(record.items, getters, modelInstance, originalFieldNames, fieldNames);\n }\n }\n }\n }\n function wrapDataAccess(originalFunction, model, converter, getters, originalFieldNames, fieldNames) {\n return function (data) {\n data = originalFunction(data);\n return wrapDataAccessBase(model, converter, getters, originalFieldNames, fieldNames)(data);\n };\n }\n function wrapDataAccessBase(model, converter, getters, originalFieldNames, fieldNames) {\n return function (data) {\n if (data && !isEmptyObject(getters)) {\n if (toString.call(data) !== '[object Array]' && !(data instanceof ObservableArray)) {\n data = [data];\n }\n converter(data, getters, new model(), originalFieldNames, fieldNames);\n }\n return data || [];\n };\n }\n var DataReader = Class.extend({\n init: function (schema) {\n var that = this, member, get, model, base;\n schema = schema || {};\n for (member in schema) {\n get = schema[member];\n that[member] = typeof get === STRING ? getter(get) : get;\n }\n base = schema.modelBase || Model;\n if (isPlainObject(that.model)) {\n that.model = model = base.define(that.model);\n }\n var dataFunction = proxy(that.data, that);\n that._dataAccessFunction = dataFunction;\n if (that.model) {\n var groupsFunction = proxy(that.groups, that), serializeFunction = proxy(that.serialize, that), originalFieldNames = {}, getters = {}, serializeGetters = {}, fieldNames = {}, shouldSerialize = false, fieldName, name;\n model = that.model;\n if (model.fields) {\n each(model.fields, function (field, value) {\n var fromName;\n fieldName = field;\n if (isPlainObject(value) && value.field) {\n fieldName = value.field;\n } else if (typeof value === STRING) {\n fieldName = value;\n }\n if (isPlainObject(value) && value.from) {\n fromName = value.from;\n }\n shouldSerialize = shouldSerialize || fromName && fromName !== field || fieldName !== field;\n name = fromName || fieldName;\n getters[field] = name.indexOf('.') !== -1 ? getter(name, true) : getter(name);\n serializeGetters[field] = getter(field);\n originalFieldNames[fromName || fieldName] = field;\n fieldNames[field] = fromName || fieldName;\n });\n if (!schema.serialize && shouldSerialize) {\n that.serialize = wrapDataAccess(serializeFunction, model, serializeRecords, serializeGetters, originalFieldNames, fieldNames);\n }\n }\n that._dataAccessFunction = dataFunction;\n that._wrapDataAccessBase = wrapDataAccessBase(model, convertRecords, getters, originalFieldNames, fieldNames);\n that.data = wrapDataAccess(dataFunction, model, convertRecords, getters, originalFieldNames, fieldNames);\n that.groups = wrapDataAccess(groupsFunction, model, convertGroup, getters, originalFieldNames, fieldNames);\n }\n },\n errors: function (data) {\n return data ? data.errors : null;\n },\n parse: identity,\n data: identity,\n total: function (data) {\n return data.length;\n },\n groups: identity,\n aggregates: function () {\n return {};\n },\n serialize: function (data) {\n return data;\n }\n });\n function fillLastGroup(originalGroup, newGroup) {\n var currOriginal;\n var currentNew;\n if (newGroup.items && newGroup.items.length) {\n for (var i = 0; i < newGroup.items.length; i++) {\n currOriginal = originalGroup.items[i];\n currentNew = newGroup.items[i];\n if (currOriginal && currentNew) {\n if (currOriginal.hasSubgroups) {\n fillLastGroup(currOriginal, currentNew);\n } else if (currOriginal.field && currOriginal.value == currentNew.value) {\n currOriginal.items.push.apply(currOriginal.items, currentNew.items);\n } else {\n originalGroup.items.push.apply(originalGroup.items, [currentNew]);\n }\n } else if (currentNew) {\n originalGroup.items.push.apply(originalGroup.items, [currentNew]);\n }\n }\n }\n }\n function mergeGroups(target, dest, skip, take) {\n var group, idx = 0, items;\n while (dest.length && take) {\n group = dest[idx];\n items = group.items;\n var length = items.length;\n if (target && target.field === group.field && target.value === group.value) {\n if (target.hasSubgroups && target.items.length) {\n mergeGroups(target.items[target.items.length - 1], group.items, skip, take);\n } else {\n items = items.slice(skip, skip + take);\n target.items = target.items.concat(items);\n }\n dest.splice(idx--, 1);\n } else if (group.hasSubgroups && items.length) {\n mergeGroups(group, items, skip, take);\n if (!group.items.length) {\n dest.splice(idx--, 1);\n }\n } else {\n items = items.slice(skip, skip + take);\n group.items = items;\n if (!group.items.length) {\n dest.splice(idx--, 1);\n }\n }\n if (items.length === 0) {\n skip -= length;\n } else {\n skip = 0;\n take -= items.length;\n }\n if (++idx >= dest.length) {\n break;\n }\n }\n if (idx < dest.length) {\n dest.splice(idx, dest.length - idx);\n }\n }\n function flatGroups(groups, indexFunction) {\n var result = [];\n var groupsLength = (groups || []).length;\n var group;\n var items;\n var indexFn = isFunction(indexFunction) ? indexFunction : function (array, index) {\n return array[index];\n };\n for (var groupIndex = 0; groupIndex < groupsLength; groupIndex++) {\n group = indexFn(groups, groupIndex);\n if (group.hasSubgroups) {\n result = result.concat(flatGroups(group.items));\n } else {\n items = group.items;\n for (var itemIndex = 0; itemIndex < items.length; itemIndex++) {\n result.push(indexFn(items, itemIndex));\n }\n }\n }\n return result;\n }\n function flattenGroups(data) {\n var idx, result = [], length, items, itemIndex;\n for (idx = 0, length = data.length; idx < length; idx++) {\n var group = data.at(idx);\n if (group.items) {\n if (group.hasSubgroups) {\n result = result.concat(flattenGroups(group.items));\n } else {\n items = group.items;\n for (itemIndex = 0; itemIndex < items.length; itemIndex++) {\n result.push(items.at(itemIndex));\n }\n }\n }\n }\n return result;\n }\n function wrapGroupItems(data, model) {\n var idx, length, group;\n if (model) {\n for (idx = 0, length = data.length; idx < length; idx++) {\n group = data.at(idx);\n if (group.items) {\n if (group.hasSubgroups) {\n wrapGroupItems(group.items, model);\n } else {\n group.items = new LazyObservableArray(group.items, model, group.items._events);\n }\n }\n }\n }\n }\n function eachGroupItems(data, func) {\n for (var idx = 0; idx < data.length; idx++) {\n if (data[idx].hasSubgroups) {\n if (eachGroupItems(data[idx].items, func)) {\n return true;\n }\n } else if (func(data[idx].items, data[idx])) {\n return true;\n }\n }\n }\n function replaceInRanges(ranges, data, item, observable) {\n for (var idx = 0; idx < ranges.length; idx++) {\n if (ranges[idx].data === data) {\n break;\n }\n if (replaceInRange(ranges[idx].data, item, observable)) {\n break;\n }\n }\n }\n function replaceInRange(items, item, observable) {\n for (var idx = 0, length = items.length; idx < length; idx++) {\n if (items[idx] && items[idx].hasSubgroups) {\n return replaceInRange(items[idx].items, item, observable);\n } else if (items[idx] === item || items[idx] === observable) {\n items[idx] = observable;\n return true;\n }\n }\n }\n function replaceWithObservable(view, data, ranges, type, serverGrouping) {\n for (var viewIndex = 0, length = view.length; viewIndex < length; viewIndex++) {\n var item = view[viewIndex];\n if (!item || item instanceof type) {\n continue;\n }\n if (item.hasSubgroups !== undefined && !serverGrouping) {\n replaceWithObservable(item.items, data, ranges, type, serverGrouping);\n } else {\n for (var idx = 0; idx < data.length; idx++) {\n if (data[idx] === item) {\n view[viewIndex] = data.at(idx);\n replaceInRanges(ranges, data, item, view[viewIndex]);\n break;\n }\n }\n }\n }\n }\n function removeModel(data, model) {\n if (!data) {\n return;\n }\n var length = data.length;\n var dataItem;\n var idx;\n for (idx = 0; idx < length; idx++) {\n dataItem = data[idx];\n if (dataItem.uid && dataItem.uid == model.uid) {\n data.splice(idx, 1);\n return dataItem;\n }\n }\n }\n function indexOfPristineModel(data, model) {\n if (model) {\n return indexOf(data, function (item) {\n return item.uid && item.uid == model.uid || item[model.idField] === model.id && model.id !== model._defaultId;\n });\n }\n return -1;\n }\n function indexOfModel(data, model) {\n if (model) {\n return indexOf(data, function (item) {\n return item.uid == model.uid;\n });\n }\n return -1;\n }\n function indexOf(data, comparer) {\n var idx, length;\n if (!data) {\n return;\n }\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (comparer(data[idx])) {\n return idx;\n }\n }\n return -1;\n }\n function fieldNameFromModel(fields, name) {\n if (fields && !isEmptyObject(fields)) {\n var descriptor = fields[name];\n var fieldName;\n if (isPlainObject(descriptor)) {\n fieldName = descriptor.from || descriptor.field || name;\n } else {\n fieldName = fields[name] || name;\n }\n if (isFunction(fieldName)) {\n return name;\n }\n return fieldName;\n }\n return name;\n }\n function convertFilterDescriptorsField(descriptor, model) {\n var idx, length, target = {};\n for (var field in descriptor) {\n if (field !== 'filters') {\n target[field] = descriptor[field];\n }\n }\n if (descriptor.filters) {\n target.filters = [];\n for (idx = 0, length = descriptor.filters.length; idx < length; idx++) {\n target.filters[idx] = convertFilterDescriptorsField(descriptor.filters[idx], model);\n }\n } else {\n target.field = fieldNameFromModel(model.fields, target.field);\n }\n return target;\n }\n function convertDescriptorsField(descriptors, model) {\n var idx, length, result = [], target, descriptor;\n for (idx = 0, length = descriptors.length; idx < length; idx++) {\n target = {};\n descriptor = descriptors[idx];\n for (var field in descriptor) {\n target[field] = descriptor[field];\n }\n target.field = fieldNameFromModel(model.fields, target.field);\n if (target.aggregates && isArray(target.aggregates)) {\n target.aggregates = convertDescriptorsField(target.aggregates, model);\n }\n result.push(target);\n }\n return result;\n }\n var DataSource = Observable.extend({\n init: function (options) {\n var that = this, model, data;\n if (options) {\n data = options.data;\n }\n options = that.options = extend({}, that.options, options);\n that._map = {};\n that._prefetch = {};\n that._data = [];\n that._pristineData = [];\n that._ranges = [];\n that._view = [];\n that._pristineTotal = 0;\n that._destroyed = [];\n that._pageSize = options.pageSize;\n that._page = options.page || (options.pageSize ? 1 : undefined);\n that._sort = normalizeSort(options.sort);\n that._sortFields = sortFields(options.sort);\n that._filter = normalizeFilter(options.filter);\n that._group = normalizeGroup(options.group);\n that._aggregate = options.aggregate;\n that._total = options.total;\n that._groupPaging = options.groupPaging;\n if (that._groupPaging) {\n that._groupsState = {};\n }\n that._shouldDetachObservableParents = true;\n Observable.fn.init.call(that);\n that.transport = Transport.create(options, data, that);\n if (isFunction(that.transport.push)) {\n that.transport.push({\n pushCreate: proxy(that._pushCreate, that),\n pushUpdate: proxy(that._pushUpdate, that),\n pushDestroy: proxy(that._pushDestroy, that)\n });\n }\n if (options.offlineStorage != null) {\n if (typeof options.offlineStorage == 'string') {\n var key = options.offlineStorage;\n that._storage = {\n getItem: function () {\n return JSON.parse(localStorage.getItem(key));\n },\n setItem: function (item) {\n localStorage.setItem(key, stringify(that.reader.serialize(item)));\n }\n };\n } else {\n that._storage = options.offlineStorage;\n }\n }\n that.reader = new kendo.data.readers[options.schema.type || 'json'](options.schema);\n model = that.reader.model || {};\n that._detachObservableParents();\n that._data = that._observe(that._data);\n that._online = true;\n that.bind([\n 'push',\n ERROR,\n CHANGE,\n REQUESTSTART,\n SYNC,\n REQUESTEND,\n PROGRESS\n ], options);\n },\n options: {\n data: null,\n schema: { modelBase: Model },\n offlineStorage: null,\n serverSorting: false,\n serverPaging: false,\n serverFiltering: false,\n serverGrouping: false,\n serverAggregates: false,\n batch: false,\n inPlaceSort: false\n },\n clone: function () {\n return this;\n },\n online: function (value) {\n if (value !== undefined) {\n if (this._online != value) {\n this._online = value;\n if (value) {\n return this.sync();\n }\n }\n return $.Deferred().resolve().promise();\n } else {\n return this._online;\n }\n },\n offlineData: function (state) {\n if (this.options.offlineStorage == null) {\n return null;\n }\n if (state !== undefined) {\n return this._storage.setItem(state);\n }\n return this._storage.getItem() || [];\n },\n _isServerGrouped: function () {\n var group = this.group() || [];\n return this.options.serverGrouping && group.length;\n },\n _isServerGroupPaged: function () {\n return this._isServerGrouped() && this._groupPaging;\n },\n _isGroupPaged: function () {\n var group = this._group || [];\n return this._groupPaging && group.length;\n },\n _pushCreate: function (result) {\n this._push(result, 'pushCreate');\n },\n _pushUpdate: function (result) {\n this._push(result, 'pushUpdate');\n },\n _pushDestroy: function (result) {\n this._push(result, 'pushDestroy');\n },\n _push: function (result, operation) {\n var data = this._readData(result);\n if (!data) {\n data = result;\n }\n this[operation](data);\n },\n _flatData: function (data, skip) {\n if (data) {\n if (this._isServerGrouped()) {\n return flattenGroups(data);\n }\n if (!skip) {\n for (var idx = 0; idx < data.length; idx++) {\n data.at(idx);\n }\n }\n }\n return data;\n },\n parent: noop,\n get: function (id) {\n var idx, length, data = this._flatData(this._data, this.options.useRanges);\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (data[idx].id == id) {\n return data[idx];\n }\n }\n },\n getByUid: function (id) {\n return this._getByUid(id, this._data);\n },\n _getByUid: function (id, dataItems) {\n var idx, length, data = this._flatData(dataItems, this.options.useRanges);\n if (!data) {\n return;\n }\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (data[idx].uid == id) {\n return data[idx];\n }\n }\n },\n indexOf: function (model) {\n return indexOfModel(this._data, model);\n },\n at: function (index) {\n return this._data.at(index);\n },\n data: function (value) {\n var that = this;\n if (value !== undefined) {\n that._detachObservableParents();\n that._data = this._observe(value);\n that._pristineData = value.slice(0);\n that._storeData();\n that._ranges = [];\n that.trigger('reset');\n that._addRange(that._data);\n that._total = that._data.length;\n that._pristineTotal = that._total;\n that._process(that._data);\n } else {\n if (that._data) {\n for (var idx = 0; idx < that._data.length; idx++) {\n that._data.at(idx);\n }\n }\n return that._data;\n }\n },\n view: function (value) {\n if (value === undefined) {\n return this._view;\n } else {\n this._view = this._observeView(value);\n }\n },\n _observeView: function (data) {\n var that = this;\n replaceWithObservable(data, that._data, that._ranges, that.reader.model || ObservableObject, that._isServerGrouped());\n var view = new LazyObservableArray(data, that.reader.model);\n view.parent = function () {\n return that.parent();\n };\n return view;\n },\n flatView: function () {\n var groups = this.group() || [];\n if (groups.length) {\n return flattenGroups(this._view);\n } else {\n return this._view;\n }\n },\n add: function (model) {\n return this.insert(this._data.length, model);\n },\n _createNewModel: function (model) {\n if (this.reader.model) {\n return new this.reader.model(model);\n }\n if (model instanceof ObservableObject) {\n return model;\n }\n return new ObservableObject(model);\n },\n insert: function (index, model) {\n if (!model) {\n model = index;\n index = 0;\n }\n if (!(model instanceof Model)) {\n model = this._createNewModel(model);\n }\n if (this._isServerGrouped()) {\n this._data.splice(index, 0, this._wrapInEmptyGroup(model));\n } else {\n this._data.splice(index, 0, model);\n }\n this._insertModelInRange(index, model);\n return model;\n },\n pushInsert: function (index, items) {\n var that = this;\n var rangeSpan = that._getCurrentRangeSpan();\n if (!items) {\n items = index;\n index = 0;\n }\n if (!isArray(items)) {\n items = [items];\n }\n var pushed = [];\n var autoSync = this.options.autoSync;\n this.options.autoSync = false;\n try {\n for (var idx = 0; idx < items.length; idx++) {\n var item = items[idx];\n var result = this.insert(index, item);\n pushed.push(result);\n var pristine = result.toJSON();\n if (this._isServerGrouped()) {\n pristine = this._wrapInEmptyGroup(pristine);\n }\n this._pristineData.push(pristine);\n if (rangeSpan && rangeSpan.length) {\n $(rangeSpan).last()[0].pristineData.push(pristine);\n }\n index++;\n }\n } finally {\n this.options.autoSync = autoSync;\n }\n if (pushed.length) {\n this.trigger('push', {\n type: 'create',\n items: pushed\n });\n }\n },\n pushCreate: function (items) {\n this.pushInsert(this._data.length, items);\n },\n pushUpdate: function (items) {\n if (!isArray(items)) {\n items = [items];\n }\n var pushed = [];\n for (var idx = 0; idx < items.length; idx++) {\n var item = items[idx];\n var model = this._createNewModel(item);\n var target = this.get(model.id);\n if (target) {\n pushed.push(target);\n target.accept(item);\n target.trigger(CHANGE);\n this._updatePristineForModel(target, item);\n } else {\n this.pushCreate(item);\n }\n }\n if (pushed.length) {\n this.trigger('push', {\n type: 'update',\n items: pushed\n });\n }\n },\n pushDestroy: function (items) {\n var pushed = this._removeItems(items);\n if (pushed.length) {\n this.trigger('push', {\n type: 'destroy',\n items: pushed\n });\n }\n },\n _removeItems: function (items, removePristine) {\n if (!isArray(items)) {\n items = [items];\n }\n var shouldRemovePristine = typeof removePristine !== 'undefined' ? removePristine : true;\n var destroyed = [];\n var autoSync = this.options.autoSync;\n this.options.autoSync = false;\n try {\n for (var idx = 0; idx < items.length; idx++) {\n var item = items[idx];\n var model = this._createNewModel(item);\n var found = false;\n this._eachItem(this._data, function (items) {\n for (var idx = 0; idx < items.length; idx++) {\n var item = items.at(idx);\n if (item.id === model.id) {\n destroyed.push(item);\n items.splice(idx, 1);\n found = true;\n break;\n }\n }\n });\n if (found && shouldRemovePristine) {\n this._removePristineForModel(model);\n this._destroyed.pop();\n }\n }\n } finally {\n this.options.autoSync = autoSync;\n }\n return destroyed;\n },\n remove: function (model) {\n var result, that = this, hasGroups = that._isServerGrouped();\n this._eachItem(that._data, function (items) {\n result = removeModel(items, model);\n if (result && hasGroups) {\n if (!result.isNew || !result.isNew()) {\n that._destroyed.push(result);\n }\n return true;\n }\n });\n this._removeModelFromRanges(model);\n return model;\n },\n destroyed: function () {\n return this._destroyed;\n },\n created: function () {\n var idx, length, result = [], data = this._flatData(this._data, this.options.useRanges);\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (data[idx].isNew && data[idx].isNew()) {\n result.push(data[idx]);\n }\n }\n return result;\n },\n updated: function () {\n var idx, length, result = [], data = this._flatData(this._data, this.options.useRanges);\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (data[idx].isNew && !data[idx].isNew() && data[idx].dirty) {\n result.push(data[idx]);\n }\n }\n return result;\n },\n sync: function () {\n var that = this, created = [], updated = [], destroyed = that._destroyed;\n var promise = $.Deferred().resolve().promise();\n if (that.online()) {\n if (!that.reader.model) {\n return promise;\n }\n created = that.created();\n updated = that.updated();\n var promises = [];\n if (that.options.batch && that.transport.submit) {\n promises = that._sendSubmit(created, updated, destroyed);\n } else {\n promises.push.apply(promises, that._send('create', created));\n promises.push.apply(promises, that._send('update', updated));\n promises.push.apply(promises, that._send('destroy', destroyed));\n }\n promise = $.when.apply(null, promises).then(function () {\n var idx, length;\n for (idx = 0, length = arguments.length; idx < length; idx++) {\n if (arguments[idx]) {\n that._accept(arguments[idx]);\n }\n }\n that._storeData(true);\n that._syncEnd();\n that._change({ action: 'sync' });\n that.trigger(SYNC);\n if (that._isServerGroupPaged()) {\n that.read();\n }\n });\n } else {\n that._storeData(true);\n that._syncEnd();\n that._change({ action: 'sync' });\n }\n return promise;\n },\n _syncEnd: noop,\n cancelChanges: function (model) {\n var that = this;\n if (model instanceof kendo.data.Model) {\n that._cancelModel(model);\n } else {\n that._destroyed = [];\n that._detachObservableParents();\n that._data = that._observe(that._pristineData);\n if (that.options.serverPaging) {\n that._total = that._pristineTotal;\n }\n that._ranges = [];\n that._addRange(that._data, 0);\n that._changesCanceled();\n that._change();\n that._markOfflineUpdatesAsDirty();\n if (that._isServerGrouped()) {\n that.read();\n }\n }\n },\n _changesCanceled: noop,\n _markOfflineUpdatesAsDirty: function () {\n var that = this;\n if (that.options.offlineStorage != null) {\n that._eachItem(that._data, function (items) {\n for (var idx = 0; idx < items.length; idx++) {\n var item = items.at(idx);\n if (item.__state__ == 'update' || item.__state__ == 'create') {\n item.dirty = true;\n }\n }\n });\n }\n },\n hasChanges: function () {\n var idx, length, data = this._flatData(this._data, this.options.useRanges);\n if (this._destroyed.length) {\n return true;\n }\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (data[idx].isNew && data[idx].isNew() || data[idx].dirty) {\n return true;\n }\n }\n return false;\n },\n _accept: function (result) {\n var that = this, models = result.models, response = result.response, idx = 0, serverGroup = that._isServerGrouped(), pristine = that._pristineData, type = result.type, length;\n that.trigger(REQUESTEND, {\n response: response,\n type: type\n });\n if (response && !isEmptyObject(response)) {\n response = that.reader.parse(response);\n if (that._handleCustomErrors(response)) {\n return;\n }\n response = that.reader.data(response);\n if (!isArray(response)) {\n response = [response];\n }\n } else {\n response = $.map(models, function (model) {\n return model.toJSON();\n });\n }\n if (type === 'destroy') {\n that._destroyed = [];\n }\n for (idx = 0, length = models.length; idx < length; idx++) {\n if (type !== 'destroy') {\n models[idx].accept(response[idx]);\n if (type === 'create') {\n pristine.push(serverGroup ? that._wrapInEmptyGroup(models[idx].toJSON()) : response[idx]);\n } else if (type === 'update') {\n that._updatePristineForModel(models[idx], response[idx]);\n }\n } else {\n that._removePristineForModel(models[idx]);\n }\n }\n },\n _updatePristineForModel: function (model, values) {\n this._executeOnPristineForModel(model, function (index, items) {\n kendo.deepExtend(items[index], values);\n });\n },\n _executeOnPristineForModel: function (model, callback) {\n this._eachPristineItem(function (items) {\n var index = indexOfPristineModel(items, model);\n if (index > -1) {\n callback(index, items);\n return true;\n }\n });\n },\n _removePristineForModel: function (model) {\n this._executeOnPristineForModel(model, function (index, items) {\n items.splice(index, 1);\n });\n },\n _readData: function (data) {\n var read = !this._isServerGrouped() ? this.reader.data : this.reader.groups;\n return read.call(this.reader, data);\n },\n _eachPristineItem: function (callback) {\n var that = this;\n var options = that.options;\n var rangeSpan = that._getCurrentRangeSpan();\n that._eachItem(that._pristineData, callback);\n if (options.serverPaging && options.useRanges) {\n each(rangeSpan, function (i, range) {\n that._eachItem(range.pristineData, callback);\n });\n }\n },\n _eachItem: function (data, callback) {\n if (data && data.length) {\n if (this._isServerGrouped()) {\n eachGroupItems(data, callback);\n } else {\n callback(data);\n }\n }\n },\n _pristineForModel: function (model) {\n var pristine, idx, callback = function (items) {\n idx = indexOfPristineModel(items, model);\n if (idx > -1) {\n pristine = items[idx];\n return true;\n }\n };\n this._eachPristineItem(callback);\n return pristine;\n },\n _cancelModel: function (model) {\n var that = this;\n var pristine = this._pristineForModel(model);\n this._eachItem(this._data, function (items) {\n var idx = indexOfModel(items, model);\n if (idx >= 0) {\n if (pristine && (!model.isNew() || pristine.__state__)) {\n items[idx].accept(pristine);\n if (pristine.__state__ == 'update') {\n items[idx].dirty = true;\n }\n } else {\n that._modelCanceled(model);\n items.splice(idx, 1);\n that._removeModelFromRanges(model);\n }\n }\n });\n },\n _modelCanceled: noop,\n _submit: function (promises, data) {\n var that = this;\n that.trigger(REQUESTSTART, { type: 'submit' });\n that.trigger(PROGRESS);\n that.transport.submit(extend({\n success: function (response, type) {\n var promise = $.grep(promises, function (x) {\n return x.type == type;\n })[0];\n if (promise) {\n promise.resolve({\n response: response,\n models: promise.models,\n type: type\n });\n }\n },\n error: function (response, status, error) {\n for (var idx = 0; idx < promises.length; idx++) {\n promises[idx].reject(response);\n }\n that.error(response, status, error);\n }\n }, data));\n },\n _sendSubmit: function (created, updated, destroyed) {\n var that = this, promises = [];\n if (that.options.batch) {\n if (created.length) {\n promises.push($.Deferred(function (deferred) {\n deferred.type = 'create';\n deferred.models = created;\n }));\n }\n if (updated.length) {\n promises.push($.Deferred(function (deferred) {\n deferred.type = 'update';\n deferred.models = updated;\n }));\n }\n if (destroyed.length) {\n promises.push($.Deferred(function (deferred) {\n deferred.type = 'destroy';\n deferred.models = destroyed;\n }));\n }\n that._submit(promises, {\n data: {\n created: that.reader.serialize(toJSON(created)),\n updated: that.reader.serialize(toJSON(updated)),\n destroyed: that.reader.serialize(toJSON(destroyed))\n }\n });\n }\n return promises;\n },\n _promise: function (data, models, type) {\n var that = this;\n return $.Deferred(function (deferred) {\n that.trigger(REQUESTSTART, { type: type });\n that.trigger(PROGRESS);\n that.transport[type].call(that.transport, extend({\n success: function (response) {\n deferred.resolve({\n response: response,\n models: models,\n type: type\n });\n },\n error: function (response, status, error) {\n deferred.reject(response);\n that.error(response, status, error);\n }\n }, data));\n }).promise();\n },\n _send: function (method, data) {\n var that = this, idx, length, promises = [], converted = that.reader.serialize(toJSON(data));\n if (that.options.batch) {\n if (data.length) {\n promises.push(that._promise({ data: { models: converted } }, data, method));\n }\n } else {\n for (idx = 0, length = data.length; idx < length; idx++) {\n promises.push(that._promise({ data: converted[idx] }, [data[idx]], method));\n }\n }\n return promises;\n },\n read: function (data) {\n var that = this, params = that._params(data);\n var deferred = $.Deferred();\n that._queueRequest(params, function () {\n var isPrevented = that.trigger(REQUESTSTART, { type: 'read' });\n if (!isPrevented) {\n that.trigger(PROGRESS);\n that._ranges = [];\n that.trigger('reset');\n if (that.online()) {\n that.transport.read({\n data: params,\n success: function (data) {\n that._ranges = [];\n that.success(data, params);\n deferred.resolve();\n },\n error: function () {\n var args = slice.call(arguments);\n that.error.apply(that, args);\n deferred.reject.apply(deferred, args);\n }\n });\n } else if (that.options.offlineStorage != null) {\n that.success(that.offlineData(), params);\n deferred.resolve();\n }\n } else {\n that._dequeueRequest();\n deferred.resolve(isPrevented);\n }\n });\n return deferred.promise();\n },\n _readAggregates: function (data) {\n return this.reader.aggregates(data);\n },\n success: function (data) {\n var that = this, options = that.options, items, replaceSubset;\n that.trigger(REQUESTEND, {\n response: data,\n type: 'read'\n });\n if (that.online()) {\n data = that.reader.parse(data);\n if (that._handleCustomErrors(data)) {\n that._dequeueRequest();\n return;\n }\n that._total = that.reader.total(data);\n if (that._isServerGroupPaged()) {\n that._serverGroupsTotal = that._total;\n }\n if (that._pageSize > that._total) {\n that._pageSize = that._total;\n if (that.options.pageSize && that.options.pageSize > that._pageSize) {\n that._pageSize = that.options.pageSize;\n }\n }\n if (that._aggregate && options.serverAggregates) {\n that._aggregateResult = that._readAggregates(data);\n }\n data = that._readData(data);\n that._destroyed = [];\n } else {\n data = that._readData(data);\n items = [];\n var itemIds = {};\n var model = that.reader.model;\n var idField = model ? model.idField : 'id';\n var idx;\n for (idx = 0; idx < this._destroyed.length; idx++) {\n var id = this._destroyed[idx][idField];\n itemIds[id] = id;\n }\n for (idx = 0; idx < data.length; idx++) {\n var item = data[idx];\n var state = item.__state__;\n if (state == 'destroy') {\n if (!itemIds[item[idField]]) {\n this._destroyed.push(this._createNewModel(item));\n }\n } else {\n items.push(item);\n }\n }\n data = items;\n that._total = data.length;\n }\n that._pristineTotal = that._total;\n replaceSubset = that._skip && that._data.length && that._skip < that._data.length;\n if (that.options.endless) {\n if (replaceSubset) {\n that._pristineData.splice(that._skip, that._pristineData.length);\n }\n items = data.slice(0);\n for (var j = 0; j < items.length; j++) {\n that._pristineData.push(items[j]);\n }\n } else {\n that._pristineData = data.slice(0);\n }\n that._detachObservableParents();\n if (that.options.endless) {\n that._data.unbind(CHANGE, that._changeHandler);\n if (that._isServerGrouped() && that._data[that._data.length - 1].value === data[0].value) {\n fillLastGroup(that._data[that._data.length - 1], data[0]);\n data.shift();\n }\n data = that._observe(data);\n if (replaceSubset) {\n that._data.splice(that._skip, that._data.length);\n }\n for (var i = 0; i < data.length; i++) {\n that._data.push(data[i]);\n }\n that._data.bind(CHANGE, that._changeHandler);\n } else {\n that._data = that._observe(data);\n }\n that._markOfflineUpdatesAsDirty();\n that._storeData();\n that._addRange(that._data);\n that._process(that._data);\n that._dequeueRequest();\n },\n _detachObservableParents: function () {\n if (this._data && this._shouldDetachObservableParents) {\n for (var idx = 0; idx < this._data.length; idx++) {\n if (this._data[idx].parent) {\n this._data[idx].parent = noop;\n }\n }\n }\n },\n _storeData: function (updatePristine) {\n var serverGrouping = this._isServerGrouped();\n var model = this.reader.model;\n function items(data) {\n var state = [];\n for (var idx = 0; idx < data.length; idx++) {\n var dataItem = data.at(idx);\n var item = dataItem.toJSON();\n if (serverGrouping && dataItem.items) {\n item.items = items(dataItem.items);\n } else {\n item.uid = dataItem.uid;\n if (model) {\n if (dataItem.isNew()) {\n item.__state__ = 'create';\n } else if (dataItem.dirty) {\n item.__state__ = 'update';\n }\n }\n }\n state.push(item);\n }\n return state;\n }\n if (this.options.offlineStorage != null) {\n var state = items(this._data);\n var destroyed = [];\n for (var idx = 0; idx < this._destroyed.length; idx++) {\n var item = this._destroyed[idx].toJSON();\n item.__state__ = 'destroy';\n destroyed.push(item);\n }\n this.offlineData(state.concat(destroyed));\n if (updatePristine) {\n this._pristineData = this.reader.reader ? this.reader.reader._wrapDataAccessBase(state) : this.reader._wrapDataAccessBase(state);\n }\n }\n },\n _addRange: function (data, skip) {\n var that = this, start = typeof skip !== 'undefined' ? skip : that._skip || 0, end, range = {\n data: data,\n pristineData: data.toJSON(),\n timestamp: that._timeStamp()\n };\n if (this._isGroupPaged()) {\n end = start + data.length;\n range.outerStart = start;\n range.outerEnd = end;\n } else {\n end = start + that._flatData(data, true).length;\n }\n range.start = start;\n range.end = end;\n that._ranges.push(range);\n that._sortRanges();\n if (that._isGroupPaged()) {\n if (!that._groupsFlat) {\n that._groupsFlat = [];\n }\n that._appendToGroupsFlat(range.data);\n that._updateOuterRangesLength();\n }\n },\n _appendToGroupsFlat: function (data) {\n var length = data.length;\n for (var i = 0; i < length; i++) {\n this._groupsFlat.push(data[i]);\n }\n },\n _getGroupByUid: function (uid) {\n var length = this._groupsFlat.length;\n var group;\n for (var i = 0; i < length; i++) {\n group = this._groupsFlat[i];\n if (group.uid === uid) {\n return group;\n }\n }\n },\n _sortRanges: function () {\n this._ranges.sort(function (x, y) {\n return x.start - y.start;\n });\n },\n error: function (xhr, status, errorThrown) {\n this._dequeueRequest();\n this.trigger(REQUESTEND, {});\n this.trigger(ERROR, {\n xhr: xhr,\n status: status,\n errorThrown: errorThrown\n });\n },\n _params: function (data) {\n var that = this, options = extend({\n take: that.take(),\n skip: that.skip(),\n page: that.page(),\n pageSize: that.pageSize(),\n sort: that._sort,\n filter: that._filter,\n group: that._group,\n aggregate: that._aggregate,\n groupPaging: !!that._groupPaging\n }, data);\n if (!that.options.serverPaging) {\n delete options.take;\n delete options.skip;\n delete options.page;\n delete options.pageSize;\n }\n if (!that.options.serverGrouping) {\n delete options.group;\n } else if (that.reader.model && options.group) {\n options.group = convertDescriptorsField(options.group, that.reader.model);\n }\n if (!that.options.serverFiltering) {\n delete options.filter;\n } else if (that.reader.model && options.filter) {\n options.filter = convertFilterDescriptorsField(options.filter, that.reader.model);\n }\n if (!that.options.serverSorting) {\n delete options.sort;\n } else if (that.reader.model && options.sort) {\n options.sort = convertDescriptorsField(options.sort, that.reader.model);\n }\n if (!that.options.serverAggregates) {\n delete options.aggregate;\n } else if (that.reader.model && options.aggregate) {\n options.aggregate = convertDescriptorsField(options.aggregate, that.reader.model);\n }\n if (!that.options.groupPaging) {\n delete options.groupPaging;\n }\n return options;\n },\n _queueRequest: function (options, callback) {\n var that = this;\n if (!that._requestInProgress) {\n that._requestInProgress = true;\n that._pending = undefined;\n callback();\n } else {\n that._pending = {\n callback: proxy(callback, that),\n options: options\n };\n }\n },\n _dequeueRequest: function () {\n var that = this;\n that._requestInProgress = false;\n if (that._pending) {\n that._queueRequest(that._pending.options, that._pending.callback);\n }\n },\n _handleCustomErrors: function (response) {\n if (this.reader.errors) {\n var errors = this.reader.errors(response);\n if (errors) {\n this.trigger(ERROR, {\n xhr: null,\n status: 'customerror',\n errorThrown: 'custom error',\n errors: errors\n });\n return true;\n }\n }\n return false;\n },\n _shouldWrap: function (data) {\n var model = this.reader.model;\n if (model && data.length) {\n return !(data[0] instanceof model);\n }\n return false;\n },\n _observe: function (data) {\n var that = this, model = that.reader.model;\n that._shouldDetachObservableParents = true;\n if (data instanceof ObservableArray) {\n that._shouldDetachObservableParents = false;\n if (that._shouldWrap(data)) {\n data.type = that.reader.model;\n data.wrapAll(data, data);\n }\n } else {\n var arrayType = that.pageSize() && !that.options.serverPaging ? LazyObservableArray : ObservableArray;\n data = new arrayType(data, that.reader.model);\n data.parent = function () {\n return that.parent();\n };\n }\n if (that._isServerGrouped()) {\n wrapGroupItems(data, model);\n }\n if (that._changeHandler && that._data && that._data instanceof ObservableArray && !(that.options.useRanges && that.options.serverPaging)) {\n that._data.unbind(CHANGE, that._changeHandler);\n } else {\n that._changeHandler = proxy(that._change, that);\n }\n return data.bind(CHANGE, that._changeHandler);\n },\n _updateTotalForAction: function (action, items) {\n var that = this;\n var total = parseInt(that._total, 10);\n if (!isNumber(that._total)) {\n total = parseInt(that._pristineTotal, 10);\n }\n if (action === 'add') {\n total += items.length;\n } else if (action === 'remove') {\n total -= items.length;\n } else if (action !== 'itemchange' && action !== 'sync' && !that.options.serverPaging) {\n total = that._pristineTotal;\n } else if (action === 'sync') {\n total = that._pristineTotal = parseInt(that._total, 10);\n }\n that._total = total;\n },\n _change: function (e) {\n var that = this, idx, length, action = e ? e.action : '';\n if (action === 'remove') {\n for (idx = 0, length = e.items.length; idx < length; idx++) {\n if (!e.items[idx].isNew || !e.items[idx].isNew()) {\n that._destroyed.push(e.items[idx]);\n }\n }\n }\n if (that.options.autoSync && (action === 'add' || action === 'remove' || action === 'itemchange')) {\n var handler = function (args) {\n if (args.action === 'sync') {\n that.unbind('change', handler);\n that._updateTotalForAction(action, e.items);\n }\n };\n that.first('change', handler);\n that.sync();\n } else {\n that._updateTotalForAction(action, e ? e.items : []);\n that._process(that._data, e);\n }\n },\n _calculateAggregates: function (data, options) {\n options = options || {};\n var query = new Query(data), aggregates = options.aggregate, filter = options.filter;\n if (filter) {\n query = query.filter(filter);\n }\n return query.aggregate(aggregates);\n },\n _process: function (data, e) {\n var that = this, options = {}, result;\n if (that.options.serverPaging !== true) {\n options.skip = that._skip;\n options.take = that._take || that._pageSize;\n if (options.skip === undefined && that._page !== undefined && that._pageSize !== undefined) {\n options.skip = (that._page - 1) * that._pageSize;\n }\n if (that.options.useRanges) {\n options.skip = that.currentRangeStart();\n }\n }\n if (that.options.serverSorting !== true) {\n options.sort = that._sort;\n }\n if (that.options.serverFiltering !== true) {\n options.filter = that._filter;\n }\n if (that.options.serverGrouping !== true) {\n options.group = that._group;\n }\n if (that.options.serverAggregates !== true) {\n options.aggregate = that._aggregate;\n }\n if (that.options.serverGrouping) {\n that._clearEmptyGroups(data);\n }\n options.groupPaging = that._groupPaging;\n if (that._isGroupPaged() && e && (e.action === 'page' || e.action === 'expandGroup' || e.action === 'collapseGroup')) {\n result = that._queryProcess(data, { aggregate: that._aggregate });\n } else {\n result = that._queryProcess(data, options);\n }\n if (that.options.serverAggregates !== true) {\n that._aggregateResult = that._calculateAggregates(result.dataToAggregate || data, options);\n }\n that._setView(result, options, e);\n that._setFilterTotal(result.total, false);\n e = e || {};\n e.items = e.items || that._view;\n that.trigger(CHANGE, e);\n },\n _setView: function (result, options, e) {\n var that = this;\n if (that._isGroupPaged() && !that._isServerGrouped()) {\n if (e && (e.action === 'page' || e.action === 'expandGroup' || e.action === 'collapseGroup')) {\n that.view(result.data);\n that._updateOuterRangesLength();\n } else {\n that._ranges = [];\n var query = new Query(result.data);\n that._addRange(that._observe(result.data));\n if (options.skip + options.take > result.data.length) {\n options.skip = result.data.length - options.take;\n }\n that.view(query.range(options.skip, options.take).toArray());\n }\n } else {\n that.view(result.data);\n }\n },\n _clearEmptyGroups: function (data) {\n for (var idx = data.length - 1; idx >= 0; idx--) {\n var group = data[idx];\n if (group.hasSubgroups) {\n this._clearEmptyGroups(group.items);\n } else {\n if (group.items && !group.items.length) {\n splice.apply(group.parent(), [\n idx,\n 1\n ]);\n }\n }\n }\n },\n _queryProcess: function (data, options) {\n if (this.options.inPlaceSort) {\n return Query.process(data, options, this.options.inPlaceSort);\n } else {\n return Query.process(data, options);\n }\n },\n _mergeState: function (options) {\n var that = this;\n if (options !== undefined) {\n that._pageSize = options.pageSize;\n that._page = options.page;\n that._sort = options.sort;\n that._filter = options.filter;\n that._group = options.group;\n that._aggregate = options.aggregate;\n that._skip = that._currentRangeStart = options.skip;\n that._take = options.take;\n if (that._skip === undefined) {\n that._skip = that._currentRangeStart = that.skip();\n options.skip = that.skip();\n }\n if (that._take === undefined && that._pageSize !== undefined) {\n that._take = that._pageSize;\n options.take = that._take;\n }\n if (options.sort) {\n that._sort = options.sort = normalizeSort(options.sort);\n that._sortFields = sortFields(options.sort);\n }\n if (options.filter) {\n that._filter = options.filter = that.options.accentFoldingFiltering && !$.isEmptyObject(options.filter) ? $.extend({}, normalizeFilter(options.filter), { accentFoldingFiltering: that.options.accentFoldingFiltering }) : normalizeFilter(options.filter);\n }\n if (options.group) {\n that._group = options.group = normalizeGroup(options.group);\n }\n if (options.aggregate) {\n that._aggregate = options.aggregate = normalizeAggregate(options.aggregate);\n }\n }\n return options;\n },\n query: function (options) {\n var result;\n var remote = this.options.serverSorting || this.options.serverPaging || this.options.serverFiltering || this.options.serverGrouping || this.options.serverAggregates;\n if (remote || (this._data === undefined || this._data.length === 0) && !this._destroyed.length) {\n if (this.options.endless) {\n var moreItemsCount = options.pageSize - this.pageSize();\n if (moreItemsCount > 0) {\n moreItemsCount = this.pageSize();\n options.page = options.pageSize / moreItemsCount;\n options.pageSize = moreItemsCount;\n } else {\n options.page = 1;\n this.options.endless = false;\n }\n }\n return this.read(this._mergeState(options));\n }\n var isPrevented = this.trigger(REQUESTSTART, { type: 'read' });\n if (!isPrevented) {\n this.trigger(PROGRESS);\n if (options) {\n options.groupPaging = this._groupPaging;\n }\n result = this._queryProcess(this._data, this._mergeState(options));\n this._setFilterTotal(result.total, true);\n this._aggregateResult = this._calculateAggregates(result.dataToAggregate || this._data, options);\n this._setView(result, options);\n this.trigger(REQUESTEND, { type: 'read' });\n this.trigger(CHANGE, {\n items: result.data,\n action: options ? options.action : ''\n });\n }\n return $.Deferred().resolve(isPrevented).promise();\n },\n _hasExpandedSubGroups: function (group) {\n var result = false;\n var length = group.items ? group.items.length : 0;\n if (!group.hasSubgroups) {\n return false;\n }\n for (var i = 0; i < length; i++) {\n if (this._groupsState[group.items[i].uid]) {\n result = true;\n break;\n }\n }\n return result;\n },\n _findGroupedRange: function (data, result, options, parents, callback) {\n var that = this;\n var length = data.length;\n var group;\n var current;\n var itemsLength;\n var hasNotRequestedItems;\n var groupCount;\n var itemsToSkip;\n for (var i = 0; i < length; i++) {\n group = data[i];\n if (options.taken >= options.take) {\n break;\n }\n if (!that._getGroupByUid(group.uid)) {\n that._groupsFlat.push(group);\n }\n if (that._groupsState[group.uid]) {\n if (that._isServerGroupPaged()) {\n if (group.hasSubgroups && !group.subgroupCount) {\n that.getGroupSubGroupCount(group, options, parents, callback);\n that._fetchingGroupItems = true;\n return;\n }\n groupCount = (group.subgroupCount || group.itemCount) + 1;\n itemsToSkip = options.skip - options.skipped;\n hasNotRequestedItems = !group.items || group.items.length - itemsToSkip < options.take - options.taken;\n if (!that._hasExpandedSubGroups(group) && itemsToSkip > groupCount) {\n options.skipped += groupCount;\n continue;\n }\n if (group.hasSubgroups && (!group.items || hasNotRequestedItems && group.items.length < group.subgroupCount) || !group.hasSubgroups && (!group.items || hasNotRequestedItems && group.items.length < group.itemCount)) {\n that.getGroupItems(group, options, parents, callback);\n that._fetchingGroupItems = true;\n return;\n }\n }\n if (options.includeParents && options.skipped < options.skip) {\n options.skipped++;\n group.excludeHeader = true;\n } else if (options.includeParents) {\n options.taken++;\n }\n if (group.hasSubgroups && group.items && group.items.length) {\n group.currentItems = [];\n if (!parents) {\n parents = [];\n }\n parents.push(group);\n that._findGroupedRange(group.items, group.currentItems, options, parents, callback);\n parents.pop();\n if (group.currentItems.length || options.taken > 0) {\n result.push(group);\n } else {\n group.excludeHeader = false;\n }\n } else {\n current = [];\n itemsLength = group.items.length;\n for (var j = 0; j < itemsLength; j++) {\n if (options.skipped < options.skip) {\n options.skipped++;\n continue;\n }\n if (options.taken >= options.take) {\n break;\n }\n current.push(group.items[j]);\n options.taken++;\n }\n if (current.length || options.taken > 0) {\n group.currentItems = current;\n result.push(group);\n } else {\n group.excludeHeader = false;\n }\n }\n } else {\n if (options.skipped < options.skip) {\n options.skipped++;\n continue;\n }\n result.push(group);\n options.taken++;\n }\n }\n },\n getGroupItems: function (group, options, parents, callback) {\n var that = this;\n var skip;\n var take;\n var filter;\n var data;\n var subgroups;\n if (!group.items) {\n group.items = [];\n }\n skip = group.items.length;\n take = that.take();\n filter = this._composeItemsFilter(group, parents);\n data = {\n page: math.floor((skip || 0) / (take || 1)) || 1,\n pageSize: take,\n skip: skip,\n take: take,\n filter: filter,\n aggregate: that._aggregate,\n sort: that._sort\n };\n subgroups = that.findSubgroups(group);\n if (subgroups && subgroups.length) {\n data.group = subgroups;\n data.groupPaging = true;\n }\n clearTimeout(that._timeout);\n that._timeout = setTimeout(function () {\n that._queueRequest(data, function () {\n if (!that.trigger(REQUESTSTART, { type: 'read' })) {\n that.transport.read({\n data: data,\n success: that._groupItemsSuccessHandler(group, options.skip, that.take(), callback),\n error: function () {\n var args = slice.call(arguments);\n that.error.apply(that, args);\n }\n });\n } else {\n that._dequeueRequest();\n }\n });\n }, 100);\n },\n getGroupSubGroupCount: function (group, options, parents, callback) {\n var that = this;\n var filter;\n var groupIndex;\n var data;\n if (!group.items) {\n group.items = [];\n }\n filter = this._composeItemsFilter(group, parents);\n groupIndex = this._group.map(function (g) {\n return g.field;\n }).indexOf(group.field);\n data = {\n filter: filter,\n group: [that._group[groupIndex + 1]],\n groupPaging: true,\n includeSubGroupCount: true\n };\n clearTimeout(that._timeout);\n that._timeout = setTimeout(function () {\n that._queueRequest(data, function () {\n if (!that.trigger(REQUESTSTART, { type: 'read' })) {\n that.transport.read({\n data: data,\n success: that._subGroupCountSuccessHandler(group, options.skip, that.take(), callback),\n error: function () {\n var args = slice.call(arguments);\n that.error.apply(that, args);\n }\n });\n } else {\n that._dequeueRequest();\n }\n });\n }, 100);\n },\n _subGroupCountSuccessHandler: function (group, skip, take, callback) {\n var that = this;\n callback = isFunction(callback) ? callback : noop;\n var totalField = that.options.schema && that.options.schema.total ? that.options.schema.total : 'Total';\n return function (data) {\n that._dequeueRequest();\n that.trigger(REQUESTEND, {\n response: data,\n type: 'read'\n });\n that._fetchingGroupItems = false;\n if (isFunction(totalField)) {\n group.subgroupCount = totalField(data);\n } else {\n group.subgroupCount = data[totalField];\n }\n that.range(skip, take, callback, 'expandGroup');\n };\n },\n _groupItemsSuccessHandler: function (group, skip, take, callback) {\n var that = this;\n var timestamp = that._timeStamp();\n callback = isFunction(callback) ? callback : noop;\n return function (data) {\n var temp;\n var model = Model.define(that.options.schema.model);\n that._dequeueRequest();\n that.trigger(REQUESTEND, {\n response: data,\n type: 'read'\n });\n data = that.reader.parse(data);\n if (group.hasSubgroups) {\n temp = that.reader.groups(data);\n } else {\n temp = that.reader.data(data);\n temp = temp.map(function (item) {\n return new model(item);\n });\n }\n group.items.omitChangeEvent = true;\n for (var i = 0; i < temp.length; i++) {\n group.items.push(temp[i]);\n }\n group.items.omitChangeEvent = false;\n that._updateRangePristineData(group);\n that._fetchingGroupItems = false;\n that._serverGroupsTotal += temp.length;\n that.range(skip, take, callback, 'expandGroup');\n if (timestamp >= that._currentRequestTimeStamp || !that._skipRequestsInProgress) {\n that.trigger(CHANGE, {});\n }\n };\n },\n findSubgroups: function (group) {\n var indexOfCurrentGroup = this._group.map(function (g) {\n return g.field;\n }).indexOf(group.field);\n return this._group.slice(indexOfCurrentGroup + 1, this._group.length);\n },\n _composeItemsFilter: function (group, parents) {\n var filter = this.filter() || {\n logic: 'and',\n filters: []\n };\n filter = extend(true, {}, filter);\n filter.filters.push({\n field: group.field,\n operator: 'eq',\n value: group.value\n });\n if (parents) {\n for (var i = 0; i < parents.length; i++) {\n filter.filters.push({\n field: parents[i].field,\n operator: 'eq',\n value: parents[i].value\n });\n }\n }\n return filter;\n },\n _updateRangePristineData: function (group) {\n var that = this;\n var ranges = that._ranges;\n var rangesLength = ranges.length;\n var temp;\n var currentGroup;\n var range;\n var dataLength;\n var indexes;\n for (var i = 0; i < rangesLength; i++) {\n range = ranges[i];\n dataLength = range.data.length;\n indexes = [];\n for (var j = 0; j < dataLength; j++) {\n currentGroup = range.data[j];\n indexes.push(j);\n if (currentGroup.uid === group.uid || currentGroup.hasSubgroups && currentGroup.items.length && that._containsSubGroup(currentGroup, group, indexes)) {\n break;\n }\n indexes.pop();\n }\n if (indexes.length) {\n temp = ranges[i].pristineData;\n while (indexes.length > 1) {\n temp = temp[indexes.splice(0, 1)[0]].items;\n }\n temp[indexes[0]] = that._cloneGroup(group);\n break;\n }\n }\n },\n _containsSubGroup: function (group, subgroup, indexes) {\n var that = this;\n var length = group.items.length;\n var currentSubGroup;\n if (group.hasSubgroups && length) {\n for (var i = 0; i < length; i++) {\n currentSubGroup = group.items[i];\n indexes.push(i);\n if (currentSubGroup.uid === subgroup.uid) {\n return true;\n } else if (currentSubGroup.hasSubgroups && currentSubGroup.items.length) {\n return that._containsSubGroup(currentSubGroup, subgroup, indexes);\n }\n indexes.pop();\n }\n }\n },\n _cloneGroup: function (group) {\n var that = this;\n group = typeof group.toJSON == 'function' ? group.toJSON() : group;\n if (group.items && group.items.length) {\n group.items = group.items.map(function (item) {\n return that._cloneGroup(item);\n });\n }\n return group;\n },\n _setFilterTotal: function (filterTotal, setDefaultValue) {\n var that = this;\n if (!that.options.serverFiltering) {\n if (filterTotal !== undefined) {\n that._total = filterTotal;\n } else if (setDefaultValue) {\n that._total = that._data.length;\n }\n }\n },\n fetch: function (callback) {\n var that = this;\n var fn = function (isPrevented) {\n if (isPrevented !== true && isFunction(callback)) {\n callback.call(that);\n }\n };\n return this._query().done(fn);\n },\n _query: function (options) {\n var that = this;\n return that.query(extend({}, {\n page: that.page(),\n pageSize: that.pageSize(),\n sort: that.sort(),\n filter: that.filter(),\n group: that.group(),\n aggregate: that.aggregate()\n }, options));\n },\n next: function (options) {\n var that = this, page = that.page(), total = that.total();\n options = options || {};\n if (!page || total && page + 1 > that.totalPages()) {\n return;\n }\n that._skip = that._currentRangeStart = page * that.take();\n page += 1;\n options.page = page;\n that._query(options);\n return page;\n },\n prev: function (options) {\n var that = this, page = that.page();\n options = options || {};\n if (!page || page === 1) {\n return;\n }\n that._skip = that._currentRangeStart = that._skip - that.take();\n page -= 1;\n options.page = page;\n that._query(options);\n return page;\n },\n page: function (val) {\n var that = this, skip;\n if (val !== undefined) {\n val = math.max(math.min(math.max(val, 1), that.totalPages()), 1);\n var take = that.take();\n if (that._isGroupPaged()) {\n val -= 1;\n that.range(val * take, take, null, 'page');\n return;\n }\n that._query(that._pageableQueryOptions({ page: val }));\n return;\n }\n skip = that.skip();\n return skip !== undefined ? math.round((skip || 0) / (that.take() || 1)) + 1 : undefined;\n },\n pageSize: function (val) {\n var that = this;\n if (val !== undefined) {\n that._query(that._pageableQueryOptions({\n pageSize: val,\n page: 1\n }));\n return;\n }\n return that.take();\n },\n sort: function (val) {\n var that = this;\n if (val !== undefined) {\n that.trigger('sort');\n that._query({ sort: val });\n return;\n }\n return that._sort;\n },\n filter: function (val) {\n var that = this;\n if (val === undefined) {\n return that._filter;\n }\n that.trigger('reset');\n that._query({\n filter: val,\n page: 1\n });\n },\n group: function (val) {\n var that = this;\n var options = { group: val };\n if (that._groupPaging) {\n options.page = 1;\n }\n if (val !== undefined) {\n that._query(options);\n return;\n }\n return that._group;\n },\n getGroupsFlat: function (data) {\n var idx, result = [], length;\n for (idx = 0, length = data.length; idx < length; idx++) {\n var group = data[idx];\n if (group.hasSubgroups) {\n result = result.concat(this.getGroupsFlat(group.items));\n }\n result.push(group);\n }\n return result;\n },\n total: function () {\n return parseInt(this._total || 0, 10);\n },\n groupsTotal: function (includeExpanded) {\n var that = this;\n if (!that._group.length) {\n return that.total();\n }\n if (that._isServerGrouped()) {\n if (that._serverGroupsTotal) {\n return that._serverGroupsTotal;\n }\n that._serverGroupsTotal = that.total();\n return that._serverGroupsTotal;\n }\n return that._calculateGroupsTotal(that._ranges.length ? that._ranges[0].data : [], includeExpanded);\n },\n _calculateGroupsTotal: function (groups, includeExpanded, itemsField, ignoreState) {\n var that = this;\n itemsField = itemsField || 'items';\n var total;\n var length;\n if (that._group.length && groups) {\n total = 0;\n length = groups.length;\n for (var i = 0; i < length; i++) {\n total += that.groupCount(groups[i], includeExpanded, itemsField, ignoreState);\n }\n that._groupsTotal = total;\n return total;\n }\n that._groupsTotal = that._data.length;\n return that._groupsTotal;\n },\n groupCount: function (group, includeExpanded, itemsField, ignoreState) {\n var that = this;\n var total = 0;\n if (group.hasSubgroups && that._groupsState[group.uid]) {\n if (includeExpanded && !group.excludeHeader || ignoreState) {\n total += 1;\n }\n group[itemsField].forEach(function (subgroup) {\n total += that.groupCount(subgroup, includeExpanded, itemsField, ignoreState);\n });\n } else {\n if (that._groupsState[group.uid]) {\n if (includeExpanded && !group.excludeHeader || ignoreState) {\n total++;\n }\n total += group[itemsField] ? group[itemsField].length : 0;\n } else {\n total++;\n }\n }\n return total;\n },\n countGroupRange: function (range) {\n var total = 0;\n var length = range.length;\n for (var i = 0; i < length; i++) {\n total += this.groupCount(range[i], true);\n }\n return total;\n },\n aggregate: function (val) {\n var that = this;\n if (val !== undefined) {\n that._query({ aggregate: val });\n return;\n }\n return that._aggregate;\n },\n aggregates: function () {\n var result = this._aggregateResult;\n if (isEmptyObject(result)) {\n result = this._emptyAggregates(this.aggregate());\n }\n return result;\n },\n _emptyAggregates: function (aggregates) {\n var result = {};\n if (!isEmptyObject(aggregates)) {\n var aggregate = {};\n if (!isArray(aggregates)) {\n aggregates = [aggregates];\n }\n for (var idx = 0; idx < aggregates.length; idx++) {\n aggregate[aggregates[idx].aggregate] = 0;\n result[aggregates[idx].field] = aggregate;\n }\n }\n return result;\n },\n _pageableQueryOptions: function (options) {\n return options;\n },\n _wrapInEmptyGroup: function (model) {\n var groups = this.group(), parent, group, idx, length;\n for (idx = groups.length - 1, length = 0; idx >= length; idx--) {\n group = groups[idx];\n parent = {\n value: model.get ? model.get(group.field) : model[group.field],\n field: group.field,\n items: parent ? [parent] : [model],\n hasSubgroups: !!parent,\n aggregates: this._emptyAggregates(group.aggregates)\n };\n }\n return parent;\n },\n totalPages: function () {\n var that = this, pageSize = that.pageSize() || that.total(), total = that._isGroupPaged() ? that.groupsTotal(true) : that.total();\n return math.ceil((total || 0) / pageSize);\n },\n inRange: function (skip, take) {\n var that = this, end = math.min(skip + take, that.total());\n if (!that.options.serverPaging && that._data.length > 0) {\n return true;\n }\n return that._findRange(skip, end).length > 0;\n },\n lastRange: function () {\n var ranges = this._ranges;\n return ranges[ranges.length - 1] || {\n start: 0,\n end: 0,\n data: []\n };\n },\n firstItemUid: function () {\n var ranges = this._ranges;\n return ranges.length && ranges[0].data.length && ranges[0].data[0].uid;\n },\n enableRequestsInProgress: function () {\n this._skipRequestsInProgress = false;\n },\n _timeStamp: function () {\n return new Date().getTime();\n },\n range: function (skip, take, callback, action) {\n this._currentRequestTimeStamp = this._timeStamp();\n this._skipRequestsInProgress = true;\n var total = this._isGroupPaged() ? this.groupsTotal(true) : this.total();\n if (action === 'expandGroup' || action === 'collapseGroup') {\n this._updateOuterRangesLength();\n }\n skip = math.min(skip || 0, total);\n callback = isFunction(callback) ? callback : noop;\n var that = this, pageSkip = math.max(math.floor(skip / take), 0) * take, size = math.min(pageSkip + take, total), data;\n data = that._findRange(skip, math.min(skip + take, total), callback);\n if ((data.length || total === 0) && !that._fetchingGroupItems) {\n that._processRangeData(data, skip, take, that._originalPageSkip || pageSkip, that._originalSize || size, { action: action });\n that._originalPageSkip = null;\n that._originalSize = null;\n callback();\n return;\n }\n if (that._isGroupPaged()) {\n that._originalPageSkip = pageSkip;\n that._originalSize = size;\n pageSkip = math.max(math.floor(that._adjustPageSkip(skip, take) / take), 0) * take;\n size = math.min(pageSkip + take, total);\n }\n if (take !== undefined && !that._fetchingGroupItems) {\n if (that._isGroupPaged() && !that._groupRangeExists(pageSkip, take) || !that._rangeExists(pageSkip, size)) {\n that.prefetch(pageSkip, take, function () {\n if (skip > pageSkip && size < that.total() && !that._rangeExists(size, math.min(size + take, that.total()))) {\n that.prefetch(size, take, function () {\n that.range(skip, take, callback);\n });\n } else {\n that.range(skip, take, callback);\n }\n });\n } else if (pageSkip < skip) {\n that.prefetch(size, take, function () {\n that.range(skip, take, callback);\n });\n }\n }\n },\n _findRange: function (start, end, callback) {\n var that = this, ranges = that._ranges, range, data = [], skipIdx, takeIdx, startIndex, endIndex, rangeData, rangeEnd, processed, options = that.options, remote = options.serverSorting || options.serverPaging || options.serverFiltering || options.serverGrouping || options.serverAggregates, flatData, count, length, groupMapOptions = {\n take: end - start,\n skip: start,\n skipped: 0,\n taken: 0,\n includeParents: true\n }, prevRangeEnd, isGroupPaged = that._isGroupPaged(), startField = isGroupPaged ? 'outerStart' : 'start', endField = isGroupPaged ? 'outerEnd' : 'end', currentDataLength;\n for (skipIdx = 0, length = ranges.length; skipIdx < length; skipIdx++) {\n range = ranges[skipIdx];\n if (isGroupPaged) {\n if (range.outerStart >= end) {\n return [];\n }\n if (start > range.outerEnd) {\n groupMapOptions.skipped += range.outerEnd - (prevRangeEnd || 0);\n prevRangeEnd = range.outerEnd;\n continue;\n }\n if (typeof prevRangeEnd !== 'undefined' && prevRangeEnd != range.outerStart) {\n groupMapOptions.skipped += range.outerStart - prevRangeEnd;\n }\n if (groupMapOptions.skipped > groupMapOptions.skip) {\n return [];\n }\n if (typeof prevRangeEnd === 'undefined' && start > 0 && range.start > 0) {\n groupMapOptions.skipped = range.outerStart;\n }\n takeIdx = skipIdx;\n while (true) {\n this._findGroupedRange(range.data, data, groupMapOptions, null, callback);\n currentDataLength = that._calculateGroupsTotal(data, true, 'currentItems');\n if (currentDataLength >= groupMapOptions.take) {\n return data;\n }\n if (that._fetchingGroupItems) {\n return [];\n }\n takeIdx++;\n if (ranges[takeIdx] && ranges[takeIdx].outerStart === range.outerEnd) {\n range = ranges[takeIdx];\n } else {\n break;\n }\n }\n } else if (start >= range[startField] && start <= range[endField]) {\n count = 0;\n for (takeIdx = skipIdx; takeIdx < length; takeIdx++) {\n range = ranges[takeIdx];\n flatData = that._flatData(range.data, true);\n if (flatData.length && start + count >= range.start) {\n rangeData = range.data;\n rangeEnd = range.end;\n if (!remote) {\n if (options.inPlaceSort) {\n processed = that._queryProcess(range.data, { filter: that.filter() });\n } else {\n var sort = normalizeGroupWithoutCompare(that.group() || []).concat(normalizeSort(that.sort() || []));\n processed = that._queryProcess(range.data, {\n sort: sort,\n filter: that.filter()\n });\n }\n flatData = rangeData = processed.data;\n if (processed.total !== undefined) {\n rangeEnd = processed.total;\n }\n }\n startIndex = 0;\n if (start + count > range.start) {\n startIndex = start + count - range.start;\n }\n endIndex = flatData.length;\n if (rangeEnd > end) {\n endIndex = endIndex - (rangeEnd - end);\n }\n count += endIndex - startIndex;\n data = that._mergeGroups(data, rangeData, startIndex, endIndex);\n if (end <= range.end && count == end - start) {\n return data;\n }\n }\n }\n break;\n }\n prevRangeEnd = range.outerEnd;\n }\n return [];\n },\n _getRangesMismatch: function (pageSkip) {\n var that = this;\n var ranges = that._ranges;\n var mismatch = 0;\n var i = 0;\n while (true) {\n var range = ranges[i];\n if (!range || range.outerStart > pageSkip) {\n break;\n }\n if (range.outerEnd != range.end) {\n mismatch = range.outerEnd - range.end;\n }\n i++;\n }\n return mismatch;\n },\n _mergeGroups: function (data, range, skip, take) {\n if (this._isServerGrouped()) {\n var temp = range.toJSON(), prevGroup;\n if (data.length) {\n prevGroup = data[data.length - 1];\n }\n mergeGroups(prevGroup, temp, skip, take);\n return data.concat(temp);\n }\n return data.concat(range.slice(skip, take));\n },\n _processRangeData: function (data, skip, take, pageSkip, size, eventData) {\n var that = this;\n that._pending = undefined;\n that._skip = skip > that.skip() && !that._omitPrefetch ? math.min(size, (that.totalPages() - 1) * that.take()) : pageSkip;\n that._currentRangeStart = skip;\n that._take = take;\n var paging = that.options.serverPaging;\n var sorting = that.options.serverSorting;\n var filtering = that.options.serverFiltering;\n var aggregates = that.options.serverAggregates;\n try {\n that.options.serverPaging = true;\n if (!that._isServerGrouped() && !(that.group() && that.group().length)) {\n that.options.serverSorting = true;\n }\n that.options.serverFiltering = true;\n that.options.serverPaging = true;\n that.options.serverAggregates = true;\n if (paging) {\n that._detachObservableParents();\n that._data = data = that._observe(data);\n }\n that._process(data, eventData);\n } finally {\n that.options.serverPaging = paging;\n that.options.serverSorting = sorting;\n that.options.serverFiltering = filtering;\n that.options.serverAggregates = aggregates;\n }\n },\n skip: function () {\n var that = this;\n if (that._skip === undefined) {\n return that._page !== undefined ? (that._page - 1) * (that.take() || 1) : undefined;\n }\n return that._skip;\n },\n currentRangeStart: function () {\n return this._currentRangeStart || 0;\n },\n take: function () {\n return this._take || this._pageSize;\n },\n _prefetchSuccessHandler: function (skip, size, callback, force) {\n var that = this;\n var timestamp = that._timeStamp();\n return function (data) {\n var found = false, range = {\n start: skip,\n end: size,\n data: [],\n timestamp: that._timeStamp()\n }, idx, length, temp;\n that._dequeueRequest();\n that.trigger(REQUESTEND, {\n response: data,\n type: 'read'\n });\n data = that.reader.parse(data);\n temp = that._readData(data);\n if (temp.length) {\n for (idx = 0, length = that._ranges.length; idx < length; idx++) {\n if (that._ranges[idx].start === skip) {\n found = true;\n range = that._ranges[idx];\n if (!that._isGroupPaged()) {\n range.pristineData = temp;\n range.data = that._observe(temp);\n range.end = range.start + that._flatData(range.data, true).length;\n that._sortRanges();\n }\n break;\n }\n }\n if (!found) {\n that._addRange(that._observe(temp), skip);\n }\n }\n that._total = that.reader.total(data);\n if (force || (timestamp >= that._currentRequestTimeStamp || !that._skipRequestsInProgress)) {\n if (callback && temp.length) {\n callback();\n } else {\n that.trigger(CHANGE, {});\n }\n }\n };\n },\n prefetch: function (skip, take, callback) {\n var that = this, size = math.min(skip + take, that.total()), options = {\n take: take,\n skip: skip,\n page: skip / take + 1,\n pageSize: take,\n sort: that._sort,\n filter: that._filter,\n group: that._group,\n aggregate: that._aggregate\n };\n if (that._isGroupPaged() && !that._isServerGrouped() && that._groupRangeExists(skip, size)) {\n if (callback) {\n callback();\n }\n return;\n }\n if (that._isServerGroupPaged() && !that._groupRangeExists(skip, size) || !that._rangeExists(skip, size)) {\n clearTimeout(that._timeout);\n that._timeout = setTimeout(function () {\n that._queueRequest(options, function () {\n if (!that.trigger(REQUESTSTART, { type: 'read' })) {\n if (that._omitPrefetch) {\n that.trigger(PROGRESS);\n }\n that.transport.read({\n data: that._params(options),\n success: that._prefetchSuccessHandler(skip, size, callback),\n error: function () {\n var args = slice.call(arguments);\n that.error.apply(that, args);\n }\n });\n } else {\n that._dequeueRequest();\n }\n });\n }, 100);\n } else if (callback) {\n callback();\n }\n },\n _multiplePrefetch: function (skip, take, callback) {\n var that = this, size = math.min(skip + take, that.total()), options = {\n take: take,\n skip: skip,\n page: skip / take + 1,\n pageSize: take,\n sort: that._sort,\n filter: that._filter,\n group: that._group,\n aggregate: that._aggregate\n };\n if (!that._rangeExists(skip, size)) {\n if (!that.trigger(REQUESTSTART, { type: 'read' })) {\n that.transport.read({\n data: that._params(options),\n success: that._prefetchSuccessHandler(skip, size, callback, true)\n });\n }\n } else if (callback) {\n callback();\n }\n },\n _adjustPageSkip: function (start, take) {\n var that = this;\n var prevRange = that._getPrevRange(start);\n var result;\n var total = that.total();\n var mismatch;\n if (prevRange) {\n mismatch = that._getRangesMismatch(start);\n if (!mismatch) {\n return start;\n }\n start -= mismatch;\n }\n result = math.max(math.floor(start / take), 0) * take;\n if (result > total) {\n while (true) {\n result -= take;\n if (result < total) {\n break;\n }\n }\n }\n return result;\n },\n _getNextRange: function (end) {\n var that = this, ranges = that._ranges, idx, length;\n for (idx = 0, length = ranges.length; idx < length; idx++) {\n if (ranges[idx].start <= end && ranges[idx].end >= end) {\n return ranges[idx];\n }\n }\n },\n _getPrevRange: function (start) {\n var that = this, ranges = that._ranges, idx, range, length = ranges.length;\n for (idx = length - 1; idx >= 0; idx--) {\n if (ranges[idx].outerStart <= start) {\n range = ranges[idx];\n break;\n }\n }\n return range;\n },\n _rangeExists: function (start, end) {\n var that = this, ranges = that._ranges, idx, length;\n for (idx = 0, length = ranges.length; idx < length; idx++) {\n if (ranges[idx].start <= start && ranges[idx].end >= end) {\n return true;\n }\n }\n return false;\n },\n _groupRangeExists: function (start, end) {\n var that = this, ranges = that._ranges, idx, length, availableItemsCount = 0, total = that.groupsTotal(true);\n if (end > total && !that._isServerGrouped()) {\n end = total;\n }\n for (idx = 0, length = ranges.length; idx < length; idx++) {\n var range = ranges[idx];\n if (range.outerStart <= start && range.outerEnd >= start) {\n availableItemsCount += range.outerEnd - start;\n } else if (range.outerStart <= end && range.outerEnd >= end) {\n availableItemsCount += end - range.outerStart;\n }\n }\n return availableItemsCount >= end - start;\n },\n _getCurrentRangeSpan: function () {\n var that = this;\n var ranges = that._ranges;\n var start = that.currentRangeStart();\n var end = start + (that.take() || 0);\n var rangeSpan = [];\n var range;\n var idx;\n var length = ranges.length;\n for (idx = 0; idx < length; idx++) {\n range = ranges[idx];\n if (range.start <= start && range.end >= start || range.start >= start && range.start <= end) {\n rangeSpan.push(range);\n }\n }\n return rangeSpan;\n },\n _removeModelFromRanges: function (model) {\n var that = this;\n var range;\n for (var idx = 0, length = this._ranges.length; idx < length; idx++) {\n range = this._ranges[idx];\n that._removeModelFromRange(range, model);\n }\n that._updateRangesLength();\n },\n _removeModelFromRange: function (range, model) {\n this._eachItem(range.data, function (data) {\n if (!data) {\n return;\n }\n for (var idx = 0; idx < data.length; idx++) {\n var dataItem = data[idx];\n if (dataItem.uid && dataItem.uid == model.uid) {\n [].splice.call(data, idx, 1);\n break;\n }\n }\n });\n },\n _insertModelInRange: function (index, model) {\n var that = this;\n var ranges = that._ranges || [];\n var rangesLength = ranges.length;\n var range;\n var i;\n for (i = 0; i < rangesLength; i++) {\n range = ranges[i];\n if (range.start <= index && range.end >= index) {\n if (!that._getByUid(model.uid, range.data)) {\n if (that._isServerGrouped()) {\n range.data.splice(index, 0, that._wrapInEmptyGroup(model));\n } else {\n range.data.splice(index, 0, model);\n }\n }\n break;\n }\n }\n that._updateRangesLength();\n },\n _updateRangesLength: function () {\n var that = this;\n var ranges = that._ranges || [];\n var rangesLength = ranges.length;\n var mismatchFound = false;\n var mismatchLength = 0;\n var lengthDifference = 0;\n var rangeLength;\n var range;\n var i;\n for (i = 0; i < rangesLength; i++) {\n range = ranges[i];\n rangeLength = that._isGroupPaged() ? range.data.length : that._flatData(range.data, true).length;\n lengthDifference = rangeLength - math.abs(range.end - range.start);\n if (!mismatchFound && lengthDifference !== 0) {\n mismatchFound = true;\n mismatchLength = lengthDifference;\n range.end += mismatchLength;\n continue;\n }\n if (mismatchFound) {\n range.start += mismatchLength;\n range.end += mismatchLength;\n }\n }\n },\n _updateOuterRangesLength: function () {\n var that = this;\n var ranges = that._ranges || [];\n var rangesLength = ranges.length;\n var mismatchLength = 0;\n var range;\n var i;\n var prevRange;\n var rangeLength;\n for (i = 0; i < rangesLength; i++) {\n range = ranges[i];\n rangeLength = that._isGroupPaged() ? that._calculateGroupsTotal(range.data, true, 'items', true) : that._flatData(range.data, true).length;\n if (prevRange) {\n if (prevRange.end != range.start) {\n mismatchLength = range.start - prevRange.end;\n }\n range.outerStart = prevRange.outerEnd + mismatchLength;\n mismatchLength = 0;\n } else {\n range.outerStart = range.start;\n }\n range.outerEnd = range.outerStart + rangeLength;\n prevRange = range;\n }\n }\n });\n var Transport = {};\n Transport.create = function (options, data, dataSource) {\n var transport, transportOptions = options.transport ? $.extend({}, options.transport) : null;\n if (transportOptions) {\n transportOptions.read = typeof transportOptions.read === STRING ? { url: transportOptions.read } : transportOptions.read;\n if (options.type === 'jsdo') {\n transportOptions.dataSource = dataSource;\n }\n if (options.type) {\n kendo.data.transports = kendo.data.transports || {};\n kendo.data.schemas = kendo.data.schemas || {};\n if (!kendo.data.transports[options.type]) {\n kendo.logToConsole('Unknown DataSource transport type \\'' + options.type + '\\'.\\nVerify that registration scripts for this type are included after Kendo UI on the page.', 'warn');\n } else if (!isPlainObject(kendo.data.transports[options.type])) {\n transport = new kendo.data.transports[options.type](extend(transportOptions, { data: data }));\n } else {\n transportOptions = extend(true, {}, kendo.data.transports[options.type], transportOptions);\n }\n options.schema = extend(true, {}, kendo.data.schemas[options.type], options.schema);\n }\n if (!transport) {\n transport = isFunction(transportOptions.read) ? transportOptions : new RemoteTransport(transportOptions);\n }\n } else {\n transport = new LocalTransport({ data: options.data || [] });\n }\n return transport;\n };\n DataSource.create = function (options) {\n if (isArray(options) || options instanceof ObservableArray) {\n options = { data: options };\n }\n var dataSource = options || {}, data = dataSource.data, fields = dataSource.fields, table = dataSource.table, select = dataSource.select, idx, length, model = {}, field;\n if (!data && fields && !dataSource.transport) {\n if (table) {\n data = inferTable(table, fields);\n } else if (select) {\n data = inferSelect(select, fields);\n if (dataSource.group === undefined && data[0] && data[0].optgroup !== undefined) {\n dataSource.group = 'optgroup';\n }\n }\n }\n if (kendo.data.Model && fields && (!dataSource.schema || !dataSource.schema.model)) {\n for (idx = 0, length = fields.length; idx < length; idx++) {\n field = fields[idx];\n if (field.type) {\n model[field.field] = field;\n }\n }\n if (!isEmptyObject(model)) {\n dataSource.schema = extend(true, dataSource.schema, { model: { fields: model } });\n }\n }\n dataSource.data = data;\n select = null;\n dataSource.select = null;\n table = null;\n dataSource.table = null;\n return dataSource instanceof DataSource ? dataSource : new DataSource(dataSource);\n };\n function inferSelect(select, fields) {\n select = $(select)[0];\n var options = select.options;\n var firstField = fields[0];\n var secondField = fields[1];\n var data = [];\n var idx, length;\n var optgroup;\n var option;\n var record;\n var value;\n for (idx = 0, length = options.length; idx < length; idx++) {\n record = {};\n option = options[idx];\n optgroup = option.parentNode;\n if (optgroup === select) {\n optgroup = null;\n }\n if (option.disabled || optgroup && optgroup.disabled) {\n continue;\n }\n if (optgroup) {\n record.optgroup = optgroup.label;\n }\n record[firstField.field] = option.text;\n value = option.attributes.value;\n if (value && value.specified) {\n value = option.value;\n } else {\n value = option.text;\n }\n record[secondField.field] = value;\n data.push(record);\n }\n return data;\n }\n function inferTable(table, fields) {\n var tbody = $(table)[0].tBodies[0], rows = tbody ? tbody.rows : [], idx, length, fieldIndex, fieldCount = fields.length, data = [], cells, record, cell, empty;\n for (idx = 0, length = rows.length; idx < length; idx++) {\n record = {};\n empty = true;\n cells = rows[idx].cells;\n for (fieldIndex = 0; fieldIndex < fieldCount; fieldIndex++) {\n cell = cells[fieldIndex];\n if (cell.nodeName.toLowerCase() !== 'th') {\n empty = false;\n record[fields[fieldIndex].field] = cell.innerHTML;\n }\n }\n if (!empty) {\n data.push(record);\n }\n }\n return data;\n }\n var Node = Model.define({\n idField: 'id',\n init: function (value) {\n var that = this, hasChildren = that.hasChildren || value && value.hasChildren, childrenField = 'items', childrenOptions = {};\n kendo.data.Model.fn.init.call(that, value);\n if (typeof that.children === STRING) {\n childrenField = that.children;\n }\n childrenOptions = {\n schema: {\n data: childrenField,\n model: {\n hasChildren: hasChildren,\n id: that.idField,\n fields: that.fields\n }\n }\n };\n if (typeof that.children !== STRING) {\n extend(childrenOptions, that.children);\n }\n childrenOptions.data = value;\n if (!hasChildren) {\n hasChildren = childrenOptions.schema.data;\n }\n if (typeof hasChildren === STRING) {\n hasChildren = kendo.getter(hasChildren);\n }\n if (isFunction(hasChildren)) {\n var hasChildrenObject = hasChildren.call(that, that);\n if (hasChildrenObject && hasChildrenObject.length === 0) {\n that.hasChildren = false;\n } else {\n that.hasChildren = !!hasChildrenObject;\n }\n }\n that._childrenOptions = childrenOptions;\n if (that.hasChildren) {\n that._initChildren();\n }\n that._loaded = !!(value && value._loaded);\n },\n _initChildren: function () {\n var that = this;\n var children, transport, parameterMap;\n if (!(that.children instanceof HierarchicalDataSource)) {\n children = that.children = new HierarchicalDataSource(that._childrenOptions);\n transport = children.transport;\n parameterMap = transport.parameterMap;\n transport.parameterMap = function (data, type) {\n data[that.idField || 'id'] = that.id;\n if (parameterMap) {\n data = parameterMap.call(that, data, type);\n }\n return data;\n };\n children.parent = function () {\n return that;\n };\n children.bind(CHANGE, function (e) {\n e.node = e.node || that;\n that.trigger(CHANGE, e);\n });\n children.bind(ERROR, function (e) {\n var collection = that.parent();\n if (collection) {\n e.node = e.node || that;\n collection.trigger(ERROR, e);\n }\n });\n that._updateChildrenField();\n }\n },\n append: function (model) {\n this._initChildren();\n this.loaded(true);\n this.children.add(model);\n },\n hasChildren: false,\n level: function () {\n var parentNode = this.parentNode(), level = 0;\n while (parentNode && parentNode.parentNode) {\n level++;\n parentNode = parentNode.parentNode ? parentNode.parentNode() : null;\n }\n return level;\n },\n _updateChildrenField: function () {\n var fieldName = this._childrenOptions.schema.data;\n this[fieldName || 'items'] = this.children.data();\n },\n _childrenLoaded: function () {\n this._loaded = true;\n this._updateChildrenField();\n },\n load: function () {\n var options = {};\n var method = '_query';\n var children, promise;\n if (this.hasChildren) {\n this._initChildren();\n children = this.children;\n options[this.idField || 'id'] = this.id;\n if (!this._loaded) {\n children._data = undefined;\n method = 'read';\n }\n children.one(CHANGE, proxy(this._childrenLoaded, this));\n if (this._matchFilter) {\n options.filter = {\n field: '_matchFilter',\n operator: 'eq',\n value: true\n };\n }\n promise = children[method](options);\n } else {\n this.loaded(true);\n }\n return promise || $.Deferred().resolve().promise();\n },\n parentNode: function () {\n var array = this.parent();\n return array.parent();\n },\n loaded: function (value) {\n if (value !== undefined) {\n this._loaded = value;\n } else {\n return this._loaded;\n }\n },\n shouldSerialize: function (field) {\n return Model.fn.shouldSerialize.call(this, field) && field !== 'children' && field !== '_loaded' && field !== 'hasChildren' && field !== '_childrenOptions';\n }\n });\n function dataMethod(name) {\n return function () {\n var data = this._data, result = DataSource.fn[name].apply(this, slice.call(arguments));\n if (this._data != data) {\n this._attachBubbleHandlers();\n }\n return result;\n };\n }\n var HierarchicalDataSource = DataSource.extend({\n init: function (options) {\n var node = Node.define({ children: options });\n if (options.filter && !options.serverFiltering) {\n this._hierarchicalFilter = options.filter;\n options.filter = null;\n }\n DataSource.fn.init.call(this, extend(true, {}, {\n schema: {\n modelBase: node,\n model: node\n }\n }, options));\n this._attachBubbleHandlers();\n },\n _attachBubbleHandlers: function () {\n var that = this;\n that._data.bind(ERROR, function (e) {\n that.trigger(ERROR, e);\n });\n },\n read: function (data) {\n var result = DataSource.fn.read.call(this, data);\n if (this._hierarchicalFilter) {\n if (this._data && this._data.length > 0) {\n this.filter(this._hierarchicalFilter);\n } else {\n this.options.filter = this._hierarchicalFilter;\n this._filter = normalizeFilter(this.options.filter);\n this._hierarchicalFilter = null;\n }\n }\n return result;\n },\n remove: function (node) {\n var parentNode = node.parentNode(), dataSource = this, result;\n if (parentNode && parentNode._initChildren) {\n dataSource = parentNode.children;\n }\n result = DataSource.fn.remove.call(dataSource, node);\n if (parentNode && !dataSource.data().length) {\n parentNode.hasChildren = false;\n }\n return result;\n },\n success: dataMethod('success'),\n data: dataMethod('data'),\n insert: function (index, model) {\n var parentNode = this.parent();\n if (parentNode && parentNode._initChildren) {\n parentNode.hasChildren = true;\n parentNode._initChildren();\n }\n return DataSource.fn.insert.call(this, index, model);\n },\n filter: function (val) {\n if (val === undefined) {\n return this._filter;\n }\n if (!this.options.serverFiltering && this._markHierarchicalQuery(val)) {\n val = {\n logic: 'or',\n filters: [\n val,\n {\n field: '_matchFilter',\n operator: 'equals',\n value: true\n }\n ]\n };\n }\n this.trigger('reset');\n this._query({\n filter: val,\n page: 1\n });\n },\n _markHierarchicalQuery: function (expressions) {\n var compiled;\n var predicate;\n var fields;\n var operators;\n var filter;\n var accentFoldingFiltering = this.options.accentFoldingFiltering;\n expressions = accentFoldingFiltering ? $.extend({}, normalizeFilter(expressions), { accentFoldingFiltering: accentFoldingFiltering }) : normalizeFilter(expressions);\n if (!expressions || expressions.filters.length === 0) {\n this._updateHierarchicalFilter(function () {\n return true;\n });\n return false;\n }\n compiled = Query.filterExpr(expressions);\n fields = compiled.fields;\n operators = compiled.operators;\n predicate = filter = new Function('d, __f, __o', 'return ' + compiled.expression);\n if (fields.length || operators.length) {\n filter = function (d) {\n return predicate(d, fields, operators);\n };\n }\n this._updateHierarchicalFilter(filter);\n return true;\n },\n _updateHierarchicalFilter: function (filter) {\n var current;\n var data = this._data;\n var result = false;\n for (var idx = 0; idx < data.length; idx++) {\n current = data[idx];\n if (current.hasChildren) {\n current._matchFilter = current.children._updateHierarchicalFilter(filter);\n if (!current._matchFilter) {\n current._matchFilter = filter(current);\n }\n } else {\n current._matchFilter = filter(current);\n }\n if (current._matchFilter) {\n result = true;\n }\n }\n return result;\n },\n _find: function (method, value) {\n var idx, length, node, children;\n var data = this._data;\n if (!data) {\n return;\n }\n node = DataSource.fn[method].call(this, value);\n if (node) {\n return node;\n }\n data = this._flatData(this._data);\n for (idx = 0, length = data.length; idx < length; idx++) {\n children = data[idx].children;\n if (!(children instanceof HierarchicalDataSource)) {\n continue;\n }\n node = children[method](value);\n if (node) {\n return node;\n }\n }\n },\n get: function (id) {\n return this._find('get', id);\n },\n getByUid: function (uid) {\n return this._find('getByUid', uid);\n }\n });\n function inferList(list, fields) {\n var items = $(list).children(), idx, length, data = [], record, textField = fields[0].field, urlField = fields[1] && fields[1].field, spriteCssClassField = fields[2] && fields[2].field, imageUrlField = fields[3] && fields[3].field, item, id, textChild, className, children;\n function elements(collection, tagName) {\n return collection.filter(tagName).add(collection.find(tagName));\n }\n for (idx = 0, length = items.length; idx < length; idx++) {\n record = { _loaded: true };\n item = items.eq(idx);\n textChild = item[0].firstChild;\n children = item.children();\n list = children.filter('ul');\n children = children.filter(':not(ul)');\n id = item.attr('data-id');\n if (id) {\n record.id = id;\n }\n if (textChild) {\n record[textField] = textChild.nodeType == 3 ? textChild.nodeValue : children.text();\n }\n if (urlField) {\n record[urlField] = elements(children, 'a').attr('href');\n }\n if (imageUrlField) {\n record[imageUrlField] = elements(children, 'img').attr('src');\n }\n if (spriteCssClassField) {\n className = elements(children, '.k-sprite').prop('className');\n record[spriteCssClassField] = className && kendo.trim(className.replace('k-sprite', ''));\n }\n if (list.length) {\n record.items = inferList(list.eq(0), fields);\n }\n if (item.attr('data-hasChildren') == 'true') {\n record.hasChildren = true;\n }\n data.push(record);\n }\n return data;\n }\n HierarchicalDataSource.create = function (options) {\n options = options && options.push ? { data: options } : options;\n var dataSource = options || {}, data = dataSource.data, fields = dataSource.fields, list = dataSource.list;\n if (data && data._dataSource) {\n return data._dataSource;\n }\n if (!data && fields && !dataSource.transport) {\n if (list) {\n data = inferList(list, fields);\n }\n }\n dataSource.data = data;\n return dataSource instanceof HierarchicalDataSource ? dataSource : new HierarchicalDataSource(dataSource);\n };\n var Buffer = kendo.Observable.extend({\n init: function (dataSource, viewSize, disablePrefetch) {\n kendo.Observable.fn.init.call(this);\n this._prefetching = false;\n this.dataSource = dataSource;\n this.prefetch = !disablePrefetch;\n var buffer = this;\n dataSource.bind('change', function () {\n buffer._change();\n });\n dataSource.bind('reset', function () {\n buffer._reset();\n });\n this._syncWithDataSource();\n this.setViewSize(viewSize);\n },\n setViewSize: function (viewSize) {\n this.viewSize = viewSize;\n this._recalculate();\n },\n at: function (index) {\n var pageSize = this.pageSize, itemPresent = true;\n if (index >= this.total()) {\n this.trigger('endreached', { index: index });\n return null;\n }\n if (!this.useRanges) {\n return this.dataSource.view()[index];\n }\n if (this.useRanges) {\n if (index < this.dataOffset || index >= this.skip + pageSize) {\n itemPresent = this.range(Math.floor(index / pageSize) * pageSize);\n }\n if (index === this.prefetchThreshold) {\n this._prefetch();\n }\n if (index === this.midPageThreshold) {\n this.range(this.nextMidRange, true);\n } else if (index === this.nextPageThreshold) {\n this.range(this.nextFullRange);\n } else if (index === this.pullBackThreshold) {\n if (this.offset === this.skip) {\n this.range(this.previousMidRange);\n } else {\n this.range(this.previousFullRange);\n }\n }\n if (itemPresent) {\n return this.dataSource.at(index - this.dataOffset);\n } else {\n this.trigger('endreached', { index: index });\n return null;\n }\n }\n },\n indexOf: function (item) {\n return this.dataSource.data().indexOf(item) + this.dataOffset;\n },\n total: function () {\n return parseInt(this.dataSource.total(), 10);\n },\n next: function () {\n var buffer = this, pageSize = buffer.pageSize, offset = buffer.skip - buffer.viewSize + pageSize, pageSkip = math.max(math.floor(offset / pageSize), 0) * pageSize;\n this.offset = offset;\n this.dataSource.prefetch(pageSkip, pageSize, function () {\n buffer._goToRange(offset, true);\n });\n },\n range: function (offset, nextRange) {\n if (this.offset === offset) {\n return true;\n }\n var buffer = this, pageSize = this.pageSize, pageSkip = math.max(math.floor(offset / pageSize), 0) * pageSize, dataSource = this.dataSource;\n if (nextRange) {\n pageSkip += pageSize;\n }\n if (dataSource.inRange(offset, pageSize)) {\n this.offset = offset;\n this._recalculate();\n this._goToRange(offset);\n return true;\n } else if (this.prefetch) {\n dataSource.prefetch(pageSkip, pageSize, function () {\n buffer.offset = offset;\n buffer._recalculate();\n buffer._goToRange(offset, true);\n });\n return false;\n }\n return true;\n },\n syncDataSource: function () {\n var offset = this.offset;\n this.offset = null;\n this.range(offset);\n },\n destroy: function () {\n this.unbind();\n },\n _prefetch: function () {\n var buffer = this, pageSize = this.pageSize, prefetchOffset = this.skip + pageSize, dataSource = this.dataSource;\n if (!dataSource.inRange(prefetchOffset, pageSize) && !this._prefetching && this.prefetch) {\n this._prefetching = true;\n this.trigger('prefetching', {\n skip: prefetchOffset,\n take: pageSize\n });\n dataSource.prefetch(prefetchOffset, pageSize, function () {\n buffer._prefetching = false;\n buffer.trigger('prefetched', {\n skip: prefetchOffset,\n take: pageSize\n });\n });\n }\n },\n _goToRange: function (offset, expanding) {\n if (this.offset !== offset) {\n return;\n }\n this.dataOffset = offset;\n this._expanding = expanding;\n this.dataSource.range(offset, this.pageSize);\n this.dataSource.enableRequestsInProgress();\n },\n _reset: function () {\n this._syncPending = true;\n },\n _change: function () {\n var dataSource = this.dataSource;\n this.length = this.useRanges ? dataSource.lastRange().end : dataSource.view().length;\n if (this._syncPending) {\n this._syncWithDataSource();\n this._recalculate();\n this._syncPending = false;\n this.trigger('reset', { offset: this.offset });\n }\n this.trigger('resize');\n if (this._expanding) {\n this.trigger('expand');\n }\n delete this._expanding;\n },\n _syncWithDataSource: function () {\n var dataSource = this.dataSource;\n this._firstItemUid = dataSource.firstItemUid();\n this.dataOffset = this.offset = dataSource.skip() || 0;\n this.pageSize = dataSource.pageSize();\n this.useRanges = dataSource.options.serverPaging;\n },\n _recalculate: function () {\n var pageSize = this.pageSize, offset = this.offset, viewSize = this.viewSize, skip = Math.ceil(offset / pageSize) * pageSize;\n this.skip = skip;\n this.midPageThreshold = skip + pageSize - 1;\n this.nextPageThreshold = skip + viewSize - 1;\n this.prefetchThreshold = skip + Math.floor(pageSize / 3 * 2);\n this.pullBackThreshold = this.offset - 1;\n this.nextMidRange = skip + pageSize - viewSize;\n this.nextFullRange = skip;\n this.previousMidRange = offset - viewSize;\n this.previousFullRange = skip - pageSize;\n }\n });\n var BatchBuffer = kendo.Observable.extend({\n init: function (dataSource, batchSize) {\n var batchBuffer = this;\n kendo.Observable.fn.init.call(batchBuffer);\n this.dataSource = dataSource;\n this.batchSize = batchSize;\n this._total = 0;\n this.buffer = new Buffer(dataSource, batchSize * 3);\n this.buffer.bind({\n 'endreached': function (e) {\n batchBuffer.trigger('endreached', { index: e.index });\n },\n 'prefetching': function (e) {\n batchBuffer.trigger('prefetching', {\n skip: e.skip,\n take: e.take\n });\n },\n 'prefetched': function (e) {\n batchBuffer.trigger('prefetched', {\n skip: e.skip,\n take: e.take\n });\n },\n 'reset': function () {\n batchBuffer._total = 0;\n batchBuffer.trigger('reset');\n },\n 'resize': function () {\n batchBuffer._total = Math.ceil(this.length / batchBuffer.batchSize);\n batchBuffer.trigger('resize', {\n total: batchBuffer.total(),\n offset: this.offset\n });\n }\n });\n },\n syncDataSource: function () {\n this.buffer.syncDataSource();\n },\n at: function (index) {\n var buffer = this.buffer, skip = index * this.batchSize, take = this.batchSize, view = [], item;\n if (buffer.offset > skip) {\n buffer.at(buffer.offset - 1);\n }\n for (var i = 0; i < take; i++) {\n item = buffer.at(skip + i);\n if (item === null) {\n break;\n }\n view.push(item);\n }\n return view;\n },\n total: function () {\n return this._total;\n },\n destroy: function () {\n this.buffer.destroy();\n this.unbind();\n }\n });\n extend(true, kendo.data, {\n readers: { json: DataReader },\n Query: Query,\n DataSource: DataSource,\n HierarchicalDataSource: HierarchicalDataSource,\n Node: Node,\n Comparer: Comparer,\n ObservableObject: ObservableObject,\n ObservableArray: ObservableArray,\n LazyObservableArray: LazyObservableArray,\n LocalTransport: LocalTransport,\n RemoteTransport: RemoteTransport,\n Cache: Cache,\n DataReader: DataReader,\n Model: Model,\n Buffer: Buffer,\n BatchBuffer: BatchBuffer\n });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.binder', [\n 'kendo.core',\n 'kendo.data'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'binder',\n name: 'MVVM',\n category: 'framework',\n description: 'Model View ViewModel (MVVM) is a design pattern which helps developers separate the Model (the data) from the View (the UI).',\n depends: [\n 'core',\n 'data'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, Observable = kendo.Observable, ObservableObject = kendo.data.ObservableObject, ObservableArray = kendo.data.ObservableArray, toString = {}.toString, binders = {}, Class = kendo.Class, proxy = $.proxy, VALUE = 'value', SOURCE = 'source', EVENTS = 'events', CHECKED = 'checked', CSS = 'css', deleteExpando = true, FUNCTION = 'function', CHANGE = 'change';\n (function () {\n var a = document.createElement('a');\n try {\n delete a.test;\n } catch (e) {\n deleteExpando = false;\n }\n }());\n var Binding = Observable.extend({\n init: function (parents, path) {\n var that = this;\n Observable.fn.init.call(that);\n that.source = parents[0];\n that.parents = parents;\n that.path = path;\n that.dependencies = {};\n that.dependencies[path] = true;\n that.observable = that.source instanceof Observable;\n that._access = function (e) {\n that.dependencies[e.field] = true;\n };\n if (that.observable) {\n that._change = function (e) {\n that.change(e);\n };\n that.source.bind(CHANGE, that._change);\n }\n },\n _parents: function () {\n var parents = this.parents;\n var value = this.get();\n if (value && typeof value.parent == 'function') {\n var parent = value.parent();\n if ($.inArray(parent, parents) < 0) {\n parents = [parent].concat(parents);\n }\n }\n return parents;\n },\n change: function (e) {\n var dependency, ch, field = e.field, that = this;\n if (that.path === 'this') {\n that.trigger(CHANGE, e);\n } else {\n for (dependency in that.dependencies) {\n if (dependency.indexOf(field) === 0) {\n ch = dependency.charAt(field.length);\n if (!ch || ch === '.' || ch === '[') {\n that.trigger(CHANGE, e);\n break;\n }\n }\n }\n }\n },\n start: function (source) {\n source.bind('get', this._access);\n },\n stop: function (source) {\n source.unbind('get', this._access);\n },\n get: function () {\n var that = this, source = that.source, index = 0, path = that.path, result = source;\n if (!that.observable) {\n return result;\n }\n that.start(that.source);\n result = source.get(path);\n while (result === undefined && source) {\n source = that.parents[++index];\n if (source instanceof ObservableObject) {\n result = source.get(path);\n }\n }\n if (result === undefined) {\n source = that.source;\n while (result === undefined && source) {\n source = source.parent();\n if (source instanceof ObservableObject) {\n result = source.get(path);\n }\n }\n }\n if (typeof result === 'function') {\n index = path.lastIndexOf('.');\n if (index > 0) {\n source = source.get(path.substring(0, index));\n }\n that.start(source);\n if (source !== that.source) {\n result = result.call(source, that.source);\n } else {\n result = result.call(source);\n }\n that.stop(source);\n }\n if (source && source !== that.source) {\n that.currentSource = source;\n source.unbind(CHANGE, that._change).bind(CHANGE, that._change);\n }\n that.stop(that.source);\n return result;\n },\n set: function (value) {\n var source = this.currentSource || this.source;\n var field = kendo.getter(this.path)(source);\n if (typeof field === 'function') {\n if (source !== this.source) {\n field.call(source, this.source, value);\n } else {\n field.call(source, value);\n }\n } else {\n source.set(this.path, value);\n }\n },\n destroy: function () {\n if (this.observable) {\n this.source.unbind(CHANGE, this._change);\n if (this.currentSource) {\n this.currentSource.unbind(CHANGE, this._change);\n }\n }\n this.unbind();\n }\n });\n var EventBinding = Binding.extend({\n get: function () {\n var source = this.source, path = this.path, index = 0, handler;\n handler = source.get(path);\n while (!handler && source) {\n source = this.parents[++index];\n if (source instanceof ObservableObject) {\n handler = source.get(path);\n }\n }\n return proxy(handler, source);\n }\n });\n var TemplateBinding = Binding.extend({\n init: function (source, path, template) {\n var that = this;\n Binding.fn.init.call(that, source, path);\n that.template = template;\n },\n render: function (value) {\n var html;\n this.start(this.source);\n html = kendo.render(this.template, value);\n this.stop(this.source);\n return html;\n }\n });\n var Binder = Class.extend({\n init: function (element, bindings, options) {\n this.element = element;\n this.bindings = bindings;\n this.options = options;\n },\n bind: function (binding, attribute) {\n var that = this;\n binding = attribute ? binding[attribute] : binding;\n binding.bind(CHANGE, function (e) {\n that.refresh(attribute || e);\n });\n that.refresh(attribute);\n },\n destroy: function () {\n }\n });\n var TypedBinder = Binder.extend({\n dataType: function () {\n var dataType = this.element.getAttribute('data-' + kendo.ns + 'type') || this.element.type || 'text';\n return dataType.toLowerCase();\n },\n parsedValue: function () {\n return this._parseValue(this.element.value, this.dataType());\n },\n _parseValue: function (value, dataType) {\n if (dataType == 'date') {\n value = kendo.parseDate(value, 'yyyy-MM-dd');\n } else if (dataType == 'datetime-local') {\n value = kendo.parseDate(value, [\n 'yyyy-MM-ddTHH:mm:ss',\n 'yyyy-MM-ddTHH:mm'\n ]);\n } else if (dataType == 'number') {\n value = kendo.parseFloat(value);\n } else if (dataType == 'boolean') {\n value = value.toLowerCase();\n if (kendo.parseFloat(value) !== null) {\n value = Boolean(kendo.parseFloat(value));\n } else {\n value = value.toLowerCase() === 'true';\n }\n }\n return value;\n }\n });\n binders.attr = Binder.extend({\n refresh: function (key) {\n this.element.setAttribute(key, this.bindings.attr[key].get());\n }\n });\n binders.css = Binder.extend({\n init: function (element, bindings, options) {\n Binder.fn.init.call(this, element, bindings, options);\n this.classes = {};\n },\n refresh: function (className) {\n var element = $(this.element), binding = this.bindings.css[className], hasClass = this.classes[className] = binding.get();\n if (hasClass) {\n element.addClass(className);\n } else {\n element.removeClass(className);\n }\n }\n });\n binders.style = Binder.extend({\n refresh: function (key) {\n this.element.style[key] = this.bindings.style[key].get() || '';\n }\n });\n binders.enabled = Binder.extend({\n refresh: function () {\n if (this.bindings.enabled.get()) {\n this.element.removeAttribute('disabled');\n } else {\n this.element.setAttribute('disabled', 'disabled');\n }\n }\n });\n binders.readonly = Binder.extend({\n refresh: function () {\n if (this.bindings.readonly.get()) {\n this.element.setAttribute('readonly', 'readonly');\n } else {\n this.element.removeAttribute('readonly');\n }\n }\n });\n binders.disabled = Binder.extend({\n refresh: function () {\n if (this.bindings.disabled.get()) {\n this.element.setAttribute('disabled', 'disabled');\n } else {\n this.element.removeAttribute('disabled');\n }\n }\n });\n binders.events = Binder.extend({\n init: function (element, bindings, options) {\n Binder.fn.init.call(this, element, bindings, options);\n this.handlers = {};\n },\n refresh: function (key) {\n var element = $(this.element), binding = this.bindings.events[key], handler = this.handlers[key];\n if (handler) {\n element.off(key, handler);\n }\n handler = this.handlers[key] = binding.get();\n element.on(key, binding.source, handler);\n },\n destroy: function () {\n var element = $(this.element), handler;\n for (handler in this.handlers) {\n element.off(handler, this.handlers[handler]);\n }\n }\n });\n binders.text = Binder.extend({\n refresh: function () {\n var text = this.bindings.text.get();\n var dataFormat = this.element.getAttribute('data-' + kendo.ns + 'format') || '';\n if (text == null) {\n text = '';\n }\n $(this.element).text(kendo.toString(text, dataFormat));\n }\n });\n binders.visible = Binder.extend({\n refresh: function () {\n if (this.bindings.visible.get()) {\n this.element.style.display = '';\n } else {\n this.element.style.display = 'none';\n }\n }\n });\n binders.invisible = Binder.extend({\n refresh: function () {\n if (!this.bindings.invisible.get()) {\n this.element.style.display = '';\n } else {\n this.element.style.display = 'none';\n }\n }\n });\n binders.html = Binder.extend({\n refresh: function () {\n this.element.innerHTML = this.bindings.html.get();\n }\n });\n binders.value = TypedBinder.extend({\n init: function (element, bindings, options) {\n TypedBinder.fn.init.call(this, element, bindings, options);\n this._change = proxy(this.change, this);\n this.eventName = options.valueUpdate || CHANGE;\n $(this.element).on(this.eventName, this._change);\n this._initChange = false;\n },\n change: function () {\n this._initChange = this.eventName != CHANGE;\n this.bindings[VALUE].set(this.parsedValue());\n this._initChange = false;\n },\n refresh: function () {\n if (!this._initChange) {\n var value = this.bindings[VALUE].get();\n if (value == null) {\n value = '';\n }\n var type = this.dataType();\n if (type == 'date') {\n value = kendo.toString(value, 'yyyy-MM-dd');\n } else if (type == 'datetime-local') {\n value = kendo.toString(value, 'yyyy-MM-ddTHH:mm:ss');\n }\n this.element.value = value;\n }\n this._initChange = false;\n },\n destroy: function () {\n $(this.element).off(this.eventName, this._change);\n }\n });\n binders.source = Binder.extend({\n init: function (element, bindings, options) {\n Binder.fn.init.call(this, element, bindings, options);\n var source = this.bindings.source.get();\n if (source instanceof kendo.data.DataSource && options.autoBind !== false) {\n source.fetch();\n }\n },\n refresh: function (e) {\n var that = this, source = that.bindings.source.get();\n if (source instanceof ObservableArray || source instanceof kendo.data.DataSource) {\n e = e || {};\n if (e.action == 'add') {\n that.add(e.index, e.items);\n } else if (e.action == 'remove') {\n that.remove(e.index, e.items);\n } else if (e.action != 'itemchange') {\n that.render();\n }\n } else {\n that.render();\n }\n },\n container: function () {\n var element = this.element;\n if (element.nodeName.toLowerCase() == 'table') {\n if (!element.tBodies[0]) {\n element.appendChild(document.createElement('tbody'));\n }\n element = element.tBodies[0];\n }\n return element;\n },\n template: function () {\n var options = this.options, template = options.template, nodeName = this.container().nodeName.toLowerCase();\n if (!template) {\n if (nodeName == 'select') {\n if (options.valueField || options.textField) {\n template = kendo.format('<option value=\"#:{0}#\">#:{1}#</option>', options.valueField || options.textField, options.textField || options.valueField);\n } else {\n template = '<option>#:data#</option>';\n }\n } else if (nodeName == 'tbody') {\n template = '<tr><td>#:data#</td></tr>';\n } else if (nodeName == 'ul' || nodeName == 'ol') {\n template = '<li>#:data#</li>';\n } else {\n template = '#:data#';\n }\n template = kendo.template(template);\n }\n return template;\n },\n add: function (index, items) {\n var element = this.container(), parents, idx, length, child, clone = element.cloneNode(false), reference = element.children[index];\n $(clone).html(kendo.render(this.template(), items));\n if (clone.children.length) {\n parents = this.bindings.source._parents();\n for (idx = 0, length = items.length; idx < length; idx++) {\n child = clone.children[0];\n element.insertBefore(child, reference || null);\n bindElement(child, items[idx], this.options.roles, [items[idx]].concat(parents));\n }\n }\n },\n remove: function (index, items) {\n var idx, element = this.container();\n for (idx = 0; idx < items.length; idx++) {\n var child = element.children[index];\n unbindElementTree(child, true);\n if (child.parentNode == element) {\n element.removeChild(child);\n }\n }\n },\n render: function () {\n var source = this.bindings.source.get(), parents, idx, length, element = this.container(), template = this.template();\n if (source == null) {\n return;\n }\n if (source instanceof kendo.data.DataSource) {\n source = source.view();\n }\n if (!(source instanceof ObservableArray) && toString.call(source) !== '[object Array]') {\n source = [source];\n }\n if (this.bindings.template) {\n unbindElementChildren(element, true);\n $(element).html(this.bindings.template.render(source));\n if (element.children.length) {\n parents = this.bindings.source._parents();\n for (idx = 0, length = source.length; idx < length; idx++) {\n bindElement(element.children[idx], source[idx], this.options.roles, [source[idx]].concat(parents));\n }\n }\n } else {\n $(element).html(kendo.render(template, source));\n }\n }\n });\n binders.input = {\n checked: TypedBinder.extend({\n init: function (element, bindings, options) {\n TypedBinder.fn.init.call(this, element, bindings, options);\n this._change = proxy(this.change, this);\n $(this.element).change(this._change);\n },\n change: function () {\n var element = this.element;\n var value = this.value();\n if (element.type == 'radio') {\n value = this.parsedValue();\n this.bindings[CHECKED].set(value);\n } else if (element.type == 'checkbox') {\n var source = this.bindings[CHECKED].get();\n var index;\n if (source instanceof ObservableArray) {\n value = this.parsedValue();\n if (value instanceof Date) {\n for (var i = 0; i < source.length; i++) {\n if (source[i] instanceof Date && +source[i] === +value) {\n index = i;\n break;\n }\n }\n } else {\n index = source.indexOf(value);\n }\n if (index > -1) {\n source.splice(index, 1);\n } else {\n source.push(value);\n }\n } else {\n this.bindings[CHECKED].set(value);\n }\n }\n },\n refresh: function () {\n var value = this.bindings[CHECKED].get(), source = value, type = this.dataType(), element = this.element;\n if (element.type == 'checkbox') {\n if (source instanceof ObservableArray) {\n var index = -1;\n value = this.parsedValue();\n if (value instanceof Date) {\n for (var i = 0; i < source.length; i++) {\n if (source[i] instanceof Date && +source[i] === +value) {\n index = i;\n break;\n }\n }\n } else {\n index = source.indexOf(value);\n }\n element.checked = index >= 0;\n } else {\n element.checked = source;\n }\n } else if (element.type == 'radio') {\n if (type == 'date') {\n value = kendo.toString(value, 'yyyy-MM-dd');\n } else if (type == 'datetime-local') {\n value = kendo.toString(value, 'yyyy-MM-ddTHH:mm:ss');\n }\n if (value !== null && typeof value !== 'undefined' && element.value === value.toString()) {\n element.checked = true;\n } else {\n element.checked = false;\n }\n }\n },\n value: function () {\n var element = this.element, value = element.value;\n if (element.type == 'checkbox') {\n value = element.checked;\n }\n return value;\n },\n destroy: function () {\n $(this.element).off(CHANGE, this._change);\n }\n })\n };\n binders.select = {\n source: binders.source.extend({\n refresh: function (e) {\n var that = this, source = that.bindings.source.get();\n if (source instanceof ObservableArray || source instanceof kendo.data.DataSource) {\n e = e || {};\n if (e.action == 'add') {\n that.add(e.index, e.items);\n } else if (e.action == 'remove') {\n that.remove(e.index, e.items);\n } else if (e.action == 'itemchange' || e.action === undefined) {\n that.render();\n if (that.bindings.value) {\n if (that.bindings.value) {\n var val = retrievePrimitiveValues(that.bindings.value.get(), $(that.element).data('valueField'));\n if (val === null) {\n that.element.selectedIndex = -1;\n } else {\n that.element.value = val;\n }\n }\n }\n }\n } else {\n that.render();\n }\n }\n }),\n value: TypedBinder.extend({\n init: function (target, bindings, options) {\n TypedBinder.fn.init.call(this, target, bindings, options);\n this._change = proxy(this.change, this);\n $(this.element).change(this._change);\n },\n parsedValue: function () {\n var dataType = this.dataType();\n var values = [];\n var value, option, idx, length;\n for (idx = 0, length = this.element.options.length; idx < length; idx++) {\n option = this.element.options[idx];\n if (option.selected) {\n value = option.attributes.value;\n if (value && value.specified) {\n value = option.value;\n } else {\n value = option.text;\n }\n values.push(this._parseValue(value, dataType));\n }\n }\n return values;\n },\n change: function () {\n var values = [], element = this.element, source, field = this.options.valueField || this.options.textField, valuePrimitive = this.options.valuePrimitive, option, valueIndex, value, idx, length;\n for (idx = 0, length = element.options.length; idx < length; idx++) {\n option = element.options[idx];\n if (option.selected) {\n value = option.attributes.value;\n if (value && value.specified) {\n value = option.value;\n } else {\n value = option.text;\n }\n if (field) {\n values.push(value);\n } else {\n values.push(this._parseValue(value, this.dataType()));\n }\n }\n }\n if (field) {\n source = this.bindings.source.get();\n if (source instanceof kendo.data.DataSource) {\n source = source.view();\n }\n for (valueIndex = 0; valueIndex < values.length; valueIndex++) {\n for (idx = 0, length = source.length; idx < length; idx++) {\n var sourceValue = source[idx].get(field);\n var match = String(sourceValue) === values[valueIndex];\n if (match) {\n values[valueIndex] = source[idx];\n break;\n }\n }\n }\n }\n value = this.bindings[VALUE].get();\n if (value instanceof ObservableArray) {\n value.splice.apply(value, [\n 0,\n value.length\n ].concat(values));\n } else if (!valuePrimitive && (value instanceof ObservableObject || value === null || value === undefined || !field)) {\n this.bindings[VALUE].set(values[0]);\n } else {\n this.bindings[VALUE].set(values[0].get(field));\n }\n },\n refresh: function () {\n var optionIndex, element = this.element, options = element.options, value = this.bindings[VALUE].get(), values = value, field = this.options.valueField || this.options.textField, found = false, type = this.dataType(), optionValue;\n if (!(values instanceof ObservableArray)) {\n values = new ObservableArray([value]);\n }\n element.selectedIndex = -1;\n for (var valueIndex = 0; valueIndex < values.length; valueIndex++) {\n value = values[valueIndex];\n if (field && value instanceof ObservableObject) {\n value = value.get(field);\n }\n if (type == 'date') {\n value = kendo.toString(values[valueIndex], 'yyyy-MM-dd');\n } else if (type == 'datetime-local') {\n value = kendo.toString(values[valueIndex], 'yyyy-MM-ddTHH:mm:ss');\n }\n for (optionIndex = 0; optionIndex < options.length; optionIndex++) {\n optionValue = options[optionIndex].value;\n if (optionValue === '' && value !== '') {\n optionValue = options[optionIndex].text;\n }\n if (value != null && optionValue == value.toString()) {\n options[optionIndex].selected = true;\n found = true;\n }\n }\n }\n },\n destroy: function () {\n $(this.element).off(CHANGE, this._change);\n }\n })\n };\n function dataSourceBinding(bindingName, fieldName, setter) {\n return Binder.extend({\n init: function (widget, bindings, options) {\n var that = this;\n Binder.fn.init.call(that, widget.element[0], bindings, options);\n that.widget = widget;\n that._dataBinding = proxy(that.dataBinding, that);\n that._dataBound = proxy(that.dataBound, that);\n that._itemChange = proxy(that.itemChange, that);\n },\n itemChange: function (e) {\n bindElement(e.item[0], e.data, this._ns(e.ns), [e.data].concat(this.bindings[bindingName]._parents()));\n },\n dataBinding: function (e) {\n var idx, length, widget = this.widget, items = e.removedItems || widget.items();\n for (idx = 0, length = items.length; idx < length; idx++) {\n unbindElementTree(items[idx], false);\n }\n },\n _ns: function (ns) {\n ns = ns || kendo.ui;\n var all = [\n kendo.ui,\n kendo.dataviz.ui,\n kendo.mobile.ui\n ];\n all.splice($.inArray(ns, all), 1);\n all.unshift(ns);\n return kendo.rolesFromNamespaces(all);\n },\n dataBound: function (e) {\n var idx, length, widget = this.widget, items = e.addedItems || widget.items(), dataSource = widget[fieldName], view, parents, hds = kendo.data.HierarchicalDataSource;\n if (hds && dataSource instanceof hds) {\n return;\n }\n if (items.length) {\n view = e.addedDataItems || dataSource.flatView();\n parents = this.bindings[bindingName]._parents();\n for (idx = 0, length = view.length; idx < length; idx++) {\n if (items[idx]) {\n bindElement(items[idx], view[idx], this._ns(e.ns), [view[idx]].concat(parents));\n }\n }\n }\n },\n refresh: function (e) {\n var that = this, source, widget = that.widget, select, multiselect, dropdowntree;\n e = e || {};\n if (!e.action) {\n that.destroy();\n widget.bind('dataBinding', that._dataBinding);\n widget.bind('dataBound', that._dataBound);\n widget.bind('itemChange', that._itemChange);\n source = that.bindings[bindingName].get();\n if (widget[fieldName] instanceof kendo.data.DataSource && widget[fieldName] != source) {\n if (source instanceof kendo.data.DataSource) {\n widget[setter](source);\n } else if (source && source._dataSource) {\n widget[setter](source._dataSource);\n } else {\n select = kendo.ui.Select && widget instanceof kendo.ui.Select;\n multiselect = kendo.ui.MultiSelect && widget instanceof kendo.ui.MultiSelect;\n dropdowntree = kendo.ui.DropDownTree && widget instanceof kendo.ui.DropDownTree;\n if (!dropdowntree) {\n widget[fieldName].data(source);\n } else {\n widget.treeview[fieldName].data(source);\n }\n if (that.bindings.value && (select || multiselect)) {\n widget.value(retrievePrimitiveValues(that.bindings.value.get(), widget.options.dataValueField));\n }\n }\n }\n }\n },\n destroy: function () {\n var widget = this.widget;\n widget.unbind('dataBinding', this._dataBinding);\n widget.unbind('dataBound', this._dataBound);\n widget.unbind('itemChange', this._itemChange);\n }\n });\n }\n binders.widget = {\n events: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n this.handlers = {};\n },\n refresh: function (key) {\n var binding = this.bindings.events[key], handler = this.handlers[key];\n if (handler) {\n this.widget.unbind(key, handler);\n }\n handler = binding.get();\n this.handlers[key] = function (e) {\n e.data = binding.source;\n handler(e);\n if (e.data === binding.source) {\n delete e.data;\n }\n };\n this.widget.bind(key, this.handlers[key]);\n },\n destroy: function () {\n var handler;\n for (handler in this.handlers) {\n this.widget.unbind(handler, this.handlers[handler]);\n }\n }\n }),\n checked: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n this._change = proxy(this.change, this);\n this.widget.bind(CHANGE, this._change);\n },\n change: function () {\n this.bindings[CHECKED].set(this.value());\n },\n refresh: function () {\n this.widget.check(this.bindings[CHECKED].get() === true);\n },\n value: function () {\n var element = this.element, value = element.value;\n if (value == 'on' || value == 'off' || this.element.type == 'checkbox') {\n value = element.checked;\n }\n return value;\n },\n destroy: function () {\n this.widget.unbind(CHANGE, this._change);\n }\n }),\n start: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this._change = proxy(this.change, this);\n this.widget = widget;\n this.widget.bind(CHANGE, this._change);\n },\n change: function () {\n this.bindings.start.set(this.widget.range().start);\n },\n refresh: function () {\n var that = this;\n var start = this.bindings.start.get();\n var end = that.widget._range ? that.widget._range.end : null;\n this.widget.range({\n start: start,\n end: end\n });\n },\n destroy: function () {\n this.widget.unbind(CHANGE, this._change);\n }\n }),\n end: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this._change = proxy(this.change, this);\n this.widget = widget;\n this.widget.bind(CHANGE, this._change);\n },\n change: function () {\n this.bindings.end.set(this.widget.range().end);\n },\n refresh: function () {\n var that = this;\n var end = this.bindings.end.get();\n var start = that.widget._range ? that.widget._range.start : null;\n this.widget.range({\n start: start,\n end: end\n });\n },\n destroy: function () {\n this.widget.unbind(CHANGE, this._change);\n }\n }),\n visible: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n },\n refresh: function () {\n var visible = this.bindings.visible.get();\n this.widget.wrapper[0].style.display = visible ? '' : 'none';\n }\n }),\n invisible: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n },\n refresh: function () {\n var invisible = this.bindings.invisible.get();\n this.widget.wrapper[0].style.display = invisible ? 'none' : '';\n }\n }),\n enabled: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n },\n refresh: function () {\n if (this.widget.enable) {\n this.widget.enable(this.bindings.enabled.get());\n }\n }\n }),\n disabled: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n },\n refresh: function () {\n if (this.widget.enable) {\n this.widget.enable(!this.bindings.disabled.get());\n }\n }\n }),\n source: dataSourceBinding('source', 'dataSource', 'setDataSource'),\n value: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n this._change = $.proxy(this.change, this);\n this.widget.first(CHANGE, this._change);\n var value = this.bindings.value.get();\n this._valueIsObservableObject = !options.valuePrimitive && (value == null || value instanceof ObservableObject);\n this._valueIsObservableArray = value instanceof ObservableArray;\n this._initChange = false;\n },\n _source: function () {\n var source;\n if (this.widget.dataItem) {\n source = this.widget.dataItem();\n if (source && source instanceof ObservableObject) {\n return [source];\n }\n }\n if (this.bindings.source) {\n source = this.bindings.source.get();\n }\n if (!source || source instanceof kendo.data.DataSource) {\n source = this.widget.dataSource.flatView();\n }\n return source;\n },\n change: function () {\n var value = this.widget.value(), field = this.options.dataValueField || this.options.dataTextField, isArray = toString.call(value) === '[object Array]', isObservableObject = this._valueIsObservableObject, valueIndex, valueLength, values = [], sourceItem, sourceValue, idx, length, source;\n this._initChange = true;\n if (field) {\n if (value === '' && (isObservableObject || this.options.valuePrimitive)) {\n value = null;\n } else {\n source = this._source();\n if (isArray) {\n valueLength = value.length;\n values = value.slice(0);\n }\n for (idx = 0, length = source.length; idx < length; idx++) {\n sourceItem = source[idx];\n sourceValue = sourceItem.get(field);\n if (isArray) {\n for (valueIndex = 0; valueIndex < valueLength; valueIndex++) {\n if (sourceValue == values[valueIndex]) {\n values[valueIndex] = sourceItem;\n break;\n }\n }\n } else if (sourceValue == value) {\n value = isObservableObject ? sourceItem : sourceValue;\n break;\n }\n }\n if (values[0]) {\n if (this._valueIsObservableArray) {\n value = values;\n } else if (isObservableObject || !field) {\n value = values[0];\n } else {\n value = values[0].get(field);\n }\n }\n }\n }\n this.bindings.value.set(value);\n this._initChange = false;\n },\n refresh: function () {\n if (!this._initChange) {\n var widget = this.widget;\n var options = widget.options;\n var textField = options.dataTextField;\n var valueField = options.dataValueField || textField;\n var value = this.bindings.value.get();\n var text = options.text || '';\n var idx = 0, length;\n var values = [];\n if (value === undefined) {\n value = null;\n }\n if (valueField) {\n if (value instanceof ObservableArray) {\n for (length = value.length; idx < length; idx++) {\n values[idx] = value[idx].get(valueField);\n }\n value = values;\n } else if (value instanceof ObservableObject) {\n text = value.get(textField);\n value = value.get(valueField);\n }\n }\n if (options.autoBind === false && !options.cascadeFrom && widget.listView && !widget.listView.bound()) {\n if (textField === valueField && !text) {\n text = value;\n }\n if (!text && (value || value === 0) && options.valuePrimitive) {\n widget.value(value);\n } else {\n widget._preselect(value, text);\n }\n } else {\n widget.value(value);\n }\n }\n this._initChange = false;\n },\n destroy: function () {\n this.widget.unbind(CHANGE, this._change);\n }\n }),\n dropdowntree: {\n value: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n this._change = $.proxy(this.change, this);\n this.widget.first(CHANGE, this._change);\n this._initChange = false;\n },\n change: function () {\n var that = this, oldValues = that.bindings[VALUE].get(), valuePrimitive = that.options.valuePrimitive, selectedNode = that.widget.treeview.select(), nonPrimitiveValues = that.widget._isMultipleSelection() ? that.widget._getAllChecked() : that.widget.treeview.dataItem(selectedNode) || that.widget.value(), newValues = valuePrimitive || that.widget.options.autoBind === false ? that.widget.value() : nonPrimitiveValues;\n var field = this.options.dataValueField || this.options.dataTextField;\n newValues = newValues.slice ? newValues.slice(0) : newValues;\n that._initChange = true;\n if (oldValues instanceof ObservableArray) {\n var remove = [];\n var newLength = newValues.length;\n var i = 0, j = 0;\n var old = oldValues[i];\n var same = false;\n var removeIndex;\n var newValue;\n var found;\n while (old !== undefined) {\n found = false;\n for (j = 0; j < newLength; j++) {\n if (valuePrimitive) {\n same = newValues[j] == old;\n } else {\n newValue = newValues[j];\n newValue = newValue.get ? newValue.get(field) : newValue;\n same = newValue == (old.get ? old.get(field) : old);\n }\n if (same) {\n newValues.splice(j, 1);\n newLength -= 1;\n found = true;\n break;\n }\n }\n if (!found) {\n remove.push(old);\n arraySplice(oldValues, i, 1);\n removeIndex = i;\n } else {\n i += 1;\n }\n old = oldValues[i];\n }\n arraySplice(oldValues, oldValues.length, 0, newValues);\n if (remove.length) {\n oldValues.trigger('change', {\n action: 'remove',\n items: remove,\n index: removeIndex\n });\n }\n if (newValues.length) {\n oldValues.trigger('change', {\n action: 'add',\n items: newValues,\n index: oldValues.length - 1\n });\n }\n } else {\n that.bindings[VALUE].set(newValues);\n }\n that._initChange = false;\n },\n refresh: function () {\n if (!this._initChange) {\n var options = this.options, widget = this.widget, field = options.dataValueField || options.dataTextField, value = this.bindings.value.get(), data = value, idx = 0, length, values = [], selectedValue;\n if (field) {\n if (value instanceof ObservableArray) {\n for (length = value.length; idx < length; idx++) {\n selectedValue = value[idx];\n values[idx] = selectedValue.get ? selectedValue.get(field) : selectedValue;\n }\n value = values;\n } else if (value instanceof ObservableObject) {\n value = value.get(field);\n }\n }\n if (options.autoBind === false && options.valuePrimitive !== true) {\n widget._preselect(data, value);\n } else {\n widget.value(value);\n }\n }\n },\n destroy: function () {\n this.widget.unbind(CHANGE, this._change);\n }\n })\n },\n gantt: { dependencies: dataSourceBinding('dependencies', 'dependencies', 'setDependenciesDataSource') },\n multiselect: {\n value: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n this._change = $.proxy(this.change, this);\n this.widget.first(CHANGE, this._change);\n this._initChange = false;\n },\n change: function () {\n var that = this, oldValues = that.bindings[VALUE].get(), valuePrimitive = that.options.valuePrimitive, newValues = valuePrimitive ? that.widget.value() : that.widget.dataItems();\n var field = this.options.dataValueField || this.options.dataTextField;\n newValues = newValues.slice(0);\n that._initChange = true;\n if (oldValues instanceof ObservableArray) {\n var remove = [];\n var newLength = newValues.length;\n var i = 0, j = 0;\n var old = oldValues[i];\n var same = false;\n var removeIndex;\n var newValue;\n var found;\n while (old !== undefined) {\n found = false;\n for (j = 0; j < newLength; j++) {\n if (valuePrimitive) {\n same = newValues[j] == old;\n } else {\n newValue = newValues[j];\n newValue = newValue.get ? newValue.get(field) : newValue;\n same = newValue == (old.get ? old.get(field) : old);\n }\n if (same) {\n newValues.splice(j, 1);\n newLength -= 1;\n found = true;\n break;\n }\n }\n if (!found) {\n remove.push(old);\n arraySplice(oldValues, i, 1);\n removeIndex = i;\n } else {\n i += 1;\n }\n old = oldValues[i];\n }\n arraySplice(oldValues, oldValues.length, 0, newValues);\n if (remove.length) {\n oldValues.trigger('change', {\n action: 'remove',\n items: remove,\n index: removeIndex\n });\n }\n if (newValues.length) {\n oldValues.trigger('change', {\n action: 'add',\n items: newValues,\n index: oldValues.length - 1\n });\n }\n } else {\n that.bindings[VALUE].set(newValues);\n }\n that._initChange = false;\n },\n refresh: function () {\n if (!this._initChange) {\n var options = this.options, widget = this.widget, field = options.dataValueField || options.dataTextField, value = this.bindings.value.get(), data = value, idx = 0, length, values = [], selectedValue;\n if (value === undefined) {\n value = null;\n }\n if (field) {\n if (value instanceof ObservableArray) {\n for (length = value.length; idx < length; idx++) {\n selectedValue = value[idx];\n values[idx] = selectedValue.get ? selectedValue.get(field) : selectedValue;\n }\n value = values;\n } else if (value instanceof ObservableObject) {\n value = value.get(field);\n }\n }\n if (options.autoBind === false && options.valuePrimitive !== true && !widget._isBound()) {\n widget._preselect(data, value);\n } else {\n widget.value(value);\n }\n }\n },\n destroy: function () {\n this.widget.unbind(CHANGE, this._change);\n }\n })\n },\n scheduler: {\n source: dataSourceBinding('source', 'dataSource', 'setDataSource').extend({\n dataBound: function (e) {\n var idx;\n var length;\n var widget = this.widget;\n var elements = e.addedItems || widget.items();\n var data, parents;\n if (elements.length) {\n data = e.addedDataItems || widget.dataItems();\n parents = this.bindings.source._parents();\n for (idx = 0, length = data.length; idx < length; idx++) {\n bindElement(elements[idx], data[idx], this._ns(e.ns), [data[idx]].concat(parents));\n }\n }\n }\n })\n },\n grid: {\n source: dataSourceBinding('source', 'dataSource', 'setDataSource').extend({\n dataBound: function (e) {\n var idx, length, widget = this.widget, elements = e.addedItems || widget.items(), parents, data;\n if (elements.length) {\n data = e.addedDataItems || widget.dataItems();\n parents = this.bindings.source._parents();\n for (idx = 0, length = data.length; idx < length; idx++) {\n bindElement(elements[idx], data[idx], this._ns(e.ns), [data[idx]].concat(parents));\n }\n }\n }\n })\n },\n badge: {\n text: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n },\n refresh: function () {\n var text = this.bindings.text.get();\n if (text == null) {\n text = '';\n }\n this.widget.text(text);\n }\n })\n }\n };\n var arraySplice = function (arr, idx, remove, add) {\n add = add || [];\n remove = remove || 0;\n var addLength = add.length;\n var oldLength = arr.length;\n var shifted = [].slice.call(arr, idx + remove);\n var shiftedLength = shifted.length;\n var index;\n if (addLength) {\n addLength = idx + addLength;\n index = 0;\n for (; idx < addLength; idx++) {\n arr[idx] = add[index];\n index++;\n }\n arr.length = addLength;\n } else if (remove) {\n arr.length = idx;\n remove += idx;\n while (idx < remove) {\n delete arr[--remove];\n }\n }\n if (shiftedLength) {\n shiftedLength = idx + shiftedLength;\n index = 0;\n for (; idx < shiftedLength; idx++) {\n arr[idx] = shifted[index];\n index++;\n }\n arr.length = shiftedLength;\n }\n idx = arr.length;\n while (idx < oldLength) {\n delete arr[idx];\n idx++;\n }\n };\n var BindingTarget = Class.extend({\n init: function (target, options) {\n this.target = target;\n this.options = options;\n this.toDestroy = [];\n },\n bind: function (bindings) {\n var key, hasValue, hasSource, hasEvents, hasChecked, hasCss, widgetBinding = this instanceof WidgetBindingTarget, specificBinders = this.binders();\n for (key in bindings) {\n if (key == VALUE) {\n hasValue = true;\n } else if (key == SOURCE) {\n hasSource = true;\n } else if (key == EVENTS && !widgetBinding) {\n hasEvents = true;\n } else if (key == CHECKED) {\n hasChecked = true;\n } else if (key == CSS) {\n hasCss = true;\n } else {\n this.applyBinding(key, bindings, specificBinders);\n }\n }\n if (hasSource) {\n this.applyBinding(SOURCE, bindings, specificBinders);\n }\n if (hasValue) {\n this.applyBinding(VALUE, bindings, specificBinders);\n }\n if (hasChecked) {\n this.applyBinding(CHECKED, bindings, specificBinders);\n }\n if (hasEvents && !widgetBinding) {\n this.applyBinding(EVENTS, bindings, specificBinders);\n }\n if (hasCss && !widgetBinding) {\n this.applyBinding(CSS, bindings, specificBinders);\n }\n },\n binders: function () {\n return binders[this.target.nodeName.toLowerCase()] || {};\n },\n applyBinding: function (name, bindings, specificBinders) {\n var binder = specificBinders[name] || binders[name], toDestroy = this.toDestroy, attribute, binding = bindings[name];\n if (binder) {\n binder = new binder(this.target, bindings, this.options);\n toDestroy.push(binder);\n if (binding instanceof Binding) {\n binder.bind(binding);\n toDestroy.push(binding);\n } else {\n for (attribute in binding) {\n binder.bind(binding, attribute);\n toDestroy.push(binding[attribute]);\n }\n }\n } else if (name !== 'template') {\n throw new Error('The ' + name + ' binding is not supported by the ' + this.target.nodeName.toLowerCase() + ' element');\n }\n },\n destroy: function () {\n var idx, length, toDestroy = this.toDestroy;\n for (idx = 0, length = toDestroy.length; idx < length; idx++) {\n toDestroy[idx].destroy();\n }\n }\n });\n var WidgetBindingTarget = BindingTarget.extend({\n binders: function () {\n return binders.widget[this.target.options.name.toLowerCase()] || {};\n },\n applyBinding: function (name, bindings, specificBinders) {\n var binder = specificBinders[name] || binders.widget[name], toDestroy = this.toDestroy, attribute, binding = bindings[name];\n if (binder) {\n binder = new binder(this.target, bindings, this.target.options);\n toDestroy.push(binder);\n if (binding instanceof Binding) {\n binder.bind(binding);\n toDestroy.push(binding);\n } else {\n for (attribute in binding) {\n binder.bind(binding, attribute);\n toDestroy.push(binding[attribute]);\n }\n }\n } else {\n throw new Error('The ' + name + ' binding is not supported by the ' + this.target.options.name + ' widget');\n }\n }\n });\n function bindingTargetForRole(element, roles) {\n var widget = kendo.initWidget(element, {}, roles);\n if (widget) {\n return new WidgetBindingTarget(widget);\n }\n }\n var keyValueRegExp = /[A-Za-z0-9_\\-]+:(\\{([^}]*)\\}|[^,}]+)/g, whiteSpaceRegExp = /\\s/g;\n function parseBindings(bind) {\n var result = {}, idx, length, token, colonIndex, key, value, tokens;\n tokens = bind.match(keyValueRegExp);\n for (idx = 0, length = tokens.length; idx < length; idx++) {\n token = tokens[idx];\n colonIndex = token.indexOf(':');\n key = token.substring(0, colonIndex);\n value = token.substring(colonIndex + 1);\n if (value.charAt(0) == '{') {\n value = parseBindings(value);\n }\n result[key] = value;\n }\n return result;\n }\n function createBindings(bindings, source, type) {\n var binding, result = {};\n for (binding in bindings) {\n result[binding] = new type(source, bindings[binding]);\n }\n return result;\n }\n function bindElement(element, source, roles, parents) {\n if (!element || element.getAttribute('data-' + kendo.ns + 'stop')) {\n return;\n }\n var role = element.getAttribute('data-' + kendo.ns + 'role'), idx, bind = element.getAttribute('data-' + kendo.ns + 'bind'), childrenCopy = [], deep = true, bindings, options = {}, target;\n parents = parents || [source];\n if (role || bind) {\n unbindElement(element, false);\n }\n if (role) {\n target = bindingTargetForRole(element, roles);\n }\n if (bind) {\n bind = parseBindings(bind.replace(whiteSpaceRegExp, ''));\n if (!target) {\n options = kendo.parseOptions(element, {\n textField: '',\n valueField: '',\n template: '',\n valueUpdate: CHANGE,\n valuePrimitive: false,\n autoBind: true\n }, source);\n options.roles = roles;\n target = new BindingTarget(element, options);\n }\n target.source = source;\n bindings = createBindings(bind, parents, Binding);\n if (options.template) {\n bindings.template = new TemplateBinding(parents, '', options.template);\n }\n if (bindings.click) {\n bind.events = bind.events || {};\n bind.events.click = bind.click;\n bindings.click.destroy();\n delete bindings.click;\n }\n if (bindings.source) {\n deep = false;\n }\n if (bind.attr) {\n bindings.attr = createBindings(bind.attr, parents, Binding);\n }\n if (bind.style) {\n bindings.style = createBindings(bind.style, parents, Binding);\n }\n if (bind.events) {\n bindings.events = createBindings(bind.events, parents, EventBinding);\n }\n if (bind.css) {\n bindings.css = createBindings(bind.css, parents, Binding);\n }\n target.bind(bindings);\n }\n if (target) {\n element.kendoBindingTarget = target;\n }\n var children = element.children;\n if (deep && children && !element.getAttribute('data-' + kendo.ns + 'stop')) {\n for (idx = 0; idx < children.length; idx++) {\n childrenCopy[idx] = children[idx];\n }\n for (idx = 0; idx < childrenCopy.length; idx++) {\n bindElement(childrenCopy[idx], source, roles, parents);\n }\n }\n }\n function bind(dom, object) {\n var idx, length, node, roles = kendo.rolesFromNamespaces([].slice.call(arguments, 2));\n object = kendo.observable(object);\n dom = $(dom);\n for (idx = 0, length = dom.length; idx < length; idx++) {\n node = dom[idx];\n if (node.nodeType === 1) {\n bindElement(node, object, roles);\n }\n }\n }\n function unbindElement(element, destroyWidget) {\n var bindingTarget = element.kendoBindingTarget;\n if (bindingTarget) {\n bindingTarget.destroy();\n if (deleteExpando) {\n delete element.kendoBindingTarget;\n } else if (element.removeAttribute) {\n element.removeAttribute('kendoBindingTarget');\n } else {\n element.kendoBindingTarget = null;\n }\n }\n if (destroyWidget) {\n var widget = kendo.widgetInstance($(element));\n if (widget && typeof widget.destroy === FUNCTION) {\n widget.destroy();\n }\n }\n }\n function unbindElementTree(element, destroyWidgets) {\n unbindElement(element, destroyWidgets);\n unbindElementChildren(element, destroyWidgets);\n }\n function unbindElementChildren(element, destroyWidgets) {\n var children = element.children;\n if (children) {\n for (var idx = 0, length = children.length; idx < length; idx++) {\n unbindElementTree(children[idx], destroyWidgets);\n }\n }\n }\n function unbind(dom) {\n var idx, length;\n dom = $(dom);\n for (idx = 0, length = dom.length; idx < length; idx++) {\n unbindElementTree(dom[idx], false);\n }\n }\n function notify(widget, namespace) {\n var element = widget.element, bindingTarget = element[0].kendoBindingTarget;\n if (bindingTarget) {\n bind(element, bindingTarget.source, namespace);\n }\n }\n function retrievePrimitiveValues(value, valueField) {\n var values = [];\n var idx = 0;\n var length;\n var item;\n if (!valueField) {\n return value;\n }\n if (value instanceof ObservableArray) {\n for (length = value.length; idx < length; idx++) {\n item = value[idx];\n values[idx] = item.get ? item.get(valueField) : item[valueField];\n }\n value = values;\n } else if (value instanceof ObservableObject) {\n value = value.get(valueField);\n }\n return value;\n }\n kendo.unbind = unbind;\n kendo.bind = bind;\n kendo.data.binders = binders;\n kendo.data.Binder = Binder;\n kendo.notify = notify;\n kendo.observable = function (object) {\n if (!(object instanceof ObservableObject)) {\n object = new ObservableObject(object);\n }\n return object;\n };\n kendo.observableHierarchy = function (array) {\n var dataSource = kendo.data.HierarchicalDataSource.create(array);\n function recursiveRead(data) {\n var i, children;\n for (i = 0; i < data.length; i++) {\n data[i]._initChildren();\n children = data[i].children;\n children.fetch();\n data[i].items = children.data();\n recursiveRead(data[i].items);\n }\n }\n dataSource.fetch();\n recursiveRead(dataSource.data());\n dataSource._data._dataSource = dataSource;\n return dataSource._data;\n };\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.fx', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'fx',\n name: 'Effects',\n category: 'framework',\n description: 'Required for animation effects in all Kendo UI widgets.',\n depends: ['core']\n };\n (function ($, undefined) {\n var kendo = window.kendo, fx = kendo.effects, each = $.each, extend = $.extend, proxy = $.proxy, support = kendo.support, browser = support.browser, transforms = support.transforms, transitions = support.transitions, scaleProperties = {\n scale: 0,\n scalex: 0,\n scaley: 0,\n scale3d: 0\n }, translateProperties = {\n translate: 0,\n translatex: 0,\n translatey: 0,\n translate3d: 0\n }, hasZoom = typeof document.documentElement.style.zoom !== 'undefined' && !transforms, matrix3dRegExp = /matrix3?d?\\s*\\(.*,\\s*([\\d\\.\\-]+)\\w*?,\\s*([\\d\\.\\-]+)\\w*?,\\s*([\\d\\.\\-]+)\\w*?,\\s*([\\d\\.\\-]+)\\w*?/i, cssParamsRegExp = /^(-?[\\d\\.\\-]+)?[\\w\\s]*,?\\s*(-?[\\d\\.\\-]+)?[\\w\\s]*/i, translateXRegExp = /translatex?$/i, oldEffectsRegExp = /(zoom|fade|expand)(\\w+)/, singleEffectRegExp = /(zoom|fade|expand)/, unitRegExp = /[xy]$/i, transformProps = [\n 'perspective',\n 'rotate',\n 'rotatex',\n 'rotatey',\n 'rotatez',\n 'rotate3d',\n 'scale',\n 'scalex',\n 'scaley',\n 'scalez',\n 'scale3d',\n 'skew',\n 'skewx',\n 'skewy',\n 'translate',\n 'translatex',\n 'translatey',\n 'translatez',\n 'translate3d',\n 'matrix',\n 'matrix3d'\n ], transform2d = [\n 'rotate',\n 'scale',\n 'scalex',\n 'scaley',\n 'skew',\n 'skewx',\n 'skewy',\n 'translate',\n 'translatex',\n 'translatey',\n 'matrix'\n ], transform2units = {\n 'rotate': 'deg',\n scale: '',\n skew: 'px',\n translate: 'px'\n }, cssPrefix = transforms.css, round = Math.round, BLANK = '', PX = 'px', NONE = 'none', AUTO = 'auto', WIDTH = 'width', HEIGHT = 'height', HIDDEN = 'hidden', ORIGIN = 'origin', ABORT_ID = 'abortId', OVERFLOW = 'overflow', TRANSLATE = 'translate', POSITION = 'position', COMPLETE_CALLBACK = 'completeCallback', TRANSITION = cssPrefix + 'transition', TRANSFORM = cssPrefix + 'transform', BACKFACE = cssPrefix + 'backface-visibility', PERSPECTIVE = cssPrefix + 'perspective', DEFAULT_PERSPECTIVE = '1500px', TRANSFORM_PERSPECTIVE = 'perspective(' + DEFAULT_PERSPECTIVE + ')', directions = {\n left: {\n reverse: 'right',\n property: 'left',\n transition: 'translatex',\n vertical: false,\n modifier: -1\n },\n right: {\n reverse: 'left',\n property: 'left',\n transition: 'translatex',\n vertical: false,\n modifier: 1\n },\n down: {\n reverse: 'up',\n property: 'top',\n transition: 'translatey',\n vertical: true,\n modifier: 1\n },\n up: {\n reverse: 'down',\n property: 'top',\n transition: 'translatey',\n vertical: true,\n modifier: -1\n },\n top: { reverse: 'bottom' },\n bottom: { reverse: 'top' },\n 'in': {\n reverse: 'out',\n modifier: -1\n },\n out: {\n reverse: 'in',\n modifier: 1\n },\n vertical: { reverse: 'vertical' },\n horizontal: { reverse: 'horizontal' }\n };\n kendo.directions = directions;\n extend($.fn, {\n kendoStop: function (clearQueue, gotoEnd) {\n if (transitions) {\n return fx.stopQueue(this, clearQueue || false, gotoEnd || false);\n } else {\n return this.stop(clearQueue, gotoEnd);\n }\n }\n });\n if (transforms && !transitions) {\n each(transform2d, function (idx, value) {\n $.fn[value] = function (val) {\n if (typeof val == 'undefined') {\n return animationProperty(this, value);\n } else {\n var that = $(this)[0], transformValue = value + '(' + val + transform2units[value.replace(unitRegExp, '')] + ')';\n if (that.style.cssText.indexOf(TRANSFORM) == -1) {\n $(this).css(TRANSFORM, transformValue);\n } else {\n that.style.cssText = that.style.cssText.replace(new RegExp(value + '\\\\(.*?\\\\)', 'i'), transformValue);\n }\n }\n return this;\n };\n $.fx.step[value] = function (fx) {\n $(fx.elem)[value](fx.now);\n };\n });\n var curProxy = $.fx.prototype.cur;\n $.fx.prototype.cur = function () {\n if (transform2d.indexOf(this.prop) != -1) {\n return parseFloat($(this.elem)[this.prop]());\n }\n return curProxy.apply(this, arguments);\n };\n }\n kendo.toggleClass = function (element, classes, options, add) {\n if (classes) {\n classes = classes.split(' ');\n if (transitions) {\n options = extend({\n exclusive: 'all',\n duration: 400,\n ease: 'ease-out'\n }, options);\n element.css(TRANSITION, options.exclusive + ' ' + options.duration + 'ms ' + options.ease);\n setTimeout(function () {\n element.css(TRANSITION, '').css(HEIGHT);\n }, options.duration);\n }\n each(classes, function (idx, value) {\n element.toggleClass(value, add);\n });\n }\n return element;\n };\n kendo.parseEffects = function (input, mirror) {\n var effects = {};\n if (typeof input === 'string') {\n each(input.split(' '), function (idx, value) {\n var redirectedEffect = !singleEffectRegExp.test(value), resolved = value.replace(oldEffectsRegExp, function (match, $1, $2) {\n return $1 + ':' + $2.toLowerCase();\n }), effect = resolved.split(':'), direction = effect[1], effectBody = {};\n if (effect.length > 1) {\n effectBody.direction = mirror && redirectedEffect ? directions[direction].reverse : direction;\n }\n effects[effect[0]] = effectBody;\n });\n } else {\n each(input, function (idx) {\n var direction = this.direction;\n if (direction && mirror && !singleEffectRegExp.test(idx)) {\n this.direction = directions[direction].reverse;\n }\n effects[idx] = this;\n });\n }\n return effects;\n };\n function parseInteger(value) {\n return parseInt(value, 10);\n }\n function parseCSS(element, property) {\n return parseInteger(element.css(property));\n }\n function keys(obj) {\n var acc = [];\n for (var propertyName in obj) {\n acc.push(propertyName);\n }\n return acc;\n }\n function strip3DTransforms(properties) {\n for (var key in properties) {\n if (transformProps.indexOf(key) != -1 && transform2d.indexOf(key) == -1) {\n delete properties[key];\n }\n }\n return properties;\n }\n function normalizeCSS(element, properties) {\n var transformation = [], cssValues = {}, lowerKey, key, value, isTransformed;\n for (key in properties) {\n lowerKey = key.toLowerCase();\n isTransformed = transforms && transformProps.indexOf(lowerKey) != -1;\n if (!support.hasHW3D && isTransformed && transform2d.indexOf(lowerKey) == -1) {\n delete properties[key];\n } else {\n value = properties[key];\n if (isTransformed) {\n transformation.push(key + '(' + value + ')');\n } else {\n cssValues[key] = value;\n }\n }\n }\n if (transformation.length) {\n cssValues[TRANSFORM] = transformation.join(' ');\n }\n return cssValues;\n }\n if (transitions) {\n extend(fx, {\n transition: function (element, properties, options) {\n var css, delay = 0, oldKeys = element.data('keys') || [], timeoutID;\n options = extend({\n duration: 200,\n ease: 'ease-out',\n complete: null,\n exclusive: 'all'\n }, options);\n var stopTransitionCalled = false;\n var stopTransition = function () {\n if (!stopTransitionCalled) {\n stopTransitionCalled = true;\n if (timeoutID) {\n clearTimeout(timeoutID);\n timeoutID = null;\n }\n element.removeData(ABORT_ID).dequeue().css(TRANSITION, '').css(TRANSITION);\n options.complete.call(element);\n }\n };\n options.duration = $.fx ? $.fx.speeds[options.duration] || options.duration : options.duration;\n css = normalizeCSS(element, properties);\n $.merge(oldKeys, keys(css));\n if ($.hasOwnProperty('uniqueSort')) {\n element.data('keys', $.uniqueSort(oldKeys)).height();\n } else {\n element.data('keys', $.unique(oldKeys)).height();\n }\n element.css(TRANSITION, options.exclusive + ' ' + options.duration + 'ms ' + options.ease).css(TRANSITION);\n element.css(css).css(TRANSFORM);\n if (transitions.event) {\n element.one(transitions.event, stopTransition);\n if (options.duration !== 0) {\n delay = 500;\n }\n }\n timeoutID = setTimeout(stopTransition, options.duration + delay);\n element.data(ABORT_ID, timeoutID);\n element.data(COMPLETE_CALLBACK, stopTransition);\n },\n stopQueue: function (element, clearQueue, gotoEnd) {\n var cssValues, taskKeys = element.data('keys'), retainPosition = !gotoEnd && taskKeys, completeCallback = element.data(COMPLETE_CALLBACK);\n if (retainPosition) {\n cssValues = kendo.getComputedStyles(element[0], taskKeys);\n }\n if (completeCallback) {\n completeCallback();\n }\n if (retainPosition) {\n element.css(cssValues);\n }\n return element.removeData('keys').stop(clearQueue);\n }\n });\n }\n function animationProperty(element, property) {\n if (transforms) {\n var transform = element.css(TRANSFORM);\n if (transform == NONE) {\n return property == 'scale' ? 1 : 0;\n }\n var match = transform.match(new RegExp(property + '\\\\s*\\\\(([\\\\d\\\\w\\\\.]+)')), computed = 0;\n if (match) {\n computed = parseInteger(match[1]);\n } else {\n match = transform.match(matrix3dRegExp) || [\n 0,\n 0,\n 0,\n 0,\n 0\n ];\n property = property.toLowerCase();\n if (translateXRegExp.test(property)) {\n computed = parseFloat(match[3] / match[2]);\n } else if (property == 'translatey') {\n computed = parseFloat(match[4] / match[2]);\n } else if (property == 'scale') {\n computed = parseFloat(match[2]);\n } else if (property == 'rotate') {\n computed = parseFloat(Math.atan2(match[2], match[1]));\n }\n }\n return computed;\n } else {\n return parseFloat(element.css(property));\n }\n }\n var EffectSet = kendo.Class.extend({\n init: function (element, options) {\n var that = this;\n that.element = element;\n that.effects = [];\n that.options = options;\n that.restore = [];\n },\n run: function (effects) {\n var that = this, effect, idx, jdx, length = effects.length, element = that.element, options = that.options, deferred = $.Deferred(), start = {}, end = {}, target, children, childrenLength;\n that.effects = effects;\n deferred.done($.proxy(that, 'complete'));\n element.data('animating', true);\n for (idx = 0; idx < length; idx++) {\n effect = effects[idx];\n effect.setReverse(options.reverse);\n effect.setOptions(options);\n that.addRestoreProperties(effect.restore);\n effect.prepare(start, end);\n children = effect.children();\n for (jdx = 0, childrenLength = children.length; jdx < childrenLength; jdx++) {\n children[jdx].duration(options.duration).run();\n }\n }\n for (var effectName in options.effects) {\n extend(end, options.effects[effectName].properties);\n }\n if (!element.is(':visible')) {\n extend(start, { display: element.data('olddisplay') || 'block' });\n }\n if (transforms && !options.reset) {\n target = element.data('targetTransform');\n if (target) {\n start = extend(target, start);\n }\n }\n start = normalizeCSS(element, start);\n if (transforms && !transitions) {\n start = strip3DTransforms(start);\n }\n element.css(start).css(TRANSFORM);\n for (idx = 0; idx < length; idx++) {\n effects[idx].setup();\n }\n if (options.init) {\n options.init();\n }\n element.data('targetTransform', end);\n fx.animate(element, end, extend({}, options, { complete: deferred.resolve }));\n return deferred.promise();\n },\n stop: function () {\n $(this.element).kendoStop(true, true);\n },\n addRestoreProperties: function (restore) {\n var element = this.element, value, i = 0, length = restore.length;\n for (; i < length; i++) {\n value = restore[i];\n this.restore.push(value);\n if (!element.data(value)) {\n element.data(value, element.css(value));\n }\n }\n },\n restoreCallback: function () {\n var element = this.element;\n for (var i = 0, length = this.restore.length; i < length; i++) {\n var value = this.restore[i];\n element.css(value, element.data(value));\n }\n },\n complete: function () {\n var that = this, idx = 0, element = that.element, options = that.options, effects = that.effects, length = effects.length;\n element.removeData('animating').dequeue();\n if (options.hide) {\n element.data('olddisplay', element.css('display')).hide();\n }\n this.restoreCallback();\n if (hasZoom && !transforms) {\n setTimeout($.proxy(this, 'restoreCallback'), 0);\n }\n for (; idx < length; idx++) {\n effects[idx].teardown();\n }\n if (options.completeCallback) {\n options.completeCallback(element);\n }\n }\n });\n fx.promise = function (element, options) {\n var effects = [], effectClass, effectSet = new EffectSet(element, options), parsedEffects = kendo.parseEffects(options.effects), effect;\n options.effects = parsedEffects;\n for (var effectName in parsedEffects) {\n effectClass = fx[capitalize(effectName)];\n if (effectClass) {\n effect = new effectClass(element, parsedEffects[effectName].direction);\n effects.push(effect);\n }\n }\n if (effects[0]) {\n effectSet.run(effects);\n } else {\n if (!element.is(':visible')) {\n element.css({ display: element.data('olddisplay') || 'block' }).css('display');\n }\n if (options.init) {\n options.init();\n }\n element.dequeue();\n effectSet.complete();\n }\n };\n extend(fx, {\n animate: function (elements, properties, options) {\n var useTransition = options.transition !== false;\n delete options.transition;\n if (transitions && 'transition' in fx && useTransition) {\n fx.transition(elements, properties, options);\n } else {\n if (transforms) {\n elements.animate(strip3DTransforms(properties), {\n queue: false,\n show: false,\n hide: false,\n duration: options.duration,\n complete: options.complete\n });\n } else {\n elements.each(function () {\n var element = $(this), multiple = {};\n each(transformProps, function (idx, value) {\n var params, currentValue = properties ? properties[value] + ' ' : null;\n if (currentValue) {\n var single = properties;\n if (value in scaleProperties && properties[value] !== undefined) {\n params = currentValue.match(cssParamsRegExp);\n if (transforms) {\n extend(single, { scale: +params[0] });\n }\n } else {\n if (value in translateProperties && properties[value] !== undefined) {\n var position = element.css(POSITION), isFixed = position == 'absolute' || position == 'fixed';\n if (!element.data(TRANSLATE)) {\n if (isFixed) {\n element.data(TRANSLATE, {\n top: parseCSS(element, 'top') || 0,\n left: parseCSS(element, 'left') || 0,\n bottom: parseCSS(element, 'bottom'),\n right: parseCSS(element, 'right')\n });\n } else {\n element.data(TRANSLATE, {\n top: parseCSS(element, 'marginTop') || 0,\n left: parseCSS(element, 'marginLeft') || 0\n });\n }\n }\n var originalPosition = element.data(TRANSLATE);\n params = currentValue.match(cssParamsRegExp);\n if (params) {\n var dX = value == TRANSLATE + 'y' ? +null : +params[1], dY = value == TRANSLATE + 'y' ? +params[1] : +params[2];\n if (isFixed) {\n if (!isNaN(originalPosition.right)) {\n if (!isNaN(dX)) {\n extend(single, { right: originalPosition.right - dX });\n }\n } else {\n if (!isNaN(dX)) {\n extend(single, { left: originalPosition.left + dX });\n }\n }\n if (!isNaN(originalPosition.bottom)) {\n if (!isNaN(dY)) {\n extend(single, { bottom: originalPosition.bottom - dY });\n }\n } else {\n if (!isNaN(dY)) {\n extend(single, { top: originalPosition.top + dY });\n }\n }\n } else {\n if (!isNaN(dX)) {\n extend(single, { marginLeft: originalPosition.left + dX });\n }\n if (!isNaN(dY)) {\n extend(single, { marginTop: originalPosition.top + dY });\n }\n }\n }\n }\n }\n if (!transforms && value != 'scale' && value in single) {\n delete single[value];\n }\n if (single) {\n extend(multiple, single);\n }\n }\n });\n if (browser.msie) {\n delete multiple.scale;\n }\n element.animate(multiple, {\n queue: false,\n show: false,\n hide: false,\n duration: options.duration,\n complete: options.complete\n });\n });\n }\n }\n }\n });\n fx.animatedPromise = fx.promise;\n var Effect = kendo.Class.extend({\n init: function (element, direction) {\n var that = this;\n that.element = element;\n that._direction = direction;\n that.options = {};\n that._additionalEffects = [];\n if (!that.restore) {\n that.restore = [];\n }\n },\n reverse: function () {\n this._reverse = true;\n return this.run();\n },\n play: function () {\n this._reverse = false;\n return this.run();\n },\n add: function (additional) {\n this._additionalEffects.push(additional);\n return this;\n },\n direction: function (value) {\n this._direction = value;\n return this;\n },\n duration: function (duration) {\n this._duration = duration;\n return this;\n },\n compositeRun: function () {\n var that = this, effectSet = new EffectSet(that.element, {\n reverse: that._reverse,\n duration: that._duration\n }), effects = that._additionalEffects.concat([that]);\n return effectSet.run(effects);\n },\n run: function () {\n if (this._additionalEffects && this._additionalEffects[0]) {\n return this.compositeRun();\n }\n var that = this, element = that.element, idx = 0, restore = that.restore, length = restore.length, value, deferred = $.Deferred(), start = {}, end = {}, target, children = that.children(), childrenLength = children.length;\n deferred.done($.proxy(that, '_complete'));\n element.data('animating', true);\n for (idx = 0; idx < length; idx++) {\n value = restore[idx];\n if (!element.data(value)) {\n element.data(value, element.css(value));\n }\n }\n for (idx = 0; idx < childrenLength; idx++) {\n children[idx].duration(that._duration).run();\n }\n that.prepare(start, end);\n if (!element.is(':visible')) {\n extend(start, { display: element.data('olddisplay') || 'block' });\n }\n if (transforms) {\n target = element.data('targetTransform');\n if (target) {\n start = extend(target, start);\n }\n }\n start = normalizeCSS(element, start);\n if (transforms && !transitions) {\n start = strip3DTransforms(start);\n }\n element.css(start).css(TRANSFORM);\n that.setup();\n element.data('targetTransform', end);\n fx.animate(element, end, {\n duration: that._duration,\n complete: deferred.resolve\n });\n return deferred.promise();\n },\n stop: function () {\n var idx = 0, children = this.children(), childrenLength = children.length;\n for (idx = 0; idx < childrenLength; idx++) {\n children[idx].stop();\n }\n $(this.element).kendoStop(true, true);\n return this;\n },\n restoreCallback: function () {\n var element = this.element;\n for (var i = 0, length = this.restore.length; i < length; i++) {\n var value = this.restore[i];\n element.css(value, element.data(value));\n }\n },\n _complete: function () {\n var that = this, element = that.element;\n element.removeData('animating').dequeue();\n that.restoreCallback();\n if (that.shouldHide()) {\n element.data('olddisplay', element.css('display')).hide();\n }\n if (hasZoom && !transforms) {\n setTimeout($.proxy(that, 'restoreCallback'), 0);\n }\n that.teardown();\n },\n setOptions: function (options) {\n extend(true, this.options, options);\n },\n children: function () {\n return [];\n },\n shouldHide: $.noop,\n setup: $.noop,\n prepare: $.noop,\n teardown: $.noop,\n directions: [],\n setReverse: function (reverse) {\n this._reverse = reverse;\n return this;\n }\n });\n function capitalize(word) {\n return word.charAt(0).toUpperCase() + word.substring(1);\n }\n function createEffect(name, definition) {\n var effectClass = Effect.extend(definition), directions = effectClass.prototype.directions;\n fx[capitalize(name)] = effectClass;\n fx.Element.prototype[name] = function (direction, opt1, opt2, opt3) {\n return new effectClass(this.element, direction, opt1, opt2, opt3);\n };\n each(directions, function (idx, theDirection) {\n fx.Element.prototype[name + capitalize(theDirection)] = function (opt1, opt2, opt3) {\n return new effectClass(this.element, theDirection, opt1, opt2, opt3);\n };\n });\n }\n var FOUR_DIRECTIONS = [\n 'left',\n 'right',\n 'up',\n 'down'\n ], IN_OUT = [\n 'in',\n 'out'\n ];\n createEffect('slideIn', {\n directions: FOUR_DIRECTIONS,\n divisor: function (value) {\n this.options.divisor = value;\n return this;\n },\n prepare: function (start, end) {\n var that = this, tmp, element = that.element, outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight, direction = directions[that._direction], offset = -direction.modifier * (direction.vertical ? outerHeight(element) : outerWidth(element)), startValue = offset / (that.options && that.options.divisor || 1) + PX, endValue = '0px';\n if (that._reverse) {\n tmp = start;\n start = end;\n end = tmp;\n }\n if (transforms) {\n start[direction.transition] = startValue;\n end[direction.transition] = endValue;\n } else {\n start[direction.property] = startValue;\n end[direction.property] = endValue;\n }\n }\n });\n createEffect('tile', {\n directions: FOUR_DIRECTIONS,\n init: function (element, direction, previous) {\n Effect.prototype.init.call(this, element, direction);\n this.options = { previous: previous };\n },\n previousDivisor: function (value) {\n this.options.previousDivisor = value;\n return this;\n },\n children: function () {\n var that = this, reverse = that._reverse, previous = that.options.previous, divisor = that.options.previousDivisor || 1, dir = that._direction;\n var children = [kendo.fx(that.element).slideIn(dir).setReverse(reverse)];\n if (previous) {\n children.push(kendo.fx(previous).slideIn(directions[dir].reverse).divisor(divisor).setReverse(!reverse));\n }\n return children;\n }\n });\n function createToggleEffect(name, property, defaultStart, defaultEnd) {\n createEffect(name, {\n directions: IN_OUT,\n startValue: function (value) {\n this._startValue = value;\n return this;\n },\n endValue: function (value) {\n this._endValue = value;\n return this;\n },\n shouldHide: function () {\n return this._shouldHide;\n },\n prepare: function (start, end) {\n var that = this, startValue, endValue, out = this._direction === 'out', startDataValue = that.element.data(property), startDataValueIsSet = !(isNaN(startDataValue) || startDataValue == defaultStart);\n if (startDataValueIsSet) {\n startValue = startDataValue;\n } else if (typeof this._startValue !== 'undefined') {\n startValue = this._startValue;\n } else {\n startValue = out ? defaultStart : defaultEnd;\n }\n if (typeof this._endValue !== 'undefined') {\n endValue = this._endValue;\n } else {\n endValue = out ? defaultEnd : defaultStart;\n }\n if (this._reverse) {\n start[property] = endValue;\n end[property] = startValue;\n } else {\n start[property] = startValue;\n end[property] = endValue;\n }\n that._shouldHide = end[property] === defaultEnd;\n }\n });\n }\n createToggleEffect('fade', 'opacity', 1, 0);\n createToggleEffect('zoom', 'scale', 1, 0.01);\n createEffect('slideMargin', {\n prepare: function (start, end) {\n var that = this, element = that.element, options = that.options, origin = element.data(ORIGIN), offset = options.offset, margin, reverse = that._reverse;\n if (!reverse && origin === null) {\n element.data(ORIGIN, parseFloat(element.css('margin-' + options.axis)));\n }\n margin = element.data(ORIGIN) || 0;\n end['margin-' + options.axis] = !reverse ? margin + offset : margin;\n }\n });\n createEffect('slideTo', {\n prepare: function (start, end) {\n var that = this, element = that.element, options = that.options, offset = options.offset.split(','), reverse = that._reverse;\n if (transforms) {\n end.translatex = !reverse ? offset[0] : 0;\n end.translatey = !reverse ? offset[1] : 0;\n } else {\n end.left = !reverse ? offset[0] : 0;\n end.top = !reverse ? offset[1] : 0;\n }\n element.css('left');\n }\n });\n createEffect('expand', {\n directions: [\n 'horizontal',\n 'vertical'\n ],\n restore: [OVERFLOW],\n prepare: function (start, end) {\n var that = this, element = that.element, options = that.options, reverse = that._reverse, property = that._direction === 'vertical' ? HEIGHT : WIDTH, setLength = element[0].style[property], oldLength = element.data(property), length = parseFloat(oldLength || setLength), realLength = round(element.css(property, AUTO)[property]());\n start.overflow = HIDDEN;\n length = options && options.reset ? realLength || length : length || realLength;\n end[property] = (reverse ? 0 : length) + PX;\n start[property] = (reverse ? length : 0) + PX;\n if (oldLength === undefined) {\n element.data(property, setLength);\n }\n },\n shouldHide: function () {\n return this._reverse;\n },\n teardown: function () {\n var that = this, element = that.element, property = that._direction === 'vertical' ? HEIGHT : WIDTH, length = element.data(property);\n if (length == AUTO || length === BLANK) {\n setTimeout(function () {\n element.css(property, AUTO).css(property);\n }, 0);\n }\n }\n });\n var TRANSFER_START_STATE = {\n position: 'absolute',\n marginLeft: 0,\n marginTop: 0,\n scale: 1\n };\n createEffect('transfer', {\n init: function (element, target) {\n this.element = element;\n this.options = { target: target };\n this.restore = [];\n },\n setup: function () {\n this.element.appendTo(document.body);\n },\n prepare: function (start, end) {\n var that = this, element = that.element, outerBox = fx.box(element), innerBox = fx.box(that.options.target), currentScale = animationProperty(element, 'scale'), scale = fx.fillScale(innerBox, outerBox), transformOrigin = fx.transformOrigin(innerBox, outerBox);\n extend(start, TRANSFER_START_STATE);\n end.scale = 1;\n element.css(TRANSFORM, 'scale(1)').css(TRANSFORM);\n element.css(TRANSFORM, 'scale(' + currentScale + ')');\n start.top = outerBox.top;\n start.left = outerBox.left;\n start.transformOrigin = transformOrigin.x + PX + ' ' + transformOrigin.y + PX;\n if (that._reverse) {\n start.scale = scale;\n } else {\n end.scale = scale;\n }\n }\n });\n var CLIPS = {\n top: 'rect(auto auto $size auto)',\n bottom: 'rect($size auto auto auto)',\n left: 'rect(auto $size auto auto)',\n right: 'rect(auto auto auto $size)'\n };\n var ROTATIONS = {\n top: {\n start: 'rotatex(0deg)',\n end: 'rotatex(180deg)'\n },\n bottom: {\n start: 'rotatex(-180deg)',\n end: 'rotatex(0deg)'\n },\n left: {\n start: 'rotatey(0deg)',\n end: 'rotatey(-180deg)'\n },\n right: {\n start: 'rotatey(180deg)',\n end: 'rotatey(0deg)'\n }\n };\n function clipInHalf(container, direction) {\n var vertical = kendo.directions[direction].vertical, size = container[vertical ? HEIGHT : WIDTH]() / 2 + 'px';\n return CLIPS[direction].replace('$size', size);\n }\n createEffect('turningPage', {\n directions: FOUR_DIRECTIONS,\n init: function (element, direction, container) {\n Effect.prototype.init.call(this, element, direction);\n this._container = container;\n },\n prepare: function (start, end) {\n var that = this, reverse = that._reverse, direction = reverse ? directions[that._direction].reverse : that._direction, rotation = ROTATIONS[direction];\n start.zIndex = 1;\n if (that._clipInHalf) {\n start.clip = clipInHalf(that._container, kendo.directions[direction].reverse);\n }\n start[BACKFACE] = HIDDEN;\n end[TRANSFORM] = TRANSFORM_PERSPECTIVE + (reverse ? rotation.start : rotation.end);\n start[TRANSFORM] = TRANSFORM_PERSPECTIVE + (reverse ? rotation.end : rotation.start);\n },\n setup: function () {\n this._container.append(this.element);\n },\n face: function (value) {\n this._face = value;\n return this;\n },\n shouldHide: function () {\n var that = this, reverse = that._reverse, face = that._face;\n return reverse && !face || !reverse && face;\n },\n clipInHalf: function (value) {\n this._clipInHalf = value;\n return this;\n },\n temporary: function () {\n this.element.addClass('temp-page');\n return this;\n }\n });\n createEffect('staticPage', {\n directions: FOUR_DIRECTIONS,\n init: function (element, direction, container) {\n Effect.prototype.init.call(this, element, direction);\n this._container = container;\n },\n restore: ['clip'],\n prepare: function (start, end) {\n var that = this, direction = that._reverse ? directions[that._direction].reverse : that._direction;\n start.clip = clipInHalf(that._container, direction);\n start.opacity = 0.999;\n end.opacity = 1;\n },\n shouldHide: function () {\n var that = this, reverse = that._reverse, face = that._face;\n return reverse && !face || !reverse && face;\n },\n face: function (value) {\n this._face = value;\n return this;\n }\n });\n createEffect('pageturn', {\n directions: [\n 'horizontal',\n 'vertical'\n ],\n init: function (element, direction, face, back) {\n Effect.prototype.init.call(this, element, direction);\n this.options = {};\n this.options.face = face;\n this.options.back = back;\n },\n children: function () {\n var that = this, options = that.options, direction = that._direction === 'horizontal' ? 'left' : 'top', reverseDirection = kendo.directions[direction].reverse, reverse = that._reverse, temp, faceClone = options.face.clone(true).removeAttr('id'), backClone = options.back.clone(true).removeAttr('id'), element = that.element;\n if (reverse) {\n temp = direction;\n direction = reverseDirection;\n reverseDirection = temp;\n }\n return [\n kendo.fx(options.face).staticPage(direction, element).face(true).setReverse(reverse),\n kendo.fx(options.back).staticPage(reverseDirection, element).setReverse(reverse),\n kendo.fx(faceClone).turningPage(direction, element).face(true).clipInHalf(true).temporary().setReverse(reverse),\n kendo.fx(backClone).turningPage(reverseDirection, element).clipInHalf(true).temporary().setReverse(reverse)\n ];\n },\n prepare: function (start, end) {\n start[PERSPECTIVE] = DEFAULT_PERSPECTIVE;\n start.transformStyle = 'preserve-3d';\n start.opacity = 0.999;\n end.opacity = 1;\n },\n teardown: function () {\n this.element.find('.temp-page').remove();\n }\n });\n createEffect('flip', {\n directions: [\n 'horizontal',\n 'vertical'\n ],\n init: function (element, direction, face, back) {\n Effect.prototype.init.call(this, element, direction);\n this.options = {};\n this.options.face = face;\n this.options.back = back;\n },\n children: function () {\n var that = this, options = that.options, direction = that._direction === 'horizontal' ? 'left' : 'top', reverseDirection = kendo.directions[direction].reverse, reverse = that._reverse, temp, element = that.element;\n if (reverse) {\n temp = direction;\n direction = reverseDirection;\n reverseDirection = temp;\n }\n return [\n kendo.fx(options.face).turningPage(direction, element).face(true).setReverse(reverse),\n kendo.fx(options.back).turningPage(reverseDirection, element).setReverse(reverse)\n ];\n },\n prepare: function (start) {\n start[PERSPECTIVE] = DEFAULT_PERSPECTIVE;\n start.transformStyle = 'preserve-3d';\n }\n });\n var RESTORE_OVERFLOW = !support.mobileOS.android;\n var IGNORE_TRANSITION_EVENT_SELECTOR = '.km-touch-scrollbar, .km-actionsheet-wrapper';\n createEffect('replace', {\n _before: $.noop,\n _after: $.noop,\n init: function (element, previous, transitionClass) {\n Effect.prototype.init.call(this, element);\n this._previous = $(previous);\n this._transitionClass = transitionClass;\n },\n duration: function () {\n throw new Error('The replace effect does not support duration setting; the effect duration may be customized through the transition class rule');\n },\n beforeTransition: function (callback) {\n this._before = callback;\n return this;\n },\n afterTransition: function (callback) {\n this._after = callback;\n return this;\n },\n _both: function () {\n return $().add(this._element).add(this._previous);\n },\n _containerClass: function () {\n var direction = this._direction, containerClass = 'k-fx k-fx-start k-fx-' + this._transitionClass;\n if (direction) {\n containerClass += ' k-fx-' + direction;\n }\n if (this._reverse) {\n containerClass += ' k-fx-reverse';\n }\n return containerClass;\n },\n complete: function (e) {\n if (!this.deferred || e && $(e.target).is(IGNORE_TRANSITION_EVENT_SELECTOR)) {\n return;\n }\n var container = this.container;\n container.removeClass('k-fx-end').removeClass(this._containerClass()).off(transitions.event, this.completeProxy);\n this._previous.hide().removeClass('k-fx-current');\n this.element.removeClass('k-fx-next');\n if (RESTORE_OVERFLOW) {\n container.css(OVERFLOW, '');\n }\n if (!this.isAbsolute) {\n this._both().css(POSITION, '');\n }\n this.deferred.resolve();\n delete this.deferred;\n },\n run: function () {\n if (this._additionalEffects && this._additionalEffects[0]) {\n return this.compositeRun();\n }\n var that = this, element = that.element, previous = that._previous, container = element.parents().filter(previous.parents()).first(), both = that._both(), deferred = $.Deferred(), originalPosition = element.css(POSITION), originalOverflow;\n if (!container.length) {\n container = element.parent();\n }\n this.container = container;\n this.deferred = deferred;\n this.isAbsolute = originalPosition == 'absolute';\n if (!this.isAbsolute) {\n both.css(POSITION, 'absolute');\n }\n if (RESTORE_OVERFLOW) {\n originalOverflow = container.css(OVERFLOW);\n container.css(OVERFLOW, 'hidden');\n }\n if (!transitions) {\n this.complete();\n } else {\n element.addClass('k-fx-hidden');\n container.addClass(this._containerClass());\n this.completeProxy = $.proxy(this, 'complete');\n container.on(transitions.event, this.completeProxy);\n kendo.animationFrame(function () {\n element.removeClass('k-fx-hidden').addClass('k-fx-next');\n previous.css('display', '').addClass('k-fx-current');\n that._before(previous, element);\n kendo.animationFrame(function () {\n container.removeClass('k-fx-start').addClass('k-fx-end');\n that._after(previous, element);\n });\n });\n }\n return deferred.promise();\n },\n stop: function () {\n this.complete();\n }\n });\n var Animation = kendo.Class.extend({\n init: function () {\n var that = this;\n that._tickProxy = proxy(that._tick, that);\n that._started = false;\n },\n tick: $.noop,\n done: $.noop,\n onEnd: $.noop,\n onCancel: $.noop,\n start: function () {\n if (!this.enabled()) {\n return;\n }\n if (!this.done()) {\n this._started = true;\n kendo.animationFrame(this._tickProxy);\n } else {\n this.onEnd();\n }\n },\n enabled: function () {\n return true;\n },\n cancel: function () {\n this._started = false;\n this.onCancel();\n },\n _tick: function () {\n var that = this;\n if (!that._started) {\n return;\n }\n that.tick();\n if (!that.done()) {\n kendo.animationFrame(that._tickProxy);\n } else {\n that._started = false;\n that.onEnd();\n }\n }\n });\n var Transition = Animation.extend({\n init: function (options) {\n var that = this;\n extend(that, options);\n Animation.fn.init.call(that);\n },\n done: function () {\n return this.timePassed() >= this.duration;\n },\n timePassed: function () {\n return Math.min(this.duration, new Date() - this.startDate);\n },\n moveTo: function (options) {\n var that = this, movable = that.movable;\n that.initial = movable[that.axis];\n that.delta = options.location - that.initial;\n that.duration = typeof options.duration == 'number' ? options.duration : 300;\n that.tick = that._easeProxy(options.ease);\n that.startDate = new Date();\n that.start();\n },\n _easeProxy: function (ease) {\n var that = this;\n return function () {\n that.movable.moveAxis(that.axis, ease(that.timePassed(), that.initial, that.delta, that.duration));\n };\n }\n });\n extend(Transition, {\n easeOutExpo: function (t, b, c, d) {\n return t == d ? b + c : c * (-Math.pow(2, -10 * t / d) + 1) + b;\n },\n easeOutBack: function (t, b, c, d, s) {\n s = 1.70158;\n return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;\n }\n });\n fx.Animation = Animation;\n fx.Transition = Transition;\n fx.createEffect = createEffect;\n fx.box = function (element) {\n element = $(element);\n var result = element.offset();\n result.width = kendo._outerWidth(element);\n result.height = kendo._outerHeight(element);\n return result;\n };\n fx.transformOrigin = function (inner, outer) {\n var x = (inner.left - outer.left) * outer.width / (outer.width - inner.width), y = (inner.top - outer.top) * outer.height / (outer.height - inner.height);\n return {\n x: isNaN(x) ? 0 : x,\n y: isNaN(y) ? 0 : y\n };\n };\n fx.fillScale = function (inner, outer) {\n return Math.min(inner.width / outer.width, inner.height / outer.height);\n };\n fx.fitScale = function (inner, outer) {\n return Math.max(inner.width / outer.width, inner.height / outer.height);\n };\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.view', [\n 'kendo.core',\n 'kendo.binder',\n 'kendo.fx'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'view',\n name: 'View',\n category: 'framework',\n description: 'The View class instantiates and handles the events of a certain screen from the application.',\n depends: [\n 'core',\n 'binder',\n 'fx'\n ],\n hidden: false\n };\n (function ($, undefined) {\n var kendo = window.kendo, attr = kendo.attr, ui = kendo.ui, attrValue = kendo.attrValue, directiveSelector = kendo.directiveSelector, Observable = kendo.Observable, Widget = kendo.ui.Widget, roleSelector = kendo.roleSelector, SCRIPT = 'SCRIPT', INIT = 'init', TRANSITION_START = 'transitionStart', TRANSITION_END = 'transitionEnd', SHOW = 'show', HIDE = 'hide', ATTACH = 'attach', DETACH = 'detach', sizzleErrorRegExp = /unrecognized expression/;\n var bodyRegExp = /<body[^>]*>(([\\u000a\\u000d\\u2028\\u2029]|.)*)<\\/body>/i;\n var LOAD_START = 'loadStart';\n var LOAD_COMPLETE = 'loadComplete';\n var SHOW_START = 'showStart';\n var SAME_VIEW_REQUESTED = 'sameViewRequested';\n var VIEW_SHOW = 'viewShow';\n var VIEW_TYPE_DETERMINED = 'viewTypeDetermined';\n var AFTER = 'after';\n var classNames = {\n content: 'k-content',\n view: 'k-view',\n stretchedView: 'k-stretched-view',\n widget: 'k-widget',\n header: 'k-header',\n footer: 'k-footer'\n };\n var View = kendo.ui.Widget.extend({\n init: function (content, options) {\n var that = this;\n options = options || {};\n that.id = kendo.guid();\n Observable.fn.init.call(that);\n this.options = $.extend({}, this.options, options);\n that.content = content;\n if (that.options.renderOnInit) {\n Widget.fn.init.call(that, that._createElement(), options);\n }\n if (that.options.wrapInSections) {\n that._renderSections();\n }\n that.tagName = options.tagName || 'div';\n that.model = options.model;\n that._wrap = options.wrap !== false;\n this._evalTemplate = options.evalTemplate || false;\n that._fragments = {};\n that.bind([\n INIT,\n SHOW,\n HIDE,\n TRANSITION_START,\n TRANSITION_END\n ], options);\n },\n options: {\n name: 'View',\n renderOnInit: false,\n wrapInSections: false,\n detachOnHide: true,\n detachOnDestroy: true\n },\n render: function (container) {\n var that = this, notInitialized = !that.element;\n if (notInitialized) {\n that.element = that._createElement();\n }\n if (container) {\n $(container).append(that.element);\n }\n if (notInitialized) {\n kendo.bind(that.element, that.model);\n that.trigger(INIT);\n }\n if (container) {\n that._eachFragment(ATTACH);\n that.trigger(SHOW);\n }\n return that.element;\n },\n clone: function () {\n return new ViewClone(this);\n },\n triggerBeforeShow: function () {\n return true;\n },\n triggerBeforeHide: function () {\n return true;\n },\n showStart: function () {\n var that = this;\n var element = that.render();\n if (element) {\n element.css('display', '');\n }\n this.trigger(SHOW_START, { view: this });\n },\n showEnd: function () {\n },\n hideEnd: function () {\n this.hide();\n },\n beforeTransition: function (type) {\n this.trigger(TRANSITION_START, { type: type });\n },\n afterTransition: function (type) {\n this.trigger(TRANSITION_END, { type: type });\n },\n hide: function () {\n if (this.options.detachOnHide) {\n this._eachFragment(DETACH);\n $(this.element).detach();\n }\n this.trigger(HIDE);\n },\n destroy: function () {\n var that = this;\n var element = that.element;\n if (element) {\n Widget.fn.destroy.call(that);\n kendo.unbind(element);\n kendo.destroy(element);\n if (that.options.detachOnDestroy) {\n element.remove();\n }\n }\n },\n purge: function () {\n var that = this;\n that.destroy();\n $(that.element).add(that.content).add(that.wrapper).off().remove();\n },\n fragments: function (fragments) {\n $.extend(this._fragments, fragments);\n },\n _eachFragment: function (methodName) {\n for (var placeholder in this._fragments) {\n this._fragments[placeholder][methodName](this, placeholder);\n }\n },\n _createElement: function () {\n var that = this, wrapper = '<' + that.tagName + '>', element, content;\n try {\n content = $(document.getElementById(that.content) || that.content);\n if (content[0].tagName === SCRIPT) {\n content = content.html();\n }\n } catch (e) {\n if (sizzleErrorRegExp.test(e.message)) {\n content = that.content;\n }\n }\n if (typeof content === 'string') {\n content = content.replace(/^\\s+|\\s+$/g, '');\n if (that._evalTemplate) {\n content = kendo.template(content)(that.model || {});\n }\n element = $(wrapper).append(content);\n if (!that._wrap) {\n element = element.contents();\n }\n } else {\n element = content;\n if (that._evalTemplate) {\n var result = $(kendo.template($('<div />').append(element.clone(true)).html())(that.model || {}));\n if ($.contains(document, element[0])) {\n element.replaceWith(result);\n }\n element = result;\n }\n if (that._wrap) {\n element = element.wrapAll(wrapper).parent();\n }\n }\n return element;\n },\n _renderSections: function () {\n var that = this;\n if (that.options.wrapInSections) {\n that._wrapper();\n that._createContent();\n that._createHeader();\n that._createFooter();\n }\n },\n _wrapper: function () {\n var that = this;\n var content = that.content;\n if (content.is(roleSelector('view'))) {\n that.wrapper = that.content;\n } else {\n that.wrapper = content.wrap('<div data-' + kendo.ns + 'stretch=\"true\" data-' + kendo.ns + 'role=\"view\" data-' + kendo.ns + 'init-widgets=\"false\"></div>').parent();\n }\n var wrapper = that.wrapper;\n wrapper.attr('id', that.id);\n wrapper.addClass(classNames.view);\n wrapper.addClass(classNames.widget);\n wrapper.attr('role', 'view');\n },\n _createContent: function () {\n var that = this;\n var wrapper = $(that.wrapper);\n var contentSelector = roleSelector('content');\n if (!wrapper.children(contentSelector)[0]) {\n var ccontentElements = wrapper.children().filter(function () {\n var child = $(this);\n if (!child.is(roleSelector('header')) && !child.is(roleSelector('footer'))) {\n return child;\n }\n });\n ccontentElements.wrap('<div ' + attr('role') + '=\"content\"></div>');\n }\n this.contentElement = wrapper.children(roleSelector('content'));\n this.contentElement.addClass(classNames.stretchedView).addClass(classNames.content);\n },\n _createHeader: function () {\n var that = this;\n var wrapper = that.wrapper;\n this.header = wrapper.children(roleSelector('header')).addClass(classNames.header);\n },\n _createFooter: function () {\n var that = this;\n var wrapper = that.wrapper;\n this.footer = wrapper.children(roleSelector('footer')).addClass(classNames.footer);\n }\n });\n var ViewClone = kendo.Class.extend({\n init: function (view) {\n $.extend(this, {\n element: view.element.clone(true),\n transition: view.transition,\n id: view.id\n });\n view.element.parent().append(this.element);\n },\n hideEnd: function () {\n this.element.remove();\n },\n beforeTransition: $.noop,\n afterTransition: $.noop\n });\n var Layout = View.extend({\n init: function (content, options) {\n View.fn.init.call(this, content, options);\n this.containers = {};\n },\n container: function (selector) {\n var container = this.containers[selector];\n if (!container) {\n container = this._createContainer(selector);\n this.containers[selector] = container;\n }\n return container;\n },\n showIn: function (selector, view, transition) {\n this.container(selector).show(view, transition);\n },\n _createContainer: function (selector) {\n var root = this.render(), element = root.find(selector), container;\n if (!element.length && root.is(selector)) {\n if (root.is(selector)) {\n element = root;\n } else {\n throw new Error('can\\'t find a container with the specified ' + selector + ' selector');\n }\n }\n container = new ViewContainer(element);\n container.bind('accepted', function (e) {\n e.view.render(element);\n });\n return container;\n }\n });\n var Fragment = View.extend({\n attach: function (view, placeholder) {\n view.element.find(placeholder).replaceWith(this.render());\n },\n detach: function () {\n }\n });\n var transitionRegExp = /^(\\w+)(:(\\w+))?( (\\w+))?$/;\n function parseTransition(transition) {\n if (!transition) {\n return {};\n }\n var matches = transition.match(transitionRegExp) || [];\n return {\n type: matches[1],\n direction: matches[3],\n reverse: matches[5] === 'reverse'\n };\n }\n var ViewContainer = Observable.extend({\n init: function (container) {\n Observable.fn.init.call(this);\n this.container = container;\n this.history = [];\n this.view = null;\n this.running = false;\n },\n after: function () {\n this.running = false;\n this.trigger('complete', { view: this.view });\n this.trigger('after');\n },\n end: function () {\n this.view.showEnd();\n this.previous.hideEnd();\n this.after();\n },\n show: function (view, transition, locationID) {\n if (!view.triggerBeforeShow() || this.view && !this.view.triggerBeforeHide()) {\n this.trigger('after');\n return false;\n }\n locationID = locationID || view.id;\n var that = this, current = view === that.view ? view.clone() : that.view, history = that.history, previousEntry = history[history.length - 2] || {}, back = previousEntry.id === locationID, theTransition = transition || (back ? history[history.length - 1].transition : view.transition), transitionData = parseTransition(theTransition);\n if (that.running) {\n that.effect.stop();\n }\n if (theTransition === 'none') {\n theTransition = null;\n }\n that.trigger('accepted', { view: view });\n that.view = view;\n that.previous = current;\n that.running = true;\n if (!back) {\n history.push({\n id: locationID,\n transition: theTransition\n });\n } else {\n history.pop();\n }\n if (!current) {\n view.showStart();\n view.showEnd();\n that.after();\n return true;\n }\n if (!theTransition || !kendo.effects.enabled) {\n view.showStart();\n that.end();\n } else {\n view.element.addClass('k-fx-hidden');\n view.showStart();\n if (back && !transition) {\n transitionData.reverse = !transitionData.reverse;\n }\n that.effect = kendo.fx(view.element).replace(current.element, transitionData.type).beforeTransition(function () {\n view.beforeTransition('show');\n current.beforeTransition('hide');\n }).afterTransition(function () {\n view.afterTransition('show');\n current.afterTransition('hide');\n }).direction(transitionData.direction).setReverse(transitionData.reverse);\n that.effect.run().then(function () {\n that.end();\n });\n }\n return true;\n },\n destroy: function () {\n var that = this;\n var view = that.view;\n if (view && view.destroy) {\n view.destroy();\n }\n }\n });\n var ViewEngine = Observable.extend({\n init: function (options) {\n var that = this, views, container;\n Observable.fn.init.call(that);\n that.options = options;\n $.extend(that, options);\n that.sandbox = $('<div />');\n container = that.container;\n views = that._hideViews(container);\n that.rootView = views.first();\n that.layouts = {};\n that.viewContainer = new kendo.ViewContainer(that.container);\n that.viewContainer.bind('accepted', function (e) {\n e.view.params = that.params;\n });\n that.viewContainer.bind('complete', function (e) {\n that.trigger(VIEW_SHOW, { view: e.view });\n });\n that.viewContainer.bind(AFTER, function () {\n that.trigger(AFTER);\n });\n this.bind(this.events, options);\n },\n events: [\n SHOW_START,\n AFTER,\n VIEW_SHOW,\n LOAD_START,\n LOAD_COMPLETE,\n SAME_VIEW_REQUESTED,\n VIEW_TYPE_DETERMINED\n ],\n destroy: function () {\n var that = this;\n var viewContainer = that.viewContainer;\n kendo.destroy(that.container);\n for (var id in that.layouts) {\n this.layouts[id].destroy();\n }\n if (viewContainer) {\n viewContainer.destroy();\n }\n },\n view: function () {\n return this.viewContainer.view;\n },\n showView: function (url, transition, params) {\n url = url.replace(new RegExp('^' + this.remoteViewURLPrefix), '');\n if (url === '' && this.remoteViewURLPrefix) {\n url = '/';\n }\n if (url.replace(/^#/, '') === this.url) {\n this.trigger(SAME_VIEW_REQUESTED);\n return false;\n }\n this.trigger(SHOW_START);\n var that = this, element = that._findViewElement(url), view = kendo.widgetInstance(element);\n that.url = url.replace(/^#/, '');\n that.params = params;\n if (view && view.reload) {\n view.purge();\n element = [];\n }\n this.trigger(VIEW_TYPE_DETERMINED, {\n remote: element.length === 0,\n url: url\n });\n if (element[0]) {\n if (!view) {\n view = that._createView(element);\n }\n return that.viewContainer.show(view, transition, url);\n } else {\n return true;\n }\n },\n append: function (html, url) {\n var sandbox = this.sandbox, urlPath = (url || '').split('?')[0], container = this.container, views, view;\n if (bodyRegExp.test(html)) {\n html = RegExp.$1;\n }\n sandbox[0].innerHTML = html;\n container.append(sandbox.children('script, style'));\n views = this._hideViews(sandbox);\n view = views.first();\n if (!view.length) {\n views = view = sandbox.wrapInner('<div data-role=view />').children();\n }\n if (urlPath) {\n view.hide().attr(attr('url'), urlPath);\n }\n container.append(views);\n return this._createView(view);\n },\n _locate: function (selectors) {\n return this.$angular ? directiveSelector(selectors) : roleSelector(selectors);\n },\n _findViewElement: function (url) {\n var element, urlPath = url.split('?')[0];\n if (!urlPath) {\n return this.rootView;\n }\n element = this.container.children('[' + attr('url') + '=\\'' + urlPath + '\\']');\n if (!element[0] && urlPath.indexOf('/') === -1) {\n element = this.container.children(urlPath.charAt(0) === '#' ? urlPath : '#' + urlPath);\n }\n if (!element[0]) {\n element = this._findViewElementById(url);\n }\n return element;\n },\n _findViewElementById: function (id) {\n var element = this.container.children('[id=\\'' + id + '\\']');\n return element;\n },\n _createView: function (element) {\n return this._createSpaView(element);\n },\n _createMobileView: function (element) {\n return kendo.initWidget(element, {\n defaultTransition: this.transition,\n loader: this.loader,\n container: this.container,\n getLayout: this.getLayoutProxy,\n modelScope: this.modelScope,\n reload: attrValue(element, 'reload')\n }, ui.roles);\n },\n _createSpaView: function (element) {\n var viewOptions = (this.options || {}).viewOptions || {};\n return new kendo.View(element, {\n renderOnInit: viewOptions.renderOnInit,\n wrap: viewOptions.wrap || false,\n wrapInSections: viewOptions.wrapInSections,\n detachOnHide: viewOptions.detachOnHide,\n detachOnDestroy: viewOptions.detachOnDestroy\n });\n },\n _hideViews: function (container) {\n return container.children(this._locate('view')).hide();\n }\n });\n kendo.ViewEngine = ViewEngine;\n kendo.ViewContainer = ViewContainer;\n kendo.Fragment = Fragment;\n kendo.Layout = Layout;\n kendo.View = View;\n kendo.ViewClone = ViewClone;\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.floatinglabel', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'floatinglabel',\n name: 'FloatingLabel',\n category: 'framework',\n depends: ['core'],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, ui = kendo.ui, NS = '.kendoFloatingLabel', FLOATINGLABELCONTAINER = 'k-floating-label-container', EMPTY = 'k-state-empty', FOCUSED = 'k-state-focused', STATEDISABLED = 'k-state-disabled', NOCLICKCLASS = 'k-no-click', proxy = $.proxy;\n var FloatingLabel = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n options = $.extend(true, {}, options);\n that.refresh();\n that._editable({\n readonly: that.options.widget.options.readonly !== undefined ? that.options.widget.options.readonly : false,\n disable: that.options.widget.options.enable !== undefined ? !that.options.widget.options.enable : false\n });\n that.element.addClass(FLOATINGLABELCONTAINER);\n kendo.notify(that);\n },\n options: {\n name: 'FloatingLabel',\n widget: null\n },\n readonly: function (readonly) {\n this._editable({\n readonly: readonly === undefined ? true : readonly,\n disable: false\n });\n },\n enable: function (enable) {\n this._editable({\n readonly: false,\n disable: !(enable = enable === undefined ? true : enable)\n });\n },\n refresh: function () {\n var that = this;\n var element = that.element;\n element.removeClass(EMPTY).removeClass(FOCUSED);\n if (!that.options.widget.element.val()) {\n element.addClass(EMPTY);\n }\n if (document.activeElement === that.options.widget.element[0]) {\n element.addClass(FOCUSED);\n }\n },\n destroy: function () {\n var that = this;\n that.element.off(NS);\n Widget.fn.destroy.call(that);\n },\n _editable: function (options) {\n var that = this;\n var element = that.element;\n var disable = options.disable;\n var readonly = options.readonly;\n element.off(NS);\n if (!readonly && !disable) {\n element.removeClass(STATEDISABLED).removeClass(NOCLICKCLASS);\n element.on('focusin' + NS, proxy(that.refresh, that));\n element.on('focusout' + NS, proxy(that.refresh, that));\n } else {\n element.toggleClass(STATEDISABLED, disable).toggleClass(NOCLICKCLASS, readonly);\n }\n }\n });\n ui.plugin(FloatingLabel);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.data.signalr', ['kendo.data'], f);\n}(function () {\n var __meta__ = {\n id: 'data.signalr',\n name: 'SignalR',\n category: 'framework',\n depends: ['data'],\n hidden: true\n };\n (function ($) {\n var kendo = window.kendo;\n var isFunction = kendo.isFunction;\n function isJQueryPromise(promise) {\n return promise && isFunction(promise.done) && isFunction(promise.fail);\n }\n function isNativePromise(promise) {\n return promise && isFunction(promise.then) && isFunction(promise.catch);\n }\n var transport = kendo.data.RemoteTransport.extend({\n init: function (options) {\n var signalr = options && options.signalr ? options.signalr : {};\n var promise = signalr.promise;\n if (!promise) {\n throw new Error('The \"promise\" option must be set.');\n }\n if (!isJQueryPromise(promise) && !isNativePromise(promise)) {\n throw new Error('The \"promise\" option must be a Promise.');\n }\n this.promise = promise;\n var hub = signalr.hub;\n if (!hub) {\n throw new Error('The \"hub\" option must be set.');\n }\n if (typeof hub.on != 'function' || typeof hub.invoke != 'function') {\n throw new Error('The \"hub\" option is not a valid SignalR hub proxy.');\n }\n this.hub = hub;\n kendo.data.RemoteTransport.fn.init.call(this, options);\n },\n push: function (callbacks) {\n var client = this.options.signalr.client || {};\n if (client.create) {\n this.hub.on(client.create, callbacks.pushCreate);\n }\n if (client.update) {\n this.hub.on(client.update, callbacks.pushUpdate);\n }\n if (client.destroy) {\n this.hub.on(client.destroy, callbacks.pushDestroy);\n }\n },\n _crud: function (options, type) {\n var hub = this.hub;\n var promise = this.promise;\n var server = this.options.signalr.server;\n if (!server || !server[type]) {\n throw new Error(kendo.format('The \"server.{0}\" option must be set.', type));\n }\n var args = [server[type]];\n var data = this.parameterMap(options.data, type);\n if (!$.isEmptyObject(data)) {\n args.push(data);\n }\n if (isJQueryPromise(promise)) {\n promise.done(function () {\n hub.invoke.apply(hub, args).done(options.success).fail(options.error);\n });\n } else if (isNativePromise(promise)) {\n promise.then(function () {\n hub.invoke.apply(hub, args).then(options.success).catch(options.error);\n });\n }\n },\n read: function (options) {\n this._crud(options, 'read');\n },\n create: function (options) {\n this._crud(options, 'create');\n },\n update: function (options) {\n this._crud(options, 'update');\n },\n destroy: function (options) {\n this._crud(options, 'destroy');\n }\n });\n $.extend(true, kendo.data, { transports: { signalr: transport } });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.validator', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'validator',\n name: 'Validator',\n category: 'web',\n description: 'The Validator offers an easy way to do a client-side form validation.',\n depends: ['core']\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, NS = '.kendoValidator', INVALIDMSG = 'k-invalid-msg', invalidMsgRegExp = new RegExp(INVALIDMSG, 'i'), INVALIDINPUT = 'k-invalid', VALIDINPUT = 'k-valid', VALIDATIONSUMMARY = 'k-validation-summary', INVALIDLABEL = 'k-text-error', MESSAGEBOX = 'k-messagebox k-messagebox-error', ARIAINVALID = 'aria-invalid', ARIADESCRIBEDBY = 'aria-describedby', emailRegExp = /^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/i, urlRegExp = /^(https?|ftp):\\/\\/(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(\\#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i, INPUTSELECTOR = ':input:not(:button,[type=submit],[type=reset],[disabled],[readonly])', CHECKBOXSELECTOR = ':checkbox:not([disabled],[readonly])', NUMBERINPUTSELECTOR = '[type=number],[type=range]', BLUR = 'blur', NAME = 'name', FORM = 'form', NOVALIDATE = 'novalidate', VALIDATE = 'validate', CHANGE = 'change', VALIDATE_INPUT = 'validateInput', proxy = $.proxy, patternMatcher = function (value, pattern) {\n if (typeof pattern === 'string') {\n pattern = new RegExp('^(?:' + pattern + ')$');\n }\n return pattern.test(value);\n }, matcher = function (input, selector, pattern) {\n var value = input.val();\n if (input.filter(selector).length && value !== '') {\n return patternMatcher(value, pattern);\n }\n return true;\n }, hasAttribute = function (input, name) {\n if (input.length) {\n return input[0].attributes[name] != null;\n }\n return false;\n };\n if (!kendo.ui.validator) {\n kendo.ui.validator = {\n rules: {},\n messages: {},\n allowSubmit: $.noop,\n validateOnInit: $.noop\n };\n }\n function resolveRules(element) {\n var resolvers = kendo.ui.validator.ruleResolvers || {}, rules = {}, name;\n for (name in resolvers) {\n $.extend(true, rules, resolvers[name].resolve(element));\n }\n return rules;\n }\n function decode(value) {\n return value.replace(/&/g, '&').replace(/"/g, '\"').replace(/'/g, '\\'').replace(/</g, '<').replace(/>/g, '>');\n }\n function numberOfDecimalDigits(value) {\n value = (value + '').split('.');\n if (value.length > 1) {\n return value[1].length;\n }\n return 0;\n }\n function parseHtml(text) {\n if ($.parseHTML) {\n return $($.parseHTML(text));\n }\n return $(text);\n }\n function searchForMessageContainer(elements, fieldName) {\n var containers = $(), element, attr;\n for (var idx = 0, length = elements.length; idx < length; idx++) {\n element = elements[idx];\n if (invalidMsgRegExp.test(element.className)) {\n attr = element.getAttribute(kendo.attr('for'));\n if (attr === fieldName) {\n containers = containers.add(element);\n }\n }\n }\n return containers;\n }\n function isLabelFor(label, element) {\n if (!label) {\n return false;\n }\n if (typeof label.nodeName !== 'string' || label.nodeName !== 'LABEL') {\n return false;\n }\n if (typeof label.getAttribute('for') !== 'string' || typeof element.getAttribute('id') !== 'string') {\n return false;\n }\n if (label.getAttribute('for') !== element.getAttribute('id')) {\n return false;\n }\n return true;\n }\n var SUMMARYTEMPLATE = '<ul>' + '#for(var i = 0; i < errors.length; i += 1){#' + '<li><a data-field=\"#=errors[i].field#\" href=\"\\\\#\">#= errors[i].message #</a></li>' + '# } #' + '</ul>';\n var Validator = Widget.extend({\n init: function (element, options) {\n var that = this, resolved = resolveRules(element), validateAttributeSelector = '[' + kendo.attr('validate') + '!=false]';\n options = options || {};\n options.rules = $.extend({}, kendo.ui.validator.rules, resolved.rules, options.rules);\n options.messages = $.extend({}, kendo.ui.validator.messages, resolved.messages, options.messages);\n Widget.fn.init.call(that, element, options);\n that._errorTemplate = kendo.template(that.options.errorTemplate);\n that._summaryTemplate = kendo.template(that.options.validationSummary.template || SUMMARYTEMPLATE);\n if (that.element.is(FORM)) {\n that.element.attr(NOVALIDATE, NOVALIDATE);\n }\n that._inputSelector = INPUTSELECTOR + validateAttributeSelector;\n that._checkboxSelector = CHECKBOXSELECTOR + validateAttributeSelector;\n that._errors = {};\n that._attachEvents();\n that._isValidated = false;\n if (that._validateOnInit()) {\n that.validate();\n }\n },\n events: [\n VALIDATE,\n CHANGE,\n VALIDATE_INPUT\n ],\n options: {\n name: 'Validator',\n errorTemplate: '<span class=\"k-form-error\">#= message #</span>',\n messages: {\n required: '{0} is required',\n pattern: '{0} is not valid',\n min: '{0} should be greater than or equal to {1}',\n max: '{0} should be smaller than or equal to {1}',\n step: '{0} is not valid',\n email: '{0} is not valid email',\n url: '{0} is not valid URL',\n date: '{0} is not valid date',\n dateCompare: 'End date should be greater than or equal to the start date'\n },\n rules: {\n required: function (input) {\n var checkbox = input.filter('[type=checkbox]').length && !input.is(':checked'), value = input.val();\n return !(hasAttribute(input, 'required') && (!value || value === '' || value.length === 0 || checkbox));\n },\n pattern: function (input) {\n if (input.filter('[type=text],[type=email],[type=url],[type=tel],[type=search],[type=password]').filter('[pattern]').length && input.val() !== '') {\n return patternMatcher(input.val(), input.attr('pattern'));\n }\n return true;\n },\n min: function (input) {\n if (input.filter(NUMBERINPUTSELECTOR + ',[' + kendo.attr('type') + '=number]').filter('[min]').length && input.val() !== '') {\n var min = parseFloat(input.attr('min')) || 0, val = kendo.parseFloat(input.val());\n return min <= val;\n }\n return true;\n },\n max: function (input) {\n if (input.filter(NUMBERINPUTSELECTOR + ',[' + kendo.attr('type') + '=number]').filter('[max]').length && input.val() !== '') {\n var max = parseFloat(input.attr('max')) || 0, val = kendo.parseFloat(input.val());\n return max >= val;\n }\n return true;\n },\n step: function (input) {\n if (input.filter(NUMBERINPUTSELECTOR + ',[' + kendo.attr('type') + '=number]').filter('[step]').length && input.val() !== '') {\n var min = parseFloat(input.attr('min')) || 0, step = parseFloat(input.attr('step')) || 1, val = parseFloat(input.val()), decimals = numberOfDecimalDigits(step), raise;\n if (decimals) {\n raise = Math.pow(10, decimals);\n return Math.floor((val - min) * raise) % (step * raise) / Math.pow(100, decimals) === 0;\n }\n return (val - min) % step === 0;\n }\n return true;\n },\n email: function (input) {\n return matcher(input, '[type=email],[' + kendo.attr('type') + '=email]', emailRegExp);\n },\n url: function (input) {\n return matcher(input, '[type=url],[' + kendo.attr('type') + '=url]', urlRegExp);\n },\n date: function (input) {\n if (input.filter('[type^=date],[' + kendo.attr('type') + '=date]').length && input.val() !== '') {\n return kendo.parseDate(input.val(), input.attr(kendo.attr('format'))) !== null;\n }\n return true;\n }\n },\n validateOnBlur: true,\n validationSummary: false\n },\n _allowSubmit: function () {\n return kendo.ui.validator.allowSubmit(this.element, this.errors());\n },\n _validateOnInit: function () {\n return kendo.ui.validator.validateOnInit(this.element);\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.element.off(NS);\n if (this.validationSummary) {\n this.validationSummary.off(NS);\n this.validationSummary = null;\n }\n },\n value: function () {\n if (!this._isValidated) {\n return false;\n }\n return this.errors().length === 0;\n },\n _submit: function (e) {\n if (!this.validate() && !this._allowSubmit()) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n e.preventDefault();\n return false;\n }\n return true;\n },\n _checkElement: function (element) {\n var state = this.value();\n this.validateInput(element);\n if (this.value() !== state) {\n this.trigger(CHANGE);\n }\n },\n _attachEvents: function () {\n var that = this;\n if (that.element.is(FORM)) {\n that.element.on('submit' + NS, proxy(that._submit, that));\n }\n if (that.options.validateOnBlur) {\n if (!that.element.is(INPUTSELECTOR)) {\n that.element.on(BLUR + NS, that._inputSelector, function () {\n that._checkElement($(this));\n });\n that.element.on('click' + NS, that._checkboxSelector, function () {\n that._checkElement($(this));\n });\n } else {\n that.element.on(BLUR + NS, function () {\n that._checkElement(that.element);\n });\n if (that.element.is(CHECKBOXSELECTOR)) {\n that.element.on('click' + NS, function () {\n that._checkElement(that.element);\n });\n }\n }\n }\n },\n validate: function () {\n var inputs;\n var idx;\n var result = false;\n var length;\n var isValid = this.value();\n this._errors = {};\n if (!this.element.is(INPUTSELECTOR)) {\n var invalid = false;\n inputs = this.element.find(this._inputSelector);\n for (idx = 0, length = inputs.length; idx < length; idx++) {\n if (!this.validateInput(inputs.eq(idx))) {\n invalid = true;\n }\n }\n result = !invalid;\n } else {\n result = this.validateInput(this.element);\n }\n if (this.options.validationSummary && !isValid) {\n this.showValidationSummary();\n }\n this.trigger(VALIDATE, {\n valid: result,\n errors: this.errors()\n });\n if (isValid !== result) {\n this.trigger(CHANGE);\n }\n return result;\n },\n validateInput: function (input) {\n input = $(input);\n this._isValidated = true;\n var that = this, template = that._errorTemplate, result = that._checkValidity(input), valid = result.valid, className = '.' + INVALIDMSG, fieldName = input.attr(NAME) || '', lbl = that._findMessageContainer(fieldName).add(input.next(className).filter(function () {\n var element = $(this);\n if (element.filter('[' + kendo.attr('for') + ']').length) {\n return element.attr(kendo.attr('for')) === fieldName;\n }\n return true;\n })).addClass('k-hidden'), messageText = !valid ? that._extractMessage(input, result.key) : '', messageLabel = !valid ? parseHtml(template({\n message: decode(messageText),\n field: fieldName\n })) : '', wasValid = !input.attr(ARIAINVALID);\n input.removeAttr(ARIAINVALID);\n if (!valid) {\n that._errors[fieldName] = messageText;\n var lblId = lbl.attr('id');\n that._decorateMessageContainer(messageLabel, fieldName);\n if (lblId) {\n messageLabel.attr('id', lblId);\n }\n if (lbl.length !== 0) {\n lbl.replaceWith(messageLabel);\n } else {\n var widgetInstance = kendo.widgetInstance(input);\n var parentElement = input.parent().get(0);\n var nextElement = input.next().get(0);\n var prevElement = input.prev().get(0);\n if (widgetInstance && widgetInstance.wrapper) {\n messageLabel.insertAfter(widgetInstance.wrapper);\n } else if (parentElement && parentElement.nodeName === 'LABEL') {\n messageLabel.insertAfter(parentElement);\n } else if (nextElement && isLabelFor(nextElement, input[0])) {\n messageLabel.insertAfter(nextElement);\n } else if (prevElement && isLabelFor(prevElement, input[0])) {\n messageLabel.insertAfter(input);\n } else {\n messageLabel.insertAfter(input);\n }\n }\n messageLabel.removeClass('k-hidden');\n input.attr(ARIAINVALID, true);\n } else {\n delete that._errors[fieldName];\n }\n if (wasValid !== valid) {\n this.trigger(VALIDATE_INPUT, {\n valid: valid,\n input: input,\n error: messageText,\n field: fieldName\n });\n }\n input.toggleClass(INVALIDINPUT, !valid);\n input.toggleClass(VALIDINPUT, valid);\n if (kendo.widgetInstance(input)) {\n var inputWrap = kendo.widgetInstance(input)._inputWrapper;\n var inputLabel = kendo.widgetInstance(input)._inputLabel;\n if (inputWrap) {\n inputWrap.toggleClass(INVALIDINPUT, !valid);\n inputWrap.toggleClass(VALIDINPUT, valid);\n }\n if (inputLabel) {\n inputLabel.toggleClass(INVALIDLABEL, !valid);\n }\n }\n if (wasValid !== valid) {\n var errorId = messageLabel ? messageLabel.attr('id') : lbl.attr('id');\n that._associateMessageContainer(input, errorId);\n if (this.options.validationSummary && this.options.validateOnBlur) {\n this.showValidationSummary();\n }\n }\n return valid;\n },\n hideMessages: function () {\n var that = this, className = '.' + INVALIDMSG, element = that.element;\n that._disassociateMessageContainers();\n if (!element.is(INPUTSELECTOR)) {\n element.find(className).addClass('k-hidden');\n } else {\n element.next(className).addClass('k-hidden');\n }\n },\n reset: function () {\n var that = this, inputs = that.element.find('.' + INVALIDINPUT), labels = that.element.find('.' + INVALIDLABEL);\n that._errors = [];\n that.hideMessages();\n that.hideValidationSummary();\n inputs.removeAttr(ARIAINVALID);\n inputs.removeClass(INVALIDINPUT);\n labels.removeClass(INVALIDLABEL);\n },\n _findMessageContainer: function (fieldName) {\n var locators = kendo.ui.validator.messageLocators, name, containers = $();\n for (var idx = 0, length = this.element.length; idx < length; idx++) {\n containers = containers.add(searchForMessageContainer(this.element[idx].getElementsByTagName('*'), fieldName));\n }\n for (name in locators) {\n containers = containers.add(locators[name].locate(this.element, fieldName));\n }\n return containers;\n },\n _decorateMessageContainer: function (container, fieldName) {\n var locators = kendo.ui.validator.messageLocators, name;\n container.addClass(INVALIDMSG).attr(kendo.attr('for'), fieldName || '');\n if (!container.attr('id')) {\n container.attr('id', fieldName + '-error');\n }\n for (name in locators) {\n locators[name].decorate(container, fieldName);\n }\n },\n _extractMessage: function (input, ruleKey) {\n var that = this, customMessage = that.options.messages[ruleKey], fieldName = input.attr(NAME), nonDefaultMessage;\n if (!kendo.ui.Validator.prototype.options.messages[ruleKey]) {\n nonDefaultMessage = kendo.isFunction(customMessage) ? customMessage(input) : customMessage;\n }\n customMessage = kendo.isFunction(customMessage) ? customMessage(input) : customMessage;\n return kendo.format(input.attr(kendo.attr(ruleKey + '-msg')) || input.attr('validationMessage') || nonDefaultMessage || customMessage || input.attr('title') || '', fieldName, input.attr(ruleKey) || input.attr(kendo.attr(ruleKey)));\n },\n _checkValidity: function (input) {\n var rules = this.options.rules, rule;\n for (rule in rules) {\n if (!rules[rule].call(this, input)) {\n return {\n valid: false,\n key: rule\n };\n }\n }\n return { valid: true };\n },\n errors: function () {\n var results = [], errors = this._errors, error;\n for (error in errors) {\n results.push(errors[error]);\n }\n return results;\n },\n setOptions: function (options) {\n if (options.validationSummary) {\n this.hideValidationSummary();\n }\n kendo.deepExtend(this.options, options);\n this.destroy();\n this.init(this.element, this.options);\n this._setEvents(this.options);\n },\n _getInputNames: function () {\n var that = this, inputs = that.element.find(that._inputSelector), sorted = [];\n for (var idx = 0, length = inputs.length; idx < length; idx++) {\n var input = $(inputs[idx]);\n if (hasAttribute(input, NAME)) {\n sorted.push(input.attr(NAME));\n }\n }\n return sorted;\n },\n _associateMessageContainer: function (input, errorId) {\n var nextFocusable = kendo.getWidgetFocusableElement(input);\n if (!nextFocusable || !errorId) {\n return;\n }\n kendo.toggleAttribute(nextFocusable, ARIADESCRIBEDBY, errorId);\n },\n _disassociateMessageContainers: function () {\n var that = this, inputs = that.element.find('.' + INVALIDINPUT).addBack(), input, errorId;\n for (var i = 0; i < inputs.length; i += 1) {\n input = $(inputs[i]);\n if (input.is('input')) {\n errorId = that._findMessageContainer(input.attr(NAME)).add(input.next('.' + INVALIDMSG)).attr('id');\n that._associateMessageContainer(input, errorId);\n }\n }\n },\n _errorsByName: function () {\n var that = this, inputNames = that._getInputNames(), sorted = [];\n for (var i = 0; i < inputNames.length; i += 1) {\n var name = inputNames[i];\n if (that._errors[name]) {\n sorted.push({\n field: name,\n message: that._errors[name]\n });\n }\n }\n return sorted;\n },\n _renderSummary: function () {\n var that = this, options = this.options.validationSummary, element = this.element, prevElement = element.prev(), container;\n if (options.container) {\n container = $(options.container);\n } else if (prevElement && prevElement.hasClass(VALIDATIONSUMMARY)) {\n container = prevElement;\n } else {\n container = $('<div />').insertBefore(that.element);\n }\n container.addClass([\n VALIDATIONSUMMARY,\n MESSAGEBOX\n ].join(' '));\n container.attr('role', 'alert');\n container.on('click' + NS, proxy(that._summaryClick, that));\n return container;\n },\n _summaryClick: function (e) {\n e.preventDefault();\n var that = this, link = $(e.target), target = that.element.find('[name=\\'' + link.data('field') + '\\']'), nextFocusable;\n if (!target.length) {\n return;\n }\n nextFocusable = kendo.getWidgetFocusableElement(target);\n if (nextFocusable) {\n nextFocusable.focus();\n }\n },\n showValidationSummary: function () {\n var that = this, summary = that.validationSummary, errors = that._errorsByName(), errorsList;\n if (!summary) {\n summary = that.validationSummary = that._renderSummary();\n }\n errorsList = parseHtml(that._summaryTemplate({ errors: errors }));\n summary.html(errorsList);\n summary.toggleClass('k-hidden', !errors.length);\n },\n hideValidationSummary: function () {\n var that = this, summary = that.validationSummary;\n if (!summary) {\n return;\n }\n summary.addClass('k-hidden');\n }\n });\n kendo.ui.plugin(Validator);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.draganddrop', [\n 'kendo.core',\n 'kendo.userevents'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'draganddrop',\n name: 'Drag & drop',\n category: 'framework',\n description: 'Drag & drop functionality for any DOM element.',\n depends: [\n 'core',\n 'userevents'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, support = kendo.support, document = window.document, $window = $(window), Class = kendo.Class, Widget = kendo.ui.Widget, Observable = kendo.Observable, UserEvents = kendo.UserEvents, proxy = $.proxy, extend = $.extend, getOffset = kendo.getOffset, draggables = {}, dropTargets = {}, dropAreas = {}, lastDropTarget, elementUnderCursor = kendo.elementUnderCursor, KEYUP = 'keyup', CHANGE = 'change', DRAGSTART = 'dragstart', HOLD = 'hold', DRAG = 'drag', DRAGEND = 'dragend', DRAGCANCEL = 'dragcancel', HINTDESTROYED = 'hintDestroyed', DRAGENTER = 'dragenter', DRAGLEAVE = 'dragleave', DROP = 'drop';\n function contains(parent, child) {\n try {\n return $.contains(parent, child) || parent == child;\n } catch (e) {\n return false;\n }\n }\n function numericCssPropery(element, property) {\n return parseInt(element.css(property), 10) || 0;\n }\n function within(value, range) {\n return Math.min(Math.max(value, range.min), range.max);\n }\n function containerBoundaries(container, element) {\n var offset = getOffset(container), outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight, minX = offset.left + numericCssPropery(container, 'borderLeftWidth') + numericCssPropery(container, 'paddingLeft'), minY = offset.top + numericCssPropery(container, 'borderTopWidth') + numericCssPropery(container, 'paddingTop'), maxX = minX + container.width() - outerWidth(element, true), maxY = minY + container.height() - outerHeight(element, true);\n return {\n x: {\n min: minX,\n max: maxX\n },\n y: {\n min: minY,\n max: maxY\n }\n };\n }\n function checkTarget(target, targets, areas) {\n var theTarget, theFilter, i = 0, targetLen = targets && targets.length, areaLen = areas && areas.length;\n while (target && target.parentNode) {\n for (i = 0; i < targetLen; i++) {\n theTarget = targets[i];\n if (theTarget.element[0] === target) {\n return {\n target: theTarget,\n targetElement: target\n };\n }\n }\n for (i = 0; i < areaLen; i++) {\n theFilter = areas[i];\n if ($.contains(theFilter.element[0], target) && support.matchesSelector.call(target, theFilter.options.filter)) {\n return {\n target: theFilter,\n targetElement: target\n };\n }\n }\n target = target.parentNode;\n }\n return undefined;\n }\n var TapCapture = Observable.extend({\n init: function (element, options) {\n var that = this, domElement = element[0];\n that.capture = false;\n if (domElement.addEventListener) {\n $.each(kendo.eventMap.down.split(' '), function () {\n domElement.addEventListener(this, proxy(that._press, that), true);\n });\n $.each(kendo.eventMap.up.split(' '), function () {\n domElement.addEventListener(this, proxy(that._release, that), true);\n });\n } else {\n $.each(kendo.eventMap.down.split(' '), function () {\n domElement.attachEvent(this, proxy(that._press, that));\n });\n $.each(kendo.eventMap.up.split(' '), function () {\n domElement.attachEvent(this, proxy(that._release, that));\n });\n }\n Observable.fn.init.call(that);\n that.bind([\n 'press',\n 'release'\n ], options || {});\n },\n captureNext: function () {\n this.capture = true;\n },\n cancelCapture: function () {\n this.capture = false;\n },\n _press: function (e) {\n var that = this;\n that.trigger('press');\n if (that.capture) {\n e.preventDefault();\n }\n },\n _release: function (e) {\n var that = this;\n that.trigger('release');\n if (that.capture) {\n e.preventDefault();\n that.cancelCapture();\n }\n }\n });\n var PaneDimension = Observable.extend({\n init: function (options) {\n var that = this;\n Observable.fn.init.call(that);\n that.forcedEnabled = false;\n $.extend(that, options);\n that.scale = 1;\n if (that.horizontal) {\n that.measure = 'offsetWidth';\n that.scrollSize = 'scrollWidth';\n that.axis = 'x';\n } else {\n that.measure = 'offsetHeight';\n that.scrollSize = 'scrollHeight';\n that.axis = 'y';\n }\n },\n makeVirtual: function () {\n $.extend(this, {\n virtual: true,\n forcedEnabled: true,\n _virtualMin: 0,\n _virtualMax: 0\n });\n },\n virtualSize: function (min, max) {\n if (this._virtualMin !== min || this._virtualMax !== max) {\n this._virtualMin = min;\n this._virtualMax = max;\n this.update();\n }\n },\n outOfBounds: function (offset) {\n return offset > this.max || offset < this.min;\n },\n forceEnabled: function () {\n this.forcedEnabled = true;\n },\n getSize: function () {\n return this.container[0][this.measure];\n },\n getTotal: function () {\n return this.element[0][this.scrollSize];\n },\n rescale: function (scale) {\n this.scale = scale;\n },\n update: function (silent) {\n var that = this, total = that.virtual ? that._virtualMax : that.getTotal(), scaledTotal = total * that.scale, size = that.getSize();\n if (total === 0 && !that.forcedEnabled) {\n return;\n }\n that.max = that.virtual ? -that._virtualMin : 0;\n that.size = size;\n that.total = scaledTotal;\n that.min = Math.min(that.max, size - scaledTotal);\n that.minScale = size / total;\n that.centerOffset = (scaledTotal - size) / 2;\n that.enabled = that.forcedEnabled || scaledTotal > size;\n if (!silent) {\n that.trigger(CHANGE, that);\n }\n }\n });\n var PaneDimensions = Observable.extend({\n init: function (options) {\n var that = this;\n Observable.fn.init.call(that);\n that.x = new PaneDimension(extend({ horizontal: true }, options));\n that.y = new PaneDimension(extend({ horizontal: false }, options));\n that.container = options.container;\n that.forcedMinScale = options.minScale;\n that.maxScale = options.maxScale || 100;\n that.bind(CHANGE, options);\n },\n rescale: function (newScale) {\n this.x.rescale(newScale);\n this.y.rescale(newScale);\n this.refresh();\n },\n centerCoordinates: function () {\n return {\n x: Math.min(0, -this.x.centerOffset),\n y: Math.min(0, -this.y.centerOffset)\n };\n },\n refresh: function () {\n var that = this;\n that.x.update();\n that.y.update();\n that.enabled = that.x.enabled || that.y.enabled;\n that.minScale = that.forcedMinScale || Math.min(that.x.minScale, that.y.minScale);\n that.fitScale = Math.max(that.x.minScale, that.y.minScale);\n that.trigger(CHANGE);\n }\n });\n var PaneAxis = Observable.extend({\n init: function (options) {\n var that = this;\n extend(that, options);\n Observable.fn.init.call(that);\n },\n outOfBounds: function () {\n return this.dimension.outOfBounds(this.movable[this.axis]);\n },\n dragMove: function (delta) {\n var that = this, dimension = that.dimension, axis = that.axis, movable = that.movable, position = movable[axis] + delta;\n if (!dimension.enabled) {\n return;\n }\n if (position < dimension.min && delta < 0 || position > dimension.max && delta > 0) {\n delta *= that.resistance;\n }\n movable.translateAxis(axis, delta);\n that.trigger(CHANGE, that);\n }\n });\n var Pane = Class.extend({\n init: function (options) {\n var that = this, x, y, resistance, movable;\n extend(that, { elastic: true }, options);\n resistance = that.elastic ? 0.5 : 0;\n movable = that.movable;\n that.x = x = new PaneAxis({\n axis: 'x',\n dimension: that.dimensions.x,\n resistance: resistance,\n movable: movable\n });\n that.y = y = new PaneAxis({\n axis: 'y',\n dimension: that.dimensions.y,\n resistance: resistance,\n movable: movable\n });\n that.userEvents.bind([\n 'press',\n 'move',\n 'end',\n 'gesturestart',\n 'gesturechange'\n ], {\n gesturestart: function (e) {\n that.gesture = e;\n that.offset = that.dimensions.container.offset();\n },\n press: function (e) {\n if ($(e.event.target).closest('a').is('[data-navigate-on-press=true]')) {\n e.sender.cancel();\n }\n },\n gesturechange: function (e) {\n var previousGesture = that.gesture, previousCenter = previousGesture.center, center = e.center, scaleDelta = e.distance / previousGesture.distance, minScale = that.dimensions.minScale, maxScale = that.dimensions.maxScale, coordinates;\n if (movable.scale <= minScale && scaleDelta < 1) {\n scaleDelta += (1 - scaleDelta) * 0.8;\n }\n if (movable.scale * scaleDelta >= maxScale) {\n scaleDelta = maxScale / movable.scale;\n }\n var offsetX = movable.x + that.offset.left, offsetY = movable.y + that.offset.top;\n coordinates = {\n x: (offsetX - previousCenter.x) * scaleDelta + center.x - offsetX,\n y: (offsetY - previousCenter.y) * scaleDelta + center.y - offsetY\n };\n movable.scaleWith(scaleDelta);\n x.dragMove(coordinates.x);\n y.dragMove(coordinates.y);\n that.dimensions.rescale(movable.scale);\n that.gesture = e;\n e.preventDefault();\n },\n move: function (e) {\n if (e.event.target.tagName.match(/textarea|input/i)) {\n return;\n }\n if (x.dimension.enabled || y.dimension.enabled) {\n x.dragMove(e.x.delta);\n y.dragMove(e.y.delta);\n e.preventDefault();\n } else {\n e.touch.skip();\n }\n },\n end: function (e) {\n e.preventDefault();\n }\n });\n }\n });\n var TRANSFORM_STYLE = support.transitions.prefix + 'Transform', translate;\n if (support.hasHW3D) {\n translate = function (x, y, scale) {\n return 'translate3d(' + x + 'px,' + y + 'px,0) scale(' + scale + ')';\n };\n } else {\n translate = function (x, y, scale) {\n return 'translate(' + x + 'px,' + y + 'px) scale(' + scale + ')';\n };\n }\n var Movable = Observable.extend({\n init: function (element) {\n var that = this;\n Observable.fn.init.call(that);\n that.element = $(element);\n that.element[0].style.webkitTransformOrigin = 'left top';\n that.x = 0;\n that.y = 0;\n that.scale = 1;\n that._saveCoordinates(translate(that.x, that.y, that.scale));\n },\n translateAxis: function (axis, by) {\n this[axis] += by;\n this.refresh();\n },\n scaleTo: function (scale) {\n this.scale = scale;\n this.refresh();\n },\n scaleWith: function (scaleDelta) {\n this.scale *= scaleDelta;\n this.refresh();\n },\n translate: function (coordinates) {\n this.x += coordinates.x;\n this.y += coordinates.y;\n this.refresh();\n },\n moveAxis: function (axis, value) {\n this[axis] = value;\n this.refresh();\n },\n moveTo: function (coordinates) {\n extend(this, coordinates);\n this.refresh();\n },\n refresh: function () {\n var that = this, x = that.x, y = that.y, newCoordinates;\n if (that.round) {\n x = Math.round(x);\n y = Math.round(y);\n }\n newCoordinates = translate(x, y, that.scale);\n if (newCoordinates != that.coordinates) {\n if (kendo.support.browser.msie && kendo.support.browser.version < 10) {\n that.element[0].style.position = 'absolute';\n that.element[0].style.left = that.x + 'px';\n that.element[0].style.top = that.y + 'px';\n } else {\n that.element[0].style[TRANSFORM_STYLE] = newCoordinates;\n }\n that._saveCoordinates(newCoordinates);\n that.trigger(CHANGE);\n }\n },\n _saveCoordinates: function (coordinates) {\n this.coordinates = coordinates;\n }\n });\n function destroyDroppable(collection, widget) {\n var groupName = widget.options.group, droppables = collection[groupName], i;\n Widget.fn.destroy.call(widget);\n if (droppables.length > 1) {\n for (i = 0; i < droppables.length; i++) {\n if (droppables[i] == widget) {\n droppables.splice(i, 1);\n break;\n }\n }\n } else {\n droppables.length = 0;\n delete collection[groupName];\n }\n }\n var DropTarget = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n var group = that.options.group;\n if (!(group in dropTargets)) {\n dropTargets[group] = [that];\n } else {\n dropTargets[group].push(that);\n }\n },\n events: [\n DRAGENTER,\n DRAGLEAVE,\n DROP\n ],\n options: {\n name: 'DropTarget',\n group: 'default'\n },\n destroy: function () {\n destroyDroppable(dropTargets, this);\n },\n _trigger: function (eventName, e) {\n var that = this, draggable = draggables[that.options.group];\n if (draggable) {\n return that.trigger(eventName, extend({}, e.event, {\n draggable: draggable,\n dropTarget: e.dropTarget\n }));\n }\n },\n _over: function (e) {\n this._trigger(DRAGENTER, e);\n },\n _out: function (e) {\n this._trigger(DRAGLEAVE, e);\n },\n _drop: function (e) {\n var that = this, draggable = draggables[that.options.group];\n if (draggable) {\n draggable.dropped = !that._trigger(DROP, e);\n }\n }\n });\n DropTarget.destroyGroup = function (groupName) {\n var group = dropTargets[groupName] || dropAreas[groupName], i;\n if (group) {\n for (i = 0; i < group.length; i++) {\n Widget.fn.destroy.call(group[i]);\n }\n group.length = 0;\n delete dropTargets[groupName];\n delete dropAreas[groupName];\n }\n };\n DropTarget._cache = dropTargets;\n var DropTargetArea = DropTarget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n var group = that.options.group;\n if (!(group in dropAreas)) {\n dropAreas[group] = [that];\n } else {\n dropAreas[group].push(that);\n }\n },\n destroy: function () {\n destroyDroppable(dropAreas, this);\n },\n options: {\n name: 'DropTargetArea',\n group: 'default',\n filter: null\n }\n });\n var Draggable = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n that._activated = false;\n that.userEvents = new UserEvents(that.element, {\n global: true,\n allowSelection: true,\n filter: that.options.filter,\n threshold: that.options.distance,\n start: proxy(that._start, that),\n hold: proxy(that._hold, that),\n move: proxy(that._drag, that),\n end: proxy(that._end, that),\n cancel: proxy(that._cancel, that),\n select: proxy(that._select, that)\n });\n if (kendo.support.touch) {\n that.element.find(that.options.filter).css('touch-action', 'none');\n }\n that._afterEndHandler = proxy(that._afterEnd, that);\n that._captureEscape = proxy(that._captureEscape, that);\n },\n events: [\n HOLD,\n DRAGSTART,\n DRAG,\n DRAGEND,\n DRAGCANCEL,\n HINTDESTROYED\n ],\n options: {\n name: 'Draggable',\n distance: kendo.support.touch ? 0 : 5,\n group: 'default',\n cursorOffset: null,\n axis: null,\n container: null,\n filter: null,\n ignore: null,\n holdToDrag: false,\n autoScroll: false,\n dropped: false\n },\n cancelHold: function () {\n this._activated = false;\n },\n _captureEscape: function (e) {\n var that = this;\n if (e.keyCode === kendo.keys.ESC) {\n that._trigger(DRAGCANCEL, { event: e });\n that.userEvents.cancel();\n }\n },\n _updateHint: function (e) {\n var that = this, coordinates, options = that.options, boundaries = that.boundaries, axis = options.axis, cursorOffset = that.options.cursorOffset;\n if (cursorOffset) {\n coordinates = {\n left: e.x.location + cursorOffset.left,\n top: e.y.location + cursorOffset.top\n };\n } else {\n that.hintOffset.left += e.x.delta;\n that.hintOffset.top += e.y.delta;\n coordinates = $.extend({}, that.hintOffset);\n }\n if (boundaries) {\n coordinates.top = within(coordinates.top, boundaries.y);\n coordinates.left = within(coordinates.left, boundaries.x);\n }\n if (axis === 'x') {\n delete coordinates.top;\n } else if (axis === 'y') {\n delete coordinates.left;\n }\n that.hint.css(coordinates);\n },\n _shouldIgnoreTarget: function (target) {\n var ignoreSelector = this.options.ignore;\n return ignoreSelector && $(target).is(ignoreSelector);\n },\n _select: function (e) {\n if (!this._shouldIgnoreTarget(e.event.target)) {\n e.preventDefault();\n }\n },\n _start: function (e) {\n var that = this, options = that.options, container = options.container ? $(options.container) : null, hint = options.hint;\n if (this._shouldIgnoreTarget(e.touch.initialTouch) || options.holdToDrag && !that._activated) {\n that.userEvents.cancel();\n return;\n }\n that.currentTarget = e.target;\n that.currentTargetOffset = getOffset(that.currentTarget);\n if (hint) {\n if (that.hint) {\n that.hint.stop(true, true).remove();\n }\n that.hint = kendo.isFunction(hint) ? $(hint.call(that, that.currentTarget)) : hint;\n var offset = getOffset(that.currentTarget);\n that.hintOffset = offset;\n that.hint.css({\n position: 'absolute',\n zIndex: 20000,\n left: offset.left,\n top: offset.top\n }).appendTo(document.body);\n that.angular('compile', function () {\n that.hint.removeAttr('ng-repeat');\n var scopeTarget = $(e.target);\n while (!scopeTarget.data('$$kendoScope') && scopeTarget.length) {\n scopeTarget = scopeTarget.parent();\n }\n return {\n elements: that.hint.get(),\n scopeFrom: scopeTarget.data('$$kendoScope')\n };\n });\n }\n draggables[options.group] = that;\n that.dropped = false;\n if (container) {\n that.boundaries = containerBoundaries(container, that.hint);\n }\n $(document).on(KEYUP, that._captureEscape);\n if (that._trigger(DRAGSTART, e)) {\n that.userEvents.cancel();\n that._afterEnd();\n }\n that.userEvents.capture();\n },\n _hold: function (e) {\n this.currentTarget = e.target;\n if (this._trigger(HOLD, e)) {\n this.userEvents.cancel();\n } else {\n this._activated = true;\n }\n },\n _drag: function (e) {\n e.preventDefault();\n var cursorElement = this._elementUnderCursor(e);\n if (this.options.autoScroll && this._cursorElement !== cursorElement) {\n this._scrollableParent = findScrollableParent(cursorElement);\n this._cursorElement = cursorElement;\n }\n this._lastEvent = e;\n this._processMovement(e, cursorElement);\n if (this.options.autoScroll) {\n if (this._scrollableParent[0]) {\n var velocity = autoScrollVelocity(e.x.location, e.y.location, scrollableViewPort(this._scrollableParent));\n this._scrollCompenstation = $.extend({}, this.hintOffset);\n this._scrollVelocity = velocity;\n if (velocity.y === 0 && velocity.x === 0) {\n clearInterval(this._scrollInterval);\n this._scrollInterval = null;\n } else if (!this._scrollInterval) {\n this._scrollInterval = setInterval($.proxy(this, '_autoScroll'), 50);\n }\n }\n }\n if (this.hint) {\n this._updateHint(e);\n }\n },\n _processMovement: function (e, cursorElement) {\n this._withDropTarget(cursorElement, function (target, targetElement) {\n if (!target) {\n if (lastDropTarget) {\n lastDropTarget._trigger(DRAGLEAVE, extend(e, { dropTarget: $(lastDropTarget.targetElement) }));\n lastDropTarget = null;\n }\n return;\n }\n if (lastDropTarget) {\n if (targetElement === lastDropTarget.targetElement) {\n return;\n }\n lastDropTarget._trigger(DRAGLEAVE, extend(e, { dropTarget: $(lastDropTarget.targetElement) }));\n }\n target._trigger(DRAGENTER, extend(e, { dropTarget: $(targetElement) }));\n lastDropTarget = extend(target, { targetElement: targetElement });\n });\n this._trigger(DRAG, extend(e, {\n dropTarget: lastDropTarget,\n elementUnderCursor: cursorElement\n }));\n },\n _autoScroll: function () {\n var parent = this._scrollableParent[0], velocity = this._scrollVelocity, compensation = this._scrollCompenstation;\n if (!parent) {\n return;\n }\n var cursorElement = this._elementUnderCursor(this._lastEvent);\n this._processMovement(this._lastEvent, cursorElement);\n var yIsScrollable, xIsScrollable;\n var isRootNode = parent === scrollableRoot()[0];\n if (isRootNode) {\n yIsScrollable = document.body.scrollHeight > $window.height();\n xIsScrollable = document.body.scrollWidth > $window.width();\n } else {\n yIsScrollable = parent.offsetHeight <= parent.scrollHeight;\n xIsScrollable = parent.offsetWidth <= parent.scrollWidth;\n }\n var yDelta = parent.scrollTop + velocity.y;\n var yInBounds = yIsScrollable && yDelta > 0 && yDelta < parent.scrollHeight;\n var xDelta = parent.scrollLeft + velocity.x;\n var xInBounds = xIsScrollable && xDelta > 0 && xDelta < parent.scrollWidth;\n if (yInBounds) {\n parent.scrollTop += velocity.y;\n }\n if (xInBounds) {\n parent.scrollLeft += velocity.x;\n }\n if (this.hint && isRootNode && (xInBounds || yInBounds)) {\n if (yInBounds) {\n compensation.top += velocity.y;\n }\n if (xInBounds) {\n compensation.left += velocity.x;\n }\n this.hint.css(compensation);\n }\n },\n _end: function (e) {\n this._withDropTarget(this._elementUnderCursor(e), function (target, targetElement) {\n if (target) {\n target._drop(extend({}, e, { dropTarget: $(targetElement) }));\n lastDropTarget = null;\n }\n });\n this._cancel(this._trigger(DRAGEND, e));\n },\n _cancel: function (isDefaultPrevented) {\n var that = this;\n that._scrollableParent = null;\n this._cursorElement = null;\n clearInterval(this._scrollInterval);\n that._activated = false;\n if (that.hint && !that.dropped) {\n setTimeout(function () {\n that.hint.stop(true, true);\n if (isDefaultPrevented) {\n that._afterEndHandler();\n } else {\n that.hint.animate(that.currentTargetOffset, 'fast', that._afterEndHandler);\n }\n }, 0);\n } else {\n that._afterEnd();\n }\n },\n _trigger: function (eventName, e) {\n var that = this;\n return that.trigger(eventName, extend({}, e.event, {\n x: e.x,\n y: e.y,\n currentTarget: that.currentTarget,\n initialTarget: e.touch ? e.touch.initialTouch : null,\n dropTarget: e.dropTarget,\n elementUnderCursor: e.elementUnderCursor\n }));\n },\n _elementUnderCursor: function (e) {\n var target = elementUnderCursor(e), hint = this.hint;\n if (hint && contains(hint[0], target)) {\n hint.hide();\n target = elementUnderCursor(e);\n if (!target) {\n target = elementUnderCursor(e);\n }\n hint.show();\n }\n return target;\n },\n _withDropTarget: function (element, callback) {\n var result, group = this.options.group, targets = dropTargets[group], areas = dropAreas[group];\n if (targets && targets.length || areas && areas.length) {\n result = checkTarget(element, targets, areas);\n if (result) {\n callback(result.target, result.targetElement);\n } else {\n callback();\n }\n }\n },\n destroy: function () {\n var that = this;\n Widget.fn.destroy.call(that);\n that._afterEnd();\n that.userEvents.destroy();\n this._scrollableParent = null;\n this._cursorElement = null;\n clearInterval(this._scrollInterval);\n that.currentTarget = null;\n },\n _afterEnd: function () {\n var that = this;\n if (that.hint) {\n that.hint.remove();\n }\n delete draggables[that.options.group];\n that.trigger('destroy');\n that.trigger(HINTDESTROYED);\n $(document).off(KEYUP, that._captureEscape);\n }\n });\n kendo.ui.plugin(DropTarget);\n kendo.ui.plugin(DropTargetArea);\n kendo.ui.plugin(Draggable);\n kendo.TapCapture = TapCapture;\n kendo.containerBoundaries = containerBoundaries;\n extend(kendo.ui, {\n Pane: Pane,\n PaneDimensions: PaneDimensions,\n Movable: Movable\n });\n function scrollableViewPort(element) {\n var root = scrollableRoot()[0], offset, top, left;\n if (element[0] === root) {\n top = root.scrollTop;\n left = root.scrollLeft;\n return {\n top: top,\n left: left,\n bottom: top + $window.height(),\n right: left + $window.width()\n };\n } else {\n offset = element.offset();\n offset.bottom = offset.top + element.height();\n offset.right = offset.left + element.width();\n return offset;\n }\n }\n function scrollableRoot() {\n return $(kendo.support.browser.edge || kendo.support.browser.safari ? document.body : document.documentElement);\n }\n function findScrollableParent(element) {\n var root = scrollableRoot();\n if (!element || element === document.body || element === document.documentElement) {\n return root;\n }\n var parent = $(element)[0];\n while (parent && !kendo.isScrollable(parent) && parent !== document.body) {\n parent = parent.parentNode;\n }\n if (parent === document.body) {\n return root;\n }\n return $(parent);\n }\n function autoScrollVelocity(mouseX, mouseY, rect) {\n var velocity = {\n x: 0,\n y: 0\n };\n var AUTO_SCROLL_AREA = 50;\n if (mouseX - rect.left < AUTO_SCROLL_AREA) {\n velocity.x = -(AUTO_SCROLL_AREA - (mouseX - rect.left));\n } else if (rect.right - mouseX < AUTO_SCROLL_AREA) {\n velocity.x = AUTO_SCROLL_AREA - (rect.right - mouseX);\n }\n if (mouseY - rect.top < AUTO_SCROLL_AREA) {\n velocity.y = -(AUTO_SCROLL_AREA - (mouseY - rect.top));\n } else if (rect.bottom - mouseY < AUTO_SCROLL_AREA) {\n velocity.y = AUTO_SCROLL_AREA - (rect.bottom - mouseY);\n }\n return velocity;\n }\n kendo.ui.Draggable.utils = {\n autoScrollVelocity: autoScrollVelocity,\n scrollableViewPort: scrollableViewPort,\n findScrollableParent: findScrollableParent\n };\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.scroller', [\n 'kendo.fx',\n 'kendo.draganddrop'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.scroller',\n name: 'Scroller',\n category: 'mobile',\n description: 'The Kendo Mobile Scroller widget enables touch friendly kinetic scrolling for the contents of a given DOM element.',\n depends: [\n 'fx',\n 'draganddrop'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, mobile = kendo.mobile, fx = kendo.effects, ui = mobile.ui, proxy = $.proxy, extend = $.extend, Widget = ui.Widget, Class = kendo.Class, Movable = kendo.ui.Movable, Pane = kendo.ui.Pane, PaneDimensions = kendo.ui.PaneDimensions, Transition = fx.Transition, Animation = fx.Animation, abs = Math.abs, SNAPBACK_DURATION = 500, SCROLLBAR_OPACITY = 0.7, FRICTION = 0.96, VELOCITY_MULTIPLIER = 10, MAX_VELOCITY = 55, OUT_OF_BOUNDS_FRICTION = 0.5, ANIMATED_SCROLLER_PRECISION = 5, RELEASECLASS = 'km-scroller-release', REFRESHCLASS = 'km-scroller-refresh', PULL = 'pull', CHANGE = 'change', RESIZE = 'resize', SCROLL = 'scroll', MOUSE_WHEEL_ID = 2;\n var ZoomSnapBack = Animation.extend({\n init: function (options) {\n var that = this;\n Animation.fn.init.call(that);\n extend(that, options);\n that.userEvents.bind('gestureend', proxy(that.start, that));\n that.tapCapture.bind('press', proxy(that.cancel, that));\n },\n enabled: function () {\n return this.movable.scale < this.dimensions.minScale;\n },\n done: function () {\n return this.dimensions.minScale - this.movable.scale < 0.01;\n },\n tick: function () {\n var movable = this.movable;\n movable.scaleWith(1.1);\n this.dimensions.rescale(movable.scale);\n },\n onEnd: function () {\n var movable = this.movable;\n movable.scaleTo(this.dimensions.minScale);\n this.dimensions.rescale(movable.scale);\n }\n });\n var DragInertia = Animation.extend({\n init: function (options) {\n var that = this;\n Animation.fn.init.call(that);\n extend(that, options, {\n transition: new Transition({\n axis: options.axis,\n movable: options.movable,\n onEnd: function () {\n that._end();\n }\n })\n });\n that.tapCapture.bind('press', function () {\n that.cancel();\n });\n that.userEvents.bind('end', proxy(that.start, that));\n that.userEvents.bind('gestureend', proxy(that.start, that));\n that.userEvents.bind('tap', proxy(that.onEnd, that));\n },\n onCancel: function () {\n this.transition.cancel();\n },\n freeze: function (location) {\n var that = this;\n that.cancel();\n that._moveTo(location);\n },\n onEnd: function () {\n var that = this;\n if (that.paneAxis.outOfBounds()) {\n that._snapBack();\n } else {\n that._end();\n }\n },\n done: function () {\n return abs(this.velocity) < 1;\n },\n start: function (e) {\n var that = this, velocity;\n if (!that.dimension.enabled) {\n return;\n }\n if (that.paneAxis.outOfBounds()) {\n if (that.transition._started) {\n that.transition.cancel();\n that.velocity = Math.min(e.touch[that.axis].velocity * that.velocityMultiplier, MAX_VELOCITY);\n Animation.fn.start.call(that);\n } else {\n that._snapBack();\n }\n } else {\n velocity = e.touch.id === MOUSE_WHEEL_ID ? 0 : e.touch[that.axis].velocity;\n that.velocity = Math.max(Math.min(velocity * that.velocityMultiplier, MAX_VELOCITY), -MAX_VELOCITY);\n that.tapCapture.captureNext();\n Animation.fn.start.call(that);\n }\n },\n tick: function () {\n var that = this, dimension = that.dimension, friction = that.paneAxis.outOfBounds() ? OUT_OF_BOUNDS_FRICTION : that.friction, delta = that.velocity *= friction, location = that.movable[that.axis] + delta;\n if (!that.elastic && dimension.outOfBounds(location)) {\n location = Math.max(Math.min(location, dimension.max), dimension.min);\n that.velocity = 0;\n }\n that.movable.moveAxis(that.axis, location);\n },\n _end: function () {\n this.tapCapture.cancelCapture();\n this.end();\n },\n _snapBack: function () {\n var that = this, dimension = that.dimension, snapBack = that.movable[that.axis] > dimension.max ? dimension.max : dimension.min;\n that._moveTo(snapBack);\n },\n _moveTo: function (location) {\n this.transition.moveTo({\n location: location,\n duration: SNAPBACK_DURATION,\n ease: Transition.easeOutExpo\n });\n }\n });\n var AnimatedScroller = Animation.extend({\n init: function (options) {\n var that = this;\n kendo.effects.Animation.fn.init.call(this);\n extend(that, options, {\n origin: {},\n destination: {},\n offset: {}\n });\n },\n tick: function () {\n this._updateCoordinates();\n this.moveTo(this.origin);\n },\n done: function () {\n return abs(this.offset.y) < ANIMATED_SCROLLER_PRECISION && abs(this.offset.x) < ANIMATED_SCROLLER_PRECISION;\n },\n onEnd: function () {\n this.moveTo(this.destination);\n if (this.callback) {\n this.callback.call();\n }\n },\n setCoordinates: function (from, to) {\n this.offset = {};\n this.origin = from;\n this.destination = to;\n },\n setCallback: function (callback) {\n if (callback && kendo.isFunction(callback)) {\n this.callback = callback;\n } else {\n callback = undefined;\n }\n },\n _updateCoordinates: function () {\n this.offset = {\n x: (this.destination.x - this.origin.x) / 4,\n y: (this.destination.y - this.origin.y) / 4\n };\n this.origin = {\n y: this.origin.y + this.offset.y,\n x: this.origin.x + this.offset.x\n };\n }\n });\n var ScrollBar = Class.extend({\n init: function (options) {\n var that = this, horizontal = options.axis === 'x', element = $('<div class=\"km-touch-scrollbar km-' + (horizontal ? 'horizontal' : 'vertical') + '-scrollbar\" />');\n extend(that, options, {\n element: element,\n elementSize: 0,\n movable: new Movable(element),\n scrollMovable: options.movable,\n alwaysVisible: options.alwaysVisible,\n size: horizontal ? 'width' : 'height'\n });\n that.scrollMovable.bind(CHANGE, proxy(that.refresh, that));\n that.container.append(element);\n if (options.alwaysVisible) {\n that.show();\n }\n },\n refresh: function () {\n var that = this, axis = that.axis, dimension = that.dimension, paneSize = dimension.size, scrollMovable = that.scrollMovable, sizeRatio = paneSize / dimension.total, position = Math.round(-scrollMovable[axis] * sizeRatio), size = Math.round(paneSize * sizeRatio);\n if (sizeRatio >= 1) {\n this.element.css('display', 'none');\n } else {\n this.element.css('display', '');\n }\n if (position + size > paneSize) {\n size = paneSize - position;\n } else if (position < 0) {\n size += position;\n position = 0;\n }\n if (that.elementSize != size) {\n that.element.css(that.size, size + 'px');\n that.elementSize = size;\n }\n that.movable.moveAxis(axis, position);\n },\n show: function () {\n this.element.css({\n opacity: SCROLLBAR_OPACITY,\n visibility: 'visible'\n });\n },\n hide: function () {\n if (!this.alwaysVisible) {\n this.element.css({ opacity: 0 });\n }\n }\n });\n var Scroller = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n element = that.element;\n that._native = that.options.useNative && kendo.support.hasNativeScrolling;\n if (that._native) {\n element.addClass('km-native-scroller').prepend('<div class=\"km-scroll-header\"/>');\n extend(that, {\n scrollElement: element,\n fixedContainer: element.children().first()\n });\n return;\n }\n element.css('overflow', 'hidden').addClass('km-scroll-wrapper').wrapInner('<div class=\"km-scroll-container\"/>').prepend('<div class=\"km-scroll-header\"/>');\n var inner = element.children().eq(1), tapCapture = new kendo.TapCapture(element), movable = new Movable(inner), dimensions = new PaneDimensions({\n element: inner,\n container: element,\n forcedEnabled: that.options.zoom\n }), avoidScrolling = this.options.avoidScrolling, userEvents = new kendo.UserEvents(element, {\n touchAction: 'pan-y',\n fastTap: true,\n allowSelection: true,\n preventDragEvent: true,\n captureUpIfMoved: true,\n multiTouch: that.options.zoom,\n supportDoubleTap: that.options.supportDoubleTap,\n start: function (e) {\n dimensions.refresh();\n var velocityX = abs(e.x.velocity), velocityY = abs(e.y.velocity), horizontalSwipe = velocityX * 2 >= velocityY, originatedFromFixedContainer = $.contains(that.fixedContainer[0], e.event.target), verticalSwipe = velocityY * 2 >= velocityX;\n if (!originatedFromFixedContainer && !avoidScrolling(e) && that.enabled && (dimensions.x.enabled && horizontalSwipe || dimensions.y.enabled && verticalSwipe)) {\n userEvents.capture();\n } else {\n userEvents.cancel();\n }\n }\n }), pane = new Pane({\n movable: movable,\n dimensions: dimensions,\n userEvents: userEvents,\n elastic: that.options.elastic\n }), zoomSnapBack = new ZoomSnapBack({\n movable: movable,\n dimensions: dimensions,\n userEvents: userEvents,\n tapCapture: tapCapture\n }), animatedScroller = new AnimatedScroller({\n moveTo: function (coordinates) {\n that.scrollTo(coordinates.x, coordinates.y);\n }\n });\n movable.bind(CHANGE, function () {\n that.scrollTop = -movable.y;\n that.scrollLeft = -movable.x;\n that.trigger(SCROLL, {\n scrollTop: that.scrollTop,\n scrollLeft: that.scrollLeft\n });\n });\n if (that.options.mousewheelScrolling) {\n element.on('DOMMouseScroll mousewheel', proxy(this, '_wheelScroll'));\n }\n extend(that, {\n movable: movable,\n dimensions: dimensions,\n zoomSnapBack: zoomSnapBack,\n animatedScroller: animatedScroller,\n userEvents: userEvents,\n pane: pane,\n tapCapture: tapCapture,\n pulled: false,\n enabled: true,\n scrollElement: inner,\n scrollTop: 0,\n scrollLeft: 0,\n fixedContainer: element.children().first()\n });\n that._initAxis('x');\n that._initAxis('y');\n that._wheelEnd = function () {\n that._wheel = false;\n that.userEvents.end(0, that._wheelY);\n };\n dimensions.refresh();\n if (that.options.pullToRefresh) {\n that._initPullToRefresh();\n }\n },\n _wheelScroll: function (e) {\n if (e.ctrlKey) {\n return;\n }\n if (!this._wheel) {\n this._wheel = true;\n this._wheelY = 0;\n this.userEvents.press(0, this._wheelY);\n }\n clearTimeout(this._wheelTimeout);\n this._wheelTimeout = setTimeout(this._wheelEnd, 50);\n var delta = kendo.wheelDeltaY(e);\n if (delta) {\n this._wheelY += delta;\n this.userEvents.move(0, this._wheelY);\n }\n e.preventDefault();\n },\n makeVirtual: function () {\n this.dimensions.y.makeVirtual();\n },\n virtualSize: function (min, max) {\n this.dimensions.y.virtualSize(min, max);\n },\n height: function () {\n return this.dimensions.y.size;\n },\n scrollHeight: function () {\n return this.scrollElement[0].scrollHeight;\n },\n scrollWidth: function () {\n return this.scrollElement[0].scrollWidth;\n },\n options: {\n name: 'Scroller',\n zoom: false,\n pullOffset: 140,\n visibleScrollHints: false,\n elastic: true,\n useNative: false,\n mousewheelScrolling: true,\n avoidScrolling: function () {\n return false;\n },\n pullToRefresh: false,\n messages: {\n pullTemplate: 'Pull to refresh',\n releaseTemplate: 'Release to refresh',\n refreshTemplate: 'Refreshing'\n }\n },\n events: [\n PULL,\n SCROLL,\n RESIZE\n ],\n _resize: function () {\n if (!this._native) {\n this.contentResized();\n }\n },\n setOptions: function (options) {\n var that = this;\n Widget.fn.setOptions.call(that, options);\n if (options.pullToRefresh) {\n that._initPullToRefresh();\n }\n },\n reset: function () {\n if (this._native) {\n this.scrollElement.scrollTop(0);\n } else {\n this.movable.moveTo({\n x: 0,\n y: 0\n });\n this._scale(1);\n }\n },\n contentResized: function () {\n this.dimensions.refresh();\n if (this.pane.x.outOfBounds()) {\n this.movable.moveAxis('x', this.dimensions.x.min);\n }\n if (this.pane.y.outOfBounds()) {\n this.movable.moveAxis('y', this.dimensions.y.min);\n }\n },\n zoomOut: function () {\n var dimensions = this.dimensions;\n dimensions.refresh();\n this._scale(dimensions.fitScale);\n this.movable.moveTo(dimensions.centerCoordinates());\n },\n enable: function () {\n this.enabled = true;\n },\n disable: function () {\n this.enabled = false;\n },\n scrollTo: function (x, y) {\n if (this._native) {\n kendo.scrollLeft(this.scrollElement, abs(x));\n this.scrollElement.scrollTop(abs(y));\n } else {\n this.dimensions.refresh();\n this.movable.moveTo({\n x: x,\n y: y\n });\n }\n },\n animatedScrollTo: function (x, y, callback) {\n var from, to;\n if (this._native) {\n this.scrollTo(x, y);\n } else {\n from = {\n x: this.movable.x,\n y: this.movable.y\n };\n to = {\n x: x,\n y: y\n };\n this.animatedScroller.setCoordinates(from, to);\n this.animatedScroller.setCallback(callback);\n this.animatedScroller.start();\n }\n },\n pullHandled: function () {\n var that = this;\n that.refreshHint.removeClass(REFRESHCLASS);\n that.hintContainer.html(that.pullTemplate({}));\n that.yinertia.onEnd();\n that.xinertia.onEnd();\n that.userEvents.cancel();\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n if (this.userEvents) {\n this.userEvents.destroy();\n }\n },\n _scale: function (scale) {\n this.dimensions.rescale(scale);\n this.movable.scaleTo(scale);\n },\n _initPullToRefresh: function () {\n var that = this;\n that.dimensions.y.forceEnabled();\n that.pullTemplate = kendo.template(that.options.messages.pullTemplate);\n that.releaseTemplate = kendo.template(that.options.messages.releaseTemplate);\n that.refreshTemplate = kendo.template(that.options.messages.refreshTemplate);\n that.scrollElement.prepend('<span class=\"km-scroller-pull\"><span class=\"km-icon\"></span><span class=\"km-loading-left\"></span><span class=\"km-loading-right\"></span><span class=\"km-template\">' + that.pullTemplate({}) + '</span></span>');\n that.refreshHint = that.scrollElement.children().first();\n that.hintContainer = that.refreshHint.children('.km-template');\n that.pane.y.bind('change', proxy(that._paneChange, that));\n that.userEvents.bind('end', proxy(that._dragEnd, that));\n },\n _dragEnd: function () {\n var that = this;\n if (!that.pulled) {\n return;\n }\n that.pulled = false;\n that.refreshHint.removeClass(RELEASECLASS).addClass(REFRESHCLASS);\n that.hintContainer.html(that.refreshTemplate({}));\n that.yinertia.freeze(that.options.pullOffset / 2);\n that.trigger('pull');\n },\n _paneChange: function () {\n var that = this;\n if (that.movable.y / OUT_OF_BOUNDS_FRICTION > that.options.pullOffset) {\n if (!that.pulled) {\n that.pulled = true;\n that.refreshHint.removeClass(REFRESHCLASS).addClass(RELEASECLASS);\n that.hintContainer.html(that.releaseTemplate({}));\n }\n } else if (that.pulled) {\n that.pulled = false;\n that.refreshHint.removeClass(RELEASECLASS);\n that.hintContainer.html(that.pullTemplate({}));\n }\n },\n _initAxis: function (axis) {\n var that = this, movable = that.movable, dimension = that.dimensions[axis], tapCapture = that.tapCapture, paneAxis = that.pane[axis], scrollBar = new ScrollBar({\n axis: axis,\n movable: movable,\n dimension: dimension,\n container: that.element,\n alwaysVisible: that.options.visibleScrollHints\n });\n dimension.bind(CHANGE, function () {\n scrollBar.refresh();\n });\n paneAxis.bind(CHANGE, function () {\n scrollBar.show();\n });\n that[axis + 'inertia'] = new DragInertia({\n axis: axis,\n paneAxis: paneAxis,\n movable: movable,\n tapCapture: tapCapture,\n userEvents: that.userEvents,\n dimension: dimension,\n elastic: that.options.elastic,\n friction: that.options.friction || FRICTION,\n velocityMultiplier: that.options.velocityMultiplier || VELOCITY_MULTIPLIER,\n end: function () {\n scrollBar.hide();\n that.trigger('scrollEnd', {\n axis: axis,\n scrollTop: that.scrollTop,\n scrollLeft: that.scrollLeft\n });\n }\n });\n }\n });\n ui.plugin(Scroller);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.resizable', [\n 'kendo.core',\n 'kendo.draganddrop'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'resizable',\n name: 'Resizable',\n category: 'framework',\n depends: [\n 'core',\n 'draganddrop'\n ],\n advanced: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, Widget = ui.Widget, proxy = $.proxy, isFunction = kendo.isFunction, extend = $.extend, HORIZONTAL = 'horizontal', VERTICAL = 'vertical', START = 'start', RESIZE = 'resize', RESIZEEND = 'resizeend';\n var Resizable = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n that.orientation = that.options.orientation.toLowerCase() != VERTICAL ? HORIZONTAL : VERTICAL;\n that._positionMouse = that.orientation == HORIZONTAL ? 'x' : 'y';\n that._position = that.orientation == HORIZONTAL ? 'left' : 'top';\n that._sizingDom = that.orientation == HORIZONTAL ? 'outerWidth' : 'outerHeight';\n that.draggable = new ui.Draggable(options.draggableElement || element, {\n distance: 1,\n filter: options.handle,\n drag: proxy(that._resize, that),\n dragcancel: proxy(that._cancel, that),\n dragstart: proxy(that._start, that),\n dragend: proxy(that._stop, that)\n });\n that.userEvents = that.draggable.userEvents;\n },\n events: [\n RESIZE,\n RESIZEEND,\n START\n ],\n options: {\n name: 'Resizable',\n orientation: HORIZONTAL\n },\n resize: function () {\n },\n _max: function (e) {\n var that = this, hintSize = that.hint ? that.hint[that._sizingDom]() : 0, size = that.options.max;\n return isFunction(size) ? size(e) : size !== undefined ? that._initialElementPosition + size - hintSize : size;\n },\n _min: function (e) {\n var that = this, size = that.options.min;\n return isFunction(size) ? size(e) : size !== undefined ? that._initialElementPosition + size : size;\n },\n _start: function (e) {\n var that = this, hint = that.options.hint, el = $(e.currentTarget);\n that._initialElementPosition = el.position()[that._position];\n that._initialMousePosition = e[that._positionMouse].startLocation;\n if (hint) {\n that.hint = isFunction(hint) ? $(hint(el)) : hint;\n that.hint.css({ position: 'absolute' }).css(that._position, that._initialElementPosition).appendTo(that.element);\n }\n that.trigger(START, e);\n that._maxPosition = that._max(e);\n that._minPosition = that._min(e);\n $(document.body).css('cursor', el.css('cursor'));\n },\n _resize: function (e) {\n var that = this, maxPosition = that._maxPosition, minPosition = that._minPosition, currentPosition = that._initialElementPosition + (e[that._positionMouse].location - that._initialMousePosition), position;\n position = minPosition !== undefined ? Math.max(minPosition, currentPosition) : currentPosition;\n that.position = position = maxPosition !== undefined ? Math.min(maxPosition, position) : position;\n if (that.hint) {\n that.hint.toggleClass(that.options.invalidClass || '', position == maxPosition || position == minPosition).css(that._position, position);\n }\n that.resizing = true;\n that.trigger(RESIZE, extend(e, { position: position }));\n },\n _stop: function (e) {\n var that = this;\n if (that.hint) {\n that.hint.remove();\n }\n that.resizing = false;\n that.trigger(RESIZEEND, extend(e, { position: that.position }));\n $(document.body).css('cursor', '');\n },\n _cancel: function (e) {\n var that = this;\n if (that.hint) {\n that.position = undefined;\n that.hint.css(that._position, that._initialElementPosition);\n that._stop(e);\n }\n },\n destroy: function () {\n var that = this;\n Widget.fn.destroy.call(that);\n if (that.draggable) {\n that.draggable.destroy();\n }\n },\n press: function (target) {\n if (!target) {\n return;\n }\n var position = target.position(), that = this;\n that.userEvents.press(position.left, position.top, target[0]);\n that.targetPosition = position;\n that.target = target;\n },\n move: function (delta) {\n var that = this, orientation = that._position, position = that.targetPosition, current = that.position;\n if (current === undefined) {\n current = position[orientation];\n }\n position[orientation] = current + delta;\n that.userEvents.move(position.left, position.top);\n },\n end: function () {\n this.userEvents.end();\n this.target = this.position = undefined;\n }\n });\n kendo.ui.plugin(Resizable);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.sortable', ['kendo.draganddrop'], f);\n}(function () {\n var __meta__ = {\n id: 'sortable',\n name: 'Sortable',\n category: 'framework',\n depends: ['draganddrop']\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight, START = 'start', BEFORE_MOVE = 'beforeMove', MOVE = 'move', END = 'end', CHANGE = 'change', CANCEL = 'cancel', ACTION_SORT = 'sort', ACTION_REMOVE = 'remove', ACTION_RECEIVE = 'receive', DEFAULT_FILTER = '>*', MISSING_INDEX = -1;\n function containsOrEqualTo(parent, child) {\n try {\n return $.contains(parent, child) || parent == child;\n } catch (e) {\n return false;\n }\n }\n function defaultHint(element) {\n return element.clone();\n }\n function defaultPlaceholder(element) {\n return element.clone().removeAttr('id').css('visibility', 'hidden');\n }\n var Sortable = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n if (!that.options.placeholder) {\n that.options.placeholder = defaultPlaceholder;\n }\n if (!that.options.hint) {\n that.options.hint = defaultHint;\n }\n that.draggable = that._createDraggable();\n },\n events: [\n START,\n BEFORE_MOVE,\n MOVE,\n END,\n CHANGE,\n CANCEL\n ],\n options: {\n name: 'Sortable',\n hint: null,\n placeholder: null,\n filter: DEFAULT_FILTER,\n holdToDrag: false,\n disabled: null,\n container: null,\n connectWith: null,\n handler: null,\n cursorOffset: null,\n axis: null,\n ignore: null,\n autoScroll: false,\n cursor: 'auto',\n moveOnDragEnter: false\n },\n destroy: function () {\n this.draggable.destroy();\n Widget.fn.destroy.call(this);\n },\n _createDraggable: function () {\n var that = this, element = that.element, options = that.options;\n return new kendo.ui.Draggable(element, {\n filter: options.filter,\n hint: kendo.isFunction(options.hint) ? options.hint : $(options.hint),\n holdToDrag: options.holdToDrag,\n container: options.container ? $(options.container) : null,\n cursorOffset: options.cursorOffset,\n axis: options.axis,\n ignore: options.ignore,\n autoScroll: options.autoScroll,\n dragstart: $.proxy(that._dragstart, that),\n dragcancel: $.proxy(that._dragcancel, that),\n drag: $.proxy(that._drag, that),\n dragend: $.proxy(that._dragend, that)\n });\n },\n _dragstart: function (e) {\n var draggedElement = this.draggedElement = e.currentTarget, disabled = this.options.disabled, handler = this.options.handler, _placeholder = this.options.placeholder, placeholder = this.placeholder = kendo.isFunction(_placeholder) ? $(_placeholder.call(this, draggedElement)) : $(_placeholder);\n if (disabled && draggedElement.is(disabled)) {\n e.preventDefault();\n } else if (handler && !$(e.initialTarget).is(handler)) {\n e.preventDefault();\n } else {\n if (this.trigger(START, {\n item: draggedElement,\n draggableEvent: e\n })) {\n e.preventDefault();\n } else {\n draggedElement.css('display', 'none');\n draggedElement.before(placeholder);\n this._setCursor();\n }\n }\n },\n _dragcancel: function () {\n this._cancel();\n this.trigger(CANCEL, { item: this.draggedElement });\n this._resetCursor();\n },\n _drag: function (e) {\n var draggedElement = this.draggedElement, target = this._findTarget(e), targetCenter, cursorOffset = {\n left: e.x.location,\n top: e.y.location\n }, offsetDelta, axisDelta = {\n x: e.x.delta,\n y: e.y.delta\n }, direction, sibling, getSibling, axis = this.options.axis, moveOnDragEnter = this.options.moveOnDragEnter, eventData = {\n item: draggedElement,\n list: this,\n draggableEvent: e\n };\n if (axis === 'x' || axis === 'y') {\n this._movementByAxis(axis, cursorOffset, axisDelta[axis], eventData);\n return;\n }\n if (target) {\n targetCenter = this._getElementCenter(target.element);\n offsetDelta = {\n left: Math.round(cursorOffset.left - targetCenter.left),\n top: Math.round(cursorOffset.top - targetCenter.top)\n };\n $.extend(eventData, { target: target.element });\n if (target.appendToBottom) {\n this._movePlaceholder(target, null, eventData);\n return;\n }\n if (target.appendAfterHidden) {\n this._movePlaceholder(target, 'next', eventData);\n }\n if (this._isFloating(target.element)) {\n if (axisDelta.x < 0 && moveOnDragEnter || !moveOnDragEnter && offsetDelta.left < 0) {\n direction = 'prev';\n } else if (axisDelta.x > 0 && moveOnDragEnter || !moveOnDragEnter && offsetDelta.left > 0) {\n direction = 'next';\n }\n } else {\n if (axisDelta.y < 0 && moveOnDragEnter || !moveOnDragEnter && offsetDelta.top < 0) {\n direction = 'prev';\n } else if (axisDelta.y > 0 && moveOnDragEnter || !moveOnDragEnter && offsetDelta.top > 0) {\n direction = 'next';\n }\n }\n if (direction) {\n getSibling = direction === 'prev' ? jQuery.fn.prev : jQuery.fn.next;\n sibling = getSibling.call(target.element);\n while (sibling.length && !sibling.is(':visible')) {\n sibling = getSibling.call(sibling);\n }\n if (sibling[0] != this.placeholder[0]) {\n this._movePlaceholder(target, direction, eventData);\n }\n }\n }\n },\n _dragend: function (e) {\n var placeholder = this.placeholder, draggedElement = this.draggedElement, draggedIndex = this.indexOf(draggedElement), placeholderIndex = this.indexOf(placeholder), connectWith = this.options.connectWith, connectedList, isDefaultPrevented, eventData, connectedListEventData;\n this._resetCursor();\n eventData = {\n action: ACTION_SORT,\n item: draggedElement,\n oldIndex: draggedIndex,\n newIndex: placeholderIndex,\n draggableEvent: e\n };\n if (placeholderIndex >= 0) {\n isDefaultPrevented = this.trigger(END, eventData);\n } else {\n connectedList = placeholder.parents(connectWith).getKendoSortable();\n eventData.action = ACTION_REMOVE;\n connectedListEventData = $.extend({}, eventData, {\n action: ACTION_RECEIVE,\n oldIndex: MISSING_INDEX,\n newIndex: connectedList.indexOf(placeholder)\n });\n isDefaultPrevented = !(!this.trigger(END, eventData) && !connectedList.trigger(END, connectedListEventData));\n }\n if (isDefaultPrevented || placeholderIndex === draggedIndex) {\n this._cancel();\n return;\n }\n placeholder.replaceWith(draggedElement);\n draggedElement.show();\n this.draggable.dropped = true;\n eventData = {\n action: this.indexOf(draggedElement) != MISSING_INDEX ? ACTION_SORT : ACTION_REMOVE,\n item: draggedElement,\n oldIndex: draggedIndex,\n newIndex: this.indexOf(draggedElement),\n draggableEvent: e\n };\n this.trigger(CHANGE, eventData);\n if (connectedList) {\n connectedListEventData = $.extend({}, eventData, {\n action: ACTION_RECEIVE,\n oldIndex: MISSING_INDEX,\n newIndex: connectedList.indexOf(draggedElement)\n });\n connectedList.trigger(CHANGE, connectedListEventData);\n }\n },\n _findTarget: function (e) {\n var element = this._findElementUnderCursor(e), items, connectWith = this.options.connectWith, node;\n if ($.contains(this.element[0], element)) {\n items = this.items();\n node = items.filter(element)[0] || items.has(element)[0];\n return node ? {\n element: $(node),\n sortable: this\n } : null;\n } else if (this.element[0] == element && this._isEmpty()) {\n return {\n element: this.element,\n sortable: this,\n appendToBottom: true\n };\n } else if (this.element[0] == element && this._isLastHidden()) {\n node = this.items().eq(0);\n return {\n element: node,\n sortable: this,\n appendAfterHidden: true\n };\n } else if (connectWith) {\n return this._searchConnectedTargets(element, e);\n }\n },\n _findElementUnderCursor: function (e) {\n var elementUnderCursor = kendo.elementUnderCursor(e), draggable = e.sender;\n if (containsOrEqualTo(draggable.hint[0], elementUnderCursor)) {\n draggable.hint.hide();\n elementUnderCursor = kendo.elementUnderCursor(e);\n if (!elementUnderCursor) {\n elementUnderCursor = kendo.elementUnderCursor(e);\n }\n draggable.hint.show();\n }\n return elementUnderCursor;\n },\n _searchConnectedTargets: function (element, e) {\n var connected = $(this.options.connectWith), sortableInstance, items, node;\n for (var i = 0; i < connected.length; i++) {\n sortableInstance = connected.eq(i).getKendoSortable();\n if ($.contains(connected[i], element)) {\n if (sortableInstance) {\n items = sortableInstance.items();\n node = items.filter(element)[0] || items.has(element)[0];\n if (node) {\n sortableInstance.placeholder = this.placeholder;\n return {\n element: $(node),\n sortable: sortableInstance\n };\n } else {\n return null;\n }\n }\n } else if (connected[i] == element) {\n if (sortableInstance && sortableInstance._isEmpty()) {\n return {\n element: connected.eq(i),\n sortable: sortableInstance,\n appendToBottom: true\n };\n } else if (this._isCursorAfterLast(sortableInstance, e)) {\n node = sortableInstance.items().last();\n return {\n element: node,\n sortable: sortableInstance\n };\n }\n }\n }\n },\n _isCursorAfterLast: function (sortable, e) {\n var lastItem = sortable.items().last(), cursorOffset = {\n left: e.x.location,\n top: e.y.location\n }, lastItemOffset, delta;\n lastItemOffset = kendo.getOffset(lastItem);\n lastItemOffset.top += outerHeight(lastItem);\n lastItemOffset.left += outerWidth(lastItem);\n if (this._isFloating(lastItem)) {\n delta = lastItemOffset.left - cursorOffset.left;\n } else {\n delta = lastItemOffset.top - cursorOffset.top;\n }\n return delta < 0 ? true : false;\n },\n _movementByAxis: function (axis, cursorOffset, delta, eventData) {\n var cursorPosition = axis === 'x' ? cursorOffset.left : cursorOffset.top, target = delta < 0 ? this.placeholder.prev() : this.placeholder.next(), items = this.items(), targetCenter;\n if (target.length && !target.is(':visible')) {\n target = delta < 0 ? target.prev() : target.next();\n }\n if (!items.filter(target).length) {\n return;\n }\n $.extend(eventData, { target: target });\n targetCenter = this._getElementCenter(target);\n if (targetCenter) {\n targetCenter = axis === 'x' ? targetCenter.left : targetCenter.top;\n }\n if (target.length && delta < 0 && cursorPosition - targetCenter < 0) {\n this._movePlaceholder({\n element: target,\n sortable: this\n }, 'prev', eventData);\n } else if (target.length && delta > 0 && cursorPosition - targetCenter > 0) {\n this._movePlaceholder({\n element: target,\n sortable: this\n }, 'next', eventData);\n }\n },\n _movePlaceholder: function (target, direction, eventData) {\n var placeholder = this.placeholder;\n if (!target.sortable.trigger(BEFORE_MOVE, eventData)) {\n if (!direction) {\n target.element.append(placeholder);\n } else if (direction === 'prev') {\n target.element.before(placeholder);\n } else if (direction === 'next') {\n target.element.after(placeholder);\n }\n target.sortable.trigger(MOVE, eventData);\n }\n },\n _setCursor: function () {\n var cursor = this.options.cursor, body;\n if (cursor && cursor !== 'auto') {\n body = $(document.body);\n this._originalCursorType = body.css('cursor');\n body.css({ 'cursor': cursor });\n if (!this._cursorStylesheet) {\n this._cursorStylesheet = $('<style>* { cursor: ' + cursor + ' !important; }</style>');\n }\n this._cursorStylesheet.appendTo(body);\n }\n },\n _resetCursor: function () {\n if (this._originalCursorType) {\n $(document.body).css('cursor', this._originalCursorType);\n this._originalCursorType = null;\n this._cursorStylesheet.remove();\n }\n },\n _getElementCenter: function (element) {\n var center = element.length ? kendo.getOffset(element) : null;\n if (center) {\n center.top += outerHeight(element) / 2;\n center.left += outerWidth(element) / 2;\n }\n return center;\n },\n _isFloating: function (item) {\n var isFloating = /left|right/.test(item.css('float'));\n var isTable = /inline|table-cell/.test(item.css('display'));\n var isHorizontalFlex = /flex/.test(item.parent().css('display')) && (/row|row-reverse/.test(item.parent().css('flex-direction')) || !item.parent().css('flex-direction'));\n return isFloating || isTable || isHorizontalFlex;\n },\n _cancel: function () {\n this.draggedElement.show();\n this.placeholder.remove();\n this.draggable.dropped = true;\n },\n _items: function () {\n var filter = this.options.filter, items;\n if (filter) {\n items = this.element.find(filter);\n } else {\n items = this.element.children();\n }\n return items;\n },\n indexOf: function (element) {\n var items = this._items(), placeholder = this.placeholder, draggedElement = this.draggedElement;\n if (placeholder && element[0] == placeholder[0]) {\n return items.not(draggedElement).index(element);\n } else {\n return items.not(placeholder).index(element);\n }\n },\n items: function () {\n var placeholder = this.placeholder, items = this._items();\n if (placeholder) {\n items = items.not(placeholder);\n }\n return items;\n },\n _isEmpty: function () {\n return !this.items().length;\n },\n _isLastHidden: function () {\n return this.items().length === 1 && this.items().is(':hidden');\n }\n });\n kendo.ui.plugin(Sortable);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.selectable', [\n 'kendo.core',\n 'kendo.userevents'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'selectable',\n name: 'Selectable',\n category: 'framework',\n depends: [\n 'core',\n 'userevents'\n ],\n advanced: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, proxy = $.proxy, abs = Math.abs, ARIASELECTED = 'aria-selected', SELECTED = 'k-state-selected', ACTIVE = 'k-state-selecting', SELECTABLE = 'k-selectable', CHANGE = 'change', NS = '.kendoSelectable', UNSELECT = 'unselect', UNSELECTING = 'k-state-unselecting', INPUTSELECTOR = 'input,a,textarea,.k-multiselect-wrap,select,button,.k-button>span,.k-button>img,span.k-icon.k-i-arrow-60-down,span.k-icon.k-i-arrow-60-up,label.k-checkbox-label.k-no-text,.k-icon.k-i-collapse,.k-icon.k-i-expand,span.k-numeric-wrap,.k-focusable', msie = kendo.support.browser.msie, supportEventDelegation = false;\n (function ($) {\n (function () {\n $('<div class=\"parent\"><span></span></div>').on('click', '>*', function () {\n supportEventDelegation = true;\n }).find('span').trigger('click').end().off();\n }());\n }($));\n var Selectable = Widget.extend({\n init: function (element, options) {\n var that = this, multiple;\n Widget.fn.init.call(that, element, options);\n that._marquee = $('<div class=\\'k-marquee\\'><div class=\\'k-marquee-color\\'></div></div>');\n that._lastActive = null;\n that.element.addClass(SELECTABLE);\n that.relatedTarget = that.options.relatedTarget;\n multiple = that.options.multiple;\n if (this.options.aria && multiple) {\n that.element.attr('aria-multiselectable', true);\n }\n that.userEvents = new kendo.UserEvents(that.element, {\n global: true,\n allowSelection: true,\n filter: (!supportEventDelegation ? '.' + SELECTABLE + ' ' : '') + that.options.filter,\n tap: proxy(that._tap, that),\n touchAction: multiple ? 'none' : 'pan-x pan-y'\n });\n if (multiple) {\n that.userEvents.bind('start', proxy(that._start, that)).bind('move', proxy(that._move, that)).bind('end', proxy(that._end, that)).bind('select', proxy(that._select, that));\n }\n },\n events: [\n CHANGE,\n UNSELECT\n ],\n options: {\n name: 'Selectable',\n filter: '>*',\n inputSelectors: INPUTSELECTOR,\n multiple: false,\n relatedTarget: $.noop\n },\n _isElement: function (target) {\n var elements = this.element;\n var idx, length = elements.length, result = false;\n target = target[0];\n for (idx = 0; idx < length; idx++) {\n if (elements[idx] === target) {\n result = true;\n break;\n }\n }\n return result;\n },\n _tap: function (e) {\n var target = $(e.target), that = this, ctrlKey = e.event.ctrlKey || e.event.metaKey, multiple = that.options.multiple, shiftKey = multiple && e.event.shiftKey, selected, whichCode = e.event.which, buttonCode = e.event.button;\n if (!that._isElement(target.closest('.' + SELECTABLE)) || whichCode && whichCode == 3 || buttonCode && buttonCode == 2) {\n return;\n }\n if (!this._allowSelection(e.event.target)) {\n return;\n }\n selected = target.hasClass(SELECTED);\n if (!multiple || !ctrlKey) {\n that.clear();\n }\n target = target.add(that.relatedTarget(target));\n if (shiftKey) {\n that.selectRange(that._firstSelectee(), target, e);\n } else {\n if (selected && ctrlKey) {\n that._unselect(target);\n that._notify(CHANGE, e);\n } else {\n that.value(target, e);\n }\n that._lastActive = that._downTarget = target;\n }\n },\n _start: function (e) {\n var that = this, target = $(e.target), selected = target.hasClass(SELECTED), currentElement, ctrlKey = e.event.ctrlKey || e.event.metaKey;\n if (!this._allowSelection(e.event.target)) {\n return;\n }\n that._downTarget = target;\n if (!that._isElement(target.closest('.' + SELECTABLE))) {\n that.userEvents.cancel();\n return;\n }\n if (that.options.useAllItems) {\n that._items = that.element.find(that.options.filter);\n } else {\n currentElement = target.closest(that.element);\n that._items = currentElement.find(that.options.filter);\n }\n e.sender.capture();\n that._marquee.appendTo(document.body).css({\n left: e.x.client + 1,\n top: e.y.client + 1,\n width: 0,\n height: 0\n });\n if (!ctrlKey) {\n that.clear();\n }\n target = target.add(that.relatedTarget(target));\n if (selected) {\n that._selectElement(target, true);\n if (ctrlKey) {\n target.addClass(UNSELECTING);\n }\n }\n },\n _move: function (e) {\n var that = this, position = {\n left: e.x.startLocation > e.x.location ? e.x.location : e.x.startLocation,\n top: e.y.startLocation > e.y.location ? e.y.location : e.y.startLocation,\n width: abs(e.x.initialDelta),\n height: abs(e.y.initialDelta)\n };\n that._marquee.css(position);\n that._invalidateSelectables(position, e.event.ctrlKey || e.event.metaKey);\n e.preventDefault();\n },\n _end: function (e) {\n var that = this;\n that._marquee.remove();\n that._unselect(that.element.find(that.options.filter + '.' + UNSELECTING)).removeClass(UNSELECTING);\n var target = that.element.find(that.options.filter + '.' + ACTIVE);\n target = target.add(that.relatedTarget(target));\n that.value(target, e);\n that._lastActive = that._downTarget;\n that._items = null;\n },\n _invalidateSelectables: function (position, ctrlKey) {\n var idx, length, target = this._downTarget[0], items = this._items, related, toSelect;\n for (idx = 0, length = items.length; idx < length; idx++) {\n toSelect = items.eq(idx);\n related = toSelect.add(this.relatedTarget(toSelect));\n if (collision(toSelect, position)) {\n if (toSelect.hasClass(SELECTED)) {\n if (ctrlKey && target !== toSelect[0]) {\n related.removeClass(SELECTED).addClass(UNSELECTING);\n }\n } else if (!toSelect.hasClass(ACTIVE) && !toSelect.hasClass(UNSELECTING)) {\n related.addClass(ACTIVE);\n }\n } else {\n if (toSelect.hasClass(ACTIVE)) {\n related.removeClass(ACTIVE);\n } else if (ctrlKey && toSelect.hasClass(UNSELECTING)) {\n related.removeClass(UNSELECTING).addClass(SELECTED);\n }\n }\n }\n },\n value: function (val, e) {\n var that = this, selectElement = proxy(that._selectElement, that);\n if (val) {\n val.each(function () {\n selectElement(this);\n });\n that._notify(CHANGE, e);\n return;\n }\n return that.element.find(that.options.filter + '.' + SELECTED);\n },\n _firstSelectee: function () {\n var that = this, selected;\n if (that._lastActive !== null) {\n return that._lastActive;\n }\n selected = that.value();\n return selected.length > 0 ? selected[0] : that.element.find(that.options.filter)[0];\n },\n _selectElement: function (element, preventNotify) {\n var toSelect = $(element), isPrevented = !preventNotify && this._notify('select', { element: element });\n toSelect.removeClass(ACTIVE);\n if (!isPrevented) {\n toSelect.addClass(SELECTED);\n if (this.options.aria) {\n toSelect.attr(ARIASELECTED, true);\n }\n }\n },\n _notify: function (name, args) {\n args = args || {};\n return this.trigger(name, args);\n },\n _unselect: function (element) {\n if (this.trigger(UNSELECT, { element: element })) {\n return;\n }\n element.removeClass(SELECTED);\n if (this.options.aria) {\n element.attr(ARIASELECTED, false);\n }\n return element;\n },\n _select: function (e) {\n if (this._allowSelection(e.event.target)) {\n if (!msie || msie && !$(kendo._activeElement()).is(this.options.inputSelectors)) {\n e.preventDefault();\n }\n }\n },\n _allowSelection: function (target) {\n if ($(target).is(this.options.inputSelectors)) {\n this.userEvents.cancel();\n this._downTarget = null;\n return false;\n }\n return true;\n },\n resetTouchEvents: function () {\n this.userEvents.cancel();\n },\n clear: function () {\n var items = this.element.find(this.options.filter + '.' + SELECTED);\n this._unselect(items);\n },\n selectRange: function (start, end, e) {\n var that = this, idx, tmp, items;\n that.clear();\n if (that.element.length > 1) {\n items = that.options.continuousItems();\n }\n if (!items || !items.length) {\n items = that.element.find(that.options.filter);\n }\n start = $.inArray($(start)[0], items);\n end = $.inArray($(end)[0], items);\n if (start > end) {\n tmp = start;\n start = end;\n end = tmp;\n }\n if (!that.options.useAllItems) {\n end += that.element.length - 1;\n }\n for (idx = start; idx <= end; idx++) {\n that._selectElement(items[idx]);\n }\n that._notify(CHANGE, e);\n },\n destroy: function () {\n var that = this;\n Widget.fn.destroy.call(that);\n that.element.off(NS);\n that.userEvents.destroy();\n that._marquee = that._lastActive = that.element = that.userEvents = null;\n }\n });\n Selectable.parseOptions = function (selectable) {\n var asLowerString = typeof selectable === 'string' && selectable.toLowerCase();\n return {\n multiple: asLowerString && asLowerString.indexOf('multiple') > -1,\n cell: asLowerString && asLowerString.indexOf('cell') > -1\n };\n };\n function collision(element, position) {\n if (!element.is(':visible')) {\n return false;\n }\n var elementPosition = kendo.getOffset(element), right = position.left + position.width, bottom = position.top + position.height;\n elementPosition.right = elementPosition.left + kendo._outerWidth(element);\n elementPosition.bottom = elementPosition.top + kendo._outerHeight(element);\n return !(elementPosition.left > right || elementPosition.right < position.left || elementPosition.top > bottom || elementPosition.bottom < position.top);\n }\n kendo.ui.plugin(Selectable);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.badge', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'badge',\n name: 'Badge',\n category: 'web',\n description: 'The Badge decorates avatars, navigation menus, or other components in the application when visual notification is needed',\n depends: ['core']\n };\n (function ($, undefined) {\n var kendo = window.kendo;\n var Widget = kendo.ui.Widget;\n var ui = kendo.ui;\n var HIDDEN = 'k-hidden';\n var iconTemplate = '<span class=\\'k-badge-icon k-icon k-i-#= icon #\\'></span>';\n var svgIconTemplate = '<span class=\\'k-badge-icon k-svg-icon\\'>#= icon #</span>';\n var Badge = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n that._content();\n that._appearance();\n kendo.notify(that);\n },\n destroy: function () {\n var that = this;\n Widget.fn.destroy.call(that);\n },\n options: {\n name: 'Badge',\n cutoutBorder: false,\n data: {},\n fill: 'solid',\n icon: '',\n max: Infinity,\n position: 'inline',\n align: '',\n sizes: {\n 'small': 'sm',\n 'medium': 'md',\n 'large': 'lg'\n },\n size: 'medium',\n shape: 'rounded',\n template: null,\n text: '',\n themeColor: 'secondary',\n visible: true,\n _classNames: []\n },\n _content: function () {\n var that = this;\n var text = that.options.text;\n var template = that.options.template;\n var data = that.options.data;\n var icon = that.options.icon;\n if (template !== null) {\n that._text = text;\n that._template = kendo.template(template).bind(that);\n that.element.html(that._template(data));\n return;\n }\n if (icon !== '') {\n that.icon(icon);\n return;\n }\n if (text !== '') {\n that.text(text);\n return;\n }\n that.text(that.element.html());\n },\n _appearance: function () {\n var that = this;\n that._themeColor = that.options.themeColor;\n that._shape = that.options.shape;\n that._sizes = that.options.sizes;\n that._size = that.options.size;\n that._fill = that.options.fill;\n that._cutoutBorder = that.options.cutoutBorder;\n that._align = that.options.align;\n that._position = that.options.position;\n that._visible = that.options.visible;\n that._updateClassNames();\n },\n _updateClassNames: function () {\n var that = this;\n var classNames = ['k-badge'];\n var keepClassNames = that.options._classNames;\n var themeColor = that._themeColor;\n var shape = that._shape;\n var sizes = that._sizes;\n var size = that._size;\n var sizeAbbr = sizes[size] === undefined ? size : sizes[size];\n var fill = that._fill;\n var cutoutBorder = that._cutoutBorder;\n var align = that._align;\n var position = that._position;\n var visible = that._visible;\n that.element.removeClass(function (index, className) {\n if (className.indexOf('k-') === 0 && keepClassNames.indexOf(className) === -1) {\n that.element.removeClass(className);\n }\n });\n if (typeof fill === 'string' && fill !== '') {\n classNames.push('k-badge-' + fill);\n }\n if (typeof themeColor === 'string' && themeColor !== '') {\n classNames.push('k-badge-' + themeColor);\n }\n if (typeof size === 'string' && size !== '') {\n classNames.push('k-badge-' + sizeAbbr);\n }\n if (typeof shape === 'string' && shape !== '') {\n classNames.push('k-badge-' + shape);\n }\n if (typeof cutoutBorder === 'boolean' && cutoutBorder === true) {\n classNames.push('k-badge-border-cutout');\n }\n if (typeof position === 'string' && position !== '') {\n classNames.push('k-badge-' + position);\n }\n if (typeof position === 'string' && position !== '' && position !== 'inline' && typeof align === 'string' && align.split(' ').length == 2) {\n classNames.push('k-' + align.replace(' ', '-'));\n }\n if (visible === false) {\n classNames.push(HIDDEN);\n }\n that.element.addClass(classNames.join(' '));\n },\n setOptions: function (options) {\n var that = this;\n that.element.removeClass(function (index, className) {\n if (className.indexOf('k-') >= 0) {\n that.element.removeClass(className);\n }\n });\n Widget.fn.setOptions.call(that, options);\n that._content();\n that._appearance();\n },\n text: function (text) {\n var that = this;\n var max = that.options.max;\n if (arguments.length === 0 || text === undefined) {\n return that._text;\n }\n that._text = text;\n if (text === true || text === false || text === null) {\n that.element.html('');\n return;\n }\n if (typeof text === 'string') {\n that.element.html(text);\n return;\n }\n if (typeof text === 'number') {\n if (text > max) {\n that.element.html(max + '+');\n } else {\n that.element.html(text);\n }\n return;\n }\n if (typeof text === 'object' && 'toString' in text) {\n that.element.html(text.toString());\n return;\n }\n },\n icon: function (icon) {\n var that = this;\n var iconTemplateFunction;\n if (arguments.length === 0 || icon === undefined) {\n return that._icon;\n }\n that._icon = icon;\n if (icon.indexOf('<svg') === 0) {\n iconTemplateFunction = kendo.template(svgIconTemplate);\n that.element.html(iconTemplateFunction({ icon: icon }));\n return;\n }\n iconTemplateFunction = kendo.template(iconTemplate);\n that.element.html(iconTemplateFunction({ icon: icon }));\n },\n themeColor: function (color) {\n var that = this;\n if (arguments.length === 0 || color === undefined) {\n return that._themeColor;\n }\n that._themeColor = color;\n that._updateClassNames();\n },\n shape: function (shape) {\n var that = this;\n if (arguments.length === 0 || shape === undefined) {\n return that._shape;\n }\n that._shape = shape;\n that._updateClassNames();\n },\n hide: function () {\n var that = this;\n that._visible = false;\n that._updateClassNames();\n },\n show: function () {\n var that = this;\n that._visible = true;\n that._updateClassNames();\n }\n });\n ui.plugin(Badge);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.button', [\n 'kendo.core',\n 'kendo.badge'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'button',\n name: 'Button',\n category: 'web',\n description: 'The Button widget displays styled buttons.',\n depends: [\n 'core',\n 'badge'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, ui = kendo.ui, proxy = $.proxy, keys = kendo.keys, CLICK = 'click', MOUSEDOWN = kendo.support.mousedown, MOUSEUP = kendo.support.mouseup, MOUSEOUT = 'mouseout', KBUTTON = 'k-button', KBUTTONICON = 'k-button-icon', KBUTTONICONTEXT = 'k-button-icontext', NS = '.kendoButton', DISABLED = 'disabled', DISABLEDSTATE = 'k-state-disabled', FOCUSEDSTATE = 'k-state-focused', SELECTEDSTATE = 'k-state-active';\n var BUTTON_DEFAULTS = {\n icon: '',\n iconClass: '',\n spriteCssClass: '',\n imageUrl: '',\n badge: null\n };\n kendo.setDefaults('button', BUTTON_DEFAULTS);\n var Button = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n element = that.wrapper = that.element;\n options = that.options;\n element.addClass(KBUTTON).attr('role', 'button');\n options.enable = options.enable && options.enabled && !element.attr(DISABLED);\n that.enable(options.enable);\n if (options.enable) {\n that._tabindex();\n }\n that._badge();\n that.iconElement();\n element.on(CLICK + NS, proxy(that._click, that)).on('focus' + NS, proxy(that._focus, that)).on('blur' + NS, proxy(that._blur, that)).on('keydown' + NS, proxy(that._keydown, that)).on('keyup' + NS, proxy(that._removeActive, that)).on(MOUSEDOWN + NS, proxy(that._addActive, that)).on(MOUSEUP + NS + ' ' + MOUSEOUT + NS, proxy(that._removeActive, that));\n kendo.notify(that);\n },\n destroy: function () {\n var that = this;\n that.wrapper.off(NS);\n if (that.badge) {\n that.badge.destroy();\n }\n Widget.fn.destroy.call(that);\n },\n events: [CLICK],\n options: {\n name: 'Button',\n enable: true,\n enabled: true,\n icon: '',\n iconClass: '',\n spriteCssClass: '',\n imageUrl: '',\n badge: null\n },\n _isNativeButton: function () {\n return this.element.prop('tagName').toLowerCase() == 'button';\n },\n _click: function (e) {\n if (this.options.enable) {\n if (this.trigger(CLICK, { event: e })) {\n e.preventDefault();\n }\n }\n },\n _focus: function () {\n if (this.options.enable) {\n this.element.addClass(FOCUSEDSTATE);\n }\n },\n _blur: function () {\n var that = this;\n that.element.removeClass(FOCUSEDSTATE);\n setTimeout(function () {\n that.element.removeClass(SELECTEDSTATE);\n });\n },\n _keydown: function (e) {\n var that = this;\n if (e.keyCode == keys.ENTER || e.keyCode == keys.SPACEBAR) {\n that._addActive();\n if (!that._isNativeButton()) {\n if (e.keyCode == keys.SPACEBAR) {\n e.preventDefault();\n }\n that._click(e);\n }\n }\n },\n _removeActive: function () {\n this.element.removeClass(SELECTEDSTATE);\n },\n _addActive: function () {\n if (this.options.enable) {\n this.element.addClass(SELECTEDSTATE);\n }\n },\n iconElement: function () {\n var that = this, element = that.element, options = that.options, icon = options.icon, iconClass = options.iconClass, spriteCssClass = options.spriteCssClass, imageUrl = options.imageUrl, span, img, isEmpty;\n if (spriteCssClass || imageUrl || icon || iconClass) {\n isEmpty = true;\n element.contents().filter(function () {\n return !$(this).hasClass('k-sprite') && !$(this).hasClass('k-icon') && !$(this).hasClass('k-image');\n }).each(function (idx, el) {\n if (el.nodeType == 1 || el.nodeType == 3 && kendo.trim(el.nodeValue).length > 0) {\n isEmpty = false;\n }\n });\n if (isEmpty) {\n element.addClass(KBUTTONICON);\n } else {\n element.addClass(KBUTTONICONTEXT);\n }\n }\n if (imageUrl) {\n img = element.children('img.k-image').first();\n if (!img[0]) {\n img = $('<img alt=\"icon\" class=\"k-image\" />').prependTo(element);\n }\n img.attr('src', imageUrl);\n } else if (icon || iconClass) {\n span = element.children('span.k-icon').first();\n if (!span[0]) {\n span = $('<span></span>').prependTo(element);\n }\n span.attr('class', icon ? 'k-icon k-i-' + icon : iconClass);\n } else if (spriteCssClass) {\n span = element.children('span.k-sprite').first();\n if (!span[0]) {\n span = $('<span class=\"k-sprite\"></span>').prependTo(element);\n }\n span.addClass(spriteCssClass);\n }\n },\n enable: function (enable) {\n var that = this, element = that.element;\n if (enable === undefined) {\n enable = true;\n }\n enable = !!enable;\n that.options.enable = enable;\n element.toggleClass(DISABLEDSTATE, !enable).attr('aria-disabled', !enable).attr(DISABLED, !enable);\n if (enable) {\n that._tabindex();\n }\n try {\n element.blur();\n } catch (err) {\n }\n },\n _badge: function () {\n var that = this;\n var badgeOptions = that.options.badge;\n var badgeEelement;\n if (badgeOptions === null || badgeOptions === undefined) {\n return;\n }\n if (badgeOptions.constructor !== Object) {\n badgeOptions = { text: badgeOptions };\n }\n if (badgeOptions.position === undefined || badgeOptions.position === '') {\n badgeOptions.position = 'edge';\n if (badgeOptions.align === undefined || badgeOptions.align === '') {\n badgeOptions.align = 'top end';\n }\n }\n badgeOptions._classNames = ['k-button-badge'];\n that.element.addClass('k-badge-container');\n badgeEelement = $('<span />').appendTo(that.element);\n that.badge = new ui.Badge(badgeEelement, badgeOptions);\n }\n });\n if (Button.fn.hasOwnProperty('defaults') === false) {\n Object.defineProperty(Button.fn, 'defaults', {\n get: function () {\n return kendo.defaults.button;\n }\n });\n }\n kendo.ui.plugin(Button);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.pager', ['kendo.data'], f);\n}(function () {\n var __meta__ = {\n id: 'pager',\n name: 'Pager',\n category: 'framework',\n depends: ['data'],\n advanced: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, Widget = ui.Widget, proxy = $.proxy, FIRST = '.k-i-arrow-end-left', LAST = '.k-i-arrow-end-right', PREV = '.k-i-arrow-60-left', NEXT = '.k-i-arrow-60-right', SIZE = 'k-pager-md k-pager-sm', CHANGE = 'change', NS = '.kendoPager', CLICK = 'click', KEYDOWN = 'keydown', DISABLED = 'disabled', MOUSEDOWN = 'down', MAX_VALUE = Number.MAX_VALUE, iconTemplate = kendo.template('<a href=\"\\\\#\" aria-label=\"#=text#\" title=\"#=text#\" class=\"k-link k-pager-nav #= wrapClassName #\"><span class=\"k-icon #= className #\"></span></a>');\n function button(template, idx, text, numeric, title) {\n return template({\n idx: idx,\n text: text,\n ns: kendo.ns,\n numeric: numeric,\n title: title || ''\n });\n }\n function selectOption(template, idx, text, selected) {\n return template({\n idx: idx,\n text: text || idx,\n selected: selected || false\n });\n }\n function icon(className, text, wrapClassName) {\n return iconTemplate({\n className: className.substring(1),\n text: text,\n wrapClassName: wrapClassName || ''\n });\n }\n function update(element, selector, page, disabled) {\n element.find(selector).parent().attr(kendo.attr('page'), page).attr('tabindex', -1).toggleClass('k-state-disabled', disabled);\n }\n function first(element, page) {\n update(element, FIRST, 1, page <= 1);\n }\n function prev(element, page) {\n update(element, PREV, Math.max(1, page - 1), page <= 1);\n }\n function next(element, page, totalPages) {\n update(element, NEXT, Math.min(totalPages, page + 1), page >= totalPages);\n }\n function last(element, page, totalPages) {\n update(element, LAST, totalPages, page >= totalPages);\n }\n var Pager = Widget.extend({\n init: function (element, options) {\n var that = this, page, totalPages;\n var sizeClassName = null;\n Widget.fn.init.call(that, element, options);\n options = that.options;\n that._createDataSource(options);\n that.linkTemplate = kendo.template(that.options.linkTemplate);\n that.selectTemplate = kendo.template(that.options.selectTemplate);\n that.currentPageTemplate = kendo.template(that.options.currentPageTemplate);\n that.numericSelectItemTemplate = kendo.template(that.options.numericSelectItemTemplate);\n page = that.page();\n totalPages = that.totalPages();\n that._refreshHandler = proxy(that.refresh, that);\n that.dataSource.bind(CHANGE, that._refreshHandler);\n that.downEvent = kendo.applyEventMap(MOUSEDOWN, kendo.guid());\n if (options.previousNext) {\n if (!that.element.find(FIRST).length) {\n that.element.append(icon(FIRST, options.messages.first, 'k-pager-first'));\n first(that.element, page, totalPages);\n }\n if (!that.element.find(PREV).length) {\n that.element.append(icon(PREV, options.messages.previous));\n prev(that.element, page, totalPages);\n }\n }\n if (options.numeric) {\n if (!that._numericWrap) {\n that._numericWrap = that.element.find('.k-pager-numbers-wrap');\n if (that._numericWrap.length === 0) {\n that._numericWrap = $('<div class=\\'k-pager-numbers-wrap\\' />').appendTo(that.element);\n }\n }\n if (!that._numericSelect) {\n that._numericSelect = that._numericWrap.find('.k-dropdown');\n if (that._numericSelect.length === 0) {\n that._numericSelect = $('<select class=\\'k-dropdown\\' />').appendTo(that._numericWrap);\n }\n }\n if (!that.list) {\n that.list = that._numericWrap.find('.k-pager-numbers');\n if (that.list.length === 0) {\n that.list = $('<ul class=\"k-pager-numbers\" />').appendTo(that._numericWrap);\n }\n }\n if (options.dataSource && !options.dataSource.total()) {\n that._numericSelect.empty().append('<option value=\\'0\\' />');\n that.list.empty().append(that.selectTemplate({ text: 0 }));\n }\n }\n if (options.input) {\n if (!that.element.find('.k-pager-input').length) {\n that.element.append('<span class=\"k-pager-input k-label\">' + options.messages.page + '<input class=\"k-textbox\">' + kendo.format(options.messages.of, totalPages) + '</span>');\n }\n that.element.on(KEYDOWN + NS, '.k-pager-input input', proxy(that._keydown, that));\n }\n if (options.previousNext) {\n if (!that.element.find(NEXT).length) {\n that.element.append(icon(NEXT, options.messages.next));\n next(that.element, page, totalPages);\n }\n if (!that.element.find(LAST).length) {\n that.element.append(icon(LAST, options.messages.last, 'k-pager-last'));\n last(that.element, page, totalPages);\n }\n }\n if (options.pageSizes) {\n if (!that.element.find('.k-pager-sizes').length) {\n var pageSizes = options.pageSizes.length ? options.pageSizes : [\n 'all',\n 5,\n 10,\n 20\n ];\n var pageItems = $.map(pageSizes, function (size) {\n if (size.toLowerCase && size.toLowerCase() === 'all') {\n return '<option value=\\'all\\'>' + options.messages.allPages + '</option>';\n }\n return '<option>' + size + '</option>';\n });\n $('<span class=\"k-pager-sizes k-label\"><select></select>' + options.messages.itemsPerPage + '</span>').appendTo(that.element).find('select').html(pageItems.join('')).end().appendTo(that.element);\n }\n that.element.find('.k-pager-sizes select').val(that.pageSize());\n if (kendo.ui.DropDownList) {\n that.element.find('.k-pager-sizes select').show().kendoDropDownList();\n }\n that.element.on(CHANGE + NS, '.k-pager-sizes select', proxy(that._change, that));\n }\n if (options.refresh) {\n if (!that.element.find('.k-pager-refresh').length) {\n that.element.append('<a href=\"#\" class=\"k-pager-refresh k-link\" title=\"' + options.messages.refresh + '\" aria-label=\"' + options.messages.refresh + '\"><span class=\"k-icon k-i-reload\"></span></a>');\n }\n that.element.on(CLICK + NS, '.k-pager-refresh', proxy(that._refreshClick, that));\n }\n if (options.info) {\n if (!that.element.find('.k-pager-info').length) {\n that.element.append('<span class=\"k-pager-info k-label\" />');\n }\n }\n that.element.on(CLICK + NS, 'a', proxy(that._click, that)).on(CHANGE + NS, 'select.k-dropdown', proxy(that._numericSelectChange, that)).addClass('k-pager-wrap k-widget k-floatwrap');\n if (options.autoBind) {\n that.refresh();\n }\n that._resizeHandler = proxy(that.resize, that, true);\n $(window).on('resize' + NS, that._resizeHandler);\n sizeClassName = that._getWidthSizeClass(that.element.outerWidth());\n if (sizeClassName) {\n that.element.addClass(sizeClassName);\n }\n kendo.notify(that);\n },\n destroy: function () {\n var that = this;\n Widget.fn.destroy.call(that);\n that.element.off(NS);\n that.dataSource.unbind(CHANGE, that._refreshHandler);\n that._refreshHandler = null;\n $(window).off('resize' + NS, this._resizeHandler);\n kendo.destroy(that.element);\n that.element = that.list = null;\n },\n events: [CHANGE],\n options: {\n name: 'Pager',\n selectTemplate: '<li><span class=\"k-link k-state-selected\">#=text#</span></li>',\n currentPageTemplate: '<li class=\"k-current-page\"><span class=\"k-link k-pager-nav\">#=text#</span></li>',\n linkTemplate: '<li><a tabindex=\"-1\" href=\"\\\\#\" class=\"k-link\" data-#=ns#page=\"#=idx#\" #if (title !== \"\") {# title=\"#=title#\" #}#>#=text#</a></li>',\n numericItemTemplate: '<li><a tabindex=\"-1\" href=\"\\\\#\" class=\"k-link\" data-#=ns#page=\"#=idx#\" #if (title !== \"\") {# title=\"#=title#\" #}#>#=text#</a></li>',\n numericSelectItemTemplate: '<option value=\"#= idx #\" #if (selected) {# selected=\"selected\" #}#>#= text #</option>',\n buttonCount: 10,\n autoBind: true,\n numeric: true,\n info: true,\n input: false,\n previousNext: true,\n pageSizes: false,\n refresh: false,\n responsive: true,\n messages: {\n allPages: 'All',\n display: '{0} - {1} of {2} items',\n empty: 'No items to display',\n page: 'Page',\n of: 'of {0}',\n itemsPerPage: 'items per page',\n first: 'Go to the first page',\n previous: 'Go to the previous page',\n next: 'Go to the next page',\n last: 'Go to the last page',\n refresh: 'Refresh',\n morePages: 'More pages'\n }\n },\n setDataSource: function (dataSource) {\n var that = this;\n that.dataSource.unbind(CHANGE, that._refreshHandler);\n that.dataSource = that.options.dataSource = dataSource;\n dataSource.bind(CHANGE, that._refreshHandler);\n if (that.options.autoBind) {\n dataSource.fetch();\n }\n },\n _resize: function (size) {\n if (size.width) {\n var sizeClassName = this._getWidthSizeClass(size.width);\n var el = this.element;\n if (!sizeClassName) {\n el.removeClass(SIZE);\n } else if (!el.hasClass(sizeClassName)) {\n el.removeClass(SIZE);\n el.addClass(sizeClassName);\n }\n }\n },\n _createDataSource: function (options) {\n this.dataSource = kendo.data.DataSource.create(options.dataSource);\n },\n refresh: function (e) {\n var that = this, idx, end, start = 1, reminder, page = that.page(), html = '', selectHtml = '', options = that.options, pageSize = that.pageSize(), collapsedTotal = that._collapsedTotal(), total = that.dataSource._isGroupPaged() ? that.dataSource.groupsTotal(true) : that.dataSource.total(), totalPages = that.totalPages(), linkTemplate = that.linkTemplate, numericSelectItemTemplate = that.numericSelectItemTemplate, buttonCount = options.buttonCount;\n if (e && e.action == 'itemchange') {\n return;\n }\n if (options.numeric) {\n if (page > buttonCount) {\n reminder = page % buttonCount;\n start = reminder === 0 ? page - buttonCount + 1 : page - reminder + 1;\n }\n end = Math.min(start + buttonCount - 1, totalPages);\n if (start > 1) {\n html += button(linkTemplate, start - 1, '...', false, options.messages.morePages);\n selectHtml += selectOption(numericSelectItemTemplate, start - 1, options.messages.morePages);\n }\n for (idx = start; idx <= end; idx++) {\n html += button(idx == page ? that.selectTemplate : linkTemplate, idx, idx, true);\n selectHtml += selectOption(numericSelectItemTemplate, idx, idx, idx == page);\n }\n if (end < totalPages) {\n html += button(linkTemplate, idx, '...', false, options.messages.morePages);\n selectHtml += selectOption(numericSelectItemTemplate, idx, options.messages.morePages);\n }\n if (html === '') {\n html = that.selectTemplate({ text: 0 });\n selectHtml = $('<option value=\\'0\\' />');\n }\n that.list.html(html);\n that._numericSelect.html(selectHtml);\n }\n if (options.info) {\n if (total > 0) {\n html = kendo.format(options.messages.display, that.dataSource.options.endless ? 1 : Math.min((page - 1) * (that.dataSource.pageSize() || 0) + 1, collapsedTotal), Math.min(page * pageSize, collapsedTotal), total);\n } else {\n html = options.messages.empty;\n }\n that.element.find('.k-pager-info').html(html);\n }\n if (options.input) {\n that.element.find('.k-pager-input').html(that.options.messages.page + '<input class=\"k-textbox\" aria-label=\"' + page + '\">' + kendo.format(options.messages.of, totalPages)).find('input').val(page).attr(DISABLED, total < 1).toggleClass('k-state-disabled', total < 1);\n }\n if (options.previousNext) {\n first(that.element, page, totalPages);\n prev(that.element, page, totalPages);\n next(that.element, page, totalPages);\n last(that.element, page, totalPages);\n }\n if (options.pageSizes) {\n var hasAll = that.element.find('.k-pager-sizes option[value=\\'all\\']').length > 0;\n var selectAll = hasAll && (pageSize === this.dataSource.total() || pageSize == MAX_VALUE);\n var text = pageSize;\n if (selectAll) {\n pageSize = 'all';\n text = options.messages.allPages;\n }\n that.element.find('.k-pager-sizes select').val(pageSize).attr('aria-label', pageSize).filter('[' + kendo.attr('role') + '=dropdownlist]').kendoDropDownList('value', pageSize).kendoDropDownList('text', text);\n }\n },\n _collapsedTotal: function () {\n return this.dataSource.total();\n },\n _keydown: function (e) {\n if (e.keyCode === kendo.keys.ENTER) {\n var input = this.element.find('.k-pager-input').find('input'), page = parseInt(input.val(), 10);\n if (isNaN(page) || page < 1 || page > this.totalPages()) {\n page = this.page();\n }\n input.val(page);\n this.page(page);\n }\n },\n _refreshClick: function (e) {\n e.preventDefault();\n this.dataSource.read();\n },\n _change: function (e) {\n var value = e.currentTarget.value;\n var pageSize = parseInt(value, 10);\n var dataSource = this.dataSource;\n if (!isNaN(pageSize)) {\n dataSource.pageSize(pageSize);\n } else if ((value + '').toLowerCase() == 'all') {\n dataSource._pageSize = undefined;\n dataSource._take = undefined;\n dataSource._skip = 0;\n dataSource.fetch();\n }\n },\n _numericSelectChange: function (e) {\n var target = e.currentTarget;\n var value = target.value;\n var page = parseInt(value, 10);\n target.blur();\n this.page(page);\n },\n _click: function (e) {\n var target = $(e.currentTarget);\n e.preventDefault();\n if (!target.is('.k-state-disabled')) {\n this.page(parseInt(target.attr(kendo.attr('page')), 10));\n }\n },\n totalPages: function () {\n return Math.ceil((this.dataSource.total() || 0) / (this.pageSize() || 1));\n },\n pageSize: function () {\n return this.dataSource.pageSize() || this.dataSource.total();\n },\n page: function (page) {\n if (page) {\n if (this.trigger('pageChange', { index: page })) {\n return;\n }\n this.dataSource.page(page);\n this.trigger(CHANGE, { index: page });\n } else {\n if (this.dataSource.total() > 0) {\n return this.dataSource.page();\n } else {\n return 0;\n }\n }\n },\n _getWidthSizeClass: function (width) {\n var that = this, sizes = SIZE.split(' ');\n if (!that.options.responsive) {\n return null;\n } else if (width <= 480) {\n return sizes[1];\n } else if (width <= 600) {\n return sizes[0];\n }\n return null;\n }\n });\n ui.plugin(Pager);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.popup', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'popup',\n name: 'Pop-up',\n category: 'framework',\n depends: ['core'],\n advanced: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, Widget = ui.Widget, Class = kendo.Class, support = kendo.support, getOffset = kendo.getOffset, outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight, OPEN = 'open', CLOSE = 'close', DEACTIVATE = 'deactivate', ACTIVATE = 'activate', CENTER = 'center', LEFT = 'left', RIGHT = 'right', TOP = 'top', BOTTOM = 'bottom', ABSOLUTE = 'absolute', HIDDEN = 'hidden', BODY = 'body', LOCATION = 'location', POSITION = 'position', VISIBLE = 'visible', EFFECTS = 'effects', ACTIVE = 'k-state-active', ACTIVEBORDER = 'k-state-border', ACTIVEBORDERREGEXP = /k-state-border-(\\w+)/, ACTIVECHILDREN = '.k-picker-wrap, .k-dropdown-wrap, .k-link', MOUSEDOWN = 'down', DOCUMENT_ELEMENT = $(document.documentElement), proxy = $.proxy, WINDOW = $(window), SCROLL = 'scroll', cssPrefix = support.transitions.css, TRANSFORM = cssPrefix + 'transform', extend = $.extend, NS = '.kendoPopup', styles = [\n 'font-size',\n 'font-family',\n 'font-stretch',\n 'font-style',\n 'font-weight',\n 'line-height'\n ];\n function contains(container, target) {\n if (!container || !target) {\n return false;\n }\n return container === target || $.contains(container, target);\n }\n var Popup = Widget.extend({\n init: function (element, options) {\n var that = this, parentPopup;\n options = options || {};\n if (options.isRtl) {\n options.origin = options.origin || BOTTOM + ' ' + RIGHT;\n options.position = options.position || TOP + ' ' + RIGHT;\n }\n Widget.fn.init.call(that, element, options);\n element = that.element;\n options = that.options;\n that.collisions = options.collision ? options.collision.split(' ') : [];\n that.downEvent = kendo.applyEventMap(MOUSEDOWN, kendo.guid());\n if (that.collisions.length === 1) {\n that.collisions.push(that.collisions[0]);\n }\n parentPopup = $(that.options.anchor).closest('.k-popup,.k-group').filter(':not([class^=km-])');\n options.appendTo = $($(options.appendTo)[0] || parentPopup[0] || document.body);\n that.element.hide().addClass('k-popup k-group k-reset').toggleClass('k-rtl', !!options.isRtl).css({ position: ABSOLUTE }).appendTo(options.appendTo).attr('aria-hidden', true).on('mouseenter' + NS, function () {\n that._hovered = true;\n }).on('wheel' + NS, function (e) {\n var list = $(e.target).find('.k-list');\n var scrollArea = list.parent();\n if (list.length && list.is(':visible') && (scrollArea.scrollTop() === 0 && e.originalEvent.deltaY < 0 || scrollArea.scrollTop() === scrollArea.prop('scrollHeight') - scrollArea.prop('offsetHeight') && e.originalEvent.deltaY > 0)) {\n e.preventDefault();\n }\n }).on('mouseleave' + NS, function () {\n that._hovered = false;\n });\n that.wrapper = $();\n if (options.animation === false) {\n options.animation = {\n open: { effects: {} },\n close: {\n hide: true,\n effects: {}\n }\n };\n }\n extend(options.animation.open, {\n complete: function () {\n that.wrapper.css({ overflow: VISIBLE });\n that._activated = true;\n that._trigger(ACTIVATE);\n }\n });\n extend(options.animation.close, {\n complete: function () {\n that._animationClose();\n }\n });\n that._mousedownProxy = function (e) {\n that._mousedown(e);\n };\n if (support.mobileOS.android) {\n that._resizeProxy = function (e) {\n setTimeout(function () {\n that._resize(e);\n }, 600);\n };\n } else {\n that._resizeProxy = function (e) {\n that._resize(e);\n };\n }\n if (options.toggleTarget) {\n $(options.toggleTarget).on(options.toggleEvent + NS, $.proxy(that.toggle, that));\n }\n },\n events: [\n OPEN,\n ACTIVATE,\n CLOSE,\n DEACTIVATE\n ],\n options: {\n name: 'Popup',\n toggleEvent: 'click',\n origin: BOTTOM + ' ' + LEFT,\n position: TOP + ' ' + LEFT,\n anchor: BODY,\n appendTo: null,\n collision: 'flip fit',\n viewport: window,\n copyAnchorStyles: true,\n autosize: false,\n modal: false,\n adjustSize: {\n width: 0,\n height: 0\n },\n animation: {\n open: {\n effects: 'slideIn:down',\n transition: true,\n duration: 200\n },\n close: {\n duration: 100,\n hide: true\n }\n }\n },\n _animationClose: function () {\n var that = this;\n var location = that.wrapper.data(LOCATION);\n that.wrapper.hide();\n if (location) {\n that.wrapper.css(location);\n }\n if (that.options.anchor != BODY) {\n that._hideDirClass();\n }\n that._closing = false;\n that._trigger(DEACTIVATE);\n },\n destroy: function () {\n var that = this, options = that.options, element = that.element.off(NS), parent;\n Widget.fn.destroy.call(that);\n if (options.toggleTarget) {\n $(options.toggleTarget).off(NS);\n }\n if (!options.modal) {\n DOCUMENT_ELEMENT.off(that.downEvent, that._mousedownProxy);\n that._toggleResize(false);\n }\n kendo.destroy(that.element.children());\n element.removeData();\n if (options.appendTo[0] === document.body) {\n parent = element.parent('.k-animation-container');\n if (parent[0]) {\n parent.remove();\n } else {\n element.remove();\n }\n }\n },\n open: function (x, y) {\n var that = this, fixed = {\n isFixed: !isNaN(parseInt(y, 10)),\n x: x,\n y: y\n }, element = that.element, options = that.options, animation, wrapper, anchor = $(options.anchor), mobile = element[0] && element.hasClass('km-widget');\n if (!that.visible()) {\n if (options.copyAnchorStyles) {\n if (mobile && styles[0] == 'font-size') {\n styles.shift();\n }\n element.css(kendo.getComputedStyles(anchor[0], styles));\n }\n if (element.data('animating') || that._trigger(OPEN)) {\n return;\n }\n that._activated = false;\n if (!options.modal) {\n DOCUMENT_ELEMENT.off(that.downEvent, that._mousedownProxy).on(that.downEvent, that._mousedownProxy);\n that._toggleResize(false);\n that._toggleResize(true);\n }\n that.wrapper = wrapper = kendo.wrap(element, options.autosize).css({\n overflow: HIDDEN,\n display: 'block',\n position: ABSOLUTE\n }).attr('aria-hidden', false);\n if (support.mobileOS.android) {\n wrapper.css(TRANSFORM, 'translatez(0)');\n }\n wrapper.css(POSITION);\n if ($(options.appendTo)[0] == document.body) {\n wrapper.css(TOP, '-10000px');\n }\n that.flipped = that._position(fixed);\n animation = that._openAnimation();\n if (options.anchor != BODY) {\n that._showDirClass(animation);\n }\n if (!element.is(':visible') && element.data('olddisplay') === undefined) {\n element.show();\n element.data('olddisplay', element.css('display'));\n element.hide();\n }\n element.data(EFFECTS, animation.effects).kendoStop(true).kendoAnimate(animation).attr('aria-hidden', false);\n }\n },\n _location: function (isFixed) {\n var that = this, element = that.element, options = that.options, wrapper, anchor = $(options.anchor), mobile = element[0] && element.hasClass('km-widget');\n if (options.copyAnchorStyles) {\n if (mobile && styles[0] == 'font-size') {\n styles.shift();\n }\n element.css(kendo.getComputedStyles(anchor[0], styles));\n }\n that.wrapper = wrapper = kendo.wrap(element, options.autosize).css({\n overflow: HIDDEN,\n display: 'block',\n position: ABSOLUTE\n });\n if (support.mobileOS.android) {\n wrapper.css(TRANSFORM, 'translatez(0)');\n }\n wrapper.css(POSITION);\n if ($(options.appendTo)[0] == document.body) {\n wrapper.css(TOP, '-10000px');\n }\n that._position(isFixed || {});\n var offset = wrapper.offset();\n return {\n width: kendo._outerWidth(wrapper),\n height: kendo._outerHeight(wrapper),\n left: offset.left,\n top: offset.top\n };\n },\n _openAnimation: function () {\n var animation = extend(true, {}, this.options.animation.open);\n animation.effects = kendo.parseEffects(animation.effects, this.flipped);\n return animation;\n },\n _hideDirClass: function () {\n var anchor = $(this.options.anchor);\n var direction = ((anchor.attr('class') || '').match(ACTIVEBORDERREGEXP) || [\n '',\n 'down'\n ])[1];\n var dirClass = ACTIVEBORDER + '-' + direction;\n anchor.removeClass(dirClass).children(ACTIVECHILDREN).removeClass(ACTIVE).removeClass(dirClass);\n this.element.removeClass(ACTIVEBORDER + '-' + kendo.directions[direction].reverse);\n },\n _showDirClass: function (animation) {\n var direction = animation.effects.slideIn ? animation.effects.slideIn.direction : 'down';\n var dirClass = ACTIVEBORDER + '-' + direction;\n $(this.options.anchor).addClass(dirClass).children(ACTIVECHILDREN).addClass(ACTIVE).addClass(dirClass);\n this.element.addClass(ACTIVEBORDER + '-' + kendo.directions[direction].reverse);\n },\n position: function () {\n if (this.visible()) {\n this.flipped = this._position();\n }\n },\n toggle: function () {\n var that = this;\n that[that.visible() ? CLOSE : OPEN]();\n },\n visible: function () {\n return this.element.is(':' + VISIBLE);\n },\n close: function (skipEffects) {\n var that = this, options = that.options, wrap, animation, openEffects, closeEffects;\n if (that.visible()) {\n wrap = that.wrapper[0] ? that.wrapper : kendo.wrap(that.element).hide();\n that._toggleResize(false);\n if (that._closing || that._trigger(CLOSE)) {\n that._toggleResize(true);\n return;\n }\n that.element.find('.k-popup').each(function () {\n var that = $(this), popup = that.data('kendoPopup');\n if (popup) {\n popup.close(skipEffects);\n }\n });\n DOCUMENT_ELEMENT.off(that.downEvent, that._mousedownProxy);\n if (skipEffects) {\n animation = {\n hide: true,\n effects: {}\n };\n } else {\n animation = extend(true, {}, options.animation.close);\n openEffects = that.element.data(EFFECTS);\n closeEffects = animation.effects;\n if (!closeEffects && !kendo.size(closeEffects) && openEffects && kendo.size(openEffects)) {\n animation.effects = openEffects;\n animation.reverse = true;\n }\n that._closing = true;\n }\n that.element.kendoStop(true).attr('aria-hidden', true);\n wrap.css({ overflow: HIDDEN }).attr('aria-hidden', true);\n that.element.kendoAnimate(animation);\n if (skipEffects) {\n that._animationClose();\n }\n }\n },\n _trigger: function (ev) {\n return this.trigger(ev, { type: ev });\n },\n _resize: function (e) {\n var that = this;\n if (support.resize.indexOf(e.type) !== -1) {\n clearTimeout(that._resizeTimeout);\n that._resizeTimeout = setTimeout(function () {\n that._position();\n that._resizeTimeout = null;\n }, 50);\n } else {\n if (!that._hovered || that._activated && that.element.hasClass('k-list-container')) {\n that.close();\n }\n }\n },\n _toggleResize: function (toggle) {\n var method = toggle ? 'on' : 'off';\n var eventNames = support.resize;\n if (!(support.mobileOS.ios || support.mobileOS.android || support.browser.safari)) {\n eventNames += ' ' + SCROLL;\n }\n if (toggle && !this.scrollableParents) {\n this.scrollableParents = this._scrollableParents();\n }\n if (this.scrollableParents && this.scrollableParents.length) {\n this.scrollableParents[method](SCROLL, this._resizeProxy);\n }\n WINDOW[method](eventNames, this._resizeProxy);\n },\n _mousedown: function (e) {\n var that = this, container = that.element[0], options = that.options, anchor = $(options.anchor)[0], toggleTarget = options.toggleTarget, target = kendo.eventTarget(e), popup = $(target).closest('.k-popup'), mobile = popup.parent().parent('.km-shim').length;\n popup = popup[0];\n if (!mobile && popup && popup !== that.element[0]) {\n return;\n }\n if ($(e.target).closest('a').data('rel') === 'popover') {\n return;\n }\n if (!contains(container, target) && !contains(anchor, target) && !(toggleTarget && contains($(toggleTarget)[0], target))) {\n that.close();\n }\n },\n _fit: function (position, size, viewPortSize) {\n var output = 0;\n if (position + size > viewPortSize) {\n output = viewPortSize - (position + size);\n }\n if (position < 0) {\n output = -position;\n }\n return output;\n },\n _flip: function (offset, size, anchorSize, viewPortSize, origin, position, boxSize) {\n var output = 0;\n boxSize = boxSize || size;\n if (position !== origin && position !== CENTER && origin !== CENTER) {\n if (offset + boxSize > viewPortSize) {\n output += -(anchorSize + size);\n }\n if (offset + output < 0) {\n output += anchorSize + size;\n }\n }\n return output;\n },\n _scrollableParents: function () {\n return $(this.options.anchor).parentsUntil('body').filter(function (index, element) {\n return kendo.isScrollable(element);\n });\n },\n _position: function (fixed) {\n var that = this, element = that.element, wrapper = that.wrapper, options = that.options, viewport = $(options.viewport), zoomLevel = support.zoomLevel(), isWindow = !!(viewport[0] == window && window.innerWidth && zoomLevel <= 1.02), anchor = $(options.anchor), origins = options.origin.toLowerCase().split(' '), positions = options.position.toLowerCase().split(' '), collisions = that.collisions, siblingContainer, parents, parentZIndex, zIndex = 10002, idx = 0, docEl = document.documentElement, length, viewportOffset, viewportWidth, viewportHeight;\n if (options.viewport === window) {\n viewportOffset = {\n top: window.pageYOffset || document.documentElement.scrollTop || 0,\n left: window.pageXOffset || document.documentElement.scrollLeft || 0\n };\n } else {\n viewportOffset = viewport.offset();\n }\n if (isWindow) {\n viewportWidth = window.innerWidth;\n viewportHeight = window.innerHeight;\n } else {\n viewportWidth = viewport.width();\n viewportHeight = viewport.height();\n }\n if (isWindow && docEl.scrollHeight - docEl.clientHeight > 0) {\n var sign = options.isRtl ? -1 : 1;\n viewportWidth -= sign * kendo.support.scrollbar();\n }\n siblingContainer = anchor.parents().filter(wrapper.siblings());\n if (siblingContainer[0]) {\n parentZIndex = Math.max(Number(siblingContainer.css('zIndex')), 0);\n if (parentZIndex) {\n zIndex = parentZIndex + 10;\n } else {\n parents = anchor.parentsUntil(siblingContainer);\n for (length = parents.length; idx < length; idx++) {\n parentZIndex = Number($(parents[idx]).css('zIndex'));\n if (parentZIndex && zIndex < parentZIndex) {\n zIndex = parentZIndex + 10;\n }\n }\n }\n }\n wrapper.css('zIndex', zIndex);\n if (fixed && fixed.isFixed) {\n wrapper.css({\n left: fixed.x,\n top: fixed.y\n });\n } else {\n wrapper.css(that._align(origins, positions));\n }\n var pos = getOffset(wrapper, POSITION, anchor[0] === wrapper.offsetParent()[0]), offset = getOffset(wrapper), anchorParent = anchor.offsetParent().parent('.k-animation-container,.k-popup,.k-group');\n if (anchorParent.length) {\n pos = getOffset(wrapper, POSITION, true);\n offset = getOffset(wrapper);\n }\n offset.top -= viewportOffset.top;\n offset.left -= viewportOffset.left;\n if (!that.wrapper.data(LOCATION)) {\n wrapper.data(LOCATION, extend({}, pos));\n }\n var offsets = extend({}, offset), location = extend({}, pos), adjustSize = options.adjustSize;\n if (collisions[0] === 'fit') {\n location.top += that._fit(offsets.top, outerHeight(wrapper) + adjustSize.height, viewportHeight / zoomLevel);\n }\n if (collisions[1] === 'fit') {\n location.left += that._fit(offsets.left, outerWidth(wrapper) + adjustSize.width, viewportWidth / zoomLevel);\n }\n var flipPos = extend({}, location);\n var elementHeight = outerHeight(element);\n var wrapperHeight = outerHeight(wrapper);\n if (!wrapper.height() && elementHeight) {\n wrapperHeight = wrapperHeight + elementHeight;\n }\n if (collisions[0] === 'flip') {\n location.top += that._flip(offsets.top, elementHeight, outerHeight(anchor), viewportHeight / zoomLevel, origins[0], positions[0], wrapperHeight);\n }\n if (collisions[1] === 'flip') {\n location.left += that._flip(offsets.left, outerWidth(element), outerWidth(anchor), viewportWidth / zoomLevel, origins[1], positions[1], outerWidth(wrapper));\n }\n element.css(POSITION, ABSOLUTE);\n wrapper.css(location);\n return location.left != flipPos.left || location.top != flipPos.top;\n },\n _align: function (origin, position) {\n var that = this, element = that.wrapper, anchor = $(that.options.anchor), verticalOrigin = origin[0], horizontalOrigin = origin[1], verticalPosition = position[0], horizontalPosition = position[1], anchorOffset = getOffset(anchor), appendTo = $(that.options.appendTo), appendToOffset, width = outerWidth(element), height = outerHeight(element) || outerHeight(element.children().first()), anchorWidth = outerWidth(anchor), anchorHeight = outerHeight(anchor), top = anchorOffset.top, left = anchorOffset.left, round = Math.round;\n if (appendTo[0] != document.body) {\n appendToOffset = getOffset(appendTo);\n top -= appendToOffset.top;\n left -= appendToOffset.left;\n }\n if (verticalOrigin === BOTTOM) {\n top += anchorHeight;\n }\n if (verticalOrigin === CENTER) {\n top += round(anchorHeight / 2);\n }\n if (verticalPosition === BOTTOM) {\n top -= height;\n }\n if (verticalPosition === CENTER) {\n top -= round(height / 2);\n }\n if (horizontalOrigin === RIGHT) {\n left += anchorWidth;\n }\n if (horizontalOrigin === CENTER) {\n left += round(anchorWidth / 2);\n }\n if (horizontalPosition === RIGHT) {\n left -= width;\n }\n if (horizontalPosition === CENTER) {\n left -= round(width / 2);\n }\n return {\n top: top,\n left: left\n };\n }\n });\n ui.plugin(Popup);\n var stableSort = kendo.support.stableSort;\n var tabKeyTrapNS = 'kendoTabKeyTrap';\n var focusableNodesSelector = 'a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, [tabindex], *[contenteditable]';\n var TabKeyTrap = Class.extend({\n init: function (element) {\n this.element = $(element);\n this.element.autoApplyNS(tabKeyTrapNS);\n },\n trap: function () {\n this.element.on('keydown', proxy(this._keepInTrap, this));\n },\n removeTrap: function () {\n this.element.kendoDestroy(tabKeyTrapNS);\n },\n destroy: function () {\n this.element.kendoDestroy(tabKeyTrapNS);\n this.element = undefined;\n },\n shouldTrap: function () {\n return true;\n },\n _keepInTrap: function (e) {\n if (e.which !== 9 || !this.shouldTrap() || e.isDefaultPrevented()) {\n return;\n }\n var elements = this._focusableElements();\n var sortedElements = this._sortFocusableElements(elements);\n var next = this._nextFocusable(e, sortedElements);\n this._focus(next);\n e.preventDefault();\n },\n _focusableElements: function () {\n var elements = this.element.find(focusableNodesSelector).filter(function (i, item) {\n return item.tabIndex >= 0 && $(item).is(':visible') && !$(item).is('[disabled]');\n });\n if (this.element.is('[tabindex]')) {\n elements.push(this.element[0]);\n }\n return elements;\n },\n _sortFocusableElements: function (elements) {\n var sortedElements;\n if (stableSort) {\n sortedElements = elements.sort(function (prev, next) {\n return prev.tabIndex - next.tabIndex;\n });\n } else {\n var attrName = '__k_index';\n elements.each(function (i, item) {\n item.setAttribute(attrName, i);\n });\n sortedElements = elements.sort(function (prev, next) {\n return prev.tabIndex === next.tabIndex ? parseInt(prev.getAttribute(attrName), 10) - parseInt(next.getAttribute(attrName), 10) : prev.tabIndex - next.tabIndex;\n });\n elements.removeAttr(attrName);\n }\n return sortedElements;\n },\n _nextFocusable: function (e, elements) {\n var count = elements.length;\n var current = elements.index(e.target);\n return elements.get((current + (e.shiftKey ? -1 : 1)) % count);\n },\n _focus: function (element) {\n if (element.nodeName == 'IFRAME') {\n element.contentWindow.document.body.focus();\n return;\n }\n element.focus();\n if (element.nodeName == 'INPUT' && element.setSelectionRange && this._haveSelectionRange(element)) {\n element.setSelectionRange(0, element.value.length);\n }\n },\n _haveSelectionRange: function (element) {\n var elementType = element.type.toLowerCase();\n return elementType === 'text' || elementType === 'search' || elementType === 'url' || elementType === 'tel' || elementType === 'password';\n }\n });\n ui.Popup.TabKeyTrap = TabKeyTrap;\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.notification', [\n 'kendo.core',\n 'kendo.popup'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'notification',\n name: 'Notification',\n category: 'web',\n description: 'The Notification widget displays user alerts.',\n depends: [\n 'core',\n 'popup'\n ],\n features: [{\n id: 'notification-fx',\n name: 'Animation',\n description: 'Support for animation',\n depends: ['fx']\n }]\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, proxy = $.proxy, extend = $.extend, setTimeout = window.setTimeout, CLICK = 'click', SHOW = 'show', HIDE = 'hide', KNOTIFICATION = 'k-notification', KICLOSE = '.k-notification-wrap .k-i-close', KHIDING = 'k-hiding', INFO = 'info', SUCCESS = 'success', WARNING = 'warning', ERROR = 'error', TOP = 'top', LEFT = 'left', BOTTOM = 'bottom', RIGHT = 'right', UP = 'up', NS = '.kendoNotification', WRAPPER = '<div class=\"k-widget k-popup k-notification\"></div>', TEMPLATE = '<div class=\"k-notification-wrap\">' + '<span class=\"k-icon k-i-#=typeIcon#\" title=\"#=typeIcon#\"></span>' + '<div class=\"k-notification-content\">#=content#</div>' + '<span class=\"k-icon k-i-close\" title=\"Hide\"></span>' + '</div>', SAFE_TEMPLATE = TEMPLATE.replace('#=content#', '#:content#');\n var Notification = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n options = that.options;\n if (!options.appendTo || !$(options.appendTo).is(element)) {\n that.element.hide();\n }\n that._compileTemplates(options.templates);\n that._guid = '_' + kendo.guid();\n that._isRtl = kendo.support.isRtl(element);\n that._compileStacking(options.stacking, options.position.top, options.position.left);\n kendo.notify(that);\n },\n events: [\n SHOW,\n HIDE\n ],\n options: {\n name: 'Notification',\n position: {\n pinned: true,\n top: null,\n left: null,\n bottom: 20,\n right: 20\n },\n stacking: 'default',\n hideOnClick: true,\n button: false,\n allowHideAfter: 0,\n autoHideAfter: 5000,\n appendTo: null,\n width: null,\n height: null,\n templates: [],\n animation: {\n open: {\n effects: 'fade:in',\n duration: 300\n },\n close: {\n effects: 'fade:out',\n duration: 600,\n hide: true\n }\n }\n },\n _compileTemplates: function (templates) {\n var that = this;\n var kendoTemplate = kendo.template;\n that._compiled = {};\n $.each(templates, function (key, value) {\n that._compiled[value.type] = kendoTemplate(value.template || $('#' + value.templateId).html());\n });\n that._defaultCompiled = kendoTemplate(TEMPLATE);\n that._safeCompiled = kendoTemplate(SAFE_TEMPLATE);\n },\n _getCompiled: function (type, safe) {\n var defaultCompiled = safe ? this._safeCompiled : this._defaultCompiled;\n return type ? this._compiled[type] || defaultCompiled : defaultCompiled;\n },\n _compileStacking: function (stacking, top, left) {\n var that = this, paddings = {\n paddingTop: 0,\n paddingRight: 0,\n paddingBottom: 0,\n paddingLeft: 0\n }, horizontalAlignment = left !== null ? LEFT : RIGHT, origin, position;\n switch (stacking) {\n case 'down':\n origin = BOTTOM + ' ' + horizontalAlignment;\n position = TOP + ' ' + horizontalAlignment;\n delete paddings.paddingBottom;\n break;\n case RIGHT:\n origin = TOP + ' ' + RIGHT;\n position = TOP + ' ' + LEFT;\n delete paddings.paddingRight;\n break;\n case LEFT:\n origin = TOP + ' ' + LEFT;\n position = TOP + ' ' + RIGHT;\n delete paddings.paddingLeft;\n break;\n case UP:\n origin = TOP + ' ' + horizontalAlignment;\n position = BOTTOM + ' ' + horizontalAlignment;\n delete paddings.paddingTop;\n break;\n default:\n if (top !== null) {\n origin = BOTTOM + ' ' + horizontalAlignment;\n position = TOP + ' ' + horizontalAlignment;\n delete paddings.paddingBottom;\n } else {\n origin = TOP + ' ' + horizontalAlignment;\n position = BOTTOM + ' ' + horizontalAlignment;\n delete paddings.paddingTop;\n }\n break;\n }\n that._popupOrigin = origin;\n that._popupPosition = position;\n that._popupPaddings = paddings;\n },\n _attachPopupEvents: function (options, popup) {\n var that = this, allowHideAfter = options.allowHideAfter, attachDelay = !isNaN(allowHideAfter) && allowHideAfter > 0, closeIcon;\n function attachClick(target) {\n target.on(CLICK + NS, function () {\n that._hidePopup(popup);\n });\n }\n if (options.hideOnClick) {\n popup.bind('activate', function () {\n if (attachDelay) {\n setTimeout(function () {\n attachClick(popup.element);\n }, allowHideAfter);\n } else {\n attachClick(popup.element);\n }\n });\n } else if (options.button) {\n closeIcon = popup.element.find(KICLOSE);\n if (attachDelay) {\n setTimeout(function () {\n attachClick(closeIcon);\n }, allowHideAfter);\n } else {\n attachClick(closeIcon);\n }\n }\n },\n _showPopup: function (wrapper, options) {\n var that = this, autoHideAfter = options.autoHideAfter, x = options.position.left, y = options.position.top, popup, openPopup;\n openPopup = $('.' + that._guid + ':not(.' + KHIDING + ')').last();\n popup = new kendo.ui.Popup(wrapper, {\n anchor: openPopup[0] ? openPopup : document.body,\n origin: that._popupOrigin,\n position: that._popupPosition,\n animation: options.animation,\n copyAnchorStyles: false,\n modal: true,\n collision: '',\n isRtl: that._isRtl,\n close: function () {\n that._triggerHide(this.element);\n },\n deactivate: function (e) {\n e.sender.element.off(NS);\n e.sender.element.find(KICLOSE).off(NS);\n e.sender.destroy();\n }\n });\n that._attachPopupEvents(options, popup);\n wrapper.removeClass('k-group k-reset');\n if (openPopup[0]) {\n popup.open();\n } else {\n if (x === null) {\n x = $(window).width() - wrapper.outerWidth() - options.position.right;\n }\n if (y === null) {\n y = $(window).height() - wrapper.outerHeight() - options.position.bottom;\n }\n popup.open(x, y);\n }\n popup.wrapper.addClass(that._guid).css(extend({\n margin: 0,\n zIndex: 10050\n }, that._popupPaddings));\n if (options.position.pinned) {\n popup.wrapper.css('position', 'fixed');\n if (openPopup[0]) {\n that._togglePin(popup.wrapper, true);\n }\n } else if (!openPopup[0]) {\n that._togglePin(popup.wrapper, false);\n }\n if (autoHideAfter > 0) {\n setTimeout(function () {\n that._hidePopup(popup);\n }, autoHideAfter);\n }\n },\n _hidePopup: function (popup) {\n popup.wrapper.addClass(KHIDING);\n popup.close();\n },\n _togglePin: function (wrapper, pin) {\n var win = $(window), sign = pin ? -1 : 1;\n wrapper.css({\n top: parseInt(wrapper.css(TOP), 10) + sign * win.scrollTop(),\n left: parseInt(wrapper.css(LEFT), 10) + sign * win.scrollLeft()\n });\n },\n _attachStaticEvents: function (options, wrapper) {\n var that = this, allowHideAfter = options.allowHideAfter, attachDelay = !isNaN(allowHideAfter) && allowHideAfter > 0;\n function attachClick(target) {\n target.on(CLICK + NS, proxy(that._hideStatic, that, wrapper));\n }\n if (options.hideOnClick) {\n if (attachDelay) {\n setTimeout(function () {\n attachClick(wrapper);\n }, allowHideAfter);\n } else {\n attachClick(wrapper);\n }\n } else if (options.button) {\n if (attachDelay) {\n setTimeout(function () {\n attachClick(wrapper.find(KICLOSE));\n }, allowHideAfter);\n } else {\n attachClick(wrapper.find(KICLOSE));\n }\n }\n },\n _showStatic: function (wrapper, options) {\n var that = this, autoHideAfter = options.autoHideAfter, animation = options.animation, insertionMethod = options.stacking == UP || options.stacking == LEFT ? 'prependTo' : 'appendTo', initializedNotifications;\n wrapper.removeClass('k-popup').addClass(that._guid)[insertionMethod](options.appendTo).hide().kendoAnimate(animation.open || false);\n initializedNotifications = that.getNotifications();\n initializedNotifications.each(function (idx, element) {\n that._attachStaticEvents(options, $(element));\n if (autoHideAfter > 0) {\n setTimeout(function () {\n that._hideStatic($(element));\n }, autoHideAfter);\n }\n });\n },\n _hideStatic: function (wrapper) {\n wrapper.kendoAnimate(extend(this.options.animation.close || false, {\n complete: function () {\n wrapper.off(NS).find(KICLOSE).off(NS);\n wrapper.remove();\n }\n }));\n this._triggerHide(wrapper);\n },\n _triggerHide: function (element) {\n this.trigger(HIDE, { element: element });\n this.angular('cleanup', function () {\n return { elements: element };\n });\n },\n show: function (content, type, safe) {\n var that = this, options = that.options, wrapper = $(WRAPPER), args, defaultArgs;\n if (!type) {\n type = INFO;\n }\n if (content !== null && content !== undefined && content !== '') {\n if (kendo.isFunction(content)) {\n content = content();\n }\n defaultArgs = {\n typeIcon: type,\n content: ''\n };\n if ($.isPlainObject(content)) {\n args = extend(defaultArgs, content);\n } else {\n args = extend(defaultArgs, { content: content });\n }\n wrapper.addClass(KNOTIFICATION + '-' + type).toggleClass(KNOTIFICATION + '-button', options.button).toggleClass(KNOTIFICATION + '-closable', options.button).attr('data-role', 'alert').css({\n width: options.width,\n height: options.height\n }).append(that._getCompiled(type, safe)(args));\n that.angular('compile', function () {\n return {\n elements: wrapper,\n data: [{ dataItem: args }]\n };\n });\n if ($(options.appendTo)[0]) {\n that._showStatic(wrapper, options);\n } else {\n that._showPopup(wrapper, options);\n }\n that.trigger(SHOW, { element: wrapper });\n }\n return that;\n },\n showText: function (content, type) {\n this.show(content, type, true);\n },\n info: function (content) {\n return this.show(content, INFO);\n },\n success: function (content) {\n return this.show(content, SUCCESS);\n },\n warning: function (content) {\n return this.show(content, WARNING);\n },\n error: function (content) {\n return this.show(content, ERROR);\n },\n hide: function () {\n var that = this, openedNotifications = that.getNotifications();\n if (that.options.appendTo) {\n openedNotifications.each(function (idx, element) {\n that._hideStatic($(element));\n });\n } else {\n openedNotifications.each(function (idx, element) {\n var popup = $(element).data('kendoPopup');\n if (popup) {\n that._hidePopup(popup);\n }\n });\n }\n return that;\n },\n getNotifications: function () {\n var that = this, guidElements = $('.' + that._guid + ':not(.' + KHIDING + ')');\n if (that.options.appendTo) {\n return guidElements;\n } else {\n return guidElements.children('.' + KNOTIFICATION);\n }\n },\n setOptions: function (newOptions) {\n var that = this, options;\n Widget.fn.setOptions.call(that, newOptions);\n options = that.options;\n if (newOptions.templates !== undefined) {\n that._compileTemplates(options.templates);\n }\n if (newOptions.stacking !== undefined || newOptions.position !== undefined) {\n that._compileStacking(options.stacking, options.position.top, options.position.left);\n }\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.getNotifications().off(NS).find(KICLOSE).off(NS);\n }\n });\n kendo.ui.plugin(Notification);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.tooltip', [\n 'kendo.core',\n 'kendo.popup',\n 'kendo.fx'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'tooltip',\n name: 'Tooltip',\n category: 'web',\n description: 'The Tooltip widget displays a popup hint for a given html element.',\n depends: [\n 'core',\n 'popup'\n ],\n features: [{\n id: 'tooltip-fx',\n name: 'Animation',\n description: 'Support for animation',\n depends: ['fx']\n }]\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, Popup = kendo.ui.Popup, isFunction = kendo.isFunction, isPlainObject = $.isPlainObject, extend = $.extend, proxy = $.proxy, DOCUMENT = $(document), isLocalUrl = kendo.isLocalUrl, ARIAIDSUFFIX = '_tt_active', DESCRIBEDBY = 'aria-describedby', SHOW = 'show', HIDE = 'hide', ERROR = 'error', CONTENTLOAD = 'contentLoad', REQUESTSTART = 'requestStart', KCONTENTFRAME = 'k-content-frame', TEMPLATE = '<div role=\"tooltip\" class=\"k-widget k-tooltip#if (!autoHide) {# k-tooltip-closable#}#\">' + '<div class=\"k-tooltip-content\"></div>' + '#if (!autoHide) {# <div class=\"k-tooltip-button\"><a href=\"\\\\#\" class=\"k-icon k-i-close\" title=\"Close\"></a></div> #}#' + '#if (callout){ #<div class=\"k-callout k-callout-#=dir#\"></div>#}#' + '</div>', IFRAMETEMPLATE = kendo.template('<iframe frameborder=\\'0\\' class=\\'' + KCONTENTFRAME + '\\' src=\\'#= content.url #\\'>' + 'This page requires frames in order to show content' + '</iframe>'), NS = '.kendoTooltip', POSITIONS = {\n bottom: {\n origin: 'bottom center',\n position: 'top center'\n },\n top: {\n origin: 'top center',\n position: 'bottom center'\n },\n left: {\n origin: 'center left',\n position: 'center right',\n collision: 'fit flip'\n },\n right: {\n origin: 'center right',\n position: 'center left',\n collision: 'fit flip'\n },\n center: {\n position: 'center center',\n origin: 'center center'\n }\n }, REVERSE = {\n 'top': 'bottom',\n 'bottom': 'top',\n 'left': 'right',\n 'right': 'left',\n 'center': 'center'\n }, DIRCLASSES = {\n bottom: 'n',\n top: 's',\n left: 'e',\n right: 'w',\n center: 'n'\n }, DIMENSIONS = {\n 'horizontal': {\n offset: 'top',\n size: 'outerHeight'\n },\n 'vertical': {\n offset: 'left',\n size: 'outerWidth'\n }\n }, DEFAULTCONTENT = function (e) {\n return e.target.data(kendo.ns + 'title');\n };\n function restoreTitle(element) {\n while (element.length) {\n if (restoreTitleAttributeForElement(element)) {\n break;\n }\n element = element.parent();\n }\n }\n function restoreTitleAttributeForElement(element) {\n var title = element.data(kendo.ns + 'title');\n if (title) {\n element.attr('title', title);\n element.removeData(kendo.ns + 'title');\n return true;\n }\n }\n function saveTitleAttributeForElement(element) {\n var title = element.attr('title');\n if (title) {\n element.data(kendo.ns + 'title', title);\n element.attr('title', '');\n return true;\n }\n }\n function saveTitleAttributes(element) {\n while (element.length && !element.is('body')) {\n if (saveTitleAttributeForElement(element)) {\n break;\n }\n element = element.parent();\n }\n }\n var Tooltip = Widget.extend({\n init: function (element, options) {\n var that = this, axis;\n Widget.fn.init.call(that, element, options);\n axis = that.options.position.match(/left|right/) ? 'horizontal' : 'vertical';\n that.dimensions = DIMENSIONS[axis];\n that._documentKeyDownHandler = proxy(that._documentKeyDown, that);\n if (kendo.support.touch && this._isShownOnMouseEnter()) {\n that.element.on(kendo.support.mousedown + NS, that.options.filter, proxy(that._showOn, that));\n }\n that.element.on(that.options.showOn + NS, that.options.filter, proxy(that._showOn, that));\n if (this._isShownOnMouseEnter() || this._isShownOnClick()) {\n that.element.on('mouseenter' + NS, that.options.filter, proxy(that._mouseenter, that));\n }\n if (this.options.autoHide && this._isShownOnMouseEnter()) {\n that.element.on('mouseleave' + NS, that.options.filter, proxy(that._mouseleave, that));\n }\n if (this.options.autoHide && this._isShownOnFocus()) {\n that.element.on('blur' + NS, that.options.filter, proxy(that._blur, that));\n }\n if (kendo.support.touch) {\n that.element.on(kendo.support.mousedown + NS, that.options.filter, proxy(that._mouseenter, that));\n }\n },\n options: {\n name: 'Tooltip',\n filter: '',\n content: DEFAULTCONTENT,\n showAfter: 100,\n hideAfter: 100,\n callout: true,\n offset: 0,\n position: 'bottom',\n showOn: 'mouseenter',\n autoHide: true,\n width: null,\n height: null,\n animation: {\n open: {\n effects: 'fade:in',\n duration: 0\n },\n close: {\n duration: 40,\n hide: true\n }\n }\n },\n events: [\n SHOW,\n HIDE,\n CONTENTLOAD,\n ERROR,\n REQUESTSTART\n ],\n _isShownOnFocus: function () {\n return this.options.showOn && this.options.showOn.match(/focus/);\n },\n _isShownOnMouseEnter: function () {\n return this.options.showOn && this.options.showOn.match(/mouseenter/);\n },\n _isShownOnClick: function () {\n return this.options.showOn && this.options.showOn.match(/click/);\n },\n _mouseenter: function (e) {\n saveTitleAttributes($(e.currentTarget));\n },\n _showOn: function (e) {\n var that = this;\n var currentTarget = $(e.currentTarget);\n if (that._isShownOnClick() && !that._isShownOnMouseEnter()) {\n that._show(currentTarget);\n } else if (that._isShownOnFocus()) {\n saveTitleAttributes(currentTarget);\n that._show(currentTarget);\n } else {\n clearTimeout(that.timeout);\n that.timeout = setTimeout(function () {\n that._show(currentTarget);\n }, that.options.showAfter);\n }\n },\n _appendContent: function (target) {\n var that = this, contentOptions = that.options.content, element = that.content, showIframe = that.options.iframe, iframe;\n if (isPlainObject(contentOptions) && contentOptions.url) {\n if (!('iframe' in that.options)) {\n showIframe = !isLocalUrl(contentOptions.url);\n }\n that.trigger(REQUESTSTART, {\n options: contentOptions,\n target: target\n });\n if (!showIframe) {\n element.empty();\n kendo.ui.progress(element, true);\n that._ajaxRequest(contentOptions);\n } else {\n element.hide();\n iframe = element.find('.' + KCONTENTFRAME)[0];\n if (iframe) {\n iframe.src = contentOptions.url || iframe.src;\n } else {\n element.html(IFRAMETEMPLATE({ content: contentOptions }));\n }\n element.find('.' + KCONTENTFRAME).off('load' + NS).on('load' + NS, function () {\n that.trigger(CONTENTLOAD);\n element.show();\n });\n }\n } else if (contentOptions && isFunction(contentOptions)) {\n contentOptions = contentOptions({\n sender: this,\n target: target\n });\n element.html(contentOptions || '');\n } else {\n element.html(contentOptions);\n }\n that.angular('compile', function () {\n return { elements: element };\n });\n },\n _ajaxRequest: function (options) {\n var that = this;\n jQuery.ajax(extend({\n type: 'GET',\n dataType: 'html',\n cache: false,\n error: function (xhr, status) {\n kendo.ui.progress(that.content, false);\n that.trigger(ERROR, {\n status: status,\n xhr: xhr\n });\n },\n success: proxy(function (data) {\n kendo.ui.progress(that.content, false);\n that.content.html(data);\n that.trigger(CONTENTLOAD);\n }, that)\n }, options));\n },\n _documentKeyDown: function (e) {\n if (e.keyCode === kendo.keys.ESC) {\n this.hide();\n }\n },\n refresh: function () {\n var that = this, popup = that.popup;\n if (popup && popup.options.anchor) {\n that._appendContent(popup.options.anchor);\n }\n },\n hide: function () {\n if (this.popup) {\n this.popup.close();\n }\n },\n show: function (target) {\n target = target || this.element;\n saveTitleAttributes(target);\n this._show(target);\n },\n _show: function (target) {\n var that = this, current = that.target();\n if (!that.popup) {\n that._initPopup();\n }\n if (current && current[0] != target[0]) {\n that.popup.close();\n that.popup.element.kendoStop(true, true);\n }\n if (!current || current[0] != target[0]) {\n that._appendContent(target);\n that.popup.options.anchor = target;\n }\n that.popup.one('deactivate', function () {\n restoreTitle(target);\n target.removeAttr(DESCRIBEDBY);\n this.element.removeAttr('id').attr('aria-hidden', true);\n DOCUMENT.off('keydown' + NS, that._documentKeyDownHandler);\n });\n that.popup._hovered = true;\n that.popup.open();\n },\n _initPopup: function () {\n var that = this, options = that.options, wrapper = $(kendo.template(TEMPLATE)({\n callout: options.callout && options.position !== 'center',\n dir: DIRCLASSES[options.position],\n autoHide: options.autoHide\n }));\n that.popup = new Popup(wrapper, extend({\n autosize: true,\n activate: function () {\n var anchor = this.options.anchor, ariaId = anchor[0].id || that.element[0].id;\n if (ariaId) {\n anchor.attr(DESCRIBEDBY, ariaId + ARIAIDSUFFIX);\n this.element.attr('id', ariaId + ARIAIDSUFFIX);\n }\n if (options.callout) {\n that._positionCallout();\n } else {\n that._offset(that.options.position, that.options.offset);\n }\n this.element.removeAttr('aria-hidden');\n DOCUMENT.on('keydown' + NS, that._documentKeyDownHandler);\n that.trigger(SHOW);\n that.popup._hovered = undefined;\n },\n close: function () {\n that.trigger(HIDE);\n },\n copyAnchorStyles: false,\n animation: options.animation\n }, POSITIONS[options.position]));\n wrapper.css({\n width: options.width,\n height: options.height\n });\n that.content = wrapper.find('.k-tooltip-content');\n that.arrow = wrapper.find('.k-callout');\n if (options.autoHide && this._isShownOnMouseEnter()) {\n wrapper.on('mouseleave' + NS, proxy(that._mouseleave, that));\n } else {\n wrapper.on('click' + NS, '.k-tooltip-button', proxy(that._closeButtonClick, that));\n }\n },\n _closeButtonClick: function (e) {\n e.preventDefault();\n this.hide();\n },\n _mouseleave: function (e) {\n var that = this;\n clearTimeout(that.timeout);\n that.timeout = setTimeout(function () {\n that._closePopup(e.currentTarget);\n }, that.options.hideAfter);\n },\n _blur: function (e) {\n this._closePopup(e.currentTarget);\n },\n _closePopup: function (target) {\n if (this.popup && !this.popup._hovered) {\n this.popup.close();\n } else {\n restoreTitle($(target));\n }\n },\n target: function () {\n if (this.popup) {\n return this.popup.options.anchor;\n }\n return null;\n },\n _positionCallout: function () {\n var that = this, position = that.options.position, dimensions = that.dimensions, offset = dimensions.offset, popup = that.popup, anchor = popup.options.anchor, anchorOffset = $(anchor).offset(), elementOffset = $(popup.element).offset(), cssClass = DIRCLASSES[popup.flipped ? REVERSE[position] : position], offsetAmount = anchorOffset[offset] - elementOffset[offset] + $(anchor)[dimensions.size]() / 2;\n that._offset(position, that.options.offset);\n that.arrow.removeClass('k-callout-n k-callout-s k-callout-w k-callout-e').addClass('k-callout-' + cssClass).css(offset, offsetAmount);\n },\n destroy: function () {\n var popup = this.popup;\n if (popup) {\n popup.element.off(NS);\n popup.destroy();\n }\n clearTimeout(this.timeout);\n this.element.off(NS);\n DOCUMENT.off('keydown' + NS, this._documentKeyDownHandler);\n Widget.fn.destroy.call(this);\n },\n _offset: function (position, offsetAmount) {\n var that = this, isTopLeft = position == 'top' || position == 'left', isFlipped = that.popup.flipped, direction = isTopLeft && isFlipped || !isTopLeft && !isFlipped ? 1 : -1, marginRule = isTopLeft ? 'margin-' + position : 'margin-' + REVERSE[position], offset = kendo._outerWidth(that.arrow) / 2 + offsetAmount;\n that.popup.wrapper.css(marginRule, offset * direction + 'px');\n }\n });\n kendo.ui.plugin(Tooltip);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.toolbar', [\n 'kendo.core',\n 'kendo.userevents',\n 'kendo.popup'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'toolbar',\n name: 'ToolBar',\n category: 'web',\n description: 'The ToolBar widget displays one or more command buttons divided into groups.',\n depends: ['core']\n };\n (function ($, undefined) {\n var kendo = window.kendo, Class = kendo.Class, Widget = kendo.ui.Widget, proxy = $.proxy, isFunction = kendo.isFunction, keys = kendo.keys, outerWidth = kendo._outerWidth, ns = '.kendoToolBar', TOOLBAR = 'k-toolbar', BUTTON = 'k-button', OVERFLOW_BUTTON = 'k-overflow-button', TOGGLE_BUTTON = 'k-toggle-button', BUTTON_GROUP = 'k-button-group', SPLIT_BUTTON = 'k-split-button', SEPARATOR = 'k-separator', SPACER_CLASS = 'k-spacer', SPACER = 'spacer', POPUP = 'k-popup', RESIZABLE_TOOLBAR = 'k-toolbar-resizable', STATE_ACTIVE = 'k-state-active', STATE_DISABLED = 'k-state-disabled', STATE_HIDDEN = 'k-state-hidden', HIDDEN = 'k-hidden', GROUP_START = 'k-group-start', GROUP_END = 'k-group-end', PRIMARY = 'k-primary', ARIA_DISABLED = 'aria-disabled', ARIA_PRESSED = 'aria-pressed', ICON = 'k-icon', ICON_PREFIX = 'k-i-', BUTTON_ICON = 'k-button-icon', BUTTON_ICON_TEXT = 'k-button-icontext', LIST_CONTAINER = 'k-list-container k-split-container', SPLIT_BUTTON_ARROW = 'k-split-button-arrow', OVERFLOW_ANCHOR = 'k-overflow-anchor', OVERFLOW_CONTAINER = 'k-overflow-container', FIRST_TOOLBAR_VISIBLE = 'k-toolbar-first-visible', LAST_TOOLBAR_VISIBLE = 'k-toolbar-last-visible', CLICK = 'click', TOGGLE = 'toggle', OPEN = 'open', CLOSE = 'close', OVERFLOW_OPEN = 'overflowOpen', OVERFLOW_CLOSE = 'overflowClose', OVERFLOW_NEVER = 'never', OVERFLOW_AUTO = 'auto', OVERFLOW_ALWAYS = 'always', OVERFLOW_HIDDEN = 'k-overflow-hidden', OPTION_LIST_SUFFIX = '_optionlist', KENDO_UID_ATTR = kendo.attr('uid');\n kendo.toolbar = {};\n var components = {\n overflowAnchor: '<div tabindex=\"0\" class=\"k-overflow-anchor k-button\" title=\"More tools\" role=\"button\"></div>',\n overflowContainer: '<ul class=\"k-overflow-container k-list-container\"></ul>'\n };\n kendo.toolbar.registerComponent = function (name, toolbar, overflow) {\n components[name] = {\n toolbar: toolbar,\n overflow: overflow\n };\n };\n var Item = kendo.Class.extend({\n addOverflowAttr: function () {\n this.element.attr(kendo.attr('overflow'), this.options.overflow || OVERFLOW_AUTO);\n },\n addUidAttr: function () {\n this.element.attr(KENDO_UID_ATTR, this.options.uid);\n },\n addIdAttr: function () {\n if (this.options.id) {\n this.element.attr('id', this.options.id);\n }\n },\n addOverflowIdAttr: function () {\n if (this.options.id) {\n this.element.attr('id', this.options.id + '_overflow');\n }\n },\n attributes: function () {\n if (this.options.attributes) {\n this.element.attr(this.options.attributes);\n }\n },\n show: function () {\n this.element.removeClass(STATE_HIDDEN);\n this.element.removeClass(HIDDEN);\n this.options.hidden = false;\n },\n hide: function () {\n this.element.addClass(STATE_HIDDEN);\n this.element.addClass(HIDDEN);\n if (this.overflow && this.overflowHidden) {\n this.overflowHidden();\n }\n this.options.hidden = true;\n },\n remove: function () {\n this.element.remove();\n },\n enable: function (isEnabled) {\n if (isEnabled === undefined) {\n isEnabled = true;\n }\n this.element.toggleClass(STATE_DISABLED, !isEnabled);\n this.element.attr(ARIA_DISABLED, !isEnabled);\n this.options.enable = isEnabled;\n },\n twin: function () {\n var uid = this.element.attr(KENDO_UID_ATTR);\n if (this.overflow && this.options.splitContainerId) {\n return $('#' + this.options.splitContainerId).find('[' + KENDO_UID_ATTR + '=\\'' + uid + '\\']').data(this.options.type);\n } else if (this.overflow) {\n return this.toolbar.element.find('[' + KENDO_UID_ATTR + '=\\'' + uid + '\\']').data(this.options.type);\n } else if (this.toolbar.options.resizable) {\n return this.toolbar.popup.element.find('[' + KENDO_UID_ATTR + '=\\'' + uid + '\\']').data(this.options.type);\n }\n }\n });\n kendo.toolbar.Item = Item;\n var Button = Item.extend({\n init: function (options, toolbar) {\n var element = options.useButtonTag ? $('<button tabindex=\"0\"></button>') : $('<a role=\"button\" href tabindex=\"0\"></a>');\n this.element = element;\n this.options = options;\n this.toolbar = toolbar;\n this.attributes();\n if (options.primary) {\n element.addClass(PRIMARY);\n }\n if (options.togglable) {\n element.addClass(TOGGLE_BUTTON);\n this.toggle(options.selected);\n }\n if (options.url !== undefined && !options.useButtonTag) {\n element.attr('href', options.url);\n if (options.mobile) {\n element.attr(kendo.attr('role'), 'button');\n }\n }\n if (options.group) {\n element.attr(kendo.attr('group'), options.group);\n this.group = this.toolbar.addToGroup(this, options.group);\n }\n if (!options.togglable && options.click && isFunction(options.click)) {\n this.clickHandler = options.click;\n }\n if (options.togglable && options.toggle && isFunction(options.toggle)) {\n this.toggleHandler = options.toggle;\n }\n },\n toggle: function (state, propagate) {\n state = !!state;\n if (this.group && state) {\n this.group.select(this);\n } else if (!this.group) {\n this.select(state);\n }\n if (propagate && this.twin()) {\n this.twin().toggle(state);\n }\n },\n getParentGroup: function () {\n if (this.options.isChild) {\n return this.element.closest('.' + BUTTON_GROUP).data('buttonGroup');\n }\n },\n _addGraphics: function () {\n var element = this.element, icon = this.options.icon, spriteCssClass = this.options.spriteCssClass, imageUrl = this.options.imageUrl, isEmpty, span, img;\n if (spriteCssClass || imageUrl || icon) {\n isEmpty = true;\n element.contents().filter(function () {\n return !$(this).hasClass('k-sprite') && !$(this).hasClass(ICON) && !$(this).hasClass('k-image');\n }).each(function (idx, el) {\n if (el.nodeType == 1 || el.nodeType == 3 && kendo.trim(el.nodeValue).length > 0) {\n isEmpty = false;\n }\n });\n if (isEmpty) {\n element.addClass(BUTTON_ICON);\n } else {\n element.addClass(BUTTON_ICON_TEXT);\n }\n }\n if (icon) {\n span = element.children('span.' + ICON).first();\n if (!span[0]) {\n span = $('<span class=\"' + ICON + '\"></span>').prependTo(element);\n }\n span.addClass(ICON_PREFIX + icon);\n } else if (spriteCssClass) {\n span = element.children('span.k-sprite').first();\n if (!span[0]) {\n span = $('<span class=\"k-sprite ' + ICON + '\"></span>').prependTo(element);\n }\n span.addClass(spriteCssClass);\n } else if (imageUrl) {\n img = element.children('img.k-image').first();\n if (!img[0]) {\n img = $('<img alt=\"icon\" class=\"k-image\" />').prependTo(element);\n }\n img.attr('src', imageUrl);\n }\n }\n });\n kendo.toolbar.Button = Button;\n var ToolBarButton = Button.extend({\n init: function (options, toolbar) {\n Button.fn.init.call(this, options, toolbar);\n var element = this.element;\n element.addClass(BUTTON);\n this.addIdAttr();\n if (options.align) {\n element.addClass('k-align-' + options.align);\n }\n if (options.showText != 'overflow' && options.text) {\n if (options.mobile) {\n element.html('<span class=\"km-text\">' + options.text + '</span>');\n } else {\n element.html(options.text);\n }\n }\n options.hasIcon = options.showIcon != 'overflow' && (options.icon || options.spriteCssClass || options.imageUrl);\n if (options.hasIcon) {\n this._addGraphics();\n }\n this.addUidAttr();\n this.addOverflowAttr();\n this.enable(options.enable);\n if (options.hidden) {\n this.hide();\n }\n this.element.data({\n type: 'button',\n button: this\n });\n },\n select: function (selected) {\n if (selected === undefined) {\n selected = false;\n }\n if (this.options.togglable) {\n this.element.attr(ARIA_PRESSED, selected);\n }\n this.element.toggleClass(STATE_ACTIVE, selected);\n this.options.selected = selected;\n }\n });\n kendo.toolbar.ToolBarButton = ToolBarButton;\n var OverflowButton = Button.extend({\n init: function (options, toolbar) {\n this.overflow = true;\n Button.fn.init.call(this, $.extend({}, options), toolbar);\n var element = this.element;\n if (options.showText != 'toolbar' && options.text) {\n if (options.mobile) {\n element.html('<span class=\"km-text\">' + options.text + '</span>');\n } else {\n element.html('<span class=\"k-text\">' + options.text + '</span>');\n }\n }\n options.hasIcon = options.showIcon != 'toolbar' && (options.icon || options.spriteCssClass || options.imageUrl);\n if (options.hasIcon) {\n this._addGraphics();\n }\n if (!options.isChild) {\n this._wrap();\n }\n this.addOverflowIdAttr();\n this.attributes();\n this.addUidAttr();\n this.addOverflowAttr();\n this.enable(options.enable);\n element.addClass(OVERFLOW_BUTTON + ' ' + BUTTON);\n if (options.hidden) {\n this.hide();\n }\n if (options.togglable) {\n this.toggle(options.selected);\n }\n this.element.data({\n type: 'button',\n button: this\n });\n },\n _wrap: function () {\n this.element = this.element.wrap('<li></li>').parent();\n },\n overflowHidden: function () {\n this.element.addClass(OVERFLOW_HIDDEN);\n },\n select: function (selected) {\n if (selected === undefined) {\n selected = false;\n }\n if (this.options.isChild) {\n this.element.toggleClass(STATE_ACTIVE, selected);\n } else {\n this.element.find('.k-button').toggleClass(STATE_ACTIVE, selected);\n }\n this.options.selected = selected;\n }\n });\n kendo.toolbar.OverflowButton = OverflowButton;\n kendo.toolbar.registerComponent('button', ToolBarButton, OverflowButton);\n var ButtonGroup = Item.extend({\n createButtons: function (buttonConstructor) {\n var options = this.options;\n var items = options.buttons || [];\n var item;\n for (var i = 0; i < items.length; i++) {\n if (!items[i].uid) {\n items[i].uid = kendo.guid();\n }\n item = new buttonConstructor($.extend({\n mobile: options.mobile,\n isChild: true,\n type: 'button'\n }, items[i]), this.toolbar);\n item.element.appendTo(this.element);\n }\n },\n refresh: function () {\n this.element.children().filter(':not(\\'.' + STATE_HIDDEN + '\\'):first').addClass(GROUP_START);\n this.element.children().filter(':not(\\'.' + STATE_HIDDEN + '\\'):last').addClass(GROUP_END);\n }\n });\n kendo.toolbar.ButtonGroup = ButtonGroup;\n var ToolBarButtonGroup = ButtonGroup.extend({\n init: function (options, toolbar) {\n var element = this.element = $('<div></div>');\n this.options = options;\n this.toolbar = toolbar;\n this.addIdAttr();\n if (options.align) {\n element.addClass('k-align-' + options.align);\n }\n this.createButtons(ToolBarButton);\n this.attributes();\n this.addUidAttr();\n this.addOverflowAttr();\n this.refresh();\n element.addClass(BUTTON_GROUP);\n this.element.data({\n type: 'buttonGroup',\n buttonGroup: this\n });\n }\n });\n kendo.toolbar.ToolBarButtonGroup = ToolBarButtonGroup;\n var OverflowButtonGroup = ButtonGroup.extend({\n init: function (options, toolbar) {\n var element = this.element = $('<li></li>');\n this.options = options;\n this.toolbar = toolbar;\n this.overflow = true;\n this.addOverflowIdAttr();\n this.createButtons(OverflowButton);\n this.attributes();\n this.addUidAttr();\n this.addOverflowAttr();\n this.refresh();\n element.addClass((options.mobile ? '' : BUTTON_GROUP) + ' k-overflow-group');\n this.element.data({\n type: 'buttonGroup',\n buttonGroup: this\n });\n },\n overflowHidden: function () {\n this.element.addClass(OVERFLOW_HIDDEN);\n }\n });\n kendo.toolbar.OverflowButtonGroup = OverflowButtonGroup;\n kendo.toolbar.registerComponent('buttonGroup', ToolBarButtonGroup, OverflowButtonGroup);\n var ToolBarSplitButton = Item.extend({\n init: function (options, toolbar) {\n var element = this.element = $('<div class=\"' + SPLIT_BUTTON + '\" tabindex=\"0\"></div>');\n this.options = options;\n this.toolbar = toolbar;\n this.mainButton = new ToolBarButton($.extend({}, options, { hidden: false }), toolbar);\n this.arrowButton = $('<a class=\"' + BUTTON + ' ' + SPLIT_BUTTON_ARROW + '\"><span class=\"' + (options.mobile ? 'km-icon km-arrowdown' : 'k-icon k-i-arrow-60-down') + '\"></span></a>');\n this.popupElement = $('<ul class=\"' + LIST_CONTAINER + '\"></ul>');\n this.mainButton.element.removeAttr('href tabindex').appendTo(element);\n this.arrowButton.appendTo(element);\n this.popupElement.appendTo(element);\n if (options.align) {\n element.addClass('k-align-' + options.align);\n }\n if (!options.id) {\n options.id = options.uid;\n }\n element.attr('id', options.id + '_wrapper');\n this.addOverflowAttr();\n this.addUidAttr();\n this.createMenuButtons();\n this.createPopup();\n this._navigatable();\n this.mainButton.main = true;\n this.enable(options.enable);\n if (options.hidden) {\n this.hide();\n }\n element.data({\n type: 'splitButton',\n splitButton: this,\n kendoPopup: this.popup\n });\n },\n _navigatable: function () {\n var that = this;\n that.popupElement.on('keydown' + ns, '.' + BUTTON, function (e) {\n var li = $(e.target).parent();\n e.preventDefault();\n if (e.keyCode === keys.ESC || e.keyCode === keys.TAB || e.altKey && e.keyCode === keys.UP) {\n that.toggle();\n that.focus();\n } else if (e.keyCode === keys.DOWN) {\n findFocusableSibling(li, 'next').focus();\n } else if (e.keyCode === keys.UP) {\n findFocusableSibling(li, 'prev').focus();\n } else if (e.keyCode === keys.SPACEBAR || e.keyCode === keys.ENTER) {\n that.toolbar.userEvents.trigger('tap', { target: $(e.target) });\n } else if (e.keyCode === keys.HOME) {\n li.parent().find(':kendoFocusable').first().focus();\n } else if (e.keyCode === keys.END) {\n li.parent().find(':kendoFocusable').last().focus();\n }\n });\n },\n createMenuButtons: function () {\n var options = this.options;\n var items = options.menuButtons;\n var item;\n for (var i = 0; i < items.length; i++) {\n item = new ToolBarButton($.extend({\n mobile: options.mobile,\n type: 'button',\n click: options.click\n }, items[i]), this.toolbar);\n item.element.wrap('<li></li>').parent().appendTo(this.popupElement);\n }\n },\n createPopup: function () {\n var that = this;\n var options = this.options;\n var element = this.element;\n this.popupElement.attr('id', options.id + OPTION_LIST_SUFFIX).attr(KENDO_UID_ATTR, options.rootUid);\n if (options.mobile) {\n this.popupElement = actionSheetWrap(this.popupElement);\n }\n this.popup = this.popupElement.kendoPopup({\n appendTo: options.mobile ? $(options.mobile).children('.km-pane') : null,\n anchor: element,\n isRtl: this.toolbar._isRtl,\n copyAnchorStyles: false,\n animation: options.animation,\n open: function (e) {\n var isDefaultPrevented = that.toolbar.trigger(OPEN, { target: element });\n if (isDefaultPrevented) {\n e.preventDefault();\n return;\n }\n that.adjustPopupWidth(e.sender);\n },\n activate: function () {\n this.element.find(':kendoFocusable').first().focus();\n },\n close: function (e) {\n var isDefaultPrevented = that.toolbar.trigger(CLOSE, { target: element });\n if (isDefaultPrevented) {\n e.preventDefault();\n }\n element.focus();\n }\n }).data('kendoPopup');\n this.popup.element.on(CLICK + ns, 'a.k-button', preventClick);\n },\n adjustPopupWidth: function (popup) {\n var anchor = popup.options.anchor, computedWidth = outerWidth(anchor), width;\n kendo.wrap(popup.element).addClass('k-split-wrapper');\n if (popup.element.css('box-sizing') !== 'border-box') {\n width = computedWidth - (outerWidth(popup.element) - popup.element.width());\n } else {\n width = computedWidth;\n }\n popup.element.css({\n fontFamily: anchor.css('font-family'),\n 'min-width': width\n });\n },\n remove: function () {\n this.popup.element.off(CLICK + ns, 'a.k-button');\n this.popup.destroy();\n this.element.remove();\n },\n toggle: function () {\n if (this.options.enable || this.popup.visible()) {\n this.popup.toggle();\n }\n },\n enable: function (isEnabled) {\n if (isEnabled === undefined) {\n isEnabled = true;\n }\n this.mainButton.enable(isEnabled);\n this.element.toggleClass(STATE_DISABLED, !isEnabled);\n this.element.attr(ARIA_DISABLED, !isEnabled);\n this.options.enable = isEnabled;\n },\n focus: function () {\n this.element.focus();\n },\n hide: function () {\n if (this.popup) {\n this.popup.close();\n }\n this.element.addClass(STATE_HIDDEN);\n this.element.addClass(HIDDEN);\n this.options.hidden = true;\n },\n show: function () {\n this.element.removeClass(STATE_HIDDEN);\n this.element.removeClass(HIDDEN);\n this.options.hidden = false;\n }\n });\n kendo.toolbar.ToolBarSplitButton = ToolBarSplitButton;\n var OverflowSplitButton = Item.extend({\n init: function (options, toolbar) {\n var element = this.element = $('<li class=\"' + SPLIT_BUTTON + '\"></li>'), items = options.menuButtons, item, splitContainerId;\n this.options = options;\n this.toolbar = toolbar;\n this.overflow = true;\n splitContainerId = (options.id || options.uid) + OPTION_LIST_SUFFIX;\n this.mainButton = new OverflowButton($.extend({ isChild: true }, options));\n this.mainButton.element.appendTo(element);\n for (var i = 0; i < items.length; i++) {\n item = new OverflowButton($.extend({\n mobile: options.mobile,\n type: 'button',\n splitContainerId: splitContainerId,\n isChild: true\n }, items[i]), this.toolbar);\n item.element.appendTo(element);\n }\n this.addUidAttr();\n this.addOverflowAttr();\n this.mainButton.main = true;\n element.data({\n type: 'splitButton',\n splitButton: this\n });\n },\n overflowHidden: function () {\n this.element.addClass(OVERFLOW_HIDDEN);\n }\n });\n kendo.toolbar.OverflowSplitButton = OverflowSplitButton;\n kendo.toolbar.registerComponent('splitButton', ToolBarSplitButton, OverflowSplitButton);\n var ToolBarSeparator = Item.extend({\n init: function (options, toolbar) {\n var element = this.element = $('<div> </div>');\n this.element = element;\n this.options = options;\n this.toolbar = toolbar;\n this.attributes();\n this.addIdAttr();\n this.addUidAttr();\n this.addOverflowAttr();\n element.addClass(SEPARATOR);\n element.data({\n type: 'separator',\n separator: this\n });\n }\n });\n var OverflowSeparator = Item.extend({\n init: function (options, toolbar) {\n var element = this.element = $('<li> </li>');\n this.element = element;\n this.options = options;\n this.toolbar = toolbar;\n this.overflow = true;\n this.attributes();\n this.addUidAttr();\n this.addOverflowIdAttr();\n element.addClass(SEPARATOR);\n element.data({\n type: 'separator',\n separator: this\n });\n },\n overflowHidden: function () {\n this.element.addClass(OVERFLOW_HIDDEN);\n }\n });\n kendo.toolbar.registerComponent('separator', ToolBarSeparator, OverflowSeparator);\n var ToolBarSpacer = Item.extend({\n init: function (options, toolbar) {\n var element = this.element = $('<div> </div>');\n this.element = element;\n this.options = options;\n this.toolbar = toolbar;\n element.addClass(SPACER_CLASS);\n element.data({ type: SPACER });\n }\n });\n kendo.toolbar.registerComponent(SPACER, ToolBarSpacer);\n var TemplateItem = Item.extend({\n init: function (template, options, toolbar) {\n var element = isFunction(template) ? template(options) : template;\n if (!(element instanceof jQuery)) {\n element = $('<div></div>').html(element);\n } else {\n element = element.wrap('<div></div>').parent();\n }\n this.element = element;\n this.options = options;\n this.options.type = 'template';\n this.toolbar = toolbar;\n this.attributes();\n this.addUidAttr();\n this.addIdAttr();\n this.addOverflowAttr();\n element.data({\n type: 'template',\n template: this\n });\n }\n });\n kendo.toolbar.TemplateItem = TemplateItem;\n var OverflowTemplateItem = Item.extend({\n init: function (template, options, toolbar) {\n var element = isFunction(template) ? $(template(options)) : $(template);\n if (!(element instanceof jQuery)) {\n element = $('<li></li>').html(element);\n } else {\n element = element.wrap('<li></li>').parent();\n }\n this.element = element;\n this.options = options;\n this.options.type = 'template';\n this.toolbar = toolbar;\n this.overflow = true;\n this.attributes();\n this.addUidAttr();\n this.addOverflowIdAttr();\n this.addOverflowAttr();\n element.data({\n type: 'template',\n template: this\n });\n },\n overflowHidden: function () {\n this.element.addClass(OVERFLOW_HIDDEN);\n }\n });\n kendo.toolbar.OverflowTemplateItem = OverflowTemplateItem;\n function toggleActive(e) {\n if (!e.target.is('.k-toggle-button')) {\n e.target.toggleClass(STATE_ACTIVE, e.type == 'press');\n }\n }\n function actionSheetWrap(element) {\n element = $(element);\n return element.hasClass('km-actionsheet') ? element.closest('.km-popup-wrapper') : element.addClass('km-widget km-actionsheet').wrap('<div class=\"km-actionsheet-wrapper km-actionsheet-tablet km-widget km-popup\"></div>').parent().wrap('<div class=\"km-popup-wrapper k-popup\"></div>').parent();\n }\n function preventClick(e) {\n if ($(e.target).closest('a.k-button').length) {\n e.preventDefault();\n }\n }\n function findFocusableSibling(element, dir) {\n var getSibling = dir === 'next' ? $.fn.next : $.fn.prev;\n var getter = dir === 'next' ? $.fn.first : $.fn.last;\n var candidate = getSibling.call(element);\n if (!candidate.length && element.is('.' + OVERFLOW_ANCHOR)) {\n return element;\n }\n if (candidate.is(':kendoFocusable') || !candidate.length) {\n return candidate;\n }\n if (candidate.find(':kendoFocusable').length) {\n return getter.call(candidate.find(':kendoFocusable'));\n }\n return findFocusableSibling(candidate, dir);\n }\n var Group = Class.extend({\n init: function (name) {\n this.name = name;\n this.buttons = [];\n },\n add: function (button) {\n this.buttons[this.buttons.length] = button;\n },\n remove: function (button) {\n var index = $.inArray(button, this.buttons);\n this.buttons.splice(index, 1);\n },\n select: function (button) {\n var tmp;\n for (var i = 0; i < this.buttons.length; i++) {\n tmp = this.buttons[i];\n tmp.select(false);\n }\n button.select(true);\n if (button.twin()) {\n button.twin().select(true);\n }\n }\n });\n var ToolBar = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n options = that.options;\n element = that.wrapper = that.element;\n element.addClass(TOOLBAR + ' k-widget');\n this.uid = kendo.guid();\n this._isRtl = kendo.support.isRtl(element);\n this._groups = {};\n element.attr(KENDO_UID_ATTR, this.uid);\n that.isMobile = typeof options.mobile === 'boolean' ? options.mobile : that.element.closest('.km-root')[0];\n that.animation = that.isMobile ? { open: { effects: 'fade' } } : {};\n if (that.isMobile) {\n element.addClass('km-widget');\n ICON = 'km-icon';\n ICON_PREFIX = 'km-';\n BUTTON = 'km-button';\n BUTTON_GROUP = 'km-buttongroup';\n STATE_ACTIVE = 'km-state-active';\n STATE_DISABLED = 'km-state-disabled';\n }\n if (options.resizable) {\n that._renderOverflow();\n element.addClass(RESIZABLE_TOOLBAR);\n that.overflowUserEvents = new kendo.UserEvents(that.element, {\n threshold: 5,\n allowSelection: true,\n filter: '.' + OVERFLOW_ANCHOR,\n tap: proxy(that._toggleOverflow, that)\n });\n that._resizeHandler = kendo.onResize(function () {\n that.resize();\n });\n } else {\n that.popup = { element: $([]) };\n }\n if (options.items && options.items.length) {\n for (var i = 0; i < options.items.length; i++) {\n that.add(options.items[i]);\n }\n if (options.resizable) {\n that._shrink(that.element.innerWidth());\n }\n }\n that.userEvents = new kendo.UserEvents(document, {\n threshold: 5,\n allowSelection: true,\n filter: '[' + KENDO_UID_ATTR + '=' + this.uid + '] a.' + BUTTON + ', ' + '[' + KENDO_UID_ATTR + '=' + this.uid + '] .' + OVERFLOW_BUTTON,\n tap: proxy(that._buttonClick, that),\n press: toggleActive,\n release: toggleActive\n });\n that.element.on(CLICK + ns, 'a.k-button', preventClick);\n that._navigatable();\n if (options.resizable) {\n that.popup.element.on(CLICK + ns, +'a.k-button', preventClick);\n }\n if (options.resizable) {\n this._toggleOverflowAnchor();\n }\n kendo.notify(that);\n },\n events: [\n CLICK,\n TOGGLE,\n OPEN,\n CLOSE,\n OVERFLOW_OPEN,\n OVERFLOW_CLOSE\n ],\n options: {\n name: 'ToolBar',\n items: [],\n resizable: true,\n mobile: null\n },\n addToGroup: function (button, groupName) {\n var group;\n if (!this._groups[groupName]) {\n group = this._groups[groupName] = new Group();\n } else {\n group = this._groups[groupName];\n }\n group.add(button);\n return group;\n },\n destroy: function () {\n var that = this;\n that.element.find('.' + SPLIT_BUTTON).each(function (idx, element) {\n $(element).data('kendoPopup').destroy();\n });\n that.element.off(ns, 'a.k-button');\n that.userEvents.destroy();\n if (that.options.resizable) {\n kendo.unbindResize(that._resizeHandler);\n that.overflowUserEvents.destroy();\n that.popup.element.off(ns, 'a.k-button');\n that.popup.destroy();\n }\n Widget.fn.destroy.call(that);\n },\n add: function (options) {\n var component = components[options.type], template = options.template, tool, that = this, itemClasses = that.isMobile ? '' : 'k-item k-state-default', overflowTemplate = options.overflowTemplate, overflowTool;\n $.extend(options, {\n uid: kendo.guid(),\n animation: that.animation,\n mobile: that.isMobile,\n rootUid: that.uid\n });\n if (options.menuButtons) {\n for (var i = 0; i < options.menuButtons.length; i++) {\n $.extend(options.menuButtons[i], { uid: kendo.guid() });\n }\n }\n if (template && !overflowTemplate || options.type === SPACER) {\n options.overflow = OVERFLOW_NEVER;\n } else if (!options.overflow) {\n options.overflow = OVERFLOW_AUTO;\n }\n if (options.overflow !== OVERFLOW_NEVER && that.options.resizable) {\n if (overflowTemplate) {\n overflowTool = new OverflowTemplateItem(overflowTemplate, options, that);\n } else if (component) {\n overflowTool = new component.overflow(options, that);\n overflowTool.element.addClass(itemClasses);\n }\n if (overflowTool) {\n if (options.overflow === OVERFLOW_AUTO) {\n overflowTool.overflowHidden();\n }\n overflowTool.element.appendTo(that.popup.container);\n that.angular('compile', function () {\n return { elements: overflowTool.element.get() };\n });\n }\n }\n if (options.overflow !== OVERFLOW_ALWAYS) {\n if (template) {\n tool = new TemplateItem(template, options, that);\n } else if (component) {\n tool = new component.toolbar(options, that);\n }\n if (tool) {\n tool.element.appendTo(that.element);\n that.angular('compile', function () {\n return { elements: tool.element.get() };\n });\n }\n }\n },\n _getItem: function (candidate) {\n var element, toolbarItem, overflowItem, isResizable = this.options.resizable, type;\n element = this.element.find(candidate);\n if (!element.length) {\n element = $('.k-split-container[data-uid=' + this.uid + ']').find(candidate);\n }\n type = element.length ? element.data('type') : '';\n toolbarItem = element.data(type);\n if (toolbarItem) {\n if (toolbarItem.main) {\n element = element.parent('.' + SPLIT_BUTTON);\n type = 'splitButton';\n toolbarItem = element.data(type);\n }\n if (isResizable) {\n overflowItem = toolbarItem.twin();\n }\n } else if (isResizable) {\n element = this.popup.element.find(candidate);\n type = element.length ? element.data('type') : '';\n overflowItem = element.data(type);\n if (overflowItem && overflowItem.main) {\n element = element.parent('.' + SPLIT_BUTTON);\n type = 'splitButton';\n overflowItem = element.data(type);\n }\n }\n return {\n type: type,\n toolbar: toolbarItem,\n overflow: overflowItem\n };\n },\n remove: function (candidate) {\n var item = this._getItem(candidate);\n if (item.toolbar) {\n item.toolbar.remove();\n }\n if (item.overflow) {\n item.overflow.remove();\n }\n this.resize(true);\n },\n hide: function (candidate) {\n var item = this._getItem(candidate);\n var buttonGroupInstance;\n if (item.toolbar) {\n if (item.toolbar.options.type === 'button' && item.toolbar.options.isChild) {\n buttonGroupInstance = item.toolbar.getParentGroup();\n item.toolbar.hide();\n if (buttonGroupInstance) {\n buttonGroupInstance.refresh();\n }\n } else if (!item.toolbar.options.hidden) {\n item.toolbar.hide();\n }\n }\n if (item.overflow) {\n if (item.overflow.options.type === 'button' && item.overflow.options.isChild) {\n buttonGroupInstance = item.overflow.getParentGroup();\n item.overflow.hide();\n if (buttonGroupInstance) {\n buttonGroupInstance.refresh();\n }\n } else if (!item.overflow.options.hidden) {\n item.overflow.hide();\n }\n }\n this.resize(true);\n },\n show: function (candidate) {\n var item = this._getItem(candidate);\n var buttonGroupInstance;\n if (item.toolbar) {\n if (item.toolbar.options.type === 'button' && item.toolbar.options.isChild) {\n buttonGroupInstance = item.toolbar.getParentGroup();\n item.toolbar.show();\n if (buttonGroupInstance) {\n buttonGroupInstance.refresh();\n }\n } else if (item.toolbar.options.hidden) {\n item.toolbar.show();\n }\n }\n if (item.overflow) {\n if (item.overflow.options.type === 'button' && item.overflow.options.isChild) {\n buttonGroupInstance = item.overflow.getParentGroup();\n item.toolbar.show();\n if (buttonGroupInstance) {\n buttonGroupInstance.refresh();\n }\n } else if (item.overflow.options.hidden) {\n item.overflow.show();\n }\n }\n this.resize(true);\n },\n enable: function (element, enable) {\n var item = this._getItem(element);\n if (typeof enable == 'undefined') {\n enable = true;\n }\n if (item.toolbar) {\n item.toolbar.enable(enable);\n }\n if (item.overflow) {\n item.overflow.enable(enable);\n }\n },\n getSelectedFromGroup: function (groupName) {\n return this.element.find('.' + TOGGLE_BUTTON + '[data-group=\\'' + groupName + '\\']').filter('.' + STATE_ACTIVE);\n },\n toggle: function (button, checked) {\n var element = $(button), item = element.data('button');\n if (item.options.togglable) {\n if (checked === undefined) {\n checked = true;\n }\n item.toggle(checked, true);\n }\n },\n _renderOverflow: function () {\n var that = this, overflowContainer = components.overflowContainer, isRtl = that._isRtl, horizontalDirection = isRtl ? 'left' : 'right';\n that.overflowAnchor = $(components.overflowAnchor).addClass(BUTTON);\n that.element.append(that.overflowAnchor);\n if (that.isMobile) {\n that.overflowAnchor.append('<span class=\"km-icon km-more\"></span>');\n overflowContainer = actionSheetWrap(overflowContainer);\n } else {\n that.overflowAnchor.append('<span class=\"k-icon k-i-more-vertical\"></span>');\n }\n that.popup = new kendo.ui.Popup(overflowContainer, {\n origin: 'bottom ' + horizontalDirection,\n position: 'top ' + horizontalDirection,\n anchor: that.overflowAnchor,\n isRtl: isRtl,\n animation: that.animation,\n appendTo: that.isMobile ? $(that.isMobile).children('.km-pane') : null,\n copyAnchorStyles: false,\n open: function (e) {\n var wrapper = kendo.wrap(that.popup.element).addClass('k-overflow-wrapper');\n if (!that.isMobile) {\n wrapper.css('margin-left', (isRtl ? -1 : 1) * ((outerWidth(wrapper) - wrapper.width()) / 2 + 1));\n } else {\n that.popup.container.css('max-height', parseFloat($('.km-content:visible').innerHeight()) - 15 + 'px');\n }\n if (that.trigger(OVERFLOW_OPEN)) {\n e.preventDefault();\n }\n },\n activate: function () {\n this.element.find(':kendoFocusable').first().focus();\n },\n close: function (e) {\n if (that.trigger(OVERFLOW_CLOSE)) {\n e.preventDefault();\n }\n this.element.focus();\n }\n });\n that.popup.element.on('keydown' + ns, '.' + BUTTON, function (e) {\n var target = $(e.target), li = target.parent(), isComplexTool = li.is('.' + BUTTON_GROUP) || li.is('.' + SPLIT_BUTTON), element;\n e.preventDefault();\n if (e.keyCode === keys.ESC || e.keyCode === keys.TAB || e.altKey && e.keyCode === keys.UP) {\n that._toggleOverflow();\n that.overflowAnchor.focus();\n } else if (e.keyCode === keys.DOWN) {\n element = !isComplexTool || isComplexTool && target.is(':last-child') ? li : target;\n findFocusableSibling(element, 'next').focus();\n } else if (e.keyCode === keys.UP) {\n element = !isComplexTool || isComplexTool && target.is(':first-child') ? li : target;\n findFocusableSibling(element, 'prev').focus();\n } else if (e.keyCode === keys.SPACEBAR || e.keyCode === keys.ENTER) {\n that.userEvents.trigger('tap', { target: $(e.target) });\n that.overflowAnchor.focus();\n } else if (e.keyCode === keys.HOME) {\n li.parent().find(':kendoFocusable').first().focus();\n } else if (e.keyCode === keys.END) {\n li.parent().find(':kendoFocusable').last().focus();\n }\n });\n if (that.isMobile) {\n that.popup.container = that.popup.element.find('.' + OVERFLOW_CONTAINER);\n } else {\n that.popup.container = that.popup.element;\n }\n that.popup.container.attr(KENDO_UID_ATTR, this.uid);\n },\n _toggleOverflowAnchor: function () {\n var hasVisibleChildren = false;\n var paddingEnd = this._isRtl ? 'padding-left' : 'padding-right';\n if (this.options.mobile) {\n hasVisibleChildren = this.popup.element.find('.' + OVERFLOW_CONTAINER).children(':not(.' + OVERFLOW_HIDDEN + ', .' + POPUP + ')').length > 0;\n } else {\n hasVisibleChildren = this.popup.element.children(':not(.' + OVERFLOW_HIDDEN + ', .' + POPUP + ')').length > 0;\n }\n if (hasVisibleChildren) {\n this.overflowAnchor.css({\n visibility: 'visible',\n width: ''\n });\n this.wrapper.css(paddingEnd, this.overflowAnchor.outerWidth(true));\n } else {\n this.overflowAnchor.css({\n visibility: 'hidden',\n width: '1px'\n });\n this.wrapper.css(paddingEnd, '');\n }\n },\n _buttonClick: function (e) {\n var that = this, popup, target, item, splitContainer, isSplitButtonArrow = e.target.closest('.' + SPLIT_BUTTON_ARROW).length, handler, eventData, urlTarget;\n e.preventDefault();\n if (isSplitButtonArrow) {\n that._toggle(e);\n return;\n }\n target = $(e.target).closest('.' + BUTTON, that.element);\n if (target.hasClass(OVERFLOW_ANCHOR)) {\n return;\n }\n item = target.data('button');\n if (!item && that.popup) {\n target = $(e.target).closest('.' + OVERFLOW_BUTTON, that.popup.container);\n item = target.parent('li').data('button');\n }\n if (!item || !item.options.enable) {\n return;\n }\n if (item.options.togglable) {\n handler = isFunction(item.toggleHandler) ? item.toggleHandler : null;\n item.toggle(!item.options.selected, true);\n eventData = {\n target: target,\n group: item.options.group,\n checked: item.options.selected,\n id: item.options.id,\n item: item\n };\n if (handler) {\n handler.call(that, eventData);\n }\n that.trigger(TOGGLE, eventData);\n } else {\n handler = isFunction(item.clickHandler) ? item.clickHandler : null;\n eventData = {\n sender: that,\n target: target,\n id: item.options.id,\n item: item\n };\n if (handler) {\n handler.call(that, eventData);\n }\n that.trigger(CLICK, eventData);\n }\n if (item.options.url) {\n if (item.options.attributes && item.options.attributes.target) {\n urlTarget = item.options.attributes.target;\n }\n window.open(item.options.url, urlTarget || '_self');\n }\n if (target.hasClass(OVERFLOW_BUTTON)) {\n that.popup.close();\n }\n splitContainer = target.closest('.k-split-container');\n if (splitContainer[0]) {\n popup = splitContainer.data('kendoPopup');\n (popup ? popup : splitContainer.parents('.km-popup-wrapper').data('kendoPopup')).close();\n }\n },\n _navigatable: function () {\n var that = this;\n that.element.attr('tabindex', 0).on('focusin' + ns, function (ev) {\n var target = $(ev.target);\n var element = $(this).find(':kendoFocusable:first');\n if (!target.is('.' + TOOLBAR) || element.length === 0) {\n return;\n }\n if (element.is('.' + OVERFLOW_ANCHOR)) {\n element = findFocusableSibling(element, 'next');\n }\n if (element.length) {\n element[0].focus();\n }\n }).on('keydown' + ns, proxy(that._keydown, that));\n },\n _keydown: function (e) {\n var target = $(e.target), keyCode = e.keyCode, items = this.element.children(':not(.k-separator):visible'), direction = this._isRtl ? -1 : 1;\n if (keyCode === keys.TAB) {\n var element = target.parentsUntil(this.element).last(), lastHasFocus = false, firstHasFocus = false, isOnlyOverflowAnchor = false;\n if (!items.not('.' + OVERFLOW_ANCHOR).length) {\n isOnlyOverflowAnchor = true;\n }\n if (!element.length) {\n element = target;\n }\n if (element.is('.' + OVERFLOW_ANCHOR) && !isOnlyOverflowAnchor) {\n var lastItemNotOverflowAnchor = items.last();\n if (e.shiftKey) {\n e.preventDefault();\n }\n if (lastItemNotOverflowAnchor.is(':kendoFocusable')) {\n items.last().focus();\n } else {\n items.last().find(':kendoFocusable').last().focus();\n }\n }\n if (!e.shiftKey && items.index(element) === items.length - 1) {\n if (element.is('.' + BUTTON_GROUP)) {\n lastHasFocus = target.is(':last-child');\n } else {\n lastHasFocus = true;\n }\n }\n var isFirstTool = items.index(element) === items.not('.k-overflow-anchor').first().index();\n if (e.shiftKey && isFirstTool) {\n if (element.is('.' + BUTTON_GROUP)) {\n firstHasFocus = target.is(':first-child');\n } else {\n firstHasFocus = true;\n }\n }\n if (lastHasFocus && this.overflowAnchor && this.overflowAnchor.css('visibility') !== 'hidden' && !isOnlyOverflowAnchor) {\n e.preventDefault();\n this.overflowAnchor.focus();\n }\n if (firstHasFocus || isOnlyOverflowAnchor && e.shiftKey) {\n e.preventDefault();\n var prevFocusable = this._getPrevFocusable(this.wrapper);\n if (prevFocusable) {\n prevFocusable.focus();\n }\n }\n this._preventNextFocus = false;\n }\n if (e.altKey && keyCode === keys.DOWN) {\n var splitButton = $(document.activeElement).data('splitButton');\n var isOverflowAnchor = $(document.activeElement).is('.' + OVERFLOW_ANCHOR);\n if (splitButton) {\n splitButton.toggle();\n } else if (isOverflowAnchor) {\n this._toggleOverflow();\n }\n return;\n }\n if ((keyCode === keys.SPACEBAR || keyCode === keys.ENTER) && !target.is('input, checkbox')) {\n if (keyCode === keys.SPACEBAR) {\n e.preventDefault();\n }\n if (target.is('.' + SPLIT_BUTTON)) {\n target = target.children().first();\n this.userEvents.trigger('tap', { target: target });\n } else if (keyCode === keys.SPACEBAR) {\n this.userEvents.trigger('tap', { target: target });\n }\n return;\n }\n if (keyCode === keys.HOME) {\n if (target.is('.k-dropdown') || target.is('input')) {\n return;\n }\n if (this.overflowAnchor) {\n items.eq(1).focus();\n } else {\n items.first().focus();\n }\n e.preventDefault();\n } else if (keyCode === keys.END) {\n if (target.is('.k-dropdown') || target.is('input')) {\n return;\n }\n if (this.overflowAnchor && $(this.overflowAnchor).css('visibility') != 'hidden') {\n this.overflowAnchor.focus();\n } else {\n items.last().focus();\n }\n e.preventDefault();\n } else if (keyCode === keys.RIGHT && !this._preventNextFocus && !target.is('input, select, .k-dropdown, .k-colorpicker') && this._getNextElement(e.target, 1 * direction)) {\n this._getNextElement(e.target, 1 * direction).focus();\n e.preventDefault();\n } else if (keyCode === keys.LEFT && !this._preventNextFocus && !target.is('input, select, .k-dropdown, .k-colorpicker') && this._getNextElement(e.target, -1 * direction)) {\n this._getNextElement(e.target, -1 * direction).focus();\n e.preventDefault();\n }\n },\n _getNextElement: function (item, direction) {\n var items = this.element.children(':not(.k-separator):visible');\n var itemIndex = items.index(item) === -1 ? items.index(item.parentElement) : items.index(item);\n var startIndex = this.overflowAnchor ? 1 : 0;\n var directionNumber = direction;\n var searchIndex = direction === 1 ? items.length - 1 : startIndex;\n var index = direction === 1 ? startIndex : items.length - 1;\n var focusableItem = items[itemIndex + direction];\n this._preventNextFocus = false;\n if ($(item).closest('.' + BUTTON_GROUP).length && !$(item).is(direction === 1 ? ':last-child' : ':first-child')) {\n return $(item).closest('.' + BUTTON_GROUP).children()[$(item).closest('.' + BUTTON_GROUP).children().index(item) + direction];\n }\n if (this.overflowAnchor && item === this.overflowAnchor[0] && direction === -1) {\n focusableItem = items[items.length - 1];\n }\n if (itemIndex === searchIndex) {\n focusableItem = !this.overflowAnchor || this.overflowAnchor && $(this.overflowAnchor).css('visibility') === 'hidden' ? items[index] : this.overflowAnchor;\n }\n while (!$(focusableItem).is(':kendoFocusable')) {\n if (direction === -1 && $(focusableItem).closest('.' + BUTTON_GROUP).length) {\n focusableItem = $(focusableItem).children(':not(label, div)').last();\n } else {\n focusableItem = $(focusableItem).children(':not(label, div)').first();\n }\n if (!focusableItem.length) {\n directionNumber = directionNumber + direction;\n focusableItem = items[itemIndex + directionNumber];\n if (!focusableItem) {\n return this.overflowAnchor;\n }\n }\n this._preventNextFocus = $(focusableItem).closest('.' + BUTTON_GROUP).length ? false : true;\n }\n return focusableItem;\n },\n _getPrevFocusable: function (element) {\n if (element.is('html')) {\n return element;\n }\n var elementToFocus, prevElement, prevElements = element.prevAll();\n prevElements.each(function () {\n prevElement = $(this);\n if (prevElement.is(':kendoFocusable')) {\n elementToFocus = prevElement;\n return false;\n } else if (prevElement.find(':kendoFocusable').length > 0) {\n elementToFocus = prevElement.find(':kendoFocusable').last();\n return false;\n }\n });\n if (elementToFocus) {\n return elementToFocus;\n } else {\n return this._getPrevFocusable(element.parent());\n }\n },\n _toggle: function (e) {\n var splitButton = $(e.target).closest('.' + SPLIT_BUTTON).data('splitButton');\n e.preventDefault();\n if (!splitButton.options.enable) {\n return;\n }\n splitButton.toggle();\n },\n _toggleOverflow: function () {\n this.popup.toggle();\n },\n _resize: function (e) {\n var containerWidth = e.width;\n if (!this.options.resizable) {\n return;\n }\n this.popup.close();\n this._shrink(containerWidth);\n this._stretch(containerWidth);\n this._markVisibles();\n this._toggleOverflowAnchor();\n },\n _childrenWidth: function () {\n var childrenWidth = 0;\n this.element.children(':visible:not(.' + STATE_HIDDEN + ', .' + SPACER_CLASS + ')').each(function () {\n childrenWidth += outerWidth($(this), true);\n });\n return Math.ceil(childrenWidth);\n },\n _shrink: function (containerWidth) {\n var commandElement, visibleCommands;\n if (containerWidth < this._childrenWidth()) {\n visibleCommands = this.element.children(':visible:not([data-overflow=\\'never\\'], .' + OVERFLOW_ANCHOR + ')');\n for (var i = visibleCommands.length - 1; i >= 0; i--) {\n commandElement = visibleCommands.eq(i);\n if (containerWidth > this._childrenWidth()) {\n break;\n } else {\n this._hideItem(commandElement);\n }\n }\n }\n },\n _stretch: function (containerWidth) {\n var commandElement, hiddenCommands;\n if (containerWidth > this._childrenWidth()) {\n hiddenCommands = this.element.children(':hidden:not(\\'.' + STATE_HIDDEN + '\\')');\n for (var i = 0; i < hiddenCommands.length; i++) {\n commandElement = hiddenCommands.eq(i);\n if (containerWidth < this._childrenWidth() || !this._showItem(commandElement, containerWidth)) {\n break;\n }\n }\n }\n },\n _hideItem: function (item) {\n item.addClass(HIDDEN);\n if (this.popup) {\n this.popup.container.find('>li[data-uid=\\'' + item.data('uid') + '\\']').removeClass(OVERFLOW_HIDDEN);\n }\n },\n _showItem: function (item, containerWidth) {\n item.removeClass(HIDDEN);\n var itemOuterWidth = outerWidth(item, true);\n item.addClass(HIDDEN);\n if (item.length && containerWidth > this._childrenWidth() + itemOuterWidth) {\n item.removeClass(HIDDEN);\n if (this.popup) {\n this.popup.container.find('>li[data-uid=\\'' + item.data('uid') + '\\']').addClass(OVERFLOW_HIDDEN);\n }\n return true;\n }\n return false;\n },\n _markVisibles: function () {\n var overflowItems = this.popup.container.children(), toolbarItems = this.element.children(':not(.k-overflow-anchor)'), visibleOverflowItems = overflowItems.filter(':not(.k-overflow-hidden)'), visibleToolbarItems = toolbarItems.filter(':visible');\n overflowItems.add(toolbarItems).removeClass(FIRST_TOOLBAR_VISIBLE + ' ' + LAST_TOOLBAR_VISIBLE);\n visibleOverflowItems.first().add(visibleToolbarItems.first()).addClass(FIRST_TOOLBAR_VISIBLE);\n visibleOverflowItems.last().add(visibleToolbarItems.last()).addClass(LAST_TOOLBAR_VISIBLE);\n }\n });\n kendo.ui.plugin(ToolBar);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.list', [\n 'kendo.data',\n 'kendo.popup'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'list',\n name: 'List',\n category: 'framework',\n depends: [\n 'data',\n 'popup'\n ],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, outerHeight = kendo._outerHeight, percentageUnitsRegex = /^\\d+(\\.\\d+)?%$/i, Widget = ui.Widget, keys = kendo.keys, support = kendo.support, htmlEncode = kendo.htmlEncode, activeElement = kendo._activeElement, outerWidth = kendo._outerWidth, ObservableArray = kendo.data.ObservableArray, ID = 'id', CHANGE = 'change', FOCUSED = 'k-state-focused', HOVER = 'k-state-hover', LOADING = 'k-i-loading', GROUPHEADER = '.k-group-header', ITEMSELECTOR = '.k-item', LABELIDPART = '_label', OPEN = 'open', CLOSE = 'close', CASCADE = 'cascade', SELECT = 'select', SELECTED = 'selected', REQUESTSTART = 'requestStart', REQUESTEND = 'requestEnd', BLUR = 'blur', FOCUS = 'focus', FOCUSOUT = 'focusout', extend = $.extend, proxy = $.proxy, isArray = $.isArray, browser = support.browser, HIDDENCLASS = 'k-hidden', WIDTH = 'width', isIE = browser.msie, isIE8 = isIE && browser.version < 9, quotRegExp = /\"/g, alternativeNames = {\n 'ComboBox': [\n 'DropDownList',\n 'MultiColumnComboBox'\n ],\n 'DropDownList': [\n 'ComboBox',\n 'MultiColumnComboBox'\n ],\n 'MultiColumnComboBox': [\n 'ComboBox',\n 'DropDownList'\n ]\n };\n var List = kendo.ui.DataBoundWidget.extend({\n init: function (element, options) {\n var that = this, ns = that.ns, id;\n Widget.fn.init.call(that, element, options);\n element = that.element;\n options = that.options;\n that._isSelect = element.is(SELECT);\n if (that._isSelect && that.element[0].length) {\n if (!options.dataSource) {\n options.dataTextField = options.dataTextField || 'text';\n options.dataValueField = options.dataValueField || 'value';\n }\n }\n that.ul = $('<ul unselectable=\"on\" class=\"k-list k-reset\"/>').attr({\n tabIndex: -1,\n 'aria-hidden': true\n });\n that.list = $('<div class=\\'k-list-container\\'/>').append(that.ul).on('mousedown' + ns, proxy(that._listMousedown, that));\n id = element.attr(ID);\n if (!id) {\n id = kendo.guid();\n }\n that.list.attr(ID, id + '-list');\n that.ul.attr(ID, id + '_listbox');\n if (options.columns && options.columns.length) {\n that.ul.removeClass('k-list').addClass('k-grid-list');\n that._columnsHeader();\n }\n that._header();\n that._noData();\n that._footer();\n that._accessors();\n that._initValue();\n },\n options: {\n valuePrimitive: false,\n footerTemplate: '',\n headerTemplate: '',\n noDataTemplate: true,\n messages: {\n 'noData': 'No data found.',\n 'clear': 'clear'\n }\n },\n setOptions: function (options) {\n Widget.fn.setOptions.call(this, options);\n if (options && options.enable !== undefined) {\n options.enabled = options.enable;\n }\n if (options.columns && options.columns.length) {\n this._columnsHeader();\n }\n this._header();\n this._noData();\n this._footer();\n this._renderFooter();\n this._renderNoData();\n },\n focus: function () {\n this._focused.focus();\n },\n readonly: function (readonly) {\n this._editable({\n readonly: readonly === undefined ? true : readonly,\n disable: false\n });\n },\n enable: function (enable) {\n this._editable({\n readonly: false,\n disable: !(enable = enable === undefined ? true : enable)\n });\n },\n _header: function () {\n var list = this;\n var header = $(list.header);\n var template = list.options.headerTemplate;\n this._angularElement(header, 'cleanup');\n kendo.destroy(header);\n header.remove();\n if (!template) {\n list.header = null;\n return;\n }\n var headerTemplate = typeof template !== 'function' ? kendo.template(template) : template;\n header = $(headerTemplate({}));\n list.header = header[0] ? header : null;\n list.list.prepend(header);\n this._angularElement(list.header, 'compile');\n },\n _columnsHeader: function () {\n var list = this;\n var columnsHeader = $(list.columnsHeader);\n this._angularElement(columnsHeader, 'cleanup');\n kendo.destroy(columnsHeader);\n columnsHeader.remove();\n var header = '<div class=\\'k-grid-header\\'><div class=\\'k-grid-header-wrap\\'><table role=\\'presentation\\'>';\n var colGroup = '<colgroup>';\n var row = '<tr>';\n for (var idx = 0; idx < this.options.columns.length; idx++) {\n var currentColumn = this.options.columns[idx];\n var title = currentColumn.title || currentColumn.field || '';\n var template = currentColumn.headerTemplate || title;\n var columnsHeaderTemplate = typeof template !== 'function' ? kendo.template(template) : template;\n var currentWidth = currentColumn.width;\n var currentWidthInt = parseInt(currentWidth, 10);\n var widthStyle = '';\n if (currentWidth && !isNaN(currentWidthInt)) {\n widthStyle += 'style=\\'width:';\n widthStyle += currentWidthInt;\n widthStyle += percentageUnitsRegex.test(currentWidth) ? '%' : 'px';\n widthStyle += ';\\'';\n }\n colGroup += '<col ' + widthStyle + '/>';\n row += '<th class=\\'k-header\\'>';\n row += columnsHeaderTemplate(currentColumn);\n row += '</th>';\n }\n colGroup += '</colgroup>';\n row += '</tr>';\n header += colGroup;\n header += row;\n header += '</table></div></div>';\n list.columnsHeader = columnsHeader = $(header);\n list.list.prepend(columnsHeader);\n this._angularElement(list.columnsHeader, 'compile');\n },\n _noData: function () {\n var list = this;\n var noData = $(list.noData);\n var template = list.options.noDataTemplate === true ? list.options.messages.noData : list.options.noDataTemplate;\n list.angular('cleanup', function () {\n return { elements: noData };\n });\n kendo.destroy(noData);\n noData.remove();\n if (!template) {\n list.noData = null;\n return;\n }\n list.noData = $('<div class=\"k-nodata\" style=\"display:none\"><div></div></div>').appendTo(list.list);\n list.noDataTemplate = typeof template !== 'function' ? kendo.template(template) : template;\n },\n _footer: function () {\n var list = this;\n var footer = $(list.footer);\n var template = list.options.footerTemplate;\n this._angularElement(footer, 'cleanup');\n kendo.destroy(footer);\n footer.remove();\n if (!template) {\n list.footer = null;\n return;\n }\n list.footer = $('<div class=\"k-footer\"></div>').appendTo(list.list);\n list.footerTemplate = typeof template !== 'function' ? kendo.template(template) : template;\n },\n _listOptions: function (options) {\n var that = this;\n var currentOptions = that.options;\n var virtual = currentOptions.virtual;\n var changeEventOption = { change: proxy(that._listChange, that) };\n var listBoundHandler = proxy(that._listBound, that);\n virtual = typeof virtual === 'object' ? virtual : {};\n options = $.extend({\n autoBind: false,\n selectable: true,\n dataSource: that.dataSource,\n click: proxy(that._click, that),\n activate: proxy(that._activateItem, that),\n columns: currentOptions.columns,\n deactivate: proxy(that._deactivateItem, that),\n dataBinding: function () {\n that.trigger('dataBinding');\n },\n dataBound: listBoundHandler,\n height: currentOptions.height,\n dataValueField: currentOptions.dataValueField,\n dataTextField: currentOptions.dataTextField,\n groupTemplate: currentOptions.groupTemplate,\n fixedGroupTemplate: currentOptions.fixedGroupTemplate,\n template: currentOptions.template\n }, options, virtual, changeEventOption);\n if (!options.template) {\n options.template = '#:' + kendo.expr(options.dataTextField, 'data') + '#';\n }\n if (currentOptions.$angular) {\n options.$angular = currentOptions.$angular;\n }\n return options;\n },\n _initList: function () {\n var that = this;\n var listOptions = that._listOptions({ selectedItemChange: proxy(that._listChange, that) });\n if (!that.options.virtual) {\n that.listView = new kendo.ui.StaticList(that.ul, listOptions);\n } else {\n that.listView = new kendo.ui.VirtualList(that.ul, listOptions);\n }\n that.listView.bind('listBound', proxy(that._listBound, that));\n that._setListValue();\n },\n _setListValue: function (value) {\n value = value || this.options.value;\n if (value !== undefined) {\n this.listView.value(value).done(proxy(this._updateSelectionState, this));\n }\n },\n _updateSelectionState: $.noop,\n _listMousedown: function (e) {\n if (!this.filterInput || this.filterInput[0] !== e.target) {\n e.preventDefault();\n }\n },\n _isFilterEnabled: function () {\n var filter = this.options.filter;\n return filter && filter !== 'none';\n },\n _hideClear: function () {\n var list = this;\n if (list._clear) {\n list._clear.addClass(HIDDENCLASS);\n }\n },\n _showClear: function () {\n if (this._clear) {\n this._clear.removeClass(HIDDENCLASS);\n }\n },\n _clearValue: function () {\n this._clearText();\n this._accessor('');\n this.listView.value([]);\n if (this._isSelect) {\n this._customOption = undefined;\n }\n if (this._isFilterEnabled() && !this.options.enforceMinLength) {\n this._filter({\n word: '',\n open: false\n });\n if (this.options.highlightFirst) {\n this.listView.focus(0);\n }\n }\n this._change();\n },\n _clearText: function () {\n this.text('');\n },\n _clearFilter: function () {\n if (!this.options.virtual) {\n this.listView.bound(false);\n }\n this._filterSource();\n },\n _filterSource: function (filter, force) {\n var that = this;\n var options = that.options;\n var isMultiColumnFiltering = options.filterFields && filter && filter.logic && filter.filters && filter.filters.length;\n var dataSource = that.dataSource;\n var expression = extend({}, dataSource.filter() || {});\n var resetPageSettings = filter || expression.filters && expression.filters.length && !filter;\n var removed = removeFiltersForField(expression, options.dataTextField);\n this._clearFilterExpressions(expression);\n if ((filter || removed) && that.trigger('filtering', { filter: filter })) {\n return $.Deferred().reject().promise();\n }\n var newExpression = {\n filters: [],\n logic: 'and'\n };\n if (isMultiColumnFiltering) {\n newExpression.filters.push(filter);\n } else {\n this._pushFilterExpression(newExpression, filter);\n }\n if (isValidFilterExpr(expression)) {\n if (newExpression.logic === expression.logic) {\n newExpression.filters = newExpression.filters.concat(expression.filters);\n } else {\n newExpression.filters.push(expression);\n }\n }\n if (that._cascading) {\n this.listView.setDSFilter(newExpression);\n }\n var dataSourceState = extend({}, {\n page: resetPageSettings ? 1 : dataSource.page(),\n pageSize: resetPageSettings ? dataSource.options.pageSize : dataSource.pageSize(),\n sort: dataSource.sort(),\n filter: dataSource.filter(),\n group: dataSource.group(),\n aggregate: dataSource.aggregate()\n }, { filter: newExpression });\n return dataSource[force ? 'read' : 'query'](dataSource._mergeState(dataSourceState));\n },\n _pushFilterExpression: function (newExpression, filter) {\n if (isValidFilterExpr(filter) && filter.value !== '') {\n newExpression.filters.push(filter);\n }\n },\n _clearFilterExpressions: function (expression) {\n if (!expression.filters) {\n return;\n }\n var filtersToRemove;\n for (var i = 0; i < expression.filters.length; i++) {\n if ('fromFilter' in expression.filters[i]) {\n filtersToRemove = i;\n }\n }\n if (!isNaN(filtersToRemove)) {\n expression.filters.splice(filtersToRemove, 1);\n }\n },\n _angularElement: function (element, action) {\n if (!element) {\n return;\n }\n this.angular(action, function () {\n return { elements: element };\n });\n },\n _renderNoData: function () {\n var list = this;\n var noData = list.noData;\n if (!noData) {\n return;\n }\n this._angularElement(noData, 'cleanup');\n noData.children(':first').html(list.noDataTemplate({ instance: list }));\n this._angularElement(noData, 'compile');\n },\n _toggleNoData: function (show) {\n $(this.noData).toggle(show);\n },\n _toggleHeader: function (show) {\n var groupHeader = this.listView.content.prev(GROUPHEADER);\n groupHeader.toggle(show);\n },\n _renderFooter: function () {\n var list = this;\n var footer = list.footer;\n if (!footer) {\n return;\n }\n this._angularElement(footer, 'cleanup');\n footer.html(list.footerTemplate({ instance: list }));\n this._angularElement(footer, 'compile');\n },\n _allowOpening: function () {\n return this.options.noDataTemplate || this.dataSource.flatView().length;\n },\n _initValue: function () {\n var that = this, value = that.options.value;\n if (value !== null) {\n that.element.val(value);\n } else {\n value = that._accessor();\n that.options.value = value;\n }\n that._old = value;\n },\n _ignoreCase: function () {\n var that = this, model = that.dataSource.reader.model, field;\n if (model && model.fields) {\n field = model.fields[that.options.dataTextField];\n if (field && field.type && field.type !== 'string') {\n that.options.ignoreCase = false;\n }\n }\n },\n _focus: function (candidate) {\n return this.listView.focus(candidate);\n },\n _filter: function (options) {\n var that = this;\n var widgetOptions = that.options;\n var word = options.word;\n var filterFields = widgetOptions.filterFields;\n var field = widgetOptions.dataTextField;\n var expression;\n if (filterFields && filterFields.length) {\n expression = {\n logic: 'or',\n filters: [],\n fromFilter: true\n };\n for (var i = 0; i < filterFields.length; i++) {\n this._pushFilterExpression(expression, that._buildExpression(word, filterFields[i]));\n }\n } else {\n expression = that._buildExpression(word, field);\n }\n that._open = options.open;\n that._filterSource(expression);\n },\n _buildExpression: function (value, field) {\n var that = this;\n var widgetOptions = that.options;\n var ignoreCase = widgetOptions.ignoreCase;\n var accentFoldingFiltering = that.dataSource.options.accentFoldingFiltering;\n return {\n value: ignoreCase ? accentFoldingFiltering ? value.toLocaleLowerCase(accentFoldingFiltering) : value.toLowerCase() : value,\n field: field,\n operator: widgetOptions.filter,\n ignoreCase: ignoreCase\n };\n },\n _clearButton: function () {\n var list = this;\n var clearTitle = list.options.messages.clear;\n if (!list._clear) {\n list._clear = $('<span unselectable=\"on\" class=\"k-icon k-clear-value k-i-close\" title=\"' + clearTitle + '\"></span>').attr({\n 'role': 'button',\n 'tabIndex': -1\n });\n }\n if (!list.options.clearButton) {\n list._clear.remove();\n }\n this._hideClear();\n },\n search: function (word) {\n var options = this.options;\n word = typeof word === 'string' ? word : this._inputValue();\n clearTimeout(this._typingTimeout);\n if (!options.enforceMinLength && !word.length || word.length >= options.minLength) {\n this._state = 'filter';\n if (this.listView) {\n this.listView._emptySearch = !kendo.trim(word).length;\n }\n if (!this._isFilterEnabled()) {\n this._searchByWord(word);\n } else {\n this._filter({\n word: word,\n open: true\n });\n }\n }\n },\n current: function (candidate) {\n return this._focus(candidate);\n },\n items: function () {\n return this.ul[0].children;\n },\n destroy: function () {\n var that = this;\n var ns = that.ns;\n Widget.fn.destroy.call(that);\n that._unbindDataSource();\n that.listView.destroy();\n that.list.off(ns);\n that.popup.destroy();\n if (that._form) {\n that._form.off('reset', that._resetHandler);\n }\n },\n dataItem: function (index) {\n var that = this;\n if (index === undefined) {\n return that.listView.selectedDataItems()[0];\n }\n if (typeof index !== 'number') {\n if (that.options.virtual) {\n return that.dataSource.getByUid($(index).data('uid'));\n }\n index = $(that.items()).index(index);\n }\n return that.dataSource.flatView()[index];\n },\n _activateItem: function () {\n var current = this.listView.focus();\n if (current) {\n this._focused.add(this.filterInput).attr('aria-activedescendant', current.attr('id'));\n }\n },\n _deactivateItem: function () {\n this._focused.add(this.filterInput).removeAttr('aria-activedescendant');\n },\n _accessors: function () {\n var that = this;\n var element = that.element;\n var options = that.options;\n var getter = kendo.getter;\n var textField = element.attr(kendo.attr('text-field'));\n var valueField = element.attr(kendo.attr('value-field'));\n if (!options.dataTextField && textField) {\n options.dataTextField = textField;\n }\n if (!options.dataValueField && valueField) {\n options.dataValueField = valueField;\n }\n that._text = getter(options.dataTextField);\n that._value = getter(options.dataValueField);\n },\n _aria: function (id) {\n var that = this, options = that.options, element = that._focused.add(that.filterInput);\n if (options.suggest !== undefined) {\n element.attr('aria-autocomplete', options.suggest ? 'both' : 'list');\n }\n id = id ? id + ' ' + that.ul[0].id : that.ul[0].id;\n element.attr('aria-owns', id);\n that.ul.attr('aria-live', !that._isFilterEnabled() ? 'off' : 'polite');\n that._ariaLabel();\n },\n _ariaLabel: function () {\n var that = this;\n var focusedElm = that._focused;\n var inputElm = that.element;\n var inputId = inputElm.attr('id');\n var labelElm = $('label[for=\"' + inputId + '\"]');\n var ariaLabel = inputElm.attr('aria-label');\n var ariaLabelledBy = inputElm.attr('aria-labelledby');\n if (focusedElm === inputElm) {\n return;\n }\n if (ariaLabel) {\n focusedElm.attr('aria-label', ariaLabel);\n } else if (ariaLabelledBy) {\n focusedElm.attr('aria-labelledby', ariaLabelledBy);\n } else if (labelElm.length) {\n var labelId = labelElm.attr('id') || that._generateLabelId(labelElm, inputId || kendo.guid());\n focusedElm.attr('aria-labelledby', labelId);\n }\n },\n _generateLabelId: function (label, inputId) {\n var labelId = inputId + LABELIDPART;\n label.attr('id', labelId);\n return labelId;\n },\n _blur: function () {\n var that = this;\n that._change();\n that.close();\n that._userTriggered = false;\n },\n _isValueChanged: function (value) {\n return value !== unifyType(this._old, typeof value);\n },\n _change: function () {\n var that = this;\n var index = that.selectedIndex;\n var optionValue = that.options.value;\n var value = that.value();\n var trigger;\n if (that._isSelect && !that.listView.bound() && optionValue) {\n value = optionValue;\n }\n if (that._isValueChanged(value)) {\n trigger = true;\n } else if (that._valueBeforeCascade !== undefined && that._valueBeforeCascade !== unifyType(that._old, typeof that._valueBeforeCascade) && that._userTriggered) {\n trigger = true;\n } else if (index !== undefined && index !== that._oldIndex && !that.listView.isFiltered()) {\n trigger = true;\n }\n if (trigger) {\n if (that._old === null || that._old === '' || value === '') {\n that._valueBeforeCascade = that._old = value;\n } else {\n if (that.dataItem()) {\n that._valueBeforeCascade = that._old = that.options.dataValueField ? that.dataItem()[that.options.dataValueField] : that.dataItem();\n } else {\n that._valueBeforeCascade = that._old = null;\n }\n }\n that._oldIndex = index;\n if (!that._typing) {\n that.element.trigger(CHANGE);\n }\n that.trigger(CHANGE);\n }\n that.typing = false;\n },\n _data: function () {\n return this.dataSource.view();\n },\n _enable: function () {\n var that = this, options = that.options, disabled = that.element.is('[disabled]');\n if (options.enable !== undefined) {\n options.enabled = options.enable;\n }\n if (!options.enabled || disabled) {\n that.enable(false);\n } else {\n that.readonly(that.element.is('[readonly]'));\n }\n },\n _dataValue: function (dataItem) {\n var value = this._value(dataItem);\n if (value === undefined) {\n value = this._text(dataItem);\n }\n return value;\n },\n _offsetHeight: function () {\n var offsetHeight = 0;\n var siblings = this.listView.content.prevAll(':visible');\n siblings.each(function () {\n var element = $(this);\n offsetHeight += outerHeight(element, true);\n });\n return offsetHeight;\n },\n _height: function (length) {\n var that = this;\n var list = that.list;\n var height = that.options.height;\n var visible = that.popup.visible();\n var offsetTop;\n var popups;\n var footerHeight;\n if (length || that.options.noDataTemplate) {\n popups = list.add(list.parent('.k-animation-container')).show();\n if (!list.is(':visible')) {\n popups.hide();\n return;\n }\n height = that.listView.content[0].scrollHeight > height ? height : 'auto';\n popups.height(height);\n if (height !== 'auto') {\n offsetTop = that._offsetHeight();\n footerHeight = outerHeight($(that.footer)) || 0;\n height = height - offsetTop - footerHeight;\n }\n that.listView.content.height(height);\n if (!visible) {\n popups.hide();\n }\n }\n return height;\n },\n _openHandler: function (e) {\n this._adjustListWidth();\n if (this.trigger(OPEN)) {\n e.preventDefault();\n } else {\n this._focused.attr('aria-expanded', true);\n this.ul.attr('aria-hidden', false);\n }\n },\n _adjustListWidth: function () {\n var that = this, list = that.list, width = list[0].style.width, wrapper = that.wrapper, computedStyle, computedWidth;\n if (!list.data(WIDTH) && width) {\n return;\n }\n computedStyle = window.getComputedStyle ? window.getComputedStyle(wrapper[0], null) : 0;\n computedWidth = parseFloat(computedStyle && computedStyle.width) || outerWidth(wrapper);\n if (computedStyle && browser.msie) {\n computedWidth += parseFloat(computedStyle.paddingLeft) + parseFloat(computedStyle.paddingRight) + parseFloat(computedStyle.borderLeftWidth) + parseFloat(computedStyle.borderRightWidth);\n }\n if (list.css('box-sizing') !== 'border-box') {\n width = computedWidth - (outerWidth(list) - list.width());\n } else {\n width = computedWidth;\n }\n list.css({\n fontFamily: wrapper.css('font-family'),\n width: that.options.autoWidth ? 'auto' : width,\n minWidth: width,\n whiteSpace: that.options.autoWidth ? 'nowrap' : 'normal'\n }).data(WIDTH, width);\n return true;\n },\n _closeHandler: function (e) {\n if (this.trigger(CLOSE)) {\n e.preventDefault();\n } else {\n this._focused.attr('aria-expanded', false);\n this.ul.attr('aria-hidden', true);\n }\n },\n _focusItem: function () {\n var listView = this.listView;\n var noFocusedItem = !listView.focus();\n var index = last(listView.select());\n if (index === undefined && this.options.highlightFirst && noFocusedItem) {\n index = 0;\n }\n if (index !== undefined) {\n listView.focus(index);\n } else if (noFocusedItem) {\n listView.scrollToIndex(0);\n }\n },\n _calculateGroupPadding: function (height) {\n var li = this.ul.children('.k-first:first');\n var groupHeader = this.listView.content.prev(GROUPHEADER);\n var padding = 0;\n var direction = 'right';\n if (groupHeader[0] && groupHeader[0].style.display !== 'none') {\n if (height !== 'auto') {\n padding = kendo.support.scrollbar();\n }\n if (this.element.parents('.k-rtl').length) {\n direction = 'left';\n }\n padding += parseFloat(li.css('border-' + direction + '-width'), 10) + parseFloat(li.children('.k-group').css('padding-' + direction), 10);\n groupHeader.css('padding-' + direction, padding);\n }\n },\n _calculatePopupHeight: function (force) {\n var height = this._height(this.dataSource.flatView().length || force);\n this._calculateGroupPadding(height);\n this._calculateColumnsHeaderPadding(height);\n },\n _calculateColumnsHeaderPadding: function (height) {\n if (this.options.columns && this.options.columns.length) {\n var list = this;\n var isRtl = support.isRtl(list.wrapper);\n var scrollbar = kendo.support.scrollbar();\n list.columnsHeader.css(isRtl ? 'padding-left' : 'padding-right', height !== 'auto' ? scrollbar : 0);\n }\n },\n _refreshScroll: function () {\n var listView = this.listView;\n var enableYScroll = listView.element.height() > listView.content.height();\n if (this.options.autoWidth) {\n listView.content.css({\n overflowX: 'hidden',\n overflowY: enableYScroll ? 'scroll' : 'auto'\n });\n }\n },\n _resizePopup: function (force) {\n if (this.options.virtual) {\n return;\n }\n if (!this.popup.element.is(':visible')) {\n this.popup.one('open', function (force) {\n return proxy(function () {\n this._calculatePopupHeight(force);\n }, this);\n }.call(this, force));\n this.popup.one('activate', proxy(this._refreshScroll, this));\n } else {\n this._calculatePopupHeight(force);\n }\n },\n _popup: function () {\n var list = this;\n list.popup = new ui.Popup(list.list, extend({}, list.options.popup, {\n anchor: list.wrapper,\n open: proxy(list._openHandler, list),\n close: proxy(list._closeHandler, list),\n animation: list.options.animation,\n isRtl: support.isRtl(list.wrapper),\n autosize: list.options.autoWidth\n }));\n },\n _makeUnselectable: function () {\n if (isIE8) {\n this.list.find('*').not('.k-textbox').attr('unselectable', 'on');\n }\n },\n _toggleHover: function (e) {\n $(e.currentTarget).toggleClass(HOVER, e.type === 'mouseenter');\n },\n _toggle: function (open, preventFocus) {\n var that = this;\n var touchEnabled = support.mobileOS && (support.touch || support.MSPointers || support.pointers);\n open = open !== undefined ? open : !that.popup.visible();\n if (!preventFocus && !touchEnabled && that._focused[0] !== activeElement()) {\n that._prevent = true;\n that._focused.focus();\n that._prevent = false;\n }\n that[open ? OPEN : CLOSE]();\n },\n _triggerCascade: function () {\n var that = this;\n if (!that._cascadeTriggered || that.value() !== unifyType(that._cascadedValue, typeof that.value())) {\n that._cascadedValue = that.value();\n that._cascadeTriggered = true;\n that.trigger(CASCADE, { userTriggered: that._userTriggered });\n }\n },\n _triggerChange: function () {\n if (this._valueBeforeCascade !== this.value()) {\n this.trigger(CHANGE);\n }\n },\n _unbindDataSource: function () {\n var that = this;\n that.dataSource.unbind(REQUESTSTART, that._requestStartHandler).unbind(REQUESTEND, that._requestEndHandler).unbind('error', that._errorHandler);\n },\n requireValueMapper: function (options, value) {\n var hasValue = (options.value instanceof Array ? options.value.length : options.value) || (value instanceof Array ? value.length : value);\n if (hasValue && options.virtual && typeof options.virtual.valueMapper !== 'function') {\n throw new Error('ValueMapper is not provided while the value is being set. See http://docs.telerik.com/kendo-ui/controls/editors/combobox/virtualization#the-valuemapper-function');\n }\n }\n });\n function unifyType(value, type) {\n if (value !== undefined && value !== '' && value !== null) {\n if (type === 'boolean') {\n if (typeof value !== 'boolean') {\n value = value.toString().toLowerCase() === 'true';\n }\n value = Boolean(value);\n } else if (type === 'number') {\n value = Number(value);\n } else if (type === 'string') {\n value = value.toString();\n }\n }\n return value;\n }\n extend(List, {\n inArray: function (node, parentNode) {\n var idx, length, siblings = parentNode.children;\n if (!node || node.parentNode !== parentNode) {\n return -1;\n }\n for (idx = 0, length = siblings.length; idx < length; idx++) {\n if (node === siblings[idx]) {\n return idx;\n }\n }\n return -1;\n },\n unifyType: unifyType\n });\n kendo.ui.List = List;\n ui.Select = List.extend({\n init: function (element, options) {\n List.fn.init.call(this, element, options);\n this._initial = this.element.val();\n },\n setDataSource: function (dataSource) {\n var that = this;\n var parent;\n that.options.dataSource = dataSource;\n that._dataSource();\n if (that.listView.bound()) {\n that._initialIndex = null;\n that.listView._current = null;\n }\n that.listView.setDataSource(that.dataSource);\n if (that.options.autoBind) {\n that.dataSource.fetch();\n }\n parent = that._parentWidget();\n if (parent) {\n that._cascadeSelect(parent);\n }\n },\n close: function () {\n this.popup.close();\n },\n select: function (candidate) {\n var that = this;\n if (candidate === undefined) {\n return that.selectedIndex;\n } else {\n return that._select(candidate).done(function () {\n that._cascadeValue = that._old = that._accessor();\n that._oldIndex = that.selectedIndex;\n });\n }\n },\n _accessor: function (value, idx) {\n return this[this._isSelect ? '_accessorSelect' : '_accessorInput'](value, idx);\n },\n _accessorInput: function (value) {\n var element = this.element[0];\n if (value === undefined) {\n return element.value;\n } else {\n if (value === null) {\n value = '';\n }\n element.value = value;\n }\n },\n _accessorSelect: function (value, idx) {\n var element = this.element[0];\n var hasValue;\n if (value === undefined) {\n return getSelectedOption(element).value || '';\n }\n getSelectedOption(element).selected = false;\n if (idx === undefined) {\n idx = -1;\n }\n hasValue = value !== null && value !== '';\n if (hasValue && idx == -1) {\n this._custom(value);\n } else {\n if (value) {\n element.value = value;\n } else {\n element.selectedIndex = idx;\n }\n }\n },\n _syncValueAndText: function () {\n return true;\n },\n _custom: function (value) {\n var that = this;\n var element = that.element;\n var custom = that._customOption;\n if (!custom) {\n custom = $('<option/>');\n that._customOption = custom;\n element.append(custom);\n }\n custom.text(value);\n custom[0].selected = true;\n },\n _hideBusy: function () {\n var that = this;\n clearTimeout(that._busy);\n that._arrowIcon.removeClass(LOADING);\n that._focused.attr('aria-busy', false);\n that._busy = null;\n that._showClear();\n },\n _showBusy: function (e) {\n var that = this;\n if (e.isDefaultPrevented()) {\n return;\n }\n that._request = true;\n if (that._busy) {\n return;\n }\n that._busy = setTimeout(function () {\n if (that._arrowIcon) {\n that._focused.attr('aria-busy', true);\n that._arrowIcon.addClass(LOADING);\n that._hideClear();\n }\n }, 100);\n },\n _requestEnd: function () {\n this._request = false;\n this._hideBusy();\n },\n _dataSource: function () {\n var that = this, element = that.element, options = that.options, dataSource = options.dataSource || {}, idx;\n dataSource = $.isArray(dataSource) ? { data: dataSource } : dataSource;\n if (that._isSelect) {\n idx = element[0].selectedIndex;\n if (idx > -1) {\n options.index = idx;\n }\n dataSource.select = element;\n dataSource.fields = [\n { field: options.dataTextField },\n { field: options.dataValueField }\n ];\n }\n if (that.dataSource) {\n that._unbindDataSource();\n } else {\n that._requestStartHandler = proxy(that._showBusy, that);\n that._requestEndHandler = proxy(that._requestEnd, that);\n that._errorHandler = proxy(that._hideBusy, that);\n }\n that.dataSource = kendo.data.DataSource.create(dataSource).bind(REQUESTSTART, that._requestStartHandler).bind(REQUESTEND, that._requestEndHandler).bind('error', that._errorHandler);\n },\n _firstItem: function () {\n this.listView.focusFirst();\n },\n _lastItem: function () {\n this.listView.focusLast();\n },\n _nextItem: function () {\n return this.listView.focusNext();\n },\n _prevItem: function () {\n return this.listView.focusPrev();\n },\n _getNormalizedDataItem: function (candidate) {\n var that = this, listView = that.listView, isIndex = typeof candidate === 'number', hasOptionLabel = that.optionLabel && that.optionLabel.length, index;\n if (isIndex) {\n index = hasOptionLabel ? --candidate : candidate;\n } else {\n index = listView.getElementIndex(candidate);\n }\n return listView.dataItemByIndex(index);\n },\n _getNormalizedSelectCandidate: function (candidate) {\n var that = this, hasOptionLabel = that.optionLabel && that.optionLabel.length, isIndex = typeof candidate === 'number', normalizedCandidate = candidate;\n if (hasOptionLabel && isIndex) {\n normalizedCandidate++;\n }\n return normalizedCandidate;\n },\n _move: function (e) {\n var that = this;\n var listView = that.listView;\n var key = e.keyCode;\n var down = key === keys.DOWN;\n var isVirtual = that.options.virtual;\n var dataItem;\n var pressed;\n var current;\n var moveIndex;\n var selectCandidate;\n if (key === keys.UP || down) {\n if (e.altKey) {\n that.toggle(down);\n } else {\n if (!listView.bound() && !that.ul[0].firstChild) {\n if (!that._fetch) {\n that.dataSource.one(CHANGE, function () {\n that._fetch = false;\n that._move(e);\n });\n that._fetch = true;\n that._filterSource();\n }\n e.preventDefault();\n return true;\n }\n current = that._focus();\n if (!that._fetch && (!current || current.hasClass('k-state-selected'))) {\n if (down) {\n moveIndex = that._nextItem();\n if (isVirtual && moveIndex <= 0 || !that._focus() && !moveIndex) {\n that._lastItem();\n }\n } else {\n moveIndex = that._prevItem();\n if (isVirtual && moveIndex >= listView.dataSource.total() - 1 || !that._focus() && !moveIndex) {\n that._firstItem();\n }\n }\n }\n selectCandidate = that._getNormalizedSelectCandidate(that._get(that._focus()) || moveIndex || 0);\n that._select(selectCandidate, true).done(function () {\n var done = function () {\n if (!that.popup.visible()) {\n that._blur();\n }\n if (that._cascadedValue === null) {\n that._cascadedValue = that.value();\n } else {\n that._cascadedValue = that.dataItem() ? that.dataItem()[that.options.dataValueField] || that.dataItem() : null;\n }\n };\n if (that.trigger(SELECT, {\n dataItem: that._getNormalizedDataItem(selectCandidate),\n item: that._focus()\n })) {\n that._select(current).done(done);\n } else {\n done();\n }\n });\n }\n e.preventDefault();\n pressed = true;\n } else if (key === keys.ENTER || key === keys.TAB) {\n if (that.popup.visible()) {\n e.preventDefault();\n }\n current = that._focus();\n dataItem = that.dataItem();\n if (!that.popup.visible() && (!dataItem || that.text() !== that._text(dataItem))) {\n current = null;\n }\n var activeFilter = that.filterInput && that.filterInput[0] === activeElement();\n var selection;\n if (current) {\n dataItem = listView.dataItemByIndex(listView.getElementIndex(current));\n var shouldTrigger = true;\n if (dataItem) {\n shouldTrigger = that._value(dataItem) !== List.unifyType(that.value(), typeof that._value(dataItem));\n }\n if (shouldTrigger && that.trigger(SELECT, {\n dataItem: dataItem,\n item: current\n })) {\n return;\n }\n selection = that._select(current);\n } else if (that.input) {\n if (that._syncValueAndText() || that._isSelect) {\n that._accessor(that.input.val());\n }\n that.listView.value(that.input.val());\n }\n if (that._focusElement) {\n that._focusElement(that.wrapper);\n }\n if (activeFilter && key === keys.TAB) {\n that.wrapper.focusout();\n } else {\n if (selection && typeof selection.done === 'function') {\n selection.done(function () {\n that._blur();\n });\n } else {\n that._blur();\n }\n }\n that.close();\n pressed = true;\n } else if (key === keys.ESC) {\n if (that.popup.visible()) {\n e.preventDefault();\n }\n that.close();\n pressed = true;\n } else if (that.popup.visible() && (key === keys.PAGEDOWN || key === keys.PAGEUP)) {\n e.preventDefault();\n var direction = key === keys.PAGEDOWN ? 1 : -1;\n listView.scrollWith(direction * listView.screenHeight());\n pressed = true;\n }\n return pressed;\n },\n _fetchData: function () {\n var that = this;\n var hasItems = !!that.dataSource.view().length;\n if (that._request || that.options.cascadeFrom) {\n return;\n }\n if (!that.listView.bound() && !that._fetch && !hasItems) {\n that._fetch = true;\n that.dataSource.fetch().done(function () {\n that._fetch = false;\n });\n }\n },\n _options: function (data, optionLabel, value) {\n var that = this, element = that.element, htmlElement = element[0], length = data.length, options = '', option, dataItem, dataText, dataValue, idx = 0;\n if (optionLabel) {\n options = optionLabel;\n }\n for (; idx < length; idx++) {\n option = '<option';\n dataItem = data[idx];\n dataText = that._text(dataItem);\n dataValue = that._value(dataItem);\n if (dataValue !== undefined) {\n dataValue += '';\n if (dataValue.indexOf('\"') !== -1) {\n dataValue = dataValue.replace(quotRegExp, '"');\n }\n option += ' value=\"' + dataValue + '\"';\n }\n option += '>';\n if (dataText !== undefined) {\n option += htmlEncode(dataText);\n }\n option += '</option>';\n options += option;\n }\n element.html(options);\n if (value !== undefined) {\n htmlElement.value = value;\n if (htmlElement.value && !value) {\n htmlElement.selectedIndex = -1;\n }\n }\n if (htmlElement.selectedIndex !== -1) {\n option = getSelectedOption(htmlElement);\n if (option) {\n option.setAttribute(SELECTED, SELECTED);\n }\n }\n },\n _reset: function () {\n var that = this, element = that.element, formId = element.attr('form'), form = formId ? $('#' + formId) : element.closest('form');\n if (form[0]) {\n that._resetHandler = function () {\n setTimeout(function () {\n that.value(that._initial);\n });\n };\n that._form = form.on('reset', that._resetHandler);\n }\n },\n _parentWidget: function () {\n var name = this.options.name;\n if (!this.options.cascadeFrom) {\n return;\n }\n var parentElement = $('#' + this.options.cascadeFrom);\n var parent = parentElement.data('kendo' + name);\n if (!parent) {\n for (var i = 0; i < alternativeNames[name].length; i += 1) {\n parent = parentElement.data('kendo' + alternativeNames[name][i]);\n if (!!parent) {\n break;\n }\n }\n }\n return parent;\n },\n _cascade: function () {\n var that = this;\n var options = that.options;\n var cascade = options.cascadeFrom;\n var parent;\n if (cascade) {\n parent = that._parentWidget();\n if (!parent) {\n return;\n }\n that._cascadeHandlerProxy = proxy(that._cascadeHandler, that);\n that._cascadeFilterRequests = [];\n options.autoBind = false;\n parent.bind('set', function () {\n that.one('set', function (e) {\n that._selectedValue = e.value || that._accessor();\n });\n });\n parent.first(CASCADE, that._cascadeHandlerProxy);\n if (parent.listView.bound()) {\n that._toggleCascadeOnFocus();\n that._cascadeSelect(parent);\n } else {\n parent.one('dataBound', function () {\n that._toggleCascadeOnFocus();\n if (parent.popup.visible()) {\n parent._focused.focus();\n }\n });\n if (!parent.value()) {\n that.enable(false);\n }\n }\n }\n },\n _toggleCascadeOnFocus: function () {\n var that = this;\n var parent = that._parentWidget();\n var focusout = isIE && parent instanceof ui.DropDownList ? BLUR : FOCUSOUT;\n parent._focused.add(parent.filterInput).bind(FOCUS, function () {\n parent.unbind(CASCADE, that._cascadeHandlerProxy);\n parent.first(CHANGE, that._cascadeHandlerProxy);\n });\n parent._focused.add(parent.filterInput).bind(focusout, function () {\n parent.unbind(CHANGE, that._cascadeHandlerProxy);\n parent.first(CASCADE, that._cascadeHandlerProxy);\n });\n },\n _cascadeHandler: function (e) {\n var parent = this._parentWidget();\n var valueBeforeCascade = this.value();\n this._userTriggered = e.userTriggered || parent._userTriggered;\n if (this.listView.bound()) {\n this._clearSelection(parent, true);\n }\n this._cascadeSelect(parent, valueBeforeCascade);\n },\n _cascadeChange: function (parent) {\n var that = this;\n var value = that._accessor() || that._selectedValue;\n if (!that._cascadeFilterRequests.length) {\n that._selectedValue = null;\n }\n if (that._userTriggered) {\n that._clearSelection(parent, true);\n } else if (value) {\n if (value !== unifyType(that.listView.value()[0], typeof value)) {\n that.value(value);\n }\n if (!that.dataSource.view()[0] || that.selectedIndex === -1) {\n that._clearSelection(parent, true);\n }\n } else if (that.dataSource.flatView().length) {\n that.select(that.options.index);\n }\n that.enable();\n that._triggerCascade();\n that._triggerChange();\n that._userTriggered = false;\n },\n _cascadeSelect: function (parent, valueBeforeCascade) {\n var that = this;\n var dataItem = parent.dataItem();\n var filterValue = dataItem ? dataItem[that.options.cascadeFromParentField] || parent._value(dataItem) : null;\n var valueField = that.options.cascadeFromField || parent.options.dataValueField;\n var expressions;\n that._valueBeforeCascade = valueBeforeCascade !== undefined ? valueBeforeCascade : that.value();\n if (filterValue || filterValue === 0) {\n expressions = that.dataSource.filter() || {};\n removeFiltersForField(expressions, valueField);\n var handler = function () {\n var currentHandler = that._cascadeFilterRequests.shift();\n if (currentHandler) {\n that.unbind('dataBound', currentHandler);\n }\n currentHandler = that._cascadeFilterRequests[0];\n if (currentHandler) {\n that.first('dataBound', currentHandler);\n }\n that._cascadeChange(parent);\n };\n that._cascadeFilterRequests.push(handler);\n if (that._cascadeFilterRequests.length === 1) {\n that.first('dataBound', handler);\n }\n that._cascading = true;\n that._filterSource({\n field: valueField,\n operator: 'eq',\n value: filterValue\n });\n that._cascading = false;\n } else {\n that.enable(false);\n that._clearSelection(parent);\n that._triggerCascade();\n that._triggerChange();\n that._userTriggered = false;\n }\n }\n });\n var STATIC_LIST_NS = '.StaticList';\n var StaticList = kendo.ui.DataBoundWidget.extend({\n init: function (element, options) {\n Widget.fn.init.call(this, element, options);\n this.element.attr('role', 'listbox').on('click' + STATIC_LIST_NS, 'li', proxy(this._click, this)).on('mouseenter' + STATIC_LIST_NS, 'li', function () {\n $(this).addClass(HOVER);\n }).on('mouseleave' + STATIC_LIST_NS, 'li', function () {\n $(this).removeClass(HOVER);\n });\n if (support.touch) {\n this._touchHandlers();\n }\n if (this.options.selectable === 'multiple') {\n this.element.attr('aria-multiselectable', true);\n }\n this.content = this.element.wrap('<div class=\\'k-list-scroller\\' unselectable=\\'on\\'></div>').parent();\n this.header = this.content.before('<div class=\"k-group-header\" style=\"display:none\"></div>').prev();\n this.bound(false);\n this._optionID = kendo.guid();\n this._selectedIndices = [];\n this._view = [];\n this._dataItems = [];\n this._values = [];\n var value = this.options.value;\n if (value) {\n this._values = $.isArray(value) ? value.slice(0) : [value];\n }\n this._getter();\n this._templates();\n this.setDataSource(this.options.dataSource);\n this._onScroll = proxy(function () {\n var that = this;\n clearTimeout(that._scrollId);\n that._scrollId = setTimeout(function () {\n that._renderHeader();\n }, 50);\n }, this);\n },\n options: {\n name: 'StaticList',\n dataValueField: null,\n valuePrimitive: false,\n selectable: true,\n template: null,\n groupTemplate: null,\n fixedGroupTemplate: null\n },\n events: [\n 'click',\n CHANGE,\n 'activate',\n 'deactivate',\n 'dataBinding',\n 'dataBound',\n 'selectedItemChange'\n ],\n setDataSource: function (source) {\n var that = this;\n var dataSource = source || {};\n var value;\n dataSource = $.isArray(dataSource) ? { data: dataSource } : dataSource;\n dataSource = kendo.data.DataSource.create(dataSource);\n if (that.dataSource) {\n that.dataSource.unbind(CHANGE, that._refreshHandler);\n value = that.value();\n that.value([]);\n that.bound(false);\n that.value(value);\n } else {\n that._refreshHandler = proxy(that.refresh, that);\n }\n that.setDSFilter(dataSource.filter());\n that.dataSource = dataSource.bind(CHANGE, that._refreshHandler);\n that._fixedHeader();\n },\n _touchHandlers: function () {\n var that = this;\n var startY;\n var endY;\n var tapPosition = function (event) {\n return (event.originalEvent || event).changedTouches[0].pageY;\n };\n that.element.on('touchstart' + STATIC_LIST_NS, function (e) {\n startY = tapPosition(e);\n });\n that.element.on('touchend' + STATIC_LIST_NS, function (e) {\n if (e.isDefaultPrevented()) {\n return;\n }\n endY = tapPosition(e);\n if (Math.abs(endY - startY) < 10) {\n that._touchTriggered = true;\n that._triggerClick($(e.target).closest(ITEMSELECTOR).get(0));\n }\n });\n },\n skip: function () {\n return this.dataSource.skip();\n },\n setOptions: function (options) {\n Widget.fn.setOptions.call(this, options);\n this._getter();\n this._templates();\n this._render();\n },\n destroy: function () {\n this.element.off(STATIC_LIST_NS);\n if (this._refreshHandler) {\n this.dataSource.unbind(CHANGE, this._refreshHandler);\n }\n clearTimeout(this._scrollId);\n Widget.fn.destroy.call(this);\n },\n dataItemByIndex: function (index) {\n return this.dataSource.flatView()[index];\n },\n screenHeight: function () {\n return this.content[0].clientHeight;\n },\n scrollToIndex: function (index) {\n var item = this.element[0].children[index];\n if (item) {\n this.scroll(item);\n }\n },\n scrollWith: function (value) {\n this.content.scrollTop(this.content.scrollTop() + value);\n },\n scroll: function (item) {\n if (!item) {\n return;\n }\n if (item[0]) {\n item = item[0];\n }\n var content = this.content[0], itemOffsetTop = item.offsetTop, itemOffsetHeight = item.offsetHeight, contentScrollTop = content.scrollTop, contentOffsetHeight = content.clientHeight, bottomDistance = itemOffsetTop + itemOffsetHeight;\n if (contentScrollTop > itemOffsetTop) {\n contentScrollTop = itemOffsetTop;\n } else if (bottomDistance > contentScrollTop + contentOffsetHeight) {\n contentScrollTop = bottomDistance - contentOffsetHeight;\n }\n content.scrollTop = contentScrollTop;\n },\n selectedDataItems: function (dataItems) {\n if (dataItems === undefined) {\n return this._dataItems.slice();\n }\n this._dataItems = dataItems;\n this._values = this._getValues(dataItems);\n },\n _getValues: function (dataItems) {\n var getter = this._valueGetter;\n return $.map(dataItems, function (dataItem) {\n return getter(dataItem);\n });\n },\n focusNext: function () {\n var current = this.focus();\n if (!current) {\n current = 0;\n } else {\n current = current.next();\n }\n this.focus(current);\n },\n focusPrev: function () {\n var current = this.focus();\n if (!current) {\n current = this.element[0].children.length - 1;\n } else {\n current = current.prev();\n }\n this.focus(current);\n },\n focusFirst: function () {\n this.focus(this.element[0].children[0]);\n },\n focusLast: function () {\n this.focus(last(this.element[0].children));\n },\n focus: function (candidate) {\n var that = this;\n var id = that._optionID;\n var hasCandidate;\n if (candidate === undefined) {\n return that._current;\n }\n candidate = last(that._get(candidate));\n candidate = $(this.element[0].children[candidate]);\n if (that._current) {\n that._current.removeClass(FOCUSED).removeAttr(ID);\n that.trigger('deactivate');\n }\n hasCandidate = !!candidate[0];\n if (hasCandidate) {\n candidate.addClass(FOCUSED);\n that.scroll(candidate);\n candidate.attr('id', id);\n }\n that._current = hasCandidate ? candidate : null;\n that.trigger('activate');\n },\n focusIndex: function () {\n return this.focus() ? this.focus().index() : undefined;\n },\n skipUpdate: function (skipUpdate) {\n this._skipUpdate = skipUpdate;\n },\n select: function (indices) {\n var that = this;\n var selectable = that.options.selectable;\n var singleSelection = selectable !== 'multiple' && selectable !== false;\n var selectedIndices = that._selectedIndices;\n var uiSelectedIndices = [this.element.find('.k-state-selected').index()];\n var added = [];\n var removed = [];\n var result;\n if (indices === undefined) {\n return selectedIndices.slice();\n }\n indices = that._get(indices);\n if (indices.length === 1 && indices[0] === -1) {\n indices = [];\n }\n var deferred = $.Deferred().resolve();\n var filtered = that.isFiltered();\n if (filtered && !singleSelection && that._deselectFiltered(indices)) {\n return deferred;\n }\n if (singleSelection && !filtered && $.inArray(last(indices), selectedIndices) !== -1 && $.inArray(last(indices), uiSelectedIndices) !== -1) {\n if (that._dataItems.length && that._view.length) {\n that._dataItems = [that._view[selectedIndices[0]].item];\n }\n return deferred;\n }\n result = that._deselect(indices);\n removed = result.removed;\n indices = result.indices;\n if (indices.length) {\n if (singleSelection) {\n indices = [last(indices)];\n }\n added = that._select(indices);\n }\n if (added.length || removed.length) {\n that._valueComparer = null;\n that.trigger(CHANGE, {\n added: added,\n removed: removed\n });\n }\n return deferred;\n },\n removeAt: function (position) {\n this._selectedIndices.splice(position, 1);\n this._values.splice(position, 1);\n this._valueComparer = null;\n return {\n position: position,\n dataItem: this._dataItems.splice(position, 1)[0]\n };\n },\n setValue: function (value) {\n value = $.isArray(value) || value instanceof ObservableArray ? value.slice(0) : [value];\n this._values = value;\n this._valueComparer = null;\n },\n value: function (value) {\n var that = this;\n var deferred = that._valueDeferred;\n var indices;\n if (value === undefined) {\n return that._values.slice();\n }\n that.setValue(value);\n if (!deferred || deferred.state() === 'resolved') {\n that._valueDeferred = deferred = $.Deferred();\n }\n if (that.bound()) {\n indices = that._valueIndices(that._values);\n if (that.options.selectable === 'multiple') {\n that.select(-1);\n }\n that.select(indices);\n deferred.resolve();\n }\n that._skipUpdate = false;\n return deferred;\n },\n items: function () {\n return this.element.children(ITEMSELECTOR);\n },\n _click: function (e) {\n if (this._touchTriggered) {\n this._touchTriggered = false;\n return;\n }\n if (!e.isDefaultPrevented()) {\n this._triggerClick(e.currentTarget);\n }\n },\n _triggerClick: function (item) {\n if (!this.trigger('click', { item: $(item) })) {\n this.select(item);\n }\n },\n _valueExpr: function (type, values) {\n var that = this;\n var idx = 0;\n var body;\n var comparer;\n var normalized = [];\n if (!that._valueComparer || that._valueType !== type) {\n that._valueType = type;\n for (; idx < values.length; idx++) {\n normalized.push(unifyType(values[idx], type));\n }\n body = 'for (var idx = 0; idx < ' + normalized.length + '; idx++) {' + ' if (current === values[idx]) {' + ' return idx;' + ' }' + '} ' + 'return -1;';\n comparer = new Function('current', 'values', body);\n that._valueComparer = function (current) {\n return comparer(current, normalized);\n };\n }\n return that._valueComparer;\n },\n _dataItemPosition: function (dataItem, values) {\n var value = this._valueGetter(dataItem);\n var valueExpr = this._valueExpr(typeof value, values);\n return valueExpr(value);\n },\n _getter: function () {\n this._valueGetter = kendo.getter(this.options.dataValueField);\n },\n _deselect: function (indices) {\n var that = this;\n var children = that.element[0].children;\n var selectable = that.options.selectable;\n var selectedIndices = that._selectedIndices;\n var dataItems = that._dataItems;\n var values = that._values;\n var removed = [];\n var i = 0;\n var j;\n var index, selectedIndex;\n var removedIndices = 0;\n indices = indices.slice();\n if (selectable === true || !indices.length) {\n for (; i < selectedIndices.length; i++) {\n $(children[selectedIndices[i]]).removeClass('k-state-selected').attr('aria-selected', false);\n removed.push({\n position: i,\n dataItem: dataItems[i]\n });\n }\n that._values = [];\n that._dataItems = [];\n that._selectedIndices = [];\n } else if (selectable === 'multiple') {\n for (; i < indices.length; i++) {\n index = indices[i];\n if (!$(children[index]).hasClass('k-state-selected')) {\n continue;\n }\n for (j = 0; j < selectedIndices.length; j++) {\n selectedIndex = selectedIndices[j];\n if (selectedIndex === index) {\n $(children[selectedIndex]).removeClass('k-state-selected').attr('aria-selected', false);\n var dataItem = this._view[index].item;\n var position = this._dataItemPosition(dataItem, this._values);\n removed.push({\n position: position,\n dataItem: dataItem\n });\n dataItems.splice(j, 1);\n selectedIndices.splice(j, 1);\n indices.splice(i, 1);\n values.splice(j, 1);\n removedIndices += 1;\n i -= 1;\n j -= 1;\n break;\n }\n }\n }\n }\n return {\n indices: indices,\n removed: removed\n };\n },\n _deselectFiltered: function (indices) {\n var children = this.element[0].children;\n var dataItem, index, position;\n var removed = [];\n var idx = 0;\n for (; idx < indices.length; idx++) {\n index = indices[idx];\n dataItem = this._view[index].item;\n position = this._dataItemPosition(dataItem, this._values);\n if (position > -1) {\n removed.push(this.removeAt(position));\n $(children[index]).removeClass('k-state-selected');\n }\n }\n if (removed.length) {\n this.trigger(CHANGE, {\n added: [],\n removed: removed\n });\n return true;\n }\n return false;\n },\n _select: function (indices) {\n var that = this;\n var children = that.element[0].children;\n var data = that._view;\n var dataItem, index;\n var added = [];\n var idx = 0;\n if (last(indices) !== -1) {\n that.focus(indices);\n }\n for (; idx < indices.length; idx++) {\n index = indices[idx];\n dataItem = data[index];\n if (index === -1 || !dataItem) {\n continue;\n }\n dataItem = dataItem.item;\n that._selectedIndices.push(index);\n that._dataItems.push(dataItem);\n that._values.push(that._valueGetter(dataItem));\n $(children[index]).addClass('k-state-selected').attr('aria-selected', true);\n added.push({ dataItem: dataItem });\n }\n return added;\n },\n getElementIndex: function (element) {\n return $(element).data('offset-index');\n },\n _get: function (candidate) {\n if (typeof candidate === 'number') {\n candidate = [candidate];\n } else if (!isArray(candidate)) {\n candidate = this.getElementIndex(candidate);\n candidate = [candidate !== undefined ? candidate : -1];\n }\n return candidate;\n },\n _template: function () {\n var that = this;\n var options = that.options;\n var template = options.template;\n if (!template) {\n template = kendo.template('<li tabindex=\"-1\" role=\"option\" unselectable=\"on\" class=\"k-item\">${' + kendo.expr(options.dataTextField, 'data') + '}</li>', { useWithBlock: false });\n } else {\n template = kendo.template(template);\n template = function (data) {\n return '<li tabindex=\"-1\" role=\"option\" unselectable=\"on\" class=\"k-item\">' + template(data) + '</li>';\n };\n }\n return template;\n },\n _templates: function () {\n var template;\n var options = this.options;\n var templates = {\n template: options.template,\n groupTemplate: options.groupTemplate,\n fixedGroupTemplate: options.fixedGroupTemplate\n };\n if (options.columns) {\n for (var i = 0; i < options.columns.length; i++) {\n var currentColumn = options.columns[i];\n var templateText = currentColumn.field ? currentColumn.field.toString() : 'text';\n templates['column' + i] = currentColumn.template || '#: ' + templateText + '#';\n }\n }\n for (var key in templates) {\n template = templates[key];\n if (template && typeof template !== 'function') {\n templates[key] = kendo.template(template);\n }\n }\n this.templates = templates;\n },\n _normalizeIndices: function (indices) {\n var newIndices = [];\n var idx = 0;\n for (; idx < indices.length; idx++) {\n if (indices[idx] !== undefined) {\n newIndices.push(indices[idx]);\n }\n }\n return newIndices;\n },\n _valueIndices: function (values, indices) {\n var data = this._view;\n var idx = 0;\n var index;\n indices = indices ? indices.slice() : [];\n if (!values.length) {\n return [];\n }\n for (; idx < data.length; idx++) {\n index = this._dataItemPosition(data[idx].item, values);\n if (index !== -1) {\n indices[index] = idx;\n }\n }\n return this._normalizeIndices(indices);\n },\n _firstVisibleItem: function () {\n var element = this.element[0];\n var content = this.content[0];\n var scrollTop = content.scrollTop;\n var itemHeight = $(element.children[0]).height();\n var itemIndex = Math.floor(scrollTop / itemHeight) || 0;\n var item = element.children[itemIndex] || element.lastChild;\n var forward = item.offsetTop < scrollTop;\n while (item) {\n if (forward) {\n if (item.offsetTop + itemHeight > scrollTop || !item.nextSibling) {\n break;\n }\n item = item.nextSibling;\n } else {\n if (item.offsetTop <= scrollTop || !item.previousSibling) {\n break;\n }\n item = item.previousSibling;\n }\n }\n return this._view[$(item).data('offset-index')];\n },\n _fixedHeader: function () {\n if (this.isGrouped() && this.templates.fixedGroupTemplate) {\n this.header.show();\n this.content.scroll(this._onScroll);\n } else {\n this.header.hide();\n this.content.off('scroll', this._onScroll);\n }\n },\n _renderHeader: function () {\n var template = this.templates.fixedGroupTemplate;\n if (!template) {\n return;\n }\n var visibleItem = this._firstVisibleItem();\n if (visibleItem && visibleItem.group.toString().length) {\n this.header.html(template(visibleItem.group));\n }\n },\n _renderItem: function (context) {\n var item = '<li tabindex=\"-1\" role=\"option\" unselectable=\"on\" class=\"k-item';\n var dataItem = context.item;\n var notFirstItem = context.index !== 0;\n var selected = context.selected;\n var isGrouped = this.isGrouped();\n var hasColumns = this.options.columns && this.options.columns.length;\n if (notFirstItem && context.newGroup) {\n item += ' k-first';\n }\n if (context.isLastGroupedItem && hasColumns) {\n item += ' k-last';\n }\n if (selected) {\n item += ' k-state-selected';\n }\n item += '\" aria-selected=\"' + (selected ? 'true' : 'false') + '\" data-offset-index=\"' + context.index + '\">';\n if (hasColumns) {\n item += this._renderColumns(dataItem);\n } else {\n item += this.templates.template(dataItem);\n }\n if (notFirstItem && context.newGroup) {\n if (hasColumns) {\n item += '<div class=\"k-cell k-group-cell\"><span>' + this.templates.groupTemplate(context.group) + '</span></div>';\n } else {\n item += '<div class=\"k-group\">' + this.templates.groupTemplate(context.group) + '</div>';\n }\n } else if (isGrouped && hasColumns) {\n item += '<div class=\\'k-cell k-spacer-cell\\'></div>';\n }\n return item + '</li>';\n },\n _renderColumns: function (dataItem) {\n var item = '';\n for (var i = 0; i < this.options.columns.length; i++) {\n var currentWidth = this.options.columns[i].width;\n var currentWidthInt = parseInt(currentWidth, 10);\n var widthStyle = '';\n if (currentWidth && !isNaN(currentWidthInt)) {\n widthStyle += 'style=\\'width:';\n widthStyle += currentWidthInt;\n widthStyle += percentageUnitsRegex.test(currentWidth) ? '%' : 'px';\n widthStyle += ';\\'';\n }\n item += '<span class=\\'k-cell\\' ' + widthStyle + '>';\n item += this.templates['column' + i](dataItem);\n item += '</span>';\n }\n return item;\n },\n _render: function () {\n var html = '';\n var i = 0;\n var idx = 0;\n var context;\n var dataContext = [];\n var view = this.dataSource.view();\n var values = this.value();\n var group, newGroup, j;\n var isGrouped = this.isGrouped();\n if (isGrouped) {\n for (i = 0; i < view.length; i++) {\n group = view[i];\n newGroup = true;\n for (j = 0; j < group.items.length; j++) {\n context = {\n selected: this._selected(group.items[j], values),\n item: group.items[j],\n group: group.value,\n newGroup: newGroup,\n isLastGroupedItem: j === group.items.length - 1,\n index: idx\n };\n dataContext[idx] = context;\n idx += 1;\n html += this._renderItem(context);\n newGroup = false;\n }\n }\n } else {\n for (i = 0; i < view.length; i++) {\n context = {\n selected: this._selected(view[i], values),\n item: view[i],\n index: i\n };\n dataContext[i] = context;\n html += this._renderItem(context);\n }\n }\n this._view = dataContext;\n this.element[0].innerHTML = html;\n if (isGrouped && dataContext.length) {\n this._renderHeader();\n }\n },\n _selected: function (dataItem, values) {\n var select = !this.isFiltered() || this.options.selectable === 'multiple';\n return select && this._dataItemPosition(dataItem, values) !== -1;\n },\n setDSFilter: function (filter) {\n this._lastDSFilter = extend({}, filter);\n },\n isFiltered: function () {\n if (!this._lastDSFilter) {\n this.setDSFilter(this.dataSource.filter());\n }\n return !kendo.data.Query.compareFilters(this.dataSource.filter(), this._lastDSFilter);\n },\n refresh: function (e) {\n var that = this;\n var action = e && e.action;\n var skipUpdateOnBind = that.options.skipUpdateOnBind;\n var isItemChange = action === 'itemchange';\n var result;\n that.trigger('dataBinding');\n that._angularItems('cleanup');\n that._fixedHeader();\n that._render();\n that.bound(true);\n if (isItemChange || action === 'remove') {\n result = mapChangedItems(that._dataItems, e.items);\n if (result.changed.length) {\n if (isItemChange) {\n that.trigger('selectedItemChange', { items: result.changed });\n } else {\n that.value(that._getValues(result.unchanged));\n }\n }\n } else if (that.isFiltered() || that._skipUpdate || that._emptySearch) {\n that.focus(0);\n if (that._skipUpdate) {\n that._skipUpdate = false;\n that._selectedIndices = that._valueIndices(that._values, that._selectedIndices);\n }\n } else if (!skipUpdateOnBind && (!action || action === 'add')) {\n that.value(that._values);\n }\n if (that._valueDeferred) {\n that._valueDeferred.resolve();\n }\n that._angularItems('compile');\n that.trigger('dataBound');\n },\n bound: function (bound) {\n if (bound === undefined) {\n return this._bound;\n }\n this._bound = bound;\n },\n isGrouped: function () {\n return (this.dataSource.group() || []).length;\n }\n });\n ui.plugin(StaticList);\n function last(list) {\n return list[list.length - 1];\n }\n function getSelectedOption(select) {\n var index = select.selectedIndex;\n return index > -1 ? select.options[index] : {};\n }\n function mapChangedItems(selected, itemsToMatch) {\n var itemsLength = itemsToMatch.length;\n var selectedLength = selected.length;\n var dataItem;\n var found;\n var i, j;\n var changed = [];\n var unchanged = [];\n if (selectedLength) {\n for (i = 0; i < selectedLength; i++) {\n dataItem = selected[i];\n found = false;\n for (j = 0; j < itemsLength; j++) {\n if (dataItem === itemsToMatch[j]) {\n found = true;\n changed.push({\n index: i,\n item: dataItem\n });\n break;\n }\n }\n if (!found) {\n unchanged.push(dataItem);\n }\n }\n }\n return {\n changed: changed,\n unchanged: unchanged\n };\n }\n function isValidFilterExpr(expression) {\n if (!expression || $.isEmptyObject(expression)) {\n return false;\n }\n if (expression.filters && !expression.filters.length) {\n return false;\n }\n return true;\n }\n function removeFiltersForField(expression, field) {\n var filters;\n var found = false;\n if (expression.filters) {\n filters = $.grep(expression.filters, function (filter) {\n found = removeFiltersForField(filter, field);\n if (filter.filters) {\n return filter.filters.length;\n } else {\n return filter.field != field;\n }\n });\n if (!found && expression.filters.length !== filters.length) {\n found = true;\n }\n expression.filters = filters;\n }\n return found;\n }\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.calendar', [\n 'kendo.core',\n 'kendo.selectable'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'calendar',\n name: 'Calendar',\n category: 'web',\n description: 'The Calendar widget renders a graphical calendar that supports navigation and selection.',\n depends: [\n 'core',\n 'selectable'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, support = kendo.support, ui = kendo.ui, Widget = ui.Widget, keys = kendo.keys, parse = kendo.parseDate, adjustDST = kendo.date.adjustDST, weekInYear = kendo.date.weekInYear, Selectable = kendo.ui.Selectable, extractFormat = kendo._extractFormat, template = kendo.template, getCulture = kendo.getCulture, transitions = kendo.support.transitions, transitionOrigin = transitions ? transitions.css + 'transform-origin' : '', cellTemplate = template('<td#=data.cssClass# role=\"gridcell\"><a tabindex=\"-1\" class=\"k-link\" href=\"\\\\#\" data-#=data.ns#value=\"#=data.dateString#\">#=data.value#</a></td>', { useWithBlock: false }), emptyCellTemplate = template('<td role=\"gridcell\" class=\"k-out-of-range\"><a class=\"k-link\"></a></td>', { useWithBlock: false }), otherMonthCellTemplate = template('<td role=\"gridcell\" class=\"k-out-of-range\"> </td>', { useWithBlock: false }), weekNumberTemplate = template('<td class=\"k-alt\">#= data.weekNumber #</td>', { useWithBlock: false }), browser = kendo.support.browser, isIE8 = browser.msie && browser.version < 9, outerWidth = kendo._outerWidth, ns = '.kendoCalendar', CLICK = 'click' + ns, KEYDOWN_NS = 'keydown' + ns, ID = 'id', MIN = 'min', LEFT = 'left', SLIDE = 'slideIn', MONTH = 'month', CENTURY = 'century', CHANGE = 'change', NAVIGATE = 'navigate', VALUE = 'value', HOVER = 'k-state-hover', DISABLED = 'k-state-disabled', FOCUSED = 'k-state-focused', OTHERMONTH = 'k-other-month', OTHERMONTHCLASS = ' class=\"' + OTHERMONTH + '\"', OUTOFRANGE = 'k-out-of-range', TODAY = 'k-nav-today', CELLSELECTOR = 'td:has(.k-link)', CELLSELECTORVALID = 'td:has(.k-link):not(.' + DISABLED + '):not(.' + OUTOFRANGE + ')', WEEKCOLUMNSELECTOR = 'td:not(:has(.k-link))', SELECTED = 'k-state-selected', BLUR = 'blur' + ns, FOCUS = 'focus', FOCUS_WITH_NS = FOCUS + ns, MOUSEENTER = support.touch ? 'touchstart' : 'mouseenter', MOUSEENTER_WITH_NS = support.touch ? 'touchstart' + ns : 'mouseenter' + ns, MOUSELEAVE = support.touch ? 'touchend' + ns + ' touchmove' + ns : 'mouseleave' + ns, MS_PER_MINUTE = 60000, MS_PER_DAY = 86400000, PREVARROW = '_prevArrow', NEXTARROW = '_nextArrow', ARIA_DISABLED = 'aria-disabled', ARIA_SELECTED = 'aria-selected', ARIA_LABEL = 'aria-label', proxy = $.proxy, extend = $.extend, DATE = Date, views = {\n month: 0,\n year: 1,\n decade: 2,\n century: 3\n }, HEADERSELECTOR = '.k-header, .k-calendar-header', CLASSIC_HEADER_TEMPLATE = '<div class=\"k-header\">' + '<a href=\"\\\\#\" #=actionAttr#=\"prev\" role=\"button\" class=\"k-link k-nav-prev\" ' + ARIA_LABEL + '=\"Previous\"><span class=\"k-icon k-i-arrow-60-left\"></span></a>' + '<a href=\"\\\\#\" #=actionAttr#=\"nav-up\" role=\"button\" aria-live=\"assertive\" aria-atomic=\"true\" class=\"k-link k-nav-fast\"></a>' + '<a href=\"\\\\#\" #=actionAttr#=\"next\" role=\"button\" class=\"k-link k-nav-next\" ' + ARIA_LABEL + '=\"Next\"><span class=\"k-icon k-i-arrow-60-right\"></span></a>' + '</div>', MODERN_HEADER_TEMPLATE = '<div class=\"k-calendar-header\">' + '<a href=\"\\\\#\" #=actionAttr#=\"nav-up\" role=\"button\" aria-live=\"assertive\" aria-atomic=\"true\" class=\"k-button k-title\"></a>' + '<span class=\"k-calendar-nav\">' + '<a #=actionAttr#=\"prev\" class=\"k-button k-button-icon k-prev-view\">' + '<span class=\"k-icon k-i-arrow-60-left\"></span>' + '</a>' + '<a #=actionAttr#=\"today\" class=\"k-today\">#=messages.today#</a>' + '<a #=actionAttr#=\"next\" class=\"k-button k-button-icon k-next-view\">' + '<span class=\"k-icon k-i-arrow-60-right\"></span>' + '</a>' + '</span>' + '</div>';\n var Calendar = Widget.extend({\n init: function (element, options) {\n var that = this, value, id;\n options = options || {};\n options.componentType = options.componentType || 'classic';\n Widget.fn.init.call(that, element, options);\n element = that.wrapper = that.element;\n options = that.options;\n options.url = kendo.unescape(options.url);\n that.options.disableDates = getDisabledExpr(that.options.disableDates);\n that._templates();\n that._selectable();\n that._header();\n that._viewWrapper();\n if (that.options.hasFooter) {\n that._footer(that.footer);\n }\n id = element.addClass('k-widget k-calendar ' + (options.weekNumber ? ' k-week-number' : '')).on(MOUSEENTER_WITH_NS + ' ' + MOUSELEAVE, CELLSELECTOR, mousetoggle).on(KEYDOWN_NS, 'table.k-content', proxy(that._move, that)).on(CLICK + ' touchend', CELLSELECTOR, function (e) {\n var link = e.currentTarget.firstChild, value = toDateObject(link);\n if (link.href.indexOf('#') != -1) {\n e.preventDefault();\n }\n if (that._view.name == 'month' && that.options.disableDates(value)) {\n return;\n }\n if (that._view.name != 'month' || options.selectable == 'single') {\n that._click($(link));\n }\n }).on('mouseup' + ns, 'table.k-content, .k-footer', function () {\n that._focusView(that.options.focusOnNav !== false);\n }).attr(ID);\n if (id) {\n that._cellID = id + '_cell_selected';\n }\n if (that._isMultipleSelection() && that.options.weekNumber) {\n element.on(CLICK, WEEKCOLUMNSELECTOR, function (e) {\n var first = $(e.currentTarget).closest('tr').find(CELLSELECTORVALID).first(), last = that.selectable._lastActive = $(e.currentTarget).closest('tr').find(CELLSELECTORVALID).last();\n that.selectable.selectRange(first, last, { event: e });\n that._current = that._value = toDateObject(last.find('a'));\n that._class(FOCUSED, that._current);\n });\n }\n normalize(options);\n value = parse(options.value, options.format, options.culture);\n that._selectDates = [];\n that._index = views[options.start];\n that._current = new DATE(+restrictValue(value, options.min, options.max));\n that._addClassProxy = function () {\n that._active = true;\n if (that._cell.hasClass(DISABLED)) {\n var todayString = that._view.toDateString(getToday());\n that._cell = that._cellByDate(todayString);\n }\n that._cell.addClass(FOCUSED);\n };\n that._removeClassProxy = function () {\n that._active = false;\n that._cell.removeClass(FOCUSED);\n };\n that.value(value);\n if (that._isMultipleSelection() && options.selectDates.length > 0) {\n that.selectDates(options.selectDates);\n }\n kendo.notify(that);\n },\n options: {\n name: 'Calendar',\n value: null,\n min: new DATE(1900, 0, 1),\n max: new DATE(2099, 11, 31),\n dates: [],\n disableDates: null,\n url: '',\n culture: '',\n footer: '',\n format: '',\n month: {},\n weekNumber: false,\n selectable: 'single',\n selectDates: [],\n start: MONTH,\n depth: MONTH,\n animation: {\n horizontal: {\n effects: SLIDE,\n reverse: true,\n duration: 500,\n divisor: 2\n },\n vertical: {\n effects: 'zoomIn',\n duration: 400\n }\n },\n messages: {\n weekColumnHeader: '',\n today: 'Today'\n },\n componentType: 'classic'\n },\n events: [\n CHANGE,\n NAVIGATE\n ],\n componentTypes: {\n 'classic': {\n header: { template: CLASSIC_HEADER_TEMPLATE },\n hasFooter: true,\n linksSelector: '.k-link',\n contentClasses: 'k-content'\n },\n 'modern': {\n header: { template: MODERN_HEADER_TEMPLATE },\n hasFooter: false,\n linksSelector: '.k-button',\n contentClasses: 'k-content k-calendar-content'\n }\n },\n setOptions: function (options) {\n var that = this;\n normalize(options);\n options.disableDates = getDisabledExpr(options.disableDates);\n that._destroySelectable();\n Widget.fn.setOptions.call(that, options);\n that._templates();\n that._selectable();\n that._viewWrapper();\n if (that.options.hasFooter) {\n that._footer(that.footer);\n } else {\n that.element.find('.k-footer').hide();\n }\n that._index = views[that.options.start];\n that.navigate();\n if (options.weekNumber) {\n that.element.addClass('k-week-number');\n }\n },\n destroy: function () {\n var that = this, today = that._today;\n that.element.off(ns);\n that._title.off(ns);\n that[PREVARROW].off(ns);\n that[NEXTARROW].off(ns);\n that._destroySelectable();\n kendo.destroy(that._table);\n if (today) {\n kendo.destroy(today.off(ns));\n }\n Widget.fn.destroy.call(that);\n },\n current: function () {\n return this._current;\n },\n view: function () {\n return this._view;\n },\n focus: function (table) {\n table = table || this._table;\n this._bindTable(table);\n table.trigger('focus');\n },\n min: function (value) {\n return this._option(MIN, value);\n },\n max: function (value) {\n return this._option('max', value);\n },\n navigateToPast: function () {\n this._navigate(PREVARROW, -1);\n },\n navigateToFuture: function () {\n this._navigate(NEXTARROW, 1);\n },\n navigateUp: function () {\n var that = this, index = that._index;\n if (that._title.hasClass(DISABLED)) {\n return;\n }\n that.navigate(that._current, ++index);\n },\n navigateDown: function (value) {\n var that = this, index = that._index, depth = that.options.depth;\n if (!value) {\n return;\n }\n if (index === views[depth]) {\n if (!isEqualDate(that._value, that._current) || !isEqualDate(that._value, value)) {\n that.value(value);\n that.trigger(CHANGE);\n }\n return;\n }\n that.navigate(value, --index);\n },\n navigate: function (value, view) {\n view = isNaN(view) ? views[view] : view;\n var that = this, options = that.options, culture = options.culture, min = options.min, max = options.max, title = that._title, from = that._table, old = that._oldTable, currentValue = that._current, future = value && +value > +currentValue, vertical = view !== undefined && view !== that._index, to, currentView, compare, disabled, viewWrapper = that.element.children('.k-calendar-view');\n if (!value) {\n value = currentValue;\n }\n that._current = value = new DATE(+restrictValue(value, min, max));\n if (view === undefined) {\n view = that._index;\n } else {\n that._index = view;\n }\n that._view = currentView = calendar.views[view];\n compare = currentView.compare;\n disabled = view === views[CENTURY];\n title.toggleClass(DISABLED, disabled).attr(ARIA_DISABLED, disabled);\n disabled = compare(value, min) < 1;\n that[PREVARROW].toggleClass(DISABLED, disabled).attr(ARIA_DISABLED, disabled);\n if (that[PREVARROW].hasClass(DISABLED)) {\n that[PREVARROW].removeClass(HOVER);\n }\n disabled = compare(value, max) > -1;\n that[NEXTARROW].toggleClass(DISABLED, disabled).attr(ARIA_DISABLED, disabled);\n if (that[NEXTARROW].hasClass(DISABLED)) {\n that[NEXTARROW].removeClass(HOVER);\n }\n if (from && old && old.data('animating')) {\n old.kendoStop(true, true);\n from.kendoStop(true, true);\n }\n that._oldTable = from;\n if (!from || that._changeView) {\n title.html(currentView.title(value, min, max, culture));\n that._table = to = $(currentView.content(extend({\n min: min,\n max: max,\n date: value,\n url: options.url,\n dates: options.dates,\n format: options.format,\n otherMonth: true,\n culture: culture,\n disableDates: options.disableDates,\n isWeekColumnVisible: options.weekNumber,\n messages: options.messages,\n contentClasses: that.options.contentClasses\n }, that[currentView.name])));\n addClassToViewContainer(to, currentView.name);\n makeUnselectable(to);\n var replace = from && from.data('start') === to.data('start');\n that._animate({\n from: from,\n to: to,\n vertical: vertical,\n future: future,\n replace: replace\n });\n if (that.options.componentType === 'modern') {\n viewWrapper.removeClass('k-calendar-monthview k-calendar-yearview k-calendar-decadeview k-calendar-centuryview');\n viewWrapper.addClass('k-calendar-' + currentView.name + 'view');\n }\n that.trigger(NAVIGATE);\n that._focus(value);\n }\n if (view === views[options.depth] && that._selectDates.length > 0) {\n that._visualizeSelectedDatesInView();\n }\n if (that.options.selectable === 'single') {\n if (view === views[options.depth] && that._value && !that.options.disableDates(that._value)) {\n that._class('k-state-selected', that._value);\n }\n }\n that._class(FOCUSED, value);\n if (!from && that._cell) {\n that._cell.removeClass(FOCUSED);\n }\n that._changeView = true;\n },\n selectDates: function (dates) {\n var that = this, validSelectedDates, datesUnique;\n if (dates === undefined) {\n return that._selectDates;\n }\n datesUnique = dates.map(function (date) {\n return date.getTime();\n }).filter(function (date, position, array) {\n return array.indexOf(date) === position;\n }).map(function (time) {\n return new Date(time);\n });\n validSelectedDates = $.grep(datesUnique, function (value) {\n if (value) {\n return +that._validateValue(new Date(value.setHours(0, 0, 0, 0))) === +value;\n }\n });\n that._selectDates = validSelectedDates.length > 0 ? validSelectedDates : datesUnique.length === 0 ? datesUnique : that._selectDates;\n that._visualizeSelectedDatesInView();\n },\n value: function (value) {\n var that = this, old = that._view, view = that._view;\n if (value === undefined) {\n return that._value;\n }\n value = that._validateValue(value);\n if (value && that._isMultipleSelection()) {\n var date = new Date(+value);\n date.setHours(0, 0, 0, 0);\n that._selectDates = [date];\n that.selectable._lastActive = null;\n }\n if (old && value === null && that._cell) {\n that._cell.removeClass(SELECTED);\n } else {\n that._changeView = !value || view && view.compare(value, that._current) !== 0;\n that.navigate(value);\n }\n },\n _validateValue: function (value) {\n var that = this, options = that.options, min = options.min, max = options.max;\n if (value === null) {\n that._current = createDate(that._current.getFullYear(), that._current.getMonth(), that._current.getDate());\n }\n value = parse(value, options.format, options.culture);\n if (value !== null) {\n value = new DATE(+value);\n if (!isInRange(value, min, max)) {\n value = null;\n }\n }\n if (value === null || !that.options.disableDates(new Date(+value))) {\n that._value = value;\n } else if (that._value === undefined) {\n that._value = null;\n }\n return that._value;\n },\n _visualizeSelectedDatesInView: function () {\n var that = this;\n var selectedDates = {};\n $.each(that._selectDates, function (index, value) {\n selectedDates[kendo.calendar.views[0].toDateString(value)] = value;\n });\n that.selectable.clear();\n var cells = that._table.find(CELLSELECTOR).filter(function (index, element) {\n return selectedDates[$(element.firstChild).attr(kendo.attr(VALUE))];\n });\n if (cells.length > 0) {\n that.selectable._selectElement(cells, true);\n }\n },\n _isMultipleSelection: function () {\n var that = this;\n return that.options.selectable === 'multiple';\n },\n _selectable: function () {\n var that = this;\n if (!that._isMultipleSelection()) {\n return;\n }\n var selectable = that.options.selectable, selectableOptions = Selectable.parseOptions(selectable);\n if (selectableOptions.multiple) {\n that.element.attr('aria-multiselectable', 'true');\n }\n that.selectable = new Selectable(that.wrapper, {\n aria: true,\n inputSelectors: 'input,textarea,.k-multiselect-wrap,select,button,.k-button>span,.k-button>img,span.k-icon.k-i-arrow-60-down,span.k-icon.k-i-arrow-60-up',\n multiple: selectableOptions.multiple,\n filter: 'table.k-month:eq(0) ' + CELLSELECTORVALID,\n change: proxy(that._onSelect, that),\n relatedTarget: proxy(that._onRelatedTarget, that)\n });\n },\n _onRelatedTarget: function (target) {\n var that = this;\n if (that.selectable.options.multiple && target.is(CELLSELECTORVALID)) {\n that._current = toDateObject(target.find('a'));\n that._class(FOCUSED, toDateObject(target.find('a')));\n }\n },\n _onSelect: function (e) {\n var that = this, eventArgs = e, selectableOptions = Selectable.parseOptions(that.options.selectable);\n if (!selectableOptions.multiple) {\n if ($(eventArgs.event.currentTarget).is('td') && !$(eventArgs.event.currentTarget).hasClass('k-state-selected')) {\n $(eventArgs.event.currentTarget).addClass('k-state-selected');\n } else {\n that._click($(eventArgs.event.currentTarget).find('a'));\n }\n return;\n }\n if (eventArgs.event.ctrlKey || eventArgs.event.metaKey) {\n if ($(eventArgs.event.currentTarget).is(CELLSELECTORVALID)) {\n that._toggleSelection($(eventArgs.event.currentTarget));\n } else {\n that._cellsBySelector(CELLSELECTORVALID).each(function (index, element) {\n var value = toDateObject($(element).find('a'));\n that._deselect(value);\n });\n that._addSelectedCellsToArray();\n }\n } else if (eventArgs.event.shiftKey) {\n that._rangeSelection(that._cell);\n } else if ($(eventArgs.event.currentTarget).is(CELLSELECTOR)) {\n that.value(toDateObject($(eventArgs.event.currentTarget).find('a')));\n } else {\n that._selectDates = [];\n that._addSelectedCellsToArray();\n }\n that.trigger(CHANGE);\n },\n _destroySelectable: function () {\n var that = this;\n if (that.selectable) {\n that.selectable.destroy();\n that.selectable = null;\n }\n },\n _toggleSelection: function (currentCell) {\n var that = this, date = toDateObject(currentCell.find('a'));\n if (currentCell.hasClass('k-state-selected')) {\n that._selectDates.push(date);\n } else {\n that._deselect(date);\n }\n },\n _rangeSelection: function (toDateCell, startDate) {\n var that = this, fromDate = startDate || toDateObject(that.selectable.value().first().find('a')), toDate = toDateObject(toDateCell.find('a')), daysDifference;\n if (that.selectable._lastActive || that._value) {\n fromDate = that.selectable._lastActive ? toDateObject(that.selectable._lastActive.find('a')) : new Date(+that._value);\n } else {\n that.selectable._lastActive = startDate ? that._cellByDate(that._view.toDateString(startDate), CELLSELECTORVALID) : that.selectable.value().first();\n }\n that._selectDates = [];\n daysDifference = daysBetweenTwoDates(fromDate, toDate);\n addDaysToArray(that._selectDates, daysDifference, fromDate, that.options.disableDates);\n that._visualizeSelectedDatesInView();\n },\n _cellsBySelector: function (selector) {\n var that = this;\n return that._table.find(selector);\n },\n _addSelectedCellsToArray: function () {\n var that = this;\n that.selectable.value().each(function (index, item) {\n var date = toDateObject($(item.firstChild));\n if (!that.options.disableDates(date)) {\n that._selectDates.push(date);\n }\n });\n },\n _deselect: function (date) {\n var that = this;\n var currentDateIndex = that._selectDates.map(Number).indexOf(+date);\n if (currentDateIndex != -1) {\n that._selectDates.splice(currentDateIndex, 1);\n }\n },\n _dateInView: function (date) {\n var that = this, firstDateInView = toDateObject(that._cellsBySelector(CELLSELECTORVALID + ':first').find('a')), lastDateInView = toDateObject(that._cellsBySelector(CELLSELECTORVALID + ':last').find('a'));\n return +date <= +lastDateInView && +date >= +firstDateInView;\n },\n _isNavigatable: function (currentValue, cellIndex) {\n var that = this;\n var isDisabled = that.options.disableDates;\n var cell;\n var index;\n if (that._view.name == 'month') {\n return !isDisabled(currentValue);\n } else {\n index = that.wrapper.find('.' + FOCUSED).index();\n cell = that.wrapper.find('.k-content td:eq(' + (index + cellIndex) + ')');\n return cell.is(CELLSELECTORVALID) || !isDisabled(currentValue);\n }\n },\n _move: function (e) {\n var that = this, options = that.options, key = e.keyCode, view = that._view, index = that._index, min = that.options.min, max = that.options.max, currentValue = new DATE(+that._current), isRtl = kendo.support.isRtl(that.wrapper), isDisabled = that.options.disableDates, value, prevent, method, temp;\n if (e.target === that._table[0]) {\n that._active = true;\n }\n if (key == keys.RIGHT && !isRtl || key == keys.LEFT && isRtl) {\n value = 1;\n prevent = true;\n } else if (key == keys.LEFT && !isRtl || key == keys.RIGHT && isRtl) {\n value = -1;\n prevent = true;\n } else if (key == keys.UP) {\n value = index === 0 ? -7 : -4;\n prevent = true;\n } else if (key == keys.DOWN) {\n value = index === 0 ? 7 : 4;\n prevent = true;\n } else if (key == keys.SPACEBAR) {\n value = 0;\n prevent = true;\n } else if (key == keys.HOME || key == keys.END) {\n method = key == keys.HOME ? 'first' : 'last';\n temp = view[method](currentValue);\n currentValue = new DATE(temp.getFullYear(), temp.getMonth(), temp.getDate(), currentValue.getHours(), currentValue.getMinutes(), currentValue.getSeconds(), currentValue.getMilliseconds());\n currentValue.setFullYear(temp.getFullYear());\n prevent = true;\n }\n if (e.ctrlKey || e.metaKey) {\n if (key == keys.RIGHT && !isRtl || key == keys.LEFT && isRtl) {\n that.navigateToFuture();\n prevent = true;\n } else if (key == keys.LEFT && !isRtl || key == keys.RIGHT && isRtl) {\n that.navigateToPast();\n prevent = true;\n } else if (key == keys.UP) {\n that.navigateUp();\n prevent = true;\n } else if (key == keys.DOWN) {\n that._click($(that._cell[0].firstChild));\n prevent = true;\n } else if ((key == keys.ENTER || key == keys.SPACEBAR) && that._isMultipleSelection()) {\n that._keyboardToggleSelection(e);\n var focusedDate = toDateObject($(that._cell[0]).find('a'));\n that._class(FOCUSED, focusedDate);\n }\n } else if (e.shiftKey) {\n if (value !== undefined || method) {\n if (!method) {\n view.setDate(currentValue, value);\n }\n if (!isInRange(currentValue, min, max)) {\n currentValue = restrictValue(currentValue, options.min, options.max);\n }\n if (isDisabled(currentValue)) {\n currentValue = that._nextNavigatable(currentValue, value);\n }\n min = createDate(min.getFullYear(), min.getMonth(), min.getDate());\n if (that._isMultipleSelection()) {\n that._keyboardRangeSelection(e, currentValue);\n } else {\n that._focus(currentValue);\n }\n }\n } else {\n if (key == keys.ENTER || key == keys.SPACEBAR) {\n if (view.name == 'month' && that._isMultipleSelection()) {\n that.value(toDateObject($(that._cell.find('a'))));\n that.selectable._lastActive = $(that._cell[0]);\n that.trigger(CHANGE);\n } else {\n that._click($(that._cell[0].firstChild));\n }\n prevent = true;\n } else if (key == keys.PAGEUP) {\n prevent = true;\n that.navigateToPast();\n } else if (key == keys.PAGEDOWN) {\n prevent = true;\n that.navigateToFuture();\n }\n if (value || method) {\n if (!method) {\n view.setDate(currentValue, value);\n }\n min = createDate(min.getFullYear(), min.getMonth(), min.getDate());\n if (!isInRange(currentValue, min, max)) {\n currentValue = restrictValue(currentValue, options.min, options.max);\n }\n if (!that._isNavigatable(currentValue, value)) {\n currentValue = that._nextNavigatable(currentValue, value);\n }\n if (that._isMultipleSelection()) {\n if (!that._dateInView(currentValue)) {\n that.navigate(currentValue);\n } else {\n that._current = currentValue;\n that._class(FOCUSED, currentValue);\n }\n } else {\n that._focus(currentValue);\n }\n }\n }\n if (prevent) {\n e.preventDefault();\n }\n return that._current;\n },\n _keyboardRangeSelection: function (event, currentValue) {\n var that = this, fromDate, daysDifference;\n if (!that._dateInView(currentValue)) {\n that._selectDates = [];\n fromDate = that.selectable._lastActive ? toDateObject(that.selectable._lastActive.find('a')) : currentValue;\n daysDifference = daysBetweenTwoDates(fromDate, new Date(+currentValue));\n addDaysToArray(that._selectDates, daysDifference, fromDate, that.options.disableDates);\n that.navigate(currentValue);\n that._current = currentValue;\n that.selectable._lastActive = that.selectable._lastActive || that._cellByDate(that._view.toDateString(currentValue), CELLSELECTORVALID);\n that.trigger(CHANGE);\n return;\n }\n that.selectable.options.filter = that.wrapper.find('table').length > 1 && +currentValue > +that._current ? 'table.k-month:eq(1) ' + CELLSELECTORVALID : 'table.k-month:eq(0) ' + CELLSELECTORVALID;\n that._class(FOCUSED, currentValue);\n that._current = currentValue;\n that._rangeSelection(that._cellByDate(that._view.toDateString(currentValue), CELLSELECTORVALID), currentValue);\n that.trigger(CHANGE);\n that.selectable.options.filter = 'table.k-month:eq(0) ' + CELLSELECTORVALID;\n },\n _keyboardToggleSelection: function (event) {\n var that = this;\n event.currentTarget = that._cell[0];\n that.selectable._lastActive = $(that._cell[0]);\n if ($(that._cell[0]).hasClass(SELECTED)) {\n that.selectable._unselect($(that._cell[0]));\n that.selectable.trigger(CHANGE, { event: event });\n } else {\n that.selectable.value($(that._cell[0]), { event: event });\n }\n },\n _nextNavigatable: function (currentValue, value) {\n var that = this, disabled = true, view = that._view, min = that.options.min, max = that.options.max, isDisabled = that.options.disableDates, navigatableDate = new Date(currentValue.getTime());\n view.setDate(navigatableDate, -value);\n while (disabled) {\n view.setDate(currentValue, value);\n if (!isInRange(currentValue, min, max)) {\n currentValue = navigatableDate;\n break;\n }\n disabled = isDisabled(currentValue);\n }\n return currentValue;\n },\n _animate: function (options) {\n var that = this;\n var from = options.from;\n var to = options.to;\n var active = that._active;\n var viewWrapper = that.element.children('.k-calendar-view');\n if (!from) {\n viewWrapper.append(to);\n that._bindTable(to);\n } else if (from.parent().data('animating')) {\n from.off(ns);\n from.parent().kendoStop(true, true).remove();\n from.remove();\n viewWrapper.append(to);\n that._focusView(active);\n } else if (!from.is(':visible') || that.options.animation === false || options.replace) {\n to.insertAfter(from);\n from.off(ns).remove();\n that._focusView(active);\n } else {\n that[options.vertical ? '_vertical' : '_horizontal'](from, to, options.future);\n }\n },\n _horizontal: function (from, to, future) {\n var that = this, active = that._active, horizontal = that.options.animation.horizontal, effects = horizontal.effects, viewWidth = outerWidth(from);\n if (effects && effects.indexOf(SLIDE) != -1) {\n from.add(to).css({ width: viewWidth });\n from.wrap('<div/>');\n that._focusView(active, from);\n from.parent().css({\n position: 'relative',\n width: viewWidth * 2,\n 'float': LEFT,\n 'margin-left': future ? 0 : -viewWidth\n });\n to[future ? 'insertAfter' : 'insertBefore'](from);\n extend(horizontal, {\n effects: SLIDE + ':' + (future ? 'right' : LEFT),\n complete: function () {\n from.off(ns).remove();\n that._oldTable = null;\n to.unwrap();\n that._focusView(active);\n }\n });\n from.parent().kendoStop(true, true).kendoAnimate(horizontal);\n }\n },\n _vertical: function (from, to) {\n var that = this, vertical = that.options.animation.vertical, effects = vertical.effects, active = that._active, cell, position;\n if (effects && effects.indexOf('zoom') != -1) {\n to.insertBefore(from);\n from.css({\n position: 'absolute',\n width: to.width()\n });\n if (transitionOrigin) {\n cell = that._cellByDate(that._view.toDateString(that._current));\n position = cell.position();\n position = position.left + parseInt(cell.width() / 2, 10) + 'px' + ' ' + (position.top + parseInt(cell.height() / 2, 10) + 'px');\n to.css(transitionOrigin, position);\n }\n from.kendoStop(true, true).kendoAnimate({\n effects: 'fadeOut',\n duration: 600,\n complete: function () {\n from.off(ns).remove();\n that._oldTable = null;\n that._focusView(active);\n }\n });\n to.kendoStop(true, true).kendoAnimate(vertical);\n }\n },\n _cellByDate: function (value, selector) {\n return this._table.find(selector ? selector : 'td:not(.' + OTHERMONTH + ')').filter(function () {\n return $(this.firstChild).attr(kendo.attr(VALUE)) === value;\n });\n },\n _class: function (className, date) {\n var that = this, id = that._cellID, cell = that._cell, value = that._view.toDateString(date), disabledDate;\n if (cell && cell.length) {\n cell[0].removeAttribute(ARIA_SELECTED);\n cell[0].removeAttribute(ARIA_LABEL);\n cell[0].removeAttribute(ID);\n }\n if (date && that._view.name == 'month') {\n disabledDate = that.options.disableDates(date);\n }\n that._cellsBySelector(that._isMultipleSelection() ? CELLSELECTOR : 'td:not(.' + OTHERMONTH + ')').removeClass(className);\n cell = that._cellByDate(value, that.options.selectable == 'multiple' ? CELLSELECTOR : 'td:not(.' + OTHERMONTH + ')').attr(ARIA_SELECTED, true);\n if (className === FOCUSED && !that._active && that.options.focusOnNav !== false || disabledDate) {\n className = '';\n }\n cell.addClass(className);\n if (cell[0]) {\n that._cell = cell;\n }\n if (id) {\n cell.attr(ID, id);\n that._table[0].removeAttribute('aria-activedescendant');\n that._table.attr('aria-activedescendant', id);\n }\n },\n _bindTable: function (table) {\n table.on(FOCUS_WITH_NS, this._addClassProxy).on(BLUR, this._removeClassProxy);\n },\n _click: function (link) {\n var that = this, options = that.options, currentValue = new Date(+that._current), value = toDateObject(link);\n adjustDST(value, 0);\n if (that._view.name == 'month' && that.options.disableDates(value)) {\n value = that._value;\n }\n that._view.setDate(currentValue, value);\n that.navigateDown(restrictValue(currentValue, options.min, options.max));\n },\n _focus: function (value) {\n var that = this, view = that._view;\n if (view.compare(value, that._current) !== 0) {\n that.navigate(value);\n } else {\n that._current = value;\n that._class(FOCUSED, value);\n }\n },\n _focusView: function (active, table) {\n if (active) {\n this.focus(table);\n }\n },\n _viewWrapper: function () {\n var that = this;\n var element = that.element;\n var viewWrapper = element.children('.k-calendar-view');\n if (!viewWrapper[0]) {\n viewWrapper = $('<div class=\\'k-calendar-view\\' />').insertAfter(element.find(HEADERSELECTOR));\n }\n },\n _footer: function (template) {\n var that = this, today = getToday(), element = that.element, footer = element.find('.k-footer');\n if (!template) {\n that._toggle(false);\n footer.hide();\n return;\n }\n if (!footer[0]) {\n footer = $('<div class=\"k-footer\"><a href=\"#\" class=\"k-link k-nav-today\"></a></div>').appendTo(element);\n }\n that._today = footer.show().find('.k-link').html(template(today)).attr('title', kendo.toString(today, 'D', that.options.culture));\n that._toggle();\n },\n _header: function () {\n var that = this, element = that.element, linksSelector = that.options.linksSelector;\n if (!element.find(HEADERSELECTOR)[0]) {\n element.html(kendo.template(that.options.header.template)($.extend(true, {}, that.options, { actionAttr: kendo.attr('action') })));\n }\n element.find(linksSelector).on(MOUSEENTER_WITH_NS + ' ' + MOUSELEAVE + ' ' + FOCUS_WITH_NS + ' ' + BLUR, mousetoggle).on(CLICK + ' touchend' + ns, function () {\n return false;\n });\n that._title = element.find('[' + kendo.attr('action') + '=\"nav-up\"]').on(CLICK + ' touchend' + ns, function () {\n that._active = that.options.focusOnNav !== false;\n that.navigateUp();\n });\n that[PREVARROW] = element.find('[' + kendo.attr('action') + '=\"prev\"]').on(CLICK + ' touchend' + ns, function () {\n that._active = that.options.focusOnNav !== false;\n that.navigateToPast();\n });\n that[NEXTARROW] = element.find('[' + kendo.attr('action') + '=\"next\"]').on(CLICK + ' touchend' + ns, function () {\n that._active = that.options.focusOnNav !== false;\n that.navigateToFuture();\n });\n element.find('[' + kendo.attr('action') + '=\"today\"]').on(CLICK + ' touchend' + ns, proxy(that._todayClick, that));\n },\n _navigate: function (arrow, modifier) {\n var that = this, index = that._index + 1, currentValue = new DATE(+that._current);\n if (that._isMultipleSelection()) {\n var firstDayCurrentMonth = that._table.find('td:not(.k-other-month):not(.k-out-of-range)').has('.k-link').first();\n currentValue = toDateObject(firstDayCurrentMonth.find('a'));\n that._current = new Date(+currentValue);\n }\n arrow = that[arrow];\n if (!arrow.hasClass(DISABLED)) {\n if (index > 3) {\n currentValue.setFullYear(currentValue.getFullYear() + 100 * modifier);\n } else {\n calendar.views[index].setDate(currentValue, modifier);\n }\n that.navigate(currentValue);\n }\n },\n _option: function (option, value) {\n var that = this, options = that.options, currentValue = that._value || that._current, isBigger;\n if (value === undefined) {\n return options[option];\n }\n value = parse(value, options.format, options.culture);\n if (!value) {\n return;\n }\n options[option] = new DATE(+value);\n if (option === MIN) {\n isBigger = value > currentValue;\n } else {\n isBigger = currentValue > value;\n }\n if (isBigger || isEqualMonth(currentValue, value)) {\n if (isBigger) {\n that._value = null;\n }\n that._changeView = true;\n }\n if (!that._changeView) {\n that._changeView = !!(options.month.content || options.month.empty);\n }\n that.navigate(that._value);\n that._toggle();\n },\n _toggle: function (toggle) {\n var that = this, options = that.options, isTodayDisabled = that.options.disableDates(getToday()), link = that._today;\n if (toggle === undefined) {\n toggle = isInRange(getToday(), options.min, options.max);\n }\n if (link) {\n link.off(CLICK);\n if (toggle && !isTodayDisabled) {\n link.addClass(TODAY).removeClass(DISABLED).on(CLICK, proxy(that._todayClick, that));\n } else {\n link.removeClass(TODAY).addClass(DISABLED).on(CLICK, prevent);\n }\n }\n },\n _todayClick: function (e) {\n var that = this, depth = views[that.options.depth], disabled = that.options.disableDates, today = getToday();\n e.preventDefault();\n if (disabled(today)) {\n return;\n }\n if (that._view.compare(that._current, today) === 0 && that._index == depth) {\n that._changeView = false;\n }\n if (that._isMultipleSelection()) {\n that._selectDates = [today];\n that.selectable._lastActive = null;\n }\n that._value = today;\n that.navigate(today, depth);\n that.trigger(CHANGE);\n },\n _templates: function () {\n var that = this, options = that.options, footer = options.footer, month = options.month, content = month.content, weekNumber = month.weekNumber, empty = month.empty, footerTemplate = '#= kendo.toString(data,\"D\",\"' + options.culture + '\") #';\n that.month = {\n content: template('<td#=data.cssClass# role=\"gridcell\"><a tabindex=\"-1\" class=\"k-link#=data.linkClass#\" href=\"#=data.url#\" ' + kendo.attr(VALUE) + '=\"#=data.dateString#\" title=\"#=data.title#\">' + (content || '#=data.value#') + '</a></td>', { useWithBlock: !!content }),\n empty: template('<td role=\"gridcell\">' + (empty || ' ') + '</td>', { useWithBlock: !!empty }),\n weekNumber: template('<td class=\"k-alt\">' + (weekNumber || '#= data.weekNumber #') + '</td>', { useWithBlock: !!weekNumber })\n };\n if (footer && footer !== true) {\n footerTemplate = footer;\n }\n that.footer = footer !== false ? template(footerTemplate, { useWithBlock: false }) : null;\n }\n });\n ui.plugin(Calendar);\n var calendar = {\n firstDayOfMonth: function (date) {\n return createDate(date.getFullYear(), date.getMonth(), 1);\n },\n firstVisibleDay: function (date, calendarInfo) {\n calendarInfo = calendarInfo || kendo.culture().calendar;\n var firstDay = calendarInfo.firstDay, firstVisibleDay = new DATE(date.getFullYear(), date.getMonth(), 1, date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n firstVisibleDay.setFullYear(date.getFullYear());\n while (firstVisibleDay.getDay() != firstDay) {\n calendar.setTime(firstVisibleDay, -1 * MS_PER_DAY);\n }\n return firstVisibleDay;\n },\n setTime: function (date, time) {\n var tzOffsetBefore = date.getTimezoneOffset(), resultDATE = new DATE(date.getTime() + time), tzOffsetDiff = resultDATE.getTimezoneOffset() - tzOffsetBefore;\n date.setTime(resultDATE.getTime() + tzOffsetDiff * MS_PER_MINUTE);\n },\n views: [\n {\n name: MONTH,\n title: function (date, min, max, culture) {\n return getCalendarInfo(culture).months.names[date.getMonth()] + ' ' + date.getFullYear();\n },\n content: function (options) {\n var that = this, idx = 0, min = options.min, max = options.max, date = options.date, dates = options.dates, format = options.format, culture = options.culture, navigateUrl = options.url, showHeader = options.showHeader, otherMonth = options.otherMonth, isWeekColumnVisible = options.isWeekColumnVisible, hasUrl = navigateUrl && dates[0], currentCalendar = getCalendarInfo(culture), firstDayIdx = currentCalendar.firstDay, days = currentCalendar.days, names = shiftArray(days.names, firstDayIdx), shortNames = shiftArray(days.namesShort, firstDayIdx), start = calendar.firstVisibleDay(date, currentCalendar), firstDayOfMonth = that.first(date), lastDayOfMonth = that.last(date), toDateString = that.toDateString, today = getToday(), contentClasses = options.contentClasses, html = '<table tabindex=\"0\" role=\"grid\" class=\"' + contentClasses + '\" cellspacing=\"0\" data-start=\"' + toDateString(start) + '\">';\n if (showHeader) {\n html += '<caption class=\"k-month-header\">' + this.title(date, min, max, culture) + '</caption><thead><tr role=\"row\">';\n } else {\n html += '<thead><tr role=\"row\">';\n }\n if (isWeekColumnVisible) {\n html += '<th scope=\"col\" class=\"k-alt\">' + options.messages.weekColumnHeader + '</th>';\n }\n for (; idx < 7; idx++) {\n html += '<th scope=\"col\" title=\"' + names[idx] + '\">' + shortNames[idx] + '</th>';\n }\n adjustDST(today, 0);\n today = +today;\n return view({\n cells: 42,\n perRow: 7,\n html: html += '</tr></thead><tbody><tr role=\"row\">',\n start: start,\n isWeekColumnVisible: isWeekColumnVisible,\n weekNumber: options.weekNumber,\n min: createDate(min.getFullYear(), min.getMonth(), min.getDate()),\n max: createDate(max.getFullYear(), max.getMonth(), max.getDate()),\n otherMonth: otherMonth,\n content: options.content,\n lastDayOfMonth: lastDayOfMonth,\n empty: options.empty,\n setter: that.setDate,\n disableDates: options.disableDates,\n build: function (date, idx, disableDates) {\n var cssClass = [], day = date.getDay(), linkClass = '', url = '#';\n if (date < firstDayOfMonth || date > lastDayOfMonth) {\n cssClass.push(OTHERMONTH);\n }\n if (disableDates(date)) {\n cssClass.push(DISABLED);\n }\n if (+date === today) {\n cssClass.push('k-today');\n }\n if (day === 0 || day === 6) {\n cssClass.push('k-weekend');\n }\n if (hasUrl && inArray(+date, dates)) {\n url = navigateUrl.replace('{0}', kendo.toString(date, format, culture));\n linkClass = ' k-action-link';\n }\n return {\n date: date,\n dates: dates,\n ns: kendo.ns,\n title: kendo.toString(date, 'D', culture),\n value: date.getDate(),\n dateString: toDateString(date),\n cssClass: cssClass[0] ? ' class=\"' + cssClass.join(' ') + '\"' : '',\n linkClass: linkClass,\n url: url\n };\n },\n weekNumberBuild: function (date) {\n return {\n weekNumber: weekInYear(date, kendo.culture().calendar.firstDay),\n currentDate: date\n };\n }\n });\n },\n first: function (date) {\n return calendar.firstDayOfMonth(date);\n },\n last: function (date) {\n var last = createDate(date.getFullYear(), date.getMonth() + 1, 0), first = calendar.firstDayOfMonth(date), timeOffset = Math.abs(last.getTimezoneOffset() - first.getTimezoneOffset());\n if (timeOffset) {\n last.setHours(first.getHours() + timeOffset / 60);\n }\n return last;\n },\n compare: function (date1, date2) {\n var result, month1 = date1.getMonth(), year1 = date1.getFullYear(), month2 = date2.getMonth(), year2 = date2.getFullYear();\n if (year1 > year2) {\n result = 1;\n } else if (year1 < year2) {\n result = -1;\n } else {\n result = month1 == month2 ? 0 : month1 > month2 ? 1 : -1;\n }\n return result;\n },\n setDate: function (date, value) {\n var hours = date.getHours();\n if (value instanceof DATE) {\n date.setFullYear(value.getFullYear(), value.getMonth(), value.getDate());\n } else {\n calendar.setTime(date, value * MS_PER_DAY);\n }\n adjustDST(date, hours);\n },\n toDateString: function (date) {\n return date.getFullYear() + '/' + date.getMonth() + '/' + date.getDate();\n }\n },\n {\n name: 'year',\n title: function (date) {\n return date.getFullYear();\n },\n content: function (options) {\n var namesAbbr = getCalendarInfo(options.culture).months.namesAbbr, toDateString = this.toDateString, min = options.min, max = options.max, html = '';\n if (options.showHeader) {\n html += '<table tabindex=\"0\" role=\"grid\" class=\"k-content k-meta-view\" cellspacing=\"0\"><caption class=\"k-meta-header\">';\n html += this.title(options.date);\n html += '</caption><tbody><tr role=\"row\">';\n }\n return view({\n min: createDate(min.getFullYear(), min.getMonth(), 1),\n max: createDate(max.getFullYear(), max.getMonth(), 1),\n start: createDate(options.date.getFullYear(), 0, 1),\n html: html,\n setter: this.setDate,\n build: function (date) {\n return {\n value: namesAbbr[date.getMonth()],\n ns: kendo.ns,\n dateString: toDateString(date),\n cssClass: ''\n };\n }\n });\n },\n first: function (date) {\n return createDate(date.getFullYear(), 0, date.getDate());\n },\n last: function (date) {\n return createDate(date.getFullYear(), 11, date.getDate());\n },\n compare: function (date1, date2) {\n return compare(date1, date2);\n },\n setDate: function (date, value) {\n var month, hours = date.getHours();\n if (value instanceof DATE) {\n month = value.getMonth();\n date.setFullYear(value.getFullYear(), month, date.getDate());\n if (month !== date.getMonth()) {\n date.setDate(0);\n }\n } else {\n month = date.getMonth() + value;\n date.setMonth(month);\n if (month > 11) {\n month -= 12;\n }\n if (month > 0 && date.getMonth() != month) {\n date.setDate(0);\n }\n }\n adjustDST(date, hours);\n },\n toDateString: function (date) {\n return date.getFullYear() + '/' + date.getMonth() + '/1';\n }\n },\n {\n name: 'decade',\n title: function (date, min, max) {\n return title(date, min, max, 10);\n },\n content: function (options) {\n var year = options.date.getFullYear(), toDateString = this.toDateString, html = '';\n if (options.showHeader) {\n html += '<table tabindex=\"0\" role=\"grid\" class=\"k-content k-meta-view\" cellspacing=\"0\"><caption class=\"k-meta-header\">';\n html += this.title(options.date, options.min, options.max);\n html += '</caption><tbody><tr role=\"row\">';\n }\n return view({\n start: createDate(year - year % 10 - 1, 0, 1),\n min: createDate(options.min.getFullYear(), 0, 1),\n max: createDate(options.max.getFullYear(), 0, 1),\n otherMonth: options.otherMonth,\n html: html,\n setter: this.setDate,\n build: function (date, idx) {\n return {\n value: date.getFullYear(),\n ns: kendo.ns,\n dateString: toDateString(date),\n cssClass: idx === 0 || idx == 11 ? OTHERMONTHCLASS : ''\n };\n }\n });\n },\n first: function (date) {\n var year = date.getFullYear();\n return createDate(year - year % 10, date.getMonth(), date.getDate());\n },\n last: function (date) {\n var year = date.getFullYear();\n return createDate(year - year % 10 + 9, date.getMonth(), date.getDate());\n },\n compare: function (date1, date2) {\n return compare(date1, date2, 10);\n },\n setDate: function (date, value) {\n setDate(date, value, 1);\n },\n toDateString: function (date) {\n return date.getFullYear() + '/0/1';\n }\n },\n {\n name: CENTURY,\n title: function (date, min, max) {\n return title(date, min, max, 100);\n },\n content: function (options) {\n var year = options.date.getFullYear(), min = options.min.getFullYear(), max = options.max.getFullYear(), toDateString = this.toDateString, minYear = min, maxYear = max, html = '';\n minYear = minYear - minYear % 10;\n maxYear = maxYear - maxYear % 10;\n if (maxYear - minYear < 10) {\n maxYear = minYear + 9;\n }\n if (options.showHeader) {\n html += '<table tabindex=\"0\" role=\"grid\" class=\"k-content k-meta-view\" cellspacing=\"0\"><caption class=\"k-meta-header\">';\n html += this.title(options.date, options.min, options.max);\n html += '</caption><tbody><tr role=\"row\">';\n }\n return view({\n start: createDate(year - year % 100 - 10, 0, 1),\n min: createDate(minYear, 0, 1),\n max: createDate(maxYear, 0, 1),\n otherMonth: options.otherMonth,\n html: html,\n setter: this.setDate,\n build: function (date, idx) {\n var start = date.getFullYear(), end = start + 9;\n if (start < min) {\n start = min;\n }\n if (end > max) {\n end = max;\n }\n return {\n ns: kendo.ns,\n value: start + ' - ' + end,\n dateString: toDateString(date),\n cssClass: idx === 0 || idx == 11 ? OTHERMONTHCLASS : ''\n };\n }\n });\n },\n first: function (date) {\n var year = date.getFullYear();\n return createDate(year - year % 100, date.getMonth(), date.getDate());\n },\n last: function (date) {\n var year = date.getFullYear();\n return createDate(year - year % 100 + 99, date.getMonth(), date.getDate());\n },\n compare: function (date1, date2) {\n return compare(date1, date2, 100);\n },\n setDate: function (date, value) {\n setDate(date, value, 10);\n },\n toDateString: function (date) {\n var year = date.getFullYear();\n return year - year % 10 + '/0/1';\n }\n }\n ]\n };\n function title(date, min, max, modular) {\n var start = date.getFullYear(), minYear = min.getFullYear(), maxYear = max.getFullYear(), end;\n start = start - start % modular;\n end = start + (modular - 1);\n if (start < minYear) {\n start = minYear;\n }\n if (end > maxYear) {\n end = maxYear;\n }\n return start + '-' + end;\n }\n function view(options) {\n var idx = 0, data, min = options.min, max = options.max, start = options.start, setter = options.setter, build = options.build, weekNumberBuild = options.weekNumberBuild, length = options.cells || 12, isWeekColumnVisible = options.isWeekColumnVisible, cellsPerRow = options.perRow || 4, otherMonth = options.otherMonth, lastDayOfMonth = options.lastDayOfMonth, weekNumber = options.weekNumber || weekNumberTemplate, content = options.content || cellTemplate, empty = options.empty || emptyCellTemplate, otherMonthTemplate = options.otherMonthCellTemplate || otherMonthCellTemplate, html = options.html || '<table tabindex=\"0\" role=\"grid\" class=\"k-content k-meta-view\" cellspacing=\"0\"><tbody><tr role=\"row\">';\n if (isWeekColumnVisible) {\n html += weekNumber(weekNumberBuild(start));\n }\n for (; idx < length; idx++) {\n if (idx > 0 && idx % cellsPerRow === 0) {\n html += '</tr><tr role=\"row\">';\n if (isWeekColumnVisible) {\n html += otherMonth || +start <= +lastDayOfMonth ? weekNumber(weekNumberBuild(start)) : weekNumber({ weekNumber: ' ' });\n }\n }\n start = createDate(start.getFullYear(), start.getMonth(), start.getDate());\n adjustDST(start, 0);\n data = build(start, idx, options.disableDates);\n html += data.cssClass.indexOf(OTHERMONTH) !== -1 && !otherMonth ? otherMonthTemplate(data) : isInRange(start, min, max) ? content(data) : empty(data);\n setter(start, 1);\n }\n return html + '</tr></tbody></table>';\n }\n function compare(date1, date2, modifier) {\n var year1 = date1.getFullYear(), start = date2.getFullYear(), end = start, result = 0;\n if (modifier) {\n start = start - start % modifier;\n end = start - start % modifier + modifier - 1;\n }\n if (year1 > end) {\n result = 1;\n } else if (year1 < start) {\n result = -1;\n }\n return result;\n }\n function getToday() {\n var today = new DATE();\n return new DATE(today.getFullYear(), today.getMonth(), today.getDate());\n }\n function restrictValue(value, min, max) {\n var today = getToday();\n if (value) {\n today = new DATE(+value);\n }\n if (min > today) {\n today = new DATE(+min);\n } else if (max < today) {\n today = new DATE(+max);\n }\n return today;\n }\n function isInRange(date, min, max) {\n return +date >= +min && +date <= +max;\n }\n function shiftArray(array, idx) {\n return array.slice(idx).concat(array.slice(0, idx));\n }\n function setDate(date, value, multiplier) {\n value = value instanceof DATE ? value.getFullYear() : date.getFullYear() + multiplier * value;\n date.setFullYear(value);\n }\n function daysBetweenTwoDates(startDate, endDate) {\n if (+endDate < +startDate) {\n var temp = +startDate;\n calendar.views[0].setDate(startDate, endDate);\n calendar.views[0].setDate(endDate, new Date(temp));\n }\n var fromDateUTC = Date.UTC(startDate.getFullYear(), startDate.getMonth(), startDate.getDate());\n var endDateUTC = Date.UTC(endDate.getFullYear(), endDate.getMonth(), endDate.getDate());\n return Math.ceil((+endDateUTC - +fromDateUTC) / kendo.date.MS_PER_DAY);\n }\n function addDaysToArray(array, numberOfDays, fromDate, disableDates) {\n for (var i = 0; i <= numberOfDays; i++) {\n var nextDay = new Date(fromDate.getTime());\n nextDay = new Date(nextDay.setDate(nextDay.getDate() + i));\n if (!disableDates(nextDay)) {\n array.push(nextDay);\n }\n }\n }\n function mousetoggle(e) {\n var disabled = $(this).hasClass('k-state-disabled');\n if (!disabled) {\n $(this).toggleClass(HOVER, MOUSEENTER.indexOf(e.type) > -1 || e.type == FOCUS);\n }\n }\n function prevent(e) {\n e.preventDefault();\n }\n function createDate(year, month, date) {\n var dateObject = new DATE(year, month, date);\n dateObject.setFullYear(year, month, date);\n return dateObject;\n }\n function getCalendarInfo(culture) {\n return getCulture(culture).calendars.standard;\n }\n function normalize(options) {\n var start = views[options.start], depth = views[options.depth], culture = getCulture(options.culture);\n options.format = extractFormat(options.format || culture.calendars.standard.patterns.d);\n if (isNaN(start)) {\n start = 0;\n options.start = MONTH;\n }\n if (depth === undefined || depth > start) {\n options.depth = MONTH;\n }\n if (options.dates === null) {\n options.dates = [];\n }\n }\n function makeUnselectable(element) {\n if (isIE8) {\n element.find('*').attr('unselectable', 'on');\n }\n }\n function addClassToViewContainer(element, currentView) {\n element.addClass('k-' + currentView);\n }\n function inArray(date, dates) {\n for (var i = 0, length = dates.length; i < length; i++) {\n if (date === +dates[i]) {\n return true;\n }\n }\n return false;\n }\n function isEqualDatePart(value1, value2) {\n if (value1) {\n return value1.getFullYear() === value2.getFullYear() && value1.getMonth() === value2.getMonth() && value1.getDate() === value2.getDate();\n }\n return false;\n }\n function isEqualMonth(value1, value2) {\n if (value1) {\n return value1.getFullYear() === value2.getFullYear() && value1.getMonth() === value2.getMonth();\n }\n return false;\n }\n function getDisabledExpr(option) {\n if (kendo.isFunction(option)) {\n return option;\n }\n if ($.isArray(option)) {\n return createDisabledExpr(option);\n }\n return $.noop;\n }\n function convertDatesArray(dates) {\n var result = [];\n for (var i = 0; i < dates.length; i++) {\n result.push(dates[i].setHours(0, 0, 0, 0));\n }\n return result;\n }\n function createDisabledExpr(dates) {\n var body, callback, disabledDates = [], days = [\n 'su',\n 'mo',\n 'tu',\n 'we',\n 'th',\n 'fr',\n 'sa'\n ], searchExpression = 'if (found) {' + ' return true ' + '} else {' + 'return false' + '}';\n if (dates[0] instanceof DATE) {\n disabledDates = convertDatesArray(dates);\n body = 'var clonedDate = new Date(date); var found = date && window.kendo.jQuery.inArray(clonedDate.setHours(0, 0, 0, 0),[' + disabledDates + ']) > -1;' + searchExpression;\n } else {\n for (var i = 0; i < dates.length; i++) {\n var day = dates[i].slice(0, 2).toLowerCase();\n var index = $.inArray(day, days);\n if (index > -1) {\n disabledDates.push(index);\n }\n }\n body = 'var clonedDate = new Date(date); var found = date && window.kendo.jQuery.inArray(clonedDate.getDay(),[' + disabledDates + ']) > -1;' + searchExpression;\n }\n callback = new Function('date', body);\n return callback;\n }\n function isEqualDate(oldValue, newValue) {\n if (oldValue instanceof Date && newValue instanceof Date) {\n oldValue = oldValue.getTime();\n newValue = newValue.getTime();\n }\n return oldValue === newValue;\n }\n function toDateObject(link) {\n var value = $(link).attr(kendo.attr(VALUE)).split('/');\n value = createDate(value[0], value[1], value[2]);\n return value;\n }\n calendar.isEqualDatePart = isEqualDatePart;\n calendar.isEqualDate = isEqualDate;\n calendar.makeUnselectable = makeUnselectable;\n calendar.restrictValue = restrictValue;\n calendar.isInRange = isInRange;\n calendar.addClassToViewContainer = addClassToViewContainer;\n calendar.normalize = normalize;\n calendar.viewsEnum = views;\n calendar.disabled = getDisabledExpr;\n calendar.toDateObject = toDateObject;\n calendar.getToday = getToday;\n calendar.createDate = createDate;\n kendo.calendar = calendar;\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.dateinput', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'dateinput',\n name: 'DateInput',\n category: 'web',\n description: 'The DateInput widget allows to edit date by typing.',\n depends: ['core']\n };\n (function ($, undefined) {\n var global = window;\n var kendo = global.kendo;\n var caret = kendo.caret;\n var ui = kendo.ui;\n var Widget = ui.Widget;\n var keys = kendo.keys;\n var ns = '.kendoDateInput';\n var proxy = $.proxy;\n var objectToString = {}.toString;\n var INPUT_EVENT_NAME = (kendo.support.propertyChangeEvent ? 'propertychange.kendoDateInput input' : 'input') + ns;\n var STATEDISABLED = 'k-state-disabled';\n var STATEDEFAULT = 'k-state-default';\n var STATEINVALID = 'k-state-invalid';\n var DISABLED = 'disabled';\n var READONLY = 'readonly';\n var CHANGE = 'change';\n var knownSymbols = 'dMyHhmftsz';\n var DateInput = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n element = that.element;\n options = that.options;\n options.format = kendo._extractFormat(options.format || kendo.getCulture(options.culture).calendars.standard.patterns.d);\n options.min = kendo.parseDate(element.attr('min')) || kendo.parseDate(options.min);\n options.max = kendo.parseDate(element.attr('max')) || kendo.parseDate(options.max);\n var insidePicker = (element.parent().attr('class') || '').indexOf('k-picker-wrap') >= 0;\n if (insidePicker) {\n that.wrapper = element.parent();\n } else {\n that.wrapper = element.wrap('<span class=\\'k-widget k-dateinput\\'></span>').parent();\n that.wrapper.addClass(element[0].className).removeClass('input-validation-error');\n that.wrapper[0].style.cssText = element[0].style.cssText;\n element.css({\n width: '100%',\n height: element[0].style.height\n });\n }\n that._inputWrapper = $(that.wrapper[0]);\n $('<span class=\\'k-icon k-i-warning\\'></span>').insertAfter(element);\n that._form();\n that.element.addClass(insidePicker ? ' ' : 'k-textbox').attr('autocomplete', 'off').on('focusout' + ns, function () {\n that._change();\n });\n try {\n element[0].setAttribute('type', 'text');\n } catch (e) {\n element[0].type = 'text';\n }\n var disabled = element.is('[disabled]') || $(that.element).parents('fieldset').is(':disabled');\n if (disabled) {\n that.enable(false);\n } else {\n that.readonly(element.is('[readonly]'));\n }\n that.value(that.options.value || element.val());\n kendo.notify(that);\n },\n options: {\n name: 'DateInput',\n culture: '',\n value: '',\n format: '',\n min: new Date(1900, 0, 1),\n max: new Date(2099, 11, 31),\n messages: {\n 'year': 'year',\n 'month': 'month',\n 'day': 'day',\n 'weekday': 'day of the week',\n 'hour': 'hours',\n 'minute': 'minutes',\n 'second': 'seconds',\n 'dayperiod': 'AM/PM'\n }\n },\n events: [CHANGE],\n min: function (value) {\n if (value !== undefined) {\n this.options.min = value;\n } else {\n return this.options.min;\n }\n },\n max: function (value) {\n if (value !== undefined) {\n this.options.max = value;\n } else {\n return this.options.max;\n }\n },\n setOptions: function (options) {\n var that = this;\n Widget.fn.setOptions.call(that, options);\n this._unbindInput();\n this._bindInput();\n this._updateElementValue();\n },\n destroy: function () {\n var that = this;\n that.element.off(ns);\n if (that._formElement) {\n that._formElement.off('reset', that._resetHandler);\n }\n Widget.fn.destroy.call(that);\n },\n value: function (value) {\n if (value === undefined) {\n return this._dateTime.getDateObject();\n }\n if (value === null) {\n value = '';\n }\n if (objectToString.call(value) !== '[object Date]') {\n value = kendo.parseDate(value, this.options.format, this.options.culture);\n }\n if (value && !value.getTime()) {\n value = null;\n }\n this._dateTime = new customDateTime(value, this.options.format, this.options.culture, this.options.messages);\n this._updateElementValue();\n this._oldValue = value;\n },\n _updateElementValue: function () {\n var stringAndFromat = this._dateTime.toPair(this.options.format, this.options.culture, this.options.messages);\n this.element.val(stringAndFromat[0]);\n this._oldText = stringAndFromat[0];\n this._format = stringAndFromat[1];\n },\n readonly: function (readonly) {\n this._editable({\n readonly: readonly === undefined ? true : readonly,\n disable: false\n });\n },\n enable: function (enable) {\n this._editable({\n readonly: false,\n disable: !(enable = enable === undefined ? true : enable)\n });\n },\n _bindInput: function () {\n var that = this;\n that.element.on('focusout' + ns, function () {\n that._change();\n }).on('paste' + ns, proxy(that._paste, that)).on('keydown' + ns, proxy(that._keydown, that)).on(INPUT_EVENT_NAME, proxy(that._input, that)).on('mouseup' + ns, proxy(that._mouseUp, that)).on('DOMMouseScroll' + ns + ' mousewheel' + ns, proxy(that._scroll, that));\n },\n _unbindInput: function () {\n this.element.off('keydown' + ns).off('paste' + ns).off('focusout' + ns).off(INPUT_EVENT_NAME).off('mouseup' + ns).off('DOMMouseScroll' + ns + ' mousewheel' + ns);\n },\n _editable: function (options) {\n var that = this;\n var element = that.element;\n var disable = options.disable;\n var readonly = options.readonly;\n var wrapper = that.wrapper;\n that._unbindInput();\n if (!readonly && !disable) {\n wrapper.addClass(STATEDEFAULT).removeClass(STATEDISABLED);\n if (element && element.length) {\n element[0].removeAttribute(DISABLED);\n element[0].removeAttribute(READONLY);\n }\n that._bindInput();\n } else {\n if (disable) {\n wrapper.addClass(STATEDISABLED).removeClass(STATEDEFAULT);\n element.attr(DISABLED, disable);\n if (element && element.length) {\n element[0].removeAttribute(READONLY);\n }\n }\n if (readonly) {\n element.attr(READONLY, readonly);\n }\n }\n },\n _change: function () {\n var that = this;\n var oldValue = that._oldValue;\n var value = that.value();\n if (value && that.min() && value < that.min()) {\n that.value(that.min());\n value = that.value();\n }\n if (value && that.max() && value > that.max()) {\n that.value(that.max());\n value = that.value();\n }\n if (oldValue && value && value.getTime() !== oldValue.getTime() || oldValue && !value || !oldValue && value) {\n that._oldValue = value;\n that.trigger(CHANGE);\n that.element.trigger(CHANGE);\n }\n },\n _input: function () {\n var that = this;\n var element = that.element[0];\n var blinkInvalid = false;\n if (kendo._activeElement() !== element) {\n return;\n }\n var diff = approximateStringMatching(this._oldText, this._format, this.element[0].value, caret(this.element[0])[0]);\n var navigationOnly = diff.length === 1 && diff[0][1] === ' ';\n if (!navigationOnly) {\n for (var i = 0; i < diff.length; i++) {\n var valid = this._dateTime.parsePart(diff[i][0], diff[i][1]);\n blinkInvalid = blinkInvalid || !valid;\n }\n }\n this._updateElementValue();\n if (diff.length && diff[0][0] !== ' ') {\n this._selectSegment(diff[0][0]);\n if (!navigationOnly) {\n var difSym = diff[0][0];\n setTimeout(function () {\n that._selectSegment(difSym);\n });\n }\n }\n if (navigationOnly) {\n var newEvent = {\n keyCode: 39,\n preventDefault: function () {\n }\n };\n this._keydown(newEvent);\n }\n if (blinkInvalid) {\n clearTimeout(that._blinkInvalidTimeout);\n var stateInvalid = STATEINVALID;\n that.wrapper.addClass(STATEINVALID);\n that._blinkInvalidTimeout = setTimeout(function () {\n that.wrapper.removeClass(stateInvalid);\n }, 100);\n }\n },\n _mouseUp: function () {\n var selection = caret(this.element[0]);\n if (selection[0] === selection[1]) {\n this._selectNearestSegment();\n }\n },\n _scroll: function (e) {\n if (kendo._activeElement() !== this.element[0] || this.element.is('[readonly]')) {\n return;\n }\n e = window.event || e;\n var newEvent = {\n keyCode: 37,\n preventDefault: function () {\n }\n };\n if (e.shiftKey) {\n newEvent.keyCode = (e.wheelDelta || -e.detail) > 0 ? 37 : 39;\n } else {\n newEvent.keyCode = (e.wheelDelta || -e.detail) > 0 ? 38 : 40;\n }\n this._keydown(newEvent);\n e.returnValue = false;\n if (e.preventDefault) {\n e.preventDefault();\n }\n if (e.stopPropagation) {\n e.stopPropagation();\n }\n },\n _form: function () {\n var that = this;\n var element = that.element;\n var formId = element.attr('form');\n var form = formId ? $('#' + formId) : element.closest('form');\n var initialValue = element[0].value;\n if (!initialValue && that.options.value) {\n initialValue = that.options.value;\n }\n if (form[0]) {\n that._resetHandler = function () {\n setTimeout(function () {\n that.value(initialValue);\n });\n };\n that._formElement = form.on('reset', that._resetHandler);\n }\n },\n _paste: function (e) {\n e.preventDefault();\n },\n _keydown: function (e) {\n var key = e.keyCode;\n var selection;\n if (key == 37 || key == 39) {\n e.preventDefault();\n selection = caret(this.element[0]);\n if (selection[0] != selection[1]) {\n this._selectNearestSegment();\n }\n var dir = key == 37 ? -1 : 1;\n var index = dir == -1 ? caret(this.element[0])[0] - 1 : caret(this.element[0])[1] + 1;\n while (index >= 0 && index < this._format.length) {\n if (knownSymbols.indexOf(this._format[index]) >= 0) {\n this._selectSegment(this._format[index]);\n break;\n }\n index += dir;\n }\n }\n if (key == 38 || key == 40) {\n e.preventDefault();\n selection = caret(this.element[0]);\n var symbol = this._format[selection[0]];\n if (knownSymbols.indexOf(symbol) >= 0) {\n var interval = 1;\n if (symbol == 'm') {\n interval = this.options.interval || 1;\n }\n this._dateTime.modifyPart(symbol, key == 38 ? interval * 1 : interval * -1);\n this._updateElementValue();\n this._selectSegment(symbol);\n this.element.trigger(CHANGE);\n }\n }\n if (kendo.support.browser.msie && kendo.support.browser.version < 10) {\n var keycode = e.keyCode ? e.keyCode : e.which;\n if (keycode === 8 || keycode === 46) {\n var that = this;\n setTimeout(function () {\n that._input();\n }, 0);\n }\n }\n if (key === keys.ENTER) {\n this._change();\n }\n },\n _selectNearestSegment: function () {\n var selection = caret(this.element[0]);\n var start = selection[0];\n for (var i = start, j = start - 1; i < this._format.length || j >= 0; i++, j--) {\n if (i < this._format.length && knownSymbols.indexOf(this._format[i]) !== -1) {\n this._selectSegment(this._format[i]);\n return;\n }\n if (j >= 0 && knownSymbols.indexOf(this._format[j]) !== -1) {\n this._selectSegment(this._format[j]);\n return;\n }\n }\n },\n _selectSegment: function (symbol) {\n var begin = -1, end = 0;\n for (var i = 0; i < this._format.length; i++) {\n if (this._format[i] === symbol) {\n end = i + 1;\n if (begin === -1) {\n begin = i;\n }\n }\n }\n if (begin < 0) {\n begin = 0;\n }\n caret(this.element, begin, end);\n }\n });\n ui.plugin(DateInput);\n var customDateTime = function (initDate, initFormat, initCulture, initMessages) {\n var value = null;\n var year = true, month = true, date = true, hours = true, minutes = true, seconds = true, milliseconds = true;\n var typedMonthPart = '';\n var typedDayPeriodPart = '';\n var placeholders = {};\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000'\n ];\n function pad(number, digits, end) {\n number = number + '';\n digits = digits || 2;\n end = digits - number.length;\n if (end) {\n return zeros[digits].substring(0, end) + number;\n }\n return number;\n }\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 var months = null, calendar = null, days = null, returnsFormat = false;\n var matcher = function (match) {\n var mins, sign;\n var result;\n switch (match) {\n case 'd':\n result = date ? value.getDate() : placeholders.day;\n break;\n case 'dd':\n result = date ? pad(value.getDate()) : placeholders.day;\n break;\n case 'ddd':\n result = date && month && year ? days.namesAbbr[value.getDay()] : placeholders.weekday;\n break;\n case 'dddd':\n result = date && month && year ? days.names[value.getDay()] : placeholders.weekday;\n break;\n case 'M':\n result = month ? value.getMonth() + 1 : placeholders.month;\n break;\n case 'MM':\n result = month ? pad(value.getMonth() + 1) : placeholders.month;\n break;\n case 'MMM':\n result = month ? months.namesAbbr[value.getMonth()] : placeholders.month;\n break;\n case 'MMMM':\n result = month ? months.names[value.getMonth()] : placeholders.month;\n break;\n case 'yy':\n result = year ? pad(value.getFullYear() % 100) : placeholders.year;\n break;\n case 'yyyy':\n result = year ? pad(value.getFullYear(), 4) : placeholders.year;\n break;\n case 'h':\n result = hours ? value.getHours() % 12 || 12 : placeholders.hour;\n break;\n case 'hh':\n result = hours ? pad(value.getHours() % 12 || 12) : placeholders.hour;\n break;\n case 'H':\n result = hours ? value.getHours() : placeholders.hour;\n break;\n case 'HH':\n result = hours ? pad(value.getHours()) : placeholders.hour;\n break;\n case 'm':\n result = minutes ? value.getMinutes() : placeholders.minute;\n break;\n case 'mm':\n result = minutes ? pad(value.getMinutes()) : placeholders.minute;\n break;\n case 's':\n result = seconds ? value.getSeconds() : placeholders.second;\n break;\n case 'ss':\n result = seconds ? pad(value.getSeconds()) : placeholders.second;\n break;\n case 'f':\n result = milliseconds ? Math.floor(value.getMilliseconds() / 100) : milliseconds;\n break;\n case 'ff':\n result = value.getMilliseconds();\n if (result > 99) {\n result = Math.floor(result / 10);\n }\n result = milliseconds ? pad(result) : match;\n break;\n case 'fff':\n result = milliseconds ? pad(value.getMilliseconds(), 3) : match;\n break;\n case 'tt':\n result = hours ? value.getHours() < 12 ? calendar.AM[0] : calendar.PM[0] : placeholders.dayperiod;\n break;\n case 'zzz':\n mins = value.getTimezoneOffset();\n sign = mins < 0;\n result = Math.abs(mins / 60).toString().split('.')[0];\n mins = Math.abs(mins) - result * 60;\n result = (sign ? '+' : '-') + pad(result);\n result += ':' + pad(mins);\n break;\n case 'z':\n case 'zz':\n result = value.getTimezoneOffset() / 60;\n sign = result < 0;\n result = Math.abs(result).toString().split('.')[0];\n result = (sign ? '+' : '-') + (match === 'zz' ? pad(result) : result);\n break;\n }\n result = result !== undefined ? result : match.slice(1, match.length - 1);\n if (returnsFormat) {\n result = '' + result;\n var formatResult = '';\n if (match == 'ddd') {\n match = 'EEE';\n }\n if (match == 'dddd') {\n match = 'EEEE';\n }\n for (var i = 0; i < result.length; i++) {\n formatResult += match[0];\n }\n return formatResult;\n } else {\n return result;\n }\n };\n function generateMatcher(retFormat) {\n returnsFormat = retFormat;\n return matcher;\n }\n function setExisting(symbol, val) {\n switch (symbol) {\n case 'y':\n year = val;\n break;\n case 'M':\n month = val;\n if (!val) {\n value.setMonth(0);\n typedMonthPart = '';\n }\n break;\n case 'd':\n date = val;\n break;\n case 'H':\n case 'h':\n hours = val;\n if (!val) {\n typedDayPeriodPart = '';\n }\n break;\n case 'm':\n minutes = val;\n break;\n case 's':\n seconds = val;\n break;\n default:\n return;\n }\n }\n this.setValue = function (val) {\n date = val;\n };\n this.getValue = function () {\n return date;\n };\n this.modifyPart = function (symbol, offset) {\n var newValue = new Date(value && value.getTime ? value.getTime() : value);\n switch (symbol) {\n case 'y':\n newValue.setFullYear(newValue.getFullYear() + offset);\n break;\n case 'M':\n var newMonth = newValue.getMonth() + offset;\n newValue.setMonth(newMonth);\n if (newValue.getMonth() % 12 !== (newMonth + 12) % 12) {\n newValue.setDate(1);\n newValue.setMonth(newMonth);\n }\n break;\n case 'd':\n case 'E':\n newValue.setDate(newValue.getDate() + offset);\n break;\n case 'H':\n case 'h':\n newValue.setHours(newValue.getHours() + offset);\n break;\n case 'm':\n newValue.setMinutes(newValue.getMinutes() + offset);\n break;\n case 's':\n newValue.setSeconds(newValue.getSeconds() + offset);\n break;\n case 't':\n newValue.setHours((newValue.getHours() + 12) % 24);\n break;\n default:\n break;\n }\n if (newValue.getFullYear() > 0) {\n setExisting(symbol, true);\n value = newValue;\n }\n };\n this.parsePart = function (symbol, currentChar) {\n if (!currentChar) {\n setExisting(symbol, false);\n return true;\n }\n var newValue = new Date(value && value.getTime ? value.getTime() : value);\n var lastDateOfMonth = new Date(newValue.getFullYear(), newValue.getMonth() + 1, 0).getDate();\n var newHours;\n switch (symbol) {\n case 'd':\n var newDate = (date ? newValue.getDate() * 10 : 0) + parseInt(currentChar, 10);\n if (isNaN(newDate)) {\n return;\n }\n while (newDate > lastDateOfMonth) {\n newDate = parseInt(newDate.toString().slice(1), 10);\n }\n if (newDate < 1) {\n date = false;\n } else {\n newValue.setDate(newDate);\n if (newValue.getMonth() !== value.getMonth()) {\n return;\n }\n date = true;\n }\n break;\n case 'M':\n var newMonth = (month ? (newValue.getMonth() + 1) * 10 : 0) + parseInt(currentChar, 10);\n if (!isNaN(newMonth)) {\n while (newMonth > 12) {\n newMonth = parseInt(newMonth.toString().slice(1), 10);\n }\n if (newMonth < 1) {\n month = false;\n } else {\n newValue.setMonth(newMonth - 1);\n if (newValue.getMonth() !== newMonth - 1) {\n newValue.setDate(1);\n newValue.setMonth(newMonth - 1);\n }\n month = true;\n }\n } else {\n var monthNames = calendar.months.names;\n typedMonthPart += currentChar.toLowerCase();\n while (typedMonthPart.length > 0) {\n for (var i = 0; i < monthNames.length; i++) {\n if (monthNames[i].toLowerCase().indexOf(typedMonthPart) === 0) {\n newValue.setMonth(i);\n month = true;\n value = newValue;\n return true;\n }\n }\n typedMonthPart = typedMonthPart.substring(1, typedMonthPart.length);\n }\n return false;\n }\n break;\n case 'y':\n var newYear = (year ? newValue.getFullYear() * 10 : 0) + parseInt(currentChar, 10);\n if (isNaN(newYear)) {\n return;\n }\n while (newYear > 9999) {\n newYear = parseInt(newYear.toString().slice(1), 10);\n }\n if (newYear < 1) {\n year = false;\n } else {\n newValue.setFullYear(newYear);\n year = true;\n }\n break;\n case 'h':\n newHours = (hours ? (newValue.getHours() % 12 || 12) * 10 : 0) + parseInt(currentChar, 10);\n if (isNaN(newHours)) {\n return;\n }\n while (newHours > 12) {\n newHours = parseInt(newHours.toString().slice(1), 10);\n }\n newValue.setHours(Math.floor(newValue.getHours() / 12) * 12 + newHours % 12);\n hours = true;\n break;\n case 'H':\n newHours = (hours ? newValue.getHours() * 10 : 0) + parseInt(currentChar, 10);\n if (isNaN(newHours)) {\n return;\n }\n while (newHours > 23) {\n newHours = parseInt(newHours.toString().slice(1), 10);\n }\n newValue.setHours(newHours);\n hours = true;\n break;\n case 'm':\n var newMinutes = (minutes ? newValue.getMinutes() * 10 : 0) + parseInt(currentChar, 10);\n if (isNaN(newMinutes)) {\n return;\n }\n while (newMinutes > 59) {\n newMinutes = parseInt(newMinutes.toString().slice(1), 10);\n }\n newValue.setMinutes(newMinutes);\n minutes = true;\n break;\n case 's':\n var newSeconds = (seconds ? newValue.getSeconds() * 10 : 0) + parseInt(currentChar, 10);\n if (isNaN(newSeconds)) {\n return;\n }\n while (newSeconds > 59) {\n newSeconds = parseInt(newSeconds.toString().slice(1), 10);\n }\n newValue.setSeconds(newSeconds);\n seconds = true;\n break;\n case 't':\n if (hours) {\n typedDayPeriodPart += currentChar.toLowerCase();\n while (typedDayPeriodPart.length > 0) {\n if (calendar.AM[0].toLowerCase().indexOf(typedDayPeriodPart) === 0 && newValue.getHours() >= 12 || calendar.PM[0].toLowerCase().indexOf(typedDayPeriodPart) === 0 && newValue.getHours() < 12) {\n newValue.setHours((newValue.getHours() + 12) % 24);\n value = newValue;\n return true;\n }\n typedDayPeriodPart = typedDayPeriodPart.substring(1, typedDayPeriodPart.length);\n }\n return false;\n }\n break;\n default:\n break;\n }\n value = newValue;\n return true;\n };\n this.toPair = function (format, culture, messages) {\n if (!format) {\n return [\n '',\n ''\n ];\n }\n culture = kendo.getCulture(culture);\n calendar = culture.calendars.standard;\n format = calendar.patterns[format] || format;\n days = calendar.days;\n months = calendar.months;\n placeholders = messages;\n return [\n format.replace(dateFormatRegExp, generateMatcher(false)),\n format.replace(dateFormatRegExp, generateMatcher(true))\n ];\n };\n this.getDateObject = function () {\n return year && month && date && hours && minutes && seconds && milliseconds ? new Date(value.getTime()) : null;\n };\n if (!initDate) {\n value = new Date();\n var sampleFormat = this.toPair(initFormat, initCulture, initMessages)[1];\n for (var i = 0; i < sampleFormat.length; i++) {\n setExisting(sampleFormat[i], false);\n }\n } else {\n value = new Date(initDate.getTime());\n }\n };\n function approximateStringMatching(oldText, oldFormat, newText, caret) {\n var oldTextSeparator = oldText[caret + oldText.length - newText.length];\n oldText = oldText.substring(0, caret + oldText.length - newText.length);\n newText = newText.substring(0, caret);\n var diff = [];\n var i;\n if (oldText === newText && caret > 0) {\n diff.push([\n oldFormat[caret - 1],\n newText[caret - 1]\n ]);\n return diff;\n }\n if (oldText.indexOf(newText) === 0 && (newText.length === 0 || oldFormat[newText.length - 1] !== oldFormat[newText.length])) {\n var deletedSymbol = '';\n for (i = newText.length; i < oldText.length; i++) {\n if (oldFormat[i] !== deletedSymbol && knownSymbols.indexOf(oldFormat[i]) >= 0) {\n deletedSymbol = oldFormat[i];\n diff.push([\n deletedSymbol,\n ''\n ]);\n }\n }\n return diff;\n }\n if (newText[newText.length - 1] === ' ' || newText[newText.length - 1] === oldTextSeparator) {\n return [[\n oldFormat[caret - 1],\n ' '\n ]];\n }\n if (newText.indexOf(oldText) === 0 || knownSymbols.indexOf(oldFormat[caret - 1]) === -1) {\n var symbol = oldFormat[0];\n for (i = Math.max(0, oldText.length - 1); i < oldFormat.length; i++) {\n if (knownSymbols.indexOf(oldFormat[i]) >= 0) {\n symbol = oldFormat[i];\n break;\n }\n }\n return [[\n symbol,\n newText[caret - 1]\n ]];\n }\n return [[\n oldFormat[caret - 1],\n newText[caret - 1]\n ]];\n }\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.datepicker', [\n 'kendo.calendar',\n 'kendo.popup',\n 'kendo.dateinput'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'datepicker',\n name: 'DatePicker',\n category: 'web',\n description: 'The DatePicker widget allows the user to select a date from a calendar or by direct input.',\n depends: [\n 'calendar',\n 'popup'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, Widget = ui.Widget, parse = kendo.parseDate, keys = kendo.keys, support = kendo.support, template = kendo.template, activeElement = kendo._activeElement, DIV = '<div />', SPAN = '<span />', ns = '.kendoDatePicker', CLICK = 'click' + ns, UP = support.mouseAndTouchPresent ? kendo.applyEventMap('up', ns.slice(1)) : CLICK, OPEN = 'open', CLOSE = 'close', CHANGE = 'change', DISABLED = 'disabled', READONLY = 'readonly', DEFAULT = 'k-state-default', FOCUSED = 'k-state-focused', SELECTED = 'k-state-selected', STATEDISABLED = 'k-state-disabled', HOVER = 'k-state-hover', HOVEREVENTS = 'mouseenter' + ns + ' mouseleave' + ns, MOUSEDOWN = 'mousedown' + ns, ID = 'id', MIN = 'min', MAX = 'max', MONTH = 'month', ARIA_DISABLED = 'aria-disabled', ARIA_READONLY = 'aria-readonly', ARIA_EXPANDED = 'aria-expanded', ARIA_HIDDEN = 'aria-hidden', calendar = kendo.calendar, isInRange = calendar.isInRange, restrictValue = calendar.restrictValue, isEqualDatePart = calendar.isEqualDatePart, extend = $.extend, proxy = $.proxy, DATE = Date;\n function normalize(options) {\n var parseFormats = options.parseFormats, format = options.format;\n calendar.normalize(options);\n parseFormats = $.isArray(parseFormats) ? parseFormats : [parseFormats];\n if (!parseFormats.length) {\n parseFormats.push('yyyy-MM-dd');\n }\n if ($.inArray(format, parseFormats) === -1) {\n parseFormats.splice(0, 0, options.format);\n }\n options.parseFormats = parseFormats;\n }\n function preventDefault(e) {\n e.preventDefault();\n }\n var DateView = function (options) {\n var that = this, id, body = document.body, div = $(DIV).attr(ARIA_HIDDEN, 'true').addClass('k-calendar-container');\n that.options = options = options || {};\n id = options.id;\n if (!options.omitPopup) {\n div.appendTo(body);\n that.popup = new ui.Popup(div, extend(options.popup, options, {\n name: 'Popup',\n isRtl: kendo.support.isRtl(options.anchor)\n }));\n } else {\n div = options.dateDiv;\n }\n if (id) {\n id += '_dateview';\n div.attr(ID, id);\n that._dateViewID = id;\n }\n that.div = div;\n that.value(options.value);\n };\n DateView.prototype = {\n _calendar: function () {\n var that = this;\n var calendar = that.calendar;\n var options = that.options;\n var div;\n if (!calendar) {\n div = $(DIV).attr(ID, kendo.guid()).appendTo(options.omitPopup ? options.dateDiv : that.popup.element).on(MOUSEDOWN, preventDefault).on(CLICK, 'td:has(.k-link)', proxy(that._click, that));\n that.calendar = calendar = new ui.Calendar(div, { componentType: options.componentType });\n that._setOptions(options);\n kendo.calendar.makeUnselectable(calendar.element);\n calendar.navigate(that._value || that._current, options.start);\n that.value(that._value);\n }\n },\n _setOptions: function (options) {\n this.calendar.setOptions({\n focusOnNav: false,\n change: options.change,\n culture: options.culture,\n dates: options.dates,\n depth: options.depth,\n footer: options.footer,\n format: options.format,\n max: options.max,\n min: options.min,\n month: options.month,\n weekNumber: options.weekNumber,\n start: options.start,\n disableDates: options.disableDates\n });\n },\n setOptions: function (options) {\n var old = this.options;\n var disableDates = options.disableDates;\n if (disableDates) {\n options.disableDates = calendar.disabled(disableDates);\n }\n this.options = extend(old, options, {\n change: old.change,\n close: old.close,\n open: old.open\n });\n if (this.calendar) {\n this._setOptions(this.options);\n }\n },\n destroy: function () {\n if (this.popup) {\n this.popup.destroy();\n }\n },\n open: function () {\n var that = this;\n var popupHovered;\n that._calendar();\n popupHovered = that.popup._hovered;\n that.popup._hovered = true;\n that.popup.open();\n setTimeout(function () {\n that.popup._hovered = popupHovered;\n }, 1);\n },\n close: function () {\n this.popup.close();\n },\n min: function (value) {\n this._option(MIN, value);\n },\n max: function (value) {\n this._option(MAX, value);\n },\n toggle: function () {\n var that = this;\n that[that.popup.visible() ? CLOSE : OPEN]();\n },\n move: function (e) {\n var that = this, key = e.keyCode, calendar = that.calendar, selectIsClicked = e.ctrlKey && key == keys.DOWN || key == keys.ENTER, handled = false;\n if (e.altKey) {\n if (key == keys.DOWN) {\n that.open();\n e.preventDefault();\n handled = true;\n } else if (key == keys.UP) {\n that.close();\n e.preventDefault();\n handled = true;\n }\n } else if (that.popup && that.popup.visible()) {\n if (key == keys.ESC || selectIsClicked && calendar._cell.hasClass(SELECTED)) {\n that.close();\n e.preventDefault();\n return true;\n }\n if (key != keys.SPACEBAR) {\n that._current = calendar._move(e);\n }\n handled = true;\n }\n return handled;\n },\n current: function (date) {\n this._current = date;\n if (this.calendar) {\n this.calendar._focus(date);\n }\n },\n value: function (value) {\n var that = this, calendar = that.calendar, options = that.options, disabledDate = options.disableDates;\n if (disabledDate && disabledDate(value)) {\n value = null;\n }\n that._value = value;\n that._current = new DATE(+restrictValue(value, options.min, options.max));\n if (calendar) {\n calendar.value(value);\n }\n },\n _click: function (e) {\n if (e.currentTarget.className.indexOf(SELECTED) !== -1) {\n this.calendar.trigger('change');\n this.close();\n }\n },\n _option: function (option, value) {\n var that = this;\n var calendar = that.calendar;\n that.options[option] = value;\n if (calendar) {\n calendar[option](value);\n }\n }\n };\n DateView.normalize = normalize;\n kendo.DateView = DateView;\n var DatePicker = Widget.extend({\n init: function (element, options) {\n var that = this, disabled, div;\n Widget.fn.init.call(that, element, options);\n element = that.element;\n options = that.options;\n options.disableDates = kendo.calendar.disabled(options.disableDates);\n options.min = parse(element.attr('min')) || parse(options.min);\n options.max = parse(element.attr('max')) || parse(options.max);\n normalize(options);\n that._initialOptions = extend({}, options);\n that._wrapper();\n that.dateView = new DateView(extend({}, options, {\n id: element.attr(ID),\n anchor: that.wrapper,\n change: function () {\n that._change(this.value());\n that.close();\n },\n close: function (e) {\n if (that.trigger(CLOSE)) {\n e.preventDefault();\n } else {\n element.attr(ARIA_EXPANDED, false);\n div.attr(ARIA_HIDDEN, true);\n }\n },\n open: function (e) {\n var options = that.options, date;\n if (that.trigger(OPEN)) {\n e.preventDefault();\n } else {\n if (that.element.val() !== that._oldText) {\n date = parse(element.val(), options.parseFormats, options.culture);\n that.dateView[date ? 'current' : 'value'](date);\n }\n element.attr(ARIA_EXPANDED, true);\n div.attr(ARIA_HIDDEN, false);\n that._updateARIA(date);\n }\n }\n }));\n div = that.dateView.div;\n that._icon();\n try {\n element[0].setAttribute('type', 'text');\n } catch (e) {\n element[0].type = 'text';\n }\n element.addClass('k-input').attr({\n role: 'combobox',\n 'aria-expanded': false,\n 'aria-owns': that.dateView._dateViewID,\n 'autocomplete': 'off'\n });\n that._reset();\n that._template();\n disabled = element.is('[disabled]') || $(that.element).parents('fieldset').is(':disabled');\n if (disabled) {\n that.enable(false);\n } else {\n that.readonly(element.is('[readonly]'));\n }\n that._createDateInput(options);\n that._old = that._update(options.value || that.element.val());\n that._oldText = element.val();\n kendo.notify(that);\n },\n events: [\n OPEN,\n CLOSE,\n CHANGE\n ],\n options: {\n name: 'DatePicker',\n value: null,\n footer: '',\n format: '',\n culture: '',\n parseFormats: [],\n min: new Date(1900, 0, 1),\n max: new Date(2099, 11, 31),\n start: MONTH,\n depth: MONTH,\n animation: {},\n month: {},\n dates: [],\n disableDates: null,\n ARIATemplate: 'Current focused date is #=kendo.toString(data.current, \"D\")#',\n dateInput: false,\n weekNumber: false,\n componentType: 'classic'\n },\n setOptions: function (options) {\n var that = this;\n var value = that._value;\n Widget.fn.setOptions.call(that, options);\n options = that.options;\n options.min = parse(options.min);\n options.max = parse(options.max);\n normalize(options);\n that.dateView.setOptions(options);\n that._createDateInput(options);\n if (!that._dateInput) {\n that.element.val(kendo.toString(value, options.format, options.culture));\n }\n if (value) {\n that._updateARIA(value);\n }\n },\n _editable: function (options) {\n var that = this, icon = that._dateIcon.off(ns), element = that.element.off(ns), wrapper = that._inputWrapper.off(ns), readonly = options.readonly, disable = options.disable;\n if (!readonly && !disable) {\n wrapper.addClass(DEFAULT).removeClass(STATEDISABLED).on(HOVEREVENTS, that._toggleHover);\n if (element && element.length) {\n element[0].removeAttribute(DISABLED);\n element[0].removeAttribute(READONLY);\n }\n element.attr(ARIA_DISABLED, false).attr(ARIA_DISABLED, false).on('keydown' + ns, proxy(that._keydown, that)).on('focusout' + ns, proxy(that._blur, that)).on('focus' + ns, function () {\n that._inputWrapper.addClass(FOCUSED);\n });\n icon.on(UP, proxy(that._click, that)).on(MOUSEDOWN, preventDefault);\n } else {\n wrapper.addClass(disable ? STATEDISABLED : DEFAULT).removeClass(disable ? DEFAULT : STATEDISABLED);\n element.attr(DISABLED, disable).attr(READONLY, readonly).attr(ARIA_DISABLED, disable).attr(ARIA_READONLY, readonly);\n }\n },\n readonly: function (readonly) {\n this._editable({\n readonly: readonly === undefined ? true : readonly,\n disable: false\n });\n if (this._dateInput) {\n this._dateInput._editable({\n readonly: readonly === undefined ? true : readonly,\n disable: false\n });\n }\n },\n enable: function (enable) {\n this._editable({\n readonly: false,\n disable: !(enable = enable === undefined ? true : enable)\n });\n if (this._dateInput) {\n this._dateInput._editable({\n readonly: false,\n disable: !(enable = enable === undefined ? true : enable)\n });\n }\n },\n destroy: function () {\n var that = this;\n Widget.fn.destroy.call(that);\n that.dateView.destroy();\n that.element.off(ns);\n that._dateIcon.off(ns);\n that._inputWrapper.off(ns);\n if (that._form) {\n that._form.off('reset', that._resetHandler);\n }\n },\n open: function () {\n this.dateView.open();\n },\n close: function () {\n this.dateView.close();\n },\n min: function (value) {\n return this._option(MIN, value);\n },\n max: function (value) {\n return this._option(MAX, value);\n },\n value: function (value) {\n var that = this;\n if (value === undefined) {\n return that._value;\n }\n that._old = that._update(value);\n if (that._old === null && !that._dateInput) {\n that.element.val('');\n }\n that._oldText = that.element.val();\n },\n _toggleHover: function (e) {\n $(e.currentTarget).toggleClass(HOVER, e.type === 'mouseenter');\n },\n _blur: function () {\n var that = this, value = that.element.val();\n that.close();\n if (value !== that._oldText) {\n that._change(value);\n if (!value) {\n that.dateView.current(kendo.calendar.getToday());\n }\n }\n that._inputWrapper.removeClass(FOCUSED);\n },\n _click: function (e) {\n var that = this;\n that.dateView.toggle();\n that._focusElement(e.type);\n },\n _focusElement: function (eventType) {\n var element = this.element;\n if ((!support.touch || support.mouseAndTouchPresent && !(eventType || '').match(/touch/i)) && element[0] !== activeElement()) {\n element.trigger('focus');\n }\n },\n _change: function (value) {\n var that = this, oldValue = that.element.val(), dateChanged;\n value = that._update(value);\n dateChanged = !kendo.calendar.isEqualDate(that._old, value);\n var valueUpdated = dateChanged && !that._typing;\n var textFormatted = oldValue !== that.element.val();\n if (valueUpdated || textFormatted) {\n that.element.trigger(CHANGE);\n }\n if (dateChanged) {\n that._old = value;\n that._oldText = that.element.val();\n that.trigger(CHANGE);\n }\n that._typing = false;\n },\n _keydown: function (e) {\n var that = this, dateView = that.dateView, value = that.element.val(), handled = false;\n if (!dateView.popup.visible() && e.keyCode == keys.ENTER && value !== that._oldText) {\n that._change(value);\n } else {\n handled = dateView.move(e);\n that._updateARIA(dateView._current);\n if (!handled) {\n that._typing = true;\n } else if (that._dateInput && e.stopImmediatePropagation) {\n e.stopImmediatePropagation();\n }\n }\n },\n _icon: function () {\n var that = this, element = that.element, icon;\n icon = element.next('span.k-select');\n if (!icon[0]) {\n icon = $('<span unselectable=\"on\" class=\"k-select\" aria-label=\"select\"><span class=\"k-icon k-i-calendar\"></span></span>').insertAfter(element);\n }\n that._dateIcon = icon.attr({\n 'role': 'button',\n 'aria-controls': that.dateView._dateViewID\n });\n },\n _option: function (option, value) {\n var that = this, options = that.options;\n if (value === undefined) {\n return options[option];\n }\n value = parse(value, options.parseFormats, options.culture);\n if (!value) {\n return;\n }\n options[option] = new DATE(+value);\n that.dateView[option](value);\n },\n _update: function (value) {\n var that = this, options = that.options, min = options.min, max = options.max, current = that._value, date = parse(value, options.parseFormats, options.culture), isSameType = date === null && current === null || date instanceof Date && current instanceof Date, formattedValue;\n if (options.disableDates(date)) {\n date = null;\n if (!that._old && !that.element.val()) {\n value = null;\n }\n }\n if (+date === +current && isSameType) {\n formattedValue = kendo.toString(date, options.format, options.culture);\n if (formattedValue !== value && !(that._dateInput && !date)) {\n that.element.val(date === null ? value : formattedValue);\n }\n return date;\n }\n if (date !== null && isEqualDatePart(date, min)) {\n date = restrictValue(date, min, max);\n } else if (!isInRange(date, min, max)) {\n date = null;\n }\n that._value = date;\n that.dateView.value(date);\n if (that._dateInput && date) {\n that._dateInput.value(date || value);\n } else {\n that.element.val(kendo.toString(date || value, options.format, options.culture));\n }\n that._updateARIA(date);\n return date;\n },\n _wrapper: function () {\n var that = this, element = that.element, wrapper;\n wrapper = element.parents('.k-datepicker');\n if (!wrapper[0]) {\n wrapper = element.wrap(SPAN).parent().addClass('k-picker-wrap k-state-default');\n wrapper = wrapper.wrap(SPAN).parent();\n }\n wrapper[0].style.cssText = element[0].style.cssText;\n element.css({\n width: '100%',\n height: element[0].style.height\n });\n that.wrapper = wrapper.addClass('k-widget k-datepicker').addClass(element[0].className).removeClass('input-validation-error');\n that._inputWrapper = $(wrapper[0].firstChild);\n },\n _reset: function () {\n var that = this, element = that.element, formId = element.attr('form'), options = that.options, disabledDate = options.disableDates, parseFormats = options.parseFormats.length ? options.parseFormats : null, optionsValue = that._initialOptions.value, form = formId ? $('#' + formId) : element.closest('form'), initialValue = element[0].defaultValue;\n if (optionsValue && (disabledDate && disabledDate(optionsValue))) {\n optionsValue = null;\n }\n if ((!initialValue || !kendo.parseDate(initialValue, parseFormats, options.culture)) && optionsValue) {\n element.attr('value', kendo.toString(optionsValue, options.format, options.culture));\n }\n if (form[0]) {\n that._resetHandler = function () {\n that.value(optionsValue || element[0].defaultValue);\n that.max(that._initialOptions.max);\n that.min(that._initialOptions.min);\n };\n that._form = form.on('reset', that._resetHandler);\n }\n },\n _template: function () {\n this._ariaTemplate = template(this.options.ARIATemplate);\n },\n _createDateInput: function (options) {\n if (this._dateInput) {\n this._dateInput.destroy();\n this._dateInput = null;\n }\n if (options.dateInput) {\n this._dateInput = new ui.DateInput(this.element, {\n culture: options.culture,\n format: options.format,\n min: options.min,\n max: options.max\n });\n }\n },\n _updateARIA: function (date) {\n var cell;\n var that = this;\n var calendar = that.dateView.calendar;\n if (that.element && that.element.length) {\n that.element[0].removeAttribute('aria-activedescendant');\n }\n if (calendar) {\n cell = calendar._cell;\n cell.attr('aria-label', that._ariaTemplate({ current: date || calendar.current() }));\n that.element.attr('aria-activedescendant', cell.attr('id'));\n }\n }\n });\n ui.plugin(DatePicker);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.virtuallist', ['kendo.data'], f);\n}(function () {\n var __meta__ = {\n id: 'virtuallist',\n name: 'VirtualList',\n category: 'framework',\n depends: ['data'],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, Widget = ui.Widget, DataBoundWidget = ui.DataBoundWidget, proxy = $.proxy, percentageUnitsRegex = /^\\d+(\\.\\d+)?%$/i, WRAPPER = 'k-virtual-wrap', VIRTUALLIST = 'k-virtual-list', CONTENT = 'k-virtual-content', LIST = 'k-list', HEADER = 'k-group-header', VIRTUALITEM = 'k-virtual-item', ITEM = 'k-item', HEIGHTCONTAINER = 'k-height-container', GROUPITEM = 'k-group', SELECTED = 'k-state-selected', FOCUSED = 'k-state-focused', HOVER = 'k-state-hover', CHANGE = 'change', CLICK = 'click', LISTBOUND = 'listBound', ITEMCHANGE = 'itemChange', ACTIVATE = 'activate', DEACTIVATE = 'deactivate', VIRTUAL_LIST_NS = '.VirtualList';\n function lastFrom(array) {\n return array[array.length - 1];\n }\n function toArray(value) {\n return value instanceof Array ? value : [value];\n }\n function isPrimitive(dataItem) {\n return typeof dataItem === 'string' || typeof dataItem === 'number' || typeof dataItem === 'boolean';\n }\n function getItemCount(screenHeight, listScreens, itemHeight) {\n return Math.ceil(screenHeight * listScreens / itemHeight);\n }\n function appendChild(parent, className, tagName) {\n var element = document.createElement(tagName || 'div');\n if (className) {\n element.className = className;\n }\n parent.appendChild(element);\n return element;\n }\n function getDefaultItemHeight() {\n var mockList = $('<div class=\"k-popup\"><ul class=\"k-list\"><li class=\"k-item\"><li></ul></div>'), lineHeight;\n mockList.css({\n position: 'absolute',\n left: '-200000px',\n visibility: 'hidden'\n });\n mockList.appendTo(document.body);\n lineHeight = parseFloat(kendo.getComputedStyles(mockList.find('.k-item')[0], ['line-height'])['line-height']);\n mockList.remove();\n return lineHeight;\n }\n function bufferSizes(screenHeight, listScreens, opposite) {\n return {\n down: screenHeight * opposite,\n up: screenHeight * (listScreens - 1 - opposite)\n };\n }\n function listValidator(options, screenHeight) {\n var downThreshold = (options.listScreens - 1 - options.threshold) * screenHeight;\n var upThreshold = options.threshold * screenHeight;\n return function (list, scrollTop, lastScrollTop) {\n if (scrollTop > lastScrollTop) {\n return scrollTop - list.top < downThreshold;\n } else {\n return list.top === 0 || scrollTop - list.top > upThreshold;\n }\n };\n }\n function scrollCallback(element, callback) {\n return function (force) {\n return callback(element.scrollTop, force);\n };\n }\n function syncList(reorder) {\n return function (list, force) {\n reorder(list.items, list.index, force);\n return list;\n };\n }\n function position(element, y) {\n if (kendo.support.browser.msie && kendo.support.browser.version < 10) {\n element.style.top = y + 'px';\n } else {\n element.style.webkitTransform = 'translateY(' + y + 'px)';\n element.style.transform = 'translateY(' + y + 'px)';\n }\n }\n function map2(callback, templates) {\n return function (arr1, arr2) {\n for (var i = 0, len = arr1.length; i < len; i++) {\n callback(arr1[i], arr2[i], templates);\n if (arr2[i].item) {\n this.trigger(ITEMCHANGE, {\n item: $(arr1[i]),\n data: arr2[i].item,\n ns: kendo.ui\n });\n }\n }\n };\n }\n function reshift(items, diff) {\n var range;\n if (diff > 0) {\n range = items.splice(0, diff);\n items.push.apply(items, range);\n } else {\n range = items.splice(diff, -diff);\n items.unshift.apply(items, range);\n }\n return range;\n }\n function render(element, data, templates) {\n var itemTemplate = templates.template;\n element = $(element);\n if (!data.item) {\n itemTemplate = templates.placeholderTemplate;\n }\n if (data.index === 0 && this.header && data.group) {\n this.header.html(templates.fixedGroupTemplate(data.group));\n }\n this.angular('cleanup', function () {\n return { elements: [element] };\n });\n element.attr('data-uid', data.item ? data.item.uid : '').attr('data-offset-index', data.index);\n if (this.options.columns && this.options.columns.length && data.item) {\n element.html(renderColumns(this.options, data.item, templates));\n } else {\n element.html(itemTemplate(data.item || {}));\n }\n element.toggleClass(FOCUSED, data.current);\n element.toggleClass(SELECTED, data.selected);\n element.toggleClass('k-first', data.newGroup);\n element.toggleClass('k-last', data.isLastGroupedItem);\n element.toggleClass('k-loading-item', !data.item);\n if (data.index !== 0 && data.newGroup) {\n $('<div class=' + GROUPITEM + '></div>').appendTo(element).html(templates.groupTemplate(data.group));\n }\n if (data.top !== undefined) {\n position(element[0], data.top);\n }\n this.angular('compile', function () {\n return {\n elements: [element],\n data: [{\n dataItem: data.item,\n group: data.group,\n newGroup: data.newGroup\n }]\n };\n });\n }\n function renderColumns(options, dataItem, templates) {\n var item = '';\n for (var i = 0; i < options.columns.length; i++) {\n var currentWidth = options.columns[i].width;\n var currentWidthInt = parseInt(currentWidth, 10);\n var widthStyle = '';\n if (currentWidth) {\n widthStyle += 'style=\\'width:';\n widthStyle += currentWidthInt;\n widthStyle += percentageUnitsRegex.test(currentWidth) ? '%' : 'px';\n widthStyle += ';\\'';\n }\n item += '<span class=\\'k-cell\\' ' + widthStyle + '>';\n item += templates['column' + i](dataItem);\n item += '</span>';\n }\n return item;\n }\n function mapChangedItems(selected, itemsToMatch) {\n var itemsLength = itemsToMatch.length;\n var selectedLength = selected.length;\n var dataItem;\n var found;\n var i, j;\n var changed = [];\n var unchanged = [];\n if (selectedLength) {\n for (i = 0; i < selectedLength; i++) {\n dataItem = selected[i];\n found = false;\n for (j = 0; j < itemsLength; j++) {\n if (dataItem === itemsToMatch[j]) {\n found = true;\n changed.push({\n index: i,\n item: dataItem\n });\n break;\n }\n }\n if (!found) {\n unchanged.push(dataItem);\n }\n }\n }\n return {\n changed: changed,\n unchanged: unchanged\n };\n }\n function isActivePromise(promise) {\n return promise && promise.state() !== 'resolved';\n }\n var VirtualList = DataBoundWidget.extend({\n init: function (element, options) {\n var that = this;\n that.bound(false);\n that._fetching = false;\n Widget.fn.init.call(that, element, options);\n if (!that.options.itemHeight) {\n that.options.itemHeight = getDefaultItemHeight();\n }\n options = that.options;\n that.element.addClass(LIST + ' ' + VIRTUALLIST).attr('role', 'listbox');\n that.content = that.element.wrap('<div unselectable=\\'on\\' class=\\'' + CONTENT + '\\'></div>').parent();\n that.wrapper = that.content.wrap('<div class=\\'' + WRAPPER + '\\'></div>').parent();\n that.header = that.content.before('<div class=\\'' + HEADER + '\\'></div>').prev();\n if (options.columns && options.columns.length) {\n that.element.removeClass(LIST);\n }\n that.element.on('mouseenter' + VIRTUAL_LIST_NS, 'li:not(.k-loading-item)', function () {\n $(this).addClass(HOVER);\n }).on('mouseleave' + VIRTUAL_LIST_NS, 'li', function () {\n $(this).removeClass(HOVER);\n });\n that._values = toArray(that.options.value);\n that._selectedDataItems = [];\n that._selectedIndexes = [];\n that._rangesList = {};\n that._promisesList = [];\n that._optionID = kendo.guid();\n that._templates();\n that.setDataSource(options.dataSource);\n that.content.on('scroll' + VIRTUAL_LIST_NS, kendo.throttle(function () {\n that._renderItems();\n that._triggerListBound();\n }, options.delay));\n that._selectable();\n },\n options: {\n name: 'VirtualList',\n autoBind: true,\n delay: 100,\n height: null,\n listScreens: 4,\n threshold: 0.5,\n itemHeight: null,\n oppositeBuffer: 1,\n type: 'flat',\n selectable: false,\n value: [],\n dataValueField: null,\n template: '#:data#',\n placeholderTemplate: 'loading...',\n groupTemplate: '#:data#',\n fixedGroupTemplate: '#:data#',\n mapValueTo: 'index',\n valueMapper: null\n },\n events: [\n CHANGE,\n CLICK,\n LISTBOUND,\n ITEMCHANGE,\n ACTIVATE,\n DEACTIVATE\n ],\n setOptions: function (options) {\n Widget.fn.setOptions.call(this, options);\n if (this._selectProxy && this.options.selectable === false) {\n this.element.off(CLICK, '.' + VIRTUALITEM, this._selectProxy);\n } else if (!this._selectProxy && this.options.selectable) {\n this._selectable();\n }\n this._templates();\n this.refresh();\n },\n items: function () {\n return $(this._items);\n },\n destroy: function () {\n this.wrapper.off(VIRTUAL_LIST_NS);\n this.dataSource.unbind(CHANGE, this._refreshHandler);\n Widget.fn.destroy.call(this);\n },\n setDataSource: function (source) {\n var that = this;\n var dataSource = source || {};\n var value;\n dataSource = $.isArray(dataSource) ? { data: dataSource } : dataSource;\n dataSource = kendo.data.DataSource.create(dataSource);\n if (that.dataSource) {\n that.dataSource.unbind(CHANGE, that._refreshHandler);\n that._clean();\n that.bound(false);\n that._deferValueSet = true;\n value = that.value();\n that.value([]);\n that.mute(function () {\n that.value(value);\n });\n } else {\n that._refreshHandler = $.proxy(that.refresh, that);\n }\n that.dataSource = dataSource.bind(CHANGE, that._refreshHandler);\n that.setDSFilter(dataSource.filter());\n if (dataSource.view().length !== 0) {\n that.refresh();\n } else if (that.options.autoBind) {\n dataSource.fetch();\n }\n },\n skip: function () {\n return this.dataSource.currentRangeStart();\n },\n _triggerListBound: function () {\n var that = this;\n var skip = that.skip();\n if (that.bound() && !that._selectingValue && that._skip !== skip) {\n that._skip = skip;\n that.trigger(LISTBOUND);\n }\n },\n _getValues: function (dataItems) {\n var getter = this._valueGetter;\n return $.map(dataItems, function (dataItem) {\n return getter(dataItem);\n });\n },\n _highlightSelectedItems: function () {\n for (var i = 0; i < this._selectedDataItems.length; i++) {\n var item = this._getElementByDataItem(this._selectedDataItems[i]);\n if (item.length) {\n item.addClass(SELECTED);\n }\n }\n },\n refresh: function (e) {\n var that = this;\n var action = e && e.action;\n var isItemChange = action === 'itemchange';\n var filtered = this.isFiltered();\n var result;\n if (that._mute) {\n return;\n }\n that._deferValueSet = false;\n if (!that._fetching) {\n if (filtered) {\n that.focus(0);\n }\n that._createList();\n if (!action && that._values.length && !filtered && !that.options.skipUpdateOnBind && !that._emptySearch) {\n that._selectingValue = true;\n that.bound(true);\n that.value(that._values, true).done(function () {\n that._selectingValue = false;\n that._triggerListBound();\n });\n } else {\n that.bound(true);\n that._highlightSelectedItems();\n that._triggerListBound();\n }\n } else {\n if (that._renderItems) {\n that._renderItems(true);\n }\n that._triggerListBound();\n }\n if (isItemChange || action === 'remove') {\n result = mapChangedItems(that._selectedDataItems, e.items);\n if (result.changed.length) {\n if (isItemChange) {\n that.trigger('selectedItemChange', { items: result.changed });\n } else {\n that.value(that._getValues(result.unchanged));\n }\n }\n }\n that._fetching = false;\n },\n removeAt: function (position) {\n this._selectedIndexes.splice(position, 1);\n this._values.splice(position, 1);\n return {\n position: position,\n dataItem: this._selectedDataItems.splice(position, 1)[0]\n };\n },\n setValue: function (value) {\n this._values = toArray(value);\n },\n value: function (value, _forcePrefetch) {\n var that = this;\n if (value === undefined) {\n return that._values.slice();\n }\n if (value === null) {\n value = [];\n }\n value = toArray(value);\n if (!that._valueDeferred || that._valueDeferred.state() === 'resolved') {\n that._valueDeferred = $.Deferred();\n }\n var shouldClear = that.options.selectable === 'multiple' && that.select().length && value.length;\n if (shouldClear || !value.length) {\n that.select(-1);\n }\n that._values = value;\n if (that.bound() && !that._mute && !that._deferValueSet || _forcePrefetch) {\n that._prefetchByValue(value);\n }\n return that._valueDeferred;\n },\n _checkValuesOrder: function (value) {\n if (this._removedAddedIndexes && this._removedAddedIndexes.length === value.length) {\n var newValue = this._removedAddedIndexes.slice();\n this._removedAddedIndexes = null;\n return newValue;\n }\n return value;\n },\n _prefetchByValue: function (value) {\n var that = this, dataView = that._dataView, valueGetter = that._valueGetter, mapValueTo = that.options.mapValueTo, item, match = false, forSelection = [];\n for (var i = 0; i < value.length; i++) {\n for (var idx = 0; idx < dataView.length; idx++) {\n item = dataView[idx].item;\n if (item) {\n match = isPrimitive(item) ? value[i] === item : value[i] === valueGetter(item);\n if (match) {\n forSelection.push(dataView[idx].index);\n }\n }\n }\n }\n if (forSelection.length === value.length) {\n that._values = [];\n that.select(forSelection);\n return;\n }\n if (typeof that.options.valueMapper === 'function') {\n that.options.valueMapper({\n value: this.options.selectable === 'multiple' ? value : value[0],\n success: function (response) {\n if (mapValueTo === 'index') {\n that.mapValueToIndex(response);\n } else if (mapValueTo === 'dataItem') {\n that.mapValueToDataItem(response);\n }\n }\n });\n } else {\n if (!that.value()[0]) {\n that.select([-1]);\n } else {\n that._selectingValue = false;\n that._triggerListBound();\n }\n }\n },\n mapValueToIndex: function (indexes) {\n if (indexes === undefined || indexes === -1 || indexes === null) {\n indexes = [];\n } else {\n indexes = toArray(indexes);\n }\n if (!indexes.length) {\n indexes = [-1];\n } else {\n var removed = this._deselect([]).removed;\n if (removed.length) {\n this._triggerChange(removed, []);\n }\n }\n this.select(indexes);\n },\n mapValueToDataItem: function (dataItems) {\n var removed, added;\n if (dataItems === undefined || dataItems === null) {\n dataItems = [];\n } else {\n dataItems = toArray(dataItems);\n }\n if (!dataItems.length) {\n this.select([-1]);\n } else {\n removed = $.map(this._selectedDataItems, function (item, index) {\n return {\n index: index,\n dataItem: item\n };\n });\n added = $.map(dataItems, function (item, index) {\n return {\n index: index,\n dataItem: item\n };\n });\n this._selectedDataItems = dataItems;\n this._selectedIndexes = [];\n for (var i = 0; i < this._selectedDataItems.length; i++) {\n var item = this._getElementByDataItem(this._selectedDataItems[i]);\n this._selectedIndexes.push(this._getIndecies(item)[0]);\n item.addClass(SELECTED);\n }\n this._triggerChange(removed, added);\n if (this._valueDeferred) {\n this._valueDeferred.resolve();\n }\n }\n },\n deferredRange: function (index) {\n var dataSource = this.dataSource;\n var take = this.itemCount;\n var ranges = this._rangesList;\n var result = $.Deferred();\n var defs = [];\n var low = Math.floor(index / take) * take;\n var high = Math.ceil(index / take) * take;\n var pages = high === low ? [high] : [\n low,\n high\n ];\n $.each(pages, function (_, skip) {\n var end = skip + take;\n var existingRange = ranges[skip];\n var deferred;\n if (!existingRange || existingRange.end !== end) {\n deferred = $.Deferred();\n ranges[skip] = {\n end: end,\n deferred: deferred\n };\n dataSource._multiplePrefetch(skip, take, function () {\n deferred.resolve();\n });\n } else {\n deferred = existingRange.deferred;\n }\n defs.push(deferred);\n });\n $.when.apply($, defs).then(function () {\n result.resolve();\n });\n return result;\n },\n prefetch: function (indexes) {\n var that = this, take = this.itemCount, isEmptyList = !that._promisesList.length;\n if (!isActivePromise(that._activeDeferred)) {\n that._activeDeferred = $.Deferred();\n that._promisesList = [];\n }\n $.each(indexes, function (_, index) {\n that._promisesList.push(that.deferredRange(that._getSkip(index, take)));\n });\n if (isEmptyList) {\n $.when.apply($, that._promisesList).done(function () {\n that._promisesList = [];\n that._activeDeferred.resolve();\n });\n }\n return that._activeDeferred;\n },\n _findDataItem: function (view, index) {\n var group;\n if (this.options.type === 'group') {\n for (var i = 0; i < view.length; i++) {\n group = view[i].items;\n if (group.length <= index) {\n index = index - group.length;\n } else {\n return group[index];\n }\n }\n }\n return view[index];\n },\n _getRange: function (skip, take) {\n return this.dataSource._findRange(skip, Math.min(skip + take, this.dataSource.total()));\n },\n dataItemByIndex: function (index) {\n var that = this;\n var take = that.itemCount;\n var skip = that._getSkip(index, take);\n var view = this._getRange(skip, take);\n if (!that._getRange(skip, take).length) {\n return null;\n }\n if (that.options.type === 'group') {\n kendo.ui.progress($(that.wrapper), true);\n that.mute(function () {\n that.dataSource.range(skip, take, function () {\n kendo.ui.progress($(that.wrapper), false);\n });\n view = that.dataSource.view();\n });\n }\n return that._findDataItem(view, [index - skip]);\n },\n selectedDataItems: function () {\n return this._selectedDataItems.slice();\n },\n scrollWith: function (value) {\n this.content.scrollTop(this.content.scrollTop() + value);\n },\n scrollTo: function (y) {\n this.content.scrollTop(y);\n },\n scrollToIndex: function (index) {\n this.scrollTo(index * this.options.itemHeight);\n },\n focus: function (candidate) {\n var element, index, data, current, itemHeight = this.options.itemHeight, id = this._optionID, triggerEvent = true;\n if (candidate === undefined) {\n current = this.element.find('.' + FOCUSED);\n return current.length ? current : null;\n }\n if (typeof candidate === 'function') {\n data = this.dataSource.flatView();\n for (var idx = 0; idx < data.length; idx++) {\n if (candidate(data[idx])) {\n candidate = idx;\n break;\n }\n }\n }\n if (candidate instanceof Array) {\n candidate = lastFrom(candidate);\n }\n if (isNaN(candidate)) {\n element = $(candidate);\n index = parseInt($(element).attr('data-offset-index'), 10);\n } else {\n index = candidate;\n element = this._getElementByIndex(index);\n }\n if (index === -1) {\n this.element.find('.' + FOCUSED).removeClass(FOCUSED);\n this._focusedIndex = undefined;\n return;\n }\n if (element.length) {\n if (element.hasClass(FOCUSED)) {\n triggerEvent = false;\n }\n if (this._focusedIndex !== undefined) {\n current = this._getElementByIndex(this._focusedIndex);\n current.removeClass(FOCUSED).removeAttr('id');\n if (triggerEvent) {\n this.trigger(DEACTIVATE);\n }\n }\n this._focusedIndex = index;\n element.addClass(FOCUSED).attr('id', id);\n var position = this._getElementLocation(index);\n if (position === 'top') {\n this.scrollTo(index * itemHeight);\n } else if (position === 'bottom') {\n this.scrollTo(index * itemHeight + itemHeight - this._screenHeight);\n } else if (position === 'outScreen') {\n this.scrollTo(index * itemHeight);\n }\n if (triggerEvent) {\n this.trigger(ACTIVATE);\n }\n } else {\n this._focusedIndex = index;\n this.items().removeClass(FOCUSED);\n this.scrollToIndex(index);\n }\n },\n focusIndex: function () {\n return this._focusedIndex;\n },\n focusFirst: function () {\n this.scrollTo(0);\n this.focus(0);\n },\n focusLast: function () {\n var lastIndex = this.dataSource.total();\n this.scrollTo(this.heightContainer.offsetHeight);\n this.focus(lastIndex - 1);\n },\n focusPrev: function () {\n var index = this._focusedIndex;\n var current;\n if (!isNaN(index) && index > 0) {\n index -= 1;\n this.focus(index);\n current = this.focus();\n if (current && current.hasClass('k-loading-item')) {\n index += 1;\n this.focus(index);\n }\n return index;\n } else {\n index = this.dataSource.total() - 1;\n this.focus(index);\n return index;\n }\n },\n focusNext: function () {\n var index = this._focusedIndex;\n var lastIndex = this.dataSource.total() - 1;\n var current;\n if (!isNaN(index) && index < lastIndex) {\n index += 1;\n this.focus(index);\n current = this.focus();\n if (current && current.hasClass('k-loading-item')) {\n index -= 1;\n this.focus(index);\n }\n return index;\n } else {\n index = 0;\n this.focus(index);\n return index;\n }\n },\n _triggerChange: function (removed, added) {\n removed = removed || [];\n added = added || [];\n if (removed.length || added.length) {\n this.trigger(CHANGE, {\n removed: removed,\n added: added\n });\n }\n },\n select: function (candidate) {\n var that = this, indices, initialIndices, singleSelection = that.options.selectable !== 'multiple', prefetchStarted = isActivePromise(that._activeDeferred), filtered = this.isFiltered(), isAlreadySelected, deferred, result, removed = [];\n if (candidate === undefined) {\n return that._selectedIndexes.slice();\n }\n if (!that._selectDeferred || that._selectDeferred.state() === 'resolved') {\n that._selectDeferred = $.Deferred();\n }\n indices = that._getIndecies(candidate);\n isAlreadySelected = singleSelection && !filtered && lastFrom(indices) === lastFrom(this._selectedIndexes);\n removed = that._deselectCurrentValues(indices);\n if (removed.length || !indices.length || isAlreadySelected) {\n that._triggerChange(removed);\n if (that._valueDeferred) {\n that._valueDeferred.resolve().promise();\n }\n return that._selectDeferred.resolve().promise();\n }\n if (indices.length === 1 && indices[0] === -1) {\n indices = [];\n }\n initialIndices = indices;\n result = that._deselect(indices);\n removed = result.removed;\n indices = result.indices;\n if (singleSelection) {\n prefetchStarted = false;\n if (indices.length) {\n indices = [lastFrom(indices)];\n }\n }\n var done = function () {\n var added = that._select(indices);\n if (initialIndices.length === indices.length || singleSelection) {\n that.focus(indices);\n }\n that._triggerChange(removed, added);\n if (that._valueDeferred) {\n that._valueDeferred.resolve();\n }\n that._selectDeferred.resolve();\n };\n deferred = that.prefetch(indices);\n if (!prefetchStarted) {\n if (deferred) {\n deferred.done(done);\n } else {\n done();\n }\n }\n return that._selectDeferred.promise();\n },\n bound: function (bound) {\n if (bound === undefined) {\n return this._listCreated;\n }\n this._listCreated = bound;\n },\n mute: function (callback) {\n this._mute = true;\n proxy(callback(), this);\n this._mute = false;\n },\n setDSFilter: function (filter) {\n this._lastDSFilter = $.extend({}, filter);\n },\n isFiltered: function () {\n if (!this._lastDSFilter) {\n this.setDSFilter(this.dataSource.filter());\n }\n return !kendo.data.Query.compareFilters(this.dataSource.filter(), this._lastDSFilter);\n },\n skipUpdate: $.noop,\n _getElementByIndex: function (index) {\n return this.items().filter(function (idx, element) {\n return index === parseInt($(element).attr('data-offset-index'), 10);\n });\n },\n _getElementByDataItem: function (dataItem) {\n var dataView = this._dataView, valueGetter = this._valueGetter, element, match;\n for (var i = 0; i < dataView.length; i++) {\n match = dataView[i].item && isPrimitive(dataView[i].item) ? dataView[i].item === dataItem : dataView[i].item && dataItem && valueGetter(dataView[i].item) == valueGetter(dataItem);\n if (match) {\n element = dataView[i];\n break;\n }\n }\n return element ? this._getElementByIndex(element.index) : $();\n },\n _clean: function () {\n this.result = undefined;\n this._lastScrollTop = undefined;\n this._skip = undefined;\n $(this.heightContainer).remove();\n this.heightContainer = undefined;\n this.element.empty();\n },\n _height: function () {\n var hasData = !!this.dataSource.view().length, height = this.options.height, itemHeight = this.options.itemHeight, total = this.dataSource.total();\n if (!hasData) {\n height = 0;\n } else if (height / itemHeight > total) {\n height = total * itemHeight;\n }\n return height;\n },\n setScreenHeight: function () {\n var height = this._height();\n this.content.height(height);\n this._screenHeight = height;\n },\n screenHeight: function () {\n return this._screenHeight;\n },\n _getElementLocation: function (index) {\n var scrollTop = this.content.scrollTop(), screenHeight = this._screenHeight, itemHeight = this.options.itemHeight, yPosition = index * itemHeight, yDownPostion = yPosition + itemHeight, screenEnd = scrollTop + screenHeight, position;\n if (yPosition === scrollTop - itemHeight || yDownPostion > scrollTop && yPosition < scrollTop) {\n position = 'top';\n } else if (yPosition === screenEnd || yPosition < screenEnd && screenEnd < yDownPostion) {\n position = 'bottom';\n } else if (yPosition >= scrollTop && yPosition <= scrollTop + (screenHeight - itemHeight)) {\n position = 'inScreen';\n } else {\n position = 'outScreen';\n }\n return position;\n },\n _templates: function () {\n var options = this.options;\n var templates = {\n template: options.template,\n placeholderTemplate: options.placeholderTemplate,\n groupTemplate: options.groupTemplate,\n fixedGroupTemplate: options.fixedGroupTemplate\n };\n if (options.columns) {\n for (var i = 0; i < options.columns.length; i++) {\n var currentColumn = options.columns[i];\n var templateText = currentColumn.field ? currentColumn.field.toString() : 'text';\n templates['column' + i] = currentColumn.template || '#: ' + templateText + '#';\n }\n }\n for (var key in templates) {\n if (typeof templates[key] !== 'function') {\n templates[key] = kendo.template(templates[key] || '');\n }\n }\n this.templates = templates;\n },\n _generateItems: function (element, count) {\n var items = [], item, itemHeight = this.options.itemHeight + 'px';\n while (count-- > 0) {\n item = document.createElement('li');\n item.tabIndex = -1;\n item.className = VIRTUALITEM + ' ' + ITEM;\n item.setAttribute('role', 'option');\n item.style.height = itemHeight;\n item.style.minHeight = itemHeight;\n element.appendChild(item);\n items.push(item);\n }\n return items;\n },\n _saveInitialRanges: function () {\n var ranges = this.dataSource._ranges;\n var deferred = $.Deferred();\n deferred.resolve();\n this._rangesList = {};\n for (var i = 0; i < ranges.length; i++) {\n this._rangesList[ranges[i].start] = {\n end: ranges[i].end,\n deferred: deferred\n };\n }\n },\n _createList: function () {\n var that = this, content = that.content.get(0), options = that.options, dataSource = that.dataSource;\n if (that.bound()) {\n that._clean();\n }\n that._saveInitialRanges();\n that._buildValueGetter();\n that.setScreenHeight();\n that.itemCount = getItemCount(that._screenHeight, options.listScreens, options.itemHeight);\n if (that.itemCount > dataSource.total()) {\n that.itemCount = dataSource.total();\n }\n that._items = that._generateItems(that.element[0], that.itemCount);\n that._setHeight(options.itemHeight * dataSource.total());\n that.options.type = (dataSource.group() || []).length ? 'group' : 'flat';\n if (that.options.type === 'flat') {\n that.header.hide();\n } else {\n that.header.show();\n }\n that.getter = that._getter(function () {\n that._renderItems(true);\n });\n that._onScroll = function (scrollTop, force) {\n var getList = that._listItems(that.getter);\n return that._fixedHeader(scrollTop, getList(scrollTop, force));\n };\n that._renderItems = that._whenChanged(scrollCallback(content, that._onScroll), syncList(that._reorderList(that._items, $.proxy(render, that))));\n that._renderItems();\n that._calculateGroupPadding(that._screenHeight);\n that._calculateColumnsHeaderPadding();\n },\n _setHeight: function (height) {\n var currentHeight, heightContainer = this.heightContainer;\n if (!heightContainer) {\n heightContainer = this.heightContainer = appendChild(this.content[0], HEIGHTCONTAINER);\n } else {\n currentHeight = heightContainer.offsetHeight;\n }\n if (height !== currentHeight) {\n heightContainer.innerHTML = '';\n while (height > 0) {\n var padHeight = Math.min(height, 250000);\n appendChild(heightContainer).style.height = padHeight + 'px';\n height -= padHeight;\n }\n }\n },\n _getter: function () {\n var lastRequestedRange = null, dataSource = this.dataSource, lastRangeStart = dataSource.skip(), type = this.options.type, pageSize = this.itemCount, flatGroups = {};\n if (dataSource.pageSize() < pageSize) {\n this.mute(function () {\n dataSource.pageSize(pageSize);\n });\n }\n return function (index, rangeStart) {\n var that = this;\n if (!dataSource.inRange(rangeStart, pageSize)) {\n if (lastRequestedRange !== rangeStart) {\n lastRequestedRange = rangeStart;\n lastRangeStart = rangeStart;\n if (that._getterDeferred) {\n that._getterDeferred.reject();\n }\n that._getterDeferred = that.deferredRange(rangeStart);\n that._getterDeferred.then(function () {\n var firstItemIndex = that._indexConstraint(that.content[0].scrollTop);\n that._getterDeferred = null;\n if (rangeStart <= firstItemIndex && firstItemIndex <= rangeStart + pageSize) {\n that._fetching = true;\n dataSource.range(rangeStart, pageSize);\n }\n });\n }\n return null;\n } else {\n if (lastRangeStart !== rangeStart) {\n this.mute(function () {\n dataSource.range(rangeStart, pageSize);\n lastRangeStart = rangeStart;\n });\n }\n var result;\n if (type === 'group') {\n if (!flatGroups[rangeStart]) {\n var flatGroup = flatGroups[rangeStart] = [];\n var groups = dataSource.view();\n for (var i = 0, len = groups.length; i < len; i++) {\n var group = groups[i];\n for (var j = 0, groupLength = group.items.length; j < groupLength; j++) {\n flatGroup.push({\n item: group.items[j],\n group: group.value\n });\n }\n }\n }\n result = flatGroups[rangeStart][index - rangeStart];\n } else {\n result = dataSource.view()[index - rangeStart];\n }\n return result;\n }\n };\n },\n _fixedHeader: function (scrollTop, list) {\n var group = this.currentVisibleGroup, itemHeight = this.options.itemHeight, firstVisibleDataItemIndex = Math.floor((scrollTop - list.top) / itemHeight), firstVisibleDataItem = list.items[firstVisibleDataItemIndex];\n if (firstVisibleDataItem && firstVisibleDataItem.item) {\n var firstVisibleGroup = firstVisibleDataItem.group;\n if (firstVisibleGroup !== group) {\n var fixedGroupText = firstVisibleGroup || '';\n this.header.html(this.templates.fixedGroupTemplate(fixedGroupText));\n this.currentVisibleGroup = firstVisibleGroup;\n }\n }\n return list;\n },\n _itemMapper: function (item, index, value) {\n var listType = this.options.type, itemHeight = this.options.itemHeight, currentIndex = this._focusedIndex, selected = false, current = false, newGroup = false, group = null, match = false, valueGetter = this._valueGetter;\n if (listType === 'group') {\n if (item) {\n newGroup = index === 0 || this._currentGroup !== false && this._currentGroup !== item.group;\n this._currentGroup = item.group;\n }\n group = item ? item.group : null;\n item = item ? item.item : null;\n }\n if (this.options.mapValueTo === 'dataItem' && this._selectedDataItems.length && item) {\n for (var i = 0; i < this._selectedDataItems.length; i++) {\n match = valueGetter(this._selectedDataItems[i]) === valueGetter(item);\n if (match) {\n selected = true;\n break;\n }\n }\n } else if (!this.isFiltered() && value.length && item) {\n for (var j = 0; j < value.length; j++) {\n match = isPrimitive(item) ? value[j] === item : value[j] === valueGetter(item);\n if (match) {\n value.splice(j, 1);\n selected = true;\n break;\n }\n }\n }\n if (currentIndex === index) {\n current = true;\n }\n return {\n item: item ? item : null,\n group: group,\n newGroup: newGroup,\n selected: selected,\n current: current,\n index: index,\n top: index * itemHeight\n };\n },\n _range: function (index) {\n var itemCount = this.itemCount, value = this._values.slice(), items = [], item;\n this._view = {};\n this._currentGroup = false;\n for (var i = index, length = index + itemCount; i < length; i++) {\n item = this._itemMapper(this.getter(i, index), i, value);\n if (items[items.length - 1]) {\n items[items.length - 1].isLastGroupedItem = item.newGroup;\n }\n items.push(item);\n this._view[item.index] = item;\n }\n this._dataView = items;\n return items;\n },\n _getDataItemsCollection: function (scrollTop, lastScrollTop) {\n var items = this._range(this._listIndex(scrollTop, lastScrollTop));\n return {\n index: items.length ? items[0].index : 0,\n top: items.length ? items[0].top : 0,\n items: items\n };\n },\n _listItems: function () {\n var screenHeight = this._screenHeight, options = this.options;\n var theValidator = listValidator(options, screenHeight);\n return $.proxy(function (value, force) {\n var result = this.result, lastScrollTop = this._lastScrollTop;\n if (force || !result || !theValidator(result, value, lastScrollTop)) {\n result = this._getDataItemsCollection(value, lastScrollTop);\n }\n this._lastScrollTop = value;\n this.result = result;\n return result;\n }, this);\n },\n _whenChanged: function (getter, callback) {\n var current;\n return function (force) {\n var theNew = getter(force);\n if (theNew !== current) {\n current = theNew;\n callback(theNew, force);\n }\n };\n },\n _reorderList: function (list, reorder) {\n var that = this;\n var length = list.length;\n var currentOffset = -Infinity;\n reorder = $.proxy(map2(reorder, this.templates), this);\n return function (list2, offset, force) {\n var diff = offset - currentOffset;\n var range, range2;\n if (force || Math.abs(diff) >= length) {\n range = list;\n range2 = list2;\n } else {\n range = reshift(list, diff);\n range2 = diff > 0 ? list2.slice(-diff) : list2.slice(0, -diff);\n }\n reorder(range, range2, that.bound());\n currentOffset = offset;\n };\n },\n _bufferSizes: function () {\n var options = this.options;\n return bufferSizes(this._screenHeight, options.listScreens, options.oppositeBuffer);\n },\n _indexConstraint: function (position) {\n var itemCount = this.itemCount, itemHeight = this.options.itemHeight, total = this.dataSource.total();\n return Math.min(Math.max(total - itemCount, 0), Math.max(0, Math.floor(position / itemHeight)));\n },\n _listIndex: function (scrollTop, lastScrollTop) {\n var buffers = this._bufferSizes(), position;\n position = scrollTop - (scrollTop > lastScrollTop ? buffers.down : buffers.up);\n return this._indexConstraint(position);\n },\n _selectable: function () {\n if (this.options.selectable) {\n this._selectProxy = $.proxy(this, '_clickHandler');\n this.element.on(CLICK + VIRTUAL_LIST_NS, '.' + VIRTUALITEM, this._selectProxy);\n }\n },\n getElementIndex: function (element) {\n if (!(element instanceof jQuery)) {\n return undefined;\n }\n return parseInt(element.attr('data-offset-index'), 10);\n },\n _getIndecies: function (candidate) {\n var result = [], data;\n if (typeof candidate === 'function') {\n data = this.dataSource.flatView();\n for (var idx = 0; idx < data.length; idx++) {\n if (candidate(data[idx])) {\n result.push(idx);\n break;\n }\n }\n }\n if (typeof candidate === 'number') {\n result.push(candidate);\n }\n var elementIndex = this.getElementIndex(candidate);\n if (!isNaN(elementIndex)) {\n result.push(elementIndex);\n }\n if (candidate instanceof Array) {\n result = candidate;\n }\n return result;\n },\n _deselect: function (indices) {\n var removed = [], selectedIndex, dataItem, selectedIndexes = this._selectedIndexes, selectedDataItems = this._selectedDataItems, position = 0, selectable = this.options.selectable, removedindexesCounter = 0, valueGetter = this._valueGetter, item, match, result = null;\n indices = indices.slice();\n if (selectable === true || !indices.length) {\n for (var idx = 0; idx < selectedIndexes.length; idx++) {\n if (selectedIndexes[idx] !== undefined) {\n this._getElementByIndex(selectedIndexes[idx]).removeClass(SELECTED);\n } else if (selectedDataItems[idx]) {\n this._getElementByDataItem(selectedDataItems[idx]).removeClass(SELECTED);\n }\n removed.push({\n index: selectedIndexes[idx],\n position: idx,\n dataItem: selectedDataItems[idx]\n });\n }\n this._values = [];\n this._selectedDataItems = [];\n this._selectedIndexes = [];\n } else if (selectable === 'multiple') {\n for (var i = 0; i < indices.length; i++) {\n result = null;\n position = $.inArray(indices[i], selectedIndexes);\n dataItem = this.dataItemByIndex(indices[i]);\n if (position === -1 && dataItem) {\n for (var j = 0; j < selectedDataItems.length; j++) {\n match = isPrimitive(dataItem) ? selectedDataItems[j] === dataItem : valueGetter(selectedDataItems[j]) === valueGetter(dataItem);\n if (match) {\n item = this._getElementByIndex(indices[i]);\n result = this._deselectSingleItem(item, j, indices[i], removedindexesCounter);\n }\n }\n } else {\n selectedIndex = selectedIndexes[position];\n if (selectedIndex !== undefined) {\n item = this._getElementByIndex(selectedIndex);\n result = this._deselectSingleItem(item, position, selectedIndex, removedindexesCounter);\n }\n }\n if (result) {\n indices.splice(i, 1);\n removed.push(result);\n removedindexesCounter++;\n i--;\n }\n }\n }\n return {\n indices: indices,\n removed: removed\n };\n },\n _deselectSingleItem: function (item, position, selectedIndex, removedindexesCounter) {\n var dataItem;\n if (!item.hasClass('k-state-selected')) {\n return;\n }\n item.removeClass(SELECTED);\n this._values.splice(position, 1);\n this._selectedIndexes.splice(position, 1);\n dataItem = this._selectedDataItems.splice(position, 1)[0];\n return {\n index: selectedIndex,\n position: position + removedindexesCounter,\n dataItem: dataItem\n };\n },\n _deselectCurrentValues: function (indices) {\n var children = this.element[0].children;\n var value, index, position;\n var values = this._values;\n var removed = [];\n var idx = 0;\n var j;\n if (this.options.selectable !== 'multiple' || !this.isFiltered()) {\n return [];\n }\n if (indices[0] === -1) {\n $(children).removeClass('k-state-selected');\n removed = $.map(this._selectedDataItems.slice(0), function (dataItem, idx) {\n return {\n dataItem: dataItem,\n position: idx\n };\n });\n this._selectedIndexes = [];\n this._selectedDataItems = [];\n this._values = [];\n return removed;\n }\n for (; idx < indices.length; idx++) {\n position = -1;\n index = indices[idx];\n if (this.dataItemByIndex(index)) {\n value = this._valueGetter(this.dataItemByIndex(index));\n }\n for (j = 0; j < values.length; j++) {\n if (value == values[j]) {\n position = j;\n break;\n }\n }\n if (position > -1) {\n removed.push(this.removeAt(position));\n $(children[index]).removeClass('k-state-selected');\n }\n }\n return removed;\n },\n _getSkip: function (index, take) {\n var page = index < take ? 1 : Math.floor(index / take) + 1;\n return (page - 1) * take;\n },\n _select: function (indexes) {\n var that = this, singleSelection = this.options.selectable !== 'multiple', dataSource = this.dataSource, dataItem, oldSkip, take = this.itemCount, valueGetter = this._valueGetter, added = [];\n if (singleSelection) {\n that._selectedIndexes = [];\n that._selectedDataItems = [];\n that._values = [];\n }\n oldSkip = dataSource.skip();\n $.each(indexes, function (_, index) {\n var skip = that._getSkip(index, take);\n that.mute(function () {\n dataSource.range(skip, take);\n dataItem = that._findDataItem(dataSource.view(), [index - skip]);\n that._selectedIndexes.push(index);\n that._selectedDataItems.push(dataItem);\n that._values.push(isPrimitive(dataItem) ? dataItem : valueGetter(dataItem));\n added.push({\n index: index,\n dataItem: dataItem\n });\n that._getElementByIndex(index).addClass(SELECTED);\n dataSource.range(oldSkip, take);\n });\n });\n that._values = that._checkValuesOrder(that._values);\n return added;\n },\n _clickHandler: function (e) {\n var item = $(e.currentTarget);\n if (!e.isDefaultPrevented() && item.attr('data-uid')) {\n this.trigger(CLICK, { item: item });\n }\n },\n _buildValueGetter: function () {\n this._valueGetter = kendo.getter(this.options.dataValueField);\n },\n _calculateGroupPadding: function (height) {\n var firstItem = this.items().first(), groupHeader = this.header, padding = 0;\n if (groupHeader[0] && groupHeader[0].style.display !== 'none') {\n if (height !== 'auto') {\n padding = kendo.support.scrollbar();\n }\n padding += parseFloat(firstItem.css('border-right-width'), 10) + parseFloat(firstItem.children('.k-group').css('right'), 10);\n groupHeader.css('padding-right', padding);\n }\n },\n _calculateColumnsHeaderPadding: function () {\n if (this.options.columns && this.options.columns.length) {\n var isRtl = kendo.support.isRtl(this.wrapper);\n var scrollbar = kendo.support.scrollbar();\n var columnsHeader = this.content.parent().parent().find('.k-grid-header');\n var total = this.dataSource.total();\n columnsHeader.css(isRtl ? 'padding-left' : 'padding-right', total ? scrollbar : 0);\n }\n }\n });\n kendo.ui.VirtualList = VirtualList;\n kendo.ui.plugin(VirtualList);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.autocomplete', [\n 'kendo.list',\n 'kendo.mobile.scroller',\n 'kendo.virtuallist'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'autocomplete',\n name: 'AutoComplete',\n category: 'web',\n description: 'The AutoComplete widget provides suggestions depending on the typed text.It also allows multiple value entries.',\n depends: ['list'],\n features: [\n {\n id: 'mobile-scroller',\n name: 'Mobile scroller',\n description: 'Support for kinetic scrolling in mobile device',\n depends: ['mobile.scroller']\n },\n {\n id: 'virtualization',\n name: 'VirtualList',\n description: 'Support for virtualization',\n depends: ['virtuallist']\n }\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, support = kendo.support, caret = kendo.caret, activeElement = kendo._activeElement, placeholderSupported = support.placeholder, ui = kendo.ui, List = ui.List, keys = kendo.keys, DataSource = kendo.data.DataSource, ARIA_DISABLED = 'aria-disabled', ARIA_READONLY = 'aria-readonly', CHANGE = 'change', DEFAULT = 'k-state-default', DISABLED = 'disabled', READONLY = 'readonly', FOCUSED = 'k-state-focused', SELECTED = 'k-state-selected', STATEDISABLED = 'k-state-disabled', AUTOCOMPLETEVALUE = 'off', HOVER = 'k-state-hover', ns = '.kendoAutoComplete', HOVEREVENTS = 'mouseenter' + ns + ' mouseleave' + ns, proxy = $.proxy;\n function indexOfWordAtCaret(caretIdx, text, separator) {\n return separator ? text.substring(0, caretIdx).split(separator).length - 1 : 0;\n }\n function wordAtCaret(caretIdx, text, separator) {\n return text.split(separator)[indexOfWordAtCaret(caretIdx, text, separator)];\n }\n function replaceWordAtCaret(caretIdx, text, word, separator, defaultSeparator) {\n var words = text.split(separator);\n words.splice(indexOfWordAtCaret(caretIdx, text, separator), 1, word);\n if (separator && words[words.length - 1] !== '') {\n words.push('');\n }\n return words.join(defaultSeparator);\n }\n var AutoComplete = List.extend({\n init: function (element, options) {\n var that = this, wrapper, disabled;\n that.ns = ns;\n options = $.isArray(options) ? { dataSource: options } : options;\n List.fn.init.call(that, element, options);\n element = that.element;\n options = that.options;\n options.placeholder = options.placeholder || element.attr('placeholder');\n if (placeholderSupported) {\n element.attr('placeholder', options.placeholder);\n }\n that._wrapper();\n that._loader();\n that._clearButton();\n that._dataSource();\n that._ignoreCase();\n element[0].type = 'text';\n wrapper = that.wrapper;\n that._popup();\n element.addClass('k-input').on('keydown' + ns, proxy(that._keydown, that)).on('keypress' + ns, proxy(that._keypress, that)).on('input' + ns, proxy(that._search, that)).on('paste' + ns, proxy(that._search, that)).on('focus' + ns, function () {\n that._prev = that._accessor();\n that._oldText = that._prev;\n that._placeholder(false);\n wrapper.addClass(FOCUSED);\n }).on('focusout' + ns, function () {\n that._change();\n that._placeholder();\n that.close();\n wrapper.removeClass(FOCUSED);\n }).attr({\n autocomplete: AUTOCOMPLETEVALUE,\n role: 'textbox',\n 'aria-haspopup': true\n });\n that._clear.on('click' + ns + ' touchend' + ns, proxy(that._clearValue, that));\n that._enable();\n that._old = that._accessor();\n if (element[0].id) {\n element.attr('aria-owns', that.ul[0].id);\n }\n that._aria();\n that._placeholder();\n that._initList();\n disabled = $(that.element).parents('fieldset').is(':disabled');\n if (disabled) {\n that.enable(false);\n }\n that.listView.bind('click', function (e) {\n e.preventDefault();\n });\n that._resetFocusItemHandler = $.proxy(that._resetFocusItem, that);\n kendo.notify(that);\n that._toggleCloseVisibility();\n },\n options: {\n name: 'AutoComplete',\n enabled: true,\n suggest: false,\n template: '',\n groupTemplate: '#:data#',\n fixedGroupTemplate: '#:data#',\n dataTextField: '',\n minLength: 1,\n enforceMinLength: false,\n delay: 200,\n height: 200,\n filter: 'startswith',\n ignoreCase: true,\n highlightFirst: false,\n separator: null,\n placeholder: '',\n animation: {},\n virtual: false,\n value: null,\n clearButton: true,\n autoWidth: false,\n popup: null\n },\n _dataSource: function () {\n var that = this;\n if (that.dataSource && that._refreshHandler) {\n that._unbindDataSource();\n } else {\n that._progressHandler = proxy(that._showBusy, that);\n that._errorHandler = proxy(that._hideBusy, that);\n }\n that.dataSource = DataSource.create(that.options.dataSource).bind('progress', that._progressHandler).bind('error', that._errorHandler);\n },\n setDataSource: function (dataSource) {\n this.options.dataSource = dataSource;\n this._dataSource();\n this.listView.setDataSource(this.dataSource);\n },\n events: [\n 'open',\n 'close',\n CHANGE,\n 'select',\n 'filtering',\n 'dataBinding',\n 'dataBound'\n ],\n setOptions: function (options) {\n var listOptions = this._listOptions(options);\n List.fn.setOptions.call(this, options);\n this.listView.setOptions(listOptions);\n this._accessors();\n this._aria();\n this._clearButton();\n },\n _listOptions: function (options) {\n var listOptions = List.fn._listOptions.call(this, $.extend(options, { skipUpdateOnBind: true }));\n listOptions.dataValueField = listOptions.dataTextField;\n listOptions.selectedItemChange = null;\n return listOptions;\n },\n _editable: function (options) {\n var that = this, element = that.element, wrapper = that.wrapper.off(ns), readonly = options.readonly, disable = options.disable;\n if (!readonly && !disable) {\n wrapper.addClass(DEFAULT).removeClass(STATEDISABLED).on(HOVEREVENTS, that._toggleHover);\n element.removeAttr(DISABLED).removeAttr(READONLY).attr(ARIA_DISABLED, false).attr(ARIA_READONLY, false);\n } else {\n wrapper.addClass(disable ? STATEDISABLED : DEFAULT).removeClass(disable ? DEFAULT : STATEDISABLED);\n element.attr(DISABLED, disable).attr(READONLY, readonly).attr(ARIA_DISABLED, disable).attr(ARIA_READONLY, readonly);\n }\n },\n close: function () {\n var that = this;\n var current = that.listView.focus();\n if (current) {\n current.removeClass(SELECTED);\n }\n that.popup.close();\n },\n destroy: function () {\n var that = this;\n that.element.off(ns);\n that._clear.off(ns);\n that.wrapper.off(ns);\n List.fn.destroy.call(that);\n },\n refresh: function () {\n this.listView.refresh();\n },\n select: function (li) {\n this._select(li);\n },\n search: function (word) {\n var that = this, options = that.options, ignoreCase = options.ignoreCase, separator = that._separator(), length, accentFoldingFiltering = that.dataSource.options.accentFoldingFiltering;\n word = word || that._accessor();\n clearTimeout(that._typingTimeout);\n if (separator) {\n word = wordAtCaret(caret(that.element)[0], word, separator);\n }\n length = word.length;\n if (!options.enforceMinLength && !length || length >= options.minLength) {\n that._open = true;\n that._mute(function () {\n this.listView.value([]);\n });\n that._filterSource({\n value: ignoreCase ? accentFoldingFiltering ? word.toLocaleLowerCase(accentFoldingFiltering) : word.toLowerCase() : word,\n operator: options.filter,\n field: options.dataTextField,\n ignoreCase: ignoreCase\n });\n that.one('close', $.proxy(that._unifySeparators, that));\n }\n that._toggleCloseVisibility();\n },\n suggest: function (word) {\n var that = this, key = that._last, value = that._accessor(), element = that.element[0], caretIdx = caret(element)[0], separator = that._separator(), words = value.split(separator), wordIndex = indexOfWordAtCaret(caretIdx, value, separator), selectionEnd = caretIdx, idx, accentFoldingFiltering = that.dataSource.options.accentFoldingFiltering;\n if (key == keys.BACKSPACE || key == keys.DELETE) {\n that._last = undefined;\n return;\n }\n word = word || '';\n if (typeof word !== 'string') {\n if (word[0]) {\n word = that.dataSource.view()[List.inArray(word[0], that.ul[0])];\n }\n word = word ? that._text(word) : '';\n }\n if (caretIdx <= 0) {\n caretIdx = (accentFoldingFiltering ? value.toLocaleLowerCase(accentFoldingFiltering) : value.toLowerCase()).indexOf(accentFoldingFiltering ? word.toLocaleLowerCase(accentFoldingFiltering) : word.toLowerCase()) + 1;\n }\n idx = value.substring(0, caretIdx).lastIndexOf(separator);\n idx = idx > -1 ? caretIdx - (idx + separator.length) : caretIdx;\n value = words[wordIndex].substring(0, idx);\n if (word) {\n word = word.toString();\n idx = (accentFoldingFiltering ? word.toLocaleLowerCase(accentFoldingFiltering) : word.toLowerCase()).indexOf(accentFoldingFiltering ? value.toLocaleLowerCase(accentFoldingFiltering) : value.toLowerCase());\n if (idx > -1) {\n word = word.substring(idx + value.length);\n selectionEnd = caretIdx + word.length;\n value += word;\n }\n if (separator && words[words.length - 1] !== '') {\n words.push('');\n }\n }\n words[wordIndex] = value;\n that._accessor(words.join(separator || ''));\n if (element === activeElement()) {\n caret(element, caretIdx, selectionEnd);\n }\n },\n value: function (value) {\n if (value !== undefined) {\n this.listView.value(value);\n this._accessor(value);\n this._old = this._accessor();\n this._oldText = this._accessor();\n } else {\n return this._accessor();\n }\n this._toggleCloseVisibility();\n },\n _click: function (e) {\n var item = e.item;\n var that = this;\n var element = that.element;\n var dataItem = that.listView.dataItemByIndex(that.listView.getElementIndex(item));\n e.preventDefault();\n that._active = true;\n if (that.trigger('select', {\n dataItem: dataItem,\n item: item\n })) {\n that.close();\n return;\n }\n that._oldText = element.val();\n that._select(item).done(function () {\n that._blur();\n caret(element, element.val().length);\n });\n },\n _clearText: $.noop,\n _resetFocusItem: function () {\n var index = this.options.highlightFirst ? 0 : -1;\n if (this.options.virtual) {\n this.listView.scrollTo(0);\n }\n this.listView.focus(index);\n },\n _listBound: function () {\n var that = this;\n var popup = that.popup;\n var options = that.options;\n var data = that.dataSource.flatView();\n var length = data.length;\n var groupsLength = that.dataSource._group ? that.dataSource._group.length : 0;\n var isActive = that.element[0] === activeElement();\n var action;\n that._renderFooter();\n that._renderNoData();\n that._toggleNoData(!length);\n that._toggleHeader(!!groupsLength && !!length);\n that._resizePopup();\n popup.position();\n if (length) {\n if (options.suggest && isActive && that._inputValue()) {\n that.suggest(data[0]);\n }\n }\n if (that._open) {\n that._open = false;\n action = that._allowOpening() ? 'open' : 'close';\n if (that._typingTimeout && !isActive) {\n action = 'close';\n }\n if (length) {\n that._resetFocusItem();\n if (options.virtual) {\n that.popup.unbind('activate', that._resetFocusItemHandler).one('activate', that._resetFocusItemHandler);\n }\n }\n popup[action]();\n that._typingTimeout = undefined;\n }\n if (that._touchScroller) {\n that._touchScroller.reset();\n }\n that._hideBusy();\n that._makeUnselectable();\n that.trigger('dataBound');\n },\n _mute: function (callback) {\n this._muted = true;\n callback.call(this);\n this._muted = false;\n },\n _listChange: function () {\n var isActive = this._active || this.element[0] === activeElement();\n if (isActive && !this._muted) {\n this._selectValue(this.listView.selectedDataItems()[0]);\n }\n },\n _selectValue: function (dataItem) {\n var separator = this._separator();\n var text = '';\n if (dataItem) {\n text = this._text(dataItem);\n }\n if (text === null) {\n text = '';\n }\n if (separator) {\n text = replaceWordAtCaret(caret(this.element)[0], this._accessor(), text, separator, this._defaultSeparator());\n }\n this._prev = text;\n this._accessor(text);\n this._placeholder();\n },\n _unifySeparators: function () {\n this._accessor(this.value().split(this._separator()).join(this._defaultSeparator()));\n return this;\n },\n _preselect: function (value, text) {\n this._inputValue(text);\n this._accessor(value);\n this._old = this.oldText = this._accessor();\n this.listView.setValue(value);\n this._placeholder();\n },\n _change: function () {\n var that = this;\n var value = that._unifySeparators().value();\n var trigger = value !== List.unifyType(that._old, typeof value);\n var valueUpdated = trigger && !that._typing;\n var itemSelected = that._oldText !== value;\n that._old = value;\n that._oldText = value;\n if (valueUpdated || itemSelected) {\n that.element.trigger(CHANGE);\n }\n if (trigger) {\n that.trigger(CHANGE);\n }\n that.typing = false;\n that._toggleCloseVisibility();\n },\n _accessor: function (value) {\n var that = this, element = that.element[0];\n if (value !== undefined) {\n element.value = value === null ? '' : value;\n that._placeholder();\n } else {\n value = element.value;\n if (element.className.indexOf('k-readonly') > -1) {\n if (value === that.options.placeholder) {\n return '';\n } else {\n return value;\n }\n }\n return value;\n }\n },\n _keydown: function (e) {\n var that = this;\n var key = e.keyCode;\n var listView = that.listView;\n var visible = that.popup.visible();\n var current = listView.focus();\n that._last = key;\n if (key === keys.DOWN) {\n if (visible) {\n this._move(current ? 'focusNext' : 'focusFirst');\n } else if (that.value()) {\n that._filterSource({\n value: that.ignoreCase ? that.value().toLowerCase() : that.value(),\n operator: that.options.filter,\n field: that.options.dataTextField,\n ignoreCase: that.ignoreCase\n }).done(function () {\n if (that._allowOpening()) {\n that._resetFocusItem();\n that.popup.open();\n }\n });\n }\n e.preventDefault();\n } else if (key === keys.UP) {\n if (visible) {\n this._move(current ? 'focusPrev' : 'focusLast');\n }\n e.preventDefault();\n } else if (key === keys.HOME) {\n this._move('focusFirst');\n } else if (key === keys.END) {\n this._move('focusLast');\n } else if (key === keys.ENTER || key === keys.TAB) {\n if (key === keys.ENTER && visible) {\n e.preventDefault();\n }\n if (visible && current) {\n var dataItem = listView.dataItemByIndex(listView.getElementIndex(current));\n if (that.trigger('select', {\n dataItem: dataItem,\n item: current\n })) {\n return;\n }\n this._select(current);\n }\n this._blur();\n } else if (key === keys.ESC) {\n if (visible) {\n e.preventDefault();\n } else {\n that._clearValue();\n }\n that.close();\n } else if (that.popup.visible() && (key === keys.PAGEDOWN || key === keys.PAGEUP)) {\n e.preventDefault();\n var direction = key === keys.PAGEDOWN ? 1 : -1;\n listView.scrollWith(direction * listView.screenHeight());\n } else {\n that.popup._hovered = true;\n that._search();\n }\n },\n _keypress: function () {\n this._oldText = this.element.val();\n this._typing = true;\n },\n _move: function (action) {\n this.listView[action]();\n if (this.options.suggest) {\n this.suggest(this.listView.focus());\n }\n },\n _hideBusy: function () {\n var that = this;\n clearTimeout(that._busy);\n that._loading.hide();\n that.element.attr('aria-busy', false);\n that._busy = null;\n that._showClear();\n },\n _showBusy: function () {\n var that = this;\n if (that._busy) {\n return;\n }\n that._busy = setTimeout(function () {\n that.element.attr('aria-busy', true);\n that._loading.show();\n that._hideClear();\n }, 100);\n },\n _placeholder: function (show) {\n if (placeholderSupported) {\n return;\n }\n var that = this, element = that.element, placeholder = that.options.placeholder, value;\n if (placeholder) {\n value = element.val();\n if (show === undefined) {\n show = !value;\n }\n if (!show) {\n if (value !== placeholder) {\n placeholder = value;\n } else {\n placeholder = '';\n }\n }\n if (value === that._old && !show) {\n return;\n }\n element.toggleClass('k-readonly', show).val(placeholder);\n if (!placeholder && element[0] === document.activeElement) {\n caret(element[0], 0, 0);\n }\n }\n },\n _separator: function () {\n var separator = this.options.separator;\n if (separator instanceof Array) {\n return new RegExp(separator.join('|'), 'gi');\n }\n return separator;\n },\n _defaultSeparator: function () {\n var separator = this.options.separator;\n if (separator instanceof Array) {\n return separator[0];\n }\n return separator;\n },\n _inputValue: function () {\n return this.element.val();\n },\n _search: function () {\n var that = this;\n clearTimeout(that._typingTimeout);\n that._typingTimeout = setTimeout(function () {\n if (that._prev !== that._accessor()) {\n that._prev = that._accessor();\n that.search();\n }\n }, that.options.delay);\n },\n _select: function (candidate) {\n var that = this;\n that._active = true;\n return that.listView.select(candidate).done(function () {\n that._active = false;\n });\n },\n _loader: function () {\n this._loading = $('<span class=\"k-icon k-i-loading\" style=\"display:none\"></span>').insertAfter(this.element);\n },\n _clearButton: function () {\n List.fn._clearButton.call(this);\n if (this.options.clearButton) {\n this._clear.insertAfter(this.element);\n this.wrapper.addClass('k-autocomplete-clearable');\n }\n },\n _toggleHover: function (e) {\n $(e.currentTarget).toggleClass(HOVER, e.type === 'mouseenter');\n },\n _toggleCloseVisibility: function () {\n if (this.value()) {\n this._showClear();\n } else {\n this._hideClear();\n }\n },\n _wrapper: function () {\n var that = this, element = that.element, DOMelement = element[0], wrapper;\n wrapper = element.parent();\n if (!wrapper.is('span.k-widget')) {\n wrapper = element.wrap('<span />').parent();\n }\n wrapper.attr('tabindex', -1);\n wrapper.attr('role', 'presentation');\n wrapper[0].style.cssText = DOMelement.style.cssText;\n element.css({\n width: '',\n height: DOMelement.style.height\n });\n that._focused = that.element;\n that.wrapper = wrapper.addClass('k-widget k-autocomplete').addClass(DOMelement.className).removeClass('input-validation-error');\n that._inputWrapper = $(wrapper[0]);\n },\n _clearValue: function () {\n List.fn._clearValue.call(this);\n this.element.focus();\n }\n });\n ui.plugin(AutoComplete);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.dropdownlist', [\n 'kendo.list',\n 'kendo.mobile.scroller',\n 'kendo.virtuallist'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'dropdownlist',\n name: 'DropDownList',\n category: 'web',\n description: 'The DropDownList widget displays a list of values and allows the selection of a single value from the list.',\n depends: ['list'],\n features: [\n {\n id: 'mobile-scroller',\n name: 'Mobile scroller',\n description: 'Support for kinetic scrolling in mobile device',\n depends: ['mobile.scroller']\n },\n {\n id: 'virtualization',\n name: 'VirtualList',\n description: 'Support for virtualization',\n depends: ['virtuallist']\n }\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, List = ui.List, Select = ui.Select, support = kendo.support, activeElement = kendo._activeElement, ObservableObject = kendo.data.ObservableObject, keys = kendo.keys, ns = '.kendoDropDownList', nsFocusEvent = ns + 'FocusEvent', DISABLED = 'disabled', READONLY = 'readonly', CHANGE = 'change', FOCUSED = 'k-state-focused', DEFAULT = 'k-state-default', STATEDISABLED = 'k-state-disabled', ARIA_DISABLED = 'aria-disabled', ARIA_READONLY = 'aria-readonly', CLICKEVENTS = 'click' + ns + ' touchend' + ns, HOVEREVENTS = 'mouseenter' + ns + ' mouseleave' + ns, TABINDEX = 'tabindex', STATE_FILTER = 'filter', STATE_ACCEPT = 'accept', MSG_INVALID_OPTION_LABEL = 'The `optionLabel` option is not valid due to missing fields. Define a custom optionLabel as shown here http://docs.telerik.com/kendo-ui/api/javascript/ui/dropdownlist#configuration-optionLabel', proxy = $.proxy;\n var DropDownList = Select.extend({\n init: function (element, options) {\n var that = this;\n var index = options && options.index;\n var optionLabel, text, disabled;\n that.ns = ns;\n options = $.isArray(options) ? { dataSource: options } : options;\n Select.fn.init.call(that, element, options);\n options = that.options;\n element = that.element.on('focus' + ns, proxy(that._focusHandler, that));\n that._focusInputHandler = $.proxy(that._focusInput, that);\n that.optionLabel = $();\n that._optionLabel();\n that._inputTemplate();\n that._reset();\n that._prev = '';\n that._word = '';\n that._wrapper();\n that._tabindex();\n that.wrapper.data(TABINDEX, that.wrapper.attr(TABINDEX));\n that._span();\n that._popup();\n that._mobile();\n that._dataSource();\n that._ignoreCase();\n that._filterHeader();\n that._aria();\n that.wrapper.attr('aria-live', 'polite');\n that._enable();\n that._attachFocusHandlers();\n that._oldIndex = that.selectedIndex = -1;\n if (index !== undefined) {\n options.index = index;\n }\n that._initialIndex = options.index;\n that.requireValueMapper(that.options);\n that._initList();\n that.listView.one('dataBound', proxy(that._attachAriaActiveDescendant, that));\n that._cascade();\n that.one('set', function (e) {\n if (!e.sender.listView.bound() && that.hasOptionLabel()) {\n that._textAccessor(that._optionLabelText());\n }\n });\n if (options.autoBind) {\n that.dataSource.fetch();\n } else if (that.selectedIndex === -1) {\n text = options.text || '';\n if (!text) {\n optionLabel = options.optionLabel;\n if (optionLabel && options.index === 0) {\n text = optionLabel;\n } else if (that._isSelect) {\n text = element.children(':selected').text();\n }\n }\n that._textAccessor(text);\n }\n disabled = $(that.element).parents('fieldset').is(':disabled');\n if (disabled) {\n that.enable(false);\n }\n that.listView.bind('click', function (e) {\n e.preventDefault();\n });\n kendo.notify(that);\n },\n options: {\n name: 'DropDownList',\n enabled: true,\n autoBind: true,\n index: 0,\n text: null,\n value: null,\n delay: 500,\n height: 200,\n dataTextField: '',\n dataValueField: '',\n optionLabel: '',\n cascadeFrom: '',\n cascadeFromField: '',\n cascadeFromParentField: '',\n ignoreCase: true,\n animation: {},\n filter: 'none',\n minLength: 1,\n enforceMinLength: false,\n virtual: false,\n template: null,\n valueTemplate: null,\n optionLabelTemplate: null,\n groupTemplate: '#:data#',\n fixedGroupTemplate: '#:data#',\n autoWidth: false,\n popup: null\n },\n events: [\n 'open',\n 'close',\n CHANGE,\n 'select',\n 'filtering',\n 'dataBinding',\n 'dataBound',\n 'cascade',\n 'set',\n 'kendoKeydown'\n ],\n setOptions: function (options) {\n Select.fn.setOptions.call(this, options);\n this.listView.setOptions(this._listOptions(options));\n this._optionLabel();\n this._inputTemplate();\n this._accessors();\n this._filterHeader();\n this._enable();\n this._aria();\n if (!this.value() && this.hasOptionLabel()) {\n this.select(0);\n }\n },\n destroy: function () {\n var that = this;\n Select.fn.destroy.call(that);\n that.wrapper.off(ns);\n that.wrapper.off(nsFocusEvent);\n that.element.off(ns);\n that._inputWrapper.off(ns);\n that._arrow.off();\n that._arrow = null;\n that._arrowIcon = null;\n that.optionLabel.off();\n if (that.filterInput) {\n that.filterInput.off(nsFocusEvent);\n }\n },\n open: function () {\n var that = this;\n var isFiltered = that.dataSource.filter() ? that.dataSource.filter().filters.length > 0 : false;\n var listView = this.listView;\n if (that.popup.visible()) {\n return;\n }\n if (!that.listView.bound() || that._state === STATE_ACCEPT) {\n that._open = true;\n that._state = 'rebind';\n if (that.filterInput) {\n that.filterInput.val('');\n that._prev = '';\n }\n if (that.filterInput && that.options.minLength !== 1 && !isFiltered) {\n that.refresh();\n that.popup.one('activate', that._focusInputHandler);\n that.wrapper.attr('aria-activedescendant', listView._optionID);\n that.popup.open();\n that._resizeFilterInput();\n } else {\n that._filterSource();\n }\n } else if (that._allowOpening()) {\n that._focusFilter = true;\n that.popup.one('activate', that._focusInputHandler);\n that.popup._hovered = true;\n that.wrapper.attr('aria-activedescendant', listView._optionID);\n that.popup.open();\n that._resizeFilterInput();\n that._focusItem();\n }\n },\n close: function () {\n this._attachAriaActiveDescendant();\n this.popup.close();\n },\n _attachAriaActiveDescendant: function () {\n var wrapper = this.wrapper, inputId = wrapper.find('.k-input').attr('id');\n wrapper.attr('aria-activedescendant', inputId);\n },\n _focusInput: function () {\n this._focusElement(this.filterInput);\n },\n _resizeFilterInput: function () {\n var filterInput = this.filterInput;\n var originalPrevent = this._prevent;\n if (!filterInput) {\n return;\n }\n var isInputActive = this.filterInput[0] === activeElement();\n var caret = kendo.caret(this.filterInput[0])[0];\n this._prevent = true;\n filterInput.css('display', 'none').css('width', this.popup.element.css('width')).css('display', 'inline-block');\n if (isInputActive) {\n filterInput.focus();\n kendo.caret(filterInput[0], caret);\n }\n this._prevent = originalPrevent;\n },\n _allowOpening: function () {\n return this.hasOptionLabel() || this.filterInput || Select.fn._allowOpening.call(this);\n },\n toggle: function (toggle) {\n this._toggle(toggle, true);\n },\n current: function (candidate) {\n var current;\n if (candidate === undefined) {\n current = this.listView.focus();\n if (!current && this.selectedIndex === 0 && this.hasOptionLabel()) {\n return this.optionLabel;\n }\n return current;\n }\n this._focus(candidate);\n },\n dataItem: function (index) {\n var that = this;\n var dataItem = null;\n if (index === null) {\n return index;\n }\n if (index === undefined) {\n dataItem = that.listView.selectedDataItems()[0];\n } else {\n if (typeof index !== 'number') {\n if (that.options.virtual) {\n return that.dataSource.getByUid($(index).data('uid'));\n }\n if (index.hasClass('k-list-optionlabel')) {\n index = -1;\n } else {\n index = $(that.items()).index(index);\n }\n } else if (that.hasOptionLabel()) {\n index -= 1;\n }\n dataItem = that.dataSource.flatView()[index];\n }\n if (!dataItem) {\n dataItem = that._optionLabelDataItem();\n }\n return dataItem;\n },\n refresh: function () {\n this.listView.refresh();\n },\n text: function (text) {\n var that = this;\n var loweredText;\n var ignoreCase = that.options.ignoreCase;\n text = text === null ? '' : text;\n if (text !== undefined) {\n if (typeof text !== 'string') {\n that._textAccessor(text);\n return;\n }\n loweredText = ignoreCase ? text.toLowerCase() : text;\n that._select(function (data) {\n data = that._text(data);\n if (ignoreCase) {\n data = (data + '').toLowerCase();\n }\n return data === loweredText;\n }).done(function () {\n that._textAccessor(that.dataItem() || text);\n });\n } else {\n return that._textAccessor();\n }\n },\n _clearFilter: function () {\n $(this.filterInput).val('');\n Select.fn._clearFilter.call(this);\n },\n value: function (value) {\n var that = this;\n var listView = that.listView;\n var dataSource = that.dataSource;\n if (value === undefined) {\n value = that._accessor() || that.listView.value()[0];\n return value === undefined || value === null ? '' : value;\n }\n that.requireValueMapper(that.options, value);\n if (value || !that.hasOptionLabel()) {\n that._initialIndex = null;\n }\n this.trigger('set', { value: value });\n if (that._request && that.options.cascadeFrom && that.listView.bound()) {\n if (that._valueSetter) {\n dataSource.unbind(CHANGE, that._valueSetter);\n }\n that._valueSetter = proxy(function () {\n that.value(value);\n }, that);\n dataSource.one(CHANGE, that._valueSetter);\n return;\n }\n if (that._isFilterEnabled() && listView.bound() && listView.isFiltered()) {\n that._clearFilter();\n } else {\n that._fetchData();\n }\n listView.value(value).done(function () {\n that._old = that._valueBeforeCascade = that._accessor();\n that._oldIndex = that.selectedIndex;\n });\n },\n hasOptionLabel: function () {\n return this.optionLabel && !!this.optionLabel[0];\n },\n _optionLabel: function () {\n var that = this;\n var options = that.options;\n var optionLabel = options.optionLabel;\n var template = options.optionLabelTemplate;\n if (!optionLabel) {\n that.optionLabel.off().remove();\n that.optionLabel = $();\n return;\n }\n if (!template) {\n template = '#:';\n if (typeof optionLabel === 'string') {\n template += 'data';\n } else {\n template += kendo.expr(options.dataTextField, 'data');\n }\n template += '#';\n }\n if (typeof template !== 'function') {\n template = kendo.template(template);\n }\n that.optionLabelTemplate = template;\n if (!that.hasOptionLabel()) {\n that.optionLabel = $('<div class=\"k-list-optionlabel\"></div>').prependTo(that.list);\n }\n that.optionLabel.html(template(optionLabel)).off().on(CLICKEVENTS, proxy(that._click, that)).on(HOVEREVENTS, that._toggleHover);\n that.angular('compile', function () {\n return {\n elements: that.optionLabel,\n data: [{ dataItem: that._optionLabelDataItem() }]\n };\n });\n },\n _optionLabelText: function () {\n var optionLabel = this.options.optionLabel;\n return typeof optionLabel === 'string' ? optionLabel : this._text(optionLabel);\n },\n _optionLabelDataItem: function () {\n var that = this;\n var optionLabel = that.options.optionLabel;\n if (that.hasOptionLabel()) {\n return $.isPlainObject(optionLabel) ? new ObservableObject(optionLabel) : that._assignInstance(that._optionLabelText(), '');\n }\n return undefined;\n },\n _buildOptions: function (data) {\n var that = this;\n if (!that._isSelect) {\n return;\n }\n var value = that.listView.value()[0];\n var optionLabel = that._optionLabelDataItem();\n var optionLabelValue = optionLabel && that._value(optionLabel);\n if (value === undefined || value === null) {\n value = '';\n }\n if (optionLabel) {\n if (optionLabelValue === undefined || optionLabelValue === null) {\n optionLabelValue = '';\n }\n optionLabel = '<option value=\"' + optionLabelValue + '\">' + that._text(optionLabel) + '</option>';\n }\n that._options(data, optionLabel, value);\n if (value !== List.unifyType(that._accessor(), typeof value)) {\n that._customOption = null;\n that._custom(value);\n }\n },\n _listBound: function () {\n var that = this;\n var initialIndex = that._initialIndex;\n var filtered = that._state === STATE_FILTER;\n var data = that.dataSource.flatView();\n var dataItem;\n that._presetValue = false;\n that._renderFooter();\n that._renderNoData();\n that._toggleNoData(!data.length);\n that._resizePopup(true);\n that.popup.position();\n that._buildOptions(data);\n that._makeUnselectable();\n if (!filtered) {\n if (that._open) {\n that.toggle(that._allowOpening());\n }\n that._open = false;\n if (!that._fetch) {\n if (data.length) {\n if (!that.listView.value().length && initialIndex > -1 && initialIndex !== null) {\n that.select(initialIndex);\n }\n that._initialIndex = null;\n dataItem = that.listView.selectedDataItems()[0];\n if (dataItem && that.text() !== that._text(dataItem)) {\n that._selectValue(dataItem);\n }\n } else if (that._textAccessor() !== that._optionLabelText()) {\n that.listView.value('');\n that._selectValue(null);\n that._oldIndex = that.selectedIndex;\n }\n }\n }\n that._hideBusy();\n that.trigger('dataBound');\n },\n _listChange: function () {\n this._selectValue(this.listView.selectedDataItems()[0]);\n if (this._presetValue || this._old && this._oldIndex === -1) {\n this._oldIndex = this.selectedIndex;\n }\n },\n _filterPaste: function () {\n this._search();\n },\n _attachFocusHandlers: function () {\n var that = this;\n var wrapper = that.wrapper;\n wrapper.on('focusin' + nsFocusEvent, proxy(that._focusinHandler, that)).on('focusout' + nsFocusEvent, proxy(that._focusoutHandler, that));\n if (that.filterInput) {\n that.filterInput.on('focusin' + nsFocusEvent, proxy(that._focusinHandler, that)).on('focusout' + nsFocusEvent, proxy(that._focusoutHandler, that));\n }\n },\n _focusHandler: function () {\n this.wrapper.focus();\n },\n _focusinHandler: function () {\n this._inputWrapper.addClass(FOCUSED);\n this._prevent = false;\n },\n _focusoutHandler: function () {\n var that = this;\n var isIFrame = window.self !== window.top;\n if (!that._prevent) {\n clearTimeout(that._typingTimeout);\n if (support.mobileOS.ios && isIFrame) {\n that._change();\n } else {\n that._blur();\n }\n that._inputWrapper.removeClass(FOCUSED);\n that._prevent = true;\n that._open = false;\n that.element.blur();\n }\n },\n _wrapperMousedown: function () {\n this._prevent = !!this.filterInput;\n },\n _wrapperClick: function (e) {\n e.preventDefault();\n this.popup.unbind('activate', this._focusInputHandler);\n this._focused = this.wrapper;\n this._prevent = false;\n this._toggle();\n },\n _editable: function (options) {\n var that = this;\n var element = that.element;\n var disable = options.disable;\n var readonly = options.readonly;\n var wrapper = that.wrapper.add(that.filterInput).off(ns);\n var dropDownWrapper = that._inputWrapper.off(HOVEREVENTS);\n if (!readonly && !disable) {\n element.removeAttr(DISABLED).removeAttr(READONLY);\n dropDownWrapper.addClass(DEFAULT).removeClass(STATEDISABLED).on(HOVEREVENTS, that._toggleHover);\n wrapper.attr(TABINDEX, wrapper.data(TABINDEX)).attr(ARIA_DISABLED, false).attr(ARIA_READONLY, false).on('keydown' + ns, that, proxy(that._keydown, that)).on(kendo.support.mousedown + ns, proxy(that._wrapperMousedown, that)).on('paste' + ns, proxy(that._filterPaste, that));\n that.wrapper.on('click' + ns, proxy(that._wrapperClick, that));\n if (!that.filterInput) {\n wrapper.on('keypress' + ns, proxy(that._keypress, that));\n } else {\n wrapper.on('input' + ns, proxy(that._search, that));\n }\n } else if (disable) {\n wrapper.removeAttr(TABINDEX);\n dropDownWrapper.addClass(STATEDISABLED).removeClass(DEFAULT);\n } else {\n dropDownWrapper.addClass(DEFAULT).removeClass(STATEDISABLED);\n }\n element.attr(DISABLED, disable).attr(READONLY, readonly);\n wrapper.attr(ARIA_DISABLED, disable).attr(ARIA_READONLY, readonly);\n },\n _keydown: function (e) {\n var that = this;\n var key = e.keyCode;\n var altKey = e.altKey;\n var isInputActive;\n var handled;\n var isPopupVisible = that.popup.visible();\n if (that.filterInput) {\n isInputActive = that.filterInput[0] === activeElement();\n }\n if (key === keys.LEFT) {\n key = keys.UP;\n handled = true;\n } else if (key === keys.RIGHT) {\n key = keys.DOWN;\n handled = true;\n }\n if (handled && isInputActive) {\n return;\n }\n e.keyCode = key;\n if (altKey && key === keys.UP || key === keys.ESC) {\n that._focusElement(that.wrapper);\n }\n if (that._state === STATE_FILTER && key === keys.ESC) {\n that._clearFilter();\n that._open = false;\n that._state = STATE_ACCEPT;\n }\n if (key === keys.ENTER && that._typingTimeout && that.filterInput && isPopupVisible) {\n e.preventDefault();\n return;\n }\n if (key === keys.SPACEBAR && !isInputActive) {\n that.toggle(!isPopupVisible);\n e.preventDefault();\n }\n handled = that._move(e);\n if (handled) {\n return;\n }\n if (!isPopupVisible || !that.filterInput) {\n var current = that._focus();\n if (key === keys.HOME) {\n handled = true;\n that._firstItem();\n } else if (key === keys.END) {\n handled = true;\n that._lastItem();\n }\n if (handled) {\n if (that.trigger('select', {\n dataItem: that._getElementDataItem(that._focus()),\n item: that._focus()\n })) {\n that._focus(current);\n return;\n }\n that._select(that._focus(), true).done(function () {\n if (!isPopupVisible) {\n that._blur();\n }\n });\n e.preventDefault();\n }\n }\n if (!altKey && !handled && that.filterInput) {\n that._search();\n }\n },\n _matchText: function (text, word) {\n var ignoreCase = this.options.ignoreCase;\n if (text === undefined || text === null) {\n return false;\n }\n text = text + '';\n if (ignoreCase) {\n text = text.toLowerCase();\n }\n return text.indexOf(word) === 0;\n },\n _shuffleData: function (data, splitIndex) {\n var optionDataItem = this._optionLabelDataItem();\n if (optionDataItem) {\n data = [optionDataItem].concat(data);\n }\n return data.slice(splitIndex).concat(data.slice(0, splitIndex));\n },\n _selectNext: function () {\n var that = this;\n var data = that.dataSource.flatView();\n var dataLength = data.length + (that.hasOptionLabel() ? 1 : 0);\n var isInLoop = sameCharsOnly(that._word, that._last);\n var startIndex = that.selectedIndex;\n var oldFocusedItem;\n var text;\n if (startIndex === -1) {\n startIndex = 0;\n } else {\n startIndex += isInLoop ? 1 : 0;\n startIndex = normalizeIndex(startIndex, dataLength);\n }\n data = data.toJSON ? data.toJSON() : data.slice();\n data = that._shuffleData(data, startIndex);\n for (var idx = 0; idx < dataLength; idx++) {\n text = that._text(data[idx]);\n if (isInLoop && that._matchText(text, that._last)) {\n break;\n } else if (that._matchText(text, that._word)) {\n break;\n }\n }\n if (idx !== dataLength) {\n oldFocusedItem = that._focus();\n that._select(normalizeIndex(startIndex + idx, dataLength)).done(function () {\n var done = function () {\n if (!that.popup.visible()) {\n that._change();\n }\n };\n if (that.trigger('select', {\n dataItem: that._getElementDataItem(that._focus()),\n item: that._focus()\n })) {\n that._select(oldFocusedItem).done(done);\n } else {\n done();\n }\n });\n }\n },\n _keypress: function (e) {\n var that = this;\n if (e.which === 0 || e.keyCode === kendo.keys.ENTER) {\n return;\n }\n var character = String.fromCharCode(e.charCode || e.keyCode);\n if (that.options.ignoreCase) {\n character = character.toLowerCase();\n }\n if (character === ' ') {\n e.preventDefault();\n }\n that._word += character;\n that._last = character;\n that._search();\n },\n _popupOpen: function () {\n var popup = this.popup;\n popup.wrapper = kendo.wrap(popup.element);\n if (popup.element.closest('.km-root')[0]) {\n popup.wrapper.addClass('km-popup km-widget');\n this.wrapper.addClass('km-widget');\n }\n },\n _popup: function () {\n Select.fn._popup.call(this);\n this.popup.one('open', proxy(this._popupOpen, this));\n },\n _getElementDataItem: function (element) {\n if (!element || !element[0]) {\n return null;\n }\n if (element[0] === this.optionLabel[0]) {\n return this._optionLabelDataItem();\n }\n return this.listView.dataItemByIndex(this.listView.getElementIndex(element));\n },\n _click: function (e) {\n var that = this;\n var item = e.item || $(e.currentTarget);\n e.preventDefault();\n if (that.trigger('select', {\n dataItem: that._getElementDataItem(item),\n item: item\n })) {\n that.close();\n return;\n }\n that._userTriggered = true;\n that._select(item).done(function () {\n that._blur();\n that._focusElement(that.wrapper);\n });\n },\n _focusElement: function (element) {\n var active = activeElement();\n var wrapper = this.wrapper;\n var filterInput = this.filterInput;\n var compareElement = element === filterInput ? wrapper : filterInput;\n var touchEnabled = support.mobileOS && (support.touch || support.MSPointers || support.pointers);\n if (filterInput && filterInput[0] === element[0] && touchEnabled) {\n return;\n }\n if (filterInput && (compareElement[0] === active || this._focusFilter)) {\n this._focusFilter = false;\n this._prevent = true;\n this._focused = element.focus();\n }\n },\n _searchByWord: function (word) {\n if (!word) {\n return;\n }\n var that = this;\n var ignoreCase = that.options.ignoreCase;\n if (ignoreCase) {\n word = word.toLowerCase();\n }\n that._select(function (dataItem) {\n return that._matchText(that._text(dataItem), word);\n });\n },\n _inputValue: function () {\n return this.text();\n },\n _search: function () {\n var that = this;\n var dataSource = that.dataSource;\n clearTimeout(that._typingTimeout);\n if (that._isFilterEnabled()) {\n that._typingTimeout = setTimeout(function () {\n var value = that.filterInput.val();\n if (that._prev !== value) {\n that._prev = value;\n that.search(value);\n that._resizeFilterInput();\n }\n that._typingTimeout = null;\n }, that.options.delay);\n } else {\n that._typingTimeout = setTimeout(function () {\n that._word = '';\n }, that.options.delay);\n if (!that.listView.bound()) {\n dataSource.fetch().done(function () {\n that._selectNext();\n });\n return;\n }\n that._selectNext();\n }\n },\n _get: function (candidate) {\n var data, found, idx;\n var isFunction = typeof candidate === 'function';\n var jQueryCandidate = !isFunction ? $(candidate) : $();\n if (this.hasOptionLabel()) {\n if (typeof candidate === 'number') {\n if (candidate > -1) {\n candidate -= 1;\n }\n } else if (jQueryCandidate.hasClass('k-list-optionlabel')) {\n candidate = -1;\n }\n }\n if (isFunction) {\n data = this.dataSource.flatView();\n for (idx = 0; idx < data.length; idx++) {\n if (candidate(data[idx])) {\n candidate = idx;\n found = true;\n break;\n }\n }\n if (!found) {\n candidate = -1;\n }\n }\n return candidate;\n },\n _firstItem: function () {\n if (this.hasOptionLabel()) {\n this._focus(this.optionLabel);\n } else {\n this.listView.focusFirst();\n }\n },\n _lastItem: function () {\n this._resetOptionLabel();\n this.listView.focusLast();\n },\n _nextItem: function () {\n var focusIndex;\n if (this.optionLabel.hasClass('k-state-focused')) {\n this._resetOptionLabel();\n this.listView.focusFirst();\n focusIndex = 1;\n } else {\n focusIndex = this.listView.focusNext();\n }\n return focusIndex;\n },\n _prevItem: function () {\n var focusIndex;\n if (this.optionLabel.hasClass('k-state-focused')) {\n return;\n }\n focusIndex = this.listView.focusPrev();\n if (!this.listView.focus() && !this.options.virtual) {\n this._focus(this.optionLabel);\n }\n return focusIndex;\n },\n _focusItem: function () {\n var options = this.options;\n var listView = this.listView;\n var focusedItem = listView.focus();\n var index = listView.select();\n index = index[index.length - 1];\n if (index === undefined && options.highlightFirst && !focusedItem) {\n index = 0;\n }\n if (index !== undefined) {\n listView.focus(index);\n } else {\n if (options.optionLabel && (!options.virtual || options.virtual.mapValueTo !== 'dataItem')) {\n this._focus(this.optionLabel);\n this._select(this.optionLabel);\n this.listView.content.scrollTop(0);\n } else {\n listView.scrollToIndex(0);\n }\n }\n },\n _resetOptionLabel: function (additionalClass) {\n this.optionLabel.removeClass('k-state-focused' + (additionalClass || '')).removeAttr('id');\n },\n _focus: function (candidate) {\n var listView = this.listView;\n var optionLabel = this.optionLabel;\n if (candidate === undefined) {\n candidate = listView.focus();\n if (!candidate && optionLabel.hasClass('k-state-focused')) {\n candidate = optionLabel;\n }\n return candidate;\n }\n this._resetOptionLabel();\n candidate = this._get(candidate);\n listView.focus(candidate);\n if (candidate === -1) {\n optionLabel.addClass('k-state-focused').attr('id', listView._optionID);\n this._focused.add(this.filterInput).removeAttr('aria-activedescendant').attr('aria-activedescendant', listView._optionID);\n }\n },\n _select: function (candidate, keepState) {\n var that = this;\n candidate = that._get(candidate);\n return that.listView.select(candidate).done(function () {\n if (!keepState && that._state === STATE_FILTER) {\n that._state = STATE_ACCEPT;\n }\n if (candidate === -1) {\n that._selectValue(null);\n }\n });\n },\n _selectValue: function (dataItem) {\n var that = this;\n var optionLabel = that.options.optionLabel;\n var idx = that.listView.select();\n var value = '';\n var text = '';\n idx = idx[idx.length - 1];\n if (idx === undefined) {\n idx = -1;\n }\n this._resetOptionLabel(' k-state-selected');\n if (dataItem || dataItem === 0) {\n text = dataItem;\n value = that._dataValue(dataItem);\n if (optionLabel) {\n idx += 1;\n }\n } else if (optionLabel) {\n that._focus(that.optionLabel.addClass('k-state-selected'));\n text = that._optionLabelText();\n if (typeof optionLabel === 'string') {\n value = '';\n } else {\n value = that._value(optionLabel);\n }\n idx = 0;\n }\n that.selectedIndex = idx;\n if (value === null) {\n value = '';\n }\n that._textAccessor(text);\n that._accessor(value, idx);\n that._triggerCascade();\n },\n _mobile: function () {\n var that = this, popup = that.popup, mobileOS = support.mobileOS, root = popup.element.parents('.km-root').eq(0);\n if (root.length && mobileOS) {\n popup.options.animation.open.effects = mobileOS.android || mobileOS.meego ? 'fadeIn' : mobileOS.ios || mobileOS.wp ? 'slideIn:up' : popup.options.animation.open.effects;\n }\n },\n _filterHeader: function () {\n var icon;\n if (this.filterInput) {\n this.filterInput.off(ns).parent().remove();\n this.filterInput = null;\n }\n if (this._isFilterEnabled()) {\n icon = '<span class=\"k-icon k-i-zoom\"></span>';\n this.filterInput = $('<input class=\"k-textbox\"/>').attr({\n placeholder: this.element.attr('placeholder'),\n title: this.element.attr('title'),\n role: 'listbox',\n 'aria-haspopup': 'listbox',\n 'aria-expanded': false\n });\n this.list.prepend($('<span class=\"k-list-filter\" />').append(this.filterInput.add(icon)));\n }\n },\n _span: function () {\n var that = this, wrapper = that.wrapper, SELECTOR = 'span.k-input', id = kendo.guid(), span;\n span = wrapper.find(SELECTOR);\n if (!span[0]) {\n wrapper.append('<span unselectable=\"on\" class=\"k-dropdown-wrap k-state-default\"><span id=\"' + id + '\" unselectable=\"on\" role=\"option\" aria-selected=\"true\" class=\"k-input\"> </span><span unselectable=\"on\" class=\"k-select\" aria-label=\"select\"><span class=\"k-icon k-i-arrow-60-down\"></span></span></span>').append(that.element);\n span = wrapper.find(SELECTOR);\n }\n that.span = span;\n that._inputWrapper = $(wrapper[0].firstChild);\n that._arrow = wrapper.find('.k-select');\n that._arrowIcon = that._arrow.find('.k-icon');\n },\n _wrapper: function () {\n var that = this, element = that.element, DOMelement = element[0], wrapper;\n wrapper = element.parent();\n if (!wrapper.is('span.k-widget')) {\n wrapper = element.wrap('<span />').parent();\n wrapper[0].style.cssText = DOMelement.style.cssText;\n wrapper[0].title = DOMelement.title;\n }\n that._focused = that.wrapper = wrapper.addClass('k-widget k-dropdown').addClass(DOMelement.className).removeClass('input-validation-error').css('display', '').attr({\n accesskey: element.attr('accesskey'),\n unselectable: 'on',\n role: 'listbox',\n 'aria-haspopup': 'listbox',\n 'aria-expanded': false\n });\n element.hide().removeAttr('accesskey');\n },\n _clearSelection: function (parent) {\n this.select(parent.value() ? 0 : -1);\n },\n _inputTemplate: function () {\n var that = this, template = that.options.valueTemplate;\n if (!template) {\n template = $.proxy(kendo.template('#:this._text(data)#', { useWithBlock: false }), that);\n } else {\n template = kendo.template(template);\n }\n that.valueTemplate = template;\n if (that.hasOptionLabel() && !that.options.optionLabelTemplate) {\n try {\n that.valueTemplate(that._optionLabelDataItem());\n } catch (e) {\n throw new Error(MSG_INVALID_OPTION_LABEL);\n }\n }\n },\n _textAccessor: function (text) {\n var dataItem = null;\n var template = this.valueTemplate;\n var optionLabelText = this._optionLabelText();\n var span = this.span;\n if (text === undefined) {\n return span.text();\n }\n if ($.isPlainObject(text) || text instanceof ObservableObject) {\n dataItem = text;\n } else if (optionLabelText && optionLabelText === text) {\n dataItem = this.options.optionLabel;\n }\n if (!dataItem) {\n dataItem = this._assignInstance(text, this._accessor());\n }\n if (this.hasOptionLabel()) {\n if (dataItem === optionLabelText || this._text(dataItem) === optionLabelText) {\n template = this.optionLabelTemplate;\n if (typeof this.options.optionLabel === 'string' && !this.options.optionLabelTemplate) {\n dataItem = optionLabelText;\n }\n }\n }\n var getElements = function () {\n return {\n elements: span.get(),\n data: [{ dataItem: dataItem }]\n };\n };\n this.angular('cleanup', getElements);\n try {\n span.html(template(dataItem));\n } catch (e) {\n span.html('');\n }\n this.angular('compile', getElements);\n },\n _preselect: function (value, text) {\n if (!value && !text) {\n text = this._optionLabelText();\n }\n this._accessor(value);\n this._textAccessor(text);\n this._old = this._accessor();\n this._oldIndex = this.selectedIndex;\n this.listView.setValue(value);\n this._initialIndex = null;\n this._presetValue = true;\n },\n _assignInstance: function (text, value) {\n var dataTextField = this.options.dataTextField;\n var dataItem = {};\n if (dataTextField) {\n assign(dataItem, dataTextField.split('.'), text);\n assign(dataItem, this.options.dataValueField.split('.'), value);\n dataItem = new ObservableObject(dataItem);\n } else {\n dataItem = text;\n }\n return dataItem;\n }\n });\n function assign(instance, fields, value) {\n var idx = 0, lastIndex = fields.length - 1, field;\n for (; idx < lastIndex; ++idx) {\n field = fields[idx];\n if (!(field in instance)) {\n instance[field] = {};\n }\n instance = instance[field];\n }\n instance[fields[lastIndex]] = value;\n }\n function normalizeIndex(index, length) {\n if (index >= length) {\n index -= length;\n }\n return index;\n }\n function sameCharsOnly(word, character) {\n for (var idx = 0; idx < word.length; idx++) {\n if (word.charAt(idx) !== character) {\n return false;\n }\n }\n return true;\n }\n ui.plugin(DropDownList);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.combobox', [\n 'kendo.list',\n 'kendo.mobile.scroller',\n 'kendo.virtuallist'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'combobox',\n name: 'ComboBox',\n category: 'web',\n description: 'The ComboBox widget allows the selection from pre-defined values or entering a new value.',\n depends: ['list'],\n features: [\n {\n id: 'mobile-scroller',\n name: 'Mobile scroller',\n description: 'Support for kinetic scrolling in mobile device',\n depends: ['mobile.scroller']\n },\n {\n id: 'virtualization',\n name: 'VirtualList',\n description: 'Support for virtualization',\n depends: ['virtuallist']\n }\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, List = ui.List, Select = ui.Select, caret = kendo.caret, support = kendo.support, placeholderSupported = support.placeholder, activeElement = kendo._activeElement, keys = kendo.keys, ns = '.kendoComboBox', nsFocusEvent = ns + 'FocusEvent', CLICK = 'click' + ns, MOUSEDOWN = 'mousedown' + ns, DISABLED = 'disabled', READONLY = 'readonly', CHANGE = 'change', LOADING = 'k-i-loading', DEFAULT = 'k-state-default', FOCUSED = 'k-state-focused', STATEDISABLED = 'k-state-disabled', ARIA_DISABLED = 'aria-disabled', ARIA_READONLY = 'aria-readonly', AUTOCOMPLETEVALUE = 'off', STATE_FILTER = 'filter', STATE_ACCEPT = 'accept', STATE_REBIND = 'rebind', HOVEREVENTS = 'mouseenter' + ns + ' mouseleave' + ns, proxy = $.proxy, newLineRegEx = /(\\r\\n|\\n|\\r)/gm;\n var ComboBox = Select.extend({\n init: function (element, options) {\n var that = this, text, disabled;\n that.ns = ns;\n options = $.isArray(options) ? { dataSource: options } : options;\n Select.fn.init.call(that, element, options);\n options = that.options;\n element = that.element.on('focus' + ns, proxy(that._focusHandler, that));\n options.placeholder = options.placeholder || element.attr('placeholder');\n that._reset();\n that._wrapper();\n that._input();\n that._clearButton();\n that._tabindex(that.input);\n that._popup();\n that._dataSource();\n that._ignoreCase();\n that._enable();\n that._attachFocusEvents();\n that._oldIndex = that.selectedIndex = -1;\n that._aria();\n that._initialIndex = options.index;\n that.requireValueMapper(that.options);\n that._initList();\n that._cascade();\n if (options.autoBind) {\n that._filterSource();\n } else {\n text = options.text;\n if (!text && that._isSelect) {\n text = element.children(':selected').text();\n }\n if (text) {\n that._setText(text);\n }\n }\n if (!text) {\n that._placeholder();\n }\n disabled = $(that.element).parents('fieldset').is(':disabled');\n if (disabled) {\n that.enable(false);\n }\n kendo.notify(that);\n that._toggleCloseVisibility();\n },\n options: {\n name: 'ComboBox',\n enabled: true,\n index: -1,\n text: null,\n value: null,\n autoBind: true,\n delay: 200,\n dataTextField: '',\n dataValueField: '',\n minLength: 1,\n enforceMinLength: false,\n height: 200,\n highlightFirst: true,\n filter: 'none',\n placeholder: '',\n suggest: false,\n cascadeFrom: '',\n cascadeFromField: '',\n cascadeFromParentField: '',\n ignoreCase: true,\n animation: {},\n virtual: false,\n template: null,\n groupTemplate: '#:data#',\n fixedGroupTemplate: '#:data#',\n clearButton: true,\n syncValueAndText: true,\n autoWidth: false,\n popup: null\n },\n events: [\n 'open',\n 'close',\n CHANGE,\n 'select',\n 'filtering',\n 'dataBinding',\n 'dataBound',\n 'cascade',\n 'set'\n ],\n setOptions: function (options) {\n var listOptions = this._listOptions(options);\n Select.fn.setOptions.call(this, options);\n this.listView.setOptions(listOptions);\n this._accessors();\n this._aria();\n this._clearButton();\n },\n destroy: function () {\n var that = this;\n that.input.off(ns);\n that.input.off(nsFocusEvent);\n that.element.off(ns);\n that.wrapper.off(ns);\n that._inputWrapper.off(ns);\n clearTimeout(that._pasteTimeout);\n that._arrow.off(CLICK + ' ' + MOUSEDOWN);\n that._clear.off(CLICK + ' ' + MOUSEDOWN);\n Select.fn.destroy.call(that);\n },\n _isValueChanged: function (value) {\n return value !== List.unifyType(this._old, typeof value) && value !== List.unifyType(this._oldText, typeof value);\n },\n _change: function () {\n var that = this;\n var text = that.text();\n var hasText = text && text !== that._oldText && text !== that.options.placeholder;\n var index = that.selectedIndex;\n var isCustom = index === -1;\n if (!that.options.syncValueAndText && !that.value() && isCustom && hasText) {\n that._old = '';\n that._oldIndex = index;\n that._oldText = text;\n if (!that._typing) {\n that.element.trigger(CHANGE);\n }\n that.trigger(CHANGE);\n that._typing = false;\n return;\n }\n Select.fn._change.call(that);\n that._oldText = that.text && that.text();\n that._toggleCloseVisibility();\n },\n _attachFocusEvents: function () {\n var that = this;\n that.input.on('focus' + nsFocusEvent, proxy(that._inputFocus, that)).on('focusout' + nsFocusEvent, proxy(that._inputFocusout, that));\n },\n _focusHandler: function (e) {\n if (e.target === this.element[0]) {\n this.input.focus();\n }\n },\n _arrowClick: function () {\n this._toggle();\n },\n _inputFocus: function () {\n this._inputWrapper.addClass(FOCUSED);\n this._placeholder(false);\n },\n _inputFocusout: function () {\n var that = this;\n var value = that.value();\n that._userTriggered = true;\n that._inputWrapper.removeClass(FOCUSED);\n clearTimeout(that._typingTimeout);\n that._typingTimeout = null;\n that.text(that.text());\n var item = that._focus();\n var dataItem = this.listView.dataItemByIndex(this.listView.getElementIndex(item));\n if (value !== that.value() && that.trigger('select', {\n dataItem: dataItem,\n item: item\n })) {\n that.value(value);\n return;\n }\n that._placeholder();\n that._valueBeforeCascade = that._old;\n that._blur();\n that.element.blur();\n },\n _inputPaste: function () {\n var that = this;\n clearTimeout(that._pasteTimeout);\n that._pasteTimeout = null;\n that._pasteTimeout = setTimeout(function () {\n that.search();\n });\n },\n _editable: function (options) {\n var that = this, disable = options.disable, readonly = options.readonly, wrapper = that._inputWrapper.off(ns), input = that.element.add(that.input.off(ns)), arrow = that._arrow.off(CLICK + ' ' + MOUSEDOWN), clear = that._clear;\n if (!readonly && !disable) {\n wrapper.addClass(DEFAULT).removeClass(STATEDISABLED).on(HOVEREVENTS, that._toggleHover);\n input.removeAttr(DISABLED).removeAttr(READONLY).attr(ARIA_DISABLED, false).attr(ARIA_READONLY, false);\n arrow.on(CLICK, proxy(that._arrowClick, that)).on(MOUSEDOWN, function (e) {\n e.preventDefault();\n });\n clear.on(CLICK + ' touchend' + ns, proxy(that._clearValue, that));\n that.input.on('keydown' + ns, proxy(that._keydown, that)).on('input' + ns, proxy(that._search, that)).on('paste' + ns, proxy(that._inputPaste, that));\n that.wrapper.on(CLICK + ns, proxy(that._focusHandler, that));\n } else {\n wrapper.addClass(disable ? STATEDISABLED : DEFAULT).removeClass(disable ? DEFAULT : STATEDISABLED);\n input.attr(DISABLED, disable).attr(READONLY, readonly).attr(ARIA_DISABLED, disable).attr(ARIA_READONLY, readonly);\n }\n that._toggleCloseVisibility();\n },\n open: function () {\n var that = this;\n var state = that._state;\n var isFiltered = that.dataSource.filter() ? that.dataSource.filter().filters.length > 0 : false;\n var reinitialized = !that.ul.find(that.listView.focus()).length;\n if (that.popup.visible()) {\n return;\n }\n if (!that.listView.bound() && state !== STATE_FILTER || state === STATE_ACCEPT) {\n that._open = true;\n that._state = STATE_REBIND;\n if (that.options.minLength !== 1 && !isFiltered || isFiltered && that.value() && that.selectedIndex === -1) {\n that.refresh();\n that._openPopup();\n if (!this.options.virtual) {\n that.listView.bound(false);\n }\n } else {\n that._filterSource();\n }\n } else if (that._allowOpening()) {\n that.popup._hovered = true;\n that._openPopup();\n if (that.options.virtual) {\n that._focusItem();\n } else if (reinitialized && that.options.highlightFirst) {\n that.listView.focus(0);\n }\n }\n },\n _scrollToFocusedItem: function () {\n var listView = this.listView;\n listView.scrollToIndex(listView.getElementIndex(listView.focus()));\n },\n _openPopup: function () {\n this.popup.one('activate', proxy(this._scrollToFocusedItem, this));\n this.popup.open();\n },\n _updateSelectionState: function () {\n var that = this;\n var text = that.options.text;\n var value = that.options.value;\n if (that.listView.isFiltered()) {\n return;\n }\n if (that.selectedIndex === -1) {\n if (text === undefined || text === null) {\n text = value;\n }\n that._accessor(value);\n that.input.val(text || that.input.val());\n that._placeholder();\n } else if (that._oldIndex === -1) {\n that._oldIndex = that.selectedIndex;\n }\n },\n _buildOptions: function (data) {\n var that = this;\n if (!that._isSelect) {\n return;\n }\n var custom = that._customOption;\n if (that._state === STATE_REBIND) {\n that._state = '';\n }\n that._customOption = undefined;\n that._options(data, '', that.value());\n if (custom && custom[0].selected && !that.listView._emptySearch) {\n that._custom(custom.val());\n }\n },\n _updateSelection: function () {\n var that = this;\n var listView = that.listView;\n var initialIndex = that._initialIndex;\n var hasInitialIndex = initialIndex !== null && initialIndex > -1;\n var filtered = that._state === STATE_FILTER;\n if (filtered) {\n $(listView.focus()).removeClass('k-state-selected');\n return;\n }\n if (that._fetch) {\n return;\n }\n if (!listView.value().length) {\n if (hasInitialIndex) {\n that.select(initialIndex);\n } else if (that._accessor()) {\n listView.value(that._accessor());\n }\n }\n that._initialIndex = null;\n var dataItem = listView.selectedDataItems()[0];\n if (!dataItem) {\n return;\n }\n if (that._value(dataItem) !== that.value()) {\n that._custom(that._value(dataItem));\n } else if (that._value(dataItem) !== that.element[0].value) {\n that._accessor(that._value(dataItem));\n }\n if (that.text() && that.text() !== that._text(dataItem)) {\n that._selectValue(dataItem);\n }\n },\n _updateItemFocus: function () {\n var listView = this.listView;\n if (!this.options.highlightFirst) {\n listView.focus(-1);\n } else if (!listView.focus() && !listView.focusIndex()) {\n listView.focus(0);\n }\n },\n _listBound: function () {\n var that = this;\n var isActive = that.input[0] === activeElement();\n var data = that.dataSource.flatView();\n var skip = that.listView.skip();\n var length = data.length;\n var groupsLength = that.dataSource._group ? that.dataSource._group.length : 0;\n var isFirstPage = skip === undefined || skip === 0;\n that._presetValue = false;\n that._renderFooter();\n that._renderNoData();\n that._toggleNoData(!length);\n that._toggleHeader(!!groupsLength && !!length);\n that._resizePopup();\n that.popup.position();\n that._buildOptions(data);\n that._makeUnselectable();\n that._updateSelection();\n if (data.length && isFirstPage) {\n that._updateItemFocus();\n if (that.options.suggest && isActive && that.input.val()) {\n that.suggest(data[0]);\n }\n }\n if (that._open) {\n that._open = false;\n if (that._typingTimeout && !isActive) {\n that.popup.close();\n } else {\n that.toggle(that._allowOpening());\n }\n that._typingTimeout = null;\n }\n that._hideBusy();\n that.trigger('dataBound');\n },\n _listChange: function () {\n this._selectValue(this.listView.selectedDataItems()[0]);\n if (this._presetValue) {\n this._oldIndex = this.selectedIndex;\n }\n },\n _get: function (candidate) {\n var data, found, idx;\n if (typeof candidate === 'function') {\n data = this.dataSource.flatView();\n for (idx = 0; idx < data.length; idx++) {\n if (candidate(data[idx])) {\n candidate = idx;\n found = true;\n break;\n }\n }\n if (!found) {\n candidate = -1;\n }\n }\n return candidate;\n },\n _select: function (candidate, keepState) {\n var that = this;\n candidate = that._get(candidate);\n if (candidate === -1) {\n that.input[0].value = '';\n that._accessor('');\n }\n return that.listView.select(candidate).done(function () {\n if (!keepState && that._state === STATE_FILTER) {\n that._state = STATE_ACCEPT;\n }\n that._toggleCloseVisibility();\n });\n },\n _selectValue: function (dataItem) {\n var idx = this.listView.select();\n var value = '';\n var text = '';\n idx = idx[idx.length - 1];\n if (idx === undefined) {\n idx = -1;\n }\n this.selectedIndex = idx;\n if (this.listView.isFiltered() && idx !== -1) {\n this._valueBeforeCascade = this._old;\n }\n if (idx === -1 && !dataItem) {\n if (this.options.syncValueAndText) {\n if (this.options.dataTextField === this.options.dataValueField) {\n text = this._accessor();\n } else {\n text = this.input[0].value;\n }\n value = text;\n } else {\n text = this.text();\n }\n this.listView.focus(-1);\n } else {\n if (dataItem || dataItem === 0) {\n value = this._dataValue(dataItem);\n text = this._text(dataItem);\n }\n if (value === null) {\n value = '';\n }\n }\n this._setDomInputValue(text);\n this._accessor(value !== undefined ? value : text, idx);\n this._placeholder();\n this._triggerCascade();\n },\n _setDomInputValue: function (text) {\n var that = this;\n var currentCaret = caret(this.input);\n var caretStart;\n if (currentCaret && currentCaret.length) {\n caretStart = currentCaret[0];\n }\n this._prev = this.input[0].value = text;\n if (caretStart && this.selectedIndex === -1) {\n var mobile = support.mobileOS;\n if (mobile.wp || mobile.android) {\n setTimeout(function () {\n that.input[0].setSelectionRange(caretStart, caretStart);\n }, 0);\n } else {\n this.input[0].setSelectionRange(caretStart, caretStart);\n }\n }\n },\n refresh: function () {\n this.listView.refresh();\n },\n _toggleCloseVisibility: function () {\n var preventShow = this.element.is(':disabled') || this.element.is('[readonly]');\n if (this.text() && !preventShow) {\n this._showClear();\n } else {\n this._hideClear();\n }\n },\n suggest: function (word) {\n var that = this;\n var element = that.input[0];\n var value = that.text();\n var caretIdx = caret(element)[0];\n var key = that._last;\n var idx;\n var accentFoldingFiltering = that.dataSource.options.accentFoldingFiltering;\n if (key == keys.BACKSPACE || key == keys.DELETE) {\n that._last = undefined;\n return;\n }\n word = word || '';\n if (typeof word !== 'string') {\n if (word[0]) {\n word = that.dataSource.view()[List.inArray(word[0], that.ul[0])];\n }\n word = word ? that._text(word) : '';\n }\n if (caretIdx <= 0) {\n caretIdx = (accentFoldingFiltering ? value.toLocaleLowerCase(accentFoldingFiltering) : value.toLowerCase()).indexOf(accentFoldingFiltering ? word.toLocaleLowerCase(accentFoldingFiltering) : word.toLowerCase()) + 1;\n }\n if (word) {\n word = word.toString();\n idx = (accentFoldingFiltering ? word.toLocaleLowerCase(accentFoldingFiltering) : word.toLowerCase()).indexOf(accentFoldingFiltering ? value.toLocaleLowerCase(accentFoldingFiltering) : value.toLowerCase());\n if (idx > -1) {\n value += word.substring(idx + value.length);\n }\n } else {\n value = value.substring(0, caretIdx);\n }\n if (value.length !== caretIdx || !word) {\n element.value = value;\n if (element === activeElement()) {\n caret(element, caretIdx, value.length);\n }\n }\n },\n text: function (text) {\n text = text === null ? '' : text;\n var that = this;\n var input = that.input[0];\n var ignoreCase = that.options.ignoreCase;\n var loweredText = text;\n var dataItem;\n var value;\n if (text === undefined) {\n return input.value;\n }\n if (that.options.autoBind === false && !that.listView.bound()) {\n that._setText(text);\n return;\n }\n dataItem = that.dataItem();\n if (dataItem && that._text(dataItem).replace && that._text(dataItem).replace(newLineRegEx, '') === text) {\n value = that._value(dataItem);\n if (value === List.unifyType(that._old, typeof value)) {\n that._triggerCascade();\n return;\n }\n }\n if (ignoreCase) {\n loweredText = loweredText.toLowerCase();\n }\n if (that.dataItem() && that._text(that.dataItem()) === text) {\n return;\n }\n that._select(function (data) {\n data = that._text(data);\n if (ignoreCase) {\n data = (data + '').toLowerCase();\n }\n return data === loweredText;\n }).done(function () {\n if (that.selectedIndex < 0) {\n input.value = text;\n if (that.options.syncValueAndText) {\n that._accessor(text);\n }\n that._cascadeTriggered = true;\n that._triggerCascade();\n }\n that._prev = input.value;\n });\n that._toggleCloseVisibility();\n },\n toggle: function (toggle) {\n this._toggle(toggle, true);\n },\n value: function (value) {\n var that = this;\n var options = that.options;\n var listView = that.listView;\n if (value === undefined) {\n value = that._accessor() || that.listView.value()[0];\n return value === undefined || value === null ? '' : value;\n }\n that.requireValueMapper(that.options, value);\n that.trigger('set', { value: value });\n if (value === options.value && that.input.val() === options.text && !that.options.cascadeFrom) {\n return;\n }\n that._accessor(value);\n if (that._isFilterEnabled() && listView.bound() && listView.isFiltered()) {\n that._clearFilter();\n } else {\n that._fetchData();\n }\n listView.value(value).done(function () {\n if (that.selectedIndex === -1 && (!listView._selectedDataItems || !listView._selectedDataItems.length)) {\n that._accessor(value);\n that.input.val(value);\n that._placeholder(true);\n }\n if (that._userTriggered) {\n that._old = that._accessor();\n } else {\n that._old = that._valueBeforeCascade = that._accessor();\n }\n that._oldIndex = that.selectedIndex;\n that._prev = that._oldText = that.input.val();\n if (that._state === STATE_FILTER) {\n that._state = STATE_ACCEPT;\n }\n that._toggleCloseVisibility();\n });\n },\n _hideBusy: function () {\n var that = this;\n clearTimeout(that._busy);\n that._arrowIcon.removeClass(LOADING);\n that._focused.attr('aria-busy', false);\n that._busy = null;\n that._toggleCloseVisibility();\n },\n _click: function (e) {\n var that = this;\n var item = e.item;\n var dataItem = that.listView.dataItemByIndex(that.listView.getElementIndex(item));\n var shouldTrigger = true;\n e.preventDefault();\n if (dataItem) {\n shouldTrigger = that._value(dataItem) !== List.unifyType(that.value(), typeof that._value(dataItem));\n if (!shouldTrigger) {\n that.input.val(that._text(dataItem));\n }\n }\n if (shouldTrigger && that.trigger('select', {\n dataItem: dataItem,\n item: item\n })) {\n that.close();\n return;\n }\n that._userTriggered = true;\n that._select(item).done(function () {\n that._blur();\n });\n },\n _syncValueAndText: function () {\n return this.options.syncValueAndText;\n },\n _inputValue: function () {\n return this.text();\n },\n _searchByWord: function (word) {\n var that = this;\n var options = that.options;\n var dataSource = that.dataSource;\n var ignoreCase = options.ignoreCase;\n var predicate = function (dataItem) {\n var text = that._text(dataItem);\n if (text !== undefined) {\n text = text + '';\n if (text !== '' && word === '') {\n return false;\n }\n if (ignoreCase) {\n text = text.toLowerCase();\n }\n return text.indexOf(word) === 0;\n }\n };\n if (ignoreCase) {\n word = word.toLowerCase();\n }\n if (!that.ul[0].firstChild) {\n dataSource.one(CHANGE, function () {\n if (dataSource.view()[0]) {\n that.search(word);\n }\n }).fetch();\n return;\n }\n this.listView.focus(this._get(predicate));\n var current = this.listView.focus();\n if (current) {\n if (options.suggest) {\n that.suggest(current);\n }\n this.open();\n }\n if (this.options.highlightFirst && !word) {\n this.listView.focusFirst();\n }\n },\n _input: function () {\n var that = this, element = that.element.removeClass('k-input')[0], accessKey = element.accessKey, wrapper = that.wrapper, SELECTOR = 'input.k-input', name = element.name || '', input, maxLength;\n if (name) {\n name = 'name=\"' + name + '_input\" ';\n }\n input = wrapper.find(SELECTOR);\n if (!input[0]) {\n wrapper.append('<span tabindex=\"-1\" unselectable=\"on\" class=\"k-dropdown-wrap k-state-default\"><input ' + name + 'class=\"k-input\" type=\"text\" autocomplete=\"' + AUTOCOMPLETEVALUE + '\"/><span unselectable=\"on\" class=\"k-select\" aria-label=\"select\"><span class=\"k-icon k-i-arrow-60-down\"></span></span></span>').append(that.element);\n input = wrapper.find(SELECTOR);\n }\n input[0].style.cssText = element.style.cssText;\n input[0].title = element.title;\n maxLength = parseInt(this.element.prop('maxlength') || this.element.attr('maxlength'), 10);\n if (maxLength > -1) {\n input[0].maxLength = maxLength;\n }\n input.addClass(element.className).css({\n width: '',\n height: element.style.height\n }).attr({\n 'role': 'combobox',\n 'aria-expanded': false\n }).show();\n if (placeholderSupported) {\n input.attr('placeholder', that.options.placeholder);\n }\n if (accessKey) {\n element.accessKey = '';\n input[0].accessKey = accessKey;\n }\n that._focused = that.input = input;\n that._inputWrapper = $(wrapper[0].firstChild);\n that._arrow = wrapper.find('.k-select').attr({\n 'role': 'button',\n 'tabIndex': -1\n });\n that._arrowIcon = that._arrow.find('.k-icon');\n if (element.id) {\n that._arrow.attr('aria-controls', that.ul[0].id);\n }\n },\n _clearButton: function () {\n List.fn._clearButton.call(this);\n if (this.options.clearButton) {\n this._clear.insertAfter(this.input);\n this.wrapper.addClass('k-combobox-clearable');\n }\n },\n _keydown: function (e) {\n var that = this, key = e.keyCode;\n that._last = key;\n clearTimeout(that._typingTimeout);\n that._typingTimeout = null;\n if (key === keys.HOME) {\n that._firstItem();\n } else if (key === keys.END) {\n that._lastItem();\n } else if (key === keys.ENTER || key === keys.TAB && that.popup.visible()) {\n var current = that.listView.focus();\n var dataItem = that.dataItem();\n var shouldTrigger = true;\n if (!that.popup.visible() && (!dataItem || that.text() !== that._text(dataItem))) {\n current = null;\n }\n if (current) {\n if (that.popup.visible()) {\n e.preventDefault();\n }\n dataItem = that.listView.dataItemByIndex(that.listView.getElementIndex(current));\n if (dataItem) {\n shouldTrigger = that._value(dataItem) !== List.unifyType(that.value(), typeof that._value(dataItem));\n }\n if (shouldTrigger && that.trigger('select', {\n dataItem: dataItem,\n item: current\n })) {\n return;\n }\n that._userTriggered = true;\n that._select(current).done(function () {\n that._blur();\n that._valueBeforeCascade = that._old = that.value();\n });\n } else {\n if (that._syncValueAndText() || that._isSelect) {\n that._accessor(that.input.val());\n }\n if (that.options.highlightFirst) {\n that.listView.value(that.input.val());\n that._blur();\n } else {\n that._oldText = that.text();\n }\n }\n } else if (key != keys.TAB && !that._move(e)) {\n that._search();\n } else if (key === keys.ESC && !that.popup.visible() && that.text()) {\n that._clearValue();\n }\n },\n _placeholder: function (show) {\n if (placeholderSupported) {\n return;\n }\n var that = this, input = that.input, placeholder = that.options.placeholder, value;\n if (placeholder) {\n value = that.value();\n if (show === undefined) {\n show = !value;\n }\n input.toggleClass('k-readonly', show);\n if (!show) {\n if (!value) {\n placeholder = '';\n } else {\n return;\n }\n }\n input.val(placeholder);\n if (!placeholder && input[0] === activeElement()) {\n caret(input[0], 0, 0);\n }\n }\n },\n _search: function () {\n var that = this;\n clearTimeout(that._typingTimeout);\n that._typingTimeout = setTimeout(function () {\n var value = that.text();\n if (value !== '' && that._prev !== value) {\n that._prev = value;\n if (that.options.filter === 'none' && that.options.virtual) {\n that.listView.select(-1);\n }\n that.search(value);\n that._toggleCloseVisibility();\n } else if (value === '' && that._prev !== '') {\n that._clearValue();\n that.search('');\n }\n that._typingTimeout = null;\n }, that.options.delay);\n },\n _setText: function (text) {\n this.input.val(text);\n this._prev = text;\n },\n _wrapper: function () {\n var that = this, element = that.element, wrapper = element.parent();\n if (!wrapper.is('span.k-widget')) {\n wrapper = element.hide().wrap('<span />').parent();\n wrapper[0].style.cssText = element[0].style.cssText;\n }\n that.wrapper = wrapper.addClass('k-widget k-combobox').addClass(element[0].className).removeClass('input-validation-error').css('display', '');\n },\n _clearSelection: function (parent, isFiltered) {\n var that = this;\n var hasValue = parent.value();\n var custom = hasValue && parent.selectedIndex === -1;\n if (this.selectedIndex == -1 && this.value()) {\n return;\n }\n if (isFiltered || !hasValue || custom) {\n that.options.value = '';\n that.value('');\n }\n },\n _preselect: function (value, text) {\n this.input.val(text);\n this._accessor(value);\n this._old = this._accessor();\n this._oldIndex = this.selectedIndex;\n this.listView.setValue(value);\n this._placeholder();\n this._initialIndex = null;\n this._presetValue = true;\n this._toggleCloseVisibility();\n },\n _clearText: function () {\n this._old = this.value();\n this.text('');\n },\n _clearValue: function () {\n Select.fn._clearValue.call(this);\n this.input.focus();\n }\n });\n ui.plugin(ComboBox);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.multiselect', [\n 'kendo.list',\n 'kendo.mobile.scroller',\n 'kendo.virtuallist'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'multiselect',\n name: 'MultiSelect',\n category: 'web',\n description: 'The MultiSelect widget allows the selection from pre-defined values.',\n depends: ['list'],\n features: [\n {\n id: 'mobile-scroller',\n name: 'Mobile scroller',\n description: 'Support for kinetic scrolling in mobile device',\n depends: ['mobile.scroller']\n },\n {\n id: 'virtualization',\n name: 'VirtualList',\n description: 'Support for virtualization',\n depends: ['virtuallist']\n }\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, List = ui.List, keys = $.extend({ A: 65 }, kendo.keys), activeElement = kendo._activeElement, ObservableArray = kendo.data.ObservableArray, proxy = $.proxy, ID = 'id', LI = 'li', ACCEPT = 'accept', FILTER = 'filter', REBIND = 'rebind', OPEN = 'open', CLOSE = 'close', CHANGE = 'change', PROGRESS = 'progress', SELECT = 'select', DESELECT = 'deselect', ARIA_DISABLED = 'aria-disabled', ARIA_READONLY = 'aria-readonly', FOCUSEDCLASS = 'k-state-focused', SELECTEDCLASS = 'k-state-selected', HIDDENCLASS = 'k-hidden', HOVERCLASS = 'k-state-hover', STATEDISABLED = 'k-state-disabled', NOCLICKCLASS = 'k-no-click', DISABLED = 'disabled', READONLY = 'readonly', AUTOCOMPLETEVALUE = 'off', ns = '.kendoMultiSelect', CLICK = 'click' + ns, KEYDOWN = 'keydown' + ns, MOUSEENTER = 'mouseenter' + ns, MOUSELEAVE = 'mouseleave' + ns, HOVEREVENTS = MOUSEENTER + ' ' + MOUSELEAVE, quotRegExp = /\"/g, isArray = $.isArray, styles = [\n 'font-family',\n 'font-size',\n 'font-stretch',\n 'font-style',\n 'font-weight',\n 'letter-spacing',\n 'text-transform',\n 'line-height'\n ];\n var MultiSelect = List.extend({\n init: function (element, options) {\n var that = this, id, disabled;\n that.ns = ns;\n List.fn.init.call(that, element, options);\n that._optionsMap = {};\n that._customOptions = {};\n that._wrapper();\n that._tagList();\n that._input();\n that._textContainer();\n that._loader();\n that._clearButton();\n that._tabindex(that.input);\n element = that.element.attr('multiple', 'multiple').hide();\n options = that.options;\n if (!options.placeholder) {\n options.placeholder = element.data('placeholder');\n }\n id = element.attr(ID);\n if (id) {\n that._tagID = id + '_tag_active';\n id = id + '_taglist';\n that.tagList.attr(ID, id);\n that.input.attr('aria-describedby', id);\n }\n that._initialOpen = true;\n that._ariaLabel();\n that._ariaSetLive();\n that._dataSource();\n that._ignoreCase();\n that._popup();\n that._tagTemplate();\n that.requireValueMapper(that.options);\n that._initList();\n that._reset();\n that._enable();\n that._placeholder();\n if (options.autoBind) {\n that.dataSource.fetch();\n } else if (options.value) {\n that._preselect(options.value);\n }\n disabled = $(that.element).parents('fieldset').is(':disabled');\n if (disabled) {\n that.enable(false);\n }\n that._ariaSetSize(that.value().length);\n kendo.notify(that);\n that._toggleCloseVisibility();\n },\n options: {\n name: 'MultiSelect',\n tagMode: 'multiple',\n enabled: true,\n autoBind: true,\n autoClose: true,\n highlightFirst: true,\n dataTextField: '',\n dataValueField: '',\n filter: 'startswith',\n ignoreCase: true,\n minLength: 1,\n messages: {\n 'singleTag': 'item(s) selected',\n 'clear': 'clear',\n 'deleteTag': 'delete',\n 'noData': 'No data found.'\n },\n enforceMinLength: false,\n delay: 100,\n value: null,\n maxSelectedItems: null,\n placeholder: '',\n height: 200,\n animation: {},\n virtual: false,\n itemTemplate: '',\n tagTemplate: '',\n groupTemplate: '#:data#',\n fixedGroupTemplate: '#:data#',\n clearButton: true,\n autoWidth: false,\n popup: null\n },\n events: [\n OPEN,\n CLOSE,\n CHANGE,\n SELECT,\n DESELECT,\n 'filtering',\n 'dataBinding',\n 'dataBound'\n ],\n setDataSource: function (dataSource) {\n this.options.dataSource = dataSource;\n this._state = '';\n this._dataSource();\n this.persistTagList = false;\n this.listView.setDataSource(this.dataSource);\n if (this.options.autoBind) {\n this.dataSource.fetch();\n }\n },\n setOptions: function (options) {\n var listOptions = this._listOptions(options);\n List.fn.setOptions.call(this, options);\n this.listView.setOptions(listOptions);\n this._accessors();\n this._aria(this.tagList.attr(ID));\n this._tagTemplate();\n this._placeholder();\n this._clearButton();\n },\n currentTag: function (candidate) {\n var that = this;\n if (candidate !== undefined) {\n if (that._currentTag) {\n that._currentTag.removeClass(FOCUSEDCLASS).removeAttr(ID);\n that._currentTag.find('.k-select').attr('aria-hidden', true);\n that.input.removeAttr('aria-activedescendant');\n }\n if (candidate) {\n candidate.addClass(FOCUSEDCLASS).attr(ID, that._tagID);\n candidate.find('.k-select').removeAttr('aria-hidden');\n that.input.attr('aria-activedescendant', that._tagID);\n }\n that._currentTag = candidate;\n } else {\n return that._currentTag;\n }\n },\n dataItems: function () {\n return this.listView.selectedDataItems();\n },\n destroy: function () {\n var that = this, ns = that.ns;\n clearTimeout(that._busy);\n clearTimeout(that._typingTimeout);\n that.wrapper.off(ns);\n that.tagList.off(ns);\n that.input.off(ns);\n that._clear.off(ns);\n List.fn.destroy.call(that);\n },\n _activateItem: function () {\n if (this.popup.visible()) {\n List.fn._activateItem.call(this);\n }\n this.currentTag(null);\n },\n _listOptions: function (options) {\n var that = this;\n var listOptions = List.fn._listOptions.call(that, $.extend(options, {\n selectedItemChange: proxy(that._selectedItemChange, that),\n selectable: 'multiple'\n }));\n var itemTemplate = this.options.itemTemplate || this.options.template;\n var template = listOptions.itemTemplate || itemTemplate || listOptions.template;\n if (!template) {\n template = '#:' + kendo.expr(listOptions.dataTextField, 'data') + '#';\n }\n listOptions.template = template;\n return listOptions;\n },\n _setListValue: function () {\n List.fn._setListValue.call(this, this._initialValues.slice(0));\n },\n _listChange: function (e) {\n var data = this.dataSource.flatView();\n var optionsMap = this._optionsMap;\n var valueGetter = this._value;\n if (this._state === REBIND) {\n this._state = '';\n }\n for (var i = 0; i < e.added.length; i++) {\n if (optionsMap[valueGetter(e.added[i].dataItem)] === undefined) {\n this._render(data);\n break;\n }\n }\n this._selectValue(e.added, e.removed);\n },\n _selectedItemChange: function (e) {\n var items = e.items;\n var context;\n var idx;\n for (idx = 0; idx < items.length; idx++) {\n context = items[idx];\n this.tagList.children().eq(context.index).children('span:first').html(this.tagTextTemplate(context.item));\n }\n },\n _wrapperMousedown: function (e) {\n var that = this;\n var notInput = e.target.nodeName.toLowerCase() !== 'input';\n var target = $(e.target);\n var closeButton = target.hasClass('k-select') || target.hasClass('k-icon');\n if (closeButton) {\n closeButton = !target.closest('.k-select').children('.k-i-arrow-60-down').length;\n }\n if (notInput && !(closeButton && kendo.support.mobileOS) && e.cancelable) {\n e.preventDefault();\n }\n if (!closeButton) {\n if (that.input[0] !== activeElement() && notInput) {\n that.input.focus();\n }\n if (that.options.minLength === 1) {\n that.open();\n }\n }\n },\n _inputFocus: function () {\n this._placeholder(false);\n this.wrapper.addClass(FOCUSEDCLASS);\n },\n _inputFocusout: function () {\n var that = this;\n clearTimeout(that._typingTimeout);\n that.wrapper.removeClass(FOCUSEDCLASS);\n that._placeholder(!that.listView.selectedDataItems()[0], true);\n that.close();\n if (that._state === FILTER) {\n that._state = ACCEPT;\n that.listView.skipUpdate(true);\n }\n if (that.listView.bound() && that.listView.isFiltered()) {\n that.persistTagList = true;\n that._clearFilter();\n }\n that.element.blur();\n },\n _removeTag: function (tag, shouldTrigger) {\n var that = this;\n var state = that._state;\n var position = tag.index();\n var listView = that.listView;\n var value = listView.value()[position];\n var dataItem = that.listView.selectedDataItems()[position];\n var customIndex = that._customOptions[value];\n var listViewChildren = listView.element[0].children;\n var option;\n var listViewChild;\n if (that.trigger(DESELECT, {\n dataItem: dataItem,\n item: tag\n })) {\n that._close();\n return;\n }\n if (customIndex === undefined && (state === ACCEPT || state === FILTER)) {\n customIndex = that._optionsMap[value];\n }\n var done = function () {\n that.currentTag(null);\n if (shouldTrigger) {\n that._change();\n }\n that._close();\n };\n if (customIndex === undefined && listView.select().length) {\n that.persistTagList = false;\n listView.select(listView.select()[position]).done(done);\n } else {\n option = that.element[0].children[customIndex];\n if (option) {\n option.selected = false;\n }\n listView.removeAt(position);\n listViewChild = listViewChildren[customIndex];\n if (listViewChild) {\n listViewChildren[customIndex].classList.remove('k-state-selected');\n }\n if (that.options.tagMode !== 'single') {\n tag.remove();\n } else {\n that._updateTagListHTML();\n }\n done();\n }\n },\n _tagListClick: function (e) {\n e.preventDefault();\n e.stopPropagation();\n var target = $(e.currentTarget);\n if (!target.children('.k-i-arrow-60-down').length) {\n this._removeTag(target.closest(LI), true);\n }\n },\n _clearValue: function () {\n var that = this;\n if (that.options.tagMode === 'single') {\n that._clearSingleTagValue();\n } else {\n that.tagList.children().each(function (index, tag) {\n that._removeTag($(tag), false);\n });\n }\n that.input.val('');\n that._search();\n that._change();\n that.focus();\n that._hideClear();\n if (that._state === FILTER) {\n that._state = ACCEPT;\n }\n },\n _clearSingleTagValue: function () {\n var that = this;\n var items = that.dataItems();\n var tags = that.tagList.children();\n var persistTagList = that.persistTagList;\n for (var i = 0; i < items.length; i += 1) {\n if (that.trigger(DESELECT, {\n dataItem: items[i],\n item: tags.first()\n })) {\n that._close();\n return;\n }\n }\n if (persistTagList) {\n that.persistTagList = false;\n }\n that.listView.value([]);\n that.persistTagList = persistTagList;\n },\n _focusHandler: function () {\n this.input.focus();\n },\n _editable: function (options) {\n var that = this, disable = options.disable, readonly = options.readonly, wrapper = that.wrapper.off(ns), tagList = that.tagList.off(ns), input = that.element.add(that.input.off(ns));\n if (!readonly && !disable) {\n wrapper.removeClass(STATEDISABLED).removeClass(NOCLICKCLASS).on(HOVEREVENTS, that._toggleHover).on('mousedown' + ns + ' touchend' + ns, proxy(that._wrapperMousedown, that)).on(CLICK, proxy(that._focusHandler, that));\n that.input.on(KEYDOWN, proxy(that._keydown, that)).on('paste' + ns, proxy(that._search, that)).on('input' + ns, proxy(that._search, that)).on('focus' + ns, proxy(that._inputFocus, that)).on('focusout' + ns, proxy(that._inputFocusout, that));\n that._clear.on(CLICK + ' touchend' + ns, proxy(that._clearValue, that));\n input.removeAttr(DISABLED).removeAttr(READONLY).attr(ARIA_DISABLED, false).attr(ARIA_READONLY, false);\n tagList.on(MOUSEENTER, LI, function () {\n $(this).addClass(HOVERCLASS);\n }).on(MOUSELEAVE, LI, function () {\n $(this).removeClass(HOVERCLASS);\n }).on(CLICK + ' touchend' + ns, 'li.k-button .k-select', proxy(that._tagListClick, that));\n } else {\n wrapper.toggleClass(STATEDISABLED, disable).toggleClass(NOCLICKCLASS, readonly);\n input.attr(DISABLED, disable).attr(READONLY, readonly).attr(ARIA_DISABLED, disable).attr(ARIA_READONLY, readonly);\n }\n },\n _close: function () {\n var that = this;\n if (that.options.autoClose) {\n that.close();\n } else {\n that.popup.position();\n }\n },\n _filterSource: function (filter, force) {\n if (!force) {\n force = this._retrieveData;\n }\n this._retrieveData = false;\n List.fn._filterSource.call(this, filter, force);\n },\n close: function () {\n this._activeItem = null;\n this.input.removeAttr('aria-activedescendant');\n this.popup.close();\n },\n open: function () {\n var that = this;\n if (that._request) {\n that._retrieveData = false;\n }\n if (that._retrieveData || !that.listView.bound() || that._state === ACCEPT) {\n that._open = true;\n that._state = REBIND;\n that.listView.skipUpdate(true);\n that.persistTagList = that._initialOpen && !that.listView.bound() ? false : true;\n that._filterSource();\n that._focusItem();\n } else if (that._allowOpening()) {\n if (that._initialOpen && !that.options.autoBind && !that.options.virtual && that.options.value && !$.isPlainObject(that.options.value[0])) {\n that.value(that.value() || that._initialValues);\n }\n that.popup._hovered = true;\n that._initialOpen = false;\n that.popup.open();\n that._focusItem();\n }\n },\n toggle: function (toggle) {\n toggle = toggle !== undefined ? toggle : !this.popup.visible();\n this[toggle ? OPEN : CLOSE]();\n },\n refresh: function () {\n this.listView.refresh();\n },\n _listBound: function () {\n var that = this;\n var data = that.dataSource.flatView();\n that._render(data);\n that._renderFooter();\n that._renderNoData();\n that._toggleNoData(!data.length);\n that._resizePopup();\n that._updateItemFocus();\n if (that._open) {\n that._open = false;\n that.toggle(that._allowOpening());\n }\n that.popup.position();\n if (that._touchScroller) {\n that._touchScroller.reset();\n }\n that._hideBusy();\n that._makeUnselectable();\n that.trigger('dataBound');\n },\n _updateItemFocus: function () {\n var that = this, data = that.dataSource.flatView(), skip = that.listView.skip(), isFirstPage = skip === undefined || skip === 0;\n if (data.length && isFirstPage) {\n if (!that.options.highlightFirst) {\n that.listView.focus(-1);\n } else {\n that.listView.focusFirst();\n }\n }\n },\n _inputValue: function () {\n var that = this;\n var inputValue = that.input.val();\n if (that.options.placeholder === inputValue) {\n inputValue = '';\n }\n return inputValue;\n },\n value: function (value) {\n var that = this;\n var listView = that.listView;\n var oldValue = listView.value().slice();\n var maxSelectedItems = that.options.maxSelectedItems;\n var clearFilters = listView.bound() && listView.isFiltered();\n if (value === undefined) {\n return oldValue;\n }\n that.persistTagList = false;\n that.requireValueMapper(that.options, value);\n value = that._normalizeValues(value);\n if (maxSelectedItems !== null && value.length > maxSelectedItems) {\n value = value.slice(0, maxSelectedItems);\n }\n if (clearFilters) {\n that._clearFilter();\n }\n listView.value(value);\n that._old = that._valueBeforeCascade = value.slice();\n if (!clearFilters) {\n that._fetchData();\n }\n that._ariaSetSize(that.value().length);\n that._toggleCloseVisibility();\n },\n _preselect: function (data, value) {\n var that = this;\n if (!isArray(data) && !(data instanceof kendo.data.ObservableArray)) {\n data = [data];\n }\n if ($.isPlainObject(data[0]) || data[0] instanceof kendo.data.ObservableObject || !that.options.dataValueField) {\n that.dataSource.data(data);\n that.value(value || that._initialValues);\n that._retrieveData = true;\n }\n },\n _setOption: function (value, selected) {\n var option = this.element[0].children[this._optionsMap[value]];\n if (option) {\n option.selected = selected;\n }\n },\n _fetchData: function () {\n var that = this;\n var hasItems = !!that.dataSource.view().length;\n var isEmptyArray = that.listView.value().length === 0;\n if (isEmptyArray || that._request) {\n return;\n }\n if (that._retrieveData || !that._fetch && !hasItems) {\n that._fetch = true;\n that._retrieveData = false;\n that.dataSource.read().done(function () {\n that._fetch = false;\n });\n }\n },\n _isBound: function () {\n return this.listView.bound() && !this._retrieveData;\n },\n _dataSource: function () {\n var that = this, element = that.element, options = that.options, dataSource = options.dataSource || {};\n dataSource = isArray(dataSource) ? { data: dataSource } : dataSource;\n dataSource.select = element;\n dataSource.fields = [\n { field: options.dataTextField },\n { field: options.dataValueField }\n ];\n if (that.dataSource && that._refreshHandler) {\n that._unbindDataSource();\n } else {\n that._progressHandler = proxy(that._showBusy, that);\n that._errorHandler = proxy(that._hideBusy, that);\n }\n that.dataSource = kendo.data.DataSource.create(dataSource).bind(PROGRESS, that._progressHandler).bind('error', that._errorHandler);\n },\n _reset: function () {\n var that = this, element = that.element, formId = element.attr('form'), form = formId ? $('#' + formId) : element.closest('form');\n if (form[0]) {\n that._resetHandler = function () {\n setTimeout(function () {\n that.value(that._initialValues);\n that._placeholder();\n });\n };\n that._form = form.on('reset', that._resetHandler);\n }\n },\n _initValue: function () {\n var value = this.options.value || this.element.val();\n this._old = this._initialValues = this._normalizeValues(value);\n },\n _normalizeValues: function (value) {\n var that = this;\n if (value === null) {\n value = [];\n } else if (value && $.isPlainObject(value)) {\n value = [that._value(value)];\n } else if (value && $.isPlainObject(value[0])) {\n value = $.map(value, function (dataItem) {\n return that._value(dataItem);\n });\n } else if (!isArray(value) && !(value instanceof ObservableArray)) {\n value = [value];\n } else if (isArray(value)) {\n value = value.slice();\n }\n return value;\n },\n _change: function () {\n var that = this, value = that.value();\n if (!compare(value, that._old)) {\n that._old = value.slice();\n that.trigger(CHANGE);\n that.element.trigger(CHANGE);\n }\n that.popup.position();\n that._ariaSetSize(value.length);\n that._toggleCloseVisibility();\n },\n _click: function (e) {\n var that = this;\n var item = e.item;\n e.preventDefault();\n that._select(item).done(function () {\n that._activeItem = item;\n that._change();\n that._close();\n });\n },\n _getActiveItem: function () {\n return this._activeItem || $(this.listView.items()[this._getSelectedIndices().length - 1]) || this.listView.focus();\n },\n _getSelectedIndices: function () {\n return this.listView._selectedIndices || this.listView._selectedIndexes;\n },\n _keydown: function (e) {\n var that = this;\n var key = e.keyCode;\n var tag = that._currentTag;\n var listView = that.listView;\n var hasValue = that.input.val();\n var isRtl = kendo.support.isRtl(that.wrapper);\n var visible = that.popup.visible();\n var dir = 0;\n var activeItemIdx;\n if (key !== keys.ENTER) {\n this._multipleSelection = false;\n }\n if (key === keys.DOWN) {\n e.preventDefault();\n if (!visible) {\n that.open();\n if (!listView.focus()) {\n listView.focusFirst();\n }\n return;\n }\n if (listView.focus()) {\n if (!that._activeItem && e.shiftKey) {\n that._activeItem = listView.focus();\n dir = -1;\n }\n activeItemIdx = listView.getElementIndex(that._getActiveItem().first());\n listView.focusNext();\n if (!listView.focus()) {\n listView.focusLast();\n } else {\n if (e.shiftKey) {\n this._multipleSelection = true;\n that._selectRange(activeItemIdx, listView.getElementIndex(listView.focus().first()) + dir);\n }\n }\n } else {\n listView.focusFirst();\n }\n } else if (key === keys.UP) {\n if (visible) {\n if (!that._activeItem && e.shiftKey) {\n that._activeItem = listView.focus();\n dir = 1;\n }\n activeItemIdx = listView.getElementIndex(that._getActiveItem().first());\n listView.focusPrev();\n if (!listView.focus()) {\n that.close();\n } else {\n if (e.shiftKey) {\n this._multipleSelection = true;\n that._selectRange(activeItemIdx, listView.getElementIndex(listView.focus().first()) + dir);\n }\n }\n }\n e.preventDefault();\n } else if (key === keys.LEFT && !isRtl || key === keys.RIGHT && isRtl) {\n if (!hasValue) {\n tag = tag ? tag.prev() : $(that.tagList[0].lastChild);\n if (tag[0]) {\n that.currentTag(tag);\n }\n }\n } else if (key === keys.RIGHT && !isRtl || key === keys.LEFT && isRtl) {\n if (!hasValue && tag) {\n tag = tag.next();\n that.currentTag(tag[0] ? tag : null);\n }\n } else if (e.ctrlKey && !e.altKey && key === keys.A && visible && !that.options.virtual) {\n this._multipleSelection = true;\n if (this._getSelectedIndices().length === listView.items().length) {\n that._activeItem = null;\n }\n if (listView.items().length) {\n that._selectRange(0, listView.items().length - 1);\n }\n } else if (key === keys.ENTER && visible) {\n if (!listView.focus()) {\n return;\n }\n e.preventDefault();\n if (this._multipleSelection) {\n this._multipleSelection = false;\n if (listView.focus().hasClass(SELECTEDCLASS)) {\n that._close();\n return;\n }\n }\n that._select(listView.focus()).done(function () {\n that._change();\n that._close();\n });\n } else if (key === keys.SPACEBAR && e.ctrlKey && visible) {\n if (that._activeItem && listView.focus() && listView.focus()[0] === that._activeItem[0]) {\n that._activeItem = null;\n }\n if (!$(listView.focus()).hasClass(SELECTEDCLASS)) {\n that._activeItem = listView.focus();\n }\n that._select(listView.focus()).done(function () {\n that._change();\n });\n e.preventDefault();\n } else if (key === keys.SPACEBAR && e.shiftKey && visible) {\n var activeIndex = listView.getElementIndex(that._getActiveItem());\n var currentIndex = listView.getElementIndex(listView.focus());\n if (activeIndex !== undefined && currentIndex !== undefined) {\n that._selectRange(activeIndex, currentIndex);\n }\n e.preventDefault();\n } else if (key === keys.ESC) {\n if (visible) {\n e.preventDefault();\n } else {\n that.tagList.children().each(function (index, tag) {\n that._removeTag($(tag), false);\n });\n that._change();\n }\n that.close();\n } else if (key === keys.HOME) {\n if (visible) {\n if (!listView.focus()) {\n that.close();\n } else {\n if (e.ctrlKey && e.shiftKey && !that.options.virtual) {\n that._selectRange(listView.getElementIndex(listView.focus()[0]), 0);\n }\n listView.focusFirst();\n }\n } else if (!hasValue) {\n tag = that.tagList[0].firstChild;\n if (tag) {\n that.currentTag($(tag));\n }\n }\n } else if (key === keys.END) {\n if (visible) {\n if (!listView.focus()) {\n that.close();\n } else {\n if (e.ctrlKey && e.shiftKey && !that.options.virtual) {\n that._selectRange(listView.getElementIndex(listView.focus()[0]), listView.element.children().length - 1);\n }\n listView.focusLast();\n }\n } else if (!hasValue) {\n tag = that.tagList[0].lastChild;\n if (tag) {\n that.currentTag($(tag));\n }\n }\n } else if ((key === keys.DELETE || key === keys.BACKSPACE) && !hasValue) {\n that._state = ACCEPT;\n if (that.options.tagMode === 'single') {\n that._clearSingleTagValue();\n that._change();\n that._close();\n return;\n }\n if (key === keys.BACKSPACE && !tag) {\n tag = $(that.tagList[0].lastChild);\n }\n if (tag && tag[0]) {\n that._removeTag(tag, true);\n }\n } else if (that.popup.visible() && (key === keys.PAGEDOWN || key === keys.PAGEUP)) {\n e.preventDefault();\n var direction = key === keys.PAGEDOWN ? 1 : -1;\n listView.scrollWith(direction * listView.screenHeight());\n } else {\n clearTimeout(that._typingTimeout);\n setTimeout(function () {\n that._scale();\n });\n that._search();\n }\n },\n _hideBusy: function () {\n var that = this;\n clearTimeout(that._busy);\n that.input.attr('aria-busy', false);\n that._loading.addClass(HIDDENCLASS);\n that._request = false;\n that._busy = null;\n that._toggleCloseVisibility();\n },\n _showBusyHandler: function () {\n this.input.attr('aria-busy', true);\n this._loading.removeClass(HIDDENCLASS);\n this._hideClear();\n },\n _showBusy: function () {\n var that = this;\n that._request = true;\n if (that._busy) {\n return;\n }\n that._busy = setTimeout(proxy(that._showBusyHandler, that), 100);\n },\n _placeholder: function (show, skipCaret) {\n var that = this;\n var input = that.input;\n var active = activeElement();\n var placeholder = that.options.placeholder;\n var inputValue = input.val();\n var isActive = input[0] === active;\n var caretPos = inputValue.length;\n if (!isActive || that.options.autoClose || inputValue === placeholder) {\n caretPos = 0;\n inputValue = '';\n }\n if (show === undefined) {\n show = false;\n if (input[0] !== active) {\n show = !that.listView.selectedDataItems()[0];\n }\n }\n that._prev = inputValue;\n input.toggleClass('k-readonly', show).val(show ? placeholder : inputValue);\n if (isActive && !skipCaret) {\n kendo.caret(input[0], caretPos, caretPos);\n }\n that._scale();\n },\n _scale: function () {\n var that = this, wrapper = that.wrapper.find('.k-multiselect-wrap'), wrapperWidth = wrapper.width(), span = that._span.text(that.input.val()), textWidth;\n if (!wrapper.is(':visible')) {\n span.appendTo(document.documentElement);\n wrapperWidth = textWidth = span.width() + 25;\n span.appendTo(wrapper);\n } else {\n textWidth = span.width() + 25;\n }\n that.input.width(textWidth > wrapperWidth ? wrapperWidth : textWidth);\n },\n _option: function (dataValue, dataText, selected) {\n var option = '<option';\n if (dataValue !== undefined) {\n dataValue += '';\n if (dataValue.indexOf('\"') !== -1) {\n dataValue = dataValue.replace(quotRegExp, '"');\n }\n option += ' value=\"' + dataValue + '\"';\n }\n if (selected) {\n option += ' selected';\n }\n option += '>';\n if (dataText !== undefined) {\n option += kendo.htmlEncode(dataText);\n }\n return option += '</option>';\n },\n _render: function (data) {\n var selectedItems = this.listView.selectedDataItems();\n var values = this.listView.value();\n var length = data.length;\n var selectedIndex;\n var options = '';\n var dataItem;\n var value;\n var idx;\n if (values.length !== selectedItems.length) {\n selectedItems = this._buildSelectedItems(values);\n }\n var custom = {};\n var optionsMap = {};\n for (idx = 0; idx < length; idx++) {\n dataItem = data[idx];\n value = this._value(dataItem);\n selectedIndex = this._selectedItemIndex(value, selectedItems);\n if (selectedIndex !== -1) {\n selectedItems.splice(selectedIndex, 1);\n }\n optionsMap[value] = idx;\n options += this._option(value, this._text(dataItem), selectedIndex !== -1);\n }\n if (selectedItems.length) {\n for (idx = 0; idx < selectedItems.length; idx++) {\n dataItem = selectedItems[idx];\n value = this._value(dataItem);\n custom[value] = length;\n optionsMap[value] = length;\n length += 1;\n options += this._option(value, this._text(dataItem), true);\n }\n }\n this._customOptions = custom;\n this._optionsMap = optionsMap;\n this.element.html(options);\n },\n _buildSelectedItems: function (values) {\n var valueField = this.options.dataValueField;\n var textField = this.options.dataTextField;\n var result = [];\n var item;\n for (var idx = 0; idx < values.length; idx++) {\n item = {};\n item[valueField] = values[idx];\n item[textField] = values[idx];\n result.push(item);\n }\n return result;\n },\n _selectedItemIndex: function (value, selectedItems) {\n var valueGetter = this._value;\n var idx = 0;\n for (; idx < selectedItems.length; idx++) {\n if (value === valueGetter(selectedItems[idx])) {\n return idx;\n }\n }\n return -1;\n },\n _search: function () {\n var that = this;\n clearTimeout(that._typingTimeout);\n that._typingTimeout = setTimeout(function () {\n var value = that._inputValue();\n if (that._prev !== value) {\n that._prev = value;\n that.search(value);\n that._toggleCloseVisibility();\n }\n }, that.options.delay);\n },\n _toggleCloseVisibility: function () {\n if (this.value().length || this.input.val() && this.input.val() !== this.options.placeholder) {\n this._showClear();\n } else {\n this._hideClear();\n }\n },\n _allowOpening: function () {\n return this._allowSelection() && List.fn._allowOpening.call(this);\n },\n _allowSelection: function () {\n var max = this.options.maxSelectedItems;\n return max === null || max > this.listView.value().length;\n },\n _angularTagItems: function (cmd) {\n var that = this;\n that.angular(cmd, function () {\n return {\n elements: that.tagList[0].children,\n data: $.map(that.dataItems(), function (dataItem) {\n return { dataItem: dataItem };\n })\n };\n });\n },\n updatePersistTagList: function (added, removed) {\n if (this.persistTagList.added && this.persistTagList.added.length === removed.length && this.persistTagList.removed && this.persistTagList.removed.length === added.length) {\n this.persistTagList = false;\n } else {\n this.listView._removedAddedIndexes = this._old.slice();\n this.persistTagList = {\n added: added,\n removed: removed\n };\n }\n },\n _selectValue: function (added, removed) {\n var that = this;\n var total = that.dataSource.total();\n var tagList = that.tagList;\n var getter = that._value;\n var removedItem;\n var addedItem;\n var idx;\n if (this.persistTagList) {\n this.updatePersistTagList(added, removed);\n return;\n }\n that._angularTagItems('cleanup');\n if (that.options.tagMode === 'multiple') {\n for (idx = removed.length - 1; idx > -1; idx--) {\n removedItem = removed[idx];\n if (tagList.children().length) {\n tagList[0].removeChild(tagList[0].children[removedItem.position]);\n that._setOption(getter(removedItem.dataItem), false);\n }\n }\n for (idx = 0; idx < added.length; idx++) {\n addedItem = added[idx];\n tagList.append(that.tagTemplate(addedItem.dataItem));\n that._setOption(getter(addedItem.dataItem), true);\n }\n that._updateTagListAria();\n } else {\n if (!that._maxTotal || that._maxTotal < total) {\n that._maxTotal = total;\n }\n this._updateTagListHTML();\n for (idx = removed.length - 1; idx > -1; idx--) {\n that._setOption(getter(removed[idx].dataItem), false);\n }\n for (idx = 0; idx < added.length; idx++) {\n that._setOption(getter(added[idx].dataItem), true);\n }\n }\n that._angularTagItems('compile');\n that._placeholder();\n },\n _updateTagListHTML: function () {\n var that = this;\n var values = that.value();\n var total = that.dataSource.total();\n var tagList = that.tagList;\n tagList.html('');\n if (values.length) {\n tagList.append(that.tagTemplate({\n values: values,\n dataItems: that.dataItems(),\n maxTotal: that._maxTotal,\n currentTotal: total\n }));\n }\n that._updateTagListAria();\n },\n _updateTagListAria: function () {\n var that = this;\n var tagList = that.tagList;\n tagList.attr('role', tagList.children().length ? 'listbox' : 'presentation');\n },\n _select: function (candidate) {\n var resolved = $.Deferred().resolve();\n if (!candidate) {\n return resolved;\n }\n var that = this;\n var listView = that.listView;\n var dataItem = listView.dataItemByIndex(listView.getElementIndex(candidate));\n var isSelected = candidate.hasClass('k-state-selected');\n if (that._state === REBIND) {\n that._state = '';\n }\n if (!that._allowSelection() && !isSelected) {\n return resolved;\n }\n if (that.trigger(isSelected ? DESELECT : SELECT, {\n dataItem: dataItem,\n item: candidate\n })) {\n that._close();\n return resolved;\n }\n that.persistTagList = false;\n return listView.select(candidate).done(function () {\n that._placeholder();\n if (that._state === FILTER) {\n that._state = ACCEPT;\n listView.skipUpdate(true);\n }\n });\n },\n _selectRange: function (startIndex, endIndex) {\n var that = this;\n var listView = this.listView;\n var maxSelectedItems = this.options.maxSelectedItems;\n var indices = this._getSelectedIndices().slice();\n var indicesToSelect = [];\n var i;\n var selectIndices = function (indices) {\n listView.select(indices).done(function () {\n indices.forEach(function (index) {\n var dataItem = listView.dataItemByIndex(index);\n var candidate = listView.element.children()[index];\n var isSelected = $(candidate).hasClass('k-state-selected');\n that.trigger(isSelected ? SELECT : DESELECT, {\n dataItem: dataItem,\n item: $(candidate)\n });\n });\n that._change();\n });\n };\n if (indices.length - 1 === endIndex - startIndex) {\n return selectIndices(indices);\n }\n if (startIndex < endIndex) {\n for (i = startIndex; i <= endIndex; i++) {\n indicesToSelect.push(i);\n }\n } else {\n for (i = startIndex; i >= endIndex; i--) {\n indicesToSelect.push(i);\n }\n }\n if (maxSelectedItems !== null && indicesToSelect.length > maxSelectedItems) {\n indicesToSelect = indicesToSelect.slice(0, maxSelectedItems);\n }\n for (i = 0; i < indicesToSelect.length; i++) {\n var index = indicesToSelect[i];\n if (this._getSelectedIndices().indexOf(index) == -1) {\n indices.push(index);\n } else {\n indices.splice(indices.indexOf(index), 1);\n }\n }\n if (!indices.length) {\n return;\n }\n that.persistTagList = false;\n return selectIndices(indices);\n },\n _input: function () {\n var that = this;\n var element = that.element;\n var accessKey = element[0].accessKey;\n var input = that._inputWrapper.children('input.k-input');\n if (!input[0]) {\n input = $('<input class=\"k-input\" style=\"width: 25px\" />').appendTo(that._inputWrapper);\n }\n element.removeAttr('accesskey');\n that._focused = that.input = input.attr({\n 'accesskey': accessKey,\n 'autocomplete': AUTOCOMPLETEVALUE,\n 'role': 'textbox',\n 'title': element[0].title,\n 'aria-expanded': false,\n 'aria-haspopup': 'true',\n 'aria-autocomplete': 'list'\n });\n },\n _tagList: function () {\n var that = this, tagList = that._inputWrapper.children('ul');\n if (!tagList[0]) {\n tagList = $('<ul unselectable=\"on\" class=\"k-reset\"/>').appendTo(that._inputWrapper);\n }\n that.tagList = tagList;\n },\n _tagTemplate: function () {\n var that = this;\n var options = that.options;\n var tagTemplate = options.tagTemplate;\n var hasDataSource = options.dataSource;\n var isMultiple = options.tagMode === 'multiple';\n var singleTag = options.messages.singleTag;\n var defaultTemplate;\n if (that.element[0].length && !hasDataSource) {\n options.dataTextField = options.dataTextField || 'text';\n options.dataValueField = options.dataValueField || 'value';\n }\n defaultTemplate = isMultiple ? kendo.template('#:' + kendo.expr(options.dataTextField, 'data') + '#', { useWithBlock: false }) : kendo.template('#:values.length# ' + singleTag);\n that.tagTextTemplate = tagTemplate = tagTemplate ? kendo.template(tagTemplate) : defaultTemplate;\n that.tagTemplate = function (data) {\n return '<li role=\"option\" aria-selected=\"true\" class=\"k-button\" unselectable=\"on\"><span unselectable=\"on\">' + tagTemplate(data) + '</span>' + '<span aria-hidden=\"true\" unselectable=\"on\" aria-label=\"' + (isMultiple ? 'delete\" title=\"' + that.options.messages.deleteTag + '\" aria-label=\"' + that.options.messages.deleteTag : 'open') + '\" class=\"k-select\"><span class=\"k-icon ' + (isMultiple ? 'k-i-close' : 'k-i-arrow-60-down') + '\">' + '</span></span></li>';\n };\n },\n _loader: function () {\n this._loading = $('<span class=\"k-icon k-i-loading ' + HIDDENCLASS + '\"></span>').insertAfter(this.input);\n },\n _clearButton: function () {\n List.fn._clearButton.call(this);\n if (this.options.clearButton) {\n this._clear.insertAfter(this.input);\n this.wrapper.addClass('k-multiselect-clearable');\n }\n },\n _textContainer: function () {\n var computedStyles = kendo.getComputedStyles(this.input[0], styles);\n computedStyles.position = 'absolute';\n computedStyles.visibility = 'hidden';\n computedStyles.top = -3333;\n computedStyles.left = -3333;\n this._span = $('<span/>').css(computedStyles).appendTo(this.wrapper);\n },\n _wrapper: function () {\n var that = this, element = that.element, wrapper = element.parent('span.k-multiselect');\n if (!wrapper[0]) {\n wrapper = element.wrap('<div class=\"k-widget k-multiselect\" unselectable=\"on\" />').parent();\n wrapper[0].style.cssText = element[0].style.cssText;\n wrapper[0].title = element[0].title;\n $('<div class=\"k-multiselect-wrap k-floatwrap\" unselectable=\"on\" />').insertBefore(element);\n }\n that.wrapper = wrapper.addClass(element[0].className).removeClass('input-validation-error').css('display', '');\n that._inputWrapper = $(wrapper[0].firstChild);\n },\n _ariaSetSize: function (value) {\n var that = this;\n var selectedItems = that.tagList.children();\n if (value && selectedItems.length) {\n selectedItems.attr('aria-setsize', value);\n }\n },\n _ariaSetLive: function () {\n var that = this;\n that.ul.attr('aria-live', !that._isFilterEnabled() ? 'off' : 'polite');\n }\n });\n function compare(a, b) {\n var length;\n if (a === null && b !== null || a !== null && b === null) {\n return false;\n }\n length = a.length;\n if (length !== b.length) {\n return false;\n }\n while (length--) {\n if (a[length] !== b[length]) {\n return false;\n }\n }\n return true;\n }\n ui.plugin(MultiSelect);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.color', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'color',\n name: 'Color utils',\n category: 'framework',\n advanced: true,\n description: 'Color utilities used across components',\n depends: ['core']\n };\n window.kendo = window.kendo || {};\n var Class = kendo.Class;\n var support = kendo.support;\n var namedColors = {\n aliceblue: 'f0f8ff',\n antiquewhite: 'faebd7',\n aqua: '00ffff',\n aquamarine: '7fffd4',\n azure: 'f0ffff',\n beige: 'f5f5dc',\n bisque: 'ffe4c4',\n black: '000000',\n blanchedalmond: 'ffebcd',\n blue: '0000ff',\n blueviolet: '8a2be2',\n brown: 'a52a2a',\n burlywood: 'deb887',\n cadetblue: '5f9ea0',\n chartreuse: '7fff00',\n chocolate: 'd2691e',\n coral: 'ff7f50',\n cornflowerblue: '6495ed',\n cornsilk: 'fff8dc',\n crimson: 'dc143c',\n cyan: '00ffff',\n darkblue: '00008b',\n darkcyan: '008b8b',\n darkgoldenrod: 'b8860b',\n darkgray: 'a9a9a9',\n darkgrey: 'a9a9a9',\n darkgreen: '006400',\n darkkhaki: 'bdb76b',\n darkmagenta: '8b008b',\n darkolivegreen: '556b2f',\n darkorange: 'ff8c00',\n darkorchid: '9932cc',\n darkred: '8b0000',\n darksalmon: 'e9967a',\n darkseagreen: '8fbc8f',\n darkslateblue: '483d8b',\n darkslategray: '2f4f4f',\n darkslategrey: '2f4f4f',\n darkturquoise: '00ced1',\n darkviolet: '9400d3',\n deeppink: 'ff1493',\n deepskyblue: '00bfff',\n dimgray: '696969',\n dimgrey: '696969',\n dodgerblue: '1e90ff',\n firebrick: 'b22222',\n floralwhite: 'fffaf0',\n forestgreen: '228b22',\n fuchsia: 'ff00ff',\n gainsboro: 'dcdcdc',\n ghostwhite: 'f8f8ff',\n gold: 'ffd700',\n goldenrod: 'daa520',\n gray: '808080',\n grey: '808080',\n green: '008000',\n greenyellow: 'adff2f',\n honeydew: 'f0fff0',\n hotpink: 'ff69b4',\n indianred: 'cd5c5c',\n indigo: '4b0082',\n ivory: 'fffff0',\n khaki: 'f0e68c',\n lavender: 'e6e6fa',\n lavenderblush: 'fff0f5',\n lawngreen: '7cfc00',\n lemonchiffon: 'fffacd',\n lightblue: 'add8e6',\n lightcoral: 'f08080',\n lightcyan: 'e0ffff',\n lightgoldenrodyellow: 'fafad2',\n lightgray: 'd3d3d3',\n lightgrey: 'd3d3d3',\n lightgreen: '90ee90',\n lightpink: 'ffb6c1',\n lightsalmon: 'ffa07a',\n lightseagreen: '20b2aa',\n lightskyblue: '87cefa',\n lightslategray: '778899',\n lightslategrey: '778899',\n lightsteelblue: 'b0c4de',\n lightyellow: 'ffffe0',\n lime: '00ff00',\n limegreen: '32cd32',\n linen: 'faf0e6',\n magenta: 'ff00ff',\n maroon: '800000',\n mediumaquamarine: '66cdaa',\n mediumblue: '0000cd',\n mediumorchid: 'ba55d3',\n mediumpurple: '9370d8',\n mediumseagreen: '3cb371',\n mediumslateblue: '7b68ee',\n mediumspringgreen: '00fa9a',\n mediumturquoise: '48d1cc',\n mediumvioletred: 'c71585',\n midnightblue: '191970',\n mintcream: 'f5fffa',\n mistyrose: 'ffe4e1',\n moccasin: 'ffe4b5',\n navajowhite: 'ffdead',\n navy: '000080',\n oldlace: 'fdf5e6',\n olive: '808000',\n olivedrab: '6b8e23',\n orange: 'ffa500',\n orangered: 'ff4500',\n orchid: 'da70d6',\n palegoldenrod: 'eee8aa',\n palegreen: '98fb98',\n paleturquoise: 'afeeee',\n palevioletred: 'd87093',\n papayawhip: 'ffefd5',\n peachpuff: 'ffdab9',\n peru: 'cd853f',\n pink: 'ffc0cb',\n plum: 'dda0dd',\n powderblue: 'b0e0e6',\n purple: '800080',\n red: 'ff0000',\n rosybrown: 'bc8f8f',\n royalblue: '4169e1',\n saddlebrown: '8b4513',\n salmon: 'fa8072',\n sandybrown: 'f4a460',\n seagreen: '2e8b57',\n seashell: 'fff5ee',\n sienna: 'a0522d',\n silver: 'c0c0c0',\n skyblue: '87ceeb',\n slateblue: '6a5acd',\n slategray: '708090',\n slategrey: '708090',\n snow: 'fffafa',\n springgreen: '00ff7f',\n steelblue: '4682b4',\n tan: 'd2b48c',\n teal: '008080',\n thistle: 'd8bfd8',\n tomato: 'ff6347',\n turquoise: '40e0d0',\n violet: 'ee82ee',\n wheat: 'f5deb3',\n white: 'ffffff',\n whitesmoke: 'f5f5f5',\n yellow: 'ffff00',\n yellowgreen: '9acd32'\n };\n var browser = support.browser;\n var matchNamedColor = function (color) {\n var colorNames = Object.keys(namedColors);\n colorNames.push('transparent');\n var regexp = new RegExp('^(' + colorNames.join('|') + ')(\\\\W|$)', 'i');\n matchNamedColor = function (color) {\n return regexp.exec(color);\n };\n return regexp.exec(color);\n };\n var BaseColor = Class.extend({\n init: function () {\n },\n toHSV: function () {\n return this;\n },\n toRGB: function () {\n return this;\n },\n toHex: function () {\n return this.toBytes().toHex();\n },\n toBytes: function () {\n return this;\n },\n toCss: function () {\n return '#' + this.toHex();\n },\n toCssRgba: function () {\n var rgb = this.toBytes();\n return 'rgba(' + rgb.r + ', ' + rgb.g + ', ' + rgb.b + ', ' + parseFloat(Number(this.a).toFixed(3)) + ')';\n },\n toDisplay: function () {\n if (browser.msie && browser.version < 9) {\n return this.toCss();\n }\n return this.toCssRgba();\n },\n equals: function (c) {\n return c === this || c !== null && this.toCssRgba() === parseColor(c).toCssRgba();\n },\n diff: function (other) {\n if (other === null) {\n return NaN;\n }\n var c1 = this.toBytes();\n var c2 = other.toBytes();\n return Math.sqrt(Math.pow((c1.r - c2.r) * 0.3, 2) + Math.pow((c1.g - c2.g) * 0.59, 2) + Math.pow((c1.b - c2.b) * 0.11, 2));\n },\n clone: function () {\n var c = this.toBytes();\n if (c === this) {\n c = new Bytes(c.r, c.g, c.b, c.a);\n }\n return c;\n }\n });\n var RGB = BaseColor.extend({\n init: function (r, g, b, a) {\n BaseColor.fn.init.call(this);\n this.r = r;\n this.g = g;\n this.b = b;\n this.a = a;\n },\n toHSV: function () {\n var ref = this;\n var r = ref.r;\n var g = ref.g;\n var b = ref.b;\n var min = Math.min(r, g, b);\n var max = Math.max(r, g, b);\n var delta = max - min;\n var v = max;\n var h, s;\n if (delta === 0) {\n return new HSV(0, 0, v, this.a);\n }\n if (max !== 0) {\n s = delta / max;\n if (r === max) {\n h = (g - b) / delta;\n } else if (g === max) {\n h = 2 + (b - r) / delta;\n } else {\n h = 4 + (r - g) / delta;\n }\n h *= 60;\n if (h < 0) {\n h += 360;\n }\n } else {\n s = 0;\n h = -1;\n }\n return new HSV(h, s, v, this.a);\n },\n toHSL: function () {\n var ref = this;\n var r = ref.r;\n var g = ref.g;\n var b = ref.b;\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var h, s, l = (max + min) / 2;\n if (max === min) {\n h = s = 0;\n } else {\n var d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n default:\n break;\n }\n }\n return new HSL(h * 60, s * 100, l * 100, this.a);\n },\n toBytes: function () {\n return new Bytes(this.r * 255, this.g * 255, this.b * 255, this.a);\n }\n });\n var Bytes = RGB.extend({\n init: function (r, g, b, a) {\n RGB.fn.init.call(this, Math.round(r), Math.round(g), Math.round(b), a);\n },\n toRGB: function () {\n return new RGB(this.r / 255, this.g / 255, this.b / 255, this.a);\n },\n toHSV: function () {\n return this.toRGB().toHSV();\n },\n toHSL: function () {\n return this.toRGB().toHSL();\n },\n toHex: function () {\n return hex(this.r, 2) + hex(this.g, 2) + hex(this.b, 2);\n },\n toBytes: function () {\n return this;\n }\n });\n function hex(n, width, pad) {\n if (pad === void 0) {\n pad = '0';\n }\n var result = n.toString(16);\n while (width > result.length) {\n result = pad + result;\n }\n return result;\n }\n var HSV = BaseColor.extend({\n init: function (h, s, v, a) {\n BaseColor.fn.init.call(this);\n this.h = h;\n this.s = s;\n this.v = v;\n this.a = a;\n },\n toRGB: function () {\n var ref = this;\n var h = ref.h;\n var s = ref.s;\n var v = ref.v;\n var r, g, b;\n if (s === 0) {\n r = g = b = v;\n } else {\n h /= 60;\n var i = Math.floor(h);\n var f = h - i;\n var p = v * (1 - s);\n var q = v * (1 - s * f);\n var t = v * (1 - s * (1 - f));\n switch (i) {\n case 0:\n r = v;\n g = t;\n b = p;\n break;\n case 1:\n r = q;\n g = v;\n b = p;\n break;\n case 2:\n r = p;\n g = v;\n b = t;\n break;\n case 3:\n r = p;\n g = q;\n b = v;\n break;\n case 4:\n r = t;\n g = p;\n b = v;\n break;\n default:\n r = v;\n g = p;\n b = q;\n break;\n }\n }\n return new RGB(r, g, b, this.a);\n },\n toHSL: function () {\n return this.toRGB().toHSL();\n },\n toBytes: function () {\n return this.toRGB().toBytes();\n }\n });\n var HSL = BaseColor.extend({\n init: function (h, s, l, a) {\n BaseColor.fn.init.call(this);\n this.h = h;\n this.s = s;\n this.l = l;\n this.a = a;\n },\n toRGB: function () {\n var h = this.h / 360;\n var s = this.s / 100;\n var l = this.l / 100;\n var r, g, b;\n if (s === 0) {\n r = g = b = l;\n } else {\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n var p = 2 * l - q;\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n return new RGB(r, g, b, this.a);\n },\n toHSV: function () {\n return this.toRGB().toHSV();\n },\n toBytes: function () {\n return this.toRGB().toBytes();\n }\n });\n function hue2rgb(p, q, s) {\n var t = s;\n if (t < 0) {\n t += 1;\n }\n if (t > 1) {\n t -= 1;\n }\n if (t < 1 / 6) {\n return p + (q - p) * 6 * t;\n }\n if (t < 1 / 2) {\n return q;\n }\n if (t < 2 / 3) {\n return p + (q - p) * (2 / 3 - t) * 6;\n }\n return p;\n }\n function parseColor(value, safe) {\n var m, ret;\n if (value == null || value === 'none') {\n return null;\n }\n if (value instanceof BaseColor) {\n return value;\n }\n var color = value.toLowerCase();\n if (m = matchNamedColor(color)) {\n if (m[1] === 'transparent') {\n color = new RGB(1, 1, 1, 0);\n } else {\n color = parseColor(namedColors[m[1]], safe);\n }\n color.match = [m[1]];\n return color;\n }\n if (m = /^#?([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})\\b/i.exec(color)) {\n ret = new Bytes(parseInt(m[1], 16), parseInt(m[2], 16), parseInt(m[3], 16), 1);\n } else if (m = /^#?([0-9a-f])([0-9a-f])([0-9a-f])\\b/i.exec(color)) {\n ret = new Bytes(parseInt(m[1] + m[1], 16), parseInt(m[2] + m[2], 16), parseInt(m[3] + m[3], 16), 1);\n } else if (m = /^rgb\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*\\)/.exec(color)) {\n ret = new Bytes(parseInt(m[1], 10), parseInt(m[2], 10), parseInt(m[3], 10), 1);\n } else if (m = /^rgba\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9.]+)\\s*\\)/.exec(color)) {\n ret = new Bytes(parseInt(m[1], 10), parseInt(m[2], 10), parseInt(m[3], 10), parseFloat(m[4]));\n } else if (m = /^rgb\\(\\s*([0-9]*\\.?[0-9]+)%\\s*,\\s*([0-9]*\\.?[0-9]+)%\\s*,\\s*([0-9]*\\.?[0-9]+)%\\s*\\)/.exec(color)) {\n ret = new RGB(parseFloat(m[1]) / 100, parseFloat(m[2]) / 100, parseFloat(m[3]) / 100, 1);\n } else if (m = /^rgba\\(\\s*([0-9]*\\.?[0-9]+)%\\s*,\\s*([0-9]*\\.?[0-9]+)%\\s*,\\s*([0-9]*\\.?[0-9]+)%\\s*,\\s*([0-9.]+)\\s*\\)/.exec(color)) {\n ret = new RGB(parseFloat(m[1]) / 100, parseFloat(m[2]) / 100, parseFloat(m[3]) / 100, parseFloat(m[4]));\n }\n if (ret) {\n ret.match = m;\n } else if (!safe) {\n throw new Error('Cannot parse color: ' + color);\n }\n return ret;\n }\n var DARK_TRESHOLD = 180;\n var Color = Class.extend({\n init: function (value) {\n var this$1 = this;\n if (arguments.length === 1) {\n var formats = Color.formats;\n var resolvedColor = this.resolveColor(value);\n for (var idx = 0; idx < formats.length; idx++) {\n var formatRegex = formats[idx].re;\n var processor = formats[idx].process;\n var parts = formatRegex.exec(resolvedColor);\n if (parts) {\n var channels = processor(parts);\n this$1.r = channels[0];\n this$1.g = channels[1];\n this$1.b = channels[2];\n }\n }\n } else {\n this.r = arguments[0];\n this.g = arguments[1];\n this.b = arguments[2];\n }\n this.r = this.normalizeByte(this.r);\n this.g = this.normalizeByte(this.g);\n this.b = this.normalizeByte(this.b);\n },\n toHex: function () {\n var pad = this.padDigit;\n var r = this.r.toString(16);\n var g = this.g.toString(16);\n var b = this.b.toString(16);\n return '#' + pad(r) + pad(g) + pad(b);\n },\n resolveColor: function (value) {\n var color = value || 'black';\n if (color.charAt(0) === '#') {\n color = color.substr(1, 6);\n }\n color = color.replace(/ /g, '');\n color = color.toLowerCase();\n color = Color.namedColors[color] || color;\n return color;\n },\n normalizeByte: function (value) {\n if (value < 0 || isNaN(value)) {\n return 0;\n }\n return value > 255 ? 255 : value;\n },\n padDigit: function (value) {\n return value.length === 1 ? '0' + value : value;\n },\n brightness: function (value) {\n var round = Math.round;\n this.r = round(this.normalizeByte(this.r * value));\n this.g = round(this.normalizeByte(this.g * value));\n this.b = round(this.normalizeByte(this.b * value));\n return this;\n },\n percBrightness: function () {\n return Math.sqrt(0.241 * this.r * this.r + 0.691 * this.g * this.g + 0.068 * this.b * this.b);\n },\n isDark: function () {\n return this.percBrightness() < DARK_TRESHOLD;\n }\n });\n Color.fromBytes = function (r, g, b, a) {\n return new Bytes(r, g, b, a != null ? a : 1);\n };\n Color.fromRGB = function (r, g, b, a) {\n return new RGB(r, g, b, a != null ? a : 1);\n };\n Color.fromHSV = function (h, s, v, a) {\n return new HSV(h, s, v, a != null ? a : 1);\n };\n Color.fromHSL = function (h, s, l, a) {\n return new HSL(h, s, l, a != null ? a : 1);\n };\n Color.formats = [\n {\n re: /^rgb\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3})\\)$/,\n process: function (parts) {\n return [\n parseInt(parts[1], 10),\n parseInt(parts[2], 10),\n parseInt(parts[3], 10)\n ];\n }\n },\n {\n re: /^(\\w{2})(\\w{2})(\\w{2})$/,\n process: function (parts) {\n return [\n parseInt(parts[1], 16),\n parseInt(parts[2], 16),\n parseInt(parts[3], 16)\n ];\n }\n },\n {\n re: /^(\\w{1})(\\w{1})(\\w{1})$/,\n process: function (parts) {\n return [\n parseInt(parts[1] + parts[1], 16),\n parseInt(parts[2] + parts[2], 16),\n parseInt(parts[3] + parts[3], 16)\n ];\n }\n }\n ];\n Color.namedColors = namedColors;\n kendo.deepExtend(kendo, {\n parseColor: parseColor,\n namedColors: namedColors,\n Color: Color\n });\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.slider', ['kendo.draganddrop'], f);\n}(function () {\n var __meta__ = {\n id: 'slider',\n name: 'Slider',\n category: 'web',\n description: 'The Slider widget provides a rich input for selecting values or ranges of values.',\n depends: ['draganddrop']\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, Draggable = kendo.ui.Draggable, outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight, extend = $.extend, format = kendo.format, parse = kendo.parseFloat, proxy = $.proxy, isArray = $.isArray, math = Math, support = kendo.support, pointers = support.pointers, msPointers = support.msPointers, CHANGE = 'change', SLIDE = 'slide', NS = '.slider', MOUSE_DOWN = 'touchstart' + NS + ' mousedown' + NS, TRACK_MOUSE_DOWN = pointers ? 'pointerdown' + NS : msPointers ? 'MSPointerDown' + NS : MOUSE_DOWN, MOUSE_UP = 'touchend' + NS + ' mouseup' + NS, TRACK_MOUSE_UP = pointers ? 'pointerup' : msPointers ? 'MSPointerUp' + NS : MOUSE_UP, MOVE_SELECTION = 'moveSelection', KEY_DOWN = 'keydown' + NS, CLICK = 'click' + NS, MOUSE_OVER = 'mouseover' + NS, FOCUS = 'focus' + NS, BLUR = 'blur' + NS, DRAG_HANDLE = '.k-draghandle', TRACK_SELECTOR = '.k-slider-track', TICK_SELECTOR = '.k-tick', STATE_SELECTED = 'k-state-selected', STATE_FOCUSED = 'k-state-focused', STATE_DEFAULT = 'k-state-default', STATE_DISABLED = 'k-state-disabled', DISABLED = 'disabled', UNDEFINED = 'undefined', TABINDEX = 'tabindex', getTouches = kendo.getTouches;\n var SliderBase = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n options = that.options;\n that._isHorizontal = options.orientation == 'horizontal';\n that._isRtl = that._isHorizontal && kendo.support.isRtl(element);\n that._position = that._isHorizontal ? 'left' : 'bottom';\n that._sizeFn = that._isHorizontal ? 'width' : 'height';\n that._outerSize = that._isHorizontal ? outerWidth : outerHeight;\n options.tooltip.format = options.tooltip.enabled ? options.tooltip.format || '{0}' : '{0}';\n if (options.smallStep <= 0) {\n throw new Error('Kendo UI Slider smallStep must be a positive number.');\n }\n that._createHtml();\n that.wrapper = that.element.closest('.k-slider');\n that._trackDiv = that.wrapper.find(TRACK_SELECTOR);\n that._setTrackDivWidth();\n that._maxSelection = that._trackDiv[that._sizeFn]();\n that._sliderItemsInit();\n that._reset();\n that._tabindex(that.wrapper.find(DRAG_HANDLE));\n that[options.enabled ? 'enable' : 'disable']();\n var rtlDirectionSign = kendo.support.isRtl(that.wrapper) ? -1 : 1;\n that._keyMap = {\n 37: step(-1 * rtlDirectionSign * options.smallStep),\n 40: step(-options.smallStep),\n 39: step(+1 * rtlDirectionSign * options.smallStep),\n 38: step(+options.smallStep),\n 35: setValue(options.max),\n 36: setValue(options.min),\n 33: step(+options.largeStep),\n 34: step(-options.largeStep)\n };\n kendo.notify(that);\n },\n events: [\n CHANGE,\n SLIDE\n ],\n options: {\n enabled: true,\n min: 0,\n max: 10,\n smallStep: 1,\n largeStep: 5,\n orientation: 'horizontal',\n tickPlacement: 'both',\n tooltip: {\n enabled: true,\n format: '{0}'\n }\n },\n _distance: function () {\n return round(this.options.max - this.options.min);\n },\n _resize: function () {\n this._setTrackDivWidth();\n this.wrapper.find('.k-slider-items').remove();\n this._maxSelection = this._trackDiv[this._sizeFn]();\n this._sliderItemsInit();\n this._refresh();\n if (this.options.enabled) {\n this.enable(true);\n }\n },\n _sliderItemsInit: function () {\n var that = this, options = that.options;\n var sizeBetweenTicks = that._maxSelection / ((options.max - options.min) / options.smallStep);\n var pixelWidths = that._calculateItemsWidth(math.floor(removeFraction(that._distance()) / removeFraction(options.smallStep)));\n if (options.tickPlacement != 'none' && sizeBetweenTicks >= 2) {\n $(this.element).parent().find('.k-slider-items').remove();\n that._trackDiv.before(createSliderItems(options, that._distance()));\n that._setItemsWidth(pixelWidths);\n that._setItemsTitle();\n }\n that._calculateSteps(pixelWidths);\n if (options.tickPlacement != 'none' && sizeBetweenTicks >= 2 && options.largeStep >= options.smallStep) {\n that._setItemsLargeTick();\n }\n },\n getSize: function () {\n return kendo.dimensions(this.wrapper);\n },\n _setTrackDivWidth: function () {\n var that = this, trackDivPosition = parseFloat(that._trackDiv.css(that._isRtl ? 'right' : that._position), 10) * 2;\n that._trackDiv[that._sizeFn](that.wrapper[that._sizeFn]() - 2 - trackDivPosition);\n },\n _setItemsWidth: function (pixelWidths) {\n var that = this, options = that.options, first = 0, last = pixelWidths.length - 1, items = that.wrapper.find(TICK_SELECTOR), i, paddingTop = 0, bordersWidth = 2, count = items.length, selection = 0;\n for (i = 0; i < count - 2; i++) {\n $(items[i + 1])[that._sizeFn](pixelWidths[i]);\n }\n if (that._isHorizontal) {\n $(items[first]).addClass('k-first')[that._sizeFn](pixelWidths[last - 1]);\n $(items[last]).addClass('k-last')[that._sizeFn](pixelWidths[last]);\n } else {\n $(items[last]).addClass('k-first')[that._sizeFn](pixelWidths[last]);\n $(items[first]).addClass('k-last')[that._sizeFn](pixelWidths[last - 1]);\n }\n if (that._distance() % options.smallStep !== 0 && !that._isHorizontal) {\n for (i = 0; i < pixelWidths.length; i++) {\n selection += pixelWidths[i];\n }\n paddingTop = that._maxSelection - selection;\n paddingTop += parseFloat(that._trackDiv.css(that._position), 10) + bordersWidth;\n that.wrapper.find('.k-slider-items').css('padding-top', paddingTop);\n }\n },\n _setItemsTitle: function () {\n var that = this, options = that.options, items = that.wrapper.find(TICK_SELECTOR), titleNumber = options.min, count = items.length, i = that._isHorizontal && !that._isRtl ? 0 : count - 1, limit = that._isHorizontal && !that._isRtl ? count : -1, increment = that._isHorizontal && !that._isRtl ? 1 : -1;\n for (; i - limit !== 0; i += increment) {\n $(items[i]).attr('title', format(options.tooltip.format, round(titleNumber)));\n titleNumber += options.smallStep;\n }\n },\n _setItemsLargeTick: function () {\n var that = this, options = that.options, items = that.wrapper.find(TICK_SELECTOR), i = 0, item, value;\n if (removeFraction(options.largeStep) % removeFraction(options.smallStep) === 0 || that._distance() / options.largeStep >= 3) {\n if (!that._isHorizontal && !that._isRtl) {\n items = $.makeArray(items).reverse();\n }\n for (i = 0; i < items.length; i++) {\n item = $(items[i]);\n value = that._values[i];\n var valueWithoutFraction = round(removeFraction(value - this.options.min));\n if (valueWithoutFraction % removeFraction(options.smallStep) === 0 && valueWithoutFraction % removeFraction(options.largeStep) === 0) {\n item.addClass('k-tick-large').html('<span class=\\'k-label\\'>' + item.attr('title') + '</span>');\n if (i !== 0 && i !== items.length - 1) {\n item.css('line-height', item[that._sizeFn]() + 'px');\n }\n }\n }\n }\n },\n _calculateItemsWidth: function (itemsCount) {\n var that = this, options = that.options, trackDivSize = parseFloat(that._trackDiv.css(that._sizeFn)) + 1, distance = that._distance(), preciseItemsCount = removeFraction(distance) / removeFraction(options.smallStep), pixelStep = trackDivSize / removeFraction(distance), itemWidth, pixelWidths, i;\n if (preciseItemsCount - itemsCount > 0) {\n trackDivSize -= removeFraction(distance) % removeFraction(options.smallStep) * pixelStep;\n }\n itemWidth = trackDivSize / itemsCount;\n pixelWidths = [];\n for (i = 0; i < itemsCount - 1; i++) {\n pixelWidths[i] = itemWidth;\n }\n pixelWidths[itemsCount - 1] = pixelWidths[itemsCount] = itemWidth / 2;\n return that._roundWidths(pixelWidths);\n },\n _roundWidths: function (pixelWidthsArray) {\n var balance = 0, count = pixelWidthsArray.length, i;\n for (i = 0; i < count; i++) {\n balance += pixelWidthsArray[i] - math.floor(pixelWidthsArray[i]);\n pixelWidthsArray[i] = math.floor(pixelWidthsArray[i]);\n }\n balance = math.round(balance);\n return this._addAdditionalSize(balance, pixelWidthsArray);\n },\n _addAdditionalSize: function (additionalSize, pixelWidthsArray) {\n if (additionalSize === 0) {\n return pixelWidthsArray;\n }\n var step = parseFloat(pixelWidthsArray.length - 1) / parseFloat(additionalSize == 1 ? additionalSize : additionalSize - 1), i;\n for (i = 0; i < additionalSize; i++) {\n pixelWidthsArray[parseInt(math.round(step * i), 10)] += 1;\n }\n return pixelWidthsArray;\n },\n _calculateSteps: function (pixelWidths) {\n var that = this, options = that.options, val = options.min, selection = 0, distance = that._distance(), itemsCount = math.ceil(removeFraction(distance) / removeFraction(options.smallStep)), i = 1, lastItem;\n itemsCount += removeFraction(distance) / removeFraction(options.smallStep) % 1 === 0 ? 1 : 0;\n pixelWidths.splice(0, 0, pixelWidths[itemsCount - 2] * 2);\n pixelWidths.splice(itemsCount - 1, 1, pixelWidths.pop() * 2);\n that._pixelSteps = [selection];\n that._values = [val];\n if (itemsCount === 0) {\n return;\n }\n while (i < itemsCount) {\n selection += (pixelWidths[i - 1] + pixelWidths[i]) / 2;\n that._pixelSteps[i] = selection;\n val += options.smallStep;\n that._values[i] = round(val);\n i++;\n }\n lastItem = removeFraction(distance) % removeFraction(options.smallStep) === 0 ? itemsCount - 1 : itemsCount;\n that._pixelSteps[lastItem] = that._maxSelection;\n that._values[lastItem] = options.max;\n if (that._isRtl) {\n that._pixelSteps.reverse();\n that._values.reverse();\n }\n },\n _getValueFromPosition: function (mousePosition, dragableArea) {\n var that = this, options = that.options, step = math.max(options.smallStep * (that._maxSelection / that._distance()), 0), position = 0, halfStep = step / 2, i;\n if (that._isHorizontal) {\n position = mousePosition - dragableArea.startPoint;\n if (that._isRtl) {\n position = that._maxSelection - position;\n }\n } else {\n position = dragableArea.startPoint - mousePosition;\n }\n if (that._maxSelection - (parseInt(that._maxSelection % step, 10) - 3) / 2 < position) {\n return options.max;\n }\n for (i = 0; i < that._pixelSteps.length; i++) {\n if (math.abs(that._pixelSteps[i] - position) - 1 <= halfStep) {\n return round(that._values[i]);\n }\n }\n },\n _getFormattedValue: function (val, drag) {\n var that = this, html = '', tooltip = that.options.tooltip, tooltipTemplate, selectionStart, selectionEnd;\n if (isArray(val)) {\n selectionStart = val[0];\n selectionEnd = val[1];\n } else if (drag && drag.type) {\n selectionStart = drag.selectionStart;\n selectionEnd = drag.selectionEnd;\n }\n if (drag) {\n tooltipTemplate = drag.tooltipTemplate;\n }\n if (!tooltipTemplate && tooltip.template) {\n tooltipTemplate = kendo.template(tooltip.template);\n }\n if (isArray(val) || drag && drag.type) {\n if (tooltipTemplate) {\n html = tooltipTemplate({\n selectionStart: selectionStart,\n selectionEnd: selectionEnd\n });\n } else {\n selectionStart = format(tooltip.format, selectionStart);\n selectionEnd = format(tooltip.format, selectionEnd);\n html = selectionStart + ' - ' + selectionEnd;\n }\n } else {\n if (drag) {\n drag.val = val;\n }\n if (tooltipTemplate) {\n html = tooltipTemplate({ value: val });\n } else {\n html = format(tooltip.format, val);\n }\n }\n return html;\n },\n _getDraggableArea: function () {\n var that = this, offset = kendo.getOffset(that._trackDiv);\n return {\n startPoint: that._isHorizontal ? offset.left : offset.top + that._maxSelection,\n endPoint: that._isHorizontal ? offset.left + that._maxSelection : offset.top\n };\n },\n _createHtml: function () {\n var that = this, element = that.element, options = that.options, inputs = element.find('input');\n if (inputs.length == 2) {\n inputs.eq(0).prop('value', formatValue(options.selectionStart));\n inputs.eq(1).prop('value', formatValue(options.selectionEnd));\n } else {\n element.prop('value', formatValue(options.value));\n }\n element.wrap(createWrapper(options, element, that._isHorizontal)).hide();\n if (options.showButtons) {\n element.before(createButton(options, 'increase', that._isHorizontal, that._isRtl)).before(createButton(options, 'decrease', that._isHorizontal, that._isRtl));\n }\n element.before(createTrack(options, element));\n },\n _focus: function (e) {\n var that = this, target = e.target, val = that.value(), drag = that._drag;\n if (!drag) {\n if (target == that.wrapper.find(DRAG_HANDLE).eq(0)[0]) {\n drag = that._firstHandleDrag;\n that._activeHandle = 0;\n } else {\n drag = that._lastHandleDrag;\n that._activeHandle = 1;\n }\n val = val[that._activeHandle];\n }\n $(target).addClass(STATE_FOCUSED + ' ' + STATE_SELECTED);\n if (drag) {\n that._activeHandleDrag = drag;\n drag.selectionStart = that.options.selectionStart;\n drag.selectionEnd = that.options.selectionEnd;\n drag._updateTooltip(val);\n }\n },\n _focusWithMouse: function (target) {\n target = $(target);\n var that = this, idx = target.is(DRAG_HANDLE) ? target.index() : 0;\n window.setTimeout(function () {\n that.wrapper.find(DRAG_HANDLE)[idx == 2 ? 1 : 0].focus();\n }, 1);\n that._setTooltipTimeout();\n },\n _blur: function (e) {\n var that = this, drag = that._activeHandleDrag;\n $(e.target).removeClass(STATE_FOCUSED + ' ' + STATE_SELECTED);\n if (drag) {\n drag._removeTooltip();\n delete that._activeHandleDrag;\n delete that._activeHandle;\n }\n },\n _setTooltipTimeout: function () {\n var that = this;\n that._tooltipTimeout = window.setTimeout(function () {\n var drag = that._drag || that._activeHandleDrag;\n if (drag) {\n drag._removeTooltip();\n }\n }, 300);\n },\n _clearTooltipTimeout: function () {\n var that = this;\n window.clearTimeout(this._tooltipTimeout);\n var drag = that._drag || that._activeHandleDrag;\n if (drag && drag.tooltipDiv) {\n drag.tooltipDiv.stop(true, false).css('opacity', 1);\n }\n },\n _reset: function () {\n var that = this, element = that.element, formId = element.attr('form'), form = formId ? $('#' + formId) : element.closest('form');\n if (form[0]) {\n that._form = form.on('reset', proxy(that._formResetHandler, that));\n }\n },\n min: function (value) {\n if (!value) {\n return this.options.min;\n }\n this.setOptions({ 'min': value });\n },\n max: function (value) {\n if (!value) {\n return this.options.max;\n }\n this.setOptions({ 'max': value });\n },\n setOptions: function (options) {\n Widget.fn.setOptions.call(this, options);\n this._sliderItemsInit();\n this._refresh();\n },\n destroy: function () {\n if (this._form) {\n this._form.off('reset', this._formResetHandler);\n }\n Widget.fn.destroy.call(this);\n }\n });\n function createWrapper(options, element, isHorizontal) {\n var orientationCssClass = isHorizontal ? ' k-slider-horizontal' : ' k-slider-vertical', style = options.style ? options.style : element.attr('style'), cssClasses = element.attr('class') ? ' ' + element.attr('class') : '', tickPlacementCssClass = '';\n if (options.tickPlacement == 'bottomRight') {\n tickPlacementCssClass = ' k-slider-bottomright';\n } else if (options.tickPlacement == 'topLeft') {\n tickPlacementCssClass = ' k-slider-topleft';\n }\n style = style ? ' style=\\'' + style + '\\'' : '';\n return '<div class=\\'k-widget k-slider' + orientationCssClass + cssClasses + '\\'' + style + '>' + '<div class=\\'k-slider-wrap' + (options.showButtons ? ' k-slider-buttons' : '') + tickPlacementCssClass + '\\'></div></div>';\n }\n function createButton(options, type, isHorizontal, isRtl) {\n var buttonCssClass = '';\n if (isHorizontal) {\n if (!isRtl && type == 'increase' || isRtl && type != 'increase') {\n buttonCssClass = 'k-i-arrow-60-right';\n } else {\n buttonCssClass = 'k-i-arrow-60-left';\n }\n } else {\n if (type == 'increase') {\n buttonCssClass = 'k-i-arrow-60-up';\n } else {\n buttonCssClass = 'k-i-arrow-60-down';\n }\n }\n return '<a class=\\'k-button k-button-' + type + '\\' ' + 'title=\\'' + options[type + 'ButtonTitle'] + '\\' ' + 'aria-label=\\'' + options[type + 'ButtonTitle'] + '\\'>' + '<span class=\\'k-icon ' + buttonCssClass + '\\'></span></a>';\n }\n function createSliderItems(options, distance) {\n var result = '<ul class=\\'k-reset k-slider-items\\'>', count = math.floor(round(distance / options.smallStep)) + 1, i;\n for (i = 0; i < count; i++) {\n result += '<li class=\\'k-tick\\' role=\\'presentation\\'> </li>';\n }\n result += '</ul>';\n return result;\n }\n function createTrack(options, element) {\n var dragHandleCount = element.is('input') ? 1 : 2, firstDragHandleTitle = dragHandleCount == 2 ? options.leftDragHandleTitle : options.dragHandleTitle;\n return '<div class=\\'k-slider-track\\'><div class=\\'k-slider-selection\\'><!-- --></div>' + '<a href=\\'#\\' class=\\'k-draghandle\\' title=\\'' + firstDragHandleTitle + '\\' role=\\'slider\\' aria-valuemin=\\'' + options.min + '\\' aria-valuemax=\\'' + options.max + '\\' aria-valuenow=\\'' + (dragHandleCount > 1 ? options.selectionStart || options.min : options.value || options.min) + '\\'></a>' + (dragHandleCount > 1 ? '<a href=\\'#\\' class=\\'k-draghandle\\' title=\\'' + options.rightDragHandleTitle + '\\'role=\\'slider\\' aria-valuemin=\\'' + options.min + '\\' aria-valuemax=\\'' + options.max + '\\' aria-valuenow=\\'' + (options.selectionEnd || options.max) + '\\'></a>' : '') + '</div>';\n }\n function step(stepValue) {\n return function (value) {\n return value + stepValue;\n };\n }\n function setValue(value) {\n return function () {\n return value;\n };\n }\n function formatValue(value) {\n return (value + '').replace('.', kendo.cultures.current.numberFormat['.']);\n }\n function calculatePrecision(value) {\n var number = value.toString();\n var precision = 0;\n number = number.split('.');\n if (number[1]) {\n precision = number[1].length;\n }\n precision = precision > 10 ? 10 : precision;\n return precision;\n }\n function round(value) {\n var precision, power;\n value = parseFloat(value, 10);\n precision = calculatePrecision(value);\n power = math.pow(10, precision || 0);\n return math.round(value * power) / power;\n }\n function parseAttr(element, name) {\n var value = parse(element.getAttribute(name));\n if (value === null) {\n value = undefined;\n }\n return value;\n }\n function defined(value) {\n return typeof value !== UNDEFINED;\n }\n function removeFraction(value) {\n return value * 10000;\n }\n var Slider = SliderBase.extend({\n init: function (element, options) {\n var that = this, dragHandle;\n element.type = 'text';\n options = extend({}, {\n value: parseAttr(element, 'value'),\n min: parseAttr(element, 'min'),\n max: parseAttr(element, 'max'),\n smallStep: parseAttr(element, 'step')\n }, options);\n element = $(element);\n if (options && options.enabled === undefined) {\n options.enabled = !element.is('[disabled]');\n }\n SliderBase.fn.init.call(that, element, options);\n options = that.options;\n if (!defined(options.value) || options.value === null) {\n options.value = options.min;\n element.prop('value', formatValue(options.min));\n }\n options.value = math.max(math.min(options.value, options.max), options.min);\n dragHandle = that.wrapper.find(DRAG_HANDLE);\n this._selection = new Slider.Selection(dragHandle, that, options);\n that._drag = new Slider.Drag(dragHandle, '', that, options);\n },\n options: {\n name: 'Slider',\n showButtons: true,\n increaseButtonTitle: 'Increase',\n decreaseButtonTitle: 'Decrease',\n dragHandleTitle: 'drag',\n tooltip: { format: '{0:#,#.##}' },\n value: null\n },\n enable: function (enable) {\n var that = this, options = that.options, clickHandler, move;\n that.disable();\n if (enable === false) {\n return;\n }\n that.wrapper.removeClass(STATE_DISABLED).addClass(STATE_DEFAULT);\n that.wrapper.find('input').removeAttr(DISABLED);\n clickHandler = function (e) {\n var touch = getTouches(e)[0];\n if (!touch) {\n return;\n }\n var mousePosition = that._isHorizontal ? touch.location.pageX : touch.location.pageY, dragableArea = that._getDraggableArea(), target = $(e.target);\n if (target.hasClass('k-draghandle')) {\n target.addClass(STATE_FOCUSED + ' ' + STATE_SELECTED);\n return;\n }\n that._update(that._getValueFromPosition(mousePosition, dragableArea));\n that._focusWithMouse(e.target);\n that._drag.dragstart(e);\n e.preventDefault();\n };\n that.wrapper.find(TICK_SELECTOR + ', ' + TRACK_SELECTOR).on(TRACK_MOUSE_DOWN, clickHandler).end().on(TRACK_MOUSE_DOWN, function () {\n $(document.documentElement).one('selectstart', kendo.preventDefault);\n }).on(TRACK_MOUSE_UP, function () {\n that._drag._end();\n });\n that.wrapper.find(DRAG_HANDLE).attr(TABINDEX, 0).on(MOUSE_UP, function () {\n that._setTooltipTimeout();\n }).on(CLICK, function (e) {\n that._focusWithMouse(e.target);\n e.preventDefault();\n }).on(FOCUS, proxy(that._focus, that)).on(BLUR, proxy(that._blur, that));\n move = proxy(function (sign) {\n var newVal = that._nextValueByIndex(that._valueIndex + sign * 1);\n that._setValueInRange(newVal);\n that._drag._updateTooltip(newVal);\n }, that);\n if (options.showButtons) {\n var mouseDownHandler = proxy(function (e, sign) {\n this._clearTooltipTimeout();\n if (e.which === 1 || support.touch && e.which === 0) {\n move(sign);\n this.timeout = setTimeout(proxy(function () {\n this.timer = setInterval(function () {\n move(sign);\n }, 60);\n }, this), 200);\n }\n }, that);\n that.wrapper.find('.k-button').on(MOUSE_UP, proxy(function (e) {\n this._clearTimer();\n that._focusWithMouse(e.target);\n }, that)).on(MOUSE_OVER, function (e) {\n $(e.currentTarget).addClass('k-state-hover');\n }).on('mouseout' + NS, proxy(function (e) {\n $(e.currentTarget).removeClass('k-state-hover');\n this._clearTimer();\n }, that)).eq(0).on(MOUSE_DOWN, proxy(function (e) {\n mouseDownHandler(e, 1);\n }, that)).click(false).end().eq(1).on(MOUSE_DOWN, proxy(function (e) {\n mouseDownHandler(e, -1);\n }, that)).click(kendo.preventDefault);\n }\n that.wrapper.find(DRAG_HANDLE).off(KEY_DOWN, false).on(KEY_DOWN, proxy(this._keydown, that));\n options.enabled = true;\n },\n disable: function () {\n var that = this;\n that.wrapper.removeClass(STATE_DEFAULT).addClass(STATE_DISABLED);\n $(that.element).prop(DISABLED, DISABLED);\n that.wrapper.find('.k-button').off(MOUSE_DOWN).on(MOUSE_DOWN, function (e) {\n e.preventDefault();\n $(this).addClass('k-state-active');\n }).off(MOUSE_UP).on(MOUSE_UP, function (e) {\n e.preventDefault();\n $(this).removeClass('k-state-active');\n }).off('mouseleave' + NS).on('mouseleave' + NS, kendo.preventDefault).off(MOUSE_OVER).on(MOUSE_OVER, kendo.preventDefault);\n that.wrapper.find(TICK_SELECTOR + ', ' + TRACK_SELECTOR).off(TRACK_MOUSE_DOWN).off(TRACK_MOUSE_UP);\n that.wrapper.find(DRAG_HANDLE).attr(TABINDEX, -1).off(MOUSE_UP).off(KEY_DOWN).off(CLICK).off(FOCUS).off(BLUR);\n that.options.enabled = false;\n },\n _update: function (val) {\n var that = this, change = that.value() != val;\n that.value(val);\n if (change) {\n that.trigger(CHANGE, { value: that.options.value });\n }\n },\n value: function (value) {\n var that = this, options = that.options;\n value = round(value);\n if (isNaN(value)) {\n return options.value;\n }\n if (value >= options.min && value <= options.max) {\n if (options.value != value) {\n that.element.prop('value', formatValue(value));\n options.value = value;\n that._refreshAriaAttr(value);\n that._refresh();\n }\n }\n },\n _refresh: function () {\n this.trigger(MOVE_SELECTION, { value: this.options.value });\n },\n _refreshAriaAttr: function (value) {\n var that = this, drag = that._drag, formattedValue;\n if (drag && drag._tooltipDiv) {\n formattedValue = drag._tooltipDiv.text();\n } else {\n formattedValue = that._getFormattedValue(value, null);\n }\n this.wrapper.find(DRAG_HANDLE).attr('aria-valuenow', value).attr('aria-valuetext', formattedValue);\n },\n _clearTimer: function () {\n clearTimeout(this.timeout);\n clearInterval(this.timer);\n },\n _keydown: function (e) {\n var that = this;\n if (e.keyCode in that._keyMap) {\n that._clearTooltipTimeout();\n that._setValueInRange(that._keyMap[e.keyCode](that.options.value));\n that._drag._updateTooltip(that.value());\n e.preventDefault();\n }\n },\n _setValueInRange: function (val) {\n var that = this, options = that.options;\n val = round(val);\n if (isNaN(val)) {\n that._update(options.min);\n return;\n }\n val = math.max(math.min(val, options.max), options.min);\n that._update(val);\n },\n _nextValueByIndex: function (index) {\n var count = this._values.length;\n if (this._isRtl) {\n index = count - 1 - index;\n }\n return this._values[math.max(0, math.min(index, count - 1))];\n },\n _formResetHandler: function () {\n var that = this, min = that.options.min;\n setTimeout(function () {\n var value = that.element[0].value;\n that.value(value === '' || isNaN(value) ? min : value);\n });\n },\n destroy: function () {\n var that = this;\n SliderBase.fn.destroy.call(that);\n that.wrapper.off(NS).find('.k-button').off(NS).end().find(DRAG_HANDLE).off(NS).end().find(TICK_SELECTOR + ', ' + TRACK_SELECTOR).off(NS).end();\n that._drag.draggable.destroy();\n that._drag._removeTooltip(true);\n }\n });\n Slider.Selection = function (dragHandle, that, options) {\n function moveSelection(val) {\n var selectionValue = val - options.min, index = that._valueIndex = math.ceil(round(selectionValue / options.smallStep)), selection = parseInt(that._pixelSteps[index], 10), selectionDiv = that._trackDiv.find('.k-slider-selection'), halfDragHanndle = parseInt(that._outerSize(dragHandle) / 2, 10), rtlCorrection = that._isRtl ? 2 : 0;\n selectionDiv[that._sizeFn](that._isRtl ? that._maxSelection - selection : selection);\n dragHandle.css(that._position, selection - halfDragHanndle - rtlCorrection);\n }\n moveSelection(options.value);\n that.bind([\n SLIDE,\n MOVE_SELECTION\n ], function (e) {\n moveSelection(parseFloat(e.value, 10));\n });\n that.bind(CHANGE, function (e) {\n moveSelection(parseFloat(e.sender.value(), 10));\n });\n };\n Slider.Drag = function (element, type, owner, options) {\n var that = this;\n that.owner = owner;\n that.options = options;\n that.element = element;\n that.type = type;\n that.draggable = new Draggable(element, {\n distance: 0,\n dragstart: proxy(that._dragstart, that),\n drag: proxy(that.drag, that),\n dragend: proxy(that.dragend, that),\n dragcancel: proxy(that.dragcancel, that)\n });\n element.click(false);\n element.on('dragstart', function (e) {\n e.preventDefault();\n });\n };\n Slider.Drag.prototype = {\n dragstart: function (e) {\n this.owner._activeDragHandle = this;\n this.draggable.userEvents.cancel();\n this._dragstart(e);\n this.dragend();\n },\n _dragstart: function (e) {\n var that = this, owner = that.owner, options = that.options;\n if (!options.enabled) {\n e.preventDefault();\n return;\n }\n this.owner._activeDragHandle = this;\n owner.element.off(MOUSE_OVER);\n owner.wrapper.find('.' + STATE_FOCUSED).removeClass(STATE_FOCUSED + ' ' + STATE_SELECTED);\n that.element.addClass(STATE_FOCUSED + ' ' + STATE_SELECTED);\n $(document.documentElement).css('cursor', 'pointer');\n that.dragableArea = owner._getDraggableArea();\n that.step = math.max(options.smallStep * (owner._maxSelection / owner._distance()), 0);\n if (that.type) {\n that.selectionStart = options.selectionStart;\n that.selectionEnd = options.selectionEnd;\n owner._setZIndex(that.type);\n } else {\n that.oldVal = that.val = options.value;\n }\n that._removeTooltip(true);\n that._createTooltip();\n },\n _createTooltip: function () {\n var that = this, owner = that.owner, tooltip = that.options.tooltip, html = '', wnd = $(window), tooltipTemplate, colloutCssClass;\n if (!tooltip.enabled) {\n return;\n }\n if (tooltip.template) {\n tooltipTemplate = that.tooltipTemplate = kendo.template(tooltip.template);\n }\n $('.k-slider-tooltip').remove();\n that.tooltipDiv = $('<div class=\\'k-tooltip k-slider-tooltip\\'><!-- --></div>').appendTo(document.body);\n html = owner._getFormattedValue(that.val || owner.value(), that);\n if (!that.type) {\n colloutCssClass = 'k-callout-' + (owner._isHorizontal ? 's' : 'e');\n that.tooltipInnerDiv = '<div class=\\'k-callout ' + colloutCssClass + '\\'><!-- --></div>';\n html += that.tooltipInnerDiv;\n }\n that.tooltipDiv.html(html);\n that._scrollOffset = {\n top: wnd.scrollTop(),\n left: kendo.scrollLeft(wnd)\n };\n that.moveTooltip();\n },\n drag: function (e) {\n var that = this, owner = that.owner, x = e.x.location, y = e.y.location, startPoint = that.dragableArea.startPoint, endPoint = that.dragableArea.endPoint, slideParams;\n e.preventDefault();\n if (owner._isHorizontal) {\n if (owner._isRtl) {\n that.val = that.constrainValue(x, startPoint, endPoint, x < endPoint);\n } else {\n that.val = that.constrainValue(x, startPoint, endPoint, x >= endPoint);\n }\n } else {\n that.val = that.constrainValue(y, endPoint, startPoint, y <= endPoint);\n }\n if (that.oldVal != that.val) {\n that.oldVal = that.val;\n if (that.type) {\n if (that.type == 'firstHandle') {\n if (that.val < that.selectionEnd) {\n that.selectionStart = that.val;\n } else {\n that.selectionStart = that.selectionEnd = that.val;\n }\n } else {\n if (that.val > that.selectionStart) {\n that.selectionEnd = that.val;\n } else {\n that.selectionStart = that.selectionEnd = that.val;\n }\n }\n slideParams = {\n values: [\n that.selectionStart,\n that.selectionEnd\n ],\n value: [\n that.selectionStart,\n that.selectionEnd\n ]\n };\n } else {\n slideParams = { value: that.val };\n }\n owner.trigger(SLIDE, slideParams);\n }\n that._updateTooltip(that.val);\n },\n _updateTooltip: function (val) {\n var that = this, options = that.options, tooltip = options.tooltip, html = '';\n if (!tooltip.enabled) {\n return;\n }\n if (!that.tooltipDiv) {\n that._createTooltip();\n }\n html = that.owner._getFormattedValue(round(val), that);\n if (!that.type) {\n html += that.tooltipInnerDiv;\n }\n that.tooltipDiv.html(html);\n that.moveTooltip();\n },\n dragcancel: function () {\n this.owner._refresh();\n $(document.documentElement).css('cursor', '');\n return this._end();\n },\n dragend: function () {\n var that = this, owner = that.owner;\n $(document.documentElement).css('cursor', '');\n if (that.type) {\n owner._update(that.selectionStart, that.selectionEnd);\n } else {\n owner._update(that.val);\n that.draggable.userEvents._disposeAll();\n }\n that.draggable.userEvents.cancel();\n return that._end();\n },\n _end: function () {\n var that = this, owner = that.owner;\n owner._focusWithMouse(that.element);\n owner.element.on(MOUSE_OVER);\n return false;\n },\n _removeTooltip: function (noAnimation) {\n var that = this, owner = that.owner;\n if (that.tooltipDiv && owner.options.tooltip.enabled && owner.options.enabled) {\n if (noAnimation) {\n that.tooltipDiv.remove();\n that.tooltipDiv = null;\n } else {\n that.tooltipDiv.fadeOut('slow', function () {\n $(this).remove();\n that.tooltipDiv = null;\n });\n }\n }\n },\n moveTooltip: function () {\n var that = this, owner = that.owner, top = 0, left = 0, element = that.element, offset = kendo.getOffset(element), margin = 8, viewport = $(window), callout = that.tooltipDiv.find('.k-callout'), width = outerWidth(that.tooltipDiv), height = outerHeight(that.tooltipDiv), dragHandles, sdhOffset, diff, anchorSize;\n if (that.type) {\n dragHandles = owner.wrapper.find(DRAG_HANDLE);\n offset = kendo.getOffset(dragHandles.eq(0));\n sdhOffset = kendo.getOffset(dragHandles.eq(1));\n if (owner._isHorizontal) {\n top = sdhOffset.top;\n left = offset.left + (sdhOffset.left - offset.left) / 2;\n } else {\n top = offset.top + (sdhOffset.top - offset.top) / 2;\n left = sdhOffset.left;\n }\n anchorSize = outerWidth(dragHandles.eq(0)) + 2 * margin;\n } else {\n top = offset.top;\n left = offset.left;\n anchorSize = outerWidth(element) + 2 * margin;\n }\n if (owner._isHorizontal) {\n left -= parseInt((width - owner._outerSize(element)) / 2, 10);\n top -= height + margin + (callout.length ? callout.height() : 0);\n } else {\n top -= parseInt((height - owner._outerSize(element)) / 2, 10);\n left -= width + margin + (callout.length ? callout.width() : 0);\n }\n if (owner._isHorizontal) {\n diff = that._flip(top, height, anchorSize, outerHeight(viewport) + that._scrollOffset.top);\n top += diff;\n left += that._fit(left, width, outerWidth(viewport) + that._scrollOffset.left);\n } else {\n diff = that._flip(left, width, anchorSize, outerWidth(viewport) + that._scrollOffset.left);\n top += that._fit(top, height, outerHeight(viewport) + that._scrollOffset.top);\n left += diff;\n }\n if (diff > 0 && callout) {\n callout.removeClass();\n callout.addClass('k-callout k-callout-' + (owner._isHorizontal ? 'n' : 'w'));\n }\n that.tooltipDiv.css({\n top: top,\n left: left\n });\n },\n _fit: function (position, size, viewPortEnd) {\n var output = 0;\n if (position + size > viewPortEnd) {\n output = viewPortEnd - (position + size);\n }\n if (position < 0) {\n output = -position;\n }\n return output;\n },\n _flip: function (offset, size, anchorSize, viewPortEnd) {\n var output = 0;\n if (offset + size > viewPortEnd) {\n output += -(anchorSize + size);\n }\n if (offset + output < 0) {\n output += anchorSize + size;\n }\n return output;\n },\n constrainValue: function (position, min, max, maxOverflow) {\n var that = this, val = 0;\n if (min < position && position < max) {\n val = that.owner._getValueFromPosition(position, that.dragableArea);\n } else {\n if (maxOverflow) {\n val = that.options.max;\n } else {\n val = that.options.min;\n }\n }\n return val;\n }\n };\n kendo.ui.plugin(Slider);\n var RangeSlider = SliderBase.extend({\n init: function (element, options) {\n var that = this, inputs = $(element).find('input'), firstInput = inputs.eq(0)[0], secondInput = inputs.eq(1)[0];\n firstInput.type = 'text';\n secondInput.type = 'text';\n if (options && options.showButtons) {\n if (window.console) {\n window.console.warn('showbuttons option is not supported for the range slider, ignoring');\n }\n options.showButtons = false;\n }\n options = extend({}, {\n selectionStart: parseAttr(firstInput, 'value'),\n min: parseAttr(firstInput, 'min'),\n max: parseAttr(firstInput, 'max'),\n smallStep: parseAttr(firstInput, 'step')\n }, {\n selectionEnd: parseAttr(secondInput, 'value'),\n min: parseAttr(secondInput, 'min'),\n max: parseAttr(secondInput, 'max'),\n smallStep: parseAttr(secondInput, 'step')\n }, options);\n if (options && options.enabled === undefined) {\n options.enabled = !inputs.is('[disabled]');\n }\n SliderBase.fn.init.call(that, element, options);\n options = that.options;\n if (!defined(options.selectionStart) || options.selectionStart === null) {\n options.selectionStart = options.min;\n inputs.eq(0).prop('value', formatValue(options.min));\n }\n if (!defined(options.selectionEnd) || options.selectionEnd === null) {\n options.selectionEnd = options.max;\n inputs.eq(1).prop('value', formatValue(options.max));\n }\n var dragHandles = that.wrapper.find(DRAG_HANDLE);\n this._selection = new RangeSlider.Selection(dragHandles, that, options);\n that._firstHandleDrag = new Slider.Drag(dragHandles.eq(0), 'firstHandle', that, options);\n that._lastHandleDrag = new Slider.Drag(dragHandles.eq(1), 'lastHandle', that, options);\n },\n options: {\n name: 'RangeSlider',\n leftDragHandleTitle: 'drag',\n rightDragHandleTitle: 'drag',\n tooltip: { format: '{0:#,#.##}' },\n selectionStart: null,\n selectionEnd: null\n },\n enable: function (enable) {\n var that = this, options = that.options, clickHandler;\n that.disable();\n if (enable === false) {\n return;\n }\n that.wrapper.removeClass(STATE_DISABLED).addClass(STATE_DEFAULT);\n that.wrapper.find('input').removeAttr(DISABLED);\n clickHandler = function (e) {\n var touch = getTouches(e)[0];\n if (!touch) {\n return;\n }\n var mousePosition = that._isHorizontal ? touch.location.pageX : touch.location.pageY, dragableArea = that._getDraggableArea(), val = that._getValueFromPosition(mousePosition, dragableArea), target = $(e.target), from, to, drag;\n if (target.hasClass('k-draghandle')) {\n that.wrapper.find('.' + STATE_FOCUSED).removeClass(STATE_FOCUSED + ' ' + STATE_SELECTED);\n target.addClass(STATE_FOCUSED + ' ' + STATE_SELECTED);\n return;\n }\n if (val < options.selectionStart) {\n from = val;\n to = options.selectionEnd;\n drag = that._firstHandleDrag;\n } else if (val > that.selectionEnd) {\n from = options.selectionStart;\n to = val;\n drag = that._lastHandleDrag;\n } else {\n if (val - options.selectionStart <= options.selectionEnd - val) {\n from = val;\n to = options.selectionEnd;\n drag = that._firstHandleDrag;\n } else {\n from = options.selectionStart;\n to = val;\n drag = that._lastHandleDrag;\n }\n }\n drag.dragstart(e);\n that._setValueInRange(from, to);\n that._focusWithMouse(drag.element);\n };\n that.wrapper.find(TICK_SELECTOR + ', ' + TRACK_SELECTOR).on(TRACK_MOUSE_DOWN, clickHandler).end().on(TRACK_MOUSE_DOWN, function () {\n $(document.documentElement).one('selectstart', kendo.preventDefault);\n }).on(TRACK_MOUSE_UP, function () {\n if (that._activeDragHandle) {\n that._activeDragHandle._end();\n }\n });\n that.wrapper.find(DRAG_HANDLE).attr(TABINDEX, 0).on(MOUSE_UP, function () {\n that._setTooltipTimeout();\n }).on(CLICK, function (e) {\n that._focusWithMouse(e.target);\n e.preventDefault();\n }).on(FOCUS, proxy(that._focus, that)).on(BLUR, proxy(that._blur, that));\n that.wrapper.find(DRAG_HANDLE).off(KEY_DOWN, kendo.preventDefault).eq(0).on(KEY_DOWN, proxy(function (e) {\n this._keydown(e, 'firstHandle');\n }, that)).end().eq(1).on(KEY_DOWN, proxy(function (e) {\n this._keydown(e, 'lastHandle');\n }, that));\n that.options.enabled = true;\n },\n disable: function () {\n var that = this;\n that.wrapper.removeClass(STATE_DEFAULT).addClass(STATE_DISABLED);\n that.wrapper.find('input').prop(DISABLED, DISABLED);\n that.wrapper.find(TICK_SELECTOR + ', ' + TRACK_SELECTOR).off(TRACK_MOUSE_DOWN).off(TRACK_MOUSE_UP);\n that.wrapper.find(DRAG_HANDLE).attr(TABINDEX, -1).off(MOUSE_UP).off(KEY_DOWN).off(CLICK).off(FOCUS).off(BLUR);\n that.options.enabled = false;\n },\n _keydown: function (e, handle) {\n var that = this, selectionStartValue = that.options.selectionStart, selectionEndValue = that.options.selectionEnd, dragSelectionStart, dragSelectionEnd, activeHandleDrag;\n if (e.keyCode in that._keyMap) {\n that._clearTooltipTimeout();\n if (handle == 'firstHandle') {\n activeHandleDrag = that._activeHandleDrag = that._firstHandleDrag;\n selectionStartValue = that._keyMap[e.keyCode](selectionStartValue);\n if (selectionStartValue > selectionEndValue) {\n selectionEndValue = selectionStartValue;\n }\n } else {\n activeHandleDrag = that._activeHandleDrag = that._lastHandleDrag;\n selectionEndValue = that._keyMap[e.keyCode](selectionEndValue);\n if (selectionStartValue > selectionEndValue) {\n selectionStartValue = selectionEndValue;\n }\n }\n that._setValueInRange(round(selectionStartValue), round(selectionEndValue));\n dragSelectionStart = Math.max(selectionStartValue, that.options.selectionStart);\n dragSelectionEnd = Math.min(selectionEndValue, that.options.selectionEnd);\n activeHandleDrag.selectionEnd = Math.max(dragSelectionEnd, that.options.selectionStart);\n activeHandleDrag.selectionStart = Math.min(dragSelectionStart, that.options.selectionEnd);\n activeHandleDrag._updateTooltip(that.value()[that._activeHandle]);\n e.preventDefault();\n }\n },\n _update: function (selectionStart, selectionEnd) {\n var that = this, values = that.value();\n var change = values[0] != selectionStart || values[1] != selectionEnd;\n that.value([\n selectionStart,\n selectionEnd\n ]);\n if (change) {\n that.trigger(CHANGE, {\n values: [\n selectionStart,\n selectionEnd\n ],\n value: [\n selectionStart,\n selectionEnd\n ]\n });\n }\n },\n value: function (value) {\n if (value && value.length) {\n return this._value(value[0], value[1]);\n } else {\n return this._value();\n }\n },\n _value: function (start, end) {\n var that = this, options = that.options, selectionStart = options.selectionStart, selectionEnd = options.selectionEnd;\n if (isNaN(start) && isNaN(end)) {\n return [\n selectionStart,\n selectionEnd\n ];\n } else {\n start = round(start);\n end = round(end);\n }\n if (start >= options.min && start <= options.max && end >= options.min && end <= options.max && start <= end) {\n if (selectionStart != start || selectionEnd != end) {\n that.element.find('input').eq(0).prop('value', formatValue(start)).end().eq(1).prop('value', formatValue(end));\n options.selectionStart = start;\n options.selectionEnd = end;\n that._refresh();\n that._refreshAriaAttr(start, end);\n }\n }\n },\n values: function (start, end) {\n if (isArray(start)) {\n return this._value(start[0], start[1]);\n } else {\n return this._value(start, end);\n }\n },\n _refresh: function () {\n var that = this, options = that.options;\n that.trigger(MOVE_SELECTION, {\n values: [\n options.selectionStart,\n options.selectionEnd\n ],\n value: [\n options.selectionStart,\n options.selectionEnd\n ]\n });\n if (options.selectionStart == options.max && options.selectionEnd == options.max) {\n that._setZIndex('firstHandle');\n }\n },\n _refreshAriaAttr: function (start, end) {\n var that = this, dragHandles = that.wrapper.find(DRAG_HANDLE), drag = that._activeHandleDrag, formattedValue;\n formattedValue = that._getFormattedValue([\n start,\n end\n ], drag);\n dragHandles.eq(0).attr('aria-valuenow', start);\n dragHandles.eq(1).attr('aria-valuenow', end);\n dragHandles.attr('aria-valuetext', formattedValue);\n },\n _setValueInRange: function (selectionStart, selectionEnd) {\n var options = this.options;\n selectionStart = math.max(math.min(selectionStart, options.max), options.min);\n selectionEnd = math.max(math.min(selectionEnd, options.max), options.min);\n if (selectionStart == options.max && selectionEnd == options.max) {\n this._setZIndex('firstHandle');\n }\n this._update(math.min(selectionStart, selectionEnd), math.max(selectionStart, selectionEnd));\n },\n _setZIndex: function (type) {\n this.wrapper.find(DRAG_HANDLE).each(function (index) {\n $(this).css('z-index', type == 'firstHandle' ? 1 - index : index);\n });\n },\n _formResetHandler: function () {\n var that = this, options = that.options;\n setTimeout(function () {\n var inputs = that.element.find('input');\n var start = inputs[0].value;\n var end = inputs[1].value;\n that.values(start === '' || isNaN(start) ? options.min : start, end === '' || isNaN(end) ? options.max : end);\n });\n },\n destroy: function () {\n var that = this;\n SliderBase.fn.destroy.call(that);\n that.wrapper.off(NS).find(TICK_SELECTOR + ', ' + TRACK_SELECTOR).off(NS).end().find(DRAG_HANDLE).off(NS);\n that._firstHandleDrag.draggable.destroy();\n that._lastHandleDrag.draggable.destroy();\n }\n });\n RangeSlider.Selection = function (dragHandles, that, options) {\n function moveSelection(value) {\n value = value || [];\n var selectionStartValue = value[0] - options.min, selectionEndValue = value[1] - options.min, selectionStartIndex = math.ceil(round(selectionStartValue / options.smallStep)), selectionEndIndex = math.ceil(round(selectionEndValue / options.smallStep)), selectionStart = that._pixelSteps[selectionStartIndex], selectionEnd = that._pixelSteps[selectionEndIndex], halfHandle = parseInt(that._outerSize(dragHandles.eq(0)) / 2, 10), rtlCorrection = that._isRtl ? 2 : 0;\n dragHandles.eq(0).css(that._position, selectionStart - halfHandle - rtlCorrection).end().eq(1).css(that._position, selectionEnd - halfHandle - rtlCorrection);\n makeSelection(selectionStart, selectionEnd);\n }\n function makeSelection(selectionStart, selectionEnd) {\n var selection, selectionPosition, selectionDiv = that._trackDiv.find('.k-slider-selection');\n selection = math.abs(selectionStart - selectionEnd);\n selectionDiv[that._sizeFn](selection);\n if (that._isRtl) {\n selectionPosition = math.max(selectionStart, selectionEnd);\n selectionDiv.css('right', that._maxSelection - selectionPosition - 1);\n } else {\n selectionPosition = math.min(selectionStart, selectionEnd);\n selectionDiv.css(that._position, selectionPosition - 1);\n }\n }\n moveSelection(that.value());\n that.bind([\n CHANGE,\n SLIDE,\n MOVE_SELECTION\n ], function (e) {\n moveSelection(e.values);\n });\n };\n kendo.ui.plugin(RangeSlider);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.colorpicker', [\n 'kendo.core',\n 'kendo.color',\n 'kendo.popup',\n 'kendo.slider',\n 'kendo.userevents',\n 'kendo.button'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'colorpicker',\n name: 'Color tools',\n category: 'web',\n description: 'Color selection widgets',\n depends: [\n 'core',\n 'color',\n 'popup',\n 'slider',\n 'userevents',\n 'button'\n ]\n };\n (function ($, parseInt, undefined) {\n var kendo = window.kendo, ui = kendo.ui, Widget = ui.Widget, parseColor = kendo.parseColor, Color = kendo.Color, KEYS = kendo.keys, BACKGROUNDCOLOR = 'background-color', ITEMSELECTEDCLASS = 'k-state-selected', SIMPLEPALETTE = '000000,7f7f7f,880015,ed1c24,ff7f27,fff200,22b14c,00a2e8,3f48cc,a349a4,ffffff,c3c3c3,b97a57,ffaec9,ffc90e,efe4b0,b5e61d,99d9ea,7092be,c8bfe7', WEBPALETTE = 'FFFFFF,FFCCFF,FF99FF,FF66FF,FF33FF,FF00FF,CCFFFF,CCCCFF,CC99FF,CC66FF,CC33FF,CC00FF,99FFFF,99CCFF,9999FF,9966FF,9933FF,9900FF,FFFFCC,FFCCCC,FF99CC,FF66CC,FF33CC,FF00CC,CCFFCC,CCCCCC,CC99CC,CC66CC,CC33CC,CC00CC,99FFCC,99CCCC,9999CC,9966CC,9933CC,9900CC,FFFF99,FFCC99,FF9999,FF6699,FF3399,FF0099,CCFF99,CCCC99,CC9999,CC6699,CC3399,CC0099,99FF99,99CC99,999999,996699,993399,990099,FFFF66,FFCC66,FF9966,FF6666,FF3366,FF0066,CCFF66,CCCC66,CC9966,CC6666,CC3366,CC0066,99FF66,99CC66,999966,996666,993366,990066,FFFF33,FFCC33,FF9933,FF6633,FF3333,FF0033,CCFF33,CCCC33,CC9933,CC6633,CC3333,CC0033,99FF33,99CC33,999933,996633,993333,990033,FFFF00,FFCC00,FF9900,FF6600,FF3300,FF0000,CCFF00,CCCC00,CC9900,CC6600,CC3300,CC0000,99FF00,99CC00,999900,996600,993300,990000,66FFFF,66CCFF,6699FF,6666FF,6633FF,6600FF,33FFFF,33CCFF,3399FF,3366FF,3333FF,3300FF,00FFFF,00CCFF,0099FF,0066FF,0033FF,0000FF,66FFCC,66CCCC,6699CC,6666CC,6633CC,6600CC,33FFCC,33CCCC,3399CC,3366CC,3333CC,3300CC,00FFCC,00CCCC,0099CC,0066CC,0033CC,0000CC,66FF99,66CC99,669999,666699,663399,660099,33FF99,33CC99,339999,336699,333399,330099,00FF99,00CC99,009999,006699,003399,000099,66FF66,66CC66,669966,666666,663366,660066,33FF66,33CC66,339966,336666,333366,330066,00FF66,00CC66,009966,006666,003366,000066,66FF33,66CC33,669933,666633,663333,660033,33FF33,33CC33,339933,336633,333333,330033,00FF33,00CC33,009933,006633,003333,000033,66FF00,66CC00,669900,666600,663300,660000,33FF00,33CC00,339900,336600,333300,330000,00FF00,00CC00,009900,006600,003300,000000', WHITE = '#ffffff', MESSAGES = {\n apply: 'Apply',\n cancel: 'Cancel',\n noColor: 'no color',\n clearColor: 'Clear color',\n previewInput: 'Color Hexadecimal Code'\n }, NS = '.kendoColorTools', CLICK_NS = 'click' + NS, KEYDOWN_NS = 'keydown' + NS, DISABLED = 'k-state-disabled', browser = kendo.support.browser, isIE8 = browser.msie && browser.version < 9;\n var ColorSelector = Widget.extend({\n init: function (element, options) {\n var that = this, ariaId;\n Widget.fn.init.call(that, element, options);\n element = that.element;\n options = that.options;\n that._value = options.value = parseColor(options.value);\n that._tabIndex = element.attr('tabIndex') || 0;\n ariaId = that._ariaId = options.ariaId;\n if (ariaId) {\n element.attr('aria-labelledby', ariaId);\n }\n if (options._standalone) {\n that._triggerSelect = that._triggerChange;\n }\n },\n options: {\n name: 'ColorSelector',\n value: null,\n _standalone: true\n },\n events: [\n 'change',\n 'select',\n 'cancel'\n ],\n color: function (value) {\n if (value !== undefined) {\n this._value = parseColor(value);\n this._updateUI(this._value);\n }\n return this._value;\n },\n value: function (color) {\n color = this.color(color);\n if (color) {\n if (this.options.opacity) {\n color = color.toCssRgba();\n } else {\n color = color.toCss();\n }\n }\n return color || null;\n },\n enable: function (enable) {\n if (arguments.length === 0) {\n enable = true;\n }\n this.wrapper.toggleClass(DISABLED, !enable);\n this._onEnable(enable);\n },\n _select: function (color, nohooks) {\n var prev = this._value;\n color = this.color(color);\n if (!nohooks) {\n this.element.trigger('change');\n if (!color.equals(prev)) {\n this.trigger('change', { value: this.value() });\n } else if (!this._standalone) {\n this.trigger('cancel');\n }\n }\n },\n _triggerSelect: function (color) {\n triggerEvent(this, 'select', color);\n },\n _triggerChange: function (color) {\n triggerEvent(this, 'change', color);\n },\n destroy: function () {\n if (this.element) {\n this.element.off(NS);\n }\n if (this.wrapper) {\n this.wrapper.off(NS).find('*').off(NS);\n }\n this.wrapper = null;\n Widget.fn.destroy.call(this);\n },\n _updateUI: $.noop,\n _selectOnHide: function () {\n return null;\n },\n _cancel: function () {\n this.trigger('cancel');\n }\n });\n function triggerEvent(self, type, color) {\n color = parseColor(color);\n if (color && !color.equals(self.color())) {\n if (type == 'change') {\n self._value = color;\n }\n if (color.a != 1) {\n color = color.toCssRgba();\n } else {\n color = color.toCss();\n }\n self.trigger(type, { value: color });\n }\n }\n var ColorPalette = ColorSelector.extend({\n init: function (element, options) {\n var that = this;\n ColorSelector.fn.init.call(that, element, options);\n element = that.wrapper = that.element;\n options = that.options;\n var colors = options.palette;\n if (colors == 'websafe') {\n colors = WEBPALETTE;\n options.columns = 18;\n } else if (colors == 'basic') {\n colors = SIMPLEPALETTE;\n }\n if (typeof colors == 'string') {\n colors = colors.split(',');\n }\n if ($.isArray(colors)) {\n colors = $.map(colors, function (x) {\n return parseColor(x);\n });\n }\n that._selectedID = (options.ariaId || kendo.guid()) + '_selected';\n element.addClass('k-widget k-colorpalette').attr('role', 'grid').attr('aria-readonly', 'true').append($(that._template({\n colors: colors,\n columns: options.columns,\n tileSize: options.tileSize,\n value: that._value,\n id: options.ariaId\n }))).on(CLICK_NS, '.k-item', function (ev) {\n that._select($(ev.currentTarget).css(BACKGROUNDCOLOR));\n }).attr('tabIndex', that._tabIndex).on(KEYDOWN_NS, bind(that._keydown, that));\n var tileSize = options.tileSize, width, height;\n if (tileSize) {\n if (/number|string/.test(typeof tileSize)) {\n width = height = parseFloat(tileSize);\n } else if (typeof tileSize == 'object') {\n width = parseFloat(tileSize.width);\n height = parseFloat(tileSize.height);\n } else {\n throw new Error('Unsupported value for the \\'tileSize\\' argument');\n }\n element.find('.k-item').css({\n width: width,\n height: height\n });\n }\n },\n focus: function () {\n if (this.wrapper && !this.wrapper.is('[unselectable=\\'on\\']')) {\n this.wrapper.focus();\n }\n },\n options: {\n name: 'ColorPalette',\n columns: 10,\n tileSize: null,\n palette: 'basic'\n },\n _onEnable: function (enable) {\n if (enable) {\n this.wrapper.attr('tabIndex', this._tabIndex);\n } else {\n this.wrapper.removeAttr('tabIndex');\n }\n },\n _keydown: function (e) {\n var selected, wrapper = this.wrapper, items = wrapper.find('.k-item'), current = items.filter('.' + ITEMSELECTEDCLASS).get(0), keyCode = e.keyCode;\n if (keyCode == KEYS.LEFT) {\n selected = relative(items, current, -1);\n } else if (keyCode == KEYS.RIGHT) {\n selected = relative(items, current, 1);\n } else if (keyCode == KEYS.DOWN) {\n selected = relative(items, current, this.options.columns);\n } else if (keyCode == KEYS.UP) {\n selected = relative(items, current, -this.options.columns);\n } else if (keyCode == KEYS.ENTER) {\n preventDefault(e);\n if (current) {\n this._select($(current).css(BACKGROUNDCOLOR));\n }\n } else if (keyCode == KEYS.ESC) {\n this._cancel();\n }\n if (selected) {\n preventDefault(e);\n this._current(selected);\n try {\n var color = parseColor(selected.css(BACKGROUNDCOLOR));\n this._triggerSelect(color);\n } catch (ex) {\n }\n }\n },\n _current: function (item) {\n this.wrapper.find('.' + ITEMSELECTEDCLASS).removeClass(ITEMSELECTEDCLASS).attr('aria-selected', false).removeAttr('id');\n $(item).addClass(ITEMSELECTEDCLASS).attr('aria-selected', true).attr('id', this._selectedID);\n this.element.removeAttr('aria-activedescendant').attr('aria-activedescendant', this._selectedID);\n },\n _updateUI: function (color) {\n var item = null;\n this.wrapper.find('.k-item').each(function () {\n var c = parseColor($(this).css(BACKGROUNDCOLOR));\n if (c && c.equals(color)) {\n item = this;\n return false;\n }\n });\n this._current(item);\n },\n _template: kendo.template('<table class=\"k-palette k-reset\" role=\"presentation\"><tr role=\"row\">' + '# for (var i = 0; i < colors.length; ++i) { #' + '# var selected = colors[i].equals(value); #' + '# if (i && i % columns == 0) { # </tr><tr role=\"row\"> # } #' + '<td role=\"gridcell\" unselectable=\"on\" style=\"background-color:#= colors[i].toCss() #\"' + '#= selected ? \" aria-selected=true\" : \"\" # ' + '#=(id && i === 0) ? \"id=\\\\\"\"+id+\"\\\\\" \" : \"\" # ' + 'class=\"k-item#= selected ? \" ' + ITEMSELECTEDCLASS + '\" : \"\" #\" ' + 'aria-label=\"#= colors[i].toCss() #\"></td>' + '# } #' + '</tr></table>')\n });\n var FlatColorPicker = ColorSelector.extend({\n init: function (element, options) {\n var that = this;\n ColorSelector.fn.init.call(that, element, options);\n options = that.options;\n options.messages = options.options ? $.extend(that.options.messages, options.options.messages) : that.options.messages;\n element = that.element;\n that.wrapper = element.addClass('k-widget k-flatcolorpicker').append(that._template(options));\n that._hueElements = $('.k-hsv-rectangle, .k-alpha-slider .k-slider-track', element);\n that._selectedColor = $('.k-selected-color-display', element);\n that._colorAsText = $('input.k-color-value', element);\n that._sliders();\n that._hsvArea();\n that._updateUI(that._value || parseColor('#f00'));\n element.find('input.k-color-value').on(KEYDOWN_NS, function (ev) {\n var input = this;\n if (ev.keyCode == KEYS.ENTER) {\n try {\n var color = parseColor(input.value);\n var val = that.color();\n that._select(color, color.equals(val));\n } catch (ex) {\n $(input).addClass('k-state-error');\n }\n } else if (that.options.autoupdate) {\n setTimeout(function () {\n var color = parseColor(input.value, true);\n if (color) {\n that._updateUI(color, true);\n }\n }, 10);\n }\n }).end().on(CLICK_NS, '.k-controls button.apply', function () {\n if (that.options._clearedColor) {\n that.trigger('change');\n } else {\n that._select(that._getHSV());\n }\n }).on(CLICK_NS, '.k-controls button.cancel', function () {\n that._updateUI(that.color());\n that._cancel();\n });\n if (isIE8) {\n that._applyIEFilter();\n }\n },\n destroy: function () {\n this._hsvEvents.destroy();\n this._hueSlider.destroy();\n if (this._opacitySlider) {\n this._opacitySlider.destroy();\n }\n this._hueSlider = this._opacitySlider = this._hsvRect = this._hsvHandle = this._hueElements = this._selectedColor = this._colorAsText = null;\n ColorSelector.fn.destroy.call(this);\n },\n options: {\n name: 'FlatColorPicker',\n opacity: false,\n buttons: false,\n input: true,\n preview: true,\n clearButton: false,\n autoupdate: true,\n messages: MESSAGES\n },\n _applyIEFilter: function () {\n var track = this.element.find('.k-hue-slider .k-slider-track')[0], url = track.currentStyle.backgroundImage;\n url = url.replace(/^url\\([\\'\\\"]?|[\\'\\\"]?\\)$/g, '');\n track.style.filter = 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\\'' + url + '\\', sizingMethod=\\'scale\\')';\n },\n _sliders: function () {\n var that = this, element = that.element, hueSlider = element.find('.k-hue-slider'), opacitySlider = element.find('.k-alpha-slider');\n function hueChange(e) {\n that._updateUI(that._getHSV(e.value, null, null, null));\n }\n hueSlider.attr('aria-label', 'hue saturation');\n that._hueSlider = hueSlider.kendoSlider({\n min: 0,\n max: 360,\n tickPlacement: 'none',\n showButtons: false,\n slide: hueChange,\n change: hueChange\n }).data('kendoSlider');\n function opacityChange(e) {\n that._updateUI(that._getHSV(null, null, null, e.value / 100));\n }\n opacitySlider.attr('aria-label', 'opacity');\n that._opacitySlider = opacitySlider.kendoSlider({\n min: 0,\n max: 100,\n tickPlacement: 'none',\n showButtons: false,\n slide: opacityChange,\n change: opacityChange\n }).data('kendoSlider');\n },\n _hsvArea: function () {\n var that = this, element = that.element, hsvRect = element.find('.k-hsv-rectangle'), hsvHandle = hsvRect.find('.k-draghandle').attr('tabIndex', 0).on(KEYDOWN_NS, bind(that._keydown, that));\n function update(x, y) {\n var offset = this.offset, dx = x - offset.left, dy = y - offset.top, rw = this.width, rh = this.height;\n dx = dx < 0 ? 0 : dx > rw ? rw : dx;\n dy = dy < 0 ? 0 : dy > rh ? rh : dy;\n that._svChange(dx / rw, 1 - dy / rh);\n }\n that._hsvEvents = new kendo.UserEvents(hsvRect, {\n global: true,\n press: function (e) {\n this.offset = kendo.getOffset(hsvRect);\n this.width = hsvRect.width();\n this.height = hsvRect.height();\n hsvHandle.focus();\n update.call(this, e.x.location, e.y.location);\n },\n start: function () {\n hsvRect.addClass('k-dragging');\n hsvHandle.focus();\n },\n move: function (e) {\n e.preventDefault();\n update.call(this, e.x.location, e.y.location);\n },\n end: function () {\n hsvRect.removeClass('k-dragging');\n }\n });\n that._hsvRect = hsvRect;\n that._hsvHandle = hsvHandle;\n },\n _onEnable: function (enable) {\n this._hueSlider.enable(enable);\n if (this._opacitySlider) {\n this._opacitySlider.enable(enable);\n }\n this.wrapper.find('input').attr('disabled', !enable);\n var handle = this._hsvRect.find('.k-draghandle');\n if (enable) {\n handle.attr('tabIndex', this._tabIndex);\n } else {\n handle.removeAttr('tabIndex');\n }\n },\n _keydown: function (ev) {\n var that = this;\n function move(prop, d) {\n var c = that._getHSV();\n c[prop] += d * (ev.shiftKey ? 0.01 : 0.05);\n if (c[prop] < 0) {\n c[prop] = 0;\n }\n if (c[prop] > 1) {\n c[prop] = 1;\n }\n that._updateUI(c);\n preventDefault(ev);\n }\n function hue(d) {\n var c = that._getHSV();\n c.h += d * (ev.shiftKey ? 1 : 5);\n if (c.h < 0) {\n c.h = 0;\n }\n if (c.h > 359) {\n c.h = 359;\n }\n that._updateUI(c);\n preventDefault(ev);\n }\n switch (ev.keyCode) {\n case KEYS.LEFT:\n if (ev.ctrlKey) {\n hue(-1);\n } else {\n move('s', -1);\n }\n break;\n case KEYS.RIGHT:\n if (ev.ctrlKey) {\n hue(1);\n } else {\n move('s', 1);\n }\n break;\n case KEYS.UP:\n move(ev.ctrlKey && that._opacitySlider ? 'a' : 'v', 1);\n break;\n case KEYS.DOWN:\n move(ev.ctrlKey && that._opacitySlider ? 'a' : 'v', -1);\n break;\n case KEYS.ENTER:\n that._select(that._getHSV());\n break;\n case KEYS.F2:\n that.wrapper.find('input.k-color-value').focus().select();\n break;\n case KEYS.ESC:\n that._cancel();\n break;\n }\n },\n focus: function () {\n this._hsvHandle.focus();\n },\n _getHSV: function (h, s, v, a) {\n var rect = this._hsvRect, width = rect.width(), height = rect.height(), handlePosition = this._hsvHandle.position();\n if (h == null) {\n h = this._hueSlider.value();\n }\n if (s == null) {\n s = handlePosition.left / width;\n }\n if (v == null) {\n v = 1 - handlePosition.top / height;\n }\n if (a == null) {\n a = this._opacitySlider ? this._opacitySlider.value() / 100 : 1;\n }\n return Color.fromHSV(h, s, v, a);\n },\n _svChange: function (s, v) {\n var color = this._getHSV(null, s, v, null);\n this._updateUI(color);\n },\n _updateUI: function (color, dontChangeInput) {\n var that = this, rect = that._hsvRect;\n if (!color) {\n return;\n }\n this._colorAsText.attr('title', that.options.messages.previewInput);\n this._colorAsText.removeClass('k-state-error');\n that._selectedColor.css(BACKGROUNDCOLOR, color.toDisplay());\n if (!dontChangeInput) {\n that._colorAsText.val(that._opacitySlider ? color.toCssRgba() : color.toCss());\n }\n that._triggerSelect(color);\n color = color.toHSV();\n that._hsvHandle.css({\n left: color.s * rect.width() + 'px',\n top: (1 - color.v) * rect.height() + 'px'\n });\n that._hueElements.css(BACKGROUNDCOLOR, Color.fromHSV(color.h, 1, 1, 1).toCss());\n that._hueSlider.value(color.h);\n if (that._opacitySlider) {\n that._opacitySlider.value(100 * color.a);\n }\n },\n _selectOnHide: function () {\n return this.options.buttons ? null : this._getHSV();\n },\n _template: kendo.template('# if (preview) { #' + '<div class=\"k-selected-color\"><div class=\"k-selected-color-display\"><div class=\"k-color-input\"><input class=\"k-color-value\" ' + '# if (clearButton && !_standalone) { #' + 'placeholder=\"#: messages.noColor #\" ' + '# } #' + '#= !data.input ? \\'style=\"visibility: hidden;\"\\' : \"\" #>' + '# if (clearButton && !_standalone) { #' + '<span class=\"k-clear-color k-button k-flat\" title=\"#: messages.clearColor #\"></span>' + '# } #' + '</div></div></div>' + '# } #' + '# if (clearButton && !_standalone && !preview) { #' + '<div class=\"k-clear-color-container\"><span class=\"k-clear-color k-button k-flat\">#: messages.clearColor #</span></div>' + '# } #' + '<div class=\"k-hsv-rectangle\"><div class=\"k-hsv-gradient\"></div><div class=\"k-draghandle\"></div></div>' + '<div class=\"k-sliders-wrap k-vbox\">' + '<input class=\"k-hue-slider\" />' + '# if (opacity) { #' + '<input class=\"k-alpha-slider k-transparency-slider\" />' + '# } #' + '</div>' + '# if (buttons) { #' + '<div unselectable=\"on\" class=\"k-controls\"><button class=\"k-button k-primary apply\">#: messages.apply #</button> <button class=\"k-button cancel\">#: messages.cancel #</button></div>' + '# } #')\n });\n function relative(array, element, delta) {\n array = Array.prototype.slice.call(array);\n var n = array.length;\n var pos = array.indexOf(element);\n if (pos < 0) {\n return delta < 0 ? array[n - 1] : array[0];\n }\n pos += delta;\n if (pos < 0) {\n pos += n;\n } else {\n pos %= n;\n }\n return array[pos];\n }\n var ColorPicker = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n options = that.options;\n element = that.element;\n var value = element.attr('value') || element.val();\n if (value) {\n value = parseColor(value, true);\n } else {\n value = parseColor(options.value, true);\n }\n that._value = options.value = value;\n var content = that.wrapper = $(that._template(options));\n element.hide().after(content);\n that._inputWrapper = $(that.wrapper[0].firstChild);\n if (element.is('input')) {\n element.appendTo(content);\n var label = element.closest('label');\n var id = element.attr('id');\n if (id) {\n label = label.add('label[for=\"' + id + '\"]');\n }\n label.click(function (ev) {\n that.open();\n ev.preventDefault();\n });\n }\n that._tabIndex = element.attr('tabIndex') || 0;\n that.enable(!element.attr('disabled'));\n var accesskey = element.attr('accesskey');\n if (accesskey) {\n element.attr('accesskey', null);\n content.attr('accesskey', accesskey);\n }\n that.bind('activate', function (ev) {\n if (!ev.isDefaultPrevented()) {\n that.toggle();\n }\n });\n that._updateUI(value);\n },\n destroy: function () {\n this.wrapper.off(NS).find('*').off(NS);\n if (this._popup) {\n this._selector.destroy();\n this._popup.destroy();\n }\n this._selector = this._popup = this.wrapper = null;\n Widget.fn.destroy.call(this);\n },\n enable: function (enable) {\n var that = this, wrapper = that.wrapper, innerWrapper = wrapper.children('.k-picker-wrap'), arrow = innerWrapper.find('.k-select');\n if (arguments.length === 0) {\n enable = true;\n }\n that.element.attr('disabled', !enable);\n wrapper.attr('aria-disabled', !enable);\n arrow.off(NS).on('mousedown' + NS, preventDefault);\n wrapper.addClass('k-state-disabled').removeAttr('tabIndex').add('*', wrapper).off(NS);\n if (enable) {\n wrapper.removeClass('k-state-disabled').attr('tabIndex', that._tabIndex).on('mouseenter' + NS, function () {\n innerWrapper.addClass('k-state-hover');\n }).on('mouseleave' + NS, function () {\n innerWrapper.removeClass('k-state-hover');\n }).on('focus' + NS, function () {\n innerWrapper.addClass('k-state-focused');\n }).on('blur' + NS, function () {\n innerWrapper.removeClass('k-state-focused');\n }).on(KEYDOWN_NS, bind(that._keydown, that)).on(CLICK_NS, '.k-select', bind(that.toggle, that)).on(CLICK_NS, that.options.toolIcon ? '.k-tool-icon' : '.k-selected-color', function () {\n that.trigger('activate');\n });\n } else {\n that.close();\n }\n },\n _template: kendo.template('<span role=\"textbox\" aria-haspopup=\"true\" class=\"k-widget k-colorpicker\">' + '<span class=\"k-picker-wrap k-state-default\">' + '# if (toolIcon) { #' + '<span class=\"k-icon k-tool-icon #= toolIcon #\">' + '<span class=\"k-selected-color\"></span>' + '</span>' + '# } else { #' + '<span class=\"k-selected-color\"><span class=\"k-icon k-i-line\" style=\"display: none;\"></span></span>' + '# } #' + '<span class=\"k-select\" unselectable=\"on\" aria-label=\"select\">' + '<span class=\"k-icon k-i-arrow-60-down\"></span>' + '</span>' + '</span>' + '</span>'),\n options: {\n name: 'ColorPicker',\n palette: null,\n columns: 10,\n toolIcon: null,\n value: null,\n messages: MESSAGES,\n opacity: false,\n buttons: true,\n preview: true,\n clearButton: false,\n ARIATemplate: 'Current selected color is #=data || \"\"#'\n },\n events: [\n 'activate',\n 'change',\n 'select',\n 'open',\n 'close'\n ],\n open: function () {\n if (!this.element.prop('disabled')) {\n this._getPopup().open();\n }\n },\n close: function () {\n var selOptions = this._selector && this._selector.options || {};\n selOptions._closing = true;\n this._getPopup().close();\n delete selOptions._closing;\n },\n toggle: function () {\n if (!this.element.prop('disabled')) {\n this._getPopup().toggle();\n }\n },\n _noColorIcon: function () {\n return this.wrapper.find('.k-picker-wrap > .k-selected-color > .k-icon.k-i-line');\n },\n color: ColorSelector.fn.color,\n value: ColorSelector.fn.value,\n _select: ColorSelector.fn._select,\n _triggerSelect: ColorSelector.fn._triggerSelect,\n _isInputTypeColor: function () {\n var el = this.element[0];\n return /^input$/i.test(el.tagName) && /^color$/i.test(el.type);\n },\n _updateUI: function (value) {\n var formattedValue = '';\n if (value) {\n if (this._isInputTypeColor() || value.a == 1) {\n formattedValue = value.toCss();\n } else {\n formattedValue = value.toCssRgba();\n }\n this.element.val(formattedValue);\n }\n if (!this._ariaTemplate) {\n this._ariaTemplate = kendo.template(this.options.ARIATemplate);\n }\n this.wrapper.attr('aria-label', this._ariaTemplate(formattedValue));\n this._triggerSelect(value);\n this.wrapper.find('.k-selected-color').css(BACKGROUNDCOLOR, value ? value.toDisplay() : WHITE);\n this._noColorIcon()[formattedValue ? 'hide' : 'show']();\n },\n _keydown: function (ev) {\n var key = ev.keyCode;\n if (this._getPopup().visible()) {\n if (key == KEYS.ESC) {\n this._selector._cancel();\n } else {\n this._selector._keydown(ev);\n }\n preventDefault(ev);\n } else if (key == KEYS.ENTER || key == KEYS.DOWN) {\n this.open();\n preventDefault(ev);\n }\n },\n _getPopup: function () {\n var that = this, popup = that._popup;\n if (!popup) {\n var options = that.options;\n var selectorType;\n if (options.palette) {\n selectorType = ColorPalette;\n } else {\n selectorType = FlatColorPicker;\n }\n options._standalone = false;\n delete options.select;\n delete options.change;\n delete options.cancel;\n var id = kendo.guid();\n var selector = that._selector = new selectorType($('<div id=\"' + id + '\"></div>').appendTo(document.body), options);\n that.wrapper.attr('aria-owns', id);\n that._popup = popup = selector.wrapper.kendoPopup({\n anchor: that.wrapper,\n adjustSize: {\n width: 5,\n height: 0\n }\n }).data('kendoPopup');\n selector.element.find('.k-clear-color').kendoButton({\n icon: 'reset-color',\n click: function (e) {\n selector.options._clearedColor = true;\n that.value(null);\n that.element.val(null);\n that._updateUI(null);\n selector._colorAsText.val('');\n selector._hsvHandle.css({\n top: '0px',\n left: '0px'\n });\n selector._selectedColor.css(BACKGROUNDCOLOR, WHITE);\n that.trigger('change', { value: that.value() });\n e.preventDefault();\n }\n });\n selector.bind({\n select: function (ev) {\n that._updateUI(parseColor(ev.value));\n delete selector.options._clearedColor;\n },\n change: function () {\n if (!selector.options._clearedColor) {\n that._select(selector.color());\n }\n that.close();\n },\n cancel: function () {\n if (selector.options._clearedColor && !that.value() && selector.value()) {\n that._select(selector.color(), true);\n }\n that.close();\n }\n });\n popup.bind({\n close: function (ev) {\n if (that.trigger('close')) {\n ev.preventDefault();\n return;\n }\n that.wrapper.children('.k-picker-wrap').removeClass('k-state-focused');\n var color = selector._selectOnHide();\n var selectorColor = selector.value();\n var value = that.value();\n var options = selector.options;\n if (!color) {\n setTimeout(function () {\n if (that.wrapper && !that.wrapper.is('[unselectable=\\'on\\']')) {\n that.wrapper.focus();\n }\n });\n if (!options._closing && options._clearedColor && !value && selectorColor) {\n that._select(selectorColor, true);\n } else {\n that._updateUI(that.color());\n }\n } else if (!(options._clearedColor && !value)) {\n that._select(color);\n }\n },\n open: function (ev) {\n if (that.trigger('open')) {\n ev.preventDefault();\n } else {\n that.wrapper.children('.k-picker-wrap').addClass('k-state-focused');\n }\n },\n activate: function () {\n selector._select(that.color(), true);\n selector.focus();\n that.wrapper.children('.k-picker-wrap').addClass('k-state-focused');\n }\n });\n }\n return popup;\n }\n });\n function preventDefault(ev) {\n ev.preventDefault();\n }\n function bind(callback, obj) {\n return function () {\n return callback.apply(obj, arguments);\n };\n }\n ui.plugin(ColorPalette);\n ui.plugin(FlatColorPicker);\n ui.plugin(ColorPicker);\n }(jQuery, parseInt));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.numerictextbox', [\n 'kendo.core',\n 'kendo.userevents',\n 'kendo.floatinglabel'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'numerictextbox',\n name: 'NumericTextBox',\n category: 'web',\n description: 'The NumericTextBox widget can format and display numeric, percentage or currency textbox.',\n depends: [\n 'core',\n 'userevents',\n 'floatinglabel'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, caret = kendo.caret, keys = kendo.keys, ui = kendo.ui, Widget = ui.Widget, activeElement = kendo._activeElement, extractFormat = kendo._extractFormat, parse = kendo.parseFloat, placeholderSupported = kendo.support.placeholder, getCulture = kendo.getCulture, CHANGE = 'change', DISABLED = 'disabled', READONLY = 'readonly', INPUT = 'k-input', SPIN = 'spin', ns = '.kendoNumericTextBox', TOUCHEND = 'touchend', MOUSELEAVE = 'mouseleave' + ns, HOVEREVENTS = 'mouseenter' + ns + ' ' + MOUSELEAVE, DEFAULT = 'k-state-default', FOCUSED = 'k-state-focused', HOVER = 'k-state-hover', FOCUS = 'focus', POINT = '.', CLASS_ICON = 'k-icon', LABELCLASSES = 'k-label k-input-label', SELECTED = 'k-state-selected', STATEDISABLED = 'k-state-disabled', STATE_INVALID = 'k-state-invalid', ARIA_DISABLED = 'aria-disabled', INTEGER_REGEXP = /^(-)?(\\d*)$/, NULL = null, proxy = $.proxy, isPlainObject = $.isPlainObject, extend = $.extend;\n var NumericTextBox = Widget.extend({\n init: function (element, options) {\n var that = this, isStep = options && options.step !== undefined, min, max, step, value, disabled;\n var inputType;\n Widget.fn.init.call(that, element, options);\n options = that.options;\n element = that.element.on('focusout' + ns, proxy(that._focusout, that)).attr('role', 'spinbutton');\n options.placeholder = options.placeholder || element.attr('placeholder');\n min = that.min(element.attr('min'));\n max = that.max(element.attr('max'));\n step = that._parse(element.attr('step'));\n if (options.min === NULL && min !== NULL) {\n options.min = min;\n }\n if (options.max === NULL && max !== NULL) {\n options.max = max;\n }\n if (!isStep && step !== NULL) {\n options.step = step;\n }\n that._initialOptions = extend({}, options);\n inputType = element.attr('type');\n that._reset();\n that._wrapper();\n that._arrows();\n that._validation();\n that._input();\n if (!kendo.support.mobileOS) {\n that._text.on(FOCUS + ns, proxy(that._click, that));\n } else {\n that._text.on(TOUCHEND + ns + ' ' + FOCUS + ns, function () {\n if (kendo.support.browser.edge) {\n that._text.one(FOCUS + ns, function () {\n that._toggleText(false);\n element.focus();\n });\n } else {\n that._toggleText(false);\n element.focus();\n }\n that.selectValue();\n });\n }\n element.attr('aria-valuemin', options.min !== NULL ? options.min * options.factor : options.min).attr('aria-valuemax', options.max !== NULL ? options.max * options.factor : options.max);\n options.format = extractFormat(options.format);\n value = options.value;\n if (value == NULL) {\n if (inputType == 'number') {\n value = parseFloat(element.val());\n } else {\n value = element.val();\n }\n }\n that.value(value);\n disabled = !options.enable || element.is('[disabled]') || $(that.element).parents('fieldset').is(':disabled');\n if (disabled) {\n that.enable(false);\n } else {\n that.readonly(element.is('[readonly]'));\n }\n that.angular('compile', function () {\n return { elements: that._text.get() };\n });\n that._label();\n kendo.notify(that);\n },\n options: {\n name: 'NumericTextBox',\n decimals: NULL,\n enable: true,\n restrictDecimals: false,\n min: NULL,\n max: NULL,\n value: NULL,\n step: 1,\n round: true,\n culture: '',\n format: 'n',\n spinners: true,\n placeholder: '',\n factor: 1,\n upArrowText: 'Increase value',\n downArrowText: 'Decrease value',\n label: null\n },\n events: [\n CHANGE,\n SPIN\n ],\n _editable: function (options) {\n var that = this, element = that.element, disable = options.disable, readonly = options.readonly, text = that._text.add(element), wrapper = that._inputWrapper.off(HOVEREVENTS);\n that._toggleText(true);\n that._upArrowEventHandler.unbind('press');\n that._downArrowEventHandler.unbind('press');\n element.off('keydown' + ns).off('keyup' + ns).off('input' + ns).off('paste' + ns);\n if (that._inputLabel) {\n that._inputLabel.off(ns);\n }\n if (!readonly && !disable) {\n wrapper.addClass(DEFAULT).removeClass(STATEDISABLED).on(HOVEREVENTS, that._toggleHover);\n text.removeAttr(DISABLED).removeAttr(READONLY).attr(ARIA_DISABLED, false);\n that._upArrowEventHandler.bind('press', function (e) {\n e.preventDefault();\n that._spin(1);\n that._upArrow.addClass(SELECTED);\n });\n that._downArrowEventHandler.bind('press', function (e) {\n e.preventDefault();\n that._spin(-1);\n that._downArrow.addClass(SELECTED);\n });\n that.element.on('keydown' + ns, proxy(that._keydown, that)).on('keyup' + ns, proxy(that._keyup, that)).on('paste' + ns, proxy(that._paste, that)).on('input' + ns, proxy(that._inputHandler, that));\n if (that._inputLabel) {\n that._inputLabel.on('click' + ns, proxy(that.focus, that));\n }\n } else {\n wrapper.addClass(disable ? STATEDISABLED : DEFAULT).removeClass(disable ? DEFAULT : STATEDISABLED);\n text.attr(DISABLED, disable).attr(READONLY, readonly).attr(ARIA_DISABLED, disable);\n }\n },\n readonly: function (readonly) {\n var that = this;\n this._editable({\n readonly: readonly === undefined ? true : readonly,\n disable: false\n });\n if (that.floatingLabel) {\n that.floatingLabel.readonly(readonly === undefined ? true : readonly);\n }\n },\n enable: function (enable) {\n var that = this;\n this._editable({\n readonly: false,\n disable: !(enable = enable === undefined ? true : enable)\n });\n if (that.floatingLabel) {\n that.floatingLabel.enable(enable = enable === undefined ? true : enable);\n }\n },\n setOptions: function (options) {\n var that = this;\n Widget.fn.setOptions.call(that, options);\n that._arrowsWrap.toggle(that.options.spinners);\n that._inputWrapper.toggleClass('k-expand-padding', !that.options.spinners);\n that._text.prop('placeholder', that.options.placeholder);\n that._placeholder(that.options.placeholder);\n that.element.attr({\n 'aria-valuemin': that.options.min !== NULL ? that.options.min * that.options.factor : that.options.min,\n 'aria-valuemax': that.options.max !== NULL ? that.options.max * that.options.factor : that.options.max\n });\n that.options.format = extractFormat(that.options.format);\n if (options.value !== undefined) {\n that.value(options.value);\n }\n },\n destroy: function () {\n var that = this;\n if (that._inputLabel) {\n that._inputLabel.off(ns);\n if (that.floatingLabel) {\n that.floatingLabel.destroy();\n }\n }\n that.element.add(that._text).add(that._upArrow).add(that._downArrow).add(that._inputWrapper).off(ns);\n that._upArrowEventHandler.destroy();\n that._downArrowEventHandler.destroy();\n if (that._form) {\n that._form.off('reset', that._resetHandler);\n }\n Widget.fn.destroy.call(that);\n },\n min: function (value) {\n return this._option('min', value);\n },\n max: function (value) {\n return this._option('max', value);\n },\n step: function (value) {\n return this._option('step', value);\n },\n value: function (value) {\n var that = this, adjusted;\n if (value === undefined) {\n return that._value;\n }\n value = that._parse(value);\n adjusted = that._adjust(value);\n if (value !== adjusted) {\n return;\n }\n that._update(value);\n that._old = that._value;\n },\n focus: function () {\n this._focusin();\n },\n _adjust: function (value) {\n var that = this, options = that.options, min = options.min, max = options.max;\n if (value === NULL) {\n return value;\n }\n if (min !== NULL && value < min) {\n value = min;\n } else if (max !== NULL && value > max) {\n value = max;\n }\n return value;\n },\n _arrows: function () {\n var that = this, arrows, _release = function () {\n clearTimeout(that._spinning);\n arrows.removeClass(SELECTED);\n }, options = that.options, spinners = options.spinners, element = that.element;\n arrows = element.siblings('.' + CLASS_ICON);\n if (!arrows[0]) {\n arrows = $(buttonHtml('increase', options.upArrowText) + buttonHtml('decrease', options.downArrowText)).insertAfter(element);\n that._arrowsWrap = arrows.wrapAll('<span class=\"k-select\"/>').parent();\n }\n if (!spinners) {\n arrows.parent().toggle(spinners);\n that._inputWrapper.addClass('k-expand-padding');\n }\n that._upArrow = arrows.eq(0);\n that._upArrowEventHandler = new kendo.UserEvents(that._upArrow, { release: _release });\n that._downArrow = arrows.eq(1);\n that._downArrowEventHandler = new kendo.UserEvents(that._downArrow, { release: _release });\n },\n _validation: function () {\n var that = this;\n var element = that.element;\n that._validationIcon = $('<span class=\\'' + CLASS_ICON + ' k-i-warning\\'></span>').hide().insertAfter(element);\n },\n _blur: function () {\n var that = this;\n that._toggleText(true);\n that._change(that.element.val());\n },\n _click: function (e) {\n var that = this;\n clearTimeout(that._focusing);\n that._focusing = setTimeout(function () {\n var input = e.target, idx = caret(input)[0], value = input.value.substring(0, idx), format = that._format(that.options.format), group = format[','], result, groupRegExp, extractRegExp, caretPosition = 0;\n if (group) {\n groupRegExp = new RegExp('\\\\' + group, 'g');\n extractRegExp = new RegExp('(^(-)$)|(^(-)?([\\\\d\\\\' + group + ']+)(\\\\' + format[POINT] + ')?(\\\\d+)?)');\n }\n if (extractRegExp) {\n result = extractRegExp.exec(value);\n }\n if (result) {\n caretPosition = result[0].replace(groupRegExp, '').length;\n if (value.indexOf('(') != -1 && that._value < 0) {\n caretPosition++;\n }\n }\n that._focusin();\n caret(that.element[0], caretPosition);\n that.selectValue();\n });\n },\n selectValue: function () {\n if (this.options.selectOnFocus) {\n this.element[0].select();\n }\n },\n _change: function (value) {\n var that = this, factor = that.options.factor;\n if (factor && factor !== 1) {\n value = kendo.parseFloat(value);\n if (value !== null) {\n value = value / factor;\n }\n }\n that._update(value);\n value = that._value;\n if (that._old != value) {\n that._old = value;\n if (!that._typing) {\n that.element.trigger(CHANGE);\n }\n that.trigger(CHANGE);\n }\n that._typing = false;\n },\n _culture: function (culture) {\n return culture || getCulture(this.options.culture);\n },\n _focusin: function () {\n var that = this;\n that._inputWrapper.addClass(FOCUSED);\n that._toggleText(false);\n that.element[0].focus();\n },\n _focusout: function () {\n var that = this;\n clearTimeout(that._focusing);\n that._inputWrapper.removeClass(FOCUSED).removeClass(HOVER);\n that._blur();\n that._removeInvalidState();\n },\n _format: function (format, culture) {\n var numberFormat = this._culture(culture).numberFormat;\n format = format.toLowerCase();\n if (format.indexOf('c') > -1) {\n numberFormat = numberFormat.currency;\n } else if (format.indexOf('p') > -1) {\n numberFormat = numberFormat.percent;\n }\n return numberFormat;\n },\n _input: function () {\n var that = this, options = that.options, CLASSNAME = 'k-formatted-value', element = that.element.addClass(INPUT).show()[0], accessKey = element.accessKey, wrapper = that.wrapper, text;\n text = wrapper.find(POINT + CLASSNAME);\n if (!text[0]) {\n text = $('<input type=\"text\"/>').insertBefore(element).addClass(CLASSNAME).attr('aria-hidden', 'true');\n }\n try {\n element.setAttribute('type', 'text');\n } catch (e) {\n element.type = 'text';\n }\n text[0].title = element.title;\n text[0].tabIndex = element.tabIndex;\n text[0].style.cssText = element.style.cssText;\n text.prop('placeholder', options.placeholder);\n if (accessKey) {\n text.attr('accesskey', accessKey);\n element.accessKey = '';\n }\n that._text = text.addClass(element.className).attr({\n 'role': 'spinbutton',\n 'aria-valuemin': options.min !== NULL ? options.min * options.factor : options.min,\n 'aria-valuemax': options.max !== NULL ? options.max * options.factor : options.max,\n 'autocomplete': 'off'\n });\n },\n _keydown: function (e) {\n var that = this, key = e.keyCode;\n if (key === keys.NUMPAD_DOT) {\n that._numPadDot = true;\n }\n if (key == keys.DOWN) {\n that._step(-1);\n return;\n } else if (key == keys.UP) {\n that._step(1);\n return;\n } else if (key == keys.ENTER) {\n that._change(that.element.val());\n return;\n }\n if (key != keys.TAB) {\n that._typing = true;\n }\n that._cachedCaret = caret(that.element);\n },\n _keyup: function () {\n this._removeInvalidState();\n },\n _inputHandler: function () {\n var element = this.element;\n var value = element.val();\n var min = this.options.min;\n var numberFormat = this._format(this.options.format);\n var decimalSeparator = numberFormat[POINT];\n var minInvalid = min !== null && min >= 0 && value.charAt(0) === '-';\n if (this._numPadDot && decimalSeparator !== POINT) {\n value = value.replace(POINT, decimalSeparator);\n this.element.val(value);\n this._numPadDot = false;\n }\n if (this._numericRegex(numberFormat).test(value) && !minInvalid) {\n this._oldText = value;\n } else {\n this._blinkInvalidState();\n this.element.val(this._oldText);\n if (this._cachedCaret) {\n caret(element, this._cachedCaret[0]);\n this._cachedCaret = null;\n }\n }\n },\n _blinkInvalidState: function () {\n var that = this;\n that._addInvalidState();\n clearTimeout(that._invalidStateTimeout);\n that._invalidStateTimeout = setTimeout(proxy(that._removeInvalidState, that), 100);\n },\n _addInvalidState: function () {\n var that = this;\n that._inputWrapper.addClass(STATE_INVALID);\n that._validationIcon.show();\n },\n _removeInvalidState: function () {\n var that = this;\n that._inputWrapper.removeClass(STATE_INVALID);\n that._validationIcon.hide();\n that._invalidStateTimeout = null;\n },\n _numericRegex: function (numberFormat) {\n var that = this;\n var separator = numberFormat[POINT];\n var precision = that.options.decimals;\n var fractionRule = '*';\n if (separator === POINT) {\n separator = '\\\\' + separator;\n }\n if (precision === NULL) {\n precision = numberFormat.decimals;\n }\n if (precision === 0 && that.options.restrictDecimals) {\n return INTEGER_REGEXP;\n }\n if (that.options.restrictDecimals) {\n fractionRule = '{0,' + precision + '}';\n }\n if (that._separator !== separator) {\n that._separator = separator;\n that._floatRegExp = new RegExp('^(-)?(((\\\\d+(' + separator + '\\\\d' + fractionRule + ')?)|(' + separator + '\\\\d' + fractionRule + ')))?$');\n }\n return that._floatRegExp;\n },\n _paste: function (e) {\n var that = this;\n var element = e.target;\n var value = element.value;\n var numberFormat = that._format(that.options.format);\n setTimeout(function () {\n var result = that._parse(element.value);\n if (result === NULL) {\n that._update(value);\n } else {\n element.value = result.toString().replace(POINT, numberFormat[POINT]);\n if (that._adjust(result) !== result || !that._numericRegex(numberFormat).test(element.value)) {\n that._update(value);\n }\n }\n });\n },\n _option: function (option, value) {\n var that = this, element = that.element, options = that.options;\n if (value === undefined) {\n return options[option];\n }\n value = that._parse(value);\n if (!value && option === 'step') {\n return;\n }\n options[option] = value;\n element.add(that._text).attr('aria-value' + option, value);\n element.attr(option, value);\n },\n _spin: function (step, timeout) {\n var that = this;\n timeout = timeout || 500;\n clearTimeout(that._spinning);\n that._spinning = setTimeout(function () {\n that._spin(step, 50);\n }, timeout);\n that._step(step);\n },\n _step: function (step) {\n var that = this, element = that.element, originalValue = that._value, value = that._parse(element.val()) || 0, precision = that.options.decimals || 2;\n if (activeElement() != element[0]) {\n that._focusin();\n }\n if (that.options.factor && value) {\n value = value / that.options.factor;\n }\n value = +(value + that.options.step * step).toFixed(precision);\n value = that._adjust(value);\n that._update(value);\n that._typing = false;\n if (originalValue !== value) {\n that.trigger(SPIN);\n }\n },\n _toggleHover: function (e) {\n $(e.currentTarget).toggleClass(HOVER, e.type === 'mouseenter');\n },\n _toggleText: function (toggle) {\n var that = this;\n that._text.toggle(toggle);\n that.element.toggle(!toggle);\n },\n _parse: function (value, culture) {\n return parse(value, this._culture(culture), this.options.format);\n },\n _round: function (value, precision) {\n var rounder = this.options.round ? kendo._round : truncate;\n return rounder(value, precision);\n },\n _update: function (value) {\n var that = this, options = that.options, factor = options.factor, format = options.format, decimals = options.decimals, culture = that._culture(), numberFormat = that._format(format, culture), isNotNull;\n if (decimals === NULL) {\n decimals = numberFormat.decimals;\n }\n value = that._parse(value, culture);\n isNotNull = value !== NULL;\n if (isNotNull) {\n value = parseFloat(that._round(value, decimals), 10);\n }\n that._value = value = that._adjust(value);\n that._placeholder(kendo.toString(value, format, culture));\n if (isNotNull) {\n if (factor) {\n value = parseFloat(that._round(value * factor, decimals), 10);\n }\n value = value.toString();\n if (value.indexOf('e') !== -1) {\n value = that._round(+value, decimals);\n }\n value = value.replace(POINT, numberFormat[POINT]);\n } else {\n value = null;\n }\n that.element.val(value);\n that._oldText = value;\n that.element.add(that._text).attr('aria-valuenow', value);\n },\n _placeholder: function (value) {\n var input = this._text;\n input.val(value);\n if (!placeholderSupported && !value) {\n input.val(this.options.placeholder);\n }\n input.attr('title', this.element.attr('title') || input.val());\n },\n _label: function () {\n var that = this;\n var element = that.element;\n var options = that.options;\n var id = element.attr('id');\n var floating;\n var labelText;\n if (options.label !== null) {\n floating = isPlainObject(options.label) ? options.label.floating : false;\n labelText = isPlainObject(options.label) ? options.label.content : options.label;\n if (floating) {\n that._floatingLabelContainer = that.wrapper.wrap('<span></span>').parent();\n that.floatingLabel = new kendo.ui.FloatingLabel(that._floatingLabelContainer, { widget: that });\n }\n if (kendo.isFunction(labelText)) {\n labelText = labelText.call(that);\n }\n if (!labelText) {\n labelText = '';\n }\n if (!id) {\n id = options.name + '_' + kendo.guid();\n element.attr('id', id);\n }\n that._inputLabel = $('<label class=\\'' + LABELCLASSES + '\\' for=\\'' + id + '\\'>' + labelText + '</label>\\'').insertBefore(that.wrapper);\n if (that.element.attr('disabled') === undefined && that.element.attr('readonly') === undefined) {\n that._inputLabel.on('click' + ns, proxy(that.focus, that));\n }\n }\n },\n _wrapper: function () {\n var that = this, element = that.element, DOMElement = element[0], wrapper;\n wrapper = element.parents('.k-numerictextbox');\n if (!wrapper.is('span.k-numerictextbox')) {\n wrapper = element.hide().wrap('<span class=\"k-numeric-wrap k-state-default\" />').parent();\n wrapper = wrapper.wrap('<span/>').parent();\n }\n wrapper[0].style.cssText = DOMElement.style.cssText;\n DOMElement.style.width = '';\n that.wrapper = wrapper.addClass('k-widget k-numerictextbox').addClass(DOMElement.className).removeClass('input-validation-error').css('display', '');\n that._inputWrapper = $(wrapper[0].firstChild);\n },\n _reset: function () {\n var that = this, element = that.element, formId = element.attr('form'), form = formId ? $('#' + formId) : element.closest('form');\n if (form[0]) {\n that._resetHandler = function () {\n setTimeout(function () {\n that.value(element[0].value);\n that.max(that._initialOptions.max);\n that.min(that._initialOptions.min);\n });\n };\n that._form = form.on('reset', that._resetHandler);\n }\n }\n });\n function buttonHtml(direction, text) {\n var className = 'k-i-arrow-' + (direction === 'increase' ? '60-up' : '60-down');\n return '<span unselectable=\"on\" class=\"k-link k-link-' + direction + '\" aria-label=\"' + text + '\" title=\"' + text + '\">' + '<span unselectable=\"on\" class=\"' + CLASS_ICON + ' ' + className + '\"></span>' + '</span>';\n }\n function truncate(value, precision) {\n var parts = parseFloat(value, 10).toString().split(POINT);\n if (parts[1]) {\n parts[1] = parts[1].substring(0, precision);\n }\n return parts.join(POINT);\n }\n ui.plugin(NumericTextBox);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.editable', [\n 'kendo.dropdownlist',\n 'kendo.datepicker',\n 'kendo.numerictextbox',\n 'kendo.validator',\n 'kendo.binder'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'editable',\n name: 'Editable',\n category: 'framework',\n depends: [\n 'dropdownlist',\n 'datepicker',\n 'numerictextbox',\n 'validator',\n 'binder'\n ],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, Widget = ui.Widget, extend = $.extend, oldIE = kendo.support.browser.msie && kendo.support.browser.version < 9, isFunction = kendo.isFunction, isPlainObject = $.isPlainObject, inArray = $.inArray, POINT = '.', AUTOCOMPLETEVALUE = 'off', nameSpecialCharRegExp = /(\"|\\%|'|\\[|\\]|\\$|\\.|\\,|\\:|\\;|\\+|\\*|\\&|\\!|\\#|\\(|\\)|<|>|\\=|\\?|\\@|\\^|\\{|\\}|\\~|\\/|\\||`)/g, ERRORTEMPLATE = '<div class=\"k-tooltip k-tooltip-error k-validator-tooltip\">' + '<span class=\"k-tooltip-icon k-icon k-i-warning\"></span>' + '<span class=\"k-tooltip-content\">#= message #</span>' + '<span class=\"k-callout k-callout-n\"></span>' + '</div>', CHANGE = 'change';\n var EQUAL_SET = 'equalSet';\n var specialRules = [\n 'url',\n 'email',\n 'number',\n 'date',\n 'boolean'\n ];\n function fieldType(field) {\n field = field != null ? field : '';\n return field.type || $.type(field) || 'string';\n }\n function convertToValueBinding(container) {\n container.find(':input:not(:button, .k-combobox .k-input, [' + kendo.attr('role') + '=listbox], [' + kendo.attr('role') + '=upload], [' + kendo.attr('skip') + '], [type=file])').each(function () {\n var bindAttr = kendo.attr('bind'), binding = this.getAttribute(bindAttr) || '', bindingName = this.type === 'checkbox' || this.type === 'radio' ? 'checked:' : 'value:', fieldName = this.name;\n if (binding.indexOf(bindingName) === -1 && fieldName) {\n binding += (binding.length ? ',' : '') + bindingName + fieldName;\n $(this).attr(bindAttr, binding);\n }\n });\n }\n function createAttributes(options) {\n var field = (options.model.fields || options.model)[options.field], type = fieldType(field), validation = field ? field.validation : {}, attributes = field ? field.attributes : {}, ruleName, DATATYPE = kendo.attr('type'), BINDING = kendo.attr('bind'), rule, attr = {\n id: options.id || options.field,\n name: options.field,\n title: options.title ? options.title : options.field\n };\n for (ruleName in validation) {\n rule = validation[ruleName];\n if (inArray(ruleName, specialRules) >= 0) {\n attr[DATATYPE] = ruleName;\n } else if (!isFunction(rule)) {\n var culture = kendo.getCulture();\n if (typeof rule === 'number' && culture.name.length) {\n var numberFormat = culture.numberFormat;\n var stringRule = rule.toString().replace(POINT, numberFormat[POINT]);\n attr[ruleName] = stringRule;\n } else {\n attr[ruleName] = isPlainObject(rule) ? rule.value || ruleName : rule;\n }\n }\n attr[kendo.attr(ruleName + '-msg')] = rule.message;\n attr.autocomplete = AUTOCOMPLETEVALUE;\n }\n for (var attributeName in attributes) {\n attr[attributeName] = attributes[attributeName];\n }\n if (inArray(type, specialRules) >= 0) {\n attr[DATATYPE] = type;\n }\n attr[BINDING] = (type === 'boolean' ? 'checked:' : 'value:') + options.field;\n return attr;\n }\n function addIdAttribute(container, attr) {\n var id = container.attr('id');\n if (id) {\n attr.id = id;\n container.removeAttr('id');\n }\n return attr;\n }\n function convertItems(items) {\n var idx, length, item, value, text, result;\n if (items && items.length) {\n result = [];\n for (idx = 0, length = items.length; idx < length; idx++) {\n item = items[idx];\n text = item.text || item.value || item;\n value = item.value == null ? item.text || item : item.value;\n result[idx] = {\n text: text,\n value: value\n };\n }\n }\n return result;\n }\n function getEditorTag(type, options) {\n var tag;\n if (!type.length) {\n return;\n }\n if (type === 'DropDownTree' && options && options.checkboxes || type === 'MultiSelect') {\n tag = '<select />';\n } else {\n tag = type === 'Editor' ? '<textarea />' : '<input />';\n }\n return tag;\n }\n var kendoEditors = [\n 'AutoComplete',\n 'ColorPicker',\n 'ComboBox',\n 'DateInput',\n 'DatePicker',\n 'DateTimePicker',\n 'DropDownTree',\n 'Editor',\n 'MaskedTextBox',\n 'MultiColumnComboBox',\n 'MultiSelect',\n 'NumericTextBox',\n 'Rating',\n 'Slider',\n 'Switch',\n 'TimePicker',\n 'DropDownList'\n ];\n var editors = {\n 'number': function (container, options) {\n var attr = createAttributes(options);\n $('<input type=\"text\"/>').attr(attr).appendTo(container).kendoNumericTextBox({ format: options.format });\n $('<span ' + kendo.attr('for') + '=\"' + options.field + '\" class=\"k-invalid-msg k-hidden\"/>').appendTo(container);\n },\n 'date': function (container, options) {\n var attr = createAttributes(options), format = options.format;\n if (format) {\n format = kendo._extractFormat(format);\n }\n attr[kendo.attr('format')] = format;\n $('<input type=\"text\"/>').attr(attr).appendTo(container).kendoDatePicker({ format: options.format });\n $('<span ' + kendo.attr('for') + '=\"' + options.field + '\" class=\"k-invalid-msg k-hidden\"/>').appendTo(container);\n },\n 'string': function (container, options) {\n var attr = createAttributes(options);\n $('<input type=\"text\" />').attr(attr).addClass('k-textbox').appendTo(container);\n },\n 'boolean': function (container, options) {\n var attr = createAttributes(options);\n var element = $('<input type=\"checkbox\" />').attr(attr).addClass('k-checkbox').appendTo(container);\n renderHiddenForMvcCheckbox(element, container, options);\n },\n 'values': function (container, options) {\n var attr = createAttributes(options);\n var items = kendo.stringify(convertItems(options.values));\n $('<select ' + kendo.attr('text-field') + '=\"text\"' + kendo.attr('value-field') + '=\"value\"' + kendo.attr('source') + '=\\'' + (items ? items.replace(/\\'/g, ''') : items) + '\\'' + kendo.attr('role') + '=\"dropdownlist\"/>').attr(attr).appendTo(container);\n $('<span ' + kendo.attr('for') + '=\"' + options.field + '\" class=\"k-invalid-msg k-hidden\"/>').appendTo(container);\n },\n 'kendoEditor': function (container, options) {\n var attr = createAttributes(options);\n var type = options.editor;\n var editor = 'kendo' + type;\n var editorOptions = options.editorOptions;\n var tagElement = getEditorTag(type, editorOptions);\n var element = $(tagElement).attr(attr).appendTo(container)[editor](editorOptions);\n renderHiddenForMvcCheckbox(element, container, options);\n }\n };\n var mobileEditors = {\n 'number': function (container, options) {\n var attr = createAttributes(options);\n attr = addIdAttribute(container, attr);\n $('<input type=\"number\"/>').attr(attr).appendTo(container);\n },\n 'date': function (container, options) {\n var attr = createAttributes(options);\n attr = addIdAttribute(container, attr);\n $('<input type=\"date\"/>').attr(attr).appendTo(container);\n },\n 'string': function (container, options) {\n var attr = createAttributes(options);\n attr = addIdAttribute(container, attr);\n $('<input type=\"text\" />').attr(attr).appendTo(container);\n },\n 'boolean': function (container, options) {\n var attr = createAttributes(options);\n attr = addIdAttribute(container, attr);\n $('<input type=\"checkbox\" />').attr(attr).appendTo(container);\n },\n 'values': function (container, options) {\n var attr = createAttributes(options);\n var items = options.values;\n var select = $('<select />');\n attr = addIdAttribute(container, attr);\n for (var index in items) {\n $('<option value=\"' + items[index].value + '\">' + items[index].text + '</option>').appendTo(select);\n }\n select.attr(attr).appendTo(container);\n }\n };\n function addValidationRules(modelField, rules) {\n var validation = modelField ? modelField.validation || {} : {}, rule, descriptor;\n for (rule in validation) {\n descriptor = validation[rule];\n if (isPlainObject(descriptor) && descriptor.value) {\n descriptor = descriptor.value;\n }\n if (isFunction(descriptor)) {\n rules[rule] = descriptor;\n }\n }\n }\n function renderHiddenForMvcCheckbox(tag, container, field) {\n var addHidden = field ? field.shouldRenderHidden || false : false;\n if (addHidden) {\n tag.val(true);\n container.append($('<input type=\\'hidden\\' name=\\'' + field.field + '\\' value=\\'false\\' data-skip=\\'true\\' data-validate=\\'false\\'/>'));\n }\n }\n var Editable = Widget.extend({\n init: function (element, options) {\n var that = this;\n if (options.target) {\n options.$angular = options.target.options.$angular;\n if (options.target.pane) {\n that._isMobile = true;\n }\n }\n Widget.fn.init.call(that, element, options);\n that._validateProxy = $.proxy(that._validate, that);\n that.refresh();\n },\n events: [CHANGE],\n options: {\n name: 'Editable',\n editors: editors,\n mobileEditors: mobileEditors,\n clearContainer: true,\n validateOnBlur: true,\n validationSummary: false,\n errorTemplate: ERRORTEMPLATE,\n skipFocus: false\n },\n editor: function (field, modelField) {\n var that = this, editors = that._isMobile ? mobileEditors : that.options.editors, isObject = isPlainObject(field), fieldName = isObject ? field.field : field, model = that.options.model || {}, isValuesEditor = isObject && field.values, type = isValuesEditor ? 'values' : fieldType(modelField), isCustomEditor = isObject && field.editor, isKendoEditor = isObject && $.inArray(field.editor, kendoEditors) !== -1, editor = isCustomEditor ? field.editor : editors[type], container = that.element.find('[' + kendo.attr('container-for') + '=' + fieldName.replace(nameSpecialCharRegExp, '\\\\$1') + ']');\n editor = editor ? editor : editors.string;\n if (isKendoEditor) {\n editor = editors.kendoEditor;\n } else if (isCustomEditor && typeof field.editor === 'string') {\n editor = function (container) {\n container.append(field.editor);\n };\n }\n container = container.length ? container : that.element;\n editor(container, extend(true, {}, isObject ? field : { field: fieldName }, { model: model }));\n },\n _validate: function (e) {\n var that = this, input, value = e.value, preventChangeTrigger = that._validationEventInProgress, values = {}, bindAttribute = kendo.attr('bind'), fieldName = e.field.replace(nameSpecialCharRegExp, '\\\\$1'), bindingRegex = new RegExp('(value|checked)\\\\s*:\\\\s*' + fieldName + '\\\\s*(,|$)');\n values[e.field] = e.value;\n input = $(':input[' + bindAttribute + '*=\"' + fieldName + '\"]', that.element).filter('[' + kendo.attr('validate') + '!=\\'false\\']').filter(function () {\n return bindingRegex.test($(this).attr(bindAttribute));\n });\n if (input.length > 1) {\n input = input.filter(function () {\n var element = $(this);\n return !element.is(':radio') || element.val() == value;\n });\n }\n try {\n that._validationEventInProgress = true;\n if (!that.validatable.validateInput(input) || !preventChangeTrigger && that.trigger(CHANGE, { values: values })) {\n e.preventDefault();\n }\n } finally {\n that._validationEventInProgress = false;\n }\n },\n end: function () {\n return this.validatable.validate();\n },\n destroy: function () {\n var that = this;\n that.angular('cleanup', function () {\n return { elements: that.element };\n });\n Widget.fn.destroy.call(that);\n that.options.model.unbind('set', that._validateProxy);\n that.options.model.unbind(EQUAL_SET, that._validateProxy);\n kendo.unbind(that.element);\n if (that.validatable) {\n that.validatable.destroy();\n }\n kendo.destroy(that.element);\n that.element.removeData('kendoValidator');\n if (that.element.is('[' + kendo.attr('role') + '=editable]')) {\n that.element.removeAttr(kendo.attr('role'));\n }\n },\n refresh: function () {\n var that = this, idx, length, fields = that.options.fields || [], container = that.options.clearContainer ? that.element.empty() : that.element, model = that.options.model || {}, rules = {}, field, isObject, fieldName, modelField, modelFields;\n if (!$.isArray(fields)) {\n fields = [fields];\n }\n for (idx = 0, length = fields.length; idx < length; idx++) {\n field = fields[idx];\n isObject = isPlainObject(field);\n fieldName = isObject ? field.field : field;\n modelField = (model.fields || model)[fieldName];\n addValidationRules(modelField, rules);\n that.editor(field, modelField);\n }\n if (that.options.target) {\n that.angular('compile', function () {\n return {\n elements: container,\n data: container.map(function () {\n return { dataItem: model };\n })\n };\n });\n }\n if (!length) {\n modelFields = model.fields || model;\n for (fieldName in modelFields) {\n addValidationRules(modelFields[fieldName], rules);\n }\n }\n convertToValueBinding(container);\n if (that.validatable) {\n that.validatable.destroy();\n }\n kendo.bind(container, that.options.model);\n if (that.options.validateOnBlur) {\n that.options.model.unbind('set', that._validateProxy).bind('set', that._validateProxy);\n that.options.model.unbind(EQUAL_SET, that._validateProxy).bind(EQUAL_SET, that._validateProxy);\n }\n that.validatable = new kendo.ui.Validator(container, {\n validateOnBlur: that.options.validateOnBlur,\n validationSummary: that.options.validationSummary,\n errorTemplate: that.options.errorTemplate || undefined,\n rules: rules\n });\n if (!that.options.skipFocus) {\n var focusable = container.find(':kendoFocusable').eq(0).focus();\n if (oldIE) {\n focusable.focus();\n }\n }\n }\n });\n ui.plugin(Editable);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.listview', [\n 'kendo.data',\n 'kendo.editable',\n 'kendo.selectable'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'listview',\n name: 'ListView',\n category: 'web',\n description: 'The ListView widget offers rich support for interacting with data.',\n depends: ['data'],\n features: [\n {\n id: 'listview-editing',\n name: 'Editing',\n description: 'Support for record editing',\n depends: ['editable']\n },\n {\n id: 'listview-selection',\n name: 'Selection',\n description: 'Support for selection',\n depends: ['selectable']\n }\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, CHANGE = 'change', KENDO_KEYDOWN = 'kendoKeydown', CANCEL = 'cancel', DATABOUND = 'dataBound', DATABINDING = 'dataBinding', Widget = kendo.ui.Widget, keys = kendo.keys, EMPTY_STRING = '', FOCUSSELECTOR = '> *:not(.k-loading-mask)', PROGRESS = 'progress', ERROR = 'error', FOCUSED = 'k-state-focused', SELECTED = 'k-state-selected', KEDITITEM = 'k-edit-item', EDIT = 'edit', REMOVE = 'remove', SAVE = 'save', MOUSEDOWN = 'mousedown', CLICK = 'click', TOUCHSTART = 'touchstart', NS = '.kendoListView', proxy = $.proxy, activeElement = kendo._activeElement, progress = kendo.ui.progress, DataSource = kendo.data.DataSource;\n var ListView = kendo.ui.DataBoundWidget.extend({\n init: function (element, options) {\n var that = this;\n options = $.isArray(options) ? { dataSource: options } : options;\n Widget.fn.init.call(that, element, options);\n options = that.options;\n that.wrapper = element = that.element;\n if (element[0].id) {\n that._itemId = element[0].id + '_lv_active';\n }\n that._element();\n that._layout();\n that._dataSource();\n that._templates();\n that._navigatable();\n that._selectable();\n that._pageable();\n that._crudHandlers();\n that._scrollable();\n if (that.options.autoBind) {\n that.dataSource.fetch();\n }\n kendo.notify(that);\n },\n events: [\n CHANGE,\n CANCEL,\n DATABINDING,\n DATABOUND,\n EDIT,\n REMOVE,\n SAVE,\n KENDO_KEYDOWN\n ],\n options: {\n name: 'ListView',\n autoBind: true,\n selectable: false,\n navigatable: false,\n height: null,\n template: EMPTY_STRING,\n altTemplate: EMPTY_STRING,\n editTemplate: EMPTY_STRING,\n contentTemplate: '<div data-content=\\'true\\' />',\n contentElement: 'div',\n bordered: true,\n borders: '',\n layout: '',\n flex: {\n direction: 'row',\n wrap: 'nowrap'\n },\n grid: {},\n scrollable: false\n },\n setOptions: function (options) {\n Widget.fn.setOptions.call(this, options);\n this._layout();\n this._templates();\n if (this.selectable) {\n this.selectable.destroy();\n this.selectable = null;\n }\n this._selectable();\n },\n _templates: function () {\n var options = this.options;\n this.template = kendo.template(options.template || EMPTY_STRING);\n this.altTemplate = kendo.template(options.altTemplate || options.template);\n this.editTemplate = kendo.template(options.editTemplate || EMPTY_STRING);\n },\n _item: function (action) {\n return this.content.children()[action]();\n },\n items: function () {\n return this.content.children(':not(.k-loading-mask)');\n },\n dataItem: function (element) {\n var attr = kendo.attr('uid');\n var uid = $(element).closest('[' + attr + ']').attr(attr);\n return this.dataSource.getByUid(uid);\n },\n setDataSource: function (dataSource) {\n this.options.dataSource = dataSource;\n this._dataSource();\n if (this.options.autoBind) {\n dataSource.fetch();\n }\n if (this.options.scrollable === 'endless') {\n this._bindScrollable();\n }\n },\n _unbindDataSource: function () {\n var that = this;\n that.dataSource.unbind(CHANGE, that._refreshHandler).unbind(PROGRESS, that._progressHandler).unbind(ERROR, that._errorHandler);\n },\n _dataSource: function () {\n var that = this;\n if (that.dataSource && that._refreshHandler) {\n that._unbindDataSource();\n } else {\n that._refreshHandler = proxy(that.refresh, that);\n that._progressHandler = proxy(that._progress, that);\n that._errorHandler = proxy(that._error, that);\n }\n that.dataSource = DataSource.create(that.options.dataSource).bind(CHANGE, that._refreshHandler).bind(PROGRESS, that._progressHandler).bind(ERROR, that._errorHandler);\n },\n _progress: function (toggle) {\n var element = this.content;\n progress(element, toggle, { opacity: true });\n },\n _error: function () {\n progress(this.content, false);\n },\n _element: function () {\n var options = this.options;\n var height = options.height;\n this.element.addClass('k-widget k-listview');\n if (options.navigatable || options.selectable) {\n this.element.attr('role', 'listbox');\n } else {\n this.element.attr('role', 'list');\n }\n if (options.contentElement) {\n this.content = $(document.createElement(options.contentElement)).appendTo(this.element);\n } else {\n this.content = this.element;\n }\n if (height) {\n this.element.css('height', height);\n }\n },\n _layout: function () {\n var that = this;\n var options = that.options;\n var flex = options.flex;\n var grid = options.grid;\n var element = that.element;\n var elementClassNames = [\n 'k-widget',\n 'k-listview'\n ];\n var content = that.content;\n var contentClassNames = ['k-listview-content'];\n element.add(content).removeClass(function (index, className) {\n if (className.indexOf('k-') >= 0) {\n return true;\n }\n });\n if (options.bordered === true) {\n elementClassNames.push('k-listview-bordered');\n }\n if (typeof options.borders === 'string' && options.borders !== EMPTY_STRING) {\n elementClassNames.push('k-listview-borders-' + options.borders);\n }\n if (typeof options.contentPadding === 'string' && options.contentPadding !== EMPTY_STRING) {\n contentClassNames.push('k-listview-content-padding-' + options.contentPadding);\n }\n if (typeof options.layout === 'string' && options.layout !== EMPTY_STRING) {\n contentClassNames.push('k-d-' + options.layout);\n }\n if (options.layout === 'flex' && typeof flex === 'object') {\n if (typeof flex.direction === 'string' && flex.direction !== '') {\n contentClassNames.push('k-flex-' + flex.direction);\n }\n if (typeof flex.wrap === 'string' && flex.wrap !== '') {\n contentClassNames.push('k-flex-' + flex.wrap);\n }\n }\n if (options.layout === 'grid' && typeof grid === 'object') {\n if (typeof grid.cols === 'number') {\n content.css('grid-template-columns', 'repeat(' + grid.cols + ', 1fr)');\n } else if (typeof grid.cols === 'string') {\n content.css('grid-template-columns', grid.cols);\n }\n if (typeof grid.rows === 'number') {\n content.css('grid-template-rows', 'repeat(' + grid.rows + ', ' + (grid.rowHeight !== undefined ? grid.rowHeight : '1fr') + ')');\n } else if (typeof grid.rows === 'string') {\n content.css('grid-template-rows', grid.rows);\n }\n if (typeof grid.gutter === 'number') {\n content.css('grid-gap', grid.gutter);\n } else if (typeof grid.gutter === 'string') {\n content.css('grid-gap', grid.gutter);\n }\n }\n that.element.addClass(elementClassNames.join(' '));\n that.content.addClass(contentClassNames.join(' '));\n },\n refresh: function (e) {\n var that = this, view = that.dataSource.view(), data, items, item, html = '', idx, length, template = that.template, altTemplate = that.altTemplate, options = that.options, role = options.selectable || options.navigatable ? 'option' : 'listitem', active = activeElement(), endlessAppend = that._endlessFetchInProgress, index = endlessAppend ? that._skipRerenderItemsCount : 0, scrollable = that.options.scrollable;\n e = e || {};\n if (e.action === 'itemchange') {\n if (!that._hasBindingTarget() && !that.editable) {\n data = e.items[0];\n item = that.items().filter('[' + kendo.attr('uid') + '=' + data.uid + ']');\n if (item.length > 0) {\n idx = item.index();\n that.angular('cleanup', function () {\n return { elements: [item] };\n });\n item.replaceWith(template(data));\n item = that.items().eq(idx);\n item.attr(kendo.attr('uid'), data.uid);\n that.angular('compile', function () {\n return {\n elements: [item],\n data: [{ dataItem: data }]\n };\n });\n that.trigger('itemChange', {\n item: item,\n data: data\n });\n }\n }\n return;\n }\n if (that.trigger(DATABINDING, {\n action: e.action || 'rebind',\n items: e.items,\n index: e.index\n })) {\n return;\n }\n that._angularItems('cleanup');\n if (!endlessAppend) {\n that._destroyEditable();\n }\n for (idx = index, length = view.length; idx < length; idx++) {\n if (idx % 2) {\n html += altTemplate(view[idx]);\n } else {\n html += template(view[idx]);\n }\n }\n if (endlessAppend) {\n that.content.append(html);\n } else {\n that.content.html(html);\n }\n items = that.items().not('.k-loading-mask');\n for (idx = index, length = view.length; idx < length; idx++) {\n item = items.eq(idx);\n item.attr(kendo.attr('uid'), view[idx].uid).attr('role', role);\n if (that.options.selectable) {\n item.attr('aria-selected', 'false');\n }\n }\n if (that.content[0] === active && that.options.navigatable) {\n if (that._focusNext) {\n that.current(that.current().next());\n } else {\n if (!scrollable) {\n that.current(items.eq(0));\n }\n }\n }\n that._angularItems('compile');\n that._progress(false);\n that._endlessFetchInProgress = null;\n that.trigger(DATABOUND, {\n action: e.action || 'rebind',\n items: e.items,\n index: e.index\n });\n },\n _pageable: function () {\n var that = this, pageable = that.options.pageable, settings, pagerId;\n if ($.isPlainObject(pageable)) {\n pagerId = pageable.pagerId;\n settings = $.extend({}, pageable, {\n dataSource: that.dataSource,\n pagerId: null\n });\n that.pager = new kendo.ui.Pager($('#' + pagerId), settings);\n }\n },\n _selectable: function () {\n var that = this, multi, current, selectable = that.options.selectable, navigatable = that.options.navigatable;\n if (selectable) {\n multi = kendo.ui.Selectable.parseOptions(selectable).multiple;\n that.selectable = new kendo.ui.Selectable(that.element, {\n aria: true,\n multiple: multi,\n filter: that.options.contentElement ? '.k-listview-content ' + FOCUSSELECTOR : FOCUSSELECTOR,\n change: function () {\n that.trigger(CHANGE);\n }\n });\n if (navigatable) {\n that.element.on('keydown' + NS, function (e) {\n if (e.keyCode === keys.SPACEBAR) {\n current = that.current();\n if (e.target == e.currentTarget) {\n e.preventDefault();\n }\n if (multi) {\n if (!e.ctrlKey) {\n that.selectable.clear();\n } else {\n if (current && current.hasClass(SELECTED)) {\n current.removeClass(SELECTED);\n return;\n }\n }\n } else {\n that.selectable.clear();\n }\n that.selectable.value(current);\n }\n });\n }\n }\n },\n _scrollable: function () {\n var that = this;\n var scrollable = that.options.scrollable;\n if (scrollable) {\n that.content.css({\n 'overflow-y': 'scroll',\n 'position': 'relative',\n '-webkit-overflow-scrolling': 'touch'\n });\n if (scrollable === 'endless') {\n that._bindScrollable();\n }\n }\n },\n _bindScrollable: function () {\n var that = this;\n var originalPageSize = that._endlessPageSize = that.dataSource.options.pageSize;\n that.content.off('scroll' + NS).on('scroll' + NS, function () {\n if (this.scrollTop + this.clientHeight - this.scrollHeight >= -15 && !that._endlessFetchInProgress && that._endlessPageSize < that.dataSource.total()) {\n that._skipRerenderItemsCount = that._endlessPageSize;\n that._endlessPageSize = that._skipRerenderItemsCount + originalPageSize;\n that.dataSource.options.endless = true;\n that._endlessFetchInProgress = true;\n that.dataSource.pageSize(that._endlessPageSize);\n }\n });\n },\n current: function (candidate) {\n var that = this, element = that.element, current = that._current, id = that._itemId;\n if (candidate === undefined) {\n return current;\n }\n if (current && current[0]) {\n if (current[0].id === id) {\n current.removeAttr('id');\n }\n current.removeClass(FOCUSED);\n element.removeAttr('aria-activedescendant');\n }\n if (candidate && candidate[0]) {\n id = candidate[0].id || id;\n that._scrollTo(candidate[0]);\n element.attr('aria-activedescendant', id);\n candidate.addClass(FOCUSED).attr('id', id);\n }\n that._current = candidate;\n },\n _scrollTo: function (element) {\n var that = this, content = that.content, container, UseJQueryoffset = false, SCROLL = 'scroll';\n if (content.css('overflow') === 'auto' || content.css('overflow') === SCROLL || content.css('overflow-y') === SCROLL) {\n container = content[0];\n } else {\n container = window;\n UseJQueryoffset = true;\n }\n var scrollDirectionFunc = function (direction, dimension) {\n var elementOffset = UseJQueryoffset ? $(element).offset()[direction.toLowerCase()] : element['offset' + direction], elementDimension = element['client' + dimension], containerScrollAmount = $(container)[SCROLL + direction](), containerDimension = $(container)[dimension.toLowerCase()]();\n if (elementOffset + elementDimension > containerScrollAmount + containerDimension) {\n $(container)[SCROLL + direction](elementOffset + elementDimension - containerDimension);\n } else if (elementOffset < containerScrollAmount) {\n $(container)[SCROLL + direction](elementOffset);\n }\n };\n scrollDirectionFunc('Top', 'Height');\n scrollDirectionFunc('Left', 'Width');\n },\n _navigatable: function () {\n var that = this, navigatable = that.options.navigatable, element = that.element, content = that.content, clickCallback = function (e) {\n that.current($(e.currentTarget));\n if (!$(e.target).is(':button, a, :input, a > .k-icon, textarea')) {\n kendo.focusElement(element);\n }\n };\n if (navigatable) {\n that._tabindex();\n element.on('focus' + NS, function () {\n var current = that._current;\n if (!current || !current.is(':visible')) {\n current = that._item('first');\n }\n that.current(current);\n }).on('focusout' + NS, function () {\n if (that._current) {\n that._current.removeClass(FOCUSED);\n }\n }).on('keydown' + NS, that, function (e) {\n var key = e.keyCode, current = that.current(), target = $(e.target), canHandle = !target.is(':button, textarea, a, a > .t-icon, input'), isTextBox = target.is(':text, :password'), preventDefault = kendo.preventDefault, editItem = content.find('.' + KEDITITEM), active = activeElement(), idx, scrollable = that.options.scrollable;\n if (!canHandle && !isTextBox && key !== keys.ESC || isTextBox && key !== keys.ESC && key !== keys.ENTER) {\n return;\n }\n if (key === keys.UP || key === keys.LEFT) {\n if (current && current[0]) {\n current = current.prev();\n }\n if (current && current[0]) {\n that.current(current);\n } else if (!scrollable) {\n that.current(that._item('last'));\n }\n preventDefault(e);\n }\n if (key === keys.DOWN || key === keys.RIGHT) {\n if (scrollable) {\n if (that.options.scrollable === 'endless' && !current.next().length) {\n that.content[0].scrollTop = that.content[0].scrollHeight;\n that._focusNext = true;\n } else {\n current = current.next();\n if (current && current[0]) {\n that.current(current);\n }\n }\n } else {\n current = current.next();\n that.current(!current || !current[0] ? that._item('first') : current);\n }\n preventDefault(e);\n }\n if (key === keys.PAGEUP) {\n that.current(null);\n that.dataSource.page(that.dataSource.page() - 1);\n preventDefault(e);\n }\n if (key === keys.PAGEDOWN) {\n that.current(null);\n that.dataSource.page(that.dataSource.page() + 1);\n preventDefault(e);\n }\n if (key === keys.HOME) {\n that.current(that._item('first'));\n preventDefault(e);\n }\n if (key === keys.END) {\n that.current(that._item('last'));\n preventDefault(e);\n }\n if (key === keys.ENTER) {\n if (editItem.length !== 0 && (canHandle || isTextBox)) {\n idx = that.items().index(editItem);\n if (active) {\n active.blur();\n }\n that.save();\n var focusAgain = function () {\n that.element.trigger('focus');\n that.current(that.items().eq(idx));\n };\n that.one('dataBound', focusAgain);\n } else if (that.options.editTemplate !== '') {\n that.edit(current);\n }\n }\n if (key === keys.ESC) {\n editItem = content.find('.' + KEDITITEM);\n if (editItem.length === 0) {\n return;\n }\n idx = that.items().index(editItem);\n that.cancel();\n that.element.trigger('focus');\n that.current(that.items().eq(idx));\n }\n });\n element.on(MOUSEDOWN + NS + ' ' + TOUCHSTART + NS, that.options.contentElement ? '.k-listview-content ' + FOCUSSELECTOR : FOCUSSELECTOR, proxy(clickCallback, that));\n }\n },\n clearSelection: function () {\n var that = this;\n that.selectable.clear();\n that.trigger(CHANGE);\n },\n select: function (items) {\n var that = this, selectable = that.selectable;\n items = $(items);\n if (items.length) {\n if (!selectable.options.multiple) {\n selectable.clear();\n items = items.first();\n }\n selectable.value(items);\n return;\n }\n return selectable.value();\n },\n _destroyEditable: function () {\n var that = this;\n if (that.editable) {\n that.editable.destroy();\n delete that.editable;\n }\n },\n _modelFromElement: function (element) {\n var uid = element.attr(kendo.attr('uid'));\n return this.dataSource.getByUid(uid);\n },\n _closeEditable: function () {\n var that = this, editable = that.editable, options = that.options, role = options.selectable || options.navigatable ? 'option' : 'listitem', data, item, index, template = that.template;\n if (editable) {\n if (editable.element.index() % 2) {\n template = that.altTemplate;\n }\n that.angular('cleanup', function () {\n return { elements: [editable.element] };\n });\n data = that._modelFromElement(editable.element);\n that._destroyEditable();\n index = editable.element.index();\n editable.element.replaceWith(template(data));\n item = that.items().eq(index);\n item.attr(kendo.attr('uid'), data.uid);\n item.attr('role', role);\n if (that._hasBindingTarget()) {\n kendo.bind(item, data);\n }\n that.angular('compile', function () {\n return {\n elements: [item],\n data: [{ dataItem: data }]\n };\n });\n }\n return true;\n },\n edit: function (item) {\n var that = this, data = that._modelFromElement(item), container, uid = data.uid, index;\n that.cancel();\n item = that.items().filter('[' + kendo.attr('uid') + '=' + uid + ']');\n index = item.index();\n item.replaceWith(that.editTemplate(data));\n container = that.items().eq(index).addClass(KEDITITEM).attr(kendo.attr('uid'), data.uid);\n that.editable = container.kendoEditable({\n model: data,\n clearContainer: false,\n errorTemplate: false,\n target: that\n }).data('kendoEditable');\n that.trigger(EDIT, {\n model: data,\n item: container\n });\n },\n save: function () {\n var that = this, editable = that.editable, model;\n if (!editable) {\n return;\n }\n var container = editable.element;\n model = that._modelFromElement(container);\n if (editable.end() && !that.trigger(SAVE, {\n model: model,\n item: container\n })) {\n that._closeEditable();\n that.dataSource.sync();\n }\n },\n remove: function (item) {\n var that = this, dataSource = that.dataSource, data = that._modelFromElement(item);\n if (that.editable) {\n dataSource.cancelChanges(that._modelFromElement(that.editable.element));\n that._closeEditable();\n }\n if (!that.trigger(REMOVE, {\n model: data,\n item: item\n })) {\n item.hide();\n dataSource.remove(data);\n dataSource.sync();\n }\n },\n add: function () {\n var that = this, dataItem, dataSource = that.dataSource, index = dataSource.indexOf((dataSource.view() || [])[0]);\n if (index < 0) {\n index = 0;\n }\n that.cancel();\n dataItem = dataSource.insert(index, {});\n that.edit(that.element.find('[data-uid=\\'' + dataItem.uid + '\\']'));\n },\n cancel: function () {\n var that = this, dataSource = that.dataSource;\n if (that.editable) {\n var container = that.editable.element;\n var model = that._modelFromElement(container);\n if (!that.trigger(CANCEL, {\n model: model,\n container: container\n })) {\n dataSource.cancelChanges(model);\n that._closeEditable();\n }\n }\n },\n _crudHandlers: function () {\n var that = this, mousedownNs = MOUSEDOWN + NS, touchstartNs = TOUCHSTART + NS, clickNs = CLICK + NS;\n that.content.on(mousedownNs + ' ' + touchstartNs, '.k-edit-button', function (e) {\n e.preventDefault();\n var item = $(this).closest('[' + kendo.attr('uid') + ']');\n setTimeout(function () {\n that.edit(item);\n });\n });\n that.content.on(mousedownNs + ' ' + touchstartNs, '.k-delete-button', function (e) {\n e.preventDefault();\n var item = $(this).closest('[' + kendo.attr('uid') + ']');\n setTimeout(function () {\n that.remove(item);\n });\n });\n that.content.on(clickNs, '.k-update-button', function (e) {\n that.save();\n e.preventDefault();\n });\n that.content.on(clickNs, '.k-cancel-button', function (e) {\n that.cancel();\n e.preventDefault();\n });\n },\n destroy: function () {\n var that = this;\n Widget.fn.destroy.call(that);\n that._unbindDataSource();\n that._destroyEditable();\n that.element.off(NS);\n that.content.off(NS);\n that._endlessFetchInProgress = that._endlessPageSize = that._skipRerenderItemsCount = that._focusNext = null;\n if (that.pager) {\n that.pager.destroy();\n }\n kendo.destroy(that.element);\n }\n });\n kendo.ui.plugin(ListView);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.listbox', [\n 'kendo.draganddrop',\n 'kendo.data',\n 'kendo.selectable'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'listbox',\n name: 'ListBox',\n category: 'web',\n depends: [\n 'draganddrop',\n 'data',\n 'selectable'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo;\n var kendoAttr = kendo.attr;\n var data = kendo.data;\n var keys = kendo.keys;\n var kendoTemplate = kendo.template;\n var Widget = kendo.ui.Widget;\n var DataSource = data.DataSource;\n var Selectable = kendo.ui.Selectable;\n var DataBoundWidget = kendo.ui.DataBoundWidget;\n var Class = kendo.Class;\n var extend = $.extend;\n var noop = $.noop;\n var proxy = $.proxy;\n var DASH = '-';\n var DOT = '.';\n var SPACE = ' ';\n var HASH = '#';\n var KENDO_LISTBOX = 'kendoListBox';\n var NS = DOT + KENDO_LISTBOX;\n var DISABLED_STATE_CLASS = 'k-state-disabled';\n var SELECTED_STATE_CLASS = 'k-state-selected';\n var ENABLED_ITEM_SELECTOR = '.k-item:not(.k-state-disabled)';\n var ENABLED_ITEMS_SELECTOR = '.k-list:not(.k-state-disabled) >' + ENABLED_ITEM_SELECTOR;\n var TOOLBAR_CLASS = 'k-listbox-toolbar';\n var TOOL_SELECTOR = 'li > a.k-button:not(.k-state-disabled)';\n var FOCUSED_CLASS = 'k-state-focused';\n var DRAG_CLUE_CLASS = 'k-drag-clue';\n var DROP_HINT_CLASS = 'k-drop-hint';\n var LIST_CLASS = 'k-reset k-list';\n var LIST_SELECTOR = '.k-reset.k-list';\n var RESET = 'k-reset';\n var CLICK = 'click' + NS;\n var KEYDOWN = 'keydown' + NS;\n var BLUR = 'blur' + NS;\n var outerWidth = kendo._outerWidth;\n var outerHeight = kendo._outerHeight;\n var CHANGE = 'change';\n var DATABOUND = 'dataBound';\n var ADD = 'add';\n var REMOVE = 'remove';\n var REORDER = 'reorder';\n var MOVE_UP = 'moveUp';\n var MOVE_DOWN = 'moveDown';\n var TRANSFER_TO = 'transferTo';\n var TRANSFER_FROM = 'transferFrom';\n var TRANSFER_ALL_TO = 'transferAllTo';\n var TRANSFER_ALL_FROM = 'transferAllFrom';\n var DRAGGEDCLASS = 'k-ghost';\n var UNIQUE_ID = 'uid';\n var TABINDEX = 'tabindex';\n var COMMAND = 'command';\n var MOVE_UP_OFFSET = -1;\n var MOVE_DOWN_OFFSET = 1;\n var DRAGSTART = 'dragstart';\n var DRAG = 'drag';\n var DROP = 'drop';\n var DRAGEND = 'dragend';\n var DEFAULT_FILTER = 'ul.k-reset.k-list>li.k-item';\n var RIGHT = 'right';\n var BOTTOM = 'bottom';\n var TOOLBAR_POSITION_CLASS_NAMES = [\n TOOLBAR_CLASS + DASH + 'left',\n TOOLBAR_CLASS + DASH + RIGHT,\n TOOLBAR_CLASS + DASH + 'top',\n TOOLBAR_CLASS + DASH + BOTTOM\n ];\n function getSortedDomIndices(items) {\n var indices = $.map(items, function (item) {\n return $(item).index();\n });\n return indices;\n }\n function isUndefined(value) {\n return typeof value === 'undefined';\n }\n function defaultHint(element) {\n return element.clone().removeClass(DRAGGEDCLASS).removeClass(FOCUSED_CLASS).addClass(kendo.format('{0} {1} {2}', SELECTED_STATE_CLASS, RESET, DRAG_CLUE_CLASS)).width(element.width());\n }\n function defaultPlaceholder() {\n return $('<li>').addClass(DROP_HINT_CLASS);\n }\n var ListBox = DataBoundWidget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n that._wrapper();\n that._list();\n element = that.element.attr('multiple', 'multiple').hide();\n if (element[0] && !that.options.dataSource) {\n that.options.dataTextField = that.options.dataTextField || 'text';\n that.options.dataValueField = that.options.dataValueField || 'value';\n }\n that._templates();\n that._selectable();\n that._dataSource();\n that._createToolbar();\n that._createDraggable();\n that._createNavigatable();\n },\n destroy: function () {\n var that = this;\n DataBoundWidget.fn.destroy.call(that);\n if (!isNaN(that._listTabIndex)) {\n that._getList().off();\n that._listTabIndex = null;\n }\n that._unbindDataSource();\n that._destroySelectable();\n that._destroyToolbar();\n that.wrapper.off(NS);\n if (that._target) {\n that._target = null;\n }\n if (that._draggable) {\n that._draggable.destroy();\n that.placeholder = null;\n }\n kendo.destroy(that.element);\n },\n setOptions: function (options) {\n Widget.fn.setOptions.call(this, options);\n this._templates();\n this._dataSource();\n },\n events: [\n CHANGE,\n DATABOUND,\n ADD,\n REMOVE,\n REORDER,\n DRAGSTART,\n DRAG,\n DROP,\n DRAGEND\n ],\n options: {\n name: 'ListBox',\n autoBind: true,\n template: '',\n dataTextField: '',\n dataValueField: '',\n selectable: 'single',\n draggable: null,\n dropSources: [],\n connectWith: '',\n navigatable: true,\n toolbar: {\n position: RIGHT,\n tools: []\n },\n messages: {\n tools: {\n remove: 'Delete',\n moveUp: 'Move Up',\n moveDown: 'Move Down',\n transferTo: 'Transfer To',\n transferFrom: 'Transfer From',\n transferAllTo: 'Transfer All To',\n transferAllFrom: 'Transfer All From'\n }\n }\n },\n add: function (dataItems) {\n var that = this;\n var items = dataItems && dataItems.length ? dataItems : [dataItems];\n var itemsLength = items.length;\n var list = that._getList();\n var i;\n that._unbindDataSource();\n that._unbindDataChange();\n for (i = 0; i < itemsLength; i++) {\n that._addItem(items[i], list);\n }\n that._bindDataChange();\n that._bindDataSource();\n that._syncElement();\n },\n _addItem: function (dataItem, list) {\n var that = this;\n var item = that.templates.itemTemplate({\n item: dataItem,\n r: that.templates.itemContent\n });\n $(item).attr(kendoAttr(UNIQUE_ID), dataItem.uid).appendTo(list);\n if (typeof dataItem === typeof '') {\n that.dataSource._data.push(dataItem);\n } else {\n that.dataSource.add(dataItem);\n }\n },\n _addItemAt: function (dataItem, index) {\n var that = this;\n var item = that.templates.itemTemplate({\n item: dataItem,\n r: that.templates.itemContent\n });\n that._unbindDataSource();\n if (typeof dataItem === typeof '') {\n that._insertElementAt(item, index);\n that.dataSource._data.push(dataItem);\n } else {\n that._insertElementAt($(item).attr(kendoAttr(UNIQUE_ID), dataItem.uid), index);\n that.dataSource.add(dataItem);\n }\n that._bindDataSource();\n that._syncElement();\n },\n _insertElementAt: function (item, index) {\n var that = this;\n var list = that._getList();\n if (index > 0) {\n $(item).insertAfter(list.children().eq(index - 1));\n } else {\n $(list).prepend(item);\n }\n },\n _createNavigatable: function () {\n var that = this;\n var options = that.options;\n if (options.navigatable) {\n that._getList().on(CLICK, ENABLED_ITEM_SELECTOR, proxy(that._click, that)).on(KEYDOWN, proxy(that._keyDown, that)).on(BLUR, proxy(that._blur, that));\n }\n },\n _getTabIndex: function () {\n var that = this;\n var tabindex;\n if (!isNaN(that._listTabIndex)) {\n return that._listTabIndex;\n }\n tabindex = that.element.attr(TABINDEX);\n that._listTabIndex = !isNaN(tabindex) ? tabindex : 0;\n that.element.removeAttr(TABINDEX);\n return that._listTabIndex;\n },\n _blur: function () {\n if (this._target) {\n this._target.removeClass(FOCUSED_CLASS);\n this._getList().removeAttr('aria-activedescendant');\n }\n this._target = null;\n },\n _click: function (e) {\n var that = this;\n var target = $(e.currentTarget);\n var oldTarget = that._target;\n var isInput = isInputElement(e.target);\n if (oldTarget) {\n oldTarget.removeClass(FOCUSED_CLASS);\n }\n that._target = target;\n target.addClass(FOCUSED_CLASS);\n that._getList().attr('aria-activedescendant', target.attr('id'));\n if (that._getList()[0] !== kendo._activeElement() && !isInput) {\n that.focus();\n }\n },\n _getNavigatableItem: function (key) {\n var that = this;\n var current;\n if (!that._target) {\n current = that.items().filter(ENABLED_ITEM_SELECTOR).first();\n } else {\n current = that._target;\n }\n if (key === keys.UP && that._target) {\n current = that._target.prevAll(ENABLED_ITEM_SELECTOR).first();\n }\n if (key === keys.DOWN && that._target) {\n current = that._target.nextAll(ENABLED_ITEM_SELECTOR).first();\n }\n return current.length ? current : null;\n },\n _scrollIntoView: function (item) {\n if (!item) {\n return;\n }\n if (item[0]) {\n item = item[0];\n }\n var list = this._getList().parent()[0];\n var itemOffsetTop = item.offsetTop;\n var contentScrollTop = list.scrollTop;\n var contentOffsetHeight = list.clientHeight;\n var bottomDistance = itemOffsetTop + item.offsetHeight;\n if (contentScrollTop > itemOffsetTop) {\n contentScrollTop = itemOffsetTop;\n } else if (bottomDistance > contentScrollTop + contentOffsetHeight) {\n contentScrollTop = bottomDistance - contentOffsetHeight;\n }\n list.scrollTop = contentScrollTop;\n },\n _keyDown: function (e) {\n var that = this;\n var key = e.keyCode;\n var current = that._getNavigatableItem(key);\n var shouldPreventDefault;\n if (that._target) {\n that._target.removeClass(FOCUSED_CLASS);\n }\n if (!(e.shiftKey && !e.ctrlKey && (key === keys.DOWN || key === keys.UP))) {\n that._shiftSelecting = false;\n }\n if (key == keys.DELETE) {\n that._executeCommand(REMOVE);\n if (that._target) {\n that._target.removeClass(FOCUSED_CLASS);\n that._getList().removeAttr('aria-activedescendant');\n that._target = null;\n }\n shouldPreventDefault = true;\n } else if (key === keys.DOWN || key === keys.UP) {\n if (!current) {\n e.preventDefault();\n return;\n }\n if (e.shiftKey && !e.ctrlKey) {\n if (!that._shiftSelecting) {\n that.clearSelection();\n that._shiftSelecting = true;\n }\n if (that._target && current.hasClass('k-state-selected')) {\n that._target.removeClass(SELECTED_STATE_CLASS);\n that.trigger(CHANGE);\n } else if (that.options.selectable == 'single') {\n that.select(current);\n } else {\n that.select(current.add(that._target));\n }\n } else if (e.shiftKey && e.ctrlKey) {\n that._executeCommand(key === keys.DOWN ? MOVE_DOWN : MOVE_UP);\n that._scrollIntoView(that._target);\n e.preventDefault();\n return;\n } else if (!e.shiftKey && !e.ctrlKey) {\n if (that.options.selectable === 'multiple') {\n that.clearSelection();\n }\n that.select(current);\n }\n that._target = current;\n if (that._target) {\n that._target.addClass(FOCUSED_CLASS);\n that._scrollIntoView(that._target);\n that._getList().attr('aria-activedescendant', that._target.attr('id'));\n } else {\n that._getList().removeAttr('aria-activedescendant');\n }\n shouldPreventDefault = true;\n } else if (key == keys.SPACEBAR) {\n if (e.ctrlKey && that._target) {\n if (that._target.hasClass(SELECTED_STATE_CLASS)) {\n that._target.removeClass(SELECTED_STATE_CLASS);\n that.trigger(CHANGE);\n } else {\n that.select(that._target);\n }\n } else {\n that.clearSelection();\n that.select(that._target);\n }\n shouldPreventDefault = true;\n } else if (e.ctrlKey && key == keys.RIGHT) {\n if (e.shiftKey) {\n that._executeCommand(TRANSFER_ALL_TO);\n } else {\n that._executeCommand(TRANSFER_TO);\n }\n that._target = that.select().length ? that.select() : null;\n shouldPreventDefault = true;\n } else if (e.ctrlKey && key == keys.LEFT) {\n if (e.shiftKey) {\n that._executeCommand(TRANSFER_ALL_FROM);\n } else {\n that._executeCommand(TRANSFER_FROM);\n }\n shouldPreventDefault = true;\n }\n if (shouldPreventDefault) {\n e.preventDefault();\n }\n },\n focus: function () {\n kendo.focusElement(this._getList());\n },\n _createDraggable: function () {\n var that = this;\n var draggable = that.options.draggable;\n var hint;\n if (draggable) {\n hint = draggable.hint;\n if (!that.options.selectable) {\n throw new Error('Dragging requires selection to be enabled');\n }\n if (!hint) {\n hint = defaultHint;\n }\n that._draggable = new kendo.ui.Draggable(that.wrapper, {\n filter: draggable.filter ? draggable.filter : DEFAULT_FILTER,\n hint: kendo.isFunction(hint) ? hint : $(hint),\n dragstart: proxy(that._dragstart, that),\n dragcancel: proxy(that._clear, that),\n drag: proxy(that._drag, that),\n dragend: proxy(that._dragend, that)\n });\n }\n },\n _dragstart: function (e) {\n var that = this;\n var draggedElement = that.draggedElement = e.currentTarget;\n var placeholder = that.options.draggable.placeholder;\n var dataItem = that.dataItem(draggedElement);\n var eventData = {\n dataItems: dataItem,\n items: $(draggedElement),\n draggableEvent: e\n };\n if (that.options.draggable.enabled === false) {\n e.preventDefault();\n return;\n }\n if (!placeholder) {\n placeholder = defaultPlaceholder;\n }\n that.placeholder = kendo.isFunction(placeholder) ? $(placeholder.call(that, draggedElement)) : $(placeholder);\n if (draggedElement.is(DOT + DISABLED_STATE_CLASS)) {\n e.preventDefault();\n } else {\n if (that.trigger(DRAGSTART, eventData)) {\n e.preventDefault();\n } else {\n that.clearSelection();\n that.select(draggedElement);\n draggedElement.addClass(DRAGGEDCLASS);\n }\n }\n },\n _clear: function () {\n this.draggedElement.removeClass(DRAGGEDCLASS);\n this.placeholder.remove();\n },\n _findElementUnderCursor: function (e) {\n var elementUnderCursor = kendo.elementUnderCursor(e);\n var draggable = e.sender;\n if ($.contains(draggable.hint[0], elementUnderCursor) || draggable.hint[0] === elementUnderCursor) {\n draggable.hint.hide();\n elementUnderCursor = kendo.elementUnderCursor(e);\n draggable.hint.show();\n }\n return elementUnderCursor;\n },\n _findTarget: function (e) {\n var that = this;\n var element = that._findElementUnderCursor(e);\n var elementNode = $(element);\n var list = that._getList();\n var items;\n var node;\n if ($.contains(list[0], element)) {\n items = that.items();\n element = elementNode.is('li') ? element : elementNode.closest('li')[0];\n node = items.filter(element)[0] || items.has(element)[0];\n if (node) {\n node = $(node);\n return !node.hasClass(DISABLED_STATE_CLASS) ? {\n element: node,\n listBox: that\n } : null;\n } else {\n return null;\n }\n } else if (list[0] == element || list.parent()[0] == element) {\n return {\n element: $(list),\n appendToBottom: true,\n listBox: that\n };\n } else {\n return that._searchConnectedListBox(elementNode);\n }\n },\n _getElementCenter: function (element) {\n var center = element.length ? kendo.getOffset(element) : null;\n if (center) {\n center.top += outerHeight(element) / 2;\n center.left += outerWidth(element) / 2;\n }\n return center;\n },\n _searchConnectedListBox: function (element) {\n var connectedListBox;\n var items;\n var node;\n var originalElement = element;\n var closestContainer;\n if (element.hasClass('k-list-scroller k-selectable')) {\n closestContainer = element;\n } else {\n closestContainer = element.closest('.k-list-scroller.k-selectable');\n }\n if (closestContainer.length) {\n connectedListBox = closestContainer.parent().find('[data-role=\\'listbox\\']').getKendoListBox();\n } else {\n return null;\n }\n if (connectedListBox && $.inArray(this.element[0].id, connectedListBox.options.dropSources) !== -1) {\n items = connectedListBox.items();\n element = element.is('li') ? element[0] : element.closest('li')[0];\n node = items.filter(element)[0] || items.has(element)[0];\n if (node) {\n node = $(node);\n return !node.hasClass(DISABLED_STATE_CLASS) ? {\n element: node,\n listBox: connectedListBox\n } : null;\n } else if (!items.length || originalElement.hasClass('k-list-scroller k-selectable') || originalElement.hasClass('k-reset k-list')) {\n return {\n element: connectedListBox._getList(),\n listBox: connectedListBox,\n appendToBottom: true\n };\n } else {\n return null;\n }\n }\n return null;\n },\n _drag: function (e) {\n var that = this;\n var draggedElement = that.draggedElement;\n var target = that._findTarget(e);\n var cursorOffset = {\n left: e.x.location,\n top: e.y.location\n };\n var dataItem = that.dataItem(draggedElement);\n var eventData = {\n dataItems: [dataItem],\n items: $(draggedElement),\n draggableEvent: e\n };\n var targetCenter;\n var offsetDelta;\n var direction;\n if (that.trigger(DRAG, eventData)) {\n e.preventDefault();\n return;\n }\n if (target) {\n targetCenter = this._getElementCenter(target.element);\n offsetDelta = {\n left: Math.round(cursorOffset.left - targetCenter.left),\n top: Math.round(cursorOffset.top - targetCenter.top)\n };\n if (target.appendToBottom) {\n that._movePlaceholder(target, null, draggedElement);\n return;\n }\n if (offsetDelta.top < 0) {\n direction = 'prev';\n } else if (offsetDelta.top > 0) {\n direction = 'next';\n }\n if (direction) {\n if (target.element[0] != that.placeholder[0]) {\n that._movePlaceholder(target, direction, draggedElement);\n }\n }\n } else if (that.placeholder.parent().length) {\n that.placeholder.remove();\n }\n },\n _movePlaceholder: function (target, direction, draggedElement) {\n var that = this;\n var placeholder = that.placeholder;\n var draggableOptions = target.listBox.options.draggable;\n if (placeholder.parent().length) {\n that.placeholder.remove();\n if (draggableOptions && draggableOptions.placeholder) {\n that.placeholder = kendo.isFunction(draggableOptions.placeholder) ? $(draggableOptions.placeholder.call(that, draggedElement)) : $(draggableOptions.placeholder);\n } else {\n that.placeholder = $(defaultPlaceholder.call(that, draggedElement));\n }\n }\n if (!direction) {\n target.element.append(that.placeholder);\n } else if (direction === 'prev') {\n target.element.before(that.placeholder);\n } else if (direction === 'next') {\n target.element.after(that.placeholder);\n }\n },\n _dragend: function (e) {\n var that = this;\n var draggedItem = that.draggedElement;\n var items = that.items();\n var placeholderIndex = items.not(that.draggedElement).index(that.placeholder);\n var draggedIndex = items.not(that.placeholder).index(that.draggedElement);\n var dataItem = that.dataItem(draggedItem);\n var eventData = {\n dataItems: [dataItem],\n items: $(draggedItem)\n };\n var connectedListBox = that.placeholder.closest('.k-widget.k-listbox').find('[data-role=\\'listbox\\']').getKendoListBox();\n if (that.trigger(DROP, extend({}, eventData, { draggableEvent: e }))) {\n e.preventDefault();\n this._clear();\n return;\n }\n if (placeholderIndex >= 0) {\n if (placeholderIndex !== draggedIndex && !that.trigger(REORDER, extend({}, eventData, { offset: placeholderIndex - draggedIndex }))) {\n draggedItem.removeClass(DRAGGEDCLASS);\n that.reorder(draggedItem, placeholderIndex);\n }\n } else if (connectedListBox) {\n if (!that.trigger(REMOVE, eventData)) {\n that.remove($(draggedItem));\n }\n if (!connectedListBox.trigger(ADD, eventData)) {\n connectedListBox._addItemAt(dataItem, connectedListBox.items().index(that.placeholder));\n }\n }\n that._clear();\n that._draggable.dropped = true;\n that.trigger(DRAGEND, extend({}, eventData, { draggableEvent: e }));\n that._updateToolbar();\n that._updateAllToolbars();\n },\n reorder: function (item, index) {\n var that = this;\n var dataSource = that.dataSource;\n var dataItem = that.dataItem(item);\n var dataItemAtIndex = dataSource.at(index);\n var itemAtIndex = that.items()[index];\n var listItem = $(item);\n if (dataItem && itemAtIndex && dataItemAtIndex) {\n that._removeElement(listItem);\n that._insertElementAt(listItem, index);\n that._updateToolbar();\n }\n },\n remove: function (items) {\n var that = this;\n var listItems = that._getItems(items);\n var itemsLength = listItems.length;\n var i;\n that._unbindDataSource();\n that._unbindDataChange();\n for (i = 0; i < itemsLength; i++) {\n that._removeItem($(listItems[i]));\n }\n that._bindDataChange();\n that._bindDataSource();\n that._syncElement();\n that._updateToolbar();\n that._updateAllToolbars();\n },\n _removeItem: function (item) {\n var that = this;\n var dataSource = that.dataSource;\n var dataItem = that.dataItem(item);\n var transport = dataSource.transport;\n if (!dataItem || !dataSource) {\n return;\n }\n if (typeof dataItem === typeof '') {\n var data = dataSource._data;\n for (var i = 0; i < data.length; i++) {\n if (dataItem === data[i]) {\n data[i] = data[data.length - 1];\n data.pop();\n break;\n }\n }\n } else {\n dataSource.remove(dataItem);\n if (transport && (transport.destroy || (transport.options || {}).destroy) && (!dataItem.isNew || !dataItem.isNew())) {\n dataSource._destroyed.push(dataItem);\n }\n }\n that._removeElement(item);\n },\n _removeElement: function (item) {\n kendo.destroy(item);\n $(item).off().remove();\n },\n dataItem: function (element) {\n var uniqueIdAttr = kendoAttr(UNIQUE_ID);\n var uid = $(element).attr(uniqueIdAttr) || $(element).closest('[' + uniqueIdAttr + ']').attr(uniqueIdAttr);\n if (uid) {\n return this.dataSource.getByUid(uid);\n } else {\n return $(element).html();\n }\n },\n _dataItems: function (items) {\n var dataItems = [];\n var listItems = $(items);\n var itemsLength = listItems.length;\n var i;\n for (i = 0; i < itemsLength; i++) {\n dataItems.push(this.dataItem(listItems.eq(i)));\n }\n return dataItems;\n },\n items: function () {\n var list = this._getList();\n return list.children();\n },\n select: function (items) {\n var that = this;\n var selectable = that.selectable;\n var enabledItems;\n if (isUndefined(items)) {\n return selectable.value();\n }\n enabledItems = that.items().filter(items).filter(ENABLED_ITEMS_SELECTOR);\n if (!selectable.options.multiple) {\n selectable.clear();\n enabledItems = enabledItems.first();\n }\n return selectable.value(enabledItems);\n },\n clearSelection: function () {\n var that = this;\n var selectable = that.selectable;\n if (selectable) {\n selectable.clear();\n }\n },\n enable: function (items, enable) {\n var that = this;\n var enabled = isUndefined(enable) ? true : !!enable;\n var listItems = that._getItems(items);\n var itemsLength = listItems.length;\n var i;\n for (i = 0; i < itemsLength; i++) {\n that._enableItem($(listItems[i]), enabled);\n }\n that._updateAllToolbars();\n },\n _enableItem: function (item, enable) {\n var that = this;\n var dataItem = that.dataItem(item);\n if (dataItem) {\n if (enable) {\n $(item).removeClass(DISABLED_STATE_CLASS);\n } else {\n $(item).addClass(DISABLED_STATE_CLASS).removeClass(SELECTED_STATE_CLASS);\n }\n }\n },\n setDataSource: function (dataSource) {\n var that = this;\n that.options.dataSource = dataSource;\n that._dataSource();\n },\n _dataSource: function () {\n var that = this;\n var options = that.options;\n var dataSource = options.dataSource || {};\n dataSource = $.isArray(dataSource) ? { data: dataSource } : dataSource;\n dataSource.select = that.element;\n dataSource.fields = [\n { field: options.dataTextField },\n { field: options.dataValueField }\n ];\n that._unbindDataSource();\n that.dataSource = DataSource.create(dataSource);\n that._bindDataSource();\n if (that.options.autoBind) {\n that.dataSource.fetch();\n }\n },\n _bindDataChange: function () {\n var dataSource = this.dataSource;\n if (dataSource._data && dataSource._changeHandler) {\n dataSource._data.bind(CHANGE, dataSource._changeHandler);\n dataSource._data.trigger(CHANGE);\n }\n },\n _unbindDataChange: function () {\n var dataSource = this.dataSource;\n if (dataSource._data && dataSource._changeHandler) {\n dataSource._data.unbind(CHANGE, dataSource._changeHandler);\n }\n },\n _bindDataSource: function () {\n var that = this;\n var dataSource = that.dataSource;\n that._dataChangeHandler = proxy(that.refresh, that);\n if (dataSource) {\n dataSource.bind(CHANGE, that._dataChangeHandler);\n }\n },\n _unbindDataSource: function () {\n var that = this;\n var dataSource = that.dataSource;\n if (dataSource) {\n dataSource.unbind(CHANGE, that._dataChangeHandler);\n }\n },\n _wrapper: function () {\n var that = this, element = that.element, wrapper = element.parent('div.k-listbox');\n if (!wrapper[0]) {\n wrapper = element.wrap('<div class=\"k-widget k-listbox\" unselectable=\"on\" />').parent();\n wrapper[0].style.cssText = element[0].style.cssText;\n wrapper[0].title = element[0].title;\n $('<div class=\"k-list-scroller\" />').insertBefore(element);\n }\n that.wrapper = wrapper.addClass(element[0].className).css('display', '');\n that._innerWrapper = $(wrapper[0].firstChild);\n },\n _list: function () {\n var that = this;\n $('<ul class=\\'' + LIST_CLASS + '\\' role=\\'listbox\\'></ul>').appendTo(that._innerWrapper);\n if (that.options.navigatable) {\n that._getList().attr(TABINDEX, that._getTabIndex());\n }\n },\n _templates: function () {\n var that = this;\n var options = this.options;\n var template;\n if (options.template && typeof options.template == 'string') {\n template = kendo.template(options.template);\n } else if (!options.template) {\n template = kendo.template('${' + kendo.expr(options.dataTextField, 'data') + '}', { useWithBlock: false });\n } else {\n template = options.template;\n }\n that.templates = {\n itemTemplate: kendo.template('# var item = data.item, r = data.r; # <li class=\\'k-item\\' role=\\'option\\' aria-selected=\\'false\\'>#=r(item)#</li>', { useWithBlock: false }),\n itemContent: template,\n toolbar: '<div class=\\'' + TOOLBAR_CLASS + '\\'></div>'\n };\n },\n refresh: function () {\n var that = this;\n var view = that.dataSource.view();\n var template = that.templates.itemTemplate;\n var html = '';\n for (var idx = 0; idx < view.length; idx++) {\n html += template({\n item: view[idx],\n r: that.templates.itemContent\n });\n }\n that._getList().html(html);\n that._setItemIds();\n that._createToolbar();\n that._syncElement();\n that._updateToolbar();\n that._updateAllToolbars();\n that.trigger(DATABOUND);\n },\n _syncElement: function () {\n var options = '';\n var view = this.dataSource.view();\n for (var idx = 0; idx < view.length; idx++) {\n options += this._option(view[idx][this.options.dataValueField] || view[idx], view[idx][this.options.dataTextField] || view[idx], true);\n }\n this.element.html(options);\n },\n _option: function (dataValue, dataText) {\n var option = '<option';\n if (dataValue !== undefined) {\n dataValue += '';\n if (dataValue.indexOf('\"') !== -1) {\n dataValue = dataValue.replace(/\"/g, '"');\n }\n option += ' value=\"' + dataValue + '\"';\n }\n option += ' selected>';\n if (dataText !== undefined) {\n option += kendo.htmlEncode(dataText);\n }\n return option += '</option>';\n },\n _setItemIds: function () {\n var that = this;\n var items = that.items();\n var view = that.dataSource.view();\n var viewLength = view.length;\n var i;\n for (i = 0; i < viewLength; i++) {\n items.eq(i).attr(kendoAttr(UNIQUE_ID), view[i].uid).attr('id', view[i].uid);\n }\n },\n _selectable: function () {\n var that = this;\n var selectable = that.options.selectable;\n var selectableOptions = Selectable.parseOptions(selectable);\n if (selectableOptions.multiple) {\n that.element.attr('aria-multiselectable', 'true');\n }\n that.selectable = new Selectable(that._innerWrapper, {\n aria: true,\n multiple: selectableOptions.multiple,\n filter: ENABLED_ITEM_SELECTOR,\n change: proxy(that._onSelect, that)\n });\n },\n _onSelect: function () {\n var that = this;\n that._updateToolbar();\n that._updateAllToolbars();\n that.trigger(CHANGE);\n },\n _destroySelectable: function () {\n var that = this;\n if (that.selectable && that.selectable.element) {\n that.selectable.destroy();\n that.selectable = null;\n }\n },\n _getList: function () {\n return this.wrapper.find(LIST_SELECTOR);\n },\n _getItems: function (items) {\n return this.items().filter(items);\n },\n _createToolbar: function () {\n var that = this;\n var toolbarOptions = that.options.toolbar;\n var position = toolbarOptions.position || RIGHT;\n var toolbarInsertion = position === BOTTOM ? 'insertAfter' : 'insertBefore';\n var tools = toolbarOptions.tools || [];\n var messages = that.options.messages;\n that._destroyToolbar();\n that.wrapper.removeClass(TOOLBAR_POSITION_CLASS_NAMES.join(SPACE));\n if (tools.length && tools.length > 0) {\n var toolbarElement = $(that.templates.toolbar)[toolbarInsertion](that._innerWrapper);\n that.toolbar = new ToolBar(toolbarElement, extend({}, toolbarOptions, {\n listBox: that,\n messages: messages\n }));\n that.wrapper.addClass(TOOLBAR_CLASS + DASH + position);\n }\n },\n _destroyToolbar: function () {\n var that = this;\n if (that.toolbar) {\n that.toolbar.destroy();\n that.toolbar = null;\n }\n },\n _executeCommand: function (commandName) {\n var that = this;\n var command = CommandFactory.current.create(commandName, { listBox: that });\n if (command) {\n command.execute();\n that._updateToolbar();\n that._updateAllToolbars();\n }\n },\n _updateToolbar: function () {\n var toolbar = this.toolbar;\n if (toolbar) {\n toolbar._updateToolStates();\n }\n },\n _updateAllToolbars: function () {\n var listBoxElements = $('select[data-role=\\'listbox\\']');\n var elementsLength = listBoxElements.length;\n var listBox;\n var i;\n for (i = 0; i < elementsLength; i++) {\n listBox = $(listBoxElements[i]).data(KENDO_LISTBOX);\n if (listBox) {\n listBox._updateToolbar();\n }\n }\n }\n });\n kendo.ui.plugin(ListBox);\n var CommandFactory = Class.extend({\n init: function () {\n this._commands = [];\n },\n register: function (commandName, commandType) {\n this._commands.push({\n commandName: commandName,\n commandType: commandType\n });\n },\n create: function (commandName, options) {\n var commands = this._commands;\n var itemsLength = commands.length;\n var name = commandName ? commandName.toLowerCase() : '';\n var match;\n var command;\n var i;\n for (i = 0; i < itemsLength; i++) {\n command = commands[i];\n if (command.commandName.toLowerCase() === name) {\n match = command;\n break;\n }\n }\n if (match) {\n return new match.commandType(options);\n }\n }\n });\n CommandFactory.current = new CommandFactory();\n var ListBoxCommand = Class.extend({\n init: function (options) {\n var that = this;\n that.options = extend({}, that.options, options);\n that.listBox = that.options.listBox;\n },\n options: { listBox: null },\n getItems: function () {\n return $(this.listBox.select());\n },\n execute: noop,\n canExecute: noop\n });\n var RemoveItemsCommand = ListBoxCommand.extend({\n execute: function () {\n var that = this;\n var listBox = that.listBox;\n var items = that.getItems();\n if (!listBox.trigger(REMOVE, {\n dataItems: listBox._dataItems(items),\n items: items\n })) {\n listBox.remove(items);\n }\n },\n canExecute: function () {\n return this.listBox.select().length > 0;\n }\n });\n CommandFactory.current.register(REMOVE, RemoveItemsCommand);\n var MoveItemsCommand = ListBoxCommand.extend({\n execute: function () {\n var that = this;\n if (that.canExecute()) {\n that.moveItems();\n }\n },\n canExecute: noop,\n moveItems: function () {\n var that = this;\n var listBox = that.listBox;\n var options = that.options;\n var items = that.getItems();\n var offset = options.offset;\n var indecesInDom = getSortedDomIndices(items);\n var movedItems = $.makeArray(items.sort(that.itemComparer));\n var moveAction = options.moveAction;\n var movedItem;\n if (!listBox.trigger(REORDER, {\n dataItems: listBox._dataItems(movedItems),\n items: $(movedItems),\n offset: offset\n })) {\n while (movedItems.length > 0 && indecesInDom.length > 0) {\n movedItem = movedItems[moveAction]();\n listBox.reorder(movedItem, indecesInDom[moveAction]() + offset);\n }\n }\n },\n options: {\n offset: 0,\n moveAction: 'pop'\n },\n itemComparer: function (item1, item2) {\n var indexItem1 = $(item1).index();\n var indexItem2 = $(item2).index();\n if (indexItem1 === indexItem2) {\n return 0;\n } else {\n return indexItem1 > indexItem2 ? 1 : -1;\n }\n }\n });\n var MoveUpItemsCommand = MoveItemsCommand.extend({\n options: {\n offset: MOVE_UP_OFFSET,\n moveAction: 'shift'\n },\n canExecute: function () {\n var items = this.getItems();\n var domIndices = getSortedDomIndices(items);\n return domIndices.length > 0 && domIndices[0] > 0;\n }\n });\n CommandFactory.current.register(MOVE_UP, MoveUpItemsCommand);\n var MoveDownItemsCommand = MoveItemsCommand.extend({\n options: {\n offset: MOVE_DOWN_OFFSET,\n moveAction: 'pop'\n },\n canExecute: function () {\n var that = this;\n var items = that.getItems();\n var domIndices = getSortedDomIndices(items);\n return domIndices.length > 0 && $(domIndices).last()[0] < that.listBox.items().length - 1;\n }\n });\n CommandFactory.current.register(MOVE_DOWN, MoveDownItemsCommand);\n var TransferItemsCommand = ListBoxCommand.extend({\n options: { filter: ENABLED_ITEM_SELECTOR },\n execute: function () {\n var that = this;\n var sourceListBox = that.getSourceListBox();\n var items = that.getItems().filter(that.options.filter);\n var dataItems = sourceListBox ? sourceListBox._dataItems(items) : [];\n var destinationListBox = that.getDestinationListBox();\n var updatedSelection = that.getUpdatedSelection(items);\n if (destinationListBox && items.length > 0) {\n if (!destinationListBox.trigger(ADD, {\n dataItems: dataItems,\n items: items\n })) {\n destinationListBox.add(dataItems);\n }\n if (!sourceListBox.trigger(REMOVE, {\n dataItems: dataItems,\n items: items\n })) {\n sourceListBox.remove(items);\n that.updateSelection(updatedSelection);\n }\n }\n },\n getUpdatedSelection: function (items) {\n if (items.length !== 1) {\n return null;\n }\n var that = this;\n var itemFilter = that.options.filter;\n var sourceListBox = that.getSourceListBox();\n var lastEnabledItem = sourceListBox ? sourceListBox.items().filter(itemFilter).last() : null;\n var containsLastItem = $(items).filter(lastEnabledItem).length > 0;\n var itemToSelect = containsLastItem ? $(items).prevAll(itemFilter)[0] : $(items).nextAll(itemFilter)[0];\n if (itemToSelect) {\n return itemToSelect;\n } else {\n return null;\n }\n },\n updateSelection: function (item) {\n var sourceListBox = this.getSourceListBox();\n if (sourceListBox && item) {\n $(sourceListBox.select($(item)));\n sourceListBox._scrollIntoView(item);\n }\n },\n getSourceListBox: noop,\n getDestinationListBox: noop\n });\n var TransferItemsToCommand = TransferItemsCommand.extend({\n canExecute: function () {\n var sourceListBox = this.getSourceListBox();\n return sourceListBox ? sourceListBox.select().length > 0 : false;\n },\n getSourceListBox: function () {\n return this.listBox;\n },\n getDestinationListBox: function () {\n var sourceListBox = this.getSourceListBox();\n return sourceListBox && sourceListBox.options.connectWith ? $(HASH + sourceListBox.options.connectWith).data(KENDO_LISTBOX) : null;\n },\n getItems: function () {\n var sourceListBox = this.getSourceListBox();\n return sourceListBox ? $(sourceListBox.select()) : $();\n }\n });\n CommandFactory.current.register(TRANSFER_TO, TransferItemsToCommand);\n var TransferItemsFromCommand = TransferItemsCommand.extend({\n canExecute: function () {\n var sourceListBox = this.getSourceListBox();\n return sourceListBox ? sourceListBox.select().length > 0 : false;\n },\n getSourceListBox: function () {\n var destinationListBox = this.getDestinationListBox();\n return destinationListBox && destinationListBox.options.connectWith ? $(HASH + destinationListBox.options.connectWith).data(KENDO_LISTBOX) : null;\n },\n getDestinationListBox: function () {\n return this.listBox;\n },\n getItems: function () {\n var sourceListBox = this.getSourceListBox();\n return sourceListBox ? $(sourceListBox.select()) : $();\n }\n });\n CommandFactory.current.register(TRANSFER_FROM, TransferItemsFromCommand);\n var TransferAllItemsToCommand = TransferItemsToCommand.extend({\n canExecute: function () {\n var sourceListBox = this.getSourceListBox();\n return sourceListBox ? sourceListBox.wrapper.find(ENABLED_ITEMS_SELECTOR).length > 0 : false;\n },\n getItems: function () {\n var sourceListBox = this.getSourceListBox();\n return sourceListBox ? sourceListBox.items() : $();\n },\n getUpdatedSelection: noop,\n updateSelection: noop\n });\n CommandFactory.current.register(TRANSFER_ALL_TO, TransferAllItemsToCommand);\n var TransferAllItemsFromCommand = TransferItemsFromCommand.extend({\n canExecute: function () {\n var sourceListBox = this.getSourceListBox();\n return sourceListBox ? sourceListBox.wrapper.find(ENABLED_ITEMS_SELECTOR).length > 0 : false;\n },\n getItems: function () {\n var sourceListBox = this.getSourceListBox();\n return sourceListBox ? sourceListBox.items() : $();\n },\n getUpdatedSelection: noop,\n updateSelection: noop\n });\n CommandFactory.current.register(TRANSFER_ALL_FROM, TransferAllItemsFromCommand);\n var ToolBar = Class.extend({\n init: function (element, options) {\n var that = this;\n that.element = $(element).addClass(TOOLBAR_CLASS);\n that.options = extend({}, that.options, options);\n that.listBox = that.options.listBox;\n that._initTemplates();\n that._createTools();\n that._updateToolStates();\n that._attachEventHandlers();\n },\n destroy: function () {\n var that = this;\n that._detachEventHandlers();\n kendo.destroy(that.element);\n that.element.remove();\n that.element = null;\n },\n options: {\n position: RIGHT,\n tools: []\n },\n _initTemplates: function () {\n this.templates = { tool: kendoTemplate('<li>' + '<a href=\\'\\\\\\\\#\\' class=\\'k-button k-button-icon\\' data-command=\\'#= command #\\' title=\\'#= text #\\' aria-label=\\'#= text #\\' role=\\'button\\'>' + '<span class=\\'k-icon #= iconClass #\\'></span>' + '</a>' + '</li>') };\n },\n _createTools: function () {\n var that = this;\n var tools = that.options.tools;\n var toolsLength = tools.length;\n var toolsMessages = that.options.messages.tools;\n var toolList = that._createToolList();\n var tool;\n var i;\n for (i = 0; i < toolsLength; i++) {\n tool = extend({}, ToolBar.defaultTools[tools[i]], { text: toolsMessages[tools[i]] });\n if (tool) {\n toolList.append($(that.templates.tool(tool)));\n }\n }\n that.element.append(toolList);\n },\n _createToolList: function () {\n return $('<ul class=\\'k-reset\\' />');\n },\n _attachEventHandlers: function () {\n var that = this;\n that.element.on(CLICK, TOOL_SELECTOR, proxy(that._onToolClick, that));\n },\n _detachEventHandlers: function () {\n this.element.off(NS).find('*').off(NS);\n },\n _onToolClick: function (e) {\n e.preventDefault();\n this._executeToolCommand($(e.currentTarget).data(COMMAND));\n },\n _executeToolCommand: function (command) {\n var that = this;\n var listBox = that.listBox;\n if (listBox) {\n listBox._executeCommand(command);\n }\n },\n _updateToolStates: function () {\n var that = this;\n var tools = that.options.tools;\n var toolsLength = tools.length;\n var i;\n for (i = 0; i < toolsLength; i++) {\n that._updateToolState(tools[i]);\n }\n },\n _updateToolState: function (toolName) {\n var that = this;\n var command = CommandFactory.current.create(toolName, { listBox: that.listBox });\n var tool = that.element.find('[data-command=\\'' + toolName + '\\']');\n var toolElement = tool[0];\n if (toolElement && command && command.canExecute) {\n if (command.canExecute()) {\n tool.removeClass(DISABLED_STATE_CLASS).removeAttr(TABINDEX);\n } else {\n tool.addClass(DISABLED_STATE_CLASS).attr(TABINDEX, '-1');\n }\n }\n }\n });\n ToolBar.defaultTools = {\n remove: {\n command: REMOVE,\n iconClass: 'k-i-x'\n },\n moveUp: {\n command: MOVE_UP,\n iconClass: 'k-i-arrow-60-up'\n },\n moveDown: {\n command: MOVE_DOWN,\n iconClass: 'k-i-arrow-60-down'\n },\n transferTo: {\n command: TRANSFER_TO,\n iconClass: 'k-i-arrow-60-right'\n },\n transferFrom: {\n command: TRANSFER_FROM,\n iconClass: 'k-i-arrow-60-left'\n },\n transferAllTo: {\n command: TRANSFER_ALL_TO,\n iconClass: 'k-i-arrow-double-60-right'\n },\n transferAllFrom: {\n command: TRANSFER_ALL_FROM,\n iconClass: 'k-i-arrow-double-60-left'\n }\n };\n extend(ListBox, { ToolBar: ToolBar });\n function isInputElement(element) {\n return $(element).is(':button,a,:input,a>.k-icon,textarea,span.k-select,span.k-icon,span.k-link,label.k-checkbox-label,.k-input,.k-multiselect-wrap,.k-picker-wrap,.k-picker-wrap>.k-selected-color,.k-tool-icon,.k-dropdown');\n }\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.loader', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'loader',\n name: 'Loader',\n category: 'web',\n description: 'The Loader is a visual indicator of loading data across different parts of the page.',\n depends: ['core']\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, ui = kendo.ui, HIDDEN = 'k-hidden', ARIA_LABEL = 'aria-label', ARIA_HIDDEN = 'aria-hidden';\n var loaderClasses = {\n loader: 'k-widget k-loader',\n canvas: 'k-loader-canvas',\n segment: 'k-loader-segment'\n };\n var loaderTypes = {\n 'pulsing': {\n className: 'pulsing-2',\n segments: 2\n },\n 'infinite-spinner': {\n className: 'spinner-3',\n segments: 3\n },\n 'converging-spinner': {\n className: 'spinner-4',\n segments: 4\n }\n };\n var Loader = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n that._render();\n that._appearance();\n kendo.notify(that);\n },\n destroy: function () {\n var that = this;\n Widget.fn.destroy.call(that);\n },\n options: {\n name: 'Loader',\n themeColor: 'primary',\n sizes: {\n 'small': 'sm',\n 'medium': 'md',\n 'large': 'lg'\n },\n size: 'medium',\n type: 'pulsing',\n visible: true,\n messages: { 'loading': 'Loading' },\n _classNames: []\n },\n _render: function () {\n var that = this, wrapper = that.element, type = that.options.type, typeData = loaderTypes[type] === undefined ? type : loaderTypes[type], segments = [];\n wrapper.empty().attr(ARIA_LABEL, that.options.messages.loading);\n if (typeData.segments) {\n for (var i = 0; i < typeData.segments; i += 1) {\n segments.push($('<span/>').addClass(loaderClasses.segment));\n }\n }\n $('<div>').addClass(loaderClasses.canvas).append(segments).appendTo(wrapper);\n },\n _appearance: function () {\n var that = this;\n that._themeColor = that.options.themeColor;\n that._sizes = that.options.sizes;\n that._size = that.options.size;\n that._type = that.options.type;\n that._visible = that.options.visible;\n that._updateClassNames();\n },\n _updateClassNames: function () {\n var that = this, classNames = [loaderClasses.loader], keepClassNames = that.options._classNames, themeColor = that._themeColor, sizes = that._sizes, size = that._size, type = that._type, typeData = loaderTypes[type] === undefined ? type : loaderTypes[type], sizeAbbr = sizes[size] === undefined ? size : sizes[size], visible = that._visible;\n that.element.removeClass(function (index, className) {\n if (className.indexOf('k-') === 0 && keepClassNames.indexOf(className) === -1) {\n that.element.removeClass(className);\n }\n });\n if (typeof themeColor === 'string' && themeColor !== '' && themeColor !== 'inherit') {\n classNames.push('k-loader-' + themeColor);\n }\n if (typeof size === 'string' && size !== '' && sizeAbbr !== '') {\n classNames.push('k-loader-' + sizeAbbr);\n }\n if (typeof type === 'string' && type !== '') {\n classNames.push('k-loader-' + ($.isPlainObject(typeData) ? typeData.className : type));\n }\n if (visible === false) {\n classNames.push(HIDDEN);\n }\n that.element.attr(ARIA_HIDDEN, !visible);\n that.element.addClass(classNames.join(' '));\n },\n setOptions: function (options) {\n var that = this;\n Widget.fn.setOptions.call(that, options);\n that._render();\n that._appearance();\n },\n themeColor: function (color) {\n var that = this;\n if (arguments.length === 0 || color === undefined) {\n return that._themeColor;\n }\n that._themeColor = color;\n that._updateClassNames();\n },\n hide: function () {\n var that = this;\n that._visible = false;\n that._updateClassNames();\n },\n show: function () {\n var that = this;\n that._visible = true;\n that._updateClassNames();\n }\n });\n ui.plugin(Loader);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.textbox', [\n 'kendo.core',\n 'kendo.floatinglabel'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'textbox',\n name: 'TextBox',\n category: 'web',\n description: 'The TextBox widget enables you to style and provide a floating label functionality to input elements',\n depends: [\n 'core',\n 'floatinglabel'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, ui = kendo.ui, isPlainObject = $.isPlainObject, NS = '.kendoTextBox', CHANGE = 'change', DISABLED = 'disabled', READONLY = 'readonly', INPUT = 'k-input', FOCUSED = 'k-state-focused', LABELCLASSES = 'k-label k-input-label', STATEDISABLED = 'k-state-disabled', NOCLICKCLASS = 'k-no-click', ARIA_DISABLED = 'aria-disabled', proxy = $.proxy;\n var TextBox = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n options = $.extend(true, {}, options);\n that.options.value = options.value || that.element.val();\n that.options.readonly = options.readonly !== undefined ? options.readonly : Boolean(that.element.attr('readonly'));\n that.options.enable = options.enable !== undefined ? options.enable : !Boolean(that.element.attr('disabled'));\n that.options.placeholder = options.placeholder || that.element.attr('placeholder');\n that.value(that.options.value);\n that._wrapper();\n that._label();\n that._editable({\n readonly: that.options.readonly,\n disable: !that.options.enable\n });\n that.element.addClass(INPUT).attr('placeholder', that.options.placeholder).attr('autocomplete', 'off');\n kendo.notify(that);\n },\n events: [CHANGE],\n options: {\n name: 'TextBox',\n value: '',\n readonly: false,\n enable: true,\n placeholder: '',\n label: null\n },\n value: function (value) {\n var that = this;\n if (value === undefined) {\n return that._value;\n }\n that._value = value;\n that.element.val(value);\n },\n readonly: function (readonly) {\n var that = this;\n this._editable({\n readonly: readonly === undefined ? true : readonly,\n disable: false\n });\n if (that.floatingLabel) {\n that.floatingLabel.readonly(readonly === undefined ? true : readonly);\n }\n },\n enable: function (enable) {\n var that = this;\n this._editable({\n readonly: false,\n disable: !(enable = enable === undefined ? true : enable)\n });\n if (that.floatingLabel) {\n that.floatingLabel.enable(enable = enable === undefined ? true : enable);\n }\n },\n focus: function () {\n var that = this;\n that.element[0].focus();\n },\n destroy: function () {\n var that = this;\n if (that.floatingLabel) {\n that.floatingLabel.destroy();\n }\n that.element.off(NS);\n Widget.fn.destroy.call(that);\n },\n _editable: function (options) {\n var that = this;\n var element = that.element;\n var wrapper = that.wrapper;\n var disable = options.disable;\n var readonly = options.readonly;\n element.off(NS);\n if (!readonly && !disable) {\n element.removeAttr(DISABLED).removeAttr(READONLY).attr(ARIA_DISABLED, false);\n wrapper.removeClass(STATEDISABLED).removeClass(NOCLICKCLASS);\n element.on('focusin' + NS, proxy(that._focusin, that));\n element.on('focusout' + NS, proxy(that._focusout, that));\n } else {\n element.attr(DISABLED, disable).attr(READONLY, readonly).attr(ARIA_DISABLED, disable);\n wrapper.toggleClass(STATEDISABLED, disable).toggleClass(NOCLICKCLASS, readonly);\n }\n },\n _label: function () {\n var that = this;\n var element = that.element;\n var options = that.options;\n var id = element.attr('id');\n var floating;\n var labelText;\n if (options.label !== null) {\n floating = isPlainObject(options.label) ? options.label.floating : false;\n labelText = isPlainObject(options.label) ? options.label.content : options.label;\n if (floating) {\n that._floatingLabelContainer = that.wrapper.wrap('<span></span>').parent();\n that.floatingLabel = new kendo.ui.FloatingLabel(that._floatingLabelContainer, { widget: that });\n }\n if (kendo.isFunction(labelText)) {\n labelText = labelText.call(that);\n }\n if (!labelText) {\n labelText = '';\n }\n if (!id) {\n id = options.name + '_' + kendo.guid();\n element.attr('id', id);\n }\n that._inputLabel = $('<label class=\\'' + LABELCLASSES + '\\' for=\\'' + id + '\\'>' + labelText + '</label>\\'').insertBefore(that.wrapper);\n }\n },\n _focusin: function () {\n var that = this;\n that.wrapper.addClass(FOCUSED);\n },\n _focusout: function () {\n var that = this;\n var value = that._value;\n var newValue = that.element.val();\n that.wrapper.removeClass(FOCUSED);\n if (value !== newValue) {\n that._value = newValue;\n that.trigger(CHANGE);\n }\n },\n _wrapper: function () {\n var that = this;\n var element = that.element;\n var DOMElement = element[0];\n var wrapper;\n wrapper = element.wrap('<span class=\\'k-widget k-textbox\\'></span>').parent();\n wrapper[0].style.cssText = DOMElement.style.cssText;\n DOMElement.style.width = '100%';\n that._inputWrapper = that.wrapper = wrapper.addClass(DOMElement.className).removeClass('input-validation-error');\n }\n });\n ui.plugin(TextBox);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.textarea', [\n 'kendo.core',\n 'kendo.floatinglabel'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'textarea',\n name: 'TextArea',\n category: 'web',\n description: 'The TextArea widget represents a multi-line plain-text editing control which enables you to style and provide a floating label functionality to textarea elements',\n depends: [\n 'core',\n 'floatinglabel'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, ui = kendo.ui, isPlainObject = $.isPlainObject, NS = '.kendoTextArea', CHANGE = 'change', DISABLED = 'disabled', READONLY = 'readonly', INPUT = 'k-input', FOCUSED = 'k-state-focused', LABELCLASSES = 'k-label k-input-label', STATEDISABLED = 'k-state-disabled', NOCLICKCLASS = 'k-no-click', ARIA_DISABLED = 'aria-disabled', TEXTAREACONTAINER = 'k-textarea-container', proxy = $.proxy;\n var TextArea = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n options = $.extend(true, {}, options);\n that.options.value = options.value || that.element.val();\n that.options.readonly = options.readonly !== undefined ? options.readonly : Boolean(that.element.attr('readonly'));\n that.options.enable = options.enable !== undefined ? options.enable : !Boolean(that.element.attr('disabled'));\n that.options.placeholder = options.placeholder || that.element.attr('placeholder');\n if (!that.options.value.replace(/\\s/g, '').length) {\n that.options.value = '';\n that.element.val('');\n }\n that.value(that.options.value);\n that._wrapper();\n that._label();\n that._editable({\n readonly: that.options.readonly,\n disable: !that.options.enable\n });\n that._applyAttributes();\n that.element.addClass(INPUT).css('resize', that.options.resizable).attr('autocomplete', 'off');\n kendo.notify(that);\n },\n events: [CHANGE],\n attributes: [\n 'maxLength',\n 'rows',\n 'placeholder'\n ],\n options: {\n name: 'TextArea',\n value: '',\n readonly: false,\n enable: true,\n placeholder: '',\n label: null,\n resizable: 'none',\n maxLength: null,\n cols: 20,\n rows: 1\n },\n _applyAttributes: function () {\n var that = this;\n var property;\n var attributes = {};\n for (property in that.attributes) {\n attributes[that.attributes[property]] = that.options[that.attributes[property]];\n }\n that.element.attr(attributes);\n },\n value: function (value) {\n var that = this;\n if (value === undefined) {\n return that._value;\n }\n that._value = value;\n that.element.val(value);\n },\n readonly: function (readonly) {\n var that = this;\n this._editable({\n readonly: readonly === undefined ? true : readonly,\n disable: false\n });\n if (that.floatingLabel) {\n that.floatingLabel.readonly(readonly === undefined ? true : readonly);\n }\n },\n enable: function (enable) {\n var that = this;\n this._editable({\n readonly: false,\n disable: !(enable = enable === undefined ? true : enable)\n });\n if (that.floatingLabel) {\n that.floatingLabel.enable(enable = enable === undefined ? true : enable);\n }\n },\n focus: function () {\n var that = this;\n that.element[0].focus();\n },\n destroy: function () {\n var that = this;\n if (that.floatingLabel) {\n that.floatingLabel.destroy();\n }\n that.element.off(NS);\n Widget.fn.destroy.call(that);\n },\n _editable: function (options) {\n var that = this;\n var element = that.element;\n var wrapper = that.wrapper;\n var disable = options.disable;\n var readonly = options.readonly;\n element.off(NS);\n if (!readonly && !disable) {\n element.removeAttr(DISABLED).removeAttr(READONLY).attr(ARIA_DISABLED, false);\n wrapper.removeClass(STATEDISABLED).removeClass(NOCLICKCLASS);\n element.on('focusin' + NS, proxy(that._focusin, that));\n element.on('focusout' + NS, proxy(that._focusout, that));\n } else {\n element.attr(DISABLED, disable).attr(READONLY, readonly).attr(ARIA_DISABLED, disable);\n wrapper.toggleClass(STATEDISABLED, disable).toggleClass(NOCLICKCLASS, readonly);\n }\n },\n _label: function () {\n var that = this;\n var element = that.element;\n var options = that.options;\n var id = element.attr('id');\n var floating;\n var labelText;\n if (options.label !== null) {\n floating = isPlainObject(options.label) ? options.label.floating : false;\n labelText = isPlainObject(options.label) ? options.label.content : options.label;\n if (floating) {\n that._floatingLabelContainer = that.wrapper.wrap('<span></span>').parent();\n that.floatingLabel = new kendo.ui.FloatingLabel(that._floatingLabelContainer, { widget: that });\n that._floatingLabelContainer.addClass(TEXTAREACONTAINER);\n }\n if (kendo.isFunction(labelText)) {\n labelText = labelText.call(that);\n }\n if (!labelText) {\n labelText = '';\n }\n if (!id) {\n id = options.name + '_' + kendo.guid();\n element.attr('id', id);\n }\n that._inputLabel = $('<label class=\\'' + LABELCLASSES + '\\' for=\\'' + id + '\\'>' + labelText + '</label>\\'').insertBefore(that.wrapper);\n }\n },\n _focusin: function () {\n var that = this;\n that.wrapper.addClass(FOCUSED);\n },\n _focusout: function () {\n var that = this;\n var value = that._value;\n var newValue = that.element.val();\n that.wrapper.removeClass(FOCUSED);\n if (value !== newValue) {\n that._value = newValue;\n that.trigger(CHANGE);\n }\n },\n _wrapper: function () {\n var that = this;\n var element = that.element;\n var DOMElement = element[0];\n var wrapper;\n wrapper = element.wrap('<span class=\\'k-widget k-textarea\\'></span>').parent();\n wrapper[0].style.cssText = DOMElement.style.cssText;\n DOMElement.style.width = '100%';\n that.wrapper = wrapper.addClass(DOMElement.className).removeClass('input-validation-error');\n }\n });\n ui.plugin(TextArea);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.maskedtextbox', [\n 'kendo.core',\n 'kendo.floatinglabel'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'maskedtextbox',\n name: 'MaskedTextBox',\n category: 'web',\n description: 'The MaskedTextBox widget allows to specify a mask type on an input field.',\n depends: [\n 'core',\n 'floatinglabel'\n ]\n };\n (function ($, undefined) {\n var global = window;\n var min = global.Math.min;\n var kendo = global.kendo;\n var caret = kendo.caret;\n var keys = kendo.keys;\n var ui = kendo.ui;\n var Widget = ui.Widget;\n var NS = '.kendoMaskedTextBox';\n var isPlainObject = $.isPlainObject;\n var proxy = $.proxy;\n var setTimeout = window.setTimeout;\n var LABELCLASSES = 'k-label k-input-label';\n var STATEDISABLED = 'k-state-disabled';\n var STATEINVALID = 'k-state-invalid';\n var DISABLED = 'disabled';\n var READONLY = 'readonly';\n var CHANGE = 'change';\n var MOUSEUP = 'mouseup';\n var DROP = 'drop';\n var KEYDOWN = 'keydown';\n var PASTE = 'paste';\n var INPUT = 'input';\n function ns(name) {\n return name + NS;\n }\n var INPUT_EVENT_NAME = ns(kendo.support.propertyChangeEvent ? 'propertychange' : INPUT);\n function stringDiffStart(str1, str2) {\n var i = 0;\n while (i < str2.length) {\n if (str1[i] !== str2[i]) {\n break;\n }\n i++;\n }\n return i;\n }\n var MaskedTextBox = Widget.extend({\n init: function (element, options) {\n var that = this;\n var DOMElement;\n Widget.fn.init.call(that, element, options);\n that._rules = $.extend({}, that.rules, that.options.rules);\n element = that.element;\n DOMElement = element[0];\n that._wrapper();\n that._tokenize();\n that._form();\n that.element.addClass('k-textbox').attr('autocomplete', 'off').on('focus' + NS, function () {\n var value = DOMElement.value;\n if (!value) {\n DOMElement.value = that._old = that._emptyMask;\n } else {\n that._togglePrompt(true);\n }\n that._oldValue = value;\n that._timeoutId = setTimeout(function () {\n caret(element, 0, value ? that._maskLength : 0);\n });\n }).on('focusout' + NS, function () {\n var value = element.val();\n clearTimeout(that._timeoutId);\n DOMElement.value = that._old = '';\n if (value !== that._emptyMask) {\n DOMElement.value = that._old = value;\n }\n that._change();\n that._togglePrompt();\n });\n var disabled = element.is('[disabled]') || $(that.element).parents('fieldset').is(':disabled');\n if (disabled) {\n that.enable(false);\n } else {\n that.readonly(element.is('[readonly]'));\n }\n that.value(that.options.value || element.val());\n that._validationIcon = $('<span class=\\'k-icon k-i-warning\\'></span>').insertAfter(element);\n that._label();\n kendo.notify(that);\n },\n options: {\n name: 'MaskedTextBox',\n clearPromptChar: false,\n unmaskOnPost: false,\n promptChar: '_',\n culture: '',\n rules: {},\n value: '',\n mask: '',\n label: null\n },\n events: [CHANGE],\n rules: {\n '0': /\\d/,\n '9': /\\d|\\s/,\n '#': /\\d|\\s|\\+|\\-/,\n 'L': /[a-zA-Z]/,\n '?': /[a-zA-Z]|\\s/,\n '&': /\\S/,\n 'C': /./,\n 'A': /[a-zA-Z0-9]/,\n 'a': /[a-zA-Z0-9]|\\s/\n },\n setOptions: function (options) {\n var that = this;\n Widget.fn.setOptions.call(that, options);\n that._rules = $.extend({}, that.rules, that.options.rules);\n that._tokenize();\n this._unbindInput();\n this._bindInput();\n that.value(that.element.val());\n },\n destroy: function () {\n var that = this;\n if (that.floatingLabel) {\n that.floatingLabel.destroy();\n }\n that.element.off(NS);\n if (that._formElement) {\n that._formElement.off('reset', that._resetHandler);\n that._formElement.off('submit', that._submitHandler);\n }\n Widget.fn.destroy.call(that);\n },\n raw: function () {\n var unmasked = this._unmask(this.element.val(), 0);\n return unmasked.replace(new RegExp(escapeRegExp(this.options.promptChar), 'g'), '');\n },\n value: function (value) {\n var element = this.element;\n var emptyMask = this._emptyMask;\n if (value === undefined) {\n return this.element.val();\n }\n if (value === null) {\n value = '';\n }\n if (!emptyMask) {\n this._oldValue = value;\n element.val(value);\n return;\n }\n value = this._unmask(value + '');\n element.val(value ? emptyMask : '');\n this._mask(0, this._maskLength, value);\n this._unmaskedValue = null;\n value = element.val();\n this._oldValue = value;\n if (kendo._activeElement() !== element) {\n if (value === emptyMask) {\n element.val('');\n } else {\n this._togglePrompt();\n }\n }\n },\n _togglePrompt: function (show) {\n var DOMElement = this.element[0];\n var value = DOMElement.value;\n if (this.options.clearPromptChar) {\n if (!show) {\n value = value.replace(new RegExp(escapeRegExp(this.options.promptChar), 'g'), ' ');\n } else {\n value = this._oldValue;\n }\n DOMElement.value = this._old = value;\n }\n },\n readonly: function (readonly) {\n var that = this;\n this._editable({\n readonly: readonly === undefined ? true : readonly,\n disable: false\n });\n if (that.floatingLabel) {\n that.floatingLabel.readonly(readonly === undefined ? true : readonly);\n }\n },\n enable: function (enable) {\n var that = this;\n this._editable({\n readonly: false,\n disable: !(enable = enable === undefined ? true : enable)\n });\n if (that.floatingLabel) {\n that.floatingLabel.enable(enable = enable === undefined ? true : enable);\n }\n },\n _bindInput: function () {\n var that = this;\n if (that._maskLength) {\n if (that.options.$angular) {\n that.element.off(INPUT);\n }\n that.element.on(ns(KEYDOWN), proxy(that._keydown, that)).on(ns(DROP), proxy(that._drop, that)).on(ns(CHANGE), proxy(that._trackChange, that)).on(INPUT_EVENT_NAME, proxy(that._inputHandler, that));\n if (kendo.support.browser.msie) {\n var version = kendo.support.browser.version;\n if (version > 8 && version < 11) {\n var events = [\n ns(MOUSEUP),\n ns(DROP),\n ns(KEYDOWN),\n ns(PASTE)\n ].join(' ');\n that.element.on(events, proxy(that._legacyIEInputHandler, that));\n }\n }\n }\n },\n _unbindInput: function () {\n var events = [\n INPUT_EVENT_NAME,\n ns(KEYDOWN),\n ns(MOUSEUP),\n ns(DROP),\n ns(PASTE)\n ].join(' ');\n this.element.off(events);\n },\n _editable: function (options) {\n var that = this;\n var element = that.element;\n var wrapper = that.wrapper;\n var disable = options.disable;\n var readonly = options.readonly;\n that._unbindInput();\n if (!readonly && !disable) {\n element.removeAttr(DISABLED).removeAttr(READONLY);\n wrapper.removeClass(STATEDISABLED);\n that._bindInput();\n } else {\n element.attr(DISABLED, disable).attr(READONLY, readonly);\n wrapper.toggleClass(STATEDISABLED, disable);\n }\n },\n _change: function () {\n var that = this;\n var value = that.value();\n if (value !== that._oldValue) {\n that._oldValue = value;\n that.trigger(CHANGE);\n that.element.trigger(CHANGE);\n } else if (value === '' && that.__changing) {\n that.element.trigger(CHANGE);\n }\n },\n inputChange: function (backward) {\n var that = this;\n var old = that._old;\n var element = that.element[0];\n var value = element.value;\n var selection = caret(element);\n var cursor = selection[1];\n var lengthDiff = value.length - old.length;\n var mobile = kendo.support.mobileOS;\n if (that.__dropping && lengthDiff < 0) {\n return;\n }\n if (lengthDiff === -1 && mobile.android && mobile.browser === 'chrome') {\n backward = true;\n }\n var contentStart = min(cursor, stringDiffStart(value, old));\n var content = value.substring(contentStart, cursor);\n element.value = value.substring(0, contentStart) + that._emptyMask.substring(contentStart);\n var caretPos = that._mask(contentStart, cursor, content);\n var endContent = that._trimStartPromptChars(value.substring(cursor), min(lengthDiff, caretPos - contentStart));\n var unmasked = that._unmask(endContent, old.length - endContent.length);\n that._mask(caretPos, caretPos, unmasked);\n if (backward) {\n caretPos = that._findCaretPosBackwards(contentStart);\n }\n caret(element, caretPos);\n that.__dropping = false;\n },\n _trimStartPromptChars: function (content, count) {\n var promptChar = this.options.promptChar;\n while (count-- > 0 && content.indexOf(promptChar) === 0) {\n content = content.substring(1);\n }\n return content;\n },\n _findCaretPosBackwards: function (pos) {\n var caretStart = this._find(pos, true);\n if (caretStart < pos) {\n caretStart += 1;\n }\n return caretStart;\n },\n _inputHandler: function () {\n if (kendo._activeElement() !== this.element[0]) {\n return;\n }\n this.inputChange(this.__backward);\n },\n _legacyIEInputHandler: function (e) {\n var that = this;\n var input = that.element[0];\n var value = input.value;\n var type = e.type;\n that.__pasting = type === 'paste';\n setTimeout(function () {\n if (type === 'mouseup' && that.__pasting) {\n return;\n }\n if (input.value && input.value !== value) {\n that.inputChange(that.__backward);\n }\n });\n },\n _trackChange: function () {\n var that = this;\n that.__changing = true;\n setTimeout(function () {\n that.__changing = false;\n });\n },\n _form: function () {\n var that = this;\n var element = that.element;\n var formId = element.attr('form');\n var form = formId ? $('#' + formId) : element.closest('form');\n if (form[0]) {\n that._resetHandler = function () {\n setTimeout(function () {\n that.value(element[0].value);\n });\n };\n that._submitHandler = function () {\n that.element[0].value = that._old = that.raw();\n };\n if (that.options.unmaskOnPost) {\n form.on('submit', that._submitHandler);\n }\n that._formElement = form.on('reset', that._resetHandler);\n }\n },\n _keydown: function (e) {\n var key = e.keyCode;\n this.__backward = key === keys.BACKSPACE;\n if (key === keys.ENTER) {\n this._change();\n }\n },\n _drop: function () {\n this.__dropping = true;\n },\n _find: function (idx, backward) {\n var value = this.element.val() || this._emptyMask;\n var step = 1;\n if (backward === true) {\n step = -1;\n }\n while (idx > -1 || idx <= this._maskLength) {\n if (value.charAt(idx) !== this.tokens[idx]) {\n return idx;\n }\n idx += step;\n }\n return -1;\n },\n _mask: function (start, end, value, backward) {\n var element = this.element[0];\n var current = element.value || this._emptyMask;\n var empty = this.options.promptChar;\n var valueLength;\n var chrIdx = 0;\n var unmasked;\n var chr;\n var idx;\n start = this._find(start, backward);\n if (start > end) {\n end = start;\n }\n unmasked = this._unmask(current.substring(end), end);\n value = this._unmask(value, start);\n valueLength = value.length;\n if (value) {\n unmasked = unmasked.replace(new RegExp('^_{0,' + valueLength + '}'), '');\n }\n value += unmasked;\n current = current.split('');\n chr = value.charAt(chrIdx);\n while (start < this._maskLength) {\n current[start] = chr || empty;\n chr = value.charAt(++chrIdx);\n if (idx === undefined && chrIdx > valueLength) {\n idx = start;\n }\n start = this._find(start + 1);\n }\n element.value = this._old = current.join('');\n if (kendo._activeElement() === element) {\n if (idx === undefined) {\n idx = this._maskLength;\n }\n caret(element, idx);\n }\n return idx;\n },\n _unmask: function (value, idx) {\n if (!value) {\n return '';\n }\n if (this._unmaskedValue === value) {\n return this._unmaskedValue;\n }\n value = (value + '').split('');\n var chr;\n var token;\n var chrIdx = 0;\n var tokenIdx = idx || 0;\n var empty = this.options.promptChar;\n var valueLength = value.length;\n var tokensLength = this.tokens.length;\n var result = '';\n while (tokenIdx < tokensLength) {\n chr = value[chrIdx];\n token = this.tokens[tokenIdx];\n if (chr === token || chr === empty) {\n result += chr === empty ? empty : '';\n chrIdx += 1;\n tokenIdx += 1;\n } else if (typeof token !== 'string') {\n if (token && token.test && token.test(chr) || $.isFunction(token) && token(chr)) {\n result += chr;\n tokenIdx += 1;\n } else {\n if (valueLength === 1) {\n this._blinkInvalidState();\n }\n }\n chrIdx += 1;\n } else {\n tokenIdx += 1;\n }\n if (chrIdx >= valueLength) {\n break;\n }\n }\n this._unmaskedValue = result;\n return result;\n },\n _label: function () {\n var that = this;\n var element = that.element;\n var options = that.options;\n var id = element.attr('id');\n var floating;\n var labelText;\n if (options.label !== null) {\n floating = isPlainObject(options.label) ? options.label.floating : false;\n labelText = isPlainObject(options.label) ? options.label.content : options.label;\n if (floating) {\n that._floatingLabelContainer = that.wrapper.wrap('<span></span>').parent();\n that.floatingLabel = new kendo.ui.FloatingLabel(that._floatingLabelContainer, { widget: that });\n }\n if (kendo.isFunction(labelText)) {\n labelText = labelText.call(that);\n }\n if (!labelText) {\n labelText = '';\n }\n if (!id) {\n id = options.name + '_' + kendo.guid();\n element.attr('id', id);\n }\n that._inputLabel = $('<label class=\\'' + LABELCLASSES + '\\' for=\\'' + id + '\\'>' + labelText + '</label>\\'').insertBefore(that.wrapper);\n }\n },\n _wrapper: function () {\n var that = this;\n var element = that.element;\n var DOMElement = element[0];\n var wrapper = element.wrap('<span class=\\'k-widget k-maskedtextbox\\'></span>').parent();\n wrapper[0].style.cssText = DOMElement.style.cssText;\n DOMElement.style.width = '100%';\n that.wrapper = wrapper.addClass(DOMElement.className).removeClass('input-validation-error');\n },\n _blinkInvalidState: function () {\n var that = this;\n that.wrapper.addClass(STATEINVALID);\n clearTimeout(that._invalidStateTimeout);\n that._invalidStateTimeout = setTimeout(proxy(that._removeInvalidState, that), 100);\n },\n _removeInvalidState: function () {\n var that = this;\n that.wrapper.removeClass(STATEINVALID);\n that._invalidStateTimeout = null;\n },\n _tokenize: function () {\n var tokens = [];\n var tokenIdx = 0;\n var mask = this.options.mask || '';\n var maskChars = mask.split('');\n var length = maskChars.length;\n var idx = 0;\n var chr;\n var rule;\n var emptyMask = '';\n var promptChar = this.options.promptChar;\n var numberFormat = kendo.getCulture(this.options.culture).numberFormat;\n var rules = this._rules;\n for (; idx < length; idx++) {\n chr = maskChars[idx];\n rule = rules[chr];\n if (rule) {\n tokens[tokenIdx] = rule;\n emptyMask += promptChar;\n tokenIdx += 1;\n } else {\n if (chr === '.' || chr === ',') {\n chr = numberFormat[chr];\n } else if (chr === '$') {\n chr = numberFormat.currency.symbol;\n } else if (chr === '\\\\') {\n idx += 1;\n chr = maskChars[idx];\n }\n chr = chr.split('');\n for (var i = 0, l = chr.length; i < l; i++) {\n tokens[tokenIdx] = chr[i];\n emptyMask += chr[i];\n tokenIdx += 1;\n }\n }\n }\n this.tokens = tokens;\n this._emptyMask = emptyMask;\n this._maskLength = emptyMask.length;\n }\n });\n function escapeRegExp(text) {\n return text.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n }\n ui.plugin(MaskedTextBox);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.menu', [\n 'kendo.popup',\n 'kendo.data'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'menu',\n name: 'Menu',\n category: 'web',\n description: 'The Menu widget displays hierarchical data as a multi-level menu.',\n depends: [\n 'popup',\n 'data',\n 'data.odata'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, activeElement = kendo._activeElement, touch = kendo.support.touch && kendo.support.mobileOS, isArray = $.isArray, HierarchicalDataSource = kendo.data.HierarchicalDataSource, MOUSEDOWN = 'mousedown', CLICK = 'click', DELAY = 30, SCROLLSPEED = 50, extend = $.extend, proxy = $.proxy, each = $.each, template = kendo.template, keys = kendo.keys, Widget = ui.Widget, excludedNodesRegExp = /^(ul|a|div)$/i, NS = '.kendoMenu', IMG = 'img', OPEN = 'open', MENU = 'k-menu', LINK = 'k-link k-menu-link', LINK_SELECTOR = '.k-link', ICON_SELECTOR = '.k-menu-expand-arrow', LAST = 'k-last', CLOSE = 'close', TIMER = 'timer', FIRST = 'k-first', IMAGE = 'k-image', SELECT = 'select', ZINDEX = 'zIndex', ACTIVATE = 'activate', DEACTIVATE = 'deactivate', POINTERDOWN = 'touchstart' + NS + ' MSPointerDown' + NS + ' pointerdown' + NS, pointers = kendo.support.pointers, msPointers = kendo.support.msPointers, allPointers = msPointers || pointers, CHANGE = 'change', ERROR = 'error', TOUCHSTART = kendo.support.touch ? 'touchstart' : '', MOUSEENTER = pointers ? 'pointerover' : msPointers ? 'MSPointerOver' : 'mouseenter', MOUSELEAVE = pointers ? 'pointerout' : msPointers ? 'MSPointerOut' : 'mouseleave', MOUSEWHEEL = 'DOMMouseScroll' + NS + ' mousewheel' + NS, RESIZE = kendo.support.resize + NS, SCROLLWIDTH = 'scrollWidth', SCROLLHEIGHT = 'scrollHeight', OFFSETWIDTH = 'offsetWidth', OFFSETHEIGHT = 'offsetHeight', POPUP_ID_ATTR = 'group', POPUP_OPENER_ATTR = 'groupparent', DOCUMENT_ELEMENT = $(document.documentElement), KENDOPOPUP = 'kendoPopup', DEFAULTSTATE = 'k-state-default', HOVERSTATE = 'k-state-hover', FOCUSEDSTATE = 'k-state-focused', DISABLEDSTATE = 'k-state-disabled', SELECTEDSTATE = 'k-state-selected', menuSelector = '.k-menu', groupSelector = '.k-menu-group', animationContainerSelector = '.k-animation-container', popupSelector = groupSelector + ',' + animationContainerSelector, allItemsSelector = ':not(.k-list) > .k-item', disabledSelector = '.k-item.k-state-disabled', itemSelector = '.k-item', availableItemsSelector = '.k-item:not(.k-state-disabled)', linkSelector = '.k-item:not(.k-state-disabled) > .k-link', exclusionSelector = ':not(.k-item.k-separator)', nextSelector = itemSelector + exclusionSelector + ':eq(0)', lastSelector = itemSelector + exclusionSelector + ':last', templateSelector = 'div:not(.k-animation-container,.k-list-container)', scrollButtonSelector = '.k-menu-scroll-button', touchPointerTypes = {\n '2': 1,\n 'touch': 1\n }, STRING = 'string', DATABOUND = 'dataBound', bindings = {\n text: 'dataTextField',\n url: 'dataUrlField',\n spriteCssClass: 'dataSpriteCssClassField',\n imageUrl: 'dataImageUrlField',\n imageAttr: 'dataImageAttrField',\n content: 'dataContentField'\n }, rendering = {\n wrapperCssClass: function (group, item) {\n var result = 'k-item k-menu-item', index = item.index;\n if (item.enabled === false) {\n result += ' k-state-disabled';\n } else {\n result += ' k-state-default';\n }\n if (group.firstLevel && index === 0) {\n result += ' k-first';\n }\n if (index == group.length - 1) {\n result += ' k-last';\n }\n if (item.cssClass) {\n result += ' ' + item.cssClass;\n }\n if (item.attr && item.attr.hasOwnProperty('class')) {\n result += ' ' + item.attr['class'];\n }\n if (item.selected) {\n result += ' ' + SELECTEDSTATE;\n }\n return result;\n },\n itemCssAttributes: function (item) {\n var result = '';\n var attributes = item.attr || {};\n for (var attr in attributes) {\n if (attributes.hasOwnProperty(attr) && attr !== 'class') {\n result += attr + '=\"' + attributes[attr] + '\" ';\n }\n }\n return result;\n },\n imageCssAttributes: function (imgAttributes) {\n var result = '';\n var attributes = imgAttributes && imgAttributes.toJSON ? imgAttributes.toJSON() : {};\n if (!attributes['class']) {\n attributes['class'] = IMAGE;\n } else {\n attributes['class'] += ' ' + IMAGE;\n }\n for (var attr in attributes) {\n if (attributes.hasOwnProperty(attr)) {\n result += attr + '=\"' + attributes[attr] + '\" ';\n }\n }\n return result;\n },\n contentCssAttributes: function (item) {\n var result = '';\n var attributes = item.contentAttr || {};\n var defaultClasses = 'k-content k-group k-menu-group';\n if (!attributes['class']) {\n attributes['class'] = defaultClasses;\n } else {\n attributes['class'] += ' ' + defaultClasses;\n }\n for (var attr in attributes) {\n if (attributes.hasOwnProperty(attr)) {\n result += attr + '=\"' + attributes[attr] + '\" ';\n }\n }\n return result;\n },\n textClass: function () {\n return LINK;\n },\n arrowClass: function (item, group) {\n var result = 'k-menu-expand-arrow k-icon';\n if (group.horizontal) {\n result += ' k-i-arrow-60-down';\n } else {\n result += ' k-i-arrow-60-right';\n }\n return result;\n },\n groupAttributes: function (group) {\n return group.expanded !== true ? ' style=\\'display:none\\'' : '';\n },\n groupCssClass: function () {\n return 'k-group k-menu-group';\n },\n content: function (item) {\n return item.content ? item.content : ' ';\n }\n };\n function getEffectDirection(direction, root) {\n direction = direction.split(' ')[!root + 0] || direction;\n return direction.replace('top', 'up').replace('bottom', 'down');\n }\n function parseDirection(direction, root, isRtl) {\n direction = direction.split(' ')[!root + 0] || direction;\n var output = {\n origin: [\n 'bottom',\n isRtl ? 'right' : 'left'\n ],\n position: [\n 'top',\n isRtl ? 'right' : 'left'\n ]\n }, horizontal = /left|right/.test(direction);\n if (horizontal) {\n output.origin = [\n 'top',\n direction\n ];\n output.position[1] = kendo.directions[direction].reverse;\n } else {\n output.origin[0] = direction;\n output.position[0] = kendo.directions[direction].reverse;\n }\n output.origin = output.origin.join(' ');\n output.position = output.position.join(' ');\n return output;\n }\n function contains(parent, child) {\n try {\n return $.contains(parent, child);\n } catch (e) {\n return false;\n }\n }\n function updateItemClasses(item) {\n item = $(item);\n item.addClass('k-item k-menu-item').children(IMG).addClass(IMAGE);\n item.children('a').addClass(LINK).children(IMG).addClass(IMAGE);\n item.filter(':not([disabled])').addClass(DEFAULTSTATE);\n item.filter('.k-separator').removeClass('k-menu-item').addClass('k-menu-separator').empty().append(' ');\n item.filter('li[disabled]').addClass(DISABLEDSTATE).removeAttr('disabled').attr('aria-disabled', true);\n if (!item.filter('[role]').length) {\n item.attr('role', 'menuitem');\n }\n if (!item.children(LINK_SELECTOR).length) {\n item.contents().filter(function () {\n return !this.nodeName.match(excludedNodesRegExp) && !(this.nodeType == 3 && !kendo.trim(this.nodeValue));\n }).wrapAll('<span class=\\'' + LINK + '\\'/>');\n }\n updateArrow(item);\n updateFirstLast(item);\n }\n function updateArrow(item) {\n item = $(item);\n item.find('> .k-link > [class*=k-i-arrow-60]:not(.k-sprite)').remove();\n item.filter(':has(.k-menu-group)').children('.k-link:not(:has([class*=k-i-arrow]:not(.k-sprite)))').each(function () {\n var item = $(this), arrowCssClass = getArrowCssClass(item);\n item.append('<span class=\\'k-menu-expand-arrow k-icon ' + arrowCssClass + '\\' />');\n });\n }\n function getArrowCssClass(item) {\n var arrowCssClass, parent = item.parent().parent(), isRtl = kendo.support.isRtl(parent);\n if (parent.hasClass(MENU + '-horizontal')) {\n arrowCssClass = 'k-i-arrow-60-down';\n } else {\n if (isRtl) {\n arrowCssClass = 'k-i-arrow-60-left';\n } else {\n arrowCssClass = 'k-i-arrow-60-right';\n }\n }\n return arrowCssClass;\n }\n function updateFirstLast(item) {\n item = $(item);\n item.filter('.k-first:not(:first-child)').removeClass(FIRST);\n item.filter('.k-last:not(:last-child)').removeClass(LAST);\n item.filter(':first-child').addClass(FIRST);\n item.filter(':last-child').addClass(LAST);\n }\n function updateHasAriaPopup(parents) {\n if (parents && parents.length) {\n for (var index in parents) {\n var parentLi = parents.eq(index);\n if (parentLi.find('ul').length) {\n parentLi.attr('aria-haspopup', true);\n } else {\n parentLi.removeAttr('aria-haspopup');\n }\n }\n }\n }\n function getParentLiItems(group) {\n if (!group.hasClass(MENU)) {\n return group.parentsUntil('.' + MENU, 'li');\n }\n }\n function storeItemSelectEventHandler(element, options) {\n var selectHandler = getItemSelectEventHandler(options);\n if (selectHandler) {\n setItemData(element, selectHandler);\n }\n if (options.items) {\n $(element).children('ul').children('li').each(function (i) {\n storeItemSelectEventHandler(this, options.items[i]);\n });\n }\n }\n function setItemData(element, selectHandler) {\n $(element).children('.k-link').data({ selectHandler: selectHandler });\n }\n function getItemSelectEventHandler(options) {\n var selectHandler = options.select, isFunction = kendo.isFunction;\n if (selectHandler && isFunction(selectHandler)) {\n return selectHandler;\n }\n return null;\n }\n function popupOpenerSelector(id) {\n return id ? 'li[data-groupparent=\\'' + id + '\\']' : 'li[data-groupparent]';\n }\n function popupGroupSelector(id) {\n var selector = id ? '[data-group=\\'' + id + '\\']' : '[data-group]';\n return 'ul' + selector + ',div' + selector;\n }\n function getChildPopups(currentPopup, overflowWrapper) {\n var childPopupOpener = currentPopup.find(popupOpenerSelector());\n var result = [];\n childPopupOpener.each(function (i, opener) {\n opener = $(opener);\n var popupId = opener.data(POPUP_OPENER_ATTR);\n var popup = currentPopup;\n while (popupId) {\n popup = overflowWrapper.find(popupGroupSelector(popupId) + ':visible');\n if (popup.length) {\n result.push(popup);\n }\n opener = popup.find(popupOpenerSelector());\n popupId = opener.data(POPUP_OPENER_ATTR);\n }\n });\n return result;\n }\n function popupParentItem(popupElement, overflowWrapper) {\n var popupId = popupElement.data(POPUP_ID_ATTR);\n return popupId ? overflowWrapper.find(popupOpenerSelector(popupId)) : $([]);\n }\n function itemPopup(item, overflowWrapper) {\n var popupId = item.data(POPUP_OPENER_ATTR);\n return popupId ? overflowWrapper.children(animationContainerSelector).children(popupGroupSelector(popupId)) : $([]);\n }\n function overflowMenuParents(current, overflowWrapper) {\n var parents = [];\n var getParents = function (item) {\n while (item.parentNode && !overflowWrapper.is(item.parentNode)) {\n parents.push(item.parentNode);\n item = item.parentNode;\n }\n };\n var elem = current[0] || current;\n getParents(elem);\n var last = parents[parents.length - 1];\n while ($(last).is(animationContainerSelector)) {\n var popupElement = $(last).children('ul');\n elem = popupParentItem(popupElement, overflowWrapper)[0];\n if (!elem) {\n break;\n }\n parents.push(elem);\n getParents(elem);\n last = parents[parents.length - 1];\n }\n return parents;\n }\n function mousewheelDelta(e) {\n var delta = 0;\n if (e.wheelDelta) {\n delta = -e.wheelDelta / 120;\n delta = delta > 0 ? Math.ceil(delta) : Math.floor(delta);\n }\n if (e.detail) {\n delta = Math.round(e.detail / 3);\n }\n return delta;\n }\n function parentsScroll(current, scrollDirection) {\n var scroll = 0;\n var parent = current.parentNode;\n while (parent && !isNaN(parent[scrollDirection])) {\n scroll += parent[scrollDirection];\n parent = parent.parentNode;\n }\n return scroll;\n }\n function isPointerTouch(e) {\n return allPointers && e.originalEvent && e.originalEvent.pointerType in touchPointerTypes;\n }\n function isTouch(e) {\n var ev = e.originalEvent;\n return touch && /touch/i.test(ev.type || '');\n }\n function removeSpacesBetweenItems(ul) {\n ul.contents().filter(function () {\n return this.nodeName != 'LI';\n }).remove();\n }\n var Menu = kendo.ui.DataBoundWidget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n element = that.wrapper = that.element;\n options = that.options;\n that._accessors();\n that._templates();\n that._dataSource();\n that._updateClasses();\n that._animations(options);\n that.nextItemZIndex = 100;\n that._tabindex();\n that._initOverflow(options);\n that._attachMenuEventsHandlers();\n if (options.openOnClick) {\n that.clicked = false;\n }\n element.attr('role', 'menubar');\n if (element[0].id) {\n that._ariaId = kendo.format('{0}_mn_active', element[0].id);\n }\n kendo.notify(that);\n },\n events: [\n OPEN,\n CLOSE,\n ACTIVATE,\n DEACTIVATE,\n SELECT,\n DATABOUND\n ],\n options: {\n name: 'Menu',\n animation: {\n open: { duration: 200 },\n close: { duration: 100 }\n },\n orientation: 'horizontal',\n direction: 'default',\n openOnClick: false,\n closeOnClick: true,\n hoverDelay: 100,\n scrollable: false,\n popupCollision: undefined\n },\n _initData: function () {\n var that = this;\n if (that.dataSource) {\n that.angular('cleanup', function () {\n return { elements: that.element.children() };\n });\n that.element.empty();\n that.append(that.dataSource.view(), that.element);\n that.angular('compile', function () {\n return { elements: that.element.children() };\n });\n }\n },\n _attachMenuEventsHandlers: function () {\n var that = this;\n var element = that.element;\n var options = that.options;\n var overflowWrapper = that._overflowWrapper();\n (overflowWrapper || element).on(POINTERDOWN, itemSelector, proxy(that._focusHandler, that)).on(CLICK + NS, disabledSelector, false).on(CLICK + NS, itemSelector, proxy(that._click, that)).on(POINTERDOWN + ' ' + MOUSEDOWN + NS, '.k-content', proxy(that._preventClose, that)).on(MOUSEENTER + NS, availableItemsSelector, proxy(that._mouseenter, that)).on(MOUSELEAVE + NS, availableItemsSelector, proxy(that._mouseleave, that)).on(MOUSEDOWN + NS, availableItemsSelector, proxy(that._mousedown, that)).on(TOUCHSTART + NS + ' ' + MOUSEENTER + NS + ' ' + MOUSELEAVE + NS + ' ' + MOUSEDOWN + NS + ' ' + CLICK + NS, linkSelector, proxy(that._toggleHover, that));\n element.on('keydown' + NS, proxy(that._keydown, that)).on('focus' + NS, proxy(that._focus, that)).on('focus' + NS, '.k-content', proxy(that._focus, that)).on('blur' + NS, proxy(that._removeHoverItem, that)).on('blur' + NS, '[tabindex]', proxy(that._checkActiveElement, that));\n if (overflowWrapper) {\n overflowWrapper.on(MOUSELEAVE + NS, popupSelector, proxy(that._mouseleavePopup, that)).on(MOUSEENTER + NS, popupSelector, proxy(that._mouseenterPopup, that));\n }\n if (options.openOnClick) {\n that._documentClickHandler = proxy(that._documentClick, that);\n $(document).click(that._documentClickHandler);\n }\n },\n _detachMenuEventsHandlers: function () {\n var that = this;\n var overflowWrapper = that._overflowWrapper();\n if (overflowWrapper) {\n overflowWrapper.off(NS);\n }\n that.element.off(NS);\n if (that._documentClickHandler) {\n $(document).unbind('click', that._documentClickHandler);\n }\n },\n _initOverflow: function (options) {\n var that = this;\n var isHorizontal = options.orientation == 'horizontal';\n var backwardBtn, forwardBtn;\n if (options.scrollable) {\n that._openedPopups = {};\n that._scrollWrapper = that.element.wrap('<div class=\\'k-menu-scroll-wrapper ' + options.orientation + '\\'></div>').parent();\n if (isHorizontal) {\n removeSpacesBetweenItems(that.element);\n }\n backwardBtn = $(that.templates.scrollButton({ direction: isHorizontal ? 'left' : 'up' }));\n forwardBtn = $(that.templates.scrollButton({ direction: isHorizontal ? 'right' : 'down' }));\n backwardBtn.add(forwardBtn).appendTo(that._scrollWrapper);\n that._initScrolling(that.element, backwardBtn, forwardBtn, isHorizontal);\n var initialWidth = that.element.outerWidth();\n var initialCssWidth = that.element[0].style.width;\n initialCssWidth = initialCssWidth === 'auto' ? '' : initialCssWidth;\n if (isHorizontal) {\n $(window).on(RESIZE, kendo.throttle(function () {\n that._setOverflowWrapperWidth(initialWidth, initialCssWidth);\n that._toggleScrollButtons(that.element, backwardBtn, forwardBtn, isHorizontal);\n }, 100));\n }\n that._setOverflowWrapperWidth(initialWidth, initialCssWidth);\n that._toggleScrollButtons(that.element, backwardBtn, forwardBtn, isHorizontal);\n }\n },\n _overflowWrapper: function () {\n return this._scrollWrapper || this._popupsWrapper;\n },\n _setOverflowWrapperWidth: function (initialWidth, initialCssWidth) {\n var that = this;\n var wrapperCssWidth = that._scrollWrapper.css('width');\n that._scrollWrapper.css({ width: '' });\n var wrapperWidth = that._scrollWrapper.outerWidth();\n that._scrollWrapper.css({ width: wrapperCssWidth });\n var menuWidth = that.element.outerWidth();\n var borders = that.element[0].offsetWidth - that.element[0].clientWidth;\n if (menuWidth != wrapperWidth && wrapperWidth > 0) {\n var width = initialCssWidth ? Math.min(initialWidth, wrapperWidth) : wrapperWidth;\n that.element.width(width - borders);\n that._scrollWrapper.width(width);\n }\n },\n _reinitOverflow: function (options) {\n var that = this;\n var overflowChanged = options.scrollable && !that.options.scrollable || !options.scrollable && that.options.scrollable || options.scrollable && that.options.scrollable && options.scrollable.distance != that.options.scrollable.distance || options.orientation != that.options.orientation;\n if (overflowChanged) {\n that._detachMenuEventsHandlers();\n that._destroyOverflow();\n that._initOverflow(options);\n that._attachMenuEventsHandlers();\n }\n },\n _destroyOverflow: function () {\n var that = this;\n var overflowWrapper = that._overflowWrapper();\n if (overflowWrapper) {\n overflowWrapper.off(NS);\n overflowWrapper.find(scrollButtonSelector).off(NS).remove();\n overflowWrapper.children(animationContainerSelector).each(function (i, popupWrapper) {\n var ul = $(popupWrapper).children(groupSelector);\n ul.off(MOUSEWHEEL);\n var popupParentLi = popupParentItem(ul, overflowWrapper);\n if (popupParentLi.length) {\n popupParentLi.append(popupWrapper);\n }\n });\n overflowWrapper.find(popupOpenerSelector()).removeAttr('data-groupparent');\n overflowWrapper.find(popupGroupSelector()).removeAttr('data-group');\n that.element.off(MOUSEWHEEL);\n $(window).off(RESIZE);\n overflowWrapper.contents().unwrap();\n that._scrollWrapper = that._popupsWrapper = that._openedPopups = undefined;\n }\n },\n _initScrolling: function (scrollElement, backwardBtn, forwardBtn, isHorizontal) {\n var that = this;\n var scrollable = that.options.scrollable;\n var distance = $.isNumeric(scrollable.distance) ? scrollable.distance : SCROLLSPEED;\n var mouseWheelDistance = distance / 2;\n var backward = '-=' + distance;\n var forward = '+=' + distance;\n var backwardDouble = '-=' + distance * 2;\n var forwardDouble = '+=' + distance * 2;\n var scrolling = false;\n var touchEvents = false;\n var scroll = function (value) {\n var scrollValue = isHorizontal ? { 'scrollLeft': value } : { 'scrollTop': value };\n scrollElement.finish().animate(scrollValue, 'fast', 'linear', function () {\n if (scrolling) {\n scroll(value);\n }\n });\n that._toggleScrollButtons(scrollElement, backwardBtn, forwardBtn, isHorizontal);\n };\n var mouseenterHandler = function (e) {\n if (!scrolling && !touchEvents) {\n scroll(e.data.direction);\n scrolling = true;\n }\n };\n var mousedownHandler = function (e) {\n var scrollValue = isHorizontal ? { 'scrollLeft': e.data.direction } : { 'scrollTop': e.data.direction };\n touchEvents = isTouch(e) || isPointerTouch(e);\n scrollElement.stop().animate(scrollValue, 'fast', 'linear', function () {\n if (!touchEvents) {\n $(e.currentTarget).trigger(MOUSEENTER);\n } else {\n that._toggleScrollButtons(scrollElement, backwardBtn, forwardBtn, isHorizontal);\n scrolling = true;\n }\n });\n scrolling = false;\n e.stopPropagation();\n e.preventDefault();\n };\n backwardBtn.on(MOUSEENTER + NS, { direction: backward }, mouseenterHandler).on(kendo.eventMap.down + NS, { direction: backwardDouble }, mousedownHandler);\n forwardBtn.on(MOUSEENTER + NS, { direction: forward }, mouseenterHandler).on(kendo.eventMap.down + NS, { direction: forwardDouble }, mousedownHandler);\n backwardBtn.add(forwardBtn).on(MOUSELEAVE + NS, function () {\n scrollElement.stop();\n scrolling = false;\n that._toggleScrollButtons(scrollElement, backwardBtn, forwardBtn, isHorizontal);\n });\n scrollElement.on(MOUSEWHEEL, function (e) {\n if (!e.ctrlKey && !e.shiftKey && !e.altKey) {\n var wheelDelta = mousewheelDelta(e.originalEvent);\n var scrollSpeed = Math.abs(wheelDelta) * mouseWheelDistance;\n var value = (wheelDelta > 0 ? '+=' : '-=') + scrollSpeed;\n var scrollValue = isHorizontal ? { 'scrollLeft': value } : { 'scrollTop': value };\n that._closeChildPopups(scrollElement);\n scrollElement.finish().animate(scrollValue, 'fast', 'linear', function () {\n that._toggleScrollButtons(scrollElement, backwardBtn, forwardBtn, isHorizontal);\n });\n e.preventDefault();\n }\n });\n },\n _toggleScrollButtons: function (scrollElement, backwardBtn, forwardBtn, horizontal) {\n var currentScroll = horizontal ? kendo.scrollLeft(scrollElement) : scrollElement.scrollTop();\n var scrollSize = horizontal ? SCROLLWIDTH : SCROLLHEIGHT;\n var offset = horizontal ? OFFSETWIDTH : OFFSETHEIGHT;\n backwardBtn.toggle(currentScroll !== 0);\n forwardBtn.toggle(currentScroll < scrollElement[0][scrollSize] - scrollElement[0][offset] - 1);\n },\n setOptions: function (options) {\n var animation = this.options.animation;\n this._animations(options);\n options.animation = extend(true, animation, options.animation);\n if ('dataSource' in options) {\n this._dataSource(options);\n }\n this._updateClasses();\n this._reinitOverflow(options);\n Widget.fn.setOptions.call(this, options);\n },\n destroy: function () {\n var that = this;\n Widget.fn.destroy.call(that);\n that._detachMenuEventsHandlers();\n that._destroyOverflow();\n kendo.destroy(that.element);\n },\n enable: function (element, enable) {\n this._toggleDisabled(element, enable !== false);\n return this;\n },\n disable: function (element) {\n this._toggleDisabled(element, false);\n return this;\n },\n attemptGetItem: function (candidate) {\n candidate = candidate || this.element;\n var item = this.element.find(candidate);\n var overflowWrapper = this._overflowWrapper();\n if (item.length || candidate === this.element) {\n return item;\n } else if (overflowWrapper) {\n return overflowWrapper.find(candidate);\n } else {\n return $();\n }\n },\n append: function (item, referenceItem) {\n referenceItem = this.attemptGetItem(referenceItem);\n var inserted = this._insert(item, referenceItem, referenceItem.length ? this._childPopupElement(referenceItem) : null);\n each(inserted.items, function (i) {\n inserted.group.append(this);\n updateArrow(this);\n storeItemSelectEventHandler(this, item[i] || item);\n });\n updateArrow(referenceItem);\n updateFirstLast(inserted.group.find('.k-first, .k-last').add(inserted.items));\n updateHasAriaPopup(getParentLiItems(inserted.group));\n return this;\n },\n insertBefore: function (item, referenceItem) {\n referenceItem = this.attemptGetItem(referenceItem);\n var inserted = this._insert(item, referenceItem, referenceItem.parent());\n each(inserted.items, function (i) {\n referenceItem.before(this);\n updateArrow(this);\n updateFirstLast(this);\n storeItemSelectEventHandler(this, item[i] || item);\n });\n updateFirstLast(referenceItem);\n return this;\n },\n insertAfter: function (item, referenceItem) {\n referenceItem = this.attemptGetItem(referenceItem);\n var inserted = this._insert(item, referenceItem, referenceItem.parent());\n each(inserted.items, function (i) {\n referenceItem.after(this);\n updateArrow(this);\n updateFirstLast(this);\n storeItemSelectEventHandler(this, item[i] || item);\n });\n updateFirstLast(referenceItem);\n return this;\n },\n _insert: function (item, referenceItem, parent) {\n var that = this, items, groups;\n if (!referenceItem || !referenceItem.length) {\n parent = that.element;\n }\n var plain = $.isPlainObject(item) || item instanceof kendo.data.ObservableObject, groupData = {\n firstLevel: parent.hasClass(MENU),\n horizontal: parent.hasClass(MENU + '-horizontal'),\n expanded: true,\n length: parent.children().length\n };\n if (referenceItem && !parent.length) {\n parent = $(that.renderGroup({\n group: groupData,\n options: that.options\n })).appendTo(referenceItem);\n }\n if (plain || isArray(item) || item instanceof kendo.data.ObservableArray) {\n items = $($.map(plain ? [item] : item, function (value, idx) {\n if (typeof value === 'string') {\n return $(value).get();\n } else {\n return $(that.renderItem({\n group: groupData,\n item: extend(value, { index: idx })\n })).get();\n }\n }));\n } else {\n if (typeof item == 'string' && item.charAt(0) != '<') {\n items = that.element.find(item);\n } else {\n items = $(item);\n }\n groups = items.find('> ul').addClass('k-menu-group').attr('role', 'menu');\n items = items.filter('li');\n items.add(groups.find('> li')).each(function () {\n updateItemClasses(this);\n });\n }\n return {\n items: items,\n group: parent\n };\n },\n remove: function (element) {\n element = this.attemptGetItem(element);\n var that = this, parent = element.parentsUntil(that.element, allItemsSelector), group = element.parent('ul:not(.k-menu)');\n element.remove();\n if (group && !group.children(allItemsSelector).length) {\n var parentItems = getParentLiItems(group);\n var container = group.parent(animationContainerSelector);\n if (container.length) {\n container.remove();\n } else {\n group.remove();\n }\n updateHasAriaPopup(parentItems);\n }\n if (parent.length) {\n parent = parent.eq(0);\n updateArrow(parent);\n updateFirstLast(parent);\n }\n return that;\n },\n _openAfterLoad: function (element, dataItem) {\n var that = this;\n if (dataItem.loaded()) {\n that.open(element);\n that._loading = false;\n } else {\n dataItem.one(CHANGE, function () {\n element.find(ICON_SELECTOR).removeClass('k-i-loading');\n if (that._loading) {\n that.open(element);\n that._loading = false;\n }\n });\n }\n },\n open: function (element) {\n var that = this;\n var options = that.options;\n var horizontal = options.orientation == 'horizontal';\n var direction = options.direction;\n var isRtl = kendo.support.isRtl(that.wrapper);\n var overflowWrapper = that._overflowWrapper();\n element = (overflowWrapper || that.element).find(element);\n var dataItem = that.dataSource && that.dataSource.getByUid(element.data(kendo.ns + 'uid'));\n if (dataItem && dataItem.hasChildren && !dataItem.loaded() && !that._loading) {\n that._loading = true;\n element.find(ICON_SELECTOR).addClass('k-i-loading');\n dataItem.load();\n that._openAfterLoad(element, dataItem);\n return;\n }\n if (/^(top|bottom|default)$/.test(direction)) {\n if (isRtl) {\n direction = horizontal ? (direction + ' left').replace('default', 'bottom') : 'left';\n } else {\n direction = horizontal ? (direction + ' right').replace('default', 'bottom') : 'right';\n }\n }\n var visiblePopups = '>.k-popup:visible,>.k-animation-container>.k-popup:visible';\n var closePopup = function () {\n var popup = $(this).data(KENDOPOPUP);\n if (popup) {\n that.close($(this).closest('li.k-item'), true);\n }\n };\n element.siblings().find(visiblePopups).each(closePopup);\n if (overflowWrapper) {\n element.find(visiblePopups).each(closePopup);\n }\n if (that.options.openOnClick) {\n that.clicked = true;\n }\n element.each(function () {\n var li = $(this);\n clearTimeout(li.data(TIMER));\n li.data(TIMER, setTimeout(function () {\n var ul = li.find('.k-menu-group:first:hidden');\n var popup;\n var overflowPopup;\n if (!ul[0] && overflowWrapper) {\n overflowPopup = that._getPopup(li);\n ul = overflowPopup && overflowPopup.element;\n }\n if (ul.is(':visible')) {\n return;\n }\n if (ul[0] && that._triggerEvent({\n item: li[0],\n type: OPEN\n }) === false) {\n if (!ul.find('.k-menu-group')[0] && ul.children('.k-item').length > 1) {\n var windowHeight = $(window).height(), setScrolling = function () {\n ul.css({\n maxHeight: windowHeight - (kendo._outerHeight(ul) - ul.height()) - kendo.getShadows(ul).bottom,\n overflow: 'auto'\n });\n };\n if (kendo.support.browser.msie && kendo.support.browser.version <= 7) {\n setTimeout(setScrolling, 0);\n } else {\n setScrolling();\n }\n } else {\n ul.css({\n maxHeight: '',\n overflow: ''\n });\n }\n li.data(ZINDEX, li.css(ZINDEX));\n var nextZindex = that.nextItemZIndex++;\n li.css(ZINDEX, nextZindex);\n if (that.options.scrollable) {\n li.parent().siblings(scrollButtonSelector).css({ zIndex: ++nextZindex });\n }\n popup = ul.data(KENDOPOPUP);\n var root = li.parent().hasClass(MENU), parentHorizontal = root && horizontal, directions = parseDirection(direction, root, isRtl), effects = options.animation.open.effects, openEffects = effects !== undefined ? effects : 'slideIn:' + getEffectDirection(direction, root);\n if (!popup) {\n popup = ul.kendoPopup({\n activate: function () {\n that._triggerEvent({\n item: this.wrapper.parent(),\n type: ACTIVATE\n });\n },\n deactivate: function (e) {\n that._closing = false;\n e.sender.element.removeData('targetTransform').css({ opacity: '' });\n that._triggerEvent({\n item: this.wrapper.parent(),\n type: DEACTIVATE\n });\n },\n origin: directions.origin,\n position: directions.position,\n collision: options.popupCollision !== undefined ? options.popupCollision : parentHorizontal ? 'fit' : 'fit flip',\n anchor: li,\n appendTo: overflowWrapper || li,\n animation: {\n open: extend(true, { effects: openEffects }, options.animation.open),\n close: options.animation.close\n },\n open: proxy(that._popupOpen, that),\n close: function (e) {\n that._closing = true;\n var li = e.sender.wrapper.parent();\n if (overflowWrapper) {\n var popupId = e.sender.element.data(POPUP_ID_ATTR);\n if (popupId) {\n li = (overflowWrapper || that.element).find(popupOpenerSelector(popupId));\n }\n e.sender.wrapper.children(scrollButtonSelector).hide();\n }\n if (!that._triggerEvent({\n item: li[0],\n type: CLOSE\n })) {\n li.css(ZINDEX, li.data(ZINDEX));\n li.removeData(ZINDEX);\n if (that.options.scrollable) {\n li.parent().siblings(scrollButtonSelector).css({ zIndex: '' });\n }\n if (touch || allPointers || kendo.support.mouseAndTouchPresent) {\n li.removeClass(HOVERSTATE);\n that._removeHoverItem();\n }\n } else {\n e.preventDefault();\n }\n }\n }).data(KENDOPOPUP);\n } else {\n popup = ul.data(KENDOPOPUP);\n popup.options.origin = directions.origin;\n popup.options.position = directions.position;\n popup.options.animation.open.effects = openEffects;\n }\n ul.removeAttr('aria-hidden');\n that._configurePopupOverflow(popup, li);\n popup._hovered = true;\n popup.open();\n that._initPopupScrolling(popup);\n }\n }, that.options.hoverDelay));\n });\n return that;\n },\n _configurePopupOverflow: function (popup, popupOpener) {\n var that = this;\n if (that.options.scrollable) {\n that._wrapPopupElement(popup);\n if (!popupOpener.attr('data-groupparent')) {\n var groupId = new Date().getTime();\n popupOpener.attr('data-groupparent', groupId);\n popup.element.attr('data-group', groupId);\n }\n }\n },\n _wrapPopupElement: function (popup) {\n if (!popup.element.parent().is(animationContainerSelector)) {\n popup.wrapper = kendo.wrap(popup.element, popup.options.autosize).css({\n overflow: 'hidden',\n display: 'block',\n position: 'absolute'\n });\n }\n },\n _initPopupScrolling: function (popup, isHorizontal, skipMouseEvents) {\n var that = this;\n if (that.options.scrollable && popup.element[0].scrollHeight > popup.element[0].offsetHeight) {\n that._initPopupScrollButtons(popup, isHorizontal, skipMouseEvents);\n }\n },\n _initPopupScrollButtons: function (popup, isHorizontal, skipMouseEvents) {\n var that = this;\n var scrollButtons = popup.wrapper.children(scrollButtonSelector);\n var animation = that.options.animation;\n var timeout = (animation && animation.open && animation.open.duration || 0) + DELAY;\n setTimeout(function () {\n if (!scrollButtons.length) {\n var backwardBtn = $(that.templates.scrollButton({ direction: isHorizontal ? 'left' : 'up' }));\n var forwardBtn = $(that.templates.scrollButton({ direction: isHorizontal ? 'right' : 'down' }));\n scrollButtons = backwardBtn.add(forwardBtn).appendTo(popup.wrapper);\n that._initScrolling(popup.element, backwardBtn, forwardBtn, isHorizontal);\n if (!skipMouseEvents) {\n scrollButtons.on(MOUSEENTER + NS, function () {\n var overflowWrapper = that._overflowWrapper();\n $(getChildPopups(popup.element, overflowWrapper)).each(function (i, p) {\n var popupOpener = overflowWrapper.find(popupOpenerSelector(p.data(POPUP_ID_ATTR)));\n that.close(popupOpener);\n });\n }).on(MOUSELEAVE + NS, function () {\n setTimeout(function () {\n if ($.isEmptyObject(that._openedPopups)) {\n that._closeParentPopups(popup.element);\n }\n }, DELAY);\n });\n }\n }\n that._toggleScrollButtons(popup.element, scrollButtons.first(), scrollButtons.last(), isHorizontal);\n }, timeout);\n },\n _popupOpen: function (e) {\n if (!this._keyTriggered) {\n e.sender.element.children('.' + FOCUSEDSTATE).removeClass(FOCUSEDSTATE);\n }\n if (this.options.scrollable) {\n this._setPopupHeight(e.sender);\n }\n },\n _setPopupHeight: function (popup, isFixed) {\n var popupElement = popup.element;\n var popups = popupElement.add(popupElement.parent(animationContainerSelector));\n popups.height(popupElement.hasClass(MENU) && this._initialHeight || '');\n var location = popup._location(isFixed);\n var windowHeight = $(window).height();\n var popupOuterHeight = location.height;\n var popupOffsetTop = isFixed ? 0 : Math.max(location.top, 0);\n var scrollTop = isFixed ? 0 : parentsScroll(this._overflowWrapper()[0], 'scrollTop');\n var bottomScrollbar = window.innerHeight - windowHeight;\n var maxHeight = windowHeight - kendo.getShadows(popupElement).bottom + bottomScrollbar;\n var canFit = maxHeight + scrollTop > popupOuterHeight + popupOffsetTop;\n if (!canFit) {\n var height = Math.min(maxHeight, maxHeight - popupOffsetTop + scrollTop);\n popups.css({\n overflow: 'hidden',\n height: height + 'px'\n });\n }\n },\n close: function (items, dontClearClose) {\n var that = this;\n var overflowWrapper = that._overflowWrapper();\n var element = overflowWrapper || that.element;\n items = element.find(items);\n if (!items.length) {\n items = element.find('>.k-item');\n }\n var hasChildPopupsHovered = function (currentPopup) {\n var result = false;\n if ($.isEmptyObject(that._openedPopups)) {\n return result;\n }\n $(getChildPopups(currentPopup, overflowWrapper)).each(function (i, popup) {\n result = !!that._openedPopups[popup.data(POPUP_ID_ATTR).toString()];\n return !result;\n });\n return result;\n };\n var isPopupMouseLeaved = function (opener) {\n var groupId = opener.data(POPUP_OPENER_ATTR);\n return !overflowWrapper || !groupId || !that._openedPopups[groupId.toString()];\n };\n items.each(function () {\n var li = $(this);\n if (!dontClearClose && that._isRootItem(li)) {\n that.clicked = false;\n }\n clearTimeout(li.data(TIMER));\n li.data(TIMER, setTimeout(function () {\n var popup = that._getPopup(li);\n if (popup && (isPopupMouseLeaved(li) || that._forceClose)) {\n if (!that._forceClose && hasChildPopupsHovered(popup.element)) {\n return;\n }\n popup.close();\n popup.element.attr('aria-hidden', true);\n if (overflowWrapper) {\n if (that._forceClose && items.last().is(li[0])) {\n delete that._forceClose;\n }\n }\n }\n }, that.options.hoverDelay));\n });\n return that;\n },\n _getPopup: function (li) {\n var that = this;\n var popup = li.find('.k-menu-group:not(.k-list-container):not(.k-calendar-container):first:visible').data(KENDOPOPUP);\n var overflowWrapper = that._overflowWrapper();\n if (!popup && overflowWrapper) {\n var groupId = li.data(POPUP_OPENER_ATTR);\n if (groupId) {\n var popupElement = overflowWrapper.find(popupGroupSelector(groupId));\n popup = popupElement.data(KENDOPOPUP);\n }\n }\n return popup;\n },\n _toggleDisabled: function (items, enable) {\n this.element.find(items).each(function () {\n $(this).toggleClass(DEFAULTSTATE, enable).toggleClass(DISABLEDSTATE, !enable).attr('aria-disabled', !enable);\n });\n },\n _toggleHover: function (e) {\n var target = $(kendo.eventTarget(e) || e.target).closest(allItemsSelector), isEnter = e.type == MOUSEENTER || MOUSEDOWN.indexOf(e.type) !== -1;\n target.siblings().removeClass(HOVERSTATE);\n if (!target.parents('li.' + DISABLEDSTATE).length) {\n target.toggleClass(HOVERSTATE, isEnter || e.type == 'mousedown' || e.type == 'pointerover' || e.type == TOUCHSTART);\n }\n this._removeHoverItem();\n },\n _preventClose: function () {\n if (!this.options.closeOnClick) {\n this._closurePrevented = true;\n }\n },\n _checkActiveElement: function (e) {\n var that = this, hoverItem = $(e ? e.currentTarget : this._hoverItem()), target = that._findRootParent(hoverItem)[0];\n if (!this._closurePrevented) {\n setTimeout(function () {\n if (!document.hasFocus() || !contains(target, kendo._activeElement()) && e && !contains(target, e.currentTarget)) {\n that.close(target);\n }\n }, 0);\n }\n this._closurePrevented = false;\n },\n _removeHoverItem: function () {\n var oldHoverItem = this._hoverItem();\n if (oldHoverItem && oldHoverItem.hasClass(FOCUSEDSTATE)) {\n oldHoverItem.removeClass(FOCUSEDSTATE);\n this._oldHoverItem = null;\n }\n },\n _updateClasses: function () {\n var element = this.element, nonContentGroupsSelector = '.k-menu-init div ul', items;\n element.removeClass('k-menu-horizontal k-menu-vertical');\n element.addClass('k-widget k-reset k-header k-menu-init ' + MENU).addClass(MENU + '-' + this.options.orientation);\n element.find('li > ul').filter(function () {\n return !kendo.support.matchesSelector.call(this, nonContentGroupsSelector);\n }).addClass('k-group k-menu-group').attr('role', 'menu').attr('aria-hidden', element.is(':visible')).parent('li').attr('aria-haspopup', 'true').end().find('li > div').addClass('k-content').attr('tabindex', '-1');\n items = element.find('> li,.k-menu-group > li');\n element.removeClass('k-menu-init');\n items.each(function () {\n updateItemClasses(this);\n });\n },\n _mouseenter: function (e) {\n var that = this;\n var element = $(e.currentTarget);\n var hasChildren = that._itemHasChildren(element);\n var popupId = element.data(POPUP_OPENER_ATTR) || element.parent().data(POPUP_ID_ATTR);\n var pointerTouch = isPointerTouch(e);\n if (popupId) {\n that._openedPopups[popupId.toString()] = true;\n }\n if (that._closing || e.delegateTarget != element.parents(menuSelector)[0] && e.delegateTarget != element.parents('.k-menu-scroll-wrapper,.k-popups-wrapper')[0]) {\n return;\n }\n that._keyTriggered = false;\n if (that.options.openOnClick.rootMenuItems && that._isRootItem(element.closest(allItemsSelector)) || that.options.openOnClick.subMenuItems && !that._isRootItem(element.closest(allItemsSelector))) {\n return;\n }\n if ((that.options.openOnClick === false || that.options.openOnClick.rootMenuItems === false && that._isRootItem(element.closest(allItemsSelector)) || that.options.openOnClick.subMenuItems === false && !that._isRootItem(element.closest(allItemsSelector)) || that.clicked) && !touch && !(pointerTouch && that._isRootItem(element.closest(allItemsSelector)))) {\n if (!contains(e.currentTarget, e.relatedTarget) && hasChildren) {\n that.open(element);\n }\n }\n if (that.options.openOnClick === true && that.clicked || touch) {\n element.siblings().each(proxy(function (_, sibling) {\n that.close(sibling, true);\n }, that));\n }\n },\n _mousedown: function (e) {\n var that = this;\n var element = $(e.currentTarget);\n if (that.options.openOnClick.subMenuItems && !that._isRootItem(element) || touch) {\n element.siblings().each(proxy(function (_, sibling) {\n that.close(sibling, true);\n }, that));\n }\n },\n _mouseleave: function (e) {\n var that = this;\n var element = $(e.currentTarget);\n var popupOpener = element.data(POPUP_OPENER_ATTR);\n var hasChildren = element.children(animationContainerSelector).length || element.children(groupSelector).length || popupOpener;\n var $window = $(window);\n if (popupOpener) {\n delete that._openedPopups[popupOpener.toString()];\n }\n if (element.parentsUntil(animationContainerSelector, '.k-list-container,.k-calendar-container')[0]) {\n e.stopImmediatePropagation();\n return;\n }\n if ((that.options.openOnClick === false || !that.options.openOnClick.rootMenuItems && that._isRootItem(element) || !that.options.openOnClick.subMenuItems && !that._isRootItem(element)) && !touch && !isPointerTouch(e) && !contains(e.currentTarget, e.relatedTarget || e.target) && hasChildren && !contains(e.currentTarget, kendo._activeElement())) {\n that.close(element, true);\n that._loading = false;\n return;\n }\n if (kendo.support.browser.msie && !e.toElement && !e.relatedTarget && !isPointerTouch(e) || e.clientX < 0 || e.clientY < 0 || e.clientY > $window.height() || e.clientX > $window.width()) {\n that.close(element);\n }\n },\n _mouseenterPopup: function (e) {\n var that = this;\n var popupElement = $(e.currentTarget);\n if (popupElement.parent().is(animationContainerSelector)) {\n return;\n }\n popupElement = popupElement.children('ul');\n var popupId = popupElement.data(POPUP_ID_ATTR);\n if (popupId) {\n that._openedPopups[popupId.toString()] = true;\n }\n },\n _mouseleavePopup: function (e) {\n var that = this;\n var popupElement = $(e.currentTarget);\n if (!isPointerTouch(e) && popupElement.is(animationContainerSelector)) {\n that._closePopups(popupElement.children('ul'));\n }\n },\n _closePopups: function (rootPopup) {\n var that = this;\n var overflowWrapper = that._overflowWrapper();\n var popupId = rootPopup.data(POPUP_ID_ATTR);\n if (popupId) {\n delete that._openedPopups[popupId.toString()];\n var groupParent = overflowWrapper.find(popupOpenerSelector(popupId));\n setTimeout(function () {\n if (that.options.openOnClick) {\n that._closeChildPopups(rootPopup);\n } else {\n if ($.isEmptyObject(that._openedPopups)) {\n var innerPopup = that._innerPopup(rootPopup);\n that._closeParentPopups(innerPopup);\n } else {\n that.close(groupParent, true);\n }\n }\n }, 0);\n }\n },\n _closeChildPopups: function (current) {\n var that = this;\n var overflowWrapper = that._overflowWrapper();\n $(getChildPopups(current, overflowWrapper)).each(function () {\n var popupOpener = overflowWrapper.find(popupOpenerSelector(this.data(POPUP_ID_ATTR)));\n that.close(popupOpener, true);\n });\n },\n _innerPopup: function (current) {\n var overflowWrapper = this._overflowWrapper();\n var popups = getChildPopups(current, overflowWrapper);\n return popups[popups.length - 1] || current;\n },\n _closeParentPopups: function (current) {\n var that = this;\n var overflowWrapper = that._overflowWrapper();\n var popupId = current.data(POPUP_ID_ATTR);\n var popupOpener = overflowWrapper.find(popupOpenerSelector(popupId));\n popupId = popupOpener.parent().data(POPUP_ID_ATTR);\n that.close(popupOpener, true);\n while (popupId && !that._openedPopups[popupId]) {\n if (popupOpener.parent().is(menuSelector)) {\n break;\n }\n popupOpener = overflowWrapper.find(popupOpenerSelector(popupId));\n that.close(popupOpener, true);\n popupId = popupOpener.parent().data(POPUP_ID_ATTR);\n }\n },\n _click: function (e) {\n var that = this, openHandle, options = that.options, target = $(kendo.eventTarget(e)), targetElement = target[0], nodeName = target[0] ? target[0].nodeName.toUpperCase() : '', formNode = nodeName == 'INPUT' || nodeName == 'SELECT' || nodeName == 'BUTTON' || nodeName == 'LABEL', link = target.closest(LINK_SELECTOR), element = target.closest(allItemsSelector), itemElement = element[0], href = link.attr('href'), childGroup, childGroupVisible, targetHref = target.attr('href'), sampleHref = $('<a href=\\'#\\' />').attr('href'), isLink = !!href && href !== sampleHref, isLocalLink = isLink && !!href.match(/^#/), isTargetLink = !!targetHref && targetHref !== sampleHref, overflowWrapper = that._overflowWrapper(), shouldCloseTheRootItem;\n if (targetElement && !targetElement.parentNode) {\n return;\n }\n if ($(target).hasClass('k-menu-expand-arrow')) {\n this._lastClickedElement = targetElement.parentElement;\n }\n while (targetElement && targetElement.parentNode != itemElement) {\n targetElement = targetElement.parentNode;\n }\n if ($(targetElement).is(templateSelector)) {\n return;\n }\n if (element.hasClass(DISABLEDSTATE)) {\n e.preventDefault();\n return;\n }\n if (!e.handled && that._triggerSelect(target, itemElement) && !formNode) {\n e.preventDefault();\n }\n e.handled = true;\n childGroup = element.children(popupSelector);\n if (overflowWrapper) {\n var childPopupId = element.data(POPUP_OPENER_ATTR);\n if (childPopupId) {\n childGroup = overflowWrapper.find(popupGroupSelector(childPopupId));\n }\n }\n childGroupVisible = childGroup.is(':visible');\n shouldCloseTheRootItem = options.openOnClick && childGroupVisible && that._isRootItem(element);\n if (options.closeOnClick && (!isLink || isLocalLink) && (!childGroup.length || shouldCloseTheRootItem)) {\n element.removeClass(HOVERSTATE).css('height');\n that._oldHoverItem = that._findRootParent(element);\n var item = that._parentsUntil(link, that.element, allItemsSelector);\n that._forceClose = !!overflowWrapper;\n that.close(item);\n that.clicked = false;\n if ('MSPointerUp'.indexOf(e.type) != -1) {\n e.preventDefault();\n }\n return;\n }\n if (isLink && e.enterKey) {\n link[0].click();\n }\n if ((!that._isRootItem(element) || options.openOnClick === false) && !options.openOnClick.subMenuItems && !kendo.support.touch && !(isPointerTouch(e) && that._isRootItem(element.closest(allItemsSelector)))) {\n return;\n }\n if (!isLink && !formNode && !isTargetLink) {\n e.preventDefault();\n }\n that.clicked = true;\n openHandle = childGroup.is(':visible') ? CLOSE : OPEN;\n if (!options.closeOnClick && openHandle == CLOSE) {\n return;\n }\n that[openHandle](element);\n },\n _parentsUntil: function (context, top, selector) {\n var overflowWrapper = this._overflowWrapper();\n if (!overflowWrapper) {\n return context.parentsUntil(top, selector);\n } else {\n var parents = overflowMenuParents(context, overflowWrapper);\n var result = [];\n $(parents).each(function () {\n var parent = $(this);\n if (parent.is(top)) {\n return false;\n }\n if (parent.is(selector)) {\n result.push(this);\n }\n });\n return $(result);\n }\n },\n _triggerSelect: function (target, itemElement) {\n target = target.is('.k-link') ? target : target.closest('.k-link');\n var selectHandler = target.data('selectHandler'), itemSelectEventData;\n if (selectHandler) {\n itemSelectEventData = this._getEventData(target);\n selectHandler.call(this, itemSelectEventData);\n }\n var isSelectItemDefaultPrevented = itemSelectEventData && itemSelectEventData.isDefaultPrevented();\n var isSelectDefaultPrevented = this._triggerEvent({\n item: itemElement,\n type: SELECT\n });\n return isSelectItemDefaultPrevented || isSelectDefaultPrevented;\n },\n _getEventData: function (target) {\n var eventData = {\n sender: this,\n target: target,\n _defaultPrevented: false,\n preventDefault: function () {\n this._defaultPrevented = true;\n },\n isDefaultPrevented: function () {\n return this._defaultPrevented;\n }\n };\n return eventData;\n },\n _documentClick: function (e) {\n var that = this;\n var target = $(e.target).hasClass('k-menu-expand-arrow') ? that._lastClickedElement : e.target;\n if (contains((that._overflowWrapper() || that.element)[0], target)) {\n that._lastClickedElement = undefined;\n return;\n }\n that.clicked = false;\n },\n _focus: function (e) {\n var that = this, target = e.target, hoverItem = that._hoverItem(), active = activeElement();\n if (target != that.wrapper[0] && !$(target).is(':kendoFocusable')) {\n e.stopPropagation();\n $(target).closest('.k-content').closest('.k-menu-group').closest('.k-item').addClass(FOCUSEDSTATE);\n that.wrapper.focus();\n return;\n }\n if (active === e.currentTarget) {\n if (hoverItem.length) {\n that._moveHover([], hoverItem);\n } else if (!that._oldHoverItem) {\n that._moveHover([], that.wrapper.children().first());\n }\n }\n },\n _keydown: function (e) {\n var that = this, key = e.keyCode, hoverItem = that._oldHoverItem, target, belongsToVertical, hasChildren, isRtl = kendo.support.isRtl(that.wrapper);\n if (e.target != e.currentTarget && key != keys.ESC) {\n return;\n }\n if (!hoverItem) {\n hoverItem = that._oldHoverItem = that._hoverItem();\n }\n belongsToVertical = that._itemBelongsToVertival(hoverItem);\n hasChildren = that._itemHasChildren(hoverItem);\n that._keyTriggered = true;\n if (key == keys.RIGHT) {\n target = that[isRtl ? '_itemLeft' : '_itemRight'](hoverItem, belongsToVertical, hasChildren);\n } else if (key == keys.LEFT) {\n target = that[isRtl ? '_itemRight' : '_itemLeft'](hoverItem, belongsToVertical, hasChildren);\n } else if (key == keys.DOWN) {\n target = that._itemDown(hoverItem, belongsToVertical, hasChildren);\n } else if (key == keys.UP) {\n target = that._itemUp(hoverItem, belongsToVertical, hasChildren);\n } else if (key == keys.HOME) {\n that._moveHover(hoverItem, hoverItem.parent().children().first());\n e.preventDefault();\n } else if (key == keys.END) {\n that._moveHover(hoverItem, hoverItem.parent().children().last());\n e.preventDefault();\n } else if (key == keys.ESC) {\n target = that._itemEsc(hoverItem, belongsToVertical);\n } else if (key == keys.ENTER || key == keys.SPACEBAR) {\n target = hoverItem.children('.k-link');\n if (target.length > 0) {\n that._click({\n target: target[0],\n preventDefault: function () {\n },\n enterKey: true\n });\n if (hasChildren && !hoverItem.hasClass(DISABLEDSTATE)) {\n that.open(hoverItem);\n that._moveHover(hoverItem, that._childPopupElement(hoverItem).children().first());\n } else {\n that._moveHover(hoverItem, that._findRootParent(hoverItem));\n }\n }\n } else if (key == keys.TAB) {\n target = that._findRootParent(hoverItem);\n that._moveHover(hoverItem, target);\n that._checkActiveElement();\n return;\n }\n if (target && target[0]) {\n e.preventDefault();\n e.stopPropagation();\n }\n },\n _hoverItem: function () {\n return this.wrapper.find('.k-item.k-state-hover,.k-item.k-state-focused').filter(':visible');\n },\n _itemBelongsToVertival: function (item) {\n var menuIsVertical = this.wrapper.hasClass('k-menu-vertical');\n if (!item.length) {\n return menuIsVertical;\n }\n return item.parent().hasClass('k-menu-group') || menuIsVertical;\n },\n _itemHasChildren: function (item) {\n if (!item || !item.length || !item[0].nodeType) {\n return false;\n }\n return item.children('.k-menu-group, div.k-animation-container').length > 0 || !!item.data(POPUP_OPENER_ATTR) && !!this._overflowWrapper().children(popupGroupSelector(item.data(POPUP_OPENER_ATTR)));\n },\n _moveHover: function (item, nextItem) {\n var that = this, id = that._ariaId;\n if (item.length && nextItem.length) {\n item.removeClass(FOCUSEDSTATE);\n }\n if (nextItem.length) {\n if (nextItem[0].id) {\n id = nextItem[0].id;\n }\n nextItem.addClass(FOCUSEDSTATE);\n that._oldHoverItem = nextItem;\n if (id) {\n that.element.removeAttr('aria-activedescendant');\n $('#' + id).removeAttr('id');\n nextItem.attr('id', id);\n that.element.attr('aria-activedescendant', id);\n }\n that._scrollToItem(nextItem);\n }\n },\n _findRootParent: function (item) {\n if (this._isRootItem(item)) {\n return item;\n } else {\n return this._parentsUntil(item, menuSelector, 'li.k-item').last();\n }\n },\n _isRootItem: function (item) {\n return item.parent().hasClass(MENU);\n },\n _itemRight: function (item, belongsToVertical, hasChildren) {\n var that = this, nextItem, parentItem, overflowWrapper;\n if (!belongsToVertical) {\n nextItem = item.nextAll(nextSelector);\n if (!nextItem.length) {\n nextItem = item.prevAll(lastSelector);\n }\n that.close(item);\n } else if (hasChildren && !item.hasClass(DISABLEDSTATE)) {\n that.open(item);\n nextItem = that._childPopupElement(item).children().first();\n } else if (that.options.orientation == 'horizontal') {\n parentItem = that._findRootParent(item);\n overflowWrapper = that._overflowWrapper();\n if (overflowWrapper) {\n var rootPopup = itemPopup(parentItem, overflowWrapper);\n that._closeChildPopups(rootPopup);\n }\n that.close(parentItem);\n nextItem = parentItem.nextAll(nextSelector);\n }\n if (nextItem && !nextItem.length) {\n nextItem = that.wrapper.children('.k-item').first();\n } else if (!nextItem) {\n nextItem = [];\n }\n that._moveHover(item, nextItem);\n return nextItem;\n },\n _itemLeft: function (item, belongsToVertical) {\n var that = this, nextItem, overflowWrapper;\n if (!belongsToVertical) {\n nextItem = item.prevAll(nextSelector);\n if (!nextItem.length) {\n nextItem = item.nextAll(lastSelector);\n }\n that.close(item);\n } else {\n nextItem = item.parent().closest('.k-item');\n overflowWrapper = that._overflowWrapper();\n if (!nextItem.length && overflowWrapper) {\n nextItem = popupParentItem(item.parent(), overflowWrapper);\n }\n that.close(nextItem);\n if (that._isRootItem(nextItem) && that.options.orientation == 'horizontal') {\n nextItem = nextItem.prevAll(nextSelector);\n }\n }\n if (!nextItem.length) {\n nextItem = that.wrapper.children('.k-item').last();\n }\n that._moveHover(item, nextItem);\n return nextItem;\n },\n _itemDown: function (item, belongsToVertical, hasChildren) {\n var that = this, nextItem;\n if (!belongsToVertical) {\n if (!hasChildren || item.hasClass(DISABLEDSTATE)) {\n return;\n } else {\n that.open(item);\n nextItem = that._childPopupElement(item).children().first();\n }\n } else {\n nextItem = item.nextAll(nextSelector);\n }\n if (!nextItem.length && item.length) {\n nextItem = item.parent().children().first();\n } else if (!item.length) {\n nextItem = that.wrapper.children('.k-item').first();\n }\n that._moveHover(item, nextItem);\n return nextItem;\n },\n _itemUp: function (item, belongsToVertical) {\n var that = this, nextItem;\n if (!belongsToVertical) {\n return;\n } else {\n nextItem = item.prevAll(nextSelector);\n }\n if (!nextItem.length && item.length) {\n nextItem = item.parent().children().last();\n } else if (!item.length) {\n nextItem = that.wrapper.children('.k-item').last();\n }\n that._moveHover(item, nextItem);\n return nextItem;\n },\n _scrollToItem: function (item) {\n var that = this;\n if (that.options.scrollable && item && item.length) {\n var ul = item.parent();\n var isHorizontal = ul.hasClass(MENU) ? that.options.orientation == 'horizontal' : false;\n var scrollDir = isHorizontal ? 'scrollLeft' : 'scrollTop';\n var getSize = isHorizontal ? kendo._outerWidth : kendo._outerHeight;\n var currentScrollOffset = ul[scrollDir]();\n var itemSize = getSize(item);\n var itemOffset = item[0][isHorizontal ? 'offsetLeft' : 'offsetTop'];\n var ulSize = getSize(ul);\n var scrollButtons = ul.siblings(scrollButtonSelector);\n var scrollButtonSize = scrollButtons.length ? getSize(scrollButtons.first()) : 0;\n var itemPosition;\n if (currentScrollOffset + ulSize < itemOffset + itemSize + scrollButtonSize) {\n itemPosition = itemOffset + itemSize - ulSize + scrollButtonSize;\n } else if (currentScrollOffset > itemOffset - scrollButtonSize) {\n itemPosition = itemOffset - scrollButtonSize;\n }\n if (!isNaN(itemPosition)) {\n var scrolling = {};\n scrolling[scrollDir] = itemPosition;\n ul.finish().animate(scrolling, 'fast', 'linear', function () {\n that._toggleScrollButtons(ul, scrollButtons.first(), scrollButtons.last(), isHorizontal);\n });\n }\n }\n },\n _itemEsc: function (item, belongsToVertical) {\n var that = this, nextItem;\n if (!belongsToVertical) {\n return item;\n } else {\n nextItem = item.parent().closest('.k-item');\n that.close(nextItem);\n that._moveHover(item, nextItem);\n }\n return nextItem;\n },\n _childPopupElement: function (item) {\n var popupElement = item.find('.k-menu-group');\n var wrapper = this._overflowWrapper();\n if (!popupElement.length && wrapper) {\n popupElement = itemPopup(item, wrapper);\n }\n return popupElement;\n },\n _triggerEvent: function (e) {\n var that = this;\n return that.trigger(e.type, {\n type: e.type,\n item: e.item\n });\n },\n _focusHandler: function (e) {\n var that = this, item = $(kendo.eventTarget(e)).closest(allItemsSelector);\n if (item.hasClass(DISABLEDSTATE)) {\n return;\n }\n setTimeout(function () {\n that._moveHover([], item);\n if (item.children('.k-content')[0]) {\n item.parent().closest('.k-item').removeClass(FOCUSEDSTATE);\n }\n }, 200);\n },\n _animations: function (options) {\n if (options && 'animation' in options && !options.animation) {\n options.animation = {\n open: { effects: {} },\n close: {\n hide: true,\n effects: {}\n }\n };\n }\n },\n _dataSource: function (options) {\n var that = this, dataSource = options ? options.dataSource : that.options.dataSource;\n if (!dataSource) {\n return;\n }\n dataSource = isArray(dataSource) ? { data: dataSource } : dataSource;\n that._unbindDataSource();\n if (!dataSource.fields) {\n dataSource.fields = [\n { field: 'uid' },\n { field: 'text' },\n { field: 'url' },\n { field: 'cssClass' },\n { field: 'spriteCssClass' },\n { field: 'imageUrl' },\n { field: 'imageAttr' },\n { field: 'attr' },\n { field: 'contentAttr' },\n { field: 'content' },\n { field: 'encoded' },\n { field: 'items' },\n { field: 'select' }\n ];\n }\n that.dataSource = HierarchicalDataSource.create(dataSource);\n that._bindDataSource();\n that.dataSource.fetch();\n },\n _bindDataSource: function () {\n this._refreshHandler = proxy(this.refresh, this);\n this._errorHandler = proxy(this._error, this);\n this.dataSource.bind(CHANGE, this._refreshHandler);\n this.dataSource.bind(ERROR, this._errorHandler);\n },\n _unbindDataSource: function () {\n var dataSource = this.dataSource;\n if (dataSource) {\n dataSource.unbind(CHANGE, this._refreshHandler);\n dataSource.unbind(ERROR, this._errorHandler);\n }\n },\n _error: function () {\n },\n findByUid: function (uid) {\n var wrapperElement = this._overflowWrapper() || this.element;\n return wrapperElement.find('[' + kendo.attr('uid') + '=' + uid + ']');\n },\n refresh: function (ev) {\n var that = this;\n var node = ev.node;\n var action = ev.action;\n var parentElement = node ? that.findByUid(node.uid) : that.element;\n var itemsToUpdate = ev.items;\n var index = ev.index;\n var updateProxy = $.proxy(that._updateItem, that);\n var removeProxy = $.proxy(that._removeItem, that);\n if (action == 'add') {\n that._appendItems(itemsToUpdate, index, parentElement);\n } else if (action == 'remove') {\n itemsToUpdate.forEach(removeProxy);\n } else if (action == 'itemchange') {\n itemsToUpdate.forEach(updateProxy);\n } else if (action === 'itemloaded') {\n that.append(ev.items, parentElement);\n } else {\n this._initData();\n }\n this.trigger(DATABOUND, {\n item: parentElement,\n dataItem: node\n });\n },\n _appendItems: function (items, index, parent) {\n var that = this;\n var referenceItem = parent.find(itemSelector).eq(index);\n if (referenceItem.length) {\n that.insertBefore(items, referenceItem);\n } else {\n that.append(items, parent);\n }\n },\n _removeItem: function (item) {\n var that = this;\n var element = that.findByUid(item.uid);\n that.remove(element);\n },\n _updateItem: function (item) {\n var that = this;\n var element = that.findByUid(item.uid);\n var nextElement = element.next();\n var parentNode = item.parentNode();\n that.remove(element);\n if (nextElement.length) {\n that.insertBefore(item, nextElement);\n } else {\n that.append(item, parentNode && that.findByUid(parentNode.uid));\n }\n },\n _accessors: function () {\n var that = this, options = that.options, i, field, textField, element = that.element;\n for (i in bindings) {\n field = options[bindings[i]];\n textField = element.attr(kendo.attr(i + '-field'));\n if (!field && textField) {\n field = textField;\n }\n if (!field) {\n field = i;\n }\n if (!isArray(field)) {\n field = [field];\n }\n options[bindings[i]] = field;\n }\n },\n _fieldAccessor: function (fieldName) {\n var fieldBindings = this.options[bindings[fieldName]] || [], count = fieldBindings.length, result = '(function(item) {';\n if (count === 0) {\n result += 'return item[\\'' + fieldName + '\\'];';\n } else {\n result += 'var levels = [' + $.map(fieldBindings, function (x) {\n return 'function(d){ return ' + kendo.expr(x) + '}';\n }).join(',') + '];';\n result += 'if(item.level){return levels[Math.min(item.level(), ' + count + '-1)](item);}else';\n result += '{return levels[' + count + '-1](item)}';\n }\n result += '})';\n return result;\n },\n _templates: function () {\n var that = this, options = that.options, fieldAccessor = proxy(that._fieldAccessor, that);\n if (options.template && typeof options.template == STRING) {\n options.template = template(options.template);\n } else if (!options.template) {\n options.template = template('# var text = ' + fieldAccessor('text') + '(data.item); #' + '# if (typeof data.item.encoded != \\'undefined\\' && data.item.encoded === false) {#' + '#= text #' + '# } else { #' + '#: text #' + '# } #');\n }\n that.templates = {\n content: template('#var contentHtml = ' + fieldAccessor('content') + '(item);#' + '<div #= contentCssAttributes(item.toJSON ? item.toJSON() : item) # tabindex=\\'-1\\'>#= contentHtml || \\'\\' #</div>'),\n group: template('<ul class=\\'#= groupCssClass(group) #\\'#= groupAttributes(group) # role=\\'menu\\' aria-hidden=\\'true\\'>' + '#= renderItems(data) #' + '</ul>'),\n itemWrapper: template('# var url = ' + fieldAccessor('url') + '(item); #' + '# var imageUrl = ' + fieldAccessor('imageUrl') + '(item); #' + '# var imgAttributes = ' + fieldAccessor('imageAttr') + '(item);#' + '# var tag = url ? \\'a\\' : \\'span\\' #' + '<#= tag # class=\\'#= textClass(item) #\\' #if(url){#href=\\'#= url #\\'#}#>' + '# if (imageUrl) { #' + '<img #= imageCssAttributes(imgAttributes) # alt=\\'\\' src=\\'#= imageUrl #\\' />' + '# } #' + '#= sprite(item) ##= data.menu.options.template(data) #' + '#= arrow(data) #' + '</#= tag #>'),\n item: template('#var contentHtml = ' + fieldAccessor('content') + '(item);#' + '<li class=\\'#= wrapperCssClass(group, item) #\\' #= itemCssAttributes(item.toJSON ? item.toJSON() : item) # role=\\'menuitem\\' #=item.items ? \"aria-haspopup=\\'true\\'\": \"\"#' + '#=item.enabled === false ? \"aria-disabled=\\'true\\'\" : \\'\\'#' + kendo.attr('uid') + '=\\'#= item.uid #\\' >' + '#= itemWrapper(data) #' + '#if (item.hasChildren || item.items) { #' + '#= subGroup({ items: item.items, menu: menu, group: { expanded: item.expanded } }) #' + '# } else if (item.content || item.contentUrl || contentHtml) { #' + '#= renderContent(data) #' + '# } #' + '</li>'),\n scrollButton: template('<span class=\\'k-button k-button-icon k-menu-scroll-button k-scroll-#= direction #\\' unselectable=\\'on\\'>' + '<span class=\\'k-icon k-i-arrow-60-#= direction #\\'></span></span>'),\n arrow: template('<span class=\\'#= arrowClass(item, group) #\\'></span>'),\n sprite: template('# var spriteCssClass = ' + fieldAccessor('spriteCssClass') + '(data); if(spriteCssClass) {#<span class=\\'k-sprite #= spriteCssClass #\\'></span>#}#'),\n empty: template('')\n };\n },\n renderItem: function (options) {\n var that = this;\n options = extend({\n menu: that,\n group: {}\n }, options);\n var empty = that.templates.empty, item = options.item;\n return that.templates.item(extend(options, {\n sprite: that.templates.sprite,\n itemWrapper: that.templates.itemWrapper,\n renderContent: that.renderContent,\n arrow: item.items || item.content || item[that.options.dataContentField[0]] ? that.templates.arrow : empty,\n subGroup: that.renderGroup\n }, rendering));\n },\n renderGroup: function (options) {\n var that = this;\n var templates = that.templates || options.menu.templates;\n return templates.group(extend({\n renderItems: function (options) {\n var html = '', i = 0, items = options.items, len = items ? items.length : 0, group = extend({ length: len }, options.group);\n for (; i < len; i++) {\n html += options.menu.renderItem(extend(options, {\n group: group,\n item: extend({ index: i }, items[i])\n }));\n }\n return html;\n }\n }, options, rendering));\n },\n renderContent: function (options) {\n return options.menu.templates.content(extend(options, rendering));\n }\n });\n var ContextMenu = Menu.extend({\n init: function (element, options) {\n var that = this;\n Menu.fn.init.call(that, element, options);\n that._marker = kendo.guid().substring(0, 8);\n that.target = $(that.options.target);\n that._popup();\n that._wire();\n },\n _initOverflow: function (options) {\n var that = this;\n if (options.scrollable && !that._overflowWrapper()) {\n that._openedPopups = {};\n that._popupsWrapper = (that.element.parent().is(animationContainerSelector) ? that.element.parent() : that.element).wrap('<div class=\\'k-popups-wrapper ' + options.orientation + '\\'></div>').parent();\n if (that.options.orientation == 'horizontal') {\n removeSpacesBetweenItems(that.element);\n }\n if (options.appendTo) {\n options.appendTo = $(options.appendTo);\n options.appendTo.append(that._popupsWrapper);\n }\n that._initialHeight = that.element[0].style.height;\n that._initialWidth = that.element[0].style.width;\n }\n },\n options: {\n name: 'ContextMenu',\n filter: null,\n showOn: 'contextmenu',\n orientation: 'vertical',\n alignToAnchor: false,\n copyAnchorStyles: true,\n target: 'body'\n },\n events: [\n OPEN,\n CLOSE,\n ACTIVATE,\n DEACTIVATE,\n SELECT\n ],\n setOptions: function (options) {\n var that = this;\n Menu.fn.setOptions.call(that, options);\n that.target.off(that.showOn + NS + that._marker, that._showProxy);\n if (that.userEvents) {\n that.userEvents.destroy();\n }\n that.target = $(that.options.target);\n if (options.orientation && that.popup.wrapper[0]) {\n that.popup.element.unwrap();\n }\n that._wire();\n Menu.fn.setOptions.call(this, options);\n },\n destroy: function () {\n var that = this;\n that.target.off(that.options.showOn + NS + that._marker);\n DOCUMENT_ELEMENT.off(kendo.support.mousedown + NS + that._marker, that._closeProxy);\n if (that.userEvents) {\n that.userEvents.destroy();\n }\n Menu.fn.destroy.call(that);\n },\n open: function (x, y) {\n var that = this;\n x = $(x)[0];\n if (contains(that.element[0], $(x)[0]) || that._itemHasChildren($(x))) {\n Menu.fn.open.call(that, x);\n } else {\n if (that._triggerEvent({\n item: that.element,\n type: OPEN\n }) === false) {\n if (that.popup.visible() && that.options.filter) {\n that.popup.close(true);\n that.popup.element.kendoStop(true);\n }\n if (y !== undefined) {\n var overflowWrapper = that._overflowWrapper();\n if (overflowWrapper) {\n var offset = overflowWrapper.offset();\n x -= offset.left;\n y -= offset.top;\n }\n that.popup.wrapper.hide();\n that._configurePopupScrolling(x, y);\n that.popup.open(x, y);\n } else {\n that.popup.options.anchor = (x ? x : that.popup.anchor) || that.target;\n that.popup.element.kendoStop(true);\n that._configurePopupScrolling();\n that.popup.open();\n }\n DOCUMENT_ELEMENT.off(that.popup.downEvent, that.popup._mousedownProxy);\n DOCUMENT_ELEMENT.on(kendo.support.mousedown + NS + that._marker, that._closeProxy);\n }\n }\n return that;\n },\n _configurePopupScrolling: function (x, y) {\n var that = this;\n var popup = that.popup;\n var isHorizontal = that.options.orientation == 'horizontal';\n if (that.options.scrollable) {\n that._wrapPopupElement(popup);\n popup.element.parent().css({\n position: '',\n height: ''\n });\n popup.element.css({\n visibility: 'hidden',\n display: '',\n position: ''\n });\n if (isHorizontal) {\n that._setPopupWidth(popup, isNaN(x) ? undefined : {\n isFixed: true,\n x: x,\n y: y\n });\n } else {\n that._setPopupHeight(popup, isNaN(x) ? undefined : {\n isFixed: true,\n x: x,\n y: y\n });\n }\n popup.element.css({\n visibility: '',\n display: 'none',\n position: 'absolute'\n });\n that._initPopupScrollButtons(popup, isHorizontal, true);\n popup.element.siblings(scrollButtonSelector).hide();\n }\n },\n _setPopupWidth: function (popup, isFixed) {\n var popupElement = popup.element;\n var popups = popupElement.add(popupElement.parent(animationContainerSelector));\n popups.width(this._initialWidth || '');\n var location = popup._location(isFixed);\n var windowWidth = $(window).width();\n var popupOuterWidth = location.width;\n var popupOffsetLeft = Math.max(location.left, 0);\n var scrollLeft = isFixed ? 0 : parentsScroll(this._overflowWrapper()[0], 'scrollLeft');\n var shadow = kendo.getShadows(popupElement);\n var maxWidth = windowWidth - shadow.left - shadow.right;\n var canFit = maxWidth + scrollLeft > popupOuterWidth + popupOffsetLeft;\n if (!canFit) {\n popups.css({\n overflow: 'hidden',\n width: maxWidth - popupOffsetLeft + scrollLeft + 'px'\n });\n }\n },\n close: function () {\n var that = this;\n if (contains(that.element[0], $(arguments[0])[0]) || that._itemHasChildren(arguments[0])) {\n Menu.fn.close.call(that, arguments[0]);\n } else {\n if (that.popup.visible()) {\n if (that._triggerEvent({\n item: that.element,\n type: CLOSE\n }) === false) {\n that.popup.close();\n DOCUMENT_ELEMENT.off(kendo.support.mousedown + NS + that._marker, that._closeProxy);\n that.unbind(SELECT, that._closeTimeoutProxy);\n }\n }\n }\n },\n _showHandler: function (e) {\n var ev = e, offset, that = this, options = that.options, target = kendo.support.mobileOS ? $(ev.target) : $(ev.currentTarget);\n if (e.event) {\n ev = e.event;\n ev.pageX = e.x.location;\n ev.pageY = e.y.location;\n }\n if (contains(that.element[0], e.relatedTarget || e.target)) {\n return;\n }\n that._eventOrigin = ev;\n ev.preventDefault();\n ev.stopImmediatePropagation();\n that.element.find('.' + FOCUSEDSTATE).removeClass(FOCUSEDSTATE);\n if (options.filter && target.is(options.filter) || !options.filter) {\n if (options.alignToAnchor) {\n that.popup.options.anchor = ev.currentTarget;\n that.open(ev.currentTarget);\n } else {\n that.popup.options.anchor = ev.currentTarget;\n if (that._targetChild) {\n offset = that.target.offset();\n that.open(ev.pageX - offset.left, ev.pageY - offset.top);\n } else {\n that.open(ev.pageX, ev.pageY);\n }\n }\n }\n },\n _closeHandler: function (e) {\n var that = this, target = $(e.relatedTarget || e.target), sameTarget = target.closest(that.target.selector)[0] == that.target[0], item = target.closest(itemSelector), children = that._itemHasChildren(item), overflowWrapper = that._overflowWrapper(), containment = contains(that.element[0], target[0]) || overflowWrapper && contains(overflowWrapper[0], target[0]);\n that._eventOrigin = e;\n var normalClick = e.which !== 3;\n if (that.popup.visible() && (normalClick && sameTarget || !sameTarget) && (that.options.closeOnClick && !children && containment || !containment)) {\n if (containment) {\n this.unbind(SELECT, this._closeTimeoutProxy);\n that.bind(SELECT, that._closeTimeoutProxy);\n } else {\n that.close();\n }\n }\n },\n _wire: function () {\n var that = this, options = that.options, target = that.target;\n that._preventProxy = null;\n that._showProxy = proxy(that._showHandler, that);\n that._closeProxy = proxy(that._closeHandler, that);\n that._closeTimeoutProxy = proxy(that.close, that);\n if (target[0]) {\n if (kendo.support.mobileOS && options.showOn == 'contextmenu') {\n that.userEvents = new kendo.UserEvents(target, {\n filter: options.filter,\n allowSelection: false\n });\n that._preventProxy = function () {\n return false;\n };\n that.userEvents.bind('hold', that._showProxy);\n }\n if (options.filter) {\n target.on(options.showOn + NS + that._marker, options.filter, that._preventProxy || that._showProxy);\n } else {\n target.on(options.showOn + NS + that._marker, that._preventProxy || that._showProxy);\n }\n }\n },\n _triggerEvent: function (e) {\n var that = this, anchor = $(that.popup.options.anchor)[0], origin = that._eventOrigin;\n that._eventOrigin = undefined;\n return that.trigger(e.type, extend({\n type: e.type,\n item: e.item || this.element[0],\n target: anchor\n }, origin ? { event: origin } : {}));\n },\n _popup: function () {\n var that = this;\n var overflowWrapper = that._overflowWrapper();\n that._triggerProxy = proxy(that._triggerEvent, that);\n that.popup = that.element.addClass('k-context-menu').kendoPopup({\n autosize: that.options.orientation === 'horizontal',\n anchor: that.target || 'body',\n copyAnchorStyles: that.options.copyAnchorStyles,\n collision: that.options.popupCollision || 'fit',\n animation: that.options.animation,\n activate: that._triggerProxy,\n deactivate: that._triggerProxy,\n appendTo: overflowWrapper || that.options.appendTo,\n close: !overflowWrapper ? $.noop : function (e) {\n $(getChildPopups(e.sender.element, overflowWrapper)).each(function (i, p) {\n var popup = p.data(KENDOPOPUP);\n if (popup) {\n popup.close(true);\n }\n });\n }\n }).data(KENDOPOPUP);\n that._targetChild = contains(that.target[0], that.popup.element[0]);\n }\n });\n ui.plugin(Menu);\n ui.plugin(ContextMenu);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.panelbar', ['kendo.data'], f);\n}(function () {\n var __meta__ = {\n id: 'panelbar',\n name: 'PanelBar',\n category: 'web',\n description: 'The PanelBar widget displays hierarchical data as a multi-level expandable panel bar.',\n depends: [\n 'core',\n 'data',\n 'data.odata'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, keys = kendo.keys, extend = $.extend, proxy = $.proxy, each = $.each, isArray = $.isArray, template = kendo.template, Widget = ui.Widget, HierarchicalDataSource = kendo.data.HierarchicalDataSource, excludedNodesRegExp = /^(ul|a|div)$/i, NS = '.kendoPanelBar', IMG = 'img', HREF = 'href', LAST = 'k-last', LINK = 'k-link', LINKSELECTOR = '.' + LINK, ERROR = 'error', ITEM = '.k-item', GROUP = '.k-group', VISIBLEGROUP = GROUP + ':visible', IMAGE = 'k-image', FIRST = 'k-first', CHANGE = 'change', EXPAND = 'expand', SELECT = 'select', CLICK = 'click', CONTENT = 'k-content', ACTIVATE = 'activate', COLLAPSE = 'collapse', DATABOUND = 'dataBound', MOUSEENTER = 'mouseenter', MOUSELEAVE = 'mouseleave', CONTENTLOAD = 'contentLoad', UNDEFINED = 'undefined', ACTIVECLASS = 'k-state-active', GROUPS = '> .k-panel', CONTENTS = '> .k-content', STRING = 'string', FOCUSEDCLASS = 'k-state-focused', DISABLEDCLASS = 'k-state-disabled', SELECTEDCLASS = 'k-state-selected', SELECTEDSELECTOR = '.' + SELECTEDCLASS, HIGHLIGHTCLASS = 'k-state-highlight', ACTIVEITEMSELECTOR = ITEM + ':not(.k-state-disabled)', clickableItems = '> ' + ACTIVEITEMSELECTOR + ' > ' + LINKSELECTOR + ', .k-panel > ' + ACTIVEITEMSELECTOR + ' > ' + LINKSELECTOR, disabledItems = ITEM + '.k-state-disabled > .k-link', selectableItems = '> li > ' + SELECTEDSELECTOR + ', .k-panel > li > ' + SELECTEDSELECTOR, defaultState = 'k-state-default', ARIA_DISABLED = 'aria-disabled', ARIA_EXPANDED = 'aria-expanded', ARIA_HIDDEN = 'aria-hidden', ARIA_SELECTED = 'aria-selected', VISIBLE = ':visible', EMPTY = ':empty', SINGLE = 'single', bindings = {\n text: 'dataTextField',\n url: 'dataUrlField',\n spriteCssClass: 'dataSpriteCssClassField',\n imageUrl: 'dataImageUrlField'\n }, itemIcon, rendering = {\n aria: function (item) {\n var attr = '';\n if (item.items || item.content || item.contentUrl || item.expanded) {\n attr += ARIA_EXPANDED + '=\\'' + (item.expanded ? 'true' : 'false') + '\\' ';\n }\n if (item.enabled === false) {\n attr += ARIA_DISABLED + '=\\'true\\'';\n }\n return attr;\n },\n wrapperCssClass: function (group, item) {\n var result = 'k-item', index = item.index;\n if (item.enabled === false) {\n result += ' ' + DISABLEDCLASS;\n } else if (item.expanded === true) {\n result += ' ' + ACTIVECLASS;\n } else {\n result += ' k-state-default';\n }\n if (index === 0) {\n result += ' k-first';\n }\n if (index == group.length - 1) {\n result += ' k-last';\n }\n if (item.cssClass) {\n result += ' ' + item.cssClass;\n }\n return result;\n },\n textClass: function (item, group) {\n var result = LINK;\n if (group.firstLevel) {\n result += ' k-header';\n }\n if (item.selected) {\n result += ' ' + SELECTEDCLASS;\n }\n return result;\n },\n textAttributes: function (url) {\n return url ? ' href=\\'' + url + '\\'' : '';\n },\n arrowClass: function (item) {\n var result = 'k-icon';\n result += item.expanded ? ' k-panelbar-collapse k-i-arrow-60-up' : ' k-panelbar-expand k-i-arrow-60-down';\n return result;\n },\n text: function (item) {\n return item.encoded === false ? item.text : kendo.htmlEncode(item.text);\n },\n groupAttributes: function (group) {\n return group.expanded !== true ? ' style=\\'display:none\\'' : '';\n },\n ariaHidden: function (group) {\n return group.expanded !== true;\n },\n groupCssClass: function () {\n return 'k-group k-panel';\n },\n contentAttributes: function (content) {\n return content.item.expanded !== true ? ' style=\\'display:none\\'' : '';\n },\n content: function (item) {\n return item.content ? item.content : item.contentUrl ? '' : ' ';\n },\n contentUrl: function (item) {\n return item.contentUrl ? 'href=\"' + item.contentUrl + '\"' : '';\n }\n };\n function updateFirstLast(items) {\n items = $(items);\n items.filter('.k-first:not(:first-child)').removeClass(FIRST);\n items.filter('.k-last:not(:last-child)').removeClass(LAST);\n items.filter(':first-child').addClass(FIRST);\n items.filter(':last-child').addClass(LAST);\n }\n function updateItemHtml(item) {\n var wrapper = item, group = item.children('ul'), toggleButton = wrapper.children('.k-link').children('.k-icon');\n if (item.hasClass('k-panelbar')) {\n return;\n }\n if (!toggleButton.length && group.length) {\n toggleButton = $('<span class=\\'k-icon\\' />').appendTo(wrapper);\n } else if (!group.length || !group.children().length) {\n toggleButton.remove();\n group.remove();\n }\n }\n itemIcon = function (item) {\n return item.children('span').children('.k-icon');\n };\n var PanelBar = kendo.ui.DataBoundWidget.extend({\n init: function (element, options) {\n var that = this, content, hasDataSource;\n if (isArray(options)) {\n options = { dataSource: options };\n }\n hasDataSource = options && !!options.dataSource;\n Widget.fn.init.call(that, element, options);\n element = that.wrapper = that.element.addClass('k-widget k-reset k-header k-panelbar');\n options = that.options;\n if (element[0].id) {\n that._itemId = element[0].id + '_pb_active';\n }\n that._tabindex();\n that._accessors();\n that._dataSource();\n that._templates();\n that._initData(hasDataSource);\n that._updateClasses();\n that._animations(options);\n element.on(CLICK + NS, clickableItems, proxy(that._click, that)).on(MOUSEENTER + NS + ' ' + MOUSELEAVE + NS, clickableItems, that._toggleHover).on(CLICK + NS, disabledItems, false).on(CLICK + NS, '.k-request-retry', proxy(that._retryRequest, that)).on('keydown' + NS, proxy(that._keydown, that)).on('focus' + NS, function () {\n var item = that.select();\n that._current(item[0] ? item : that._first());\n }).on('blur' + NS, function () {\n that._current(null);\n }).attr('role', 'tree');\n content = element.find('li.' + ACTIVECLASS + ' > .' + CONTENT);\n if (content[0]) {\n that.expand(content.parent(), false);\n }\n if (!options.dataSource) {\n that._angularCompile();\n }\n kendo.notify(that);\n },\n events: [\n EXPAND,\n COLLAPSE,\n SELECT,\n ACTIVATE,\n CHANGE,\n ERROR,\n DATABOUND,\n CONTENTLOAD\n ],\n options: {\n name: 'PanelBar',\n dataSource: {},\n animation: {\n expand: {\n effects: 'expand:vertical',\n duration: 200\n },\n collapse: { duration: 200 }\n },\n messages: {\n loading: 'Loading...',\n requestFailed: 'Request failed.',\n retry: 'Retry'\n },\n autoBind: true,\n loadOnDemand: true,\n expandMode: 'multiple',\n template: '',\n dataTextField: null\n },\n _angularCompile: function () {\n var that = this;\n that.angular('compile', function () {\n return {\n elements: that.element.children('li'),\n data: [{ dataItem: that.options.$angular }]\n };\n });\n },\n _angularCompileElements: function (html, items) {\n var that = this;\n that.angular('compile', function () {\n return {\n elements: html,\n data: $.map(items, function (item) {\n return [{ dataItem: item }];\n })\n };\n });\n },\n _angularCleanup: function () {\n var that = this;\n that.angular('cleanup', function () {\n return { elements: that.element.children('li') };\n });\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.element.off(NS);\n this._angularCleanup();\n kendo.destroy(this.element);\n },\n _initData: function (hasDataSource) {\n var that = this;\n if (hasDataSource) {\n that.element.empty();\n if (that.options.autoBind) {\n that._progress(true);\n that.dataSource.fetch();\n }\n }\n },\n _templates: function () {\n var that = this, options = that.options, fieldAccessor = proxy(that._fieldAccessor, that);\n if (options.template && typeof options.template == STRING) {\n options.template = template(options.template);\n } else if (!options.template) {\n options.template = template('# var text = ' + fieldAccessor('text') + '(data.item); #' + '# if (typeof data.item.encoded != \\'undefined\\' && data.item.encoded === false) {#' + '#= text #' + '# } else { #' + '#: text #' + '# } #');\n }\n that.templates = {\n content: template('<div class=\\'k-content\\'#= contentAttributes(data) #>#= content(item) #</div>'),\n group: template('<ul role=\\'group\\' aria-hidden=\\'#= ariaHidden(group) #\\' class=\\'#= groupCssClass(group) #\\'#= groupAttributes(group) #>' + '#= renderItems(data) #' + '</ul>'),\n itemWrapper: template('# var url = ' + fieldAccessor('url') + '(item); #' + '# var imageUrl = ' + fieldAccessor('imageUrl') + '(item); #' + '# var spriteCssClass = ' + fieldAccessor('spriteCssClass') + '(item); #' + '# var contentUrl = contentUrl(item); #' + '# var tag = url||contentUrl ? \\'a\\' : \\'span\\'; #' + '<#= tag # class=\\'#= textClass(item, group) #\\' #= contentUrl ##= textAttributes(url) #>' + '# if (imageUrl) { #' + '<img class=\\'k-image\\' alt=\\'\\' src=\\'#= imageUrl #\\' />' + '# } #' + '# if (spriteCssClass) { #' + '<span class=\\'k-sprite #= spriteCssClass #\\'></span>' + '# } #' + '#= data.panelBar.options.template(data) #' + '#= arrow(data) #' + '</#= tag #>'),\n item: template('<li role=\\'treeitem\\' #=aria(item)#class=\\'#= wrapperCssClass(group, item) #\\'' + kendo.attr('uid') + '=\\'#= item.uid #\\'>' + '#= itemWrapper(data) #' + '# if (item.items && item.items.length > 0) { #' + '#= subGroup({ items: item.items, panelBar: panelBar, group: { expanded: item.expanded } }) #' + '# } else if (item.content || item.contentUrl) { #' + '#= renderContent(data) #' + '# } #' + '</li>'),\n loading: template('<li class=\\'k-item\\'><span class=\\'k-icon k-i-loading\\'></span> #: data.messages.loading #</li>'),\n retry: template('<li class=\\'k-item\\'>' + '#: data.messages.requestFailed # ' + '<button class=\\'k-button k-request-retry\\'>#: data.messages.retry #</button>' + '</li>'),\n arrow: template('<span class=\\'#= arrowClass(item) #\\'></span>'),\n empty: template('')\n };\n },\n setOptions: function (options) {\n var animation = this.options.animation;\n this._animations(options);\n options.animation = extend(true, animation, options.animation);\n if ('dataSource' in options) {\n this.setDataSource(options.dataSource);\n }\n Widget.fn.setOptions.call(this, options);\n },\n expand: function (element, useAnimation) {\n var that = this, animBackup = {};\n element = this.element.find(element);\n if (that._animating && element.find('ul').is(':visible')) {\n that.one('complete', function () {\n setTimeout(function () {\n that.expand(element);\n });\n });\n return;\n }\n that._animating = true;\n useAnimation = useAnimation !== false;\n element.each(function (index, item) {\n item = $(item);\n var wrapper = element.children('.k-group,.k-content');\n if (!wrapper.length) {\n wrapper = that._addGroupElement(element);\n }\n var groups = wrapper.add(item.find(CONTENTS));\n if (!item.hasClass(DISABLEDCLASS) && groups.length > 0) {\n if (that.options.expandMode == SINGLE && that._collapseAllExpanded(item)) {\n return that;\n }\n element.find('.' + HIGHLIGHTCLASS).removeClass(HIGHLIGHTCLASS);\n item.addClass(HIGHLIGHTCLASS);\n if (!useAnimation) {\n animBackup = that.options.animation;\n that.options.animation = {\n expand: { effects: {} },\n collapse: {\n hide: true,\n effects: {}\n }\n };\n }\n if (!that._triggerEvent(EXPAND, item)) {\n that._toggleItem(item, false, false);\n }\n if (!useAnimation) {\n that.options.animation = animBackup;\n }\n }\n });\n return that;\n },\n collapse: function (element, useAnimation) {\n var that = this, animBackup = {};\n that._animating = true;\n useAnimation = useAnimation !== false;\n element = that.element.find(element);\n element.each(function (index, item) {\n item = $(item);\n var groups = item.find(GROUPS).add(item.find(CONTENTS));\n if (!item.hasClass(DISABLEDCLASS) && groups.is(VISIBLE)) {\n item.removeClass(HIGHLIGHTCLASS);\n if (!useAnimation) {\n animBackup = that.options.animation;\n that.options.animation = {\n expand: { effects: {} },\n collapse: {\n hide: true,\n effects: {}\n }\n };\n }\n if (!that._triggerEvent(COLLAPSE, item)) {\n that._toggleItem(item, true);\n }\n if (!useAnimation) {\n that.options.animation = animBackup;\n }\n }\n });\n return that;\n },\n updateArrow: function (items) {\n var that = this;\n items = $(items);\n items.children(LINKSELECTOR).children('.k-panelbar-collapse, .k-panelbar-expand').remove();\n items.filter(function () {\n var dataItem = that.dataItem(this);\n if (!dataItem) {\n return $(this).find('.k-panel').length > 0 || $(this).find('.k-content').length > 0;\n }\n return dataItem.hasChildren || dataItem.content || dataItem.contentUrl;\n }).children('.k-link:not(:has([class*=k-i-arrow]))').each(function () {\n var item = $(this), parent = item.parent();\n item.append('<span class=\\'k-icon ' + (parent.hasClass(ACTIVECLASS) ? ' k-panelbar-collapse k-i-arrow-60-up' : ' k-panelbar-expand k-i-arrow-60-down') + '\\'/>');\n });\n },\n _accessors: function () {\n var that = this, options = that.options, i, field, textField, element = that.element;\n for (i in bindings) {\n field = options[bindings[i]];\n textField = element.attr(kendo.attr(i + '-field'));\n if (!field && textField) {\n field = textField;\n }\n if (!field) {\n field = i;\n }\n if (!isArray(field)) {\n field = [field];\n }\n options[bindings[i]] = field;\n }\n },\n _progress: function (item, showProgress) {\n var element = this.element;\n var loadingText = this.templates.loading({ messages: this.options.messages });\n if (arguments.length == 1) {\n showProgress = item;\n if (showProgress) {\n element.html(loadingText);\n } else {\n element.empty();\n }\n } else {\n itemIcon(item).toggleClass('k-i-loading', showProgress).removeClass('k-i-refresh');\n }\n },\n _refreshRoot: function (items) {\n var that = this;\n var parent = that.element;\n var groupData = {\n firstLevel: true,\n expanded: true,\n length: parent.children().length\n };\n this.element.empty();\n var rootItemsHtml = $.map(items, function (value, idx) {\n if (typeof value === 'string') {\n return $(value);\n } else {\n value.items = [];\n return $(that.renderItem({\n group: groupData,\n item: extend(value, { index: idx })\n }));\n }\n });\n this.element.append(rootItemsHtml);\n var elements = this.element.children('.k-item');\n for (var i = 0; i < items.length; i++) {\n this.trigger('itemChange', {\n item: elements.eq(i).find('.k-link').first(),\n data: items[i],\n ns: ui\n });\n }\n this._angularCompileElements(rootItemsHtml, items);\n },\n _refreshChildren: function (item, parentNode) {\n var i, children, child;\n parentNode.children('.k-group').empty();\n var items = item.children.data();\n if (!items.length) {\n updateItemHtml(parentNode);\n children = parentNode.children('.k-group').children('li');\n this._angularCompileElements(children, items);\n } else {\n this.append(item.children, parentNode);\n if (this.options.loadOnDemand) {\n this._toggleGroup(parentNode.children('.k-group'), false);\n }\n children = parentNode.children('.k-group').children('li');\n for (i = 0; i < children.length; i++) {\n child = children.eq(i);\n this.trigger('itemChange', {\n item: child.find('.k-link').first(),\n data: this.dataItem(child),\n ns: ui\n });\n }\n }\n },\n findByUid: function (uid) {\n var items = this.element.find('.k-item');\n var uidAttr = kendo.attr('uid');\n var result;\n for (var i = 0; i < items.length; i++) {\n if (items[i].getAttribute(uidAttr) == uid) {\n result = items[i];\n break;\n }\n }\n return $(result);\n },\n refresh: function (e) {\n var options = this.options;\n var node = e.node;\n var action = e.action;\n var items = e.items;\n var parentNode = this.wrapper;\n var loadOnDemand = options.loadOnDemand;\n if (e.field) {\n if (!items[0] || !items[0].level) {\n return;\n }\n return this._updateItems(items, e.field);\n }\n if (node) {\n parentNode = this.findByUid(node.uid);\n this._progress(parentNode, false);\n }\n if (action == 'add') {\n this._appendItems(e.index, items, parentNode);\n } else if (action == 'remove') {\n this.remove(this.findByUid(items[0].uid));\n } else if (action == 'itemchange') {\n this._updateItems(items);\n } else if (action == 'itemloaded') {\n this._refreshChildren(node, parentNode);\n } else {\n this._refreshRoot(items);\n }\n if (action != 'remove') {\n for (var k = 0; k < items.length; k++) {\n if (!loadOnDemand || items[k].expanded) {\n var tempItem = items[k];\n if (this._hasChildItems(tempItem)) {\n tempItem.load();\n }\n }\n }\n }\n this.trigger(DATABOUND, { node: node ? parentNode : undefined });\n },\n _error: function (e) {\n var node = e.node && this.findByUid(e.node.uid);\n var retryHtml = this.templates.retry({ messages: this.options.messages });\n if (node) {\n this._progress(node, false);\n this._expanded(node, false);\n itemIcon(node).addClass('k-i-refresh');\n e.node.loaded(false);\n } else {\n this._progress(false);\n this.element.html(retryHtml);\n }\n },\n _retryRequest: function (e) {\n e.preventDefault();\n this.dataSource.fetch();\n },\n items: function () {\n return this.element.find('.k-item > span:first-child');\n },\n setDataSource: function (dataSource) {\n var options = this.options;\n options.dataSource = dataSource;\n this._dataSource();\n if (this.options.autoBind) {\n this._progress(true);\n this.dataSource.fetch();\n }\n },\n _bindDataSource: function () {\n this._refreshHandler = proxy(this.refresh, this);\n this._errorHandler = proxy(this._error, this);\n this.dataSource.bind(CHANGE, this._refreshHandler);\n this.dataSource.bind(ERROR, this._errorHandler);\n },\n _unbindDataSource: function () {\n var dataSource = this.dataSource;\n if (dataSource) {\n dataSource.unbind(CHANGE, this._refreshHandler);\n dataSource.unbind(ERROR, this._errorHandler);\n }\n },\n _fieldAccessor: function (fieldName) {\n var fieldBindings = this.options[bindings[fieldName]] || [], count = fieldBindings.length, result = '(function(item) {';\n if (count === 0) {\n result += 'return item[\\'' + fieldName + '\\'];';\n } else {\n result += 'var levels = [' + $.map(fieldBindings, function (x) {\n return 'function(d){ return ' + kendo.expr(x) + '}';\n }).join(',') + '];';\n result += 'if(item.level){return levels[Math.min(item.level(), ' + count + '-1)](item);}else';\n result += '{return levels[' + count + '-1](item)}';\n }\n result += '})';\n return result;\n },\n _dataSource: function () {\n var that = this, options = that.options, dataSource = options.dataSource;\n if (!dataSource) {\n return;\n }\n dataSource = isArray(dataSource) ? { data: dataSource } : dataSource;\n that._unbindDataSource();\n if (!dataSource.fields) {\n dataSource.fields = [\n { field: 'text' },\n { field: 'url' },\n { field: 'spriteCssClass' },\n { field: 'imageUrl' }\n ];\n }\n that.dataSource = HierarchicalDataSource.create(dataSource);\n that._bindDataSource();\n },\n _appendItems: function (index, items, parentNode) {\n var that = this, children, wrapper;\n if (parentNode.hasClass('k-panelbar')) {\n children = parentNode.children('li');\n wrapper = parentNode;\n } else {\n wrapper = parentNode.children('.k-group');\n if (!wrapper.length) {\n wrapper = that._addGroupElement(parentNode);\n }\n children = wrapper.children('li');\n }\n var groupData = {\n firstLevel: parentNode.hasClass('k-panelbar'),\n expanded: true,\n length: children.length\n };\n var itemsHtml = $.map(items, function (value, idx) {\n if (typeof value === 'string') {\n return $(value);\n } else {\n return $(that.renderItem({\n group: groupData,\n item: extend(value, { index: idx })\n }));\n }\n });\n if (typeof index == UNDEFINED) {\n index = children.length;\n }\n for (var i = 0; i < itemsHtml.length; i++) {\n if (children.length === 0 || index === 0) {\n wrapper.append(itemsHtml[i]);\n } else {\n itemsHtml[i].insertAfter(children[index - 1]);\n }\n }\n that._angularCompileElements(itemsHtml, items);\n if (that.dataItem(parentNode)) {\n that.dataItem(parentNode).hasChildren = true;\n that.updateArrow(parentNode);\n }\n },\n _updateItems: function (items, field) {\n var that = this;\n var i, node, nodeWrapper, item;\n var context = {\n panelBar: that.options,\n item: item,\n group: {}\n };\n var render = field != 'expanded';\n if (field == 'selected') {\n if (items[0][field]) {\n var currentNode = that.findByUid(items[0].uid);\n if (!currentNode.hasClass(DISABLEDCLASS)) {\n that.select(currentNode, true);\n }\n } else {\n that.clearSelection();\n }\n } else {\n var elements = $.map(items, function (item) {\n return that.findByUid(item.uid);\n });\n if (render) {\n that.angular('cleanup', function () {\n return { elements: elements };\n });\n }\n for (i = 0; i < items.length; i++) {\n context.item = item = items[i];\n context.panelBar = that;\n nodeWrapper = elements[i];\n node = nodeWrapper.parent();\n if (render) {\n context.group = {\n firstLevel: node.hasClass('k-panelbar'),\n expanded: nodeWrapper.parent().hasClass(ACTIVECLASS),\n length: nodeWrapper.children().length\n };\n nodeWrapper.children('.k-link').remove();\n nodeWrapper.prepend(that.templates.itemWrapper(extend(context, { arrow: item.hasChildren || item.content || item.contentUrl ? that.templates.arrow : that.templates.empty }, rendering)));\n }\n if (field == 'expanded') {\n that._toggleItem(nodeWrapper, !item[field], item[field] ? 'true' : true);\n } else if (field == 'enabled') {\n that.enable(nodeWrapper, item[field]);\n if (!item[field]) {\n if (item.selected) {\n item.set('selected', false);\n }\n }\n }\n if (nodeWrapper.length) {\n this.trigger('itemChange', {\n item: nodeWrapper.find('.k-link').first(),\n data: item,\n ns: ui\n });\n }\n }\n if (render) {\n that.angular('compile', function () {\n return {\n elements: elements,\n data: $.map(items, function (item) {\n return [{ dataItem: item }];\n })\n };\n });\n }\n }\n },\n _toggleDisabled: function (element, enable) {\n element = this.element.find(element);\n element.toggleClass(defaultState, enable).toggleClass(DISABLEDCLASS, !enable).attr(ARIA_DISABLED, !enable);\n },\n dataItem: function (item) {\n var uid = $(item).closest(ITEM).attr(kendo.attr('uid')), dataSource = this.dataSource;\n return dataSource && dataSource.getByUid(uid);\n },\n select: function (element, skipChange) {\n var that = this;\n if (element === undefined) {\n return that.element.find(selectableItems).parent();\n }\n element = that.element.find(element);\n if (!element.length) {\n this._updateSelected(element);\n } else {\n element.each(function () {\n var item = $(this), link = item.children(LINKSELECTOR);\n if (item.hasClass(DISABLEDCLASS)) {\n return that;\n }\n that._updateSelected(link, skipChange);\n });\n }\n return that;\n },\n clearSelection: function () {\n this.select($());\n },\n enable: function (element, state) {\n this._toggleDisabled(element, state !== false);\n return this;\n },\n disable: function (element) {\n this._toggleDisabled(element, false);\n return this;\n },\n append: function (item, referenceItem) {\n referenceItem = this.element.find(referenceItem);\n var inserted = this._insert(item, referenceItem, referenceItem.length ? referenceItem.find(GROUPS) : null);\n each(inserted.items, function () {\n inserted.group.append(this);\n updateFirstLast(this);\n });\n this.updateArrow(referenceItem);\n updateFirstLast(inserted.group.find('.k-first, .k-last'));\n inserted.group.height('auto');\n return this;\n },\n insertBefore: function (item, referenceItem) {\n referenceItem = this.element.find(referenceItem);\n var inserted = this._insert(item, referenceItem, referenceItem.parent());\n each(inserted.items, function () {\n referenceItem.before(this);\n updateFirstLast(this);\n });\n updateFirstLast(referenceItem);\n inserted.group.height('auto');\n return this;\n },\n insertAfter: function (item, referenceItem) {\n referenceItem = this.element.find(referenceItem);\n var inserted = this._insert(item, referenceItem, referenceItem.parent());\n each(inserted.items, function () {\n referenceItem.after(this);\n updateFirstLast(this);\n });\n updateFirstLast(referenceItem);\n inserted.group.height('auto');\n return this;\n },\n remove: function (element) {\n element = this.element.find(element);\n var that = this, parent = element.parentsUntil(that.element, ITEM), group = element.parent('ul');\n element.remove();\n if (group && !group.hasClass('k-panelbar') && !group.children(ITEM).length) {\n group.remove();\n }\n if (parent.length) {\n parent = parent.eq(0);\n that.updateArrow(parent);\n updateFirstLast(parent);\n }\n return that;\n },\n reload: function (element) {\n var that = this;\n element = that.element.find(element);\n element.each(function () {\n var item = $(this);\n that._ajaxRequest(item, item.children('.' + CONTENT), !item.is(VISIBLE));\n });\n },\n _first: function () {\n return this.element.children(ACTIVEITEMSELECTOR).first();\n },\n _last: function () {\n var item = this.element.children(ACTIVEITEMSELECTOR).last(), group = item.children(VISIBLEGROUP);\n if (group[0]) {\n return group.children(ACTIVEITEMSELECTOR).last();\n }\n return item;\n },\n _current: function (candidate) {\n var that = this, focused = that._focused, id = that._itemId;\n if (candidate === undefined) {\n return focused;\n }\n that.element.removeAttr('aria-activedescendant');\n if (focused && focused.length) {\n if (focused[0].id === id) {\n focused.removeAttr('id');\n }\n focused.children(LINKSELECTOR).removeClass(FOCUSEDCLASS);\n }\n if ($(candidate).length) {\n id = candidate[0].id || id;\n candidate.attr('id', id).children(LINKSELECTOR).addClass(FOCUSEDCLASS);\n that.element.attr('aria-activedescendant', id);\n }\n that._focused = candidate;\n },\n _keydown: function (e) {\n var that = this, key = e.keyCode, current = that._current();\n if (e.target != e.currentTarget) {\n return;\n }\n if (key == keys.DOWN || key == keys.RIGHT) {\n that._current(that._nextItem(current));\n e.preventDefault();\n } else if (key == keys.UP || key == keys.LEFT) {\n that._current(that._prevItem(current));\n e.preventDefault();\n } else if (key == keys.ENTER || key == keys.SPACEBAR) {\n that._click(e);\n e.preventDefault();\n } else if (key == keys.HOME) {\n that._current(that._first());\n e.preventDefault();\n } else if (key == keys.END) {\n that._current(that._last());\n e.preventDefault();\n }\n },\n _nextItem: function (item) {\n if (!item) {\n return this._first();\n }\n var group = item.children(VISIBLEGROUP), next = item.nextAll(':visible').first();\n if (group[0]) {\n next = group.children('.' + FIRST);\n }\n if (!next[0]) {\n next = item.parent(VISIBLEGROUP).parent(ITEM).next();\n }\n if (!next[0]) {\n next = this._first();\n }\n if (next.hasClass(DISABLEDCLASS)) {\n next = this._nextItem(next);\n }\n return next;\n },\n _prevItem: function (item) {\n if (!item) {\n return this._last();\n }\n var prev = item.prevAll(':visible').first(), result;\n if (!prev[0]) {\n prev = item.parent(VISIBLEGROUP).parent(ITEM);\n if (!prev[0]) {\n prev = this._last();\n }\n } else {\n result = prev;\n while (result[0]) {\n result = result.children(VISIBLEGROUP).children('.' + LAST);\n if (result[0]) {\n prev = result;\n }\n }\n }\n if (prev.hasClass(DISABLEDCLASS)) {\n prev = this._prevItem(prev);\n }\n return prev;\n },\n _insert: function (item, referenceItem, parent) {\n var that = this, items, plain = $.isPlainObject(item), isReferenceItem = referenceItem && referenceItem[0], groupData;\n if (!isReferenceItem) {\n parent = that.element;\n }\n groupData = {\n firstLevel: parent.hasClass('k-panelbar'),\n expanded: $(referenceItem).hasClass(ACTIVECLASS),\n length: parent.children().length\n };\n if (isReferenceItem && !parent.length) {\n parent = $(that.renderGroup({\n group: groupData,\n options: that.options\n })).appendTo(referenceItem);\n }\n if (plain || $.isArray(item) || item instanceof HierarchicalDataSource) {\n if (item instanceof HierarchicalDataSource) {\n item = item.data();\n }\n items = $.map(plain ? [item] : item, function (value, idx) {\n if (typeof value === 'string') {\n return $(value);\n } else {\n return $(that.renderItem({\n group: groupData,\n item: extend(value, { index: idx })\n }));\n }\n });\n if (isReferenceItem) {\n var dataItem = that.dataItem(referenceItem);\n if (dataItem) {\n dataItem.hasChildren = true;\n referenceItem.attr(ARIA_EXPANDED, dataItem.expanded).not('.' + ACTIVECLASS).children('ul').attr(ARIA_HIDDEN, !dataItem.expanded);\n } else {\n referenceItem.attr(ARIA_EXPANDED, false);\n }\n }\n } else {\n if (typeof item == 'string' && item.charAt(0) != '<') {\n items = that.element.find(item);\n } else {\n items = $(item);\n }\n that._updateItemsClasses(items);\n }\n if (!item.length) {\n item = [item];\n }\n that._angularCompileElements(items, item);\n return {\n items: items,\n group: parent\n };\n },\n _toggleHover: function (e) {\n var target = $(e.currentTarget);\n if (!target.parents('li.' + DISABLEDCLASS).length) {\n target.toggleClass('k-state-hover', e.type == MOUSEENTER);\n }\n },\n _updateClasses: function () {\n var that = this, panels, items, expanded, panelsParent, dataItem;\n panels = that.element.find('li > ul').not(function () {\n return $(this).parentsUntil('.k-panelbar', 'div').length;\n }).addClass('k-group k-panel').attr('role', 'group');\n panelsParent = panels.parent();\n dataItem = that.dataItem(panelsParent);\n expanded = dataItem && dataItem.expanded || false;\n panels.parent().attr(ARIA_EXPANDED, expanded).not('.' + ACTIVECLASS).children('ul').attr(ARIA_HIDDEN, !expanded).hide();\n items = that.element.add(panels).children();\n that._updateItemsClasses(items);\n that.updateArrow(items);\n updateFirstLast(items);\n },\n _updateItemsClasses: function (items) {\n var length = items.length, idx = 0;\n for (; idx < length; idx++) {\n this._updateItemClasses(items[idx], idx);\n }\n },\n _updateItemClasses: function (item, index) {\n var selected = this._selected, contentUrls = this.options.contentUrls, url = contentUrls && contentUrls[index], root = this.element[0], wrapElement, link;\n item = $(item).addClass('k-item').attr('role', 'treeitem');\n if (kendo.support.browser.msie) {\n item.css('list-style-position', 'inside').css('list-style-position', '');\n }\n item.children(IMG).addClass(IMAGE);\n link = item.children('a').addClass(LINK);\n if (link[0]) {\n link.attr('href', url);\n link.children(IMG).addClass(IMAGE);\n }\n item.filter(':not([disabled]):not([class*=k-state])').addClass('k-state-default');\n item.filter('li[disabled]').addClass('k-state-disabled').attr(ARIA_DISABLED, true).removeAttr('disabled');\n item.children('div').addClass(CONTENT).attr(ARIA_HIDDEN, true).hide().parent().attr(ARIA_EXPANDED, false);\n link = item.children(SELECTEDSELECTOR);\n if (link[0]) {\n if (selected) {\n selected.removeAttr(ARIA_SELECTED).children(SELECTEDSELECTOR).removeClass(SELECTEDCLASS);\n }\n link.addClass(SELECTEDCLASS);\n this._selected = item.attr(ARIA_SELECTED, true);\n }\n if (!item.children(LINKSELECTOR)[0]) {\n wrapElement = '<span class=\\'' + LINK + '\\'></span>';\n if (contentUrls && contentUrls[index] && item[0].parentNode == root) {\n wrapElement = '<a class=\"k-link k-header\" href=\"' + contentUrls[index] + '\"></a>';\n }\n item.contents().filter(function () {\n return !this.nodeName.match(excludedNodesRegExp) && !(this.nodeType == 3 && !kendo.trim(this.nodeValue.trim));\n }).wrapAll(wrapElement);\n }\n if (item.parent('.k-panelbar')[0]) {\n item.children(LINKSELECTOR).addClass('k-header');\n }\n },\n _click: function (e) {\n var that = this, target = e.type == CLICK ? $(e.target) : that._current().children(LINKSELECTOR), element = that.element, prevent, contents, href, isAnchor;\n if (target.parents('li.' + DISABLEDCLASS).length) {\n return;\n }\n if (target.closest('.k-widget')[0] != element[0]) {\n return;\n }\n if (target.is(':kendoFocusable') && !target.hasClass(LINK)) {\n return;\n }\n var link = target.closest(LINKSELECTOR), item = link.closest(ITEM);\n that._updateSelected(link);\n var wrapper = item.children('.k-group,.k-content');\n var dataItem = this.dataItem(item);\n if (!wrapper.length && (that.options.loadOnDemand && dataItem && dataItem.hasChildren || this._hasChildItems(item) || item.content || item.contentUrl)) {\n wrapper = that._addGroupElement(item);\n }\n contents = item.find(GROUPS).add(item.find(CONTENTS));\n href = link.attr(HREF);\n isAnchor = href && (href.charAt(href.length - 1) == '#' || href.indexOf('#' + that.element[0].id + '-') != -1);\n prevent = !!(isAnchor || contents.length);\n if (contents.data('animating') && prevent) {\n e.preventDefault();\n return;\n }\n if (that._triggerEvent(SELECT, item)) {\n prevent = true;\n }\n if (prevent === false) {\n return;\n }\n if (that.options.expandMode == SINGLE) {\n if (that._collapseAllExpanded(item) && prevent) {\n e.preventDefault();\n return;\n }\n }\n if (contents.length) {\n var visibility = contents.is(VISIBLE);\n if (!that._triggerEvent(!visibility ? EXPAND : COLLAPSE, item)) {\n prevent = that._toggleItem(item, visibility);\n }\n }\n if (prevent) {\n e.preventDefault();\n }\n },\n _hasChildItems: function (item) {\n return item.items && item.items.length > 0 || item.hasChildren;\n },\n _toggleItem: function (element, isVisible, expanded) {\n var that = this, childGroup = element.find(GROUPS), link = element.find(LINKSELECTOR), url = link.attr(HREF), prevent, content, dataItem = that.dataItem(element), notVisible = !isVisible;\n var loaded = dataItem && dataItem.loaded();\n if (dataItem && !expanded && dataItem.expanded !== notVisible) {\n dataItem.set('expanded', notVisible);\n prevent = dataItem.hasChildren || !!dataItem.content || !!dataItem.contentUrl;\n return prevent;\n }\n if (dataItem && (!expanded || expanded === 'true') && !loaded && !dataItem.content && !dataItem.contentUrl) {\n if (that.options.loadOnDemand) {\n this._progress(element, true);\n }\n element.children('.k-group,.k-content').remove();\n prevent = dataItem.hasChildren;\n dataItem.load();\n } else {\n if (childGroup.length) {\n this._toggleGroup(childGroup, isVisible);\n prevent = true;\n } else {\n content = element.children('.' + CONTENT);\n if (content.length) {\n prevent = true;\n if (!content.is(EMPTY) || url === undefined) {\n that._toggleGroup(content, isVisible);\n } else {\n that._ajaxRequest(element, content, isVisible);\n }\n }\n }\n }\n return prevent;\n },\n _toggleGroup: function (element, visibility) {\n var that = this, animationSettings = that.options.animation, animation = animationSettings.expand, hasCollapseAnimation = animationSettings.collapse && 'effects' in animationSettings.collapse, collapse = extend({}, animationSettings.expand, animationSettings.collapse);\n if (!hasCollapseAnimation) {\n collapse = extend(collapse, { reverse: true });\n }\n if (element.is(VISIBLE) != visibility) {\n that._animating = false;\n return;\n }\n element.attr(ARIA_HIDDEN, !!visibility);\n element.parent().attr(ARIA_EXPANDED, !visibility).toggleClass(ACTIVECLASS, !visibility).find('> .k-link > .k-panelbar-collapse,> .k-link > .k-panelbar-expand').toggleClass('k-i-arrow-60-up', !visibility).toggleClass('k-panelbar-collapse', !visibility).toggleClass('k-i-arrow-60-down', visibility).toggleClass('k-panelbar-expand', visibility);\n if (visibility) {\n animation = extend(collapse, { hide: true });\n animation.complete = function () {\n that._animationCallback();\n };\n } else {\n animation = extend({\n complete: function (element) {\n that._triggerEvent(ACTIVATE, element.closest(ITEM));\n that._animationCallback();\n }\n }, animation);\n }\n element.kendoStop(true, true).kendoAnimate(animation);\n },\n _animationCallback: function () {\n var that = this;\n that.trigger('complete');\n that._animating = false;\n },\n _addGroupElement: function (element) {\n var group = $('<ul role=\"group\" aria-hidden=\"true\" class=\"k-group k-panel\" style=\"display:none\"></ul>');\n element.append(group);\n return group;\n },\n _collapseAllExpanded: function (item) {\n var that = this, children, stopExpand = false;\n var groups = item.find(GROUPS).add(item.find(CONTENTS));\n if (groups.is(VISIBLE)) {\n stopExpand = true;\n }\n if (!(groups.is(VISIBLE) || groups.length === 0)) {\n children = item.siblings();\n children.find(GROUPS).add(children.find(CONTENTS)).filter(function () {\n return $(this).is(VISIBLE);\n }).each(function (index, content) {\n content = $(content);\n stopExpand = that._triggerEvent(COLLAPSE, content.closest(ITEM));\n if (!stopExpand) {\n that._toggleGroup(content, true);\n }\n });\n that.one('complete', function () {\n setTimeout(function () {\n children.each(function (index, child) {\n var dataItem = that.dataItem(child);\n if (dataItem) {\n dataItem.set('expanded', false);\n }\n });\n });\n });\n }\n return stopExpand;\n },\n _ajaxRequest: function (element, contentElement, isVisible) {\n var that = this, statusIcon = element.find('.k-panelbar-collapse, .k-panelbar-expand'), link = element.find(LINKSELECTOR), loadingIconTimeout = setTimeout(function () {\n statusIcon.addClass('k-i-loading');\n }, 100), data = {}, url = link.attr(HREF);\n $.ajax({\n type: 'GET',\n cache: false,\n url: url,\n dataType: 'html',\n data: data,\n error: function (xhr, status) {\n statusIcon.removeClass('k-i-loading');\n if (that.trigger(ERROR, {\n xhr: xhr,\n status: status\n })) {\n this.complete();\n }\n },\n complete: function () {\n clearTimeout(loadingIconTimeout);\n statusIcon.removeClass('k-i-loading');\n },\n success: function (data) {\n function getElements() {\n return { elements: contentElement.get() };\n }\n try {\n that.angular('cleanup', getElements);\n contentElement.html(data);\n that.angular('compile', getElements);\n } catch (e) {\n var console = window.console;\n if (console && console.error) {\n console.error(e.name + ': ' + e.message + ' in ' + url);\n }\n this.error(this.xhr, 'error');\n }\n that._toggleGroup(contentElement, isVisible);\n that.trigger(CONTENTLOAD, {\n item: element[0],\n contentElement: contentElement[0]\n });\n }\n });\n },\n _triggerEvent: function (eventName, element) {\n var that = this;\n return that.trigger(eventName, { item: element[0] });\n },\n _updateSelected: function (link, skipChange) {\n var that = this, element = that.element, item = link.parent(ITEM), selected = that._selected, dataItem = that.dataItem(item);\n if (selected) {\n selected.removeAttr(ARIA_SELECTED);\n }\n that._selected = item.attr(ARIA_SELECTED, true);\n element.find(selectableItems).removeClass(SELECTEDCLASS);\n element.find('> .' + HIGHLIGHTCLASS + ', .k-panel > .' + HIGHLIGHTCLASS).removeClass(HIGHLIGHTCLASS);\n link.addClass(SELECTEDCLASS);\n link.parentsUntil(element, ITEM).filter(':has(.k-header)').addClass(HIGHLIGHTCLASS);\n that._current(item[0] ? item : null);\n if (dataItem) {\n dataItem.set('selected', true);\n }\n if (!skipChange) {\n that.trigger(CHANGE);\n }\n },\n _animations: function (options) {\n if (options && 'animation' in options && !options.animation) {\n options.animation = {\n expand: { effects: {} },\n collapse: {\n hide: true,\n effects: {}\n }\n };\n }\n },\n renderItem: function (options) {\n var that = this;\n options = extend({\n panelBar: that,\n group: {}\n }, options);\n var empty = that.templates.empty, item = options.item;\n return that.templates.item(extend(options, {\n itemWrapper: that.templates.itemWrapper,\n renderContent: that.renderContent,\n arrow: that._hasChildItems(item) || item.content || item.contentUrl ? that.templates.arrow : empty,\n subGroup: !options.loadOnDemand || item.expanded ? that.renderGroup : empty\n }, rendering));\n },\n renderGroup: function (options) {\n var that = this;\n var templates = that.templates || options.panelBar.templates;\n return templates.group(extend({\n renderItems: function (options) {\n var html = '', i = 0, items = options.items, len = items ? items.length : 0, group = extend({ length: len }, options.group);\n for (; i < len; i++) {\n html += options.panelBar.renderItem(extend(options, {\n group: group,\n item: extend({ index: i }, items[i])\n }));\n }\n return html;\n }\n }, options, rendering));\n },\n renderContent: function (options) {\n return options.panelBar.templates.content(extend(options, rendering));\n }\n });\n kendo.ui.plugin(PanelBar);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.progressbar', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'progressbar',\n name: 'ProgressBar',\n category: 'web',\n description: 'The ProgressBar offers rich functionality for displaying and tracking progress',\n depends: ['core']\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, Widget = ui.Widget, HORIZONTAL = 'horizontal', VERTICAL = 'vertical', DEFAULTMIN = 0, DEFAULTMAX = 100, DEFAULTVALUE = 0, DEFAULTCHUNKCOUNT = 5, KPROGRESSBAR = 'k-progressbar', KPROGRESSBARREVERSE = 'k-progressbar-reverse', KPROGRESSBARINDETERMINATE = 'k-progressbar-indeterminate', KPROGRESSBARCOMPLETE = 'k-complete', KPROGRESSWRAPPER = 'k-state-selected', KPROGRESSSTATUS = 'k-progress-status', LABEL_POSITION_END = 'k-progress-end', KCOMPLETEDCHUNK = 'k-state-selected', KUPCOMINGCHUNK = 'k-state-default', STATEDISABLED = 'k-state-disabled', PROGRESSTYPE = {\n VALUE: 'value',\n PERCENT: 'percent',\n CHUNK: 'chunk'\n }, CHANGE = 'change', COMPLETE = 'complete', BOOLEAN = 'boolean', math = Math, extend = $.extend, proxy = $.proxy, HUNDREDPERCENT = 100, DEFAULTANIMATIONDURATION = 400, PRECISION = 3, templates = { progressStatus: '<span class=\\'k-progress-status-wrap ' + LABEL_POSITION_END + '\\'><span class=\\'k-progress-status\\'></span></span>' };\n var ProgressBar = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(this, element, options);\n options = that.options;\n that._progressProperty = options.orientation === HORIZONTAL ? 'width' : 'height';\n that._fields();\n options.value = that._validateValue(options.value);\n that._validateType(options.type);\n that._wrapper();\n that._progressAnimation();\n if (options.value !== options.min && options.value !== false) {\n that._updateProgress();\n }\n },\n setOptions: function (options) {\n var that = this;\n Widget.fn.setOptions.call(that, options);\n if (options.hasOwnProperty('reverse')) {\n that.wrapper.toggleClass('k-progressbar-reverse', options.reverse);\n }\n if (options.hasOwnProperty('enable')) {\n that.enable(options.enable);\n }\n that._progressAnimation();\n that._validateValue();\n that._updateProgress();\n },\n events: [\n CHANGE,\n COMPLETE\n ],\n options: {\n name: 'ProgressBar',\n orientation: HORIZONTAL,\n reverse: false,\n min: DEFAULTMIN,\n max: DEFAULTMAX,\n value: DEFAULTVALUE,\n enable: true,\n type: PROGRESSTYPE.VALUE,\n chunkCount: DEFAULTCHUNKCOUNT,\n showStatus: true,\n animation: {}\n },\n _fields: function () {\n var that = this;\n that._isStarted = false;\n that.progressWrapper = that.progressStatus = $();\n },\n _validateType: function (currentType) {\n var isValid = false;\n $.each(PROGRESSTYPE, function (k, type) {\n if (type === currentType) {\n isValid = true;\n return false;\n }\n });\n if (!isValid) {\n throw new Error(kendo.format('Invalid ProgressBar type \\'{0}\\'', currentType));\n }\n },\n _wrapper: function () {\n var that = this;\n var container = that.wrapper = that.element;\n var options = that.options;\n var orientation = options.orientation;\n var initialStatusValue;\n container.addClass('k-widget ' + KPROGRESSBAR);\n container.addClass(KPROGRESSBAR + '-' + (orientation === HORIZONTAL ? HORIZONTAL : VERTICAL));\n if (options.enable === false) {\n container.addClass(STATEDISABLED);\n }\n if (options.reverse) {\n container.addClass(KPROGRESSBARREVERSE);\n }\n if (options.value === false) {\n container.addClass(KPROGRESSBARINDETERMINATE);\n }\n if (options.type === PROGRESSTYPE.CHUNK) {\n that._addChunkProgressWrapper();\n } else {\n if (options.showStatus) {\n that.progressStatus = that.wrapper.prepend(templates.progressStatus).find('.' + KPROGRESSSTATUS);\n initialStatusValue = options.value !== false ? options.value : options.min;\n if (options.type === PROGRESSTYPE.VALUE) {\n that.progressStatus.text(initialStatusValue);\n } else {\n that.progressStatus.text(that._calculatePercentage(initialStatusValue).toFixed() + '%');\n }\n }\n }\n },\n value: function (value) {\n return this._value(value);\n },\n _value: function (value) {\n var that = this;\n var options = that.options;\n var validated;\n if (value === undefined) {\n return options.value;\n } else {\n if (typeof value !== BOOLEAN) {\n value = that._roundValue(value);\n if (!isNaN(value)) {\n validated = that._validateValue(value);\n if (validated !== options.value) {\n that.wrapper.removeClass(KPROGRESSBARINDETERMINATE);\n options.value = validated;\n that._isStarted = true;\n that._updateProgress();\n }\n }\n } else if (!value) {\n that.wrapper.addClass(KPROGRESSBARINDETERMINATE);\n options.value = false;\n }\n }\n },\n _roundValue: function (value) {\n value = parseFloat(value);\n var power = math.pow(10, PRECISION);\n return kendo._round(value * power) / power;\n },\n _validateValue: function (value) {\n var that = this;\n var options = that.options;\n if (value !== false) {\n if (value <= options.min || value === true) {\n return options.min;\n } else if (value >= options.max) {\n return options.max;\n }\n } else if (value === false) {\n return false;\n }\n if (isNaN(that._roundValue(value))) {\n return options.min;\n }\n return value;\n },\n _updateProgress: function () {\n var that = this;\n var options = that.options;\n var percentage = that._calculatePercentage();\n if (options.type === PROGRESSTYPE.CHUNK) {\n that._updateChunks(percentage);\n that._onProgressUpdateAlways(options.value);\n } else {\n that._updateProgressWrapper(percentage);\n }\n },\n _updateChunks: function (percentage) {\n var that = this;\n var options = that.options;\n var chunkCount = options.chunkCount;\n var percentagesPerChunk = parseInt(HUNDREDPERCENT / chunkCount * 100, 10) / 100;\n var percentageParsed = parseInt(percentage * 100, 10) / 100;\n var completedChunksCount = math.floor(percentageParsed / percentagesPerChunk);\n var completedChunks;\n if (options.orientation === HORIZONTAL && !options.reverse || options.orientation === VERTICAL && options.reverse) {\n completedChunks = that.wrapper.find('li.k-item:lt(' + completedChunksCount + ')');\n } else {\n completedChunks = that.wrapper.find('li.k-item:gt(-' + (completedChunksCount + 1) + ')');\n }\n that.wrapper.find('.' + KCOMPLETEDCHUNK).removeClass(KCOMPLETEDCHUNK).addClass(KUPCOMINGCHUNK);\n completedChunks.removeClass(KUPCOMINGCHUNK).addClass(KCOMPLETEDCHUNK);\n },\n _updateProgressWrapper: function (percentage) {\n var that = this;\n var options = that.options;\n var progressWrapper = that.wrapper.find('.' + KPROGRESSWRAPPER);\n var animationDuration = that._isStarted ? that._animation.duration : 0;\n var animationCssOptions = {};\n if (progressWrapper.length === 0) {\n that._addRegularProgressWrapper();\n }\n animationCssOptions[that._progressProperty] = percentage + '%';\n that.progressWrapper.animate(animationCssOptions, {\n duration: animationDuration,\n start: proxy(that._onProgressAnimateStart, that),\n progress: proxy(that._onProgressAnimate, that),\n complete: proxy(that._onProgressAnimateComplete, that, options.value),\n always: proxy(that._onProgressUpdateAlways, that, options.value)\n });\n },\n _onProgressAnimateStart: function () {\n this.progressWrapper.show();\n },\n _onProgressAnimate: function (e) {\n var that = this;\n var options = that.options;\n var progressInPercent = parseFloat(e.elem.style[that._progressProperty], 10);\n var progressStatusWrapSize;\n if (options.showStatus) {\n progressStatusWrapSize = 10000 / parseFloat(that.progressWrapper[0].style[that._progressProperty]);\n that.progressWrapper.find('.k-progress-status-wrap').css(that._progressProperty, progressStatusWrapSize + '%');\n }\n if (options.type !== PROGRESSTYPE.CHUNK && progressInPercent <= 98) {\n that.progressWrapper.removeClass(KPROGRESSBARCOMPLETE);\n }\n },\n _onProgressAnimateComplete: function (currentValue) {\n var that = this;\n var options = that.options;\n var progressWrapperSize = parseFloat(that.progressWrapper[0].style[that._progressProperty]);\n var progressValue;\n if (options.type !== PROGRESSTYPE.CHUNK && progressWrapperSize > 98) {\n that.progressWrapper.addClass(KPROGRESSBARCOMPLETE);\n }\n if (options.showStatus) {\n if (options.type === PROGRESSTYPE.VALUE) {\n progressValue = currentValue;\n } else if (options.type == PROGRESSTYPE.PERCENT) {\n progressValue = that._calculatePercentage(currentValue).toFixed() + '%';\n } else {\n progressValue = math.floor(that._calculatePercentage(currentValue)) + '%';\n }\n that.progressStatus.text(progressValue);\n }\n if (currentValue === options.min) {\n that.progressWrapper.hide();\n }\n },\n _onProgressUpdateAlways: function (currentValue) {\n var that = this;\n var options = that.options;\n if (that._isStarted) {\n that.trigger(CHANGE, { value: currentValue });\n }\n if (currentValue === options.max && that._isStarted) {\n that.trigger(COMPLETE, { value: options.max });\n }\n },\n enable: function (enable) {\n var that = this;\n var options = that.options;\n options.enable = typeof enable === 'undefined' ? true : enable;\n that.wrapper.toggleClass(STATEDISABLED, !options.enable);\n },\n destroy: function () {\n var that = this;\n Widget.fn.destroy.call(that);\n },\n _addChunkProgressWrapper: function () {\n var that = this;\n var options = that.options;\n var container = that.wrapper;\n var chunkSize = HUNDREDPERCENT / options.chunkCount;\n var html = '';\n if (options.chunkCount <= 1) {\n options.chunkCount = 1;\n }\n html += '<ul class=\\'k-reset\\'>';\n for (var i = options.chunkCount - 1; i >= 0; i--) {\n html += '<li class=\\'k-item k-state-default\\'></li>';\n }\n html += '</ul>';\n container.append(html).find('.k-item').css(that._progressProperty, chunkSize + '%').first().addClass('k-first').end().last().addClass('k-last');\n that._normalizeChunkSize();\n },\n _normalizeChunkSize: function () {\n var that = this;\n var options = that.options;\n var lastChunk = that.wrapper.find('.k-item:last');\n var currentSize = parseFloat(lastChunk[0].style[that._progressProperty]);\n var difference = HUNDREDPERCENT - options.chunkCount * currentSize;\n if (difference > 0) {\n lastChunk.css(that._progressProperty, currentSize + difference + '%');\n }\n },\n _addRegularProgressWrapper: function () {\n var that = this;\n that.progressWrapper = $('<div class=\\'' + KPROGRESSWRAPPER + '\\'></div>').appendTo(that.wrapper);\n if (that.options.showStatus) {\n that.progressWrapper.append(templates.progressStatus);\n that.progressStatus = that.wrapper.find('.' + KPROGRESSSTATUS);\n }\n },\n _calculateChunkSize: function () {\n var that = this;\n var chunkCount = that.options.chunkCount;\n var chunkContainer = that.wrapper.find('ul.k-reset');\n return (parseInt(chunkContainer.css(that._progressProperty), 10) - (chunkCount - 1)) / chunkCount;\n },\n _calculatePercentage: function (currentValue) {\n var that = this;\n var options = that.options;\n var value = currentValue !== undefined ? currentValue : options.value;\n var min = options.min;\n var max = options.max;\n that._onePercent = math.abs((max - min) / 100);\n return math.abs((value - min) / that._onePercent);\n },\n _progressAnimation: function () {\n var that = this;\n var options = that.options;\n var animation = options.animation;\n if (animation === false) {\n that._animation = { duration: 0 };\n } else {\n that._animation = extend({ duration: DEFAULTANIMATIONDURATION }, options.animation);\n }\n }\n });\n kendo.ui.plugin(ProgressBar);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.responsivepanel', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'responsive-panel',\n name: 'Responsive Panel',\n category: 'web',\n description: 'The Responsive Panel widget allows a panel of content to be hidden on mobile devices, available through a toggle button.',\n depends: ['core']\n };\n (function ($, undefined) {\n var proxy = $.proxy;\n var NS = '.kendoResponsivePanel';\n var OPEN = 'open';\n var CLOSE = 'close';\n var ACTIVATE_EVENTS = 'click' + NS + ' touchstart' + NS + ' touchend' + NS;\n var Widget = kendo.ui.Widget;\n var ResponsivePanel = Widget.extend({\n init: function (element, options) {\n Widget.fn.init.call(this, element, options);\n this._guid = '_' + kendo.guid();\n this._toggleHandler = proxy(this._toggleButtonClick, this);\n this._closeHandler = proxy(this._close, this);\n $(document.documentElement).on(ACTIVATE_EVENTS, this.options.toggleButton, this._toggleHandler);\n this._registerBreakpoint();\n this.element.addClass('k-rpanel k-rpanel-' + this.options.orientation + ' ' + this._guid);\n this._resizeHandler = proxy(this.resize, this, true);\n $(window).on('resize' + NS, this._resizeHandler);\n },\n _mediaQuery: '@media (max-width: #= breakpoint-1 #px) {' + '.#= guid #.k-rpanel-animate.k-rpanel-left,' + '.#= guid #.k-rpanel-animate.k-rpanel-right {' + '-webkit-transition: -webkit-transform .2s ease-out;' + '-ms-transition: -ms-transform .2s ease-out;' + 'transition: transform .2s ease-out;' + '} ' + '.#= guid #.k-rpanel-top {' + 'overflow: hidden;' + '}' + '.#= guid #.k-rpanel-animate.k-rpanel-top {' + '-webkit-transition: max-height .2s linear;' + '-ms-transition: max-height .2s linear;' + 'transition: max-height .2s linear;' + '}' + '} ' + '@media (min-width: #= breakpoint #px) {' + '#= toggleButton # { display: none; } ' + '.#= guid #.k-rpanel-left { float: left; } ' + '.#= guid #.k-rpanel-right { float: right; } ' + '.#= guid #.k-rpanel-left, .#= guid #.k-rpanel-right {' + 'position: relative;' + '-webkit-transform: translateX(0);' + '-ms-transform: translateX(0);' + 'transform: translateX(0);' + '-webkit-transform: translateX(0) translateZ(0);' + '-ms-transform: translateX(0) translateZ(0);' + 'transform: translateX(0) translateZ(0);' + '} ' + '.k-ie9 .#= guid #.k-rpanel-left { left: 0; } ' + '.#= guid #.k-rpanel-top { max-height: none; }' + '}',\n _registerBreakpoint: function () {\n var options = this.options;\n this._registerStyle(kendo.template(this._mediaQuery)({\n breakpoint: options.breakpoint,\n toggleButton: options.toggleButton,\n guid: this._guid\n }));\n },\n _registerStyle: function (cssText) {\n var head = $('head,body')[0];\n var style = document.createElement('style');\n head.appendChild(style);\n if (style.styleSheet) {\n style.styleSheet.cssText = cssText;\n } else {\n style.appendChild(document.createTextNode(cssText));\n }\n },\n options: {\n name: 'ResponsivePanel',\n orientation: 'left',\n toggleButton: '.k-rpanel-toggle',\n breakpoint: 640,\n autoClose: true\n },\n events: [\n OPEN,\n CLOSE\n ],\n _resize: function () {\n this.element.removeClass('k-rpanel-animate k-rpanel-expanded');\n $(document.documentElement).off(ACTIVATE_EVENTS, this._closeHandler);\n },\n _toggleButtonClick: function (e) {\n e.preventDefault();\n if (e.type == 'touchend') {\n return;\n }\n if (this.element.hasClass('k-rpanel-expanded')) {\n this.close();\n } else {\n this.open();\n }\n },\n open: function () {\n if (!this.trigger(OPEN)) {\n this.element.addClass('k-rpanel-animate k-rpanel-expanded');\n if (this.options.autoClose) {\n $(document.documentElement).on(ACTIVATE_EVENTS, this._closeHandler);\n }\n }\n },\n close: function () {\n if (!this.trigger(CLOSE)) {\n this.element.addClass('k-rpanel-animate').removeClass('k-rpanel-expanded');\n $(document.documentElement).off(ACTIVATE_EVENTS, this._closeHandler);\n }\n },\n _close: function (e) {\n var prevented = e.isDefaultPrevented();\n var container = $(e.target).closest(this.options.toggleButton + ',.k-rpanel');\n if (!container.length && !prevented) {\n this.close();\n }\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n $(window).off('resize' + NS, this._resizeHandler);\n $(document.documentElement).off(ACTIVATE_EVENTS, this._closeHandler);\n }\n });\n kendo.ui.plugin(ResponsivePanel);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.tabstrip', ['kendo.data'], f);\n}(function () {\n var __meta__ = {\n id: 'tabstrip',\n name: 'TabStrip',\n category: 'web',\n description: 'The TabStrip widget displays a collection of tabs with associated tab content.',\n depends: ['data'],\n features: [{\n id: 'tabstrip-fx',\n name: 'Animation',\n description: 'Support for animation',\n depends: ['fx']\n }]\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, keys = kendo.keys, map = $.map, each = $.each, trim = kendo.trim, extend = $.extend, isFunction = kendo.isFunction, template = kendo.template, outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight, Widget = ui.Widget, excludedNodesRegExp = /^(a|div)$/i, NS = '.kendoTabStrip', IMG = 'img', HREF = 'href', PREV = 'prev', NEXT = 'next', SHOW = 'show', LINK = 'k-link', LAST = 'k-last', CLICK = 'click', ERROR = 'error', EMPTY = ':empty', IMAGE = 'k-image', FIRST = 'k-first', SELECT = 'select', ACTIVATE = 'activate', CONTENT = 'k-content', CONTENTURL = 'contentUrl', MOUSEENTER = 'mouseenter', MOUSELEAVE = 'mouseleave', CONTENTLOAD = 'contentLoad', DISABLEDSTATE = 'k-state-disabled', DEFAULTSTATE = 'k-state-default', ACTIVESTATE = 'k-state-active', FOCUSEDSTATE = 'k-state-focused', HOVERSTATE = 'k-state-hover', TABONTOP = 'k-tab-on-top', NAVIGATABLEITEMS = '.k-item:not(.' + DISABLEDSTATE + ')', KEYBOARDNAVIGATABLEITEMS = '.k-item', HOVERABLEITEMS = '.k-tabstrip-items > ' + NAVIGATABLEITEMS + ':not(.' + ACTIVESTATE + ')', DEFAULTDISTANCE = 200, templates = {\n content: template('<div class=\\'k-content\\'#= contentAttributes(data) # role=\\'tabpanel\\' tabindex=\\'0\\'>#= content(item) #</div>'),\n itemWrapper: template('<#= tag(item) # class=\\'k-link\\'#= contentUrl(item) ##= textAttributes(item) #>' + '#= image(item) ##= sprite(item) ##= text(item) #' + '</#= tag(item) #>'),\n item: template('<li class=\\'#= wrapperCssClass(group, item) #\\' role=\\'tab\\' #=item.active ? \"aria-selected=\\'true\\'\" : \\'\\'#>' + '#= itemWrapper(data) #' + '</li>'),\n image: template('<img class=\\'k-image\\' alt=\\'\\' src=\\'#= imageUrl #\\' />'),\n sprite: template('<span class=\\'k-sprite #= spriteCssClass #\\'></span>'),\n empty: template('')\n }, rendering = {\n wrapperCssClass: function (group, item) {\n var result = 'k-item', index = item.index;\n if (item.enabled === false) {\n result += ' k-state-disabled';\n } else {\n result += ' k-state-default';\n }\n if (index === 0) {\n result += ' k-first';\n }\n if (index == group.length - 1) {\n result += ' k-last';\n }\n return result;\n },\n textAttributes: function (item) {\n return item.url ? ' href=\\'' + item.url + '\\'' : '';\n },\n text: function (item) {\n return item.encoded === false ? item.text : kendo.htmlEncode(item.text);\n },\n tag: function (item) {\n return item.url ? 'a' : 'span';\n },\n contentAttributes: function (content) {\n return content.active !== true ? ' style=\\'display:none\\' aria-hidden=\\'true\\' aria-expanded=\\'false\\'' : '';\n },\n content: function (item) {\n return item.content ? item.content : item.contentUrl ? '' : ' ';\n },\n contentUrl: function (item) {\n return item.contentUrl ? kendo.attr('content-url') + '=\"' + item.contentUrl + '\"' : '';\n }\n };\n function updateTabClasses(tabs) {\n tabs.children(IMG).addClass(IMAGE);\n tabs.children('a').addClass(LINK).children(IMG).addClass(IMAGE);\n tabs.filter(':not([disabled]):not([class*=k-state-disabled])').addClass(DEFAULTSTATE);\n tabs.filter('li[disabled]').addClass(DISABLEDSTATE).attr('aria-disabled', 'true').removeAttr('disabled');\n tabs.filter(':not([class*=k-state])').children('a').filter(':focus').parent().addClass(ACTIVESTATE + ' ' + TABONTOP);\n tabs.attr('role', 'tab');\n tabs.filter('.' + ACTIVESTATE).attr('aria-selected', true);\n tabs.each(function () {\n var item = $(this);\n if (!item.children('.' + LINK).length) {\n item.contents().filter(function () {\n return !this.nodeName.match(excludedNodesRegExp) && !(this.nodeType == 3 && !trim(this.nodeValue));\n }).wrapAll('<span UNSELECTABLE=\\'on\\' class=\\'' + LINK + '\\'/>');\n }\n });\n }\n function updateFirstLast(tabGroup) {\n var tabs = tabGroup.children('.k-item');\n tabs.filter('.k-first:not(:first-child)').removeClass(FIRST);\n tabs.filter('.k-last:not(:last-child)').removeClass(LAST);\n tabs.filter(':first-child').addClass(FIRST);\n tabs.filter(':last-child').addClass(LAST);\n }\n function scrollButtonHtml(buttonClass, iconClass) {\n return '<span class=\\'k-button k-button-icon k-flat k-tabstrip-' + buttonClass + '\\' unselectable=\\'on\\'><span class=\\'k-icon ' + iconClass + '\\'></span></span>';\n }\n var TabStrip = Widget.extend({\n init: function (element, options) {\n var that = this, value;\n Widget.fn.init.call(that, element, options);\n that._animations(that.options);\n options = that.options;\n that._contentUrls = options.contentUrls || [];\n that._wrapper();\n that._isRtl = kendo.support.isRtl(that.wrapper);\n that._tabindex();\n that._updateClasses();\n that._dataSource();\n if (options.dataSource) {\n that.dataSource.fetch();\n }\n that._tabPosition();\n that._scrollable();\n if (that._contentUrls.length) {\n that.wrapper.find('.k-tabstrip-items > .k-item').each(function (index, item) {\n var url = that._contentUrls[index];\n if (typeof url === 'string') {\n $(item).find('>.' + LINK).data(CONTENTURL, url);\n }\n });\n } else {\n that._contentUrls.length = that.tabGroup.find('li.k-item').length;\n }\n that.wrapper.on(MOUSEENTER + NS + ' ' + MOUSELEAVE + NS, HOVERABLEITEMS, that._toggleHover).on('focus' + NS, $.proxy(that._active, that)).on('blur' + NS, function () {\n that._current(null);\n });\n that._keyDownProxy = $.proxy(that._keydown, that);\n if (options.navigatable) {\n that.wrapper.on('keydown' + NS, that._keyDownProxy);\n }\n if (that.options.value) {\n value = that.options.value;\n }\n that.wrapper.children('.k-tabstrip-items').on(CLICK + NS, '.k-state-disabled .k-link', false).on(CLICK + NS, ' > ' + NAVIGATABLEITEMS, function (e) {\n var wr = that.wrapper[0];\n if (wr !== document.activeElement) {\n var msie = kendo.support.browser.msie;\n if (msie) {\n try {\n wr.setActive();\n } catch (j) {\n wr.focus();\n }\n } else {\n wr.focus();\n }\n }\n if (that._click($(e.currentTarget))) {\n e.preventDefault();\n }\n });\n var selectedItems = that.tabGroup.children('li.' + ACTIVESTATE), content = that.contentHolder(selectedItems.index());\n if (selectedItems[0] && content.length > 0 && content[0].childNodes.length === 0) {\n that.activateTab(selectedItems.eq(0));\n }\n that.element.attr('role', 'tablist');\n that.value(value);\n kendo.notify(that);\n },\n _active: function () {\n var item = this.tabGroup.children().filter('.' + ACTIVESTATE);\n item = item[0] ? item : this._endItem('first');\n if (item[0]) {\n this._current(item);\n }\n },\n _endItem: function (action) {\n return this.tabGroup.children(NAVIGATABLEITEMS)[action]();\n },\n _getItem: function (action) {\n return this.tabGroup.children(KEYBOARDNAVIGATABLEITEMS)[action]();\n },\n _item: function (item, action) {\n var endItem;\n if (action === PREV) {\n endItem = 'last';\n } else {\n endItem = 'first';\n }\n if (!item) {\n return this._endItem(endItem);\n }\n item = item[action]();\n if (!item[0]) {\n item = this.tabGroup.children(KEYBOARDNAVIGATABLEITEMS)[endItem]();\n }\n if (item.hasClass(DISABLEDSTATE)) {\n item.addClass(FOCUSEDSTATE);\n }\n if (item.hasClass(DISABLEDSTATE) || item.hasClass(ACTIVESTATE)) {\n this._focused = item;\n }\n return item;\n },\n _current: function (candidate) {\n var that = this, focused = that._focused;\n if (candidate === undefined) {\n return focused;\n }\n if (focused) {\n focused.removeClass(FOCUSEDSTATE);\n }\n if (candidate) {\n if (!candidate.hasClass(ACTIVESTATE)) {\n candidate.addClass(FOCUSEDSTATE);\n }\n if (candidate[0].id) {\n that.element.attr('aria-activedescendant', candidate[0].id);\n }\n }\n that._focused = candidate;\n },\n _keydown: function (e) {\n var that = this, key = e.keyCode, current = that._current(), rtl = that._isRtl, isHorizontal = /top|bottom/.test(that.options.tabPosition), action;\n if (e.target != e.currentTarget || !current) {\n return;\n }\n if (key === keys.DOWN && !isHorizontal) {\n action = NEXT;\n } else if (key === keys.UP && !isHorizontal) {\n action = PREV;\n } else if (key === keys.RIGHT && isHorizontal) {\n action = rtl ? PREV : NEXT;\n } else if (key === keys.LEFT && isHorizontal) {\n action = rtl ? NEXT : PREV;\n } else if (key == keys.ENTER || key == keys.SPACEBAR) {\n that._click(current);\n e.preventDefault();\n } else if (key == keys.HOME) {\n that._click(that._getItem('first'));\n e.preventDefault();\n return;\n } else if (key == keys.END) {\n that._click(that._getItem('last'));\n e.preventDefault();\n return;\n }\n if (action) {\n that._click(that._item(current, action));\n e.preventDefault();\n }\n },\n _dataSource: function () {\n var that = this;\n if (that.dataSource && that._refreshHandler) {\n that.dataSource.unbind('change', that._refreshHandler);\n } else {\n that._refreshHandler = $.proxy(that.refresh, that);\n }\n that.dataSource = kendo.data.DataSource.create(that.options.dataSource).bind('change', that._refreshHandler);\n },\n setDataSource: function (dataSource) {\n var that = this;\n that.options.dataSource = dataSource;\n that._dataSource();\n that.dataSource.fetch();\n },\n _animations: function (options) {\n if (options && 'animation' in options && !options.animation) {\n options.animation = {\n open: { effects: {} },\n close: { effects: {} }\n };\n }\n },\n refresh: function (e) {\n var that = this, options = that.options, encoded = kendo.getter(options.dataEncodedField), text = kendo.getter(options.dataTextField), content = kendo.getter(options.dataContentField), contentUrl = kendo.getter(options.dataContentUrlField), image = kendo.getter(options.dataImageUrlField), url = kendo.getter(options.dataUrlField), sprite = kendo.getter(options.dataSpriteCssClass), idx, tabs = [], tab, action, view = that.dataSource.view(), length;\n e = e || {};\n action = e.action;\n if (action) {\n view = e.items;\n }\n for (idx = 0, length = view.length; idx < length; idx++) {\n tab = { text: text(view[idx]) };\n if (options.dataEncodedField) {\n tab.encoded = encoded(view[idx]);\n }\n if (options.dataContentField) {\n tab.content = content(view[idx]);\n }\n if (options.dataContentUrlField) {\n tab.contentUrl = contentUrl(view[idx]);\n }\n if (options.dataUrlField) {\n tab.url = url(view[idx]);\n }\n if (options.dataImageUrlField) {\n tab.imageUrl = image(view[idx]);\n }\n if (options.dataSpriteCssClass) {\n tab.spriteCssClass = sprite(view[idx]);\n }\n tabs[idx] = tab;\n }\n if (e.action == 'add') {\n if (e.index < that.tabGroup.children().length) {\n that.insertBefore(tabs, that.tabGroup.children().eq(e.index));\n } else {\n that.append(tabs);\n }\n } else if (e.action == 'remove') {\n for (idx = 0; idx < view.length; idx++) {\n that.remove(e.index);\n }\n } else if (e.action == 'itemchange') {\n idx = that.dataSource.view().indexOf(view[0]);\n if (e.field === options.dataTextField) {\n that.tabGroup.children().eq(idx).find('.k-link').text(view[0].get(e.field));\n }\n if (e.field === options.dataUrlField) {\n that._contentUrls[idx] = view[0].get(e.field);\n }\n } else {\n that.trigger('dataBinding');\n that.remove('li');\n that._contentUrls = [];\n that.append(tabs);\n that.trigger('dataBound');\n }\n },\n value: function (value) {\n var that = this;\n if (value !== undefined) {\n if (value != that.value()) {\n that.tabGroup.children().each(function () {\n if (kendo.trim($(this).text()) == value) {\n that.select(this);\n }\n });\n }\n } else {\n return that.select().text();\n }\n },\n items: function () {\n return this.tabGroup[0].children;\n },\n setOptions: function (options) {\n var that = this, animation = that.options.animation;\n that._animations(options);\n if (options.contentUrls) {\n that._contentUrls = options.contentUrls;\n }\n options.animation = extend(true, animation, options.animation);\n if (options.navigatable) {\n that.wrapper.on('keydown' + NS, that._keyDownProxy);\n } else {\n that.wrapper.off('keydown' + NS, that._keyDownProxy);\n }\n Widget.fn.setOptions.call(that, options);\n },\n events: [\n SELECT,\n ACTIVATE,\n SHOW,\n ERROR,\n CONTENTLOAD,\n 'change',\n 'dataBinding',\n 'dataBound'\n ],\n options: {\n name: 'TabStrip',\n dataEncodedField: '',\n dataTextField: '',\n dataContentField: '',\n dataImageUrlField: '',\n dataUrlField: '',\n dataSpriteCssClass: '',\n dataContentUrlField: '',\n tabPosition: 'top',\n animation: {\n open: {\n effects: 'expand:vertical fadeIn',\n duration: 200\n },\n close: { duration: 200 }\n },\n collapsible: false,\n navigatable: true,\n contentUrls: false,\n scrollable: { distance: DEFAULTDISTANCE }\n },\n destroy: function () {\n var that = this, scrollWrap = that.scrollWrap;\n Widget.fn.destroy.call(that);\n if (that._refreshHandler) {\n that.dataSource.unbind('change', that._refreshHandler);\n }\n that.wrapper.off(NS);\n that.wrapper.children('.k-tabstrip-items').off(NS);\n if (that._scrollableModeActive) {\n that._scrollPrevButton.off().remove();\n that._scrollNextButton.off().remove();\n }\n kendo.destroy(that.wrapper);\n scrollWrap.children('.k-tabstrip').unwrap();\n },\n select: function (element) {\n var that = this;\n if (arguments.length === 0) {\n return that.tabGroup.children('li.' + ACTIVESTATE);\n }\n if (!isNaN(element)) {\n element = that.tabGroup.children().get(element);\n }\n element = that.tabGroup.find(element);\n $(element).each(function (index, item) {\n item = $(item);\n if (!item.hasClass(ACTIVESTATE) && !that.trigger(SELECT, {\n item: item[0],\n contentElement: that.contentHolder(item.index())[0]\n })) {\n that.activateTab(item);\n }\n });\n return that;\n },\n enable: function (element, state) {\n this._toggleDisabled(element, state !== false);\n return this;\n },\n disable: function (element) {\n this._toggleDisabled(element, false);\n return this;\n },\n reload: function (element) {\n element = this.tabGroup.find(element);\n var that = this;\n var contentUrls = that._contentUrls;\n element.each(function () {\n var item = $(this), contentUrl = item.find('.' + LINK).data(CONTENTURL) || contentUrls[item.index()], content = that.contentHolder(item.index());\n if (contentUrl) {\n that.ajaxRequest(item, content, null, contentUrl);\n }\n });\n return that;\n },\n append: function (tab) {\n var that = this, inserted = that._create(tab);\n each(inserted.tabs, function (idx) {\n var contents = inserted.contents[idx];\n that.tabGroup.append(this);\n if (that.options.tabPosition == 'bottom') {\n that.tabGroup.before(contents);\n } else if (that._scrollableModeActive) {\n that._scrollPrevButton.before(contents);\n } else {\n that.wrapper.append(contents);\n }\n that.angular('compile', function () {\n return { elements: [contents] };\n });\n });\n updateFirstLast(that.tabGroup);\n that._updateContentElements();\n that.resize(true);\n return that;\n },\n _appendUrlItem: function (url) {\n this._contentUrls.push(url);\n },\n _moveUrlItem: function (from, to) {\n this._contentUrls.splice(to, 0, this._contentUrls.splice(from, 1)[0]);\n },\n _removeUrlItem: function (index) {\n this._contentUrls.splice(index, 1);\n },\n insertBefore: function (tab, referenceTab) {\n if ($(tab).is($(referenceTab))) {\n referenceTab = this.tabGroup.find(referenceTab).next();\n } else {\n referenceTab = this.tabGroup.find(referenceTab);\n }\n var that = this, inserted = that._create(tab), referenceContent = that.element.find('[id=\\'' + referenceTab.attr('aria-controls') + '\\']');\n each(inserted.tabs, function (idx) {\n var contents = inserted.contents[idx];\n var fromIndex = inserted.newTabsCreated ? that._contentUrls.length - (inserted.tabs.length - idx) : $(contents).index() - 1;\n referenceTab.before(this);\n referenceContent.before(contents);\n that._moveUrlItem(fromIndex, $(this).index());\n that.angular('compile', function () {\n return { elements: [contents] };\n });\n });\n updateFirstLast(that.tabGroup);\n that._updateContentElements(inserted.newTabsCreated);\n that.resize(true);\n return that;\n },\n insertAfter: function (tab, referenceTab) {\n if ($(tab).is($(referenceTab))) {\n referenceTab = this.tabGroup.find(referenceTab).prev();\n } else {\n referenceTab = this.tabGroup.find(referenceTab);\n }\n var that = this, inserted = that._create(tab), referenceContent = that.element.find('[id=\\'' + referenceTab.attr('aria-controls') + '\\']');\n each(inserted.tabs, function (idx) {\n var contents = inserted.contents[idx];\n var fromIndex = inserted.newTabsCreated ? that._contentUrls.length - (inserted.tabs.length - idx) : $(contents).index() - 1;\n referenceTab.after(this);\n referenceContent.after(contents);\n that._moveUrlItem(fromIndex, $(this).index());\n that.angular('compile', function () {\n return { elements: [contents] };\n });\n });\n updateFirstLast(that.tabGroup);\n that._updateContentElements(inserted.newTabsCreated);\n that.resize(true);\n return that;\n },\n remove: function (elements) {\n var that = this;\n var type = typeof elements;\n var contents;\n if (type === 'string') {\n elements = that.tabGroup.find(elements);\n } else if (type === 'number') {\n elements = that.tabGroup.children().eq(elements);\n }\n contents = elements.map(function () {\n var idx = $(this).index();\n var content = that.contentElement(idx);\n kendo.destroy(content);\n that._removeUrlItem(idx);\n return content;\n });\n elements.remove();\n contents.empty();\n contents.remove();\n that._updateContentElements();\n that.resize(true);\n return that;\n },\n _create: function (tab) {\n var that = this, tabs, contents, content, newTabsCreated = false;\n tab = tab instanceof kendo.data.ObservableArray ? tab.toJSON() : tab;\n if ($.isPlainObject(tab) || $.isArray(tab)) {\n tab = $.isArray(tab) ? tab : [tab];\n newTabsCreated = true;\n tabs = map(tab, function (value, idx) {\n that._appendUrlItem(tab[idx].contentUrl || null);\n return $(TabStrip.renderItem({\n group: that.tabGroup,\n item: extend(value, { index: idx })\n }));\n });\n contents = map(tab, function (value, idx) {\n if (typeof value.content == 'string' || value.contentUrl) {\n return $(TabStrip.renderContent({ item: extend(value, { index: idx }) }));\n }\n });\n } else {\n if (typeof tab == 'string' && tab[0] != '<') {\n tabs = that.element.find(tab);\n } else {\n tabs = $(tab);\n }\n contents = $();\n tabs.each(function () {\n if (/k-tabstrip-items/.test(this.parentNode.className)) {\n var element = that.element.find('[id=\\'' + this.getAttribute('aria-controls') + '\\']');\n content = element;\n } else {\n content = $('<div class=\\'' + CONTENT + '\\'/>');\n }\n contents = contents.add(content);\n });\n updateTabClasses(tabs);\n }\n return {\n tabs: tabs,\n contents: contents,\n newTabsCreated: newTabsCreated\n };\n },\n _toggleDisabled: function (element, enable) {\n element = this.tabGroup.find(element);\n element.each(function () {\n $(this).toggleClass(DEFAULTSTATE, enable).toggleClass(DISABLEDSTATE, !enable).attr('aria-disabled', !enable);\n });\n },\n _updateClasses: function () {\n var that = this, tabs, activeItem, activeTab;\n that.wrapper.addClass('k-widget k-header k-tabstrip');\n that.tabGroup = that.wrapper.children('ul').addClass('k-tabstrip-items k-reset');\n if (!that.tabGroup[0]) {\n that.tabGroup = $('<ul class=\\'k-tabstrip-items k-reset\\'/>').appendTo(that.wrapper);\n }\n tabs = that.tabGroup.find('li').addClass('k-item');\n if (tabs.length) {\n activeItem = tabs.filter('.' + ACTIVESTATE).index();\n activeTab = activeItem >= 0 ? activeItem : undefined;\n that.tabGroup.contents().filter(function () {\n return this.nodeType == 3 && !trim(this.nodeValue);\n }).remove();\n }\n if (activeItem >= 0) {\n tabs.eq(activeItem).addClass(TABONTOP);\n }\n that.contentElements = that.wrapper.children('div');\n that.contentElements.addClass(CONTENT).eq(activeTab).addClass(ACTIVESTATE).css({ display: 'block' });\n if (tabs.length) {\n updateTabClasses(tabs);\n updateFirstLast(that.tabGroup);\n that._updateContentElements(true);\n }\n },\n _elementId: function (element, idx, tab) {\n var elementId = element.attr('id');\n var wrapperId = this.element.attr('id') || kendo.guid();\n if (!elementId) {\n var tabStripID = wrapperId + '-';\n if (tab) {\n tabStripID += 'tab-';\n }\n return tabStripID + (idx + 1);\n }\n return elementId;\n },\n _updateContentElements: function (isInitialUpdate) {\n var that = this, contentUrls = that._contentUrls, items = that.tabGroup.children('.k-item'), contentElements = that.wrapper.children('div'), _elementId = that._elementId.bind(that);\n if (contentElements.length && items.length > contentElements.length) {\n contentElements.each(function (idx) {\n var contentId = _elementId($(this), idx), item = items.filter('[aria-controls=' + (contentId || 0) + ']')[0], tabId;\n if (!item && isInitialUpdate) {\n item = items[idx];\n }\n if (item) {\n item.setAttribute('aria-controls', contentId);\n tabId = item.id = _elementId($(item), idx, true);\n this.setAttribute('aria-labelledby', tabId);\n }\n this.setAttribute('id', contentId);\n });\n } else {\n items.each(function (idx) {\n var currentContent = contentElements.eq(idx), contentId = _elementId(currentContent, idx), tabId;\n this.setAttribute('aria-controls', contentId);\n tabId = this.id = _elementId($(this), idx, true);\n if (!currentContent.length && contentUrls[idx]) {\n $('<div class=\\'' + CONTENT + '\\'/>').appendTo(that.wrapper).attr('id', contentId);\n } else {\n currentContent.attr('id', contentId);\n if (!$(this).children('.k-loading')[0] && !contentUrls[idx]) {\n $('<span class=\\'k-loading k-complete\\'/>').prependTo(this);\n }\n }\n currentContent.attr('role', 'tabpanel');\n currentContent.attr('tabindex', '0');\n currentContent.attr('aria-labelledby', tabId);\n currentContent.filter(':not(.' + ACTIVESTATE + ')').attr('aria-hidden', true).attr('aria-expanded', false);\n currentContent.filter('.' + ACTIVESTATE).attr('aria-expanded', true);\n });\n }\n that.contentElements = that.contentAnimators = that.wrapper.children('div');\n that.tabsHeight = outerHeight(that.tabGroup) + parseInt(that.wrapper.css('border-top-width'), 10) + parseInt(that.wrapper.css('border-bottom-width'), 10);\n if (kendo.kineticScrollNeeded && kendo.mobile.ui.Scroller) {\n kendo.touchScroller(that.contentElements);\n that.contentElements = that.contentElements.children('.km-scroll-container');\n }\n },\n _wrapper: function () {\n var that = this;\n if (that.element.is('ul')) {\n that.wrapper = that.element.wrapAll('<div />').parent();\n } else {\n that.wrapper = that.element;\n }\n that.scrollWrap = that.wrapper.parent('.k-tabstrip-wrapper');\n if (!that.scrollWrap[0]) {\n that.scrollWrap = that.wrapper.wrapAll('<div class=\\'k-tabstrip-wrapper\\' />').parent();\n }\n },\n _tabPosition: function () {\n var that = this, tabPosition = that.options.tabPosition;\n that.wrapper.addClass('k-floatwrap k-tabstrip-' + tabPosition);\n if (tabPosition == 'bottom') {\n that.tabGroup.appendTo(that.wrapper);\n }\n that.resize(true);\n },\n _setContentElementsDimensions: function () {\n var that = this, tabPosition = that.options.tabPosition;\n if (tabPosition == 'left' || tabPosition == 'right') {\n var contentDivs = that.wrapper.children('.k-content'), activeDiv = contentDivs.filter(':visible'), marginStyleProperty = 'margin-' + tabPosition, tabGroup = that.tabGroup, margin = outerWidth(tabGroup);\n var minHeight = Math.ceil(tabGroup.height()) - parseInt(activeDiv.css('padding-top'), 10) - parseInt(activeDiv.css('padding-bottom'), 10) - parseInt(activeDiv.css('border-top-width'), 10) - parseInt(activeDiv.css('border-bottom-width'), 10);\n setTimeout(function () {\n contentDivs.css(marginStyleProperty, margin).css('min-height', minHeight);\n });\n }\n },\n _resize: function () {\n this._setContentElementsDimensions();\n this._scrollable();\n },\n _sizeScrollWrap: function (element) {\n if (element.is(':visible')) {\n var tabPosition = this.options.tabPosition;\n var h = Math.floor(outerHeight(element, true)) + (tabPosition === 'left' || tabPosition === 'right' ? 2 : this.tabsHeight);\n this.scrollWrap.css('height', h).css('height');\n }\n },\n _toggleHover: function (e) {\n $(e.currentTarget).toggleClass(HOVERSTATE, e.type == MOUSEENTER);\n },\n _click: function (item) {\n var that = this, link = item.find('.' + LINK), href = link.attr(HREF), collapse = that.options.collapsible, index = item.index(), contentHolder = that.contentHolder(index), prevent, isAnchor, neighbours = item.parent().children(), oldFocusedTab = neighbours.filter('.' + FOCUSEDSTATE);\n if (item.closest('.k-widget')[0] != that.wrapper[0]) {\n return;\n }\n if (item.is('.' + DISABLEDSTATE + (!collapse ? ',.' + ACTIVESTATE : ''))) {\n oldFocusedTab.removeClass(FOCUSEDSTATE);\n that._focused = item;\n item.addClass(FOCUSEDSTATE);\n that._current(item);\n if (that._scrollableModeActive) {\n that._scrollTabsToItem(item);\n }\n return true;\n }\n isAnchor = link.data(CONTENTURL) || that._contentUrls[index] || href && (href.charAt(href.length - 1) == '#' || href.indexOf('#' + that.element[0].id + '-') != -1);\n prevent = !href || isAnchor;\n if (that.tabGroup.children('[data-animating]').length) {\n return prevent;\n }\n if (that.trigger(SELECT, {\n item: item[0],\n contentElement: contentHolder[0]\n })) {\n return true;\n }\n if (prevent === false) {\n return;\n }\n if (collapse && item.is('.' + ACTIVESTATE)) {\n that.deactivateTab(item);\n return true;\n }\n if (that.activateTab(item)) {\n prevent = true;\n }\n return prevent;\n },\n _scrollable: function () {\n var that = this, options = that.options, wrapperOffsetWidth, tabGroupScrollWidth, scrollPrevButton, scrollNextButton;\n if (that._scrollableAllowed()) {\n that.wrapper.addClass('k-tabstrip-scrollable');\n wrapperOffsetWidth = that.wrapper[0].offsetWidth;\n tabGroupScrollWidth = that.tabGroup[0].scrollWidth;\n if (tabGroupScrollWidth > wrapperOffsetWidth && !that._scrollableModeActive) {\n that._nowScrollingTabs = false;\n that._isRtl = kendo.support.isRtl(that.element);\n var mouseDown = kendo.support.touch ? 'touchstart' : 'mousedown';\n var mouseUp = kendo.support.touch ? 'touchend' : 'mouseup';\n var browser = kendo.support.browser;\n var isRtlScrollDirection = that._isRtl && !browser.msie && !browser.edge;\n that.wrapper.append(scrollButtonHtml('prev', 'k-i-arrow-60-left') + scrollButtonHtml('next', 'k-i-arrow-60-right'));\n scrollPrevButton = that._scrollPrevButton = that.wrapper.children('.k-tabstrip-prev');\n scrollNextButton = that._scrollNextButton = that.wrapper.children('.k-tabstrip-next');\n that.tabGroup.css({\n marginLeft: outerWidth(scrollPrevButton) + 9,\n marginRight: outerWidth(scrollNextButton) + 12\n });\n scrollPrevButton.on(mouseDown + NS, function () {\n that._nowScrollingTabs = true;\n that._scrollTabsByDelta(options.scrollable.distance * (isRtlScrollDirection ? 1 : -1));\n });\n scrollNextButton.on(mouseDown + NS, function () {\n that._nowScrollingTabs = true;\n that._scrollTabsByDelta(options.scrollable.distance * (isRtlScrollDirection ? -1 : 1));\n });\n scrollPrevButton.add(scrollNextButton).on(mouseUp + NS, function () {\n that._nowScrollingTabs = false;\n });\n that._scrollableModeActive = true;\n that._toggleScrollButtons();\n } else if (that._scrollableModeActive && tabGroupScrollWidth <= wrapperOffsetWidth) {\n that._scrollableModeActive = false;\n that.wrapper.removeClass('k-tabstrip-scrollable');\n that._scrollPrevButton.off().remove();\n that._scrollNextButton.off().remove();\n that.tabGroup.css({\n marginLeft: '',\n marginRight: ''\n });\n } else if (!that._scrollableModeActive) {\n that.wrapper.removeClass('k-tabstrip-scrollable');\n } else {\n that._toggleScrollButtons();\n }\n }\n },\n _scrollableAllowed: function () {\n var options = this.options;\n if (options.scrollable && !options.scrollable.distance) {\n options.scrollable = { distance: DEFAULTDISTANCE };\n }\n return options.scrollable && !isNaN(options.scrollable.distance) && (options.tabPosition == 'top' || options.tabPosition == 'bottom');\n },\n _scrollTabsToItem: function (item) {\n var that = this, tabGroup = that.tabGroup, currentScrollOffset = kendo.scrollLeft(tabGroup), itemWidth = outerWidth(item), itemOffset = that._isRtl ? item.position().left : item.position().left - tabGroup.children().first().position().left, tabGroupWidth = tabGroup[0].offsetWidth, tabGroupPadding = Math.ceil(parseFloat(tabGroup.css('padding-left'))), browser = kendo.support.browser, itemPosition;\n if (that._isRtl && (browser.mozilla || browser.webkit && browser.version >= 85)) {\n currentScrollOffset = currentScrollOffset * -1;\n }\n if (that._isRtl) {\n if (itemOffset < 0) {\n itemPosition = currentScrollOffset + itemOffset - (tabGroupWidth - currentScrollOffset) - tabGroupPadding;\n } else if (itemOffset + itemWidth > tabGroupWidth) {\n itemPosition = currentScrollOffset + itemOffset - itemWidth + tabGroupPadding * 2;\n }\n } else {\n if (currentScrollOffset + tabGroupWidth < itemOffset + itemWidth) {\n itemPosition = itemOffset + itemWidth - tabGroupWidth + tabGroupPadding * 2;\n } else if (currentScrollOffset > itemOffset) {\n itemPosition = itemOffset - tabGroupPadding;\n }\n }\n tabGroup.finish().animate({ 'scrollLeft': itemPosition }, 'fast', 'linear', function () {\n that._toggleScrollButtons();\n });\n },\n _scrollTabsByDelta: function (delta) {\n var that = this;\n var tabGroup = that.tabGroup;\n var scrLeft = kendo.scrollLeft(tabGroup);\n var browser = kendo.support.browser;\n if (that._isRtl && (browser.mozilla || browser.webkit && browser.version >= 85)) {\n scrLeft = scrLeft * -1;\n }\n tabGroup.finish().animate({ 'scrollLeft': scrLeft + delta }, 'fast', 'linear', function () {\n if (that._nowScrollingTabs && !jQuery.fx.off) {\n that._scrollTabsByDelta(delta);\n } else {\n that._toggleScrollButtons();\n }\n });\n },\n _toggleScrollButtons: function () {\n var that = this, ul = that.tabGroup, scrollLeft = kendo.scrollLeft(ul);\n that._scrollPrevButton.toggle(scrollLeft !== 0);\n that._scrollNextButton.toggle(scrollLeft < ul[0].scrollWidth - ul[0].offsetWidth - 1);\n },\n deactivateTab: function (item) {\n var that = this, animationSettings = that.options.animation, animation = animationSettings.open, close = extend({}, animationSettings.close), hasCloseAnimation = close && 'effects' in close;\n item = that.tabGroup.find(item);\n close = extend(hasCloseAnimation ? close : extend({ reverse: true }, animation), { hide: true });\n if (kendo.size(animation.effects)) {\n item.kendoAddClass(DEFAULTSTATE, { duration: animation.duration });\n item.kendoRemoveClass(ACTIVESTATE, { duration: animation.duration });\n } else {\n item.addClass(DEFAULTSTATE);\n item.removeClass(ACTIVESTATE);\n }\n item.removeAttr('aria-selected');\n that.contentAnimators.filter('.' + ACTIVESTATE).kendoStop(true, true).kendoAnimate(close).removeClass(ACTIVESTATE).attr('aria-hidden', true);\n },\n activateTab: function (item) {\n if (this.tabGroup.children('[data-animating]').length) {\n return;\n }\n item = this.tabGroup.find(item);\n var that = this, animationSettings = that.options.animation, animation = animationSettings.open, close = extend({}, animationSettings.close), hasCloseAnimation = close && 'effects' in close, neighbours = item.parent().children(), oldTab = neighbours.filter('.' + ACTIVESTATE), itemIndex = neighbours.index(item), isAnimationEnabled = animation && 'duration' in animation && 'effects' in animation;\n close = extend(hasCloseAnimation ? close : extend({ reverse: true }, animation), { hide: true });\n if (kendo.size(animation.effects)) {\n oldTab.kendoRemoveClass(ACTIVESTATE, { duration: close.duration });\n item.kendoRemoveClass(HOVERSTATE, { duration: close.duration });\n } else {\n oldTab.removeClass(ACTIVESTATE);\n item.removeClass(HOVERSTATE);\n }\n var contentAnimators = that.contentAnimators;\n if (that.inRequest) {\n that.xhr.abort();\n that.inRequest = false;\n }\n if (contentAnimators.length === 0) {\n that.tabGroup.find('.' + TABONTOP).removeClass(TABONTOP);\n item.addClass(TABONTOP).css('z-index');\n item.addClass(ACTIVESTATE);\n that._current(item);\n that.trigger('change');\n if (that._scrollableModeActive) {\n that._scrollTabsToItem(item);\n }\n return false;\n }\n var visibleContents = contentAnimators.filter('.' + ACTIVESTATE), contentHolder = that.contentHolder(itemIndex), contentElement = contentHolder.closest('.k-content');\n that.tabsHeight = outerHeight(that.tabGroup) + parseInt(that.wrapper.css('border-top-width'), 10) + parseInt(that.wrapper.css('border-bottom-width'), 10);\n that._sizeScrollWrap(visibleContents);\n if (contentHolder.length === 0) {\n visibleContents.removeClass(ACTIVESTATE).attr('aria-hidden', true).kendoStop(true, true).kendoAnimate(close);\n return false;\n }\n item.attr('data-animating', true);\n var isAjaxContent = (item.children('.' + LINK).data(CONTENTURL) || that._contentUrls[itemIndex] || false) && contentHolder.is(EMPTY), showContentElement = function () {\n oldTab.removeAttr('aria-selected');\n item.attr('aria-selected', true);\n that._current(item);\n that._sizeScrollWrap(contentElement);\n contentElement.addClass(ACTIVESTATE).removeAttr('aria-hidden').kendoStop(true, true).attr('aria-expanded', true).kendoAnimate(extend({\n init: function () {\n that.trigger(SHOW, {\n item: item[0],\n contentElement: contentHolder[0]\n });\n kendo.resize(contentHolder);\n }\n }, animation, {\n complete: function () {\n item.removeAttr('data-animating');\n that.trigger(ACTIVATE, {\n item: item[0],\n contentElement: contentHolder[0]\n });\n kendo.resize(contentHolder);\n that.scrollWrap.css('height', '').css('height');\n if (isAnimationEnabled && (kendo.support.browser.msie || kendo.support.browser.edge)) {\n contentHolder.finish().animate({ opacity: 0.9 }, 'fast', 'linear', function () {\n contentHolder.finish().animate({ opacity: 1 }, 'fast', 'linear');\n });\n }\n }\n }));\n }, showContent = function () {\n if (!isAjaxContent) {\n showContentElement();\n that.trigger('change');\n } else {\n item.removeAttr('data-animating');\n that.ajaxRequest(item, contentHolder, function () {\n item.attr('data-animating', true);\n showContentElement();\n that.trigger('change');\n });\n }\n if (that._scrollableModeActive) {\n that._scrollTabsToItem(item);\n }\n };\n visibleContents.removeClass(ACTIVESTATE);\n that.tabGroup.find('.' + TABONTOP).removeClass(TABONTOP);\n item.addClass(TABONTOP).css('z-index');\n if (kendo.size(animation.effects)) {\n oldTab.kendoAddClass(DEFAULTSTATE, { duration: animation.duration });\n item.kendoAddClass(ACTIVESTATE, { duration: animation.duration });\n } else {\n oldTab.addClass(DEFAULTSTATE);\n item.addClass(ACTIVESTATE);\n }\n visibleContents.attr('aria-hidden', true);\n visibleContents.attr('aria-expanded', false);\n if (visibleContents.length) {\n visibleContents.kendoStop(true, true).kendoAnimate(extend({ complete: showContent }, close));\n } else {\n showContent();\n }\n return true;\n },\n contentElement: function (itemIndex) {\n if (isNaN(itemIndex - 0)) {\n return undefined;\n }\n var contentElements = this.contentElements && this.contentElements[0] && !kendo.kineticScrollNeeded ? this.contentElements : this.contentAnimators;\n var id = $(this.tabGroup.children()[itemIndex]).attr('aria-controls');\n if (contentElements) {\n for (var i = 0, len = contentElements.length; i < len; i++) {\n if (contentElements.eq(i).closest('.k-content')[0].id == id) {\n return contentElements[i];\n }\n }\n }\n return undefined;\n },\n contentHolder: function (itemIndex) {\n var contentElement = $(this.contentElement(itemIndex)), scrollContainer = contentElement.children('.km-scroll-container');\n return kendo.support.touch && scrollContainer[0] ? scrollContainer : contentElement;\n },\n ajaxRequest: function (element, content, complete, url) {\n element = this.tabGroup.find(element);\n var that = this, xhr = $.ajaxSettings.xhr, link = element.find('.' + LINK), data = {}, halfWidth = element.width() / 2, fakeProgress = false, statusIcon = element.find('.k-loading').removeClass('k-complete');\n if (!statusIcon[0]) {\n statusIcon = $('<span class=\\'k-loading\\'/>').prependTo(element);\n }\n var endState = halfWidth * 2 - statusIcon.width();\n var oldProgressAnimation = function () {\n statusIcon.animate({ marginLeft: (parseInt(statusIcon.css('marginLeft'), 10) || 0) < halfWidth ? endState : 0 }, 500, oldProgressAnimation);\n };\n if (kendo.support.browser.msie && kendo.support.browser.version < 10) {\n setTimeout(oldProgressAnimation, 40);\n }\n url = url || link.data(CONTENTURL) || that._contentUrls[element.index()] || link.attr(HREF);\n that.inRequest = true;\n var ajaxOptions = {\n type: 'GET',\n cache: false,\n url: url,\n dataType: 'html',\n data: data,\n xhr: function () {\n var current = this, request = xhr(), event = current.progressUpload ? 'progressUpload' : current.progress ? 'progress' : false;\n if (request) {\n $.each([\n request,\n request.upload\n ], function () {\n if (this.addEventListener) {\n this.addEventListener('progress', function (evt) {\n if (event) {\n current[event](evt);\n }\n }, false);\n }\n });\n }\n current.noProgress = !(window.XMLHttpRequest && 'upload' in new XMLHttpRequest());\n return request;\n },\n progress: function (evt) {\n if (evt.lengthComputable) {\n var percent = parseInt(evt.loaded / evt.total * 100, 10) + '%';\n statusIcon.stop(true).addClass('k-progress').css({\n 'width': percent,\n 'marginLeft': 0\n });\n }\n },\n error: function (xhr, status) {\n if (that.trigger('error', {\n xhr: xhr,\n status: status\n })) {\n this.complete();\n }\n },\n stopProgress: function () {\n clearInterval(fakeProgress);\n statusIcon.stop(true).addClass('k-progress')[0].style.cssText = '';\n },\n complete: function (xhr) {\n that.inRequest = false;\n if (this.noProgress) {\n setTimeout(this.stopProgress, 500);\n } else {\n this.stopProgress();\n }\n if (xhr.statusText == 'abort') {\n statusIcon.remove();\n }\n },\n success: function (data) {\n statusIcon.addClass('k-complete');\n try {\n var current = this, loaded = 10;\n if (current.noProgress) {\n statusIcon.width(loaded + '%');\n fakeProgress = setInterval(function () {\n current.progress({\n lengthComputable: true,\n loaded: Math.min(loaded, 100),\n total: 100\n });\n loaded += 10;\n }, 40);\n }\n that.angular('cleanup', function () {\n return { elements: content.get() };\n });\n kendo.destroy(content);\n content.html(data);\n } catch (e) {\n var console = window.console;\n if (console && console.error) {\n console.error(e.name + ': ' + e.message + ' in ' + url);\n }\n this.error(this.xhr, 'error');\n }\n if (complete) {\n complete.call(that, content);\n }\n that.angular('compile', function () {\n return { elements: content.get() };\n });\n that.trigger(CONTENTLOAD, {\n item: element[0],\n contentElement: content[0]\n });\n }\n };\n if (typeof url === 'object') {\n ajaxOptions = $.extend(true, {}, ajaxOptions, url);\n if (isFunction(ajaxOptions.url)) {\n ajaxOptions.url = ajaxOptions.url();\n }\n }\n that.xhr = $.ajax(ajaxOptions);\n }\n });\n extend(TabStrip, {\n renderItem: function (options) {\n options = extend({\n tabStrip: {},\n group: {}\n }, options);\n var empty = templates.empty, item = options.item;\n return templates.item(extend(options, {\n image: item.imageUrl ? templates.image : empty,\n sprite: item.spriteCssClass ? templates.sprite : empty,\n itemWrapper: templates.itemWrapper\n }, rendering));\n },\n renderContent: function (options) {\n return templates.content(extend(options, rendering));\n }\n });\n kendo.ui.plugin(TabStrip);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.timepicker', [\n 'kendo.popup',\n 'kendo.dateinput'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'timepicker',\n name: 'TimePicker',\n category: 'web',\n description: 'The TimePicker widget allows the end user to select a value from a list of predefined values or to type a new value.',\n depends: ['popup']\n };\n (function ($, undefined) {\n var kendo = window.kendo, keys = kendo.keys, parse = kendo.parseDate, activeElement = kendo._activeElement, extractFormat = kendo._extractFormat, support = kendo.support, browser = support.browser, ui = kendo.ui, Widget = ui.Widget, OPEN = 'open', CLOSE = 'close', CHANGE = 'change', ns = '.kendoTimePicker', CLICK = 'click' + ns, DEFAULT = 'k-state-default', DISABLED = 'disabled', READONLY = 'readonly', LI = 'li', SPAN = '<span></span>', FOCUSED = 'k-state-focused', HOVER = 'k-state-hover', HOVEREVENTS = 'mouseenter' + ns + ' mouseleave' + ns, MOUSEDOWN = 'mousedown' + ns, MS_PER_MINUTE = 60000, MS_PER_DAY = 86400000, SELECTED = 'k-state-selected', STATEDISABLED = 'k-state-disabled', ARIA_SELECTED = 'aria-selected', ARIA_EXPANDED = 'aria-expanded', ARIA_HIDDEN = 'aria-hidden', ARIA_DISABLED = 'aria-disabled', ARIA_READONLY = 'aria-readonly', ARIA_ACTIVEDESCENDANT = 'aria-activedescendant', ID = 'id', isArray = $.isArray, extend = $.extend, proxy = $.proxy, DATE = Date, dateFormatRegExp = /d{1,2}|E{1,6}|e{1,6}|c{3,6}|c{1}|M{1,5}|L{1,5}|y{1,4}|H{1,2}|h{1,2}|k{1,2}|K{1,2}|m{1,2}|a{1,5}|s{1,2}|S{1,3}|z{1,4}|Z{1,5}|x{1,5}|X{1,5}|G{1,5}|q{1,5}|Q{1,5}|\"[^\"]*\"|'[^']*'/g, LITERAL = 'literal', MONTH = 'month', HOUR = 'hour', ZONE = 'zone', WEEKDAY = 'weekday', QUARTER = 'quarter', DATE_FIELD_MAP = {\n 'G': 'era',\n 'y': 'year',\n 'q': QUARTER,\n 'Q': QUARTER,\n 'M': MONTH,\n 'L': MONTH,\n 'd': 'day',\n 'E': WEEKDAY,\n 'c': WEEKDAY,\n 'e': WEEKDAY,\n 'h': HOUR,\n 'H': HOUR,\n 'k': HOUR,\n 'K': HOUR,\n 'm': 'minute',\n 's': 'second',\n 'a': 'dayperiod',\n 'x': ZONE,\n 'X': ZONE,\n 'z': ZONE,\n 'Z': ZONE\n }, NAME_TYPES = {\n month: {\n type: 'months',\n minLength: 3,\n standAlone: 'L'\n },\n quarter: {\n type: 'quarters',\n minLength: 3,\n standAlone: 'q'\n },\n weekday: {\n type: 'days',\n minLength: {\n E: 0,\n c: 3,\n e: 3\n },\n standAlone: 'c'\n },\n dayperiod: {\n type: 'dayPeriods',\n minLength: 0\n },\n era: {\n type: 'eras',\n minLength: 0\n }\n }, TODAY = new DATE(), MODERN_RENDERING_TEMPLATE = '<div tabindex=\"0\" class=\"k-timeselector\">' + '<div class=\"k-time-header\">' + '<span class=\"k-title\"></span>' + '<button class=\"k-button k-flat k-time-now\" title=\"Select now\" aria-label=\"Select now\">#=messages.now#</button>' + '</div>' + '<div class=\"k-time-list-container\">' + '<span class=\"k-time-highlight\"></span>' + '</div>' + '</div>', NEW_RENDERING_FOOTER = '<div class=\"k-time-footer k-action-buttons\">' + '<button class=\"k-button k-time-cancel\" title=\"Cancel changes\" aria-label=\"Cancel changes\">#=messages.cancel#</button>' + '<button class=\"k-time-accept k-button k-primary\" title=\"Set time\" aria-label=\"Set time\">#=messages.set#</button>' + '</div>', HIGHLIGHTCONTAINER = '<span class=\"k-time-highlight\"></span>';\n TODAY = new Date(TODAY.getFullYear(), TODAY.getMonth(), TODAY.getDate(), 0, 0, 0);\n var TimeView = function (options) {\n var that = this, id = options.id;\n that.options = options;\n that._dates = [];\n that._createList(options.timeView && options.timeView.list === 'scroll');\n if (id) {\n that._timeViewID = id + '_timeview';\n that._optionID = id + '_option_selected';\n that.ul.attr(ID, that._timeViewID);\n }\n that._heightHandler = proxy(that._height, that);\n that._popup();\n };\n TimeView.prototype = {\n _createList: function (scroll) {\n if (scroll) {\n this._createScrollList();\n } else {\n this._createClassicRenderingList();\n }\n },\n _createScrollList: function () {\n this.list = $(kendo.template(MODERN_RENDERING_TEMPLATE)(this.options)).on(MOUSEDOWN, preventDefault);\n if (!this.options.omitPopup) {\n this.list.append(kendo.template(NEW_RENDERING_FOOTER)(this.options));\n }\n this.ul = this.list.find('.k-time-list-container');\n this.list.on('click' + ns, '.k-time-header button.k-time-now', proxy(this._nowClickHandler, this));\n this.list.on('click' + ns, '.k-time-footer button.k-time-cancel', proxy(this._cancelClickHandler, this));\n this.list.on('click' + ns, '.k-time-footer button.k-time-accept', proxy(this._setClickHandler, this));\n this.list.on('mouseover' + ns, '.k-time-list-wrapper', proxy(this._mouseOverHandler, this));\n this.list.on('keydown' + ns, proxy(this._scrollerKeyDownHandler, this));\n },\n _scrollerKeyDownHandler: function (e) {\n var that = this, key = e.keyCode, list = $(e.currentTarget).find('.k-time-list-wrapper.k-state-focused'), lists = that.list.find('.k-time-list-wrapper'), length = lists.length, index = lists.index(list), isRtl = kendo.support.isRtl(that.wrapper), itemHeight = getItemHeight(list.find('.k-item:visible:eq(0)')), container = list.find('.k-time-container.k-content.k-scrollable');\n if (!list.length) {\n return;\n }\n if (key == keys.RIGHT && !isRtl || key == keys.LEFT && isRtl) {\n if (index + 1 < length) {\n that._focusList(lists.eq(index + 1));\n }\n } else if (key == keys.LEFT && !isRtl || key == keys.RIGHT && isRtl) {\n if (index - 1 >= 0) {\n that._focusList(lists.eq(index - 1));\n }\n } else if (key == keys.UP) {\n container.scrollTop(container.scrollTop() - itemHeight);\n e.preventDefault();\n } else if (key == keys.DOWN) {\n container.scrollTop(container.scrollTop() + itemHeight);\n e.preventDefault();\n } else if (key === keys.ENTER) {\n that._setClickHandler();\n } else if (key === keys.ESC) {\n that._cancelClickHandler();\n }\n },\n _mouseOverHandler: function (e) {\n this._focusList($(e.currentTarget));\n },\n _focusList: function (list) {\n this.list.find('.k-time-list-wrapper').removeClass(FOCUSED);\n list.addClass(FOCUSED);\n this.list.focus();\n this._scrollTop = list.find('.k-scrollable').scrollTop();\n },\n _createClassicRenderingList: function () {\n var that = this;\n that.ul = $('<ul tabindex=\"-1\" role=\"listbox\" aria-hidden=\"true\" unselectable=\"on\" class=\"k-list k-reset\"/>').css({ overflow: support.kineticScrollNeeded ? '' : 'auto' }).on(CLICK, LI, proxy(that._click, that)).on('mouseenter' + ns, LI, function () {\n $(this).addClass(HOVER);\n }).on('mouseleave' + ns, LI, function () {\n $(this).removeClass(HOVER);\n });\n that.list = $('<div class=\\'k-list-container k-list-scroller\\' unselectable=\\'on\\'/>').append(that.ul).on(MOUSEDOWN, preventDefault);\n that.template = kendo.template('<li tabindex=\"-1\" role=\"option\" class=\"k-item\" unselectable=\"on\">#=data#</li>', { useWithBlock: false });\n },\n current: function (candidate) {\n var that = this, active = that.options.active;\n if (candidate !== undefined) {\n if (that._current) {\n that._current.removeClass(SELECTED);\n if (that._current && that._current.length) {\n that._current[0].removeAttribute(ID);\n that._current[0].removeAttribute(ARIA_SELECTED);\n }\n }\n if (candidate) {\n candidate = $(candidate).addClass(SELECTED).attr(ID, that._optionID).attr(ARIA_SELECTED, true);\n that.scroll(candidate[0]);\n }\n that._current = candidate;\n if (active) {\n active(candidate);\n }\n } else {\n return that._current;\n }\n },\n _updateTitle: function () {\n this.list.find('.k-time-header > .k-title').html(kendo.toString(this._value, this.options.format, this.options.culture));\n },\n applyValue: function (value) {\n if (!value) {\n return;\n }\n var is12hourFormat = includes(this.options.format.toLowerCase(), 't');\n var hours = value.getHours();\n var minutes = value.getMinutes();\n var seconds = value.getSeconds();\n var designator;\n var hoursList = this.ul.find('[data-index=\"1\"]');\n var minutessList = this.ul.find('[data-index=\"2\"]');\n var secondsList = this.ul.find('[data-index=\"3\"]');\n var designatorList = this.ul.find('[data-index=\"4\"]');\n if (is12hourFormat) {\n if (hours >= 12) {\n designator = 'PM';\n if (hours > 12) {\n hours -= 12;\n }\n } else {\n designator = 'AM';\n if (hours === 0) {\n hours = 12;\n }\n }\n }\n if (hoursList.length) {\n this._scrollListToPosition(hoursList, hours);\n }\n if (minutessList.length) {\n this._scrollListToPosition(minutessList, minutes);\n }\n if (secondsList.length) {\n this._scrollListToPosition(secondsList, seconds);\n }\n if (designatorList.length) {\n this._scrollListToPosition(designatorList, designator);\n }\n },\n _scrollListToPosition: function (list, value) {\n var item = list.find('.k-item[data-value=\"' + pad(value) + '\"]');\n var itemHeight = getItemHeight(item);\n list.scrollTop(list.find('.k-item:visible').index(item) * itemHeight);\n },\n close: function () {\n this.popup.close();\n },\n destroy: function () {\n var that = this;\n that.ul.off(ns);\n that.list.off(ns);\n if (this.popup) {\n that.popup.destroy();\n }\n },\n open: function () {\n var that = this;\n var popupHovered;\n if (!that.ul[0].firstChild || that.ul.find('li').length < 1) {\n that.bind();\n }\n popupHovered = that.popup._hovered;\n that.popup._hovered = true;\n that.popup.open();\n setTimeout(function () {\n that.popup._hovered = popupHovered;\n }, 1);\n if (that._current) {\n that.scroll(that._current[0]);\n }\n },\n dataBind: function (dates) {\n var that = this, options = that.options, format = options.format, toString = kendo.toString, template = that.template, length = dates.length, idx = 0, date, html = '';\n for (; idx < length; idx++) {\n date = dates[idx];\n if (isInRange(date, options.min, options.max)) {\n html += template(toString(date, format, options.culture));\n }\n }\n that._html(html);\n },\n refresh: function () {\n var that = this, options = that.options, format = options.format, offset = dst(), ignoreDST = offset < 0, value = kendo.parseDate(that._value), parsedValue = value ? mergeDateAndTime(value, options.min) : mergeDateAndTime(new Date(), options.min), min = options.min, max = options.max, msMin = getMilliseconds(min), msMax = getMilliseconds(max), msLastTime = getMilliseconds(lastTimeOption(options.interval)), msInterval = options.interval * MS_PER_MINUTE, toString = kendo.toString, template = that.template, start = options.useValueToRender ? parsedValue : new Date(+options.min), startDate = new DATE(start), msStart, length, html = '';\n if (ignoreDST) {\n length = (MS_PER_DAY + offset * MS_PER_MINUTE) / msInterval;\n } else {\n length = MS_PER_DAY / msInterval;\n }\n if (msMin != msMax || msLastTime === msMax) {\n if (msMin > msMax) {\n msMax += MS_PER_DAY;\n }\n length = (msMax - msMin) / msInterval + 1;\n }\n if (options.timeView && options.timeView.list === 'scroll') {\n html = that._createListContent(splitDateFormat(format));\n } else {\n that.getDatesInRange(msStart, msMax, startDate, max, msInterval, start).forEach(function (date) {\n html += template(toString(date, format, options.culture));\n });\n }\n that._html(html);\n },\n _updateListBottomOffset: function (list) {\n var itemHeight = getItemHeight(list.find('.k-item:visible:eq(0)'));\n var listHeight = list.outerHeight();\n var bottomOffset = listHeight - itemHeight;\n list.find('.k-scrollable-placeholder').css({ height: list.find('ul').height() + bottomOffset });\n },\n _updateHoursRange: function () {\n var that = this;\n var hoursList = this.ul.find('[data-index=\"1\"]');\n var minHours = this._minHours;\n var maxHours = this._maxHours;\n var is12hourFormat = includes(this.options.format.toLowerCase(), 't');\n var useMax;\n var useMin;\n var selectedDesignator = this._findSelectedValue(this.ul.find('[data-index=\"4\"]'));\n if (!hoursList.length) {\n return;\n }\n if (is12hourFormat && selectedDesignator) {\n if (selectedDesignator === 'AM') {\n if (minHours < 12) {\n useMin = true;\n }\n if (maxHours < 12) {\n useMax = true;\n }\n } else if (selectedDesignator === 'PM') {\n if (minHours > 12) {\n useMin = true;\n minHours -= 12;\n }\n if (maxHours > 12) {\n useMax = true;\n maxHours -= 12;\n }\n }\n hoursList.find('.k-item').each(function (_, item) {\n item = $(item);\n var value = +item.attr('data-value');\n if (that._validateMin && useMin && value < minHours || that._validateMax && useMax && value > maxHours) {\n item.hide();\n } else {\n item.show();\n }\n });\n } else {\n hoursList.find('.k-item').each(function (_, item) {\n item = $(item);\n var value = +item.attr('data-value');\n if (that._validateMin && value < minHours || that._validateMax && value > maxHours) {\n item.hide();\n } else {\n item.show();\n }\n });\n }\n this._updateListBottomOffset(hoursList);\n },\n _updateMinutesRange: function () {\n var that = this;\n var minutesList = this.ul.find('[data-index=\"2\"]');\n var minHours = this._minHours;\n var maxHours = this._maxHours;\n var minMinutes = this._minMinutes;\n var maxMinutes = this._maxMinutes;\n var selectedHour = +this._findSelectedValue(this.ul.find('[data-index=\"1\"]'));\n var is12hourFormat = includes(this.options.format.toLowerCase(), 't');\n var selectedDesignator = this._findSelectedValue(this.ul.find('[data-index=\"4\"]'));\n if (is12hourFormat && selectedDesignator === 'PM') {\n selectedHour += 12;\n }\n if (!minutesList.length) {\n return;\n }\n minutesList.find('.k-item').each(function (_, item) {\n item = $(item);\n var value = +item.attr('data-value');\n if (that._validateMin && value < minMinutes && minHours && selectedHour === minHours || that._validateMax && value > maxMinutes && maxHours && selectedHour === maxHours) {\n item.hide();\n } else {\n item.show();\n }\n });\n this._updateListBottomOffset(minutesList);\n },\n _updateSecondsRange: function () {\n var that = this;\n var secondsList = this.ul.find('[data-index=\"3\"]');\n var minSeconds = this._minSeconds;\n var maxSeconds = this._minSeconds;\n var minMinutes = this._minMinutes;\n var maxMinutes = this._maxMinutes;\n var selectedMinutes = +this._findSelectedValue(this.ul.find('[data-index=\"2\"]'));\n if (!secondsList.length) {\n return;\n }\n secondsList.find('.k-item').each(function (_, item) {\n item = $(item);\n var value = +item.attr('data-value');\n if (that._validateMin && value < minSeconds && minMinutes && selectedMinutes === minMinutes || that._validateMax && value > maxSeconds && maxMinutes && selectedMinutes === maxMinutes) {\n item.hide();\n } else {\n item.show();\n }\n });\n this._updateListBottomOffset(secondsList);\n },\n _updateDesignatorRange: function () {\n var minHours = this._minHours;\n var maxHours = this._maxHours;\n var designatorList = this.ul.find('[data-index=\"4\"]');\n if (!designatorList.length) {\n return;\n }\n if (this._validateMin && minHours >= 12) {\n designatorList.find('.k-item[data-value=\"AM\"]').hide();\n } else {\n designatorList.find('.k-item[data-value=\"AM\"]').show();\n }\n if (this._validateMax && maxHours < 12) {\n designatorList.find('.k-item[data-value=\"PM\"]').hide();\n } else {\n designatorList.find('.k-item[data-value=\"PM\"]').show();\n }\n },\n _updateRanges: function () {\n if (!this.options.specifiedRange) {\n return;\n }\n if (!this._currentlySelected) {\n this._currentlySelected = new Date();\n }\n var max = this.options.max;\n var min = this.options.min;\n if (this.options.validateDate) {\n if (max.getFullYear() === this._currentlySelected.getFullYear() && max.getMonth() === this._currentlySelected.getMonth() && max.getDate() === this._currentlySelected.getDate()) {\n this._validateMax = true;\n } else {\n this._validateMax = false;\n }\n if (min.getFullYear() === this._currentlySelected.getFullYear() && min.getMonth() === this._currentlySelected.getMonth() && min.getDate() === this._currentlySelected.getDate()) {\n this._validateMin = true;\n } else {\n this._validateMin = false;\n }\n if (!this._validateMax && !this._validateMin) {\n return;\n }\n } else {\n this._validateMax = true;\n this._validateMin = true;\n }\n this._minMinutes = min.getMinutes();\n this._maxMinutes = max.getMinutes();\n this._minHours = min.getHours();\n this._maxHours = max.getHours();\n this._minSeconds = min.getSeconds();\n this._maxSeconds = max.getSeconds();\n this._updateDesignatorRange();\n this._updateHoursRange();\n this._updateMinutesRange();\n this._updateSecondsRange();\n },\n addTranslate: function () {\n var lists = this.ul.find('.k-time-container.k-content.k-scrollable');\n var length = lists.length;\n var list;\n var itemHeight;\n var listHeight;\n var topOffset;\n var translate;\n var bottomOffset;\n for (var i = 0; i < length; i++) {\n list = lists.eq(i);\n itemHeight = getItemHeight(list.find('.k-item:visible:eq(0)'));\n listHeight = list.outerHeight();\n topOffset = (listHeight - itemHeight) / 2;\n translate = 'translateY(' + topOffset + 'px)';\n bottomOffset = listHeight - itemHeight;\n list.find('ul').css({\n transform: translate,\n '-ms-transform': translate\n });\n list.find('.k-scrollable-placeholder').css({ height: list.find('ul').height() + bottomOffset });\n list.off(ns).on('click' + ns, '.k-item', proxy(this._itemClickHandler, this)).on('scroll' + ns, proxy(this._listScrollHandler, this));\n }\n },\n _nowClickHandler: function () {\n var now = new Date();\n this.value(now);\n this.options.change(kendo.toString(now, this.options.format, this.options.culture));\n },\n _cancelClickHandler: function () {\n this.value(this._value);\n this.popup.close();\n },\n _setClickHandler: function () {\n this._value = new Date(this._currentlySelected);\n this.options.change(kendo.toString(this._currentlySelected, this.options.format, this.options.culture), true);\n this.popup.close();\n },\n _listScrollHandler: function (e) {\n var that = this;\n var itemHeight = getItemHeight($(e.currentTarget).find('.k-item:visible:eq(0)'));\n if (that._scrollingTimeout) {\n clearTimeout(that._scrollingTimeout);\n }\n that._scrollingTimeout = setTimeout(function () {\n if (e.currentTarget.scrollTop % itemHeight > 1) {\n e.currentTarget.scrollTop += itemHeight - e.currentTarget.scrollTop % itemHeight;\n }\n that._scrollTop = e.currentTarget.scrollTop;\n that._updateCurrentlySelected();\n that._updateRanges();\n }, 100);\n },\n _updateCurrentlySelected: function () {\n var is12hourFormat = includes(this.options.format.toLowerCase(), 't');\n var hoursList = this.ul.find('[data-index=\"1\"]');\n var minutesList = this.ul.find('[data-index=\"2\"]');\n var secondsList = this.ul.find('[data-index=\"3\"]');\n var designatorList = this.ul.find('[data-index=\"4\"]');\n var selectedHour;\n var selectedMinutes;\n var selectedSeconds;\n var selectedDesignator;\n if (!this.ul.is(':visible')) {\n return;\n }\n if (!this._currentlySelected) {\n this._currentlySelected = this._value ? new Date(this._value) : new Date();\n }\n if (hoursList.length) {\n selectedHour = +this._findSelectedValue(hoursList);\n }\n if (minutesList.length) {\n selectedMinutes = +this._findSelectedValue(minutesList);\n }\n if (secondsList.length) {\n selectedSeconds = +this._findSelectedValue(secondsList);\n }\n if (designatorList.length) {\n selectedDesignator = this._findSelectedValue(designatorList);\n }\n if (is12hourFormat) {\n if (selectedDesignator == 'PM') {\n selectedHour += 12;\n if (selectedHour == 24) {\n selectedHour = 12;\n }\n }\n if (selectedDesignator === 'AM' && selectedHour === 12) {\n selectedHour = 0;\n }\n }\n if (selectedHour !== undefined) {\n this._currentlySelected.setHours(selectedHour);\n }\n if (selectedMinutes !== undefined) {\n this._currentlySelected.setMinutes(selectedMinutes);\n }\n if (selectedSeconds !== undefined) {\n this._currentlySelected.setSeconds(selectedSeconds);\n }\n },\n _findSelectedValue: function (list) {\n var firstOccurence = firstItemIndex(list.scrollTop(), getItemHeight(list.find('.k-item:visible:eq(0)')));\n return list.find('.k-item:visible').eq(firstOccurence).attr('data-value');\n },\n _itemClickHandler: function (e) {\n var list = $(e.originalEvent.currentTarget);\n var index = list.find('.k-item:visible').index($(e.currentTarget));\n var itemHeight = getItemHeight(list.find('.k-item:visible:eq(0)'));\n list.scrollTop(index * itemHeight);\n },\n getDatesInRange: function (msStart, msMax, startDate, max, msInterval, start) {\n var result = [];\n while (true) {\n if (msMax && (getMilliseconds(start) >= msMax || startDate.getDate() != start.getDate())) {\n msStart = getMilliseconds(start);\n if (startDate < start) {\n msStart += MS_PER_DAY;\n }\n if (msStart > msMax) {\n start = new DATE(+max);\n }\n if (getMilliseconds(start) > 0) {\n result.push(new Date(start));\n }\n break;\n }\n if (startDate.getDate() != start.getDate()) {\n break;\n }\n result.push(new Date(start));\n start.setTime(start.getTime() + msInterval);\n if (!msMax && this.options.maxSet) {\n break;\n }\n }\n return result;\n },\n _createListContent: function (parts) {\n var length = parts.length;\n var result = '';\n var part;\n var values;\n for (var i = 0; i < length; i++) {\n part = parts[i];\n if (part.type === 'literal') {\n result += this._literalTemplate(part);\n } else {\n values = this._getValues(part, true);\n result += this._itemTemplate(values.values, part, this.options.messages[part.type], values.index);\n }\n }\n return result;\n },\n _itemTemplate: function (values, part, title, index) {\n var result = '';\n var length = values.length;\n result += '<div class=\"k-time-list-wrapper\" role=\"presentation\">' + '<span class=\"k-title\">' + (title || part.type) + '</span>' + '<div class=\"k-time-list\">' + '<div class=\"k-time-container k-content k-scrollable\" role=\"presentation\" data-index=\"' + index + '\">' + '<ul class=\"k-reset\">';\n for (var i = 0; i < length; i++) {\n result += '<li class=\"k-item\" data-value=\"' + values[i] + '\">' + '<span>' + values[i] + '</span>' + '</li>';\n }\n result += '</ul>' + '<div class=\"k-scrollable-placeholder\"></div>' + '</div>' + '</div>' + '</div>';\n return result;\n },\n _getValues: function (part, shouldPad) {\n var result = [];\n var index;\n var start = 0;\n var end;\n if (part.type === 'hour') {\n start = 1;\n index = 1;\n end = part.hour12 ? 12 : 24;\n } else if (part.type === 'minute') {\n index = 2;\n end = 59;\n } else if (part.type === 'second') {\n index = 3;\n end = 59;\n }\n for (; start <= end; start++) {\n result.push(shouldPad ? pad(start) : start);\n }\n return {\n values: result,\n index: index\n };\n },\n _literalTemplate: function (part) {\n var result = '<div class=\"k-time-separator\">' + (part.pattern === ' tt' ? ':' : part.pattern) + '</div>';\n if (part.pattern === ' tt') {\n result += this._itemTemplate([\n 'AM',\n 'PM'\n ], part, 'AM/PM', 4);\n }\n return result;\n },\n bind: function () {\n var that = this, dates = that.options.dates;\n if (dates && dates[0]) {\n that.dataBind(dates);\n } else {\n that.refresh();\n }\n },\n _html: function (html) {\n var that = this;\n if (that.options.timeView && that.options.timeView.list === 'scroll') {\n html = HIGHLIGHTCONTAINER + html;\n that.ul.html(html);\n } else {\n that.ul[0].innerHTML = html;\n that.popup.unbind(OPEN, that._heightHandler);\n that.popup.one(OPEN, that._heightHandler);\n that.current(null);\n that.select(that._value);\n }\n },\n scroll: function (item) {\n if (!item) {\n return;\n }\n var content = this.list[0], itemOffsetTop = item.offsetTop, itemOffsetHeight = item.offsetHeight, contentScrollTop = content.scrollTop, contentOffsetHeight = content.clientHeight, bottomDistance = itemOffsetTop + itemOffsetHeight;\n if (contentScrollTop > itemOffsetTop) {\n contentScrollTop = itemOffsetTop;\n } else if (bottomDistance > contentScrollTop + contentOffsetHeight) {\n contentScrollTop = bottomDistance - contentOffsetHeight;\n }\n content.scrollTop = contentScrollTop;\n },\n select: function (li) {\n var that = this, options = that.options, current = that._current, selection;\n if (li instanceof Date) {\n li = kendo.toString(li, options.format, options.culture);\n }\n if (typeof li === 'string') {\n if (!current || current.text() !== li) {\n li = $.grep(that.ul[0].childNodes, function (node) {\n return (node.textContent || node.innerText) == li;\n });\n li = li[0] ? li : null;\n } else {\n li = current;\n }\n }\n selection = that._distinctSelection(li);\n that.current(selection);\n },\n _distinctSelection: function (selection) {\n var that = this, currentValue, selectionIndex;\n if (selection && selection.length > 1) {\n currentValue = getMilliseconds(that._value);\n selectionIndex = $.inArray(currentValue, that._dates);\n selection = that.ul.children()[selectionIndex];\n }\n return selection;\n },\n setOptions: function (options) {\n var old = this.options;\n options.min = parse(options.min);\n options.max = parse(options.max);\n this.options = extend(old, options, {\n active: old.active,\n change: old.change,\n close: old.close,\n open: old.open\n });\n this.bind();\n },\n toggle: function () {\n var that = this;\n if (that.popup.visible()) {\n that.close();\n } else {\n that.open();\n }\n },\n value: function (value) {\n var that = this;\n that._value = value;\n if (that.ul[0].firstChild) {\n if (that.options.timeView && that.options.timeView.list === 'scroll') {\n that.applyValue(value);\n } else {\n that.select(value);\n }\n }\n },\n _click: function (e) {\n var that = this, li = $(e.currentTarget), date = li.text(), dates = that.options.dates;\n if (dates && dates.length > 0) {\n date = dates[li.index()];\n }\n if (!e.isDefaultPrevented()) {\n that.select(li);\n that.options.change(date, true);\n that.close();\n }\n },\n _height: function () {\n var that = this;\n var list = that.list;\n var parent = list.parent('.k-animation-container');\n var height = that.options.height;\n if (that.ul[0].children.length) {\n list.add(parent).show().height(that.ul[0].scrollHeight > height ? height : 'auto').hide();\n }\n },\n _parse: function (value) {\n var that = this, options = that.options, min = getMilliseconds(options.min) != getMilliseconds(TODAY) ? options.min : null, max = getMilliseconds(options.max) != getMilliseconds(TODAY) ? options.max : null, current = that._value || min || max || TODAY;\n if (value instanceof DATE) {\n return value;\n }\n value = parse(value, options.parseFormats, options.culture);\n if (value) {\n value = new DATE(current.getFullYear(), current.getMonth(), current.getDate(), value.getHours(), value.getMinutes(), value.getSeconds(), value.getMilliseconds());\n }\n return value;\n },\n _adjustListWidth: function () {\n var list = this.list, width = list[0].style.width, wrapper = this.options.anchor, computedStyle, computedWidth, outerWidth = kendo._outerWidth;\n if (!list.data('width') && width) {\n return;\n }\n computedStyle = window.getComputedStyle ? window.getComputedStyle(wrapper[0], null) : 0;\n computedWidth = computedStyle ? parseFloat(computedStyle.width) : outerWidth(wrapper);\n if (computedStyle && (browser.mozilla || browser.msie)) {\n computedWidth += parseFloat(computedStyle.paddingLeft) + parseFloat(computedStyle.paddingRight) + parseFloat(computedStyle.borderLeftWidth) + parseFloat(computedStyle.borderRightWidth);\n }\n width = computedWidth - (outerWidth(list) - list.width());\n list.css({\n fontFamily: wrapper.css('font-family'),\n width: width\n }).data('width', width);\n },\n _popup: function () {\n var that = this, list = that.list, options = that.options, anchor = options.anchor;\n if (!this.options.omitPopup) {\n that.popup = new ui.Popup(list, extend(options.popup, {\n anchor: anchor,\n open: options.open,\n close: options.close,\n animation: options.animation,\n isRtl: support.isRtl(options.anchor),\n activate: function () {\n if (that.options.timeView && that.options.timeView.list === 'scroll') {\n that.addTranslate();\n if (that._value) {\n that.applyValue(that._value);\n } else {\n that._updateCurrentlySelected();\n }\n that._updateRanges();\n that._focusList(that.list.find('.k-time-list-wrapper:eq(0)'));\n }\n }\n }));\n } else {\n list.appendTo(options.timeDiv);\n }\n },\n move: function (e) {\n var that = this, key = e.keyCode, ul = that.ul[0], current = that._current, down = key === keys.DOWN;\n if (key === keys.UP || down) {\n if (e.altKey) {\n that.toggle(down);\n return;\n } else if (down) {\n current = current ? current[0].nextSibling : ul.firstChild;\n } else {\n current = current ? current[0].previousSibling : ul.lastChild;\n }\n if (current) {\n that.select(current);\n }\n that.options.change(that._current.text());\n e.preventDefault();\n } else if (key === keys.ENTER || key === keys.TAB || key === keys.ESC) {\n e.preventDefault();\n if (current) {\n that.options.change(current.text(), true);\n }\n that.close();\n }\n }\n };\n function dst() {\n var today = new DATE(), midnight = new DATE(today.getFullYear(), today.getMonth(), today.getDate(), 0, 0, 0), noon = new DATE(today.getFullYear(), today.getMonth(), today.getDate(), 12, 0, 0);\n return -1 * (midnight.getTimezoneOffset() - noon.getTimezoneOffset());\n }\n function getMilliseconds(date) {\n return date.getHours() * 60 * MS_PER_MINUTE + date.getMinutes() * MS_PER_MINUTE + date.getSeconds() * 1000 + date.getMilliseconds();\n }\n function lastTimeOption(interval) {\n var date = new Date(2100, 0, 1);\n date.setMinutes(-interval);\n return date;\n }\n function isInRange(value, min, max) {\n var msMin = getMilliseconds(min), msMax = getMilliseconds(max), msValue;\n if (!value || msMin == msMax) {\n return true;\n }\n msValue = getMilliseconds(value);\n if (msMin > msValue) {\n msValue += MS_PER_DAY;\n }\n if (msMax < msMin) {\n msMax += MS_PER_DAY;\n }\n return msValue >= msMin && msValue <= msMax;\n }\n TimeView.getMilliseconds = getMilliseconds;\n kendo.TimeView = TimeView;\n var TimePicker = Widget.extend({\n init: function (element, options) {\n var that = this, ul, timeView, disabled;\n options = options || {};\n options.componentType = options.componentType || 'classic';\n Widget.fn.init.call(that, element, options);\n element = that.element;\n options = that.options;\n options.min = parse(element.attr('min')) || parse(options.min);\n options.max = parse(element.attr('max')) || parse(options.max);\n if (+options.max != +TODAY || +options.min != +TODAY) {\n this._specifiedRange = true;\n }\n normalize(options);\n that._initialOptions = extend({}, options);\n that._wrapper();\n if (that.options.timeView && that.options.timeView.list === 'scroll') {\n that.options.height = null;\n }\n that.timeView = timeView = new TimeView(extend({}, options, {\n id: element.attr(ID),\n anchor: that.wrapper,\n format: options.format,\n change: function (value, trigger) {\n if (trigger) {\n that._change(value);\n } else {\n element.val(value);\n }\n },\n open: function (e) {\n if (that.options.timeView && that.options.timeView.list !== 'scroll') {\n that.timeView._adjustListWidth();\n } else {\n that.timeView._updateTitle();\n }\n if (that.trigger(OPEN)) {\n e.preventDefault();\n } else {\n element.attr(ARIA_EXPANDED, true);\n ul.attr(ARIA_HIDDEN, false);\n }\n },\n close: function (e) {\n if (that.trigger(CLOSE)) {\n e.preventDefault();\n } else {\n element.attr(ARIA_EXPANDED, false);\n ul.attr(ARIA_HIDDEN, true);\n }\n },\n active: function (current) {\n if (element && element.length) {\n element[0].removeAttribute(ARIA_ACTIVEDESCENDANT);\n }\n if (current) {\n element.attr(ARIA_ACTIVEDESCENDANT, timeView._optionID);\n }\n },\n specifiedRange: that._specifiedRange,\n maxSet: +options.max != +TODAY\n }));\n ul = timeView.ul;\n that._icon();\n that._reset();\n try {\n element[0].setAttribute('type', 'text');\n } catch (e) {\n element[0].type = 'text';\n }\n element.addClass('k-input').attr({\n 'role': 'combobox',\n 'aria-expanded': false,\n 'aria-owns': timeView._timeViewID,\n 'autocomplete': 'off'\n });\n disabled = element.is('[disabled]') || $(that.element).parents('fieldset').is(':disabled');\n if (disabled) {\n that.enable(false);\n } else {\n that.readonly(element.is('[readonly]'));\n }\n if (options.dateInput) {\n var min = options.min;\n var max = options.max;\n var today = new DATE();\n if (getMilliseconds(min) == getMilliseconds(max)) {\n min = new DATE(today.getFullYear(), today.getMonth(), today.getDate(), 0, 0, 0);\n max = new DATE(today.getFullYear(), today.getMonth(), today.getDate(), 24, 0, 0);\n }\n that._dateInput = new ui.DateInput(element, {\n culture: options.culture,\n format: options.format,\n min: min,\n max: max,\n value: options.value,\n interval: options.interval\n });\n }\n that._old = that._update(options.value || that.element.val());\n that._oldText = element.val();\n kendo.notify(that);\n },\n options: {\n name: 'TimePicker',\n min: TODAY,\n max: TODAY,\n format: '',\n dates: [],\n parseFormats: [],\n value: null,\n interval: 30,\n height: 200,\n animation: {},\n dateInput: false,\n messages: {\n set: 'Set',\n cancel: 'Cancel',\n hour: 'hour',\n minute: 'minute',\n second: 'second',\n millisecond: 'millisecond',\n now: 'Now'\n },\n componentType: 'classic'\n },\n events: [\n OPEN,\n CLOSE,\n CHANGE\n ],\n componentTypes: {\n 'classic': { timeView: { list: 'list' } },\n 'modern': { timeView: { list: 'scroll' } }\n },\n setOptions: function (options) {\n var that = this;\n var value = that._value;\n Widget.fn.setOptions.call(that, options);\n options = that.options;\n normalize(options);\n that.timeView.setOptions(options);\n if (value) {\n that.element.val(kendo.toString(value, options.format, options.culture));\n }\n },\n dataBind: function (dates) {\n if (isArray(dates)) {\n this.timeView.dataBind(dates);\n }\n },\n _editable: function (options) {\n var that = this, disable = options.disable, readonly = options.readonly, arrow = that._arrow.off(ns), element = that.element.off(ns), wrapper = that._inputWrapper.off(ns);\n if (that._dateInput) {\n that._dateInput._unbindInput();\n }\n if (!readonly && !disable) {\n wrapper.addClass(DEFAULT).removeClass(STATEDISABLED).on(HOVEREVENTS, that._toggleHover);\n if (element && element.length) {\n element[0].removeAttribute(DISABLED);\n element[0].removeAttribute(READONLY);\n }\n element.attr(ARIA_DISABLED, false).attr(ARIA_READONLY, false).on('keydown' + ns, proxy(that._keydown, that)).on('focusout' + ns, proxy(that._blur, that)).on('focus' + ns, function () {\n that._inputWrapper.addClass(FOCUSED);\n });\n if (that._dateInput) {\n that._dateInput._bindInput();\n }\n arrow.on(CLICK, proxy(that._click, that)).on(MOUSEDOWN, preventDefault);\n } else {\n wrapper.addClass(disable ? STATEDISABLED : DEFAULT).removeClass(disable ? DEFAULT : STATEDISABLED);\n element.attr(DISABLED, disable).attr(READONLY, readonly).attr(ARIA_DISABLED, disable).attr(ARIA_READONLY, readonly);\n }\n },\n readonly: function (readonly) {\n this._editable({\n readonly: readonly === undefined ? true : readonly,\n disable: false\n });\n },\n enable: function (enable) {\n this._editable({\n readonly: false,\n disable: !(enable = enable === undefined ? true : enable)\n });\n },\n destroy: function () {\n var that = this;\n Widget.fn.destroy.call(that);\n that.timeView.destroy();\n that.element.off(ns);\n that._arrow.off(ns);\n that._inputWrapper.off(ns);\n if (that._form) {\n that._form.off('reset', that._resetHandler);\n }\n },\n close: function () {\n this.timeView.close();\n },\n open: function () {\n this.timeView.open();\n },\n min: function (value) {\n return this._option('min', value);\n },\n max: function (value) {\n if (value && this.timeView) {\n this.timeView.options.maxSet = true;\n } else if (this.timeView) {\n this.timeView.options.maxSet = false;\n }\n return this._option('max', value);\n },\n value: function (value) {\n var that = this;\n if (value === undefined) {\n return that._value;\n }\n that._old = that._update(value);\n if (that._old === null) {\n that.element.val('');\n }\n that._oldText = that.element.val();\n },\n _blur: function () {\n var that = this, value = that.element.val();\n if (!(that.options.timeView && that.options.timeView.list === 'scroll')) {\n that.close();\n }\n if (value !== that._oldText) {\n that._change(value);\n }\n that._inputWrapper.removeClass(FOCUSED);\n },\n _click: function () {\n var that = this, element = that.element;\n that.timeView.toggle();\n if (!support.touch && element[0] !== activeElement()) {\n element.trigger('focus');\n }\n },\n _change: function (value) {\n var that = this, oldValue = that.element.val(), dateChanged;\n value = that._update(value);\n dateChanged = !kendo.calendar.isEqualDate(that._old, value);\n var valueUpdated = dateChanged && !that._typing;\n var textFormatted = oldValue !== that.element.val();\n if (valueUpdated || textFormatted) {\n that.element.trigger(CHANGE);\n }\n if (dateChanged) {\n that._old = value;\n that._oldText = that.element.val();\n that.trigger(CHANGE);\n }\n that._typing = false;\n },\n _icon: function () {\n var that = this, element = that.element, arrow;\n arrow = element.next('span.k-select');\n if (!arrow[0]) {\n arrow = $('<span unselectable=\"on\" class=\"k-select\" aria-label=\"select\"><span class=\"k-icon k-i-clock\"></span></span>').insertAfter(element);\n }\n that._arrow = arrow.attr({\n 'role': 'button',\n 'aria-controls': that.timeView._timeViewID\n });\n },\n _keydown: function (e) {\n var that = this, key = e.keyCode, timeView = that.timeView, value = that.element.val();\n if (timeView.popup.visible() || e.altKey) {\n timeView.move(e);\n if (that._dateInput && e.stopImmediatePropagation) {\n e.stopImmediatePropagation();\n }\n } else if (key === keys.ENTER && value !== that._oldText) {\n that._change(value);\n } else {\n that._typing = true;\n }\n },\n _option: function (option, value) {\n var that = this, options = that.options;\n if (value === undefined) {\n return options[option];\n }\n value = that.timeView._parse(value);\n if (!value) {\n return;\n }\n value = new DATE(+value);\n options[option] = value;\n that.timeView.options[option] = value;\n that.timeView.bind();\n },\n _toggleHover: function (e) {\n $(e.currentTarget).toggleClass(HOVER, e.type === 'mouseenter');\n },\n _update: function (value) {\n var that = this, options = that.options, timeView = that.timeView, date = timeView._parse(value);\n if (!isInRange(date, options.min, options.max)) {\n date = null;\n }\n that._value = date;\n that._currentlySelected = date;\n if (that._dateInput && date) {\n that._dateInput.value(date || value);\n } else {\n that.element.val(kendo.toString(date || value, options.format, options.culture));\n }\n timeView.value(date);\n return date;\n },\n _wrapper: function () {\n var that = this, element = that.element, wrapper;\n wrapper = element.parents('.k-timepicker');\n if (!wrapper[0]) {\n wrapper = element.wrap(SPAN).parent().addClass('k-picker-wrap k-state-default');\n wrapper = wrapper.wrap(SPAN).parent();\n }\n wrapper[0].style.cssText = element[0].style.cssText;\n that.wrapper = wrapper.addClass('k-widget k-timepicker').addClass(element[0].className);\n element.css({\n width: '100%',\n height: element[0].style.height\n });\n that._inputWrapper = $(wrapper[0].firstChild);\n },\n _reset: function () {\n var that = this, element = that.element, formId = element.attr('form'), form = formId ? $('#' + formId) : element.closest('form');\n if (form[0]) {\n that._resetHandler = function () {\n that.value(element[0].defaultValue);\n that.max(that._initialOptions.max);\n that.min(that._initialOptions.min);\n };\n that._form = form.on('reset', that._resetHandler);\n }\n }\n });\n function normalize(options) {\n var parseFormats = options.parseFormats;\n options.format = extractFormat(options.format || kendo.getCulture(options.culture).calendars.standard.patterns.t);\n parseFormats = isArray(parseFormats) ? parseFormats : [parseFormats];\n parseFormats.splice(0, 0, options.format);\n options.parseFormats = parseFormats;\n }\n function preventDefault(e) {\n e.preventDefault();\n }\n function mergeDateAndTime(date, time) {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate(), time.getHours(), time.getMinutes(), time.getSeconds(), time.getMilliseconds());\n }\n function datePattern(format, info) {\n var calendar = info.calendar;\n var result;\n if (typeof format === 'string') {\n if (calendar.patterns[format]) {\n result = calendar.patterns[format];\n } else {\n result = format;\n }\n }\n if (!result) {\n result = calendar.patterns.d;\n }\n return result;\n }\n function addLiteral(parts, value) {\n var lastPart = parts[parts.length - 1];\n if (lastPart && lastPart.type === 'LITERAL') {\n lastPart.pattern += value;\n } else {\n parts.push({\n type: LITERAL,\n pattern: value\n });\n }\n }\n function isHour12(pattern) {\n return pattern === 'h' || pattern === 'K';\n }\n function dateNameType(formatLength) {\n var nameType;\n if (formatLength <= 3) {\n nameType = 'abbreviated';\n } else if (formatLength === 4) {\n nameType = 'wide';\n } else if (formatLength === 5) {\n nameType = 'narrow';\n } else if (formatLength === 6) {\n nameType = 'short';\n }\n return nameType;\n }\n function startsWith(text, searchString, position) {\n position = position || 0;\n return text.indexOf(searchString, position) === position;\n }\n function includes(text, subStr) {\n var returnValue = false;\n if (text.indexOf(subStr) !== -1) {\n returnValue = true;\n }\n return returnValue;\n }\n function splitDateFormat(format) {\n var info = kendo.culture();\n var pattern = datePattern(format, info);\n var parts = [];\n var lastIndex = dateFormatRegExp.lastIndex = 0;\n var match = dateFormatRegExp.exec(pattern);\n var specifier;\n var type;\n var part;\n var names;\n var minLength;\n var patternLength;\n while (match) {\n var value = match[0];\n if (lastIndex < match.index) {\n addLiteral(parts, pattern.substring(lastIndex, match.index));\n }\n if (startsWith(value, '\"') || startsWith(value, '\\'')) {\n addLiteral(parts, value);\n } else {\n specifier = value[0];\n type = DATE_FIELD_MAP[specifier];\n part = {\n type: type,\n pattern: value\n };\n if (type === 'hour') {\n part.hour12 = isHour12(value);\n }\n names = NAME_TYPES[type];\n if (names) {\n minLength = typeof names.minLength === 'number' ? names.minLength : names.minLength[specifier];\n patternLength = value.length;\n if (patternLength >= minLength) {\n part.names = {\n type: names.type,\n nameType: dateNameType(patternLength),\n standAlone: names.standAlone === specifier\n };\n }\n }\n parts.push(part);\n }\n lastIndex = dateFormatRegExp.lastIndex;\n match = dateFormatRegExp.exec(pattern);\n }\n if (lastIndex < pattern.length) {\n addLiteral(parts, pattern.substring(lastIndex));\n }\n return parts;\n }\n function pad(value, size) {\n var s = String(value);\n while (s.length < (size || 2)) {\n s = '0' + s;\n }\n return s;\n }\n function firstItemIndex(scrollTop, itemHeight) {\n return Math.max(Math.round(scrollTop / itemHeight), 0);\n }\n function getItemHeight(item) {\n return item.length && item[0].getBoundingClientRect().height;\n }\n ui.plugin(TimePicker);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.datetimepicker', [\n 'kendo.datepicker',\n 'kendo.timepicker'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'datetimepicker',\n name: 'DateTimePicker',\n category: 'web',\n description: 'The DateTimePicker allows the end user to select a value from a calendar or a time drop-down list.',\n depends: [\n 'datepicker',\n 'timepicker'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, TimeView = kendo.TimeView, parse = kendo.parseDate, support = kendo.support, activeElement = kendo._activeElement, extractFormat = kendo._extractFormat, calendar = kendo.calendar, isInRange = calendar.isInRange, restrictValue = calendar.restrictValue, isEqualDatePart = calendar.isEqualDatePart, getMilliseconds = TimeView.getMilliseconds, ui = kendo.ui, Widget = ui.Widget, OPEN = 'open', CLOSE = 'close', CHANGE = 'change', ns = '.kendoDateTimePicker', CLICK = 'click' + ns, UP = support.mouseAndTouchPresent ? kendo.applyEventMap('up', ns.slice(1)) : CLICK, DISABLED = 'disabled', READONLY = 'readonly', DEFAULT = 'k-state-default', FOCUSED = 'k-state-focused', HOVER = 'k-state-hover', STATEDISABLED = 'k-state-disabled', HOVEREVENTS = 'mouseenter' + ns + ' mouseleave' + ns, MOUSEDOWN = 'mousedown' + ns, MONTH = 'month', SPAN = '<span/>', ARIA_ACTIVEDESCENDANT = 'aria-activedescendant', ARIA_EXPANDED = 'aria-expanded', ARIA_HIDDEN = 'aria-hidden', ARIA_OWNS = 'aria-owns', ARIA_DISABLED = 'aria-disabled', ARIA_READONLY = 'aria-readonly', DATE = Date, MIN = new DATE(1800, 0, 1), MAX = new DATE(2099, 11, 31), dateViewParams = { view: 'date' }, timeViewParams = { view: 'time' }, extend = $.extend, SINGLE_POPUP_TEMPLATE = '<div class=\"k-date-tab k-datetime-wrap\">' + '<div class=\"k-datetime-buttongroup\">' + '<div class=\"k-button-group k-button-group-stretched\">' + '<button class=\"k-button k-state-active k-group-start\">#=messages.date#</button>' + '<button class=\"k-button k-group-end\">#=messages.time#</button>' + '</div>' + '</div>' + '<div class=\"k-datetime-selector\">' + '<div class=\"k-datetime-calendar-wrap\">' + '</div>' + '<div class=\"k-datetime-time-wrap\">' + '</div>' + '</div>' + '<div class=\"k-datetime-footer k-action-buttons\">' + '<button class=\"k-button k-time-cancel\" title=\"Cancel\" aria-label=\"Cancel\">#=messages.cancel#</button>' + '<button class=\"k-time-accept k-button k-primary\" title=\"Set\" aria-label=\"Set\">#=messages.set#</button>' + '</div>' + '</div>', STATE_ACTIVE = 'k-state-active';\n var DateTimePicker = Widget.extend({\n init: function (element, options) {\n var that = this, disabled;\n options = options || {};\n options.componentType = options.componentType || 'classic';\n Widget.fn.init.call(that, element, options);\n element = that.element;\n options = that.options;\n options.disableDates = kendo.calendar.disabled(options.disableDates);\n options.min = parse(element.attr('min')) || parse(options.min);\n options.max = parse(element.attr('max')) || parse(options.max);\n if (+options.max != +MAX || +options.min != +MIN) {\n this._specifiedRange = true;\n }\n normalize(options);\n that._initialOptions = extend({}, options);\n that._wrapper();\n if (options.singlePopup) {\n that._popup();\n }\n that._views();\n that._icons();\n that._reset();\n that._template();\n try {\n element[0].setAttribute('type', 'text');\n } catch (e) {\n element[0].type = 'text';\n }\n element.addClass('k-input').attr({\n 'role': 'combobox',\n 'aria-expanded': false,\n 'autocomplete': 'off'\n });\n that._midnight = that._calculateMidnight(options.min, options.max);\n disabled = element.is('[disabled]') || $(that.element).parents('fieldset').is(':disabled');\n if (disabled) {\n that.enable(false);\n } else {\n that.readonly(element.is('[readonly]'));\n }\n that._createDateInput(options);\n that._old = that._update(options.value || that.element.val());\n that._oldText = element.val();\n kendo.notify(that);\n },\n options: {\n name: 'DateTimePicker',\n value: null,\n format: '',\n timeFormat: '',\n culture: '',\n parseFormats: [],\n dates: [],\n disableDates: null,\n min: new DATE(MIN),\n max: new DATE(MAX),\n interval: 30,\n height: 200,\n footer: '',\n start: MONTH,\n depth: MONTH,\n animation: {},\n month: {},\n ARIATemplate: 'Current focused date is #=kendo.toString(data.current, \"d\")#',\n dateButtonText: 'Open the date view',\n timeButtonText: 'Open the time view',\n dateInput: false,\n weekNumber: false,\n messages: {\n set: 'Set',\n cancel: 'Cancel',\n hour: 'hour',\n minute: 'minute',\n second: 'second',\n millisecond: 'millisecond',\n now: 'Now',\n date: 'Date',\n time: 'Time',\n today: 'Today'\n },\n componentType: 'classic'\n },\n events: [\n OPEN,\n CLOSE,\n CHANGE\n ],\n componentTypes: {\n 'classic': {\n singlePopup: false,\n timeView: { list: 'list' }\n },\n 'modern': {\n singlePopup: true,\n timeView: { list: 'scroll' }\n }\n },\n setOptions: function (options) {\n var that = this, value = that._value, min, max, currentValue;\n Widget.fn.setOptions.call(that, options);\n options = that.options;\n options.min = min = parse(options.min);\n options.max = max = parse(options.max);\n normalize(options);\n that._midnight = that._calculateMidnight(options.min, options.max);\n currentValue = options.value || that._value || that.dateView._current;\n if (min && !isEqualDatePart(min, currentValue)) {\n min = new DATE(MIN);\n }\n if (max && !isEqualDatePart(max, currentValue)) {\n max = new DATE(MAX);\n }\n that.dateView.setOptions(options);\n that.timeView.setOptions(extend({}, options, {\n format: options.timeFormat,\n min: min,\n max: max\n }));\n that._createDateInput(options);\n if (!that._dateInput) {\n that.element.val(kendo.toString(value, options.format, options.culture));\n }\n if (value) {\n that._updateARIA(value);\n }\n },\n _editable: function (options) {\n var that = this, element = that.element.off(ns), dateIcon = that._dateIcon.off(ns), timeIcon = that._timeIcon.off(ns), wrapper = that._inputWrapper.off(ns), readonly = options.readonly, disable = options.disable;\n if (!readonly && !disable) {\n wrapper.addClass(DEFAULT).removeClass(STATEDISABLED).on(HOVEREVENTS, that._toggleHover);\n if (element && element.length) {\n element[0].removeAttribute(DISABLED);\n element[0].removeAttribute(READONLY, false);\n element[0].removeAttribute(ARIA_DISABLED, false);\n element[0].removeAttribute(ARIA_READONLY, false);\n }\n element.on('keydown' + ns, $.proxy(that._keydown, that)).on('focus' + ns, function () {\n that._inputWrapper.addClass(FOCUSED);\n }).on('focusout' + ns, function () {\n that._inputWrapper.removeClass(FOCUSED);\n if (element.val() !== that._oldText) {\n that._change(element.val());\n if (!element.val()) {\n that.dateView.current(kendo.calendar.getToday());\n }\n }\n if (that.options.singlePopup) {\n return;\n }\n that.close('date');\n that.close('time');\n });\n dateIcon.on(MOUSEDOWN, preventDefault).on(UP, function (e) {\n that.toggle('date');\n that._focusElement(e.type);\n });\n timeIcon.on(MOUSEDOWN, preventDefault).on(UP, function (e) {\n that.toggle('time');\n that._focusElement(e.type);\n });\n } else {\n wrapper.addClass(disable ? STATEDISABLED : DEFAULT).removeClass(disable ? DEFAULT : STATEDISABLED);\n element.attr(DISABLED, disable).attr(READONLY, readonly).attr(ARIA_DISABLED, disable).attr(ARIA_READONLY, readonly);\n }\n },\n _focusElement: function (eventType) {\n var element = this.element;\n if ((!support.touch || support.mouseAndTouchPresent && !(eventType || '').match(/touch/i)) && element[0] !== activeElement()) {\n element.trigger('focus');\n }\n },\n readonly: function (readonly) {\n this._editable({\n readonly: readonly === undefined ? true : readonly,\n disable: false\n });\n },\n enable: function (enable) {\n this._editable({\n readonly: false,\n disable: !(enable = enable === undefined ? true : enable)\n });\n },\n destroy: function () {\n var that = this;\n Widget.fn.destroy.call(that);\n that.dateView.destroy();\n that.timeView.destroy();\n if (that.options.singlePopup) {\n that.popup.element.off(ns);\n that.popup.destroy();\n }\n that.element.off(ns);\n that._dateIcon.off(ns);\n that._timeIcon.off(ns);\n that._inputWrapper.off(ns);\n if (that._form) {\n that._form.off('reset', that._resetHandler);\n }\n },\n close: function (view) {\n if (this.options.singlePopup) {\n this.popup.close();\n } else {\n if (view !== 'time') {\n view = 'date';\n }\n this[view + 'View'].close();\n }\n },\n open: function (view) {\n var that = this;\n var popupHovered;\n if (that.options.singlePopup) {\n that.dateView._calendar();\n if (that.timeView.ul.find('li').length < 1) {\n that.timeView.bind();\n }\n popupHovered = that.popup._hovered;\n that.popup._hovered = true;\n that.popup.open();\n if (view === 'time') {\n that._switchToTimeView();\n } else {\n that._switchToDateView();\n }\n this._dateIcon.toggle(view !== 'time');\n this._timeIcon.toggle(view === 'time');\n setTimeout(function () {\n that.popup._hovered = popupHovered;\n }, 1);\n } else {\n if (view !== 'time') {\n view = 'date';\n }\n this[view + 'View'].open();\n }\n },\n min: function (value) {\n return this._option('min', value);\n },\n max: function (value) {\n return this._option('max', value);\n },\n toggle: function (view) {\n if (this.options.singlePopup) {\n if (this.popup.visible()) {\n this.close();\n } else {\n this.open(view);\n }\n } else {\n var secondView = 'timeView';\n if (view !== 'time') {\n view = 'date';\n } else {\n secondView = 'dateView';\n }\n this[view + 'View'].toggle();\n this[secondView].close();\n }\n },\n value: function (value) {\n var that = this;\n if (value === undefined) {\n return that._value;\n }\n that._old = that._update(value);\n if (that._old === null) {\n that.element.val('');\n }\n that._oldText = that.element.val();\n },\n _change: function (value) {\n var that = this, oldValue = that.element.val(), dateChanged;\n value = that._update(value);\n dateChanged = +that._old != +value;\n var valueUpdated = dateChanged && !that._typing;\n var textFormatted = oldValue !== that.element.val();\n if (valueUpdated || textFormatted) {\n that.element.trigger(CHANGE);\n }\n if (dateChanged) {\n that._old = value;\n that._oldText = that.element.val();\n that.trigger(CHANGE);\n }\n that._typing = false;\n },\n _option: function (option, value) {\n var that = this;\n var options = that.options;\n var timeView = that.timeView;\n var timeViewOptions = timeView.options;\n var current = that._value || that._old;\n var minDateEqual;\n var maxDateEqual;\n if (value === undefined) {\n return options[option];\n }\n value = parse(value, options.parseFormats, options.culture);\n timeViewOptions.maxSet = false;\n if (!value) {\n return;\n }\n if (options.min.getTime() === options.max.getTime()) {\n timeViewOptions.dates = [];\n }\n options[option] = new DATE(value.getTime());\n that.dateView[option](value);\n that._midnight = that._calculateMidnight(options.min, options.max);\n if (current) {\n minDateEqual = isEqualDatePart(options.min, current);\n maxDateEqual = isEqualDatePart(options.max, current);\n }\n if (minDateEqual || maxDateEqual) {\n timeViewOptions[option] = value;\n if (minDateEqual && !maxDateEqual) {\n timeViewOptions.max = lastTimeOption(options.interval);\n }\n if (maxDateEqual) {\n if (that._midnight) {\n timeView.dataBind([MAX]);\n return;\n } else if (!minDateEqual) {\n timeViewOptions.min = MIN;\n timeViewOptions.maxSet = true;\n }\n }\n } else {\n timeViewOptions.max = MAX;\n timeViewOptions.min = MIN;\n }\n timeView.bind();\n },\n _toggleHover: function (e) {\n $(e.currentTarget).toggleClass(HOVER, e.type === 'mouseenter');\n },\n _update: function (value) {\n var that = this, options = that.options, min = options.min, max = options.max, dates = options.dates, timeView = that.timeView, current = that._value, date = parse(value, options.parseFormats, options.culture), isSameType = date === null && current === null || date instanceof Date && current instanceof Date, rebind, timeViewOptions, old, skip, formattedValue;\n if (options.disableDates && options.disableDates(date)) {\n date = null;\n if (!that._old && !that.element.val()) {\n value = null;\n }\n }\n if (+date === +current && isSameType) {\n formattedValue = kendo.toString(date, options.format, options.culture);\n if (formattedValue !== value) {\n that.element.val(date === null ? value : formattedValue);\n if (value instanceof String) {\n that.element.trigger(CHANGE);\n }\n }\n return date;\n }\n if (date !== null && isEqualDatePart(date, min)) {\n date = restrictValue(date, min, max);\n } else if (!isInRange(date, min, max)) {\n date = null;\n }\n that._value = date;\n timeView.value(date);\n that.dateView.value(date);\n if (date) {\n old = that._old;\n timeViewOptions = timeView.options;\n timeViewOptions.maxSet = false;\n if (dates[0]) {\n dates = $.grep(dates, function (d) {\n return isEqualDatePart(date, d);\n });\n if (dates[0]) {\n timeView.dataBind(dates);\n skip = true;\n }\n }\n if (!skip) {\n if (isEqualDatePart(date, min)) {\n timeViewOptions.min = min;\n timeViewOptions.max = lastTimeOption(options.interval);\n rebind = true;\n }\n if (isEqualDatePart(date, max)) {\n if (that._midnight) {\n timeView.dataBind([MAX]);\n skip = true;\n } else {\n timeViewOptions.max = max;\n timeViewOptions.maxSet = true;\n if (!rebind) {\n timeViewOptions.min = MIN;\n }\n rebind = true;\n }\n }\n }\n if (!skip && (!old && rebind || old && !isEqualDatePart(old, date))) {\n if (!rebind) {\n timeViewOptions.max = MAX;\n timeViewOptions.min = MIN;\n }\n timeView.bind();\n }\n }\n if (that._dateInput && date) {\n that._dateInput.value(date || value);\n } else {\n that.element.val(kendo.toString(date || value, options.format, options.culture));\n }\n that._updateARIA(date);\n return date;\n },\n _keydown: function (e) {\n var that = this, dateView = that.dateView, timeView = that.timeView, value = that.element.val(), isDateViewVisible = that.options.singlePopup ? that.popup.visible() : dateView.popup.visible();\n var stopPropagation = that._dateInput && e.stopImmediatePropagation;\n if (e.altKey && e.keyCode === kendo.keys.DOWN) {\n that.toggle(isDateViewVisible ? 'time' : 'date');\n } else if (isDateViewVisible) {\n dateView.move(e);\n that._updateARIA(dateView._current);\n } else if (!that.options.singlePopup && timeView.popup.visible()) {\n timeView.move(e);\n } else if (e.keyCode === kendo.keys.ENTER && value !== that._oldText) {\n that._change(value);\n } else {\n that._typing = true;\n stopPropagation = false;\n }\n if (stopPropagation) {\n e.stopImmediatePropagation();\n }\n },\n _views: function () {\n var that = this, element = that.element, options = that.options, id = element.attr('id'), dateView, timeView, div, ul, msMin, date, timeDiv, omitPopup, timeViewOptions;\n if (options.singlePopup) {\n options.dateDiv = that.popup.element.find('.k-datetime-calendar-wrap');\n timeDiv = that.popup.element.find('.k-datetime-time-wrap');\n options.omitPopup = omitPopup = true;\n timeViewOptions = options.timeView;\n }\n that.dateView = dateView = new kendo.DateView(extend({}, options, {\n id: id,\n anchor: that.wrapper,\n change: function () {\n var value = that._applyDateValue();\n if (options.singlePopup) {\n if (!that.timeView._currentlySelected) {\n that.timeView._currentlySelected = new Date();\n }\n that.timeView._currentlySelected.setFullYear(value.getFullYear());\n that.timeView._currentlySelected.setMonth(value.getMonth());\n that.timeView._currentlySelected.setDate(value.getDate());\n that._switchToTimeView();\n that._toggleIcons();\n } else {\n that._change(value);\n that.close('date');\n }\n },\n close: function (e) {\n if (that.trigger(CLOSE, dateViewParams)) {\n e.preventDefault();\n } else {\n element.attr(ARIA_EXPANDED, false);\n div.attr(ARIA_HIDDEN, true);\n if (!that.options.singlePopup && !timeView.popup.visible()) {\n if (element && element.length) {\n element[0].removeAttribute(ARIA_OWNS);\n }\n }\n }\n },\n open: function (e) {\n if (that.trigger(OPEN, dateViewParams)) {\n e.preventDefault();\n } else {\n if (element.val() !== that._oldText) {\n date = parse(element.val(), options.parseFormats, options.culture);\n that.dateView[date ? 'current' : 'value'](date);\n }\n div.attr(ARIA_HIDDEN, false);\n element.attr(ARIA_EXPANDED, true).attr(ARIA_OWNS, dateView._dateViewID);\n that._updateARIA(date);\n }\n }\n }));\n div = dateView.div;\n msMin = options.min.getTime();\n that.timeView = timeView = new TimeView({\n id: id,\n value: options.value,\n anchor: that.wrapper,\n animation: options.animation,\n format: options.timeFormat,\n culture: options.culture,\n height: options.componentType === 'modern' ? null : options.height,\n interval: options.interval,\n min: options.componentType === 'modern' ? options.min : new DATE(MIN),\n max: options.componentType === 'modern' ? options.max : new DATE(MAX),\n dates: msMin === options.max.getTime() ? [new Date(msMin)] : [],\n parseFormats: options.parseFormats,\n validateDate: true,\n change: function (value, trigger) {\n value = that._applyTimeValue(value);\n if (trigger) {\n that._timeSelected = true;\n that._change(value);\n } else {\n element.val(kendo.toString(value, options.format, options.culture));\n dateView.value(value);\n that._updateARIA(value);\n }\n },\n close: function (e) {\n if (that.trigger(CLOSE, timeViewParams)) {\n e.preventDefault();\n } else {\n ul.attr(ARIA_HIDDEN, true);\n element.attr(ARIA_EXPANDED, false);\n if (!dateView.popup.visible()) {\n if (element && element.length) {\n element[0].removeAttribute(ARIA_OWNS);\n }\n }\n }\n },\n open: function (e) {\n if (that.options.componentType !== 'modern') {\n timeView._adjustListWidth();\n } else {\n that.timeView._updateTitle();\n }\n if (that.trigger(OPEN, timeViewParams)) {\n e.preventDefault();\n } else {\n if (element.val() !== that._oldText) {\n date = parse(element.val(), options.parseFormats, options.culture);\n that.timeView.value(date);\n }\n ul.attr(ARIA_HIDDEN, false);\n element.attr(ARIA_EXPANDED, true).attr(ARIA_OWNS, timeView._timeViewID);\n timeView.options.active(timeView.current());\n }\n },\n active: function (current) {\n if (element && element.length) {\n element[0].removeAttribute(ARIA_ACTIVEDESCENDANT);\n }\n if (current) {\n element.attr(ARIA_ACTIVEDESCENDANT, timeView._optionID);\n }\n },\n popup: options.popup,\n useValueToRender: true,\n specifiedRange: that._specifiedRange,\n omitPopup: omitPopup,\n timeDiv: timeDiv,\n timeView: timeViewOptions,\n messages: that.options.messages\n });\n ul = timeView.ul;\n },\n _applyDateValue: function () {\n var that = this;\n var options = that.options;\n var dateView = that.dateView;\n var value = dateView.calendar.value();\n var msValue = +value;\n var msMin = +options.min;\n var msMax = +options.max;\n var current, adjustedDate;\n if (msValue === msMin || msValue === msMax) {\n current = msValue === msMin ? msMin : msMax;\n current = new DATE(that._value || current);\n current.setFullYear(value.getFullYear(), value.getMonth(), value.getDate());\n if (isInRange(current, msMin, msMax)) {\n value = current;\n }\n }\n if (that._value) {\n adjustedDate = kendo.date.setHours(new Date(value), that._value);\n if (isInRange(adjustedDate, msMin, msMax)) {\n value = adjustedDate;\n }\n }\n return value;\n },\n _applyTimeValue: function (value) {\n var timeView = this.timeView;\n var options = this.options;\n value = timeView._parse(value);\n if (value < options.min) {\n value = new DATE(+options.min);\n timeView.options.min = value;\n } else if (value > options.max) {\n value = new DATE(+options.max);\n timeView.options.max = value;\n }\n return value;\n },\n _icons: function () {\n var that = this;\n var element = that.element;\n var options = that.options;\n var icons;\n icons = element.next('span.k-select');\n if (!icons[0]) {\n icons = $('<span unselectable=\"on\" class=\"k-select\">' + '<span class=\"k-link k-link-date\" aria-label=\"' + options.dateButtonText + '\"><span unselectable=\"on\" class=\"k-icon k-i-calendar\"></span></span>' + '<span class=\"k-link k-link-time\" aria-label=\"' + options.timeButtonText + '\"><span unselectable=\"on\" class=\"k-icon k-i-clock\"></span></span>' + '</span>').insertAfter(element);\n }\n icons = icons.children();\n that._dateIcon = icons.eq(0).attr('aria-controls', that.dateView._dateViewID);\n that._timeIcon = icons.eq(1).attr('aria-controls', that.timeView._timeViewID);\n if (options.singlePopup) {\n that._timeIcon.hide();\n }\n },\n _wrapper: function () {\n var that = this, element = that.element, wrapper;\n wrapper = element.parents('.k-datetimepicker');\n if (!wrapper[0]) {\n wrapper = element.wrap(SPAN).parent().addClass('k-picker-wrap k-state-default');\n wrapper = wrapper.wrap(SPAN).parent();\n }\n wrapper[0].style.cssText = element[0].style.cssText;\n element.css({\n width: '100%',\n height: element[0].style.height\n });\n that.wrapper = wrapper.addClass('k-widget k-datetimepicker').addClass(element[0].className).removeClass('input-validation-error');\n that._inputWrapper = $(wrapper[0].firstChild);\n },\n _reset: function () {\n var that = this, element = that.element, formId = element.attr('form'), form = formId ? $('#' + formId) : element.closest('form'), options = that.options, disabledDate = options.disableDates, parseFormats = options.parseFormats.length ? options.parseFormats : null, optionsValue = that._initialOptions.value, initialValue = element[0].defaultValue;\n if (optionsValue && (disabledDate && disabledDate(optionsValue))) {\n optionsValue = null;\n }\n if ((!initialValue || !kendo.parseDate(initialValue, parseFormats, options.culture)) && optionsValue) {\n element.attr('value', kendo.toString(optionsValue, options.format, options.culture));\n }\n if (form[0]) {\n that._resetHandler = function () {\n that.value(optionsValue || element[0].defaultValue);\n that.max(that._initialOptions.max);\n that.min(that._initialOptions.min);\n };\n that._form = form.on('reset', that._resetHandler);\n }\n },\n _template: function () {\n this._ariaTemplate = kendo.template(this.options.ARIATemplate);\n },\n _createDateInput: function (options) {\n if (this._dateInput) {\n this._dateInput.destroy();\n this._dateInput = null;\n }\n if (options.dateInput) {\n this._dateInput = new ui.DateInput(this.element, {\n culture: options.culture,\n format: options.format,\n min: options.min,\n max: options.max,\n interval: options.interval\n });\n }\n },\n _calculateMidnight: function (min, max) {\n return getMilliseconds(min) + getMilliseconds(max) === 0;\n },\n _updateARIA: function (date) {\n var cell;\n var that = this;\n var calendar = that.dateView.calendar;\n if (that.element && that.element.length) {\n that.element[0].removeAttribute(ARIA_ACTIVEDESCENDANT);\n }\n if (calendar) {\n cell = calendar._cell;\n cell.attr('aria-label', that._ariaTemplate({ current: date || calendar.current() }));\n that.element.attr(ARIA_ACTIVEDESCENDANT, cell.attr('id'));\n }\n },\n _popup: function () {\n var that = this;\n var options = that.options;\n var div = $('<div></div>').attr(ARIA_HIDDEN, 'true').addClass('k-datetime-container k-group k-reset').appendTo(document.body);\n div.append(kendo.template(SINGLE_POPUP_TEMPLATE)(that.options));\n that.popup = new ui.Popup(div, extend(options.popup, options, {\n name: 'Popup',\n isRtl: kendo.support.isRtl(that.wrapper),\n anchor: that.wrapper,\n activate: function () {\n if (that.options.timeView && that.options.timeView.list === 'scroll') {\n that.timeView.addTranslate();\n that.timeView.applyValue(that._value);\n that.timeView._updateRanges();\n }\n },\n open: function () {\n that.timeView._updateTitle();\n }\n }));\n div.on(CLICK + ns, '.k-datetime-buttongroup .k-button', $.proxy(that._groupChangeClick, that));\n div.on(CLICK + ns, '.k-datetime-footer button.k-time-cancel', $.proxy(that._cancelClickHandler, that));\n div.on(CLICK + ns, '.k-datetime-footer button.k-time-accept', $.proxy(that._setClickHandler, that));\n },\n _groupChangeClick: function (e) {\n preventDefault(e);\n var button = $(e.currentTarget);\n var index = button.index();\n if (index) {\n this._switchToTimeView();\n } else {\n this._switchToDateView();\n }\n this._toggleIcons();\n },\n _switchToDateView: function () {\n this.popup.element.find('.k-group-start, .k-group-end').removeClass(STATE_ACTIVE).eq(0).addClass(STATE_ACTIVE);\n this.popup.element.find('.k-datetime-wrap').removeClass('k-time-tab').addClass('k-date-tab');\n },\n _switchToTimeView: function () {\n this.timeView._updateRanges();\n this.popup.element.find('.k-group-start, .k-group-end').removeClass(STATE_ACTIVE).eq(1).addClass(STATE_ACTIVE);\n this.popup.element.find('.k-datetime-wrap').removeClass('k-date-tab').addClass('k-time-tab');\n },\n _toggleIcons: function () {\n this._dateIcon.toggle();\n this._timeIcon.toggle();\n },\n _cancelClickHandler: function () {\n if (this._value) {\n this.value(this._value);\n this.dateView.value(this._value);\n }\n this.popup.close();\n },\n _setClickHandler: function () {\n var value = this._applyDateValue();\n var time = this.timeView._currentlySelected || new Date();\n value = value || new Date();\n this.timeView._updateCurrentlySelected();\n value.setHours(time.getHours());\n value.setMinutes(time.getMinutes());\n value.setSeconds(time.getSeconds());\n value = this._applyTimeValue(value);\n this._change(value);\n this.popup.close();\n }\n });\n function lastTimeOption(interval) {\n var date = new Date(2100, 0, 1);\n date.setMinutes(-interval);\n return date;\n }\n function preventDefault(e) {\n e.preventDefault();\n }\n function normalize(options) {\n var patterns = kendo.getCulture(options.culture).calendars.standard.patterns, parseFormats = !options.parseFormats.length, timeFormat;\n options.format = extractFormat(options.format || patterns.g);\n options.timeFormat = timeFormat = extractFormat(options.timeFormat || patterns.t);\n kendo.DateView.normalize(options);\n if (parseFormats) {\n options.parseFormats.unshift('yyyy-MM-ddTHH:mm:ss');\n }\n if ($.inArray(timeFormat, options.parseFormats) === -1) {\n options.parseFormats.push(timeFormat);\n }\n }\n ui.plugin(DateTimePicker);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.splitter', ['kendo.resizable'], f);\n}(function () {\n var __meta__ = {\n id: 'splitter',\n name: 'Splitter',\n category: 'web',\n description: 'The Splitter widget provides an easy way to create a dynamic layout of resizable and collapsible panes.',\n depends: ['resizable']\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, keys = kendo.keys, extend = $.extend, proxy = $.proxy, Widget = ui.Widget, pxUnitsRegex = /^\\d+(\\.\\d+)?px$/i, percentageUnitsRegex = /^\\d+(\\.\\d+)?%$/i, NS = '.kendoSplitter', EXPAND = 'expand', COLLAPSE = 'collapse', CONTENTLOAD = 'contentLoad', ERROR = 'error', RESIZE = 'resize', LAYOUTCHANGE = 'layoutChange', HORIZONTAL = 'horizontal', VERTICAL = 'vertical', MOUSEENTER = 'mouseenter', CLICK = 'click', PANE = 'pane', MOUSELEAVE = 'mouseleave', FOCUSED = 'k-state-focused', KPANE = 'k-' + PANE, PANECLASS = '.' + KPANE;\n function isPercentageSize(size) {\n return percentageUnitsRegex.test(size);\n }\n function isPixelSize(size) {\n return pxUnitsRegex.test(size) || /^\\d+$/.test(size);\n }\n function isFluid(size) {\n return !isPercentageSize(size) && !isPixelSize(size);\n }\n function calculateSize(size, total) {\n var output = parseInt(size, 10);\n if (isPercentageSize(size)) {\n output = Math.floor(output * total / 100);\n }\n return output;\n }\n function panePropertyAccessor(propertyName, triggersResize) {\n return function (pane, value) {\n var paneConfig = this.element.find(pane).data(PANE);\n if (arguments.length == 1) {\n return paneConfig[propertyName];\n }\n paneConfig[propertyName] = value;\n if (triggersResize) {\n var splitter = this.element.data('kendo' + this.options.name);\n splitter.resize(true);\n }\n };\n }\n var Splitter = Widget.extend({\n init: function (element, options) {\n var that = this, isHorizontal;\n Widget.fn.init.call(that, element, options);\n that.wrapper = that.element;\n if (that.options.orientation) {\n isHorizontal = that.options.orientation.toLowerCase() != VERTICAL;\n }\n that.orientation = isHorizontal ? HORIZONTAL : VERTICAL;\n that._dimension = isHorizontal ? 'width' : 'height';\n that._keys = {\n decrease: isHorizontal ? keys.LEFT : keys.UP,\n increase: isHorizontal ? keys.RIGHT : keys.DOWN\n };\n that._resizeStep = 10;\n that._marker = kendo.guid().substring(0, 8);\n that._initPanes();\n that.resizing = new PaneResizing(that);\n that.element.triggerHandler('init' + NS);\n },\n events: [\n EXPAND,\n COLLAPSE,\n CONTENTLOAD,\n ERROR,\n RESIZE,\n LAYOUTCHANGE\n ],\n _addOverlays: function () {\n this._panes().append('<div class=\\'k-splitter-overlay k-overlay\\' />');\n },\n _removeOverlays: function () {\n this._panes().children('.k-splitter-overlay').remove();\n },\n _attachEvents: function () {\n var that = this, orientation = that.options.orientation;\n that.element.children('.k-splitbar-draggable-' + orientation).on('keydown' + NS, proxy(that._keydown, that)).on('mousedown' + NS, function (e) {\n e.currentTarget.focus();\n }).on('focus' + NS, function (e) {\n $(e.currentTarget).addClass(FOCUSED);\n }).on('blur' + NS, function (e) {\n $(e.currentTarget).removeClass(FOCUSED);\n if (that.resizing) {\n that.resizing.end();\n }\n }).on(MOUSEENTER + NS, function () {\n $(this).addClass('k-splitbar-' + that.orientation + '-hover');\n }).on(MOUSELEAVE + NS, function () {\n $(this).removeClass('k-splitbar-' + that.orientation + '-hover');\n }).on('mousedown' + NS, proxy(that._addOverlays, that)).end().children('.k-splitbar').on('dblclick' + NS, proxy(that._togglePane, that)).children('.k-collapse-next, .k-collapse-prev').on(CLICK + NS, that._arrowClick(COLLAPSE)).end().children('.k-expand-next, .k-expand-prev').on(CLICK + NS, that._arrowClick(EXPAND)).end().end();\n $(window).on('resize' + NS + that._marker, proxy(that.resize, that, false));\n $(document).on('mouseup' + NS + that._marker, proxy(that._removeOverlays, that));\n },\n _detachEvents: function () {\n var that = this;\n that.element.children('.k-splitbar-draggable-' + that.orientation).off(NS).end().children('.k-splitbar').off('dblclick' + NS).children('.k-collapse-next, .k-collapse-prev, .k-expand-next, .k-expand-prev').off(NS);\n $(window).off(NS + that._marker);\n $(document).off(NS + that._marker);\n },\n options: {\n name: 'Splitter',\n orientation: HORIZONTAL,\n panes: []\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this._detachEvents();\n if (this.resizing) {\n this.resizing.destroy();\n }\n kendo.destroy(this.element);\n this.wrapper = this.element = null;\n },\n _keydown: function (e) {\n var that = this, key = e.keyCode, resizing = that.resizing, target = $(e.currentTarget), navigationKeys = that._keys, increase = key === navigationKeys.increase, decrease = key === navigationKeys.decrease, pane;\n if (increase || decrease) {\n if (e.ctrlKey) {\n pane = target[decrease ? 'next' : 'prev']();\n if (resizing && resizing.isResizing()) {\n resizing.end();\n }\n if (!pane[that._dimension]()) {\n that._triggerAction(EXPAND, pane);\n } else {\n that._triggerAction(COLLAPSE, target[decrease ? 'prev' : 'next']());\n }\n } else if (resizing) {\n resizing.move((decrease ? -1 : 1) * that._resizeStep, target);\n }\n e.preventDefault();\n } else if (key === keys.HOME) {\n resizing.move(-resizing._maxPosition, target);\n e.preventDefault();\n } else if (key === keys.END) {\n resizing.move(resizing._maxPosition, target);\n e.preventDefault();\n } else if (key === keys.ENTER && resizing) {\n resizing.end();\n e.preventDefault();\n }\n },\n _initPanes: function () {\n var panesConfig = this.options.panes || [];\n var that = this;\n this.element.addClass('k-widget').addClass('k-splitter').children().each(function (i, pane) {\n if (pane.nodeName.toLowerCase() != 'script') {\n that._initPane(pane, panesConfig[i]);\n }\n });\n this.resize();\n },\n _initPane: function (pane, config) {\n pane = $(pane).attr('role', 'group').addClass(KPANE);\n pane.data(PANE, config ? config : {}).toggleClass('k-scrollable', config ? config.scrollable !== false : true);\n this.ajaxRequest(pane);\n },\n ajaxRequest: function (pane, url, data) {\n var that = this, paneConfig;\n pane = that.element.find(pane);\n paneConfig = pane.data(PANE);\n url = url || paneConfig.contentUrl;\n if (url) {\n pane.append('<span class=\\'k-icon k-i-loading k-pane-loading\\' />');\n if (kendo.isLocalUrl(url)) {\n jQuery.ajax({\n url: url,\n data: data || {},\n type: 'GET',\n dataType: 'html',\n success: function (data) {\n that.angular('cleanup', function () {\n return { elements: pane.get() };\n });\n pane.html(data);\n that.angular('compile', function () {\n return { elements: pane.get() };\n });\n that.trigger(CONTENTLOAD, { pane: pane[0] });\n },\n error: function (xhr, status) {\n that.trigger(ERROR, {\n pane: pane[0],\n status: status,\n xhr: xhr\n });\n }\n });\n } else {\n pane.removeClass('k-scrollable').html('<iframe src=\\'' + url + '\\' frameborder=\\'0\\' class=\\'k-content-frame\\'>' + 'This page requires frames in order to show content' + '</iframe>');\n }\n }\n },\n _triggerAction: function (type, pane) {\n if (!this.trigger(type, { pane: pane[0] })) {\n this[type](pane[0]);\n }\n },\n _togglePane: function (e) {\n var that = this, target = $(e.target), arrow;\n if (target.closest('.k-splitter')[0] != that.element[0]) {\n return;\n }\n arrow = target.children('.k-icon:not(.k-resize-handle)');\n if (arrow.length !== 1) {\n return;\n }\n if (arrow.is('.k-collapse-prev')) {\n that._triggerAction(COLLAPSE, target.prev());\n } else if (arrow.is('.k-collapse-next')) {\n that._triggerAction(COLLAPSE, target.next());\n } else if (arrow.is('.k-expand-prev')) {\n that._triggerAction(EXPAND, target.prev());\n } else if (arrow.is('.k-expand-next')) {\n that._triggerAction(EXPAND, target.next());\n }\n },\n _arrowClick: function (arrowType) {\n var that = this;\n return function (e) {\n var target = $(e.target), pane;\n if (target.closest('.k-splitter')[0] != that.element[0]) {\n return;\n }\n if (target.is('.k-' + arrowType + '-prev')) {\n pane = target.parent().prev();\n } else {\n pane = target.parent().next();\n }\n that._triggerAction(arrowType, pane);\n };\n },\n _updateSplitBar: function (splitbar, previousPane, nextPane) {\n var catIconIf = function (iconType, condition) {\n return condition ? '<div class=\\'k-icon ' + iconType + '\\'></div>' : '';\n }, orientation = this.orientation, draggable = previousPane.resizable !== false && nextPane.resizable !== false, prevCollapsible = previousPane.collapsible, prevCollapsed = previousPane.collapsed, nextCollapsible = nextPane.collapsible, nextCollapsed = nextPane.collapsed;\n splitbar.addClass('k-splitbar k-state-default k-splitbar-' + orientation).attr('role', 'separator').attr('aria-expanded', !(prevCollapsed || nextCollapsed)).removeClass('k-splitbar-' + orientation + '-hover').toggleClass('k-splitbar-draggable-' + orientation, draggable && !prevCollapsed && !nextCollapsed).toggleClass('k-splitbar-static-' + orientation, !draggable && !prevCollapsible && !nextCollapsible).html(catIconIf('k-collapse-prev k-i-arrow-60-up', prevCollapsible && !prevCollapsed && !nextCollapsed && orientation == VERTICAL) + catIconIf('k-collapse-prev k-i-arrow-60-left', prevCollapsible && !prevCollapsed && !nextCollapsed && orientation == HORIZONTAL) + catIconIf('k-expand-prev k-i-arrow-60-down', prevCollapsible && prevCollapsed && !nextCollapsed && orientation == VERTICAL) + catIconIf('k-expand-prev k-i-arrow-60-right', prevCollapsible && prevCollapsed && !nextCollapsed && orientation == HORIZONTAL) + catIconIf('k-resize-handle k-i-hbar', draggable && orientation == VERTICAL) + catIconIf('k-resize-handle k-i-vbar', draggable && orientation == HORIZONTAL) + catIconIf('k-collapse-next k-i-arrow-60-down', nextCollapsible && !nextCollapsed && !prevCollapsed && orientation == VERTICAL) + catIconIf('k-collapse-next k-i-arrow-60-right', nextCollapsible && !nextCollapsed && !prevCollapsed && orientation == HORIZONTAL) + catIconIf('k-expand-next k-i-arrow-60-up', nextCollapsible && nextCollapsed && !prevCollapsed && orientation == VERTICAL) + catIconIf('k-expand-next k-i-arrow-60-left', nextCollapsible && nextCollapsed && !prevCollapsed && orientation == HORIZONTAL));\n if (!draggable && !prevCollapsible && !nextCollapsible) {\n splitbar.removeAttr('tabindex');\n }\n },\n _updateSplitBars: function () {\n var that = this;\n this.element.children('.k-splitbar').each(function () {\n var splitbar = $(this), previousPane = splitbar.prevAll(PANECLASS).first().data(PANE), nextPane = splitbar.nextAll(PANECLASS).first().data(PANE);\n if (!nextPane) {\n return;\n }\n that._updateSplitBar(splitbar, previousPane, nextPane);\n });\n },\n _removeSplitBars: function () {\n this.element.children('.k-splitbar').remove();\n },\n _panes: function () {\n if (!this.element) {\n return $();\n }\n return this.element.children(PANECLASS);\n },\n _resize: function () {\n var that = this, element = that.element, panes = element.children(PANECLASS), isHorizontal = that.orientation == HORIZONTAL, splitBars = element.children('.k-splitbar'), splitBarsCount = splitBars.length, sizingProperty = isHorizontal ? 'width' : 'height', totalSize = element[sizingProperty]();\n that.wrapper.addClass('k-splitter-resizing');\n if (splitBarsCount === 0) {\n splitBarsCount = panes.length - 1;\n panes.slice(0, splitBarsCount).after('<div tabindex=\\'0\\' class=\\'k-splitbar\\' data-marker=\\'' + that._marker + '\\' />');\n that._updateSplitBars();\n splitBars = element.children('.k-splitbar');\n } else {\n that._updateSplitBars();\n }\n splitBars.each(function () {\n totalSize -= this[isHorizontal ? 'offsetWidth' : 'offsetHeight'];\n });\n var sizedPanesWidth = 0, sizedPanesCount = 0, freeSizedPanes = $();\n panes.css({\n position: 'absolute',\n top: 0\n })[sizingProperty](function () {\n var element = $(this), config = element.data(PANE) || {}, size;\n element.removeClass('k-state-collapsed');\n if (config.collapsed) {\n size = config.collapsedSize ? calculateSize(config.collapsedSize, totalSize) : 0;\n element.css('overflow', 'hidden').addClass('k-state-collapsed');\n } else if (isFluid(config.size)) {\n freeSizedPanes = freeSizedPanes.add(this);\n return;\n } else {\n size = calculateSize(config.size, totalSize);\n }\n sizedPanesCount++;\n sizedPanesWidth += size;\n return size;\n });\n totalSize -= sizedPanesWidth;\n var freeSizePanesCount = freeSizedPanes.length, freeSizePaneWidth = Math.floor(totalSize / freeSizePanesCount);\n freeSizedPanes.slice(0, freeSizePanesCount - 1).css(sizingProperty, freeSizePaneWidth).end().eq(freeSizePanesCount - 1).css(sizingProperty, totalSize - (freeSizePanesCount - 1) * freeSizePaneWidth);\n var sum = 0, alternateSizingProperty = isHorizontal ? 'height' : 'width', positioningProperty = isHorizontal ? 'left' : 'top', sizingDomProperty = isHorizontal ? 'offsetWidth' : 'offsetHeight';\n if (freeSizePanesCount === 0) {\n var lastNonCollapsedPane = panes.filter(function () {\n return !($(this).data(PANE) || {}).collapsed;\n }).last();\n lastNonCollapsedPane[sizingProperty](totalSize + lastNonCollapsedPane[0][sizingDomProperty]);\n }\n element.children().css(alternateSizingProperty, element[alternateSizingProperty]()).each(function (i, child) {\n if (child.tagName.toLowerCase() != 'script') {\n child.style[positioningProperty] = Math.floor(sum) + 'px';\n sum += child[sizingDomProperty];\n }\n });\n that._detachEvents();\n that._attachEvents();\n that.wrapper.removeClass('k-splitter-resizing');\n kendo.resize(panes);\n that.trigger(LAYOUTCHANGE);\n },\n toggle: function (pane, expand) {\n var that = this, paneConfig;\n pane = that.element.find(pane);\n paneConfig = pane.data(PANE);\n if (!expand && !paneConfig.collapsible) {\n return;\n }\n if (arguments.length == 1) {\n expand = paneConfig.collapsed === undefined ? false : paneConfig.collapsed;\n }\n paneConfig.collapsed = !expand;\n if (paneConfig.collapsed) {\n pane.css('overflow', 'hidden');\n } else {\n pane.css('overflow', '');\n }\n that.resize(true);\n },\n collapse: function (pane) {\n this.toggle(pane, false);\n },\n expand: function (pane) {\n this.toggle(pane, true);\n },\n _addPane: function (config, idx, paneElement) {\n var that = this;\n if (paneElement.length) {\n that.options.panes.splice(idx, 0, config);\n that._initPane(paneElement, config);\n that._removeSplitBars();\n that.resize(true);\n }\n return paneElement;\n },\n append: function (config) {\n config = config || {};\n var that = this, paneElement = $('<div />').appendTo(that.element);\n return that._addPane(config, that.options.panes.length, paneElement);\n },\n insertBefore: function (config, referencePane) {\n referencePane = $(referencePane);\n config = config || {};\n var that = this, idx = that.wrapper.children('.k-pane').index(referencePane), paneElement = $('<div />').insertBefore($(referencePane));\n return that._addPane(config, idx, paneElement);\n },\n insertAfter: function (config, referencePane) {\n referencePane = $(referencePane);\n config = config || {};\n var that = this, idx = that.wrapper.children('.k-pane').index(referencePane), paneElement = $('<div />').insertAfter($(referencePane));\n return that._addPane(config, idx + 1, paneElement);\n },\n remove: function (pane) {\n var that = this;\n pane = that.wrapper.find(pane);\n if (pane.length) {\n kendo.destroy(pane);\n pane.each(function (idx, element) {\n that.options.panes.splice(that.wrapper.children('.k-pane').index(element), 1);\n $(element).remove();\n });\n that._removeSplitBars();\n if (that.options.panes.length) {\n that.resize(true);\n }\n }\n return that;\n },\n size: panePropertyAccessor('size', true),\n min: panePropertyAccessor('min'),\n max: panePropertyAccessor('max')\n });\n ui.plugin(Splitter);\n var verticalDefaults = {\n sizingProperty: 'height',\n sizingDomProperty: 'offsetHeight',\n alternateSizingProperty: 'width',\n positioningProperty: 'top',\n mousePositioningProperty: 'pageY'\n };\n var horizontalDefaults = {\n sizingProperty: 'width',\n sizingDomProperty: 'offsetWidth',\n alternateSizingProperty: 'height',\n positioningProperty: 'left',\n mousePositioningProperty: 'pageX'\n };\n function PaneResizing(splitter) {\n var that = this, orientation = splitter.orientation;\n that.owner = splitter;\n that._element = splitter.element;\n that.orientation = orientation;\n extend(that, orientation === HORIZONTAL ? horizontalDefaults : verticalDefaults);\n that._resizable = new kendo.ui.Resizable(splitter.element, {\n orientation: orientation,\n handle: '.k-splitbar-draggable-' + orientation + '[data-marker=' + splitter._marker + ']',\n hint: proxy(that._createHint, that),\n start: proxy(that._start, that),\n max: proxy(that._max, that),\n min: proxy(that._min, that),\n invalidClass: 'k-restricted-size-' + orientation,\n resizeend: proxy(that._stop, that)\n });\n }\n PaneResizing.prototype = {\n press: function (target) {\n this._resizable.press(target);\n },\n move: function (delta, target) {\n if (!this.pressed) {\n this.press(target);\n this.pressed = true;\n }\n if (!this._resizable.target) {\n this._resizable.press(target);\n }\n this._resizable.move(delta);\n },\n end: function () {\n this._resizable.end();\n this.pressed = false;\n },\n destroy: function () {\n this._resizable.destroy();\n this._resizable = this._element = this.owner = null;\n },\n isResizing: function () {\n return this._resizable.resizing;\n },\n _createHint: function (handle) {\n var that = this;\n return $('<div class=\\'k-ghost-splitbar k-ghost-splitbar-' + that.orientation + ' k-state-default\\' />').css(that.alternateSizingProperty, handle[that.alternateSizingProperty]());\n },\n _start: function (e) {\n var that = this, splitbar = $(e.currentTarget), previousPane = splitbar.prev(), nextPane = splitbar.next(), previousPaneConfig = previousPane.data(PANE), nextPaneConfig = nextPane.data(PANE), prevBoundary = parseInt(previousPane[0].style[that.positioningProperty], 10), nextBoundary = parseInt(nextPane[0].style[that.positioningProperty], 10) + nextPane[0][that.sizingDomProperty] - splitbar[0][that.sizingDomProperty], totalSize = parseInt(that._element.css(that.sizingProperty), 10), toPx = function (value) {\n var val = parseInt(value, 10);\n return (isPixelSize(value) ? val : totalSize * val / 100) || 0;\n }, prevMinSize = toPx(previousPaneConfig.min), prevMaxSize = toPx(previousPaneConfig.max) || nextBoundary - prevBoundary, nextMinSize = toPx(nextPaneConfig.min), nextMaxSize = toPx(nextPaneConfig.max) || nextBoundary - prevBoundary;\n that.previousPane = previousPane;\n that.nextPane = nextPane;\n that._maxPosition = Math.min(nextBoundary - nextMinSize, prevBoundary + prevMaxSize);\n that._minPosition = Math.max(prevBoundary + prevMinSize, nextBoundary - nextMaxSize);\n },\n _max: function () {\n return this._maxPosition;\n },\n _min: function () {\n return this._minPosition;\n },\n _stop: function (e) {\n var that = this, splitbar = $(e.currentTarget), owner = that.owner;\n owner._panes().children('.k-splitter-overlay').remove();\n if (e.keyCode !== kendo.keys.ESC) {\n var ghostPosition = e.position, previousPane = splitbar.prev(), nextPane = splitbar.next(), previousPaneConfig = previousPane.data(PANE), nextPaneConfig = nextPane.data(PANE), previousPaneNewSize = ghostPosition - parseInt(previousPane[0].style[that.positioningProperty], 10), nextPaneNewSize = parseInt(nextPane[0].style[that.positioningProperty], 10) + nextPane[0][that.sizingDomProperty] - ghostPosition - splitbar[0][that.sizingDomProperty], fluidPanesCount = that._element.children(PANECLASS).filter(function () {\n return isFluid($(this).data(PANE).size);\n }).length;\n if (!isFluid(previousPaneConfig.size) || fluidPanesCount > 1) {\n if (isFluid(previousPaneConfig.size)) {\n fluidPanesCount--;\n }\n previousPaneConfig.size = previousPaneNewSize + 'px';\n }\n if (!isFluid(nextPaneConfig.size) || fluidPanesCount > 1) {\n nextPaneConfig.size = nextPaneNewSize + 'px';\n }\n owner.resize(true);\n }\n return false;\n }\n };\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.dialog', [\n 'kendo.core',\n 'kendo.popup'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'dialog',\n name: 'Dialog',\n category: 'web',\n description: 'The dialog widget is a modal popup that brings information to the user.',\n depends: [\n 'core',\n 'popup'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, TabKeyTrap = kendo.ui.Popup.TabKeyTrap, proxy = $.proxy, template = kendo.template, keys = kendo.keys, isFunction = $.isFunction, NS = 'kendoWindow', KDIALOG = '.k-dialog', KWINDOW = '.k-window', KICONCLOSE = '.k-dialog-close', KCONTENTCLASS = 'k-window-content k-dialog-content', KCONTENTSELECTOR = '.k-window-content', KSCROLL = 'k-scroll', KTITLELESS = 'k-dialog-titleless', KDIALOGTITLE = '.k-dialog-title', KDIALOGTITLEBAR = KDIALOGTITLE + 'bar', KBUTTONGROUP = '.k-dialog-buttongroup', KBUTTON = '.k-button', KALERT = 'k-alert', KCONFIRM = 'k-confirm', KPROMPT = 'k-prompt', KTEXTBOX = '.k-textbox', KOVERLAY = '.k-overlay', VISIBLE = ':visible', ZINDEX = 'zIndex', BODY = 'body', INITOPEN = 'initOpen', TOUCHSTART = 'touchstart', TOUCHMOVE = 'touchmove', OPEN = 'open', CLOSE = 'close', SHOW = 'show', HIDE = 'hide', SIZE = {\n small: 'k-window-sm',\n medium: 'k-window-md',\n large: 'k-window-lg'\n }, HIDDEN = 'hidden', OVERFLOW = 'overflow', DATADOCOVERFLOWRULE = 'original-overflow-rule', DATAHTMLTAPYRULE = 'tap-y', messages = {\n okText: 'OK',\n cancel: 'Cancel',\n promptInput: 'Input'\n }, ceil = Math.ceil, templates, overlaySelector = ':not(link,meta,script,style)';\n function defined(x) {\n return typeof x != 'undefined';\n }\n function constrain(value, low, high) {\n return Math.max(Math.min(parseInt(value, 10), high === Infinity ? high : parseInt(high, 10)), parseInt(low, 10));\n }\n function buttonKeyTrigger(e) {\n return e.keyCode == keys.ENTER || e.keyCode == keys.SPACEBAR;\n }\n var DialogBase = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n that._init(that.element, that.options);\n kendo.notify(that);\n },\n _init: function (element, options) {\n var that = this, wrapper;\n that._centerCallback = proxy(that._center, that);\n that.appendTo = $(BODY);\n if (!defined(options.visible) || options.visible === null) {\n options.visible = element.is(VISIBLE);\n }\n if (that.wrapperTemplate === undefined) {\n that.wrapperTemplate = templates.wrapper;\n }\n that._createDialog();\n wrapper = that.wrapper = element.closest(KDIALOG);\n if (options._defaultFocus === undefined) {\n that._defaultFocus = element[0];\n }\n that._tabindex(element);\n that._dimensions();\n this._tabKeyTrap = new TabKeyTrap(wrapper);\n if (!that.options.visible) {\n that.wrapper.hide();\n } else {\n that._triggerOpen();\n }\n },\n setOptions: function (options) {\n var that = this;\n var sizeClass = that.options.size;\n options = $.extend(that.options, options);\n Widget.fn.setOptions.call(that, options);\n if (options.title !== undefined) {\n that.title(options.title);\n }\n if (options.content) {\n kendo.destroy(that.element.children());\n that.element.html(options.content);\n }\n if (options.actions) {\n that.wrapper.children(KBUTTONGROUP).remove();\n that._createActionbar(that.wrapper);\n }\n that.wrapper.show();\n that._closable(that.wrapper);\n that.wrapper.removeClass(SIZE[sizeClass]);\n that._dimensions();\n if (!options.visible) {\n that.wrapper.hide();\n } else {\n that._triggerOpen();\n }\n if (typeof options.modal !== 'undefined') {\n var visible = that.options.visible !== false;\n that._enableDocumentScrolling();\n that._overlay(options.modal && visible);\n }\n },\n _dimensions: function () {\n var that = this, wrapper = that.wrapper, options = that.options, width = options.width, height = options.height, sizeClass = options.size, dimensions = [\n 'minWidth',\n 'minHeight',\n 'maxWidth',\n 'maxHeight'\n ];\n for (var i = 0; i < dimensions.length; i++) {\n var value = options[dimensions[i]];\n if (value && value != Infinity) {\n wrapper.css(dimensions[i], value);\n }\n }\n this._setElementMaxHeight();\n if (width) {\n if (width.toString().indexOf('%') > 0) {\n wrapper.width(width);\n } else {\n wrapper.outerWidth(constrain(width, options.minWidth, options.maxWidth));\n }\n }\n if (height) {\n if (height.toString().indexOf('%') > 0) {\n wrapper.height(height);\n } else {\n wrapper.outerHeight(constrain(height, options.minHeight, options.maxHeight));\n }\n this._setElementHeight();\n }\n if (sizeClass && SIZE[sizeClass]) {\n wrapper.addClass(SIZE[sizeClass]);\n }\n },\n _setElementMaxHeight: function () {\n var that = this, element = that.element, maxHeight = that.options.maxHeight, elementMaxHeight;\n if (maxHeight != Infinity) {\n elementMaxHeight = parseFloat(maxHeight, 10) - that._uiHeight();\n if (elementMaxHeight > 0) {\n element.css({ maxHeight: ceil(elementMaxHeight) + 'px' });\n }\n }\n },\n _setElementHeight: function () {\n var that = this, element = that.element, height = that.wrapper.outerHeight(true), elementHeight = parseFloat(height, 10) - that._uiHeight();\n if (elementHeight < 0) {\n elementHeight = 0;\n }\n element.css({ height: ceil(elementHeight) + 'px' });\n this._applyScrollClassName(element);\n },\n _applyScrollClassName: function (element) {\n var hasScroll = element.get(0).scrollHeight > element.outerHeight();\n if (hasScroll) {\n element.addClass(KSCROLL);\n } else {\n element.removeClass(KSCROLL);\n }\n },\n _uiHeight: function () {\n var that = this, wrapper = that.wrapper, actionbar = wrapper.children(KBUTTONGROUP), actionbarHeight = actionbar[0] && actionbar[0].offsetHeight || 0, titlebar = wrapper.children(KDIALOGTITLEBAR), titlebarHeight = titlebar[0] && titlebar[0].offsetHeight || 0;\n return actionbarHeight + titlebarHeight;\n },\n _overlay: function (visible) {\n var overlay = this.appendTo.children(KOVERLAY), wrapper = this.wrapper;\n if (!overlay.length) {\n overlay = $(templates.overlay);\n }\n overlay.insertBefore(wrapper[0]).toggle(visible).css(ZINDEX, parseInt(wrapper.css(ZINDEX), 10) - 1);\n if (visible) {\n this._waiAriaOverlay();\n } else {\n this._removeWaiAriaOverlay();\n }\n if (this.options.modal.preventScroll) {\n this._stopDocumentScrolling();\n }\n return overlay;\n },\n _waiAriaOverlay: function () {\n var node = this.wrapper;\n this._overlayedNodes = node.prevAll(overlaySelector).add(node.nextAll(overlaySelector)).each(function () {\n var jthis = $(this);\n jthis.data('ariaHidden', jthis.attr('aria-hidden'));\n jthis.attr('aria-hidden', 'true');\n });\n },\n _removeWaiAriaOverlay: function () {\n return this._overlayedNodes && this._overlayedNodes.each(function () {\n var node = $(this);\n var hiddenValue = node.data('ariaHidden');\n if (hiddenValue) {\n node.attr('aria-hidden', hiddenValue);\n } else {\n node.removeAttr('aria-hidden');\n }\n });\n },\n _closeClick: function (e) {\n e.preventDefault();\n this.close(false);\n },\n _closeKeyHandler: function (e) {\n if (buttonKeyTrigger(e) || e.keyCode == keys.ESC) {\n this.close(false);\n }\n },\n _keydown: function (e) {\n var that = this, options = that.options, keyCode = e.keyCode;\n if (keyCode == keys.ESC && !that._closing && options.closable) {\n that.close(false);\n }\n },\n _createDialog: function () {\n var that = this, content = that.element, options = that.options, isRtl = kendo.support.isRtl(content), titlebar = $(templates.titlebar(options)), titleId = (content.id || kendo.guid()) + '_title', wrapper = $(that.wrapperTemplate(options));\n wrapper.toggleClass('k-rtl', isRtl);\n content.addClass(KCONTENTCLASS);\n that.appendTo.append(wrapper);\n if (options.title !== false) {\n wrapper.append(titlebar);\n titlebar.attr('id', titleId);\n wrapper.attr('aria-labelledby', titleId);\n } else {\n wrapper.addClass(KTITLELESS);\n }\n that._closable(wrapper);\n wrapper.append(content);\n if (options.content) {\n kendo.destroy(content.children());\n content.html(options.content);\n }\n if (options.actions.length) {\n that._createActionbar(wrapper);\n }\n },\n _closable: function (wrapper) {\n var that = this;\n var options = that.options;\n var titlebar = wrapper.children(KDIALOGTITLEBAR);\n var titlebarActions = titlebar.find('.k-window-actions');\n var closeAction = titlebarActions.length ? titlebarActions.find('.k-dialog-close') : wrapper.find('.k-dialog-close');\n closeAction.remove();\n if (options.closable !== false) {\n if (options.title !== false && titlebarActions.length) {\n titlebarActions.append(templates.close(options));\n } else {\n wrapper.prepend(templates.close(options));\n }\n wrapper.autoApplyNS(NS);\n that.element.autoApplyNS(NS);\n wrapper.find(KICONCLOSE).on('click', proxy(that._closeClick, that)).on('keydown', proxy(that._closeKeyHandler, that));\n that.element.on('keydown', proxy(that._keydown, that));\n }\n },\n _createActionbar: function (wrapper) {\n var isStretchedLayout = this.options.buttonLayout === 'stretched';\n var buttonLayout = isStretchedLayout ? 'stretched' : 'normal';\n var actionbar = $(templates.actionbar({ buttonLayout: buttonLayout }));\n this._addButtons(actionbar);\n wrapper.append(actionbar);\n },\n _addButtons: function (actionbar) {\n var that = this, actionClick = proxy(that._actionClick, that), actionKeyHandler = proxy(that._actionKeyHandler, that), actions = that.options.actions, length = actions.length, action, text;\n for (var i = 0; i < length; i++) {\n action = actions[i];\n text = that._mergeTextWithOptions(action);\n $(templates.action(action)).autoApplyNS(NS).html(text).appendTo(actionbar).addClass(action.cssClass).data('action', action.action).on('click', actionClick).on('keydown', actionKeyHandler);\n }\n },\n _mergeTextWithOptions: function (action) {\n var text = action.text;\n return text ? template(text)(this.options) : '';\n },\n _tabindex: function (target) {\n var that = this;\n var wrapper = that.wrapper;\n var closeBtn = wrapper.find(KICONCLOSE);\n var actionButtons = wrapper.find(KBUTTONGROUP + ' ' + KBUTTON);\n Widget.fn._tabindex.call(this, target);\n var tabIndex = target.attr('tabindex');\n closeBtn.attr('tabIndex', tabIndex);\n actionButtons.attr('tabIndex', tabIndex);\n },\n _actionClick: function (e) {\n if (this.wrapper.is(VISIBLE)) {\n this._runActionBtn(e.currentTarget);\n }\n },\n _actionKeyHandler: function (e) {\n if (buttonKeyTrigger(e)) {\n e.preventDefault();\n this._runActionBtn(e.currentTarget);\n } else if (e.keyCode == keys.ESC) {\n this.close(false);\n }\n },\n _runActionBtn: function (target) {\n var that = this;\n if (that._closing) {\n return;\n }\n var action = $(target).data('action'), preventClose = isFunction(action) && action({ sender: that }) === false;\n if (!preventClose) {\n that.close(false);\n }\n },\n _triggerOpen: function () {\n var that = this;\n var options = that.options;\n var wrapper = that.wrapper;\n that.toFront();\n that._triggerInitOpen();\n that.trigger(OPEN);\n if (options.modal) {\n that._overlay(wrapper.is(VISIBLE)).css({ opacity: 0.5 });\n that._focusDialog();\n }\n },\n open: function () {\n var that = this, wrapper = that.wrapper, showOptions = this._animationOptions(OPEN), options = that.options, overlay, otherModalsVisible;\n this._triggerInitOpen();\n if (!that.trigger(OPEN)) {\n if (that._closing) {\n wrapper.kendoStop(true, true);\n }\n that._closing = false;\n that.toFront();\n options.visible = true;\n if (options.modal) {\n otherModalsVisible = !!that._modals().length;\n overlay = that._overlay(otherModalsVisible);\n overlay.kendoStop(true, true);\n if (showOptions.duration && kendo.effects.Fade && !otherModalsVisible) {\n var overlayFx = kendo.fx(overlay).fadeIn();\n overlayFx.duration(showOptions.duration || 0);\n overlayFx.endValue(0.5);\n overlayFx.play();\n } else {\n overlay.css('opacity', 0.5);\n }\n overlay.show();\n }\n wrapper.show().kendoStop().kendoAnimate({\n effects: showOptions.effects,\n duration: showOptions.duration,\n complete: proxy(that._openAnimationEnd, that)\n });\n wrapper.show();\n }\n return that;\n },\n _animationOptions: function (id) {\n var animation = this.options.animation;\n var basicAnimation = {\n open: { effects: {} },\n close: {\n hide: true,\n effects: {}\n }\n };\n return animation && animation[id] || basicAnimation[id];\n },\n _openAnimationEnd: function () {\n if (this.options.modal) {\n this._focusDialog();\n }\n this.trigger(SHOW);\n },\n _triggerInitOpen: function () {\n if (!defined(this._initOpenTriggered)) {\n this._initOpenTriggered = true;\n this.trigger(INITOPEN);\n }\n },\n toFront: function () {\n var that = this, wrapper = that.wrapper, zIndex = +wrapper.css(ZINDEX), originalZIndex = zIndex;\n that.center();\n $(KWINDOW).each(function (i, element) {\n var windowObject = $(element), zIndexNew = windowObject.css(ZINDEX);\n if (!isNaN(zIndexNew)) {\n zIndex = Math.max(+zIndexNew, zIndex);\n }\n });\n if (!wrapper[0].style.zIndex || originalZIndex < zIndex) {\n wrapper.css(ZINDEX, zIndex + 2);\n }\n that.element.find('> .k-overlay').remove();\n wrapper = null;\n return that;\n },\n close: function (systemTriggered) {\n if (!arguments.length) {\n systemTriggered = true;\n }\n this._close(systemTriggered);\n this._stopCenterOnResize();\n return this;\n },\n _close: function (systemTriggered) {\n var that = this, wrapper = that.wrapper, options = that.options, showOptions = this._animationOptions('open'), hideOptions = this._animationOptions('close');\n if (wrapper.is(VISIBLE) && !that.trigger(CLOSE, { userTriggered: !systemTriggered })) {\n if (that._closing) {\n return;\n }\n that._closing = true;\n options.visible = false;\n this._removeOverlay();\n wrapper.kendoStop().kendoAnimate({\n effects: hideOptions.effects || showOptions.effects,\n reverse: hideOptions.reverse === true,\n duration: hideOptions.duration,\n complete: proxy(this._closeAnimationEnd, this)\n });\n }\n return that;\n },\n center: function () {\n this._center();\n this._centerOnResize();\n },\n _center: function () {\n var that = this, wrapper = that.wrapper, documentWindow = $(window), scrollTop = 0, scrollLeft = 0, newLeft = scrollLeft + Math.max(0, (documentWindow.width() - wrapper.width()) / 2), newTop = scrollTop + Math.max(0, (documentWindow.height() - wrapper.height() - parseInt(wrapper.css('paddingTop'), 10)) / 2);\n wrapper.css({\n left: newLeft,\n top: newTop\n });\n return that;\n },\n _centerOnResize: function () {\n if (this._trackResize) {\n return;\n }\n kendo.onResize(this._centerCallback);\n this._trackResize = true;\n },\n _stopCenterOnResize: function () {\n kendo.unbindResize(this._centerCallback);\n this._trackResize = false;\n },\n _removeOverlay: function () {\n var modals = this._modals();\n var options = this.options;\n var hideOverlay = options.modal && !modals.length;\n if (hideOverlay) {\n this._overlay(false).remove();\n if (options.modal.preventScroll) {\n this._enableDocumentScrolling();\n }\n } else if (modals.length) {\n this._object(modals.last())._overlay(true);\n if (options.modal.preventScroll) {\n this._stopDocumentScrolling();\n }\n }\n },\n _stopDocumentScrolling: function () {\n var that = this;\n var $body = $('body');\n that._storeOverflowRule($body);\n $body.css(OVERFLOW, HIDDEN);\n var $html = $('html');\n var html = $html[0];\n that._storeOverflowRule($html);\n $html.css(OVERFLOW, HIDDEN);\n if (kendo.support.mobileOS.ios) {\n html.addEventListener(TOUCHSTART, that._touchStart, { passive: false });\n html.addEventListener(TOUCHMOVE, that._touchMove, { passive: false });\n }\n },\n _touchStart: function (e) {\n $(this).data(DATAHTMLTAPYRULE, e.changedTouches[0].pageY);\n },\n _touchMove: function (e) {\n var target = e.target;\n var $target = $(e.target);\n var upScroll = e.changedTouches[0].pageY - $(this).data(DATAHTMLTAPYRULE) > 0;\n var preventYScroll = $target.is(KCONTENTSELECTOR) && (upScroll && $target.scrollTop() === 0) || !upScroll && $target.scrollTop() === target.scrollHeight - target.clientHeight;\n if (!$target.is(KCONTENTSELECTOR) || preventYScroll) {\n e.preventDefault();\n }\n },\n _enableDocumentScrolling: function () {\n var that = this;\n var $body = $(document.body);\n var $html = $('html');\n var html = $html[0];\n that._restoreOverflowRule($body);\n that._restoreOverflowRule($html);\n if (kendo.support.mobileOS.ios) {\n $html.removeData(DATAHTMLTAPYRULE);\n html.removeEventListener(TOUCHSTART, that._touchStart, { passive: false });\n html.removeEventListener(TOUCHMOVE, that._touchMove, { passive: false });\n }\n },\n _storeOverflowRule: function ($element) {\n if (this._isOverflowStored($element)) {\n return;\n }\n var overflowRule = $element.get(0).style.overflow;\n if (typeof overflowRule === 'string') {\n $element.data(DATADOCOVERFLOWRULE, overflowRule);\n }\n },\n _isOverflowStored: function ($element) {\n return typeof $element.data(DATADOCOVERFLOWRULE) === 'string';\n },\n _restoreOverflowRule: function ($element) {\n var overflowRule = $element.data(DATADOCOVERFLOWRULE);\n if (overflowRule !== null && overflowRule !== undefined) {\n $element.css(OVERFLOW, overflowRule);\n $element.removeData(DATADOCOVERFLOWRULE);\n } else {\n $element.css(OVERFLOW, '');\n }\n },\n _closeAnimationEnd: function () {\n var that = this;\n that._closing = false;\n that.wrapper.hide().css('opacity', '');\n that.trigger(HIDE);\n if (that.options.modal) {\n var lastModal = that._object(that._modals().last());\n if (lastModal) {\n lastModal.toFront();\n }\n }\n },\n _modals: function () {\n var that = this;\n var zStack = $(KWINDOW).filter(function () {\n var dom = $(this);\n var object = that._object(dom);\n var options = object && object.options;\n return options && options.modal && that.options.appendTo == options.appendTo && options.visible && dom.is(VISIBLE);\n }).sort(function (a, b) {\n return +$(a).css('zIndex') - +$(b).css('zIndex');\n });\n that = null;\n return zStack;\n },\n _object: function (element) {\n var content = element.children(KCONTENTSELECTOR);\n var widget = kendo.widgetInstance(content);\n if (widget) {\n return widget;\n }\n return undefined;\n },\n destroy: function () {\n var that = this;\n that._destroy();\n Widget.fn.destroy.call(that);\n kendo.destroy(that.wrapper);\n that.wrapper.remove();\n that.wrapper = that.element = $();\n },\n _destroy: function () {\n var that = this;\n var ns = '.' + NS;\n that.wrapper.off(ns);\n that.element.off(ns);\n that.wrapper.find(KICONCLOSE + ',' + KBUTTONGROUP + ' > ' + KBUTTON).off(ns);\n that._stopCenterOnResize();\n },\n title: function (html) {\n var that = this, wrapper = that.wrapper, options = that.options, titlebar = wrapper.children(KDIALOGTITLEBAR), title = titlebar.children(KDIALOGTITLE), encodedHtml = kendo.htmlEncode(html);\n if (!arguments.length) {\n return title.html();\n }\n if (html === false) {\n titlebar.remove();\n wrapper.addClass(KTITLELESS);\n } else {\n if (!titlebar.length) {\n titlebar = $(templates.titlebar(options)).prependTo(wrapper);\n title = titlebar.children(KDIALOGTITLE);\n wrapper.removeClass(KTITLELESS);\n }\n title.html(encodedHtml);\n }\n that.options.title = encodedHtml;\n return that;\n },\n content: function (html, data) {\n var that = this, content = that.wrapper.children(KCONTENTSELECTOR);\n if (!defined(html)) {\n return content.html();\n }\n this.angular('cleanup', function () {\n return { elements: content.children() };\n });\n kendo.destroy(content.children());\n content.html(html);\n this.angular('compile', function () {\n var a = [];\n for (var i = content.length; --i >= 0;) {\n a.push({ dataItem: data });\n }\n return {\n elements: content.children(),\n data: a\n };\n });\n that.options.content = html;\n return that;\n },\n _focusDialog: function () {\n if (this._defaultFocus) {\n this._focus(this._defaultFocus);\n }\n this._tabKeyTrap.trap();\n },\n _focus: function (node) {\n if (node) {\n node.focus();\n }\n },\n events: [\n INITOPEN,\n OPEN,\n CLOSE,\n SHOW,\n HIDE\n ],\n options: {\n title: '',\n buttonLayout: 'stretched',\n actions: [],\n modal: true,\n size: 'auto',\n width: null,\n height: null,\n minWidth: 0,\n minHeight: 0,\n maxWidth: Infinity,\n maxHeight: Infinity,\n content: null,\n visible: null,\n appendTo: BODY,\n closable: true\n }\n });\n var Dialog = DialogBase.extend({\n options: {\n name: 'Dialog',\n messages: { close: 'Close' }\n }\n });\n kendo.ui.plugin(Dialog);\n var PopupBox = DialogBase.extend({\n _init: function (element, options) {\n var that = this;\n that.wrapperTemplate = templates.alertWrapper;\n options._defaultFocus = null;\n that._ensureContentId(element);\n DialogBase.fn._init.call(that, element, options);\n that.bind(HIDE, proxy(that.destroy, that));\n that._ariaDescribedBy();\n that._initFocus();\n },\n _ensureContentId: function (element) {\n var node = $(element);\n if (!node.attr('id')) {\n node.attr('id', kendo.guid() + '_k-popup');\n }\n },\n _ariaDescribedBy: function () {\n this.wrapper.attr('aria-describedby', this.element.attr('id'));\n },\n _initFocus: function () {\n var o = this.options;\n this._defaultFocus = this._chooseEntryFocus();\n if (this._defaultFocus && o.visible && o.modal) {\n this._focusDialog();\n }\n },\n _chooseEntryFocus: function () {\n return this.wrapper.find(KBUTTONGROUP + ' > ' + KBUTTON)[0];\n },\n options: {\n title: window.location.host,\n closable: false,\n messages: messages\n }\n });\n var Alert = PopupBox.extend({\n _init: function (element, options) {\n var that = this;\n PopupBox.fn._init.call(that, element, options);\n that.wrapper.addClass(KALERT);\n },\n options: {\n name: 'Alert',\n modal: true,\n actions: [{ text: '#: messages.okText #' }]\n }\n });\n kendo.ui.plugin(Alert);\n var kendoAlert = function (text) {\n return $(templates.alert).kendoAlert({ content: text }).data('kendoAlert').open();\n };\n var Confirm = PopupBox.extend({\n _init: function (element, options) {\n var that = this;\n PopupBox.fn._init.call(that, element, options);\n that.wrapper.addClass(KCONFIRM);\n that.result = $.Deferred();\n },\n options: {\n name: 'Confirm',\n modal: true,\n actions: [\n {\n text: '#: messages.okText #',\n primary: true,\n action: function (e) {\n e.sender.result.resolve();\n }\n },\n {\n text: '#: messages.cancel #',\n action: function (e) {\n e.sender.result.reject();\n }\n }\n ]\n }\n });\n kendo.ui.plugin(Confirm);\n var kendoConfirm = function (text) {\n var confirmDialog = $(templates.confirm).kendoConfirm({ content: text }).data('kendoConfirm').open();\n return confirmDialog.result;\n };\n var Prompt = PopupBox.extend({\n _init: function (element, options) {\n var that = this;\n PopupBox.fn._init.call(that, element, options);\n that.wrapper.addClass(KPROMPT);\n that._createPrompt();\n that.result = $.Deferred();\n },\n _createPrompt: function () {\n var value = this.options.value, promptContainer = $(templates.promptInputContainer(this.options)).insertAfter(this.element);\n if (value) {\n promptContainer.children(KTEXTBOX).val(value);\n }\n this._defaultFocus = this._chooseEntryFocus();\n this._focusDialog();\n },\n _chooseEntryFocus: function () {\n return this.wrapper.find(KTEXTBOX)[0];\n },\n options: {\n name: 'Prompt',\n modal: true,\n value: '',\n actions: [\n {\n text: '#: messages.okText #',\n primary: true,\n action: function (e) {\n var sender = e.sender, value = sender.wrapper.find(KTEXTBOX).val();\n sender.result.resolve(value);\n }\n },\n {\n text: '#: messages.cancel #',\n action: function (e) {\n var sender = e.sender, value = sender.wrapper.find(KTEXTBOX).val();\n e.sender.result.reject(value);\n }\n }\n ]\n }\n });\n kendo.ui.plugin(Prompt);\n var kendoPrompt = function (text, value) {\n var promptDialog = $(templates.prompt).kendoPrompt({\n content: text,\n value: value\n }).data('kendoPrompt').open();\n return promptDialog.result;\n };\n templates = {\n wrapper: template('<div class=\\'k-widget k-window k-dialog\\' role=\\'dialog\\'></div>'),\n action: template('<button type=\\'button\\' class=\\'k-button# if (data.primary) { # k-primary# } role=\\'button\\' #\\'></button>'),\n titlebar: template('<div class=\\'k-window-titlebar k-dialog-titlebar\\'>' + '<span class=\\'k-window-title k-dialog-title\\'>#: title #</span>' + '<div class=\\'k-window-actions k-dialog-actions\\'></div>' + '</div>'),\n close: template('<a role=\\'button\\' href=\\'\\\\#\\' class=\\'k-button k-flat k-button-icon k-window-action k-dialog-action k-dialog-close\\' title=\\'#: messages.close #\\' aria-label=\\'#: messages.close #\\' tabindex=\\'-1\\'><span class=\\'k-icon k-i-close\\'></span></a>'),\n actionbar: template('<div class=\\'k-dialog-buttongroup k-dialog-button-layout-#: buttonLayout #\\' role=\\'toolbar\\'></div>'),\n overlay: '<div class=\\'k-overlay\\'></div>',\n alertWrapper: template('<div class=\\'k-widget k-window k-dialog\\' role=\\'alertdialog\\'></div>'),\n alert: '<div></div>',\n confirm: '<div></div>',\n prompt: '<div></div>',\n promptInputContainer: template('<div class=\\'k-prompt-container\\'><input type=\\'text\\' class=\\'k-textbox\\' title=\\'#: messages.promptInput #\\' aria-label=\\'#: messages.promptInput #\\' /></div>')\n };\n kendo.alert = kendoAlert;\n kendo.confirm = kendoConfirm;\n kendo.prompt = kendoPrompt;\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.window', [\n 'kendo.draganddrop',\n 'kendo.popup'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'window',\n name: 'Window',\n category: 'web',\n description: 'The Window widget displays content in a modal or non-modal HTML window.',\n depends: [\n 'draganddrop',\n 'popup'\n ],\n features: [{\n id: 'window-fx',\n name: 'Animation',\n description: 'Support for animation',\n depends: ['fx']\n }]\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, TabKeyTrap = kendo.ui.Popup.TabKeyTrap, Draggable = kendo.ui.Draggable, isPlainObject = $.isPlainObject, activeElement = kendo._activeElement, outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight, proxy = $.proxy, extend = $.extend, each = $.each, template = kendo.template, BODY = 'body', templates, NS = '.kendoWindow', MODAL_NS = '.kendoWindowModal', KWINDOW = '.k-window', KWINDOWTITLE = '.k-window-title', KWINDOWTITLEBAR = KWINDOWTITLE + 'bar', KWINDOWCONTENT = '.k-window-content', KDIALOGCONTENT = '.k-dialog-content', KWINDOWRESIZEHANDLES = '.k-resize-handle', KOVERLAY = '.k-overlay', KCONTENTFRAME = 'k-content-frame', LOADING = 'k-i-loading', KHOVERSTATE = 'k-state-hover', KFOCUSEDSTATE = 'k-state-focused', MAXIMIZEDSTATE = 'k-window-maximized', VISIBLE = ':visible', HIDDEN = 'hidden', CURSOR = 'cursor', OPEN = 'open', ACTIVATE = 'activate', DEACTIVATE = 'deactivate', CLOSE = 'close', REFRESH = 'refresh', MINIMIZE = 'minimize', MAXIMIZE = 'maximize', RESIZESTART = 'resizeStart', RESIZE = 'resize', RESIZEEND = 'resizeEnd', DRAGSTART = 'dragstart', DRAGEND = 'dragend', KENDOKEYDOWN = 'kendoKeydown', ERROR = 'error', OVERFLOW = 'overflow', DATADOCOVERFLOWRULE = 'original-overflow-rule', ZINDEX = 'zIndex', MINIMIZE_MAXIMIZE = '.k-window-actions .k-i-window-minimize,.k-window-actions .k-i-window-maximize', KPIN = '.k-i-pin', KUNPIN = '.k-i-unpin', PIN_UNPIN = KPIN + ',' + KUNPIN, TITLEBAR_BUTTONS = '.k-window-titlebar .k-window-action', REFRESHICON = '.k-window-titlebar .k-i-refresh', WINDOWEVENTSHANDLED = 'WindowEventsHandled', zero = /^0[a-z]*$/i, isLocalUrl = kendo.isLocalUrl, SIZE = {\n small: 'k-window-sm',\n medium: 'k-window-md',\n large: 'k-window-lg'\n };\n function defined(x) {\n return typeof x != 'undefined';\n }\n function toInt(element, property) {\n return parseInt(element.css(property), 10) || 0;\n }\n function constrain(value, low, high) {\n var normalizedValue;\n if (value && isNaN(value) && value.toString().indexOf('px') < 0) {\n normalizedValue = value;\n } else {\n normalizedValue = Math.max(Math.min(parseInt(value, 10), high === Infinity ? high : parseInt(high, 10)), low === -Infinity ? low : parseInt(low, 10));\n }\n return normalizedValue;\n }\n function executableScript() {\n return !this.type || this.type.toLowerCase().indexOf('script') >= 0;\n }\n function getPosition(elem) {\n var result = {\n top: elem.offsetTop,\n left: elem.offsetLeft\n }, parent = elem.offsetParent;\n while (parent) {\n result.top += parent.offsetTop;\n result.left += parent.offsetLeft;\n var parentOverflowX = $(parent).css('overflowX');\n var parentOverflowY = $(parent).css('overflowY');\n if (parentOverflowY === 'auto' || parentOverflowY === 'scroll') {\n result.top -= parent.scrollTop;\n }\n if (parentOverflowX === 'auto' || parentOverflowX === 'scroll') {\n result.left -= parent.scrollLeft;\n }\n parent = parent.offsetParent;\n }\n return result;\n }\n var Window = Widget.extend({\n init: function (element, options) {\n var that = this, wrapper, offset = {}, visibility, display, position, isVisible = false, content, windowContent, windowFrame, globalWindow, suppressActions = options && options.actions && !options.actions.length, id;\n Widget.fn.init.call(that, element, options);\n options = that.options;\n position = options.position;\n element = that.element;\n content = options.content;\n globalWindow = $(window);\n if (suppressActions) {\n options.actions = [];\n }\n that.appendTo = $(options.appendTo);\n that.containment = options.draggable.containment ? $(options.draggable.containment).first() : null;\n if (content && !isPlainObject(content)) {\n content = options.content = { url: content };\n }\n element.find('script').filter(executableScript).remove();\n if (!element.parent().is(that.appendTo) && !that.containment && (position.top === undefined || position.left === undefined)) {\n if (element.is(VISIBLE)) {\n offset = element.offset();\n isVisible = true;\n } else {\n visibility = element.css('visibility');\n display = element.css('display');\n element.css({\n visibility: HIDDEN,\n display: ''\n });\n offset = element.offset();\n element.css({\n visibility: visibility,\n display: display\n });\n }\n if (position.top === undefined) {\n position.top = offset.top;\n }\n if (position.left === undefined) {\n position.left = offset.left;\n }\n }\n if (!defined(options.visible) || options.visible === null) {\n options.visible = element.is(VISIBLE);\n }\n wrapper = that.wrapper = element.closest(KWINDOW);\n if (!element.is('.k-window-content') || !wrapper[0]) {\n element.addClass('k-window-content');\n that._createWindow(element, options);\n wrapper = that.wrapper = element.closest(KWINDOW);\n that.title(that.options.title);\n that._dimensions();\n }\n that.minTop = that.minLeft = -Infinity;\n that.maxTop = that.maxLeft = Infinity;\n that._position();\n if (content) {\n that.refresh(content);\n }\n if (options.visible) {\n that.toFront();\n }\n windowContent = wrapper.children(KWINDOWCONTENT);\n if (options.visible && options.modal) {\n that._overlay(wrapper.is(VISIBLE)).css({ opacity: 0.5 });\n }\n wrapper.on('mouseenter' + NS, TITLEBAR_BUTTONS, proxy(that._buttonEnter, that)).on('mouseleave' + NS, TITLEBAR_BUTTONS, proxy(that._buttonLeave, that)).on('click' + NS, '> ' + TITLEBAR_BUTTONS, proxy(that._windowActionHandler, that)).on('keydown' + NS, that, proxy(that._keydown, that)).on('focus' + NS, proxy(that._focus, that)).on('blur' + NS, proxy(that._blur, that));\n windowContent.on('keydown' + NS, that, proxy(that._keydownContent, that));\n windowFrame = windowContent.find('.' + KCONTENTFRAME)[0];\n if (windowFrame && !globalWindow.data(WINDOWEVENTSHANDLED)) {\n globalWindow.on('blur' + NS, function () {\n var element = $(document.activeElement).parent(KWINDOWCONTENT);\n if (element.length) {\n var windowInstance = kendo.widgetInstance(element);\n windowInstance._focus();\n }\n });\n globalWindow.on('focus' + NS, function () {\n $(KWINDOWCONTENT).not(KDIALOGCONTENT).each(function (i, element) {\n kendo.widgetInstance($(element))._blur();\n });\n });\n globalWindow.data(WINDOWEVENTSHANDLED, true);\n }\n this._resizable();\n this._draggable();\n if (options.pinned && this.wrapper.is(':visible')) {\n that.pin();\n }\n id = element.attr('id');\n if (id) {\n id = id + '_wnd_title';\n wrapper.children(KWINDOWTITLEBAR).children(KWINDOWTITLE).attr('id', id);\n windowContent.attr({\n 'role': 'dialog',\n 'aria-labelledby': id\n });\n }\n wrapper.add(wrapper.children('.k-resize-handle,' + KWINDOWTITLEBAR)).on('mousedown' + NS, proxy(that.toFront, that));\n that.touchScroller = kendo.touchScroller(element);\n that._resizeHandler = proxy(that._onDocumentResize, that);\n that._marker = kendo.guid().substring(0, 8);\n $(window).on('resize' + NS + that._marker, that._resizeHandler);\n if (options.visible) {\n that.trigger(OPEN);\n that.trigger(ACTIVATE);\n }\n kendo.notify(that);\n if (this.options.modal) {\n this._tabKeyTrap = new TabKeyTrap(wrapper);\n this._tabKeyTrap.trap();\n this._tabKeyTrap.shouldTrap = function () {\n return wrapper.data('isFront');\n };\n }\n },\n _buttonEnter: function (e) {\n $(e.currentTarget).addClass(KHOVERSTATE);\n },\n _buttonLeave: function (e) {\n $(e.currentTarget).removeClass(KHOVERSTATE);\n },\n _focus: function () {\n this.wrapper.addClass(KFOCUSEDSTATE);\n },\n _blur: function () {\n this.wrapper.removeClass(KFOCUSEDSTATE);\n },\n _dimensions: function () {\n var wrapper = this.wrapper;\n var options = this.options;\n var width = options.width;\n var height = options.height;\n var maxHeight = options.maxHeight;\n var sizeClass = options.size;\n var dimensions = [\n 'minWidth',\n 'minHeight',\n 'maxWidth',\n 'maxHeight'\n ];\n var contentBoxSizing = wrapper.css('box-sizing') == 'content-box';\n var lrBorderWidth = contentBoxSizing ? toInt(wrapper, 'border-left-width') + toInt(wrapper, 'border-right-width') : 0;\n var tbBorderWidth = contentBoxSizing ? toInt(wrapper, 'border-top-width') + toInt(wrapper, 'border-bottom-width') : 0;\n var paddingTop = contentBoxSizing ? toInt(wrapper, 'padding-top') : 0;\n if (this.containment && !this._isPinned) {\n this._updateBoundaries();\n options.maxHeight = Math.min(this.containment.height - (tbBorderWidth + paddingTop), maxHeight);\n options.maxWidth = Math.min(this.containment.width - lrBorderWidth, options.maxWidth);\n }\n for (var i = 0; i < dimensions.length; i++) {\n var value = options[dimensions[i]] || '';\n if (value != Infinity) {\n wrapper.css(dimensions[i], value);\n }\n }\n if (maxHeight != Infinity) {\n this.element.css('maxHeight', maxHeight);\n }\n if (width) {\n wrapper.width(constrain(width, options.minWidth, options.maxWidth));\n } else {\n wrapper.width('');\n }\n if (height) {\n wrapper.height(constrain(height, options.minHeight, options.maxHeight));\n } else {\n wrapper.height('');\n }\n if (!options.visible) {\n wrapper.hide();\n }\n if (sizeClass && SIZE[sizeClass]) {\n wrapper.addClass(SIZE[sizeClass]);\n }\n },\n _position: function () {\n var wrapper = this.wrapper, position = this.options.position, containmentTop, containmentLeft;\n this._updateBoundaries();\n if (this.containment) {\n position.top = position.top || 0;\n position.left = position.left || 0;\n containmentTop = position.top.toString().indexOf('%') > 0 ? parseInt(this.containment.height * (parseFloat(position.top) / 100), 10) : position.top;\n containmentLeft = position.left.toString().indexOf('%') > 0 ? parseInt(this.containment.width * (parseFloat(position.left) / 100), 10) : position.left;\n position.top = constrain(containmentTop, this.minTop, this.maxTop);\n position.left = constrain(containmentLeft, this.minLeft, this.maxLeft);\n }\n if (position.top === 0) {\n position.top = position.top.toString();\n }\n if (position.left === 0) {\n position.left = position.left.toString();\n }\n wrapper.css({\n top: position.top || '',\n left: position.left || ''\n });\n },\n _updateBoundaries: function () {\n var containment = this.containment;\n if (!containment) {\n return null;\n }\n containment.width = containment.innerWidth();\n containment.height = containment.innerHeight();\n if (parseInt(containment.width, 10) > containment[0].clientWidth) {\n containment.width -= kendo.support.scrollbar();\n }\n if (parseInt(containment.height, 10) > containment[0].clientHeight) {\n containment.height -= kendo.support.scrollbar();\n }\n containment.position = getPosition(containment[0]);\n if (this._isPinned) {\n this.minTop = this.minLeft = -Infinity;\n this.maxTop = this.maxLeft = Infinity;\n } else {\n this.minTop = containment.scrollTop();\n this.minLeft = containment.scrollLeft();\n this.maxLeft = this.minLeft + containment.width - outerWidth(this.wrapper, true);\n this.maxTop = this.minTop + containment.height - outerHeight(this.wrapper, true);\n }\n },\n _animationOptions: function (id) {\n var animation = this.options.animation;\n var basicAnimation = {\n open: { effects: {} },\n close: {\n hide: true,\n effects: {}\n }\n };\n return animation && animation[id] || basicAnimation[id];\n },\n _resize: function () {\n kendo.resize(this.element.children());\n },\n _resizable: function () {\n var resizable = this.options.resizable;\n var wrapper = this.wrapper;\n if (this.resizing) {\n wrapper.off('dblclick' + NS).children(KWINDOWRESIZEHANDLES).remove();\n this.resizing.destroy();\n this.resizing = null;\n }\n if (resizable) {\n wrapper.on('dblclick' + NS, KWINDOWTITLEBAR, proxy(function (e) {\n if (!$(e.target).closest('.k-window-action').length) {\n this.toggleMaximization();\n }\n }, this));\n each('n e s w se sw ne nw'.split(' '), function (index, handler) {\n wrapper.append(templates.resizeHandle(handler));\n });\n this.resizing = new WindowResizing(this);\n }\n wrapper = null;\n },\n _draggable: function () {\n var draggable = this.options.draggable;\n if (this.dragging) {\n this.dragging.destroy();\n this.dragging = null;\n }\n if (draggable) {\n this.dragging = new WindowDragging(this, draggable.dragHandle || KWINDOWTITLEBAR);\n }\n },\n _actions: function () {\n var options = this.options;\n var actions = options.actions;\n var pinned = options.pinned;\n var titlebar = this.wrapper.children(KWINDOWTITLEBAR);\n var container = titlebar.find('.k-window-actions');\n var windowSpecificCommands = [\n 'maximize',\n 'minimize'\n ];\n actions = $.map(actions, function (action) {\n action = pinned && action.toLowerCase() === 'pin' ? 'unpin' : action;\n return { name: windowSpecificCommands.indexOf(action.toLowerCase()) > -1 ? 'window-' + action : action };\n });\n container.html(kendo.render(templates.action, actions));\n },\n setOptions: function (options) {\n var that = this;\n var sizeClass = that.options.size;\n var cachedOptions = JSON.parse(JSON.stringify(options));\n extend(options.position, that.options.position);\n extend(options.position, cachedOptions.position);\n Widget.fn.setOptions.call(that, options);\n var scrollable = that.options.scrollable !== false;\n that.restore();\n if (typeof options.title !== 'undefined') {\n that.title(options.title);\n }\n that.wrapper.removeClass(SIZE[sizeClass]);\n that._dimensions();\n that._position();\n that._resizable();\n that._draggable();\n that._actions();\n if (typeof options.modal !== 'undefined') {\n var visible = that.options.visible !== false;\n that._enableDocumentScrolling();\n that._overlay(options.modal && visible);\n }\n that.element.css(OVERFLOW, scrollable ? '' : 'hidden');\n },\n events: [\n OPEN,\n ACTIVATE,\n DEACTIVATE,\n CLOSE,\n MINIMIZE,\n MAXIMIZE,\n REFRESH,\n RESIZESTART,\n RESIZE,\n RESIZEEND,\n DRAGSTART,\n DRAGEND,\n KENDOKEYDOWN,\n ERROR\n ],\n options: {\n name: 'Window',\n animation: {\n open: {\n effects: {\n zoom: { direction: 'in' },\n fade: { direction: 'in' }\n },\n duration: 350\n },\n close: {\n effects: {\n zoom: {\n direction: 'out',\n properties: { scale: 0.7 }\n },\n fade: { direction: 'out' }\n },\n duration: 350,\n hide: true\n }\n },\n title: '',\n actions: ['Close'],\n autoFocus: true,\n modal: false,\n size: 'auto',\n resizable: true,\n draggable: true,\n minWidth: 90,\n minHeight: 50,\n maxWidth: Infinity,\n maxHeight: Infinity,\n pinned: false,\n scrollable: true,\n position: {},\n content: null,\n visible: null,\n height: null,\n width: null,\n appendTo: 'body',\n isMaximized: false,\n isMinimized: false\n },\n _closable: function () {\n return $.inArray('close', $.map(this.options.actions, function (x) {\n return x.toLowerCase();\n })) > -1;\n },\n _keydownContent: function (e) {\n var that = this, keys = kendo.keys, keyCode = e.keyCode;\n if (keyCode == keys.ESC && that._closable()) {\n e.stopPropagation();\n that._close(false);\n }\n },\n _keydown: function (e) {\n var that = this, options = that.options, keys = kendo.keys, keyCode = e.keyCode, wrapper = that.wrapper, offset, handled, distance = 10, isMaximized = options.isMaximized, isMinimized = options.isMinimized, newWidth, newHeight, w, h;\n if (keyCode == keys.ESC && that._closable()) {\n e.stopPropagation();\n that._close(false);\n }\n if (e.target != e.currentTarget || that._closing) {\n return;\n }\n if (e.altKey && keyCode == 82) {\n that.refresh();\n }\n if (e.altKey && keyCode == 80) {\n if (that.options.pinned) {\n that.unpin();\n } else {\n that.pin();\n }\n }\n if (e.altKey && keyCode == keys.UP) {\n if (isMinimized) {\n that.restore();\n that.wrapper.focus();\n } else if (!isMaximized) {\n that.maximize();\n that.wrapper.focus();\n }\n } else if (e.altKey && keyCode == keys.DOWN) {\n if (!isMinimized && !isMaximized) {\n that.minimize();\n that.wrapper.focus();\n } else if (isMaximized) {\n that.restore();\n }\n }\n offset = kendo.getOffset(wrapper);\n if (that.containment && !that._isPinned) {\n offset = that.options.position;\n }\n if (options.draggable && !e.ctrlKey && !e.altKey && !isMaximized) {\n that._updateBoundaries();\n if (keyCode == keys.UP) {\n offset.top = constrain(offset.top - distance, that.minTop, that.maxTop);\n handled = wrapper.css('top', offset.top);\n } else if (keyCode == keys.DOWN) {\n offset.top = constrain(offset.top + distance, that.minTop, that.maxTop);\n handled = wrapper.css('top', offset.top);\n } else if (keyCode == keys.LEFT) {\n offset.left = constrain(offset.left - distance, that.minLeft, that.maxLeft);\n handled = wrapper.css('left', offset.left);\n } else if (keyCode == keys.RIGHT) {\n offset.left = constrain(offset.left + distance, that.minLeft, that.maxLeft);\n handled = wrapper.css('left', offset.left);\n }\n }\n if (options.resizable && e.ctrlKey && !isMaximized && !isMinimized) {\n if (keyCode == keys.UP) {\n handled = true;\n newHeight = wrapper.height() - distance;\n } else if (keyCode == keys.DOWN) {\n handled = true;\n if (that.containment && !that._isPinned) {\n newHeight = Math.min(wrapper.height() + distance, that.containment.height - offset.top - toInt(wrapper, 'padding-top') - toInt(wrapper, 'borderBottomWidth') - toInt(wrapper, 'borderTopWidth'));\n } else {\n newHeight = wrapper.height() + distance;\n }\n }\n if (keyCode == keys.LEFT) {\n handled = true;\n newWidth = wrapper.width() - distance;\n } else if (keyCode == keys.RIGHT) {\n handled = true;\n if (that.containment && !that._isPinned) {\n newWidth = Math.min(wrapper.width() + distance, that.containment.width - offset.left - toInt(wrapper, 'borderLeftWidth') - toInt(wrapper, 'borderRightWidth'));\n } else {\n newWidth = wrapper.width() + distance;\n }\n }\n if (handled) {\n w = constrain(newWidth, options.minWidth, options.maxWidth);\n h = constrain(newHeight, options.minHeight, options.maxHeight);\n if (!isNaN(w)) {\n wrapper.width(w);\n that.options.width = w + 'px';\n }\n if (!isNaN(h)) {\n wrapper.height(h);\n that.options.height = h + 'px';\n }\n that.resize();\n }\n }\n if (handled) {\n e.preventDefault();\n }\n },\n _overlay: function (visible) {\n var overlay = this.containment ? this.containment.children(KOVERLAY) : this.appendTo.children(KOVERLAY), wrapper = this.wrapper;\n if (!overlay.length) {\n overlay = $('<div class=\\'k-overlay\\' />');\n }\n overlay.insertBefore(wrapper[0]).toggle(visible).css(ZINDEX, parseInt(wrapper.css(ZINDEX), 10) - 1);\n if (this.options.modal.preventScroll && !this.containment) {\n this._stopDocumentScrolling();\n }\n return overlay;\n },\n _actionForIcon: function (icon) {\n var iconClass = /\\bk-i(-\\w+)+\\b/.exec(icon[0].className)[0];\n return {\n 'k-i-close': '_close',\n 'k-i-window-maximize': 'maximize',\n 'k-i-window-minimize': 'minimize',\n 'k-i-window-restore': 'restore',\n 'k-i-refresh': 'refresh',\n 'k-i-pin': 'pin',\n 'k-i-unpin': 'unpin'\n }[iconClass];\n },\n _windowActionHandler: function (e) {\n if (this._closing) {\n return;\n }\n var icon = $(e.target).closest('.k-window-action').find('.k-icon');\n var action = this._actionForIcon(icon);\n if (action) {\n e.preventDefault();\n this[action]();\n return false;\n }\n },\n _modals: function () {\n var that = this;\n var zStack = $(KWINDOW).filter(function () {\n var dom = $(this);\n var object = that._object(dom);\n var options = object && object.options;\n return options && options.modal && options.visible && options.appendTo === that.options.appendTo && dom.is(VISIBLE);\n }).sort(function (a, b) {\n return +$(a).css('zIndex') - +$(b).css('zIndex');\n });\n that = null;\n return zStack;\n },\n _object: function (element) {\n var content = element.children(KWINDOWCONTENT);\n var widget = kendo.widgetInstance(content);\n if (widget) {\n return widget;\n }\n return undefined;\n },\n center: function () {\n var that = this, position = that.options.position, wrapper = that.wrapper, documentWindow = $(window), scrollTop = 0, scrollLeft = 0, newTop, newLeft;\n if (that.options.isMaximized) {\n return that;\n }\n if (that.options.pinned && !that._isPinned) {\n that.pin();\n }\n if (!that.options.pinned) {\n scrollTop = documentWindow.scrollTop();\n scrollLeft = documentWindow.scrollLeft();\n }\n if (this.containment && !that.options.pinned) {\n newTop = this.minTop + (this.maxTop - this.minTop) / 2;\n newLeft = this.minLeft + (this.maxLeft - this.minLeft) / 2;\n } else {\n that._scrollIsAppended = true;\n newLeft = scrollLeft + Math.max(0, (documentWindow.width() - wrapper.width()) / 2);\n newTop = scrollTop + Math.max(0, (documentWindow.height() - wrapper.height() - toInt(wrapper, 'paddingTop')) / 2);\n }\n wrapper.css({\n left: newLeft,\n top: newTop\n });\n position.top = newTop;\n position.left = newLeft;\n return that;\n },\n title: function (title) {\n var that = this, value, encoded = true, wrapper = that.wrapper, titleBar = wrapper.children(KWINDOWTITLEBAR), titleElement = titleBar.children(KWINDOWTITLE), titleBarHeight, display, visibility;\n if (!arguments.length) {\n return titleElement.html();\n }\n if ($.isPlainObject(title)) {\n value = typeof title.text !== 'undefined' ? title.text : '';\n encoded = title.encoded !== false;\n } else {\n value = title;\n }\n if (value === false) {\n wrapper.addClass('k-window-titleless');\n wrapper.css('padding-top', 0);\n titleBar.remove();\n } else {\n if (!titleBar.length) {\n wrapper.prepend(templates.titlebar({ title: encoded ? kendo.htmlEncode(value) : value }));\n that._actions();\n titleBar = wrapper.children(KWINDOWTITLEBAR);\n } else {\n titleElement.html(encoded ? kendo.htmlEncode(value) : value);\n }\n visibility = wrapper.css('visibility');\n display = wrapper.css('display');\n if (visibility === HIDDEN) {\n wrapper.css({ display: '' });\n titleBarHeight = parseInt(outerHeight(titleBar), 10);\n wrapper.css({ display: display });\n } else {\n wrapper.css({\n visibility: HIDDEN,\n display: ''\n });\n titleBarHeight = parseInt(outerHeight(titleBar), 10);\n wrapper.css({\n visibility: visibility,\n display: display\n });\n }\n wrapper.css('padding-top', titleBarHeight);\n titleBar.css('margin-top', -titleBarHeight);\n }\n that.options.title = value;\n return that;\n },\n content: function (html, data) {\n var content = this.wrapper.children(KWINDOWCONTENT), scrollContainer = content.children('.km-scroll-container');\n content = scrollContainer[0] ? scrollContainer : content;\n if (!defined(html)) {\n return content.html();\n }\n this.angular('cleanup', function () {\n return { elements: content.children() };\n });\n kendo.destroy(this.element.children());\n content.empty().html(html);\n this.angular('compile', function () {\n var a = [];\n for (var i = content.length; --i >= 0;) {\n a.push({ dataItem: data });\n }\n return {\n elements: content.children(),\n data: a\n };\n });\n return this;\n },\n open: function () {\n var that = this, wrapper = that.wrapper, options = that.options, showOptions = this._animationOptions('open'), contentElement = wrapper.children(KWINDOWCONTENT), overlay, otherModalsVisible, containmentContext = this.containment && !that._isPinned, doc = containmentContext ? this.containment : $(document);\n if (!that.trigger(OPEN)) {\n if (that._closing) {\n wrapper.kendoStop(true, true);\n }\n that._closing = false;\n that.toFront();\n if (options.autoFocus) {\n that.wrapper.focus();\n }\n options.visible = true;\n if (options.modal) {\n otherModalsVisible = !!that._modals().length;\n overlay = that._overlay(otherModalsVisible);\n overlay.kendoStop(true, true);\n if (showOptions.duration && kendo.effects.Fade && !otherModalsVisible) {\n var overlayFx = kendo.fx(overlay).fadeIn();\n overlayFx.duration(showOptions.duration || 0);\n overlayFx.endValue(0.5);\n overlayFx.play();\n } else {\n overlay.css('opacity', 0.5);\n }\n overlay.show();\n $(window).on('focus' + MODAL_NS, function () {\n if (wrapper.data('isFront') && !$(document.activeElement).closest(wrapper).length) {\n that.wrapper.focus();\n }\n });\n }\n if (!wrapper.is(VISIBLE)) {\n contentElement.css(OVERFLOW, HIDDEN);\n that.wrapper.find(TITLEBAR_BUTTONS).addClass('k-flat');\n wrapper.show().kendoStop().kendoAnimate({\n effects: showOptions.effects,\n duration: showOptions.duration,\n complete: proxy(this._activate, this)\n });\n }\n }\n if (options.isMaximized) {\n that._containerScrollTop = doc.scrollTop();\n that._containerScrollLeft = doc.scrollLeft();\n that._stopDocumentScrolling();\n }\n if (this.options.pinned && !this._isPinned) {\n this.pin();\n }\n return that;\n },\n _activate: function () {\n var scrollable = this.options.scrollable !== false;\n if (this.options.autoFocus) {\n this.wrapper.focus();\n }\n this.element.css(OVERFLOW, scrollable ? '' : 'hidden');\n kendo.resize(this.element.children());\n this.trigger(ACTIVATE);\n },\n _removeOverlay: function (suppressAnimation) {\n var modals = this._modals();\n var options = this.options;\n var hideOverlay = options.modal && !modals.length;\n var overlay = options.modal ? this._overlay(true) : $(undefined);\n var hideOptions = this._animationOptions('close');\n if (hideOverlay) {\n if (!suppressAnimation && hideOptions.duration && kendo.effects.Fade) {\n var overlayFx = kendo.fx(overlay).fadeOut();\n overlayFx.duration(hideOptions.duration || 0);\n overlayFx.startValue(0.5);\n overlayFx.play();\n } else {\n this._overlay(false).remove();\n }\n if (options.modal.preventScroll) {\n this._enableDocumentScrolling();\n }\n } else if (modals.length) {\n this._object(modals.last())._overlay(true);\n if (options.modal.preventScroll) {\n this._stopDocumentScrolling();\n }\n }\n },\n _close: function (systemTriggered) {\n var that = this, wrapper = that.wrapper, options = that.options, showOptions = this._animationOptions('open'), hideOptions = this._animationOptions('close'), containmentContext = this.containment && !that._isPinned, doc = containmentContext ? this.containment : $(document), defaultPrevented;\n if (that._closing) {\n return;\n }\n defaultPrevented = that.trigger(CLOSE, { userTriggered: !systemTriggered });\n that._closing = !defaultPrevented;\n if (wrapper.is(VISIBLE) && !defaultPrevented) {\n options.visible = false;\n $(KWINDOW).each(function (i, element) {\n var contentElement = $(element).children(KWINDOWCONTENT);\n if (element != wrapper && contentElement.find('> .' + KCONTENTFRAME).length > 0) {\n contentElement.children(KOVERLAY).remove();\n }\n });\n this._removeOverlay();\n that.wrapper.find(TITLEBAR_BUTTONS).removeClass('k-flat');\n wrapper.kendoStop().kendoAnimate({\n effects: hideOptions.effects || showOptions.effects,\n reverse: hideOptions.reverse === true,\n duration: hideOptions.duration,\n complete: proxy(this._deactivate, this)\n });\n $(window).off(MODAL_NS);\n }\n if (that.options.isMaximized) {\n that._enableDocumentScrolling();\n if (that._containerScrollTop && that._containerScrollTop > 0) {\n doc.scrollTop(that._containerScrollTop);\n }\n if (that._containerScrollLeft && that._containerScrollLeft > 0) {\n doc.scrollLeft(that._containerScrollLeft);\n }\n }\n if (that.options.iframe) {\n that.wrapper.blur();\n }\n },\n _deactivate: function () {\n var that = this;\n that.wrapper.hide().css('opacity', '');\n that.trigger(DEACTIVATE);\n if (that.options.modal) {\n var lastModal = that._object(that._modals().last());\n if (lastModal) {\n lastModal.toFront();\n }\n }\n },\n close: function () {\n this._close(true);\n return this;\n },\n _actionable: function (element) {\n return $(element).is(TITLEBAR_BUTTONS + ',' + TITLEBAR_BUTTONS + ' .k-icon,:input,a');\n },\n _shouldFocus: function (target) {\n var active = activeElement(), element = this.wrapper;\n return this.options.autoFocus && !$(active).is(element) && !this._actionable(target) && (!element.find(active).length || !element.find(target).length);\n },\n toFront: function (e) {\n var that = this, wrapper = that.wrapper, currentWindow = wrapper[0], containmentContext = that.containment && !that._isPinned, zIndex = +wrapper.css(ZINDEX), originalZIndex = zIndex, target = e && e.target || null;\n $(KWINDOW).each(function (i, element) {\n var windowObject = $(element), zIndexNew = windowObject.css(ZINDEX), contentElement = windowObject.children(KWINDOWCONTENT);\n if (!isNaN(zIndexNew)) {\n zIndex = Math.max(+zIndexNew, zIndex);\n }\n wrapper.data('isFront', element == currentWindow);\n if (element != currentWindow && contentElement.find('> .' + KCONTENTFRAME).length > 0) {\n contentElement.append(templates.overlay);\n }\n });\n if (!wrapper[0].style.zIndex || originalZIndex < zIndex) {\n wrapper.css(ZINDEX, zIndex + 2);\n }\n that.element.find('> .k-overlay').remove();\n if (that._shouldFocus(target)) {\n setTimeout(function () {\n that.wrapper.focus();\n });\n var scrollTop = containmentContext ? that.containment.scrollTop() : $(window).scrollTop(), windowTop = parseInt(wrapper.position().top, 10);\n if (!that.options.pinned && windowTop > 0 && windowTop < scrollTop) {\n if (scrollTop > 0) {\n $(window).scrollTop(windowTop);\n } else {\n wrapper.css('top', scrollTop);\n }\n }\n }\n wrapper = null;\n return that;\n },\n toggleMaximization: function () {\n if (this._closing) {\n return this;\n }\n return this[this.options.isMaximized ? 'restore' : 'maximize']();\n },\n restore: function () {\n var that = this;\n var options = that.options;\n var minHeight = options.minHeight;\n var restoreOptions = that.restoreOptions;\n var shouldRestrictTop;\n var container = that.containment && !that._isPinned ? that.containment : $(document);\n if (!options.isMaximized && !options.isMinimized) {\n return that;\n }\n if (minHeight && minHeight != Infinity) {\n that.wrapper.css('min-height', minHeight);\n }\n if (restoreOptions && !options.isMaximized) {\n restoreOptions.height = constrain(restoreOptions.height, that.options.minHeight, that.options.maxHeight);\n shouldRestrictTop = options.position.top + parseInt(restoreOptions.height, 10) > that.maxTop;\n if (shouldRestrictTop) {\n options.position.top = constrain(options.position.top, that.minTop, that.maxTop - parseInt(restoreOptions.height, 10));\n extend(restoreOptions, {\n left: options.position.left,\n top: options.position.top\n });\n }\n }\n that.wrapper.css({\n position: options.pinned ? 'fixed' : 'absolute',\n left: restoreOptions.left,\n top: restoreOptions.top,\n width: restoreOptions.width,\n height: restoreOptions.height\n }).removeClass(MAXIMIZEDSTATE).find('.k-window-content,.k-resize-handle').show().end().find('.k-window-titlebar .k-i-window-restore').parent().remove().end().end().find(MINIMIZE_MAXIMIZE).parent().show().end().end().find(PIN_UNPIN).parent().show();\n if (options.isMaximized) {\n that.wrapper.find('.k-i-window-maximize').parent().focus();\n } else if (options.isMinimized) {\n that.wrapper.find('.k-i-window-minimize').parent().focus();\n }\n that.options.width = restoreOptions.width;\n that.options.height = restoreOptions.height;\n if (!that.options.modal.preventScroll) {\n that._enableDocumentScrolling();\n }\n if (that._containerScrollTop && that._containerScrollTop > 0) {\n container.scrollTop(that._containerScrollTop);\n }\n if (that._containerScrollLeft && that._containerScrollLeft > 0) {\n container.scrollLeft(that._containerScrollLeft);\n }\n options.isMaximized = options.isMinimized = false;\n that.wrapper.removeAttr('aria-labelled-by');\n that.resize();\n return that;\n },\n _sizingAction: function (actionId, callback) {\n var that = this, wrapper = that.wrapper, style = wrapper[0].style, options = that.options;\n if (options.isMaximized || options.isMinimized) {\n return that;\n }\n that.restoreOptions = {\n width: style.width,\n height: style.height\n };\n wrapper.children(KWINDOWRESIZEHANDLES).hide().end().children(KWINDOWTITLEBAR).find(MINIMIZE_MAXIMIZE).parent().hide().eq(0).before(templates.action({ name: 'window-restore' }));\n callback.call(that);\n that.wrapper.children(KWINDOWTITLEBAR).find(PIN_UNPIN).parent().toggle(actionId !== 'maximize');\n that.trigger(actionId);\n wrapper.find('.k-i-window-restore').parent().focus();\n return that;\n },\n maximize: function () {\n this._sizingAction('maximize', function () {\n var that = this, wrapper = that.wrapper, containmentContext = this.containment && !that._isPinned, position = wrapper.position(), doc = $(document);\n extend(that.restoreOptions, {\n left: position.left + (containmentContext ? this.containment.scrollLeft() : 0),\n top: position.top + (containmentContext ? this.containment.scrollTop() : 0)\n });\n this._containerScrollTop = containmentContext ? this.containment.scrollTop() : doc.scrollTop();\n this._containerScrollLeft = containmentContext ? this.containment.scrollLeft() : doc.scrollLeft();\n that._stopDocumentScrolling();\n wrapper.css({\n top: containmentContext ? this.containment.scrollTop() : 0,\n left: containmentContext ? this.containment.scrollLeft() : 0,\n position: containmentContext ? 'absolute' : 'fixed'\n }).addClass(MAXIMIZEDSTATE);\n that.options.isMaximized = true;\n that._onDocumentResize();\n });\n return this;\n },\n _stopDocumentScrolling: function () {\n var that = this;\n var containment = that.containment;\n if (containment && !that._isPinned) {\n that._storeOverflowRule(containment);\n containment.css(OVERFLOW, HIDDEN);\n that.wrapper.css({\n maxWidth: containment.innerWidth(),\n maxHeight: containment.innerHeight()\n });\n return;\n }\n var $body = $('body');\n that._storeOverflowRule($body);\n $body.css(OVERFLOW, HIDDEN);\n var $html = $('html');\n that._storeOverflowRule($html);\n $html.css(OVERFLOW, HIDDEN);\n },\n _enableDocumentScrolling: function () {\n var that = this;\n var containment = that.containment;\n if (containment && !that._isPinned) {\n that._restoreOverflowRule(containment);\n that.wrapper.css({\n maxWidth: containment.width,\n maxHeight: containment.height\n });\n return;\n }\n that._restoreOverflowRule($(document.body));\n that._restoreOverflowRule($('html'));\n },\n _storeOverflowRule: function ($element) {\n if (this._isOverflowStored($element)) {\n return;\n }\n var overflowRule = $element.get(0).style.overflow;\n if (typeof overflowRule === 'string') {\n $element.data(DATADOCOVERFLOWRULE, overflowRule);\n }\n },\n _isOverflowStored: function ($element) {\n return typeof $element.data(DATADOCOVERFLOWRULE) === 'string';\n },\n _restoreOverflowRule: function ($element) {\n var overflowRule = $element.data(DATADOCOVERFLOWRULE);\n if (overflowRule !== null && overflowRule !== undefined) {\n $element.css(OVERFLOW, overflowRule);\n $element.removeData(DATADOCOVERFLOWRULE);\n } else {\n $element.css(OVERFLOW, '');\n }\n },\n isMaximized: function () {\n return this.options.isMaximized;\n },\n minimize: function () {\n this._sizingAction('minimize', function () {\n var that = this;\n that.wrapper.css({\n height: '',\n minHeight: ''\n });\n that.element.hide();\n that.options.isMinimized = true;\n });\n this.wrapper.attr('aria-labelled-by', this.element.attr('aria-labelled-by'));\n this._updateBoundaries();\n return this;\n },\n isMinimized: function () {\n return this.options.isMinimized;\n },\n pin: function () {\n var that = this, win = $(window), wrapper = that.wrapper, options = that.options, position = options.position, top = this.containment ? getPosition(wrapper[0]).top + toInt(this.containment, 'borderTopWidth') : toInt(wrapper, 'top'), left = this.containment ? getPosition(wrapper[0]).left + toInt(this.containment, 'borderLeftWidth') : toInt(wrapper, 'left');\n if (!that.options.isMaximized) {\n position.top = top;\n position.left = left;\n if (that._scrollIsAppended && (!this.containment || this.containment.css('position') !== 'fixed')) {\n position.top -= win.scrollTop();\n position.left -= win.scrollLeft();\n that._scrollIsAppended = false;\n }\n wrapper.css(extend(position, { position: 'fixed' }));\n wrapper.children(KWINDOWTITLEBAR).find(KPIN).addClass('k-i-unpin').removeClass('k-i-pin');\n that._isPinned = true;\n that.options.pinned = true;\n if (this.containment) {\n options.maxWidth = options.maxHeight = Infinity;\n wrapper.css({\n maxWidth: '',\n maxHeight: ''\n });\n }\n }\n },\n unpin: function () {\n var that = this, win = $(window), wrapper = that.wrapper, options = that.options, position = that.options.position, containment = that.containment, top = parseInt(wrapper.css('top'), 10) + win.scrollTop(), left = parseInt(wrapper.css('left'), 10) + win.scrollLeft();\n if (!that.options.isMaximized) {\n that._isPinned = false;\n that._scrollIsAppended = true;\n that.options.pinned = false;\n if (containment) {\n that._updateBoundaries();\n options.maxWidth = Math.min(containment.width, options.maxWidth);\n options.maxHeight = Math.min(containment.height - toInt(wrapper, 'padding-top'), options.maxHeight);\n wrapper.css({\n maxWidth: options.maxWidth,\n maxHeight: options.maxHeight\n });\n if (top < containment.position.top) {\n top = that.minTop;\n } else if (top > containment.position.top + containment.height) {\n top = that.maxTop;\n } else {\n top = top + containment.scrollTop() - (containment.position.top + toInt(containment, 'border-top-width'));\n }\n if (left < containment.position.left) {\n left = that.minLeft;\n } else if (left > containment.position.left + containment.width) {\n left = that.maxLeft;\n } else {\n left = left + containment.scrollLeft() - (containment.position.left + toInt(containment, 'border-left-width'));\n }\n }\n position.top = constrain(top, that.minTop, that.maxTop);\n position.left = constrain(left, that.minLeft, that.maxLeft);\n wrapper.css(extend(position, { position: '' }));\n wrapper.children(KWINDOWTITLEBAR).find(KUNPIN).addClass('k-i-pin').removeClass('k-i-unpin');\n }\n },\n _onDocumentResize: function () {\n var that = this, wrapper = that.wrapper, wnd = $(window), zoomLevel = kendo.support.zoomLevel(), contentBoxSizing = wrapper.css('box-sizing') == 'content-box', w, h;\n if (!that.options.isMaximized) {\n return;\n }\n var lrBorderWidth = contentBoxSizing ? toInt(wrapper, 'border-left-width') + toInt(wrapper, 'border-right-width') : 0;\n var tbBorderWidth = contentBoxSizing ? toInt(wrapper, 'border-top-width') + toInt(wrapper, 'border-bottom-width') : 0;\n var paddingTop = contentBoxSizing ? toInt(wrapper, 'padding-top') : 0;\n if (that.containment && !that._isPinned) {\n w = that.containment.innerWidth() - lrBorderWidth;\n h = that.containment.innerHeight() - (tbBorderWidth + paddingTop);\n } else {\n w = wnd.width() / zoomLevel - lrBorderWidth;\n h = wnd.height() / zoomLevel - (tbBorderWidth + paddingTop);\n }\n wrapper.css({\n width: w,\n height: h\n });\n that.options.width = w;\n that.options.height = h;\n that.resize();\n },\n refresh: function (options) {\n var that = this, initOptions = that.options, element = $(that.element), iframe, showIframe, url;\n if (!isPlainObject(options)) {\n options = { url: options };\n }\n options = extend({}, initOptions.content, options);\n showIframe = defined(initOptions.iframe) ? initOptions.iframe : options.iframe;\n url = options.url;\n if (url) {\n if (!defined(showIframe)) {\n showIframe = !isLocalUrl(url);\n }\n if (!showIframe) {\n that._ajaxRequest(options);\n } else {\n iframe = element.find('.' + KCONTENTFRAME)[0];\n if (iframe) {\n iframe.src = url || iframe.src;\n } else {\n element.html(templates.contentFrame(extend({}, initOptions, { content: options })));\n }\n element.find('.' + KCONTENTFRAME).unbind('load' + NS).on('load' + NS, proxy(this._triggerRefresh, this));\n }\n } else {\n if (options.template) {\n that.content(template(options.template)({}));\n }\n that.trigger(REFRESH);\n }\n element.toggleClass('k-window-iframecontent', !!showIframe);\n return that;\n },\n _triggerRefresh: function () {\n this.trigger(REFRESH);\n },\n _ajaxComplete: function () {\n clearTimeout(this._loadingIconTimeout);\n this.wrapper.find(REFRESHICON).removeClass(LOADING);\n },\n _ajaxError: function (xhr, status) {\n this.trigger(ERROR, {\n status: status,\n xhr: xhr\n });\n },\n _ajaxSuccess: function (contentTemplate) {\n return function (data) {\n var html = data;\n if (contentTemplate) {\n html = template(contentTemplate)(data || {});\n }\n this.content(html, data);\n this.element.prop('scrollTop', 0);\n this.trigger(REFRESH);\n };\n },\n _showLoading: function () {\n this.wrapper.find(REFRESHICON).addClass(LOADING);\n },\n _ajaxRequest: function (options) {\n this._loadingIconTimeout = setTimeout(proxy(this._showLoading, this), 100);\n $.ajax(extend({\n type: 'GET',\n dataType: 'html',\n cache: false,\n error: proxy(this._ajaxError, this),\n complete: proxy(this._ajaxComplete, this),\n success: proxy(this._ajaxSuccess(options.template), this)\n }, options));\n },\n _destroy: function () {\n if (this.resizing) {\n this.resizing.destroy();\n }\n if (this.dragging) {\n this.dragging.destroy();\n }\n this.wrapper.off(NS).children(KWINDOWCONTENT).off(NS).end().find('.k-resize-handle,.k-window-titlebar').off(NS);\n $(window).off('resize' + NS + this._marker);\n $(window).off(MODAL_NS);\n $(window).off(NS);\n clearTimeout(this._loadingIconTimeout);\n Widget.fn.destroy.call(this);\n this.unbind(undefined);\n kendo.destroy(this.wrapper);\n this._removeOverlay(true);\n },\n destroy: function () {\n this._destroy();\n this.wrapper.empty().remove();\n this.wrapper = this.appendTo = this.element = $();\n },\n _createWindow: function () {\n var contentHtml = this.element, options = this.options, iframeSrcAttributes, wrapper, isRtl = kendo.support.isRtl(contentHtml);\n if (options.scrollable === false) {\n contentHtml.css('overflow', 'hidden');\n }\n wrapper = $(templates.wrapper(options));\n iframeSrcAttributes = contentHtml.find('iframe:not(.k-content-frame)').map(function () {\n var src = this.getAttribute('src');\n this.src = '';\n return src;\n });\n wrapper.toggleClass('k-rtl', isRtl).attr('tabindex', 0).append(contentHtml).find('iframe:not(.k-content-frame)').each(function (index) {\n this.src = iframeSrcAttributes[index];\n });\n if (this.containment) {\n this.containment.prepend(wrapper);\n } else if (this.appendTo) {\n wrapper.appendTo(this.appendTo);\n }\n wrapper.find('.k-window-title').css(isRtl ? 'left' : 'right', outerWidth(wrapper.find('.k-window-actions')) + 10);\n contentHtml.css('visibility', '').show();\n contentHtml.find('[data-role=editor]').each(function () {\n var editor = $(this).data('kendoEditor');\n if (editor) {\n editor.refresh();\n }\n });\n wrapper = contentHtml = null;\n }\n });\n templates = {\n wrapper: template('<div class=\\'k-widget k-window\\'></div>'),\n action: template('<a role=\\'button\\' href=\\'\\\\#\\' class=\\'k-button k-flat k-button-icon k-window-action\\' aria-label=\\'#= name #\\'>' + '<span class=\\'k-icon k-i-#= name.toLowerCase() #\\'></span>' + '</a>'),\n titlebar: template('<div class=\\'k-window-titlebar\\'>' + '<span class=\\'k-window-title\\'>#= title #</span>' + '<div class=\\'k-window-actions\\'></div>' + '</div>'),\n overlay: '<div class=\\'k-overlay\\'></div>',\n contentFrame: template('<iframe frameborder=\\'0\\' title=\\'#= title #\\' class=\\'' + KCONTENTFRAME + '\\' ' + 'src=\\'#= content.url #\\'>' + 'This page requires frames in order to show content' + '</iframe>'),\n resizeHandle: template('<div class=\\'k-resize-handle k-resize-#= data #\\'></div>')\n };\n function WindowResizing(wnd) {\n var that = this;\n that.owner = wnd;\n that._preventDragging = false;\n that._draggable = new Draggable(wnd.wrapper, {\n filter: '>' + KWINDOWRESIZEHANDLES,\n group: wnd.wrapper.id + '-resizing',\n dragstart: proxy(that.dragstart, that),\n drag: proxy(that.drag, that),\n dragend: proxy(that.dragend, that)\n });\n that._draggable.userEvents.bind('press', proxy(that.addOverlay, that));\n that._draggable.userEvents.bind('release', proxy(that.removeOverlay, that));\n }\n WindowResizing.prototype = {\n addOverlay: function () {\n this.owner.wrapper.append(templates.overlay);\n },\n removeOverlay: function () {\n this.owner.wrapper.find(KOVERLAY).remove();\n },\n dragstart: function (e) {\n var that = this;\n var wnd = that.owner;\n var wrapper = wnd.wrapper;\n that._preventDragging = wnd.trigger(RESIZESTART);\n if (that._preventDragging) {\n return;\n }\n that.elementPadding = parseInt(wrapper.css('padding-top'), 10);\n that.initialPosition = kendo.getOffset(wrapper, 'position');\n that.resizeDirection = e.currentTarget.prop('className').replace('k-resize-handle k-resize-', '');\n that.initialSize = {\n width: wrapper.outerWidth(),\n height: wrapper.outerHeight()\n };\n wnd._updateBoundaries();\n that.containerOffset = wnd.containment ? wnd.containment.position : kendo.getOffset(wnd.appendTo, 'position');\n var offsetParent = wrapper.offsetParent();\n if (offsetParent.is('html')) {\n that.containerOffset.top = that.containerOffset.left = 0;\n } else {\n var marginTop = offsetParent.css('margin-top');\n var marginLeft = offsetParent.css('margin-left');\n var hasMargin = !zero.test(marginTop) || !zero.test(marginLeft);\n if (hasMargin) {\n var wrapperPosition = getPosition(wrapper[0]);\n var relativeElMarginLeft = wrapperPosition.left - that.containerOffset.left - that.initialPosition.left;\n var relativeElMarginTop = wrapperPosition.top - that.containerOffset.top - that.initialPosition.top;\n that._relativeElMarginLeft = relativeElMarginLeft > 1 ? relativeElMarginLeft : 0;\n that._relativeElMarginTop = relativeElMarginTop > 1 ? relativeElMarginTop : 0;\n that.initialPosition.left += that._relativeElMarginLeft;\n that.initialPosition.top += that._relativeElMarginTop;\n }\n }\n wrapper.children(KWINDOWRESIZEHANDLES).not(e.currentTarget).hide();\n $(BODY).css(CURSOR, e.currentTarget.css(CURSOR));\n },\n drag: function (e) {\n if (this._preventDragging) {\n return;\n }\n var that = this, wnd = that.owner, wrapper = wnd.wrapper, options = wnd.options, position = options.position, direction = that.resizeDirection, containerOffset = that.containerOffset, initialPosition = that.initialPosition, initialSize = that.initialSize, containmentContext = wnd.containment && !wnd._isPinned, rtl = kendo.support.isRtl(wnd.containment), leftRtlOffset = containmentContext && rtl && wnd.containment.innerWidth() > wnd.containment.width ? kendo.support.scrollbar() : 0, scrollOffset = containmentContext ? {\n top: wnd.containment.scrollTop(),\n left: wnd.containment.scrollLeft()\n } : {\n top: 0,\n left: 0\n }, newWidth, newHeight, windowBottom, windowRight, x = Math.max(e.x.location, 0), y = Math.max(e.y.location, 0);\n if (direction.indexOf('e') >= 0) {\n if (wnd.containment && x - initialSize.width >= wnd.maxLeft - scrollOffset.left + containerOffset.left + leftRtlOffset) {\n newWidth = wnd.maxLeft + leftRtlOffset - initialPosition.left + initialSize.width - scrollOffset.left;\n } else {\n newWidth = x - initialPosition.left - containerOffset.left;\n }\n wrapper.width(constrain(newWidth, options.minWidth, options.maxWidth));\n } else if (direction.indexOf('w') >= 0) {\n windowRight = initialPosition.left + initialSize.width + containerOffset.left;\n newWidth = constrain(windowRight - x, options.minWidth, options.maxWidth);\n position.left = windowRight - newWidth - containerOffset.left - leftRtlOffset - (that._relativeElMarginLeft || 0) + scrollOffset.left;\n if (wnd.containment && position.left <= wnd.minLeft) {\n position.left = wnd.minLeft;\n newWidth = constrain(windowRight - leftRtlOffset - position.left - containerOffset.left + scrollOffset.left, options.minWidth, options.maxWidth);\n }\n wrapper.css({\n left: position.left,\n width: newWidth\n });\n }\n var newWindowTop = y;\n if (wnd.options.pinned) {\n newWindowTop -= $(window).scrollTop();\n }\n if (direction.indexOf('s') >= 0) {\n newHeight = newWindowTop - initialPosition.top - that.elementPadding - containerOffset.top;\n if (newWindowTop - initialSize.height - that.elementPadding >= wnd.maxTop + containerOffset.top - scrollOffset.top) {\n newHeight = wnd.maxTop - initialPosition.top + initialSize.height - scrollOffset.top;\n }\n wrapper.height(constrain(newHeight, options.minHeight, options.maxHeight));\n } else if (direction.indexOf('n') >= 0) {\n windowBottom = initialPosition.top + initialSize.height + containerOffset.top;\n newHeight = constrain(windowBottom - newWindowTop, options.minHeight, options.maxHeight);\n position.top = windowBottom - newHeight - containerOffset.top - (that._relativeElMarginTop || 0) + scrollOffset.top;\n if (position.top <= wnd.minTop && wnd.containment) {\n position.top = wnd.minTop;\n newHeight = constrain(windowBottom - position.top - containerOffset.top + scrollOffset.top, options.minHeight, options.maxHeight);\n }\n wrapper.css({\n top: position.top,\n height: newHeight\n });\n }\n if (newWidth) {\n wnd.options.width = newWidth + 'px';\n }\n if (newHeight) {\n wnd.options.height = newHeight + 'px';\n }\n wnd.resize();\n },\n dragend: function (e) {\n if (this._preventDragging) {\n return;\n }\n var that = this, wnd = that.owner, wrapper = wnd.wrapper;\n wrapper.children(KWINDOWRESIZEHANDLES).not(e.currentTarget).show();\n $(BODY).css(CURSOR, '');\n if (wnd.touchScroller) {\n wnd.touchScroller.reset();\n }\n if (e.keyCode == 27) {\n wrapper.css(that.initialPosition).css(that.initialSize);\n }\n wnd.trigger(RESIZEEND);\n return false;\n },\n destroy: function () {\n if (this._draggable) {\n this._draggable.destroy();\n }\n this._draggable = this.owner = null;\n }\n };\n function WindowDragging(wnd, dragHandle) {\n var that = this;\n that.owner = wnd;\n that._preventDragging = false;\n that._draggable = new Draggable(wnd.wrapper, {\n filter: dragHandle,\n group: wnd.wrapper.id + '-moving',\n dragstart: proxy(that.dragstart, that),\n drag: proxy(that.drag, that),\n dragend: proxy(that.dragend, that),\n dragcancel: proxy(that.dragcancel, that)\n });\n that._draggable.userEvents.stopPropagation = false;\n }\n WindowDragging.prototype = {\n dragstart: function (e) {\n var wnd = this.owner, draggable = wnd.options.draggable, element = wnd.element, actions = element.find('.k-window-actions'), containerOffset = kendo.getOffset(wnd.appendTo);\n this._preventDragging = wnd.trigger(DRAGSTART) || !draggable;\n if (this._preventDragging || wnd.isMaximized()) {\n return;\n }\n wnd.initialWindowPosition = kendo.getOffset(wnd.wrapper, 'position');\n wnd.initialPointerPosition = {\n left: wnd.options.position.left,\n top: wnd.options.position.top\n };\n wnd.startPosition = {\n left: e.x.client - wnd.initialWindowPosition.left,\n top: e.y.client - wnd.initialWindowPosition.top\n };\n wnd._updateBoundaries();\n if (!wnd.containment) {\n if (actions.length > 0) {\n wnd.minLeft = outerWidth(actions) + parseInt(actions.css('right'), 10) - outerWidth(element);\n } else {\n wnd.minLeft = 20 - outerWidth(element);\n }\n wnd.minLeft -= containerOffset.left;\n wnd.minTop = -containerOffset.top;\n }\n wnd.wrapper.append(templates.overlay).children(KWINDOWRESIZEHANDLES).hide();\n $(BODY).css(CURSOR, e.currentTarget.css(CURSOR));\n },\n drag: function (e) {\n var wnd = this.owner;\n var position = wnd.options.position;\n var axis = wnd.options.draggable.axis;\n var left;\n var top;\n if (this._preventDragging || wnd.isMaximized()) {\n return;\n }\n if (!axis || axis.toLowerCase() === 'x') {\n left = e.x.client - wnd.startPosition.left;\n if (wnd.containment && !wnd._isPinned) {\n left += wnd.containment.scrollLeft();\n }\n position.left = constrain(left, wnd.minLeft, wnd.maxLeft);\n }\n if (!axis || axis.toLowerCase() === 'y') {\n top = e.y.client - wnd.startPosition.top;\n if (wnd.containment && !wnd._isPinned) {\n top += wnd.containment.scrollTop();\n }\n position.top = constrain(top, wnd.minTop, wnd.maxTop);\n }\n if (kendo.support.transforms) {\n $(wnd.wrapper).css('transform', 'translate(' + (position.left - wnd.initialPointerPosition.left) + 'px, ' + (position.top - wnd.initialPointerPosition.top) + 'px)');\n } else {\n $(wnd.wrapper).css(position);\n }\n },\n _finishDrag: function () {\n var wnd = this.owner;\n wnd.wrapper.children(KWINDOWRESIZEHANDLES).toggle(!wnd.options.isMinimized).end().find(KOVERLAY).remove();\n $(BODY).css(CURSOR, '');\n },\n dragcancel: function (e) {\n if (this._preventDragging) {\n return;\n }\n this._finishDrag();\n e.currentTarget.closest(KWINDOW).css(this.owner.initialWindowPosition);\n },\n dragend: function () {\n var wnd = this.owner;\n if (this._preventDragging || wnd.isMaximized()) {\n return;\n }\n $(wnd.wrapper).css(wnd.options.position).css('transform', '');\n this._finishDrag();\n wnd.trigger(DRAGEND);\n return false;\n },\n destroy: function () {\n if (this._draggable) {\n this._draggable.destroy();\n }\n this._draggable = this.owner = null;\n }\n };\n kendo.ui.plugin(Window);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.view', [\n 'kendo.core',\n 'kendo.fx',\n 'kendo.mobile.scroller',\n 'kendo.view'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.view',\n name: 'View',\n category: 'mobile',\n description: 'Mobile View',\n depends: [\n 'core',\n 'fx',\n 'mobile.scroller',\n 'view'\n ],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, mobile = kendo.mobile, ui = mobile.ui, attr = kendo.attr, Widget = ui.Widget, ViewClone = kendo.ViewClone, INIT = 'init', UI_OVERLAY = '<div style=\"height: 100%; width: 100%; position: absolute; top: 0; left: 0; z-index: 20000; display: none\"></div>', BEFORE_SHOW = 'beforeShow', SHOW = 'show', AFTER_SHOW = 'afterShow', BEFORE_HIDE = 'beforeHide', TRANSITION_END = 'transitionEnd', TRANSITION_START = 'transitionStart', HIDE = 'hide', DESTROY = 'destroy', attrValue = kendo.attrValue, roleSelector = kendo.roleSelector, directiveSelector = kendo.directiveSelector, compileMobileDirective = kendo.compileMobileDirective;\n function initPopOvers(element) {\n var popovers = element.find(roleSelector('popover')), idx, length, roles = ui.roles;\n for (idx = 0, length = popovers.length; idx < length; idx++) {\n kendo.initWidget(popovers[idx], {}, roles);\n }\n }\n function preventScrollIfNotInput(e) {\n if (!kendo.triggeredByInput(e)) {\n e.preventDefault();\n }\n }\n var View = Widget.extend({\n init: function (element, options) {\n Widget.fn.init.call(this, element, options);\n this.params = {};\n $.extend(this, options);\n this.transition = this.transition || this.defaultTransition;\n this._id();\n if (!this.options.$angular) {\n this._layout();\n this._overlay();\n this._scroller();\n this._model();\n } else {\n this._overlay();\n }\n },\n events: [\n INIT,\n BEFORE_SHOW,\n SHOW,\n AFTER_SHOW,\n BEFORE_HIDE,\n HIDE,\n DESTROY,\n TRANSITION_START,\n TRANSITION_END\n ],\n options: {\n name: 'View',\n title: '',\n layout: null,\n getLayout: $.noop,\n reload: false,\n transition: '',\n defaultTransition: '',\n useNativeScrolling: false,\n stretch: false,\n zoom: false,\n model: null,\n modelScope: window,\n scroller: {},\n initWidgets: true\n },\n enable: function (enable) {\n if (typeof enable == 'undefined') {\n enable = true;\n }\n if (enable) {\n this.overlay.hide();\n } else {\n this.overlay.show();\n }\n },\n destroy: function () {\n if (this.layout) {\n this.layout.detach(this);\n }\n this.trigger(DESTROY);\n Widget.fn.destroy.call(this);\n if (this.scroller) {\n this.scroller.destroy();\n }\n if (this.options.$angular) {\n this.element.scope().$destroy();\n }\n kendo.destroy(this.element);\n },\n purge: function () {\n this.destroy();\n this.element.remove();\n },\n triggerBeforeShow: function () {\n if (this.trigger(BEFORE_SHOW, { view: this })) {\n return false;\n }\n return true;\n },\n triggerBeforeHide: function () {\n if (this.trigger(BEFORE_HIDE, { view: this })) {\n return false;\n }\n return true;\n },\n showStart: function () {\n var element = this.element;\n element.css('display', '');\n if (!this.inited) {\n this.inited = true;\n this.trigger(INIT, { view: this });\n } else {\n this._invokeNgController();\n }\n if (this.layout) {\n this.layout.attach(this);\n }\n this._padIfNativeScrolling();\n this.trigger(SHOW, { view: this });\n kendo.resize(element);\n },\n showEnd: function () {\n this.trigger(AFTER_SHOW, { view: this });\n this._padIfNativeScrolling();\n },\n hideEnd: function () {\n var that = this;\n that.element.hide();\n that.trigger(HIDE, { view: that });\n if (that.layout) {\n that.layout.trigger(HIDE, {\n view: that,\n layout: that.layout\n });\n }\n },\n beforeTransition: function (type) {\n this.trigger(TRANSITION_START, { type: type });\n },\n afterTransition: function (type) {\n this.trigger(TRANSITION_END, { type: type });\n },\n _padIfNativeScrolling: function () {\n if (mobile.appLevelNativeScrolling()) {\n var isAndroid = kendo.support.mobileOS && kendo.support.mobileOS.android, skin = mobile.application.skin() || '', isAndroidForced = mobile.application.os.android || skin.indexOf('android') > -1, hasPlatformIndependentSkin = skin === 'flat' || skin.indexOf('material') > -1, topContainer = (isAndroid || isAndroidForced) && !hasPlatformIndependentSkin ? 'footer' : 'header', bottomContainer = (isAndroid || isAndroidForced) && !hasPlatformIndependentSkin ? 'header' : 'footer';\n this.content.css({\n paddingTop: this[topContainer].height(),\n paddingBottom: this[bottomContainer].height()\n });\n }\n },\n contentElement: function () {\n var that = this;\n return that.options.stretch ? that.content : that.scrollerContent;\n },\n clone: function () {\n return new ViewClone(this);\n },\n _scroller: function () {\n var that = this;\n if (mobile.appLevelNativeScrolling()) {\n return;\n }\n if (that.options.stretch) {\n that.content.addClass('km-stretched-view');\n } else {\n that.content.kendoMobileScroller($.extend(that.options.scroller, {\n zoom: that.options.zoom,\n useNative: that.options.useNativeScrolling\n }));\n that.scroller = that.content.data('kendoMobileScroller');\n that.scrollerContent = that.scroller.scrollElement;\n }\n if (kendo.support.kineticScrollNeeded) {\n $(that.element).on('touchmove', '.km-header', preventScrollIfNotInput);\n if (!that.options.useNativeScrolling && !that.options.stretch) {\n $(that.element).on('touchmove', '.km-content', preventScrollIfNotInput);\n }\n }\n },\n _model: function () {\n var that = this, element = that.element, model = that.options.model;\n if (typeof model === 'string') {\n model = kendo.getter(model)(that.options.modelScope);\n }\n that.model = model;\n initPopOvers(element);\n that.element.css('display', '');\n if (that.options.initWidgets) {\n if (model) {\n kendo.bind(element, model, ui, kendo.ui, kendo.dataviz.ui);\n } else {\n mobile.init(element.children());\n }\n }\n that.element.css('display', 'none');\n },\n _id: function () {\n var element = this.element, idAttrValue = element.attr('id') || '';\n this.id = attrValue(element, 'url') || '#' + idAttrValue;\n if (this.id == '#') {\n this.id = kendo.guid();\n element.attr('id', this.id);\n }\n },\n _layout: function () {\n var contentSelector = roleSelector('content'), element = this.element;\n element.addClass('km-view');\n this.header = element.children(roleSelector('header')).addClass('km-header');\n this.footer = element.children(roleSelector('footer')).addClass('km-footer');\n if (!element.children(contentSelector)[0]) {\n element.wrapInner('<div ' + attr('role') + '=\"content\"></div>');\n }\n this.content = element.children(roleSelector('content')).addClass('km-content');\n this.element.prepend(this.header).append(this.footer);\n this.layout = this.options.getLayout(this.layout);\n if (this.layout) {\n this.layout.setup(this);\n }\n },\n _overlay: function () {\n this.overlay = $(UI_OVERLAY).appendTo(this.element);\n },\n _invokeNgController: function () {\n var controller, scope;\n if (this.options.$angular) {\n controller = this.element.controller();\n scope = this.options.$angular[0];\n if (controller) {\n var callback = $.proxy(this, '_callController', controller, scope);\n if (/^\\$(digest|apply)$/.test(scope.$$phase)) {\n callback();\n } else {\n scope.$apply(callback);\n }\n }\n }\n },\n _callController: function (controller, scope) {\n this.element.injector().invoke(controller.constructor, controller, { $scope: scope });\n }\n });\n function initWidgets(collection) {\n collection.each(function () {\n kendo.initWidget($(this), {}, ui.roles);\n });\n }\n var Layout = Widget.extend({\n init: function (element, options) {\n Widget.fn.init.call(this, element, options);\n element = this.element;\n this.header = element.children(this._locate('header')).addClass('km-header');\n this.footer = element.children(this._locate('footer')).addClass('km-footer');\n this.elements = this.header.add(this.footer);\n initPopOvers(element);\n if (!this.options.$angular) {\n kendo.mobile.init(this.element.children());\n }\n this.element.detach();\n this.trigger(INIT, { layout: this });\n },\n _locate: function (selectors) {\n return this.options.$angular ? directiveSelector(selectors) : roleSelector(selectors);\n },\n options: {\n name: 'Layout',\n id: null,\n platform: null\n },\n events: [\n INIT,\n SHOW,\n HIDE\n ],\n setup: function (view) {\n if (!view.header[0]) {\n view.header = this.header;\n }\n if (!view.footer[0]) {\n view.footer = this.footer;\n }\n },\n detach: function (view) {\n var that = this;\n if (view.header === that.header && that.header[0]) {\n view.element.prepend(that.header.detach()[0].cloneNode(true));\n }\n if (view.footer === that.footer && that.footer.length) {\n view.element.append(that.footer.detach()[0].cloneNode(true));\n }\n },\n attach: function (view) {\n var that = this, previousView = that.currentView;\n if (previousView) {\n that.detach(previousView);\n }\n if (view.header === that.header) {\n that.header.detach();\n view.element.children(roleSelector('header')).remove();\n view.element.prepend(that.header);\n }\n if (view.footer === that.footer) {\n that.footer.detach();\n view.element.children(roleSelector('footer')).remove();\n view.element.append(that.footer);\n }\n that.trigger(SHOW, {\n layout: that,\n view: view\n });\n that.currentView = view;\n }\n });\n var Observable = kendo.Observable, bodyRegExp = /<body[^>]*>(([\\u000a\\u000d\\u2028\\u2029]|.)*)<\\/body>/i, LOAD_START = 'loadStart', LOAD_COMPLETE = 'loadComplete', SHOW_START = 'showStart', SAME_VIEW_REQUESTED = 'sameViewRequested', VIEW_SHOW = 'viewShow', VIEW_TYPE_DETERMINED = 'viewTypeDetermined', AFTER = 'after';\n var ViewEngine = Observable.extend({\n init: function (options) {\n var that = this, views, errorMessage, container, collection;\n Observable.fn.init.call(that);\n $.extend(that, options);\n that.sandbox = $('<div />');\n container = that.container;\n views = that._hideViews(container);\n that.rootView = views.first();\n if (!that.rootView[0] && options.rootNeeded) {\n if (container[0] == kendo.mobile.application.element[0]) {\n errorMessage = 'Your kendo mobile application element does not contain any direct child elements with data-role=\"view\" attribute set. Make sure that you instantiate the mobile application using the correct container.';\n } else {\n errorMessage = 'Your pane element does not contain any direct child elements with data-role=\"view\" attribute set.';\n }\n throw new Error(errorMessage);\n }\n that.layouts = {};\n that.viewContainer = new kendo.ViewContainer(that.container);\n that.viewContainer.bind('accepted', function (e) {\n e.view.params = that.params;\n });\n that.viewContainer.bind('complete', function (e) {\n that.trigger(VIEW_SHOW, { view: e.view });\n });\n that.viewContainer.bind(AFTER, function () {\n that.trigger(AFTER);\n });\n this.getLayoutProxy = $.proxy(this, '_getLayout');\n that._setupLayouts(container);\n collection = container.children(that._locate('modalview drawer'));\n if (that.$angular) {\n that.$angular[0].viewOptions = {\n defaultTransition: that.transition,\n loader: that.loader,\n container: that.container,\n getLayout: that.getLayoutProxy\n };\n collection.each(function (idx, element) {\n compileMobileDirective($(element), options.$angular[0]);\n });\n } else {\n initWidgets(collection);\n }\n this.bind(this.events, options);\n },\n events: [\n SHOW_START,\n AFTER,\n VIEW_SHOW,\n LOAD_START,\n LOAD_COMPLETE,\n SAME_VIEW_REQUESTED,\n VIEW_TYPE_DETERMINED\n ],\n destroy: function () {\n kendo.destroy(this.container);\n for (var id in this.layouts) {\n this.layouts[id].destroy();\n }\n },\n view: function () {\n return this.viewContainer.view;\n },\n showView: function (url, transition, params) {\n url = url.replace(new RegExp('^' + this.remoteViewURLPrefix), '');\n if (url === '' && this.remoteViewURLPrefix) {\n url = '/';\n }\n if (url.replace(/^#/, '') === this.url) {\n this.trigger(SAME_VIEW_REQUESTED);\n return false;\n }\n this.trigger(SHOW_START);\n var that = this, showClosure = function (view) {\n return that.viewContainer.show(view, transition, url);\n }, element = that._findViewElement(url), view = kendo.widgetInstance(element);\n that.url = url.replace(/^#/, '');\n that.params = params;\n if (view && view.reload) {\n view.purge();\n element = [];\n }\n this.trigger(VIEW_TYPE_DETERMINED, {\n remote: element.length === 0,\n url: url\n });\n if (element[0]) {\n if (!view) {\n view = that._createView(element);\n }\n return showClosure(view);\n } else {\n if (this.serverNavigation) {\n location.href = url;\n } else {\n that._loadView(url, showClosure);\n }\n return true;\n }\n },\n append: function (html, url) {\n var sandbox = this.sandbox, urlPath = (url || '').split('?')[0], container = this.container, views, modalViews, view;\n if (bodyRegExp.test(html)) {\n html = RegExp.$1;\n }\n sandbox[0].innerHTML = html;\n container.append(sandbox.children('script, style'));\n views = this._hideViews(sandbox);\n view = views.first();\n if (!view.length) {\n views = view = sandbox.wrapInner('<div data-role=view />').children();\n }\n if (urlPath) {\n view.hide().attr(attr('url'), urlPath);\n }\n this._setupLayouts(sandbox);\n modalViews = sandbox.children(this._locate('modalview drawer'));\n container.append(sandbox.children(this._locate('layout modalview drawer')).add(views));\n initWidgets(modalViews);\n return this._createView(view);\n },\n _locate: function (selectors) {\n return this.$angular ? directiveSelector(selectors) : roleSelector(selectors);\n },\n _findViewElement: function (url) {\n var element, urlPath = url.split('?')[0];\n if (!urlPath) {\n return this.rootView;\n }\n element = this.container.children('[' + attr('url') + '=\\'' + urlPath + '\\']');\n if (!element[0] && urlPath.indexOf('/') === -1) {\n element = this.container.children(urlPath.charAt(0) === '#' ? urlPath : '#' + urlPath);\n }\n return element;\n },\n _createView: function (element) {\n if (this.$angular) {\n return compileMobileDirective(element, this.$angular[0]);\n } else {\n return kendo.initWidget(element, {\n defaultTransition: this.transition,\n loader: this.loader,\n container: this.container,\n getLayout: this.getLayoutProxy,\n modelScope: this.modelScope,\n reload: attrValue(element, 'reload')\n }, ui.roles);\n }\n },\n _getLayout: function (name) {\n if (name === '') {\n return null;\n }\n return name ? this.layouts[name] : this.layouts[this.layout];\n },\n _loadView: function (url, callback) {\n if (this._xhr) {\n this._xhr.abort();\n }\n this.trigger(LOAD_START);\n this._xhr = $.get(kendo.absoluteURL(url, this.remoteViewURLPrefix), 'html').always($.proxy(this, '_xhrComplete', callback, url));\n },\n _xhrComplete: function (callback, url, response) {\n var success = true;\n if (typeof response === 'object') {\n if (response.status === 0) {\n if (response.responseText && response.responseText.length > 0) {\n success = true;\n response = response.responseText;\n } else {\n return;\n }\n }\n }\n this.trigger(LOAD_COMPLETE);\n if (success) {\n callback(this.append(response, url));\n }\n },\n _hideViews: function (container) {\n return container.children(this._locate('view splitview')).hide();\n },\n _setupLayouts: function (element) {\n var that = this, layout;\n element.children(that._locate('layout')).each(function () {\n if (that.$angular) {\n layout = compileMobileDirective($(this), that.$angular[0]);\n } else {\n layout = kendo.initWidget($(this), {}, ui.roles);\n }\n var platform = layout.options.platform;\n if (!platform || platform === mobile.application.os.name) {\n that.layouts[layout.options.id] = layout;\n } else {\n layout.destroy();\n }\n });\n }\n });\n kendo.mobile.ViewEngine = ViewEngine;\n ui.plugin(View);\n ui.plugin(Layout);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.loader', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.loader',\n name: 'Loader',\n category: 'mobile',\n description: 'Mobile Loader',\n depends: ['core'],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.mobile.ui, Widget = ui.Widget, CAPTURE_EVENTS = $.map(kendo.eventMap, function (value) {\n return value;\n }).join(' ').split(' ');\n var Loader = Widget.extend({\n init: function (container, options) {\n var that = this, element = $('<div class=\"km-loader\"><span class=\"km-loading km-spin\"></span><span class=\"km-loading-left\"></span><span class=\"km-loading-right\"></span></div>');\n Widget.fn.init.call(that, element, options);\n that.container = container;\n that.captureEvents = false;\n that._attachCapture();\n element.append(that.options.loading).hide().appendTo(container);\n },\n options: {\n name: 'Loader',\n loading: '<h1>Loading...</h1>',\n timeout: 100\n },\n show: function () {\n var that = this;\n clearTimeout(that._loading);\n if (that.options.loading === false) {\n return;\n }\n that.captureEvents = true;\n that._loading = setTimeout(function () {\n that.element.show();\n }, that.options.timeout);\n },\n hide: function () {\n this.captureEvents = false;\n clearTimeout(this._loading);\n this.element.hide();\n },\n changeMessage: function (message) {\n this.options.loading = message;\n this.element.find('>h1').html(message);\n },\n transition: function () {\n this.captureEvents = true;\n this.container.css('pointer-events', 'none');\n },\n transitionDone: function () {\n this.captureEvents = false;\n this.container.css('pointer-events', '');\n },\n _attachCapture: function () {\n var that = this;\n that.captureEvents = false;\n function capture(e) {\n if (that.captureEvents) {\n e.preventDefault();\n }\n }\n for (var i = 0; i < CAPTURE_EVENTS.length; i++) {\n that.container[0].addEventListener(CAPTURE_EVENTS[i], capture, true);\n }\n }\n });\n ui.plugin(Loader);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.pane', [\n 'kendo.mobile.view',\n 'kendo.mobile.loader'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.pane',\n name: 'Pane',\n category: 'mobile',\n description: 'Mobile Pane',\n depends: [\n 'mobile.view',\n 'mobile.loader'\n ],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, mobile = kendo.mobile, roleSelector = kendo.roleSelector, ui = mobile.ui, Widget = ui.Widget, ViewEngine = mobile.ViewEngine, View = ui.View, Loader = mobile.ui.Loader, EXTERNAL = 'external', HREF = 'href', DUMMY_HREF = '#!', NAVIGATE = 'navigate', VIEW_SHOW = 'viewShow', SAME_VIEW_REQUESTED = 'sameViewRequested', OS = kendo.support.mobileOS, SKIP_TRANSITION_ON_BACK_BUTTON = OS.ios && !OS.appMode && OS.flatVersion >= 700, WIDGET_RELS = /popover|actionsheet|modalview|drawer/, BACK = '#:back', attrValue = kendo.attrValue;\n var Pane = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n options = that.options;\n element = that.element;\n element.addClass('km-pane');\n if (that.options.collapsible) {\n element.addClass('km-collapsible-pane');\n }\n this.history = [];\n this.historyCallback = function (url, params, backButtonPressed) {\n var transition = that.transition;\n that.transition = null;\n if (SKIP_TRANSITION_ON_BACK_BUTTON && backButtonPressed) {\n transition = 'none';\n }\n return that.viewEngine.showView(url, transition, params);\n };\n this._historyNavigate = function (url) {\n if (url === BACK) {\n if (that.history.length === 1) {\n return;\n }\n that.history.pop();\n url = that.history[that.history.length - 1];\n } else {\n that.history.push(url);\n }\n that.historyCallback(url, kendo.parseQueryStringParams(url));\n };\n this._historyReplace = function (url) {\n var params = kendo.parseQueryStringParams(url);\n that.history[that.history.length - 1] = url;\n that.historyCallback(url, params);\n };\n that.loader = new Loader(element, { loading: that.options.loading });\n that.viewEngine = new ViewEngine({\n container: element,\n transition: options.transition,\n modelScope: options.modelScope,\n rootNeeded: !options.initial,\n serverNavigation: options.serverNavigation,\n remoteViewURLPrefix: options.root || '',\n layout: options.layout,\n $angular: options.$angular,\n loader: that.loader,\n showStart: function () {\n that.loader.transition();\n that.closeActiveDialogs();\n },\n after: function () {\n that.loader.transitionDone();\n },\n viewShow: function (e) {\n that.trigger(VIEW_SHOW, e);\n },\n loadStart: function () {\n that.loader.show();\n },\n loadComplete: function () {\n that.loader.hide();\n },\n sameViewRequested: function () {\n that.trigger(SAME_VIEW_REQUESTED);\n },\n viewTypeDetermined: function (e) {\n if (!e.remote || !that.options.serverNavigation) {\n that.trigger(NAVIGATE, { url: e.url });\n }\n }\n });\n this._setPortraitWidth();\n kendo.onResize(function () {\n that._setPortraitWidth();\n });\n that._setupAppLinks();\n },\n closeActiveDialogs: function () {\n var dialogs = this.element.find(roleSelector('actionsheet popover modalview')).filter(':visible');\n dialogs.each(function () {\n kendo.widgetInstance($(this), ui).close();\n });\n },\n navigateToInitial: function () {\n var initial = this.options.initial;\n if (initial) {\n this.navigate(initial);\n }\n return initial;\n },\n options: {\n name: 'Pane',\n portraitWidth: '',\n transition: '',\n layout: '',\n collapsible: false,\n initial: null,\n modelScope: window,\n loading: '<h1>Loading...</h1>'\n },\n events: [\n NAVIGATE,\n VIEW_SHOW,\n SAME_VIEW_REQUESTED\n ],\n append: function (html) {\n return this.viewEngine.append(html);\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.viewEngine.destroy();\n this.userEvents.destroy();\n },\n navigate: function (url, transition) {\n if (url instanceof View) {\n url = url.id;\n }\n this.transition = transition;\n this._historyNavigate(url);\n },\n replace: function (url, transition) {\n if (url instanceof View) {\n url = url.id;\n }\n this.transition = transition;\n this._historyReplace(url);\n },\n bindToRouter: function (router) {\n var that = this, history = this.history, viewEngine = this.viewEngine;\n router.bind('init', function (e) {\n var url = e.url, attrUrl = router.pushState ? url : '/';\n viewEngine.rootView.attr(kendo.attr('url'), attrUrl);\n var length = history.length;\n if (url === '/' && length) {\n router.navigate(history[length - 1], true);\n e.preventDefault();\n }\n });\n router.bind('routeMissing', function (e) {\n if (!that.historyCallback(e.url, e.params, e.backButtonPressed)) {\n e.preventDefault();\n }\n });\n router.bind('same', function () {\n that.trigger(SAME_VIEW_REQUESTED);\n });\n that._historyNavigate = function (url) {\n router.navigate(url);\n };\n that._historyReplace = function (url) {\n router.replace(url);\n };\n },\n hideLoading: function () {\n this.loader.hide();\n },\n showLoading: function () {\n this.loader.show();\n },\n changeLoadingMessage: function (message) {\n this.loader.changeMessage(message);\n },\n view: function () {\n return this.viewEngine.view();\n },\n _setPortraitWidth: function () {\n var width, portraitWidth = this.options.portraitWidth;\n if (portraitWidth) {\n width = kendo.mobile.application.element.is('.km-vertical') ? portraitWidth : 'auto';\n this.element.css('width', width);\n }\n },\n _setupAppLinks: function () {\n var that = this, linkRoles = 'tab', pressedButtonSelector = '[data-' + kendo.ns + 'navigate-on-press]', buttonSelectors = $.map([\n 'button',\n 'backbutton',\n 'detailbutton',\n 'listview-link'\n ], function (role) {\n return roleSelector(role) + ':not(' + pressedButtonSelector + ')';\n }).join(',');\n this.element.handler(this).on('down', roleSelector(linkRoles) + ',' + pressedButtonSelector, '_mouseup').on('click', roleSelector(linkRoles) + ',' + buttonSelectors + ',' + pressedButtonSelector, '_appLinkClick');\n this.userEvents = new kendo.UserEvents(this.element, {\n fastTap: true,\n filter: buttonSelectors,\n tap: function (e) {\n e.event.currentTarget = e.touch.currentTarget;\n that._mouseup(e.event);\n }\n });\n this.element.css('-ms-touch-action', '');\n },\n _appLinkClick: function (e) {\n var href = $(e.currentTarget).attr('href');\n var remote = href && href[0] !== '#' && this.options.serverNavigation;\n if (!remote && attrValue($(e.currentTarget), 'rel') != EXTERNAL) {\n e.preventDefault();\n }\n },\n _mouseup: function (e) {\n if (e.which > 1 || e.isDefaultPrevented()) {\n return;\n }\n var pane = this, link = $(e.currentTarget), transition = attrValue(link, 'transition'), rel = attrValue(link, 'rel') || '', target = attrValue(link, 'target'), href = link.attr(HREF), delayedTouchEnd = SKIP_TRANSITION_ON_BACK_BUTTON && link[0].offsetHeight === 0, remote = href && href[0] !== '#' && this.options.serverNavigation;\n if (delayedTouchEnd || remote || rel === EXTERNAL || typeof href === 'undefined' || href === DUMMY_HREF) {\n return;\n }\n link.attr(HREF, DUMMY_HREF);\n setTimeout(function () {\n link.attr(HREF, href);\n });\n if (rel.match(WIDGET_RELS)) {\n kendo.widgetInstance($(href), ui).openFor(link);\n if (rel === 'actionsheet' || rel === 'drawer') {\n e.stopPropagation();\n }\n } else {\n if (target === '_top') {\n pane = mobile.application.pane;\n } else if (target) {\n pane = $('#' + target).data('kendoMobilePane');\n }\n pane.navigate(href, transition);\n }\n e.preventDefault();\n }\n });\n Pane.wrap = function (element) {\n if (!element.is(roleSelector('view'))) {\n element = element.wrap('<div data-' + kendo.ns + 'role=\"view\" data-stretch=\"true\"></div>').parent();\n }\n var paneContainer = element.wrap('<div class=\"km-pane-wrapper\"><div></div></div>').parent(), pane = new Pane(paneContainer);\n pane.navigate('');\n return pane;\n };\n ui.plugin(Pane);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.popover', [\n 'kendo.popup',\n 'kendo.mobile.pane'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.popover',\n name: 'PopOver',\n category: 'mobile',\n description: 'The mobile PopOver widget represents a transient view which is displayed when the user taps on a navigational widget or area on the screen. ',\n depends: [\n 'popup',\n 'mobile.pane'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, mobile = kendo.mobile, ui = mobile.ui, HIDE = 'hide', OPEN = 'open', CLOSE = 'close', WRAPPER = '<div class=\"km-popup-wrapper\"></div>', ARROW = '<div class=\"km-popup-arrow\"></div>', OVERLAY = '<div class=\"km-popup-overlay\"></div>', DIRECTION_CLASSES = 'km-up km-down km-left km-right', Widget = ui.Widget, DIRECTIONS = {\n 'down': {\n origin: 'bottom center',\n position: 'top center'\n },\n 'up': {\n origin: 'top center',\n position: 'bottom center'\n },\n 'left': {\n origin: 'center left',\n position: 'center right',\n collision: 'fit flip'\n },\n 'right': {\n origin: 'center right',\n position: 'center left',\n collision: 'fit flip'\n }\n }, ANIMATION = {\n animation: {\n open: {\n effects: 'fade:in',\n duration: 0\n },\n close: {\n effects: 'fade:out',\n duration: 400\n }\n }\n }, DIMENSIONS = {\n 'horizontal': {\n offset: 'top',\n size: 'height'\n },\n 'vertical': {\n offset: 'left',\n size: 'width'\n }\n }, REVERSE = {\n 'up': 'down',\n 'down': 'up',\n 'left': 'right',\n 'right': 'left'\n };\n var Popup = Widget.extend({\n init: function (element, options) {\n var that = this, containerPopup = element.closest('.km-modalview-wrapper'), viewport = element.closest('.km-root').children('.km-pane').first(), container = containerPopup[0] ? containerPopup : viewport, popupOptions, axis;\n if (options.viewport) {\n viewport = options.viewport;\n } else if (!viewport[0]) {\n viewport = window;\n }\n if (options.container) {\n container = options.container;\n } else if (!container[0]) {\n container = document.body;\n }\n popupOptions = {\n viewport: viewport,\n copyAnchorStyles: false,\n autosize: true,\n open: function () {\n that.overlay.show();\n },\n activate: $.proxy(that._activate, that),\n deactivate: function () {\n that.overlay.hide();\n if (!that._apiCall) {\n that.trigger(HIDE);\n }\n that._apiCall = false;\n }\n };\n Widget.fn.init.call(that, element, options);\n element = that.element;\n options = that.options;\n element.wrap(WRAPPER).addClass('km-popup').show();\n axis = that.options.direction.match(/left|right/) ? 'horizontal' : 'vertical';\n that.dimensions = DIMENSIONS[axis];\n that.wrapper = element.parent().css({\n width: options.width,\n height: options.height\n }).addClass('km-popup-wrapper km-' + options.direction).hide();\n that.arrow = $(ARROW).prependTo(that.wrapper).hide();\n that.overlay = $(OVERLAY).appendTo(container).hide();\n popupOptions.appendTo = that.overlay;\n if (options.className) {\n that.overlay.addClass(options.className);\n }\n that.popup = new kendo.ui.Popup(that.wrapper, $.extend(true, popupOptions, ANIMATION, DIRECTIONS[options.direction]));\n },\n options: {\n name: 'Popup',\n width: 240,\n height: '',\n direction: 'down',\n container: null,\n viewport: null\n },\n events: [HIDE],\n show: function (target) {\n this.popup.options.anchor = $(target);\n this.popup.open();\n },\n hide: function () {\n this._apiCall = true;\n this.popup.close();\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.popup.destroy();\n this.overlay.remove();\n },\n target: function () {\n return this.popup.options.anchor;\n },\n _activate: function () {\n var that = this, direction = that.options.direction, dimensions = that.dimensions, offset = dimensions.offset, popup = that.popup, anchor = popup.options.anchor, anchorOffset = $(anchor).offset(), elementOffset = $(popup.element).offset(), cssClass = popup.flipped ? REVERSE[direction] : direction, min = that.arrow[dimensions.size]() * 2, max = that.element[dimensions.size]() - that.arrow[dimensions.size](), size = $(anchor)[dimensions.size](), offsetAmount = anchorOffset[offset] - elementOffset[offset] + size / 2;\n if (offsetAmount < min) {\n offsetAmount = min;\n }\n if (offsetAmount > max) {\n offsetAmount = max;\n }\n that.wrapper.removeClass(DIRECTION_CLASSES).addClass('km-' + cssClass);\n that.arrow.css(offset, offsetAmount).show();\n }\n });\n var PopOver = Widget.extend({\n init: function (element, options) {\n var that = this, popupOptions;\n that.initialOpen = false;\n Widget.fn.init.call(that, element, options);\n popupOptions = $.extend({\n className: 'km-popover-root',\n hide: function () {\n that.trigger(CLOSE);\n }\n }, this.options.popup);\n that.popup = new Popup(that.element, popupOptions);\n that.popup.overlay.on('move', function (e) {\n if (e.target == that.popup.overlay[0]) {\n e.preventDefault();\n }\n });\n that.pane = new ui.Pane(that.element, $.extend(this.options.pane, { $angular: this.options.$angular }));\n kendo.notify(that, ui);\n },\n options: {\n name: 'PopOver',\n popup: {},\n pane: {}\n },\n events: [\n OPEN,\n CLOSE\n ],\n open: function (target) {\n this.popup.show(target);\n if (!this.initialOpen) {\n if (!this.pane.navigateToInitial()) {\n this.pane.navigate('');\n }\n this.popup.popup._position();\n this.initialOpen = true;\n } else {\n this.pane.view()._invokeNgController();\n }\n },\n openFor: function (target) {\n this.open(target);\n this.trigger(OPEN, { target: this.popup.target() });\n },\n close: function () {\n this.popup.hide();\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.pane.destroy();\n this.popup.destroy();\n kendo.destroy(this.element);\n }\n });\n ui.plugin(Popup);\n ui.plugin(PopOver);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.shim', ['kendo.popup'], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.shim',\n name: 'Shim',\n category: 'mobile',\n description: 'Mobile Shim',\n depends: ['popup'],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.mobile.ui, Popup = kendo.ui.Popup, SHIM = '<div class=\"km-shim\"></div>', HIDE = 'hide', Widget = ui.Widget;\n var Shim = Widget.extend({\n init: function (element, options) {\n var that = this, app = kendo.mobile.application, os = kendo.support.mobileOS, osname = app ? app.os.name : os ? os.name : 'ios', ioswp = osname === 'ios' || osname === 'wp' || (app ? app.os.skin : false), bb = osname === 'blackberry', align = options.align || (ioswp ? 'bottom center' : bb ? 'center right' : 'center center'), position = options.position || (ioswp ? 'bottom center' : bb ? 'center right' : 'center center'), effect = options.effect || (ioswp ? 'slideIn:up' : bb ? 'slideIn:left' : 'fade:in'), shim = $(SHIM).handler(that).hide();\n Widget.fn.init.call(that, element, options);\n that.shim = shim;\n element = that.element;\n options = that.options;\n if (options.className) {\n that.shim.addClass(options.className);\n }\n if (!options.modal) {\n that.shim.on('down', '_hide');\n }\n (app ? app.element : $(document.body)).append(shim);\n that.popup = new Popup(that.element, {\n anchor: shim,\n modal: true,\n appendTo: shim,\n origin: align,\n position: position,\n animation: {\n open: {\n effects: effect,\n duration: options.duration\n },\n close: { duration: options.duration }\n },\n close: function (e) {\n var prevented = false;\n if (!that._apiCall) {\n prevented = that.trigger(HIDE);\n }\n if (prevented) {\n e.preventDefault();\n }\n that._apiCall = false;\n },\n deactivate: function () {\n shim.hide();\n },\n open: function () {\n shim.show();\n }\n });\n kendo.notify(that);\n },\n events: [HIDE],\n options: {\n name: 'Shim',\n modal: false,\n align: undefined,\n position: undefined,\n effect: undefined,\n duration: 200\n },\n show: function () {\n this.popup.open();\n },\n hide: function () {\n this._apiCall = true;\n this.popup.close();\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.shim.kendoDestroy();\n this.popup.destroy();\n this.shim.remove();\n },\n _hide: function (e) {\n if (!e || !$.contains(this.shim.children().children('.k-popup')[0], e.target)) {\n this.popup.close();\n }\n }\n });\n ui.plugin(Shim);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.modalview', [\n 'kendo.mobile.shim',\n 'kendo.mobile.view'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.modalview',\n name: 'ModalView',\n category: 'mobile',\n description: 'The Kendo ModalView is used to present self-contained functionality in the context of the current task.',\n depends: [\n 'mobile.shim',\n 'mobile.view'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.mobile.ui, Shim = ui.Shim, Widget = ui.Widget, BEFORE_OPEN = 'beforeOpen', OPEN = 'open', CLOSE = 'close', INIT = 'init', WRAP = '<div class=\"km-modalview-wrapper\"></div>';\n var ModalView = ui.View.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n that._id();\n that._wrap();\n that._shim();\n if (!this.options.$angular) {\n that._layout();\n that._scroller();\n that._model();\n }\n that.element.css('display', '');\n that.trigger(INIT);\n },\n events: [\n INIT,\n BEFORE_OPEN,\n OPEN,\n CLOSE\n ],\n options: {\n name: 'ModalView',\n modal: true,\n width: null,\n height: null\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.shim.destroy();\n },\n open: function (target) {\n var that = this;\n that.target = $(target);\n that.shim.show();\n that._invokeNgController();\n that.trigger('show', { view: that });\n },\n openFor: function (target) {\n if (!this.trigger(BEFORE_OPEN, { target: target })) {\n this.open(target);\n this.trigger(OPEN, { target: target });\n }\n },\n close: function () {\n if (this.element.is(':visible') && !this.trigger(CLOSE)) {\n this.shim.hide();\n }\n },\n _wrap: function () {\n var that = this, element = that.element, options = that.options, width, height;\n width = element[0].style.width || 'auto';\n height = element[0].style.height || 'auto';\n element.addClass('km-modalview').wrap(WRAP);\n that.wrapper = element.parent().css({\n width: options.width || width || 300,\n height: options.height || height || 300\n }).addClass(height == 'auto' ? ' km-auto-height' : '');\n element.css({\n width: '',\n height: ''\n });\n },\n _shim: function () {\n var that = this;\n that.shim = new Shim(that.wrapper, {\n modal: that.options.modal,\n position: 'center center',\n align: 'center center',\n effect: 'fade:in',\n className: 'km-modalview-root',\n hide: function (e) {\n if (that.trigger(CLOSE)) {\n e.preventDefault();\n }\n }\n });\n }\n });\n ui.plugin(ModalView);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.drawer', [\n 'kendo.mobile.view',\n 'kendo.userevents'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.drawer',\n name: 'Drawer',\n category: 'mobile',\n description: 'The Kendo Mobile Drawer widget provides slide to reveal global application toolbox',\n depends: [\n 'mobile.view',\n 'userevents'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, mobile = kendo.mobile, os = kendo.support.mobileOS, Transition = kendo.effects.Transition, roleSelector = kendo.roleSelector, AXIS = 'x', ui = mobile.ui, SWIPE_TO_OPEN = !(os.ios && os.majorVersion == 7 && !os.appMode), BEFORE_SHOW = 'beforeShow', INIT = 'init', SHOW = 'show', HIDE = 'hide', AFTER_HIDE = 'afterHide', NULL_VIEW = { enable: $.noop };\n var Drawer = ui.View.extend({\n init: function (element, options) {\n $(element).parent().prepend(element);\n mobile.ui.Widget.fn.init.call(this, element, options);\n if (!this.options.$angular) {\n this._layout();\n this._scroller();\n }\n this._model();\n var pane = this.element.closest(roleSelector('pane')).data('kendoMobilePane'), userEvents;\n if (pane) {\n this.pane = pane;\n this.pane.bind('viewShow', function (e) {\n drawer._viewShow(e);\n });\n this.pane.bind('sameViewRequested', function () {\n drawer.hide();\n });\n userEvents = this.userEvents = new kendo.UserEvents(pane.element, {\n fastTap: true,\n filter: roleSelector('view splitview'),\n allowSelection: true\n });\n } else {\n this.currentView = NULL_VIEW;\n var container = $(this.options.container);\n if (!container) {\n throw new Error('The drawer needs a container configuration option set.');\n }\n userEvents = this.userEvents = new kendo.UserEvents(container, {\n fastTap: true,\n allowSelection: true\n });\n this._attachTransition(container);\n }\n var drawer = this;\n var hide = function (e) {\n if (drawer.visible) {\n drawer.hide();\n e.preventDefault();\n }\n };\n if (this.options.swipeToOpen && SWIPE_TO_OPEN) {\n userEvents.bind('press', function () {\n drawer.transition.cancel();\n });\n userEvents.bind('start', function (e) {\n drawer._start(e);\n });\n userEvents.bind('move', function (e) {\n drawer._update(e);\n });\n userEvents.bind('end', function (e) {\n drawer._end(e);\n });\n userEvents.bind('tap', hide);\n } else {\n userEvents.bind('press', hide);\n }\n this.leftPositioned = this.options.position === 'left';\n this.visible = false;\n this.element.hide().addClass('km-drawer').addClass(this.leftPositioned ? 'km-left-drawer' : 'km-right-drawer');\n this.trigger(INIT);\n },\n options: {\n name: 'Drawer',\n position: 'left',\n views: [],\n swipeToOpenViews: [],\n swipeToOpen: true,\n title: '',\n container: null\n },\n events: [\n BEFORE_SHOW,\n HIDE,\n AFTER_HIDE,\n INIT,\n SHOW\n ],\n show: function () {\n if (this._activate()) {\n this._show();\n }\n },\n hide: function () {\n if (!this.currentView) {\n return;\n }\n this.currentView.enable();\n Drawer.current = null;\n this._moveViewTo(0);\n this.trigger(HIDE, { view: this });\n },\n openFor: function () {\n if (this.visible) {\n this.hide();\n } else {\n this.show();\n }\n },\n destroy: function () {\n ui.View.fn.destroy.call(this);\n this.userEvents.destroy();\n },\n _activate: function () {\n if (this.visible) {\n return true;\n }\n var visibleOnCurrentView = this._currentViewIncludedIn(this.options.views);\n if (!visibleOnCurrentView || this.trigger(BEFORE_SHOW, { view: this })) {\n return false;\n }\n this._setAsCurrent();\n this.element.show();\n this.trigger(SHOW, { view: this });\n this._invokeNgController();\n return true;\n },\n _currentViewIncludedIn: function (views) {\n if (!this.pane || !views.length) {\n return true;\n }\n var view = this.pane.view();\n return $.inArray(view.id.replace('#', ''), views) > -1 || $.inArray(view.element.attr('id'), views) > -1;\n },\n _show: function () {\n this.currentView.enable(false);\n this.visible = true;\n var offset = this.element.width();\n if (!this.leftPositioned) {\n offset = -offset;\n }\n this._moveViewTo(offset);\n },\n _setAsCurrent: function () {\n if (Drawer.last !== this) {\n if (Drawer.last) {\n Drawer.last.element.hide();\n }\n this.element.show();\n }\n Drawer.last = this;\n Drawer.current = this;\n },\n _moveViewTo: function (offset) {\n this.userEvents.cancel();\n this.transition.moveTo({\n location: offset,\n duration: 400,\n ease: Transition.easeOutExpo\n });\n },\n _viewShow: function (e) {\n if (this.currentView) {\n this.currentView.enable();\n }\n if (this.currentView === e.view) {\n this.hide();\n return;\n }\n this.currentView = e.view;\n this._attachTransition(e.view.element);\n },\n _attachTransition: function (element) {\n var that = this, movable = this.movable, currentOffset = movable && movable.x;\n if (this.transition) {\n this.transition.cancel();\n this.movable.moveAxis('x', 0);\n }\n movable = this.movable = new kendo.ui.Movable(element);\n this.transition = new Transition({\n axis: AXIS,\n movable: this.movable,\n onEnd: function () {\n if (movable[AXIS] === 0) {\n element[0].style.cssText = '';\n that.element.hide();\n that.trigger(AFTER_HIDE);\n that.visible = false;\n }\n }\n });\n if (currentOffset) {\n element.addClass('k-fx-hidden');\n kendo.animationFrame(function () {\n element.removeClass('k-fx-hidden');\n that.movable.moveAxis(AXIS, currentOffset);\n that.hide();\n });\n }\n },\n _start: function (e) {\n var userEvents = e.sender;\n if (Math.abs(e.x.velocity) < Math.abs(e.y.velocity) || kendo.triggeredByInput(e.event) || !this._currentViewIncludedIn(this.options.swipeToOpenViews)) {\n userEvents.cancel();\n return;\n }\n var leftPositioned = this.leftPositioned, visible = this.visible, canMoveLeft = leftPositioned && visible || !leftPositioned && !Drawer.current, canMoveRight = !leftPositioned && visible || leftPositioned && !Drawer.current, leftSwipe = e.x.velocity < 0;\n if (canMoveLeft && leftSwipe || canMoveRight && !leftSwipe) {\n if (this._activate()) {\n userEvents.capture();\n return;\n }\n }\n userEvents.cancel();\n },\n _update: function (e) {\n var movable = this.movable, newPosition = movable.x + e.x.delta, limitedPosition;\n if (this.leftPositioned) {\n limitedPosition = Math.min(Math.max(0, newPosition), this.element.width());\n } else {\n limitedPosition = Math.max(Math.min(0, newPosition), -this.element.width());\n }\n this.movable.moveAxis(AXIS, limitedPosition);\n e.event.preventDefault();\n e.event.stopPropagation();\n },\n _end: function (e) {\n var velocity = e.x.velocity, pastHalf = Math.abs(this.movable.x) > this.element.width() / 2, velocityThreshold = 0.8, shouldShow;\n if (this.leftPositioned) {\n shouldShow = velocity > -velocityThreshold && (velocity > velocityThreshold || pastHalf);\n } else {\n shouldShow = velocity < velocityThreshold && (velocity < -velocityThreshold || pastHalf);\n }\n if (shouldShow) {\n this._show();\n } else {\n this.hide();\n }\n }\n });\n ui.plugin(Drawer);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.splitview', ['kendo.mobile.pane'], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.splitview',\n name: 'SplitView',\n category: 'mobile',\n description: 'The mobile SplitView is a tablet-specific view that consists of two or more mobile Pane widgets.',\n depends: ['mobile.pane']\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.mobile.ui, Widget = ui.Widget, EXPANED_PANE_SHIM = '<div class=\\'km-expanded-pane-shim\\'></div>', View = ui.View;\n var SplitView = View.extend({\n init: function (element, options) {\n var that = this, pane, modalViews;\n Widget.fn.init.call(that, element, options);\n element = that.element;\n $.extend(that, options);\n that._id();\n if (!that.options.$angular) {\n that._layout();\n that._overlay();\n } else {\n that._overlay();\n }\n that._style();\n modalViews = element.children(that._locate('modalview'));\n if (!that.options.$angular) {\n kendo.mobile.init(modalViews);\n } else {\n modalViews.each(function (idx, element) {\n kendo.compileMobileDirective($(element), options.$angular[0]);\n });\n }\n that.panes = [];\n that._paramsHistory = [];\n if (!that.options.$angular) {\n that.content.children(kendo.roleSelector('pane')).each(function () {\n pane = kendo.initWidget(this, {}, ui.roles);\n that.panes.push(pane);\n });\n } else {\n that.element.children(kendo.directiveSelector('pane')).each(function () {\n pane = kendo.compileMobileDirective($(this), options.$angular[0]);\n that.panes.push(pane);\n });\n that.element.children(kendo.directiveSelector('header footer')).each(function () {\n kendo.compileMobileDirective($(this), options.$angular[0]);\n });\n }\n that.expandedPaneShim = $(EXPANED_PANE_SHIM).appendTo(that.element);\n that._shimUserEvents = new kendo.UserEvents(that.expandedPaneShim, {\n fastTap: true,\n tap: function () {\n that.collapsePanes();\n }\n });\n },\n _locate: function (selectors) {\n return this.options.$angular ? kendo.directiveSelector(selectors) : kendo.roleSelector(selectors);\n },\n options: {\n name: 'SplitView',\n style: 'horizontal'\n },\n expandPanes: function () {\n this.element.addClass('km-expanded-splitview');\n },\n collapsePanes: function () {\n this.element.removeClass('km-expanded-splitview');\n },\n _layout: function () {\n var that = this, element = that.element;\n that.transition = kendo.attrValue(element, 'transition');\n kendo.mobile.ui.View.prototype._layout.call(this);\n kendo.mobile.init(this.header.add(this.footer));\n that.element.addClass('km-splitview');\n that.content.addClass('km-split-content');\n },\n _style: function () {\n var style = this.options.style, element = this.element, styles;\n if (style) {\n styles = style.split(' ');\n $.each(styles, function () {\n element.addClass('km-split-' + this);\n });\n }\n },\n showStart: function () {\n var that = this;\n that.element.css('display', '');\n if (!that.inited) {\n that.inited = true;\n $.each(that.panes, function () {\n if (this.options.initial) {\n this.navigateToInitial();\n } else {\n this.navigate('');\n }\n });\n that.trigger('init', { view: that });\n } else {\n this._invokeNgController();\n }\n that.trigger('show', { view: that });\n }\n });\n ui.plugin(SplitView);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.application', [\n 'kendo.mobile.pane',\n 'kendo.router'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.application',\n name: 'Application',\n category: 'mobile',\n description: 'The Mobile application provides a framework to build native looking web applications on mobile devices.',\n depends: [\n 'mobile.pane',\n 'router'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, mobile = kendo.mobile, support = kendo.support, Widget = mobile.ui.Widget, Pane = mobile.ui.Pane, DEFAULT_OS = 'ios7', OS = support.mobileOS, BERRYPHONEGAP = OS.device == 'blackberry' && OS.flatVersion >= 600 && OS.flatVersion < 1000 && OS.appMode, FONT_SIZE_COEF = 0.93, VERTICAL = 'km-vertical', CHROME = OS.browser === 'chrome', BROKEN_WEBVIEW_RESIZE = OS.ios && OS.flatVersion >= 700 && OS.flatVersion < 800 && (OS.appMode || CHROME), INITIALLY_HORIZONTAL = Math.abs(window.orientation) / 90 == 1, HORIZONTAL = 'km-horizontal', MOBILE_PLATFORMS = {\n ios7: {\n ios: true,\n browser: 'default',\n device: 'iphone',\n flatVersion: '700',\n majorVersion: '7',\n minorVersion: '0.0',\n name: 'ios',\n tablet: false\n },\n ios: {\n ios: true,\n browser: 'default',\n device: 'iphone',\n flatVersion: '612',\n majorVersion: '6',\n minorVersion: '1.2',\n name: 'ios',\n tablet: false\n },\n android: {\n android: true,\n browser: 'default',\n device: 'android',\n flatVersion: '442',\n majorVersion: '4',\n minorVersion: '4.2',\n name: 'android',\n tablet: false\n },\n blackberry: {\n blackberry: true,\n browser: 'default',\n device: 'blackberry',\n flatVersion: '710',\n majorVersion: '7',\n minorVersion: '1.0',\n name: 'blackberry',\n tablet: false\n },\n meego: {\n meego: true,\n browser: 'default',\n device: 'meego',\n flatVersion: '850',\n majorVersion: '8',\n minorVersion: '5.0',\n name: 'meego',\n tablet: false\n },\n wp: {\n wp: true,\n browser: 'default',\n device: 'wp',\n flatVersion: '800',\n majorVersion: '8',\n minorVersion: '0.0',\n name: 'wp',\n tablet: false\n }\n }, viewportTemplate = kendo.template('<meta content=\"initial-scale=#: data.scale #, maximum-scale=#: data.scale #, user-scalable=no#=data.height#\" name=\"viewport\" />', { usedWithBlock: false }), systemMeta = kendo.template('<meta name=\"apple-mobile-web-app-capable\" content=\"#= data.webAppCapable === false ? \\'no\\' : \\'yes\\' #\" /> ' + '<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"#=data.statusBarStyle#\" /> ' + '<meta name=\"msapplication-tap-highlight\" content=\"no\" /> ', { usedWithBlock: false }), clipTemplate = kendo.template('<style>.km-view { clip: rect(0 #= data.width #px #= data.height #px 0); }</style>', { usedWithBlock: false }), ENABLE_CLIP = OS.android && OS.browser != 'chrome' || OS.blackberry, iconMeta = kendo.template('<link rel=\"apple-touch-icon' + (OS.android ? '-precomposed' : '') + '\" # if(data.size) { # sizes=\"#=data.size#\" #}# href=\"#=data.icon#\" />', { usedWithBlock: false }), HIDEBAR = (OS.device == 'iphone' || OS.device == 'ipod') && OS.majorVersion < 7, SUPPORT_SWIPE_TO_GO_BACK = (OS.device == 'iphone' || OS.device == 'ipod') && OS.majorVersion >= 7, HISTORY_TRANSITION = SUPPORT_SWIPE_TO_GO_BACK ? 'none' : null, BARCOMPENSATION = OS.browser == 'mobilesafari' ? 60 : 0, STATUS_BAR_HEIGHT = 20, WINDOW = $(window), SCREEN = window.screen, HEAD = $('head'), INIT = 'init', proxy = $.proxy;\n function osCssClass(os, options) {\n var classes = [];\n if (OS) {\n classes.push('km-on-' + OS.name);\n }\n if (os.skin) {\n classes.push('km-' + os.skin);\n } else {\n if (os.name == 'ios' && os.majorVersion > 6) {\n classes.push('km-ios7');\n } else {\n classes.push('km-' + os.name);\n }\n }\n if (os.name == 'ios' && os.majorVersion < 7 || os.name != 'ios') {\n classes.push('km-' + os.name + os.majorVersion);\n }\n classes.push('km-' + os.majorVersion);\n classes.push('km-m' + (os.minorVersion ? os.minorVersion[0] : 0));\n if (os.variant && (os.skin && os.skin === os.name || !os.skin || os.setDefaultPlatform === false)) {\n classes.push('km-' + (os.skin ? os.skin : os.name) + '-' + os.variant);\n }\n if (os.cordova) {\n classes.push('km-cordova');\n }\n if (os.appMode) {\n classes.push('km-app');\n } else {\n classes.push('km-web');\n }\n if (options && options.statusBarStyle) {\n classes.push('km-' + options.statusBarStyle + '-status-bar');\n }\n return classes.join(' ');\n }\n function wp8Background(os) {\n return 'km-wp-' + (os.noVariantSet ? parseInt($('<div style=\\'background: Background\\' />').css('background-color').split(',')[1], 10) === 0 ? 'dark' : 'light' : os.variant + ' km-wp-' + os.variant + '-force');\n }\n function isOrientationHorizontal(element) {\n return OS.wp ? element.css('animation-name') == '-kendo-landscape' : Math.abs(window.orientation) / 90 == 1;\n }\n function getOrientationClass(element) {\n return isOrientationHorizontal(element) ? HORIZONTAL : VERTICAL;\n }\n function setMinimumHeight(pane) {\n pane.parent().addBack().css('min-height', window.innerHeight);\n }\n function applyViewportHeight() {\n $('meta[name=viewport]').remove();\n HEAD.append(viewportTemplate({ height: ', width=device-width' + (isOrientationHorizontal() ? ', height=' + window.innerHeight + 'px' : support.mobileOS.flatVersion >= 600 && support.mobileOS.flatVersion < 700 ? ', height=' + window.innerWidth + 'px' : ', height=device-height') }));\n }\n var Application = Widget.extend({\n init: function (element, options) {\n mobile.application = this;\n $($.proxy(this, 'bootstrap', element, options));\n },\n bootstrap: function (element, options) {\n element = $(element);\n if (!element[0]) {\n element = $(document.body);\n }\n Widget.fn.init.call(this, element, options);\n this.element.removeAttr('data-' + kendo.ns + 'role');\n this._setupPlatform();\n this._attachMeta();\n this._setupElementClass();\n this._attachHideBarHandlers();\n var paneOptions = $.extend({}, this.options);\n delete paneOptions.name;\n var that = this, startHistory = function () {\n that.pane = new Pane(that.element, paneOptions);\n that.pane.navigateToInitial();\n if (that.options.updateDocumentTitle) {\n that._setupDocumentTitle();\n }\n that._startHistory();\n that.trigger(INIT);\n };\n if (this.options.$angular) {\n setTimeout(startHistory);\n } else {\n startHistory();\n }\n },\n options: {\n name: 'Application',\n hideAddressBar: true,\n browserHistory: true,\n historyTransition: HISTORY_TRANSITION,\n modelScope: window,\n statusBarStyle: 'black',\n transition: '',\n retina: false,\n platform: null,\n skin: null,\n updateDocumentTitle: true,\n useNativeScrolling: false\n },\n events: [INIT],\n navigate: function (url, transition) {\n this.pane.navigate(url, transition);\n },\n replace: function (url, transition) {\n this.pane.replace(url, transition);\n },\n scroller: function () {\n return this.view().scroller;\n },\n hideLoading: function () {\n if (this.pane) {\n this.pane.hideLoading();\n } else {\n throw new Error('The mobile application instance is not fully instantiated. Please consider activating loading in the application init event handler.');\n }\n },\n showLoading: function () {\n if (this.pane) {\n this.pane.showLoading();\n } else {\n throw new Error('The mobile application instance is not fully instantiated. Please consider activating loading in the application init event handler.');\n }\n },\n changeLoadingMessage: function (message) {\n if (this.pane) {\n this.pane.changeLoadingMessage(message);\n } else {\n throw new Error('The mobile application instance is not fully instantiated. Please consider changing the message in the application init event handler.');\n }\n },\n view: function () {\n return this.pane.view();\n },\n skin: function (skin) {\n var that = this;\n if (!arguments.length) {\n return that.options.skin;\n }\n that.options.skin = skin || '';\n that.element[0].className = 'km-pane';\n that._setupPlatform();\n that._setupElementClass();\n return that.options.skin;\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.pane.destroy();\n if (this.options.browserHistory) {\n this.router.destroy();\n }\n },\n _setupPlatform: function () {\n var that = this, platform = that.options.platform, skin = that.options.skin, split = [], os = OS || MOBILE_PLATFORMS[DEFAULT_OS];\n if (platform) {\n os.setDefaultPlatform = true;\n if (typeof platform === 'string') {\n split = platform.split('-');\n os = $.extend({ variant: split[1] }, os, MOBILE_PLATFORMS[split[0]]);\n } else {\n os = platform;\n }\n }\n if (skin) {\n split = skin.split('-');\n if (!OS) {\n os.setDefaultPlatform = false;\n }\n os = $.extend({}, os, {\n skin: split[0],\n variant: split[1]\n });\n }\n if (!os.variant) {\n os.noVariantSet = true;\n os.variant = 'dark';\n }\n that.os = os;\n that.osCssClass = osCssClass(that.os, that.options);\n if (os.name == 'wp') {\n if (!that.refreshBackgroundColorProxy) {\n that.refreshBackgroundColorProxy = $.proxy(function () {\n if (that.os.variant && (that.os.skin && that.os.skin === that.os.name) || !that.os.skin) {\n that.element.removeClass('km-wp-dark km-wp-light km-wp-dark-force km-wp-light-force').addClass(wp8Background(that.os));\n }\n }, that);\n }\n $(document).off('visibilitychange', that.refreshBackgroundColorProxy);\n $(document).off('resume', that.refreshBackgroundColorProxy);\n if (!os.skin) {\n that.element.parent().css('overflow', 'hidden');\n $(document).on('visibilitychange', that.refreshBackgroundColorProxy);\n $(document).on('resume', that.refreshBackgroundColorProxy);\n that.refreshBackgroundColorProxy();\n }\n }\n },\n _startHistory: function () {\n if (this.options.browserHistory) {\n this.router = new kendo.Router({\n pushState: this.options.pushState,\n root: this.options.root,\n hashBang: this.options.hashBang\n });\n this.pane.bindToRouter(this.router);\n this.router.start();\n } else {\n if (!this.options.initial) {\n this.pane.navigate('');\n }\n }\n },\n _resizeToScreenHeight: function () {\n var includeStatusBar = $('meta[name=apple-mobile-web-app-status-bar-style]').attr('content').match(/black-translucent|hidden/), element = this.element, height;\n if (CHROME) {\n height = window.innerHeight;\n } else {\n if (isOrientationHorizontal(element)) {\n if (includeStatusBar) {\n if (INITIALLY_HORIZONTAL) {\n height = SCREEN.availWidth + STATUS_BAR_HEIGHT;\n } else {\n height = SCREEN.availWidth;\n }\n } else {\n if (INITIALLY_HORIZONTAL) {\n height = SCREEN.availWidth;\n } else {\n height = SCREEN.availWidth - STATUS_BAR_HEIGHT;\n }\n }\n } else {\n if (includeStatusBar) {\n if (INITIALLY_HORIZONTAL) {\n height = SCREEN.availHeight;\n } else {\n height = SCREEN.availHeight + STATUS_BAR_HEIGHT;\n }\n } else {\n if (INITIALLY_HORIZONTAL) {\n height = SCREEN.availHeight - STATUS_BAR_HEIGHT;\n } else {\n height = SCREEN.availHeight;\n }\n }\n }\n }\n element.height(height);\n },\n _setupElementClass: function () {\n var that = this, size, element = that.element;\n element.parent().addClass('km-root km-' + (that.os.tablet ? 'tablet' : 'phone'));\n element.addClass(that.osCssClass + ' ' + getOrientationClass(element));\n if (this.options.useNativeScrolling) {\n element.parent().addClass('km-native-scrolling');\n }\n if (CHROME) {\n element.addClass('km-ios-chrome');\n }\n if (support.wpDevicePixelRatio) {\n element.parent().css('font-size', support.wpDevicePixelRatio + 'em');\n }\n if (this.options.retina) {\n element.parent().addClass('km-retina');\n element.parent().css('font-size', support.devicePixelRatio * FONT_SIZE_COEF + 'em');\n }\n if (BERRYPHONEGAP) {\n applyViewportHeight();\n }\n if (that.options.useNativeScrolling) {\n element.parent().addClass('km-native-scrolling');\n } else if (ENABLE_CLIP) {\n size = (screen.availWidth > screen.availHeight ? screen.availWidth : screen.availHeight) + 200;\n $(clipTemplate({\n width: size,\n height: size\n })).appendTo(HEAD);\n }\n if (BROKEN_WEBVIEW_RESIZE) {\n that._resizeToScreenHeight();\n }\n kendo.onResize(function () {\n element.removeClass('km-horizontal km-vertical').addClass(getOrientationClass(element));\n if (that.options.useNativeScrolling) {\n setMinimumHeight(element);\n }\n if (BROKEN_WEBVIEW_RESIZE) {\n that._resizeToScreenHeight();\n }\n if (BERRYPHONEGAP) {\n applyViewportHeight();\n }\n kendo.resize(element);\n });\n },\n _clearExistingMeta: function () {\n HEAD.find('meta').filter('[name|=\\'apple-mobile-web-app\\'],[name|=\\'msapplication-tap\\'],[name=\\'viewport\\']').remove();\n },\n _attachMeta: function () {\n var options = this.options, icon = options.icon, size;\n this._clearExistingMeta();\n if (!BERRYPHONEGAP) {\n HEAD.prepend(viewportTemplate({\n height: '',\n scale: this.options.retina ? 1 / support.devicePixelRatio : '1.0'\n }));\n }\n HEAD.prepend(systemMeta(options));\n if (icon) {\n if (typeof icon === 'string') {\n icon = { '': icon };\n }\n for (size in icon) {\n HEAD.prepend(iconMeta({\n icon: icon[size],\n size: size\n }));\n }\n }\n if (options.useNativeScrolling) {\n setMinimumHeight(this.element);\n }\n },\n _attachHideBarHandlers: function () {\n var that = this, hideBar = proxy(that, '_hideBar');\n if (support.mobileOS.appMode || !that.options.hideAddressBar || !HIDEBAR || that.options.useNativeScrolling) {\n return;\n }\n that._initialHeight = {};\n WINDOW.on('load', hideBar);\n kendo.onResize(function () {\n setTimeout(window.scrollTo, 0, 0, 1);\n });\n },\n _setupDocumentTitle: function () {\n var that = this, defaultTitle = document.title;\n that.pane.bind('viewShow', function (e) {\n var title = e.view.title;\n document.title = title !== undefined ? title : defaultTitle;\n });\n },\n _hideBar: function () {\n var that = this, element = that.element;\n element.height(kendo.support.transforms.css + 'calc(100% + ' + BARCOMPENSATION + 'px)');\n $(window).trigger(kendo.support.resize);\n }\n });\n kendo.mobile.Application = Application;\n kendo.ui.plugin(Application, kendo.mobile, 'Mobile');\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.actionsheet', [\n 'kendo.mobile.popover',\n 'kendo.mobile.shim'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.actionsheet',\n name: 'ActionSheet',\n category: 'mobile',\n description: 'The mobile ActionSheet widget displays a set of choices related to a task the user initiates.',\n depends: [\n 'mobile.popover',\n 'mobile.shim'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, support = kendo.support, ui = kendo.mobile.ui, Shim = ui.Shim, Popup = ui.Popup, Widget = ui.Widget, OPEN = 'open', CLOSE = 'close', COMMAND = 'command', BUTTONS = 'li>a', CONTEXT_DATA = 'actionsheetContext', WRAP = '<div class=\"km-actionsheet-wrapper\"></div>', cancelTemplate = kendo.template('<li class=\"km-actionsheet-cancel\"><a href=\"\\\\#\">#:cancel#</a></li>');\n var ActionSheet = Widget.extend({\n init: function (element, options) {\n var that = this, ShimClass, tablet, type, os = support.mobileOS;\n Widget.fn.init.call(that, element, options);\n options = that.options;\n type = options.type;\n element = that.element;\n if (type === 'auto') {\n tablet = os && os.tablet;\n } else {\n tablet = type === 'tablet';\n }\n ShimClass = tablet ? Popup : Shim;\n if (options.cancelTemplate) {\n cancelTemplate = kendo.template(options.cancelTemplate);\n }\n element.addClass('km-actionsheet').append(cancelTemplate({ cancel: that.options.cancel })).wrap(WRAP).on('up', BUTTONS, '_click').on('click', BUTTONS, kendo.preventDefault);\n that.view().bind('destroy', function () {\n that.destroy();\n });\n that.wrapper = element.parent().addClass(type ? ' km-actionsheet-' + type : '');\n that.shim = new ShimClass(that.wrapper, $.extend({\n modal: os.ios && os.majorVersion < 7,\n className: 'km-actionsheet-root'\n }, that.options.popup));\n that._closeProxy = $.proxy(that, '_close');\n that._shimHideProxy = $.proxy(that, '_shimHide');\n that.shim.bind('hide', that._shimHideProxy);\n if (tablet) {\n kendo.onResize(that._closeProxy);\n }\n kendo.notify(that, ui);\n },\n events: [\n OPEN,\n CLOSE,\n COMMAND\n ],\n options: {\n name: 'ActionSheet',\n cancel: 'Cancel',\n type: 'auto',\n popup: { height: 'auto' }\n },\n open: function (target, context) {\n var that = this;\n that.target = $(target);\n that.context = context;\n that.shim.show(target);\n },\n close: function () {\n this.context = this.target = null;\n this.shim.hide();\n },\n openFor: function (target) {\n var that = this, context = target.data(CONTEXT_DATA);\n that.open(target, context);\n that.trigger(OPEN, {\n target: target,\n context: context\n });\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n kendo.unbindResize(this._closeProxy);\n this.shim.destroy();\n },\n _click: function (e) {\n if (e.isDefaultPrevented()) {\n return;\n }\n var currentTarget = $(e.currentTarget);\n var action = currentTarget.data('action');\n if (action) {\n var actionData = {\n target: this.target,\n context: this.context\n }, $angular = this.options.$angular;\n if ($angular) {\n this.element.injector().get('$parse')(action)($angular[0])(actionData);\n } else {\n kendo.getter(action)(window)(actionData);\n }\n }\n this.trigger(COMMAND, {\n target: this.target,\n context: this.context,\n currentTarget: currentTarget\n });\n e.preventDefault();\n this._close();\n },\n _shimHide: function (e) {\n if (!this.trigger(CLOSE)) {\n this.context = this.target = null;\n } else {\n e.preventDefault();\n }\n },\n _close: function (e) {\n if (!this.trigger(CLOSE)) {\n this.close();\n } else {\n e.preventDefault();\n }\n }\n });\n ui.plugin(ActionSheet);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.button', ['kendo.userevents'], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.button',\n name: 'Button',\n category: 'mobile',\n description: 'The Button widget navigates between mobile Application views when pressed.',\n depends: ['userevents']\n };\n (function ($, undefined) {\n var kendo = window.kendo, mobile = kendo.mobile, ui = mobile.ui, Widget = ui.Widget, support = kendo.support, os = support.mobileOS, ANDROID3UP = os.android && os.flatVersion >= 300, CLICK = 'click', DISABLED = 'disabled', DISABLEDSTATE = 'km-state-disabled';\n function highlightButton(widget, event, highlight) {\n $(event.target).closest('.km-button,.km-detail').toggleClass('km-state-active', highlight);\n if (ANDROID3UP && widget.deactivateTimeoutID) {\n clearTimeout(widget.deactivateTimeoutID);\n widget.deactivateTimeoutID = 0;\n }\n }\n function createBadge(value) {\n return $('<span class=\"km-badge\">' + value + '</span>');\n }\n var Button = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n var useTap = that.options.clickOn === 'up';\n that._wrap();\n that._style();\n if (!useTap) {\n that.element.attr('data-navigate-on-press', true);\n }\n that.options.enable = that.options.enable && !that.element.attr(DISABLED);\n that.enable(that.options.enable);\n that._userEvents = new kendo.UserEvents(that.element, {\n allowSelection: !useTap,\n fastTap: true,\n press: function (e) {\n that._activate(e);\n },\n release: function (e) {\n highlightButton(that, e, false);\n if (!useTap) {\n e.event.stopPropagation();\n }\n }\n });\n that._userEvents.bind(useTap ? 'tap' : 'press', function (e) {\n that._release(e);\n });\n if (ANDROID3UP) {\n that.element.on('move', function (e) {\n that._timeoutDeactivate(e);\n });\n }\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this._userEvents.destroy();\n },\n events: [CLICK],\n options: {\n name: 'Button',\n icon: '',\n style: '',\n badge: '',\n clickOn: 'up',\n enable: true\n },\n badge: function (value) {\n var badge = this.badgeElement = this.badgeElement || createBadge(value).appendTo(this.element);\n if (value || value === 0) {\n badge.html(value);\n return this;\n }\n if (value === false) {\n badge.empty().remove();\n this.badgeElement = false;\n return this;\n }\n return badge.html();\n },\n enable: function (enable) {\n var element = this.element;\n if (typeof enable == 'undefined') {\n enable = true;\n }\n this.options.enable = enable;\n if (enable) {\n element.removeAttr(DISABLED);\n } else {\n element.attr(DISABLED, DISABLED);\n }\n element.toggleClass(DISABLEDSTATE, !enable);\n },\n _timeoutDeactivate: function (e) {\n if (!this.deactivateTimeoutID) {\n this.deactivateTimeoutID = setTimeout(highlightButton, 500, this, e, false);\n }\n },\n _activate: function (e) {\n var activeElement = document.activeElement, nodeName = activeElement ? activeElement.nodeName : '';\n if (this.options.enable) {\n highlightButton(this, e, true);\n if (nodeName == 'INPUT' || nodeName == 'TEXTAREA') {\n activeElement.blur();\n }\n }\n },\n _release: function (e) {\n var that = this;\n if (e.which > 1) {\n return;\n }\n if (!that.options.enable) {\n e.preventDefault();\n return;\n }\n if (that.trigger(CLICK, {\n target: $(e.target),\n button: that.element\n })) {\n e.preventDefault();\n }\n },\n _style: function () {\n var style = this.options.style, element = this.element, styles;\n if (style) {\n styles = style.split(' ');\n $.each(styles, function () {\n element.addClass('km-' + this);\n });\n }\n },\n _wrap: function () {\n var that = this, icon = that.options.icon, badge = that.options.badge, iconSpan = '<span class=\"km-icon km-' + icon, element = that.element.addClass('km-button'), span = element.children('span:not(.km-icon)').addClass('km-text'), image = element.find('img').addClass('km-image');\n if (!span[0] && element.html()) {\n span = element.wrapInner('<span class=\"km-text\" />').children('span.km-text');\n }\n if (!image[0] && icon) {\n if (!span[0]) {\n iconSpan += ' km-notext';\n }\n that.iconElement = element.prepend($(iconSpan + '\" />'));\n }\n if (badge || badge === 0) {\n that.badgeElement = createBadge(badge).appendTo(element);\n }\n }\n });\n var BackButton = Button.extend({\n options: {\n name: 'BackButton',\n style: 'back'\n },\n init: function (element, options) {\n var that = this;\n Button.fn.init.call(that, element, options);\n if (typeof that.element.attr('href') === 'undefined') {\n that.element.attr('href', '#:back');\n }\n }\n });\n var DetailButton = Button.extend({\n options: {\n name: 'DetailButton',\n style: ''\n },\n init: function (element, options) {\n Button.fn.init.call(this, element, options);\n },\n _style: function () {\n var style = this.options.style + ' detail', element = this.element;\n if (style) {\n var styles = style.split(' ');\n $.each(styles, function () {\n element.addClass('km-' + this);\n });\n }\n },\n _wrap: function () {\n var that = this, icon = that.options.icon, iconSpan = '<span class=\"km-icon km-' + icon, element = that.element, span = element.children('span'), image = element.find('img').addClass('km-image');\n if (!image[0] && icon) {\n if (!span[0]) {\n iconSpan += ' km-notext';\n }\n element.prepend($(iconSpan + '\" />'));\n }\n }\n });\n ui.plugin(Button);\n ui.plugin(BackButton);\n ui.plugin(DetailButton);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.buttongroup', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.buttongroup',\n name: 'ButtonGroup',\n category: 'mobile',\n description: 'The Kendo mobile ButtonGroup widget is a linear set of grouped buttons.',\n depends: ['core']\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.mobile.ui, Widget = ui.Widget, ACTIVE = 'state-active', DISABLE = 'state-disabled', SELECT = 'select', SELECTOR = 'li:not(.km-' + ACTIVE + ')';\n function className(name) {\n return 'k-' + name + ' km-' + name;\n }\n function createBadge(value) {\n return $('<span class=\"' + className('badge') + '\">' + value + '</span>');\n }\n var ButtonGroup = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n that.element.addClass('km-buttongroup k-widget k-button-group').find('li').each(that._button);\n that.element.on(that.options.selectOn, SELECTOR, '_select');\n that._enable = true;\n that.select(that.options.index);\n if (!that.options.enable) {\n that._enable = false;\n that.wrapper.addClass(className(DISABLE));\n }\n },\n events: [SELECT],\n options: {\n name: 'ButtonGroup',\n selectOn: 'down',\n index: -1,\n enable: true\n },\n current: function () {\n return this.element.find('.km-' + ACTIVE);\n },\n select: function (li) {\n var that = this, index = -1;\n if (li === undefined || li === -1 || !that._enable || $(li).is('.km-' + DISABLE)) {\n return;\n }\n that.current().removeClass(className(ACTIVE));\n if (typeof li === 'number') {\n index = li;\n li = $(that.element[0].children[li]);\n } else if (li.nodeType) {\n li = $(li);\n index = li.index();\n }\n li.addClass(className(ACTIVE));\n that.selectedIndex = index;\n },\n badge: function (item, value) {\n var buttongroup = this.element, badge;\n if (!isNaN(item)) {\n item = buttongroup.children().get(item);\n }\n item = buttongroup.find(item);\n badge = $(item.children('.km-badge')[0] || createBadge(value).appendTo(item));\n if (value || value === 0) {\n badge.html(value);\n return this;\n }\n if (value === false) {\n badge.empty().remove();\n return this;\n }\n return badge.html();\n },\n enable: function (enable) {\n if (typeof enable == 'undefined') {\n enable = true;\n }\n this.wrapper.toggleClass(className(DISABLE), !enable);\n this._enable = this.options.enable = enable;\n },\n _button: function () {\n var button = $(this).addClass(className('button')), icon = kendo.attrValue(button, 'icon'), badge = kendo.attrValue(button, 'badge'), span = button.children('span'), image = button.find('img').addClass(className('image'));\n if (!span[0]) {\n span = button.wrapInner('<span/>').children('span');\n }\n span.addClass(className('text'));\n if (!image[0] && icon) {\n button.prepend($('<span class=\"' + className('icon') + ' ' + className(icon) + '\"/>'));\n }\n if (badge || badge === 0) {\n createBadge(badge).appendTo(button);\n }\n },\n _select: function (e) {\n if (e.which > 1 || e.isDefaultPrevented() || !this._enable) {\n return;\n }\n this.select(e.currentTarget);\n this.trigger(SELECT, { index: this.selectedIndex });\n }\n });\n ui.plugin(ButtonGroup);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.collapsible', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.collapsible',\n name: 'Collapsible',\n category: 'mobile',\n description: 'The Kendo mobile Collapsible widget provides ability for creating collapsible blocks of content.',\n depends: [\n 'core',\n 'userevents'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.mobile.ui, Widget = ui.Widget, COLLAPSIBLE = 'km-collapsible', HEADER = 'km-collapsible-header', CONTENT = 'km-collapsible-content', INSET = 'km-collapsibleinset', HEADER_WRAPPER = '<div data-role=\\'collapsible-header\\' class=\\'' + HEADER + '\\'></div>', CONTENT_WRAPPER = '<div data-role=\\'collapsible-content\\' class=\\'' + CONTENT + '\\'></div>', COLLAPSED = 'km-collapsed', EXPANDED = 'km-expanded', ANIMATED = 'km-animated', LEFT = 'left', EXAPND = 'expand', COLLAPSE = 'collapse';\n var Collapsible = Widget.extend({\n init: function (element, options) {\n var that = this, container = $(element);\n Widget.fn.init.call(that, container, options);\n container.addClass(COLLAPSIBLE);\n that._buildHeader();\n that.content = container.children().not(that.header).wrapAll(CONTENT_WRAPPER).parent();\n that._userEvents = new kendo.UserEvents(that.header, {\n fastTap: true,\n tap: function () {\n that.toggle();\n }\n });\n container.addClass(that.options.collapsed ? COLLAPSED : EXPANDED);\n if (that.options.inset) {\n container.addClass(INSET);\n }\n if (that.options.animation) {\n that.content.addClass(ANIMATED);\n that.content.height(0);\n if (that.options.collapsed) {\n that.content.hide();\n }\n } else if (that.options.collapsed) {\n that.content.hide();\n }\n },\n events: [\n EXAPND,\n COLLAPSE\n ],\n options: {\n name: 'Collapsible',\n collapsed: true,\n collapseIcon: 'arrow-n',\n expandIcon: 'arrow-s',\n iconPosition: LEFT,\n animation: true,\n inset: false\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this._userEvents.destroy();\n },\n expand: function (instant) {\n var icon = this.options.collapseIcon, content = this.content, ios = kendo.support.mobileOS.ios;\n if (!this.trigger(EXAPND)) {\n if (icon) {\n this.header.find('.km-icon').removeClass().addClass('km-icon km-' + icon);\n }\n this.element.removeClass(COLLAPSED).addClass(EXPANDED);\n if (this.options.animation && !instant) {\n content.off('transitionend');\n content.show();\n if (ios) {\n content.removeClass(ANIMATED);\n }\n content.height(this._getContentHeight());\n if (ios) {\n content.addClass(ANIMATED);\n }\n kendo.resize(content);\n } else {\n content.show();\n }\n }\n },\n collapse: function (instant) {\n var icon = this.options.expandIcon, content = this.content;\n if (!this.trigger(COLLAPSE)) {\n if (icon) {\n this.header.find('.km-icon').removeClass().addClass('km-icon km-' + icon);\n }\n this.element.removeClass(EXPANDED).addClass(COLLAPSED);\n if (this.options.animation && !instant) {\n content.one('transitionend', function () {\n content.hide();\n });\n content.height(0);\n } else {\n content.hide();\n }\n }\n },\n toggle: function (instant) {\n if (this.isCollapsed()) {\n this.expand(instant);\n } else {\n this.collapse(instant);\n }\n },\n isCollapsed: function () {\n return this.element.hasClass(COLLAPSED);\n },\n resize: function () {\n if (!this.isCollapsed() && this.options.animation) {\n this.content.height(this._getContentHeight());\n }\n },\n _buildHeader: function () {\n var header = this.element.children(':header').wrapAll(HEADER_WRAPPER), iconSpan = $('<span class=\"km-icon\"/>'), icon = this.options.collapsed ? this.options.expandIcon : this.options.collapseIcon, iconPosition = this.options.iconPosition;\n if (icon) {\n header.prepend(iconSpan);\n iconSpan.addClass('km-' + icon);\n }\n this.header = header.parent();\n this.header.addClass('km-icon-' + iconPosition);\n },\n _getContentHeight: function () {\n var style = this.content.attr('style'), height;\n this.content.css({\n position: 'absolute',\n visibility: 'hidden',\n height: 'auto'\n });\n height = this.content.height();\n this.content.attr('style', style ? style : '');\n return height;\n }\n });\n ui.plugin(Collapsible);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.listview', [\n 'kendo.data',\n 'kendo.userevents',\n 'kendo.mobile.button'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.listview',\n name: 'ListView',\n category: 'mobile',\n description: 'The Kendo Mobile ListView widget is used to display flat or grouped list of items.',\n depends: [\n 'data',\n 'userevents',\n 'mobile.button'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, Node = window.Node, mobile = kendo.mobile, ui = mobile.ui, outerHeight = kendo._outerHeight, DataSource = kendo.data.DataSource, Widget = ui.DataBoundWidget, ITEM_SELECTOR = '.km-list > li, > li:not(.km-group-container)', HIGHLIGHT_SELECTOR = '.km-listview-link, .km-listview-label', ICON_SELECTOR = '[' + kendo.attr('icon') + ']', proxy = $.proxy, attrValue = kendo.attrValue, GROUP_CLASS = 'km-group-title', ACTIVE_CLASS = 'km-state-active', GROUP_WRAPPER = '<div class=\"' + GROUP_CLASS + '\"><div class=\"km-text\"></div></div>', GROUP_TEMPLATE = kendo.template('<li><div class=\"' + GROUP_CLASS + '\"><div class=\"km-text\">#= this.headerTemplate(data) #</div></div><ul>#= kendo.render(this.template, data.items)#</ul></li>'), WRAPPER = '<div class=\"km-listview-wrapper\"></div>', SEARCH_TEMPLATE = kendo.template('<form class=\"km-filter-form\"><div class=\"km-filter-wrap\"><input type=\"search\" placeholder=\"#=placeholder#\"/><a href=\"\\\\#\" class=\"km-filter-reset\" title=\"Clear\"><span class=\"km-icon km-clear\"></span><span class=\"km-text\">Clear</span></a></div></form>'), NS = '.kendoMobileListView', STYLED = 'styled', DATABOUND = 'dataBound', DATABINDING = 'dataBinding', ITEM_CHANGE = 'itemChange', CLICK = 'click', CHANGE = 'change', PROGRESS = 'progress', FUNCTION = 'function', whitespaceRegExp = /^\\s+$/, buttonRegExp = /button/;\n function whitespace() {\n return this.nodeType === Node.TEXT_NODE && this.nodeValue.match(whitespaceRegExp);\n }\n function addIcon(item, icon) {\n if (icon && !item[0].querySelector('.km-icon')) {\n item.prepend('<span class=\"km-icon km-' + icon + '\"/>');\n }\n }\n function enhanceItem(item) {\n addIcon(item, attrValue(item, 'icon'));\n addIcon(item, attrValue(item.children(ICON_SELECTOR), 'icon'));\n }\n function enhanceLinkItem(item) {\n var parent = item.parent(), itemAndDetailButtons = item.add(parent.children(kendo.roleSelector('detailbutton'))), otherNodes = parent.contents().not(itemAndDetailButtons).not(whitespace);\n if (otherNodes.length) {\n return;\n }\n item.addClass('km-listview-link').attr(kendo.attr('role'), 'listview-link');\n addIcon(item, attrValue(parent, 'icon'));\n addIcon(item, attrValue(item, 'icon'));\n }\n function enhanceCheckBoxItem(label) {\n if (!label[0].querySelector('input[type=checkbox],input[type=radio]')) {\n return;\n }\n var item = label.parent();\n if (item.contents().not(label).not(function () {\n return this.nodeType == 3;\n })[0]) {\n return;\n }\n label.addClass('km-listview-label');\n label.children('[type=checkbox],[type=radio]').addClass('km-widget km-icon km-check');\n }\n function putAt(element, top) {\n $(element).css('transform', 'translate3d(0px, ' + top + 'px, 0px)');\n }\n var HeaderFixer = kendo.Class.extend({\n init: function (listView) {\n var scroller = listView.scroller();\n if (!scroller) {\n return;\n }\n this.options = listView.options;\n this.element = listView.element;\n this.scroller = listView.scroller();\n this._shouldFixHeaders();\n var headerFixer = this;\n var cacheHeaders = function () {\n headerFixer._cacheHeaders();\n };\n listView.bind('resize', cacheHeaders);\n listView.bind(STYLED, cacheHeaders);\n listView.bind(DATABOUND, cacheHeaders);\n this._scrollHandler = function (e) {\n headerFixer._fixHeader(e);\n };\n scroller.bind('scroll', this._scrollHandler);\n },\n destroy: function () {\n var that = this;\n if (that.scroller) {\n that.scroller.unbind('scroll', that._scrollHandler);\n }\n },\n _fixHeader: function (e) {\n if (!this.fixedHeaders) {\n return;\n }\n var i = 0, scroller = this.scroller, headers = this.headers, scrollTop = e.scrollTop, headerPair, offset, header;\n do {\n headerPair = headers[i++];\n if (!headerPair) {\n header = $('<div />');\n break;\n }\n offset = headerPair.offset;\n header = headerPair.header;\n } while (offset + 1 > scrollTop);\n if (this.currentHeader != i) {\n scroller.fixedContainer.html(header.clone());\n this.currentHeader = i;\n }\n },\n _shouldFixHeaders: function () {\n this.fixedHeaders = this.options.type === 'group' && this.options.fixedHeaders;\n },\n _cacheHeaders: function () {\n this._shouldFixHeaders();\n if (!this.fixedHeaders) {\n return;\n }\n var headers = [], offset = this.scroller.scrollTop;\n this.element.find('.' + GROUP_CLASS).each(function (_, header) {\n header = $(header);\n headers.unshift({\n offset: header.position().top + offset,\n header: header\n });\n });\n this.headers = headers;\n this._fixHeader({ scrollTop: offset });\n }\n });\n var DEFAULT_PULL_PARAMETERS = function () {\n return { page: 1 };\n };\n var RefreshHandler = kendo.Class.extend({\n init: function (listView) {\n var handler = this, options = listView.options, scroller = listView.scroller(), pullParameters = options.pullParameters || DEFAULT_PULL_PARAMETERS;\n this.listView = listView;\n this.scroller = scroller;\n listView.bind('_dataSource', function (e) {\n handler.setDataSource(e.dataSource);\n });\n scroller.setOptions({\n pullToRefresh: true,\n pull: function () {\n if (!handler._pulled) {\n handler._pulled = true;\n handler.dataSource.read(pullParameters.call(listView, handler._first));\n }\n },\n messages: {\n pullTemplate: options.messages.pullTemplate,\n releaseTemplate: options.messages.releaseTemplate,\n refreshTemplate: options.messages.refreshTemplate\n }\n });\n },\n setDataSource: function (dataSource) {\n var handler = this;\n this._first = dataSource.view()[0];\n this.dataSource = dataSource;\n dataSource.bind('change', function () {\n handler._change();\n });\n dataSource.bind('error', function () {\n handler._change();\n });\n },\n _change: function () {\n var scroller = this.scroller, dataSource = this.dataSource;\n if (this._pulled) {\n scroller.pullHandled();\n }\n if (this._pulled || !this._first) {\n var view = dataSource.view();\n if (view[0]) {\n this._first = view[0];\n }\n }\n this._pulled = false;\n }\n });\n var VirtualList = kendo.Observable.extend({\n init: function (options) {\n var list = this;\n kendo.Observable.fn.init.call(list);\n list.buffer = options.buffer;\n list.height = options.height;\n list.item = options.item;\n list.items = [];\n list.footer = options.footer;\n list.buffer.bind('reset', function () {\n list.refresh();\n });\n },\n refresh: function () {\n var buffer = this.buffer, items = this.items, endReached = false;\n while (items.length) {\n items.pop().destroy();\n }\n this.offset = buffer.offset;\n var itemConstructor = this.item, prevItem, item;\n for (var idx = 0; idx < buffer.viewSize; idx++) {\n if (idx === buffer.total()) {\n endReached = true;\n break;\n }\n item = itemConstructor(this.content(this.offset + items.length));\n item.below(prevItem);\n prevItem = item;\n items.push(item);\n }\n this.itemCount = items.length;\n this.trigger('reset');\n this._resize();\n if (endReached) {\n this.trigger('endReached');\n }\n },\n totalHeight: function () {\n if (!this.items[0]) {\n return 0;\n }\n var list = this, items = list.items, top = items[0].top, bottom = items[items.length - 1].bottom, averageItemHeight = (bottom - top) / list.itemCount, remainingItemsCount = list.buffer.length - list.offset - list.itemCount;\n return (this.footer ? this.footer.height : 0) + bottom + remainingItemsCount * averageItemHeight;\n },\n batchUpdate: function (top) {\n var height = this.height(), items = this.items, item, initialOffset = this.offset;\n if (!items[0]) {\n return;\n }\n if (this.lastDirection) {\n while (items[items.length - 1].bottom > top + height * 2) {\n if (this.offset === 0) {\n break;\n }\n this.offset--;\n item = items.pop();\n item.update(this.content(this.offset));\n item.above(items[0]);\n items.unshift(item);\n }\n } else {\n while (items[0].top < top - height) {\n var nextIndex = this.offset + this.itemCount;\n if (nextIndex === this.buffer.total()) {\n this.trigger('endReached');\n break;\n }\n if (nextIndex === this.buffer.length) {\n break;\n }\n item = items.shift();\n item.update(this.content(this.offset + this.itemCount));\n item.below(items[items.length - 1]);\n items.push(item);\n this.offset++;\n }\n }\n if (initialOffset !== this.offset) {\n this._resize();\n }\n },\n update: function (top) {\n var list = this, items = this.items, item, firstItem, lastItem, height = this.height(), itemCount = this.itemCount, padding = height / 2, up = (this.lastTop || 0) > top, topBorder = top - padding, bottomBorder = top + height + padding;\n if (!items[0]) {\n return;\n }\n this.lastTop = top;\n this.lastDirection = up;\n if (up) {\n if (items[0].top > topBorder && items[items.length - 1].bottom > bottomBorder + padding && this.offset > 0) {\n this.offset--;\n item = items.pop();\n firstItem = items[0];\n item.update(this.content(this.offset));\n items.unshift(item);\n item.above(firstItem);\n list._resize();\n }\n } else {\n if (items[items.length - 1].bottom < bottomBorder && items[0].top < topBorder - padding) {\n var nextIndex = this.offset + itemCount;\n if (nextIndex === this.buffer.total()) {\n this.trigger('endReached');\n } else if (nextIndex !== this.buffer.length) {\n item = items.shift();\n lastItem = items[items.length - 1];\n items.push(item);\n item.update(this.content(this.offset + this.itemCount));\n list.offset++;\n item.below(lastItem);\n list._resize();\n }\n }\n }\n },\n content: function (index) {\n return this.buffer.at(index);\n },\n destroy: function () {\n this.unbind();\n },\n _resize: function () {\n var items = this.items, top = 0, bottom = 0, firstItem = items[0], lastItem = items[items.length - 1];\n if (firstItem) {\n top = firstItem.top;\n bottom = lastItem.bottom;\n }\n this.trigger('resize', {\n top: top,\n bottom: bottom\n });\n if (this.footer) {\n this.footer.below(lastItem);\n }\n }\n });\n kendo.mobile.ui.VirtualList = VirtualList;\n var VirtualListViewItem = kendo.Class.extend({\n init: function (listView, dataItem) {\n var element = listView.append([dataItem], true)[0], height = element.offsetHeight;\n $.extend(this, {\n top: 0,\n element: element,\n listView: listView,\n height: height,\n bottom: height\n });\n },\n update: function (dataItem) {\n this.element = this.listView.setDataItem(this.element, dataItem);\n },\n above: function (item) {\n if (item) {\n this.height = this.element.offsetHeight;\n this.top = item.top - this.height;\n this.bottom = item.top;\n putAt(this.element, this.top);\n }\n },\n below: function (item) {\n if (item) {\n this.height = this.element.offsetHeight;\n this.top = item.bottom;\n this.bottom = this.top + this.height;\n putAt(this.element, this.top);\n }\n },\n destroy: function () {\n kendo.destroy(this.element);\n $(this.element).remove();\n }\n });\n var LOAD_ICON = '<div><span class=\"km-icon\"></span><span class=\"km-loading-left\"></span><span class=\"km-loading-right\"></span></div>';\n var VirtualListViewLoadingIndicator = kendo.Class.extend({\n init: function (listView) {\n this.element = $('<li class=\"km-load-more km-scroller-refresh\" style=\"display: none\"></li>').appendTo(listView.element);\n this._loadIcon = $(LOAD_ICON).appendTo(this.element);\n },\n enable: function () {\n this.element.show();\n this.height = outerHeight(this.element, true);\n },\n disable: function () {\n this.element.hide();\n this.height = 0;\n },\n below: function (item) {\n if (item) {\n this.top = item.bottom;\n this.bottom = this.height + this.top;\n putAt(this.element, this.top);\n }\n }\n });\n var VirtualListViewPressToLoadMore = VirtualListViewLoadingIndicator.extend({\n init: function (listView, buffer) {\n this._loadIcon = $(LOAD_ICON).hide();\n this._loadButton = $('<a class=\"km-load\">' + listView.options.messages.loadMoreText + '</a>').hide();\n this.element = $('<li class=\"km-load-more\" style=\"display: none\"></li>').append(this._loadIcon).append(this._loadButton).appendTo(listView.element);\n var loadMore = this;\n this._loadButton.kendoMobileButton().data('kendoMobileButton').bind('click', function () {\n loadMore._hideShowButton();\n buffer.next();\n });\n buffer.bind('resize', function () {\n loadMore._showLoadButton();\n });\n this.height = outerHeight(this.element, true);\n this.disable();\n },\n _hideShowButton: function () {\n this._loadButton.hide();\n this.element.addClass('km-scroller-refresh');\n this._loadIcon.css('display', 'block');\n },\n _showLoadButton: function () {\n this._loadButton.show();\n this.element.removeClass('km-scroller-refresh');\n this._loadIcon.hide();\n }\n });\n var VirtualListViewItemBinder = kendo.Class.extend({\n init: function (listView) {\n var binder = this;\n this.chromeHeight = outerHeight(listView.wrapper.children().not(listView.element));\n this.listView = listView;\n this.scroller = listView.scroller();\n this.options = listView.options;\n listView.bind('_dataSource', function (e) {\n binder.setDataSource(e.dataSource, e.empty);\n });\n listView.bind('resize', function () {\n if (!binder.list.items.length) {\n return;\n }\n binder.scroller.reset();\n binder.buffer.range(0);\n binder.list.refresh();\n });\n this.scroller.makeVirtual();\n this._scroll = function (e) {\n binder.list.update(e.scrollTop);\n };\n this.scroller.bind('scroll', this._scroll);\n this._scrollEnd = function (e) {\n binder.list.batchUpdate(e.scrollTop);\n };\n this.scroller.bind('scrollEnd', this._scrollEnd);\n },\n destroy: function () {\n this.list.unbind();\n this.buffer.unbind();\n this.scroller.unbind('scroll', this._scroll);\n this.scroller.unbind('scrollEnd', this._scrollEnd);\n },\n setDataSource: function (dataSource, empty) {\n var binder = this, options = this.options, listView = this.listView, scroller = listView.scroller(), pressToLoadMore = options.loadMore, pageSize, buffer, footer;\n this.dataSource = dataSource;\n pageSize = dataSource.pageSize() || options.virtualViewSize;\n if (!pageSize && !empty) {\n throw new Error('the DataSource does not have page size configured. Page Size setting is mandatory for the mobile listview virtual scrolling to work as expected.');\n }\n if (this.buffer) {\n this.buffer.destroy();\n }\n buffer = new kendo.data.Buffer(dataSource, Math.floor(pageSize / 2), pressToLoadMore);\n if (pressToLoadMore) {\n footer = new VirtualListViewPressToLoadMore(listView, buffer);\n } else {\n footer = new VirtualListViewLoadingIndicator(listView);\n }\n if (this.list) {\n this.list.destroy();\n }\n var list = new VirtualList({\n buffer: buffer,\n footer: footer,\n item: function (dataItem) {\n return new VirtualListViewItem(listView, dataItem);\n },\n height: function () {\n return scroller.height();\n }\n });\n list.bind('resize', function () {\n binder.updateScrollerSize();\n listView.updateSize();\n });\n list.bind('reset', function () {\n binder.footer.enable();\n });\n list.bind('endReached', function () {\n footer.disable();\n binder.updateScrollerSize();\n });\n buffer.bind('expand', function () {\n list.lastDirection = false;\n list.batchUpdate(scroller.scrollTop);\n });\n $.extend(this, {\n buffer: buffer,\n scroller: scroller,\n list: list,\n footer: footer\n });\n },\n updateScrollerSize: function () {\n this.scroller.virtualSize(0, this.list.totalHeight() + this.chromeHeight);\n },\n refresh: function () {\n this.list.refresh();\n },\n reset: function () {\n this.buffer.range(0);\n this.list.refresh();\n }\n });\n var ListViewItemBinder = kendo.Class.extend({\n init: function (listView) {\n var binder = this;\n this.listView = listView;\n this.options = listView.options;\n var itemBinder = this;\n this._refreshHandler = function (e) {\n itemBinder.refresh(e);\n };\n this._progressHandler = function () {\n listView.showLoading();\n };\n listView.bind('_dataSource', function (e) {\n binder.setDataSource(e.dataSource);\n });\n },\n destroy: function () {\n this._unbindDataSource();\n },\n reset: function () {\n },\n refresh: function (e) {\n var action = e && e.action, dataItems = e && e.items, listView = this.listView, dataSource = this.dataSource, prependOnRefresh = this.options.appendOnRefresh, view = dataSource.view(), groups = dataSource.group(), groupedMode = groups && groups[0], item;\n if (action === 'itemchange') {\n if (!listView._hasBindingTarget()) {\n item = listView.findByDataItem(dataItems)[0];\n if (item) {\n listView.setDataItem(item, dataItems[0]);\n }\n }\n return;\n }\n var removedItems, addedItems, addedDataItems;\n var adding = action === 'add' && !groupedMode || prependOnRefresh && !listView._filter;\n var removing = action === 'remove' && !groupedMode;\n if (adding) {\n removedItems = [];\n } else if (removing) {\n removedItems = listView.findByDataItem(dataItems);\n }\n if (listView.trigger(DATABINDING, {\n action: action || 'rebind',\n items: dataItems,\n removedItems: removedItems,\n index: e && e.index\n })) {\n if (this._shouldShowLoading()) {\n listView.hideLoading();\n }\n return;\n }\n if (action === 'add' && !groupedMode) {\n var index = view.indexOf(dataItems[0]);\n if (index > -1) {\n addedItems = listView.insertAt(dataItems, index);\n addedDataItems = dataItems;\n }\n } else if (action === 'remove' && !groupedMode) {\n addedItems = [];\n listView.remove(dataItems);\n } else if (groupedMode) {\n listView.replaceGrouped(view);\n } else if (prependOnRefresh && !listView._filter) {\n addedItems = listView.prepend(view);\n addedDataItems = view;\n } else {\n listView.replace(view);\n }\n if (this._shouldShowLoading()) {\n listView.hideLoading();\n }\n listView.trigger(DATABOUND, {\n ns: ui,\n addedItems: addedItems,\n addedDataItems: addedDataItems\n });\n },\n setDataSource: function (dataSource) {\n if (this.dataSource) {\n this._unbindDataSource();\n }\n this.dataSource = dataSource;\n dataSource.bind(CHANGE, this._refreshHandler);\n if (this._shouldShowLoading()) {\n this.dataSource.bind(PROGRESS, this._progressHandler);\n }\n },\n _unbindDataSource: function () {\n this.dataSource.unbind(CHANGE, this._refreshHandler).unbind(PROGRESS, this._progressHandler);\n },\n _shouldShowLoading: function () {\n var options = this.options;\n return !options.pullToRefresh && !options.loadMore && !options.endlessScroll;\n }\n });\n var ListViewFilter = kendo.Class.extend({\n init: function (listView) {\n var filter = this, filterable = listView.options.filterable, events = 'change paste', that = this;\n this.listView = listView;\n this.options = filterable;\n listView.element.before(SEARCH_TEMPLATE({ placeholder: filterable.placeholder || 'Search...' }));\n if (filterable.autoFilter !== false) {\n events += ' keyup';\n }\n this.element = listView.wrapper.find('.km-search-form');\n this.searchInput = listView.wrapper.find('input[type=search]').closest('form').on('submit' + NS, function (e) {\n e.preventDefault();\n }).end().on('focus' + NS, function () {\n filter._oldFilter = filter.searchInput.val();\n }).on(events.split(' ').join(NS + ' ') + NS, proxy(this._filterChange, this));\n this.clearButton = listView.wrapper.find('.km-filter-reset').on(CLICK, proxy(this, '_clearFilter')).hide();\n this._dataSourceChange = $.proxy(this._refreshInput, this);\n listView.bind('_dataSource', function (e) {\n e.dataSource.bind('change', that._dataSourceChange);\n });\n },\n _refreshInput: function () {\n var appliedFilters = this.listView.dataSource.filter();\n var searchInput = this.listView._filter.searchInput;\n if (!appliedFilters || appliedFilters.filters[0].field !== this.listView.options.filterable.field) {\n searchInput.val('');\n } else {\n searchInput.val(appliedFilters.filters[0].value);\n }\n },\n _search: function (expr) {\n this._filter = true;\n this.clearButton[expr ? 'show' : 'hide']();\n this.listView.dataSource.filter(expr);\n },\n _filterChange: function (e) {\n var filter = this;\n if (e.type == 'paste' && this.options.autoFilter !== false) {\n setTimeout(function () {\n filter._applyFilter();\n }, 1);\n } else {\n this._applyFilter();\n }\n },\n _applyFilter: function () {\n var options = this.options, value = this.searchInput.val(), expr = value.length ? {\n field: options.field,\n operator: options.operator || 'startswith',\n ignoreCase: options.ignoreCase,\n value: value\n } : null;\n if (value === this._oldFilter) {\n return;\n }\n this._oldFilter = value;\n this._search(expr);\n },\n _clearFilter: function (e) {\n this.searchInput.val('');\n this._search(null);\n e.preventDefault();\n }\n });\n var ListView = Widget.extend({\n init: function (element, options) {\n var listView = this;\n Widget.fn.init.call(this, element, options);\n element = this.element;\n options = this.options;\n if (options.scrollTreshold) {\n options.scrollThreshold = options.scrollTreshold;\n }\n element.on('down', HIGHLIGHT_SELECTOR, '_highlight').on('move up cancel', HIGHLIGHT_SELECTOR, '_dim');\n this._userEvents = new kendo.UserEvents(element, {\n fastTap: true,\n filter: ITEM_SELECTOR,\n allowSelection: true,\n tap: function (e) {\n listView._click(e);\n }\n });\n element.css('-ms-touch-action', 'auto');\n element.wrap(WRAPPER);\n this.wrapper = this.element.parent();\n this._headerFixer = new HeaderFixer(this);\n this._itemsCache = {};\n this._templates();\n this.virtual = options.endlessScroll || options.loadMore;\n this._style();\n if (this.options.$angular && (this.virtual || this.options.pullToRefresh)) {\n setTimeout($.proxy(this, '_start'));\n } else {\n this._start();\n }\n },\n _start: function () {\n var options = this.options;\n if (this.options.filterable) {\n this._filter = new ListViewFilter(this);\n }\n if (this.virtual) {\n this._itemBinder = new VirtualListViewItemBinder(this);\n } else {\n this._itemBinder = new ListViewItemBinder(this);\n }\n if (this.options.pullToRefresh) {\n this._pullToRefreshHandler = new RefreshHandler(this);\n }\n this.setDataSource(options.dataSource);\n this._enhanceItems(this.items());\n kendo.notify(this, ui);\n },\n events: [\n CLICK,\n DATABINDING,\n DATABOUND,\n ITEM_CHANGE\n ],\n options: {\n name: 'ListView',\n style: '',\n type: 'flat',\n autoBind: true,\n fixedHeaders: false,\n template: '#:data#',\n headerTemplate: '<span class=\"km-text\">#:value#</span>',\n appendOnRefresh: false,\n loadMore: false,\n endlessScroll: false,\n scrollThreshold: 30,\n pullToRefresh: false,\n messages: {\n loadMoreText: 'Press to load more',\n pullTemplate: 'Pull to refresh',\n releaseTemplate: 'Release to refresh',\n refreshTemplate: 'Refreshing'\n },\n pullOffset: 140,\n filterable: false,\n virtualViewSize: null\n },\n refresh: function () {\n this._itemBinder.refresh();\n },\n reset: function () {\n this._itemBinder.reset();\n },\n setDataSource: function (dataSource) {\n var emptyDataSource = !dataSource;\n this.dataSource = DataSource.create(dataSource);\n this.trigger('_dataSource', {\n dataSource: this.dataSource,\n empty: emptyDataSource\n });\n if (this.options.autoBind && !emptyDataSource) {\n this.items().remove();\n this.dataSource.fetch();\n }\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n kendo.destroy(this.element);\n this._userEvents.destroy();\n if (this._itemBinder) {\n this._itemBinder.destroy();\n }\n if (this._headerFixer) {\n this._headerFixer.destroy();\n }\n this.element.unwrap();\n delete this.element;\n delete this.wrapper;\n delete this._userEvents;\n },\n items: function () {\n if (this.options.type === 'group') {\n return this.element.find('.km-list').children();\n } else {\n return this.element.children().not('.km-load-more');\n }\n },\n scroller: function () {\n if (!this._scrollerInstance) {\n this._scrollerInstance = this.element.closest('.km-scroll-wrapper').data('kendoMobileScroller');\n }\n return this._scrollerInstance;\n },\n showLoading: function () {\n var view = this.view();\n if (view && view.loader) {\n view.loader.show();\n }\n },\n hideLoading: function () {\n var view = this.view();\n if (view && view.loader) {\n view.loader.hide();\n }\n },\n insertAt: function (dataItems, index, triggerChange) {\n var listView = this;\n return listView._renderItems(dataItems, function (items) {\n if (index === 0) {\n listView.element.prepend(items);\n } else if (index === -1) {\n listView.element.append(items);\n } else {\n listView.items().eq(index - 1).after(items);\n }\n if (triggerChange) {\n for (var i = 0; i < items.length; i++) {\n listView.trigger(ITEM_CHANGE, {\n item: items.eq(i),\n data: dataItems[i],\n ns: ui\n });\n }\n }\n });\n },\n append: function (dataItems, triggerChange) {\n return this.insertAt(dataItems, -1, triggerChange);\n },\n prepend: function (dataItems, triggerChange) {\n return this.insertAt(dataItems, 0, triggerChange);\n },\n replace: function (dataItems) {\n this.options.type = 'flat';\n this._angularItems('cleanup');\n kendo.destroy(this.element.children());\n this.element.empty();\n this._userEvents.cancel();\n this._style();\n return this.insertAt(dataItems, 0);\n },\n replaceGrouped: function (groups) {\n this.options.type = 'group';\n this._angularItems('cleanup');\n this.element.empty();\n var items = $(kendo.render(this.groupTemplate, groups));\n this._enhanceItems(items.children('ul').children('li'));\n this.element.append(items);\n mobile.init(items);\n this._style();\n this._angularItems('compile');\n },\n remove: function (dataItems) {\n var items = this.findByDataItem(dataItems);\n this.angular('cleanup', function () {\n return { elements: items };\n });\n kendo.destroy(items);\n items.remove();\n },\n findByDataItem: function (dataItems) {\n var selectors = [];\n for (var idx = 0, length = dataItems.length; idx < length; idx++) {\n selectors[idx] = '[data-' + kendo.ns + 'uid=' + dataItems[idx].uid + ']';\n }\n return this.element.find(selectors.join(','));\n },\n setDataItem: function (item, dataItem) {\n var listView = this, replaceItem = function (items) {\n var newItem = $(items[0]);\n kendo.destroy(item);\n listView.angular('cleanup', function () {\n return { elements: [$(item)] };\n });\n $(item).replaceWith(newItem);\n listView.trigger(ITEM_CHANGE, {\n item: newItem,\n data: dataItem,\n ns: ui\n });\n };\n return this._renderItems([dataItem], replaceItem)[0];\n },\n updateSize: function () {\n this._size = this.getSize();\n },\n _renderItems: function (dataItems, callback) {\n var items = $(kendo.render(this.template, dataItems));\n callback(items);\n this.angular('compile', function () {\n return {\n elements: items,\n data: dataItems.map(function (data) {\n return { dataItem: data };\n })\n };\n });\n mobile.init(items);\n this._enhanceItems(items);\n return items;\n },\n _dim: function (e) {\n this._toggle(e, false);\n },\n _highlight: function (e) {\n this._toggle(e, true);\n },\n _toggle: function (e, highlight) {\n if (e.which > 1) {\n return;\n }\n var clicked = $(e.currentTarget), item = clicked.parent(), role = attrValue(clicked, 'role') || '', plainItem = !role.match(buttonRegExp), prevented = e.isDefaultPrevented();\n if (plainItem) {\n item.toggleClass(ACTIVE_CLASS, highlight && !prevented);\n }\n },\n _templates: function () {\n var template = this.options.template, headerTemplate = this.options.headerTemplate, dataIDAttribute = ' data-uid=\"#=arguments[0].uid || \"\"#\"', templateProxy = {}, groupTemplateProxy = {};\n if (typeof template === FUNCTION) {\n templateProxy.template = template;\n template = '#=this.template(data)#';\n }\n this.template = proxy(kendo.template('<li' + dataIDAttribute + '>' + template + '</li>'), templateProxy);\n groupTemplateProxy.template = this.template;\n if (typeof headerTemplate === FUNCTION) {\n groupTemplateProxy._headerTemplate = headerTemplate;\n headerTemplate = '#=this._headerTemplate(data)#';\n }\n groupTemplateProxy.headerTemplate = kendo.template(headerTemplate);\n this.groupTemplate = proxy(GROUP_TEMPLATE, groupTemplateProxy);\n },\n _click: function (e) {\n if (e.event.which > 1 || e.event.isDefaultPrevented()) {\n return;\n }\n var dataItem, item = e.target, target = $(e.event.target), buttonElement = target.closest(kendo.roleSelector('button', 'detailbutton', 'backbutton')), button = kendo.widgetInstance(buttonElement, ui), id = item.attr(kendo.attr('uid'));\n if (id) {\n dataItem = this.dataSource.getByUid(id);\n }\n if (this.trigger(CLICK, {\n target: target,\n item: item,\n dataItem: dataItem,\n button: button\n })) {\n e.preventDefault();\n }\n },\n _styleGroups: function () {\n var rootItems = this.element.children();\n rootItems.children('ul').addClass('km-list');\n rootItems.each(function () {\n var li = $(this), groupHeader = li.contents().first();\n li.addClass('km-group-container');\n if (!groupHeader.is('ul') && !groupHeader.is('div.' + GROUP_CLASS)) {\n groupHeader.wrap(GROUP_WRAPPER);\n }\n });\n },\n _style: function () {\n var options = this.options, grouped = options.type === 'group', element = this.element, inset = options.style === 'inset';\n element.addClass('km-listview').toggleClass('km-list', !grouped).toggleClass('km-virtual-list', this.virtual).toggleClass('km-listinset', !grouped && inset).toggleClass('km-listgroup', grouped && !inset).toggleClass('km-listgroupinset', grouped && inset);\n if (!element.parents('.km-listview')[0]) {\n element.closest('.km-content').toggleClass('km-insetcontent', inset);\n }\n if (grouped) {\n this._styleGroups();\n }\n this.trigger(STYLED);\n },\n _enhanceItems: function (items) {\n items.each(function () {\n var item = $(this), child, enhanced = false;\n item.children().each(function () {\n child = $(this);\n if (child.is('a')) {\n enhanceLinkItem(child);\n enhanced = true;\n } else if (child.is('label')) {\n enhanceCheckBoxItem(child);\n enhanced = true;\n }\n });\n if (!enhanced) {\n enhanceItem(item);\n }\n });\n }\n });\n ui.plugin(ListView);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.navbar', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.navbar',\n name: 'NavBar',\n category: 'mobile',\n description: 'The Kendo mobile NavBar widget is used inside a mobile View or Layout Header element to display an application navigation bar.',\n depends: ['core']\n };\n (function ($, undefined) {\n var kendo = window.kendo, mobile = kendo.mobile, ui = mobile.ui, Widget = ui.Widget;\n function createContainer(align, element) {\n var items = element.find('[' + kendo.attr('align') + '=' + align + ']');\n if (items[0]) {\n return $('<div class=\"km-' + align + 'item\" />').append(items).prependTo(element);\n }\n }\n function toggleTitle(centerElement) {\n var siblings = centerElement.siblings(), noTitle = !!centerElement.children('ul')[0], showTitle = !!siblings[0] && kendo.trim(centerElement.text()) === '', android = !!(kendo.mobile.application && kendo.mobile.application.element.is('.km-android'));\n centerElement.prevAll().toggleClass('km-absolute', noTitle);\n centerElement.toggleClass('km-show-title', showTitle);\n centerElement.toggleClass('km-fill-title', showTitle && !kendo.trim(centerElement.html()));\n centerElement.toggleClass('km-no-title', noTitle);\n centerElement.toggleClass('km-hide-title', android && !siblings.children().is(':visible'));\n }\n var NavBar = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n element = that.element;\n that.container().bind('show', $.proxy(this, 'refresh'));\n element.addClass('km-navbar').wrapInner($('<div class=\"km-view-title km-show-title\" />'));\n that.leftElement = createContainer('left', element);\n that.rightElement = createContainer('right', element);\n that.centerElement = element.find('.km-view-title');\n },\n options: { name: 'NavBar' },\n title: function (value) {\n this.element.find(kendo.roleSelector('view-title')).text(value);\n toggleTitle(this.centerElement);\n },\n refresh: function (e) {\n var view = e.view;\n this.title(view.options.title);\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n kendo.destroy(this.element);\n }\n });\n ui.plugin(NavBar);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.scrollview', [\n 'kendo.fx',\n 'kendo.data',\n 'kendo.draganddrop'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.scrollview',\n name: 'ScrollView',\n category: 'mobile',\n description: 'The Kendo Mobile ScrollView widget is used to scroll content wider than the device screen.',\n depends: [\n 'fx',\n 'data',\n 'draganddrop'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, mobile = kendo.mobile, ui = mobile.ui, proxy = $.proxy, Transition = kendo.effects.Transition, Pane = kendo.ui.Pane, PaneDimensions = kendo.ui.PaneDimensions, Widget = ui.DataBoundWidget, DataSource = kendo.data.DataSource, Buffer = kendo.data.Buffer, BatchBuffer = kendo.data.BatchBuffer, math = Math, abs = math.abs, ceil = math.ceil, round = math.round, max = math.max, min = math.min, floor = math.floor, CHANGE = 'change', CHANGING = 'changing', REFRESH = 'refresh', CURRENT_PAGE_CLASS = 'current-page', VIRTUAL_PAGE_CLASS = 'virtual-page', FUNCTION = 'function', ITEM_CHANGE = 'itemChange', CLEANUP = 'cleanup', VIRTUAL_PAGE_COUNT = 3, LEFT_PAGE = -1, CETER_PAGE = 0, RIGHT_PAGE = 1, LEFT_SWIPE = -1, NUDGE = 0, RIGHT_SWIPE = 1;\n function className(name) {\n return 'k-' + name + ' km-' + name;\n }\n var Pager = kendo.Class.extend({\n init: function (scrollView) {\n var that = this, element = $('<ol class=\\'' + className('pages') + '\\'/>');\n scrollView.element.append(element);\n this._changeProxy = proxy(that, '_change');\n this._refreshProxy = proxy(that, '_refresh');\n scrollView.bind(CHANGE, this._changeProxy);\n scrollView.bind(REFRESH, this._refreshProxy);\n $.extend(that, {\n element: element,\n scrollView: scrollView\n });\n },\n items: function () {\n return this.element.children();\n },\n _refresh: function (e) {\n var pageHTML = '';\n for (var idx = 0; idx < e.pageCount; idx++) {\n pageHTML += '<li></li>';\n }\n this.element.html(pageHTML);\n this.items().eq(e.page).addClass(className(CURRENT_PAGE_CLASS));\n },\n _change: function (e) {\n this.items().removeClass(className(CURRENT_PAGE_CLASS)).eq(e.page).addClass(className(CURRENT_PAGE_CLASS));\n },\n destroy: function () {\n this.scrollView.unbind(CHANGE, this._changeProxy);\n this.scrollView.unbind(REFRESH, this._refreshProxy);\n this.element.remove();\n }\n });\n kendo.mobile.ui.ScrollViewPager = Pager;\n var TRANSITION_END = 'transitionEnd', DRAG_START = 'dragStart', DRAG_END = 'dragEnd';\n var ElasticPane = kendo.Observable.extend({\n init: function (element, options) {\n var that = this;\n kendo.Observable.fn.init.call(this);\n this.element = element;\n this.container = element.parent();\n var movable, transition, userEvents, dimensions, dimension, pane;\n movable = new kendo.ui.Movable(that.element);\n transition = new Transition({\n axis: 'x',\n movable: movable,\n onEnd: function () {\n that.trigger(TRANSITION_END);\n }\n });\n userEvents = new kendo.UserEvents(element, {\n fastTap: true,\n start: function (e) {\n if (abs(e.x.velocity) * 2 >= abs(e.y.velocity)) {\n userEvents.capture();\n } else {\n userEvents.cancel();\n }\n that.trigger(DRAG_START, e);\n transition.cancel();\n },\n allowSelection: true,\n end: function (e) {\n that.trigger(DRAG_END, e);\n }\n });\n dimensions = new PaneDimensions({\n element: that.element,\n container: that.container\n });\n dimension = dimensions.x;\n dimension.bind(CHANGE, function () {\n that.trigger(CHANGE);\n });\n pane = new Pane({\n dimensions: dimensions,\n userEvents: userEvents,\n movable: movable,\n elastic: true\n });\n $.extend(that, {\n duration: options && options.duration || 1,\n movable: movable,\n transition: transition,\n userEvents: userEvents,\n dimensions: dimensions,\n dimension: dimension,\n pane: pane\n });\n this.bind([\n TRANSITION_END,\n DRAG_START,\n DRAG_END,\n CHANGE\n ], options);\n },\n size: function () {\n return {\n width: this.dimensions.x.getSize(),\n height: this.dimensions.y.getSize()\n };\n },\n total: function () {\n return this.dimension.getTotal();\n },\n offset: function () {\n return -this.movable.x;\n },\n updateDimension: function () {\n this.dimension.update(true);\n },\n refresh: function () {\n this.dimensions.refresh();\n },\n moveTo: function (offset) {\n this.movable.moveAxis('x', -offset);\n },\n transitionTo: function (offset, ease, instant) {\n if (instant) {\n this.moveTo(-offset);\n } else {\n this.transition.moveTo({\n location: offset,\n duration: this.duration,\n ease: ease\n });\n }\n }\n });\n kendo.mobile.ui.ScrollViewElasticPane = ElasticPane;\n var ScrollViewContent = kendo.Observable.extend({\n init: function (element, pane, options) {\n var that = this;\n kendo.Observable.fn.init.call(this);\n that.element = element;\n that.pane = pane;\n that._getPages();\n this.page = 0;\n this.pageSize = options.pageSize || 1;\n this.contentHeight = options.contentHeight;\n this.enablePager = options.enablePager;\n this.pagerOverlay = options.pagerOverlay;\n },\n scrollTo: function (page, instant) {\n this.page = page;\n this.pane.transitionTo(-page * this.pane.size().width, Transition.easeOutExpo, instant);\n },\n paneMoved: function (swipeType, bounce, callback, instant) {\n var that = this, pane = that.pane, width = pane.size().width * that.pageSize, approx = round, ease = bounce ? Transition.easeOutBack : Transition.easeOutExpo, snap, nextPage;\n if (swipeType === LEFT_SWIPE) {\n approx = ceil;\n } else if (swipeType === RIGHT_SWIPE) {\n approx = floor;\n }\n nextPage = approx(pane.offset() / width);\n snap = max(that.minSnap, min(-nextPage * width, that.maxSnap));\n if (nextPage != that.page) {\n if (callback && callback({\n currentPage: that.page,\n nextPage: nextPage\n })) {\n snap = -that.page * pane.size().width;\n }\n }\n pane.transitionTo(snap, ease, instant);\n },\n updatePage: function () {\n var pane = this.pane, page = round(pane.offset() / pane.size().width);\n if (page != this.page) {\n this.page = page;\n return true;\n }\n return false;\n },\n forcePageUpdate: function () {\n return this.updatePage();\n },\n resizeTo: function (size) {\n var pane = this.pane, width = size.width;\n this.pageElements.width(width);\n if (this.contentHeight === '100%') {\n var containerHeight = this.element.parent().height();\n if (this.enablePager === true) {\n var pager = this.element.parent().find('ol.km-pages');\n if (!this.pagerOverlay && pager.length) {\n containerHeight -= kendo._outerHeight(pager, true);\n }\n }\n this.element.css('height', containerHeight);\n this.pageElements.css('height', containerHeight);\n }\n pane.updateDimension();\n if (!this._paged) {\n this.page = floor(pane.offset() / width);\n }\n this.scrollTo(this.page, true);\n this.pageCount = ceil(pane.total() / width);\n this.minSnap = -(this.pageCount - 1) * width;\n this.maxSnap = 0;\n },\n _getPages: function () {\n this.pageElements = this.element.find(kendo.roleSelector('page'));\n this._paged = this.pageElements.length > 0;\n }\n });\n kendo.mobile.ui.ScrollViewContent = ScrollViewContent;\n var VirtualScrollViewContent = kendo.Observable.extend({\n init: function (element, pane, options) {\n var that = this;\n kendo.Observable.fn.init.call(this);\n that.element = element;\n that.pane = pane;\n that.options = options;\n that._templates();\n that.page = options.page || 0;\n that.pages = [];\n that._initPages();\n that.resizeTo(that.pane.size());\n that.pane.dimension.forceEnabled();\n },\n setDataSource: function (dataSource) {\n this.dataSource = DataSource.create(dataSource);\n this._buffer();\n this._pendingPageRefresh = false;\n this._pendingWidgetRefresh = false;\n },\n _viewShow: function () {\n var that = this;\n if (that._pendingWidgetRefresh) {\n setTimeout(function () {\n that._resetPages();\n }, 0);\n that._pendingWidgetRefresh = false;\n }\n },\n _buffer: function () {\n var itemsPerPage = this.options.itemsPerPage;\n if (this.buffer) {\n this.buffer.destroy();\n }\n if (itemsPerPage > 1) {\n this.buffer = new BatchBuffer(this.dataSource, itemsPerPage);\n } else {\n this.buffer = new Buffer(this.dataSource, itemsPerPage * 3);\n }\n this._resizeProxy = proxy(this, '_onResize');\n this._resetProxy = proxy(this, '_onReset');\n this._endReachedProxy = proxy(this, '_onEndReached');\n this.buffer.bind({\n 'resize': this._resizeProxy,\n 'reset': this._resetProxy,\n 'endreached': this._endReachedProxy\n });\n },\n _templates: function () {\n var template = this.options.template, emptyTemplate = this.options.emptyTemplate, templateProxy = {}, emptyTemplateProxy = {};\n if (typeof template === FUNCTION) {\n templateProxy.template = template;\n template = '#=this.template(data)#';\n }\n this.template = proxy(kendo.template(template), templateProxy);\n if (typeof emptyTemplate === FUNCTION) {\n emptyTemplateProxy.emptyTemplate = emptyTemplate;\n emptyTemplate = '#=this.emptyTemplate(data)#';\n }\n this.emptyTemplate = proxy(kendo.template(emptyTemplate), emptyTemplateProxy);\n },\n _initPages: function () {\n var pages = this.pages, element = this.element, page;\n for (var i = 0; i < VIRTUAL_PAGE_COUNT; i++) {\n page = new Page(element);\n pages.push(page);\n }\n this.pane.updateDimension();\n },\n resizeTo: function (size) {\n var pages = this.pages, pane = this.pane;\n for (var i = 0; i < pages.length; i++) {\n pages[i].setWidth(size.width);\n }\n if (this.options.contentHeight === 'auto') {\n this.element.css('height', this.pages[1].element.height());\n } else if (this.options.contentHeight === '100%') {\n var containerHeight = this.element.parent().height();\n if (this.options.enablePager === true) {\n var pager = this.element.parent().find('ol.km-pages');\n if (!this.options.pagerOverlay && pager.length) {\n containerHeight -= kendo._outerHeight(pager, true);\n }\n }\n this.element.css('height', containerHeight);\n pages[0].element.css('height', containerHeight);\n pages[1].element.css('height', containerHeight);\n pages[2].element.css('height', containerHeight);\n }\n pane.updateDimension();\n this._repositionPages();\n this.width = size.width;\n },\n scrollTo: function (page) {\n var buffer = this.buffer, dataItem;\n buffer.syncDataSource();\n dataItem = buffer.at(page);\n if (!dataItem) {\n return;\n }\n this._updatePagesContent(page);\n this.page = page;\n },\n paneMoved: function (swipeType, bounce, callback, instant) {\n var that = this, pane = that.pane, width = pane.size().width, offset = pane.offset(), thresholdPassed = Math.abs(offset) >= width / 3, ease = bounce ? kendo.effects.Transition.easeOutBack : kendo.effects.Transition.easeOutExpo, isEndReached = that.page + 2 > that.buffer.total(), nextPage, delta = 0;\n if (swipeType === RIGHT_SWIPE) {\n if (that.page !== 0) {\n delta = -1;\n }\n } else if (swipeType === LEFT_SWIPE && !isEndReached) {\n delta = 1;\n } else if (offset > 0 && (thresholdPassed && !isEndReached)) {\n delta = 1;\n } else if (offset < 0 && thresholdPassed) {\n if (that.page !== 0) {\n delta = -1;\n }\n }\n nextPage = that.page;\n if (delta) {\n nextPage = delta > 0 ? nextPage + 1 : nextPage - 1;\n }\n if (callback && callback({\n currentPage: that.page,\n nextPage: nextPage\n })) {\n delta = 0;\n }\n if (delta === 0) {\n that._cancelMove(ease, instant);\n } else if (delta === -1) {\n that._moveBackward(instant);\n } else if (delta === 1) {\n that._moveForward(instant);\n }\n },\n updatePage: function () {\n var pages = this.pages;\n if (this.pane.offset() === 0) {\n return false;\n }\n if (this.pane.offset() > 0) {\n pages.push(this.pages.shift());\n this.page++;\n this.setPageContent(pages[2], this.page + 1);\n } else {\n pages.unshift(this.pages.pop());\n this.page--;\n this.setPageContent(pages[0], this.page - 1);\n }\n this._repositionPages();\n this._resetMovable();\n return true;\n },\n forcePageUpdate: function () {\n var offset = this.pane.offset(), threshold = this.pane.size().width * 3 / 4;\n if (abs(offset) > threshold) {\n return this.updatePage();\n }\n return false;\n },\n _resetMovable: function () {\n this.pane.moveTo(0);\n },\n _moveForward: function (instant) {\n this.pane.transitionTo(-this.width, kendo.effects.Transition.easeOutExpo, instant);\n },\n _moveBackward: function (instant) {\n this.pane.transitionTo(this.width, kendo.effects.Transition.easeOutExpo, instant);\n },\n _cancelMove: function (ease, instant) {\n this.pane.transitionTo(0, ease, instant);\n },\n _resetPages: function () {\n this.page = this.options.page || 0;\n this._updatePagesContent(this.page);\n this._repositionPages();\n this.trigger('reset');\n },\n _onResize: function () {\n this.pageCount = ceil(this.dataSource.total() / this.options.itemsPerPage);\n if (this._pendingPageRefresh) {\n this._updatePagesContent(this.page);\n this._pendingPageRefresh = false;\n }\n this.trigger('resize');\n },\n _onReset: function () {\n this.pageCount = ceil(this.dataSource.total() / this.options.itemsPerPage);\n this._resetPages();\n },\n _onEndReached: function () {\n this._pendingPageRefresh = true;\n },\n _repositionPages: function () {\n var pages = this.pages;\n pages[0].position(LEFT_PAGE);\n pages[1].position(CETER_PAGE);\n pages[2].position(RIGHT_PAGE);\n },\n _updatePagesContent: function (offset) {\n var pages = this.pages, currentPage = offset || 0;\n this.setPageContent(pages[0], currentPage - 1);\n this.setPageContent(pages[1], currentPage);\n this.setPageContent(pages[2], currentPage + 1);\n },\n setPageContent: function (page, index) {\n var buffer = this.buffer, template = this.template, emptyTemplate = this.emptyTemplate, view = null;\n if (index >= 0) {\n view = buffer.at(index);\n if ($.isArray(view) && !view.length) {\n view = null;\n }\n }\n this.trigger(CLEANUP, { item: page.element });\n if (view !== null) {\n page.content(template(view));\n } else {\n page.content(emptyTemplate({}));\n }\n kendo.mobile.init(page.element);\n this.trigger(ITEM_CHANGE, {\n item: page.element,\n data: view,\n ns: kendo.mobile.ui\n });\n }\n });\n kendo.mobile.ui.VirtualScrollViewContent = VirtualScrollViewContent;\n var Page = kendo.Class.extend({\n init: function (container) {\n this.element = $('<div class=\\'' + className(VIRTUAL_PAGE_CLASS) + '\\'></div>');\n this.width = container.width();\n this.element.width(this.width);\n container.append(this.element);\n },\n content: function (theContent) {\n this.element.html(theContent);\n },\n position: function (position) {\n this.element.css('transform', 'translate3d(' + this.width * position + 'px, 0, 0)');\n },\n setWidth: function (width) {\n this.width = width;\n this.element.width(width);\n }\n });\n kendo.mobile.ui.VirtualPage = Page;\n var ScrollView = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n options = that.options;\n element = that.element;\n kendo.stripWhitespace(element[0]);\n element.wrapInner('<div/>').addClass('k-widget ' + className('scrollview'));\n if (this.options.enablePager) {\n this.pager = new Pager(this);\n if (this.options.pagerOverlay) {\n element.addClass(className('scrollview-overlay'));\n }\n }\n that.inner = element.children().first();\n that.page = 0;\n that.inner.css('height', options.contentHeight);\n that.pane = new ElasticPane(that.inner, {\n duration: this.options.duration,\n transitionEnd: proxy(this, '_transitionEnd'),\n dragStart: proxy(this, '_dragStart'),\n dragEnd: proxy(this, '_dragEnd'),\n change: proxy(this, REFRESH)\n });\n that.bind('resize', function () {\n that.pane.refresh();\n });\n that.page = options.page;\n var empty = this.inner.children().length === 0;\n var content = empty ? new VirtualScrollViewContent(that.inner, that.pane, options) : new ScrollViewContent(that.inner, that.pane, options);\n content.page = that.page;\n content.bind('reset', function () {\n this._pendingPageRefresh = false;\n that._syncWithContent();\n that.trigger(REFRESH, {\n pageCount: content.pageCount,\n page: content.page\n });\n });\n content.bind('resize', function () {\n that.trigger(REFRESH, {\n pageCount: content.pageCount,\n page: content.page\n });\n });\n content.bind(ITEM_CHANGE, function (e) {\n that.trigger(ITEM_CHANGE, e);\n that.angular('compile', function () {\n return {\n elements: e.item,\n data: [{ dataItem: e.data }]\n };\n });\n });\n content.bind(CLEANUP, function (e) {\n that.angular('cleanup', function () {\n return { elements: e.item };\n });\n });\n that._content = content;\n that.setDataSource(options.dataSource);\n var mobileContainer = that.container();\n if (mobileContainer.nullObject) {\n that.viewInit();\n that.viewShow();\n } else {\n mobileContainer.bind('show', proxy(this, 'viewShow')).bind('init', proxy(this, 'viewInit'));\n }\n },\n options: {\n name: 'ScrollView',\n page: 0,\n duration: 400,\n velocityThreshold: 0.8,\n contentHeight: 'auto',\n pageSize: 1,\n itemsPerPage: 1,\n bounceVelocityThreshold: 1.6,\n enablePager: true,\n pagerOverlay: false,\n autoBind: true,\n template: '',\n emptyTemplate: ''\n },\n events: [\n CHANGING,\n CHANGE,\n REFRESH\n ],\n destroy: function () {\n Widget.fn.destroy.call(this);\n kendo.destroy(this.element);\n },\n viewInit: function () {\n if (this.options.autoBind) {\n this._content.scrollTo(this._content.page, true);\n }\n },\n viewShow: function () {\n this.pane.refresh();\n },\n refresh: function () {\n var content = this._content;\n content.resizeTo(this.pane.size());\n this.page = content.page;\n this.trigger(REFRESH, {\n pageCount: content.pageCount,\n page: content.page\n });\n },\n content: function (html) {\n this.element.children().first().html(html);\n this._content._getPages();\n this.pane.refresh();\n },\n value: function (item) {\n var dataSource = this.dataSource;\n if (item) {\n this.scrollTo(dataSource.indexOf(item), true);\n } else {\n return dataSource.at(this.page);\n }\n },\n scrollTo: function (page, instant) {\n this._content.scrollTo(page, instant);\n this._syncWithContent();\n },\n prev: function () {\n var that = this, prevPage = that.page - 1;\n if (that._content instanceof VirtualScrollViewContent) {\n that._content.paneMoved(RIGHT_SWIPE, undefined, function (eventData) {\n return that.trigger(CHANGING, eventData);\n });\n } else if (prevPage > -1) {\n that.scrollTo(prevPage);\n }\n },\n next: function () {\n var that = this, nextPage = that.page + 1;\n if (that._content instanceof VirtualScrollViewContent) {\n that._content.paneMoved(LEFT_SWIPE, undefined, function (eventData) {\n return that.trigger(CHANGING, eventData);\n });\n } else if (nextPage < that._content.pageCount) {\n that.scrollTo(nextPage);\n }\n },\n setDataSource: function (dataSource) {\n if (!(this._content instanceof VirtualScrollViewContent)) {\n return;\n }\n var emptyDataSource = !dataSource;\n this.dataSource = DataSource.create(dataSource);\n this._content.setDataSource(this.dataSource);\n if (this.options.autoBind && !emptyDataSource) {\n this.dataSource.fetch();\n }\n },\n items: function () {\n return this.element.find('.km-' + VIRTUAL_PAGE_CLASS);\n },\n _syncWithContent: function () {\n var pages = this._content.pages, buffer = this._content.buffer, data, element;\n this.page = this._content.page;\n data = buffer ? buffer.at(this.page) : undefined;\n if (!(data instanceof Array)) {\n data = [data];\n }\n element = pages ? pages[1].element : undefined;\n this.trigger(CHANGE, {\n page: this.page,\n element: element,\n data: data\n });\n },\n _dragStart: function () {\n if (this._content.forcePageUpdate()) {\n this._syncWithContent();\n }\n },\n _dragEnd: function (e) {\n var that = this, velocity = e.x.velocity, velocityThreshold = this.options.velocityThreshold, swipeType = NUDGE, bounce = abs(velocity) > this.options.bounceVelocityThreshold;\n if (velocity > velocityThreshold) {\n swipeType = RIGHT_SWIPE;\n } else if (velocity < -velocityThreshold) {\n swipeType = LEFT_SWIPE;\n }\n this._content.paneMoved(swipeType, bounce, function (eventData) {\n return that.trigger(CHANGING, eventData);\n });\n },\n _transitionEnd: function () {\n if (this._content.updatePage()) {\n this._syncWithContent();\n }\n }\n });\n ui.plugin(ScrollView);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.switch', [\n 'kendo.fx',\n 'kendo.userevents'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.switch',\n name: 'Switch',\n category: 'mobile',\n description: 'The mobile Switch widget is used to display two exclusive choices.',\n depends: [\n 'fx',\n 'userevents'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.mobile.ui, outerWidth = kendo._outerWidth, Widget = ui.Widget, support = kendo.support, CHANGE = 'change', SWITCHON = 'switch-on', SWITCHOFF = 'switch-off', MARGINLEFT = 'margin-left', ACTIVE_STATE = 'state-active', DISABLED_STATE = 'state-disabled', DISABLED = 'disabled', RESOLVEDPREFIX = support.transitions.css === undefined ? '' : support.transitions.css, TRANSFORMSTYLE = RESOLVEDPREFIX + 'transform', proxy = $.proxy;\n function className(name) {\n return 'km-' + name;\n }\n function limitValue(value, minLimit, maxLimit) {\n return Math.max(minLimit, Math.min(maxLimit, value));\n }\n var SWITCH_MARKUP = '<span class=\"' + className('switch') + ' ' + className('widget') + '\"> <span class=\"' + className('switch-wrapper') + '\"> <span class=\"' + className('switch-background') + '\"></span> </span> <span class=\"' + className('switch-container') + '\"> <span class=\"' + className('switch-handle') + '\"> <span class=\"' + className('switch-label-on') + '\">{0}</span> <span class=\"' + className('switch-label-off') + '\">{1}</span> </span> </span> </span>';\n var Switch = Widget.extend({\n init: function (element, options) {\n var that = this, checked;\n Widget.fn.init.call(that, element, options);\n options = that.options;\n that.wrapper = $(kendo.format(SWITCH_MARKUP, options.onLabel, options.offLabel));\n that.handle = that.wrapper.find('.km-switch-handle');\n that.background = that.wrapper.find('.km-switch-background');\n that.wrapper.insertBefore(that.element).prepend(that.element);\n that._drag();\n that.origin = parseInt(that.background.css(MARGINLEFT), 10);\n that.constrain = 0;\n that.snapPoint = 0;\n element = that.element[0];\n element.type = 'checkbox';\n that._animateBackground = true;\n checked = that.options.checked;\n if (checked === null) {\n checked = element.checked;\n }\n that.check(checked);\n that.options.enable = that.options.enable && !that.element.attr(DISABLED);\n that.enable(that.options.enable);\n that.refresh();\n kendo.notify(that, kendo.mobile.ui);\n },\n refresh: function () {\n var that = this, handleWidth = outerWidth(that.handle, true);\n that.width = that.wrapper.width();\n that.constrain = that.width - handleWidth;\n that.snapPoint = that.constrain / 2;\n if (typeof that.origin != 'number') {\n that.origin = parseInt(that.background.css(MARGINLEFT), 10);\n }\n that.background.data('origin', that.origin);\n that.check(that.element[0].checked);\n },\n events: [CHANGE],\n options: {\n name: 'Switch',\n onLabel: 'on',\n offLabel: 'off',\n checked: null,\n enable: true\n },\n check: function (check) {\n var that = this, element = that.element[0];\n if (check === undefined) {\n return element.checked;\n }\n that._position(check ? that.constrain : 0);\n element.checked = check;\n that.wrapper.toggleClass(className(SWITCHON), check).toggleClass(className(SWITCHOFF), !check);\n },\n value: function () {\n return this.check.apply(this, arguments);\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.userEvents.destroy();\n },\n toggle: function () {\n var that = this;\n that.check(!that.element[0].checked);\n },\n enable: function (enable) {\n var element = this.element, wrapper = this.wrapper;\n if (typeof enable == 'undefined') {\n enable = true;\n }\n this.options.enable = enable;\n if (enable) {\n element.removeAttr(DISABLED);\n } else {\n element.attr(DISABLED, DISABLED);\n }\n wrapper.toggleClass(className(DISABLED_STATE), !enable);\n },\n _resize: function () {\n this.refresh();\n },\n _move: function (e) {\n var that = this;\n e.preventDefault();\n that._position(limitValue(that.position + e.x.delta, 0, that.width - outerWidth(that.handle, true)));\n },\n _position: function (position) {\n var that = this;\n that.position = position;\n that.handle.css(TRANSFORMSTYLE, 'translatex(' + position + 'px)');\n if (that._animateBackground) {\n that.background.css(MARGINLEFT, that.origin + position);\n }\n },\n _start: function () {\n if (!this.options.enable) {\n this.userEvents.cancel();\n } else {\n this.userEvents.capture();\n this.handle.addClass(className(ACTIVE_STATE));\n }\n },\n _stop: function () {\n var that = this;\n that.handle.removeClass(className(ACTIVE_STATE));\n that._toggle(that.position > that.snapPoint);\n },\n _toggle: function (checked) {\n var that = this, handle = that.handle, element = that.element[0], value = element.checked, duration = kendo.mobile.application && kendo.mobile.application.os.wp ? 100 : 200, distance;\n that.wrapper.toggleClass(className(SWITCHON), checked).toggleClass(className(SWITCHOFF), !checked);\n that.position = distance = checked * that.constrain;\n if (that._animateBackground) {\n that.background.kendoStop(true, true).kendoAnimate({\n effects: 'slideMargin',\n offset: distance,\n reset: true,\n reverse: !checked,\n axis: 'left',\n duration: duration\n });\n }\n handle.kendoStop(true, true).kendoAnimate({\n effects: 'slideTo',\n duration: duration,\n offset: distance + 'px,0',\n reset: true,\n complete: function () {\n if (value !== checked) {\n element.checked = checked;\n that.trigger(CHANGE, { checked: checked });\n }\n }\n });\n },\n _drag: function () {\n var that = this;\n that.userEvents = new kendo.UserEvents(that.wrapper, {\n fastTap: true,\n tap: function () {\n if (that.options.enable) {\n that._toggle(!that.element[0].checked);\n }\n },\n start: proxy(that._start, that),\n move: proxy(that._move, that),\n end: proxy(that._stop, that)\n });\n }\n });\n ui.plugin(Switch);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.tabstrip', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.tabstrip',\n name: 'TabStrip',\n category: 'mobile',\n description: 'The mobile TabStrip widget is used inside a mobile view or layout footer element to display an application-wide group of navigation buttons.',\n depends: ['core']\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.mobile.ui, Widget = ui.Widget, ACTIVE_STATE_CLASS = 'km-state-active', SELECT = 'select';\n function createBadge(value) {\n return $('<span class=\"km-badge\">' + value + '</span>');\n }\n var TabStrip = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n that.container().bind('show', $.proxy(this, 'refresh'));\n that.element.addClass('km-tabstrip').find('a').each(that._buildButton).eq(that.options.selectedIndex).addClass(ACTIVE_STATE_CLASS);\n that.element.on('down', 'a', '_release');\n },\n events: [SELECT],\n switchTo: function (url) {\n var tabs = this.element.find('a'), tab, path, idx = 0, length = tabs.length;\n if (isNaN(url)) {\n for (; idx < length; idx++) {\n tab = tabs[idx];\n path = tab.href.replace(/(\\#.+)(\\?.+)$/, '$1');\n if (path.indexOf(url, path.length - url.length) !== -1) {\n this._setActiveItem($(tab));\n return true;\n }\n }\n } else {\n this._setActiveItem(tabs.eq(url));\n return true;\n }\n return false;\n },\n switchByFullUrl: function (url) {\n var tab;\n tab = this.element.find('a[href$=\\'' + url + '\\']');\n this._setActiveItem(tab);\n },\n clear: function () {\n this.currentItem().removeClass(ACTIVE_STATE_CLASS);\n },\n currentItem: function () {\n return this.element.children('.' + ACTIVE_STATE_CLASS);\n },\n badge: function (item, value) {\n var tabstrip = this.element, badge;\n if (!isNaN(item)) {\n item = tabstrip.children().get(item);\n }\n item = tabstrip.find(item);\n badge = $(item.find('.km-badge')[0] || createBadge(value).insertAfter(item.children('.km-icon')));\n if (value || value === 0) {\n badge.html(value);\n return this;\n }\n if (value === false) {\n badge.empty().remove();\n return this;\n }\n return badge.html();\n },\n _release: function (e) {\n if (e.which > 1) {\n return;\n }\n var that = this, item = $(e.currentTarget);\n if (item[0] === that.currentItem()[0]) {\n return;\n }\n if (that.trigger(SELECT, { item: item })) {\n e.preventDefault();\n } else {\n that._setActiveItem(item);\n }\n },\n _setActiveItem: function (item) {\n if (!item[0]) {\n return;\n }\n this.clear();\n item.addClass(ACTIVE_STATE_CLASS);\n },\n _buildButton: function () {\n var button = $(this), icon = kendo.attrValue(button, 'icon'), badge = kendo.attrValue(button, 'badge'), image = button.find('img'), iconSpan = $('<span class=\"km-icon\"/>');\n button.addClass('km-button').attr(kendo.attr('role'), 'tab').contents().not(image).wrapAll('<span class=\"km-text\"/>');\n if (image[0]) {\n image.addClass('km-image').prependTo(button);\n } else {\n button.prepend(iconSpan);\n if (icon) {\n iconSpan.addClass('km-' + icon);\n if (badge || badge === 0) {\n createBadge(badge).insertAfter(iconSpan);\n }\n }\n }\n },\n refresh: function (e) {\n var url = e.view.id;\n if (url && !this.switchTo(e.view.id)) {\n this.switchTo(url);\n }\n },\n options: {\n name: 'TabStrip',\n selectedIndex: 0,\n enable: true\n }\n });\n ui.plugin(TabStrip);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.angular', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'angular',\n name: 'AngularJS Directives',\n category: 'framework',\n description: 'Adds Kendo UI for AngularJS directives',\n depends: ['core'],\n defer: true\n };\n (function ($, angular, undefined) {\n 'use strict';\n if (!angular || !angular.injector) {\n return;\n }\n var module = angular.module('kendo.directives', []), $injector = angular.injector(['ng']), $parse = $injector.get('$parse'), $timeout = $injector.get('$timeout'), $defaultCompile, $log = $injector.get('$log');\n function withoutTimeout(f) {\n var save = $timeout;\n try {\n $timeout = function (f) {\n return f();\n };\n return f();\n } finally {\n $timeout = save;\n }\n }\n var OPTIONS_NOW;\n var createDataSource = function () {\n var types = {\n TreeList: 'TreeListDataSource',\n TreeView: 'HierarchicalDataSource',\n Scheduler: 'SchedulerDataSource',\n PivotGrid: 'PivotDataSource',\n PivotConfigurator: 'PivotDataSource',\n PanelBar: 'HierarchicalDataSource',\n Menu: '$PLAIN',\n ContextMenu: '$PLAIN'\n };\n var toDataSource = function (dataSource, type) {\n if (type == '$PLAIN') {\n return dataSource;\n }\n return kendo.data[type].create(dataSource);\n };\n return function (scope, element, role, source) {\n var type = types[role] || 'DataSource';\n var current = scope.$eval(source);\n var ds = toDataSource(current, type);\n scope.$watch(source, function (mew) {\n var widget = kendoWidgetInstance(element);\n if (widget && typeof widget.setDataSource == 'function') {\n if (mew !== current && mew !== widget.dataSource) {\n var ds = toDataSource(mew, type);\n widget.setDataSource(ds);\n current = mew;\n }\n }\n });\n return ds;\n };\n }();\n var ignoredAttributes = {\n kDataSource: true,\n kOptions: true,\n kRebind: true,\n kNgModel: true,\n kNgDelay: true\n };\n var ignoredOwnProperties = {\n name: true,\n title: true,\n style: true\n };\n function createWidget(scope, element, attrs, widget, origAttr, controllers) {\n if (!(element instanceof jQuery)) {\n throw new Error('The Kendo UI directives require jQuery to be available before AngularJS. Please include jquery before angular in the document.');\n }\n var kNgDelay = attrs.kNgDelay, delayValue = scope.$eval(kNgDelay);\n controllers = controllers || [];\n var ngModel = controllers[0], ngForm = controllers[1];\n var ctor = $(element)[widget];\n if (!ctor) {\n window.console.error('Could not find: ' + widget);\n return null;\n }\n var parsed = parseOptions(scope, element, attrs, widget, ctor);\n var options = parsed.options;\n if (parsed.unresolved.length) {\n var promises = [];\n for (var i = 0, len = parsed.unresolved.length; i < len; i++) {\n var unresolved = parsed.unresolved[i];\n var promise = $.Deferred(function (d) {\n var unwatch = scope.$watch(unresolved.path, function (newValue) {\n if (newValue !== undefined) {\n unwatch();\n d.resolve();\n }\n });\n }).promise();\n promises.push(promise);\n }\n $.when.apply(null, promises).then(createIt);\n return;\n }\n if (kNgDelay && !delayValue) {\n var root = scope.$root || scope;\n var register = function () {\n var unregister = scope.$watch(kNgDelay, function (newValue) {\n if (newValue !== undefined) {\n unregister();\n element.removeAttr(attrs.$attr.kNgDelay);\n kNgDelay = null;\n $timeout(createIt);\n }\n });\n };\n if (/^\\$(digest|apply)$/.test(root.$$phase)) {\n register();\n } else {\n scope.$apply(register);\n }\n return;\n } else {\n return createIt();\n }\n function createIt() {\n var originalElement;\n if (attrs.kRebind) {\n originalElement = $($(element)[0].cloneNode(true));\n }\n options = parseOptions(scope, element, attrs, widget, ctor).options;\n if (element.is('select')) {\n (function (options) {\n if (options.length > 0) {\n var first = $(options[0]);\n if (!/\\S/.test(first.text()) && /^\\?/.test(first.val())) {\n first.remove();\n }\n for (var i = 0; i < options.length; i++) {\n $(options[i]).off('$destroy');\n }\n }\n }(element[0].options));\n }\n var object = ctor.call(element, OPTIONS_NOW = options).data(widget);\n exposeWidget(object, scope, attrs, widget, origAttr);\n scope.$emit('kendoWidgetCreated', object);\n var destroyRegister = destroyWidgetOnScopeDestroy(scope, object);\n if (attrs.kRebind) {\n setupRebind(object, scope, element, originalElement, attrs.kRebind, destroyRegister, attrs);\n }\n if (attrs.kNgDisabled) {\n var kNgDisabled = attrs.kNgDisabled;\n var isDisabled = scope.$eval(kNgDisabled);\n if (isDisabled) {\n object.enable(!isDisabled);\n }\n bindToKNgDisabled(object, scope, element, kNgDisabled);\n }\n if (attrs.kNgReadonly) {\n var kNgReadonly = attrs.kNgReadonly;\n var isReadonly = scope.$eval(kNgReadonly);\n if (isReadonly) {\n object.readonly(isReadonly);\n }\n bindToKNgReadonly(object, scope, element, kNgReadonly);\n }\n if (attrs.kNgModel) {\n bindToKNgModel(object, scope, attrs.kNgModel);\n }\n if (ngModel) {\n bindToNgModel(object, scope, element, ngModel, ngForm);\n }\n if (object) {\n propagateClassToWidgetWrapper(object, element);\n }\n return object;\n }\n }\n function parseOptions(scope, element, attrs, widget, ctor) {\n var role = widget.replace(/^kendo/, '');\n var unresolved = [];\n var optionsPath = attrs.kOptions || attrs.options;\n var optionsValue = scope.$eval(optionsPath);\n if (optionsPath && optionsValue === undefined) {\n unresolved.push({\n option: 'options',\n path: optionsPath\n });\n }\n var options = angular.extend({}, attrs.defaultOptions, optionsValue);\n function addOption(name, value) {\n var scopeValue = angular.copy(scope.$eval(value));\n if (scopeValue === undefined) {\n unresolved.push({\n option: name,\n path: value\n });\n } else {\n options[name] = scopeValue;\n }\n }\n var widgetOptions = ctor.widget.prototype.options;\n var widgetEvents = ctor.widget.prototype.events;\n $.each(attrs, function (name, value) {\n if (name === 'source' || name === 'kDataSource' || name === 'kScopeField' || name === 'scopeField') {\n return;\n }\n var dataName = 'data' + name.charAt(0).toUpperCase() + name.slice(1);\n if (name.indexOf('on') === 0) {\n var eventKey = name.replace(/^on./, function (prefix) {\n return prefix.charAt(2).toLowerCase();\n });\n if (widgetEvents.indexOf(eventKey) > -1) {\n options[eventKey] = value;\n }\n }\n if (widgetOptions.hasOwnProperty(dataName)) {\n addOption(dataName, value);\n } else if (widgetOptions.hasOwnProperty(name) && !ignoredOwnProperties[name]) {\n addOption(name, value);\n } else if (!ignoredAttributes[name]) {\n var match = name.match(/^k(On)?([A-Z].*)/);\n if (match) {\n var optionName = match[2].charAt(0).toLowerCase() + match[2].slice(1);\n if (match[1] && name != 'kOnLabel') {\n options[optionName] = value;\n } else {\n if (name == 'kOnLabel') {\n optionName = 'onLabel';\n }\n addOption(optionName, value);\n }\n }\n }\n });\n var dataSource = attrs.kDataSource || attrs.source;\n if (dataSource) {\n options.dataSource = createDataSource(scope, element, role, dataSource);\n }\n options.$angular = [scope];\n return {\n options: options,\n unresolved: unresolved\n };\n }\n function bindToKNgDisabled(widget, scope, element, kNgDisabled) {\n if (kendo.ui.PanelBar && widget instanceof kendo.ui.PanelBar || kendo.ui.Menu && widget instanceof kendo.ui.Menu) {\n $log.warn('k-ng-disabled specified on a widget that does not have the enable() method: ' + widget.options.name);\n return;\n }\n scope.$watch(kNgDisabled, function (newValue, oldValue) {\n if (newValue != oldValue) {\n widget.enable(!newValue);\n }\n });\n }\n function bindToKNgReadonly(widget, scope, element, kNgReadonly) {\n if (typeof widget.readonly != 'function') {\n $log.warn('k-ng-readonly specified on a widget that does not have the readonly() method: ' + widget.options.name);\n return;\n }\n scope.$watch(kNgReadonly, function (newValue, oldValue) {\n if (newValue != oldValue) {\n widget.readonly(newValue);\n }\n });\n }\n function exposeWidget(widget, scope, attrs, kendoWidget, origAttr) {\n if (attrs[origAttr]) {\n var set = $parse(attrs[origAttr]).assign;\n if (set) {\n set(scope, widget);\n } else {\n throw new Error(origAttr + ' attribute used but expression in it is not assignable: ' + attrs[kendoWidget]);\n }\n }\n }\n function formValue(element) {\n if (/checkbox|radio/i.test(element.attr('type'))) {\n return element.prop('checked');\n }\n return element.val();\n }\n var formRegExp = /^(input|select|textarea)$/i;\n function isForm(element) {\n return formRegExp.test(element[0].tagName);\n }\n function bindToNgModel(widget, scope, element, ngModel, ngForm) {\n if (!widget.value) {\n return;\n }\n var value;\n var haveChangeOnElement = false;\n if (isForm(element)) {\n value = function () {\n return formValue(element);\n };\n } else {\n value = function () {\n return widget.value();\n };\n }\n var viewRender = function () {\n var val = ngModel.$viewValue;\n if (val === undefined) {\n val = ngModel.$modelValue;\n }\n if (val === undefined) {\n val = null;\n }\n haveChangeOnElement = true;\n setTimeout(function () {\n haveChangeOnElement = false;\n if (widget) {\n var kNgModel = scope[widget.element.attr('k-ng-model')];\n if (kNgModel) {\n val = kNgModel;\n }\n if (widget.options.autoBind === false && !widget.listView.bound()) {\n if (val) {\n widget.value(val);\n }\n } else {\n widget.value(val);\n }\n }\n }, 0);\n };\n ngModel.$render = viewRender;\n setTimeout(function () {\n if (ngModel.$render !== viewRender) {\n ngModel.$render = viewRender;\n ngModel.$render();\n }\n });\n if (isForm(element)) {\n element.on('change', function () {\n haveChangeOnElement = true;\n });\n }\n var onChange = function (pristine) {\n return function () {\n var formPristine;\n if (haveChangeOnElement && !element.is('select')) {\n return;\n }\n if (pristine && ngForm) {\n formPristine = ngForm.$pristine;\n }\n ngModel.$setViewValue(value());\n if (pristine) {\n ngModel.$setPristine();\n if (formPristine) {\n ngForm.$setPristine();\n }\n }\n digest(scope);\n };\n };\n widget.first('change', onChange(false));\n widget.first('spin', onChange(false));\n if (!(kendo.ui.AutoComplete && widget instanceof kendo.ui.AutoComplete)) {\n widget.first('dataBound', onChange(true));\n }\n var currentVal = value();\n if (!isNaN(ngModel.$viewValue) && currentVal != ngModel.$viewValue) {\n if (!ngModel.$isEmpty(ngModel.$viewValue)) {\n widget.value(ngModel.$viewValue);\n } else if (currentVal != null && currentVal !== '' && currentVal != ngModel.$viewValue) {\n ngModel.$setViewValue(currentVal);\n }\n }\n ngModel.$setPristine();\n }\n function bindToKNgModel(widget, scope, kNgModel) {\n if (kendo.ui.DateRangePicker && widget instanceof kendo.ui.DateRangePicker) {\n var rangePickerModels = kNgModel.split(',');\n var rangePickerStartModel = rangePickerModels[0].trim();\n var rangePickerEndModel;\n bindToKNgModel(widget._startDateInput, scope, rangePickerStartModel);\n if (rangePickerModels[1]) {\n rangePickerEndModel = rangePickerModels[1].trim();\n bindToKNgModel(widget._endDateInput, scope, rangePickerEndModel);\n widget.range({\n start: scope[rangePickerStartModel],\n end: scope[rangePickerEndModel]\n });\n } else {\n widget.range({\n start: scope[rangePickerStartModel],\n end: null\n });\n }\n return;\n }\n if (typeof widget.value != 'function') {\n $log.warn('k-ng-model specified on a widget that does not have the value() method: ' + widget.options.name);\n return;\n }\n var form = $(widget.element).parents('ng-form, form').first();\n var ngForm = kendo.getter(form.attr('name'), true)(scope);\n var getter = $parse(kNgModel);\n var setter = getter.assign;\n var updating = false;\n var valueIsCollection = kendo.ui.MultiSelect && widget instanceof kendo.ui.MultiSelect || kendo.ui.RangeSlider && widget instanceof kendo.ui.RangeSlider;\n var length = function (value) {\n return value && valueIsCollection ? value.length : 0;\n };\n var currentValueLength = length(getter(scope));\n widget.$angular_setLogicValue(getter(scope));\n var watchHandler = function (newValue, oldValue) {\n if (newValue === undefined) {\n newValue = null;\n }\n if (updating || newValue == oldValue && length(newValue) == currentValueLength) {\n return;\n }\n currentValueLength = length(newValue);\n widget.$angular_setLogicValue(newValue);\n };\n if (valueIsCollection) {\n scope.$watchCollection(kNgModel, watchHandler);\n } else {\n scope.$watch(kNgModel, watchHandler);\n }\n var changeHandler = function () {\n updating = true;\n if (ngForm && ngForm.$pristine) {\n ngForm.$setDirty();\n }\n digest(scope, function () {\n setter(scope, widget.$angular_getLogicValue());\n currentValueLength = length(getter(scope));\n });\n updating = false;\n };\n widget.first('change', changeHandler);\n widget.first('spin', changeHandler);\n }\n function destroyWidgetOnScopeDestroy(scope, widget) {\n var deregister = scope.$on('$destroy', function () {\n deregister();\n if (widget) {\n kendo.destroy(widget.element);\n widget = null;\n }\n });\n return deregister;\n }\n function propagateClassToWidgetWrapper(widget, element) {\n if (!(window.MutationObserver && widget.wrapper)) {\n return;\n }\n var prevClassList = [].slice.call($(element)[0].classList);\n var mo = new MutationObserver(function (changes) {\n suspend();\n if (!widget) {\n return;\n }\n changes.forEach(function (chg) {\n var w = $(widget.wrapper)[0];\n switch (chg.attributeName) {\n case 'class':\n var currClassList = [].slice.call(chg.target.classList);\n currClassList.forEach(function (cls) {\n if (prevClassList.indexOf(cls) < 0) {\n w.classList.add(cls);\n if (kendo.ui.ComboBox && widget instanceof kendo.ui.ComboBox) {\n widget.input[0].classList.add(cls);\n }\n }\n });\n prevClassList.forEach(function (cls) {\n if (currClassList.indexOf(cls) < 0) {\n w.classList.remove(cls);\n if (kendo.ui.ComboBox && widget instanceof kendo.ui.ComboBox) {\n widget.input[0].classList.remove(cls);\n }\n }\n });\n prevClassList = currClassList;\n break;\n case 'disabled':\n if (typeof widget.enable == 'function' && !widget.element.attr('readonly')) {\n widget.enable(!$(chg.target).attr('disabled'));\n }\n break;\n case 'readonly':\n if (typeof widget.readonly == 'function' && !widget.element.attr('disabled')) {\n widget.readonly(!!$(chg.target).attr('readonly'));\n }\n break;\n }\n });\n resume();\n });\n function suspend() {\n mo.disconnect();\n }\n function resume() {\n mo.observe($(element)[0], { attributes: true });\n }\n resume();\n widget.first('destroy', suspend);\n }\n function setupRebind(widget, scope, element, originalElement, rebindAttr, destroyRegister, attrs) {\n var unregister = scope.$watch(rebindAttr, function (newValue, oldValue) {\n if (!widget._muteRebind && newValue !== oldValue) {\n unregister();\n if (attrs._cleanUp) {\n attrs._cleanUp();\n }\n var templateOptions = WIDGET_TEMPLATE_OPTIONS[widget.options.name];\n if (templateOptions) {\n templateOptions.forEach(function (name) {\n var templateContents = scope.$eval(attrs['k' + name]);\n if (templateContents) {\n originalElement.append($(templateContents).attr(kendo.toHyphens('k' + name), ''));\n }\n });\n }\n var _wrapper = $(widget.wrapper)[0];\n var _element = $(widget.element)[0];\n var isUpload = widget.options.name === 'Upload';\n if (isUpload) {\n element = $(_element);\n }\n var compile = element.injector().get('$compile');\n widget._destroy();\n if (destroyRegister) {\n destroyRegister();\n }\n widget = null;\n if (_element) {\n if (_wrapper) {\n _wrapper.parentNode.replaceChild(_element, _wrapper);\n }\n $(element).replaceWith(originalElement);\n }\n compile(originalElement)(scope);\n }\n }, true);\n digest(scope);\n }\n function bind(f, obj) {\n return function (a, b) {\n return f.call(obj, a, b);\n };\n }\n function setTemplate(key, value) {\n this[key] = kendo.stringify(value);\n }\n module.factory('directiveFactory', [\n '$compile',\n function (compile) {\n var kendoRenderedTimeout;\n var RENDERED = false;\n $defaultCompile = compile;\n var create = function (role, origAttr) {\n return {\n restrict: 'AC',\n require: [\n '?ngModel',\n '^?form'\n ],\n scope: false,\n controller: [\n '$scope',\n '$attrs',\n '$element',\n function ($scope, $attrs) {\n this.template = bind(setTemplate, $attrs);\n $attrs._cleanUp = bind(function () {\n this.template = null;\n $attrs._cleanUp = null;\n }, this);\n }\n ],\n link: function (scope, element, attrs, controllers) {\n var $element = $(element);\n var roleattr = role.replace(/([A-Z])/g, '-$1');\n $element.attr(roleattr, $element.attr('data-' + roleattr));\n $element[0].removeAttribute('data-' + roleattr);\n var widget = createWidget(scope, element, attrs, role, origAttr, controllers);\n if (!widget) {\n return;\n }\n if (kendoRenderedTimeout) {\n clearTimeout(kendoRenderedTimeout);\n }\n kendoRenderedTimeout = setTimeout(function () {\n scope.$emit('kendoRendered');\n if (!RENDERED) {\n RENDERED = true;\n $('form').each(function () {\n var form = $(this).controller('form');\n if (form) {\n form.$setPristine();\n }\n });\n }\n });\n }\n };\n };\n return { create: create };\n }\n ]);\n var TAGNAMES = {\n Editor: 'textarea',\n NumericTextBox: 'input',\n DatePicker: 'input',\n DateTimePicker: 'input',\n TimePicker: 'input',\n AutoComplete: 'input',\n ColorPicker: 'input',\n MaskedTextBox: 'input',\n MultiSelect: 'input',\n Upload: 'input',\n Validator: 'form',\n Button: 'button',\n MobileButton: 'a',\n MobileBackButton: 'a',\n MobileDetailButton: 'a',\n ListView: 'ul',\n MobileListView: 'ul',\n ScrollView: 'div',\n PanelBar: 'ul',\n TreeView: 'ul',\n Menu: 'ul',\n ContextMenu: 'ul',\n ActionSheet: 'ul',\n Switch: 'input'\n };\n var SKIP_SHORTCUTS = [\n 'MobileView',\n 'MobileDrawer',\n 'MobileLayout',\n 'MobileSplitView',\n 'MobilePane',\n 'MobileModalView'\n ];\n var MANUAL_DIRECTIVES = [\n 'MobileApplication',\n 'MobileView',\n 'MobileModalView',\n 'MobileLayout',\n 'MobileActionSheet',\n 'MobileDrawer',\n 'MobileSplitView',\n 'MobilePane',\n 'MobileScrollView',\n 'MobilePopOver'\n ];\n angular.forEach([\n 'MobileNavBar',\n 'MobileButton',\n 'MobileBackButton',\n 'MobileDetailButton',\n 'MobileTabStrip',\n 'MobileScrollView',\n 'MobileScroller'\n ], function (widget) {\n MANUAL_DIRECTIVES.push(widget);\n widget = 'kendo' + widget;\n module.directive(widget, function () {\n return {\n restrict: 'A',\n link: function (scope, element, attrs) {\n createWidget(scope, element, attrs, widget, widget);\n }\n };\n });\n });\n function createDirectives(klass, isMobile) {\n function make(directiveName, widgetName) {\n module.directive(directiveName, [\n 'directiveFactory',\n function (directiveFactory) {\n return directiveFactory.create(widgetName, directiveName);\n }\n ]);\n }\n var name = isMobile ? 'Mobile' : '';\n name += klass.fn.options.name;\n var className = name;\n var shortcut = 'kendo' + name.charAt(0) + name.substr(1).toLowerCase();\n name = 'kendo' + name;\n var dashed = name.replace(/([A-Z])/g, '-$1');\n if (SKIP_SHORTCUTS.indexOf(name.replace('kendo', '')) == -1) {\n var names = name === shortcut ? [name] : [\n name,\n shortcut\n ];\n angular.forEach(names, function (directiveName) {\n module.directive(directiveName, function () {\n return {\n restrict: 'E',\n replace: true,\n template: function (element, attributes) {\n var tag = TAGNAMES[className] || 'div';\n var scopeField = attributes.kScopeField || attributes.scopeField;\n return '<' + tag + ' ' + dashed + (scopeField ? '=\"' + scopeField + '\"' : '') + '>' + element.html() + '</' + tag + '>';\n }\n };\n });\n });\n }\n if (MANUAL_DIRECTIVES.indexOf(name.replace('kendo', '')) > -1) {\n return;\n }\n make(name, name);\n if (shortcut != name) {\n make(shortcut, name);\n }\n }\n function kendoWidgetInstance(el) {\n el = $(el);\n return kendo.widgetInstance(el, kendo.ui) || kendo.widgetInstance(el, kendo.mobile.ui) || kendo.widgetInstance(el, kendo.dataviz.ui);\n }\n function digest(scope, func) {\n var root = scope.$root || scope;\n var isDigesting = /^\\$(digest|apply)$/.test(root.$$phase);\n if (func) {\n if (isDigesting) {\n func();\n } else {\n root.$apply(func);\n }\n } else if (!isDigesting) {\n root.$digest();\n }\n }\n function destroyScope(scope, el) {\n scope.$destroy();\n if (el) {\n $(el).removeData('$scope').removeData('$$kendoScope').removeData('$isolateScope').removeData('$isolateScopeNoTemplate').removeClass('ng-scope');\n }\n }\n var encode = kendo.htmlEncode;\n var open = /{{/g;\n var close = /}}/g;\n var encOpen = '{​{';\n var encClose = '}​}';\n kendo.htmlEncode = function (str) {\n return encode(str).replace(open, encOpen).replace(close, encClose);\n };\n var pendingPatches = [];\n function defadvice(klass, methodName, func) {\n if ($.isArray(klass)) {\n return angular.forEach(klass, function (klass) {\n defadvice(klass, methodName, func);\n });\n }\n if (typeof klass == 'string') {\n var a = klass.split('.');\n var x = kendo;\n while (x && a.length > 0) {\n x = x[a.shift()];\n }\n if (!x) {\n pendingPatches.push([\n klass,\n methodName,\n func\n ]);\n return false;\n }\n klass = x.prototype;\n }\n var origMethod = klass[methodName];\n klass[methodName] = function () {\n var self = this, args = arguments;\n return func.apply({\n self: self,\n next: function () {\n return origMethod.apply(self, arguments.length > 0 ? arguments : args);\n }\n }, args);\n };\n return true;\n }\n kendo.onWidgetRegistered(function (entry) {\n pendingPatches = $.grep(pendingPatches, function (args) {\n return !defadvice.apply(null, args);\n });\n createDirectives(entry.widget, entry.prefix == 'Mobile');\n });\n defadvice([\n 'ui.Widget',\n 'mobile.ui.Widget'\n ], 'angular', function (cmd, arg) {\n var self = this.self;\n if (cmd == 'init') {\n if (!arg && OPTIONS_NOW) {\n arg = OPTIONS_NOW;\n }\n OPTIONS_NOW = null;\n if (arg && arg.$angular) {\n self.$angular_scope = arg.$angular[0];\n self.$angular_init(self.element, arg);\n }\n return;\n }\n var scope = self.$angular_scope;\n if (scope) {\n withoutTimeout(function () {\n var x = arg(), elements = x.elements, data = x.data;\n if (elements.length > 0) {\n switch (cmd) {\n case 'cleanup':\n angular.forEach(elements, function (el) {\n var itemScope = $(el).data('$$kendoScope');\n if (itemScope && itemScope !== scope && itemScope.$$kendoScope) {\n destroyScope(itemScope, el);\n }\n });\n break;\n case 'compile':\n var injector = self.element.injector();\n var compile = injector ? injector.get('$compile') : $defaultCompile;\n angular.forEach(elements, function (el, i) {\n var itemScope;\n if (x.scopeFrom) {\n itemScope = x.scopeFrom;\n } else {\n var vars = data && data[i];\n if (vars !== undefined) {\n itemScope = $.extend(scope.$new(), vars);\n itemScope.$$kendoScope = true;\n } else {\n itemScope = scope;\n }\n }\n $(el).data('$$kendoScope', itemScope);\n compile(el)(itemScope);\n });\n digest(scope);\n break;\n }\n }\n });\n }\n });\n defadvice('ui.Widget', '$angular_getLogicValue', function () {\n return this.self.value();\n });\n defadvice('ui.Widget', '$angular_setLogicValue', function (val) {\n this.self.value(val);\n });\n defadvice('ui.Select', '$angular_getLogicValue', function () {\n var item = this.self.dataItem(), valueField = this.self.options.dataValueField;\n if (item) {\n if (this.self.options.valuePrimitive) {\n if (!!valueField) {\n return item[valueField];\n } else {\n return item;\n }\n } else {\n return item.toJSON();\n }\n } else {\n return null;\n }\n });\n defadvice('ui.Select', '$angular_setLogicValue', function (val) {\n var self = this.self;\n var options = self.options;\n var valueField = options.dataValueField;\n var text = options.text || '';\n if (val === undefined) {\n val = '';\n }\n if (valueField && !options.valuePrimitive && val) {\n text = val[options.dataTextField] || '';\n val = val[valueField || options.dataTextField];\n }\n if (self.options.autoBind === false && !self.listView.bound()) {\n if (!text && val && options.valuePrimitive) {\n self.value(val);\n } else {\n self._preselect(val, text);\n }\n } else {\n self.value(val);\n }\n });\n defadvice('ui.MultiSelect', '$angular_getLogicValue', function () {\n var value = this.self.dataItems().slice(0);\n var valueField = this.self.options.dataValueField;\n if (valueField && this.self.options.valuePrimitive) {\n value = $.map(value, function (item) {\n return item[valueField];\n });\n }\n return value;\n });\n defadvice('ui.MultiSelect', '$angular_setLogicValue', function (val) {\n if (val == null) {\n val = [];\n }\n var self = this.self;\n var options = self.options;\n var valueField = options.dataValueField;\n var data = val;\n if (valueField && !options.valuePrimitive) {\n val = $.map(val, function (item) {\n return item[valueField];\n });\n }\n if (options.autoBind === false && !options.valuePrimitive && !self.listView.bound()) {\n self._preselect(data, val);\n } else {\n self.value(val);\n }\n });\n defadvice('ui.Widget', '$angular_init', function (element, options) {\n var self = this.self;\n if (options && !$.isArray(options)) {\n var scope = self.$angular_scope;\n for (var i = self.events.length; --i >= 0;) {\n var event = self.events[i];\n var handler = options[event];\n if (handler && typeof handler == 'string') {\n options[event] = self.$angular_makeEventHandler(event, scope, handler);\n }\n }\n }\n });\n defadvice('ui.Widget', '$angular_makeEventHandler', function (event, scope, handler) {\n handler = $parse(handler);\n return function (e) {\n digest(scope, function () {\n handler(scope, { kendoEvent: e });\n });\n };\n });\n defadvice([\n 'ui.Grid',\n 'ui.ListView',\n 'ui.TreeView',\n 'ui.PanelBar'\n ], '$angular_makeEventHandler', function (event, scope, handler) {\n if (event != 'change') {\n return this.next();\n }\n handler = $parse(handler);\n return function (ev) {\n var widget = ev.sender;\n var options = widget.options;\n var cell, multiple, locals = { kendoEvent: ev }, elems, items, columns, colIdx;\n if (angular.isString(options.selectable)) {\n cell = options.selectable.indexOf('cell') !== -1;\n multiple = options.selectable.indexOf('multiple') !== -1;\n }\n if (widget._checkBoxSelection) {\n multiple = true;\n }\n elems = locals.selected = this.select();\n items = locals.data = [];\n columns = locals.columns = [];\n for (var i = 0; i < elems.length; i++) {\n var item = cell ? elems[i].parentNode : elems[i];\n var dataItem = widget.dataItem(item);\n if (cell) {\n if (angular.element.inArray(dataItem, items) < 0) {\n items.push(dataItem);\n }\n colIdx = angular.element(elems[i]).index();\n if (angular.element.inArray(colIdx, columns) < 0) {\n columns.push(colIdx);\n }\n } else {\n items.push(dataItem);\n }\n }\n if (!multiple) {\n locals.dataItem = locals.data = items[0];\n locals.angularDataItem = kendo.proxyModelSetters(locals.dataItem);\n locals.selected = elems[0];\n }\n digest(scope, function () {\n handler(scope, locals);\n });\n };\n });\n defadvice('ui.Grid', '$angular_init', function (element, options) {\n this.next();\n if (options.columns) {\n var settings = $.extend({}, kendo.Template, options.templateSettings);\n angular.forEach(options.columns, function (col) {\n if (col.field && !col.template && !col.format && !col.values && (col.encoded === undefined || col.encoded)) {\n col.template = '<span ng-bind=\\'' + kendo.expr(col.field, 'dataItem') + '\\'>#: ' + kendo.expr(col.field, settings.paramName) + '#</span>';\n }\n });\n }\n });\n {\n defadvice('mobile.ui.ButtonGroup', 'value', function (mew) {\n var self = this.self;\n if (mew != null) {\n self.select(self.element.children('li.km-button').eq(mew));\n self.trigger('change');\n self.trigger('select', { index: self.selectedIndex });\n }\n return self.selectedIndex;\n });\n defadvice('mobile.ui.ButtonGroup', '_select', function () {\n this.next();\n this.self.trigger('change');\n });\n }\n module.directive('kendoMobileApplication', function () {\n return {\n terminal: true,\n link: function (scope, element, attrs) {\n createWidget(scope, element, attrs, 'kendoMobileApplication', 'kendoMobileApplication');\n }\n };\n }).directive('kendoMobileView', function () {\n return {\n scope: true,\n link: {\n pre: function (scope, element, attrs) {\n attrs.defaultOptions = scope.viewOptions;\n attrs._instance = createWidget(scope, element, attrs, 'kendoMobileView', 'kendoMobileView');\n },\n post: function (scope, element, attrs) {\n attrs._instance._layout();\n attrs._instance._scroller();\n }\n }\n };\n }).directive('kendoMobileDrawer', function () {\n return {\n scope: true,\n link: {\n pre: function (scope, element, attrs) {\n attrs.defaultOptions = scope.viewOptions;\n attrs._instance = createWidget(scope, element, attrs, 'kendoMobileDrawer', 'kendoMobileDrawer');\n },\n post: function (scope, element, attrs) {\n attrs._instance._layout();\n attrs._instance._scroller();\n }\n }\n };\n }).directive('kendoMobileModalView', function () {\n return {\n scope: true,\n link: {\n pre: function (scope, element, attrs) {\n attrs.defaultOptions = scope.viewOptions;\n attrs._instance = createWidget(scope, element, attrs, 'kendoMobileModalView', 'kendoMobileModalView');\n },\n post: function (scope, element, attrs) {\n attrs._instance._layout();\n attrs._instance._scroller();\n }\n }\n };\n }).directive('kendoMobileSplitView', function () {\n return {\n terminal: true,\n link: {\n pre: function (scope, element, attrs) {\n attrs.defaultOptions = scope.viewOptions;\n attrs._instance = createWidget(scope, element, attrs, 'kendoMobileSplitView', 'kendoMobileSplitView');\n },\n post: function (scope, element, attrs) {\n attrs._instance._layout();\n }\n }\n };\n }).directive('kendoMobilePane', function () {\n return {\n terminal: true,\n link: {\n pre: function (scope, element, attrs) {\n attrs.defaultOptions = scope.viewOptions;\n createWidget(scope, element, attrs, 'kendoMobilePane', 'kendoMobilePane');\n }\n }\n };\n }).directive('kendoMobileLayout', function () {\n return {\n link: {\n pre: function (scope, element, attrs) {\n createWidget(scope, element, attrs, 'kendoMobileLayout', 'kendoMobileLayout');\n }\n }\n };\n }).directive('kendoMobileActionSheet', function () {\n return {\n restrict: 'A',\n link: function (scope, element, attrs) {\n element.find('a[k-action]').each(function () {\n $(this).attr('data-' + kendo.ns + 'action', $(this).attr('k-action'));\n });\n createWidget(scope, element, attrs, 'kendoMobileActionSheet', 'kendoMobileActionSheet');\n }\n };\n }).directive('kendoMobilePopOver', function () {\n return {\n terminal: true,\n link: {\n pre: function (scope, element, attrs) {\n attrs.defaultOptions = scope.viewOptions;\n createWidget(scope, element, attrs, 'kendoMobilePopOver', 'kendoMobilePopOver');\n }\n }\n };\n }).directive('kendoViewTitle', function () {\n return {\n restrict: 'E',\n replace: true,\n template: function (element) {\n return '<span data-' + kendo.ns + 'role=\\'view-title\\'>' + element.html() + '</span>';\n }\n };\n }).directive('kendoMobileHeader', function () {\n return {\n restrict: 'E',\n link: function (scope, element) {\n element.addClass('km-header').attr('data-role', 'header');\n }\n };\n }).directive('kendoMobileFooter', function () {\n return {\n restrict: 'E',\n link: function (scope, element) {\n element.addClass('km-footer').attr('data-role', 'footer');\n }\n };\n }).directive('kendoMobileScrollViewPage', function () {\n return {\n restrict: 'E',\n replace: true,\n template: function (element) {\n return '<div data-' + kendo.ns + 'role=\\'page\\'>' + element.html() + '</div>';\n }\n };\n });\n angular.forEach([\n 'align',\n 'icon',\n 'rel',\n 'transition',\n 'actionsheetContext'\n ], function (attr) {\n var kAttr = 'k' + attr.slice(0, 1).toUpperCase() + attr.slice(1);\n module.directive(kAttr, function () {\n return {\n restrict: 'A',\n priority: 2,\n link: function (scope, element, attrs) {\n element.attr(kendo.attr(kendo.toHyphens(attr)), scope.$eval(attrs[kAttr]));\n }\n };\n });\n });\n var WIDGET_TEMPLATE_OPTIONS = {\n 'TreeMap': ['Template'],\n 'MobileListView': [\n 'HeaderTemplate',\n 'Template'\n ],\n 'MobileScrollView': [\n 'EmptyTemplate',\n 'Template'\n ],\n 'Grid': [\n 'AltRowTemplate',\n 'DetailTemplate',\n 'RowTemplate'\n ],\n 'ListView': [\n 'EditTemplate',\n 'Template',\n 'AltTemplate'\n ],\n 'Pager': [\n 'SelectTemplate',\n 'LinkTemplate'\n ],\n 'PivotGrid': [\n 'ColumnHeaderTemplate',\n 'DataCellTemplate',\n 'RowHeaderTemplate'\n ],\n 'Scheduler': [\n 'AllDayEventTemplate',\n 'DateHeaderTemplate',\n 'EventTemplate',\n 'MajorTimeHeaderTemplate',\n 'MinorTimeHeaderTemplate'\n ],\n 'ScrollView': ['Template'],\n 'PanelBar': ['Template'],\n 'TreeView': ['Template'],\n 'Validator': ['ErrorTemplate']\n };\n (function () {\n var templateDirectives = {};\n angular.forEach(WIDGET_TEMPLATE_OPTIONS, function (templates, widget) {\n angular.forEach(templates, function (template) {\n if (!templateDirectives[template]) {\n templateDirectives[template] = [];\n }\n templateDirectives[template].push('?^^kendo' + widget);\n });\n });\n angular.forEach(templateDirectives, function (parents, directive) {\n var templateName = 'k' + directive;\n var attrName = kendo.toHyphens(templateName);\n module.directive(templateName, function () {\n return {\n restrict: 'A',\n require: parents,\n terminal: true,\n compile: function ($element, $attrs) {\n if ($attrs[templateName] !== '') {\n return;\n }\n $element.removeAttr(attrName);\n var template = $element[0].outerHTML;\n return function (scope, element, attrs, controllers) {\n var controller;\n while (!controller && controllers.length) {\n controller = controllers.shift();\n }\n if (!controller) {\n $log.warn(attrName + ' without a matching parent widget found. It can be one of the following: ' + parents.join(', '));\n } else {\n controller.template(templateName, template);\n element.remove();\n }\n };\n }\n };\n });\n });\n }());\n }(window.kendo.jQuery, window.angular));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.ui.core', [\n 'kendo.core',\n 'kendo.router',\n 'kendo.touch',\n 'kendo.view',\n 'kendo.floatinglabel',\n 'kendo.fx',\n 'kendo.data.odata',\n 'kendo.data.xml',\n 'kendo.data',\n 'kendo.data.signalr',\n 'kendo.binder',\n 'kendo.validator',\n 'kendo.userevents',\n 'kendo.draganddrop',\n 'kendo.mobile.scroller',\n 'kendo.resizable',\n 'kendo.sortable',\n 'kendo.selectable',\n 'kendo.badge',\n 'kendo.button',\n 'kendo.pager',\n 'kendo.popup',\n 'kendo.notification',\n 'kendo.tooltip',\n 'kendo.toolbar',\n 'kendo.list',\n 'kendo.calendar',\n 'kendo.dateinput',\n 'kendo.datepicker',\n 'kendo.autocomplete',\n 'kendo.dropdownlist',\n 'kendo.combobox',\n 'kendo.multiselect',\n 'kendo.colorpicker',\n 'kendo.listview',\n 'kendo.listbox',\n 'kendo.loader',\n 'kendo.textbox',\n 'kendo.textarea',\n 'kendo.numerictextbox',\n 'kendo.maskedtextbox',\n 'kendo.menu',\n 'kendo.editable',\n 'kendo.panelbar',\n 'kendo.progressbar',\n 'kendo.responsivepanel',\n 'kendo.tabstrip',\n 'kendo.timepicker',\n 'kendo.datetimepicker',\n 'kendo.slider',\n 'kendo.splitter',\n 'kendo.dialog',\n 'kendo.window',\n 'kendo.virtuallist',\n 'kendo.mobile.popover',\n 'kendo.mobile.loader',\n 'kendo.mobile.scroller',\n 'kendo.mobile.shim',\n 'kendo.mobile.view',\n 'kendo.mobile.modalview',\n 'kendo.mobile.drawer',\n 'kendo.mobile.splitview',\n 'kendo.mobile.pane',\n 'kendo.mobile.application',\n 'kendo.mobile.actionsheet',\n 'kendo.mobile.button',\n 'kendo.mobile.buttongroup',\n 'kendo.mobile.collapsible',\n 'kendo.mobile.listview',\n 'kendo.mobile.navbar',\n 'kendo.mobile.scrollview',\n 'kendo.mobile.switch',\n 'kendo.mobile.tabstrip',\n 'kendo.angular'\n ], f);\n}(function () {\n 'bundle all';\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));"]}