{"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","wrapper","wrapperStyle","browser","outerWidth","_outerWidth","outerHeight","_outerHeight","parent","hasClass","style","is","display","position","percentRegExp","test","boxSizing","mozBoxSizing","webkitBoxSizing","addClass","msie","floor","version","zoom","children","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","templateRegExp","template","html","containmentComparer","a","b","contains","resizableWidget","widget","inArray","attr","focusable","isTabIndexNotNaN","nodeName","disabled","href","visible","expr","filters","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","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","name","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","copy","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","target","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","webComponents","isLocalUrl","url","expression","safe","getter","setter","accessor","get","set","guid","random","id","roleSelector","role","directiveSelector","directives","selectors","triggeredByInput","tagName","onWidgetRegistered","len","logToConsole","message","console","suppressLog","log","dataSource","jQuery","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","unique","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","removeClass","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","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","isPlainObject","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","aggregates","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","flattenGroups","itemIndex","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","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","compare","localeCompare","combine","comparers","asc","valueA","valueB","__position","desc","textOp","impl","ignore","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","_sortForGrouping","groupValue","sum","average","process","query","filterCallback","parameters","operation","_store","clear","store","inmemory","schema","dataFunction","groupsFunction","serializeFunction","serializeGetters","_dataAccessFunction","groups","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","_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","deep","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","_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","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","_checkValidity","_findMessageContainer","_extractMessage","_decorateMessageContainer","replaceWith","insertAfter","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","SHOW","HIDE","TRANSITION_START","TRANSITION_END","ATTACH","DETACH","sizzleErrorRegExp","View","_wrap","_evalTemplate","evalTemplate","_fragments","notInitialized","_createElement","_eachFragment","ViewClone","triggerBeforeShow","triggerBeforeHide","showStart","showEnd","hideEnd","detach","fragments","methodName","getElementById","contents","Layout","_createContainer","showIn","ViewContainer","Fragment","attach","running","after","locationID","previousEntry","theTransition","transitionData","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","wrapInner","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","defaultTransition","$angular","_overlay","_layout","_scroller","_model","layout","getLayout","reload","stretch","modelScope","scroller","overlay","$destroy","purge","inited","_invokeNgController","_padIfNativeScrolling","isAndroid","skin","isAndroidForced","hasPlatformIndependentSkin","topContainer","bottomContainer","paddingTop","paddingBottom","contentElement","scrollerContent","idAttrValue","contentSelector","footer","controller","$apply","_callController","$scope","_locate","platform","previousView","currentView","bodyRegExp","LOAD_START","LOAD_COMPLETE","SHOW_START","SAME_VIEW_REQUESTED","VIEW_SHOW","VIEW_TYPE_DETERMINED","AFTER","ViewEngine","errorMessage","sandbox","_hideViews","rootView","rootNeeded","layouts","viewContainer","getLayoutProxy","_setupLayouts","viewOptions","loader","showView","remoteViewURLPrefix","showClosure","_findViewElement","_createView","serverNavigation","_loadView","modalViews","urlPath","_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","updating","valueIsCollection","currentValueLength","watchHandler","changeHandler","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","_wrapper","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;\n kendo.version = '2018.3.1017'.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;\n if (!element.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);\n percentage = percentWidth || percentHeight;\n if (!percentWidth && (!autosize || autosize && width)) {\n width = autosize ? outerWidth(element) + 1 : outerWidth(element);\n }\n if (!percentHeight && (!autosize || autosize && height)) {\n height = outerHeight(element);\n }\n element.wrap($('
').addClass('k-animation-container').css({\n width: width,\n height: height\n }));\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 var 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 if (browser.msie && math.floor(browser.version) <= 7) {\n element.css({ zoom: 1 });\n element.children('.k-menu').width(element.width());\n }\n return element.parent();\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 webComponents: kendo.webComponents || [],\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;\n for (option in options) {\n value = parseOption(element, option);\n if (value !== undefined) {\n if (templateRegExp.test(option)) {\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 (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.filters.visible(element) && !$(element).parents().addBack().filter(function () {\n return $.css(this, 'visibility') === 'hidden';\n }).length;\n }\n $.extend($.expr[':'], {\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 extend(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', $.unique(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', 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) {\n b += '';\n if (ignore) {\n a = '(' + a + ' || \\'\\').toString().toLowerCase()';\n b = b.toLowerCase();\n }\n return impl(a, quote(b), ignore);\n };\n }\n function operator(op, a, b, ignore) {\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(b.toLowerCase());\n a = '((' + a + ' || \\'\\')+\\'\\').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) {\n return operator('==', a, b, ignore);\n },\n neq: function (a, b, ignore) {\n return operator('!=', a, b, ignore);\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);\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) {\n var descriptor = typeof field === STRING ? {\n field: field,\n dir: dir\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 };\n });\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 if (isEmptyObject(descriptor) || !this.data.length) {\n return new Query([]);\n }\n var field = descriptor.field, sorted = 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 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 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 query = new Query(data), group = options.group, sort = normalizeGroup(group || []).concat(normalizeSort(options.sort || [])), 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 (skip !== undefined && take !== undefined) {\n query = query.range(skip, take);\n }\n if (group) {\n query = query.group(group, data);\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 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]) : 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) {\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 = 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().then(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(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 = normalizeGroup(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 result, range;\n for (var idx = 0, length = this._ranges.length; idx < length; idx++) {\n range = this._ranges[idx];\n this._eachItem(range.data, function (items) {\n result = removeModel(items, model);\n });\n if (result) {\n break;\n }\n }\n that._updateRangesLength();\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 expressions = 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') {\n value = element.checked;\n }\n return value;\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 };\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 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 ], 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, Observable = kendo.Observable, SCRIPT = 'SCRIPT', INIT = 'init', SHOW = 'show', HIDE = 'hide', TRANSITION_START = 'transitionStart', TRANSITION_END = 'transitionEnd', ATTACH = 'attach', DETACH = 'detach', sizzleErrorRegExp = /unrecognized expression/;\n var View = Observable.extend({\n init: function (content, options) {\n var that = this;\n options = options || {};\n Observable.fn.init.call(that);\n that.content = content;\n that.id = kendo.guid();\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 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 this.element.css('display', '');\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 this._eachFragment(DETACH);\n this.element.detach();\n this.trigger(HIDE);\n },\n destroy: function () {\n var element = this.element;\n if (element) {\n kendo.unbind(element);\n kendo.destroy(element);\n element.remove();\n }\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 });\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 });\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._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.unbind(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.unbind(that.downEvent, that._mousedownProxy).bind(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.unbind(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 this._scrollableParents()[method](SCROLL, this._resizeProxy);\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 'k-' + name + ' 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 (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 PanelBar: 'ul',\n TreeView: 'ul',\n Menu: 'ul',\n ContextMenu: 'ul',\n ActionSheet: 'ul'\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 '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}));"]}