{"version":3,"sources":["kendo.ui.core.js"],"names":["f","define","$","window","undefined","Class","compilePart","part","stringPart","split","join","replace","first","charAt","rest","substring","pad","number","digits","end","length","zeros","getShadows","element","shadow","css","kendo","support","transitions","radius","match","boxShadowRegExp","blur","math","max","left","right","bottom","wrap","autosize","percentage","width","height","percentWidth","percentHeight","forceWidth","browser","outerWidth","_outerWidth","outerHeight","_outerHeight","parent","windowOuterWidth","removeClass","hasClass","wrapResize","style","percentRegExp","test","is","addClass","boxSizing","mozBoxSizing","webkitBoxSizing","msie","floor","version","zoom","children","wrapper","wrapperStyle","display","position","deepExtend","destination","i","arguments","deepExtendOne","source","property","propValue","propType","propInit","destProp","ObservableArray","data","LazyObservableArray","DataSource","HierarchicalDataSource","OBJECT","constructor","Array","RegExp","isFunction","ArrayBuffer","UNDEFINED","Date","getTime","clone","testRx","agent","rxs","dflt","rx","hasOwnProperty","toHyphens","str","g","toLowerCase","toCamelCase","strMatch","g1","toUpperCase","getComputedStyles","properties","computedStyle","styles","document","defaultView","getComputedStyle","each","idx","value","getPropertyValue","currentStyle","size","isScrollable","className","indexOf","overflow","scrollLeft","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","unescape","template","decodeURIComponent","error","_","m1","m2","String","fromCharCode","parseInt","parseOption","option","dashRegExp","getAttribute","ns","numberRegExp","parseFloat","jsonRegExp","jsonFormatRegExp","Function","parseOptions","role","templateRegExp","html","containmentComparer","a","b","contains","resizableWidget","widget","inArray","attr","focusable","isTabIndexNotNaN","nodeName","disabled","href","visible","expr","pseudos","parents","addBack","filter","kendoJQuery","selector","context","fn","Template","preventDefault","isDefaultPrevented","Observable","argumentNameRegExp","encodeRegExp","escapedCurlyRegExp","curlyRegExp","escapedSharpRegExp","sharpRegExp","directions","eventTarget","wrapExpression","localUrlRe","Widget","DataBoundWidget","ContainerNullObject","MobileWidget","MOUSE_EVENTS","EXCLUDE_BUST_CLICK_SELECTOR","MouseEventNormalizer","eventMap","getEventMap","eventRegEx","on","rootjQuery","animationFrame","animationQueue","cultures","isArray","proxy","JSON","formatRegExp","FUNCTION","NUMBER","NULL","getterCache","setterCache","slice","noDepricateExtend","src","copyIsArray","copy","name","target","deep","jQuery","isPlainObject","proto","member","base","that","subclass","apply","prototype","Object","_initOptions","_defaultPrevented","_events","bind","eventName","handlers","one","original","handler","events","eventNames","handlersIsFunction","unbind","push","unshift","trigger","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","indent","\b","\t","\n","\f","\r","\"","\\","valueOf","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","Number","Boolean","stringify","replacer","space","","findCulture","culture","numberFormat","getCulture","current","formatDate","date","calendar","calendars","standard","days","months","patterns","dateFormatRegExp","minutes","getDate","namesAbbr","getDay","names","getMonth","getFullYear","getHours","getMinutes","getSeconds","getMilliseconds","AM","PM","getTimezoneOffset","formatNumber","decimal","precision","pattern","literals","symbol","isCurrency","isPercent","customPrecision","formatAndPrecision","negative","integer","fraction","integerLength","fractionLength","replacement","ch","hasGroup","hasNegativeFormat","decimalIndex","sharpIndex","zeroIndex","hasZero","hasSharp","percentIndex","currencyIndex","startZeroIndex","start","exp","rounded","POINT","decimals","EMPTY","toLocaleString","standardFormatRegExp","exec","currency","percent","toExponential","round","groupInteger","literalRegExp","quoteChar","literal","PLACEHOLDER","SHARP","ZERO","COMMA","commaRegExp","lastIndexOf","EN","objectToString",",",".","groupSize","abbr","namesShort","d","D","F","G","m","M","s","t","T","u","y","Y","/",":","firstDay","twoDigitYearMax","cultureName","newGroupSize","groupSizes","shift","toFixed","min","fmt","values","index","placeholderFormat","_extractFormat","_activeElement","activeElement","_round","includeMargin","outOfRange","designatorPredicate","designator","mapDesignators","designators","map","adjustDST","hours","setHours","lowerArray","array","lowerLocalInfo","localInfo","newLocalInfo","parseExact","strict","count","pmHour","UTC","matches","amDesignators","pmDesignators","hoursOffset","minutesOffset","hasTime","lookAhead","getNumber","rg","substr","valueIdx","getIndexByName","lower","nameLength","subValue","matchLength","matchIdx","checkLiteral","year","month","day","seconds","milliseconds","defaultYear","_lowerDays","_lowerMonths","longTimeZoneRegExp","shortTimeZoneRegExp","isNaN","setFullYear","parseMicrosoftFormatOffset","getDefaultFormats","cultureFormats","formatIdx","FORMATS_SEQUENCE","STANDARD_FORMATS","formats","concat","internalParseDate","tzoffset","dateRegExp","offsetRegExp","timezone","convert","nonBreakingSpaceRegExp","exponentRegExp","2","3","4","parseDate","parseExactDate","percentSymbol","table","docStyle","transforms","elementProto","mobileOS","documentMode","chrome","mobileChrome","safari","_scrollbar","scrollbar","refresh","div","createElement","cssText","innerHTML","body","appendChild","offsetWidth","removeChild","closest","tbodyInnerHtml","touch","HTMLElement","hasHW3D","WebKitCSSMatrix","cssFlexbox","lowPrefix","prefix","hasTransitions","event","devicePixelRatio","screenWidth","screen","availWidth","innerWidth","screenHeight","availHeight","innerHeight","detectOS","ua","minorVersion","os","notAndroidPhone","agentRxs","wp","fire","android","iphone","ipad","meego","webos","blackberry","playbook","windows","tizen","sailfish","ffos","osRxs","ios","flat","formFactorRxs","tablet","browserRxs","omini","omobile","firefox","mobilesafari","ie","navigator","device","majorVersion","flatVersion","cordova","PhoneGap","appMode","standalone","location","protocol","userAgent","wpDevicePixelRatio","hasNativeScrolling","delayedClick","mouseAndTouchPresent","detectBrowser","edge","opera","detectClipboardAccess","commands","queryCommandSupported","cut","paste","clipboard","zoomLevel","ie11WidthCorrection","docEl","scrollHeight","clientHeight","cssBorderSpacing","borderSpacing","cssClass","docElement","eventCapture","addEventListener","placeholder","propertyChangeEvent","types","setAttribute","cssFloat","stableSort","threshold","sorted","field","sort","matchesSelector","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","nodeList","querySelectorAll","parentNode","matchMedia","pushState","history","hashChange","customElements","crios","MSPointerEvent","PointerEvent","kineticScrollNeeded","down","up","in","out","enabled","dequeue","disable","promiseShim","enable","animatedPromise","kendoStop","clearQueue","gotoEnd","stop","kendoAnimate","kendoAddClass","kendoRemoveClass","kendoToggleClass","toggle","touches","originalEvent","changedTouches","elementFromPoint","clientX","clientY","callback","mousedown","mouseup","mousemove","mousecancel","click","resize","members","widgets","_widgetRegisteredCallbacks","ui","mobile","dataviz","drawing","spreadsheet","messages","keys","INSERT","DELETE","BACKSPACE","TAB","ENTER","ESC","LEFT","UP","RIGHT","DOWN","END","HOME","SPACEBAR","PAGEUP","PAGEDOWN","F2","F10","F12","NUMPAD_PLUS","NUMPAD_MINUS","NUMPAD_DOT","isLocalUrl","url","expression","safe","getter","setter","accessor","get","set","guid","random","id","roleSelector","directiveSelector","directives","selectors","triggeredByInput","tagName","onWidgetRegistered","len","logToConsole","message","console","suppressLog","log","dataSource","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","elementData","onResize","setTimeout","unbindResize","off","attrValue","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","kendoFocusable","setupMouseMute","mouseTrap","bustClick","captureMouse","stopPropagation","muteMouse","clearTimeout","mouseTrapTimeoutID","unMuteMouse","move","cancel","MSPointerEnter","MSPointerLeave","orig","fix","special","delegateType","bindType","handle","ret","related","relatedTarget","handleObj","origType","applyEventMap","pop","search","touchstart","touchend","ruleToDate","rule","targetDay","ourDay","time","cache","getUTCDay","setUTCDate","findRule","utcTime","rules","zone","grep","from","to","findZone","zones","until","zoneRules","zoneAndRule","info","fromOffset","toOffset","diff","fromLocalOffset","toLocalOffset","tempToOffset","toLocalDate","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec","Sun","Mon","Tue","Wed","Thu","Fri","Sat","setDayOfWeek","dir","setDate","dayOfWeek","firstDayOfMonth","lastDayOfMonth","last","timeOffset","moveDateToWeekStart","weekStartDay","addDays","calcWeekInYear","firstWeekInYear","newDate","diffInMS","MS_PER_DAY","weekInYear","prevWeekDate","nextWeekDate","weekNumber","toUtcTime","toInvariantTime","isInTimeRange","msValue","msMin","msMax","isInDateRange","setTime","ignoreDST","difference","MS_PER_MINUTE","today","isToday","staticDate","nextDay","previousDay","MS_PER_HOUR","stripWhitespace","iterator","child","createNodeIterator","NodeFilter","SHOW_TEXT","node","FILTER_ACCEPT","FILTER_REJECT","nextNode","referenceNode","textContent","trim","childNodes","nodeValue","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","queueAnimation","runNextAnimation","parseQueryStringParams","queryString","params","paramParts","elementUnderCursor","x","client","wheelDeltaY","jQueryEvent","delta","deltaY","wheelDelta","detail","axis","VERTICAL_AXIS","throttle","delay","timeout","throttled","lastExecTime","elapsed","caret","rangeElement","rangeDuplicated","selectionStart","selectionEnd","isPosition","focus","setSelectionRange","selection","createTextRange","collapse","moveStart","moveEnd","select","duplicate","moveToBookmark","createRange","getBookmark","setEndPoint","text","compileMobileDirective","scope","injector","invoke","$compile","$$phase","$digest","antiForgeryTokens","tokens","csrf_token","csrf_param","cycleForm","form","firstElement","lastElement","keyCode","shiftKey","focusElement","scrollTopPositions","scrollableParents","parentsUntil","setActive","focusNextElement","focussable","nextElement","matchesMedia","mediaQuery","media","_bootstrapToMedia","bootstrapMedia","xs","sm","md","lg","xl","fileGroupMap","audio","video","image","txt","presentation","programming","pdf","config","zip","disc-image","getFileGroup","extension","withPrefix","extensions","fileTypeMap","groups","getFileSizeMessage","sizes","pow","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","preventMove","_shouldNotMove","_withinIgnoreThreshold","UserEvents","dispose","_start","endTime","activeTouches","skip","isMoved","startTime","xDelta","yDelta","defaultAction","surfaceElement","preventIfMovingProxy","_maxTouches","multiTouch","allowSelection","captureUpIfMoved","fastTap","eventNS","surface","global","ownerDocument","pressed","touchAction","preventDragEvent","preventIfMoving","_isMoved","_destroyed","removeEventListener","_disposeAll","capture","_isMultiTouch","_apiCall","_maxTouchesReached","_select","which","_move","_eachTouch","_end","_click","pageX","pageY","methodName","matchingTouch","dict","defaultThreshold","MAX_DOUBLE_TAP_DISTANCE","eventProxy","_triggerTouch","gestureEventProxy","hold","tap","gesturestart","gesturechange","gestureend","enableSwipe","minXDelta","maxYDelta","maxDuration","doubleTapTimeout","lastTap","_dragstart","_swipestart","_swipemove","direction","toOdataFilter","useOdataFour","operator","logic","filters","odataFilters","odataFiltersVersionFour","stripMetadata","hex16","createBoundary","createDelimeter","boundary","close","NEWLINE","createCommand","transport","item","httpVerb","command","transportUrl","commandPrefix","getOperationHeader","changeset","changeId","header","getOperationContent","content","DOUBLELINE","getOperations","collection","skipContent","requestBody","processCollection","colection","getBoundary","createBatchRequest","colections","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","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","sortFields","sorts","sortObject","normalizeOperator","operatorMap","normalizeFilter","compareDescriptor","f1","f2","normalizeDescriptor","fieldComparer","compareFilters","expr1","expr2","filters1","filters2","normalizeAggregate","expressions","normalizeGroup","compare","skipItemSorting","aggregates","normalizeGroupWithoutCompare","anyGroupDescriptorHasCompare","groupDescriptors","groupValueComparer","calculateAggregate","accumulator","state","aggr","functionName","aggregate","functions","isNumber","val","isDate","serializeRecords","getters","originalFieldNames","fieldNames","originalName","setters","convertRecords","convertGroup","hasSubgroups","wrapDataAccess","originalFunction","converter","wrapDataAccessBase","fillLastGroup","originalGroup","newGroup","currOriginal","currentNew","mergeGroups","dest","group","flatGroups","indexFunction","groupIndex","itemIndex","groupsLength","indexFn","flattenGroups","at","wrapGroupItems","eachGroupItems","func","replaceInRanges","ranges","replaceInRange","replaceWithObservable","serverGrouping","viewIndex","removeModel","uid","indexOfPristineModel","_defaultId","indexOfModel","comparer","fieldNameFromModel","convertFilterDescriptorsField","convertDescriptorsField","inferSelect","firstField","secondField","optgroup","label","specified","inferTable","fieldIndex","cells","cell","empty","tbody","tBodies","rows","fieldCount","dataMethod","_data","_attachBubbleHandlers","inferList","list","textChild","textField","urlField","spriteCssClassField","imageUrlField","_loaded","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","serializeFunctions","json","object","howMany","thisArg","reduce","reduceRight","every","some","Symbol","_parent","_handlers","shouldSerialize","_set","paths","composite","isSetPrevented","isObservableArray","isDataSource","boolean","default","defaults","_initializers","dirtyFields","editable","accept","isNew","functionFields","nullable","defaultValue","localeCompare","combine","comparers","asc","valueA","valueB","__position","desc","textOp","impl","ignore","accentFoldingFiltering","toLocaleLowerCase","op","getMatchRegexp","esc","doesnotstartwith","n","doesnotendwith","doesnotmatch","filterExpr","and","or","fieldFunctions","operatorFunctions","==","equals","isequalto","equalto","!=","ne","notequals","isnotequalto","notequalto","notequal","<","islessthan","lessthan","less","<=","le","islessthanorequalto","lessthanequal",">","isgreaterthan","greaterthan","greater",">=","isgreaterthanorequalto","greaterthanequal","ge","notsubstringof","toArray","range","inPlace","orderBy","orderByDescending","compiled","predicate","allData","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","_sortFields","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","unique","taskKeys","retainPosition","restore","run","jdx","childrenLength","effectName","setReverse","addRestoreProperties","restoreCallback","effectSet","parsedEffects","useTransition","show","multiple","single","isFixed","originalPosition","dX","dY","marginLeft","marginTop","_additionalEffects","play","additional","_duration","compositeRun","_complete","divisor","tmp","previous","previousDivisor","slideIn","margin","origin","setLength","realLength","outerBox","box","innerBox","currentScale","fillScale","transformOrigin","_container","rotation","zIndex","_clipInHalf","clip","face","_face","temporary","reverseDirection","faceClone","backClone","staticPage","turningPage","transformStyle","_before","_after","transitionClass","_previous","_transitionClass","beforeTransition","afterTransition","_both","_element","_containerClass","containerClass","completeProxy","isAbsolute","originalOverflow","both","_tickProxy","_tick","tick","onEnd","onCancel","timePassed","startDate","moveTo","movable","initial","_easeProxy","moveAxis","easeOutExpo","easeOutBack","inner","outer","fitScale","parseTransition","transitionRegExp","SCRIPT","TRANSITION_START","TRANSITION_END","SHOW","HIDE","ATTACH","DETACH","sizzleErrorRegExp","bodyRegExp","LOAD_START","LOAD_COMPLETE","SHOW_START","SAME_VIEW_REQUESTED","VIEW_SHOW","VIEW_TYPE_DETERMINED","AFTER","classNames","stretchedView","footer","View","renderOnInit","_createElement","wrapInSections","_renderSections","_wrap","_evalTemplate","evalTemplate","_fragments","detachOnHide","detachOnDestroy","notInitialized","_eachFragment","ViewClone","triggerBeforeShow","triggerBeforeHide","showStart","showEnd","hideEnd","detach","purge","fragments","getElementById","contents","replaceWith","_wrapper","_createContent","_createHeader","_createFooter","ccontentElements","contentSelector","contentElement","Layout","containers","_createContainer","showIn","ViewContainer","Fragment","attach","running","after","locationID","previousEntry","theTransition","transitionData","ViewEngine","sandbox","_hideViews","rootView","layouts","viewContainer","showView","remoteViewURLPrefix","_findViewElement","reload","_createView","urlPath","wrapInner","_locate","$angular","_findViewElementById","_createSpaView","_createMobileView","defaultTransition","loader","getLayout","getLayoutProxy","modelScope","viewOptions","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","ctrlKey","_wheelTimeout","pullOffset","visibleScrollHints","pullTemplate","releaseTemplate","refreshTemplate","contentResized","_scale","zoomOut","animatedScrollTo","pullHandled","refreshHint","hintContainer","yinertia","xinertia","_paneChange","_dragEnd","scrollBar","HORIZONTAL","VERTICAL","RESIZEEND","Resizable","orientation","_positionMouse","_position","_sizingDom","draggableElement","drag","dragcancel","dragstart","dragend","_stop","_max","hintSize","_initialElementPosition","_min","_initialMousePosition","_maxPosition","_minPosition","maxPosition","minPosition","currentPosition","invalidClass","resizing","targetPosition","containsOrEqualTo","defaultHint","defaultPlaceholder","BEFORE_MOVE","ACTION_SORT","ACTION_REMOVE","ACTION_RECEIVE","DEFAULT_FILTER","MISSING_INDEX","Sortable","_createDraggable","connectWith","cursor","moveOnDragEnter","_dragcancel","_dragend","draggedElement","_placeholder","draggableEvent","before","_setCursor","_resetCursor","targetCenter","offsetDelta","sibling","getSibling","_findTarget","axisDelta","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","isFloating","isTable","isHorizontalFlex","_items","not","collision","elementPosition","Selectable","ARIASELECTED","SELECTED","ACTIVE","SELECTABLE","UNSELECT","UNSELECTING","supportEventDelegation","_marquee","_lastActive","aria","inputSelectors","_isElement","metaKey","whichCode","buttonCode","button","_allowSelection","selectRange","_firstSelectee","_unselect","_notify","_downTarget","currentElement","useAllItems","_selectElement","_invalidateSelectables","toSelect","selectElement","preventNotify","resetTouchEvents","continuousItems","selectable","asLowerString","PRIMARY","SECONDARY","INFO","SUCCESS","WARNING","OUTLINE","PILL","Badge","classPerType","look","appearance","_setInitialValue","primary","warning","secondary","_value","newOptions","CLICK","MOUSEDOWN","MOUSEUP","MOUSEOUT","KBUTTON","KBUTTONICON","KBUTTONICONTEXT","DISABLED","DISABLEDSTATE","FOCUSEDSTATE","SELECTEDSTATE","OVERLAY","Button","badge","createBadge","iconElement","_focus","_blur","_keydown","_removeActive","_addActive","icon","iconClass","spriteCssClass","imageUrl","_isNativeButton","span","img","isEmpty","err","badgeOptions","overlay","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","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","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","openedNotifications","guidElements","restoreTitle","restoreTitleAttributeForElement","saveTitleAttributeForElement","saveTitleAttributes","DOCUMENT","ARIAIDSUFFIX","DESCRIBEDBY","CONTENTLOAD","KCONTENTFRAME","IFRAMETEMPLATE","POSITIONS","REVERSE","DIRCLASSES","DIMENSIONS","DEFAULTCONTENT","Tooltip","_documentKeyDownHandler","_documentKeyDown","_isShownOnMouseEnter","_showOn","showOn","_isShownOnClick","_mouseenter","autoHide","_mouseleave","_isShownOnFocus","showAfter","hideAfter","callout","_show","_appendContent","iframe","contentOptions","showIframe","_ajaxRequest","_initPopup","activate","ariaId","_positionCallout","_offset","arrow","_closeButtonClick","_closePopup","elementOffset","offsetAmount","isTopLeft","isFlipped","marginRule","toggleActive","STATE_ACTIVE","actionSheetWrap","preventClick","findFocusableSibling","candidate","OVERFLOW_ANCHOR","components","Item","ToolBarButton","OverflowButton","ButtonGroup","ToolBarButtonGroup","OverflowButtonGroup","ToolBarSplitButton","OverflowSplitButton","ToolBarSeparator","OverflowSeparator","ToolBarSpacer","TemplateItem","OverflowTemplateItem","Group","ToolBar","TOOLBAR","BUTTON","OVERFLOW_BUTTON","TOGGLE_BUTTON","BUTTON_GROUP","SPLIT_BUTTON","SEPARATOR","SPACER_CLASS","SPACER","POPUP","RESIZABLE_TOOLBAR","STATE_DISABLED","STATE_HIDDEN","GROUP_START","GROUP_END","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","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","FOCUS","FOCUSOUT","HIDDENCLASS","isIE","isIE8","quotRegExp","alternativeNames","ComboBox","MultiColumnComboBox","List","_isSelect","ul","aria-hidden","_listMousedown","columns","_columnsHeader","_header","_noData","_footer","_accessors","_initValue","footerTemplate","headerTemplate","noDataTemplate","noData","_renderFooter","_renderNoData","_focused","_editable","_angularElement","colGroup","row","currentColumn","columnsHeaderTemplate","currentWidth","currentWidthInt","widthStyle","columnsHeader","_listOptions","currentOptions","changeEventOption","_listChange","listBoundHandler","_listBound","_activateItem","_deactivateItem","groupTemplate","fixedGroupTemplate","_initList","listOptions","selectedItemChange","VirtualList","_setListValue","_updateSelectionState","filterInput","_isFilterEnabled","_hideClear","_clear","_showClear","_clearValue","_clearText","_accessor","_customOption","enforceMinLength","highlightFirst","_clearFilter","_filterSource","newExpression","dataSourceState","isMultiColumnFiltering","filterFields","resetPageSettings","removed","_clearFilterExpressions","_pushFilterExpression","_cascading","setDSFilter","filtersToRemove","_toggleNoData","_toggleHeader","groupHeader","_allowOpening","_old","_ignoreCase","widgetOptions","fromFilter","_buildExpression","_open","_clearButton","clearTitle","clearButton","_inputValue","_typingTimeout","minLength","_state","_emptySearch","_searchByWord","_unbindDataSource","_form","_resetHandler","selectedDataItems","_text","_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","_refreshScroll","enableYScroll","overflowX","overflowY","_resizePopup","_popup","_makeUnselectable","_toggleHover","preventFocus","touchEnabled","MSPointers","_prevent","_triggerCascade","_cascadeTriggered","_cascadedValue","userTriggered","_triggerChange","_requestStartHandler","_requestEndHandler","_errorHandler","requireValueMapper","valueMapper","_initial","_initialIndex","_current","_parentWidget","_cascadeSelect","_cascadeValue","_accessorInput","_accessorSelect","_custom","_syncValueAndText","custom","_hideBusy","_busy","_arrowIcon","_showBusy","_request","_requestEnd","_firstItem","focusFirst","_lastItem","focusLast","_nextItem","focusNext","_prevItem","focusPrev","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","uiSelectedIndices","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","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","_selectable","_viewWrapper","_focusView","focusOnNav","_cellID","_class","_selectDates","_index","_addClassProxy","_active","_cell","todayString","toDateString","_cellByDate","_removeClassProxy","selectDates","weekColumnHeader","_destroySelectable","_today","_title","_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","_isNavigatable","cellIndex","isDisabled","focusedDate","_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","initialValue","interval","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","optionsValue","_ariaTemplate","lastFrom","isPrimitive","getItemCount","listScreens","getDefaultItemHeight","lineHeight","mockList","bufferSizes","opposite","listValidator","downThreshold","upThreshold","lastScrollTop","scrollCallback","syncList","reorder","webkitTransform","map2","arr1","arr2","ITEMCHANGE","reshift","itemTemplate","placeholderTemplate","renderColumns","GROUPITEM","isActivePromise","VIRTUALLIST","CONTENT","LIST","HEADER","VIRTUALITEM","ITEM","HEIGHTCONTAINER","LISTBOUND","VIRTUAL_LIST_NS","_fetching","_selectedDataItems","_selectedIndexes","_rangesList","_promisesList","_renderItems","_triggerListBound","oppositeBuffer","mapValueTo","_selectProxy","_clean","_deferValueSet","mute","_selectingValue","_highlightSelectedItems","_getElementByDataItem","_mute","_createList","_forcePrefetch","shouldClear","_prefetchByValue","_checkValuesOrder","_removedAddedIndexes","dataView","_dataView","valueGetter","forSelection","mapValueToIndex","mapValueToDataItem","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","AUTOCOMPLETEVALUE","AutoComplete","_loader","_keypress","_search","_prev","aria-haspopup","_resetFocusItemHandler","_resetFocusItem","_toggleCloseVisibility","_progressHandler","_separator","_unifySeparators","_last","wordIndex","isActive","_touchScroller","_muted","_selectValue","_defaultSeparator","itemSelected","_loading","DOMelement","assign","normalizeIndex","sameCharsOnly","character","nsFocusEvent","CLICKEVENTS","STATE_FILTER","STATE_ACCEPT","MSG_INVALID_OPTION_LABEL","_focusHandler","_focusInputHandler","_focusInput","_optionLabel","_inputTemplate","_word","_span","_mobile","_filterHeader","_attachFocusHandlers","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","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","NOCLICKCLASS","_optionsMap","_customOptions","_tagList","_textContainer","_tagID","tagList","_initialOpen","_ariaSetLive","_tagTemplate","_ariaSetSize","tagMode","autoClose","singleTag","deleteTag","maxSelectedItems","tagTemplate","persistTagList","currentTag","_currentTag","_selectedItemChange","_initialValues","optionsMap","tagTextTemplate","notInput","closeButton","cancelable","_removeTag","tag","listViewChild","customIndex","listViewChildren","_close","classList","_updateTagListHTML","_tagListClick","_clearSingleTagValue","tags","_retrieveData","_activeItem","inputValue","clearFilters","_normalizeValues","_setOption","isEmptyArray","_getActiveItem","_getSelectedIndices","activeItemIdx","activeIndex","_multipleSelection","_selectRange","_showBusyHandler","skipCaret","caretPos","textWidth","wrapperWidth","selectedItems","_buildSelectedItems","_selectedItemIndex","_angularTagItems","updatePersistTagList","removedItem","addedItem","_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","preciseItemsCount","pixelStep","_roundWidths","pixelWidthsArray","balance","_addAdditionalSize","additionalSize","_pixelSteps","_getValueFromPosition","mousePosition","dragableArea","halfStep","startPoint","_getFormattedValue","tooltipTemplate","_getDraggableArea","endPoint","_firstHandleDrag","_activeHandle","_lastHandleDrag","_activeHandleDrag","_updateTooltip","_focusWithMouse","_setTooltipTimeout","_removeTooltip","_tooltipTimeout","_clearTooltipTimeout","tooltipDiv","_formResetHandler","Slider","dragHandle","_selection","Selection","Drag","increaseButtonTitle","decreaseButtonTitle","mouseDownHandler","newVal","_nextValueByIndex","_valueIndex","_setValueInRange","timer","_clearTimer","_refreshAriaAttr","_tooltipDiv","moveSelection","selectionValue","selectionDiv","halfDragHanndle","rtlCorrection","owner","_activeDragHandle","_setZIndex","oldVal","_createTooltip","colloutCssClass","wnd","tooltipInnerDiv","_scrollOffset","moveTooltip","slideParams","constrainValue","noAnimation","fadeOut","dragHandles","sdhOffset","viewPortEnd","maxOverflow","firstInput","secondInput","warn","dragSelectionStart","dragSelectionEnd","activeHandleDrag","selectionStartValue","selectionEndValue","selectionStartIndex","selectionEndIndex","halfHandle","makeSelection","selectionPosition","relative","KEYS","BACKGROUNDCOLOR","ITEMSELECTEDCLASS","SIMPLEPALETTE","WEBPALETTE","WHITE","MESSAGES","noColor","clearColor","previewInput","CLICK_NS","ColorSelector","_tabIndex","_ariaId","_standalone","_triggerSelect","_updateUI","_onEnable","nohooks","_selectOnHide","ColorPalette","colors","tileSize","palette","_selectedID","ex","FlatColorPicker","_hueElements","_selectedColor","_colorAsText","_sliders","_hsvArea","autoupdate","_clearedColor","_getHSV","_applyIEFilter","_hsvEvents","_hueSlider","_opacitySlider","_hsvRect","_hsvHandle","preview","track","backgroundImage","hueChange","opacityChange","hueSlider","opacitySlider","kendoSlider","slide","rw","rh","_svChange","hsvRect","hsvHandle","hue","handlePosition","dontChangeInput","ColorPicker","_selector","innerWrapper","toolIcon","_getPopup","selOptions","_noColorIcon","_isInputTypeColor","selectorType","kendoButton","selectorColor","buttonHtml","CLASS_ICON","truncate","INPUT","SPIN","TOUCHEND","STATE_INVALID","INTEGER_REGEXP","NumericTextBox","inputType","isStep","_focusout","_arrows","_validation","_toggleText","factor","restrictDecimals","spinners","upArrowText","downArrowText","_upArrowEventHandler","_downArrowEventHandler","_spin","_upArrow","_downArrow","_keyup","_inputHandler","_arrowsWrap","aria-valuemin","aria-valuemax","adjusted","_adjust","_focusin","arrows","_spinning","_validationIcon","_focusing","groupRegExp","extractRegExp","caretPosition","_culture","_removeInvalidState","CLASSNAME","_step","_cachedCaret","_numericRegex","_blinkInvalidState","_addInvalidState","_invalidStateTimeout","fractionRule","_floatRegExp","originalValue","rounder","isNotNull","DOMElement","fieldType","convertToValueBinding","bindAttr","createAttributes","ruleName","stringRule","validation","DATATYPE","BINDING","specialRules","addIdAttribute","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","endlessAppend","_endlessFetchInProgress","_skipRerenderItemsCount","scrollable","_destroyEditable","_focusNext","pagerId","pageable","pager","multi","originalPageSize","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","_unbindDataChange","_addItem","_bindDataChange","_bindDataSource","_syncElement","itemContent","_addItemAt","_insertElementAt","_keyDown","_getTabIndex","oldTarget","isInput","_getNavigatableItem","nextAll","_scrollIntoView","shouldPreventDefault","_shiftSelecting","_executeCommand","elementNode","listBox","_searchConnectedListBox","connectedListBox","closestContainer","originalElement","getKendoListBox","draggableOptions","draggedItem","_updateToolbar","_updateAllToolbars","dataItemAtIndex","itemAtIndex","listItem","_removeElement","listItems","_getItems","_removeItem","uniqueIdAttr","enabledItems","_enableItem","_dataChangeHandler","_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","_legacyIEInputHandler","__changing","inputChange","backward","contentStart","endContent","lengthDiff","__dropping","_trimStartPromptChars","_findCaretPosBackwards","__backward","__pasting","chr","chrIdx","tokenIdx","tokensLength","maskChars","getEffectDirection","parseDirection","updateItemClasses","IMG","IMAGE","LINK","DEFAULTSTATE","LINK_SELECTOR","excludedNodesRegExp","updateArrow","updateFirstLast","arrowCssClass","getArrowCssClass","MENU","updateHasAriaPopup","parentLi","getParentLiItems","storeItemSelectEventHandler","selectHandler","getItemSelectEventHandler","setItemData","popupOpenerSelector","popupGroupSelector","getChildPopups","currentPopup","overflowWrapper","childPopupOpener","opener","popupId","POPUP_OPENER_ATTR","popupParentItem","POPUP_ID_ATTR","itemPopup","animationContainerSelector","overflowMenuParents","getParents","mousewheelDelta","parentsScroll","scrollDirection","isPointerTouch","allPointers","pointerType","touchPointerTypes","isTouch","removeSpacesBetweenItems","DELAY","SCROLLSPEED","ICON_SELECTOR","TIMER","ZINDEX","POINTERDOWN","MOUSEWHEEL","SCROLLWIDTH","SCROLLHEIGHT","OFFSETWIDTH","OFFSETHEIGHT","KENDOPOPUP","HOVERSTATE","menuSelector","groupSelector","popupSelector","allItemsSelector","disabledSelector","itemSelector","availableItemsSelector","linkSelector","exclusionSelector","nextSelector","lastSelector","templateSelector","scrollButtonSelector","imageAttr","rendering","wrapperCssClass","firstLevel","itemCssAttributes","imageCssAttributes","imgAttributes","contentCssAttributes","contentAttr","defaultClasses","textClass","arrowClass","groupAttributes","expanded","groupCssClass","Menu","_updateClasses","_animations","nextItemZIndex","_initOverflow","_attachMenuEventsHandlers","openOnClick","clicked","closeOnClick","hoverDelay","popupCollision","_initData","_overflowWrapper","_preventClose","_removeHoverItem","_checkActiveElement","_mouseleavePopup","_mouseenterPopup","_documentClickHandler","_documentClick","_detachMenuEventsHandlers","backwardBtn","forwardBtn","initialWidth","initialCssWidth","_openedPopups","_scrollWrapper","scrollButton","_initScrolling","_setOverflowWrapperWidth","_toggleScrollButtons","_popupsWrapper","menuWidth","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","_childPopupElement","plain","groupData","renderGroup","renderItem","parentItems","_openAfterLoad","visiblePopups","closePopup","overflowPopup","windowHeight","setScrolling","nextZindex","parentHorizontal","_triggerEvent","maxHeight","_configurePopupOverflow","_initPopupScrolling","popupOpener","groupId","_wrapPopupElement","skipMouseEvents","_initPopupScrollButtons","scrollButtons","_closeParentPopups","_keyTriggered","_setPopupHeight","popupOuterHeight","popupOffsetTop","bottomScrollbar","canFit","_initialHeight","dontClearClose","hasChildPopupsHovered","isPopupMouseLeaved","_isRootItem","_forceClose","isEnter","_closurePrevented","hoverItem","_hoverItem","_findRootParent","hasFocus","oldHoverItem","_oldHoverItem","nonContentGroupsSelector","_itemHasChildren","pointerTouch","delegateTarget","rootMenuItems","subMenuItems","toElement","_closePopups","rootPopup","groupParent","innerPopup","_innerPopup","openHandle","childGroup","childGroupVisible","shouldCloseTheRootItem","childPopupId","formNode","itemElement","targetHref","sampleHref","isLink","isLocalLink","isTargetLink","_parentsUntil","enterKey","itemSelectEventData","isSelectItemDefaultPrevented","isSelectDefaultPrevented","_getEventData","_moveHover","belongsToVertical","_itemBelongsToVertival","_itemDown","_itemUp","_itemEsc","menuIsVertical","nextItem","_scrollToItem","_itemRight","parentItem","_itemLeft","scrollDir","currentScrollOffset","itemSize","itemOffset","ulSize","scrollButtonSize","itemPosition","findByUid","wrapperElement","itemsToUpdate","updateProxy","_updateItem","removeProxy","_appendItems","_fieldAccessor","fieldBindings","fieldAccessor","itemWrapper","sprite","menu","renderContent","dataContentField","subGroup","renderItems","ContextMenu","_marker","_wire","_initialWidth","alignToAnchor","_showProxy","_closeProxy","_configurePopupScrolling","_setPopupWidth","windowWidth","popupOuterWidth","popupOffsetLeft","maxWidth","_closeTimeoutProxy","_showHandler","_eventOrigin","_targetChild","normalClick","sameTarget","containment","_preventProxy","_triggerProxy","updateItemHtml","toggleButton","HREF","LINKSELECTOR","GROUP","VISIBLEGROUP","EXPAND","COLLAPSE","ACTIVECLASS","GROUPS","CONTENTS","DISABLEDCLASS","SELECTEDSELECTOR","HIGHLIGHTCLASS","ACTIVEITEMSELECTOR","clickableItems","disabledItems","selectableItems","defaultState","SINGLE","contentUrl","textAttributes","encoded","ariaHidden","contentAttributes","itemIcon","PanelBar","_retryRequest","_first","expand","_angularCompile","requestFailed","retry","loadOnDemand","expandMode","_angularCompileElements","_angularCleanup","useAnimation","animBackup","_animating","_addGroupElement","_collapseAllExpanded","_toggleItem","showProgress","loadingText","_refreshRoot","rootItemsHtml","_refreshChildren","_toggleGroup","uidAttr","tempItem","_updateItems","_hasChildItems","retryHtml","_expanded","itemsHtml","nodeWrapper","currentNode","panelBar","skipChange","_updateSelected","focused","isReferenceItem","_updateItemsClasses","panels","panelsParent","_updateItemClasses","wrapElement","contentUrls","isAnchor","isVisible","notVisible","animationSettings","hasCollapseAnimation","_animationCallback","stopExpand","statusIcon","loadingIconTimeout","DEFAULTMIN","DEFAULTMAX","DEFAULTVALUE","DEFAULTCHUNKCOUNT","KPROGRESSBAR","KPROGRESSBARREVERSE","KPROGRESSBARINDETERMINATE","KPROGRESSBARCOMPLETE","KPROGRESSWRAPPER","KPROGRESSSTATUS","LABEL_POSITION_END","KCOMPLETEDCHUNK","KUPCOMINGCHUNK","PROGRESSTYPE","PERCENT","CHUNK","COMPLETE","HUNDREDPERCENT","DEFAULTANIMATIONDURATION","PRECISION","progressStatus","ProgressBar","_progressProperty","_fields","_validateType","_progressAnimation","_updateProgress","chunkCount","showStatus","_isStarted","progressWrapper","currentType","initialStatusValue","_addChunkProgressWrapper","_calculatePercentage","validated","_roundValue","_updateChunks","_onProgressUpdateAlways","_updateProgressWrapper","completedChunks","percentagesPerChunk","percentageParsed","completedChunksCount","animationDuration","_animation","animationCssOptions","_addRegularProgressWrapper","_onProgressAnimateStart","_onProgressAnimate","_onProgressAnimateComplete","always","progressStatusWrapSize","progressInPercent","progressValue","progressWrapperSize","chunkSize","_normalizeChunkSize","lastChunk","_calculateChunkSize","chunkContainer","_onePercent","ACTIVATE_EVENTS","ResponsivePanel","_toggleHandler","_toggleButtonClick","_registerBreakpoint","_mediaQuery","_registerStyle","breakpoint","head","styleSheet","createTextNode","prevented","updateTabClasses","tabs","ACTIVESTATE","TABONTOP","tabGroup","scrollButtonHtml","buttonClass","CONTENTURL","NAVIGATABLEITEMS","KEYBOARDNAVIGATABLEITEMS","HOVERABLEITEMS","DEFAULTDISTANCE","TabStrip","_contentUrls","_tabPosition","_keyDownProxy","wr","contentHolder","activateTab","_endItem","endItem","rtl","tabPosition","tab","dataEncodedField","dataContentUrlField","dataImageUrlField","dataUrlField","dataSpriteCssClass","collapsible","scrollWrap","_scrollableModeActive","_scrollPrevButton","_scrollNextButton","ajaxRequest","_create","_updateContentElements","_appendUrlItem","_moveUrlItem","_removeUrlItem","referenceTab","referenceContent","fromIndex","newTabsCreated","activeItem","activeTab","contentElements","_elementId","tabStripID","elementId","wrapperId","isInitialUpdate","currentContent","contentAnimators","tabsHeight","_setContentElementsDimensions","contentDivs","activeDiv","marginStyleProperty","_sizeScrollWrap","neighbours","oldFocusedTab","_scrollTabsToItem","deactivateTab","wrapperOffsetWidth","tabGroupScrollWidth","scrollPrevButton","scrollNextButton","mouseDown","mouseUp","isRtlScrollDirection","_scrollableAllowed","_nowScrollingTabs","marginRight","_scrollTabsByDelta","tabGroupWidth","tabGroupPadding","scrLeft","hasCloseAnimation","oldTab","isAnimationEnabled","visibleContents","isAjaxContent","showContentElement","showContent","inRequest","abort","scrollContainer","halfWidth","fakeProgress","endState","oldProgressAnimation","ajaxOptions","ajaxSettings","request","progressUpload","upload","evt","noProgress","XMLHttpRequest","lengthComputable","stopProgress","statusText","tabStrip","dst","midnight","noon","lastTimeOption","mergeDateAndTime","TimeView","TimePicker","ARIA_ACTIVEDESCENDANT","_dates","_timeViewID","_heightHandler","dataBind","_html","msStart","msLastTime","msInterval","useValueToRender","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","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","_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","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","useTap","clickOn","_userEvents","_timeoutDeactivate","badgeElement","iconSpan","BackButton","DetailButton","DISABLE","_button","selectOn","buttongroup","COLLAPSIBLE","INSET","HEADER_WRAPPER","CONTENT_WRAPPER","COLLAPSED","EXPANDED","ANIMATED","EXAPND","Collapsible","_buildHeader","inset","collapseIcon","expandIcon","iconPosition","instant","_getContentHeight","isCollapsed","whitespace","TEXT_NODE","whitespaceRegExp","addIcon","querySelector","enhanceItem","enhanceLinkItem","itemAndDetailButtons","otherNodes","enhanceCheckBoxItem","putAt","VirtualListViewItem","LOAD_ICON","VirtualListViewLoadingIndicator","VirtualListViewPressToLoadMore","VirtualListViewItemBinder","ListViewItemBinder","ListViewFilter","ITEM_SELECTOR","HIGHLIGHT_SELECTOR","GROUP_CLASS","ACTIVE_CLASS","GROUP_WRAPPER","GROUP_TEMPLATE","SEARCH_TEMPLATE","STYLED","ITEM_CHANGE","buttonRegExp","HeaderFixer","headerFixer","cacheHeaders","_shouldFixHeaders","_cacheHeaders","_scrollHandler","_fixHeader","fixedHeaders","headerPair","currentHeader","DEFAULT_PULL_PARAMETERS","RefreshHandler","pullParameters","pull","_pulled","itemConstructor","prevItem","endReached","below","totalHeight","averageItemHeight","remainingItemsCount","batchUpdate","nextIndex","initialOffset","lastDirection","above","lastTop","topBorder","bottomBorder","setDataItem","_loadIcon","_loadButton","loadMoreText","loadMore","kendoMobileButton","_hideShowButton","_showLoadButton","chromeHeight","_scrollEnd","pressToLoadMore","virtualViewSize","updateScrollerSize","updateSize","itemBinder","adding","removing","prependOnRefresh","appendOnRefresh","groupedMode","findByDataItem","_shouldShowLoading","replaceGrouped","insertAt","endlessScroll","filterable","autoFilter","searchInput","_oldFilter","_filterChange","_dataSourceChange","_refreshInput","appliedFilters","_applyFilter","scrollTreshold","scrollThreshold","_headerFixer","_itemsCache","_itemBinder","_pullToRefreshHandler","_enhanceItems","emptyDataSource","_scrollerInstance","triggerChange","replaceItem","newItem","_dim","_highlight","plainItem","dataIDAttribute","templateProxy","groupTemplateProxy","_headerTemplate","buttonElement","_styleGroups","rootItems","grouped","enhanced","createContainer","toggleTitle","centerElement","noTitle","showTitle","NavBar","leftElement","rightElement","DRAG_START","DRAG_END","ElasticPane","ScrollViewContent","VirtualScrollViewContent","Page","ScrollView","CHANGING","CURRENT_PAGE_CLASS","VIRTUAL_PAGE_CLASS","CLEANUP","VIRTUAL_PAGE_COUNT","LEFT_PAGE","CETER_PAGE","RIGHT_PAGE","LEFT_SWIPE","NUDGE","RIGHT_SWIPE","scrollView","_changeProxy","_refreshProxy","pageHTML","pageCount","ScrollViewPager","updateDimension","transitionTo","ScrollViewElasticPane","_getPages","contentHeight","enablePager","pagerOverlay","paneMoved","swipeType","bounce","snap","nextPage","approx","minSnap","maxSnap","currentPage","updatePage","forcePageUpdate","resizeTo","containerHeight","pageElements","_paged","_initPages","_buffer","_pendingPageRefresh","_pendingWidgetRefresh","_resetPages","_resetProxy","_endReachedProxy","emptyTemplate","emptyTemplateProxy","setWidth","_repositionPages","_updatePagesContent","thresholdPassed","isEndReached","_cancelMove","_moveBackward","_moveForward","setPageContent","_resetMovable","_onResize","_onReset","_onEndReached","theContent","VirtualPage","mobileContainer","transitionEnd","dragStart","dragEnd","_syncWithContent","_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","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 = '2020.1.406'.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 && (!kendo.isFunction(window.ArrayBuffer) || propInit !== ArrayBuffer)) {\n if (propValue instanceof Date) {\n destination[property] = new Date(propValue.getTime());\n } else if (isFunction(propValue.clone)) {\n destination[property] = propValue.clone();\n } else {\n destProp = destination[property];\n if (typeof destProp === OBJECT) {\n destination[property] = destProp || {};\n } else {\n destination[property] = {};\n }\n deepExtendOne(destination[property], propValue);\n }\n } else if (propType !== UNDEFINED) {\n destination[property] = propValue;\n }\n }\n return destination;\n }\n function testRx(agent, rxs, dflt) {\n for (var rx in rxs) {\n if (rxs.hasOwnProperty(rx) && rxs[rx].test(agent)) {\n return rx;\n }\n }\n return dflt !== undefined ? dflt : agent;\n }\n function toHyphens(str) {\n return str.replace(/([a-z][A-Z])/g, function (g) {\n return g.charAt(0) + '-' + g.charAt(1).toLowerCase();\n });\n }\n function toCamelCase(str) {\n return str.replace(/\\-(\\w)/g, function (strMatch, g1) {\n return g1.toUpperCase();\n });\n }\n function getComputedStyles(element, properties) {\n var styles = {}, computedStyle;\n if (document.defaultView && document.defaultView.getComputedStyle) {\n computedStyle = document.defaultView.getComputedStyle(element, '');\n if (properties) {\n $.each(properties, function (idx, value) {\n styles[value] = computedStyle.getPropertyValue(value);\n });\n }\n } else {\n computedStyle = element.currentStyle;\n if (properties) {\n $.each(properties, function (idx, value) {\n styles[value] = computedStyle[toCamelCase(value)];\n });\n }\n }\n if (!kendo.size(styles)) {\n styles = computedStyle;\n }\n return styles;\n }\n function isScrollable(element) {\n if (element && element.className && typeof element.className === 'string' && element.className.indexOf('k-auto-scrollable') > -1) {\n return true;\n }\n var overflow = getComputedStyles(element, ['overflow']).overflow;\n return overflow == 'auto' || overflow == 'scroll';\n }\n function scrollLeft(element, value) {\n var webkit = support.browser.webkit;\n var mozila = support.browser.mozilla;\n var 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, mobileChrome = support.browser.crios, mozilla = support.browser.mozilla, safari = support.browser.safari;\n support.msPointers = !chrome && window.MSPointerEvent;\n support.pointers = !chrome && !mobileChrome && !mozilla && !safari && window.PointerEvent;\n support.kineticScrollNeeded = mobileOS && (support.touch || support.msPointers || support.pointers);\n }());\n function size(obj) {\n var result = 0, key;\n for (key in obj) {\n if (obj.hasOwnProperty(key) && key != 'toJSON') {\n result++;\n }\n }\n return result;\n }\n function getOffset(element, type, positioned) {\n if (!type) {\n type = 'offset';\n }\n var offset = element[type]();\n var result = {\n top: offset.top,\n right: offset.right,\n bottom: offset.bottom,\n left: offset.left\n };\n if (support.browser.msie && (support.pointers || support.msPointers) && !positioned) {\n var sign = support.isRtl(element) ? 1 : -1;\n result.top -= window.pageYOffset - document.documentElement.scrollTop;\n result.left -= window.pageXOffset + sign * document.documentElement.scrollLeft;\n }\n return result;\n }\n var directions = {\n left: { reverse: 'right' },\n right: { reverse: 'left' },\n down: { reverse: 'up' },\n up: { reverse: 'down' },\n top: { reverse: 'bottom' },\n bottom: { reverse: 'top' },\n 'in': { reverse: 'out' },\n out: { reverse: 'in' }\n };\n function parseEffects(input) {\n var effects = {};\n each(typeof input === 'string' ? input.split(' ') : input, function (idx) {\n effects[idx] = this;\n });\n return effects;\n }\n function fx(element) {\n return new kendo.effects.Element(element);\n }\n var effects = {};\n $.extend(effects, {\n enabled: true,\n Element: function (element) {\n this.element = $(element);\n },\n promise: function (element, options) {\n if (!element.is(':visible')) {\n element.css({ display: element.data('olddisplay') || 'block' }).css('display');\n }\n if (options.hide) {\n element.data('olddisplay', element.css('display')).hide();\n }\n if (options.init) {\n options.init();\n }\n if (options.completeCallback) {\n options.completeCallback(element);\n }\n element.dequeue();\n },\n disable: function () {\n this.enabled = false;\n this.promise = this.promiseShim;\n },\n enable: function () {\n this.enabled = true;\n this.promise = this.animatedPromise;\n }\n });\n effects.promiseShim = effects.promise;\n function prepareAnimationOptions(options, duration, reverse, complete) {\n if (typeof options === STRING) {\n if (isFunction(duration)) {\n complete = duration;\n duration = 400;\n reverse = false;\n }\n if (isFunction(reverse)) {\n complete = reverse;\n reverse = false;\n }\n if (typeof duration === BOOLEAN) {\n reverse = duration;\n duration = 400;\n }\n options = {\n effects: options,\n duration: duration,\n reverse: reverse,\n complete: complete\n };\n }\n return extend({\n effects: {},\n duration: 400,\n reverse: false,\n init: noop,\n teardown: noop,\n hide: false\n }, options, {\n completeCallback: options.complete,\n complete: noop\n });\n }\n function animate(element, options, duration, reverse, complete) {\n var idx = 0, length = element.length, instance;\n for (; idx < length; idx++) {\n instance = $(element[idx]);\n instance.queue(function () {\n effects.promise(instance, prepareAnimationOptions(options, duration, reverse, complete));\n });\n }\n return element;\n }\n function toggleClass(element, classes, options, add) {\n if (classes) {\n classes = classes.split(' ');\n each(classes, function (idx, value) {\n element.toggleClass(value, add);\n });\n }\n return element;\n }\n if (!('kendoAnimate' in $.fn)) {\n extend($.fn, {\n kendoStop: function (clearQueue, gotoEnd) {\n return this.stop(clearQueue, gotoEnd);\n },\n kendoAnimate: function (options, duration, reverse, complete) {\n return animate(this, options, duration, reverse, complete);\n },\n kendoAddClass: function (classes, options) {\n return kendo.toggleClass(this, classes, options, true);\n },\n kendoRemoveClass: function (classes, options) {\n return kendo.toggleClass(this, classes, options, false);\n },\n kendoToggleClass: function (classes, options, toggle) {\n return kendo.toggleClass(this, classes, options, toggle);\n }\n });\n }\n var ampRegExp = /&/g, ltRegExp = //g;\n function htmlEncode(value) {\n return ('' + value).replace(ampRegExp, '&').replace(ltRegExp, '<').replace(gtRegExp, '>').replace(quoteRegExp, '"').replace(aposRegExp, ''');\n }\n function unescape(value) {\n var template;\n try {\n template = window.decodeURIComponent(value);\n } catch (error) {\n template = value.replace(/%u([\\dA-F]{4})|%([\\dA-F]{2})/gi, function (_, m1, m2) {\n return String.fromCharCode(parseInt('0x' + (m1 || m2), 16));\n });\n }\n return template;\n }\n var eventTarget = function (e) {\n return e.target;\n };\n if (support.touch) {\n eventTarget = function (e) {\n var touches = 'originalEvent' in e ? e.originalEvent.changedTouches : 'changedTouches' in e ? e.changedTouches : null;\n return touches ? document.elementFromPoint(touches[0].clientX, touches[0].clientY) : e.target;\n };\n each([\n 'swipe',\n 'swipeLeft',\n 'swipeRight',\n 'swipeUp',\n 'swipeDown',\n 'doubleTap',\n 'tap'\n ], function (m, value) {\n $.fn[value] = function (callback) {\n return this.bind(value, callback);\n };\n });\n }\n if (support.touch) {\n if (!support.mobileOS) {\n support.mousedown = 'mousedown touchstart';\n support.mouseup = 'mouseup touchend';\n support.mousemove = 'mousemove touchmove';\n support.mousecancel = 'mouseleave touchcancel';\n support.click = 'click';\n support.resize = 'resize';\n } else {\n support.mousedown = 'touchstart';\n support.mouseup = 'touchend';\n support.mousemove = 'touchmove';\n support.mousecancel = 'touchcancel';\n support.click = 'touchend';\n support.resize = 'orientationchange';\n }\n } else if (support.pointers) {\n support.mousemove = 'pointermove';\n support.mousedown = 'pointerdown';\n support.mouseup = 'pointerup';\n support.mousecancel = 'pointercancel';\n support.click = 'pointerup';\n support.resize = 'orientationchange resize';\n } else if (support.msPointers) {\n support.mousemove = 'MSPointerMove';\n support.mousedown = 'MSPointerDown';\n support.mouseup = 'MSPointerUp';\n support.mousecancel = 'MSPointerCancel';\n support.click = 'MSPointerUp';\n support.resize = 'orientationchange resize';\n } else {\n support.mousemove = 'mousemove';\n support.mousedown = 'mousedown';\n support.mouseup = 'mouseup';\n support.mousecancel = 'mouseleave';\n support.click = 'click';\n support.resize = 'resize';\n }\n var wrapExpression = function (members, paramName) {\n var result = paramName || 'd', index, idx, length, member, count = 1;\n for (idx = 0, length = members.length; idx < length; idx++) {\n member = members[idx];\n if (member !== '') {\n index = member.indexOf('[');\n if (index !== 0) {\n if (index == -1) {\n member = '.' + member;\n } else {\n count++;\n member = '.' + member.substring(0, index) + ' || {})' + member.substring(index);\n }\n }\n count++;\n result += member + (idx < length - 1 ? ' || {})' : ')');\n }\n }\n return new Array(count).join('(') + result;\n }, localUrlRe = /^([a-z]+:)?\\/\\//i;\n extend(kendo, {\n widgets: [],\n _widgetRegisteredCallbacks: [],\n ui: kendo.ui || {},\n fx: kendo.fx || fx,\n effects: kendo.effects || effects,\n mobile: kendo.mobile || {},\n data: kendo.data || {},\n dataviz: kendo.dataviz || {},\n drawing: kendo.drawing || {},\n spreadsheet: { messages: {} },\n keys: {\n INSERT: 45,\n DELETE: 46,\n BACKSPACE: 8,\n TAB: 9,\n ENTER: 13,\n ESC: 27,\n LEFT: 37,\n UP: 38,\n RIGHT: 39,\n DOWN: 40,\n END: 35,\n HOME: 36,\n SPACEBAR: 32,\n PAGEUP: 33,\n PAGEDOWN: 34,\n F2: 113,\n F10: 121,\n F12: 123,\n NUMPAD_PLUS: 107,\n NUMPAD_MINUS: 109,\n NUMPAD_DOT: 110\n },\n support: kendo.support || support,\n animate: kendo.animate || animate,\n ns: '',\n attr: function (value) {\n return 'data-' + kendo.ns + value;\n },\n getShadows: getShadows,\n wrap: wrap,\n deepExtend: deepExtend,\n getComputedStyles: getComputedStyles,\n isScrollable: isScrollable,\n scrollLeft: scrollLeft,\n size: size,\n toCamelCase: toCamelCase,\n toHyphens: toHyphens,\n getOffset: kendo.getOffset || getOffset,\n parseEffects: kendo.parseEffects || parseEffects,\n toggleClass: kendo.toggleClass || toggleClass,\n directions: kendo.directions || directions,\n Observable: Observable,\n Class: Class,\n Template: Template,\n template: proxy(Template.compile, Template),\n render: proxy(Template.render, Template),\n stringify: proxy(JSON.stringify, JSON),\n eventTarget: eventTarget,\n htmlEncode: htmlEncode,\n unescape: unescape,\n isLocalUrl: function (url) {\n return url && !localUrlRe.test(url);\n },\n expr: function (expression, safe, paramName) {\n expression = expression || '';\n if (typeof safe == STRING) {\n paramName = safe;\n safe = false;\n }\n paramName = paramName || 'd';\n if (expression && expression.charAt(0) !== '[') {\n expression = '.' + expression;\n }\n if (safe) {\n expression = expression.replace(/\"([^.]*)\\.([^\"]*)\"/g, '\"$1_$DOT$_$2\"');\n expression = expression.replace(/'([^.]*)\\.([^']*)'/g, '\\'$1_$DOT$_$2\\'');\n expression = wrapExpression(expression.split('.'), paramName);\n expression = expression.replace(/_\\$DOT\\$_/g, '.');\n } else {\n expression = paramName + expression;\n }\n return expression;\n },\n getter: function (expression, safe) {\n var key = expression + safe;\n return getterCache[key] = getterCache[key] || new Function('d', 'return ' + kendo.expr(expression, safe));\n },\n setter: function (expression) {\n return setterCache[expression] = setterCache[expression] || new Function('d,value', kendo.expr(expression) + '=value');\n },\n accessor: function (expression) {\n return {\n get: kendo.getter(expression),\n set: kendo.setter(expression)\n };\n },\n guid: function () {\n var id = '', i, random;\n for (i = 0; i < 32; i++) {\n random = math.random() * 16 | 0;\n if (i == 8 || i == 12 || i == 16 || i == 20) {\n id += '-';\n }\n id += (i == 12 ? 4 : i == 16 ? random & 3 | 8 : random).toString(16);\n }\n return id;\n },\n roleSelector: function (role) {\n return role.replace(/(\\S+)/g, '[' + kendo.attr('role') + '=$1],').slice(0, -1);\n },\n directiveSelector: function (directives) {\n var selectors = directives.split(' ');\n if (selectors) {\n for (var i = 0; i < selectors.length; i++) {\n if (selectors[i] != 'view') {\n selectors[i] = selectors[i].replace(/(\\w*)(view|bar|strip|over)$/, '$1-$2');\n }\n }\n }\n return selectors.join(' ').replace(/(\\S+)/g, 'kendo-mobile-$1,').slice(0, -1);\n },\n triggeredByInput: function (e) {\n return /^(label|input|textarea|select)$/i.test(e.target.tagName);\n },\n onWidgetRegistered: function (callback) {\n for (var i = 0, len = kendo.widgets.length; i < len; i++) {\n callback(kendo.widgets[i]);\n }\n kendo._widgetRegisteredCallbacks.push(callback);\n },\n logToConsole: function (message, type) {\n var console = window.console;\n if (!kendo.suppressLog && typeof console != 'undefined' && console.log) {\n console[type || 'log'](message);\n }\n }\n });\n var Widget = Observable.extend({\n init: function (element, options) {\n var that = this;\n that.element = kendo.jQuery(element).handler(that);\n that.angular('init', options);\n Observable.fn.init.call(that);\n var dataSource = options ? options.dataSource : null;\n 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 if (that._events && that._events[e]) {\n delete that._events[e];\n }\n }\n }\n that.bind(that.events, options);\n },\n resize: function (force) {\n var size = this.getSize(), currentSize = this._size;\n if (force || (size.width > 0 || size.height > 0) && (!currentSize || size.width !== currentSize.width || size.height !== currentSize.height)) {\n this._size = size;\n this._resize(size, force);\n this.trigger('resize', size);\n }\n },\n getSize: function () {\n return kendo.dimensions(this.element);\n },\n size: function (size) {\n if (!size) {\n return this.getSize();\n } else {\n this.setSize(size);\n }\n },\n setSize: $.noop,\n _resize: $.noop,\n destroy: function () {\n var that = this;\n that.element.removeData('kendo' + that.options.prefix + that.options.name);\n that.element.removeData('handler');\n that.unbind();\n },\n _destroy: function () {\n this.destroy();\n },\n angular: function () {\n },\n _muteAngularRebind: function (callback) {\n this._muteRebind = true;\n callback.call(this);\n this._muteRebind = false;\n }\n });\n var DataBoundWidget = Widget.extend({\n dataItems: function () {\n return this.dataSource.flatView();\n },\n _angularItems: function (cmd) {\n var that = this;\n that.angular(cmd, function () {\n return {\n elements: that.items(),\n data: $.map(that.dataItems(), function (dataItem) {\n return { dataItem: dataItem };\n })\n };\n });\n }\n });\n kendo.dimensions = function (element, dimensions) {\n var domElement = element[0];\n if (dimensions) {\n element.css(dimensions);\n }\n return {\n width: domElement.offsetWidth,\n height: domElement.offsetHeight\n };\n };\n kendo.notify = noop;\n var templateRegExp = /template$/i, jsonRegExp = /^\\s*(?:\\{(?:.|\\r\\n|\\n)*\\}|\\[(?:.|\\r\\n|\\n)*\\])\\s*$/, jsonFormatRegExp = /^\\{(\\d+)(:[^\\}]+)?\\}|^\\[[A-Za-z_]+\\]$/, dashRegExp = /([A-Z])/g;\n function parseOption(element, option) {\n var value;\n if (option.indexOf('data') === 0) {\n option = option.substring(4);\n option = option.charAt(0).toLowerCase() + option.substring(1);\n }\n option = option.replace(dashRegExp, '-$1');\n value = element.getAttribute('data-' + kendo.ns + option);\n if (value === null) {\n value = undefined;\n } else if (value === 'null') {\n value = null;\n } else if (value === 'true') {\n value = true;\n } else if (value === 'false') {\n value = false;\n } else if (numberRegExp.test(value) && option != 'mask') {\n value = parseFloat(value);\n } else if (jsonRegExp.test(value) && !jsonFormatRegExp.test(value)) {\n value = new Function('return (' + value + ')')();\n }\n return value;\n }\n function parseOptions(element, options, source) {\n var result = {}, option, value, role = element.getAttribute('data-' + kendo.ns + 'role');\n for (option in options) {\n value = parseOption(element, option);\n if (value !== undefined) {\n if (templateRegExp.test(option) && role != 'drawer') {\n if (typeof value === 'string') {\n if ($('#' + value).length) {\n value = kendo.template($('#' + value).html());\n } else if (source) {\n value = kendo.template(source[value]);\n }\n } else {\n value = element.getAttribute(option);\n }\n }\n result[option] = value;\n }\n }\n return result;\n }\n kendo.initWidget = function (element, options, roles) {\n var result, option, widget, idx, length, role, value, dataSource, fullPath, widgetKeyRegExp;\n if (!roles) {\n roles = kendo.ui.roles;\n } else if (roles.roles) {\n roles = roles.roles;\n }\n element = element.nodeType ? element : element[0];\n role = element.getAttribute('data-' + kendo.ns + 'role');\n if (!role) {\n return;\n }\n fullPath = role.indexOf('.') === -1;\n if (fullPath) {\n widget = roles[role];\n } else {\n widget = kendo.getter(role)(window);\n }\n var data = $(element).data(), widgetKey = widget ? 'kendo' + widget.fn.options.prefix + widget.fn.options.name : '';\n if (fullPath) {\n widgetKeyRegExp = new RegExp('^kendo.*' + role + '$', 'i');\n } else {\n widgetKeyRegExp = new RegExp('^' + widgetKey + '$', 'i');\n }\n for (var key in data) {\n if (key.match(widgetKeyRegExp)) {\n if (key === widgetKey) {\n result = data[key];\n } else {\n return data[key];\n }\n }\n }\n if (!widget) {\n return;\n }\n dataSource = parseOption(element, 'dataSource');\n options = $.extend({}, parseOptions(element, 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 'breadcrumb'\n ]) > -1 || widget.is(':visible');\n }\n kendo.resize = function (element, force) {\n var widgets = $(element).find('[data-' + kendo.ns + 'role]').addBack().filter(resizableWidget);\n if (!widgets.length) {\n return;\n }\n var widgetsArray = $.makeArray(widgets);\n widgetsArray.sort(containmentComparer);\n $.each(widgetsArray, function () {\n var widget = kendo.widgetInstance($(this));\n if (widget) {\n widget.resize(force);\n }\n });\n };\n kendo.parseOptions = parseOptions;\n extend(kendo.ui, {\n Widget: Widget,\n DataBoundWidget: DataBoundWidget,\n roles: {},\n progress: function (container, toggle, options) {\n var mask = container.find('.k-loading-mask'), support = kendo.support, browser = support.browser, isRtl, leftRight, webkitCorrection, containerScrollLeft, cssClass;\n options = $.extend({}, {\n width: '100%',\n height: '100%',\n top: container.scrollTop(),\n opacity: false\n }, options);\n cssClass = options.opacity ? 'k-loading-mask k-opaque' : 'k-loading-mask';\n if (toggle) {\n if (!mask.length) {\n isRtl = support.isRtl(container);\n leftRight = isRtl ? 'right' : 'left';\n containerScrollLeft = 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, elementData = element.data('kendoView');\n if (role) {\n if (role === 'content') {\n role = 'scroller';\n }\n if (role === 'editortoolbar') {\n var editorToolbar = element.data('kendoEditorToolbar');\n if (editorToolbar) {\n return editorToolbar;\n }\n }\n if (role === 'view' && elementData) {\n return elementData;\n }\n if (suites) {\n if (suites[0]) {\n for (i = 0, length = suites.length; i < length; i++) {\n widgets.push(suites[i].roles[role]);\n }\n } else {\n widgets.push(suites.roles[role]);\n }\n } else {\n widgets = [\n kendo.ui.roles[role],\n kendo.dataviz.ui.roles[role],\n kendo.mobile.ui.roles[role]\n ];\n }\n if (role.indexOf('.') >= 0) {\n widgets = [kendo.getter(role)(window)];\n }\n for (i = 0, length = widgets.length; i < length; i++) {\n var widget = widgets[i];\n if (widget) {\n var instance = element.data('kendo' + widget.fn.options.prefix + widget.fn.options.name);\n if (instance) {\n return instance;\n }\n }\n }\n }\n };\n kendo.onResize = function (callback) {\n var handler = callback;\n if (support.mobileOS.android) {\n handler = function () {\n setTimeout(callback, 600);\n };\n }\n $(window).on(support.resize, handler);\n return handler;\n };\n kendo.unbindResize = function (callback) {\n $(window).off(support.resize, callback);\n };\n kendo.attrValue = function (element, key) {\n return element.data(kendo.ns + key);\n };\n kendo.days = {\n Sunday: 0,\n Monday: 1,\n Tuesday: 2,\n Wednesday: 3,\n Thursday: 4,\n Friday: 5,\n Saturday: 6\n };\n function focusable(element, isTabIndexNotNaN) {\n var nodeName = element.nodeName.toLowerCase();\n return (/input|select|textarea|button|object/.test(nodeName) ? !element.disabled : 'a' === nodeName ? element.href || isTabIndexNotNaN : isTabIndexNotNaN) && visible(element);\n }\n function visible(element) {\n return $.expr.pseudos.visible(element) && !$(element).parents().addBack().filter(function () {\n return $.css(this, 'visibility') === 'hidden';\n }).length;\n }\n $.extend($.expr.pseudos, {\n kendoFocusable: function (element) {\n var idx = $.attr(element, 'tabindex');\n return focusable(element, !isNaN(idx) && idx > -1);\n }\n });\n var MOUSE_EVENTS = [\n 'mousedown',\n 'mousemove',\n 'mouseenter',\n 'mouseleave',\n 'mouseover',\n 'mouseout',\n 'mouseup',\n 'click'\n ];\n var EXCLUDE_BUST_CLICK_SELECTOR = 'label, input, [data-rel=external]';\n var MouseEventNormalizer = {\n setupMouseMute: function () {\n var idx = 0, length = MOUSE_EVENTS.length, element = document.documentElement;\n if (MouseEventNormalizer.mouseTrap || !support.eventCapture) {\n return;\n }\n MouseEventNormalizer.mouseTrap = true;\n MouseEventNormalizer.bustClick = false;\n MouseEventNormalizer.captureMouse = false;\n var handler = function (e) {\n if (MouseEventNormalizer.captureMouse) {\n if (e.type === 'click') {\n if (MouseEventNormalizer.bustClick && !$(e.target).is(EXCLUDE_BUST_CLICK_SELECTOR)) {\n e.preventDefault();\n e.stopPropagation();\n }\n } else {\n e.stopPropagation();\n }\n }\n };\n for (; idx < length; idx++) {\n element.addEventListener(MOUSE_EVENTS[idx], handler, true);\n }\n },\n muteMouse: function (e) {\n MouseEventNormalizer.captureMouse = true;\n if (e.data.bustClick) {\n MouseEventNormalizer.bustClick = true;\n }\n clearTimeout(MouseEventNormalizer.mouseTrapTimeoutID);\n },\n unMuteMouse: function () {\n clearTimeout(MouseEventNormalizer.mouseTrapTimeoutID);\n MouseEventNormalizer.mouseTrapTimeoutID = setTimeout(function () {\n MouseEventNormalizer.captureMouse = false;\n MouseEventNormalizer.bustClick = false;\n }, 400);\n }\n };\n var eventMap = {\n down: 'touchstart mousedown',\n move: 'mousemove touchmove',\n up: 'mouseup touchend touchcancel',\n cancel: 'mouseleave touchcancel'\n };\n if (support.touch && (support.mobileOS.ios || support.mobileOS.android)) {\n eventMap = {\n down: 'touchstart',\n move: 'touchmove',\n up: 'touchend touchcancel',\n cancel: 'touchcancel'\n };\n } else if (support.pointers) {\n eventMap = {\n down: 'pointerdown',\n move: 'pointermove',\n up: 'pointerup',\n cancel: 'pointercancel pointerleave'\n };\n } else if (support.msPointers) {\n eventMap = {\n down: 'MSPointerDown',\n move: 'MSPointerMove',\n up: 'MSPointerUp',\n cancel: 'MSPointerCancel MSPointerLeave'\n };\n }\n if (support.msPointers && !('onmspointerenter' in window)) {\n $.each({\n MSPointerEnter: 'MSPointerOver',\n MSPointerLeave: 'MSPointerOut'\n }, function (orig, fix) {\n $.event.special[orig] = {\n delegateType: fix,\n bindType: fix,\n handle: function (event) {\n var ret, target = this, related = event.relatedTarget, handleObj = event.handleObj;\n if (!related || related !== target && !$.contains(target, related)) {\n event.type = handleObj.origType;\n ret = handleObj.handler.apply(this, arguments);\n event.type = fix;\n }\n return ret;\n }\n };\n });\n }\n var getEventMap = function (e) {\n return eventMap[e] || e;\n }, eventRegEx = /([^ ]+)/g;\n kendo.applyEventMap = function (events, ns) {\n events = events.replace(eventRegEx, getEventMap);\n if (ns) {\n events = events.replace(eventRegEx, '$1.' + ns);\n }\n return events;\n };\n 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 } else if (on.indexOf('<=') >= 0) {\n date = new Date(Date.UTC(year, months[month], on.substr(5), time[0], time[1], time[2], 0));\n targetDay = days[on.substr(0, 3)];\n ourDay = date.getUTCDay();\n date.setUTCDate(date.getUTCDate() + targetDay - ourDay - (targetDay > ourDay ? 7 : 0));\n }\n return cache[year] = date;\n }\n function findRule(utcTime, rules, zone) {\n rules = rules[zone];\n if (!rules) {\n var time = zone.split(':');\n var offset = 0;\n if (time.length > 1) {\n offset = time[0] * 60 + Number(time[1]);\n }\n return [\n -1000000,\n 'max',\n '-',\n 'Jan',\n 1,\n [\n 0,\n 0,\n 0\n ],\n offset,\n '-'\n ];\n }\n var year = new Date(utcTime).getUTCFullYear();\n rules = jQuery.grep(rules, function (rule) {\n var from = rule[0];\n var to = rule[1];\n return from <= year && (to >= year || from == year && to == 'only' || to == 'max');\n });\n rules.push(utcTime);\n rules.sort(function (a, b) {\n if (typeof a != 'number') {\n a = Number(ruleToDate(year, a));\n }\n if (typeof b != 'number') {\n b = Number(ruleToDate(year, b));\n }\n return a - b;\n });\n var rule = rules[jQuery.inArray(utcTime, rules) - 1] || rules[rules.length - 1];\n return isNaN(rule) ? rule : null;\n }\n function findZone(utcTime, zones, timezone) {\n var zoneRules = zones[timezone];\n if (typeof zoneRules === 'string') {\n zoneRules = zones[zoneRules];\n }\n if (!zoneRules) {\n throw new Error('Timezone \"' + timezone + '\" is either incorrect, or kendo.timezones.min.js is not included.');\n }\n for (var idx = zoneRules.length - 1; idx >= 0; idx--) {\n var until = zoneRules[idx][3];\n if (until && utcTime > until) {\n break;\n }\n }\n var zone = zoneRules[idx + 1];\n if (!zone) {\n throw new Error('Timezone \"' + timezone + '\" not found on ' + utcTime + '.');\n }\n return zone;\n }\n function zoneAndRule(utcTime, zones, rules, timezone) {\n if (typeof utcTime != NUMBER) {\n utcTime = Date.UTC(utcTime.getFullYear(), utcTime.getMonth(), utcTime.getDate(), utcTime.getHours(), utcTime.getMinutes(), utcTime.getSeconds(), utcTime.getMilliseconds());\n }\n var zone = findZone(utcTime, zones, timezone);\n return {\n zone: zone,\n rule: findRule(utcTime, rules, zone[1])\n };\n }\n function offset(utcTime, timezone) {\n if (timezone == 'Etc/UTC' || timezone == 'Etc/GMT') {\n return 0;\n }\n var info = zoneAndRule(utcTime, this.zones, this.rules, timezone);\n var zone = info.zone;\n var rule = info.rule;\n return kendo.parseFloat(rule ? zone[0] - rule[6] : zone[0]);\n }\n function abbr(utcTime, timezone) {\n var info = zoneAndRule(utcTime, this.zones, this.rules, timezone);\n var zone = info.zone;\n var rule = info.rule;\n var base = zone[2];\n if (base.indexOf('/') >= 0) {\n return base.split('/')[rule && +rule[6] ? 1 : 0];\n } else if (base.indexOf('%s') >= 0) {\n return base.replace('%s', !rule || rule[7] == '-' ? '' : rule[7]);\n }\n return base;\n }\n function convert(date, fromOffset, toOffset) {\n var tempToOffset = toOffset;\n var diff;\n if (typeof fromOffset == STRING) {\n fromOffset = this.offset(date, fromOffset);\n }\n if (typeof toOffset == STRING) {\n toOffset = this.offset(date, toOffset);\n }\n var fromLocalOffset = date.getTimezoneOffset();\n date = new Date(date.getTime() + (fromOffset - toOffset) * 60000);\n var toLocalOffset = date.getTimezoneOffset();\n if (typeof tempToOffset == STRING) {\n tempToOffset = this.offset(date, tempToOffset);\n }\n diff = toLocalOffset - fromLocalOffset + (toOffset - tempToOffset);\n return new Date(date.getTime() + diff * 60000);\n }\n function apply(date, timezone) {\n return this.convert(date, date.getTimezoneOffset(), timezone);\n }\n function remove(date, timezone) {\n return this.convert(date, timezone, date.getTimezoneOffset());\n }\n function toLocalDate(time) {\n return this.apply(new Date(time), 'Etc/UTC');\n }\n return {\n zones: {},\n rules: {},\n offset: offset,\n convert: convert,\n apply: apply,\n remove: remove,\n abbr: abbr,\n toLocalDate: toLocalDate\n };\n }();\n kendo.date = function () {\n var MS_PER_MINUTE = 60000, MS_PER_DAY = 86400000;\n function adjustDST(date, hours) {\n if (hours === 0 && date.getHours() === 23) {\n date.setHours(date.getHours() + 2);\n return true;\n }\n return false;\n }\n function setDayOfWeek(date, day, dir) {\n var hours = date.getHours();\n dir = dir || 1;\n day = (day - date.getDay() + 7 * dir) % 7;\n date.setDate(date.getDate() + day);\n adjustDST(date, hours);\n }\n function dayOfWeek(date, day, dir) {\n date = new Date(date);\n setDayOfWeek(date, day, dir);\n return date;\n }\n function firstDayOfMonth(date) {\n return new Date(date.getFullYear(), date.getMonth(), 1);\n }\n function lastDayOfMonth(date) {\n var last = new Date(date.getFullYear(), date.getMonth() + 1, 0), first = firstDayOfMonth(date), timeOffset = Math.abs(last.getTimezoneOffset() - first.getTimezoneOffset());\n if (timeOffset) {\n last.setHours(first.getHours() + timeOffset / 60);\n }\n return last;\n }\n function moveDateToWeekStart(date, weekStartDay) {\n if (weekStartDay !== 1) {\n return addDays(dayOfWeek(date, weekStartDay, -1), 4);\n }\n return addDays(date, 4 - (date.getDay() || 7));\n }\n function calcWeekInYear(date, weekStartDay) {\n var firstWeekInYear = new Date(date.getFullYear(), 0, 1, -6);\n var newDate = moveDateToWeekStart(date, weekStartDay);\n var diffInMS = newDate.getTime() - firstWeekInYear.getTime();\n var days = Math.floor(diffInMS / MS_PER_DAY);\n return 1 + Math.floor(days / 7);\n }\n function weekInYear(date, weekStartDay) {\n if (weekStartDay === undefined) {\n weekStartDay = kendo.culture().calendar.firstDay;\n }\n var prevWeekDate = addDays(date, -7);\n var nextWeekDate = addDays(date, 7);\n var weekNumber = calcWeekInYear(date, weekStartDay);\n if (weekNumber === 0) {\n return calcWeekInYear(prevWeekDate, weekStartDay) + 1;\n }\n if (weekNumber === 53 && calcWeekInYear(nextWeekDate, weekStartDay) > 1) {\n return 1;\n }\n return weekNumber;\n }\n function getDate(date) {\n date = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0);\n adjustDST(date, 0);\n return date;\n }\n function toUtcTime(date) {\n return Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n }\n function getMilliseconds(date) {\n return toInvariantTime(date).getTime() - getDate(toInvariantTime(date));\n }\n function isInTimeRange(value, min, max) {\n var msMin = getMilliseconds(min), msMax = getMilliseconds(max), msValue;\n if (!value || msMin == msMax) {\n return true;\n }\n if (min >= max) {\n max += MS_PER_DAY;\n }\n msValue = getMilliseconds(value);\n if (msMin > msValue) {\n msValue += MS_PER_DAY;\n }\n if (msMax < msMin) {\n msMax += MS_PER_DAY;\n }\n return msValue >= msMin && msValue <= msMax;\n }\n function isInDateRange(value, min, max) {\n var msMin = min.getTime(), msMax = max.getTime(), msValue;\n if (msMin >= msMax) {\n msMax += MS_PER_DAY;\n }\n msValue = value.getTime();\n return msValue >= msMin && msValue <= msMax;\n }\n function addDays(date, offset) {\n var hours = date.getHours();\n date = new Date(date);\n setTime(date, offset * MS_PER_DAY);\n adjustDST(date, hours);\n return date;\n }\n function setTime(date, milliseconds, ignoreDST) {\n var offset = date.getTimezoneOffset();\n var difference;\n date.setTime(date.getTime() + milliseconds);\n if (!ignoreDST) {\n difference = date.getTimezoneOffset() - offset;\n date.setTime(date.getTime() + difference * MS_PER_MINUTE);\n }\n }\n function setHours(date, time) {\n date = new Date(date.getFullYear(), date.getMonth(), date.getDate(), time.getHours(), time.getMinutes(), time.getSeconds(), time.getMilliseconds());\n adjustDST(date, time.getHours());\n return date;\n }\n function today() {\n return getDate(new Date());\n }\n function isToday(date) {\n return getDate(date).getTime() == today().getTime();\n }\n function toInvariantTime(date) {\n var staticDate = new Date(1980, 1, 1, 0, 0, 0);\n if (date) {\n staticDate.setHours(date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n }\n return staticDate;\n }\n return {\n adjustDST: adjustDST,\n dayOfWeek: dayOfWeek,\n setDayOfWeek: setDayOfWeek,\n getDate: getDate,\n isInDateRange: isInDateRange,\n isInTimeRange: isInTimeRange,\n isToday: isToday,\n nextDay: function (date) {\n return addDays(date, 1);\n },\n previousDay: function (date) {\n return addDays(date, -1);\n },\n toUtcTime: toUtcTime,\n MS_PER_DAY: MS_PER_DAY,\n MS_PER_HOUR: 60 * MS_PER_MINUTE,\n MS_PER_MINUTE: MS_PER_MINUTE,\n setTime: setTime,\n setHours: setHours,\n addDays: addDays,\n today: today,\n toInvariantTime: toInvariantTime,\n firstDayOfMonth: firstDayOfMonth,\n lastDayOfMonth: lastDayOfMonth,\n weekInYear: weekInYear,\n getMilliseconds: getMilliseconds\n };\n }();\n kendo.stripWhitespace = function (element) {\n if (document.createNodeIterator) {\n var iterator = document.createNodeIterator(element, NodeFilter.SHOW_TEXT, function (node) {\n return node.parentNode == element ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;\n }, false);\n while (iterator.nextNode()) {\n if (iterator.referenceNode && !iterator.referenceNode.textContent.trim()) {\n iterator.referenceNode.parentNode.removeChild(iterator.referenceNode);\n }\n }\n } else {\n for (var i = 0; i < element.childNodes.length; i++) {\n var child = element.childNodes[i];\n if (child.nodeType == 3 && !/\\S/.test(child.nodeValue)) {\n element.removeChild(child);\n i--;\n }\n if (child.nodeType == 1) {\n kendo.stripWhitespace(child);\n }\n }\n }\n };\n var animationFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function (callback) {\n setTimeout(callback, 1000 / 60);\n };\n kendo.animationFrame = function (callback) {\n animationFrame.call(window, callback);\n };\n var animationQueue = [];\n kendo.queueAnimation = function (callback) {\n animationQueue[animationQueue.length] = callback;\n if (animationQueue.length === 1) {\n kendo.runNextAnimation();\n }\n };\n kendo.runNextAnimation = function () {\n kendo.animationFrame(function () {\n if (animationQueue[0]) {\n animationQueue.shift()();\n if (animationQueue[0]) {\n kendo.runNextAnimation();\n }\n }\n });\n };\n kendo.parseQueryStringParams = function (url) {\n var queryString = url.split('?')[1] || '', params = {}, paramParts = queryString.split(/&|=/), length = paramParts.length, idx = 0;\n for (; idx < length; idx += 2) {\n if (paramParts[idx] !== '') {\n params[decodeURIComponent(paramParts[idx])] = decodeURIComponent(paramParts[idx + 1]);\n }\n }\n return params;\n };\n kendo.elementUnderCursor = function (e) {\n if (typeof e.x.client != 'undefined') {\n return document.elementFromPoint(e.x.client, e.y.client);\n }\n };\n kendo.wheelDeltaY = function (jQueryEvent) {\n var e = jQueryEvent.originalEvent, deltaY = e.wheelDeltaY, delta;\n if (e.wheelDelta) {\n if (deltaY === undefined || deltaY) {\n delta = e.wheelDelta;\n }\n } else if (e.detail && e.axis === e.VERTICAL_AXIS) {\n delta = -e.detail * 10;\n }\n return delta;\n };\n kendo.throttle = function (fn, delay) {\n var timeout;\n var lastExecTime = 0;\n if (!delay || delay <= 0) {\n return fn;\n }\n var throttled = function () {\n var that = this;\n var elapsed = +new Date() - lastExecTime;\n var args = arguments;\n function exec() {\n fn.apply(that, args);\n lastExecTime = +new Date();\n }\n if (!lastExecTime) {\n return exec();\n }\n if (timeout) {\n clearTimeout(timeout);\n }\n if (elapsed > delay) {\n exec();\n } else {\n timeout = setTimeout(exec, delay - elapsed);\n }\n };\n throttled.cancel = function () {\n clearTimeout(timeout);\n };\n return throttled;\n };\n kendo.caret = function (element, start, end) {\n var rangeElement;\n var isPosition = start !== undefined;\n if (end === undefined) {\n end = start;\n }\n if (element[0]) {\n element = element[0];\n }\n if (isPosition && element.disabled) {\n return;\n }\n try {\n if (element.selectionStart !== undefined) {\n if (isPosition) {\n element.focus();\n var mobile = support.mobileOS;\n if (mobile.wp || mobile.android) {\n setTimeout(function () {\n element.setSelectionRange(start, end);\n }, 0);\n } else {\n element.setSelectionRange(start, end);\n }\n } else {\n start = [\n element.selectionStart,\n element.selectionEnd\n ];\n }\n } else if (document.selection) {\n if ($(element).is(':visible')) {\n element.focus();\n }\n rangeElement = element.createTextRange();\n if (isPosition) {\n rangeElement.collapse(true);\n rangeElement.moveStart('character', start);\n rangeElement.moveEnd('character', end - start);\n rangeElement.select();\n } else {\n var rangeDuplicated = rangeElement.duplicate(), selectionStart, selectionEnd;\n rangeElement.moveToBookmark(document.selection.createRange().getBookmark());\n rangeDuplicated.setEndPoint('EndToStart', rangeElement);\n selectionStart = rangeDuplicated.text.length;\n selectionEnd = selectionStart + rangeElement.text.length;\n start = [\n selectionStart,\n selectionEnd\n ];\n }\n }\n } catch (e) {\n start = [];\n }\n return start;\n };\n kendo.compileMobileDirective = function (element, scope) {\n var angular = window.angular;\n element.attr('data-' + kendo.ns + 'role', element[0].tagName.toLowerCase().replace('kendo-mobile-', '').replace('-', ''));\n angular.element(element).injector().invoke([\n '$compile',\n function ($compile) {\n $compile(element)(scope);\n if (!/^\\$(digest|apply)$/.test(scope.$$phase)) {\n scope.$digest();\n }\n }\n ]);\n return kendo.widgetInstance(element, kendo.mobile.ui);\n };\n kendo.antiForgeryTokens = function () {\n var tokens = {}, csrf_token = $('meta[name=csrf-token],meta[name=_csrf]').attr('content'), csrf_param = $('meta[name=csrf-param],meta[name=_csrf_header]').attr('content');\n $('input[name^=\\'__RequestVerificationToken\\']').each(function () {\n tokens[this.name] = this.value;\n });\n if (csrf_param !== undefined && csrf_token !== undefined) {\n tokens[csrf_param] = csrf_token;\n }\n return tokens;\n };\n kendo.cycleForm = function (form) {\n var firstElement = form.find('input, .k-widget').first();\n var lastElement = form.find('button, .k-button').last();\n function focus(el) {\n var widget = kendo.widgetInstance(el);\n if (widget && widget.focus) {\n widget.focus();\n } else {\n el.focus();\n }\n }\n lastElement.on('keydown', function (e) {\n if (e.keyCode == kendo.keys.TAB && !e.shiftKey) {\n e.preventDefault();\n focus(firstElement);\n }\n });\n firstElement.on('keydown', function (e) {\n if (e.keyCode == kendo.keys.TAB && e.shiftKey) {\n e.preventDefault();\n focus(lastElement);\n }\n });\n };\n kendo.focusElement = function (element) {\n var scrollTopPositions = [];\n var scrollableParents = element.parentsUntil('body').filter(function (index, element) {\n var computedStyle = kendo.getComputedStyles(element, ['overflow']);\n return computedStyle.overflow !== 'visible';\n }).add(window);\n scrollableParents.each(function (index, parent) {\n scrollTopPositions[index] = $(parent).scrollTop();\n });\n try {\n element[0].setActive();\n } catch (e) {\n element[0].focus();\n }\n scrollableParents.each(function (index, parent) {\n $(parent).scrollTop(scrollTopPositions[index]);\n });\n };\n kendo.focusNextElement = function () {\n if (document.activeElement) {\n var focussable = $(':kendoFocusable');\n var index = focussable.index(document.activeElement);\n if (index > -1) {\n var nextElement = focussable[index + 1] || focussable[0];\n nextElement.focus();\n }\n }\n };\n kendo.matchesMedia = function (mediaQuery) {\n var media = kendo._bootstrapToMedia(mediaQuery) || mediaQuery;\n return support.matchMedia && window.matchMedia(media).matches;\n };\n kendo._bootstrapToMedia = function (bootstrapMedia) {\n return {\n 'xs': '(max-width: 576px)',\n 'sm': '(min-width: 576px)',\n 'md': '(min-width: 768px)',\n 'lg': '(min-width: 992px)',\n 'xl': '(min-width: 1200px)'\n }[bootstrapMedia];\n };\n kendo.fileGroupMap = {\n audio: [\n '.aif',\n '.iff',\n '.m3u',\n '.m4a',\n '.mid',\n '.mp3',\n '.mpa',\n '.wav',\n '.wma',\n '.ogg',\n '.wav',\n '.wma',\n '.wpl'\n ],\n video: [\n '.3g2',\n '.3gp',\n '.avi',\n '.asf',\n '.flv',\n '.m4u',\n '.rm',\n '.h264',\n '.m4v',\n '.mkv',\n '.mov',\n '.mp4',\n '.mpg',\n '.rm',\n '.swf',\n '.vob',\n '.wmv'\n ],\n image: [\n '.ai',\n '.dds',\n '.heic',\n '.jpe',\n 'jfif',\n '.jif',\n '.jp2',\n '.jps',\n '.eps',\n '.bmp',\n '.gif',\n '.jpeg',\n '.jpg',\n '.png',\n '.ps',\n '.psd',\n '.svg',\n '.svgz',\n '.tif',\n '.tiff'\n ],\n txt: [\n '.doc',\n '.docx',\n '.log',\n '.pages',\n '.tex',\n '.wpd',\n '.wps',\n '.odt',\n '.rtf',\n '.text',\n '.txt',\n '.wks'\n ],\n presentation: [\n '.key',\n '.odp',\n '.pps',\n '.ppt',\n '.pptx'\n ],\n data: [\n '.xlr',\n '.xls',\n '.xlsx'\n ],\n programming: [\n '.tmp',\n '.bak',\n '.msi',\n '.cab',\n '.cpl',\n '.cur',\n '.dll',\n '.dmp',\n '.drv',\n '.icns',\n '.ico',\n '.link',\n '.sys',\n '.cfg',\n '.ini',\n '.asp',\n '.aspx',\n '.cer',\n '.csr',\n '.css',\n '.dcr',\n '.htm',\n '.html',\n '.js',\n '.php',\n '.rss',\n '.xhtml'\n ],\n pdf: ['.pdf'],\n config: [\n '.apk',\n '.app',\n '.bat',\n '.cgi',\n '.com',\n '.exe',\n '.gadget',\n '.jar',\n '.wsf'\n ],\n zip: [\n '.7z',\n '.cbr',\n '.gz',\n '.sitx',\n '.arj',\n '.deb',\n '.pkg',\n '.rar',\n '.rpm',\n '.tar.gz',\n '.z',\n '.zip',\n '.zipx'\n ],\n 'disc-image': [\n '.dmg',\n '.iso',\n '.toast',\n '.vcd',\n '.bin',\n '.cue',\n '.mdf'\n ]\n };\n kendo.getFileGroup = function (extension, withPrefix) {\n var fileTypeMap = kendo.fileGroupMap;\n var groups = Object.keys(fileTypeMap);\n var type = 'file';\n if (extension === undefined || !extension.length) {\n return type;\n }\n for (var i = 0; i < groups.length; i += 1) {\n var extensions = fileTypeMap[groups[i]];\n if (extensions.indexOf(extension.toLowerCase()) > -1) {\n return withPrefix ? 'file-' + groups[i] : groups[i];\n }\n }\n return type;\n };\n kendo.getFileSizeMessage = function (size) {\n var sizes = [\n 'Bytes',\n 'KB',\n 'MB',\n 'GB',\n 'TB'\n ];\n if (size === 0) {\n return '0 Byte';\n }\n var i = parseInt(Math.floor(Math.log(size) / Math.log(1024)), 10);\n return Math.round(size / Math.pow(1024, i), 2) + ' ' + sizes[i];\n };\n (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 var preventMove = touchInfo.type !== 'api' && that.userEvents._shouldNotMove;\n if (that._finished || preventMove) {\n return;\n }\n that.x.move(touchInfo.location);\n that.y.move(touchInfo.location);\n if (!that._moved) {\n if (that._withinIgnoreThreshold()) {\n return;\n }\n if (!UserEvents.current || UserEvents.current === that.userEvents) {\n that._start(touchInfo);\n } else {\n return that.dispose();\n }\n }\n if (!that._finished) {\n that._trigger(MOVE, touchInfo);\n }\n },\n end: function (touchInfo) {\n this.endTime = now();\n if (this._finished) {\n return;\n }\n this._finished = true;\n this._trigger(RELEASE, touchInfo);\n if (this._moved) {\n this._trigger(END, touchInfo);\n } else {\n if (!this.useClickAsTap) {\n if (this.supportDoubleTap) {\n this._tap(touchInfo);\n } else {\n this._trigger(TAP, touchInfo);\n }\n }\n }\n clearTimeout(this._holdTimeout);\n this.dispose();\n },\n dispose: function () {\n var userEvents = this.userEvents, activeTouches = userEvents.touches;\n this._finished = true;\n this.pressEvent = null;\n clearTimeout(this._holdTimeout);\n activeTouches.splice($.inArray(this, activeTouches), 1);\n },\n skip: function () {\n this.dispose();\n },\n cancel: function () {\n this.dispose();\n },\n isMoved: function () {\n return this._moved;\n },\n _start: function (touchInfo) {\n clearTimeout(this._holdTimeout);\n this.startTime = now();\n this._moved = true;\n this._trigger(START, touchInfo);\n },\n _trigger: function (name, touchInfo) {\n var that = this, jQueryEvent = touchInfo.event, data = {\n touch: that,\n x: that.x,\n y: that.y,\n target: that.target,\n event: jQueryEvent\n };\n if (that.userEvents.notify(name, data)) {\n jQueryEvent.preventDefault();\n }\n },\n _withinIgnoreThreshold: function () {\n var xDelta = this.x.initialDelta, yDelta = this.y.initialDelta;\n return Math.sqrt(xDelta * xDelta + yDelta * yDelta) <= this.threshold;\n }\n });\n function withEachUpEvent(callback) {\n var downEvents = kendo.eventMap.up.split(' '), idx = 0, length = downEvents.length;\n for (; idx < length; idx++) {\n callback(downEvents[idx]);\n }\n }\n var UserEvents = Observable.extend({\n init: function (element, options) {\n var that = this, filter, ns = kendo.guid();\n options = options || {};\n filter = that.filter = options.filter;\n that.threshold = options.threshold || DEFAULT_THRESHOLD;\n that.minHold = options.minHold || DEFAULT_MIN_HOLD;\n that.touches = [];\n that._maxTouches = options.multiTouch ? 2 : 1;\n that.allowSelection = options.allowSelection;\n that.captureUpIfMoved = options.captureUpIfMoved;\n that.useClickAsTap = !options.fastTap && !support.delayedClick();\n that.eventNS = ns;\n that._clicks = 0;\n that.supportDoubleTap = options.supportDoubleTap;\n element = $(element).handler(that);\n Observable.fn.init.call(that);\n extend(that, {\n element: element,\n surface: options.global && ENABLE_GLOBAL_SURFACE ? $(element[0].ownerDocument.documentElement) : $(options.surface || element),\n stopPropagation: options.stopPropagation,\n pressed: false\n });\n that.surface.handler(that).on(kendo.applyEventMap('move', ns), '_move').on(kendo.applyEventMap('up cancel', ns), '_end');\n element.on(kendo.applyEventMap('down', ns), filter, '_start');\n if (that.useClickAsTap) {\n element.on(kendo.applyEventMap('click', ns), filter, '_click');\n }\n if (support.pointers || support.msPointers) {\n if (support.browser.version < 11) {\n var defaultAction = 'pinch-zoom double-tap-zoom';\n element.css('-ms-touch-action', options.touchAction && options.touchAction != 'none' ? defaultAction + ' ' + options.touchAction : defaultAction);\n } else {\n element.css('touch-action', options.touchAction || 'none');\n }\n }\n if (options.preventDragEvent) {\n element.on(kendo.applyEventMap('dragstart', ns), kendo.preventDefault);\n }\n element.on(kendo.applyEventMap('mousedown', ns), filter, { root: element }, '_select');\n if (that.captureUpIfMoved && support.eventCapture) {\n var surfaceElement = that.surface[0], preventIfMovingProxy = $.proxy(that.preventIfMoving, that);\n withEachUpEvent(function (eventName) {\n surfaceElement.addEventListener(eventName, preventIfMovingProxy, true);\n });\n }\n that.bind([\n PRESS,\n HOLD,\n TAP,\n DOUBLETAP,\n START,\n MOVE,\n END,\n RELEASE,\n CANCEL,\n GESTURESTART,\n GESTURECHANGE,\n GESTUREEND,\n GESTURETAP,\n SELECT\n ], options);\n },\n preventIfMoving: function (e) {\n if (this._isMoved()) {\n e.preventDefault();\n }\n },\n destroy: function () {\n var that = this;\n if (that._destroyed) {\n return;\n }\n that._destroyed = true;\n if (that.captureUpIfMoved && support.eventCapture) {\n var surfaceElement = that.surface[0];\n withEachUpEvent(function (eventName) {\n surfaceElement.removeEventListener(eventName, that.preventIfMoving);\n });\n }\n that.element.kendoDestroy(that.eventNS);\n that.surface.kendoDestroy(that.eventNS);\n that.element.removeData('handler');\n that.surface.removeData('handler');\n that._disposeAll();\n that.unbind();\n delete that.surface;\n delete that.element;\n delete that.currentTarget;\n },\n capture: function () {\n UserEvents.current = this;\n },\n cancel: function () {\n this._disposeAll();\n this.trigger(CANCEL);\n },\n notify: function (eventName, data) {\n var that = this, touches = that.touches;\n if (this._isMultiTouch()) {\n switch (eventName) {\n case MOVE:\n eventName = GESTURECHANGE;\n break;\n case END:\n eventName = GESTUREEND;\n break;\n case TAP:\n eventName = GESTURETAP;\n break;\n }\n extend(data, { touches: touches }, touchDelta(touches[0], touches[1]));\n }\n return this.trigger(eventName, extend(data, { type: eventName }));\n },\n press: function (x, y, target) {\n this._apiCall('_start', x, y, target);\n },\n move: function (x, y) {\n this._apiCall('_move', x, y);\n },\n end: function (x, y) {\n this._apiCall('_end', x, y);\n },\n _isMultiTouch: function () {\n return this.touches.length > 1;\n },\n _maxTouchesReached: function () {\n return this.touches.length >= this._maxTouches;\n },\n _disposeAll: function () {\n var touches = this.touches;\n while (touches.length > 0) {\n touches.pop().dispose();\n }\n },\n _isMoved: function () {\n return $.grep(this.touches, function (touch) {\n return touch.isMoved();\n }).length;\n },\n _select: function (e) {\n if (!this.allowSelection || this.trigger(SELECT, { event: e })) {\n e.preventDefault();\n }\n },\n _start: function (e) {\n var that = this, idx = 0, filter = that.filter, target, touches = getTouches(e), length = touches.length, touch, which = e.which;\n if (which && which > 1 || that._maxTouchesReached()) {\n return;\n }\n UserEvents.current = null;\n that.currentTarget = e.currentTarget;\n if (that.stopPropagation) {\n e.stopPropagation();\n }\n for (; idx < length; idx++) {\n if (that._maxTouchesReached()) {\n break;\n }\n touch = touches[idx];\n if (filter) {\n target = $(touch.currentTarget);\n } else {\n target = that.element;\n }\n if (!target.length) {\n continue;\n }\n touch = new Touch(that, target, touch);\n that.touches.push(touch);\n touch.press();\n if (that._isMultiTouch()) {\n that.notify('gesturestart', {});\n }\n }\n },\n _move: function (e) {\n this._eachTouch('move', e);\n },\n _end: function (e) {\n this._eachTouch('end', e);\n },\n _click: function (e) {\n var data = {\n touch: {\n initialTouch: e.target,\n target: $(e.currentTarget),\n endTime: now(),\n x: {\n location: e.pageX,\n client: e.clientX\n },\n y: {\n location: e.pageY,\n client: e.clientY\n }\n },\n x: e.pageX,\n y: e.pageY,\n target: $(e.currentTarget),\n event: e,\n type: 'tap'\n };\n if (this.trigger('tap', data)) {\n e.preventDefault();\n }\n },\n _eachTouch: function (methodName, e) {\n var that = this, dict = {}, touches = getTouches(e), activeTouches = that.touches, idx, touch, touchInfo, matchingTouch;\n for (idx = 0; idx < activeTouches.length; idx++) {\n touch = activeTouches[idx];\n dict[touch.id] = touch;\n }\n for (idx = 0; idx < touches.length; idx++) {\n touchInfo = touches[idx];\n matchingTouch = dict[touchInfo.id];\n if (matchingTouch) {\n matchingTouch[methodName](touchInfo);\n }\n }\n },\n _apiCall: function (type, x, y, target) {\n this[type]({\n api: true,\n pageX: x,\n pageY: y,\n clientX: x,\n clientY: y,\n target: $(target || this.element)[0],\n stopPropagation: $.noop,\n preventDefault: $.noop\n });\n }\n });\n UserEvents.defaultThreshold = function (value) {\n DEFAULT_THRESHOLD = value;\n };\n UserEvents.minHold = function (value) {\n DEFAULT_MIN_HOLD = value;\n };\n kendo.getTouches = getTouches;\n kendo.touchDelta = touchDelta;\n kendo.UserEvents = UserEvents;\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.touch', [\n 'kendo.core',\n 'kendo.userevents'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'touch',\n name: 'Touch',\n category: 'mobile',\n description: 'The kendo Touch widget provides a cross-platform compatible API for handling user-initiated touch events, multi-touch gestures and event sequences (drag, swipe, etc.). ',\n depends: [\n 'core',\n 'userevents'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, proxy = $.proxy, abs = Math.abs, MAX_DOUBLE_TAP_DISTANCE = 20;\n var Touch = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n options = that.options;\n element = that.element;\n that.wrapper = element;\n function eventProxy(name) {\n return function (e) {\n that._triggerTouch(name, e);\n };\n }\n function gestureEventProxy(name) {\n return function (e) {\n that.trigger(name, {\n touches: e.touches,\n distance: e.distance,\n center: e.center,\n event: e.event\n });\n };\n }\n that.events = new kendo.UserEvents(element, {\n filter: options.filter,\n surface: options.surface,\n minHold: options.minHold,\n multiTouch: options.multiTouch,\n allowSelection: true,\n fastTap: options.fastTap,\n press: eventProxy('touchstart'),\n hold: eventProxy('hold'),\n tap: proxy(that, '_tap'),\n gesturestart: gestureEventProxy('gesturestart'),\n gesturechange: gestureEventProxy('gesturechange'),\n gestureend: gestureEventProxy('gestureend')\n });\n if (options.enableSwipe) {\n that.events.bind('start', proxy(that, '_swipestart'));\n that.events.bind('move', proxy(that, '_swipemove'));\n } else {\n that.events.bind('start', proxy(that, '_dragstart'));\n that.events.bind('move', eventProxy('drag'));\n that.events.bind('end', eventProxy('dragend'));\n }\n kendo.notify(that);\n },\n events: [\n 'touchstart',\n 'dragstart',\n 'drag',\n 'dragend',\n 'tap',\n 'doubletap',\n 'hold',\n 'swipe',\n 'gesturestart',\n 'gesturechange',\n 'gestureend'\n ],\n options: {\n name: 'Touch',\n surface: null,\n global: false,\n fastTap: false,\n filter: null,\n multiTouch: false,\n enableSwipe: false,\n minXDelta: 30,\n maxYDelta: 20,\n maxDuration: 1000,\n minHold: 800,\n doubleTapTimeout: 800\n },\n cancel: function () {\n this.events.cancel();\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.events.destroy();\n },\n _triggerTouch: function (type, e) {\n if (this.trigger(type, {\n touch: e.touch,\n event: e.event\n })) {\n e.preventDefault();\n }\n },\n _tap: function (e) {\n var that = this, lastTap = that.lastTap, touch = e.touch;\n if (lastTap && touch.endTime - lastTap.endTime < that.options.doubleTapTimeout && kendo.touchDelta(touch, lastTap).distance < MAX_DOUBLE_TAP_DISTANCE) {\n that._triggerTouch('doubletap', e);\n that.lastTap = null;\n } else {\n that._triggerTouch('tap', e);\n that.lastTap = touch;\n }\n },\n _dragstart: function (e) {\n this._triggerTouch('dragstart', e);\n },\n _swipestart: function (e) {\n if (abs(e.x.velocity) * 2 >= abs(e.y.velocity)) {\n e.sender.capture();\n }\n },\n _swipemove: function (e) {\n var that = this, options = that.options, touch = e.touch, duration = e.event.timeStamp - touch.startTime, direction = touch.x.initialDelta > 0 ? 'right' : 'left';\n if (abs(touch.x.initialDelta) >= options.minXDelta && abs(touch.y.initialDelta) < options.maxYDelta && duration < options.maxDuration) {\n that.trigger('swipe', {\n direction: direction,\n touch: e.touch\n });\n touch.cancel();\n }\n }\n });\n kendo.ui.plugin(Touch);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.data.odata', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'data.odata',\n name: 'OData',\n category: 'framework',\n depends: ['core'],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, extend = $.extend, NEWLINE = '\\r\\n', DOUBLELINE = '\\r\\n\\r\\n', isFunction = kendo.isFunction, odataFilters = {\n eq: 'eq',\n neq: 'ne',\n gt: 'gt',\n gte: 'ge',\n lt: 'lt',\n lte: 'le',\n contains: 'substringof',\n doesnotcontain: 'substringof',\n endswith: 'endswith',\n startswith: 'startswith',\n isnull: 'eq',\n isnotnull: 'ne',\n isnullorempty: 'eq',\n isnotnullorempty: 'ne',\n isempty: 'eq',\n isnotempty: 'ne'\n }, odataFiltersVersionFour = extend({}, odataFilters, { contains: 'contains' }), mappers = {\n pageSize: $.noop,\n page: $.noop,\n filter: function (params, filter, useVersionFour) {\n if (filter) {\n filter = toOdataFilter(filter, useVersionFour);\n if (filter) {\n params.$filter = filter;\n }\n }\n },\n sort: function (params, orderby) {\n var expr = $.map(orderby, function (value) {\n var order = value.field.replace(/\\./g, '/');\n if (value.dir === 'desc') {\n order += ' desc';\n }\n return order;\n }).join(',');\n if (expr) {\n params.$orderby = expr;\n }\n },\n skip: function (params, skip) {\n if (skip) {\n params.$skip = skip;\n }\n },\n take: function (params, take) {\n if (take) {\n params.$top = take;\n }\n }\n }, defaultDataType = { read: { dataType: 'jsonp' } };\n function toOdataFilter(filter, useOdataFour) {\n var result = [], logic = filter.logic || 'and', idx, length, field, type, format, operator, value, ignoreCase, filters = filter.filters;\n for (idx = 0, length = filters.length; idx < length; idx++) {\n filter = filters[idx];\n field = filter.field;\n value = filter.value;\n operator = filter.operator;\n if (filter.filters) {\n filter = toOdataFilter(filter, useOdataFour);\n } else {\n ignoreCase = filter.ignoreCase;\n field = field.replace(/\\./g, '/');\n filter = odataFilters[operator];\n if (useOdataFour) {\n filter = odataFiltersVersionFour[operator];\n }\n if (operator === 'isnullorempty') {\n filter = kendo.format('{0} {1} null or {0} {1} \\'\\'', field, filter);\n } else if (operator === 'isnotnullorempty') {\n filter = kendo.format('{0} {1} null and {0} {1} \\'\\'', field, filter);\n } else if (operator === 'isnull' || operator === 'isnotnull') {\n filter = kendo.format('{0} {1} null', field, filter);\n } else if (operator === 'isempty' || operator === 'isnotempty') {\n filter = kendo.format('{0} {1} \\'\\'', field, filter);\n } else if (filter && value !== undefined) {\n type = $.type(value);\n if (type === 'string') {\n format = '\\'{1}\\'';\n value = value.replace(/'/g, '\\'\\'');\n if (ignoreCase === true) {\n field = 'tolower(' + field + ')';\n }\n } else if (type === 'date') {\n if (useOdataFour) {\n format = '{1:yyyy-MM-ddTHH:mm:ss+00:00}';\n value = kendo.timezone.apply(value, 'Etc/UTC');\n } else {\n format = 'datetime\\'{1:yyyy-MM-ddTHH:mm:ss}\\'';\n }\n } else {\n format = '{1}';\n }\n if (filter.length > 3) {\n if (filter !== 'substringof') {\n format = '{0}({2},' + format + ')';\n } else {\n format = '{0}(' + format + ',{2})';\n if (operator === 'doesnotcontain') {\n if (useOdataFour) {\n format = '{0}({2},\\'{1}\\') eq -1';\n filter = 'indexof';\n } else {\n format += ' eq false';\n }\n }\n }\n } else {\n format = '{2} {0} ' + format;\n }\n filter = kendo.format(format, filter, value, field);\n }\n }\n result.push(filter);\n }\n filter = result.join(' ' + logic + ' ');\n if (result.length > 1) {\n filter = '(' + filter + ')';\n }\n return filter;\n }\n function stripMetadata(obj) {\n for (var name in obj) {\n if (name.indexOf('@odata') === 0) {\n delete obj[name];\n }\n }\n }\n function hex16() {\n return Math.floor((1 + Math.random()) * 65536).toString(16).substr(1);\n }\n function createBoundary(prefix) {\n return prefix + hex16() + '-' + hex16() + '-' + hex16();\n }\n function createDelimeter(boundary, close) {\n var result = NEWLINE + '--' + boundary;\n if (close) {\n result += '--';\n }\n return result;\n }\n function createCommand(transport, item, httpVerb, command) {\n var transportUrl = transport.options[command].url;\n var commandPrefix = kendo.format('{0} ', httpVerb);\n if (isFunction(transportUrl)) {\n return commandPrefix + transportUrl(item);\n } else {\n return commandPrefix + transportUrl;\n }\n }\n function getOperationHeader(changeset, changeId) {\n var header = '';\n header += createDelimeter(changeset, false);\n header += NEWLINE + 'Content-Type: application/http';\n header += NEWLINE + 'Content-Transfer-Encoding: binary';\n header += NEWLINE + 'Content-ID: ' + changeId;\n return header;\n }\n function getOperationContent(item) {\n var content = '';\n content += NEWLINE + 'Content-Type: application/json;odata=minimalmetadata';\n content += NEWLINE + 'Prefer: return=representation';\n content += DOUBLELINE + kendo.stringify(item);\n return content;\n }\n function getOperations(collection, changeset, changeId, command, transport, skipContent) {\n var requestBody = '';\n for (var i = 0; i < collection.length; i++) {\n requestBody += getOperationHeader(changeset, changeId);\n requestBody += DOUBLELINE + createCommand(transport, collection[i], transport.options[command].type, command) + ' HTTP/1.1';\n if (!skipContent) {\n requestBody += getOperationContent(collection[i]);\n }\n requestBody += NEWLINE;\n changeId++;\n }\n return requestBody;\n }\n function processCollection(colection, boundary, changeset, changeId, transport, command, skipContent) {\n var requestBody = '';\n requestBody += getBoundary(boundary, changeset);\n requestBody += getOperations(colection, changeset, changeId, command, transport, skipContent);\n requestBody += createDelimeter(changeset, true);\n requestBody += NEWLINE;\n return requestBody;\n }\n function getBoundary(boundary, changeset) {\n var requestBody = '';\n requestBody += '--' + boundary + NEWLINE;\n requestBody += 'Content-Type: multipart/mixed; boundary=' + changeset + NEWLINE;\n return requestBody;\n }\n function createBatchRequest(transport, colections) {\n var options = {};\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 (serializeFunctions) {\n var idx, length = this.length, value, json = new Array(length);\n for (idx = 0; idx < length; idx++) {\n value = this[idx];\n if (value instanceof ObservableObject) {\n value = value.toJSON(serializeFunctions);\n }\n json[idx] = value;\n }\n return json;\n },\n parent: noop,\n wrapAll: function (source, target) {\n var that = this, idx, length, parent = function () {\n return that;\n };\n target = target || [];\n for (idx = 0, length = source.length; idx < length; idx++) {\n target[idx] = that.wrap(source[idx], parent);\n }\n return target;\n },\n wrap: function (object, parent) {\n var that = this, observable;\n if (object !== null && toString.call(object) === '[object Object]') {\n observable = object instanceof that.type || object instanceof Model;\n if (!observable) {\n object = object instanceof ObservableObject ? object.toJSON() : object;\n object = new that.type(object);\n }\n object.parent = parent;\n object.bind(CHANGE, function (e) {\n that.trigger(CHANGE, {\n field: e.field,\n node: e.node,\n index: e.index,\n items: e.items || [this],\n action: e.node ? e.action || 'itemloaded' : 'itemchange'\n });\n });\n }\n return object;\n },\n push: function () {\n var index = this.length, items = this.wrapAll(arguments), result;\n result = push.apply(this, items);\n 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, serializeFunctions) {\n return this.hasOwnProperty(field) && field !== '_handlers' && field !== '_events' && (serializeFunctions && serializeFunctions[field] || typeof this[field] !== FUNCTION) && field !== 'uid';\n },\n forEach: function (f) {\n for (var i in this) {\n if (this.shouldSerialize(i)) {\n f(this[i], i);\n }\n }\n },\n toJSON: function (serializeFunctions) {\n var result = {}, value, field;\n for (field in this) {\n if (this.shouldSerialize(field, serializeFunctions)) {\n value = this[field];\n if (value instanceof ObservableObject || value instanceof ObservableArray) {\n value = value.toJSON(serializeFunctions);\n }\n result[field] = value;\n }\n }\n return result;\n },\n get: function (field) {\n var that = this, result;\n that.trigger(GET, { field: field });\n if (field === 'this') {\n result = that;\n } else {\n result = kendo.getter(field, true)(that);\n }\n return result;\n },\n _set: function (field, value) {\n var that = this;\n var composite = field.indexOf('.') >= 0;\n if (composite) {\n var paths = field.split('.'), path = '';\n while (paths.length > 1) {\n path += paths.shift();\n var obj = kendo.getter(path, true)(that);\n if (obj instanceof ObservableObject) {\n obj.set(paths.join('.'), value);\n return composite;\n }\n path += '.';\n }\n }\n kendo.setter(field)(that, value);\n return composite;\n },\n set: function (field, value) {\n var that = this, isSetPrevented = false, composite = field.indexOf('.') >= 0, current = kendo.getter(field, true)(that);\n if (current !== value) {\n if (current instanceof Observable && this._handlers[field]) {\n if (this._handlers[field].get) {\n current.unbind(GET, this._handlers[field].get);\n }\n current.unbind(CHANGE, this._handlers[field].change);\n }\n isSetPrevented = that.trigger('set', {\n field: field,\n value: value\n });\n if (!isSetPrevented) {\n if (!composite) {\n value = that.wrap(value, field, function () {\n return that;\n });\n }\n if (!that._set(field, value) || field.indexOf('(') >= 0 || field.indexOf('[') >= 0) {\n that.trigger(CHANGE, { field: field });\n }\n }\n }\n return isSetPrevented;\n },\n parent: noop,\n wrap: function (object, field, parent) {\n var that = this;\n var get;\n var change;\n var type = toString.call(object);\n if (object != null && (type === '[object Object]' || type === '[object Array]')) {\n var isObservableArray = object instanceof ObservableArray;\n var isDataSource = object instanceof DataSource;\n if (type === '[object Object]' && !isDataSource && !isObservableArray) {\n if (!(object instanceof ObservableObject)) {\n object = new ObservableObject(object);\n }\n get = eventHandler(that, GET, field, true);\n object.bind(GET, get);\n change = eventHandler(that, CHANGE, field, true);\n object.bind(CHANGE, change);\n that._handlers[field] = {\n get: get,\n change: change\n };\n } else if (type === '[object Array]' || isObservableArray || isDataSource) {\n if (!isObservableArray && !isDataSource) {\n object = new ObservableArray(object);\n }\n change = eventHandler(that, CHANGE, field, false);\n object.bind(CHANGE, change);\n that._handlers[field] = { change: change };\n }\n object.parent = parent;\n }\n return object;\n }\n });\n function equal(x, y) {\n if (x === y) {\n return true;\n }\n var xtype = $.type(x), ytype = $.type(y), field;\n if (xtype !== ytype) {\n return false;\n }\n if (xtype === 'date') {\n return x.getTime() === y.getTime();\n }\n if (xtype !== 'object' && xtype !== 'array') {\n return false;\n }\n for (field in x) {\n if (!equal(x[field], y[field])) {\n return false;\n }\n }\n return true;\n }\n var parsers = {\n 'number': function (value) {\n if (typeof value === STRING && value.toLowerCase() === 'null') {\n return null;\n }\n return kendo.parseFloat(value);\n },\n 'date': function (value) {\n if (typeof value === STRING && value.toLowerCase() === 'null') {\n return null;\n }\n return kendo.parseDate(value);\n },\n 'boolean': function (value) {\n if (typeof value === STRING) {\n if (value.toLowerCase() === 'null') {\n return null;\n } else {\n return value.toLowerCase() === 'true';\n }\n }\n return value != null ? !!value : value;\n },\n 'string': function (value) {\n if (typeof value === STRING && value.toLowerCase() === 'null') {\n return null;\n }\n return value != null ? value + '' : value;\n },\n 'default': function (value) {\n return value;\n }\n };\n var defaultValues = {\n 'string': '',\n 'number': 0,\n 'date': new Date(),\n 'boolean': false,\n 'default': ''\n };\n function getFieldByName(obj, name) {\n var field, fieldName;\n for (fieldName in obj) {\n field = obj[fieldName];\n if (isPlainObject(field) && field.field && field.field === name) {\n return field;\n } else if (field === name) {\n return field;\n }\n }\n return null;\n }\n var Model = ObservableObject.extend({\n init: function (data) {\n var that = this;\n if (!data || $.isEmptyObject(data)) {\n data = $.extend({}, that.defaults, data);\n if (that._initializers) {\n for (var idx = 0; idx < that._initializers.length; idx++) {\n var name = that._initializers[idx];\n data[name] = that.defaults[name]();\n }\n }\n }\n ObservableObject.fn.init.call(that, data);\n that.dirty = false;\n that.dirtyFields = {};\n if (that.idField) {\n that.id = that.get(that.idField);\n if (that.id === undefined) {\n that.id = that._defaultId;\n }\n }\n },\n shouldSerialize: function (field) {\n return ObservableObject.fn.shouldSerialize.call(this, field) && field !== 'uid' && !(this.idField !== 'id' && field === 'id') && field !== 'dirty' && field !== 'dirtyFields' && field !== '_accessors';\n },\n _parse: function (field, value) {\n var that = this, fieldName = field, fields = that.fields || {}, parse;\n field = fields[field];\n if (!field) {\n field = getFieldByName(fields, fieldName);\n }\n if (field) {\n parse = field.parse;\n if (!parse && field.type) {\n parse = parsers[field.type.toLowerCase()];\n }\n }\n return parse ? parse(value) : value;\n },\n _notifyChange: function (e) {\n var action = e.action;\n if (action == 'add' || action == 'remove') {\n this.dirty = true;\n this.dirtyFields[e.field] = true;\n }\n },\n editable: function (field) {\n field = (this.fields || {})[field];\n return field ? field.editable !== false : true;\n },\n set: function (field, value) {\n var that = this;\n var dirty = that.dirty;\n if (that.editable(field)) {\n value = that._parse(field, value);\n if (!equal(value, that.get(field))) {\n that.dirty = true;\n that.dirtyFields[field] = true;\n if (ObservableObject.fn.set.call(that, field, value) && !dirty) {\n that.dirty = dirty;\n if (!that.dirty) {\n that.dirtyFields[field] = false;\n }\n }\n } else {\n that.trigger('equalSet', {\n field: field,\n value: value\n });\n }\n }\n },\n accept: function (data) {\n var that = this, parent = function () {\n return that;\n }, field;\n for (field in data) {\n var value = data[field];\n if (field.charAt(0) != '_') {\n value = that.wrap(data[field], field, parent);\n }\n that._set(field, value);\n }\n if (that.idField) {\n that.id = that.get(that.idField);\n }\n that.dirty = false;\n that.dirtyFields = {};\n },\n isNew: function () {\n return this.id === this._defaultId;\n }\n });\n Model.define = function (base, options) {\n if (options === undefined) {\n options = base;\n base = Model;\n }\n var model, proto = extend({ defaults: {} }, options), name, field, type, value, idx, length, fields = {}, originalName, id = proto.id, functionFields = [];\n if (id) {\n proto.idField = id;\n }\n if (proto.id) {\n delete proto.id;\n }\n if (id) {\n proto.defaults[id] = proto._defaultId = '';\n }\n if (toString.call(proto.fields) === '[object Array]') {\n for (idx = 0, length = proto.fields.length; idx < length; idx++) {\n field = proto.fields[idx];\n if (typeof field === STRING) {\n fields[field] = {};\n } else if (field.field) {\n fields[field.field] = field;\n }\n }\n proto.fields = fields;\n }\n for (name in proto.fields) {\n field = proto.fields[name];\n type = field.type || 'default';\n value = null;\n originalName = name;\n name = typeof field.field === STRING ? field.field : name;\n if (!field.nullable) {\n value = proto.defaults[originalName !== name ? originalName : name] = field.defaultValue !== undefined ? field.defaultValue : defaultValues[type.toLowerCase()];\n if (typeof value === 'function') {\n functionFields.push(name);\n }\n }\n if (options.id === name) {\n proto._defaultId = value;\n }\n proto.defaults[originalName !== name ? originalName : name] = value;\n field.parse = field.parse || parsers[type];\n }\n if (functionFields.length > 0) {\n proto._initializers = functionFields;\n }\n model = base.extend(proto);\n model.define = function (options) {\n return Model.define(model, options);\n };\n if (proto.fields) {\n model.fields = proto.fields;\n model.idField = proto.idField;\n }\n return model;\n };\n var Comparer = {\n selector: function (field) {\n return isFunction(field) ? field : getter(field);\n },\n compare: function (field) {\n var selector = this.selector(field);\n return function (a, b) {\n a = selector(a);\n b = selector(b);\n if (a == null && b == null) {\n return 0;\n }\n if (a == null) {\n return -1;\n }\n if (b == null) {\n return 1;\n }\n if (a.localeCompare) {\n return a.localeCompare(b);\n }\n return a > b ? 1 : a < b ? -1 : 0;\n };\n },\n create: function (sort) {\n var compare = sort.compare || this.compare(sort.field);\n if (sort.dir == 'desc') {\n return function (a, b) {\n return compare(b, a, true);\n };\n }\n return compare;\n },\n combine: function (comparers) {\n return function (a, b) {\n var result = comparers[0](a, b), idx, length;\n for (idx = 1, length = comparers.length; idx < length; idx++) {\n result = result || comparers[idx](a, b);\n }\n return result;\n };\n }\n };\n var StableComparer = extend({}, Comparer, {\n asc: function (field) {\n var selector = this.selector(field);\n return function (a, b) {\n var valueA = selector(a);\n var valueB = selector(b);\n if (valueA && valueA.getTime && valueB && valueB.getTime) {\n valueA = valueA.getTime();\n valueB = valueB.getTime();\n }\n if (valueA === valueB) {\n return a.__position - b.__position;\n }\n if (valueA == null) {\n return -1;\n }\n if (valueB == null) {\n return 1;\n }\n if (valueA.localeCompare) {\n return valueA.localeCompare(valueB);\n }\n return valueA > valueB ? 1 : -1;\n };\n },\n desc: function (field) {\n var selector = this.selector(field);\n return function (a, b) {\n var valueA = selector(a);\n var valueB = selector(b);\n if (valueA && valueA.getTime && valueB && valueB.getTime) {\n valueA = valueA.getTime();\n valueB = valueB.getTime();\n }\n if (valueA === valueB) {\n return a.__position - b.__position;\n }\n if (valueA == null) {\n return 1;\n }\n if (valueB == null) {\n return -1;\n }\n if (valueB.localeCompare) {\n return valueB.localeCompare(valueA);\n }\n return valueA < valueB ? 1 : -1;\n };\n },\n create: function (sort) {\n return this[sort.dir](sort.field);\n }\n });\n map = function (array, callback) {\n var idx, length = array.length, result = new Array(length);\n for (idx = 0; idx < length; idx++) {\n result[idx] = callback(array[idx], idx, array);\n }\n return result;\n };\n var operators = function () {\n function quote(str) {\n if (typeof str == 'string') {\n str = str.replace(/[\\r\\n]+/g, '');\n }\n return JSON.stringify(str);\n }\n function textOp(impl) {\n return function (a, b, ignore, accentFoldingFiltering) {\n b += '';\n if (ignore) {\n a = '(' + a + ' + \\'\\').toString()' + (accentFoldingFiltering ? '.toLocaleLowerCase(\\'' + accentFoldingFiltering + '\\')' : '.toLowerCase()');\n b = accentFoldingFiltering ? b.toLocaleLowerCase(accentFoldingFiltering) : b.toLowerCase();\n }\n return impl(a, quote(b), ignore);\n };\n }\n function operator(op, a, b, ignore, accentFoldingFiltering) {\n if (b != null) {\n if (typeof b === STRING) {\n var date = dateRegExp.exec(b);\n if (date) {\n b = new Date(+date[1]);\n } else if (ignore) {\n b = quote(accentFoldingFiltering ? b.toLocaleLowerCase(accentFoldingFiltering) : b.toLowerCase());\n a = '((' + a + ' || \\'\\')+\\'\\')' + (accentFoldingFiltering ? '.toLocaleLowerCase(\\'' + accentFoldingFiltering + '\\')' : '.toLowerCase()');\n } else {\n b = quote(b);\n }\n }\n if (b.getTime) {\n a = '(' + a + '&&' + a + '.getTime?' + a + '.getTime():' + a + ')';\n b = b.getTime();\n }\n }\n return a + ' ' + op + ' ' + b;\n }\n function getMatchRegexp(pattern) {\n for (var rx = '/^', esc = false, i = 0; i < pattern.length; ++i) {\n var ch = pattern.charAt(i);\n if (esc) {\n rx += '\\\\' + ch;\n } else if (ch == '~') {\n esc = true;\n continue;\n } else if (ch == '*') {\n rx += '.*';\n } else if (ch == '?') {\n rx += '.';\n } else if ('.+^$()[]{}|\\\\/\\n\\r\\u2028\\u2029\\xA0'.indexOf(ch) >= 0) {\n rx += '\\\\' + ch;\n } else {\n rx += ch;\n }\n esc = false;\n }\n return rx + '$/';\n }\n return {\n quote: function (value) {\n if (value && value.getTime) {\n return 'new Date(' + value.getTime() + ')';\n }\n return quote(value);\n },\n eq: function (a, b, ignore, accentFoldingFiltering) {\n return operator('==', a, b, ignore, accentFoldingFiltering);\n },\n neq: function (a, b, ignore, accentFoldingFiltering) {\n return operator('!=', a, b, ignore, accentFoldingFiltering);\n },\n gt: function (a, b, ignore) {\n return operator('>', a, b, ignore);\n },\n gte: function (a, b, ignore) {\n return operator('>=', a, b, ignore);\n },\n lt: function (a, b, ignore) {\n return operator('<', a, b, ignore);\n },\n lte: function (a, b, ignore) {\n return operator('<=', a, b, ignore);\n },\n startswith: textOp(function (a, b) {\n return a + '.lastIndexOf(' + b + ', 0) == 0';\n }),\n doesnotstartwith: textOp(function (a, b) {\n return a + '.lastIndexOf(' + b + ', 0) == -1';\n }),\n endswith: textOp(function (a, b) {\n var n = b ? b.length - 2 : 0;\n return a + '.indexOf(' + b + ', ' + a + '.length - ' + n + ') >= 0';\n }),\n doesnotendwith: textOp(function (a, b) {\n var n = b ? b.length - 2 : 0;\n return a + '.indexOf(' + b + ', ' + a + '.length - ' + n + ') < 0';\n }),\n contains: textOp(function (a, b) {\n return a + '.indexOf(' + b + ') >= 0';\n }),\n doesnotcontain: textOp(function (a, b) {\n return a + '.indexOf(' + b + ') == -1';\n }),\n matches: textOp(function (a, b) {\n b = b.substring(1, b.length - 1);\n return getMatchRegexp(b) + '.test(' + a + ')';\n }),\n doesnotmatch: textOp(function (a, b) {\n b = b.substring(1, b.length - 1);\n return '!' + getMatchRegexp(b) + '.test(' + a + ')';\n }),\n isempty: function (a) {\n return a + ' === \\'\\'';\n },\n isnotempty: function (a) {\n return a + ' !== \\'\\'';\n },\n isnull: function (a) {\n return '(' + a + ' == null)';\n },\n isnotnull: function (a) {\n return '(' + a + ' != null)';\n },\n isnullorempty: function (a) {\n return '(' + a + ' === null) || (' + a + ' === \\'\\')';\n },\n isnotnullorempty: function (a) {\n return '(' + a + ' !== null) && (' + a + ' !== \\'\\')';\n }\n };\n }();\n function Query(data) {\n this.data = data || [];\n }\n Query.filterExpr = function (expression) {\n var expressions = [], logic = {\n and: ' && ',\n or: ' || '\n }, idx, length, filter, expr, fieldFunctions = [], operatorFunctions = [], field, operator, filters = expression.filters;\n for (idx = 0, length = filters.length; idx < length; idx++) {\n filter = filters[idx];\n field = filter.field;\n operator = filter.operator;\n if (filter.filters) {\n expr = Query.filterExpr(filter);\n filter = expr.expression.replace(/__o\\[(\\d+)\\]/g, function (match, index) {\n index = +index;\n return '__o[' + (operatorFunctions.length + index) + ']';\n }).replace(/__f\\[(\\d+)\\]/g, function (match, index) {\n index = +index;\n return '__f[' + (fieldFunctions.length + index) + ']';\n });\n operatorFunctions.push.apply(operatorFunctions, expr.operators);\n fieldFunctions.push.apply(fieldFunctions, expr.fields);\n } else {\n if (typeof field === FUNCTION) {\n expr = '__f[' + fieldFunctions.length + '](d)';\n fieldFunctions.push(field);\n } else {\n expr = kendo.expr(field);\n }\n if (typeof operator === FUNCTION) {\n filter = '__o[' + operatorFunctions.length + '](' + expr + ', ' + operators.quote(filter.value) + ')';\n operatorFunctions.push(operator);\n } else {\n filter = operators[(operator || 'eq').toLowerCase()](expr, filter.value, filter.ignoreCase !== undefined ? filter.ignoreCase : true, expression.accentFoldingFiltering);\n }\n }\n expressions.push(filter);\n }\n return {\n expression: '(' + expressions.join(logic[expression.logic]) + ')',\n fields: fieldFunctions,\n operators: operatorFunctions\n };\n };\n function normalizeSort(field, dir) {\n if (field) {\n var descriptor = typeof field === STRING ? {\n field: field,\n dir: dir\n } : field, descriptors = isArray(descriptor) ? descriptor : descriptor !== undefined ? [descriptor] : [];\n return grep(descriptors, function (d) {\n return !!d.dir;\n });\n }\n }\n function sortFields(sorts, dir) {\n var sortObject = {};\n if (sorts) {\n var descriptor = typeof sorts === STRING ? {\n field: sorts,\n dir: dir\n } : sorts, descriptors = isArray(descriptor) ? descriptor : descriptor !== undefined ? [descriptor] : [];\n for (var i = 0; i < descriptors.length; i++) {\n sortObject[descriptors[i].field] = {\n dir: descriptors[i].dir,\n index: i + 1\n };\n }\n }\n return sortObject;\n }\n var operatorMap = {\n '==': 'eq',\n equals: 'eq',\n isequalto: 'eq',\n equalto: 'eq',\n equal: 'eq',\n '!=': 'neq',\n ne: 'neq',\n notequals: 'neq',\n isnotequalto: 'neq',\n notequalto: 'neq',\n notequal: 'neq',\n '<': 'lt',\n islessthan: 'lt',\n lessthan: 'lt',\n less: 'lt',\n '<=': 'lte',\n le: 'lte',\n islessthanorequalto: 'lte',\n lessthanequal: 'lte',\n '>': 'gt',\n isgreaterthan: 'gt',\n greaterthan: 'gt',\n greater: 'gt',\n '>=': 'gte',\n isgreaterthanorequalto: 'gte',\n greaterthanequal: 'gte',\n ge: 'gte',\n notsubstringof: 'doesnotcontain',\n isnull: 'isnull',\n isempty: 'isempty',\n isnotempty: 'isnotempty'\n };\n function normalizeOperator(expression) {\n var idx, length, filter, operator, filters = expression.filters;\n if (filters) {\n for (idx = 0, length = filters.length; idx < length; idx++) {\n filter = filters[idx];\n operator = filter.operator;\n if (operator && typeof operator === STRING) {\n filter.operator = operatorMap[operator.toLowerCase()] || operator;\n }\n normalizeOperator(filter);\n }\n }\n }\n function normalizeFilter(expression) {\n if (expression && !isEmptyObject(expression)) {\n if (isArray(expression) || !expression.filters) {\n expression = {\n logic: 'and',\n filters: isArray(expression) ? expression : [expression]\n };\n }\n normalizeOperator(expression);\n return expression;\n }\n }\n Query.normalizeFilter = normalizeFilter;\n function compareDescriptor(f1, f2) {\n if (f1.logic || f2.logic) {\n return false;\n }\n return f1.field === f2.field && f1.value === f2.value && f1.operator === f2.operator;\n }\n function normalizeDescriptor(filter) {\n filter = filter || {};\n if (isEmptyObject(filter)) {\n return {\n logic: 'and',\n filters: []\n };\n }\n return normalizeFilter(filter);\n }\n function fieldComparer(a, b) {\n if (b.logic || a.field > b.field) {\n return 1;\n } else if (a.field < b.field) {\n return -1;\n } else {\n return 0;\n }\n }\n function compareFilters(expr1, expr2) {\n expr1 = normalizeDescriptor(expr1);\n expr2 = normalizeDescriptor(expr2);\n if (expr1.logic !== expr2.logic) {\n return false;\n }\n var f1, f2;\n var filters1 = (expr1.filters || []).slice();\n var filters2 = (expr2.filters || []).slice();\n if (filters1.length !== filters2.length) {\n return false;\n }\n filters1 = filters1.sort(fieldComparer);\n filters2 = filters2.sort(fieldComparer);\n for (var idx = 0; idx < filters1.length; idx++) {\n f1 = filters1[idx];\n f2 = filters2[idx];\n if (f1.logic && f2.logic) {\n if (!compareFilters(f1, f2)) {\n return false;\n }\n } else if (!compareDescriptor(f1, f2)) {\n return false;\n }\n }\n return true;\n }\n Query.compareFilters = compareFilters;\n function normalizeAggregate(expressions) {\n return isArray(expressions) ? expressions : [expressions];\n }\n function normalizeGroup(field, dir, compare, skipItemSorting) {\n var descriptor = typeof field === STRING ? {\n field: field,\n dir: dir,\n compare: compare,\n skipItemSorting: skipItemSorting\n } : field, descriptors = isArray(descriptor) ? descriptor : descriptor !== undefined ? [descriptor] : [];\n return map(descriptors, function (d) {\n return {\n field: d.field,\n dir: d.dir || 'asc',\n aggregates: d.aggregates,\n compare: d.compare,\n skipItemSorting: d.skipItemSorting\n };\n });\n }\n function normalizeGroupWithoutCompare(field, dir, compare) {\n var descriptors = normalizeGroup(field, dir, compare);\n for (var i = 0; i < descriptors.length; i++) {\n delete descriptors[i].compare;\n }\n return descriptors;\n }\n function anyGroupDescriptorHasCompare(groupDescriptors) {\n var descriptors = isArray(groupDescriptors) ? groupDescriptors : [groupDescriptors];\n for (var i = 0; i < descriptors.length; i++) {\n if (descriptors[i] && isFunction(descriptors[i].compare)) {\n return true;\n }\n }\n return false;\n }\n Query.prototype = {\n toArray: function () {\n return this.data;\n },\n range: function (index, count) {\n return new Query(this.data.slice(index, index + count));\n },\n skip: function (count) {\n return new Query(this.data.slice(count));\n },\n take: function (count) {\n return new Query(this.data.slice(0, count));\n },\n select: function (selector) {\n return new Query(map(this.data, selector));\n },\n order: function (selector, dir, inPlace) {\n var sort = { dir: dir };\n if (selector) {\n if (selector.compare) {\n sort.compare = selector.compare;\n } else {\n sort.field = selector;\n }\n }\n if (inPlace) {\n return new Query(this.data.sort(Comparer.create(sort)));\n }\n return new Query(this.data.slice(0).sort(Comparer.create(sort)));\n },\n orderBy: function (selector, inPlace) {\n return this.order(selector, 'asc', inPlace);\n },\n orderByDescending: function (selector, inPlace) {\n return this.order(selector, 'desc', inPlace);\n },\n sort: function (field, dir, comparer, inPlace) {\n var idx, length, descriptors = normalizeSort(field, dir), comparers = [];\n comparer = comparer || Comparer;\n if (descriptors.length) {\n for (idx = 0, length = descriptors.length; idx < length; idx++) {\n comparers.push(comparer.create(descriptors[idx]));\n }\n return this.orderBy({ compare: comparer.combine(comparers) }, inPlace);\n }\n return this;\n },\n filter: function (expressions) {\n var idx, current, length, compiled, predicate, data = this.data, fields, operators, result = [], filter;\n expressions = normalizeFilter(expressions);\n if (!expressions || expressions.filters.length === 0) {\n return this;\n }\n compiled = Query.filterExpr(expressions);\n fields = compiled.fields;\n operators = compiled.operators;\n predicate = filter = new Function('d, __f, __o', 'return ' + compiled.expression);\n if (fields.length || operators.length) {\n filter = function (d) {\n return predicate(d, fields, operators);\n };\n }\n for (idx = 0, length = data.length; idx < length; idx++) {\n current = data[idx];\n if (filter(current)) {\n result.push(current);\n }\n }\n return new Query(result);\n },\n group: function (descriptors, allData) {\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) {\n if (!inPlace) {\n query = query.sort(sort);\n }\n if (group) {\n data = query.toArray();\n }\n }\n if (customGroupSort) {\n query = query.group(group, data);\n if (skip !== undefined && take !== undefined) {\n query = new Query(flatGroups(query.toArray())).range(skip, take);\n groupDescriptorsWithoutSort = map(groupDescriptorsWithoutCompare, function (groupDescriptor) {\n return extend({}, groupDescriptor, { skipItemSorting: true });\n });\n query = query.group(groupDescriptorsWithoutSort, data);\n }\n } else {\n if (skip !== undefined && take !== undefined) {\n query = query.range(skip, take);\n }\n if (group) {\n query = query.group(group, data);\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 that._sortFields = sortFields(options.sort);\n }\n if (options.filter) {\n that._filter = options.filter = that.options.accentFoldingFiltering && !$.isEmptyObject(options.filter) ? $.extend({}, normalizeFilter(options.filter), { accentFoldingFiltering: that.options.accentFoldingFiltering }) : normalizeFilter(options.filter);\n }\n if (options.group) {\n that._group = options.group = normalizeGroup(options.group);\n }\n if (options.aggregate) {\n that._aggregate = options.aggregate = normalizeAggregate(options.aggregate);\n }\n }\n return options;\n },\n query: function (options) {\n var result;\n var remote = this.options.serverSorting || this.options.serverPaging || this.options.serverFiltering || this.options.serverGrouping || this.options.serverAggregates;\n if (remote || (this._data === undefined || this._data.length === 0) && !this._destroyed.length) {\n if (this.options.endless) {\n var moreItemsCount = options.pageSize - this.pageSize();\n if (moreItemsCount > 0) {\n moreItemsCount = this.pageSize();\n options.page = options.pageSize / moreItemsCount;\n options.pageSize = moreItemsCount;\n } else {\n options.page = 1;\n this.options.endless = false;\n }\n }\n return this.read(this._mergeState(options));\n }\n var isPrevented = this.trigger(REQUESTSTART, { type: 'read' });\n if (!isPrevented) {\n this.trigger(PROGRESS);\n 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.trigger('sort');\n that._query({ sort: val });\n return;\n }\n return that._sort;\n },\n filter: function (val) {\n var that = this;\n if (val === undefined) {\n return that._filter;\n }\n that.trigger('reset');\n that._query({\n filter: val,\n page: 1\n });\n },\n group: function (val) {\n var that = this;\n 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 if ($.hasOwnProperty('uniqueSort')) {\n element.data('keys', $.uniqueSort(oldKeys)).height();\n } else {\n element.data('keys', $.unique(oldKeys)).height();\n }\n element.css(TRANSITION, options.exclusive + ' ' + options.duration + 'ms ' + options.ease).css(TRANSITION);\n element.css(css).css(TRANSFORM);\n if (transitions.event) {\n element.one(transitions.event, stopTransition);\n if (options.duration !== 0) {\n delay = 500;\n }\n }\n timeoutID = setTimeout(stopTransition, options.duration + delay);\n element.data(ABORT_ID, timeoutID);\n element.data(COMPLETE_CALLBACK, stopTransition);\n },\n stopQueue: function (element, clearQueue, gotoEnd) {\n var cssValues, taskKeys = element.data('keys'), retainPosition = !gotoEnd && taskKeys, completeCallback = element.data(COMPLETE_CALLBACK);\n if (retainPosition) {\n cssValues = kendo.getComputedStyles(element[0], taskKeys);\n }\n if (completeCallback) {\n completeCallback();\n }\n if (retainPosition) {\n element.css(cssValues);\n }\n return element.removeData('keys').stop(clearQueue);\n }\n });\n }\n function animationProperty(element, property) {\n if (transforms) {\n var transform = element.css(TRANSFORM);\n if (transform == NONE) {\n return property == 'scale' ? 1 : 0;\n }\n var match = transform.match(new RegExp(property + '\\\\s*\\\\(([\\\\d\\\\w\\\\.]+)')), computed = 0;\n if (match) {\n computed = parseInteger(match[1]);\n } else {\n match = transform.match(matrix3dRegExp) || [\n 0,\n 0,\n 0,\n 0,\n 0\n ];\n property = property.toLowerCase();\n if (translateXRegExp.test(property)) {\n computed = parseFloat(match[3] / match[2]);\n } else if (property == 'translatey') {\n computed = parseFloat(match[4] / match[2]);\n } else if (property == 'scale') {\n computed = parseFloat(match[2]);\n } else if (property == 'rotate') {\n computed = parseFloat(Math.atan2(match[2], match[1]));\n }\n }\n return computed;\n } else {\n return parseFloat(element.css(property));\n }\n }\n var EffectSet = kendo.Class.extend({\n init: function (element, options) {\n var that = this;\n that.element = element;\n that.effects = [];\n that.options = options;\n that.restore = [];\n },\n run: function (effects) {\n var that = this, effect, idx, jdx, length = effects.length, element = that.element, options = that.options, deferred = $.Deferred(), start = {}, end = {}, target, children, childrenLength;\n that.effects = effects;\n deferred.done($.proxy(that, 'complete'));\n element.data('animating', true);\n for (idx = 0; idx < length; idx++) {\n effect = effects[idx];\n effect.setReverse(options.reverse);\n effect.setOptions(options);\n that.addRestoreProperties(effect.restore);\n effect.prepare(start, end);\n children = effect.children();\n for (jdx = 0, childrenLength = children.length; jdx < childrenLength; jdx++) {\n children[jdx].duration(options.duration).run();\n }\n }\n for (var effectName in options.effects) {\n extend(end, options.effects[effectName].properties);\n }\n if (!element.is(':visible')) {\n extend(start, { display: element.data('olddisplay') || 'block' });\n }\n if (transforms && !options.reset) {\n target = element.data('targetTransform');\n if (target) {\n start = extend(target, start);\n }\n }\n start = normalizeCSS(element, start);\n if (transforms && !transitions) {\n start = strip3DTransforms(start);\n }\n element.css(start).css(TRANSFORM);\n for (idx = 0; idx < length; idx++) {\n effects[idx].setup();\n }\n if (options.init) {\n options.init();\n }\n element.data('targetTransform', end);\n fx.animate(element, end, extend({}, options, { complete: deferred.resolve }));\n return deferred.promise();\n },\n stop: function () {\n $(this.element).kendoStop(true, true);\n },\n addRestoreProperties: function (restore) {\n var element = this.element, value, i = 0, length = restore.length;\n for (; i < length; i++) {\n value = restore[i];\n this.restore.push(value);\n if (!element.data(value)) {\n element.data(value, element.css(value));\n }\n }\n },\n restoreCallback: function () {\n var element = this.element;\n for (var i = 0, length = this.restore.length; i < length; i++) {\n var value = this.restore[i];\n element.css(value, element.data(value));\n }\n },\n complete: function () {\n var that = this, idx = 0, element = that.element, options = that.options, effects = that.effects, length = effects.length;\n element.removeData('animating').dequeue();\n if (options.hide) {\n element.data('olddisplay', element.css('display')).hide();\n }\n this.restoreCallback();\n if (hasZoom && !transforms) {\n setTimeout($.proxy(this, 'restoreCallback'), 0);\n }\n for (; idx < length; idx++) {\n effects[idx].teardown();\n }\n if (options.completeCallback) {\n options.completeCallback(element);\n }\n }\n });\n fx.promise = function (element, options) {\n var effects = [], effectClass, effectSet = new EffectSet(element, options), parsedEffects = kendo.parseEffects(options.effects), effect;\n options.effects = parsedEffects;\n for (var effectName in parsedEffects) {\n effectClass = fx[capitalize(effectName)];\n if (effectClass) {\n effect = new effectClass(element, parsedEffects[effectName].direction);\n effects.push(effect);\n }\n }\n if (effects[0]) {\n effectSet.run(effects);\n } else {\n if (!element.is(':visible')) {\n element.css({ display: element.data('olddisplay') || 'block' }).css('display');\n }\n if (options.init) {\n options.init();\n }\n element.dequeue();\n effectSet.complete();\n }\n };\n extend(fx, {\n animate: function (elements, properties, options) {\n var useTransition = options.transition !== false;\n delete options.transition;\n if (transitions && 'transition' in fx && useTransition) {\n fx.transition(elements, properties, options);\n } else {\n if (transforms) {\n elements.animate(strip3DTransforms(properties), {\n queue: false,\n show: false,\n hide: false,\n duration: options.duration,\n complete: options.complete\n });\n } else {\n elements.each(function () {\n var element = $(this), multiple = {};\n each(transformProps, function (idx, value) {\n var params, currentValue = properties ? properties[value] + ' ' : null;\n if (currentValue) {\n var single = properties;\n if (value in scaleProperties && properties[value] !== undefined) {\n params = currentValue.match(cssParamsRegExp);\n if (transforms) {\n extend(single, { scale: +params[0] });\n }\n } else {\n if (value in translateProperties && properties[value] !== undefined) {\n var position = element.css(POSITION), isFixed = position == 'absolute' || position == 'fixed';\n if (!element.data(TRANSLATE)) {\n if (isFixed) {\n element.data(TRANSLATE, {\n top: parseCSS(element, 'top') || 0,\n left: parseCSS(element, 'left') || 0,\n bottom: parseCSS(element, 'bottom'),\n right: parseCSS(element, 'right')\n });\n } else {\n element.data(TRANSLATE, {\n top: parseCSS(element, 'marginTop') || 0,\n left: parseCSS(element, 'marginLeft') || 0\n });\n }\n }\n var originalPosition = element.data(TRANSLATE);\n params = currentValue.match(cssParamsRegExp);\n if (params) {\n var dX = value == TRANSLATE + 'y' ? +null : +params[1], dY = value == TRANSLATE + 'y' ? +params[1] : +params[2];\n if (isFixed) {\n if (!isNaN(originalPosition.right)) {\n if (!isNaN(dX)) {\n extend(single, { right: originalPosition.right - dX });\n }\n } else {\n if (!isNaN(dX)) {\n extend(single, { left: originalPosition.left + dX });\n }\n }\n if (!isNaN(originalPosition.bottom)) {\n if (!isNaN(dY)) {\n extend(single, { bottom: originalPosition.bottom - dY });\n }\n } else {\n if (!isNaN(dY)) {\n extend(single, { top: originalPosition.top + dY });\n }\n }\n } else {\n if (!isNaN(dX)) {\n extend(single, { marginLeft: originalPosition.left + dX });\n }\n if (!isNaN(dY)) {\n extend(single, { marginTop: originalPosition.top + dY });\n }\n }\n }\n }\n }\n if (!transforms && value != 'scale' && value in single) {\n delete single[value];\n }\n if (single) {\n extend(multiple, single);\n }\n }\n });\n if (browser.msie) {\n delete multiple.scale;\n }\n element.animate(multiple, {\n queue: false,\n show: false,\n hide: false,\n duration: options.duration,\n complete: options.complete\n });\n });\n }\n }\n }\n });\n fx.animatedPromise = fx.promise;\n var Effect = kendo.Class.extend({\n init: function (element, direction) {\n var that = this;\n that.element = element;\n that._direction = direction;\n that.options = {};\n that._additionalEffects = [];\n if (!that.restore) {\n that.restore = [];\n }\n },\n reverse: function () {\n this._reverse = true;\n return this.run();\n },\n play: function () {\n this._reverse = false;\n return this.run();\n },\n add: function (additional) {\n this._additionalEffects.push(additional);\n return this;\n },\n direction: function (value) {\n this._direction = value;\n return this;\n },\n duration: function (duration) {\n this._duration = duration;\n return this;\n },\n compositeRun: function () {\n var that = this, effectSet = new EffectSet(that.element, {\n reverse: that._reverse,\n duration: that._duration\n }), effects = that._additionalEffects.concat([that]);\n return effectSet.run(effects);\n },\n run: function () {\n if (this._additionalEffects && this._additionalEffects[0]) {\n return this.compositeRun();\n }\n var that = this, element = that.element, idx = 0, restore = that.restore, length = restore.length, value, deferred = $.Deferred(), start = {}, end = {}, target, children = that.children(), childrenLength = children.length;\n deferred.done($.proxy(that, '_complete'));\n element.data('animating', true);\n for (idx = 0; idx < length; idx++) {\n value = restore[idx];\n if (!element.data(value)) {\n element.data(value, element.css(value));\n }\n }\n for (idx = 0; idx < childrenLength; idx++) {\n children[idx].duration(that._duration).run();\n }\n that.prepare(start, end);\n if (!element.is(':visible')) {\n extend(start, { display: element.data('olddisplay') || 'block' });\n }\n if (transforms) {\n target = element.data('targetTransform');\n if (target) {\n start = extend(target, start);\n }\n }\n start = normalizeCSS(element, start);\n if (transforms && !transitions) {\n start = strip3DTransforms(start);\n }\n element.css(start).css(TRANSFORM);\n that.setup();\n element.data('targetTransform', end);\n fx.animate(element, end, {\n duration: that._duration,\n complete: deferred.resolve\n });\n return deferred.promise();\n },\n stop: function () {\n var idx = 0, children = this.children(), childrenLength = children.length;\n for (idx = 0; idx < childrenLength; idx++) {\n children[idx].stop();\n }\n $(this.element).kendoStop(true, true);\n return this;\n },\n restoreCallback: function () {\n var element = this.element;\n for (var i = 0, length = this.restore.length; i < length; i++) {\n var value = this.restore[i];\n element.css(value, element.data(value));\n }\n },\n _complete: function () {\n var that = this, element = that.element;\n element.removeData('animating').dequeue();\n that.restoreCallback();\n if (that.shouldHide()) {\n element.data('olddisplay', element.css('display')).hide();\n }\n if (hasZoom && !transforms) {\n setTimeout($.proxy(that, 'restoreCallback'), 0);\n }\n that.teardown();\n },\n setOptions: function (options) {\n extend(true, this.options, options);\n },\n children: function () {\n return [];\n },\n shouldHide: $.noop,\n setup: $.noop,\n prepare: $.noop,\n teardown: $.noop,\n directions: [],\n setReverse: function (reverse) {\n this._reverse = reverse;\n return this;\n }\n });\n function capitalize(word) {\n return word.charAt(0).toUpperCase() + word.substring(1);\n }\n function createEffect(name, definition) {\n var effectClass = Effect.extend(definition), directions = effectClass.prototype.directions;\n fx[capitalize(name)] = effectClass;\n fx.Element.prototype[name] = function (direction, opt1, opt2, opt3) {\n return new effectClass(this.element, direction, opt1, opt2, opt3);\n };\n each(directions, function (idx, theDirection) {\n fx.Element.prototype[name + capitalize(theDirection)] = function (opt1, opt2, opt3) {\n return new effectClass(this.element, theDirection, opt1, opt2, opt3);\n };\n });\n }\n var FOUR_DIRECTIONS = [\n 'left',\n 'right',\n 'up',\n 'down'\n ], IN_OUT = [\n 'in',\n 'out'\n ];\n createEffect('slideIn', {\n directions: FOUR_DIRECTIONS,\n divisor: function (value) {\n this.options.divisor = value;\n return this;\n },\n prepare: function (start, end) {\n var that = this, tmp, element = that.element, outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight, direction = directions[that._direction], offset = -direction.modifier * (direction.vertical ? outerHeight(element) : outerWidth(element)), startValue = offset / (that.options && that.options.divisor || 1) + PX, endValue = '0px';\n if (that._reverse) {\n tmp = start;\n start = end;\n end = tmp;\n }\n if (transforms) {\n start[direction.transition] = startValue;\n end[direction.transition] = endValue;\n } else {\n start[direction.property] = startValue;\n end[direction.property] = endValue;\n }\n }\n });\n createEffect('tile', {\n directions: FOUR_DIRECTIONS,\n init: function (element, direction, previous) {\n Effect.prototype.init.call(this, element, direction);\n this.options = { previous: previous };\n },\n previousDivisor: function (value) {\n this.options.previousDivisor = value;\n return this;\n },\n children: function () {\n var that = this, reverse = that._reverse, previous = that.options.previous, divisor = that.options.previousDivisor || 1, dir = that._direction;\n var children = [kendo.fx(that.element).slideIn(dir).setReverse(reverse)];\n if (previous) {\n children.push(kendo.fx(previous).slideIn(directions[dir].reverse).divisor(divisor).setReverse(!reverse));\n }\n return children;\n }\n });\n function createToggleEffect(name, property, defaultStart, defaultEnd) {\n createEffect(name, {\n directions: IN_OUT,\n startValue: function (value) {\n this._startValue = value;\n return this;\n },\n endValue: function (value) {\n this._endValue = value;\n return this;\n },\n shouldHide: function () {\n return this._shouldHide;\n },\n prepare: function (start, end) {\n var that = this, startValue, endValue, out = this._direction === 'out', startDataValue = that.element.data(property), startDataValueIsSet = !(isNaN(startDataValue) || startDataValue == defaultStart);\n if (startDataValueIsSet) {\n startValue = startDataValue;\n } else if (typeof this._startValue !== 'undefined') {\n startValue = this._startValue;\n } else {\n startValue = out ? defaultStart : defaultEnd;\n }\n if (typeof this._endValue !== 'undefined') {\n endValue = this._endValue;\n } else {\n endValue = out ? defaultEnd : defaultStart;\n }\n if (this._reverse) {\n start[property] = endValue;\n end[property] = startValue;\n } else {\n start[property] = startValue;\n end[property] = endValue;\n }\n that._shouldHide = end[property] === defaultEnd;\n }\n });\n }\n createToggleEffect('fade', 'opacity', 1, 0);\n createToggleEffect('zoom', 'scale', 1, 0.01);\n createEffect('slideMargin', {\n prepare: function (start, end) {\n var that = this, element = that.element, options = that.options, origin = element.data(ORIGIN), offset = options.offset, margin, reverse = that._reverse;\n if (!reverse && origin === null) {\n element.data(ORIGIN, parseFloat(element.css('margin-' + options.axis)));\n }\n margin = element.data(ORIGIN) || 0;\n end['margin-' + options.axis] = !reverse ? margin + offset : margin;\n }\n });\n createEffect('slideTo', {\n prepare: function (start, end) {\n var that = this, element = that.element, options = that.options, offset = options.offset.split(','), reverse = that._reverse;\n if (transforms) {\n end.translatex = !reverse ? offset[0] : 0;\n end.translatey = !reverse ? offset[1] : 0;\n } else {\n end.left = !reverse ? offset[0] : 0;\n end.top = !reverse ? offset[1] : 0;\n }\n element.css('left');\n }\n });\n createEffect('expand', {\n directions: [\n 'horizontal',\n 'vertical'\n ],\n restore: [OVERFLOW],\n prepare: function (start, end) {\n var that = this, element = that.element, options = that.options, reverse = that._reverse, property = that._direction === 'vertical' ? HEIGHT : WIDTH, setLength = element[0].style[property], oldLength = element.data(property), length = parseFloat(oldLength || setLength), realLength = round(element.css(property, AUTO)[property]());\n start.overflow = HIDDEN;\n length = options && options.reset ? realLength || length : length || realLength;\n end[property] = (reverse ? 0 : length) + PX;\n start[property] = (reverse ? length : 0) + PX;\n if (oldLength === undefined) {\n element.data(property, setLength);\n }\n },\n shouldHide: function () {\n return this._reverse;\n },\n teardown: function () {\n var that = this, element = that.element, property = that._direction === 'vertical' ? HEIGHT : WIDTH, length = element.data(property);\n if (length == AUTO || length === BLANK) {\n setTimeout(function () {\n element.css(property, AUTO).css(property);\n }, 0);\n }\n }\n });\n var TRANSFER_START_STATE = {\n position: 'absolute',\n marginLeft: 0,\n marginTop: 0,\n scale: 1\n };\n createEffect('transfer', {\n init: function (element, target) {\n this.element = element;\n this.options = { target: target };\n this.restore = [];\n },\n setup: function () {\n this.element.appendTo(document.body);\n },\n prepare: function (start, end) {\n var that = this, element = that.element, outerBox = fx.box(element), innerBox = fx.box(that.options.target), currentScale = animationProperty(element, 'scale'), scale = fx.fillScale(innerBox, outerBox), transformOrigin = fx.transformOrigin(innerBox, outerBox);\n extend(start, TRANSFER_START_STATE);\n end.scale = 1;\n element.css(TRANSFORM, 'scale(1)').css(TRANSFORM);\n element.css(TRANSFORM, 'scale(' + currentScale + ')');\n start.top = outerBox.top;\n start.left = outerBox.left;\n start.transformOrigin = transformOrigin.x + PX + ' ' + transformOrigin.y + PX;\n if (that._reverse) {\n start.scale = scale;\n } else {\n end.scale = scale;\n }\n }\n });\n var CLIPS = {\n top: 'rect(auto auto $size auto)',\n bottom: 'rect($size auto auto auto)',\n left: 'rect(auto $size auto auto)',\n right: 'rect(auto auto auto $size)'\n };\n var ROTATIONS = {\n top: {\n start: 'rotatex(0deg)',\n end: 'rotatex(180deg)'\n },\n bottom: {\n start: 'rotatex(-180deg)',\n end: 'rotatex(0deg)'\n },\n left: {\n start: 'rotatey(0deg)',\n end: 'rotatey(-180deg)'\n },\n right: {\n start: 'rotatey(180deg)',\n end: 'rotatey(0deg)'\n }\n };\n function clipInHalf(container, direction) {\n var vertical = kendo.directions[direction].vertical, size = container[vertical ? HEIGHT : WIDTH]() / 2 + 'px';\n return CLIPS[direction].replace('$size', size);\n }\n createEffect('turningPage', {\n directions: FOUR_DIRECTIONS,\n init: function (element, direction, container) {\n Effect.prototype.init.call(this, element, direction);\n this._container = container;\n },\n prepare: function (start, end) {\n var that = this, reverse = that._reverse, direction = reverse ? directions[that._direction].reverse : that._direction, rotation = ROTATIONS[direction];\n start.zIndex = 1;\n if (that._clipInHalf) {\n start.clip = clipInHalf(that._container, kendo.directions[direction].reverse);\n }\n start[BACKFACE] = HIDDEN;\n end[TRANSFORM] = TRANSFORM_PERSPECTIVE + (reverse ? rotation.start : rotation.end);\n start[TRANSFORM] = TRANSFORM_PERSPECTIVE + (reverse ? rotation.end : rotation.start);\n },\n setup: function () {\n this._container.append(this.element);\n },\n face: function (value) {\n this._face = value;\n return this;\n },\n shouldHide: function () {\n var that = this, reverse = that._reverse, face = that._face;\n return reverse && !face || !reverse && face;\n },\n clipInHalf: function (value) {\n this._clipInHalf = value;\n return this;\n },\n temporary: function () {\n this.element.addClass('temp-page');\n return this;\n }\n });\n createEffect('staticPage', {\n directions: FOUR_DIRECTIONS,\n init: function (element, direction, container) {\n Effect.prototype.init.call(this, element, direction);\n this._container = container;\n },\n restore: ['clip'],\n prepare: function (start, end) {\n var that = this, direction = that._reverse ? directions[that._direction].reverse : that._direction;\n start.clip = clipInHalf(that._container, direction);\n start.opacity = 0.999;\n end.opacity = 1;\n },\n shouldHide: function () {\n var that = this, reverse = that._reverse, face = that._face;\n return reverse && !face || !reverse && face;\n },\n face: function (value) {\n this._face = value;\n return this;\n }\n });\n createEffect('pageturn', {\n directions: [\n 'horizontal',\n 'vertical'\n ],\n init: function (element, direction, face, back) {\n Effect.prototype.init.call(this, element, direction);\n this.options = {};\n this.options.face = face;\n this.options.back = back;\n },\n children: function () {\n var that = this, options = that.options, direction = that._direction === 'horizontal' ? 'left' : 'top', reverseDirection = kendo.directions[direction].reverse, reverse = that._reverse, temp, faceClone = options.face.clone(true).removeAttr('id'), backClone = options.back.clone(true).removeAttr('id'), element = that.element;\n if (reverse) {\n temp = direction;\n direction = reverseDirection;\n reverseDirection = temp;\n }\n return [\n kendo.fx(options.face).staticPage(direction, element).face(true).setReverse(reverse),\n kendo.fx(options.back).staticPage(reverseDirection, element).setReverse(reverse),\n kendo.fx(faceClone).turningPage(direction, element).face(true).clipInHalf(true).temporary().setReverse(reverse),\n kendo.fx(backClone).turningPage(reverseDirection, element).clipInHalf(true).temporary().setReverse(reverse)\n ];\n },\n prepare: function (start, end) {\n start[PERSPECTIVE] = DEFAULT_PERSPECTIVE;\n start.transformStyle = 'preserve-3d';\n start.opacity = 0.999;\n end.opacity = 1;\n },\n teardown: function () {\n this.element.find('.temp-page').remove();\n }\n });\n createEffect('flip', {\n directions: [\n 'horizontal',\n 'vertical'\n ],\n init: function (element, direction, face, back) {\n Effect.prototype.init.call(this, element, direction);\n this.options = {};\n this.options.face = face;\n this.options.back = back;\n },\n children: function () {\n var that = this, options = that.options, direction = that._direction === 'horizontal' ? 'left' : 'top', reverseDirection = kendo.directions[direction].reverse, reverse = that._reverse, temp, element = that.element;\n if (reverse) {\n temp = direction;\n direction = reverseDirection;\n reverseDirection = temp;\n }\n return [\n kendo.fx(options.face).turningPage(direction, element).face(true).setReverse(reverse),\n kendo.fx(options.back).turningPage(reverseDirection, element).setReverse(reverse)\n ];\n },\n prepare: function (start) {\n start[PERSPECTIVE] = DEFAULT_PERSPECTIVE;\n start.transformStyle = 'preserve-3d';\n }\n });\n var RESTORE_OVERFLOW = !support.mobileOS.android;\n var IGNORE_TRANSITION_EVENT_SELECTOR = '.km-touch-scrollbar, .km-actionsheet-wrapper';\n createEffect('replace', {\n _before: $.noop,\n _after: $.noop,\n init: function (element, previous, transitionClass) {\n Effect.prototype.init.call(this, element);\n this._previous = $(previous);\n this._transitionClass = transitionClass;\n },\n duration: function () {\n throw new Error('The replace effect does not support duration setting; the effect duration may be customized through the transition class rule');\n },\n beforeTransition: function (callback) {\n this._before = callback;\n return this;\n },\n afterTransition: function (callback) {\n this._after = callback;\n return this;\n },\n _both: function () {\n return $().add(this._element).add(this._previous);\n },\n _containerClass: function () {\n var direction = this._direction, containerClass = 'k-fx k-fx-start k-fx-' + this._transitionClass;\n if (direction) {\n containerClass += ' k-fx-' + direction;\n }\n if (this._reverse) {\n containerClass += ' k-fx-reverse';\n }\n return containerClass;\n },\n complete: function (e) {\n if (!this.deferred || e && $(e.target).is(IGNORE_TRANSITION_EVENT_SELECTOR)) {\n return;\n }\n var container = this.container;\n container.removeClass('k-fx-end').removeClass(this._containerClass()).off(transitions.event, this.completeProxy);\n this._previous.hide().removeClass('k-fx-current');\n this.element.removeClass('k-fx-next');\n if (RESTORE_OVERFLOW) {\n container.css(OVERFLOW, '');\n }\n if (!this.isAbsolute) {\n this._both().css(POSITION, '');\n }\n this.deferred.resolve();\n delete this.deferred;\n },\n run: function () {\n if (this._additionalEffects && this._additionalEffects[0]) {\n return this.compositeRun();\n }\n var that = this, element = that.element, previous = that._previous, container = element.parents().filter(previous.parents()).first(), both = that._both(), deferred = $.Deferred(), originalPosition = element.css(POSITION), originalOverflow;\n if (!container.length) {\n container = element.parent();\n }\n this.container = container;\n this.deferred = deferred;\n this.isAbsolute = originalPosition == 'absolute';\n if (!this.isAbsolute) {\n both.css(POSITION, 'absolute');\n }\n if (RESTORE_OVERFLOW) {\n originalOverflow = container.css(OVERFLOW);\n container.css(OVERFLOW, 'hidden');\n }\n if (!transitions) {\n this.complete();\n } else {\n element.addClass('k-fx-hidden');\n container.addClass(this._containerClass());\n this.completeProxy = $.proxy(this, 'complete');\n container.on(transitions.event, this.completeProxy);\n kendo.animationFrame(function () {\n element.removeClass('k-fx-hidden').addClass('k-fx-next');\n previous.css('display', '').addClass('k-fx-current');\n that._before(previous, element);\n kendo.animationFrame(function () {\n container.removeClass('k-fx-start').addClass('k-fx-end');\n that._after(previous, element);\n });\n });\n }\n return deferred.promise();\n },\n stop: function () {\n this.complete();\n }\n });\n var Animation = kendo.Class.extend({\n init: function () {\n var that = this;\n that._tickProxy = proxy(that._tick, that);\n that._started = false;\n },\n tick: $.noop,\n done: $.noop,\n onEnd: $.noop,\n onCancel: $.noop,\n start: function () {\n if (!this.enabled()) {\n return;\n }\n if (!this.done()) {\n this._started = true;\n kendo.animationFrame(this._tickProxy);\n } else {\n this.onEnd();\n }\n },\n enabled: function () {\n return true;\n },\n cancel: function () {\n this._started = false;\n this.onCancel();\n },\n _tick: function () {\n var that = this;\n if (!that._started) {\n return;\n }\n that.tick();\n if (!that.done()) {\n kendo.animationFrame(that._tickProxy);\n } else {\n that._started = false;\n that.onEnd();\n }\n }\n });\n var Transition = Animation.extend({\n init: function (options) {\n var that = this;\n extend(that, options);\n Animation.fn.init.call(that);\n },\n done: function () {\n return this.timePassed() >= this.duration;\n },\n timePassed: function () {\n return Math.min(this.duration, new Date() - this.startDate);\n },\n moveTo: function (options) {\n var that = this, movable = that.movable;\n that.initial = movable[that.axis];\n that.delta = options.location - that.initial;\n that.duration = typeof options.duration == 'number' ? options.duration : 300;\n that.tick = that._easeProxy(options.ease);\n that.startDate = new Date();\n that.start();\n },\n _easeProxy: function (ease) {\n var that = this;\n return function () {\n that.movable.moveAxis(that.axis, ease(that.timePassed(), that.initial, that.delta, that.duration));\n };\n }\n });\n extend(Transition, {\n easeOutExpo: function (t, b, c, d) {\n return t == d ? b + c : c * (-Math.pow(2, -10 * t / d) + 1) + b;\n },\n easeOutBack: function (t, b, c, d, s) {\n s = 1.70158;\n return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;\n }\n });\n fx.Animation = Animation;\n fx.Transition = Transition;\n fx.createEffect = createEffect;\n fx.box = function (element) {\n element = $(element);\n var result = element.offset();\n result.width = kendo._outerWidth(element);\n result.height = kendo._outerHeight(element);\n return result;\n };\n fx.transformOrigin = function (inner, outer) {\n var x = (inner.left - outer.left) * outer.width / (outer.width - inner.width), y = (inner.top - outer.top) * outer.height / (outer.height - inner.height);\n return {\n x: isNaN(x) ? 0 : x,\n y: isNaN(y) ? 0 : y\n };\n };\n fx.fillScale = function (inner, outer) {\n return Math.min(inner.width / outer.width, inner.height / outer.height);\n };\n fx.fitScale = function (inner, outer) {\n return Math.max(inner.width / outer.width, inner.height / outer.height);\n };\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.view', [\n 'kendo.core',\n 'kendo.binder',\n 'kendo.fx'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'view',\n name: 'View',\n category: 'framework',\n description: 'The View class instantiates and handles the events of a certain screen from the application.',\n depends: [\n 'core',\n 'binder',\n 'fx'\n ],\n hidden: false\n };\n (function ($, undefined) {\n var kendo = window.kendo, attr = kendo.attr, ui = kendo.ui, attrValue = kendo.attrValue, directiveSelector = kendo.directiveSelector, Observable = kendo.Observable, Widget = kendo.ui.Widget, roleSelector = kendo.roleSelector, SCRIPT = 'SCRIPT', INIT = 'init', TRANSITION_START = 'transitionStart', TRANSITION_END = 'transitionEnd', SHOW = 'show', HIDE = 'hide', ATTACH = 'attach', DETACH = 'detach', sizzleErrorRegExp = /unrecognized expression/;\n var bodyRegExp = /]*>(([\\u000a\\u000d\\u2028\\u2029]|.)*)<\\/body>/i;\n var LOAD_START = 'loadStart';\n var LOAD_COMPLETE = 'loadComplete';\n var SHOW_START = 'showStart';\n var SAME_VIEW_REQUESTED = 'sameViewRequested';\n var VIEW_SHOW = 'viewShow';\n var VIEW_TYPE_DETERMINED = 'viewTypeDetermined';\n var AFTER = 'after';\n var classNames = {\n content: 'k-content',\n view: 'k-view',\n stretchedView: 'k-stretched-view',\n widget: 'k-widget',\n header: 'k-header',\n footer: 'k-footer'\n };\n var View = kendo.ui.Widget.extend({\n init: function (content, options) {\n var that = this;\n options = options || {};\n that.id = kendo.guid();\n Observable.fn.init.call(that);\n this.options = $.extend({}, this.options, options);\n that.content = content;\n if (that.options.renderOnInit) {\n Widget.fn.init.call(that, that._createElement(), options);\n }\n if (that.options.wrapInSections) {\n that._renderSections();\n }\n that.tagName = options.tagName || 'div';\n that.model = options.model;\n that._wrap = options.wrap !== false;\n this._evalTemplate = options.evalTemplate || false;\n that._fragments = {};\n that.bind([\n INIT,\n SHOW,\n HIDE,\n TRANSITION_START,\n TRANSITION_END\n ], options);\n },\n options: {\n name: 'View',\n renderOnInit: false,\n wrapInSections: false,\n detachOnHide: true,\n detachOnDestroy: true\n },\n render: function (container) {\n var that = this, notInitialized = !that.element;\n if (notInitialized) {\n that.element = that._createElement();\n }\n if (container) {\n $(container).append(that.element);\n }\n if (notInitialized) {\n kendo.bind(that.element, that.model);\n that.trigger(INIT);\n }\n if (container) {\n that._eachFragment(ATTACH);\n that.trigger(SHOW);\n }\n return that.element;\n },\n clone: function () {\n return new ViewClone(this);\n },\n triggerBeforeShow: function () {\n return true;\n },\n triggerBeforeHide: function () {\n return true;\n },\n showStart: function () {\n var that = this;\n var element = that.render();\n if (element) {\n element.css('display', '');\n }\n this.trigger(SHOW_START, { view: this });\n },\n showEnd: function () {\n },\n hideEnd: function () {\n this.hide();\n },\n beforeTransition: function (type) {\n this.trigger(TRANSITION_START, { type: type });\n },\n afterTransition: function (type) {\n this.trigger(TRANSITION_END, { type: type });\n },\n hide: function () {\n if (this.options.detachOnHide) {\n this._eachFragment(DETACH);\n $(this.element).detach();\n }\n this.trigger(HIDE);\n },\n destroy: function () {\n var that = this;\n var element = that.element;\n if (element) {\n Widget.fn.destroy.call(that);\n kendo.unbind(element);\n kendo.destroy(element);\n if (that.options.detachOnDestroy) {\n element.remove();\n }\n }\n },\n purge: function () {\n var that = this;\n that.destroy();\n $(that.element).add(that.content).add(that.wrapper).off().remove();\n },\n fragments: function (fragments) {\n $.extend(this._fragments, fragments);\n },\n _eachFragment: function (methodName) {\n for (var placeholder in this._fragments) {\n this._fragments[placeholder][methodName](this, placeholder);\n }\n },\n _createElement: function () {\n var that = this, wrapper = '<' + that.tagName + ' />', element, content;\n try {\n content = $(document.getElementById(that.content) || that.content);\n if (content[0].tagName === SCRIPT) {\n content = content.html();\n }\n } catch (e) {\n if (sizzleErrorRegExp.test(e.message)) {\n content = that.content;\n }\n }\n if (typeof content === 'string') {\n content = content.replace(/^\\s+|\\s+$/g, '');\n if (that._evalTemplate) {\n content = kendo.template(content)(that.model || {});\n }\n element = $(wrapper).append(content);\n if (!that._wrap) {\n element = element.contents();\n }\n } else {\n element = content;\n if (that._evalTemplate) {\n var result = $(kendo.template($('
    ').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 || customMessage || input.attr('title') || '', fieldName, input.attr(ruleKey) || input.attr(kendo.attr(ruleKey)));\n },\n _checkValidity: function (input) {\n var rules = this.options.rules, rule;\n for (rule in rules) {\n if (!rules[rule].call(this, input)) {\n return {\n valid: false,\n key: rule\n };\n }\n }\n return { valid: true };\n },\n errors: function () {\n var results = [], errors = this._errors, error;\n for (error in errors) {\n results.push(errors[error]);\n }\n return results;\n }\n });\n kendo.ui.plugin(Validator);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.draganddrop', [\n 'kendo.core',\n 'kendo.userevents'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'draganddrop',\n name: 'Drag & drop',\n category: 'framework',\n description: 'Drag & drop functionality for any DOM element.',\n depends: [\n 'core',\n 'userevents'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, support = kendo.support, document = window.document, $window = $(window), Class = kendo.Class, Widget = kendo.ui.Widget, Observable = kendo.Observable, UserEvents = kendo.UserEvents, proxy = $.proxy, extend = $.extend, getOffset = kendo.getOffset, draggables = {}, dropTargets = {}, dropAreas = {}, lastDropTarget, elementUnderCursor = kendo.elementUnderCursor, KEYUP = 'keyup', CHANGE = 'change', DRAGSTART = 'dragstart', HOLD = 'hold', DRAG = 'drag', DRAGEND = 'dragend', DRAGCANCEL = 'dragcancel', HINTDESTROYED = 'hintDestroyed', DRAGENTER = 'dragenter', DRAGLEAVE = 'dragleave', DROP = 'drop';\n function contains(parent, child) {\n try {\n return $.contains(parent, child) || parent == child;\n } catch (e) {\n return false;\n }\n }\n function numericCssPropery(element, property) {\n return parseInt(element.css(property), 10) || 0;\n }\n function within(value, range) {\n return Math.min(Math.max(value, range.min), range.max);\n }\n function containerBoundaries(container, element) {\n var offset = getOffset(container), outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight, minX = offset.left + numericCssPropery(container, 'borderLeftWidth') + numericCssPropery(container, 'paddingLeft'), minY = offset.top + numericCssPropery(container, 'borderTopWidth') + numericCssPropery(container, 'paddingTop'), maxX = minX + container.width() - outerWidth(element, true), maxY = minY + container.height() - outerHeight(element, true);\n return {\n x: {\n min: minX,\n max: maxX\n },\n y: {\n min: minY,\n max: maxY\n }\n };\n }\n function checkTarget(target, targets, areas) {\n var theTarget, theFilter, i = 0, targetLen = targets && targets.length, areaLen = areas && areas.length;\n while (target && target.parentNode) {\n for (i = 0; i < targetLen; i++) {\n theTarget = targets[i];\n if (theTarget.element[0] === target) {\n return {\n target: theTarget,\n targetElement: target\n };\n }\n }\n for (i = 0; i < areaLen; i++) {\n theFilter = areas[i];\n if ($.contains(theFilter.element[0], target) && support.matchesSelector.call(target, theFilter.options.filter)) {\n return {\n target: theFilter,\n targetElement: target\n };\n }\n }\n target = target.parentNode;\n }\n return undefined;\n }\n var TapCapture = Observable.extend({\n init: function (element, options) {\n var that = this, domElement = element[0];\n that.capture = false;\n if (domElement.addEventListener) {\n $.each(kendo.eventMap.down.split(' '), function () {\n domElement.addEventListener(this, proxy(that._press, that), true);\n });\n $.each(kendo.eventMap.up.split(' '), function () {\n domElement.addEventListener(this, proxy(that._release, that), true);\n });\n } else {\n $.each(kendo.eventMap.down.split(' '), function () {\n domElement.attachEvent(this, proxy(that._press, that));\n });\n $.each(kendo.eventMap.up.split(' '), function () {\n domElement.attachEvent(this, proxy(that._release, that));\n });\n }\n Observable.fn.init.call(that);\n that.bind([\n 'press',\n 'release'\n ], options || {});\n },\n captureNext: function () {\n this.capture = true;\n },\n cancelCapture: function () {\n this.capture = false;\n },\n _press: function (e) {\n var that = this;\n that.trigger('press');\n if (that.capture) {\n e.preventDefault();\n }\n },\n _release: function (e) {\n var that = this;\n that.trigger('release');\n if (that.capture) {\n e.preventDefault();\n that.cancelCapture();\n }\n }\n });\n var PaneDimension = Observable.extend({\n init: function (options) {\n var that = this;\n Observable.fn.init.call(that);\n that.forcedEnabled = false;\n $.extend(that, options);\n that.scale = 1;\n if (that.horizontal) {\n that.measure = 'offsetWidth';\n that.scrollSize = 'scrollWidth';\n that.axis = 'x';\n } else {\n that.measure = 'offsetHeight';\n that.scrollSize = 'scrollHeight';\n that.axis = 'y';\n }\n },\n makeVirtual: function () {\n $.extend(this, {\n virtual: true,\n forcedEnabled: true,\n _virtualMin: 0,\n _virtualMax: 0\n });\n },\n virtualSize: function (min, max) {\n if (this._virtualMin !== min || this._virtualMax !== max) {\n this._virtualMin = min;\n this._virtualMax = max;\n this.update();\n }\n },\n outOfBounds: function (offset) {\n return offset > this.max || offset < this.min;\n },\n forceEnabled: function () {\n this.forcedEnabled = true;\n },\n getSize: function () {\n return this.container[0][this.measure];\n },\n getTotal: function () {\n return this.element[0][this.scrollSize];\n },\n rescale: function (scale) {\n this.scale = scale;\n },\n update: function (silent) {\n var that = this, total = that.virtual ? that._virtualMax : that.getTotal(), scaledTotal = total * that.scale, size = that.getSize();\n if (total === 0 && !that.forcedEnabled) {\n return;\n }\n that.max = that.virtual ? -that._virtualMin : 0;\n that.size = size;\n that.total = scaledTotal;\n that.min = Math.min(that.max, size - scaledTotal);\n that.minScale = size / total;\n that.centerOffset = (scaledTotal - size) / 2;\n that.enabled = that.forcedEnabled || scaledTotal > size;\n if (!silent) {\n that.trigger(CHANGE, that);\n }\n }\n });\n var PaneDimensions = Observable.extend({\n init: function (options) {\n var that = this;\n Observable.fn.init.call(that);\n that.x = new PaneDimension(extend({ horizontal: true }, options));\n that.y = new PaneDimension(extend({ horizontal: false }, options));\n that.container = options.container;\n that.forcedMinScale = options.minScale;\n that.maxScale = options.maxScale || 100;\n that.bind(CHANGE, options);\n },\n rescale: function (newScale) {\n this.x.rescale(newScale);\n this.y.rescale(newScale);\n this.refresh();\n },\n centerCoordinates: function () {\n return {\n x: Math.min(0, -this.x.centerOffset),\n y: Math.min(0, -this.y.centerOffset)\n };\n },\n refresh: function () {\n var that = this;\n that.x.update();\n that.y.update();\n that.enabled = that.x.enabled || that.y.enabled;\n that.minScale = that.forcedMinScale || Math.min(that.x.minScale, that.y.minScale);\n that.fitScale = Math.max(that.x.minScale, that.y.minScale);\n that.trigger(CHANGE);\n }\n });\n var PaneAxis = Observable.extend({\n init: function (options) {\n var that = this;\n extend(that, options);\n Observable.fn.init.call(that);\n },\n outOfBounds: function () {\n return this.dimension.outOfBounds(this.movable[this.axis]);\n },\n dragMove: function (delta) {\n var that = this, dimension = that.dimension, axis = that.axis, movable = that.movable, position = movable[axis] + delta;\n if (!dimension.enabled) {\n return;\n }\n if (position < dimension.min && delta < 0 || position > dimension.max && delta > 0) {\n delta *= that.resistance;\n }\n movable.translateAxis(axis, delta);\n that.trigger(CHANGE, that);\n }\n });\n var Pane = Class.extend({\n init: function (options) {\n var that = this, x, y, resistance, movable;\n extend(that, { elastic: true }, options);\n resistance = that.elastic ? 0.5 : 0;\n movable = that.movable;\n that.x = x = new PaneAxis({\n axis: 'x',\n dimension: that.dimensions.x,\n resistance: resistance,\n movable: movable\n });\n that.y = y = new PaneAxis({\n axis: 'y',\n dimension: that.dimensions.y,\n resistance: resistance,\n movable: movable\n });\n that.userEvents.bind([\n 'press',\n 'move',\n 'end',\n 'gesturestart',\n 'gesturechange'\n ], {\n gesturestart: function (e) {\n that.gesture = e;\n that.offset = that.dimensions.container.offset();\n },\n press: function (e) {\n if ($(e.event.target).closest('a').is('[data-navigate-on-press=true]')) {\n e.sender.cancel();\n }\n },\n gesturechange: function (e) {\n var previousGesture = that.gesture, previousCenter = previousGesture.center, center = e.center, scaleDelta = e.distance / previousGesture.distance, minScale = that.dimensions.minScale, maxScale = that.dimensions.maxScale, coordinates;\n if (movable.scale <= minScale && scaleDelta < 1) {\n scaleDelta += (1 - scaleDelta) * 0.8;\n }\n if (movable.scale * scaleDelta >= maxScale) {\n scaleDelta = maxScale / movable.scale;\n }\n var offsetX = movable.x + that.offset.left, offsetY = movable.y + that.offset.top;\n coordinates = {\n x: (offsetX - previousCenter.x) * scaleDelta + center.x - offsetX,\n y: (offsetY - previousCenter.y) * scaleDelta + center.y - offsetY\n };\n movable.scaleWith(scaleDelta);\n x.dragMove(coordinates.x);\n y.dragMove(coordinates.y);\n that.dimensions.rescale(movable.scale);\n that.gesture = e;\n e.preventDefault();\n },\n move: function (e) {\n if (e.event.target.tagName.match(/textarea|input/i)) {\n return;\n }\n if (x.dimension.enabled || y.dimension.enabled) {\n x.dragMove(e.x.delta);\n y.dragMove(e.y.delta);\n e.preventDefault();\n } else {\n e.touch.skip();\n }\n },\n end: function (e) {\n e.preventDefault();\n }\n });\n }\n });\n var TRANSFORM_STYLE = support.transitions.prefix + 'Transform', translate;\n if (support.hasHW3D) {\n translate = function (x, y, scale) {\n return 'translate3d(' + x + 'px,' + y + 'px,0) scale(' + scale + ')';\n };\n } else {\n translate = function (x, y, scale) {\n return 'translate(' + x + 'px,' + y + 'px) scale(' + scale + ')';\n };\n }\n var Movable = Observable.extend({\n init: function (element) {\n var that = this;\n Observable.fn.init.call(that);\n that.element = $(element);\n that.element[0].style.webkitTransformOrigin = 'left top';\n that.x = 0;\n that.y = 0;\n that.scale = 1;\n that._saveCoordinates(translate(that.x, that.y, that.scale));\n },\n translateAxis: function (axis, by) {\n this[axis] += by;\n this.refresh();\n },\n scaleTo: function (scale) {\n this.scale = scale;\n this.refresh();\n },\n scaleWith: function (scaleDelta) {\n this.scale *= scaleDelta;\n this.refresh();\n },\n translate: function (coordinates) {\n this.x += coordinates.x;\n this.y += coordinates.y;\n this.refresh();\n },\n moveAxis: function (axis, value) {\n this[axis] = value;\n this.refresh();\n },\n moveTo: function (coordinates) {\n extend(this, coordinates);\n this.refresh();\n },\n refresh: function () {\n var that = this, x = that.x, y = that.y, newCoordinates;\n if (that.round) {\n x = Math.round(x);\n y = Math.round(y);\n }\n newCoordinates = translate(x, y, that.scale);\n if (newCoordinates != that.coordinates) {\n if (kendo.support.browser.msie && kendo.support.browser.version < 10) {\n that.element[0].style.position = 'absolute';\n that.element[0].style.left = that.x + 'px';\n that.element[0].style.top = that.y + 'px';\n } else {\n that.element[0].style[TRANSFORM_STYLE] = newCoordinates;\n }\n that._saveCoordinates(newCoordinates);\n that.trigger(CHANGE);\n }\n },\n _saveCoordinates: function (coordinates) {\n this.coordinates = coordinates;\n }\n });\n function destroyDroppable(collection, widget) {\n var groupName = widget.options.group, droppables = collection[groupName], i;\n Widget.fn.destroy.call(widget);\n if (droppables.length > 1) {\n for (i = 0; i < droppables.length; i++) {\n if (droppables[i] == widget) {\n droppables.splice(i, 1);\n break;\n }\n }\n } else {\n droppables.length = 0;\n delete collection[groupName];\n }\n }\n var DropTarget = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n var group = that.options.group;\n if (!(group in dropTargets)) {\n dropTargets[group] = [that];\n } else {\n dropTargets[group].push(that);\n }\n },\n events: [\n DRAGENTER,\n DRAGLEAVE,\n DROP\n ],\n options: {\n name: 'DropTarget',\n group: 'default'\n },\n destroy: function () {\n destroyDroppable(dropTargets, this);\n },\n _trigger: function (eventName, e) {\n var that = this, draggable = draggables[that.options.group];\n if (draggable) {\n return that.trigger(eventName, extend({}, e.event, {\n draggable: draggable,\n dropTarget: e.dropTarget\n }));\n }\n },\n _over: function (e) {\n this._trigger(DRAGENTER, e);\n },\n _out: function (e) {\n this._trigger(DRAGLEAVE, e);\n },\n _drop: function (e) {\n var that = this, draggable = draggables[that.options.group];\n if (draggable) {\n draggable.dropped = !that._trigger(DROP, e);\n }\n }\n });\n DropTarget.destroyGroup = function (groupName) {\n var group = dropTargets[groupName] || dropAreas[groupName], i;\n if (group) {\n for (i = 0; i < group.length; i++) {\n Widget.fn.destroy.call(group[i]);\n }\n group.length = 0;\n delete dropTargets[groupName];\n delete dropAreas[groupName];\n }\n };\n DropTarget._cache = dropTargets;\n var DropTargetArea = DropTarget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n var group = that.options.group;\n if (!(group in dropAreas)) {\n dropAreas[group] = [that];\n } else {\n dropAreas[group].push(that);\n }\n },\n destroy: function () {\n destroyDroppable(dropAreas, this);\n },\n options: {\n name: 'DropTargetArea',\n group: 'default',\n filter: null\n }\n });\n var Draggable = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n that._activated = false;\n that.userEvents = new UserEvents(that.element, {\n global: true,\n allowSelection: true,\n filter: that.options.filter,\n threshold: that.options.distance,\n start: proxy(that._start, that),\n hold: proxy(that._hold, that),\n move: proxy(that._drag, that),\n end: proxy(that._end, that),\n cancel: proxy(that._cancel, that),\n select: proxy(that._select, that)\n });\n if (kendo.support.touch) {\n that.element.find(that.options.filter).css('touch-action', 'none');\n }\n that._afterEndHandler = proxy(that._afterEnd, that);\n that._captureEscape = proxy(that._captureEscape, that);\n },\n events: [\n HOLD,\n DRAGSTART,\n DRAG,\n DRAGEND,\n DRAGCANCEL,\n HINTDESTROYED\n ],\n options: {\n name: 'Draggable',\n distance: kendo.support.touch ? 0 : 5,\n group: 'default',\n cursorOffset: null,\n axis: null,\n container: null,\n filter: null,\n ignore: null,\n holdToDrag: false,\n autoScroll: false,\n dropped: false\n },\n cancelHold: function () {\n this._activated = false;\n },\n _captureEscape: function (e) {\n var that = this;\n if (e.keyCode === kendo.keys.ESC) {\n that._trigger(DRAGCANCEL, { event: e });\n that.userEvents.cancel();\n }\n },\n _updateHint: function (e) {\n var that = this, coordinates, options = that.options, boundaries = that.boundaries, axis = options.axis, cursorOffset = that.options.cursorOffset;\n if (cursorOffset) {\n coordinates = {\n left: e.x.location + cursorOffset.left,\n top: e.y.location + cursorOffset.top\n };\n } else {\n that.hintOffset.left += e.x.delta;\n that.hintOffset.top += e.y.delta;\n coordinates = $.extend({}, that.hintOffset);\n }\n if (boundaries) {\n coordinates.top = within(coordinates.top, boundaries.y);\n coordinates.left = within(coordinates.left, boundaries.x);\n }\n if (axis === 'x') {\n delete coordinates.top;\n } else if (axis === 'y') {\n delete coordinates.left;\n }\n that.hint.css(coordinates);\n },\n _shouldIgnoreTarget: function (target) {\n var ignoreSelector = this.options.ignore;\n return ignoreSelector && $(target).is(ignoreSelector);\n },\n _select: function (e) {\n if (!this._shouldIgnoreTarget(e.event.target)) {\n e.preventDefault();\n }\n },\n _start: function (e) {\n var that = this, options = that.options, container = options.container ? $(options.container) : null, hint = options.hint;\n if (this._shouldIgnoreTarget(e.touch.initialTouch) || options.holdToDrag && !that._activated) {\n that.userEvents.cancel();\n return;\n }\n that.currentTarget = e.target;\n that.currentTargetOffset = getOffset(that.currentTarget);\n if (hint) {\n if (that.hint) {\n that.hint.stop(true, true).remove();\n }\n that.hint = kendo.isFunction(hint) ? $(hint.call(that, that.currentTarget)) : hint;\n var offset = getOffset(that.currentTarget);\n that.hintOffset = offset;\n that.hint.css({\n position: 'absolute',\n zIndex: 20000,\n left: offset.left,\n top: offset.top\n }).appendTo(document.body);\n that.angular('compile', function () {\n that.hint.removeAttr('ng-repeat');\n var scopeTarget = $(e.target);\n while (!scopeTarget.data('$$kendoScope') && scopeTarget.length) {\n scopeTarget = scopeTarget.parent();\n }\n return {\n elements: that.hint.get(),\n scopeFrom: scopeTarget.data('$$kendoScope')\n };\n });\n }\n draggables[options.group] = that;\n that.dropped = false;\n if (container) {\n that.boundaries = containerBoundaries(container, that.hint);\n }\n $(document).on(KEYUP, that._captureEscape);\n if (that._trigger(DRAGSTART, e)) {\n that.userEvents.cancel();\n that._afterEnd();\n }\n that.userEvents.capture();\n },\n _hold: function (e) {\n this.currentTarget = e.target;\n if (this._trigger(HOLD, e)) {\n this.userEvents.cancel();\n } else {\n this._activated = true;\n }\n },\n _drag: function (e) {\n e.preventDefault();\n var cursorElement = this._elementUnderCursor(e);\n if (this.options.autoScroll && this._cursorElement !== cursorElement) {\n this._scrollableParent = findScrollableParent(cursorElement);\n this._cursorElement = cursorElement;\n }\n this._lastEvent = e;\n this._processMovement(e, cursorElement);\n if (this.options.autoScroll) {\n if (this._scrollableParent[0]) {\n var velocity = autoScrollVelocity(e.x.location, e.y.location, scrollableViewPort(this._scrollableParent));\n this._scrollCompenstation = $.extend({}, this.hintOffset);\n this._scrollVelocity = velocity;\n if (velocity.y === 0 && velocity.x === 0) {\n clearInterval(this._scrollInterval);\n this._scrollInterval = null;\n } else if (!this._scrollInterval) {\n this._scrollInterval = setInterval($.proxy(this, '_autoScroll'), 50);\n }\n }\n }\n if (this.hint) {\n this._updateHint(e);\n }\n },\n _processMovement: function (e, cursorElement) {\n this._withDropTarget(cursorElement, function (target, targetElement) {\n if (!target) {\n if (lastDropTarget) {\n lastDropTarget._trigger(DRAGLEAVE, extend(e, { dropTarget: $(lastDropTarget.targetElement) }));\n lastDropTarget = null;\n }\n return;\n }\n if (lastDropTarget) {\n if (targetElement === lastDropTarget.targetElement) {\n return;\n }\n lastDropTarget._trigger(DRAGLEAVE, extend(e, { dropTarget: $(lastDropTarget.targetElement) }));\n }\n target._trigger(DRAGENTER, extend(e, { dropTarget: $(targetElement) }));\n lastDropTarget = extend(target, { targetElement: targetElement });\n });\n this._trigger(DRAG, extend(e, {\n dropTarget: lastDropTarget,\n elementUnderCursor: cursorElement\n }));\n },\n _autoScroll: function () {\n var parent = this._scrollableParent[0], velocity = this._scrollVelocity, compensation = this._scrollCompenstation;\n if (!parent) {\n return;\n }\n var cursorElement = this._elementUnderCursor(this._lastEvent);\n this._processMovement(this._lastEvent, cursorElement);\n var yIsScrollable, xIsScrollable;\n var isRootNode = parent === scrollableRoot()[0];\n if (isRootNode) {\n yIsScrollable = document.body.scrollHeight > $window.height();\n xIsScrollable = document.body.scrollWidth > $window.width();\n } else {\n yIsScrollable = parent.offsetHeight <= parent.scrollHeight;\n xIsScrollable = parent.offsetWidth <= parent.scrollWidth;\n }\n var yDelta = parent.scrollTop + velocity.y;\n var yInBounds = yIsScrollable && yDelta > 0 && yDelta < parent.scrollHeight;\n var xDelta = parent.scrollLeft + velocity.x;\n var xInBounds = xIsScrollable && xDelta > 0 && xDelta < parent.scrollWidth;\n if (yInBounds) {\n parent.scrollTop += velocity.y;\n }\n if (xInBounds) {\n parent.scrollLeft += velocity.x;\n }\n if (this.hint && isRootNode && (xInBounds || yInBounds)) {\n if (yInBounds) {\n compensation.top += velocity.y;\n }\n if (xInBounds) {\n compensation.left += velocity.x;\n }\n this.hint.css(compensation);\n }\n },\n _end: function (e) {\n this._withDropTarget(this._elementUnderCursor(e), function (target, targetElement) {\n if (target) {\n target._drop(extend({}, e, { dropTarget: $(targetElement) }));\n lastDropTarget = null;\n }\n });\n this._cancel(this._trigger(DRAGEND, e));\n },\n _cancel: function (isDefaultPrevented) {\n var that = this;\n that._scrollableParent = null;\n this._cursorElement = null;\n clearInterval(this._scrollInterval);\n that._activated = false;\n if (that.hint && !that.dropped) {\n setTimeout(function () {\n that.hint.stop(true, true);\n if (isDefaultPrevented) {\n that._afterEndHandler();\n } else {\n that.hint.animate(that.currentTargetOffset, 'fast', that._afterEndHandler);\n }\n }, 0);\n } else {\n that._afterEnd();\n }\n },\n _trigger: function (eventName, e) {\n var that = this;\n return that.trigger(eventName, extend({}, e.event, {\n x: e.x,\n y: e.y,\n currentTarget: that.currentTarget,\n initialTarget: e.touch ? e.touch.initialTouch : null,\n dropTarget: e.dropTarget,\n elementUnderCursor: e.elementUnderCursor\n }));\n },\n _elementUnderCursor: function (e) {\n var target = elementUnderCursor(e), hint = this.hint;\n if (hint && contains(hint[0], target)) {\n hint.hide();\n target = elementUnderCursor(e);\n if (!target) {\n target = elementUnderCursor(e);\n }\n hint.show();\n }\n return target;\n },\n _withDropTarget: function (element, callback) {\n var result, group = this.options.group, targets = dropTargets[group], areas = dropAreas[group];\n if (targets && targets.length || areas && areas.length) {\n result = checkTarget(element, targets, areas);\n if (result) {\n callback(result.target, result.targetElement);\n } else {\n callback();\n }\n }\n },\n destroy: function () {\n var that = this;\n Widget.fn.destroy.call(that);\n that._afterEnd();\n that.userEvents.destroy();\n this._scrollableParent = null;\n this._cursorElement = null;\n clearInterval(this._scrollInterval);\n that.currentTarget = null;\n },\n _afterEnd: function () {\n var that = this;\n if (that.hint) {\n that.hint.remove();\n }\n delete draggables[that.options.group];\n that.trigger('destroy');\n that.trigger(HINTDESTROYED);\n $(document).off(KEYUP, that._captureEscape);\n }\n });\n kendo.ui.plugin(DropTarget);\n kendo.ui.plugin(DropTargetArea);\n kendo.ui.plugin(Draggable);\n kendo.TapCapture = TapCapture;\n kendo.containerBoundaries = containerBoundaries;\n extend(kendo.ui, {\n Pane: Pane,\n PaneDimensions: PaneDimensions,\n Movable: Movable\n });\n function scrollableViewPort(element) {\n var root = scrollableRoot()[0], offset, top, left;\n if (element[0] === root) {\n top = root.scrollTop;\n left = root.scrollLeft;\n return {\n top: top,\n left: left,\n bottom: top + $window.height(),\n right: left + $window.width()\n };\n } else {\n offset = element.offset();\n offset.bottom = offset.top + element.height();\n offset.right = offset.left + element.width();\n return offset;\n }\n }\n function scrollableRoot() {\n return $(kendo.support.browser.edge || kendo.support.browser.safari ? document.body : document.documentElement);\n }\n function findScrollableParent(element) {\n var root = scrollableRoot();\n if (!element || element === document.body || element === document.documentElement) {\n return root;\n }\n var parent = $(element)[0];\n while (parent && !kendo.isScrollable(parent) && parent !== document.body) {\n parent = parent.parentNode;\n }\n if (parent === document.body) {\n return root;\n }\n return $(parent);\n }\n function autoScrollVelocity(mouseX, mouseY, rect) {\n var velocity = {\n x: 0,\n y: 0\n };\n var AUTO_SCROLL_AREA = 50;\n if (mouseX - rect.left < AUTO_SCROLL_AREA) {\n velocity.x = -(AUTO_SCROLL_AREA - (mouseX - rect.left));\n } else if (rect.right - mouseX < AUTO_SCROLL_AREA) {\n velocity.x = AUTO_SCROLL_AREA - (rect.right - mouseX);\n }\n if (mouseY - rect.top < AUTO_SCROLL_AREA) {\n velocity.y = -(AUTO_SCROLL_AREA - (mouseY - rect.top));\n } else if (rect.bottom - mouseY < AUTO_SCROLL_AREA) {\n velocity.y = AUTO_SCROLL_AREA - (rect.bottom - mouseY);\n }\n return velocity;\n }\n kendo.ui.Draggable.utils = {\n autoScrollVelocity: autoScrollVelocity,\n scrollableViewPort: scrollableViewPort,\n findScrollableParent: findScrollableParent\n };\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.scroller', [\n 'kendo.fx',\n 'kendo.draganddrop'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.scroller',\n name: 'Scroller',\n category: 'mobile',\n description: 'The Kendo Mobile Scroller widget enables touch friendly kinetic scrolling for the contents of a given DOM element.',\n depends: [\n 'fx',\n 'draganddrop'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, mobile = kendo.mobile, fx = kendo.effects, ui = mobile.ui, proxy = $.proxy, extend = $.extend, Widget = ui.Widget, Class = kendo.Class, Movable = kendo.ui.Movable, Pane = kendo.ui.Pane, PaneDimensions = kendo.ui.PaneDimensions, Transition = fx.Transition, Animation = fx.Animation, abs = Math.abs, SNAPBACK_DURATION = 500, SCROLLBAR_OPACITY = 0.7, FRICTION = 0.96, VELOCITY_MULTIPLIER = 10, MAX_VELOCITY = 55, OUT_OF_BOUNDS_FRICTION = 0.5, ANIMATED_SCROLLER_PRECISION = 5, RELEASECLASS = 'km-scroller-release', REFRESHCLASS = 'km-scroller-refresh', PULL = 'pull', CHANGE = 'change', RESIZE = 'resize', SCROLL = 'scroll', MOUSE_WHEEL_ID = 2;\n var ZoomSnapBack = Animation.extend({\n init: function (options) {\n var that = this;\n Animation.fn.init.call(that);\n extend(that, options);\n that.userEvents.bind('gestureend', proxy(that.start, that));\n that.tapCapture.bind('press', proxy(that.cancel, that));\n },\n enabled: function () {\n return this.movable.scale < this.dimensions.minScale;\n },\n done: function () {\n return this.dimensions.minScale - this.movable.scale < 0.01;\n },\n tick: function () {\n var movable = this.movable;\n movable.scaleWith(1.1);\n this.dimensions.rescale(movable.scale);\n },\n onEnd: function () {\n var movable = this.movable;\n movable.scaleTo(this.dimensions.minScale);\n this.dimensions.rescale(movable.scale);\n }\n });\n var DragInertia = Animation.extend({\n init: function (options) {\n var that = this;\n Animation.fn.init.call(that);\n extend(that, options, {\n transition: new Transition({\n axis: options.axis,\n movable: options.movable,\n onEnd: function () {\n that._end();\n }\n })\n });\n that.tapCapture.bind('press', function () {\n that.cancel();\n });\n that.userEvents.bind('end', proxy(that.start, that));\n that.userEvents.bind('gestureend', proxy(that.start, that));\n that.userEvents.bind('tap', proxy(that.onEnd, that));\n },\n onCancel: function () {\n this.transition.cancel();\n },\n freeze: function (location) {\n var that = this;\n that.cancel();\n that._moveTo(location);\n },\n onEnd: function () {\n var that = this;\n if (that.paneAxis.outOfBounds()) {\n that._snapBack();\n } else {\n that._end();\n }\n },\n done: function () {\n return abs(this.velocity) < 1;\n },\n start: function (e) {\n var that = this, velocity;\n if (!that.dimension.enabled) {\n return;\n }\n if (that.paneAxis.outOfBounds()) {\n if (that.transition._started) {\n that.transition.cancel();\n that.velocity = Math.min(e.touch[that.axis].velocity * that.velocityMultiplier, MAX_VELOCITY);\n Animation.fn.start.call(that);\n } else {\n that._snapBack();\n }\n } else {\n velocity = e.touch.id === MOUSE_WHEEL_ID ? 0 : e.touch[that.axis].velocity;\n that.velocity = Math.max(Math.min(velocity * that.velocityMultiplier, MAX_VELOCITY), -MAX_VELOCITY);\n that.tapCapture.captureNext();\n Animation.fn.start.call(that);\n }\n },\n tick: function () {\n var that = this, dimension = that.dimension, friction = that.paneAxis.outOfBounds() ? OUT_OF_BOUNDS_FRICTION : that.friction, delta = that.velocity *= friction, location = that.movable[that.axis] + delta;\n if (!that.elastic && dimension.outOfBounds(location)) {\n location = Math.max(Math.min(location, dimension.max), dimension.min);\n that.velocity = 0;\n }\n that.movable.moveAxis(that.axis, location);\n },\n _end: function () {\n this.tapCapture.cancelCapture();\n this.end();\n },\n _snapBack: function () {\n var that = this, dimension = that.dimension, snapBack = that.movable[that.axis] > dimension.max ? dimension.max : dimension.min;\n that._moveTo(snapBack);\n },\n _moveTo: function (location) {\n this.transition.moveTo({\n location: location,\n duration: SNAPBACK_DURATION,\n ease: Transition.easeOutExpo\n });\n }\n });\n var AnimatedScroller = Animation.extend({\n init: function (options) {\n var that = this;\n kendo.effects.Animation.fn.init.call(this);\n extend(that, options, {\n origin: {},\n destination: {},\n offset: {}\n });\n },\n tick: function () {\n this._updateCoordinates();\n this.moveTo(this.origin);\n },\n done: function () {\n return abs(this.offset.y) < ANIMATED_SCROLLER_PRECISION && abs(this.offset.x) < ANIMATED_SCROLLER_PRECISION;\n },\n onEnd: function () {\n this.moveTo(this.destination);\n if (this.callback) {\n this.callback.call();\n }\n },\n setCoordinates: function (from, to) {\n this.offset = {};\n this.origin = from;\n this.destination = to;\n },\n setCallback: function (callback) {\n if (callback && kendo.isFunction(callback)) {\n this.callback = callback;\n } else {\n callback = undefined;\n }\n },\n _updateCoordinates: function () {\n this.offset = {\n x: (this.destination.x - this.origin.x) / 4,\n y: (this.destination.y - this.origin.y) / 4\n };\n this.origin = {\n y: this.origin.y + this.offset.y,\n x: this.origin.x + this.offset.x\n };\n }\n });\n var ScrollBar = Class.extend({\n init: function (options) {\n var that = this, horizontal = options.axis === 'x', element = $('
    ');\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 (e.ctrlKey) {\n return;\n }\n if (!this._wheel) {\n this._wheel = true;\n this._wheelY = 0;\n this.userEvents.press(0, this._wheelY);\n }\n clearTimeout(this._wheelTimeout);\n this._wheelTimeout = setTimeout(this._wheelEnd, 50);\n var delta = kendo.wheelDeltaY(e);\n if (delta) {\n this._wheelY += delta;\n this.userEvents.move(0, this._wheelY);\n }\n e.preventDefault();\n },\n makeVirtual: function () {\n this.dimensions.y.makeVirtual();\n },\n virtualSize: function (min, max) {\n this.dimensions.y.virtualSize(min, max);\n },\n height: function () {\n return this.dimensions.y.size;\n },\n scrollHeight: function () {\n return this.scrollElement[0].scrollHeight;\n },\n scrollWidth: function () {\n return this.scrollElement[0].scrollWidth;\n },\n options: {\n name: 'Scroller',\n zoom: false,\n pullOffset: 140,\n visibleScrollHints: false,\n elastic: true,\n useNative: false,\n mousewheelScrolling: true,\n avoidScrolling: function () {\n return false;\n },\n pullToRefresh: false,\n messages: {\n pullTemplate: 'Pull to refresh',\n releaseTemplate: 'Release to refresh',\n refreshTemplate: 'Refreshing'\n }\n },\n events: [\n PULL,\n SCROLL,\n RESIZE\n ],\n _resize: function () {\n if (!this._native) {\n this.contentResized();\n }\n },\n setOptions: function (options) {\n var that = this;\n Widget.fn.setOptions.call(that, options);\n if (options.pullToRefresh) {\n that._initPullToRefresh();\n }\n },\n reset: function () {\n if (this._native) {\n this.scrollElement.scrollTop(0);\n } else {\n this.movable.moveTo({\n x: 0,\n y: 0\n });\n this._scale(1);\n }\n },\n contentResized: function () {\n this.dimensions.refresh();\n if (this.pane.x.outOfBounds()) {\n this.movable.moveAxis('x', this.dimensions.x.min);\n }\n if (this.pane.y.outOfBounds()) {\n this.movable.moveAxis('y', this.dimensions.y.min);\n }\n },\n zoomOut: function () {\n var dimensions = this.dimensions;\n dimensions.refresh();\n this._scale(dimensions.fitScale);\n this.movable.moveTo(dimensions.centerCoordinates());\n },\n enable: function () {\n this.enabled = true;\n },\n disable: function () {\n this.enabled = false;\n },\n scrollTo: function (x, y) {\n if (this._native) {\n 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 var isFloating = /left|right/.test(item.css('float'));\n var isTable = /inline|table-cell/.test(item.css('display'));\n var isHorizontalFlex = /flex/.test(item.parent().css('display')) && (/row|row-reverse/.test(item.parent().css('flex-direction')) || !item.parent().css('flex-direction'));\n return isFloating || isTable || isHorizontalFlex;\n },\n _cancel: function () {\n this.draggedElement.show();\n this.placeholder.remove();\n this.draggable.dropped = true;\n },\n _items: function () {\n var filter = this.options.filter, items;\n if (filter) {\n items = this.element.find(filter);\n } else {\n items = this.element.children();\n }\n return items;\n },\n indexOf: function (element) {\n var items = this._items(), placeholder = this.placeholder, draggedElement = this.draggedElement;\n if (placeholder && element[0] == placeholder[0]) {\n return items.not(draggedElement).index(element);\n } else {\n return items.not(placeholder).index(element);\n }\n },\n items: function () {\n var placeholder = this.placeholder, items = this._items();\n if (placeholder) {\n items = items.not(placeholder);\n }\n return items;\n },\n _isEmpty: function () {\n return !this.items().length;\n },\n _isLastHidden: function () {\n return this.items().length === 1 && this.items().is(':hidden');\n }\n });\n kendo.ui.plugin(Sortable);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.selectable', [\n 'kendo.core',\n 'kendo.userevents'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'selectable',\n name: 'Selectable',\n category: 'framework',\n depends: [\n 'core',\n 'userevents'\n ],\n advanced: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, proxy = $.proxy, abs = Math.abs, ARIASELECTED = 'aria-selected', SELECTED = 'k-state-selected', ACTIVE = 'k-state-selecting', SELECTABLE = 'k-selectable', CHANGE = 'change', NS = '.kendoSelectable', UNSELECT = 'unselect', UNSELECTING = 'k-state-unselecting', INPUTSELECTOR = 'input,a,textarea,.k-multiselect-wrap,select,button,.k-button>span,.k-button>img,span.k-icon.k-i-arrow-60-down,span.k-icon.k-i-arrow-60-up,label.k-checkbox-label.k-no-text,.k-icon.k-i-collapse,.k-icon.k-i-expand,span.k-numeric-wrap,.k-focusable', msie = kendo.support.browser.msie, supportEventDelegation = false;\n (function ($) {\n (function () {\n $('
    ').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.badge', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'badge',\n name: 'Badge',\n category: 'web',\n description: 'The Badge decorates avatars, navigation menus, or other components in the application when visual notification is needed',\n depends: ['core']\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, ui = kendo.ui, PRIMARY = 'k-badge-primary', SECONDARY = 'k-badge-secondary', INFO = 'k-badge-info', SUCCESS = 'k-badge-success', WARNING = 'k-badge-warning', ERROR = 'k-badge-error', OUTLINE = 'k-badge-outline', PILL = 'k-badge-pill', FUNCTION = 'function', STRING = 'string';\n var Badge = Widget.extend({\n init: function (element, options) {\n var that = this, type;\n Widget.fn.init.call(that, element, options);\n options = $.extend(true, {}, options);\n type = options.type || 'primary';\n that.element = $(element).addClass('k-badge').addClass(that.classPerType[type]);\n if (options.look == 'outline') {\n that.element.addClass(OUTLINE);\n }\n if (options.appearance != 'rectangle') {\n that.element.addClass(PILL);\n }\n if (typeof options.visible !== 'undefined' && !options.visible) {\n that.element.hide();\n }\n that._setInitialValue();\n kendo.notify(that);\n },\n options: {\n name: 'Badge',\n value: '',\n visible: true,\n appearance: 'rectangle',\n template: null,\n type: 'secondary',\n look: null\n },\n classPerType: {\n primary: PRIMARY,\n info: INFO,\n success: SUCCESS,\n warning: WARNING,\n error: ERROR,\n secondary: SECONDARY\n },\n value: function (newValue) {\n var that = this;\n if (!newValue) {\n return that._value;\n }\n that.element.html(kendo.htmlEncode(that._createContent(newValue)));\n that._value = newValue;\n },\n _createContent: function (value) {\n var template = this.options.template, type = typeof template, html;\n if (type == FUNCTION) {\n html = template(value);\n } else if (type === STRING) {\n html = kendo.template(template)({ value: value });\n } else {\n html = value;\n }\n return html;\n },\n _setInitialValue: function () {\n var that = this, value = that.options.value || that.element.html();\n if (!/\\S/.test(value)) {\n value = '';\n }\n that._value = value;\n that.element.html(kendo.htmlEncode(that._createContent(value)));\n },\n hide: function () {\n this.element.hide();\n },\n show: function () {\n this.element.show();\n },\n setOptions: function (newOptions) {\n var that = this;\n that.element.removeClass(function (index, className) {\n if (className.indexOf('k-') >= 0) {\n that.element.removeClass(className);\n }\n });\n that.init(that.element, newOptions);\n }\n });\n ui.plugin(Badge);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.button', [\n 'kendo.core',\n 'kendo.badge'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'button',\n name: 'Button',\n category: 'web',\n description: 'The Button widget displays styled buttons.',\n depends: [\n 'core',\n 'badge'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, ui = kendo.ui, proxy = $.proxy, keys = kendo.keys, CLICK = 'click', MOUSEDOWN = kendo.support.mousedown, MOUSEUP = kendo.support.mouseup, MOUSEOUT = 'mouseout', KBUTTON = 'k-button', KBUTTONICON = 'k-button-icon', KBUTTONICONTEXT = 'k-button-icontext', NS = '.kendoButton', DISABLED = 'disabled', DISABLEDSTATE = 'k-state-disabled', FOCUSEDSTATE = 'k-state-focused', SELECTEDSTATE = 'k-state-active', OVERLAY = 'k-badge-overlay';\n var Button = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n element = that.wrapper = that.element;\n options = that.options;\n element.addClass(KBUTTON).attr('role', 'button');\n options.enable = options.enable && options.enabled && !element.attr(DISABLED);\n that.enable(options.enable);\n if (options.enable) {\n that._tabindex();\n }\n if (options.badge) {\n that.createBadge(options.badge);\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 + ' ' + MOUSEOUT + NS, proxy(that._removeActive, that));\n kendo.notify(that);\n },\n destroy: function () {\n var that = this;\n that.wrapper.off(NS);\n if (that.badge) {\n that.badge.destroy();\n }\n Widget.fn.destroy.call(that);\n },\n events: [CLICK],\n options: {\n name: 'Button',\n icon: '',\n iconClass: '',\n spriteCssClass: '',\n imageUrl: '',\n enable: true,\n enabled: 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 createBadge: function (badgeOptions) {\n var that = this;\n var span = $('').appendTo(that.element);\n if (badgeOptions.overlay !== false) {\n that.element.addClass(OVERLAY);\n }\n if (typeof badgeOptions == 'string' || typeof badgeOptions == 'number') {\n that.badge = new ui.Badge(span, { value: badgeOptions });\n } else if (typeof badgeOptions == 'boolean') {\n that.badge = new ui.Badge(span);\n } else {\n that.badge = new ui.Badge(span, badgeOptions);\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 if (!that.list.parent().hasClass('k-pager-numbers-wrap')) {\n that.list.wrap('
      ');\n }\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(parseInt(target.attr(kendo.attr('page')), 10));\n }\n },\n totalPages: function () {\n return Math.ceil((this.dataSource.total() || 0) / (this.pageSize() || 1));\n },\n pageSize: function () {\n return this.dataSource.pageSize() || this.dataSource.total();\n },\n page: function (page) {\n if (page) {\n if (this.trigger('pageChange', { index: page })) {\n return;\n }\n this.dataSource.page(page);\n this.trigger(CHANGE, { index: page });\n } else {\n if (this.dataSource.total() > 0) {\n return this.dataSource.page();\n } else {\n return 0;\n }\n }\n },\n _getWidthSizeClass: function (width) {\n var that = this, sizes = SIZE.split(' ');\n if (!that.options.responsive) {\n return null;\n } else if (width <= 480) {\n return sizes[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 copyAnchorStyles: false,\n modal: true,\n collision: '',\n isRtl: that._isRtl,\n close: function () {\n that._triggerHide(this.element);\n },\n deactivate: function (e) {\n e.sender.element.off(NS);\n e.sender.element.find(KICLOSE).off(NS);\n e.sender.destroy();\n }\n });\n that._attachPopupEvents(options, popup);\n wrapper.removeClass('k-group k-reset');\n if (openPopup[0]) {\n popup.open();\n } else {\n if (x === null) {\n x = $(window).width() - wrapper.outerWidth() - options.position.right;\n }\n if (y === null) {\n y = $(window).height() - wrapper.outerHeight() - options.position.bottom;\n }\n popup.open(x, y);\n }\n popup.wrapper.addClass(that._guid).css(extend({\n margin: 0,\n zIndex: 10050\n }, that._popupPaddings));\n if (options.position.pinned) {\n popup.wrapper.css('position', 'fixed');\n if (openPopup[0]) {\n that._togglePin(popup.wrapper, true);\n }\n } else if (!openPopup[0]) {\n that._togglePin(popup.wrapper, false);\n }\n if (autoHideAfter > 0) {\n setTimeout(function () {\n that._hidePopup(popup);\n }, autoHideAfter);\n }\n },\n _hidePopup: function (popup) {\n popup.wrapper.addClass(KHIDING);\n popup.close();\n },\n _togglePin: function (wrapper, pin) {\n var win = $(window), sign = pin ? -1 : 1;\n wrapper.css({\n top: parseInt(wrapper.css(TOP), 10) + sign * win.scrollTop(),\n left: parseInt(wrapper.css(LEFT), 10) + sign * win.scrollLeft()\n });\n },\n _attachStaticEvents: function (options, wrapper) {\n var that = this, allowHideAfter = options.allowHideAfter, attachDelay = !isNaN(allowHideAfter) && allowHideAfter > 0;\n function attachClick(target) {\n target.on(CLICK + NS, proxy(that._hideStatic, that, wrapper));\n }\n if (options.hideOnClick) {\n if (attachDelay) {\n setTimeout(function () {\n attachClick(wrapper);\n }, allowHideAfter);\n } else {\n attachClick(wrapper);\n }\n } else if (options.button) {\n if (attachDelay) {\n setTimeout(function () {\n attachClick(wrapper.find(KICLOSE));\n }, allowHideAfter);\n } else {\n attachClick(wrapper.find(KICLOSE));\n }\n }\n },\n _showStatic: function (wrapper, options) {\n var that = this, autoHideAfter = options.autoHideAfter, animation = options.animation, insertionMethod = options.stacking == UP || options.stacking == LEFT ? 'prependTo' : 'appendTo', initializedNotifications;\n wrapper.removeClass('k-popup').addClass(that._guid)[insertionMethod](options.appendTo).hide().kendoAnimate(animation.open || false);\n initializedNotifications = that.getNotifications();\n initializedNotifications.each(function (idx, element) {\n that._attachStaticEvents(options, $(element));\n if (autoHideAfter > 0) {\n setTimeout(function () {\n that._hideStatic($(element));\n }, autoHideAfter);\n }\n });\n },\n _hideStatic: function (wrapper) {\n wrapper.kendoAnimate(extend(this.options.animation.close || false, {\n complete: function () {\n wrapper.off(NS).find(KICLOSE).off(NS);\n wrapper.remove();\n }\n }));\n this._triggerHide(wrapper);\n },\n _triggerHide: function (element) {\n this.trigger(HIDE, { element: element });\n this.angular('cleanup', function () {\n return { elements: element };\n });\n },\n show: function (content, type, safe) {\n var that = this, options = that.options, wrapper = $(WRAPPER), args, defaultArgs;\n if (!type) {\n type = INFO;\n }\n if (content !== null && content !== undefined && content !== '') {\n if (kendo.isFunction(content)) {\n content = content();\n }\n defaultArgs = {\n typeIcon: type,\n content: ''\n };\n if ($.isPlainObject(content)) {\n args = extend(defaultArgs, content);\n } else {\n args = extend(defaultArgs, { content: content });\n }\n wrapper.addClass(KNOTIFICATION + '-' + type).toggleClass(KNOTIFICATION + '-button', options.button).toggleClass(KNOTIFICATION + '-closable', options.button).attr('data-role', 'alert').css({\n width: options.width,\n height: options.height\n }).append(that._getCompiled(type, safe)(args));\n that.angular('compile', function () {\n return {\n elements: wrapper,\n data: [{ dataItem: args }]\n };\n });\n if ($(options.appendTo)[0]) {\n that._showStatic(wrapper, options);\n } else {\n that._showPopup(wrapper, options);\n }\n that.trigger(SHOW, { element: wrapper });\n }\n return that;\n },\n showText: function (content, type) {\n this.show(content, type, true);\n },\n info: function (content) {\n return this.show(content, INFO);\n },\n success: function (content) {\n return this.show(content, SUCCESS);\n },\n warning: function (content) {\n return this.show(content, WARNING);\n },\n error: function (content) {\n return this.show(content, ERROR);\n },\n hide: function () {\n var that = this, openedNotifications = that.getNotifications();\n if (that.options.appendTo) {\n openedNotifications.each(function (idx, element) {\n that._hideStatic($(element));\n });\n } else {\n openedNotifications.each(function (idx, element) {\n var popup = $(element).data('kendoPopup');\n if (popup) {\n that._hidePopup(popup);\n }\n });\n }\n return that;\n },\n getNotifications: function () {\n var that = this, guidElements = $('.' + that._guid + ':not(.' + KHIDING + ')');\n if (that.options.appendTo) {\n return guidElements;\n } else {\n return guidElements.children('.' + KNOTIFICATION);\n }\n },\n setOptions: function (newOptions) {\n var that = this, options;\n Widget.fn.setOptions.call(that, newOptions);\n options = that.options;\n if (newOptions.templates !== undefined) {\n that._compileTemplates(options.templates);\n }\n if (newOptions.stacking !== undefined || newOptions.position !== undefined) {\n that._compileStacking(options.stacking, options.position.top, options.position.left);\n }\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.getNotifications().off(NS).find(KICLOSE).off(NS);\n }\n });\n kendo.ui.plugin(Notification);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.tooltip', [\n 'kendo.core',\n 'kendo.popup',\n 'kendo.fx'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'tooltip',\n name: 'Tooltip',\n category: 'web',\n description: 'The Tooltip widget displays a popup hint for a given html element.',\n depends: [\n 'core',\n 'popup'\n ],\n features: [{\n id: 'tooltip-fx',\n name: 'Animation',\n description: 'Support for animation',\n depends: ['fx']\n }]\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, Popup = kendo.ui.Popup, isFunction = kendo.isFunction, isPlainObject = $.isPlainObject, extend = $.extend, proxy = $.proxy, DOCUMENT = $(document), isLocalUrl = kendo.isLocalUrl, ARIAIDSUFFIX = '_tt_active', DESCRIBEDBY = 'aria-describedby', SHOW = 'show', HIDE = 'hide', ERROR = 'error', CONTENTLOAD = 'contentLoad', REQUESTSTART = 'requestStart', KCONTENTFRAME = 'k-content-frame', TEMPLATE = '
      #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 if (kendo.support.touch && this._isShownOnMouseEnter()) {\n that.element.on(kendo.support.mousedown + NS, that.options.filter, proxy(that._showOn, that));\n }\n that.element.on(that.options.showOn + NS, that.options.filter, proxy(that._showOn, that));\n if (this._isShownOnMouseEnter() || this._isShownOnClick()) {\n that.element.on('mouseenter' + NS, that.options.filter, proxy(that._mouseenter, that));\n }\n if (this.options.autoHide && this._isShownOnMouseEnter()) {\n that.element.on('mouseleave' + NS, that.options.filter, proxy(that._mouseleave, that));\n }\n if (this.options.autoHide && this._isShownOnFocus()) {\n that.element.on('blur' + NS, that.options.filter, proxy(that._blur, that));\n }\n if (kendo.support.touch) {\n that.element.on(kendo.support.mousedown + NS, that.options.filter, proxy(that._mouseenter, that));\n }\n },\n options: {\n name: 'Tooltip',\n filter: '',\n content: DEFAULTCONTENT,\n showAfter: 100,\n hideAfter: 100,\n callout: true,\n offset: 0,\n position: 'bottom',\n showOn: 'mouseenter',\n autoHide: true,\n width: null,\n height: null,\n animation: {\n open: {\n effects: 'fade:in',\n duration: 0\n },\n close: {\n duration: 40,\n hide: true\n }\n }\n },\n events: [\n SHOW,\n HIDE,\n CONTENTLOAD,\n ERROR,\n REQUESTSTART\n ],\n _isShownOnFocus: function () {\n return this.options.showOn && this.options.showOn.match(/focus/);\n },\n _isShownOnMouseEnter: function () {\n return this.options.showOn && this.options.showOn.match(/mouseenter/);\n },\n _isShownOnClick: function () {\n return this.options.showOn && this.options.showOn.match(/click/);\n },\n _mouseenter: function (e) {\n saveTitleAttributes($(e.currentTarget));\n },\n _showOn: function (e) {\n var that = this;\n var currentTarget = $(e.currentTarget);\n if (that._isShownOnClick() && !that._isShownOnMouseEnter()) {\n that._show(currentTarget);\n } else if (that._isShownOnFocus()) {\n saveTitleAttributes(currentTarget);\n that._show(currentTarget);\n } else {\n clearTimeout(that.timeout);\n that.timeout = setTimeout(function () {\n that._show(currentTarget);\n }, that.options.showAfter);\n }\n },\n _appendContent: function (target) {\n var that = this, contentOptions = that.options.content, element = that.content, showIframe = that.options.iframe, iframe;\n if (isPlainObject(contentOptions) && contentOptions.url) {\n if (!('iframe' in that.options)) {\n showIframe = !isLocalUrl(contentOptions.url);\n }\n that.trigger(REQUESTSTART, {\n options: contentOptions,\n target: target\n });\n if (!showIframe) {\n element.empty();\n kendo.ui.progress(element, true);\n that._ajaxRequest(contentOptions);\n } else {\n element.hide();\n iframe = element.find('.' + KCONTENTFRAME)[0];\n if (iframe) {\n iframe.src = contentOptions.url || iframe.src;\n } else {\n element.html(IFRAMETEMPLATE({ content: contentOptions }));\n }\n element.find('.' + KCONTENTFRAME).off('load' + NS).on('load' + NS, function () {\n that.trigger(CONTENTLOAD);\n element.show();\n });\n }\n } else if (contentOptions && isFunction(contentOptions)) {\n contentOptions = contentOptions({\n sender: this,\n target: target\n });\n element.html(contentOptions || '');\n } else {\n element.html(contentOptions);\n }\n that.angular('compile', function () {\n return { elements: element };\n });\n },\n _ajaxRequest: function (options) {\n var that = this;\n jQuery.ajax(extend({\n type: 'GET',\n dataType: 'html',\n cache: false,\n error: function (xhr, status) {\n kendo.ui.progress(that.content, false);\n that.trigger(ERROR, {\n status: status,\n xhr: xhr\n });\n },\n success: proxy(function (data) {\n kendo.ui.progress(that.content, false);\n that.content.html(data);\n that.trigger(CONTENTLOAD);\n }, that)\n }, options));\n },\n _documentKeyDown: function (e) {\n if (e.keyCode === kendo.keys.ESC) {\n this.hide();\n }\n },\n refresh: function () {\n var that = this, popup = that.popup;\n if (popup && popup.options.anchor) {\n that._appendContent(popup.options.anchor);\n }\n },\n hide: function () {\n if (this.popup) {\n this.popup.close();\n }\n },\n show: function (target) {\n target = target || this.element;\n saveTitleAttributes(target);\n this._show(target);\n },\n _show: function (target) {\n var that = this, current = that.target();\n if (!that.popup) {\n that._initPopup();\n }\n if (current && current[0] != target[0]) {\n that.popup.close();\n that.popup.element.kendoStop(true, true);\n }\n if (!current || current[0] != target[0]) {\n that._appendContent(target);\n that.popup.options.anchor = target;\n }\n that.popup.one('deactivate', function () {\n restoreTitle(target);\n target.removeAttr(DESCRIBEDBY);\n this.element.removeAttr('id').attr('aria-hidden', true);\n DOCUMENT.off('keydown' + NS, that._documentKeyDownHandler);\n });\n that.popup._hovered = true;\n that.popup.open();\n },\n _initPopup: function () {\n var that = this, options = that.options, wrapper = $(kendo.template(TEMPLATE)({\n callout: options.callout && options.position !== 'center',\n dir: DIRCLASSES[options.position],\n autoHide: options.autoHide\n }));\n that.popup = new Popup(wrapper, extend({\n autosize: true,\n activate: function () {\n var anchor = this.options.anchor, ariaId = anchor[0].id || that.element[0].id;\n if (ariaId) {\n anchor.attr(DESCRIBEDBY, ariaId + ARIAIDSUFFIX);\n this.element.attr('id', ariaId + ARIAIDSUFFIX);\n }\n if (options.callout) {\n that._positionCallout();\n } else {\n that._offset(that.options.position, that.options.offset);\n }\n this.element.removeAttr('aria-hidden');\n DOCUMENT.on('keydown' + NS, that._documentKeyDownHandler);\n that.trigger(SHOW);\n that.popup._hovered = undefined;\n },\n close: function () {\n that.trigger(HIDE);\n },\n copyAnchorStyles: false,\n animation: options.animation\n }, POSITIONS[options.position]));\n wrapper.css({\n width: options.width,\n height: options.height\n });\n that.content = wrapper.find('.k-tooltip-content');\n that.arrow = wrapper.find('.k-callout');\n if (options.autoHide && this._isShownOnMouseEnter()) {\n wrapper.on('mouseleave' + NS, proxy(that._mouseleave, that));\n } else {\n wrapper.on('click' + NS, '.k-tooltip-button', proxy(that._closeButtonClick, that));\n }\n },\n _closeButtonClick: function (e) {\n e.preventDefault();\n this.hide();\n },\n _mouseleave: function (e) {\n var that = this;\n clearTimeout(that.timeout);\n that.timeout = setTimeout(function () {\n that._closePopup(e.currentTarget);\n }, that.options.hideAfter);\n },\n _blur: function (e) {\n this._closePopup(e.currentTarget);\n },\n _closePopup: function (target) {\n if (this.popup && !this.popup._hovered) {\n this.popup.close();\n } else {\n restoreTitle($(target));\n }\n },\n target: function () {\n if (this.popup) {\n return this.popup.options.anchor;\n }\n return null;\n },\n _positionCallout: function () {\n var that = this, position = that.options.position, dimensions = that.dimensions, offset = dimensions.offset, popup = that.popup, anchor = popup.options.anchor, anchorOffset = $(anchor).offset(), elementOffset = $(popup.element).offset(), cssClass = DIRCLASSES[popup.flipped ? REVERSE[position] : position], offsetAmount = anchorOffset[offset] - elementOffset[offset] + $(anchor)[dimensions.size]() / 2;\n that._offset(position, that.options.offset);\n that.arrow.removeClass('k-callout-n k-callout-s k-callout-w k-callout-e').addClass('k-callout-' + cssClass).css(offset, offsetAmount);\n },\n destroy: function () {\n var popup = this.popup;\n if (popup) {\n popup.element.off(NS);\n popup.destroy();\n }\n clearTimeout(this.timeout);\n this.element.off(NS);\n DOCUMENT.off('keydown' + NS, this._documentKeyDownHandler);\n Widget.fn.destroy.call(this);\n },\n _offset: function (position, offsetAmount) {\n var that = this, isTopLeft = position == 'top' || position == 'left', isFlipped = that.popup.flipped, direction = isTopLeft && isFlipped || !isTopLeft && !isFlipped ? 1 : -1, marginRule = isTopLeft ? 'margin-' + position : 'margin-' + REVERSE[position], offset = kendo._outerWidth(that.arrow) / 2 + offsetAmount;\n that.popup.wrapper.css(marginRule, offset * direction + 'px');\n }\n });\n kendo.ui.plugin(Tooltip);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.toolbar', [\n 'kendo.core',\n 'kendo.userevents',\n 'kendo.popup'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'toolbar',\n name: 'ToolBar',\n category: 'web',\n description: 'The ToolBar widget displays one or more command buttons divided into groups.',\n depends: ['core']\n };\n (function ($, undefined) {\n var kendo = window.kendo, Class = kendo.Class, Widget = kendo.ui.Widget, proxy = $.proxy, isFunction = kendo.isFunction, keys = kendo.keys, outerWidth = kendo._outerWidth, ns = '.kendoToolBar', TOOLBAR = 'k-toolbar', BUTTON = 'k-button', OVERFLOW_BUTTON = 'k-overflow-button', TOGGLE_BUTTON = 'k-toggle-button', BUTTON_GROUP = 'k-button-group', SPLIT_BUTTON = 'k-split-button', SEPARATOR = 'k-separator', SPACER_CLASS = 'k-spacer', SPACER = 'spacer', POPUP = 'k-popup', RESIZABLE_TOOLBAR = 'k-toolbar-resizable', STATE_ACTIVE = 'k-state-active', STATE_DISABLED = 'k-state-disabled', STATE_HIDDEN = 'k-state-hidden', 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' + ns, '.' + BUTTON, function (e) {\n var li = $(e.target).parent();\n e.preventDefault();\n if (e.keyCode === keys.ESC || e.keyCode === keys.TAB || e.altKey && e.keyCode === keys.UP) {\n that.toggle();\n that.focus();\n } else if (e.keyCode === keys.DOWN) {\n findFocusableSibling(li, 'next').focus();\n } else if (e.keyCode === keys.UP) {\n findFocusableSibling(li, 'prev').focus();\n } else if (e.keyCode === keys.SPACEBAR || e.keyCode === keys.ENTER) {\n that.toolbar.userEvents.trigger('tap', { target: $(e.target) });\n } else if (e.keyCode === keys.HOME) {\n li.parent().find(':kendoFocusable').first().focus();\n } else if (e.keyCode === keys.END) {\n li.parent().find(':kendoFocusable').last().focus();\n }\n });\n },\n createMenuButtons: function () {\n var options = this.options;\n var items = options.menuButtons;\n var item;\n for (var i = 0; i < items.length; i++) {\n item = new ToolBarButton($.extend({\n mobile: options.mobile,\n type: 'button',\n click: options.click\n }, items[i]), this.toolbar);\n item.element.wrap('
        • ').parent().appendTo(this.popupElement);\n }\n },\n createPopup: function () {\n var that = this;\n var options = this.options;\n var element = this.element;\n this.popupElement.attr('id', options.id + OPTION_LIST_SUFFIX).attr(KENDO_UID_ATTR, options.rootUid);\n if (options.mobile) {\n this.popupElement = actionSheetWrap(this.popupElement);\n }\n this.popup = this.popupElement.kendoPopup({\n appendTo: options.mobile ? $(options.mobile).children('.km-pane') : null,\n anchor: element,\n isRtl: this.toolbar._isRtl,\n copyAnchorStyles: false,\n animation: options.animation,\n open: function (e) {\n var isDefaultPrevented = that.toolbar.trigger(OPEN, { target: element });\n if (isDefaultPrevented) {\n e.preventDefault();\n return;\n }\n that.adjustPopupWidth(e.sender);\n },\n activate: function () {\n this.element.find(':kendoFocusable').first().focus();\n },\n close: function (e) {\n var isDefaultPrevented = that.toolbar.trigger(CLOSE, { target: element });\n if (isDefaultPrevented) {\n e.preventDefault();\n }\n element.focus();\n }\n }).data('kendoPopup');\n this.popup.element.on(CLICK + ns, 'a.k-button', preventClick);\n },\n adjustPopupWidth: function (popup) {\n var anchor = popup.options.anchor, computedWidth = outerWidth(anchor), width;\n kendo.wrap(popup.element).addClass('k-split-wrapper');\n if (popup.element.css('box-sizing') !== 'border-box') {\n width = computedWidth - (outerWidth(popup.element) - popup.element.width());\n } else {\n width = computedWidth;\n }\n popup.element.css({\n fontFamily: anchor.css('font-family'),\n 'min-width': width\n });\n },\n remove: function () {\n this.popup.element.off(CLICK + ns, 'a.k-button');\n this.popup.destroy();\n this.element.remove();\n },\n toggle: function () {\n if (this.options.enable || this.popup.visible()) {\n this.popup.toggle();\n }\n },\n enable: function (isEnabled) {\n if (isEnabled === undefined) {\n isEnabled = true;\n }\n this.mainButton.enable(isEnabled);\n this.element.toggleClass(STATE_DISABLED, !isEnabled);\n this.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({ isChild: true }, options));\n this.mainButton.element.appendTo(element);\n for (var i = 0; i < items.length; i++) {\n item = new OverflowButton($.extend({\n mobile: options.mobile,\n type: 'button',\n splitContainerId: splitContainerId,\n isChild: true\n }, items[i]), this.toolbar);\n item.element.appendTo(element);\n }\n this.addUidAttr();\n this.addOverflowAttr();\n this.mainButton.main = true;\n element.data({\n type: 'splitButton',\n splitButton: this\n });\n },\n overflowHidden: function () {\n this.element.addClass(OVERFLOW_HIDDEN);\n }\n });\n kendo.toolbar.OverflowSplitButton = OverflowSplitButton;\n kendo.toolbar.registerComponent('splitButton', ToolBarSplitButton, OverflowSplitButton);\n var ToolBarSeparator = Item.extend({\n init: function (options, toolbar) {\n var element = this.element = $('
           
          ');\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 + ns, 'a.k-button', preventClick);\n that._navigatable();\n if (options.resizable) {\n that.popup.element.on(CLICK + ns, +'a.k-button', preventClick);\n }\n if (options.resizable) {\n this._toggleOverflowAnchor();\n }\n kendo.notify(that);\n },\n events: [\n CLICK,\n TOGGLE,\n OPEN,\n CLOSE,\n OVERFLOW_OPEN,\n OVERFLOW_CLOSE\n ],\n options: {\n name: 'ToolBar',\n items: [],\n resizable: true,\n mobile: null\n },\n addToGroup: function (button, groupName) {\n var group;\n if (!this._groups[groupName]) {\n group = this._groups[groupName] = new Group();\n } else {\n group = this._groups[groupName];\n }\n group.add(button);\n return group;\n },\n destroy: function () {\n var that = this;\n that.element.find('.' + SPLIT_BUTTON).each(function (idx, element) {\n $(element).data('kendoPopup').destroy();\n });\n that.element.off(ns, 'a.k-button');\n that.userEvents.destroy();\n if (that.options.resizable) {\n kendo.unbindResize(that._resizeHandler);\n that.overflowUserEvents.destroy();\n that.popup.element.off(ns, 'a.k-button');\n that.popup.destroy();\n }\n Widget.fn.destroy.call(that);\n },\n add: function (options) {\n var component = components[options.type], template = options.template, tool, that = this, itemClasses = that.isMobile ? '' : 'k-item k-state-default', overflowTemplate = options.overflowTemplate, overflowTool;\n $.extend(options, {\n uid: kendo.guid(),\n animation: that.animation,\n mobile: that.isMobile,\n rootUid: that.uid\n });\n if (options.menuButtons) {\n for (var i = 0; i < options.menuButtons.length; i++) {\n $.extend(options.menuButtons[i], { uid: kendo.guid() });\n }\n }\n if (template && !overflowTemplate || options.type === SPACER) {\n options.overflow = OVERFLOW_NEVER;\n } else if (!options.overflow) {\n options.overflow = OVERFLOW_AUTO;\n }\n if (options.overflow !== OVERFLOW_NEVER && that.options.resizable) {\n if (overflowTemplate) {\n overflowTool = new OverflowTemplateItem(overflowTemplate, options, that);\n } else if (component) {\n overflowTool = new component.overflow(options, that);\n overflowTool.element.addClass(itemClasses);\n }\n if (overflowTool) {\n if (options.overflow === OVERFLOW_AUTO) {\n overflowTool.overflowHidden();\n }\n overflowTool.element.appendTo(that.popup.container);\n that.angular('compile', function () {\n return { elements: overflowTool.element.get() };\n });\n }\n }\n if (options.overflow !== OVERFLOW_ALWAYS) {\n if (template) {\n tool = new TemplateItem(template, options, that);\n } else if (component) {\n tool = new component.toolbar(options, that);\n }\n if (tool) {\n tool.element.appendTo(that.element);\n that.angular('compile', function () {\n return { elements: tool.element.get() };\n });\n }\n }\n },\n _getItem: function (candidate) {\n var element, toolbarItem, overflowItem, isResizable = this.options.resizable, type;\n element = this.element.find(candidate);\n if (!element.length) {\n element = $('.k-split-container[data-uid=' + this.uid + ']').find(candidate);\n }\n type = element.length ? element.data('type') : '';\n toolbarItem = element.data(type);\n if (toolbarItem) {\n if (toolbarItem.main) {\n element = element.parent('.' + SPLIT_BUTTON);\n type = 'splitButton';\n toolbarItem = element.data(type);\n }\n if (isResizable) {\n overflowItem = toolbarItem.twin();\n }\n } else if (isResizable) {\n element = this.popup.element.find(candidate);\n type = element.length ? element.data('type') : '';\n overflowItem = element.data(type);\n if (overflowItem && overflowItem.main) {\n element = element.parent('.' + SPLIT_BUTTON);\n type = 'splitButton';\n overflowItem = element.data(type);\n }\n }\n return {\n type: type,\n toolbar: toolbarItem,\n overflow: overflowItem\n };\n },\n remove: function (candidate) {\n var item = this._getItem(candidate);\n if (item.toolbar) {\n item.toolbar.remove();\n }\n if (item.overflow) {\n item.overflow.remove();\n }\n this.resize(true);\n },\n hide: function (candidate) {\n var item = this._getItem(candidate);\n var buttonGroupInstance;\n if (item.toolbar) {\n if (item.toolbar.options.type === 'button' && item.toolbar.options.isChild) {\n buttonGroupInstance = item.toolbar.getParentGroup();\n item.toolbar.hide();\n if (buttonGroupInstance) {\n buttonGroupInstance.refresh();\n }\n } else if (!item.toolbar.options.hidden) {\n item.toolbar.hide();\n }\n }\n if (item.overflow) {\n if (item.overflow.options.type === 'button' && item.overflow.options.isChild) {\n buttonGroupInstance = item.overflow.getParentGroup();\n item.overflow.hide();\n if (buttonGroupInstance) {\n buttonGroupInstance.refresh();\n }\n } else if (!item.overflow.options.hidden) {\n item.overflow.hide();\n }\n }\n this.resize(true);\n },\n show: function (candidate) {\n var item = this._getItem(candidate);\n 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' + ns, '.' + BUTTON, function (e) {\n var target = $(e.target), li = target.parent(), isComplexTool = li.is('.' + BUTTON_GROUP) || li.is('.' + SPLIT_BUTTON), element;\n e.preventDefault();\n if (e.keyCode === keys.ESC || e.keyCode === keys.TAB || e.altKey && e.keyCode === keys.UP) {\n that._toggleOverflow();\n that.overflowAnchor.focus();\n } else if (e.keyCode === keys.DOWN) {\n element = !isComplexTool || isComplexTool && target.is(':last-child') ? li : target;\n findFocusableSibling(element, 'next').focus();\n } else if (e.keyCode === keys.UP) {\n element = !isComplexTool || isComplexTool && target.is(':first-child') ? li : target;\n findFocusableSibling(element, 'prev').focus();\n } else if (e.keyCode === keys.SPACEBAR || e.keyCode === keys.ENTER) {\n that.userEvents.trigger('tap', { target: $(e.target) });\n that.overflowAnchor.focus();\n } else if (e.keyCode === keys.HOME) {\n li.parent().find(':kendoFocusable').first().focus();\n } else if (e.keyCode === keys.END) {\n li.parent().find(':kendoFocusable').last().focus();\n }\n });\n if (that.isMobile) {\n that.popup.container = that.popup.element.find('.' + OVERFLOW_CONTAINER);\n } else {\n that.popup.container = that.popup.element;\n }\n that.popup.container.attr(KENDO_UID_ATTR, this.uid);\n },\n _toggleOverflowAnchor: function () {\n var hasVisibleChildren = false;\n var paddingEnd = this._isRtl ? 'padding-left' : 'padding-right';\n if (this.options.mobile) {\n hasVisibleChildren = this.popup.element.find('.' + OVERFLOW_CONTAINER).children(':not(.' + OVERFLOW_HIDDEN + ', .' + POPUP + ')').length > 0;\n } else {\n hasVisibleChildren = this.popup.element.children(':not(.' + OVERFLOW_HIDDEN + ', .' + POPUP + ')').length > 0;\n }\n if (hasVisibleChildren) {\n this.overflowAnchor.css({\n visibility: 'visible',\n width: ''\n });\n this.wrapper.css(paddingEnd, this.overflowAnchor.outerWidth(true));\n } else {\n this.overflowAnchor.css({\n visibility: 'hidden',\n width: '1px'\n });\n this.wrapper.css(paddingEnd, '');\n }\n },\n _buttonClick: function (e) {\n var that = this, popup, target, item, splitContainer, isSplitButtonArrow = e.target.closest('.' + SPLIT_BUTTON_ARROW).length, handler, eventData, urlTarget;\n e.preventDefault();\n if (isSplitButtonArrow) {\n that._toggle(e);\n return;\n }\n target = $(e.target).closest('.' + BUTTON, that.element);\n if (target.hasClass(OVERFLOW_ANCHOR)) {\n return;\n }\n item = target.data('button');\n if (!item && that.popup) {\n target = $(e.target).closest('.' + OVERFLOW_BUTTON, that.popup.container);\n item = target.parent('li').data('button');\n }\n if (!item || !item.options.enable) {\n return;\n }\n if (item.options.togglable) {\n handler = isFunction(item.toggleHandler) ? item.toggleHandler : null;\n item.toggle(!item.options.selected, true);\n eventData = {\n target: target,\n group: item.options.group,\n checked: item.options.selected,\n id: item.options.id,\n item: item\n };\n if (handler) {\n handler.call(that, eventData);\n }\n that.trigger(TOGGLE, eventData);\n } else {\n handler = isFunction(item.clickHandler) ? item.clickHandler : null;\n eventData = {\n sender: that,\n target: target,\n id: item.options.id,\n item: item\n };\n if (handler) {\n handler.call(that, eventData);\n }\n that.trigger(CLICK, eventData);\n }\n if (item.options.url) {\n if (item.options.attributes && item.options.attributes.target) {\n urlTarget = item.options.attributes.target;\n }\n window.open(item.options.url, urlTarget || '_self');\n }\n if (target.hasClass(OVERFLOW_BUTTON)) {\n that.popup.close();\n }\n splitContainer = target.closest('.k-split-container');\n if (splitContainer[0]) {\n popup = splitContainer.data('kendoPopup');\n (popup ? popup : splitContainer.parents('.km-popup-wrapper').data('kendoPopup')).close();\n }\n },\n _navigatable: function () {\n var that = this;\n that.element.attr('tabindex', 0).on('focusin' + ns, function (ev) {\n var target = $(ev.target);\n var element = $(this).find(':kendoFocusable:first');\n if (!target.is('.' + TOOLBAR) || element.length === 0) {\n return;\n }\n if (element.is('.' + OVERFLOW_ANCHOR)) {\n element = findFocusableSibling(element, 'next');\n }\n if (element.length) {\n element[0].focus();\n }\n }).on('keydown' + ns, proxy(that._keydown, that));\n },\n _keydown: function (e) {\n var target = $(e.target), keyCode = e.keyCode, items = this.element.children(':not(.k-separator):visible'), direction = this._isRtl ? -1 : 1;\n if (keyCode === keys.TAB) {\n var element = target.parentsUntil(this.element).last(), lastHasFocus = false, firstHasFocus = false, isOnlyOverflowAnchor = false;\n if (!items.not('.' + OVERFLOW_ANCHOR).length) {\n isOnlyOverflowAnchor = true;\n }\n if (!element.length) {\n element = target;\n }\n if (element.is('.' + OVERFLOW_ANCHOR) && !isOnlyOverflowAnchor) {\n var lastItemNotOverflowAnchor = items.last();\n if (e.shiftKey) {\n e.preventDefault();\n }\n if (lastItemNotOverflowAnchor.is(':kendoFocusable')) {\n items.last().focus();\n } else {\n items.last().find(':kendoFocusable').last().focus();\n }\n }\n if (!e.shiftKey && items.index(element) === items.length - 1) {\n if (element.is('.' + BUTTON_GROUP)) {\n lastHasFocus = target.is(':last-child');\n } else {\n lastHasFocus = true;\n }\n }\n var isFirstTool = items.index(element) === items.not('.k-overflow-anchor').first().index();\n if (e.shiftKey && isFirstTool) {\n if (element.is('.' + BUTTON_GROUP)) {\n firstHasFocus = target.is(':first-child');\n } else {\n firstHasFocus = true;\n }\n }\n if (lastHasFocus && this.overflowAnchor && this.overflowAnchor.css('visibility') !== 'hidden' && !isOnlyOverflowAnchor) {\n e.preventDefault();\n this.overflowAnchor.focus();\n }\n if (firstHasFocus || isOnlyOverflowAnchor && e.shiftKey) {\n e.preventDefault();\n var prevFocusable = this._getPrevFocusable(this.wrapper);\n if (prevFocusable) {\n prevFocusable.focus();\n }\n }\n this._preventNextFocus = false;\n }\n if (e.altKey && keyCode === keys.DOWN) {\n var splitButton = $(document.activeElement).data('splitButton');\n var isOverflowAnchor = $(document.activeElement).is('.' + OVERFLOW_ANCHOR);\n if (splitButton) {\n splitButton.toggle();\n } else if (isOverflowAnchor) {\n this._toggleOverflow();\n }\n return;\n }\n if ((keyCode === keys.SPACEBAR || keyCode === keys.ENTER) && !target.is('input, checkbox')) {\n if (keyCode === keys.SPACEBAR) {\n e.preventDefault();\n }\n if (target.is('.' + SPLIT_BUTTON)) {\n target = target.children().first();\n this.userEvents.trigger('tap', { target: target });\n } else if (keyCode === keys.SPACEBAR) {\n this.userEvents.trigger('tap', { target: target });\n }\n return;\n }\n if (keyCode === keys.HOME) {\n if (target.is('.k-dropdown') || target.is('input')) {\n return;\n }\n if (this.overflowAnchor) {\n items.eq(1).focus();\n } else {\n items.first().focus();\n }\n e.preventDefault();\n } else if (keyCode === keys.END) {\n if (target.is('.k-dropdown') || target.is('input')) {\n return;\n }\n if (this.overflowAnchor && $(this.overflowAnchor).css('visibility') != 'hidden') {\n this.overflowAnchor.focus();\n } else {\n items.last().focus();\n }\n e.preventDefault();\n } else if (keyCode === keys.RIGHT && !this._preventNextFocus && !target.is('input, select, .k-dropdown, .k-colorpicker') && this._getNextElement(e.target, 1 * direction)) {\n this._getNextElement(e.target, 1 * direction).focus();\n e.preventDefault();\n } else if (keyCode === keys.LEFT && !this._preventNextFocus && !target.is('input, select, .k-dropdown, .k-colorpicker') && this._getNextElement(e.target, -1 * direction)) {\n this._getNextElement(e.target, -1 * direction).focus();\n e.preventDefault();\n }\n },\n _getNextElement: function (item, direction) {\n var items = this.element.children(':not(.k-separator):visible');\n var itemIndex = items.index(item) === -1 ? items.index(item.parentElement) : items.index(item);\n var startIndex = this.overflowAnchor ? 1 : 0;\n var directionNumber = direction;\n var searchIndex = direction === 1 ? items.length - 1 : startIndex;\n var index = direction === 1 ? startIndex : items.length - 1;\n var focusableItem = items[itemIndex + direction];\n this._preventNextFocus = false;\n if ($(item).closest('.' + BUTTON_GROUP).length && !$(item).is(direction === 1 ? ':last-child' : ':first-child')) {\n return $(item).closest('.' + BUTTON_GROUP).children()[$(item).closest('.' + BUTTON_GROUP).children().index(item) + direction];\n }\n if (this.overflowAnchor && item === this.overflowAnchor[0] && direction === -1) {\n focusableItem = items[items.length - 1];\n }\n if (itemIndex === searchIndex) {\n focusableItem = !this.overflowAnchor || this.overflowAnchor && $(this.overflowAnchor).css('visibility') === 'hidden' ? items[index] : this.overflowAnchor;\n }\n while (!$(focusableItem).is(':kendoFocusable')) {\n if (direction === -1 && $(focusableItem).closest('.' + BUTTON_GROUP).length) {\n focusableItem = $(focusableItem).children(':not(label, div)').last();\n } else {\n focusableItem = $(focusableItem).children(':not(label, div)').first();\n }\n if (!focusableItem.length) {\n directionNumber = directionNumber + direction;\n focusableItem = items[itemIndex + directionNumber];\n if (!focusableItem) {\n return this.overflowAnchor;\n }\n }\n this._preventNextFocus = $(focusableItem).closest('.' + BUTTON_GROUP).length ? false : true;\n }\n return focusableItem;\n },\n _getPrevFocusable: function (element) {\n if (element.is('html')) {\n return element;\n }\n var elementToFocus, prevElement, prevElements = element.prevAll();\n prevElements.each(function () {\n prevElement = $(this);\n if (prevElement.is(':kendoFocusable')) {\n elementToFocus = prevElement;\n return false;\n } else if (prevElement.find(':kendoFocusable').length > 0) {\n elementToFocus = prevElement.find(':kendoFocusable').last();\n return false;\n }\n });\n if (elementToFocus) {\n return elementToFocus;\n } else {\n return this._getPrevFocusable(element.parent());\n }\n },\n _toggle: function (e) {\n var splitButton = $(e.target).closest('.' + SPLIT_BUTTON).data('splitButton');\n e.preventDefault();\n if (!splitButton.options.enable) {\n return;\n }\n splitButton.toggle();\n },\n _toggleOverflow: function () {\n this.popup.toggle();\n },\n _resize: function (e) {\n var containerWidth = e.width;\n if (!this.options.resizable) {\n return;\n }\n this.popup.close();\n this._shrink(containerWidth);\n this._stretch(containerWidth);\n this._markVisibles();\n this._toggleOverflowAnchor();\n },\n _childrenWidth: function () {\n var childrenWidth = 0;\n this.element.children(':visible:not(.' + STATE_HIDDEN + ', .' + SPACER_CLASS + ')').each(function () {\n childrenWidth += outerWidth($(this), true);\n });\n return Math.ceil(childrenWidth);\n },\n _shrink: function (containerWidth) {\n var commandElement, visibleCommands;\n if (containerWidth < this._childrenWidth()) {\n visibleCommands = this.element.children(':visible:not([data-overflow=\\'never\\'], .' + OVERFLOW_ANCHOR + ')');\n for (var i = visibleCommands.length - 1; i >= 0; i--) {\n commandElement = visibleCommands.eq(i);\n if (containerWidth > this._childrenWidth()) {\n break;\n } else {\n this._hideItem(commandElement);\n }\n }\n }\n },\n _stretch: function (containerWidth) {\n var commandElement, hiddenCommands;\n if (containerWidth > this._childrenWidth()) {\n hiddenCommands = this.element.children(':hidden:not(\\'.' + STATE_HIDDEN + '\\')');\n for (var i = 0; i < hiddenCommands.length; i++) {\n commandElement = hiddenCommands.eq(i);\n if (containerWidth < this._childrenWidth() || !this._showItem(commandElement, containerWidth)) {\n break;\n }\n }\n }\n },\n _hideItem: function (item) {\n item.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', BLUR = 'blur', FOCUS = 'focus', FOCUSOUT = 'focusout', extend = $.extend, proxy = $.proxy, isArray = $.isArray, browser = support.browser, HIDDENCLASS = 'k-hidden', WIDTH = 'width', isIE = browser.msie, isIE8 = isIE && browser.version < 9, quotRegExp = /\"/g, alternativeNames = {\n 'ComboBox': [\n 'DropDownList',\n 'MultiColumnComboBox'\n ],\n 'DropDownList': [\n 'ComboBox',\n 'MultiColumnComboBox'\n ],\n 'MultiColumnComboBox': [\n 'ComboBox',\n 'DropDownList'\n ]\n };\n var List = kendo.ui.DataBoundWidget.extend({\n init: function (element, options) {\n var that = this, ns = that.ns, id;\n Widget.fn.init.call(that, element, options);\n element = that.element;\n options = that.options;\n that._isSelect = element.is(SELECT);\n if (that._isSelect && that.element[0].length) {\n if (!options.dataSource) {\n options.dataTextField = options.dataTextField || 'text';\n options.dataValueField = options.dataValueField || 'value';\n }\n }\n that.ul = $('
            ').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: true,\n messages: {\n 'noData': 'No data found.',\n 'clear': 'clear'\n }\n },\n setOptions: function (options) {\n Widget.fn.setOptions.call(this, options);\n if (options && options.enable !== undefined) {\n options.enabled = options.enable;\n }\n if (options.columns && options.columns.length) {\n this._columnsHeader();\n }\n this._header();\n this._noData();\n this._footer();\n this._renderFooter();\n this._renderNoData();\n },\n focus: function () {\n this._focused.focus();\n },\n readonly: function (readonly) {\n this._editable({\n readonly: readonly === undefined ? true : readonly,\n disable: false\n });\n },\n enable: function (enable) {\n this._editable({\n readonly: false,\n disable: !(enable = enable === undefined ? true : enable)\n });\n },\n _header: function () {\n var list = this;\n var header = $(list.header);\n var template = list.options.headerTemplate;\n this._angularElement(header, 'cleanup');\n kendo.destroy(header);\n header.remove();\n if (!template) {\n list.header = null;\n return;\n }\n var headerTemplate = typeof template !== 'function' ? kendo.template(template) : template;\n header = $(headerTemplate({}));\n list.header = header[0] ? header : null;\n list.list.prepend(header);\n this._angularElement(list.header, 'compile');\n },\n _columnsHeader: function () {\n var list = this;\n var columnsHeader = $(list.columnsHeader);\n this._angularElement(columnsHeader, 'cleanup');\n kendo.destroy(columnsHeader);\n columnsHeader.remove();\n var header = '
            ';\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 === true ? list.options.messages.noData : list.options.noDataTemplate;\n list.angular('cleanup', function () {\n return { elements: noData };\n });\n kendo.destroy(noData);\n noData.remove();\n if (!template) {\n list.noData = null;\n return;\n }\n list.noData = $('
            ').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.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 _refreshScroll: function () {\n var listView = this.listView;\n var enableYScroll = listView.element.height() > listView.content.height();\n if (this.options.autoWidth) {\n listView.content.css({\n overflowX: 'hidden',\n overflowY: enableYScroll ? 'scroll' : 'auto'\n });\n }\n },\n _resizePopup: function (force) {\n if (this.options.virtual) {\n return;\n }\n if (!this.popup.element.is(':visible')) {\n this.popup.one('open', function (force) {\n return proxy(function () {\n this._calculatePopupHeight(force);\n }, this);\n }.call(this, force));\n this.popup.one('activate', proxy(this._refreshScroll, this));\n } else {\n this._calculatePopupHeight(force);\n }\n },\n _popup: function () {\n var list = this;\n list.popup = new ui.Popup(list.list, extend({}, list.options.popup, {\n anchor: list.wrapper,\n open: proxy(list._openHandler, list),\n close: proxy(list._closeHandler, list),\n animation: list.options.animation,\n isRtl: support.isRtl(list.wrapper),\n autosize: list.options.autoWidth\n }));\n },\n _makeUnselectable: function () {\n if (isIE8) {\n this.list.find('*').not('.k-textbox').attr('unselectable', 'on');\n }\n },\n _toggleHover: function (e) {\n $(e.currentTarget).toggleClass(HOVER, e.type === 'mouseenter');\n },\n _toggle: function (open, preventFocus) {\n var that = this;\n var touchEnabled = support.mobileOS && (support.touch || support.MSPointers || support.pointers);\n open = open !== undefined ? open : !that.popup.visible();\n if (!preventFocus && !touchEnabled && that._focused[0] !== activeElement()) {\n that._prevent = true;\n that._focused.focus();\n that._prevent = false;\n }\n that[open ? OPEN : CLOSE]();\n },\n _triggerCascade: function () {\n var that = this;\n if (!that._cascadeTriggered || that.value() !== unifyType(that._cascadedValue, typeof that.value())) {\n that._cascadedValue = that.value();\n that._cascadeTriggered = true;\n that.trigger(CASCADE, { userTriggered: that._userTriggered });\n }\n },\n _triggerChange: function () {\n if (this._valueBeforeCascade !== this.value()) {\n this.trigger(CHANGE);\n }\n },\n _unbindDataSource: function () {\n var that = this;\n that.dataSource.unbind(REQUESTSTART, that._requestStartHandler).unbind(REQUESTEND, that._requestEndHandler).unbind('error', that._errorHandler);\n },\n requireValueMapper: function (options, value) {\n var hasValue = (options.value instanceof Array ? options.value.length : options.value) || (value instanceof Array ? value.length : value);\n if (hasValue && options.virtual && typeof options.virtual.valueMapper !== 'function') {\n throw new Error('ValueMapper is not provided while the value is being set. See http://docs.telerik.com/kendo-ui/controls/editors/combobox/virtualization#the-valuemapper-function');\n }\n }\n });\n function unifyType(value, type) {\n if (value !== undefined && value !== '' && value !== null) {\n if (type === 'boolean') {\n if (typeof value !== 'boolean') {\n value = value.toLowerCase() === 'true';\n }\n value = Boolean(value);\n } else if (type === 'number') {\n value = Number(value);\n } else if (type === 'string') {\n value = value.toString();\n }\n }\n return value;\n }\n extend(List, {\n inArray: function (node, parentNode) {\n var idx, length, siblings = parentNode.children;\n if (!node || node.parentNode !== parentNode) {\n return -1;\n }\n for (idx = 0, length = siblings.length; idx < length; idx++) {\n if (node === siblings[idx]) {\n return idx;\n }\n }\n return -1;\n },\n unifyType: unifyType\n });\n kendo.ui.List = List;\n ui.Select = List.extend({\n init: function (element, options) {\n List.fn.init.call(this, element, options);\n this._initial = this.element.val();\n },\n setDataSource: function (dataSource) {\n var that = this;\n var parent;\n that.options.dataSource = dataSource;\n that._dataSource();\n if (that.listView.bound()) {\n that._initialIndex = null;\n that.listView._current = null;\n }\n that.listView.setDataSource(that.dataSource);\n if (that.options.autoBind) {\n that.dataSource.fetch();\n }\n parent = that._parentWidget();\n if (parent) {\n that._cascadeSelect(parent);\n }\n },\n close: function () {\n this.popup.close();\n },\n select: function (candidate) {\n var that = this;\n if (candidate === undefined) {\n return that.selectedIndex;\n } else {\n return that._select(candidate).done(function () {\n that._cascadeValue = that._old = that._accessor();\n that._oldIndex = that.selectedIndex;\n });\n }\n },\n _accessor: function (value, idx) {\n return this[this._isSelect ? '_accessorSelect' : '_accessorInput'](value, idx);\n },\n _accessorInput: function (value) {\n var element = this.element[0];\n if (value === undefined) {\n return element.value;\n } else {\n if (value === null) {\n value = '';\n }\n element.value = value;\n }\n },\n _accessorSelect: function (value, idx) {\n var element = this.element[0];\n var hasValue;\n if (value === undefined) {\n return getSelectedOption(element).value || '';\n }\n getSelectedOption(element).selected = false;\n if (idx === undefined) {\n idx = -1;\n }\n hasValue = value !== null && value !== '';\n if (hasValue && idx == -1) {\n this._custom(value);\n } else {\n if (value) {\n element.value = value;\n } else {\n element.selectedIndex = idx;\n }\n }\n },\n _syncValueAndText: function () {\n return true;\n },\n _custom: function (value) {\n var that = this;\n var element = that.element;\n var custom = that._customOption;\n if (!custom) {\n custom = $('
            ').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 uiSelectedIndices = [this.element.find('.k-state-selected').index()];\n var added = [];\n var removed = [];\n var result;\n if (indices === undefined) {\n return selectedIndices.slice();\n }\n indices = that._get(indices);\n if (indices.length === 1 && indices[0] === -1) {\n indices = [];\n }\n var deferred = $.Deferred().resolve();\n var filtered = that.isFiltered();\n if (filtered && !singleSelection && that._deselectFiltered(indices)) {\n return deferred;\n }\n if (singleSelection && !filtered && $.inArray(last(indices), selectedIndices) !== -1 && $.inArray(last(indices), uiSelectedIndices) !== -1) {\n if (that._dataItems.length && that._view.length) {\n that._dataItems = [that._view[selectedIndices[0]].item];\n }\n return deferred;\n }\n result = that._deselect(indices);\n removed = result.removed;\n indices = result.indices;\n if (indices.length) {\n if (singleSelection) {\n indices = [last(indices)];\n }\n added = that._select(indices);\n }\n if (added.length || removed.length) {\n that._valueComparer = null;\n that.trigger(CHANGE, {\n added: added,\n removed: removed\n });\n }\n return deferred;\n },\n removeAt: function (position) {\n this._selectedIndices.splice(position, 1);\n this._values.splice(position, 1);\n this._valueComparer = null;\n return {\n position: position,\n dataItem: this._dataItems.splice(position, 1)[0]\n };\n },\n setValue: function (value) {\n value = $.isArray(value) || value instanceof ObservableArray ? value.slice(0) : [value];\n this._values = value;\n this._valueComparer = null;\n },\n value: function (value) {\n var that = this;\n var deferred = that._valueDeferred;\n var indices;\n if (value === undefined) {\n return that._values.slice();\n }\n that.setValue(value);\n if (!deferred || deferred.state() === 'resolved') {\n that._valueDeferred = deferred = $.Deferred();\n }\n if (that.bound()) {\n indices = that._valueIndices(that._values);\n if (that.options.selectable === 'multiple') {\n that.select(-1);\n }\n that.select(indices);\n deferred.resolve();\n }\n that._skipUpdate = false;\n return deferred;\n },\n items: function () {\n return this.element.children(ITEMSELECTOR);\n },\n _click: function (e) {\n if (this._touchTriggered) {\n this._touchTriggered = false;\n return;\n }\n if (!e.isDefaultPrevented()) {\n this._triggerClick(e.currentTarget);\n }\n },\n _triggerClick: function (item) {\n if (!this.trigger('click', { item: $(item) })) {\n this.select(item);\n }\n },\n _valueExpr: function (type, values) {\n var that = this;\n var idx = 0;\n var body;\n var comparer;\n var normalized = [];\n if (!that._valueComparer || that._valueType !== type) {\n that._valueType = type;\n for (; idx < values.length; idx++) {\n normalized.push(unifyType(values[idx], type));\n }\n body = 'for (var idx = 0; idx < ' + normalized.length + '; idx++) {' + ' if (current === values[idx]) {' + ' return idx;' + ' }' + '} ' + 'return -1;';\n comparer = new Function('current', 'values', body);\n that._valueComparer = function (current) {\n return comparer(current, normalized);\n };\n }\n return that._valueComparer;\n },\n _dataItemPosition: function (dataItem, values) {\n var value = this._valueGetter(dataItem);\n var valueExpr = this._valueExpr(typeof value, values);\n return valueExpr(value);\n },\n _getter: function () {\n this._valueGetter = kendo.getter(this.options.dataValueField);\n },\n _deselect: function (indices) {\n var that = this;\n var children = that.element[0].children;\n var selectable = that.options.selectable;\n var selectedIndices = that._selectedIndices;\n var dataItems = that._dataItems;\n var values = that._values;\n var removed = [];\n var i = 0;\n var j;\n var index, selectedIndex;\n var removedIndices = 0;\n indices = indices.slice();\n if (selectable === true || !indices.length) {\n for (; i < selectedIndices.length; i++) {\n $(children[selectedIndices[i]]).removeClass('k-state-selected').attr('aria-selected', false);\n removed.push({\n position: i,\n dataItem: dataItems[i]\n });\n }\n that._values = [];\n that._dataItems = [];\n that._selectedIndices = [];\n } else if (selectable === 'multiple') {\n for (; i < indices.length; i++) {\n index = indices[i];\n if (!$(children[index]).hasClass('k-state-selected')) {\n continue;\n }\n for (j = 0; j < selectedIndices.length; j++) {\n selectedIndex = selectedIndices[j];\n if (selectedIndex === index) {\n $(children[selectedIndex]).removeClass('k-state-selected').attr('aria-selected', false);\n 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.toString().length) {\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 = kendo.unescape(options.url);\n that.options.disableDates = getDisabledExpr(that.options.disableDates);\n that._templates();\n that._selectable();\n that._header();\n that._viewWrapper();\n 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 + ' touchend', CELLSELECTOR, function (e) {\n var link = e.currentTarget.firstChild, value = toDateObject(link);\n if (link.href.indexOf('#') != -1) {\n e.preventDefault();\n }\n if (that._view.name == 'month' && that.options.disableDates(value)) {\n return;\n }\n if (that._view.name != 'month' || options.selectable == 'single') {\n that._click($(link));\n }\n }).on('mouseup' + ns, 'table.k-content, .k-footer', function () {\n that._focusView(that.options.focusOnNav !== false);\n }).attr(ID);\n if (id) {\n that._cellID = id + '_cell_selected';\n }\n if (that._isMultipleSelection() && that.options.weekNumber) {\n element.on(CLICK, WEEKCOLUMNSELECTOR, function (e) {\n var first = $(e.currentTarget).closest('tr').find(CELLSELECTORVALID).first(), last = that.selectable._lastActive = $(e.currentTarget).closest('tr').find(CELLSELECTORVALID).last();\n that.selectable.selectRange(first, last, { event: e });\n that._current = that._value = toDateObject(last.find('a'));\n that._class(FOCUSED, that._current);\n });\n }\n normalize(options);\n value = parse(options.value, options.format, options.culture);\n that._selectDates = [];\n that._index = views[options.start];\n that._current = new DATE(+restrictValue(value, options.min, options.max));\n that._addClassProxy = function () {\n that._active = true;\n if (that._cell.hasClass(DISABLED)) {\n var todayString = that._view.toDateString(getToday());\n that._cell = that._cellByDate(todayString);\n }\n that._cell.addClass(FOCUSED);\n };\n that._removeClassProxy = function () {\n that._active = false;\n that._cell.removeClass(FOCUSED);\n };\n that.value(value);\n if (that._isMultipleSelection() && options.selectDates.length > 0) {\n that.selectDates(options.selectDates);\n }\n kendo.notify(that);\n },\n options: {\n name: 'Calendar',\n value: null,\n min: new DATE(1900, 0, 1),\n max: new DATE(2099, 11, 31),\n dates: [],\n disableDates: null,\n url: '',\n culture: '',\n footer: '',\n format: '',\n month: {},\n weekNumber: false,\n selectable: 'single',\n selectDates: [],\n start: MONTH,\n depth: MONTH,\n animation: {\n horizontal: {\n effects: SLIDE,\n reverse: true,\n duration: 500,\n divisor: 2\n },\n vertical: {\n effects: 'zoomIn',\n duration: 400\n }\n },\n messages: { 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 that._destroySelectable();\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(CELLSELECTORVALID + ':first').find('a')), lastDateInView = toDateObject(that._cellsBySelector(CELLSELECTORVALID + ':last').find('a'));\n return +date <= +lastDateInView && +date >= +firstDateInView;\n },\n _isNavigatable: function (currentValue, cellIndex) {\n var that = this;\n var isDisabled = that.options.disableDates;\n var cell;\n var index;\n if (that._view.name == 'month') {\n return !isDisabled(currentValue);\n } else {\n index = that.wrapper.find('.' + FOCUSED).index();\n cell = that.wrapper.find('.k-content td:eq(' + (index + cellIndex) + ')');\n return cell.is(CELLSELECTORVALID) || !isDisabled(currentValue);\n }\n },\n _move: function (e) {\n var that = this, options = that.options, key = e.keyCode, view = that._view, index = that._index, min = that.options.min, max = that.options.max, currentValue = new DATE(+that._current), isRtl = kendo.support.isRtl(that.wrapper), isDisabled = that.options.disableDates, value, prevent, method, temp;\n if (e.target === that._table[0]) {\n that._active = true;\n }\n if (key == keys.RIGHT && !isRtl || key == keys.LEFT && isRtl) {\n value = 1;\n prevent = true;\n } else if (key == keys.LEFT && !isRtl || key == keys.RIGHT && isRtl) {\n value = -1;\n prevent = true;\n } else if (key == keys.UP) {\n value = index === 0 ? -7 : -4;\n prevent = true;\n } else if (key == keys.DOWN) {\n value = index === 0 ? 7 : 4;\n prevent = true;\n } else if (key == keys.SPACEBAR) {\n value = 0;\n prevent = true;\n } else if (key == keys.HOME || key == keys.END) {\n method = key == keys.HOME ? 'first' : 'last';\n temp = view[method](currentValue);\n currentValue = new DATE(temp.getFullYear(), temp.getMonth(), temp.getDate(), currentValue.getHours(), currentValue.getMinutes(), currentValue.getSeconds(), currentValue.getMilliseconds());\n currentValue.setFullYear(temp.getFullYear());\n prevent = true;\n }\n if (e.ctrlKey || e.metaKey) {\n if (key == keys.RIGHT && !isRtl || key == keys.LEFT && isRtl) {\n that.navigateToFuture();\n prevent = true;\n } else if (key == keys.LEFT && !isRtl || key == keys.RIGHT && isRtl) {\n that.navigateToPast();\n prevent = true;\n } else if (key == keys.UP) {\n that.navigateUp();\n prevent = true;\n } else if (key == keys.DOWN) {\n that._click($(that._cell[0].firstChild));\n prevent = true;\n } else if ((key == keys.ENTER || key == keys.SPACEBAR) && that._isMultipleSelection()) {\n that._keyboardToggleSelection(e);\n var focusedDate = toDateObject($(that._cell[0]).find('a'));\n that._class(FOCUSED, focusedDate);\n }\n } else if (e.shiftKey) {\n if (value !== undefined || method) {\n if (!method) {\n view.setDate(currentValue, value);\n }\n if (!isInRange(currentValue, min, max)) {\n currentValue = restrictValue(currentValue, options.min, options.max);\n }\n if (isDisabled(currentValue)) {\n currentValue = that._nextNavigatable(currentValue, value);\n }\n min = createDate(min.getFullYear(), min.getMonth(), min.getDate());\n if (that._isMultipleSelection()) {\n that._keyboardRangeSelection(e, currentValue);\n } else {\n that._focus(currentValue);\n }\n }\n } else {\n if (key == keys.ENTER || key == keys.SPACEBAR) {\n if (view.name == 'month' && that._isMultipleSelection()) {\n that.value(toDateObject($(that._cell.find('a'))));\n that.selectable._lastActive = $(that._cell[0]);\n that.trigger(CHANGE);\n } else {\n that._click($(that._cell[0].firstChild));\n }\n prevent = true;\n } else if (key == keys.PAGEUP) {\n prevent = true;\n that.navigateToPast();\n } else if (key == keys.PAGEDOWN) {\n prevent = true;\n that.navigateToFuture();\n }\n if (value || method) {\n if (!method) {\n view.setDate(currentValue, value);\n }\n min = createDate(min.getFullYear(), min.getMonth(), min.getDate());\n if (!isInRange(currentValue, min, max)) {\n currentValue = restrictValue(currentValue, options.min, options.max);\n }\n if (!that._isNavigatable(currentValue, value)) {\n currentValue = that._nextNavigatable(currentValue, value);\n }\n if (that._isMultipleSelection()) {\n if (!that._dateInView(currentValue)) {\n that.navigate(currentValue);\n } else {\n that._current = currentValue;\n that._class(FOCUSED, currentValue);\n }\n } else {\n that._focus(currentValue);\n }\n }\n }\n if (prevent) {\n e.preventDefault();\n }\n return that._current;\n },\n _keyboardRangeSelection: function (event, currentValue) {\n var that = this, fromDate, daysDifference;\n if (!that._dateInView(currentValue)) {\n that._selectDates = [];\n fromDate = that.selectable._lastActive ? toDateObject(that.selectable._lastActive.find('a')) : currentValue;\n daysDifference = daysBetweenTwoDates(fromDate, new Date(+currentValue));\n addDaysToArray(that._selectDates, daysDifference, fromDate, that.options.disableDates);\n that.navigate(currentValue);\n that._current = currentValue;\n that.selectable._lastActive = that.selectable._lastActive || that._cellByDate(that._view.toDateString(currentValue), CELLSELECTORVALID);\n that.trigger(CHANGE);\n return;\n }\n that.selectable.options.filter = that.wrapper.find('table').length > 1 && +currentValue > +that._current ? 'table.k-month:eq(1) ' + CELLSELECTORVALID : 'table.k-month:eq(0) ' + CELLSELECTORVALID;\n that._class(FOCUSED, currentValue);\n that._current = currentValue;\n that._rangeSelection(that._cellByDate(that._view.toDateString(currentValue), CELLSELECTORVALID), currentValue);\n that.trigger(CHANGE);\n that.selectable.options.filter = 'table.k-month:eq(0) ' + CELLSELECTORVALID;\n },\n _keyboardToggleSelection: function (event) {\n var that = this;\n event.currentTarget = that._cell[0];\n that.selectable._lastActive = $(that._cell[0]);\n if ($(that._cell[0]).hasClass(SELECTED)) {\n that.selectable._unselect($(that._cell[0]));\n that.selectable.trigger(CHANGE, { event: event });\n } else {\n that.selectable.value($(that._cell[0]), { event: event });\n }\n },\n _nextNavigatable: function (currentValue, value) {\n var that = this, disabled = true, view = that._view, min = that.options.min, max = that.options.max, isDisabled = that.options.disableDates, navigatableDate = new Date(currentValue.getTime());\n view.setDate(navigatableDate, -value);\n while (disabled) {\n view.setDate(currentValue, value);\n if (!isInRange(currentValue, min, max)) {\n currentValue = navigatableDate;\n break;\n }\n disabled = isDisabled(currentValue);\n }\n return currentValue;\n },\n _animate: function (options) {\n var that = this;\n var from = options.from;\n var to = options.to;\n var active = that._active;\n var viewWrapper = that.element.children('.k-calendar-view');\n if (!from) {\n viewWrapper.append(to);\n that._bindTable(to);\n } else if (from.parent().data('animating')) {\n from.off(ns);\n from.parent().kendoStop(true, true).remove();\n from.remove();\n viewWrapper.append(to);\n that._focusView(active);\n } else if (!from.is(':visible') || that.options.animation === false || options.replace) {\n to.insertAfter(from);\n from.off(ns).remove();\n that._focusView(active);\n } else {\n that[options.vertical ? '_vertical' : '_horizontal'](from, to, options.future);\n }\n },\n _horizontal: function (from, to, future) {\n var that = this, active = that._active, horizontal = that.options.animation.horizontal, effects = horizontal.effects, viewWidth = outerWidth(from);\n if (effects && effects.indexOf(SLIDE) != -1) {\n from.add(to).css({ width: viewWidth });\n from.wrap('
            ');\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 + ' touchend' + ns, function () {\n return false;\n });\n that._title = links.eq(1).on(CLICK + ' touchend' + ns, function () {\n that._active = that.options.focusOnNav !== false;\n that.navigateUp();\n });\n that[PREVARROW] = links.eq(0).on(CLICK + ' touchend' + ns, function () {\n that._active = that.options.focusOnNav !== false;\n that.navigateToPast();\n });\n that[NEXTARROW] = links.eq(2).on(CLICK + ' touchend' + ns, 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).removeClass('input-validation-error');\n that.wrapper[0].style.cssText = element[0].style.cssText;\n element.css({\n width: '100%',\n height: element[0].style.height\n });\n }\n that._inputWrapper = $(that.wrapper[0]);\n $('').insertAfter(element);\n that._form();\n that.element.addClass(insidePicker ? ' ' : 'k-textbox').attr('autocomplete', 'off').on('focusout' + ns, function () {\n that._change();\n });\n try {\n element[0].setAttribute('type', 'text');\n } catch (e) {\n element[0].type = 'text';\n }\n var disabled = element.is('[disabled]') || $(that.element).parents('fieldset').is(':disabled');\n if (disabled) {\n that.enable(false);\n } else {\n that.readonly(element.is('[readonly]'));\n }\n that.value(that.options.value || element.val());\n kendo.notify(that);\n },\n options: {\n name: 'DateInput',\n culture: '',\n value: '',\n format: '',\n min: new Date(1900, 0, 1),\n max: new Date(2099, 11, 31),\n messages: {\n 'year': 'year',\n 'month': 'month',\n 'day': 'day',\n 'weekday': 'day of the week',\n 'hour': 'hours',\n 'minute': 'minutes',\n 'second': 'seconds',\n 'dayperiod': 'AM/PM'\n }\n },\n events: [CHANGE],\n min: function (value) {\n if (value !== undefined) {\n this.options.min = value;\n } else {\n return this.options.min;\n }\n },\n max: function (value) {\n if (value !== undefined) {\n this.options.max = value;\n } else {\n return this.options.max;\n }\n },\n setOptions: function (options) {\n var that = this;\n Widget.fn.setOptions.call(that, options);\n this._unbindInput();\n this._bindInput();\n this._updateElementValue();\n },\n destroy: function () {\n var that = this;\n that.element.off(ns);\n if (that._formElement) {\n that._formElement.off('reset', that._resetHandler);\n }\n Widget.fn.destroy.call(that);\n },\n value: function (value) {\n if (value === undefined) {\n return this._dateTime.getDateObject();\n }\n if (value === null) {\n value = '';\n }\n if (objectToString.call(value) !== '[object Date]') {\n value = kendo.parseDate(value, this.options.format, this.options.culture);\n }\n if (value && !value.getTime()) {\n value = null;\n }\n this._dateTime = new customDateTime(value, this.options.format, this.options.culture, this.options.messages);\n this._updateElementValue();\n this._oldValue = value;\n },\n _updateElementValue: function () {\n var stringAndFromat = this._dateTime.toPair(this.options.format, this.options.culture, this.options.messages);\n this.element.val(stringAndFromat[0]);\n this._oldText = stringAndFromat[0];\n this._format = stringAndFromat[1];\n },\n readonly: function (readonly) {\n this._editable({\n readonly: readonly === undefined ? true : readonly,\n disable: false\n });\n },\n enable: function (enable) {\n this._editable({\n readonly: false,\n disable: !(enable = enable === undefined ? true : enable)\n });\n },\n _bindInput: function () {\n var that = this;\n that.element.on('focusout' + ns, function () {\n that._change();\n }).on('paste' + ns, proxy(that._paste, that)).on('keydown' + ns, proxy(that._keydown, that)).on(INPUT_EVENT_NAME, proxy(that._input, that)).on('mouseup' + ns, proxy(that._mouseUp, that)).on('DOMMouseScroll' + ns + ' mousewheel' + ns, proxy(that._scroll, that));\n },\n _unbindInput: function () {\n this.element.off('keydown' + ns).off('paste' + ns).off('focusout' + ns).off(INPUT_EVENT_NAME).off('mouseup' + ns).off('DOMMouseScroll' + ns + ' mousewheel' + ns);\n },\n _editable: function (options) {\n var that = this;\n var element = that.element;\n var disable = options.disable;\n var readonly = options.readonly;\n var wrapper = that.wrapper;\n that._unbindInput();\n if (!readonly && !disable) {\n wrapper.addClass(STATEDEFAULT).removeClass(STATEDISABLED);\n if (element && element.length) {\n element[0].removeAttribute(DISABLED);\n element[0].removeAttribute(READONLY);\n }\n that._bindInput();\n } else {\n if (disable) {\n wrapper.addClass(STATEDISABLED).removeClass(STATEDEFAULT);\n element.attr(DISABLED, disable);\n if (element && element.length) {\n element[0].removeAttribute(READONLY);\n }\n }\n if (readonly) {\n element.attr(READONLY, readonly);\n }\n }\n },\n _change: function () {\n var that = this;\n var oldValue = that._oldValue;\n var value = that.value();\n if (value && that.min() && value < that.min()) {\n that.value(that.min());\n value = that.value();\n }\n if (value && that.max() && value > that.max()) {\n that.value(that.max());\n value = that.value();\n }\n if (oldValue && value && value.getTime() !== oldValue.getTime() || oldValue && !value || !oldValue && value) {\n that._oldValue = value;\n that.trigger(CHANGE);\n that.element.trigger(CHANGE);\n }\n },\n _input: function () {\n var that = this;\n var element = that.element[0];\n var blinkInvalid = false;\n if (kendo._activeElement() !== element) {\n return;\n }\n var diff = approximateStringMatching(this._oldText, this._format, this.element[0].value, caret(this.element[0])[0]);\n var navigationOnly = diff.length === 1 && diff[0][1] === ' ';\n if (!navigationOnly) {\n for (var i = 0; i < diff.length; i++) {\n var valid = this._dateTime.parsePart(diff[i][0], diff[i][1]);\n blinkInvalid = blinkInvalid || !valid;\n }\n }\n this._updateElementValue();\n if (diff.length && diff[0][0] !== ' ') {\n this._selectSegment(diff[0][0]);\n if (!navigationOnly) {\n var difSym = diff[0][0];\n setTimeout(function () {\n that._selectSegment(difSym);\n });\n }\n }\n if (navigationOnly) {\n var newEvent = {\n keyCode: 39,\n preventDefault: function () {\n }\n };\n this._keydown(newEvent);\n }\n if (blinkInvalid) {\n clearTimeout(that._blinkInvalidTimeout);\n var stateInvalid = STATEINVALID;\n that.wrapper.addClass(STATEINVALID);\n that._blinkInvalidTimeout = setTimeout(function () {\n that.wrapper.removeClass(stateInvalid);\n }, 100);\n }\n },\n _mouseUp: function () {\n var selection = caret(this.element[0]);\n if (selection[0] === selection[1]) {\n this._selectNearestSegment();\n }\n },\n _scroll: function (e) {\n if (kendo._activeElement() !== this.element[0] || this.element.is('[readonly]')) {\n return;\n }\n e = window.event || e;\n var newEvent = {\n keyCode: 37,\n preventDefault: function () {\n }\n };\n if (e.shiftKey) {\n newEvent.keyCode = (e.wheelDelta || -e.detail) > 0 ? 37 : 39;\n } else {\n newEvent.keyCode = (e.wheelDelta || -e.detail) > 0 ? 38 : 40;\n }\n this._keydown(newEvent);\n e.returnValue = false;\n if (e.preventDefault) {\n e.preventDefault();\n }\n if (e.stopPropagation) {\n e.stopPropagation();\n }\n },\n _form: function () {\n var that = this;\n var element = that.element;\n var formId = element.attr('form');\n var form = formId ? $('#' + formId) : element.closest('form');\n var initialValue = element[0].value;\n if (!initialValue && that.options.value) {\n initialValue = that.options.value;\n }\n if (form[0]) {\n that._resetHandler = function () {\n setTimeout(function () {\n that.value(initialValue);\n });\n };\n that._formElement = form.on('reset', that._resetHandler);\n }\n },\n _paste: function (e) {\n e.preventDefault();\n },\n _keydown: function (e) {\n var key = e.keyCode;\n var selection;\n if (key == 37 || key == 39) {\n e.preventDefault();\n selection = caret(this.element[0]);\n if (selection[0] != selection[1]) {\n this._selectNearestSegment();\n }\n var dir = key == 37 ? -1 : 1;\n var index = dir == -1 ? caret(this.element[0])[0] - 1 : caret(this.element[0])[1] + 1;\n while (index >= 0 && index < this._format.length) {\n if (knownSymbols.indexOf(this._format[index]) >= 0) {\n this._selectSegment(this._format[index]);\n break;\n }\n index += dir;\n }\n }\n if (key == 38 || key == 40) {\n e.preventDefault();\n selection = caret(this.element[0]);\n var symbol = this._format[selection[0]];\n if (knownSymbols.indexOf(symbol) >= 0) {\n var interval = 1;\n if (symbol == 'm') {\n interval = this.options.interval || 1;\n }\n this._dateTime.modifyPart(symbol, key == 38 ? interval * 1 : interval * -1);\n this._updateElementValue();\n this._selectSegment(symbol);\n this.element.trigger(CHANGE);\n }\n }\n if (kendo.support.browser.msie && kendo.support.browser.version < 10) {\n var keycode = e.keyCode ? e.keyCode : e.which;\n if (keycode === 8 || keycode === 46) {\n var that = this;\n setTimeout(function () {\n that._input();\n }, 0);\n }\n }\n if (key === keys.ENTER) {\n this._change();\n }\n },\n _selectNearestSegment: function () {\n var selection = caret(this.element[0]);\n var start = selection[0];\n for (var i = start, j = start - 1; i < this._format.length || j >= 0; i++, j--) {\n if (i < this._format.length && knownSymbols.indexOf(this._format[i]) !== -1) {\n this._selectSegment(this._format[i]);\n return;\n }\n if (j >= 0 && knownSymbols.indexOf(this._format[j]) !== -1) {\n this._selectSegment(this._format[j]);\n return;\n }\n }\n },\n _selectSegment: function (symbol) {\n var begin = -1, end = 0;\n for (var i = 0; i < this._format.length; i++) {\n if (this._format[i] === symbol) {\n end = i + 1;\n if (begin === -1) {\n begin = i;\n }\n }\n }\n if (begin < 0) {\n begin = 0;\n }\n caret(this.element, begin, end);\n }\n });\n ui.plugin(DateInput);\n var customDateTime = function (initDate, initFormat, initCulture, initMessages) {\n var value = null;\n var year = true, month = true, date = true, hours = true, minutes = true, seconds = true, milliseconds = true;\n var typedMonthPart = '';\n var typedDayPeriodPart = '';\n var placeholders = {};\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000'\n ];\n function pad(number, digits, end) {\n number = number + '';\n digits = digits || 2;\n end = digits - number.length;\n if (end) {\n return zeros[digits].substring(0, end) + number;\n }\n return number;\n }\n var dateFormatRegExp = /dddd|ddd|dd|d|MMMM|MMM|MM|M|yyyy|yy|HH|H|hh|h|mm|m|fff|ff|f|tt|ss|s|zzz|zz|z|\"[^\"]*\"|'[^']*'/g;\n var months = null, calendar = null, days = null, returnsFormat = false;\n var matcher = function (match) {\n var mins, sign;\n var result;\n switch (match) {\n case 'd':\n result = date ? value.getDate() : placeholders.day;\n break;\n case 'dd':\n result = date ? pad(value.getDate()) : placeholders.day;\n break;\n case 'ddd':\n result = date && month && year ? days.namesAbbr[value.getDay()] : placeholders.weekday;\n break;\n case 'dddd':\n result = date && month && year ? days.names[value.getDay()] : placeholders.weekday;\n break;\n case 'M':\n result = month ? value.getMonth() + 1 : placeholders.month;\n break;\n case 'MM':\n result = month ? pad(value.getMonth() + 1) : placeholders.month;\n break;\n case 'MMM':\n result = month ? months.namesAbbr[value.getMonth()] : placeholders.month;\n break;\n case 'MMMM':\n result = month ? months.names[value.getMonth()] : placeholders.month;\n break;\n case 'yy':\n result = year ? pad(value.getFullYear() % 100) : placeholders.year;\n break;\n case 'yyyy':\n result = year ? pad(value.getFullYear(), 4) : placeholders.year;\n break;\n case 'h':\n result = hours ? value.getHours() % 12 || 12 : placeholders.hour;\n break;\n case 'hh':\n result = hours ? pad(value.getHours() % 12 || 12) : placeholders.hour;\n break;\n case 'H':\n result = hours ? value.getHours() : placeholders.hour;\n break;\n case 'HH':\n result = hours ? pad(value.getHours()) : placeholders.hour;\n break;\n case 'm':\n result = minutes ? value.getMinutes() : placeholders.minute;\n break;\n case 'mm':\n result = minutes ? pad(value.getMinutes()) : placeholders.minute;\n break;\n case 's':\n result = seconds ? value.getSeconds() : placeholders.second;\n break;\n case 'ss':\n result = seconds ? pad(value.getSeconds()) : placeholders.second;\n break;\n case 'f':\n result = milliseconds ? Math.floor(value.getMilliseconds() / 100) : milliseconds;\n break;\n case 'ff':\n result = value.getMilliseconds();\n if (result > 99) {\n result = Math.floor(result / 10);\n }\n result = milliseconds ? pad(result) : match;\n break;\n case 'fff':\n result = milliseconds ? pad(value.getMilliseconds(), 3) : match;\n break;\n case 'tt':\n result = hours ? value.getHours() < 12 ? calendar.AM[0] : calendar.PM[0] : placeholders.dayperiod;\n break;\n case 'zzz':\n mins = value.getTimezoneOffset();\n sign = mins < 0;\n result = Math.abs(mins / 60).toString().split('.')[0];\n mins = Math.abs(mins) - result * 60;\n result = (sign ? '+' : '-') + pad(result);\n result += ':' + pad(mins);\n break;\n case 'z':\n case 'zz':\n result = value.getTimezoneOffset() / 60;\n sign = result < 0;\n result = Math.abs(result).toString().split('.')[0];\n result = (sign ? '+' : '-') + (match === 'zz' ? pad(result) : result);\n break;\n }\n result = result !== undefined ? result : match.slice(1, match.length - 1);\n if (returnsFormat) {\n result = '' + result;\n var formatResult = '';\n if (match == 'ddd') {\n match = 'EEE';\n }\n if (match == 'dddd') {\n match = 'EEEE';\n }\n for (var i = 0; i < result.length; i++) {\n formatResult += match[0];\n }\n return formatResult;\n } else {\n return result;\n }\n };\n function generateMatcher(retFormat) {\n returnsFormat = retFormat;\n return matcher;\n }\n function setExisting(symbol, val) {\n switch (symbol) {\n case 'y':\n year = val;\n break;\n case 'M':\n month = val;\n if (!val) {\n value.setMonth(0);\n typedMonthPart = '';\n }\n break;\n case 'd':\n date = val;\n break;\n case 'H':\n case 'h':\n hours = val;\n if (!val) {\n typedDayPeriodPart = '';\n }\n break;\n case 'm':\n minutes = val;\n break;\n case 's':\n seconds = val;\n break;\n default:\n return;\n }\n }\n this.setValue = function (val) {\n date = val;\n };\n this.getValue = function () {\n return date;\n };\n this.modifyPart = function (symbol, offset) {\n var newValue = new Date(value && value.getTime ? value.getTime() : value);\n switch (symbol) {\n case 'y':\n newValue.setFullYear(newValue.getFullYear() + offset);\n break;\n case 'M':\n var newMonth = newValue.getMonth() + offset;\n newValue.setMonth(newMonth);\n if (newValue.getMonth() % 12 !== (newMonth + 12) % 12) {\n newValue.setDate(1);\n newValue.setMonth(newMonth);\n }\n break;\n case 'd':\n case 'E':\n newValue.setDate(newValue.getDate() + offset);\n break;\n case 'H':\n case 'h':\n newValue.setHours(newValue.getHours() + offset);\n break;\n case 'm':\n newValue.setMinutes(newValue.getMinutes() + offset);\n break;\n case 's':\n newValue.setSeconds(newValue.getSeconds() + offset);\n break;\n case 't':\n newValue.setHours((newValue.getHours() + 12) % 24);\n break;\n default:\n break;\n }\n if (newValue.getFullYear() > 0) {\n setExisting(symbol, true);\n value = newValue;\n }\n };\n this.parsePart = function (symbol, currentChar) {\n if (!currentChar) {\n setExisting(symbol, false);\n return true;\n }\n var newValue = new Date(value && value.getTime ? value.getTime() : value);\n var 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 if (this.calendar) {\n this.calendar._focus(date);\n }\n },\n value: function (value) {\n var that = this, calendar = that.calendar, options = that.options, disabledDate = options.disableDates;\n if (disabledDate && disabledDate(value)) {\n value = null;\n }\n that._value = value;\n that._current = new DATE(+restrictValue(value, options.min, options.max));\n if (calendar) {\n calendar.value(value);\n }\n },\n _click: function (e) {\n if (e.currentTarget.className.indexOf(SELECTED) !== -1) {\n this.calendar.trigger('change');\n this.close();\n }\n },\n _option: function (option, value) {\n var that = this;\n var calendar = that.calendar;\n that.options[option] = value;\n if (calendar) {\n calendar[option](value);\n }\n }\n };\n DateView.normalize = normalize;\n kendo.DateView = DateView;\n var DatePicker = Widget.extend({\n init: function (element, options) {\n var that = this, disabled, div;\n Widget.fn.init.call(that, element, options);\n element = that.element;\n options = that.options;\n options.disableDates = kendo.calendar.disabled(options.disableDates);\n options.min = parse(element.attr('min')) || parse(options.min);\n options.max = parse(element.attr('max')) || parse(options.max);\n normalize(options);\n that._initialOptions = extend({}, options);\n that._wrapper();\n that.dateView = new DateView(extend({}, options, {\n id: element.attr(ID),\n anchor: that.wrapper,\n change: function () {\n that._change(this.value());\n that.close();\n },\n close: function (e) {\n if (that.trigger(CLOSE)) {\n e.preventDefault();\n } else {\n element.attr(ARIA_EXPANDED, false);\n div.attr(ARIA_HIDDEN, true);\n }\n },\n open: function (e) {\n var options = that.options, date;\n if (that.trigger(OPEN)) {\n e.preventDefault();\n } else {\n if (that.element.val() !== that._oldText) {\n date = parse(element.val(), options.parseFormats, options.culture);\n that.dateView[date ? 'current' : 'value'](date);\n }\n element.attr(ARIA_EXPANDED, true);\n div.attr(ARIA_HIDDEN, false);\n that._updateARIA(date);\n }\n }\n }));\n div = that.dateView.div;\n that._icon();\n try {\n element[0].setAttribute('type', 'text');\n } catch (e) {\n element[0].type = 'text';\n }\n element.addClass('k-input').attr({\n role: 'combobox',\n 'aria-expanded': false,\n 'aria-owns': that.dateView._dateViewID,\n 'autocomplete': 'off'\n });\n that._reset();\n that._template();\n disabled = element.is('[disabled]') || $(that.element).parents('fieldset').is(':disabled');\n if (disabled) {\n that.enable(false);\n } else {\n that.readonly(element.is('[readonly]'));\n }\n that._createDateInput(options);\n that._old = that._update(options.value || that.element.val());\n that._oldText = element.val();\n kendo.notify(that);\n },\n events: [\n OPEN,\n CLOSE,\n CHANGE\n ],\n options: {\n name: 'DatePicker',\n value: null,\n footer: '',\n format: '',\n culture: '',\n parseFormats: [],\n min: new Date(1900, 0, 1),\n max: new Date(2099, 11, 31),\n start: MONTH,\n depth: MONTH,\n animation: {},\n month: {},\n dates: [],\n disableDates: null,\n ARIATemplate: 'Current focused date is #=kendo.toString(data.current, \"D\")#',\n dateInput: false,\n weekNumber: false\n },\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 if (!value) {\n that.dateView.current(kendo.calendar.getToday());\n }\n }\n that._inputWrapper.removeClass(FOCUSED);\n },\n _click: function (e) {\n var that = this;\n that.dateView.toggle();\n that._focusElement(e.type);\n },\n _focusElement: function (eventType) {\n var element = this.element;\n if ((!support.touch || support.mouseAndTouchPresent && !(eventType || '').match(/touch/i)) && element[0] !== activeElement()) {\n element.trigger('focus');\n }\n },\n _change: function (value) {\n var that = this, oldValue = that.element.val(), dateChanged;\n value = that._update(value);\n dateChanged = !kendo.calendar.isEqualDate(that._old, value);\n var valueUpdated = dateChanged && !that._typing;\n var textFormatted = oldValue !== that.element.val();\n if (valueUpdated || textFormatted) {\n that.element.trigger(CHANGE);\n }\n if (dateChanged) {\n that._old = value;\n that._oldText = that.element.val();\n that.trigger(CHANGE);\n }\n that._typing = false;\n },\n _keydown: function (e) {\n var that = this, dateView = that.dateView, value = that.element.val(), handled = false;\n if (!dateView.popup.visible() && e.keyCode == keys.ENTER && value !== that._oldText) {\n that._change(value);\n } else {\n handled = dateView.move(e);\n that._updateARIA(dateView._current);\n if (!handled) {\n that._typing = true;\n } else if (that._dateInput && e.stopImmediatePropagation) {\n e.stopImmediatePropagation();\n }\n }\n },\n _icon: function () {\n var that = this, element = that.element, icon;\n icon = element.next('span.k-select');\n if (!icon[0]) {\n icon = $('').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).removeClass('input-validation-error');\n that._inputWrapper = $(wrapper[0].firstChild);\n },\n _reset: function () {\n var that = this, element = that.element, formId = element.attr('form'), options = that.options, disabledDate = options.disableDates, parseFormats = options.parseFormats.length ? options.parseFormats : null, optionsValue = that._initialOptions.value, form = formId ? $('#' + formId) : element.closest('form'), initialValue = element[0].defaultValue;\n if (optionsValue && (disabledDate && disabledDate(optionsValue))) {\n optionsValue = null;\n }\n if ((!initialValue || !kendo.parseDate(initialValue, parseFormats, options.culture)) && optionsValue) {\n element.attr('value', kendo.toString(optionsValue, options.format, options.culture));\n }\n if (form[0]) {\n that._resetHandler = function () {\n that.value(optionsValue || element[0].defaultValue);\n that.max(that._initialOptions.max);\n that.min(that._initialOptions.min);\n };\n that._form = form.on('reset', that._resetHandler);\n }\n },\n _template: function () {\n this._ariaTemplate = template(this.options.ARIATemplate);\n },\n _createDateInput: function (options) {\n if (this._dateInput) {\n this._dateInput.destroy();\n this._dateInput = null;\n }\n if (options.dateInput) {\n this._dateInput = new ui.DateInput(this.element, {\n culture: options.culture,\n format: options.format,\n min: options.min,\n max: options.max\n });\n }\n },\n _updateARIA: function (date) {\n var cell;\n var that = this;\n var calendar = that.dateView.calendar;\n if (that.element && that.element.length) {\n that.element[0].removeAttribute('aria-activedescendant');\n }\n if (calendar) {\n cell = calendar._cell;\n cell.attr('aria-label', that._ariaTemplate({ current: date || calendar.current() }));\n that.element.attr('aria-activedescendant', cell.attr('id'));\n }\n }\n });\n ui.plugin(DatePicker);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.virtuallist', ['kendo.data'], f);\n}(function () {\n var __meta__ = {\n id: 'virtuallist',\n name: 'VirtualList',\n category: 'framework',\n depends: ['data'],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, Widget = ui.Widget, DataBoundWidget = ui.DataBoundWidget, proxy = $.proxy, percentageUnitsRegex = /^\\d+(\\.\\d+)?%$/i, WRAPPER = 'k-virtual-wrap', VIRTUALLIST = 'k-virtual-list', CONTENT = 'k-virtual-content', LIST = 'k-list', HEADER = 'k-group-header', VIRTUALITEM = 'k-virtual-item', ITEM = 'k-item', HEIGHTCONTAINER = 'k-height-container', GROUPITEM = 'k-group', SELECTED = 'k-state-selected', FOCUSED = 'k-state-focused', HOVER = 'k-state-hover', CHANGE = 'change', CLICK = 'click', LISTBOUND = 'listBound', ITEMCHANGE = 'itemChange', ACTIVATE = 'activate', DEACTIVATE = 'deactivate', VIRTUAL_LIST_NS = '.VirtualList';\n function lastFrom(array) {\n return array[array.length - 1];\n }\n function toArray(value) {\n return value instanceof Array ? value : [value];\n }\n function isPrimitive(dataItem) {\n return typeof dataItem === 'string' || typeof dataItem === 'number' || typeof dataItem === 'boolean';\n }\n function getItemCount(screenHeight, listScreens, itemHeight) {\n return Math.ceil(screenHeight * listScreens / itemHeight);\n }\n function appendChild(parent, className, tagName) {\n var element = document.createElement(tagName || 'div');\n if (className) {\n element.className = className;\n }\n parent.appendChild(element);\n return element;\n }\n function getDefaultItemHeight() {\n var mockList = $('
            '), 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 !== false && this._currentGroup !== item.group;\n this._currentGroup = item.group;\n }\n group = item ? item.group : null;\n item = item ? item.item : null;\n }\n if (this.options.mapValueTo === 'dataItem' && this._selectedDataItems.length && item) {\n for (var i = 0; i < this._selectedDataItems.length; i++) {\n match = valueGetter(this._selectedDataItems[i]) === valueGetter(item);\n if (match) {\n selected = true;\n break;\n }\n }\n } else if (!this.isFiltered() && value.length && item) {\n for (var j = 0; j < value.length; j++) {\n match = isPrimitive(item) ? value[j] === item : value[j] === valueGetter(item);\n if (match) {\n value.splice(j, 1);\n selected = true;\n break;\n }\n }\n }\n if (currentIndex === index) {\n current = true;\n }\n return {\n item: item ? item : null,\n group: group,\n newGroup: newGroup,\n selected: selected,\n current: current,\n index: index,\n top: index * itemHeight\n };\n },\n _range: function (index) {\n var itemCount = this.itemCount, value = this._values.slice(), items = [], item;\n this._view = {};\n this._currentGroup = false;\n for (var i = index, length = index + itemCount; i < length; i++) {\n item = this._itemMapper(this.getter(i, index), i, value);\n if (items[items.length - 1]) {\n items[items.length - 1].isLastGroupedItem = item.newGroup;\n }\n items.push(item);\n this._view[item.index] = item;\n }\n this._dataView = items;\n return items;\n },\n _getDataItemsCollection: function (scrollTop, lastScrollTop) {\n var items = this._range(this._listIndex(scrollTop, lastScrollTop));\n return {\n index: items.length ? items[0].index : 0,\n top: items.length ? items[0].top : 0,\n items: items\n };\n },\n _listItems: function () {\n var screenHeight = this._screenHeight, options = this.options;\n var theValidator = listValidator(options, screenHeight);\n return $.proxy(function (value, force) {\n var result = this.result, lastScrollTop = this._lastScrollTop;\n if (force || !result || !theValidator(result, value, lastScrollTop)) {\n result = this._getDataItemsCollection(value, lastScrollTop);\n }\n this._lastScrollTop = value;\n this.result = result;\n return result;\n }, this);\n },\n _whenChanged: function (getter, callback) {\n var current;\n return function (force) {\n var theNew = getter(force);\n if (theNew !== current) {\n current = theNew;\n callback(theNew, force);\n }\n };\n },\n _reorderList: function (list, reorder) {\n var that = this;\n var length = list.length;\n var currentOffset = -Infinity;\n reorder = $.proxy(map2(reorder, this.templates), this);\n return function (list2, offset, force) {\n var diff = offset - currentOffset;\n var range, range2;\n if (force || Math.abs(diff) >= length) {\n range = list;\n range2 = list2;\n } else {\n range = reshift(list, diff);\n range2 = diff > 0 ? list2.slice(-diff) : list2.slice(0, -diff);\n }\n reorder(range, range2, that.bound());\n currentOffset = offset;\n };\n },\n _bufferSizes: function () {\n var options = this.options;\n return bufferSizes(this._screenHeight, options.listScreens, options.oppositeBuffer);\n },\n _indexConstraint: function (position) {\n var itemCount = this.itemCount, itemHeight = this.options.itemHeight, total = this.dataSource.total();\n return Math.min(Math.max(total - itemCount, 0), Math.max(0, Math.floor(position / itemHeight)));\n },\n _listIndex: function (scrollTop, lastScrollTop) {\n var buffers = this._bufferSizes(), position;\n position = scrollTop - (scrollTop > lastScrollTop ? buffers.down : buffers.up);\n return this._indexConstraint(position);\n },\n _selectable: function () {\n if (this.options.selectable) {\n this._selectProxy = $.proxy(this, '_clickHandler');\n this.element.on(CLICK + VIRTUAL_LIST_NS, '.' + VIRTUALITEM, this._selectProxy);\n }\n },\n getElementIndex: function (element) {\n if (!(element instanceof jQuery)) {\n return undefined;\n }\n return parseInt(element.attr('data-offset-index'), 10);\n },\n _getIndecies: function (candidate) {\n var result = [], data;\n if (typeof candidate === 'function') {\n data = this.dataSource.flatView();\n for (var idx = 0; idx < data.length; idx++) {\n if (candidate(data[idx])) {\n result.push(idx);\n break;\n }\n }\n }\n if (typeof candidate === 'number') {\n result.push(candidate);\n }\n var elementIndex = this.getElementIndex(candidate);\n if (!isNaN(elementIndex)) {\n result.push(elementIndex);\n }\n if (candidate instanceof Array) {\n result = candidate;\n }\n return result;\n },\n _deselect: function (indices) {\n var removed = [], selectedIndex, dataItem, selectedIndexes = this._selectedIndexes, selectedDataItems = this._selectedDataItems, position = 0, selectable = this.options.selectable, removedindexesCounter = 0, valueGetter = this._valueGetter, item, match, result = null;\n indices = indices.slice();\n if (selectable === true || !indices.length) {\n for (var idx = 0; idx < selectedIndexes.length; idx++) {\n if (selectedIndexes[idx] !== undefined) {\n this._getElementByIndex(selectedIndexes[idx]).removeClass(SELECTED);\n } else if (selectedDataItems[idx]) {\n this._getElementByDataItem(selectedDataItems[idx]).removeClass(SELECTED);\n }\n removed.push({\n index: selectedIndexes[idx],\n position: idx,\n dataItem: selectedDataItems[idx]\n });\n }\n this._values = [];\n this._selectedDataItems = [];\n this._selectedIndexes = [];\n } else if (selectable === 'multiple') {\n for (var i = 0; i < indices.length; i++) {\n result = null;\n position = $.inArray(indices[i], selectedIndexes);\n dataItem = this.dataItemByIndex(indices[i]);\n if (position === -1 && dataItem) {\n for (var j = 0; j < selectedDataItems.length; j++) {\n match = isPrimitive(dataItem) ? selectedDataItems[j] === dataItem : valueGetter(selectedDataItems[j]) === valueGetter(dataItem);\n if (match) {\n item = this._getElementByIndex(indices[i]);\n result = this._deselectSingleItem(item, j, indices[i], removedindexesCounter);\n }\n }\n } else {\n selectedIndex = selectedIndexes[position];\n if (selectedIndex !== undefined) {\n item = this._getElementByIndex(selectedIndex);\n result = this._deselectSingleItem(item, position, selectedIndex, removedindexesCounter);\n }\n }\n if (result) {\n indices.splice(i, 1);\n removed.push(result);\n removedindexesCounter++;\n i--;\n }\n }\n }\n return {\n indices: indices,\n removed: removed\n };\n },\n _deselectSingleItem: function (item, position, selectedIndex, removedindexesCounter) {\n var dataItem;\n if (!item.hasClass('k-state-selected')) {\n return;\n }\n item.removeClass(SELECTED);\n this._values.splice(position, 1);\n this._selectedIndexes.splice(position, 1);\n dataItem = this._selectedDataItems.splice(position, 1)[0];\n return {\n index: selectedIndex,\n position: position + removedindexesCounter,\n dataItem: dataItem\n };\n },\n _deselectCurrentValues: function (indices) {\n var children = this.element[0].children;\n var value, index, position;\n var values = this._values;\n var removed = [];\n var idx = 0;\n var j;\n if (this.options.selectable !== 'multiple' || !this.isFiltered()) {\n return [];\n }\n if (indices[0] === -1) {\n $(children).removeClass('k-state-selected');\n removed = $.map(this._selectedDataItems.slice(0), function (dataItem, idx) {\n return {\n dataItem: dataItem,\n position: idx\n };\n });\n this._selectedIndexes = [];\n this._selectedDataItems = [];\n this._values = [];\n return removed;\n }\n for (; idx < indices.length; idx++) {\n position = -1;\n index = indices[idx];\n if (this.dataItemByIndex(index)) {\n value = this._valueGetter(this.dataItemByIndex(index));\n }\n for (j = 0; j < values.length; j++) {\n if (value == values[j]) {\n position = j;\n break;\n }\n }\n if (position > -1) {\n removed.push(this.removeAt(position));\n $(children[index]).removeClass('k-state-selected');\n }\n }\n return removed;\n },\n _getSkip: function (index, take) {\n var page = index < take ? 1 : Math.floor(index / take) + 1;\n return (page - 1) * take;\n },\n _select: function (indexes) {\n var that = this, singleSelection = this.options.selectable !== 'multiple', dataSource = this.dataSource, dataItem, oldSkip, take = this.itemCount, valueGetter = this._valueGetter, added = [];\n if (singleSelection) {\n that._selectedIndexes = [];\n that._selectedDataItems = [];\n that._values = [];\n }\n oldSkip = dataSource.skip();\n $.each(indexes, function (_, index) {\n var skip = that._getSkip(index, take);\n that.mute(function () {\n dataSource.range(skip, take);\n dataItem = that._findDataItem(dataSource.view(), [index - skip]);\n that._selectedIndexes.push(index);\n that._selectedDataItems.push(dataItem);\n that._values.push(isPrimitive(dataItem) ? dataItem : valueGetter(dataItem));\n added.push({\n index: index,\n dataItem: dataItem\n });\n that._getElementByIndex(index).addClass(SELECTED);\n dataSource.range(oldSkip, take);\n });\n });\n that._values = that._checkValuesOrder(that._values);\n return added;\n },\n _clickHandler: function (e) {\n var item = $(e.currentTarget);\n if (!e.isDefaultPrevented() && item.attr('data-uid')) {\n this.trigger(CLICK, { item: item });\n }\n },\n _buildValueGetter: function () {\n this._valueGetter = kendo.getter(this.options.dataValueField);\n },\n _calculateGroupPadding: function (height) {\n var firstItem = this.items().first(), groupHeader = this.header, padding = 0;\n if (groupHeader[0] && groupHeader[0].style.display !== 'none') {\n if (height !== 'auto') {\n padding = kendo.support.scrollbar();\n }\n padding += parseFloat(firstItem.css('border-right-width'), 10) + parseFloat(firstItem.children('.k-group').css('right'), 10);\n groupHeader.css('padding-right', padding);\n }\n },\n _calculateColumnsHeaderPadding: function () {\n if (this.options.columns && this.options.columns.length) {\n var isRtl = kendo.support.isRtl(this.wrapper);\n var scrollbar = kendo.support.scrollbar();\n var columnsHeader = this.content.parent().parent().find('.k-grid-header');\n var total = this.dataSource.total();\n columnsHeader.css(isRtl ? 'padding-left' : 'padding-right', total ? scrollbar : 0);\n }\n }\n });\n kendo.ui.VirtualList = VirtualList;\n kendo.ui.plugin(VirtualList);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.autocomplete', [\n 'kendo.list',\n 'kendo.mobile.scroller',\n 'kendo.virtuallist'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'autocomplete',\n name: 'AutoComplete',\n category: 'web',\n description: 'The AutoComplete widget provides suggestions depending on the typed text.It also allows multiple value entries.',\n depends: ['list'],\n features: [\n {\n id: 'mobile-scroller',\n name: 'Mobile scroller',\n description: 'Support for kinetic scrolling in mobile device',\n depends: ['mobile.scroller']\n },\n {\n id: 'virtualization',\n name: 'VirtualList',\n description: 'Support for virtualization',\n depends: ['virtuallist']\n }\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, support = kendo.support, caret = kendo.caret, activeElement = kendo._activeElement, placeholderSupported = support.placeholder, ui = kendo.ui, List = ui.List, keys = kendo.keys, DataSource = kendo.data.DataSource, ARIA_DISABLED = 'aria-disabled', ARIA_READONLY = 'aria-readonly', CHANGE = 'change', DEFAULT = 'k-state-default', DISABLED = 'disabled', READONLY = 'readonly', FOCUSED = 'k-state-focused', SELECTED = 'k-state-selected', STATEDISABLED = 'k-state-disabled', AUTOCOMPLETEVALUE = 'off', HOVER = 'k-state-hover', ns = '.kendoAutoComplete', HOVEREVENTS = 'mouseenter' + ns + ' mouseleave' + ns, proxy = $.proxy;\n function indexOfWordAtCaret(caretIdx, text, separator) {\n return separator ? text.substring(0, caretIdx).split(separator).length - 1 : 0;\n }\n function wordAtCaret(caretIdx, text, separator) {\n return text.split(separator)[indexOfWordAtCaret(caretIdx, text, separator)];\n }\n function replaceWordAtCaret(caretIdx, text, word, separator, defaultSeparator) {\n var words = text.split(separator);\n words.splice(indexOfWordAtCaret(caretIdx, text, separator), 1, word);\n if (separator && words[words.length - 1] !== '') {\n words.push('');\n }\n return words.join(defaultSeparator);\n }\n var AutoComplete = List.extend({\n init: function (element, options) {\n var that = this, wrapper, disabled;\n that.ns = ns;\n options = $.isArray(options) ? { dataSource: options } : options;\n List.fn.init.call(that, element, options);\n element = that.element;\n options = that.options;\n options.placeholder = options.placeholder || element.attr('placeholder');\n if (placeholderSupported) {\n element.attr('placeholder', options.placeholder);\n }\n that._wrapper();\n that._loader();\n that._clearButton();\n that._dataSource();\n that._ignoreCase();\n element[0].type = 'text';\n wrapper = that.wrapper;\n that._popup();\n element.addClass('k-input').on('keydown' + ns, proxy(that._keydown, that)).on('keypress' + ns, proxy(that._keypress, that)).on('input' + ns, proxy(that._search, that)).on('paste' + ns, proxy(that._search, that)).on('focus' + ns, function () {\n that._prev = that._accessor();\n that._oldText = that._prev;\n that._placeholder(false);\n wrapper.addClass(FOCUSED);\n }).on('focusout' + ns, function () {\n that._change();\n that._placeholder();\n that.close();\n wrapper.removeClass(FOCUSED);\n }).attr({\n autocomplete: AUTOCOMPLETEVALUE,\n role: 'textbox',\n 'aria-haspopup': true\n });\n that._clear.on('click' + ns + ' touchend' + ns, proxy(that._clearValue, that));\n that._enable();\n that._old = that._accessor();\n if (element[0].id) {\n element.attr('aria-owns', that.ul[0].id);\n }\n that._aria();\n that._placeholder();\n that._initList();\n disabled = $(that.element).parents('fieldset').is(':disabled');\n if (disabled) {\n that.enable(false);\n }\n that.listView.bind('click', function (e) {\n e.preventDefault();\n });\n that._resetFocusItemHandler = $.proxy(that._resetFocusItem, that);\n kendo.notify(that);\n that._toggleCloseVisibility();\n },\n options: {\n name: 'AutoComplete',\n enabled: true,\n suggest: false,\n template: '',\n groupTemplate: '#:data#',\n fixedGroupTemplate: '#:data#',\n dataTextField: '',\n minLength: 1,\n enforceMinLength: false,\n delay: 200,\n height: 200,\n filter: 'startswith',\n ignoreCase: true,\n highlightFirst: false,\n separator: null,\n placeholder: '',\n animation: {},\n virtual: false,\n value: null,\n clearButton: true,\n autoWidth: false,\n popup: null\n },\n _dataSource: function () {\n var that = this;\n if (that.dataSource && that._refreshHandler) {\n that._unbindDataSource();\n } else {\n that._progressHandler = proxy(that._showBusy, that);\n that._errorHandler = proxy(that._hideBusy, that);\n }\n that.dataSource = DataSource.create(that.options.dataSource).bind('progress', that._progressHandler).bind('error', that._errorHandler);\n },\n setDataSource: function (dataSource) {\n this.options.dataSource = dataSource;\n this._dataSource();\n this.listView.setDataSource(this.dataSource);\n },\n events: [\n 'open',\n 'close',\n CHANGE,\n 'select',\n 'filtering',\n 'dataBinding',\n 'dataBound'\n ],\n setOptions: function (options) {\n var listOptions = this._listOptions(options);\n List.fn.setOptions.call(this, options);\n this.listView.setOptions(listOptions);\n this._accessors();\n this._aria();\n this._clearButton();\n },\n _listOptions: function (options) {\n var listOptions = List.fn._listOptions.call(this, $.extend(options, { skipUpdateOnBind: true }));\n listOptions.dataValueField = listOptions.dataTextField;\n listOptions.selectedItemChange = null;\n return listOptions;\n },\n _editable: function (options) {\n var that = this, element = that.element, wrapper = that.wrapper.off(ns), readonly = options.readonly, disable = options.disable;\n if (!readonly && !disable) {\n wrapper.addClass(DEFAULT).removeClass(STATEDISABLED).on(HOVEREVENTS, that._toggleHover);\n element.removeAttr(DISABLED).removeAttr(READONLY).attr(ARIA_DISABLED, false).attr(ARIA_READONLY, false);\n } else {\n wrapper.addClass(disable ? STATEDISABLED : DEFAULT).removeClass(disable ? DEFAULT : STATEDISABLED);\n element.attr(DISABLED, disable).attr(READONLY, readonly).attr(ARIA_DISABLED, disable).attr(ARIA_READONLY, readonly);\n }\n },\n close: function () {\n var that = this;\n var current = that.listView.focus();\n if (current) {\n current.removeClass(SELECTED);\n }\n that.popup.close();\n },\n destroy: function () {\n var that = this;\n that.element.off(ns);\n that._clear.off(ns);\n that.wrapper.off(ns);\n List.fn.destroy.call(that);\n },\n refresh: function () {\n this.listView.refresh();\n },\n select: function (li) {\n this._select(li);\n },\n search: function (word) {\n var that = this, options = that.options, ignoreCase = options.ignoreCase, separator = that._separator(), length, accentFoldingFiltering = that.dataSource.options.accentFoldingFiltering;\n word = word || that._accessor();\n clearTimeout(that._typingTimeout);\n if (separator) {\n word = wordAtCaret(caret(that.element)[0], word, separator);\n }\n length = word.length;\n if (!options.enforceMinLength && !length || length >= options.minLength) {\n that._open = true;\n that._mute(function () {\n this.listView.value([]);\n });\n that._filterSource({\n value: ignoreCase ? accentFoldingFiltering ? word.toLocaleLowerCase(accentFoldingFiltering) : word.toLowerCase() : word,\n operator: options.filter,\n field: options.dataTextField,\n ignoreCase: ignoreCase\n });\n that.one('close', $.proxy(that._unifySeparators, that));\n }\n that._toggleCloseVisibility();\n },\n suggest: function (word) {\n var that = this, key = that._last, value = that._accessor(), element = that.element[0], caretIdx = caret(element)[0], separator = that._separator(), words = value.split(separator), wordIndex = indexOfWordAtCaret(caretIdx, value, separator), selectionEnd = caretIdx, idx, accentFoldingFiltering = that.dataSource.options.accentFoldingFiltering;\n if (key == keys.BACKSPACE || key == keys.DELETE) {\n that._last = undefined;\n return;\n }\n word = word || '';\n if (typeof word !== 'string') {\n if (word[0]) {\n word = that.dataSource.view()[List.inArray(word[0], that.ul[0])];\n }\n word = word ? that._text(word) : '';\n }\n if (caretIdx <= 0) {\n caretIdx = (accentFoldingFiltering ? value.toLocaleLowerCase(accentFoldingFiltering) : value.toLowerCase()).indexOf(accentFoldingFiltering ? word.toLocaleLowerCase(accentFoldingFiltering) : word.toLowerCase()) + 1;\n }\n idx = value.substring(0, caretIdx).lastIndexOf(separator);\n idx = idx > -1 ? caretIdx - (idx + separator.length) : caretIdx;\n value = words[wordIndex].substring(0, idx);\n if (word) {\n word = word.toString();\n idx = (accentFoldingFiltering ? word.toLocaleLowerCase(accentFoldingFiltering) : word.toLowerCase()).indexOf(accentFoldingFiltering ? value.toLocaleLowerCase(accentFoldingFiltering) : value.toLowerCase());\n if (idx > -1) {\n word = word.substring(idx + value.length);\n selectionEnd = caretIdx + word.length;\n value += word;\n }\n if (separator && words[words.length - 1] !== '') {\n words.push('');\n }\n }\n words[wordIndex] = value;\n that._accessor(words.join(separator || ''));\n if (element === activeElement()) {\n caret(element, caretIdx, selectionEnd);\n }\n },\n value: function (value) {\n if (value !== undefined) {\n this.listView.value(value);\n this._accessor(value);\n this._old = this._accessor();\n this._oldText = this._accessor();\n } else {\n return this._accessor();\n }\n this._toggleCloseVisibility();\n },\n _click: function (e) {\n var item = e.item;\n var that = this;\n var element = that.element;\n var dataItem = that.listView.dataItemByIndex(that.listView.getElementIndex(item));\n e.preventDefault();\n that._active = true;\n if (that.trigger('select', {\n dataItem: dataItem,\n item: item\n })) {\n that.close();\n return;\n }\n that._oldText = element.val();\n that._select(item).done(function () {\n that._blur();\n caret(element, element.val().length);\n });\n },\n _clearText: $.noop,\n _resetFocusItem: function () {\n var index = this.options.highlightFirst ? 0 : -1;\n if (this.options.virtual) {\n this.listView.scrollTo(0);\n }\n this.listView.focus(index);\n },\n _listBound: function () {\n var that = this;\n var popup = that.popup;\n var options = that.options;\n var data = that.dataSource.flatView();\n var length = data.length;\n var groupsLength = that.dataSource._group.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 && that._inputValue()) {\n that.suggest(data[0]);\n }\n }\n if (that._open) {\n that._open = false;\n action = that._allowOpening() ? 'open' : 'close';\n if (that._typingTimeout && !isActive) {\n action = 'close';\n }\n if (length) {\n that._resetFocusItem();\n if (options.virtual) {\n that.popup.unbind('activate', that._resetFocusItemHandler).one('activate', that._resetFocusItemHandler);\n }\n }\n popup[action]();\n that._typingTimeout = undefined;\n }\n if (that._touchScroller) {\n that._touchScroller.reset();\n }\n that._hideBusy();\n that._makeUnselectable();\n that.trigger('dataBound');\n },\n _mute: function (callback) {\n this._muted = true;\n callback.call(this);\n this._muted = false;\n },\n _listChange: function () {\n var isActive = this._active || this.element[0] === activeElement();\n if (isActive && !this._muted) {\n this._selectValue(this.listView.selectedDataItems()[0]);\n }\n },\n _selectValue: function (dataItem) {\n var separator = this._separator();\n var text = '';\n if (dataItem) {\n text = this._text(dataItem);\n }\n if (text === null) {\n text = '';\n }\n if (separator) {\n text = replaceWordAtCaret(caret(this.element)[0], this._accessor(), text, separator, this._defaultSeparator());\n }\n this._prev = text;\n this._accessor(text);\n this._placeholder();\n },\n _unifySeparators: function () {\n this._accessor(this.value().split(this._separator()).join(this._defaultSeparator()));\n return this;\n },\n _preselect: function (value, text) {\n this._inputValue(text);\n this._accessor(value);\n this._old = this.oldText = this._accessor();\n this.listView.setValue(value);\n this._placeholder();\n },\n _change: function () {\n var that = this;\n var value = that._unifySeparators().value();\n var trigger = value !== List.unifyType(that._old, typeof value);\n var valueUpdated = trigger && !that._typing;\n var itemSelected = that._oldText !== value;\n that._old = value;\n that._oldText = value;\n if (valueUpdated || itemSelected) {\n that.element.trigger(CHANGE);\n }\n if (trigger) {\n that.trigger(CHANGE);\n }\n that.typing = false;\n that._toggleCloseVisibility();\n },\n _accessor: function (value) {\n var that = this, element = that.element[0];\n if (value !== undefined) {\n element.value = value === null ? '' : value;\n that._placeholder();\n } else {\n value = element.value;\n if (element.className.indexOf('k-readonly') > -1) {\n if (value === that.options.placeholder) {\n return '';\n } else {\n return value;\n }\n }\n return value;\n }\n },\n _keydown: function (e) {\n var that = this;\n var key = e.keyCode;\n var listView = that.listView;\n var visible = that.popup.visible();\n var current = listView.focus();\n that._last = key;\n if (key === keys.DOWN) {\n if (visible) {\n this._move(current ? 'focusNext' : 'focusFirst');\n } else if (that.value()) {\n that._filterSource({\n value: that.ignoreCase ? that.value().toLowerCase() : that.value(),\n operator: that.options.filter,\n field: that.options.dataTextField,\n ignoreCase: that.ignoreCase\n }).done(function () {\n if (that._allowOpening()) {\n that._resetFocusItem();\n that.popup.open();\n }\n });\n }\n e.preventDefault();\n } else if (key === keys.UP) {\n if (visible) {\n this._move(current ? 'focusPrev' : 'focusLast');\n }\n e.preventDefault();\n } else if (key === keys.HOME) {\n this._move('focusFirst');\n } else if (key === keys.END) {\n this._move('focusLast');\n } else if (key === keys.ENTER || key === keys.TAB) {\n if (key === keys.ENTER && visible) {\n e.preventDefault();\n }\n if (visible && current) {\n var dataItem = listView.dataItemByIndex(listView.getElementIndex(current));\n if (that.trigger('select', {\n dataItem: dataItem,\n item: current\n })) {\n return;\n }\n this._select(current);\n }\n this._blur();\n } else if (key === keys.ESC) {\n if (visible) {\n e.preventDefault();\n } else {\n that._clearValue();\n }\n that.close();\n } else if (that.popup.visible() && (key === keys.PAGEDOWN || key === keys.PAGEUP)) {\n e.preventDefault();\n var direction = key === keys.PAGEDOWN ? 1 : -1;\n listView.scrollWith(direction * listView.screenHeight());\n } else {\n that.popup._hovered = true;\n that._search();\n }\n },\n _keypress: function () {\n this._oldText = this.element.val();\n this._typing = true;\n },\n _move: function (action) {\n this.listView[action]();\n if (this.options.suggest) {\n this.suggest(this.listView.focus());\n }\n },\n _hideBusy: function () {\n var that = this;\n clearTimeout(that._busy);\n that._loading.hide();\n that.element.attr('aria-busy', false);\n that._busy = null;\n that._showClear();\n },\n _showBusy: function () {\n var that = this;\n if (that._busy) {\n return;\n }\n that._busy = setTimeout(function () {\n that.element.attr('aria-busy', true);\n that._loading.show();\n that._hideClear();\n }, 100);\n },\n _placeholder: function (show) {\n if (placeholderSupported) {\n return;\n }\n var that = this, element = that.element, placeholder = that.options.placeholder, value;\n if (placeholder) {\n value = element.val();\n if (show === undefined) {\n show = !value;\n }\n if (!show) {\n if (value !== placeholder) {\n placeholder = value;\n } else {\n placeholder = '';\n }\n }\n if (value === that._old && !show) {\n return;\n }\n element.toggleClass('k-readonly', show).val(placeholder);\n if (!placeholder && element[0] === document.activeElement) {\n caret(element[0], 0, 0);\n }\n }\n },\n _separator: function () {\n var separator = this.options.separator;\n if (separator instanceof Array) {\n return new RegExp(separator.join('|'), 'gi');\n }\n return separator;\n },\n _defaultSeparator: function () {\n var separator = this.options.separator;\n if (separator instanceof Array) {\n return separator[0];\n }\n return separator;\n },\n _inputValue: function () {\n return this.element.val();\n },\n _search: function () {\n var that = this;\n clearTimeout(that._typingTimeout);\n that._typingTimeout = setTimeout(function () {\n if (that._prev !== that._accessor()) {\n that._prev = that._accessor();\n that.search();\n }\n }, that.options.delay);\n },\n _select: function (candidate) {\n var that = this;\n that._active = true;\n return that.listView.select(candidate).done(function () {\n that._active = false;\n });\n },\n _loader: function () {\n this._loading = $('').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).removeClass('input-validation-error');\n that._inputWrapper = $(wrapper[0]);\n },\n _clearValue: function () {\n List.fn._clearValue.call(this);\n this.element.focus();\n }\n });\n ui.plugin(AutoComplete);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.dropdownlist', [\n 'kendo.list',\n 'kendo.mobile.scroller',\n 'kendo.virtuallist'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'dropdownlist',\n name: 'DropDownList',\n category: 'web',\n description: 'The DropDownList widget displays a list of values and allows the selection of a single value from the list.',\n depends: ['list'],\n features: [\n {\n id: 'mobile-scroller',\n name: 'Mobile scroller',\n description: 'Support for kinetic scrolling in mobile device',\n depends: ['mobile.scroller']\n },\n {\n id: 'virtualization',\n name: 'VirtualList',\n description: 'Support for virtualization',\n depends: ['virtuallist']\n }\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, List = ui.List, Select = ui.Select, support = kendo.support, activeElement = kendo._activeElement, ObservableObject = kendo.data.ObservableObject, keys = kendo.keys, ns = '.kendoDropDownList', nsFocusEvent = ns + 'FocusEvent', DISABLED = 'disabled', READONLY = 'readonly', CHANGE = 'change', FOCUSED = 'k-state-focused', DEFAULT = 'k-state-default', STATEDISABLED = 'k-state-disabled', ARIA_DISABLED = 'aria-disabled', 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._blur();\n that._focusElement(that.wrapper);\n });\n },\n _focusElement: function (element) {\n var active = activeElement();\n var wrapper = this.wrapper;\n var filterInput = this.filterInput;\n var compareElement = element === filterInput ? wrapper : filterInput;\n var touchEnabled = support.mobileOS && (support.touch || support.MSPointers || support.pointers);\n if (filterInput && filterInput[0] === element[0] && touchEnabled) {\n return;\n }\n if (filterInput && (compareElement[0] === active || this._focusFilter)) {\n this._focusFilter = false;\n this._prevent = true;\n this._focused = element.focus();\n }\n },\n _searchByWord: function (word) {\n if (!word) {\n return;\n }\n var that = this;\n var ignoreCase = that.options.ignoreCase;\n if (ignoreCase) {\n word = word.toLowerCase();\n }\n that._select(function (dataItem) {\n return that._matchText(that._text(dataItem), word);\n });\n },\n _inputValue: function () {\n return this.text();\n },\n _search: function () {\n var that = this;\n var dataSource = that.dataSource;\n clearTimeout(that._typingTimeout);\n if (that._isFilterEnabled()) {\n that._typingTimeout = setTimeout(function () {\n var value = that.filterInput.val();\n if (that._prev !== value) {\n that._prev = value;\n that.search(value);\n that._resizeFilterInput();\n }\n that._typingTimeout = null;\n }, that.options.delay);\n } else {\n that._typingTimeout = setTimeout(function () {\n that._word = '';\n }, that.options.delay);\n if (!that.listView.bound()) {\n dataSource.fetch().done(function () {\n that._selectNext();\n });\n return;\n }\n that._selectNext();\n }\n },\n _get: function (candidate) {\n var data, found, idx;\n var isFunction = typeof candidate === 'function';\n var jQueryCandidate = !isFunction ? $(candidate) : $();\n if (this.hasOptionLabel()) {\n if (typeof candidate === 'number') {\n if (candidate > -1) {\n candidate -= 1;\n }\n } else if (jQueryCandidate.hasClass('k-list-optionlabel')) {\n candidate = -1;\n }\n }\n if (isFunction) {\n data = this.dataSource.flatView();\n for (idx = 0; idx < data.length; idx++) {\n if (candidate(data[idx])) {\n candidate = idx;\n found = true;\n break;\n }\n }\n if (!found) {\n candidate = -1;\n }\n }\n return candidate;\n },\n _firstItem: function () {\n if (this.hasOptionLabel()) {\n this._focus(this.optionLabel);\n } else {\n this.listView.focusFirst();\n }\n },\n _lastItem: function () {\n this._resetOptionLabel();\n this.listView.focusLast();\n },\n _nextItem: function () {\n 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).removeClass('input-validation-error').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', AUTOCOMPLETEVALUE = 'off', STATE_FILTER = 'filter', STATE_ACCEPT = 'accept', STATE_REBIND = 'rebind', HOVEREVENTS = 'mouseenter' + ns + ' mouseleave' + ns, proxy = $.proxy, newLineRegEx = /(\\r\\n|\\n|\\r)/gm;\n var ComboBox = Select.extend({\n init: function (element, options) {\n var that = this, text, disabled;\n that.ns = ns;\n options = $.isArray(options) ? { dataSource: options } : options;\n Select.fn.init.call(that, element, options);\n options = that.options;\n element = that.element.on('focus' + ns, proxy(that._focusHandler, that));\n options.placeholder = options.placeholder || element.attr('placeholder');\n that._reset();\n that._wrapper();\n that._input();\n that._clearButton();\n that._tabindex(that.input);\n that._popup();\n that._dataSource();\n that._ignoreCase();\n that._enable();\n that._attachFocusEvents();\n that._oldIndex = that.selectedIndex = -1;\n that._aria();\n that._initialIndex = options.index;\n that.requireValueMapper(that.options);\n that._initList();\n that._cascade();\n if (options.autoBind) {\n that._filterSource();\n } else {\n text = options.text;\n if (!text && that._isSelect) {\n text = element.children(':selected').text();\n }\n if (text) {\n that._setText(text);\n }\n }\n if (!text) {\n that._placeholder();\n }\n disabled = $(that.element).parents('fieldset').is(':disabled');\n if (disabled) {\n that.enable(false);\n }\n kendo.notify(that);\n that._toggleCloseVisibility();\n },\n options: {\n name: 'ComboBox',\n enabled: true,\n index: -1,\n text: null,\n value: null,\n autoBind: true,\n delay: 200,\n dataTextField: '',\n dataValueField: '',\n minLength: 1,\n enforceMinLength: false,\n height: 200,\n highlightFirst: true,\n filter: 'none',\n placeholder: '',\n suggest: false,\n cascadeFrom: '',\n cascadeFromField: '',\n cascadeFromParentField: '',\n ignoreCase: true,\n animation: {},\n virtual: false,\n template: null,\n groupTemplate: '#:data#',\n fixedGroupTemplate: '#:data#',\n clearButton: true,\n syncValueAndText: true,\n autoWidth: false,\n popup: null\n },\n events: [\n 'open',\n 'close',\n CHANGE,\n 'select',\n 'filtering',\n 'dataBinding',\n 'dataBound',\n 'cascade',\n 'set'\n ],\n setOptions: function (options) {\n var listOptions = this._listOptions(options);\n Select.fn.setOptions.call(this, options);\n this.listView.setOptions(listOptions);\n this._accessors();\n this._aria();\n this._clearButton();\n },\n destroy: function () {\n var that = this;\n that.input.off(ns);\n that.input.off(nsFocusEvent);\n that.element.off(ns);\n that.wrapper.off(ns);\n that._inputWrapper.off(ns);\n clearTimeout(that._pasteTimeout);\n that._arrow.off(CLICK + ' ' + MOUSEDOWN);\n that._clear.off(CLICK + ' ' + MOUSEDOWN);\n Select.fn.destroy.call(that);\n },\n _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));\n that.input.on('keydown' + ns, proxy(that._keydown, that)).on('input' + ns, proxy(that._search, that)).on('paste' + ns, proxy(that._inputPaste, that));\n that.wrapper.on(CLICK + ns, proxy(that._focusHandler, that));\n } else {\n wrapper.addClass(disable ? STATEDISABLED : DEFAULT).removeClass(disable ? DEFAULT : STATEDISABLED);\n input.attr(DISABLED, disable).attr(READONLY, readonly).attr(ARIA_DISABLED, disable);\n }\n that._toggleCloseVisibility();\n },\n open: function () {\n var that = this;\n var state = that._state;\n var isFiltered = that.dataSource.filter() ? that.dataSource.filter().filters.length > 0 : false;\n var reinitialized = !that.ul.find(that.listView.focus()).length;\n if (that.popup.visible()) {\n return;\n }\n if (!that.listView.bound() && state !== STATE_FILTER || state === STATE_ACCEPT) {\n that._open = true;\n that._state = STATE_REBIND;\n if (that.options.minLength !== 1 && !isFiltered || isFiltered && that.value() && that.selectedIndex === -1) {\n that.refresh();\n that._openPopup();\n if (!this.options.virtual) {\n that.listView.bound(false);\n }\n } else {\n that._filterSource();\n }\n } else if (that._allowOpening()) {\n that.popup._hovered = true;\n that._openPopup();\n if (that.options.virtual) {\n that._focusItem();\n } else if (reinitialized && that.options.highlightFirst) {\n that.listView.focus(0);\n }\n }\n },\n _scrollToFocusedItem: function () {\n var listView = this.listView;\n listView.scrollToIndex(listView.getElementIndex(listView.focus()));\n },\n _openPopup: function () {\n this.popup.one('activate', proxy(this._scrollToFocusedItem, this));\n this.popup.open();\n },\n _updateSelectionState: function () {\n var that = this;\n var text = that.options.text;\n var value = that.options.value;\n if (that.listView.isFiltered()) {\n return;\n }\n if (that.selectedIndex === -1) {\n if (text === undefined || text === null) {\n text = value;\n }\n that._accessor(value);\n that.input.val(text || that.input.val());\n that._placeholder();\n } else if (that._oldIndex === -1) {\n that._oldIndex = that.selectedIndex;\n }\n },\n _buildOptions: function (data) {\n var that = this;\n if (!that._isSelect) {\n return;\n }\n var custom = that._customOption;\n if (that._state === STATE_REBIND) {\n that._state = '';\n }\n that._customOption = undefined;\n that._options(data, '', that.value());\n if (custom && custom[0].selected && !that.listView._emptySearch) {\n that._custom(custom.val());\n }\n },\n _updateSelection: function () {\n var that = this;\n var listView = that.listView;\n var initialIndex = that._initialIndex;\n var hasInitialIndex = initialIndex !== null && initialIndex > -1;\n var filtered = that._state === STATE_FILTER;\n if (filtered) {\n $(listView.focus()).removeClass('k-state-selected');\n return;\n }\n if (that._fetch) {\n return;\n }\n if (!listView.value().length) {\n if (hasInitialIndex) {\n that.select(initialIndex);\n } else if (that._accessor()) {\n listView.value(that._accessor());\n }\n }\n that._initialIndex = null;\n var dataItem = listView.selectedDataItems()[0];\n if (!dataItem) {\n return;\n }\n if (that._value(dataItem) !== that.value()) {\n that._custom(that._value(dataItem));\n } else if (that._value(dataItem) !== that.element[0].value) {\n that._accessor(that._value(dataItem));\n }\n if (that.text() && that.text() !== that._text(dataItem)) {\n that._selectValue(dataItem);\n }\n },\n _updateItemFocus: function () {\n var listView = this.listView;\n if (!this.options.highlightFirst) {\n listView.focus(-1);\n } else if (!listView.focus() && !listView.focusIndex()) {\n listView.focus(0);\n }\n },\n _listBound: function () {\n var that = this;\n var isActive = that.input[0] === activeElement();\n var data = that.dataSource.flatView();\n var skip = that.listView.skip();\n var length = data.length;\n var groupsLength = that.dataSource._group ? that.dataSource._group.length : 0;\n var isFirstPage = skip === undefined || skip === 0;\n that._presetValue = false;\n that._renderFooter();\n that._renderNoData();\n that._toggleNoData(!length);\n that._toggleHeader(!!groupsLength && !!length);\n that._resizePopup();\n that.popup.position();\n that._buildOptions(data);\n that._makeUnselectable();\n that._updateSelection();\n if (data.length && isFirstPage) {\n that._updateItemFocus();\n if (that.options.suggest && isActive && that.input.val()) {\n that.suggest(data[0]);\n }\n }\n if (that._open) {\n that._open = false;\n if (that._typingTimeout && !isActive) {\n that.popup.close();\n } else {\n that.toggle(that._allowOpening());\n }\n that._typingTimeout = null;\n }\n that._hideBusy();\n that.trigger('dataBound');\n },\n _listChange: function () {\n this._selectValue(this.listView.selectedDataItems()[0]);\n if (this._presetValue) {\n this._oldIndex = this.selectedIndex;\n }\n },\n _get: function (candidate) {\n var data, found, idx;\n if (typeof candidate === 'function') {\n data = this.dataSource.flatView();\n for (idx = 0; idx < data.length; idx++) {\n if (candidate(data[idx])) {\n candidate = idx;\n found = true;\n break;\n }\n }\n if (!found) {\n candidate = -1;\n }\n }\n return candidate;\n },\n _select: function (candidate, keepState) {\n var that = this;\n candidate = that._get(candidate);\n if (candidate === -1) {\n that.input[0].value = '';\n that._accessor('');\n }\n return that.listView.select(candidate).done(function () {\n if (!keepState && that._state === STATE_FILTER) {\n that._state = STATE_ACCEPT;\n }\n that._toggleCloseVisibility();\n });\n },\n _selectValue: function (dataItem) {\n var idx = this.listView.select();\n var value = '';\n var text = '';\n idx = idx[idx.length - 1];\n if (idx === undefined) {\n idx = -1;\n }\n this.selectedIndex = idx;\n if (this.listView.isFiltered() && idx !== -1) {\n this._valueBeforeCascade = this._old;\n }\n if (idx === -1 && !dataItem) {\n if (this.options.syncValueAndText) {\n if (this.options.dataTextField === this.options.dataValueField) {\n text = this._accessor();\n } else {\n text = this.input[0].value;\n }\n value = text;\n } else {\n text = this.text();\n }\n this.listView.focus(-1);\n } else {\n if (dataItem || dataItem === 0) {\n value = this._dataValue(dataItem);\n text = this._text(dataItem);\n }\n if (value === null) {\n value = '';\n }\n }\n this._setDomInputValue(text);\n this._accessor(value !== undefined ? value : text, idx);\n this._placeholder();\n this._triggerCascade();\n },\n _setDomInputValue: function (text) {\n var that = this;\n var currentCaret = caret(this.input);\n var caretStart;\n if (currentCaret && currentCaret.length) {\n caretStart = currentCaret[0];\n }\n this._prev = this.input[0].value = text;\n if (caretStart && this.selectedIndex === -1) {\n var mobile = support.mobileOS;\n if (mobile.wp || mobile.android) {\n setTimeout(function () {\n that.input[0].setSelectionRange(caretStart, caretStart);\n }, 0);\n } else {\n this.input[0].setSelectionRange(caretStart, caretStart);\n }\n }\n },\n refresh: function () {\n this.listView.refresh();\n },\n _toggleCloseVisibility: function () {\n var preventShow = this.element.is(':disabled') || this.element.is('[readonly]');\n if (this.text() && !preventShow) {\n this._showClear();\n } else {\n this._hideClear();\n }\n },\n suggest: function (word) {\n var that = this;\n var element = that.input[0];\n var value = that.text();\n var caretIdx = caret(element)[0];\n var key = that._last;\n var idx;\n var accentFoldingFiltering = that.dataSource.options.accentFoldingFiltering;\n if (key == keys.BACKSPACE || key == keys.DELETE) {\n that._last = undefined;\n return;\n }\n word = word || '';\n if (typeof word !== 'string') {\n if (word[0]) {\n word = that.dataSource.view()[List.inArray(word[0], that.ul[0])];\n }\n word = word ? that._text(word) : '';\n }\n if (caretIdx <= 0) {\n caretIdx = (accentFoldingFiltering ? value.toLocaleLowerCase(accentFoldingFiltering) : value.toLowerCase()).indexOf(accentFoldingFiltering ? word.toLocaleLowerCase(accentFoldingFiltering) : word.toLowerCase()) + 1;\n }\n if (word) {\n word = word.toString();\n idx = (accentFoldingFiltering ? word.toLocaleLowerCase(accentFoldingFiltering) : word.toLowerCase()).indexOf(accentFoldingFiltering ? value.toLocaleLowerCase(accentFoldingFiltering) : value.toLowerCase());\n if (idx > -1) {\n value += word.substring(idx + value.length);\n }\n } else {\n value = value.substring(0, caretIdx);\n }\n if (value.length !== caretIdx || !word) {\n element.value = value;\n if (element === activeElement()) {\n caret(element, caretIdx, value.length);\n }\n }\n },\n text: function (text) {\n text = text === null ? '' : text;\n var that = this;\n var input = that.input[0];\n var ignoreCase = that.options.ignoreCase;\n var loweredText = text;\n var dataItem;\n var value;\n if (text === undefined) {\n return input.value;\n }\n if (that.options.autoBind === false && !that.listView.bound()) {\n that._setText(text);\n return;\n }\n dataItem = that.dataItem();\n if (dataItem && that._text(dataItem).replace && that._text(dataItem).replace(newLineRegEx, '') === text) {\n value = that._value(dataItem);\n if (value === List.unifyType(that._old, typeof value)) {\n that._triggerCascade();\n return;\n }\n }\n if (ignoreCase) {\n loweredText = loweredText.toLowerCase();\n }\n if (that.dataItem() && that._text(that.dataItem()) === text) {\n return;\n }\n that._select(function (data) {\n data = that._text(data);\n if (ignoreCase) {\n data = (data + '').toLowerCase();\n }\n return data === loweredText;\n }).done(function () {\n if (that.selectedIndex < 0) {\n input.value = text;\n if (that.options.syncValueAndText) {\n that._accessor(text);\n }\n that._cascadeTriggered = true;\n that._triggerCascade();\n }\n that._prev = input.value;\n });\n that._toggleCloseVisibility();\n },\n toggle: function (toggle) {\n this._toggle(toggle, true);\n },\n value: function (value) {\n var that = this;\n var options = that.options;\n var listView = that.listView;\n if (value === undefined) {\n value = that._accessor() || that.listView.value()[0];\n return value === undefined || value === null ? '' : value;\n }\n that.requireValueMapper(that.options, value);\n that.trigger('set', { value: value });\n if (value === options.value && that.input.val() === options.text) {\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 if (that.options.highlightFirst) {\n that.listView.value(that.input.val());\n that._blur();\n } else {\n that._oldText = that.text();\n }\n }\n } else if (key != keys.TAB && !that._move(e)) {\n that._search();\n } else if (key === keys.ESC && !that.popup.visible() && that.text()) {\n that._clearValue();\n }\n },\n _placeholder: function (show) {\n if (placeholderSupported) {\n return;\n }\n var that = this, input = that.input, placeholder = that.options.placeholder, value;\n if (placeholder) {\n value = that.value();\n if (show === undefined) {\n show = !value;\n }\n input.toggleClass('k-readonly', show);\n if (!show) {\n if (!value) {\n placeholder = '';\n } else {\n return;\n }\n }\n input.val(placeholder);\n if (!placeholder && input[0] === activeElement()) {\n caret(input[0], 0, 0);\n }\n }\n },\n _search: function () {\n var that = this;\n clearTimeout(that._typingTimeout);\n that._typingTimeout = setTimeout(function () {\n var value = that.text();\n if (value !== '' && that._prev !== value) {\n that._prev = value;\n if (that.options.filter === 'none' && that.options.virtual) {\n that.listView.select(-1);\n }\n that.search(value);\n that._toggleCloseVisibility();\n } else if (value === '' && that._prev !== '') {\n that._clearValue();\n that.search('');\n }\n that._typingTimeout = null;\n }, that.options.delay);\n },\n _setText: function (text) {\n this.input.val(text);\n this._prev = text;\n },\n _wrapper: function () {\n var that = this, element = that.element, wrapper = element.parent();\n if (!wrapper.is('span.k-widget')) {\n wrapper = element.hide().wrap('').parent();\n wrapper[0].style.cssText = element[0].style.cssText;\n }\n that.wrapper = wrapper.addClass('k-widget k-combobox').addClass(element[0].className).removeClass('input-validation-error').css('display', '');\n },\n _clearSelection: function (parent, isFiltered) {\n var that = this;\n var hasValue = parent.value();\n var custom = hasValue && parent.selectedIndex === -1;\n if (this.selectedIndex == -1 && this.value()) {\n return;\n }\n if (isFiltered || !hasValue || custom) {\n that.options.value = '';\n that.value('');\n }\n },\n _preselect: function (value, text) {\n this.input.val(text);\n this._accessor(value);\n this._old = this._accessor();\n this._oldIndex = this.selectedIndex;\n this.listView.setValue(value);\n this._placeholder();\n this._initialIndex = null;\n this._presetValue = true;\n this._toggleCloseVisibility();\n },\n _clearText: function () {\n this._old = this.value();\n this.text('');\n },\n _clearValue: function () {\n Select.fn._clearValue.call(this);\n this.input.focus();\n }\n });\n ui.plugin(ComboBox);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.multiselect', [\n 'kendo.list',\n 'kendo.mobile.scroller',\n 'kendo.virtuallist'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'multiselect',\n name: 'MultiSelect',\n category: 'web',\n description: 'The MultiSelect widget allows the selection from pre-defined values.',\n depends: ['list'],\n features: [\n {\n id: 'mobile-scroller',\n name: 'Mobile scroller',\n description: 'Support for kinetic scrolling in mobile device',\n depends: ['mobile.scroller']\n },\n {\n id: 'virtualization',\n name: 'VirtualList',\n description: 'Support for virtualization',\n depends: ['virtuallist']\n }\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, List = ui.List, keys = $.extend({ A: 65 }, kendo.keys), activeElement = kendo._activeElement, ObservableArray = kendo.data.ObservableArray, proxy = $.proxy, ID = 'id', LI = 'li', ACCEPT = 'accept', FILTER = 'filter', REBIND = 'rebind', OPEN = 'open', CLOSE = 'close', CHANGE = 'change', PROGRESS = 'progress', SELECT = 'select', DESELECT = 'deselect', ARIA_DISABLED = 'aria-disabled', FOCUSEDCLASS = 'k-state-focused', SELECTEDCLASS = 'k-state-selected', HIDDENCLASS = 'k-hidden', HOVERCLASS = 'k-state-hover', STATEDISABLED = 'k-state-disabled', NOCLICKCLASS = 'k-no-click', DISABLED = 'disabled', READONLY = 'readonly', AUTOCOMPLETEVALUE = 'off', ns = '.kendoMultiSelect', CLICK = 'click' + ns, KEYDOWN = 'keydown' + ns, MOUSEENTER = 'mouseenter' + ns, MOUSELEAVE = 'mouseleave' + ns, HOVEREVENTS = MOUSEENTER + ' ' + MOUSELEAVE, quotRegExp = /\"/g, isArray = $.isArray, styles = [\n 'font-family',\n 'font-size',\n 'font-stretch',\n 'font-style',\n 'font-weight',\n 'letter-spacing',\n 'text-transform',\n 'line-height'\n ];\n var MultiSelect = List.extend({\n init: function (element, options) {\n var that = this, id, disabled;\n that.ns = ns;\n List.fn.init.call(that, element, options);\n that._optionsMap = {};\n that._customOptions = {};\n that._wrapper();\n that._tagList();\n that._input();\n that._textContainer();\n that._loader();\n that._clearButton();\n that._tabindex(that.input);\n element = that.element.attr('multiple', 'multiple').hide();\n options = that.options;\n if (!options.placeholder) {\n options.placeholder = element.data('placeholder');\n }\n id = element.attr(ID);\n if (id) {\n that._tagID = id + '_tag_active';\n id = id + '_taglist';\n that.tagList.attr(ID, id);\n that.input.attr('aria-describedby', id);\n }\n that._initialOpen = true;\n that._ariaLabel();\n that._ariaSetLive();\n that._dataSource();\n that._ignoreCase();\n that._popup();\n that._tagTemplate();\n that.requireValueMapper(that.options);\n that._initList();\n that._reset();\n that._enable();\n that._placeholder();\n if (options.autoBind) {\n that.dataSource.fetch();\n } else if (options.value) {\n that._preselect(options.value);\n }\n disabled = $(that.element).parents('fieldset').is(':disabled');\n if (disabled) {\n that.enable(false);\n }\n that._ariaSetSize(that.value().length);\n kendo.notify(that);\n that._toggleCloseVisibility();\n },\n options: {\n name: 'MultiSelect',\n tagMode: 'multiple',\n enabled: true,\n autoBind: true,\n autoClose: true,\n highlightFirst: true,\n dataTextField: '',\n dataValueField: '',\n filter: 'startswith',\n ignoreCase: true,\n minLength: 1,\n messages: {\n 'singleTag': 'item(s) selected',\n 'clear': 'clear',\n 'deleteTag': 'delete',\n 'noData': 'No data found.'\n },\n enforceMinLength: false,\n delay: 100,\n value: null,\n maxSelectedItems: null,\n placeholder: '',\n height: 200,\n animation: {},\n virtual: false,\n itemTemplate: '',\n tagTemplate: '',\n groupTemplate: '#:data#',\n fixedGroupTemplate: '#:data#',\n clearButton: true,\n autoWidth: false,\n popup: null\n },\n events: [\n OPEN,\n CLOSE,\n CHANGE,\n SELECT,\n DESELECT,\n 'filtering',\n 'dataBinding',\n 'dataBound'\n ],\n setDataSource: function (dataSource) {\n this.options.dataSource = dataSource;\n this._state = '';\n this._dataSource();\n this.persistTagList = false;\n this.listView.setDataSource(this.dataSource);\n if (this.options.autoBind) {\n this.dataSource.fetch();\n }\n },\n setOptions: function (options) {\n var listOptions = this._listOptions(options);\n List.fn.setOptions.call(this, options);\n this.listView.setOptions(listOptions);\n this._accessors();\n this._aria(this.tagList.attr(ID));\n this._tagTemplate();\n this._placeholder();\n this._clearButton();\n },\n currentTag: function (candidate) {\n var that = this;\n if (candidate !== undefined) {\n if (that._currentTag) {\n that._currentTag.removeClass(FOCUSEDCLASS).removeAttr(ID);\n that._currentTag.find('.k-select').attr('aria-hidden', true);\n that.input.removeAttr('aria-activedescendant');\n }\n if (candidate) {\n candidate.addClass(FOCUSEDCLASS).attr(ID, that._tagID);\n candidate.find('.k-select').removeAttr('aria-hidden');\n that.input.attr('aria-activedescendant', that._tagID);\n }\n that._currentTag = candidate;\n } else {\n return that._currentTag;\n }\n },\n dataItems: function () {\n return this.listView.selectedDataItems();\n },\n destroy: function () {\n var that = this, ns = that.ns;\n clearTimeout(that._busy);\n clearTimeout(that._typingTimeout);\n that.wrapper.off(ns);\n that.tagList.off(ns);\n that.input.off(ns);\n that._clear.off(ns);\n List.fn.destroy.call(that);\n },\n _activateItem: function () {\n if (this.popup.visible()) {\n List.fn._activateItem.call(this);\n }\n this.currentTag(null);\n },\n _listOptions: function (options) {\n var that = this;\n var listOptions = List.fn._listOptions.call(that, $.extend(options, {\n selectedItemChange: proxy(that._selectedItemChange, that),\n selectable: 'multiple'\n }));\n var itemTemplate = this.options.itemTemplate || this.options.template;\n var template = listOptions.itemTemplate || itemTemplate || listOptions.template;\n if (!template) {\n template = '#:' + kendo.expr(listOptions.dataTextField, 'data') + '#';\n }\n listOptions.template = template;\n return listOptions;\n },\n _setListValue: function () {\n List.fn._setListValue.call(this, this._initialValues.slice(0));\n },\n _listChange: function (e) {\n var data = this.dataSource.flatView();\n var optionsMap = this._optionsMap;\n var valueGetter = this._value;\n if (this._state === REBIND) {\n this._state = '';\n }\n for (var i = 0; i < e.added.length; i++) {\n if (optionsMap[valueGetter(e.added[i].dataItem)] === undefined) {\n this._render(data);\n break;\n }\n }\n this._selectValue(e.added, e.removed);\n },\n _selectedItemChange: function (e) {\n var items = e.items;\n var context;\n var idx;\n for (idx = 0; idx < items.length; idx++) {\n context = items[idx];\n this.tagList.children().eq(context.index).children('span:first').html(this.tagTextTemplate(context.item));\n }\n },\n _wrapperMousedown: function (e) {\n var that = this;\n var notInput = e.target.nodeName.toLowerCase() !== 'input';\n var target = $(e.target);\n var closeButton = target.hasClass('k-select') || target.hasClass('k-icon');\n if (closeButton) {\n closeButton = !target.closest('.k-select').children('.k-i-arrow-60-down').length;\n }\n if (notInput && !(closeButton && kendo.support.mobileOS) && e.cancelable) {\n e.preventDefault();\n }\n if (!closeButton) {\n if (that.input[0] !== activeElement() && notInput) {\n that.input.focus();\n }\n if (that.options.minLength === 1) {\n that.open();\n }\n }\n },\n _inputFocus: function () {\n this._placeholder(false);\n this.wrapper.addClass(FOCUSEDCLASS);\n },\n _inputFocusout: function () {\n var that = this;\n clearTimeout(that._typingTimeout);\n that.wrapper.removeClass(FOCUSEDCLASS);\n that._placeholder(!that.listView.selectedDataItems()[0], true);\n that.close();\n if (that._state === FILTER) {\n that._state = ACCEPT;\n that.listView.skipUpdate(true);\n }\n if (that.listView.bound() && that.listView.isFiltered()) {\n that.persistTagList = true;\n that._clearFilter();\n }\n that.element.blur();\n },\n _removeTag: function (tag, shouldTrigger) {\n var that = this;\n var state = that._state;\n var position = tag.index();\n var listView = that.listView;\n var value = listView.value()[position];\n var dataItem = that.listView.selectedDataItems()[position];\n var customIndex = that._customOptions[value];\n var listViewChildren = listView.element[0].children;\n var option;\n var listViewChild;\n if (that.trigger(DESELECT, {\n dataItem: dataItem,\n item: tag\n })) {\n that._close();\n return;\n }\n if (customIndex === undefined && (state === ACCEPT || state === FILTER)) {\n customIndex = that._optionsMap[value];\n }\n var done = function () {\n that.currentTag(null);\n if (shouldTrigger) {\n that._change();\n }\n that._close();\n };\n if (customIndex === undefined && listView.select().length) {\n that.persistTagList = false;\n listView.select(listView.select()[position]).done(done);\n } else {\n option = that.element[0].children[customIndex];\n if (option) {\n option.selected = false;\n }\n listView.removeAt(position);\n listViewChild = listViewChildren[customIndex];\n if (listViewChild) {\n listViewChildren[customIndex].classList.remove('k-state-selected');\n }\n if (that.options.tagMode !== 'single') {\n tag.remove();\n } else {\n that._updateTagListHTML();\n }\n done();\n }\n },\n _tagListClick: function (e) {\n e.preventDefault();\n e.stopPropagation();\n var target = $(e.currentTarget);\n if (!target.children('.k-i-arrow-60-down').length) {\n this._removeTag(target.closest(LI), true);\n }\n },\n _clearValue: function () {\n var that = this;\n if (that.options.tagMode === 'single') {\n that._clearSingleTagValue();\n } else {\n that.tagList.children().each(function (index, tag) {\n that._removeTag($(tag), false);\n });\n }\n that.input.val('');\n that._search();\n that._change();\n that.focus();\n that._hideClear();\n if (that._state === FILTER) {\n that._state = ACCEPT;\n }\n },\n _clearSingleTagValue: function () {\n var that = this;\n var items = that.dataItems();\n var tags = that.tagList.children();\n var persistTagList = that.persistTagList;\n for (var i = 0; i < items.length; i += 1) {\n if (that.trigger(DESELECT, {\n dataItem: items[i],\n item: tags.first()\n })) {\n that._close();\n return;\n }\n }\n if (persistTagList) {\n that.persistTagList = false;\n }\n that.listView.value([]);\n that.persistTagList = persistTagList;\n },\n _focusHandler: function () {\n this.input.focus();\n },\n _editable: function (options) {\n var that = this, disable = options.disable, readonly = options.readonly, wrapper = that.wrapper.off(ns), tagList = that.tagList.off(ns), input = that.element.add(that.input.off(ns));\n if (!readonly && !disable) {\n wrapper.removeClass(STATEDISABLED).removeClass(NOCLICKCLASS).on(HOVEREVENTS, that._toggleHover).on('mousedown' + ns + ' touchend' + ns, proxy(that._wrapperMousedown, that)).on(CLICK, proxy(that._focusHandler, that));\n that.input.on(KEYDOWN, proxy(that._keydown, that)).on('paste' + ns, proxy(that._search, that)).on('input' + ns, proxy(that._search, that)).on('focus' + ns, proxy(that._inputFocus, that)).on('focusout' + ns, proxy(that._inputFocusout, that));\n that._clear.on(CLICK + ' touchend' + ns, proxy(that._clearValue, that));\n input.removeAttr(DISABLED).removeAttr(READONLY).attr(ARIA_DISABLED, false);\n tagList.on(MOUSEENTER, LI, function () {\n $(this).addClass(HOVERCLASS);\n }).on(MOUSELEAVE, LI, function () {\n $(this).removeClass(HOVERCLASS);\n }).on(CLICK + ' touchend' + ns, 'li.k-button .k-select', proxy(that._tagListClick, that));\n } else {\n wrapper.toggleClass(STATEDISABLED, disable).toggleClass(NOCLICKCLASS, readonly);\n input.attr(DISABLED, disable).attr(READONLY, readonly).attr(ARIA_DISABLED, disable);\n }\n },\n _close: function () {\n var that = this;\n if (that.options.autoClose) {\n that.close();\n } else {\n that.popup.position();\n }\n },\n _filterSource: function (filter, force) {\n if (!force) {\n force = this._retrieveData;\n }\n this._retrieveData = false;\n List.fn._filterSource.call(this, filter, force);\n },\n close: function () {\n this._activeItem = null;\n this.input.removeAttr('aria-activedescendant');\n this.popup.close();\n },\n open: function () {\n var that = this;\n if (that._request) {\n that._retrieveData = false;\n }\n if (that._retrieveData || !that.listView.bound() || that._state === ACCEPT) {\n that._open = true;\n that._state = REBIND;\n that.listView.skipUpdate(true);\n that.persistTagList = that._initialOpen && !that.listView.bound() ? false : true;\n that._filterSource();\n that._focusItem();\n } else if (that._allowOpening()) {\n if (that._initialOpen && !that.options.autoBind && !that.options.virtual && that.options.value && !$.isPlainObject(that.options.value[0])) {\n that.value(that.value() || that._initialValues);\n }\n that.popup._hovered = true;\n that._initialOpen = false;\n that.popup.open();\n that._focusItem();\n }\n },\n toggle: function (toggle) {\n toggle = toggle !== undefined ? toggle : !this.popup.visible();\n this[toggle ? OPEN : CLOSE]();\n },\n refresh: function () {\n this.listView.refresh();\n },\n _listBound: function () {\n var that = this;\n var data = that.dataSource.flatView();\n 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 = value.slice();\n if (!clearFilters) {\n that._fetchData();\n }\n that._ariaSetSize(that.value().length);\n that._toggleCloseVisibility();\n },\n _preselect: function (data, value) {\n var that = this;\n if (!isArray(data) && !(data instanceof kendo.data.ObservableArray)) {\n data = [data];\n }\n if ($.isPlainObject(data[0]) || data[0] instanceof kendo.data.ObservableObject || !that.options.dataValueField) {\n that.dataSource.data(data);\n that.value(value || that._initialValues);\n that._retrieveData = true;\n }\n },\n _setOption: function (value, selected) {\n var option = this.element[0].children[this._optionsMap[value]];\n if (option) {\n option.selected = selected;\n }\n },\n _fetchData: function () {\n var that = this;\n var hasItems = !!that.dataSource.view().length;\n var isEmptyArray = that.listView.value().length === 0;\n if (isEmptyArray || that._request) {\n return;\n }\n if (that._retrieveData || !that._fetch && !hasItems) {\n that._fetch = true;\n that._retrieveData = false;\n that.dataSource.read().done(function () {\n that._fetch = false;\n });\n }\n },\n _isBound: function () {\n return this.listView.bound() && !this._retrieveData;\n },\n _dataSource: function () {\n var that = this, element = that.element, options = that.options, dataSource = options.dataSource || {};\n dataSource = isArray(dataSource) ? { data: dataSource } : dataSource;\n dataSource.select = element;\n dataSource.fields = [\n { field: options.dataTextField },\n { field: options.dataValueField }\n ];\n if (that.dataSource && that._refreshHandler) {\n that._unbindDataSource();\n } else {\n that._progressHandler = proxy(that._showBusy, that);\n that._errorHandler = proxy(that._hideBusy, that);\n }\n that.dataSource = kendo.data.DataSource.create(dataSource).bind(PROGRESS, that._progressHandler).bind('error', that._errorHandler);\n },\n _reset: function () {\n var that = this, element = that.element, formId = element.attr('form'), form = formId ? $('#' + formId) : element.closest('form');\n if (form[0]) {\n that._resetHandler = function () {\n setTimeout(function () {\n that.value(that._initialValues);\n that._placeholder();\n });\n };\n that._form = form.on('reset', that._resetHandler);\n }\n },\n _initValue: function () {\n var value = this.options.value || this.element.val();\n this._old = this._initialValues = this._normalizeValues(value);\n },\n _normalizeValues: function (value) {\n var that = this;\n if (value === null) {\n value = [];\n } else if (value && $.isPlainObject(value)) {\n value = [that._value(value)];\n } else if (value && $.isPlainObject(value[0])) {\n value = $.map(value, function (dataItem) {\n return that._value(dataItem);\n });\n } else if (!isArray(value) && !(value instanceof ObservableArray)) {\n value = [value];\n } else if (isArray(value)) {\n value = value.slice();\n }\n return value;\n },\n _change: function () {\n var that = this, value = that.value();\n if (!compare(value, that._old)) {\n that._old = value.slice();\n that.trigger(CHANGE);\n that.element.trigger(CHANGE);\n }\n that.popup.position();\n that._ariaSetSize(value.length);\n that._toggleCloseVisibility();\n },\n _click: function (e) {\n var that = this;\n var item = e.item;\n e.preventDefault();\n that._select(item).done(function () {\n that._activeItem = item;\n that._change();\n that._close();\n });\n },\n _getActiveItem: function () {\n return this._activeItem || $(this.listView.items()[this._getSelectedIndices().length - 1]) || this.listView.focus();\n },\n _getSelectedIndices: function () {\n return this.listView._selectedIndices || this.listView._selectedIndexes;\n },\n _keydown: function (e) {\n var that = this;\n var key = e.keyCode;\n var tag = that._currentTag;\n var listView = that.listView;\n var hasValue = that.input.val();\n var isRtl = kendo.support.isRtl(that.wrapper);\n var visible = that.popup.visible();\n var dir = 0;\n var activeItemIdx;\n if (key !== keys.ENTER) {\n this._multipleSelection = false;\n }\n if (key === keys.DOWN) {\n e.preventDefault();\n if (!visible) {\n that.open();\n if (!listView.focus()) {\n listView.focusFirst();\n }\n return;\n }\n if (listView.focus()) {\n if (!that._activeItem && e.shiftKey) {\n that._activeItem = listView.focus();\n dir = -1;\n }\n activeItemIdx = listView.getElementIndex(that._getActiveItem().first());\n listView.focusNext();\n if (!listView.focus()) {\n listView.focusLast();\n } else {\n if (e.shiftKey) {\n this._multipleSelection = true;\n that._selectRange(activeItemIdx, listView.getElementIndex(listView.focus().first()) + dir);\n }\n }\n } else {\n listView.focusFirst();\n }\n } else if (key === keys.UP) {\n if (visible) {\n if (!that._activeItem && e.shiftKey) {\n that._activeItem = listView.focus();\n dir = 1;\n }\n activeItemIdx = listView.getElementIndex(that._getActiveItem().first());\n listView.focusPrev();\n if (!listView.focus()) {\n that.close();\n } else {\n if (e.shiftKey) {\n this._multipleSelection = true;\n that._selectRange(activeItemIdx, listView.getElementIndex(listView.focus().first()) + dir);\n }\n }\n }\n e.preventDefault();\n } else if (key === keys.LEFT && !isRtl || key === keys.RIGHT && isRtl) {\n if (!hasValue) {\n tag = tag ? tag.prev() : $(that.tagList[0].lastChild);\n if (tag[0]) {\n that.currentTag(tag);\n }\n }\n } else if (key === keys.RIGHT && !isRtl || key === keys.LEFT && isRtl) {\n if (!hasValue && tag) {\n tag = tag.next();\n that.currentTag(tag[0] ? tag : null);\n }\n } else if (e.ctrlKey && !e.altKey && key === keys.A && visible && !that.options.virtual) {\n this._multipleSelection = true;\n if (this._getSelectedIndices().length === listView.items().length) {\n that._activeItem = null;\n }\n if (listView.items().length) {\n that._selectRange(0, listView.items().length - 1);\n }\n } else if (key === keys.ENTER && visible) {\n if (!listView.focus()) {\n return;\n }\n e.preventDefault();\n if (this._multipleSelection) {\n this._multipleSelection = false;\n if (listView.focus().hasClass(SELECTEDCLASS)) {\n that._close();\n return;\n }\n }\n that._select(listView.focus()).done(function () {\n that._change();\n that._close();\n });\n } else if (key === keys.SPACEBAR && e.ctrlKey && visible) {\n if (that._activeItem && listView.focus() && listView.focus()[0] === that._activeItem[0]) {\n that._activeItem = null;\n }\n if (!$(listView.focus()).hasClass(SELECTEDCLASS)) {\n that._activeItem = listView.focus();\n }\n that._select(listView.focus()).done(function () {\n that._change();\n });\n e.preventDefault();\n } else if (key === keys.SPACEBAR && e.shiftKey && visible) {\n var activeIndex = listView.getElementIndex(that._getActiveItem());\n var currentIndex = listView.getElementIndex(listView.focus());\n if (activeIndex !== undefined && currentIndex !== undefined) {\n that._selectRange(activeIndex, currentIndex);\n }\n e.preventDefault();\n } else if (key === keys.ESC) {\n if (visible) {\n e.preventDefault();\n } else {\n that.tagList.children().each(function (index, tag) {\n that._removeTag($(tag), false);\n });\n that._change();\n }\n that.close();\n } else if (key === keys.HOME) {\n if (visible) {\n if (!listView.focus()) {\n that.close();\n } else {\n if (e.ctrlKey && e.shiftKey && !that.options.virtual) {\n that._selectRange(listView.getElementIndex(listView.focus()[0]), 0);\n }\n listView.focusFirst();\n }\n } else if (!hasValue) {\n tag = that.tagList[0].firstChild;\n if (tag) {\n that.currentTag($(tag));\n }\n }\n } else if (key === keys.END) {\n if (visible) {\n if (!listView.focus()) {\n that.close();\n } else {\n if (e.ctrlKey && e.shiftKey && !that.options.virtual) {\n that._selectRange(listView.getElementIndex(listView.focus()[0]), listView.element.children().length - 1);\n }\n listView.focusLast();\n }\n } else if (!hasValue) {\n tag = that.tagList[0].lastChild;\n if (tag) {\n that.currentTag($(tag));\n }\n }\n } else if ((key === keys.DELETE || key === keys.BACKSPACE) && !hasValue) {\n that._state = ACCEPT;\n if (that.options.tagMode === 'single') {\n that._clearSingleTagValue();\n that._change();\n that._close();\n return;\n }\n if (key === keys.BACKSPACE && !tag) {\n tag = $(that.tagList[0].lastChild);\n }\n if (tag && tag[0]) {\n that._removeTag(tag, true);\n }\n } else if (that.popup.visible() && (key === keys.PAGEDOWN || key === keys.PAGEUP)) {\n e.preventDefault();\n var direction = key === keys.PAGEDOWN ? 1 : -1;\n listView.scrollWith(direction * listView.screenHeight());\n } else {\n clearTimeout(that._typingTimeout);\n setTimeout(function () {\n that._scale();\n });\n that._search();\n }\n },\n _hideBusy: function () {\n var that = this;\n clearTimeout(that._busy);\n that.input.attr('aria-busy', false);\n that._loading.addClass(HIDDENCLASS);\n that._request = false;\n that._busy = null;\n that._toggleCloseVisibility();\n },\n _showBusyHandler: function () {\n this.input.attr('aria-busy', true);\n this._loading.removeClass(HIDDENCLASS);\n this._hideClear();\n },\n _showBusy: function () {\n var that = this;\n that._request = true;\n if (that._busy) {\n return;\n }\n that._busy = setTimeout(proxy(that._showBusyHandler, that), 100);\n },\n _placeholder: function (show, skipCaret) {\n var that = this;\n var input = that.input;\n var active = activeElement();\n var placeholder = that.options.placeholder;\n var inputValue = input.val();\n var isActive = input[0] === active;\n var caretPos = inputValue.length;\n if (!isActive || that.options.autoClose || inputValue === placeholder) {\n caretPos = 0;\n inputValue = '';\n }\n if (show === undefined) {\n show = false;\n if (input[0] !== active) {\n show = !that.listView.selectedDataItems()[0];\n }\n }\n that._prev = inputValue;\n input.toggleClass('k-readonly', show).val(show ? placeholder : inputValue);\n if (isActive && !skipCaret) {\n kendo.caret(input[0], caretPos, caretPos);\n }\n that._scale();\n },\n _scale: function () {\n var that = this, wrapper = that.wrapper.find('.k-multiselect-wrap'), wrapperWidth = wrapper.width(), span = that._span.text(that.input.val()), textWidth;\n if (!wrapper.is(':visible')) {\n span.appendTo(document.documentElement);\n wrapperWidth = textWidth = span.width() + 25;\n span.appendTo(wrapper);\n } else {\n textWidth = span.width() + 25;\n }\n that.input.width(textWidth > wrapperWidth ? wrapperWidth : textWidth);\n },\n _option: function (dataValue, dataText, selected) {\n var option = ' 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': AUTOCOMPLETEVALUE,\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 singleTag = options.messages.singleTag;\n var defaultTemplate;\n if (that.element[0].length && !hasDataSource) {\n options.dataTextField = options.dataTextField || 'text';\n options.dataValueField = options.dataValueField || 'value';\n }\n defaultTemplate = isMultiple ? kendo.template('#:' + kendo.expr(options.dataTextField, 'data') + '#', { useWithBlock: false }) : kendo.template('#:values.length# ' + singleTag);\n that.tagTextTemplate = tagTemplate = tagTemplate ? kendo.template(tagTemplate) : defaultTemplate;\n that.tagTemplate = function (data) {\n return '
            • ' + 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).removeClass('input-validation-error').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(removeFraction(that._distance()) / removeFraction(options.smallStep)));\n if (options.tickPlacement != 'none' && sizeBetweenTicks >= 2) {\n $(this.element).parent().find('.k-slider-items').remove();\n that._trackDiv.before(createSliderItems(options, that._distance()));\n that._setItemsWidth(pixelWidths);\n that._setItemsTitle();\n }\n that._calculateSteps(pixelWidths);\n if (options.tickPlacement != 'none' && sizeBetweenTicks >= 2 && options.largeStep >= options.smallStep) {\n that._setItemsLargeTick();\n }\n },\n getSize: function () {\n return kendo.dimensions(this.wrapper);\n },\n _setTrackDivWidth: function () {\n var that = this, trackDivPosition = parseFloat(that._trackDiv.css(that._isRtl ? 'right' : that._position), 10) * 2;\n that._trackDiv[that._sizeFn](that.wrapper[that._sizeFn]() - 2 - trackDivPosition);\n },\n _setItemsWidth: function (pixelWidths) {\n var that = this, options = that.options, first = 0, last = pixelWidths.length - 1, items = that.wrapper.find(TICK_SELECTOR), i, paddingTop = 0, bordersWidth = 2, count = items.length, selection = 0;\n for (i = 0; i < count - 2; i++) {\n $(items[i + 1])[that._sizeFn](pixelWidths[i]);\n }\n if (that._isHorizontal) {\n $(items[first]).addClass('k-first')[that._sizeFn](pixelWidths[last - 1]);\n $(items[last]).addClass('k-last')[that._sizeFn](pixelWidths[last]);\n } else {\n $(items[last]).addClass('k-first')[that._sizeFn](pixelWidths[last]);\n $(items[first]).addClass('k-last')[that._sizeFn](pixelWidths[last - 1]);\n }\n if (that._distance() % options.smallStep !== 0 && !that._isHorizontal) {\n for (i = 0; i < pixelWidths.length; i++) {\n selection += pixelWidths[i];\n }\n paddingTop = that._maxSelection - selection;\n paddingTop += parseFloat(that._trackDiv.css(that._position), 10) + bordersWidth;\n that.wrapper.find('.k-slider-items').css('padding-top', paddingTop);\n }\n },\n _setItemsTitle: function () {\n var that = this, options = that.options, items = that.wrapper.find(TICK_SELECTOR), titleNumber = options.min, count = items.length, i = that._isHorizontal && !that._isRtl ? 0 : count - 1, limit = that._isHorizontal && !that._isRtl ? count : -1, increment = that._isHorizontal && !that._isRtl ? 1 : -1;\n for (; i - limit !== 0; i += increment) {\n $(items[i]).attr('title', format(options.tooltip.format, round(titleNumber)));\n titleNumber += options.smallStep;\n }\n },\n _setItemsLargeTick: function () {\n var that = this, options = that.options, items = that.wrapper.find(TICK_SELECTOR), i = 0, item, value;\n if (removeFraction(options.largeStep) % removeFraction(options.smallStep) === 0 || that._distance() / options.largeStep >= 3) {\n if (!that._isHorizontal && !that._isRtl) {\n items = $.makeArray(items).reverse();\n }\n for (i = 0; i < items.length; i++) {\n item = $(items[i]);\n value = that._values[i];\n var valueWithoutFraction = round(removeFraction(value - this.options.min));\n if (valueWithoutFraction % removeFraction(options.smallStep) === 0 && valueWithoutFraction % removeFraction(options.largeStep) === 0) {\n item.addClass('k-tick-large').html('' + 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(), preciseItemsCount = removeFraction(distance) / removeFraction(options.smallStep), pixelStep = trackDivSize / removeFraction(distance), itemWidth, pixelWidths, i;\n if (preciseItemsCount - itemsCount > 0) {\n trackDivSize -= removeFraction(distance) % removeFraction(options.smallStep) * pixelStep;\n }\n itemWidth = trackDivSize / itemsCount;\n pixelWidths = [];\n for (i = 0; i < itemsCount - 1; i++) {\n pixelWidths[i] = itemWidth;\n }\n pixelWidths[itemsCount - 1] = pixelWidths[itemsCount] = itemWidth / 2;\n return that._roundWidths(pixelWidths);\n },\n _roundWidths: function (pixelWidthsArray) {\n var balance = 0, count = pixelWidthsArray.length, i;\n for (i = 0; i < count; i++) {\n balance += pixelWidthsArray[i] - math.floor(pixelWidthsArray[i]);\n pixelWidthsArray[i] = math.floor(pixelWidthsArray[i]);\n }\n balance = math.round(balance);\n return this._addAdditionalSize(balance, pixelWidthsArray);\n },\n _addAdditionalSize: function (additionalSize, pixelWidthsArray) {\n if (additionalSize === 0) {\n return pixelWidthsArray;\n }\n var step = parseFloat(pixelWidthsArray.length - 1) / parseFloat(additionalSize == 1 ? additionalSize : additionalSize - 1), i;\n for (i = 0; i < additionalSize; i++) {\n pixelWidthsArray[parseInt(math.round(step * i), 10)] += 1;\n }\n return pixelWidthsArray;\n },\n _calculateSteps: function (pixelWidths) {\n var that = this, options = that.options, val = options.min, selection = 0, distance = that._distance(), itemsCount = math.ceil(removeFraction(distance) / removeFraction(options.smallStep)), i = 1, lastItem;\n itemsCount += removeFraction(distance) / removeFraction(options.smallStep) % 1 === 0 ? 1 : 0;\n pixelWidths.splice(0, 0, pixelWidths[itemsCount - 2] * 2);\n pixelWidths.splice(itemsCount - 1, 1, pixelWidths.pop() * 2);\n that._pixelSteps = [selection];\n that._values = [val];\n if (itemsCount === 0) {\n return;\n }\n while (i < itemsCount) {\n selection += (pixelWidths[i - 1] + pixelWidths[i]) / 2;\n that._pixelSteps[i] = selection;\n val += options.smallStep;\n that._values[i] = round(val);\n i++;\n }\n lastItem = removeFraction(distance) % removeFraction(options.smallStep) === 0 ? itemsCount - 1 : itemsCount;\n that._pixelSteps[lastItem] = that._maxSelection;\n that._values[lastItem] = options.max;\n if (that._isRtl) {\n that._pixelSteps.reverse();\n that._values.reverse();\n }\n },\n _getValueFromPosition: function (mousePosition, dragableArea) {\n var that = this, options = that.options, step = math.max(options.smallStep * (that._maxSelection / that._distance()), 0), position = 0, halfStep = step / 2, i;\n if (that._isHorizontal) {\n position = mousePosition - dragableArea.startPoint;\n if (that._isRtl) {\n position = that._maxSelection - position;\n }\n } else {\n position = dragableArea.startPoint - mousePosition;\n }\n if (that._maxSelection - (parseInt(that._maxSelection % step, 10) - 3) / 2 < position) {\n return options.max;\n }\n for (i = 0; i < that._pixelSteps.length; i++) {\n if (math.abs(that._pixelSteps[i] - position) - 1 <= halfStep) {\n return round(that._values[i]);\n }\n }\n },\n _getFormattedValue: function (val, drag) {\n var that = this, html = '', tooltip = that.options.tooltip, tooltipTemplate, selectionStart, selectionEnd;\n if (isArray(val)) {\n selectionStart = val[0];\n selectionEnd = val[1];\n } else if (drag && drag.type) {\n selectionStart = drag.selectionStart;\n selectionEnd = drag.selectionEnd;\n }\n if (drag) {\n tooltipTemplate = drag.tooltipTemplate;\n }\n if (!tooltipTemplate && tooltip.template) {\n tooltipTemplate = kendo.template(tooltip.template);\n }\n if (isArray(val) || drag && drag.type) {\n if (tooltipTemplate) {\n html = tooltipTemplate({\n selectionStart: selectionStart,\n selectionEnd: selectionEnd\n });\n } else {\n selectionStart = format(tooltip.format, selectionStart);\n selectionEnd = format(tooltip.format, selectionEnd);\n html = selectionStart + ' - ' + selectionEnd;\n }\n } else {\n if (drag) {\n drag.val = val;\n }\n if (tooltipTemplate) {\n html = tooltipTemplate({ value: val });\n } else {\n html = format(tooltip.format, val);\n }\n }\n return html;\n },\n _getDraggableArea: function () {\n var that = this, offset = kendo.getOffset(that._trackDiv);\n return {\n startPoint: that._isHorizontal ? offset.left : offset.top + that._maxSelection,\n endPoint: that._isHorizontal ? offset.left + that._maxSelection : offset.top\n };\n },\n _createHtml: function () {\n var that = this, element = that.element, options = that.options, inputs = element.find('input');\n if (inputs.length == 2) {\n inputs.eq(0).prop('value', formatValue(options.selectionStart));\n inputs.eq(1).prop('value', formatValue(options.selectionEnd));\n } else {\n element.prop('value', formatValue(options.value));\n }\n element.wrap(createWrapper(options, element, that._isHorizontal)).hide();\n if (options.showButtons) {\n element.before(createButton(options, 'increase', that._isHorizontal, that._isRtl)).before(createButton(options, 'decrease', that._isHorizontal, that._isRtl));\n }\n element.before(createTrack(options, element));\n },\n _focus: function (e) {\n var that = this, target = e.target, val = that.value(), drag = that._drag;\n if (!drag) {\n if (target == that.wrapper.find(DRAG_HANDLE).eq(0)[0]) {\n drag = that._firstHandleDrag;\n that._activeHandle = 0;\n } else {\n drag = that._lastHandleDrag;\n that._activeHandle = 1;\n }\n val = val[that._activeHandle];\n }\n $(target).addClass(STATE_FOCUSED + ' ' + STATE_SELECTED);\n if (drag) {\n that._activeHandleDrag = drag;\n drag.selectionStart = that.options.selectionStart;\n drag.selectionEnd = that.options.selectionEnd;\n drag._updateTooltip(val);\n }\n },\n _focusWithMouse: function (target) {\n target = $(target);\n var that = this, idx = target.is(DRAG_HANDLE) ? target.index() : 0;\n window.setTimeout(function () {\n that.wrapper.find(DRAG_HANDLE)[idx == 2 ? 1 : 0].focus();\n }, 1);\n that._setTooltipTimeout();\n },\n _blur: function (e) {\n var that = this, drag = that._activeHandleDrag;\n $(e.target).removeClass(STATE_FOCUSED + ' ' + STATE_SELECTED);\n if (drag) {\n drag._removeTooltip();\n delete that._activeHandleDrag;\n delete that._activeHandle;\n }\n },\n _setTooltipTimeout: function () {\n var that = this;\n that._tooltipTimeout = window.setTimeout(function () {\n var drag = that._drag || that._activeHandleDrag;\n if (drag) {\n drag._removeTooltip();\n }\n }, 300);\n },\n _clearTooltipTimeout: function () {\n var that = this;\n window.clearTimeout(this._tooltipTimeout);\n var drag = that._drag || that._activeHandleDrag;\n if (drag && drag.tooltipDiv) {\n drag.tooltipDiv.stop(true, false).css('opacity', 1);\n }\n },\n _reset: function () {\n var that = this, element = that.element, formId = element.attr('form'), form = formId ? $('#' + formId) : element.closest('form');\n if (form[0]) {\n that._form = form.on('reset', proxy(that._formResetHandler, that));\n }\n },\n min: function (value) {\n if (!value) {\n return this.options.min;\n }\n this.setOptions({ 'min': value });\n },\n max: function (value) {\n if (!value) {\n return this.options.max;\n }\n this.setOptions({ 'max': value });\n },\n setOptions: function (options) {\n Widget.fn.setOptions.call(this, options);\n this._sliderItemsInit();\n this._refresh();\n },\n destroy: function () {\n if (this._form) {\n this._form.off('reset', this._formResetHandler);\n }\n Widget.fn.destroy.call(this);\n }\n });\n function createWrapper(options, element, isHorizontal) {\n var orientationCssClass = isHorizontal ? ' k-slider-horizontal' : ' k-slider-vertical', style = options.style ? options.style : element.attr('style'), cssClasses = element.attr('class') ? ' ' + element.attr('class') : '', tickPlacementCssClass = '';\n if (options.tickPlacement == 'bottomRight') {\n tickPlacementCssClass = ' k-slider-bottomright';\n } else if (options.tickPlacement == 'topLeft') {\n tickPlacementCssClass = ' k-slider-topleft';\n }\n style = style ? ' style=\\'' + style + '\\'' : '';\n return '
              ' + '
              ';\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, DISABLED = 'k-state-disabled', browser = kendo.support.browser, isIE8 = browser.msie && browser.version < 9;\n var ColorSelector = Widget.extend({\n init: function (element, options) {\n var that = this, ariaId;\n Widget.fn.init.call(that, element, options);\n element = that.element;\n options = that.options;\n that._value = options.value = parseColor(options.value);\n that._tabIndex = element.attr('tabIndex') || 0;\n ariaId = that._ariaId = options.ariaId;\n if (ariaId) {\n element.attr('aria-labelledby', ariaId);\n }\n if (options._standalone) {\n that._triggerSelect = that._triggerChange;\n }\n },\n options: {\n name: 'ColorSelector',\n value: null,\n _standalone: true\n },\n events: [\n 'change',\n 'select',\n 'cancel'\n ],\n color: function (value) {\n if (value !== undefined) {\n this._value = parseColor(value);\n this._updateUI(this._value);\n }\n return this._value;\n },\n value: function (color) {\n color = this.color(color);\n if (color) {\n if (this.options.opacity) {\n color = color.toCssRgba();\n } else {\n color = color.toCss();\n }\n }\n return color || null;\n },\n enable: function (enable) {\n if (arguments.length === 0) {\n enable = true;\n }\n this.wrapper.toggleClass(DISABLED, !enable);\n this._onEnable(enable);\n },\n _select: function (color, nohooks) {\n var prev = this._value;\n color = this.color(color);\n if (!nohooks) {\n this.element.trigger('change');\n if (!color.equals(prev)) {\n this.trigger('change', { value: this.value() });\n } else if (!this._standalone) {\n this.trigger('cancel');\n }\n }\n },\n _triggerSelect: function (color) {\n triggerEvent(this, 'select', color);\n },\n _triggerChange: function (color) {\n triggerEvent(this, 'change', color);\n },\n destroy: function () {\n if (this.element) {\n this.element.off(NS);\n }\n if (this.wrapper) {\n this.wrapper.off(NS).find('*').off(NS);\n }\n this.wrapper = null;\n Widget.fn.destroy.call(this);\n },\n _updateUI: $.noop,\n _selectOnHide: function () {\n return null;\n },\n _cancel: function () {\n this.trigger('cancel');\n }\n });\n function triggerEvent(self, type, color) {\n color = parseColor(color);\n if (color && !color.equals(self.color())) {\n if (type == 'change') {\n self._value = color;\n }\n if (color.a != 1) {\n color = color.toCssRgba();\n } else {\n color = color.toCss();\n }\n self.trigger(type, { value: color });\n }\n }\n var ColorPalette = ColorSelector.extend({\n init: function (element, options) {\n var that = this;\n ColorSelector.fn.init.call(that, element, options);\n element = that.wrapper = that.element;\n options = that.options;\n var colors = options.palette;\n if (colors == 'websafe') {\n colors = WEBPALETTE;\n options.columns = 18;\n } else if (colors == 'basic') {\n colors = SIMPLEPALETTE;\n }\n if (typeof colors == 'string') {\n colors = colors.split(',');\n }\n if ($.isArray(colors)) {\n colors = $.map(colors, function (x) {\n return parseColor(x);\n });\n }\n that._selectedID = (options.ariaId || kendo.guid()) + '_selected';\n element.addClass('k-widget k-colorpalette').attr('role', 'grid').attr('aria-readonly', 'true').append($(that._template({\n colors: colors,\n columns: options.columns,\n tileSize: options.tileSize,\n value: that._value,\n id: options.ariaId\n }))).on(CLICK_NS, '.k-item', function (ev) {\n that._select($(ev.currentTarget).css(BACKGROUNDCOLOR));\n }).attr('tabIndex', that._tabIndex).on(KEYDOWN_NS, bind(that._keydown, that));\n var tileSize = options.tileSize, width, height;\n if (tileSize) {\n if (/number|string/.test(typeof tileSize)) {\n width = height = parseFloat(tileSize);\n } else if (typeof tileSize == 'object') {\n width = parseFloat(tileSize.width);\n height = parseFloat(tileSize.height);\n } else {\n throw new Error('Unsupported value for the \\'tileSize\\' argument');\n }\n element.find('.k-item').css({\n width: width,\n height: height\n });\n }\n },\n focus: function () {\n if (this.wrapper && !this.wrapper.is('[unselectable=\\'on\\']')) {\n this.wrapper.focus();\n }\n },\n options: {\n name: 'ColorPalette',\n columns: 10,\n tileSize: null,\n palette: 'basic'\n },\n _onEnable: function (enable) {\n if (enable) {\n this.wrapper.attr('tabIndex', this._tabIndex);\n } else {\n this.wrapper.removeAttr('tabIndex');\n }\n },\n _keydown: function (e) {\n var selected, wrapper = this.wrapper, items = wrapper.find('.k-item'), current = items.filter('.' + ITEMSELECTEDCLASS).get(0), keyCode = e.keyCode;\n if (keyCode == KEYS.LEFT) {\n selected = relative(items, current, -1);\n } else if (keyCode == KEYS.RIGHT) {\n selected = relative(items, current, 1);\n } else if (keyCode == KEYS.DOWN) {\n selected = relative(items, current, this.options.columns);\n } else if (keyCode == KEYS.UP) {\n selected = relative(items, current, -this.options.columns);\n } else if (keyCode == KEYS.ENTER) {\n preventDefault(e);\n if (current) {\n this._select($(current).css(BACKGROUNDCOLOR));\n }\n } else if (keyCode == KEYS.ESC) {\n this._cancel();\n }\n if (selected) {\n preventDefault(e);\n this._current(selected);\n try {\n var color = parseColor(selected.css(BACKGROUNDCOLOR));\n this._triggerSelect(color);\n } catch (ex) {\n }\n }\n },\n _current: function (item) {\n this.wrapper.find('.' + ITEMSELECTEDCLASS).removeClass(ITEMSELECTEDCLASS).attr('aria-selected', false).removeAttr('id');\n $(item).addClass(ITEMSELECTEDCLASS).attr('aria-selected', true).attr('id', this._selectedID);\n this.element.removeAttr('aria-activedescendant').attr('aria-activedescendant', this._selectedID);\n },\n _updateUI: function (color) {\n var item = null;\n this.wrapper.find('.k-item').each(function () {\n var c = parseColor($(this).css(BACKGROUNDCOLOR));\n if (c && c.equals(color)) {\n item = this;\n return false;\n }\n });\n this._current(item);\n },\n _template: kendo.template('' + '# 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-alpha-slider .k-slider-track', element);\n that._selectedColor = $('.k-selected-color-display', element);\n that._colorAsText = $('input.k-color-value', element);\n that._sliders();\n that._hsvArea();\n that._updateUI(that._value || parseColor('#f00'));\n element.find('input.k-color-value').on(KEYDOWN_NS, function (ev) {\n var input = this;\n if (ev.keyCode == KEYS.ENTER) {\n try {\n var color = parseColor(input.value);\n var val = that.color();\n that._select(color, color.equals(val));\n } catch (ex) {\n $(input).addClass('k-state-error');\n }\n } else if (that.options.autoupdate) {\n setTimeout(function () {\n var color = parseColor(input.value, true);\n if (color) {\n that._updateUI(color, true);\n }\n }, 10);\n }\n }).end().on(CLICK_NS, '.k-controls button.apply', function () {\n if (that.options._clearedColor) {\n that.trigger('change');\n } else {\n that._select(that._getHSV());\n }\n }).on(CLICK_NS, '.k-controls button.cancel', function () {\n that._updateUI(that.color());\n that._cancel();\n });\n if (isIE8) {\n that._applyIEFilter();\n }\n },\n destroy: function () {\n this._hsvEvents.destroy();\n this._hueSlider.destroy();\n if (this._opacitySlider) {\n this._opacitySlider.destroy();\n }\n this._hueSlider = this._opacitySlider = this._hsvRect = this._hsvHandle = this._hueElements = this._selectedColor = this._colorAsText = null;\n ColorSelector.fn.destroy.call(this);\n },\n options: {\n name: 'FlatColorPicker',\n opacity: false,\n buttons: false,\n input: true,\n preview: true,\n clearButton: false,\n autoupdate: true,\n messages: MESSAGES\n },\n _applyIEFilter: function () {\n var track = this.element.find('.k-hue-slider .k-slider-track')[0], url = track.currentStyle.backgroundImage;\n url = url.replace(/^url\\([\\'\\\"]?|[\\'\\\"]?\\)$/g, '');\n track.style.filter = 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\\'' + url + '\\', sizingMethod=\\'scale\\')';\n },\n _sliders: function () {\n var that = this, element = that.element, hueSlider = element.find('.k-hue-slider'), opacitySlider = element.find('.k-alpha-slider');\n function hueChange(e) {\n that._updateUI(that._getHSV(e.value, null, null, null));\n }\n hueSlider.attr('aria-label', 'hue saturation');\n that._hueSlider = hueSlider.kendoSlider({\n min: 0,\n max: 360,\n tickPlacement: 'none',\n showButtons: false,\n slide: hueChange,\n change: hueChange\n }).data('kendoSlider');\n function opacityChange(e) {\n that._updateUI(that._getHSV(null, null, null, e.value / 100));\n }\n opacitySlider.attr('aria-label', 'opacity');\n that._opacitySlider = opacitySlider.kendoSlider({\n min: 0,\n max: 100,\n tickPlacement: 'none',\n showButtons: false,\n slide: opacityChange,\n change: opacityChange\n }).data('kendoSlider');\n },\n _hsvArea: function () {\n var that = this, element = that.element, hsvRect = element.find('.k-hsv-rectangle'), hsvHandle = hsvRect.find('.k-draghandle').attr('tabIndex', 0).on(KEYDOWN_NS, bind(that._keydown, that));\n function update(x, y) {\n var offset = this.offset, dx = x - offset.left, dy = y - offset.top, rw = this.width, rh = this.height;\n dx = dx < 0 ? 0 : dx > rw ? rw : dx;\n dy = dy < 0 ? 0 : dy > rh ? rh : dy;\n that._svChange(dx / rw, 1 - dy / rh);\n }\n that._hsvEvents = new kendo.UserEvents(hsvRect, {\n global: true,\n press: function (e) {\n this.offset = kendo.getOffset(hsvRect);\n this.width = hsvRect.width();\n this.height = hsvRect.height();\n hsvHandle.focus();\n update.call(this, e.x.location, e.y.location);\n },\n start: function () {\n hsvRect.addClass('k-dragging');\n hsvHandle.focus();\n },\n move: function (e) {\n e.preventDefault();\n update.call(this, e.x.location, e.y.location);\n },\n end: function () {\n hsvRect.removeClass('k-dragging');\n }\n });\n that._hsvRect = hsvRect;\n that._hsvHandle = hsvHandle;\n },\n _onEnable: function (enable) {\n this._hueSlider.enable(enable);\n if (this._opacitySlider) {\n this._opacitySlider.enable(enable);\n }\n this.wrapper.find('input').attr('disabled', !enable);\n var handle = this._hsvRect.find('.k-draghandle');\n if (enable) {\n handle.attr('tabIndex', this._tabIndex);\n } else {\n handle.removeAttr('tabIndex');\n }\n },\n _keydown: function (ev) {\n var that = this;\n function move(prop, d) {\n var c = that._getHSV();\n c[prop] += d * (ev.shiftKey ? 0.01 : 0.05);\n if (c[prop] < 0) {\n c[prop] = 0;\n }\n if (c[prop] > 1) {\n c[prop] = 1;\n }\n that._updateUI(c);\n preventDefault(ev);\n }\n function hue(d) {\n var c = that._getHSV();\n c.h += d * (ev.shiftKey ? 1 : 5);\n if (c.h < 0) {\n c.h = 0;\n }\n if (c.h > 359) {\n c.h = 359;\n }\n that._updateUI(c);\n preventDefault(ev);\n }\n switch (ev.keyCode) {\n case KEYS.LEFT:\n if (ev.ctrlKey) {\n hue(-1);\n } else {\n move('s', -1);\n }\n break;\n case KEYS.RIGHT:\n if (ev.ctrlKey) {\n hue(1);\n } else {\n move('s', 1);\n }\n break;\n case KEYS.UP:\n move(ev.ctrlKey && that._opacitySlider ? 'a' : 'v', 1);\n break;\n case KEYS.DOWN:\n move(ev.ctrlKey && that._opacitySlider ? 'a' : 'v', -1);\n break;\n case KEYS.ENTER:\n that._select(that._getHSV());\n break;\n case KEYS.F2:\n that.wrapper.find('input.k-color-value').focus().select();\n break;\n case KEYS.ESC:\n that._cancel();\n break;\n }\n },\n focus: function () {\n this._hsvHandle.focus();\n },\n _getHSV: function (h, s, v, a) {\n var rect = this._hsvRect, width = rect.width(), height = rect.height(), handlePosition = this._hsvHandle.position();\n if (h == null) {\n h = this._hueSlider.value();\n }\n if (s == null) {\n s = handlePosition.left / width;\n }\n if (v == null) {\n v = 1 - handlePosition.top / height;\n }\n if (a == null) {\n a = this._opacitySlider ? this._opacitySlider.value() / 100 : 1;\n }\n return Color.fromHSV(h, s, v, a);\n },\n _svChange: function (s, v) {\n var color = this._getHSV(null, s, v, null);\n this._updateUI(color);\n },\n _updateUI: function (color, dontChangeInput) {\n var that = this, rect = that._hsvRect;\n if (!color) {\n return;\n }\n this._colorAsText.attr('title', that.options.messages.previewInput);\n this._colorAsText.removeClass('k-state-error');\n that._selectedColor.css(BACKGROUNDCOLOR, color.toDisplay());\n if (!dontChangeInput) {\n that._colorAsText.val(that._opacitySlider ? color.toCssRgba() : color.toCss());\n }\n that._triggerSelect(color);\n color = color.toHSV();\n that._hsvHandle.css({\n left: color.s * rect.width() + 'px',\n top: (1 - color.v) * rect.height() + 'px'\n });\n that._hueElements.css(BACKGROUNDCOLOR, Color.fromHSV(color.h, 1, 1, 1).toCss());\n that._hueSlider.value(color.h);\n if (that._opacitySlider) {\n that._opacitySlider.value(100 * color.a);\n }\n },\n _selectOnHide: function () {\n return this.options.buttons ? null : this._getHSV();\n },\n _template: kendo.template('# if (preview) { #' + '
              ' + '# 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('keyup' + ns).off('input' + 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('keyup' + ns, proxy(that._keyup, that)).on('paste' + ns, proxy(that._paste, that)).on('input' + ns, proxy(that._inputHandler, 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 if (key == keys.DOWN) {\n that._step(-1);\n return;\n } else if (key == keys.UP) {\n that._step(1);\n return;\n } else if (key == keys.ENTER) {\n that._change(that.element.val());\n return;\n }\n if (key != keys.TAB) {\n that._typing = true;\n }\n that._cachedCaret = caret(that.element);\n },\n _keyup: function () {\n this._removeInvalidState();\n },\n _inputHandler: function () {\n var element = this.element;\n var value = element.val();\n var numberFormat = this._format(this.options.format);\n var isValid = this._numericRegex(numberFormat).test(value);\n if (isValid) {\n this._oldText = value;\n } else {\n this._blinkInvalidState();\n this.element.val(this._oldText);\n if (this._cachedCaret) {\n caret(element, this._cachedCaret[0]);\n this._cachedCaret = null;\n }\n }\n },\n _blinkInvalidState: function () {\n var that = this;\n that._addInvalidState();\n clearTimeout(that._invalidStateTimeout);\n that._invalidStateTimeout = setTimeout(proxy(that._removeInvalidState, that), 100);\n },\n _addInvalidState: function () {\n var that = this;\n that._inputWrapper.addClass(STATE_INVALID);\n that._validationIcon.show();\n },\n _removeInvalidState: function () {\n var that = this;\n that._inputWrapper.removeClass(STATE_INVALID);\n that._validationIcon.hide();\n that._invalidStateTimeout = null;\n },\n _numericRegex: function (numberFormat) {\n var that = this;\n var separator = numberFormat[POINT];\n var precision = that.options.decimals;\n var fractionRule = '*';\n if (separator === POINT) {\n separator = '\\\\' + separator;\n }\n if (precision === NULL) {\n precision = numberFormat.decimals;\n }\n if (precision === 0 && that.options.restrictDecimals) {\n return INTEGER_REGEXP;\n }\n if (that.options.restrictDecimals) {\n fractionRule = '{0,' + precision + '}';\n }\n if (that._separator !== separator) {\n that._separator = separator;\n that._floatRegExp = new RegExp('^(-)?(((\\\\d+(' + separator + '\\\\d' + fractionRule + ')?)|(' + separator + '\\\\d' + fractionRule + ')))?$');\n }\n return that._floatRegExp;\n },\n _paste: function (e) {\n var that = this;\n var element = e.target;\n var value = element.value;\n var numberFormat = that._format(that.options.format);\n setTimeout(function () {\n var result = that._parse(element.value);\n if (result === NULL) {\n that._update(value);\n } else {\n element.value = result.toString().replace(POINT, numberFormat[POINT]);\n if (that._adjust(result) !== result || !that._numericRegex(numberFormat).test(element.value)) {\n that._update(value);\n }\n }\n });\n },\n _option: function (option, value) {\n var that = this, element = that.element, options = that.options;\n if (value === undefined) {\n return options[option];\n }\n value = that._parse(value);\n if (!value && option === 'step') {\n return;\n }\n options[option] = value;\n element.add(that._text).attr('aria-value' + option, value);\n element.attr(option, value);\n },\n _spin: function (step, timeout) {\n var that = this;\n timeout = timeout || 500;\n clearTimeout(that._spinning);\n that._spinning = setTimeout(function () {\n that._spin(step, 50);\n }, timeout);\n that._step(step);\n },\n _step: function (step) {\n var that = this, element = that.element, originalValue = that._value, value = that._parse(element.val()) || 0, precision = that.options.decimals || 2;\n if (activeElement() != element[0]) {\n that._focusin();\n }\n if (that.options.factor && value) {\n value = value / that.options.factor;\n }\n value = +(value + that.options.step * step).toFixed(precision);\n value = that._adjust(value);\n that._update(value);\n that._typing = false;\n if (originalValue !== value) {\n that.trigger(SPIN);\n }\n },\n _toggleHover: function (e) {\n $(e.currentTarget).toggleClass(HOVER, e.type === 'mouseenter');\n },\n _toggleText: function (toggle) {\n var that = this;\n that._text.toggle(toggle);\n that.element.toggle(!toggle);\n },\n _parse: function (value, culture) {\n return parse(value, this._culture(culture), this.options.format);\n },\n _round: function (value, precision) {\n var rounder = this.options.round ? kendo._round : truncate;\n return rounder(value, precision);\n },\n _update: function (value) {\n var that = this, options = that.options, factor = options.factor, format = options.format, decimals = options.decimals, culture = that._culture(), numberFormat = that._format(format, culture), isNotNull;\n if (decimals === NULL) {\n decimals = numberFormat.decimals;\n }\n value = that._parse(value, culture);\n isNotNull = value !== NULL;\n if (isNotNull) {\n value = parseFloat(that._round(value, decimals), 10);\n }\n that._value = value = that._adjust(value);\n that._placeholder(kendo.toString(value, format, culture));\n if (isNotNull) {\n if (factor) {\n value = parseFloat(that._round(value * factor, decimals), 10);\n }\n value = value.toString();\n if (value.indexOf('e') !== -1) {\n value = that._round(+value, decimals);\n }\n value = value.replace(POINT, numberFormat[POINT]);\n } else {\n value = null;\n }\n that.element.val(value);\n that._oldText = value;\n that.element.add(that._text).attr('aria-valuenow', value);\n },\n _placeholder: function (value) {\n var input = this._text;\n input.val(value);\n if (!placeholderSupported && !value) {\n input.val(this.options.placeholder);\n }\n input.attr('title', this.element.attr('title') || input.val());\n },\n _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).removeClass('input-validation-error').css('display', '');\n that._inputWrapper = $(wrapper[0].firstChild);\n },\n _reset: function () {\n var that = this, element = that.element, formId = element.attr('form'), form = formId ? $('#' + formId) : element.closest('form');\n if (form[0]) {\n that._resetHandler = function () {\n setTimeout(function () {\n that.value(element[0].value);\n that.max(that._initialOptions.max);\n that.min(that._initialOptions.min);\n });\n };\n that._form = form.on('reset', that._resetHandler);\n }\n }\n });\n function buttonHtml(direction, text) {\n var className = 'k-i-arrow-' + (direction === 'increase' ? '60-up' : '60-down');\n return '' + '' + '';\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 = '.', support = kendo.support, AUTOCOMPLETEVALUE = support.browser.chrome ? 'disabled' : 'off', 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 ? options.title : options.field\n };\n for (ruleName in validation) {\n rule = validation[ruleName];\n if (inArray(ruleName, specialRules) >= 0) {\n attr[DATATYPE] = ruleName;\n } else if (!isFunction(rule)) {\n var culture = kendo.getCulture();\n if (typeof rule === 'number' && culture.name.length) {\n var numberFormat = culture.numberFormat;\n var stringRule = rule.toString().replace(POINT, numberFormat[POINT]);\n attr[ruleName] = stringRule;\n } else {\n attr[ruleName] = isPlainObject(rule) ? rule.value || ruleName : rule;\n }\n }\n attr[kendo.attr(ruleName + '-msg')] = rule.message;\n attr.autocomplete = AUTOCOMPLETEVALUE;\n }\n if (inArray(type, specialRules) >= 0) {\n attr[DATATYPE] = type;\n }\n attr[BINDING] = (type === 'boolean' ? 'checked:' : 'value:') + options.field;\n return attr;\n }\n function addIdAttribute(container, attr) {\n var id = container.attr('id');\n if (id) {\n attr.id = id;\n container.removeAttr('id');\n }\n return attr;\n }\n function convertItems(items) {\n var idx, length, item, value, text, result;\n if (items && items.length) {\n result = [];\n for (idx = 0, length = items.length; idx < length; idx++) {\n item = items[idx];\n text = item.text || item.value || item;\n value = item.value == null ? item.text || item : item.value;\n result[idx] = {\n text: text,\n value: value\n };\n }\n }\n return result;\n }\n 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 = addIdAttribute(container, attr);\n $('').attr(attr).appendTo(container);\n },\n 'string': function (container, options) {\n var attr = createAttributes(options);\n attr = addIdAttribute(container, attr);\n $('').attr(attr).appendTo(container);\n },\n 'boolean': function (container, options) {\n var attr = createAttributes(options);\n attr = addIdAttribute(container, attr);\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 wrapper.css('padding-top', 0);\n titleBar.remove();\n } else {\n if (!titleBar.length) {\n wrapper.prepend(templates.titlebar({ title: encoded ? kendo.htmlEncode(value) : value }));\n that._actions();\n titleBar = wrapper.children(KWINDOWTITLEBAR);\n } else {\n titleElement.html(encoded ? kendo.htmlEncode(value) : value);\n }\n visibility = wrapper.css('visibility');\n display = wrapper.css('display');\n if (visibility === HIDDEN) {\n wrapper.css({ display: '' });\n titleBarHeight = parseInt(outerHeight(titleBar), 10);\n wrapper.css({ display: display });\n } else {\n wrapper.css({\n visibility: HIDDEN,\n display: ''\n });\n titleBarHeight = parseInt(outerHeight(titleBar), 10);\n wrapper.css({\n visibility: visibility,\n display: display\n });\n }\n wrapper.css('padding-top', titleBarHeight);\n titleBar.css('margin-top', -titleBarHeight);\n }\n that.options.title = value;\n return that;\n },\n content: function (html, data) {\n var content = this.wrapper.children(KWINDOWCONTENT), scrollContainer = content.children('.km-scroll-container');\n content = scrollContainer[0] ? scrollContainer : content;\n if (!defined(html)) {\n return content.html();\n }\n this.angular('cleanup', function () {\n return { elements: content.children() };\n });\n kendo.destroy(this.element.children());\n content.empty().html(html);\n this.angular('compile', function () {\n var a = [];\n for (var i = content.length; --i >= 0;) {\n a.push({ dataItem: data });\n }\n return {\n elements: content.children(),\n data: a\n };\n });\n return this;\n },\n open: function () {\n var that = this, wrapper = that.wrapper, options = that.options, showOptions = this._animationOptions('open'), contentElement = wrapper.children(KWINDOWCONTENT), overlay, otherModalsVisible, containmentContext = this.containment && !that._isPinned, doc = containmentContext ? this.containment : $(document);\n if (!that.trigger(OPEN)) {\n if (that._closing) {\n wrapper.kendoStop(true, true);\n }\n that._closing = false;\n that.toFront();\n if (options.autoFocus) {\n that.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 that.wrapper.find(TITLEBAR_BUTTONS).addClass('k-bare');\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 that.wrapper.find(TITLEBAR_BUTTONS).removeClass('k-bare');\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}));"]}