{"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","defaults","_hasBindingTarget","kendoBindingTarget","_tabindex","TABINDEX","tabindex","removeAttr","setOptions","_setEvents","force","getSize","currentSize","_size","_resize","dimensions","setSize","destroy","removeData","_destroy","_muteAngularRebind","_muteRebind","dataItems","flatView","_angularItems","cmd","elements","items","dataItem","domElement","offsetHeight","notify","initWidget","roles","fullPath","widgetKeyRegExp","widgetKey","nodeType","isEmptyObject","rolesFromNamespaces","namespaces","find","widgetsArray","makeArray","widgetInstance","progress","container","leftRight","webkitCorrection","containerScrollLeft","mask","opacity","loading","prependTo","remove","plugin","register","widgetEntry","args","method","nullObject","autoApplyNS","kendoDestroy","view","viewElement","viewHasNativeScrolling","useNativeScrolling","eq","appLevelNativeScrolling","application","themes","views","touchScroller","useNative","Scroller","kendoMobileScroller","suites","editorToolbar","elementData","onResize","setTimeout","unbindResize","off","attrValue","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","kendoFocusable","setupMouseMute","mouseTrap","bustClick","captureMouse","stopPropagation","muteMouse","clearTimeout","mouseTrapTimeoutID","unMuteMouse","move","cancel","MSPointerEnter","MSPointerLeave","orig","fix","special","delegateType","bindType","handle","ret","related","relatedTarget","handleObj","origType","applyEventMap","keyDownHandler","kendoKeydown","preventKendoKeydown","keyDownCallBack","pop","search","touchstart","touchend","ruleToDate","rule","targetDay","ourDay","time","cache","getUTCDay","setUTCDate","findRule","utcTime","rules","zone","grep","from","to","findZone","zones","until","zoneRules","zoneAndRule","info","fromOffset","toOffset","diff","fromLocalOffset","toLocalOffset","tempToOffset","toLocalDate","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec","Sun","Mon","Tue","Wed","Thu","Fri","Sat","setDayOfWeek","dir","setDate","dayOfWeek","firstDayOfMonth","lastDayOfMonth","last","timeOffset","moveDateToWeekStart","weekStartDay","addDays","calcWeekInYear","firstWeekInYear","newDate","diffInMS","MS_PER_DAY","weekInYear","prevWeekDate","nextWeekDate","weekNumber","toUtcTime","toInvariantTime","isInTimeRange","msValue","msMin","msMax","isInDateRange","setTime","ignoreDST","difference","MS_PER_MINUTE","today","isToday","staticDate","nextDay","previousDay","MS_PER_HOUR","stripWhitespace","iterator","child","createNodeIterator","NodeFilter","SHOW_TEXT","node","FILTER_ACCEPT","FILTER_REJECT","nextNode","referenceNode","textContent","trim","childNodes","nodeValue","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","queueAnimation","runNextAnimation","parseQueryStringParams","queryString","params","paramParts","elementUnderCursor","x","client","wheelDeltaY","jQueryEvent","delta","deltaY","wheelDelta","detail","axis","VERTICAL_AXIS","throttle","delay","timeout","throttled","lastExecTime","elapsed","caret","rangeElement","rangeDuplicated","selectionStart","selectionEnd","isPosition","focus","setSelectionRange","selection","createTextRange","collapse","moveStart","moveEnd","select","duplicate","moveToBookmark","createRange","getBookmark","setEndPoint","text","compileMobileDirective","scope","injector","invoke","$compile","$$phase","$digest","antiForgeryTokens","tokens","csrf_token","csrf_param","cycleForm","form","firstElement","lastElement","keyCode","shiftKey","focusElement","scrollTopPositions","scrollableParents","parentsUntil","setActive","focusNextElement","focussable","nextElement","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","setDefaults","path","curr","amd","a1","a2","a3","absoluteURL","pathPrefix","regEx","host","hashDelimiter","bang","locationHash","stripRoot","root","fixHash","fixBang","CHANGE","BACK","SAME","CHECK_URL_INTERVAL","BROKEN_BACK_NAV","hashStrip","HistoryAdapter","back","forward","replaceLocation","PushStateAdapter","navigate","title","replaceState","normalize","pathname","change","normalizeCurrent","fixedUrl","hash","hashBang","HashAdapter","_id","_interval","setInterval","clearInterval","History","_started","adapter","createAdapter","historyLength","locations","silent","_navigate","backCalled","decode","_checkUrl","newLength","navigatingInExisting","prev","backButtonPressed","namedParamReplace","optional","routeToRegExp","route","ignoreCase","escapeRegExp","optionalParam","namedParam","splatParam","stripUrl","INIT","ROUTE_MISSING","Route","_callback","queryStringParams","_back","worksWith","Router","routes","_urlChangedProxy","_sameProxy","_backProxy","initEventObject","sameProxy","_same","backProxy","urlChangedProxy","_urlChanged","same","touchDelta","touch1","touch2","x1","y1","x2","y2","dx","dy","center","distance","sqrt","getTouches","currentTarget","api","identifier","pointerId","withEachUpEvent","downEvents","now","OS","invalidZeroEvents","DEFAULT_MIN_HOLD","CLICK_DELAY","DEFAULT_THRESHOLD","PRESS","HOLD","SELECT","START","MOVE","CANCEL","TAP","DOUBLETAP","RELEASE","GESTURESTART","GESTURECHANGE","GESTUREEND","GESTURETAP","THRESHOLD","mouse","pointer","ENABLE_GLOBAL_SURFACE","TouchAxis","_updateLocationData","startLocation","velocity","timeStamp","timeDelta","initialDelta","Touch","userEvents","touchInfo","useClickAsTap","initialTouch","pressEvent","_clicks","supportDoubleTap","_moved","_finished","press","_holdTimeout","minHold","_trigger","_tap","_clickTimeout","_hold","preventMove","_shouldNotMove","_withinIgnoreThreshold","UserEvents","dispose","_start","endTime","activeTouches","skip","isMoved","startTime","xDelta","yDelta","defaultAction","surfaceElement","preventIfMovingProxy","_maxTouches","multiTouch","allowSelection","captureUpIfMoved","fastTap","eventNS","surface","global","ownerDocument","pressed","touchAction","preventDragEvent","preventIfMoving","_isMoved","_destroyed","removeEventListener","_disposeAll","capture","_isMultiTouch","_apiCall","_maxTouchesReached","_select","which","_move","_eachTouch","_end","_click","pageX","pageY","methodName","matchingTouch","dict","defaultThreshold","MAX_DOUBLE_TAP_DISTANCE","eventProxy","_triggerTouch","gestureEventProxy","hold","tap","gesturestart","gesturechange","gestureend","enableSwipe","minXDelta","maxYDelta","maxDuration","doubleTapTimeout","lastTap","_dragstart","_swipestart","_swipemove","direction","toOdataFilter","useOdataFour","operator","logic","filters","odataFilters","odataFiltersVersionFour","stripMetadata","hex16","createBoundary","createDelimeter","boundary","close","NEWLINE","createCommand","transport","item","httpVerb","command","transportUrl","commandPrefix","getOperationHeader","changeset","changeId","header","getOperationContent","content","DOUBLELINE","getOperations","collection","skipContent","requestBody","processCollection","colection","getBoundary","createBatchRequest","colections","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","_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","SUMMARYTEMPLATE","Validator","NS","INVALIDMSG","INVALIDINPUT","VALIDINPUT","VALIDATIONSUMMARY","MESSAGEBOX","emailRegExp","urlRegExp","INPUTSELECTOR","CHECKBOXSELECTOR","NUMBERINPUTSELECTOR","BLUR","NAME","FORM","NOVALIDATE","VALIDATE","VALIDATE_INPUT","patternMatcher","matcher","hasAttribute","validateAttributeSelector","_errorTemplate","errorTemplate","_summaryTemplate","validationSummary","_inputSelector","_checkboxSelector","_errors","_attachEvents","_isValidated","required","email","dateCompare","checkbox","raise","validateOnBlur","validate","stopImmediatePropagation","_checkElement","validateInput","inputs","invalid","isValid","showValidationSummary","valid","lbl","messageText","messageLabel","wasValid","lblId","parentElement","inputWrap","_checkValidity","_findMessageContainer","_extractMessage","_decorateMessageContainer","insertAfter","_inputWrapper","hideMessages","locators","messageLocators","getElementsByTagName","locate","decorate","ruleKey","nonDefaultMessage","customMessage","currentOptions","_getInputNames","_errorsByName","inputNames","_renderSummary","prevElement","_summaryClick","nextFocusable","kendoInstance","link","errorsList","summary","hideValidationSummary","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","Button","CLICK","MOUSEDOWN","MOUSEUP","MOUSEOUT","KBUTTON","KBUTTONICON","KBUTTONICONTEXT","DISABLED","DISABLEDSTATE","FOCUSEDSTATE","SELECTEDSTATE","OVERLAY","BUTTON_DEFAULTS","icon","iconClass","spriteCssClass","imageUrl","badge","createBadge","iconElement","_focus","_blur","_keydown","_removeActive","_addActive","_isNativeButton","span","img","isEmpty","err","badgeOptions","overlay","numeric","selectOption","wrapClassName","iconTemplate","FIRST","PREV","NEXT","LAST","SIZE","KEYDOWN","MAX_VALUE","Pager","pageSizes","pageItems","sizeClassName","_createDataSource","linkTemplate","selectTemplate","currentPageTemplate","numericSelectItemTemplate","_refreshHandler","downEvent","previousNext","_numericWrap","_numericSelect","of","allPages","itemsPerPage","DropDownList","kendoDropDownList","_refreshClick","_numericSelectChange","_resizeHandler","_getWidthSizeClass","numericItemTemplate","buttonCount","responsive","morePages","setDataSource","reminder","hasAll","selectAll","selectHtml","collapsedTotal","_collapsedTotal","tabKeyTrapNS","focusableNodesSelector","TabKeyTrap","OPEN","CLOSE","DEACTIVATE","ACTIVATE","CENTER","TOP","BOTTOM","ABSOLUTE","BODY","LOCATION","VISIBLE","EFFECTS","ACTIVEBORDER","ACTIVEBORDERREGEXP","ACTIVECHILDREN","DOCUMENT_ELEMENT","WINDOW","Popup","parentPopup","collisions","anchor","_hovered","scrollArea","animation","open","_animationClose","_mousedownProxy","_mousedown","_resizeProxy","toggleTarget","toggleEvent","viewport","copyAnchorStyles","modal","adjustSize","_hideDirClass","_closing","_toggleResize","fixed","flipped","_openAnimation","_showDirClass","_location","dirClass","skipEffects","openEffects","closeEffects","popup","ev","_resizeTimeout","_scrollableParents","_fit","viewPortSize","output","_flip","anchorSize","boxSize","siblingContainer","parentZIndex","viewportOffset","viewportWidth","viewportHeight","pos","anchorParent","offsets","flipPos","elementHeight","wrapperHeight","isWindow","origins","positions","siblings","_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","ARIA_DISABLED","ARIA_PRESSED","ICON","ICON_PREFIX","BUTTON_ICON","BUTTON_ICON_TEXT","LIST_CONTAINER","SPLIT_BUTTON_ARROW","OVERFLOW_CONTAINER","FIRST_TOOLBAR_VISIBLE","LAST_TOOLBAR_VISIBLE","TOGGLE","OVERFLOW_OPEN","OVERFLOW_CLOSE","OVERFLOW_NEVER","OVERFLOW_AUTO","OVERFLOW_ALWAYS","OVERFLOW_HIDDEN","OPTION_LIST_SUFFIX","KENDO_UID_ATTR","toolbar","overflowAnchor","overflowContainer","registerComponent","addOverflowAttr","addUidAttr","addIdAttr","addOverflowIdAttr","hidden","overflowHidden","isEnabled","twin","splitContainerId","resizable","useButtonTag","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","directionNumber","searchIndex","focusableItem","elementToFocus","prevElements","prevAll","containerWidth","_stretch","_markVisibles","_childrenWidth","childrenWidth","commandElement","visibleCommands","_hideItem","hiddenCommands","_showItem","itemOuterWidth","overflowItems","toolbarItems","visibleOverflowItems","visibleToolbarItems","unifyType","getSelectedOption","mapChangedItems","itemsToMatch","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","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","_userTriggered","_oldText","_valueBeforeCascade","_oldIndex","isFiltered","_typing","typing","_enable","_dataValue","_offsetHeight","_height","offsetTop","popups","footerHeight","_openHandler","_adjustListWidth","borderLeftWidth","borderRightWidth","autoWidth","minWidth","whiteSpace","_closeHandler","_focusItem","noFocusedItem","scrollToIndex","_calculateGroupPadding","padding","_calculatePopupHeight","_calculateColumnsHeaderPadding","_refreshScroll","enableYScroll","overflowX","overflowY","_resizePopup","_popup","_makeUnselectable","_toggleHover","preventFocus","touchEnabled","MSPointers","_prevent","_triggerCascade","_cascadeTriggered","_cascadedValue","userTriggered","_triggerChange","_requestStartHandler","_requestEndHandler","_errorHandler","requireValueMapper","valueMapper","_initial","_initialIndex","_current","_parentWidget","_cascadeSelect","_cascadeValue","_accessorInput","_accessorSelect","_custom","_syncValueAndText","custom","_hideBusy","_busy","_arrowIcon","_showBusy","_request","_requestEnd","_firstItem","focusFirst","_lastItem","focusLast","_nextItem","focusNext","_prevItem","focusPrev","_getNormalizedDataItem","isIndex","hasOptionLabel","optionLabel","getElementIndex","dataItemByIndex","_getNormalizedSelectCandidate","normalizedCandidate","moveIndex","selectCandidate","activeFilter","shouldTrigger","isVirtual","_fetch","_get","_focusElement","focusout","scrollWith","_fetchData","hasItems","_options","dataText","dataValue","htmlElement","formId","_cascade","cascade","_cascadeHandlerProxy","_cascadeHandler","_cascadeFilterRequests","_selectedValue","_toggleCascadeOnFocus","valueBeforeCascade","_clearSelection","_cascadeChange","filterValue","cascadeFromParentField","cascadeFromField","currentHandler","_touchHandlers","_optionID","_selectedIndices","_dataItems","_values","_getter","_templates","_onScroll","_scrollId","_renderHeader","_fixedHeader","startY","endY","tapPosition","_touchTriggered","_triggerClick","_render","scroll","itemOffsetTop","itemOffsetHeight","contentScrollTop","contentOffsetHeight","bottomDistance","_getValues","_valueGetter","hasCandidate","focusIndex","skipUpdate","_skipUpdate","indices","filtered","singleSelection","selectedIndices","uiSelectedIndices","added","_deselectFiltered","_deselect","_valueComparer","removeAt","setValue","_valueDeferred","_valueIndices","_valueExpr","normalized","_valueType","_dataItemPosition","valueExpr","removedIndices","_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","transitionOrigin","KEYDOWN_NS","MIN","SLIDE","CENTURY","NAVIGATE","OTHERMONTHCLASS","OUTOFRANGE","TODAY","CELLSELECTOR","CELLSELECTORVALID","WEEKCOLUMNSELECTOR","FOCUS_WITH_NS","MOUSEENTER_WITH_NS","MOUSELEAVE","PREVARROW","NEXTARROW","ARIA_SELECTED","ARIA_LABEL","decade","century","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","_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","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","KENDO_KEYDOWN","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","_innerWrapper","_setItemIds","viewLength","toolbarElement","toolbarOptions","toolbarInsertion","commandName","execute","_updateToolStates","listBoxElements","elementsLength","_commands","commandType","getItems","canExecute","moveItems","movedItem","indecesInDom","movedItems","itemComparer","moveAction","item1","item2","indexItem1","indexItem2","domIndices","sourceListBox","getSourceListBox","destinationListBox","getDestinationListBox","updatedSelection","getUpdatedSelection","updateSelection","itemFilter","lastEnabledItem","containsLastItem","itemToSelect","_initTemplates","_createTools","_attachEventHandlers","_detachEventHandlers","toolsLength","toolsMessages","toolList","_createToolList","defaultTools","_onToolClick","_executeToolCommand","_updateToolState","toolName","toolElement","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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t+B,GAAM6gC,aAAe,SAAUC,GAC3B,GAAIC,GAAQ/gC,GAAMghC,kBAAkBF,IAAeA,CACnD,OAAO7gC,IAAQioB,YAAczpB,EAAOypB,WAAW6Y,GAAO3jB,SAE1Dpd,GAAMghC,kBAAoB,SAAUC,GAChC,OACIC,GAAM,qBACNC,GAAM,qBACNC,GAAM,qBACNC,GAAM,qBACNC,GAAM,uBACRL,IAENjhC,GAAMuhC,cACFC,OACI,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,QAEJC,OACI,OACA,OACA,OACA,OACA,OACA,OACA,MACA,QACA,OACA,OACA,OACA,OACA,OACA,MACA,OACA,OACA,QAEJC,OACI,MACA,OACA,QACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,QACA,OACA,OACA,MACA,OACA,OACA,QACA,OACA,SAEJC,KACI,OACA,QACA,OACA,SACA,OACA,OACA,OACA,OACA,OACA,QACA,OACA,QAEJC,cACI,OACA,OACA,OACA,OACA,SAEJj+B,MACI,OACA,OACA,SAEJk+B,aACI,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,QACA,OACA,QACA,OACA,OACA,OACA,OACA,QACA,OACA,OACA,OACA,OACA,OACA,QACA,MACA,OACA,OACA,UAEJC,KAAM,QACNC,QACI,OACA,OACA,OACA,OACA,OACA,OACA,UACA,OACA,QAEJC,KACI,MACA,OACA,MACA,QACA,OACA,OACA,OACA,OACA,OACA,UACA,KACA,OACA,SAEJC,cACI,OACA,OACA,SACA,OACA,OACA,OACA,SAGRjiC,GAAMkiC,aAAe,SAAUC,EAAWC,GAArB,GAORn/B,GACDo/B,EAPJC,EAActiC,GAAMuhC,aACpBgB,EAAShyB,OAAO6a,KAAKkX,GACrBh7B,EAAO,MACX,IAAI66B,IAAczjC,IAAcyjC,EAAUziC,OACtC,MAAO4H,EAEX,KAASrE,EAAI,EAAGA,EAAIs/B,EAAO7iC,OAAQuD,GAAK,EAEpC,GADIo/B,EAAaC,EAAYC,EAAOt/B,IACh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hD,EAAW,4EAA8E1uF,EAAQzN,KAAK,oBAW9IP,OAAOuB,MAAM8P,OAAQrR,OAAO2vB,SACvB3vB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAO0mC,IAAM1mC,OAAS,SAAU2mC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAU7mC,EAAGC,QACVA,OAAO,iBACH,aACA,eACA,cACA,aACA,WACA,mBACA,iBACA,aACA,qBACA,eACA,kBACA,mBACA,oBACA,wBACA,kBACA,iBACA,mBACA,eACA,cACA,cACA,qBACA,gBACA,gBACA,aACA,iBACA,kBACA,mBACA,qBACA,qBACA,iBACA,oBACA,oBACA,iBACA,gBACA,uBACA,sBACA,aACA,iBACA,iBACA,oBACA,wBACA,iBACA,mBACA,uBACA,eACA,iBACA,eACA,eACA,oBACA,uBACA,sBACA,wBACA,oBACA,oBACA,yBACA,sBACA,yBACA,oBACA,2BACA,2BACA,sBACA,2BACA,2BACA,wBACA,sBACA,0BACA,sBACA,wBACA,iBACDD,IACL,WACE,YACA,OAAOG,QAAOuB,OACE,kBAAVzB,SAAwBA,OAAO0mC,IAAM1mC,OAAS,SAAU2mC,EAAIC,EAAIC,IACrEA,GAAMD","file":"kendo.ui.core.min.js","sourcesContent":["/*!\n * Copyright 2020 Progress Software Corporation and/or one of its subsidiaries or affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\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.2.414'.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, that.defaults, 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 kendo.keyDownHandler = function (e, widget) {\n var events = widget._events.kendoKeydown;\n if (!events) {\n return true;\n }\n events = events.slice();\n e.sender = widget;\n e.preventKendoKeydown = false;\n for (var idx = 0, length = events.length; idx < length; idx++) {\n events[idx].call(widget, e);\n }\n return !e.preventKendoKeydown;\n };\n var on = $.fn.on;\n function kendoJQuery(selector, context) {\n return new kendoJQuery.fn.init(selector, context);\n }\n noDepricateExtend(true, kendoJQuery, $);\n kendoJQuery.fn = kendoJQuery.prototype = new $();\n kendoJQuery.fn.constructor = kendoJQuery;\n kendoJQuery.fn.init = function (selector, context) {\n if (context && context instanceof $ && !(context instanceof kendoJQuery)) {\n context = kendoJQuery(context);\n }\n return $.fn.init.call(this, selector, context, rootjQuery);\n };\n kendoJQuery.fn.init.prototype = kendoJQuery.fn;\n var rootjQuery = kendoJQuery(document);\n extend(kendoJQuery.fn, {\n handler: function (handler) {\n this.data('handler', handler);\n return this;\n },\n autoApplyNS: function (ns) {\n this.data('kendoNS', ns || kendo.guid());\n return this;\n },\n on: function () {\n var that = this, ns = that.data('kendoNS');\n if (arguments.length === 1) {\n return on.call(that, arguments[0]);\n }\n var context = that, args = slice.call(arguments);\n if (typeof args[args.length - 1] === UNDEFINED) {\n args.pop();\n }\n var callback = args[args.length - 1], events = kendo.applyEventMap(args[0], ns);\n if (support.mouseAndTouchPresent && events.search(/mouse|click/) > -1 && this[0] !== document.documentElement) {\n MouseEventNormalizer.setupMouseMute();\n var selector = args.length === 2 ? null : args[1], bustClick = events.indexOf('click') > -1 && events.indexOf('touchend') > -1;\n on.call(this, {\n touchstart: MouseEventNormalizer.muteMouse,\n touchend: MouseEventNormalizer.unMuteMouse\n }, selector, { bustClick: bustClick });\n }\n if (arguments[0].indexOf('keydown') !== -1 && args[1] && args[1].options) {\n args[0] = events;\n var widget = args[1];\n var keyDownCallBack = args[args.length - 1];\n args[args.length - 1] = function (e) {\n if (kendo.keyDownHandler(e, widget)) {\n return keyDownCallBack.apply(this, [e]);\n }\n };\n on.apply(that, args);\n return that;\n }\n if (typeof callback === STRING) {\n context = that.data('handler');\n callback = context[callback];\n args[args.length - 1] = function (e) {\n callback.call(context, e);\n };\n }\n args[0] = events;\n on.apply(that, args);\n return that;\n },\n kendoDestroy: function (ns) {\n ns = ns || this.data('kendoNS');\n if (ns) {\n this.off('.' + ns);\n }\n return this;\n }\n });\n kendo.jQuery = kendoJQuery;\n kendo.eventMap = eventMap;\n kendo.timezone = function () {\n var months = {\n Jan: 0,\n Feb: 1,\n Mar: 2,\n Apr: 3,\n May: 4,\n Jun: 5,\n Jul: 6,\n Aug: 7,\n Sep: 8,\n Oct: 9,\n Nov: 10,\n Dec: 11\n };\n var days = {\n Sun: 0,\n Mon: 1,\n Tue: 2,\n Wed: 3,\n Thu: 4,\n Fri: 5,\n Sat: 6\n };\n function ruleToDate(year, rule) {\n var date;\n var targetDay;\n var ourDay;\n var month = rule[3];\n var on = rule[4];\n var time = rule[5];\n var cache = rule[8];\n if (!cache) {\n rule[8] = cache = {};\n }\n if (cache[year]) {\n return cache[year];\n }\n if (!isNaN(on)) {\n date = new Date(Date.UTC(year, months[month], on, time[0], time[1], time[2], 0));\n } else if (on.indexOf('last') === 0) {\n date = new Date(Date.UTC(year, months[month] + 1, 1, time[0] - 24, time[1], time[2], 0));\n targetDay = days[on.substr(4, 3)];\n ourDay = date.getUTCDay();\n date.setUTCDate(date.getUTCDate() + targetDay - ourDay - (targetDay > ourDay ? 7 : 0));\n } else if (on.indexOf('>=') >= 0) {\n date = new Date(Date.UTC(year, months[month], on.substr(5), time[0], time[1], time[2], 0));\n targetDay = days[on.substr(0, 3)];\n ourDay = date.getUTCDay();\n date.setUTCDate(date.getUTCDate() + targetDay - ourDay + (targetDay < ourDay ? 7 : 0));\n } else if (on.indexOf('<=') >= 0) {\n date = new Date(Date.UTC(year, months[month], on.substr(5), time[0], time[1], time[2], 0));\n targetDay = days[on.substr(0, 3)];\n ourDay = date.getUTCDay();\n date.setUTCDate(date.getUTCDate() + targetDay - ourDay - (targetDay > ourDay ? 7 : 0));\n }\n return cache[year] = date;\n }\n function findRule(utcTime, rules, zone) {\n rules = rules[zone];\n if (!rules) {\n var time = zone.split(':');\n var offset = 0;\n if (time.length > 1) {\n offset = time[0] * 60 + Number(time[1]);\n }\n return [\n -1000000,\n 'max',\n '-',\n 'Jan',\n 1,\n [\n 0,\n 0,\n 0\n ],\n offset,\n '-'\n ];\n }\n var year = new Date(utcTime).getUTCFullYear();\n rules = jQuery.grep(rules, function (rule) {\n var from = rule[0];\n var to = rule[1];\n return from <= year && (to >= year || from == year && to == 'only' || to == 'max');\n });\n rules.push(utcTime);\n rules.sort(function (a, b) {\n if (typeof a != 'number') {\n a = Number(ruleToDate(year, a));\n }\n if (typeof b != 'number') {\n b = Number(ruleToDate(year, b));\n }\n return a - b;\n });\n var rule = rules[jQuery.inArray(utcTime, rules) - 1] || rules[rules.length - 1];\n return isNaN(rule) ? rule : null;\n }\n function findZone(utcTime, zones, timezone) {\n var zoneRules = zones[timezone];\n if (typeof zoneRules === 'string') {\n zoneRules = zones[zoneRules];\n }\n if (!zoneRules) {\n throw new Error('Timezone \"' + timezone + '\" is either incorrect, or kendo.timezones.min.js is not included.');\n }\n for (var idx = zoneRules.length - 1; idx >= 0; idx--) {\n var until = zoneRules[idx][3];\n if (until && utcTime > until) {\n break;\n }\n }\n var zone = zoneRules[idx + 1];\n if (!zone) {\n throw new Error('Timezone \"' + timezone + '\" not found on ' + utcTime + '.');\n }\n return zone;\n }\n function zoneAndRule(utcTime, zones, rules, timezone) {\n if (typeof utcTime != NUMBER) {\n utcTime = Date.UTC(utcTime.getFullYear(), utcTime.getMonth(), utcTime.getDate(), utcTime.getHours(), utcTime.getMinutes(), utcTime.getSeconds(), utcTime.getMilliseconds());\n }\n var zone = findZone(utcTime, zones, timezone);\n return {\n zone: zone,\n rule: findRule(utcTime, rules, zone[1])\n };\n }\n function offset(utcTime, timezone) {\n if (timezone == 'Etc/UTC' || timezone == 'Etc/GMT') {\n return 0;\n }\n var info = zoneAndRule(utcTime, this.zones, this.rules, timezone);\n var zone = info.zone;\n var rule = info.rule;\n return kendo.parseFloat(rule ? zone[0] - rule[6] : zone[0]);\n }\n function abbr(utcTime, timezone) {\n var info = zoneAndRule(utcTime, this.zones, this.rules, timezone);\n var zone = info.zone;\n var rule = info.rule;\n var base = zone[2];\n if (base.indexOf('/') >= 0) {\n return base.split('/')[rule && +rule[6] ? 1 : 0];\n } else if (base.indexOf('%s') >= 0) {\n return base.replace('%s', !rule || rule[7] == '-' ? '' : rule[7]);\n }\n return base;\n }\n function convert(date, fromOffset, toOffset) {\n var tempToOffset = toOffset;\n var diff;\n if (typeof fromOffset == STRING) {\n fromOffset = this.offset(date, fromOffset);\n }\n if (typeof toOffset == STRING) {\n toOffset = this.offset(date, toOffset);\n }\n var fromLocalOffset = date.getTimezoneOffset();\n date = new Date(date.getTime() + (fromOffset - toOffset) * 60000);\n var toLocalOffset = date.getTimezoneOffset();\n if (typeof tempToOffset == STRING) {\n tempToOffset = this.offset(date, tempToOffset);\n }\n diff = toLocalOffset - fromLocalOffset + (toOffset - tempToOffset);\n return new Date(date.getTime() + diff * 60000);\n }\n function apply(date, timezone) {\n return this.convert(date, date.getTimezoneOffset(), timezone);\n }\n function remove(date, timezone) {\n return this.convert(date, timezone, date.getTimezoneOffset());\n }\n function toLocalDate(time) {\n return this.apply(new Date(time), 'Etc/UTC');\n }\n return {\n zones: {},\n rules: {},\n offset: offset,\n convert: convert,\n apply: apply,\n remove: remove,\n abbr: abbr,\n toLocalDate: toLocalDate\n };\n }();\n kendo.date = function () {\n var MS_PER_MINUTE = 60000, MS_PER_DAY = 86400000;\n function adjustDST(date, hours) {\n if (hours === 0 && date.getHours() === 23) {\n date.setHours(date.getHours() + 2);\n return true;\n }\n return false;\n }\n function setDayOfWeek(date, day, dir) {\n var hours = date.getHours();\n dir = dir || 1;\n day = (day - date.getDay() + 7 * dir) % 7;\n date.setDate(date.getDate() + day);\n adjustDST(date, hours);\n }\n function dayOfWeek(date, day, dir) {\n date = new Date(date);\n setDayOfWeek(date, day, dir);\n return date;\n }\n function firstDayOfMonth(date) {\n return new Date(date.getFullYear(), date.getMonth(), 1);\n }\n function lastDayOfMonth(date) {\n var last = new Date(date.getFullYear(), date.getMonth() + 1, 0), first = firstDayOfMonth(date), timeOffset = Math.abs(last.getTimezoneOffset() - first.getTimezoneOffset());\n if (timeOffset) {\n last.setHours(first.getHours() + timeOffset / 60);\n }\n return last;\n }\n function moveDateToWeekStart(date, weekStartDay) {\n if (weekStartDay !== 1) {\n return addDays(dayOfWeek(date, weekStartDay, -1), 4);\n }\n return addDays(date, 4 - (date.getDay() || 7));\n }\n function calcWeekInYear(date, weekStartDay) {\n var firstWeekInYear = new Date(date.getFullYear(), 0, 1, -6);\n var newDate = moveDateToWeekStart(date, weekStartDay);\n var diffInMS = newDate.getTime() - firstWeekInYear.getTime();\n var days = Math.floor(diffInMS / MS_PER_DAY);\n return 1 + Math.floor(days / 7);\n }\n function weekInYear(date, weekStartDay) {\n if (weekStartDay === undefined) {\n weekStartDay = kendo.culture().calendar.firstDay;\n }\n var prevWeekDate = addDays(date, -7);\n var nextWeekDate = addDays(date, 7);\n var weekNumber = calcWeekInYear(date, weekStartDay);\n if (weekNumber === 0) {\n return calcWeekInYear(prevWeekDate, weekStartDay) + 1;\n }\n if (weekNumber === 53 && calcWeekInYear(nextWeekDate, weekStartDay) > 1) {\n return 1;\n }\n return weekNumber;\n }\n function getDate(date) {\n date = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0);\n adjustDST(date, 0);\n return date;\n }\n function toUtcTime(date) {\n return Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n }\n function getMilliseconds(date) {\n return toInvariantTime(date).getTime() - getDate(toInvariantTime(date));\n }\n function isInTimeRange(value, min, max) {\n var msMin = getMilliseconds(min), msMax = getMilliseconds(max), msValue;\n if (!value || msMin == msMax) {\n return true;\n }\n if (min >= max) {\n max += MS_PER_DAY;\n }\n msValue = getMilliseconds(value);\n if (msMin > msValue) {\n msValue += MS_PER_DAY;\n }\n if (msMax < msMin) {\n msMax += MS_PER_DAY;\n }\n return msValue >= msMin && msValue <= msMax;\n }\n function isInDateRange(value, min, max) {\n var msMin = min.getTime(), msMax = max.getTime(), msValue;\n if (msMin >= msMax) {\n msMax += MS_PER_DAY;\n }\n msValue = value.getTime();\n return msValue >= msMin && msValue <= msMax;\n }\n function addDays(date, offset) {\n var hours = date.getHours();\n date = new Date(date);\n setTime(date, offset * MS_PER_DAY);\n adjustDST(date, hours);\n return date;\n }\n function setTime(date, milliseconds, ignoreDST) {\n var offset = date.getTimezoneOffset();\n var difference;\n date.setTime(date.getTime() + milliseconds);\n if (!ignoreDST) {\n difference = date.getTimezoneOffset() - offset;\n date.setTime(date.getTime() + difference * MS_PER_MINUTE);\n }\n }\n function setHours(date, time) {\n date = new Date(date.getFullYear(), date.getMonth(), date.getDate(), time.getHours(), time.getMinutes(), time.getSeconds(), time.getMilliseconds());\n adjustDST(date, time.getHours());\n return date;\n }\n function today() {\n return getDate(new Date());\n }\n function isToday(date) {\n return getDate(date).getTime() == today().getTime();\n }\n function toInvariantTime(date) {\n var staticDate = new Date(1980, 1, 1, 0, 0, 0);\n if (date) {\n staticDate.setHours(date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n }\n return staticDate;\n }\n return {\n adjustDST: adjustDST,\n dayOfWeek: dayOfWeek,\n setDayOfWeek: setDayOfWeek,\n getDate: getDate,\n isInDateRange: isInDateRange,\n isInTimeRange: isInTimeRange,\n isToday: isToday,\n nextDay: function (date) {\n return addDays(date, 1);\n },\n previousDay: function (date) {\n return addDays(date, -1);\n },\n toUtcTime: toUtcTime,\n MS_PER_DAY: MS_PER_DAY,\n MS_PER_HOUR: 60 * MS_PER_MINUTE,\n MS_PER_MINUTE: MS_PER_MINUTE,\n setTime: setTime,\n setHours: setHours,\n addDays: addDays,\n today: today,\n toInvariantTime: toInvariantTime,\n firstDayOfMonth: firstDayOfMonth,\n lastDayOfMonth: lastDayOfMonth,\n weekInYear: weekInYear,\n getMilliseconds: getMilliseconds\n };\n }();\n kendo.stripWhitespace = function (element) {\n if (document.createNodeIterator) {\n var iterator = document.createNodeIterator(element, NodeFilter.SHOW_TEXT, function (node) {\n return node.parentNode == element ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;\n }, false);\n while (iterator.nextNode()) {\n if (iterator.referenceNode && !iterator.referenceNode.textContent.trim()) {\n iterator.referenceNode.parentNode.removeChild(iterator.referenceNode);\n }\n }\n } else {\n for (var i = 0; i < element.childNodes.length; i++) {\n var child = element.childNodes[i];\n if (child.nodeType == 3 && !/\\S/.test(child.nodeValue)) {\n element.removeChild(child);\n i--;\n }\n if (child.nodeType == 1) {\n kendo.stripWhitespace(child);\n }\n }\n }\n };\n var animationFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function (callback) {\n setTimeout(callback, 1000 / 60);\n };\n kendo.animationFrame = function (callback) {\n animationFrame.call(window, callback);\n };\n var animationQueue = [];\n kendo.queueAnimation = function (callback) {\n animationQueue[animationQueue.length] = callback;\n if (animationQueue.length === 1) {\n kendo.runNextAnimation();\n }\n };\n kendo.runNextAnimation = function () {\n kendo.animationFrame(function () {\n if (animationQueue[0]) {\n animationQueue.shift()();\n if (animationQueue[0]) {\n kendo.runNextAnimation();\n }\n }\n });\n };\n kendo.parseQueryStringParams = function (url) {\n var queryString = url.split('?')[1] || '', params = {}, paramParts = queryString.split(/&|=/), length = paramParts.length, idx = 0;\n for (; idx < length; idx += 2) {\n if (paramParts[idx] !== '') {\n params[decodeURIComponent(paramParts[idx])] = decodeURIComponent(paramParts[idx + 1]);\n }\n }\n return params;\n };\n kendo.elementUnderCursor = function (e) {\n if (typeof e.x.client != 'undefined') {\n return document.elementFromPoint(e.x.client, e.y.client);\n }\n };\n kendo.wheelDeltaY = function (jQueryEvent) {\n var e = jQueryEvent.originalEvent, deltaY = e.wheelDeltaY, delta;\n if (e.wheelDelta) {\n if (deltaY === undefined || deltaY) {\n delta = e.wheelDelta;\n }\n } else if (e.detail && e.axis === e.VERTICAL_AXIS) {\n delta = -e.detail * 10;\n }\n return delta;\n };\n kendo.throttle = function (fn, delay) {\n var timeout;\n var lastExecTime = 0;\n if (!delay || delay <= 0) {\n return fn;\n }\n var throttled = function () {\n var that = this;\n var elapsed = +new Date() - lastExecTime;\n var args = arguments;\n function exec() {\n fn.apply(that, args);\n lastExecTime = +new Date();\n }\n if (!lastExecTime) {\n return exec();\n }\n if (timeout) {\n clearTimeout(timeout);\n }\n if (elapsed > delay) {\n exec();\n } else {\n timeout = setTimeout(exec, delay - elapsed);\n }\n };\n throttled.cancel = function () {\n clearTimeout(timeout);\n };\n return throttled;\n };\n kendo.caret = function (element, start, end) {\n var rangeElement;\n var isPosition = start !== undefined;\n if (end === undefined) {\n end = start;\n }\n if (element[0]) {\n element = element[0];\n }\n if (isPosition && element.disabled) {\n return;\n }\n try {\n if (element.selectionStart !== undefined) {\n if (isPosition) {\n element.focus();\n var mobile = support.mobileOS;\n if (mobile.wp || mobile.android) {\n setTimeout(function () {\n element.setSelectionRange(start, end);\n }, 0);\n } else {\n element.setSelectionRange(start, end);\n }\n } else {\n start = [\n element.selectionStart,\n element.selectionEnd\n ];\n }\n } else if (document.selection) {\n if ($(element).is(':visible')) {\n element.focus();\n }\n rangeElement = element.createTextRange();\n if (isPosition) {\n rangeElement.collapse(true);\n rangeElement.moveStart('character', start);\n rangeElement.moveEnd('character', end - start);\n rangeElement.select();\n } else {\n var rangeDuplicated = rangeElement.duplicate(), selectionStart, selectionEnd;\n rangeElement.moveToBookmark(document.selection.createRange().getBookmark());\n rangeDuplicated.setEndPoint('EndToStart', rangeElement);\n selectionStart = rangeDuplicated.text.length;\n selectionEnd = selectionStart + rangeElement.text.length;\n start = [\n selectionStart,\n selectionEnd\n ];\n }\n }\n } catch (e) {\n start = [];\n }\n return start;\n };\n kendo.compileMobileDirective = function (element, scope) {\n var angular = window.angular;\n element.attr('data-' + kendo.ns + 'role', element[0].tagName.toLowerCase().replace('kendo-mobile-', '').replace('-', ''));\n angular.element(element).injector().invoke([\n '$compile',\n function ($compile) {\n $compile(element)(scope);\n if (!/^\\$(digest|apply)$/.test(scope.$$phase)) {\n scope.$digest();\n }\n }\n ]);\n return kendo.widgetInstance(element, kendo.mobile.ui);\n };\n kendo.antiForgeryTokens = function () {\n var tokens = {}, csrf_token = $('meta[name=csrf-token],meta[name=_csrf]').attr('content'), csrf_param = $('meta[name=csrf-param],meta[name=_csrf_header]').attr('content');\n $('input[name^=\\'__RequestVerificationToken\\']').each(function () {\n tokens[this.name] = this.value;\n });\n if (csrf_param !== undefined && csrf_token !== undefined) {\n tokens[csrf_param] = csrf_token;\n }\n return tokens;\n };\n kendo.cycleForm = function (form) {\n var firstElement = form.find('input, .k-widget').first();\n var lastElement = form.find('button, .k-button').last();\n function focus(el) {\n var widget = kendo.widgetInstance(el);\n if (widget && widget.focus) {\n widget.focus();\n } else {\n el.focus();\n }\n }\n lastElement.on('keydown', function (e) {\n if (e.keyCode == kendo.keys.TAB && !e.shiftKey) {\n e.preventDefault();\n focus(firstElement);\n }\n });\n firstElement.on('keydown', function (e) {\n if (e.keyCode == kendo.keys.TAB && e.shiftKey) {\n e.preventDefault();\n focus(lastElement);\n }\n });\n };\n kendo.focusElement = function (element) {\n var scrollTopPositions = [];\n var scrollableParents = element.parentsUntil('body').filter(function (index, element) {\n var computedStyle = kendo.getComputedStyles(element, ['overflow']);\n return computedStyle.overflow !== 'visible';\n }).add(window);\n scrollableParents.each(function (index, parent) {\n scrollTopPositions[index] = $(parent).scrollTop();\n });\n try {\n element[0].setActive();\n } catch (e) {\n element[0].focus();\n }\n scrollableParents.each(function (index, parent) {\n $(parent).scrollTop(scrollTopPositions[index]);\n });\n };\n kendo.focusNextElement = function () {\n if (document.activeElement) {\n var focussable = $(':kendoFocusable');\n var index = focussable.index(document.activeElement);\n if (index > -1) {\n var nextElement = focussable[index + 1] || focussable[0];\n nextElement.focus();\n }\n }\n };\n kendo.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 (function () {\n kendo.defaults = kendo.defaults || {};\n kendo.setDefaults = function (key, value) {\n var path = key.split('.');\n var curr = kendo.defaults;\n key = path.pop();\n path.forEach(function (part) {\n if (curr[part] === undefined) {\n curr[part] = {};\n }\n curr = curr[part];\n });\n if (value.constructor === Object) {\n curr[key] = deepExtend({}, curr[key], value);\n } else {\n curr[key] = value;\n }\n };\n }());\n }(jQuery, window));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.router', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'router',\n name: 'Router',\n category: 'framework',\n description: 'The Router class is responsible for tracking the application state and navigating between the application states.',\n depends: ['core'],\n hidden: false\n };\n (function ($, undefined) {\n var kendo = window.kendo, CHANGE = 'change', BACK = 'back', SAME = 'same', support = kendo.support, location = window.location, history = window.history, CHECK_URL_INTERVAL = 50, BROKEN_BACK_NAV = kendo.support.browser.msie, hashStrip = /^#*/, document = window.document;\n function absoluteURL(path, pathPrefix) {\n if (!pathPrefix) {\n return path;\n }\n if (path + '/' === pathPrefix) {\n path = pathPrefix;\n }\n var regEx = new RegExp('^' + pathPrefix, 'i');\n if (!regEx.test(path)) {\n path = pathPrefix + '/' + path;\n }\n return location.protocol + '//' + (location.host + '/' + path).replace(/\\/\\/+/g, '/');\n }\n function hashDelimiter(bang) {\n return bang ? '#!' : '#';\n }\n function locationHash(hashDelimiter) {\n var href = location.href;\n if (hashDelimiter === '#!' && href.indexOf('#') > -1 && href.indexOf('#!') < 0) {\n return null;\n }\n return href.split(hashDelimiter)[1] || '';\n }\n function stripRoot(root, url) {\n if (url.indexOf(root) === 0) {\n return url.substr(root.length).replace(/\\/\\//g, '/');\n } else {\n return url;\n }\n }\n var HistoryAdapter = kendo.Class.extend({\n back: function () {\n if (BROKEN_BACK_NAV) {\n setTimeout(function () {\n history.back();\n });\n } else {\n history.back();\n }\n },\n forward: function () {\n if (BROKEN_BACK_NAV) {\n setTimeout(function () {\n history.forward();\n });\n } else {\n history.forward();\n }\n },\n length: function () {\n return history.length;\n },\n replaceLocation: function (url) {\n location.replace(url);\n }\n });\n var PushStateAdapter = HistoryAdapter.extend({\n init: function (root) {\n this.root = root;\n },\n navigate: function (to) {\n history.pushState({}, document.title, absoluteURL(to, this.root));\n },\n replace: function (to) {\n history.replaceState({}, document.title, absoluteURL(to, this.root));\n },\n normalize: function (url) {\n return stripRoot(this.root, url);\n },\n current: function () {\n var current = location.pathname;\n if (location.search) {\n current += location.search;\n }\n return stripRoot(this.root, current);\n },\n change: function (callback) {\n $(window).bind('popstate.kendo', callback);\n },\n stop: function () {\n $(window).unbind('popstate.kendo');\n },\n normalizeCurrent: function (options) {\n var fixedUrl, root = options.root, pathname = location.pathname, hash = locationHash(hashDelimiter(options.hashBang));\n if (root === pathname + '/') {\n fixedUrl = root;\n }\n if (root === pathname && hash) {\n fixedUrl = absoluteURL(hash.replace(hashStrip, ''), root);\n }\n if (fixedUrl) {\n history.pushState({}, document.title, fixedUrl);\n }\n }\n });\n function fixHash(url) {\n return url.replace(/^(#)?/, '#');\n }\n function fixBang(url) {\n return url.replace(/^(#(!)?)?/, '#!');\n }\n var HashAdapter = HistoryAdapter.extend({\n init: function (bang) {\n this._id = kendo.guid();\n this.prefix = hashDelimiter(bang);\n this.fix = bang ? fixBang : fixHash;\n },\n navigate: function (to) {\n location.hash = this.fix(to);\n },\n replace: function (to) {\n this.replaceLocation(this.fix(to));\n },\n normalize: function (url) {\n if (url.indexOf(this.prefix) < 0) {\n return url;\n } else {\n return url.split(this.prefix)[1];\n }\n },\n change: function (callback) {\n if (support.hashChange) {\n $(window).on('hashchange.' + this._id, callback);\n } else {\n this._interval = setInterval(callback, CHECK_URL_INTERVAL);\n }\n },\n stop: function () {\n $(window).off('hashchange.' + this._id);\n clearInterval(this._interval);\n },\n current: function () {\n return locationHash(this.prefix);\n },\n normalizeCurrent: function (options) {\n var pathname = location.pathname, root = options.root;\n if (options.pushState && root !== pathname) {\n this.replaceLocation(root + this.prefix + stripRoot(root, pathname));\n return true;\n }\n return false;\n }\n });\n var History = kendo.Observable.extend({\n start: function (options) {\n options = options || {};\n this.bind([\n CHANGE,\n BACK,\n SAME\n ], options);\n if (this._started) {\n return;\n }\n this._started = true;\n options.root = options.root || '/';\n var adapter = this.createAdapter(options), current;\n if (adapter.normalizeCurrent(options)) {\n return;\n }\n current = adapter.current();\n $.extend(this, {\n adapter: adapter,\n root: options.root,\n historyLength: adapter.length(),\n current: current,\n locations: [current]\n });\n adapter.change($.proxy(this, '_checkUrl'));\n },\n createAdapter: function (options) {\n return support.pushState && options.pushState ? new PushStateAdapter(options.root) : new HashAdapter(options.hashBang);\n },\n stop: function () {\n if (!this._started) {\n return;\n }\n this.adapter.stop();\n this.unbind(CHANGE);\n this._started = false;\n },\n change: function (callback) {\n this.bind(CHANGE, callback);\n },\n replace: function (to, silent) {\n this._navigate(to, silent, function (adapter) {\n adapter.replace(to);\n this.locations[this.locations.length - 1] = this.current;\n });\n },\n navigate: function (to, silent) {\n if (to === '#:back') {\n this.backCalled = true;\n this.adapter.back();\n return;\n }\n this._navigate(to, silent, function (adapter) {\n adapter.navigate(to);\n this.locations.push(this.current);\n });\n },\n _navigate: function (to, silent, callback) {\n var adapter = this.adapter;\n to = adapter.normalize(to);\n if (this.current === to || this.current === decodeURIComponent(to)) {\n this.trigger(SAME);\n return;\n }\n if (!silent) {\n if (this.trigger(CHANGE, {\n url: to,\n decode: false\n })) {\n return;\n }\n }\n this.current = to;\n callback.call(this, adapter);\n this.historyLength = adapter.length();\n },\n _checkUrl: function () {\n var adapter = this.adapter, current = adapter.current(), newLength = adapter.length(), navigatingInExisting = this.historyLength === newLength, back = current === this.locations[this.locations.length - 2] && navigatingInExisting, backCalled = this.backCalled, prev = this.current;\n if (current === null || this.current === current || this.current === decodeURIComponent(current)) {\n return true;\n }\n this.historyLength = newLength;\n this.backCalled = false;\n this.current = current;\n if (back && this.trigger('back', {\n url: prev,\n to: current\n })) {\n adapter.forward();\n this.current = prev;\n return;\n }\n if (this.trigger(CHANGE, {\n url: current,\n backButtonPressed: !backCalled\n })) {\n if (back) {\n adapter.forward();\n } else {\n adapter.back();\n this.historyLength--;\n }\n this.current = prev;\n return;\n }\n if (back) {\n this.locations.pop();\n } else {\n this.locations.push(current);\n }\n }\n });\n kendo.History = History;\n kendo.History.HistoryAdapter = HistoryAdapter;\n kendo.History.HashAdapter = HashAdapter;\n kendo.History.PushStateAdapter = PushStateAdapter;\n kendo.absoluteURL = absoluteURL;\n kendo.history = new History();\n }(window.kendo.jQuery));\n (function () {\n var kendo = window.kendo, history = kendo.history, Observable = kendo.Observable, INIT = 'init', ROUTE_MISSING = 'routeMissing', CHANGE = 'change', BACK = 'back', SAME = 'same', optionalParam = /\\((.*?)\\)/g, namedParam = /(\\(\\?)?:\\w+/g, splatParam = /\\*\\w+/g, escapeRegExp = /[\\-{}\\[\\]+?.,\\\\\\^$|#\\s]/g;\n function namedParamReplace(match, optional) {\n return optional ? match : '([^/]+)';\n }\n function routeToRegExp(route, ignoreCase) {\n return new RegExp('^' + route.replace(escapeRegExp, '\\\\$&').replace(optionalParam, '(?:$1)?').replace(namedParam, namedParamReplace).replace(splatParam, '(.*?)') + '$', ignoreCase ? 'i' : '');\n }\n function stripUrl(url) {\n return url.replace(/(\\?.*)|(#.*)/g, '');\n }\n var Route = kendo.Class.extend({\n init: function (route, callback, ignoreCase) {\n if (!(route instanceof RegExp)) {\n route = routeToRegExp(route, ignoreCase);\n }\n this.route = route;\n this._callback = callback;\n },\n callback: function (url, back, decode) {\n var params, idx = 0, length, queryStringParams = kendo.parseQueryStringParams(url);\n queryStringParams._back = back;\n url = stripUrl(url);\n params = this.route.exec(url).slice(1);\n length = params.length;\n if (decode) {\n for (; idx < length; idx++) {\n if (typeof params[idx] !== 'undefined') {\n params[idx] = decodeURIComponent(params[idx]);\n }\n }\n }\n params.push(queryStringParams);\n this._callback.apply(null, params);\n },\n worksWith: function (url, back, decode) {\n if (this.route.test(stripUrl(url))) {\n this.callback(url, back, decode);\n return true;\n } else {\n return false;\n }\n }\n });\n var Router = Observable.extend({\n init: function (options) {\n if (!options) {\n options = {};\n }\n Observable.fn.init.call(this);\n this.routes = [];\n this.pushState = options.pushState;\n this.hashBang = options.hashBang;\n this.root = options.root;\n this.ignoreCase = options.ignoreCase !== false;\n this.bind([\n INIT,\n ROUTE_MISSING,\n CHANGE,\n SAME,\n BACK\n ], options);\n },\n destroy: function () {\n history.unbind(CHANGE, this._urlChangedProxy);\n history.unbind(SAME, this._sameProxy);\n history.unbind(BACK, this._backProxy);\n this.unbind();\n },\n start: function () {\n var that = this, sameProxy = function () {\n that._same();\n }, backProxy = function (e) {\n that._back(e);\n }, urlChangedProxy = function (e) {\n that._urlChanged(e);\n };\n history.start({\n same: sameProxy,\n change: urlChangedProxy,\n back: backProxy,\n pushState: that.pushState,\n hashBang: that.hashBang,\n root: that.root\n });\n var initEventObject = {\n url: history.current || '/',\n preventDefault: $.noop\n };\n if (!that.trigger(INIT, initEventObject)) {\n that._urlChanged(initEventObject);\n }\n this._urlChangedProxy = urlChangedProxy;\n this._backProxy = backProxy;\n },\n route: function (route, callback) {\n this.routes.push(new Route(route, callback, this.ignoreCase));\n },\n navigate: function (url, silent) {\n kendo.history.navigate(url, silent);\n },\n replace: function (url, silent) {\n kendo.history.replace(url, silent);\n },\n _back: function (e) {\n if (this.trigger(BACK, {\n url: e.url,\n to: e.to\n })) {\n e.preventDefault();\n }\n },\n _same: function () {\n this.trigger(SAME);\n },\n _urlChanged: function (e) {\n var url = e.url;\n var decode = !!e.decode;\n var back = e.backButtonPressed;\n if (!url) {\n url = '/';\n }\n if (this.trigger(CHANGE, {\n url: e.url,\n params: kendo.parseQueryStringParams(e.url),\n backButtonPressed: back\n })) {\n e.preventDefault();\n return;\n }\n var idx = 0, routes = this.routes, route, length = routes.length;\n for (; idx < length; idx++) {\n route = routes[idx];\n if (route.worksWith(url, back, decode)) {\n return;\n }\n }\n if (this.trigger(ROUTE_MISSING, {\n url: url,\n params: kendo.parseQueryStringParams(url),\n backButtonPressed: back\n })) {\n e.preventDefault();\n }\n }\n });\n kendo.Router = Router;\n }());\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.userevents', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'userevents',\n name: 'User Events',\n category: 'framework',\n depends: ['core'],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, support = kendo.support, Class = kendo.Class, Observable = kendo.Observable, now = $.now, extend = $.extend, OS = support.mobileOS, invalidZeroEvents = OS && OS.android, DEFAULT_MIN_HOLD = 800, CLICK_DELAY = 300, DEFAULT_THRESHOLD = support.browser.msie ? 5 : 0, PRESS = 'press', HOLD = 'hold', SELECT = 'select', START = 'start', MOVE = 'move', END = 'end', CANCEL = 'cancel', TAP = 'tap', DOUBLETAP = 'doubleTap', RELEASE = 'release', GESTURESTART = 'gesturestart', GESTURECHANGE = 'gesturechange', GESTUREEND = 'gestureend', GESTURETAP = 'gesturetap';\n var THRESHOLD = {\n 'api': 0,\n 'touch': 0,\n 'mouse': 9,\n 'pointer': 9\n };\n var ENABLE_GLOBAL_SURFACE = !support.touch || support.mouseAndTouchPresent;\n function touchDelta(touch1, touch2) {\n var x1 = touch1.x.location, y1 = touch1.y.location, x2 = touch2.x.location, y2 = touch2.y.location, dx = x1 - x2, dy = y1 - y2;\n return {\n center: {\n x: (x1 + x2) / 2,\n y: (y1 + y2) / 2\n },\n distance: Math.sqrt(dx * dx + dy * dy)\n };\n }\n function getTouches(e) {\n var touches = [], originalEvent = e.originalEvent, currentTarget = e.currentTarget, idx = 0, length, changedTouches, touch;\n if (e.api) {\n touches.push({\n id: 2,\n event: e,\n target: e.target,\n currentTarget: e.target,\n location: e,\n type: 'api'\n });\n } else if (e.type.match(/touch/)) {\n changedTouches = originalEvent ? originalEvent.changedTouches : [];\n for (length = changedTouches.length; idx < length; idx++) {\n touch = changedTouches[idx];\n touches.push({\n location: touch,\n event: e,\n target: touch.target,\n currentTarget: currentTarget,\n id: touch.identifier,\n type: 'touch'\n });\n }\n } else if (support.pointers || support.msPointers) {\n touches.push({\n location: originalEvent,\n event: e,\n target: e.target,\n currentTarget: currentTarget,\n id: originalEvent.pointerId,\n type: 'pointer'\n });\n } else {\n touches.push({\n id: 1,\n event: e,\n target: e.target,\n currentTarget: currentTarget,\n location: e,\n type: 'mouse'\n });\n }\n return touches;\n }\n var TouchAxis = Class.extend({\n init: function (axis, location) {\n var that = this;\n that.axis = axis;\n that._updateLocationData(location);\n that.startLocation = that.location;\n that.velocity = that.delta = 0;\n that.timeStamp = now();\n },\n move: function (location) {\n var that = this, offset = location['page' + that.axis], timeStamp = now(), timeDelta = timeStamp - that.timeStamp || 1;\n if (!offset && invalidZeroEvents) {\n return;\n }\n that.delta = offset - that.location;\n that._updateLocationData(location);\n that.initialDelta = offset - that.startLocation;\n that.velocity = that.delta / timeDelta;\n that.timeStamp = timeStamp;\n },\n _updateLocationData: function (location) {\n var that = this, axis = that.axis;\n that.location = location['page' + axis];\n that.client = location['client' + axis];\n that.screen = location['screen' + axis];\n }\n });\n var Touch = Class.extend({\n init: function (userEvents, target, touchInfo) {\n extend(this, {\n x: new TouchAxis('X', touchInfo.location),\n y: new TouchAxis('Y', touchInfo.location),\n type: touchInfo.type,\n useClickAsTap: userEvents.useClickAsTap,\n threshold: userEvents.threshold || THRESHOLD[touchInfo.type],\n userEvents: userEvents,\n target: target,\n currentTarget: touchInfo.currentTarget,\n initialTouch: touchInfo.target,\n id: touchInfo.id,\n pressEvent: touchInfo,\n _clicks: userEvents._clicks,\n supportDoubleTap: userEvents.supportDoubleTap,\n _moved: false,\n _finished: false\n });\n },\n press: function () {\n this._holdTimeout = setTimeout($.proxy(this, '_hold'), this.userEvents.minHold);\n this._trigger(PRESS, this.pressEvent);\n },\n _tap: function (touchInfo) {\n var that = this;\n that.userEvents._clicks++;\n if (that.userEvents._clicks == 1) {\n that._clickTimeout = setTimeout(function () {\n if (that.userEvents._clicks == 1) {\n that._trigger(TAP, touchInfo);\n } else {\n that._trigger(DOUBLETAP, touchInfo);\n }\n that.userEvents._clicks = 0;\n }, CLICK_DELAY);\n }\n },\n _hold: function () {\n this._trigger(HOLD, this.pressEvent);\n },\n move: function (touchInfo) {\n var that = this;\n var preventMove = touchInfo.type !== 'api' && that.userEvents._shouldNotMove;\n if (that._finished || preventMove) {\n return;\n }\n that.x.move(touchInfo.location);\n that.y.move(touchInfo.location);\n if (!that._moved) {\n if (that._withinIgnoreThreshold()) {\n return;\n }\n if (!UserEvents.current || UserEvents.current === that.userEvents) {\n that._start(touchInfo);\n } else {\n return that.dispose();\n }\n }\n if (!that._finished) {\n that._trigger(MOVE, touchInfo);\n }\n },\n end: function (touchInfo) {\n this.endTime = now();\n if (this._finished) {\n return;\n }\n this._finished = true;\n this._trigger(RELEASE, touchInfo);\n if (this._moved) {\n this._trigger(END, touchInfo);\n } else {\n if (!this.useClickAsTap) {\n if (this.supportDoubleTap) {\n this._tap(touchInfo);\n } else {\n this._trigger(TAP, touchInfo);\n }\n }\n }\n clearTimeout(this._holdTimeout);\n this.dispose();\n },\n dispose: function () {\n var userEvents = this.userEvents, activeTouches = userEvents.touches;\n this._finished = true;\n this.pressEvent = null;\n clearTimeout(this._holdTimeout);\n activeTouches.splice($.inArray(this, activeTouches), 1);\n },\n skip: function () {\n this.dispose();\n },\n cancel: function () {\n this.dispose();\n },\n isMoved: function () {\n return this._moved;\n },\n _start: function (touchInfo) {\n clearTimeout(this._holdTimeout);\n this.startTime = now();\n this._moved = true;\n this._trigger(START, touchInfo);\n },\n _trigger: function (name, touchInfo) {\n var that = this, jQueryEvent = touchInfo.event, data = {\n touch: that,\n x: that.x,\n y: that.y,\n target: that.target,\n event: jQueryEvent\n };\n if (that.userEvents.notify(name, data)) {\n jQueryEvent.preventDefault();\n }\n },\n _withinIgnoreThreshold: function () {\n var xDelta = this.x.initialDelta, yDelta = this.y.initialDelta;\n return Math.sqrt(xDelta * xDelta + yDelta * yDelta) <= this.threshold;\n }\n });\n function withEachUpEvent(callback) {\n var downEvents = kendo.eventMap.up.split(' '), idx = 0, length = downEvents.length;\n for (; idx < length; idx++) {\n callback(downEvents[idx]);\n }\n }\n var UserEvents = Observable.extend({\n init: function (element, options) {\n var that = this, filter, ns = kendo.guid();\n options = options || {};\n filter = that.filter = options.filter;\n that.threshold = options.threshold || DEFAULT_THRESHOLD;\n that.minHold = options.minHold || DEFAULT_MIN_HOLD;\n that.touches = [];\n that._maxTouches = options.multiTouch ? 2 : 1;\n that.allowSelection = options.allowSelection;\n that.captureUpIfMoved = options.captureUpIfMoved;\n that.useClickAsTap = !options.fastTap && !support.delayedClick();\n that.eventNS = ns;\n that._clicks = 0;\n that.supportDoubleTap = options.supportDoubleTap;\n element = $(element).handler(that);\n Observable.fn.init.call(that);\n extend(that, {\n element: element,\n surface: options.global && ENABLE_GLOBAL_SURFACE ? $(element[0].ownerDocument.documentElement) : $(options.surface || element),\n stopPropagation: options.stopPropagation,\n pressed: false\n });\n that.surface.handler(that).on(kendo.applyEventMap('move', ns), '_move').on(kendo.applyEventMap('up cancel', ns), '_end');\n element.on(kendo.applyEventMap('down', ns), filter, '_start');\n if (that.useClickAsTap) {\n element.on(kendo.applyEventMap('click', ns), filter, '_click');\n }\n if (support.pointers || support.msPointers) {\n if (support.browser.version < 11) {\n var defaultAction = 'pinch-zoom double-tap-zoom';\n element.css('-ms-touch-action', options.touchAction && options.touchAction != 'none' ? defaultAction + ' ' + options.touchAction : defaultAction);\n } else {\n element.css('touch-action', options.touchAction || 'none');\n }\n }\n if (options.preventDragEvent) {\n element.on(kendo.applyEventMap('dragstart', ns), kendo.preventDefault);\n }\n element.on(kendo.applyEventMap('mousedown', ns), filter, { root: element }, '_select');\n if (that.captureUpIfMoved && support.eventCapture) {\n var surfaceElement = that.surface[0], preventIfMovingProxy = $.proxy(that.preventIfMoving, that);\n withEachUpEvent(function (eventName) {\n surfaceElement.addEventListener(eventName, preventIfMovingProxy, true);\n });\n }\n that.bind([\n PRESS,\n HOLD,\n TAP,\n DOUBLETAP,\n START,\n MOVE,\n END,\n RELEASE,\n CANCEL,\n GESTURESTART,\n GESTURECHANGE,\n GESTUREEND,\n GESTURETAP,\n SELECT\n ], options);\n },\n preventIfMoving: function (e) {\n if (this._isMoved()) {\n e.preventDefault();\n }\n },\n destroy: function () {\n var that = this;\n if (that._destroyed) {\n return;\n }\n that._destroyed = true;\n if (that.captureUpIfMoved && support.eventCapture) {\n var surfaceElement = that.surface[0];\n withEachUpEvent(function (eventName) {\n surfaceElement.removeEventListener(eventName, that.preventIfMoving);\n });\n }\n that.element.kendoDestroy(that.eventNS);\n that.surface.kendoDestroy(that.eventNS);\n that.element.removeData('handler');\n that.surface.removeData('handler');\n that._disposeAll();\n that.unbind();\n delete that.surface;\n delete that.element;\n delete that.currentTarget;\n },\n capture: function () {\n UserEvents.current = this;\n },\n cancel: function () {\n this._disposeAll();\n this.trigger(CANCEL);\n },\n notify: function (eventName, data) {\n var that = this, touches = that.touches;\n if (this._isMultiTouch()) {\n switch (eventName) {\n case MOVE:\n eventName = GESTURECHANGE;\n break;\n case END:\n eventName = GESTUREEND;\n break;\n case TAP:\n eventName = GESTURETAP;\n break;\n }\n extend(data, { touches: touches }, touchDelta(touches[0], touches[1]));\n }\n return this.trigger(eventName, extend(data, { type: eventName }));\n },\n press: function (x, y, target) {\n this._apiCall('_start', x, y, target);\n },\n move: function (x, y) {\n this._apiCall('_move', x, y);\n },\n end: function (x, y) {\n this._apiCall('_end', x, y);\n },\n _isMultiTouch: function () {\n return this.touches.length > 1;\n },\n _maxTouchesReached: function () {\n return this.touches.length >= this._maxTouches;\n },\n _disposeAll: function () {\n var touches = this.touches;\n while (touches.length > 0) {\n touches.pop().dispose();\n }\n },\n _isMoved: function () {\n return $.grep(this.touches, function (touch) {\n return touch.isMoved();\n }).length;\n },\n _select: function (e) {\n if (!this.allowSelection || this.trigger(SELECT, { event: e })) {\n e.preventDefault();\n }\n },\n _start: function (e) {\n var that = this, idx = 0, filter = that.filter, target, touches = getTouches(e), length = touches.length, touch, which = e.which;\n if (which && which > 1 || that._maxTouchesReached()) {\n return;\n }\n UserEvents.current = null;\n that.currentTarget = e.currentTarget;\n if (that.stopPropagation) {\n e.stopPropagation();\n }\n for (; idx < length; idx++) {\n if (that._maxTouchesReached()) {\n break;\n }\n touch = touches[idx];\n if (filter) {\n target = $(touch.currentTarget);\n } else {\n target = that.element;\n }\n if (!target.length) {\n continue;\n }\n touch = new Touch(that, target, touch);\n that.touches.push(touch);\n touch.press();\n if (that._isMultiTouch()) {\n that.notify('gesturestart', {});\n }\n }\n },\n _move: function (e) {\n this._eachTouch('move', e);\n },\n _end: function (e) {\n this._eachTouch('end', e);\n },\n _click: function (e) {\n var data = {\n touch: {\n initialTouch: e.target,\n target: $(e.currentTarget),\n endTime: now(),\n x: {\n location: e.pageX,\n client: e.clientX\n },\n y: {\n location: e.pageY,\n client: e.clientY\n }\n },\n x: e.pageX,\n y: e.pageY,\n target: $(e.currentTarget),\n event: e,\n type: 'tap'\n };\n if (this.trigger('tap', data)) {\n e.preventDefault();\n }\n },\n _eachTouch: function (methodName, e) {\n var that = this, dict = {}, touches = getTouches(e), activeTouches = that.touches, idx, touch, touchInfo, matchingTouch;\n for (idx = 0; idx < activeTouches.length; idx++) {\n touch = activeTouches[idx];\n dict[touch.id] = touch;\n }\n for (idx = 0; idx < touches.length; idx++) {\n touchInfo = touches[idx];\n matchingTouch = dict[touchInfo.id];\n if (matchingTouch) {\n matchingTouch[methodName](touchInfo);\n }\n }\n },\n _apiCall: function (type, x, y, target) {\n this[type]({\n api: true,\n pageX: x,\n pageY: y,\n clientX: x,\n clientY: y,\n target: $(target || this.element)[0],\n stopPropagation: $.noop,\n preventDefault: $.noop\n });\n }\n });\n UserEvents.defaultThreshold = function (value) {\n DEFAULT_THRESHOLD = value;\n };\n UserEvents.minHold = function (value) {\n DEFAULT_MIN_HOLD = value;\n };\n kendo.getTouches = getTouches;\n kendo.touchDelta = touchDelta;\n kendo.UserEvents = UserEvents;\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.touch', [\n 'kendo.core',\n 'kendo.userevents'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'touch',\n name: 'Touch',\n category: 'mobile',\n description: 'The kendo Touch widget provides a cross-platform compatible API for handling user-initiated touch events, multi-touch gestures and event sequences (drag, swipe, etc.). ',\n depends: [\n 'core',\n 'userevents'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, proxy = $.proxy, abs = Math.abs, MAX_DOUBLE_TAP_DISTANCE = 20;\n var Touch = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n options = that.options;\n element = that.element;\n that.wrapper = element;\n function eventProxy(name) {\n return function (e) {\n that._triggerTouch(name, e);\n };\n }\n function gestureEventProxy(name) {\n return function (e) {\n that.trigger(name, {\n touches: e.touches,\n distance: e.distance,\n center: e.center,\n event: e.event\n });\n };\n }\n that.events = new kendo.UserEvents(element, {\n filter: options.filter,\n surface: options.surface,\n minHold: options.minHold,\n multiTouch: options.multiTouch,\n allowSelection: true,\n fastTap: options.fastTap,\n press: eventProxy('touchstart'),\n hold: eventProxy('hold'),\n tap: proxy(that, '_tap'),\n gesturestart: gestureEventProxy('gesturestart'),\n gesturechange: gestureEventProxy('gesturechange'),\n gestureend: gestureEventProxy('gestureend')\n });\n if (options.enableSwipe) {\n that.events.bind('start', proxy(that, '_swipestart'));\n that.events.bind('move', proxy(that, '_swipemove'));\n } else {\n that.events.bind('start', proxy(that, '_dragstart'));\n that.events.bind('move', eventProxy('drag'));\n that.events.bind('end', eventProxy('dragend'));\n }\n kendo.notify(that);\n },\n events: [\n 'touchstart',\n 'dragstart',\n 'drag',\n 'dragend',\n 'tap',\n 'doubletap',\n 'hold',\n 'swipe',\n 'gesturestart',\n 'gesturechange',\n 'gestureend'\n ],\n options: {\n name: 'Touch',\n surface: null,\n global: false,\n fastTap: false,\n filter: null,\n multiTouch: false,\n enableSwipe: false,\n minXDelta: 30,\n maxYDelta: 20,\n maxDuration: 1000,\n minHold: 800,\n doubleTapTimeout: 800\n },\n cancel: function () {\n this.events.cancel();\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.events.destroy();\n },\n _triggerTouch: function (type, e) {\n if (this.trigger(type, {\n touch: e.touch,\n event: e.event\n })) {\n e.preventDefault();\n }\n },\n _tap: function (e) {\n var that = this, lastTap = that.lastTap, touch = e.touch;\n if (lastTap && touch.endTime - lastTap.endTime < that.options.doubleTapTimeout && kendo.touchDelta(touch, lastTap).distance < MAX_DOUBLE_TAP_DISTANCE) {\n that._triggerTouch('doubletap', e);\n that.lastTap = null;\n } else {\n that._triggerTouch('tap', e);\n that.lastTap = touch;\n }\n },\n _dragstart: function (e) {\n this._triggerTouch('dragstart', e);\n },\n _swipestart: function (e) {\n if (abs(e.x.velocity) * 2 >= abs(e.y.velocity)) {\n e.sender.capture();\n }\n },\n _swipemove: function (e) {\n var that = this, options = that.options, touch = e.touch, duration = e.event.timeStamp - touch.startTime, direction = touch.x.initialDelta > 0 ? 'right' : 'left';\n if (abs(touch.x.initialDelta) >= options.minXDelta && abs(touch.y.initialDelta) < options.maxYDelta && duration < options.maxDuration) {\n that.trigger('swipe', {\n direction: direction,\n touch: e.touch\n });\n touch.cancel();\n }\n }\n });\n kendo.ui.plugin(Touch);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.data.odata', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'data.odata',\n name: 'OData',\n category: 'framework',\n depends: ['core'],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, extend = $.extend, NEWLINE = '\\r\\n', DOUBLELINE = '\\r\\n\\r\\n', isFunction = kendo.isFunction, odataFilters = {\n eq: 'eq',\n neq: 'ne',\n gt: 'gt',\n gte: 'ge',\n lt: 'lt',\n lte: 'le',\n contains: 'substringof',\n doesnotcontain: 'substringof',\n endswith: 'endswith',\n startswith: 'startswith',\n isnull: 'eq',\n isnotnull: 'ne',\n isnullorempty: 'eq',\n isnotnullorempty: 'ne',\n isempty: 'eq',\n isnotempty: 'ne'\n }, odataFiltersVersionFour = extend({}, odataFilters, { contains: 'contains' }), mappers = {\n pageSize: $.noop,\n page: $.noop,\n filter: function (params, filter, useVersionFour) {\n if (filter) {\n filter = toOdataFilter(filter, useVersionFour);\n if (filter) {\n params.$filter = filter;\n }\n }\n },\n sort: function (params, orderby) {\n var expr = $.map(orderby, function (value) {\n var order = value.field.replace(/\\./g, '/');\n if (value.dir === 'desc') {\n order += ' desc';\n }\n return order;\n }).join(',');\n if (expr) {\n params.$orderby = expr;\n }\n },\n skip: function (params, skip) {\n if (skip) {\n params.$skip = skip;\n }\n },\n take: function (params, take) {\n if (take) {\n params.$top = take;\n }\n }\n }, defaultDataType = { read: { dataType: 'jsonp' } };\n function toOdataFilter(filter, useOdataFour) {\n var result = [], logic = filter.logic || 'and', idx, length, field, type, format, operator, value, ignoreCase, filters = filter.filters;\n for (idx = 0, length = filters.length; idx < length; idx++) {\n filter = filters[idx];\n field = filter.field;\n value = filter.value;\n operator = filter.operator;\n if (filter.filters) {\n filter = toOdataFilter(filter, useOdataFour);\n } else {\n ignoreCase = filter.ignoreCase;\n field = field.replace(/\\./g, '/');\n filter = odataFilters[operator];\n if (useOdataFour) {\n filter = odataFiltersVersionFour[operator];\n }\n if (operator === 'isnullorempty') {\n filter = kendo.format('{0} {1} null or {0} {1} \\'\\'', field, filter);\n } else if (operator === 'isnotnullorempty') {\n filter = kendo.format('{0} {1} null and {0} {1} \\'\\'', field, filter);\n } else if (operator === 'isnull' || operator === 'isnotnull') {\n filter = kendo.format('{0} {1} null', field, filter);\n } else if (operator === 'isempty' || operator === 'isnotempty') {\n filter = kendo.format('{0} {1} \\'\\'', field, filter);\n } else if (filter && value !== undefined) {\n type = $.type(value);\n if (type === 'string') {\n format = '\\'{1}\\'';\n value = value.replace(/'/g, '\\'\\'');\n if (ignoreCase === true) {\n field = 'tolower(' + field + ')';\n }\n } else if (type === 'date') {\n if (useOdataFour) {\n format = '{1:yyyy-MM-ddTHH:mm:ss+00:00}';\n value = kendo.timezone.apply(value, 'Etc/UTC');\n } else {\n format = 'datetime\\'{1:yyyy-MM-ddTHH:mm:ss}\\'';\n }\n } else {\n format = '{1}';\n }\n if (filter.length > 3) {\n if (filter !== 'substringof') {\n format = '{0}({2},' + format + ')';\n } else {\n format = '{0}(' + format + ',{2})';\n if (operator === 'doesnotcontain') {\n if (useOdataFour) {\n format = '{0}({2},\\'{1}\\') eq -1';\n filter = 'indexof';\n } else {\n format += ' eq false';\n }\n }\n }\n } else {\n format = '{2} {0} ' + format;\n }\n filter = kendo.format(format, filter, value, field);\n }\n }\n result.push(filter);\n }\n filter = result.join(' ' + logic + ' ');\n if (result.length > 1) {\n filter = '(' + filter + ')';\n }\n return filter;\n }\n function stripMetadata(obj) {\n for (var name in obj) {\n if (name.indexOf('@odata') === 0) {\n delete obj[name];\n }\n }\n }\n function hex16() {\n return Math.floor((1 + Math.random()) * 65536).toString(16).substr(1);\n }\n function createBoundary(prefix) {\n return prefix + hex16() + '-' + hex16() + '-' + hex16();\n }\n function createDelimeter(boundary, close) {\n var result = NEWLINE + '--' + boundary;\n if (close) {\n result += '--';\n }\n return result;\n }\n function createCommand(transport, item, httpVerb, command) {\n var transportUrl = transport.options[command].url;\n var commandPrefix = kendo.format('{0} ', httpVerb);\n if (isFunction(transportUrl)) {\n return commandPrefix + transportUrl(item);\n } else {\n return commandPrefix + transportUrl;\n }\n }\n function getOperationHeader(changeset, changeId) {\n var header = '';\n header += createDelimeter(changeset, false);\n header += NEWLINE + 'Content-Type: application/http';\n header += NEWLINE + 'Content-Transfer-Encoding: binary';\n header += NEWLINE + 'Content-ID: ' + changeId;\n return header;\n }\n function getOperationContent(item) {\n var content = '';\n content += NEWLINE + 'Content-Type: application/json;odata=minimalmetadata';\n content += NEWLINE + 'Prefer: return=representation';\n content += DOUBLELINE + kendo.stringify(item);\n return content;\n }\n function getOperations(collection, changeset, changeId, command, transport, skipContent) {\n var requestBody = '';\n for (var i = 0; i < collection.length; i++) {\n requestBody += getOperationHeader(changeset, changeId);\n requestBody += DOUBLELINE + createCommand(transport, collection[i], transport.options[command].type, command) + ' HTTP/1.1';\n if (!skipContent) {\n requestBody += getOperationContent(collection[i]);\n }\n requestBody += NEWLINE;\n changeId++;\n }\n return requestBody;\n }\n function processCollection(colection, boundary, changeset, changeId, transport, command, skipContent) {\n var requestBody = '';\n requestBody += getBoundary(boundary, changeset);\n requestBody += getOperations(colection, changeset, changeId, command, transport, skipContent);\n requestBody += createDelimeter(changeset, true);\n requestBody += NEWLINE;\n return requestBody;\n }\n function getBoundary(boundary, changeset) {\n var requestBody = '';\n requestBody += '--' + boundary + NEWLINE;\n requestBody += 'Content-Type: multipart/mixed; boundary=' + changeset + NEWLINE;\n return requestBody;\n }\n function createBatchRequest(transport, colections) {\n var options = {};\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', VALIDATIONSUMMARY = 'k-validation-summary', MESSAGEBOX = 'k-message-box k-message-box-error', 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 SUMMARYTEMPLATE = '';\n var Validator = Widget.extend({\n init: function (element, options) {\n var that = this, resolved = resolveRules(element), validateAttributeSelector = '[' + kendo.attr('validate') + '!=false]';\n options = options || {};\n options.rules = $.extend({}, kendo.ui.validator.rules, resolved.rules, options.rules);\n options.messages = $.extend({}, kendo.ui.validator.messages, resolved.messages, options.messages);\n Widget.fn.init.call(that, element, options);\n that._errorTemplate = kendo.template(that.options.errorTemplate);\n that._summaryTemplate = kendo.template(that.options.validationSummary.template || SUMMARYTEMPLATE);\n if (that.element.is(FORM)) {\n that.element.attr(NOVALIDATE, NOVALIDATE);\n }\n that._inputSelector = INPUTSELECTOR + validateAttributeSelector;\n that._checkboxSelector = CHECKBOXSELECTOR + validateAttributeSelector;\n that._errors = {};\n that._attachEvents();\n that._isValidated = false;\n },\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 validationSummary: false\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.element.off(NS);\n if (this.validationSummary) {\n this.validationSummary.off(NS);\n }\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 if (this.options.validationSummary && !isValid) {\n this.showValidationSummary();\n }\n this.trigger(VALIDATE, {\n valid: result,\n errors: this.errors()\n });\n if (isValid !== result) {\n this.trigger(CHANGE);\n }\n return result;\n },\n validateInput: function (input) {\n input = $(input);\n this._isValidated = true;\n var that = this, template = that._errorTemplate, result = that._checkValidity(input), valid = result.valid, className = '.' + INVALIDMSG, fieldName = input.attr(NAME) || '', lbl = that._findMessageContainer(fieldName).add(input.next(className).filter(function () {\n var element = $(this);\n if (element.filter('[' + kendo.attr('for') + ']').length) {\n return element.attr(kendo.attr('for')) === fieldName;\n }\n return true;\n })).hide(), messageText = !valid ? that._extractMessage(input, result.key) : '', messageLabel = !valid ? parseHtml(template({ message: decode(messageText) })) : '', wasValid = !input.attr('aria-invalid');\n input.removeAttr('aria-invalid');\n if (wasValid !== valid) {\n if (this.trigger(VALIDATE_INPUT, {\n valid: valid,\n input: input,\n error: messageText,\n field: fieldName\n })) {\n return;\n }\n }\n if (!valid) {\n that._errors[fieldName] = messageText;\n var lblId = lbl.attr('id');\n that._decorateMessageContainer(messageLabel, fieldName);\n if (lblId) {\n messageLabel.attr('id', lblId);\n }\n if (lbl.length !== 0) {\n lbl.replaceWith(messageLabel);\n } else {\n var widgetInstance = kendo.widgetInstance(input);\n var parentElement = input.parent().get(0);\n var nextElement = input.next().get(0);\n if (parentElement && parentElement.nodeName === 'LABEL') {\n messageLabel.insertAfter(parentElement);\n } else if (nextElement && nextElement.nodeName === 'LABEL') {\n messageLabel.insertAfter(nextElement);\n } else if (widgetInstance && widgetInstance.wrapper) {\n messageLabel.insertAfter(widgetInstance.wrapper);\n } else {\n messageLabel.insertAfter(input);\n }\n }\n messageLabel.show();\n input.attr('aria-invalid', true);\n } else {\n delete that._errors[fieldName];\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 if (wasValid !== valid && this.options.validationSummary && this.options.validateOnBlur) {\n this.showValidationSummary();\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 setOptions: function (options) {\n var currentOptions = kendo.deepExtend(this.options, options);\n this.destroy();\n this.init(this.element, currentOptions);\n this._setEvents(currentOptions);\n },\n _getInputNames: function () {\n var that = this, inputs = that.element.find(that._inputSelector), sorted = [];\n for (var idx = 0, length = inputs.length; idx < length; idx++) {\n var input = $(inputs[idx]);\n if (hasAttribute(input, NAME)) {\n sorted.push(input.attr(NAME));\n }\n }\n return sorted;\n },\n _errorsByName: function () {\n var that = this, inputNames = that._getInputNames(), sorted = [];\n for (var i = 0; i < inputNames.length; i += 1) {\n var name = inputNames[i];\n if (that._errors[name]) {\n sorted.push({\n field: name,\n message: that._errors[name]\n });\n }\n }\n return sorted;\n },\n _renderSummary: function () {\n var that = this, options = this.options.validationSummary, element = this.element, prevElement = element.prev(), container;\n if (options.container) {\n container = $(options.container);\n } else if (prevElement && prevElement.hasClass(VALIDATIONSUMMARY)) {\n container = prevElement;\n } else {\n container = $('
    ').insertBefore(that.element);\n }\n container.addClass([\n VALIDATIONSUMMARY,\n MESSAGEBOX\n ].join(' '));\n container.attr('role', 'alert');\n container.on('click' + NS, proxy(that._summaryClick, that));\n return container;\n },\n _summaryClick: function (e) {\n e.preventDefault();\n var that = this, link = $(e.target), target = that.element.find('[name=\\'' + link.data('field') + '\\']'), nextFocusable, kendoInstance;\n if (!target.length) {\n return;\n }\n nextFocusable = target.closest(':kendoFocusable');\n kendoInstance = kendo.widgetInstance(target);\n if (nextFocusable.length) {\n nextFocusable.focus();\n } else if (kendoInstance) {\n kendoInstance.focus();\n } else {\n target.focus();\n }\n },\n showValidationSummary: function () {\n var that = this, summary = that.validationSummary, errorsList;\n if (!summary) {\n summary = that.validationSummary = that._renderSummary();\n }\n errorsList = parseHtml(that._summaryTemplate({ errors: that._errorsByName() }));\n summary.html(errorsList);\n summary.show();\n },\n hideValidationSummary: function () {\n var that = this, summary = that.validationSummary;\n if (!summary) {\n return;\n }\n summary.hide();\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_DEFAULTS = {\n icon: '',\n iconClass: '',\n spriteCssClass: '',\n imageUrl: ''\n };\n kendo.setDefaults('button', BUTTON_DEFAULTS);\n var Button = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n element = that.wrapper = that.element;\n options = that.options;\n element.addClass(KBUTTON).attr('role', 'button');\n options.enable = options.enable && options.enabled && !element.attr(DISABLED);\n that.enable(options.enable);\n if (options.enable) {\n that._tabindex();\n }\n 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 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 if (Button.fn.hasOwnProperty('defaults') === false) {\n Object.defineProperty(Button.fn, 'defaults', {\n get: function () {\n return kendo.defaults.button;\n }\n });\n }\n kendo.ui.plugin(Button);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.pager', ['kendo.data'], f);\n}(function () {\n var __meta__ = {\n id: 'pager',\n name: 'Pager',\n category: 'framework',\n depends: ['data'],\n advanced: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, Widget = ui.Widget, proxy = $.proxy, FIRST = '.k-i-arrow-end-left', LAST = '.k-i-arrow-end-right', PREV = '.k-i-arrow-60-left', NEXT = '.k-i-arrow-60-right', SIZE = 'k-pager-lg k-pager-md k-pager-sm', CHANGE = 'change', NS = '.kendoPager', CLICK = 'click', KEYDOWN = 'keydown', DISABLED = 'disabled', MOUSEDOWN = 'down', MAX_VALUE = Number.MAX_VALUE, iconTemplate = kendo.template('');\n function button(template, idx, text, numeric, title) {\n return template({\n idx: idx,\n text: text,\n ns: kendo.ns,\n numeric: numeric,\n title: title || ''\n });\n }\n function selectOption(template, idx, text, selected) {\n return template({\n idx: idx,\n text: text || idx,\n selected: selected || false\n });\n }\n function icon(className, text, wrapClassName) {\n return iconTemplate({\n className: className.substring(1),\n text: text,\n wrapClassName: wrapClassName || ''\n });\n }\n function update(element, selector, page, disabled) {\n element.find(selector).parent().attr(kendo.attr('page'), page).attr('tabindex', -1).toggleClass('k-state-disabled', disabled);\n }\n function first(element, page) {\n update(element, FIRST, 1, page <= 1);\n }\n function prev(element, page) {\n update(element, PREV, Math.max(1, page - 1), page <= 1);\n }\n function next(element, page, totalPages) {\n update(element, NEXT, Math.min(totalPages, page + 1), page >= totalPages);\n }\n function last(element, page, totalPages) {\n update(element, LAST, totalPages, page >= totalPages);\n }\n var Pager = Widget.extend({\n init: function (element, options) {\n var that = this, page, totalPages;\n var sizeClassName = null;\n Widget.fn.init.call(that, element, options);\n options = that.options;\n that._createDataSource(options);\n that.linkTemplate = kendo.template(that.options.linkTemplate);\n that.selectTemplate = kendo.template(that.options.selectTemplate);\n that.currentPageTemplate = kendo.template(that.options.currentPageTemplate);\n that.numericSelectItemTemplate = kendo.template(that.options.numericSelectItemTemplate);\n page = that.page();\n totalPages = that.totalPages();\n that._refreshHandler = proxy(that.refresh, that);\n that.dataSource.bind(CHANGE, that._refreshHandler);\n that.downEvent = kendo.applyEventMap(MOUSEDOWN, kendo.guid());\n if (options.previousNext) {\n if (!that.element.find(FIRST).length) {\n that.element.append(icon(FIRST, options.messages.first, 'k-pager-first'));\n first(that.element, page, totalPages);\n }\n if (!that.element.find(PREV).length) {\n that.element.append(icon(PREV, options.messages.previous));\n prev(that.element, page, totalPages);\n }\n }\n if (options.numeric) {\n if (!that._numericWrap) {\n that._numericWrap = that.element.find('.k-pager-numbers-wrap');\n if (that._numericWrap.length === 0) {\n that._numericWrap = $('
    ').appendTo(that.element);\n }\n }\n if (!that._numericSelect) {\n that._numericSelect = that._numericWrap.find('.k-dropdown');\n if (that._numericSelect.length === 0) {\n that._numericSelect = $('' + 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 _numericSelectChange: function (e) {\n var target = e.currentTarget;\n var value = target.value;\n var page = parseInt(value, 10);\n target.blur();\n this.page(page);\n },\n _click: function (e) {\n var target = $(e.currentTarget);\n e.preventDefault();\n if (!target.is('.k-state-disabled')) {\n this.page(parseInt(target.attr(kendo.attr('page')), 10));\n }\n },\n totalPages: function () {\n return Math.ceil((this.dataSource.total() || 0) / (this.pageSize() || 1));\n },\n pageSize: function () {\n return this.dataSource.pageSize() || this.dataSource.total();\n },\n page: function (page) {\n if (page) {\n if (this.trigger('pageChange', { index: page })) {\n return;\n }\n this.dataSource.page(page);\n this.trigger(CHANGE, { index: page });\n } else {\n if (this.dataSource.total() > 0) {\n return this.dataSource.page();\n } else {\n return 0;\n }\n }\n },\n _getWidthSizeClass: function (width) {\n var that = this, sizes = SIZE.split(' ');\n if (!that.options.responsive) {\n return null;\n } else if (width <= 480) {\n return sizes[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 || support.browser.safari)) {\n eventNames += ' ' + SCROLL;\n }\n if (toggle && !this.scrollableParents) {\n this.scrollableParents = this._scrollableParents();\n }\n if (this.scrollableParents && this.scrollableParents.length) {\n this.scrollableParents[method](SCROLL, this._resizeProxy);\n }\n WINDOW[method](eventNames, this._resizeProxy);\n },\n _mousedown: function (e) {\n var that = this, container = that.element[0], options = that.options, anchor = $(options.anchor)[0], toggleTarget = options.toggleTarget, target = kendo.eventTarget(e), popup = $(target).closest('.k-popup'), mobile = popup.parent().parent('.km-shim').length;\n popup = popup[0];\n if (!mobile && popup && popup !== that.element[0]) {\n return;\n }\n if ($(e.target).closest('a').data('rel') === 'popover') {\n return;\n }\n if (!contains(container, target) && !contains(anchor, target) && !(toggleTarget && contains($(toggleTarget)[0], target))) {\n that.close();\n }\n },\n _fit: function (position, size, viewPortSize) {\n var output = 0;\n if (position + size > viewPortSize) {\n output = viewPortSize - (position + size);\n }\n if (position < 0) {\n output = -position;\n }\n return output;\n },\n _flip: function (offset, size, anchorSize, viewPortSize, origin, position, boxSize) {\n var output = 0;\n boxSize = boxSize || size;\n if (position !== origin && position !== CENTER && origin !== CENTER) {\n if (offset + boxSize > viewPortSize) {\n output += -(anchorSize + size);\n }\n if (offset + output < 0) {\n output += anchorSize + size;\n }\n }\n return output;\n },\n _scrollableParents: function () {\n return $(this.options.anchor).parentsUntil('body').filter(function (index, element) {\n return kendo.isScrollable(element);\n });\n },\n _position: function (fixed) {\n var that = this, element = that.element, wrapper = that.wrapper, options = that.options, viewport = $(options.viewport), zoomLevel = support.zoomLevel(), isWindow = !!(viewport[0] == window && window.innerWidth && zoomLevel <= 1.02), anchor = $(options.anchor), origins = options.origin.toLowerCase().split(' '), positions = options.position.toLowerCase().split(' '), collisions = that.collisions, siblingContainer, parents, parentZIndex, zIndex = 10002, idx = 0, docEl = document.documentElement, length, viewportOffset, viewportWidth, viewportHeight;\n if (options.viewport === window) {\n viewportOffset = {\n top: window.pageYOffset || document.documentElement.scrollTop || 0,\n left: window.pageXOffset || document.documentElement.scrollLeft || 0\n };\n } else {\n viewportOffset = viewport.offset();\n }\n if (isWindow) {\n viewportWidth = window.innerWidth;\n viewportHeight = window.innerHeight;\n } else {\n viewportWidth = viewport.width();\n viewportHeight = viewport.height();\n }\n if (isWindow && docEl.scrollHeight - docEl.clientHeight > 0) {\n var sign = options.isRtl ? -1 : 1;\n viewportWidth -= sign * kendo.support.scrollbar();\n }\n siblingContainer = anchor.parents().filter(wrapper.siblings());\n if (siblingContainer[0]) {\n parentZIndex = Math.max(Number(siblingContainer.css('zIndex')), 0);\n if (parentZIndex) {\n zIndex = parentZIndex + 10;\n } else {\n parents = anchor.parentsUntil(siblingContainer);\n for (length = parents.length; idx < length; idx++) {\n parentZIndex = Number($(parents[idx]).css('zIndex'));\n if (parentZIndex && zIndex < parentZIndex) {\n zIndex = parentZIndex + 10;\n }\n }\n }\n }\n wrapper.css('zIndex', zIndex);\n if (fixed && fixed.isFixed) {\n wrapper.css({\n left: fixed.x,\n top: fixed.y\n });\n } else {\n wrapper.css(that._align(origins, positions));\n }\n var pos = getOffset(wrapper, POSITION, anchor[0] === wrapper.offsetParent()[0]), offset = getOffset(wrapper), anchorParent = anchor.offsetParent().parent('.k-animation-container,.k-popup,.k-group');\n if (anchorParent.length) {\n pos = getOffset(wrapper, POSITION, true);\n offset = getOffset(wrapper);\n }\n offset.top -= viewportOffset.top;\n offset.left -= viewportOffset.left;\n if (!that.wrapper.data(LOCATION)) {\n wrapper.data(LOCATION, extend({}, pos));\n }\n var offsets = extend({}, offset), location = extend({}, pos), adjustSize = options.adjustSize;\n if (collisions[0] === 'fit') {\n location.top += that._fit(offsets.top, outerHeight(wrapper) + adjustSize.height, viewportHeight / zoomLevel);\n }\n if (collisions[1] === 'fit') {\n location.left += that._fit(offsets.left, outerWidth(wrapper) + adjustSize.width, viewportWidth / zoomLevel);\n }\n var flipPos = extend({}, location);\n var elementHeight = outerHeight(element);\n var wrapperHeight = outerHeight(wrapper);\n if (!wrapper.height() && elementHeight) {\n wrapperHeight = wrapperHeight + elementHeight;\n }\n if (collisions[0] === 'flip') {\n location.top += that._flip(offsets.top, elementHeight, outerHeight(anchor), viewportHeight / zoomLevel, origins[0], positions[0], wrapperHeight);\n }\n if (collisions[1] === 'flip') {\n location.left += that._flip(offsets.left, outerWidth(element), outerWidth(anchor), viewportWidth / zoomLevel, origins[1], positions[1], outerWidth(wrapper));\n }\n element.css(POSITION, ABSOLUTE);\n wrapper.css(location);\n return location.left != flipPos.left || location.top != flipPos.top;\n },\n _align: function (origin, position) {\n var that = this, element = that.wrapper, anchor = $(that.options.anchor), verticalOrigin = origin[0], horizontalOrigin = origin[1], verticalPosition = position[0], horizontalPosition = position[1], anchorOffset = getOffset(anchor), appendTo = $(that.options.appendTo), appendToOffset, width = outerWidth(element), height = outerHeight(element) || outerHeight(element.children().first()), anchorWidth = outerWidth(anchor), anchorHeight = outerHeight(anchor), top = anchorOffset.top, left = anchorOffset.left, round = Math.round;\n if (appendTo[0] != document.body) {\n appendToOffset = getOffset(appendTo);\n top -= appendToOffset.top;\n left -= appendToOffset.left;\n }\n if (verticalOrigin === BOTTOM) {\n top += anchorHeight;\n }\n if (verticalOrigin === CENTER) {\n top += round(anchorHeight / 2);\n }\n if (verticalPosition === BOTTOM) {\n top -= height;\n }\n if (verticalPosition === CENTER) {\n top -= round(height / 2);\n }\n if (horizontalOrigin === RIGHT) {\n left += anchorWidth;\n }\n if (horizontalOrigin === CENTER) {\n left += round(anchorWidth / 2);\n }\n if (horizontalPosition === RIGHT) {\n left -= width;\n }\n if (horizontalPosition === CENTER) {\n left -= round(width / 2);\n }\n return {\n top: top,\n left: left\n };\n }\n });\n ui.plugin(Popup);\n var stableSort = kendo.support.stableSort;\n var tabKeyTrapNS = 'kendoTabKeyTrap';\n var focusableNodesSelector = 'a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, [tabindex], *[contenteditable]';\n var TabKeyTrap = Class.extend({\n init: function (element) {\n this.element = $(element);\n this.element.autoApplyNS(tabKeyTrapNS);\n },\n trap: function () {\n this.element.on('keydown', proxy(this._keepInTrap, this));\n },\n removeTrap: function () {\n this.element.kendoDestroy(tabKeyTrapNS);\n },\n destroy: function () {\n this.element.kendoDestroy(tabKeyTrapNS);\n this.element = undefined;\n },\n shouldTrap: function () {\n return true;\n },\n _keepInTrap: function (e) {\n if (e.which !== 9 || !this.shouldTrap() || e.isDefaultPrevented()) {\n return;\n }\n var elements = this._focusableElements();\n var sortedElements = this._sortFocusableElements(elements);\n var next = this._nextFocusable(e, sortedElements);\n this._focus(next);\n e.preventDefault();\n },\n _focusableElements: function () {\n var elements = this.element.find(focusableNodesSelector).filter(function (i, item) {\n return item.tabIndex >= 0 && $(item).is(':visible') && !$(item).is('[disabled]');\n });\n if (this.element.is('[tabindex]')) {\n elements.push(this.element[0]);\n }\n return elements;\n },\n _sortFocusableElements: function (elements) {\n var sortedElements;\n if (stableSort) {\n sortedElements = elements.sort(function (prev, next) {\n return prev.tabIndex - next.tabIndex;\n });\n } else {\n var attrName = '__k_index';\n elements.each(function (i, item) {\n item.setAttribute(attrName, i);\n });\n sortedElements = elements.sort(function (prev, next) {\n return prev.tabIndex === next.tabIndex ? parseInt(prev.getAttribute(attrName), 10) - parseInt(next.getAttribute(attrName), 10) : prev.tabIndex - next.tabIndex;\n });\n elements.removeAttr(attrName);\n }\n return sortedElements;\n },\n _nextFocusable: function (e, elements) {\n var count = elements.length;\n var current = elements.index(e.target);\n return elements.get((current + (e.shiftKey ? -1 : 1)) % count);\n },\n _focus: function (element) {\n if (element.nodeName == 'IFRAME') {\n element.contentWindow.document.body.focus();\n return;\n }\n element.focus();\n if (element.nodeName == 'INPUT' && element.setSelectionRange && this._haveSelectionRange(element)) {\n element.setSelectionRange(0, element.value.length);\n }\n },\n _haveSelectionRange: function (element) {\n var elementType = element.type.toLowerCase();\n return elementType === 'text' || elementType === 'search' || elementType === 'url' || elementType === 'tel' || elementType === 'password';\n }\n });\n ui.Popup.TabKeyTrap = TabKeyTrap;\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.notification', [\n 'kendo.core',\n 'kendo.popup'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'notification',\n name: 'Notification',\n category: 'web',\n description: 'The Notification widget displays user alerts.',\n depends: [\n 'core',\n 'popup'\n ],\n features: [{\n id: 'notification-fx',\n name: 'Animation',\n description: 'Support for animation',\n depends: ['fx']\n }]\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, proxy = $.proxy, extend = $.extend, setTimeout = window.setTimeout, CLICK = 'click', SHOW = 'show', HIDE = 'hide', KNOTIFICATION = 'k-notification', KICLOSE = '.k-notification-wrap .k-i-close', KHIDING = 'k-hiding', INFO = 'info', SUCCESS = 'success', WARNING = 'warning', ERROR = 'error', TOP = 'top', LEFT = 'left', BOTTOM = 'bottom', RIGHT = 'right', UP = 'up', NS = '.kendoNotification', WRAPPER = '
    ', 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', ARIA_DISABLED = 'aria-disabled', ARIA_PRESSED = 'aria-pressed', ICON = 'k-icon', ICON_PREFIX = 'k-i-', BUTTON_ICON = 'k-button-icon', BUTTON_ICON_TEXT = 'k-button-icontext', LIST_CONTAINER = 'k-list-container k-split-container', SPLIT_BUTTON_ARROW = 'k-split-button-arrow', OVERFLOW_ANCHOR = 'k-overflow-anchor', OVERFLOW_CONTAINER = 'k-overflow-container', FIRST_TOOLBAR_VISIBLE = 'k-toolbar-first-visible', LAST_TOOLBAR_VISIBLE = 'k-toolbar-last-visible', CLICK = 'click', TOGGLE = 'toggle', OPEN = 'open', CLOSE = 'close', OVERFLOW_OPEN = 'overflowOpen', OVERFLOW_CLOSE = 'overflowClose', OVERFLOW_NEVER = 'never', OVERFLOW_AUTO = 'auto', OVERFLOW_ALWAYS = 'always', OVERFLOW_HIDDEN = 'k-overflow-hidden', OPTION_LIST_SUFFIX = '_optionlist', KENDO_UID_ATTR = kendo.attr('uid');\n kendo.toolbar = {};\n var components = {\n overflowAnchor: '
    ',\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);\n this.element.removeClass('k-hidden');\n this.options.hidden = false;\n },\n hide: function () {\n this.element.addClass(STATE_HIDDEN);\n this.element.addClass('k-hidden');\n if (this.overflow && this.overflowHidden) {\n this.overflowHidden();\n }\n this.options.hidden = true;\n },\n remove: function () {\n this.element.remove();\n },\n enable: function (isEnabled) {\n if (isEnabled === undefined) {\n isEnabled = true;\n }\n this.element.toggleClass(STATE_DISABLED, !isEnabled);\n this.element.attr(ARIA_DISABLED, !isEnabled);\n this.options.enable = isEnabled;\n },\n twin: function () {\n var uid = this.element.attr(KENDO_UID_ATTR);\n if (this.overflow && this.options.splitContainerId) {\n return $('#' + this.options.splitContainerId).find('[' + KENDO_UID_ATTR + '=\\'' + uid + '\\']').data(this.options.type);\n } else if (this.overflow) {\n return this.toolbar.element.find('[' + KENDO_UID_ATTR + '=\\'' + uid + '\\']').data(this.options.type);\n } else if (this.toolbar.options.resizable) {\n return this.toolbar.popup.element.find('[' + KENDO_UID_ATTR + '=\\'' + uid + '\\']').data(this.options.type);\n }\n }\n });\n kendo.toolbar.Item = Item;\n var Button = Item.extend({\n init: function (options, toolbar) {\n var element = options.useButtonTag ? $('') : $('');\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 if (this.options.togglable) {\n this.element.attr(ARIA_PRESSED, selected);\n }\n this.element.toggleClass(STATE_ACTIVE, selected);\n this.options.selected = selected;\n }\n });\n kendo.toolbar.ToolBarButton = ToolBarButton;\n var OverflowButton = Button.extend({\n init: function (options, toolbar) {\n this.overflow = true;\n Button.fn.init.call(this, $.extend({}, options), toolbar);\n var element = this.element;\n if (options.showText != 'toolbar' && options.text) {\n if (options.mobile) {\n element.html('' + 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.element.attr(ARIA_DISABLED, !isEnabled);\n this.options.enable = isEnabled;\n },\n focus: function () {\n this.element.focus();\n },\n hide: function () {\n if (this.popup) {\n this.popup.close();\n }\n this.element.addClass(STATE_HIDDEN);\n this.element.addClass('k-hidden');\n this.options.hidden = true;\n },\n show: function () {\n this.element.removeClass(STATE_HIDDEN);\n this.element.removeClass('k-hidden');\n this.options.hidden = false;\n }\n });\n kendo.toolbar.ToolBarSplitButton = ToolBarSplitButton;\n var OverflowSplitButton = Item.extend({\n init: function (options, toolbar) {\n var element = this.element = $('
      • '), 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.addClass('k-hidden');\n if (this.popup) {\n this.popup.container.find('>li[data-uid=\\'' + item.data('uid') + '\\']').removeClass(OVERFLOW_HIDDEN);\n }\n },\n _showItem: function (item, containerWidth) {\n item.removeClass('k-hidden');\n var itemOuterWidth = outerWidth(item, true);\n item.addClass('k-hidden');\n if (item.length && containerWidth > this._childrenWidth() + itemOuterWidth) {\n item.removeClass('k-hidden');\n if (this.popup) {\n this.popup.container.find('>li[data-uid=\\'' + item.data('uid') + '\\']').addClass(OVERFLOW_HIDDEN);\n }\n return true;\n }\n return false;\n },\n _markVisibles: function () {\n var overflowItems = this.popup.container.children(), toolbarItems = this.element.children(':not(.k-overflow-anchor)'), visibleOverflowItems = overflowItems.filter(':not(.k-overflow-hidden)'), visibleToolbarItems = toolbarItems.filter(':visible');\n overflowItems.add(toolbarItems).removeClass(FIRST_TOOLBAR_VISIBLE + ' ' + LAST_TOOLBAR_VISIBLE);\n visibleOverflowItems.first().add(visibleToolbarItems.first()).addClass(FIRST_TOOLBAR_VISIBLE);\n visibleOverflowItems.last().add(visibleToolbarItems.last()).addClass(LAST_TOOLBAR_VISIBLE);\n }\n });\n kendo.ui.plugin(ToolBar);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.list', [\n 'kendo.data',\n 'kendo.popup'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'list',\n name: 'List',\n category: 'framework',\n depends: [\n 'data',\n 'popup'\n ],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, outerHeight = kendo._outerHeight, percentageUnitsRegex = /^\\d+(\\.\\d+)?%$/i, Widget = ui.Widget, keys = kendo.keys, support = kendo.support, htmlEncode = kendo.htmlEncode, activeElement = kendo._activeElement, outerWidth = kendo._outerWidth, ObservableArray = kendo.data.ObservableArray, ID = 'id', CHANGE = 'change', FOCUSED = 'k-state-focused', HOVER = 'k-state-hover', LOADING = 'k-i-loading', GROUPHEADER = '.k-group-header', ITEMSELECTOR = '.k-item', LABELIDPART = '_label', OPEN = 'open', CLOSE = 'close', CASCADE = 'cascade', SELECT = 'select', SELECTED = 'selected', REQUESTSTART = 'requestStart', REQUESTEND = 'requestEnd', BLUR = 'blur', FOCUS = 'focus', FOCUSOUT = 'focusout', extend = $.extend, proxy = $.proxy, isArray = $.isArray, browser = support.browser, HIDDENCLASS = 'k-hidden', WIDTH = 'width', isIE = browser.msie, isIE8 = isIE && browser.version < 9, quotRegExp = /\"/g, alternativeNames = {\n 'ComboBox': [\n 'DropDownList',\n 'MultiColumnComboBox'\n ],\n 'DropDownList': [\n 'ComboBox',\n 'MultiColumnComboBox'\n ],\n 'MultiColumnComboBox': [\n 'ComboBox',\n 'DropDownList'\n ]\n };\n var List = kendo.ui.DataBoundWidget.extend({\n init: function (element, options) {\n var that = this, ns = that.ns, id;\n Widget.fn.init.call(that, element, options);\n element = that.element;\n options = that.options;\n that._isSelect = element.is(SELECT);\n if (that._isSelect && that.element[0].length) {\n if (!options.dataSource) {\n options.dataTextField = options.dataTextField || 'text';\n options.dataValueField = options.dataValueField || 'value';\n }\n }\n that.ul = $('
          ').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 that._userTriggered = false;\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 'kendoKeydown'\n ],\n setOptions: function (options) {\n Select.fn.setOptions.call(this, options);\n this.listView.setOptions(this._listOptions(options));\n this._optionLabel();\n this._inputTemplate();\n this._accessors();\n this._filterHeader();\n this._enable();\n this._aria();\n if (!this.value() && this.hasOptionLabel()) {\n this.select(0);\n }\n },\n destroy: function () {\n var that = this;\n Select.fn.destroy.call(that);\n that.wrapper.off(ns);\n that.wrapper.off(nsFocusEvent);\n that.element.off(ns);\n that._inputWrapper.off(ns);\n that._arrow.off();\n that._arrow = null;\n that._arrowIcon = null;\n that.optionLabel.off();\n if (that.filterInput) {\n that.filterInput.off(nsFocusEvent);\n }\n },\n open: function () {\n var that = this;\n var isFiltered = that.dataSource.filter() ? that.dataSource.filter().filters.length > 0 : false;\n 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, that, proxy(that._keydown, that)).on(kendo.support.mousedown + ns, proxy(that._wrapperMousedown, that)).on('paste' + ns, proxy(that._filterPaste, that));\n that.wrapper.on('click' + ns, proxy(that._wrapperClick, that));\n if (!that.filterInput) {\n wrapper.on('keypress' + ns, proxy(that._keypress, that));\n } else {\n wrapper.on('input' + ns, proxy(that._search, that));\n }\n } else if (disable) {\n wrapper.removeAttr(TABINDEX);\n dropDownWrapper.addClass(STATEDISABLED).removeClass(DEFAULT);\n } else {\n dropDownWrapper.addClass(DEFAULT).removeClass(STATEDISABLED);\n }\n element.attr(DISABLED, disable).attr(READONLY, readonly);\n wrapper.attr(ARIA_DISABLED, disable);\n },\n _keydown: function (e) {\n var that = this;\n var key = e.keyCode;\n var altKey = e.altKey;\n var isInputActive;\n var handled;\n var isPopupVisible = that.popup.visible();\n if (that.filterInput) {\n isInputActive = that.filterInput[0] === activeElement();\n }\n if (key === keys.LEFT) {\n key = keys.UP;\n handled = true;\n } else if (key === keys.RIGHT) {\n key = keys.DOWN;\n handled = true;\n }\n if (handled && isInputActive) {\n return;\n }\n e.keyCode = key;\n if (altKey && key === keys.UP || key === keys.ESC) {\n that._focusElement(that.wrapper);\n }\n if (that._state === STATE_FILTER && key === keys.ESC) {\n that._clearFilter();\n that._open = false;\n that._state = STATE_ACCEPT;\n }\n if (key === keys.ENTER && that._typingTimeout && that.filterInput && isPopupVisible) {\n e.preventDefault();\n return;\n }\n if (key === keys.SPACEBAR && !isInputActive) {\n that.toggle(!isPopupVisible);\n e.preventDefault();\n }\n handled = that._move(e);\n if (handled) {\n return;\n }\n if (!isPopupVisible || !that.filterInput) {\n var current = that._focus();\n if (key === keys.HOME) {\n handled = true;\n that._firstItem();\n } else if (key === keys.END) {\n handled = true;\n that._lastItem();\n }\n if (handled) {\n if (that.trigger('select', {\n dataItem: that._getElementDataItem(that._focus()),\n item: that._focus()\n })) {\n that._focus(current);\n return;\n }\n that._select(that._focus(), true).done(function () {\n if (!isPopupVisible) {\n that._blur();\n }\n });\n e.preventDefault();\n }\n }\n if (!altKey && !handled && that.filterInput) {\n that._search();\n }\n },\n _matchText: function (text, word) {\n var ignoreCase = this.options.ignoreCase;\n if (text === undefined || text === null) {\n return false;\n }\n text = text + '';\n if (ignoreCase) {\n text = text.toLowerCase();\n }\n return text.indexOf(word) === 0;\n },\n _shuffleData: function (data, splitIndex) {\n var optionDataItem = this._optionLabelDataItem();\n if (optionDataItem) {\n data = [optionDataItem].concat(data);\n }\n return data.slice(splitIndex).concat(data.slice(0, splitIndex));\n },\n _selectNext: function () {\n var that = this;\n var data = that.dataSource.flatView();\n var dataLength = data.length + (that.hasOptionLabel() ? 1 : 0);\n var isInLoop = sameCharsOnly(that._word, that._last);\n var startIndex = that.selectedIndex;\n var oldFocusedItem;\n var text;\n if (startIndex === -1) {\n startIndex = 0;\n } else {\n startIndex += isInLoop ? 1 : 0;\n startIndex = normalizeIndex(startIndex, dataLength);\n }\n data = data.toJSON ? data.toJSON() : data.slice();\n data = that._shuffleData(data, startIndex);\n for (var idx = 0; idx < dataLength; idx++) {\n text = that._text(data[idx]);\n if (isInLoop && that._matchText(text, that._last)) {\n break;\n } else if (that._matchText(text, that._word)) {\n break;\n }\n }\n if (idx !== dataLength) {\n oldFocusedItem = that._focus();\n that._select(normalizeIndex(startIndex + idx, dataLength)).done(function () {\n var done = function () {\n if (!that.popup.visible()) {\n that._change();\n }\n };\n if (that.trigger('select', {\n dataItem: that._getElementDataItem(that._focus()),\n item: that._focus()\n })) {\n that._select(oldFocusedItem).done(done);\n } else {\n done();\n }\n });\n }\n },\n _keypress: function (e) {\n var that = this;\n if (e.which === 0 || e.keyCode === kendo.keys.ENTER) {\n return;\n }\n var character = String.fromCharCode(e.charCode || e.keyCode);\n if (that.options.ignoreCase) {\n character = character.toLowerCase();\n }\n if (character === ' ') {\n e.preventDefault();\n }\n that._word += character;\n that._last = character;\n that._search();\n },\n _popupOpen: function () {\n var popup = this.popup;\n popup.wrapper = kendo.wrap(popup.element);\n if (popup.element.closest('.km-root')[0]) {\n popup.wrapper.addClass('km-popup km-widget');\n this.wrapper.addClass('km-widget');\n }\n },\n _popup: function () {\n Select.fn._popup.call(this);\n this.popup.one('open', proxy(this._popupOpen, this));\n },\n _getElementDataItem: function (element) {\n if (!element || !element[0]) {\n return null;\n }\n if (element[0] === this.optionLabel[0]) {\n return this._optionLabelDataItem();\n }\n return this.listView.dataItemByIndex(this.listView.getElementIndex(element));\n },\n _click: function (e) {\n var that = this;\n var item = e.item || $(e.currentTarget);\n e.preventDefault();\n if (that.trigger('select', {\n dataItem: that._getElementDataItem(item),\n item: item\n })) {\n that.close();\n return;\n }\n that._userTriggered = true;\n that._select(item).done(function () {\n that._blur();\n that._focusElement(that.wrapper);\n });\n },\n _focusElement: function (element) {\n var active = activeElement();\n var wrapper = this.wrapper;\n var filterInput = this.filterInput;\n var compareElement = element === filterInput ? wrapper : filterInput;\n var touchEnabled = support.mobileOS && (support.touch || support.MSPointers || support.pointers);\n if (filterInput && filterInput[0] === element[0] && touchEnabled) {\n return;\n }\n if (filterInput && (compareElement[0] === active || this._focusFilter)) {\n this._focusFilter = false;\n this._prevent = true;\n this._focused = element.focus();\n }\n },\n _searchByWord: function (word) {\n if (!word) {\n return;\n }\n var that = this;\n var ignoreCase = that.options.ignoreCase;\n if (ignoreCase) {\n word = word.toLowerCase();\n }\n that._select(function (dataItem) {\n return that._matchText(that._text(dataItem), word);\n });\n },\n _inputValue: function () {\n return this.text();\n },\n _search: function () {\n var that = this;\n var dataSource = that.dataSource;\n clearTimeout(that._typingTimeout);\n if (that._isFilterEnabled()) {\n that._typingTimeout = setTimeout(function () {\n var value = that.filterInput.val();\n if (that._prev !== value) {\n that._prev = value;\n that.search(value);\n that._resizeFilterInput();\n }\n that._typingTimeout = null;\n }, that.options.delay);\n } else {\n that._typingTimeout = setTimeout(function () {\n that._word = '';\n }, that.options.delay);\n if (!that.listView.bound()) {\n dataSource.fetch().done(function () {\n that._selectNext();\n });\n return;\n }\n that._selectNext();\n }\n },\n _get: function (candidate) {\n var data, found, idx;\n var isFunction = typeof candidate === 'function';\n var jQueryCandidate = !isFunction ? $(candidate) : $();\n if (this.hasOptionLabel()) {\n if (typeof candidate === 'number') {\n if (candidate > -1) {\n candidate -= 1;\n }\n } else if (jQueryCandidate.hasClass('k-list-optionlabel')) {\n candidate = -1;\n }\n }\n if (isFunction) {\n data = this.dataSource.flatView();\n for (idx = 0; idx < data.length; idx++) {\n if (candidate(data[idx])) {\n candidate = idx;\n found = true;\n break;\n }\n }\n if (!found) {\n candidate = -1;\n }\n }\n return candidate;\n },\n _firstItem: function () {\n if (this.hasOptionLabel()) {\n this._focus(this.optionLabel);\n } else {\n this.listView.focusFirst();\n }\n },\n _lastItem: function () {\n this._resetOptionLabel();\n this.listView.focusLast();\n },\n _nextItem: function () {\n var focusIndex;\n if (this.optionLabel.hasClass('k-state-focused')) {\n this._resetOptionLabel();\n this.listView.focusFirst();\n focusIndex = 1;\n } else {\n focusIndex = this.listView.focusNext();\n }\n return focusIndex;\n },\n _prevItem: function () {\n var focusIndex;\n if (this.optionLabel.hasClass('k-state-focused')) {\n return;\n }\n focusIndex = this.listView.focusPrev();\n if (!this.listView.focus() && !this.options.virtual) {\n this._focus(this.optionLabel);\n }\n return focusIndex;\n },\n _focusItem: function () {\n var options = this.options;\n var listView = this.listView;\n var focusedItem = listView.focus();\n var index = listView.select();\n index = index[index.length - 1];\n if (index === undefined && options.highlightFirst && !focusedItem) {\n index = 0;\n }\n if (index !== undefined) {\n listView.focus(index);\n } else {\n if (options.optionLabel && (!options.virtual || options.virtual.mapValueTo !== 'dataItem')) {\n this._focus(this.optionLabel);\n this._select(this.optionLabel);\n this.listView.content.scrollTop(0);\n } else {\n listView.scrollToIndex(0);\n }\n }\n },\n _resetOptionLabel: function (additionalClass) {\n this.optionLabel.removeClass('k-state-focused' + (additionalClass || '')).removeAttr('id');\n },\n _focus: function (candidate) {\n var listView = this.listView;\n var optionLabel = this.optionLabel;\n if (candidate === undefined) {\n candidate = listView.focus();\n if (!candidate && optionLabel.hasClass('k-state-focused')) {\n candidate = optionLabel;\n }\n return candidate;\n }\n this._resetOptionLabel();\n candidate = this._get(candidate);\n listView.focus(candidate);\n if (candidate === -1) {\n optionLabel.addClass('k-state-focused').attr('id', listView._optionID);\n this._focused.add(this.filterInput).removeAttr('aria-activedescendant').attr('aria-activedescendant', listView._optionID);\n }\n },\n _select: function (candidate, keepState) {\n var that = this;\n candidate = that._get(candidate);\n return that.listView.select(candidate).done(function () {\n if (!keepState && that._state === STATE_FILTER) {\n that._state = STATE_ACCEPT;\n }\n if (candidate === -1) {\n that._selectValue(null);\n }\n });\n },\n _selectValue: function (dataItem) {\n var that = this;\n var optionLabel = that.options.optionLabel;\n var idx = that.listView.select();\n var value = '';\n var text = '';\n idx = idx[idx.length - 1];\n if (idx === undefined) {\n idx = -1;\n }\n this._resetOptionLabel(' k-state-selected');\n if (dataItem || dataItem === 0) {\n text = dataItem;\n value = that._dataValue(dataItem);\n if (optionLabel) {\n idx += 1;\n }\n } else if (optionLabel) {\n that._focus(that.optionLabel.addClass('k-state-selected'));\n text = that._optionLabelText();\n if (typeof optionLabel === 'string') {\n value = '';\n } else {\n value = that._value(optionLabel);\n }\n idx = 0;\n }\n that.selectedIndex = idx;\n if (value === null) {\n value = '';\n }\n that._textAccessor(text);\n that._accessor(value, idx);\n that._triggerCascade();\n },\n _mobile: function () {\n var that = this, popup = that.popup, mobileOS = support.mobileOS, root = popup.element.parents('.km-root').eq(0);\n if (root.length && mobileOS) {\n popup.options.animation.open.effects = mobileOS.android || mobileOS.meego ? 'fadeIn' : mobileOS.ios || mobileOS.wp ? 'slideIn:up' : popup.options.animation.open.effects;\n }\n },\n _filterHeader: function () {\n var icon;\n if (this.filterInput) {\n this.filterInput.off(ns).parent().remove();\n this.filterInput = null;\n }\n if (this._isFilterEnabled()) {\n icon = '';\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, isIE = kendo.support.browser.msie, 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 (e) {\n if (e.target === this.element[0]) {\n this.input.focus();\n }\n },\n _arrowClick: function () {\n this._toggle();\n },\n _inputFocus: function () {\n this._inputWrapper.addClass(FOCUSED);\n this._placeholder(false);\n },\n _inputFocusout: function () {\n var that = this;\n var value = that.value();\n that._userTriggered = true;\n that._inputWrapper.removeClass(FOCUSED);\n clearTimeout(that._typingTimeout);\n that._typingTimeout = null;\n if (this._userTriggered && isIE) {\n return;\n }\n that.text(that.text());\n var item = that._focus();\n var dataItem = this.listView.dataItemByIndex(this.listView.getElementIndex(item));\n if (value !== that.value() && that.trigger('select', {\n dataItem: dataItem,\n item: item\n })) {\n that.value(value);\n return;\n }\n that._placeholder();\n that._valueBeforeCascade = that._old;\n that._blur();\n that.element.blur();\n },\n _inputPaste: function () {\n var that = this;\n clearTimeout(that._pasteTimeout);\n that._pasteTimeout = null;\n that._pasteTimeout = setTimeout(function () {\n that.search();\n });\n },\n _editable: function (options) {\n var that = this, disable = options.disable, readonly = options.readonly, wrapper = that._inputWrapper.off(ns), input = that.element.add(that.input.off(ns)), arrow = that._arrow.off(CLICK + ' ' + MOUSEDOWN), clear = that._clear;\n if (!readonly && !disable) {\n wrapper.addClass(DEFAULT).removeClass(STATEDISABLED).on(HOVEREVENTS, that._toggleHover);\n input.removeAttr(DISABLED).removeAttr(READONLY).attr(ARIA_DISABLED, false);\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 && !that.options.cascadeFrom) {\n return;\n }\n that._accessor(value);\n if (that._isFilterEnabled() && listView.bound() && listView.isFiltered()) {\n that._clearFilter();\n } else {\n that._fetchData();\n }\n listView.value(value).done(function () {\n if (that.selectedIndex === -1 && (!listView._selectedDataItems || !listView._selectedDataItems.length)) {\n that._accessor(value);\n that.input.val(value);\n that._placeholder(true);\n }\n if (that._userTriggered) {\n that._old = that._accessor();\n } else {\n that._old = that._valueBeforeCascade = that._accessor();\n }\n that._oldIndex = that.selectedIndex;\n that._prev = that.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._inputWrapper.children('input.k-input');\n if (!input[0]) {\n input = $('').appendTo(that._inputWrapper);\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._inputWrapper.children('ul');\n if (!tagList[0]) {\n tagList = $('
            ').appendTo(that._inputWrapper);\n }\n that.tagList = tagList;\n },\n _tagTemplate: function () {\n var that = this;\n var options = that.options;\n var tagTemplate = options.tagTemplate;\n var hasDataSource = options.dataSource;\n var isMultiple = options.tagMode === 'multiple';\n var singleTag = options.messages.singleTag;\n var defaultTemplate;\n if (that.element[0].length && !hasDataSource) {\n options.dataTextField = options.dataTextField || 'text';\n options.dataValueField = options.dataValueField || 'value';\n }\n defaultTemplate = isMultiple ? kendo.template('#:' + kendo.expr(options.dataTextField, 'data') + '#', { useWithBlock: false }) : kendo.template('#:values.length# ' + singleTag);\n that.tagTextTemplate = tagTemplate = tagTemplate ? kendo.template(tagTemplate) : defaultTemplate;\n that.tagTemplate = function (data) {\n return '
          • ' + 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._inputWrapper = $(wrapper[0].firstChild);\n },\n _ariaSetSize: function (value) {\n var that = this;\n var selectedItems = that.tagList.children();\n if (value && selectedItems.length) {\n selectedItems.attr('aria-setsize', value);\n }\n },\n _ariaSetLive: function () {\n var that = this;\n that.ul.attr('aria-live', !that._isFilterEnabled() ? 'off' : 'polite');\n }\n });\n function compare(a, b) {\n var length;\n if (a === null && b !== null || a !== null && b === null) {\n return false;\n }\n length = a.length;\n if (length !== b.length) {\n return false;\n }\n while (length--) {\n if (a[length] !== b[length]) {\n return false;\n }\n }\n return true;\n }\n ui.plugin(MultiSelect);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.color', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'color',\n name: 'Color utils',\n category: 'framework',\n advanced: true,\n description: 'Color utilities used across components',\n depends: ['core']\n };\n window.kendo = window.kendo || {};\n var Class = kendo.Class;\n var support = kendo.support;\n var namedColors = {\n aliceblue: 'f0f8ff',\n antiquewhite: 'faebd7',\n aqua: '00ffff',\n aquamarine: '7fffd4',\n azure: 'f0ffff',\n beige: 'f5f5dc',\n bisque: 'ffe4c4',\n black: '000000',\n blanchedalmond: 'ffebcd',\n blue: '0000ff',\n blueviolet: '8a2be2',\n brown: 'a52a2a',\n burlywood: 'deb887',\n cadetblue: '5f9ea0',\n chartreuse: '7fff00',\n chocolate: 'd2691e',\n coral: 'ff7f50',\n cornflowerblue: '6495ed',\n cornsilk: 'fff8dc',\n crimson: 'dc143c',\n cyan: '00ffff',\n darkblue: '00008b',\n darkcyan: '008b8b',\n darkgoldenrod: 'b8860b',\n darkgray: 'a9a9a9',\n darkgrey: 'a9a9a9',\n darkgreen: '006400',\n darkkhaki: 'bdb76b',\n darkmagenta: '8b008b',\n darkolivegreen: '556b2f',\n darkorange: 'ff8c00',\n darkorchid: '9932cc',\n darkred: '8b0000',\n darksalmon: 'e9967a',\n darkseagreen: '8fbc8f',\n darkslateblue: '483d8b',\n darkslategray: '2f4f4f',\n darkslategrey: '2f4f4f',\n darkturquoise: '00ced1',\n darkviolet: '9400d3',\n deeppink: 'ff1493',\n deepskyblue: '00bfff',\n dimgray: '696969',\n dimgrey: '696969',\n dodgerblue: '1e90ff',\n firebrick: 'b22222',\n floralwhite: 'fffaf0',\n forestgreen: '228b22',\n fuchsia: 'ff00ff',\n gainsboro: 'dcdcdc',\n ghostwhite: 'f8f8ff',\n gold: 'ffd700',\n goldenrod: 'daa520',\n gray: '808080',\n grey: '808080',\n green: '008000',\n greenyellow: 'adff2f',\n honeydew: 'f0fff0',\n hotpink: 'ff69b4',\n indianred: 'cd5c5c',\n indigo: '4b0082',\n ivory: 'fffff0',\n khaki: 'f0e68c',\n lavender: 'e6e6fa',\n lavenderblush: 'fff0f5',\n lawngreen: '7cfc00',\n lemonchiffon: 'fffacd',\n lightblue: 'add8e6',\n lightcoral: 'f08080',\n lightcyan: 'e0ffff',\n lightgoldenrodyellow: 'fafad2',\n lightgray: 'd3d3d3',\n lightgrey: 'd3d3d3',\n lightgreen: '90ee90',\n lightpink: 'ffb6c1',\n lightsalmon: 'ffa07a',\n lightseagreen: '20b2aa',\n lightskyblue: '87cefa',\n lightslategray: '778899',\n lightslategrey: '778899',\n lightsteelblue: 'b0c4de',\n lightyellow: 'ffffe0',\n lime: '00ff00',\n limegreen: '32cd32',\n linen: 'faf0e6',\n magenta: 'ff00ff',\n maroon: '800000',\n mediumaquamarine: '66cdaa',\n mediumblue: '0000cd',\n mediumorchid: 'ba55d3',\n mediumpurple: '9370d8',\n mediumseagreen: '3cb371',\n mediumslateblue: '7b68ee',\n mediumspringgreen: '00fa9a',\n mediumturquoise: '48d1cc',\n mediumvioletred: 'c71585',\n midnightblue: '191970',\n mintcream: 'f5fffa',\n mistyrose: 'ffe4e1',\n moccasin: 'ffe4b5',\n navajowhite: 'ffdead',\n navy: '000080',\n oldlace: 'fdf5e6',\n olive: '808000',\n olivedrab: '6b8e23',\n orange: 'ffa500',\n orangered: 'ff4500',\n orchid: 'da70d6',\n palegoldenrod: 'eee8aa',\n palegreen: '98fb98',\n paleturquoise: 'afeeee',\n palevioletred: 'd87093',\n papayawhip: 'ffefd5',\n peachpuff: 'ffdab9',\n peru: 'cd853f',\n pink: 'ffc0cb',\n plum: 'dda0dd',\n powderblue: 'b0e0e6',\n purple: '800080',\n red: 'ff0000',\n rosybrown: 'bc8f8f',\n royalblue: '4169e1',\n saddlebrown: '8b4513',\n salmon: 'fa8072',\n sandybrown: 'f4a460',\n seagreen: '2e8b57',\n seashell: 'fff5ee',\n sienna: 'a0522d',\n silver: 'c0c0c0',\n skyblue: '87ceeb',\n slateblue: '6a5acd',\n slategray: '708090',\n slategrey: '708090',\n snow: 'fffafa',\n springgreen: '00ff7f',\n steelblue: '4682b4',\n tan: 'd2b48c',\n teal: '008080',\n thistle: 'd8bfd8',\n tomato: 'ff6347',\n turquoise: '40e0d0',\n violet: 'ee82ee',\n wheat: 'f5deb3',\n white: 'ffffff',\n whitesmoke: 'f5f5f5',\n yellow: 'ffff00',\n yellowgreen: '9acd32'\n };\n var browser = support.browser;\n var matchNamedColor = function (color) {\n var colorNames = Object.keys(namedColors);\n colorNames.push('transparent');\n var regexp = new RegExp('^(' + colorNames.join('|') + ')(\\\\W|$)', 'i');\n matchNamedColor = function (color) {\n return regexp.exec(color);\n };\n return regexp.exec(color);\n };\n var BaseColor = Class.extend({\n init: function () {\n },\n toHSV: function () {\n return this;\n },\n toRGB: function () {\n return this;\n },\n toHex: function () {\n return this.toBytes().toHex();\n },\n toBytes: function () {\n return this;\n },\n toCss: function () {\n return '#' + this.toHex();\n },\n toCssRgba: function () {\n var rgb = this.toBytes();\n return 'rgba(' + rgb.r + ', ' + rgb.g + ', ' + rgb.b + ', ' + parseFloat(Number(this.a).toFixed(3)) + ')';\n },\n toDisplay: function () {\n if (browser.msie && browser.version < 9) {\n return this.toCss();\n }\n return this.toCssRgba();\n },\n equals: function (c) {\n return c === this || c !== null && this.toCssRgba() === parseColor(c).toCssRgba();\n },\n diff: function (other) {\n if (other === null) {\n return NaN;\n }\n var c1 = this.toBytes();\n var c2 = other.toBytes();\n return Math.sqrt(Math.pow((c1.r - c2.r) * 0.3, 2) + Math.pow((c1.g - c2.g) * 0.59, 2) + Math.pow((c1.b - c2.b) * 0.11, 2));\n },\n clone: function () {\n var c = this.toBytes();\n if (c === this) {\n c = new Bytes(c.r, c.g, c.b, c.a);\n }\n return c;\n }\n });\n var RGB = BaseColor.extend({\n init: function (r, g, b, a) {\n BaseColor.fn.init.call(this);\n this.r = r;\n this.g = g;\n this.b = b;\n this.a = a;\n },\n toHSV: function () {\n var ref = this;\n var r = ref.r;\n var g = ref.g;\n var b = ref.b;\n var min = Math.min(r, g, b);\n var max = Math.max(r, g, b);\n var delta = max - min;\n var v = max;\n var h, s;\n if (delta === 0) {\n return new HSV(0, 0, v, this.a);\n }\n if (max !== 0) {\n s = delta / max;\n if (r === max) {\n h = (g - b) / delta;\n } else if (g === max) {\n h = 2 + (b - r) / delta;\n } else {\n h = 4 + (r - g) / delta;\n }\n h *= 60;\n if (h < 0) {\n h += 360;\n }\n } else {\n s = 0;\n h = -1;\n }\n return new HSV(h, s, v, this.a);\n },\n toHSL: function () {\n var ref = this;\n var r = ref.r;\n var g = ref.g;\n var b = ref.b;\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var h, s, l = (max + min) / 2;\n if (max === min) {\n h = s = 0;\n } else {\n var d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n default:\n break;\n }\n }\n return new HSL(h * 60, s * 100, l * 100, this.a);\n },\n toBytes: function () {\n return new Bytes(this.r * 255, this.g * 255, this.b * 255, this.a);\n }\n });\n var Bytes = RGB.extend({\n init: function (r, g, b, a) {\n RGB.fn.init.call(this, Math.round(r), Math.round(g), Math.round(b), a);\n },\n toRGB: function () {\n return new RGB(this.r / 255, this.g / 255, this.b / 255, this.a);\n },\n toHSV: function () {\n return this.toRGB().toHSV();\n },\n toHSL: function () {\n return this.toRGB().toHSL();\n },\n toHex: function () {\n return hex(this.r, 2) + hex(this.g, 2) + hex(this.b, 2);\n },\n toBytes: function () {\n return this;\n }\n });\n function hex(n, width, pad) {\n if (pad === void 0) {\n pad = '0';\n }\n var result = n.toString(16);\n while (width > result.length) {\n result = pad + result;\n }\n return result;\n }\n var HSV = BaseColor.extend({\n init: function (h, s, v, a) {\n BaseColor.fn.init.call(this);\n this.h = h;\n this.s = s;\n this.v = v;\n this.a = a;\n },\n toRGB: function () {\n var ref = this;\n var h = ref.h;\n var s = ref.s;\n var v = ref.v;\n var r, g, b;\n if (s === 0) {\n r = g = b = v;\n } else {\n h /= 60;\n var i = Math.floor(h);\n var f = h - i;\n var p = v * (1 - s);\n var q = v * (1 - s * f);\n var t = v * (1 - s * (1 - f));\n switch (i) {\n case 0:\n r = v;\n g = t;\n b = p;\n break;\n case 1:\n r = q;\n g = v;\n b = p;\n break;\n case 2:\n r = p;\n g = v;\n b = t;\n break;\n case 3:\n r = p;\n g = q;\n b = v;\n break;\n case 4:\n r = t;\n g = p;\n b = v;\n break;\n default:\n r = v;\n g = p;\n b = q;\n break;\n }\n }\n return new RGB(r, g, b, this.a);\n },\n toHSL: function () {\n return this.toRGB().toHSL();\n },\n toBytes: function () {\n return this.toRGB().toBytes();\n }\n });\n var HSL = BaseColor.extend({\n init: function (h, s, l, a) {\n BaseColor.fn.init.call(this);\n this.h = h;\n this.s = s;\n this.l = l;\n this.a = a;\n },\n toRGB: function () {\n var h = this.h / 360;\n var s = this.s / 100;\n var l = this.l / 100;\n var r, g, b;\n if (s === 0) {\n r = g = b = l;\n } else {\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n var p = 2 * l - q;\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n return new RGB(r, g, b, this.a);\n },\n toHSV: function () {\n return this.toRGB().toHSV();\n },\n toBytes: function () {\n return this.toRGB().toBytes();\n }\n });\n function hue2rgb(p, q, s) {\n var t = s;\n if (t < 0) {\n t += 1;\n }\n if (t > 1) {\n t -= 1;\n }\n if (t < 1 / 6) {\n return p + (q - p) * 6 * t;\n }\n if (t < 1 / 2) {\n return q;\n }\n if (t < 2 / 3) {\n return p + (q - p) * (2 / 3 - t) * 6;\n }\n return p;\n }\n function parseColor(value, safe) {\n var m, ret;\n if (value == null || value === 'none') {\n return null;\n }\n if (value instanceof BaseColor) {\n return value;\n }\n var color = value.toLowerCase();\n if (m = matchNamedColor(color)) {\n if (m[1] === 'transparent') {\n color = new RGB(1, 1, 1, 0);\n } else {\n color = parseColor(namedColors[m[1]], safe);\n }\n color.match = [m[1]];\n return color;\n }\n if (m = /^#?([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})\\b/i.exec(color)) {\n ret = new Bytes(parseInt(m[1], 16), parseInt(m[2], 16), parseInt(m[3], 16), 1);\n } else if (m = /^#?([0-9a-f])([0-9a-f])([0-9a-f])\\b/i.exec(color)) {\n ret = new Bytes(parseInt(m[1] + m[1], 16), parseInt(m[2] + m[2], 16), parseInt(m[3] + m[3], 16), 1);\n } else if (m = /^rgb\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*\\)/.exec(color)) {\n ret = new Bytes(parseInt(m[1], 10), parseInt(m[2], 10), parseInt(m[3], 10), 1);\n } else if (m = /^rgba\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9.]+)\\s*\\)/.exec(color)) {\n ret = new Bytes(parseInt(m[1], 10), parseInt(m[2], 10), parseInt(m[3], 10), parseFloat(m[4]));\n } else if (m = /^rgb\\(\\s*([0-9]*\\.?[0-9]+)%\\s*,\\s*([0-9]*\\.?[0-9]+)%\\s*,\\s*([0-9]*\\.?[0-9]+)%\\s*\\)/.exec(color)) {\n ret = new RGB(parseFloat(m[1]) / 100, parseFloat(m[2]) / 100, parseFloat(m[3]) / 100, 1);\n } else if (m = /^rgba\\(\\s*([0-9]*\\.?[0-9]+)%\\s*,\\s*([0-9]*\\.?[0-9]+)%\\s*,\\s*([0-9]*\\.?[0-9]+)%\\s*,\\s*([0-9.]+)\\s*\\)/.exec(color)) {\n ret = new RGB(parseFloat(m[1]) / 100, parseFloat(m[2]) / 100, parseFloat(m[3]) / 100, parseFloat(m[4]));\n }\n if (ret) {\n ret.match = m;\n } else if (!safe) {\n throw new Error('Cannot parse color: ' + color);\n }\n return ret;\n }\n var 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}));"]}