{"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","browser","outerWidth","_outerWidth","outerHeight","_outerHeight","parent","windowOuterWidth","removeClass","hasClass","wrapResize","style","percentRegExp","test","is","addClass","boxSizing","mozBoxSizing","webkitBoxSizing","msie","floor","version","zoom","children","wrapper","wrapperStyle","display","position","deepExtend","destination","i","arguments","deepExtendOne","source","property","propValue","propType","propInit","destProp","ObservableArray","data","LazyObservableArray","DataSource","HierarchicalDataSource","OBJECT","constructor","Array","RegExp","isFunction","ArrayBuffer","UNDEFINED","Date","getTime","clone","testRx","agent","rxs","dflt","rx","hasOwnProperty","toHyphens","str","g","toLowerCase","toCamelCase","strMatch","g1","toUpperCase","getComputedStyles","properties","computedStyle","styles","document","defaultView","getComputedStyle","each","idx","value","getPropertyValue","currentStyle","size","isScrollable","className","indexOf","overflow","scrollLeft","el","isRtl","webkit","mozila","mozilla","browserVersion","e","safari","scrollWidth","clientWidth","Math","abs","obj","key","result","getOffset","type","positioned","offset","sign","top","pointers","msPointers","pageYOffset","documentElement","scrollTop","pageXOffset","parseEffects","input","effects","this","fx","Element","prepareAnimationOptions","options","duration","reverse","complete","STRING","BOOLEAN","extend","init","noop","teardown","hide","completeCallback","animate","instance","queue","promise","toggleClass","classes","add","htmlEncode","ampRegExp","ltRegExp","gtRegExp","quoteRegExp","aposRegExp","unescape","template","decodeURIComponent","error","_","m1","m2","String","fromCharCode","parseInt","parseOption","option","dashRegExp","getAttribute","ns","numberRegExp","parseFloat","jsonRegExp","jsonFormatRegExp","Function","parseOptions","role","templateRegExp","html","containmentComparer","a","b","contains","resizableWidget","widget","inArray","attr","focusable","isTabIndexNotNaN","nodeName","disabled","href","visible","expr","pseudos","parents","addBack","filter","kendoJQuery","selector","context","fn","Template","preventDefault","isDefaultPrevented","Observable","argumentNameRegExp","encodeRegExp","escapedCurlyRegExp","curlyRegExp","escapedSharpRegExp","sharpRegExp","directions","eventTarget","wrapExpression","localUrlRe","Widget","DataBoundWidget","ContainerNullObject","MobileWidget","MOUSE_EVENTS","EXCLUDE_BUST_CLICK_SELECTOR","MouseEventNormalizer","eventMap","getEventMap","eventRegEx","on","rootjQuery","animationFrame","animationQueue","cultures","isArray","proxy","JSON","formatRegExp","FUNCTION","NUMBER","NULL","getterCache","setterCache","slice","noDepricateExtend","src","copyIsArray","copy","name","target","deep","jQuery","isPlainObject","proto","member","base","that","subclass","apply","prototype","Object","_initOptions","_defaultPrevented","_events","bind","eventName","handlers","one","original","handler","events","eventNames","handlersIsFunction","unbind","push","unshift","trigger","sender","call","splice","paramName","useWithBlock","render","compile","parts","settings","argumentName","functionBody","_slotCount","Error","format","quote","string","escapable","lastIndex","c","meta","charCodeAt","toString","holder","k","v","partial","mind","gap","toJSON","rep","isFinite","indent","\b","\t","\n","\f","\r","\"","\\","valueOf","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","Number","Boolean","stringify","replacer","space","","findCulture","culture","numberFormat","getCulture","current","formatDate","date","calendar","calendars","standard","days","months","patterns","dateFormatRegExp","minutes","getDate","namesAbbr","getDay","names","getMonth","getFullYear","getHours","getMinutes","getSeconds","getMilliseconds","AM","PM","getTimezoneOffset","formatNumber","decimal","precision","pattern","literals","symbol","isCurrency","isPercent","customPrecision","formatAndPrecision","negative","integer","fraction","integerLength","fractionLength","replacement","ch","hasGroup","hasNegativeFormat","decimalIndex","sharpIndex","zeroIndex","hasZero","hasSharp","percentIndex","currencyIndex","startZeroIndex","start","exp","rounded","POINT","decimals","EMPTY","toLocaleString","standardFormatRegExp","exec","currency","percent","toExponential","round","groupInteger","literalRegExp","quoteChar","literal","PLACEHOLDER","SHARP","ZERO","COMMA","commaRegExp","lastIndexOf","EN","objectToString",",",".","groupSize","abbr","namesShort","d","D","F","G","m","M","s","t","T","u","y","Y","/",":","firstDay","twoDigitYearMax","cultureName","newGroupSize","groupSizes","shift","toFixed","min","fmt","values","index","placeholderFormat","_extractFormat","_activeElement","activeElement","_round","includeMargin","outOfRange","designatorPredicate","designator","mapDesignators","designators","map","adjustDST","hours","setHours","lowerArray","array","lowerLocalInfo","localInfo","newLocalInfo","parseExact","strict","count","pmHour","UTC","matches","amDesignators","pmDesignators","hoursOffset","minutesOffset","hasTime","lookAhead","getNumber","rg","substr","valueIdx","getIndexByName","lower","nameLength","subValue","matchLength","matchIdx","checkLiteral","year","month","day","seconds","milliseconds","defaultYear","_lowerDays","_lowerMonths","longTimeZoneRegExp","shortTimeZoneRegExp","isNaN","setFullYear","parseMicrosoftFormatOffset","getDefaultFormats","cultureFormats","formatIdx","FORMATS_SEQUENCE","STANDARD_FORMATS","formats","concat","internalParseDate","tzoffset","dateRegExp","offsetRegExp","timezone","convert","nonBreakingSpaceRegExp","exponentRegExp","2","3","4","parseDate","parseExactDate","percentSymbol","table","docStyle","transforms","elementProto","mobileOS","documentMode","chrome","mobileChrome","_scrollbar","scrollbar","refresh","div","createElement","cssText","innerHTML","body","appendChild","offsetWidth","removeChild","closest","tbodyInnerHtml","touch","HTMLElement","hasHW3D","WebKitCSSMatrix","cssFlexbox","lowPrefix","prefix","hasTransitions","event","devicePixelRatio","screenWidth","screen","availWidth","innerWidth","screenHeight","availHeight","innerHeight","detectOS","ua","minorVersion","os","notAndroidPhone","agentRxs","wp","fire","android","iphone","ipad","meego","webos","blackberry","playbook","windows","tizen","sailfish","ffos","osRxs","ios","flat","formFactorRxs","tablet","browserRxs","omini","omobile","firefox","mobilesafari","ie","navigator","device","majorVersion","flatVersion","cordova","PhoneGap","appMode","standalone","location","protocol","userAgent","wpDevicePixelRatio","hasNativeScrolling","delayedClick","mouseAndTouchPresent","detectBrowser","edge","opera","detectClipboardAccess","commands","queryCommandSupported","cut","paste","clipboard","zoomLevel","ie11WidthCorrection","docEl","scrollHeight","clientHeight","cssBorderSpacing","borderSpacing","cssClass","docElement","eventCapture","addEventListener","placeholder","propertyChangeEvent","types","setAttribute","cssFloat","stableSort","threshold","sorted","field","sort","matchesSelector","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","nodeList","querySelectorAll","parentNode","matchMedia","pushState","history","hashChange","customElements","crios","MSPointerEvent","PointerEvent","kineticScrollNeeded","down","up","in","out","enabled","dequeue","disable","promiseShim","enable","animatedPromise","kendoStop","clearQueue","gotoEnd","stop","kendoAnimate","kendoAddClass","kendoRemoveClass","kendoToggleClass","toggle","touches","originalEvent","changedTouches","elementFromPoint","clientX","clientY","callback","mousedown","mouseup","mousemove","mousecancel","click","resize","members","widgets","_widgetRegisteredCallbacks","ui","mobile","dataviz","drawing","spreadsheet","messages","keys","INSERT","DELETE","BACKSPACE","TAB","ENTER","ESC","LEFT","UP","RIGHT","DOWN","END","HOME","SPACEBAR","PAGEUP","PAGEDOWN","F2","F10","F12","NUMPAD_PLUS","NUMPAD_MINUS","NUMPAD_DOT","isLocalUrl","url","expression","safe","getter","setter","accessor","get","set","guid","random","id","roleSelector","directiveSelector","directives","selectors","triggeredByInput","tagName","onWidgetRegistered","len","logToConsole","message","console","suppressLog","log","dataSource","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","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","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","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","hasNotRequestedItems","groupCount","itemsToSkip","taken","getGroupSubGroupCount","_fetchingGroupItems","skipped","getGroupItems","includeParents","excludeHeader","currentItems","subgroups","_composeItemsFilter","findSubgroups","_timeout","_groupItemsSuccessHandler","includeSubGroupCount","_subGroupCountSuccessHandler","totalField","_updateRangePristineData","_currentRequestTimeStamp","_skipRequestsInProgress","indexOfCurrentGroup","currentGroup","dataLength","indexes","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","arr","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","checkbox","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","firstItem","lastItem","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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AQzhC,GAAM0hC,kBAAkBF,IAAeA,CACnD,OAAOvhC,IAAQkoB,YAAc1pB,EAAO0pB,WAAWsZ,GAAOnkB,SAE1Dtd,GAAM0hC,kBAAoB,SAAUC,GAChC,OACIC,GAAM,qBACNC,GAAM,qBACNC,GAAM,qBACNC,GAAM,qBACNC,GAAM,uBACRL,IAEN3hC,GAAMiiC,cACFC,OACI,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,QAEJC,OACI,OACA,OACA,OACA,OACA,OACA,OACA,MACA,QACA,OACA,OACA,OACA,OACA,OACA,MACA,OACA,OACA,QAEJC,OACI,MACA,OACA,QACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,QACA,OACA,OACA,MACA,OACA,OACA,QACA,OACA,SAEJC,KACI,OACA,QACA,OACA,SACA,OACA,OACA,OACA,OACA,OACA,QACA,OACA,QAEJC,cACI,OACA,OACA,OACA,OACA,SAEJ3+B,MACI,OACA,OACA,SAEJ4+B,aACI,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,QACA,OACA,QACA,OACA,OACA,OACA,OACA,QACA,OACA,OACA,OACA,OACA,OACA,QACA,MACA,OACA,OACA,UAEJC,KAAM,QACNC,QACI,OACA,OACA,OACA,OACA,OACA,OACA,UACA,OACA,QAEJC,KACI,MACA,OACA,MACA,QACA,OACA,OACA,OACA,OACA,OACA,UACA,KACA,OACA,SAEJC,cACI,OACA,OACA,SACA,OACA,OACA,OACA,SAGR3iC,GAAM4iC,aAAe,SAAUC,EAAWC,GAArB,GAOR7/B,GACD8/B,EAPJC,EAAchjC,GAAMiiC,aACpBgB,EAASvyB,OAAO2a,KAAK2X,GACrBv7B,EAAO,MACX,IAAIo7B,IAAcnkC,IAAcmkC,EAAUnjC,OACtC,MAAO+H,EAEX,KAASxE,EAAI,EAAGA,EAAIggC,EAAOvjC,OAAQuD,GAAK,EAEpC,GADI8/B,EAAaC,EAAYC,EAAOhgC,IAChC8/B,EAAWz8B,QAAQu8B,EAAU39B,kBAC7B,M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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 = '2020.3.1118'.replace(/^\\s+|\\s+$/g, '');\n function Class() {\n }\n Class.extend = function (proto) {\n var base = function () {\n }, member, that = this, subclass = proto && proto.init ? proto.init : function () {\n that.apply(this, arguments);\n }, fn;\n base.prototype = that.prototype;\n fn = subclass.fn = subclass.prototype = new base();\n for (member in proto) {\n if (proto[member] != null && proto[member].constructor === Object) {\n fn[member] = extend(true, {}, base.prototype[member], proto[member]);\n } else {\n fn[member] = proto[member];\n }\n }\n fn.constructor = subclass;\n subclass.extend = that.extend;\n return subclass;\n };\n Class.prototype._initOptions = function (options) {\n this.options = deepExtend({}, this.options, options);\n };\n var isFunction = kendo.isFunction = function (fn) {\n return typeof fn === 'function';\n };\n var preventDefault = function () {\n this._defaultPrevented = true;\n };\n var isDefaultPrevented = function () {\n return this._defaultPrevented === true;\n };\n var Observable = Class.extend({\n init: function () {\n this._events = {};\n },\n bind: function (eventName, handlers, one) {\n var that = this, idx, eventNames = typeof eventName === STRING ? [eventName] : eventName, length, original, handler, handlersIsFunction = typeof handlers === FUNCTION, events;\n if (handlers === undefined) {\n for (idx in eventName) {\n that.bind(idx, eventName[idx]);\n }\n return that;\n }\n for (idx = 0, length = eventNames.length; idx < length; idx++) {\n eventName = eventNames[idx];\n handler = handlersIsFunction ? handlers : handlers[eventName];\n if (handler) {\n if (one) {\n original = handler;\n handler = function () {\n that.unbind(eventName, handler);\n original.apply(that, arguments);\n };\n handler.original = original;\n }\n events = that._events[eventName] = that._events[eventName] || [];\n events.push(handler);\n }\n }\n return that;\n },\n one: function (eventNames, handlers) {\n return this.bind(eventNames, handlers, true);\n },\n first: function (eventName, handlers) {\n var that = this, idx, eventNames = typeof eventName === STRING ? [eventName] : eventName, length, handler, handlersIsFunction = typeof handlers === FUNCTION, events;\n for (idx = 0, length = eventNames.length; idx < length; idx++) {\n eventName = eventNames[idx];\n handler = handlersIsFunction ? handlers : handlers[eventName];\n if (handler) {\n events = that._events[eventName] = that._events[eventName] || [];\n events.unshift(handler);\n }\n }\n return that;\n },\n trigger: function (eventName, e) {\n var that = this, events = that._events[eventName], idx, length;\n if (events) {\n e = e || {};\n e.sender = that;\n e._defaultPrevented = false;\n e.preventDefault = preventDefault;\n e.isDefaultPrevented = isDefaultPrevented;\n events = events.slice();\n for (idx = 0, length = events.length; idx < length; idx++) {\n events[idx].call(that, e);\n }\n return e._defaultPrevented === true;\n }\n return false;\n },\n unbind: function (eventName, handler) {\n var that = this, events = that._events[eventName], idx;\n if (eventName === undefined) {\n that._events = {};\n } else if (events) {\n if (handler) {\n for (idx = events.length - 1; idx >= 0; idx--) {\n if (events[idx] === handler || events[idx].original === handler) {\n events.splice(idx, 1);\n }\n }\n } else {\n that._events[eventName] = [];\n }\n }\n return that;\n }\n });\n function compilePart(part, stringPart) {\n if (stringPart) {\n return '\\'' + part.split('\\'').join('\\\\\\'').split('\\\\\"').join('\\\\\\\\\\\\\"').replace(/\\n/g, '\\\\n').replace(/\\r/g, '\\\\r').replace(/\\t/g, '\\\\t') + '\\'';\n } else {\n var first = part.charAt(0), rest = part.substring(1);\n if (first === '=') {\n return '+(' + rest + ')+';\n } else if (first === ':') {\n return '+$kendoHtmlEncode(' + rest + ')+';\n } else {\n return ';' + part + ';$kendoOutput+=';\n }\n }\n }\n var argumentNameRegExp = /^\\w+/, encodeRegExp = /\\$\\{([^}]*)\\}/g, escapedCurlyRegExp = /\\\\\\}/g, curlyRegExp = /__CURLY__/g, escapedSharpRegExp = /\\\\#/g, sharpRegExp = /__SHARP__/g, zeros = [\n '',\n '0',\n '00',\n '000',\n '0000'\n ];\n Template = {\n paramName: 'data',\n useWithBlock: true,\n render: function (template, data) {\n var idx, length, html = '';\n for (idx = 0, length = data.length; idx < length; idx++) {\n html += template(data[idx]);\n }\n return html;\n },\n compile: function (template, options) {\n var settings = extend({}, this, options), paramName = settings.paramName, argumentName = paramName.match(argumentNameRegExp)[0], useWithBlock = settings.useWithBlock, functionBody = 'var $kendoOutput, $kendoHtmlEncode = kendo.htmlEncode;', fn, parts, idx;\n if (isFunction(template)) {\n return template;\n }\n functionBody += useWithBlock ? 'with(' + paramName + '){' : '';\n functionBody += '$kendoOutput=';\n parts = template.replace(escapedCurlyRegExp, '__CURLY__').replace(encodeRegExp, '#=$kendoHtmlEncode($1)#').replace(curlyRegExp, '}').replace(escapedSharpRegExp, '__SHARP__').split('#');\n for (idx = 0; idx < parts.length; idx++) {\n functionBody += compilePart(parts[idx], idx % 2 === 0);\n }\n functionBody += useWithBlock ? ';}' : ';';\n functionBody += 'return $kendoOutput;';\n functionBody = functionBody.replace(sharpRegExp, '#');\n try {\n fn = new Function(argumentName, functionBody);\n fn._slotCount = Math.floor(parts.length / 2);\n return fn;\n } catch (e) {\n throw new Error(kendo.format('Invalid template:\\'{0}\\' Generated code:\\'{1}\\'', template, functionBody));\n }\n }\n };\n function pad(number, digits, end) {\n number = number + '';\n digits = digits || 2;\n end = digits - number.length;\n if (end) {\n return zeros[digits].substring(0, end) + number;\n }\n return number;\n }\n (function () {\n var escapable = /[\\\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g, gap, indent, meta = {\n '\\b': '\\\\b',\n '\\t': '\\\\t',\n '\\n': '\\\\n',\n '\\f': '\\\\f',\n '\\r': '\\\\r',\n '\"': '\\\\\"',\n '\\\\': '\\\\\\\\'\n }, rep, toString = {}.toString;\n if (typeof Date.prototype.toJSON !== FUNCTION) {\n Date.prototype.toJSON = function () {\n var that = this;\n return isFinite(that.valueOf()) ? pad(that.getUTCFullYear(), 4) + '-' + pad(that.getUTCMonth() + 1) + '-' + pad(that.getUTCDate()) + 'T' + pad(that.getUTCHours()) + ':' + pad(that.getUTCMinutes()) + ':' + pad(that.getUTCSeconds()) + 'Z' : null;\n };\n String.prototype.toJSON = Number.prototype.toJSON = Boolean.prototype.toJSON = function () {\n return this.valueOf();\n };\n }\n function quote(string) {\n escapable.lastIndex = 0;\n return escapable.test(string) ? '\"' + string.replace(escapable, function (a) {\n var c = meta[a];\n return typeof c === STRING ? c : '\\\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);\n }) + '\"' : '\"' + string + '\"';\n }\n function str(key, holder) {\n var i, k, v, length, mind = gap, partial, value = holder[key], type;\n if (value && typeof value === OBJECT && typeof value.toJSON === FUNCTION) {\n value = value.toJSON(key);\n }\n if (typeof rep === FUNCTION) {\n value = rep.call(holder, key, value);\n }\n type = typeof value;\n if (type === STRING) {\n return quote(value);\n } else if (type === NUMBER) {\n return isFinite(value) ? String(value) : NULL;\n } else if (type === BOOLEAN || type === NULL) {\n return String(value);\n } else if (type === OBJECT) {\n if (!value) {\n return NULL;\n }\n gap += indent;\n partial = [];\n if (toString.apply(value) === '[object Array]') {\n length = value.length;\n for (i = 0; i < length; i++) {\n partial[i] = str(i, value) || NULL;\n }\n v = partial.length === 0 ? '[]' : gap ? '[\\n' + gap + partial.join(',\\n' + gap) + '\\n' + mind + ']' : '[' + partial.join(',') + ']';\n gap = mind;\n return v;\n }\n if (rep && typeof rep === OBJECT) {\n length = rep.length;\n for (i = 0; i < length; i++) {\n if (typeof rep[i] === STRING) {\n k = rep[i];\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (gap ? ': ' : ':') + v);\n }\n }\n }\n } else {\n for (k in value) {\n if (Object.hasOwnProperty.call(value, k)) {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (gap ? ': ' : ':') + v);\n }\n }\n }\n }\n v = partial.length === 0 ? '{}' : gap ? '{\\n' + gap + partial.join(',\\n' + gap) + '\\n' + mind + '}' : '{' + partial.join(',') + '}';\n gap = mind;\n return v;\n }\n }\n if (typeof JSON.stringify !== FUNCTION) {\n JSON.stringify = function (value, replacer, space) {\n var i;\n gap = '';\n indent = '';\n if (typeof space === NUMBER) {\n for (i = 0; i < space; i += 1) {\n indent += ' ';\n }\n } else if (typeof space === STRING) {\n indent = space;\n }\n rep = replacer;\n if (replacer && typeof replacer !== FUNCTION && (typeof replacer !== OBJECT || typeof replacer.length !== NUMBER)) {\n throw new Error('JSON.stringify');\n }\n return str('', { '': value });\n };\n }\n }());\n (function () {\n var dateFormatRegExp = /dddd|ddd|dd|d|MMMM|MMM|MM|M|yyyy|yy|HH|H|hh|h|mm|m|fff|ff|f|tt|ss|s|zzz|zz|z|\"[^\"]*\"|'[^']*'/g, standardFormatRegExp = /^(n|c|p|e)(\\d*)$/i, literalRegExp = /(\\\\.)|(['][^']*[']?)|([\"][^\"]*[\"]?)/g, commaRegExp = /\\,/g, EMPTY = '', POINT = '.', COMMA = ',', SHARP = '#', ZERO = '0', PLACEHOLDER = '??', EN = 'en-US', objectToString = {}.toString;\n kendo.cultures['en-US'] = {\n name: EN,\n numberFormat: {\n pattern: ['-n'],\n decimals: 2,\n ',': ',',\n '.': '.',\n groupSize: [3],\n percent: {\n pattern: [\n '-n %',\n 'n %'\n ],\n decimals: 2,\n ',': ',',\n '.': '.',\n groupSize: [3],\n symbol: '%'\n },\n currency: {\n name: 'US Dollar',\n abbr: 'USD',\n pattern: [\n '($n)',\n '$n'\n ],\n decimals: 2,\n ',': ',',\n '.': '.',\n groupSize: [3],\n symbol: '$'\n }\n },\n calendars: {\n standard: {\n days: {\n names: [\n 'Sunday',\n 'Monday',\n 'Tuesday',\n 'Wednesday',\n 'Thursday',\n 'Friday',\n 'Saturday'\n ],\n namesAbbr: [\n 'Sun',\n 'Mon',\n 'Tue',\n 'Wed',\n 'Thu',\n 'Fri',\n 'Sat'\n ],\n namesShort: [\n 'Su',\n 'Mo',\n 'Tu',\n 'We',\n 'Th',\n 'Fr',\n 'Sa'\n ]\n },\n months: {\n names: [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December'\n ],\n namesAbbr: [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec'\n ]\n },\n AM: [\n 'AM',\n 'am',\n 'AM'\n ],\n PM: [\n 'PM',\n 'pm',\n 'PM'\n ],\n patterns: {\n d: 'M/d/yyyy',\n D: 'dddd, MMMM dd, yyyy',\n F: 'dddd, MMMM dd, yyyy h:mm:ss tt',\n g: 'M/d/yyyy h:mm tt',\n G: 'M/d/yyyy h:mm:ss tt',\n m: 'MMMM dd',\n M: 'MMMM dd',\n s: 'yyyy\\'-\\'MM\\'-\\'ddTHH\\':\\'mm\\':\\'ss',\n t: 'h:mm tt',\n T: 'h:mm:ss tt',\n u: 'yyyy\\'-\\'MM\\'-\\'dd HH\\':\\'mm\\':\\'ss\\'Z\\'',\n y: 'MMMM, yyyy',\n Y: 'MMMM, yyyy'\n },\n '/': '/',\n ':': ':',\n firstDay: 0,\n twoDigitYearMax: 2029\n }\n }\n };\n function findCulture(culture) {\n if (culture) {\n if (culture.numberFormat) {\n return culture;\n }\n if (typeof culture === STRING) {\n var cultures = kendo.cultures;\n return cultures[culture] || cultures[culture.split('-')[0]] || null;\n }\n return null;\n }\n return null;\n }\n function getCulture(culture) {\n if (culture) {\n culture = findCulture(culture);\n }\n return culture || kendo.cultures.current;\n }\n kendo.culture = function (cultureName) {\n var cultures = kendo.cultures, culture;\n if (cultureName !== undefined) {\n culture = findCulture(cultureName) || cultures[EN];\n culture.calendar = culture.calendars.standard;\n cultures.current = culture;\n } else {\n return cultures.current;\n }\n };\n kendo.findCulture = findCulture;\n kendo.getCulture = getCulture;\n kendo.culture(EN);\n function formatDate(date, format, culture) {\n culture = getCulture(culture);\n var calendar = culture.calendars.standard, days = calendar.days, months = calendar.months;\n format = calendar.patterns[format] || format;\n return format.replace(dateFormatRegExp, function (match) {\n var minutes;\n var result;\n var sign;\n if (match === 'd') {\n result = date.getDate();\n } else if (match === 'dd') {\n result = pad(date.getDate());\n } else if (match === 'ddd') {\n result = days.namesAbbr[date.getDay()];\n } else if (match === 'dddd') {\n result = days.names[date.getDay()];\n } else if (match === 'M') {\n result = date.getMonth() + 1;\n } else if (match === 'MM') {\n result = pad(date.getMonth() + 1);\n } else if (match === 'MMM') {\n result = months.namesAbbr[date.getMonth()];\n } else if (match === 'MMMM') {\n result = months.names[date.getMonth()];\n } else if (match === 'yy') {\n result = pad(date.getFullYear() % 100);\n } else if (match === 'yyyy') {\n result = pad(date.getFullYear(), 4);\n } else if (match === 'h') {\n result = date.getHours() % 12 || 12;\n } else if (match === 'hh') {\n result = pad(date.getHours() % 12 || 12);\n } else if (match === 'H') {\n result = date.getHours();\n } else if (match === 'HH') {\n result = pad(date.getHours());\n } else if (match === 'm') {\n result = date.getMinutes();\n } else if (match === 'mm') {\n result = pad(date.getMinutes());\n } else if (match === 's') {\n result = date.getSeconds();\n } else if (match === 'ss') {\n result = pad(date.getSeconds());\n } else if (match === 'f') {\n result = math.floor(date.getMilliseconds() / 100);\n } else if (match === 'ff') {\n result = date.getMilliseconds();\n if (result > 99) {\n result = math.floor(result / 10);\n }\n result = pad(result);\n } else if (match === 'fff') {\n result = pad(date.getMilliseconds(), 3);\n } else if (match === 'tt') {\n result = date.getHours() < 12 ? calendar.AM[0] : calendar.PM[0];\n } else if (match === 'zzz') {\n minutes = date.getTimezoneOffset();\n sign = minutes < 0;\n result = math.abs(minutes / 60).toString().split('.')[0];\n minutes = math.abs(minutes) - result * 60;\n result = (sign ? '+' : '-') + pad(result);\n result += ':' + pad(minutes);\n } else if (match === 'zz' || match === 'z') {\n result = date.getTimezoneOffset() / 60;\n sign = result < 0;\n result = math.abs(result).toString().split('.')[0];\n result = (sign ? '+' : '-') + (match === 'zz' ? pad(result) : result);\n }\n return result !== undefined ? result : match.slice(1, match.length - 1);\n });\n }\n function formatNumber(number, format, culture) {\n culture = getCulture(culture);\n var numberFormat = culture.numberFormat, decimal = numberFormat[POINT], precision = numberFormat.decimals, pattern = numberFormat.pattern[0], literals = [], symbol, isCurrency, isPercent, customPrecision, formatAndPrecision, negative = number < 0, integer, fraction, integerLength, fractionLength, replacement = EMPTY, value = EMPTY, idx, length, ch, hasGroup, hasNegativeFormat, decimalIndex, sharpIndex, zeroIndex, hasZero, hasSharp, percentIndex, currencyIndex, startZeroIndex, start = -1, end;\n if (number === undefined) {\n return EMPTY;\n }\n if (!isFinite(number)) {\n return number;\n }\n if (!format) {\n return culture.name.length ? number.toLocaleString() : number.toString();\n }\n formatAndPrecision = standardFormatRegExp.exec(format);\n if (formatAndPrecision) {\n format = formatAndPrecision[1].toLowerCase();\n isCurrency = format === 'c';\n isPercent = format === 'p';\n if (isCurrency || isPercent) {\n numberFormat = isCurrency ? numberFormat.currency : numberFormat.percent;\n decimal = numberFormat[POINT];\n precision = numberFormat.decimals;\n symbol = numberFormat.symbol;\n pattern = numberFormat.pattern[negative ? 0 : 1];\n }\n customPrecision = formatAndPrecision[2];\n if (customPrecision) {\n precision = +customPrecision;\n }\n if (format === 'e') {\n var exp = customPrecision ? number.toExponential(precision) : number.toExponential();\n return exp.replace(POINT, numberFormat[POINT]);\n }\n if (isPercent) {\n number *= 100;\n }\n number = round(number, precision);\n negative = number < 0;\n number = number.split(POINT);\n integer = number[0];\n fraction = number[1];\n if (negative) {\n integer = integer.substring(1);\n }\n value = groupInteger(integer, 0, integer.length, numberFormat);\n if (fraction) {\n value += decimal + fraction;\n }\n if (format === 'n' && !negative) {\n return value;\n }\n number = EMPTY;\n for (idx = 0, length = pattern.length; idx < length; idx++) {\n ch = pattern.charAt(idx);\n if (ch === 'n') {\n number += value;\n } else if (ch === '$' || ch === '%') {\n number += symbol;\n } else {\n number += ch;\n }\n }\n return number;\n }\n if (format.indexOf('\\'') > -1 || format.indexOf('\"') > -1 || format.indexOf('\\\\') > -1) {\n format = format.replace(literalRegExp, function (match) {\n var quoteChar = match.charAt(0).replace('\\\\', ''), literal = match.slice(1).replace(quoteChar, '');\n literals.push(literal);\n return PLACEHOLDER;\n });\n }\n format = format.split(';');\n if (negative && format[1]) {\n format = format[1];\n hasNegativeFormat = true;\n } else if (number === 0 && format[2]) {\n format = format[2];\n if (format.indexOf(SHARP) == -1 && format.indexOf(ZERO) == -1) {\n return format;\n }\n } else {\n format = format[0];\n }\n percentIndex = format.indexOf('%');\n currencyIndex = format.indexOf('$');\n isPercent = percentIndex != -1;\n isCurrency = currencyIndex != -1;\n if (isPercent) {\n number *= 100;\n }\n if (isCurrency && format[currencyIndex - 1] === '\\\\') {\n format = format.split('\\\\').join('');\n isCurrency = false;\n }\n if (isCurrency || isPercent) {\n numberFormat = isCurrency ? numberFormat.currency : numberFormat.percent;\n decimal = numberFormat[POINT];\n precision = numberFormat.decimals;\n symbol = numberFormat.symbol;\n }\n hasGroup = format.indexOf(COMMA) > -1;\n if (hasGroup) {\n format = format.replace(commaRegExp, EMPTY);\n }\n decimalIndex = format.indexOf(POINT);\n length = format.length;\n if (decimalIndex != -1) {\n fraction = number.toString().split('e');\n if (fraction[1]) {\n fraction = round(number, Math.abs(fraction[1]));\n } else {\n fraction = fraction[0];\n }\n fraction = fraction.split(POINT)[1] || EMPTY;\n zeroIndex = format.lastIndexOf(ZERO) - decimalIndex;\n sharpIndex = format.lastIndexOf(SHARP) - decimalIndex;\n hasZero = zeroIndex > -1;\n hasSharp = sharpIndex > -1;\n idx = fraction.length;\n if (!hasZero && !hasSharp) {\n format = format.substring(0, decimalIndex) + format.substring(decimalIndex + 1);\n length = format.length;\n decimalIndex = -1;\n idx = 0;\n }\n if (hasZero && zeroIndex > sharpIndex) {\n idx = zeroIndex;\n } else if (sharpIndex > zeroIndex) {\n if (hasSharp && idx > sharpIndex) {\n var rounded = round(number, sharpIndex, negative);\n while (rounded.charAt(rounded.length - 1) === ZERO && sharpIndex > 0 && sharpIndex > zeroIndex) {\n sharpIndex--;\n rounded = round(number, sharpIndex, negative);\n }\n idx = sharpIndex;\n } else if (hasZero && idx < zeroIndex) {\n idx = zeroIndex;\n }\n }\n }\n number = round(number, idx, negative);\n sharpIndex = format.indexOf(SHARP);\n startZeroIndex = zeroIndex = format.indexOf(ZERO);\n if (sharpIndex == -1 && zeroIndex != -1) {\n start = zeroIndex;\n } else if (sharpIndex != -1 && zeroIndex == -1) {\n start = sharpIndex;\n } else {\n start = sharpIndex > zeroIndex ? zeroIndex : sharpIndex;\n }\n sharpIndex = format.lastIndexOf(SHARP);\n zeroIndex = format.lastIndexOf(ZERO);\n if (sharpIndex == -1 && zeroIndex != -1) {\n end = zeroIndex;\n } else if (sharpIndex != -1 && zeroIndex == -1) {\n end = sharpIndex;\n } else {\n end = sharpIndex > zeroIndex ? sharpIndex : zeroIndex;\n }\n if (start == length) {\n end = start;\n }\n if (start != -1) {\n value = number.toString().split(POINT);\n integer = value[0];\n fraction = value[1] || EMPTY;\n integerLength = integer.length;\n fractionLength = fraction.length;\n if (negative && number * -1 >= 0) {\n negative = false;\n }\n number = format.substring(0, start);\n if (negative && !hasNegativeFormat) {\n number += '-';\n }\n for (idx = start; idx < length; idx++) {\n ch = format.charAt(idx);\n if (decimalIndex == -1) {\n if (end - idx < integerLength) {\n number += integer;\n break;\n }\n } else {\n if (zeroIndex != -1 && zeroIndex < idx) {\n replacement = EMPTY;\n }\n if (decimalIndex - idx <= integerLength && decimalIndex - idx > -1) {\n number += integer;\n idx = decimalIndex;\n }\n if (decimalIndex === idx) {\n number += (fraction ? decimal : EMPTY) + fraction;\n idx += end - decimalIndex + 1;\n continue;\n }\n }\n if (ch === ZERO) {\n number += ch;\n replacement = ch;\n } else if (ch === SHARP) {\n number += replacement;\n }\n }\n if (hasGroup) {\n number = groupInteger(number, start + (negative && !hasNegativeFormat ? 1 : 0), Math.max(end, integerLength + start), numberFormat);\n }\n if (end >= start) {\n number += format.substring(end + 1);\n }\n if (isCurrency || isPercent) {\n value = EMPTY;\n for (idx = 0, length = number.length; idx < length; idx++) {\n ch = number.charAt(idx);\n value += ch === '$' || ch === '%' ? symbol : ch;\n }\n number = value;\n }\n length = literals.length;\n if (length) {\n for (idx = 0; idx < length; idx++) {\n number = number.replace(PLACEHOLDER, literals[idx]);\n }\n }\n }\n return number;\n }\n var groupInteger = function (number, start, end, numberFormat) {\n var decimalIndex = number.indexOf(numberFormat[POINT]);\n var groupSizes = numberFormat.groupSize.slice();\n var groupSize = groupSizes.shift();\n var integer, integerLength;\n var idx, parts, value;\n var newGroupSize;\n end = decimalIndex !== -1 ? decimalIndex : end + 1;\n integer = number.substring(start, end);\n integerLength = integer.length;\n if (integerLength >= groupSize) {\n idx = integerLength;\n parts = [];\n while (idx > -1) {\n value = integer.substring(idx - groupSize, idx);\n if (value) {\n parts.push(value);\n }\n idx -= groupSize;\n newGroupSize = groupSizes.shift();\n groupSize = newGroupSize !== undefined ? newGroupSize : groupSize;\n if (groupSize === 0) {\n if (idx > 0) {\n parts.push(integer.substring(0, idx));\n }\n break;\n }\n }\n integer = parts.reverse().join(numberFormat[COMMA]);\n number = number.substring(0, start) + integer + number.substring(end);\n }\n return number;\n };\n var round = function (value, precision, negative) {\n precision = precision || 0;\n value = value.toString().split('e');\n value = Math.round(+(value[0] + 'e' + (value[1] ? +value[1] + precision : precision)));\n if (negative) {\n value = -value;\n }\n value = value.toString().split('e');\n value = +(value[0] + 'e' + (value[1] ? +value[1] - precision : -precision));\n return value.toFixed(Math.min(precision, 20));\n };\n var toString = function (value, fmt, culture) {\n if (fmt) {\n if (objectToString.call(value) === '[object Date]') {\n return formatDate(value, fmt, culture);\n } else if (typeof value === NUMBER) {\n return formatNumber(value, fmt, culture);\n }\n }\n return value !== undefined ? value : '';\n };\n kendo.format = function (fmt) {\n var values = arguments;\n return fmt.replace(formatRegExp, function (match, index, placeholderFormat) {\n var value = values[parseInt(index, 10) + 1];\n return toString(value, placeholderFormat ? placeholderFormat.substring(1) : '');\n });\n };\n kendo._extractFormat = function (format) {\n if (format.slice(0, 3) === '{0:') {\n format = format.slice(3, format.length - 1);\n }\n return format;\n };\n kendo._activeElement = function () {\n try {\n return document.activeElement;\n } catch (e) {\n return document.documentElement.activeElement;\n }\n };\n kendo._round = round;\n kendo._outerWidth = function (element, includeMargin) {\n return $(element).outerWidth(includeMargin || false) || 0;\n };\n kendo._outerHeight = function (element, includeMargin) {\n return $(element).outerHeight(includeMargin || false) || 0;\n };\n kendo.toString = toString;\n }());\n (function () {\n var nonBreakingSpaceRegExp = /\\u00A0/g, exponentRegExp = /[eE][\\-+]?[0-9]+/, shortTimeZoneRegExp = /[+|\\-]\\d{1,2}/, longTimeZoneRegExp = /[+|\\-]\\d{1,2}:?\\d{2}/, dateRegExp = /^\\/Date\\((.*?)\\)\\/$/, offsetRegExp = /[+-]\\d*/, FORMATS_SEQUENCE = [\n [],\n [\n 'G',\n 'g',\n 'F'\n ],\n [\n 'D',\n 'd',\n 'y',\n 'm',\n 'T',\n 't'\n ]\n ], STANDARD_FORMATS = [\n [\n 'yyyy-MM-ddTHH:mm:ss.fffffffzzz',\n 'yyyy-MM-ddTHH:mm:ss.fffffff',\n 'yyyy-MM-ddTHH:mm:ss.fffzzz',\n 'yyyy-MM-ddTHH:mm:ss.fff',\n 'ddd MMM dd yyyy HH:mm:ss',\n 'yyyy-MM-ddTHH:mm:sszzz',\n 'yyyy-MM-ddTHH:mmzzz',\n 'yyyy-MM-ddTHH:mmzz',\n 'yyyy-MM-ddTHH:mm:ss',\n 'yyyy-MM-dd HH:mm:ss',\n 'yyyy/MM/dd HH:mm:ss'\n ],\n [\n 'yyyy-MM-ddTHH:mm',\n 'yyyy-MM-dd HH:mm',\n 'yyyy/MM/dd HH:mm'\n ],\n [\n 'yyyy/MM/dd',\n 'yyyy-MM-dd',\n 'HH:mm:ss',\n 'HH:mm'\n ]\n ], numberRegExp = {\n 2: /^\\d{1,2}/,\n 3: /^\\d{1,3}/,\n 4: /^\\d{4}/\n }, objectToString = {}.toString;\n function outOfRange(value, start, end) {\n return !(value >= start && value <= end);\n }\n function designatorPredicate(designator) {\n return designator.charAt(0);\n }\n function mapDesignators(designators) {\n return $.map(designators, designatorPredicate);\n }\n function adjustDST(date, hours) {\n if (!hours && date.getHours() === 23) {\n date.setHours(date.getHours() + 2);\n }\n }\n function lowerArray(data) {\n var idx = 0, length = data.length, array = [];\n for (; idx < length; idx++) {\n array[idx] = (data[idx] + '').toLowerCase();\n }\n return array;\n }\n function lowerLocalInfo(localInfo) {\n var newLocalInfo = {}, property;\n for (property in localInfo) {\n newLocalInfo[property] = lowerArray(localInfo[property]);\n }\n return newLocalInfo;\n }\n function parseExact(value, format, culture, strict) {\n if (!value) {\n return null;\n }\n var lookAhead = function (match) {\n var i = 0;\n while (format[idx] === match) {\n i++;\n idx++;\n }\n if (i > 0) {\n idx -= 1;\n }\n return i;\n }, getNumber = function (size) {\n var rg = numberRegExp[size] || new RegExp('^\\\\d{1,' + size + '}'), match = value.substr(valueIdx, size).match(rg);\n if (match) {\n match = match[0];\n valueIdx += match.length;\n return parseInt(match, 10);\n }\n return null;\n }, getIndexByName = function (names, lower) {\n var i = 0, length = names.length, name, nameLength, matchLength = 0, matchIdx = 0, subValue;\n for (; i < length; i++) {\n name = names[i];\n nameLength = name.length;\n subValue = value.substr(valueIdx, nameLength);\n if (lower) {\n subValue = subValue.toLowerCase();\n }\n if (subValue == name && nameLength > matchLength) {\n matchLength = nameLength;\n matchIdx = i;\n }\n }\n if (matchLength) {\n valueIdx += matchLength;\n return matchIdx + 1;\n }\n return null;\n }, checkLiteral = function () {\n var result = false;\n if (value.charAt(valueIdx) === format[idx]) {\n valueIdx++;\n result = true;\n }\n return result;\n }, calendar = culture.calendars.standard, year = null, month = null, day = null, hours = null, minutes = null, seconds = null, milliseconds = null, idx = 0, valueIdx = 0, literal = false, date = new Date(), twoDigitYearMax = calendar.twoDigitYearMax || 2029, defaultYear = date.getFullYear(), ch, count, length, pattern, pmHour, UTC, matches, amDesignators, pmDesignators, hoursOffset, minutesOffset, hasTime, match;\n if (!format) {\n format = 'd';\n }\n pattern = calendar.patterns[format];\n if (pattern) {\n format = pattern;\n }\n format = format.split('');\n length = format.length;\n for (; idx < length; idx++) {\n ch = format[idx];\n if (literal) {\n if (ch === '\\'') {\n literal = false;\n } else {\n checkLiteral();\n }\n } else {\n if (ch === 'd') {\n count = lookAhead('d');\n if (!calendar._lowerDays) {\n calendar._lowerDays = lowerLocalInfo(calendar.days);\n }\n if (day !== null && count > 2) {\n continue;\n }\n day = count < 3 ? getNumber(2) : getIndexByName(calendar._lowerDays[count == 3 ? 'namesAbbr' : 'names'], true);\n if (day === null || outOfRange(day, 1, 31)) {\n return null;\n }\n } else if (ch === 'M') {\n count = lookAhead('M');\n if (!calendar._lowerMonths) {\n calendar._lowerMonths = lowerLocalInfo(calendar.months);\n }\n month = count < 3 ? getNumber(2) : getIndexByName(calendar._lowerMonths[count == 3 ? 'namesAbbr' : 'names'], true);\n if (month === null || outOfRange(month, 1, 12)) {\n return null;\n }\n month -= 1;\n } else if (ch === 'y') {\n count = lookAhead('y');\n year = getNumber(count);\n if (year === null) {\n return null;\n }\n if (count == 2) {\n if (typeof twoDigitYearMax === 'string') {\n twoDigitYearMax = defaultYear + parseInt(twoDigitYearMax, 10);\n }\n year = defaultYear - defaultYear % 100 + year;\n if (year > twoDigitYearMax) {\n year -= 100;\n }\n }\n } else if (ch === 'h') {\n lookAhead('h');\n hours = getNumber(2);\n if (hours == 12) {\n hours = 0;\n }\n if (hours === null || outOfRange(hours, 0, 11)) {\n return null;\n }\n } else if (ch === 'H') {\n lookAhead('H');\n hours = getNumber(2);\n if (hours === null || outOfRange(hours, 0, 23)) {\n return null;\n }\n } else if (ch === 'm') {\n lookAhead('m');\n minutes = getNumber(2);\n if (minutes === null || outOfRange(minutes, 0, 59)) {\n return null;\n }\n } else if (ch === 's') {\n lookAhead('s');\n seconds = getNumber(2);\n if (seconds === null || outOfRange(seconds, 0, 59)) {\n return null;\n }\n } else if (ch === 'f') {\n count = lookAhead('f');\n match = value.substr(valueIdx, count).match(numberRegExp[3]);\n milliseconds = getNumber(count);\n if (milliseconds !== null) {\n milliseconds = parseFloat('0.' + match[0], 10);\n milliseconds = kendo._round(milliseconds, 3);\n milliseconds *= 1000;\n }\n if (milliseconds === null || outOfRange(milliseconds, 0, 999)) {\n return null;\n }\n } else if (ch === 't') {\n count = lookAhead('t');\n amDesignators = calendar.AM;\n pmDesignators = calendar.PM;\n if (count === 1) {\n amDesignators = mapDesignators(amDesignators);\n pmDesignators = mapDesignators(pmDesignators);\n }\n pmHour = getIndexByName(pmDesignators);\n if (!pmHour && !getIndexByName(amDesignators)) {\n return null;\n }\n } else if (ch === 'z') {\n UTC = true;\n count = lookAhead('z');\n if (value.substr(valueIdx, 1) === 'Z') {\n checkLiteral();\n continue;\n }\n matches = value.substr(valueIdx, 6).match(count > 2 ? longTimeZoneRegExp : shortTimeZoneRegExp);\n if (!matches) {\n return null;\n }\n matches = matches[0].split(':');\n hoursOffset = matches[0];\n minutesOffset = matches[1];\n if (!minutesOffset && hoursOffset.length > 3) {\n valueIdx = hoursOffset.length - 2;\n minutesOffset = hoursOffset.substring(valueIdx);\n hoursOffset = hoursOffset.substring(0, valueIdx);\n }\n hoursOffset = parseInt(hoursOffset, 10);\n if (outOfRange(hoursOffset, -12, 13)) {\n return null;\n }\n if (count > 2) {\n minutesOffset = matches[0][0] + minutesOffset;\n minutesOffset = parseInt(minutesOffset, 10);\n if (isNaN(minutesOffset) || outOfRange(minutesOffset, -59, 59)) {\n return null;\n }\n }\n } else if (ch === '\\'') {\n literal = true;\n checkLiteral();\n } else if (!checkLiteral()) {\n return null;\n }\n }\n }\n if (strict && !/^\\s*$/.test(value.substr(valueIdx))) {\n return null;\n }\n hasTime = hours !== null || minutes !== null || seconds || null;\n if (year === null && month === null && day === null && hasTime) {\n year = defaultYear;\n month = date.getMonth();\n day = date.getDate();\n } else {\n if (year === null) {\n year = defaultYear;\n }\n if (day === null) {\n day = 1;\n }\n }\n if (pmHour && hours < 12) {\n hours += 12;\n }\n if (UTC) {\n if (hoursOffset) {\n hours += -hoursOffset;\n }\n if (minutesOffset) {\n minutes += -minutesOffset;\n }\n value = new Date(Date.UTC(year, month, day, hours, minutes, seconds, milliseconds));\n } else {\n value = new Date(year, month, day, hours, minutes, seconds, milliseconds);\n adjustDST(value, hours);\n }\n if (year < 100) {\n value.setFullYear(year);\n }\n if (value.getDate() !== day && UTC === undefined) {\n return null;\n }\n return value;\n }\n function parseMicrosoftFormatOffset(offset) {\n var sign = offset.substr(0, 1) === '-' ? -1 : 1;\n offset = offset.substring(1);\n offset = parseInt(offset.substr(0, 2), 10) * 60 + parseInt(offset.substring(2), 10);\n return sign * offset;\n }\n function getDefaultFormats(culture) {\n var length = math.max(FORMATS_SEQUENCE.length, STANDARD_FORMATS.length);\n var calendar = culture.calendar || culture.calendars.standard;\n var patterns = calendar.patterns;\n var cultureFormats, formatIdx, idx;\n var formats = [];\n for (idx = 0; idx < length; idx++) {\n cultureFormats = FORMATS_SEQUENCE[idx];\n for (formatIdx = 0; formatIdx < cultureFormats.length; formatIdx++) {\n formats.push(patterns[cultureFormats[formatIdx]]);\n }\n formats = formats.concat(STANDARD_FORMATS[idx]);\n }\n return formats;\n }\n function internalParseDate(value, formats, culture, strict) {\n if (objectToString.call(value) === '[object Date]') {\n return value;\n }\n var idx = 0;\n var date = null;\n var length;\n var tzoffset;\n if (value && value.indexOf('/D') === 0) {\n date = dateRegExp.exec(value);\n if (date) {\n date = date[1];\n tzoffset = offsetRegExp.exec(date.substring(1));\n date = new Date(parseInt(date, 10));\n if (tzoffset) {\n tzoffset = parseMicrosoftFormatOffset(tzoffset[0]);\n date = kendo.timezone.apply(date, 0);\n date = kendo.timezone.convert(date, 0, -1 * tzoffset);\n }\n return date;\n }\n }\n culture = kendo.getCulture(culture);\n if (!formats) {\n formats = getDefaultFormats(culture);\n }\n formats = isArray(formats) ? formats : [formats];\n length = formats.length;\n for (; idx < length; idx++) {\n date = parseExact(value, formats[idx], culture, strict);\n if (date) {\n return date;\n }\n }\n return date;\n }\n kendo.parseDate = function (value, formats, culture) {\n return internalParseDate(value, formats, culture, false);\n };\n kendo.parseExactDate = function (value, formats, culture) {\n return internalParseDate(value, formats, culture, true);\n };\n kendo.parseInt = function (value, culture) {\n var result = kendo.parseFloat(value, culture);\n if (result) {\n result = result | 0;\n }\n return result;\n };\n kendo.parseFloat = function (value, culture, format) {\n if (!value && value !== 0) {\n return null;\n }\n if (typeof value === NUMBER) {\n return value;\n }\n value = value.toString();\n culture = kendo.getCulture(culture);\n var number = culture.numberFormat, percent = number.percent, currency = number.currency, symbol = currency.symbol, percentSymbol = percent.symbol, negative = value.indexOf('-'), parts, isPercent;\n if (exponentRegExp.test(value)) {\n value = parseFloat(value.replace(number['.'], '.'));\n if (isNaN(value)) {\n value = null;\n }\n return value;\n }\n if (negative > 0) {\n return null;\n } else {\n negative = negative > -1;\n }\n if (value.indexOf(symbol) > -1 || format && format.toLowerCase().indexOf('c') > -1) {\n number = currency;\n parts = number.pattern[0].replace('$', symbol).split('n');\n if (value.indexOf(parts[0]) > -1 && value.indexOf(parts[1]) > -1) {\n value = value.replace(parts[0], '').replace(parts[1], '');\n negative = true;\n }\n } else if (value.indexOf(percentSymbol) > -1) {\n isPercent = true;\n number = percent;\n symbol = percentSymbol;\n }\n value = value.replace('-', '').replace(symbol, '').replace(nonBreakingSpaceRegExp, ' ').split(number[','].replace(nonBreakingSpaceRegExp, ' ')).join('').replace(number['.'], '.');\n value = parseFloat(value);\n if (isNaN(value)) {\n value = null;\n } else if (negative) {\n value *= -1;\n }\n if (value && isPercent) {\n value /= 100;\n }\n return value;\n };\n }());\n function getShadows(element) {\n var shadow = element.css(kendo.support.transitions.css + 'box-shadow') || element.css('box-shadow'), radius = shadow ? shadow.match(boxShadowRegExp) || [\n 0,\n 0,\n 0,\n 0,\n 0\n ] : [\n 0,\n 0,\n 0,\n 0,\n 0\n ], blur = math.max(+radius[3], +(radius[4] || 0));\n return {\n left: -radius[1] + blur,\n right: +radius[1] + blur,\n bottom: +radius[2] + blur\n };\n }\n function wrap(element, autosize) {\n var browser = support.browser, percentage, outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight, parent = element.parent(), windowOuterWidth = outerWidth(window);\n parent.removeClass('k-animation-container-sm');\n if (!parent.hasClass('k-animation-container')) {\n var width = element[0].style.width, height = element[0].style.height, percentWidth = percentRegExp.test(width), percentHeight = percentRegExp.test(height), forceWidth = element.hasClass('k-tooltip') || element.is('.k-menu-horizontal.k-context-menu');\n percentage = percentWidth || percentHeight;\n if (!percentWidth && (!autosize || autosize && width || forceWidth)) {\n width = autosize ? outerWidth(element) + 1 : outerWidth(element);\n }\n if (!percentHeight && (!autosize || autosize && height) || element.is('.k-menu-horizontal.k-context-menu')) {\n height = outerHeight(element);\n }\n element.wrap($('
').addClass('k-animation-container').css({\n width: width,\n height: height\n }));\n parent = element.parent();\n if (percentage) {\n element.css({\n width: '100%',\n height: '100%',\n boxSizing: 'border-box',\n mozBoxSizing: 'border-box',\n webkitBoxSizing: 'border-box'\n });\n }\n } else {\n wrapResize(element, autosize);\n }\n if (windowOuterWidth < outerWidth(parent)) {\n parent.addClass('k-animation-container-sm');\n wrapResize(element, autosize);\n }\n if (browser.msie && math.floor(browser.version) <= 7) {\n element.css({ zoom: 1 });\n element.children('.k-menu').width(element.width());\n }\n return parent;\n }\n function wrapResize(element, autosize) {\n var percentage, outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight, wrapper = element.parent('.k-animation-container'), wrapperStyle = wrapper[0].style;\n if (wrapper.is(':hidden')) {\n wrapper.css({\n display: '',\n position: ''\n });\n }\n percentage = percentRegExp.test(wrapperStyle.width) || percentRegExp.test(wrapperStyle.height);\n if (!percentage) {\n wrapper.css({\n width: autosize ? outerWidth(element) + 1 : outerWidth(element),\n height: outerHeight(element),\n boxSizing: 'content-box',\n mozBoxSizing: 'content-box',\n webkitBoxSizing: 'content-box'\n });\n }\n }\n function deepExtend(destination) {\n var i = 1, length = arguments.length;\n for (i = 1; i < length; i++) {\n deepExtendOne(destination, arguments[i]);\n }\n return destination;\n }\n function deepExtendOne(destination, source) {\n var ObservableArray = kendo.data.ObservableArray, LazyObservableArray = kendo.data.LazyObservableArray, DataSource = kendo.data.DataSource, HierarchicalDataSource = kendo.data.HierarchicalDataSource, property, propValue, propType, propInit, destProp;\n for (property in source) {\n propValue = source[property];\n propType = typeof propValue;\n if (propType === OBJECT && propValue !== null) {\n propInit = propValue.constructor;\n } else {\n propInit = null;\n }\n if (propInit && propInit !== Array && propInit !== ObservableArray && propInit !== LazyObservableArray && propInit !== DataSource && propInit !== HierarchicalDataSource && propInit !== RegExp && (!kendo.isFunction(window.ArrayBuffer) || propInit !== ArrayBuffer)) {\n if (propValue instanceof Date) {\n destination[property] = new Date(propValue.getTime());\n } else if (isFunction(propValue.clone)) {\n destination[property] = propValue.clone();\n } else {\n destProp = destination[property];\n if (typeof destProp === OBJECT) {\n destination[property] = destProp || {};\n } else {\n destination[property] = {};\n }\n deepExtendOne(destination[property], propValue);\n }\n } else if (propType !== UNDEFINED) {\n destination[property] = propValue;\n }\n }\n return destination;\n }\n function testRx(agent, rxs, dflt) {\n for (var rx in rxs) {\n if (rxs.hasOwnProperty(rx) && rxs[rx].test(agent)) {\n return rx;\n }\n }\n return dflt !== undefined ? dflt : agent;\n }\n function toHyphens(str) {\n return str.replace(/([a-z][A-Z])/g, function (g) {\n return g.charAt(0) + '-' + g.charAt(1).toLowerCase();\n });\n }\n function toCamelCase(str) {\n return str.replace(/\\-(\\w)/g, function (strMatch, g1) {\n return g1.toUpperCase();\n });\n }\n function getComputedStyles(element, properties) {\n var styles = {}, computedStyle;\n if (document.defaultView && document.defaultView.getComputedStyle) {\n computedStyle = document.defaultView.getComputedStyle(element, '');\n if (properties) {\n $.each(properties, function (idx, value) {\n styles[value] = computedStyle.getPropertyValue(value);\n });\n }\n } else {\n computedStyle = element.currentStyle;\n if (properties) {\n $.each(properties, function (idx, value) {\n styles[value] = computedStyle[toCamelCase(value)];\n });\n }\n }\n if (!kendo.size(styles)) {\n styles = computedStyle;\n }\n return styles;\n }\n function isScrollable(element) {\n if (element && element.className && typeof element.className === 'string' && element.className.indexOf('k-auto-scrollable') > -1) {\n return true;\n }\n var overflow = getComputedStyles(element, ['overflow']).overflow;\n return overflow == 'auto' || overflow == 'scroll';\n }\n function scrollLeft(element, value) {\n var webkit = support.browser.webkit;\n var mozila = support.browser.mozilla;\n var 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 support.cssBorderSpacing = typeof docStyle.borderSpacing != 'undefined' && !(support.browser.msie && support.browser.version < 8);\n (function (browser) {\n var cssClass = '', docElement = $(document.documentElement), majorVersion = parseInt(browser.version, 10);\n if (browser.msie) {\n cssClass = 'ie';\n } else if (browser.mozilla) {\n cssClass = 'ff';\n } else if (browser.safari) {\n cssClass = 'safari';\n } else if (browser.webkit) {\n cssClass = 'webkit';\n } else if (browser.opera) {\n cssClass = 'opera';\n } else if (browser.edge) {\n cssClass = 'edge';\n }\n if (cssClass) {\n cssClass = 'k-' + cssClass + ' k-' + cssClass + majorVersion;\n }\n if (support.mobileOS) {\n cssClass += ' k-mobile';\n }\n if (!support.cssFlexbox) {\n cssClass += ' k-no-flexbox';\n }\n docElement.addClass(cssClass);\n }(support.browser));\n support.eventCapture = document.documentElement.addEventListener;\n var input = document.createElement('input');\n support.placeholder = 'placeholder' in input;\n support.propertyChangeEvent = 'onpropertychange' in input;\n support.input = function () {\n var types = [\n 'number',\n 'date',\n 'time',\n 'month',\n 'week',\n 'datetime',\n 'datetime-local'\n ];\n var length = types.length;\n var value = 'test';\n var result = {};\n var idx = 0;\n var type;\n for (; idx < length; idx++) {\n type = types[idx];\n input.setAttribute('type', type);\n input.value = value;\n result[type.replace('-', '')] = input.type !== 'text' && input.value !== value;\n }\n return result;\n }();\n input.style.cssText = 'float:left;';\n support.cssFloat = !!input.style.cssFloat;\n input = null;\n support.stableSort = function () {\n var threshold = 513;\n var sorted = [{\n index: 0,\n field: 'b'\n }];\n for (var i = 1; i < threshold; i++) {\n sorted.push({\n index: i,\n field: 'a'\n });\n }\n sorted.sort(function (a, b) {\n return a.field > b.field ? 1 : a.field < b.field ? -1 : 0;\n });\n return sorted[0].index === 1;\n }();\n support.matchesSelector = elementProto.webkitMatchesSelector || elementProto.mozMatchesSelector || elementProto.msMatchesSelector || elementProto.oMatchesSelector || elementProto.matchesSelector || elementProto.matches || function (selector) {\n var nodeList = document.querySelectorAll ? (this.parentNode || document).querySelectorAll(selector) || [] : $(selector), i = nodeList.length;\n while (i--) {\n if (nodeList[i] == this) {\n return true;\n }\n }\n return false;\n };\n support.matchMedia = 'matchMedia' in window;\n support.pushState = window.history && window.history.pushState;\n var documentMode = document.documentMode;\n support.hashChange = 'onhashchange' in window && !(support.browser.msie && (!documentMode || documentMode <= 8));\n support.customElements = 'registerElement' in window.document;\n var chrome = support.browser.chrome, mobileChrome = support.browser.crios, mozilla = support.browser.mozilla, safari = support.browser.safari;\n support.msPointers = !chrome && window.MSPointerEvent;\n support.pointers = !chrome && !mobileChrome && !mozilla && !safari && window.PointerEvent;\n support.kineticScrollNeeded = mobileOS && (support.touch || support.msPointers || support.pointers);\n }());\n function size(obj) {\n var result = 0, key;\n for (key in obj) {\n if (obj.hasOwnProperty(key) && key != 'toJSON') {\n result++;\n }\n }\n return result;\n }\n function getOffset(element, type, positioned) {\n if (!type) {\n type = 'offset';\n }\n var offset = element[type]();\n var result = {\n top: offset.top,\n right: offset.right,\n bottom: offset.bottom,\n left: offset.left\n };\n if (support.browser.msie && (support.pointers || support.msPointers) && !positioned) {\n var sign = support.isRtl(element) ? 1 : -1;\n result.top -= window.pageYOffset - document.documentElement.scrollTop;\n result.left -= window.pageXOffset + sign * document.documentElement.scrollLeft;\n }\n return result;\n }\n var directions = {\n left: { reverse: 'right' },\n right: { reverse: 'left' },\n down: { reverse: 'up' },\n up: { reverse: 'down' },\n top: { reverse: 'bottom' },\n bottom: { reverse: 'top' },\n 'in': { reverse: 'out' },\n out: { reverse: 'in' }\n };\n function parseEffects(input) {\n var effects = {};\n each(typeof input === 'string' ? input.split(' ') : input, function (idx) {\n effects[idx] = this;\n });\n return effects;\n }\n function fx(element) {\n return new kendo.effects.Element(element);\n }\n var effects = {};\n $.extend(effects, {\n enabled: true,\n Element: function (element) {\n this.element = $(element);\n },\n promise: function (element, options) {\n if (!element.is(':visible')) {\n element.css({ display: element.data('olddisplay') || 'block' }).css('display');\n }\n if (options.hide) {\n element.data('olddisplay', element.css('display')).hide();\n }\n if (options.init) {\n options.init();\n }\n if (options.completeCallback) {\n options.completeCallback(element);\n }\n element.dequeue();\n },\n disable: function () {\n this.enabled = false;\n this.promise = this.promiseShim;\n },\n enable: function () {\n this.enabled = true;\n this.promise = this.animatedPromise;\n }\n });\n effects.promiseShim = effects.promise;\n function prepareAnimationOptions(options, duration, reverse, complete) {\n if (typeof options === STRING) {\n if (isFunction(duration)) {\n complete = duration;\n duration = 400;\n reverse = false;\n }\n if (isFunction(reverse)) {\n complete = reverse;\n reverse = false;\n }\n if (typeof duration === BOOLEAN) {\n reverse = duration;\n duration = 400;\n }\n options = {\n effects: options,\n duration: duration,\n reverse: reverse,\n complete: complete\n };\n }\n return extend({\n effects: {},\n duration: 400,\n reverse: false,\n init: noop,\n teardown: noop,\n hide: false\n }, options, {\n completeCallback: options.complete,\n complete: noop\n });\n }\n function animate(element, options, duration, reverse, complete) {\n var idx = 0, length = element.length, instance;\n for (; idx < length; idx++) {\n instance = $(element[idx]);\n instance.queue(function () {\n effects.promise(instance, prepareAnimationOptions(options, duration, reverse, complete));\n });\n }\n return element;\n }\n function toggleClass(element, classes, options, add) {\n if (classes) {\n classes = classes.split(' ');\n each(classes, function (idx, value) {\n element.toggleClass(value, add);\n });\n }\n return element;\n }\n if (!('kendoAnimate' in $.fn)) {\n extend($.fn, {\n kendoStop: function (clearQueue, gotoEnd) {\n return this.stop(clearQueue, gotoEnd);\n },\n kendoAnimate: function (options, duration, reverse, complete) {\n return animate(this, options, duration, reverse, complete);\n },\n kendoAddClass: function (classes, options) {\n return kendo.toggleClass(this, classes, options, true);\n },\n kendoRemoveClass: function (classes, options) {\n return kendo.toggleClass(this, classes, options, false);\n },\n kendoToggleClass: function (classes, options, toggle) {\n return kendo.toggleClass(this, classes, options, toggle);\n }\n });\n }\n var ampRegExp = /&/g, ltRegExp = //g;\n function htmlEncode(value) {\n return ('' + value).replace(ampRegExp, '&').replace(ltRegExp, '<').replace(gtRegExp, '>').replace(quoteRegExp, '"').replace(aposRegExp, ''');\n }\n function unescape(value) {\n var template;\n try {\n template = window.decodeURIComponent(value);\n } catch (error) {\n template = value.replace(/%u([\\dA-F]{4})|%([\\dA-F]{2})/gi, function (_, m1, m2) {\n return String.fromCharCode(parseInt('0x' + (m1 || m2), 16));\n });\n }\n return template;\n }\n var eventTarget = function (e) {\n return e.target;\n };\n if (support.touch) {\n eventTarget = function (e) {\n var touches = 'originalEvent' in e ? e.originalEvent.changedTouches : 'changedTouches' in e ? e.changedTouches : null;\n return touches ? document.elementFromPoint(touches[0].clientX, touches[0].clientY) : e.target;\n };\n each([\n 'swipe',\n 'swipeLeft',\n 'swipeRight',\n 'swipeUp',\n 'swipeDown',\n 'doubleTap',\n 'tap'\n ], function (m, value) {\n $.fn[value] = function (callback) {\n return this.bind(value, callback);\n };\n });\n }\n if (support.touch) {\n if (!support.mobileOS) {\n support.mousedown = 'mousedown touchstart';\n support.mouseup = 'mouseup touchend';\n support.mousemove = 'mousemove touchmove';\n support.mousecancel = 'mouseleave touchcancel';\n support.click = 'click';\n support.resize = 'resize';\n } else {\n support.mousedown = 'touchstart';\n support.mouseup = 'touchend';\n support.mousemove = 'touchmove';\n support.mousecancel = 'touchcancel';\n support.click = 'touchend';\n support.resize = 'orientationchange';\n }\n } else if (support.pointers) {\n support.mousemove = 'pointermove';\n support.mousedown = 'pointerdown';\n support.mouseup = 'pointerup';\n support.mousecancel = 'pointercancel';\n support.click = 'pointerup';\n support.resize = 'orientationchange resize';\n } else if (support.msPointers) {\n support.mousemove = 'MSPointerMove';\n support.mousedown = 'MSPointerDown';\n support.mouseup = 'MSPointerUp';\n support.mousecancel = 'MSPointerCancel';\n support.click = 'MSPointerUp';\n support.resize = 'orientationchange resize';\n } else {\n support.mousemove = 'mousemove';\n support.mousedown = 'mousedown';\n support.mouseup = 'mouseup';\n support.mousecancel = 'mouseleave';\n support.click = 'click';\n support.resize = 'resize';\n }\n var wrapExpression = function (members, paramName) {\n var result = paramName || 'd', index, idx, length, member, count = 1;\n for (idx = 0, length = members.length; idx < length; idx++) {\n member = members[idx];\n if (member !== '') {\n index = member.indexOf('[');\n if (index !== 0) {\n if (index == -1) {\n member = '.' + member;\n } else {\n count++;\n member = '.' + member.substring(0, index) + ' || {})' + member.substring(index);\n }\n }\n count++;\n result += member + (idx < length - 1 ? ' || {})' : ')');\n }\n }\n return new Array(count).join('(') + result;\n }, localUrlRe = /^([a-z]+:)?\\/\\//i;\n extend(kendo, {\n widgets: [],\n _widgetRegisteredCallbacks: [],\n ui: kendo.ui || {},\n fx: kendo.fx || fx,\n effects: kendo.effects || effects,\n mobile: kendo.mobile || {},\n data: kendo.data || {},\n dataviz: kendo.dataviz || {},\n drawing: kendo.drawing || {},\n spreadsheet: { messages: {} },\n keys: {\n INSERT: 45,\n DELETE: 46,\n BACKSPACE: 8,\n TAB: 9,\n ENTER: 13,\n ESC: 27,\n LEFT: 37,\n UP: 38,\n RIGHT: 39,\n DOWN: 40,\n END: 35,\n HOME: 36,\n SPACEBAR: 32,\n PAGEUP: 33,\n PAGEDOWN: 34,\n F2: 113,\n F10: 121,\n F12: 123,\n NUMPAD_PLUS: 107,\n NUMPAD_MINUS: 109,\n NUMPAD_DOT: 110\n },\n support: kendo.support || support,\n animate: kendo.animate || animate,\n ns: '',\n attr: function (value) {\n return 'data-' + kendo.ns + value;\n },\n getShadows: getShadows,\n wrap: wrap,\n deepExtend: deepExtend,\n getComputedStyles: getComputedStyles,\n isScrollable: isScrollable,\n scrollLeft: scrollLeft,\n size: size,\n toCamelCase: toCamelCase,\n toHyphens: toHyphens,\n getOffset: kendo.getOffset || getOffset,\n parseEffects: kendo.parseEffects || parseEffects,\n toggleClass: kendo.toggleClass || toggleClass,\n directions: kendo.directions || directions,\n Observable: Observable,\n Class: Class,\n Template: Template,\n template: proxy(Template.compile, Template),\n render: proxy(Template.render, Template),\n stringify: proxy(JSON.stringify, JSON),\n eventTarget: eventTarget,\n htmlEncode: htmlEncode,\n unescape: unescape,\n isLocalUrl: function (url) {\n return url && !localUrlRe.test(url);\n },\n expr: function (expression, safe, paramName) {\n expression = expression || '';\n if (typeof safe == STRING) {\n paramName = safe;\n safe = false;\n }\n paramName = paramName || 'd';\n if (expression && expression.charAt(0) !== '[') {\n expression = '.' + expression;\n }\n if (safe) {\n expression = expression.replace(/\"([^.]*)\\.([^\"]*)\"/g, '\"$1_$DOT$_$2\"');\n expression = expression.replace(/'([^.]*)\\.([^']*)'/g, '\\'$1_$DOT$_$2\\'');\n expression = wrapExpression(expression.split('.'), paramName);\n expression = expression.replace(/_\\$DOT\\$_/g, '.');\n } else {\n expression = paramName + expression;\n }\n return expression;\n },\n getter: function (expression, safe) {\n var key = expression + safe;\n return getterCache[key] = getterCache[key] || new Function('d', 'return ' + kendo.expr(expression, safe));\n },\n setter: function (expression) {\n return setterCache[expression] = setterCache[expression] || new Function('d,value', kendo.expr(expression) + '=value');\n },\n accessor: function (expression) {\n return {\n get: kendo.getter(expression),\n set: kendo.setter(expression)\n };\n },\n guid: function () {\n var id = '', i, random;\n for (i = 0; i < 32; i++) {\n random = math.random() * 16 | 0;\n if (i == 8 || i == 12 || i == 16 || i == 20) {\n id += '-';\n }\n id += (i == 12 ? 4 : i == 16 ? random & 3 | 8 : random).toString(16);\n }\n return id;\n },\n roleSelector: function (role) {\n return role.replace(/(\\S+)/g, '[' + kendo.attr('role') + '=$1],').slice(0, -1);\n },\n directiveSelector: function (directives) {\n var selectors = directives.split(' ');\n if (selectors) {\n for (var i = 0; i < selectors.length; i++) {\n if (selectors[i] != 'view') {\n selectors[i] = selectors[i].replace(/(\\w*)(view|bar|strip|over)$/, '$1-$2');\n }\n }\n }\n return selectors.join(' ').replace(/(\\S+)/g, 'kendo-mobile-$1,').slice(0, -1);\n },\n triggeredByInput: function (e) {\n return /^(label|input|textarea|select)$/i.test(e.target.tagName);\n },\n onWidgetRegistered: function (callback) {\n for (var i = 0, len = kendo.widgets.length; i < len; i++) {\n callback(kendo.widgets[i]);\n }\n kendo._widgetRegisteredCallbacks.push(callback);\n },\n logToConsole: function (message, type) {\n var console = window.console;\n if (!kendo.suppressLog && typeof console != 'undefined' && console.log) {\n console[type || 'log'](message);\n }\n }\n });\n var Widget = Observable.extend({\n init: function (element, options) {\n var that = this;\n that.element = kendo.jQuery(element).handler(that);\n that.angular('init', options);\n Observable.fn.init.call(that);\n var dataSource = options ? options.dataSource : null;\n 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 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.$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 this.trigger(CHANGE, {\n action: 'remove',\n index: index,\n items: result\n });\n for (i = 0, len = result.length; i < len; i++) {\n if (result[i] && result[i].children) {\n result[i].unbind(CHANGE);\n }\n }\n }\n if (item) {\n this.trigger(CHANGE, {\n action: 'add',\n index: index,\n items: items\n });\n }\n return result;\n },\n shift: function () {\n var length = this.length, result = shift.apply(this);\n if (length) {\n this.trigger(CHANGE, {\n action: 'remove',\n index: 0,\n items: [result]\n });\n }\n return result;\n },\n unshift: function () {\n var items = this.wrapAll(arguments), result;\n result = unshift.apply(this, items);\n this.trigger(CHANGE, {\n action: 'add',\n index: 0,\n items: items\n });\n return result;\n },\n indexOf: function (item) {\n var that = this, idx, length;\n for (idx = 0, length = that.length; idx < length; idx++) {\n if (that[idx] === item) {\n return idx;\n }\n }\n return -1;\n },\n forEach: function (callback, thisArg) {\n var idx = 0;\n var length = this.length;\n var context = thisArg || window;\n for (; idx < length; idx++) {\n callback.call(context, this[idx], idx, this);\n }\n },\n map: function (callback, thisArg) {\n var idx = 0;\n var result = [];\n var length = this.length;\n var context = thisArg || window;\n for (; idx < length; idx++) {\n result[idx] = callback.call(context, this[idx], idx, this);\n }\n return result;\n },\n reduce: function (callback) {\n var idx = 0, result, length = this.length;\n if (arguments.length == 2) {\n result = arguments[1];\n } else if (idx < length) {\n result = this[idx++];\n }\n for (; idx < length; idx++) {\n result = callback(result, this[idx], idx, this);\n }\n return result;\n },\n reduceRight: function (callback) {\n var idx = this.length - 1, result;\n if (arguments.length == 2) {\n result = arguments[1];\n } else if (idx > 0) {\n result = this[idx--];\n }\n for (; idx >= 0; idx--) {\n result = callback(result, this[idx], idx, this);\n }\n return result;\n },\n filter: function (callback, thisArg) {\n var idx = 0;\n var result = [];\n var item;\n var length = this.length;\n var context = thisArg || window;\n for (; idx < length; idx++) {\n item = this[idx];\n if (callback.call(context, item, idx, this)) {\n result[result.length] = item;\n }\n }\n return result;\n },\n find: function (callback, thisArg) {\n var idx = 0;\n var item;\n var length = this.length;\n var context = thisArg || window;\n for (; idx < length; idx++) {\n item = this[idx];\n if (callback.call(context, item, idx, this)) {\n return item;\n }\n }\n },\n every: function (callback, thisArg) {\n var idx = 0;\n var item;\n var length = this.length;\n var context = thisArg || window;\n for (; idx < length; idx++) {\n item = this[idx];\n if (!callback.call(context, item, idx, this)) {\n return false;\n }\n }\n return true;\n },\n some: function (callback, thisArg) {\n var idx = 0;\n var item;\n var length = this.length;\n var context = thisArg || window;\n for (; idx < length; idx++) {\n item = this[idx];\n if (callback.call(context, item, idx, this)) {\n return true;\n }\n }\n return false;\n },\n remove: function (item) {\n var idx = this.indexOf(item);\n if (idx !== -1) {\n this.splice(idx, 1);\n }\n },\n empty: function () {\n this.splice(0, this.length);\n }\n });\n if (typeof Symbol !== 'undefined' && Symbol.iterator && !ObservableArray.prototype[Symbol.iterator]) {\n ObservableArray.prototype[Symbol.iterator] = [][Symbol.iterator];\n }\n var LazyObservableArray = ObservableArray.extend({\n init: function (data, type, events) {\n Observable.fn.init.call(this);\n this.type = type || ObservableObject;\n if (events) {\n this._events = events;\n }\n for (var idx = 0; idx < data.length; idx++) {\n this[idx] = data[idx];\n }\n this.length = idx;\n this._parent = proxy(function () {\n return this;\n }, this);\n },\n at: function (index) {\n var item = this[index];\n if (!(item instanceof this.type)) {\n item = this[index] = this.wrap(item, this._parent);\n } else {\n item.parent = this._parent;\n }\n return item;\n }\n });\n function eventHandler(context, type, field, prefix) {\n return function (e) {\n var event = {}, key;\n for (key in e) {\n event[key] = e[key];\n }\n if (prefix) {\n event.field = field + '.' + e.field;\n } else {\n event.field = field;\n }\n if (type == CHANGE && context._notifyChange) {\n context._notifyChange(event);\n }\n context.trigger(type, event);\n };\n }\n 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);\n if (skip !== undefined && take !== undefined) {\n query = new Query(flatGroups(query.toArray())).range(skip, take);\n groupDescriptorsWithoutSort = map(groupDescriptorsWithoutCompare, function (groupDescriptor) {\n return extend({}, groupDescriptor, { skipItemSorting: true });\n });\n query = query.group(groupDescriptorsWithoutSort, data);\n }\n } else {\n if (skip !== undefined && take !== undefined) {\n query = query.range(skip, take);\n }\n if (group) {\n query = query.group(group, data, 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) {\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 hasNotRequestedItems;\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 (group.hasSubgroups && !group.subgroupCount) {\n that.getGroupSubGroupCount(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 hasNotRequestedItems = !group.items || group.items.length - itemsToSkip < options.take - options.taken;\n if (!that._hasExpandedSubGroups(group) && itemsToSkip > groupCount) {\n options.skipped += groupCount;\n continue;\n }\n if (group.hasSubgroups && (!group.items || hasNotRequestedItems && group.items.length < group.subgroupCount) || !group.hasSubgroups && (!group.items || hasNotRequestedItems && group.items.length < group.itemCount)) {\n that.getGroupItems(group, options, parents, callback);\n that._fetchingGroupItems = true;\n return;\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 }\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 getGroupItems: function (group, options, parents, callback) {\n var that = this;\n var skip;\n var take;\n var filter;\n var data;\n var subgroups;\n if (!group.items) {\n group.items = [];\n }\n skip = group.items.length;\n take = that.take();\n filter = this._composeItemsFilter(group, parents);\n data = {\n page: math.floor((skip || 0) / (take || 1)) || 1,\n pageSize: take,\n skip: skip,\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),\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 getGroupSubGroupCount: function (group, options, parents, callback) {\n var that = this;\n var filter;\n var groupIndex;\n var data;\n if (!group.items) {\n group.items = [];\n }\n filter = this._composeItemsFilter(group, parents);\n groupIndex = this._group.map(function (g) {\n return g.field;\n }).indexOf(group.field);\n data = {\n filter: filter,\n group: [that._group[groupIndex + 1]],\n groupPaging: true,\n includeSubGroupCount: 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._subGroupCountSuccessHandler(group, options.skip, that.take(), 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 },\n _subGroupCountSuccessHandler: function (group, skip, take, callback) {\n var that = this;\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 that._dequeueRequest();\n that.trigger(REQUESTEND, {\n response: data,\n type: 'read'\n });\n that._fetchingGroupItems = false;\n if (isFunction(totalField)) {\n group.subgroupCount = totalField(data);\n } else {\n group.subgroupCount = data[totalField];\n }\n that.range(skip, take, callback, 'expandGroup');\n };\n },\n _groupItemsSuccessHandler: function (group, skip, take, callback) {\n var that = this;\n var timestamp = that._timeStamp();\n callback = isFunction(callback) ? callback : noop;\n return function (data) {\n var temp;\n var model = Model.define(that.options.schema.model);\n that._dequeueRequest();\n that.trigger(REQUESTEND, {\n response: data,\n type: 'read'\n });\n data = that.reader.parse(data);\n if (group.hasSubgroups) {\n temp = that.reader.groups(data);\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 < temp.length; i++) {\n group.items.push(temp[i]);\n }\n group.items.omitChangeEvent = false;\n that._updateRangePristineData(group);\n that._fetchingGroupItems = false;\n that._serverGroupsTotal += temp.length;\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 for (var i = 0; i < rangesLength; i++) {\n range = ranges[i];\n dataLength = range.data.length;\n indexes = [];\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 temp = temp[indexes.splice(0, 1)[0]].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 checkbox = input.filter('[type=checkbox]').length && !input.is(':checked'), value = input.val();\n return !(hasAttribute(input, 'required') && (!value || value === '' || value.length === 0 || checkbox));\n },\n pattern: function (input) {\n if (input.filter('[type=text],[type=email],[type=url],[type=tel],[type=search],[type=password]').filter('[pattern]').length && input.val() !== '') {\n return patternMatcher(input.val(), input.attr('pattern'));\n }\n return true;\n },\n min: function (input) {\n if (input.filter(NUMBERINPUTSELECTOR + ',[' + kendo.attr('type') + '=number]').filter('[min]').length && input.val() !== '') {\n var min = parseFloat(input.attr('min')) || 0, val = kendo.parseFloat(input.val());\n return min <= val;\n }\n return true;\n },\n max: function (input) {\n if (input.filter(NUMBERINPUTSELECTOR + ',[' + kendo.attr('type') + '=number]').filter('[max]').length && input.val() !== '') {\n var max = parseFloat(input.attr('max')) || 0, val = kendo.parseFloat(input.val());\n return max >= val;\n }\n return true;\n },\n step: function (input) {\n if (input.filter(NUMBERINPUTSELECTOR + ',[' + kendo.attr('type') + '=number]').filter('[step]').length && input.val() !== '') {\n var min = parseFloat(input.attr('min')) || 0, step = parseFloat(input.attr('step')) || 1, val = parseFloat(input.val()), decimals = numberOfDecimalDigits(step), raise;\n if (decimals) {\n raise = Math.pow(10, decimals);\n return Math.floor((val - min) * raise) % (step * raise) / Math.pow(100, decimals) === 0;\n }\n return (val - min) % step === 0;\n }\n return true;\n },\n email: function (input) {\n return matcher(input, '[type=email],[' + kendo.attr('type') + '=email]', emailRegExp);\n },\n url: function (input) {\n return matcher(input, '[type=url],[' + kendo.attr('type') + '=url]', urlRegExp);\n },\n date: function (input) {\n if (input.filter('[type^=date],[' + kendo.attr('type') + '=date]').length && input.val() !== '') {\n return kendo.parseDate(input.val(), input.attr(kendo.attr('format'))) !== null;\n }\n return true;\n }\n },\n validateOnBlur: true,\n validationSummary: false\n },\n _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 && 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 sorted.push(input.attr(NAME));\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}));"]}