{"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","moveDateToWeekStart","weekStartDay","addDays","calcWeekInYear","firstWeekInYear","newDate","diffInMS","MS_PER_DAY","weekInYear","prevWeekDate","nextWeekDate","weekNumber","toUtcTime","toInvariantTime","isInTimeRange","msValue","msMin","msMax","isInDateRange","setTime","ignoreDST","difference","MS_PER_MINUTE","today","isToday","staticDate","nextDay","previousDay","MS_PER_HOUR","stripWhitespace","iterator","child","createNodeIterator","NodeFilter","SHOW_TEXT","node","FILTER_ACCEPT","FILTER_REJECT","nextNode","referenceNode","textContent","trim","childNodes","nodeValue","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","queueAnimation","runNextAnimation","parseQueryStringParams","queryString","params","paramParts","elementUnderCursor","x","client","wheelDeltaY","jQueryEvent","delta","deltaY","wheelDelta","detail","axis","VERTICAL_AXIS","throttle","delay","timeout","throttled","lastExecTime","elapsed","caret","rangeElement","rangeDuplicated","selectionStart","selectionEnd","isPosition","focus","setSelectionRange","selection","createTextRange","collapse","moveStart","moveEnd","select","duplicate","moveToBookmark","createRange","getBookmark","setEndPoint","text","compileMobileDirective","scope","injector","invoke","$compile","$$phase","$digest","antiForgeryTokens","tokens","csrf_token","csrf_param","cycleForm","form","firstElement","lastElement","keyCode","shiftKey","focusElement","scrollTopPositions","scrollableParents","parentsUntil","setActive","focusNextElement","focussable","nextElement","getWidgetFocusableElement","nextFocusable","addAttribute","attribute","removeAttribute","toggleAttribute","matchesMedia","mediaQuery","media","_bootstrapToMedia","bootstrapMedia","xs","sm","md","lg","xl","fileGroupMap","audio","video","image","txt","presentation","programming","pdf","config","zip","disc-image","getFileGroup","extension","withPrefix","extensions","fileTypeMap","groups","getFileSizeMessage","sizes","pow","selectorFromClasses","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","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","_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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C,GAAM,uBACRL,IAEN/hC,GAAMqiC,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,SAEJr/B,MACI,OACA,OACA,SAEJs/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,SAGR/iC,GAAMgjC,aAAe,SAAUC,EAAWC,GAArB,GAORvgC,GACDwgC,EAPJC,EAAcpjC,GAAMqiC,aACpBgB,EAASvyB,OAAO0a,KAAK4X,GACrB/7B,EAAO,MACX,IAAI47B,IAAcvkC,IAAcukC,EAAUvjC,OACtC,MAAO2H,EAEX,KAAS1E,EAAI,EAAGA,EAAI0gC,EAAO3jC,OAAQiD,GAAK,EAEpC,GADIwgC,EAAaC,EAAYC,EAAO1gC,IAChCwgC,EAAWn9B,QAAQi9B,EAAUr+B,kBAC7B,MAAOs+B,GAAa,QAAUG,EAAO1gC,GAAK0gC,EAAO1gC,EAGzD,OAAO0E,IAEXrH,GAAMsjC,mBAAqB,SAAUz9B,GAAV,GAWnBlD,GAVA4gC,GACA,QACA,KACA,KACA,KACA,KAEJ,OAAa,KAAT19B,EACO,UAEPlD,EAAI+H,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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.1.224'.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 == 'auto' || overflow == 'scroll';\n }\n function scrollLeft(element, value) {\n var webkit = support.browser.webkit;\n var mozila = support.browser.mozilla;\n var browserVersion = support.browser.version;\n var el, isRtl;\n if (element instanceof $ && value !== undefined) {\n element.each(function (i, e) {\n scrollLeft(e, value);\n });\n return;\n } else {\n el = element instanceof $ ? element[0] : element;\n }\n if (!el) {\n return;\n }\n isRtl = support.isRtl(element);\n if (value !== undefined) {\n if (isRtl && webkit && (browserVersion < 85 || support.browser.safari)) {\n el.scrollLeft = el.scrollWidth - el.clientWidth - value;\n } else if (isRtl && (mozila || webkit) && value > 0) {\n el.scrollLeft = -value;\n } else {\n el.scrollLeft = value;\n }\n } else {\n if (isRtl && webkit && (browserVersion < 85 || support.browser.safari)) {\n return el.scrollWidth - el.clientWidth - el.scrollLeft;\n } else {\n return Math.abs(el.scrollLeft);\n }\n }\n }\n (function () {\n support._scrollbar = undefined;\n support.scrollbar = function (refresh) {\n if (!isNaN(support._scrollbar) && !refresh) {\n return support._scrollbar;\n } else {\n var div = document.createElement('div'), result;\n div.style.cssText = 'overflow:scroll;overflow-x:hidden;zoom:1;clear:both;display:block';\n div.innerHTML = ' ';\n document.body.appendChild(div);\n support._scrollbar = result = div.offsetWidth - div.scrollWidth;\n document.body.removeChild(div);\n return result;\n }\n };\n support.isRtl = function (element) {\n return $(element).closest('.k-rtl').length > 0;\n };\n var table = document.createElement('table');\n try {\n table.innerHTML = '';\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 = 'abcdefghijklmnopqrstuvwxyz';\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 moveDateToWeekStart(date, weekStartDay) {\n if (weekStartDay !== 1) {\n return addDays(dayOfWeek(date, weekStartDay, -1), 4);\n }\n return addDays(date, 4 - (date.getDay() || 7));\n }\n function calcWeekInYear(date, weekStartDay) {\n var firstWeekInYear = new Date(date.getFullYear(), 0, 1, -6);\n var newDate = moveDateToWeekStart(date, weekStartDay);\n var diffInMS = newDate.getTime() - firstWeekInYear.getTime();\n var days = Math.floor(diffInMS / MS_PER_DAY);\n return 1 + Math.floor(days / 7);\n }\n function weekInYear(date, weekStartDay) {\n if (weekStartDay === undefined) {\n weekStartDay = kendo.culture().calendar.firstDay;\n }\n var prevWeekDate = addDays(date, -7);\n var nextWeekDate = addDays(date, 7);\n var weekNumber = calcWeekInYear(date, weekStartDay);\n if (weekNumber === 0) {\n return calcWeekInYear(prevWeekDate, weekStartDay) + 1;\n }\n if (weekNumber === 53 && calcWeekInYear(nextWeekDate, weekStartDay) > 1) {\n return 1;\n }\n return weekNumber;\n }\n function getDate(date) {\n date = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0);\n adjustDST(date, 0);\n return date;\n }\n function toUtcTime(date) {\n return Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n }\n function getMilliseconds(date) {\n return toInvariantTime(date).getTime() - getDate(toInvariantTime(date));\n }\n function isInTimeRange(value, min, max) {\n var msMin = getMilliseconds(min), msMax = getMilliseconds(max), msValue;\n if (!value || msMin == msMax) {\n return true;\n }\n if (min >= max) {\n max += MS_PER_DAY;\n }\n msValue = getMilliseconds(value);\n if (msMin > msValue) {\n msValue += MS_PER_DAY;\n }\n if (msMax < msMin) {\n msMax += MS_PER_DAY;\n }\n return msValue >= msMin && msValue <= msMax;\n }\n function isInDateRange(value, min, max) {\n var msMin = min.getTime(), msMax = max.getTime(), msValue;\n if (msMin >= msMax) {\n msMax += MS_PER_DAY;\n }\n msValue = value.getTime();\n return msValue >= msMin && msValue <= msMax;\n }\n function addDays(date, offset) {\n var hours = date.getHours();\n date = new Date(date);\n setTime(date, offset * MS_PER_DAY);\n adjustDST(date, hours);\n return date;\n }\n function setTime(date, milliseconds, ignoreDST) {\n var offset = date.getTimezoneOffset();\n var difference;\n date.setTime(date.getTime() + milliseconds);\n if (!ignoreDST) {\n difference = date.getTimezoneOffset() - offset;\n date.setTime(date.getTime() + difference * MS_PER_MINUTE);\n }\n }\n function setHours(date, time) {\n date = new Date(date.getFullYear(), date.getMonth(), date.getDate(), time.getHours(), time.getMinutes(), time.getSeconds(), time.getMilliseconds());\n adjustDST(date, time.getHours());\n return date;\n }\n function today() {\n return getDate(new Date());\n }\n function isToday(date) {\n return getDate(date).getTime() == today().getTime();\n }\n function toInvariantTime(date) {\n var staticDate = new Date(1980, 1, 1, 0, 0, 0);\n if (date) {\n staticDate.setHours(date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n }\n return staticDate;\n }\n return {\n adjustDST: adjustDST,\n dayOfWeek: dayOfWeek,\n setDayOfWeek: setDayOfWeek,\n getDate: getDate,\n isInDateRange: isInDateRange,\n isInTimeRange: isInTimeRange,\n isToday: isToday,\n nextDay: function (date) {\n return addDays(date, 1);\n },\n previousDay: function (date) {\n return addDays(date, -1);\n },\n toUtcTime: toUtcTime,\n MS_PER_DAY: MS_PER_DAY,\n MS_PER_HOUR: 60 * MS_PER_MINUTE,\n MS_PER_MINUTE: MS_PER_MINUTE,\n setTime: setTime,\n setHours: setHours,\n addDays: addDays,\n today: today,\n toInvariantTime: toInvariantTime,\n firstDayOfMonth: firstDayOfMonth,\n lastDayOfMonth: lastDayOfMonth,\n weekInYear: weekInYear,\n getMilliseconds: getMilliseconds\n };\n }();\n kendo.stripWhitespace = function (element) {\n if (document.createNodeIterator) {\n var iterator = document.createNodeIterator(element, NodeFilter.SHOW_TEXT, function (node) {\n return node.parentNode == element ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;\n }, false);\n while (iterator.nextNode()) {\n if (iterator.referenceNode && !iterator.referenceNode.textContent.trim()) {\n iterator.referenceNode.parentNode.removeChild(iterator.referenceNode);\n }\n }\n } else {\n for (var i = 0; i < element.childNodes.length; i++) {\n var child = element.childNodes[i];\n if (child.nodeType == 3 && !/\\S/.test(child.nodeValue)) {\n element.removeChild(child);\n i--;\n }\n if (child.nodeType == 1) {\n kendo.stripWhitespace(child);\n }\n }\n }\n };\n var animationFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function (callback) {\n setTimeout(callback, 1000 / 60);\n };\n kendo.animationFrame = function (callback) {\n animationFrame.call(window, callback);\n };\n var animationQueue = [];\n kendo.queueAnimation = function (callback) {\n animationQueue[animationQueue.length] = callback;\n if (animationQueue.length === 1) {\n kendo.runNextAnimation();\n }\n };\n kendo.runNextAnimation = function () {\n kendo.animationFrame(function () {\n if (animationQueue[0]) {\n animationQueue.shift()();\n if (animationQueue[0]) {\n kendo.runNextAnimation();\n }\n }\n });\n };\n kendo.parseQueryStringParams = function (url) {\n var queryString = url.split('?')[1] || '', params = {}, paramParts = queryString.split(/&|=/), length = paramParts.length, idx = 0;\n for (; idx < length; idx += 2) {\n if (paramParts[idx] !== '') {\n params[decodeURIComponent(paramParts[idx])] = decodeURIComponent(paramParts[idx + 1]);\n }\n }\n return params;\n };\n kendo.elementUnderCursor = function (e) {\n if (typeof e.x.client != 'undefined') {\n return document.elementFromPoint(e.x.client, e.y.client);\n }\n };\n kendo.wheelDeltaY = function (jQueryEvent) {\n var e = jQueryEvent.originalEvent, deltaY = e.wheelDeltaY, delta;\n if (e.wheelDelta) {\n if (deltaY === undefined || deltaY) {\n delta = e.wheelDelta;\n }\n } else if (e.detail && e.axis === e.VERTICAL_AXIS) {\n delta = -e.detail * 10;\n }\n return delta;\n };\n kendo.throttle = function (fn, delay) {\n var timeout;\n var lastExecTime = 0;\n if (!delay || delay <= 0) {\n return fn;\n }\n var throttled = function () {\n var that = this;\n var elapsed = +new Date() - lastExecTime;\n var args = arguments;\n function exec() {\n fn.apply(that, args);\n lastExecTime = +new Date();\n }\n if (!lastExecTime) {\n return exec();\n }\n if (timeout) {\n clearTimeout(timeout);\n }\n if (elapsed > delay) {\n exec();\n } else {\n timeout = setTimeout(exec, delay - elapsed);\n }\n };\n throttled.cancel = function () {\n clearTimeout(timeout);\n };\n return throttled;\n };\n kendo.caret = function (element, start, end) {\n var rangeElement;\n var isPosition = start !== undefined;\n if (end === undefined) {\n end = start;\n }\n if (element[0]) {\n element = element[0];\n }\n if (isPosition && element.disabled) {\n return;\n }\n try {\n if (element.selectionStart !== undefined) {\n if (isPosition) {\n element.focus();\n var mobile = support.mobileOS;\n if (mobile.wp || mobile.android) {\n setTimeout(function () {\n element.setSelectionRange(start, end);\n }, 0);\n } else {\n element.setSelectionRange(start, end);\n }\n } else {\n start = [\n element.selectionStart,\n element.selectionEnd\n ];\n }\n } else if (document.selection) {\n if ($(element).is(':visible')) {\n element.focus();\n }\n rangeElement = element.createTextRange();\n if (isPosition) {\n rangeElement.collapse(true);\n rangeElement.moveStart('character', start);\n rangeElement.moveEnd('character', end - start);\n rangeElement.select();\n } else {\n var rangeDuplicated = rangeElement.duplicate(), selectionStart, selectionEnd;\n rangeElement.moveToBookmark(document.selection.createRange().getBookmark());\n rangeDuplicated.setEndPoint('EndToStart', rangeElement);\n selectionStart = rangeDuplicated.text.length;\n selectionEnd = selectionStart + rangeElement.text.length;\n start = [\n selectionStart,\n selectionEnd\n ];\n }\n }\n } catch (e) {\n start = [];\n }\n return start;\n };\n kendo.compileMobileDirective = function (element, scope) {\n var angular = window.angular;\n element.attr('data-' + kendo.ns + 'role', element[0].tagName.toLowerCase().replace('kendo-mobile-', '').replace('-', ''));\n angular.element(element).injector().invoke([\n '$compile',\n function ($compile) {\n $compile(element)(scope);\n if (!/^\\$(digest|apply)$/.test(scope.$$phase)) {\n scope.$digest();\n }\n }\n ]);\n return kendo.widgetInstance(element, kendo.mobile.ui);\n };\n kendo.antiForgeryTokens = function () {\n var tokens = {}, csrf_token = $('meta[name=csrf-token],meta[name=_csrf]').attr('content'), csrf_param = $('meta[name=csrf-param],meta[name=_csrf_header]').attr('content');\n $('input[name^=\\'__RequestVerificationToken\\']').each(function () {\n tokens[this.name] = this.value;\n });\n if (csrf_param !== undefined && csrf_token !== undefined) {\n tokens[csrf_param] = csrf_token;\n }\n return tokens;\n };\n kendo.cycleForm = function (form) {\n var firstElement = form.find('input, .k-widget').first();\n var lastElement = form.find('button, .k-button').last();\n function focus(el) {\n var widget = kendo.widgetInstance(el);\n if (widget && widget.focus) {\n widget.focus();\n } else {\n el.focus();\n }\n }\n lastElement.on('keydown', function (e) {\n if (e.keyCode == kendo.keys.TAB && !e.shiftKey) {\n e.preventDefault();\n focus(firstElement);\n }\n });\n firstElement.on('keydown', function (e) {\n if (e.keyCode == kendo.keys.TAB && e.shiftKey) {\n e.preventDefault();\n focus(lastElement);\n }\n });\n };\n kendo.focusElement = function (element) {\n var scrollTopPositions = [];\n var scrollableParents = element.parentsUntil('body').filter(function (index, element) {\n var computedStyle = kendo.getComputedStyles(element, ['overflow']);\n return computedStyle.overflow !== 'visible';\n }).add(window);\n scrollableParents.each(function (index, parent) {\n scrollTopPositions[index] = $(parent).scrollTop();\n });\n try {\n element[0].setActive();\n } catch (e) {\n element[0].focus();\n }\n scrollableParents.each(function (index, parent) {\n $(parent).scrollTop(scrollTopPositions[index]);\n });\n };\n kendo.focusNextElement = function () {\n if (document.activeElement) {\n var focussable = $(':kendoFocusable');\n var index = focussable.index(document.activeElement);\n if (index > -1) {\n var nextElement = focussable[index + 1] || focussable[0];\n nextElement.focus();\n }\n }\n };\n kendo.trim = function (value) {\n if (!!value) {\n return value.toString().trim();\n } else {\n return '';\n }\n };\n kendo.getWidgetFocusableElement = function (element) {\n var nextFocusable = element.closest(':kendoFocusable'), widgetInstance = kendo.widgetInstance(element), target;\n if (nextFocusable.length) {\n target = nextFocusable;\n } else if (widgetInstance) {\n target = widgetInstance.options.name === 'Editor' ? $(widgetInstance.body) : widgetInstance.wrapper.find(':kendoFocusable').first();\n } else {\n target = element;\n }\n return target;\n };\n kendo.addAttribute = function (element, attribute, value) {\n var current = element.attr(attribute) || '';\n if (current.indexOf(value) < 0) {\n element.attr(attribute, (current + ' ' + value).trim());\n }\n };\n kendo.removeAttribute = function (element, attribute, value) {\n var current = element.attr(attribute) || '';\n element.attr(attribute, current.replace(value, '').trim());\n };\n kendo.toggleAttribute = function (element, attribute, value) {\n var current = element.attr(attribute) || '';\n if (current.indexOf(value) < 0) {\n kendo.addAttribute(element, attribute, value);\n } else {\n kendo.removeAttribute(element, attribute, value);\n }\n };\n kendo.matchesMedia = function (mediaQuery) {\n var media = kendo._bootstrapToMedia(mediaQuery) || mediaQuery;\n return support.matchMedia && window.matchMedia(media).matches;\n };\n kendo._bootstrapToMedia = function (bootstrapMedia) {\n return {\n 'xs': '(max-width: 576px)',\n 'sm': '(min-width: 576px)',\n 'md': '(min-width: 768px)',\n 'lg': '(min-width: 992px)',\n 'xl': '(min-width: 1200px)'\n }[bootstrapMedia];\n };\n kendo.fileGroupMap = {\n audio: [\n '.aif',\n '.iff',\n '.m3u',\n '.m4a',\n '.mid',\n '.mp3',\n '.mpa',\n '.wav',\n '.wma',\n '.ogg',\n '.wav',\n '.wma',\n '.wpl'\n ],\n video: [\n '.3g2',\n '.3gp',\n '.avi',\n '.asf',\n '.flv',\n '.m4u',\n '.rm',\n '.h264',\n '.m4v',\n '.mkv',\n '.mov',\n '.mp4',\n '.mpg',\n '.rm',\n '.swf',\n '.vob',\n '.wmv'\n ],\n image: [\n '.ai',\n '.dds',\n '.heic',\n '.jpe',\n 'jfif',\n '.jif',\n '.jp2',\n '.jps',\n '.eps',\n '.bmp',\n '.gif',\n '.jpeg',\n '.jpg',\n '.png',\n '.ps',\n '.psd',\n '.svg',\n '.svgz',\n '.tif',\n '.tiff'\n ],\n txt: [\n '.doc',\n '.docx',\n '.log',\n '.pages',\n '.tex',\n '.wpd',\n '.wps',\n '.odt',\n '.rtf',\n '.text',\n '.txt',\n '.wks'\n ],\n presentation: [\n '.key',\n '.odp',\n '.pps',\n '.ppt',\n '.pptx'\n ],\n data: [\n '.xlr',\n '.xls',\n '.xlsx'\n ],\n programming: [\n '.tmp',\n '.bak',\n '.msi',\n '.cab',\n '.cpl',\n '.cur',\n '.dll',\n '.dmp',\n '.drv',\n '.icns',\n '.ico',\n '.link',\n '.sys',\n '.cfg',\n '.ini',\n '.asp',\n '.aspx',\n '.cer',\n '.csr',\n '.css',\n '.dcr',\n '.htm',\n '.html',\n '.js',\n '.php',\n '.rss',\n '.xhtml'\n ],\n pdf: ['.pdf'],\n config: [\n '.apk',\n '.app',\n '.bat',\n '.cgi',\n '.com',\n '.exe',\n '.gadget',\n '.jar',\n '.wsf'\n ],\n zip: [\n '.7z',\n '.cbr',\n '.gz',\n '.sitx',\n '.arj',\n '.deb',\n '.pkg',\n '.rar',\n '.rpm',\n '.tar.gz',\n '.z',\n '.zip',\n '.zipx'\n ],\n 'disc-image': [\n '.dmg',\n '.iso',\n '.toast',\n '.vcd',\n '.bin',\n '.cue',\n '.mdf'\n ]\n };\n kendo.getFileGroup = function (extension, withPrefix) {\n var fileTypeMap = kendo.fileGroupMap;\n var groups = Object.keys(fileTypeMap);\n var type = 'file';\n if (extension === undefined || !extension.length) {\n return type;\n }\n for (var i = 0; i < groups.length; i += 1) {\n var extensions = fileTypeMap[groups[i]];\n if (extensions.indexOf(extension.toLowerCase()) > -1) {\n return withPrefix ? 'file-' + groups[i] : groups[i];\n }\n }\n return type;\n };\n kendo.getFileSizeMessage = function (size) {\n var sizes = [\n 'Bytes',\n 'KB',\n 'MB',\n 'GB',\n 'TB'\n ];\n if (size === 0) {\n return '0 Byte';\n }\n var i = parseInt(Math.floor(Math.log(size) / Math.log(1024)), 10);\n return Math.round(size / Math.pow(1024, i), 2) + ' ' + sizes[i];\n };\n kendo.selectorFromClasses = function (classes) {\n return '.' + classes.split(' ').join('.');\n };\n 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 value = value || {};\n while (value) {\n Object.getOwnPropertyNames(value).forEach(function (prop) {\n if (props.indexOf(prop) === -1 && (!ignoreObjectKeys || objectKeys.indexOf(prop) < 0)) {\n props.push(prop);\n }\n });\n value = Object.getPrototypeOf(value);\n }\n return props;\n }\n objectKeys = ownKeys({}, false);\n var ObservableObject = Observable.extend({\n init: function (value) {\n var that = this, member, keys = ownKeys(value, true), parent = function () {\n return that;\n };\n Observable.fn.init.call(this);\n this._handlers = {};\n keys.forEach(function (field) {\n member = value[field];\n if (typeof member === 'object' && member && !member.getTime && field.charAt(0) != '_') {\n member = that.wrap(member, field, parent);\n }\n that[field] = member;\n });\n that.uid = kendo.guid();\n },\n shouldSerialize: function (field, serializeFunctions) {\n return this.hasOwnProperty(field) && field !== '_handlers' && field !== '_events' && (serializeFunctions && serializeFunctions[field] || typeof this[field] !== FUNCTION) && field !== 'uid';\n },\n forEach: function (f) {\n for (var i in this) {\n if (this.shouldSerialize(i)) {\n f(this[i], i);\n }\n }\n },\n toJSON: function (serializeFunctions) {\n var result = {}, value, field;\n for (field in this) {\n if (this.shouldSerialize(field, serializeFunctions)) {\n value = this[field];\n if (value instanceof ObservableObject || value instanceof ObservableArray) {\n value = value.toJSON(serializeFunctions);\n }\n result[field] = value;\n }\n }\n return result;\n },\n get: function (field) {\n var that = this, result;\n that.trigger(GET, { field: field });\n if (field === 'this') {\n result = that;\n } else {\n result = kendo.getter(field, true)(that);\n }\n return result;\n },\n _set: function (field, value) {\n var that = this;\n var composite = field.indexOf('.') >= 0;\n if (composite) {\n var paths = field.split('.'), path = '';\n while (paths.length > 1) {\n path += paths.shift();\n var obj = kendo.getter(path, true)(that);\n if (obj instanceof ObservableObject) {\n obj.set(paths.join('.'), value);\n return composite;\n }\n path += '.';\n }\n }\n kendo.setter(field)(that, value);\n return composite;\n },\n set: function (field, value) {\n var that = this, isSetPrevented = false, composite = field.indexOf('.') >= 0, current = kendo.getter(field, true)(that);\n if (current !== value) {\n if (current instanceof Observable && this._handlers[field]) {\n if (this._handlers[field].get) {\n current.unbind(GET, this._handlers[field].get);\n }\n current.unbind(CHANGE, this._handlers[field].change);\n }\n isSetPrevented = that.trigger('set', {\n field: field,\n value: value\n });\n if (!isSetPrevented) {\n if (!composite) {\n value = that.wrap(value, field, function () {\n return that;\n });\n }\n if (!that._set(field, value) || field.indexOf('(') >= 0 || field.indexOf('[') >= 0) {\n that.trigger(CHANGE, { field: field });\n }\n }\n }\n return isSetPrevented;\n },\n parent: noop,\n wrap: function (object, field, parent) {\n var that = this;\n var get;\n var change;\n var type = toString.call(object);\n if (object != null && (type === '[object Object]' || type === '[object Array]')) {\n var isObservableArray = object instanceof ObservableArray;\n var isDataSource = object instanceof DataSource;\n if (type === '[object Object]' && !isDataSource && !isObservableArray) {\n if (!(object instanceof ObservableObject)) {\n object = new ObservableObject(object);\n }\n get = eventHandler(that, GET, field, true);\n object.bind(GET, get);\n change = eventHandler(that, CHANGE, field, true);\n object.bind(CHANGE, change);\n that._handlers[field] = {\n get: get,\n change: change\n };\n } else if (type === '[object Array]' || isObservableArray || isDataSource) {\n if (!isObservableArray && !isDataSource) {\n object = new ObservableArray(object);\n }\n change = eventHandler(that, CHANGE, field, false);\n object.bind(CHANGE, change);\n that._handlers[field] = { change: change };\n }\n object.parent = parent;\n }\n return object;\n }\n });\n function equal(x, y) {\n if (x === y) {\n return true;\n }\n var xtype = $.type(x), ytype = $.type(y), field;\n if (xtype !== ytype) {\n return false;\n }\n if (xtype === 'date') {\n return x.getTime() === y.getTime();\n }\n if (xtype !== 'object' && xtype !== 'array') {\n return false;\n }\n for (field in x) {\n if (!equal(x[field], y[field])) {\n return false;\n }\n }\n return true;\n }\n var parsers = {\n 'number': function (value) {\n if (typeof value === STRING && value.toLowerCase() === 'null') {\n return null;\n }\n return kendo.parseFloat(value);\n },\n 'date': function (value) {\n if (typeof value === STRING && value.toLowerCase() === 'null') {\n return null;\n }\n return kendo.parseDate(value);\n },\n 'boolean': function (value) {\n if (typeof value === STRING) {\n if (value.toLowerCase() === 'null') {\n return null;\n } else {\n return value.toLowerCase() === 'true';\n }\n }\n return value != null ? !!value : value;\n },\n 'string': function (value) {\n if (typeof value === STRING && value.toLowerCase() === 'null') {\n return null;\n }\n return value != null ? value + '' : value;\n },\n 'default': function (value) {\n return value;\n }\n };\n var defaultValues = {\n 'string': '',\n 'number': 0,\n 'date': new Date(),\n 'boolean': false,\n 'default': ''\n };\n function getFieldByName(obj, name) {\n var field, fieldName;\n for (fieldName in obj) {\n field = obj[fieldName];\n if (isPlainObject(field) && field.field && field.field === name) {\n return field;\n } else if (field === name) {\n return field;\n }\n }\n return null;\n }\n var Model = ObservableObject.extend({\n init: function (data) {\n var that = this;\n if (!data || $.isEmptyObject(data)) {\n data = $.extend({}, that.defaults, data);\n if (that._initializers) {\n for (var idx = 0; idx < that._initializers.length; idx++) {\n var name = that._initializers[idx];\n data[name] = that.defaults[name]();\n }\n }\n }\n ObservableObject.fn.init.call(that, data);\n that.dirty = false;\n that.dirtyFields = {};\n if (that.idField) {\n that.id = that.get(that.idField);\n if (that.id === undefined) {\n that.id = that._defaultId;\n }\n }\n },\n shouldSerialize: function (field) {\n return ObservableObject.fn.shouldSerialize.call(this, field) && field !== 'uid' && !(this.idField !== 'id' && field === 'id') && field !== 'dirty' && field !== 'dirtyFields' && field !== '_accessors';\n },\n _parse: function (field, value) {\n var that = this, fieldName = field, fields = that.fields || {}, parse;\n field = fields[field];\n if (!field) {\n field = getFieldByName(fields, fieldName);\n }\n if (field) {\n parse = field.parse;\n if (!parse && field.type) {\n parse = parsers[field.type.toLowerCase()];\n }\n }\n return parse ? parse(value) : value;\n },\n _notifyChange: function (e) {\n var action = e.action;\n if (action == 'add' || action == 'remove') {\n this.dirty = true;\n this.dirtyFields[e.field] = true;\n }\n },\n editable: function (field) {\n field = (this.fields || {})[field];\n return field ? field.editable !== false : true;\n },\n set: function (field, value) {\n var that = this;\n var dirty = that.dirty;\n if (that.editable(field)) {\n value = that._parse(field, value);\n if (!equal(value, that.get(field))) {\n that.dirty = true;\n that.dirtyFields[field] = true;\n if (ObservableObject.fn.set.call(that, field, value) && !dirty) {\n that.dirty = dirty;\n if (!that.dirty) {\n that.dirtyFields[field] = false;\n }\n }\n } else {\n that.trigger('equalSet', {\n field: field,\n value: value\n });\n }\n }\n },\n accept: function (data) {\n var that = this, parent = function () {\n return that;\n }, field;\n for (field in data) {\n var value = data[field];\n if (field.charAt(0) != '_') {\n value = that.wrap(data[field], field, parent);\n }\n that._set(field, value);\n }\n if (that.idField) {\n that.id = that.get(that.idField);\n }\n that.dirty = false;\n that.dirtyFields = {};\n },\n isNew: function () {\n return this.id === this._defaultId;\n }\n });\n Model.define = function (base, options) {\n if (options === undefined) {\n options = base;\n base = Model;\n }\n var model, proto = extend({ defaults: {} }, options), name, field, type, value, idx, length, fields = {}, originalName, id = proto.id, functionFields = [];\n if (id) {\n proto.idField = id;\n }\n if (proto.id) {\n delete proto.id;\n }\n if (id) {\n proto.defaults[id] = proto._defaultId = '';\n }\n if (toString.call(proto.fields) === '[object Array]') {\n for (idx = 0, length = proto.fields.length; idx < length; idx++) {\n field = proto.fields[idx];\n if (typeof field === STRING) {\n fields[field] = {};\n } else if (field.field) {\n fields[field.field] = field;\n }\n }\n proto.fields = fields;\n }\n for (name in proto.fields) {\n field = proto.fields[name];\n type = field.type || 'default';\n value = null;\n originalName = name;\n name = typeof field.field === STRING ? field.field : name;\n if (!field.nullable) {\n value = proto.defaults[originalName !== name ? originalName : name] = field.defaultValue !== undefined ? field.defaultValue : defaultValues[type.toLowerCase()];\n if (typeof value === 'function') {\n functionFields.push(name);\n }\n }\n if (options.id === name) {\n proto._defaultId = value;\n }\n proto.defaults[originalName !== name ? originalName : name] = value;\n field.parse = field.parse || parsers[type];\n }\n if (functionFields.length > 0) {\n proto._initializers = functionFields;\n }\n model = base.extend(proto);\n model.define = function (options) {\n return Model.define(model, options);\n };\n if (proto.fields) {\n model.fields = proto.fields;\n model.idField = proto.idField;\n }\n return model;\n };\n var Comparer = {\n selector: function (field) {\n return isFunction(field) ? field : getter(field);\n },\n compare: function (field) {\n var selector = this.selector(field);\n return function (a, b) {\n a = selector(a);\n b = selector(b);\n if (a == null && b == null) {\n return 0;\n }\n if (a == null) {\n return -1;\n }\n if (b == null) {\n return 1;\n }\n if (a.localeCompare) {\n return a.localeCompare(b);\n }\n return a > b ? 1 : a < b ? -1 : 0;\n };\n },\n create: function (sort) {\n var compare = sort.compare || this.compare(sort.field);\n if (sort.dir == 'desc') {\n return function (a, b) {\n return compare(b, a, true);\n };\n }\n return compare;\n },\n combine: function (comparers) {\n return function (a, b) {\n var result = comparers[0](a, b), idx, length;\n for (idx = 1, length = comparers.length; idx < length; idx++) {\n result = result || comparers[idx](a, b);\n }\n return result;\n };\n }\n };\n var StableComparer = extend({}, Comparer, {\n asc: function (field) {\n var selector = this.selector(field);\n return function (a, b) {\n var valueA = selector(a);\n var valueB = selector(b);\n if (valueA && valueA.getTime && valueB && valueB.getTime) {\n valueA = valueA.getTime();\n valueB = valueB.getTime();\n }\n if (valueA === valueB) {\n return a.__position - b.__position;\n }\n if (valueA == null) {\n return -1;\n }\n if (valueB == null) {\n return 1;\n }\n if (valueA.localeCompare) {\n return valueA.localeCompare(valueB);\n }\n return valueA > valueB ? 1 : -1;\n };\n },\n desc: function (field) {\n var selector = this.selector(field);\n return function (a, b) {\n var valueA = selector(a);\n var valueB = selector(b);\n if (valueA && valueA.getTime && valueB && valueB.getTime) {\n valueA = valueA.getTime();\n valueB = valueB.getTime();\n }\n if (valueA === valueB) {\n return a.__position - b.__position;\n }\n if (valueA == null) {\n return 1;\n }\n if (valueB == null) {\n return -1;\n }\n if (valueB.localeCompare) {\n return valueB.localeCompare(valueA);\n }\n return valueA < valueB ? 1 : -1;\n };\n },\n create: function (sort) {\n return this[sort.dir](sort.field);\n }\n });\n map = function (array, callback) {\n var idx, length = array.length, result = new Array(length);\n for (idx = 0; idx < length; idx++) {\n result[idx] = callback(array[idx], idx, array);\n }\n return result;\n };\n var operators = function () {\n function quote(str) {\n if (typeof str == 'string') {\n str = str.replace(/[\\r\\n]+/g, '');\n }\n return JSON.stringify(str);\n }\n function textOp(impl) {\n return function (a, b, ignore, accentFoldingFiltering) {\n b += '';\n if (ignore) {\n a = '(' + a + ' + \\'\\').toString()' + (accentFoldingFiltering ? '.toLocaleLowerCase(\\'' + accentFoldingFiltering + '\\')' : '.toLowerCase()');\n b = accentFoldingFiltering ? b.toLocaleLowerCase(accentFoldingFiltering) : b.toLowerCase();\n }\n return impl(a, quote(b), ignore);\n };\n }\n function operator(op, a, b, ignore, accentFoldingFiltering) {\n if (b != null) {\n if (typeof b === STRING) {\n var date = dateRegExp.exec(b);\n if (date) {\n b = new Date(+date[1]);\n } else if (ignore) {\n b = quote(accentFoldingFiltering ? b.toLocaleLowerCase(accentFoldingFiltering) : b.toLowerCase());\n a = '((' + a + ' || \\'\\')+\\'\\')' + (accentFoldingFiltering ? '.toLocaleLowerCase(\\'' + accentFoldingFiltering + '\\')' : '.toLowerCase()');\n } else {\n b = quote(b);\n }\n }\n if (b.getTime) {\n a = '(' + a + '&&' + a + '.getTime?' + a + '.getTime():' + a + ')';\n b = b.getTime();\n }\n }\n return a + ' ' + op + ' ' + b;\n }\n function getMatchRegexp(pattern) {\n for (var rx = '/^', esc = false, i = 0; i < pattern.length; ++i) {\n var ch = pattern.charAt(i);\n if (esc) {\n rx += '\\\\' + ch;\n } else if (ch == '~') {\n esc = true;\n continue;\n } else if (ch == '*') {\n rx += '.*';\n } else if (ch == '?') {\n rx += '.';\n } else if ('.+^$()[]{}|\\\\/\\n\\r\\u2028\\u2029\\xA0'.indexOf(ch) >= 0) {\n rx += '\\\\' + ch;\n } else {\n rx += ch;\n }\n esc = false;\n }\n return rx + '$/';\n }\n return {\n quote: function (value) {\n if (value && value.getTime) {\n return 'new Date(' + value.getTime() + ')';\n }\n return quote(value);\n },\n eq: function (a, b, ignore, accentFoldingFiltering) {\n return operator('==', a, b, ignore, accentFoldingFiltering);\n },\n neq: function (a, b, ignore, accentFoldingFiltering) {\n return operator('!=', a, b, ignore, accentFoldingFiltering);\n },\n gt: function (a, b, ignore) {\n return operator('>', a, b, ignore);\n },\n gte: function (a, b, ignore) {\n return operator('>=', a, b, ignore);\n },\n lt: function (a, b, ignore) {\n return operator('<', a, b, ignore);\n },\n lte: function (a, b, ignore) {\n return operator('<=', a, b, ignore);\n },\n startswith: textOp(function (a, b) {\n return a + '.lastIndexOf(' + b + ', 0) == 0';\n }),\n doesnotstartwith: textOp(function (a, b) {\n return a + '.lastIndexOf(' + b + ', 0) == -1';\n }),\n endswith: textOp(function (a, b) {\n var n = b ? b.length - 2 : 0;\n return a + '.indexOf(' + b + ', ' + a + '.length - ' + n + ') >= 0';\n }),\n doesnotendwith: textOp(function (a, b) {\n var n = b ? b.length - 2 : 0;\n return a + '.indexOf(' + b + ', ' + a + '.length - ' + n + ') < 0';\n }),\n contains: textOp(function (a, b) {\n return a + '.indexOf(' + b + ') >= 0';\n }),\n doesnotcontain: textOp(function (a, b) {\n return a + '.indexOf(' + b + ') == -1';\n }),\n matches: textOp(function (a, b) {\n b = b.substring(1, b.length - 1);\n return getMatchRegexp(b) + '.test(' + a + ')';\n }),\n doesnotmatch: textOp(function (a, b) {\n b = b.substring(1, b.length - 1);\n return '!' + getMatchRegexp(b) + '.test(' + a + ')';\n }),\n isempty: function (a) {\n return a + ' === \\'\\'';\n },\n isnotempty: function (a) {\n return a + ' !== \\'\\'';\n },\n isnull: function (a) {\n return '(' + a + ' == null)';\n },\n isnotnull: function (a) {\n return '(' + a + ' != null)';\n },\n isnullorempty: function (a) {\n return '(' + a + ' === null) || (' + a + ' === \\'\\')';\n },\n isnotnullorempty: function (a) {\n return '(' + a + ' !== null) && (' + a + ' !== \\'\\')';\n }\n };\n }();\n function Query(data) {\n this.data = data || [];\n }\n Query.filterExpr = function (expression) {\n var expressions = [], logic = {\n and: ' && ',\n or: ' || '\n }, idx, length, filter, expr, fieldFunctions = [], operatorFunctions = [], field, operator, filters = expression.filters;\n for (idx = 0, length = filters.length; idx < length; idx++) {\n filter = filters[idx];\n field = filter.field;\n operator = filter.operator;\n if (filter.filters) {\n expr = Query.filterExpr(filter);\n filter = expr.expression.replace(/__o\\[(\\d+)\\]/g, function (match, index) {\n index = +index;\n return '__o[' + (operatorFunctions.length + index) + ']';\n }).replace(/__f\\[(\\d+)\\]/g, function (match, index) {\n index = +index;\n return '__f[' + (fieldFunctions.length + index) + ']';\n });\n operatorFunctions.push.apply(operatorFunctions, expr.operators);\n fieldFunctions.push.apply(fieldFunctions, expr.fields);\n } else {\n if (typeof field === FUNCTION) {\n expr = '__f[' + fieldFunctions.length + '](d)';\n fieldFunctions.push(field);\n } else {\n expr = kendo.expr(field);\n }\n if (typeof operator === FUNCTION) {\n filter = '__o[' + operatorFunctions.length + '](' + expr + ', ' + operators.quote(filter.value) + ')';\n operatorFunctions.push(operator);\n } else {\n filter = operators[(operator || 'eq').toLowerCase()](expr, filter.value, filter.ignoreCase !== undefined ? filter.ignoreCase : true, expression.accentFoldingFiltering);\n }\n }\n expressions.push(filter);\n }\n return {\n expression: '(' + expressions.join(logic[expression.logic]) + ')',\n fields: fieldFunctions,\n operators: operatorFunctions\n };\n };\n function normalizeSort(field, dir) {\n if (field) {\n var descriptor = typeof field === STRING ? {\n field: field,\n dir: dir\n } : field, descriptors = isArray(descriptor) ? descriptor : descriptor !== undefined ? [descriptor] : [];\n return grep(descriptors, function (d) {\n return !!d.dir;\n });\n }\n }\n function sortFields(sorts, dir) {\n var sortObject = {};\n if (sorts) {\n var descriptor = typeof sorts === STRING ? {\n field: sorts,\n dir: dir\n } : sorts, descriptors = isArray(descriptor) ? descriptor : descriptor !== undefined ? [descriptor] : [];\n for (var i = 0; i < descriptors.length; i++) {\n sortObject[descriptors[i].field] = {\n dir: descriptors[i].dir,\n index: i + 1\n };\n }\n }\n return sortObject;\n }\n var operatorMap = {\n '==': 'eq',\n equals: 'eq',\n isequalto: 'eq',\n equalto: 'eq',\n equal: 'eq',\n '!=': 'neq',\n ne: 'neq',\n notequals: 'neq',\n isnotequalto: 'neq',\n notequalto: 'neq',\n notequal: 'neq',\n '<': 'lt',\n islessthan: 'lt',\n lessthan: 'lt',\n less: 'lt',\n '<=': 'lte',\n le: 'lte',\n islessthanorequalto: 'lte',\n lessthanequal: 'lte',\n '>': 'gt',\n isgreaterthan: 'gt',\n greaterthan: 'gt',\n greater: 'gt',\n '>=': 'gte',\n isgreaterthanorequalto: 'gte',\n greaterthanequal: 'gte',\n ge: 'gte',\n notsubstringof: 'doesnotcontain',\n isnull: 'isnull',\n isempty: 'isempty',\n isnotempty: 'isnotempty'\n };\n function normalizeOperator(expression) {\n var idx, length, filter, operator, filters = expression.filters;\n if (filters) {\n for (idx = 0, length = filters.length; idx < length; idx++) {\n filter = filters[idx];\n operator = filter.operator;\n if (operator && typeof operator === STRING) {\n filter.operator = operatorMap[operator.toLowerCase()] || operator;\n }\n normalizeOperator(filter);\n }\n }\n }\n function normalizeFilter(expression) {\n if (expression && !isEmptyObject(expression)) {\n if (isArray(expression) || !expression.filters) {\n expression = {\n logic: 'and',\n filters: isArray(expression) ? expression : [expression]\n };\n }\n normalizeOperator(expression);\n return expression;\n }\n }\n Query.normalizeFilter = normalizeFilter;\n function compareDescriptor(f1, f2) {\n if (f1.logic || f2.logic) {\n return false;\n }\n return f1.field === f2.field && f1.value === f2.value && f1.operator === f2.operator;\n }\n function normalizeDescriptor(filter) {\n filter = filter || {};\n if (isEmptyObject(filter)) {\n return {\n logic: 'and',\n filters: []\n };\n }\n return normalizeFilter(filter);\n }\n function fieldComparer(a, b) {\n if (b.logic || a.field > b.field) {\n return 1;\n } else if (a.field < b.field) {\n return -1;\n } else {\n return 0;\n }\n }\n function compareFilters(expr1, expr2) {\n expr1 = normalizeDescriptor(expr1);\n expr2 = normalizeDescriptor(expr2);\n if (expr1.logic !== expr2.logic) {\n return false;\n }\n var f1, f2;\n var filters1 = (expr1.filters || []).slice();\n var filters2 = (expr2.filters || []).slice();\n if (filters1.length !== filters2.length) {\n return false;\n }\n filters1 = filters1.sort(fieldComparer);\n filters2 = filters2.sort(fieldComparer);\n for (var idx = 0; idx < filters1.length; idx++) {\n f1 = filters1[idx];\n f2 = filters2[idx];\n if (f1.logic && f2.logic) {\n if (!compareFilters(f1, f2)) {\n return false;\n }\n } else if (!compareDescriptor(f1, f2)) {\n return false;\n }\n }\n return true;\n }\n Query.compareFilters = compareFilters;\n function normalizeAggregate(expressions) {\n return isArray(expressions) ? expressions : [expressions];\n }\n function normalizeGroup(field, dir, compare, skipItemSorting) {\n var descriptor = typeof field === STRING ? {\n field: field,\n dir: dir,\n compare: compare,\n skipItemSorting: skipItemSorting\n } : field, descriptors = isArray(descriptor) ? descriptor : descriptor !== undefined ? [descriptor] : [];\n return map(descriptors, function (d) {\n return {\n field: d.field,\n dir: d.dir || 'asc',\n aggregates: d.aggregates,\n compare: d.compare,\n skipItemSorting: d.skipItemSorting\n };\n });\n }\n function normalizeGroupWithoutCompare(field, dir, compare) {\n var descriptors = normalizeGroup(field, dir, compare);\n for (var i = 0; i < descriptors.length; i++) {\n delete descriptors[i].compare;\n }\n return descriptors;\n }\n function anyGroupDescriptorHasCompare(groupDescriptors) {\n var descriptors = isArray(groupDescriptors) ? groupDescriptors : [groupDescriptors];\n for (var i = 0; i < descriptors.length; i++) {\n if (descriptors[i] && isFunction(descriptors[i].compare)) {\n return true;\n }\n }\n return false;\n }\n Query.prototype = {\n toArray: function () {\n return this.data;\n },\n range: function (index, count) {\n return new Query(this.data.slice(index, index + count));\n },\n skip: function (count) {\n return new Query(this.data.slice(count));\n },\n take: function (count) {\n return new Query(this.data.slice(0, count));\n },\n select: function (selector) {\n return new Query(map(this.data, selector));\n },\n order: function (selector, dir, inPlace) {\n var sort = { dir: dir };\n if (selector) {\n if (selector.compare) {\n sort.compare = selector.compare;\n } else {\n sort.field = selector;\n }\n }\n if (inPlace) {\n return new Query(this.data.sort(Comparer.create(sort)));\n }\n return new Query(this.data.slice(0).sort(Comparer.create(sort)));\n },\n orderBy: function (selector, inPlace) {\n return this.order(selector, 'asc', inPlace);\n },\n orderByDescending: function (selector, inPlace) {\n return this.order(selector, 'desc', inPlace);\n },\n sort: function (field, dir, comparer, inPlace) {\n var idx, length, descriptors = normalizeSort(field, dir), comparers = [];\n comparer = comparer || Comparer;\n if (descriptors.length) {\n for (idx = 0, length = descriptors.length; idx < length; idx++) {\n comparers.push(comparer.create(descriptors[idx]));\n }\n return this.orderBy({ compare: comparer.combine(comparers) }, inPlace);\n }\n return this;\n },\n filter: function (expressions) {\n var idx, current, length, compiled, predicate, data = this.data, fields, operators, result = [], filter;\n expressions = normalizeFilter(expressions);\n if (!expressions || expressions.filters.length === 0) {\n return this;\n }\n compiled = Query.filterExpr(expressions);\n fields = compiled.fields;\n operators = compiled.operators;\n predicate = filter = new Function('d, __f, __o', 'return ' + compiled.expression);\n if (fields.length || operators.length) {\n filter = function (d) {\n return predicate(d, fields, operators);\n };\n }\n for (idx = 0, length = data.length; idx < length; idx++) {\n current = data[idx];\n if (filter(current)) {\n result.push(current);\n }\n }\n return new Query(result);\n },\n group: function (descriptors, allData, options) {\n descriptors = normalizeGroup(descriptors || []);\n allData = allData || this.data;\n var that = this, result = new Query(that.data), descriptor;\n if (descriptors.length > 0) {\n descriptor = descriptors[0];\n if (options && options.groupPaging) {\n result = new Query(allData).groupAllData(descriptor, allData).select(function (group) {\n var data = new Query(allData).filter([{\n field: group.field,\n operator: 'eq',\n value: group.value,\n ignoreCase: false\n }]);\n var items = descriptors.length > 1 ? new Query(group.items).group(descriptors.slice(1), data.toArray(), options).toArray() : group.items;\n return {\n field: group.field,\n value: group.value,\n hasSubgroups: descriptors.length > 1,\n items: items,\n aggregates: data.aggregate(descriptor.aggregates),\n uid: kendo.guid(),\n itemCount: items.length,\n subgroupCount: items.length\n };\n });\n } else {\n result = result.groupBy(descriptor).select(function (group) {\n var data = new Query(allData).filter([{\n field: group.field,\n operator: 'eq',\n value: group.value,\n ignoreCase: false\n }]);\n return {\n field: group.field,\n value: group.value,\n items: descriptors.length > 1 ? new Query(group.items).group(descriptors.slice(1), data.toArray()).toArray() : group.items,\n hasSubgroups: descriptors.length > 1,\n aggregates: data.aggregate(descriptor.aggregates)\n };\n });\n }\n }\n return result;\n },\n groupBy: function (descriptor) {\n var that = this;\n if (isEmptyObject(descriptor) || !this.data.length) {\n return new Query([]);\n }\n var field = descriptor.field, sorted = descriptor.skipItemSorting ? this.data : this._sortForGrouping(field, descriptor.dir || 'asc'), accessor = kendo.accessor(field), item, groupValue = accessor.get(sorted[0], field), group = {\n field: field,\n value: groupValue,\n items: []\n }, currentValue, idx, len, result = [group];\n for (idx = 0, len = sorted.length; idx < len; idx++) {\n item = sorted[idx];\n currentValue = accessor.get(item, field);\n if (!groupValueComparer(groupValue, currentValue)) {\n groupValue = currentValue;\n group = {\n field: field,\n value: groupValue,\n items: []\n };\n result.push(group);\n }\n group.items.push(item);\n }\n result = that._sortGroups(result, descriptor);\n return new Query(result);\n },\n groupAllData: function (descriptor, allData) {\n if (isEmptyObject(descriptor) || this.data && !this.data.length) {\n return new Query([]);\n }\n var field = descriptor.field, sorted = descriptor.skipItemSorting ? allData : new Query(allData).sort(field, descriptor.dir || 'asc', StableComparer).toArray(), accessor = kendo.accessor(field), item, groupValue = accessor.get(sorted[0], field), group = {\n field: field,\n value: groupValue,\n items: []\n }, currentValue, idx, len, result = [group];\n for (idx = 0, len = sorted.length; idx < len; idx++) {\n item = sorted[idx];\n currentValue = accessor.get(item, field);\n if (!groupValueComparer(groupValue, currentValue)) {\n groupValue = currentValue;\n group = {\n field: field,\n value: groupValue,\n items: []\n };\n result.push(group);\n }\n group.items.push(item);\n }\n result = this._sortGroups(result, descriptor);\n return new Query(result);\n },\n _sortForGrouping: function (field, dir) {\n var idx, length, data = this.data;\n if (!stableSort) {\n for (idx = 0, length = data.length; idx < length; idx++) {\n data[idx].__position = idx;\n }\n data = new Query(data).sort(field, dir, StableComparer).toArray();\n for (idx = 0, length = data.length; idx < length; idx++) {\n delete data[idx].__position;\n }\n return data;\n }\n return this.sort(field, dir).toArray();\n },\n _sortGroups: function (groups, descriptor) {\n var result = groups;\n if (descriptor && isFunction(descriptor.compare)) {\n result = new Query(result).order({ compare: descriptor.compare }, descriptor.dir || ASCENDING).toArray();\n }\n return result;\n },\n aggregate: function (aggregates) {\n var idx, len, result = {}, state = {};\n if (aggregates && aggregates.length) {\n for (idx = 0, len = this.data.length; idx < len; idx++) {\n calculateAggregate(result, aggregates, this.data[idx], idx, len, state);\n }\n }\n return result;\n }\n };\n function groupValueComparer(a, b) {\n if (a && a.getTime && b && b.getTime) {\n return a.getTime() === b.getTime();\n }\n return a === b;\n }\n function calculateAggregate(accumulator, aggregates, item, index, length, state) {\n aggregates = aggregates || [];\n var idx, aggr, functionName, len = aggregates.length;\n for (idx = 0; idx < len; idx++) {\n aggr = aggregates[idx];\n functionName = aggr.aggregate;\n var field = aggr.field;\n accumulator[field] = accumulator[field] || {};\n state[field] = state[field] || {};\n state[field][functionName] = state[field][functionName] || {};\n accumulator[field][functionName] = functions[functionName.toLowerCase()](accumulator[field][functionName], item, kendo.accessor(field), index, length, state[field][functionName]);\n }\n }\n var functions = {\n sum: function (accumulator, item, accessor) {\n var value = accessor.get(item);\n if (!isNumber(accumulator)) {\n accumulator = value;\n } else if (isNumber(value)) {\n accumulator += value;\n }\n return accumulator;\n },\n count: function (accumulator) {\n return (accumulator || 0) + 1;\n },\n average: function (accumulator, item, accessor, index, length, state) {\n var value = accessor.get(item);\n if (state.count === undefined) {\n state.count = 0;\n }\n if (!isNumber(accumulator)) {\n accumulator = value;\n } else if (isNumber(value)) {\n accumulator += value;\n }\n if (isNumber(value)) {\n state.count++;\n }\n if (index == length - 1 && isNumber(accumulator)) {\n accumulator = accumulator / state.count;\n }\n return accumulator;\n },\n max: function (accumulator, item, accessor) {\n var value = accessor.get(item);\n if (!isNumber(accumulator) && !isDate(accumulator)) {\n accumulator = value;\n }\n if (accumulator < value && (isNumber(value) || isDate(value))) {\n accumulator = value;\n }\n return accumulator;\n },\n min: function (accumulator, item, accessor) {\n var value = accessor.get(item);\n if (!isNumber(accumulator) && !isDate(accumulator)) {\n accumulator = value;\n }\n if (accumulator > value && (isNumber(value) || isDate(value))) {\n accumulator = value;\n }\n return accumulator;\n }\n };\n function isNumber(val) {\n return typeof val === 'number' && !isNaN(val);\n }\n function isDate(val) {\n return val && val.getTime;\n }\n function toJSON(array) {\n var idx, length = array.length, result = new Array(length);\n for (idx = 0; idx < length; idx++) {\n result[idx] = array[idx].toJSON();\n }\n return result;\n }\n Query.normalizeGroup = normalizeGroup;\n Query.normalizeSort = normalizeSort;\n Query.process = function (data, options, inPlace) {\n options = options || {};\n var group = options.group;\n var customGroupSort = anyGroupDescriptorHasCompare(normalizeGroup(group || []));\n var query = new Query(data), groupDescriptorsWithoutCompare = normalizeGroupWithoutCompare(group || []), normalizedSort = normalizeSort(options.sort || []), sort = customGroupSort ? normalizedSort : groupDescriptorsWithoutCompare.concat(normalizedSort), groupDescriptorsWithoutSort, total, filterCallback = options.filterCallback, filter = options.filter, skip = options.skip, take = options.take;\n if (sort && inPlace) {\n query = query.sort(sort, undefined, undefined, inPlace);\n }\n if (filter) {\n query = query.filter(filter);\n if (filterCallback) {\n query = filterCallback(query);\n }\n total = query.toArray().length;\n }\n if (sort) {\n if (!inPlace) {\n query = query.sort(sort);\n }\n if (group) {\n data = query.toArray();\n }\n }\n if (customGroupSort) {\n query = query.group(group, data, 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[i];\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 }\n if (xInBounds) {\n parent.scrollLeft += velocity.x;\n }\n if (this.hint && isRootNode && (xInBounds || yInBounds)) {\n if (yInBounds) {\n compensation.top += velocity.y;\n }\n if (xInBounds) {\n compensation.left += velocity.x;\n }\n this.hint.css(compensation);\n }\n },\n _end: function (e) {\n this._withDropTarget(this._elementUnderCursor(e), function (target, targetElement) {\n if (target) {\n target._drop(extend({}, e, { dropTarget: $(targetElement) }));\n lastDropTarget = null;\n }\n });\n this._cancel(this._trigger(DRAGEND, e));\n },\n _cancel: function (isDefaultPrevented) {\n var that = this;\n that._scrollableParent = null;\n this._cursorElement = null;\n clearInterval(this._scrollInterval);\n that._activated = false;\n if (that.hint && !that.dropped) {\n setTimeout(function () {\n that.hint.stop(true, true);\n if (isDefaultPrevented) {\n that._afterEndHandler();\n } else {\n that.hint.animate(that.currentTargetOffset, 'fast', that._afterEndHandler);\n }\n }, 0);\n } else {\n that._afterEnd();\n }\n },\n _trigger: function (eventName, e) {\n var that = this;\n return that.trigger(eventName, extend({}, e.event, {\n x: e.x,\n y: e.y,\n currentTarget: that.currentTarget,\n initialTarget: e.touch ? e.touch.initialTouch : null,\n dropTarget: e.dropTarget,\n elementUnderCursor: e.elementUnderCursor\n }));\n },\n _elementUnderCursor: function (e) {\n var target = elementUnderCursor(e), hint = this.hint;\n if (hint && contains(hint[0], target)) {\n hint.hide();\n target = elementUnderCursor(e);\n if (!target) {\n target = elementUnderCursor(e);\n }\n hint.show();\n }\n return target;\n },\n _withDropTarget: function (element, callback) {\n var result, group = this.options.group, targets = dropTargets[group], areas = dropAreas[group];\n if (targets && targets.length || areas && areas.length) {\n result = checkTarget(element, targets, areas);\n if (result) {\n callback(result.target, result.targetElement);\n } else {\n callback();\n }\n }\n },\n destroy: function () {\n var that = this;\n Widget.fn.destroy.call(that);\n that._afterEnd();\n that.userEvents.destroy();\n this._scrollableParent = null;\n this._cursorElement = null;\n clearInterval(this._scrollInterval);\n that.currentTarget = null;\n },\n _afterEnd: function () {\n var that = this;\n if (that.hint) {\n that.hint.remove();\n }\n delete draggables[that.options.group];\n that.trigger('destroy');\n that.trigger(HINTDESTROYED);\n $(document).off(KEYUP, that._captureEscape);\n }\n });\n kendo.ui.plugin(DropTarget);\n kendo.ui.plugin(DropTargetArea);\n kendo.ui.plugin(Draggable);\n kendo.TapCapture = TapCapture;\n kendo.containerBoundaries = containerBoundaries;\n extend(kendo.ui, {\n Pane: Pane,\n PaneDimensions: PaneDimensions,\n Movable: Movable\n });\n function scrollableViewPort(element) {\n var root = scrollableRoot()[0], offset, top, left;\n if (element[0] === root) {\n top = root.scrollTop;\n left = root.scrollLeft;\n return {\n top: top,\n left: left,\n bottom: top + $window.height(),\n right: left + $window.width()\n };\n } else {\n offset = element.offset();\n offset.bottom = offset.top + element.height();\n offset.right = offset.left + element.width();\n return offset;\n }\n }\n function scrollableRoot() {\n return $(kendo.support.browser.edge || kendo.support.browser.safari ? document.body : document.documentElement);\n }\n function findScrollableParent(element) {\n var root = scrollableRoot();\n if (!element || element === document.body || element === document.documentElement) {\n return root;\n }\n var parent = $(element)[0];\n while (parent && !kendo.isScrollable(parent) && parent !== document.body) {\n parent = parent.parentNode;\n }\n if (parent === document.body) {\n return root;\n }\n return $(parent);\n }\n function autoScrollVelocity(mouseX, mouseY, rect) {\n var velocity = {\n x: 0,\n y: 0\n };\n var AUTO_SCROLL_AREA = 50;\n if (mouseX - rect.left < AUTO_SCROLL_AREA) {\n velocity.x = -(AUTO_SCROLL_AREA - (mouseX - rect.left));\n } else if (rect.right - mouseX < AUTO_SCROLL_AREA) {\n velocity.x = AUTO_SCROLL_AREA - (rect.right - mouseX);\n }\n if (mouseY - rect.top < AUTO_SCROLL_AREA) {\n velocity.y = -(AUTO_SCROLL_AREA - (mouseY - rect.top));\n } else if (rect.bottom - mouseY < AUTO_SCROLL_AREA) {\n velocity.y = AUTO_SCROLL_AREA - (rect.bottom - mouseY);\n }\n return velocity;\n }\n kendo.ui.Draggable.utils = {\n autoScrollVelocity: autoScrollVelocity,\n scrollableViewPort: scrollableViewPort,\n findScrollableParent: findScrollableParent\n };\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.popup', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'popup',\n name: 'Pop-up',\n category: 'framework',\n depends: ['core'],\n advanced: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, Widget = ui.Widget, Class = kendo.Class, support = kendo.support, getOffset = kendo.getOffset, outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight, OPEN = 'open', CLOSE = 'close', DEACTIVATE = 'deactivate', ACTIVATE = 'activate', CENTER = 'center', LEFT = 'left', RIGHT = 'right', TOP = 'top', BOTTOM = 'bottom', ABSOLUTE = 'absolute', HIDDEN = 'hidden', BODY = 'body', LOCATION = 'location', POSITION = 'position', VISIBLE = 'visible', EFFECTS = 'effects', ACTIVE = 'k-state-active', ACTIVEBORDER = 'k-state-border', ACTIVEBORDERREGEXP = /k-state-border-(\\w+)/, ACTIVECHILDREN = '.k-picker-wrap, .k-dropdown-wrap, .k-link', MOUSEDOWN = 'down', DOCUMENT_ELEMENT = $(document.documentElement), proxy = $.proxy, WINDOW = $(window), SCROLL = 'scroll', cssPrefix = support.transitions.css, TRANSFORM = cssPrefix + 'transform', extend = $.extend, NS = '.kendoPopup', styles = [\n 'font-size',\n 'font-family',\n 'font-stretch',\n 'font-style',\n 'font-weight',\n 'line-height'\n ];\n function contains(container, target) {\n if (!container || !target) {\n return false;\n }\n return container === target || $.contains(container, target);\n }\n var Popup = Widget.extend({\n init: function (element, options) {\n var that = this, parentPopup;\n options = options || {};\n if (options.isRtl) {\n options.origin = options.origin || BOTTOM + ' ' + RIGHT;\n options.position = options.position || TOP + ' ' + RIGHT;\n }\n Widget.fn.init.call(that, element, options);\n element = that.element;\n options = that.options;\n that.collisions = options.collision ? options.collision.split(' ') : [];\n that.downEvent = kendo.applyEventMap(MOUSEDOWN, kendo.guid());\n if (that.collisions.length === 1) {\n that.collisions.push(that.collisions[0]);\n }\n parentPopup = $(that.options.anchor).closest('.k-popup,.k-group').filter(':not([class^=km-])');\n options.appendTo = $($(options.appendTo)[0] || parentPopup[0] || document.body);\n that.element.hide().addClass('k-popup k-group k-reset').toggleClass('k-rtl', !!options.isRtl).css({ position: ABSOLUTE }).appendTo(options.appendTo).attr('aria-hidden', true).on('mouseenter' + NS, function () {\n that._hovered = true;\n }).on('wheel' + NS, function (e) {\n var list = $(e.target).find('.k-list');\n var scrollArea = list.parent();\n if (list.length && list.is(':visible') && (scrollArea.scrollTop() === 0 && e.originalEvent.deltaY < 0 || scrollArea.scrollTop() === scrollArea.prop('scrollHeight') - scrollArea.prop('offsetHeight') && e.originalEvent.deltaY > 0)) {\n e.preventDefault();\n }\n }).on('mouseleave' + NS, function () {\n that._hovered = false;\n });\n that.wrapper = $();\n if (options.animation === false) {\n options.animation = {\n open: { effects: {} },\n close: {\n hide: true,\n effects: {}\n }\n };\n }\n extend(options.animation.open, {\n complete: function () {\n that.wrapper.css({ overflow: VISIBLE });\n that._activated = true;\n that._trigger(ACTIVATE);\n }\n });\n extend(options.animation.close, {\n complete: function () {\n that._animationClose();\n }\n });\n that._mousedownProxy = function (e) {\n that._mousedown(e);\n };\n if (support.mobileOS.android) {\n that._resizeProxy = function (e) {\n setTimeout(function () {\n that._resize(e);\n }, 600);\n };\n } else {\n that._resizeProxy = function (e) {\n that._resize(e);\n };\n }\n if (options.toggleTarget) {\n $(options.toggleTarget).on(options.toggleEvent + NS, $.proxy(that.toggle, that));\n }\n },\n events: [\n OPEN,\n ACTIVATE,\n CLOSE,\n DEACTIVATE\n ],\n options: {\n name: 'Popup',\n toggleEvent: 'click',\n origin: BOTTOM + ' ' + LEFT,\n position: TOP + ' ' + LEFT,\n anchor: BODY,\n appendTo: null,\n collision: 'flip fit',\n viewport: window,\n copyAnchorStyles: true,\n autosize: false,\n modal: false,\n adjustSize: {\n width: 0,\n height: 0\n },\n animation: {\n open: {\n effects: 'slideIn:down',\n transition: true,\n duration: 200\n },\n close: {\n duration: 100,\n hide: true\n }\n }\n },\n _animationClose: function () {\n var that = this;\n var location = that.wrapper.data(LOCATION);\n that.wrapper.hide();\n if (location) {\n that.wrapper.css(location);\n }\n if (that.options.anchor != BODY) {\n that._hideDirClass();\n }\n that._closing = false;\n that._trigger(DEACTIVATE);\n },\n destroy: function () {\n var that = this, options = that.options, element = that.element.off(NS), parent;\n Widget.fn.destroy.call(that);\n if (options.toggleTarget) {\n $(options.toggleTarget).off(NS);\n }\n if (!options.modal) {\n DOCUMENT_ELEMENT.off(that.downEvent, that._mousedownProxy);\n that._toggleResize(false);\n }\n kendo.destroy(that.element.children());\n element.removeData();\n if (options.appendTo[0] === document.body) {\n parent = element.parent('.k-animation-container');\n if (parent[0]) {\n parent.remove();\n } else {\n element.remove();\n }\n }\n },\n open: function (x, y) {\n var that = this, fixed = {\n isFixed: !isNaN(parseInt(y, 10)),\n x: x,\n y: y\n }, element = that.element, options = that.options, animation, wrapper, anchor = $(options.anchor), mobile = element[0] && element.hasClass('km-widget');\n if (!that.visible()) {\n if (options.copyAnchorStyles) {\n if (mobile && styles[0] == 'font-size') {\n styles.shift();\n }\n element.css(kendo.getComputedStyles(anchor[0], styles));\n }\n if (element.data('animating') || that._trigger(OPEN)) {\n return;\n }\n that._activated = false;\n if (!options.modal) {\n DOCUMENT_ELEMENT.off(that.downEvent, that._mousedownProxy).on(that.downEvent, that._mousedownProxy);\n that._toggleResize(false);\n that._toggleResize(true);\n }\n that.wrapper = wrapper = kendo.wrap(element, options.autosize).css({\n overflow: HIDDEN,\n display: 'block',\n position: ABSOLUTE\n }).attr('aria-hidden', false);\n if (support.mobileOS.android) {\n wrapper.css(TRANSFORM, 'translatez(0)');\n }\n wrapper.css(POSITION);\n if ($(options.appendTo)[0] == document.body) {\n wrapper.css(TOP, '-10000px');\n }\n that.flipped = that._position(fixed);\n animation = that._openAnimation();\n if (options.anchor != BODY) {\n that._showDirClass(animation);\n }\n if (!element.is(':visible') && element.data('olddisplay') === undefined) {\n element.show();\n element.data('olddisplay', element.css('display'));\n element.hide();\n }\n element.data(EFFECTS, animation.effects).kendoStop(true).kendoAnimate(animation).attr('aria-hidden', false);\n }\n },\n _location: function (isFixed) {\n var that = this, element = that.element, options = that.options, wrapper, anchor = $(options.anchor), mobile = element[0] && element.hasClass('km-widget');\n if (options.copyAnchorStyles) {\n if (mobile && styles[0] == 'font-size') {\n styles.shift();\n }\n element.css(kendo.getComputedStyles(anchor[0], styles));\n }\n that.wrapper = wrapper = kendo.wrap(element, options.autosize).css({\n overflow: HIDDEN,\n display: 'block',\n position: ABSOLUTE\n });\n if (support.mobileOS.android) {\n wrapper.css(TRANSFORM, 'translatez(0)');\n }\n wrapper.css(POSITION);\n if ($(options.appendTo)[0] == document.body) {\n wrapper.css(TOP, '-10000px');\n }\n that._position(isFixed || {});\n var offset = wrapper.offset();\n return {\n width: kendo._outerWidth(wrapper),\n height: kendo._outerHeight(wrapper),\n left: offset.left,\n top: offset.top\n };\n },\n _openAnimation: function () {\n var animation = extend(true, {}, this.options.animation.open);\n animation.effects = kendo.parseEffects(animation.effects, this.flipped);\n return animation;\n },\n _hideDirClass: function () {\n var anchor = $(this.options.anchor);\n var direction = ((anchor.attr('class') || '').match(ACTIVEBORDERREGEXP) || [\n '',\n 'down'\n ])[1];\n var dirClass = ACTIVEBORDER + '-' + direction;\n anchor.removeClass(dirClass).children(ACTIVECHILDREN).removeClass(ACTIVE).removeClass(dirClass);\n this.element.removeClass(ACTIVEBORDER + '-' + kendo.directions[direction].reverse);\n },\n _showDirClass: function (animation) {\n var direction = animation.effects.slideIn ? animation.effects.slideIn.direction : 'down';\n var dirClass = ACTIVEBORDER + '-' + direction;\n $(this.options.anchor).addClass(dirClass).children(ACTIVECHILDREN).addClass(ACTIVE).addClass(dirClass);\n this.element.addClass(ACTIVEBORDER + '-' + kendo.directions[direction].reverse);\n },\n position: function () {\n if (this.visible()) {\n this.flipped = this._position();\n }\n },\n toggle: function () {\n var that = this;\n that[that.visible() ? CLOSE : OPEN]();\n },\n visible: function () {\n return this.element.is(':' + VISIBLE);\n },\n close: function (skipEffects) {\n var that = this, options = that.options, wrap, animation, openEffects, closeEffects;\n if (that.visible()) {\n wrap = that.wrapper[0] ? that.wrapper : kendo.wrap(that.element).hide();\n that._toggleResize(false);\n if (that._closing || that._trigger(CLOSE)) {\n that._toggleResize(true);\n return;\n }\n that.element.find('.k-popup').each(function () {\n var that = $(this), popup = that.data('kendoPopup');\n if (popup) {\n popup.close(skipEffects);\n }\n });\n DOCUMENT_ELEMENT.off(that.downEvent, that._mousedownProxy);\n if (skipEffects) {\n animation = {\n hide: true,\n effects: {}\n };\n } else {\n animation = extend(true, {}, options.animation.close);\n openEffects = that.element.data(EFFECTS);\n closeEffects = animation.effects;\n if (!closeEffects && !kendo.size(closeEffects) && openEffects && kendo.size(openEffects)) {\n animation.effects = openEffects;\n animation.reverse = true;\n }\n that._closing = true;\n }\n that.element.kendoStop(true).attr('aria-hidden', true);\n wrap.css({ overflow: HIDDEN }).attr('aria-hidden', true);\n that.element.kendoAnimate(animation);\n if (skipEffects) {\n that._animationClose();\n }\n }\n },\n _trigger: function (ev) {\n return this.trigger(ev, { type: ev });\n },\n _resize: function (e) {\n var that = this;\n if (support.resize.indexOf(e.type) !== -1) {\n clearTimeout(that._resizeTimeout);\n that._resizeTimeout = setTimeout(function () {\n that._position();\n that._resizeTimeout = null;\n }, 50);\n } else {\n if (!that._hovered || that._activated && that.element.hasClass('k-list-container')) {\n that.close();\n }\n }\n },\n _toggleResize: function (toggle) {\n var method = toggle ? 'on' : 'off';\n var eventNames = support.resize;\n if (!(support.mobileOS.ios || support.mobileOS.android || support.browser.safari)) {\n eventNames += ' ' + SCROLL;\n }\n if (toggle && !this.scrollableParents) {\n this.scrollableParents = this._scrollableParents();\n }\n if (this.scrollableParents && this.scrollableParents.length) {\n this.scrollableParents[method](SCROLL, this._resizeProxy);\n }\n WINDOW[method](eventNames, this._resizeProxy);\n },\n _mousedown: function (e) {\n var that = this, container = that.element[0], options = that.options, anchor = $(options.anchor)[0], toggleTarget = options.toggleTarget, target = kendo.eventTarget(e), popup = $(target).closest('.k-popup'), mobile = popup.parent().parent('.km-shim').length;\n popup = popup[0];\n if (!mobile && popup && popup !== that.element[0]) {\n return;\n }\n if ($(e.target).closest('a').data('rel') === 'popover') {\n return;\n }\n if (!contains(container, target) && !contains(anchor, target) && !(toggleTarget && contains($(toggleTarget)[0], target))) {\n that.close();\n }\n },\n _fit: function (position, size, viewPortSize) {\n var output = 0;\n if (position + size > viewPortSize) {\n output = viewPortSize - (position + size);\n }\n if (position < 0) {\n output = -position;\n }\n return output;\n },\n _flip: function (offset, size, anchorSize, viewPortSize, origin, position, boxSize) {\n var output = 0;\n boxSize = boxSize || size;\n if (position !== origin && position !== CENTER && origin !== CENTER) {\n if (offset + boxSize > viewPortSize) {\n output += -(anchorSize + size);\n }\n if (offset + output < 0) {\n output += anchorSize + size;\n }\n }\n return output;\n },\n _scrollableParents: function () {\n return $(this.options.anchor).parentsUntil('body').filter(function (index, element) {\n return kendo.isScrollable(element);\n });\n },\n _position: function (fixed) {\n var that = this, element = that.element, wrapper = that.wrapper, options = that.options, viewport = $(options.viewport), zoomLevel = support.zoomLevel(), isWindow = !!(viewport[0] == window && window.innerWidth && zoomLevel <= 1.02), anchor = $(options.anchor), origins = options.origin.toLowerCase().split(' '), positions = options.position.toLowerCase().split(' '), collisions = that.collisions, siblingContainer, parents, parentZIndex, zIndex = 10002, idx = 0, docEl = document.documentElement, length, viewportOffset, viewportWidth, viewportHeight;\n if (options.viewport === window) {\n viewportOffset = {\n top: window.pageYOffset || document.documentElement.scrollTop || 0,\n left: window.pageXOffset || document.documentElement.scrollLeft || 0\n };\n } else {\n viewportOffset = viewport.offset();\n }\n if (isWindow) {\n viewportWidth = window.innerWidth;\n viewportHeight = window.innerHeight;\n } else {\n viewportWidth = viewport.width();\n viewportHeight = viewport.height();\n }\n if (isWindow && docEl.scrollHeight - docEl.clientHeight > 0) {\n var sign = options.isRtl ? -1 : 1;\n viewportWidth -= sign * kendo.support.scrollbar();\n }\n siblingContainer = anchor.parents().filter(wrapper.siblings());\n if (siblingContainer[0]) {\n parentZIndex = Math.max(Number(siblingContainer.css('zIndex')), 0);\n if (parentZIndex) {\n zIndex = parentZIndex + 10;\n } else {\n parents = anchor.parentsUntil(siblingContainer);\n for (length = parents.length; idx < length; idx++) {\n parentZIndex = Number($(parents[idx]).css('zIndex'));\n if (parentZIndex && zIndex < parentZIndex) {\n zIndex = parentZIndex + 10;\n }\n }\n }\n }\n wrapper.css('zIndex', zIndex);\n if (fixed && fixed.isFixed) {\n wrapper.css({\n left: fixed.x,\n top: fixed.y\n });\n } else {\n wrapper.css(that._align(origins, positions));\n }\n var pos = getOffset(wrapper, POSITION, anchor[0] === wrapper.offsetParent()[0]), offset = getOffset(wrapper), anchorParent = anchor.offsetParent().parent('.k-animation-container,.k-popup,.k-group');\n if (anchorParent.length) {\n pos = getOffset(wrapper, POSITION, true);\n offset = getOffset(wrapper);\n }\n offset.top -= viewportOffset.top;\n offset.left -= viewportOffset.left;\n if (!that.wrapper.data(LOCATION)) {\n wrapper.data(LOCATION, extend({}, pos));\n }\n var offsets = extend({}, offset), location = extend({}, pos), adjustSize = options.adjustSize;\n if (collisions[0] === 'fit') {\n location.top += that._fit(offsets.top, outerHeight(wrapper) + adjustSize.height, viewportHeight / zoomLevel);\n }\n if (collisions[1] === 'fit') {\n location.left += that._fit(offsets.left, outerWidth(wrapper) + adjustSize.width, viewportWidth / zoomLevel);\n }\n var flipPos = extend({}, location);\n var elementHeight = outerHeight(element);\n var wrapperHeight = outerHeight(wrapper);\n if (!wrapper.height() && elementHeight) {\n wrapperHeight = wrapperHeight + elementHeight;\n }\n if (collisions[0] === 'flip') {\n location.top += that._flip(offsets.top, elementHeight, outerHeight(anchor), viewportHeight / zoomLevel, origins[0], positions[0], wrapperHeight);\n }\n if (collisions[1] === 'flip') {\n location.left += that._flip(offsets.left, outerWidth(element), outerWidth(anchor), viewportWidth / zoomLevel, origins[1], positions[1], outerWidth(wrapper));\n }\n element.css(POSITION, ABSOLUTE);\n wrapper.css(location);\n return location.left != flipPos.left || location.top != flipPos.top;\n },\n _align: function (origin, position) {\n var that = this, element = that.wrapper, anchor = $(that.options.anchor), verticalOrigin = origin[0], horizontalOrigin = origin[1], verticalPosition = position[0], horizontalPosition = position[1], anchorOffset = getOffset(anchor), appendTo = $(that.options.appendTo), appendToOffset, width = outerWidth(element), height = outerHeight(element) || outerHeight(element.children().first()), anchorWidth = outerWidth(anchor), anchorHeight = outerHeight(anchor), top = anchorOffset.top, left = anchorOffset.left, round = Math.round;\n if (appendTo[0] != document.body) {\n appendToOffset = getOffset(appendTo);\n top -= appendToOffset.top;\n left -= appendToOffset.left;\n }\n if (verticalOrigin === BOTTOM) {\n top += anchorHeight;\n }\n if (verticalOrigin === CENTER) {\n top += round(anchorHeight / 2);\n }\n if (verticalPosition === BOTTOM) {\n top -= height;\n }\n if (verticalPosition === CENTER) {\n top -= round(height / 2);\n }\n if (horizontalOrigin === RIGHT) {\n left += anchorWidth;\n }\n if (horizontalOrigin === CENTER) {\n left += round(anchorWidth / 2);\n }\n if (horizontalPosition === RIGHT) {\n left -= width;\n }\n if (horizontalPosition === CENTER) {\n left -= round(width / 2);\n }\n return {\n top: top,\n left: left\n };\n }\n });\n ui.plugin(Popup);\n var stableSort = kendo.support.stableSort;\n var tabKeyTrapNS = 'kendoTabKeyTrap';\n var focusableNodesSelector = 'a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, [tabindex], *[contenteditable]';\n var TabKeyTrap = Class.extend({\n init: function (element) {\n this.element = $(element);\n this.element.autoApplyNS(tabKeyTrapNS);\n },\n trap: function () {\n this.element.on('keydown', proxy(this._keepInTrap, this));\n },\n removeTrap: function () {\n this.element.kendoDestroy(tabKeyTrapNS);\n },\n destroy: function () {\n this.element.kendoDestroy(tabKeyTrapNS);\n this.element = undefined;\n },\n shouldTrap: function () {\n return true;\n },\n _keepInTrap: function (e) {\n if (e.which !== 9 || !this.shouldTrap() || e.isDefaultPrevented()) {\n return;\n }\n var elements = this._focusableElements();\n var sortedElements = this._sortFocusableElements(elements);\n var next = this._nextFocusable(e, sortedElements);\n this._focus(next);\n e.preventDefault();\n },\n _focusableElements: function () {\n var elements = this.element.find(focusableNodesSelector).filter(function (i, item) {\n return item.tabIndex >= 0 && $(item).is(':visible') && !$(item).is('[disabled]');\n });\n if (this.element.is('[tabindex]')) {\n elements.push(this.element[0]);\n }\n return elements;\n },\n _sortFocusableElements: function (elements) {\n var sortedElements;\n if (stableSort) {\n sortedElements = elements.sort(function (prev, next) {\n return prev.tabIndex - next.tabIndex;\n });\n } else {\n var attrName = '__k_index';\n elements.each(function (i, item) {\n item.setAttribute(attrName, i);\n });\n sortedElements = elements.sort(function (prev, next) {\n return prev.tabIndex === next.tabIndex ? parseInt(prev.getAttribute(attrName), 10) - parseInt(next.getAttribute(attrName), 10) : prev.tabIndex - next.tabIndex;\n });\n elements.removeAttr(attrName);\n }\n return sortedElements;\n },\n _nextFocusable: function (e, elements) {\n var count = elements.length;\n var current = elements.index(e.target);\n return elements.get((current + (e.shiftKey ? -1 : 1)) % count);\n },\n _focus: function (element) {\n if (element.nodeName == 'IFRAME') {\n element.contentWindow.document.body.focus();\n return;\n }\n element.focus();\n if (element.nodeName == 'INPUT' && element.setSelectionRange && this._haveSelectionRange(element)) {\n element.setSelectionRange(0, element.value.length);\n }\n },\n _haveSelectionRange: function (element) {\n var elementType = element.type.toLowerCase();\n return elementType === 'text' || elementType === 'search' || elementType === 'url' || elementType === 'tel' || elementType === 'password';\n }\n });\n ui.Popup.TabKeyTrap = TabKeyTrap;\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.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}));"]}