{"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","Date","getTime","isFunction","clone","UNDEFINED","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","isRtl","webkit","mozila","mozilla","el","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","parseOption","option","dashRegExp","getAttribute","ns","numberRegExp","parseFloat","jsonRegExp","jsonFormatRegExp","Function","parseOptions","role","templateRegExp","template","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","e","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","String","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","parseInt","_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","_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","safari","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","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","angular","_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","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","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","decodeURIComponent","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","matchesMedia","mediaQuery","media","_bootstrapToMedia","bootstrapMedia","xs","sm","md","lg","xl","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","amd","a1","a2","a3","absoluteURL","path","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","_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","batchURL","batch","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","error","XmlDataReader","idField","xmlParse","model","errors","serialize","modelBase","Model","fields","xpathToMember","modelInstance","evaluate","record","_parse","xml","parseDOM","parsedNode","attribute","attributes","attributeCount","firstChild","nextSibling","intermediateResult","tree","parseXML","raw","readers","eventHandler","_notifyChange","equal","xtype","ytype","getFieldByName","fieldName","Query","normalizeSort","descriptor","descriptors","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","groups","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","prop","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","json","object","howMany","thisArg","reduce","reduceRight","every","some","Symbol","_parent","_handlers","shouldSerialize","_set","paths","composite","isSetPrevented","isObservableArray","isDataSource","boolean","default","defaults","_initializers","dirtyFields","editable","initiator","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","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","_filter","_group","_aggregate","_total","_shouldDetachObservableParents","pushCreate","_pushCreate","pushUpdate","_pushUpdate","pushDestroy","_pushDestroy","offlineStorage","_storage","getItem","localStorage","setItem","reader","_detachObservableParents","_observe","_online","serverSorting","serverPaging","serverFiltering","serverAggregates","inPlaceSort","online","sync","Deferred","resolve","offlineData","_isServerGrouped","_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","deferred","_promise","converted","_params","_queueRequest","isPrevented","_dequeueRequest","_readAggregates","replaceSubset","itemIds","j","_aggregateResult","_skip","endless","_changeHandler","updatePristine","timestamp","_timeStamp","_sortRanges","xhr","errorThrown","_requestInProgress","_pending","_shouldWrap","arrayType","_updateTotalForAction","_calculateAggregates","_take","currentRangeStart","_clearEmptyGroups","_queryProcess","dataToAggregate","_setFilterTotal","_mergeState","_currentRangeStart","moreItemsCount","remote","filterTotal","setDefaultValue","fetch","_query","done","next","totalPages","_pageableQueryOptions","_emptyAggregates","ceil","inRange","_findRange","lastRange","firstItemUid","enableRequestsInProgress","_skipRequestsInProgress","_currentRequestTimeStamp","pageSkip","_processRangeData","_rangeExists","prefetch","skipIdx","takeIdx","startIndex","endIndex","rangeData","rangeEnd","processed","flatData","_mergeGroups","prevGroup","temp","paging","sorting","filtering","_prefetchSuccessHandler","_timeout","_multiplePrefetch","_removeModelFromRange","_updateRangesLength","rangesLength","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","removeAttribute","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","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","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","pow","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","isJQueryPromise","fail","isNativePromise","hub","signalr","callbacks","_crud","server","resolveRules","resolvers","validator","ruleResolvers","numberOfDecimalDigits","parseHtml","parseHTML","searchForMessageContainer","invalidMsgRegExp","Validator","NS","INVALIDMSG","INVALIDINPUT","VALIDINPUT","emailRegExp","urlRegExp","INPUTSELECTOR","CHECKBOXSELECTOR","NUMBERINPUTSELECTOR","BLUR","NAME","FORM","NOVALIDATE","VALIDATE","VALIDATE_INPUT","patternMatcher","matcher","hasAttribute","validateAttributeSelector","_errorTemplate","errorTemplate","_inputSelector","_checkboxSelector","_errors","_attachEvents","_isValidated","required","email","dateCompare","checkbox","raise","validateOnBlur","validate","stopImmediatePropagation","_checkElement","validateInput","inputs","invalid","isValid","valid","lbl","messageText","wasValid","messageLabel","lblId","inputWrap","_checkValidity","_findMessageContainer","_extractMessage","_decorateMessageContainer","insertAfter","_inputWrapper","hideMessages","locators","messageLocators","getElementsByTagName","locate","decorate","ruleKey","nonDefaultMessage","customMessage","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","_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","eventData","_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","_items","not","collision","elementPosition","Selectable","ARIASELECTED","SELECTED","ACTIVE","SELECTABLE","UNSELECT","UNSELECTING","supportEventDelegation","_marquee","_lastActive","aria","inputSelectors","_isElement","ctrlKey","metaKey","whichCode","buttonCode","button","_allowSelection","selectRange","_firstSelectee","_unselect","_notify","_downTarget","currentElement","useAllItems","_selectElement","_invalidateSelectables","toSelect","selectElement","preventNotify","resetTouchEvents","continuousItems","selectable","asLowerString","CLICK","MOUSEDOWN","MOUSEUP","KBUTTON","KBUTTONICON","KBUTTONICONTEXT","DISABLED","DISABLEDSTATE","FOCUSEDSTATE","SELECTEDSTATE","Button","iconElement","_focus","_blur","_keydown","_removeActive","_addActive","icon","iconClass","spriteCssClass","imageUrl","_isNativeButton","span","img","isEmpty","err","numeric","wrapClassName","iconTemplate","FIRST","PREV","NEXT","LAST","SIZE","KEYDOWN","DOCUMENT_ELEMENT","MAX_VALUE","Pager","pageSizes","pageItems","sizeClassName","_createDataSource","linkTemplate","selectTemplate","currentPageTemplate","_refreshHandler","downEvent","previousNext","of","allPages","itemsPerPage","DropDownList","kendoDropDownList","_refreshClick","_toggleActive","_resizeHandler","_getWidthSizeClass","buttonCount","responsive","morePages","setDataSource","reminder","hasAll","selectAll","collapsedTotal","_collapsedTotal","_hideList","sizes","tabKeyTrapNS","focusableNodesSelector","TabKeyTrap","OPEN","CLOSE","DEACTIVATE","ACTIVATE","CENTER","TOP","BOTTOM","ABSOLUTE","BODY","LOCATION","VISIBLE","EFFECTS","ACTIVEBORDER","ACTIVEBORDERREGEXP","ACTIVECHILDREN","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","_align","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","showOn","_showOn","_isShownOnMouseEnter","_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","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","align","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","parentElement","directionNumber","searchIndex","focusableItem","elementToFocus","prevElement","prevElements","prevAll","containerWidth","_stretch","_markVisibles","_childrenWidth","childrenWidth","commandElement","visibleCommands","_hideItem","hiddenCommands","_showItem","overflowItems","toolbarItems","visibleOverflowItems","visibleToolbarItems","unifyType","getSelectedOption","mapChangedItems","itemsToMatch","itemsLength","selectedLength","changed","unchanged","isValidFilterExpr","removeFiltersForField","STATIC_LIST_NS","StaticList","percentageUnitsRegex","ID","FOCUSED","HOVER","LOADING","GROUPHEADER","ITEMSELECTOR","LABELIDPART","CASCADE","HIDDENCLASS","isIE","isIE8","quotRegExp","alternativeNames","ComboBox","List","_isSelect","ul","aria-hidden","_listMousedown","columns","_columnsHeader","_header","_noData","_footer","_accessors","_initValue","footerTemplate","headerTemplate","noDataTemplate","_renderFooter","_renderNoData","_focused","_editable","_angularElement","colGroup","row","currentColumn","columnsHeaderTemplate","currentWidth","currentWidthInt","widthStyle","columnsHeader","noData","_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","_text","_value","_aria","suggest","_ariaLabel","labelId","focusedElm","inputElm","inputId","labelElm","ariaLabel","ariaLabelledBy","_generateLabelId","_oldText","_valueBeforeCascade","_userTriggered","_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","_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","activeFilter","shouldTrigger","_fetch","dataItemByIndex","getElementIndex","_focusElement","focusout","scrollWith","_fetchData","hasItems","_options","optionLabel","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","_get","focusIndex","skipUpdate","_skipUpdate","indices","filtered","singleSelection","selectedIndices","added","_deselectFiltered","_deselect","_valueComparer","removeAt","setValue","_valueDeferred","_valueIndices","_valueExpr","normalized","_valueType","_dataItemPosition","valueExpr","removedIndices","_template","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","FOCUS","prevent","dateObject","getCalendarInfo","depth","extractFormat","MONTH","dates","makeUnselectable","addClassToViewContainer","currentView","isEqualDatePart","value1","value2","isEqualMonth","getDisabledExpr","createDisabledExpr","convertDatesArray","disabledDates","searchExpression","isEqualDate","oldValue","toDateObject","link","transitionOrigin","KEYDOWN_NS","MIN","SLIDE","CENTURY","NAVIGATE","OTHERMONTHCLASS","OUTOFRANGE","TODAY","CELLSELECTOR","CELLSELECTORVALID","WEEKCOLUMNSELECTOR","FOCUS_WITH_NS","MOUSEENTER_WITH_NS","MOUSELEAVE","PREVARROW","NEXTARROW","ARIA_DISABLED","ARIA_SELECTED","ARIA_LABEL","decade","century","Calendar","unescape","_selectable","_viewWrapper","_focusView","focusOnNav","_cellID","_class","_selectDates","_index","_addClassProxy","_active","_cell","todayString","toDateString","_cellByDate","_removeClassProxy","selectDates","weekColumnHeader","_today","_title","_destroySelectable","_table","_bindTable","_option","navigateToPast","navigateToFuture","navigateUp","navigateDown","future","_oldTable","_changeView","_animate","_visualizeSelectedDatesInView","validSelectedDates","datesUnique","_validateValue","selectedDates","selectableOptions","_onSelect","_onRelatedTarget","eventArgs","_toggleSelection","_cellsBySelector","_addSelectedCellsToArray","_rangeSelection","currentCell","toDateCell","daysDifference","toDate","currentDateIndex","_dateInView","firstDateInView","lastDateInView","focusedDate","isDisabled","_keyboardToggleSelection","_nextNavigatable","_keyboardRangeSelection","navigatableDate","active","viewWrapper","_horizontal","viewWidth","float","margin-left","unwrap","_vertical","disabledDate","links","firstDayCurrentMonth","isBigger","isTodayDisabled","_todayClick","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","STATEDISABLED","STATEDEFAULT","STATEINVALID","READONLY","DateInput","insidePicker","weekday","hour","minute","second","dayperiod","_unbindInput","_bindInput","_updateElementValue","_formElement","_dateTime","getDateObject","_oldValue","stringAndFromat","toPair","_format","_paste","_input","_mouseUp","_scroll","navigationOnly","difSym","newEvent","stateInvalid","blinkInvalid","parsePart","_selectSegment","_blinkInvalidTimeout","_selectNearestSegment","returnValue","keycode","modifyPart","begin","initDate","initFormat","initCulture","initMessages","generateMatcher","retFormat","returnsFormat","setExisting","typedMonthPart","typedDayPeriodPart","sampleFormat","placeholders","mins","formatResult","getValue","newMonth","setMinutes","setSeconds","currentChar","newHours","monthNames","newYear","newMinutes","newSeconds","parseFormats","DatePicker","DIV","SPAN","DEFAULT","HOVEREVENTS","MAX","ARIA_EXPANDED","ARIA_HIDDEN","DateView","_dateViewID","_calendar","_setOptions","popupHovered","selectIsClicked","handled","_initialOptions","dateView","_updateARIA","_icon","aria-expanded","aria-owns","autocomplete","_createDateInput","_update","ARIATemplate","dateInput","_dateInput","_dateIcon","eventType","dateChanged","valueUpdated","textFormatted","aria-controls","formattedValue","isSameType","_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","indexes","_getIndecies","deferredRange","itemCount","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","Infinity","list2","range2","_bufferSizes","buffers","elementIndex","selectedIndexes","removedindexesCounter","_deselectSingleItem","oldSkip","_clickHandler","firstItem","indexOfWordAtCaret","caretIdx","wordAtCaret","replaceWordAtCaret","defaultSeparator","words","placeholderSupported","ARIA_READONLY","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","hasOptionLabel","_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","dataLength","isInLoop","fromCharCode","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","maxSelectedItems","tagTemplate","persistTagList","currentTag","_currentTag","_selectedItemChange","_initialValues","optionsMap","tagTextTemplate","notInput","closeButton","_removeTag","tag","listViewChild","customIndex","listViewChildren","_close","classList","_updateTagListHTML","_tagListClick","_clearClick","_clearSingleTagValue","_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","_maxTotal","maxTotal","currentTotal","isSelected","indicesToSelect","selectIndices","_innerWrapper","aria-autocomplete","defaultTemplate","hasDataSource","isMultiple","computedStyles","hex","hue2rgb","p","q","parseColor","color","BaseColor","matchNamedColor","RGB","namedColors","Bytes","HSV","HSL","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","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","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","_hueSlider","_opacitySlider","_hsvRect","_hsvHandle","preview","track","backgroundImage","hueChange","opacityChange","hueSlider","opacitySlider","kendoSlider","slide","rw","rh","_svChange","hsvRect","hsvHandle","_hsvEvents","hue","handlePosition","dontChangeInput","ColorPicker","_selector","innerWrapper","toolIcon","_getPopup","selOptions","_noColorIcon","_isInputTypeColor","selectorType","kendoButton","selectorColor","buttonHtml","CLASS_ICON","truncate","INPUT","SPIN","TOUCHEND","STATE_INVALID","INTEGER_REGEXP","NumericTextBox","inputType","isStep","_focusout","_arrows","_validation","_toggleText","factor","restrictDecimals","spinners","upArrowText","downArrowText","_upArrowEventHandler","_downArrowEventHandler","_spin","_upArrow","_downArrow","_keyup","_arrowsWrap","aria-valuemin","aria-valuemax","adjusted","_adjust","_focusin","arrows","_spinning","_validationIcon","_focusing","groupRegExp","extractRegExp","caretPosition","_culture","_removeInvalidState","CLASSNAME","_key","_step","isNumPadDecimal","_numericRegex","_addInvalidState","fractionRule","_floatRegExp","originalValue","rounder","isNotNull","DOMElement","fieldType","convertToValueBinding","bindAttr","createAttributes","ruleName","stringRule","validation","DATATYPE","BINDING","specialRules","convertItems","addValidationRules","modelField","oldIE","nameSpecialCharRegExp","ERRORTEMPLATE","EQUAL_SET","editors","kendoNumericTextBox","kendoDatePicker","mobileEditors","Editable","_isMobile","_validateProxy","_validate","clearContainer","skipFocus","editor","isObject","isValuesEditor","isCustomEditor","preventChangeTrigger","_validationEventInProgress","bindAttribute","bindingRegex","validatable","modelFields","DATABOUND","DATABINDING","FOCUSSELECTOR","KEDITITEM","EDIT","REMOVE","SAVE","TOUCHSTART","ListView","_itemId","_pageable","_crudHandlers","_scrollable","navigatable","altTemplate","editTemplate","_item","_progress","_error","hasHeight","endlessAppend","_endlessFetchInProgress","_skipRerenderItemsCount","_destroyEditable","_focusNext","pagerId","pageable","pager","multi","originalPageSize","scrollable","overflow-y","-webkit-overflow-scrolling","_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","_addItem","_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","_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","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","_inputHandler","_legacyIEInputHandler","__changing","inputChange","backward","contentStart","endContent","lengthDiff","__dropping","_trimStartPromptChars","_findCaretPosBackwards","__backward","__pasting","chr","chrIdx","tokenIdx","tokensLength","_blinkInvalidState","_invalidStateTimeout","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","borders","wrapperCssWidth","_reinitOverflow","overflowChanged","_destroyOverflow","popupWrapper","popupParentLi","isNumeric","mouseWheelDistance","backwardDouble","forwardDouble","scrolling","touchEvents","scrollValue","finish","mouseenterHandler","mousedownHandler","scrollSpeed","_closeChildPopups","currentScroll","_toggleDisabled","attemptGetItem","referenceItem","inserted","_insert","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","_parentsUntil","enterKey","itemSelectEventData","isSelectItemDefaultPrevented","isSelectDefaultPrevented","_getEventData","_moveHover","belongsToVertical","_itemBelongsToVertival","_itemDown","_itemUp","_itemEsc","_childPopupElement","menuIsVertical","nextItem","_scrollToItem","_itemRight","parentItem","_itemLeft","scrollDir","currentScrollOffset","itemSize","itemOffset","ulSize","scrollButtonSize","itemPosition","findByUid","wrapperElement","itemsToUpdate","updateProxy","_updateItem","removeProxy","_appendItems","nextElement","_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","_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","KCOMPLETEDCHUNK","KUPCOMINGCHUNK","KSTATEDISABLED","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","image","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","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","offsetDiff","dst","midnight","noon","lastTimeOption","interval","TimeView","TimePicker","ARIA_ACTIVEDESCENDANT","_dates","_timeViewID","_heightHandler","dataBind","_html","msStart","lastIdx","msLastTime","msInterval","innerText","_distinctSelection","selectionIndex","timeView","timeFormat","ARIA_OWNS","dateViewParams","timeViewParams","DateTimePicker","_views","_icons","_midnight","_calculateMidnight","dateButtonText","timeButtonText","dateIcon","timeIcon","_timeIcon","secondView","minDateEqual","maxDateEqual","timeViewOptions","rebind","isDateViewVisible","adjustedDate","_timeSelected","icons","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","config","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","KCONTENT","KSCROLL","KTITLELESS","KDIALOGTITLE","KDIALOGTITLEBAR","KBUTTONGROUP","KALERT","KCONFIRM","KPROMPT","KTEXTBOX","KOVERLAY","INITOPEN","TOUCHMOVE","small","medium","large","DATADOCOVERFLOWRULE","DATAHTMLTAPYRULE","CSSFLEXBOX","okText","promptInput","overlaySelector","DialogBase","_init","_centerCallback","_center","wrapperTemplate","_createDialog","_defaultFocus","_dimensions","_tabKeyTrap","_triggerOpen","sizeClass","actions","_createActionbar","_closable","_enableDocumentScrolling","_overlay","_setElementMaxHeight","_setElementHeight","paddingBox","elementMaxHeight","_paddingBox","_uiHeight","_applyScrollClassName","hasScroll","actionbar","actionbarHeight","titlebar","titlebarHeight","overlay","_waiAriaOverlay","_removeWaiAriaOverlay","preventScroll","_stopDocumentScrolling","_overlayedNodes","jthis","hiddenValue","_closeClick","_closeKeyHandler","closable","titleId","titlebarActions","closeAction","isStretchedLayout","buttonLayout","_addButtons","_normalizeButtonSize","btn","actionClick","_actionClick","actionKeyHandler","_actionKeyHandler","buttonSize","_mergeTextWithOptions","lastButton","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","MINIMIZE_MAXIMIZE","KPIN","KUNPIN","PIN_UNPIN","TITLEBAR_BUTTONS","REFRESHICON","WINDOWEVENTSHANDLED","zero","Window","windowContent","windowFrame","globalWindow","suppressActions","_createWindow","minTop","minLeft","maxTop","maxLeft","_buttonEnter","_buttonLeave","_windowActionHandler","windowInstance","aria-labelledby","_onDocumentResize","contentBoxSizing","lrBorderWidth","tbBorderWidth","_isPinned","_updateBoundaries","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","contentTemplate","_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","_layout","_scroller","_model","layout","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","Loader","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","badge","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","_content","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","optionsValue","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","attributeName","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":"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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 = '2019.2.514'.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($('
').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) {\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 el = element instanceof $ ? element[0] : element;\n var isRtl;\n if (!element) {\n return;\n }\n isRtl = support.isRtl(element);\n if (value !== undefined) {\n if (isRtl && webkit) {\n el.scrollLeft = el.scrollWidth - el.clientWidth - value;\n } else if (isRtl && mozila) {\n el.scrollLeft = -value;\n } else {\n el.scrollLeft = value;\n }\n } else {\n if (isRtl && webkit) {\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 = '';\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, mozilla = support.browser.mozilla;\n support.msPointers = !chrome && window.MSPointerEvent;\n support.pointers = !chrome && !mozilla && 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;\n function htmlEncode(value) {\n return ('' + value).replace(ampRegExp, '&').replace(ltRegExp, '<').replace(gtRegExp, '>').replace(quoteRegExp, '"').replace(aposRegExp, ''');\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 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 if (dataSource) {\n options = extend({}, options, { dataSource: {} });\n }\n options = that.options = extend(true, {}, that.options, 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 }\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, widget.fn.options), 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 ]) > -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 = container.scrollLeft();\n webkitCorrection = browser.webkit ? !isRtl ? 0 : container[0].scrollWidth - container.width() - 2 * containerScrollLeft : 0;\n mask = $(kendo.format('
{1}
', 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;\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') {\n return element.data('kendoView');\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 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 (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 }\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(kendo.date.getDate(date).getTime() + kendo.date.getMilliseconds(time));\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.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 (function () {\n function postToProxy(dataURI, fileName, proxyURL, proxyTarget) {\n var 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 $('').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 }(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 if (that._finished) {\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 = {};\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 = { '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 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\\((.*?)\\)\\/$/;\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 () {\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();\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 this.trigger(CHANGE, {\n action: 'add',\n index: index,\n items: items\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 var ObservableObject = Observable.extend({\n init: function (value) {\n var that = this, member, field, parent = function () {\n return that;\n };\n Observable.fn.init.call(this);\n this._handlers = {};\n for (field in value) {\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) {\n return this.hasOwnProperty(field) && field !== '_handlers' && field !== '_events' && 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 () {\n var result = {}, value, field;\n for (field in this) {\n if (this.shouldSerialize(field)) {\n value = this[field];\n if (value instanceof ObservableObject || value instanceof ObservableArray) {\n value = value.toJSON();\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, initiator) {\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, initiator) && !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 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) {\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 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 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 _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 && !inPlace) {\n query = query.sort(sort);\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);\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.hasSubgroups) {\n convertGroup(record.items, getters, modelInstance, originalFieldNames, fieldNames);\n } else {\n convertRecords(record.items, getters, modelInstance, originalFieldNames, fieldNames);\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.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 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.hasSubgroups) {\n wrapGroupItems(group.items, model);\n } else {\n group.items = new LazyObservableArray(group.items, model, group.items._events);\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 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 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._filter = normalizeFilter(options.filter);\n that._group = normalizeGroup(options.group);\n that._aggregate = options.aggregate;\n that._total = options.total;\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 _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 });\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 }\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._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 = start + that._flatData(data, true).length;\n that._ranges.push({\n start: start,\n end: end,\n data: data,\n pristineData: data.toJSON(),\n timestamp: that._timeStamp()\n });\n that._sortRanges();\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 }, 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 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 result = that._queryProcess(data, options);\n if (that.options.serverAggregates !== true) {\n that._aggregateResult = that._calculateAggregates(result.dataToAggregate || data, options);\n }\n that.view(result.data);\n that._setFilterTotal(result.total, false);\n e = e || {};\n e.items = e.items || that._view;\n that.trigger(CHANGE, e);\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 }\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 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.view(result.data);\n this.trigger(REQUESTEND, { type: 'read' });\n this.trigger(CHANGE, { items: result.data });\n }\n return $.Deferred().resolve(isPrevented).promise();\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 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._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 if (val !== undefined) {\n that._query({ group: val });\n return;\n }\n return that._group;\n },\n total: function () {\n return parseInt(this._total || 0, 10);\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();\n return math.ceil((that.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) {\n this._currentRequestTimeStamp = this._timeStamp();\n this._skipRequestsInProgress = true;\n skip = math.min(skip || 0, this.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, that.total()), data;\n data = that._findRange(skip, math.min(skip + take, that.total()));\n if (data.length || that.total() === 0) {\n that._processRangeData(data, skip, take, pageSkip, size);\n callback();\n return;\n }\n if (take !== undefined) {\n if (!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) {\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;\n for (skipIdx = 0, length = ranges.length; skipIdx < length; skipIdx++) {\n range = ranges[skipIdx];\n if (start >= range.start && start <= range.end) {\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 }\n return [];\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) {\n var that = this;\n that._pending = undefined;\n that._skip = skip > that.skip() ? 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);\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 range.pristineData = temp;\n range.data = that._observe(temp);\n range.end = range.start + that._flatData(range.data, true).length;\n that._sortRanges();\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._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 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 _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 _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 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 range;\n var i;\n for (i = 0; i < rangesLength; i++) {\n range = ranges[i];\n lengthDifference = that._flatData(range.data, true).length - 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 });\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(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 && $.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 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-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-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('', options.valueField || options.textField, options.textField || options.valueField);\n } else {\n template = '';\n }\n } else if (nodeName == 'tbody') {\n template = '#:data#';\n } else if (nodeName == 'ul' || nodeName == 'ol') {\n template = '
  • #:data#
  • ';\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 };\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) {\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 element.data('keys', $.uniqueSort(oldKeys)).height();\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 = /]*>(([\\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 that._initOptions(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, { 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($('
    ').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('
    ').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('
    ');\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 = $('
    ');\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('
    ').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.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', 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 };\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 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 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 },\n events: [\n VALIDATE,\n CHANGE,\n VALIDATE_INPUT\n ],\n options: {\n name: 'Validator',\n errorTemplate: '' + ' #=message#',\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 },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.element.off(NS);\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()) {\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 this.trigger(VALIDATE, { valid: result });\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 })).hide(), messageText, wasValid = !input.attr('aria-invalid');\n input.removeAttr('aria-invalid');\n if (!valid) {\n messageText = that._extractMessage(input, result.key);\n that._errors[fieldName] = messageText;\n var messageLabel = parseHtml(template({ message: decode(messageText) }));\n var lblId = lbl.attr('id');\n that._decorateMessageContainer(messageLabel, fieldName);\n if (lblId) {\n messageLabel.attr('id', lblId);\n }\n if (!lbl.replaceWith(messageLabel).length) {\n messageLabel.insertAfter(input);\n }\n messageLabel.show();\n input.attr('aria-invalid', 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 });\n }\n input.toggleClass(INVALIDINPUT, !valid);\n input.toggleClass(VALIDINPUT, valid);\n if (kendo.widgetInstance(input)) {\n var inputWrap = kendo.widgetInstance(input)._inputWrapper;\n if (inputWrap) {\n inputWrap.toggleClass(INVALIDINPUT, !valid);\n inputWrap.toggleClass(INVALIDINPUT, !valid);\n }\n }\n return valid;\n },\n hideMessages: function () {\n var that = this, className = '.' + INVALIDMSG, element = that.element;\n if (!element.is(INPUTSELECTOR)) {\n element.find(className).hide();\n } else {\n element.next(className).hide();\n }\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 for (name in locators) {\n locators[name].decorate(container, fieldName);\n }\n container.attr('role', 'alert');\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 || input.attr('title') || customMessage || '', 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 });\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 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.options.holdToDrag && 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 that._snapBack();\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 = $('
    ');\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('
    ');\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('
    ').prepend('
    ');\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 (!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 this.scrollElement.scrollLeft(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('' + that.pullTemplate({}) + '');\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 = $('');\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 return /left|right/.test(item.css('float')) || /inline|table-cell/.test(item.css('display'));\n },\n _cancel: function () {\n this.draggedElement.show();\n this.placeholder.remove();\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', msie = kendo.support.browser.msie, supportEventDelegation = false;\n (function ($) {\n (function () {\n $('
    ').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 = $('
    ');\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.button', ['kendo.core'], 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: ['core']\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, proxy = $.proxy, keys = kendo.keys, CLICK = 'click', MOUSEDOWN = kendo.support.mousedown, MOUSEUP = kendo.support.mouseup, 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 = 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 && !element.attr(DISABLED);\n that.enable(options.enable);\n if (options.enable) {\n that._tabindex();\n }\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, proxy(that._removeActive, that));\n kendo.notify(that);\n },\n destroy: function () {\n var that = this;\n that.wrapper.off(NS);\n Widget.fn.destroy.call(that);\n },\n events: [CLICK],\n options: {\n name: 'Button',\n icon: '',\n iconClass: '',\n spriteCssClass: '',\n imageUrl: '',\n enable: true\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 && $.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 = $('\"icon\"').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 = $('').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 = $('').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 });\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-lg k-pager-md k-pager-sm', CHANGE = 'change', NS = '.kendoPager', CLICK = 'click', KEYDOWN = 'keydown', DISABLED = 'disabled', MOUSEDOWN = 'down', DOCUMENT_ELEMENT = $(document.documentElement), MAX_VALUE = Number.MAX_VALUE, iconTemplate = kendo.template('');\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 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 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 that.list = that.element.find('.k-pager-numbers');\n if (!that.list.length) {\n that.list = $('
      ').appendTo(that.element);\n }\n if (options.dataSource && !options.dataSource.total()) {\n that.list.empty().append(that.currentPageTemplate({ text: 0 })).append(that.selectTemplate({ text: 0 }));\n }\n that.list.wrap('
      ');\n }\n if (options.input) {\n if (!that.element.find('.k-pager-input').length) {\n that.element.append('' + options.messages.page + '' + kendo.format(options.messages.of, totalPages) + '');\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 '';\n }\n return '';\n });\n $('' + 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 _toggleActive: function () {\n var that = this;\n if (that.list.hasClass('k-state-expanded')) {\n DOCUMENT_ELEMENT.unbind(that.downEvent, $.proxy(that._hideList, that));\n } else {\n DOCUMENT_ELEMENT.bind(that.downEvent, $.proxy(that._hideList, that));\n }\n that.list.toggleClass('k-state-expanded');\n },\n _hideList: function (e) {\n var that = this, target = kendo.eventTarget(e);\n if (!$.contains(that.list[0], target)) {\n DOCUMENT_ELEMENT.unbind(that.downEvent, $.proxy(that._hideList, that));\n that.list.removeClass('k-state-expanded');\n }\n },\n _click: function (e) {\n var target = $(e.currentTarget);\n e.preventDefault();\n if (!target.is('.k-state-disabled')) {\n this.page(target.attr(kendo.attr('page')));\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 !== undefined) {\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[2];\n } else if (width <= 640) {\n return sizes[1];\n } else if (width <= 1024) {\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 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)) {\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 = '
      ', TEMPLATE = '
      ' + '' + '#=content#' + '' + '
      ', 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 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.width() - options.position.right;\n }\n if (y === null) {\n y = $(window).height() - wrapper.height() - 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).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 = '
      #if (!autoHide) {#
      #}#' + '
      ' + '#if (callout){ #
      #}#' + '
      ', IFRAMETEMPLATE = kendo.template(''), 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 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 },\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.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 },\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, 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', GROUP_START = 'k-group-start', GROUP_END = 'k-group-end', PRIMARY = 'k-primary', 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: '
      ',\n overflowContainer: '
        '\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).show();\n this.options.hidden = false;\n },\n hide: function () {\n this.element.addClass(STATE_HIDDEN).hide();\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.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 ? $('') : $('');\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 && $.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 = $('').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 = $('').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 = $('\"icon\"').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('' + options.text + '');\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 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('' + options.text + '');\n } else {\n element.html('' + options.text + '');\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('
      • ').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 = $('
        ');\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 = $('
      • ');\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 = $('
        ');\n this.options = options;\n this.toolbar = toolbar;\n this.mainButton = new ToolBarButton($.extend({}, options, { hidden: false }), toolbar);\n this.arrowButton = $('');\n this.popupElement = $('
          ');\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', '.' + 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('
        • ').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, '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, '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.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).hide();\n this.options.hidden = true;\n },\n show: function () {\n this.element.removeClass(STATE_HIDDEN).hide();\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 = $('
        • '), 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({}, 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 }, 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 = $('
           
          ');\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 = $('
        •  
        • ');\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 = $('
           
          ');\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 = $('
          ').html(element);\n } else {\n element = element.wrap('
          ').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 = $('
        • ').html(element);\n } else {\n element = element.wrap('
        • ').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('
          ').parent().wrap('
          ').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, 'a.k-button', preventClick);\n that._navigatable();\n if (options.resizable) {\n that.popup.element.on(CLICK, +'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(CLICK, '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(CLICK, '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 if (item.toolbar) {\n if (item.toolbar.options.type === 'button' && item.toolbar.options.isChild) {\n item.toolbar.show();\n item.toolbar.getParentGroup().refresh();\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 item.toolbar.show();\n item.overflow.getParentGroup().refresh();\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('');\n overflowContainer = actionSheetWrap(overflowContainer);\n } else {\n that.overflowAnchor.append('');\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', '.' + 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', 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', 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.hide();\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 if (item.length && containerWidth > this._childrenWidth() + outerWidth(item, true)) {\n item.show();\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', 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': 'DropDownList',\n 'DropDownList': 'ComboBox'\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 = $('
            ').attr({\n tabIndex: -1,\n 'aria-hidden': true\n });\n that.list = $('
            ').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: 'No data found.'\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 = '
            ';\n var colGroup = '';\n var row = '';\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 += '';\n row += '';\n }\n colGroup += '';\n row += '';\n header += colGroup;\n header += row;\n header += '
            ';\n row += columnsHeaderTemplate(currentColumn);\n row += '
            ';\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;\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 = $('
            ').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 = $('
            ').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;\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 && list.options.messages.clear ? list.options.messages.clear : 'clear';\n if (!list._clear) {\n list._clear = $('').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 = !$.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 },\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 (value !== unifyType(that._old, typeof value) && value !== unifyType(that._oldText, typeof 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 that._oldText = that.text && that.text();\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 _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 } 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 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 = $('
            ').parent();\n this.header = this.content.before('
            ').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 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) {\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 removed.push({\n position: j + removedIndices,\n dataItem: dataItems.splice(j, 1)[0]\n });\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('
          • ${' + kendo.expr(options.dataTextField, 'data') + '}
          • ', { useWithBlock: false });\n } else {\n template = kendo.template(template);\n template = function (data) {\n return '
          • ' + template(data) + '
          • ';\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) {\n this.header.html(template(visibleItem.group));\n }\n },\n _renderItem: function (context) {\n var item = '
          • ';\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 += '
            ' + this.templates.groupTemplate(context.group) + '
            ';\n } else {\n item += '
            ' + this.templates.groupTemplate(context.group) + '
            ';\n }\n } else if (isGrouped && hasColumns) {\n item += '
            ';\n }\n return item + '
          • ';\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 += '';\n item += this.templates['column' + i](dataItem);\n item += '';\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('#=data.value#', { useWithBlock: false }), emptyCellTemplate = template('', { useWithBlock: false }), otherMonthCellTemplate = template(' ', { useWithBlock: false }), weekNumberTemplate = template('#= data.weekNumber #', { 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 };\n var Calendar = Widget.extend({\n init: function (element, options) {\n var that = this, value, id;\n Widget.fn.init.call(that, element, options);\n element = that.wrapper = that.element;\n options = that.options;\n options.url = window.unescape(options.url);\n that.options.disableDates = getDisabledExpr(that.options.disableDates);\n that._templates();\n that._selectable();\n that._header();\n that._viewWrapper();\n that._footer(that.footer);\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, 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: { weekColumnHeader: '' }\n },\n events: [\n CHANGE,\n NAVIGATE\n ],\n setOptions: function (options) {\n var that = this;\n normalize(options);\n options.disableDates = getDisabledExpr(options.disableDates);\n Widget.fn.setOptions.call(that, options);\n that._templates();\n that._selectable();\n that._viewWrapper();\n that._footer(that.footer);\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;\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 }, 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 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(CELLSELECTOR + ':first').find('a')), lastDateInView = toDateObject(that._cellsBySelector(CELLSELECTOR + ':last').find('a'));\n return +date <= +lastDateInView && +date >= +firstDateInView;\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 (isDisabled(currentValue)) {\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('
            ');\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 = $('
            ').insertAfter(element.find('.k-header'));\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 = $('
            ').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, links;\n if (!element.find('.k-header')[0]) {\n element.html('
            ' + '' + '' + '' + '
            ');\n }\n links = element.find('.k-link').on(MOUSEENTER_WITH_NS + ' ' + MOUSELEAVE + ' ' + FOCUS_WITH_NS + ' ' + BLUR, mousetoggle).on('click', function () {\n return false;\n });\n that._title = links.eq(1).on(CLICK, function () {\n that._active = that.options.focusOnNav !== false;\n that.navigateUp();\n });\n that[PREVARROW] = links.eq(0).on(CLICK, function () {\n that._active = that.options.focusOnNav !== false;\n that.navigateToPast();\n });\n that[NEXTARROW] = links.eq(2).on(CLICK, function () {\n that._active = that.options.focusOnNav !== false;\n that.navigateToFuture();\n });\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('' + (content || '#=data.value#') + '', { useWithBlock: !!content }),\n empty: template('' + (empty || ' ') + '', { useWithBlock: !!empty }),\n weekNumber: template('' + (weekNumber || '#= data.weekNumber #') + '', { 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(), html = '';\n if (showHeader) {\n html += '';\n } else {\n html += '';\n }\n if (isWeekColumnVisible) {\n html += '';\n }\n for (; idx < 7; idx++) {\n html += '';\n }\n adjustDST(today, 0);\n today = +today;\n return view({\n cells: 42,\n perRow: 7,\n html: html += '',\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 += '
            ' + this.title(date, min, max, culture) + '
            ' + options.messages.weekColumnHeader + '' + shortNames[idx] + '
            ';\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 += '
            ';\n html += this.title(options.date);\n html += '
            ';\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 += '
            ';\n html += this.title(options.date, options.min, options.max);\n html += '
            ';\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 || '
            ';\n html += this.title(options.date, options.min, options.max);\n html += '
            ';\n if (isWeekColumnVisible) {\n html += weekNumber(weekNumberBuild(start));\n }\n for (; idx < length; idx++) {\n if (idx > 0 && idx % cellsPerRow === 0) {\n html += '';\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 + '
            ';\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 found = date && window.kendo.jQuery.inArray(date.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 found = date && window.kendo.jQuery.inArray(date.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('').parent();\n that.wrapper.addClass(element[0].className);\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 $('').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 if (form[0]) {\n that._resetHandler = function () {\n setTimeout(function () {\n that.value(element[0].value);\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 this._dateTime.modifyPart(symbol, key == 38 ? 1 : -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 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 > 31) {\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 = '
            ', 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_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').appendTo(body);\n that.options = options = options || {};\n id = options.id;\n if (id) {\n id += '_dateview';\n div.attr(ID, id);\n that._dateViewID = id;\n }\n that.popup = new ui.Popup(div, extend(options.popup, options, {\n name: 'Popup',\n isRtl: kendo.support.isRtl(options.anchor)\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(that.popup.element).on(MOUSEDOWN, preventDefault).on(CLICK, 'td:has(.k-link)', proxy(that._click, that));\n that.calendar = calendar = new ui.Calendar(div);\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 this.popup.destroy();\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.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 this.calendar._focus(date);\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 },\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).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);\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) {\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 }\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 = $('').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) {\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);\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 _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 = $('
            '), 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 $('
            ').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 += '';\n item += templates['column' + i](dataItem);\n item += '';\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('
            ').parent();\n that.wrapper = that.content.wrap('
            ').parent();\n that.header = that.content.before('
            ').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 && 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 = null;\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', 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: 'off',\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.length;\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) {\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 = $('').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('').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);\n that._inputWrapper = $(wrapper[0]);\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', 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._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 ],\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 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.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.popup.open();\n that._resizeFilterInput();\n that._focusItem();\n }\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 = $('
            ').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 = '';\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).on('keydown' + ns, 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);\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._focusElement(that.wrapper);\n that._blur();\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 if (this.optionLabel.hasClass('k-state-focused')) {\n this._resetOptionLabel();\n this.listView.focusFirst();\n } else {\n this.listView.focusNext();\n }\n },\n _prevItem: function () {\n if (this.optionLabel.hasClass('k-state-focused')) {\n return;\n }\n this.listView.focusPrev();\n if (!this.listView.focus()) {\n this._focus(this.optionLabel);\n }\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 = '';\n this.filterInput = $('').attr({\n placeholder: this.element.attr('placeholder'),\n title: this.element.attr('title'),\n role: 'listbox',\n 'aria-haspopup': true,\n 'aria-expanded': false\n });\n this.list.prepend($('').append(this.filterInput.add(icon)));\n }\n },\n _span: function () {\n var that = this, wrapper = that.wrapper, SELECTOR = 'span.k-input', span;\n span = wrapper.find(SELECTOR);\n if (!span[0]) {\n wrapper.append(' ').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('').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).css('display', '').attr({\n accesskey: element.attr('accesskey'),\n unselectable: 'on',\n role: 'listbox',\n 'aria-haspopup': true,\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', 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._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 _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._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 () {\n this.input.focus();\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._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);\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)).on(MOUSEDOWN, function (e) {\n e.preventDefault();\n });\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 } else {\n wrapper.addClass(disable ? STATEDISABLED : DEFAULT).removeClass(disable ? DEFAULT : STATEDISABLED);\n input.attr(DISABLED, disable).attr(READONLY, readonly).attr(ARIA_DISABLED, disable);\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 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) {\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 that._old = that._valueBeforeCascade = that._accessor();\n that._oldIndex = that.selectedIndex;\n that._prev = 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('').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 that.listView.value(that.input.val());\n that._blur();\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 (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 }\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('').parent();\n wrapper[0].style.cssText = element[0].style.cssText;\n }\n that.wrapper = wrapper.addClass('k-widget k-combobox').addClass(element[0].className).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 that._selectedValue = null;\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 });\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', FOCUSEDCLASS = 'k-state-focused', SELECTEDCLASS = 'k-state-selected', HIDDENCLASS = 'k-hidden', HOVERCLASS = 'k-state-hover', STATEDISABLED = 'k-state-disabled', DISABLED = 'disabled', READONLY = 'readonly', 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 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)) {\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) {\n that.persistTagList = false;\n listView.select(listView.select()[position]).done(done);\n } else {\n option = that.element[0].children[customIndex];\n option.selected = false;\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 var target = $(e.currentTarget);\n if (!target.children('.k-i-arrow-60-down').length) {\n this._removeTag(target.closest(LI), true);\n }\n },\n _clearClick: 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 persistTagList = that.persistTagList;\n if (persistTagList) {\n that.persistTagList = false;\n }\n that.listView.value([]);\n that.persistTagList = persistTagList;\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).on(HOVEREVENTS, that._toggleHover).on('mousedown' + ns + ' touchend' + ns, proxy(that._wrapperMousedown, 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 + ns + ' touchend' + ns, proxy(that._clearClick, that));\n input.removeAttr(DISABLED).removeAttr(READONLY).attr(ARIA_DISABLED, false);\n tagList.on(MOUSEENTER, LI, function () {\n $(this).addClass(HOVERCLASS);\n }).on(MOUSELEAVE, LI, function () {\n $(this).removeClass(HOVERCLASS);\n }).on(CLICK, 'li.k-button .k-select', proxy(that._tagListClick, that));\n } else {\n if (disable) {\n wrapper.addClass(STATEDISABLED);\n } else {\n wrapper.removeClass(STATEDISABLED);\n }\n input.attr(DISABLED, disable).attr(READONLY, readonly).attr(ARIA_DISABLED, disable);\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._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 var skip = that.listView.skip();\n that._render(data);\n that._renderFooter();\n that._renderNoData();\n that._toggleNoData(!data.length);\n that._resizePopup();\n if (that._open) {\n that._open = false;\n that.toggle(that._allowOpening());\n }\n that.popup.position();\n if (that.options.highlightFirst && (skip === undefined || skip === 0)) {\n that.listView.focusFirst();\n }\n if (that._touchScroller) {\n that._touchScroller.reset();\n }\n that._hideBusy();\n that._makeUnselectable();\n that.trigger('dataBound');\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 = listView.value();\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 = ' 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 } 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 },\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._innerWrapper.children('input.k-input');\n if (!input[0]) {\n input = $('').appendTo(that._innerWrapper);\n }\n element.removeAttr('accesskey');\n that._focused = that.input = input.attr({\n 'accesskey': accessKey,\n 'autocomplete': 'off',\n 'role': 'listbox',\n 'title': element[0].title,\n 'aria-expanded': false,\n 'aria-haspopup': 'listbox',\n 'aria-autocomplete': 'list'\n });\n },\n _tagList: function () {\n var that = this, tagList = that._innerWrapper.children('ul');\n if (!tagList[0]) {\n tagList = $('
              ').appendTo(that._innerWrapper);\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 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# item(s) selected');\n that.tagTextTemplate = tagTemplate = tagTemplate ? kendo.template(tagTemplate) : defaultTemplate;\n that.tagTemplate = function (data) {\n return '
            • ' + tagTemplate(data) + '' + '
            • ';\n };\n },\n _loader: function () {\n this._loading = $('').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 = $('').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('
              ').parent();\n wrapper[0].style.cssText = element[0].style.cssText;\n wrapper[0].title = element[0].title;\n $('
              ').insertBefore(element);\n }\n that.wrapper = wrapper.addClass(element[0].className).css('display', '');\n that._innerWrapper = $(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 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 });\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 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(that._distance() / 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('' + item.attr('title') + '');\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(), pixelStep = trackDivSize / distance, itemWidth, pixelWidths, i;\n if (distance / options.smallStep - math.floor(distance / options.smallStep) > 0) {\n trackDivSize -= distance % 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(distance / options.smallStep), i = 1, lastItem;\n itemsCount += distance / 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 = distance % 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 '
              ' + '
              ';\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 '' + '';\n }\n function createSliderItems(options, distance) {\n var result = '
                ', count = math.floor(round(distance / options.smallStep)) + 1, i;\n for (i = 0; i < count; i++) {\n result += '
              •  
              • ';\n }\n result += '
              ';\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 '';\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 = $('
              ').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 = '
              ';\n html += that.tooltipInnerDiv;\n }\n that.tooltipDiv.html(html);\n that._scrollOffset = {\n top: wnd.scrollTop(),\n left: wnd.scrollLeft()\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, 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 $('.k-disabled-overlay', this.wrapper).remove();\n if (!enable) {\n this.wrapper.append('
              ');\n }\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('' + '# for (var i = 0; i < colors.length; ++i) { #' + '# var selected = colors[i].equals(value); #' + '# if (i && i % columns == 0) { # # } #' + '' + '# } #' + '
              ')\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-transparency-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._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-transparency-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) { #' + '
              ' + '# if (clearButton && !_standalone) { #' + '' + '# } #' + '
              ' + '# } #' + '# if (clearButton && !_standalone && !preview) { #' + '
              #: messages.clearColor #
              ' + '# } #' + '
              ' + '' + '# if (opacity) { #' + '' + '# } #' + '# if (buttons) { #' + '
              ' + '# } #')\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 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('' + '' + '# if (toolIcon) { #' + '' + '' + '' + '# } else { #' + '' + '# } #' + '' + '' + '' + '' + ''),\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($('
              ').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 ], 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 ]\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', SELECTED = 'k-state-selected', STATEDISABLED = 'k-state-disabled', STATE_INVALID = 'k-state-invalid', ARIA_DISABLED = 'aria-disabled', INTEGER_REGEXP = /^(-)?(\\d*)$/, NULL = null, proxy = $.proxy, 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 });\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 = 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 kendo.notify(that);\n },\n options: {\n name: 'NumericTextBox',\n decimals: NULL,\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 },\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('keypress' + ns).off('keyup' + ns).off('paste' + ns);\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('keypress' + ns, proxy(that._keypress, that)).on('keyup' + ns, proxy(that._keyup, that)).on('paste' + ns, proxy(that._paste, that));\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 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 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 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('').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 = $('').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 });\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 = $('').insertBefore(element).addClass(CLASSNAME);\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 that._key = key;\n if (key == keys.DOWN) {\n that._step(-1);\n } else if (key == keys.UP) {\n that._step(1);\n } else if (key == keys.ENTER) {\n that._change(that.element.val());\n } else if (key != keys.TAB) {\n that._typing = true;\n }\n },\n _keypress: function (e) {\n if (e.which === 0 || e.metaKey || e.ctrlKey || e.keyCode === keys.BACKSPACE || e.keyCode === keys.ENTER) {\n return;\n }\n var that = this;\n var min = that.options.min;\n var element = that.element;\n var selection = caret(element);\n var selectionStart = selection[0];\n var selectionEnd = selection[1];\n var character = String.fromCharCode(e.which);\n var numberFormat = that._format(that.options.format);\n var isNumPadDecimal = that._key === keys.NUMPAD_DOT;\n var value = element.val();\n var isValid;\n if (isNumPadDecimal) {\n character = numberFormat[POINT];\n }\n value = value.substring(0, selectionStart) + character + value.substring(selectionEnd);\n isValid = that._numericRegex(numberFormat).test(value);\n if (isValid && isNumPadDecimal) {\n element.val(value);\n caret(element, selectionStart + character.length);\n e.preventDefault();\n } else if (min !== null && min >= 0 && value.charAt(0) === '-' || !isValid) {\n that._addInvalidState();\n e.preventDefault();\n }\n that._key = 0;\n },\n _keyup: function () {\n this._removeInvalidState();\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 },\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.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 _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('').parent();\n wrapper = wrapper.wrap('').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).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 '' + '' + '';\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.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 '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 = '.', nameSpecialCharRegExp = /(\"|\\%|'|\\[|\\]|\\$|\\.|\\,|\\:|\\;|\\+|\\*|\\&|\\!|\\#|\\(|\\)|<|>|\\=|\\?|\\@|\\^|\\{|\\}|\\~|\\/|\\||`)/g, ERRORTEMPLATE = '
              ' + '#=message#
              ', 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 : {}, ruleName, DATATYPE = kendo.attr('type'), BINDING = kendo.attr('bind'), rule, attr = {\n name: options.field,\n title: options.title\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 }\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 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 var editors = {\n 'number': function (container, options) {\n var attr = createAttributes(options);\n $('').attr(attr).appendTo(container).kendoNumericTextBox({ format: options.format });\n $('').hide().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 $('').attr(attr).appendTo(container).kendoDatePicker({ format: options.format });\n $('').hide().appendTo(container);\n },\n 'string': function (container, options) {\n var attr = createAttributes(options);\n $('').attr(attr).appendTo(container);\n },\n 'boolean': function (container, options) {\n var attr = createAttributes(options);\n $('').attr(attr).appendTo(container);\n },\n 'values': function (container, options) {\n var attr = createAttributes(options);\n var items = kendo.stringify(convertItems(options.values));\n $('').attr(attr).appendTo(container);\n },\n 'date': function (container, options) {\n var attr = createAttributes(options);\n $('').attr(attr).appendTo(container);\n },\n 'string': function (container, options) {\n var attr = createAttributes(options);\n $('').attr(attr).appendTo(container);\n },\n 'boolean': function (container, options) {\n var attr = createAttributes(options);\n $('').attr(attr).appendTo(container);\n },\n 'values': function (container, options) {\n var attr = createAttributes(options);\n var items = options.values;\n var select = $('
              ')\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', 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-content') || !wrapper[0]) {\n element.addClass('k-window-content k-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 that._tabindex(windowContent);\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, proxy(that._keydown, that)).on('focus' + NS, proxy(that._focus, that)).on('blur' + NS, proxy(that._blur, that));\n windowContent.on('keydown' + NS, proxy(that._keydown, that)).on('focus' + NS, proxy(that._focus, that)).on('blur' + NS, proxy(that._blur, 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 windowContent.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;\n this._updateBoundaries();\n if (this.containment) {\n position.top = Math.min(this.minTop + (position.top || 0), this.maxTop);\n position.left = Math.min(this.minLeft + (position.left || 0), 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 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 _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.element.focus();\n } else if (!isMaximized) {\n that.maximize();\n that.element.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 that.element.focus();\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 = $('
              ');\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 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.element.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 (contentElement.data('isFront') && !$(document.activeElement).closest(contentElement).length) {\n that.element.focus();\n }\n });\n }\n if (!wrapper.is(VISIBLE)) {\n contentElement.css(OVERFLOW, HIDDEN);\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.element.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 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 },\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.element;\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 contentElement.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 if (that.isMinimized()) {\n that.wrapper.focus();\n } else if ($(target).is(KOVERLAY)) {\n setTimeout(function () {\n that.element.focus();\n });\n } else {\n that.element.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('tabindex');\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('tabindex', 0);\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)').map(function () {\n var src = this.getAttribute('src');\n this.src = '';\n return src;\n });\n wrapper.toggleClass('k-rtl', isRtl).append(contentHtml).find('iframe:not(.k-content)').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('
              '),\n action: template('' + '' + ''),\n titlebar: template('
              ' + '#= title #' + '
              ' + '
              '),\n overlay: '
              ',\n contentFrame: template(''),\n resizeHandle: template('
              ')\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.width(),\n height: wrapper.height()\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 = '
              ', 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('
              ');\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 = /]*>(([\\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 = $('
              ');\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('
              ').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 = $('
              ');\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: '

              Loading...

              ',\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: '

              Loading...

              '\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('
              ').parent();\n }\n var paneContainer = element.wrap('
              ').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 = '
              ', ARROW = '
              ', OVERLAY = '
              ', 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 = '
              ', 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 = '
              ';\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 = '
              ', 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('', { usedWithBlock: false }), systemMeta = kendo.template(' ' + ' ' + ' ', { usedWithBlock: false }), clipTemplate = kendo.template('', { usedWithBlock: false }), ENABLE_CLIP = OS.android && OS.browser != 'chrome' || OS.blackberry, iconMeta = kendo.template('', { 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($('
              ').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 = '
              ', cancelTemplate = kendo.template('
            • #:cancel#
            • ');\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 $('' + value + '');\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 = '').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 = ''));\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 $('' + value + '');\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('').children('span');\n }\n span.addClass(className('text'));\n if (!image[0] && icon) {\n button.prepend($(''));\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 = '
              ', CONTENT_WRAPPER = '
              ', 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 = $(''), 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 = '
              ', GROUP_TEMPLATE = kendo.template('
            • #= this.headerTemplate(data) #
                #= kendo.render(this.template, data.items)#
            • '), WRAPPER = '
              ', SEARCH_TEMPLATE = kendo.template(''), 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('');\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 = $('
              ');\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 = '
              ';\n var VirtualListViewLoadingIndicator = kendo.Class.extend({\n init: function (listView) {\n this.element = $('
            • ').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 = $('' + listView.options.messages.loadMoreText + '').hide();\n this.element = $('
            • ').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: '#:value#',\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('' + template + ''), 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 $('
              ').append(items).prependTo(element);\n }\n }\n function toggleTitle(centerElement) {\n var siblings = centerElement.siblings(), noTitle = !!centerElement.children('ul')[0], showTitle = !!siblings[0] && $.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 && !$.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($('
              '));\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 = $('
                ');\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 += '
              1. ';\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 = $('
                ');\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('
                ').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 = ' {0} {1} ';\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 $('' + value + '');\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 = $('');\n button.addClass('km-button').attr(kendo.attr('role'), 'tab').contents().not(image).wrapAll('');\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() + '';\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 = '#: ' + kendo.expr(col.field, settings.paramName) + '#';\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 '' + element.html() + '';\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 '
                ' + element.html() + '
                ';\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.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.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.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}));"]}