{"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","Date","getTime","isFunction","clone","UNDEFINED","testRx","agent","rxs","dflt","rx","hasOwnProperty","toHyphens","str","g","toLowerCase","toCamelCase","strMatch","g1","toUpperCase","getComputedStyles","properties","computedStyle","styles","document","defaultView","getComputedStyle","each","idx","value","getPropertyValue","currentStyle","size","isScrollable","className","indexOf","overflow","scrollLeft","isRtl","webkit","mozila","mozilla","el","scrollWidth","clientWidth","Math","abs","obj","key","result","getOffset","type","positioned","offset","sign","top","pointers","msPointers","pageYOffset","documentElement","scrollTop","pageXOffset","parseEffects","input","effects","this","fx","Element","prepareAnimationOptions","options","duration","reverse","complete","STRING","BOOLEAN","extend","init","noop","teardown","hide","completeCallback","animate","instance","queue","promise","toggleClass","classes","add","htmlEncode","ampRegExp","ltRegExp","gtRegExp","quoteRegExp","aposRegExp","parseOption","option","dashRegExp","getAttribute","ns","numberRegExp","parseFloat","jsonRegExp","jsonFormatRegExp","Function","parseOptions","role","templateRegExp","template","html","containmentComparer","a","b","contains","resizableWidget","widget","inArray","attr","focusable","isTabIndexNotNaN","nodeName","disabled","href","visible","expr","pseudos","parents","addBack","filter","kendoJQuery","selector","context","fn","Template","preventDefault","isDefaultPrevented","Observable","argumentNameRegExp","encodeRegExp","escapedCurlyRegExp","curlyRegExp","escapedSharpRegExp","sharpRegExp","directions","eventTarget","wrapExpression","localUrlRe","Widget","DataBoundWidget","ContainerNullObject","MobileWidget","MOUSE_EVENTS","EXCLUDE_BUST_CLICK_SELECTOR","MouseEventNormalizer","eventMap","getEventMap","eventRegEx","on","rootjQuery","animationFrame","animationQueue","cultures","isArray","proxy","JSON","formatRegExp","FUNCTION","NUMBER","NULL","getterCache","setterCache","slice","noDepricateExtend","src","copyIsArray","copy","name","target","deep","jQuery","isPlainObject","proto","member","base","that","subclass","apply","prototype","Object","_initOptions","_defaultPrevented","_events","bind","eventName","handlers","one","original","handler","events","eventNames","handlersIsFunction","unbind","push","unshift","trigger","e","sender","call","splice","paramName","useWithBlock","render","compile","parts","settings","argumentName","functionBody","_slotCount","Error","format","quote","string","escapable","lastIndex","c","meta","charCodeAt","toString","holder","k","v","partial","mind","gap","toJSON","rep","isFinite","String","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","parseInt","_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","_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","safari","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","MSPointerEvent","PointerEvent","kineticScrollNeeded","down","up","in","out","enabled","dequeue","disable","promiseShim","enable","animatedPromise","kendoStop","clearQueue","gotoEnd","stop","kendoAnimate","kendoAddClass","kendoRemoveClass","kendoToggleClass","toggle","touches","originalEvent","changedTouches","elementFromPoint","clientX","clientY","callback","mousedown","mouseup","mousemove","mousecancel","click","resize","members","widgets","_widgetRegisteredCallbacks","ui","mobile","dataviz","drawing","spreadsheet","messages","keys","INSERT","DELETE","BACKSPACE","TAB","ENTER","ESC","LEFT","UP","RIGHT","DOWN","END","HOME","SPACEBAR","PAGEUP","PAGEDOWN","F2","F10","F12","NUMPAD_PLUS","NUMPAD_MINUS","NUMPAD_DOT","isLocalUrl","url","expression","safe","getter","setter","accessor","get","set","guid","random","id","roleSelector","directiveSelector","directives","selectors","triggeredByInput","tagName","onWidgetRegistered","len","logToConsole","message","console","suppressLog","log","dataSource","angular","_hasBindingTarget","kendoBindingTarget","_tabindex","TABINDEX","tabindex","removeAttr","setOptions","_setEvents","force","getSize","currentSize","_size","_resize","dimensions","setSize","destroy","removeData","_destroy","_muteAngularRebind","_muteRebind","dataItems","flatView","_angularItems","cmd","elements","items","dataItem","domElement","offsetHeight","notify","initWidget","roles","fullPath","widgetKeyRegExp","widgetKey","nodeType","isEmptyObject","rolesFromNamespaces","namespaces","find","widgetsArray","makeArray","widgetInstance","progress","container","leftRight","webkitCorrection","containerScrollLeft","mask","opacity","loading","prependTo","remove","plugin","register","widgetEntry","args","method","nullObject","autoApplyNS","kendoDestroy","view","viewElement","viewHasNativeScrolling","useNativeScrolling","eq","appLevelNativeScrolling","application","themes","views","touchScroller","useNative","Scroller","kendoMobileScroller","suites","editorToolbar","onResize","setTimeout","unbindResize","off","attrValue","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","kendoFocusable","setupMouseMute","mouseTrap","bustClick","captureMouse","stopPropagation","muteMouse","clearTimeout","mouseTrapTimeoutID","unMuteMouse","move","cancel","MSPointerEnter","MSPointerLeave","orig","fix","special","delegateType","bindType","handle","ret","related","relatedTarget","handleObj","origType","applyEventMap","pop","search","touchstart","touchend","ruleToDate","rule","targetDay","ourDay","time","cache","getUTCDay","setUTCDate","findRule","utcTime","rules","zone","grep","from","to","findZone","zones","until","zoneRules","zoneAndRule","info","fromOffset","toOffset","diff","fromLocalOffset","toLocalOffset","tempToOffset","toLocalDate","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec","Sun","Mon","Tue","Wed","Thu","Fri","Sat","setDayOfWeek","dir","setDate","dayOfWeek","firstDayOfMonth","lastDayOfMonth","last","timeOffset","moveDateToWeekStart","weekStartDay","addDays","calcWeekInYear","firstWeekInYear","newDate","diffInMS","MS_PER_DAY","weekInYear","prevWeekDate","nextWeekDate","weekNumber","toUtcTime","toInvariantTime","isInTimeRange","msValue","msMin","msMax","isInDateRange","setTime","ignoreDST","difference","MS_PER_MINUTE","today","isToday","staticDate","nextDay","previousDay","MS_PER_HOUR","stripWhitespace","iterator","child","createNodeIterator","NodeFilter","SHOW_TEXT","node","FILTER_ACCEPT","FILTER_REJECT","nextNode","referenceNode","textContent","trim","childNodes","nodeValue","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","queueAnimation","runNextAnimation","parseQueryStringParams","queryString","params","paramParts","decodeURIComponent","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","matchesMedia","mediaQuery","media","_bootstrapToMedia","bootstrapMedia","xs","sm","md","lg","xl","postToProxy","dataURI","fileName","proxyURL","proxyTarget","action","contentType","base64","appendTo","submit","saveAsBlob","blob","atob","Uint8Array","Blob","buffer","msSaveBlob","saveAsDataURI","URL","createObjectURL","fileSaver","download","createEvent","initMouseEvent","dispatchEvent","revokeObjectURL","downloadAttribute","saveAs","save","forceProxy","proxyModelSetters","observable","forEach","defineProperty","dirty","amd","a1","a2","a3","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","taskKeys","retainPosition","restore","run","jdx","childrenLength","effectName","deferred","Deferred","done","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","pow","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","batchURL","batch","headers","Content-Type","updated","destroyed","created","parseBatchResponse","responseText","changeBody","status","code","marker","jsonModel","responseMarkers","markerIndex","collections","models","passed","parse","neq","gt","gte","lt","lte","doesnotcontain","endswith","startswith","isnull","isnotnull","isnullorempty","isnotnullorempty","isempty","isnotempty","mappers","pageSize","page","useVersionFour","$filter","orderby","order","$orderby","skip","$skip","take","$top","defaultDataType","read","dataType","schemas","odata","results","total","transports","jsonp","update","create","parameterMap","$inlinecount","$format","odata-v4","$count","ajax","success","response","responses","error","XmlDataReader","idField","xmlParse","model","errors","serialize","modelBase","Model","fields","xpathToMember","modelInstance","evaluate","record","_parse","xml","parseDOM","parsedNode","attribute","attributes","attributeCount","firstChild","nextSibling","intermediateResult","tree","parseXML","raw","readers","eventHandler","CHANGE","_notifyChange","equal","xtype","ytype","getFieldByName","fieldName","Query","normalizeSort","descriptor","descriptors","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","groups","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","json","object","howMany","thisArg","reduce","reduceRight","every","some","Symbol","_parent","_handlers","shouldSerialize","_set","paths","path","composite","isSetPrevented","change","isObservableArray","isDataSource","boolean","default","defaults","_initializers","dirtyFields","editable","initiator","accept","isNew","functionFields","nullable","defaultValue","localeCompare","combine","comparers","asc","valueA","valueB","__position","desc","textOp","impl","ignore","accentFoldingFiltering","toLocaleLowerCase","op","getMatchRegexp","esc","doesnotstartwith","n","doesnotendwith","doesnotmatch","filterExpr","and","or","fieldFunctions","operatorFunctions","==","equals","isequalto","equalto","!=","ne","notequals","isnotequalto","notequalto","notequal","<","islessthan","lessthan","less","<=","le","islessthanorequalto","lessthanequal",">","isgreaterthan","greaterthan","greater",">=","isgreaterthanorequalto","greaterthanequal","ge","notsubstringof","toArray","range","inPlace","orderBy","orderByDescending","compiled","predicate","allData","groupBy","groupValue","_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","_filter","_group","_aggregate","_total","_shouldDetachObservableParents","pushCreate","_pushCreate","pushUpdate","_pushUpdate","pushDestroy","_pushDestroy","offlineStorage","_storage","getItem","localStorage","setItem","reader","_detachObservableParents","_observe","_online","serverSorting","serverPaging","serverFiltering","serverAggregates","inPlaceSort","online","sync","offlineData","_isServerGrouped","_push","_readData","_flatData","useRanges","getByUid","_getByUid","_storeData","_addRange","_process","_observeView","insert","_createNewModel","_wrapInEmptyGroup","_insertModelInRange","pushInsert","pushed","autoSync","pristine","rangeSpan","_getCurrentRangeSpan","pristineData","_updatePristineForModel","_removeItems","removePristine","shouldRemovePristine","found","_eachItem","_removePristineForModel","hasGroups","_removeModelFromRanges","promises","_sendSubmit","_send","when","then","_accept","_syncEnd","_change","cancelChanges","_cancelModel","_changesCanceled","_markOfflineUpdatesAsDirty","__state__","hasChanges","serverGroup","_handleCustomErrors","_executeOnPristineForModel","_eachPristineItem","_pristineForModel","_modelCanceled","_submit","reject","_promise","converted","_params","_queueRequest","isPrevented","_dequeueRequest","_readAggregates","replaceSubset","itemIds","j","_aggregateResult","_skip","endless","_changeHandler","updatePristine","timestamp","_timeStamp","_sortRanges","xhr","errorThrown","_requestInProgress","_pending","_shouldWrap","arrayType","_updateTotalForAction","_calculateAggregates","_take","currentRangeStart","_clearEmptyGroups","_queryProcess","dataToAggregate","_setFilterTotal","_mergeState","_currentRangeStart","moreItemsCount","remote","filterTotal","setDefaultValue","fetch","_query","next","totalPages","prev","_pageableQueryOptions","_emptyAggregates","ceil","inRange","_findRange","lastRange","firstItemUid","enableRequestsInProgress","_skipRequestsInProgress","_currentRequestTimeStamp","pageSkip","_processRangeData","_rangeExists","prefetch","skipIdx","takeIdx","startIndex","endIndex","rangeData","rangeEnd","processed","flatData","_mergeGroups","prevGroup","paging","sorting","filtering","_prefetchSuccessHandler","_timeout","_multiplePrefetch","_removeModelFromRange","_updateRangesLength","rangesLength","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","fail","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","removeAttribute","destroyWidgets","unbindElementChildren","namespace","TypedBinder","arraySplice","binders","VALUE","SOURCE","EVENTS","CHECKED","CSS","dependencies","_access","dependency","currentSource","parsedValue","_parseValue","readonly","dataFormat","invisible","_initChange","cloneNode","reference","insertBefore","checked","selectedIndex","selected","valueIndex","sourceValue","optionIndex","optionValue","check","_range","_valueIsObservableObject","_valueIsObservableArray","_source","valueLength","sourceItem","dataTextField","isObservableObject","cascadeFrom","listView","bound","_preselect","newLength","old","same","removeIndex","newValue","oldValues","selectedNode","nonPrimitiveValues","_isMultipleSelection","_getAllChecked","newValues","selectedValue","gantt","_isBound","scheduler","grid","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","Validator","NS","INVALIDMSG","INVALIDINPUT","VALIDINPUT","emailRegExp","urlRegExp","INPUTSELECTOR","CHECKBOXSELECTOR","NUMBERINPUTSELECTOR","BLUR","NAME","FORM","NOVALIDATE","VALIDATE","VALIDATE_INPUT","patternMatcher","matcher","hasAttribute","validateAttributeSelector","_errorTemplate","errorTemplate","_inputSelector","_checkboxSelector","_errors","_attachEvents","_isValidated","required","email","dateCompare","checkbox","raise","validateOnBlur","validate","stopImmediatePropagation","_checkElement","validateInput","inputs","invalid","isValid","valid","lbl","messageText","wasValid","messageLabel","lblId","inputWrap","_checkValidity","_findMessageContainer","_extractMessage","_decorateMessageContainer","replaceWith","insertAfter","_inputWrapper","hideMessages","locators","messageLocators","getElementsByTagName","locate","decorate","ruleKey","nonDefaultMessage","customMessage","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","_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","_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","link","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","badge","badgeElement","button","iconSpan","span","image","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","itemCount","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","eventData","_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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","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 = '2019.2.514'.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) {\n if (propValue instanceof Date) {\n destination[property] = new Date(propValue.getTime());\n } else if (isFunction(propValue.clone)) {\n destination[property] = propValue.clone();\n } else {\n destProp = destination[property];\n if (typeof destProp === OBJECT) {\n destination[property] = destProp || {};\n } else {\n destination[property] = {};\n }\n deepExtendOne(destination[property], propValue);\n }\n } else if (propType !== UNDEFINED) {\n destination[property] = propValue;\n }\n }\n return destination;\n }\n function testRx(agent, rxs, dflt) {\n for (var rx in rxs) {\n if (rxs.hasOwnProperty(rx) && rxs[rx].test(agent)) {\n return rx;\n }\n }\n return dflt !== undefined ? dflt : agent;\n }\n function toHyphens(str) {\n return str.replace(/([a-z][A-Z])/g, function (g) {\n return g.charAt(0) + '-' + g.charAt(1).toLowerCase();\n });\n }\n function toCamelCase(str) {\n return str.replace(/\\-(\\w)/g, function (strMatch, g1) {\n return g1.toUpperCase();\n });\n }\n function getComputedStyles(element, properties) {\n var styles = {}, computedStyle;\n if (document.defaultView && document.defaultView.getComputedStyle) {\n computedStyle = document.defaultView.getComputedStyle(element, '');\n if (properties) {\n $.each(properties, function (idx, value) {\n styles[value] = computedStyle.getPropertyValue(value);\n });\n }\n } else {\n computedStyle = element.currentStyle;\n if (properties) {\n $.each(properties, function (idx, value) {\n styles[value] = computedStyle[toCamelCase(value)];\n });\n }\n }\n if (!kendo.size(styles)) {\n styles = computedStyle;\n }\n return styles;\n }\n function isScrollable(element) {\n if (element && element.className && typeof element.className === 'string' && element.className.indexOf('k-auto-scrollable') > -1) {\n return true;\n }\n var overflow = getComputedStyles(element, ['overflow']).overflow;\n return overflow == 'auto' || overflow == 'scroll';\n }\n function scrollLeft(element, value) {\n var webkit = support.browser.webkit;\n var mozila = support.browser.mozilla;\n var el = element instanceof $ ? element[0] : element;\n var isRtl;\n if (!element) {\n return;\n }\n isRtl = support.isRtl(element);\n if (value !== undefined) {\n if (isRtl && webkit) {\n el.scrollLeft = el.scrollWidth - el.clientWidth - value;\n } else if (isRtl && mozila) {\n el.scrollLeft = -value;\n } else {\n el.scrollLeft = value;\n }\n } else {\n if (isRtl && webkit) {\n return el.scrollWidth - el.clientWidth - el.scrollLeft;\n } else {\n return Math.abs(el.scrollLeft);\n }\n }\n }\n (function () {\n support._scrollbar = undefined;\n support.scrollbar = function (refresh) {\n if (!isNaN(support._scrollbar) && !refresh) {\n return support._scrollbar;\n } else {\n var div = document.createElement('div'), result;\n div.style.cssText = 'overflow:scroll;overflow-x:hidden;zoom:1;clear:both;display:block';\n div.innerHTML = ' ';\n document.body.appendChild(div);\n support._scrollbar = result = div.offsetWidth - div.scrollWidth;\n document.body.removeChild(div);\n return result;\n }\n };\n support.isRtl = function (element) {\n return $(element).closest('.k-rtl').length > 0;\n };\n var table = document.createElement('table');\n try {\n table.innerHTML = '';\n support.tbodyInnerHtml = true;\n } catch (e) {\n support.tbodyInnerHtml = false;\n }\n support.touch = 'ontouchstart' in window;\n var docStyle = document.documentElement.style;\n var transitions = support.transitions = false, transforms = support.transforms = false, elementProto = 'HTMLElement' in window ? HTMLElement.prototype : [];\n support.hasHW3D = 'WebKitCSSMatrix' in window && 'm11' in new window.WebKitCSSMatrix() || 'MozPerspective' in docStyle || 'msPerspective' in docStyle;\n support.cssFlexbox = 'flexWrap' in docStyle || 'WebkitFlexWrap' in docStyle || 'msFlexWrap' in docStyle;\n each([\n 'Moz',\n 'webkit',\n 'O',\n 'ms'\n ], function () {\n var prefix = this.toString(), hasTransitions = typeof table.style[prefix + 'Transition'] === STRING;\n if (hasTransitions || typeof table.style[prefix + 'Transform'] === STRING) {\n var lowPrefix = prefix.toLowerCase();\n transforms = {\n css: lowPrefix != 'ms' ? '-' + lowPrefix + '-' : '',\n prefix: prefix,\n event: lowPrefix === 'o' || lowPrefix === 'webkit' ? lowPrefix : ''\n };\n if (hasTransitions) {\n transitions = transforms;\n transitions.event = transitions.event ? transitions.event + 'TransitionEnd' : 'transitionend';\n }\n return false;\n }\n });\n table = null;\n support.transforms = transforms;\n support.transitions = transitions;\n support.devicePixelRatio = window.devicePixelRatio === undefined ? 1 : window.devicePixelRatio;\n try {\n support.screenWidth = window.outerWidth || window.screen ? window.screen.availWidth : window.innerWidth;\n support.screenHeight = window.outerHeight || window.screen ? window.screen.availHeight : window.innerHeight;\n } catch (e) {\n support.screenWidth = window.screen.availWidth;\n support.screenHeight = window.screen.availHeight;\n }\n support.detectOS = function (ua) {\n var os = false, minorVersion, match = [], notAndroidPhone = !/mobile safari/i.test(ua), agentRxs = {\n wp: /(Windows Phone(?: OS)?)\\s(\\d+)\\.(\\d+(\\.\\d+)?)/,\n fire: /(Silk)\\/(\\d+)\\.(\\d+(\\.\\d+)?)/,\n android: /(Android|Android.*(?:Opera|Firefox).*?\\/)\\s*(\\d+)\\.?(\\d+(\\.\\d+)?)?/,\n iphone: /(iPhone|iPod).*OS\\s+(\\d+)[\\._]([\\d\\._]+)/,\n ipad: /(iPad).*OS\\s+(\\d+)[\\._]([\\d_]+)/,\n meego: /(MeeGo).+NokiaBrowser\\/(\\d+)\\.([\\d\\._]+)/,\n webos: /(webOS)\\/(\\d+)\\.(\\d+(\\.\\d+)?)/,\n blackberry: /(BlackBerry|BB10).*?Version\\/(\\d+)\\.(\\d+(\\.\\d+)?)/,\n playbook: /(PlayBook).*?Tablet\\s*OS\\s*(\\d+)\\.(\\d+(\\.\\d+)?)/,\n windows: /(MSIE)\\s+(\\d+)\\.(\\d+(\\.\\d+)?)/,\n tizen: /(tizen).*?Version\\/(\\d+)\\.(\\d+(\\.\\d+)?)/i,\n sailfish: /(sailfish).*rv:(\\d+)\\.(\\d+(\\.\\d+)?).*firefox/i,\n ffos: /(Mobile).*rv:(\\d+)\\.(\\d+(\\.\\d+)?).*Firefox/\n }, osRxs = {\n ios: /^i(phone|pad|pod)$/i,\n android: /^android|fire$/i,\n blackberry: /^blackberry|playbook/i,\n windows: /windows/,\n wp: /wp/,\n flat: /sailfish|ffos|tizen/i,\n meego: /meego/\n }, formFactorRxs = { tablet: /playbook|ipad|fire/i }, browserRxs = {\n omini: /Opera\\sMini/i,\n omobile: /Opera\\sMobi/i,\n firefox: /Firefox|Fennec/i,\n mobilesafari: /version\\/.*safari/i,\n ie: /MSIE|Windows\\sPhone/i,\n chrome: /chrome|crios/i,\n webkit: /webkit/i\n };\n for (var agent in agentRxs) {\n if (agentRxs.hasOwnProperty(agent)) {\n match = ua.match(agentRxs[agent]);\n if (match) {\n if (agent == 'windows' && 'plugins' in navigator) {\n return false;\n }\n os = {};\n os.device = agent;\n os.tablet = testRx(agent, formFactorRxs, false);\n os.browser = testRx(ua, browserRxs, 'default');\n os.name = testRx(agent, osRxs);\n os[os.name] = true;\n os.majorVersion = match[2];\n os.minorVersion = (match[3] || '0').replace('_', '.');\n minorVersion = os.minorVersion.replace('.', '').substr(0, 2);\n os.flatVersion = os.majorVersion + minorVersion + new Array(3 - (minorVersion.length < 3 ? minorVersion.length : 2)).join('0');\n os.cordova = typeof window.PhoneGap !== UNDEFINED || typeof window.cordova !== UNDEFINED;\n os.appMode = window.navigator.standalone || /file|local|wmapp/.test(window.location.protocol) || os.cordova;\n if (os.android && (support.devicePixelRatio < 1.5 && os.flatVersion < 400 || notAndroidPhone) && (support.screenWidth > 800 || support.screenHeight > 800)) {\n os.tablet = agent;\n }\n break;\n }\n }\n }\n return os;\n };\n var mobileOS = support.mobileOS = support.detectOS(navigator.userAgent);\n support.wpDevicePixelRatio = mobileOS.wp ? screen.width / 320 : 0;\n support.hasNativeScrolling = false;\n if (mobileOS.ios || mobileOS.android && mobileOS.majorVersion > 2 || mobileOS.wp) {\n support.hasNativeScrolling = mobileOS;\n }\n support.delayedClick = function () {\n if (support.touch) {\n if (mobileOS.ios) {\n return true;\n }\n if (mobileOS.android) {\n if (!support.browser.chrome) {\n return true;\n }\n if (support.browser.version < 32) {\n return false;\n }\n return !($('meta[name=viewport]').attr('content') || '').match(/user-scalable=no/i);\n }\n }\n return false;\n };\n support.mouseAndTouchPresent = support.touch && !(support.mobileOS.ios || support.mobileOS.android);\n support.detectBrowser = function (ua) {\n var browser = false, match = [], browserRxs = {\n edge: /(edge)[ \\/]([\\w.]+)/i,\n webkit: /(chrome|crios)[ \\/]([\\w.]+)/i,\n safari: /(webkit)[ \\/]([\\w.]+)/i,\n opera: /(opera)(?:.*version|)[ \\/]([\\w.]+)/i,\n msie: /(msie\\s|trident.*? rv:)([\\w.]+)/i,\n mozilla: /(mozilla)(?:.*? rv:([\\w.]+)|)/i\n };\n for (var agent in browserRxs) {\n if (browserRxs.hasOwnProperty(agent)) {\n match = ua.match(browserRxs[agent]);\n if (match) {\n browser = {};\n browser[agent] = true;\n browser[match[1].toLowerCase().split(' ')[0].split('/')[0]] = true;\n browser.version = parseInt(document.documentMode || match[2], 10);\n break;\n }\n }\n }\n return browser;\n };\n support.browser = support.detectBrowser(navigator.userAgent);\n support.detectClipboardAccess = function () {\n var commands = {\n copy: document.queryCommandSupported ? document.queryCommandSupported('copy') : false,\n cut: document.queryCommandSupported ? document.queryCommandSupported('cut') : false,\n paste: document.queryCommandSupported ? document.queryCommandSupported('paste') : false\n };\n if (support.browser.chrome) {\n commands.paste = false;\n if (support.browser.version >= 43) {\n commands.copy = true;\n commands.cut = true;\n }\n }\n return commands;\n };\n support.clipboard = support.detectClipboardAccess();\n support.zoomLevel = function () {\n try {\n var browser = support.browser;\n var ie11WidthCorrection = 0;\n var docEl = document.documentElement;\n if (browser.msie && browser.version == 11 && docEl.scrollHeight > docEl.clientHeight && !support.touch) {\n ie11WidthCorrection = support.scrollbar();\n }\n return support.touch ? docEl.clientWidth / window.innerWidth : browser.msie && browser.version >= 10 ? ((top || window).document.documentElement.offsetWidth + ie11WidthCorrection) / (top || window).innerWidth : 1;\n } catch (e) {\n return 1;\n }\n };\n support.cssBorderSpacing = typeof docStyle.borderSpacing != 'undefined' && !(support.browser.msie && support.browser.version < 8);\n (function (browser) {\n var cssClass = '', docElement = $(document.documentElement), majorVersion = parseInt(browser.version, 10);\n if (browser.msie) {\n cssClass = 'ie';\n } else if (browser.mozilla) {\n cssClass = 'ff';\n } else if (browser.safari) {\n cssClass = 'safari';\n } else if (browser.webkit) {\n cssClass = 'webkit';\n } else if (browser.opera) {\n cssClass = 'opera';\n } else if (browser.edge) {\n cssClass = 'edge';\n }\n if (cssClass) {\n cssClass = 'k-' + cssClass + ' k-' + cssClass + majorVersion;\n }\n if (support.mobileOS) {\n cssClass += ' k-mobile';\n }\n if (!support.cssFlexbox) {\n cssClass += ' k-no-flexbox';\n }\n docElement.addClass(cssClass);\n }(support.browser));\n support.eventCapture = document.documentElement.addEventListener;\n var input = document.createElement('input');\n support.placeholder = 'placeholder' in input;\n support.propertyChangeEvent = 'onpropertychange' in input;\n support.input = function () {\n var types = [\n 'number',\n 'date',\n 'time',\n 'month',\n 'week',\n 'datetime',\n 'datetime-local'\n ];\n var length = types.length;\n var value = 'test';\n var result = {};\n var idx = 0;\n var type;\n for (; idx < length; idx++) {\n type = types[idx];\n input.setAttribute('type', type);\n input.value = value;\n result[type.replace('-', '')] = input.type !== 'text' && input.value !== value;\n }\n return result;\n }();\n input.style.cssText = 'float:left;';\n support.cssFloat = !!input.style.cssFloat;\n input = null;\n support.stableSort = function () {\n var threshold = 513;\n var sorted = [{\n index: 0,\n field: 'b'\n }];\n for (var i = 1; i < threshold; i++) {\n sorted.push({\n index: i,\n field: 'a'\n });\n }\n sorted.sort(function (a, b) {\n return a.field > b.field ? 1 : a.field < b.field ? -1 : 0;\n });\n return sorted[0].index === 1;\n }();\n support.matchesSelector = elementProto.webkitMatchesSelector || elementProto.mozMatchesSelector || elementProto.msMatchesSelector || elementProto.oMatchesSelector || elementProto.matchesSelector || elementProto.matches || function (selector) {\n var nodeList = document.querySelectorAll ? (this.parentNode || document).querySelectorAll(selector) || [] : $(selector), i = nodeList.length;\n while (i--) {\n if (nodeList[i] == this) {\n return true;\n }\n }\n return false;\n };\n support.matchMedia = 'matchMedia' in window;\n support.pushState = window.history && window.history.pushState;\n var documentMode = document.documentMode;\n support.hashChange = 'onhashchange' in window && !(support.browser.msie && (!documentMode || documentMode <= 8));\n support.customElements = 'registerElement' in window.document;\n var chrome = support.browser.chrome, mozilla = support.browser.mozilla;\n support.msPointers = !chrome && window.MSPointerEvent;\n support.pointers = !chrome && !mozilla && 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 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 isLocalUrl: function (url) {\n return url && !localUrlRe.test(url);\n },\n expr: function (expression, safe, paramName) {\n expression = expression || '';\n if (typeof safe == STRING) {\n paramName = safe;\n safe = false;\n }\n paramName = paramName || 'd';\n if (expression && expression.charAt(0) !== '[') {\n expression = '.' + expression;\n }\n if (safe) {\n expression = expression.replace(/\"([^.]*)\\.([^\"]*)\"/g, '\"$1_$DOT$_$2\"');\n expression = expression.replace(/'([^.]*)\\.([^']*)'/g, '\\'$1_$DOT$_$2\\'');\n expression = wrapExpression(expression.split('.'), paramName);\n expression = expression.replace(/_\\$DOT\\$_/g, '.');\n } else {\n expression = paramName + expression;\n }\n return expression;\n },\n getter: function (expression, safe) {\n var key = expression + safe;\n return getterCache[key] = getterCache[key] || new Function('d', 'return ' + kendo.expr(expression, safe));\n },\n setter: function (expression) {\n return setterCache[expression] = setterCache[expression] || new Function('d,value', kendo.expr(expression) + '=value');\n },\n accessor: function (expression) {\n return {\n get: kendo.getter(expression),\n set: kendo.setter(expression)\n };\n },\n guid: function () {\n var id = '', i, random;\n for (i = 0; i < 32; i++) {\n random = math.random() * 16 | 0;\n if (i == 8 || i == 12 || i == 16 || i == 20) {\n id += '-';\n }\n id += (i == 12 ? 4 : i == 16 ? random & 3 | 8 : random).toString(16);\n }\n return id;\n },\n roleSelector: function (role) {\n return role.replace(/(\\S+)/g, '[' + kendo.attr('role') + '=$1],').slice(0, -1);\n },\n directiveSelector: function (directives) {\n var selectors = directives.split(' ');\n if (selectors) {\n for (var i = 0; i < selectors.length; i++) {\n if (selectors[i] != 'view') {\n selectors[i] = selectors[i].replace(/(\\w*)(view|bar|strip|over)$/, '$1-$2');\n }\n }\n }\n return selectors.join(' ').replace(/(\\S+)/g, 'kendo-mobile-$1,').slice(0, -1);\n },\n triggeredByInput: function (e) {\n return /^(label|input|textarea|select)$/i.test(e.target.tagName);\n },\n onWidgetRegistered: function (callback) {\n for (var i = 0, len = kendo.widgets.length; i < len; i++) {\n callback(kendo.widgets[i]);\n }\n kendo._widgetRegisteredCallbacks.push(callback);\n },\n logToConsole: function (message, type) {\n var console = window.console;\n if (!kendo.suppressLog && typeof console != 'undefined' && console.log) {\n console[type || 'log'](message);\n }\n }\n });\n var Widget = Observable.extend({\n init: function (element, options) {\n var that = this;\n that.element = kendo.jQuery(element).handler(that);\n that.angular('init', options);\n Observable.fn.init.call(that);\n var dataSource = options ? options.dataSource : null;\n if (dataSource) {\n options = extend({}, options, { dataSource: {} });\n }\n options = that.options = extend(true, {}, that.options, options);\n if (dataSource) {\n options.dataSource = dataSource;\n }\n if (!that.element.attr(kendo.attr('role'))) {\n that.element.attr(kendo.attr('role'), (options.name || '').toLowerCase());\n }\n that.element.data('kendo' + options.prefix + options.name, that);\n that.bind(that.events, options);\n },\n events: [],\n options: { prefix: '' },\n _hasBindingTarget: function () {\n return !!this.element[0].kendoBindingTarget;\n },\n _tabindex: function (target) {\n target = target || this.wrapper;\n var element = this.element, TABINDEX = 'tabindex', tabindex = target.attr(TABINDEX) || element.attr(TABINDEX);\n element.removeAttr(TABINDEX);\n target.attr(TABINDEX, !isNaN(tabindex) ? tabindex : 0);\n },\n setOptions: function (options) {\n this._setEvents(options);\n $.extend(this.options, options);\n },\n _setEvents: function (options) {\n var that = this, idx = 0, length = that.events.length, e;\n for (; idx < length; idx++) {\n e = that.events[idx];\n if (that.options[e] && options[e]) {\n that.unbind(e, that.options[e]);\n }\n }\n that.bind(that.events, options);\n },\n resize: function (force) {\n var size = this.getSize(), currentSize = this._size;\n if (force || (size.width > 0 || size.height > 0) && (!currentSize || size.width !== currentSize.width || size.height !== currentSize.height)) {\n this._size = size;\n this._resize(size, force);\n this.trigger('resize', size);\n }\n },\n getSize: function () {\n return kendo.dimensions(this.element);\n },\n size: function (size) {\n if (!size) {\n return this.getSize();\n } else {\n this.setSize(size);\n }\n },\n setSize: $.noop,\n _resize: $.noop,\n destroy: function () {\n var that = this;\n that.element.removeData('kendo' + that.options.prefix + that.options.name);\n that.element.removeData('handler');\n that.unbind();\n },\n _destroy: function () {\n this.destroy();\n },\n angular: function () {\n },\n _muteAngularRebind: function (callback) {\n this._muteRebind = true;\n callback.call(this);\n this._muteRebind = false;\n }\n });\n var DataBoundWidget = Widget.extend({\n dataItems: function () {\n return this.dataSource.flatView();\n },\n _angularItems: function (cmd) {\n var that = this;\n that.angular(cmd, function () {\n return {\n elements: that.items(),\n data: $.map(that.dataItems(), function (dataItem) {\n return { dataItem: dataItem };\n })\n };\n });\n }\n });\n kendo.dimensions = function (element, dimensions) {\n var domElement = element[0];\n if (dimensions) {\n element.css(dimensions);\n }\n return {\n width: domElement.offsetWidth,\n height: domElement.offsetHeight\n };\n };\n kendo.notify = noop;\n var templateRegExp = /template$/i, jsonRegExp = /^\\s*(?:\\{(?:.|\\r\\n|\\n)*\\}|\\[(?:.|\\r\\n|\\n)*\\])\\s*$/, jsonFormatRegExp = /^\\{(\\d+)(:[^\\}]+)?\\}|^\\[[A-Za-z_]+\\]$/, dashRegExp = /([A-Z])/g;\n function parseOption(element, option) {\n var value;\n if (option.indexOf('data') === 0) {\n option = option.substring(4);\n option = option.charAt(0).toLowerCase() + option.substring(1);\n }\n option = option.replace(dashRegExp, '-$1');\n value = element.getAttribute('data-' + kendo.ns + option);\n if (value === null) {\n value = undefined;\n } else if (value === 'null') {\n value = null;\n } else if (value === 'true') {\n value = true;\n } else if (value === 'false') {\n value = false;\n } else if (numberRegExp.test(value) && option != 'mask') {\n value = parseFloat(value);\n } else if (jsonRegExp.test(value) && !jsonFormatRegExp.test(value)) {\n value = new Function('return (' + value + ')')();\n }\n return value;\n }\n function parseOptions(element, options, source) {\n var result = {}, option, value, role = element.getAttribute('data-' + kendo.ns + 'role');\n for (option in options) {\n value = parseOption(element, option);\n if (value !== undefined) {\n if (templateRegExp.test(option) && role != 'drawer') {\n if (typeof value === 'string') {\n if ($('#' + value).length) {\n value = kendo.template($('#' + value).html());\n } else if (source) {\n value = kendo.template(source[value]);\n }\n } else {\n value = element.getAttribute(option);\n }\n }\n result[option] = value;\n }\n }\n return result;\n }\n kendo.initWidget = function (element, options, roles) {\n var result, option, widget, idx, length, role, value, dataSource, fullPath, widgetKeyRegExp;\n if (!roles) {\n roles = kendo.ui.roles;\n } else if (roles.roles) {\n roles = roles.roles;\n }\n element = element.nodeType ? element : element[0];\n role = element.getAttribute('data-' + kendo.ns + 'role');\n if (!role) {\n return;\n }\n fullPath = role.indexOf('.') === -1;\n if (fullPath) {\n widget = roles[role];\n } else {\n widget = kendo.getter(role)(window);\n }\n var data = $(element).data(), widgetKey = widget ? 'kendo' + widget.fn.options.prefix + widget.fn.options.name : '';\n if (fullPath) {\n widgetKeyRegExp = new RegExp('^kendo.*' + role + '$', 'i');\n } else {\n widgetKeyRegExp = new RegExp('^' + widgetKey + '$', 'i');\n }\n for (var key in data) {\n if (key.match(widgetKeyRegExp)) {\n if (key === widgetKey) {\n result = data[key];\n } else {\n return data[key];\n }\n }\n }\n if (!widget) {\n return;\n }\n dataSource = parseOption(element, 'dataSource');\n options = $.extend({}, parseOptions(element, widget.fn.options), options);\n if (dataSource) {\n if (typeof dataSource === STRING) {\n options.dataSource = kendo.getter(dataSource)(window);\n } else {\n options.dataSource = dataSource;\n }\n }\n for (idx = 0, length = widget.fn.events.length; idx < length; idx++) {\n option = widget.fn.events[idx];\n value = parseOption(element, option);\n if (value !== undefined) {\n options[option] = kendo.getter(value)(window);\n }\n }\n if (!result) {\n result = new widget(element, options);\n } else if (!$.isEmptyObject(options)) {\n result.setOptions(options);\n }\n return result;\n };\n kendo.rolesFromNamespaces = function (namespaces) {\n var roles = [], idx, length;\n if (!namespaces[0]) {\n namespaces = [\n kendo.ui,\n kendo.dataviz.ui\n ];\n }\n for (idx = 0, length = namespaces.length; idx < length; idx++) {\n roles[idx] = namespaces[idx].roles;\n }\n return extend.apply(null, [{}].concat(roles.reverse()));\n };\n kendo.init = function (element) {\n var roles = kendo.rolesFromNamespaces(slice.call(arguments, 1));\n $(element).find('[data-' + kendo.ns + 'role]').addBack().each(function () {\n kendo.initWidget(this, {}, roles);\n });\n };\n kendo.destroy = function (element) {\n $(element).find('[data-' + kendo.ns + 'role]').addBack().each(function () {\n var data = $(this).data();\n for (var key in data) {\n if (key.indexOf('kendo') === 0 && typeof data[key].destroy === FUNCTION) {\n data[key].destroy();\n }\n }\n });\n };\n function containmentComparer(a, b) {\n return $.contains(a, b) ? -1 : 1;\n }\n function resizableWidget() {\n var widget = $(this);\n return $.inArray(widget.attr('data-' + kendo.ns + 'role'), [\n 'slider',\n 'rangeslider'\n ]) > -1 || widget.is(':visible');\n }\n kendo.resize = function (element, force) {\n var widgets = $(element).find('[data-' + kendo.ns + 'role]').addBack().filter(resizableWidget);\n if (!widgets.length) {\n return;\n }\n var widgetsArray = $.makeArray(widgets);\n widgetsArray.sort(containmentComparer);\n $.each(widgetsArray, function () {\n var widget = kendo.widgetInstance($(this));\n if (widget) {\n widget.resize(force);\n }\n });\n };\n kendo.parseOptions = parseOptions;\n extend(kendo.ui, {\n Widget: Widget,\n DataBoundWidget: DataBoundWidget,\n roles: {},\n progress: function (container, toggle, options) {\n var mask = container.find('.k-loading-mask'), support = kendo.support, browser = support.browser, isRtl, leftRight, webkitCorrection, containerScrollLeft, cssClass;\n options = $.extend({}, {\n width: '100%',\n height: '100%',\n top: container.scrollTop(),\n opacity: false\n }, options);\n cssClass = options.opacity ? 'k-loading-mask k-opaque' : 'k-loading-mask';\n if (toggle) {\n if (!mask.length) {\n isRtl = support.isRtl(container);\n leftRight = isRtl ? 'right' : 'left';\n containerScrollLeft = container.scrollLeft();\n webkitCorrection = browser.webkit ? !isRtl ? 0 : container[0].scrollWidth - container.width() - 2 * containerScrollLeft : 0;\n mask = $(kendo.format('
{1}
', cssClass, kendo.ui.progress.messages.loading)).width(options.width).height(options.height).css('top', options.top).css(leftRight, Math.abs(containerScrollLeft) + webkitCorrection).prependTo(container);\n }\n } else if (mask) {\n mask.remove();\n }\n },\n plugin: function (widget, register, prefix) {\n var name = widget.fn.options.name, getter;\n register = register || kendo.ui;\n prefix = prefix || '';\n register[name] = widget;\n register.roles[name.toLowerCase()] = widget;\n getter = 'getKendo' + prefix + name;\n name = 'kendo' + prefix + name;\n var widgetEntry = {\n name: name,\n widget: widget,\n prefix: prefix || ''\n };\n kendo.widgets.push(widgetEntry);\n for (var i = 0, len = kendo._widgetRegisteredCallbacks.length; i < len; i++) {\n kendo._widgetRegisteredCallbacks[i](widgetEntry);\n }\n $.fn[name] = function (options) {\n var value = this, args;\n if (typeof options === STRING) {\n args = slice.call(arguments, 1);\n this.each(function () {\n var widget = $.data(this, name), method, result;\n if (!widget) {\n throw new Error(kendo.format('Cannot call method \\'{0}\\' of {1} before it is initialized', options, name));\n }\n method = widget[options];\n if (typeof method !== FUNCTION) {\n throw new Error(kendo.format('Cannot find method \\'{0}\\' of {1}', options, name));\n }\n result = method.apply(widget, args);\n if (result !== undefined) {\n value = result;\n return false;\n }\n });\n } else {\n this.each(function () {\n return new widget(this, options);\n });\n }\n return value;\n };\n $.fn[name].widget = widget;\n $.fn[getter] = function () {\n return this.data(name);\n };\n }\n });\n kendo.ui.progress.messages = { loading: 'Loading...' };\n var ContainerNullObject = {\n bind: function () {\n return this;\n },\n nullObject: true,\n options: {}\n };\n var MobileWidget = Widget.extend({\n init: function (element, options) {\n Widget.fn.init.call(this, element, options);\n this.element.autoApplyNS();\n this.wrapper = this.element;\n this.element.addClass('km-widget');\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.element.kendoDestroy();\n },\n options: { prefix: 'Mobile' },\n events: [],\n view: function () {\n var viewElement = this.element.closest(kendo.roleSelector('view splitview modalview drawer'));\n return kendo.widgetInstance(viewElement, kendo.mobile.ui) || ContainerNullObject;\n },\n viewHasNativeScrolling: function () {\n var view = this.view();\n return view && view.options.useNativeScrolling;\n },\n container: function () {\n var element = this.element.closest(kendo.roleSelector('view layout modalview drawer splitview'));\n return kendo.widgetInstance(element.eq(0), kendo.mobile.ui) || ContainerNullObject;\n }\n });\n extend(kendo.mobile, {\n init: function (element) {\n kendo.init(element, kendo.mobile.ui, kendo.ui, kendo.dataviz.ui);\n },\n appLevelNativeScrolling: function () {\n return kendo.mobile.application && kendo.mobile.application.options && kendo.mobile.application.options.useNativeScrolling;\n },\n roles: {},\n ui: {\n Widget: MobileWidget,\n DataBoundWidget: DataBoundWidget.extend(MobileWidget.prototype),\n roles: {},\n plugin: function (widget) {\n kendo.ui.plugin(widget, kendo.mobile.ui, 'Mobile');\n }\n }\n });\n deepExtend(kendo.dataviz, {\n init: function (element) {\n kendo.init(element, kendo.dataviz.ui);\n },\n ui: {\n roles: {},\n themes: {},\n views: [],\n plugin: function (widget) {\n kendo.ui.plugin(widget, kendo.dataviz.ui);\n }\n },\n roles: {}\n });\n kendo.touchScroller = function (elements, options) {\n if (!options) {\n options = {};\n }\n options.useNative = true;\n return $(elements).map(function (idx, element) {\n element = $(element);\n if (support.kineticScrollNeeded && kendo.mobile.ui.Scroller && !element.data('kendoMobileScroller')) {\n element.kendoMobileScroller(options);\n return element.data('kendoMobileScroller');\n } else {\n return false;\n }\n })[0];\n };\n kendo.preventDefault = function (e) {\n e.preventDefault();\n };\n kendo.widgetInstance = function (element, suites) {\n var role = element.data(kendo.ns + 'role'), widgets = [], i, length;\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') {\n return element.data('kendoView');\n }\n if (suites) {\n if (suites[0]) {\n for (i = 0, length = suites.length; i < length; i++) {\n widgets.push(suites[i].roles[role]);\n }\n } else {\n widgets.push(suites.roles[role]);\n }\n } else {\n widgets = [\n kendo.ui.roles[role],\n kendo.dataviz.ui.roles[role],\n kendo.mobile.ui.roles[role]\n ];\n }\n if (role.indexOf('.') >= 0) {\n widgets = [kendo.getter(role)(window)];\n }\n for (i = 0, length = widgets.length; i < length; i++) {\n var widget = widgets[i];\n if (widget) {\n var instance = element.data('kendo' + widget.fn.options.prefix + widget.fn.options.name);\n if (instance) {\n return instance;\n }\n }\n }\n }\n };\n kendo.onResize = function (callback) {\n var handler = callback;\n if (support.mobileOS.android) {\n handler = function () {\n setTimeout(callback, 600);\n };\n }\n $(window).on(support.resize, handler);\n return handler;\n };\n kendo.unbindResize = function (callback) {\n $(window).off(support.resize, callback);\n };\n kendo.attrValue = function (element, key) {\n return element.data(kendo.ns + key);\n };\n kendo.days = {\n Sunday: 0,\n Monday: 1,\n Tuesday: 2,\n Wednesday: 3,\n Thursday: 4,\n Friday: 5,\n Saturday: 6\n };\n function focusable(element, isTabIndexNotNaN) {\n var nodeName = element.nodeName.toLowerCase();\n return (/input|select|textarea|button|object/.test(nodeName) ? !element.disabled : 'a' === nodeName ? element.href || isTabIndexNotNaN : isTabIndexNotNaN) && visible(element);\n }\n function visible(element) {\n return $.expr.pseudos.visible(element) && !$(element).parents().addBack().filter(function () {\n return $.css(this, 'visibility') === 'hidden';\n }).length;\n }\n $.extend($.expr.pseudos, {\n kendoFocusable: function (element) {\n var idx = $.attr(element, 'tabindex');\n return focusable(element, !isNaN(idx) && idx > -1);\n }\n });\n var MOUSE_EVENTS = [\n 'mousedown',\n 'mousemove',\n 'mouseenter',\n 'mouseleave',\n 'mouseover',\n 'mouseout',\n 'mouseup',\n 'click'\n ];\n var EXCLUDE_BUST_CLICK_SELECTOR = 'label, input, [data-rel=external]';\n var MouseEventNormalizer = {\n setupMouseMute: function () {\n var idx = 0, length = MOUSE_EVENTS.length, element = document.documentElement;\n if (MouseEventNormalizer.mouseTrap || !support.eventCapture) {\n return;\n }\n MouseEventNormalizer.mouseTrap = true;\n MouseEventNormalizer.bustClick = false;\n MouseEventNormalizer.captureMouse = false;\n var handler = function (e) {\n if (MouseEventNormalizer.captureMouse) {\n if (e.type === 'click') {\n if (MouseEventNormalizer.bustClick && !$(e.target).is(EXCLUDE_BUST_CLICK_SELECTOR)) {\n e.preventDefault();\n e.stopPropagation();\n }\n } else {\n e.stopPropagation();\n }\n }\n };\n for (; idx < length; idx++) {\n element.addEventListener(MOUSE_EVENTS[idx], handler, true);\n }\n },\n muteMouse: function (e) {\n MouseEventNormalizer.captureMouse = true;\n if (e.data.bustClick) {\n MouseEventNormalizer.bustClick = true;\n }\n clearTimeout(MouseEventNormalizer.mouseTrapTimeoutID);\n },\n unMuteMouse: function () {\n clearTimeout(MouseEventNormalizer.mouseTrapTimeoutID);\n MouseEventNormalizer.mouseTrapTimeoutID = setTimeout(function () {\n MouseEventNormalizer.captureMouse = false;\n MouseEventNormalizer.bustClick = false;\n }, 400);\n }\n };\n var eventMap = {\n down: 'touchstart mousedown',\n move: 'mousemove touchmove',\n up: 'mouseup touchend touchcancel',\n cancel: 'mouseleave touchcancel'\n };\n if (support.touch && (support.mobileOS.ios || support.mobileOS.android)) {\n eventMap = {\n down: 'touchstart',\n move: 'touchmove',\n up: 'touchend touchcancel',\n cancel: 'touchcancel'\n };\n } else if (support.pointers) {\n eventMap = {\n down: 'pointerdown',\n move: 'pointermove',\n up: 'pointerup',\n cancel: 'pointercancel pointerleave'\n };\n } else if (support.msPointers) {\n eventMap = {\n down: 'MSPointerDown',\n move: 'MSPointerMove',\n up: 'MSPointerUp',\n cancel: 'MSPointerCancel MSPointerLeave'\n };\n }\n if (support.msPointers && !('onmspointerenter' in window)) {\n $.each({\n MSPointerEnter: 'MSPointerOver',\n MSPointerLeave: 'MSPointerOut'\n }, function (orig, fix) {\n $.event.special[orig] = {\n delegateType: fix,\n bindType: fix,\n handle: function (event) {\n var ret, target = this, related = event.relatedTarget, handleObj = event.handleObj;\n if (!related || related !== target && !$.contains(target, related)) {\n event.type = handleObj.origType;\n ret = handleObj.handler.apply(this, arguments);\n event.type = fix;\n }\n return ret;\n }\n };\n });\n }\n var getEventMap = function (e) {\n return eventMap[e] || e;\n }, eventRegEx = /([^ ]+)/g;\n kendo.applyEventMap = function (events, ns) {\n events = events.replace(eventRegEx, getEventMap);\n if (ns) {\n events = events.replace(eventRegEx, '$1.' + ns);\n }\n return events;\n };\n var on = $.fn.on;\n function kendoJQuery(selector, context) {\n return new kendoJQuery.fn.init(selector, context);\n }\n noDepricateExtend(true, kendoJQuery, $);\n kendoJQuery.fn = kendoJQuery.prototype = new $();\n kendoJQuery.fn.constructor = kendoJQuery;\n kendoJQuery.fn.init = function (selector, context) {\n if (context && context instanceof $ && !(context instanceof kendoJQuery)) {\n context = kendoJQuery(context);\n }\n return $.fn.init.call(this, selector, context, rootjQuery);\n };\n kendoJQuery.fn.init.prototype = kendoJQuery.fn;\n var rootjQuery = kendoJQuery(document);\n extend(kendoJQuery.fn, {\n handler: function (handler) {\n this.data('handler', handler);\n return this;\n },\n autoApplyNS: function (ns) {\n this.data('kendoNS', ns || kendo.guid());\n return this;\n },\n on: function () {\n var that = this, ns = that.data('kendoNS');\n if (arguments.length === 1) {\n return on.call(that, arguments[0]);\n }\n var context = that, args = slice.call(arguments);\n if (typeof args[args.length - 1] === UNDEFINED) {\n args.pop();\n }\n var callback = args[args.length - 1], events = kendo.applyEventMap(args[0], ns);\n if (support.mouseAndTouchPresent && events.search(/mouse|click/) > -1 && this[0] !== document.documentElement) {\n MouseEventNormalizer.setupMouseMute();\n var selector = args.length === 2 ? null : args[1], bustClick = events.indexOf('click') > -1 && events.indexOf('touchend') > -1;\n on.call(this, {\n touchstart: MouseEventNormalizer.muteMouse,\n touchend: MouseEventNormalizer.unMuteMouse\n }, selector, { bustClick: bustClick });\n }\n if (typeof callback === STRING) {\n context = that.data('handler');\n callback = context[callback];\n args[args.length - 1] = function (e) {\n callback.call(context, e);\n };\n }\n args[0] = events;\n on.apply(that, args);\n return that;\n },\n kendoDestroy: function (ns) {\n ns = ns || this.data('kendoNS');\n if (ns) {\n this.off('.' + ns);\n }\n return this;\n }\n });\n kendo.jQuery = kendoJQuery;\n kendo.eventMap = eventMap;\n kendo.timezone = function () {\n var months = {\n Jan: 0,\n Feb: 1,\n Mar: 2,\n Apr: 3,\n May: 4,\n Jun: 5,\n Jul: 6,\n Aug: 7,\n Sep: 8,\n Oct: 9,\n Nov: 10,\n Dec: 11\n };\n var days = {\n Sun: 0,\n Mon: 1,\n Tue: 2,\n Wed: 3,\n Thu: 4,\n Fri: 5,\n Sat: 6\n };\n function ruleToDate(year, rule) {\n var date;\n var targetDay;\n var ourDay;\n var month = rule[3];\n var on = rule[4];\n var time = rule[5];\n var cache = rule[8];\n if (!cache) {\n rule[8] = cache = {};\n }\n if (cache[year]) {\n return cache[year];\n }\n if (!isNaN(on)) {\n date = new Date(Date.UTC(year, months[month], on, time[0], time[1], time[2], 0));\n } else if (on.indexOf('last') === 0) {\n date = new Date(Date.UTC(year, months[month] + 1, 1, time[0] - 24, time[1], time[2], 0));\n targetDay = days[on.substr(4, 3)];\n ourDay = date.getUTCDay();\n date.setUTCDate(date.getUTCDate() + targetDay - ourDay - (targetDay > ourDay ? 7 : 0));\n } else if (on.indexOf('>=') >= 0) {\n date = new Date(Date.UTC(year, months[month], on.substr(5), time[0], time[1], time[2], 0));\n targetDay = days[on.substr(0, 3)];\n ourDay = date.getUTCDay();\n date.setUTCDate(date.getUTCDate() + targetDay - ourDay + (targetDay < ourDay ? 7 : 0));\n }\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(kendo.date.getDate(date).getTime() + kendo.date.getMilliseconds(time));\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.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 (function () {\n function postToProxy(dataURI, fileName, proxyURL, proxyTarget) {\n var form = $('
').attr({\n action: proxyURL,\n method: 'POST',\n target: proxyTarget\n });\n var data = kendo.antiForgeryTokens();\n data.fileName = fileName;\n var parts = dataURI.split(';base64,');\n data.contentType = parts[0].replace('data:', '');\n data.base64 = parts[1];\n for (var name in data) {\n if (data.hasOwnProperty(name)) {\n $('').attr({\n value: data[name],\n name: name,\n type: 'hidden'\n }).appendTo(form);\n }\n }\n form.appendTo('body').submit().remove();\n }\n var fileSaver = document.createElement('a');\n var downloadAttribute = 'download' in fileSaver && !kendo.support.browser.edge;\n function saveAsBlob(dataURI, fileName) {\n var blob = dataURI;\n if (typeof dataURI == 'string') {\n var parts = dataURI.split(';base64,');\n var contentType = parts[0];\n var base64 = atob(parts[1]);\n var array = new Uint8Array(base64.length);\n for (var idx = 0; idx < base64.length; idx++) {\n array[idx] = base64.charCodeAt(idx);\n }\n blob = new Blob([array.buffer], { type: contentType });\n }\n navigator.msSaveBlob(blob, fileName);\n }\n function saveAsDataURI(dataURI, fileName) {\n if (window.Blob && dataURI instanceof Blob) {\n dataURI = URL.createObjectURL(dataURI);\n }\n fileSaver.download = fileName;\n fileSaver.href = dataURI;\n var e = document.createEvent('MouseEvents');\n e.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);\n fileSaver.dispatchEvent(e);\n setTimeout(function () {\n URL.revokeObjectURL(dataURI);\n });\n }\n kendo.saveAs = function (options) {\n var save = postToProxy;\n if (!options.forceProxy) {\n if (downloadAttribute) {\n save = saveAsDataURI;\n } else if (navigator.msSaveBlob) {\n save = saveAsBlob;\n }\n }\n save(options.dataURI, options.fileName, options.proxyURL, options.proxyTarget);\n };\n }());\n kendo.proxyModelSetters = function proxyModelSetters(data) {\n var observable = {};\n Object.keys(data || {}).forEach(function (property) {\n Object.defineProperty(observable, property, {\n get: function () {\n return data[property];\n },\n set: function (value) {\n data[property] = value;\n data.dirty = true;\n }\n });\n });\n return observable;\n };\n }(jQuery, window));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.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 element.data('keys', $.uniqueSort(oldKeys)).height();\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 = {};\n var boundary = createBoundary('sf_batch_');\n var requestBody = '';\n var changeId = 0;\n var batchURL = transport.options.batch.url;\n var changeset = createBoundary('sf_changeset_');\n options.type = transport.options.batch.type;\n options.url = isFunction(batchURL) ? batchURL() : batchURL;\n options.headers = { 'Content-Type': 'multipart/mixed; boundary=' + boundary };\n if (colections.updated.length) {\n requestBody += processCollection(colections.updated, boundary, changeset, changeId, transport, 'update', false);\n changeId += colections.updated.length;\n changeset = createBoundary('sf_changeset_');\n }\n if (colections.destroyed.length) {\n requestBody += processCollection(colections.destroyed, boundary, changeset, changeId, transport, 'destroy', true);\n changeId += colections.destroyed.length;\n changeset = createBoundary('sf_changeset_');\n }\n if (colections.created.length) {\n requestBody += processCollection(colections.created, boundary, changeset, changeId, transport, 'create', false);\n }\n requestBody += createDelimeter(boundary, true);\n options.data = requestBody;\n return options;\n }\n function parseBatchResponse(responseText) {\n var responseMarkers = responseText.match(/--changesetresponse_[a-z0-9-]+$/gm);\n var markerIndex = 0;\n var collections = [];\n var changeBody;\n var status;\n var code;\n var marker;\n var jsonModel;\n collections.push({\n models: [],\n passed: true\n });\n for (var i = 0; i < responseMarkers.length; i++) {\n marker = responseMarkers[i];\n if (marker.lastIndexOf('--', marker.length - 1)) {\n if (i < responseMarkers.length - 1) {\n collections.push({\n models: [],\n passed: true\n });\n }\n continue;\n }\n if (!markerIndex) {\n markerIndex = responseText.indexOf(marker);\n } else {\n markerIndex = responseText.indexOf(marker, markerIndex + marker.length);\n }\n changeBody = responseText.substring(markerIndex, responseText.indexOf('--', markerIndex + 1));\n status = changeBody.match(/^HTTP\\/1\\.\\d (\\d{3}) (.*)$/gm).pop();\n code = kendo.parseFloat(status.match(/\\d{3}/g).pop());\n if (code >= 200 && code <= 299) {\n jsonModel = changeBody.match(/\\{.*\\}/gm);\n if (jsonModel) {\n collections[collections.length - 1].models.push(JSON.parse(jsonModel[0]));\n }\n } else {\n collections[collections.length - 1].passed = false;\n }\n }\n return collections;\n }\n extend(true, kendo.data, {\n schemas: {\n odata: {\n type: 'json',\n data: function (data) {\n return data.d.results || [data.d];\n },\n total: 'd.__count'\n }\n },\n transports: {\n odata: {\n read: {\n cache: true,\n dataType: 'jsonp',\n jsonp: '$callback'\n },\n update: {\n cache: true,\n dataType: 'json',\n contentType: 'application/json',\n type: 'PUT'\n },\n create: {\n cache: true,\n dataType: 'json',\n contentType: 'application/json',\n type: 'POST'\n },\n destroy: {\n cache: true,\n dataType: 'json',\n type: 'DELETE'\n },\n parameterMap: function (options, type, useVersionFour) {\n var params, value, option, dataType;\n options = options || {};\n type = type || 'read';\n dataType = (this.options || defaultDataType)[type];\n dataType = dataType ? dataType.dataType : 'json';\n if (type === 'read') {\n params = { $inlinecount: 'allpages' };\n if (dataType != 'json') {\n params.$format = 'json';\n }\n for (option in options) {\n if (mappers[option]) {\n mappers[option](params, options[option], useVersionFour);\n } else {\n params[option] = options[option];\n }\n }\n } else {\n if (dataType !== 'json') {\n throw new Error('Only json dataType can be used for ' + type + ' operation.');\n }\n if (type !== 'destroy') {\n for (option in options) {\n value = options[option];\n if (typeof value === 'number') {\n options[option] = value + '';\n }\n }\n params = kendo.stringify(options);\n }\n }\n return params;\n }\n }\n }\n });\n extend(true, kendo.data, {\n schemas: {\n 'odata-v4': {\n type: 'json',\n data: function (data) {\n if ($.isArray(data)) {\n for (var i = 0; i < data.length; i++) {\n stripMetadata(data[i]);\n }\n return data;\n } else {\n data = $.extend({}, data);\n stripMetadata(data);\n if (data.value) {\n return data.value;\n }\n return [data];\n }\n },\n total: function (data) {\n return data['@odata.count'];\n }\n }\n },\n transports: {\n 'odata-v4': {\n batch: { type: 'POST' },\n read: {\n cache: true,\n dataType: 'json'\n },\n update: {\n cache: true,\n dataType: 'json',\n contentType: 'application/json;IEEE754Compatible=true',\n type: 'PUT'\n },\n create: {\n cache: true,\n dataType: 'json',\n contentType: 'application/json;IEEE754Compatible=true',\n type: 'POST'\n },\n destroy: {\n cache: true,\n dataType: 'json',\n type: 'DELETE'\n },\n parameterMap: function (options, type) {\n var result = kendo.data.transports.odata.parameterMap(options, type, true);\n if (type == 'read') {\n result.$count = true;\n delete result.$inlinecount;\n }\n return result;\n },\n submit: function (e) {\n var that = this;\n var options = createBatchRequest(that, e.data);\n var collections = e.data;\n if (!collections.updated.length && !collections.destroyed.length && !collections.created.length) {\n return;\n }\n $.ajax(extend(true, {}, {\n success: function (response) {\n var responses = parseBatchResponse(response);\n var index = 0;\n var current;\n if (collections.updated.length) {\n current = responses[index];\n if (current.passed) {\n e.success(current.models.length ? current.models : [], 'update');\n }\n index++;\n }\n if (collections.destroyed.length) {\n current = responses[index];\n if (current.passed) {\n e.success([], 'destroy');\n }\n index++;\n }\n if (collections.created.length) {\n current = responses[index];\n if (current.passed) {\n e.success(current.models, 'create');\n }\n }\n },\n error: function (response, status, error) {\n e.error(response, status, error);\n }\n }, options));\n }\n }\n }\n });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.data.xml', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'data.xml',\n name: 'XML',\n category: 'framework',\n depends: ['core'],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, isArray = $.isArray, isPlainObject = $.isPlainObject, map = $.map, each = $.each, extend = $.extend, getter = kendo.getter, Class = kendo.Class;\n var XmlDataReader = Class.extend({\n init: function (options) {\n var that = this, total = options.total, model = options.model, parse = options.parse, errors = options.errors, serialize = options.serialize, data = options.data;\n if (model) {\n if (isPlainObject(model)) {\n var base = options.modelBase || kendo.data.Model;\n if (model.fields) {\n each(model.fields, function (field, value) {\n if (isPlainObject(value) && value.field) {\n if (!$.isFunction(value.field)) {\n value = extend(value, { field: that.getter(value.field) });\n }\n } else {\n value = { field: that.getter(value) };\n }\n model.fields[field] = value;\n });\n }\n var id = model.id;\n if (id) {\n var idField = {};\n idField[that.xpathToMember(id, true)] = { field: that.getter(id) };\n model.fields = extend(idField, model.fields);\n model.id = that.xpathToMember(id);\n }\n model = base.define(model);\n }\n that.model = model;\n }\n if (total) {\n if (typeof total == 'string') {\n total = that.getter(total);\n that.total = function (data) {\n return parseInt(total(data), 10);\n };\n } else if (typeof total == 'function') {\n that.total = total;\n }\n }\n if (errors) {\n if (typeof errors == 'string') {\n errors = that.getter(errors);\n that.errors = function (data) {\n return errors(data) || null;\n };\n } else if (typeof errors == 'function') {\n that.errors = errors;\n }\n }\n if (data) {\n if (typeof data == 'string') {\n data = that.xpathToMember(data);\n that.data = function (value) {\n var result = that.evaluate(value, data), modelInstance;\n result = isArray(result) ? result : [result];\n if (that.model && model.fields) {\n modelInstance = new that.model();\n return map(result, function (value) {\n if (value) {\n var record = {}, field;\n for (field in model.fields) {\n record[field] = modelInstance._parse(field, model.fields[field].field(value));\n }\n return record;\n }\n });\n }\n return result;\n };\n } else if (typeof data == 'function') {\n that.data = data;\n }\n }\n if (typeof parse == 'function') {\n var xmlParse = that.parse;\n that.parse = function (data) {\n var xml = parse.call(that, data);\n return xmlParse.call(that, xml);\n };\n }\n if (typeof serialize == 'function') {\n that.serialize = serialize;\n }\n },\n total: function (result) {\n return this.data(result).length;\n },\n errors: function (data) {\n return data ? data.errors : null;\n },\n serialize: function (data) {\n return data;\n },\n parseDOM: function (element) {\n var result = {}, parsedNode, node, nodeType, nodeName, member, attribute, attributes = element.attributes, attributeCount = attributes.length, idx;\n for (idx = 0; idx < attributeCount; idx++) {\n attribute = attributes[idx];\n result['@' + attribute.nodeName] = attribute.nodeValue;\n }\n for (node = element.firstChild; node; node = node.nextSibling) {\n nodeType = node.nodeType;\n if (nodeType === 3 || nodeType === 4) {\n result['#text'] = node.nodeValue;\n } else if (nodeType === 1) {\n parsedNode = this.parseDOM(node);\n nodeName = node.nodeName;\n member = result[nodeName];\n if (isArray(member)) {\n member.push(parsedNode);\n } else if (member !== undefined) {\n member = [\n member,\n parsedNode\n ];\n } else {\n member = parsedNode;\n }\n result[nodeName] = member;\n }\n }\n return result;\n },\n evaluate: function (value, expression) {\n var members = expression.split('.'), member, result, length, intermediateResult, idx;\n while (member = members.shift()) {\n value = value[member];\n if (isArray(value)) {\n result = [];\n expression = members.join('.');\n for (idx = 0, length = value.length; idx < length; idx++) {\n intermediateResult = this.evaluate(value[idx], expression);\n intermediateResult = isArray(intermediateResult) ? intermediateResult : [intermediateResult];\n result.push.apply(result, intermediateResult);\n }\n return result;\n }\n }\n return value;\n },\n parse: function (xml) {\n var documentElement, tree, result = {};\n documentElement = xml.documentElement || $.parseXML(xml).documentElement;\n tree = this.parseDOM(documentElement);\n result[documentElement.nodeName] = tree;\n return result;\n },\n xpathToMember: function (member, raw) {\n if (!member) {\n return '';\n }\n member = member.replace(/^\\//, '').replace(/\\//g, '.');\n if (member.indexOf('@') >= 0) {\n return member.replace(/\\.?(@.*)/, raw ? '$1' : '[\"$1\"]');\n }\n if (member.indexOf('text()') >= 0) {\n return member.replace(/(\\.?text\\(\\))/, raw ? '#text' : '[\"#text\"]');\n }\n return member;\n },\n getter: function (member) {\n return getter(this.xpathToMember(member), true);\n }\n });\n $.extend(true, kendo.data, {\n XmlDataReader: XmlDataReader,\n readers: { xml: XmlDataReader }\n });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.data', [\n 'kendo.core',\n 'kendo.data.odata',\n 'kendo.data.xml'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'data',\n name: 'Data source',\n category: 'framework',\n description: 'Powerful component for using local and remote data.Fully supports CRUD, Sorting, Paging, Filtering, Grouping, and Aggregates.',\n depends: ['core'],\n features: [\n {\n id: 'data-odata',\n name: 'OData',\n description: 'Support for accessing Open Data Protocol (OData) services.',\n depends: ['data.odata']\n },\n {\n id: 'data-signalr',\n name: 'SignalR',\n description: 'Support for binding to SignalR hubs.',\n depends: ['data.signalr']\n },\n {\n id: 'data-XML',\n name: 'XML',\n description: 'Support for binding to XML.',\n depends: ['data.xml']\n }\n ]\n };\n (function ($, undefined) {\n var extend = $.extend, proxy = $.proxy, isPlainObject = $.isPlainObject, isEmptyObject = $.isEmptyObject, isArray = $.isArray, grep = $.grep, ajax = $.ajax, map, each = $.each, noop = $.noop, kendo = window.kendo, isFunction = kendo.isFunction, Observable = kendo.Observable, Class = kendo.Class, STRING = 'string', FUNCTION = 'function', ASCENDING = 'asc', CREATE = 'create', READ = 'read', UPDATE = 'update', DESTROY = 'destroy', CHANGE = 'change', SYNC = 'sync', GET = 'get', ERROR = 'error', REQUESTSTART = 'requestStart', PROGRESS = 'progress', REQUESTEND = 'requestEnd', crud = [\n CREATE,\n READ,\n UPDATE,\n DESTROY\n ], identity = function (o) {\n return o;\n }, getter = kendo.getter, stringify = kendo.stringify, math = Math, push = [].push, join = [].join, pop = [].pop, splice = [].splice, shift = [].shift, slice = [].slice, unshift = [].unshift, toString = {}.toString, stableSort = kendo.support.stableSort, dateRegExp = /^\\/Date\\((.*?)\\)\\/$/;\n var ObservableArray = Observable.extend({\n init: function (array, type) {\n var that = this;\n that.type = type || ObservableObject;\n Observable.fn.init.call(that);\n that.length = array.length;\n that.wrapAll(array, that);\n },\n at: function (index) {\n return this[index];\n },\n toJSON: function () {\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();\n }\n json[idx] = value;\n }\n return json;\n },\n parent: noop,\n wrapAll: function (source, target) {\n var that = this, idx, length, parent = function () {\n return that;\n };\n target = target || [];\n for (idx = 0, length = source.length; idx < length; idx++) {\n target[idx] = that.wrap(source[idx], parent);\n }\n return target;\n },\n wrap: function (object, parent) {\n var that = this, observable;\n if (object !== null && toString.call(object) === '[object Object]') {\n observable = object instanceof that.type || object instanceof Model;\n if (!observable) {\n object = object instanceof ObservableObject ? object.toJSON() : object;\n object = new that.type(object);\n }\n object.parent = parent;\n object.bind(CHANGE, function (e) {\n that.trigger(CHANGE, {\n field: e.field,\n node: e.node,\n index: e.index,\n items: e.items || [this],\n action: e.node ? e.action || 'itemloaded' : 'itemchange'\n });\n });\n }\n return object;\n },\n push: function () {\n var index = this.length, items = this.wrapAll(arguments), result;\n result = push.apply(this, items);\n this.trigger(CHANGE, {\n action: 'add',\n index: index,\n items: items\n });\n return result;\n },\n slice: slice,\n sort: [].sort,\n join: join,\n pop: function () {\n var length = this.length, result = pop.apply(this);\n if (length) {\n this.trigger(CHANGE, {\n action: 'remove',\n index: length - 1,\n items: [result]\n });\n }\n return result;\n },\n splice: function (index, howMany, item) {\n var items = this.wrapAll(slice.call(arguments, 2)), result, i, len;\n result = splice.apply(this, [\n index,\n howMany\n ].concat(items));\n if (result.length) {\n this.trigger(CHANGE, {\n action: 'remove',\n index: index,\n items: result\n });\n for (i = 0, len = result.length; i < len; i++) {\n if (result[i] && result[i].children) {\n result[i].unbind(CHANGE);\n }\n }\n }\n if (item) {\n this.trigger(CHANGE, {\n action: 'add',\n index: index,\n items: items\n });\n }\n return result;\n },\n shift: function () {\n var length = this.length, result = shift.apply(this);\n if (length) {\n this.trigger(CHANGE, {\n action: 'remove',\n index: 0,\n items: [result]\n });\n }\n return result;\n },\n unshift: function () {\n var items = this.wrapAll(arguments), result;\n result = unshift.apply(this, items);\n this.trigger(CHANGE, {\n action: 'add',\n index: 0,\n items: items\n });\n return result;\n },\n indexOf: function (item) {\n var that = this, idx, length;\n for (idx = 0, length = that.length; idx < length; idx++) {\n if (that[idx] === item) {\n return idx;\n }\n }\n return -1;\n },\n forEach: function (callback, thisArg) {\n var idx = 0;\n var length = this.length;\n var context = thisArg || window;\n for (; idx < length; idx++) {\n callback.call(context, this[idx], idx, this);\n }\n },\n map: function (callback, thisArg) {\n var idx = 0;\n var result = [];\n var length = this.length;\n var context = thisArg || window;\n for (; idx < length; idx++) {\n result[idx] = callback.call(context, this[idx], idx, this);\n }\n return result;\n },\n reduce: function (callback) {\n var idx = 0, result, length = this.length;\n if (arguments.length == 2) {\n result = arguments[1];\n } else if (idx < length) {\n result = this[idx++];\n }\n for (; idx < length; idx++) {\n result = callback(result, this[idx], idx, this);\n }\n return result;\n },\n reduceRight: function (callback) {\n var idx = this.length - 1, result;\n if (arguments.length == 2) {\n result = arguments[1];\n } else if (idx > 0) {\n result = this[idx--];\n }\n for (; idx >= 0; idx--) {\n result = callback(result, this[idx], idx, this);\n }\n return result;\n },\n filter: function (callback, thisArg) {\n var idx = 0;\n var result = [];\n var item;\n var length = this.length;\n var context = thisArg || window;\n for (; idx < length; idx++) {\n item = this[idx];\n if (callback.call(context, item, idx, this)) {\n result[result.length] = item;\n }\n }\n return result;\n },\n find: function (callback, thisArg) {\n var idx = 0;\n var item;\n var length = this.length;\n var context = thisArg || window;\n for (; idx < length; idx++) {\n item = this[idx];\n if (callback.call(context, item, idx, this)) {\n return item;\n }\n }\n },\n every: function (callback, thisArg) {\n var idx = 0;\n var item;\n var length = this.length;\n var context = thisArg || window;\n for (; idx < length; idx++) {\n item = this[idx];\n if (!callback.call(context, item, idx, this)) {\n return false;\n }\n }\n return true;\n },\n some: function (callback, thisArg) {\n var idx = 0;\n var item;\n var length = this.length;\n var context = thisArg || window;\n for (; idx < length; idx++) {\n item = this[idx];\n if (callback.call(context, item, idx, this)) {\n return true;\n }\n }\n return false;\n },\n remove: function (item) {\n var idx = this.indexOf(item);\n if (idx !== -1) {\n this.splice(idx, 1);\n }\n },\n empty: function () {\n this.splice(0, this.length);\n }\n });\n if (typeof Symbol !== 'undefined' && Symbol.iterator && !ObservableArray.prototype[Symbol.iterator]) {\n ObservableArray.prototype[Symbol.iterator] = [][Symbol.iterator];\n }\n var LazyObservableArray = ObservableArray.extend({\n init: function (data, type, events) {\n Observable.fn.init.call(this);\n this.type = type || ObservableObject;\n if (events) {\n this._events = events;\n }\n for (var idx = 0; idx < data.length; idx++) {\n this[idx] = data[idx];\n }\n this.length = idx;\n this._parent = proxy(function () {\n return this;\n }, this);\n },\n at: function (index) {\n var item = this[index];\n if (!(item instanceof this.type)) {\n item = this[index] = this.wrap(item, this._parent);\n } else {\n item.parent = this._parent;\n }\n return item;\n }\n });\n function eventHandler(context, type, field, prefix) {\n return function (e) {\n var event = {}, key;\n for (key in e) {\n event[key] = e[key];\n }\n if (prefix) {\n event.field = field + '.' + e.field;\n } else {\n event.field = field;\n }\n if (type == CHANGE && context._notifyChange) {\n context._notifyChange(event);\n }\n context.trigger(type, event);\n };\n }\n var ObservableObject = Observable.extend({\n init: function (value) {\n var that = this, member, field, parent = function () {\n return that;\n };\n Observable.fn.init.call(this);\n this._handlers = {};\n for (field in value) {\n member = value[field];\n if (typeof member === 'object' && member && !member.getTime && field.charAt(0) != '_') {\n member = that.wrap(member, field, parent);\n }\n that[field] = member;\n }\n that.uid = kendo.guid();\n },\n shouldSerialize: function (field) {\n return this.hasOwnProperty(field) && field !== '_handlers' && field !== '_events' && 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 () {\n var result = {}, value, field;\n for (field in this) {\n if (this.shouldSerialize(field)) {\n value = this[field];\n if (value instanceof ObservableObject || value instanceof ObservableArray) {\n value = value.toJSON();\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, initiator) {\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, initiator) && !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 var operatorMap = {\n '==': 'eq',\n equals: 'eq',\n isequalto: 'eq',\n equalto: 'eq',\n equal: 'eq',\n '!=': 'neq',\n ne: 'neq',\n notequals: 'neq',\n isnotequalto: 'neq',\n notequalto: 'neq',\n notequal: 'neq',\n '<': 'lt',\n islessthan: 'lt',\n lessthan: 'lt',\n less: 'lt',\n '<=': 'lte',\n le: 'lte',\n islessthanorequalto: 'lte',\n lessthanequal: 'lte',\n '>': 'gt',\n isgreaterthan: 'gt',\n greaterthan: 'gt',\n greater: 'gt',\n '>=': 'gte',\n isgreaterthanorequalto: 'gte',\n greaterthanequal: 'gte',\n ge: 'gte',\n notsubstringof: 'doesnotcontain',\n isnull: 'isnull',\n isempty: 'isempty',\n isnotempty: 'isnotempty'\n };\n function normalizeOperator(expression) {\n var idx, length, filter, operator, filters = expression.filters;\n if (filters) {\n for (idx = 0, length = filters.length; idx < length; idx++) {\n filter = filters[idx];\n operator = filter.operator;\n if (operator && typeof operator === STRING) {\n filter.operator = operatorMap[operator.toLowerCase()] || operator;\n }\n normalizeOperator(filter);\n }\n }\n }\n function normalizeFilter(expression) {\n if (expression && !isEmptyObject(expression)) {\n if (isArray(expression) || !expression.filters) {\n expression = {\n logic: 'and',\n filters: isArray(expression) ? expression : [expression]\n };\n }\n normalizeOperator(expression);\n return expression;\n }\n }\n Query.normalizeFilter = normalizeFilter;\n function compareDescriptor(f1, f2) {\n if (f1.logic || f2.logic) {\n return false;\n }\n return f1.field === f2.field && f1.value === f2.value && f1.operator === f2.operator;\n }\n function normalizeDescriptor(filter) {\n filter = filter || {};\n if (isEmptyObject(filter)) {\n return {\n logic: 'and',\n filters: []\n };\n }\n return normalizeFilter(filter);\n }\n function fieldComparer(a, b) {\n if (b.logic || a.field > b.field) {\n return 1;\n } else if (a.field < b.field) {\n return -1;\n } else {\n return 0;\n }\n }\n function compareFilters(expr1, expr2) {\n expr1 = normalizeDescriptor(expr1);\n expr2 = normalizeDescriptor(expr2);\n if (expr1.logic !== expr2.logic) {\n return false;\n }\n var f1, f2;\n var filters1 = (expr1.filters || []).slice();\n var filters2 = (expr2.filters || []).slice();\n if (filters1.length !== filters2.length) {\n return false;\n }\n filters1 = filters1.sort(fieldComparer);\n filters2 = filters2.sort(fieldComparer);\n for (var idx = 0; idx < filters1.length; idx++) {\n f1 = filters1[idx];\n f2 = filters2[idx];\n if (f1.logic && f2.logic) {\n if (!compareFilters(f1, f2)) {\n return false;\n }\n } else if (!compareDescriptor(f1, f2)) {\n return false;\n }\n }\n return true;\n }\n Query.compareFilters = compareFilters;\n function normalizeAggregate(expressions) {\n return isArray(expressions) ? expressions : [expressions];\n }\n function normalizeGroup(field, dir, compare, skipItemSorting) {\n var descriptor = typeof field === STRING ? {\n field: field,\n dir: dir,\n compare: compare,\n skipItemSorting: skipItemSorting\n } : field, descriptors = isArray(descriptor) ? descriptor : descriptor !== undefined ? [descriptor] : [];\n return map(descriptors, function (d) {\n return {\n field: d.field,\n dir: d.dir || 'asc',\n aggregates: d.aggregates,\n compare: d.compare,\n skipItemSorting: d.skipItemSorting\n };\n });\n }\n function normalizeGroupWithoutCompare(field, dir, compare) {\n var descriptors = normalizeGroup(field, dir, compare);\n for (var i = 0; i < descriptors.length; i++) {\n delete descriptors[i].compare;\n }\n return descriptors;\n }\n function anyGroupDescriptorHasCompare(groupDescriptors) {\n var descriptors = isArray(groupDescriptors) ? groupDescriptors : [groupDescriptors];\n for (var i = 0; i < descriptors.length; i++) {\n if (descriptors[i] && isFunction(descriptors[i].compare)) {\n return true;\n }\n }\n return false;\n }\n Query.prototype = {\n toArray: function () {\n return this.data;\n },\n range: function (index, count) {\n return new Query(this.data.slice(index, index + count));\n },\n skip: function (count) {\n return new Query(this.data.slice(count));\n },\n take: function (count) {\n return new Query(this.data.slice(0, count));\n },\n select: function (selector) {\n return new Query(map(this.data, selector));\n },\n order: function (selector, dir, inPlace) {\n var sort = { dir: dir };\n if (selector) {\n if (selector.compare) {\n sort.compare = selector.compare;\n } else {\n sort.field = selector;\n }\n }\n if (inPlace) {\n return new Query(this.data.sort(Comparer.create(sort)));\n }\n return new Query(this.data.slice(0).sort(Comparer.create(sort)));\n },\n orderBy: function (selector, inPlace) {\n return this.order(selector, 'asc', inPlace);\n },\n orderByDescending: function (selector, inPlace) {\n return this.order(selector, 'desc', inPlace);\n },\n sort: function (field, dir, comparer, inPlace) {\n var idx, length, descriptors = normalizeSort(field, dir), comparers = [];\n comparer = comparer || Comparer;\n if (descriptors.length) {\n for (idx = 0, length = descriptors.length; idx < length; idx++) {\n comparers.push(comparer.create(descriptors[idx]));\n }\n return this.orderBy({ compare: comparer.combine(comparers) }, inPlace);\n }\n return this;\n },\n filter: function (expressions) {\n var idx, current, length, compiled, predicate, data = this.data, fields, operators, result = [], filter;\n expressions = normalizeFilter(expressions);\n if (!expressions || expressions.filters.length === 0) {\n return this;\n }\n compiled = Query.filterExpr(expressions);\n fields = compiled.fields;\n operators = compiled.operators;\n predicate = filter = new Function('d, __f, __o', 'return ' + compiled.expression);\n if (fields.length || operators.length) {\n filter = function (d) {\n return predicate(d, fields, operators);\n };\n }\n for (idx = 0, length = data.length; idx < length; idx++) {\n current = data[idx];\n if (filter(current)) {\n result.push(current);\n }\n }\n return new Query(result);\n },\n group: function (descriptors, allData) {\n descriptors = normalizeGroup(descriptors || []);\n allData = allData || this.data;\n var that = this, result = new Query(that.data), descriptor;\n if (descriptors.length > 0) {\n descriptor = descriptors[0];\n result = result.groupBy(descriptor).select(function (group) {\n var data = new Query(allData).filter([{\n field: group.field,\n operator: 'eq',\n value: group.value,\n ignoreCase: false\n }]);\n return {\n field: group.field,\n value: group.value,\n items: descriptors.length > 1 ? new Query(group.items).group(descriptors.slice(1), data.toArray()).toArray() : group.items,\n hasSubgroups: descriptors.length > 1,\n aggregates: data.aggregate(descriptor.aggregates)\n };\n });\n }\n return result;\n },\n groupBy: function (descriptor) {\n var that = this;\n if (isEmptyObject(descriptor) || !this.data.length) {\n return new Query([]);\n }\n var field = descriptor.field, sorted = descriptor.skipItemSorting ? this.data : this._sortForGrouping(field, descriptor.dir || 'asc'), accessor = kendo.accessor(field), item, groupValue = accessor.get(sorted[0], field), group = {\n field: field,\n value: groupValue,\n items: []\n }, currentValue, idx, len, result = [group];\n for (idx = 0, len = sorted.length; idx < len; idx++) {\n item = sorted[idx];\n currentValue = accessor.get(item, field);\n if (!groupValueComparer(groupValue, currentValue)) {\n groupValue = currentValue;\n group = {\n field: field,\n value: groupValue,\n items: []\n };\n result.push(group);\n }\n group.items.push(item);\n }\n result = that._sortGroups(result, descriptor);\n return new Query(result);\n },\n _sortForGrouping: function (field, dir) {\n var idx, length, data = this.data;\n if (!stableSort) {\n for (idx = 0, length = data.length; idx < length; idx++) {\n data[idx].__position = idx;\n }\n data = new Query(data).sort(field, dir, StableComparer).toArray();\n for (idx = 0, length = data.length; idx < length; idx++) {\n delete data[idx].__position;\n }\n return data;\n }\n return this.sort(field, dir).toArray();\n },\n _sortGroups: function (groups, descriptor) {\n var result = groups;\n if (descriptor && isFunction(descriptor.compare)) {\n result = new Query(result).order({ compare: descriptor.compare }, descriptor.dir || ASCENDING).toArray();\n }\n return result;\n },\n aggregate: function (aggregates) {\n var idx, len, result = {}, state = {};\n if (aggregates && aggregates.length) {\n for (idx = 0, len = this.data.length; idx < len; idx++) {\n calculateAggregate(result, aggregates, this.data[idx], idx, len, state);\n }\n }\n return result;\n }\n };\n function groupValueComparer(a, b) {\n if (a && a.getTime && b && b.getTime) {\n return a.getTime() === b.getTime();\n }\n return a === b;\n }\n function calculateAggregate(accumulator, aggregates, item, index, length, state) {\n aggregates = aggregates || [];\n var idx, aggr, functionName, len = aggregates.length;\n for (idx = 0; idx < len; idx++) {\n aggr = aggregates[idx];\n functionName = aggr.aggregate;\n var field = aggr.field;\n accumulator[field] = accumulator[field] || {};\n state[field] = state[field] || {};\n state[field][functionName] = state[field][functionName] || {};\n accumulator[field][functionName] = functions[functionName.toLowerCase()](accumulator[field][functionName], item, kendo.accessor(field), index, length, state[field][functionName]);\n }\n }\n var functions = {\n sum: function (accumulator, item, accessor) {\n var value = accessor.get(item);\n if (!isNumber(accumulator)) {\n accumulator = value;\n } else if (isNumber(value)) {\n accumulator += value;\n }\n return accumulator;\n },\n count: function (accumulator) {\n return (accumulator || 0) + 1;\n },\n average: function (accumulator, item, accessor, index, length, state) {\n var value = accessor.get(item);\n if (state.count === undefined) {\n state.count = 0;\n }\n if (!isNumber(accumulator)) {\n accumulator = value;\n } else if (isNumber(value)) {\n accumulator += value;\n }\n if (isNumber(value)) {\n state.count++;\n }\n if (index == length - 1 && isNumber(accumulator)) {\n accumulator = accumulator / state.count;\n }\n return accumulator;\n },\n max: function (accumulator, item, accessor) {\n var value = accessor.get(item);\n if (!isNumber(accumulator) && !isDate(accumulator)) {\n accumulator = value;\n }\n if (accumulator < value && (isNumber(value) || isDate(value))) {\n accumulator = value;\n }\n return accumulator;\n },\n min: function (accumulator, item, accessor) {\n var value = accessor.get(item);\n if (!isNumber(accumulator) && !isDate(accumulator)) {\n accumulator = value;\n }\n if (accumulator > value && (isNumber(value) || isDate(value))) {\n accumulator = value;\n }\n return accumulator;\n }\n };\n function isNumber(val) {\n return typeof val === 'number' && !isNaN(val);\n }\n function isDate(val) {\n return val && val.getTime;\n }\n function toJSON(array) {\n var idx, length = array.length, result = new Array(length);\n for (idx = 0; idx < length; idx++) {\n result[idx] = array[idx].toJSON();\n }\n return result;\n }\n Query.normalizeGroup = normalizeGroup;\n Query.normalizeSort = normalizeSort;\n Query.process = function (data, options, inPlace) {\n options = options || {};\n var group = options.group;\n var customGroupSort = anyGroupDescriptorHasCompare(normalizeGroup(group || []));\n var query = new Query(data), groupDescriptorsWithoutCompare = normalizeGroupWithoutCompare(group || []), normalizedSort = normalizeSort(options.sort || []), sort = customGroupSort ? normalizedSort : groupDescriptorsWithoutCompare.concat(normalizedSort), groupDescriptorsWithoutSort, total, filterCallback = options.filterCallback, filter = options.filter, skip = options.skip, take = options.take;\n if (sort && inPlace) {\n query = query.sort(sort, undefined, undefined, inPlace);\n }\n if (filter) {\n query = query.filter(filter);\n if (filterCallback) {\n query = filterCallback(query);\n }\n total = query.toArray().length;\n }\n if (sort && !inPlace) {\n query = query.sort(sort);\n if (group) {\n data = query.toArray();\n }\n }\n if (customGroupSort) {\n query = query.group(group, data);\n if (skip !== undefined && take !== undefined) {\n query = new Query(flatGroups(query.toArray())).range(skip, take);\n groupDescriptorsWithoutSort = map(groupDescriptorsWithoutCompare, function (groupDescriptor) {\n return extend({}, groupDescriptor, { skipItemSorting: true });\n });\n query = query.group(groupDescriptorsWithoutSort, data);\n }\n } else {\n if (skip !== undefined && take !== undefined) {\n query = query.range(skip, take);\n }\n if (group) {\n query = query.group(group, data);\n }\n }\n return {\n total: total,\n data: query.toArray()\n };\n };\n var LocalTransport = Class.extend({\n init: function (options) {\n this.data = options.data;\n },\n read: function (options) {\n options.success(this.data);\n },\n update: function (options) {\n options.success(options.data);\n },\n create: function (options) {\n options.success(options.data);\n },\n destroy: function (options) {\n options.success(options.data);\n }\n });\n var RemoteTransport = Class.extend({\n init: function (options) {\n var that = this, parameterMap;\n options = that.options = extend({}, that.options, options);\n each(crud, function (index, type) {\n if (typeof options[type] === STRING) {\n options[type] = { url: options[type] };\n }\n });\n that.cache = options.cache ? Cache.create(options.cache) : {\n find: noop,\n add: noop\n };\n parameterMap = options.parameterMap;\n if (options.submit) {\n that.submit = options.submit;\n }\n if (isFunction(options.push)) {\n that.push = options.push;\n }\n if (!that.push) {\n that.push = identity;\n }\n that.parameterMap = isFunction(parameterMap) ? parameterMap : function (options) {\n var result = {};\n each(options, function (option, value) {\n if (option in parameterMap) {\n option = parameterMap[option];\n if (isPlainObject(option)) {\n value = option.value(value);\n option = option.key;\n }\n }\n result[option] = value;\n });\n return result;\n };\n },\n options: { parameterMap: identity },\n create: function (options) {\n return ajax(this.setup(options, CREATE));\n },\n read: function (options) {\n var that = this, success, error, result, cache = that.cache;\n options = that.setup(options, READ);\n success = options.success || noop;\n error = options.error || noop;\n result = cache.find(options.data);\n if (result !== undefined) {\n success(result);\n } else {\n options.success = function (result) {\n cache.add(options.data, result);\n success(result);\n };\n $.ajax(options);\n }\n },\n update: function (options) {\n return ajax(this.setup(options, UPDATE));\n },\n destroy: function (options) {\n return ajax(this.setup(options, DESTROY));\n },\n setup: function (options, type) {\n options = options || {};\n var that = this, parameters, operation = that.options[type], data = isFunction(operation.data) ? operation.data(options.data) : operation.data;\n options = extend(true, {}, operation, options);\n parameters = extend(true, {}, data, options.data);\n options.data = that.parameterMap(parameters, type);\n if (isFunction(options.url)) {\n options.url = options.url(parameters);\n }\n return options;\n }\n });\n var Cache = Class.extend({\n init: function () {\n this._store = {};\n },\n add: function (key, data) {\n if (key !== undefined) {\n this._store[stringify(key)] = data;\n }\n },\n find: function (key) {\n return this._store[stringify(key)];\n },\n clear: function () {\n this._store = {};\n },\n remove: function (key) {\n delete this._store[stringify(key)];\n }\n });\n Cache.create = function (options) {\n var store = {\n 'inmemory': function () {\n return new Cache();\n }\n };\n if (isPlainObject(options) && isFunction(options.find)) {\n return options;\n }\n if (options === true) {\n return new Cache();\n }\n return store[options]();\n };\n function serializeRecords(data, getters, modelInstance, originalFieldNames, fieldNames) {\n var record, getter, originalName, idx, setters = {}, length;\n for (idx = 0, length = data.length; idx < length; idx++) {\n record = data[idx];\n for (getter in getters) {\n originalName = fieldNames[getter];\n if (originalName && originalName !== getter) {\n if (!setters[originalName]) {\n setters[originalName] = kendo.setter(originalName);\n }\n setters[originalName](record, getters[getter](record));\n delete record[getter];\n }\n }\n }\n }\n function convertRecords(data, getters, modelInstance, originalFieldNames, fieldNames) {\n var record, getter, originalName, idx, length;\n for (idx = 0, length = data.length; idx < length; idx++) {\n record = data[idx];\n for (getter in getters) {\n record[getter] = modelInstance._parse(getter, getters[getter](record));\n originalName = fieldNames[getter];\n if (originalName && originalName !== getter) {\n delete record[originalName];\n }\n }\n }\n }\n function convertGroup(data, getters, modelInstance, originalFieldNames, fieldNames) {\n var record, idx, fieldName, length;\n for (idx = 0, length = data.length; idx < length; idx++) {\n record = data[idx];\n fieldName = originalFieldNames[record.field];\n if (fieldName && fieldName != record.field) {\n record.field = fieldName;\n }\n record.value = modelInstance._parse(record.field, record.value);\n if (record.hasSubgroups) {\n convertGroup(record.items, getters, modelInstance, originalFieldNames, fieldNames);\n } else {\n convertRecords(record.items, getters, modelInstance, originalFieldNames, fieldNames);\n }\n }\n }\n function wrapDataAccess(originalFunction, model, converter, getters, originalFieldNames, fieldNames) {\n return function (data) {\n data = originalFunction(data);\n return wrapDataAccessBase(model, converter, getters, originalFieldNames, fieldNames)(data);\n };\n }\n function wrapDataAccessBase(model, converter, getters, originalFieldNames, fieldNames) {\n return function (data) {\n if (data && !isEmptyObject(getters)) {\n if (toString.call(data) !== '[object Array]' && !(data instanceof ObservableArray)) {\n data = [data];\n }\n converter(data, getters, new model(), originalFieldNames, fieldNames);\n }\n return data || [];\n };\n }\n var DataReader = Class.extend({\n init: function (schema) {\n var that = this, member, get, model, base;\n schema = schema || {};\n for (member in schema) {\n get = schema[member];\n that[member] = typeof get === STRING ? getter(get) : get;\n }\n base = schema.modelBase || Model;\n if (isPlainObject(that.model)) {\n that.model = model = base.define(that.model);\n }\n var dataFunction = proxy(that.data, that);\n that._dataAccessFunction = dataFunction;\n if (that.model) {\n var groupsFunction = proxy(that.groups, that), serializeFunction = proxy(that.serialize, that), originalFieldNames = {}, getters = {}, serializeGetters = {}, fieldNames = {}, shouldSerialize = false, fieldName, name;\n model = that.model;\n if (model.fields) {\n each(model.fields, function (field, value) {\n var fromName;\n fieldName = field;\n if (isPlainObject(value) && value.field) {\n fieldName = value.field;\n } else if (typeof value === STRING) {\n fieldName = value;\n }\n if (isPlainObject(value) && value.from) {\n fromName = value.from;\n }\n shouldSerialize = shouldSerialize || fromName && fromName !== field || fieldName !== field;\n name = fromName || fieldName;\n getters[field] = name.indexOf('.') !== -1 ? getter(name, true) : getter(name);\n serializeGetters[field] = getter(field);\n originalFieldNames[fromName || fieldName] = field;\n fieldNames[field] = fromName || fieldName;\n });\n if (!schema.serialize && shouldSerialize) {\n that.serialize = wrapDataAccess(serializeFunction, model, serializeRecords, serializeGetters, originalFieldNames, fieldNames);\n }\n }\n that._dataAccessFunction = dataFunction;\n that._wrapDataAccessBase = wrapDataAccessBase(model, convertRecords, getters, originalFieldNames, fieldNames);\n that.data = wrapDataAccess(dataFunction, model, convertRecords, getters, originalFieldNames, fieldNames);\n that.groups = wrapDataAccess(groupsFunction, model, convertGroup, getters, originalFieldNames, fieldNames);\n }\n },\n errors: function (data) {\n return data ? data.errors : null;\n },\n parse: identity,\n data: identity,\n total: function (data) {\n return data.length;\n },\n groups: identity,\n aggregates: function () {\n return {};\n },\n serialize: function (data) {\n return data;\n }\n });\n function fillLastGroup(originalGroup, newGroup) {\n var currOriginal;\n var currentNew;\n if (newGroup.items && newGroup.items.length) {\n for (var i = 0; i < newGroup.items.length; i++) {\n currOriginal = originalGroup.items[i];\n currentNew = newGroup.items[i];\n if (currOriginal && currentNew) {\n if (currOriginal.hasSubgroups) {\n fillLastGroup(currOriginal, currentNew);\n } else if (currOriginal.field && currOriginal.value == currentNew.value) {\n currOriginal.items.push.apply(currOriginal.items, currentNew.items);\n } else {\n originalGroup.items.push.apply(originalGroup.items, [currentNew]);\n }\n } else if (currentNew) {\n originalGroup.items.push.apply(originalGroup.items, [currentNew]);\n }\n }\n }\n }\n function mergeGroups(target, dest, skip, take) {\n var group, idx = 0, items;\n while (dest.length && take) {\n group = dest[idx];\n items = group.items;\n var length = items.length;\n if (target && target.field === group.field && target.value === group.value) {\n if (target.hasSubgroups && target.items.length) {\n mergeGroups(target.items[target.items.length - 1], group.items, skip, take);\n } else {\n items = items.slice(skip, skip + take);\n target.items = target.items.concat(items);\n }\n dest.splice(idx--, 1);\n } else if (group.hasSubgroups && items.length) {\n mergeGroups(group, items, skip, take);\n if (!group.items.length) {\n dest.splice(idx--, 1);\n }\n } else {\n items = items.slice(skip, skip + take);\n group.items = items;\n if (!group.items.length) {\n dest.splice(idx--, 1);\n }\n }\n if (items.length === 0) {\n skip -= length;\n } else {\n skip = 0;\n take -= items.length;\n }\n if (++idx >= dest.length) {\n break;\n }\n }\n if (idx < dest.length) {\n dest.splice(idx, dest.length - idx);\n }\n }\n function flatGroups(groups, indexFunction) {\n var result = [];\n var groupsLength = (groups || []).length;\n var group;\n var items;\n var indexFn = isFunction(indexFunction) ? indexFunction : function (array, index) {\n return array[index];\n };\n for (var groupIndex = 0; groupIndex < groupsLength; groupIndex++) {\n group = indexFn(groups, groupIndex);\n if (group.hasSubgroups) {\n result = result.concat(flatGroups(group.items));\n } else {\n items = group.items;\n for (var itemIndex = 0; itemIndex < items.length; itemIndex++) {\n result.push(indexFn(items, itemIndex));\n }\n }\n }\n return result;\n }\n function flattenGroups(data) {\n var idx, result = [], length, items, itemIndex;\n for (idx = 0, length = data.length; idx < length; idx++) {\n var group = data.at(idx);\n if (group.hasSubgroups) {\n result = result.concat(flattenGroups(group.items));\n } else {\n items = group.items;\n for (itemIndex = 0; itemIndex < items.length; itemIndex++) {\n result.push(items.at(itemIndex));\n }\n }\n }\n return result;\n }\n function wrapGroupItems(data, model) {\n var idx, length, group;\n if (model) {\n for (idx = 0, length = data.length; idx < length; idx++) {\n group = data.at(idx);\n if (group.hasSubgroups) {\n wrapGroupItems(group.items, model);\n } else {\n group.items = new LazyObservableArray(group.items, model, group.items._events);\n }\n }\n }\n }\n function eachGroupItems(data, func) {\n for (var idx = 0; idx < data.length; idx++) {\n if (data[idx].hasSubgroups) {\n if (eachGroupItems(data[idx].items, func)) {\n return true;\n }\n } else if (func(data[idx].items, data[idx])) {\n return true;\n }\n }\n }\n function replaceInRanges(ranges, data, item, observable) {\n for (var idx = 0; idx < ranges.length; idx++) {\n if (ranges[idx].data === data) {\n break;\n }\n if (replaceInRange(ranges[idx].data, item, observable)) {\n break;\n }\n }\n }\n function replaceInRange(items, item, observable) {\n for (var idx = 0, length = items.length; idx < length; idx++) {\n if (items[idx] && items[idx].hasSubgroups) {\n return replaceInRange(items[idx].items, item, observable);\n } else if (items[idx] === item || items[idx] === observable) {\n items[idx] = observable;\n return true;\n }\n }\n }\n function replaceWithObservable(view, data, ranges, type, serverGrouping) {\n for (var viewIndex = 0, length = view.length; viewIndex < length; viewIndex++) {\n var item = view[viewIndex];\n if (!item || item instanceof type) {\n continue;\n }\n if (item.hasSubgroups !== undefined && !serverGrouping) {\n replaceWithObservable(item.items, data, ranges, type, serverGrouping);\n } else {\n for (var idx = 0; idx < data.length; idx++) {\n if (data[idx] === item) {\n view[viewIndex] = data.at(idx);\n replaceInRanges(ranges, data, item, view[viewIndex]);\n break;\n }\n }\n }\n }\n }\n function removeModel(data, model) {\n var length = data.length;\n var dataItem;\n var idx;\n for (idx = 0; idx < length; idx++) {\n dataItem = data[idx];\n if (dataItem.uid && dataItem.uid == model.uid) {\n data.splice(idx, 1);\n return dataItem;\n }\n }\n }\n function indexOfPristineModel(data, model) {\n if (model) {\n return indexOf(data, function (item) {\n return item.uid && item.uid == model.uid || item[model.idField] === model.id && model.id !== model._defaultId;\n });\n }\n return -1;\n }\n function indexOfModel(data, model) {\n if (model) {\n return indexOf(data, function (item) {\n return item.uid == model.uid;\n });\n }\n return -1;\n }\n function indexOf(data, comparer) {\n var idx, length;\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (comparer(data[idx])) {\n return idx;\n }\n }\n return -1;\n }\n function fieldNameFromModel(fields, name) {\n if (fields && !isEmptyObject(fields)) {\n var descriptor = fields[name];\n var fieldName;\n if (isPlainObject(descriptor)) {\n fieldName = descriptor.from || descriptor.field || name;\n } else {\n fieldName = fields[name] || name;\n }\n if (isFunction(fieldName)) {\n return name;\n }\n return fieldName;\n }\n return name;\n }\n function convertFilterDescriptorsField(descriptor, model) {\n var idx, length, target = {};\n for (var field in descriptor) {\n if (field !== 'filters') {\n target[field] = descriptor[field];\n }\n }\n if (descriptor.filters) {\n target.filters = [];\n for (idx = 0, length = descriptor.filters.length; idx < length; idx++) {\n target.filters[idx] = convertFilterDescriptorsField(descriptor.filters[idx], model);\n }\n } else {\n target.field = fieldNameFromModel(model.fields, target.field);\n }\n return target;\n }\n function convertDescriptorsField(descriptors, model) {\n var idx, length, result = [], target, descriptor;\n for (idx = 0, length = descriptors.length; idx < length; idx++) {\n target = {};\n descriptor = descriptors[idx];\n for (var field in descriptor) {\n target[field] = descriptor[field];\n }\n target.field = fieldNameFromModel(model.fields, target.field);\n if (target.aggregates && isArray(target.aggregates)) {\n target.aggregates = convertDescriptorsField(target.aggregates, model);\n }\n result.push(target);\n }\n return result;\n }\n var DataSource = Observable.extend({\n init: function (options) {\n var that = this, model, data;\n if (options) {\n data = options.data;\n }\n options = that.options = extend({}, that.options, options);\n that._map = {};\n that._prefetch = {};\n that._data = [];\n that._pristineData = [];\n that._ranges = [];\n that._view = [];\n that._pristineTotal = 0;\n that._destroyed = [];\n that._pageSize = options.pageSize;\n that._page = options.page || (options.pageSize ? 1 : undefined);\n that._sort = normalizeSort(options.sort);\n that._filter = normalizeFilter(options.filter);\n that._group = normalizeGroup(options.group);\n that._aggregate = options.aggregate;\n that._total = options.total;\n that._shouldDetachObservableParents = true;\n Observable.fn.init.call(that);\n that.transport = Transport.create(options, data, that);\n if (isFunction(that.transport.push)) {\n that.transport.push({\n pushCreate: proxy(that._pushCreate, that),\n pushUpdate: proxy(that._pushUpdate, that),\n pushDestroy: proxy(that._pushDestroy, that)\n });\n }\n if (options.offlineStorage != null) {\n if (typeof options.offlineStorage == 'string') {\n var key = options.offlineStorage;\n that._storage = {\n getItem: function () {\n return JSON.parse(localStorage.getItem(key));\n },\n setItem: function (item) {\n localStorage.setItem(key, stringify(that.reader.serialize(item)));\n }\n };\n } else {\n that._storage = options.offlineStorage;\n }\n }\n that.reader = new kendo.data.readers[options.schema.type || 'json'](options.schema);\n model = that.reader.model || {};\n that._detachObservableParents();\n that._data = that._observe(that._data);\n that._online = true;\n that.bind([\n 'push',\n ERROR,\n CHANGE,\n REQUESTSTART,\n SYNC,\n REQUESTEND,\n PROGRESS\n ], options);\n },\n options: {\n data: null,\n schema: { modelBase: Model },\n offlineStorage: null,\n serverSorting: false,\n serverPaging: false,\n serverFiltering: false,\n serverGrouping: false,\n serverAggregates: false,\n batch: false,\n inPlaceSort: false\n },\n clone: function () {\n return this;\n },\n online: function (value) {\n if (value !== undefined) {\n if (this._online != value) {\n this._online = value;\n if (value) {\n return this.sync();\n }\n }\n return $.Deferred().resolve().promise();\n } else {\n return this._online;\n }\n },\n offlineData: function (state) {\n if (this.options.offlineStorage == null) {\n return null;\n }\n if (state !== undefined) {\n return this._storage.setItem(state);\n }\n return this._storage.getItem() || [];\n },\n _isServerGrouped: function () {\n var group = this.group() || [];\n return this.options.serverGrouping && group.length;\n },\n _pushCreate: function (result) {\n this._push(result, 'pushCreate');\n },\n _pushUpdate: function (result) {\n this._push(result, 'pushUpdate');\n },\n _pushDestroy: function (result) {\n this._push(result, 'pushDestroy');\n },\n _push: function (result, operation) {\n var data = this._readData(result);\n if (!data) {\n data = result;\n }\n this[operation](data);\n },\n _flatData: function (data, skip) {\n if (data) {\n if (this._isServerGrouped()) {\n return flattenGroups(data);\n }\n if (!skip) {\n for (var idx = 0; idx < data.length; idx++) {\n data.at(idx);\n }\n }\n }\n return data;\n },\n parent: noop,\n get: function (id) {\n var idx, length, data = this._flatData(this._data, this.options.useRanges);\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (data[idx].id == id) {\n return data[idx];\n }\n }\n },\n getByUid: function (id) {\n return this._getByUid(id, this._data);\n },\n _getByUid: function (id, dataItems) {\n var idx, length, data = this._flatData(dataItems, this.options.useRanges);\n if (!data) {\n return;\n }\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (data[idx].uid == id) {\n return data[idx];\n }\n }\n },\n indexOf: function (model) {\n return indexOfModel(this._data, model);\n },\n at: function (index) {\n return this._data.at(index);\n },\n data: function (value) {\n var that = this;\n if (value !== undefined) {\n that._detachObservableParents();\n that._data = this._observe(value);\n that._pristineData = value.slice(0);\n that._storeData();\n that._ranges = [];\n that.trigger('reset');\n that._addRange(that._data);\n that._total = that._data.length;\n that._pristineTotal = that._total;\n that._process(that._data);\n } else {\n if (that._data) {\n for (var idx = 0; idx < that._data.length; idx++) {\n that._data.at(idx);\n }\n }\n return that._data;\n }\n },\n view: function (value) {\n if (value === undefined) {\n return this._view;\n } else {\n this._view = this._observeView(value);\n }\n },\n _observeView: function (data) {\n var that = this;\n replaceWithObservable(data, that._data, that._ranges, that.reader.model || ObservableObject, that._isServerGrouped());\n var view = new LazyObservableArray(data, that.reader.model);\n view.parent = function () {\n return that.parent();\n };\n return view;\n },\n flatView: function () {\n var groups = this.group() || [];\n if (groups.length) {\n return flattenGroups(this._view);\n } else {\n return this._view;\n }\n },\n add: function (model) {\n return this.insert(this._data.length, model);\n },\n _createNewModel: function (model) {\n if (this.reader.model) {\n return new this.reader.model(model);\n }\n if (model instanceof ObservableObject) {\n return model;\n }\n return new ObservableObject(model);\n },\n insert: function (index, model) {\n if (!model) {\n model = index;\n index = 0;\n }\n if (!(model instanceof Model)) {\n model = this._createNewModel(model);\n }\n if (this._isServerGrouped()) {\n this._data.splice(index, 0, this._wrapInEmptyGroup(model));\n } else {\n this._data.splice(index, 0, model);\n }\n this._insertModelInRange(index, model);\n return model;\n },\n pushInsert: function (index, items) {\n var that = this;\n var rangeSpan = that._getCurrentRangeSpan();\n if (!items) {\n items = index;\n index = 0;\n }\n if (!isArray(items)) {\n items = [items];\n }\n var pushed = [];\n var autoSync = this.options.autoSync;\n this.options.autoSync = false;\n try {\n for (var idx = 0; idx < items.length; idx++) {\n var item = items[idx];\n var result = this.insert(index, item);\n pushed.push(result);\n var pristine = result.toJSON();\n if (this._isServerGrouped()) {\n pristine = this._wrapInEmptyGroup(pristine);\n }\n this._pristineData.push(pristine);\n if (rangeSpan && rangeSpan.length) {\n $(rangeSpan).last()[0].pristineData.push(pristine);\n }\n index++;\n }\n } finally {\n this.options.autoSync = autoSync;\n }\n if (pushed.length) {\n this.trigger('push', {\n type: 'create',\n items: pushed\n });\n }\n },\n pushCreate: function (items) {\n this.pushInsert(this._data.length, items);\n },\n pushUpdate: function (items) {\n if (!isArray(items)) {\n items = [items];\n }\n var pushed = [];\n for (var idx = 0; idx < items.length; idx++) {\n var item = items[idx];\n var model = this._createNewModel(item);\n var target = this.get(model.id);\n if (target) {\n pushed.push(target);\n target.accept(item);\n target.trigger(CHANGE);\n this._updatePristineForModel(target, item);\n } else {\n this.pushCreate(item);\n }\n }\n if (pushed.length) {\n this.trigger('push', {\n type: 'update',\n items: pushed\n });\n }\n },\n pushDestroy: function (items) {\n var pushed = this._removeItems(items);\n if (pushed.length) {\n this.trigger('push', {\n type: 'destroy',\n items: pushed\n });\n }\n },\n _removeItems: function (items, removePristine) {\n if (!isArray(items)) {\n items = [items];\n }\n var shouldRemovePristine = typeof removePristine !== 'undefined' ? removePristine : true;\n var destroyed = [];\n var autoSync = this.options.autoSync;\n this.options.autoSync = false;\n try {\n for (var idx = 0; idx < items.length; idx++) {\n var item = items[idx];\n var model = this._createNewModel(item);\n var found = false;\n this._eachItem(this._data, function (items) {\n for (var idx = 0; idx < items.length; idx++) {\n var item = items.at(idx);\n if (item.id === model.id) {\n destroyed.push(item);\n items.splice(idx, 1);\n found = true;\n break;\n }\n }\n });\n if (found && shouldRemovePristine) {\n this._removePristineForModel(model);\n this._destroyed.pop();\n }\n }\n } finally {\n this.options.autoSync = autoSync;\n }\n return destroyed;\n },\n remove: function (model) {\n var result, that = this, hasGroups = that._isServerGrouped();\n this._eachItem(that._data, function (items) {\n result = removeModel(items, model);\n if (result && hasGroups) {\n if (!result.isNew || !result.isNew()) {\n that._destroyed.push(result);\n }\n return true;\n }\n });\n this._removeModelFromRanges(model);\n return model;\n },\n destroyed: function () {\n return this._destroyed;\n },\n created: function () {\n var idx, length, result = [], data = this._flatData(this._data, this.options.useRanges);\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (data[idx].isNew && data[idx].isNew()) {\n result.push(data[idx]);\n }\n }\n return result;\n },\n updated: function () {\n var idx, length, result = [], data = this._flatData(this._data, this.options.useRanges);\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (data[idx].isNew && !data[idx].isNew() && data[idx].dirty) {\n result.push(data[idx]);\n }\n }\n return result;\n },\n sync: function () {\n var that = this, created = [], updated = [], destroyed = that._destroyed;\n var promise = $.Deferred().resolve().promise();\n if (that.online()) {\n if (!that.reader.model) {\n return promise;\n }\n created = that.created();\n updated = that.updated();\n var promises = [];\n if (that.options.batch && that.transport.submit) {\n promises = that._sendSubmit(created, updated, destroyed);\n } else {\n promises.push.apply(promises, that._send('create', created));\n promises.push.apply(promises, that._send('update', updated));\n promises.push.apply(promises, that._send('destroy', destroyed));\n }\n promise = $.when.apply(null, promises).then(function () {\n var idx, length;\n for (idx = 0, length = arguments.length; idx < length; idx++) {\n if (arguments[idx]) {\n that._accept(arguments[idx]);\n }\n }\n that._storeData(true);\n that._syncEnd();\n that._change({ action: 'sync' });\n that.trigger(SYNC);\n });\n } else {\n that._storeData(true);\n that._syncEnd();\n that._change({ action: 'sync' });\n }\n return promise;\n },\n _syncEnd: noop,\n cancelChanges: function (model) {\n var that = this;\n if (model instanceof kendo.data.Model) {\n that._cancelModel(model);\n } else {\n that._destroyed = [];\n that._detachObservableParents();\n that._data = that._observe(that._pristineData);\n if (that.options.serverPaging) {\n that._total = that._pristineTotal;\n }\n that._ranges = [];\n that._addRange(that._data, 0);\n that._changesCanceled();\n that._change();\n that._markOfflineUpdatesAsDirty();\n }\n },\n _changesCanceled: noop,\n _markOfflineUpdatesAsDirty: function () {\n var that = this;\n if (that.options.offlineStorage != null) {\n that._eachItem(that._data, function (items) {\n for (var idx = 0; idx < items.length; idx++) {\n var item = items.at(idx);\n if (item.__state__ == 'update' || item.__state__ == 'create') {\n item.dirty = true;\n }\n }\n });\n }\n },\n hasChanges: function () {\n var idx, length, data = this._flatData(this._data, this.options.useRanges);\n if (this._destroyed.length) {\n return true;\n }\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (data[idx].isNew && data[idx].isNew() || data[idx].dirty) {\n return true;\n }\n }\n return false;\n },\n _accept: function (result) {\n var that = this, models = result.models, response = result.response, idx = 0, serverGroup = that._isServerGrouped(), pristine = that._pristineData, type = result.type, length;\n that.trigger(REQUESTEND, {\n response: response,\n type: type\n });\n if (response && !isEmptyObject(response)) {\n response = that.reader.parse(response);\n if (that._handleCustomErrors(response)) {\n return;\n }\n response = that.reader.data(response);\n if (!isArray(response)) {\n response = [response];\n }\n } else {\n response = $.map(models, function (model) {\n return model.toJSON();\n });\n }\n if (type === 'destroy') {\n that._destroyed = [];\n }\n for (idx = 0, length = models.length; idx < length; idx++) {\n if (type !== 'destroy') {\n models[idx].accept(response[idx]);\n if (type === 'create') {\n pristine.push(serverGroup ? that._wrapInEmptyGroup(models[idx].toJSON()) : response[idx]);\n } else if (type === 'update') {\n that._updatePristineForModel(models[idx], response[idx]);\n }\n } else {\n that._removePristineForModel(models[idx]);\n }\n }\n },\n _updatePristineForModel: function (model, values) {\n this._executeOnPristineForModel(model, function (index, items) {\n kendo.deepExtend(items[index], values);\n });\n },\n _executeOnPristineForModel: function (model, callback) {\n this._eachPristineItem(function (items) {\n var index = indexOfPristineModel(items, model);\n if (index > -1) {\n callback(index, items);\n return true;\n }\n });\n },\n _removePristineForModel: function (model) {\n this._executeOnPristineForModel(model, function (index, items) {\n items.splice(index, 1);\n });\n },\n _readData: function (data) {\n var read = !this._isServerGrouped() ? this.reader.data : this.reader.groups;\n return read.call(this.reader, data);\n },\n _eachPristineItem: function (callback) {\n var that = this;\n var options = that.options;\n var rangeSpan = that._getCurrentRangeSpan();\n that._eachItem(that._pristineData, callback);\n if (options.serverPaging && options.useRanges) {\n each(rangeSpan, function (i, range) {\n that._eachItem(range.pristineData, callback);\n });\n }\n },\n _eachItem: function (data, callback) {\n if (data && data.length) {\n if (this._isServerGrouped()) {\n eachGroupItems(data, callback);\n } else {\n callback(data);\n }\n }\n },\n _pristineForModel: function (model) {\n var pristine, idx, callback = function (items) {\n idx = indexOfPristineModel(items, model);\n if (idx > -1) {\n pristine = items[idx];\n return true;\n }\n };\n this._eachPristineItem(callback);\n return pristine;\n },\n _cancelModel: function (model) {\n var that = this;\n var pristine = this._pristineForModel(model);\n this._eachItem(this._data, function (items) {\n var idx = indexOfModel(items, model);\n if (idx >= 0) {\n if (pristine && (!model.isNew() || pristine.__state__)) {\n items[idx].accept(pristine);\n if (pristine.__state__ == 'update') {\n items[idx].dirty = true;\n }\n } else {\n that._modelCanceled(model);\n items.splice(idx, 1);\n that._removeModelFromRanges(model);\n }\n }\n });\n },\n _modelCanceled: noop,\n _submit: function (promises, data) {\n var that = this;\n that.trigger(REQUESTSTART, { type: 'submit' });\n that.trigger(PROGRESS);\n that.transport.submit(extend({\n success: function (response, type) {\n var promise = $.grep(promises, function (x) {\n return x.type == type;\n })[0];\n if (promise) {\n promise.resolve({\n response: response,\n models: promise.models,\n type: type\n });\n }\n },\n error: function (response, status, error) {\n for (var idx = 0; idx < promises.length; idx++) {\n promises[idx].reject(response);\n }\n that.error(response, status, error);\n }\n }, data));\n },\n _sendSubmit: function (created, updated, destroyed) {\n var that = this, promises = [];\n if (that.options.batch) {\n if (created.length) {\n promises.push($.Deferred(function (deferred) {\n deferred.type = 'create';\n deferred.models = created;\n }));\n }\n if (updated.length) {\n promises.push($.Deferred(function (deferred) {\n deferred.type = 'update';\n deferred.models = updated;\n }));\n }\n if (destroyed.length) {\n promises.push($.Deferred(function (deferred) {\n deferred.type = 'destroy';\n deferred.models = destroyed;\n }));\n }\n that._submit(promises, {\n data: {\n created: that.reader.serialize(toJSON(created)),\n updated: that.reader.serialize(toJSON(updated)),\n destroyed: that.reader.serialize(toJSON(destroyed))\n }\n });\n }\n return promises;\n },\n _promise: function (data, models, type) {\n var that = this;\n return $.Deferred(function (deferred) {\n that.trigger(REQUESTSTART, { type: type });\n that.trigger(PROGRESS);\n that.transport[type].call(that.transport, extend({\n success: function (response) {\n deferred.resolve({\n response: response,\n models: models,\n type: type\n });\n },\n error: function (response, status, error) {\n deferred.reject(response);\n that.error(response, status, error);\n }\n }, data));\n }).promise();\n },\n _send: function (method, data) {\n var that = this, idx, length, promises = [], converted = that.reader.serialize(toJSON(data));\n if (that.options.batch) {\n if (data.length) {\n promises.push(that._promise({ data: { models: converted } }, data, method));\n }\n } else {\n for (idx = 0, length = data.length; idx < length; idx++) {\n promises.push(that._promise({ data: converted[idx] }, [data[idx]], method));\n }\n }\n return promises;\n },\n read: function (data) {\n var that = this, params = that._params(data);\n var deferred = $.Deferred();\n that._queueRequest(params, function () {\n var isPrevented = that.trigger(REQUESTSTART, { type: 'read' });\n if (!isPrevented) {\n that.trigger(PROGRESS);\n that._ranges = [];\n that.trigger('reset');\n if (that.online()) {\n that.transport.read({\n data: params,\n success: function (data) {\n that._ranges = [];\n that.success(data, params);\n deferred.resolve();\n },\n error: function () {\n var args = slice.call(arguments);\n that.error.apply(that, args);\n deferred.reject.apply(deferred, args);\n }\n });\n } else if (that.options.offlineStorage != null) {\n that.success(that.offlineData(), params);\n deferred.resolve();\n }\n } else {\n that._dequeueRequest();\n deferred.resolve(isPrevented);\n }\n });\n return deferred.promise();\n },\n _readAggregates: function (data) {\n return this.reader.aggregates(data);\n },\n success: function (data) {\n var that = this, options = that.options, items, replaceSubset;\n that.trigger(REQUESTEND, {\n response: data,\n type: 'read'\n });\n if (that.online()) {\n data = that.reader.parse(data);\n if (that._handleCustomErrors(data)) {\n that._dequeueRequest();\n return;\n }\n that._total = that.reader.total(data);\n if (that._pageSize > that._total) {\n that._pageSize = that._total;\n if (that.options.pageSize && that.options.pageSize > that._pageSize) {\n that._pageSize = that.options.pageSize;\n }\n }\n if (that._aggregate && options.serverAggregates) {\n that._aggregateResult = that._readAggregates(data);\n }\n data = that._readData(data);\n that._destroyed = [];\n } else {\n data = that._readData(data);\n items = [];\n var itemIds = {};\n var model = that.reader.model;\n var idField = model ? model.idField : 'id';\n var idx;\n for (idx = 0; idx < this._destroyed.length; idx++) {\n var id = this._destroyed[idx][idField];\n itemIds[id] = id;\n }\n for (idx = 0; idx < data.length; idx++) {\n var item = data[idx];\n var state = item.__state__;\n if (state == 'destroy') {\n if (!itemIds[item[idField]]) {\n this._destroyed.push(this._createNewModel(item));\n }\n } else {\n items.push(item);\n }\n }\n data = items;\n that._total = data.length;\n }\n that._pristineTotal = that._total;\n replaceSubset = that._skip && that._data.length && that._skip < that._data.length;\n if (that.options.endless) {\n if (replaceSubset) {\n that._pristineData.splice(that._skip, that._pristineData.length);\n }\n items = data.slice(0);\n for (var j = 0; j < items.length; j++) {\n that._pristineData.push(items[j]);\n }\n } else {\n that._pristineData = data.slice(0);\n }\n that._detachObservableParents();\n if (that.options.endless) {\n that._data.unbind(CHANGE, that._changeHandler);\n if (that._isServerGrouped() && that._data[that._data.length - 1].value === data[0].value) {\n fillLastGroup(that._data[that._data.length - 1], data[0]);\n data.shift();\n }\n data = that._observe(data);\n if (replaceSubset) {\n that._data.splice(that._skip, that._data.length);\n }\n for (var i = 0; i < data.length; i++) {\n that._data.push(data[i]);\n }\n that._data.bind(CHANGE, that._changeHandler);\n } else {\n that._data = that._observe(data);\n }\n that._markOfflineUpdatesAsDirty();\n that._storeData();\n that._addRange(that._data);\n that._process(that._data);\n that._dequeueRequest();\n },\n _detachObservableParents: function () {\n if (this._data && this._shouldDetachObservableParents) {\n for (var idx = 0; idx < this._data.length; idx++) {\n if (this._data[idx].parent) {\n this._data[idx].parent = noop;\n }\n }\n }\n },\n _storeData: function (updatePristine) {\n var serverGrouping = this._isServerGrouped();\n var model = this.reader.model;\n function items(data) {\n var state = [];\n for (var idx = 0; idx < data.length; idx++) {\n var dataItem = data.at(idx);\n var item = dataItem.toJSON();\n if (serverGrouping && dataItem.items) {\n item.items = items(dataItem.items);\n } else {\n item.uid = dataItem.uid;\n if (model) {\n if (dataItem.isNew()) {\n item.__state__ = 'create';\n } else if (dataItem.dirty) {\n item.__state__ = 'update';\n }\n }\n }\n state.push(item);\n }\n return state;\n }\n if (this.options.offlineStorage != null) {\n var state = items(this._data);\n var destroyed = [];\n for (var idx = 0; idx < this._destroyed.length; idx++) {\n var item = this._destroyed[idx].toJSON();\n item.__state__ = 'destroy';\n destroyed.push(item);\n }\n this.offlineData(state.concat(destroyed));\n if (updatePristine) {\n this._pristineData = this.reader.reader ? this.reader.reader._wrapDataAccessBase(state) : this.reader._wrapDataAccessBase(state);\n }\n }\n },\n _addRange: function (data, skip) {\n var that = this, start = typeof skip !== 'undefined' ? skip : that._skip || 0, end = start + that._flatData(data, true).length;\n that._ranges.push({\n start: start,\n end: end,\n data: data,\n pristineData: data.toJSON(),\n timestamp: that._timeStamp()\n });\n that._sortRanges();\n },\n _sortRanges: function () {\n this._ranges.sort(function (x, y) {\n return x.start - y.start;\n });\n },\n error: function (xhr, status, errorThrown) {\n this._dequeueRequest();\n this.trigger(REQUESTEND, {});\n this.trigger(ERROR, {\n xhr: xhr,\n status: status,\n errorThrown: errorThrown\n });\n },\n _params: function (data) {\n var that = this, options = extend({\n take: that.take(),\n skip: that.skip(),\n page: that.page(),\n pageSize: that.pageSize(),\n sort: that._sort,\n filter: that._filter,\n group: that._group,\n aggregate: that._aggregate\n }, data);\n if (!that.options.serverPaging) {\n delete options.take;\n delete options.skip;\n delete options.page;\n delete options.pageSize;\n }\n if (!that.options.serverGrouping) {\n delete options.group;\n } else if (that.reader.model && options.group) {\n options.group = convertDescriptorsField(options.group, that.reader.model);\n }\n if (!that.options.serverFiltering) {\n delete options.filter;\n } else if (that.reader.model && options.filter) {\n options.filter = convertFilterDescriptorsField(options.filter, that.reader.model);\n }\n if (!that.options.serverSorting) {\n delete options.sort;\n } else if (that.reader.model && options.sort) {\n options.sort = convertDescriptorsField(options.sort, that.reader.model);\n }\n if (!that.options.serverAggregates) {\n delete options.aggregate;\n } else if (that.reader.model && options.aggregate) {\n options.aggregate = convertDescriptorsField(options.aggregate, that.reader.model);\n }\n return options;\n },\n _queueRequest: function (options, callback) {\n var that = this;\n if (!that._requestInProgress) {\n that._requestInProgress = true;\n that._pending = undefined;\n callback();\n } else {\n that._pending = {\n callback: proxy(callback, that),\n options: options\n };\n }\n },\n _dequeueRequest: function () {\n var that = this;\n that._requestInProgress = false;\n if (that._pending) {\n that._queueRequest(that._pending.options, that._pending.callback);\n }\n },\n _handleCustomErrors: function (response) {\n if (this.reader.errors) {\n var errors = this.reader.errors(response);\n if (errors) {\n this.trigger(ERROR, {\n xhr: null,\n status: 'customerror',\n errorThrown: 'custom error',\n errors: errors\n });\n return true;\n }\n }\n return false;\n },\n _shouldWrap: function (data) {\n var model = this.reader.model;\n if (model && data.length) {\n return !(data[0] instanceof model);\n }\n return false;\n },\n _observe: function (data) {\n var that = this, model = that.reader.model;\n that._shouldDetachObservableParents = true;\n if (data instanceof ObservableArray) {\n that._shouldDetachObservableParents = false;\n if (that._shouldWrap(data)) {\n data.type = that.reader.model;\n data.wrapAll(data, data);\n }\n } else {\n var arrayType = that.pageSize() && !that.options.serverPaging ? LazyObservableArray : ObservableArray;\n data = new arrayType(data, that.reader.model);\n data.parent = function () {\n return that.parent();\n };\n }\n if (that._isServerGrouped()) {\n wrapGroupItems(data, model);\n }\n if (that._changeHandler && that._data && that._data instanceof ObservableArray && !(that.options.useRanges && that.options.serverPaging)) {\n that._data.unbind(CHANGE, that._changeHandler);\n } else {\n that._changeHandler = proxy(that._change, that);\n }\n return data.bind(CHANGE, that._changeHandler);\n },\n _updateTotalForAction: function (action, items) {\n var that = this;\n var total = parseInt(that._total, 10);\n if (!isNumber(that._total)) {\n total = parseInt(that._pristineTotal, 10);\n }\n if (action === 'add') {\n total += items.length;\n } else if (action === 'remove') {\n total -= items.length;\n } else if (action !== 'itemchange' && action !== 'sync' && !that.options.serverPaging) {\n total = that._pristineTotal;\n } else if (action === 'sync') {\n total = that._pristineTotal = parseInt(that._total, 10);\n }\n that._total = total;\n },\n _change: function (e) {\n var that = this, idx, length, action = e ? e.action : '';\n if (action === 'remove') {\n for (idx = 0, length = e.items.length; idx < length; idx++) {\n if (!e.items[idx].isNew || !e.items[idx].isNew()) {\n that._destroyed.push(e.items[idx]);\n }\n }\n }\n if (that.options.autoSync && (action === 'add' || action === 'remove' || action === 'itemchange')) {\n var handler = function (args) {\n if (args.action === 'sync') {\n that.unbind('change', handler);\n that._updateTotalForAction(action, e.items);\n }\n };\n that.first('change', handler);\n that.sync();\n } else {\n that._updateTotalForAction(action, e ? e.items : []);\n that._process(that._data, e);\n }\n },\n _calculateAggregates: function (data, options) {\n options = options || {};\n var query = new Query(data), aggregates = options.aggregate, filter = options.filter;\n if (filter) {\n query = query.filter(filter);\n }\n return query.aggregate(aggregates);\n },\n _process: function (data, e) {\n var that = this, options = {}, result;\n if (that.options.serverPaging !== true) {\n options.skip = that._skip;\n options.take = that._take || that._pageSize;\n if (options.skip === undefined && that._page !== undefined && that._pageSize !== undefined) {\n options.skip = (that._page - 1) * that._pageSize;\n }\n if (that.options.useRanges) {\n options.skip = that.currentRangeStart();\n }\n }\n if (that.options.serverSorting !== true) {\n options.sort = that._sort;\n }\n if (that.options.serverFiltering !== true) {\n options.filter = that._filter;\n }\n if (that.options.serverGrouping !== true) {\n options.group = that._group;\n }\n if (that.options.serverAggregates !== true) {\n options.aggregate = that._aggregate;\n }\n if (that.options.serverGrouping) {\n that._clearEmptyGroups(data);\n }\n result = that._queryProcess(data, options);\n if (that.options.serverAggregates !== true) {\n that._aggregateResult = that._calculateAggregates(result.dataToAggregate || data, options);\n }\n that.view(result.data);\n that._setFilterTotal(result.total, false);\n e = e || {};\n e.items = e.items || that._view;\n that.trigger(CHANGE, e);\n },\n _clearEmptyGroups: function (data) {\n for (var idx = data.length - 1; idx >= 0; idx--) {\n var group = data[idx];\n if (group.hasSubgroups) {\n this._clearEmptyGroups(group.items);\n } else {\n if (group.items && !group.items.length) {\n splice.apply(group.parent(), [\n idx,\n 1\n ]);\n }\n }\n }\n },\n _queryProcess: function (data, options) {\n if (this.options.inPlaceSort) {\n return Query.process(data, options, this.options.inPlaceSort);\n } else {\n return Query.process(data, options);\n }\n },\n _mergeState: function (options) {\n var that = this;\n if (options !== undefined) {\n that._pageSize = options.pageSize;\n that._page = options.page;\n that._sort = options.sort;\n that._filter = options.filter;\n that._group = options.group;\n that._aggregate = options.aggregate;\n that._skip = that._currentRangeStart = options.skip;\n that._take = options.take;\n if (that._skip === undefined) {\n that._skip = that._currentRangeStart = that.skip();\n options.skip = that.skip();\n }\n if (that._take === undefined && that._pageSize !== undefined) {\n that._take = that._pageSize;\n options.take = that._take;\n }\n if (options.sort) {\n that._sort = options.sort = normalizeSort(options.sort);\n }\n if (options.filter) {\n that._filter = options.filter = that.options.accentFoldingFiltering && !$.isEmptyObject(options.filter) ? $.extend({}, normalizeFilter(options.filter), { accentFoldingFiltering: that.options.accentFoldingFiltering }) : normalizeFilter(options.filter);\n }\n if (options.group) {\n that._group = options.group = normalizeGroup(options.group);\n }\n if (options.aggregate) {\n that._aggregate = options.aggregate = normalizeAggregate(options.aggregate);\n }\n }\n return options;\n },\n query: function (options) {\n var result;\n var remote = this.options.serverSorting || this.options.serverPaging || this.options.serverFiltering || this.options.serverGrouping || this.options.serverAggregates;\n if (remote || (this._data === undefined || this._data.length === 0) && !this._destroyed.length) {\n if (this.options.endless) {\n var moreItemsCount = options.pageSize - this.pageSize();\n if (moreItemsCount > 0) {\n moreItemsCount = this.pageSize();\n options.page = options.pageSize / moreItemsCount;\n options.pageSize = moreItemsCount;\n } else {\n options.page = 1;\n this.options.endless = false;\n }\n }\n return this.read(this._mergeState(options));\n }\n var isPrevented = this.trigger(REQUESTSTART, { type: 'read' });\n if (!isPrevented) {\n this.trigger(PROGRESS);\n result = this._queryProcess(this._data, this._mergeState(options));\n this._setFilterTotal(result.total, true);\n this._aggregateResult = this._calculateAggregates(result.dataToAggregate || this._data, options);\n this.view(result.data);\n this.trigger(REQUESTEND, { type: 'read' });\n this.trigger(CHANGE, { items: result.data });\n }\n return $.Deferred().resolve(isPrevented).promise();\n },\n _setFilterTotal: function (filterTotal, setDefaultValue) {\n var that = this;\n if (!that.options.serverFiltering) {\n if (filterTotal !== undefined) {\n that._total = filterTotal;\n } else if (setDefaultValue) {\n that._total = that._data.length;\n }\n }\n },\n fetch: function (callback) {\n var that = this;\n var fn = function (isPrevented) {\n if (isPrevented !== true && isFunction(callback)) {\n callback.call(that);\n }\n };\n return this._query().done(fn);\n },\n _query: function (options) {\n var that = this;\n return that.query(extend({}, {\n page: that.page(),\n pageSize: that.pageSize(),\n sort: that.sort(),\n filter: that.filter(),\n group: that.group(),\n aggregate: that.aggregate()\n }, options));\n },\n next: function (options) {\n var that = this, page = that.page(), total = that.total();\n options = options || {};\n if (!page || total && page + 1 > that.totalPages()) {\n return;\n }\n that._skip = that._currentRangeStart = page * that.take();\n page += 1;\n options.page = page;\n that._query(options);\n return page;\n },\n prev: function (options) {\n var that = this, page = that.page();\n options = options || {};\n if (!page || page === 1) {\n return;\n }\n that._skip = that._currentRangeStart = that._skip - that.take();\n page -= 1;\n options.page = page;\n that._query(options);\n return page;\n },\n page: function (val) {\n var that = this, skip;\n if (val !== undefined) {\n val = math.max(math.min(math.max(val, 1), that.totalPages()), 1);\n that._query(that._pageableQueryOptions({ page: val }));\n return;\n }\n skip = that.skip();\n return skip !== undefined ? math.round((skip || 0) / (that.take() || 1)) + 1 : undefined;\n },\n pageSize: function (val) {\n var that = this;\n if (val !== undefined) {\n that._query(that._pageableQueryOptions({\n pageSize: val,\n page: 1\n }));\n return;\n }\n return that.take();\n },\n sort: function (val) {\n var that = this;\n if (val !== undefined) {\n that._query({ sort: val });\n return;\n }\n return that._sort;\n },\n filter: function (val) {\n var that = this;\n if (val === undefined) {\n return that._filter;\n }\n that.trigger('reset');\n that._query({\n filter: val,\n page: 1\n });\n },\n group: function (val) {\n var that = this;\n if (val !== undefined) {\n that._query({ group: val });\n return;\n }\n return that._group;\n },\n total: function () {\n return parseInt(this._total || 0, 10);\n },\n aggregate: function (val) {\n var that = this;\n if (val !== undefined) {\n that._query({ aggregate: val });\n return;\n }\n return that._aggregate;\n },\n aggregates: function () {\n var result = this._aggregateResult;\n if (isEmptyObject(result)) {\n result = this._emptyAggregates(this.aggregate());\n }\n return result;\n },\n _emptyAggregates: function (aggregates) {\n var result = {};\n if (!isEmptyObject(aggregates)) {\n var aggregate = {};\n if (!isArray(aggregates)) {\n aggregates = [aggregates];\n }\n for (var idx = 0; idx < aggregates.length; idx++) {\n aggregate[aggregates[idx].aggregate] = 0;\n result[aggregates[idx].field] = aggregate;\n }\n }\n return result;\n },\n _pageableQueryOptions: function (options) {\n return options;\n },\n _wrapInEmptyGroup: function (model) {\n var groups = this.group(), parent, group, idx, length;\n for (idx = groups.length - 1, length = 0; idx >= length; idx--) {\n group = groups[idx];\n parent = {\n value: model.get ? model.get(group.field) : model[group.field],\n field: group.field,\n items: parent ? [parent] : [model],\n hasSubgroups: !!parent,\n aggregates: this._emptyAggregates(group.aggregates)\n };\n }\n return parent;\n },\n totalPages: function () {\n var that = this, pageSize = that.pageSize() || that.total();\n return math.ceil((that.total() || 0) / pageSize);\n },\n inRange: function (skip, take) {\n var that = this, end = math.min(skip + take, that.total());\n if (!that.options.serverPaging && that._data.length > 0) {\n return true;\n }\n return that._findRange(skip, end).length > 0;\n },\n lastRange: function () {\n var ranges = this._ranges;\n return ranges[ranges.length - 1] || {\n start: 0,\n end: 0,\n data: []\n };\n },\n firstItemUid: function () {\n var ranges = this._ranges;\n return ranges.length && ranges[0].data.length && ranges[0].data[0].uid;\n },\n enableRequestsInProgress: function () {\n this._skipRequestsInProgress = false;\n },\n _timeStamp: function () {\n return new Date().getTime();\n },\n range: function (skip, take, callback) {\n this._currentRequestTimeStamp = this._timeStamp();\n this._skipRequestsInProgress = true;\n skip = math.min(skip || 0, this.total());\n callback = isFunction(callback) ? callback : noop;\n var that = this, pageSkip = math.max(math.floor(skip / take), 0) * take, size = math.min(pageSkip + take, that.total()), data;\n data = that._findRange(skip, math.min(skip + take, that.total()));\n if (data.length || that.total() === 0) {\n that._processRangeData(data, skip, take, pageSkip, size);\n callback();\n return;\n }\n if (take !== undefined) {\n if (!that._rangeExists(pageSkip, size)) {\n that.prefetch(pageSkip, take, function () {\n if (skip > pageSkip && size < that.total() && !that._rangeExists(size, math.min(size + take, that.total()))) {\n that.prefetch(size, take, function () {\n that.range(skip, take, callback);\n });\n } else {\n that.range(skip, take, callback);\n }\n });\n } else if (pageSkip < skip) {\n that.prefetch(size, take, function () {\n that.range(skip, take, callback);\n });\n }\n }\n },\n _findRange: function (start, end) {\n var that = this, ranges = that._ranges, range, data = [], skipIdx, takeIdx, startIndex, endIndex, rangeData, rangeEnd, processed, options = that.options, remote = options.serverSorting || options.serverPaging || options.serverFiltering || options.serverGrouping || options.serverAggregates, flatData, count, length;\n for (skipIdx = 0, length = ranges.length; skipIdx < length; skipIdx++) {\n range = ranges[skipIdx];\n if (start >= range.start && start <= range.end) {\n count = 0;\n for (takeIdx = skipIdx; takeIdx < length; takeIdx++) {\n range = ranges[takeIdx];\n flatData = that._flatData(range.data, true);\n if (flatData.length && start + count >= range.start) {\n rangeData = range.data;\n rangeEnd = range.end;\n if (!remote) {\n if (options.inPlaceSort) {\n processed = that._queryProcess(range.data, { filter: that.filter() });\n } else {\n var sort = normalizeGroupWithoutCompare(that.group() || []).concat(normalizeSort(that.sort() || []));\n processed = that._queryProcess(range.data, {\n sort: sort,\n filter: that.filter()\n });\n }\n flatData = rangeData = processed.data;\n if (processed.total !== undefined) {\n rangeEnd = processed.total;\n }\n }\n startIndex = 0;\n if (start + count > range.start) {\n startIndex = start + count - range.start;\n }\n endIndex = flatData.length;\n if (rangeEnd > end) {\n endIndex = endIndex - (rangeEnd - end);\n }\n count += endIndex - startIndex;\n data = that._mergeGroups(data, rangeData, startIndex, endIndex);\n if (end <= range.end && count == end - start) {\n return data;\n }\n }\n }\n break;\n }\n }\n return [];\n },\n _mergeGroups: function (data, range, skip, take) {\n if (this._isServerGrouped()) {\n var temp = range.toJSON(), prevGroup;\n if (data.length) {\n prevGroup = data[data.length - 1];\n }\n mergeGroups(prevGroup, temp, skip, take);\n return data.concat(temp);\n }\n return data.concat(range.slice(skip, take));\n },\n _processRangeData: function (data, skip, take, pageSkip, size) {\n var that = this;\n that._pending = undefined;\n that._skip = skip > that.skip() ? math.min(size, (that.totalPages() - 1) * that.take()) : pageSkip;\n that._currentRangeStart = skip;\n that._take = take;\n var paging = that.options.serverPaging;\n var sorting = that.options.serverSorting;\n var filtering = that.options.serverFiltering;\n var aggregates = that.options.serverAggregates;\n try {\n that.options.serverPaging = true;\n if (!that._isServerGrouped() && !(that.group() && that.group().length)) {\n that.options.serverSorting = true;\n }\n that.options.serverFiltering = true;\n that.options.serverPaging = true;\n that.options.serverAggregates = true;\n if (paging) {\n that._detachObservableParents();\n that._data = data = that._observe(data);\n }\n that._process(data);\n } finally {\n that.options.serverPaging = paging;\n that.options.serverSorting = sorting;\n that.options.serverFiltering = filtering;\n that.options.serverAggregates = aggregates;\n }\n },\n skip: function () {\n var that = this;\n if (that._skip === undefined) {\n return that._page !== undefined ? (that._page - 1) * (that.take() || 1) : undefined;\n }\n return that._skip;\n },\n currentRangeStart: function () {\n return this._currentRangeStart || 0;\n },\n take: function () {\n return this._take || this._pageSize;\n },\n _prefetchSuccessHandler: function (skip, size, callback, force) {\n var that = this;\n var timestamp = that._timeStamp();\n return function (data) {\n var found = false, range = {\n start: skip,\n end: size,\n data: [],\n timestamp: that._timeStamp()\n }, idx, length, temp;\n that._dequeueRequest();\n that.trigger(REQUESTEND, {\n response: data,\n type: 'read'\n });\n data = that.reader.parse(data);\n temp = that._readData(data);\n if (temp.length) {\n for (idx = 0, length = that._ranges.length; idx < length; idx++) {\n if (that._ranges[idx].start === skip) {\n found = true;\n range = that._ranges[idx];\n range.pristineData = temp;\n range.data = that._observe(temp);\n range.end = range.start + that._flatData(range.data, true).length;\n that._sortRanges();\n break;\n }\n }\n if (!found) {\n that._addRange(that._observe(temp), skip);\n }\n }\n that._total = that.reader.total(data);\n if (force || (timestamp >= that._currentRequestTimeStamp || !that._skipRequestsInProgress)) {\n if (callback && temp.length) {\n callback();\n } else {\n that.trigger(CHANGE, {});\n }\n }\n };\n },\n prefetch: function (skip, take, callback) {\n var that = this, size = math.min(skip + take, that.total()), options = {\n take: take,\n skip: skip,\n page: skip / take + 1,\n pageSize: take,\n sort: that._sort,\n filter: that._filter,\n group: that._group,\n aggregate: that._aggregate\n };\n if (!that._rangeExists(skip, size)) {\n clearTimeout(that._timeout);\n that._timeout = setTimeout(function () {\n that._queueRequest(options, function () {\n if (!that.trigger(REQUESTSTART, { type: 'read' })) {\n that.transport.read({\n data: that._params(options),\n success: that._prefetchSuccessHandler(skip, size, callback),\n error: function () {\n var args = slice.call(arguments);\n that.error.apply(that, args);\n }\n });\n } else {\n that._dequeueRequest();\n }\n });\n }, 100);\n } else if (callback) {\n callback();\n }\n },\n _multiplePrefetch: function (skip, take, callback) {\n var that = this, size = math.min(skip + take, that.total()), options = {\n take: take,\n skip: skip,\n page: skip / take + 1,\n pageSize: take,\n sort: that._sort,\n filter: that._filter,\n group: that._group,\n aggregate: that._aggregate\n };\n if (!that._rangeExists(skip, size)) {\n if (!that.trigger(REQUESTSTART, { type: 'read' })) {\n that.transport.read({\n data: that._params(options),\n success: that._prefetchSuccessHandler(skip, size, callback, true)\n });\n }\n } else if (callback) {\n callback();\n }\n },\n _rangeExists: function (start, end) {\n var that = this, ranges = that._ranges, idx, length;\n for (idx = 0, length = ranges.length; idx < length; idx++) {\n if (ranges[idx].start <= start && ranges[idx].end >= end) {\n return true;\n }\n }\n return false;\n },\n _getCurrentRangeSpan: function () {\n var that = this;\n var ranges = that._ranges;\n var start = that.currentRangeStart();\n var end = start + (that.take() || 0);\n var rangeSpan = [];\n var range;\n var idx;\n var length = ranges.length;\n for (idx = 0; idx < length; idx++) {\n range = ranges[idx];\n if (range.start <= start && range.end >= start || range.start >= start && range.start <= end) {\n rangeSpan.push(range);\n }\n }\n return rangeSpan;\n },\n _removeModelFromRanges: function (model) {\n var that = this;\n var range;\n for (var idx = 0, length = this._ranges.length; idx < length; idx++) {\n range = this._ranges[idx];\n that._removeModelFromRange(range, model);\n }\n that._updateRangesLength();\n },\n _removeModelFromRange: function (range, model) {\n this._eachItem(range.data, function (data) {\n for (var idx = 0; idx < data.length; idx++) {\n var dataItem = data[idx];\n if (dataItem.uid && dataItem.uid == model.uid) {\n [].splice.call(data, idx, 1);\n break;\n }\n }\n });\n },\n _insertModelInRange: function (index, model) {\n var that = this;\n var ranges = that._ranges || [];\n var rangesLength = ranges.length;\n var range;\n var i;\n for (i = 0; i < rangesLength; i++) {\n range = ranges[i];\n if (range.start <= index && range.end >= index) {\n if (!that._getByUid(model.uid, range.data)) {\n if (that._isServerGrouped()) {\n range.data.splice(index, 0, that._wrapInEmptyGroup(model));\n } else {\n range.data.splice(index, 0, model);\n }\n }\n break;\n }\n }\n that._updateRangesLength();\n },\n _updateRangesLength: function () {\n var that = this;\n var ranges = that._ranges || [];\n var rangesLength = ranges.length;\n var mismatchFound = false;\n var mismatchLength = 0;\n var lengthDifference = 0;\n var range;\n var i;\n for (i = 0; i < rangesLength; i++) {\n range = ranges[i];\n lengthDifference = that._flatData(range.data, true).length - math.abs(range.end - range.start);\n if (!mismatchFound && lengthDifference !== 0) {\n mismatchFound = true;\n mismatchLength = lengthDifference;\n range.end += mismatchLength;\n continue;\n }\n if (mismatchFound) {\n range.start += mismatchLength;\n range.end += mismatchLength;\n }\n }\n }\n });\n var Transport = {};\n Transport.create = function (options, data, dataSource) {\n var transport, transportOptions = options.transport ? $.extend({}, options.transport) : null;\n if (transportOptions) {\n transportOptions.read = typeof transportOptions.read === STRING ? { url: transportOptions.read } : transportOptions.read;\n if (options.type === 'jsdo') {\n transportOptions.dataSource = dataSource;\n }\n if (options.type) {\n kendo.data.transports = kendo.data.transports || {};\n kendo.data.schemas = kendo.data.schemas || {};\n if (!kendo.data.transports[options.type]) {\n kendo.logToConsole('Unknown DataSource transport type \\'' + options.type + '\\'.\\nVerify that registration scripts for this type are included after Kendo UI on the page.', 'warn');\n } else if (!isPlainObject(kendo.data.transports[options.type])) {\n transport = new kendo.data.transports[options.type](extend(transportOptions, { data: data }));\n } else {\n transportOptions = extend(true, {}, kendo.data.transports[options.type], transportOptions);\n }\n options.schema = extend(true, {}, kendo.data.schemas[options.type], options.schema);\n }\n if (!transport) {\n transport = isFunction(transportOptions.read) ? transportOptions : new RemoteTransport(transportOptions);\n }\n } else {\n transport = new LocalTransport({ data: options.data || [] });\n }\n return transport;\n };\n DataSource.create = function (options) {\n if (isArray(options) || options instanceof ObservableArray) {\n options = { data: options };\n }\n var dataSource = options || {}, data = dataSource.data, fields = dataSource.fields, table = dataSource.table, select = dataSource.select, idx, length, model = {}, field;\n if (!data && fields && !dataSource.transport) {\n if (table) {\n data = inferTable(table, fields);\n } else if (select) {\n data = inferSelect(select, fields);\n if (dataSource.group === undefined && data[0] && data[0].optgroup !== undefined) {\n dataSource.group = 'optgroup';\n }\n }\n }\n if (kendo.data.Model && fields && (!dataSource.schema || !dataSource.schema.model)) {\n for (idx = 0, length = fields.length; idx < length; idx++) {\n field = fields[idx];\n if (field.type) {\n model[field.field] = field;\n }\n }\n if (!isEmptyObject(model)) {\n dataSource.schema = extend(true, dataSource.schema, { model: { fields: model } });\n }\n }\n dataSource.data = data;\n select = null;\n dataSource.select = null;\n table = null;\n dataSource.table = null;\n return dataSource instanceof DataSource ? dataSource : new DataSource(dataSource);\n };\n function inferSelect(select, fields) {\n select = $(select)[0];\n var options = select.options;\n var firstField = fields[0];\n var secondField = fields[1];\n var data = [];\n var idx, length;\n var optgroup;\n var option;\n var record;\n var value;\n for (idx = 0, length = options.length; idx < length; idx++) {\n record = {};\n option = options[idx];\n optgroup = option.parentNode;\n if (optgroup === select) {\n optgroup = null;\n }\n if (option.disabled || optgroup && optgroup.disabled) {\n continue;\n }\n if (optgroup) {\n record.optgroup = optgroup.label;\n }\n record[firstField.field] = option.text;\n value = option.attributes.value;\n if (value && value.specified) {\n value = option.value;\n } else {\n value = option.text;\n }\n record[secondField.field] = value;\n data.push(record);\n }\n return data;\n }\n function inferTable(table, fields) {\n var tbody = $(table)[0].tBodies[0], rows = tbody ? tbody.rows : [], idx, length, fieldIndex, fieldCount = fields.length, data = [], cells, record, cell, empty;\n for (idx = 0, length = rows.length; idx < length; idx++) {\n record = {};\n empty = true;\n cells = rows[idx].cells;\n for (fieldIndex = 0; fieldIndex < fieldCount; fieldIndex++) {\n cell = cells[fieldIndex];\n if (cell.nodeName.toLowerCase() !== 'th') {\n empty = false;\n record[fields[fieldIndex].field] = cell.innerHTML;\n }\n }\n if (!empty) {\n data.push(record);\n }\n }\n return data;\n }\n var Node = Model.define({\n idField: 'id',\n init: function (value) {\n var that = this, hasChildren = that.hasChildren || value && value.hasChildren, childrenField = 'items', childrenOptions = {};\n kendo.data.Model.fn.init.call(that, value);\n if (typeof that.children === STRING) {\n childrenField = that.children;\n }\n childrenOptions = {\n schema: {\n data: childrenField,\n model: {\n hasChildren: hasChildren,\n id: that.idField,\n fields: that.fields\n }\n }\n };\n if (typeof that.children !== STRING) {\n extend(childrenOptions, that.children);\n }\n childrenOptions.data = value;\n if (!hasChildren) {\n hasChildren = childrenOptions.schema.data;\n }\n if (typeof hasChildren === STRING) {\n hasChildren = kendo.getter(hasChildren);\n }\n if (isFunction(hasChildren)) {\n var hasChildrenObject = hasChildren.call(that, that);\n if (hasChildrenObject && hasChildrenObject.length === 0) {\n that.hasChildren = false;\n } else {\n that.hasChildren = !!hasChildrenObject;\n }\n }\n that._childrenOptions = childrenOptions;\n if (that.hasChildren) {\n that._initChildren();\n }\n that._loaded = !!(value && value._loaded);\n },\n _initChildren: function () {\n var that = this;\n var children, transport, parameterMap;\n if (!(that.children instanceof HierarchicalDataSource)) {\n children = that.children = new HierarchicalDataSource(that._childrenOptions);\n transport = children.transport;\n parameterMap = transport.parameterMap;\n transport.parameterMap = function (data, type) {\n data[that.idField || 'id'] = that.id;\n if (parameterMap) {\n data = parameterMap(data, type);\n }\n return data;\n };\n children.parent = function () {\n return that;\n };\n children.bind(CHANGE, function (e) {\n e.node = e.node || that;\n that.trigger(CHANGE, e);\n });\n children.bind(ERROR, function (e) {\n var collection = that.parent();\n if (collection) {\n e.node = e.node || that;\n collection.trigger(ERROR, e);\n }\n });\n that._updateChildrenField();\n }\n },\n append: function (model) {\n this._initChildren();\n this.loaded(true);\n this.children.add(model);\n },\n hasChildren: false,\n level: function () {\n var parentNode = this.parentNode(), level = 0;\n while (parentNode && parentNode.parentNode) {\n level++;\n parentNode = parentNode.parentNode ? parentNode.parentNode() : null;\n }\n return level;\n },\n _updateChildrenField: function () {\n var fieldName = this._childrenOptions.schema.data;\n this[fieldName || 'items'] = this.children.data();\n },\n _childrenLoaded: function () {\n this._loaded = true;\n this._updateChildrenField();\n },\n load: function () {\n var options = {};\n var method = '_query';\n var children, promise;\n if (this.hasChildren) {\n this._initChildren();\n children = this.children;\n options[this.idField || 'id'] = this.id;\n if (!this._loaded) {\n children._data = undefined;\n method = 'read';\n }\n children.one(CHANGE, proxy(this._childrenLoaded, this));\n if (this._matchFilter) {\n options.filter = {\n field: '_matchFilter',\n operator: 'eq',\n value: true\n };\n }\n promise = children[method](options);\n } else {\n this.loaded(true);\n }\n return promise || $.Deferred().resolve().promise();\n },\n parentNode: function () {\n var array = this.parent();\n return array.parent();\n },\n loaded: function (value) {\n if (value !== undefined) {\n this._loaded = value;\n } else {\n return this._loaded;\n }\n },\n shouldSerialize: function (field) {\n return Model.fn.shouldSerialize.call(this, field) && field !== 'children' && field !== '_loaded' && field !== 'hasChildren' && field !== '_childrenOptions';\n }\n });\n function dataMethod(name) {\n return function () {\n var data = this._data, result = DataSource.fn[name].apply(this, slice.call(arguments));\n if (this._data != data) {\n this._attachBubbleHandlers();\n }\n return result;\n };\n }\n var HierarchicalDataSource = DataSource.extend({\n init: function (options) {\n var node = Node.define({ children: options });\n if (options.filter && !options.serverFiltering) {\n this._hierarchicalFilter = options.filter;\n options.filter = null;\n }\n DataSource.fn.init.call(this, extend(true, {}, {\n schema: {\n modelBase: node,\n model: node\n }\n }, options));\n this._attachBubbleHandlers();\n },\n _attachBubbleHandlers: function () {\n var that = this;\n that._data.bind(ERROR, function (e) {\n that.trigger(ERROR, e);\n });\n },\n read: function (data) {\n var result = DataSource.fn.read.call(this, data);\n if (this._hierarchicalFilter) {\n if (this._data && this._data.length > 0) {\n this.filter(this._hierarchicalFilter);\n } else {\n this.options.filter = this._hierarchicalFilter;\n this._filter = normalizeFilter(this.options.filter);\n this._hierarchicalFilter = null;\n }\n }\n return result;\n },\n remove: function (node) {\n var parentNode = node.parentNode(), dataSource = this, result;\n if (parentNode && parentNode._initChildren) {\n dataSource = parentNode.children;\n }\n result = DataSource.fn.remove.call(dataSource, node);\n if (parentNode && !dataSource.data().length) {\n parentNode.hasChildren = false;\n }\n return result;\n },\n success: dataMethod('success'),\n data: dataMethod('data'),\n insert: function (index, model) {\n var parentNode = this.parent();\n if (parentNode && parentNode._initChildren) {\n parentNode.hasChildren = true;\n parentNode._initChildren();\n }\n return DataSource.fn.insert.call(this, index, model);\n },\n filter: function (val) {\n if (val === undefined) {\n return this._filter;\n }\n if (!this.options.serverFiltering && this._markHierarchicalQuery(val)) {\n val = {\n logic: 'or',\n filters: [\n val,\n {\n field: '_matchFilter',\n operator: 'equals',\n value: true\n }\n ]\n };\n }\n this.trigger('reset');\n this._query({\n filter: val,\n page: 1\n });\n },\n _markHierarchicalQuery: function (expressions) {\n var compiled;\n var predicate;\n var fields;\n var operators;\n var filter;\n var accentFoldingFiltering = this.options.accentFoldingFiltering;\n expressions = accentFoldingFiltering ? $.extend({}, normalizeFilter(expressions), { accentFoldingFiltering: accentFoldingFiltering }) : normalizeFilter(expressions);\n if (!expressions || expressions.filters.length === 0) {\n this._updateHierarchicalFilter(function () {\n return true;\n });\n return false;\n }\n compiled = Query.filterExpr(expressions);\n fields = compiled.fields;\n operators = compiled.operators;\n predicate = filter = new Function('d, __f, __o', 'return ' + compiled.expression);\n if (fields.length || operators.length) {\n filter = function (d) {\n return predicate(d, fields, operators);\n };\n }\n this._updateHierarchicalFilter(filter);\n return true;\n },\n _updateHierarchicalFilter: function (filter) {\n var current;\n var data = this._data;\n var result = false;\n for (var idx = 0; idx < data.length; idx++) {\n current = data[idx];\n if (current.hasChildren) {\n current._matchFilter = current.children._updateHierarchicalFilter(filter);\n if (!current._matchFilter) {\n current._matchFilter = filter(current);\n }\n } else {\n current._matchFilter = filter(current);\n }\n if (current._matchFilter) {\n result = true;\n }\n }\n return result;\n },\n _find: function (method, value) {\n var idx, length, node, children;\n var data = this._data;\n if (!data) {\n return;\n }\n node = DataSource.fn[method].call(this, value);\n if (node) {\n return node;\n }\n data = this._flatData(this._data);\n for (idx = 0, length = data.length; idx < length; idx++) {\n children = data[idx].children;\n if (!(children instanceof HierarchicalDataSource)) {\n continue;\n }\n node = children[method](value);\n if (node) {\n return node;\n }\n }\n },\n get: function (id) {\n return this._find('get', id);\n },\n getByUid: function (uid) {\n return this._find('getByUid', uid);\n }\n });\n function inferList(list, fields) {\n var items = $(list).children(), idx, length, data = [], record, textField = fields[0].field, urlField = fields[1] && fields[1].field, spriteCssClassField = fields[2] && fields[2].field, imageUrlField = fields[3] && fields[3].field, item, id, textChild, className, children;\n function elements(collection, tagName) {\n return collection.filter(tagName).add(collection.find(tagName));\n }\n for (idx = 0, length = items.length; idx < length; idx++) {\n record = { _loaded: true };\n item = items.eq(idx);\n textChild = item[0].firstChild;\n children = item.children();\n list = children.filter('ul');\n children = children.filter(':not(ul)');\n id = item.attr('data-id');\n if (id) {\n record.id = id;\n }\n if (textChild) {\n record[textField] = textChild.nodeType == 3 ? textChild.nodeValue : children.text();\n }\n if (urlField) {\n record[urlField] = elements(children, 'a').attr('href');\n }\n if (imageUrlField) {\n record[imageUrlField] = elements(children, 'img').attr('src');\n }\n if (spriteCssClassField) {\n className = elements(children, '.k-sprite').prop('className');\n record[spriteCssClassField] = className && $.trim(className.replace('k-sprite', ''));\n }\n if (list.length) {\n record.items = inferList(list.eq(0), fields);\n }\n if (item.attr('data-hasChildren') == 'true') {\n record.hasChildren = true;\n }\n data.push(record);\n }\n return data;\n }\n HierarchicalDataSource.create = function (options) {\n options = options && options.push ? { data: options } : options;\n var dataSource = options || {}, data = dataSource.data, fields = dataSource.fields, list = dataSource.list;\n if (data && data._dataSource) {\n return data._dataSource;\n }\n if (!data && fields && !dataSource.transport) {\n if (list) {\n data = inferList(list, fields);\n }\n }\n dataSource.data = data;\n return dataSource instanceof HierarchicalDataSource ? dataSource : new HierarchicalDataSource(dataSource);\n };\n var Buffer = kendo.Observable.extend({\n init: function (dataSource, viewSize, disablePrefetch) {\n kendo.Observable.fn.init.call(this);\n this._prefetching = false;\n this.dataSource = dataSource;\n this.prefetch = !disablePrefetch;\n var buffer = this;\n dataSource.bind('change', function () {\n buffer._change();\n });\n dataSource.bind('reset', function () {\n buffer._reset();\n });\n this._syncWithDataSource();\n this.setViewSize(viewSize);\n },\n setViewSize: function (viewSize) {\n this.viewSize = viewSize;\n this._recalculate();\n },\n at: function (index) {\n var pageSize = this.pageSize, itemPresent = true;\n if (index >= this.total()) {\n this.trigger('endreached', { index: index });\n return null;\n }\n if (!this.useRanges) {\n return this.dataSource.view()[index];\n }\n if (this.useRanges) {\n if (index < this.dataOffset || index >= this.skip + pageSize) {\n itemPresent = this.range(Math.floor(index / pageSize) * pageSize);\n }\n if (index === this.prefetchThreshold) {\n this._prefetch();\n }\n if (index === this.midPageThreshold) {\n this.range(this.nextMidRange, true);\n } else if (index === this.nextPageThreshold) {\n this.range(this.nextFullRange);\n } else if (index === this.pullBackThreshold) {\n if (this.offset === this.skip) {\n this.range(this.previousMidRange);\n } else {\n this.range(this.previousFullRange);\n }\n }\n if (itemPresent) {\n return this.dataSource.at(index - this.dataOffset);\n } else {\n this.trigger('endreached', { index: index });\n return null;\n }\n }\n },\n indexOf: function (item) {\n return this.dataSource.data().indexOf(item) + this.dataOffset;\n },\n total: function () {\n return parseInt(this.dataSource.total(), 10);\n },\n next: function () {\n var buffer = this, pageSize = buffer.pageSize, offset = buffer.skip - buffer.viewSize + pageSize, pageSkip = math.max(math.floor(offset / pageSize), 0) * pageSize;\n this.offset = offset;\n this.dataSource.prefetch(pageSkip, pageSize, function () {\n buffer._goToRange(offset, true);\n });\n },\n range: function (offset, nextRange) {\n if (this.offset === offset) {\n return true;\n }\n var buffer = this, pageSize = this.pageSize, pageSkip = math.max(math.floor(offset / pageSize), 0) * pageSize, dataSource = this.dataSource;\n if (nextRange) {\n pageSkip += pageSize;\n }\n if (dataSource.inRange(offset, pageSize)) {\n this.offset = offset;\n this._recalculate();\n this._goToRange(offset);\n return true;\n } else if (this.prefetch) {\n dataSource.prefetch(pageSkip, pageSize, function () {\n buffer.offset = offset;\n buffer._recalculate();\n buffer._goToRange(offset, true);\n });\n return false;\n }\n return true;\n },\n syncDataSource: function () {\n var offset = this.offset;\n this.offset = null;\n this.range(offset);\n },\n destroy: function () {\n this.unbind();\n },\n _prefetch: function () {\n var buffer = this, pageSize = this.pageSize, prefetchOffset = this.skip + pageSize, dataSource = this.dataSource;\n if (!dataSource.inRange(prefetchOffset, pageSize) && !this._prefetching && this.prefetch) {\n this._prefetching = true;\n this.trigger('prefetching', {\n skip: prefetchOffset,\n take: pageSize\n });\n dataSource.prefetch(prefetchOffset, pageSize, function () {\n buffer._prefetching = false;\n buffer.trigger('prefetched', {\n skip: prefetchOffset,\n take: pageSize\n });\n });\n }\n },\n _goToRange: function (offset, expanding) {\n if (this.offset !== offset) {\n return;\n }\n this.dataOffset = offset;\n this._expanding = expanding;\n this.dataSource.range(offset, this.pageSize);\n this.dataSource.enableRequestsInProgress();\n },\n _reset: function () {\n this._syncPending = true;\n },\n _change: function () {\n var dataSource = this.dataSource;\n this.length = this.useRanges ? dataSource.lastRange().end : dataSource.view().length;\n if (this._syncPending) {\n this._syncWithDataSource();\n this._recalculate();\n this._syncPending = false;\n this.trigger('reset', { offset: this.offset });\n }\n this.trigger('resize');\n if (this._expanding) {\n this.trigger('expand');\n }\n delete this._expanding;\n },\n _syncWithDataSource: function () {\n var dataSource = this.dataSource;\n this._firstItemUid = dataSource.firstItemUid();\n this.dataOffset = this.offset = dataSource.skip() || 0;\n this.pageSize = dataSource.pageSize();\n this.useRanges = dataSource.options.serverPaging;\n },\n _recalculate: function () {\n var pageSize = this.pageSize, offset = this.offset, viewSize = this.viewSize, skip = Math.ceil(offset / pageSize) * pageSize;\n this.skip = skip;\n this.midPageThreshold = skip + pageSize - 1;\n this.nextPageThreshold = skip + viewSize - 1;\n this.prefetchThreshold = skip + Math.floor(pageSize / 3 * 2);\n this.pullBackThreshold = this.offset - 1;\n this.nextMidRange = skip + pageSize - viewSize;\n this.nextFullRange = skip;\n this.previousMidRange = offset - viewSize;\n this.previousFullRange = skip - pageSize;\n }\n });\n var BatchBuffer = kendo.Observable.extend({\n init: function (dataSource, batchSize) {\n var batchBuffer = this;\n kendo.Observable.fn.init.call(batchBuffer);\n this.dataSource = dataSource;\n this.batchSize = batchSize;\n this._total = 0;\n this.buffer = new Buffer(dataSource, batchSize * 3);\n this.buffer.bind({\n 'endreached': function (e) {\n batchBuffer.trigger('endreached', { index: e.index });\n },\n 'prefetching': function (e) {\n batchBuffer.trigger('prefetching', {\n skip: e.skip,\n take: e.take\n });\n },\n 'prefetched': function (e) {\n batchBuffer.trigger('prefetched', {\n skip: e.skip,\n take: e.take\n });\n },\n 'reset': function () {\n batchBuffer._total = 0;\n batchBuffer.trigger('reset');\n },\n 'resize': function () {\n batchBuffer._total = Math.ceil(this.length / batchBuffer.batchSize);\n batchBuffer.trigger('resize', {\n total: batchBuffer.total(),\n offset: this.offset\n });\n }\n });\n },\n syncDataSource: function () {\n this.buffer.syncDataSource();\n },\n at: function (index) {\n var buffer = this.buffer, skip = index * this.batchSize, take = this.batchSize, view = [], item;\n if (buffer.offset > skip) {\n buffer.at(buffer.offset - 1);\n }\n for (var i = 0; i < take; i++) {\n item = buffer.at(skip + i);\n if (item === null) {\n break;\n }\n view.push(item);\n }\n return view;\n },\n total: function () {\n return this._total;\n },\n destroy: function () {\n this.buffer.destroy();\n this.unbind();\n }\n });\n extend(true, kendo.data, {\n readers: { json: DataReader },\n Query: Query,\n DataSource: DataSource,\n HierarchicalDataSource: HierarchicalDataSource,\n Node: Node,\n ObservableObject: ObservableObject,\n ObservableArray: ObservableArray,\n LazyObservableArray: LazyObservableArray,\n LocalTransport: LocalTransport,\n RemoteTransport: RemoteTransport,\n Cache: Cache,\n DataReader: DataReader,\n Model: Model,\n Buffer: Buffer,\n BatchBuffer: BatchBuffer\n });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.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-type') || this.element.type || 'text';\n return dataType.toLowerCase();\n },\n parsedValue: function () {\n return this._parseValue(this.element.value, this.dataType());\n },\n _parseValue: function (value, dataType) {\n if (dataType == 'date') {\n value = kendo.parseDate(value, 'yyyy-MM-dd');\n } else if (dataType == 'datetime-local') {\n value = kendo.parseDate(value, [\n 'yyyy-MM-ddTHH:mm:ss',\n 'yyyy-MM-ddTHH:mm'\n ]);\n } else if (dataType == 'number') {\n value = kendo.parseFloat(value);\n } else if (dataType == 'boolean') {\n value = value.toLowerCase();\n if (kendo.parseFloat(value) !== null) {\n value = Boolean(kendo.parseFloat(value));\n } else {\n value = value.toLowerCase() === 'true';\n }\n }\n return value;\n }\n });\n binders.attr = Binder.extend({\n refresh: function (key) {\n this.element.setAttribute(key, this.bindings.attr[key].get());\n }\n });\n binders.css = Binder.extend({\n init: function (element, bindings, options) {\n Binder.fn.init.call(this, element, bindings, options);\n this.classes = {};\n },\n refresh: function (className) {\n var element = $(this.element), binding = this.bindings.css[className], hasClass = this.classes[className] = binding.get();\n if (hasClass) {\n element.addClass(className);\n } else {\n element.removeClass(className);\n }\n }\n });\n binders.style = Binder.extend({\n refresh: function (key) {\n this.element.style[key] = this.bindings.style[key].get() || '';\n }\n });\n binders.enabled = Binder.extend({\n refresh: function () {\n if (this.bindings.enabled.get()) {\n this.element.removeAttribute('disabled');\n } else {\n this.element.setAttribute('disabled', 'disabled');\n }\n }\n });\n binders.readonly = Binder.extend({\n refresh: function () {\n if (this.bindings.readonly.get()) {\n this.element.setAttribute('readonly', 'readonly');\n } else {\n this.element.removeAttribute('readonly');\n }\n }\n });\n binders.disabled = Binder.extend({\n refresh: function () {\n if (this.bindings.disabled.get()) {\n this.element.setAttribute('disabled', 'disabled');\n } else {\n this.element.removeAttribute('disabled');\n }\n }\n });\n binders.events = Binder.extend({\n init: function (element, bindings, options) {\n Binder.fn.init.call(this, element, bindings, options);\n this.handlers = {};\n },\n refresh: function (key) {\n var element = $(this.element), binding = this.bindings.events[key], handler = this.handlers[key];\n if (handler) {\n element.off(key, handler);\n }\n handler = this.handlers[key] = binding.get();\n element.on(key, binding.source, handler);\n },\n destroy: function () {\n var element = $(this.element), handler;\n for (handler in this.handlers) {\n element.off(handler, this.handlers[handler]);\n }\n }\n });\n binders.text = Binder.extend({\n refresh: function () {\n var text = this.bindings.text.get();\n var dataFormat = this.element.getAttribute('data-format') || '';\n if (text == null) {\n text = '';\n }\n $(this.element).text(kendo.toString(text, dataFormat));\n }\n });\n binders.visible = Binder.extend({\n refresh: function () {\n if (this.bindings.visible.get()) {\n this.element.style.display = '';\n } else {\n this.element.style.display = 'none';\n }\n }\n });\n binders.invisible = Binder.extend({\n refresh: function () {\n if (!this.bindings.invisible.get()) {\n this.element.style.display = '';\n } else {\n this.element.style.display = 'none';\n }\n }\n });\n binders.html = Binder.extend({\n refresh: function () {\n this.element.innerHTML = this.bindings.html.get();\n }\n });\n binders.value = TypedBinder.extend({\n init: function (element, bindings, options) {\n TypedBinder.fn.init.call(this, element, bindings, options);\n this._change = proxy(this.change, this);\n this.eventName = options.valueUpdate || CHANGE;\n $(this.element).on(this.eventName, this._change);\n this._initChange = false;\n },\n change: function () {\n this._initChange = this.eventName != CHANGE;\n this.bindings[VALUE].set(this.parsedValue());\n this._initChange = false;\n },\n refresh: function () {\n if (!this._initChange) {\n var value = this.bindings[VALUE].get();\n if (value == null) {\n value = '';\n }\n var type = this.dataType();\n if (type == 'date') {\n value = kendo.toString(value, 'yyyy-MM-dd');\n } else if (type == 'datetime-local') {\n value = kendo.toString(value, 'yyyy-MM-ddTHH:mm:ss');\n }\n this.element.value = value;\n }\n this._initChange = false;\n },\n destroy: function () {\n $(this.element).off(this.eventName, this._change);\n }\n });\n binders.source = Binder.extend({\n init: function (element, bindings, options) {\n Binder.fn.init.call(this, element, bindings, options);\n var source = this.bindings.source.get();\n if (source instanceof kendo.data.DataSource && options.autoBind !== false) {\n source.fetch();\n }\n },\n refresh: function (e) {\n var that = this, source = that.bindings.source.get();\n if (source instanceof ObservableArray || source instanceof kendo.data.DataSource) {\n e = e || {};\n if (e.action == 'add') {\n that.add(e.index, e.items);\n } else if (e.action == 'remove') {\n that.remove(e.index, e.items);\n } else if (e.action != 'itemchange') {\n that.render();\n }\n } else {\n that.render();\n }\n },\n container: function () {\n var element = this.element;\n if (element.nodeName.toLowerCase() == 'table') {\n if (!element.tBodies[0]) {\n element.appendChild(document.createElement('tbody'));\n }\n element = element.tBodies[0];\n }\n return element;\n },\n template: function () {\n var options = this.options, template = options.template, nodeName = this.container().nodeName.toLowerCase();\n if (!template) {\n if (nodeName == 'select') {\n if (options.valueField || options.textField) {\n template = kendo.format('', options.valueField || options.textField, options.textField || options.valueField);\n } else {\n template = '';\n }\n } else if (nodeName == 'tbody') {\n template = '#:data#';\n } else if (nodeName == 'ul' || nodeName == 'ol') {\n template = '
  • #:data#
  • ';\n } else {\n template = '#:data#';\n }\n template = kendo.template(template);\n }\n return template;\n },\n add: function (index, items) {\n var element = this.container(), parents, idx, length, child, clone = element.cloneNode(false), reference = element.children[index];\n $(clone).html(kendo.render(this.template(), items));\n if (clone.children.length) {\n parents = this.bindings.source._parents();\n for (idx = 0, length = items.length; idx < length; idx++) {\n child = clone.children[0];\n element.insertBefore(child, reference || null);\n bindElement(child, items[idx], this.options.roles, [items[idx]].concat(parents));\n }\n }\n },\n remove: function (index, items) {\n var idx, element = this.container();\n for (idx = 0; idx < items.length; idx++) {\n var child = element.children[index];\n unbindElementTree(child, true);\n if (child.parentNode == element) {\n element.removeChild(child);\n }\n }\n },\n render: function () {\n var source = this.bindings.source.get(), parents, idx, length, element = this.container(), template = this.template();\n if (source == null) {\n return;\n }\n if (source instanceof kendo.data.DataSource) {\n source = source.view();\n }\n if (!(source instanceof ObservableArray) && toString.call(source) !== '[object Array]') {\n source = [source];\n }\n if (this.bindings.template) {\n unbindElementChildren(element, true);\n $(element).html(this.bindings.template.render(source));\n if (element.children.length) {\n parents = this.bindings.source._parents();\n for (idx = 0, length = source.length; idx < length; idx++) {\n bindElement(element.children[idx], source[idx], this.options.roles, [source[idx]].concat(parents));\n }\n }\n } else {\n $(element).html(kendo.render(template, source));\n }\n }\n });\n binders.input = {\n checked: TypedBinder.extend({\n init: function (element, bindings, options) {\n TypedBinder.fn.init.call(this, element, bindings, options);\n this._change = proxy(this.change, this);\n $(this.element).change(this._change);\n },\n change: function () {\n var element = this.element;\n var value = this.value();\n if (element.type == 'radio') {\n value = this.parsedValue();\n this.bindings[CHECKED].set(value);\n } else if (element.type == 'checkbox') {\n var source = this.bindings[CHECKED].get();\n var index;\n if (source instanceof ObservableArray) {\n value = this.parsedValue();\n if (value instanceof Date) {\n for (var i = 0; i < source.length; i++) {\n if (source[i] instanceof Date && +source[i] === +value) {\n index = i;\n break;\n }\n }\n } else {\n index = source.indexOf(value);\n }\n if (index > -1) {\n source.splice(index, 1);\n } else {\n source.push(value);\n }\n } else {\n this.bindings[CHECKED].set(value);\n }\n }\n },\n refresh: function () {\n var value = this.bindings[CHECKED].get(), source = value, type = this.dataType(), element = this.element;\n if (element.type == 'checkbox') {\n if (source instanceof ObservableArray) {\n var index = -1;\n value = this.parsedValue();\n if (value instanceof Date) {\n for (var i = 0; i < source.length; i++) {\n if (source[i] instanceof Date && +source[i] === +value) {\n index = i;\n break;\n }\n }\n } else {\n index = source.indexOf(value);\n }\n element.checked = index >= 0;\n } else {\n element.checked = source;\n }\n } else if (element.type == 'radio') {\n if (type == 'date') {\n value = kendo.toString(value, 'yyyy-MM-dd');\n } else if (type == 'datetime-local') {\n value = kendo.toString(value, 'yyyy-MM-ddTHH:mm:ss');\n }\n if (value !== null && typeof value !== 'undefined' && element.value === value.toString()) {\n element.checked = true;\n } else {\n element.checked = false;\n }\n }\n },\n value: function () {\n var element = this.element, value = element.value;\n if (element.type == 'checkbox') {\n value = element.checked;\n }\n return value;\n },\n destroy: function () {\n $(this.element).off(CHANGE, this._change);\n }\n })\n };\n binders.select = {\n source: binders.source.extend({\n refresh: function (e) {\n var that = this, source = that.bindings.source.get();\n if (source instanceof ObservableArray || source instanceof kendo.data.DataSource) {\n e = e || {};\n if (e.action == 'add') {\n that.add(e.index, e.items);\n } else if (e.action == 'remove') {\n that.remove(e.index, e.items);\n } else if (e.action == 'itemchange' || e.action === undefined) {\n that.render();\n if (that.bindings.value) {\n if (that.bindings.value) {\n var val = retrievePrimitiveValues(that.bindings.value.get(), $(that.element).data('valueField'));\n if (val === null) {\n that.element.selectedIndex = -1;\n } else {\n that.element.value = val;\n }\n }\n }\n }\n } else {\n that.render();\n }\n }\n }),\n value: TypedBinder.extend({\n init: function (target, bindings, options) {\n TypedBinder.fn.init.call(this, target, bindings, options);\n this._change = proxy(this.change, this);\n $(this.element).change(this._change);\n },\n parsedValue: function () {\n var dataType = this.dataType();\n var values = [];\n var value, option, idx, length;\n for (idx = 0, length = this.element.options.length; idx < length; idx++) {\n option = this.element.options[idx];\n if (option.selected) {\n value = option.attributes.value;\n if (value && value.specified) {\n value = option.value;\n } else {\n value = option.text;\n }\n values.push(this._parseValue(value, dataType));\n }\n }\n return values;\n },\n change: function () {\n var values = [], element = this.element, source, field = this.options.valueField || this.options.textField, valuePrimitive = this.options.valuePrimitive, option, valueIndex, value, idx, length;\n for (idx = 0, length = element.options.length; idx < length; idx++) {\n option = element.options[idx];\n if (option.selected) {\n value = option.attributes.value;\n if (value && value.specified) {\n value = option.value;\n } else {\n value = option.text;\n }\n if (field) {\n values.push(value);\n } else {\n values.push(this._parseValue(value, this.dataType()));\n }\n }\n }\n if (field) {\n source = this.bindings.source.get();\n if (source instanceof kendo.data.DataSource) {\n source = source.view();\n }\n for (valueIndex = 0; valueIndex < values.length; valueIndex++) {\n for (idx = 0, length = source.length; idx < length; idx++) {\n var sourceValue = source[idx].get(field);\n var match = String(sourceValue) === values[valueIndex];\n if (match) {\n values[valueIndex] = source[idx];\n break;\n }\n }\n }\n }\n value = this.bindings[VALUE].get();\n if (value instanceof ObservableArray) {\n value.splice.apply(value, [\n 0,\n value.length\n ].concat(values));\n } else if (!valuePrimitive && (value instanceof ObservableObject || value === null || value === undefined || !field)) {\n this.bindings[VALUE].set(values[0]);\n } else {\n this.bindings[VALUE].set(values[0].get(field));\n }\n },\n refresh: function () {\n var optionIndex, element = this.element, options = element.options, value = this.bindings[VALUE].get(), values = value, field = this.options.valueField || this.options.textField, found = false, type = this.dataType(), optionValue;\n if (!(values instanceof ObservableArray)) {\n values = new ObservableArray([value]);\n }\n element.selectedIndex = -1;\n for (var valueIndex = 0; valueIndex < values.length; valueIndex++) {\n value = values[valueIndex];\n if (field && value instanceof ObservableObject) {\n value = value.get(field);\n }\n if (type == 'date') {\n value = kendo.toString(values[valueIndex], 'yyyy-MM-dd');\n } else if (type == 'datetime-local') {\n value = kendo.toString(values[valueIndex], 'yyyy-MM-ddTHH:mm:ss');\n }\n for (optionIndex = 0; optionIndex < options.length; optionIndex++) {\n optionValue = options[optionIndex].value;\n if (optionValue === '' && value !== '') {\n optionValue = options[optionIndex].text;\n }\n if (value != null && optionValue == value.toString()) {\n options[optionIndex].selected = true;\n found = true;\n }\n }\n }\n },\n destroy: function () {\n $(this.element).off(CHANGE, this._change);\n }\n })\n };\n function dataSourceBinding(bindingName, fieldName, setter) {\n return Binder.extend({\n init: function (widget, bindings, options) {\n var that = this;\n Binder.fn.init.call(that, widget.element[0], bindings, options);\n that.widget = widget;\n that._dataBinding = proxy(that.dataBinding, that);\n that._dataBound = proxy(that.dataBound, that);\n that._itemChange = proxy(that.itemChange, that);\n },\n itemChange: function (e) {\n bindElement(e.item[0], e.data, this._ns(e.ns), [e.data].concat(this.bindings[bindingName]._parents()));\n },\n dataBinding: function (e) {\n var idx, length, widget = this.widget, items = e.removedItems || widget.items();\n for (idx = 0, length = items.length; idx < length; idx++) {\n unbindElementTree(items[idx], false);\n }\n },\n _ns: function (ns) {\n ns = ns || kendo.ui;\n var all = [\n kendo.ui,\n kendo.dataviz.ui,\n kendo.mobile.ui\n ];\n all.splice($.inArray(ns, all), 1);\n all.unshift(ns);\n return kendo.rolesFromNamespaces(all);\n },\n dataBound: function (e) {\n var idx, length, widget = this.widget, items = e.addedItems || widget.items(), dataSource = widget[fieldName], view, parents, hds = kendo.data.HierarchicalDataSource;\n if (hds && dataSource instanceof hds) {\n return;\n }\n if (items.length) {\n view = e.addedDataItems || dataSource.flatView();\n parents = this.bindings[bindingName]._parents();\n for (idx = 0, length = view.length; idx < length; idx++) {\n if (items[idx]) {\n bindElement(items[idx], view[idx], this._ns(e.ns), [view[idx]].concat(parents));\n }\n }\n }\n },\n refresh: function (e) {\n var that = this, source, widget = that.widget, select, multiselect, dropdowntree;\n e = e || {};\n if (!e.action) {\n that.destroy();\n widget.bind('dataBinding', that._dataBinding);\n widget.bind('dataBound', that._dataBound);\n widget.bind('itemChange', that._itemChange);\n source = that.bindings[bindingName].get();\n if (widget[fieldName] instanceof kendo.data.DataSource && widget[fieldName] != source) {\n if (source instanceof kendo.data.DataSource) {\n widget[setter](source);\n } else if (source && source._dataSource) {\n widget[setter](source._dataSource);\n } else {\n select = kendo.ui.Select && widget instanceof kendo.ui.Select;\n multiselect = kendo.ui.MultiSelect && widget instanceof kendo.ui.MultiSelect;\n dropdowntree = kendo.ui.DropDownTree && widget instanceof kendo.ui.DropDownTree;\n if (!dropdowntree) {\n widget[fieldName].data(source);\n } else {\n widget.treeview[fieldName].data(source);\n }\n if (that.bindings.value && (select || multiselect)) {\n widget.value(retrievePrimitiveValues(that.bindings.value.get(), widget.options.dataValueField));\n }\n }\n }\n }\n },\n destroy: function () {\n var widget = this.widget;\n widget.unbind('dataBinding', this._dataBinding);\n widget.unbind('dataBound', this._dataBound);\n widget.unbind('itemChange', this._itemChange);\n }\n });\n }\n binders.widget = {\n events: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n this.handlers = {};\n },\n refresh: function (key) {\n var binding = this.bindings.events[key], handler = this.handlers[key];\n if (handler) {\n this.widget.unbind(key, handler);\n }\n handler = binding.get();\n this.handlers[key] = function (e) {\n e.data = binding.source;\n handler(e);\n if (e.data === binding.source) {\n delete e.data;\n }\n };\n this.widget.bind(key, this.handlers[key]);\n },\n destroy: function () {\n var handler;\n for (handler in this.handlers) {\n this.widget.unbind(handler, this.handlers[handler]);\n }\n }\n }),\n checked: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n this._change = proxy(this.change, this);\n this.widget.bind(CHANGE, this._change);\n },\n change: function () {\n this.bindings[CHECKED].set(this.value());\n },\n refresh: function () {\n this.widget.check(this.bindings[CHECKED].get() === true);\n },\n value: function () {\n var element = this.element, value = element.value;\n if (value == 'on' || value == 'off' || this.element.type == 'checkbox') {\n value = element.checked;\n }\n return value;\n },\n destroy: function () {\n this.widget.unbind(CHANGE, this._change);\n }\n }),\n start: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this._change = proxy(this.change, this);\n this.widget = widget;\n this.widget.bind(CHANGE, this._change);\n },\n change: function () {\n this.bindings.start.set(this.widget.range().start);\n },\n refresh: function () {\n var that = this;\n var start = this.bindings.start.get();\n var end = that.widget._range ? that.widget._range.end : null;\n this.widget.range({\n start: start,\n end: end\n });\n },\n destroy: function () {\n this.widget.unbind(CHANGE, this._change);\n }\n }),\n end: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this._change = proxy(this.change, this);\n this.widget = widget;\n this.widget.bind(CHANGE, this._change);\n },\n change: function () {\n this.bindings.end.set(this.widget.range().end);\n },\n refresh: function () {\n var that = this;\n var end = this.bindings.end.get();\n var start = that.widget._range ? that.widget._range.start : null;\n this.widget.range({\n start: start,\n end: end\n });\n },\n destroy: function () {\n this.widget.unbind(CHANGE, this._change);\n }\n }),\n visible: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n },\n refresh: function () {\n var visible = this.bindings.visible.get();\n this.widget.wrapper[0].style.display = visible ? '' : 'none';\n }\n }),\n invisible: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n },\n refresh: function () {\n var invisible = this.bindings.invisible.get();\n this.widget.wrapper[0].style.display = invisible ? 'none' : '';\n }\n }),\n enabled: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n },\n refresh: function () {\n if (this.widget.enable) {\n this.widget.enable(this.bindings.enabled.get());\n }\n }\n }),\n disabled: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n },\n refresh: function () {\n if (this.widget.enable) {\n this.widget.enable(!this.bindings.disabled.get());\n }\n }\n }),\n source: dataSourceBinding('source', 'dataSource', 'setDataSource'),\n value: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n this._change = $.proxy(this.change, this);\n this.widget.first(CHANGE, this._change);\n var value = this.bindings.value.get();\n this._valueIsObservableObject = !options.valuePrimitive && (value == null || value instanceof ObservableObject);\n this._valueIsObservableArray = value instanceof ObservableArray;\n this._initChange = false;\n },\n _source: function () {\n var source;\n if (this.widget.dataItem) {\n source = this.widget.dataItem();\n if (source && source instanceof ObservableObject) {\n return [source];\n }\n }\n if (this.bindings.source) {\n source = this.bindings.source.get();\n }\n if (!source || source instanceof kendo.data.DataSource) {\n source = this.widget.dataSource.flatView();\n }\n return source;\n },\n change: function () {\n var value = this.widget.value(), field = this.options.dataValueField || this.options.dataTextField, isArray = toString.call(value) === '[object Array]', isObservableObject = this._valueIsObservableObject, valueIndex, valueLength, values = [], sourceItem, sourceValue, idx, length, source;\n this._initChange = true;\n if (field) {\n if (value === '' && (isObservableObject || this.options.valuePrimitive)) {\n value = null;\n } else {\n source = this._source();\n if (isArray) {\n valueLength = value.length;\n values = value.slice(0);\n }\n for (idx = 0, length = source.length; idx < length; idx++) {\n sourceItem = source[idx];\n sourceValue = sourceItem.get(field);\n if (isArray) {\n for (valueIndex = 0; valueIndex < valueLength; valueIndex++) {\n if (sourceValue == values[valueIndex]) {\n values[valueIndex] = sourceItem;\n break;\n }\n }\n } else if (sourceValue == value) {\n value = isObservableObject ? sourceItem : sourceValue;\n break;\n }\n }\n if (values[0]) {\n if (this._valueIsObservableArray) {\n value = values;\n } else if (isObservableObject || !field) {\n value = values[0];\n } else {\n value = values[0].get(field);\n }\n }\n }\n }\n this.bindings.value.set(value);\n this._initChange = false;\n },\n refresh: function () {\n if (!this._initChange) {\n var widget = this.widget;\n var options = widget.options;\n var textField = options.dataTextField;\n var valueField = options.dataValueField || textField;\n var value = this.bindings.value.get();\n var text = options.text || '';\n var idx = 0, length;\n var values = [];\n if (value === undefined) {\n value = null;\n }\n if (valueField) {\n if (value instanceof ObservableArray) {\n for (length = value.length; idx < length; idx++) {\n values[idx] = value[idx].get(valueField);\n }\n value = values;\n } else if (value instanceof ObservableObject) {\n text = value.get(textField);\n value = value.get(valueField);\n }\n }\n if (options.autoBind === false && !options.cascadeFrom && widget.listView && !widget.listView.bound()) {\n if (textField === valueField && !text) {\n text = value;\n }\n if (!text && (value || value === 0) && options.valuePrimitive) {\n widget.value(value);\n } else {\n widget._preselect(value, text);\n }\n } else {\n widget.value(value);\n }\n }\n this._initChange = false;\n },\n destroy: function () {\n this.widget.unbind(CHANGE, this._change);\n }\n }),\n dropdowntree: {\n value: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n this._change = $.proxy(this.change, this);\n this.widget.first(CHANGE, this._change);\n this._initChange = false;\n },\n change: function () {\n var that = this, oldValues = that.bindings[VALUE].get(), valuePrimitive = that.options.valuePrimitive, selectedNode = that.widget.treeview.select(), nonPrimitiveValues = that.widget._isMultipleSelection() ? that.widget._getAllChecked() : that.widget.treeview.dataItem(selectedNode) || that.widget.value(), newValues = valuePrimitive || that.widget.options.autoBind === false ? that.widget.value() : nonPrimitiveValues;\n var field = this.options.dataValueField || this.options.dataTextField;\n newValues = newValues.slice ? newValues.slice(0) : newValues;\n that._initChange = true;\n if (oldValues instanceof ObservableArray) {\n var remove = [];\n var newLength = newValues.length;\n var i = 0, j = 0;\n var old = oldValues[i];\n var same = false;\n var removeIndex;\n var newValue;\n var found;\n while (old !== undefined) {\n found = false;\n for (j = 0; j < newLength; j++) {\n if (valuePrimitive) {\n same = newValues[j] == old;\n } else {\n newValue = newValues[j];\n newValue = newValue.get ? newValue.get(field) : newValue;\n same = newValue == (old.get ? old.get(field) : old);\n }\n if (same) {\n newValues.splice(j, 1);\n newLength -= 1;\n found = true;\n break;\n }\n }\n if (!found) {\n remove.push(old);\n arraySplice(oldValues, i, 1);\n removeIndex = i;\n } else {\n i += 1;\n }\n old = oldValues[i];\n }\n arraySplice(oldValues, oldValues.length, 0, newValues);\n if (remove.length) {\n oldValues.trigger('change', {\n action: 'remove',\n items: remove,\n index: removeIndex\n });\n }\n if (newValues.length) {\n oldValues.trigger('change', {\n action: 'add',\n items: newValues,\n index: oldValues.length - 1\n });\n }\n } else {\n that.bindings[VALUE].set(newValues);\n }\n that._initChange = false;\n },\n refresh: function () {\n if (!this._initChange) {\n var options = this.options, widget = this.widget, field = options.dataValueField || options.dataTextField, value = this.bindings.value.get(), data = value, idx = 0, length, values = [], selectedValue;\n if (field) {\n if (value instanceof ObservableArray) {\n for (length = value.length; idx < length; idx++) {\n selectedValue = value[idx];\n values[idx] = selectedValue.get ? selectedValue.get(field) : selectedValue;\n }\n value = values;\n } else if (value instanceof ObservableObject) {\n value = value.get(field);\n }\n }\n if (options.autoBind === false && options.valuePrimitive !== true) {\n widget._preselect(data, value);\n } else {\n widget.value(value);\n }\n }\n },\n destroy: function () {\n this.widget.unbind(CHANGE, this._change);\n }\n })\n },\n gantt: { dependencies: dataSourceBinding('dependencies', 'dependencies', 'setDependenciesDataSource') },\n multiselect: {\n value: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n this._change = $.proxy(this.change, this);\n this.widget.first(CHANGE, this._change);\n this._initChange = false;\n },\n change: function () {\n var that = this, oldValues = that.bindings[VALUE].get(), valuePrimitive = that.options.valuePrimitive, newValues = valuePrimitive ? that.widget.value() : that.widget.dataItems();\n var field = this.options.dataValueField || this.options.dataTextField;\n newValues = newValues.slice(0);\n that._initChange = true;\n if (oldValues instanceof ObservableArray) {\n var remove = [];\n var newLength = newValues.length;\n var i = 0, j = 0;\n var old = oldValues[i];\n var same = false;\n var removeIndex;\n var newValue;\n var found;\n while (old !== undefined) {\n found = false;\n for (j = 0; j < newLength; j++) {\n if (valuePrimitive) {\n same = newValues[j] == old;\n } else {\n newValue = newValues[j];\n newValue = newValue.get ? newValue.get(field) : newValue;\n same = newValue == (old.get ? old.get(field) : old);\n }\n if (same) {\n newValues.splice(j, 1);\n newLength -= 1;\n found = true;\n break;\n }\n }\n if (!found) {\n remove.push(old);\n arraySplice(oldValues, i, 1);\n removeIndex = i;\n } else {\n i += 1;\n }\n old = oldValues[i];\n }\n arraySplice(oldValues, oldValues.length, 0, newValues);\n if (remove.length) {\n oldValues.trigger('change', {\n action: 'remove',\n items: remove,\n index: removeIndex\n });\n }\n if (newValues.length) {\n oldValues.trigger('change', {\n action: 'add',\n items: newValues,\n index: oldValues.length - 1\n });\n }\n } else {\n that.bindings[VALUE].set(newValues);\n }\n that._initChange = false;\n },\n refresh: function () {\n if (!this._initChange) {\n var options = this.options, widget = this.widget, field = options.dataValueField || options.dataTextField, value = this.bindings.value.get(), data = value, idx = 0, length, values = [], selectedValue;\n if (value === undefined) {\n value = null;\n }\n if (field) {\n if (value instanceof ObservableArray) {\n for (length = value.length; idx < length; idx++) {\n selectedValue = value[idx];\n values[idx] = selectedValue.get ? selectedValue.get(field) : selectedValue;\n }\n value = values;\n } else if (value instanceof ObservableObject) {\n value = value.get(field);\n }\n }\n if (options.autoBind === false && options.valuePrimitive !== true && !widget._isBound()) {\n widget._preselect(data, value);\n } else {\n widget.value(value);\n }\n }\n },\n destroy: function () {\n this.widget.unbind(CHANGE, this._change);\n }\n })\n },\n scheduler: {\n source: dataSourceBinding('source', 'dataSource', 'setDataSource').extend({\n dataBound: function (e) {\n var idx;\n var length;\n var widget = this.widget;\n var elements = e.addedItems || widget.items();\n var data, parents;\n if (elements.length) {\n data = e.addedDataItems || widget.dataItems();\n parents = this.bindings.source._parents();\n for (idx = 0, length = data.length; idx < length; idx++) {\n bindElement(elements[idx], data[idx], this._ns(e.ns), [data[idx]].concat(parents));\n }\n }\n }\n })\n },\n grid: {\n source: dataSourceBinding('source', 'dataSource', 'setDataSource').extend({\n dataBound: function (e) {\n var idx, length, widget = this.widget, elements = e.addedItems || widget.items(), parents, data;\n if (elements.length) {\n data = e.addedDataItems || widget.dataItems();\n parents = this.bindings.source._parents();\n for (idx = 0, length = data.length; idx < length; idx++) {\n bindElement(elements[idx], data[idx], this._ns(e.ns), [data[idx]].concat(parents));\n }\n }\n }\n })\n }\n };\n var arraySplice = function (arr, idx, remove, add) {\n add = add || [];\n remove = remove || 0;\n var addLength = add.length;\n var oldLength = arr.length;\n var shifted = [].slice.call(arr, idx + remove);\n var shiftedLength = shifted.length;\n var index;\n if (addLength) {\n addLength = idx + addLength;\n index = 0;\n for (; idx < addLength; idx++) {\n arr[idx] = add[index];\n index++;\n }\n arr.length = addLength;\n } else if (remove) {\n arr.length = idx;\n remove += idx;\n while (idx < remove) {\n delete arr[--remove];\n }\n }\n if (shiftedLength) {\n shiftedLength = idx + shiftedLength;\n index = 0;\n for (; idx < shiftedLength; idx++) {\n arr[idx] = shifted[index];\n index++;\n }\n arr.length = shiftedLength;\n }\n idx = arr.length;\n while (idx < oldLength) {\n delete arr[idx];\n idx++;\n }\n };\n var BindingTarget = Class.extend({\n init: function (target, options) {\n this.target = target;\n this.options = options;\n this.toDestroy = [];\n },\n bind: function (bindings) {\n var key, hasValue, hasSource, hasEvents, hasChecked, hasCss, widgetBinding = this instanceof WidgetBindingTarget, specificBinders = this.binders();\n for (key in bindings) {\n if (key == VALUE) {\n hasValue = true;\n } else if (key == SOURCE) {\n hasSource = true;\n } else if (key == EVENTS && !widgetBinding) {\n hasEvents = true;\n } else if (key == CHECKED) {\n hasChecked = true;\n } else if (key == CSS) {\n hasCss = true;\n } else {\n this.applyBinding(key, bindings, specificBinders);\n }\n }\n if (hasSource) {\n this.applyBinding(SOURCE, bindings, specificBinders);\n }\n if (hasValue) {\n this.applyBinding(VALUE, bindings, specificBinders);\n }\n if (hasChecked) {\n this.applyBinding(CHECKED, bindings, specificBinders);\n }\n if (hasEvents && !widgetBinding) {\n this.applyBinding(EVENTS, bindings, specificBinders);\n }\n if (hasCss && !widgetBinding) {\n this.applyBinding(CSS, bindings, specificBinders);\n }\n },\n binders: function () {\n return binders[this.target.nodeName.toLowerCase()] || {};\n },\n applyBinding: function (name, bindings, specificBinders) {\n var binder = specificBinders[name] || binders[name], toDestroy = this.toDestroy, attribute, binding = bindings[name];\n if (binder) {\n binder = new binder(this.target, bindings, this.options);\n toDestroy.push(binder);\n if (binding instanceof Binding) {\n binder.bind(binding);\n toDestroy.push(binding);\n } else {\n for (attribute in binding) {\n binder.bind(binding, attribute);\n toDestroy.push(binding[attribute]);\n }\n }\n } else if (name !== 'template') {\n throw new Error('The ' + name + ' binding is not supported by the ' + this.target.nodeName.toLowerCase() + ' element');\n }\n },\n destroy: function () {\n var idx, length, toDestroy = this.toDestroy;\n for (idx = 0, length = toDestroy.length; idx < length; idx++) {\n toDestroy[idx].destroy();\n }\n }\n });\n var WidgetBindingTarget = BindingTarget.extend({\n binders: function () {\n return binders.widget[this.target.options.name.toLowerCase()] || {};\n },\n applyBinding: function (name, bindings, specificBinders) {\n var binder = specificBinders[name] || binders.widget[name], toDestroy = this.toDestroy, attribute, binding = bindings[name];\n if (binder) {\n binder = new binder(this.target, bindings, this.target.options);\n toDestroy.push(binder);\n if (binding instanceof Binding) {\n binder.bind(binding);\n toDestroy.push(binding);\n } else {\n for (attribute in binding) {\n binder.bind(binding, attribute);\n toDestroy.push(binding[attribute]);\n }\n }\n } else {\n throw new Error('The ' + name + ' binding is not supported by the ' + this.target.options.name + ' widget');\n }\n }\n });\n function bindingTargetForRole(element, roles) {\n var widget = kendo.initWidget(element, {}, roles);\n if (widget) {\n return new WidgetBindingTarget(widget);\n }\n }\n var keyValueRegExp = /[A-Za-z0-9_\\-]+:(\\{([^}]*)\\}|[^,}]+)/g, whiteSpaceRegExp = /\\s/g;\n function parseBindings(bind) {\n var result = {}, idx, length, token, colonIndex, key, value, tokens;\n tokens = bind.match(keyValueRegExp);\n for (idx = 0, length = tokens.length; idx < length; idx++) {\n token = tokens[idx];\n colonIndex = token.indexOf(':');\n key = token.substring(0, colonIndex);\n value = token.substring(colonIndex + 1);\n if (value.charAt(0) == '{') {\n value = parseBindings(value);\n }\n result[key] = value;\n }\n return result;\n }\n function createBindings(bindings, source, type) {\n var binding, result = {};\n for (binding in bindings) {\n result[binding] = new type(source, bindings[binding]);\n }\n return result;\n }\n function bindElement(element, source, roles, parents) {\n if (!element || element.getAttribute('data-' + kendo.ns + 'stop')) {\n return;\n }\n var role = element.getAttribute('data-' + kendo.ns + 'role'), idx, bind = element.getAttribute('data-' + kendo.ns + 'bind'), childrenCopy = [], deep = true, bindings, options = {}, target;\n parents = parents || [source];\n if (role || bind) {\n unbindElement(element, false);\n }\n if (role) {\n target = bindingTargetForRole(element, roles);\n }\n if (bind) {\n bind = parseBindings(bind.replace(whiteSpaceRegExp, ''));\n if (!target) {\n options = kendo.parseOptions(element, {\n textField: '',\n valueField: '',\n template: '',\n valueUpdate: CHANGE,\n valuePrimitive: false,\n autoBind: true\n }, source);\n options.roles = roles;\n target = new BindingTarget(element, options);\n }\n target.source = source;\n bindings = createBindings(bind, parents, Binding);\n if (options.template) {\n bindings.template = new TemplateBinding(parents, '', options.template);\n }\n if (bindings.click) {\n bind.events = bind.events || {};\n bind.events.click = bind.click;\n bindings.click.destroy();\n delete bindings.click;\n }\n if (bindings.source) {\n deep = false;\n }\n if (bind.attr) {\n bindings.attr = createBindings(bind.attr, parents, Binding);\n }\n if (bind.style) {\n bindings.style = createBindings(bind.style, parents, Binding);\n }\n if (bind.events) {\n bindings.events = createBindings(bind.events, parents, EventBinding);\n }\n if (bind.css) {\n bindings.css = createBindings(bind.css, parents, Binding);\n }\n target.bind(bindings);\n }\n if (target) {\n element.kendoBindingTarget = target;\n }\n var children = element.children;\n if (deep && children) {\n for (idx = 0; idx < children.length; idx++) {\n childrenCopy[idx] = children[idx];\n }\n for (idx = 0; idx < childrenCopy.length; idx++) {\n bindElement(childrenCopy[idx], source, roles, parents);\n }\n }\n }\n function bind(dom, object) {\n var idx, length, node, roles = kendo.rolesFromNamespaces([].slice.call(arguments, 2));\n object = kendo.observable(object);\n dom = $(dom);\n for (idx = 0, length = dom.length; idx < length; idx++) {\n node = dom[idx];\n if (node.nodeType === 1) {\n bindElement(node, object, roles);\n }\n }\n }\n function unbindElement(element, destroyWidget) {\n var bindingTarget = element.kendoBindingTarget;\n if (bindingTarget) {\n bindingTarget.destroy();\n if (deleteExpando) {\n delete element.kendoBindingTarget;\n } else if (element.removeAttribute) {\n element.removeAttribute('kendoBindingTarget');\n } else {\n element.kendoBindingTarget = null;\n }\n }\n if (destroyWidget) {\n var widget = kendo.widgetInstance($(element));\n if (widget && typeof widget.destroy === FUNCTION) {\n widget.destroy();\n }\n }\n }\n function unbindElementTree(element, destroyWidgets) {\n unbindElement(element, destroyWidgets);\n unbindElementChildren(element, destroyWidgets);\n }\n function unbindElementChildren(element, destroyWidgets) {\n var children = element.children;\n if (children) {\n for (var idx = 0, length = children.length; idx < length; idx++) {\n unbindElementTree(children[idx], destroyWidgets);\n }\n }\n }\n function unbind(dom) {\n var idx, length;\n dom = $(dom);\n for (idx = 0, length = dom.length; idx < length; idx++) {\n unbindElementTree(dom[idx], false);\n }\n }\n function notify(widget, namespace) {\n var element = widget.element, bindingTarget = element[0].kendoBindingTarget;\n if (bindingTarget) {\n bind(element, bindingTarget.source, namespace);\n }\n }\n function retrievePrimitiveValues(value, valueField) {\n var values = [];\n var idx = 0;\n var length;\n var item;\n if (!valueField) {\n return value;\n }\n if (value instanceof ObservableArray) {\n for (length = value.length; idx < length; idx++) {\n item = value[idx];\n values[idx] = item.get ? item.get(valueField) : item[valueField];\n }\n value = values;\n } else if (value instanceof ObservableObject) {\n value = value.get(valueField);\n }\n return value;\n }\n kendo.unbind = unbind;\n kendo.bind = bind;\n kendo.data.binders = binders;\n kendo.data.Binder = Binder;\n kendo.notify = notify;\n kendo.observable = function (object) {\n if (!(object instanceof ObservableObject)) {\n object = new ObservableObject(object);\n }\n return object;\n };\n kendo.observableHierarchy = function (array) {\n var dataSource = kendo.data.HierarchicalDataSource.create(array);\n function recursiveRead(data) {\n var i, children;\n for (i = 0; i < data.length; i++) {\n data[i]._initChildren();\n children = data[i].children;\n children.fetch();\n data[i].items = children.data();\n recursiveRead(data[i].items);\n }\n }\n dataSource.fetch();\n recursiveRead(dataSource.data());\n dataSource._data._dataSource = dataSource;\n return dataSource._data;\n };\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.validator', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'validator',\n name: 'Validator',\n category: 'web',\n description: 'The Validator offers an easy way to do a client-side form validation.',\n depends: ['core']\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, NS = '.kendoValidator', INVALIDMSG = 'k-invalid-msg', invalidMsgRegExp = new RegExp(INVALIDMSG, 'i'), INVALIDINPUT = 'k-invalid', VALIDINPUT = 'k-valid', emailRegExp = /^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/i, urlRegExp = /^(https?|ftp):\\/\\/(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(\\#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i, INPUTSELECTOR = ':input:not(:button,[type=submit],[type=reset],[disabled],[readonly])', CHECKBOXSELECTOR = ':checkbox:not([disabled],[readonly])', NUMBERINPUTSELECTOR = '[type=number],[type=range]', BLUR = 'blur', NAME = 'name', FORM = 'form', NOVALIDATE = 'novalidate', VALIDATE = 'validate', CHANGE = 'change', VALIDATE_INPUT = 'validateInput', proxy = $.proxy, patternMatcher = function (value, pattern) {\n if (typeof pattern === 'string') {\n pattern = new RegExp('^(?:' + pattern + ')$');\n }\n return pattern.test(value);\n }, matcher = function (input, selector, pattern) {\n var value = input.val();\n if (input.filter(selector).length && value !== '') {\n return patternMatcher(value, pattern);\n }\n return true;\n }, hasAttribute = function (input, name) {\n if (input.length) {\n return input[0].attributes[name] != null;\n }\n return false;\n };\n if (!kendo.ui.validator) {\n kendo.ui.validator = {\n rules: {},\n messages: {}\n };\n }\n function resolveRules(element) {\n var resolvers = kendo.ui.validator.ruleResolvers || {}, rules = {}, name;\n for (name in resolvers) {\n $.extend(true, rules, resolvers[name].resolve(element));\n }\n return rules;\n }\n function decode(value) {\n return value.replace(/&/g, '&').replace(/"/g, '\"').replace(/'/g, '\\'').replace(/</g, '<').replace(/>/g, '>');\n }\n function numberOfDecimalDigits(value) {\n value = (value + '').split('.');\n if (value.length > 1) {\n return value[1].length;\n }\n return 0;\n }\n function parseHtml(text) {\n if ($.parseHTML) {\n return $($.parseHTML(text));\n }\n return $(text);\n }\n function searchForMessageContainer(elements, fieldName) {\n var containers = $(), element, attr;\n for (var idx = 0, length = elements.length; idx < length; idx++) {\n element = elements[idx];\n if (invalidMsgRegExp.test(element.className)) {\n attr = element.getAttribute(kendo.attr('for'));\n if (attr === fieldName) {\n containers = containers.add(element);\n }\n }\n }\n return containers;\n }\n var Validator = Widget.extend({\n init: function (element, options) {\n var that = this, resolved = resolveRules(element), validateAttributeSelector = '[' + kendo.attr('validate') + '!=false]';\n options = options || {};\n options.rules = $.extend({}, kendo.ui.validator.rules, resolved.rules, options.rules);\n options.messages = $.extend({}, kendo.ui.validator.messages, resolved.messages, options.messages);\n Widget.fn.init.call(that, element, options);\n that._errorTemplate = kendo.template(that.options.errorTemplate);\n if (that.element.is(FORM)) {\n that.element.attr(NOVALIDATE, NOVALIDATE);\n }\n that._inputSelector = INPUTSELECTOR + validateAttributeSelector;\n that._checkboxSelector = CHECKBOXSELECTOR + validateAttributeSelector;\n that._errors = {};\n that._attachEvents();\n that._isValidated = false;\n },\n events: [\n VALIDATE,\n CHANGE,\n VALIDATE_INPUT\n ],\n options: {\n name: 'Validator',\n errorTemplate: '' + ' #=message#',\n messages: {\n required: '{0} is required',\n pattern: '{0} is not valid',\n min: '{0} should be greater than or equal to {1}',\n max: '{0} should be smaller than or equal to {1}',\n step: '{0} is not valid',\n email: '{0} is not valid email',\n url: '{0} is not valid URL',\n date: '{0} is not valid date',\n dateCompare: 'End date should be greater than or equal to the start date'\n },\n rules: {\n required: function (input) {\n var checkbox = input.filter('[type=checkbox]').length && !input.is(':checked'), value = input.val();\n return !(hasAttribute(input, 'required') && (!value || value === '' || value.length === 0 || checkbox));\n },\n pattern: function (input) {\n if (input.filter('[type=text],[type=email],[type=url],[type=tel],[type=search],[type=password]').filter('[pattern]').length && input.val() !== '') {\n return patternMatcher(input.val(), input.attr('pattern'));\n }\n return true;\n },\n min: function (input) {\n if (input.filter(NUMBERINPUTSELECTOR + ',[' + kendo.attr('type') + '=number]').filter('[min]').length && input.val() !== '') {\n var min = parseFloat(input.attr('min')) || 0, val = kendo.parseFloat(input.val());\n return min <= val;\n }\n return true;\n },\n max: function (input) {\n if (input.filter(NUMBERINPUTSELECTOR + ',[' + kendo.attr('type') + '=number]').filter('[max]').length && input.val() !== '') {\n var max = parseFloat(input.attr('max')) || 0, val = kendo.parseFloat(input.val());\n return max >= val;\n }\n return true;\n },\n step: function (input) {\n if (input.filter(NUMBERINPUTSELECTOR + ',[' + kendo.attr('type') + '=number]').filter('[step]').length && input.val() !== '') {\n var min = parseFloat(input.attr('min')) || 0, step = parseFloat(input.attr('step')) || 1, val = parseFloat(input.val()), decimals = numberOfDecimalDigits(step), raise;\n if (decimals) {\n raise = Math.pow(10, decimals);\n return Math.floor((val - min) * raise) % (step * raise) / Math.pow(100, decimals) === 0;\n }\n return (val - min) % step === 0;\n }\n return true;\n },\n email: function (input) {\n return matcher(input, '[type=email],[' + kendo.attr('type') + '=email]', emailRegExp);\n },\n url: function (input) {\n return matcher(input, '[type=url],[' + kendo.attr('type') + '=url]', urlRegExp);\n },\n date: function (input) {\n if (input.filter('[type^=date],[' + kendo.attr('type') + '=date]').length && input.val() !== '') {\n return kendo.parseDate(input.val(), input.attr(kendo.attr('format'))) !== null;\n }\n return true;\n }\n },\n validateOnBlur: true\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.element.off(NS);\n },\n value: function () {\n if (!this._isValidated) {\n return false;\n }\n return this.errors().length === 0;\n },\n _submit: function (e) {\n if (!this.validate()) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n e.preventDefault();\n return false;\n }\n return true;\n },\n _checkElement: function (element) {\n var state = this.value();\n this.validateInput(element);\n if (this.value() !== state) {\n this.trigger(CHANGE);\n }\n },\n _attachEvents: function () {\n var that = this;\n if (that.element.is(FORM)) {\n that.element.on('submit' + NS, proxy(that._submit, that));\n }\n if (that.options.validateOnBlur) {\n if (!that.element.is(INPUTSELECTOR)) {\n that.element.on(BLUR + NS, that._inputSelector, function () {\n that._checkElement($(this));\n });\n that.element.on('click' + NS, that._checkboxSelector, function () {\n that._checkElement($(this));\n });\n } else {\n that.element.on(BLUR + NS, function () {\n that._checkElement(that.element);\n });\n if (that.element.is(CHECKBOXSELECTOR)) {\n that.element.on('click' + NS, function () {\n that._checkElement(that.element);\n });\n }\n }\n }\n },\n validate: function () {\n var inputs;\n var idx;\n var result = false;\n var length;\n var isValid = this.value();\n this._errors = {};\n if (!this.element.is(INPUTSELECTOR)) {\n var invalid = false;\n inputs = this.element.find(this._inputSelector);\n for (idx = 0, length = inputs.length; idx < length; idx++) {\n if (!this.validateInput(inputs.eq(idx))) {\n invalid = true;\n }\n }\n result = !invalid;\n } else {\n result = this.validateInput(this.element);\n }\n this.trigger(VALIDATE, { valid: result });\n if (isValid !== result) {\n this.trigger(CHANGE);\n }\n return result;\n },\n validateInput: function (input) {\n input = $(input);\n this._isValidated = true;\n var that = this, template = that._errorTemplate, result = that._checkValidity(input), valid = result.valid, className = '.' + INVALIDMSG, fieldName = input.attr(NAME) || '', lbl = that._findMessageContainer(fieldName).add(input.next(className).filter(function () {\n var element = $(this);\n if (element.filter('[' + kendo.attr('for') + ']').length) {\n return element.attr(kendo.attr('for')) === fieldName;\n }\n return true;\n })).hide(), messageText, wasValid = !input.attr('aria-invalid');\n input.removeAttr('aria-invalid');\n if (!valid) {\n messageText = that._extractMessage(input, result.key);\n that._errors[fieldName] = messageText;\n var messageLabel = parseHtml(template({ message: decode(messageText) }));\n var lblId = lbl.attr('id');\n that._decorateMessageContainer(messageLabel, fieldName);\n if (lblId) {\n messageLabel.attr('id', lblId);\n }\n if (!lbl.replaceWith(messageLabel).length) {\n messageLabel.insertAfter(input);\n }\n messageLabel.show();\n input.attr('aria-invalid', true);\n } else {\n delete that._errors[fieldName];\n }\n if (wasValid !== valid) {\n this.trigger(VALIDATE_INPUT, {\n valid: valid,\n input: input\n });\n }\n input.toggleClass(INVALIDINPUT, !valid);\n input.toggleClass(VALIDINPUT, valid);\n if (kendo.widgetInstance(input)) {\n var inputWrap = kendo.widgetInstance(input)._inputWrapper;\n if (inputWrap) {\n inputWrap.toggleClass(INVALIDINPUT, !valid);\n inputWrap.toggleClass(INVALIDINPUT, !valid);\n }\n }\n return valid;\n },\n hideMessages: function () {\n var that = this, className = '.' + INVALIDMSG, element = that.element;\n if (!element.is(INPUTSELECTOR)) {\n element.find(className).hide();\n } else {\n element.next(className).hide();\n }\n },\n _findMessageContainer: function (fieldName) {\n var locators = kendo.ui.validator.messageLocators, name, containers = $();\n for (var idx = 0, length = this.element.length; idx < length; idx++) {\n containers = containers.add(searchForMessageContainer(this.element[idx].getElementsByTagName('*'), fieldName));\n }\n for (name in locators) {\n containers = containers.add(locators[name].locate(this.element, fieldName));\n }\n return containers;\n },\n _decorateMessageContainer: function (container, fieldName) {\n var locators = kendo.ui.validator.messageLocators, name;\n container.addClass(INVALIDMSG).attr(kendo.attr('for'), fieldName || '');\n for (name in locators) {\n locators[name].decorate(container, fieldName);\n }\n container.attr('role', 'alert');\n },\n _extractMessage: function (input, ruleKey) {\n var that = this, customMessage = that.options.messages[ruleKey], fieldName = input.attr(NAME), nonDefaultMessage;\n if (!kendo.ui.Validator.prototype.options.messages[ruleKey]) {\n nonDefaultMessage = kendo.isFunction(customMessage) ? customMessage(input) : customMessage;\n }\n customMessage = kendo.isFunction(customMessage) ? customMessage(input) : customMessage;\n return kendo.format(input.attr(kendo.attr(ruleKey + '-msg')) || input.attr('validationMessage') || nonDefaultMessage || input.attr('title') || customMessage || '', fieldName, input.attr(ruleKey) || input.attr(kendo.attr(ruleKey)));\n },\n _checkValidity: function (input) {\n var rules = this.options.rules, rule;\n for (rule in rules) {\n if (!rules[rule].call(this, input)) {\n return {\n valid: false,\n key: rule\n };\n }\n }\n return { valid: true };\n },\n errors: function () {\n var results = [], errors = this._errors, error;\n for (error in errors) {\n results.push(errors[error]);\n }\n return results;\n }\n });\n kendo.ui.plugin(Validator);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.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 that._initOptions(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, { 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 if (that._finished) {\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 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.options.holdToDrag && 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 element.data(EFFECTS, animation.effects).kendoStop(true).kendoAnimate(animation).attr('aria-hidden', false);\n }\n },\n _location: function (isFixed) {\n var that = this, element = that.element, options = that.options, wrapper, anchor = $(options.anchor), mobile = element[0] && element.hasClass('km-widget');\n if (options.copyAnchorStyles) {\n if (mobile && styles[0] == 'font-size') {\n styles.shift();\n }\n element.css(kendo.getComputedStyles(anchor[0], styles));\n }\n that.wrapper = wrapper = kendo.wrap(element, options.autosize).css({\n overflow: HIDDEN,\n display: 'block',\n position: ABSOLUTE\n });\n if (support.mobileOS.android) {\n wrapper.css(TRANSFORM, 'translatez(0)');\n }\n wrapper.css(POSITION);\n if ($(options.appendTo)[0] == document.body) {\n wrapper.css(TOP, '-10000px');\n }\n that._position(isFixed || {});\n var offset = wrapper.offset();\n return {\n width: kendo._outerWidth(wrapper),\n height: kendo._outerHeight(wrapper),\n left: offset.left,\n top: offset.top\n };\n },\n _openAnimation: function () {\n var animation = extend(true, {}, this.options.animation.open);\n animation.effects = kendo.parseEffects(animation.effects, this.flipped);\n return animation;\n },\n _hideDirClass: function () {\n var anchor = $(this.options.anchor);\n var direction = ((anchor.attr('class') || '').match(ACTIVEBORDERREGEXP) || [\n '',\n 'down'\n ])[1];\n var dirClass = ACTIVEBORDER + '-' + direction;\n anchor.removeClass(dirClass).children(ACTIVECHILDREN).removeClass(ACTIVE).removeClass(dirClass);\n this.element.removeClass(ACTIVEBORDER + '-' + kendo.directions[direction].reverse);\n },\n _showDirClass: function (animation) {\n var direction = animation.effects.slideIn ? animation.effects.slideIn.direction : 'down';\n var dirClass = ACTIVEBORDER + '-' + direction;\n $(this.options.anchor).addClass(dirClass).children(ACTIVECHILDREN).addClass(ACTIVE).addClass(dirClass);\n this.element.addClass(ACTIVEBORDER + '-' + kendo.directions[direction].reverse);\n },\n position: function () {\n if (this.visible()) {\n this.flipped = this._position();\n }\n },\n toggle: function () {\n var that = this;\n that[that.visible() ? CLOSE : OPEN]();\n },\n visible: function () {\n return this.element.is(':' + VISIBLE);\n },\n close: function (skipEffects) {\n var that = this, options = that.options, wrap, animation, openEffects, closeEffects;\n if (that.visible()) {\n wrap = that.wrapper[0] ? that.wrapper : kendo.wrap(that.element).hide();\n that._toggleResize(false);\n if (that._closing || that._trigger(CLOSE)) {\n that._toggleResize(true);\n return;\n }\n that.element.find('.k-popup').each(function () {\n var that = $(this), popup = that.data('kendoPopup');\n if (popup) {\n popup.close(skipEffects);\n }\n });\n DOCUMENT_ELEMENT.off(that.downEvent, that._mousedownProxy);\n if (skipEffects) {\n animation = {\n hide: true,\n effects: {}\n };\n } else {\n animation = extend(true, {}, options.animation.close);\n openEffects = that.element.data(EFFECTS);\n closeEffects = animation.effects;\n if (!closeEffects && !kendo.size(closeEffects) && openEffects && kendo.size(openEffects)) {\n animation.effects = openEffects;\n animation.reverse = true;\n }\n that._closing = true;\n }\n that.element.kendoStop(true).attr('aria-hidden', true);\n wrap.css({ overflow: HIDDEN }).attr('aria-hidden', true);\n that.element.kendoAnimate(animation);\n if (skipEffects) {\n that._animationClose();\n }\n }\n },\n _trigger: function (ev) {\n return this.trigger(ev, { type: ev });\n },\n _resize: function (e) {\n var that = this;\n if (support.resize.indexOf(e.type) !== -1) {\n clearTimeout(that._resizeTimeout);\n that._resizeTimeout = setTimeout(function () {\n that._position();\n that._resizeTimeout = null;\n }, 50);\n } else {\n if (!that._hovered || that._activated && that.element.hasClass('k-list-container')) {\n that.close();\n }\n }\n },\n _toggleResize: function (toggle) {\n var method = toggle ? 'on' : 'off';\n var eventNames = support.resize;\n if (!(support.mobileOS.ios || support.mobileOS.android)) {\n eventNames += ' ' + SCROLL;\n }\n if (toggle && !this.scrollableParents) {\n this.scrollableParents = this._scrollableParents();\n }\n if (this.scrollableParents && this.scrollableParents.length) {\n this.scrollableParents[method](SCROLL, this._resizeProxy);\n }\n WINDOW[method](eventNames, this._resizeProxy);\n },\n _mousedown: function (e) {\n var that = this, container = that.element[0], options = that.options, anchor = $(options.anchor)[0], toggleTarget = options.toggleTarget, target = kendo.eventTarget(e), popup = $(target).closest('.k-popup'), mobile = popup.parent().parent('.km-shim').length;\n popup = popup[0];\n if (!mobile && popup && popup !== that.element[0]) {\n return;\n }\n if ($(e.target).closest('a').data('rel') === 'popover') {\n return;\n }\n if (!contains(container, target) && !contains(anchor, target) && !(toggleTarget && contains($(toggleTarget)[0], target))) {\n that.close();\n }\n },\n _fit: function (position, size, viewPortSize) {\n var output = 0;\n if (position + size > viewPortSize) {\n output = viewPortSize - (position + size);\n }\n if (position < 0) {\n output = -position;\n }\n return output;\n },\n _flip: function (offset, size, anchorSize, viewPortSize, origin, position, boxSize) {\n var output = 0;\n boxSize = boxSize || size;\n if (position !== origin && position !== CENTER && origin !== CENTER) {\n if (offset + boxSize > viewPortSize) {\n output += -(anchorSize + size);\n }\n if (offset + output < 0) {\n output += anchorSize + size;\n }\n }\n return output;\n },\n _scrollableParents: function () {\n return $(this.options.anchor).parentsUntil('body').filter(function (index, element) {\n return kendo.isScrollable(element);\n });\n },\n _position: function (fixed) {\n var that = this, element = that.element, wrapper = that.wrapper, options = that.options, viewport = $(options.viewport), zoomLevel = support.zoomLevel(), isWindow = !!(viewport[0] == window && window.innerWidth && zoomLevel <= 1.02), anchor = $(options.anchor), origins = options.origin.toLowerCase().split(' '), positions = options.position.toLowerCase().split(' '), collisions = that.collisions, siblingContainer, parents, parentZIndex, zIndex = 10002, idx = 0, docEl = document.documentElement, length, viewportOffset, viewportWidth, viewportHeight;\n if (options.viewport === window) {\n viewportOffset = {\n top: window.pageYOffset || document.documentElement.scrollTop || 0,\n left: window.pageXOffset || document.documentElement.scrollLeft || 0\n };\n } else {\n viewportOffset = viewport.offset();\n }\n if (isWindow) {\n viewportWidth = window.innerWidth;\n viewportHeight = window.innerHeight;\n } else {\n viewportWidth = viewport.width();\n viewportHeight = viewport.height();\n }\n if (isWindow && docEl.scrollHeight - docEl.clientHeight > 0) {\n var sign = options.isRtl ? -1 : 1;\n viewportWidth -= sign * kendo.support.scrollbar();\n }\n siblingContainer = anchor.parents().filter(wrapper.siblings());\n if (siblingContainer[0]) {\n parentZIndex = Math.max(Number(siblingContainer.css('zIndex')), 0);\n if (parentZIndex) {\n zIndex = parentZIndex + 10;\n } else {\n parents = anchor.parentsUntil(siblingContainer);\n for (length = parents.length; idx < length; idx++) {\n parentZIndex = Number($(parents[idx]).css('zIndex'));\n if (parentZIndex && zIndex < parentZIndex) {\n zIndex = parentZIndex + 10;\n }\n }\n }\n }\n wrapper.css('zIndex', zIndex);\n if (fixed && fixed.isFixed) {\n wrapper.css({\n left: fixed.x,\n top: fixed.y\n });\n } else {\n wrapper.css(that._align(origins, positions));\n }\n var pos = getOffset(wrapper, POSITION, anchor[0] === wrapper.offsetParent()[0]), offset = getOffset(wrapper), anchorParent = anchor.offsetParent().parent('.k-animation-container,.k-popup,.k-group');\n if (anchorParent.length) {\n pos = getOffset(wrapper, POSITION, true);\n offset = getOffset(wrapper);\n }\n offset.top -= viewportOffset.top;\n offset.left -= viewportOffset.left;\n if (!that.wrapper.data(LOCATION)) {\n wrapper.data(LOCATION, extend({}, pos));\n }\n var offsets = extend({}, offset), location = extend({}, pos), adjustSize = options.adjustSize;\n if (collisions[0] === 'fit') {\n location.top += that._fit(offsets.top, outerHeight(wrapper) + adjustSize.height, viewportHeight / zoomLevel);\n }\n if (collisions[1] === 'fit') {\n location.left += that._fit(offsets.left, outerWidth(wrapper) + adjustSize.width, viewportWidth / zoomLevel);\n }\n var flipPos = extend({}, location);\n var elementHeight = outerHeight(element);\n var wrapperHeight = outerHeight(wrapper);\n if (!wrapper.height() && elementHeight) {\n wrapperHeight = wrapperHeight + elementHeight;\n }\n if (collisions[0] === 'flip') {\n location.top += that._flip(offsets.top, elementHeight, outerHeight(anchor), viewportHeight / zoomLevel, origins[0], positions[0], wrapperHeight);\n }\n if (collisions[1] === 'flip') {\n location.left += that._flip(offsets.left, outerWidth(element), outerWidth(anchor), viewportWidth / zoomLevel, origins[1], positions[1], outerWidth(wrapper));\n }\n element.css(POSITION, ABSOLUTE);\n wrapper.css(location);\n return location.left != flipPos.left || location.top != flipPos.top;\n },\n _align: function (origin, position) {\n var that = this, element = that.wrapper, anchor = $(that.options.anchor), verticalOrigin = origin[0], horizontalOrigin = origin[1], verticalPosition = position[0], horizontalPosition = position[1], anchorOffset = getOffset(anchor), appendTo = $(that.options.appendTo), appendToOffset, width = outerWidth(element), height = outerHeight(element) || outerHeight(element.children().first()), anchorWidth = outerWidth(anchor), anchorHeight = outerHeight(anchor), top = anchorOffset.top, left = anchorOffset.left, round = Math.round;\n if (appendTo[0] != document.body) {\n appendToOffset = getOffset(appendTo);\n top -= appendToOffset.top;\n left -= appendToOffset.left;\n }\n if (verticalOrigin === BOTTOM) {\n top += anchorHeight;\n }\n if (verticalOrigin === CENTER) {\n top += round(anchorHeight / 2);\n }\n if (verticalPosition === BOTTOM) {\n top -= height;\n }\n if (verticalPosition === CENTER) {\n top -= round(height / 2);\n }\n if (horizontalOrigin === RIGHT) {\n left += anchorWidth;\n }\n if (horizontalOrigin === CENTER) {\n left += round(anchorWidth / 2);\n }\n if (horizontalPosition === RIGHT) {\n left -= width;\n }\n if (horizontalPosition === CENTER) {\n left -= round(width / 2);\n }\n return {\n top: top,\n left: left\n };\n }\n });\n ui.plugin(Popup);\n var stableSort = kendo.support.stableSort;\n var tabKeyTrapNS = 'kendoTabKeyTrap';\n var focusableNodesSelector = 'a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, [tabindex], *[contenteditable]';\n var TabKeyTrap = Class.extend({\n init: function (element) {\n this.element = $(element);\n this.element.autoApplyNS(tabKeyTrapNS);\n },\n trap: function () {\n this.element.on('keydown', proxy(this._keepInTrap, this));\n },\n removeTrap: function () {\n this.element.kendoDestroy(tabKeyTrapNS);\n },\n destroy: function () {\n this.element.kendoDestroy(tabKeyTrapNS);\n this.element = undefined;\n },\n shouldTrap: function () {\n return true;\n },\n _keepInTrap: function (e) {\n if (e.which !== 9 || !this.shouldTrap() || e.isDefaultPrevented()) {\n return;\n }\n var elements = this._focusableElements();\n var sortedElements = this._sortFocusableElements(elements);\n var next = this._nextFocusable(e, sortedElements);\n this._focus(next);\n e.preventDefault();\n },\n _focusableElements: function () {\n var elements = this.element.find(focusableNodesSelector).filter(function (i, item) {\n return item.tabIndex >= 0 && $(item).is(':visible') && !$(item).is('[disabled]');\n });\n if (this.element.is('[tabindex]')) {\n elements.push(this.element[0]);\n }\n return elements;\n },\n _sortFocusableElements: function (elements) {\n var sortedElements;\n if (stableSort) {\n sortedElements = elements.sort(function (prev, next) {\n return prev.tabIndex - next.tabIndex;\n });\n } else {\n var attrName = '__k_index';\n elements.each(function (i, item) {\n item.setAttribute(attrName, i);\n });\n sortedElements = elements.sort(function (prev, next) {\n return prev.tabIndex === next.tabIndex ? parseInt(prev.getAttribute(attrName), 10) - parseInt(next.getAttribute(attrName), 10) : prev.tabIndex - next.tabIndex;\n });\n elements.removeAttr(attrName);\n }\n return sortedElements;\n },\n _nextFocusable: function (e, elements) {\n var count = elements.length;\n var current = elements.index(e.target);\n return elements.get((current + (e.shiftKey ? -1 : 1)) % count);\n },\n _focus: function (element) {\n if (element.nodeName == 'IFRAME') {\n element.contentWindow.document.body.focus();\n return;\n }\n element.focus();\n if (element.nodeName == 'INPUT' && element.setSelectionRange && this._haveSelectionRange(element)) {\n element.setSelectionRange(0, element.value.length);\n }\n },\n _haveSelectionRange: function (element) {\n var elementType = element.type.toLowerCase();\n return elementType === 'text' || elementType === 'search' || elementType === 'url' || elementType === 'tel' || elementType === 'password';\n }\n });\n ui.Popup.TabKeyTrap = TabKeyTrap;\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.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 that._snapBack();\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 (!this._wheel) {\n this._wheel = true;\n this._wheelY = 0;\n this.userEvents.press(0, this._wheelY);\n }\n clearTimeout(this._wheelTimeout);\n this._wheelTimeout = setTimeout(this._wheelEnd, 50);\n var delta = kendo.wheelDeltaY(e);\n if (delta) {\n this._wheelY += delta;\n this.userEvents.move(0, this._wheelY);\n }\n e.preventDefault();\n },\n makeVirtual: function () {\n this.dimensions.y.makeVirtual();\n },\n virtualSize: function (min, max) {\n this.dimensions.y.virtualSize(min, max);\n },\n height: function () {\n return this.dimensions.y.size;\n },\n scrollHeight: function () {\n return this.scrollElement[0].scrollHeight;\n },\n scrollWidth: function () {\n return this.scrollElement[0].scrollWidth;\n },\n options: {\n name: 'Scroller',\n zoom: false,\n pullOffset: 140,\n visibleScrollHints: false,\n elastic: true,\n useNative: false,\n mousewheelScrolling: true,\n avoidScrolling: function () {\n return false;\n },\n pullToRefresh: false,\n messages: {\n pullTemplate: 'Pull to refresh',\n releaseTemplate: 'Release to refresh',\n refreshTemplate: 'Refreshing'\n }\n },\n events: [\n PULL,\n SCROLL,\n RESIZE\n ],\n _resize: function () {\n if (!this._native) {\n this.contentResized();\n }\n },\n setOptions: function (options) {\n var that = this;\n Widget.fn.setOptions.call(that, options);\n if (options.pullToRefresh) {\n that._initPullToRefresh();\n }\n },\n reset: function () {\n if (this._native) {\n this.scrollElement.scrollTop(0);\n } else {\n this.movable.moveTo({\n x: 0,\n y: 0\n });\n this._scale(1);\n }\n },\n contentResized: function () {\n this.dimensions.refresh();\n if (this.pane.x.outOfBounds()) {\n this.movable.moveAxis('x', this.dimensions.x.min);\n }\n if (this.pane.y.outOfBounds()) {\n this.movable.moveAxis('y', this.dimensions.y.min);\n }\n },\n zoomOut: function () {\n var dimensions = this.dimensions;\n dimensions.refresh();\n this._scale(dimensions.fitScale);\n this.movable.moveTo(dimensions.centerCoordinates());\n },\n enable: function () {\n this.enabled = true;\n },\n disable: function () {\n this.enabled = false;\n },\n scrollTo: function (x, y) {\n if (this._native) {\n this.scrollElement.scrollLeft(abs(x));\n this.scrollElement.scrollTop(abs(y));\n } else {\n this.dimensions.refresh();\n this.movable.moveTo({\n x: x,\n y: y\n });\n }\n },\n animatedScrollTo: function (x, y, callback) {\n var from, to;\n if (this._native) {\n this.scrollTo(x, y);\n } else {\n from = {\n x: this.movable.x,\n y: this.movable.y\n };\n to = {\n x: x,\n y: y\n };\n this.animatedScroller.setCoordinates(from, to);\n this.animatedScroller.setCallback(callback);\n this.animatedScroller.start();\n }\n },\n pullHandled: function () {\n var that = this;\n that.refreshHint.removeClass(REFRESHCLASS);\n that.hintContainer.html(that.pullTemplate({}));\n that.yinertia.onEnd();\n that.xinertia.onEnd();\n that.userEvents.cancel();\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n if (this.userEvents) {\n this.userEvents.destroy();\n }\n },\n _scale: function (scale) {\n this.dimensions.rescale(scale);\n this.movable.scaleTo(scale);\n },\n _initPullToRefresh: function () {\n var that = this;\n that.dimensions.y.forceEnabled();\n that.pullTemplate = kendo.template(that.options.messages.pullTemplate);\n that.releaseTemplate = kendo.template(that.options.messages.releaseTemplate);\n that.refreshTemplate = kendo.template(that.options.messages.refreshTemplate);\n that.scrollElement.prepend('' + that.pullTemplate({}) + '');\n that.refreshHint = that.scrollElement.children().first();\n that.hintContainer = that.refreshHint.children('.km-template');\n that.pane.y.bind('change', proxy(that._paneChange, that));\n that.userEvents.bind('end', proxy(that._dragEnd, that));\n },\n _dragEnd: function () {\n var that = this;\n if (!that.pulled) {\n return;\n }\n that.pulled = false;\n that.refreshHint.removeClass(RELEASECLASS).addClass(REFRESHCLASS);\n that.hintContainer.html(that.refreshTemplate({}));\n that.yinertia.freeze(that.options.pullOffset / 2);\n that.trigger('pull');\n },\n _paneChange: function () {\n var that = this;\n if (that.movable.y / OUT_OF_BOUNDS_FRICTION > that.options.pullOffset) {\n if (!that.pulled) {\n that.pulled = true;\n that.refreshHint.removeClass(REFRESHCLASS).addClass(RELEASECLASS);\n that.hintContainer.html(that.releaseTemplate({}));\n }\n } else if (that.pulled) {\n that.pulled = false;\n that.refreshHint.removeClass(RELEASECLASS);\n that.hintContainer.html(that.pullTemplate({}));\n }\n },\n _initAxis: function (axis) {\n var that = this, movable = that.movable, dimension = that.dimensions[axis], tapCapture = that.tapCapture, paneAxis = that.pane[axis], scrollBar = new ScrollBar({\n axis: axis,\n movable: movable,\n dimension: dimension,\n container: that.element,\n alwaysVisible: that.options.visibleScrollHints\n });\n dimension.bind(CHANGE, function () {\n scrollBar.refresh();\n });\n paneAxis.bind(CHANGE, function () {\n scrollBar.show();\n });\n that[axis + 'inertia'] = new DragInertia({\n axis: axis,\n paneAxis: paneAxis,\n movable: movable,\n tapCapture: tapCapture,\n userEvents: that.userEvents,\n dimension: dimension,\n elastic: that.options.elastic,\n friction: that.options.friction || FRICTION,\n velocityMultiplier: that.options.velocityMultiplier || VELOCITY_MULTIPLIER,\n end: function () {\n scrollBar.hide();\n that.trigger('scrollEnd', {\n axis: axis,\n scrollTop: that.scrollTop,\n scrollLeft: that.scrollLeft\n });\n }\n });\n }\n });\n ui.plugin(Scroller);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.view', [\n 'kendo.core',\n 'kendo.fx',\n 'kendo.mobile.scroller',\n 'kendo.view'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.view',\n name: 'View',\n category: 'mobile',\n description: 'Mobile View',\n depends: [\n 'core',\n 'fx',\n 'mobile.scroller',\n 'view'\n ],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, mobile = kendo.mobile, ui = mobile.ui, attr = kendo.attr, Widget = ui.Widget, ViewClone = kendo.ViewClone, INIT = 'init', UI_OVERLAY = '
    ', BEFORE_SHOW = 'beforeShow', SHOW = 'show', AFTER_SHOW = 'afterShow', BEFORE_HIDE = 'beforeHide', TRANSITION_END = 'transitionEnd', TRANSITION_START = 'transitionStart', HIDE = 'hide', DESTROY = 'destroy', attrValue = kendo.attrValue, roleSelector = kendo.roleSelector, directiveSelector = kendo.directiveSelector, compileMobileDirective = kendo.compileMobileDirective;\n function initPopOvers(element) {\n var popovers = element.find(roleSelector('popover')), idx, length, roles = ui.roles;\n for (idx = 0, length = popovers.length; idx < length; idx++) {\n kendo.initWidget(popovers[idx], {}, roles);\n }\n }\n function preventScrollIfNotInput(e) {\n if (!kendo.triggeredByInput(e)) {\n e.preventDefault();\n }\n }\n var View = Widget.extend({\n init: function (element, options) {\n Widget.fn.init.call(this, element, options);\n this.params = {};\n $.extend(this, options);\n this.transition = this.transition || this.defaultTransition;\n this._id();\n if (!this.options.$angular) {\n this._layout();\n this._overlay();\n this._scroller();\n this._model();\n } else {\n this._overlay();\n }\n },\n events: [\n INIT,\n BEFORE_SHOW,\n SHOW,\n AFTER_SHOW,\n BEFORE_HIDE,\n HIDE,\n DESTROY,\n TRANSITION_START,\n TRANSITION_END\n ],\n options: {\n name: 'View',\n title: '',\n layout: null,\n getLayout: $.noop,\n reload: false,\n transition: '',\n defaultTransition: '',\n useNativeScrolling: false,\n stretch: false,\n zoom: false,\n model: null,\n modelScope: window,\n scroller: {},\n initWidgets: true\n },\n enable: function (enable) {\n if (typeof enable == 'undefined') {\n enable = true;\n }\n if (enable) {\n this.overlay.hide();\n } else {\n this.overlay.show();\n }\n },\n destroy: function () {\n if (this.layout) {\n this.layout.detach(this);\n }\n this.trigger(DESTROY);\n Widget.fn.destroy.call(this);\n if (this.scroller) {\n this.scroller.destroy();\n }\n if (this.options.$angular) {\n this.element.scope().$destroy();\n }\n kendo.destroy(this.element);\n },\n purge: function () {\n this.destroy();\n this.element.remove();\n },\n triggerBeforeShow: function () {\n if (this.trigger(BEFORE_SHOW, { view: this })) {\n return false;\n }\n return true;\n },\n triggerBeforeHide: function () {\n if (this.trigger(BEFORE_HIDE, { view: this })) {\n return false;\n }\n return true;\n },\n showStart: function () {\n var element = this.element;\n element.css('display', '');\n if (!this.inited) {\n this.inited = true;\n this.trigger(INIT, { view: this });\n } else {\n this._invokeNgController();\n }\n if (this.layout) {\n this.layout.attach(this);\n }\n this._padIfNativeScrolling();\n this.trigger(SHOW, { view: this });\n kendo.resize(element);\n },\n showEnd: function () {\n this.trigger(AFTER_SHOW, { view: this });\n this._padIfNativeScrolling();\n },\n hideEnd: function () {\n var that = this;\n that.element.hide();\n that.trigger(HIDE, { view: that });\n if (that.layout) {\n that.layout.trigger(HIDE, {\n view: that,\n layout: that.layout\n });\n }\n },\n beforeTransition: function (type) {\n this.trigger(TRANSITION_START, { type: type });\n },\n afterTransition: function (type) {\n this.trigger(TRANSITION_END, { type: type });\n },\n _padIfNativeScrolling: function () {\n if (mobile.appLevelNativeScrolling()) {\n var isAndroid = kendo.support.mobileOS && kendo.support.mobileOS.android, skin = mobile.application.skin() || '', isAndroidForced = mobile.application.os.android || skin.indexOf('android') > -1, hasPlatformIndependentSkin = skin === 'flat' || skin.indexOf('material') > -1, topContainer = (isAndroid || isAndroidForced) && !hasPlatformIndependentSkin ? 'footer' : 'header', bottomContainer = (isAndroid || isAndroidForced) && !hasPlatformIndependentSkin ? 'header' : 'footer';\n this.content.css({\n paddingTop: this[topContainer].height(),\n paddingBottom: this[bottomContainer].height()\n });\n }\n },\n contentElement: function () {\n var that = this;\n return that.options.stretch ? that.content : that.scrollerContent;\n },\n clone: function () {\n return new ViewClone(this);\n },\n _scroller: function () {\n var that = this;\n if (mobile.appLevelNativeScrolling()) {\n return;\n }\n if (that.options.stretch) {\n that.content.addClass('km-stretched-view');\n } else {\n that.content.kendoMobileScroller($.extend(that.options.scroller, {\n zoom: that.options.zoom,\n useNative: that.options.useNativeScrolling\n }));\n that.scroller = that.content.data('kendoMobileScroller');\n that.scrollerContent = that.scroller.scrollElement;\n }\n if (kendo.support.kineticScrollNeeded) {\n $(that.element).on('touchmove', '.km-header', preventScrollIfNotInput);\n if (!that.options.useNativeScrolling && !that.options.stretch) {\n $(that.element).on('touchmove', '.km-content', preventScrollIfNotInput);\n }\n }\n },\n _model: function () {\n var that = this, element = that.element, model = that.options.model;\n if (typeof model === 'string') {\n model = kendo.getter(model)(that.options.modelScope);\n }\n that.model = model;\n initPopOvers(element);\n that.element.css('display', '');\n if (that.options.initWidgets) {\n if (model) {\n kendo.bind(element, model, ui, kendo.ui, kendo.dataviz.ui);\n } else {\n mobile.init(element.children());\n }\n }\n that.element.css('display', 'none');\n },\n _id: function () {\n var element = this.element, idAttrValue = element.attr('id') || '';\n this.id = attrValue(element, 'url') || '#' + idAttrValue;\n if (this.id == '#') {\n this.id = kendo.guid();\n element.attr('id', this.id);\n }\n },\n _layout: function () {\n var contentSelector = roleSelector('content'), element = this.element;\n element.addClass('km-view');\n this.header = element.children(roleSelector('header')).addClass('km-header');\n this.footer = element.children(roleSelector('footer')).addClass('km-footer');\n if (!element.children(contentSelector)[0]) {\n element.wrapInner('
    ');\n }\n this.content = element.children(roleSelector('content')).addClass('km-content');\n this.element.prepend(this.header).append(this.footer);\n this.layout = this.options.getLayout(this.layout);\n if (this.layout) {\n this.layout.setup(this);\n }\n },\n _overlay: function () {\n this.overlay = $(UI_OVERLAY).appendTo(this.element);\n },\n _invokeNgController: function () {\n var controller, scope;\n if (this.options.$angular) {\n controller = this.element.controller();\n scope = this.options.$angular[0];\n if (controller) {\n var callback = $.proxy(this, '_callController', controller, scope);\n if (/^\\$(digest|apply)$/.test(scope.$$phase)) {\n callback();\n } else {\n scope.$apply(callback);\n }\n }\n }\n },\n _callController: function (controller, scope) {\n this.element.injector().invoke(controller.constructor, controller, { $scope: scope });\n }\n });\n function initWidgets(collection) {\n collection.each(function () {\n kendo.initWidget($(this), {}, ui.roles);\n });\n }\n var Layout = Widget.extend({\n init: function (element, options) {\n Widget.fn.init.call(this, element, options);\n element = this.element;\n this.header = element.children(this._locate('header')).addClass('km-header');\n this.footer = element.children(this._locate('footer')).addClass('km-footer');\n this.elements = this.header.add(this.footer);\n initPopOvers(element);\n if (!this.options.$angular) {\n kendo.mobile.init(this.element.children());\n }\n this.element.detach();\n this.trigger(INIT, { layout: this });\n },\n _locate: function (selectors) {\n return this.options.$angular ? directiveSelector(selectors) : roleSelector(selectors);\n },\n options: {\n name: 'Layout',\n id: null,\n platform: null\n },\n events: [\n INIT,\n SHOW,\n HIDE\n ],\n setup: function (view) {\n if (!view.header[0]) {\n view.header = this.header;\n }\n if (!view.footer[0]) {\n view.footer = this.footer;\n }\n },\n detach: function (view) {\n var that = this;\n if (view.header === that.header && that.header[0]) {\n view.element.prepend(that.header.detach()[0].cloneNode(true));\n }\n if (view.footer === that.footer && that.footer.length) {\n view.element.append(that.footer.detach()[0].cloneNode(true));\n }\n },\n attach: function (view) {\n var that = this, previousView = that.currentView;\n if (previousView) {\n that.detach(previousView);\n }\n if (view.header === that.header) {\n that.header.detach();\n view.element.children(roleSelector('header')).remove();\n view.element.prepend(that.header);\n }\n if (view.footer === that.footer) {\n that.footer.detach();\n view.element.children(roleSelector('footer')).remove();\n view.element.append(that.footer);\n }\n that.trigger(SHOW, {\n layout: that,\n view: view\n });\n that.currentView = view;\n }\n });\n var Observable = kendo.Observable, bodyRegExp = /]*>(([\\u000a\\u000d\\u2028\\u2029]|.)*)<\\/body>/i, LOAD_START = 'loadStart', LOAD_COMPLETE = 'loadComplete', SHOW_START = 'showStart', SAME_VIEW_REQUESTED = 'sameViewRequested', VIEW_SHOW = 'viewShow', VIEW_TYPE_DETERMINED = 'viewTypeDetermined', AFTER = 'after';\n var ViewEngine = Observable.extend({\n init: function (options) {\n var that = this, views, errorMessage, container, collection;\n Observable.fn.init.call(that);\n $.extend(that, options);\n that.sandbox = $('
    ');\n container = that.container;\n views = that._hideViews(container);\n that.rootView = views.first();\n if (!that.rootView[0] && options.rootNeeded) {\n if (container[0] == kendo.mobile.application.element[0]) {\n errorMessage = 'Your kendo mobile application element does not contain any direct child elements with data-role=\"view\" attribute set. Make sure that you instantiate the mobile application using the correct container.';\n } else {\n errorMessage = 'Your pane element does not contain any direct child elements with data-role=\"view\" attribute set.';\n }\n throw new Error(errorMessage);\n }\n that.layouts = {};\n that.viewContainer = new kendo.ViewContainer(that.container);\n that.viewContainer.bind('accepted', function (e) {\n e.view.params = that.params;\n });\n that.viewContainer.bind('complete', function (e) {\n that.trigger(VIEW_SHOW, { view: e.view });\n });\n that.viewContainer.bind(AFTER, function () {\n that.trigger(AFTER);\n });\n this.getLayoutProxy = $.proxy(this, '_getLayout');\n that._setupLayouts(container);\n collection = container.children(that._locate('modalview drawer'));\n if (that.$angular) {\n that.$angular[0].viewOptions = {\n defaultTransition: that.transition,\n loader: that.loader,\n container: that.container,\n getLayout: that.getLayoutProxy\n };\n collection.each(function (idx, element) {\n compileMobileDirective($(element), options.$angular[0]);\n });\n } else {\n initWidgets(collection);\n }\n this.bind(this.events, options);\n },\n events: [\n SHOW_START,\n AFTER,\n VIEW_SHOW,\n LOAD_START,\n LOAD_COMPLETE,\n SAME_VIEW_REQUESTED,\n VIEW_TYPE_DETERMINED\n ],\n destroy: function () {\n kendo.destroy(this.container);\n for (var id in this.layouts) {\n this.layouts[id].destroy();\n }\n },\n view: function () {\n return this.viewContainer.view;\n },\n showView: function (url, transition, params) {\n url = url.replace(new RegExp('^' + this.remoteViewURLPrefix), '');\n if (url === '' && this.remoteViewURLPrefix) {\n url = '/';\n }\n if (url.replace(/^#/, '') === this.url) {\n this.trigger(SAME_VIEW_REQUESTED);\n return false;\n }\n this.trigger(SHOW_START);\n var that = this, showClosure = function (view) {\n return that.viewContainer.show(view, transition, url);\n }, element = that._findViewElement(url), view = kendo.widgetInstance(element);\n that.url = url.replace(/^#/, '');\n that.params = params;\n if (view && view.reload) {\n view.purge();\n element = [];\n }\n this.trigger(VIEW_TYPE_DETERMINED, {\n remote: element.length === 0,\n url: url\n });\n if (element[0]) {\n if (!view) {\n view = that._createView(element);\n }\n return showClosure(view);\n } else {\n if (this.serverNavigation) {\n location.href = url;\n } else {\n that._loadView(url, showClosure);\n }\n return true;\n }\n },\n append: function (html, url) {\n var sandbox = this.sandbox, urlPath = (url || '').split('?')[0], container = this.container, views, modalViews, view;\n if (bodyRegExp.test(html)) {\n html = RegExp.$1;\n }\n sandbox[0].innerHTML = html;\n container.append(sandbox.children('script, style'));\n views = this._hideViews(sandbox);\n view = views.first();\n if (!view.length) {\n views = view = sandbox.wrapInner('
    ').children();\n }\n if (urlPath) {\n view.hide().attr(attr('url'), urlPath);\n }\n this._setupLayouts(sandbox);\n modalViews = sandbox.children(this._locate('modalview drawer'));\n container.append(sandbox.children(this._locate('layout modalview drawer')).add(views));\n initWidgets(modalViews);\n return this._createView(view);\n },\n _locate: function (selectors) {\n return this.$angular ? directiveSelector(selectors) : roleSelector(selectors);\n },\n _findViewElement: function (url) {\n var element, urlPath = url.split('?')[0];\n if (!urlPath) {\n return this.rootView;\n }\n element = this.container.children('[' + attr('url') + '=\\'' + urlPath + '\\']');\n if (!element[0] && urlPath.indexOf('/') === -1) {\n element = this.container.children(urlPath.charAt(0) === '#' ? urlPath : '#' + urlPath);\n }\n return element;\n },\n _createView: function (element) {\n if (this.$angular) {\n return compileMobileDirective(element, this.$angular[0]);\n } else {\n return kendo.initWidget(element, {\n defaultTransition: this.transition,\n loader: this.loader,\n container: this.container,\n getLayout: this.getLayoutProxy,\n modelScope: this.modelScope,\n reload: attrValue(element, 'reload')\n }, ui.roles);\n }\n },\n _getLayout: function (name) {\n if (name === '') {\n return null;\n }\n return name ? this.layouts[name] : this.layouts[this.layout];\n },\n _loadView: function (url, callback) {\n if (this._xhr) {\n this._xhr.abort();\n }\n this.trigger(LOAD_START);\n this._xhr = $.get(kendo.absoluteURL(url, this.remoteViewURLPrefix), 'html').always($.proxy(this, '_xhrComplete', callback, url));\n },\n _xhrComplete: function (callback, url, response) {\n var success = true;\n if (typeof response === 'object') {\n if (response.status === 0) {\n if (response.responseText && response.responseText.length > 0) {\n success = true;\n response = response.responseText;\n } else {\n return;\n }\n }\n }\n this.trigger(LOAD_COMPLETE);\n if (success) {\n callback(this.append(response, url));\n }\n },\n _hideViews: function (container) {\n return container.children(this._locate('view splitview')).hide();\n },\n _setupLayouts: function (element) {\n var that = this, layout;\n element.children(that._locate('layout')).each(function () {\n if (that.$angular) {\n layout = compileMobileDirective($(this), that.$angular[0]);\n } else {\n layout = kendo.initWidget($(this), {}, ui.roles);\n }\n var platform = layout.options.platform;\n if (!platform || platform === mobile.application.os.name) {\n that.layouts[layout.options.id] = layout;\n } else {\n layout.destroy();\n }\n });\n }\n });\n kendo.mobile.ViewEngine = ViewEngine;\n ui.plugin(View);\n ui.plugin(Layout);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.loader', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.loader',\n name: 'Loader',\n category: 'mobile',\n description: 'Mobile Loader',\n depends: ['core'],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.mobile.ui, Widget = ui.Widget, CAPTURE_EVENTS = $.map(kendo.eventMap, function (value) {\n return value;\n }).join(' ').split(' ');\n var Loader = Widget.extend({\n init: function (container, options) {\n var that = this, element = $('
    ');\n Widget.fn.init.call(that, element, options);\n that.container = container;\n that.captureEvents = false;\n that._attachCapture();\n element.append(that.options.loading).hide().appendTo(container);\n },\n options: {\n name: 'Loader',\n loading: '

    Loading...

    ',\n timeout: 100\n },\n show: function () {\n var that = this;\n clearTimeout(that._loading);\n if (that.options.loading === false) {\n return;\n }\n that.captureEvents = true;\n that._loading = setTimeout(function () {\n that.element.show();\n }, that.options.timeout);\n },\n hide: function () {\n this.captureEvents = false;\n clearTimeout(this._loading);\n this.element.hide();\n },\n changeMessage: function (message) {\n this.options.loading = message;\n this.element.find('>h1').html(message);\n },\n transition: function () {\n this.captureEvents = true;\n this.container.css('pointer-events', 'none');\n },\n transitionDone: function () {\n this.captureEvents = false;\n this.container.css('pointer-events', '');\n },\n _attachCapture: function () {\n var that = this;\n that.captureEvents = false;\n function capture(e) {\n if (that.captureEvents) {\n e.preventDefault();\n }\n }\n for (var i = 0; i < CAPTURE_EVENTS.length; i++) {\n that.container[0].addEventListener(CAPTURE_EVENTS[i], capture, true);\n }\n }\n });\n ui.plugin(Loader);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.pane', [\n 'kendo.mobile.view',\n 'kendo.mobile.loader'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.pane',\n name: 'Pane',\n category: 'mobile',\n description: 'Mobile Pane',\n depends: [\n 'mobile.view',\n 'mobile.loader'\n ],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, mobile = kendo.mobile, roleSelector = kendo.roleSelector, ui = mobile.ui, Widget = ui.Widget, ViewEngine = mobile.ViewEngine, View = ui.View, Loader = mobile.ui.Loader, EXTERNAL = 'external', HREF = 'href', DUMMY_HREF = '#!', NAVIGATE = 'navigate', VIEW_SHOW = 'viewShow', SAME_VIEW_REQUESTED = 'sameViewRequested', OS = kendo.support.mobileOS, SKIP_TRANSITION_ON_BACK_BUTTON = OS.ios && !OS.appMode && OS.flatVersion >= 700, WIDGET_RELS = /popover|actionsheet|modalview|drawer/, BACK = '#:back', attrValue = kendo.attrValue;\n var Pane = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n options = that.options;\n element = that.element;\n element.addClass('km-pane');\n if (that.options.collapsible) {\n element.addClass('km-collapsible-pane');\n }\n this.history = [];\n this.historyCallback = function (url, params, backButtonPressed) {\n var transition = that.transition;\n that.transition = null;\n if (SKIP_TRANSITION_ON_BACK_BUTTON && backButtonPressed) {\n transition = 'none';\n }\n return that.viewEngine.showView(url, transition, params);\n };\n this._historyNavigate = function (url) {\n if (url === BACK) {\n if (that.history.length === 1) {\n return;\n }\n that.history.pop();\n url = that.history[that.history.length - 1];\n } else {\n that.history.push(url);\n }\n that.historyCallback(url, kendo.parseQueryStringParams(url));\n };\n this._historyReplace = function (url) {\n var params = kendo.parseQueryStringParams(url);\n that.history[that.history.length - 1] = url;\n that.historyCallback(url, params);\n };\n that.loader = new Loader(element, { loading: that.options.loading });\n that.viewEngine = new ViewEngine({\n container: element,\n transition: options.transition,\n modelScope: options.modelScope,\n rootNeeded: !options.initial,\n serverNavigation: options.serverNavigation,\n remoteViewURLPrefix: options.root || '',\n layout: options.layout,\n $angular: options.$angular,\n loader: that.loader,\n showStart: function () {\n that.loader.transition();\n that.closeActiveDialogs();\n },\n after: function () {\n that.loader.transitionDone();\n },\n viewShow: function (e) {\n that.trigger(VIEW_SHOW, e);\n },\n loadStart: function () {\n that.loader.show();\n },\n loadComplete: function () {\n that.loader.hide();\n },\n sameViewRequested: function () {\n that.trigger(SAME_VIEW_REQUESTED);\n },\n viewTypeDetermined: function (e) {\n if (!e.remote || !that.options.serverNavigation) {\n that.trigger(NAVIGATE, { url: e.url });\n }\n }\n });\n this._setPortraitWidth();\n kendo.onResize(function () {\n that._setPortraitWidth();\n });\n that._setupAppLinks();\n },\n closeActiveDialogs: function () {\n var dialogs = this.element.find(roleSelector('actionsheet popover modalview')).filter(':visible');\n dialogs.each(function () {\n kendo.widgetInstance($(this), ui).close();\n });\n },\n navigateToInitial: function () {\n var initial = this.options.initial;\n if (initial) {\n this.navigate(initial);\n }\n return initial;\n },\n options: {\n name: 'Pane',\n portraitWidth: '',\n transition: '',\n layout: '',\n collapsible: false,\n initial: null,\n modelScope: window,\n loading: '

    Loading...

    '\n },\n events: [\n NAVIGATE,\n VIEW_SHOW,\n SAME_VIEW_REQUESTED\n ],\n append: function (html) {\n return this.viewEngine.append(html);\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.viewEngine.destroy();\n this.userEvents.destroy();\n },\n navigate: function (url, transition) {\n if (url instanceof View) {\n url = url.id;\n }\n this.transition = transition;\n this._historyNavigate(url);\n },\n replace: function (url, transition) {\n if (url instanceof View) {\n url = url.id;\n }\n this.transition = transition;\n this._historyReplace(url);\n },\n bindToRouter: function (router) {\n var that = this, history = this.history, viewEngine = this.viewEngine;\n router.bind('init', function (e) {\n var url = e.url, attrUrl = router.pushState ? url : '/';\n viewEngine.rootView.attr(kendo.attr('url'), attrUrl);\n var length = history.length;\n if (url === '/' && length) {\n router.navigate(history[length - 1], true);\n e.preventDefault();\n }\n });\n router.bind('routeMissing', function (e) {\n if (!that.historyCallback(e.url, e.params, e.backButtonPressed)) {\n e.preventDefault();\n }\n });\n router.bind('same', function () {\n that.trigger(SAME_VIEW_REQUESTED);\n });\n that._historyNavigate = function (url) {\n router.navigate(url);\n };\n that._historyReplace = function (url) {\n router.replace(url);\n };\n },\n hideLoading: function () {\n this.loader.hide();\n },\n showLoading: function () {\n this.loader.show();\n },\n changeLoadingMessage: function (message) {\n this.loader.changeMessage(message);\n },\n view: function () {\n return this.viewEngine.view();\n },\n _setPortraitWidth: function () {\n var width, portraitWidth = this.options.portraitWidth;\n if (portraitWidth) {\n width = kendo.mobile.application.element.is('.km-vertical') ? portraitWidth : 'auto';\n this.element.css('width', width);\n }\n },\n _setupAppLinks: function () {\n var that = this, linkRoles = 'tab', pressedButtonSelector = '[data-' + kendo.ns + 'navigate-on-press]', buttonSelectors = $.map([\n 'button',\n 'backbutton',\n 'detailbutton',\n 'listview-link'\n ], function (role) {\n return roleSelector(role) + ':not(' + pressedButtonSelector + ')';\n }).join(',');\n this.element.handler(this).on('down', roleSelector(linkRoles) + ',' + pressedButtonSelector, '_mouseup').on('click', roleSelector(linkRoles) + ',' + buttonSelectors + ',' + pressedButtonSelector, '_appLinkClick');\n this.userEvents = new kendo.UserEvents(this.element, {\n fastTap: true,\n filter: buttonSelectors,\n tap: function (e) {\n e.event.currentTarget = e.touch.currentTarget;\n that._mouseup(e.event);\n }\n });\n this.element.css('-ms-touch-action', '');\n },\n _appLinkClick: function (e) {\n var href = $(e.currentTarget).attr('href');\n var remote = href && href[0] !== '#' && this.options.serverNavigation;\n if (!remote && attrValue($(e.currentTarget), 'rel') != EXTERNAL) {\n e.preventDefault();\n }\n },\n _mouseup: function (e) {\n if (e.which > 1 || e.isDefaultPrevented()) {\n return;\n }\n var pane = this, link = $(e.currentTarget), transition = attrValue(link, 'transition'), rel = attrValue(link, 'rel') || '', target = attrValue(link, 'target'), href = link.attr(HREF), delayedTouchEnd = SKIP_TRANSITION_ON_BACK_BUTTON && link[0].offsetHeight === 0, remote = href && href[0] !== '#' && this.options.serverNavigation;\n if (delayedTouchEnd || remote || rel === EXTERNAL || typeof href === 'undefined' || href === DUMMY_HREF) {\n return;\n }\n link.attr(HREF, DUMMY_HREF);\n setTimeout(function () {\n link.attr(HREF, href);\n });\n if (rel.match(WIDGET_RELS)) {\n kendo.widgetInstance($(href), ui).openFor(link);\n if (rel === 'actionsheet' || rel === 'drawer') {\n e.stopPropagation();\n }\n } else {\n if (target === '_top') {\n pane = mobile.application.pane;\n } else if (target) {\n pane = $('#' + target).data('kendoMobilePane');\n }\n pane.navigate(href, transition);\n }\n e.preventDefault();\n }\n });\n Pane.wrap = function (element) {\n if (!element.is(roleSelector('view'))) {\n element = element.wrap('
    ').parent();\n }\n var paneContainer = element.wrap('
    ').parent(), pane = new Pane(paneContainer);\n pane.navigate('');\n return pane;\n };\n ui.plugin(Pane);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.popover', [\n 'kendo.popup',\n 'kendo.mobile.pane'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.popover',\n name: 'PopOver',\n category: 'mobile',\n description: 'The mobile PopOver widget represents a transient view which is displayed when the user taps on a navigational widget or area on the screen. ',\n depends: [\n 'popup',\n 'mobile.pane'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, mobile = kendo.mobile, ui = mobile.ui, HIDE = 'hide', OPEN = 'open', CLOSE = 'close', WRAPPER = '
    ', ARROW = '
    ', OVERLAY = '
    ', DIRECTION_CLASSES = 'km-up km-down km-left km-right', Widget = ui.Widget, DIRECTIONS = {\n 'down': {\n origin: 'bottom center',\n position: 'top center'\n },\n 'up': {\n origin: 'top center',\n position: 'bottom center'\n },\n 'left': {\n origin: 'center left',\n position: 'center right',\n collision: 'fit flip'\n },\n 'right': {\n origin: 'center right',\n position: 'center left',\n collision: 'fit flip'\n }\n }, ANIMATION = {\n animation: {\n open: {\n effects: 'fade:in',\n duration: 0\n },\n close: {\n effects: 'fade:out',\n duration: 400\n }\n }\n }, DIMENSIONS = {\n 'horizontal': {\n offset: 'top',\n size: 'height'\n },\n 'vertical': {\n offset: 'left',\n size: 'width'\n }\n }, REVERSE = {\n 'up': 'down',\n 'down': 'up',\n 'left': 'right',\n 'right': 'left'\n };\n var Popup = Widget.extend({\n init: function (element, options) {\n var that = this, containerPopup = element.closest('.km-modalview-wrapper'), viewport = element.closest('.km-root').children('.km-pane').first(), container = containerPopup[0] ? containerPopup : viewport, popupOptions, axis;\n if (options.viewport) {\n viewport = options.viewport;\n } else if (!viewport[0]) {\n viewport = window;\n }\n if (options.container) {\n container = options.container;\n } else if (!container[0]) {\n container = document.body;\n }\n popupOptions = {\n viewport: viewport,\n copyAnchorStyles: false,\n autosize: true,\n open: function () {\n that.overlay.show();\n },\n activate: $.proxy(that._activate, that),\n deactivate: function () {\n that.overlay.hide();\n if (!that._apiCall) {\n that.trigger(HIDE);\n }\n that._apiCall = false;\n }\n };\n Widget.fn.init.call(that, element, options);\n element = that.element;\n options = that.options;\n element.wrap(WRAPPER).addClass('km-popup').show();\n axis = that.options.direction.match(/left|right/) ? 'horizontal' : 'vertical';\n that.dimensions = DIMENSIONS[axis];\n that.wrapper = element.parent().css({\n width: options.width,\n height: options.height\n }).addClass('km-popup-wrapper km-' + options.direction).hide();\n that.arrow = $(ARROW).prependTo(that.wrapper).hide();\n that.overlay = $(OVERLAY).appendTo(container).hide();\n popupOptions.appendTo = that.overlay;\n if (options.className) {\n that.overlay.addClass(options.className);\n }\n that.popup = new kendo.ui.Popup(that.wrapper, $.extend(true, popupOptions, ANIMATION, DIRECTIONS[options.direction]));\n },\n options: {\n name: 'Popup',\n width: 240,\n height: '',\n direction: 'down',\n container: null,\n viewport: null\n },\n events: [HIDE],\n show: function (target) {\n this.popup.options.anchor = $(target);\n this.popup.open();\n },\n hide: function () {\n this._apiCall = true;\n this.popup.close();\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.popup.destroy();\n this.overlay.remove();\n },\n target: function () {\n return this.popup.options.anchor;\n },\n _activate: function () {\n var that = this, direction = that.options.direction, dimensions = that.dimensions, offset = dimensions.offset, popup = that.popup, anchor = popup.options.anchor, anchorOffset = $(anchor).offset(), elementOffset = $(popup.element).offset(), cssClass = popup.flipped ? REVERSE[direction] : direction, min = that.arrow[dimensions.size]() * 2, max = that.element[dimensions.size]() - that.arrow[dimensions.size](), size = $(anchor)[dimensions.size](), offsetAmount = anchorOffset[offset] - elementOffset[offset] + size / 2;\n if (offsetAmount < min) {\n offsetAmount = min;\n }\n if (offsetAmount > max) {\n offsetAmount = max;\n }\n that.wrapper.removeClass(DIRECTION_CLASSES).addClass('km-' + cssClass);\n that.arrow.css(offset, offsetAmount).show();\n }\n });\n var PopOver = Widget.extend({\n init: function (element, options) {\n var that = this, popupOptions;\n that.initialOpen = false;\n Widget.fn.init.call(that, element, options);\n popupOptions = $.extend({\n className: 'km-popover-root',\n hide: function () {\n that.trigger(CLOSE);\n }\n }, this.options.popup);\n that.popup = new Popup(that.element, popupOptions);\n that.popup.overlay.on('move', function (e) {\n if (e.target == that.popup.overlay[0]) {\n e.preventDefault();\n }\n });\n that.pane = new ui.Pane(that.element, $.extend(this.options.pane, { $angular: this.options.$angular }));\n kendo.notify(that, ui);\n },\n options: {\n name: 'PopOver',\n popup: {},\n pane: {}\n },\n events: [\n OPEN,\n CLOSE\n ],\n open: function (target) {\n this.popup.show(target);\n if (!this.initialOpen) {\n if (!this.pane.navigateToInitial()) {\n this.pane.navigate('');\n }\n this.popup.popup._position();\n this.initialOpen = true;\n } else {\n this.pane.view()._invokeNgController();\n }\n },\n openFor: function (target) {\n this.open(target);\n this.trigger(OPEN, { target: this.popup.target() });\n },\n close: function () {\n this.popup.hide();\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.pane.destroy();\n this.popup.destroy();\n kendo.destroy(this.element);\n }\n });\n ui.plugin(Popup);\n ui.plugin(PopOver);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.shim', ['kendo.popup'], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.shim',\n name: 'Shim',\n category: 'mobile',\n description: 'Mobile Shim',\n depends: ['popup'],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.mobile.ui, Popup = kendo.ui.Popup, SHIM = '
    ', HIDE = 'hide', Widget = ui.Widget;\n var Shim = Widget.extend({\n init: function (element, options) {\n var that = this, app = kendo.mobile.application, os = kendo.support.mobileOS, osname = app ? app.os.name : os ? os.name : 'ios', ioswp = osname === 'ios' || osname === 'wp' || (app ? app.os.skin : false), bb = osname === 'blackberry', align = options.align || (ioswp ? 'bottom center' : bb ? 'center right' : 'center center'), position = options.position || (ioswp ? 'bottom center' : bb ? 'center right' : 'center center'), effect = options.effect || (ioswp ? 'slideIn:up' : bb ? 'slideIn:left' : 'fade:in'), shim = $(SHIM).handler(that).hide();\n Widget.fn.init.call(that, element, options);\n that.shim = shim;\n element = that.element;\n options = that.options;\n if (options.className) {\n that.shim.addClass(options.className);\n }\n if (!options.modal) {\n that.shim.on('down', '_hide');\n }\n (app ? app.element : $(document.body)).append(shim);\n that.popup = new Popup(that.element, {\n anchor: shim,\n modal: true,\n appendTo: shim,\n origin: align,\n position: position,\n animation: {\n open: {\n effects: effect,\n duration: options.duration\n },\n close: { duration: options.duration }\n },\n close: function (e) {\n var prevented = false;\n if (!that._apiCall) {\n prevented = that.trigger(HIDE);\n }\n if (prevented) {\n e.preventDefault();\n }\n that._apiCall = false;\n },\n deactivate: function () {\n shim.hide();\n },\n open: function () {\n shim.show();\n }\n });\n kendo.notify(that);\n },\n events: [HIDE],\n options: {\n name: 'Shim',\n modal: false,\n align: undefined,\n position: undefined,\n effect: undefined,\n duration: 200\n },\n show: function () {\n this.popup.open();\n },\n hide: function () {\n this._apiCall = true;\n this.popup.close();\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.shim.kendoDestroy();\n this.popup.destroy();\n this.shim.remove();\n },\n _hide: function (e) {\n if (!e || !$.contains(this.shim.children().children('.k-popup')[0], e.target)) {\n this.popup.close();\n }\n }\n });\n ui.plugin(Shim);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.modalview', [\n 'kendo.mobile.shim',\n 'kendo.mobile.view'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.modalview',\n name: 'ModalView',\n category: 'mobile',\n description: 'The Kendo ModalView is used to present self-contained functionality in the context of the current task.',\n depends: [\n 'mobile.shim',\n 'mobile.view'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.mobile.ui, Shim = ui.Shim, Widget = ui.Widget, BEFORE_OPEN = 'beforeOpen', OPEN = 'open', CLOSE = 'close', INIT = 'init', WRAP = '
    ';\n var ModalView = ui.View.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n that._id();\n that._wrap();\n that._shim();\n if (!this.options.$angular) {\n that._layout();\n that._scroller();\n that._model();\n }\n that.element.css('display', '');\n that.trigger(INIT);\n },\n events: [\n INIT,\n BEFORE_OPEN,\n OPEN,\n CLOSE\n ],\n options: {\n name: 'ModalView',\n modal: true,\n width: null,\n height: null\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.shim.destroy();\n },\n open: function (target) {\n var that = this;\n that.target = $(target);\n that.shim.show();\n that._invokeNgController();\n that.trigger('show', { view: that });\n },\n openFor: function (target) {\n if (!this.trigger(BEFORE_OPEN, { target: target })) {\n this.open(target);\n this.trigger(OPEN, { target: target });\n }\n },\n close: function () {\n if (this.element.is(':visible') && !this.trigger(CLOSE)) {\n this.shim.hide();\n }\n },\n _wrap: function () {\n var that = this, element = that.element, options = that.options, width, height;\n width = element[0].style.width || 'auto';\n height = element[0].style.height || 'auto';\n element.addClass('km-modalview').wrap(WRAP);\n that.wrapper = element.parent().css({\n width: options.width || width || 300,\n height: options.height || height || 300\n }).addClass(height == 'auto' ? ' km-auto-height' : '');\n element.css({\n width: '',\n height: ''\n });\n },\n _shim: function () {\n var that = this;\n that.shim = new Shim(that.wrapper, {\n modal: that.options.modal,\n position: 'center center',\n align: 'center center',\n effect: 'fade:in',\n className: 'km-modalview-root',\n hide: function (e) {\n if (that.trigger(CLOSE)) {\n e.preventDefault();\n }\n }\n });\n }\n });\n ui.plugin(ModalView);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.drawer', [\n 'kendo.mobile.view',\n 'kendo.userevents'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.drawer',\n name: 'Drawer',\n category: 'mobile',\n description: 'The Kendo Mobile Drawer widget provides slide to reveal global application toolbox',\n depends: [\n 'mobile.view',\n 'userevents'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, mobile = kendo.mobile, os = kendo.support.mobileOS, Transition = kendo.effects.Transition, roleSelector = kendo.roleSelector, AXIS = 'x', ui = mobile.ui, SWIPE_TO_OPEN = !(os.ios && os.majorVersion == 7 && !os.appMode), BEFORE_SHOW = 'beforeShow', INIT = 'init', SHOW = 'show', HIDE = 'hide', AFTER_HIDE = 'afterHide', NULL_VIEW = { enable: $.noop };\n var Drawer = ui.View.extend({\n init: function (element, options) {\n $(element).parent().prepend(element);\n mobile.ui.Widget.fn.init.call(this, element, options);\n if (!this.options.$angular) {\n this._layout();\n this._scroller();\n }\n this._model();\n var pane = this.element.closest(roleSelector('pane')).data('kendoMobilePane'), userEvents;\n if (pane) {\n this.pane = pane;\n this.pane.bind('viewShow', function (e) {\n drawer._viewShow(e);\n });\n this.pane.bind('sameViewRequested', function () {\n drawer.hide();\n });\n userEvents = this.userEvents = new kendo.UserEvents(pane.element, {\n fastTap: true,\n filter: roleSelector('view splitview'),\n allowSelection: true\n });\n } else {\n this.currentView = NULL_VIEW;\n var container = $(this.options.container);\n if (!container) {\n throw new Error('The drawer needs a container configuration option set.');\n }\n userEvents = this.userEvents = new kendo.UserEvents(container, {\n fastTap: true,\n allowSelection: true\n });\n this._attachTransition(container);\n }\n var drawer = this;\n var hide = function (e) {\n if (drawer.visible) {\n drawer.hide();\n e.preventDefault();\n }\n };\n if (this.options.swipeToOpen && SWIPE_TO_OPEN) {\n userEvents.bind('press', function () {\n drawer.transition.cancel();\n });\n userEvents.bind('start', function (e) {\n drawer._start(e);\n });\n userEvents.bind('move', function (e) {\n drawer._update(e);\n });\n userEvents.bind('end', function (e) {\n drawer._end(e);\n });\n userEvents.bind('tap', hide);\n } else {\n userEvents.bind('press', hide);\n }\n this.leftPositioned = this.options.position === 'left';\n this.visible = false;\n this.element.hide().addClass('km-drawer').addClass(this.leftPositioned ? 'km-left-drawer' : 'km-right-drawer');\n this.trigger(INIT);\n },\n options: {\n name: 'Drawer',\n position: 'left',\n views: [],\n swipeToOpenViews: [],\n swipeToOpen: true,\n title: '',\n container: null\n },\n events: [\n BEFORE_SHOW,\n HIDE,\n AFTER_HIDE,\n INIT,\n SHOW\n ],\n show: function () {\n if (this._activate()) {\n this._show();\n }\n },\n hide: function () {\n if (!this.currentView) {\n return;\n }\n this.currentView.enable();\n Drawer.current = null;\n this._moveViewTo(0);\n this.trigger(HIDE, { view: this });\n },\n openFor: function () {\n if (this.visible) {\n this.hide();\n } else {\n this.show();\n }\n },\n destroy: function () {\n ui.View.fn.destroy.call(this);\n this.userEvents.destroy();\n },\n _activate: function () {\n if (this.visible) {\n return true;\n }\n var visibleOnCurrentView = this._currentViewIncludedIn(this.options.views);\n if (!visibleOnCurrentView || this.trigger(BEFORE_SHOW, { view: this })) {\n return false;\n }\n this._setAsCurrent();\n this.element.show();\n this.trigger(SHOW, { view: this });\n this._invokeNgController();\n return true;\n },\n _currentViewIncludedIn: function (views) {\n if (!this.pane || !views.length) {\n return true;\n }\n var view = this.pane.view();\n return $.inArray(view.id.replace('#', ''), views) > -1 || $.inArray(view.element.attr('id'), views) > -1;\n },\n _show: function () {\n this.currentView.enable(false);\n this.visible = true;\n var offset = this.element.width();\n if (!this.leftPositioned) {\n offset = -offset;\n }\n this._moveViewTo(offset);\n },\n _setAsCurrent: function () {\n if (Drawer.last !== this) {\n if (Drawer.last) {\n Drawer.last.element.hide();\n }\n this.element.show();\n }\n Drawer.last = this;\n Drawer.current = this;\n },\n _moveViewTo: function (offset) {\n this.userEvents.cancel();\n this.transition.moveTo({\n location: offset,\n duration: 400,\n ease: Transition.easeOutExpo\n });\n },\n _viewShow: function (e) {\n if (this.currentView) {\n this.currentView.enable();\n }\n if (this.currentView === e.view) {\n this.hide();\n return;\n }\n this.currentView = e.view;\n this._attachTransition(e.view.element);\n },\n _attachTransition: function (element) {\n var that = this, movable = this.movable, currentOffset = movable && movable.x;\n if (this.transition) {\n this.transition.cancel();\n this.movable.moveAxis('x', 0);\n }\n movable = this.movable = new kendo.ui.Movable(element);\n this.transition = new Transition({\n axis: AXIS,\n movable: this.movable,\n onEnd: function () {\n if (movable[AXIS] === 0) {\n element[0].style.cssText = '';\n that.element.hide();\n that.trigger(AFTER_HIDE);\n that.visible = false;\n }\n }\n });\n if (currentOffset) {\n element.addClass('k-fx-hidden');\n kendo.animationFrame(function () {\n element.removeClass('k-fx-hidden');\n that.movable.moveAxis(AXIS, currentOffset);\n that.hide();\n });\n }\n },\n _start: function (e) {\n var userEvents = e.sender;\n if (Math.abs(e.x.velocity) < Math.abs(e.y.velocity) || kendo.triggeredByInput(e.event) || !this._currentViewIncludedIn(this.options.swipeToOpenViews)) {\n userEvents.cancel();\n return;\n }\n var leftPositioned = this.leftPositioned, visible = this.visible, canMoveLeft = leftPositioned && visible || !leftPositioned && !Drawer.current, canMoveRight = !leftPositioned && visible || leftPositioned && !Drawer.current, leftSwipe = e.x.velocity < 0;\n if (canMoveLeft && leftSwipe || canMoveRight && !leftSwipe) {\n if (this._activate()) {\n userEvents.capture();\n return;\n }\n }\n userEvents.cancel();\n },\n _update: function (e) {\n var movable = this.movable, newPosition = movable.x + e.x.delta, limitedPosition;\n if (this.leftPositioned) {\n limitedPosition = Math.min(Math.max(0, newPosition), this.element.width());\n } else {\n limitedPosition = Math.max(Math.min(0, newPosition), -this.element.width());\n }\n this.movable.moveAxis(AXIS, limitedPosition);\n e.event.preventDefault();\n e.event.stopPropagation();\n },\n _end: function (e) {\n var velocity = e.x.velocity, pastHalf = Math.abs(this.movable.x) > this.element.width() / 2, velocityThreshold = 0.8, shouldShow;\n if (this.leftPositioned) {\n shouldShow = velocity > -velocityThreshold && (velocity > velocityThreshold || pastHalf);\n } else {\n shouldShow = velocity < velocityThreshold && (velocity < -velocityThreshold || pastHalf);\n }\n if (shouldShow) {\n this._show();\n } else {\n this.hide();\n }\n }\n });\n ui.plugin(Drawer);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.splitview', ['kendo.mobile.pane'], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.splitview',\n name: 'SplitView',\n category: 'mobile',\n description: 'The mobile SplitView is a tablet-specific view that consists of two or more mobile Pane widgets.',\n depends: ['mobile.pane']\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.mobile.ui, Widget = ui.Widget, EXPANED_PANE_SHIM = '
    ', View = ui.View;\n var SplitView = View.extend({\n init: function (element, options) {\n var that = this, pane, modalViews;\n Widget.fn.init.call(that, element, options);\n element = that.element;\n $.extend(that, options);\n that._id();\n if (!that.options.$angular) {\n that._layout();\n that._overlay();\n } else {\n that._overlay();\n }\n that._style();\n modalViews = element.children(that._locate('modalview'));\n if (!that.options.$angular) {\n kendo.mobile.init(modalViews);\n } else {\n modalViews.each(function (idx, element) {\n kendo.compileMobileDirective($(element), options.$angular[0]);\n });\n }\n that.panes = [];\n that._paramsHistory = [];\n if (!that.options.$angular) {\n that.content.children(kendo.roleSelector('pane')).each(function () {\n pane = kendo.initWidget(this, {}, ui.roles);\n that.panes.push(pane);\n });\n } else {\n that.element.children(kendo.directiveSelector('pane')).each(function () {\n pane = kendo.compileMobileDirective($(this), options.$angular[0]);\n that.panes.push(pane);\n });\n that.element.children(kendo.directiveSelector('header footer')).each(function () {\n kendo.compileMobileDirective($(this), options.$angular[0]);\n });\n }\n that.expandedPaneShim = $(EXPANED_PANE_SHIM).appendTo(that.element);\n that._shimUserEvents = new kendo.UserEvents(that.expandedPaneShim, {\n fastTap: true,\n tap: function () {\n that.collapsePanes();\n }\n });\n },\n _locate: function (selectors) {\n return this.options.$angular ? kendo.directiveSelector(selectors) : kendo.roleSelector(selectors);\n },\n options: {\n name: 'SplitView',\n style: 'horizontal'\n },\n expandPanes: function () {\n this.element.addClass('km-expanded-splitview');\n },\n collapsePanes: function () {\n this.element.removeClass('km-expanded-splitview');\n },\n _layout: function () {\n var that = this, element = that.element;\n that.transition = kendo.attrValue(element, 'transition');\n kendo.mobile.ui.View.prototype._layout.call(this);\n kendo.mobile.init(this.header.add(this.footer));\n that.element.addClass('km-splitview');\n that.content.addClass('km-split-content');\n },\n _style: function () {\n var style = this.options.style, element = this.element, styles;\n if (style) {\n styles = style.split(' ');\n $.each(styles, function () {\n element.addClass('km-split-' + this);\n });\n }\n },\n showStart: function () {\n var that = this;\n that.element.css('display', '');\n if (!that.inited) {\n that.inited = true;\n $.each(that.panes, function () {\n if (this.options.initial) {\n this.navigateToInitial();\n } else {\n this.navigate('');\n }\n });\n that.trigger('init', { view: that });\n } else {\n this._invokeNgController();\n }\n that.trigger('show', { view: that });\n }\n });\n ui.plugin(SplitView);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.application', [\n 'kendo.mobile.pane',\n 'kendo.router'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.application',\n name: 'Application',\n category: 'mobile',\n description: 'The Mobile application provides a framework to build native looking web applications on mobile devices.',\n depends: [\n 'mobile.pane',\n 'router'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, mobile = kendo.mobile, support = kendo.support, Widget = mobile.ui.Widget, Pane = mobile.ui.Pane, DEFAULT_OS = 'ios7', OS = support.mobileOS, BERRYPHONEGAP = OS.device == 'blackberry' && OS.flatVersion >= 600 && OS.flatVersion < 1000 && OS.appMode, FONT_SIZE_COEF = 0.93, VERTICAL = 'km-vertical', CHROME = OS.browser === 'chrome', BROKEN_WEBVIEW_RESIZE = OS.ios && OS.flatVersion >= 700 && OS.flatVersion < 800 && (OS.appMode || CHROME), INITIALLY_HORIZONTAL = Math.abs(window.orientation) / 90 == 1, HORIZONTAL = 'km-horizontal', MOBILE_PLATFORMS = {\n ios7: {\n ios: true,\n browser: 'default',\n device: 'iphone',\n flatVersion: '700',\n majorVersion: '7',\n minorVersion: '0.0',\n name: 'ios',\n tablet: false\n },\n ios: {\n ios: true,\n browser: 'default',\n device: 'iphone',\n flatVersion: '612',\n majorVersion: '6',\n minorVersion: '1.2',\n name: 'ios',\n tablet: false\n },\n android: {\n android: true,\n browser: 'default',\n device: 'android',\n flatVersion: '442',\n majorVersion: '4',\n minorVersion: '4.2',\n name: 'android',\n tablet: false\n },\n blackberry: {\n blackberry: true,\n browser: 'default',\n device: 'blackberry',\n flatVersion: '710',\n majorVersion: '7',\n minorVersion: '1.0',\n name: 'blackberry',\n tablet: false\n },\n meego: {\n meego: true,\n browser: 'default',\n device: 'meego',\n flatVersion: '850',\n majorVersion: '8',\n minorVersion: '5.0',\n name: 'meego',\n tablet: false\n },\n wp: {\n wp: true,\n browser: 'default',\n device: 'wp',\n flatVersion: '800',\n majorVersion: '8',\n minorVersion: '0.0',\n name: 'wp',\n tablet: false\n }\n }, viewportTemplate = kendo.template('', { usedWithBlock: false }), systemMeta = kendo.template(' ' + ' ' + ' ', { usedWithBlock: false }), clipTemplate = kendo.template('', { usedWithBlock: false }), ENABLE_CLIP = OS.android && OS.browser != 'chrome' || OS.blackberry, iconMeta = kendo.template('', { usedWithBlock: false }), HIDEBAR = (OS.device == 'iphone' || OS.device == 'ipod') && OS.majorVersion < 7, SUPPORT_SWIPE_TO_GO_BACK = (OS.device == 'iphone' || OS.device == 'ipod') && OS.majorVersion >= 7, HISTORY_TRANSITION = SUPPORT_SWIPE_TO_GO_BACK ? 'none' : null, BARCOMPENSATION = OS.browser == 'mobilesafari' ? 60 : 0, STATUS_BAR_HEIGHT = 20, WINDOW = $(window), SCREEN = window.screen, HEAD = $('head'), INIT = 'init', proxy = $.proxy;\n function osCssClass(os, options) {\n var classes = [];\n if (OS) {\n classes.push('km-on-' + OS.name);\n }\n if (os.skin) {\n classes.push('km-' + os.skin);\n } else {\n if (os.name == 'ios' && os.majorVersion > 6) {\n classes.push('km-ios7');\n } else {\n classes.push('km-' + os.name);\n }\n }\n if (os.name == 'ios' && os.majorVersion < 7 || os.name != 'ios') {\n classes.push('km-' + os.name + os.majorVersion);\n }\n classes.push('km-' + os.majorVersion);\n classes.push('km-m' + (os.minorVersion ? os.minorVersion[0] : 0));\n if (os.variant && (os.skin && os.skin === os.name || !os.skin || os.setDefaultPlatform === false)) {\n classes.push('km-' + (os.skin ? os.skin : os.name) + '-' + os.variant);\n }\n if (os.cordova) {\n classes.push('km-cordova');\n }\n if (os.appMode) {\n classes.push('km-app');\n } else {\n classes.push('km-web');\n }\n if (options && options.statusBarStyle) {\n classes.push('km-' + options.statusBarStyle + '-status-bar');\n }\n return classes.join(' ');\n }\n function wp8Background(os) {\n return 'km-wp-' + (os.noVariantSet ? parseInt($('
    ').css('background-color').split(',')[1], 10) === 0 ? 'dark' : 'light' : os.variant + ' km-wp-' + os.variant + '-force');\n }\n function isOrientationHorizontal(element) {\n return OS.wp ? element.css('animation-name') == '-kendo-landscape' : Math.abs(window.orientation) / 90 == 1;\n }\n function getOrientationClass(element) {\n return isOrientationHorizontal(element) ? HORIZONTAL : VERTICAL;\n }\n function setMinimumHeight(pane) {\n pane.parent().addBack().css('min-height', window.innerHeight);\n }\n function applyViewportHeight() {\n $('meta[name=viewport]').remove();\n HEAD.append(viewportTemplate({ height: ', width=device-width' + (isOrientationHorizontal() ? ', height=' + window.innerHeight + 'px' : support.mobileOS.flatVersion >= 600 && support.mobileOS.flatVersion < 700 ? ', height=' + window.innerWidth + 'px' : ', height=device-height') }));\n }\n var Application = Widget.extend({\n init: function (element, options) {\n mobile.application = this;\n $($.proxy(this, 'bootstrap', element, options));\n },\n bootstrap: function (element, options) {\n element = $(element);\n if (!element[0]) {\n element = $(document.body);\n }\n Widget.fn.init.call(this, element, options);\n this.element.removeAttr('data-' + kendo.ns + 'role');\n this._setupPlatform();\n this._attachMeta();\n this._setupElementClass();\n this._attachHideBarHandlers();\n var paneOptions = $.extend({}, this.options);\n delete paneOptions.name;\n var that = this, startHistory = function () {\n that.pane = new Pane(that.element, paneOptions);\n that.pane.navigateToInitial();\n if (that.options.updateDocumentTitle) {\n that._setupDocumentTitle();\n }\n that._startHistory();\n that.trigger(INIT);\n };\n if (this.options.$angular) {\n setTimeout(startHistory);\n } else {\n startHistory();\n }\n },\n options: {\n name: 'Application',\n hideAddressBar: true,\n browserHistory: true,\n historyTransition: HISTORY_TRANSITION,\n modelScope: window,\n statusBarStyle: 'black',\n transition: '',\n retina: false,\n platform: null,\n skin: null,\n updateDocumentTitle: true,\n useNativeScrolling: false\n },\n events: [INIT],\n navigate: function (url, transition) {\n this.pane.navigate(url, transition);\n },\n replace: function (url, transition) {\n this.pane.replace(url, transition);\n },\n scroller: function () {\n return this.view().scroller;\n },\n hideLoading: function () {\n if (this.pane) {\n this.pane.hideLoading();\n } else {\n throw new Error('The mobile application instance is not fully instantiated. Please consider activating loading in the application init event handler.');\n }\n },\n showLoading: function () {\n if (this.pane) {\n this.pane.showLoading();\n } else {\n throw new Error('The mobile application instance is not fully instantiated. Please consider activating loading in the application init event handler.');\n }\n },\n changeLoadingMessage: function (message) {\n if (this.pane) {\n this.pane.changeLoadingMessage(message);\n } else {\n throw new Error('The mobile application instance is not fully instantiated. Please consider changing the message in the application init event handler.');\n }\n },\n view: function () {\n return this.pane.view();\n },\n skin: function (skin) {\n var that = this;\n if (!arguments.length) {\n return that.options.skin;\n }\n that.options.skin = skin || '';\n that.element[0].className = 'km-pane';\n that._setupPlatform();\n that._setupElementClass();\n return that.options.skin;\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.pane.destroy();\n if (this.options.browserHistory) {\n this.router.destroy();\n }\n },\n _setupPlatform: function () {\n var that = this, platform = that.options.platform, skin = that.options.skin, split = [], os = OS || MOBILE_PLATFORMS[DEFAULT_OS];\n if (platform) {\n os.setDefaultPlatform = true;\n if (typeof platform === 'string') {\n split = platform.split('-');\n os = $.extend({ variant: split[1] }, os, MOBILE_PLATFORMS[split[0]]);\n } else {\n os = platform;\n }\n }\n if (skin) {\n split = skin.split('-');\n if (!OS) {\n os.setDefaultPlatform = false;\n }\n os = $.extend({}, os, {\n skin: split[0],\n variant: split[1]\n });\n }\n if (!os.variant) {\n os.noVariantSet = true;\n os.variant = 'dark';\n }\n that.os = os;\n that.osCssClass = osCssClass(that.os, that.options);\n if (os.name == 'wp') {\n if (!that.refreshBackgroundColorProxy) {\n that.refreshBackgroundColorProxy = $.proxy(function () {\n if (that.os.variant && (that.os.skin && that.os.skin === that.os.name) || !that.os.skin) {\n that.element.removeClass('km-wp-dark km-wp-light km-wp-dark-force km-wp-light-force').addClass(wp8Background(that.os));\n }\n }, that);\n }\n $(document).off('visibilitychange', that.refreshBackgroundColorProxy);\n $(document).off('resume', that.refreshBackgroundColorProxy);\n if (!os.skin) {\n that.element.parent().css('overflow', 'hidden');\n $(document).on('visibilitychange', that.refreshBackgroundColorProxy);\n $(document).on('resume', that.refreshBackgroundColorProxy);\n that.refreshBackgroundColorProxy();\n }\n }\n },\n _startHistory: function () {\n if (this.options.browserHistory) {\n this.router = new kendo.Router({\n pushState: this.options.pushState,\n root: this.options.root,\n hashBang: this.options.hashBang\n });\n this.pane.bindToRouter(this.router);\n this.router.start();\n } else {\n if (!this.options.initial) {\n this.pane.navigate('');\n }\n }\n },\n _resizeToScreenHeight: function () {\n var includeStatusBar = $('meta[name=apple-mobile-web-app-status-bar-style]').attr('content').match(/black-translucent|hidden/), element = this.element, height;\n if (CHROME) {\n height = window.innerHeight;\n } else {\n if (isOrientationHorizontal(element)) {\n if (includeStatusBar) {\n if (INITIALLY_HORIZONTAL) {\n height = SCREEN.availWidth + STATUS_BAR_HEIGHT;\n } else {\n height = SCREEN.availWidth;\n }\n } else {\n if (INITIALLY_HORIZONTAL) {\n height = SCREEN.availWidth;\n } else {\n height = SCREEN.availWidth - STATUS_BAR_HEIGHT;\n }\n }\n } else {\n if (includeStatusBar) {\n if (INITIALLY_HORIZONTAL) {\n height = SCREEN.availHeight;\n } else {\n height = SCREEN.availHeight + STATUS_BAR_HEIGHT;\n }\n } else {\n if (INITIALLY_HORIZONTAL) {\n height = SCREEN.availHeight - STATUS_BAR_HEIGHT;\n } else {\n height = SCREEN.availHeight;\n }\n }\n }\n }\n element.height(height);\n },\n _setupElementClass: function () {\n var that = this, size, element = that.element;\n element.parent().addClass('km-root km-' + (that.os.tablet ? 'tablet' : 'phone'));\n element.addClass(that.osCssClass + ' ' + getOrientationClass(element));\n if (this.options.useNativeScrolling) {\n element.parent().addClass('km-native-scrolling');\n }\n if (CHROME) {\n element.addClass('km-ios-chrome');\n }\n if (support.wpDevicePixelRatio) {\n element.parent().css('font-size', support.wpDevicePixelRatio + 'em');\n }\n if (this.options.retina) {\n element.parent().addClass('km-retina');\n element.parent().css('font-size', support.devicePixelRatio * FONT_SIZE_COEF + 'em');\n }\n if (BERRYPHONEGAP) {\n applyViewportHeight();\n }\n if (that.options.useNativeScrolling) {\n element.parent().addClass('km-native-scrolling');\n } else if (ENABLE_CLIP) {\n size = (screen.availWidth > screen.availHeight ? screen.availWidth : screen.availHeight) + 200;\n $(clipTemplate({\n width: size,\n height: size\n })).appendTo(HEAD);\n }\n if (BROKEN_WEBVIEW_RESIZE) {\n that._resizeToScreenHeight();\n }\n kendo.onResize(function () {\n element.removeClass('km-horizontal km-vertical').addClass(getOrientationClass(element));\n if (that.options.useNativeScrolling) {\n setMinimumHeight(element);\n }\n if (BROKEN_WEBVIEW_RESIZE) {\n that._resizeToScreenHeight();\n }\n if (BERRYPHONEGAP) {\n applyViewportHeight();\n }\n kendo.resize(element);\n });\n },\n _clearExistingMeta: function () {\n HEAD.find('meta').filter('[name|=\\'apple-mobile-web-app\\'],[name|=\\'msapplication-tap\\'],[name=\\'viewport\\']').remove();\n },\n _attachMeta: function () {\n var options = this.options, icon = options.icon, size;\n this._clearExistingMeta();\n if (!BERRYPHONEGAP) {\n HEAD.prepend(viewportTemplate({\n height: '',\n scale: this.options.retina ? 1 / support.devicePixelRatio : '1.0'\n }));\n }\n HEAD.prepend(systemMeta(options));\n if (icon) {\n if (typeof icon === 'string') {\n icon = { '': icon };\n }\n for (size in icon) {\n HEAD.prepend(iconMeta({\n icon: icon[size],\n size: size\n }));\n }\n }\n if (options.useNativeScrolling) {\n setMinimumHeight(this.element);\n }\n },\n _attachHideBarHandlers: function () {\n var that = this, hideBar = proxy(that, '_hideBar');\n if (support.mobileOS.appMode || !that.options.hideAddressBar || !HIDEBAR || that.options.useNativeScrolling) {\n return;\n }\n that._initialHeight = {};\n WINDOW.on('load', hideBar);\n kendo.onResize(function () {\n setTimeout(window.scrollTo, 0, 0, 1);\n });\n },\n _setupDocumentTitle: function () {\n var that = this, defaultTitle = document.title;\n that.pane.bind('viewShow', function (e) {\n var title = e.view.title;\n document.title = title !== undefined ? title : defaultTitle;\n });\n },\n _hideBar: function () {\n var that = this, element = that.element;\n element.height(kendo.support.transforms.css + 'calc(100% + ' + BARCOMPENSATION + 'px)');\n $(window).trigger(kendo.support.resize);\n }\n });\n kendo.mobile.Application = Application;\n kendo.ui.plugin(Application, kendo.mobile, 'Mobile');\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.actionsheet', [\n 'kendo.mobile.popover',\n 'kendo.mobile.shim'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.actionsheet',\n name: 'ActionSheet',\n category: 'mobile',\n description: 'The mobile ActionSheet widget displays a set of choices related to a task the user initiates.',\n depends: [\n 'mobile.popover',\n 'mobile.shim'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, support = kendo.support, ui = kendo.mobile.ui, Shim = ui.Shim, Popup = ui.Popup, Widget = ui.Widget, OPEN = 'open', CLOSE = 'close', COMMAND = 'command', BUTTONS = 'li>a', CONTEXT_DATA = 'actionsheetContext', WRAP = '
    ', cancelTemplate = kendo.template('
  • #:cancel#
  • ');\n var ActionSheet = Widget.extend({\n init: function (element, options) {\n var that = this, ShimClass, tablet, type, os = support.mobileOS;\n Widget.fn.init.call(that, element, options);\n options = that.options;\n type = options.type;\n element = that.element;\n if (type === 'auto') {\n tablet = os && os.tablet;\n } else {\n tablet = type === 'tablet';\n }\n ShimClass = tablet ? Popup : Shim;\n if (options.cancelTemplate) {\n cancelTemplate = kendo.template(options.cancelTemplate);\n }\n element.addClass('km-actionsheet').append(cancelTemplate({ cancel: that.options.cancel })).wrap(WRAP).on('up', BUTTONS, '_click').on('click', BUTTONS, kendo.preventDefault);\n that.view().bind('destroy', function () {\n that.destroy();\n });\n that.wrapper = element.parent().addClass(type ? ' km-actionsheet-' + type : '');\n that.shim = new ShimClass(that.wrapper, $.extend({\n modal: os.ios && os.majorVersion < 7,\n className: 'km-actionsheet-root'\n }, that.options.popup));\n that._closeProxy = $.proxy(that, '_close');\n that._shimHideProxy = $.proxy(that, '_shimHide');\n that.shim.bind('hide', that._shimHideProxy);\n if (tablet) {\n kendo.onResize(that._closeProxy);\n }\n kendo.notify(that, ui);\n },\n events: [\n OPEN,\n CLOSE,\n COMMAND\n ],\n options: {\n name: 'ActionSheet',\n cancel: 'Cancel',\n type: 'auto',\n popup: { height: 'auto' }\n },\n open: function (target, context) {\n var that = this;\n that.target = $(target);\n that.context = context;\n that.shim.show(target);\n },\n close: function () {\n this.context = this.target = null;\n this.shim.hide();\n },\n openFor: function (target) {\n var that = this, context = target.data(CONTEXT_DATA);\n that.open(target, context);\n that.trigger(OPEN, {\n target: target,\n context: context\n });\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n kendo.unbindResize(this._closeProxy);\n this.shim.destroy();\n },\n _click: function (e) {\n if (e.isDefaultPrevented()) {\n return;\n }\n var currentTarget = $(e.currentTarget);\n var action = currentTarget.data('action');\n if (action) {\n var actionData = {\n target: this.target,\n context: this.context\n }, $angular = this.options.$angular;\n if ($angular) {\n this.element.injector().get('$parse')(action)($angular[0])(actionData);\n } else {\n kendo.getter(action)(window)(actionData);\n }\n }\n this.trigger(COMMAND, {\n target: this.target,\n context: this.context,\n currentTarget: currentTarget\n });\n e.preventDefault();\n this._close();\n },\n _shimHide: function (e) {\n if (!this.trigger(CLOSE)) {\n this.context = this.target = null;\n } else {\n e.preventDefault();\n }\n },\n _close: function (e) {\n if (!this.trigger(CLOSE)) {\n this.close();\n } else {\n e.preventDefault();\n }\n }\n });\n ui.plugin(ActionSheet);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.button', ['kendo.userevents'], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.button',\n name: 'Button',\n category: 'mobile',\n description: 'The Button widget navigates between mobile Application views when pressed.',\n depends: ['userevents']\n };\n (function ($, undefined) {\n var kendo = window.kendo, mobile = kendo.mobile, ui = mobile.ui, Widget = ui.Widget, support = kendo.support, os = support.mobileOS, ANDROID3UP = os.android && os.flatVersion >= 300, CLICK = 'click', DISABLED = 'disabled', DISABLEDSTATE = 'km-state-disabled';\n function highlightButton(widget, event, highlight) {\n $(event.target).closest('.km-button,.km-detail').toggleClass('km-state-active', highlight);\n if (ANDROID3UP && widget.deactivateTimeoutID) {\n clearTimeout(widget.deactivateTimeoutID);\n widget.deactivateTimeoutID = 0;\n }\n }\n function createBadge(value) {\n return $('' + value + '');\n }\n var Button = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n var useTap = that.options.clickOn === 'up';\n that._wrap();\n that._style();\n if (!useTap) {\n that.element.attr('data-navigate-on-press', true);\n }\n that.options.enable = that.options.enable && !that.element.attr(DISABLED);\n that.enable(that.options.enable);\n that._userEvents = new kendo.UserEvents(that.element, {\n allowSelection: !useTap,\n fastTap: true,\n press: function (e) {\n that._activate(e);\n },\n release: function (e) {\n highlightButton(that, e, false);\n if (!useTap) {\n e.event.stopPropagation();\n }\n }\n });\n that._userEvents.bind(useTap ? 'tap' : 'press', function (e) {\n that._release(e);\n });\n if (ANDROID3UP) {\n that.element.on('move', function (e) {\n that._timeoutDeactivate(e);\n });\n }\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this._userEvents.destroy();\n },\n events: [CLICK],\n options: {\n name: 'Button',\n icon: '',\n style: '',\n badge: '',\n clickOn: 'up',\n enable: true\n },\n badge: function (value) {\n var badge = this.badgeElement = this.badgeElement || createBadge(value).appendTo(this.element);\n if (value || value === 0) {\n badge.html(value);\n return this;\n }\n if (value === false) {\n badge.empty().remove();\n this.badgeElement = false;\n return this;\n }\n return badge.html();\n },\n enable: function (enable) {\n var element = this.element;\n if (typeof enable == 'undefined') {\n enable = true;\n }\n this.options.enable = enable;\n if (enable) {\n element.removeAttr(DISABLED);\n } else {\n element.attr(DISABLED, DISABLED);\n }\n element.toggleClass(DISABLEDSTATE, !enable);\n },\n _timeoutDeactivate: function (e) {\n if (!this.deactivateTimeoutID) {\n this.deactivateTimeoutID = setTimeout(highlightButton, 500, this, e, false);\n }\n },\n _activate: function (e) {\n var activeElement = document.activeElement, nodeName = activeElement ? activeElement.nodeName : '';\n if (this.options.enable) {\n highlightButton(this, e, true);\n if (nodeName == 'INPUT' || nodeName == 'TEXTAREA') {\n activeElement.blur();\n }\n }\n },\n _release: function (e) {\n var that = this;\n if (e.which > 1) {\n return;\n }\n if (!that.options.enable) {\n e.preventDefault();\n return;\n }\n if (that.trigger(CLICK, {\n target: $(e.target),\n button: that.element\n })) {\n e.preventDefault();\n }\n },\n _style: function () {\n var style = this.options.style, element = this.element, styles;\n if (style) {\n styles = style.split(' ');\n $.each(styles, function () {\n element.addClass('km-' + this);\n });\n }\n },\n _wrap: function () {\n var that = this, icon = that.options.icon, badge = that.options.badge, iconSpan = '').children('span.km-text');\n }\n if (!image[0] && icon) {\n if (!span[0]) {\n iconSpan += ' km-notext';\n }\n that.iconElement = element.prepend($(iconSpan + '\" />'));\n }\n if (badge || badge === 0) {\n that.badgeElement = createBadge(badge).appendTo(element);\n }\n }\n });\n var BackButton = Button.extend({\n options: {\n name: 'BackButton',\n style: 'back'\n },\n init: function (element, options) {\n var that = this;\n Button.fn.init.call(that, element, options);\n if (typeof that.element.attr('href') === 'undefined') {\n that.element.attr('href', '#:back');\n }\n }\n });\n var DetailButton = Button.extend({\n options: {\n name: 'DetailButton',\n style: ''\n },\n init: function (element, options) {\n Button.fn.init.call(this, element, options);\n },\n _style: function () {\n var style = this.options.style + ' detail', element = this.element;\n if (style) {\n var styles = style.split(' ');\n $.each(styles, function () {\n element.addClass('km-' + this);\n });\n }\n },\n _wrap: function () {\n var that = this, icon = that.options.icon, iconSpan = ''));\n }\n }\n });\n ui.plugin(Button);\n ui.plugin(BackButton);\n ui.plugin(DetailButton);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.buttongroup', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.buttongroup',\n name: 'ButtonGroup',\n category: 'mobile',\n description: 'The Kendo mobile ButtonGroup widget is a linear set of grouped buttons.',\n depends: ['core']\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.mobile.ui, Widget = ui.Widget, ACTIVE = 'state-active', DISABLE = 'state-disabled', SELECT = 'select', SELECTOR = 'li:not(.km-' + ACTIVE + ')';\n function className(name) {\n return 'k-' + name + ' km-' + name;\n }\n function createBadge(value) {\n return $('' + value + '');\n }\n var ButtonGroup = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n that.element.addClass('km-buttongroup k-widget k-button-group').find('li').each(that._button);\n that.element.on(that.options.selectOn, SELECTOR, '_select');\n that._enable = true;\n that.select(that.options.index);\n if (!that.options.enable) {\n that._enable = false;\n that.wrapper.addClass(className(DISABLE));\n }\n },\n events: [SELECT],\n options: {\n name: 'ButtonGroup',\n selectOn: 'down',\n index: -1,\n enable: true\n },\n current: function () {\n return this.element.find('.km-' + ACTIVE);\n },\n select: function (li) {\n var that = this, index = -1;\n if (li === undefined || li === -1 || !that._enable || $(li).is('.km-' + DISABLE)) {\n return;\n }\n that.current().removeClass(className(ACTIVE));\n if (typeof li === 'number') {\n index = li;\n li = $(that.element[0].children[li]);\n } else if (li.nodeType) {\n li = $(li);\n index = li.index();\n }\n li.addClass(className(ACTIVE));\n that.selectedIndex = index;\n },\n badge: function (item, value) {\n var buttongroup = this.element, badge;\n if (!isNaN(item)) {\n item = buttongroup.children().get(item);\n }\n item = buttongroup.find(item);\n badge = $(item.children('.km-badge')[0] || createBadge(value).appendTo(item));\n if (value || value === 0) {\n badge.html(value);\n return this;\n }\n if (value === false) {\n badge.empty().remove();\n return this;\n }\n return badge.html();\n },\n enable: function (enable) {\n if (typeof enable == 'undefined') {\n enable = true;\n }\n this.wrapper.toggleClass(className(DISABLE), !enable);\n this._enable = this.options.enable = enable;\n },\n _button: function () {\n var button = $(this).addClass(className('button')), icon = kendo.attrValue(button, 'icon'), badge = kendo.attrValue(button, 'badge'), span = button.children('span'), image = button.find('img').addClass(className('image'));\n if (!span[0]) {\n span = button.wrapInner('').children('span');\n }\n span.addClass(className('text'));\n if (!image[0] && icon) {\n button.prepend($(''));\n }\n if (badge || badge === 0) {\n createBadge(badge).appendTo(button);\n }\n },\n _select: function (e) {\n if (e.which > 1 || e.isDefaultPrevented() || !this._enable) {\n return;\n }\n this.select(e.currentTarget);\n this.trigger(SELECT, { index: this.selectedIndex });\n }\n });\n ui.plugin(ButtonGroup);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.collapsible', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.collapsible',\n name: 'Collapsible',\n category: 'mobile',\n description: 'The Kendo mobile Collapsible widget provides ability for creating collapsible blocks of content.',\n depends: [\n 'core',\n 'userevents'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.mobile.ui, Widget = ui.Widget, COLLAPSIBLE = 'km-collapsible', HEADER = 'km-collapsible-header', CONTENT = 'km-collapsible-content', INSET = 'km-collapsibleinset', HEADER_WRAPPER = '
    ', CONTENT_WRAPPER = '
    ', COLLAPSED = 'km-collapsed', EXPANDED = 'km-expanded', ANIMATED = 'km-animated', LEFT = 'left', EXAPND = 'expand', COLLAPSE = 'collapse';\n var Collapsible = Widget.extend({\n init: function (element, options) {\n var that = this, container = $(element);\n Widget.fn.init.call(that, container, options);\n container.addClass(COLLAPSIBLE);\n that._buildHeader();\n that.content = container.children().not(that.header).wrapAll(CONTENT_WRAPPER).parent();\n that._userEvents = new kendo.UserEvents(that.header, {\n fastTap: true,\n tap: function () {\n that.toggle();\n }\n });\n container.addClass(that.options.collapsed ? COLLAPSED : EXPANDED);\n if (that.options.inset) {\n container.addClass(INSET);\n }\n if (that.options.animation) {\n that.content.addClass(ANIMATED);\n that.content.height(0);\n if (that.options.collapsed) {\n that.content.hide();\n }\n } else if (that.options.collapsed) {\n that.content.hide();\n }\n },\n events: [\n EXAPND,\n COLLAPSE\n ],\n options: {\n name: 'Collapsible',\n collapsed: true,\n collapseIcon: 'arrow-n',\n expandIcon: 'arrow-s',\n iconPosition: LEFT,\n animation: true,\n inset: false\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this._userEvents.destroy();\n },\n expand: function (instant) {\n var icon = this.options.collapseIcon, content = this.content, ios = kendo.support.mobileOS.ios;\n if (!this.trigger(EXAPND)) {\n if (icon) {\n this.header.find('.km-icon').removeClass().addClass('km-icon km-' + icon);\n }\n this.element.removeClass(COLLAPSED).addClass(EXPANDED);\n if (this.options.animation && !instant) {\n content.off('transitionend');\n content.show();\n if (ios) {\n content.removeClass(ANIMATED);\n }\n content.height(this._getContentHeight());\n if (ios) {\n content.addClass(ANIMATED);\n }\n kendo.resize(content);\n } else {\n content.show();\n }\n }\n },\n collapse: function (instant) {\n var icon = this.options.expandIcon, content = this.content;\n if (!this.trigger(COLLAPSE)) {\n if (icon) {\n this.header.find('.km-icon').removeClass().addClass('km-icon km-' + icon);\n }\n this.element.removeClass(EXPANDED).addClass(COLLAPSED);\n if (this.options.animation && !instant) {\n content.one('transitionend', function () {\n content.hide();\n });\n content.height(0);\n } else {\n content.hide();\n }\n }\n },\n toggle: function (instant) {\n if (this.isCollapsed()) {\n this.expand(instant);\n } else {\n this.collapse(instant);\n }\n },\n isCollapsed: function () {\n return this.element.hasClass(COLLAPSED);\n },\n resize: function () {\n if (!this.isCollapsed() && this.options.animation) {\n this.content.height(this._getContentHeight());\n }\n },\n _buildHeader: function () {\n var header = this.element.children(':header').wrapAll(HEADER_WRAPPER), iconSpan = $(''), icon = this.options.collapsed ? this.options.expandIcon : this.options.collapseIcon, iconPosition = this.options.iconPosition;\n if (icon) {\n header.prepend(iconSpan);\n iconSpan.addClass('km-' + icon);\n }\n this.header = header.parent();\n this.header.addClass('km-icon-' + iconPosition);\n },\n _getContentHeight: function () {\n var style = this.content.attr('style'), height;\n this.content.css({\n position: 'absolute',\n visibility: 'hidden',\n height: 'auto'\n });\n height = this.content.height();\n this.content.attr('style', style ? style : '');\n return height;\n }\n });\n ui.plugin(Collapsible);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.listview', [\n 'kendo.data',\n 'kendo.userevents',\n 'kendo.mobile.button'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.listview',\n name: 'ListView',\n category: 'mobile',\n description: 'The Kendo Mobile ListView widget is used to display flat or grouped list of items.',\n depends: [\n 'data',\n 'userevents',\n 'mobile.button'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, Node = window.Node, mobile = kendo.mobile, ui = mobile.ui, outerHeight = kendo._outerHeight, DataSource = kendo.data.DataSource, Widget = ui.DataBoundWidget, ITEM_SELECTOR = '.km-list > li, > li:not(.km-group-container)', HIGHLIGHT_SELECTOR = '.km-listview-link, .km-listview-label', ICON_SELECTOR = '[' + kendo.attr('icon') + ']', proxy = $.proxy, attrValue = kendo.attrValue, GROUP_CLASS = 'km-group-title', ACTIVE_CLASS = 'km-state-active', GROUP_WRAPPER = '
    ', GROUP_TEMPLATE = kendo.template('
  • #= this.headerTemplate(data) #
      #= kendo.render(this.template, data.items)#
  • '), WRAPPER = '
    ', SEARCH_TEMPLATE = kendo.template(''), NS = '.kendoMobileListView', STYLED = 'styled', DATABOUND = 'dataBound', DATABINDING = 'dataBinding', ITEM_CHANGE = 'itemChange', CLICK = 'click', CHANGE = 'change', PROGRESS = 'progress', FUNCTION = 'function', whitespaceRegExp = /^\\s+$/, buttonRegExp = /button/;\n function whitespace() {\n return this.nodeType === Node.TEXT_NODE && this.nodeValue.match(whitespaceRegExp);\n }\n function addIcon(item, icon) {\n if (icon && !item[0].querySelector('.km-icon')) {\n item.prepend('');\n }\n }\n function enhanceItem(item) {\n addIcon(item, attrValue(item, 'icon'));\n addIcon(item, attrValue(item.children(ICON_SELECTOR), 'icon'));\n }\n function enhanceLinkItem(item) {\n var parent = item.parent(), itemAndDetailButtons = item.add(parent.children(kendo.roleSelector('detailbutton'))), otherNodes = parent.contents().not(itemAndDetailButtons).not(whitespace);\n if (otherNodes.length) {\n return;\n }\n item.addClass('km-listview-link').attr(kendo.attr('role'), 'listview-link');\n addIcon(item, attrValue(parent, 'icon'));\n addIcon(item, attrValue(item, 'icon'));\n }\n function enhanceCheckBoxItem(label) {\n if (!label[0].querySelector('input[type=checkbox],input[type=radio]')) {\n return;\n }\n var item = label.parent();\n if (item.contents().not(label).not(function () {\n return this.nodeType == 3;\n })[0]) {\n return;\n }\n label.addClass('km-listview-label');\n label.children('[type=checkbox],[type=radio]').addClass('km-widget km-icon km-check');\n }\n function putAt(element, top) {\n $(element).css('transform', 'translate3d(0px, ' + top + 'px, 0px)');\n }\n var HeaderFixer = kendo.Class.extend({\n init: function (listView) {\n var scroller = listView.scroller();\n if (!scroller) {\n return;\n }\n this.options = listView.options;\n this.element = listView.element;\n this.scroller = listView.scroller();\n this._shouldFixHeaders();\n var headerFixer = this;\n var cacheHeaders = function () {\n headerFixer._cacheHeaders();\n };\n listView.bind('resize', cacheHeaders);\n listView.bind(STYLED, cacheHeaders);\n listView.bind(DATABOUND, cacheHeaders);\n this._scrollHandler = function (e) {\n headerFixer._fixHeader(e);\n };\n scroller.bind('scroll', this._scrollHandler);\n },\n destroy: function () {\n var that = this;\n if (that.scroller) {\n that.scroller.unbind('scroll', that._scrollHandler);\n }\n },\n _fixHeader: function (e) {\n if (!this.fixedHeaders) {\n return;\n }\n var i = 0, scroller = this.scroller, headers = this.headers, scrollTop = e.scrollTop, headerPair, offset, header;\n do {\n headerPair = headers[i++];\n if (!headerPair) {\n header = $('
    ');\n break;\n }\n offset = headerPair.offset;\n header = headerPair.header;\n } while (offset + 1 > scrollTop);\n if (this.currentHeader != i) {\n scroller.fixedContainer.html(header.clone());\n this.currentHeader = i;\n }\n },\n _shouldFixHeaders: function () {\n this.fixedHeaders = this.options.type === 'group' && this.options.fixedHeaders;\n },\n _cacheHeaders: function () {\n this._shouldFixHeaders();\n if (!this.fixedHeaders) {\n return;\n }\n var headers = [], offset = this.scroller.scrollTop;\n this.element.find('.' + GROUP_CLASS).each(function (_, header) {\n header = $(header);\n headers.unshift({\n offset: header.position().top + offset,\n header: header\n });\n });\n this.headers = headers;\n this._fixHeader({ scrollTop: offset });\n }\n });\n var DEFAULT_PULL_PARAMETERS = function () {\n return { page: 1 };\n };\n var RefreshHandler = kendo.Class.extend({\n init: function (listView) {\n var handler = this, options = listView.options, scroller = listView.scroller(), pullParameters = options.pullParameters || DEFAULT_PULL_PARAMETERS;\n this.listView = listView;\n this.scroller = scroller;\n listView.bind('_dataSource', function (e) {\n handler.setDataSource(e.dataSource);\n });\n scroller.setOptions({\n pullToRefresh: true,\n pull: function () {\n if (!handler._pulled) {\n handler._pulled = true;\n handler.dataSource.read(pullParameters.call(listView, handler._first));\n }\n },\n messages: {\n pullTemplate: options.messages.pullTemplate,\n releaseTemplate: options.messages.releaseTemplate,\n refreshTemplate: options.messages.refreshTemplate\n }\n });\n },\n setDataSource: function (dataSource) {\n var handler = this;\n this._first = dataSource.view()[0];\n this.dataSource = dataSource;\n dataSource.bind('change', function () {\n handler._change();\n });\n dataSource.bind('error', function () {\n handler._change();\n });\n },\n _change: function () {\n var scroller = this.scroller, dataSource = this.dataSource;\n if (this._pulled) {\n scroller.pullHandled();\n }\n if (this._pulled || !this._first) {\n var view = dataSource.view();\n if (view[0]) {\n this._first = view[0];\n }\n }\n this._pulled = false;\n }\n });\n var VirtualList = kendo.Observable.extend({\n init: function (options) {\n var list = this;\n kendo.Observable.fn.init.call(list);\n list.buffer = options.buffer;\n list.height = options.height;\n list.item = options.item;\n list.items = [];\n list.footer = options.footer;\n list.buffer.bind('reset', function () {\n list.refresh();\n });\n },\n refresh: function () {\n var buffer = this.buffer, items = this.items, endReached = false;\n while (items.length) {\n items.pop().destroy();\n }\n this.offset = buffer.offset;\n var itemConstructor = this.item, prevItem, item;\n for (var idx = 0; idx < buffer.viewSize; idx++) {\n if (idx === buffer.total()) {\n endReached = true;\n break;\n }\n item = itemConstructor(this.content(this.offset + items.length));\n item.below(prevItem);\n prevItem = item;\n items.push(item);\n }\n this.itemCount = items.length;\n this.trigger('reset');\n this._resize();\n if (endReached) {\n this.trigger('endReached');\n }\n },\n totalHeight: function () {\n if (!this.items[0]) {\n return 0;\n }\n var list = this, items = list.items, top = items[0].top, bottom = items[items.length - 1].bottom, averageItemHeight = (bottom - top) / list.itemCount, remainingItemsCount = list.buffer.length - list.offset - list.itemCount;\n return (this.footer ? this.footer.height : 0) + bottom + remainingItemsCount * averageItemHeight;\n },\n batchUpdate: function (top) {\n var height = this.height(), items = this.items, item, initialOffset = this.offset;\n if (!items[0]) {\n return;\n }\n if (this.lastDirection) {\n while (items[items.length - 1].bottom > top + height * 2) {\n if (this.offset === 0) {\n break;\n }\n this.offset--;\n item = items.pop();\n item.update(this.content(this.offset));\n item.above(items[0]);\n items.unshift(item);\n }\n } else {\n while (items[0].top < top - height) {\n var nextIndex = this.offset + this.itemCount;\n if (nextIndex === this.buffer.total()) {\n this.trigger('endReached');\n break;\n }\n if (nextIndex === this.buffer.length) {\n break;\n }\n item = items.shift();\n item.update(this.content(this.offset + this.itemCount));\n item.below(items[items.length - 1]);\n items.push(item);\n this.offset++;\n }\n }\n if (initialOffset !== this.offset) {\n this._resize();\n }\n },\n update: function (top) {\n var list = this, items = this.items, item, firstItem, lastItem, height = this.height(), itemCount = this.itemCount, padding = height / 2, up = (this.lastTop || 0) > top, topBorder = top - padding, bottomBorder = top + height + padding;\n if (!items[0]) {\n return;\n }\n this.lastTop = top;\n this.lastDirection = up;\n if (up) {\n if (items[0].top > topBorder && items[items.length - 1].bottom > bottomBorder + padding && this.offset > 0) {\n this.offset--;\n item = items.pop();\n firstItem = items[0];\n item.update(this.content(this.offset));\n items.unshift(item);\n item.above(firstItem);\n list._resize();\n }\n } else {\n if (items[items.length - 1].bottom < bottomBorder && items[0].top < topBorder - padding) {\n var nextIndex = this.offset + itemCount;\n if (nextIndex === this.buffer.total()) {\n this.trigger('endReached');\n } else if (nextIndex !== this.buffer.length) {\n item = items.shift();\n lastItem = items[items.length - 1];\n items.push(item);\n item.update(this.content(this.offset + this.itemCount));\n list.offset++;\n item.below(lastItem);\n list._resize();\n }\n }\n }\n },\n content: function (index) {\n return this.buffer.at(index);\n },\n destroy: function () {\n this.unbind();\n },\n _resize: function () {\n var items = this.items, top = 0, bottom = 0, firstItem = items[0], lastItem = items[items.length - 1];\n if (firstItem) {\n top = firstItem.top;\n bottom = lastItem.bottom;\n }\n this.trigger('resize', {\n top: top,\n bottom: bottom\n });\n if (this.footer) {\n this.footer.below(lastItem);\n }\n }\n });\n kendo.mobile.ui.VirtualList = VirtualList;\n var VirtualListViewItem = kendo.Class.extend({\n init: function (listView, dataItem) {\n var element = listView.append([dataItem], true)[0], height = element.offsetHeight;\n $.extend(this, {\n top: 0,\n element: element,\n listView: listView,\n height: height,\n bottom: height\n });\n },\n update: function (dataItem) {\n this.element = this.listView.setDataItem(this.element, dataItem);\n },\n above: function (item) {\n if (item) {\n this.height = this.element.offsetHeight;\n this.top = item.top - this.height;\n this.bottom = item.top;\n putAt(this.element, this.top);\n }\n },\n below: function (item) {\n if (item) {\n this.height = this.element.offsetHeight;\n this.top = item.bottom;\n this.bottom = this.top + this.height;\n putAt(this.element, this.top);\n }\n },\n destroy: function () {\n kendo.destroy(this.element);\n $(this.element).remove();\n }\n });\n var LOAD_ICON = '
    ';\n var VirtualListViewLoadingIndicator = kendo.Class.extend({\n init: function (listView) {\n this.element = $('
  • ').appendTo(listView.element);\n this._loadIcon = $(LOAD_ICON).appendTo(this.element);\n },\n enable: function () {\n this.element.show();\n this.height = outerHeight(this.element, true);\n },\n disable: function () {\n this.element.hide();\n this.height = 0;\n },\n below: function (item) {\n if (item) {\n this.top = item.bottom;\n this.bottom = this.height + this.top;\n putAt(this.element, this.top);\n }\n }\n });\n var VirtualListViewPressToLoadMore = VirtualListViewLoadingIndicator.extend({\n init: function (listView, buffer) {\n this._loadIcon = $(LOAD_ICON).hide();\n this._loadButton = $('' + listView.options.messages.loadMoreText + '').hide();\n this.element = $('
  • ').append(this._loadIcon).append(this._loadButton).appendTo(listView.element);\n var loadMore = this;\n this._loadButton.kendoMobileButton().data('kendoMobileButton').bind('click', function () {\n loadMore._hideShowButton();\n buffer.next();\n });\n buffer.bind('resize', function () {\n loadMore._showLoadButton();\n });\n this.height = outerHeight(this.element, true);\n this.disable();\n },\n _hideShowButton: function () {\n this._loadButton.hide();\n this.element.addClass('km-scroller-refresh');\n this._loadIcon.css('display', 'block');\n },\n _showLoadButton: function () {\n this._loadButton.show();\n this.element.removeClass('km-scroller-refresh');\n this._loadIcon.hide();\n }\n });\n var VirtualListViewItemBinder = kendo.Class.extend({\n init: function (listView) {\n var binder = this;\n this.chromeHeight = outerHeight(listView.wrapper.children().not(listView.element));\n this.listView = listView;\n this.scroller = listView.scroller();\n this.options = listView.options;\n listView.bind('_dataSource', function (e) {\n binder.setDataSource(e.dataSource, e.empty);\n });\n listView.bind('resize', function () {\n if (!binder.list.items.length) {\n return;\n }\n binder.scroller.reset();\n binder.buffer.range(0);\n binder.list.refresh();\n });\n this.scroller.makeVirtual();\n this._scroll = function (e) {\n binder.list.update(e.scrollTop);\n };\n this.scroller.bind('scroll', this._scroll);\n this._scrollEnd = function (e) {\n binder.list.batchUpdate(e.scrollTop);\n };\n this.scroller.bind('scrollEnd', this._scrollEnd);\n },\n destroy: function () {\n this.list.unbind();\n this.buffer.unbind();\n this.scroller.unbind('scroll', this._scroll);\n this.scroller.unbind('scrollEnd', this._scrollEnd);\n },\n setDataSource: function (dataSource, empty) {\n var binder = this, options = this.options, listView = this.listView, scroller = listView.scroller(), pressToLoadMore = options.loadMore, pageSize, buffer, footer;\n this.dataSource = dataSource;\n pageSize = dataSource.pageSize() || options.virtualViewSize;\n if (!pageSize && !empty) {\n throw new Error('the DataSource does not have page size configured. Page Size setting is mandatory for the mobile listview virtual scrolling to work as expected.');\n }\n if (this.buffer) {\n this.buffer.destroy();\n }\n buffer = new kendo.data.Buffer(dataSource, Math.floor(pageSize / 2), pressToLoadMore);\n if (pressToLoadMore) {\n footer = new VirtualListViewPressToLoadMore(listView, buffer);\n } else {\n footer = new VirtualListViewLoadingIndicator(listView);\n }\n if (this.list) {\n this.list.destroy();\n }\n var list = new VirtualList({\n buffer: buffer,\n footer: footer,\n item: function (dataItem) {\n return new VirtualListViewItem(listView, dataItem);\n },\n height: function () {\n return scroller.height();\n }\n });\n list.bind('resize', function () {\n binder.updateScrollerSize();\n listView.updateSize();\n });\n list.bind('reset', function () {\n binder.footer.enable();\n });\n list.bind('endReached', function () {\n footer.disable();\n binder.updateScrollerSize();\n });\n buffer.bind('expand', function () {\n list.lastDirection = false;\n list.batchUpdate(scroller.scrollTop);\n });\n $.extend(this, {\n buffer: buffer,\n scroller: scroller,\n list: list,\n footer: footer\n });\n },\n updateScrollerSize: function () {\n this.scroller.virtualSize(0, this.list.totalHeight() + this.chromeHeight);\n },\n refresh: function () {\n this.list.refresh();\n },\n reset: function () {\n this.buffer.range(0);\n this.list.refresh();\n }\n });\n var ListViewItemBinder = kendo.Class.extend({\n init: function (listView) {\n var binder = this;\n this.listView = listView;\n this.options = listView.options;\n var itemBinder = this;\n this._refreshHandler = function (e) {\n itemBinder.refresh(e);\n };\n this._progressHandler = function () {\n listView.showLoading();\n };\n listView.bind('_dataSource', function (e) {\n binder.setDataSource(e.dataSource);\n });\n },\n destroy: function () {\n this._unbindDataSource();\n },\n reset: function () {\n },\n refresh: function (e) {\n var action = e && e.action, dataItems = e && e.items, listView = this.listView, dataSource = this.dataSource, prependOnRefresh = this.options.appendOnRefresh, view = dataSource.view(), groups = dataSource.group(), groupedMode = groups && groups[0], item;\n if (action === 'itemchange') {\n if (!listView._hasBindingTarget()) {\n item = listView.findByDataItem(dataItems)[0];\n if (item) {\n listView.setDataItem(item, dataItems[0]);\n }\n }\n return;\n }\n var removedItems, addedItems, addedDataItems;\n var adding = action === 'add' && !groupedMode || prependOnRefresh && !listView._filter;\n var removing = action === 'remove' && !groupedMode;\n if (adding) {\n removedItems = [];\n } else if (removing) {\n removedItems = listView.findByDataItem(dataItems);\n }\n if (listView.trigger(DATABINDING, {\n action: action || 'rebind',\n items: dataItems,\n removedItems: removedItems,\n index: e && e.index\n })) {\n if (this._shouldShowLoading()) {\n listView.hideLoading();\n }\n return;\n }\n if (action === 'add' && !groupedMode) {\n var index = view.indexOf(dataItems[0]);\n if (index > -1) {\n addedItems = listView.insertAt(dataItems, index);\n addedDataItems = dataItems;\n }\n } else if (action === 'remove' && !groupedMode) {\n addedItems = [];\n listView.remove(dataItems);\n } else if (groupedMode) {\n listView.replaceGrouped(view);\n } else if (prependOnRefresh && !listView._filter) {\n addedItems = listView.prepend(view);\n addedDataItems = view;\n } else {\n listView.replace(view);\n }\n if (this._shouldShowLoading()) {\n listView.hideLoading();\n }\n listView.trigger(DATABOUND, {\n ns: ui,\n addedItems: addedItems,\n addedDataItems: addedDataItems\n });\n },\n setDataSource: function (dataSource) {\n if (this.dataSource) {\n this._unbindDataSource();\n }\n this.dataSource = dataSource;\n dataSource.bind(CHANGE, this._refreshHandler);\n if (this._shouldShowLoading()) {\n this.dataSource.bind(PROGRESS, this._progressHandler);\n }\n },\n _unbindDataSource: function () {\n this.dataSource.unbind(CHANGE, this._refreshHandler).unbind(PROGRESS, this._progressHandler);\n },\n _shouldShowLoading: function () {\n var options = this.options;\n return !options.pullToRefresh && !options.loadMore && !options.endlessScroll;\n }\n });\n var ListViewFilter = kendo.Class.extend({\n init: function (listView) {\n var filter = this, filterable = listView.options.filterable, events = 'change paste', that = this;\n this.listView = listView;\n this.options = filterable;\n listView.element.before(SEARCH_TEMPLATE({ placeholder: filterable.placeholder || 'Search...' }));\n if (filterable.autoFilter !== false) {\n events += ' keyup';\n }\n this.element = listView.wrapper.find('.km-search-form');\n this.searchInput = listView.wrapper.find('input[type=search]').closest('form').on('submit' + NS, function (e) {\n e.preventDefault();\n }).end().on('focus' + NS, function () {\n filter._oldFilter = filter.searchInput.val();\n }).on(events.split(' ').join(NS + ' ') + NS, proxy(this._filterChange, this));\n this.clearButton = listView.wrapper.find('.km-filter-reset').on(CLICK, proxy(this, '_clearFilter')).hide();\n this._dataSourceChange = $.proxy(this._refreshInput, this);\n listView.bind('_dataSource', function (e) {\n e.dataSource.bind('change', that._dataSourceChange);\n });\n },\n _refreshInput: function () {\n var appliedFilters = this.listView.dataSource.filter();\n var searchInput = this.listView._filter.searchInput;\n if (!appliedFilters || appliedFilters.filters[0].field !== this.listView.options.filterable.field) {\n searchInput.val('');\n } else {\n searchInput.val(appliedFilters.filters[0].value);\n }\n },\n _search: function (expr) {\n this._filter = true;\n this.clearButton[expr ? 'show' : 'hide']();\n this.listView.dataSource.filter(expr);\n },\n _filterChange: function (e) {\n var filter = this;\n if (e.type == 'paste' && this.options.autoFilter !== false) {\n setTimeout(function () {\n filter._applyFilter();\n }, 1);\n } else {\n this._applyFilter();\n }\n },\n _applyFilter: function () {\n var options = this.options, value = this.searchInput.val(), expr = value.length ? {\n field: options.field,\n operator: options.operator || 'startswith',\n ignoreCase: options.ignoreCase,\n value: value\n } : null;\n if (value === this._oldFilter) {\n return;\n }\n this._oldFilter = value;\n this._search(expr);\n },\n _clearFilter: function (e) {\n this.searchInput.val('');\n this._search(null);\n e.preventDefault();\n }\n });\n var ListView = Widget.extend({\n init: function (element, options) {\n var listView = this;\n Widget.fn.init.call(this, element, options);\n element = this.element;\n options = this.options;\n if (options.scrollTreshold) {\n options.scrollThreshold = options.scrollTreshold;\n }\n element.on('down', HIGHLIGHT_SELECTOR, '_highlight').on('move up cancel', HIGHLIGHT_SELECTOR, '_dim');\n this._userEvents = new kendo.UserEvents(element, {\n fastTap: true,\n filter: ITEM_SELECTOR,\n allowSelection: true,\n tap: function (e) {\n listView._click(e);\n }\n });\n element.css('-ms-touch-action', 'auto');\n element.wrap(WRAPPER);\n this.wrapper = this.element.parent();\n this._headerFixer = new HeaderFixer(this);\n this._itemsCache = {};\n this._templates();\n this.virtual = options.endlessScroll || options.loadMore;\n this._style();\n if (this.options.$angular && (this.virtual || this.options.pullToRefresh)) {\n setTimeout($.proxy(this, '_start'));\n } else {\n this._start();\n }\n },\n _start: function () {\n var options = this.options;\n if (this.options.filterable) {\n this._filter = new ListViewFilter(this);\n }\n if (this.virtual) {\n this._itemBinder = new VirtualListViewItemBinder(this);\n } else {\n this._itemBinder = new ListViewItemBinder(this);\n }\n if (this.options.pullToRefresh) {\n this._pullToRefreshHandler = new RefreshHandler(this);\n }\n this.setDataSource(options.dataSource);\n this._enhanceItems(this.items());\n kendo.notify(this, ui);\n },\n events: [\n CLICK,\n DATABINDING,\n DATABOUND,\n ITEM_CHANGE\n ],\n options: {\n name: 'ListView',\n style: '',\n type: 'flat',\n autoBind: true,\n fixedHeaders: false,\n template: '#:data#',\n headerTemplate: '#:value#',\n appendOnRefresh: false,\n loadMore: false,\n endlessScroll: false,\n scrollThreshold: 30,\n pullToRefresh: false,\n messages: {\n loadMoreText: 'Press to load more',\n pullTemplate: 'Pull to refresh',\n releaseTemplate: 'Release to refresh',\n refreshTemplate: 'Refreshing'\n },\n pullOffset: 140,\n filterable: false,\n virtualViewSize: null\n },\n refresh: function () {\n this._itemBinder.refresh();\n },\n reset: function () {\n this._itemBinder.reset();\n },\n setDataSource: function (dataSource) {\n var emptyDataSource = !dataSource;\n this.dataSource = DataSource.create(dataSource);\n this.trigger('_dataSource', {\n dataSource: this.dataSource,\n empty: emptyDataSource\n });\n if (this.options.autoBind && !emptyDataSource) {\n this.items().remove();\n this.dataSource.fetch();\n }\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n kendo.destroy(this.element);\n this._userEvents.destroy();\n if (this._itemBinder) {\n this._itemBinder.destroy();\n }\n if (this._headerFixer) {\n this._headerFixer.destroy();\n }\n this.element.unwrap();\n delete this.element;\n delete this.wrapper;\n delete this._userEvents;\n },\n items: function () {\n if (this.options.type === 'group') {\n return this.element.find('.km-list').children();\n } else {\n return this.element.children().not('.km-load-more');\n }\n },\n scroller: function () {\n if (!this._scrollerInstance) {\n this._scrollerInstance = this.element.closest('.km-scroll-wrapper').data('kendoMobileScroller');\n }\n return this._scrollerInstance;\n },\n showLoading: function () {\n var view = this.view();\n if (view && view.loader) {\n view.loader.show();\n }\n },\n hideLoading: function () {\n var view = this.view();\n if (view && view.loader) {\n view.loader.hide();\n }\n },\n insertAt: function (dataItems, index, triggerChange) {\n var listView = this;\n return listView._renderItems(dataItems, function (items) {\n if (index === 0) {\n listView.element.prepend(items);\n } else if (index === -1) {\n listView.element.append(items);\n } else {\n listView.items().eq(index - 1).after(items);\n }\n if (triggerChange) {\n for (var i = 0; i < items.length; i++) {\n listView.trigger(ITEM_CHANGE, {\n item: items.eq(i),\n data: dataItems[i],\n ns: ui\n });\n }\n }\n });\n },\n append: function (dataItems, triggerChange) {\n return this.insertAt(dataItems, -1, triggerChange);\n },\n prepend: function (dataItems, triggerChange) {\n return this.insertAt(dataItems, 0, triggerChange);\n },\n replace: function (dataItems) {\n this.options.type = 'flat';\n this._angularItems('cleanup');\n kendo.destroy(this.element.children());\n this.element.empty();\n this._userEvents.cancel();\n this._style();\n return this.insertAt(dataItems, 0);\n },\n replaceGrouped: function (groups) {\n this.options.type = 'group';\n this._angularItems('cleanup');\n this.element.empty();\n var items = $(kendo.render(this.groupTemplate, groups));\n this._enhanceItems(items.children('ul').children('li'));\n this.element.append(items);\n mobile.init(items);\n this._style();\n this._angularItems('compile');\n },\n remove: function (dataItems) {\n var items = this.findByDataItem(dataItems);\n this.angular('cleanup', function () {\n return { elements: items };\n });\n kendo.destroy(items);\n items.remove();\n },\n findByDataItem: function (dataItems) {\n var selectors = [];\n for (var idx = 0, length = dataItems.length; idx < length; idx++) {\n selectors[idx] = '[data-' + kendo.ns + 'uid=' + dataItems[idx].uid + ']';\n }\n return this.element.find(selectors.join(','));\n },\n setDataItem: function (item, dataItem) {\n var listView = this, replaceItem = function (items) {\n var newItem = $(items[0]);\n kendo.destroy(item);\n listView.angular('cleanup', function () {\n return { elements: [$(item)] };\n });\n $(item).replaceWith(newItem);\n listView.trigger(ITEM_CHANGE, {\n item: newItem,\n data: dataItem,\n ns: ui\n });\n };\n return this._renderItems([dataItem], replaceItem)[0];\n },\n updateSize: function () {\n this._size = this.getSize();\n },\n _renderItems: function (dataItems, callback) {\n var items = $(kendo.render(this.template, dataItems));\n callback(items);\n this.angular('compile', function () {\n return {\n elements: items,\n data: dataItems.map(function (data) {\n return { dataItem: data };\n })\n };\n });\n mobile.init(items);\n this._enhanceItems(items);\n return items;\n },\n _dim: function (e) {\n this._toggle(e, false);\n },\n _highlight: function (e) {\n this._toggle(e, true);\n },\n _toggle: function (e, highlight) {\n if (e.which > 1) {\n return;\n }\n var clicked = $(e.currentTarget), item = clicked.parent(), role = attrValue(clicked, 'role') || '', plainItem = !role.match(buttonRegExp), prevented = e.isDefaultPrevented();\n if (plainItem) {\n item.toggleClass(ACTIVE_CLASS, highlight && !prevented);\n }\n },\n _templates: function () {\n var template = this.options.template, headerTemplate = this.options.headerTemplate, dataIDAttribute = ' data-uid=\"#=arguments[0].uid || \"\"#\"', templateProxy = {}, groupTemplateProxy = {};\n if (typeof template === FUNCTION) {\n templateProxy.template = template;\n template = '#=this.template(data)#';\n }\n this.template = proxy(kendo.template('' + template + ''), templateProxy);\n groupTemplateProxy.template = this.template;\n if (typeof headerTemplate === FUNCTION) {\n groupTemplateProxy._headerTemplate = headerTemplate;\n headerTemplate = '#=this._headerTemplate(data)#';\n }\n groupTemplateProxy.headerTemplate = kendo.template(headerTemplate);\n this.groupTemplate = proxy(GROUP_TEMPLATE, groupTemplateProxy);\n },\n _click: function (e) {\n if (e.event.which > 1 || e.event.isDefaultPrevented()) {\n return;\n }\n var dataItem, item = e.target, target = $(e.event.target), buttonElement = target.closest(kendo.roleSelector('button', 'detailbutton', 'backbutton')), button = kendo.widgetInstance(buttonElement, ui), id = item.attr(kendo.attr('uid'));\n if (id) {\n dataItem = this.dataSource.getByUid(id);\n }\n if (this.trigger(CLICK, {\n target: target,\n item: item,\n dataItem: dataItem,\n button: button\n })) {\n e.preventDefault();\n }\n },\n _styleGroups: function () {\n var rootItems = this.element.children();\n rootItems.children('ul').addClass('km-list');\n rootItems.each(function () {\n var li = $(this), groupHeader = li.contents().first();\n li.addClass('km-group-container');\n if (!groupHeader.is('ul') && !groupHeader.is('div.' + GROUP_CLASS)) {\n groupHeader.wrap(GROUP_WRAPPER);\n }\n });\n },\n _style: function () {\n var options = this.options, grouped = options.type === 'group', element = this.element, inset = options.style === 'inset';\n element.addClass('km-listview').toggleClass('km-list', !grouped).toggleClass('km-virtual-list', this.virtual).toggleClass('km-listinset', !grouped && inset).toggleClass('km-listgroup', grouped && !inset).toggleClass('km-listgroupinset', grouped && inset);\n if (!element.parents('.km-listview')[0]) {\n element.closest('.km-content').toggleClass('km-insetcontent', inset);\n }\n if (grouped) {\n this._styleGroups();\n }\n this.trigger(STYLED);\n },\n _enhanceItems: function (items) {\n items.each(function () {\n var item = $(this), child, enhanced = false;\n item.children().each(function () {\n child = $(this);\n if (child.is('a')) {\n enhanceLinkItem(child);\n enhanced = true;\n } else if (child.is('label')) {\n enhanceCheckBoxItem(child);\n enhanced = true;\n }\n });\n if (!enhanced) {\n enhanceItem(item);\n }\n });\n }\n });\n ui.plugin(ListView);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.navbar', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.navbar',\n name: 'NavBar',\n category: 'mobile',\n description: 'The Kendo mobile NavBar widget is used inside a mobile View or Layout Header element to display an application navigation bar.',\n depends: ['core']\n };\n (function ($, undefined) {\n var kendo = window.kendo, mobile = kendo.mobile, ui = mobile.ui, Widget = ui.Widget;\n function createContainer(align, element) {\n var items = element.find('[' + kendo.attr('align') + '=' + align + ']');\n if (items[0]) {\n return $('
    ').append(items).prependTo(element);\n }\n }\n function toggleTitle(centerElement) {\n var siblings = centerElement.siblings(), noTitle = !!centerElement.children('ul')[0], showTitle = !!siblings[0] && $.trim(centerElement.text()) === '', android = !!(kendo.mobile.application && kendo.mobile.application.element.is('.km-android'));\n centerElement.prevAll().toggleClass('km-absolute', noTitle);\n centerElement.toggleClass('km-show-title', showTitle);\n centerElement.toggleClass('km-fill-title', showTitle && !$.trim(centerElement.html()));\n centerElement.toggleClass('km-no-title', noTitle);\n centerElement.toggleClass('km-hide-title', android && !siblings.children().is(':visible'));\n }\n var NavBar = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n element = that.element;\n that.container().bind('show', $.proxy(this, 'refresh'));\n element.addClass('km-navbar').wrapInner($('
    '));\n that.leftElement = createContainer('left', element);\n that.rightElement = createContainer('right', element);\n that.centerElement = element.find('.km-view-title');\n },\n options: { name: 'NavBar' },\n title: function (value) {\n this.element.find(kendo.roleSelector('view-title')).text(value);\n toggleTitle(this.centerElement);\n },\n refresh: function (e) {\n var view = e.view;\n this.title(view.options.title);\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n kendo.destroy(this.element);\n }\n });\n ui.plugin(NavBar);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.scrollview', [\n 'kendo.fx',\n 'kendo.data',\n 'kendo.draganddrop'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.scrollview',\n name: 'ScrollView',\n category: 'mobile',\n description: 'The Kendo Mobile ScrollView widget is used to scroll content wider than the device screen.',\n depends: [\n 'fx',\n 'data',\n 'draganddrop'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, mobile = kendo.mobile, ui = mobile.ui, proxy = $.proxy, Transition = kendo.effects.Transition, Pane = kendo.ui.Pane, PaneDimensions = kendo.ui.PaneDimensions, Widget = ui.DataBoundWidget, DataSource = kendo.data.DataSource, Buffer = kendo.data.Buffer, BatchBuffer = kendo.data.BatchBuffer, math = Math, abs = math.abs, ceil = math.ceil, round = math.round, max = math.max, min = math.min, floor = math.floor, CHANGE = 'change', CHANGING = 'changing', REFRESH = 'refresh', CURRENT_PAGE_CLASS = 'current-page', VIRTUAL_PAGE_CLASS = 'virtual-page', FUNCTION = 'function', ITEM_CHANGE = 'itemChange', CLEANUP = 'cleanup', VIRTUAL_PAGE_COUNT = 3, LEFT_PAGE = -1, CETER_PAGE = 0, RIGHT_PAGE = 1, LEFT_SWIPE = -1, NUDGE = 0, RIGHT_SWIPE = 1;\n function className(name) {\n return 'k-' + name + ' km-' + name;\n }\n var Pager = kendo.Class.extend({\n init: function (scrollView) {\n var that = this, element = $('
      ');\n scrollView.element.append(element);\n this._changeProxy = proxy(that, '_change');\n this._refreshProxy = proxy(that, '_refresh');\n scrollView.bind(CHANGE, this._changeProxy);\n scrollView.bind(REFRESH, this._refreshProxy);\n $.extend(that, {\n element: element,\n scrollView: scrollView\n });\n },\n items: function () {\n return this.element.children();\n },\n _refresh: function (e) {\n var pageHTML = '';\n for (var idx = 0; idx < e.pageCount; idx++) {\n pageHTML += '
    1. ';\n }\n this.element.html(pageHTML);\n this.items().eq(e.page).addClass(className(CURRENT_PAGE_CLASS));\n },\n _change: function (e) {\n this.items().removeClass(className(CURRENT_PAGE_CLASS)).eq(e.page).addClass(className(CURRENT_PAGE_CLASS));\n },\n destroy: function () {\n this.scrollView.unbind(CHANGE, this._changeProxy);\n this.scrollView.unbind(REFRESH, this._refreshProxy);\n this.element.remove();\n }\n });\n kendo.mobile.ui.ScrollViewPager = Pager;\n var TRANSITION_END = 'transitionEnd', DRAG_START = 'dragStart', DRAG_END = 'dragEnd';\n var ElasticPane = kendo.Observable.extend({\n init: function (element, options) {\n var that = this;\n kendo.Observable.fn.init.call(this);\n this.element = element;\n this.container = element.parent();\n var movable, transition, userEvents, dimensions, dimension, pane;\n movable = new kendo.ui.Movable(that.element);\n transition = new Transition({\n axis: 'x',\n movable: movable,\n onEnd: function () {\n that.trigger(TRANSITION_END);\n }\n });\n userEvents = new kendo.UserEvents(element, {\n fastTap: true,\n start: function (e) {\n if (abs(e.x.velocity) * 2 >= abs(e.y.velocity)) {\n userEvents.capture();\n } else {\n userEvents.cancel();\n }\n that.trigger(DRAG_START, e);\n transition.cancel();\n },\n allowSelection: true,\n end: function (e) {\n that.trigger(DRAG_END, e);\n }\n });\n dimensions = new PaneDimensions({\n element: that.element,\n container: that.container\n });\n dimension = dimensions.x;\n dimension.bind(CHANGE, function () {\n that.trigger(CHANGE);\n });\n pane = new Pane({\n dimensions: dimensions,\n userEvents: userEvents,\n movable: movable,\n elastic: true\n });\n $.extend(that, {\n duration: options && options.duration || 1,\n movable: movable,\n transition: transition,\n userEvents: userEvents,\n dimensions: dimensions,\n dimension: dimension,\n pane: pane\n });\n this.bind([\n TRANSITION_END,\n DRAG_START,\n DRAG_END,\n CHANGE\n ], options);\n },\n size: function () {\n return {\n width: this.dimensions.x.getSize(),\n height: this.dimensions.y.getSize()\n };\n },\n total: function () {\n return this.dimension.getTotal();\n },\n offset: function () {\n return -this.movable.x;\n },\n updateDimension: function () {\n this.dimension.update(true);\n },\n refresh: function () {\n this.dimensions.refresh();\n },\n moveTo: function (offset) {\n this.movable.moveAxis('x', -offset);\n },\n transitionTo: function (offset, ease, instant) {\n if (instant) {\n this.moveTo(-offset);\n } else {\n this.transition.moveTo({\n location: offset,\n duration: this.duration,\n ease: ease\n });\n }\n }\n });\n kendo.mobile.ui.ScrollViewElasticPane = ElasticPane;\n var ScrollViewContent = kendo.Observable.extend({\n init: function (element, pane, options) {\n var that = this;\n kendo.Observable.fn.init.call(this);\n that.element = element;\n that.pane = pane;\n that._getPages();\n this.page = 0;\n this.pageSize = options.pageSize || 1;\n this.contentHeight = options.contentHeight;\n this.enablePager = options.enablePager;\n this.pagerOverlay = options.pagerOverlay;\n },\n scrollTo: function (page, instant) {\n this.page = page;\n this.pane.transitionTo(-page * this.pane.size().width, Transition.easeOutExpo, instant);\n },\n paneMoved: function (swipeType, bounce, callback, instant) {\n var that = this, pane = that.pane, width = pane.size().width * that.pageSize, approx = round, ease = bounce ? Transition.easeOutBack : Transition.easeOutExpo, snap, nextPage;\n if (swipeType === LEFT_SWIPE) {\n approx = ceil;\n } else if (swipeType === RIGHT_SWIPE) {\n approx = floor;\n }\n nextPage = approx(pane.offset() / width);\n snap = max(that.minSnap, min(-nextPage * width, that.maxSnap));\n if (nextPage != that.page) {\n if (callback && callback({\n currentPage: that.page,\n nextPage: nextPage\n })) {\n snap = -that.page * pane.size().width;\n }\n }\n pane.transitionTo(snap, ease, instant);\n },\n updatePage: function () {\n var pane = this.pane, page = round(pane.offset() / pane.size().width);\n if (page != this.page) {\n this.page = page;\n return true;\n }\n return false;\n },\n forcePageUpdate: function () {\n return this.updatePage();\n },\n resizeTo: function (size) {\n var pane = this.pane, width = size.width;\n this.pageElements.width(width);\n if (this.contentHeight === '100%') {\n var containerHeight = this.element.parent().height();\n if (this.enablePager === true) {\n var pager = this.element.parent().find('ol.km-pages');\n if (!this.pagerOverlay && pager.length) {\n containerHeight -= kendo._outerHeight(pager, true);\n }\n }\n this.element.css('height', containerHeight);\n this.pageElements.css('height', containerHeight);\n }\n pane.updateDimension();\n if (!this._paged) {\n this.page = floor(pane.offset() / width);\n }\n this.scrollTo(this.page, true);\n this.pageCount = ceil(pane.total() / width);\n this.minSnap = -(this.pageCount - 1) * width;\n this.maxSnap = 0;\n },\n _getPages: function () {\n this.pageElements = this.element.find(kendo.roleSelector('page'));\n this._paged = this.pageElements.length > 0;\n }\n });\n kendo.mobile.ui.ScrollViewContent = ScrollViewContent;\n var VirtualScrollViewContent = kendo.Observable.extend({\n init: function (element, pane, options) {\n var that = this;\n kendo.Observable.fn.init.call(this);\n that.element = element;\n that.pane = pane;\n that.options = options;\n that._templates();\n that.page = options.page || 0;\n that.pages = [];\n that._initPages();\n that.resizeTo(that.pane.size());\n that.pane.dimension.forceEnabled();\n },\n setDataSource: function (dataSource) {\n this.dataSource = DataSource.create(dataSource);\n this._buffer();\n this._pendingPageRefresh = false;\n this._pendingWidgetRefresh = false;\n },\n _viewShow: function () {\n var that = this;\n if (that._pendingWidgetRefresh) {\n setTimeout(function () {\n that._resetPages();\n }, 0);\n that._pendingWidgetRefresh = false;\n }\n },\n _buffer: function () {\n var itemsPerPage = this.options.itemsPerPage;\n if (this.buffer) {\n this.buffer.destroy();\n }\n if (itemsPerPage > 1) {\n this.buffer = new BatchBuffer(this.dataSource, itemsPerPage);\n } else {\n this.buffer = new Buffer(this.dataSource, itemsPerPage * 3);\n }\n this._resizeProxy = proxy(this, '_onResize');\n this._resetProxy = proxy(this, '_onReset');\n this._endReachedProxy = proxy(this, '_onEndReached');\n this.buffer.bind({\n 'resize': this._resizeProxy,\n 'reset': this._resetProxy,\n 'endreached': this._endReachedProxy\n });\n },\n _templates: function () {\n var template = this.options.template, emptyTemplate = this.options.emptyTemplate, templateProxy = {}, emptyTemplateProxy = {};\n if (typeof template === FUNCTION) {\n templateProxy.template = template;\n template = '#=this.template(data)#';\n }\n this.template = proxy(kendo.template(template), templateProxy);\n if (typeof emptyTemplate === FUNCTION) {\n emptyTemplateProxy.emptyTemplate = emptyTemplate;\n emptyTemplate = '#=this.emptyTemplate(data)#';\n }\n this.emptyTemplate = proxy(kendo.template(emptyTemplate), emptyTemplateProxy);\n },\n _initPages: function () {\n var pages = this.pages, element = this.element, page;\n for (var i = 0; i < VIRTUAL_PAGE_COUNT; i++) {\n page = new Page(element);\n pages.push(page);\n }\n this.pane.updateDimension();\n },\n resizeTo: function (size) {\n var pages = this.pages, pane = this.pane;\n for (var i = 0; i < pages.length; i++) {\n pages[i].setWidth(size.width);\n }\n if (this.options.contentHeight === 'auto') {\n this.element.css('height', this.pages[1].element.height());\n } else if (this.options.contentHeight === '100%') {\n var containerHeight = this.element.parent().height();\n if (this.options.enablePager === true) {\n var pager = this.element.parent().find('ol.km-pages');\n if (!this.options.pagerOverlay && pager.length) {\n containerHeight -= kendo._outerHeight(pager, true);\n }\n }\n this.element.css('height', containerHeight);\n pages[0].element.css('height', containerHeight);\n pages[1].element.css('height', containerHeight);\n pages[2].element.css('height', containerHeight);\n }\n pane.updateDimension();\n this._repositionPages();\n this.width = size.width;\n },\n scrollTo: function (page) {\n var buffer = this.buffer, dataItem;\n buffer.syncDataSource();\n dataItem = buffer.at(page);\n if (!dataItem) {\n return;\n }\n this._updatePagesContent(page);\n this.page = page;\n },\n paneMoved: function (swipeType, bounce, callback, instant) {\n var that = this, pane = that.pane, width = pane.size().width, offset = pane.offset(), thresholdPassed = Math.abs(offset) >= width / 3, ease = bounce ? kendo.effects.Transition.easeOutBack : kendo.effects.Transition.easeOutExpo, isEndReached = that.page + 2 > that.buffer.total(), nextPage, delta = 0;\n if (swipeType === RIGHT_SWIPE) {\n if (that.page !== 0) {\n delta = -1;\n }\n } else if (swipeType === LEFT_SWIPE && !isEndReached) {\n delta = 1;\n } else if (offset > 0 && (thresholdPassed && !isEndReached)) {\n delta = 1;\n } else if (offset < 0 && thresholdPassed) {\n if (that.page !== 0) {\n delta = -1;\n }\n }\n nextPage = that.page;\n if (delta) {\n nextPage = delta > 0 ? nextPage + 1 : nextPage - 1;\n }\n if (callback && callback({\n currentPage: that.page,\n nextPage: nextPage\n })) {\n delta = 0;\n }\n if (delta === 0) {\n that._cancelMove(ease, instant);\n } else if (delta === -1) {\n that._moveBackward(instant);\n } else if (delta === 1) {\n that._moveForward(instant);\n }\n },\n updatePage: function () {\n var pages = this.pages;\n if (this.pane.offset() === 0) {\n return false;\n }\n if (this.pane.offset() > 0) {\n pages.push(this.pages.shift());\n this.page++;\n this.setPageContent(pages[2], this.page + 1);\n } else {\n pages.unshift(this.pages.pop());\n this.page--;\n this.setPageContent(pages[0], this.page - 1);\n }\n this._repositionPages();\n this._resetMovable();\n return true;\n },\n forcePageUpdate: function () {\n var offset = this.pane.offset(), threshold = this.pane.size().width * 3 / 4;\n if (abs(offset) > threshold) {\n return this.updatePage();\n }\n return false;\n },\n _resetMovable: function () {\n this.pane.moveTo(0);\n },\n _moveForward: function (instant) {\n this.pane.transitionTo(-this.width, kendo.effects.Transition.easeOutExpo, instant);\n },\n _moveBackward: function (instant) {\n this.pane.transitionTo(this.width, kendo.effects.Transition.easeOutExpo, instant);\n },\n _cancelMove: function (ease, instant) {\n this.pane.transitionTo(0, ease, instant);\n },\n _resetPages: function () {\n this.page = this.options.page || 0;\n this._updatePagesContent(this.page);\n this._repositionPages();\n this.trigger('reset');\n },\n _onResize: function () {\n this.pageCount = ceil(this.dataSource.total() / this.options.itemsPerPage);\n if (this._pendingPageRefresh) {\n this._updatePagesContent(this.page);\n this._pendingPageRefresh = false;\n }\n this.trigger('resize');\n },\n _onReset: function () {\n this.pageCount = ceil(this.dataSource.total() / this.options.itemsPerPage);\n this._resetPages();\n },\n _onEndReached: function () {\n this._pendingPageRefresh = true;\n },\n _repositionPages: function () {\n var pages = this.pages;\n pages[0].position(LEFT_PAGE);\n pages[1].position(CETER_PAGE);\n pages[2].position(RIGHT_PAGE);\n },\n _updatePagesContent: function (offset) {\n var pages = this.pages, currentPage = offset || 0;\n this.setPageContent(pages[0], currentPage - 1);\n this.setPageContent(pages[1], currentPage);\n this.setPageContent(pages[2], currentPage + 1);\n },\n setPageContent: function (page, index) {\n var buffer = this.buffer, template = this.template, emptyTemplate = this.emptyTemplate, view = null;\n if (index >= 0) {\n view = buffer.at(index);\n if ($.isArray(view) && !view.length) {\n view = null;\n }\n }\n this.trigger(CLEANUP, { item: page.element });\n if (view !== null) {\n page.content(template(view));\n } else {\n page.content(emptyTemplate({}));\n }\n kendo.mobile.init(page.element);\n this.trigger(ITEM_CHANGE, {\n item: page.element,\n data: view,\n ns: kendo.mobile.ui\n });\n }\n });\n kendo.mobile.ui.VirtualScrollViewContent = VirtualScrollViewContent;\n var Page = kendo.Class.extend({\n init: function (container) {\n this.element = $('
      ');\n this.width = container.width();\n this.element.width(this.width);\n container.append(this.element);\n },\n content: function (theContent) {\n this.element.html(theContent);\n },\n position: function (position) {\n this.element.css('transform', 'translate3d(' + this.width * position + 'px, 0, 0)');\n },\n setWidth: function (width) {\n this.width = width;\n this.element.width(width);\n }\n });\n kendo.mobile.ui.VirtualPage = Page;\n var ScrollView = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n options = that.options;\n element = that.element;\n kendo.stripWhitespace(element[0]);\n element.wrapInner('
      ').addClass('k-widget ' + className('scrollview'));\n if (this.options.enablePager) {\n this.pager = new Pager(this);\n if (this.options.pagerOverlay) {\n element.addClass(className('scrollview-overlay'));\n }\n }\n that.inner = element.children().first();\n that.page = 0;\n that.inner.css('height', options.contentHeight);\n that.pane = new ElasticPane(that.inner, {\n duration: this.options.duration,\n transitionEnd: proxy(this, '_transitionEnd'),\n dragStart: proxy(this, '_dragStart'),\n dragEnd: proxy(this, '_dragEnd'),\n change: proxy(this, REFRESH)\n });\n that.bind('resize', function () {\n that.pane.refresh();\n });\n that.page = options.page;\n var empty = this.inner.children().length === 0;\n var content = empty ? new VirtualScrollViewContent(that.inner, that.pane, options) : new ScrollViewContent(that.inner, that.pane, options);\n content.page = that.page;\n content.bind('reset', function () {\n this._pendingPageRefresh = false;\n that._syncWithContent();\n that.trigger(REFRESH, {\n pageCount: content.pageCount,\n page: content.page\n });\n });\n content.bind('resize', function () {\n that.trigger(REFRESH, {\n pageCount: content.pageCount,\n page: content.page\n });\n });\n content.bind(ITEM_CHANGE, function (e) {\n that.trigger(ITEM_CHANGE, e);\n that.angular('compile', function () {\n return {\n elements: e.item,\n data: [{ dataItem: e.data }]\n };\n });\n });\n content.bind(CLEANUP, function (e) {\n that.angular('cleanup', function () {\n return { elements: e.item };\n });\n });\n that._content = content;\n that.setDataSource(options.dataSource);\n var mobileContainer = that.container();\n if (mobileContainer.nullObject) {\n that.viewInit();\n that.viewShow();\n } else {\n mobileContainer.bind('show', proxy(this, 'viewShow')).bind('init', proxy(this, 'viewInit'));\n }\n },\n options: {\n name: 'ScrollView',\n page: 0,\n duration: 400,\n velocityThreshold: 0.8,\n contentHeight: 'auto',\n pageSize: 1,\n itemsPerPage: 1,\n bounceVelocityThreshold: 1.6,\n enablePager: true,\n pagerOverlay: false,\n autoBind: true,\n template: '',\n emptyTemplate: ''\n },\n events: [\n CHANGING,\n CHANGE,\n REFRESH\n ],\n destroy: function () {\n Widget.fn.destroy.call(this);\n kendo.destroy(this.element);\n },\n viewInit: function () {\n if (this.options.autoBind) {\n this._content.scrollTo(this._content.page, true);\n }\n },\n viewShow: function () {\n this.pane.refresh();\n },\n refresh: function () {\n var content = this._content;\n content.resizeTo(this.pane.size());\n this.page = content.page;\n this.trigger(REFRESH, {\n pageCount: content.pageCount,\n page: content.page\n });\n },\n content: function (html) {\n this.element.children().first().html(html);\n this._content._getPages();\n this.pane.refresh();\n },\n value: function (item) {\n var dataSource = this.dataSource;\n if (item) {\n this.scrollTo(dataSource.indexOf(item), true);\n } else {\n return dataSource.at(this.page);\n }\n },\n scrollTo: function (page, instant) {\n this._content.scrollTo(page, instant);\n this._syncWithContent();\n },\n prev: function () {\n var that = this, prevPage = that.page - 1;\n if (that._content instanceof VirtualScrollViewContent) {\n that._content.paneMoved(RIGHT_SWIPE, undefined, function (eventData) {\n return that.trigger(CHANGING, eventData);\n });\n } else if (prevPage > -1) {\n that.scrollTo(prevPage);\n }\n },\n next: function () {\n var that = this, nextPage = that.page + 1;\n if (that._content instanceof VirtualScrollViewContent) {\n that._content.paneMoved(LEFT_SWIPE, undefined, function (eventData) {\n return that.trigger(CHANGING, eventData);\n });\n } else if (nextPage < that._content.pageCount) {\n that.scrollTo(nextPage);\n }\n },\n setDataSource: function (dataSource) {\n if (!(this._content instanceof VirtualScrollViewContent)) {\n return;\n }\n var emptyDataSource = !dataSource;\n this.dataSource = DataSource.create(dataSource);\n this._content.setDataSource(this.dataSource);\n if (this.options.autoBind && !emptyDataSource) {\n this.dataSource.fetch();\n }\n },\n items: function () {\n return this.element.find('.km-' + VIRTUAL_PAGE_CLASS);\n },\n _syncWithContent: function () {\n var pages = this._content.pages, buffer = this._content.buffer, data, element;\n this.page = this._content.page;\n data = buffer ? buffer.at(this.page) : undefined;\n if (!(data instanceof Array)) {\n data = [data];\n }\n element = pages ? pages[1].element : undefined;\n this.trigger(CHANGE, {\n page: this.page,\n element: element,\n data: data\n });\n },\n _dragStart: function () {\n if (this._content.forcePageUpdate()) {\n this._syncWithContent();\n }\n },\n _dragEnd: function (e) {\n var that = this, velocity = e.x.velocity, velocityThreshold = this.options.velocityThreshold, swipeType = NUDGE, bounce = abs(velocity) > this.options.bounceVelocityThreshold;\n if (velocity > velocityThreshold) {\n swipeType = RIGHT_SWIPE;\n } else if (velocity < -velocityThreshold) {\n swipeType = LEFT_SWIPE;\n }\n this._content.paneMoved(swipeType, bounce, function (eventData) {\n return that.trigger(CHANGING, eventData);\n });\n },\n _transitionEnd: function () {\n if (this._content.updatePage()) {\n this._syncWithContent();\n }\n }\n });\n ui.plugin(ScrollView);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.switch', [\n 'kendo.fx',\n 'kendo.userevents'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.switch',\n name: 'Switch',\n category: 'mobile',\n description: 'The mobile Switch widget is used to display two exclusive choices.',\n depends: [\n 'fx',\n 'userevents'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.mobile.ui, outerWidth = kendo._outerWidth, Widget = ui.Widget, support = kendo.support, CHANGE = 'change', SWITCHON = 'switch-on', SWITCHOFF = 'switch-off', MARGINLEFT = 'margin-left', ACTIVE_STATE = 'state-active', DISABLED_STATE = 'state-disabled', DISABLED = 'disabled', RESOLVEDPREFIX = support.transitions.css === undefined ? '' : support.transitions.css, TRANSFORMSTYLE = RESOLVEDPREFIX + 'transform', proxy = $.proxy;\n function className(name) {\n return 'km-' + name;\n }\n function limitValue(value, minLimit, maxLimit) {\n return Math.max(minLimit, Math.min(maxLimit, value));\n }\n var SWITCH_MARKUP = ' {0} {1} ';\n var Switch = Widget.extend({\n init: function (element, options) {\n var that = this, checked;\n Widget.fn.init.call(that, element, options);\n options = that.options;\n that.wrapper = $(kendo.format(SWITCH_MARKUP, options.onLabel, options.offLabel));\n that.handle = that.wrapper.find('.km-switch-handle');\n that.background = that.wrapper.find('.km-switch-background');\n that.wrapper.insertBefore(that.element).prepend(that.element);\n that._drag();\n that.origin = parseInt(that.background.css(MARGINLEFT), 10);\n that.constrain = 0;\n that.snapPoint = 0;\n element = that.element[0];\n element.type = 'checkbox';\n that._animateBackground = true;\n checked = that.options.checked;\n if (checked === null) {\n checked = element.checked;\n }\n that.check(checked);\n that.options.enable = that.options.enable && !that.element.attr(DISABLED);\n that.enable(that.options.enable);\n that.refresh();\n kendo.notify(that, kendo.mobile.ui);\n },\n refresh: function () {\n var that = this, handleWidth = outerWidth(that.handle, true);\n that.width = that.wrapper.width();\n that.constrain = that.width - handleWidth;\n that.snapPoint = that.constrain / 2;\n if (typeof that.origin != 'number') {\n that.origin = parseInt(that.background.css(MARGINLEFT), 10);\n }\n that.background.data('origin', that.origin);\n that.check(that.element[0].checked);\n },\n events: [CHANGE],\n options: {\n name: 'Switch',\n onLabel: 'on',\n offLabel: 'off',\n checked: null,\n enable: true\n },\n check: function (check) {\n var that = this, element = that.element[0];\n if (check === undefined) {\n return element.checked;\n }\n that._position(check ? that.constrain : 0);\n element.checked = check;\n that.wrapper.toggleClass(className(SWITCHON), check).toggleClass(className(SWITCHOFF), !check);\n },\n value: function () {\n return this.check.apply(this, arguments);\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.userEvents.destroy();\n },\n toggle: function () {\n var that = this;\n that.check(!that.element[0].checked);\n },\n enable: function (enable) {\n var element = this.element, wrapper = this.wrapper;\n if (typeof enable == 'undefined') {\n enable = true;\n }\n this.options.enable = enable;\n if (enable) {\n element.removeAttr(DISABLED);\n } else {\n element.attr(DISABLED, DISABLED);\n }\n wrapper.toggleClass(className(DISABLED_STATE), !enable);\n },\n _resize: function () {\n this.refresh();\n },\n _move: function (e) {\n var that = this;\n e.preventDefault();\n that._position(limitValue(that.position + e.x.delta, 0, that.width - outerWidth(that.handle, true)));\n },\n _position: function (position) {\n var that = this;\n that.position = position;\n that.handle.css(TRANSFORMSTYLE, 'translatex(' + position + 'px)');\n if (that._animateBackground) {\n that.background.css(MARGINLEFT, that.origin + position);\n }\n },\n _start: function () {\n if (!this.options.enable) {\n this.userEvents.cancel();\n } else {\n this.userEvents.capture();\n this.handle.addClass(className(ACTIVE_STATE));\n }\n },\n _stop: function () {\n var that = this;\n that.handle.removeClass(className(ACTIVE_STATE));\n that._toggle(that.position > that.snapPoint);\n },\n _toggle: function (checked) {\n var that = this, handle = that.handle, element = that.element[0], value = element.checked, duration = kendo.mobile.application && kendo.mobile.application.os.wp ? 100 : 200, distance;\n that.wrapper.toggleClass(className(SWITCHON), checked).toggleClass(className(SWITCHOFF), !checked);\n that.position = distance = checked * that.constrain;\n if (that._animateBackground) {\n that.background.kendoStop(true, true).kendoAnimate({\n effects: 'slideMargin',\n offset: distance,\n reset: true,\n reverse: !checked,\n axis: 'left',\n duration: duration\n });\n }\n handle.kendoStop(true, true).kendoAnimate({\n effects: 'slideTo',\n duration: duration,\n offset: distance + 'px,0',\n reset: true,\n complete: function () {\n if (value !== checked) {\n element.checked = checked;\n that.trigger(CHANGE, { checked: checked });\n }\n }\n });\n },\n _drag: function () {\n var that = this;\n that.userEvents = new kendo.UserEvents(that.wrapper, {\n fastTap: true,\n tap: function () {\n if (that.options.enable) {\n that._toggle(!that.element[0].checked);\n }\n },\n start: proxy(that._start, that),\n move: proxy(that._move, that),\n end: proxy(that._stop, that)\n });\n }\n });\n ui.plugin(Switch);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.tabstrip', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.tabstrip',\n name: 'TabStrip',\n category: 'mobile',\n description: 'The mobile TabStrip widget is used inside a mobile view or layout footer element to display an application-wide group of navigation buttons.',\n depends: ['core']\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.mobile.ui, Widget = ui.Widget, ACTIVE_STATE_CLASS = 'km-state-active', SELECT = 'select';\n function createBadge(value) {\n return $('' + value + '');\n }\n var TabStrip = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n that.container().bind('show', $.proxy(this, 'refresh'));\n that.element.addClass('km-tabstrip').find('a').each(that._buildButton).eq(that.options.selectedIndex).addClass(ACTIVE_STATE_CLASS);\n that.element.on('down', 'a', '_release');\n },\n events: [SELECT],\n switchTo: function (url) {\n var tabs = this.element.find('a'), tab, path, idx = 0, length = tabs.length;\n if (isNaN(url)) {\n for (; idx < length; idx++) {\n tab = tabs[idx];\n path = tab.href.replace(/(\\#.+)(\\?.+)$/, '$1');\n if (path.indexOf(url, path.length - url.length) !== -1) {\n this._setActiveItem($(tab));\n return true;\n }\n }\n } else {\n this._setActiveItem(tabs.eq(url));\n return true;\n }\n return false;\n },\n switchByFullUrl: function (url) {\n var tab;\n tab = this.element.find('a[href$=\\'' + url + '\\']');\n this._setActiveItem(tab);\n },\n clear: function () {\n this.currentItem().removeClass(ACTIVE_STATE_CLASS);\n },\n currentItem: function () {\n return this.element.children('.' + ACTIVE_STATE_CLASS);\n },\n badge: function (item, value) {\n var tabstrip = this.element, badge;\n if (!isNaN(item)) {\n item = tabstrip.children().get(item);\n }\n item = tabstrip.find(item);\n badge = $(item.find('.km-badge')[0] || createBadge(value).insertAfter(item.children('.km-icon')));\n if (value || value === 0) {\n badge.html(value);\n return this;\n }\n if (value === false) {\n badge.empty().remove();\n return this;\n }\n return badge.html();\n },\n _release: function (e) {\n if (e.which > 1) {\n return;\n }\n var that = this, item = $(e.currentTarget);\n if (item[0] === that.currentItem()[0]) {\n return;\n }\n if (that.trigger(SELECT, { item: item })) {\n e.preventDefault();\n } else {\n that._setActiveItem(item);\n }\n },\n _setActiveItem: function (item) {\n if (!item[0]) {\n return;\n }\n this.clear();\n item.addClass(ACTIVE_STATE_CLASS);\n },\n _buildButton: function () {\n var button = $(this), icon = kendo.attrValue(button, 'icon'), badge = kendo.attrValue(button, 'badge'), image = button.find('img'), iconSpan = $('');\n button.addClass('km-button').attr(kendo.attr('role'), 'tab').contents().not(image).wrapAll('');\n if (image[0]) {\n image.addClass('km-image').prependTo(button);\n } else {\n button.prepend(iconSpan);\n if (icon) {\n iconSpan.addClass('km-' + icon);\n if (badge || badge === 0) {\n createBadge(badge).insertAfter(iconSpan);\n }\n }\n }\n },\n refresh: function (e) {\n var url = e.view.id;\n if (url && !this.switchTo(e.view.id)) {\n this.switchTo(url);\n }\n },\n options: {\n name: 'TabStrip',\n selectedIndex: 0,\n enable: true\n }\n });\n ui.plugin(TabStrip);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.angular', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'angular',\n name: 'AngularJS Directives',\n category: 'framework',\n description: 'Adds Kendo UI for AngularJS directives',\n depends: ['core'],\n defer: true\n };\n (function ($, angular, undefined) {\n 'use strict';\n if (!angular || !angular.injector) {\n return;\n }\n var module = angular.module('kendo.directives', []), $injector = angular.injector(['ng']), $parse = $injector.get('$parse'), $timeout = $injector.get('$timeout'), $defaultCompile, $log = $injector.get('$log');\n function withoutTimeout(f) {\n var save = $timeout;\n try {\n $timeout = function (f) {\n return f();\n };\n return f();\n } finally {\n $timeout = save;\n }\n }\n var OPTIONS_NOW;\n var createDataSource = function () {\n var types = {\n TreeList: 'TreeListDataSource',\n TreeView: 'HierarchicalDataSource',\n Scheduler: 'SchedulerDataSource',\n PivotGrid: 'PivotDataSource',\n PivotConfigurator: 'PivotDataSource',\n PanelBar: 'HierarchicalDataSource',\n Menu: '$PLAIN',\n ContextMenu: '$PLAIN'\n };\n var toDataSource = function (dataSource, type) {\n if (type == '$PLAIN') {\n return dataSource;\n }\n return kendo.data[type].create(dataSource);\n };\n return function (scope, element, role, source) {\n var type = types[role] || 'DataSource';\n var current = scope.$eval(source);\n var ds = toDataSource(current, type);\n scope.$watch(source, function (mew) {\n var widget = kendoWidgetInstance(element);\n if (widget && typeof widget.setDataSource == 'function') {\n if (mew !== current && mew !== widget.dataSource) {\n var ds = toDataSource(mew, type);\n widget.setDataSource(ds);\n current = mew;\n }\n }\n });\n return ds;\n };\n }();\n var ignoredAttributes = {\n kDataSource: true,\n kOptions: true,\n kRebind: true,\n kNgModel: true,\n kNgDelay: true\n };\n var ignoredOwnProperties = {\n name: true,\n title: true,\n style: true\n };\n function createWidget(scope, element, attrs, widget, origAttr, controllers) {\n if (!(element instanceof jQuery)) {\n throw new Error('The Kendo UI directives require jQuery to be available before AngularJS. Please include jquery before angular in the document.');\n }\n var kNgDelay = attrs.kNgDelay, delayValue = scope.$eval(kNgDelay);\n controllers = controllers || [];\n var ngModel = controllers[0], ngForm = controllers[1];\n var ctor = $(element)[widget];\n if (!ctor) {\n window.console.error('Could not find: ' + widget);\n return null;\n }\n var parsed = parseOptions(scope, element, attrs, widget, ctor);\n var options = parsed.options;\n if (parsed.unresolved.length) {\n var promises = [];\n for (var i = 0, len = parsed.unresolved.length; i < len; i++) {\n var unresolved = parsed.unresolved[i];\n var promise = $.Deferred(function (d) {\n var unwatch = scope.$watch(unresolved.path, function (newValue) {\n if (newValue !== undefined) {\n unwatch();\n d.resolve();\n }\n });\n }).promise();\n promises.push(promise);\n }\n $.when.apply(null, promises).then(createIt);\n return;\n }\n if (kNgDelay && !delayValue) {\n var root = scope.$root || scope;\n var register = function () {\n var unregister = scope.$watch(kNgDelay, function (newValue) {\n if (newValue !== undefined) {\n unregister();\n element.removeAttr(attrs.$attr.kNgDelay);\n kNgDelay = null;\n $timeout(createIt);\n }\n });\n };\n if (/^\\$(digest|apply)$/.test(root.$$phase)) {\n register();\n } else {\n scope.$apply(register);\n }\n return;\n } else {\n return createIt();\n }\n function createIt() {\n var originalElement;\n if (attrs.kRebind) {\n originalElement = $($(element)[0].cloneNode(true));\n }\n options = parseOptions(scope, element, attrs, widget, ctor).options;\n if (element.is('select')) {\n (function (options) {\n if (options.length > 0) {\n var first = $(options[0]);\n if (!/\\S/.test(first.text()) && /^\\?/.test(first.val())) {\n first.remove();\n }\n for (var i = 0; i < options.length; i++) {\n $(options[i]).off('$destroy');\n }\n }\n }(element[0].options));\n }\n var object = ctor.call(element, OPTIONS_NOW = options).data(widget);\n exposeWidget(object, scope, attrs, widget, origAttr);\n scope.$emit('kendoWidgetCreated', object);\n var destroyRegister = destroyWidgetOnScopeDestroy(scope, object);\n if (attrs.kRebind) {\n setupRebind(object, scope, element, originalElement, attrs.kRebind, destroyRegister, attrs);\n }\n if (attrs.kNgDisabled) {\n var kNgDisabled = attrs.kNgDisabled;\n var isDisabled = scope.$eval(kNgDisabled);\n if (isDisabled) {\n object.enable(!isDisabled);\n }\n bindToKNgDisabled(object, scope, element, kNgDisabled);\n }\n if (attrs.kNgReadonly) {\n var kNgReadonly = attrs.kNgReadonly;\n var isReadonly = scope.$eval(kNgReadonly);\n if (isReadonly) {\n object.readonly(isReadonly);\n }\n bindToKNgReadonly(object, scope, element, kNgReadonly);\n }\n if (attrs.kNgModel) {\n bindToKNgModel(object, scope, attrs.kNgModel);\n }\n if (ngModel) {\n bindToNgModel(object, scope, element, ngModel, ngForm);\n }\n if (object) {\n propagateClassToWidgetWrapper(object, element);\n }\n return object;\n }\n }\n function parseOptions(scope, element, attrs, widget, ctor) {\n var role = widget.replace(/^kendo/, '');\n var unresolved = [];\n var optionsPath = attrs.kOptions || attrs.options;\n var optionsValue = scope.$eval(optionsPath);\n if (optionsPath && optionsValue === undefined) {\n unresolved.push({\n option: 'options',\n path: optionsPath\n });\n }\n var options = angular.extend({}, attrs.defaultOptions, optionsValue);\n function addOption(name, value) {\n var scopeValue = angular.copy(scope.$eval(value));\n if (scopeValue === undefined) {\n unresolved.push({\n option: name,\n path: value\n });\n } else {\n options[name] = scopeValue;\n }\n }\n var widgetOptions = ctor.widget.prototype.options;\n var widgetEvents = ctor.widget.prototype.events;\n $.each(attrs, function (name, value) {\n if (name === 'source' || name === 'kDataSource' || name === 'kScopeField' || name === 'scopeField') {\n return;\n }\n var dataName = 'data' + name.charAt(0).toUpperCase() + name.slice(1);\n if (name.indexOf('on') === 0) {\n var eventKey = name.replace(/^on./, function (prefix) {\n return prefix.charAt(2).toLowerCase();\n });\n if (widgetEvents.indexOf(eventKey) > -1) {\n options[eventKey] = value;\n }\n }\n if (widgetOptions.hasOwnProperty(dataName)) {\n addOption(dataName, value);\n } else if (widgetOptions.hasOwnProperty(name) && !ignoredOwnProperties[name]) {\n addOption(name, value);\n } else if (!ignoredAttributes[name]) {\n var match = name.match(/^k(On)?([A-Z].*)/);\n if (match) {\n var optionName = match[2].charAt(0).toLowerCase() + match[2].slice(1);\n if (match[1] && name != 'kOnLabel') {\n options[optionName] = value;\n } else {\n if (name == 'kOnLabel') {\n optionName = 'onLabel';\n }\n addOption(optionName, value);\n }\n }\n }\n });\n var dataSource = attrs.kDataSource || attrs.source;\n if (dataSource) {\n options.dataSource = createDataSource(scope, element, role, dataSource);\n }\n options.$angular = [scope];\n return {\n options: options,\n unresolved: unresolved\n };\n }\n function bindToKNgDisabled(widget, scope, element, kNgDisabled) {\n if (kendo.ui.PanelBar && widget instanceof kendo.ui.PanelBar || kendo.ui.Menu && widget instanceof kendo.ui.Menu) {\n $log.warn('k-ng-disabled specified on a widget that does not have the enable() method: ' + widget.options.name);\n return;\n }\n scope.$watch(kNgDisabled, function (newValue, oldValue) {\n if (newValue != oldValue) {\n widget.enable(!newValue);\n }\n });\n }\n function bindToKNgReadonly(widget, scope, element, kNgReadonly) {\n if (typeof widget.readonly != 'function') {\n $log.warn('k-ng-readonly specified on a widget that does not have the readonly() method: ' + widget.options.name);\n return;\n }\n scope.$watch(kNgReadonly, function (newValue, oldValue) {\n if (newValue != oldValue) {\n widget.readonly(newValue);\n }\n });\n }\n function exposeWidget(widget, scope, attrs, kendoWidget, origAttr) {\n if (attrs[origAttr]) {\n var set = $parse(attrs[origAttr]).assign;\n if (set) {\n set(scope, widget);\n } else {\n throw new Error(origAttr + ' attribute used but expression in it is not assignable: ' + attrs[kendoWidget]);\n }\n }\n }\n function formValue(element) {\n if (/checkbox|radio/i.test(element.attr('type'))) {\n return element.prop('checked');\n }\n return element.val();\n }\n var formRegExp = /^(input|select|textarea)$/i;\n function isForm(element) {\n return formRegExp.test(element[0].tagName);\n }\n function bindToNgModel(widget, scope, element, ngModel, ngForm) {\n if (!widget.value) {\n return;\n }\n var value;\n var haveChangeOnElement = false;\n if (isForm(element)) {\n value = function () {\n return formValue(element);\n };\n } else {\n value = function () {\n return widget.value();\n };\n }\n var viewRender = function () {\n var val = ngModel.$viewValue;\n if (val === undefined) {\n val = ngModel.$modelValue;\n }\n if (val === undefined) {\n val = null;\n }\n haveChangeOnElement = true;\n setTimeout(function () {\n haveChangeOnElement = false;\n if (widget) {\n var kNgModel = scope[widget.element.attr('k-ng-model')];\n if (kNgModel) {\n val = kNgModel;\n }\n if (widget.options.autoBind === false && !widget.listView.bound()) {\n if (val) {\n widget.value(val);\n }\n } else {\n widget.value(val);\n }\n }\n }, 0);\n };\n ngModel.$render = viewRender;\n setTimeout(function () {\n if (ngModel.$render !== viewRender) {\n ngModel.$render = viewRender;\n ngModel.$render();\n }\n });\n if (isForm(element)) {\n element.on('change', function () {\n haveChangeOnElement = true;\n });\n }\n var onChange = function (pristine) {\n return function () {\n var formPristine;\n if (haveChangeOnElement && !element.is('select')) {\n return;\n }\n if (pristine && ngForm) {\n formPristine = ngForm.$pristine;\n }\n ngModel.$setViewValue(value());\n if (pristine) {\n ngModel.$setPristine();\n if (formPristine) {\n ngForm.$setPristine();\n }\n }\n digest(scope);\n };\n };\n widget.first('change', onChange(false));\n widget.first('spin', onChange(false));\n if (!(kendo.ui.AutoComplete && widget instanceof kendo.ui.AutoComplete)) {\n widget.first('dataBound', onChange(true));\n }\n var currentVal = value();\n if (!isNaN(ngModel.$viewValue) && currentVal != ngModel.$viewValue) {\n if (!ngModel.$isEmpty(ngModel.$viewValue)) {\n widget.value(ngModel.$viewValue);\n } else if (currentVal != null && currentVal !== '' && currentVal != ngModel.$viewValue) {\n ngModel.$setViewValue(currentVal);\n }\n }\n ngModel.$setPristine();\n }\n function bindToKNgModel(widget, scope, kNgModel) {\n if (kendo.ui.DateRangePicker && widget instanceof kendo.ui.DateRangePicker) {\n var rangePickerModels = kNgModel.split(',');\n var rangePickerStartModel = rangePickerModels[0].trim();\n var rangePickerEndModel;\n bindToKNgModel(widget._startDateInput, scope, rangePickerStartModel);\n if (rangePickerModels[1]) {\n rangePickerEndModel = rangePickerModels[1].trim();\n bindToKNgModel(widget._endDateInput, scope, rangePickerEndModel);\n widget.range({\n start: scope[rangePickerStartModel],\n end: scope[rangePickerEndModel]\n });\n } else {\n widget.range({\n start: scope[rangePickerStartModel],\n end: null\n });\n }\n return;\n }\n if (typeof widget.value != 'function') {\n $log.warn('k-ng-model specified on a widget that does not have the value() method: ' + widget.options.name);\n return;\n }\n var form = $(widget.element).parents('ng-form, form').first();\n var ngForm = kendo.getter(form.attr('name'), true)(scope);\n var getter = $parse(kNgModel);\n var setter = getter.assign;\n var updating = false;\n var valueIsCollection = kendo.ui.MultiSelect && widget instanceof kendo.ui.MultiSelect || kendo.ui.RangeSlider && widget instanceof kendo.ui.RangeSlider;\n var length = function (value) {\n return value && valueIsCollection ? value.length : 0;\n };\n var currentValueLength = length(getter(scope));\n widget.$angular_setLogicValue(getter(scope));\n var watchHandler = function (newValue, oldValue) {\n if (newValue === undefined) {\n newValue = null;\n }\n if (updating || newValue == oldValue && length(newValue) == currentValueLength) {\n return;\n }\n currentValueLength = length(newValue);\n widget.$angular_setLogicValue(newValue);\n };\n if (valueIsCollection) {\n scope.$watchCollection(kNgModel, watchHandler);\n } else {\n scope.$watch(kNgModel, watchHandler);\n }\n var changeHandler = function () {\n updating = true;\n if (ngForm && ngForm.$pristine) {\n ngForm.$setDirty();\n }\n digest(scope, function () {\n setter(scope, widget.$angular_getLogicValue());\n currentValueLength = length(getter(scope));\n });\n updating = false;\n };\n widget.first('change', changeHandler);\n widget.first('spin', changeHandler);\n }\n function destroyWidgetOnScopeDestroy(scope, widget) {\n var deregister = scope.$on('$destroy', function () {\n deregister();\n if (widget) {\n kendo.destroy(widget.element);\n widget = null;\n }\n });\n return deregister;\n }\n function propagateClassToWidgetWrapper(widget, element) {\n if (!(window.MutationObserver && widget.wrapper)) {\n return;\n }\n var prevClassList = [].slice.call($(element)[0].classList);\n var mo = new MutationObserver(function (changes) {\n suspend();\n if (!widget) {\n return;\n }\n changes.forEach(function (chg) {\n var w = $(widget.wrapper)[0];\n switch (chg.attributeName) {\n case 'class':\n var currClassList = [].slice.call(chg.target.classList);\n currClassList.forEach(function (cls) {\n if (prevClassList.indexOf(cls) < 0) {\n w.classList.add(cls);\n if (kendo.ui.ComboBox && widget instanceof kendo.ui.ComboBox) {\n widget.input[0].classList.add(cls);\n }\n }\n });\n prevClassList.forEach(function (cls) {\n if (currClassList.indexOf(cls) < 0) {\n w.classList.remove(cls);\n if (kendo.ui.ComboBox && widget instanceof kendo.ui.ComboBox) {\n widget.input[0].classList.remove(cls);\n }\n }\n });\n prevClassList = currClassList;\n break;\n case 'disabled':\n if (typeof widget.enable == 'function' && !widget.element.attr('readonly')) {\n widget.enable(!$(chg.target).attr('disabled'));\n }\n break;\n case 'readonly':\n if (typeof widget.readonly == 'function' && !widget.element.attr('disabled')) {\n widget.readonly(!!$(chg.target).attr('readonly'));\n }\n break;\n }\n });\n resume();\n });\n function suspend() {\n mo.disconnect();\n }\n function resume() {\n mo.observe($(element)[0], { attributes: true });\n }\n resume();\n widget.first('destroy', suspend);\n }\n function setupRebind(widget, scope, element, originalElement, rebindAttr, destroyRegister, attrs) {\n var unregister = scope.$watch(rebindAttr, function (newValue, oldValue) {\n if (!widget._muteRebind && newValue !== oldValue) {\n unregister();\n if (attrs._cleanUp) {\n attrs._cleanUp();\n }\n var templateOptions = WIDGET_TEMPLATE_OPTIONS[widget.options.name];\n if (templateOptions) {\n templateOptions.forEach(function (name) {\n var templateContents = scope.$eval(attrs['k' + name]);\n if (templateContents) {\n originalElement.append($(templateContents).attr(kendo.toHyphens('k' + name), ''));\n }\n });\n }\n var _wrapper = $(widget.wrapper)[0];\n var _element = $(widget.element)[0];\n var isUpload = widget.options.name === 'Upload';\n if (isUpload) {\n element = $(_element);\n }\n var compile = element.injector().get('$compile');\n widget._destroy();\n if (destroyRegister) {\n destroyRegister();\n }\n widget = null;\n if (_element) {\n if (_wrapper) {\n _wrapper.parentNode.replaceChild(_element, _wrapper);\n }\n $(element).replaceWith(originalElement);\n }\n compile(originalElement)(scope);\n }\n }, true);\n digest(scope);\n }\n function bind(f, obj) {\n return function (a, b) {\n return f.call(obj, a, b);\n };\n }\n function setTemplate(key, value) {\n this[key] = kendo.stringify(value);\n }\n module.factory('directiveFactory', [\n '$compile',\n function (compile) {\n var kendoRenderedTimeout;\n var RENDERED = false;\n $defaultCompile = compile;\n var create = function (role, origAttr) {\n return {\n restrict: 'AC',\n require: [\n '?ngModel',\n '^?form'\n ],\n scope: false,\n controller: [\n '$scope',\n '$attrs',\n '$element',\n function ($scope, $attrs) {\n this.template = bind(setTemplate, $attrs);\n $attrs._cleanUp = bind(function () {\n this.template = null;\n $attrs._cleanUp = null;\n }, this);\n }\n ],\n link: function (scope, element, attrs, controllers) {\n var $element = $(element);\n var roleattr = role.replace(/([A-Z])/g, '-$1');\n $element.attr(roleattr, $element.attr('data-' + roleattr));\n $element[0].removeAttribute('data-' + roleattr);\n var widget = createWidget(scope, element, attrs, role, origAttr, controllers);\n if (!widget) {\n return;\n }\n if (kendoRenderedTimeout) {\n clearTimeout(kendoRenderedTimeout);\n }\n kendoRenderedTimeout = setTimeout(function () {\n scope.$emit('kendoRendered');\n if (!RENDERED) {\n RENDERED = true;\n $('form').each(function () {\n var form = $(this).controller('form');\n if (form) {\n form.$setPristine();\n }\n });\n }\n });\n }\n };\n };\n return { create: create };\n }\n ]);\n var TAGNAMES = {\n Editor: 'textarea',\n NumericTextBox: 'input',\n DatePicker: 'input',\n DateTimePicker: 'input',\n TimePicker: 'input',\n AutoComplete: 'input',\n ColorPicker: 'input',\n MaskedTextBox: 'input',\n MultiSelect: 'input',\n Upload: 'input',\n Validator: 'form',\n Button: 'button',\n MobileButton: 'a',\n MobileBackButton: 'a',\n MobileDetailButton: 'a',\n ListView: 'ul',\n MobileListView: 'ul',\n ScrollView: 'div',\n PanelBar: 'ul',\n TreeView: 'ul',\n Menu: 'ul',\n ContextMenu: 'ul',\n ActionSheet: 'ul',\n Switch: 'input'\n };\n var SKIP_SHORTCUTS = [\n 'MobileView',\n 'MobileDrawer',\n 'MobileLayout',\n 'MobileSplitView',\n 'MobilePane',\n 'MobileModalView'\n ];\n var MANUAL_DIRECTIVES = [\n 'MobileApplication',\n 'MobileView',\n 'MobileModalView',\n 'MobileLayout',\n 'MobileActionSheet',\n 'MobileDrawer',\n 'MobileSplitView',\n 'MobilePane',\n 'MobileScrollView',\n 'MobilePopOver'\n ];\n angular.forEach([\n 'MobileNavBar',\n 'MobileButton',\n 'MobileBackButton',\n 'MobileDetailButton',\n 'MobileTabStrip',\n 'MobileScrollView',\n 'MobileScroller'\n ], function (widget) {\n MANUAL_DIRECTIVES.push(widget);\n widget = 'kendo' + widget;\n module.directive(widget, function () {\n return {\n restrict: 'A',\n link: function (scope, element, attrs) {\n createWidget(scope, element, attrs, widget, widget);\n }\n };\n });\n });\n function createDirectives(klass, isMobile) {\n function make(directiveName, widgetName) {\n module.directive(directiveName, [\n 'directiveFactory',\n function (directiveFactory) {\n return directiveFactory.create(widgetName, directiveName);\n }\n ]);\n }\n var name = isMobile ? 'Mobile' : '';\n name += klass.fn.options.name;\n var className = name;\n var shortcut = 'kendo' + name.charAt(0) + name.substr(1).toLowerCase();\n name = 'kendo' + name;\n var dashed = name.replace(/([A-Z])/g, '-$1');\n if (SKIP_SHORTCUTS.indexOf(name.replace('kendo', '')) == -1) {\n var names = name === shortcut ? [name] : [\n name,\n shortcut\n ];\n angular.forEach(names, function (directiveName) {\n module.directive(directiveName, function () {\n return {\n restrict: 'E',\n replace: true,\n template: function (element, attributes) {\n var tag = TAGNAMES[className] || 'div';\n var scopeField = attributes.kScopeField || attributes.scopeField;\n return '<' + tag + ' ' + dashed + (scopeField ? '=\"' + scopeField + '\"' : '') + '>' + element.html() + '';\n }\n };\n });\n });\n }\n if (MANUAL_DIRECTIVES.indexOf(name.replace('kendo', '')) > -1) {\n return;\n }\n make(name, name);\n if (shortcut != name) {\n make(shortcut, name);\n }\n }\n function kendoWidgetInstance(el) {\n el = $(el);\n return kendo.widgetInstance(el, kendo.ui) || kendo.widgetInstance(el, kendo.mobile.ui) || kendo.widgetInstance(el, kendo.dataviz.ui);\n }\n function digest(scope, func) {\n var root = scope.$root || scope;\n var isDigesting = /^\\$(digest|apply)$/.test(root.$$phase);\n if (func) {\n if (isDigesting) {\n func();\n } else {\n root.$apply(func);\n }\n } else if (!isDigesting) {\n root.$digest();\n }\n }\n function destroyScope(scope, el) {\n scope.$destroy();\n if (el) {\n $(el).removeData('$scope').removeData('$$kendoScope').removeData('$isolateScope').removeData('$isolateScopeNoTemplate').removeClass('ng-scope');\n }\n }\n var encode = kendo.htmlEncode;\n var open = /{{/g;\n var close = /}}/g;\n var encOpen = '{​{';\n var encClose = '}​}';\n kendo.htmlEncode = function (str) {\n return encode(str).replace(open, encOpen).replace(close, encClose);\n };\n var pendingPatches = [];\n function defadvice(klass, methodName, func) {\n if ($.isArray(klass)) {\n return angular.forEach(klass, function (klass) {\n defadvice(klass, methodName, func);\n });\n }\n if (typeof klass == 'string') {\n var a = klass.split('.');\n var x = kendo;\n while (x && a.length > 0) {\n x = x[a.shift()];\n }\n if (!x) {\n pendingPatches.push([\n klass,\n methodName,\n func\n ]);\n return false;\n }\n klass = x.prototype;\n }\n var origMethod = klass[methodName];\n klass[methodName] = function () {\n var self = this, args = arguments;\n return func.apply({\n self: self,\n next: function () {\n return origMethod.apply(self, arguments.length > 0 ? arguments : args);\n }\n }, args);\n };\n return true;\n }\n kendo.onWidgetRegistered(function (entry) {\n pendingPatches = $.grep(pendingPatches, function (args) {\n return !defadvice.apply(null, args);\n });\n createDirectives(entry.widget, entry.prefix == 'Mobile');\n });\n defadvice([\n 'ui.Widget',\n 'mobile.ui.Widget'\n ], 'angular', function (cmd, arg) {\n var self = this.self;\n if (cmd == 'init') {\n if (!arg && OPTIONS_NOW) {\n arg = OPTIONS_NOW;\n }\n OPTIONS_NOW = null;\n if (arg && arg.$angular) {\n self.$angular_scope = arg.$angular[0];\n self.$angular_init(self.element, arg);\n }\n return;\n }\n var scope = self.$angular_scope;\n if (scope) {\n withoutTimeout(function () {\n var x = arg(), elements = x.elements, data = x.data;\n if (elements.length > 0) {\n switch (cmd) {\n case 'cleanup':\n angular.forEach(elements, function (el) {\n var itemScope = $(el).data('$$kendoScope');\n if (itemScope && itemScope !== scope && itemScope.$$kendoScope) {\n destroyScope(itemScope, el);\n }\n });\n break;\n case 'compile':\n var injector = self.element.injector();\n var compile = injector ? injector.get('$compile') : $defaultCompile;\n angular.forEach(elements, function (el, i) {\n var itemScope;\n if (x.scopeFrom) {\n itemScope = x.scopeFrom;\n } else {\n var vars = data && data[i];\n if (vars !== undefined) {\n itemScope = $.extend(scope.$new(), vars);\n itemScope.$$kendoScope = true;\n } else {\n itemScope = scope;\n }\n }\n $(el).data('$$kendoScope', itemScope);\n compile(el)(itemScope);\n });\n digest(scope);\n break;\n }\n }\n });\n }\n });\n defadvice('ui.Widget', '$angular_getLogicValue', function () {\n return this.self.value();\n });\n defadvice('ui.Widget', '$angular_setLogicValue', function (val) {\n this.self.value(val);\n });\n defadvice('ui.Select', '$angular_getLogicValue', function () {\n var item = this.self.dataItem(), valueField = this.self.options.dataValueField;\n if (item) {\n if (this.self.options.valuePrimitive) {\n if (!!valueField) {\n return item[valueField];\n } else {\n return item;\n }\n } else {\n return item.toJSON();\n }\n } else {\n return null;\n }\n });\n defadvice('ui.Select', '$angular_setLogicValue', function (val) {\n var self = this.self;\n var options = self.options;\n var valueField = options.dataValueField;\n var text = options.text || '';\n if (val === undefined) {\n val = '';\n }\n if (valueField && !options.valuePrimitive && val) {\n text = val[options.dataTextField] || '';\n val = val[valueField || options.dataTextField];\n }\n if (self.options.autoBind === false && !self.listView.bound()) {\n if (!text && val && options.valuePrimitive) {\n self.value(val);\n } else {\n self._preselect(val, text);\n }\n } else {\n self.value(val);\n }\n });\n defadvice('ui.MultiSelect', '$angular_getLogicValue', function () {\n var value = this.self.dataItems().slice(0);\n var valueField = this.self.options.dataValueField;\n if (valueField && this.self.options.valuePrimitive) {\n value = $.map(value, function (item) {\n return item[valueField];\n });\n }\n return value;\n });\n defadvice('ui.MultiSelect', '$angular_setLogicValue', function (val) {\n if (val == null) {\n val = [];\n }\n var self = this.self;\n var options = self.options;\n var valueField = options.dataValueField;\n var data = val;\n if (valueField && !options.valuePrimitive) {\n val = $.map(val, function (item) {\n return item[valueField];\n });\n }\n if (options.autoBind === false && !options.valuePrimitive && !self.listView.bound()) {\n self._preselect(data, val);\n } else {\n self.value(val);\n }\n });\n defadvice('ui.Widget', '$angular_init', function (element, options) {\n var self = this.self;\n if (options && !$.isArray(options)) {\n var scope = self.$angular_scope;\n for (var i = self.events.length; --i >= 0;) {\n var event = self.events[i];\n var handler = options[event];\n if (handler && typeof handler == 'string') {\n options[event] = self.$angular_makeEventHandler(event, scope, handler);\n }\n }\n }\n });\n defadvice('ui.Widget', '$angular_makeEventHandler', function (event, scope, handler) {\n handler = $parse(handler);\n return function (e) {\n digest(scope, function () {\n handler(scope, { kendoEvent: e });\n });\n };\n });\n defadvice([\n 'ui.Grid',\n 'ui.ListView',\n 'ui.TreeView',\n 'ui.PanelBar'\n ], '$angular_makeEventHandler', function (event, scope, handler) {\n if (event != 'change') {\n return this.next();\n }\n handler = $parse(handler);\n return function (ev) {\n var widget = ev.sender;\n var options = widget.options;\n var cell, multiple, locals = { kendoEvent: ev }, elems, items, columns, colIdx;\n if (angular.isString(options.selectable)) {\n cell = options.selectable.indexOf('cell') !== -1;\n multiple = options.selectable.indexOf('multiple') !== -1;\n }\n if (widget._checkBoxSelection) {\n multiple = true;\n }\n elems = locals.selected = this.select();\n items = locals.data = [];\n columns = locals.columns = [];\n for (var i = 0; i < elems.length; i++) {\n var item = cell ? elems[i].parentNode : elems[i];\n var dataItem = widget.dataItem(item);\n if (cell) {\n if (angular.element.inArray(dataItem, items) < 0) {\n items.push(dataItem);\n }\n colIdx = angular.element(elems[i]).index();\n if (angular.element.inArray(colIdx, columns) < 0) {\n columns.push(colIdx);\n }\n } else {\n items.push(dataItem);\n }\n }\n if (!multiple) {\n locals.dataItem = locals.data = items[0];\n locals.angularDataItem = kendo.proxyModelSetters(locals.dataItem);\n locals.selected = elems[0];\n }\n digest(scope, function () {\n handler(scope, locals);\n });\n };\n });\n defadvice('ui.Grid', '$angular_init', function (element, options) {\n this.next();\n if (options.columns) {\n var settings = $.extend({}, kendo.Template, options.templateSettings);\n angular.forEach(options.columns, function (col) {\n if (col.field && !col.template && !col.format && !col.values && (col.encoded === undefined || col.encoded)) {\n col.template = '#: ' + kendo.expr(col.field, settings.paramName) + '#';\n }\n });\n }\n });\n {\n defadvice('mobile.ui.ButtonGroup', 'value', function (mew) {\n var self = this.self;\n if (mew != null) {\n self.select(self.element.children('li.km-button').eq(mew));\n self.trigger('change');\n self.trigger('select', { index: self.selectedIndex });\n }\n return self.selectedIndex;\n });\n defadvice('mobile.ui.ButtonGroup', '_select', function () {\n this.next();\n this.self.trigger('change');\n });\n }\n module.directive('kendoMobileApplication', function () {\n return {\n terminal: true,\n link: function (scope, element, attrs) {\n createWidget(scope, element, attrs, 'kendoMobileApplication', 'kendoMobileApplication');\n }\n };\n }).directive('kendoMobileView', function () {\n return {\n scope: true,\n link: {\n pre: function (scope, element, attrs) {\n attrs.defaultOptions = scope.viewOptions;\n attrs._instance = createWidget(scope, element, attrs, 'kendoMobileView', 'kendoMobileView');\n },\n post: function (scope, element, attrs) {\n attrs._instance._layout();\n attrs._instance._scroller();\n }\n }\n };\n }).directive('kendoMobileDrawer', function () {\n return {\n scope: true,\n link: {\n pre: function (scope, element, attrs) {\n attrs.defaultOptions = scope.viewOptions;\n attrs._instance = createWidget(scope, element, attrs, 'kendoMobileDrawer', 'kendoMobileDrawer');\n },\n post: function (scope, element, attrs) {\n attrs._instance._layout();\n attrs._instance._scroller();\n }\n }\n };\n }).directive('kendoMobileModalView', function () {\n return {\n scope: true,\n link: {\n pre: function (scope, element, attrs) {\n attrs.defaultOptions = scope.viewOptions;\n attrs._instance = createWidget(scope, element, attrs, 'kendoMobileModalView', 'kendoMobileModalView');\n },\n post: function (scope, element, attrs) {\n attrs._instance._layout();\n attrs._instance._scroller();\n }\n }\n };\n }).directive('kendoMobileSplitView', function () {\n return {\n terminal: true,\n link: {\n pre: function (scope, element, attrs) {\n attrs.defaultOptions = scope.viewOptions;\n attrs._instance = createWidget(scope, element, attrs, 'kendoMobileSplitView', 'kendoMobileSplitView');\n },\n post: function (scope, element, attrs) {\n attrs._instance._layout();\n }\n }\n };\n }).directive('kendoMobilePane', function () {\n return {\n terminal: true,\n link: {\n pre: function (scope, element, attrs) {\n attrs.defaultOptions = scope.viewOptions;\n createWidget(scope, element, attrs, 'kendoMobilePane', 'kendoMobilePane');\n }\n }\n };\n }).directive('kendoMobileLayout', function () {\n return {\n link: {\n pre: function (scope, element, attrs) {\n createWidget(scope, element, attrs, 'kendoMobileLayout', 'kendoMobileLayout');\n }\n }\n };\n }).directive('kendoMobileActionSheet', function () {\n return {\n restrict: 'A',\n link: function (scope, element, attrs) {\n element.find('a[k-action]').each(function () {\n $(this).attr('data-' + kendo.ns + 'action', $(this).attr('k-action'));\n });\n createWidget(scope, element, attrs, 'kendoMobileActionSheet', 'kendoMobileActionSheet');\n }\n };\n }).directive('kendoMobilePopOver', function () {\n return {\n terminal: true,\n link: {\n pre: function (scope, element, attrs) {\n attrs.defaultOptions = scope.viewOptions;\n createWidget(scope, element, attrs, 'kendoMobilePopOver', 'kendoMobilePopOver');\n }\n }\n };\n }).directive('kendoViewTitle', function () {\n return {\n restrict: 'E',\n replace: true,\n template: function (element) {\n return '' + element.html() + '';\n }\n };\n }).directive('kendoMobileHeader', function () {\n return {\n restrict: 'E',\n link: function (scope, element) {\n element.addClass('km-header').attr('data-role', 'header');\n }\n };\n }).directive('kendoMobileFooter', function () {\n return {\n restrict: 'E',\n link: function (scope, element) {\n element.addClass('km-footer').attr('data-role', 'footer');\n }\n };\n }).directive('kendoMobileScrollViewPage', function () {\n return {\n restrict: 'E',\n replace: true,\n template: function (element) {\n return '
      ' + element.html() + '
      ';\n }\n };\n });\n angular.forEach([\n 'align',\n 'icon',\n 'rel',\n 'transition',\n 'actionsheetContext'\n ], function (attr) {\n var kAttr = 'k' + attr.slice(0, 1).toUpperCase() + attr.slice(1);\n module.directive(kAttr, function () {\n return {\n restrict: 'A',\n priority: 2,\n link: function (scope, element, attrs) {\n element.attr(kendo.attr(kendo.toHyphens(attr)), scope.$eval(attrs[kAttr]));\n }\n };\n });\n });\n var WIDGET_TEMPLATE_OPTIONS = {\n 'TreeMap': ['Template'],\n 'MobileListView': [\n 'HeaderTemplate',\n 'Template'\n ],\n 'MobileScrollView': [\n 'EmptyTemplate',\n 'Template'\n ],\n 'Grid': [\n 'AltRowTemplate',\n 'DetailTemplate',\n 'RowTemplate'\n ],\n 'ListView': [\n 'EditTemplate',\n 'Template',\n 'AltTemplate'\n ],\n 'Pager': [\n 'SelectTemplate',\n 'LinkTemplate'\n ],\n 'PivotGrid': [\n 'ColumnHeaderTemplate',\n 'DataCellTemplate',\n 'RowHeaderTemplate'\n ],\n 'Scheduler': [\n 'AllDayEventTemplate',\n 'DateHeaderTemplate',\n 'EventTemplate',\n 'MajorTimeHeaderTemplate',\n 'MinorTimeHeaderTemplate'\n ],\n 'ScrollView': ['Template'],\n 'PanelBar': ['Template'],\n 'TreeView': ['Template'],\n 'Validator': ['ErrorTemplate']\n };\n (function () {\n var templateDirectives = {};\n angular.forEach(WIDGET_TEMPLATE_OPTIONS, function (templates, widget) {\n angular.forEach(templates, function (template) {\n if (!templateDirectives[template]) {\n templateDirectives[template] = [];\n }\n templateDirectives[template].push('?^^kendo' + widget);\n });\n });\n angular.forEach(templateDirectives, function (parents, directive) {\n var templateName = 'k' + directive;\n var attrName = kendo.toHyphens(templateName);\n module.directive(templateName, function () {\n return {\n restrict: 'A',\n require: parents,\n terminal: true,\n compile: function ($element, $attrs) {\n if ($attrs[templateName] !== '') {\n return;\n }\n $element.removeAttr(attrName);\n var template = $element[0].outerHTML;\n return function (scope, element, attrs, controllers) {\n var controller;\n while (!controller && controllers.length) {\n controller = controllers.shift();\n }\n if (!controller) {\n $log.warn(attrName + ' without a matching parent widget found. It can be one of the following: ' + parents.join(', '));\n } else {\n controller.template(templateName, template);\n element.remove();\n }\n };\n }\n };\n });\n });\n }());\n }(window.kendo.jQuery, window.angular));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.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}));"]}