{"version":3,"sources":["kendo.mobile.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","outerWidth","_outerWidth","outerHeight","_outerHeight","parent","windowOuterWidth","removeClass","hasClass","wrapResize","style","percentRegExp","test","is","addClass","boxSizing","mozBoxSizing","webkitBoxSizing","wrapper","wrapperStyle","display","position","deepExtend","destination","i","arguments","deepExtendOne","source","property","propValue","propType","propInit","destProp","ObservableArray","data","LazyObservableArray","DataSource","HierarchicalDataSource","OBJECT","constructor","Array","RegExp","isFunction","ArrayBuffer","UNDEFINED","Date","getTime","clone","testRx","agent","rxs","dflt","rx","hasOwnProperty","toHyphens","str","g","toLowerCase","toCamelCase","strMatch","g1","toUpperCase","getComputedStyles","properties","computedStyle","styles","document","defaultView","getComputedStyle","each","idx","value","getPropertyValue","currentStyle","size","isScrollable","className","indexOf","overflow","scrollLeft","el","isRtl","webkit","browser","mozila","mozilla","browserVersion","version","e","safari","scrollWidth","clientWidth","Math","abs","obj","key","result","getOffset","type","positioned","offset","sign","top","msie","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","themeColorValues","fillValues","postitionValues","shapeValues","sizeValues","alignValues","positionModeValues","cultures","isArray","proxy","JSON","formatRegExp","FUNCTION","NUMBER","NULL","getterCache","setterCache","slice","noDepricateExtend","src","copyIsArray","copy","name","target","deep","jQuery","isPlainObject","proto","member","base","that","subclass","apply","prototype","Object","_initOptions","_defaultPrevented","_events","bind","eventName","handlers","one","original","handler","events","eventNames","handlersIsFunction","unbind","push","unshift","trigger","sender","call","splice","paramName","useWithBlock","render","compile","parts","settings","argumentName","functionBody","_slotCount","floor","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","chrome","mobileChrome","_scrollbar","scrollbar","refresh","div","createElement","cssText","innerHTML","body","appendChild","offsetWidth","removeChild","closest","tbodyInnerHtml","touch","HTMLElement","hasHW3D","WebKitCSSMatrix","cssFlexbox","lowPrefix","prefix","hasTransitions","event","devicePixelRatio","screenWidth","screen","availWidth","innerWidth","screenHeight","availHeight","innerHeight","detectOS","ua","minorVersion","os","notAndroidPhone","agentRxs","wp","fire","android","iphone","ipad","meego","webos","blackberry","playbook","windows","tizen","sailfish","ffos","osRxs","ios","flat","formFactorRxs","tablet","browserRxs","omini","omobile","firefox","mobilesafari","ie","navigator","device","majorVersion","flatVersion","cordova","PhoneGap","appMode","standalone","location","protocol","userAgent","wpDevicePixelRatio","hasNativeScrolling","delayedClick","mouseAndTouchPresent","detectBrowser","edge","opera","documentMode","detectClipboardAccess","commands","queryCommandSupported","cut","paste","clipboard","zoomLevel","ie11WidthCorrection","docEl","scrollHeight","clientHeight","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","chars","roleSelector","directiveSelector","directives","selectors","triggeredByInput","tagName","onWidgetRegistered","len","logToConsole","message","console","suppressLog","log","dataSource","props","angular","componentTypes","componentType","defaults","_hasBindingTarget","kendoBindingTarget","_tabindex","TABINDEX","tabindex","removeAttr","setOptions","_setEvents","force","getSize","currentSize","_size","_resize","dimensions","setSize","destroy","removeData","_destroy","_muteAngularRebind","_muteRebind","dataItems","flatView","_angularItems","cmd","elements","items","dataItem","domElement","offsetHeight","notify","initWidget","roles","fullPath","widgetKeyRegExp","widgetKey","nodeType","isEmptyObject","rolesFromNamespaces","namespaces","find","widgetsArray","makeArray","widgetInstance","progress","container","leftRight","webkitCorrection","containerScrollLeft","mask","opacity","loading","prependTo","remove","plugin","register","widgetEntry","args","method","nullObject","autoApplyNS","kendoDestroy","view","viewElement","viewHasNativeScrolling","useNativeScrolling","eq","appLevelNativeScrolling","application","themes","views","touchScroller","useNative","Scroller","kendoMobileScroller","suites","editorToolbar","elementData","onResize","setTimeout","unbindResize","off","attrValue","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","kendoFocusable","setupMouseMute","mouseTrap","bustClick","captureMouse","stopPropagation","muteMouse","clearTimeout","mouseTrapTimeoutID","unMuteMouse","move","cancel","MSPointerEnter","MSPointerLeave","orig","fix","special","delegateType","bindType","handle","ret","related","relatedTarget","handleObj","origType","applyEventMap","keyDownHandler","kendoKeydown","preventKendoKeydown","keyDownCallBack","pop","search","touchstart","touchend","ruleToDate","rule","targetDay","ourDay","time","cache","getUTCDay","setUTCDate","findRule","utcTime","rules","zone","grep","from","to","findZone","zones","until","zoneRules","zoneAndRule","info","fromOffset","toOffset","diff","fromLocalOffset","toLocalOffset","tempToOffset","toLocalDate","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec","Sun","Mon","Tue","Wed","Thu","Fri","Sat","setDayOfWeek","dir","setDate","dayOfWeek","firstDayOfMonth","lastDayOfMonth","last","timeOffset","firstDayOfYear","lastDayOfYear","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","addYear","currentDate","nextDay","previousDay","MS_PER_HOUR","nextYear","previousYear","stripWhitespace","iterator","child","createNodeIterator","NodeFilter","SHOW_TEXT","node","FILTER_ACCEPT","FILTER_REJECT","nextNode","referenceNode","textContent","trim","childNodes","nodeValue","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","queueAnimation","runNextAnimation","parseQueryStringParams","queryString","params","paramParts","elementUnderCursor","x","client","wheelDeltaY","jQueryEvent","delta","deltaY","wheelDelta","detail","axis","VERTICAL_AXIS","throttle","delay","timeout","throttled","lastExecTime","elapsed","caret","rangeElement","rangeDuplicated","selectionStart","selectionEnd","isPosition","focus","setSelectionRange","selection","createTextRange","collapse","moveStart","moveEnd","select","duplicate","moveToBookmark","createRange","getBookmark","setEndPoint","text","compileMobileDirective","scope","injector","invoke","$compile","$$phase","$digest","antiForgeryTokens","tokens","csrf_token","csrf_param","cycleForm","form","firstElement","lastElement","keyCode","shiftKey","focusElement","scrollTopPositions","scrollableParents","parentsUntil","setActive","focusNextElement","focussable","nextElement","getWidgetFocusableElement","nextFocusable","addAttribute","attribute","removeAttribute","toggleAttribute","matchesMedia","mediaQuery","media","_bootstrapToMedia","bootstrapMedia","xs","sm","md","lg","xl","fileGroupMap","audio","video","image","txt","presentation","programming","pdf","config","zip","disc-image","getFileGroup","extension","withPrefix","extensions","fileTypeMap","groups","getFileSizeMessage","sizes","pow","selectorFromClasses","propertyToCssClassMap","registerCssClass","propName","shorthand","registerCssClasses","arr","getValidCssClass","validValue","whenAll","updateFunc","contexts","resolveValues","failed","deferred","notifyWith","remaining","Deferred","rejectContexts","rejectValues","resolveContexts","done","fail","resolveWith","postToProxy","dataURI","fileName","proxyURL","proxyTarget","action","contentType","base64","appendTo","submit","saveAsBlob","blob","atob","Uint8Array","Blob","buffer","msSaveBlob","saveAsDataURI","URL","createObjectURL","fileSaver","download","createEvent","initMouseEvent","dispatchEvent","revokeObjectURL","downloadAttribute","saveAs","save","forceProxy","proxyModelSetters","observable","forEach","defineProperty","dirty","setDefaults","path","curr","amd","a1","a2","a3","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","direction","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","zoom","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","val","transformValue","step","elem","now","cur","prop","exclusive","ease","mirror","redirectedEffect","resolved","$1","$2","effect","effectBody","timeoutID","stopTransitionCalled","stopTransition","oldKeys","speeds","merge","uniqueSort","unique","taskKeys","retainPosition","restore","run","jdx","children","childrenLength","effectName","setReverse","addRestoreProperties","reset","setup","resolve","restoreCallback","effectSet","parsedEffects","useTransition","show","multiple","single","isFixed","originalPosition","dX","dY","currentValue","marginLeft","marginTop","_additionalEffects","play","additional","_duration","compositeRun","_complete","divisor","tmp","previous","previousDivisor","slideIn","margin","origin","setLength","oldLength","realLength","outerBox","box","innerBox","currentScale","fillScale","transformOrigin","_container","rotation","zIndex","_clipInHalf","clip","append","face","_face","temporary","back","temp","reverseDirection","faceClone","backClone","staticPage","turningPage","transformStyle","_before","_after","transitionClass","_previous","_transitionClass","beforeTransition","afterTransition","_both","_element","_containerClass","containerClass","completeProxy","isAbsolute","originalOverflow","both","_tickProxy","_tick","_started","tick","onEnd","onCancel","timePassed","startDate","moveTo","movable","initial","_easeProxy","moveAxis","easeOutExpo","easeOutBack","inner","outer","fitScale","toOdataFilter","useOdataFour","operator","ignoreCase","logic","filters","odataFilters","odataFiltersVersionFour","stripMetadata","hex16","createBoundary","createDelimeter","boundary","close","NEWLINE","createCommand","transport","item","httpVerb","command","transportUrl","commandPrefix","getOperationHeader","changeset","changeId","header","getOperationContent","content","DOUBLELINE","getOperations","collection","skipContent","requestBody","processCollection","colection","getBoundary","createBatchRequest","colections","batch","batchURL","headers","Content-Type","updated","destroyed","created","parseBatchResponse","responseText","changeBody","status","code","marker","jsonModel","responseMarkers","markerIndex","collections","models","passed","parse","neq","gt","gte","lt","lte","doesnotcontain","endswith","startswith","isnull","isnotnull","isnullorempty","isnotnullorempty","isempty","isnotempty","mappers","pageSize","page","useVersionFour","$filter","orderby","order","$orderby","skip","$skip","take","$top","defaultDataType","read","dataType","schemas","odata","results","total","transports","jsonp","update","create","parameterMap","$inlinecount","$format","odata-v4","$count","ajax","success","response","responses","XmlDataReader","idField","xmlParse","model","errors","serialize","modelBase","Model","fields","xpathToMember","modelInstance","evaluate","record","_parse","xml","parseDOM","parsedNode","attributes","attributeCount","firstChild","nextSibling","intermediateResult","tree","parseXML","raw","readers","eventHandler","CHANGE","_notifyChange","ownKeys","ignoreObjectKeys","filteredObjectKeys","getOwnPropertyNames","objectKeys","getPrototypeOf","equal","xtype","ytype","getFieldByName","fieldName","Query","normalizeSort","descriptor","descriptors","sortFields","sorts","sortObject","normalizeOperator","operatorMap","normalizeFilter","compareDescriptor","f1","f2","normalizeDescriptor","fieldComparer","compareFilters","expr1","expr2","filters1","filters2","normalizeAggregate","expressions","normalizeGroup","compare","skipItemSorting","aggregates","normalizeGroupWithoutCompare","anyGroupDescriptorHasCompare","groupDescriptors","groupValueComparer","calculateAggregate","accumulator","state","aggr","functionName","aggregate","functions","isNumber","isDate","serializeRecords","getters","originalFieldNames","fieldNames","originalName","setters","convertRecords","convertGroup","hasSubgroups","wrapDataAccess","originalFunction","converter","wrapDataAccessBase","fillLastGroup","originalGroup","newGroup","currOriginal","currentNew","mergeGroups","dest","group","flatGroups","indexFunction","groupIndex","itemIndex","groupsLength","indexFn","flattenGroups","at","wrapGroupItems","eachGroupItems","func","replaceInRanges","ranges","replaceInRange","replaceWithObservable","serverGrouping","viewIndex","removeModel","uid","indexOfPristineModel","_defaultId","indexOfModel","comparer","fieldNameFromModel","convertFilterDescriptorsField","convertDescriptorsField","inferSelect","firstField","secondField","optgroup","label","specified","inferTable","fieldIndex","cells","cell","empty","tbody","tBodies","rows","fieldCount","dataMethod","_data","_attachBubbleHandlers","inferList","list","textChild","textField","urlField","spriteCssClassField","imageUrlField","_loaded","hasChildren","ObservableObject","parsers","defaultValues","Comparer","StableComparer","operators","LocalTransport","RemoteTransport","Cache","DataReader","Transport","Node","Buffer","BatchBuffer","ASCENDING","CREATE","READ","UPDATE","DESTROY","SYNC","GET","ERROR","REQUESTSTART","PROGRESS","REQUESTEND","crud","identity","o","wrapAll","serializeFunctions","json","object","omitChangeEvent","howMany","thisArg","reduce","reduceRight","every","some","Symbol","_parent","_handlers","shouldSerialize","_set","paths","composite","isSetPrevented","change","isObservableArray","isDataSource","boolean","default","_initializers","dirtyFields","editable","accept","isNew","functionFields","nullable","defaultValue","localeCompare","combine","comparers","asc","valueA","valueB","__position","desc","textOp","impl","ignore","accentFoldingFiltering","toLocaleLowerCase","op","getMatchRegexp","esc","doesnotstartwith","n","doesnotendwith","doesnotmatch","filterExpr","and","or","fieldFunctions","operatorFunctions","==","equals","isequalto","equalto","!=","ne","notequals","isnotequalto","notequalto","notequal","<","islessthan","lessthan","less","<=","le","islessthanorequalto","lessthanequal",">","isgreaterthan","greaterthan","greater",">=","isgreaterthanorequalto","greaterthanequal","ge","notsubstringof","toArray","range","inPlace","orderBy","orderByDescending","compiled","predicate","allData","groupPaging","groupAllData","itemCount","subgroupCount","groupBy","groupValue","_sortForGrouping","_sortGroups","sum","average","process","customGroupSort","query","groupDescriptorsWithoutCompare","normalizedSort","groupDescriptorsWithoutSort","filterCallback","groupDescriptor","parameters","operation","_store","clear","store","inmemory","schema","dataFunction","groupsFunction","serializeFunction","serializeGetters","_dataAccessFunction","fromName","_wrapDataAccessBase","_map","_prefetch","_pristineData","_ranges","_view","_pristineTotal","_destroyed","_pageSize","_page","_sort","_sortFields","_filter","_group","_aggregate","_total","_groupPaging","_groupsState","_shouldDetachObservableParents","pushCreate","_pushCreate","pushUpdate","_pushUpdate","pushDestroy","_pushDestroy","offlineStorage","_storage","getItem","localStorage","setItem","reader","_detachObservableParents","_observe","_online","serverSorting","serverPaging","serverFiltering","serverAggregates","inPlaceSort","online","sync","offlineData","_isServerGrouped","_isServerGroupPaged","_isGroupPaged","_push","_readData","_flatData","useRanges","getByUid","_getByUid","_storeData","_addRange","_process","_observeView","insert","_createNewModel","_wrapInEmptyGroup","_insertModelInRange","pushInsert","pushed","autoSync","pristine","rangeSpan","_getCurrentRangeSpan","pristineData","_updatePristineForModel","_removeItems","removePristine","shouldRemovePristine","found","_eachItem","_removePristineForModel","hasGroups","_removeModelFromRanges","promises","_sendSubmit","_send","when","then","_accept","_syncEnd","_change","cancelChanges","_cancelModel","_changesCanceled","_markOfflineUpdatesAsDirty","__state__","hasChanges","serverGroup","_handleCustomErrors","_executeOnPristineForModel","_eachPristineItem","_pristineForModel","_modelCanceled","_submit","reject","_promise","converted","_params","_queueRequest","isPrevented","_dequeueRequest","_readAggregates","replaceSubset","itemIds","j","_serverGroupsTotal","_aggregateResult","_skip","endless","_changeHandler","updatePristine","timestamp","_timeStamp","outerStart","outerEnd","_sortRanges","_groupsFlat","_appendToGroupsFlat","_updateOuterRangesLength","_getGroupByUid","xhr","errorThrown","_requestInProgress","_pending","_shouldWrap","arrayType","_updateTotalForAction","_calculateAggregates","_take","currentRangeStart","_clearEmptyGroups","_queryProcess","dataToAggregate","_setView","_setFilterTotal","_mergeState","_currentRangeStart","moreItemsCount","remote","_hasExpandedSubGroups","_findGroupedRange","itemsLength","groupCount","itemsToSkip","taken","_fetchGroupItems","_fetchingGroupItems","skipped","includeParents","excludeHeader","currentItems","_expandedSubGroupItemsCount","includeCurrentItems","subGroup","endSpecified","groupItemsSkip","firstItem","lastItem","expandedSubGroupItemsCount","groupItemCount","getGroupItems","notFetched","subgroups","_composeItemsFilter","findSubgroups","_timeout","_groupItemsSuccessHandler","totalField","totalCount","_updateRangePristineData","countAdded","_currentRequestTimeStamp","_skipRequestsInProgress","indexOfCurrentGroup","currentGroup","dataLength","indexes","currIdx","rangesLength","_containsSubGroup","_cloneGroup","subgroup","currentSubGroup","filterTotal","setDefaultValue","fetch","_query","next","totalPages","prev","_pageableQueryOptions","getGroupsFlat","groupsTotal","includeExpanded","_calculateGroupsTotal","itemsField","ignoreState","_groupsTotal","countGroupRange","_emptyAggregates","ceil","inRange","_findRange","lastRange","firstItemUid","enableRequestsInProgress","pageSkip","_originalPageSkip","_originalSize","_adjustPageSkip","_groupRangeExists","_rangeExists","prefetch","_processRangeData","skipIdx","takeIdx","startIndex","endIndex","rangeData","rangeEnd","processed","flatData","prevRangeEnd","currentDataLength","groupMapOptions","isGroupPaged","startField","endField","_mergeGroups","_getRangesMismatch","mismatch","prevGroup","eventData","paging","sorting","filtering","_omitPrefetch","_prefetchSuccessHandler","_multiplePrefetch","prevRange","_getPrevRange","_getNextRange","availableItemsCount","_removeModelFromRange","_updateRangesLength","rangeLength","mismatchFound","mismatchLength","lengthDifference","transportOptions","hasChildrenObject","childrenField","childrenOptions","_childrenOptions","_initChildren","_updateChildrenField","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","isJQueryPromise","isNativePromise","hub","signalr","callbacks","_crud","server","dataSourceBinding","bindingName","Binder","bindings","_dataBinding","dataBinding","_dataBound","dataBound","_itemChange","itemChange","bindElement","_ns","_parents","removedItems","unbindElementTree","all","addedItems","hds","addedDataItems","multiselect","dropdowntree","Select","MultiSelect","DropDownTree","treeview","retrievePrimitiveValues","dataValueField","bindingTargetForRole","WidgetBindingTarget","parseBindings","token","colonIndex","keyValueRegExp","createBindings","binding","childrenCopy","unbindElement","whiteSpaceRegExp","valueField","valueUpdate","valuePrimitive","autoBind","BindingTarget","Binding","TemplateBinding","EventBinding","dom","destroyWidget","bindingTarget","deleteExpando","destroyWidgets","unbindElementChildren","namespace","TypedBinder","arraySplice","binders","VALUE","SOURCE","EVENTS","CHECKED","CSS","dependencies","_access","dependency","currentSource","parsedValue","_parseValue","readonly","dataFormat","invisible","_initChange","cloneNode","reference","insertBefore","checked","selectedIndex","selected","valueIndex","sourceValue","optionIndex","optionValue","check","_range","_valueIsObservableObject","_valueIsObservableArray","_source","valueLength","sourceItem","dataTextField","isObservableObject","cascadeFrom","listView","bound","_preselect","newLength","old","same","removeIndex","newValue","oldValues","selectedNode","nonPrimitiveValues","_isMultipleSelection","_getAllChecked","newValues","selectedValue","gantt","_isBound","scheduler","grid","badge","addLength","shifted","shiftedLength","toDestroy","hasValue","hasSource","hasEvents","hasChecked","hasCss","widgetBinding","specificBinders","applyBinding","binder","observableHierarchy","recursiveRead","resolveRules","resolvers","validator","ruleResolvers","decode","numberOfDecimalDigits","parseHtml","parseHTML","searchForMessageContainer","containers","invalidMsgRegExp","isLabelFor","SUMMARYTEMPLATE","Validator","NS","INVALIDMSG","INVALIDINPUT","VALIDINPUT","VALIDATIONSUMMARY","INVALIDLABEL","MESSAGEBOX","ARIAINVALID","ARIADESCRIBEDBY","emailRegExp","urlRegExp","INPUTSELECTOR","CHECKBOXSELECTOR","NUMBERINPUTSELECTOR","BLUR","NAME","FORM","NOVALIDATE","VALIDATE","VALIDATE_INPUT","patternMatcher","matcher","hasAttribute","allowSubmit","validateOnInit","validateAttributeSelector","_errorTemplate","errorTemplate","_summaryTemplate","validationSummary","_inputSelector","_checkboxSelector","_errors","_attachEvents","_isValidated","_validateOnInit","validate","required","email","dateCompare","noNameCheckbox","namedCheckbox","checkbox","radio","raise","validateOnBlur","_allowSubmit","stopImmediatePropagation","_checkElement","validateInput","inputs","invalid","isValid","showValidationSummary","valid","lbl","messageText","messageLabel","wasValid","lblId","parentElement","prevElement","inputWrap","inputLabel","errorId","_checkValidity","_findMessageContainer","_extractMessage","_decorateMessageContainer","replaceWith","insertAfter","_inputWrapper","_inputLabel","_associateMessageContainer","hideMessages","_disassociateMessageContainers","labels","hideValidationSummary","locators","messageLocators","getElementsByTagName","locate","decorate","ruleKey","nonDefaultMessage","customMessage","_getInputNames","_errorsByName","inputNames","_renderSummary","_summaryClick","link","errorsList","summary","absoluteURL","pathPrefix","regEx","host","hashDelimiter","bang","locationHash","stripRoot","root","fixHash","fixBang","BACK","SAME","CHECK_URL_INTERVAL","BROKEN_BACK_NAV","hashStrip","HistoryAdapter","forward","replaceLocation","PushStateAdapter","navigate","title","replaceState","normalize","pathname","normalizeCurrent","fixedUrl","hash","hashBang","HashAdapter","_id","_interval","setInterval","clearInterval","History","adapter","createAdapter","historyLength","locations","silent","_navigate","backCalled","_checkUrl","navigatingInExisting","backButtonPressed","namedParamReplace","optional","routeToRegExp","route","escapeRegExp","optionalParam","namedParam","splatParam","stripUrl","INIT","ROUTE_MISSING","Route","_callback","queryStringParams","_back","worksWith","Router","routes","_urlChangedProxy","_sameProxy","_backProxy","initEventObject","sameProxy","_same","backProxy","urlChangedProxy","_urlChanged","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","methodName","getElementById","contents","_wrapper","_createContent","_createHeader","_createFooter","ccontentElements","contentSelector","contentElement","Layout","_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","touchDelta","touch1","touch2","x1","y1","x2","y2","dx","dy","center","distance","sqrt","getTouches","currentTarget","api","identifier","pointerId","withEachUpEvent","downEvents","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","isMoved","startTime","xDelta","yDelta","defaultAction","surfaceElement","preventIfMovingProxy","_maxTouches","multiTouch","allowSelection","captureUpIfMoved","fastTap","eventNS","surface","global","ownerDocument","pressed","touchAction","preventDragEvent","preventIfMoving","_isMoved","removeEventListener","_disposeAll","capture","_isMultiTouch","_apiCall","_maxTouchesReached","_select","which","_move","_eachTouch","_end","_click","pageX","pageY","matchingTouch","dict","defaultThreshold","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","gesturestart","gesture","gesturechange","coordinates","offsetX","offsetY","previousGesture","previousCenter","scaleDelta","scaleWith","TRANSFORM_STYLE","webkitTransformOrigin","_saveCoordinates","by","scaleTo","newCoordinates","draggable","dropTarget","_over","_out","_drop","dropped","destroyGroup","_cache","_activated","hold","_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","tabKeyTrapNS","focusableNodesSelector","TabKeyTrap","OPEN","CLOSE","DEACTIVATE","ACTIVATE","CENTER","TOP","BOTTOM","ABSOLUTE","BODY","LOCATION","VISIBLE","EFFECTS","ACTIVE","ACTIVEBORDER","ACTIVEBORDERREGEXP","ACTIVECHILDREN","MOUSEDOWN","DOCUMENT_ELEMENT","WINDOW","SCROLL","Popup","parentPopup","collisions","collision","downEvent","anchor","_hovered","scrollArea","animation","open","_animationClose","_mousedownProxy","_mousedown","_resizeProxy","toggleTarget","toggleEvent","viewport","copyAnchorStyles","modal","adjustSize","omitOriginOffsets","_hideDirClass","_closing","_toggleResize","fixed","flipped","_position","_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","_focus","tabIndex","attrName","contentWindow","_haveSelectionRange","elementType","MAX_DOUBLE_TAP_DISTANCE","eventProxy","_triggerTouch","gestureEventProxy","tap","gestureend","enableSwipe","minXDelta","maxYDelta","maxDuration","doubleTapTimeout","lastTap","_dragstart","_swipestart","_swipemove","SNAPBACK_DURATION","SCROLLBAR_OPACITY","FRICTION","VELOCITY_MULTIPLIER","MAX_VELOCITY","OUT_OF_BOUNDS_FRICTION","ANIMATED_SCROLLER_PRECISION","RELEASECLASS","REFRESHCLASS","PULL","RESIZE","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","initPopOvers","popovers","preventScrollIfNotInput","initWidgets","UI_OVERLAY","BEFORE_SHOW","AFTER_SHOW","BEFORE_HIDE","_overlay","_layout","_scroller","_model","layout","stretch","scroller","overlay","$destroy","inited","_invokeNgController","_padIfNativeScrolling","isAndroid","skin","isAndroidForced","hasPlatformIndependentSkin","topContainer","bottomContainer","paddingTop","paddingBottom","scrollerContent","idAttrValue","controller","$apply","_callController","$scope","platform","previousView","currentView","errorMessage","rootNeeded","_setupLayouts","showClosure","serverNavigation","_loadView","modalViews","_getLayout","_xhr","abort","always","_xhrComplete","CAPTURE_EVENTS","Loader","captureEvents","_attachCapture","_loading","changeMessage","transitionDone","EXTERNAL","HREF","DUMMY_HREF","NAVIGATE","SKIP_TRANSITION_ON_BACK_BUTTON","WIDGET_RELS","collapsible","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","WRAPPER","ARROW","OVERLAY","DIRECTION_CLASSES","DIRECTIONS","ANIMATION","DIMENSIONS","REVERSE","popupOptions","containerPopup","activate","_activate","deactivate","arrow","elementOffset","offsetAmount","PopOver","initialOpen","SHIM","Shim","app","osname","ioswp","bb","align","shim","prevented","_hide","BEFORE_OPEN","WRAP","ModalView","_shim","AXIS","SWIPE_TO_OPEN","AFTER_HIDE","NULL_VIEW","Drawer","drawer","_viewShow","_attachTransition","swipeToOpen","_update","leftPositioned","swipeToOpenViews","_show","_moveViewTo","visibleOnCurrentView","_currentViewIncludedIn","_setAsCurrent","currentOffset","canMoveLeft","canMoveRight","leftSwipe","limitedPosition","newPosition","shouldShow","pastHalf","velocityThreshold","EXPANED_PANE_SHIM","SplitView","_style","panes","_paramsHistory","expandedPaneShim","_shimUserEvents","collapsePanes","expandPanes","osCssClass","variant","setDefaultPlatform","statusBarStyle","wp8Background","noVariantSet","isOrientationHorizontal","orientation","getOrientationClass","HORIZONTAL","VERTICAL","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","icon","hideBar","_initialHeight","defaultTitle","_hideBar","COMMAND","BUTTONS","CONTEXT_DATA","cancelTemplate","ActionSheet","ShimClass","_closeProxy","_shimHideProxy","actionData","_close","_shimHide","highlightButton","highlight","ANDROID3UP","deactivateTimeoutID","createBadge","CLICK","DISABLED","DISABLEDSTATE","Button","useTap","clickOn","_userEvents","release","_timeoutDeactivate","badgeElement","button","iconSpan","span","iconElement","BackButton","DetailButton","DISABLE","SELECTOR","ButtonGroup","_button","selectOn","_enable","li","buttongroup","COLLAPSIBLE","HEADER","CONTENT","INSET","HEADER_WRAPPER","CONTENT_WRAPPER","COLLAPSED","EXPANDED","ANIMATED","EXAPND","COLLAPSE","Collapsible","_buildHeader","not","collapsed","inset","collapseIcon","expandIcon","iconPosition","expand","instant","_getContentHeight","isCollapsed","whitespace","TEXT_NODE","whitespaceRegExp","addIcon","querySelector","enhanceItem","ICON_SELECTOR","enhanceLinkItem","itemAndDetailButtons","otherNodes","enhanceCheckBoxItem","putAt","VirtualListViewItem","LOAD_ICON","VirtualListViewLoadingIndicator","VirtualListViewPressToLoadMore","VirtualListViewItemBinder","ListViewItemBinder","ListViewFilter","ListView","ITEM_SELECTOR","HIGHLIGHT_SELECTOR","GROUP_CLASS","ACTIVE_CLASS","GROUP_WRAPPER","GROUP_TEMPLATE","SEARCH_TEMPLATE","STYLED","DATABOUND","DATABINDING","ITEM_CHANGE","buttonRegExp","HeaderFixer","headerFixer","cacheHeaders","_shouldFixHeaders","_cacheHeaders","_scrollHandler","_fixHeader","fixedHeaders","headerPair","currentHeader","DEFAULT_PULL_PARAMETERS","RefreshHandler","pullParameters","setDataSource","pull","_pulled","_first","VirtualList","itemConstructor","prevItem","endReached","below","totalHeight","averageItemHeight","remainingItemsCount","batchUpdate","nextIndex","initialOffset","lastDirection","above","padding","lastTop","topBorder","bottomBorder","setDataItem","_loadIcon","_loadButton","loadMoreText","loadMore","kendoMobileButton","_hideShowButton","_showLoadButton","chromeHeight","_scroll","_scrollEnd","pressToLoadMore","virtualViewSize","updateScrollerSize","updateSize","itemBinder","_refreshHandler","_progressHandler","_unbindDataSource","adding","removing","prependOnRefresh","appendOnRefresh","groupedMode","findByDataItem","_shouldShowLoading","replaceGrouped","insertAt","endlessScroll","filterable","before","autoFilter","searchInput","_oldFilter","_filterChange","clearButton","_dataSourceChange","_refreshInput","appliedFilters","_search","_applyFilter","_clearFilter","scrollTreshold","scrollThreshold","_headerFixer","_itemsCache","_templates","_itemBinder","_pullToRefreshHandler","_enhanceItems","headerTemplate","emptyDataSource","unwrap","_scrollerInstance","triggerChange","_renderItems","groupTemplate","replaceItem","newItem","_dim","_toggle","_highlight","clicked","plainItem","dataIDAttribute","templateProxy","groupTemplateProxy","_headerTemplate","buttonElement","_styleGroups","rootItems","groupHeader","grouped","enhanced","createContainer","toggleTitle","centerElement","noTitle","showTitle","prevAll","NavBar","leftElement","rightElement","DRAG_START","DRAG_END","ElasticPane","ScrollViewContent","VirtualScrollViewContent","Page","ScrollView","CHANGING","REFRESH","CURRENT_PAGE_CLASS","VIRTUAL_PAGE_CLASS","CLEANUP","VIRTUAL_PAGE_COUNT","LEFT_PAGE","CETER_PAGE","RIGHT_PAGE","LEFT_SWIPE","NUDGE","RIGHT_SWIPE","Pager","scrollView","_changeProxy","_refreshProxy","_refresh","pageHTML","pageCount","ScrollViewPager","updateDimension","transitionTo","ScrollViewElasticPane","_getPages","contentHeight","enablePager","pagerOverlay","paneMoved","swipeType","bounce","snap","nextPage","approx","minSnap","maxSnap","currentPage","updatePage","forcePageUpdate","resizeTo","containerHeight","pager","pageElements","_paged","pages","_initPages","_buffer","_pendingPageRefresh","_pendingWidgetRefresh","_resetPages","itemsPerPage","_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","constrain","snapPoint","_animateBackground","handleWidth","_stop","ACTIVE_STATE_CLASS","TabStrip","_buildButton","switchTo","tab","tabs","_setActiveItem","switchByFullUrl","currentItem","tabstrip","withoutTimeout","$timeout","createWidget","attrs","origAttr","controllers","createIt","originalElement","destroyRegister","kNgDisabled","isDisabled","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","widgetOptions","widgetEvents","optionsPath","kOptions","optionsValue","defaultOptions","dataName","eventKey","optionName","ignoredOwnProperties","ignoredAttributes","kDataSource","createDataSource","PanelBar","Menu","$log","warn","oldValue","kendoWidget","$parse","assign","formValue","isForm","formRegExp","haveChangeOnElement","viewRender","onChange","currentVal","$viewValue","$modelValue","$render","formPristine","$pristine","$setViewValue","$setPristine","digest","AutoComplete","$isEmpty","rangePickerModels","rangePickerStartModel","rangePickerEndModel","updating","valueIsCollection","currentValueLength","watchHandler","changeHandler","DateRangePicker","_startDateInput","_endDateInput","RangeSlider","$angular_setLogicValue","$watchCollection","$setDirty","$angular_getLogicValue","deregister","$on","suspend","mo","disconnect","resume","observe","prevClassList","MutationObserver","classList","changes","chg","currClassList","w","attributeName","cls","ComboBox","rebindAttr","templateOptions","isUpload","_cleanUp","WIDGET_TEMPLATE_OPTIONS","templateContents","replaceChild","setTemplate","createDirectives","klass","isMobile","make","directiveName","widgetName","module","directive","directiveFactory","shortcut","dashed","SKIP_SHORTCUTS","restrict","tag","TAGNAMES","scopeField","kScopeField","MANUAL_DIRECTIVES","kendoWidgetInstance","isDigesting","destroyScope","defadvice","origMethod","pendingPatches","self","$injector","$defaultCompile","encode","encOpen","encClose","TreeList","TreeView","Scheduler","PivotGrid","PivotConfigurator","ContextMenu","toDataSource","ds","mew","factory","kendoRenderedTimeout","RENDERED","require","$attrs","$element","roleattr","Editor","NumericTextBox","DatePicker","DateTimePicker","TimePicker","ColorPicker","MaskedTextBox","Upload","MobileButton","MobileBackButton","MobileDetailButton","MobileListView","entry","arg","$angular_scope","$angular_init","itemScope","$$kendoScope","vars","$new","$angular_makeEventHandler","kendoEvent","elems","columns","colIdx","locals","isString","selectable","_checkBoxSelection","angularDataItem","templateSettings","col","encoded","terminal","pre","_instance","post","kAttr","priority","TreeMap","MobileScrollView","Grid","templateDirectives","templates","templateName","outerHTML"],"mappings":"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,EAASiiC,EAAWp8B,GAClD,GAAI8P,GAAU3V,EAAQmM,KAAK81B,IAAc,EACrCtsB,GAAQxP,QAAQN,GAAS,EACzB1F,GAAM6hC,aAAahiC,EAASiiC,EAAWp8B,GAEvC1F,GAAM+hC,gBAAgBliC,EAASiiC,EAAWp8B,IAGlD1F,GAAMiiC,aAAe,SAAUC,GAC3B,GAAIC,GAAQniC,GAAMoiC,kBAAkBF,IAAeA,CACnD,OAAOjiC,IAAQqoB,YAAc7pB,EAAO6pB,WAAW6Z,GAAOxkB,SAE1D3d,GAAMoiC,kBAAoB,SAAUC,GAChC,OACIC,GAAM,qBACNC,GAAM,qBACNC,GAAM,qBACNC,GAAM,qBACNC,GAAM,uBACRL,IAENriC,GAAM2iC,cACFC,OACI,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,QAEJC,OACI,OACA,OACA,OACA,OACA,OACA,OACA,MACA,QACA,OACA,OACA,OACA,OACA,OACA,MACA,OACA,OACA,QAEJC,OACI,MACA,OACA,QACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,QACA,OACA,OACA,MACA,OACA,OACA,QACA,OACA,SAEJC,KACI,OACA,QACA,OACA,SACA,OACA,OACA,OACA,OACA,OACA,QACA,OACA,QAEJC,cACI,OACA,OACA,OACA,OACA,SAEJ3/B,MACI,OACA,OACA,SAEJ4/B,aACI,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,QACA,OACA,QACA,OACA,OACA,OACA,OACA,QACA,OACA,OACA,OACA,OACA,OACA,QACA,MACA,OACA,OACA,UAEJC,KAAM,QACNC,QACI,OACA,OACA,OACA,OACA,OACA,OACA,UACA,OACA,QAEJC,KACI,MACA,OACA,MACA,QACA,OACA,OACA,OACA,OACA,OACA,UACA,KACA,OACA,SAEJC,cACI,OACA,OACA,SACA,OACA,OACA,OACA,SAGRrjC,GAAMsjC,aAAe,SAAUC,EAAWC,GAArB,GAOR7gC,GACD8gC,EAPJC,EAAc1jC,GAAM2iC,aACpBgB,EAAS7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","file":"kendo.mobile.min.js","sourcesContent":["/*!\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n*/\n(function (f, define) {\n define('kendo.core', ['jquery'], f);\n}(function () {\n var __meta__ = {\n id: 'core',\n name: 'Core',\n category: 'framework',\n description: 'The core of the Kendo framework.'\n };\n (function ($, window, undefined) {\n var kendo = window.kendo = window.kendo || { cultures: {} }, extend = $.extend, each = $.each, isArray = $.isArray, proxy = $.proxy, noop = $.noop, math = Math, Template, JSON = window.JSON || {}, support = {}, percentRegExp = /%/, formatRegExp = /\\{(\\d+)(:[^\\}]+)?\\}/g, boxShadowRegExp = /(\\d+(?:\\.?)\\d*)px\\s*(\\d+(?:\\.?)\\d*)px\\s*(\\d+(?:\\.?)\\d*)px\\s*(\\d+)?/i, numberRegExp = /^(\\+|-?)\\d+(\\.?)\\d*$/, FUNCTION = 'function', STRING = 'string', NUMBER = 'number', OBJECT = 'object', NULL = 'null', BOOLEAN = 'boolean', UNDEFINED = 'undefined', getterCache = {}, setterCache = {}, slice = [].slice, noDepricateExtend = function () {\n var src, copyIsArray, copy, name, options, clone, target = arguments[0] || {}, i = 1, length = arguments.length, deep = false;\n if (typeof target === 'boolean') {\n deep = target;\n target = arguments[i] || {};\n i++;\n }\n if (typeof target !== 'object' && !jQuery.isFunction(target)) {\n target = {};\n }\n if (i === length) {\n target = this;\n i--;\n }\n for (; i < length; i++) {\n if ((options = arguments[i]) != null) {\n for (name in options) {\n if (name == 'filters' || name == 'concat' || name == ':') {\n continue;\n }\n src = target[name];\n copy = options[name];\n if (target === copy) {\n continue;\n }\n if (deep && copy && (jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)))) {\n if (copyIsArray) {\n copyIsArray = false;\n clone = src && jQuery.isArray(src) ? src : [];\n } else {\n clone = src && jQuery.isPlainObject(src) ? src : {};\n }\n target[name] = noDepricateExtend(deep, clone, copy);\n } else if (copy !== undefined) {\n target[name] = copy;\n }\n }\n }\n }\n return target;\n };\n kendo.version = '2021.2.616'.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 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 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.indexOf('auto') > -1 || overflow.indexOf('scroll') > -1;\n }\n function scrollLeft(element, value) {\n var webkit = support.browser.webkit;\n var mozila = support.browser.mozilla;\n var browserVersion = support.browser.version;\n var el, isRtl;\n if (element instanceof $ && value !== undefined) {\n element.each(function (i, e) {\n scrollLeft(e, value);\n });\n return;\n } else {\n el = element instanceof $ ? element[0] : element;\n }\n if (!el) {\n return;\n }\n isRtl = support.isRtl(element);\n if (value !== undefined) {\n if (isRtl && webkit && (browserVersion < 85 || support.browser.safari)) {\n el.scrollLeft = el.scrollWidth - el.clientWidth - value;\n } else if (isRtl && (mozila || webkit) && value > 0) {\n el.scrollLeft = -value;\n } else {\n el.scrollLeft = value;\n }\n } else {\n if (isRtl && webkit && (browserVersion < 85 || support.browser.safari)) {\n return el.scrollWidth - el.clientWidth - el.scrollLeft;\n } else {\n return Math.abs(el.scrollLeft);\n }\n }\n }\n (function () {\n support._scrollbar = undefined;\n support.scrollbar = function (refresh) {\n if (!isNaN(support._scrollbar) && !refresh) {\n return support._scrollbar;\n } else {\n var div = document.createElement('div'), result;\n div.style.cssText = 'overflow:scroll;overflow-x:hidden;zoom:1;clear:both;display:block';\n div.innerHTML = ' ';\n document.body.appendChild(div);\n support._scrollbar = result = div.offsetWidth - div.scrollWidth;\n document.body.removeChild(div);\n return result;\n }\n };\n support.isRtl = function (element) {\n return $(element).closest('.k-rtl').length > 0;\n };\n var table = document.createElement('table');\n try {\n table.innerHTML = '';\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 (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 support.hashChange = 'onhashchange' in window;\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, chars = 'abcdef';\n id += chars[Math.floor(Math.random() * Math.floor(chars.length))];\n for (i = 1; i < 32; i++) {\n random = math.random() * 16 | 0;\n if (i == 8 || i == 12 || i == 16 || i == 20) {\n id += '-';\n }\n id += (i == 12 ? 4 : i == 16 ? random & 3 | 8 : random).toString(16);\n }\n return id;\n },\n roleSelector: function (role) {\n return role.replace(/(\\S+)/g, '[' + kendo.attr('role') + '=$1],').slice(0, -1);\n },\n directiveSelector: function (directives) {\n var selectors = directives.split(' ');\n if (selectors) {\n for (var i = 0; i < selectors.length; i++) {\n if (selectors[i] != 'view') {\n selectors[i] = selectors[i].replace(/(\\w*)(view|bar|strip|over)$/, '$1-$2');\n }\n }\n }\n return selectors.join(' ').replace(/(\\S+)/g, 'kendo-mobile-$1,').slice(0, -1);\n },\n triggeredByInput: function (e) {\n return /^(label|input|textarea|select)$/i.test(e.target.tagName);\n },\n onWidgetRegistered: function (callback) {\n for (var i = 0, len = kendo.widgets.length; i < len; i++) {\n callback(kendo.widgets[i]);\n }\n kendo._widgetRegisteredCallbacks.push(callback);\n },\n logToConsole: function (message, type) {\n var console = window.console;\n if (!kendo.suppressLog && typeof console != 'undefined' && console.log) {\n console[type || 'log'](message);\n }\n }\n });\n var Widget = Observable.extend({\n init: function (element, options) {\n var that = this;\n that.element = kendo.jQuery(element).handler(that);\n that.angular('init', options);\n Observable.fn.init.call(that);\n var dataSource = options ? options.dataSource : null;\n var props;\n if (options) {\n props = (that.componentTypes || {})[(options || {}).componentType];\n }\n if (dataSource) {\n options = extend({}, options, { dataSource: {} });\n }\n options = that.options = extend(true, {}, that.options, that.defaults, props || {}, options);\n if (dataSource) {\n options.dataSource = dataSource;\n }\n if (!that.element.attr(kendo.attr('role'))) {\n that.element.attr(kendo.attr('role'), (options.name || '').toLowerCase());\n }\n that.element.data('kendo' + options.prefix + options.name, that);\n that.bind(that.events, options);\n },\n events: [],\n options: { prefix: '' },\n _hasBindingTarget: function () {\n return !!this.element[0].kendoBindingTarget;\n },\n _tabindex: function (target) {\n target = target || this.wrapper;\n var element = this.element, TABINDEX = 'tabindex', tabindex = target.attr(TABINDEX) || element.attr(TABINDEX);\n element.removeAttr(TABINDEX);\n target.attr(TABINDEX, !isNaN(tabindex) ? tabindex : 0);\n },\n setOptions: function (options) {\n this._setEvents(options);\n $.extend(this.options, options);\n },\n _setEvents: function (options) {\n var that = this, idx = 0, length = that.events.length, e;\n for (; idx < length; idx++) {\n e = that.events[idx];\n if (that.options[e] && options[e]) {\n that.unbind(e, that.options[e]);\n if (that._events && that._events[e]) {\n delete that._events[e];\n }\n }\n }\n that.bind(that.events, options);\n },\n resize: function (force) {\n var size = this.getSize(), currentSize = this._size;\n if (force || (size.width > 0 || size.height > 0) && (!currentSize || size.width !== currentSize.width || size.height !== currentSize.height)) {\n this._size = size;\n this._resize(size, force);\n this.trigger('resize', size);\n }\n },\n getSize: function () {\n return kendo.dimensions(this.element);\n },\n size: function (size) {\n if (!size) {\n return this.getSize();\n } else {\n this.setSize(size);\n }\n },\n setSize: $.noop,\n _resize: $.noop,\n destroy: function () {\n var that = this;\n that.element.removeData('kendo' + that.options.prefix + that.options.name);\n that.element.removeData('handler');\n that.unbind();\n },\n _destroy: function () {\n this.destroy();\n },\n angular: function () {\n },\n _muteAngularRebind: function (callback) {\n this._muteRebind = true;\n callback.call(this);\n this._muteRebind = false;\n }\n });\n var DataBoundWidget = Widget.extend({\n dataItems: function () {\n return this.dataSource.flatView();\n },\n _angularItems: function (cmd) {\n var that = this;\n that.angular(cmd, function () {\n return {\n elements: that.items(),\n data: $.map(that.dataItems(), function (dataItem) {\n return { dataItem: dataItem };\n })\n };\n });\n }\n });\n kendo.dimensions = function (element, dimensions) {\n var domElement = element[0];\n if (dimensions) {\n element.css(dimensions);\n }\n return {\n width: domElement.offsetWidth,\n height: domElement.offsetHeight\n };\n };\n kendo.notify = noop;\n var templateRegExp = /template$/i, jsonRegExp = /^\\s*(?:\\{(?:.|\\r\\n|\\n)*\\}|\\[(?:.|\\r\\n|\\n)*\\])\\s*$/, jsonFormatRegExp = /^\\{(\\d+)(:[^\\}]+)?\\}|^\\[[A-Za-z_]+\\]$/, dashRegExp = /([A-Z])/g;\n function parseOption(element, option) {\n var value;\n if (option.indexOf('data') === 0) {\n option = option.substring(4);\n option = option.charAt(0).toLowerCase() + option.substring(1);\n }\n option = option.replace(dashRegExp, '-$1');\n value = element.getAttribute('data-' + kendo.ns + option);\n if (value === null) {\n value = undefined;\n } else if (value === 'null') {\n value = null;\n } else if (value === 'true') {\n value = true;\n } else if (value === 'false') {\n value = false;\n } else if (numberRegExp.test(value) && option != 'mask') {\n value = parseFloat(value);\n } else if (jsonRegExp.test(value) && !jsonFormatRegExp.test(value)) {\n value = new Function('return (' + value + ')')();\n }\n return value;\n }\n function parseOptions(element, options, source) {\n var result = {}, option, value, role = element.getAttribute('data-' + kendo.ns + 'role');\n for (option in options) {\n value = parseOption(element, option);\n if (value !== undefined) {\n if (templateRegExp.test(option) && role != 'drawer') {\n if (typeof value === 'string') {\n if ($('#' + value).length) {\n value = kendo.template($('#' + value).html());\n } else if (source) {\n value = kendo.template(source[value]);\n }\n } else {\n value = element.getAttribute(option);\n }\n }\n result[option] = value;\n }\n }\n return result;\n }\n kendo.initWidget = function (element, options, roles) {\n var result, option, widget, idx, length, role, value, dataSource, fullPath, widgetKeyRegExp;\n if (!roles) {\n roles = kendo.ui.roles;\n } else if (roles.roles) {\n roles = roles.roles;\n }\n element = element.nodeType ? element : element[0];\n role = element.getAttribute('data-' + kendo.ns + 'role');\n if (!role) {\n return;\n }\n fullPath = role.indexOf('.') === -1;\n if (fullPath) {\n widget = roles[role];\n } else {\n widget = kendo.getter(role)(window);\n }\n var data = $(element).data(), widgetKey = widget ? 'kendo' + widget.fn.options.prefix + widget.fn.options.name : '';\n if (fullPath) {\n widgetKeyRegExp = new RegExp('^kendo.*' + role + '$', 'i');\n } else {\n widgetKeyRegExp = new RegExp('^' + widgetKey + '$', 'i');\n }\n for (var key in data) {\n if (key.match(widgetKeyRegExp)) {\n if (key === widgetKey) {\n result = data[key];\n } else {\n return data[key];\n }\n }\n }\n if (!widget) {\n return;\n }\n dataSource = parseOption(element, 'dataSource');\n options = $.extend({}, parseOptions(element, $.extend({}, widget.fn.options, widget.fn.defaults)), options);\n if (dataSource) {\n if (typeof dataSource === STRING) {\n options.dataSource = kendo.getter(dataSource)(window);\n } else {\n options.dataSource = dataSource;\n }\n }\n for (idx = 0, length = widget.fn.events.length; idx < length; idx++) {\n option = widget.fn.events[idx];\n value = parseOption(element, option);\n if (value !== undefined) {\n options[option] = kendo.getter(value)(window);\n }\n }\n if (!result) {\n result = new widget(element, options);\n } else if (!$.isEmptyObject(options)) {\n result.setOptions(options);\n }\n return result;\n };\n kendo.rolesFromNamespaces = function (namespaces) {\n var roles = [], idx, length;\n if (!namespaces[0]) {\n namespaces = [\n kendo.ui,\n kendo.dataviz.ui\n ];\n }\n for (idx = 0, length = namespaces.length; idx < length; idx++) {\n roles[idx] = namespaces[idx].roles;\n }\n return extend.apply(null, [{}].concat(roles.reverse()));\n };\n kendo.init = function (element) {\n var roles = kendo.rolesFromNamespaces(slice.call(arguments, 1));\n $(element).find('[data-' + kendo.ns + 'role]').addBack().each(function () {\n kendo.initWidget(this, {}, roles);\n });\n };\n kendo.destroy = function (element) {\n $(element).find('[data-' + kendo.ns + 'role]').addBack().each(function () {\n var data = $(this).data();\n for (var key in data) {\n if (key.indexOf('kendo') === 0 && typeof data[key].destroy === FUNCTION) {\n data[key].destroy();\n }\n }\n });\n };\n function containmentComparer(a, b) {\n return $.contains(a, b) ? -1 : 1;\n }\n function resizableWidget() {\n var widget = $(this);\n return $.inArray(widget.attr('data-' + kendo.ns + 'role'), [\n 'slider',\n 'rangeslider',\n 'breadcrumb'\n ]) > -1 || widget.is(':visible');\n }\n kendo.resize = function (element, force) {\n var widgets = $(element).find('[data-' + kendo.ns + 'role]').addBack().filter(resizableWidget);\n if (!widgets.length) {\n return;\n }\n var widgetsArray = $.makeArray(widgets);\n widgetsArray.sort(containmentComparer);\n $.each(widgetsArray, function () {\n var widget = kendo.widgetInstance($(this));\n if (widget) {\n widget.resize(force);\n }\n });\n };\n kendo.parseOptions = parseOptions;\n extend(kendo.ui, {\n Widget: Widget,\n DataBoundWidget: DataBoundWidget,\n roles: {},\n progress: function (container, toggle, options) {\n var mask = container.find('.k-loading-mask'), support = kendo.support, browser = support.browser, isRtl, leftRight, webkitCorrection, containerScrollLeft, cssClass;\n options = $.extend({}, {\n width: '100%',\n height: '100%',\n top: container.scrollTop(),\n opacity: false\n }, options);\n cssClass = options.opacity ? 'k-loading-mask k-opaque' : 'k-loading-mask';\n if (toggle) {\n if (!mask.length) {\n isRtl = support.isRtl(container);\n leftRight = isRtl ? 'right' : 'left';\n containerScrollLeft = kendo.scrollLeft(container);\n webkitCorrection = browser.webkit ? !isRtl ? 0 : container[0].scrollWidth - container.width() - 2 * containerScrollLeft : 0;\n mask = $(kendo.format('
{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 firstDayOfYear(date) {\n return new Date(date.getFullYear(), 0, 1);\n }\n function lastDayOfYear(date) {\n return new Date(date.getFullYear(), 11, 31);\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 function addYear(date, offset) {\n var currentDate = new Date(date);\n return new Date(currentDate.setFullYear(currentDate.getFullYear() + offset));\n }\n return {\n adjustDST: adjustDST,\n dayOfWeek: dayOfWeek,\n setDayOfWeek: setDayOfWeek,\n getDate: getDate,\n isInDateRange: isInDateRange,\n isInTimeRange: isInTimeRange,\n isToday: isToday,\n nextDay: function (date) {\n return addDays(date, 1);\n },\n previousDay: function (date) {\n return addDays(date, -1);\n },\n toUtcTime: toUtcTime,\n MS_PER_DAY: MS_PER_DAY,\n MS_PER_HOUR: 60 * MS_PER_MINUTE,\n MS_PER_MINUTE: MS_PER_MINUTE,\n setTime: setTime,\n setHours: setHours,\n addDays: addDays,\n today: today,\n toInvariantTime: toInvariantTime,\n firstDayOfMonth: firstDayOfMonth,\n lastDayOfMonth: lastDayOfMonth,\n weekInYear: weekInYear,\n getMilliseconds: getMilliseconds,\n firstDayOfYear: firstDayOfYear,\n lastDayOfYear: lastDayOfYear,\n nextYear: function (date) {\n return addYear(date, 1);\n },\n previousYear: function (date) {\n return addYear(date, -1);\n }\n };\n }();\n kendo.stripWhitespace = function (element) {\n if (document.createNodeIterator) {\n var iterator = document.createNodeIterator(element, NodeFilter.SHOW_TEXT, function (node) {\n return node.parentNode == element ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;\n }, false);\n while (iterator.nextNode()) {\n if (iterator.referenceNode && !iterator.referenceNode.textContent.trim()) {\n iterator.referenceNode.parentNode.removeChild(iterator.referenceNode);\n }\n }\n } else {\n for (var i = 0; i < element.childNodes.length; i++) {\n var child = element.childNodes[i];\n if (child.nodeType == 3 && !/\\S/.test(child.nodeValue)) {\n element.removeChild(child);\n i--;\n }\n if (child.nodeType == 1) {\n kendo.stripWhitespace(child);\n }\n }\n }\n };\n var animationFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function (callback) {\n setTimeout(callback, 1000 / 60);\n };\n kendo.animationFrame = function (callback) {\n animationFrame.call(window, callback);\n };\n var animationQueue = [];\n kendo.queueAnimation = function (callback) {\n animationQueue[animationQueue.length] = callback;\n if (animationQueue.length === 1) {\n kendo.runNextAnimation();\n }\n };\n kendo.runNextAnimation = function () {\n kendo.animationFrame(function () {\n if (animationQueue[0]) {\n animationQueue.shift()();\n if (animationQueue[0]) {\n kendo.runNextAnimation();\n }\n }\n });\n };\n kendo.parseQueryStringParams = function (url) {\n var queryString = url.split('?')[1] || '', params = {}, paramParts = queryString.split(/&|=/), length = paramParts.length, idx = 0;\n for (; idx < length; idx += 2) {\n if (paramParts[idx] !== '') {\n params[decodeURIComponent(paramParts[idx])] = decodeURIComponent(paramParts[idx + 1]);\n }\n }\n return params;\n };\n kendo.elementUnderCursor = function (e) {\n if (typeof e.x.client != 'undefined') {\n return document.elementFromPoint(e.x.client, e.y.client);\n }\n };\n kendo.wheelDeltaY = function (jQueryEvent) {\n var e = jQueryEvent.originalEvent, deltaY = e.wheelDeltaY, delta;\n if (e.wheelDelta) {\n if (deltaY === undefined || deltaY) {\n delta = e.wheelDelta;\n }\n } else if (e.detail && e.axis === e.VERTICAL_AXIS) {\n delta = -e.detail * 10;\n }\n return delta;\n };\n kendo.throttle = function (fn, delay) {\n var timeout;\n var lastExecTime = 0;\n if (!delay || delay <= 0) {\n return fn;\n }\n var throttled = function () {\n var that = this;\n var elapsed = +new Date() - lastExecTime;\n var args = arguments;\n function exec() {\n fn.apply(that, args);\n lastExecTime = +new Date();\n }\n if (!lastExecTime) {\n return exec();\n }\n if (timeout) {\n clearTimeout(timeout);\n }\n if (elapsed > delay) {\n exec();\n } else {\n timeout = setTimeout(exec, delay - elapsed);\n }\n };\n throttled.cancel = function () {\n clearTimeout(timeout);\n };\n return throttled;\n };\n kendo.caret = function (element, start, end) {\n var rangeElement;\n var isPosition = start !== undefined;\n if (end === undefined) {\n end = start;\n }\n if (element[0]) {\n element = element[0];\n }\n if (isPosition && element.disabled) {\n return;\n }\n try {\n if (element.selectionStart !== undefined) {\n if (isPosition) {\n element.focus();\n var mobile = support.mobileOS;\n if (mobile.wp || mobile.android) {\n setTimeout(function () {\n element.setSelectionRange(start, end);\n }, 0);\n } else {\n element.setSelectionRange(start, end);\n }\n } else {\n start = [\n element.selectionStart,\n element.selectionEnd\n ];\n }\n } else if (document.selection) {\n if ($(element).is(':visible')) {\n element.focus();\n }\n rangeElement = element.createTextRange();\n if (isPosition) {\n rangeElement.collapse(true);\n rangeElement.moveStart('character', start);\n rangeElement.moveEnd('character', end - start);\n rangeElement.select();\n } else {\n var rangeDuplicated = rangeElement.duplicate(), selectionStart, selectionEnd;\n rangeElement.moveToBookmark(document.selection.createRange().getBookmark());\n rangeDuplicated.setEndPoint('EndToStart', rangeElement);\n selectionStart = rangeDuplicated.text.length;\n selectionEnd = selectionStart + rangeElement.text.length;\n start = [\n selectionStart,\n selectionEnd\n ];\n }\n }\n } catch (e) {\n start = [];\n }\n return start;\n };\n kendo.compileMobileDirective = function (element, scope) {\n var angular = window.angular;\n element.attr('data-' + kendo.ns + 'role', element[0].tagName.toLowerCase().replace('kendo-mobile-', '').replace('-', ''));\n angular.element(element).injector().invoke([\n '$compile',\n function ($compile) {\n $compile(element)(scope);\n if (!/^\\$(digest|apply)$/.test(scope.$$phase)) {\n scope.$digest();\n }\n }\n ]);\n return kendo.widgetInstance(element, kendo.mobile.ui);\n };\n kendo.antiForgeryTokens = function () {\n var tokens = {}, csrf_token = $('meta[name=csrf-token],meta[name=_csrf]').attr('content'), csrf_param = $('meta[name=csrf-param],meta[name=_csrf_header]').attr('content');\n $('input[name^=\\'__RequestVerificationToken\\']').each(function () {\n tokens[this.name] = this.value;\n });\n if (csrf_param !== undefined && csrf_token !== undefined) {\n tokens[csrf_param] = csrf_token;\n }\n return tokens;\n };\n kendo.cycleForm = function (form) {\n var firstElement = form.find('input, .k-widget').first();\n var lastElement = form.find('button, .k-button').last();\n function focus(el) {\n var widget = kendo.widgetInstance(el);\n if (widget && widget.focus) {\n widget.focus();\n } else {\n el.focus();\n }\n }\n lastElement.on('keydown', function (e) {\n if (e.keyCode == kendo.keys.TAB && !e.shiftKey) {\n e.preventDefault();\n focus(firstElement);\n }\n });\n firstElement.on('keydown', function (e) {\n if (e.keyCode == kendo.keys.TAB && e.shiftKey) {\n e.preventDefault();\n focus(lastElement);\n }\n });\n };\n kendo.focusElement = function (element) {\n var scrollTopPositions = [];\n var scrollableParents = element.parentsUntil('body').filter(function (index, element) {\n var computedStyle = kendo.getComputedStyles(element, ['overflow']);\n return computedStyle.overflow !== 'visible';\n }).add(window);\n scrollableParents.each(function (index, parent) {\n scrollTopPositions[index] = $(parent).scrollTop();\n });\n try {\n element[0].setActive();\n } catch (e) {\n element[0].focus();\n }\n scrollableParents.each(function (index, parent) {\n $(parent).scrollTop(scrollTopPositions[index]);\n });\n };\n kendo.focusNextElement = function () {\n if (document.activeElement) {\n var focussable = $(':kendoFocusable');\n var index = focussable.index(document.activeElement);\n if (index > -1) {\n var nextElement = focussable[index + 1] || focussable[0];\n nextElement.focus();\n }\n }\n };\n kendo.trim = function (value) {\n if (!!value) {\n return value.toString().trim();\n } else {\n return '';\n }\n };\n kendo.getWidgetFocusableElement = function (element) {\n var nextFocusable = element.closest(':kendoFocusable'), widgetInstance = kendo.widgetInstance(element), target;\n if (nextFocusable.length) {\n target = nextFocusable;\n } else if (widgetInstance) {\n target = widgetInstance.options.name === 'Editor' ? $(widgetInstance.body) : widgetInstance.wrapper.find(':kendoFocusable').first();\n } else {\n target = element;\n }\n return target;\n };\n kendo.addAttribute = function (element, attribute, value) {\n var current = element.attr(attribute) || '';\n if (current.indexOf(value) < 0) {\n element.attr(attribute, (current + ' ' + value).trim());\n }\n };\n kendo.removeAttribute = function (element, attribute, value) {\n var current = element.attr(attribute) || '';\n element.attr(attribute, current.replace(value, '').trim());\n };\n kendo.toggleAttribute = function (element, attribute, value) {\n var current = element.attr(attribute) || '';\n if (current.indexOf(value) < 0) {\n kendo.addAttribute(element, attribute, value);\n } else {\n kendo.removeAttribute(element, attribute, value);\n }\n };\n kendo.matchesMedia = function (mediaQuery) {\n var media = kendo._bootstrapToMedia(mediaQuery) || mediaQuery;\n return support.matchMedia && window.matchMedia(media).matches;\n };\n kendo._bootstrapToMedia = function (bootstrapMedia) {\n return {\n 'xs': '(max-width: 576px)',\n 'sm': '(min-width: 576px)',\n 'md': '(min-width: 768px)',\n 'lg': '(min-width: 992px)',\n 'xl': '(min-width: 1200px)'\n }[bootstrapMedia];\n };\n kendo.fileGroupMap = {\n audio: [\n '.aif',\n '.iff',\n '.m3u',\n '.m4a',\n '.mid',\n '.mp3',\n '.mpa',\n '.wav',\n '.wma',\n '.ogg',\n '.wav',\n '.wma',\n '.wpl'\n ],\n video: [\n '.3g2',\n '.3gp',\n '.avi',\n '.asf',\n '.flv',\n '.m4u',\n '.rm',\n '.h264',\n '.m4v',\n '.mkv',\n '.mov',\n '.mp4',\n '.mpg',\n '.rm',\n '.swf',\n '.vob',\n '.wmv'\n ],\n image: [\n '.ai',\n '.dds',\n '.heic',\n '.jpe',\n 'jfif',\n '.jif',\n '.jp2',\n '.jps',\n '.eps',\n '.bmp',\n '.gif',\n '.jpeg',\n '.jpg',\n '.png',\n '.ps',\n '.psd',\n '.svg',\n '.svgz',\n '.tif',\n '.tiff'\n ],\n txt: [\n '.doc',\n '.docx',\n '.log',\n '.pages',\n '.tex',\n '.wpd',\n '.wps',\n '.odt',\n '.rtf',\n '.text',\n '.txt',\n '.wks'\n ],\n presentation: [\n '.key',\n '.odp',\n '.pps',\n '.ppt',\n '.pptx'\n ],\n data: [\n '.xlr',\n '.xls',\n '.xlsx'\n ],\n programming: [\n '.tmp',\n '.bak',\n '.msi',\n '.cab',\n '.cpl',\n '.cur',\n '.dll',\n '.dmp',\n '.drv',\n '.icns',\n '.ico',\n '.link',\n '.sys',\n '.cfg',\n '.ini',\n '.asp',\n '.aspx',\n '.cer',\n '.csr',\n '.css',\n '.dcr',\n '.htm',\n '.html',\n '.js',\n '.php',\n '.rss',\n '.xhtml'\n ],\n pdf: ['.pdf'],\n config: [\n '.apk',\n '.app',\n '.bat',\n '.cgi',\n '.com',\n '.exe',\n '.gadget',\n '.jar',\n '.wsf'\n ],\n zip: [\n '.7z',\n '.cbr',\n '.gz',\n '.sitx',\n '.arj',\n '.deb',\n '.pkg',\n '.rar',\n '.rpm',\n '.tar.gz',\n '.z',\n '.zip',\n '.zipx'\n ],\n 'disc-image': [\n '.dmg',\n '.iso',\n '.toast',\n '.vcd',\n '.bin',\n '.cue',\n '.mdf'\n ]\n };\n kendo.getFileGroup = function (extension, withPrefix) {\n var fileTypeMap = kendo.fileGroupMap;\n var groups = Object.keys(fileTypeMap);\n var type = 'file';\n if (extension === undefined || !extension.length) {\n return type;\n }\n for (var i = 0; i < groups.length; i += 1) {\n var extensions = fileTypeMap[groups[i]];\n if (extensions.indexOf(extension.toLowerCase()) > -1) {\n return withPrefix ? 'file-' + groups[i] : groups[i];\n }\n }\n return type;\n };\n kendo.getFileSizeMessage = function (size) {\n var sizes = [\n 'Bytes',\n 'KB',\n 'MB',\n 'GB',\n 'TB'\n ];\n if (size === 0) {\n return '0 Byte';\n }\n var i = parseInt(Math.floor(Math.log(size) / Math.log(1024)), 10);\n return Math.round(size / Math.pow(1024, i), 2) + ' ' + sizes[i];\n };\n kendo.selectorFromClasses = function (classes) {\n return '.' + classes.split(' ').join('.');\n };\n var themeColorValues = [\n 'primary',\n 'secondary',\n 'tertiary',\n 'inherit',\n 'info',\n 'success',\n 'warning',\n 'error',\n 'dark',\n 'light',\n 'inverse'\n ];\n var fillValues = [\n 'solid',\n 'outline',\n 'flat'\n ];\n var postitionValues = [\n 'edge',\n 'outside',\n 'inside'\n ];\n var shapeValues = [\n 'circle',\n 'rectangle',\n 'rounded',\n 'dot',\n 'pill'\n ];\n var sizeValues = [\n [\n 'small',\n 'sm'\n ],\n [\n 'medium',\n 'md'\n ],\n [\n 'large',\n 'lg'\n ]\n ];\n var alignValues = [\n [\n 'top start',\n 'top-start'\n ],\n [\n 'top end',\n 'top-end'\n ],\n [\n 'bottom start',\n 'bottom-start'\n ],\n [\n 'bottom end',\n 'bottom-end'\n ]\n ];\n var positionModeValues = [\n 'fixed',\n 'static',\n 'sticky',\n 'absolute'\n ];\n kendo.propertyToCssClassMap = {};\n kendo.registerCssClass = function (propName, value, shorthand) {\n if (!kendo.propertyToCssClassMap[propName]) {\n kendo.propertyToCssClassMap[propName] = {};\n }\n kendo.propertyToCssClassMap[propName][value] = shorthand || value;\n };\n kendo.registerCssClasses = function (propName, arr) {\n for (var i = 0; i < arr.length; i++) {\n if (isArray(arr[i])) {\n kendo.registerCssClass(propName, arr[i][0], arr[i][1]);\n } else {\n kendo.registerCssClass(propName, arr[i]);\n }\n }\n };\n kendo.getValidCssClass = function (prefix, propName, value) {\n var validValue = kendo.propertyToCssClassMap[propName][value];\n if (validValue) {\n return prefix + validValue;\n }\n };\n kendo.registerCssClasses('themeColor', themeColorValues);\n kendo.registerCssClasses('fill', fillValues);\n kendo.registerCssClasses('postition', postitionValues);\n kendo.registerCssClasses('shape', shapeValues);\n kendo.registerCssClasses('size', sizeValues);\n kendo.registerCssClasses('align', alignValues);\n kendo.registerCssClasses('positionMode', positionModeValues);\n kendo.whenAll = function (array) {\n var resolveValues = arguments.length == 1 && $.isArray(array) ? array : Array.prototype.slice.call(arguments), length = resolveValues.length, remaining = length, deferred = $.Deferred(), i = 0, failed = 0, rejectContexts = Array(length), rejectValues = Array(length), resolveContexts = Array(length), value;\n function updateFunc(index, contexts, values) {\n return function () {\n if (values != resolveValues) {\n failed++;\n }\n deferred.notifyWith(contexts[index] = this, values[index] = Array.prototype.slice.call(arguments));\n if (!--remaining) {\n deferred[(!failed ? 'resolve' : 'reject') + 'With'](contexts, values);\n }\n };\n }\n for (; i < length; i++) {\n if ((value = resolveValues[i]) && $.isFunction(value.promise)) {\n value.promise().done(updateFunc(i, resolveContexts, resolveValues)).fail(updateFunc(i, rejectContexts, rejectValues));\n } else {\n deferred.notifyWith(this, value);\n --remaining;\n }\n }\n if (!remaining) {\n deferred.resolveWith(resolveContexts, resolveValues);\n }\n return deferred.promise();\n };\n (function () {\n function postToProxy(dataURI, fileName, proxyURL, proxyTarget) {\n var form = $('
').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.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.data.odata', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'data.odata',\n name: 'OData',\n category: 'framework',\n depends: ['core'],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, extend = $.extend, NEWLINE = '\\r\\n', DOUBLELINE = '\\r\\n\\r\\n', isFunction = kendo.isFunction, odataFilters = {\n eq: 'eq',\n neq: 'ne',\n gt: 'gt',\n gte: 'ge',\n lt: 'lt',\n lte: 'le',\n contains: 'substringof',\n doesnotcontain: 'substringof',\n endswith: 'endswith',\n startswith: 'startswith',\n isnull: 'eq',\n isnotnull: 'ne',\n isnullorempty: 'eq',\n isnotnullorempty: 'ne',\n isempty: 'eq',\n isnotempty: 'ne'\n }, odataFiltersVersionFour = extend({}, odataFilters, { contains: 'contains' }), mappers = {\n pageSize: $.noop,\n page: $.noop,\n filter: function (params, filter, useVersionFour) {\n if (filter) {\n filter = toOdataFilter(filter, useVersionFour);\n if (filter) {\n params.$filter = filter;\n }\n }\n },\n sort: function (params, orderby) {\n var expr = $.map(orderby, function (value) {\n var order = value.field.replace(/\\./g, '/');\n if (value.dir === 'desc') {\n order += ' desc';\n }\n return order;\n }).join(',');\n if (expr) {\n params.$orderby = expr;\n }\n },\n skip: function (params, skip) {\n if (skip) {\n params.$skip = skip;\n }\n },\n take: function (params, take) {\n if (take) {\n params.$top = take;\n }\n }\n }, defaultDataType = { read: { dataType: 'jsonp' } };\n function toOdataFilter(filter, useOdataFour) {\n var result = [], logic = filter.logic || 'and', idx, length, field, type, format, operator, value, ignoreCase, filters = filter.filters;\n for (idx = 0, length = filters.length; idx < length; idx++) {\n filter = filters[idx];\n field = filter.field;\n value = filter.value;\n operator = filter.operator;\n if (filter.filters) {\n filter = toOdataFilter(filter, useOdataFour);\n } else {\n ignoreCase = filter.ignoreCase;\n field = field.replace(/\\./g, '/');\n filter = odataFilters[operator];\n if (useOdataFour) {\n filter = odataFiltersVersionFour[operator];\n }\n if (operator === 'isnullorempty') {\n filter = kendo.format('{0} {1} null or {0} {1} \\'\\'', field, filter);\n } else if (operator === 'isnotnullorempty') {\n filter = kendo.format('{0} {1} null and {0} {1} \\'\\'', field, filter);\n } else if (operator === 'isnull' || operator === 'isnotnull') {\n filter = kendo.format('{0} {1} null', field, filter);\n } else if (operator === 'isempty' || operator === 'isnotempty') {\n filter = kendo.format('{0} {1} \\'\\'', field, filter);\n } else if (filter && value !== undefined) {\n type = $.type(value);\n if (type === 'string') {\n format = '\\'{1}\\'';\n value = value.replace(/'/g, '\\'\\'');\n if (ignoreCase === true) {\n field = 'tolower(' + field + ')';\n }\n } else if (type === 'date') {\n if (useOdataFour) {\n format = '{1:yyyy-MM-ddTHH:mm:ss+00:00}';\n value = kendo.timezone.apply(value, 'Etc/UTC');\n } else {\n format = 'datetime\\'{1:yyyy-MM-ddTHH:mm:ss}\\'';\n }\n } else {\n format = '{1}';\n }\n if (filter.length > 3) {\n if (filter !== 'substringof') {\n format = '{0}({2},' + format + ')';\n } else {\n format = '{0}(' + format + ',{2})';\n if (operator === 'doesnotcontain') {\n if (useOdataFour) {\n format = '{0}({2},\\'{1}\\') eq -1';\n filter = 'indexof';\n } else {\n format += ' eq false';\n }\n }\n }\n } else {\n format = '{2} {0} ' + format;\n }\n filter = kendo.format(format, filter, value, field);\n }\n }\n result.push(filter);\n }\n filter = result.join(' ' + logic + ' ');\n if (result.length > 1) {\n filter = '(' + filter + ')';\n }\n return filter;\n }\n function stripMetadata(obj) {\n for (var name in obj) {\n if (name.indexOf('@odata') === 0) {\n delete obj[name];\n }\n }\n }\n function hex16() {\n return Math.floor((1 + Math.random()) * 65536).toString(16).substr(1);\n }\n function createBoundary(prefix) {\n return prefix + hex16() + '-' + hex16() + '-' + hex16();\n }\n function createDelimeter(boundary, close) {\n var result = NEWLINE + '--' + boundary;\n if (close) {\n result += '--';\n }\n return result;\n }\n function createCommand(transport, item, httpVerb, command) {\n var transportUrl = transport.options[command].url;\n var commandPrefix = kendo.format('{0} ', httpVerb);\n if (isFunction(transportUrl)) {\n return commandPrefix + transportUrl(item);\n } else {\n return commandPrefix + transportUrl;\n }\n }\n function getOperationHeader(changeset, changeId) {\n var header = '';\n header += createDelimeter(changeset, false);\n header += NEWLINE + 'Content-Type: application/http';\n header += NEWLINE + 'Content-Transfer-Encoding: binary';\n header += NEWLINE + 'Content-ID: ' + changeId;\n return header;\n }\n function getOperationContent(item) {\n var content = '';\n content += NEWLINE + 'Content-Type: application/json;odata=minimalmetadata';\n content += NEWLINE + 'Prefer: return=representation';\n content += DOUBLELINE + kendo.stringify(item);\n return content;\n }\n function getOperations(collection, changeset, changeId, command, transport, skipContent) {\n var requestBody = '';\n for (var i = 0; i < collection.length; i++) {\n requestBody += getOperationHeader(changeset, changeId);\n requestBody += DOUBLELINE + createCommand(transport, collection[i], transport.options[command].type, command) + ' HTTP/1.1';\n if (!skipContent) {\n requestBody += getOperationContent(collection[i]);\n }\n requestBody += NEWLINE;\n changeId++;\n }\n return requestBody;\n }\n function processCollection(colection, boundary, changeset, changeId, transport, command, skipContent) {\n var requestBody = '';\n requestBody += getBoundary(boundary, changeset);\n requestBody += getOperations(colection, changeset, changeId, command, transport, skipContent);\n requestBody += createDelimeter(changeset, true);\n requestBody += NEWLINE;\n return requestBody;\n }\n function getBoundary(boundary, changeset) {\n var requestBody = '';\n requestBody += '--' + boundary + NEWLINE;\n requestBody += 'Content-Type: multipart/mixed; boundary=' + changeset + NEWLINE;\n return requestBody;\n }\n function createBatchRequest(transport, colections) {\n var options = extend({}, transport.options.batch);\n var boundary = createBoundary('sf_batch_');\n var requestBody = '';\n var changeId = 0;\n var batchURL = transport.options.batch.url;\n var changeset = createBoundary('sf_changeset_');\n options.type = transport.options.batch.type;\n options.url = isFunction(batchURL) ? batchURL() : batchURL;\n options.headers = extend(options.headers || {}, { 'Content-Type': 'multipart/mixed; boundary=' + boundary });\n if (colections.updated.length) {\n requestBody += processCollection(colections.updated, boundary, changeset, changeId, transport, 'update', false);\n changeId += colections.updated.length;\n changeset = createBoundary('sf_changeset_');\n }\n if (colections.destroyed.length) {\n requestBody += processCollection(colections.destroyed, boundary, changeset, changeId, transport, 'destroy', true);\n changeId += colections.destroyed.length;\n changeset = createBoundary('sf_changeset_');\n }\n if (colections.created.length) {\n requestBody += processCollection(colections.created, boundary, changeset, changeId, transport, 'create', false);\n }\n requestBody += createDelimeter(boundary, true);\n options.data = requestBody;\n return options;\n }\n function parseBatchResponse(responseText) {\n var responseMarkers = responseText.match(/--changesetresponse_[a-z0-9-]+$/gm);\n var markerIndex = 0;\n var collections = [];\n var changeBody;\n var status;\n var code;\n var marker;\n var jsonModel;\n collections.push({\n models: [],\n passed: true\n });\n for (var i = 0; i < responseMarkers.length; i++) {\n marker = responseMarkers[i];\n if (marker.lastIndexOf('--', marker.length - 1)) {\n if (i < responseMarkers.length - 1) {\n collections.push({\n models: [],\n passed: true\n });\n }\n continue;\n }\n if (!markerIndex) {\n markerIndex = responseText.indexOf(marker);\n } else {\n markerIndex = responseText.indexOf(marker, markerIndex + marker.length);\n }\n changeBody = responseText.substring(markerIndex, responseText.indexOf('--', markerIndex + 1));\n status = changeBody.match(/^HTTP\\/1\\.\\d (\\d{3}) (.*)$/gm).pop();\n code = kendo.parseFloat(status.match(/\\d{3}/g).pop());\n if (code >= 200 && code <= 299) {\n jsonModel = changeBody.match(/\\{.*\\}/gm);\n if (jsonModel) {\n collections[collections.length - 1].models.push(JSON.parse(jsonModel[0]));\n }\n } else {\n collections[collections.length - 1].passed = false;\n }\n }\n return collections;\n }\n extend(true, kendo.data, {\n schemas: {\n odata: {\n type: 'json',\n data: function (data) {\n return data.d.results || [data.d];\n },\n total: 'd.__count'\n }\n },\n transports: {\n odata: {\n read: {\n cache: true,\n dataType: 'jsonp',\n jsonp: '$callback'\n },\n update: {\n cache: true,\n dataType: 'json',\n contentType: 'application/json',\n type: 'PUT'\n },\n create: {\n cache: true,\n dataType: 'json',\n contentType: 'application/json',\n type: 'POST'\n },\n destroy: {\n cache: true,\n dataType: 'json',\n type: 'DELETE'\n },\n parameterMap: function (options, type, useVersionFour) {\n var params, value, option, dataType;\n options = options || {};\n type = type || 'read';\n dataType = (this.options || defaultDataType)[type];\n dataType = dataType ? dataType.dataType : 'json';\n if (type === 'read') {\n params = { $inlinecount: 'allpages' };\n if (dataType != 'json') {\n params.$format = 'json';\n }\n for (option in options) {\n if (mappers[option]) {\n mappers[option](params, options[option], useVersionFour);\n } else {\n params[option] = options[option];\n }\n }\n } else {\n if (dataType !== 'json') {\n throw new Error('Only json dataType can be used for ' + type + ' operation.');\n }\n if (type !== 'destroy') {\n for (option in options) {\n value = options[option];\n if (typeof value === 'number') {\n options[option] = value + '';\n }\n }\n params = kendo.stringify(options);\n }\n }\n return params;\n }\n }\n }\n });\n extend(true, kendo.data, {\n schemas: {\n 'odata-v4': {\n type: 'json',\n data: function (data) {\n if ($.isArray(data)) {\n for (var i = 0; i < data.length; i++) {\n stripMetadata(data[i]);\n }\n return data;\n } else {\n data = $.extend({}, data);\n stripMetadata(data);\n if (data.value) {\n return data.value;\n }\n return [data];\n }\n },\n total: function (data) {\n return data['@odata.count'];\n }\n }\n },\n transports: {\n 'odata-v4': {\n batch: { type: 'POST' },\n read: {\n cache: true,\n dataType: 'json'\n },\n update: {\n cache: true,\n dataType: 'json',\n contentType: 'application/json;IEEE754Compatible=true',\n type: 'PUT'\n },\n create: {\n cache: true,\n dataType: 'json',\n contentType: 'application/json;IEEE754Compatible=true',\n type: 'POST'\n },\n destroy: {\n cache: true,\n dataType: 'json',\n type: 'DELETE'\n },\n parameterMap: function (options, type) {\n var result = kendo.data.transports.odata.parameterMap(options, type, true);\n if (type == 'read') {\n result.$count = true;\n delete result.$inlinecount;\n }\n if (result && result.$filter) {\n result.$filter = result.$filter.replace(/('[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}')/gi, function (x) {\n return x.substring(1, x.length - 1);\n });\n }\n return result;\n },\n submit: function (e) {\n var that = this;\n var options = createBatchRequest(that, e.data);\n var collections = e.data;\n if (!collections.updated.length && !collections.destroyed.length && !collections.created.length) {\n return;\n }\n $.ajax(extend(true, {}, {\n success: function (response) {\n var responses = parseBatchResponse(response);\n var index = 0;\n var current;\n if (collections.updated.length) {\n current = responses[index];\n if (current.passed) {\n e.success(current.models.length ? current.models : [], 'update');\n }\n index++;\n }\n if (collections.destroyed.length) {\n current = responses[index];\n if (current.passed) {\n e.success([], 'destroy');\n }\n index++;\n }\n if (collections.created.length) {\n current = responses[index];\n if (current.passed) {\n e.success(current.models, 'create');\n }\n }\n },\n error: function (response, status, error) {\n e.error(response, status, error);\n }\n }, options));\n }\n }\n }\n });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.data.xml', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'data.xml',\n name: 'XML',\n category: 'framework',\n depends: ['core'],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, isArray = $.isArray, isPlainObject = $.isPlainObject, map = $.map, each = $.each, extend = $.extend, getter = kendo.getter, Class = kendo.Class;\n var XmlDataReader = Class.extend({\n init: function (options) {\n var that = this, total = options.total, model = options.model, parse = options.parse, errors = options.errors, serialize = options.serialize, data = options.data;\n if (model) {\n if (isPlainObject(model)) {\n var base = options.modelBase || kendo.data.Model;\n if (model.fields) {\n each(model.fields, function (field, value) {\n if (isPlainObject(value) && value.field) {\n if (!$.isFunction(value.field)) {\n value = extend(value, { field: that.getter(value.field) });\n }\n } else {\n value = { field: that.getter(value) };\n }\n model.fields[field] = value;\n });\n }\n var id = model.id;\n if (id) {\n var idField = {};\n idField[that.xpathToMember(id, true)] = { field: that.getter(id) };\n model.fields = extend(idField, model.fields);\n model.id = that.xpathToMember(id);\n }\n model = base.define(model);\n }\n that.model = model;\n }\n if (total) {\n if (typeof total == 'string') {\n total = that.getter(total);\n that.total = function (data) {\n return parseInt(total(data), 10);\n };\n } else if (typeof total == 'function') {\n that.total = total;\n }\n }\n if (errors) {\n if (typeof errors == 'string') {\n errors = that.getter(errors);\n that.errors = function (data) {\n return errors(data) || null;\n };\n } else if (typeof errors == 'function') {\n that.errors = errors;\n }\n }\n if (data) {\n if (typeof data == 'string') {\n data = that.xpathToMember(data);\n that.data = function (value) {\n var result = that.evaluate(value, data), modelInstance;\n result = isArray(result) ? result : [result];\n if (that.model && model.fields) {\n modelInstance = new that.model();\n return map(result, function (value) {\n if (value) {\n var record = {}, field;\n for (field in model.fields) {\n record[field] = modelInstance._parse(field, model.fields[field].field(value));\n }\n return record;\n }\n });\n }\n return result;\n };\n } else if (typeof data == 'function') {\n that.data = data;\n }\n }\n if (typeof parse == 'function') {\n var xmlParse = that.parse;\n that.parse = function (data) {\n var xml = parse.call(that, data);\n return xmlParse.call(that, xml);\n };\n }\n if (typeof serialize == 'function') {\n that.serialize = serialize;\n }\n },\n total: function (result) {\n return this.data(result).length;\n },\n errors: function (data) {\n return data ? data.errors : null;\n },\n serialize: function (data) {\n return data;\n },\n parseDOM: function (element) {\n var result = {}, parsedNode, node, nodeType, nodeName, member, attribute, attributes = element.attributes, attributeCount = attributes.length, idx;\n for (idx = 0; idx < attributeCount; idx++) {\n attribute = attributes[idx];\n result['@' + attribute.nodeName] = attribute.nodeValue;\n }\n for (node = element.firstChild; node; node = node.nextSibling) {\n nodeType = node.nodeType;\n if (nodeType === 3 || nodeType === 4) {\n result['#text'] = node.nodeValue;\n } else if (nodeType === 1) {\n parsedNode = this.parseDOM(node);\n nodeName = node.nodeName;\n member = result[nodeName];\n if (isArray(member)) {\n member.push(parsedNode);\n } else if (member !== undefined) {\n member = [\n member,\n parsedNode\n ];\n } else {\n member = parsedNode;\n }\n result[nodeName] = member;\n }\n }\n return result;\n },\n evaluate: function (value, expression) {\n var members = expression.split('.'), member, result, length, intermediateResult, idx;\n while (member = members.shift()) {\n value = value[member];\n if (isArray(value)) {\n result = [];\n expression = members.join('.');\n for (idx = 0, length = value.length; idx < length; idx++) {\n intermediateResult = this.evaluate(value[idx], expression);\n intermediateResult = isArray(intermediateResult) ? intermediateResult : [intermediateResult];\n result.push.apply(result, intermediateResult);\n }\n return result;\n }\n }\n return value;\n },\n parse: function (xml) {\n var documentElement, tree, result = {};\n documentElement = xml.documentElement || $.parseXML(xml).documentElement;\n tree = this.parseDOM(documentElement);\n result[documentElement.nodeName] = tree;\n return result;\n },\n xpathToMember: function (member, raw) {\n if (!member) {\n return '';\n }\n member = member.replace(/^\\//, '').replace(/\\//g, '.');\n if (member.indexOf('@') >= 0) {\n return member.replace(/\\.?(@.*)/, raw ? '$1' : '[\"$1\"]');\n }\n if (member.indexOf('text()') >= 0) {\n return member.replace(/(\\.?text\\(\\))/, raw ? '#text' : '[\"#text\"]');\n }\n return member;\n },\n getter: function (member) {\n return getter(this.xpathToMember(member), true);\n }\n });\n $.extend(true, kendo.data, {\n XmlDataReader: XmlDataReader,\n readers: { xml: XmlDataReader }\n });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.data', [\n 'kendo.core',\n 'kendo.data.odata',\n 'kendo.data.xml'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'data',\n name: 'Data source',\n category: 'framework',\n description: 'Powerful component for using local and remote data.Fully supports CRUD, Sorting, Paging, Filtering, Grouping, and Aggregates.',\n depends: ['core'],\n features: [\n {\n id: 'data-odata',\n name: 'OData',\n description: 'Support for accessing Open Data Protocol (OData) services.',\n depends: ['data.odata']\n },\n {\n id: 'data-signalr',\n name: 'SignalR',\n description: 'Support for binding to SignalR hubs.',\n depends: ['data.signalr']\n },\n {\n id: 'data-XML',\n name: 'XML',\n description: 'Support for binding to XML.',\n depends: ['data.xml']\n }\n ]\n };\n (function ($, undefined) {\n var extend = $.extend, proxy = $.proxy, isPlainObject = $.isPlainObject, isEmptyObject = $.isEmptyObject, isArray = $.isArray, grep = $.grep, ajax = $.ajax, map, each = $.each, noop = $.noop, kendo = window.kendo, isFunction = kendo.isFunction, Observable = kendo.Observable, Class = kendo.Class, STRING = 'string', FUNCTION = 'function', ASCENDING = 'asc', CREATE = 'create', READ = 'read', UPDATE = 'update', DESTROY = 'destroy', CHANGE = 'change', SYNC = 'sync', GET = 'get', ERROR = 'error', REQUESTSTART = 'requestStart', PROGRESS = 'progress', REQUESTEND = 'requestEnd', crud = [\n CREATE,\n READ,\n UPDATE,\n DESTROY\n ], identity = function (o) {\n return o;\n }, getter = kendo.getter, stringify = kendo.stringify, math = Math, push = [].push, join = [].join, pop = [].pop, splice = [].splice, shift = [].shift, slice = [].slice, unshift = [].unshift, toString = {}.toString, stableSort = kendo.support.stableSort, dateRegExp = /^\\/Date\\((.*?)\\)\\/$/, objectKeys = [];\n var ObservableArray = Observable.extend({\n init: function (array, type) {\n var that = this;\n that.type = type || ObservableObject;\n Observable.fn.init.call(that);\n that.length = array.length;\n that.wrapAll(array, that);\n },\n at: function (index) {\n return this[index];\n },\n toJSON: function (serializeFunctions) {\n var idx, length = this.length, value, json = new Array(length);\n for (idx = 0; idx < length; idx++) {\n value = this[idx];\n if (value instanceof ObservableObject) {\n value = value.toJSON(serializeFunctions);\n }\n json[idx] = value;\n }\n return json;\n },\n parent: noop,\n wrapAll: function (source, target) {\n var that = this, idx, length, parent = function () {\n return that;\n };\n target = target || [];\n for (idx = 0, length = source.length; idx < length; idx++) {\n target[idx] = that.wrap(source[idx], parent);\n }\n return target;\n },\n wrap: function (object, parent) {\n var that = this, observable;\n if (object !== null && toString.call(object) === '[object Object]') {\n observable = object instanceof that.type || object instanceof Model;\n if (!observable) {\n object = object instanceof ObservableObject ? object.toJSON() : object;\n object = new that.type(object);\n }\n object.parent = parent;\n object.bind(CHANGE, function (e) {\n that.trigger(CHANGE, {\n field: e.field,\n node: e.node,\n index: e.index,\n items: e.items || [this],\n action: e.node ? e.action || 'itemloaded' : 'itemchange'\n });\n });\n }\n return object;\n },\n push: function () {\n var index = this.length, items = this.wrapAll(arguments), result;\n result = push.apply(this, items);\n if (!this.omitChangeEvent) {\n this.trigger(CHANGE, {\n action: 'add',\n index: index,\n items: items\n });\n }\n return result;\n },\n slice: slice,\n sort: [].sort,\n join: join,\n pop: function () {\n var length = this.length, result = pop.apply(this);\n if (length) {\n this.trigger(CHANGE, {\n action: 'remove',\n index: length - 1,\n items: [result]\n });\n }\n return result;\n },\n splice: function (index, howMany, item) {\n var items = this.wrapAll(slice.call(arguments, 2)), result, i, len;\n result = splice.apply(this, [\n index,\n howMany\n ].concat(items));\n if (result.length) {\n if (!this.omitChangeEvent) {\n this.trigger(CHANGE, {\n action: 'remove',\n index: index,\n items: result\n });\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 if (!this.omitChangeEvent) {\n this.trigger(CHANGE, {\n action: 'add',\n index: index,\n items: items\n });\n }\n }\n return result;\n },\n shift: function () {\n var length = this.length, result = shift.apply(this);\n if (length) {\n this.trigger(CHANGE, {\n action: 'remove',\n index: 0,\n items: [result]\n });\n }\n return result;\n },\n unshift: function () {\n var items = this.wrapAll(arguments), result;\n result = unshift.apply(this, items);\n this.trigger(CHANGE, {\n action: 'add',\n index: 0,\n items: items\n });\n return result;\n },\n indexOf: function (item) {\n var that = this, idx, length;\n for (idx = 0, length = that.length; idx < length; idx++) {\n if (that[idx] === item) {\n return idx;\n }\n }\n return -1;\n },\n forEach: function (callback, thisArg) {\n var idx = 0;\n var length = this.length;\n var context = thisArg || window;\n for (; idx < length; idx++) {\n callback.call(context, this[idx], idx, this);\n }\n },\n map: function (callback, thisArg) {\n var idx = 0;\n var result = [];\n var length = this.length;\n var context = thisArg || window;\n for (; idx < length; idx++) {\n result[idx] = callback.call(context, this[idx], idx, this);\n }\n return result;\n },\n reduce: function (callback) {\n var idx = 0, result, length = this.length;\n if (arguments.length == 2) {\n result = arguments[1];\n } else if (idx < length) {\n result = this[idx++];\n }\n for (; idx < length; idx++) {\n result = callback(result, this[idx], idx, this);\n }\n return result;\n },\n reduceRight: function (callback) {\n var idx = this.length - 1, result;\n if (arguments.length == 2) {\n result = arguments[1];\n } else if (idx > 0) {\n result = this[idx--];\n }\n for (; idx >= 0; idx--) {\n result = callback(result, this[idx], idx, this);\n }\n return result;\n },\n filter: function (callback, thisArg) {\n var idx = 0;\n var result = [];\n var item;\n var length = this.length;\n var context = thisArg || window;\n for (; idx < length; idx++) {\n item = this[idx];\n if (callback.call(context, item, idx, this)) {\n result[result.length] = item;\n }\n }\n return result;\n },\n find: function (callback, thisArg) {\n var idx = 0;\n var item;\n var length = this.length;\n var context = thisArg || window;\n for (; idx < length; idx++) {\n item = this[idx];\n if (callback.call(context, item, idx, this)) {\n return item;\n }\n }\n },\n every: function (callback, thisArg) {\n var idx = 0;\n var item;\n var length = this.length;\n var context = thisArg || window;\n for (; idx < length; idx++) {\n item = this[idx];\n if (!callback.call(context, item, idx, this)) {\n return false;\n }\n }\n return true;\n },\n some: function (callback, thisArg) {\n var idx = 0;\n var item;\n var length = this.length;\n var context = thisArg || window;\n for (; idx < length; idx++) {\n item = this[idx];\n if (callback.call(context, item, idx, this)) {\n return true;\n }\n }\n return false;\n },\n remove: function (item) {\n var idx = this.indexOf(item);\n if (idx !== -1) {\n this.splice(idx, 1);\n }\n },\n empty: function () {\n this.splice(0, this.length);\n }\n });\n if (typeof Symbol !== 'undefined' && Symbol.iterator && !ObservableArray.prototype[Symbol.iterator]) {\n ObservableArray.prototype[Symbol.iterator] = [][Symbol.iterator];\n }\n var LazyObservableArray = ObservableArray.extend({\n init: function (data, type, events) {\n Observable.fn.init.call(this);\n this.type = type || ObservableObject;\n if (events) {\n this._events = events;\n }\n for (var idx = 0; idx < data.length; idx++) {\n this[idx] = data[idx];\n }\n this.length = idx;\n this._parent = proxy(function () {\n return this;\n }, this);\n },\n at: function (index) {\n var item = this[index];\n if (!(item instanceof this.type)) {\n item = this[index] = this.wrap(item, this._parent);\n } else {\n item.parent = this._parent;\n }\n return item;\n }\n });\n function eventHandler(context, type, field, prefix) {\n return function (e) {\n var event = {}, key;\n for (key in e) {\n event[key] = e[key];\n }\n if (prefix) {\n event.field = field + '.' + e.field;\n } else {\n event.field = field;\n }\n if (type == CHANGE && context._notifyChange) {\n context._notifyChange(event);\n }\n context.trigger(type, event);\n };\n }\n function ownKeys(value, ignoreObjectKeys) {\n var props = [];\n var keys, filteredObjectKeys;\n value = value || {};\n keys = Object.getOwnPropertyNames(value);\n filteredObjectKeys = objectKeys.filter(function (key) {\n return keys.indexOf(key) < 0;\n });\n while (value) {\n Object.getOwnPropertyNames(value).forEach(function (prop) {\n if (props.indexOf(prop) === -1 && (!ignoreObjectKeys || filteredObjectKeys.indexOf(prop) < 0)) {\n props.push(prop);\n }\n });\n value = Object.getPrototypeOf(value);\n }\n return props;\n }\n objectKeys = ownKeys({}, false);\n var ObservableObject = Observable.extend({\n init: function (value) {\n var that = this, member, keys = ownKeys(value, true), parent = function () {\n return that;\n };\n Observable.fn.init.call(this);\n this._handlers = {};\n keys.forEach(function (field) {\n member = value[field];\n if (typeof member === 'object' && member && !member.getTime && field.charAt(0) != '_') {\n member = that.wrap(member, field, parent);\n }\n that[field] = member;\n });\n that.uid = kendo.guid();\n },\n shouldSerialize: function (field, serializeFunctions) {\n return this.hasOwnProperty(field) && field !== '_handlers' && field !== '_events' && (serializeFunctions && serializeFunctions[field] || typeof this[field] !== FUNCTION) && field !== 'uid';\n },\n forEach: function (f) {\n for (var i in this) {\n if (this.shouldSerialize(i)) {\n f(this[i], i);\n }\n }\n },\n toJSON: function (serializeFunctions) {\n var result = {}, value, field;\n for (field in this) {\n if (this.shouldSerialize(field, serializeFunctions)) {\n value = this[field];\n if (value instanceof ObservableObject || value instanceof ObservableArray) {\n value = value.toJSON(serializeFunctions);\n }\n result[field] = value;\n }\n }\n return result;\n },\n get: function (field) {\n var that = this, result;\n that.trigger(GET, { field: field });\n if (field === 'this') {\n result = that;\n } else {\n result = kendo.getter(field, true)(that);\n }\n return result;\n },\n _set: function (field, value) {\n var that = this;\n var composite = field.indexOf('.') >= 0;\n if (composite) {\n var paths = field.split('.'), path = '';\n while (paths.length > 1) {\n path += paths.shift();\n var obj = kendo.getter(path, true)(that);\n if (obj instanceof ObservableObject) {\n obj.set(paths.join('.'), value);\n return composite;\n }\n path += '.';\n }\n }\n kendo.setter(field)(that, value);\n return composite;\n },\n set: function (field, value) {\n var that = this, isSetPrevented = false, composite = field.indexOf('.') >= 0, current = kendo.getter(field, true)(that);\n if (current !== value) {\n if (current instanceof Observable && this._handlers[field]) {\n if (this._handlers[field].get) {\n current.unbind(GET, this._handlers[field].get);\n }\n current.unbind(CHANGE, this._handlers[field].change);\n }\n isSetPrevented = that.trigger('set', {\n field: field,\n value: value\n });\n if (!isSetPrevented) {\n if (!composite) {\n value = that.wrap(value, field, function () {\n return that;\n });\n }\n if (!that._set(field, value) || field.indexOf('(') >= 0 || field.indexOf('[') >= 0) {\n that.trigger(CHANGE, { field: field });\n }\n }\n }\n return isSetPrevented;\n },\n parent: noop,\n wrap: function (object, field, parent) {\n var that = this;\n var get;\n var change;\n var type = toString.call(object);\n if (object != null && (type === '[object Object]' || type === '[object Array]')) {\n var isObservableArray = object instanceof ObservableArray;\n var isDataSource = object instanceof DataSource;\n if (type === '[object Object]' && !isDataSource && !isObservableArray) {\n if (!(object instanceof ObservableObject)) {\n object = new ObservableObject(object);\n }\n get = eventHandler(that, GET, field, true);\n object.bind(GET, get);\n change = eventHandler(that, CHANGE, field, true);\n object.bind(CHANGE, change);\n that._handlers[field] = {\n get: get,\n change: change\n };\n } else if (type === '[object Array]' || isObservableArray || isDataSource) {\n if (!isObservableArray && !isDataSource) {\n object = new ObservableArray(object);\n }\n change = eventHandler(that, CHANGE, field, false);\n object.bind(CHANGE, change);\n that._handlers[field] = { change: change };\n }\n object.parent = parent;\n }\n return object;\n }\n });\n function equal(x, y) {\n if (x === y) {\n return true;\n }\n var xtype = $.type(x), ytype = $.type(y), field;\n if (xtype !== ytype) {\n return false;\n }\n if (xtype === 'date') {\n return x.getTime() === y.getTime();\n }\n if (xtype !== 'object' && xtype !== 'array') {\n return false;\n }\n for (field in x) {\n if (!equal(x[field], y[field])) {\n return false;\n }\n }\n return true;\n }\n var parsers = {\n 'number': function (value) {\n if (typeof value === STRING && value.toLowerCase() === 'null') {\n return null;\n }\n return kendo.parseFloat(value);\n },\n 'date': function (value) {\n if (typeof value === STRING && value.toLowerCase() === 'null') {\n return null;\n }\n return kendo.parseDate(value);\n },\n 'boolean': function (value) {\n if (typeof value === STRING) {\n if (value.toLowerCase() === 'null') {\n return null;\n } else {\n return value.toLowerCase() === 'true';\n }\n }\n return value != null ? !!value : value;\n },\n 'string': function (value) {\n if (typeof value === STRING && value.toLowerCase() === 'null') {\n return null;\n }\n return value != null ? value + '' : value;\n },\n 'default': function (value) {\n return value;\n }\n };\n var defaultValues = {\n 'string': '',\n 'number': 0,\n 'date': new Date(),\n 'boolean': false,\n 'default': ''\n };\n function getFieldByName(obj, name) {\n var field, fieldName;\n for (fieldName in obj) {\n field = obj[fieldName];\n if (isPlainObject(field) && field.field && field.field === name) {\n return field;\n } else if (field === name) {\n return field;\n }\n }\n return null;\n }\n var Model = ObservableObject.extend({\n init: function (data) {\n var that = this;\n if (!data || $.isEmptyObject(data)) {\n data = $.extend({}, that.defaults, data);\n if (that._initializers) {\n for (var idx = 0; idx < that._initializers.length; idx++) {\n var name = that._initializers[idx];\n data[name] = that.defaults[name]();\n }\n }\n }\n ObservableObject.fn.init.call(that, data);\n that.dirty = false;\n that.dirtyFields = {};\n if (that.idField) {\n that.id = that.get(that.idField);\n if (that.id === undefined) {\n that.id = that._defaultId;\n }\n }\n },\n shouldSerialize: function (field) {\n return ObservableObject.fn.shouldSerialize.call(this, field) && field !== 'uid' && !(this.idField !== 'id' && field === 'id') && field !== 'dirty' && field !== 'dirtyFields' && field !== '_accessors';\n },\n _parse: function (field, value) {\n var that = this, fieldName = field, fields = that.fields || {}, parse;\n field = fields[field];\n if (!field) {\n field = getFieldByName(fields, fieldName);\n }\n if (field) {\n parse = field.parse;\n if (!parse && field.type) {\n parse = parsers[field.type.toLowerCase()];\n }\n }\n return parse ? parse(value) : value;\n },\n _notifyChange: function (e) {\n var action = e.action;\n if (action == 'add' || action == 'remove') {\n this.dirty = true;\n this.dirtyFields[e.field] = true;\n }\n },\n editable: function (field) {\n field = (this.fields || {})[field];\n return field ? field.editable !== false : true;\n },\n set: function (field, value) {\n var that = this;\n var dirty = that.dirty;\n if (that.editable(field)) {\n value = that._parse(field, value);\n if (!equal(value, that.get(field))) {\n that.dirty = true;\n that.dirtyFields[field] = true;\n if (ObservableObject.fn.set.call(that, field, value) && !dirty) {\n that.dirty = dirty;\n if (!that.dirty) {\n that.dirtyFields[field] = false;\n }\n }\n } else {\n that.trigger('equalSet', {\n field: field,\n value: value\n });\n }\n }\n },\n accept: function (data) {\n var that = this, parent = function () {\n return that;\n }, field;\n for (field in data) {\n var value = data[field];\n if (field.charAt(0) != '_') {\n value = that.wrap(data[field], field, parent);\n }\n that._set(field, value);\n }\n if (that.idField) {\n that.id = that.get(that.idField);\n }\n that.dirty = false;\n that.dirtyFields = {};\n },\n isNew: function () {\n return this.id === this._defaultId;\n }\n });\n Model.define = function (base, options) {\n if (options === undefined) {\n options = base;\n base = Model;\n }\n var model, proto = extend({ defaults: {} }, options), name, field, type, value, idx, length, fields = {}, originalName, id = proto.id, functionFields = [];\n if (id) {\n proto.idField = id;\n }\n if (proto.id) {\n delete proto.id;\n }\n if (id) {\n proto.defaults[id] = proto._defaultId = '';\n }\n if (toString.call(proto.fields) === '[object Array]') {\n for (idx = 0, length = proto.fields.length; idx < length; idx++) {\n field = proto.fields[idx];\n if (typeof field === STRING) {\n fields[field] = {};\n } else if (field.field) {\n fields[field.field] = field;\n }\n }\n proto.fields = fields;\n }\n for (name in proto.fields) {\n field = proto.fields[name];\n type = field.type || 'default';\n value = null;\n originalName = name;\n name = typeof field.field === STRING ? field.field : name;\n if (!field.nullable) {\n value = proto.defaults[originalName !== name ? originalName : name] = field.defaultValue !== undefined ? field.defaultValue : defaultValues[type.toLowerCase()];\n if (typeof value === 'function') {\n functionFields.push(name);\n }\n }\n if (options.id === name) {\n proto._defaultId = value;\n }\n proto.defaults[originalName !== name ? originalName : name] = value;\n field.parse = field.parse || parsers[type];\n }\n if (functionFields.length > 0) {\n proto._initializers = functionFields;\n }\n model = base.extend(proto);\n model.define = function (options) {\n return Model.define(model, options);\n };\n if (proto.fields) {\n model.fields = proto.fields;\n model.idField = proto.idField;\n }\n return model;\n };\n var Comparer = {\n selector: function (field) {\n return isFunction(field) ? field : getter(field);\n },\n compare: function (field) {\n var selector = this.selector(field);\n return function (a, b) {\n a = selector(a);\n b = selector(b);\n if (a == null && b == null) {\n return 0;\n }\n if (a == null) {\n return -1;\n }\n if (b == null) {\n return 1;\n }\n if (a.localeCompare) {\n return a.localeCompare(b);\n }\n return a > b ? 1 : a < b ? -1 : 0;\n };\n },\n create: function (sort) {\n var compare = sort.compare || this.compare(sort.field);\n if (sort.dir == 'desc') {\n return function (a, b) {\n return compare(b, a, true);\n };\n }\n return compare;\n },\n combine: function (comparers) {\n return function (a, b) {\n var result = comparers[0](a, b), idx, length;\n for (idx = 1, length = comparers.length; idx < length; idx++) {\n result = result || comparers[idx](a, b);\n }\n return result;\n };\n }\n };\n var StableComparer = extend({}, Comparer, {\n asc: function (field) {\n var selector = this.selector(field);\n return function (a, b) {\n var valueA = selector(a);\n var valueB = selector(b);\n if (valueA && valueA.getTime && valueB && valueB.getTime) {\n valueA = valueA.getTime();\n valueB = valueB.getTime();\n }\n if (valueA === valueB) {\n return a.__position - b.__position;\n }\n if (valueA == null) {\n return -1;\n }\n if (valueB == null) {\n return 1;\n }\n if (valueA.localeCompare) {\n return valueA.localeCompare(valueB);\n }\n return valueA > valueB ? 1 : -1;\n };\n },\n desc: function (field) {\n var selector = this.selector(field);\n return function (a, b) {\n var valueA = selector(a);\n var valueB = selector(b);\n if (valueA && valueA.getTime && valueB && valueB.getTime) {\n valueA = valueA.getTime();\n valueB = valueB.getTime();\n }\n if (valueA === valueB) {\n return a.__position - b.__position;\n }\n if (valueA == null) {\n return 1;\n }\n if (valueB == null) {\n return -1;\n }\n if (valueB.localeCompare) {\n return valueB.localeCompare(valueA);\n }\n return valueA < valueB ? 1 : -1;\n };\n },\n create: function (sort) {\n return this[sort.dir](sort.field);\n }\n });\n map = function (array, callback) {\n var idx, length = array.length, result = new Array(length);\n for (idx = 0; idx < length; idx++) {\n result[idx] = callback(array[idx], idx, array);\n }\n return result;\n };\n var operators = function () {\n function quote(str) {\n if (typeof str == 'string') {\n str = str.replace(/[\\r\\n]+/g, '');\n }\n return JSON.stringify(str);\n }\n function textOp(impl) {\n return function (a, b, ignore, accentFoldingFiltering) {\n b += '';\n if (ignore) {\n a = '(' + a + ' + \\'\\').toString()' + (accentFoldingFiltering ? '.toLocaleLowerCase(\\'' + accentFoldingFiltering + '\\')' : '.toLowerCase()');\n b = accentFoldingFiltering ? b.toLocaleLowerCase(accentFoldingFiltering) : b.toLowerCase();\n }\n return impl(a, quote(b), ignore);\n };\n }\n function operator(op, a, b, ignore, accentFoldingFiltering) {\n if (b != null) {\n if (typeof b === STRING) {\n var date = dateRegExp.exec(b);\n if (date) {\n b = new Date(+date[1]);\n } else if (ignore) {\n b = quote(accentFoldingFiltering ? b.toLocaleLowerCase(accentFoldingFiltering) : b.toLowerCase());\n a = '((' + a + ' || \\'\\')+\\'\\')' + (accentFoldingFiltering ? '.toLocaleLowerCase(\\'' + accentFoldingFiltering + '\\')' : '.toLowerCase()');\n } else {\n b = quote(b);\n }\n }\n if (b.getTime) {\n a = '(' + a + '&&' + a + '.getTime?' + a + '.getTime():' + a + ')';\n b = b.getTime();\n }\n }\n return a + ' ' + op + ' ' + b;\n }\n function getMatchRegexp(pattern) {\n for (var rx = '/^', esc = false, i = 0; i < pattern.length; ++i) {\n var ch = pattern.charAt(i);\n if (esc) {\n rx += '\\\\' + ch;\n } else if (ch == '~') {\n esc = true;\n continue;\n } else if (ch == '*') {\n rx += '.*';\n } else if (ch == '?') {\n rx += '.';\n } else if ('.+^$()[]{}|\\\\/\\n\\r\\u2028\\u2029\\xA0'.indexOf(ch) >= 0) {\n rx += '\\\\' + ch;\n } else {\n rx += ch;\n }\n esc = false;\n }\n return rx + '$/';\n }\n return {\n quote: function (value) {\n if (value && value.getTime) {\n return 'new Date(' + value.getTime() + ')';\n }\n return quote(value);\n },\n eq: function (a, b, ignore, accentFoldingFiltering) {\n return operator('==', a, b, ignore, accentFoldingFiltering);\n },\n neq: function (a, b, ignore, accentFoldingFiltering) {\n return operator('!=', a, b, ignore, accentFoldingFiltering);\n },\n gt: function (a, b, ignore) {\n return operator('>', a, b, ignore);\n },\n gte: function (a, b, ignore) {\n return operator('>=', a, b, ignore);\n },\n lt: function (a, b, ignore) {\n return operator('<', a, b, ignore);\n },\n lte: function (a, b, ignore) {\n return operator('<=', a, b, ignore);\n },\n startswith: textOp(function (a, b) {\n return a + '.lastIndexOf(' + b + ', 0) == 0';\n }),\n doesnotstartwith: textOp(function (a, b) {\n return a + '.lastIndexOf(' + b + ', 0) == -1';\n }),\n endswith: textOp(function (a, b) {\n var n = b ? b.length - 2 : 0;\n return a + '.indexOf(' + b + ', ' + a + '.length - ' + n + ') >= 0';\n }),\n doesnotendwith: textOp(function (a, b) {\n var n = b ? b.length - 2 : 0;\n return a + '.indexOf(' + b + ', ' + a + '.length - ' + n + ') < 0';\n }),\n contains: textOp(function (a, b) {\n return a + '.indexOf(' + b + ') >= 0';\n }),\n doesnotcontain: textOp(function (a, b) {\n return a + '.indexOf(' + b + ') == -1';\n }),\n matches: textOp(function (a, b) {\n b = b.substring(1, b.length - 1);\n return getMatchRegexp(b) + '.test(' + a + ')';\n }),\n doesnotmatch: textOp(function (a, b) {\n b = b.substring(1, b.length - 1);\n return '!' + getMatchRegexp(b) + '.test(' + a + ')';\n }),\n isempty: function (a) {\n return a + ' === \\'\\'';\n },\n isnotempty: function (a) {\n return a + ' !== \\'\\'';\n },\n isnull: function (a) {\n return '(' + a + ' == null)';\n },\n isnotnull: function (a) {\n return '(' + a + ' != null)';\n },\n isnullorempty: function (a) {\n return '(' + a + ' === null) || (' + a + ' === \\'\\')';\n },\n isnotnullorempty: function (a) {\n return '(' + a + ' !== null) && (' + a + ' !== \\'\\')';\n }\n };\n }();\n function Query(data) {\n this.data = data || [];\n }\n Query.filterExpr = function (expression) {\n var expressions = [], logic = {\n and: ' && ',\n or: ' || '\n }, idx, length, filter, expr, fieldFunctions = [], operatorFunctions = [], field, operator, filters = expression.filters;\n for (idx = 0, length = filters.length; idx < length; idx++) {\n filter = filters[idx];\n field = filter.field;\n operator = filter.operator;\n if (filter.filters) {\n expr = Query.filterExpr(filter);\n filter = expr.expression.replace(/__o\\[(\\d+)\\]/g, function (match, index) {\n index = +index;\n return '__o[' + (operatorFunctions.length + index) + ']';\n }).replace(/__f\\[(\\d+)\\]/g, function (match, index) {\n index = +index;\n return '__f[' + (fieldFunctions.length + index) + ']';\n });\n operatorFunctions.push.apply(operatorFunctions, expr.operators);\n fieldFunctions.push.apply(fieldFunctions, expr.fields);\n } else {\n if (typeof field === FUNCTION) {\n expr = '__f[' + fieldFunctions.length + '](d)';\n fieldFunctions.push(field);\n } else {\n expr = kendo.expr(field);\n }\n if (typeof operator === FUNCTION) {\n filter = '__o[' + operatorFunctions.length + '](' + expr + ', ' + operators.quote(filter.value) + ')';\n operatorFunctions.push(operator);\n } else {\n filter = operators[(operator || 'eq').toLowerCase()](expr, filter.value, filter.ignoreCase !== undefined ? filter.ignoreCase : true, expression.accentFoldingFiltering);\n }\n }\n expressions.push(filter);\n }\n return {\n expression: '(' + expressions.join(logic[expression.logic]) + ')',\n fields: fieldFunctions,\n operators: operatorFunctions\n };\n };\n function normalizeSort(field, dir) {\n if (field) {\n var descriptor = typeof field === STRING ? {\n field: field,\n dir: dir\n } : field, descriptors = isArray(descriptor) ? descriptor : descriptor !== undefined ? [descriptor] : [];\n return grep(descriptors, function (d) {\n return !!d.dir;\n });\n }\n }\n function sortFields(sorts, dir) {\n var sortObject = {};\n if (sorts) {\n var descriptor = typeof sorts === STRING ? {\n field: sorts,\n dir: dir\n } : sorts, descriptors = isArray(descriptor) ? descriptor : descriptor !== undefined ? [descriptor] : [];\n for (var i = 0; i < descriptors.length; i++) {\n sortObject[descriptors[i].field] = {\n dir: descriptors[i].dir,\n index: i + 1\n };\n }\n }\n return sortObject;\n }\n var operatorMap = {\n '==': 'eq',\n equals: 'eq',\n isequalto: 'eq',\n equalto: 'eq',\n equal: 'eq',\n '!=': 'neq',\n ne: 'neq',\n notequals: 'neq',\n isnotequalto: 'neq',\n notequalto: 'neq',\n notequal: 'neq',\n '<': 'lt',\n islessthan: 'lt',\n lessthan: 'lt',\n less: 'lt',\n '<=': 'lte',\n le: 'lte',\n islessthanorequalto: 'lte',\n lessthanequal: 'lte',\n '>': 'gt',\n isgreaterthan: 'gt',\n greaterthan: 'gt',\n greater: 'gt',\n '>=': 'gte',\n isgreaterthanorequalto: 'gte',\n greaterthanequal: 'gte',\n ge: 'gte',\n notsubstringof: 'doesnotcontain',\n isnull: 'isnull',\n isempty: 'isempty',\n isnotempty: 'isnotempty'\n };\n function normalizeOperator(expression) {\n var idx, length, filter, operator, filters = expression.filters;\n if (filters) {\n for (idx = 0, length = filters.length; idx < length; idx++) {\n filter = filters[idx];\n operator = filter.operator;\n if (operator && typeof operator === STRING) {\n filter.operator = operatorMap[operator.toLowerCase()] || operator;\n }\n normalizeOperator(filter);\n }\n }\n }\n function normalizeFilter(expression) {\n if (expression && !isEmptyObject(expression)) {\n if (isArray(expression) || !expression.filters) {\n expression = {\n logic: 'and',\n filters: isArray(expression) ? expression : [expression]\n };\n }\n normalizeOperator(expression);\n return expression;\n }\n }\n Query.normalizeFilter = normalizeFilter;\n function compareDescriptor(f1, f2) {\n if (f1.logic || f2.logic) {\n return false;\n }\n return f1.field === f2.field && f1.value === f2.value && f1.operator === f2.operator;\n }\n function normalizeDescriptor(filter) {\n filter = filter || {};\n if (isEmptyObject(filter)) {\n return {\n logic: 'and',\n filters: []\n };\n }\n return normalizeFilter(filter);\n }\n function fieldComparer(a, b) {\n if (b.logic || a.field > b.field) {\n return 1;\n } else if (a.field < b.field) {\n return -1;\n } else {\n return 0;\n }\n }\n function compareFilters(expr1, expr2) {\n expr1 = normalizeDescriptor(expr1);\n expr2 = normalizeDescriptor(expr2);\n if (expr1.logic !== expr2.logic) {\n return false;\n }\n var f1, f2;\n var filters1 = (expr1.filters || []).slice();\n var filters2 = (expr2.filters || []).slice();\n if (filters1.length !== filters2.length) {\n return false;\n }\n filters1 = filters1.sort(fieldComparer);\n filters2 = filters2.sort(fieldComparer);\n for (var idx = 0; idx < filters1.length; idx++) {\n f1 = filters1[idx];\n f2 = filters2[idx];\n if (f1.logic && f2.logic) {\n if (!compareFilters(f1, f2)) {\n return false;\n }\n } else if (!compareDescriptor(f1, f2)) {\n return false;\n }\n }\n return true;\n }\n Query.compareFilters = compareFilters;\n function normalizeAggregate(expressions) {\n return isArray(expressions) ? expressions : [expressions];\n }\n function normalizeGroup(field, dir, compare, skipItemSorting) {\n var descriptor = typeof field === STRING ? {\n field: field,\n dir: dir,\n compare: compare,\n skipItemSorting: skipItemSorting\n } : field, descriptors = isArray(descriptor) ? descriptor : descriptor !== undefined ? [descriptor] : [];\n return map(descriptors, function (d) {\n return {\n field: d.field,\n dir: d.dir || 'asc',\n aggregates: d.aggregates,\n compare: d.compare,\n skipItemSorting: d.skipItemSorting\n };\n });\n }\n function normalizeGroupWithoutCompare(field, dir, compare) {\n var descriptors = normalizeGroup(field, dir, compare);\n for (var i = 0; i < descriptors.length; i++) {\n delete descriptors[i].compare;\n }\n return descriptors;\n }\n function anyGroupDescriptorHasCompare(groupDescriptors) {\n var descriptors = isArray(groupDescriptors) ? groupDescriptors : [groupDescriptors];\n for (var i = 0; i < descriptors.length; i++) {\n if (descriptors[i] && isFunction(descriptors[i].compare)) {\n return true;\n }\n }\n return false;\n }\n Query.prototype = {\n toArray: function () {\n return this.data;\n },\n range: function (index, count) {\n return new Query(this.data.slice(index, index + count));\n },\n skip: function (count) {\n return new Query(this.data.slice(count));\n },\n take: function (count) {\n return new Query(this.data.slice(0, count));\n },\n select: function (selector) {\n return new Query(map(this.data, selector));\n },\n order: function (selector, dir, inPlace) {\n var sort = { dir: dir };\n if (selector) {\n if (selector.compare) {\n sort.compare = selector.compare;\n } else {\n sort.field = selector;\n }\n }\n if (inPlace) {\n return new Query(this.data.sort(Comparer.create(sort)));\n }\n return new Query(this.data.slice(0).sort(Comparer.create(sort)));\n },\n orderBy: function (selector, inPlace) {\n return this.order(selector, 'asc', inPlace);\n },\n orderByDescending: function (selector, inPlace) {\n return this.order(selector, 'desc', inPlace);\n },\n sort: function (field, dir, comparer, inPlace) {\n var idx, length, descriptors = normalizeSort(field, dir), comparers = [];\n comparer = comparer || Comparer;\n if (descriptors.length) {\n for (idx = 0, length = descriptors.length; idx < length; idx++) {\n comparers.push(comparer.create(descriptors[idx]));\n }\n return this.orderBy({ compare: comparer.combine(comparers) }, inPlace);\n }\n return this;\n },\n filter: function (expressions) {\n var idx, current, length, compiled, predicate, data = this.data, fields, operators, result = [], filter;\n expressions = normalizeFilter(expressions);\n if (!expressions || expressions.filters.length === 0) {\n return this;\n }\n compiled = Query.filterExpr(expressions);\n fields = compiled.fields;\n operators = compiled.operators;\n predicate = filter = new Function('d, __f, __o', 'return ' + compiled.expression);\n if (fields.length || operators.length) {\n filter = function (d) {\n return predicate(d, fields, operators);\n };\n }\n for (idx = 0, length = data.length; idx < length; idx++) {\n current = data[idx];\n if (filter(current)) {\n result.push(current);\n }\n }\n return new Query(result);\n },\n group: function (descriptors, allData, options) {\n descriptors = normalizeGroup(descriptors || []);\n allData = allData || this.data;\n var that = this, result = new Query(that.data), descriptor;\n if (descriptors.length > 0) {\n descriptor = descriptors[0];\n if (options && options.groupPaging) {\n result = new Query(allData).groupAllData(descriptor, allData).select(function (group) {\n var data = new Query(allData).filter([{\n field: group.field,\n operator: 'eq',\n value: group.value,\n ignoreCase: false\n }]);\n var items = descriptors.length > 1 ? new Query(group.items).group(descriptors.slice(1), data.toArray(), options).toArray() : group.items;\n return {\n field: group.field,\n value: group.value,\n hasSubgroups: descriptors.length > 1,\n items: items,\n aggregates: data.aggregate(descriptor.aggregates),\n uid: kendo.guid(),\n itemCount: items.length,\n subgroupCount: items.length\n };\n });\n } else {\n result = result.groupBy(descriptor).select(function (group) {\n var data = new Query(allData).filter([{\n field: group.field,\n operator: 'eq',\n value: group.value,\n ignoreCase: false\n }]);\n return {\n field: group.field,\n value: group.value,\n items: descriptors.length > 1 ? new Query(group.items).group(descriptors.slice(1), data.toArray()).toArray() : group.items,\n hasSubgroups: descriptors.length > 1,\n aggregates: data.aggregate(descriptor.aggregates)\n };\n });\n }\n }\n return result;\n },\n groupBy: function (descriptor) {\n var that = this;\n if (isEmptyObject(descriptor) || !this.data.length) {\n return new Query([]);\n }\n var field = descriptor.field, sorted = descriptor.skipItemSorting ? this.data : this._sortForGrouping(field, descriptor.dir || 'asc'), accessor = kendo.accessor(field), item, groupValue = accessor.get(sorted[0], field), group = {\n field: field,\n value: groupValue,\n items: []\n }, currentValue, idx, len, result = [group];\n for (idx = 0, len = sorted.length; idx < len; idx++) {\n item = sorted[idx];\n currentValue = accessor.get(item, field);\n if (!groupValueComparer(groupValue, currentValue)) {\n groupValue = currentValue;\n group = {\n field: field,\n value: groupValue,\n items: []\n };\n result.push(group);\n }\n group.items.push(item);\n }\n result = that._sortGroups(result, descriptor);\n return new Query(result);\n },\n groupAllData: function (descriptor, allData) {\n if (isEmptyObject(descriptor) || this.data && !this.data.length) {\n return new Query([]);\n }\n var field = descriptor.field, sorted = descriptor.skipItemSorting ? allData : new Query(allData).sort(field, descriptor.dir || 'asc', StableComparer).toArray(), accessor = kendo.accessor(field), item, groupValue = accessor.get(sorted[0], field), group = {\n field: field,\n value: groupValue,\n items: []\n }, currentValue, idx, len, result = [group];\n for (idx = 0, len = sorted.length; idx < len; idx++) {\n item = sorted[idx];\n currentValue = accessor.get(item, field);\n if (!groupValueComparer(groupValue, currentValue)) {\n groupValue = currentValue;\n group = {\n field: field,\n value: groupValue,\n items: []\n };\n result.push(group);\n }\n group.items.push(item);\n }\n result = this._sortGroups(result, descriptor);\n return new Query(result);\n },\n _sortForGrouping: function (field, dir) {\n var idx, length, data = this.data;\n if (!stableSort) {\n for (idx = 0, length = data.length; idx < length; idx++) {\n data[idx].__position = idx;\n }\n data = new Query(data).sort(field, dir, StableComparer).toArray();\n for (idx = 0, length = data.length; idx < length; idx++) {\n delete data[idx].__position;\n }\n return data;\n }\n return this.sort(field, dir).toArray();\n },\n _sortGroups: function (groups, descriptor) {\n var result = groups;\n if (descriptor && isFunction(descriptor.compare)) {\n result = new Query(result).order({ compare: descriptor.compare }, descriptor.dir || ASCENDING).toArray();\n }\n return result;\n },\n aggregate: function (aggregates) {\n var idx, len, result = {}, state = {};\n if (aggregates && aggregates.length) {\n for (idx = 0, len = this.data.length; idx < len; idx++) {\n calculateAggregate(result, aggregates, this.data[idx], idx, len, state);\n }\n }\n return result;\n }\n };\n function groupValueComparer(a, b) {\n if (a && a.getTime && b && b.getTime) {\n return a.getTime() === b.getTime();\n }\n return a === b;\n }\n function calculateAggregate(accumulator, aggregates, item, index, length, state) {\n aggregates = aggregates || [];\n var idx, aggr, functionName, len = aggregates.length;\n for (idx = 0; idx < len; idx++) {\n aggr = aggregates[idx];\n functionName = aggr.aggregate;\n var field = aggr.field;\n accumulator[field] = accumulator[field] || {};\n state[field] = state[field] || {};\n state[field][functionName] = state[field][functionName] || {};\n accumulator[field][functionName] = functions[functionName.toLowerCase()](accumulator[field][functionName], item, kendo.accessor(field), index, length, state[field][functionName]);\n }\n }\n var functions = {\n sum: function (accumulator, item, accessor) {\n var value = accessor.get(item);\n if (!isNumber(accumulator)) {\n accumulator = value;\n } else if (isNumber(value)) {\n accumulator += value;\n }\n return accumulator;\n },\n count: function (accumulator) {\n return (accumulator || 0) + 1;\n },\n average: function (accumulator, item, accessor, index, length, state) {\n var value = accessor.get(item);\n if (state.count === undefined) {\n state.count = 0;\n }\n if (!isNumber(accumulator)) {\n accumulator = value;\n } else if (isNumber(value)) {\n accumulator += value;\n }\n if (isNumber(value)) {\n state.count++;\n }\n if (index == length - 1 && isNumber(accumulator)) {\n accumulator = accumulator / state.count;\n }\n return accumulator;\n },\n max: function (accumulator, item, accessor) {\n var value = accessor.get(item);\n if (!isNumber(accumulator) && !isDate(accumulator)) {\n accumulator = value;\n }\n if (accumulator < value && (isNumber(value) || isDate(value))) {\n accumulator = value;\n }\n return accumulator;\n },\n min: function (accumulator, item, accessor) {\n var value = accessor.get(item);\n if (!isNumber(accumulator) && !isDate(accumulator)) {\n accumulator = value;\n }\n if (accumulator > value && (isNumber(value) || isDate(value))) {\n accumulator = value;\n }\n return accumulator;\n }\n };\n function isNumber(val) {\n return typeof val === 'number' && !isNaN(val);\n }\n function isDate(val) {\n return val && val.getTime;\n }\n function toJSON(array) {\n var idx, length = array.length, result = new Array(length);\n for (idx = 0; idx < length; idx++) {\n result[idx] = array[idx].toJSON();\n }\n return result;\n }\n Query.normalizeGroup = normalizeGroup;\n Query.normalizeSort = normalizeSort;\n Query.process = function (data, options, inPlace) {\n options = options || {};\n var group = options.group;\n var customGroupSort = anyGroupDescriptorHasCompare(normalizeGroup(group || []));\n var query = new Query(data), groupDescriptorsWithoutCompare = normalizeGroupWithoutCompare(group || []), normalizedSort = normalizeSort(options.sort || []), sort = customGroupSort ? normalizedSort : groupDescriptorsWithoutCompare.concat(normalizedSort), groupDescriptorsWithoutSort, total, filterCallback = options.filterCallback, filter = options.filter, skip = options.skip, take = options.take;\n if (sort && inPlace) {\n query = query.sort(sort, undefined, undefined, inPlace);\n }\n if (filter) {\n query = query.filter(filter);\n if (filterCallback) {\n query = filterCallback(query);\n }\n total = query.toArray().length;\n }\n if (sort) {\n if (!inPlace) {\n query = query.sort(sort);\n }\n if (group) {\n data = query.toArray();\n }\n }\n if (customGroupSort) {\n query = query.group(group, data, options);\n if (skip !== undefined && take !== undefined && !options.groupPaging) {\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, options);\n }\n } else {\n if (skip !== undefined && take !== undefined) {\n query = query.range(skip, take);\n }\n if (group) {\n query = query.group(group, data, options);\n }\n }\n return {\n total: total,\n data: query.toArray()\n };\n };\n var LocalTransport = Class.extend({\n init: function (options) {\n this.data = options.data;\n },\n read: function (options) {\n options.success(this.data);\n },\n update: function (options) {\n options.success(options.data);\n },\n create: function (options) {\n options.success(options.data);\n },\n destroy: function (options) {\n options.success(options.data);\n }\n });\n var RemoteTransport = Class.extend({\n init: function (options) {\n var that = this, parameterMap;\n options = that.options = extend({}, that.options, options);\n each(crud, function (index, type) {\n if (typeof options[type] === STRING) {\n options[type] = { url: options[type] };\n }\n });\n that.cache = options.cache ? Cache.create(options.cache) : {\n find: noop,\n add: noop\n };\n parameterMap = options.parameterMap;\n if (options.submit) {\n that.submit = options.submit;\n }\n if (isFunction(options.push)) {\n that.push = options.push;\n }\n if (!that.push) {\n that.push = identity;\n }\n that.parameterMap = isFunction(parameterMap) ? parameterMap : function (options) {\n var result = {};\n each(options, function (option, value) {\n if (option in parameterMap) {\n option = parameterMap[option];\n if (isPlainObject(option)) {\n value = option.value(value);\n option = option.key;\n }\n }\n result[option] = value;\n });\n return result;\n };\n },\n options: { parameterMap: identity },\n create: function (options) {\n return ajax(this.setup(options, CREATE));\n },\n read: function (options) {\n var that = this, success, error, result, cache = that.cache;\n options = that.setup(options, READ);\n success = options.success || noop;\n error = options.error || noop;\n result = cache.find(options.data);\n if (result !== undefined) {\n success(result);\n } else {\n options.success = function (result) {\n cache.add(options.data, result);\n success(result);\n };\n $.ajax(options);\n }\n },\n update: function (options) {\n return ajax(this.setup(options, UPDATE));\n },\n destroy: function (options) {\n return ajax(this.setup(options, DESTROY));\n },\n setup: function (options, type) {\n options = options || {};\n var that = this, parameters, operation = that.options[type], data = isFunction(operation.data) ? operation.data(options.data) : operation.data;\n options = extend(true, {}, operation, options);\n parameters = extend(true, {}, data, options.data);\n options.data = that.parameterMap(parameters, type);\n if (isFunction(options.url)) {\n options.url = options.url(parameters);\n }\n return options;\n }\n });\n var Cache = Class.extend({\n init: function () {\n this._store = {};\n },\n add: function (key, data) {\n if (key !== undefined) {\n this._store[stringify(key)] = data;\n }\n },\n find: function (key) {\n return this._store[stringify(key)];\n },\n clear: function () {\n this._store = {};\n },\n remove: function (key) {\n delete this._store[stringify(key)];\n }\n });\n Cache.create = function (options) {\n var store = {\n 'inmemory': function () {\n return new Cache();\n }\n };\n if (isPlainObject(options) && isFunction(options.find)) {\n return options;\n }\n if (options === true) {\n return new Cache();\n }\n return store[options]();\n };\n function serializeRecords(data, getters, modelInstance, originalFieldNames, fieldNames) {\n var record, getter, originalName, idx, setters = {}, length;\n for (idx = 0, length = data.length; idx < length; idx++) {\n record = data[idx];\n for (getter in getters) {\n originalName = fieldNames[getter];\n if (originalName && originalName !== getter) {\n if (!setters[originalName]) {\n setters[originalName] = kendo.setter(originalName);\n }\n setters[originalName](record, getters[getter](record));\n delete record[getter];\n }\n }\n }\n }\n function convertRecords(data, getters, modelInstance, originalFieldNames, fieldNames) {\n var record, getter, originalName, idx, length;\n for (idx = 0, length = data.length; idx < length; idx++) {\n record = data[idx];\n for (getter in getters) {\n record[getter] = modelInstance._parse(getter, getters[getter](record));\n originalName = fieldNames[getter];\n if (originalName && originalName !== getter) {\n delete record[originalName];\n }\n }\n }\n }\n function convertGroup(data, getters, modelInstance, originalFieldNames, fieldNames) {\n var record, idx, fieldName, length;\n for (idx = 0, length = data.length; idx < length; idx++) {\n record = data[idx];\n fieldName = originalFieldNames[record.field];\n if (fieldName && fieldName != record.field) {\n record.field = fieldName;\n }\n record.value = modelInstance._parse(record.field, record.value);\n if (record.items) {\n if (record.hasSubgroups) {\n convertGroup(record.items, getters, modelInstance, originalFieldNames, fieldNames);\n } else {\n convertRecords(record.items, getters, modelInstance, originalFieldNames, fieldNames);\n }\n }\n }\n }\n function wrapDataAccess(originalFunction, model, converter, getters, originalFieldNames, fieldNames) {\n return function (data) {\n data = originalFunction(data);\n return wrapDataAccessBase(model, converter, getters, originalFieldNames, fieldNames)(data);\n };\n }\n function wrapDataAccessBase(model, converter, getters, originalFieldNames, fieldNames) {\n return function (data) {\n if (data && !isEmptyObject(getters)) {\n if (toString.call(data) !== '[object Array]' && !(data instanceof ObservableArray)) {\n data = [data];\n }\n converter(data, getters, new model(), originalFieldNames, fieldNames);\n }\n return data || [];\n };\n }\n var DataReader = Class.extend({\n init: function (schema) {\n var that = this, member, get, model, base;\n schema = schema || {};\n for (member in schema) {\n get = schema[member];\n that[member] = typeof get === STRING ? getter(get) : get;\n }\n base = schema.modelBase || Model;\n if (isPlainObject(that.model)) {\n that.model = model = base.define(that.model);\n }\n var dataFunction = proxy(that.data, that);\n that._dataAccessFunction = dataFunction;\n if (that.model) {\n var groupsFunction = proxy(that.groups, that), serializeFunction = proxy(that.serialize, that), originalFieldNames = {}, getters = {}, serializeGetters = {}, fieldNames = {}, shouldSerialize = false, fieldName, name;\n model = that.model;\n if (model.fields) {\n each(model.fields, function (field, value) {\n var fromName;\n fieldName = field;\n if (isPlainObject(value) && value.field) {\n fieldName = value.field;\n } else if (typeof value === STRING) {\n fieldName = value;\n }\n if (isPlainObject(value) && value.from) {\n fromName = value.from;\n }\n shouldSerialize = shouldSerialize || fromName && fromName !== field || fieldName !== field;\n name = fromName || fieldName;\n getters[field] = name.indexOf('.') !== -1 ? getter(name, true) : getter(name);\n serializeGetters[field] = getter(field);\n originalFieldNames[fromName || fieldName] = field;\n fieldNames[field] = fromName || fieldName;\n });\n if (!schema.serialize && shouldSerialize) {\n that.serialize = wrapDataAccess(serializeFunction, model, serializeRecords, serializeGetters, originalFieldNames, fieldNames);\n }\n }\n that._dataAccessFunction = dataFunction;\n that._wrapDataAccessBase = wrapDataAccessBase(model, convertRecords, getters, originalFieldNames, fieldNames);\n that.data = wrapDataAccess(dataFunction, model, convertRecords, getters, originalFieldNames, fieldNames);\n that.groups = wrapDataAccess(groupsFunction, model, convertGroup, getters, originalFieldNames, fieldNames);\n }\n },\n errors: function (data) {\n return data ? data.errors : null;\n },\n parse: identity,\n data: identity,\n total: function (data) {\n return data.length;\n },\n groups: identity,\n aggregates: function () {\n return {};\n },\n serialize: function (data) {\n return data;\n }\n });\n function fillLastGroup(originalGroup, newGroup) {\n var currOriginal;\n var currentNew;\n if (newGroup.items && newGroup.items.length) {\n for (var i = 0; i < newGroup.items.length; i++) {\n currOriginal = originalGroup.items[originalGroup.items.length - 1];\n currentNew = newGroup.items[i];\n if (currOriginal && currentNew) {\n if (currOriginal.hasSubgroups && currOriginal.value == currentNew.value) {\n fillLastGroup(currOriginal, currentNew);\n } else if (currOriginal.field && currOriginal.value == currentNew.value) {\n currOriginal.items.push.apply(currOriginal.items, currentNew.items);\n } else {\n originalGroup.items.push.apply(originalGroup.items, [currentNew]);\n }\n } else if (currentNew) {\n originalGroup.items.push.apply(originalGroup.items, [currentNew]);\n }\n }\n }\n }\n function mergeGroups(target, dest, skip, take) {\n var group, idx = 0, items;\n while (dest.length && take) {\n group = dest[idx];\n items = group.items;\n var length = items.length;\n if (target && target.field === group.field && target.value === group.value) {\n if (target.hasSubgroups && target.items.length) {\n mergeGroups(target.items[target.items.length - 1], group.items, skip, take);\n } else {\n items = items.slice(skip, skip + take);\n target.items = target.items.concat(items);\n }\n dest.splice(idx--, 1);\n } else if (group.hasSubgroups && items.length) {\n mergeGroups(group, items, skip, take);\n if (!group.items.length) {\n dest.splice(idx--, 1);\n }\n } else {\n items = items.slice(skip, skip + take);\n group.items = items;\n if (!group.items.length) {\n dest.splice(idx--, 1);\n }\n }\n if (items.length === 0) {\n skip -= length;\n } else {\n skip = 0;\n take -= items.length;\n }\n if (++idx >= dest.length) {\n break;\n }\n }\n if (idx < dest.length) {\n dest.splice(idx, dest.length - idx);\n }\n }\n function flatGroups(groups, indexFunction) {\n var result = [];\n var groupsLength = (groups || []).length;\n var group;\n var items;\n var indexFn = isFunction(indexFunction) ? indexFunction : function (array, index) {\n return array[index];\n };\n for (var groupIndex = 0; groupIndex < groupsLength; groupIndex++) {\n group = indexFn(groups, groupIndex);\n if (group.hasSubgroups) {\n result = result.concat(flatGroups(group.items));\n } else {\n items = group.items;\n for (var itemIndex = 0; itemIndex < items.length; itemIndex++) {\n result.push(indexFn(items, itemIndex));\n }\n }\n }\n return result;\n }\n function flattenGroups(data) {\n var idx, result = [], length, items, itemIndex;\n for (idx = 0, length = data.length; idx < length; idx++) {\n var group = data.at(idx);\n if (group.items) {\n if (group.hasSubgroups) {\n result = result.concat(flattenGroups(group.items));\n } else {\n items = group.items;\n for (itemIndex = 0; itemIndex < items.length; itemIndex++) {\n result.push(items.at(itemIndex));\n }\n }\n }\n }\n return result;\n }\n function wrapGroupItems(data, model) {\n var idx, length, group;\n if (model) {\n for (idx = 0, length = data.length; idx < length; idx++) {\n group = data.at(idx);\n if (group.items) {\n if (group.hasSubgroups) {\n wrapGroupItems(group.items, model);\n } else {\n group.items = new LazyObservableArray(group.items, model, group.items._events);\n }\n }\n }\n }\n }\n function eachGroupItems(data, func) {\n for (var idx = 0; idx < data.length; idx++) {\n if (data[idx].hasSubgroups) {\n if (eachGroupItems(data[idx].items, func)) {\n return true;\n }\n } else if (func(data[idx].items, data[idx])) {\n return true;\n }\n }\n }\n function replaceInRanges(ranges, data, item, observable) {\n for (var idx = 0; idx < ranges.length; idx++) {\n if (ranges[idx].data === data) {\n break;\n }\n if (replaceInRange(ranges[idx].data, item, observable)) {\n break;\n }\n }\n }\n function replaceInRange(items, item, observable) {\n for (var idx = 0, length = items.length; idx < length; idx++) {\n if (items[idx] && items[idx].hasSubgroups) {\n return replaceInRange(items[idx].items, item, observable);\n } else if (items[idx] === item || items[idx] === observable) {\n items[idx] = observable;\n return true;\n }\n }\n }\n function replaceWithObservable(view, data, ranges, type, serverGrouping) {\n for (var viewIndex = 0, length = view.length; viewIndex < length; viewIndex++) {\n var item = view[viewIndex];\n if (!item || item instanceof type) {\n continue;\n }\n if (item.hasSubgroups !== undefined && !serverGrouping) {\n replaceWithObservable(item.items, data, ranges, type, serverGrouping);\n } else {\n for (var idx = 0; idx < data.length; idx++) {\n if (data[idx] === item) {\n view[viewIndex] = data.at(idx);\n replaceInRanges(ranges, data, item, view[viewIndex]);\n break;\n }\n }\n }\n }\n }\n function removeModel(data, model) {\n if (!data) {\n return;\n }\n var length = data.length;\n var dataItem;\n var idx;\n for (idx = 0; idx < length; idx++) {\n dataItem = data[idx];\n if (dataItem.uid && dataItem.uid == model.uid) {\n data.splice(idx, 1);\n return dataItem;\n }\n }\n }\n function indexOfPristineModel(data, model) {\n if (model) {\n return indexOf(data, function (item) {\n return item.uid && item.uid == model.uid || item[model.idField] === model.id && model.id !== model._defaultId;\n });\n }\n return -1;\n }\n function indexOfModel(data, model) {\n if (model) {\n return indexOf(data, function (item) {\n return item.uid == model.uid;\n });\n }\n return -1;\n }\n function indexOf(data, comparer) {\n var idx, length;\n if (!data) {\n return;\n }\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (comparer(data[idx])) {\n return idx;\n }\n }\n return -1;\n }\n function fieldNameFromModel(fields, name) {\n if (fields && !isEmptyObject(fields)) {\n var descriptor = fields[name];\n var fieldName;\n if (isPlainObject(descriptor)) {\n fieldName = descriptor.from || descriptor.field || name;\n } else {\n fieldName = fields[name] || name;\n }\n if (isFunction(fieldName)) {\n return name;\n }\n return fieldName;\n }\n return name;\n }\n function convertFilterDescriptorsField(descriptor, model) {\n var idx, length, target = {};\n for (var field in descriptor) {\n if (field !== 'filters') {\n target[field] = descriptor[field];\n }\n }\n if (descriptor.filters) {\n target.filters = [];\n for (idx = 0, length = descriptor.filters.length; idx < length; idx++) {\n target.filters[idx] = convertFilterDescriptorsField(descriptor.filters[idx], model);\n }\n } else {\n target.field = fieldNameFromModel(model.fields, target.field);\n }\n return target;\n }\n function convertDescriptorsField(descriptors, model) {\n var idx, length, result = [], target, descriptor;\n for (idx = 0, length = descriptors.length; idx < length; idx++) {\n target = {};\n descriptor = descriptors[idx];\n for (var field in descriptor) {\n target[field] = descriptor[field];\n }\n target.field = fieldNameFromModel(model.fields, target.field);\n if (target.aggregates && isArray(target.aggregates)) {\n target.aggregates = convertDescriptorsField(target.aggregates, model);\n }\n result.push(target);\n }\n return result;\n }\n var DataSource = Observable.extend({\n init: function (options) {\n var that = this, model, data;\n if (options) {\n data = options.data;\n }\n options = that.options = extend({}, that.options, options);\n that._map = {};\n that._prefetch = {};\n that._data = [];\n that._pristineData = [];\n that._ranges = [];\n that._view = [];\n that._pristineTotal = 0;\n that._destroyed = [];\n that._pageSize = options.pageSize;\n that._page = options.page || (options.pageSize ? 1 : undefined);\n that._sort = normalizeSort(options.sort);\n that._sortFields = sortFields(options.sort);\n that._filter = normalizeFilter(options.filter);\n that._group = normalizeGroup(options.group);\n that._aggregate = options.aggregate;\n that._total = options.total;\n that._groupPaging = options.groupPaging;\n if (that._groupPaging) {\n that._groupsState = {};\n }\n that._shouldDetachObservableParents = true;\n Observable.fn.init.call(that);\n that.transport = Transport.create(options, data, that);\n if (isFunction(that.transport.push)) {\n that.transport.push({\n pushCreate: proxy(that._pushCreate, that),\n pushUpdate: proxy(that._pushUpdate, that),\n pushDestroy: proxy(that._pushDestroy, that)\n });\n }\n if (options.offlineStorage != null) {\n if (typeof options.offlineStorage == 'string') {\n var key = options.offlineStorage;\n that._storage = {\n getItem: function () {\n return JSON.parse(localStorage.getItem(key));\n },\n setItem: function (item) {\n localStorage.setItem(key, stringify(that.reader.serialize(item)));\n }\n };\n } else {\n that._storage = options.offlineStorage;\n }\n }\n that.reader = new kendo.data.readers[options.schema.type || 'json'](options.schema);\n model = that.reader.model || {};\n that._detachObservableParents();\n that._data = that._observe(that._data);\n that._online = true;\n that.bind([\n 'push',\n ERROR,\n CHANGE,\n REQUESTSTART,\n SYNC,\n REQUESTEND,\n PROGRESS\n ], options);\n },\n options: {\n data: null,\n schema: { modelBase: Model },\n offlineStorage: null,\n serverSorting: false,\n serverPaging: false,\n serverFiltering: false,\n serverGrouping: false,\n serverAggregates: false,\n batch: false,\n inPlaceSort: false\n },\n clone: function () {\n return this;\n },\n online: function (value) {\n if (value !== undefined) {\n if (this._online != value) {\n this._online = value;\n if (value) {\n return this.sync();\n }\n }\n return $.Deferred().resolve().promise();\n } else {\n return this._online;\n }\n },\n offlineData: function (state) {\n if (this.options.offlineStorage == null) {\n return null;\n }\n if (state !== undefined) {\n return this._storage.setItem(state);\n }\n return this._storage.getItem() || [];\n },\n _isServerGrouped: function () {\n var group = this.group() || [];\n return this.options.serverGrouping && group.length;\n },\n _isServerGroupPaged: function () {\n return this._isServerGrouped() && this._groupPaging;\n },\n _isGroupPaged: function () {\n var group = this._group || [];\n return this._groupPaging && group.length;\n },\n _pushCreate: function (result) {\n this._push(result, 'pushCreate');\n },\n _pushUpdate: function (result) {\n this._push(result, 'pushUpdate');\n },\n _pushDestroy: function (result) {\n this._push(result, 'pushDestroy');\n },\n _push: function (result, operation) {\n var data = this._readData(result);\n if (!data) {\n data = result;\n }\n this[operation](data);\n },\n _flatData: function (data, skip) {\n if (data) {\n if (this._isServerGrouped()) {\n return flattenGroups(data);\n }\n if (!skip) {\n for (var idx = 0; idx < data.length; idx++) {\n data.at(idx);\n }\n }\n }\n return data;\n },\n parent: noop,\n get: function (id) {\n var idx, length, data = this._flatData(this._data, this.options.useRanges);\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (data[idx].id == id) {\n return data[idx];\n }\n }\n },\n getByUid: function (id) {\n return this._getByUid(id, this._data);\n },\n _getByUid: function (id, dataItems) {\n var idx, length, data = this._flatData(dataItems, this.options.useRanges);\n if (!data) {\n return;\n }\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (data[idx].uid == id) {\n return data[idx];\n }\n }\n },\n indexOf: function (model) {\n return indexOfModel(this._data, model);\n },\n at: function (index) {\n return this._data.at(index);\n },\n data: function (value) {\n var that = this;\n if (value !== undefined) {\n that._detachObservableParents();\n that._data = this._observe(value);\n that._pristineData = value.slice(0);\n that._storeData();\n that._ranges = [];\n that.trigger('reset');\n that._addRange(that._data);\n that._total = that._data.length;\n that._pristineTotal = that._total;\n that._process(that._data);\n } else {\n if (that._data) {\n for (var idx = 0; idx < that._data.length; idx++) {\n that._data.at(idx);\n }\n }\n return that._data;\n }\n },\n view: function (value) {\n if (value === undefined) {\n return this._view;\n } else {\n this._view = this._observeView(value);\n }\n },\n _observeView: function (data) {\n var that = this;\n replaceWithObservable(data, that._data, that._ranges, that.reader.model || ObservableObject, that._isServerGrouped());\n var view = new LazyObservableArray(data, that.reader.model);\n view.parent = function () {\n return that.parent();\n };\n return view;\n },\n flatView: function () {\n var groups = this.group() || [];\n if (groups.length) {\n return flattenGroups(this._view);\n } else {\n return this._view;\n }\n },\n add: function (model) {\n return this.insert(this._data.length, model);\n },\n _createNewModel: function (model) {\n if (this.reader.model) {\n return new this.reader.model(model);\n }\n if (model instanceof ObservableObject) {\n return model;\n }\n return new ObservableObject(model);\n },\n insert: function (index, model) {\n if (!model) {\n model = index;\n index = 0;\n }\n if (!(model instanceof Model)) {\n model = this._createNewModel(model);\n }\n if (this._isServerGrouped()) {\n this._data.splice(index, 0, this._wrapInEmptyGroup(model));\n } else {\n this._data.splice(index, 0, model);\n }\n this._insertModelInRange(index, model);\n return model;\n },\n pushInsert: function (index, items) {\n var that = this;\n var rangeSpan = that._getCurrentRangeSpan();\n if (!items) {\n items = index;\n index = 0;\n }\n if (!isArray(items)) {\n items = [items];\n }\n var pushed = [];\n var autoSync = this.options.autoSync;\n this.options.autoSync = false;\n try {\n for (var idx = 0; idx < items.length; idx++) {\n var item = items[idx];\n var result = this.insert(index, item);\n pushed.push(result);\n var pristine = result.toJSON();\n if (this._isServerGrouped()) {\n pristine = this._wrapInEmptyGroup(pristine);\n }\n this._pristineData.push(pristine);\n if (rangeSpan && rangeSpan.length) {\n $(rangeSpan).last()[0].pristineData.push(pristine);\n }\n index++;\n }\n } finally {\n this.options.autoSync = autoSync;\n }\n if (pushed.length) {\n this.trigger('push', {\n type: 'create',\n items: pushed\n });\n }\n },\n pushCreate: function (items) {\n this.pushInsert(this._data.length, items);\n },\n pushUpdate: function (items) {\n if (!isArray(items)) {\n items = [items];\n }\n var pushed = [];\n for (var idx = 0; idx < items.length; idx++) {\n var item = items[idx];\n var model = this._createNewModel(item);\n var target = this.get(model.id);\n if (target) {\n pushed.push(target);\n target.accept(item);\n target.trigger(CHANGE);\n this._updatePristineForModel(target, item);\n } else {\n this.pushCreate(item);\n }\n }\n if (pushed.length) {\n this.trigger('push', {\n type: 'update',\n items: pushed\n });\n }\n },\n pushDestroy: function (items) {\n var pushed = this._removeItems(items);\n if (pushed.length) {\n this.trigger('push', {\n type: 'destroy',\n items: pushed\n });\n }\n },\n _removeItems: function (items, removePristine) {\n if (!isArray(items)) {\n items = [items];\n }\n var shouldRemovePristine = typeof removePristine !== 'undefined' ? removePristine : true;\n var destroyed = [];\n var autoSync = this.options.autoSync;\n this.options.autoSync = false;\n try {\n for (var idx = 0; idx < items.length; idx++) {\n var item = items[idx];\n var model = this._createNewModel(item);\n var found = false;\n this._eachItem(this._data, function (items) {\n for (var idx = 0; idx < items.length; idx++) {\n var item = items.at(idx);\n if (item.id === model.id) {\n destroyed.push(item);\n items.splice(idx, 1);\n found = true;\n break;\n }\n }\n });\n if (found && shouldRemovePristine) {\n this._removePristineForModel(model);\n this._destroyed.pop();\n }\n }\n } finally {\n this.options.autoSync = autoSync;\n }\n return destroyed;\n },\n remove: function (model) {\n var result, that = this, hasGroups = that._isServerGrouped();\n this._eachItem(that._data, function (items) {\n result = removeModel(items, model);\n if (result && hasGroups) {\n if (!result.isNew || !result.isNew()) {\n that._destroyed.push(result);\n }\n return true;\n }\n });\n this._removeModelFromRanges(model);\n return model;\n },\n destroyed: function () {\n return this._destroyed;\n },\n created: function () {\n var idx, length, result = [], data = this._flatData(this._data, this.options.useRanges);\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (data[idx].isNew && data[idx].isNew()) {\n result.push(data[idx]);\n }\n }\n return result;\n },\n updated: function () {\n var idx, length, result = [], data = this._flatData(this._data, this.options.useRanges);\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (data[idx].isNew && !data[idx].isNew() && data[idx].dirty) {\n result.push(data[idx]);\n }\n }\n return result;\n },\n sync: function () {\n var that = this, created = [], updated = [], destroyed = that._destroyed;\n var promise = $.Deferred().resolve().promise();\n if (that.online()) {\n if (!that.reader.model) {\n return promise;\n }\n created = that.created();\n updated = that.updated();\n var promises = [];\n if (that.options.batch && that.transport.submit) {\n promises = that._sendSubmit(created, updated, destroyed);\n } else {\n promises.push.apply(promises, that._send('create', created));\n promises.push.apply(promises, that._send('update', updated));\n promises.push.apply(promises, that._send('destroy', destroyed));\n }\n promise = $.when.apply(null, promises).then(function () {\n var idx, length;\n for (idx = 0, length = arguments.length; idx < length; idx++) {\n if (arguments[idx]) {\n that._accept(arguments[idx]);\n }\n }\n that._storeData(true);\n that._syncEnd();\n that._change({ action: 'sync' });\n that.trigger(SYNC);\n if (that._isServerGroupPaged()) {\n that.read();\n }\n });\n } else {\n that._storeData(true);\n that._syncEnd();\n that._change({ action: 'sync' });\n }\n return promise;\n },\n _syncEnd: noop,\n cancelChanges: function (model) {\n var that = this;\n if (model instanceof kendo.data.Model) {\n that._cancelModel(model);\n } else {\n that._destroyed = [];\n that._detachObservableParents();\n that._data = that._observe(that._pristineData);\n if (that.options.serverPaging) {\n that._total = that._pristineTotal;\n }\n that._ranges = [];\n that._addRange(that._data, 0);\n that._changesCanceled();\n that._change();\n that._markOfflineUpdatesAsDirty();\n if (that._isServerGrouped()) {\n that.read();\n }\n }\n },\n _changesCanceled: noop,\n _markOfflineUpdatesAsDirty: function () {\n var that = this;\n if (that.options.offlineStorage != null) {\n that._eachItem(that._data, function (items) {\n for (var idx = 0; idx < items.length; idx++) {\n var item = items.at(idx);\n if (item.__state__ == 'update' || item.__state__ == 'create') {\n item.dirty = true;\n }\n }\n });\n }\n },\n hasChanges: function () {\n var idx, length, data = this._flatData(this._data, this.options.useRanges);\n if (this._destroyed.length) {\n return true;\n }\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (data[idx].isNew && data[idx].isNew() || data[idx].dirty) {\n return true;\n }\n }\n return false;\n },\n _accept: function (result) {\n var that = this, models = result.models, response = result.response, idx = 0, serverGroup = that._isServerGrouped(), pristine = that._pristineData, type = result.type, length;\n that.trigger(REQUESTEND, {\n response: response,\n type: type\n });\n if (response && !isEmptyObject(response)) {\n response = that.reader.parse(response);\n if (that._handleCustomErrors(response)) {\n return;\n }\n response = that.reader.data(response);\n if (!isArray(response)) {\n response = [response];\n }\n } else {\n response = $.map(models, function (model) {\n return model.toJSON();\n });\n }\n if (type === 'destroy') {\n that._destroyed = [];\n }\n for (idx = 0, length = models.length; idx < length; idx++) {\n if (type !== 'destroy') {\n models[idx].accept(response[idx]);\n if (type === 'create') {\n pristine.push(serverGroup ? that._wrapInEmptyGroup(models[idx].toJSON()) : response[idx]);\n } else if (type === 'update') {\n that._updatePristineForModel(models[idx], response[idx]);\n }\n } else {\n that._removePristineForModel(models[idx]);\n }\n }\n },\n _updatePristineForModel: function (model, values) {\n this._executeOnPristineForModel(model, function (index, items) {\n kendo.deepExtend(items[index], values);\n });\n },\n _executeOnPristineForModel: function (model, callback) {\n this._eachPristineItem(function (items) {\n var index = indexOfPristineModel(items, model);\n if (index > -1) {\n callback(index, items);\n return true;\n }\n });\n },\n _removePristineForModel: function (model) {\n this._executeOnPristineForModel(model, function (index, items) {\n items.splice(index, 1);\n });\n },\n _readData: function (data) {\n var read = !this._isServerGrouped() ? this.reader.data : this.reader.groups;\n return read.call(this.reader, data);\n },\n _eachPristineItem: function (callback) {\n var that = this;\n var options = that.options;\n var rangeSpan = that._getCurrentRangeSpan();\n that._eachItem(that._pristineData, callback);\n if (options.serverPaging && options.useRanges) {\n each(rangeSpan, function (i, range) {\n that._eachItem(range.pristineData, callback);\n });\n }\n },\n _eachItem: function (data, callback) {\n if (data && data.length) {\n if (this._isServerGrouped()) {\n eachGroupItems(data, callback);\n } else {\n callback(data);\n }\n }\n },\n _pristineForModel: function (model) {\n var pristine, idx, callback = function (items) {\n idx = indexOfPristineModel(items, model);\n if (idx > -1) {\n pristine = items[idx];\n return true;\n }\n };\n this._eachPristineItem(callback);\n return pristine;\n },\n _cancelModel: function (model) {\n var that = this;\n var pristine = this._pristineForModel(model);\n this._eachItem(this._data, function (items) {\n var idx = indexOfModel(items, model);\n if (idx >= 0) {\n if (pristine && (!model.isNew() || pristine.__state__)) {\n items[idx].accept(pristine);\n if (pristine.__state__ == 'update') {\n items[idx].dirty = true;\n }\n } else {\n that._modelCanceled(model);\n items.splice(idx, 1);\n that._removeModelFromRanges(model);\n }\n }\n });\n },\n _modelCanceled: noop,\n _submit: function (promises, data) {\n var that = this;\n that.trigger(REQUESTSTART, { type: 'submit' });\n that.trigger(PROGRESS);\n that.transport.submit(extend({\n success: function (response, type) {\n var promise = $.grep(promises, function (x) {\n return x.type == type;\n })[0];\n if (promise) {\n promise.resolve({\n response: response,\n models: promise.models,\n type: type\n });\n }\n },\n error: function (response, status, error) {\n for (var idx = 0; idx < promises.length; idx++) {\n promises[idx].reject(response);\n }\n that.error(response, status, error);\n }\n }, data));\n },\n _sendSubmit: function (created, updated, destroyed) {\n var that = this, promises = [];\n if (that.options.batch) {\n if (created.length) {\n promises.push($.Deferred(function (deferred) {\n deferred.type = 'create';\n deferred.models = created;\n }));\n }\n if (updated.length) {\n promises.push($.Deferred(function (deferred) {\n deferred.type = 'update';\n deferred.models = updated;\n }));\n }\n if (destroyed.length) {\n promises.push($.Deferred(function (deferred) {\n deferred.type = 'destroy';\n deferred.models = destroyed;\n }));\n }\n that._submit(promises, {\n data: {\n created: that.reader.serialize(toJSON(created)),\n updated: that.reader.serialize(toJSON(updated)),\n destroyed: that.reader.serialize(toJSON(destroyed))\n }\n });\n }\n return promises;\n },\n _promise: function (data, models, type) {\n var that = this;\n return $.Deferred(function (deferred) {\n that.trigger(REQUESTSTART, { type: type });\n that.trigger(PROGRESS);\n that.transport[type].call(that.transport, extend({\n success: function (response) {\n deferred.resolve({\n response: response,\n models: models,\n type: type\n });\n },\n error: function (response, status, error) {\n deferred.reject(response);\n that.error(response, status, error);\n }\n }, data));\n }).promise();\n },\n _send: function (method, data) {\n var that = this, idx, length, promises = [], converted = that.reader.serialize(toJSON(data));\n if (that.options.batch) {\n if (data.length) {\n promises.push(that._promise({ data: { models: converted } }, data, method));\n }\n } else {\n for (idx = 0, length = data.length; idx < length; idx++) {\n promises.push(that._promise({ data: converted[idx] }, [data[idx]], method));\n }\n }\n return promises;\n },\n read: function (data) {\n var that = this, params = that._params(data);\n var deferred = $.Deferred();\n that._queueRequest(params, function () {\n var isPrevented = that.trigger(REQUESTSTART, { type: 'read' });\n if (!isPrevented) {\n that.trigger(PROGRESS);\n that._ranges = [];\n that.trigger('reset');\n if (that.online()) {\n that.transport.read({\n data: params,\n success: function (data) {\n that._ranges = [];\n that.success(data, params);\n deferred.resolve();\n },\n error: function () {\n var args = slice.call(arguments);\n that.error.apply(that, args);\n deferred.reject.apply(deferred, args);\n }\n });\n } else if (that.options.offlineStorage != null) {\n that.success(that.offlineData(), params);\n deferred.resolve();\n }\n } else {\n that._dequeueRequest();\n deferred.resolve(isPrevented);\n }\n });\n return deferred.promise();\n },\n _readAggregates: function (data) {\n return this.reader.aggregates(data);\n },\n success: function (data) {\n var that = this, options = that.options, items, replaceSubset;\n that.trigger(REQUESTEND, {\n response: data,\n type: 'read'\n });\n if (that.online()) {\n data = that.reader.parse(data);\n if (that._handleCustomErrors(data)) {\n that._dequeueRequest();\n return;\n }\n that._total = that.reader.total(data);\n if (that._isServerGroupPaged()) {\n that._serverGroupsTotal = that._total;\n }\n if (that._pageSize > that._total) {\n that._pageSize = that._total;\n if (that.options.pageSize && that.options.pageSize > that._pageSize) {\n that._pageSize = that.options.pageSize;\n }\n }\n if (that._aggregate && options.serverAggregates) {\n that._aggregateResult = that._readAggregates(data);\n }\n data = that._readData(data);\n that._destroyed = [];\n } else {\n data = that._readData(data);\n items = [];\n var itemIds = {};\n var model = that.reader.model;\n var idField = model ? model.idField : 'id';\n var idx;\n for (idx = 0; idx < this._destroyed.length; idx++) {\n var id = this._destroyed[idx][idField];\n itemIds[id] = id;\n }\n for (idx = 0; idx < data.length; idx++) {\n var item = data[idx];\n var state = item.__state__;\n if (state == 'destroy') {\n if (!itemIds[item[idField]]) {\n this._destroyed.push(this._createNewModel(item));\n }\n } else {\n items.push(item);\n }\n }\n data = items;\n that._total = data.length;\n }\n that._pristineTotal = that._total;\n replaceSubset = that._skip && that._data.length && that._skip < that._data.length;\n if (that.options.endless) {\n if (replaceSubset) {\n that._pristineData.splice(that._skip, that._pristineData.length);\n }\n items = data.slice(0);\n for (var j = 0; j < items.length; j++) {\n that._pristineData.push(items[j]);\n }\n } else {\n that._pristineData = data.slice(0);\n }\n that._detachObservableParents();\n if (that.options.endless) {\n that._data.unbind(CHANGE, that._changeHandler);\n if (that._isServerGrouped() && that._data[that._data.length - 1].value === data[0].value) {\n fillLastGroup(that._data[that._data.length - 1], data[0]);\n data.shift();\n }\n data = that._observe(data);\n if (replaceSubset) {\n that._data.splice(that._skip, that._data.length);\n }\n for (var i = 0; i < data.length; i++) {\n that._data.push(data[i]);\n }\n that._data.bind(CHANGE, that._changeHandler);\n } else {\n that._data = that._observe(data);\n }\n that._markOfflineUpdatesAsDirty();\n that._storeData();\n that._addRange(that._data);\n that._process(that._data);\n that._dequeueRequest();\n },\n _detachObservableParents: function () {\n if (this._data && this._shouldDetachObservableParents) {\n for (var idx = 0; idx < this._data.length; idx++) {\n if (this._data[idx].parent) {\n this._data[idx].parent = noop;\n }\n }\n }\n },\n _storeData: function (updatePristine) {\n var serverGrouping = this._isServerGrouped();\n var model = this.reader.model;\n function items(data) {\n var state = [];\n for (var idx = 0; idx < data.length; idx++) {\n var dataItem = data.at(idx);\n var item = dataItem.toJSON();\n if (serverGrouping && dataItem.items) {\n item.items = items(dataItem.items);\n } else {\n item.uid = dataItem.uid;\n if (model) {\n if (dataItem.isNew()) {\n item.__state__ = 'create';\n } else if (dataItem.dirty) {\n item.__state__ = 'update';\n }\n }\n }\n state.push(item);\n }\n return state;\n }\n if (this.options.offlineStorage != null) {\n var state = items(this._data);\n var destroyed = [];\n for (var idx = 0; idx < this._destroyed.length; idx++) {\n var item = this._destroyed[idx].toJSON();\n item.__state__ = 'destroy';\n destroyed.push(item);\n }\n this.offlineData(state.concat(destroyed));\n if (updatePristine) {\n this._pristineData = this.reader.reader ? this.reader.reader._wrapDataAccessBase(state) : this.reader._wrapDataAccessBase(state);\n }\n }\n },\n _addRange: function (data, skip) {\n var that = this, start = typeof skip !== 'undefined' ? skip : that._skip || 0, end, range = {\n data: data,\n pristineData: data.toJSON(),\n timestamp: that._timeStamp()\n };\n if (this._isGroupPaged()) {\n end = start + data.length;\n range.outerStart = start;\n range.outerEnd = end;\n } else {\n end = start + that._flatData(data, true).length;\n }\n range.start = start;\n range.end = end;\n that._ranges.push(range);\n that._sortRanges();\n if (that._isGroupPaged()) {\n if (!that._groupsFlat) {\n that._groupsFlat = [];\n }\n that._appendToGroupsFlat(range.data);\n that._updateOuterRangesLength();\n }\n },\n _appendToGroupsFlat: function (data) {\n var length = data.length;\n for (var i = 0; i < length; i++) {\n this._groupsFlat.push(data[i]);\n }\n },\n _getGroupByUid: function (uid) {\n var length = this._groupsFlat.length;\n var group;\n for (var i = 0; i < length; i++) {\n group = this._groupsFlat[i];\n if (group.uid === uid) {\n return group;\n }\n }\n },\n _sortRanges: function () {\n this._ranges.sort(function (x, y) {\n return x.start - y.start;\n });\n },\n error: function (xhr, status, errorThrown) {\n this._dequeueRequest();\n this.trigger(REQUESTEND, {});\n this.trigger(ERROR, {\n xhr: xhr,\n status: status,\n errorThrown: errorThrown\n });\n },\n _params: function (data) {\n var that = this, options = extend({\n take: that.take(),\n skip: that.skip(),\n page: that.page(),\n pageSize: that.pageSize(),\n sort: that._sort,\n filter: that._filter,\n group: that._group,\n aggregate: that._aggregate,\n groupPaging: !!that._groupPaging\n }, data);\n if (!that.options.serverPaging) {\n delete options.take;\n delete options.skip;\n delete options.page;\n delete options.pageSize;\n }\n if (!that.options.serverGrouping) {\n delete options.group;\n } else if (that.reader.model && options.group) {\n options.group = convertDescriptorsField(options.group, that.reader.model);\n }\n if (!that.options.serverFiltering) {\n delete options.filter;\n } else if (that.reader.model && options.filter) {\n options.filter = convertFilterDescriptorsField(options.filter, that.reader.model);\n }\n if (!that.options.serverSorting) {\n delete options.sort;\n } else if (that.reader.model && options.sort) {\n options.sort = convertDescriptorsField(options.sort, that.reader.model);\n }\n if (!that.options.serverAggregates) {\n delete options.aggregate;\n } else if (that.reader.model && options.aggregate) {\n options.aggregate = convertDescriptorsField(options.aggregate, that.reader.model);\n }\n if (!that.options.groupPaging) {\n delete options.groupPaging;\n }\n return options;\n },\n _queueRequest: function (options, callback) {\n var that = this;\n if (!that._requestInProgress) {\n that._requestInProgress = true;\n that._pending = undefined;\n callback();\n } else {\n that._pending = {\n callback: proxy(callback, that),\n options: options\n };\n }\n },\n _dequeueRequest: function () {\n var that = this;\n that._requestInProgress = false;\n if (that._pending) {\n that._queueRequest(that._pending.options, that._pending.callback);\n }\n },\n _handleCustomErrors: function (response) {\n if (this.reader.errors) {\n var errors = this.reader.errors(response);\n if (errors) {\n this.trigger(ERROR, {\n xhr: null,\n status: 'customerror',\n errorThrown: 'custom error',\n errors: errors\n });\n return true;\n }\n }\n return false;\n },\n _shouldWrap: function (data) {\n var model = this.reader.model;\n if (model && data.length) {\n return !(data[0] instanceof model);\n }\n return false;\n },\n _observe: function (data) {\n var that = this, model = that.reader.model;\n that._shouldDetachObservableParents = true;\n if (data instanceof ObservableArray) {\n that._shouldDetachObservableParents = false;\n if (that._shouldWrap(data)) {\n data.type = that.reader.model;\n data.wrapAll(data, data);\n }\n } else {\n var arrayType = that.pageSize() && !that.options.serverPaging ? LazyObservableArray : ObservableArray;\n data = new arrayType(data, that.reader.model);\n data.parent = function () {\n return that.parent();\n };\n }\n if (that._isServerGrouped()) {\n wrapGroupItems(data, model);\n }\n if (that._changeHandler && that._data && that._data instanceof ObservableArray && !(that.options.useRanges && that.options.serverPaging)) {\n that._data.unbind(CHANGE, that._changeHandler);\n } else {\n that._changeHandler = proxy(that._change, that);\n }\n return data.bind(CHANGE, that._changeHandler);\n },\n _updateTotalForAction: function (action, items) {\n var that = this;\n var total = parseInt(that._total, 10);\n if (!isNumber(that._total)) {\n total = parseInt(that._pristineTotal, 10);\n }\n if (action === 'add') {\n total += items.length;\n } else if (action === 'remove') {\n total -= items.length;\n } else if (action !== 'itemchange' && action !== 'sync' && !that.options.serverPaging) {\n total = that._pristineTotal;\n } else if (action === 'sync') {\n total = that._pristineTotal = parseInt(that._total, 10);\n }\n that._total = total;\n },\n _change: function (e) {\n var that = this, idx, length, action = e ? e.action : '';\n if (action === 'remove') {\n for (idx = 0, length = e.items.length; idx < length; idx++) {\n if (!e.items[idx].isNew || !e.items[idx].isNew()) {\n that._destroyed.push(e.items[idx]);\n }\n }\n }\n if (that.options.autoSync && (action === 'add' || action === 'remove' || action === 'itemchange')) {\n var handler = function (args) {\n if (args.action === 'sync') {\n that.unbind('change', handler);\n that._updateTotalForAction(action, e.items);\n }\n };\n that.first('change', handler);\n that.sync();\n } else {\n that._updateTotalForAction(action, e ? e.items : []);\n that._process(that._data, e);\n }\n },\n _calculateAggregates: function (data, options) {\n options = options || {};\n var query = new Query(data), aggregates = options.aggregate, filter = options.filter;\n if (filter) {\n query = query.filter(filter);\n }\n return query.aggregate(aggregates);\n },\n _process: function (data, e) {\n var that = this, options = {}, result;\n if (that.options.serverPaging !== true) {\n options.skip = that._skip;\n options.take = that._take || that._pageSize;\n if (options.skip === undefined && that._page !== undefined && that._pageSize !== undefined) {\n options.skip = (that._page - 1) * that._pageSize;\n }\n if (that.options.useRanges) {\n options.skip = that.currentRangeStart();\n }\n }\n if (that.options.serverSorting !== true) {\n options.sort = that._sort;\n }\n if (that.options.serverFiltering !== true) {\n options.filter = that._filter;\n }\n if (that.options.serverGrouping !== true) {\n options.group = that._group;\n }\n if (that.options.serverAggregates !== true) {\n options.aggregate = that._aggregate;\n }\n if (that.options.serverGrouping) {\n that._clearEmptyGroups(data);\n }\n options.groupPaging = that._groupPaging;\n if (that._isGroupPaged() && e && (e.action === 'page' || e.action === 'expandGroup' || e.action === 'collapseGroup')) {\n result = that._queryProcess(data, { aggregate: that._aggregate });\n } else {\n result = that._queryProcess(data, options);\n }\n if (that.options.serverAggregates !== true) {\n that._aggregateResult = that._calculateAggregates(result.dataToAggregate || data, options);\n }\n that._setView(result, options, e);\n that._setFilterTotal(result.total, false);\n e = e || {};\n e.items = e.items || that._view;\n that.trigger(CHANGE, e);\n },\n _setView: function (result, options, e) {\n var that = this;\n if (that._isGroupPaged() && !that._isServerGrouped()) {\n if (e && (e.action === 'page' || e.action === 'expandGroup' || e.action === 'collapseGroup')) {\n that.view(result.data);\n that._updateOuterRangesLength();\n } else {\n that._ranges = [];\n var query = new Query(result.data);\n that._addRange(that._observe(result.data));\n if (options.skip + options.take > result.data.length) {\n options.skip = result.data.length - options.take;\n }\n that.view(query.range(options.skip, options.take).toArray());\n }\n } else {\n that.view(result.data);\n }\n },\n _clearEmptyGroups: function (data) {\n for (var idx = data.length - 1; idx >= 0; idx--) {\n var group = data[idx];\n if (group.hasSubgroups) {\n this._clearEmptyGroups(group.items);\n } else {\n if (group.items && !group.items.length) {\n splice.apply(group.parent(), [\n idx,\n 1\n ]);\n }\n }\n }\n },\n _queryProcess: function (data, options) {\n if (this.options.inPlaceSort) {\n return Query.process(data, options, this.options.inPlaceSort);\n } else {\n return Query.process(data, options);\n }\n },\n _mergeState: function (options) {\n var that = this;\n if (options !== undefined) {\n that._pageSize = options.pageSize;\n that._page = options.page;\n that._sort = options.sort;\n that._filter = options.filter;\n that._group = options.group;\n that._aggregate = options.aggregate;\n that._skip = that._currentRangeStart = options.skip;\n that._take = options.take;\n if (that._skip === undefined) {\n that._skip = that._currentRangeStart = that.skip();\n options.skip = that.skip();\n }\n if (that._take === undefined && that._pageSize !== undefined) {\n that._take = that._pageSize;\n options.take = that._take;\n }\n if (options.sort) {\n that._sort = options.sort = normalizeSort(options.sort);\n that._sortFields = sortFields(options.sort);\n }\n if (options.filter) {\n that._filter = options.filter = that.options.accentFoldingFiltering && !$.isEmptyObject(options.filter) ? $.extend({}, normalizeFilter(options.filter), { accentFoldingFiltering: that.options.accentFoldingFiltering }) : normalizeFilter(options.filter);\n }\n if (options.group) {\n that._group = options.group = normalizeGroup(options.group);\n }\n if (options.aggregate) {\n that._aggregate = options.aggregate = normalizeAggregate(options.aggregate);\n }\n }\n return options;\n },\n query: function (options) {\n var result;\n var remote = this.options.serverSorting || this.options.serverPaging || this.options.serverFiltering || this.options.serverGrouping || this.options.serverAggregates;\n if (remote || (this._data === undefined || this._data.length === 0) && !this._destroyed.length) {\n if (this.options.endless) {\n var moreItemsCount = options.pageSize - this.pageSize();\n if (moreItemsCount > 0) {\n moreItemsCount = this.pageSize();\n options.page = options.pageSize / moreItemsCount;\n options.pageSize = moreItemsCount;\n } else {\n options.page = 1;\n this.options.endless = false;\n }\n }\n return this.read(this._mergeState(options));\n }\n var isPrevented = this.trigger(REQUESTSTART, { type: 'read' });\n if (!isPrevented) {\n this.trigger(PROGRESS);\n if (options) {\n options.groupPaging = this._groupPaging;\n }\n result = this._queryProcess(this._data, this._mergeState(options));\n this._setFilterTotal(result.total, true);\n this._aggregateResult = this._calculateAggregates(result.dataToAggregate || this._data, options);\n this._setView(result, options);\n this.trigger(REQUESTEND, { type: 'read' });\n this.trigger(CHANGE, {\n items: result.data,\n action: options ? options.action : ''\n });\n }\n return $.Deferred().resolve(isPrevented).promise();\n },\n _hasExpandedSubGroups: function (group) {\n var result = false;\n var length = group.items ? group.items.length : 0;\n if (!group.hasSubgroups) {\n return false;\n }\n for (var i = 0; i < length; i++) {\n if (this._groupsState[group.items[i].uid]) {\n result = true;\n break;\n }\n }\n return result;\n },\n _findGroupedRange: function (data, result, options, parents, callback) {\n var that = this;\n var length = data.length;\n var group;\n var current;\n var itemsLength;\n var groupCount;\n var itemsToSkip;\n for (var i = 0; i < length; i++) {\n group = data[i];\n if (options.taken >= options.take) {\n break;\n }\n if (!that._getGroupByUid(group.uid)) {\n that._groupsFlat.push(group);\n }\n if (that._groupsState[group.uid]) {\n if (that._isServerGroupPaged()) {\n if (that._fetchGroupItems(group, options, parents, callback)) {\n that._fetchingGroupItems = true;\n return;\n }\n groupCount = (group.subgroupCount || group.itemCount) + 1;\n itemsToSkip = options.skip - options.skipped;\n if (!that._hasExpandedSubGroups(group) && itemsToSkip > groupCount) {\n options.skipped += groupCount;\n continue;\n }\n }\n if (options.includeParents && options.skipped < options.skip) {\n options.skipped++;\n group.excludeHeader = true;\n } else if (options.includeParents) {\n options.taken++;\n group.excludeHeader = false;\n }\n if (group.hasSubgroups && group.items && group.items.length) {\n group.currentItems = [];\n if (!parents) {\n parents = [];\n }\n parents.push(group);\n that._findGroupedRange(group.items, group.currentItems, options, parents, callback);\n parents.pop();\n if (group.currentItems.length || options.taken > 0) {\n result.push(group);\n } else {\n group.excludeHeader = false;\n }\n } else {\n current = [];\n itemsLength = group.items.length;\n for (var j = 0; j < itemsLength; j++) {\n if (options.skipped < options.skip) {\n options.skipped++;\n continue;\n }\n if (options.taken >= options.take) {\n break;\n }\n current.push(group.items[j]);\n options.taken++;\n }\n if (current.length || options.taken > 0) {\n group.currentItems = current;\n result.push(group);\n } else {\n group.excludeHeader = false;\n }\n }\n } else {\n if (options.skipped < options.skip) {\n options.skipped++;\n continue;\n }\n result.push(group);\n options.taken++;\n }\n }\n },\n _expandedSubGroupItemsCount: function (group, end, includeCurrentItems) {\n var that = this;\n var result = 0;\n var subGroup;\n var endSpecified = typeof end === 'number';\n var length = endSpecified ? end : group.subgroupCount;\n var temp;\n if (!group.hasSubgroups) {\n return result;\n }\n for (var i = 0; i < length; i++) {\n subGroup = group.items[i];\n if (!subGroup) {\n break;\n }\n if (subGroup.hasSubgroups && that._groupsState[group.uid]) {\n temp = that._expandedSubGroupItemsCount(subGroup, length, true);\n result += temp;\n if (endSpecified) {\n length -= temp;\n }\n } else if (!subGroup.hasSubgroups && that._groupsState[subGroup.uid]) {\n temp = subGroup.items ? subGroup.items.length : 0;\n result += temp;\n if (endSpecified) {\n length -= temp;\n }\n }\n if (includeCurrentItems) {\n result += 1;\n if (endSpecified) {\n length -= 1;\n }\n }\n if (endSpecified && result > length) {\n return result;\n }\n }\n return result;\n },\n _fetchGroupItems: function (group, options, parents, callback) {\n var that = this;\n var groupItemsSkip;\n var firstItem;\n var lastItem;\n var groupItemCount = group.hasSubgroups ? group.subgroupCount : group.itemCount;\n var take = options.take;\n var skipped = options.skipped;\n var pageSize = that.take();\n var expandedSubGroupItemsCount;\n if (options.includeParents) {\n if (skipped < options.skip) {\n skipped += 1;\n } else {\n take -= 1;\n }\n }\n if (!group.items || group.items && !group.items.length) {\n that.getGroupItems(group, options, parents, callback, 0);\n return true;\n } else {\n expandedSubGroupItemsCount = this._expandedSubGroupItemsCount(group, options.skip - skipped);\n groupItemsSkip = Math.max(options.skip - (skipped + expandedSubGroupItemsCount), 0);\n if (groupItemsSkip >= groupItemCount) {\n return false;\n }\n firstItem = group.items[groupItemsSkip];\n lastItem = group.items[Math.min(groupItemsSkip + take, groupItemCount - 1)];\n if (firstItem.notFetched) {\n that.getGroupItems(group, options, parents, callback, math.max(math.floor(groupItemsSkip / pageSize), 0) * pageSize);\n return true;\n }\n if (lastItem.notFetched) {\n that.getGroupItems(group, options, parents, callback, math.max(math.floor((groupItemsSkip + pageSize) / pageSize), 0) * pageSize);\n return true;\n }\n }\n },\n getGroupItems: function (group, options, parents, callback, groupItemsSkip) {\n var that = this;\n var take;\n var filter;\n var data;\n var subgroups;\n if (!group.items) {\n group.items = [];\n }\n take = that.take();\n filter = this._composeItemsFilter(group, parents);\n data = {\n page: math.floor((groupItemsSkip || 0) / (take || 1)) || 1,\n pageSize: take,\n skip: groupItemsSkip,\n take: take,\n filter: filter,\n aggregate: that._aggregate,\n sort: that._sort\n };\n subgroups = that.findSubgroups(group);\n if (subgroups && subgroups.length) {\n data.group = subgroups;\n data.groupPaging = true;\n }\n clearTimeout(that._timeout);\n that._timeout = setTimeout(function () {\n that._queueRequest(data, function () {\n if (!that.trigger(REQUESTSTART, { type: 'read' })) {\n that.transport.read({\n data: data,\n success: that._groupItemsSuccessHandler(group, options.skip, that.take(), callback, groupItemsSkip),\n error: function () {\n var args = slice.call(arguments);\n that.error.apply(that, args);\n }\n });\n } else {\n that._dequeueRequest();\n }\n });\n }, 100);\n },\n _groupItemsSuccessHandler: function (group, skip, take, callback, groupItemsSkip) {\n var that = this;\n var timestamp = that._timeStamp();\n callback = isFunction(callback) ? callback : noop;\n var totalField = that.options.schema && that.options.schema.total ? that.options.schema.total : 'Total';\n return function (data) {\n var temp;\n var model = Model.define(that.options.schema.model);\n var totalCount;\n that._dequeueRequest();\n that.trigger(REQUESTEND, {\n response: data,\n type: 'read'\n });\n if (isFunction(totalField)) {\n totalCount = totalField(data);\n } else {\n totalCount = data[totalField];\n }\n data = that.reader.parse(data);\n if (group.hasSubgroups) {\n temp = that.reader.groups(data);\n group.subgroupCount = totalCount;\n } else {\n temp = that.reader.data(data);\n temp = temp.map(function (item) {\n return new model(item);\n });\n }\n group.items.omitChangeEvent = true;\n for (var i = 0; i < totalCount; i++) {\n if (i >= groupItemsSkip && i < groupItemsSkip + take) {\n group.items.splice(i, 1, temp[i - groupItemsSkip]);\n } else {\n if (!group.items[i]) {\n group.items.splice(i, 0, { notFetched: true });\n }\n }\n }\n group.items.omitChangeEvent = false;\n that._updateRangePristineData(group);\n that._fetchingGroupItems = false;\n if (!group.countAdded) {\n that._serverGroupsTotal += totalCount;\n group.countAdded = true;\n }\n that.range(skip, take, callback, 'expandGroup');\n if (timestamp >= that._currentRequestTimeStamp || !that._skipRequestsInProgress) {\n that.trigger(CHANGE, {});\n }\n };\n },\n findSubgroups: function (group) {\n var indexOfCurrentGroup = this._group.map(function (g) {\n return g.field;\n }).indexOf(group.field);\n return this._group.slice(indexOfCurrentGroup + 1, this._group.length);\n },\n _composeItemsFilter: function (group, parents) {\n var filter = this.filter() || {\n logic: 'and',\n filters: []\n };\n filter = extend(true, {}, filter);\n filter.filters.push({\n field: group.field,\n operator: 'eq',\n value: group.value\n });\n if (parents) {\n for (var i = 0; i < parents.length; i++) {\n filter.filters.push({\n field: parents[i].field,\n operator: 'eq',\n value: parents[i].value\n });\n }\n }\n return filter;\n },\n _updateRangePristineData: function (group) {\n var that = this;\n var ranges = that._ranges;\n var rangesLength = ranges.length;\n var temp;\n var currentGroup;\n var range;\n var dataLength;\n var indexes;\n var currIdx;\n for (var i = 0; i < rangesLength; i++) {\n range = ranges[i];\n dataLength = range.data.length;\n indexes = [];\n temp = null;\n for (var j = 0; j < dataLength; j++) {\n currentGroup = range.data[j];\n indexes.push(j);\n if (currentGroup.uid === group.uid || currentGroup.hasSubgroups && currentGroup.items.length && that._containsSubGroup(currentGroup, group, indexes)) {\n break;\n }\n indexes.pop();\n }\n if (indexes.length) {\n temp = ranges[i].pristineData;\n while (indexes.length > 1) {\n currIdx = indexes.splice(0, 1)[0];\n temp = temp[currIdx].items;\n }\n temp[indexes[0]] = that._cloneGroup(group);\n break;\n }\n }\n },\n _containsSubGroup: function (group, subgroup, indexes) {\n var that = this;\n var length = group.items.length;\n var currentSubGroup;\n if (group.hasSubgroups && length) {\n for (var i = 0; i < length; i++) {\n currentSubGroup = group.items[i];\n indexes.push(i);\n if (currentSubGroup.uid === subgroup.uid) {\n return true;\n } else if (currentSubGroup.hasSubgroups && currentSubGroup.items.length) {\n return that._containsSubGroup(currentSubGroup, subgroup, indexes);\n }\n indexes.pop();\n }\n }\n },\n _cloneGroup: function (group) {\n var that = this;\n group = typeof group.toJSON == 'function' ? group.toJSON() : group;\n if (group.items && group.items.length) {\n group.items = group.items.map(function (item) {\n return that._cloneGroup(item);\n });\n }\n return group;\n },\n _setFilterTotal: function (filterTotal, setDefaultValue) {\n var that = this;\n if (!that.options.serverFiltering) {\n if (filterTotal !== undefined) {\n that._total = filterTotal;\n } else if (setDefaultValue) {\n that._total = that._data.length;\n }\n }\n },\n fetch: function (callback) {\n var that = this;\n var fn = function (isPrevented) {\n if (isPrevented !== true && isFunction(callback)) {\n callback.call(that);\n }\n };\n return this._query().done(fn);\n },\n _query: function (options) {\n var that = this;\n return that.query(extend({}, {\n page: that.page(),\n pageSize: that.pageSize(),\n sort: that.sort(),\n filter: that.filter(),\n group: that.group(),\n aggregate: that.aggregate()\n }, options));\n },\n next: function (options) {\n var that = this, page = that.page(), total = that.total();\n options = options || {};\n if (!page || total && page + 1 > that.totalPages()) {\n return;\n }\n that._skip = that._currentRangeStart = page * that.take();\n page += 1;\n options.page = page;\n that._query(options);\n return page;\n },\n prev: function (options) {\n var that = this, page = that.page();\n options = options || {};\n if (!page || page === 1) {\n return;\n }\n that._skip = that._currentRangeStart = that._skip - that.take();\n page -= 1;\n options.page = page;\n that._query(options);\n return page;\n },\n page: function (val) {\n var that = this, skip;\n if (val !== undefined) {\n val = math.max(math.min(math.max(val, 1), that.totalPages()), 1);\n var take = that.take();\n if (that._isGroupPaged()) {\n val -= 1;\n that.range(val * take, take, null, 'page');\n return;\n }\n that._query(that._pageableQueryOptions({ page: val }));\n return;\n }\n skip = that.skip();\n return skip !== undefined ? math.round((skip || 0) / (that.take() || 1)) + 1 : undefined;\n },\n pageSize: function (val) {\n var that = this;\n if (val !== undefined) {\n that._query(that._pageableQueryOptions({\n pageSize: val,\n page: 1\n }));\n return;\n }\n return that.take();\n },\n sort: function (val) {\n var that = this;\n if (val !== undefined) {\n that.trigger('sort');\n that._query({ sort: val });\n return;\n }\n return that._sort;\n },\n filter: function (val) {\n var that = this;\n if (val === undefined) {\n return that._filter;\n }\n that.trigger('reset');\n that._query({\n filter: val,\n page: 1\n });\n },\n group: function (val) {\n var that = this;\n var options = { group: val };\n if (that._groupPaging) {\n options.page = 1;\n }\n if (val !== undefined) {\n that._query(options);\n return;\n }\n return that._group;\n },\n getGroupsFlat: function (data) {\n var idx, result = [], length;\n for (idx = 0, length = data.length; idx < length; idx++) {\n var group = data[idx];\n if (group.hasSubgroups) {\n result = result.concat(this.getGroupsFlat(group.items));\n }\n result.push(group);\n }\n return result;\n },\n total: function () {\n return parseInt(this._total || 0, 10);\n },\n groupsTotal: function (includeExpanded) {\n var that = this;\n if (!that._group.length) {\n return that.total();\n }\n if (that._isServerGrouped()) {\n if (that._serverGroupsTotal) {\n return that._serverGroupsTotal;\n }\n that._serverGroupsTotal = that.total();\n return that._serverGroupsTotal;\n }\n return that._calculateGroupsTotal(that._ranges.length ? that._ranges[0].data : [], includeExpanded);\n },\n _calculateGroupsTotal: function (groups, includeExpanded, itemsField, ignoreState) {\n var that = this;\n itemsField = itemsField || 'items';\n var total;\n var length;\n if (that._group.length && groups) {\n total = 0;\n length = groups.length;\n for (var i = 0; i < length; i++) {\n total += that.groupCount(groups[i], includeExpanded, itemsField, ignoreState);\n }\n that._groupsTotal = total;\n return total;\n }\n that._groupsTotal = that._data.length;\n return that._groupsTotal;\n },\n groupCount: function (group, includeExpanded, itemsField, ignoreState) {\n var that = this;\n var total = 0;\n if (group.hasSubgroups && that._groupsState[group.uid]) {\n if (includeExpanded && !group.excludeHeader || ignoreState) {\n total += 1;\n }\n group[itemsField].forEach(function (subgroup) {\n total += that.groupCount(subgroup, includeExpanded, itemsField, ignoreState);\n });\n } else {\n if (that._groupsState[group.uid]) {\n if (includeExpanded && !group.excludeHeader || ignoreState) {\n total++;\n }\n total += group[itemsField] ? group[itemsField].length : 0;\n } else {\n total++;\n }\n }\n return total;\n },\n countGroupRange: function (range) {\n var total = 0;\n var length = range.length;\n for (var i = 0; i < length; i++) {\n total += this.groupCount(range[i], true);\n }\n return total;\n },\n aggregate: function (val) {\n var that = this;\n if (val !== undefined) {\n that._query({ aggregate: val });\n return;\n }\n return that._aggregate;\n },\n aggregates: function () {\n var result = this._aggregateResult;\n if (isEmptyObject(result)) {\n result = this._emptyAggregates(this.aggregate());\n }\n return result;\n },\n _emptyAggregates: function (aggregates) {\n var result = {};\n if (!isEmptyObject(aggregates)) {\n var aggregate = {};\n if (!isArray(aggregates)) {\n aggregates = [aggregates];\n }\n for (var idx = 0; idx < aggregates.length; idx++) {\n aggregate[aggregates[idx].aggregate] = 0;\n result[aggregates[idx].field] = aggregate;\n }\n }\n return result;\n },\n _pageableQueryOptions: function (options) {\n return options;\n },\n _wrapInEmptyGroup: function (model) {\n var groups = this.group(), parent, group, idx, length;\n for (idx = groups.length - 1, length = 0; idx >= length; idx--) {\n group = groups[idx];\n parent = {\n value: model.get ? model.get(group.field) : model[group.field],\n field: group.field,\n items: parent ? [parent] : [model],\n hasSubgroups: !!parent,\n aggregates: this._emptyAggregates(group.aggregates)\n };\n }\n return parent;\n },\n totalPages: function () {\n var that = this, pageSize = that.pageSize() || that.total(), total = that._isGroupPaged() ? that.groupsTotal(true) : that.total();\n return math.ceil((total || 0) / pageSize);\n },\n inRange: function (skip, take) {\n var that = this, end = math.min(skip + take, that.total());\n if (!that.options.serverPaging && that._data.length > 0) {\n return true;\n }\n return that._findRange(skip, end).length > 0;\n },\n lastRange: function () {\n var ranges = this._ranges;\n return ranges[ranges.length - 1] || {\n start: 0,\n end: 0,\n data: []\n };\n },\n firstItemUid: function () {\n var ranges = this._ranges;\n return ranges.length && ranges[0].data.length && ranges[0].data[0].uid;\n },\n enableRequestsInProgress: function () {\n this._skipRequestsInProgress = false;\n },\n _timeStamp: function () {\n return new Date().getTime();\n },\n range: function (skip, take, callback, action) {\n this._currentRequestTimeStamp = this._timeStamp();\n this._skipRequestsInProgress = true;\n var total = this._isGroupPaged() ? this.groupsTotal(true) : this.total();\n if (action === 'expandGroup' || action === 'collapseGroup') {\n this._updateOuterRangesLength();\n }\n skip = math.min(skip || 0, total);\n callback = isFunction(callback) ? callback : noop;\n var that = this, pageSkip = math.max(math.floor(skip / take), 0) * take, size = math.min(pageSkip + take, total), data;\n data = that._findRange(skip, math.min(skip + take, total), callback);\n if ((data.length || total === 0) && !that._fetchingGroupItems) {\n that._processRangeData(data, skip, take, that._originalPageSkip || pageSkip, that._originalSize || size, { action: action });\n that._originalPageSkip = null;\n that._originalSize = null;\n callback();\n return;\n }\n if (that._isGroupPaged()) {\n that._originalPageSkip = pageSkip;\n that._originalSize = size;\n pageSkip = math.max(math.floor(that._adjustPageSkip(skip, take) / take), 0) * take;\n size = math.min(pageSkip + take, total);\n }\n if (take !== undefined && !that._fetchingGroupItems) {\n if (that._isGroupPaged() && !that._groupRangeExists(pageSkip, take) || !that._rangeExists(pageSkip, size)) {\n that.prefetch(pageSkip, take, function () {\n if (skip > pageSkip && size < that.total() && !that._rangeExists(size, math.min(size + take, that.total()))) {\n that.prefetch(size, take, function () {\n that.range(skip, take, callback);\n });\n } else {\n that.range(skip, take, callback);\n }\n });\n } else if (pageSkip < skip) {\n that.prefetch(size, take, function () {\n that.range(skip, take, callback);\n });\n }\n }\n },\n _findRange: function (start, end, callback) {\n var that = this, ranges = that._ranges, range, data = [], skipIdx, takeIdx, startIndex, endIndex, rangeData, rangeEnd, processed, options = that.options, remote = options.serverSorting || options.serverPaging || options.serverFiltering || options.serverGrouping || options.serverAggregates, flatData, count, length, groupMapOptions = {\n take: end - start,\n skip: start,\n skipped: 0,\n taken: 0,\n includeParents: true\n }, prevRangeEnd, isGroupPaged = that._isGroupPaged(), startField = isGroupPaged ? 'outerStart' : 'start', endField = isGroupPaged ? 'outerEnd' : 'end', currentDataLength;\n for (skipIdx = 0, length = ranges.length; skipIdx < length; skipIdx++) {\n range = ranges[skipIdx];\n if (isGroupPaged) {\n if (range.outerStart >= end) {\n return [];\n }\n if (start > range.outerEnd) {\n groupMapOptions.skipped += range.outerEnd - (prevRangeEnd || 0);\n prevRangeEnd = range.outerEnd;\n continue;\n }\n if (typeof prevRangeEnd !== 'undefined' && prevRangeEnd != range.outerStart) {\n groupMapOptions.skipped += range.outerStart - prevRangeEnd;\n }\n if (groupMapOptions.skipped > groupMapOptions.skip) {\n return [];\n }\n if (typeof prevRangeEnd === 'undefined' && start > 0 && range.start > 0) {\n groupMapOptions.skipped = range.outerStart;\n }\n takeIdx = skipIdx;\n while (true) {\n this._findGroupedRange(range.data, data, groupMapOptions, null, callback);\n currentDataLength = that._calculateGroupsTotal(data, true, 'currentItems');\n if (currentDataLength >= groupMapOptions.take) {\n return data;\n }\n if (that._fetchingGroupItems) {\n return [];\n }\n takeIdx++;\n if (ranges[takeIdx] && ranges[takeIdx].outerStart === range.outerEnd) {\n range = ranges[takeIdx];\n } else {\n break;\n }\n }\n } else if (start >= range[startField] && start <= range[endField]) {\n count = 0;\n for (takeIdx = skipIdx; takeIdx < length; takeIdx++) {\n range = ranges[takeIdx];\n flatData = that._flatData(range.data, true);\n if (flatData.length && start + count >= range.start) {\n rangeData = range.data;\n rangeEnd = range.end;\n if (!remote) {\n if (options.inPlaceSort) {\n processed = that._queryProcess(range.data, { filter: that.filter() });\n } else {\n var sort = normalizeGroupWithoutCompare(that.group() || []).concat(normalizeSort(that.sort() || []));\n processed = that._queryProcess(range.data, {\n sort: sort,\n filter: that.filter()\n });\n }\n flatData = rangeData = processed.data;\n if (processed.total !== undefined) {\n rangeEnd = processed.total;\n }\n }\n startIndex = 0;\n if (start + count > range.start) {\n startIndex = start + count - range.start;\n }\n endIndex = flatData.length;\n if (rangeEnd > end) {\n endIndex = endIndex - (rangeEnd - end);\n }\n count += endIndex - startIndex;\n data = that._mergeGroups(data, rangeData, startIndex, endIndex);\n if (end <= range.end && count == end - start) {\n return data;\n }\n }\n }\n break;\n }\n prevRangeEnd = range.outerEnd;\n }\n return [];\n },\n _getRangesMismatch: function (pageSkip) {\n var that = this;\n var ranges = that._ranges;\n var mismatch = 0;\n var i = 0;\n while (true) {\n var range = ranges[i];\n if (!range || range.outerStart > pageSkip) {\n break;\n }\n if (range.outerEnd != range.end) {\n mismatch = range.outerEnd - range.end;\n }\n i++;\n }\n return mismatch;\n },\n _mergeGroups: function (data, range, skip, take) {\n if (this._isServerGrouped()) {\n var temp = range.toJSON(), prevGroup;\n if (data.length) {\n prevGroup = data[data.length - 1];\n }\n mergeGroups(prevGroup, temp, skip, take);\n return data.concat(temp);\n }\n return data.concat(range.slice(skip, take));\n },\n _processRangeData: function (data, skip, take, pageSkip, size, eventData) {\n var that = this;\n that._pending = undefined;\n that._skip = skip > that.skip() && !that._omitPrefetch ? math.min(size, (that.totalPages() - 1) * that.take()) : pageSkip;\n that._currentRangeStart = skip;\n that._take = take;\n var paging = that.options.serverPaging;\n var sorting = that.options.serverSorting;\n var filtering = that.options.serverFiltering;\n var aggregates = that.options.serverAggregates;\n try {\n that.options.serverPaging = true;\n if (!that._isServerGrouped() && !(that.group() && that.group().length)) {\n that.options.serverSorting = true;\n }\n that.options.serverFiltering = true;\n that.options.serverPaging = true;\n that.options.serverAggregates = true;\n if (paging) {\n that._detachObservableParents();\n that._data = data = that._observe(data);\n }\n that._process(data, eventData);\n } finally {\n that.options.serverPaging = paging;\n that.options.serverSorting = sorting;\n that.options.serverFiltering = filtering;\n that.options.serverAggregates = aggregates;\n }\n },\n skip: function () {\n var that = this;\n if (that._skip === undefined) {\n return that._page !== undefined ? (that._page - 1) * (that.take() || 1) : undefined;\n }\n return that._skip;\n },\n currentRangeStart: function () {\n return this._currentRangeStart || 0;\n },\n take: function () {\n return this._take || this._pageSize;\n },\n _prefetchSuccessHandler: function (skip, size, callback, force) {\n var that = this;\n var timestamp = that._timeStamp();\n return function (data) {\n var found = false, range = {\n start: skip,\n end: size,\n data: [],\n timestamp: that._timeStamp()\n }, idx, length, temp;\n that._dequeueRequest();\n that.trigger(REQUESTEND, {\n response: data,\n type: 'read'\n });\n data = that.reader.parse(data);\n temp = that._readData(data);\n if (temp.length) {\n for (idx = 0, length = that._ranges.length; idx < length; idx++) {\n if (that._ranges[idx].start === skip) {\n found = true;\n range = that._ranges[idx];\n if (!that._isGroupPaged()) {\n range.pristineData = temp;\n range.data = that._observe(temp);\n range.end = range.start + that._flatData(range.data, true).length;\n that._sortRanges();\n }\n break;\n }\n }\n if (!found) {\n that._addRange(that._observe(temp), skip);\n }\n }\n that._total = that.reader.total(data);\n if (force || (timestamp >= that._currentRequestTimeStamp || !that._skipRequestsInProgress)) {\n if (callback && temp.length) {\n callback();\n } else {\n that.trigger(CHANGE, {});\n }\n }\n };\n },\n prefetch: function (skip, take, callback) {\n var that = this, size = math.min(skip + take, that.total()), options = {\n take: take,\n skip: skip,\n page: skip / take + 1,\n pageSize: take,\n sort: that._sort,\n filter: that._filter,\n group: that._group,\n aggregate: that._aggregate\n };\n if (that._isGroupPaged() && !that._isServerGrouped() && that._groupRangeExists(skip, size)) {\n if (callback) {\n callback();\n }\n return;\n }\n if (that._isServerGroupPaged() && !that._groupRangeExists(skip, size) || !that._rangeExists(skip, size)) {\n clearTimeout(that._timeout);\n that._timeout = setTimeout(function () {\n that._queueRequest(options, function () {\n if (!that.trigger(REQUESTSTART, { type: 'read' })) {\n if (that._omitPrefetch) {\n that.trigger(PROGRESS);\n }\n that.transport.read({\n data: that._params(options),\n success: that._prefetchSuccessHandler(skip, size, callback),\n error: function () {\n var args = slice.call(arguments);\n that.error.apply(that, args);\n }\n });\n } else {\n that._dequeueRequest();\n }\n });\n }, 100);\n } else if (callback) {\n callback();\n }\n },\n _multiplePrefetch: function (skip, take, callback) {\n var that = this, size = math.min(skip + take, that.total()), options = {\n take: take,\n skip: skip,\n page: skip / take + 1,\n pageSize: take,\n sort: that._sort,\n filter: that._filter,\n group: that._group,\n aggregate: that._aggregate\n };\n if (!that._rangeExists(skip, size)) {\n if (!that.trigger(REQUESTSTART, { type: 'read' })) {\n that.transport.read({\n data: that._params(options),\n success: that._prefetchSuccessHandler(skip, size, callback, true)\n });\n }\n } else if (callback) {\n callback();\n }\n },\n _adjustPageSkip: function (start, take) {\n var that = this;\n var prevRange = that._getPrevRange(start);\n var result;\n var total = that.total();\n var mismatch;\n if (prevRange) {\n mismatch = that._getRangesMismatch(start);\n if (!mismatch) {\n return start;\n }\n start -= mismatch;\n }\n result = math.max(math.floor(start / take), 0) * take;\n if (result > total) {\n while (true) {\n result -= take;\n if (result < total) {\n break;\n }\n }\n }\n return result;\n },\n _getNextRange: function (end) {\n var that = this, ranges = that._ranges, idx, length;\n for (idx = 0, length = ranges.length; idx < length; idx++) {\n if (ranges[idx].start <= end && ranges[idx].end >= end) {\n return ranges[idx];\n }\n }\n },\n _getPrevRange: function (start) {\n var that = this, ranges = that._ranges, idx, range, length = ranges.length;\n for (idx = length - 1; idx >= 0; idx--) {\n if (ranges[idx].outerStart <= start) {\n range = ranges[idx];\n break;\n }\n }\n return range;\n },\n _rangeExists: function (start, end) {\n var that = this, ranges = that._ranges, idx, length;\n for (idx = 0, length = ranges.length; idx < length; idx++) {\n if (ranges[idx].start <= start && ranges[idx].end >= end) {\n return true;\n }\n }\n return false;\n },\n _groupRangeExists: function (start, end) {\n var that = this, ranges = that._ranges, idx, length, availableItemsCount = 0, total = that.groupsTotal(true);\n if (end > total && !that._isServerGrouped()) {\n end = total;\n }\n for (idx = 0, length = ranges.length; idx < length; idx++) {\n var range = ranges[idx];\n if (range.outerStart <= start && range.outerEnd >= start) {\n availableItemsCount += range.outerEnd - start;\n } else if (range.outerStart <= end && range.outerEnd >= end) {\n availableItemsCount += end - range.outerStart;\n }\n }\n return availableItemsCount >= end - start;\n },\n _getCurrentRangeSpan: function () {\n var that = this;\n var ranges = that._ranges;\n var start = that.currentRangeStart();\n var end = start + (that.take() || 0);\n var rangeSpan = [];\n var range;\n var idx;\n var length = ranges.length;\n for (idx = 0; idx < length; idx++) {\n range = ranges[idx];\n if (range.start <= start && range.end >= start || range.start >= start && range.start <= end) {\n rangeSpan.push(range);\n }\n }\n return rangeSpan;\n },\n _removeModelFromRanges: function (model) {\n var that = this;\n var range;\n for (var idx = 0, length = this._ranges.length; idx < length; idx++) {\n range = this._ranges[idx];\n that._removeModelFromRange(range, model);\n }\n that._updateRangesLength();\n },\n _removeModelFromRange: function (range, model) {\n this._eachItem(range.data, function (data) {\n if (!data) {\n return;\n }\n for (var idx = 0; idx < data.length; idx++) {\n var dataItem = data[idx];\n if (dataItem.uid && dataItem.uid == model.uid) {\n [].splice.call(data, idx, 1);\n break;\n }\n }\n });\n },\n _insertModelInRange: function (index, model) {\n var that = this;\n var ranges = that._ranges || [];\n var rangesLength = ranges.length;\n var range;\n var i;\n for (i = 0; i < rangesLength; i++) {\n range = ranges[i];\n if (range.start <= index && range.end >= index) {\n if (!that._getByUid(model.uid, range.data)) {\n if (that._isServerGrouped()) {\n range.data.splice(index, 0, that._wrapInEmptyGroup(model));\n } else {\n range.data.splice(index, 0, model);\n }\n }\n break;\n }\n }\n that._updateRangesLength();\n },\n _updateRangesLength: function () {\n var that = this;\n var ranges = that._ranges || [];\n var rangesLength = ranges.length;\n var mismatchFound = false;\n var mismatchLength = 0;\n var lengthDifference = 0;\n var rangeLength;\n var range;\n var i;\n for (i = 0; i < rangesLength; i++) {\n range = ranges[i];\n rangeLength = that._isGroupPaged() ? range.data.length : that._flatData(range.data, true).length;\n lengthDifference = rangeLength - math.abs(range.end - range.start);\n if (!mismatchFound && lengthDifference !== 0) {\n mismatchFound = true;\n mismatchLength = lengthDifference;\n range.end += mismatchLength;\n continue;\n }\n if (mismatchFound) {\n range.start += mismatchLength;\n range.end += mismatchLength;\n }\n }\n },\n _updateOuterRangesLength: function () {\n var that = this;\n var ranges = that._ranges || [];\n var rangesLength = ranges.length;\n var mismatchLength = 0;\n var range;\n var i;\n var prevRange;\n var rangeLength;\n for (i = 0; i < rangesLength; i++) {\n range = ranges[i];\n rangeLength = that._isGroupPaged() ? that._calculateGroupsTotal(range.data, true, 'items', true) : that._flatData(range.data, true).length;\n if (prevRange) {\n if (prevRange.end != range.start) {\n mismatchLength = range.start - prevRange.end;\n }\n range.outerStart = prevRange.outerEnd + mismatchLength;\n mismatchLength = 0;\n } else {\n range.outerStart = range.start;\n }\n range.outerEnd = range.outerStart + rangeLength;\n prevRange = range;\n }\n }\n });\n var Transport = {};\n Transport.create = function (options, data, dataSource) {\n var transport, transportOptions = options.transport ? $.extend({}, options.transport) : null;\n if (transportOptions) {\n transportOptions.read = typeof transportOptions.read === STRING ? { url: transportOptions.read } : transportOptions.read;\n if (options.type === 'jsdo') {\n transportOptions.dataSource = dataSource;\n }\n if (options.type) {\n kendo.data.transports = kendo.data.transports || {};\n kendo.data.schemas = kendo.data.schemas || {};\n if (!kendo.data.transports[options.type]) {\n kendo.logToConsole('Unknown DataSource transport type \\'' + options.type + '\\'.\\nVerify that registration scripts for this type are included after Kendo UI on the page.', 'warn');\n } else if (!isPlainObject(kendo.data.transports[options.type])) {\n transport = new kendo.data.transports[options.type](extend(transportOptions, { data: data }));\n } else {\n transportOptions = extend(true, {}, kendo.data.transports[options.type], transportOptions);\n }\n options.schema = extend(true, {}, kendo.data.schemas[options.type], options.schema);\n }\n if (!transport) {\n transport = isFunction(transportOptions.read) ? transportOptions : new RemoteTransport(transportOptions);\n }\n } else {\n transport = new LocalTransport({ data: options.data || [] });\n }\n return transport;\n };\n DataSource.create = function (options) {\n if (isArray(options) || options instanceof ObservableArray) {\n options = { data: options };\n }\n var dataSource = options || {}, data = dataSource.data, fields = dataSource.fields, table = dataSource.table, select = dataSource.select, idx, length, model = {}, field;\n if (!data && fields && !dataSource.transport) {\n if (table) {\n data = inferTable(table, fields);\n } else if (select) {\n data = inferSelect(select, fields);\n if (dataSource.group === undefined && data[0] && data[0].optgroup !== undefined) {\n dataSource.group = 'optgroup';\n }\n }\n }\n if (kendo.data.Model && fields && (!dataSource.schema || !dataSource.schema.model)) {\n for (idx = 0, length = fields.length; idx < length; idx++) {\n field = fields[idx];\n if (field.type) {\n model[field.field] = field;\n }\n }\n if (!isEmptyObject(model)) {\n dataSource.schema = extend(true, dataSource.schema, { model: { fields: model } });\n }\n }\n dataSource.data = data;\n select = null;\n dataSource.select = null;\n table = null;\n dataSource.table = null;\n return dataSource instanceof DataSource ? dataSource : new DataSource(dataSource);\n };\n function inferSelect(select, fields) {\n select = $(select)[0];\n var options = select.options;\n var firstField = fields[0];\n var secondField = fields[1];\n var data = [];\n var idx, length;\n var optgroup;\n var option;\n var record;\n var value;\n for (idx = 0, length = options.length; idx < length; idx++) {\n record = {};\n option = options[idx];\n optgroup = option.parentNode;\n if (optgroup === select) {\n optgroup = null;\n }\n if (option.disabled || optgroup && optgroup.disabled) {\n continue;\n }\n if (optgroup) {\n record.optgroup = optgroup.label;\n }\n record[firstField.field] = option.text;\n value = option.attributes.value;\n if (value && value.specified) {\n value = option.value;\n } else {\n value = option.text;\n }\n record[secondField.field] = value;\n data.push(record);\n }\n return data;\n }\n function inferTable(table, fields) {\n var tbody = $(table)[0].tBodies[0], rows = tbody ? tbody.rows : [], idx, length, fieldIndex, fieldCount = fields.length, data = [], cells, record, cell, empty;\n for (idx = 0, length = rows.length; idx < length; idx++) {\n record = {};\n empty = true;\n cells = rows[idx].cells;\n for (fieldIndex = 0; fieldIndex < fieldCount; fieldIndex++) {\n cell = cells[fieldIndex];\n if (cell.nodeName.toLowerCase() !== 'th') {\n empty = false;\n record[fields[fieldIndex].field] = cell.innerHTML;\n }\n }\n if (!empty) {\n data.push(record);\n }\n }\n return data;\n }\n var Node = Model.define({\n idField: 'id',\n init: function (value) {\n var that = this, hasChildren = that.hasChildren || value && value.hasChildren, childrenField = 'items', childrenOptions = {};\n kendo.data.Model.fn.init.call(that, value);\n if (typeof that.children === STRING) {\n childrenField = that.children;\n }\n childrenOptions = {\n schema: {\n data: childrenField,\n model: {\n hasChildren: hasChildren,\n id: that.idField,\n fields: that.fields\n }\n }\n };\n if (typeof that.children !== STRING) {\n extend(childrenOptions, that.children);\n }\n childrenOptions.data = value;\n if (!hasChildren) {\n hasChildren = childrenOptions.schema.data;\n }\n if (typeof hasChildren === STRING) {\n hasChildren = kendo.getter(hasChildren);\n }\n if (isFunction(hasChildren)) {\n var hasChildrenObject = hasChildren.call(that, that);\n if (hasChildrenObject && hasChildrenObject.length === 0) {\n that.hasChildren = false;\n } else {\n that.hasChildren = !!hasChildrenObject;\n }\n }\n that._childrenOptions = childrenOptions;\n if (that.hasChildren) {\n that._initChildren();\n }\n that._loaded = !!(value && value._loaded);\n },\n _initChildren: function () {\n var that = this;\n var children, transport, parameterMap;\n if (!(that.children instanceof HierarchicalDataSource)) {\n children = that.children = new HierarchicalDataSource(that._childrenOptions);\n transport = children.transport;\n parameterMap = transport.parameterMap;\n transport.parameterMap = function (data, type) {\n data[that.idField || 'id'] = that.id;\n if (parameterMap) {\n data = parameterMap.call(that, data, type);\n }\n return data;\n };\n children.parent = function () {\n return that;\n };\n children.bind(CHANGE, function (e) {\n e.node = e.node || that;\n that.trigger(CHANGE, e);\n });\n children.bind(ERROR, function (e) {\n var collection = that.parent();\n if (collection) {\n e.node = e.node || that;\n collection.trigger(ERROR, e);\n }\n });\n that._updateChildrenField();\n }\n },\n append: function (model) {\n this._initChildren();\n this.loaded(true);\n this.children.add(model);\n },\n hasChildren: false,\n level: function () {\n var parentNode = this.parentNode(), level = 0;\n while (parentNode && parentNode.parentNode) {\n level++;\n parentNode = parentNode.parentNode ? parentNode.parentNode() : null;\n }\n return level;\n },\n _updateChildrenField: function () {\n var fieldName = this._childrenOptions.schema.data;\n this[fieldName || 'items'] = this.children.data();\n },\n _childrenLoaded: function () {\n this._loaded = true;\n this._updateChildrenField();\n },\n load: function () {\n var options = {};\n var method = '_query';\n var children, promise;\n if (this.hasChildren) {\n this._initChildren();\n children = this.children;\n options[this.idField || 'id'] = this.id;\n if (!this._loaded) {\n children._data = undefined;\n method = 'read';\n }\n children.one(CHANGE, proxy(this._childrenLoaded, this));\n if (this._matchFilter) {\n options.filter = {\n field: '_matchFilter',\n operator: 'eq',\n value: true\n };\n }\n promise = children[method](options);\n } else {\n this.loaded(true);\n }\n return promise || $.Deferred().resolve().promise();\n },\n parentNode: function () {\n var array = this.parent();\n return array.parent();\n },\n loaded: function (value) {\n if (value !== undefined) {\n this._loaded = value;\n } else {\n return this._loaded;\n }\n },\n shouldSerialize: function (field) {\n return Model.fn.shouldSerialize.call(this, field) && field !== 'children' && field !== '_loaded' && field !== 'hasChildren' && field !== '_childrenOptions';\n }\n });\n function dataMethod(name) {\n return function () {\n var data = this._data, result = DataSource.fn[name].apply(this, slice.call(arguments));\n if (this._data != data) {\n this._attachBubbleHandlers();\n }\n return result;\n };\n }\n var HierarchicalDataSource = DataSource.extend({\n init: function (options) {\n var node = Node.define({ children: options });\n if (options.filter && !options.serverFiltering) {\n this._hierarchicalFilter = options.filter;\n options.filter = null;\n }\n DataSource.fn.init.call(this, extend(true, {}, {\n schema: {\n modelBase: node,\n model: node\n }\n }, options));\n this._attachBubbleHandlers();\n },\n _attachBubbleHandlers: function () {\n var that = this;\n that._data.bind(ERROR, function (e) {\n that.trigger(ERROR, e);\n });\n },\n read: function (data) {\n var result = DataSource.fn.read.call(this, data);\n if (this._hierarchicalFilter) {\n if (this._data && this._data.length > 0) {\n this.filter(this._hierarchicalFilter);\n } else {\n this.options.filter = this._hierarchicalFilter;\n this._filter = normalizeFilter(this.options.filter);\n this._hierarchicalFilter = null;\n }\n }\n return result;\n },\n remove: function (node) {\n var parentNode = node.parentNode(), dataSource = this, result;\n if (parentNode && parentNode._initChildren) {\n dataSource = parentNode.children;\n }\n result = DataSource.fn.remove.call(dataSource, node);\n if (parentNode && !dataSource.data().length) {\n parentNode.hasChildren = false;\n }\n return result;\n },\n success: dataMethod('success'),\n data: dataMethod('data'),\n insert: function (index, model) {\n var parentNode = this.parent();\n if (parentNode && parentNode._initChildren) {\n parentNode.hasChildren = true;\n parentNode._initChildren();\n }\n return DataSource.fn.insert.call(this, index, model);\n },\n filter: function (val) {\n if (val === undefined) {\n return this._filter;\n }\n if (!this.options.serverFiltering && this._markHierarchicalQuery(val)) {\n val = {\n logic: 'or',\n filters: [\n val,\n {\n field: '_matchFilter',\n operator: 'equals',\n value: true\n }\n ]\n };\n }\n this.trigger('reset');\n this._query({\n filter: val,\n page: 1\n });\n },\n _markHierarchicalQuery: function (expressions) {\n var compiled;\n var predicate;\n var fields;\n var operators;\n var filter;\n var accentFoldingFiltering = this.options.accentFoldingFiltering;\n expressions = accentFoldingFiltering ? $.extend({}, normalizeFilter(expressions), { accentFoldingFiltering: accentFoldingFiltering }) : normalizeFilter(expressions);\n if (!expressions || expressions.filters.length === 0) {\n this._updateHierarchicalFilter(function () {\n return true;\n });\n return false;\n }\n compiled = Query.filterExpr(expressions);\n fields = compiled.fields;\n operators = compiled.operators;\n predicate = filter = new Function('d, __f, __o', 'return ' + compiled.expression);\n if (fields.length || operators.length) {\n filter = function (d) {\n return predicate(d, fields, operators);\n };\n }\n this._updateHierarchicalFilter(filter);\n return true;\n },\n _updateHierarchicalFilter: function (filter) {\n var current;\n var data = this._data;\n var result = false;\n for (var idx = 0; idx < data.length; idx++) {\n current = data[idx];\n if (current.hasChildren) {\n current._matchFilter = current.children._updateHierarchicalFilter(filter);\n if (!current._matchFilter) {\n current._matchFilter = filter(current);\n }\n } else {\n current._matchFilter = filter(current);\n }\n if (current._matchFilter) {\n result = true;\n }\n }\n return result;\n },\n _find: function (method, value) {\n var idx, length, node, children;\n var data = this._data;\n if (!data) {\n return;\n }\n node = DataSource.fn[method].call(this, value);\n if (node) {\n return node;\n }\n data = this._flatData(this._data);\n for (idx = 0, length = data.length; idx < length; idx++) {\n children = data[idx].children;\n if (!(children instanceof HierarchicalDataSource)) {\n continue;\n }\n node = children[method](value);\n if (node) {\n return node;\n }\n }\n },\n get: function (id) {\n return this._find('get', id);\n },\n getByUid: function (uid) {\n return this._find('getByUid', uid);\n }\n });\n function inferList(list, fields) {\n var items = $(list).children(), idx, length, data = [], record, textField = fields[0].field, urlField = fields[1] && fields[1].field, spriteCssClassField = fields[2] && fields[2].field, imageUrlField = fields[3] && fields[3].field, item, id, textChild, className, children;\n function elements(collection, tagName) {\n return collection.filter(tagName).add(collection.find(tagName));\n }\n for (idx = 0, length = items.length; idx < length; idx++) {\n record = { _loaded: true };\n item = items.eq(idx);\n textChild = item[0].firstChild;\n children = item.children();\n list = children.filter('ul');\n children = children.filter(':not(ul)');\n id = item.attr('data-id');\n if (id) {\n record.id = id;\n }\n if (textChild) {\n record[textField] = textChild.nodeType == 3 ? textChild.nodeValue : children.text();\n }\n if (urlField) {\n record[urlField] = elements(children, 'a').attr('href');\n }\n if (imageUrlField) {\n record[imageUrlField] = elements(children, 'img').attr('src');\n }\n if (spriteCssClassField) {\n className = elements(children, '.k-sprite').prop('className');\n record[spriteCssClassField] = className && kendo.trim(className.replace('k-sprite', ''));\n }\n if (list.length) {\n record.items = inferList(list.eq(0), fields);\n }\n if (item.attr('data-hasChildren') == 'true') {\n record.hasChildren = true;\n }\n data.push(record);\n }\n return data;\n }\n HierarchicalDataSource.create = function (options) {\n options = options && options.push ? { data: options } : options;\n var dataSource = options || {}, data = dataSource.data, fields = dataSource.fields, list = dataSource.list;\n if (data && data._dataSource) {\n return data._dataSource;\n }\n if (!data && fields && !dataSource.transport) {\n if (list) {\n data = inferList(list, fields);\n }\n }\n dataSource.data = data;\n return dataSource instanceof HierarchicalDataSource ? dataSource : new HierarchicalDataSource(dataSource);\n };\n var Buffer = kendo.Observable.extend({\n init: function (dataSource, viewSize, disablePrefetch) {\n kendo.Observable.fn.init.call(this);\n this._prefetching = false;\n this.dataSource = dataSource;\n this.prefetch = !disablePrefetch;\n var buffer = this;\n dataSource.bind('change', function () {\n buffer._change();\n });\n dataSource.bind('reset', function () {\n buffer._reset();\n });\n this._syncWithDataSource();\n this.setViewSize(viewSize);\n },\n setViewSize: function (viewSize) {\n this.viewSize = viewSize;\n this._recalculate();\n },\n at: function (index) {\n var pageSize = this.pageSize, itemPresent = true;\n if (index >= this.total()) {\n this.trigger('endreached', { index: index });\n return null;\n }\n if (!this.useRanges) {\n return this.dataSource.view()[index];\n }\n if (this.useRanges) {\n if (index < this.dataOffset || index >= this.skip + pageSize) {\n itemPresent = this.range(Math.floor(index / pageSize) * pageSize);\n }\n if (index === this.prefetchThreshold) {\n this._prefetch();\n }\n if (index === this.midPageThreshold) {\n this.range(this.nextMidRange, true);\n } else if (index === this.nextPageThreshold) {\n this.range(this.nextFullRange);\n } else if (index === this.pullBackThreshold) {\n if (this.offset === this.skip) {\n this.range(this.previousMidRange);\n } else {\n this.range(this.previousFullRange);\n }\n }\n if (itemPresent) {\n return this.dataSource.at(index - this.dataOffset);\n } else {\n this.trigger('endreached', { index: index });\n return null;\n }\n }\n },\n indexOf: function (item) {\n return this.dataSource.data().indexOf(item) + this.dataOffset;\n },\n total: function () {\n return parseInt(this.dataSource.total(), 10);\n },\n next: function () {\n var buffer = this, pageSize = buffer.pageSize, offset = buffer.skip - buffer.viewSize + pageSize, pageSkip = math.max(math.floor(offset / pageSize), 0) * pageSize;\n this.offset = offset;\n this.dataSource.prefetch(pageSkip, pageSize, function () {\n buffer._goToRange(offset, true);\n });\n },\n range: function (offset, nextRange) {\n if (this.offset === offset) {\n return true;\n }\n var buffer = this, pageSize = this.pageSize, pageSkip = math.max(math.floor(offset / pageSize), 0) * pageSize, dataSource = this.dataSource;\n if (nextRange) {\n pageSkip += pageSize;\n }\n if (dataSource.inRange(offset, pageSize)) {\n this.offset = offset;\n this._recalculate();\n this._goToRange(offset);\n return true;\n } else if (this.prefetch) {\n dataSource.prefetch(pageSkip, pageSize, function () {\n buffer.offset = offset;\n buffer._recalculate();\n buffer._goToRange(offset, true);\n });\n return false;\n }\n return true;\n },\n syncDataSource: function () {\n var offset = this.offset;\n this.offset = null;\n this.range(offset);\n },\n destroy: function () {\n this.unbind();\n },\n _prefetch: function () {\n var buffer = this, pageSize = this.pageSize, prefetchOffset = this.skip + pageSize, dataSource = this.dataSource;\n if (!dataSource.inRange(prefetchOffset, pageSize) && !this._prefetching && this.prefetch) {\n this._prefetching = true;\n this.trigger('prefetching', {\n skip: prefetchOffset,\n take: pageSize\n });\n dataSource.prefetch(prefetchOffset, pageSize, function () {\n buffer._prefetching = false;\n buffer.trigger('prefetched', {\n skip: prefetchOffset,\n take: pageSize\n });\n });\n }\n },\n _goToRange: function (offset, expanding) {\n if (this.offset !== offset) {\n return;\n }\n this.dataOffset = offset;\n this._expanding = expanding;\n this.dataSource.range(offset, this.pageSize);\n this.dataSource.enableRequestsInProgress();\n },\n _reset: function () {\n this._syncPending = true;\n },\n _change: function () {\n var dataSource = this.dataSource;\n this.length = this.useRanges ? dataSource.lastRange().end : dataSource.view().length;\n if (this._syncPending) {\n this._syncWithDataSource();\n this._recalculate();\n this._syncPending = false;\n this.trigger('reset', { offset: this.offset });\n }\n this.trigger('resize');\n if (this._expanding) {\n this.trigger('expand');\n }\n delete this._expanding;\n },\n _syncWithDataSource: function () {\n var dataSource = this.dataSource;\n this._firstItemUid = dataSource.firstItemUid();\n this.dataOffset = this.offset = dataSource.skip() || 0;\n this.pageSize = dataSource.pageSize();\n this.useRanges = dataSource.options.serverPaging;\n },\n _recalculate: function () {\n var pageSize = this.pageSize, offset = this.offset, viewSize = this.viewSize, skip = Math.ceil(offset / pageSize) * pageSize;\n this.skip = skip;\n this.midPageThreshold = skip + pageSize - 1;\n this.nextPageThreshold = skip + viewSize - 1;\n this.prefetchThreshold = skip + Math.floor(pageSize / 3 * 2);\n this.pullBackThreshold = this.offset - 1;\n this.nextMidRange = skip + pageSize - viewSize;\n this.nextFullRange = skip;\n this.previousMidRange = offset - viewSize;\n this.previousFullRange = skip - pageSize;\n }\n });\n var BatchBuffer = kendo.Observable.extend({\n init: function (dataSource, batchSize) {\n var batchBuffer = this;\n kendo.Observable.fn.init.call(batchBuffer);\n this.dataSource = dataSource;\n this.batchSize = batchSize;\n this._total = 0;\n this.buffer = new Buffer(dataSource, batchSize * 3);\n this.buffer.bind({\n 'endreached': function (e) {\n batchBuffer.trigger('endreached', { index: e.index });\n },\n 'prefetching': function (e) {\n batchBuffer.trigger('prefetching', {\n skip: e.skip,\n take: e.take\n });\n },\n 'prefetched': function (e) {\n batchBuffer.trigger('prefetched', {\n skip: e.skip,\n take: e.take\n });\n },\n 'reset': function () {\n batchBuffer._total = 0;\n batchBuffer.trigger('reset');\n },\n 'resize': function () {\n batchBuffer._total = Math.ceil(this.length / batchBuffer.batchSize);\n batchBuffer.trigger('resize', {\n total: batchBuffer.total(),\n offset: this.offset\n });\n }\n });\n },\n syncDataSource: function () {\n this.buffer.syncDataSource();\n },\n at: function (index) {\n var buffer = this.buffer, skip = index * this.batchSize, take = this.batchSize, view = [], item;\n if (buffer.offset > skip) {\n buffer.at(buffer.offset - 1);\n }\n for (var i = 0; i < take; i++) {\n item = buffer.at(skip + i);\n if (item === null) {\n break;\n }\n view.push(item);\n }\n return view;\n },\n total: function () {\n return this._total;\n },\n destroy: function () {\n this.buffer.destroy();\n this.unbind();\n }\n });\n extend(true, kendo.data, {\n readers: { json: DataReader },\n Query: Query,\n DataSource: DataSource,\n HierarchicalDataSource: HierarchicalDataSource,\n Node: Node,\n Comparer: Comparer,\n ObservableObject: ObservableObject,\n ObservableArray: ObservableArray,\n LazyObservableArray: LazyObservableArray,\n LocalTransport: LocalTransport,\n RemoteTransport: RemoteTransport,\n Cache: Cache,\n DataReader: DataReader,\n Model: Model,\n Buffer: Buffer,\n BatchBuffer: BatchBuffer\n });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.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.binder', [\n 'kendo.core',\n 'kendo.data'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'binder',\n name: 'MVVM',\n category: 'framework',\n description: 'Model View ViewModel (MVVM) is a design pattern which helps developers separate the Model (the data) from the View (the UI).',\n depends: [\n 'core',\n 'data'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, Observable = kendo.Observable, ObservableObject = kendo.data.ObservableObject, ObservableArray = kendo.data.ObservableArray, toString = {}.toString, binders = {}, Class = kendo.Class, proxy = $.proxy, VALUE = 'value', SOURCE = 'source', EVENTS = 'events', CHECKED = 'checked', CSS = 'css', deleteExpando = true, FUNCTION = 'function', CHANGE = 'change';\n (function () {\n var a = document.createElement('a');\n try {\n delete a.test;\n } catch (e) {\n deleteExpando = false;\n }\n }());\n var Binding = Observable.extend({\n init: function (parents, path) {\n var that = this;\n Observable.fn.init.call(that);\n that.source = parents[0];\n that.parents = parents;\n that.path = path;\n that.dependencies = {};\n that.dependencies[path] = true;\n that.observable = that.source instanceof Observable;\n that._access = function (e) {\n that.dependencies[e.field] = true;\n };\n if (that.observable) {\n that._change = function (e) {\n that.change(e);\n };\n that.source.bind(CHANGE, that._change);\n }\n },\n _parents: function () {\n var parents = this.parents;\n var value = this.get();\n if (value && typeof value.parent == 'function') {\n var parent = value.parent();\n if ($.inArray(parent, parents) < 0) {\n parents = [parent].concat(parents);\n }\n }\n return parents;\n },\n change: function (e) {\n var dependency, ch, field = e.field, that = this;\n if (that.path === 'this') {\n that.trigger(CHANGE, e);\n } else {\n for (dependency in that.dependencies) {\n if (dependency.indexOf(field) === 0) {\n ch = dependency.charAt(field.length);\n if (!ch || ch === '.' || ch === '[') {\n that.trigger(CHANGE, e);\n break;\n }\n }\n }\n }\n },\n start: function (source) {\n source.bind('get', this._access);\n },\n stop: function (source) {\n source.unbind('get', this._access);\n },\n get: function () {\n var that = this, source = that.source, index = 0, path = that.path, result = source;\n if (!that.observable) {\n return result;\n }\n that.start(that.source);\n result = source.get(path);\n while (result === undefined && source) {\n source = that.parents[++index];\n if (source instanceof ObservableObject) {\n result = source.get(path);\n }\n }\n if (result === undefined) {\n source = that.source;\n while (result === undefined && source) {\n source = source.parent();\n if (source instanceof ObservableObject) {\n result = source.get(path);\n }\n }\n }\n if (typeof result === 'function') {\n index = path.lastIndexOf('.');\n if (index > 0) {\n source = source.get(path.substring(0, index));\n }\n that.start(source);\n if (source !== that.source) {\n result = result.call(source, that.source);\n } else {\n result = result.call(source);\n }\n that.stop(source);\n }\n if (source && source !== that.source) {\n that.currentSource = source;\n source.unbind(CHANGE, that._change).bind(CHANGE, that._change);\n }\n that.stop(that.source);\n return result;\n },\n set: function (value) {\n var source = this.currentSource || this.source;\n var field = kendo.getter(this.path)(source);\n if (typeof field === 'function') {\n if (source !== this.source) {\n field.call(source, this.source, value);\n } else {\n field.call(source, value);\n }\n } else {\n source.set(this.path, value);\n }\n },\n destroy: function () {\n if (this.observable) {\n this.source.unbind(CHANGE, this._change);\n if (this.currentSource) {\n this.currentSource.unbind(CHANGE, this._change);\n }\n }\n this.unbind();\n }\n });\n var EventBinding = Binding.extend({\n get: function () {\n var source = this.source, path = this.path, index = 0, handler;\n handler = source.get(path);\n while (!handler && source) {\n source = this.parents[++index];\n if (source instanceof ObservableObject) {\n handler = source.get(path);\n }\n }\n return proxy(handler, source);\n }\n });\n var TemplateBinding = Binding.extend({\n init: function (source, path, template) {\n var that = this;\n Binding.fn.init.call(that, source, path);\n that.template = template;\n },\n render: function (value) {\n var html;\n this.start(this.source);\n html = kendo.render(this.template, value);\n this.stop(this.source);\n return html;\n }\n });\n var Binder = Class.extend({\n init: function (element, bindings, options) {\n this.element = element;\n this.bindings = bindings;\n this.options = options;\n },\n bind: function (binding, attribute) {\n var that = this;\n binding = attribute ? binding[attribute] : binding;\n binding.bind(CHANGE, function (e) {\n that.refresh(attribute || e);\n });\n that.refresh(attribute);\n },\n destroy: function () {\n }\n });\n var TypedBinder = Binder.extend({\n dataType: function () {\n var dataType = this.element.getAttribute('data-' + kendo.ns + 'type') || this.element.type || 'text';\n return dataType.toLowerCase();\n },\n parsedValue: function () {\n return this._parseValue(this.element.value, this.dataType());\n },\n _parseValue: function (value, dataType) {\n if (dataType == 'date') {\n value = kendo.parseDate(value, 'yyyy-MM-dd');\n } else if (dataType == 'datetime-local') {\n value = kendo.parseDate(value, [\n 'yyyy-MM-ddTHH:mm:ss',\n 'yyyy-MM-ddTHH:mm'\n ]);\n } else if (dataType == 'number') {\n value = kendo.parseFloat(value);\n } else if (dataType == 'boolean') {\n value = value.toLowerCase();\n if (kendo.parseFloat(value) !== null) {\n value = Boolean(kendo.parseFloat(value));\n } else {\n value = value.toLowerCase() === 'true';\n }\n }\n return value;\n }\n });\n binders.attr = Binder.extend({\n refresh: function (key) {\n this.element.setAttribute(key, this.bindings.attr[key].get());\n }\n });\n binders.css = Binder.extend({\n init: function (element, bindings, options) {\n Binder.fn.init.call(this, element, bindings, options);\n this.classes = {};\n },\n refresh: function (className) {\n var element = $(this.element), binding = this.bindings.css[className], hasClass = this.classes[className] = binding.get();\n if (hasClass) {\n element.addClass(className);\n } else {\n element.removeClass(className);\n }\n }\n });\n binders.style = Binder.extend({\n refresh: function (key) {\n this.element.style[key] = this.bindings.style[key].get() || '';\n }\n });\n binders.enabled = Binder.extend({\n refresh: function () {\n if (this.bindings.enabled.get()) {\n this.element.removeAttribute('disabled');\n } else {\n this.element.setAttribute('disabled', 'disabled');\n }\n }\n });\n binders.readonly = Binder.extend({\n refresh: function () {\n if (this.bindings.readonly.get()) {\n this.element.setAttribute('readonly', 'readonly');\n } else {\n this.element.removeAttribute('readonly');\n }\n }\n });\n binders.disabled = Binder.extend({\n refresh: function () {\n if (this.bindings.disabled.get()) {\n this.element.setAttribute('disabled', 'disabled');\n } else {\n this.element.removeAttribute('disabled');\n }\n }\n });\n binders.events = Binder.extend({\n init: function (element, bindings, options) {\n Binder.fn.init.call(this, element, bindings, options);\n this.handlers = {};\n },\n refresh: function (key) {\n var element = $(this.element), binding = this.bindings.events[key], handler = this.handlers[key];\n if (handler) {\n element.off(key, handler);\n }\n handler = this.handlers[key] = binding.get();\n element.on(key, binding.source, handler);\n },\n destroy: function () {\n var element = $(this.element), handler;\n for (handler in this.handlers) {\n element.off(handler, this.handlers[handler]);\n }\n }\n });\n binders.text = Binder.extend({\n refresh: function () {\n var text = this.bindings.text.get();\n var dataFormat = this.element.getAttribute('data-' + kendo.ns + 'format') || '';\n if (text == null) {\n text = '';\n }\n $(this.element).text(kendo.toString(text, dataFormat));\n }\n });\n binders.visible = Binder.extend({\n refresh: function () {\n if (this.bindings.visible.get()) {\n this.element.style.display = '';\n } else {\n this.element.style.display = 'none';\n }\n }\n });\n binders.invisible = Binder.extend({\n refresh: function () {\n if (!this.bindings.invisible.get()) {\n this.element.style.display = '';\n } else {\n this.element.style.display = 'none';\n }\n }\n });\n binders.html = Binder.extend({\n refresh: function () {\n this.element.innerHTML = this.bindings.html.get();\n }\n });\n binders.value = TypedBinder.extend({\n init: function (element, bindings, options) {\n TypedBinder.fn.init.call(this, element, bindings, options);\n this._change = proxy(this.change, this);\n this.eventName = options.valueUpdate || CHANGE;\n $(this.element).on(this.eventName, this._change);\n this._initChange = false;\n },\n change: function () {\n this._initChange = this.eventName != CHANGE;\n this.bindings[VALUE].set(this.parsedValue());\n this._initChange = false;\n },\n refresh: function () {\n if (!this._initChange) {\n var value = this.bindings[VALUE].get();\n if (value == null) {\n value = '';\n }\n var type = this.dataType();\n if (type == 'date') {\n value = kendo.toString(value, 'yyyy-MM-dd');\n } else if (type == 'datetime-local') {\n value = kendo.toString(value, 'yyyy-MM-ddTHH:mm:ss');\n }\n this.element.value = value;\n }\n this._initChange = false;\n },\n destroy: function () {\n $(this.element).off(this.eventName, this._change);\n }\n });\n binders.source = Binder.extend({\n init: function (element, bindings, options) {\n Binder.fn.init.call(this, element, bindings, options);\n var source = this.bindings.source.get();\n if (source instanceof kendo.data.DataSource && options.autoBind !== false) {\n source.fetch();\n }\n },\n refresh: function (e) {\n var that = this, source = that.bindings.source.get();\n if (source instanceof ObservableArray || source instanceof kendo.data.DataSource) {\n e = e || {};\n if (e.action == 'add') {\n that.add(e.index, e.items);\n } else if (e.action == 'remove') {\n that.remove(e.index, e.items);\n } else if (e.action != 'itemchange') {\n that.render();\n }\n } else {\n that.render();\n }\n },\n container: function () {\n var element = this.element;\n if (element.nodeName.toLowerCase() == 'table') {\n if (!element.tBodies[0]) {\n element.appendChild(document.createElement('tbody'));\n }\n element = element.tBodies[0];\n }\n return element;\n },\n template: function () {\n var options = this.options, template = options.template, nodeName = this.container().nodeName.toLowerCase();\n if (!template) {\n if (nodeName == 'select') {\n if (options.valueField || options.textField) {\n template = kendo.format('', 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 badge: {\n text: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n },\n refresh: function () {\n var text = this.bindings.text.get();\n if (text == null) {\n text = '';\n }\n this.widget.text(text);\n }\n })\n }\n };\n var arraySplice = function (arr, idx, remove, add) {\n add = add || [];\n remove = remove || 0;\n var addLength = add.length;\n var oldLength = arr.length;\n var shifted = [].slice.call(arr, idx + remove);\n var shiftedLength = shifted.length;\n var index;\n if (addLength) {\n addLength = idx + addLength;\n index = 0;\n for (; idx < addLength; idx++) {\n arr[idx] = add[index];\n index++;\n }\n arr.length = addLength;\n } else if (remove) {\n arr.length = idx;\n remove += idx;\n while (idx < remove) {\n delete arr[--remove];\n }\n }\n if (shiftedLength) {\n shiftedLength = idx + shiftedLength;\n index = 0;\n for (; idx < shiftedLength; idx++) {\n arr[idx] = shifted[index];\n index++;\n }\n arr.length = shiftedLength;\n }\n idx = arr.length;\n while (idx < oldLength) {\n delete arr[idx];\n idx++;\n }\n };\n var BindingTarget = Class.extend({\n init: function (target, options) {\n this.target = target;\n this.options = options;\n this.toDestroy = [];\n },\n bind: function (bindings) {\n var key, hasValue, hasSource, hasEvents, hasChecked, hasCss, widgetBinding = this instanceof WidgetBindingTarget, specificBinders = this.binders();\n for (key in bindings) {\n if (key == VALUE) {\n hasValue = true;\n } else if (key == SOURCE) {\n hasSource = true;\n } else if (key == EVENTS && !widgetBinding) {\n hasEvents = true;\n } else if (key == CHECKED) {\n hasChecked = true;\n } else if (key == CSS) {\n hasCss = true;\n } else {\n this.applyBinding(key, bindings, specificBinders);\n }\n }\n if (hasSource) {\n this.applyBinding(SOURCE, bindings, specificBinders);\n }\n if (hasValue) {\n this.applyBinding(VALUE, bindings, specificBinders);\n }\n if (hasChecked) {\n this.applyBinding(CHECKED, bindings, specificBinders);\n }\n if (hasEvents && !widgetBinding) {\n this.applyBinding(EVENTS, bindings, specificBinders);\n }\n if (hasCss && !widgetBinding) {\n this.applyBinding(CSS, bindings, specificBinders);\n }\n },\n binders: function () {\n return binders[this.target.nodeName.toLowerCase()] || {};\n },\n applyBinding: function (name, bindings, specificBinders) {\n var binder = specificBinders[name] || binders[name], toDestroy = this.toDestroy, attribute, binding = bindings[name];\n if (binder) {\n binder = new binder(this.target, bindings, this.options);\n toDestroy.push(binder);\n if (binding instanceof Binding) {\n binder.bind(binding);\n toDestroy.push(binding);\n } else {\n for (attribute in binding) {\n binder.bind(binding, attribute);\n toDestroy.push(binding[attribute]);\n }\n }\n } else if (name !== 'template') {\n throw new Error('The ' + name + ' binding is not supported by the ' + this.target.nodeName.toLowerCase() + ' element');\n }\n },\n destroy: function () {\n var idx, length, toDestroy = this.toDestroy;\n for (idx = 0, length = toDestroy.length; idx < length; idx++) {\n toDestroy[idx].destroy();\n }\n }\n });\n var WidgetBindingTarget = BindingTarget.extend({\n binders: function () {\n return binders.widget[this.target.options.name.toLowerCase()] || {};\n },\n applyBinding: function (name, bindings, specificBinders) {\n var binder = specificBinders[name] || binders.widget[name], toDestroy = this.toDestroy, attribute, binding = bindings[name];\n if (binder) {\n binder = new binder(this.target, bindings, this.target.options);\n toDestroy.push(binder);\n if (binding instanceof Binding) {\n binder.bind(binding);\n toDestroy.push(binding);\n } else {\n for (attribute in binding) {\n binder.bind(binding, attribute);\n toDestroy.push(binding[attribute]);\n }\n }\n } else {\n throw new Error('The ' + name + ' binding is not supported by the ' + this.target.options.name + ' widget');\n }\n }\n });\n function bindingTargetForRole(element, roles) {\n var widget = kendo.initWidget(element, {}, roles);\n if (widget) {\n return new WidgetBindingTarget(widget);\n }\n }\n var keyValueRegExp = /[A-Za-z0-9_\\-]+:(\\{([^}]*)\\}|[^,}]+)/g, whiteSpaceRegExp = /\\s/g;\n function parseBindings(bind) {\n var result = {}, idx, length, token, colonIndex, key, value, tokens;\n tokens = bind.match(keyValueRegExp);\n for (idx = 0, length = tokens.length; idx < length; idx++) {\n token = tokens[idx];\n colonIndex = token.indexOf(':');\n key = token.substring(0, colonIndex);\n value = token.substring(colonIndex + 1);\n if (value.charAt(0) == '{') {\n value = parseBindings(value);\n }\n result[key] = value;\n }\n return result;\n }\n function createBindings(bindings, source, type) {\n var binding, result = {};\n for (binding in bindings) {\n result[binding] = new type(source, bindings[binding]);\n }\n return result;\n }\n function bindElement(element, source, roles, parents) {\n if (!element || element.getAttribute('data-' + kendo.ns + 'stop')) {\n return;\n }\n var role = element.getAttribute('data-' + kendo.ns + 'role'), idx, bind = element.getAttribute('data-' + kendo.ns + 'bind'), childrenCopy = [], deep = true, bindings, options = {}, target;\n parents = parents || [source];\n if (role || bind) {\n unbindElement(element, false);\n }\n if (role) {\n target = bindingTargetForRole(element, roles);\n }\n if (bind) {\n bind = parseBindings(bind.replace(whiteSpaceRegExp, ''));\n if (!target) {\n options = kendo.parseOptions(element, {\n textField: '',\n valueField: '',\n template: '',\n valueUpdate: CHANGE,\n valuePrimitive: false,\n autoBind: true\n }, source);\n options.roles = roles;\n target = new BindingTarget(element, options);\n }\n target.source = source;\n bindings = createBindings(bind, parents, Binding);\n if (options.template) {\n bindings.template = new TemplateBinding(parents, '', options.template);\n }\n if (bindings.click) {\n bind.events = bind.events || {};\n bind.events.click = bind.click;\n bindings.click.destroy();\n delete bindings.click;\n }\n if (bindings.source) {\n deep = false;\n }\n if (bind.attr) {\n bindings.attr = createBindings(bind.attr, parents, Binding);\n }\n if (bind.style) {\n bindings.style = createBindings(bind.style, parents, Binding);\n }\n if (bind.events) {\n bindings.events = createBindings(bind.events, parents, EventBinding);\n }\n if (bind.css) {\n bindings.css = createBindings(bind.css, parents, Binding);\n }\n target.bind(bindings);\n }\n if (target) {\n element.kendoBindingTarget = target;\n }\n var children = element.children;\n if (deep && children && !element.getAttribute('data-' + kendo.ns + 'stop')) {\n for (idx = 0; idx < children.length; idx++) {\n childrenCopy[idx] = children[idx];\n }\n for (idx = 0; idx < childrenCopy.length; idx++) {\n bindElement(childrenCopy[idx], source, roles, parents);\n }\n }\n }\n function bind(dom, object) {\n var idx, length, node, roles = kendo.rolesFromNamespaces([].slice.call(arguments, 2));\n object = kendo.observable(object);\n dom = $(dom);\n for (idx = 0, length = dom.length; idx < length; idx++) {\n node = dom[idx];\n if (node.nodeType === 1) {\n bindElement(node, object, roles);\n }\n }\n }\n function unbindElement(element, destroyWidget) {\n var bindingTarget = element.kendoBindingTarget;\n if (bindingTarget) {\n bindingTarget.destroy();\n if (deleteExpando) {\n delete element.kendoBindingTarget;\n } else if (element.removeAttribute) {\n element.removeAttribute('kendoBindingTarget');\n } else {\n element.kendoBindingTarget = null;\n }\n }\n if (destroyWidget) {\n var widget = kendo.widgetInstance($(element));\n if (widget && typeof widget.destroy === FUNCTION) {\n widget.destroy();\n }\n }\n }\n function unbindElementTree(element, destroyWidgets) {\n unbindElement(element, destroyWidgets);\n unbindElementChildren(element, destroyWidgets);\n }\n function unbindElementChildren(element, destroyWidgets) {\n var children = element.children;\n if (children) {\n for (var idx = 0, length = children.length; idx < length; idx++) {\n unbindElementTree(children[idx], destroyWidgets);\n }\n }\n }\n function unbind(dom) {\n var idx, length;\n dom = $(dom);\n for (idx = 0, length = dom.length; idx < length; idx++) {\n unbindElementTree(dom[idx], false);\n }\n }\n function notify(widget, namespace) {\n var element = widget.element, bindingTarget = element[0].kendoBindingTarget;\n if (bindingTarget) {\n bind(element, bindingTarget.source, namespace);\n }\n }\n function retrievePrimitiveValues(value, valueField) {\n var values = [];\n var idx = 0;\n var length;\n var item;\n if (!valueField) {\n return value;\n }\n if (value instanceof ObservableArray) {\n for (length = value.length; idx < length; idx++) {\n item = value[idx];\n values[idx] = item.get ? item.get(valueField) : item[valueField];\n }\n value = values;\n } else if (value instanceof ObservableObject) {\n value = value.get(valueField);\n }\n return value;\n }\n kendo.unbind = unbind;\n kendo.bind = bind;\n kendo.data.binders = binders;\n kendo.data.Binder = Binder;\n kendo.notify = notify;\n kendo.observable = function (object) {\n if (!(object instanceof ObservableObject)) {\n object = new ObservableObject(object);\n }\n return object;\n };\n kendo.observableHierarchy = function (array) {\n var dataSource = kendo.data.HierarchicalDataSource.create(array);\n function recursiveRead(data) {\n var i, children;\n for (i = 0; i < data.length; i++) {\n data[i]._initChildren();\n children = data[i].children;\n children.fetch();\n data[i].items = children.data();\n recursiveRead(data[i].items);\n }\n }\n dataSource.fetch();\n recursiveRead(dataSource.data());\n dataSource._data._dataSource = dataSource;\n return dataSource._data;\n };\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.validator', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'validator',\n name: 'Validator',\n category: 'web',\n description: 'The Validator offers an easy way to do a client-side form validation.',\n depends: ['core']\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, NS = '.kendoValidator', INVALIDMSG = 'k-invalid-msg', invalidMsgRegExp = new RegExp(INVALIDMSG, 'i'), INVALIDINPUT = 'k-invalid', VALIDINPUT = 'k-valid', VALIDATIONSUMMARY = 'k-validation-summary', INVALIDLABEL = 'k-text-error', MESSAGEBOX = 'k-messagebox k-messagebox-error', ARIAINVALID = 'aria-invalid', ARIADESCRIBEDBY = 'aria-describedby', emailRegExp = /^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/i, urlRegExp = /^(https?|ftp):\\/\\/(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(\\#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i, INPUTSELECTOR = ':input:not(:button,[type=submit],[type=reset],[disabled],[readonly])', CHECKBOXSELECTOR = ':checkbox:not([disabled],[readonly])', NUMBERINPUTSELECTOR = '[type=number],[type=range]', BLUR = 'blur', NAME = 'name', FORM = 'form', NOVALIDATE = 'novalidate', VALIDATE = 'validate', CHANGE = 'change', VALIDATE_INPUT = 'validateInput', proxy = $.proxy, patternMatcher = function (value, pattern) {\n if (typeof pattern === 'string') {\n pattern = new RegExp('^(?:' + pattern + ')$');\n }\n return pattern.test(value);\n }, matcher = function (input, selector, pattern) {\n var value = input.val();\n if (input.filter(selector).length && value !== '') {\n return patternMatcher(value, pattern);\n }\n return true;\n }, hasAttribute = function (input, name) {\n if (input.length) {\n return input[0].attributes[name] != null;\n }\n return false;\n };\n if (!kendo.ui.validator) {\n kendo.ui.validator = {\n rules: {},\n messages: {},\n allowSubmit: $.noop,\n validateOnInit: $.noop\n };\n }\n function resolveRules(element) {\n var resolvers = kendo.ui.validator.ruleResolvers || {}, rules = {}, name;\n for (name in resolvers) {\n $.extend(true, rules, resolvers[name].resolve(element));\n }\n return rules;\n }\n function decode(value) {\n return value.replace(/&/g, '&').replace(/"/g, '\"').replace(/'/g, '\\'').replace(/</g, '<').replace(/>/g, '>');\n }\n function numberOfDecimalDigits(value) {\n value = (value + '').split('.');\n if (value.length > 1) {\n return value[1].length;\n }\n return 0;\n }\n function parseHtml(text) {\n if ($.parseHTML) {\n return $($.parseHTML(text));\n }\n return $(text);\n }\n function searchForMessageContainer(elements, fieldName) {\n var containers = $(), element, attr;\n for (var idx = 0, length = elements.length; idx < length; idx++) {\n element = elements[idx];\n if (invalidMsgRegExp.test(element.className)) {\n attr = element.getAttribute(kendo.attr('for'));\n if (attr === fieldName) {\n containers = containers.add(element);\n }\n }\n }\n return containers;\n }\n function isLabelFor(label, element) {\n if (!label) {\n return false;\n }\n if (typeof label.nodeName !== 'string' || label.nodeName !== 'LABEL') {\n return false;\n }\n if (typeof label.getAttribute('for') !== 'string' || typeof element.getAttribute('id') !== 'string') {\n return false;\n }\n if (label.getAttribute('for') !== element.getAttribute('id')) {\n return false;\n }\n return true;\n }\n var SUMMARYTEMPLATE = '';\n var Validator = Widget.extend({\n init: function (element, options) {\n var that = this, resolved = resolveRules(element), validateAttributeSelector = '[' + kendo.attr('validate') + '!=false]';\n options = options || {};\n options.rules = $.extend({}, kendo.ui.validator.rules, resolved.rules, options.rules);\n options.messages = $.extend({}, kendo.ui.validator.messages, resolved.messages, options.messages);\n Widget.fn.init.call(that, element, options);\n that._errorTemplate = kendo.template(that.options.errorTemplate);\n that._summaryTemplate = kendo.template(that.options.validationSummary.template || SUMMARYTEMPLATE);\n if (that.element.is(FORM)) {\n that.element.attr(NOVALIDATE, NOVALIDATE);\n }\n that._inputSelector = INPUTSELECTOR + validateAttributeSelector;\n that._checkboxSelector = CHECKBOXSELECTOR + validateAttributeSelector;\n that._errors = {};\n that._attachEvents();\n that._isValidated = false;\n if (that._validateOnInit()) {\n that.validate();\n }\n },\n events: [\n VALIDATE,\n CHANGE,\n VALIDATE_INPUT\n ],\n options: {\n name: 'Validator',\n errorTemplate: '#= 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 noNameCheckbox = !input.attr('name') && !input.is(':checked'), namedCheckbox = input.attr('name') && !this.element.find('input[name=\\'' + input.attr('name') + '\\']:checked').length, checkbox = input.filter('[type=checkbox]').length && (noNameCheckbox || namedCheckbox), radio = input.filter('[type=radio]').length && !this.element.find('input[name=\\'' + input.attr('name') + '\\']:checked').length, value = input.val();\n return !(hasAttribute(input, 'required') && (!value || value === '' || value.length === 0 || checkbox || radio));\n },\n pattern: function (input) {\n if (input.filter('[type=text],[type=email],[type=url],[type=tel],[type=search],[type=password]').filter('[pattern]').length && input.val() !== '') {\n return patternMatcher(input.val(), input.attr('pattern'));\n }\n return true;\n },\n min: function (input) {\n if (input.filter(NUMBERINPUTSELECTOR + ',[' + kendo.attr('type') + '=number]').filter('[min]').length && input.val() !== '') {\n var min = parseFloat(input.attr('min')) || 0, val = kendo.parseFloat(input.val());\n return min <= val;\n }\n return true;\n },\n max: function (input) {\n if (input.filter(NUMBERINPUTSELECTOR + ',[' + kendo.attr('type') + '=number]').filter('[max]').length && input.val() !== '') {\n var max = parseFloat(input.attr('max')) || 0, val = kendo.parseFloat(input.val());\n return max >= val;\n }\n return true;\n },\n step: function (input) {\n if (input.filter(NUMBERINPUTSELECTOR + ',[' + kendo.attr('type') + '=number]').filter('[step]').length && input.val() !== '') {\n var min = parseFloat(input.attr('min')) || 0, step = parseFloat(input.attr('step')) || 1, val = parseFloat(input.val()), decimals = numberOfDecimalDigits(step), raise;\n if (decimals) {\n raise = Math.pow(10, decimals);\n return Math.floor((val - min) * raise) % (step * raise) / Math.pow(100, decimals) === 0;\n }\n return (val - min) % step === 0;\n }\n return true;\n },\n email: function (input) {\n return matcher(input, '[type=email],[' + kendo.attr('type') + '=email]', emailRegExp);\n },\n url: function (input) {\n return matcher(input, '[type=url],[' + kendo.attr('type') + '=url]', urlRegExp);\n },\n date: function (input) {\n if (input.filter('[type^=date],[' + kendo.attr('type') + '=date]').length && input.val() !== '') {\n return kendo.parseDate(input.val(), input.attr(kendo.attr('format'))) !== null;\n }\n return true;\n }\n },\n validateOnBlur: true,\n validationSummary: false\n },\n _allowSubmit: function () {\n return kendo.ui.validator.allowSubmit(this.element, this.errors());\n },\n _validateOnInit: function () {\n return kendo.ui.validator.validateOnInit(this.element);\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.element.off(NS);\n if (this.validationSummary) {\n this.validationSummary.off(NS);\n this.validationSummary = null;\n }\n },\n value: function () {\n if (!this._isValidated) {\n return false;\n }\n return this.errors().length === 0;\n },\n _submit: function (e) {\n if (!this.validate() && !this._allowSubmit()) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n e.preventDefault();\n return false;\n }\n return true;\n },\n _checkElement: function (element) {\n var state = this.value();\n this.validateInput(element);\n if (this.value() !== state) {\n this.trigger(CHANGE);\n }\n },\n _attachEvents: function () {\n var that = this;\n if (that.element.is(FORM)) {\n that.element.on('submit' + NS, proxy(that._submit, that));\n }\n if (that.options.validateOnBlur) {\n if (!that.element.is(INPUTSELECTOR)) {\n that.element.on(BLUR + NS, that._inputSelector, function () {\n that._checkElement($(this));\n });\n that.element.on('click' + NS, that._checkboxSelector, function () {\n that._checkElement($(this));\n });\n } else {\n that.element.on(BLUR + NS, function () {\n that._checkElement(that.element);\n });\n if (that.element.is(CHECKBOXSELECTOR)) {\n that.element.on('click' + NS, function () {\n that._checkElement(that.element);\n });\n }\n }\n }\n },\n validate: function () {\n var inputs;\n var idx;\n var result = false;\n var length;\n var isValid = this.value();\n this._errors = {};\n if (!this.element.is(INPUTSELECTOR)) {\n var invalid = false;\n inputs = this.element.find(this._inputSelector);\n for (idx = 0, length = inputs.length; idx < length; idx++) {\n if (!this.validateInput(inputs.eq(idx))) {\n invalid = true;\n }\n }\n result = !invalid;\n } else {\n result = this.validateInput(this.element);\n }\n if (this.options.validationSummary && !isValid) {\n this.showValidationSummary();\n }\n this.trigger(VALIDATE, {\n valid: result,\n errors: this.errors()\n });\n if (isValid !== result) {\n this.trigger(CHANGE);\n }\n return result;\n },\n validateInput: function (input) {\n input = $(input);\n this._isValidated = true;\n var that = this, template = that._errorTemplate, result = that._checkValidity(input), valid = result.valid, className = '.' + INVALIDMSG, fieldName = input.attr(NAME) || '', lbl = that._findMessageContainer(fieldName).add(input.next(className).filter(function () {\n var element = $(this);\n if (element.filter('[' + kendo.attr('for') + ']').length) {\n return element.attr(kendo.attr('for')) === fieldName;\n }\n return true;\n })).addClass('k-hidden'), messageText = !valid ? that._extractMessage(input, result.key) : '', messageLabel = !valid ? parseHtml(template({\n message: decode(messageText),\n field: fieldName\n })) : '', wasValid = !input.attr(ARIAINVALID);\n input.removeAttr(ARIAINVALID);\n if (!valid) {\n that._errors[fieldName] = messageText;\n var lblId = lbl.attr('id');\n that._decorateMessageContainer(messageLabel, fieldName);\n if (lblId) {\n messageLabel.attr('id', lblId);\n }\n if (lbl.length !== 0) {\n lbl.replaceWith(messageLabel);\n } else {\n var widgetInstance = kendo.widgetInstance(input);\n var parentElement = input.parent().get(0);\n var nextElement = input.next().get(0);\n var prevElement = input.prev().get(0);\n if (!widgetInstance && input.is('[type=radio]')) {\n widgetInstance = kendo.widgetInstance(input.closest('.k-radio-list'));\n }\n if (!widgetInstance && input.is('[type=checkbox]')) {\n widgetInstance = kendo.widgetInstance(input.closest('.k-checkbox-list'));\n }\n if (widgetInstance && widgetInstance.wrapper) {\n messageLabel.insertAfter(widgetInstance.wrapper);\n } else if (parentElement && parentElement.nodeName === 'LABEL') {\n messageLabel.insertAfter(parentElement);\n } else if (nextElement && isLabelFor(nextElement, input[0])) {\n messageLabel.insertAfter(nextElement);\n } else if (prevElement && isLabelFor(prevElement, input[0])) {\n messageLabel.insertAfter(input);\n } else {\n messageLabel.insertAfter(input);\n }\n }\n messageLabel.removeClass('k-hidden');\n input.attr(ARIAINVALID, true);\n } else {\n delete that._errors[fieldName];\n }\n if (wasValid !== valid) {\n this.trigger(VALIDATE_INPUT, {\n valid: valid,\n input: input,\n error: messageText,\n field: fieldName\n });\n }\n input.toggleClass(INVALIDINPUT, !valid);\n input.toggleClass(VALIDINPUT, valid);\n if (kendo.widgetInstance(input)) {\n var inputWrap = kendo.widgetInstance(input)._inputWrapper;\n var inputLabel = kendo.widgetInstance(input)._inputLabel;\n if (inputWrap) {\n inputWrap.toggleClass(INVALIDINPUT, !valid);\n inputWrap.toggleClass(VALIDINPUT, valid);\n }\n if (inputLabel) {\n inputLabel.toggleClass(INVALIDLABEL, !valid);\n }\n }\n if (wasValid !== valid) {\n var errorId = messageLabel ? messageLabel.attr('id') : lbl.attr('id');\n that._associateMessageContainer(input, errorId);\n if (this.options.validationSummary && this.options.validateOnBlur) {\n this.showValidationSummary();\n }\n }\n return valid;\n },\n hideMessages: function () {\n var that = this, className = '.' + INVALIDMSG, element = that.element;\n that._disassociateMessageContainers();\n if (!element.is(INPUTSELECTOR)) {\n element.find(className).addClass('k-hidden');\n } else {\n element.next(className).addClass('k-hidden');\n }\n },\n reset: function () {\n var that = this, inputs = that.element.find('.' + INVALIDINPUT), labels = that.element.find('.' + INVALIDLABEL);\n that._errors = [];\n that.hideMessages();\n that.hideValidationSummary();\n inputs.removeAttr(ARIAINVALID);\n inputs.removeClass(INVALIDINPUT);\n labels.removeClass(INVALIDLABEL);\n },\n _findMessageContainer: function (fieldName) {\n var locators = kendo.ui.validator.messageLocators, name, containers = $();\n for (var idx = 0, length = this.element.length; idx < length; idx++) {\n containers = containers.add(searchForMessageContainer(this.element[idx].getElementsByTagName('*'), fieldName));\n }\n for (name in locators) {\n containers = containers.add(locators[name].locate(this.element, fieldName));\n }\n return containers;\n },\n _decorateMessageContainer: function (container, fieldName) {\n var locators = kendo.ui.validator.messageLocators, name;\n container.addClass(INVALIDMSG).attr(kendo.attr('for'), fieldName || '');\n if (!container.attr('id')) {\n container.attr('id', fieldName + '-error');\n }\n for (name in locators) {\n locators[name].decorate(container, fieldName);\n }\n },\n _extractMessage: function (input, ruleKey) {\n var that = this, customMessage = that.options.messages[ruleKey], fieldName = input.attr(NAME), nonDefaultMessage;\n if (!kendo.ui.Validator.prototype.options.messages[ruleKey]) {\n nonDefaultMessage = kendo.isFunction(customMessage) ? customMessage(input) : customMessage;\n }\n customMessage = kendo.isFunction(customMessage) ? customMessage(input) : customMessage;\n return kendo.format(input.attr(kendo.attr(ruleKey + '-msg')) || input.attr('validationMessage') || nonDefaultMessage || customMessage || input.attr('title') || '', fieldName, input.attr(ruleKey) || input.attr(kendo.attr(ruleKey)));\n },\n _checkValidity: function (input) {\n var rules = this.options.rules, rule;\n for (rule in rules) {\n if (!rules[rule].call(this, input)) {\n return {\n valid: false,\n key: rule\n };\n }\n }\n return { valid: true };\n },\n errors: function () {\n var results = [], errors = this._errors, error;\n for (error in errors) {\n results.push(errors[error]);\n }\n return results;\n },\n setOptions: function (options) {\n if (options.validationSummary) {\n this.hideValidationSummary();\n }\n kendo.deepExtend(this.options, options);\n this.destroy();\n this.init(this.element, this.options);\n this._setEvents(this.options);\n },\n _getInputNames: function () {\n var that = this, inputs = that.element.find(that._inputSelector), sorted = [];\n for (var idx = 0, length = inputs.length; idx < length; idx++) {\n var input = $(inputs[idx]);\n if (hasAttribute(input, NAME)) {\n if (sorted.indexOf(input.attr(NAME)) === -1 || input.closest('.k-checkbox-list').length === 0 && input.closest('.k-radio-list').length === 0) {\n sorted.push(input.attr(NAME));\n }\n }\n }\n return sorted;\n },\n _associateMessageContainer: function (input, errorId) {\n var nextFocusable = kendo.getWidgetFocusableElement(input);\n if (!nextFocusable || !errorId) {\n return;\n }\n kendo.toggleAttribute(nextFocusable, ARIADESCRIBEDBY, errorId);\n },\n _disassociateMessageContainers: function () {\n var that = this, inputs = that.element.find('.' + INVALIDINPUT).addBack(), input, errorId;\n for (var i = 0; i < inputs.length; i += 1) {\n input = $(inputs[i]);\n if (input.is('input')) {\n errorId = that._findMessageContainer(input.attr(NAME)).add(input.next('.' + INVALIDMSG)).attr('id');\n that._associateMessageContainer(input, errorId);\n }\n }\n },\n _errorsByName: function () {\n var that = this, inputNames = that._getInputNames(), sorted = [];\n for (var i = 0; i < inputNames.length; i += 1) {\n var name = inputNames[i];\n if (that._errors[name]) {\n sorted.push({\n field: name,\n message: that._errors[name]\n });\n }\n }\n return sorted;\n },\n _renderSummary: function () {\n var that = this, options = this.options.validationSummary, element = this.element, prevElement = element.prev(), container;\n if (options.container) {\n container = $(options.container);\n } else if (prevElement && prevElement.hasClass(VALIDATIONSUMMARY)) {\n container = prevElement;\n } else {\n container = $('
    ').insertBefore(that.element);\n }\n container.addClass([\n VALIDATIONSUMMARY,\n MESSAGEBOX\n ].join(' '));\n container.attr('role', 'alert');\n container.on('click' + NS, proxy(that._summaryClick, that));\n return container;\n },\n _summaryClick: function (e) {\n e.preventDefault();\n var that = this, link = $(e.target), target = that.element.find('[name=\\'' + link.data('field') + '\\']'), nextFocusable;\n if (!target.length) {\n return;\n }\n nextFocusable = kendo.getWidgetFocusableElement(target);\n if (nextFocusable) {\n nextFocusable.focus();\n }\n },\n showValidationSummary: function () {\n var that = this, summary = that.validationSummary, errors = that._errorsByName(), errorsList;\n if (!summary) {\n summary = that.validationSummary = that._renderSummary();\n }\n errorsList = parseHtml(that._summaryTemplate({ errors: errors }));\n summary.html(errorsList);\n summary.toggleClass('k-hidden', !errors.length);\n },\n hideValidationSummary: function () {\n var that = this, summary = that.validationSummary;\n if (!summary) {\n return;\n }\n summary.addClass('k-hidden');\n }\n });\n kendo.ui.plugin(Validator);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.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.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.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.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 } else if (yIsScrollable && yDelta < 0) {\n parent.scrollTop = 0;\n }\n if (xInBounds) {\n parent.scrollLeft += velocity.x;\n } else if (xIsScrollable && xDelta < 0) {\n parent.scrollLeft = 0;\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 clearInterval(this._scrollInterval);\n this._scrollInterval = null;\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.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 omitOriginOffsets: false\n },\n _animationClose: function () {\n var that = this;\n var location = that.wrapper.data(LOCATION);\n that.wrapper.hide();\n if (location) {\n that.wrapper.css(location);\n }\n if (that.options.anchor != BODY) {\n that._hideDirClass();\n }\n that._closing = false;\n that._trigger(DEACTIVATE);\n },\n destroy: function () {\n var that = this, options = that.options, element = that.element.off(NS), parent;\n Widget.fn.destroy.call(that);\n if (options.toggleTarget) {\n $(options.toggleTarget).off(NS);\n }\n if (!options.modal) {\n DOCUMENT_ELEMENT.off(that.downEvent, that._mousedownProxy);\n that._toggleResize(false);\n }\n kendo.destroy(that.element.children());\n element.removeData();\n if (options.appendTo[0] === document.body) {\n parent = element.parent('.k-animation-container');\n if (parent[0]) {\n parent.remove();\n } else {\n element.remove();\n }\n }\n },\n open: function (x, y) {\n var that = this, fixed = {\n isFixed: !isNaN(parseInt(y, 10)),\n x: x,\n y: y\n }, element = that.element, options = that.options, animation, wrapper, anchor = $(options.anchor), mobile = element[0] && element.hasClass('km-widget');\n if (!that.visible()) {\n if (options.copyAnchorStyles) {\n if (mobile && styles[0] == 'font-size') {\n styles.shift();\n }\n element.css(kendo.getComputedStyles(anchor[0], styles));\n }\n if (element.data('animating') || that._trigger(OPEN)) {\n return;\n }\n that._activated = false;\n if (!options.modal) {\n DOCUMENT_ELEMENT.off(that.downEvent, that._mousedownProxy).on(that.downEvent, that._mousedownProxy);\n that._toggleResize(false);\n that._toggleResize(true);\n }\n that.wrapper = wrapper = kendo.wrap(element, options.autosize).css({\n overflow: HIDDEN,\n display: 'block',\n position: ABSOLUTE\n }).attr('aria-hidden', false);\n if (support.mobileOS.android) {\n wrapper.css(TRANSFORM, 'translatez(0)');\n }\n wrapper.css(POSITION);\n if ($(options.appendTo)[0] == document.body) {\n wrapper.css(TOP, '-10000px');\n }\n that.flipped = that._position(fixed);\n animation = that._openAnimation();\n if (options.anchor != BODY) {\n that._showDirClass(animation);\n }\n if (!element.is(':visible') && element.data('olddisplay') === undefined) {\n element.show();\n element.data('olddisplay', element.css('display'));\n element.hide();\n }\n element.data(EFFECTS, animation.effects).kendoStop(true).kendoAnimate(animation).attr('aria-hidden', false);\n }\n },\n _location: function (isFixed) {\n var that = this, element = that.element, options = that.options, wrapper, anchor = $(options.anchor), mobile = element[0] && element.hasClass('km-widget');\n if (options.copyAnchorStyles) {\n if (mobile && styles[0] == 'font-size') {\n styles.shift();\n }\n element.css(kendo.getComputedStyles(anchor[0], styles));\n }\n that.wrapper = wrapper = kendo.wrap(element, options.autosize).css({\n overflow: HIDDEN,\n display: 'block',\n position: ABSOLUTE\n });\n if (support.mobileOS.android) {\n wrapper.css(TRANSFORM, 'translatez(0)');\n }\n wrapper.css(POSITION);\n if ($(options.appendTo)[0] == document.body) {\n wrapper.css(TOP, '-10000px');\n }\n that._position(isFixed || {});\n var offset = wrapper.offset();\n return {\n width: kendo._outerWidth(wrapper),\n height: kendo._outerHeight(wrapper),\n left: offset.left,\n top: offset.top\n };\n },\n _openAnimation: function () {\n var animation = extend(true, {}, this.options.animation.open);\n animation.effects = kendo.parseEffects(animation.effects, this.flipped);\n return animation;\n },\n _hideDirClass: function () {\n var anchor = $(this.options.anchor);\n var direction = ((anchor.attr('class') || '').match(ACTIVEBORDERREGEXP) || [\n '',\n 'down'\n ])[1];\n var dirClass = ACTIVEBORDER + '-' + direction;\n anchor.removeClass(dirClass).children(ACTIVECHILDREN).removeClass(ACTIVE).removeClass(dirClass);\n this.element.removeClass(ACTIVEBORDER + '-' + kendo.directions[direction].reverse);\n },\n _showDirClass: function (animation) {\n var direction = animation.effects.slideIn ? animation.effects.slideIn.direction : 'down';\n var dirClass = ACTIVEBORDER + '-' + direction;\n $(this.options.anchor).addClass(dirClass).children(ACTIVECHILDREN).addClass(ACTIVE).addClass(dirClass);\n this.element.addClass(ACTIVEBORDER + '-' + kendo.directions[direction].reverse);\n },\n position: function () {\n if (this.visible()) {\n this.flipped = this._position();\n }\n },\n toggle: function () {\n var that = this;\n that[that.visible() ? CLOSE : OPEN]();\n },\n visible: function () {\n return this.element.is(':' + VISIBLE);\n },\n close: function (skipEffects) {\n var that = this, options = that.options, wrap, animation, openEffects, closeEffects;\n if (that.visible()) {\n wrap = that.wrapper[0] ? that.wrapper : kendo.wrap(that.element).hide();\n that._toggleResize(false);\n if (that._closing || that._trigger(CLOSE)) {\n that._toggleResize(true);\n return;\n }\n that.element.find('.k-popup').each(function () {\n var that = $(this), popup = that.data('kendoPopup');\n if (popup) {\n popup.close(skipEffects);\n }\n });\n DOCUMENT_ELEMENT.off(that.downEvent, that._mousedownProxy);\n if (skipEffects) {\n animation = {\n hide: true,\n effects: {}\n };\n } else {\n animation = extend(true, {}, options.animation.close);\n openEffects = that.element.data(EFFECTS);\n closeEffects = animation.effects;\n if (!closeEffects && !kendo.size(closeEffects) && openEffects && kendo.size(openEffects)) {\n animation.effects = openEffects;\n animation.reverse = true;\n }\n that._closing = true;\n }\n that.element.kendoStop(true).attr('aria-hidden', true);\n wrap.css({ overflow: HIDDEN }).attr('aria-hidden', true);\n that.element.kendoAnimate(animation);\n if (skipEffects) {\n that._animationClose();\n }\n }\n },\n _trigger: function (ev) {\n return this.trigger(ev, { type: ev });\n },\n _resize: function (e) {\n var that = this;\n if (support.resize.indexOf(e.type) !== -1) {\n clearTimeout(that._resizeTimeout);\n that._resizeTimeout = setTimeout(function () {\n that._position();\n that._resizeTimeout = null;\n }, 50);\n } else {\n if (!that._hovered || that._activated && that.element.hasClass('k-list-container')) {\n that.close();\n }\n }\n },\n _toggleResize: function (toggle) {\n var method = toggle ? 'on' : 'off';\n var eventNames = support.resize;\n if (!(support.mobileOS.ios || support.mobileOS.android || support.browser.safari)) {\n eventNames += ' ' + SCROLL;\n }\n if (toggle && !this.scrollableParents) {\n this.scrollableParents = this._scrollableParents();\n }\n if (this.scrollableParents && this.scrollableParents.length) {\n this.scrollableParents[method](SCROLL, this._resizeProxy);\n }\n WINDOW[method](eventNames, this._resizeProxy);\n },\n _mousedown: function (e) {\n var that = this, container = that.element[0], options = that.options, anchor = $(options.anchor)[0], toggleTarget = options.toggleTarget, target = kendo.eventTarget(e), popup = $(target).closest('.k-popup'), mobile = popup.parent().parent('.km-shim').length;\n popup = popup[0];\n if (!mobile && popup && popup !== that.element[0]) {\n return;\n }\n if ($(e.target).closest('a').data('rel') === 'popover') {\n return;\n }\n if (!contains(container, target) && !contains(anchor, target) && !(toggleTarget && contains($(toggleTarget)[0], target))) {\n that.close();\n }\n },\n _fit: function (position, size, viewPortSize) {\n var output = 0;\n if (position + size > viewPortSize) {\n output = viewPortSize - (position + size);\n }\n if (position < 0) {\n output = -position;\n }\n return output;\n },\n _flip: function (offset, size, anchorSize, viewPortSize, origin, position, boxSize) {\n var output = 0;\n boxSize = boxSize || size;\n if (position !== origin && position !== CENTER && origin !== CENTER) {\n if (offset + boxSize > viewPortSize) {\n output += -(anchorSize + size);\n }\n if (offset + output < 0) {\n output += anchorSize + size;\n }\n }\n return output;\n },\n _scrollableParents: function () {\n return $(this.options.anchor).parentsUntil('body').filter(function (index, element) {\n return kendo.isScrollable(element);\n });\n },\n _position: function (fixed) {\n var that = this, element = that.element, wrapper = that.wrapper, options = that.options, viewport = $(options.viewport), zoomLevel = support.zoomLevel(), isWindow = !!(viewport[0] == window && window.innerWidth && zoomLevel <= 1.02), anchor = $(options.anchor), origins = options.origin.toLowerCase().split(' '), positions = options.position.toLowerCase().split(' '), collisions = that.collisions, siblingContainer, parents, parentZIndex, zIndex = 10002, idx = 0, docEl = document.documentElement, length, viewportOffset, viewportWidth, viewportHeight;\n if (options.viewport === window) {\n viewportOffset = {\n top: window.pageYOffset || document.documentElement.scrollTop || 0,\n left: window.pageXOffset || document.documentElement.scrollLeft || 0\n };\n } else {\n viewportOffset = viewport.offset();\n }\n if (isWindow) {\n viewportWidth = window.innerWidth;\n viewportHeight = window.innerHeight;\n } else {\n viewportWidth = viewport.width();\n viewportHeight = viewport.height();\n }\n if (isWindow && docEl.scrollHeight - docEl.clientHeight > 0) {\n var sign = options.isRtl ? -1 : 1;\n viewportWidth -= sign * kendo.support.scrollbar();\n }\n siblingContainer = anchor.parents().filter(wrapper.siblings());\n if (siblingContainer[0]) {\n parentZIndex = Math.max(Number(siblingContainer.css('zIndex')), 0);\n if (parentZIndex) {\n zIndex = parentZIndex + 10;\n } else {\n parents = anchor.parentsUntil(siblingContainer);\n for (length = parents.length; idx < length; idx++) {\n parentZIndex = Number($(parents[idx]).css('zIndex'));\n if (parentZIndex && zIndex < parentZIndex) {\n zIndex = parentZIndex + 10;\n }\n }\n }\n }\n wrapper.css('zIndex', zIndex);\n if (fixed && fixed.isFixed) {\n wrapper.css({\n left: fixed.x,\n top: fixed.y\n });\n } else {\n wrapper.css(that._align(origins, positions));\n }\n var pos = getOffset(wrapper, POSITION, anchor[0] === wrapper.offsetParent()[0]), offset = getOffset(wrapper), anchorParent = anchor.offsetParent().parent('.k-animation-container,.k-popup,.k-group');\n if (anchorParent.length) {\n pos = getOffset(wrapper, POSITION, true);\n offset = getOffset(wrapper);\n }\n offset.top -= viewportOffset.top;\n offset.left -= viewportOffset.left;\n if (!that.wrapper.data(LOCATION)) {\n wrapper.data(LOCATION, extend({}, pos));\n }\n var offsets = extend({}, offset), location = extend({}, pos), adjustSize = options.adjustSize;\n if (collisions[0] === 'fit') {\n location.top += that._fit(offsets.top, outerHeight(wrapper) + adjustSize.height, viewportHeight / zoomLevel);\n }\n if (collisions[1] === 'fit') {\n location.left += that._fit(offsets.left, outerWidth(wrapper) + adjustSize.width, viewportWidth / zoomLevel);\n }\n var flipPos = extend({}, location);\n var elementHeight = outerHeight(element);\n var wrapperHeight = outerHeight(wrapper);\n if (!wrapper.height() && elementHeight) {\n wrapperHeight = wrapperHeight + elementHeight;\n }\n if (collisions[0] === 'flip') {\n location.top += that._flip(offsets.top, elementHeight, outerHeight(anchor), viewportHeight / zoomLevel, origins[0], positions[0], wrapperHeight);\n }\n if (collisions[1] === 'flip') {\n location.left += that._flip(offsets.left, outerWidth(element), outerWidth(anchor), viewportWidth / zoomLevel, origins[1], positions[1], outerWidth(wrapper));\n }\n element.css(POSITION, ABSOLUTE);\n wrapper.css(location);\n return location.left != flipPos.left || location.top != flipPos.top;\n },\n _align: function (origin, position) {\n var that = this, element = that.wrapper, anchor = $(that.options.anchor), verticalOrigin = origin[0], horizontalOrigin = origin[1], verticalPosition = position[0], horizontalPosition = position[1], anchorOffset = getOffset(anchor), appendTo = $(that.options.appendTo), appendToOffset, width = outerWidth(element), height = outerHeight(element) || outerHeight(element.children().first()), anchorWidth = outerWidth(anchor), anchorHeight = outerHeight(anchor), top = that.options.omitOriginOffsets ? 0 : anchorOffset.top, left = that.options.omitOriginOffsets ? 0 : 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.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.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 kendo.scrollLeft(this.scrollElement, abs(x));\n this.scrollElement.scrollTop(abs(y));\n } else {\n this.dimensions.refresh();\n this.movable.moveTo({\n x: x,\n y: y\n });\n }\n },\n animatedScrollTo: function (x, y, callback) {\n var from, to;\n if (this._native) {\n this.scrollTo(x, y);\n } else {\n from = {\n x: this.movable.x,\n y: this.movable.y\n };\n to = {\n x: x,\n y: y\n };\n this.animatedScroller.setCoordinates(from, to);\n this.animatedScroller.setCallback(callback);\n this.animatedScroller.start();\n }\n },\n pullHandled: function () {\n var that = this;\n that.refreshHint.removeClass(REFRESHCLASS);\n that.hintContainer.html(that.pullTemplate({}));\n that.yinertia.onEnd();\n that.xinertia.onEnd();\n that.userEvents.cancel();\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n if (this.userEvents) {\n this.userEvents.destroy();\n }\n },\n _scale: function (scale) {\n this.dimensions.rescale(scale);\n this.movable.scaleTo(scale);\n },\n _initPullToRefresh: function () {\n var that = this;\n that.dimensions.y.forceEnabled();\n that.pullTemplate = kendo.template(that.options.messages.pullTemplate);\n that.releaseTemplate = kendo.template(that.options.messages.releaseTemplate);\n that.refreshTemplate = kendo.template(that.options.messages.refreshTemplate);\n that.scrollElement.prepend('' + 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.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] && kendo.trim(centerElement.text()) === '', android = !!(kendo.mobile.application && kendo.mobile.application.element.is('.km-android'));\n centerElement.prevAll().toggleClass('km-absolute', noTitle);\n centerElement.toggleClass('km-show-title', showTitle);\n centerElement.toggleClass('km-fill-title', showTitle && !kendo.trim(centerElement.html()));\n centerElement.toggleClass('km-no-title', noTitle);\n centerElement.toggleClass('km-hide-title', android && !siblings.children().is(':visible'));\n }\n var NavBar = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n element = that.element;\n that.container().bind('show', $.proxy(this, 'refresh'));\n element.addClass('km-navbar').wrapInner($('
    '));\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.mobile', [\n 'kendo.core',\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.router',\n 'kendo.view',\n 'kendo.userevents',\n 'kendo.draganddrop',\n 'kendo.popup',\n 'kendo.touch',\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}));"]}